From 7f5bff71d7bf01f4ee5850f675ff5c22a7b52400 Mon Sep 17 00:00:00 2001 From: Ivan Ball-llovera Date: Fri, 2 Oct 2026 19:39:51 -0400 Subject: [PATCH] docs(articles): full-sweep refresh of the article series against v1.221.0 Re-verify 51 of 53 articles against source read on 2026-10-02 (12 and 46 were already current). Four structural rewrites: 27 (AuthSessionIssuer and IsReuseSignal), 30 (RateLimiting partial, subject-first keys, 429 lockout), 49 (transactional compensation and the abandoned-failure trade-off) and 50 (M4/I9 AI boundary across four packages). Coverage fold-ins, no new article: ADR-131 same-origin proxy in 25, ADR-130 in 11, ADR-095 in 36, ADR-125 in 28 and 34, ADR-128 in 34, ADR-122 in 16, ADR-129 in 5. ADR-126 and ADR-127 recorded as scope-outs. Numbers: v1.221.0, 22 packages, 131 ADRs, 141/55 fitness methods/bases, 339 executed; Common M 96.6%, ADC 96.9%/86.0%, Store 97.5%/83.4%. Group cells fixed to taxonomy IDs (34/35/40 G25, 22 G26, 36 G23, 42 G27); 48 drops section 31 (FinOps scope-out holds). Titles: 13 and 16 H1s, 04 and 23 subtitles; card ADR labels 17 -> 102, 27 -> 097. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_013nrdrykqNDuZdtVY7iUvXB --- articles/34-category-architecture-rubric.html | 49 +- articles/architecture-fitness-functions.html | 105 ++- articles/aspire-one-command.html | 111 +-- articles/build-your-first-module.html | 152 ++-- articles/cqrs-decorator-pipeline.html | 28 +- articles/database-per-service.html | 18 +- articles/device-capability-abstraction.html | 16 +- articles/durable-internal-commands.html | 186 +++-- articles/event-schema-versioning.html | 18 +- articles/external-oauth-login.html | 16 +- articles/extract-module-to-grpc-service.html | 70 +- articles/feature-flags-cqrs-pipeline.html | 42 +- articles/generic-entity-controllers.html | 37 +- articles/governed-llm-boundary.html | 387 +++++---- articles/http-api-versioning.html | 68 +- articles/i18n-and-theming.html | 16 +- articles/idempotency-attribute.html | 57 +- articles/identity-completions.html | 142 ++-- articles/index.html | 20 +- articles/jwks-cross-service-auth.html | 125 ++- articles/jwt-refresh-token-rotation.html | 251 +++--- articles/kill-anemic-domain-model.html | 43 +- articles/managed-file-storage-avatars.html | 122 +-- articles/manual-dto-mapping.html | 18 +- .../modular-monolith-to-microservices.html | 22 +- articles/notifications-vertical-slice.html | 53 +- articles/observability-opentelemetry.html | 304 ++++--- ...urced-enterprise-dotnet-34-categories.html | 54 +- .../optimistic-concurrency-rowversion.html | 129 +-- articles/password-hashing.html | 34 +- articles/permission-based-authorization.html | 35 +- articles/polyglot-persistence.html | 150 ++-- articles/problem-details-http-grpc.html | 34 +- .../rate-limiting-brute-force-protection.html | 422 +++++----- articles/resilience-recovery-objectives.html | 20 +- .../resource-ownership-authorization.html | 229 +++--- articles/result-railway-csharp.html | 72 +- articles/reusable-blazor-ui-framework.html | 61 +- .../saga-compensation-reconciliation.html | 452 ++++++---- articles/security-headers-csp-blazor.html | 76 +- articles/self-invalidating-cache.html | 51 +- articles/self-ordering-modules.html | 55 +- articles/series-index.html | 4 +- articles/session-cookie-auth-blazor-ssr.html | 131 ++- articles/soft-delete-vs-erasure.html | 108 ++- articles/specification-pattern.html | 34 +- articles/test-pyramid.html | 99 ++- articles/transactional-outbox-dotnet.html | 72 +- articles/two-real-apps-case-study.html | 39 +- articles/validation-kit.html | 80 +- articles/write-your-first-fitness-test.html | 24 +- assets/data/articles.js | 4 +- assets/data/search-index.json | 2 +- .../34-category-architecture-rubric.md | 163 ++-- docs-src/articles/README.md | 18 +- docs-src/articles/_ledger.md | 47 +- .../architecture-fitness-functions.md | 413 +++++----- docs-src/articles/aspire-one-command.md | 305 ++++--- docs-src/articles/build-your-first-module.md | 296 ++++--- docs-src/articles/cqrs-decorator-pipeline.md | 264 +++--- docs-src/articles/database-per-service.md | 267 ++---- .../articles/device-capability-abstraction.md | 18 +- .../articles/durable-internal-commands.md | 363 ++++---- docs-src/articles/event-schema-versioning.md | 86 +- docs-src/articles/external-oauth-login.md | 236 +++--- .../extract-module-to-grpc-service.md | 288 ++++--- .../articles/feature-flags-cqrs-pipeline.md | 162 ++-- .../articles/generic-entity-controllers.md | 66 +- docs-src/articles/governed-llm-boundary.md | 591 +++++++------ docs-src/articles/http-api-versioning.md | 95 ++- docs-src/articles/i18n-and-theming.md | 21 +- docs-src/articles/idempotency-attribute.md | 214 +++-- docs-src/articles/identity-completions.md | 286 ++++--- docs-src/articles/jwks-cross-service-auth.md | 286 ++++--- .../articles/jwt-refresh-token-rotation.md | 362 ++++---- docs-src/articles/kill-anemic-domain-model.md | 254 ++++-- docs-src/articles/live-channel-push.md | 340 +++----- .../articles/managed-file-storage-avatars.md | 251 +++--- docs-src/articles/manual-dto-mapping.md | 22 +- .../modular-monolith-to-microservices.md | 128 +-- .../articles/notifications-vertical-slice.md | 292 +++---- .../articles/observability-opentelemetry.md | 524 ++++++------ ...sourced-enterprise-dotnet-34-categories.md | 168 ++-- .../optimistic-concurrency-rowversion.md | 243 +++--- docs-src/articles/password-hashing.md | 177 ++-- .../permission-based-authorization.md | 146 ++-- docs-src/articles/polyglot-persistence.md | 260 +++--- .../articles/problem-details-http-grpc.md | 164 ++-- .../rate-limiting-brute-force-protection.md | 676 +++++++-------- .../resilience-recovery-objectives.md | 27 +- .../resource-ownership-authorization.md | 394 ++++----- docs-src/articles/result-railway-csharp.md | 229 +++--- .../articles/reusable-blazor-ui-framework.md | 185 +++-- .../saga-compensation-reconciliation.md | 776 ++++++++++-------- .../articles/security-headers-csp-blazor.md | 92 ++- docs-src/articles/self-invalidating-cache.md | 359 ++++---- docs-src/articles/self-ordering-modules.md | 206 ++--- docs-src/articles/series-index.md | 79 +- .../session-cookie-auth-blazor-ssr.md | 143 ++-- docs-src/articles/soft-delete-vs-erasure.md | 434 +++++----- docs-src/articles/specification-pattern.md | 295 ++++--- docs-src/articles/test-pyramid.md | 284 +++---- .../articles/transactional-outbox-dotnet.md | 254 +++--- docs-src/articles/two-real-apps-case-study.md | 223 ++--- docs-src/articles/validation-kit.md | 176 ++-- .../articles/write-your-first-fitness-test.md | 172 ++-- feed.xml | 4 +- sitemap.xml | 106 +-- writing.html | 4 +- 109 files changed, 9787 insertions(+), 8094 deletions(-) diff --git a/articles/34-category-architecture-rubric.html b/articles/34-category-architecture-rubric.html index 4f6badb7..5b2e6415 100644 --- a/articles/34-category-architecture-rubric.html +++ b/articles/34-category-architecture-rubric.html @@ -171,7 +171,7 @@

Why "good architecture" needs a rubric

@@ -237,25 +237,26 @@

How the index is computed

are.

The worked example: MMCA.Common, scored on both axes

When I ran MMCA.Common through the rubric (the canonical, version-controlled scorecard lives in - MMCA.Common: Architecture Scorecard), it landed at a maturity index of 97.0% and + MMCA.Common: Architecture Scorecard), it landed at a maturity index of 96.6% and an implementation index of 86.0% across all 34 categories. No category sits at N/A: multi-locale i18n ships under ADR-027, which supersedes the single-locale ADR-011, and Internationalization scores - maturity 4, implementation 9 on that evidence, while AI-Native Application Architecture carries a scored - maturity 3, implementation 6 rather than an exemption. The N/A verdict stays available on principle: do - not penalize a system for a category that does not apply to it, but say so explicitly, in a decision - record that any later evidence can reopen.

-

The high scores clustered exactly where I would want them to: Clean Architecture, SOLID, Microservices + maturity 4, implementation 8 on that evidence, while AI-Native Application Architecture carries a scored + maturity 4, implementation 9 rather than an exemption, because the framework ships its own governed + model-calling package. The N/A verdict stays available on principle: do not penalize a system for a + category that does not apply to it, but say so explicitly, in a decision record that any later evidence + can reopen.

+

The high scores clustered exactly where I would want them to: Clean Architecture, Microservices Readiness, Supply-Chain, and Testability all reached maturity 4 with implementation 9, each enforced - automatically. The two axes are deliberately asymmetric: maturity (97.0%) runs ahead of implementation + automatically. The two axes are deliberately asymmetric: maturity (96.6%) runs ahead of implementation (86.0%), and that gap is the most useful thing the scorecard says. It is structural, not a defect. It is also honest in both directions, which is rarer than it sounds: every score states what today's evidence supports and nothing more, so a category holds a 9 only while its stated reasoning still carries an Exemplary verdict, and it moves down as readily as up when the next re-score reads the evidence (Testability scores 9 on a gated coverage floor of 68.3%). A rubric that only ever ratchets up is not - being honest, and neither is one that only ratchets down. AI-Native Application Architecture carries the - lowest implementation on its own, at 6 on weight 2, and Cost Efficiency / FinOps holds the lowest - maturity, a 2, precisely because the substance those two reward (a product feature that calls a model, - right-sizing, per-service cost attribution) lives in consumer apps, not in a library.

+ being honest, and neither is one that only ratchets down. No category scores below 8 on implementation, + and Cost Efficiency / FinOps holds the lowest maturity, a 2. Most of the remaining implementation gap is + structural rather than neglected: deployment execution, production SLOs, cost right-sizing and the + consent process belong to the consuming apps, not to a library.

When I first scored the framework, the lowest category was Compliance, Privacy and Data Governance: soft-delete everywhere, with no right-to-erasure path. That is the exact GDPR conflict the rubric names as a red flag in category 30. I wrote it down rather than hiding it, and it became the roadmap: ADR-005's @@ -264,13 +265,15 @@

The worked example: M reason to score yourself in public.

The one insight worth the whole exercise

When I lined the scores up, a single pattern explained almost all of the variance between the top tier - and the middle tier, and it is the pattern that has driven every re-score since. Every category that - reached maturity 4 is backed by a fitness function or a compile-time guard: layer rules, domain purity, - transport coupling, outbox behavior, an automated database restore drill. Every category still capped at - 3 has the right design but leaves its enforcement short of a required merge gate. DevOps and Deployment - is the cleanest illustration: the repo ships a reference Bicep deployment sample plus a CI job that - compiles it, but that job is not one of the eight required contexts on the branch, and the deployment - machinery itself lives in consumer repos, so the rule is trusted rather than gated. Performance and + and the middle tier, and it is the pattern that has driven every re-score since. Thirty of the 34 + categories sit at maturity 4, most of them on build-breaking gates: layer rules, domain purity, + transport coupling, outbox behavior, an automated database restore drill. The three categories still + capped at 3 have the right design but stop short of an automatic, always-on gate: SOLID enforces only its + single-responsibility and dependency-inversion rules automatically, Compliance ships its audit-trail and + data-export surfaces opt-in, and DevOps and Deployment is the cleanest illustration: the repo ships a + reference Bicep deployment sample plus a CI job that compiles it, but that job is not one of the eight + required contexts on the branch, and the deployment machinery itself lives in consumer repos, so the + rule is trusted rather than gated. Performance and Scalability sits on the other side of exactly that line: a BenchmarkDotNet harness fails CI on latency or allocation regressions against a committed baseline, its context is in the branch's required checks, and the category holds a 4 because the existing check is a check that can fail the merge.

@@ -296,10 +299,10 @@

Trade-offs, honestly

  • Some categories are genuinely N/A. Be willing to exclude rather than fudge. But excluding should be a documented decision, not a convenient dodge for a category you would rather not face.
  • A snapshot ages. A scorecard is true only for the commit it was read against, and the thing being - scored keeps moving: nineteen published packages, lock files, an SBOM-gated release, a + scored keeps moving: twenty-two published packages, lock files, an SBOM-gated release, a DependencyVersionTests guard for the MassTransit pin, and the ADR-005 erasure extension point all - postdate the first committed pass. Re-verifications re-score it on both axes every release, through - thirty-six remediation waves. The honest framing is "scored, published, then fixed, then re-scored": + postdate the first committed pass. Each re-verification re-scores it on both axes and stamps the + version and commit it read. The honest framing is "scored, published, then fixed, then re-scored": the score is a starting line, not a trophy. Re-run it per release.
  • Apply this even without MMCA

    @@ -323,7 +326,7 @@

    Apply this even without MMCA


    What we covered: why "good architecture" needs a measurable rubric, the three-part 34-category structure, the two-axis (maturity plus implementation) scoring with mandatory evidence, MMCA.Common's - 97.0% maturity / 86.0% implementation as a worked example including its first-scored lowest category and + 96.6% maturity / 86.0% implementation as a worked example including its first-scored lowest category and its later remediation, and the single insight that explains the top tier: enforced beats convention-only.

    Next in the series: the Result railway that retired exceptions-as-control-flow, the foundational pattern every layer returns instead of throwing.

    diff --git a/articles/architecture-fitness-functions.html b/articles/architecture-fitness-functions.html index 9d601707..e991daa4 100644 --- a/articles/architecture-fitness-functions.html +++ b/articles/architecture-fitness-functions.html @@ -188,7 +188,7 @@

    Why a diagram is not enforcement

    red flag. The fix is to make conformance executable.

    Enforced twice: compile-time and runtime

    MMCA.Common enforces the dependency rules through two independent gates, and the redundancy is - deliberate (MMCA.Common/CLAUDE.md, Architecture Enforcement section).

    + deliberate (MMCA.Common/AGENTS.md, Architecture section).

    1. Compile-time, via MSBuild. Source/Build/MMCA.Common.LayerEnforcement.targets is imported from Directory.Build.props for every MMCA.Common.* project under Source/. It runs in a BeforeTargets="ResolveProjectReferences" step, inspects the project's ProjectReference list, and @@ -214,16 +214,20 @@

    Defined once, identical everywhereHere is the part that makes the fitness functions scale across more than one repo without rotting into three slightly-different copies.

    The rule bodies do not live in the test project. They live once, in a shipped NuGet package: - MMCA.Common.Testing.Architecture (package 15 of the nineteen the framework publishes, with + MMCA.Common.Testing.Architecture (package 18 of the twenty-two the framework publishes, with FACTS.md the canonical count). That package defines:

    • ArchitectureRules, the reusable rule library that expresses the actual assertions.
    • -
    • A set of 53 abstract *TestsBase classes holding 136 [Fact]s (for example +
    • A set of 55 abstract *TestsBase classes holding 141 test methods (for example LayerDependencyTestsBase, DomainPurityTestsBase, MicroserviceExtractionTestsBase, - PiiConventionTestsBase, FolderWidthTestsBase, DataResidencyTestsBase).
    • -
    • One extension point, IArchitectureMap, that every base class is parameterized by, with a shipped - ArchitectureMapBase that implements it so a per-repo map is a flat declaration of assemblies.
    • + PiiConventionTestsBase, FolderWidthTestsBase, DataResidencyTestsBase, + RawSqlConventionTestsBase, ClockReadTestsBase). +
    • One extension point, IArchitectureMap, that most base classes are parameterized by, with a shipped + ArchitectureMapBase that implements it so a per-repo map is a flat declaration of assemblies. The + bases whose rule reads files rather than assemblies take only what that rule reads instead: + FolderWidthTestsBase a repo root, ProtoContractTestsBase a solution file and a list of .proto + paths.

    Each repo supplies exactly one map implementation that declares its own layer and module assemblies, and its arch-test classes shrink to thin sealed subclasses (three to ten lines) that @@ -245,7 +249,8 @@

    Defined once, identical everywhereArchitectureTestHelper duplication, and so none of the drift that four copies of a rule invite: exactly the kind of drift fitness functions are supposed to prevent. It is also a maintainability win - in its own right (rubric category 16): one rule evolves, all consumers inherit the fix.

    + in its own right (rubric category 34, which absorbs the former maintainability criteria): one rule + evolves, all consumers inherit the fix.

    A small honest detail: a few checks genuinely do not generalize, so they stay local. The MMCA.Common.Grpc boundary check and the IMessageBus / IJwksProvider placement checks live in FrameworkSanityTests in the Common repo only, because they are about Common's own internal structure. @@ -275,6 +280,26 @@

    The rules that matter most

    This is also where the doubled enforcement lifts category 3 and category 34 into the top maturity band (Maturity 4) in the scorecard (Implementation 9 and 8, respectively): the rules that protect the architecture are the ones that fail the build, not the ones written in a doc.

    +

    Two gates on what a method body may call

    +

    The same shape reaches inside method bodies, where an assembly reference says nothing. Two bases hold + rules a reviewer is asked to remember on every PR and reliably forgets on one.

    +

    RawSqlConventionTestsBase (ADR-125). Module code reaches SQL only through the parameterizing + APIs. The inherited fact, ModuleCode_UsesParameterizedSqlOnly, scans the .cs files of every mapped + module and fails on a call to FromSqlRaw, SqlQueryRaw, ExecuteSqlRaw or ExecuteSqlRawAsync, the + four EF members that take a plain string, so a value concatenated into the statement compiles and runs + instead of becoming a command parameter. The interpolated siblings and the framework's + IRawSqlQueryExecutor stay allowed. The scan is textual and says so: whole-line comments are skipped, + a match inside a string literal is a rare false positive, and an AllowedFiles list is the adoption + ratchet. It also fails closed, because a scan that finds no module directories to read is a failure + rather than a pass. MMCA.Store's subclass supplies its map and an empty allowlist.

    +

    ClockReadTestsBase (ADR-128). Domain and Application code takes time as an input and never reads + the ambient clock. The rule reads IL through Mono.Cecil, not source, and fails on any call to + DateTime.UtcNow, DateTime.Now, DateTime.Today, DateTimeOffset.UtcNow or DateTimeOffset.Now in + the map's Domain and Application assemblies, lambdas and async state machines included. A business rule + that reads the clock itself cannot be driven by a test, so every expiry and cutoff it guards is either + untested or tested by sleeping. The framework's BaseDomainEvent occurrence stamp is the one built-in + exemption, and AllowedClockReaders takes any further entry as a reviewed type or member. MMCA.ADC's + subclass supplies its map and nothing else: no exemptions.

    A convention becomes a test: twelve files per folder

    The clearest case for turning a convention into an executable rule is the one that reads least like architecture: how wide a folder is allowed to get. The layout rule is module by project, feature by @@ -331,7 +356,7 @@

    Freezing t against the previous generation is now wrong. Nothing in a single repository's build notices, because everything the change breaks lives in another process.

    The framework freezes both halves of that surface. IntegrationEventContractTestsBase - (MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Contracts/IntegrationEventContractTestsBase.cs:11) + (MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Contracts/IntegrationEventContractTestsBase.cs:18) pins every integration-event payload against a committed contract. ProtoContractTestsBase (MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Contracts/ProtoContractTestsBase.cs:19) does the same for the synchronous half, the gRPC protos, so a renumbered field, a retyped one, a renamed rpc @@ -341,17 +366,17 @@

    Freezing t (:22), the .proto files to pin as repo-root-relative paths (:25), and the committed snapshot itself (:30), with the fact at :32-34. The rule body, ArchitectureRules.ProtoContractsMatchFrozenList - (MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Rules/Contracts/ArchitectureRules.Protos.cs:37), resolves - the repo root (:45), re-reads the real files from the working tree, rebuilds the contract, and diffs it + (MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Rules/Contracts/ArchitectureRules.Protos.cs:38), resolves + the repo root (:46), re-reads the real files from the working tree, rebuilds the contract, and diffs it against the frozen list in both directions: a line present in the protos but not frozen, and a line - frozen but no longer present, are each a violation with its own prefix (:67-70). That is the same + frozen but no longer present, are each a violation with its own prefix (:68-71). That is the same both-directions discipline the navigation-doc gate uses below, aimed at a wire format instead of a table.

    What gets pinned is exactly what a peer can observe: the package, every rpc with its name, request and - response types and both streaming flags (:198-208), every message field with its name, declared - type, label and number (:219-227), and every enum value with its number (:211-217). Nested + response types and both streaming flags (:199-209), every message field with its name, declared + type, label and number (:220-228), and every enum value with its number (:212-218). Nested messages and enums are qualified under their parent, while a oneof contributes no name segment because - on the wire it does not (:182-184). Deliberately not pinned: syntax, import and every option, - csharp_namespace included (:27-31). The line is drawn at "would a deployed peer notice." Pin the + on the wire it does not (:183-185). Deliberately not pinned: syntax, import and every option, + csharp_namespace included (:28-31). The line is drawn at "would a deployed peer notice." Pin the file-level options and a reordered import turns into a red build, which is the fastest way to teach a team to regenerate the snapshot without reading it.

    Adoption is the shape this tier always uses. MMCA.ADC's subclass pins the seven protos its four @@ -364,13 +389,13 @@

    Freezing t and a deliberately drifted twin, which is the only way a repo can test a rule whose subject lives somewhere else: the clean file proves the parser accepts a real contract, and the drifted one proves the rule actually fails, reporting both sides of a renumbered field - (MMCA.Common/Tests/Architecture/MMCA.Common.Architecture.Tests/ProtoContractFitnessTests.cs:52-64) and + (MMCA.Common/Tests/Architecture/MMCA.Common.Architecture.Tests/Contracts/ProtoContractFitnessTests.cs:52-64) and naming a missing file explicitly rather than silently pinning an empty contract (:76-87).

    Two honest costs. The frozen list is another committed baseline, the same obligation as the performance baseline further down: an intended contract change means regenerating the snapshot by printing ArchitectureRules.BuildProtoContract(...) for the same files, coordinating the peer rollout, and - committing the new list in that same change, never editing one line to turn a red test green. Both - consumer files say precisely that in a comment above the list + committing the new list in that same change, never editing one line to turn a red test green. MMCA.Store's + file says precisely that in a comment above its list (MMCA.Store/Tests/Architecture/MMCA.Store.Architecture.Tests/Contracts/ProtoContractTests.cs:21-24). And the unpinned options are not entirely harmless: changing csharp_namespace breaks the generated client code in every consumer while the wire stays byte-identical, and this gate passes it. The rule protects the @@ -410,23 +435,29 @@

    The sam (MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Governance/ObservabilityConventionTestsBase.cs:30) ships in the same MMCA.Common.Testing.Architecture package and turns the pairing into a build failure (ADR-062).

    -

    It fails in three distinct ways. An SLO alert declared in the consumer's Bicep template with no ### +

    It always fails in three distinct ways. An SLO alert declared in the consumer's Bicep template with no ### section in infra/OPERATIONS.md whose heading carries the matching -alert-<key> infix is a violation, and so is a heading that does carry the key but not the alert's current severity as - (sev N) (:64-84), which means re-tiering an alert without moving its triage steps is a red build + (sev N) (:89-115), which means re-tiering an alert without moving its triage steps is a red build rather than a surprise at 3am. In the other direction, an orphan runbook section whose alert the - template no longer provisions is a violation too (:92-103). And discovering fewer than - MinimumAlertSpecs specs, default 3 (:39), is itself a failure (:54-60).

    -

    That third rule is the same fail-closed property the forms floor and the cost gate below both rely + template no longer provisions is a violation too (:117-129). And discovering fewer than + MinimumAlertSpecs specs, default 3 (:39), is itself a failure (:79-87). A fourth fact is opt-in: + a subclass that sets RequireWorkbook (off by default, :58) also fails unless the template declares + an Azure Monitor workbook or a portal dashboard, so the signals the alerts fire on have somewhere an + operator can look at them (:65-77).

    +

    That floor rule is the same fail-closed property the forms floor and the cost gate below both rely on, and it earns its keep here more than anywhere: discovery parses the template between two literal - anchors, var sloAlertSpecs and resource sloAlerts (:109-114), and a rename would otherwise leave + anchors, var sloAlertSpecs and resource sloAlerts (:135-138), and a rename would otherwise leave a gate that pairs zero alerts against zero runbook sections and reports success. A key count that - disagrees with the severity count fails for the same reason (:117).

    + disagrees with the severity count fails for the same reason (:143).

    Adoption is the shape the rest of this tier already uses. MMCA.ADC and MMCA.Store each embed their real infra/main.bicep and infra/OPERATIONS.md as manifest resources (MMCA.ADC/Tests/Architecture/MMCA.ADC.Architecture.Tests/MMCA.ADC.Architecture.Tests.csproj:17-22) - and declare a subclass whose only body is a raised floor, protected override int MinimumAlertSpecs => 4;, because each repo provisions four specs - (MMCA.ADC/Tests/Architecture/MMCA.ADC.Architecture.Tests/Governance/ObservabilityConventionTests.cs:13). + and declare a subclass whose only body is a raised floor matching the specs that repo provisions: + MMCA.Store's protected override int MinimumAlertSpecs => 4; + (MMCA.Store/Tests/Architecture/MMCA.Store.Architecture.Tests/Governance/ObservabilityConventionTests.cs:13), + and MMCA.ADC's => 5, the four request and resilience SLOs plus the AI scoring token ceiling + (MMCA.ADC/Tests/Architecture/MMCA.ADC.Architecture.Tests/Governance/ObservabilityConventionTests.cs:14). Leaving the shipped default of 3 in place would let the gate pass on three discovered specs if the parse anchors ever drifted, which is the vacuity trap one level up. The base reads those resources from ResourceAssembly, which defaults to the derived type's assembly @@ -500,13 +531,12 @@

    Trade-offs, honestly

    the ceilings and exactly one ratio floor across the eight benchmarks, and the honest claim is that it catches collapses and new allocations, not creep. Nothing but review stops someone raising a ceiling to turn a red gate green. -
  • Prose masquerading as enforcement is the real trap. The framework's own backlog records the - failure mode in its own history: a blanket dependency update reintroduced the known-bad MassTransit - v9, and the response at the time was a comment, not a rule. Only the DependencyVersionTests gate - described above made a repeat impossible. The counterpart is instructive too: the last misleading - "MassTransit will retry" comment in that family was not retired by a gate but by somebody running a - repo-wide search and recording that it returned zero matches. A fitness-function culture must be - ruthless that a comment describing a check is not a check.
  • +
  • Prose masquerading as enforcement is the real trap. A version pin held only by a comment is + exactly what a blanket dependency update walks straight through, and the known-bad MassTransit v9 is + the case in point. The DependencyVersionTests gate described above turns the licensing-driven v8 pin + into a build failure, and that gate, not the comment, is what lets the scorecard record that the + "blanket update reintroduces known-bad dependency" red flag cannot recur. A fitness-function culture + must be ruthless that a comment describing a check is not a check.
  • Two gates mean two places to update. Add a layer rule and you maintain both the MSBuild target and the NetArchTest suite. That is the cost of catching both direct and transitive violations, and the contributor doc calls it out so nobody forgets the second one.
  • @@ -533,7 +563,8 @@

    Apply this even without MMCA

    twice (compile-time MSBuild plus runtime NetArchTest), how the rule bodies live once in MMCA.Common.Testing.Architecture and run identically across four repos via IArchitectureMap, the three rule families that matter most (LayerDependencyTests, DomainPurityTests, - MicroserviceExtractionTests), how a folder-width rule turns a layout convention into a build failure + MicroserviceExtractionTests), two gates on what a method body may call (raw-string SQL and the + ambient clock), how a folder-width rule turns a layout convention into a build failure and a residency gate turns a published privacy claim into one, how a committed .proto snapshot freezes the gRPC wire contract in both directions, how the same package pairs every provisioned SLO alert to a @@ -542,12 +573,12 @@

    Apply this even without MMCA

    enforce what you write a rule for.

    Next in the series: the test pyramid behind these fitness functions, roughly 2,254 fast tests with no Docker and no database.

    -

    MMCA.Common is Apache-2.0 licensed and open source. Star the repo, read the Architecture Enforcement section +

    MMCA.Common is Apache-2.0 licensed and open source. Star the repo, read the Architecture section of the contributor guide, or add one NetArchTest rule to your own codebase this week and watch it catch something.

    • ⭐ Repo: https://github.com/ivanball/MMCA.Common
    • -
    • 📄 The package table (README.md) and the Architecture Enforcement section (CLAUDE.md) are in the +
    • 📄 The fitness counts (FACTS.md) and the Architecture section (AGENTS.md) are in the repo.

    Tags: Software Architecture, .NET, C Sharp, Testing, Clean Architecture

    diff --git a/articles/aspire-one-command.html b/articles/aspire-one-command.html index e27c4c29..698d1f22 100644 --- a/articles/aspire-one-command.html +++ b/articles/aspire-one-command.html @@ -215,8 +215,8 @@

    Step 1: run the whole stack control-plane init. Run it interactively in a terminal you can watch.

    Once it is up, the dashboard (the URL is printed in the console) is your control panel: every resource, - its health, its logs, its traces, and links to the RabbitMQ management UI (http://localhost:15672) - and the MailDev inbox (http://localhost:1080).

    + its health, its logs, its traces, and the endpoint links for the RabbitMQ management UI and the MailDev + inbox (http://localhost:1080).

    Step 2: understand what AddServiceDefaults() configured

    Each service host calls one method first in its Program.cs, before anything app-specific:

    // In each service's Program.cs (representative shape)
    @@ -230,13 +230,14 @@ 

    Step 2: understand three things you would otherwise hand-roll:

    1. OpenTelemetry for logging, metrics, and tracing. Logs include the formatted message and scopes; - metrics always cover ASP.NET Core, and cover HttpClient and the .NET runtime unless a host turns - those cost knobs off (Step 6); tracing instruments ASP.NET Core and HttpClient and subscribes + metrics cover ASP.NET Core, HttpClient, and the .NET runtime unless a host turns those cost knobs + off (Step 6); tracing instruments ASP.NET Core and HttpClient and subscribes four activity sources: the application's own, MMCA.Common.Outbox, MMCA.Common.InternalCommands, and MMCA.Common.AI. It also registers nine MMCA-specific meters by literal name: MMCA.Common.Outbox (a dead-letter counter, a processed counter, a dispatch-lag - histogram, and a pending-depth gauge), MMCA.Common.Cqrs (RED histograms for command and query - handlers, plus query cache hit and miss), MMCA.Common.Idempotency (the idempotency filter's + histogram, a pending-depth gauge, and an oldest-pending-age gauge), MMCA.Common.Cqrs (RED + histograms for command and query handlers, query cache hit and miss counters, and the + authorization-denied and timeout counters), MMCA.Common.Idempotency (the idempotency filter's replay, conflict, and degraded counters), MMCA.Common.Scheduler (the recurring scheduler's run outcomes, duration, and schedule lag, inert in a host that never turns Scheduler:Enabled on), MMCA.Common.Broker (the broker transport's consumer faults plus outbox circuit-breaker openings, @@ -283,7 +284,7 @@

      Step 3: read

      Step 4: see how the AppHost wires the distributed app

      The AppHost Program.cs does not start anything immediately. It builds a resource model: a graph of containers, databases, services, the gateway, and the UI, with their dependency edges. The cross-cutting - wiring vocabulary lives in MMCA.Common.Aspire.Hosting as twelve fluent helpers (thirteen methods, + wiring vocabulary lives in MMCA.Common.Aspire.Hosting as thirteen fluent helpers (fourteen methods, because WithBroker has one overload per broker resource). Here is the shape of a service declaration (representative, condensed from ADC's AppHost):

      // Representative: one service host, fully wired
      @@ -310,13 +311,18 @@ 

      Step 4: see how th
    2. WithSQLServerDataSource(db, "Conference") is the AppHost face of database-per-service (ADR-006). (The package also ships WithPostgreSQLDataSource, WithCosmosDataSource, and WithSqliteDataSource for the polyglot engines in ADR-018.) In one - chain it references the database, waits for it to be healthy, and injects exactly one - connection-string environment variable, the multi-source routing layer's - DataSources__Conference__SQLServerConnectionString. That one entry is the whole configuration: + chain it references the database, waits for it to be healthy, and injects the multi-source routing + layer's connection-string environment variable, DataSources__Conference__SQLServerConnectionString. + That entry is what the framework's routing reads: with no top-level connection string, the single database a host declares this way also becomes its Default source, so the framework's own tables and the readiness health check land on it too, and each service runs as a clean single-database monolith with one change tracker and one migration set, while still owning its own OutboxMessages table.
    3. +
    4. WithH2cHealthCheck() gives the AppHost its own health check on a service: a GET to a probe path + over the service's HTTP/2 cleartext endpoint, so a resource that waits on that service waits for a + verified answer. An endpoint name the resource never declares is not an error at wiring time; it + surfaces as a permanently unhealthy check, which keeps dependents waiting instead of letting them + start against a service nobody verified.
    5. Step 5: wire the extraction points (gRPC and JWKS)

      The same AppHost wires the extraction boundaries that make the modular monolith behave like real microservices: typed @@ -344,16 +350,18 @@

      Step 5: wire the extrac

      Step 6: make the telemetry coherent, and keep the bill down

      There are a few more pieces worth knowing, because they shape what you see in the dashboard, and what you pay for it. Start with the noise. The OutboxProcessor background service polls every relational - outbox table on a recurring cycle (high in production, for example 300 seconds, to cut idle work). Each - idle poll would otherwise generate an OutboxPoll span, plus, under the Azure Monitor distro, a child - SqlClient dependency span. At scale, those idle spans would dominate ingestion and clutter the - dashboard.

      + outbox table on a recurring cycle (high in production, for example 300 seconds, to cut idle work), and + the InternalCommandProcessor polls every internal-command queue table the same way. Each idle poll + would otherwise generate a poll span, plus, under the Azure Monitor distro, a child SqlClient + dependency span. At scale, those idle spans would dominate ingestion and clutter the dashboard.

      OutboxPollFilterProcessor (in the Aspire package) is an OpenTelemetry BaseProcessor<Activity> that - walks each ending span's parent chain and, for anything descended from the recurring OutboxPoll - activity, clears the Recorded flag so the batch exporters skip it. It is registered before the - exporters so its OnEnd runs first. Real per-message OutboxProcess spans use restored parent - contexts and are never poll descendants, so genuine outbox telemetry survives. The net effect: your - traces show real work, not idle polling, and your observability bill reflects that.

      + walks each ending span's parent chain and, for anything descended from a recurring poll activity + (OutboxPoll on the MMCA.Common.Outbox source, InternalCommandPoll on + MMCA.Common.InternalCommands), clears the Recorded flag so the batch exporters skip it. It is + registered before the exporters so its OnEnd runs first. Real per-message OutboxProcess spans and + per-command InternalCommandExecute spans use restored parent contexts and are never poll descendants, + so genuine outbox and internal-command telemetry survives. The net effect: your traces show real work, + not idle polling, and your observability bill reflects that.

      Idle polling is not the only chatter worth refusing. Health probes are the other, and they are bigger: Container Apps liveness and readiness probes, the gateway's downstream aggregate probes, YARP active health checks, and the availability web test account for the whole AppRequests stream in both @@ -362,12 +370,14 @@

      Step 6: make on by default, so ProbeTelemetryFilter refuses those request and outgoing spans at the instrumentation options and ProbeTelemetryFilterProcessor un-records the dependency children that were sampled independently. Metrics are left untouched on purpose, so probe traffic still shows up on - dashboards, just not in the trace bill. Three metric knobs sit next to it: - Telemetry:DisableHttpClientMetrics and Telemetry:DisableRuntimeMetrics each drop a whole meter - family through a View (a View, rather than simply skipping the instrumentation, because the Azure - Monitor distro adds those meters itself, which makes the toggle authoritative instead of advisory), and - Telemetry:EnablePollyDurationMetrics runs the other way: Polly's two duration histograms stay dropped - unless a host opts in, while its retry and circuit-breaker event counter always ships.

      + dashboards, just not in the trace bill. Four metric knobs sit next to it: + Telemetry:DisableAspNetCoreMetrics, Telemetry:DisableHttpClientMetrics and + Telemetry:DisableRuntimeMetrics each drop a whole meter family through a View (the ASP.NET Core one + matches every meter under the Microsoft.AspNetCore. prefix; a View, rather than simply skipping the + instrumentation, because the Azure Monitor distro adds those meters itself, which makes the toggle + authoritative instead of advisory), and Telemetry:EnablePollyDurationMetrics runs the other way: + Polly's two duration histograms stay dropped unless a host opts in, while its retry and circuit-breaker + event counter always ships.

      That filtering only matters because of where the telemetry actually flows, and the framework decides that by environment, not by code. AddServiceDefaults() enables the OTLP exporter when OTEL_EXPORTER_OTLP_ENDPOINT is set, which is exactly the variable the Aspire dashboard injects into @@ -377,8 +387,9 @@

      Step 6: make once, each shipping its own copy, so the same pipeline feeds the local dashboard and the cloud with no code change between them.

      A dashboard is only as readable as the trail through it, and one id ties that trail together. - CorrelationIdMiddleware reads an X-Correlation-ID header off each request; when the client sends - none, it falls back to the current W3C trace id, then to ASP.NET Core's TraceIdentifier. It sets that + CorrelationIdMiddleware reads an X-Correlation-ID header off each request, cut to 64 characters (the + width of the persisted correlation columns); when the client sends none, it falls back to the current + W3C trace id, then to ASP.NET Core's TraceIdentifier. It sets that id on a scoped ICorrelationContext and echoes it on the response header, and the CQRS logging decorators stamp the same id into every log scope they open. So one id lines up a request's logs, its response header, and its distributed trace: the first thing you reach for when a call that crossed the @@ -397,9 +408,9 @@

      Step 7: harden

      First, security headers at the host edge. Instead of each host independently setting X-Frame-Options, Referrer-Policy, Permissions-Policy, HSTS, and a Content-Security-Policy (and slowly disagreeing as they do), the framework ships the pair a host wires in two lines. AddCommonSecurityHeaders binds the - "SecurityHeaders" config section and registers the default CSP provider; UseCommonSecurityHeaders - inserts the SecurityHeadersMiddleware into the pipeline. Call both and a new host inherits hardened - defaults automatically, with per-host overrides through that config section. + "SecurityHeaders" config section (when the host passes its configuration) and registers the default CSP + provider; UseCommonSecurityHeaders inserts the SecurityHeadersMiddleware into the pipeline. Call both + and a new host inherits hardened defaults automatically, with per-host overrides through that config section. The CSP comes from an ICspPolicyProvider: the framework ships a StaticCspPolicyProvider, and a host that needs a dynamic policy (the Blazor web host does) registers its own. The policy travels as a CspPolicy(Value, Enforce) record, so a provider can emit Content-Security-Policy to enforce, or @@ -416,18 +427,24 @@

      Step 8: refuse to boot on ba first password-reset mail and an unparseable outbox interval becomes a background loop that never drains, both on a replica that already passed its readiness probe and is taking live traffic. Or at boot, where the host refuses to start and the platform never routes to it. The framework picks boot (ADR-070).

      -

      Every settings section binds through one chain, and it is textually the same everywhere:

      +

      The framework's validated settings sections bind through one shape of chain:

      services.AddOptions<ConnectionStringSettings>()
           .Bind(configuration.GetSection(ConnectionStringSettings.SectionName))
           .ValidateDataAnnotations()
           .ValidateOnStart();

      ValidateOnStart() is the load-bearing link. ValidateDataAnnotations() on its own defers evaluation to the first resolution, which for a section only a background service reads can be minutes after the replica - started taking traffic; pairing the two converts "configured wrong" into "did not start". Twenty-three - framework sections bind this way (connection strings, SMTP, persistence, outbox, login protection, password - reset, refresh sessions, message bus, JWKS, cache, query-cache pipeline, scheduler, two-factor, email - confirmation, permission grants, audit trail, tenancy, push notifications, internal commands, idempotency, - JWT, the UI's API settings, and the Blazor host's CSP settings), including the ones behind opt-in features. + started taking traffic; pairing the two converts "configured wrong" into "did not start". Thirty + framework sections bind with both links: the nineteen Infrastructure sections (connection strings, SMTP, + persistence, outbox, login protection, password reset, refresh sessions, message bus, JWKS, tenancy, cache, + query-cache pipeline, scheduler, audit trail, internal commands, two-factor, email confirmation, permission + grants, push notifications), plus idempotency, JWT, API rate limiting, the UI's API settings, UI rate + limiting, the Blazor circuit limit, the health-report cache, the gateway settings, gateway rate limiting, + and the optional AI package's settings and content policy, including the ones behind opt-in features. Two + of them, UI rate limiting and the Blazor circuit limit, bind through BindConfiguration(...) instead of + Bind(GetSection(...)). Two Blazor-host sections, the CSP settings and the same-origin API proxy settings, + call ValidateOnStart() without ValidateDataAnnotations() (the proxy section also runs a PostConfigure + that fills its gateway address from the API settings). The two sections every host needs, ApplicationSettings and ModulesSettings, bind on the identical chain inside the framework's module-host wiring, so a consuming app inherits them instead of repeating them and adds only its module-level sections, such as Store's Stripe configuration.

      @@ -436,14 +453,16 @@

      Step 8: refuse to boot on ba conditionally on the selected algorithm: HS256 demands a secret of at least 32 characters, RS256 demands an RSA private key. So a host configured for RS256 with no private key fails to boot rather than failing to sign its first token.

      -

      The second half of the contract is uniformity. A section binds in exactly one place, on that one chain, and - is read through Microsoft.Extensions.Options at the point of consumption, so there is no second path by - which an unvalidated section can reach a handler. The exceptions are deliberate and say so at the call site. +

      The second half of the contract is uniformity. A section binds in exactly one place and is read through + Microsoft.Extensions.Options at the point of consumption, so there is no second path by which an + unvalidated section can reach a handler. The exceptions are deliberate. OwnerOrAdminFilterOptions validates data annotations but skips ValidateOnStart, because its required BypassRole has no default the framework could know (the framework knows no role names), so validating it at startup would fail every host that never applies the filter; validating on first resolve puts the message - in front of the host that actually uses it. A small set of optional sections, the hybrid cache options, - native push, and file storage, binds without the validation chain for the same class of reason.

      + in front of the host that actually uses it, and the call site says so. A set of optional sections binds + without the validation chain: the hybrid cache options, native push, file storage, the cache-key prefix, the + host-edge security headers, and the UI's layout, read-cache and notification-bell options (where the call + site notes that an absent section leaves the compiled-in defaults).

      Trade-offs and gotchas, honestly

      A single-command stack is a force multiplier, but it has edges worth naming:

        @@ -456,8 +475,8 @@

        Trade-offs and gotchas, honestly

        Bus emulator in locally through AddServiceBusEmulatorBroker. That costs a second container and a warm-up, which is why the everyday inner loop still runs on RabbitMQ.
      • MailDev is not a real SMTP relay. The mail interceptor is a local convenience; production uses a - real relay and is not provisioned by Aspire. This is the one deliberate gap between local and cloud - topology.
      • + real relay and is not provisioned by Aspire. Alongside the broker above, this is a deliberate gap + between local and cloud topology.
      • Persistent containers keep state across runs. Aspire marks SQL, Redis, and RabbitMQ as persistent so you are not re-seeding on every restart. That is a feature, but it also means stale local data can outlive a schema change; reset the container when a migration changes shape.
      • @@ -496,13 +515,13 @@

        Apply this even without MMCA

        /health/ready); how the AppHost wires the broker, per-service databases, gRPC references, and JWKS discovery through the MMCA.Common.Aspire.Hosting helpers; how OutboxPollFilterProcessor and the probe-telemetry filter keep idle poll spans and health-probe traffic out of telemetry while - Telemetry:TracesSampleRatio and the three metric knobs cap ingestion cost with fail-safe defaults; + Telemetry:TracesSampleRatio and the four metric knobs cap ingestion cost with fail-safe defaults; how CorrelationIdMiddleware ties a request's logs to its trace and the dual OTLP plus Azure Monitor exporters feed the local dashboard and workspace-based Application Insights; how AddCommonSecurityHeaders plus UseCommonSecurityHeaders and a tuned SocketsHttpHandler harden responses and reuse connections from the same shared baseline; and how the fail-fast configuration - contract binds every settings section with ValidateDataAnnotations().ValidateOnStart() so a - misconfigured host refuses to boot instead of failing on its first request.

        + contract binds the framework's settings sections with ValidateOnStart() so a misconfigured host + refuses to boot instead of failing on its first request.

        Next in the series: extracting a module out of the monolith into its own gRPC service, live, using the AppHost wiring you just met.

        MMCA.Common is Apache-2.0 licensed and open source. Star the repo, read the Aspire chapter, or diff --git a/articles/build-your-first-module.html b/articles/build-your-first-module.html index 1e6d04a8..e08e009b 100644 --- a/articles/build-your-first-module.html +++ b/articles/build-your-first-module.html @@ -173,7 +173,7 @@

        Step 0: scaffold the solution

        Three names, all independent: the solution (also your root namespace), the first module in plural PascalCase, and its aggregate root in singular PascalCase. Everything derived from them follows, from the routes and the identifier alias to the cache-key prefix and the Blazor pages.

        -

        You get twelve projects: five module layers, a REST API host, a Blazor Server and MudBlazor UI host, an - Aspire AppHost, a per-database migrations project, and three test projects. The aggregate arrives fully - worked, in the same shape the rest of this article explains.

        +

        You get twelve projects in the default shape: five module layers, a REST API host, a Blazor Server and + MudBlazor UI host, an Aspire AppHost (--no-aspire leaves it out), a per-database migrations project, + and three test projects. The aggregate arrives fully worked, in the same shape the rest of this article + explains.

        Get that green before you change anything. It is the line you bisect against later, and if it is not green that is a template bug rather than yours: the pack is generated from the framework's runnable - reference app, and a smoke job builds two generated solutions in package mode on every change.

        -

        Two things the scaffold deliberately refuses to hand over, because a rename or a shape flag - invalidates them and no fixed value is right for every name you could pick.

        -

        The first is declaration order, plus one constructor shape. Three analyzer rules, and only three, - ship dropped to suggestion in a marked block appended to the staged .editorconfig; every other - analyzer stays at error. SA1210 cannot sort your namespace against MMCA.Common.* without knowing - your name: an app namespace sorts above it for Contoso.Support and below it for Zeta.App, so no - checked-in order survives both. SA1211 is the same story one level down, on the identifier-alias - file whose aliases re-sort when a shape flag renames them. IDE0021 is the flags rather than the - renames: the aggregate's private constructor assigns one property per optional axis, so - --no-status --no-description --no-owner together leave it with a single statement, which the - baseline then wants as an expression body.

        -

        The second is your integration-event wire contract: a freeze inherited from someone else's sample - module guarantees nothing. All of it is one-time, and the generated README carries the exact commands - (one dotnet format analyzers run restores the two ordering rules; IDE0021 is not fixable that way, - so you fold the constructor by hand and delete the line).

        + reference app, and a template-smoke CI job generates three solutions from it (two module shapes and + one SQLite solution without an AppHost) and builds and tests each in package mode.

        +

        One thing the scaffold deliberately does not hand over, because a rename or a shape flag invalidates + it and no fixed value is right for every name you could pick: declaration order, plus one + constructor shape. Three analyzer rules, and only three, ship dropped to suggestion in a marked + block appended to the staged .editorconfig; every other analyzer stays at error. SA1210 cannot + sort your namespace against MMCA.Common.* without knowing your name: an app namespace sorts above it + for Contoso.Support and below it for Zeta.App, so no checked-in order survives both. SA1211 is + the same story one level down, on the identifier-alias file whose aliases re-sort when a shape flag + renames them. IDE0021 is the flags rather than the renames: the aggregate's private constructor + assigns one property per optional axis, so --no-status --no-description --no-owner together leave it + with a single statement, which the baseline then wants as an expression body. It is one-time, and the + generated README carries the exact commands (one dotnet format analyzers run restores the two + ordering rules; IDE0021 is not fixable that way, so you fold the constructor by hand and delete the + line).

        +

        Your integration-event wire contract is not on that list: it arrives already frozen. The generated + IntegrationEventContractTests holds your own event, under the names you scaffolded with, and passes + on the first run. When you add or reshape an event on purpose, you version it and update + ExpectedContract in the same commit.

        Now the part worth reading.

        Step 1: define the aggregate with a private constructor and a Result factory

        Open the Domain layer of the module you just generated (Source/Modules/Orders/...Orders.Domain/), or @@ -372,36 +376,52 @@

        Step 5: implement IModule

        } }

      Dependencies is what lets the framework do something genuinely useful: ModuleLoader discovers every - IModule and registers them in topological order (Kahn's algorithm) based on declared dependencies, - so a module is always wired after the modules it depends on. ModulesSettings (the "Modules" config - section) can disable a module; disabled modules receive stub registrations so cross-module interfaces - stay resolvable. That last detail is the extraction boundary: a module that depends on a now-remote module - keeps compiling and resolving because the stub stands in until a gRPC client takes over.

      + IModule in the assemblies the host names and registers them in topological order (Kahn's + algorithm) based on declared dependencies, so a module is always wired after the modules it depends on. + ModulesSettings (the "Modules" config section) can disable a module; disabled modules receive stub + registrations so cross-module interfaces stay resolvable. That last detail is the extraction boundary: a + module that depends on a now-remote module keeps compiling and resolving because the stub stands in + until a gRPC client takes over.

      Step 6: register in the exact DI sequence

      This is the step the most experienced developers still get wrong, because one ordering rule is load-bearing. AddApplicationDecorators() must run after every module's handler scan, because Scrutor's TryDecorate can only wrap handlers that are already registered. That is the only constraint that - matters here. The relative position of AddInfrastructure and AddAPI is not load-bearing: DI - dependencies resolve at runtime, not at registration time, so the infrastructure that backs the - decorated handlers can be registered before or after them. The framework documents the sequence this - way:

      -
      // Host composition root
      -services.AddApplication()                              // core services, event dispatcher
      -    .AddInfrastructure(configuration)                     // repos, UoW, DbContexts, caching, outbox
      -    .AddAPI(modulesSettings)                              // controllers, idempotency, exception handlers
      -    .ScanModuleApplicationServices<PromotionsClassRef>()  // this module's handlers, validators, mappers
      -    .ScanModuleApplicationServices<SalesClassRef>()       // another module
      -    .AddApplicationDecorators();                          // MUST be last: Scrutor wraps existing handlers
      + matters here. Registrations that are not handlers (infrastructure, API, telemetry, options) can sit on + either side of it: DI dependencies resolve at runtime, not at registration time, so the infrastructure + that backs the decorated handlers can be registered before or after them. The generated host spells the + sequence out by hand:

      +
      // Host composition root: the generated Web/Program.cs, abridged (representative module names)
      +services.AddApplication();                              // core services, event dispatcher
      +services.AddInfrastructure(builder.Configuration);      // repos, UoW, DbContexts, caching, outbox
      +services.AddAPI(modulesSettings);                       // controllers, idempotency, exception handlers
      +services.AddErrorResources<OrdersErrorResources>();     // one per module: error-code translations
      +services.AddErrorResources<PromotionsErrorResources>();
      +
      +moduleLoader.DiscoverAndRegister(
      +    services, builder.Configuration, applicationSettings, modulesSettings,
      +    builder.Environment.EnvironmentName,
      +    [typeof(OrdersModule).Assembly, typeof(PromotionsModule).Assembly]); // each module scans itself
      +
      +services.AddBrokerMessaging(builder.Configuration);
      +services.AddApplicationDecorators();                    // MUST be last: Scrutor wraps existing handlers

      The rules embedded in that order:

        -
      • ScanModuleApplicationServices<TMarker>() runs once per module. It auto-registers that module's - domain-event handlers (singleton), DTO and request mappers (scoped), command and query handlers - (scoped), and FluentValidation validators. This is why you did not register the validator from Step 4 - or the handler from Step 3 by hand: convention scanning found them by the marker type's assembly.
      • +
      • ScanModuleApplicationServices<TMarker>() runs once per module, from inside that module's own + registration, which ModuleLoader reaches through the module's Register. It auto-registers that + module's domain-event and integration-event handlers (singleton), DTO and request mappers, DTO + projectors and update appliers (scoped), command and query handlers (scoped), and FluentValidation + validators. This is why you did not register the validator from Step 4 or the handler from Step 3 by + hand: convention scanning found them by the marker type's assembly.
      • AddApplicationDecorators() must be last of the Application registrations. It uses Scrutor's - TryDecorate to wrap every already-registered handler. If you call it before a module's - ScanModuleApplicationServices, that module's handlers are registered too late to be wrapped, and - they silently run undecorated. No transactions, no caching, no logging, and no error to tell you.
      • + TryDecorate to wrap every already-registered handler, then seals the pipeline. A module scan + that runs after the seal throws an InvalidOperationException naming the call, so a misplaced scan + fails at startup instead of running undecorated. A handler registered by hand after the seal is the + one case that still slips through: it runs with no transactions, no caching, no logging, and no error + to tell you. +
      • AddMmcaApplicationPipeline(pipeline => ...) is the framework's preferred form of the same + sequence: it runs AddApplication(), then your callback (module scans, a ModuleLoader run, broker + wiring), then AddApplicationDecorators(), so the handler registrations cannot land on the wrong side + of the decorators. The generated host keeps the explicit calls shown above.

      Step 7: watch the decorator pipeline kick in, for free

      With the sequence correct, every command and query handler is now wrapped, in this execution order:

      @@ -413,8 +433,8 @@

      Step 7: watch the query is turned off.

    6. Authorization comes next, and sits outside caching on purpose. Commands and queries that implement IRequiresPermission are checked against the permission registry for the current user's - roles, and a denial short-circuits with a Forbidden error, so a denied query never reads from or - populates the cache.
    7. + roles (and those that implement IRequiresMfa against the mfa claim), and a denial short-circuits + with a Forbidden error, so a denied query never reads from or populates the cache.
    8. Logging records the full pipeline duration via ICorrelationContext, for every handler, with no per-handler code.
    9. Caching runs for queries that implement IQueryCacheable (supplying CacheKey + CacheDuration), @@ -471,8 +491,10 @@

      The next slice, and the next module<
    10. Architecture map. Five lines in your *ArchitectureMap.cs, one per layer. A module missing from the map is silently not covered by the layering and isolation rules. No error, no warning: the rules simply stop watching the code you just added.
    11. -
    12. Host. One services.AddErrorResources<BillingErrorResources>(); next to the existing ones. - ModuleLoader discovers the IModule from Step 5 itself, so nothing else needs registering.
    13. +
    14. Host. Two edits in the Web host's Program.cs. Add typeof(BillingModule).Assembly to the + list handed to ModuleLoader.DiscoverAndRegister: discovery scans only the assemblies the host + names, so a module left out of that list registers nothing. Then add one + services.AddErrorResources<BillingErrorResources>(); next to the existing ones.
    15. Database. The module gets its own: an AddDatabase / WithSQLServerDataSource pair in the AppHost, Modules / DataSources / Outbox entries in the Web host's appsettings.json, and the deletion of the now-conflicting top-level SQLServerMigrationsAssembly. Every module database @@ -481,16 +503,19 @@

      The next slice, and the next module< calls.

    16. First migration. dotnet ef migrations add InitialCreate against the new migrations project.
    -

    The first two are what make it compile, so they fail loudly. Numbers three and four do not, which is - why they are worth reading twice. And the honest reading of the script is not that the wire-ups - stopped mattering: it is that the one code path CI exercises now applies them for you, on a solution - the template generated.

    +

    The first two are what make it compile, so they fail loudly. Numbers three and four do not, and neither + does the module-assembly half of number five, which is why they are worth reading twice. And the honest + reading of the script is not that the wire-ups stopped mattering: it is that the one code path CI + exercises applies them for you, on a solution the template generated.

    Trade-offs and gotchas, honestly

    The shape buys consistency, and it asks for discipline in return:

      -
    • The DI order is unforgiving. Call AddApplicationDecorators() too early and handlers run - undecorated with no warning. Treat the documented sequence as a hard rule, and consider an - architecture fitness test that asserts handlers are decorated (the next article covers fitness tests).
    • +
    • The DI order is guarded, but not completely. AddApplicationDecorators() seals the pipeline, so + a module scan placed after it throws at startup. A handler registered by hand after it still runs + undecorated with no warning. The generated solution ships DecoratorPipelineOrderTests, which builds + the module's registration sequence and asserts the decorator nesting for one command and one query, + and the framework exposes VerifyDecoratorPipeline() for a fitness test that checks every handler + (the next article covers fitness tests).
    • Markers are easy to forget. ITransactional and ICacheInvalidating are opt-in by presence. Forget the marker and you lose the behavior silently. The upside (no behavior you did not ask for) is also the trap (no behavior you forgot to ask for).
    • @@ -503,21 +528,22 @@

      Trade-offs and gotchas, honestly

    • Soft-delete is the default. Your aggregate is never hard-deleted; IsDeleted is set and global query filters hide it. Plan for the data to persist, which matters for both storage and privacy.
    • A scaffold is a starting point, not an understanding. The generated solution is green on day one, - which is exactly what makes it easy to change something load-bearing without noticing. The DI order, - the marker interfaces, and the architecture map are the three places where a wrong edit fails - silently rather than loudly, and none of them is protected by the template.
    • + which is exactly what makes it easy to change something load-bearing without noticing. The marker + interfaces, the architecture map, and the host's list of module assemblies are the places where a + wrong edit fails silently rather than loudly.

    None of these are reasons to fight the shape. They are the reasons to learn it once and let it carry every module after.


    -

    What we covered: scaffolding the whole solution with dotnet new mmca-app and the two fixups it +

    What we covered: scaffolding the whole solution with dotnet new mmca-app and the one fixup it deliberately leaves you, the aggregate with a private constructor and a Result factory, raising a domain event with AddDomainEvent, a thin command handler marked ITransactional, a FluentValidation - validator, the IModule contract with Name and Dependencies, the exact DI sequence - (AddApplication().AddInfrastructure(config).AddAPI(modulesSettings) .ScanModuleApplicationServices<T>()...AddApplicationDecorators()), the decorator pipeline that wraps - every handler automatically, and the seven wire-ups mmca-module prints because dotnet new cannot - patch files that already exist (a solution generated by mmca-app applies all seven for you through - its own build/add-module.ps1).

    + validator, the IModule contract with Name and Dependencies, the DI sequence (each module's + ScanModuleApplicationServices<T>() reached through ModuleLoader.DiscoverAndRegister, then + AddApplicationDecorators() last, sealing the pipeline), the decorator pipeline that wraps every + handler automatically, and the seven wire-ups mmca-module prints because dotnet new cannot patch + files that already exist (a solution generated by mmca-app applies all seven for you through its own + build/add-module.ps1).

    Next in the series: write your first architecture fitness test, so the conventions in this article become a red build instead of a code-review comment.

    MMCA.Common is Apache-2.0 licensed and open source. Star the repo, read ADR-065 on why the template is diff --git a/articles/cqrs-decorator-pipeline.html b/articles/cqrs-decorator-pipeline.html index da63af9a..2f556952 100644 --- a/articles/cqrs-decorator-pipeline.html +++ b/articles/cqrs-decorator-pipeline.html @@ -247,9 +247,11 @@

    How the p
  • Caching sits outside validation so the cache is only touched after a valid, committed mutation. A validation failure or a rollback leaves the cache intact.
  • Validation sits outside the transaction so a malformed command never opens a database transaction. - The validating decorator resolves the registered IValidator<TCommand> and, on failure, returns a - Result failure tagged ErrorType.Validation (which the API edge maps to HTTP 400) without ever - calling the handler. Those validators are composed from reusable rule fragments rather than copy-pasted + The validating decorator takes every registered IValidator<TCommand>, runs them one after another + (sequentially on purpose, since a validator may reach the database through a scoped repository and a + DbContext is not thread-safe), and, when any of them fails, returns one Result failure carrying the + union of their errors, each tagged ErrorType.Validation (which the API edge maps to HTTP 400), + without ever calling the handler. Those validators are composed from reusable rule fragments rather than copy-pasted per command, a validation kit that gets its own deep-dive later in the series. On the query side the same concern sits one layer deeper, inside caching, for a deliberate reason: a cached entry can only exist because the same query already passed validation when that entry was produced, so re-validating @@ -399,11 +401,15 @@

    The same argument, on fake. Cleartext HTTP/2 is exactly the gRPC-over-plaintext case that a 307 would break, and every browser-reachable request is HTTP/1.1 or HTTP/2 over TLS, so it keeps being redirected instead of being served plaintext on the strength of a forged header.

    -

    The conditional pieces are registered unconditionally and made inert by configuration: tenant - resolution and the soft-deleted-user check (which sits between the limiter and authorization so a - revoked account is rejected before any endpoint gets to authorize it) are always in the chain, each - gated by its own settings. That keeps the edge literally one shape on every host rather than a per-host permutation, so a diff - between two hosts' pipelines is empty by construction. Every REST and gRPC service host in both +

    The pieces that only some hosts need are registered unconditionally too. Tenant resolution is + always in the chain and stays inert unless the host called AddMultiTenancy and set + Tenancy:Enabled. The soft-deleted-user check (which sits between the limiter and authorization so a + revoked account is rejected before any endpoint gets to authorize it) has no setting at all: on every + host it answers an authenticated request with a 401 when the shared cache carries that user's + deleted marker, and only a host that registers an ISoftDeletedUserValidator (the one hosting + Identity) falls back to the database on a cache miss, while every other host passes the request + through. That keeps the edge literally one shape on every host rather than a per-host permutation, so + a diff between two hosts' pipelines is empty by construction. Every REST and gRPC service host in both production applications calls the method, and so does the reference app.

    The edge carries the same two defenses as the decorator chain it mirrors. First, the order is frozen by a test, not by review. Every step is named and the defaults are seeded by a builder, so @@ -426,9 +432,9 @@

    Trade-offs, honestly

    a seal on the service collection that every later registration method has to check.
  • A new concern means a new decorator at the correct depth. Inserting it at the wrong position can silently change semantics, as with validating inside the transaction. Adding to the pipeline requires - understanding the ordering argument, not just appending a class. That warning stopped being - hypothetical the day authorization and timeout went in: both were inserted between existing - neighbours, and getting either one wrong would have been a correctness bug rather than a style choice.
  • + understanding the ordering argument, not just appending a class. Authorization and + timeout show why: both sit between other decorators, and placing either one wrong is a + correctness bug rather than a style choice.
  • The chain is deep. Every command walks seven decorators and every query six, even when it declares none of the markers, because each one is registered unconditionally and decides at runtime whether it has work to do. The pass-through cost of an is-check is small, but it is not zero, and it grows every diff --git a/articles/database-per-service.html b/articles/database-per-service.html index c009945f..30f9b4fd 100644 --- a/articles/database-per-service.html +++ b/articles/database-per-service.html @@ -250,14 +250,14 @@

    What it looks like in configuration
    // MONOLITH: no DataSources section. Every logical source collapses onto Default.
     // One database, one change tracker, FKs intact. Identical to a plain single-DB app.
     {
    -  "ConnectionStrings": { "Default": "Server=...;Database=App;..." }
    +  "ConnectionStrings": { "SQLServerConnectionString": "Server=...;Database=App;..." }
     }
     
     // DATABASE-PER-SERVICE: each module points at its own physical database.
    -// CrossDataSourceDegradeConvention now degrades any cross-module relationship to a scalar FK,
    +// CrossDataSourceDegradeConvention degrades any cross-module relationship to a scalar FK,
     // and the per-source OutboxProcessor only ever drains its own OutboxMessages table.
     {
    -  "ConnectionStrings": { "Default": "Server=...;Database=App;..." },
    +  "ConnectionStrings": { "SQLServerConnectionString": "Server=...;Database=App;..." },
       "DataSources": {
         "Conference": { "SQLServerConnectionString": "Server=...;Database=App_Conference;..." },
         "Engagement": { "SQLServerConnectionString": "Server=...;Database=App_Engagement;..." }
    @@ -281,8 +281,11 @@ 

    The third axis: which custom tenant string, and that detail is load-bearing: EF rewrites a context-typed constant to the executing context at query-compile time, so one cached model per source serves every tenant and the tenant value travels as a SQL parameter instead of baking a compiled model per customer. A null tenant is - the system context and sees everything, which is what keeps the outbox loop, the migration runner, - and the seeders working: they have no request, so they have no claim.

    + the system context and sees everything, which is what keeps the outbox processor, the seeders, and + the retention jobs working: they have no request, so they have no claim. Outbox delivery narrows + again per row: each OutboxMessage records the tenant its raising request resolved to, and the + processor restores that tenant (with the user, roles, and correlation id) onto a fresh scope for each + row before dispatch, so a handler reads and writes the same tenant's rows the original request did.

    Resolution is claim first, then header, and it fails closed. TenantResolutionMiddleware runs immediately after UseAuthentication (a claim-first order needs HttpContext.User already populated), is registered unconditionally, and passes every request straight through until @@ -320,8 +323,9 @@

    The third axis: which custom

    Because an override changes where a source points rather than what a source is, the pieces around it keep working unchanged. The entity registry, the migrations assembly, and the per-source outbox all survive: the outbox simply enumerates (source, tenant) pairs and drains one extra unit per tenant - that keeps its own copy of a source, with no OutboxMessage schema change at all (no TenantId - column, so no forced migration for every consumer on upgrade). The per-scope context cache gains a + that keeps its own copy of a source. Routing never reads the row: the targets come from those + configured pairs, and the nullable TenantId an OutboxMessage carries exists only so delivery can + restore the raising tenant (a row with no tenant stays valid). The per-scope context cache gains a guard that throws if the scope's tenant changes after a routed context exists, which restates one-scope-one-tenant where it would otherwise break silently. Cache entries get their isolation one layer up, in the caching decorators, since a singleton cache cannot observe scoped state; that diff --git a/articles/device-capability-abstraction.html b/articles/device-capability-abstraction.html index 9725f42d..36c44495 100644 --- a/articles/device-capability-abstraction.html +++ b/articles/device-capability-abstraction.html @@ -167,7 +167,7 @@

    The MMCA answer: one small contract per capability, chosen per host

    -

    There is no god IDeviceCapabilities interface. That was a deliberate rejection: an aggregate device service forces every head to implement everything, and every new capability becomes a breaking change to a type everyone depends on. Instead the framework defines one small interface per capability, all living under Source/Presentation/MMCA.Common.UI/Services/Capabilities/ (Website/docs-src/adr/042-device-capability-abstraction.md:33), 24 capability contracts in all.

    +

    There is no god IDeviceCapabilities interface. That was a deliberate rejection: an aggregate device service forces every head to implement everything, and every new capability becomes a breaking change to a type everyone depends on. Instead the framework defines one small interface per capability, all living under Source/Presentation/MMCA.Common.UI/Services/Capabilities/ (Website/docs-src/adr/042-device-capability-abstraction.md:34), 24 capability contracts in all.

    Each contract is a few methods, shaped so failure is a value, not an exception:

    • IShareService (IShareService.cs:8): ShareLinkAsync / ShareFileAsync, both returning Task<bool> so a caller learns "no share UI was presented" and falls back to copy-link rather than catching.
    • @@ -185,7 +185,7 @@

      Three flavors of
    • Constant stub. AlwaysOnlineConnectivityStatusService (DeviceStatus/AlwaysOnlineConnectivityStatusService.cs:7) hard-codes IsOnline => true and never raises its event. That is not laziness: it is correct for Blazor Server, where a lost connection tears down the circuit itself, so the reconnect overlay already covers the offline case and a connectivity service would be redundant.
    • Neutral local state. InMemoryDevicePreferences (DeviceStorage/InMemoryDevicePreferences.cs:10) is registered scoped, not singleton, so the Blazor Server fallback holds per-circuit (per-user) state and never leaks one user's preferences into another's.
    • -

      A fourth kind is not a fallback at all. For two contracts the shared default is the real implementation, so no head replaces it: DeepLinkDispatcher (registered at Services/Capabilities/DependencyInjection.cs:78) and AppLifecycleNotifier (at :82), which the MAUI package feeds from the native window rather than overriding. That is why AddMauiDeviceCapabilities natively overrides 20 of the 24 contracts rather than all of them (Website/docs-src/adr/042-device-capability-abstraction.md:47-52).

      +

      A fourth kind is not a fallback at all. For two contracts the shared default is the real implementation, so no head replaces it: DeepLinkDispatcher (registered at Services/Capabilities/DependencyInjection.cs:78) and AppLifecycleNotifier (at :82), which the MAUI package feeds from the native window rather than overriding. That is why AddMauiDeviceCapabilities natively overrides 20 of the 24 contracts rather than all of them (Website/docs-src/adr/042-device-capability-abstraction.md:46-53).

      The payoff: a head that knows nothing about capabilities keeps working. It gets share-returns-false, haptics-do-nothing, always-online, and every component degrades gracefully with zero host changes. That is the same inert-by-default posture the framework's notification layer takes.

      Heads override after the defaults, last registration wins

      A default that is always inert would be useless on the platforms that can do the real thing. So heads override, and the mechanism is deliberately boring: plain Add registrations, called after AddUIShared, exploiting the rule that the last registration wins for single-service resolution.

      @@ -202,11 +202,11 @@

      Heads override // MAUI Blazor Hybrid host (in MauiProgram): override with native adapters AFTER AddUIShared. builder.UseMauiDeviceCapabilities(); // native share sheet, haptics, geolocation, biometrics

    Three hosts, one shared component set, and the only difference is which one line ran after AddUIShared. A component that injects IShareService gets NullShareService on a forgetful host, BrowserShareService on the web, and MauiShareService on the phone, and it wrote none of that branching.

    -

    The ninth package, and why it lives outside the solution

    -

    The native adapters cannot ship in MMCA.Common.UI, because that package must stay WebAssembly-compatible. They ship in MMCA.Common.UI.Maui, the ninth of the framework's nineteen NuGet packages and its one MAUI-target exception. It multi-targets net10.0-android/ios/maccatalyst/windows, references MMCA.Common.UI plus Microsoft.Maui.Controls and Plugin.LocalNotification, and stays out of MMCA.Common.slnx (Website/docs-src/adr/042-device-capability-abstraction.md:81).

    -

    That exclusion is not cosmetic. MMCA.Common's CI and release pipelines run on ubuntu, which cannot build MAUI target frameworks at all, and the nineteen packages release in lockstep. So the MAUI package is built and packed by dedicated windows CI jobs (build-maui, a required gate, and publish-maui, under the same tag and SBOM discipline), the same mechanism that keeps the UI gallery and E2E projects out of the fast ubuntu unit run. Its layer rule is "UI plus Shared only," enforced at compile time; it is deliberately absent from the ubuntu runtime architecture map because its assemblies cannot even load there.

    +

    The eleventh package, and why it lives outside the solution

    +

    The native adapters cannot ship in MMCA.Common.UI, because that package must stay WebAssembly-compatible. They ship in MMCA.Common.UI.Maui, the eleventh of the framework's twenty-two NuGet packages and its one MAUI-target exception. It multi-targets net10.0-android/ios/maccatalyst/windows, references MMCA.Common.UI plus Microsoft.Maui.Controls and Plugin.LocalNotification, and stays out of MMCA.Common.slnx (Website/docs-src/adr/042-device-capability-abstraction.md:82).

    +

    That exclusion is not cosmetic. MMCA.Common's CI and release pipelines run on ubuntu, which cannot build MAUI target frameworks at all, and the twenty-two packages release in lockstep. So the MAUI package is built and packed by dedicated windows CI jobs (build-maui, a required gate, and publish-maui, under the same tag and SBOM discipline), the same mechanism that keeps the UI gallery and E2E projects out of the fast ubuntu unit run. Its layer rule is "UI plus Shared only," enforced at compile time; it is deliberately absent from the ubuntu runtime architecture map because its assemblies cannot even load there.

    -

    The most elegant part is navigation. A notification tap, a home-screen app action, an app link, a scanned QR code: all four are native events that need to land on a Blazor route. They funnel through one singleton, IDeepLinkDispatcher (Services/Capabilities/Navigation/IDeepLinkDispatcher.cs:10), whose default DeepLinkDispatcher (Services/Capabilities/Navigation/DeepLinkDispatcher.cs:9) either raises RouteRequested live when a listener is attached, or buffers the most recent route (capacity one, guarded by a Lock) so a cold-start tap survives until the router renders. The DeepLinkListener.razor component in the shared layout drains that buffer after first render and navigates.

    +

    The most elegant part is navigation. A notification tap, a home-screen app action, an app link, a scanned QR code: all four are native events that need to land on a Blazor route. They funnel through one singleton, IDeepLinkDispatcher (Services/Capabilities/Navigation/IDeepLinkDispatcher.cs:10), whose default DeepLinkDispatcher (Services/Capabilities/Navigation/DeepLinkDispatcher.cs:11) either raises RouteRequested live when a listener is attached, or buffers the most recent route (capacity one, guarded by a Lock) so a cold-start tap survives until the router renders. The DeepLinkListener.razor component in the shared layout drains that buffer after first render and navigates.

    Why capacity one, and why a buffer at all? Because a tap can launch the app: native code publishes the route into the singleton before Blazor has rendered anything, so there is no listener yet. The single-entry buffer holds that route until first render, then the listener consumes it. Live taps, once the app is running, skip the buffer entirely.

    The payoff of Blazor Hybrid is that web URLs and app routes are identical. All heads share one Blazor route table, so an incoming deep link is reduced to its path and query and published as-is. No translation table exists anywhere. This is also where ADR-043 (mobile deep links and app association) plugs in: incoming app-link and OAuth-callback URIs reuse this exact dispatcher, and each app's UI.Web host serves the platform association files (assetlinks.json, apple-app-site-association) that tell the OS to open shared https URLs in the installed app. The OAuth-callback angle is its own story; here the point is only that ADR-043 adds native entry points and reuses this one funnel rather than building a second.

    One more component earns its place: ExternalLink.razor. A raw target="_blank" anchor silently dead-ends inside a BlazorWebView (WKWebView drops it), so shared components route external links through IExternalLinkService (Services/Capabilities/Interop/IExternalLinkService.cs:9). It renders a real new-tab anchor on web heads, and where InterceptsLinks is true it intercepts the click into the system browser. OfflineBanner.razor renders only when IConnectivityStatusService reports offline. The components adapt; they never branch on platform.

    @@ -229,7 +229,7 @@

    Apply this even without MMCA

    The takeaway: a portable UI is one that is structurally forbidden from knowing where it runs. Put each device capability behind a small contract, give every contract an inert default so it always resolves, and choose the real implementation per host at the composition root. The component asks for a capability; it never asks for a platform.


    -

    What we covered: why a platform check inside a shared component set is a portability leak, how ADR-042 replaces it with one small contract per capability under MMCA.Common.UI/Services/Capabilities/, how AddDeviceCapabilityDefaults TryAdd-seeds a null-object, constant-stub, or neutral-state default for every contract so it always resolves, how browser and MAUI heads override those defaults after AddUIShared with last-registration-wins, why the native adapters live in the ninth package MMCA.Common.UI.Maui built by a windows CI job, and how IDeepLinkDispatcher funnels every native navigation source onto the one shared Blazor route table.

    +

    What we covered: why a platform check inside a shared component set is a portability leak, how ADR-042 replaces it with one small contract per capability under MMCA.Common.UI/Services/Capabilities/, how AddDeviceCapabilityDefaults TryAdd-seeds a null-object, constant-stub, or neutral-state default for every contract so it always resolves, how browser and MAUI heads override those defaults after AddUIShared with last-registration-wins, why the native adapters live in the eleventh package MMCA.Common.UI.Maui built by a windows CI job, and how IDeepLinkDispatcher funnels every native navigation source onto the one shared Blazor route table.

    Previously in the series: Two real apps on one framework, a conference platform and a store, both running on MMCA.Common without a fork.

    Next in the series: managed file storage, uploads you don't have to trust, with untrusted-image re-encoding and a storage abstraction that swaps an Azure Blob backend for a safe Null fallback.

    MMCA.Common is Apache-2.0 licensed and open source. Star the repo, read the device-capability chapter of the onboarding guide, or dotnet add package MMCA.Common.UI.Maui and try it.

    @@ -253,7 +253,7 @@

    Apply this even without MMCA

  • The MMCA answer: one small contract per capability, chosen per host
  • Three flavors of "unavailable," all registered by default
  • Heads override after the defaults, last registration wins
  • -
  • The ninth package, and why it lives outside the solution
  • +
  • The eleventh package, and why it lives outside the solution
  • Deep links: one funnel, no translation table
  • Trade-offs, honestly
  • Apply this even without MMCA
  • diff --git a/articles/durable-internal-commands.html b/articles/durable-internal-commands.html index a4cf758e..37354e55 100644 --- a/articles/durable-internal-commands.html +++ b/articles/durable-internal-commands.html @@ -183,34 +183,34 @@

    Why it matters

    §6 (CQRS and Event-Driven Design) wants reads and writes separated through a dispatcher with a real decorator pipeline, an outbox for atomic persist-then-publish rather than "save then publish and hope", and idempotent consumers, with "consumers that aren't idempotent and break on redelivery" listed as a red - flag (ArchitectureEvaluationCriteria.md:229-247). §10 (Messaging and Integration Architecture) is a - weight-3 category (:352) scoring what happens once work leaves the request. It wants delivery semantics + flag (ArchitectureEvaluationCriteria.md:229-249). §10 (Messaging and Integration Architecture) is a + weight-3 category (:349) scoring what happens once work leaves the request. It wants delivery semantics stated per consumer, dead-letter and poison-message handling with "retries with backoff and a bounded attempt count, then a dead-letter path with an operational procedure", bounded and documented retention, - and long-running work with persisted state and defined timeouts (:329-348). Its red flags name + and long-running work with persisted state and defined timeouts (:329-341). Its red flags name "retries without idempotency (duplicate side effects) or without backoff (retry storms)" and "no - dead-letter story: a poison message blocks the queue or is silently dropped" (:344-348).

    + dead-letter story: a poison message blocks the queue or is silently dropped" (:342-347).

    Read those two lists and notice what they describe: not an event bus, a job queue. Backoff, an attempt ceiling, a dead-letter path, an operator procedure, retention. Every single one of those properties has to exist somewhere, and the choice is only whether you build them once or five times, once per feature that needed to do something later.

    MMCA.Common scores §6 at Maturity 4 / Implementation 9 and §10 at Maturity 4 / Implementation 9 - (common-ArchitectureScorecard.md:86 and :90). Both rows are earned by machinery that was already + (common-ArchitectureScorecard.md:70 and :74). Both rows are earned by machinery that was already there for events. ADR-114 is the record of pointing that same machinery at instructions.

    Four mechanisms, one question

    The framework has four ways to do work later, and they are not interchangeable.

    The bounded channel (ADR-121) is a Channel<T> singleton with a SingleReader BackgroundService drain, one per job kind. Its full mode is DropOldest, so under pressure it evicts the oldest item and TryWrite always returns true, which means the producer cannot learn that anything was discarded - (ADR-121:45-56). It is in-process only: it does not survive a restart and does not span replicas - (:133-135). That is not a defect, it is the specification. Article 22 in this series covers it in full, + (ADR-121:37-56). It is in-process only: it does not survive a restart and does not span replicas + (:135-137). That is not a defect, it is the specification. Article 22 in this series covers it in full, along with the live-channel case it exists for.

    The recurring scheduler (ADR-074) carries cron occurrences: one row per registered job, and a missed - occurrence is deliberately not replayed (ADR-114:26-33). It answers "sweep the audit trail nightly". + occurrence is deliberately not replayed (ADR-114:28-36). It answers "sweep the audit trail nightly". Article 22 covers this one too, as the sibling contract for work a clock owns.

    The transactional outbox (ADR-003) carries events. A row is written by the domain-event interceptor inside the same transaction as the aggregate change, and a processor drains it with a claim lease, - exponential backoff, dead-lettering and OpenTelemetry instrumentation (ADR-114:14-24). It answers "this + exponential backoff, dead-lettering and OpenTelemetry instrumentation (ADR-114:16-26). It answers "this happened, tell whoever cares". It does not answer "do this later", and bending it to do so means expressing an instruction as an event, which is the modelling mistake ADR-007 and ADR-008 spend their length avoiding.

    @@ -218,10 +218,10 @@

    Four mechanisms, one question

    specific gap: a single unit of work, bound to a single aggregate, that must not be lost, and must not fire until the aggregate change actually commits.

    ADR-121 states the deciding question in one line: "would losing this item be noticed as anything more - than a missed UI refresh?" If yes, it is an internal command; if no, it is a channel item (:128-131). + than a missed UI refresh?" If yes, it is an internal command; if no, it is a channel item (:130-133). The record is blunt about the symmetry of the mistake: putting must-run work on a DropOldest channel loses it silently, and putting a broadcast through a durable command pays a row, a poll interval and a - lease for something worth less than the write (:146-149).

    + lease for something worth less than the write (:148-151).

    The MMCA answer: a deferred execution IS the inline execution

    Here is the decision that makes the rest of it cheap.

    IInternalCommand is a marker interface deriving from ICommand<Result> and nothing else @@ -233,38 +233,43 @@

    The MMCA a execution scope (InternalCommandDispatcher.cs:75), so what comes back from the container is already wrapped by Scrutor in the whole ADR-014 chain: the feature gate, the authorization check, logging, cache invalidation, validation, the timeout budget and the transaction, in that order, unchanged - (ADR-114:51-61).

    + (ADR-114:53-62).

    That one decision is what the rest of this article is really about. It means a deferred command gets validated. It means a deferred command can require a permission. It means the logging decorator writes the same line it always wrote. None of that is job-queue code, because none of it is job-queue code anywhere else either.

    Compare that to what a general-purpose job library executes: a serialized method invocation, which passes - through none of your pipeline until you teach it to (ADR-114:146-154).

    + through none of your pipeline until you teach it to (ADR-114:156-163).

    Scheduling rides the caller's unit of work

    IInternalCommandScheduler exposes ScheduleAsync(command, runAt) and a TimeSpan delay overload, both - returning Result<Guid> (IInternalCommandScheduler.cs:41-57). runAt is "the earliest instant the + returning Result<Guid> (IInternalCommandScheduler.cs:45-62). runAt is "the earliest instant the command may run, converted to UTC", with null meaning as soon as possible, and the contract is explicit that the processor never runs a row before that instant and makes no promise about how long after it a busy queue takes to get there (:23-27).

    The write goes to the context handed back by the scope's own IDbContextFactory, which is the same instance the calling handler's repositories are using. From there the behavior splits, and the split is - the whole reason this mechanism exists (ADR-114:62-75):

    + the whole reason this mechanism exists (ADR-114:64-80):

      -
    • With a transaction active, the row is only enrolled. The caller's commit persists it, and the - caller's rollback erases it.
    • +
    • With a transaction active, the row is only enrolled. The caller's next save writes it, or the + transactional pipeline saves it just before the commit when no save follows, so the caller's commit + persists it and the caller's rollback erases it (IInternalCommandScheduler.cs:34-43). The processor + wake is owed rather than raised: the scheduler records it against the context, and the unit of work + releases it once after the commit succeeds and drops it on rollback (InternalCommandScheduler.cs:108-113, + EnrolledCommandWake.cs:7-13).
    • With no transaction active, the row is saved immediately, which flushes anything else pending on - that context exactly as calling the unit of work's own save would - (IInternalCommandScheduler.cs:34-40). The processor is signalled only when the row is already due, so - a future-dated row is persisted without a wake-up and waits for the poll loop.
    • + that context exactly as calling the unit of work's own save would (IInternalCommandScheduler.cs:39-41). + The processor is then signalled whether or not the row is due: a due row runs on the wake, and a + future-dated row re-arms the processor's smart wait on its scheduled instant + (InternalCommandScheduler.cs:120-125).

    That first bullet is the outbox's atomicity guarantee applied to an instruction instead of an event: a transaction that aborts schedules nothing. It is also precisely what a separate job store cannot give you, and it is the single reason ADR-114 rejects Hangfire, Quartz.NET and a cloud queue. All three keep their state somewhere your transaction does not reach, so an enqueue beside a rollback is a job with no - justification (ADR-114:146-168). The cloud-queue rejection is the interesting one, because it is + justification (ADR-114:156-177). The cloud-queue rejection is the interesting one, because it is conditional: a broker queue is the right answer once the work must cross a process boundary or survive the database being unavailable, and the standard way to enqueue it safely is to write an outbox row that - a processor forwards, which is this design plus one hop (:161-168).

    + a processor forwards, which is this design plus one hop (:171-177).

    The row, and what it remembers

    InternalCommandMessage (InternalCommandMessage.cs:21) is deliberately not an auditable entity, for the same reason OutboxMessage is not: it is framework bookkeeping, not domain state, so it carries no @@ -283,13 +288,13 @@

    The row, and what it remembers

    UserId (:111), UserRoles (:118) and TenantId (:124).

    That fourth group is the one people forget to build, and it is what turns a deferred command from a system call into a continuation of a user's request. Before the dispatcher runs, the processor calls the - shared AmbientOrigin.Restore (InternalCommandProcessor.cs:530), the same helper every other + shared AmbientOrigin.Restore (InternalCommandProcessor.cs:483), the same helper every other background hop uses, so every hop restores the same shape. It sets the tenant first, then rebuilds a ClaimsPrincipal carrying the sub claim and one role claim per stored role, and hands it to ScopedUserOverride, a scoped carrier read by ImpersonatingCurrentUserService, which decorates whatever - ICurrentUserService the host registered (ADR-114:96-109). With no override set every member reads + ICurrentUserService the host registered (ADR-114:102-114). With no override set every member reads straight through, so an HTTP request behaves exactly as it did before the queue existed. The identity is - stamped with an authentication type of InternalCommand (InternalCommandProcessor.cs:72), which is what + stamped with an authentication type of InternalCommand (InternalCommandProcessor.cs:66), which is what makes IsAuthenticated true and names the hop the identity came back from.

    Restore the principal and an IRequiresPermission command becomes schedulable, because the authorization decorator has a real user to evaluate. That is a genuinely useful property and a genuinely uncomfortable @@ -308,47 +313,52 @@

    A rename that does not orphan t them rather than dropping them quietly (IInternalCommand.cs:30-36). You lose the work either way. The difference is whether you find out.

    The drain: claim, execute, stamp

    -

    InternalCommandProcessor is a BackgroundService (InternalCommandProcessor.cs:47). Its cycle is the - outbox's idiom, borrowed rather than shared.

    -

    It waits a five-second startup delay so the host finishes module registration and migration before the - first cycle touches the table (:81), and returns immediately if the host owns no relational sources - (:89-97). Each cycle fetches the due candidates per source, claims the due prefix of the batch with a - lease token (ClaimDueAsync, :369), executes each row in a fresh DI scope, and stamps the outcome - through a set-based update guarded by that token (StampAsync, :653). That guard is what makes a +

    InternalCommandProcessor is a BackgroundService (InternalCommandProcessor.cs:43). Its loop + mechanics (the startup delay, the smart wait, the per-source drain and the retry backoff) are the + internal PollingLoop the outbox processor also runs (PollingLoop.cs:12, called from + InternalCommandProcessor.cs:75-79); the claim, the execution and the stamping are its own + (ADR-114:179-188).

    +

    It waits a five-second startup delay before the first cycle (PollingLoop.cs:18, applied at :51), and + returns immediately if the host owns no relational sources (:53-57). Each cycle fetches the due + candidates per source, claims the due prefix of the batch with a lease token (ClaimDueAsync, + InternalCommandProcessor.cs:286), executes each row in a fresh DI scope, and stamps the outcome + through a set-based update guarded by that token (StampAsync, :606). That guard is what makes a scaled-out host safe: a replica whose lease expired mid-execution silently drops its stale outcome rather than overwriting whatever the new claimant did.

    -

    A Result.Failure and a thrown exception are the same operational fact, and both consume an attempt. The - backoff is RetryBackoffBaseSeconds * 2^(attempts-1) with jitter in [0.8, 1.2], capped at - MaxRetryBackoffSeconds (ComputeRetryBackoffSeconds, :679).

    -

    Two failures are terminal on the first attempt rather than consuming the budget: an unresolvable - command type (:434) and a missing handler registration (:456). The outbox retries an unresolvable - type once, and the divergence is reasoned rather than accidental: an outbox row's type may live in an - assembly that has simply not loaded yet, while a queue row can only ever run on a host that registers a - handler for it, so a host that cannot name the type has no such handler and retrying would burn the - budget waiting for a fact that will not change (ADR-114:110-141).

    +

    A Result.Failure and a thrown exception are the same operational fact, and both consume an attempt + (RecordFailedAttemptAsync, :428-462). The backoff is RetryBackoffBaseSeconds * 2^(attempts-1) with + jitter in [0.8, 1.2], capped at MaxRetryBackoffSeconds (ComputeRetryBackoffSeconds, :632, + delegating to PollingLoop.cs:183, jitter at :193).

    +

    Three failures are terminal on the first attempt rather than consuming the budget: a payload that no + longer deserializes against its type (payload_invalid, InternalCommandProcessor.cs:369-377), because + retrying cannot change the stored bytes; an unresolvable command type (:387); and a missing handler + registration (:409). The outbox retries an unresolvable type once, and the divergence is reasoned + rather than accidental: an outbox row's type may live in an assembly that has simply not loaded yet, + while a queue row can only ever run on a host that registers a handler for it, so a host that cannot name + the type has no such handler and retrying would burn the budget waiting for a fact that will not change + (ADR-114:116-133).

    The settings mirror OutboxSettings where the semantics match (InternalCommandsSettings.cs): BatchSize 50 (:31), MaxAttempts 5 (:39), PollingIntervalSeconds 2 (:49), LeaseSeconds 300 - (:68), RetryBackoffBaseSeconds 10 (:77), RetentionDays 7 (:93), CleanupIntervalHours 6 - (:108). Two deliberately differ. ProcessingDelaySeconds defaults to 0 rather than the outbox's 5 + (:69), RetryBackoffBaseSeconds 10 (:78), RetentionDays 7 (:94), CleanupIntervalHours 6 + (:109). Two deliberately differ. ProcessingDelaySeconds defaults to 0 rather than the outbox's 5 (:58), because that delay exists to bound a race with the in-process fast path that dispatches an event before the processor can, and a job queue has no such fast path. MaxRetryBackoffSeconds is its own - ceiling of 600 (:86) rather than reusing the lease, because a job queue wants a long lease for slow + ceiling of 600 (:87) rather than reusing the lease, because a job queue wants a long lease for slow handlers and a short ceiling on how long a transient failure parks a command, where the outbox gets one - number for both (ADR-114:133-141).

    + number for both (ADR-114:135-144).

    The worked example: an email that must survive a deploy

    MMCA.Store's Sales module schedules a payment-failure notification. The command is fifteen lines and most of them are documentation:

    // MMCA.Store.Sales.Application/Orders/InternalCommands/SendOrderPaymentFailedEmailInternalCommand.cs
     // (XML doc comments trimmed; the attribute, the record and the marker are verbatim.)
     [InternalCommandName("Sales.SendOrderPaymentFailedEmail")]
    -public sealed record SendOrderPaymentFailedEmailInternalCommand(OrderIdentifierType OrderId)
    -    : IInternalCommand;
    +public sealed record SendOrderPaymentFailedEmailInternalCommand(OrderIdentifierType OrderId) : IInternalCommand;

    One identifier as the payload, a stable name, and the marker. That is the entire contract.

    The scheduling site is OrderPaymentFailedSagaHandler, the domain-event handler Article 49 covers as a compensating saga step. It opens its own scope, resolves IInternalCommandScheduler, and calls ScheduleAsync(new SendOrderPaymentFailedEmailInternalCommand(domainEvent.OrderId), runAt: null, ...) (OrderPaymentFailedSagaHandler.cs:32,35). The same handler also schedules - ExpireUnpaidOrderInternalCommand (:79-82), which is the runAt case: a command that should run at a + ExpireUnpaidOrderInternalCommand (:81-83), which is the runAt case: a command that should run at a specific future instant rather than as soon as possible.

    The handler on the other side is an ordinary command handler with no queue awareness at all:

    // Condensed from SendOrderPaymentFailedEmailInternalCommandHandler.HandleAsync (logging trimmed).
    @@ -387,22 +397,26 @@ 

    The worked examp }

    Two lines of judgement carry the whole failure policy, and both are written down in the source rather than inferred. A missing order or customer returns success with a log line, because redelivery would - reach the same conclusion (SendOrderPaymentFailedEmailInternalCommandHandler.cs:15-18,36-50). The SMTP - call is not wrapped, so a transport fault fails the row and is retried by the framework (:17-18,59). + reach the same conclusion (SendOrderPaymentFailedEmailInternalCommandHandler.cs:17-18,37-50). The SMTP + call is not wrapped, so a transport fault fails the row and is retried by the framework (:17-18,60). And the command's own documentation states the honest cost: delivery is at-least-once with no sent marker kept, so a host that dies after the SMTP call re-sends once the claim lease expires - (SendOrderPaymentFailedEmailInternalCommand.cs:9-12).

    + (SendOrderPaymentFailedEmailInternalCommand.cs:10-11).

    The expensive case: permission, timeout and a cross-replica claim

    MMCA.ADC's AI session scoring is the other end of the range, and it is the case ADR-121 moved out of the in-process channel. One pass issues one paid Anthropic call per session, so losing it is expensive and running it twice is worse.

    -

    The command declares three interfaces rather than one (ScoreEventSessionsInternalCommand.cs:26-27):

    +

    The command declares four interfaces rather than one (ScoreEventSessionsInternalCommand.cs:38-39):

    // MMCA.ADC.Conference.Application/Sessions/UseCases/DecisionSupport/ScoreEventSessions/
     // ScoreEventSessionsInternalCommand.cs (doc comments trimmed).
     [InternalCommandName("Conference.ScoreEventSessions.v1")]
    -public sealed record ScoreEventSessionsInternalCommand(EventIdentifierType EventId)
    -    : IInternalCommand, IRequiresPermission, IHasTimeout
    +public sealed record ScoreEventSessionsInternalCommand(EventIdentifierType EventId, DateTime? RequestedAtUtc = null)
    +    : IInternalCommand, IRequiresPermission, IHasTimeout, IFeatureGated
     {
    +    // The kill switch over the paid pass: with the flag off, the FeatureGate decorator
    +    // short-circuits before the handler runs.
    +    public string FeatureName => ConferenceFeatures.SessionScoring;
    +
         // Safe on a deferred command because the row carries the scheduling organizer: the processor
         // restores that principal, so the gate evaluates the operator who asked, not a system principal.
         public string Permission => ConferencePermissions.SessionSelectionManage;
    @@ -411,30 +425,40 @@ 

    The exp // would let the claim expire mid-pass and a second replica start a concurrent, paid pass. public TimeSpan Timeout => TimeSpan.FromMinutes(12); }

    -

    That is the payoff of resolving the closed handler through the container. IRequiresPermission and - IHasTimeout are the ordinary markers every synchronous command uses, and they work here because the - decorator chain is the same chain.

    -

    The trigger endpoint schedules and answers 202 Accepted unconditionally - (SessionSelectionController.cs:108,115-117,126), and its [NonIdempotent] attribute records why - caching the 202 would be wrong: it would report acceptance for a request that never reached the queue, - hiding a schedule failure the caller has to act on (:109).

    +

    That is the payoff of resolving the closed handler through the container. IFeatureGated, + IRequiresPermission and IHasTimeout are the ordinary markers every synchronous command uses, and they + work here because the decorator chain is the same chain. A gate refusal on the processor is a Result + failure like any other, so it consumes an attempt (InternalCommandProcessor.cs:428-462).

    +

    The second positional member, RequestedAtUtc, is the request instant, and it makes a pass resumable: + the pass skips every session whose score was written at or after that instant, so a duplicate queued + behind a running pass completes without a paid call, and a retry after a timeout or a killed replica + resumes where the attempt stopped (ScoreEventSessionsInternalCommand.cs:25-33).

    +

    The trigger endpoint carries the same gate (SessionSelectionController.cs:125), because it only + schedules: the decorator fires minutes later on the processor, and without the attribute an organizer who + switched the pass off would still be told 202 Accepted for work that is about to be refused + (:115-121). It schedules the command with the service clock's current instant as RequestedAtUtc + (:132-136), returns the failure when the schedule write fails (:138-141), and answers 202 Accepted + otherwise (:144). Its [NonIdempotent] attribute records why caching the 202 would be wrong: it would + report acceptance for a request that never reached the queue, hiding a schedule failure the caller has to + act on (:126).

    Three pieces of handler discipline are worth copying (ScoreEventSessionsInternalCommandHandler.cs):

    • Lock and skip, not lock and wait. The handler takes a per-event IDistributedLock claim with a - 15-minute time-to-live (:53) and a wait of TimeSpan.Zero (:60), and the loser logs and returns - Result.Success() (:79-83). Queueing behind a pass already covering the same work would only pay for + 15-minute time-to-live (:56) and a wait of TimeSpan.Zero (:63), and the loser logs and returns + Result.Success() (:82-86). Queueing behind a pass already covering the same work would only pay for it twice.
    • A refusal is not retried, a fault is. A Result failure from the pass is a business outcome (no sessions to score, the event is not scorable) and replaying it would pay for the same refusal again, so it is logged and reported as success. An exception propagates instead, and the framework's backoff and - attempt ceiling decide how often it is replayed and when it is dead-lettered (:22-29,87-90).
    • + attempt ceiling decide how often it is replayed and when it is dead-lettered (:22-29,90-94).
    • Idempotent as required. Re-running a pass rewrites the same per-session score rows rather than - accumulating them (:30-33).
    • + accumulating them, and the pass receives the command's RequestedAtUtc so it skips sessions already + scored for this request (:30-36,88).

    The command's own remarks record what it replaced and why: an in-process channel plus a five-minute recovery sweep, where the channel was exactly as durable as the replica holding it, so a deploy or a crash between the trigger and the last session's score left the event half scored with nothing that would - ever pick it up again (ScoreEventSessionsInternalCommand.cs:13-19).

    + ever pick it up again (ScoreEventSessionsInternalCommand.cs:15-19).

    Operating it

    A queue with no operator surface is a queue that gets hand-edited in production SQL. IInternalCommandAdministration (IInternalCommandAdministration.cs:17) mirrors IOutboxAdministration @@ -460,46 +484,50 @@

    Trade-offs, honestly

    • One migration per relational data source. The table is in the model of every relational source (SQL Server, PostgreSQL and SQLite after ADR-113), so adopting the queue means - dotnet ef migrations add AddInternalCommands per source, applied before deploying (ADR-114:179-183). + dotnet ef migrations add AddInternalCommands per source, applied before deploying (ADR-114:192-196). The mapping is deliberately not gated on InternalCommands:Enabled, unlike the cron scheduler's job table, because a row must be able to commit in the same transaction as the aggregate change, a transaction does not span databases, and a flag that changed the schema would make enabling the queue a - migration rather than a deployment decision (:88-95).
    • + migration rather than a deployment decision (:97-100).
    • Execution is at-least-once, and it is a new obligation on ordinary commands. A replica that dies after its handler committed and before the row was stamped releases the row when its lease expires, and the command runs again. That is the same contract the outbox already places on event handlers, so it is not new for anyone using the framework, but a command handler previously only ever ran once per request - (ADR-114:185-189).
    • + (ADR-114:198-202).
    • A scheduled command runs with the scheduling user's authority, not the executing host's. That is what makes an IRequiresPermission command schedulable at all, and it means the row is a durable record of an authorization decision. If the user's roles change between scheduling and execution, the stored roles win. The record files that as deliberate (the decision was taken when the work was requested) and as the reason the row is under the same retention discipline as the outbox, because the payload can - carry personal data (ADR-114:191-197).
    • -
    • A command scheduled inside a transaction waits up to one polling interval. The enrolled row raises - no signal, because a signal before the commit only buys a poll against a transaction that has not - committed. PollingIntervalSeconds ships at 2, the same default the outbox ships, so the divergence is - a deployment decision rather than a framework one: ADC and Store both run the queue at 60 seconds while - pushing the outbox to 300 (ADR-114:199-209). A host that raises the interval to cut idle polling - accepts that much latency on transaction-scheduled work.
    • + carry personal data (ADR-114:204-210). +
    • The polling interval is the fallback, and production stretches it. A schedule does not wait for the + poll to be noticed: a row saved outright signals the processor, and a row enrolled in a transaction owes + a wake that the unit of work releases once the commit succeeds (DbContextFactory.cs:472-474). What the + interval bounds is how long an idle processor sleeps without a wake, because the smart wait is capped at + it (PollingLoop.cs:104, ADR-114:75-78). PollingIntervalSeconds ships at 2, the same default the + outbox ships, so the divergence is a deployment decision rather than a framework one: ADC and Store both + run the queue at 60 seconds while pushing the outbox to 300 (MMCA.ADC/infra/main.bicep:1700,1706, + MMCA.Store/infra/main.bicep:1493,1500). A host that raises the interval accepts that much latency on + any row whose wake never reaches an idle processor.
    • Two poll loops, not one. A host runs the outbox processor and the queue processor side by side, each with its own signal instance so a burst of schedules cannot consume the outbox's single pending wake-up. Both poll spans are suppressed from telemetry export by the same Aspire processor - (ADR-114:210-216). Two loops is two idle query streams against every source, which is exactly the + (ADR-114:223-228). Two loops is two idle query streams against every source, which is exactly the cost the 60-second production interval is paying down.
    • The duplication with the outbox is deliberate and bounded. Extending the outbox to carry commands was the tempting option and it is rejected on four counts: the two rows want different columns (a scheduled instant, an attempt budget, a captured principal), different indexes, different retention and different terminal semantics for an unresolvable type, and the outbox's poll predicate is the hottest query the framework issues, so widening it would make every outbox change a job-queue change - (ADR-114:169-176). The two processors share an idiom, not an implementation.
    • + (ADR-114:179-188). The two processors share the loop mechanics through PollingLoop and nothing + else: each keeps its own tables, queries, logging, metrics and activities.
    • The payload is JSON, which is a real constraint on what a command can carry. Identifiers and scalars round-trip; a loaded aggregate does not, and should not be attempted (IInternalCommand.cs:19-24). Everything a handler needs beyond an identifier it re-reads at execution time, which is correct anyway, because the world moved on between the schedule and the run.
    • Choosing between this and a channel is a per-job judgement no test enforces. ADR-121's question ("would losing this item be noticed as anything more than a missed UI refresh?") is a rule a human - applies, and getting it wrong in either direction is silent (ADR-121:128-131,146-149).
    • + applies, and getting it wrong in either direction is silent (ADR-121:130-133,148-151).

    Apply this even without MMCA

    The mechanism ports to anything with a relational database and a background worker. Six steps, in the diff --git a/articles/event-schema-versioning.html b/articles/event-schema-versioning.html index ff43c46c..29d4dfc1 100644 --- a/articles/event-schema-versioning.html +++ b/articles/event-schema-versioning.html @@ -192,8 +192,8 @@

    Why it matters

    An event that carries only MessageId (idempotency) and DateOccurred (when the business action happened) has no version signal at all, and a consumer meeting an unfamiliar payload has nothing to branch on: it cannot tell a producer that has moved ahead of it from a shape it should refuse, and it - certainly cannot upcast. That is the one substantive CQRS and event-driven gap the scorecard names - under §6, and ADR-010 is the answer.

    + certainly cannot upcast. ADR-010 is the answer, and the scorecard's section 6 row cites its SchemaVersion + gate and the ADR-090 upcaster pipeline as CQRS and event-driven evidence.

    The MMCA answer: a version on every event, and a rule for changing it

    The decision has two halves: a signal that is enforced, and a discipline for breaking changes.

    Half one: every integration event carries an explicit SchemaVersion. The base record exposes it @@ -229,7 +229,7 @@

    The gone, and any consumer mid-deploy or slow to upgrade is reading a contract that no longer exists. New-type-for-breaking-change is the only safe option when transport binds by type and consumers deploy independently.

    -

    Since 2026-08-21 the framework ships the wiring for that migration, not only the rule (ADR-090). An +

    The framework ships the wiring for that migration, not only the rule (ADR-090, accepted 2026-08-21). An upcaster is one typed class, IEventUpcaster<TOld, TNew>, registered by the module that owns the contract:

    // Module DI: one line per retired contract.
    @@ -247,7 +247,8 @@ 

    The the old type is deleting these lines.

    SchemaVersion is non-breaking by construction. A virtual get-only default (=> 1) means no existing event has to change and no outbox row has to be migrated: System.Text.Json tolerates the missing field - on old payloads and the type supplies the default; new rows simply gain "schemaVersion":1. It lives in + on old payloads and the type supplies the default; new rows simply gain "SchemaVersion":1 (the outbox + serializer sets no naming policy, so the payload keeps the .NET property name). It lives in the framework, and a framework change reaches every consumer in one pass: the lockstep policy (ADR-016) bumps every MMCA.Common.* pin in every consumer together, with no phased rollout, so no consumer sits on a base record its producers have moved past.

    @@ -265,10 +266,9 @@

    Trade-offs, honestly

    ADR-010 is candid that the field is a signal, not a complete mechanism.

    • SchemaVersion by itself does not stop a consumer breaking on a real reshape. It is a value on - the wire, and the load-bearing half is still the discipline: new type plus upcaster. That half is no - longer only a discipline. The framework now ships the registration extension point (2026-08-21, - ADR-090): a typed IEventUpcaster<TSource, TTarget>, AddEventUpcaster<...>(), a chaining registry - that preserves the envelope, a draining broker consumer for the retired queue, and two fitness + the wire, and the load-bearing half is the discipline: new type plus upcaster. That half has + framework support in the registration extension point (ADR-090): a typed + IEventUpcaster<TSource, TTarget>, AddEventUpcaster<...>(), a chaining registry that preserves the envelope, a draining broker consumer for the retired queue, and two fitness functions that reject two upcasters claiming one source contract or a target that does not raise SchemaVersion. Two gaps stay open and are worth naming: the framework itself still ships no V2 event of its own (its one concrete integration event stays at version 1, so the first real consumer @@ -316,7 +316,7 @@

      Apply this even without MMCA

      MMCA.Common puts an enforced SchemaVersion on every event and answers a breaking change with a new type plus a registered upcaster that the framework chains and applies on both delivery paths, and how that complements the outbox's at-least-once delivery.

      -

      Next in the series: cross-service auth without a shared secret, JWKS dual-fetch and RS256 so an +

      Next in the series: cross-service auth without a shared secret, JWKS discovery and RS256 so an extracted service validates tokens with no shared key.

      MMCA.Common is Apache-2.0 licensed and open source. Star the repo, read the 2-minute ADR-010 behind this policy, or dotnet add package MMCA.Common.API and try it.

      diff --git a/articles/external-oauth-login.html b/articles/external-oauth-login.html index dddc0fd5..ac2c5d99 100644 --- a/articles/external-oauth-login.html +++ b/articles/external-oauth-login.html @@ -252,20 +252,24 @@

      The MMCA ans // Stash the minted token pair server-side under a short TTL; the redirect carries only the opaque // code plus the client's own state, so the client can prove the code belongs to the flow it started. var exchangeCode = Convert.ToHexString(RandomNumberGenerator.GetBytes(32)); -await cacheService.SetAsync( - "oauth-exchange:" + exchangeCode, response, TimeSpan.FromMinutes(2), HttpContext.RequestAborted); +await cacheService.SetAsync( // prefix "oauth-exchange:", lifetime 2 minutes + OAuthExchangeCodePrefix + exchangeCode, response, OAuthExchangeCodeLifetime, HttpContext.RequestAborted); // Web target normally; the allow-listed native scheme when mobileReturnUrl is non-null (ADR-043). return Redirect(BuildSuccessRedirectUrl(uiBaseUrl, mobileReturnUrl, exchangeCode, returnUrl, clientState)); // OAuthControllerBase.ExchangeAsync (POST, [NonIdempotent], out of band): burn the code on first use. if (string.IsNullOrWhiteSpace(request.Code)) { return InvalidCode(); } -var response = await cacheService.GetAsync<AuthenticationResponse>("oauth-exchange:" + request.Code, ct); +var cacheKey = OAuthExchangeCodePrefix + request.Code; +// The shared store, not a local copy: a code burned on another replica must be a miss here. +var response = await cacheService.GetFromSharedStoreAsync<AuthenticationResponse>(cacheKey, cancellationToken); if (string.IsNullOrEmpty(response.AccessToken)) { return InvalidCode(); } // missing/replayed/expired => 400 -await cacheService.RemoveAsync("oauth-exchange:" + request.Code, ct); // single-use +await cacheService.RemoveAsync(cacheKey, cancellationToken); // single-use return Ok(response);

    Read the redirect line again: it carries code=..., not access_token=.... The access and refresh tokens sit in the server-side cache the whole time. They reach the browser only through a same-origin POST response body, which history, the Referer header, and upstream access logs do not record. The + exchange reads the code from the shared cache store rather than a per-replica copy, so a code already + burned on one replica is a miss on every other. The code is burned on first read, so a leaked or replayed code buys nothing, and a blank, missing, replayed, or expired code returns HTTP 400. The exchange is marked [NonIdempotent], because replaying a stored response would defeat the burn.

    @@ -322,7 +326,9 @@

    Finding the local user, three waysLoginProvider varchar(50), ProviderKey varchar(256)) plus a unique index over the pair filtered to non-null rows, so two external identities cannot collide onto one account while local (null, null) - accounts stay unconstrained. Whichever of the three paths runs, the exchange finishes through the + accounts stay unconstrained. An existing account, whether matched by provider key or linked by email, + is refused before anything is saved when an administrator has locked it; a brand-new account cannot + be locked. Whichever of the three paths runs, the exchange finishes through the shared IssueTokensAsync workflow, which opens a refresh session for the device (hashed at rest, a per-user cap, a rotation chain) rather than stamping a plaintext refresh token on the aggregate, and hands back the same AuthenticationResponse shape a password login returns. A brand-new external user diff --git a/articles/extract-module-to-grpc-service.html b/articles/extract-module-to-grpc-service.html index 1feef2a4..2ef968ea 100644 --- a/articles/extract-module-to-grpc-service.html +++ b/articles/extract-module-to-grpc-service.html @@ -228,9 +228,13 @@

    Step 2: server side, AddGrpcS server call shapes, logs it, and rethrows errors.ToRpcException(), an RpcException whose StatusCode comes from a FrozenDictionary<ErrorType, StatusCode> mapping that mirrors the HTTP ErrorType-to-status table in ErrorHttpMapping, the internal type ApiControllerBase reads on the - REST side (the unhandled-failure filter reads the same one). The trailers carry every error as - structured metadata. The client adapter reads those trailers back and reconstructs - Result.Failure(errors). One error model, two transports, written once in the interceptor.

    + REST side (the unhandled-failure filter reads the same one). The status comes from the most severe + error in the list, and the trailers carry every error as structured metadata. On the calling side, + RpcException.ToResult() reads those trailers back and reconstructs Result.Failure(errors), degrading + a transport fault that carries no trailers to a single Grpc.{StatusCode} error. An adapter whose + interface returns a Result closes the round trip with it; one whose interface returns a plain value + (IBookmarkCountService returns a count) lets the RpcException propagate instead. One error model, + two transports, written once in the interceptor.

    Step 3: client side, AddTypedGrpcClient<TClient>(serviceName)

    On the calling side (Conference's host), wire the typed gRPC client and replace the local interface registration with the adapter:

    @@ -246,15 +250,20 @@

    Step 3: client HttpContext onto the outgoing call's metadata, so the caller's JWT rides along downstream and distributed authorization works without each handler threading a token (it is a no-op outside an HTTP request, for example in a background processor). -
  • AddStandardResilienceHandler() gives every gRPC client the same Polly retry, timeout, and - circuit-breaker pipeline as the HTTP clients. A deliberate SocketsHttpHandler override forces +
  • AddStandardResilienceHandler() gives every gRPC client a Polly retry, timeout, and + circuit-breaker pipeline whose values come from GrpcResilienceDefaults. The timeouts and the retry + budget are the HTTP clients' own. The retry fires only on a failure to reach the peer (an + HttpRequestException), because every gRPC call is a POST and replaying one that reached the handler + could run it twice. The circuit breaker carries explicit gRPC values. A deliberate SocketsHttpHandler override forces explicit HTTP/2 so the resilience handler cannot defeat the h2c negotiation.
  • The services.Replace(...) is deliberate and uses Replace, not TryAdd. By the time this runs (after - ModuleLoader), the container already holds either the real in-process IBookmarkCountService (if - Engagement is enabled in this host) or a Disabled* stub (registered by the module's - RegisterDisabledStubs() when the peer is disabled). Replace wins over both, so after the call the - resolved interface is always the gRPC adapter pointing at the extracted peer. That is why the call comes + ModuleLoader), the container holds one of three things: the real in-process IBookmarkCountService + (if Engagement is enabled in this host), a Disabled* stub (registered by the module's + RegisterDisabledStubs() when the peer is disabled in configuration), or nothing at all (a dedicated + service host names only its own module to ModuleLoader, so the peer is never discovered and no stub + is registered). Replace covers all three, so after the call the resolved interface is always the gRPC + adapter pointing at the extracted peer. That is why the call comes after module discovery.

    Step 4: flip the message bus from in-process to broker

    Synchronous calls now cross the wire. The asynchronous, fire-and-forget flows (domain and integration @@ -269,16 +278,19 @@

    Step 4: flip the builder.Services.AddBrokerMessaging(builder.Configuration); // MessageBus__Provider=RabbitMq (injected by the AppHost's WithBroker) selects BrokerMessageBus.

    Your aggregate code, which does AddDomainEvent(new BookmarkAdded(...)), does not change. The - transactional outbox is what makes the switch safe: the same durable outbox row is drained to an - in-process handler today and published to the broker tomorrow. The reliability pattern and the - extraction boundary are the same mechanism (ADR-003).

    + transactional outbox follows the same setting. With a broker selected it resolves on: the event is + written as a durable outbox row in the same transaction as the aggregate change and published to the + broker after commit. With InProcess it resolves off and events dispatch inside the process that + raised them, unless the host opts in with MessageBus:EnableOutbox=true. The OutboxMessages table + stays mapped either way, so the switch is never a migration (ADR-003, as amended by ADR-100).

    Step 5: JWKS so the new service validates tokens

    The extracted Engagement service now receives forwarded JWTs from Conference and must validate them. It does so against the issuer's JWKS, the public signing keys, not a shared secret. IJwksProvider (implemented by RsaJwksProvider in Infrastructure) exposes the signing keys, and JwksEndpointExtensions in the API layer serves /.well-known/jwks.json so any extracted service can - fetch the issuer's public keys and validate independently. JWKS discovery is routed through the gateway - (ADR-004). No service ever needs to share a symmetric secret with another, which is what makes the fleet + fetch the issuer's public keys and validate independently. Under local Aspire the JWKS backchannel is routed + through the gateway; in Azure Container Apps each service points straight at the identity app's + in-cluster address (ADR-004, ADR-012). No service ever needs to share a symmetric secret with another, which is what makes the fleet safe to grow.

    Step 6: wire it in the AppHost with MMCA.Common.Aspire.Hosting

    Local orchestration is where the topology becomes runnable. MMCA.Common.Aspire.Hosting provides @@ -309,8 +321,8 @@

    Step 7: route through the YARP ga

    Clients never address a service directly. A single YARP reverse-proxy gateway owns the route-to-service map and is the only entry point. It has no DbContext and no controllers; it is CORS, static files, the route table, and the edge concerns in step 8. You add the service's routes to the - gateway's table and reference it for discovery, and you wire JWKS discovery so the new service - resolves keys through that same gateway:

    + gateway's table and reference it for discovery, and in the local AppHost you wire JWKS discovery so + the new service resolves keys through that same gateway:

    var gateway = builder.AddProject<Projects.MMCA_App_Gateway>("gateway")
         .WithReference(engagementService)
         .WithReference(conferenceService)
    @@ -370,8 +382,8 @@ 

    Step 8: what the edge process server-rendered UI host whose every back-end call leaves from one address that the per-IP window would otherwise collapse into a single partition. ADC's gateway names the trusted-caller header in configuration and takes the secret itself from Key Vault. A request with no attributable client IP - is not limited at all: that is - fail-open, chosen over collapsing every unattributable caller into one shared bucket. The settings + skips the per-IP window (fail-open, chosen over collapsing every unattributable caller into one shared + bucket) but still counts against the concurrency cap. The settings validate on both construction paths, the options pipeline (ValidateOnStart) and a Validator.ValidateObject call at registration, because the limiter closes over an eagerly bound copy and a caller can hand it settings without passing through options at all. @@ -407,21 +419,25 @@

    A note y
    • Profile A (serves inbound cleartext gRPC, including any bidirectional pair). Kestrel is Http2-only on cleartext (h2c prior knowledge), so peer gRPC clients negotiate without TLS. The - gateway must forward HTTP/2 (ForwardHttp2=true, and transport: http2 on the container ingress). - JWKS uses the two-argument WithJwksDiscovery(identity, gateway), because the HTTP/1.1 JwtBearer - backchannel cannot reach an Http2-only endpoint directly, so it goes through the gateway, which - terminates TLS and routes /.well-known/* on. Any service that serves gRPC over cleartext needs + gateway cluster fronting the host declares Version 2 with VersionPolicy RequestVersionExact in + its ReverseProxy configuration (a policy that allows a lower version would downgrade to HTTP/1.1, + which the backend rejects), and the container ingress is transport: http2. Locally, JWKS uses the + two-argument WithJwksDiscovery(identity, gateway), because the HTTP/1.1 JwtBearer backchannel + cannot reach an Http2-only endpoint directly, so it goes through the gateway, which terminates TLS + and routes /.well-known/* on. In Azure Container Apps each service sets the direct in-cluster + authority http://<identity app> instead, and the http2 ingress carries the metadata fetch. Any service that serves gRPC over cleartext needs Profile A. ADC uses it.
    • Profile B (consumer-only, one-directional gRPC, gRPC rides the HTTPS/ALPN endpoint). Kestrel is - Http1AndHttp2; gRPC clients use the HTTPS endpoint where ALPN negotiates HTTP/2. The gateway forwards - HTTP/1.1 (ForwardHttp2=false), and JWKS uses the single-argument WithJwksDiscovery(identity).
    • + Http1AndHttp2; gRPC clients use the HTTPS endpoint where ALPN negotiates HTTP/2. The gateway cluster + declares no version pair, so YARP's negotiating default resolves to HTTP/1.1 against the cleartext + endpoint, and JWKS uses the single-argument WithJwksDiscovery(identity).

    A 2026 update is the cautionary tale here: Store originally chose Profile B because its gRPC edges looked "consumer-only," but a one-directional topology still has services that serve inbound cleartext gRPC, and Azure Container Apps cleartext ingress cannot deliver HTTP/2 to them under Profile B. The result was HTTP_1_1_REQUIRED 500s in production. Store converged to Profile A. The lesson: if any service in your fleet hosts an inbound gRPC server over cleartext, you are on Profile A, and you must - flip Kestrel, ForwardHttp2, the ingress transport, and the JWKS form together.

    + flip Kestrel, the gateway cluster's version policy, the ingress transport, and the JWKS form together.

    There is a sharper case the two-profile framing does not cover on its own: a host that needs both. ADC's Notification service serves a SignalR hub (whose WebSocket transport needs the HTTP/1.1 Upgrade handshake) AND an inbound live-channel gRPC ingress, and Store's Sales service runs the same @@ -440,8 +456,8 @@

    The whole point: it stays reversibl

    Walk the steps back and you see why this is not a one-way door. Because transport lives at the edge and the core talks to abstractions, a service can be re-collapsed into a combined host by changing configuration, not code. Enable the peer module in the same host, drop the services.Replace(...) that - swapped in the gRPC adapter, and the in-process implementation resolves again. Flip MessageBusSettings - back to InProcessMessageBus and events dispatch in-process. The ModuleLoader boots the same module + swapped in the gRPC adapter, and the in-process implementation resolves again. Set MessageBus:Provider + back to InProcess and InProcessMessageBus dispatches events in-process. The ModuleLoader boots the same module code either way. That reversibility is insurance: a small team can adopt microservices without betting that the split was correct on the first try.

    Trade-offs, honestly

    diff --git a/articles/feature-flags-cqrs-pipeline.html b/articles/feature-flags-cqrs-pipeline.html index e5ff01bd..c932209e 100644 --- a/articles/feature-flags-cqrs-pipeline.html +++ b/articles/feature-flags-cqrs-pipeline.html @@ -212,11 +212,13 @@

    The MMCA

    Manufacturing that typed failure is the one subtle piece. TResult is unconstrained (it is Result for some handlers and Result<T> for others), so the decorator cannot just new up a failure. It holds a - cached delegate, CreateFailure, built once per closed generic type via ResultFailureFactory.Build + static delegate field, _createFailure (FeatureGateCommandDecorator.cs:38), filled once per closed + generic type by the CreateFailure() accessor through ResultFailureFactory.Build (FeatureGateCommandDecorator.cs:44-45), which turns an error list into the right TResult failure with no - per-call reflection.

    + per-call reflection. The field is built on the first short-circuit, not eagerly, so the happy path never + touches it (FeatureGateCommandDecorator.cs:29-37).

    The last, load-bearing detail is where the decorator sits. In AddApplicationDecorators the feature gate - is registered last on both sides (DependencyInjection.cs:143 for commands, :151 for queries). Because + is registered last on both sides (DependencyInjection.cs:140 for commands, :148 for queries). Because the pipeline applies decorators in reverse registration order (ADR-014), last-registered is outermost, so the feature gate is the first decorator every request meets. A command runs feature gate, authorization, logging, caching, validation, timeout, transaction, handler; a query runs feature gate, authorization, @@ -264,7 +266,9 @@

    The MMCA = "Sales.PaymentVerification" (SalesFeatures.cs:23), ConferenceFeatures.SessionizeIntegration = "Conference.SessionizeIntegration" (ConferenceFeatures.cs:23), NotificationFeatures.PushNotifications = "Notification.PushNotifications" (NotificationFeatures.cs:12). ADC's RefreshFromSessionizeCommand - gates the Sessionize sync this way (RefreshFromSessionizeCommand.cs:13,19); Store's VerifyPaymentCommand + gates the Sessionize sync this way (RefreshFromSessionizeCommand.cs:15,21), ADC's + ScoreEventSessionsInternalCommand gates the paid AI session-scoring pass + (ScoreEventSessionsInternalCommand.cs:39,48), and Store's VerifyPaymentCommand gates the direct Stripe verification path (VerifyPaymentCommand.cs:20,35).

    The second surface, and why disabled means 404

    A feature can be reachable from the CQRS pipeline, but it can also be reachable straight from an MVC @@ -278,9 +282,12 @@

    The second surface, and w 404 Not Found and the title "Feature not available" (DisabledFeatureHandler.cs:18-26).

    Both surfaces agree on one convention that is worth stating plainly: a disabled feature returns not-found, never 403 Forbidden. The pipeline decorator short-circuits with ErrorType.NotFound; the - edge handler returns 404. A disabled feature is therefore indistinguishable from a nonexistent one. That - is deliberate: 404 hides the feature's existence rather than advertising a capability the caller is not - allowed to use. Turning a flag off makes the feature vanish, not merely refuse.

    + edge handler returns 404. Neither answer looks like a permissions problem, but neither body is + anonymous either (ADR-031). The edge body is titled "Feature not available" (DisabledFeatureHandler.cs:21). + The CQRS failure travels through the Result to ProblemDetails mapping, whose errors extension serializes + each error's code and message (ErrorHttpMapping.cs:62-69), so the caller sees the Feature.Disabled code + and a message naming the flag (FeatureGateCommandDecorator.cs:57-59). Turning a flag off makes the + feature answer not-found and say that a feature is unavailable, not report a locked door.

    Trade-offs, honestly

    • The two surfaces must be kept in agreement by hand. Gating the controller but not the command (or @@ -317,10 +324,16 @@

      Trade-offs, honestly

      (AuthClaimTypes.Subject, AuthClaimTypes.cs:34) and falls back to the mapped ClaimTypes.NameIdentifier (ClaimsPrincipalExtensions.cs:26-28) and then to Identity.Name. A filter configured with no targeting audience gains no stickiness from the accessor at all.
    • -
    • It is opt-in, and the pipeline side is adopted narrowly. Exactly two use cases implement - IFeatureGated across both apps, both of them commands: ADC's RefreshFromSessionizeCommand - (RefreshFromSessionizeCommand.cs:13) and Store's VerifyPaymentCommand (VerifyPaymentCommand.cs:20). - No query is gated. The flag inventory is wider than the pipeline usage: twelve flag-name constants +
    • It is opt-in, and the pipeline side is adopted narrowly. Three use cases implement + IFeatureGated across both apps, all of them commands: ADC's RefreshFromSessionizeCommand + (RefreshFromSessionizeCommand.cs:15) and ScoreEventSessionsInternalCommand + (ScoreEventSessionsInternalCommand.cs:39), and Store's VerifyPaymentCommand (VerifyPaymentCommand.cs:20). + The scoring command is a durable internal command that the framework's processor runs through the same + decorator pipeline, so with its flag off the gate's failure completes the queued row rather than retrying + it (ScoreEventSessionsInternalCommand.cs:42-46); its trigger endpoint also carries + [FeatureGate(ConferenceFeatures.SessionScoring)] (SessionSelectionController.cs:125), so that flag is + enforced at both surfaces. No query is gated. The flag inventory is wider than the pipeline usage: + thirteen flag-name constants across six *Features classes (Common's Notifications and Privacy, ADC's Conference and Engagement, Store's Catalog and Sales), every one of them annotated Permanent, with the rest enforced at the HTTP edge by [FeatureGate]. It is a capability the pipeline offers uniformly, not something every handler @@ -338,14 +351,15 @@

      Apply this even without MMCA

      validation, or a transaction. The cheapest request is the one you decline first.
    • Manufacture a typed failure, do not throw, when the flag is off. In a Result-based codebase that is a not-found value flowing back through the pipeline; the caller translates it to a 404.
    • -
    • Return not-found, never forbidden, for a disabled feature, so turning a flag off hides the feature - rather than announcing a capability behind a locked door.
    • +
    • Return not-found, never forbidden, for a disabled feature, and say in the body that the feature is + unavailable, so turning a flag off reads as "not here right now" rather than a capability behind a locked door.
    • Name flags as constants next to the module they belong to, matched to config keys, so a flag flips at config-and-restart and there are no magic strings in handlers.
    • The takeaway: a feature flag is a cross-cutting concern, so put it where the other cross-cutting concerns live. Gate the pipeline at its outermost edge with a one-property marker interface, and your handlers stay - flag-free, your kill switch rejects with zero wasted work, and a disabled feature simply is not there.

      + flag-free, your kill switch rejects with zero wasted work, and a disabled feature answers not-found before + any of it runs.


      What we covered: why a flag check inside a handler is a copy-paste cross-cutting concern, how IFeatureGated plus the outermost FeatureGateCommandDecorator / FeatureGateQueryDecorator gate diff --git a/articles/generic-entity-controllers.html b/articles/generic-entity-controllers.html index 82eac353..85164401 100644 --- a/articles/generic-entity-controllers.html +++ b/articles/generic-entity-controllers.html @@ -209,9 +209,9 @@

      The MMCA an
      • Sparse fieldsets. A comma-separated fields query parameter drives a server-side projection. QueryFieldService.ApplyFieldSelection builds a MemberInit expression that selects only the requested writable properties, so only those columns leave the database, and the compiled expression is cached per entity type and field set so a repeated fields= request does not rebuild the tree. That cache is capped at 512 entries, since the field set is client-supplied; past the cap a request skips server-side projection instead of growing the cache further, though the response body is still trimmed to the requested fields. Read-only and computed properties are rejected at validation, since the projection needs setters.
      • Dynamic per-type filtering. The paged route binds Dictionary<string, (string Operator, string Value)> filters through [ModelBinder(typeof(QueryFilterModelBinder))]. The binder parses ?filters[Name].operator=contains&filters[Name].value=shirt style keys (case-insensitive, incomplete pairs silently dropped) into the dictionary. QueryFilterService.ApplyFilters then resolves one IFilterStrategy per property CLR type from a strategy registry (string, bool, int, long, DateTime, decimal, Guid and their nullables out of the box), and each strategy declares the operator set it SupportedOperators. This is the load-bearing constraint: filtering is dynamic over the wire but it is not free-form expression evaluation. Every property routes through a registered strategy, and QueryFilterService.ValidateFilters rejects an unknown property or an unsupported operator before the database is touched.
      • -
      • Sort. sortColumn and sortDirection feed QueryFieldService.ApplySorting, an OrderBy("<col> ascending|descending") over the entity property the DTO name maps to.
      • -
      • Pagination and the X-Pagination header. The paged route clamps the requested page size with Math.Min(pageSize, MaxPageSize), where MaxPageSize reads IApplicationSettings.MaxPageSize and falls back to 500. The pagination metadata (total count, page size, current page) is serialized into the X-Pagination response header as JSON, so the body stays just the items.
      • -
      • A streamed CSV export. [HttpGet("export")] reuses the same filter, sort, and fields contract and writes rows to the response body a page at a time, so the file never lands in memory. It stops at MaxExportRows (IApplicationSettings.MaxExportRows, falling back to 100,000), announces that ceiling up front in an X-Export-Row-Limit header, and ends a truncated file with a trailing marker row: headers are frozen the moment the first body byte is flushed, so the marker is the only signal still writable once the export is under way. It takes no includeChildren, since a child collection has no faithful representation in a flat CSV cell.
      • +
      • Sort. sortColumn and sortDirection feed QueryFieldService.ApplySorting, an OrderBy("<col> ascending|descending") over the entity property the DTO name maps to. On a paginated query the pipeline appends Id ascending as a final tie-break key, so Skip/Take runs over a total order even when the requested sort column has duplicates.
      • +
      • Pagination and the X-Pagination header. The paged route clamps the requested page size with Math.Min(pageSize, MaxPageSize). MaxPageSize reads ApplicationSettings.MaxPageSize through IOptions<ApplicationSettings>, falls back to 500, and is itself clamped to the range 1 to EntityQueryPipeline.MaxUnboundedResultLimit (1000), so a configured value above 1000 has no effect and the pagination metadata never promises a page size the pipeline does not serve. The pagination metadata (total count, page size, current page) is serialized into the X-Pagination response header as JSON, so the body stays just the items.
      • +
      • A streamed CSV export. [HttpGet("export")] reuses the same filter, sort, and fields contract and writes rows to the response body a page at a time, so the file never lands in memory. Row scoping is fail-closed: the export reads through the same GetReadSpecificationAsync hook as the list routes, and when that hook resolves to no specification the request is refused with a 403 (Export.RowScopeRequired) before anything is queried, unless the controller opts in through AllowUnscopedExport. It stops at MaxExportRows (ApplicationSettings.MaxExportRows, where an unset, zero, or negative value falls back to 100,000), announces that ceiling up front in an X-Export-Row-Limit header, and ends a truncated file with a trailing marker row: headers are frozen the moment the first body byte is flushed, so the marker is the only signal still writable once the export is under way. It takes no includeChildren, since a child collection has no faithful representation in a flat CSV cell.
      • A last-resort ceiling. Independent of the API clamp, EntityQueryPipeline.MaxUnboundedResultLimit = 1000 caps any unpaginated query with query.Take(MaxUnboundedResultLimit). Even a direct service caller who omits pagination entirely cannot trigger an unbounded full-table load.
      • Two include paths. includeFKs and includeChildren select navigation loading, and EntityQueryPipeline runs one of two strategies. PATH 1 handles source-supported includes via EF Core .Include() translated to SQL (forcing split-query when a child collection is included, so pagination does not truncate the JOIN-expanded rows). PATH 2 handles includes the source cannot JOIN by materializing the page first, then batch-loading related data via an INavigationPopulator (the cross-source loader of ADR-002).
      @@ -241,6 +241,34 @@

      The line where the user

      This is worth internalizing as a general shape: the same change bought both a closed injection surface and a fixed plan-cache hit rate, because both problems have the same root cause, which is a user's value ending up in the text of a query instead of beside it.

      +

      The same rule for hand-written SQL

      +

      The filter DSL is not the only path from a caller's value to the database. Some reads need a window + function, a recursive CTE, or a vendor-specific operator that LINQ cannot express, and ADR-125 gives + those exactly one door: IRawSqlQueryExecutor. Its two methods, QueryAsync<T> and + QuerySingleOrDefaultAsync<T>, accept a FormattableString and nothing else. The provider turns + every interpolation hole into a command parameter, and a concatenated statement is a plain string + that does not compile against either method:

      +
      // Compiles: customerId becomes a command parameter, and the statement text stays stable.
      +var count = await rawSql.QuerySingleOrDefaultAsync<int>(
      +    $"SELECT COUNT(*) FROM Orders WHERE CustomerId = {customerId}", cancellationToken);
      +
      +// Does not compile: concatenation produces a string, not a FormattableString.
      +// await rawSql.QueryAsync<OrderRow>("SELECT * FROM Orders WHERE Name = '" + name + "'");
      +

      The signature closes the door it owns, but it cannot stop module code from calling EF Core directly, + where FromSqlRaw, SqlQueryRaw, ExecuteSqlRaw, and ExecuteSqlRawAsync take a plain string and + sit one word away from their parameterizing twins. So the ban is a fitness test rather than a + guideline: RawSqlConventionTestsBase.ModuleCode_UsesParameterizedSqlOnly scans the source of every + mapped module, fails on any of those four members, and names FromSql/SqlQuery/ExecuteSql or + IRawSqlQueryExecutor as the replacement in its failure message, so the test output is the + instruction. A scan that finds no module directories fails instead of passing vacuously. MMCA.Store + subclasses the base with its own architecture map and an explicitly empty AllowedFiles list, so + every new raw call site in the store is a build failure. The root cause is the one above: the value + belongs beside the query text, never inside it, and plan reuse comes with it.

      +

      The limits are worth stating. FormattableStringFactory.Create can still wrap an already-concatenated + string, so the contract blocks the careless path rather than proving safety. The test is a textual + scan of exactly four member names, so SQL reaching the database through raw ADO.NET or a micro-ORM is + outside it. And the executor is relational only: a host whose default source is Cosmos DB has no + registration, so injecting the interface there fails when the container is validated.

      Trade-offs, honestly

      A generic, dynamically queryable contract coupled to the entity model is a real trade against narrow bespoke endpoints. ADR-034 names the costs rather than hiding them.

        @@ -259,7 +287,7 @@

        Apply this even without MMCA

      • Mediate the wire contract through a DTO and a name map. Projecting entities straight to JSON couples your API to your schema. A DTO plus a DTO-to-entity property map lets a column rename stay an internal change instead of a breaking one.

      • -

        What we covered: why hand writing a list/paged/by-id CRUD controller plus ad-hoc filter/sort/paging parsing per entity is the bulk of a monolith's boilerplate and drifts in shape, and how MMCA.Common answers with two base classes (EntityControllerBase for the five reads, AggregateRootEntityControllerBase for idempotent create and delete) over a shared EntityQueryService and EntityQueryPipeline, plus a bounded OData-lite query contract: sparse fields projection, QueryFilterModelBinder plus per-type IFilterStrategy filtering with up-front validation, sort, an X-Pagination header with a MaxPageSize clamp, a streamed CSV export bounded by MaxExportRows, a MaxUnboundedResultLimit ceiling, and a two-path include strategy, composing with manual DTO mapping (ADR-001), navigation populators (ADR-002), the Result edge (ADR-013), and idempotency (ADR-017).

        +

        What we covered: why hand writing a list/paged/by-id CRUD controller plus ad-hoc filter/sort/paging parsing per entity is the bulk of a monolith's boilerplate and drifts in shape, and how MMCA.Common answers with two base classes (EntityControllerBase for the five reads, AggregateRootEntityControllerBase for idempotent create and delete) over a shared EntityQueryService and EntityQueryPipeline, plus a bounded OData-lite query contract: sparse fields projection, QueryFilterModelBinder plus per-type IFilterStrategy filtering with up-front validation, sort, an X-Pagination header with a MaxPageSize clamp, a streamed CSV export bounded by MaxExportRows, a MaxUnboundedResultLimit ceiling, and a two-path include strategy, composing with manual DTO mapping (ADR-001), navigation populators (ADR-002), the Result edge (ADR-013), and idempotency (ADR-017), with hand-written SQL held to the same parameterize-the-value rule by the FormattableString-only IRawSqlQueryExecutor and a fitness test that bans EF's raw-string members (ADR-125).

        Next in the series: resource-ownership authorization, the row-level axis that decides not just what a caller may do but which rows they may touch.

        MMCA.Common is Apache-2.0 licensed and open source. Star the repo, read the 2-minute ADR-034 behind this pattern, or dotnet add package MMCA.Common.API and try it.

        diff --git a/articles/governed-llm-boundary.html b/articles/governed-llm-boundary.html index 86fa6846..4d07982f 100644 --- a/articles/governed-llm-boundary.html +++ b/articles/governed-llm-boundary.html @@ -175,8 +175,8 @@

        Why it matters

        Rubric §16, AI-Native Application Architecture, asks exactly one question of a product feature that calls a model: is that dependency governed like any other external system, meaning isolated, versioned, @@ -190,51 +190,69 @@

        Why it matters

        The category is deliberately N/A until a product feature calls a model, and scored the moment one does (:473). That applicability rule is the honest part: most systems get to skip §16, right up until the afternoon they do not.

        -

        MMCA.Common scores it. The §16 row sits at Maturity 3 / Implementation 6, moved there on the - thirty-fifth-wave re-score of 2026-09-15 on the strength of the guardrail extension point, the latency - histogram and host-side telemetry export (common-ArchitectureScorecard.md:75), with §16 back in both - denominators at weight 2 (:124). Implementation 6 is the Adequate band and the row says why: two of the - seven criteria are wholly absent from the framework by design, which is a sentence you will see again in +

        MMCA.Common scores it. The §16 row sits at Maturity 4 / Implementation 9 at weight 2 + (common-ArchitectureScorecard.md:80), with §16 in both denominators and a weight total of 82 + (:104). The row walks the seven criteria as five met, one partial and one unexercised: evaluation is + gated in CI by a golden-replay base that refuses an empty corpus, guardrails are the partial criterion, + and retrieval is the unexercised one. Maturity 4 is the build-breaking part (the prompt-contract pin, the + golden-replay gate, the registration-time guardrail refusal and the startup pattern validation all fail + the build), and Implementation 9 rather than 10 is the guardrail residuals, which you will see again in the trade-offs.

        -

        The MMCA answer: one optional package, and the call is a pipeline

        -

        MMCA.Common.AI is one of the nineteen published framework packages (MMCA.Common/FACTS.md:19, listed - at :22, framework v1.205.0 at :14) and it is optional: nothing in the metapackage drags it in, and a - host that never calls a model never installs it. In the onboarding taxonomy it is group G28, Common AI - Integration, twelve types across levels L0 to L3 - (Website/docs-src/onboarding/00-group-taxonomy.md:82). Twelve types is the whole surface. That smallness - is the design.

        -

        The composition entry point is AddMmcaChatClient (DependencyInjection.cs:67), and what it registers is - one IChatClient built as a pipeline, outermost first (registration at :108-143, the same order - documented as a diagram in the type remarks at :22-30):

        +

        The MMCA answer: four optional packages, and the call is a pipeline

        +

        The AI boundary is four of the twenty-two published framework packages (MMCA.Common/FACTS.md:19), all + at framework v1.221.0 (:14): MMCA.Common.AI, the governed pipeline (:22); + MMCA.Common.AI.Anthropic and MMCA.Common.AI.OpenAI, provider adapters that each register one + IAiProviderFactory (:23, :24); and MMCA.Common.AI.Testing, the replay and golden-evaluation + harness (:34). All four are optional: nothing in the metapackage drags them in, and a host that never + calls a model never installs them. In the onboarding taxonomy the types sit in group G28, Common AI + Integration, thirty-two types across levels L0 to L10 + (Website/docs-src/onboarding/00-group-taxonomy.md:82). That is a small surface for what it governs, and + the smallness is the design.

        +

        The composition entry point is AddMmcaChatClient (DependencyInjection.cs:88), and what it registers is + one IChatClient built as a pipeline, outermost first (built at :149-184, the same order documented as + a diagram in the type remarks at :22-31):

        // The shape AddMmcaChatClient composes, outermost first.
        -BoundedChatClient            // what the call is ALLOWED to do: tokens, timeout, tools, input size
        -  GuardrailChatClient        // optional: present only when an IChatGuardrail is registered
        -    UsageRecordingChatClient // what the call cost, and how long it took
        -      DistributedCaching     // optional: Ai:EnableCache AND a registered IDistributedCache
        -        OpenTelemetry        // traces under the MMCA.Common.AI source
        -          Logging
        -            provider client  // Anthropic, via the SDK's own AsIChatClient adapter
        +BoundedChatClient // what the call is ALLOWED to do: tokens, timeout, tools, input size, model + GuardrailChatClient // optional: present when an IChatGuardrail or IChatRequestRedactor is registered + UsageRecordingChatClient // what the call cost, and how long it took + DistributedCaching // optional: Ai:EnableCache AND a registered IDistributedCache + OpenTelemetry // traces under the MMCA.Common.AI source + PromptTagging // the prompt identity as attributes on that trace + Logging + provider client // whichever registered IAiProviderFactory matches Ai:Provider

    The ordering is not decoration. Bounds are outermost, so a call the configuration forbids is refused before anything downstream logs it, caches it or counts it. Guardrails sit inside the bounds and outside - usage recording, so a blocked request never reaches the provider and therefore has no cost to record. The - comment in the source says all of that in place (DependencyInjection.cs:31-39).

    -

    Two smaller decisions in the same method are worth naming. The provider adapter is the vendor's, not - ours: CreateProviderChatClient constructs an AnthropicClient and calls the SDK's own - AsIChatClient extension with the configured model and ceiling (:158, adapter call at :169-173), so - nothing here hand-rolls a Messages API request over HttpClient. A provider the package does not know - goes through the factory overload (:82) rather than by adding a second vendor dependency, and an - unrecognized provider throws with that instruction in the message (:174-176). And prompt and - completion text reach traces only on a host positively identified as Development (:137, gate at - :192-196), a check that fails closed: an environment the package cannot see reads as not-Development.

    + usage recording, so a blocked request never reaches the provider and therefore has no cost to record. + Prompt tagging sits just inside the OpenTelemetry layer, so the activity it decorates is that layer's own + gen_ai span. The comment in the source says all of that in place (DependencyInjection.cs:33-41).

    +

    Two smaller decisions in the same file are worth naming. The provider is a registered factory, never a + type this package names. The configuration overload resolves every registered IAiProviderFactory + (IAiProviderFactory.cs:20, Name at :26, Create at :34) and selects the one whose name matches + Ai:Provider (CreateProviderChatClient, DependencyInjection.cs:239-248). The factories live in the + adapter packages, and each is the vendor's own adapter: AddAnthropicAiProvider + (MMCA.Common.AI.Anthropic/DependencyInjection.cs:26) registers one whose Create is + new AnthropicClient(options).AsIChatClient(...) (AnthropicAiProviderFactory.cs:48), and + AddOpenAiProvider (MMCA.Common.AI.OpenAI/DependencyInjection.cs:26) does the same over the OpenAI SDK + (OpenAiProviderFactory.cs:51). Nothing here hand-rolls a request over HttpClient. A provider name the + host never registered fails at boot rather than on a user's first request: AddMmcaChatClient registers + AiProviderValidator into the options pipeline (DependencyInjection.cs:94), which fails with the + registered names in the message (AiProviderValidator.cs:34), and CreateProviderChatClient keeps a belt + throw for a host that bypassed that pipeline (DependencyInjection.cs:244-245). A host with its own + credential story, or a test with no network, supplies the innermost client through the factory overload + (:113). And prompt and completion text reach traces only on a host positively identified as + Development (enableSensitiveData at :177, IsDevelopmentHost at :262-266), a check that fails + closed: an environment the package cannot see reads as not-Development (:256-261).

    Off by absence, not off by flag

    -

    AiSettings (AiSettings.cs:31) binds one configuration section, Ai (:34), and carries the whole - surface: Enabled (:48), Provider (:51), Model (:59), ApiKey (:70), MaxOutputTokens - (:77, defaulting to 1024 at :37), Timeout (:83, defaulting to 30 seconds at :40), AllowTools - (:90), EnableCache (:96) and PerCallInputTokenBudget (:104). Model and ApiKey are required - only once Enabled is true (Validate, :113-141), which is what lets the section ship in every - appsettings file rather than only in the ones that use it.

    +

    AiSettings (AiSettings.cs:22) binds one configuration section, Ai (:25), and carries the whole + surface: Enabled (:46), Provider (:55, the name of a registered provider), Model (:65), + ApiKey (:76), Endpoint (:83), MaxOutputTokens (:90, defaulting to 1024 at :28), Timeout + (:96, defaulting to 30 seconds at :31 and capped at one hour at :38), AllowTools (:103), + RequireGuardrail (:117, defaulting to true), EnableCache (:123) and PerCallInputTokenBudget + (:131). Provider, Model and ApiKey are required only once Enabled is true, alongside an absolute + Endpoint when one is set and a Timeout inside its range (Validate, :140-190), which is what lets + the section ship in every appsettings file rather than only in the ones that use it.

    The load-bearing line is four lines long. When Ai:Enabled is false, nothing is registered - (DependencyInjection.cs:97-101): the settings still bind and validate, and no IChatClient enters the + (DependencyInjection.cs:128-132): the settings still bind and validate, and no IChatClient enters the container at all.

    That pushes a null onto the consumer on purpose. A feature resolves the client with GetService<IChatClient>() and holds a nullable dependency, so the disabled path is a branch the feature @@ -242,34 +260,41 @@

    Off by absence, not off by flag

    a given environment is off by construction: there is no half-running state where the flag says on and the credential is missing. A boolean everybody has to remember to check is the version of this that fails.

    -

    Bounds: four of them, on both paths

    -

    BoundedChatClient (BoundedChatClient.cs:51) is a DelegatingChatClient and enforces four bounds, each - applied to the buffered and the streaming path (the list is documented on the type at :15-36):

    +

    Bounds: five of them, on both paths

    +

    BoundedChatClient (BoundedChatClient.cs:65) is a DelegatingChatClient and enforces five bounds, + each applied to the buffered and the streaming path (the list is documented on the type at :16-50):

    1. Output tokens. MaxOutputTokens is clamped down to the configured ceiling, while a caller asking - for less keeps its own smaller number (:151-153). Output tokens are the expensive half of a chat + for less keeps its own smaller number (:185-187). Output tokens are the expensive half of a chat call, so this is a cost bound.
    2. Wall clock. Every call runs under a token linked to the caller's own and cancelled after - Ai:Timeout (:164-169). On the streaming path the timeout covers the whole stream rather than its - first update (:99-112, with the reasoning at :106-107): a provider that opens a response and then + Ai:Timeout (:270-275). On the streaming path the timeout covers the whole stream rather than its + first update (:133-146, with the reasoning at :140-141): a provider that opens a response and then stalls is exactly the failure a per-call budget exists to bound.
    3. Tool use. While Ai:AllowTools is false, tools and the tool mode are stripped from the request - (:155-159). That is the difference between telling a model not to act and being unable to hand it - the means.
    4. + (:189-193). That is the difference between telling a model not to act and being unable to hand it + the means. While it is true, FilterTools (:231-268) offers a tool only when every registered + IChatToolPolicy allows it (:251), and a tool marked consequential only when the request also + confirms it by name (:259). The confirmation is checked on top of the policies, never instead of + them (:256-258), and with no policy at all every tool is stripped (:241-244).
    5. Input size. When Ai:PerCallInputTokenBudget is set, an estimated input above the budget fails - the call locally instead of paying for it remotely (:171-186).
    6. + the call locally instead of paying for it remotely (:277-292). +
    7. Model. The request goes out naming Ai:Model, and a request that names a different model is + refused (:205-220). Adapters differ in whether a per-request model id overrides the one the client + was built with, so pinning it here makes PromptContract.Model mean the same thing on every provider: + the model the prompt was evaluated against, and the only one it may be sent to (:43-49).

    The estimate asks the pipeline for an IAiTokenEstimator (IAiTokenEstimator.cs:14) and otherwise - counts four characters to the token (BoundedChatClient.cs:144), the usual rough rule for English prose. + counts four characters to the token (BoundedChatClient.cs:178), the usual rough rule for English prose. The type documentation is blunt about what that cannot see: it reads message text plus instructions only, - so images, tool schemas, provider-side additions and non-Latin scripts are all under-counted (:37-44). + so images, tool schemas, provider-side additions and non-Latin scripts are all under-counted (:51-58). It is a runaway guardrail with headroom, never a billing figure. The estimator interface is declared in the package rather than taken as a dependency on a tokenizer library, and the reason is stated in place (IAiTokenEstimator.cs:9-12): a package whose whole point is keeping the model dependency small should not acquire a second one to count characters.

    One detail that costs nothing and prevents a real bug: the options a caller passes are never mutated. - Each call works on a clone (:149), so a caller reusing one ChatOptions instance across requests does - not silently inherit this client's clamping.

    + Each call works on a clone (BoundedChatClient.cs:183), so a caller reusing one ChatOptions instance + across requests does not silently inherit this client's clamping.

    // Illustrative of the documented shape: the bounds BoundedChatClient applies.
     private ChatOptions Bound(ChatOptions? options)
     {
    @@ -285,6 +310,27 @@ 

    Bounds: four of them, on both pathsnull; bounded.ToolMode = null; } + else + { + // Only the tools every IChatToolPolicy allows (and the caller confirmed, if consequential). + bounded.Tools = FilterTools(bounded); + if (bounded.Tools is null) + { + bounded.ToolMode = null; + } + } + + // The model is part of the prompt contract, not negotiated per call. + if (_settings.Model is { } pinned) + { + if (bounded.ModelId is { } requestedModel && !string.Equals(requestedModel, pinned, StringComparison.Ordinal)) + { + throw new InvalidOperationException( + $"The request names model '{requestedModel}' but Ai:Model pins '{pinned}'."); + } + + bounded.ModelId = pinned; + } return bounded; } @@ -313,41 +359,56 @@

    Bounds: four of them, on both pathsthrow new InvalidOperationException( $"The request's estimated input size ({estimated} tokens) exceeds Ai:PerCallInputTokenBudget " - + $"({budget} tokens). The estimate is approximate: shorten the prompt or raise the budget."); + + $"({budget} tokens). The estimate is approximate: shorten the prompt or raise the budget deliberately."); }

    On the streaming path, the bound and the budget check run eagerly, outside the iterator - (BoundedChatClient.cs:90-94): a request the configuration forbids is refused when it is made, not when + (BoundedChatClient.cs:124-130): a request the configuration forbids is refused when it is made, not when somebody gets around to reading the stream.

    -

    Guardrails: the framework ships the extension point, not the policy

    -

    IChatGuardrail (IChatGuardrail.cs:20) has two methods: InspectRequestAsync (:27-30) and - InspectResponseAsync (:37-40), each answering with a GuardrailVerdict. An application registers one - implementation per concern, GuardrailChatClient (GuardrailChatClient.cs:21) runs every one of them in - registration order, and the first block throws ChatGuardrailException - (ChatGuardrailException.cs:12, thrown at GuardrailChatClient.cs:57 and :100).

    -

    The framework ships no policy, and the interface documentation says why (IChatGuardrail.cs:9-13): what - counts as a prompt injection, a leaked secret, an off-topic answer or a disallowed topic depends on the - data the application holds and the jurisdiction it operates in, so a content rule baked into a shared - package would be wrong somewhere by construction. The package offers the place to plug policy in. The - policy stays with the feature that knows what its input is.

    +

    Guardrails: an extension point, two narrow policies, no domain policy

    +

    IChatGuardrail (IChatGuardrail.cs:21) has three members, each answering with a GuardrailVerdict: + InspectRequestAsync (:28-31), InspectResponseAsync (:38-41) and InspectStreamedUpdateAsync + (:57-60), which allows by default. Beside it sits IChatRequestRedactor + (Guardrails/IChatRequestRedactor.cs:25). An application registers one implementation per concern, and + GuardrailChatClient (GuardrailChatClient.cs:31) applies every redactor first, so what the guardrails + inspect and what the provider is sent is the redacted request (:68, :126-135, remark at :18-20). + Then it runs every guardrail in registration order, and the first block throws ChatGuardrailException + (ChatGuardrailException.cs:12, thrown at GuardrailChatClient.cs:82, :111 and :150).

    +

    The framework ships the extension point, two opt-in domain-neutral guardrails and no domain policy, and + the interface documentation says why (IChatGuardrail.cs:9-14). AddPiiRedactionGuardrail + (Guardrails/GuardrailServiceCollectionExtensions.cs:33) registers contact-detail redaction + (PiiRedactionGuardrail.cs:39). AddContentPolicyGuardrail (:62) registers ContentPolicyGuardrail + (ContentPolicyGuardrail.cs:64), which matches eight built-in prompt-injection markers (:77-87) in + user-role content and redacts, blocks or ignores them per InjectionMode (Redact by default, + ContentPolicySettings.cs:35), plus any request pattern the host adds and a response-side refusal on + configured blocked patterns; one singleton serves as both a guardrail and a redactor (ADR-120:40-47). + Those two ship because neither judgement varies by application (ADR-120:368-372). What counts as an + off-topic answer or a disallowed topic depends on the data the application holds and the jurisdiction it + operates in, so a rule like that baked into a shared package would be wrong somewhere by construction. + That policy stays with the feature that knows what its input is.

    Three details in that layer repay attention:

    • The verdict fails closed. GuardrailVerdict is a readonly record struct (GuardrailVerdict.cs:13) whose default value reads as a block carrying UnspecifiedReason (:16), because Allow is an explicit static (:25) and Block(reason) refuses a blank reason (:39-44). A half-built verdict stops the call rather than silently admitting it.
    • -
    • The layer is absent when it is unused. AddMmcaChatClient checks the service descriptors, not a - resolved service, and adds GuardrailChatClient only when at least one IChatGuardrail is registered - (DependencyInjection.cs:117-121). An empty-loop client would otherwise change the type the container - hands back for every application that adopts none of this (the comment is at :114-116).
    • -
    • The streaming path inspects the request only (GuardrailChatClient.cs:65-78, remark at :16-20). - Inspecting a streamed answer means buffering it to the end, which defeats the reason a caller chose - streaming, so an application that needs response inspection on streamed output buffers at its own call - site and owns that decision.
    • +
    • The layer is absent when unused, and unused is a startup failure. AddMmcaChatClient checks the + service descriptors, not a resolved service, and adds GuardrailChatClient only when an + IChatGuardrail or an IChatRequestRedactor is registered (DependencyInjection.cs:139-140, + :156-162, comment at :134-138), so an empty-loop client never changes the type the container hands + back. But Ai:RequireGuardrail defaults to true (AiSettings.cs:117), so an enabled host that + registered neither throws at registration with AddPiiRedactionGuardrail() named as the fix + (DependencyInjection.cs:208-217). A host that deliberately wants none sets the flag false, which is a + reviewable line rather than an absence nobody can see.
    • +
    • The streaming path inspects the request and each update before it is yielded + (GuardrailChatClient.cs:90-117, the before-the-yield comment at :101-102). It does not inspect the + assembled answer (remark at :23-30): a block stops the stream at that update, the caller has already + seen every fragment before it, and a rule that needs the whole text accumulates it inside its own + implementation (IChatGuardrail.cs:51-56).

    A refusal is an exception rather than an empty response, and the reason is recorded on the exception type (ChatGuardrailException.cs:7-11): an empty response is indistinguishable from the model having nothing to say, and a caller that wants a graceful fallback catches this type specifically.

    -

    Prompts: a versioned contract the framework hashes

    +

    Prompts: a versioned contract the framework hashes and gates

    PromptContract (PromptContract.cs:23) is a record of four things: name, version, model and system prompt. Its Hash (:46) is the lowercase hex SHA-256 of those four joined with a pipe, each with its line endings normalized to LF first (:90-103), so the same prompt hashes identically on Windows and @@ -360,8 +421,17 @@

    Prompts: a versioned from, which is exactly the drift this type exists to prevent.

    ToChatOptions (:53) and Apply (:62) stamp three properties onto the request: mmca.prompt.name (:26), mmca.prompt.version (:29) and mmca.prompt.hash (:32). That is how the prompt's identity - reaches telemetry, and PromptContract.ReadName (:77) and ReadVersion (:82) are how the metering - layer reads it back off the options a call carried.

    + reaches telemetry: PromptContract.ReadName (:77) and ReadVersion (:82) are how the metering layer + reads it back off the options a call carried, and PromptTaggingChatClient + (Chat/PromptTaggingChatClient.cs:21) puts it on the gen_ai span (DependencyInjection.cs:183).

    +

    MMCA.Common.AI.Testing turns that identity into two gates, and the framework runs both on its own + reference contract (ADR-120:261). PromptContractPinTestsBase (PromptContractPinTestsBase.cs:25) pins + every contract's hash in a JSON file, and its two facts fail on a contract with no recorded hash (:39) + and on a recorded hash that no longer matches its contract (:60). GoldenReplayTestsBase + (GoldenReplayTestsBase.cs:24) replays every case of a corpus through the real code against the answer + recorded for it, with no model, no credential and no network, so it runs on every CI leg (:7-9). It + collects every failing case rather than stopping at the first (:18-20), and an empty corpus is a failure + too (:57-62), because an evaluation that evaluates nothing passes forever.

    Metering: two counters, one histogram, one name

    AiUsageMeter (AiUsageMeter.cs:20) publishes mmca.ai.input_tokens (:29) and mmca.ai.output_tokens (:32) on the meter MMCA.Common.AI (:26), plus a @@ -379,14 +449,16 @@

    Metering: two counters, on The standard instrument carries the GenAI semantic-convention dimensions; this one carries the prompt identity and the outcome, so a latency regression is attributable to the prompt that caused it and a failure rate reads off the same series as the latency (:36-43).

    -

    UsageRecordingChatClient (UsageRecordingChatClient.cs:30) is what feeds it, and it records the +

    UsageRecordingChatClient (UsageRecordingChatClient.cs:38) is what feeds it, and it records the provider's own reported numbers rather than an estimate. The type documentation says why it sits here - rather than beside the input-budget check (:11-15): a bound has to be decided before the call, and a - cost has to be measured after it. The buffered path records duration on all three outcomes and then the - usage (:48-81); the streaming path drives the enumerator by hand rather than with await foreach, + rather than beside the input-budget check (:13-15): a bound has to be decided before the call, and a + cost has to be measured after it. The provider tag is the name the client reports about itself + through ChatClientMetadata, with the configured name lowercased as the fallback + (ResolveProviderName, :68-81). The buffered path records duration on all three outcomes and then the + usage (:84-117); the streaming path drives the enumerator by hand rather than with await foreach, because the duration has to be attributed to an outcome and C# forbids a yield return inside a try - with a catch (:93-95), and it harvests usage from the UsageContent item the provider delivers on - the stream (:143-154).

    + with a catch (:129-131), and it harvests usage from the UsageContent item the provider delivers on + the stream (RecordUsageIn, :179-190).

    Two absences are deliberate. A usage the provider did not report records nothing (AiUsageMeter.cs:108-123): an absent number must not read as a zero on a spend dashboard. And the Meter itself is created through IMeterFactory and neither retained nor disposed (:62-67), because disposing a factory-owned meter @@ -408,51 +480,71 @@

    The layering rule "the model is spread through the app", and a dependency that is everywhere cannot be versioned, evaluated, capped or swapped.

    It ships the way every shared rule in this framework ships: as an abstract base subclassed in each repo's - architecture tests with that repo's architecture map (:14-17), one of 136 fitness test methods across 53 - abstract *TestsBase classes, of which MMCA.Common's own build executes 267 (MMCA.Common/FACTS.md:48, - :51). A prompt or a bound must not become a type your domain depends on, and that sentence is a failing + architecture tests with that repo's architecture map (:14-17), one of 141 fitness test methods across 55 + abstract *TestsBase classes, of which MMCA.Common's own build executes 339 (MMCA.Common/FACTS.md:51, + :54). A prompt or a bound must not become a type your domain depends on, and that sentence is a failing test rather than a code review comment.

    Trade-offs, honestly

      -
    • Two of the seven §16 criteria are absent from the framework on purpose. An evaluation gate in CI - and retrieval as data architecture are feature-side, and ADR-120 records both as scope-outs rather than - as gaps to be closed later (ADR-120:226, :236-237). The §16 row's Implementation 6 is the Adequate - band precisely because of that split (common-ArchitectureScorecard.md:75). The package governs the - call. It does not make your feature evaluable for you.
    • -
    • The package governs the call, not the prompt's content. Delimiting untrusted input, escaping it, - redacting PII and constraining the response schema stay in the feature that knows what its input is - (ADR-120:209-213). IChatGuardrail is where that policy plugs in, and a second feature still has to - make those decisions for itself.
    • -
    • Tool governance is a blanket switch, not per-caller authorization. Ai:AllowTools is one boolean - for the whole host, and stripping tools (BoundedChatClient.cs:155-159) is the cheap half of least - privilege. The rubric asks for tools that are explicit, authorized per caller, and idempotent or - confirmable (ArchitectureEvaluationCriteria.md:480). Until a feature needs any, the honest answer is - that none exist.
    • +
    • Guardrails are the one partial §16 criterion, and they hold the row at Implementation 9. Both + shipped policies are opt-in, so Ai:RequireGuardrail is satisfied by the PII redactor alone and a host + can enable AI with no injection defense at all; the response half of the content policy is inert until + a host configures patterns; and the streamed path inspects fragments, so a pattern spanning two updates + is missed by design (common-ArchitectureScorecard.md:80). The framework makes "no guardrail" a + startup failure. It does not make "the right guardrail" one.
    • +
    • Retrieval is unexercised, on purpose. Nothing in the package addresses vector or hybrid search, + embedding freshness or retrieved-content injection, and ADR-120 leaves the rubric's retrieval + criterion to the feature that builds one, if one ever is (ADR-120:390-393). The scorecard reads it as + unexercised rather than unmet because the criterion is worded conditionally on such a store existing + (common-ArchitectureScorecard.md:80).
    • +
    • The framework ships the evaluation harness, not the evaluation. The replay client, the golden base, + the pin base and the protocol are framework code; the corpus, the assertions and any live-judge tier + remain the feature's, because only the feature knows what a good answer is. The framework's own + reference contract proves the bases work, not that any product prompt is good (ADR-120:386-389). The + package governs the call. It does not make your feature evaluable for you.
    • +
    • The package governs the call and only the narrowest part of the content. Contact-detail redaction + and a small injection-marker list ship; delimiting untrusted input, escaping it, constraining the + response schema and any domain-specific check stay in the feature that knows what its input is + (ADR-120:368-380). The marker list is eight phrases on purpose, so ordinary prose about instructions + survives it, which also means it catches the common phrasings rather than every phrasing.
    • +
    • Least-privilege tool calling is framework mechanism, not framework policy. With Ai:AllowTools + true, a tool reaches the model only when every IChatToolPolicy allows it and, if consequential, the + request confirms it (BoundedChatClient.cs:231-268), and tools-on with no policy refuses to start + (DependencyInjection.cs:219-226). What a policy allows is still the application's to write, and the + rubric's "authorized per caller" (ArchitectureEvaluationCriteria.md:480) is only as good as that + policy.
    • +
    • Two defaults can refuse a host at startup. Ai:RequireGuardrail true and Ai:AllowTools with no + policy are both registration-time failures, and the model pin turns a PromptContract that disagrees + with Ai:Model into a refused call (ADR-120:356-359). That is the intended direction, and it means + adopting the package is more than one line of registration.
    • Off by absence puts a null on the consumer. Nothing is registered when Ai:Enabled is false - (DependencyInjection.cs:97-101), so a feature resolves with GetService and holds a nullable + (DependencyInjection.cs:128-132), so a feature resolves with GetService and holds a nullable dependency. That is a branch in your code, written once per feature, that the framework will not write - for you (ADR-120:189-195).
    • + for you (ADR-120:339-344).
    • A cache hit still records usage. UsageRecordingChatClient sits inside the optional response cache - (DependencyInjection.cs:22-30), so a hit counts what the call would have cost rather than what was + (DependencyInjection.cs:36-39), so a hit counts what the call would have cost rather than what was billed. The provider span is absent on a hit, so the two are distinguishable, but a spend graph read - without that context over-reports (ADR-120:205-209).
    • + without that context over-reports (ADR-120:364-367).
    • The input budget is an estimate and says so. Message text plus instructions only, four characters - to the token, everything else under-counted (BoundedChatClient.cs:37-44). Treat it as a runaway + to the token, everything else under-counted (BoundedChatClient.cs:51-58). Treat it as a runaway guardrail with headroom. The authoritative numbers arrive after the call.
    • -
    • The streaming guardrail sees the request only (GuardrailChatClient.cs:65-78). Response inspection - on a streamed answer means buffering it, which defeats streaming, so that trade is pushed to the call - site rather than made for you.
    • -
    • One provider is built in. Anything other than Anthropic goes through the factory overload - (DependencyInjection.cs:82) and an unrecognized provider throws with that instruction (:174-176). - The pipeline is provider-agnostic; the convenience is not.
    • +
    • A provider is two references and a name. A host adds an adapter package beside the governed one, + calls its registration method and names it in Ai:Provider; the governed package cannot fall back to a + provider it was never handed (ADR-120:345-349). Two adapters ship (MMCA.Common/FACTS.md:23, :24), + anything else implements IAiProviderFactory or goes through the factory overload + (DependencyInjection.cs:113), and a misnamed provider is a boot failure naming the registered ones + (AiProviderValidator.cs:34).
    • An optional package nobody installs governs nothing, and adoption here is one feature. MMCA.ADC's - Conference module takes the package in Infrastructure and in its service host - (MMCA.ADC.Conference.Infrastructure.csproj:19, MMCA.ADC.Conference.Service.csproj:27), and its - organizer-facing session scoring is the one product feature in these repos that calls a model - (AnthropicScoringService.cs:9), with the host subscribing the meter and trace source by name - (MMCA.ADC.Conference.Service/Program.cs:154-155). MMCA.Store adopts none of it: §16 is N/A there - because no product feature calls a model (store-ArchitectureScorecard.md:61). The rules are proven by - exactly one consumer.
    • + Conference module takes the package in Infrastructure (MMCA.ADC.Conference.Infrastructure.csproj:19) + and its service host takes it with the Anthropic adapter (MMCA.ADC.Conference.Service.csproj:31, + :34). The host calls AddAnthropicAiProvider (MMCA.ADC.Conference.Service/Program.cs:139), + AddConferenceAiGuardrails (:150), which registers the PII redactor, the content policy and the + module's own response guardrail (MMCA.ADC.Conference.Infrastructure/DependencyInjection.cs:85, :95, + :96, :99), and AddMmcaChatClient (Program.cs:152), then subscribes the meter and trace source by + name (:171-172). Its organizer-facing session scoring (SessionScoringService.cs:46) is the one + product feature in these repos that calls a model. MMCA.Store adopts none of it: §16 is N/A there + because no product feature calls a model (store-ArchitectureScorecard.md:57). The rules are proven by + exactly one consumer (ADR-120:394-396).

    Apply this even without MMCA

    The shape ports to any stack with a DI container and a vendor SDK. Microsoft.Extensions.AI makes it @@ -461,28 +553,33 @@

    Apply this even without MMCA

    1. Wrap the vendor client; do not subclass your feature around it. A delegating decorator per concern composes, and a decorator you did not register is a concern you deliberately skipped. Use the vendor - SDK's own adapter onto whatever common interface your ecosystem has, and write no transport code of - your own: the day you hand-roll the HTTP request is the day the boundary is in the wrong place.
    2. + SDK's own adapter onto whatever common interface your ecosystem has, keep each adapter in its own + package behind a factory the host registers by name, validate that name at startup, and write no + transport code of your own: the day you hand-roll the HTTP request is the day the boundary is in the + wrong place.
    3. Put the bounds outermost, and make them configuration. An output-token ceiling, a wall-clock - budget, a tool switch and an optional input ceiling, read from one validated settings section. Clamp - rather than default: a governance layer a caller can talk out of its limits with an argument is - documentation. Link your timeout token to the caller's own so early cancellation still wins.
    4. + budget, a tool switch backed by per-tool policy, an optional input ceiling and a pinned model, read + from one validated settings section. Clamp rather than default: a governance layer a caller can talk + out of its limits with an argument is documentation. Link your timeout token to the caller's own so + early cancellation still wins.
    5. Turn the feature off by absence, not by flag. Register nothing when the dependency is disabled, so the code path cannot half-exist against a missing key. A nullable dependency is a branch somebody writes once; a boolean is a check everybody has to remember.
    6. -
    7. Make the prompt a versioned artifact with a computed identity. Name, version, model and text, and - a hash over all four with line endings normalized first. Compute it on read, never cache it in a - field. Stamp the name, version and hash onto the request so telemetry carries them. Without that hash, - an evaluation suite has nothing stable to key its recorded answers on, and "did anybody re-evaluate - this prompt" becomes a question about somebody's memory.
    8. +
    9. Make the prompt a versioned artifact with a computed identity, and gate it. Name, version, model + and text, and a hash over all four with line endings normalized first. Compute it on read, never cache + it in a field. Stamp the name, version and hash onto the request so telemetry carries them. Pin the + hash in a file a test checks, and replay recorded answers offline in CI with a gate that fails on an + empty corpus. Without that, "did anybody re-evaluate this prompt" is a question about somebody's + memory.
    10. Count the provider's numbers, not your own, and count them once. One meter name and one set of counter names across every service, with the model, provider, prompt name and prompt version as dimensions. Record nothing when the provider reported nothing: an absent number that reads as zero is worse than a gap, because a gap is visible.
    11. -
    12. Ship the guardrail extension point without the guardrail policy. Let the application register - inspectors for requests and responses, run all of them, fail closed on a default verdict, and stop on - the first refusal. Content policy belongs to the feature that knows what its input is and which - jurisdiction it answers to.
    13. +
    14. Ship the guardrail extension point, and only the policies that never vary by application. Let + the application register redactors and inspectors for requests, responses and streamed updates, run + all of them, fail closed on a default verdict, and stop on the first refusal. Make "no guardrail at + all" a startup failure with an explicit, reviewable opt-out. Domain content policy belongs to the + feature that knows what its input is and which jurisdiction it answers to.
    15. Write the layering rule as a test. Assert that no vendor SDK name appears outside your infrastructure layer, and that your own governed wrapper does not either. The second assertion is the one people skip, and it is the one that stops a prompt type from becoming a domain type.
    16. @@ -493,13 +590,15 @@

      Apply this even without MMCA

      subscription with a code path attached.


      What we covered: why the properties of a model call belong to the call rather than to the feature - that makes it, how MMCA.Common.AI composes BoundedChatClient, an optional GuardrailChatClient and - UsageRecordingChatClient into one governed IChatClient, why registering nothing when the dependency is - disabled beats a flag, the four bounds and the honest limits of the estimated input budget, IChatGuardrail - as an extension point that ships no policy and fails closed, PromptContract's SHA-256 identity over name, - version, model and text, the AiUsageMeter counters and latency histogram that make spend attributable to - a prompt version, and the AiDependencyIsolationTestsBase fitness function that keeps both the vendor SDK - and the governed package behind Infrastructure.

      + that makes it, how MMCA.Common.AI composes BoundedChatClient, an optional GuardrailChatClient, + UsageRecordingChatClient and prompt tagging into one governed IChatClient over a provider adapter + selected by name, why registering nothing when the dependency is disabled beats a flag, the five bounds + and the honest limits of the estimated input budget, IChatGuardrail and IChatRequestRedactor as an + extension point with two narrow shipped policies, a fail-closed verdict and a registration-time refusal, + PromptContract's SHA-256 identity over name, version, model and text and the pin and golden-replay gates + built on it, the AiUsageMeter counters and latency histogram that make spend attributable to a prompt + version, and the AiDependencyIsolationTestsBase fitness function that keeps both the vendor SDK and the + governed package behind Infrastructure.

      Next in the series: Article 51, "Four ways to do work later: channels, cron, the outbox and durable internal commands."

      MMCA.Common is open source. Star the repo, read the 2-minute ADR-120 behind this pattern, or @@ -528,11 +627,11 @@

      Apply this even without MMCA

      On this page

      • Why it matters
      • -
      • The MMCA answer: one optional package, and the call is a pipeline
      • +
      • The MMCA answer: four optional packages, and the call is a pipeline
      • Off by absence, not off by flag
      • -
      • Bounds: four of them, on both paths
      • -
      • Guardrails: the framework ships the extension point, not the policy
      • -
      • Prompts: a versioned contract the framework hashes
      • +
      • Bounds: five of them, on both paths
      • +
      • Guardrails: an extension point, two narrow policies, no domain policy
      • +
      • Prompts: a versioned contract the framework hashes and gates
      • Metering: two counters, one histogram, one name
      • The layering rule that keeps all of this at one place
      • Trade-offs, honestly
      • diff --git a/articles/http-api-versioning.html b/articles/http-api-versioning.html index b78fe80c..cbf6a922 100644 --- a/articles/http-api-versioning.html +++ b/articles/http-api-versioning.html @@ -201,7 +201,7 @@

        The host through one call, and keeps it exercised by a shared contract test that proves two live versions coexist.

        One registration wires the whole policy. AddCommonApiVersioning - (WebApplicationBuilderExtensions.cs:334) is the entire decision, in one place: the reader, the + (WebApplicationBuilderExtensions.cs:37) is the entire decision, in one place: the reader, the default behavior, the reporting, and the one guard that keeps document generation from tripping over any of it.

        public IServiceCollection AddCommonApiVersioning()
        @@ -216,7 +216,7 @@ 

        The }).AddMvc() .AddApiExplorer(options => { - options.GroupNameFormat = "'v'VVV"; // feeds the versioned OpenAPI group + options.GroupNameFormat = "'v'VVV"; // names each version's explorer group options.SubstituteApiVersionInUrl = true; }); @@ -225,27 +225,30 @@

        The return services; }

        Three of those lines carry the design. The reader is a HeaderApiVersionReader("api-version") - (WebApplicationBuilderExtensions.cs:343), so routes and query strings stay version-free: a caller + (WebApplicationBuilderExtensions.cs:46), so routes and query strings stay version-free: a caller opts into a newer shape by adding one header, not by rewriting the URL. AssumeDefaultVersionWhenUnspecified - (WebApplicationBuilderExtensions.cs:341) means a client that never sends the header keeps getting + (WebApplicationBuilderExtensions.cs:44) means a client that never sends the header keeps getting 1.0, so introducing versioning was not a breaking change for any existing caller. And - ReportApiVersions (WebApplicationBuilderExtensions.cs:342) means every response carries the + ReportApiVersions (WebApplicationBuilderExtensions.cs:45) means every response carries the supported and deprecated version lists in its headers, so a client can see which versions a service still honors and which are on the way out without reading a changelog.

        Two more details in that block carry less design and more hard-won experience, and the first of them is a line that is not there. 1.0 is the default because the Asp.Versioning library already defaults to it, so the registration says nothing at all: setting DefaultApiVersion explicitly, in either the versioning options or the explorer options that inherit them, trips the library's own analyzers - (AV0011/AV0024), and the comment standing in its place (WebApplicationBuilderExtensions.cs:336-338) + (AV0011/AV0024), and the comment standing in its place (WebApplicationBuilderExtensions.cs:39-41) exists so the next reader does not "fix" the omission. And AddApiParameterDescriptorBackfill - (WebApplicationBuilderExtensions.cs:351) installs ApiParameterDescriptorBackfillProvider, added in + (WebApplicationBuilderExtensions.cs:54) installs ApiParameterDescriptorBackfillProvider, added in v1.146.0 after a real failure: MVC leaves ApiParameterDescription.ParameterDescriptor null for a route - token with no matching action parameter, and Asp.Versioning.OpenApi dereferences it without a null - check, so a host that routes api/v{version:apiVersion}/... returned a 500 from - GET /openapi/{documentName}.json. The guard fills a placeholder only where one is missing and never - replaces a descriptor MVC supplied (ApiParameterDescriptorBackfillProvider.cs:65). Because this - framework's reader is the header, no current host was hit either way, which is exactly why that failure - could ship unnoticed (ADR-046).

        + token with no matching action parameter, and Asp.Versioning.OpenApi, the document pipeline in use when + the guard shipped, dereferenced it without a null check, so a host that routed api/v{version:apiVersion}/... + got a 500 from GET /openapi/{documentName}.json. The guard fills a placeholder only where one is + missing and never replaces a descriptor MVC supplied (ApiParameterDescriptorBackfillProvider.cs:65). + Because this framework's reader is the header, no host was hit either way, which is exactly why that + failure could ship unnoticed. MMCA.Common references only Asp.Versioning.Mvc and + Asp.Versioning.Mvc.ApiExplorer (MMCA.Common/Directory.Packages.props:14, :20), not + Asp.Versioning.OpenApi; the guard stays because it costs nothing and protects any other consumer of + the API descriptions from the same null (ADR-046).

        A shipped exemplar proves two versions coexist. This is the part most "we support versioning" stories skip. ServiceInfoControllerBase (ServiceInfoControllerBase.cs:30) serves the same /ServiceInfo route under two versions selected by the header. GetV1 is mapped to 1.0 @@ -281,9 +284,9 @@

        The check, and the same invariant-over-discipline posture the framework prefers (ADR-015): without a second working version, everything above would be asserted rather than proven.

        Every REST host adopts it the same way. The extracted services call AddCommonApiVersioning in - their startup: ADC's Conference (MMCA.ADC.Conference.Service/Program.cs:203), Identity (:152), - Engagement (:148), and Notification (:140) hosts, Store's Catalog (:141), Sales (:148), and - Identity (:135) hosts, and the monolith reference host + their startup: ADC's Conference (MMCA.ADC.Conference.Service/Program.cs:217), Identity (:150), + Engagement (:147), and Notification (:136) hosts, Store's Catalog (:140), Sales (:147), and + Identity (:134) hosts, and the monolith reference host (MMCA.Helpdesk.Web/Program.cs:35). One call per host, and the reader, default, and reporting choices cannot drift apart between services. The discovery exemplar is narrower than the registration: only ADC's Conference and Store's Catalog hosts ship a ServiceInfoController subclass today.

        @@ -303,17 +306,24 @@

        Trade-offs, honestly

        /ServiceInfo discovery endpoint to keep the versioning path honest, not because any business resource has yet needed to evolve its shape. The point of the exemplar is that when a real resource does need a 2.0, the machinery it plugs into has been proven to work, not merely configured. -
      • Header versioning is less discoverable than a URL segment, and the OpenAPI documents are dev/CI - only. A version chosen by header does not show up in a copied URL or a browser address bar, so the - version in play is only visible to a caller that reads request and response headers. The generated - contract does follow the versioning axis: MapCommonOpenApi applies - MapOpenApi().WithDocumentPerVersion() (Startup/Endpoints/OpenApiEndpointExtensions.cs:38), so the - route resolves one document per discovered API version, named by the explorer's GroupNameFormat - (v1.0 is the v1 document). But the whole endpoint is a no-op in Production - (Startup/Endpoints/OpenApiEndpointExtensions.cs:36), and the only document any host's contract test - pins is /openapi/v1.json (Conformance/OpenApiContractTestsBase.cs:31), so the machine-readable - surface is a development and CI artifact, not something a client can browse in production and not a - place the 2.0 shape is currently asserted.
      • +
      • Header versioning is less discoverable than a URL segment, and the OpenAPI document is one + dev/CI-only v1. A version chosen by header does not show up in a copied URL or a browser address + bar, so the version in play is only visible to a caller that reads request and response headers. The + generated contract does not follow the versioning axis either. Each host registers the plain v1 + document itself with services.AddOpenApi(), next to AddCommonOpenApi, which registers no document + and only configures the ones present (WebApplicationBuilderExtensions.cs:95). MapCommonOpenApi + then maps that single document with app.MapOpenApi().AllowAnonymous() + (Startup/Endpoints/OpenApiEndpointExtensions.cs:74, document name v1 at :28), throws at startup + when no v1 document was registered (:65-71), and is a no-op in Production (:62). So the 2.0 + ServiceInfo action is served and exercised by the fitness contract above but appears in no + generated document, and the only document any host's contract test pins is /openapi/v1.json + (Conformance/OpenApiContractTestsBase.cs:31). ADC and Store also write that document to disk at + build time and commit it per service host (four in ADC, three in Store, for example + MMCA.ADC.Conference.Service/openapi/MMCA.ADC.Conference.Service.json), and an "OpenAPI documents are + current" CI step fails a PR whose document changed without being committed (MMCA.ADC/.github/workflows/deploy.yml:305, + MMCA.Store/.github/workflows/deploy.yml:287). That makes the contract diffable in review, but it + stays a development and CI artifact: never served in production, and not a place the 2.0 shape is + asserted (the committed Conference document carries /ServiceInfo and no ServiceInfoV2Response).

      The trade the framework makes is clear: stable, version-free URLs and a non-breaking rollout, paid for with a version that lives in headers rather than the path, and a proof-of-life second version on the @@ -344,8 +354,8 @@

      Apply this even without MMCA

      backfill that keeps OpenAPI generation from failing) in one call, how ServiceInfoControllerBase ships a real deprecated 1.0 alongside a 2.0 so ServiceInfoVersioningContractTestsBase can prove two versions coexist rather than assert it, and the honest current-reality caveats (only the discovery endpoint has - a 2.0, adoption is per host, the attributes are repeated per subclass, and the OpenAPI documents are - dev/CI only).

      + a 2.0, adoption is per host, the attributes are repeated per subclass, and the OpenAPI contract is a + single dev/CI-only v1 document that does not show the 2.0 shape).

      Next in the series: Article 45, "Feature Flags in the CQRS Pipeline: Gate Commands, Not Code," on gating a command in the pipeline instead of branching the code that runs it.

      MMCA.Common is open source. Star the repo, read the 2-minute ADR-046 behind this pattern, or diff --git a/articles/i18n-and-theming.html b/articles/i18n-and-theming.html index 18bb0faf..f9dbb29f 100644 --- a/articles/i18n-and-theming.html +++ b/articles/i18n-and-theming.html @@ -173,16 +173,16 @@

      Why it matters

      The MMCA answer: one preference pipeline, used twice

      Internationalization, keyed on a code you already have

      Supported cultures are an explicit allowlist, not an open-ended capability. SupportedCultures (MMCA.Common.Shared/Globalization/SupportedCultures.cs:9) holds Default = "en-US" (:12) and All = [Default, "es"] (:18), with an IsSupported guard (:35) that matches case-insensitively. That one list is the single allowlist the request-localization options, the culture switcher, and the profile guard all read, so they cannot drift apart. Adding a locale is adding one entry here plus the translated resource files, not new infrastructure.

      -

      Strings are externalized to .resx co-located with the type that uses them and looked up through IStringLocalizer<T>, so a view asks for L["Common.Button.Save"] rather than carrying English inline. That is the ordinary part. The interesting part is the errors, because errors are produced on the server and a translated client cannot fix them.

      +

      Strings are externalized to .resx co-located with the type that uses them and looked up through IStringLocalizer<T>, so a view asks for L["Common.Button.Cancel"] (MMCA.Common.UI/Resources/SharedResource.resx:268, with its Spanish sibling at the same line of SharedResource.es.resx) rather than carrying English inline. That is the ordinary part. The interesting part is the errors, because errors are produced on the server and a translated client cannot fix them.

      The Result pattern (ADR-013) already gives every Error a stable machine Code. That turns server-side error localization into a keyed lookup instead of a rewrite. IErrorLocalizer (MMCA.Common.API/Localization/IErrorLocalizer.cs:9) declares a single method, Localize(string code, string fallbackMessage) (:17). The default implementation, ErrorLocalizer (MMCA.Common.API/Localization/ErrorLocalizer.cs:11), walks an ordered set of registered ErrorResourceSources (ErrorResourceSource.cs:12), Common first then modules, looks the code up against the current UI culture, and returns the original English message untouched when no source has the key (ErrorLocalizer.cs:32). An untranslated code degrades gracefully to English; it never throws.

      -

      This happens at one place, the single Result-to-ProblemDetails projection point. ErrorHttpMapping.BuildErrorsExtension (MMCA.Common.API/Middleware/ErrorHttpMapping.cs:61) projects each error, and only the human-readable Message is run through the localizer, keyed by Code (:65); the machine fields (Code, Type, Source, Target) stay verbatim so clients can still branch on them. A null localizer leaves the English message unchanged. Domain code, handlers, and Result signatures never change. They stay culture-agnostic. Only the edge speaks a culture.

      -

      One cookie ties the runtimes together. The UI hosts run UseRequestLocalization over the SupportedCultures list with a cookie provider, so the static prerender already renders in the right culture. The WASM client reads the same cookie on startup through MmcaCultureBootstrap.SetBrowserCultureAsync (MMCA.Common.UI/Services/Culture/MmcaCultureBootstrap.cs:22) and sets the thread culture before the app runs, so prerender and hydration agree. And CultureDelegatingHandler (MMCA.Common.UI/Services/Culture/CultureDelegatingHandler.cs:13) stamps the active culture onto every outgoing API call as an Accept-Language header (:24), which is the channel that makes the cross-origin services return their errors in the chosen language. The CultureSwitcher component (MMCA.Common.UI/Globalization/CultureSwitcher.razor:9) iterates OfferedCultures (:13) to render the menu: SupportedCultures.All plus a Development-only pseudo-localization locale (:24-27, ADR-027 §8) that surfaces hard-coded strings and truncation and never ships to production.

      -

      The runtime channel is the cookie; the cross-device source of truth is the profile. A user's chosen culture persists to the Identity User aggregate as PreferredCulture (in the consumer apps' Identity module, for example MMCA.ADC.Identity.Domain/Users/User.cs:108, validated by UserInvariants.EnsurePreferredCultureIsValid, invoked inside UpdatePreferences at :333). On login the cookie is set from the profile; an authenticated switch writes both; an anonymous user gets only the cookie.

      +

      This happens at one place, the single Result-to-ProblemDetails projection point. ErrorHttpMapping.BuildErrorsExtension (MMCA.Common.API/Middleware/ErrorHttpMapping.cs:62) projects each error, and only the human-readable Message is run through the localizer, keyed by Code (:66); the machine fields (Code, Type, Source, Target) stay verbatim so clients can still branch on them. A null localizer leaves the English message unchanged. Domain code, handlers, and Result signatures never change. They stay culture-agnostic. Only the edge speaks a culture.

      +

      One cookie ties the runtimes together. The UI hosts run UseRequestLocalization over the SupportedCultures list with a cookie provider, so the static prerender already renders in the right culture. The WASM client reads the same cookie on startup through MmcaCultureBootstrap.SetBrowserCultureAsync (MMCA.Common.UI/Services/Culture/MmcaCultureBootstrap.cs:22) and sets the thread culture before the app runs, so prerender and hydration agree. And CultureDelegatingHandler (MMCA.Common.UI/Services/Culture/CultureDelegatingHandler.cs:13) stamps the active culture onto every outgoing API call as an Accept-Language header (:24), which is the channel that makes the cross-origin services return their errors in the chosen language. The CultureSwitcher component (MMCA.Common.UI/Globalization/CultureSwitcher.razor:9) iterates OfferedCultures (:13) to render the menu: SupportedCultures.All plus a Development-only pseudo-localization locale (:24-27, ADR-027 Decision 8) that surfaces hard-coded strings and truncation and never ships to production.

      +

      The runtime channel is the cookie; the cross-device source of truth is the profile. A user's chosen culture persists to the Identity User aggregate as PreferredCulture (in the consumer apps' Identity module, for example MMCA.ADC.Identity.Domain/Users/User.cs:108, validated by UserInvariants.EnsurePreferredCultureIsValid, invoked inside UpdatePreferences at :333). On login the cookie is set from the profile: ApplyStoredPreferencesAndNavigateAsync (MMCA.Common.UI/Pages/Auth/Login.razor:265) reads the stored preferences through IUserPreferenceReader (:267), applies the theme through ThemeService.SetDarkModeAsync (:271), and, when the stored culture differs from the current one, hands it to ICultureApplier.ApplyAsync (:280), which on the web head round-trips /culture/set to write the cookie. An authenticated switch writes both; an anonymous user gets only the cookie.

      Theme, riding the same rails

      Now the payoff. The theme toggle does not build any of that again.

      MMCATheme (MMCA.Common.UI/Theme/MMCATheme.cs:9) defines a complete PaletteDark (:56) next to PaletteLight (:13), and ADR-028 is what wires those dark surfaces to a live toggle. MainLayout renders one dedicated MmcaThemeProviders component (MMCA.Common.UI/Layout/MainLayout.razor:14), and that component is where the provider binds two-way against that complete theme: <MudThemeProvider Theme="@Theme" @bind-IsDarkMode="_isDarkMode" /> (MMCA.Common.UI/Theme/MmcaThemeProviders.razor:12). Theme is an optional component parameter that defaults to MMCATheme.Instance (:34), so the framework palette is what every host gets by default and an app that wants its own brand passes a derived MudTheme instead of duplicating the whole provider block. No new palette work.

      ThemeService (MMCA.Common.UI/Theme/ThemeService.cs:17) owns the preference, and it persists to the exact same kind of store i18n uses: a non-HttpOnly cookie plus localStorage, written through theme.js. InitializeAsync (:35) reads the stored value and, only when nothing is stored, falls back to the OS preference (:46). SetDarkModeAsync (:54) sets the field, persists, and raises OnChange (:29) so the app-bar toggle and the layout stay in sync; ToggleAsync (:63) just flips it. The JavaScript module is tiny: get() reads the cookie then localStorage (theme.js:5), set() writes a year-long samesite=lax cookie plus localStorage (:23), and systemPrefersDark() is one matchMedia('(prefers-color-scheme: dark)') call (:33).

      -

      The toggle ships in the shared MainLayout right next to the culture switcher, both in the app-bar appbar-icon-actions slot (MainLayout.razor:33-36), so every consuming host gets both controls with no per-host wiring. ThemeToggle (MMCA.Common.UI/Theme/ThemeToggle.razor:7) calls ThemeService.ToggleAsync() and then best-effort writes the choice to the signed-in user's profile through an optional IUserPreferenceWriter (:23), which is a no-op when anonymous. The profile column is User.PreferredTheme (MMCA.ADC.Identity.Domain/Users/User.cs:111), folded into the same migration and governed by the same login-reconciliation rule as PreferredCulture. One migration, one persistence model, two preferences.

      +

      The toggle ships in the shared MainLayout right next to the culture switcher, both in the app-bar appbar-icon-actions slot (MainLayout.razor:33-36), and the pair is placed again in the NavMenu quick-actions row (MMCA.Common.UI/Layout/NavMenu.razor:44-45), so every consuming host gets both controls with no per-host wiring. ThemeToggle (MMCA.Common.UI/Theme/ThemeToggle.razor:7) calls ThemeService.ToggleAsync() and then best-effort writes the choice to the signed-in user's profile through an optional IUserPreferenceWriter (:23), which is a no-op when anonymous. The profile column is User.PreferredTheme (MMCA.ADC.Identity.Domain/Users/User.cs:111), folded into the same migration and governed by the same login-reconciliation rule as PreferredCulture. One migration, one persistence model, two preferences.

      The pipeline, in one sketch

      This is illustrative-of-shape, condensed from the files above to put the shared pipeline in one view, not a verbatim paste:

      // i18n: localize the error at the single edge projection, keyed by the stable Code,
      @@ -211,7 +211,7 @@ 

      The pipeline, in one sketch

      <ThemeToggle /> </span> -@* MmcaThemeProviders.razor: the two-way theme binding lives here now, not in MainLayout. +@* MmcaThemeProviders.razor: the two-way theme binding lives here, not in MainLayout. Theme is an optional parameter defaulting to MMCATheme.Instance. *@ <MudThemeProvider Theme="@Theme" @bind-IsDarkMode="_isDarkMode" />

      A culture choice and a theme choice enter the same way (a control in the same slot), persist the same way (a non-HttpOnly cookie plus a User profile column), and reconcile the same way on login. That is the whole thesis.

      @@ -219,10 +219,10 @@

      Trade-offs, honestly

      • Coverage is two locales, en-US and Spanish, full stop. Spanish (es) is the one added locale (SupportedCultures.cs:18). The mechanism is built to scale (adding a locale is one allowlist entry plus the translated .resx), but the shipped coverage today is exactly two. This article does not claim more, and you should not either.
      • The translation gap is gated, not hoped for. A new English string cannot ship without its Spanish sibling: ResourceTranslationsAreComplete (MMCA.Common.Testing.Architecture/Rules/Ui/ArchitectureRules.Localization.cs:23, run as LocalizationResourceTests) fails the build when any base .resx under Source/ lacks a complete, non-empty translation for a required culture. The rule takes the required-culture list, so it is repo-agnostic and vacuous for a single-locale repo.
      • -
      • Culture-less formatting is a build gate, not advice. Accidentally calling ToString() on a date or number without a format provider is caught at compile time: MA0076 is set to error severity in .editorconfig (:592), so a culture-less interpolation fails the build and must declare an explicit IFormatProvider. The posture is blocking: the gate fails, it does not warn.
      • +
      • Culture-less interpolation is a build gate, not advice. Interpolating a date or number into a string without a format provider is caught at compile time: MA0076 (implicit culture-sensitive ToString in interpolation, .editorconfig:589) is set to error severity (:592), so a culture-less interpolation fails the build and must declare an explicit IFormatProvider. The posture is blocking: the gate fails, it does not warn. The gate is scoped to interpolation: Meziantou's general missing-provider rule MA0011 is switched off (:542), so an explicit ToString() call is left to the .NET analyzers, which run with AnalysisMode All and CodeAnalysisTreatWarningsAsErrors (MMCA.Common/Directory.Build.props:12-13).
      • The no-flash SSR bootstrap is wired for locale but not yet for theme. This is the one honest asymmetry. Locale is flash-free because the server reads the cookie at prerender through UseRequestLocalization. Theme is not: ThemeService.InitializeAsync runs from OnAfterRenderAsync(firstRender) and deliberately does not run during SSR prerender (ThemeService.cs:35, and the doc-comment at :11-14), so the bound IsDarkMode is corrected just after hydration. The cookie is non-HttpOnly precisely so a server prerender could read it, but the server-side emit (a data-theme attribute or inline head script written from the cookie before Blazor hydrates) is not yet wired for theme (ADR-028, Decision 3). A brief wrong-theme flash on first paint is therefore currently possible, and closing it is tracked as follow-up.
      • Superseding ADR-011 changes the scorecard, not the scope of the world. ADR-027 supersedes ADR-011, so multi-locale is in scope and §27 Internationalization is a scored category rather than N/A. That is a real status, and it is still two locales. Do not read "in scope" as "fully internationalized."
      • -
      • MudBlazor's own built-in component chrome is localized too. ResxMudLocalizer (MMCA.Common.UI/Globalization/ResxMudLocalizer.cs:17), a MudLocalizer over the MudTranslations resource pair (MMCA.Common.UI/Resources/MudTranslations.resx + MudTranslations.es.resx, en and es entries for the MudBlazor built-in keys), is DI-registered in AddUIShared (MMCA.Common.UI/DependencyInjection.cs:79), so the pager, filter menus, pickers, and close buttons follow the active culture. Unknown keys fall back to MudBlazor's built-in English and en-US deliberately keeps the built-ins. ADR-027 records this wiring as part of the shipped i18n surface (Decision 9).
      • +
      • MudBlazor's own built-in component chrome is localized too. ResxMudLocalizer (MMCA.Common.UI/Globalization/ResxMudLocalizer.cs:17), a MudLocalizer over the MudTranslations resource pair (MMCA.Common.UI/Resources/MudTranslations.resx + MudTranslations.es.resx, en and es entries mirroring MudBlazor's own LanguageResource keys as of v9.6.0 per MMCA.Common.UI/Resources/MudTranslations.cs:7-8, while the pinned package is MudBlazor 9.11.0 at MMCA.Common/Directory.Packages.props:176), is DI-registered in AddUIShared (MMCA.Common.UI/DependencyInjection.cs:79), so the pager, filter menus, pickers, and close buttons follow the active culture. InvariantMudLocalizationInterceptor (MMCA.Common.UI/Globalization/InvariantMudLocalizationInterceptor.cs:37, registered at DependencyInjection.cs:88) decides the fallback: an English culture such as en-US deliberately keeps the built-ins (:49-57), and a key the pair does not hold falls back to MudBlazor's built-in English (:59-60). ADR-027 records this wiring as part of the shipped i18n surface (Decision 9).
      • Per-user persistence adds a column to the consumer's Identity User. The framework supplies the cookie, the localizer, the theme service, the IUserPreferences contract (MMCA.Common.Domain/Auth/IUserPreferences.cs:13,16) and the shared CommonInvariants.EnsurePreferredCultureIsValid/EnsurePreferredThemeIsValid guards (MMCA.Common.Domain/Invariants/CommonInvariants.cs:142,158); the PreferredCulture/PreferredTheme columns live on each app's User aggregate (MMCA.ADC.Identity.Domain/Users/User.cs:108,111), with a profile-edit surface to set them. It is one folded migration, but it is a column the consumer owns, not free.

      None of these argue against the design. They argue for finishing it: wire the theme prerender read, keep the translation gate green, and be clear-eyed that "internationalized" here means en-US and Spanish, persisted correctly, not every locale on earth.

      diff --git a/articles/idempotency-attribute.html b/articles/idempotency-attribute.html index 7c2d1c81..df07abd8 100644 --- a/articles/idempotency-attribute.html +++ b/articles/idempotency-attribute.html @@ -196,9 +196,9 @@

      The mechanism: one attribute, on
      1. The client supplies an Idempotency-Key header (a value it generates per logical request, the same value across its own retries).
      2. -
      3. On the first request with a given key, the action runs, and its response (status code plus JSON - body) is serialized into an IdempotencyRecord, together with a SHA-256 hash of the request body - that produced it, and cached.
      4. +
      5. On the first request with a given key, the action runs, and its response (status code, JSON body, + and the Location and ETag headers a client may act on) is serialized into an IdempotencyRecord, + together with a SHA-256 hash of the request body that produced it, and cached.
      6. On a subsequent request with the same key and the same body, within the retention window, the cached response is replayed verbatim, with an extra header X-Idempotent-Replay: true, and the action does not run again.
      7. @@ -208,8 +208,9 @@

        The mechanism: one attribute, on
      8. No Idempotency-Key header means the action just runs normally. Idempotency is opt-in per request.

      The cache window defaults to 24 hours (bound from an IdempotencySettings section, range-guarded to a - one-week maximum, validated at startup). A first-call 201 Created replays as a 201, not a generic - 200, because the record captures the original status code as well as the body.

      + one-week maximum, validated at startup). A first-call 201 Created replays as a 201 that still points at + the created resource, not as a generic 200, because the record captures the original status code and its + Location header as well as the body.

      Binding the body to the key is why the filter runs at two pipeline stages rather than one. It is an IAsyncResourceFilter as well as an IAsyncActionFilter: the resource stage runs before model binding, which is the last point at which the request body can still be made re-readable, so that is where it calls @@ -225,8 +226,10 @@

      The mechanism: one attribute, on hash-less record and therefore no path that replays without checking the payload.

      One thing that contract does not say out loud: the client's key is not the cache key. The filter derives idempotency:{SHA-256(subject | method | route template | client key)}, where the subject is the caller's - user_id claim or, for an unauthenticated call, anon:{remote address}. That is a security property before - it is anything else. Keying on the bare client value makes the key space global: two callers who happen to + user id (the sub claim, falling back to the mapped name-identifier claim) or, for an unauthenticated call, + anon:{remote address} (anon:unknown when there is no address). The four parts are joined with a newline, + which none of them can contain, so no value can be crafted to forge a different tuple. That is a security + property before it is anything else. Keying on the bare client value makes the key space global: two callers who happen to pick the same value share an entry, so one user's serialized response body gets replayed to another, and because services can share a single cache instance the collision reaches across endpoints and across services too. Hashing also keeps the stored key bounded no matter what the client sends.

      @@ -292,8 +295,8 @@

      When the cache or the lock is downNoContent(), which stores an empty body and replays as a bare status code rather than as JSON with no content. Non-2xx results are deliberately not stored, because replaying a transient 500 for the whole retention window is worse than letting the retry actually execute. Redirects and file - results are skipped: the record carries a status code, a JSON body, and the hash of the request that - produced them, and nothing else.)

      + results are skipped: the record carries a status code, a JSON body, the Location and ETag headers, and + the hash of the request that produced them, and nothing else.)

      The same problem shows up on the broker, and the inbox is the matching mechanism

      HTTP retries are one source of duplicates. The other is the message broker.

      MMCA.Common's outbox gives at-least-once delivery: an event may be published twice (the publish @@ -311,8 +314,11 @@

      The retry half is wired too: every receive endpoint gets an exponential-backoff UseMessageRetry policy (MessageBusSettings.RetryLimit), and the consumer rethrows on handler failure so MassTransit applies it before dead-lettering. So the honest framing is: the HTTP write path is idempotent-by-attribute (the - scorecard credits the filter under §9 and §10, where §10 scores Implementation 9 on the strength of the - filter taking a distributed lock with the stripe as fallback, while §29 covers the Polly handlers and the - outbox's graceful degradation), and the broker consumer path dedups by MessageId by default on - any broker transport. The remaining discipline is treating the explicit opt-out as a decision with a cost, - and keeping handlers safe to repeat wherever the inbox resolves off.

      + scorecard credits the filter under §9 and §10, where the §10 row, scored Implementation 9, lists the + filter taking a distributed lock with the stripe as fallback among its evidence, while §29 covers the Polly + handlers and the outbox's graceful degradation), and the broker consumer path dedups by MessageId by + default on any broker transport. The remaining discipline is treating the explicit opt-out as a decision + with a cost, and keeping handlers safe to repeat wherever the inbox resolves off.

      Trade-offs, honestly

      • Clients must send a stable key, from a stable identity. Idempotency is a contract, not magic. If a @@ -341,8 +347,9 @@

        Trade-offs, honestly

      • The window is bounded. Replay works for the retention window (default 24h, max one week). A retry after the window expires re-executes. Size the window to your realistic retry horizon.
      • Only successful, JSON-shaped responses replay. A 2xx ObjectResult or a body-less 2xx - StatusCodeResult is cached. Failures are not, and neither are redirects or file results. Response - headers are not part of the record either, so a replayed 201 does not carry the original Location.
      • + StatusCodeResult is cached. Failures are not, and neither are redirects or file results. Of the response + headers, only Location and ETag travel with the record; any other header the original wrote is not + replayed.
      • Cross-replica exclusivity is a deployment property, not a guarantee. You get it where a Redis multiplexer is registered. A host without one falls back to the process-local lock or the stripe, and there two duplicates on different instances can both miss the cache and execute. Even with Redis the @@ -358,6 +365,9 @@

        Trade-offs, honestly

      • Consumer-side idempotency follows the transport. The inbox above resolves on for a broker and off for the in-process provider, and a host can override either way with MessageBus:EnableInbox. Wherever it resolves off, every consumer's idempotency is code you own and test.
      • +
      • On an event with several handlers, the inbox row commits with the first handler that saves. A later + handler that then fails is not retried by the redelivery, which is skipped as a duplicate. Ordering and + partial failure across handlers of one event are therefore yours to reason about.

      None of these are reasons to skip idempotent writes. They are the reasons to make the key contract explicit and to write your broker consumers defensively.

      @@ -366,11 +376,12 @@

      Apply this even without MMCA

      1. Accept an Idempotency-Key header on write endpoints and require clients to keep it stable across retries.
      2. -
      3. Cache the first response (status and body) for a bounded window and replay it verbatim for - duplicates. Key the entry on a hash of caller identity plus method plus route plus the client's key, - never on the bare client value: otherwise two callers who pick the same string read each other's - responses. Store a hash of the request body with the record and compare it before replaying, so a - key reused with a different payload is refused rather than answered with a success that never happened.
      4. +
      5. Cache the first response (status, body, and the headers a client acts on, such as Location) for a + bounded window and replay it verbatim for duplicates. Key the entry on a hash of caller identity plus + method plus route plus the client's key, never on the bare client value: otherwise two callers who pick + the same string read each other's responses. Store a hash of the request body with the record and + compare it before replaying, so a key reused with a different payload is refused rather than answered + with a success that never happened.
      6. Hold a lock across execute-and-store, not just across the cache check, and re-check after acquiring. Use a lock every replica can see (SET NX PX with a compare-and-delete release is enough), because a per-process lock only serializes duplicates that land on the same instance. Answer a diff --git a/articles/identity-completions.html b/articles/identity-completions.html index 54ba6905..409644a4 100644 --- a/articles/identity-completions.html +++ b/articles/identity-completions.html @@ -186,8 +186,8 @@

        Why it matters

        Rubric §11 (Security) is a weight-3 category asking that authentication be centralized and identity flows documented, that authorization be enforced at the right layer rather than in the UI, and that permissions follow least privilege, with "over-broad permissions (admin everywhere), no least - privilege" as a named red flag (ArchitectureEvaluationCriteria.md:353-380). MMCA.Common's §11 row - sits at Maturity 4 and Implementation 8 (common-ArchitectureScorecard.md:91), and the two + privilege" as a named red flag (ArchitectureEvaluationCriteria.md:353-376). MMCA.Common's §11 row + sits at Maturity 4 and Implementation 8 (common-ArchitectureScorecard.md:75), and the two capabilities most often missing from the band above it are exactly a step-up factor and an authorization model that can be adjusted without a release.

        But there is a second thing at stake, and it is the one that decides the design. A shared framework @@ -195,33 +195,39 @@

        Why it matters

        not a feature in a library, it is a behavior change in somebody else's production, delivered by a version bump. The framework's own history is the argument: the 1.188.0 release needed an UPGRADING.md section with eight items, one of which (a fallback authorization policy) broke - unannotated endpoints (ADR-116:39-42).

        + unannotated endpoints (ADR-116:42-46).

        So the question is not "how do I implement TOTP." It is "how do I ship TOTP so that the app which does not want it cannot possibly be affected by it."

        The MMCA answer: the unadopted path is unreachable, not merely disabled

        -

        AuthenticationServiceBase<TUser> gained two constructor parameters, both optional and both - defaulted to null: ITwoFactorAuthenticator? twoFactor = null and +

        AuthenticationServiceBase<TUser> takes the two new collaborators as constructor parameters, both + optional and both defaulted to null: ITwoFactorAuthenticator? twoFactor = null and IOptions<EmailConfirmationSettings>? emailConfirmationSettings = null - (AuthenticationServiceBase.cs:83-84). Every existing subclass keeps compiling, because it simply + (AuthenticationServiceBase.cs:69-70). Every existing subclass keeps compiling, because it simply passes fewer arguments, and the documentation on those parameters says what null means: "while it is - null the sign-in flow has no second-factor step at all" (:63-69).

        + null the sign-in flow has no second-factor step at all" (:52-62).

        That is not the same as a configuration flag, and the difference is the whole point. ChallengeSecondFactorAsync is a two-line expression body: with no authenticator injected it returns TwoFactorOutcome.NotEnrolled outright, and only otherwise delegates to - twoFactor.ChallengeAsync (:665-672). An unadopted consumer pays no query, no branch and no + twoFactor.ChallengeAsync (:504-510). An unadopted consumer pays no query, no branch and no allocation. A disabled feature has a code path that runs and decides to do nothing; an absent collaborator has no code path at all. Only the second one is safe to ship to a system you cannot test.

        The email gate is built the same way. CheckEmailConfirmed returns success immediately unless the host supplied settings with RequireConfirmedEmail set, and even then refuses only a user whose type - implements IEmailConfirmableUser and reports IsEmailConfirmed: false (:641-652). Two + implements IEmailConfirmableUser and reports IsEmailConfirmed: false (:480-490). Two independent conditions, both off by default, one of them a type test the app controls.

        Where the two gates sit in the login sequence is a decision, not an accident. Both run after the - password has been proved: CheckEmailConfirmed at :215, ChallengeSecondFactorAsync at :221, - under a comment that gives the reason (:210-213). They return distinct, actionable errors ("confirm + password has been proved: CheckEmailConfirmed at :164, the second-factor challenge at :170, + under a comment that gives the reason (:160-163). They return distinct, actionable errors ("confirm your address", "send a code"), and an actionable error is an information leak if an anonymous caller can trigger it. Reaching either gate proves the caller owns the account, so neither is readable by somebody sweeping addresses.

        +

        Login reaches the challenge through a private wrapper, ChallengeSecondFactorCountingFailuresAsync + (:522-535), which counts a wrong code against the account exactly like a wrong password, so the + same lockout that throttles password guessing throttles code guessing per account. A missing code is + the ordinary first leg of the challenge and is not counted (:512-516). For an app with no + authenticator the wrapper costs nothing either: the inner call answers NotEnrolled, which is not a + failure, and no counter is touched.

        The step-up assertion is a claim, and presence is the whole test

        A challenge that is satisfied has to be recorded somewhere the rest of the system can read. The framework stamps an amr-style claim: AuthClaimTypes.MultiFactor is the literal mfa @@ -229,12 +235,13 @@

        The ste time-based code (:65) or recovery for a single-use recovery code (:68).

        Three details make this cheap to adopt.

        The claim is stamped without the app's hook participating. LoginAsync arms a private field with - the outcome (AuthenticationServiceBase.cs:242) and clears it in a finally (:249); the token is - minted through a wrapper that appends the claim to whatever claim set the app's CreateAccessToken - returned (:619-632, the arming at :621). No subclass signature changed, so no consumer edits a - method to start emitting mfa.

        + the outcome (AuthenticationServiceBase.cs:191) and clears it in a finally (:198); the token is + minted through CreateAccessTokenForSession, which hands that field to the session issuer's + MintForSession, and the issuer appends the claim to whatever claim set the app's CreateAccessToken + returned (:457-462, :469-470). No subclass signature changed, so no consumer edits a method to + start emitting mfa.

        A rotation does not silently drop it. RefreshTokenAsync reads the method back off the presented - token (:398) and carries it into the new one, then clears the field (:411). Without that, a + token (:332) and carries it into the new one, then clears the field (:347). Without that, a step-up would quietly expire at the next refresh and a user who did present a second factor would look like one who never had.

        Presence is the assertion, and absence denies. A token for an account with no second factor @@ -245,11 +252,11 @@

        The ste

        One more small thing worth stealing. The map from outcome to claim value has a default case that returns null with a comment explaining it: an outcome the map has not been taught about means the enum grew and this method did not, and it must not silently mint an mfa claim - (AuthenticationServiceBase.cs:679-691). A switch over an enum whose unknown arm asserts an identity + (AuthenticationServiceBase.cs:543-552). A switch over an enum whose unknown arm asserts an identity fact is a vulnerability waiting for its next contributor.

        // Illustrative of the documented shape: the two gates and the optional collaborator.
         public abstract class AuthenticationServiceBase<TUser>(
        -    // ... the eight collaborators every consumer already passes ...
        +    // ... the five collaborators every consumer already passes ...
             ITwoFactorAuthenticator? twoFactor = null,
             IOptions<EmailConfirmationSettings>? emailConfirmationSettings = null) : IAuthenticationService
         {
        @@ -259,8 +266,8 @@ 

        The ste if (confirmationResult.IsFailure) return Result.Failure<AuthenticationResponse>(confirmationResult.Errors); - var secondFactor = await ChallengeSecondFactorAsync( - untracked.Id, request.TwoFactorCode, cancellationToken); + var secondFactor = await ChallengeSecondFactorCountingFailuresAsync( + untracked.Id, request, cancellationToken); if (secondFactor.IsFailure) return Result.Failure<AuthenticationResponse>(secondFactor.Errors); @@ -271,6 +278,17 @@

        The ste ? Task.FromResult(Result.Success(TwoFactorOutcome.NotEnrolled)) : twoFactor.ChallengeAsync(userId, code, cancellationToken); + // A wrong code counts toward lockout like a wrong password; a missing code does not. + private async Task<Result<TwoFactorOutcome>> ChallengeSecondFactorCountingFailuresAsync( + UserIdentifierType userId, LoginRequest request, CancellationToken cancellationToken) + { + var secondFactor = await ChallengeSecondFactorAsync(userId, request.TwoFactorCode, cancellationToken); + if (secondFactor.IsFailure && secondFactor.Errors.Any(e => e.Code == TwoFactorErrors.TwoFactorInvalidCode)) + await loginProtection.IncrementFailedAttemptsAsync(request.Email, cancellationToken); + + return secondFactor; + } + // Off unless the host set RequireConfirmedEmail AND the app's User implements the contract. protected virtual Result CheckEmailConfirmed(TUser untrackedUser) { @@ -287,11 +305,11 @@

        The framework ships no use window, recovery codes. ITwoFactorStore is the persistence, and the consumer writes it, over its own User aggregate. The DI call is explicit about the split: it "deliberately registers no ITwoFactorStore", because the account's secret and recovery hashes belong to the app's own - aggregate (Infrastructure/DependencyInjection.cs:459-464).

        + aggregate (Infrastructure/DependencyInjection.Auth.cs:28-32).

        This is the same trade the framework already made for password material and for user lookups, and ADR-116 states the reason plainly: the two deployed apps model users differently, and a framework-owned user table would either be too thin to use or force columns an app has no place for - (ADR-116:31-38). Every consumer that wants two-factor writes one class. That is deliberate + (ADR-116:35-40). Every consumer that wants two-factor writes one class. That is deliberate duplication, bought on purpose.

        The settings carry the RFC 6238 defaults every authenticator app assumes: six digits, a thirty-second step (TwoFactorSettings.cs:34), one step of tolerated skew on each side, which widens the accepted @@ -301,7 +319,7 @@

        The framework ships no use against one period cannot read codes minted with another (:9-14).

        Email confirmation reuses the password-reset design rather than inventing one, down to the record shape, the hashing, the attempt cap and the throttle, under its own key prefix so issuing a - confirmation link cannot invalidate an outstanding reset link (ADR-116:66-77). And + confirmation link cannot invalidate an outstanding reset link (ADR-116:90-101). And RequireConfirmedEmail defaults to false, with the reason written next to it: turning it on locks out every existing account whose address was never confirmed, so a host backfills its rows as confirmed first and flips the flag afterwards (EmailConfirmationSettings.cs:47-55). With it off the @@ -318,19 +336,20 @@

        Stored Changing who can do what is a deploy.

        Stored grants layer over it. LayeredPermissionRegistry decorates whatever IPermissionRegistry the host already registered and unions the stored set with the compiled one - (Infrastructure/DependencyInjection.cs:535-580, the TryDecorate call and its order-tolerant - fallback at :566-580). The union is the security property: there is no deny row. A stored edit + (Infrastructure/DependencyInjection.Auth.cs:108-153, the TryDecorate call and its order-tolerant + fallback at :135-150). The union is the security property: there is no deny row. A stored edit can only widen a role, so the effective permission set never depends on evaluation order, and a data change can never disable an endpoint the code guarantees. Removing a compiled capability stays a code - change (ADR-116:212-215).

        + change (ADR-116:261-263).

        Two more decisions hold this up.

        The opt-in is a marker type, and it is what maps the table. PermissionGrantModelGate is an empty sealed class that is never injected anywhere - (PermissionGrantModelGate.cs:19). ApplicationDbContext resolves it from the root provider with + (PermissionGrantModelGate.cs:19), registered by AddStoredPermissionGrants + (DependencyInjection.Auth.cs:116). ApplicationDbContext resolves it from the root provider with GetService, so its absence reads as "this host did not opt in" rather than failing every context - construction (ApplicationDbContext.cs:911), and applies the grant configuration only then, and only - in the context instance whose physical source matches the configured DataSourceName - (:940, default "Default" at PermissionGrantSettings.cs:31). A host that never calls + construction (ApplicationDbContext.cs:913-918), and applies the grant configuration only then, and + only in the context instance whose physical source matches the configured DataSourceName + (:943, default "Default" at PermissionGrantSettings.cs:33). A host that never calls AddStoredPermissionGrants keeps a byte-identical model, and an opted-in host gets the table in exactly one of its databases.

        The authorization read stays synchronous, so the cache is part of the contract. @@ -338,9 +357,9 @@

        Stored role on demand inside it means blocking I/O on every such request, so the grants are held as a per-role in-memory snapshot, rebuilt on a timer and immediately after an edit by an invalidator that is the same instance as the cache, "so an edit and the reads that follow it cannot end up looking at - two different snapshots" (Infrastructure/DependencyInjection.cs:555-560). CacheSeconds defaults - to 300, documented as exactly what it is: the bound on how stale another replica may be after an - edit, because invalidation is per process (PermissionGrantSettings.cs:14-23).

        + two different snapshots" (Infrastructure/DependencyInjection.Auth.cs:120-126). CacheSeconds + defaults to 300 (PermissionGrantSettings.cs:25), documented as exactly what it is: the bound on how + stale another replica may be after an edit, because invalidation is per process (:14-23).

        A cold cache grants nothing, which is the safe direction, and the compiled layer answers from the first request either way.

        Two refusals that are worth more than the feature

        @@ -362,8 +381,10 @@

        Two refusals that are silently inert" is the difference between a user error and a support ticket six months later.

        Everything else about the write is deliberately boring, which is the compliment: a set is a diff rather than a truncate-and-insert, so only changed permissions are written, an unchanged submission - writes nothing, and the GrantedAt stamps of untouched rows survive (:32-37, writes at :162-186). - The snapshot is invalidated once, after the writes (:187).

        + writes nothing, and the GrantedAt stamps of untouched rows survive (:32-37, writes at :162-190). + The snapshot is invalidated once, in a finally after the writes. Each grant and revoke commits on + its own, so a failure part-way through leaves earlier rows written, and the invalidation therefore + runs on every exit rather than only on success (:165-167, :191-194).

        // Illustrative of the documented shape: the two refusals on a set.
         var desired = new HashSet<string>(permissions.Select(p => p.Trim()), StringComparer.Ordinal);
         
        @@ -386,13 +407,27 @@ 

        Two refusals that are nameof(IRoleAdministrationService), role)); // A set is a diff, not a truncate-and-insert: unchanged rows keep their GrantedAt stamp. -foreach (var permission in desired.Except(existing, StringComparer.Ordinal)) - await store.GrantAsync(role, permission, changedBy, cancellationToken); - -foreach (var permission in existing.Except(desired, StringComparer.Ordinal)) - await store.RevokeAsync(role, permission, cancellationToken); +// Each write commits on its own, so the invalidation runs on every exit. +try +{ + foreach (var permission in desired.Except(existing, StringComparer.Ordinal)) + { + var granted = await store.GrantAsync(role, permission, changedBy, cancellationToken); + if (granted.IsFailure) + return Result.Failure<RolePermissionsResponse>(granted.Errors); + } -await invalidator.InvalidateAsync(role, cancellationToken);

        + foreach (var permission in existing.Except(desired, StringComparer.Ordinal)) + { + var revoked = await store.RevokeAsync(role, permission, cancellationToken); + if (revoked.IsFailure) + return Result.Failure<RolePermissionsResponse>(revoked.Errors); + } +} +finally +{ + await invalidator.InvalidateAsync(role, cancellationToken); +}

        The administration API is two bases, gated on capabilities

        RolesAdminControllerBase (:61) needs no app-supplied service, because AddStoredPermissionGrants() registers a complete one; an app implements the interface only to @@ -417,39 +452,42 @@

        Trade-offs, honestly

        implementation of ITwoFactorStore in either MMCA.ADC or MMCA.Store. The capability is framework code with handler bases, settings, a claim and a challenge, waiting for its first adopter. Email confirmation and stored grants, by contrast, are both live: ADC's Identity service calls - AddEmailConfirmation (Program.cs:231) and AddStoredPermissionGrants (:277), Store's calls + AddEmailConfirmation (Program.cs:230) and AddStoredPermissionGrants (:276), Store's calls the same two (Program.cs:183, :220), both apps' User implements IEmailConfirmableUser (ADC User.cs:35, Store User.cs:30), and both route the two controller bases (ADC AdminRolesController.cs:37, UsersAdminController.cs:26; Store AdminRolesController.cs:36, AdminUsersController.cs:28).
      7. Registering a service is not the same as changing behavior, and that is a documentation burden. Adopting two-factor takes two steps, not one: the DI call, and then the app passing the resolved - ITwoFactorAuthenticator to its base constructor (Infrastructure/DependencyInjection.cs:465-468). + ITwoFactorAuthenticator to its base constructor (Infrastructure/DependencyInjection.Auth.cs:34-37). Adopting confirmation takes three: the DI call, RequireConfirmedEmail, and the User implementing the contract. Every one of those gaps is a place where somebody believes a feature is on and it is not. The safety is real and the confusion is real, and they are the same property.
      8. Optional constructor parameters are a one-way widening. The pattern that makes this source-compatible also means the base constructor's parameter list grows with every optional - collaborator, and it is now at ten. This scales to a few more and not to a dozen; at some point the - honest refactor is an options object, and that one will not be source-compatible.
      9. + collaborator. It stands at seven: five required collaborators plus the two optional ones + (AuthenticationServiceBase.cs:63-70). This scales to a few more and not to a dozen; at some point + the honest refactor is an options object, and that one will not be source-compatible.
      10. Stored grants are per-process cached, so a replica can be stale. An edit is live immediately on the replica that served it and reaches the others within CacheSeconds - (PermissionGrantSettings.cs:23). A cross-replica push would put a broker on the authorization + (PermissionGrantSettings.cs:18-19). A cross-replica push would put a broker on the authorization path. The window it would close is a grant taking effect a few seconds late, never a revoked grant outliving the interval, because the layer can only widen.
      11. A stored grant reaches another service only through a token claim. Where modules run as separate services, the host that mints tokens is the one that holds the grants, so a permission granted by a - row lands on the holder's next sign-in rather than within CacheSeconds (ADR-116:289-303). That + row lands on the holder's next sign-in rather than within CacheSeconds (ADR-116:296-299). That is the same latency a role change has always had, and it is the price of keeping the grant table in one host instead of replicating it.
      12. Adopting the table is a migration in the consumer, and it joins the hard-delete allowlist. The grant store hard-deletes a revoked grant, which makes it an exception to the framework's soft-delete default, and consumers running the same fitness rule have to add the type to their own - allowlist when they upgrade (ADR-116:339-344).
      13. -
      14. No pages ship. Enrollment (with its QR code and its show-recovery-codes-once screen) and - confirmation stay with the consumers; what ships is routeless administration components the app - routes, authorizes and links for itself (ADR-116:246-274). Two consumers have not yet wanted the - same enrollment page, and the rule is that a component gets promoted when they do.
      15. + allowlist when they upgrade (ADR-116:287-290). +
      16. No enrollment page ships. Two-factor enrollment (with its QR code and its show-recovery-codes-once + screen) stays with the consumers. The email confirmation landing page is the one page of the four + completions that MMCA.Common.UI ships, anonymous at /confirm-email (ConfirmEmail.razor:1-3), + and the administration surface ships as routeless components the app routes, authorizes and links + for itself (ADR-116:173-201). Two consumers have not yet wanted the same enrollment page, and the + rule is that a component gets promoted when they do.
      17. Apply this even without MMCA

        The identity mechanics here are standard. What is worth copying is the shape of the extension.

        diff --git a/articles/index.html b/articles/index.html index 5c233b86..7c63855f 100644 --- a/articles/index.html +++ b/articles/index.html @@ -215,7 +215,7 @@

        The series (53 articles)

        P2 G02 §4 - 068/115 + 068/115/129 deep-dive @@ -269,7 +269,7 @@

        The series (53 articles)

        P3 G07,G03 §8 - 018/113 + 018/113/130 deep-dive @@ -314,7 +314,7 @@

        The series (53 articles)

        P3 G08 §11 - 004 + 004/122 deep-dive ★ @@ -395,7 +395,7 @@

        The series (53 articles)

        P2/P4 G08,G15 §11,§26 - 022/069 + 022/069/131 deep-dive @@ -422,7 +422,7 @@

        The series (53 articles)

        P2 G12 §9,§11,§12 - 034/078 + 034/078/125 deep-dive @@ -474,16 +474,16 @@

        The series (53 articles)

        34 Architecture fitness functions P4 - G28 + G25 §3,§12,§25,§34 - 015/060/062/105/109 + 015/060/062/105/109/125/128 deep-dive 35 The test pyramid P4 - G28 + G25 §14,§21,§28 058/063/117 deep-dive @@ -494,7 +494,7 @@

        The series (53 articles)

        P3/P4 G07,G23 §30 - 005/047/076/119 + 005/047/076/095/119 deep-dive ★ @@ -601,7 +601,7 @@

        The series (53 articles)

        Observability by default: OpenTelemetry + Azure Monitor P2/P3 G16 - §13,§31 + §13 041/062 deep-dive diff --git a/articles/jwks-cross-service-auth.html b/articles/jwks-cross-service-auth.html index 7886a999..948cde0e 100644 --- a/articles/jwks-cross-service-auth.html +++ b/articles/jwks-cross-service-auth.html @@ -5,24 +5,24 @@ - Cross-service auth without a shared secret: JWKS dual-fetch · MMCA · Ivan Ball-llovera + Cross-service auth without a shared secret: JWKS discovery · MMCA · Ivan Ball-llovera - + - + - + - + @@ -158,7 +158,7 @@

        Auth & the edge · No. 16

        -

        Cross-service auth without a shared secret: JWKS dual-fetch

        +

        Cross-service auth without a shared secret: JWKS discovery

        When you split a monolith into services, the easy answer is to copy the JWT signing @@ -214,31 +214,39 @@

        The MMCA ans JsonWebKeySet GetJsonWebKeySet(); // public parameters only; private key never leaves // Validator side (any extracted service): JwtBearer fetches the issuer's JWKS URL -// (routed through the YARP gateway) and validates RS256 tokens against the public keys. +// (through the gateway under the local AppHost, Identity's internal ingress when deployed) +// and validates RS256 tokens against the public keys. // The validator holds NO secret. A leaked public key cannot mint tokens. -

        (Source: RsaJwksProvider.cs, IJwksProvider.cs, and the JWKS notes in MMCA.Common/CLAUDE.md's +

        (Source: RsaJwksProvider.cs, IJwksProvider.cs, and the JWKS notes in MMCA.Common/AGENTS.md's microservices extraction section.)

        -

        The dual-fetch, and the graceful empty set

        -

        The dual-fetch ADR-004 describes is in the key discovery itself: a validator discovers the issuer's - public key from the JWKS endpoint, and the framework falls back gracefully when the key is not - there. When JWKS publishing is disabled (the default for a monolith) or no key is configured, - RsaJwksProvider returns an empty key set rather than throwing. The endpoint stays a valid, pollable - URL instead of erroring. A monolith that never turns JWKS on still answers /.well-known/jwks.json with - an empty document, so flipping a service into extracted mode does not require standing up new endpoints. - Discover the key; fall back when it is not there. That is the dual-fetch.

        -

        A different two-fetch is easy to conflate with this one, so it is worth naming plainly: the shared login - flow, AuthenticationServiceBase<TUser>.LoginAsync in MMCA.Common.Application, does an untracked +

        Discovery, and the graceful empty set

        +

        Discovery has two halves, and ADR-004 names both. On the issuer, when JWKS publishing is disabled (the + default for a monolith) or no key is configured, RsaJwksProvider returns an empty key set rather + than throwing. The well-known endpoints are mapped centrally for every host, so the endpoint stays a + valid, pollable URL instead of erroring. A monolith that never turns JWKS on still answers + /.well-known/jwks.json with an empty document, so flipping a service into extracted mode does not + require standing up new endpoints, and only the real issuer advertises a key.

        +

        On the validator, the question is which URL to fetch from, and the answer depends on where the host + runs. Under the local Aspire AppHost, WithJwksDiscovery(identity, gateway) sets each validator's + authority to the gateway's HTTPS origin: the extracted REST services listen HTTP/2-only on + cleartext for h2c gRPC (ADR-012), so the default HTTP/1.1 JwtBearer backchannel cannot reach Identity + directly, while the gateway terminates TLS, speaks both protocols, and forwards /.well-known/* on to + Identity. When no gateway is passed, the helper falls back to Identity's own HTTPS endpoint. In the + deployed ADC and Store environments, the bicep templates point the authority straight at Identity's + internal-ingress URL, with no gateway hop. Either way the validator carries one authority value owned + by the host wiring and no key material, and ValidIssuer is deliberately left unpinned: the authority + is an internal address while the token's iss is the public origin, so the issuer is taken from the + discovery document.

        +

        ADR-004's file name says "dual-fetch", but the framework's own doc comments give that name to a + different flow, so it is worth naming plainly: the shared login flow, + AuthenticationServiceBase<TUser>.LoginAsync in MMCA.Common.Application, does an untracked read to validate credentials (so the adversarial majority of login traffic, the failed attempts, never pays EF Core change-tracking cost), then a tracked re-fetch only on success to persist the rotated refresh token. The base's own doc comment names it the "untracked-then-tracked dual-fetch"; the ADC and Store Identity modules are thin sealed subclasses that supply the app-specific hooks (the untracked lookup, the claim set) and re-label it "dual-fetch pattern" in their class doc comments - (AuthenticationService.cs:17 in ADC, :16 in Store). It is shared framework login code, not a - per-app copy, but it is still not part of ADR-004's cross-service validation design.

        -

        JWKS discovery is routed through the YARP gateway, not pointed at each service's internal address. - The validator asks the gateway for the issuer's JWKS document, and the gateway forwards it to whichever - host currently owns Identity. This keeps the validator's config stable across topology changes: when - Identity moves, redeploys, or scales, the gateway route updates, not every consumer.

        + (AuthenticationService.cs:20 in both ADC and Store). It is shared framework login code, not a + per-app copy, but it is not part of ADR-004's cross-service validation design.

        JWT algorithm pinning: the attack you would otherwise ship

        Switching to asymmetric keys opens a specific, classic attack, and the framework closes it explicitly.

        Once the RSA public key is published (which is the entire point of JWKS), an attacker has it. If a @@ -262,24 +270,47 @@

        Trade-offs, honestly

        The JWKS layer is the right model, but it is not free, and the §11 review of the framework names the rough edges.

          -
        • Two round trips on successful login. The Identity service's login flow (the shared login +
        • Two round trips on successful login. The Identity service's login flow (the shared login dual-fetch above, not the JWKS layer itself) pays a tracked re-fetch, a second query on the success path. In practice the first query warms the database buffer pool so the second is near-instantaneous, and failed logins (the adversarial majority) pay nothing extra. It is a deliberate trade, not an - oversight.

        • -
        • A small race window between the two fetches. A user could be deleted between the untracked + oversight.

          +
        • +
        • A small race window between the two fetches. A user could be deleted between the untracked validation and the tracked re-fetch. The re-fetch then returns NotFound, which is the correct - outcome, so the window is acceptable rather than hidden.

        • -
        • Plain-HTTP metadata discovery is an explicit, auditable opt-out. AddForwardedJwtBearer + outcome, so the window is acceptable rather than hidden.

          +
        • +
        • Plain-HTTP metadata discovery is an explicit, auditable opt-out. AddForwardedJwtBearer resolves RequireHttpsMetadata in three steps: explicit argument, then the Authentication:JwtBearer:RequireHttpsMetadata config key, then true everywhere except Development, and a resolved false outside Development logs one startup warning naming the key. The honest residual is that an operator can still set that key to false, and both production - deployments do: ADC and Store validate against an internal-ingress cleartext http://identity, so - their bicep sets it explicitly with the justification written beside it. That is a reviewable line in - a deployment template rather than a default nobody chose. Permissive dev CORS is a development-only - affordance, selected by environment.

        • -
        • The invariants in this article fail the build. Executable tests run the real registration code + deployments do: ADC and Store validate against Identity's cleartext internal-ingress URL, so their + bicep sets it explicitly with the justification written beside it. That is a reviewable line in a + deployment template rather than a default nobody chose.

          +
        • +
        • Every dev-only relaxation fails closed on an unknown environment. The three-step resolution + above is one instance of a framework-wide rule (ADR-122): a relaxation applies only when the host + positively identifies itself as Development, and an unknown, absent, or unparseable environment + gets the production posture. The case that rule exists for is easy to miss: design-time tooling, a + directly-constructed test context, and a service collection assembled outside a host builder + register no IHostEnvironment at all, so every gate has to decide what "unknown" means.

          +

          Three gates take a nullable environment and answer "not Development" for null. + SensitiveDataLoggingGate.IsEnabled lets EF Core render parameter values into logs only when the + setting asks for it AND the environment reports Development, so a configuration file copied into a + deployed host cannot put tokens and password hashes into the log sink on its own. SMTP transport + security reads the Smtp:EnableSsl key first and otherwise enables TLS unless the environment is + positively Development, and a deployed host that turns TLS off logs a startup warning. The AI + package scans the service collection for a registered IHostEnvironment and keeps prompt and + completion text out of telemetry when it finds none.

          +

          The residuals are named in the ADR itself. ASPNETCORE_ENVIRONMENT is the trust root, so a host + that misreports itself as Development gets every relaxation at once: the rule concentrates the risk + on one value instead of removing it. The other environment-conditional relaxations (the permissive + dev CORS policy, the cookie Secure flag, HSTS, the pseudo-locale) are plain IsDevelopment() + checks against an environment the host always supplies, not fail-closed gates. And the inventory is + manual: nothing fails a build when a new environment-conditional branch skips the rule.

          +
        • +
        • The invariants in this article fail the build. Executable tests run the real registration code and read the produced options back: the forwarded bearer handler's ValidAlgorithms must stay [RsaSha256], the RequireHttpsMetadata resolution above is asserted step by step (including the fail-fast on a cleartext authority with no opt-out), the permissive CORS policy must never support @@ -289,17 +320,19 @@

          Trade-offs, honestly

          facts: it fails on any [AllowAnonymous] outside an explicit allow-list, on a stale allow-list entry, on an empty scan, on an endpoint that declares neither [Authorize] nor [AllowAnonymous] (a stricter gate each suite opts into, which the framework turns on for itself), and on a stale entry in - that second, undecorated allow-list. The framework's own allow-list holds 18 entries: ten + that second, undecorated allow-list. The framework's own allow-list holds 19 entries: ten credential-exchange actions that cannot require a token because issuing one is what they do (login, register, refresh, the OAuth exchange, the three provider challenges and the provider callback, - forgot-password and reset-password), the five credential pages, and three landing and outcome pages - that render nothing depending on the caller. NetArchTest's fluent API cannot express this pair, which is why + forgot-password and reset-password), six credential pages (the email-confirmation landing among + them), and three landing and outcome pages that render nothing depending on the caller. NetArchTest's + fluent API cannot express this pair, which is why the rules live as full-name reflection and options-resolution tests instead. Two residuals stay honest. Minimal-API endpoints opt out through an .AllowAnonymous() builder call, which is endpoint metadata rather than an attribute, so the JWKS and OIDC discovery endpoints themselves sit outside the scan's reach. And the anonymous-endpoint scan is only as complete as the suites that subclass it: each consuming repo owns its own allow-list. The framework's thesis is that a rule that matters - should fail the build, and these rules do.
        • + should fail the build, and these rules do.

          +

        None of these are reasons to share a symmetric secret across services. They are the reasons to wire the asymmetric boundary deliberately.

        @@ -312,8 +345,9 @@

        Apply this even without MMCA

        issuer keeps the private key; everyone else gets the public key. A validator should never hold a key that can also forge.
      18. Publish the public key as a JWKS document at /.well-known/jwks.json and let the standard - JwtBearer discovery fetch and refresh it. Route discovery through your gateway so topology changes - do not ripple into every consumer's config.
      19. + JwtBearer discovery fetch and refresh it. Give each validator one authority value owned by the + deployment wiring (a gateway origin or the issuer's internal address), so a topology change is a + config edit rather than a key redistribution.
      20. Pin the algorithm on the validator. Set the allowed algorithms explicitly and re-check the token's alg against your expectation. Never let the token's own header choose the verification method, or you have shipped the algorithm-confusion attack.
      21. @@ -326,16 +360,17 @@

        Apply this even without MMCA


        What we covered: why a shared symmetric secret turns one leak into a system-wide forgery, how RS256 + a published JWKS document lets extracted services validate against the issuer's public keys - with no secret of their own, how ADR-004's dual-fetch (discover the key, fall back to an empty set) - and gateway-routed discovery keep the boundary stable, and why algorithm pinning closes the key- - substitution attack that publishing a public key would otherwise open.

        + with no secret of their own, how discovery (gateway-routed under the local AppHost, direct to + Identity's internal ingress when deployed) and the empty-key-set fallback keep the boundary stable, + why algorithm pinning closes the key-substitution attack that publishing a public key would otherwise + open, and how ADR-122 makes every dev-only relaxation fail closed when the environment is unknown.

        Next in the series: password hashing done right: PBKDF2-SHA512, 600k iterations, and timing-safe comparison, the credential-at-rest half of the same security story.

        MMCA.Common is Apache-2.0 licensed and open source. Star the repo, read the 2-minute ADR-004 behind this pattern, or dotnet add package MMCA.Common.API and try it.

        Tags: .NET, C Sharp, Software Architecture, Microservices, Authentication

        @@ -353,7 +388,7 @@

        Apply this even without MMCA

        • Why it matters
        • The MMCA answer: publish the public half as a JWKS document
        • -
        • The dual-fetch, and the graceful empty set
        • +
        • Discovery, and the graceful empty set
        • JWT algorithm pinning: the attack you would otherwise ship
        • Trade-offs, honestly
        • Apply this even without MMCA
        • diff --git a/articles/jwt-refresh-token-rotation.html b/articles/jwt-refresh-token-rotation.html index 5e8089e3..fca85cbf 100644 --- a/articles/jwt-refresh-token-rotation.html +++ b/articles/jwt-refresh-token-rotation.html @@ -192,144 +192,198 @@

          Why it matters

          That is what rotation plus reuse detection buys, and MMCA.Common decides it once so every consuming Identity module inherits the same answer instead of re-litigating it per app.

          The MMCA answer: one hashed session per device, rotated on every use

          -

          The whole workflow lives in one place: AuthenticationServiceBase<TUser> - (AuthenticationServiceBase.cs:74). Both apps' Identity modules subclass it and change nothing about the - token logic. Here is the model, piece by piece.

          +

          The workflow is split in two, and the split is the first design decision. AuthenticationServiceBase<TUser> + (AuthenticationServiceBase.cs:63) decides who is signed in: credentials, lockout, the app's gates. + IAuthSessionIssuer (IAuthSessionIssuer.cs:26) decides what they are handed: the multi-device refresh + sessions, rotation, reuse detection, the per-user cap and the session claims on the access token, "so this + workflow never touches a session row" (AuthenticationServiceBase.cs:40-43). The framework's implementation + is the sealed AuthSessionIssuer (AuthSessionIssuer.cs:39), registered scoped by AddInfrastructure + (MMCA.Common.Infrastructure/DependencyInjection.cs:176). Both apps' Identity modules subclass the base, + hand it the issuer, and change nothing about the token logic. Here is the model, piece by piece.

          The access token is stateless; the refresh side is one row per signed-in device. The access token is a signed JWT whose exp comes from JwtSettings.AccessTokenExpirationMinutes (default 15 minutes, - JwtSettings.cs:61), written by TokenService.GenerateAccessToken (TokenService.cs:91, expiry stamped at - :138). The refresh side is RefreshSession, a flat framework record with one row per signed-in device - (RefreshSession.cs:31): the user id, a token hash, an issue instant, an expiry, and revocation - bookkeeping (:61,64,67,70,73,79,82). Refresh tokens are deliberately absent from the credential contract + JwtSettings.cs:61), written by TokenService.GenerateAccessToken (TokenService.cs:101, expiry stamped at + :148). The refresh side is RefreshSession, a sealed framework record with one row per signed-in device + (RefreshSession.cs:39): the user id, a token hash, an issue instant, an expiry, and revocation + bookkeeping (:69,72,75,78,81,87,90). Refresh tokens are deliberately absent from the credential contract the user aggregate exposes to the workflow: IAuthUser carries password material only (IAuthUser.cs:9-14,20,23). A user holds as many live sessions as they have signed-in devices, bounded by a - per-user cap (AuthenticationServiceBase.cs:41-51).

          + per-user cap (AuthSessionIssuer.cs:17-26). Every access token the issuer mints names the session behind it + in a sid claim, stamped by a pass-through token service that wraps the real one + (SessionStampingTokenService, AuthSessionIssuer.cs:474, claim added at :506-511), so the app's claim + code never has to know the claim exists.

          The stored value is a digest, not the token. TokenService.GenerateRefreshToken draws 64 bytes from - RandomNumberGenerator.GetBytes and base64-encodes them (TokenService.cs:145,147,148). That plaintext + RandomNumberGenerator.GetBytes and base64-encodes them (TokenService.cs:155,157,158). That plaintext lives only in the response that hands it to the client. What the store keeps is RefreshSession.TokenHash, - an unsalted hex SHA-256 digest of the token's UTF-8 bytes (RefreshSession.cs:63,160-163), exactly 64 - characters wide (:33,34). The digest is deterministic on purpose, because lookup is by hash: a presented + an unsalted hex SHA-256 digest of the token's UTF-8 bytes (RefreshSession.cs:72,173-177), exactly 64 + characters wide (:41-42). The digest is deterministic on purpose, because lookup is by hash: a presented token finds its row through FindByTokenHashAsync(RefreshSession.HashToken(token)) - (AuthenticationServiceBase.cs:734-736). A database read therefore yields digests, and a digest is not - something you can present.

          -

          Issuing opens a session; refreshing rotates one. Login (AuthenticationServiceBase.cs:245) and - registration (:330) both route through IssueTokensAsync (:554), which opens a fresh session (:566, - body OpenSessionAsync at :762), saves it (:572), and returns the token pair (:574-577). Refresh runs - its own path. RefreshTokenAsync (:334) resolves the presented token to its session - (ResolveRotatableSessionAsync, called at :379, body :723) and then rotates it (RotateAsync, called - at :387, body :801). Rotation mints a successor session (:809-816) and claims the presented row - through IRefreshSessionStore.TryRotateAsync (:824-826), which revokes it and links it to that successor - via ReplacedByTokenHash (RefreshSession.cs:46,79,174-186). The consequence is the important part: the - instant a successor is issued, the token that bought it is spent, and the revoked row it leaves behind is - precisely what makes a replay visible. There is no grace period.

          + (AuthSessionIssuer.cs:286-288). A database read therefore yields digests, and a digest is not something + you can present.

          +

          Issuing opens a session; refreshing rotates one. Login (AuthenticationServiceBase.cs:105, issuing at + :194) and registration (:203, issuing at :279) both route through IssueTokensAsync (:417), which + hands the user to IAuthSessionIssuer.IssueAsync (:425). The issuer opens a fresh session + (AuthSessionIssuer.cs:75, body OpenSessionAsync at :322) before the access token is minted, because + the token carries the session's id, then saves it (:81) and returns the token pair (:83-86). Refresh runs + its own path. RefreshTokenAsync (AuthenticationServiceBase.cs:283) calls RotateAsync + (:337; AuthSessionIssuer.cs:90), which resolves the presented token to its session + (ResolveRotatableSessionAsync, called at :101, body :275) and then rotates it (RotateSessionAsync, + called at :109, body :361). Rotation mints a successor session (:369-376) and claims the presented row + through IRefreshSessionStore.TryRotateAsync (:384-386), which revokes it with reason Rotated and links + it to that successor via ReplacedByTokenHash (EFRefreshSessionStore.cs:125-130; RefreshSession.cs:54,87). + The successor is a new row with a new id, so the access token handed back carries a new sid too + (AuthSessionIssuer.cs:116-122). The consequence is the important part: the instant a successor is issued, + the token that bought it is spent, and the rotated row it leaves behind is precisely what makes a replay + visible. There is no grace period.

          Refresh binds to the same principal through the expired access token. RefreshTokenAsync requires the client to present the just-expired access token alongside the refresh token, and runs it through - TokenService.GetPrincipalFromExpiredToken (AuthenticationServiceBase.cs:348). That method validates + TokenService.GetPrincipalFromExpiredToken (AuthenticationServiceBase.cs:297). That method validates issuer, audience, signing key, and the pinned algorithm, and skips only the lifetime check - (TokenService.cs:164,168,169,170,172,177, with the algorithm re-checked against the header at :187). An - unsigned, wrong-audience, or algorithm-swapped token yields no principal and the refresh fails - (AuthenticationServiceBase.cs:349-353). The user id rides the standard sub claim - (TokenService.cs:100-106), read at AuthenticationServiceBase.cs:358 and used to load the account at - :365.

          -

          Three rejections, deliberately different behind one error. ResolveRotatableSessionAsync (:723) is - the reuse-detection step, and it separates three cases the caller cannot tell apart. An unknown hash, or one - belonging to another account, says nothing about a live session and fails alone (:738-741): revoking the - family on it would let anyone holding one of this user's expired access tokens sign them out everywhere by - posting a random string. A revoked row means this exact token was already rotated away or signed out and - has come back, which is the BR-206 reuse signal, so every live session the user holds is revoked with reason - ReuseDetected (:743-750, RefreshSession.cs:52). An expired row is an ordinary end of life, so that - device re-authenticates and the user's other devices keep working (:752-754). All three answer with the - same Auth.InvalidRefreshToken error (:883,884), so the distinction lives in what happens behind it, not - in what the caller learns.

          + (TokenService.cs:174,178,179,180,182,187, with the algorithm re-checked against the header at :196-197). + An unsigned, wrong-audience, or algorithm-swapped token yields no principal and the refresh fails + (AuthenticationServiceBase.cs:298-302). The user id rides the standard sub claim + (TokenService.cs:110-116), read at AuthenticationServiceBase.cs:307 and used to load the account at + :314. A second factor the user already verified rides across the rotation too: the mfa claim is read off + the signature-validated presented token and stamped on the successor (:327-332).

          +

          One error, four different consequences. ResolveRotatableSessionAsync (AuthSessionIssuer.cs:275) is + the reuse-detection step, and it separates cases the caller cannot tell apart. A blank token, an unknown + hash, or one belonging to another account says nothing about a live session and fails alone (:281-284, + :290-293): revoking the family on it would let anyone holding one of this user's expired access tokens sign + them out everywhere by posting a random string. A revoked row splits by why it died (IsReuseSignal, + :409-417). A row that was rotated away (it carries a successor hash) or already flagged as reuse has come + back, which is the BR-206 reuse signal, so every live session the user holds is revoked with reason + ReuseDetected (:305-309, RefreshSession.cs:60). A row that was signed out or evicted by the session cap + only lost its session, which is not a theft signal, so that request fails alone and the user's other devices + keep working (:297-303). Any other or missing reason counts as reuse, the conservative answer for a row the + code does not recognize (:403-407,416). An expired row is an ordinary end of life, so that device + re-authenticates and the rest are untouched (:312-314). Every branch answers with the same + Auth.InvalidRefreshToken error (:257-261), so the distinction lives in what happens behind it, not in + what the caller learns.

          A simultaneous replay gets the replay answer. Two requests presenting the same still-live token both - read an un-revoked row, so the store arbitrates rather than memory: TryRotateAsync decides which request - owns the rotation, and the one that loses the claim is treated exactly as a replay, whole live family - revoked (:824-838). A caller cannot distinguish the two situations, and neither does the workflow.

          + read an un-revoked row, so the store arbitrates rather than memory: TryRotateAsync is a conditional + update on RevokedAt IS NULL (EFRefreshSessionStore.cs:125), and the request that loses the claim is + treated exactly as a replay, whole live family revoked (AuthSessionIssuer.cs:388-398). A caller cannot + distinguish the two situations, and neither does the workflow.

          The expiry slides on every rotation. Every session is stamped with its issue instant plus - RefreshTokenLifetime, both when one is opened (:774) and when a successor is minted (:814). That - property reads TokenService.RefreshTokenLifetime (TokenService.cs:155), derived from + RefreshTokenLifetime, both when one is opened (AuthSessionIssuer.cs:334) and when a successor is minted + (:374). That property reads TokenService.RefreshTokenLifetime (TokenService.cs:165), derived from JwtSettings.RefreshTokenExpirationDays (JwtSettings.cs:64, default 7 days). A device that refreshes at least once inside each window stays signed in indefinitely; re-authentication is required only after a full lifetime passes with no successful refresh, or after a revocation. If the configured value is non-positive, - the base falls back to the seven-day BR-205 default rather than failing startup - (AuthenticationServiceBase.cs:145,146; interface default ITokenService.cs:40).

          -

          A per-user cap bounds the family. MaxActiveSessionsPerUser reads - RefreshSessions:MaxActiveSessionsPerUser, default 10, validated to the range 1-1000 at startup - (:148-153). Opening one session past the cap revokes the user's oldest live session with reason - SessionCapExceeded rather than refusing the sign-in (EnforceSessionCapAsync at :864, eviction loop - :873-876, reason constant RefreshSession.cs:55). Expired-but-unrevoked rows authenticate nobody and do - not count against the cap; they age out with the framework's retention sweep, - RefreshSessionCleanupService over the RefreshSessions:RetentionDays window (:857-862).

          -

          Explicit revocation names one device or takes them all. RevokeTokenAsync (:416) accepts an optional - refresh token. A live session belonging to that user is revoked alone with reason SignedOut, which is the - sign-out-this-device path (:431-447). Anything else (an unknown token, another account's token, an - already-revoked row) leaves the caller unidentifiable, so the request degrades to revoking every live - session the user holds rather than reporting success for a revocation that reached nothing (:450).

          -
          // ResolveRotatableSessionAsync: three rejections, one error (shape, not byte-for-byte).
          -var session = await refreshSessions.FindByTokenHashAsync(RefreshSession.HashToken(refreshToken), ct);
          +          the issuer falls back to the seven-day BR-205 default (and to fifteen minutes for the access token) rather
          +          than failing startup (AuthSessionIssuer.cs:55-59; interface default ITokenService.cs:40).

          +

          A per-user cap bounds the family. RefreshSessionSettings.MaxActiveSessionsPerUser binds + RefreshSessions:MaxActiveSessionsPerUser, default 10, range 1-1000 (RefreshSessionSettings.cs:34-35), + validated at startup (MMCA.Common.Infrastructure/DependencyInjection.cs:168-171). Opening one session past + the cap revokes the user's oldest live session with reason SessionCapExceeded rather than refusing the + sign-in (EnforceSessionCapAsync at AuthSessionIssuer.cs:442, eviction loop :451-454, constant + ReasonSessionCap at RefreshSession.cs:63). Expired-but-unrevoked rows authenticate nobody and do not + count against the cap; they age out with the framework's retention sweep, RefreshSessionCleanupService + over the RefreshSessions:RetentionDays window (default 30, RefreshSessionSettings.cs:71-72), which the + host runs once RefreshSessions:Enabled is set (DependencyInjection.cs:181-184).

          +

          Explicit revocation names one device or takes them all. RevokeTokenAsync + (AuthenticationServiceBase.cs:352) hands an optional refresh token to SignOutAsync + (AuthSessionIssuer.cs:148). A live session belonging to that user is revoked alone with reason + SignedOut, which is the sign-out-this-device path (:162-169). Anything else (an unknown token, another + account's token, an already-revoked row) leaves the caller unidentifiable, so the request degrades to + revoking every live session the user holds rather than reporting success for a revocation that reached + nothing (:172). Beside it sit a deliberate sign-out-everywhere (RevokeAllSessionsAsync, + AuthenticationServiceBase.cs:369, into SignOutEverywhereAsync, AuthSessionIssuer.cs:177), a device list + (GetSessionsAsync :386, ListActiveAsync :191), and a revoke-by-session-id (RevokeSessionByIdAsync + :402, RevokeSessionAsync :227) whose ownership check is the store query itself, so another account's + session id and one that never existed both answer NotFound (:232-240).

          +
          // AuthSessionIssuer.ResolveRotatableSessionAsync: one error, four consequences (shape, not byte-for-byte).
          +if (string.IsNullOrWhiteSpace(refreshToken))
          +{
          +    return Failure(InvalidRefreshTokenError());
          +}
           
          +var session = await refreshSessions.FindByTokenHashAsync(RefreshSession.HashToken(refreshToken), ct);
           if (session is null || !session.UserId.Equals(userId))
           {
          -    return Failure(InvalidRefreshTokenError());   // says nothing about a live session: fail alone
          +    return Failure(InvalidRefreshTokenError());     // says nothing about a live session: fail alone
           }
           
          -if (session.IsRevoked)                            // this exact token was already spent, and came back
          +if (session.IsRevoked)
           {
          +    if (!IsReuseSignal(session))
          +    {
          +        return Failure(InvalidRefreshTokenError()); // signed out or cap-evicted: this device alone
          +    }
          +
               await RevokeLiveSessionsAsync(userId, RefreshSession.ReasonReuseDetected, now, ct);
          -    await refreshSessions.SaveChangesAsync(ct);   // BR-206: the whole live family goes
          +    await refreshSessions.SaveChangesAsync(ct);     // BR-206: a rotated-away token came back
               return Failure(InvalidRefreshTokenError());
           }
           
          -return session.ExpiresAt <= now                   // an ordinary end of life: this device alone
          +return session.ExpiresAt <= now                     // an ordinary end of life: this device alone
               ? Failure(InvalidRefreshTokenError())
               : Success(session);
           
          -// RotateAsync: the store, not memory, decides which request owns the rotation.
          -var successor = RefreshSession.Create(userId, tokenService.GenerateRefreshToken(), now, now.Add(RefreshTokenLifetime));
          +// IsReuseSignal: rotated (a successor hash), or any reason other than SignedOut / SessionCapExceeded.
          +static bool IsReuseSignal(RefreshSession s) =>
          +    s.ReplacedByTokenHash is not null
          +    || s.ReasonRevoked is not (RefreshSession.ReasonSignedOut or RefreshSession.ReasonSessionCap);
          +
          +// RotateSessionAsync: the store, not memory, decides which request owns the rotation.
          +var refreshToken = tokenService.GenerateRefreshToken();
          +var successor = RefreshSession.Create(userId, refreshToken, now, now.Add(RefreshTokenLifetime), ipAddress, userAgent);
           if (!await refreshSessions.TryRotateAsync(session, successor.Value!, now, ct))
           {
               await RevokeLiveSessionsAsync(userId, RefreshSession.ReasonReuseDetected, now, ct);
          -    return Failure(InvalidRefreshTokenError());   // lost the claim: answered exactly like a replay
          +    await refreshSessions.SaveChangesAsync(ct);
          +    return Failure(InvalidRefreshTokenError());     // lost the claim: answered exactly like a replay
           }

          Both apps inherit it; the OAuth path opens the same session

          The rotation, reuse detection, session cap, and lifetime logic are identical in ADC and Store because - neither one owns a copy. ADC's AuthenticationService (AuthenticationService.cs:46) and Store's - (AuthenticationService.cs:22) each take ITokenService and IRefreshSessionStore (ADC :54, Store - :29) and forward them into the base constructor (ADC :56-64, Store :31-39) along with the - refresh-session options carried on an app settings object. What the subclasses supply is app-specific hooks: - the claim set (ADC's speaker_id, Store's customer_id), the deactivated-account gates, the registration - side effect. The security-relevant token workflow is not in either subclass.

          + neither one owns a copy. ADC's AuthenticationService (AuthenticationService.cs:50) and Store's + (AuthenticationService.cs:26) each take an IAuthSessionIssuer (ADC :56, Store :31) and forward it into + the base constructor (ADC :58, Store :33); the token lifetimes and the cap are configuration (the Jwt + and RefreshSessions sections), not constructor arguments (ADC :44-47). What the subclasses supply is + app-specific hooks: the claim set (ADC's speaker_id, Store's customer_id), the deactivated-account + gates, the registration side effect. They mint through the base's TokenService property, which is the + issuer's sid-stamping wrapper (AuthenticationServiceBase.cs:98). The security-relevant token workflow is + not in either subclass.

          That single-source property is what makes ADC's external OAuth login (ADR-036) fall in line for free. The - external-login body (AuthenticationService.cs:205) ends by calling the shared IssueTokensAsync (:304), - so a federated sign-in opens a refresh session through exactly the path a password sign-in takes: hashed at - rest, counted against the same per-user cap, rotated through the same chain. A user who signed in with - Google gets the same guarantees as one who typed a password, because both go through the same base method.

          + external-login body (ExternalLoginCoreAsync, ADC AuthenticationService.cs:204) ends by calling the shared + IssueTokensAsync (:316), so a federated sign-in opens a refresh session through exactly the path a + password sign-in takes: hashed at rest, counted against the same per-user cap, rotated through the same + chain. A user who signed in with Google gets the same guarantees as one who typed a password, because both + go through the same issuer.

          Trade-offs, honestly

          This model is a deliberate set of choices, and ADR-097 names the edges rather than hiding them.

          • Every device is its own row, so sign-ins grow a table. A session is a device fact rather than an - account fact, which is the point: signing in on a phone leaves the laptop signed in - (AuthenticationServiceBase.cs:41-43). The cost is unbounded growth without two guards, and both are - there: a per-user cap that evicts the oldest live session (:864,873-876) and a retention sweep that ages - the table out (:857-862). A revoked row is kept rather than deleted, because it is the evidence the - reuse check reads.
          • + account fact, which is the point: signing in on a second device leaves the first signed in + (AuthSessionIssuer.cs:17-18). The cost is unbounded growth without two guards, and both are there: a + per-user cap that evicts the oldest live session (:442,451-454) and a retention sweep that hard-deletes + dead rows after RetentionDays (RefreshSessionSettings.cs:54-58). A revoked row survives that window + because it is the evidence the reuse check reads; once it is swept, the same replay reads as an unknown + token and fails alone. The thirty-day default sits well past the seven-day token lifetime, so a token still + capable of being replayed always has its row, and lowering the window below that lifetime gives the + guarantee up (:60-66).
          • Reuse detection is aggressive by design. Two browser tabs refreshing at the same instant present the same still-live token, one of them loses the TryRotateAsync claim, and the loser is answered as a replay - with the family revoked (:824-838). A benign race is indistinguishable from theft, so failing closed is - chosen over a convenient short reuse-grace window.
          • + with the family revoked (AuthSessionIssuer.cs:388-398). A benign race is indistinguishable from theft, so + failing closed is chosen over a convenient short reuse-grace window. +
          • Only a rotated token is evidence. A token from a device that was signed out or cap-evicted fails alone + (:297-303), so an ordinary sign-out never ends the user's other sessions. The flip side is that a thief + replaying a token whose device was already signed out triggers nothing beyond that one rejection; the + family-wide response is reserved for the case that proves two parties held the same lineage.
          • The refresh path is server-side write state. Unlike the fully stateless access token, every issue - inserts a row and every refresh revokes one and inserts its successor (:762-787, :801-841), so refresh - always costs a write to the Identity database. That is the price of being able to revoke.
          • + inserts a row and every refresh revokes one and inserts its successor (OpenSessionAsync :322-348, + RotateSessionAsync :361-401), so refresh always costs a write to the Identity database. That is the + price of being able to revoke.
          • No absolute cap anchored to the opening login. Because the expiry is re-stamped on every rotation - (:814), the seven-day window bounds inactivity, not total session age, and a continuously active client + (:374), the seven-day window bounds inactivity, not total session age, and a continuously active client stays signed in indefinitely. The per-user cap bounds how many devices, and the retention sweep bounds how long a dead row lingers, but neither ends a chain that keeps refreshing. An absolute cap on session age is deliberately not imposed.
          • A non-positive configured lifetime falls back silently. A zero or negative RefreshTokenExpirationDays (or a test double reporting TimeSpan.Zero via the interface default, ITokenService.cs:40) is treated as absent and reverts to the seven-day baseline rather than failing startup - (AuthenticationServiceBase.cs:145,146). A misconfiguration quietly reverts to the default instead of - surfacing an error.
          • + (AuthSessionIssuer.cs:58-59). A misconfiguration quietly reverts to the default instead of surfacing an + error.

          None of these are reasons to skip rotation. They are the reasons to wire it knowing what it does and does not promise.

          @@ -340,7 +394,7 @@

          Apply this even without MMCA

          a lifetime measured in minutes so the un-revocable window stays small.
        • Give each device its own server-side session row, and rotate it on every refresh. One row per sign-in, revoked and replaced the moment it is used, with the successor's identity recorded on the row it - replaced. The revoked row is not garbage: it is the detector.
        • + replaced. The revoked row is not garbage: it is the detector, so keep it longer than the token could live.
        • Store a digest, never the token. Make the refresh token opaque random bytes (sixty-four is plenty), hand the plaintext to the client once, and keep only an unsalted hash so the lookup stays a single indexed read and a database dump mints nothing.
        • @@ -348,20 +402,21 @@

          Apply this even without MMCA

          the expired token while skipping only the lifetime check, and re-verify issuer, audience, key, and algorithm so the token cannot tell you how to trust it.
        • Split your rejections behind one error message. An unknown token fails alone, an expired session fails - alone, and a revoked session revokes the user's whole live family. Returning one indistinguishable error - for all three keeps the detector from doubling as an oracle.
        • + alone, a signed-out session fails alone, and a rotated-away session that comes back revokes the user's + whole live family. Record why each row was revoked so the detector can tell those apart, and return one + indistinguishable error for all of them so the detector does not double as an oracle.

      The takeaway: a refresh token you rotate on every use, store only as a hash, and answer with a family-wide - revoke the instant a spent one reappears, turns a long-lived stealable secret into a session that ends + revoke the instant a rotated-away one reappears, turns a long-lived stealable secret into a session that ends itself. The stateless access token stays fast; the write on refresh is what buys you the ability to revoke one device or all of them.


      What we covered: why a stateless access token forces a refresh token and a refresh token forces a theft - story, how MMCA.Common keeps one hashed RefreshSession row per signed-in device and rotates it through a - store-arbitrated claim, how a revoked row is the reuse signal that revokes a user's whole live family while - an expired one fails alone, and the honest trade-offs (a growing table, aggressive reuse detection, a - server-side write per refresh, no absolute session-age cap, a silent lifetime fallback) that come with - choosing to fail closed.

      + story, how MMCA.Common splits who-is-signed-in from what-they-are-handed and keeps one hashed + RefreshSession row per signed-in device, rotated through a store-arbitrated claim, how a rotated-away row + is the reuse signal that revokes a user's whole live family while a signed-out, cap-evicted or expired one + fails alone, and the honest trade-offs (a growing table, aggressive reuse detection, a server-side write per + refresh, no absolute session-age cap, a silent lifetime fallback) that come with choosing to fail closed.

      Next in the series: the write-once REST surface every entity inherits: generic entity controllers that give a new aggregate its full CRUD API without a hand-written controller per type.

      MMCA.Common is Apache-2.0 licensed and open source. Star the repo, read the 2-minute ADR-097 behind this diff --git a/articles/kill-anemic-domain-model.html b/articles/kill-anemic-domain-model.html index f6494c50..c873661c 100644 --- a/articles/kill-anemic-domain-model.html +++ b/articles/kill-anemic-domain-model.html @@ -219,7 +219,7 @@

      The MMCA once, never reassigned, on both the application path and the persistence path.

      AuditableBaseEntity<TId> adds the cross-cutting facts every persisted row needs. Soft-delete (IsDeleted, plus a Delete() / Undelete() pair that return Result and refuse to double-delete), - audit fields (CreatedOn/By, LastModifiedOn/By) with private setters, and a RowVersion + audit fields (CreatedOn/By, LastModifiedOn/By, DeletedOn/By) with private setters, and a RowVersion optimistic-concurrency token. The domain never writes the audit fields; they are stamped centrally by the AuditSaveChangesInterceptor that EF Core runs inside SaveChangesAsync. Three concerns that would otherwise be copy-pasted into every entity are inherited once and enforced in one place.

      @@ -292,7 +292,8 @@

      Value objects: the same tri inside MMCA.Common: AddressValidationRules reads them for FluentValidation, and the OwnsAddress mapping extension reads the same six constants for HasMaxLength on the owned Address columns, so a consuming app (Store's CustomerConfiguration) gets the field-length rule from one source of truth - through a single builder.OwnsAddress(p => p.Address); call. EmailInvariants.MaxLength does not get + through a single builder.OwnsAddress(p => p.Address); call (a second OwnsOne there overrides only + the unicode facet, never a length). EmailInvariants.MaxLength does not get the same treatment: each consumer declares its own, separate email length limit instead (Store's CustomerInvariants.EmailMaxLength is 100, ADC's UserInvariants.EmailMaxLength is 100, and ADC's SpeakerInvariants.EmailMaxLength aliases the 255 its own DTO declares), none derived from the 256 @@ -301,8 +302,9 @@

      Identifier aliases: t

      There is one more piece that is easy to miss but does heavy lifting against bugs. Look back at the factory signature: Create(CustomerIdentifierType customerId, Money total), not Create(int customerId, decimal total).

      -

      MMCA.Common defines per-entity identifier aliases, for example a solution-wide - global using UserIdentifierType = int; linked into every project via Directory.Build.props. The +

      MMCA.Common defines per-entity identifier aliases, for example + global using UserIdentifierType = int;, declared once in MMCA.Common.Domain and linked into every + other MMCA.Common.* project via Directory.Build.props. The underlying type is still int, but the name carries meaning. A method that takes a UserIdentifierType and an OrderIdentifierType reads unambiguously at every call site, the way two bare ints never do. The id is also strongly named at the entity level (BaseEntity<TId> is generic @@ -356,6 +358,32 @@

      Soft-delete, not destruction

      hides the row; the data and its foreign-key relationships stay intact. Delete() returns Result and guards against double-deletion (returning Error.AlreadyDeleted), so even "remove this" flows through the same error railway as everything else.

      +

      One contract, and which half the build holds

      +

      Everything above is one tactical contract, recorded as ADR-129, and that record is explicit about a + split: part of the contract is a fitness test, and part is a convention that holds because each new + entity copies the nearest one.

      +

      The test half is EntityConventionTestsBase, a shared base in MMCA.Common.Testing.Architecture with + eight facts. Construction: the Domain layer must expose at least one aggregate root (so a broken + filter fails instead of checking nothing), every root needs a public static Create returning + Result<TSelf> and no public instance constructor, and any concrete Domain or Shared type that + exposes a Create must return Result<T> from it. Encapsulation: every concrete module-domain + entity is sealed, and none of its public instance properties has a public setter (init and + non-public setters pass; navigation properties are included, so a child collection is replaced + through a SetXxx method). Placement: no entity sits in an Application or Infrastructure + assembly, no DTO or request type sits in Domain, and no DTO sits in Infrastructure. MMCA.ADC, + MMCA.Store and MMCA.Helpdesk each subclass the base unchanged and supply only their architecture map. + MMCA.Common runs the smaller AggregateConventionTestsBase instead: it has no business modules, so + the module-scoped rules would check nothing there.

      +

      The convention half is the rest. GetChildOrNotFound, SetItems and the remove, restore and + cascade-delete helpers are protected members of AuditableAggregateRootEntity, and no fitness rule + requires an aggregate to use them. Result.Combine is a framework member too: its arguments are + evaluated before the call, so every invariant runs and the one failure it returns carries every error. + Whether an aggregate composes its invariants that way is convention; the single gated piece is a + naming rule, separate from the entity base, that a class named *Invariants must be static. + Helpdesk's Ticket is the reference shape: sealed over the aggregate base, a private constructor, + Create returning Result<Ticket>, TicketInvariants composed through Result.Combine, and a + comment found through GetChildOrNotFound. The practical reading: an aggregate that reaches into its + child list directly, or validates inline, still builds. Review and the nearest example hold that half.

      Trade-offs, honestly

      Rich aggregates are the right default, but they are not free, and the scorecard's §4 review names the gaps:

      @@ -373,7 +401,8 @@

      Trade-offs, honestly

      "private constructor plus a Create factory" is an executable check, not a convention held by review. What no base class can give you is the strategic half of DDD: bounded contexts and a ubiquitous language are realized in the apps that build modules on these classes, not in the - framework itself, and the scorecard's §4 names that as the remaining gap. + framework itself, and the scorecard's §4 names that as one of its two open criteria (the other is + the tenant identifier, a plain string by deliberate decision rather than a strong type).
    17. Aggregate boundaries are a judgment call. Deciding what belongs inside a root and what is its own aggregate is genuine modeling work that no base class makes for you.
    18. @@ -396,8 +425,8 @@

      Apply this even without MMCA

      BaseEntity to AuditableBaseEntity to AuditableAggregateRootEntity hierarchy (identity, then audit/soft-delete, then domain events), the private-constructor-plus-Create-returning-Result idiom that makes invalidity unconstructable, value objects and identifier aliases against primitive - obsession (with the strongly typed identifier struct as the opt-in alternative), and domain events - raised on the aggregate root.

      + obsession (with the strongly typed identifier struct as the opt-in alternative), domain events + raised on the aggregate root, and which half of the entity contract the fitness tests enforce.

      Next in the series: specifications over LINQ spaghetti, the composable, reusable query intent that keeps read logic out of your controllers.

      MMCA.Common is Apache-2.0 licensed and open source. Star the repo, skim the domain building-blocks chapter, diff --git a/articles/managed-file-storage-avatars.html b/articles/managed-file-storage-avatars.html index fa3587a3..6ea624ca 100644 --- a/articles/managed-file-storage-avatars.html +++ b/articles/managed-file-storage-avatars.html @@ -196,37 +196,37 @@

      The re-encode is the boundary

      IImageProcessor (IImageProcessor.cs:11) has one method, NormalizeToSquareJpegAsync, and its implementation ImageSharpImageProcessor - (ImageSharpImageProcessor.cs:15) does something that looks like image resizing and is actually a - security control. It reads the header and refuses anything too big to decode, then decodes the upload, - bakes EXIF orientation into the pixels, center-crops to an exact square, strips every metadata profile, - and re-encodes as a fresh JPEG:

      + (ImageSharpImageProcessor.cs:16) does something that looks like image resizing and is actually a + security control. It reads the header and refuses anything too big to decode, then decodes only the first + frame of the upload, bakes EXIF orientation into the pixels, center-crops to an exact square, strips every + metadata profile, and re-encodes as a fresh JPEG:

      // ImageSharpImageProcessor.NormalizeToSquareJpegAsync (illustrative of shape)
       // Header only: Identify reads the declared dimensions without allocating a frame.
       var info = await Image.IdentifyAsync(content, cancellationToken);
      @@ -235,7 +235,9 @@ 

      The re-encode is the boundary

      return Result.Failure<byte[]>(Error.Validation("Image.TooLarge", ...)); } -using var image = await Image.LoadAsync(content, cancellationToken); +// One frame only: an animated file never expands into every frame's pixel buffer. +using var image = await Image.LoadAsync(new DecoderOptions { MaxFrames = 1 }, content, cancellationToken); +// ...then the same TooLargeToDecode check re-runs on the decoded frame. // AutoOrient BEFORE stripping metadata, or portrait phone photos come out rotated. image.Mutate(ctx => ctx @@ -248,26 +250,30 @@

      The re-encode is the boundary

      await image.SaveAsync(output, new JpegEncoder { Quality = 85 }, cancellationToken);

      The point is what does not survive. A full decode-then-re-encode means only the pixel grid crosses the - boundary. EXIF GPS is gone because the metadata profiles are nulled (ImageSharpImageProcessor.cs:84-86). + boundary. EXIF GPS is gone because the metadata profiles are nulled (ImageSharpImageProcessor.cs:88-90). The polyglot payload is gone because the bytes that carried it were never re-emitted: the output is a new JPEG the encoder wrote from a decoded bitmap. One operation kills both classes of problem, and it does so by construction rather than by a blocklist you have to keep updating.

      The header check in front of the decode is not a size nicety. The avatar contract's 2 MB cap bounds the compressed bytes, which a decompression bomb satisfies happily: a 2 MB PNG can declare 40000x40000 and - cost roughly 6 GB of frame buffer the moment it is decoded. So the processor bounds the decoded frame - instead, with MaxDecodedPixels at 50,000,000 (ImageSharpImageProcessor.cs:26) and - MaxDecodedDimension at 20,000 (:33); the edge ceiling sits beside the area one because a 1 x 200000 - strip is inside the area limit and still pathological for the resampler. Image.IdentifyAsync applies - both to the declared header before a single frame is allocated (:47), and the same predicate - (:111-114) re-applies them to the decoded frame (:66-72), so a header that under-reports its real + cost roughly 6 GB of frame buffer the moment it is decoded (ImageSharpImageProcessor.cs:23-24). So the + processor bounds the decoded frame instead, with MaxDecodedPixels at 50,000,000 (:27) and + MaxDecodedDimension at 20,000 (:34); the edge ceiling sits beside the area one because a 1 x 200000 + strip is inside the area limit and still pathological for the resampler (:30-32). Image.IdentifyAsync + applies both to the declared header before a single frame is allocated (:48), and the same predicate + (:115-118) re-applies them to the decoded frame (:70-76), so a header that under-reports its real size does not get through. Past either ceiling the upload is - Error.Validation("Image.TooLarge", ...) (:51-55): a clean 400 rather than the OutOfMemoryException the + Error.Validation("Image.TooLarge", ...) (:50-56): a clean 400 rather than the OutOfMemoryException the upload was built to provoke.

      +

      The frame count is bounded as well as the frame size. The decode passes + new DecoderOptions { MaxFrames = 1 } (ImageSharpImageProcessor.cs:66): the output is a single JPEG + built from the first frame, and decoding every frame of an animated file is how a small upload becomes + hundreds of megabytes of pixel buffers (:63-65).

      Undecodable content is a validation failure too, not an exception. The processor catches UnknownImageFormatException and InvalidImageContentException and returns - Error.Validation("Image.Undecodable", ...) (ImageSharpImageProcessor.cs:95-101), so a garbage upload + Error.Validation("Image.Undecodable", ...) (ImageSharpImageProcessor.cs:99-105), so a garbage upload is a clean 400, not a 500. And because the processor has no external configuration, it is always - registered as the real implementation (DependencyInjection.cs:746), unlike storage: there is no Null + registered as the real implementation (DependencyInjection.cs:336), unlike storage: there is no Null image processor, because there is no safe way to skip the re-encode.

      Ahead of the processor sits ImageContentSniffer (ImageContentSniffer.cs:10), a static, dependency-free magic-byte check. IsAllowedImage accepts a payload only when its leading bytes match a JPEG, PNG, or @@ -280,11 +286,12 @@

      The avatar contract

      one avatar per user; accept jpeg/png/webp up to 2 MB; the server re-encodes to a 256x256 JPEG via IImageProcessor, treating client-declared content types as advisory only. The blob name is {userId}-{random8}.jpg in the public-read avatars container, so the URL path reads - avatars/{userId}-{random8}.jpg. Uploading a new avatar deletes the previous blob. The URL lives on the - user entity as [Pii]: nulled on anonymize with the blob deleted, and included in the GDPR data export. - That last part is why this article carries a §30 (data privacy) tie alongside the §8 (data access) and - §11 (security) ones: the avatar is treated as personal data from the moment it lands to the moment it is - erased.

      + avatars/{userId}-{random8}.jpg. Replacing, removing or erasing an avatar schedules a durable + DeleteAvatarBlobInternalCommand (ADR-114) rather than deleting the blob inline. The URL lives on the + user entity as [Pii]: nulled on anonymize with the blob delete scheduled in the same transaction, and + included in the GDPR data export (045-managed-file-storage-and-avatars.md:41-48). That last part is why + this article carries a §30 (data privacy) tie alongside the §8 (data access) and §11 (security) ones: the + avatar is treated as personal data from the moment it lands to the moment it is erased.

      One capability, two client affordances

      On the client, the pick-a-photo gesture differs by host, and ADR-045 reuses the capability pattern from ADR-042. IMediaPickerService (IMediaPickerService.cs:9) exposes native photo pick and camera capture @@ -302,10 +309,15 @@

      Trade-offs, honestly

      URL can fetch the image. The random 8-character blob suffix prevents enumeration (you cannot walk from one avatar to the next), and the trade-off is accepted and documented in the consumer's privacy policy. This is a deliberate acceptance, not a gap. -
    19. CDN and browser caches can serve a stale avatar briefly. A replaced or deleted avatar deletes its - blob, but a cache may hold the old URL for a moment. Because the random suffix means a new upload never - reuses the old URL, staleness is bounded by cache TTLs and self-heals; there is no cache-busting dance to - get right.
    20. +
    21. CDN and browser caches can serve a stale avatar briefly. After a replace or a delete, a cache may + hold the old URL for a moment. Because the random suffix means a new upload never reuses the old URL, + staleness is bounded by cache TTLs and self-heals; there is no cache-busting dance to get right.
    22. +
    23. Avatar blob deletion is eventual, not synchronous. A replaced or deleted avatar has its blob + deleted at least once, through the internal-command processor and within its retry budget + (045-managed-file-storage-and-avatars.md:55-57). Only erasure schedules inside its own transaction; + replace and remove schedule after the save commits, so a host death in between, or a failed schedule, + leaves an orphaned blob that is only logged for manual removal (:127-132, + SetUserAvatarHandler.cs:162-165).
    24. DefaultAzureCredential needs a data-plane role, not a secret. In production the storage account requires a Storage Blob Data Contributor grant for the app identity. That is a bicep-level infrastructure grant, which is the correct place for it, but it does mean the app will not authenticate until the role @@ -317,16 +329,22 @@

      Trade-offs, honestly

      Be precise about status: the framework legs are implemented and shipped in MMCA.Common, and two MMCA.ADC services wire them end to end. The Identity service calls AddAzureBlobFileStorage(builder.Configuration) - at startup for avatars (MMCA.ADC.Identity.Service/Program.cs:243) and the Conference service calls it for - speaker session assets (MMCA.ADC.Conference.Service/Program.cs:338). On the Identity side, - SetUserAvatarHandler is the only handler that touches IFileStorageService inline; replacing an avatar, - removing one and deleting a user all schedule a durable DeleteAvatarBlobInternalCommand through - IInternalCommandScheduler (SetUserAvatarHandler.cs:127-128, RemoveUserAvatarHandler.cs:20,74-75, - DeleteUserHandler.cs:31,79), and the blob deletion itself runs in - DeleteAvatarBlobInternalCommandHandler (:21-24). The Profile page uploads through - IMediaPickerService (Profile.razor.cs:22). Each consumer still provisions its own storage account and - wires its own upload endpoints against these ports, so this is a capability the framework provides rather - than one that is live in every downstream app by default: MMCA.Store has not adopted it.

      + at startup for avatars (MMCA.ADC.Identity.Service/Program.cs:242) and the Conference service calls it for + speaker session assets (MMCA.ADC.Conference.Service/Program.cs:353). On the Identity side, + SetUserAvatarHandler is the only request-path handler that calls IFileStorageService, for the upload + itself (SetUserAvatarHandler.cs:117). Every avatar blob delete is a durable + DeleteAvatarBlobInternalCommand scheduled through IInternalCommandScheduler: the replaced blob once + the new URL is saved (SetUserAvatarHandler.cs:158-160), the freshly uploaded blob when the save fails + and leaves no row pointing at it (:78-88, :186-188), a removed avatar + (RemoveUserAvatarHandler.cs:20,74-75) and an erased user (DeleteUserHandler.cs:31,79). The deletion + runs in DeleteAvatarBlobInternalCommandHandler (DeleteAvatarBlobInternalCommandHandler.cs:17-23), + which only names the blob kind for its log lines and inherits the work from Common's + DeleteBlobInternalCommandHandlerBase (DeleteBlobInternalCommandHandlerBase.cs:28): the port call + (:45), with a NotFound answer completing the row as success (:53-57) so at-least-once execution + stays idempotent. The Profile page uploads through IMediaPickerService (Profile.razor.cs:22). Each + consumer still provisions its own storage account and wires its own upload endpoints against these ports, + so this is a capability the framework provides rather than one that is live in every downstream app by + default: MMCA.Store has not adopted it.

      Apply this even without MMCA

      The pattern ports to any stack and any blob store. The rules are short:

        @@ -338,7 +356,8 @@

        Apply this even without MMCA

      1. Auto-orient before you strip metadata, or portrait phone photos come out sideways once the EXIF orientation flag is gone.
      2. Bound the decoded frame, not just the uploaded bytes. Read the header, refuse the declared - dimensions that would not fit in memory, and re-check after the decode.
      3. + dimensions that would not fit in memory, decode only the one frame you keep, and re-check after the + decode.
      4. Put storage behind a port with an inert default. An unconfigured implementation that fails uploads with a clear message beats a host that half-works or crashes at first use.
      5. Treat the stored URL as PII. If it points at a user's face, it belongs in your erasure path and your @@ -353,10 +372,11 @@

        Apply this even without MMCA

        content-type confusion, polyglot payloads); how IFileStorageService gives an upload-by-blob-name boundary with an inert NullFileStorageService default that fails clearly and an AddAzureBlobFileStorage swap to the real Azure implementation; how the real security boundary is the full re-encode in ImageSharpImageProcessor - (header size check, decode, auto-orient, center-crop, strip all metadata, re-encode JPEG) fronted by - ImageContentSniffer's magic-byte check; the avatar contract (256x256 JPEG, 2 MB, random-suffixed public-read - blob, URL as [Pii]); and the honest trade-offs (public-read container, cache staleness, a data-plane role - grant, the Six Labors Split License).

        + (header size check, single-frame decode, auto-orient, center-crop, strip all metadata, re-encode JPEG) + fronted by ImageContentSniffer's magic-byte check; the avatar contract (256x256 JPEG, 2 MB, + random-suffixed public-read blob, URL as [Pii], blob deletes as durable internal commands); and the + honest trade-offs (public-read container, cache staleness, eventual blob deletion, a data-plane role grant, + the Six Labors Split License).

        Next in the series: HTTP API versioning, proven not just claimed, one header-based policy adopted by every service and kept honest by a shared fitness contract that runs two live versions.

        MMCA.Common is open source. Star the repo, read the 2-minute ADR behind this pattern, or dotnet add package MMCA.Common.Infrastructure and try it.

        diff --git a/articles/manual-dto-mapping.html b/articles/manual-dto-mapping.html index de952645..0f6f1cfa 100644 --- a/articles/manual-dto-mapping.html +++ b/articles/manual-dto-mapping.html @@ -161,11 +161,11 @@

        Delete AutoMapper: explicit, compile-time DTO mapping that you can actually test

        -

        Reflection-based mappers feel like they save you work until the day a renamed property silently maps to null in production. Here is the alternative: named mapper classes, generated at compile time, where a missing map is a build error and a bad request is a Result failure, not an exception.

        +

        Reflection-based mappers feel like they save you work until the day a renamed property silently maps to null in production. Here is the alternative: named mapper classes, generated at compile time, where a renamed property is a build error and a bad request is a Result failure, not an exception.


        Almost every .NET service has the same boring chore. A domain entity comes out of the database, and a Data Transfer Object has to go over the wire. They are almost the same shape, so reaching for AutoMapper feels obvious: register a profile, call Map<ProductDto>(product), and the property-name convention wires it up for you. Zero boilerplate. What is not to like?

        Here is what is not to like. Six months later somebody renames Product.Title to Product.Name, the DTO still has Title, and the convention quietly stops mapping it. No compiler error. No test failure unless you happened to assert that exact field. The API just starts returning title: null, and you find out from a support ticket. The mapping that "saved you work" was invisible coupling held together by string-matched property names, and it broke in the one place a type system normally protects you: a rename.

        -

        That failure mode is the reason MMCA.Common bans reflection-based AutoMapper outright. The decision is ADR-001: mapping is explicit, lives in named mapper classes, and is checked by the compiler, not discovered at runtime. This article walks through how that works, why the two mapper roles are split, and why "write the mapper yourself" is cheaper than it sounds once a source generator writes the body for you.

        +

        That failure mode is the reason MMCA.Common rejects reflection-based AutoMapper. The decision is ADR-001: mapping is explicit, lives in named mapper classes, and is checked by the compiler, not discovered at runtime. (The decision is a policy; its one mechanical guard is narrower: the architecture fitness rules list AutoMapper among the frameworks a Domain or Shared layer must never reference.) This article walks through how that works, why the two mapper roles are split, and why "write the mapper yourself" is cheaper than it sounds once a source generator writes the body for you.

        The case against convention-based mapping

        Be precise about what goes wrong with a reflection mapper, because "I prefer explicit code" is not an argument. Here are four concrete failure modes, all things a type system is supposed to catch:

          @@ -174,11 +174,11 @@

          The case against convention-b
        • Invisible coupling. The fact that Product.Name feeds ProductDto.Name exists nowhere you can read it. It is an emergent property of two class shapes and a runtime engine. Rename either side and the coupling breaks without telling you.
        • Hard to test and debug. A stack trace from a failed convention map points into the mapping framework's expression-tree machinery, not at a line of your code. Conditional mapping (redact this field for this role) fits awkwardly into a declarative profile, so it tends to leak back out into handlers anyway.
        -

        None of these are exotic. They are the ordinary tax of trading compile-time checking for runtime convenience. ADR-001 argues the same conclusion from the positive side: its rationale is five reasons to choose explicit mapping over a reflection convention, namely compile-time safety, testability, conditional logic, debuggability, and performance. Its verdict is that for the one operation you do on every single read and write path, that trade is backwards.

        +

        None of these are exotic. They are the ordinary tax of trading compile-time checking for runtime convenience. ADR-001 argues the same conclusion from the positive side: its rationale is five reasons to choose explicit mapping over a reflection convention, namely compile-time safety, testability, conditional logic, debuggability, and performance. The first of them names the exact failure above: a property rename breaks the build rather than silently mapping null.

        Two roles, two interfaces

        The first design move is to notice that "mapping" is actually two different jobs that deserve two different contracts. Reading data out and accepting data in are not symmetric, and the framework refuses to pretend they are.

        Outbound: IEntityDTOMapper<TEntity, TEntityDTO, TIdentifierType> is the read side. It maps a domain entity to the DTO that crosses the wire. It lives in MMCA.Common.Application (Interfaces/Mapping/IEntityDTOMapper.cs) and is triple-generic, constrained so the entity is an AuditableBaseEntity<TIdentifierType>, the DTO implements IBaseDTO<TIdentifierType>, and the identifier type is notnull. Those constraints force the entity and its DTO to agree on the identifier type at compile time, so you cannot accidentally pair a Guid-keyed entity with an int-keyed DTO.

        -

        It has exactly one required member, MapToDTO(entity). The batch version, MapToDTOs(collection), is a C# default interface method that just projects each item through MapToDTO with a collection expression. The default exists so that no mapper has to write the loop, and the honest reality is that none of them lean on it: all 35 concrete DTO mappers across the two consuming apps re-declare that identical one-line projection instead of inheriting it, which ADR-001 records outright in its own trade-offs. The contract still guarantees the batch shape is there for free; the part you actually have to think about is the single-item map.

        +

        It has exactly one required member, MapToDTO(entity). The batch version, MapToDTOs(collection), is a C# default interface method that just projects each item through MapToDTO with a collection expression. The default exists so that no mapper has to write the loop, and the honest reality is that none of them lean on it: all 35 concrete DTO mappers in MMCA.ADC and MMCA.Store (22 and 13) re-declare that identical one-line projection instead of inheriting it, which ADR-001 records outright in its own trade-offs, and the two DTO mappers in the MMCA.Helpdesk reference app do the same. The contract still guarantees the batch shape is there for free; the part you actually have to think about is the single-item map.

        Inbound: IEntityRequestMapper<TEntity, TCreateRequest, TIdentifierType> is the write side, and this is where the design earns its keep. It maps an incoming create request to a domain entity, but its signature is the interesting part:

        Task<Result<TEntity>> CreateEntityAsync(
             TCreateRequest request,
        @@ -191,18 +191,18 @@ 

        Why the request mapper returns

        This is the same Result-pattern discipline the rest of the framework runs on, applied at the exact boundary where untrusted input first becomes a domain object. The edge maps that Result to a 400 or 409 later; the mapper's job is just to produce the value, not to know about HTTP. A request mapper that returned a bare TEntity would have nowhere to put "this request was bad" except an exception, and exceptions are the thing the Result pattern exists to avoid for expected failures.

        Mapperly: explicit and fast, because a generator writes the body

        The AutoMapper crowd will raise one objection immediately: if you write every mapper by hand, you are back to typing dto.Name = entity.Name; forty times per entity, and that is its own kind of bug farm.

        -

        True, if you actually hand-type the assignments. MMCA.Common does not. It uses Riok.Mapperly (version 4.3.1), a source-generated, compile-time object mapper. You declare a partial mapper method; Mapperly generates the straight-line assignment code at build time. No runtime reflection, no expression-tree compilation, no per-call allocation of a mapping plan. The generated code is the same boring dto.Name = entity.Name; you would have written, except the compiler wrote it and will refuse to compile if the shapes do not line up.

        +

        True, if you actually hand-type the assignments. MMCA.Common does not. It uses Riok.Mapperly (version 4.3.1), a source-generated, compile-time object mapper. You declare a partial mapper method; Mapperly generates the straight-line assignment code at build time. No runtime reflection, no expression-tree compilation, no per-call construction of a mapping plan. The generated code is the same boring dto.Name = entity.Name; you would have written, except the compiler wrote it and the build fails when a DTO member has nothing to map from.

        This is the move that dissolves the usual "explicit versus convenient" dichotomy. Mapperly gives you both:

        • It is explicit, because the mapper is a named class you can open, read, and set a breakpoint in. The mapping exists as code, not as an emergent property of two type shapes.
        • -
        • It is compile-time checked, because an unmapped property or a type mismatch is a build error or a generator diagnostic, surfaced in the implementing class, not a runtime surprise.
        • -
        • It is fast and allocation-free, because there is no reflection at mapping time, just the generated assignments.
        • +
        • It is compile-time checked where the rename bites: a DTO member with no matching source member is a Mapperly generator warning, and TreatWarningsAsErrors turns it into a build error, surfaced in the implementing class, not a runtime surprise. The opposite direction is deliberately quiet: an entity member that no DTO member consumes (Mapperly's RMG020) is suppressed in the Application projects, so a DTO can expose a subset of its entity without noise.
        • +
        • It is fast, because there is no reflection or expression compilation at mapping time, just the generated assignments.

        So the framework's mapper interfaces define the contract (entity to DTO, request to Result-of-entity), and Mapperly fills in the body for the common straight-shape cases. When a mapper needs genuine business logic (the canonical ADR-001 example is a speaker mapper that redacts PII for non-organizer roles), you just write that logic in the same class. Conditional mapping that is awkward in a declarative profile is ordinary C# here.

        Auto-discovery: you write the mapper, you do not wire it

        The last piece is registration, and the framework keeps it convention-driven without making it reflection-at-runtime. Mappers are plain classes that implement one of the two interfaces. When a module is scanned at startup via ScanModuleApplicationServices<TAssemblyMarker>(), Scrutor finds every DTO mapper and request mapper in that module's Application assembly and registers each one scoped, alongside the module's handlers, validators, and event handlers. Five mapping-related scans sit side by side in that method, in this order: DTO mappers, then an opt-in scan for IEntityDTOProjector<,,> (an entity that has a projector gets server-side projection on its list reads, one that has none keeps materialize-then-map), then request mappers, then the two update-applier contracts that do the same job on the update path. All five register the class as itself and by its interfaces, with a scoped lifetime.

        The distinction from AutoMapper is worth stating plainly: this scanning happens once, at composition time, to populate the DI container. It is not a per-request reflection engine deciding how to map fields. The mapping logic itself is compiled code. Discovery is a startup convenience; the map is static.

        -

        So the developer experience is: create a class, implement MapToDTO (and CreateEntityAsync for the create side), let Mapperly generate the assignments, and the module scan registers it. You never touch a profile registry, and you never wonder at runtime whether a map exists, because if it did not, the build would have failed.

        +

        So the developer experience is: create a class, implement MapToDTO (and CreateEntityAsync for the create side), let Mapperly generate the assignments, and the module scan registers it. You never touch a profile registry. Be clear about the edge of the guarantee, though: the compiler checks the body of a mapper you wrote, not the existence of one. The scan registers whatever mapper classes it finds, so adding the class for a new entity is still your job.

        A concrete pair

        Putting it together, a module holds both directions. The pair below is trimmed from the Store Catalog module's real Product mappers (the delegating sub-mappers, the two [MapProperty] attributes that flatten the owned rating summary, and a shallow-category helper are elided): entity to DTO on the read side, request to Result<TEntity> on the write side, with a Mapperly [Mapper] partial supplying the straight-shape body.

        // Read side: entity -> response DTO. Cannot fail; returns the DTO directly.
        @@ -250,7 +250,7 @@ 

        Trade-offs, honestly

      6. It is more boilerplate than AutoMapper's zero-config start. AutoMapper's pitch is real: for a brand-new project with simple shapes, AddAutoMapper(...) and a convention is genuinely less typing on day one. ADR-001 accepts this cost explicitly: there are dozens of mapper classes across the consuming apps. The bet is that day-one typing is the cheap part and year-two silent breakage is the expensive part.
      7. There is a Mapperly learning curve. A source-generated mapper is not free of its own concepts. You have to understand its [Mapper] partial conventions, its diagnostics, and when to drop to hand-written code for a non-trivial map. It is less to learn than AutoMapper's full profile and projection surface, but it is not nothing.
      8. You have to write the mapper, every time. Adding an entity means adding a mapper class. There is no convention that "just works" for a new type. That is the philosophy stated as a constraint: explicit over implicit, with no escape hatch back into runtime magic.
      9. -
      10. The upside does not show up in a demo. Explicit, testable, compile-time-checked, allocation-free mapping does not make the first commit faster. It makes the rename safe, the stack trace readable, the conditional map ordinary, and the unit test trivial (a mapper is a plain class with no framework around it). Those payoffs land in month six, not minute one.
      11. +
      12. The upside does not show up in a demo. Explicit, testable, compile-time-checked, reflection-free mapping does not make the first commit faster. It makes the rename safe, the stack trace readable, the conditional map ordinary, and the unit test trivial (a mapper is a plain class with no framework around it). Those payoffs land in month six, not minute one.
      13. The honest summary: you trade a small, constant, up-front cost for the removal of a class of silent runtime bugs. If your mapping is trivial and stable forever, AutoMapper is fine. If it will be renamed, conditionally shaped, and load-bearing for years, the explicit mapper pays for itself.

        Apply this even without MMCA

        diff --git a/articles/modular-monolith-to-microservices.html b/articles/modular-monolith-to-microservices.html index a98ff898..de40184e 100644 --- a/articles/modular-monolith-to-microservices.html +++ b/articles/modular-monolith-to-microservices.html @@ -197,7 +197,7 @@

        1. Database-per startup. The clever part is collapse: a host with no DataSources configuration collapses every logical name onto a single Default source, so it behaves exactly like a single-database monolith (one context, one change tracker, foreign keys intact). Point one config entry at a separate - database and that module's data is now physically isolated, with no code change. This is the deep-dive + database and that module's data is physically isolated, with no code change. This is the deep-dive of its own article; the point here is that the data boundary exists from day one and costs nothing until you use it.

        2. A transport-agnostic message bus

        @@ -224,10 +224,13 @@

        3. gRPC contracts for sy root just does services.Replace(...) to swap one for the other. The calling code never learns which it got.

        The error model survives the hop too. On the server, GrpcResultExceptionInterceptor turns a failed - Result (raised as a ResultFailureException) into an RpcException carrying the errors, and the typed - client adapter reconstructs Result.Failure(errors) from the trailers, so callers keep - programming against Result<T> whether the answer came from an object or a network round-trip. This - is "Result over the wire," and it is why the wire hop does not poison your error handling.

        + Result (raised as a ResultFailureException) into an RpcException carrying the errors as + structured trailers. On the client, an adapter whose interface returns a Result catches that + RpcException and calls ToResult() (or ToResult<T>()), which rebuilds Result.Failure(errors) + from the trailers and degrades a bare transport fault (a reset connection, a missed deadline) to a + single failure carrying the RPC detail. Callers keep programming against Result<T> whether the + answer came from an object or a network round-trip. This is "Result over the wire," and it is why + the wire hop does not poison your error handling.

        4. Federated auth, a gateway, and Aspire hosting (ADR-008)

        The last leak is everything around the services. Cross-service auth uses JWKS, not a shared secret: IJwksProvider (RsaJwksProvider) exposes signing keys, and JwksEndpointExtensions serves @@ -243,11 +246,12 @@

        4. Federated auth

        What the boundary looks like in code

        The whole thesis fits in one DI swap. The same handler depends on the same interface; only the registration line differs between the two topologies.

        -
        // Application/Domain code depends ONLY on the interface. It never sees the transport.
        -public sealed class GetSessionBookmarkCountHandler(IBookmarkCountService counts)
        +          
        // Application code depends ONLY on the interface. It never sees the transport.
        +public sealed class GetSessionBookmarkCountHandler(
        +    IBookmarkCountService bookmarkCountService) : IQueryHandler<GetSessionBookmarkCountQuery, Result<int>>
         {
        -    // ... calls counts.GetBookmarkCountForSessionAsync(sessionId), which returns a plain int (Task<int>);
        -    // the handler wraps that count as Result.Success(count) and returns Result<int>.
        +    // ... var count = await bookmarkCountService.GetBookmarkCountForSessionAsync(query.SessionId, cancellationToken);
        +    //     return Result.Success(count);   // the interface returns a plain Task<int>; the handler returns Result<int>
         }
         
         // MONOLITH host: the real in-process implementation is registered (peer module enabled).
        diff --git a/articles/notifications-vertical-slice.html b/articles/notifications-vertical-slice.html
        index 96466c04..741a169a 100644
        --- a/articles/notifications-vertical-slice.html
        +++ b/articles/notifications-vertical-slice.html
        @@ -205,9 +205,11 @@ 

        Sending a push notification, end
        1. Deduplicate, if the caller opted in. The command carries an optional DedupKey. A blank or whitespace-only value is normalized to null, so an empty header cannot claim the single "empty" - key. When a key is present the handler looks the notification up first, and a hit returns the - existing DTO without sending anything at all. No key means no lookup, which is the default path: - every send creates a new notification.
        2. + key. A present key is scoped to the sender before it is used: the handler stores and looks up the + hex SHA-256 of {sentByUserId}:{clientKey}, so another caller reusing the same client key can + neither suppress this send nor be handed this sender's notification. The handler looks that scoped + key up first, and a hit returns the existing DTO without sending anything at all. No key means no + lookup, which is the default path: every send creates a new notification.
        3. Resolve recipients. The handler does not know who the audience is. It asks the injected INotificationRecipientProvider for the user IDs. This is the key swap point: the framework ships a no-op NullNotificationRecipientProvider that returns an empty list, and the consuming app overrides it. @@ -217,7 +219,8 @@

          Sending a push notification, end
        4. Persist the audit aggregate, in its own save. PushNotification.Create(title, body, sentByUserId, recipientCount, dedupKey, scopeKey) validates title and body via PushNotificationInvariants, checks that the dedup key and the optional scope - key each stay within 128 characters, and returns a Result<PushNotification>. It is saved with + key each stay within 128 characters (the 64-character hash the handler passes always fits, so in + practice only the scope key can trip it), and returns a Result<PushNotification>. It is saved with Status = Pending and a snapshot RecipientCount. That save stands alone precisely so a lost race on the dedup key can be caught and answered (next section).
        5. Fan out the inbox rows, in a second save. For every recipient the handler creates a @@ -246,7 +249,9 @@

          Sending a push notification, end a send nobody received is still recorded.

          // SendPushNotificationHandler, in order: dedup first, then audit + inbox are written
           // BEFORE any delivery is attempted. The whole method runs in one transaction (ITransactional).
          -var dedupKey = string.IsNullOrWhiteSpace(command.DedupKey) ? null : command.DedupKey;
          +var dedupKey = string.IsNullOrWhiteSpace(command.DedupKey)
          +    ? null
          +    : SenderScopedDedupKey(sentByUserId, command.DedupKey);         // hex SHA-256 of "{sender}:{key}"
           if (dedupKey is not null)
           {
               var alreadySent = await FindByDedupKeyAsync(dedupKey, ct);
          @@ -284,11 +289,13 @@ 

          Sending a push notification, end

          The send carries a second optional key alongside DedupKey: an opaque ScopeKey (for example "event:2"), stamped by the sending application and stored on the audit aggregate. The framework attaches no meaning to it. An app whose notifications belong to one edition of something sets it, and - every caller that omits it sends exactly as it always did. ADC resolves the current published event - and scopes to event:{id}, degrading to null (unscoped) if no event resolves, which is the safe - direction because scope is a view filter, not a security boundary. That is also why the column is - deliberately unindexed: the filter runs after the primary-key join from the inbox, over a table that - holds one row per send, so an index would cost writes without buying a read.

          + every caller that omits it sends an unscoped notification. ADC resolves the current published event + and scopes to event:{id}. When no event resolves it fails narrow rather than wide: it answers with + the last key it resolved or, on an instance that has never resolved one, with event:0, a + well-formed key no row carries, so the reader sees an empty inbox instead of every event's + notifications. Scope is a view filter, not a security boundary, and the column is deliberately + unindexed: the filter runs after the primary-key join from the inbox, over a table that holds one row + per send, so an index would cost writes without buying a read.

          Retry safety on two levels: the idempotency filter and the dedup key

          A broadcast is exactly the operation you never want to run twice, and the two ways it gets run twice are different problems. The client retries the HTTP call; or two retries arrive close enough together @@ -297,17 +304,21 @@

          Ret first response against the caller's Idempotency-Key and replays it for a repeat, which is the cheap answer to a retried HTTP call. Then the controller reads that same Idempotency-Key header itself and passes it into the command as DedupKey (absent or whitespace-only stays null, which leaves the - send on the default undeduplicated path). The division of labor is the point: the filter protects + send on the default undeduplicated path), and the handler scopes that key to the sender as described + above. The division of labor is the point: the filter protects the response, the dedup key protects the delivery. When the filter's cache is cold, evicted, or degraded (a restarted host, an expired entry, an unreachable distributed cache) the response replay is gone, but the domain still refuses to send a second time.

          -

          Underneath, DedupKey is a real column on the PushNotification aggregate (max 128 characters, - validated in the factory), with a filtered unique index over it. That matters because the handler's +

          Underneath, DedupKey is a real column on the PushNotification aggregate holding the + sender-scoped hash (the column allows 128 characters, validated in the factory, and the hash is + always 64), with a filtered unique index over it. That matters because the handler's up-front lookup is a check-then-act: two concurrent retries of the same send can both pass it, and the loser only discovers the conflict when it tries to insert. So the audit save is its own SaveChangesAsync, wrapped in a catch that requeries by key: if the row exists now, the concurrent send is the cause and the caller gets that notification back; anything else is rethrown untouched and - reaches the exception middleware. The database, not the application, arbitrates the race.

          + reaches the exception middleware. The requery runs on CancellationToken.None, so a save aborted by + the caller's own token can still be classified. The database, not the application, arbitrates the + race.

          That catch is deliberately broad (a suppressed CA1031), and the reason is a layer rule rather than laziness: Application has no EF Core dependency, so DbUpdateException is not a type this file is allowed to name. The requery is what narrows it. It is the same swallow-and-requery shape the @@ -331,7 +342,9 @@

          // The null-object discipline: the handler depends on the port; the adapter is chosen at the root. @@ -382,7 +395,7 @@

          The in-app in on the controller: the list, the unread count (so the badge and the list agree), and the bulk mark-read (so a scoped client never marks rows it cannot see). A supplied scope narrows the read to the notifications carrying that scope plus every unscoped one; omitting it returns everything, - exactly as before, which is what keeps the pre-scope callers working.

          + which keeps callers that never pass a scope working.

          Both the per-row read and the mark-read scope by the caller's UserId from ICurrentUserService, so one user cannot read or mutate another's inbox. Security is part of the slice, not a cross-cutting afterthought.

          @@ -420,12 +433,14 @@

          Trade-offs, honestly

          key that nothing delivered, and every retry of that key would answer success forever. The price is that the SignalR and native calls happen with the transaction still open. Both are bounded by their own timeouts and hold locks only on rows this request just inserted, but it is still a transaction - held across an out-of-process call.

        6. + held across an out-of-process call. And because those calls run inside the unit, a transient fault + on the final status save re-runs them under the execution strategy: real-time and native delivery + are at-least-once, while the inbox rows are written exactly once.

        7. Inbox fan-out cost. Step 4 writes one UserNotification row per recipient. For a broadcast to a large audience that is a lot of rows in one save. It is the price of a durable per-user inbox with per-user read state, and it is bounded by the recipient count, but it is real write amplification.
        8. Deduplication is opt-in, and it is check-then-act plus a database index. A send that carries no - key behaves exactly as it always did: no protection at all. When a key is present, the up-front + key gets no protection at all. When a key is present, the up-front lookup is a race the handler cannot win on its own, so correctness rests on the filtered unique index and on a broad catch that has to requery to classify what it caught. That is a real cost in handler complexity, paid to keep Application free of an EF Core dependency.
        9. @@ -469,7 +484,7 @@

          Apply this even without MMCA

          vertical slice beats a horizontal layer cut for cohesion, the end-to-end send flow (deduplicate, resolve recipients, persist audit, fan out inbox, then best-effort deliver over SignalR and OS-level native push, the whole sequence one ITransactional transaction), the two levels of retry safety (the [Idempotent] filter replaying the response, the - DedupKey plus its filtered unique index protecting the delivery), the optional ScopeKey that + sender-scoped DedupKey plus its filtered unique index protecting the delivery), the optional ScopeKey that narrows a read without isolating anything, why each sender is a composition-root choice with a null-object fallback, the ADR-044 native push channel and its DevicesController registration surface, the CQRS inbox scoped to the caller, the email channel and the diff --git a/articles/observability-opentelemetry.html b/articles/observability-opentelemetry.html index f2516c88..fee2f030 100644 --- a/articles/observability-opentelemetry.html +++ b/articles/observability-opentelemetry.html @@ -182,7 +182,8 @@

          Observ is already the single largest observability line item; idle polling piles on top of it.

          MMCA.Common treats observability as a hosting-layer default: one call on the host builder, and every service in the model gets the same logs, metrics, and traces, the same framework-specific instrumentation - where auto-instrumentation is blind, and the same cost knobs that fail toward keeping data.

          + where auto-instrumentation is blind, and the same cost knobs, each with a deliberate default that a typo + cannot flip.

          Why it matters

          Observability is the category you do not miss until production, and by then retrofitting it is expensive. The rubric names the bar directly: structured logging with correlation IDs across boundaries, distributed @@ -199,20 +200,25 @@

          Why it matters

          hosts. If observability is bolted on per app, it drifts. If it lives in the shared hosting defaults, every host, in-process or extracted, tells the same story the same way.

          The MMCA answer: one call, one baseline, on every host

          -

          Every framework-consuming host calls AddServiceDefaults() first in Program.cs, and that method calls - ConfigureOpenTelemetry() (Extensions.cs:87, the call at :89) before anything module-specific. So a - host opts in once and every project in the Aspire model inherits the identical telemetry pipeline. There - is no per-app ServiceDefaults copy: all four ADC services and all three Store services consume this one - implementation directly (for example MMCA.ADC.Conference.Service/Program.cs:103 and - MMCA.Store.Catalog.Service/Program.cs:72), as do both gateways and both web UIs.

          -

          ConfigureOpenTelemetry (Extensions.cs:170) does four things.

          +

          Every framework-consuming host calls AddServiceDefaults() early in Program.cs, and that method calls + ConfigureOpenTelemetry() (Extensions.cs:30, the call at :32) before anything module-specific. Only + host-level setup runs ahead of it, notably AddCommonSerilog, which has to come first so the OpenTelemetry + logging provider registered by AddServiceDefaults joins the same logging factory + (MMCA.Store.Catalog.Service/Program.cs:68-70). So a host opts in once and every project in the Aspire + model inherits the identical telemetry pipeline. There is no per-app ServiceDefaults copy: all four ADC + services and all three Store services consume this one implementation directly (for example + MMCA.ADC.Conference.Service/Program.cs:105 and MMCA.Store.Catalog.Service/Program.cs:73), as do both + gateways and both web UIs.

          +

          ConfigureOpenTelemetry (Extensions.Telemetry.cs:71, in the partial Extensions file that holds all of + the telemetry wiring) does four things.

          It wires logging, metrics, and tracing. Logs go through the OpenTelemetry logger with - IncludeFormattedMessage and IncludeScopes on (Extensions.cs:172-176) so a scope carries its - structured state. The metrics half is a separate private method, ConfigureMetrics (Extensions.cs:534, - called through a one-line lambda at :179), and it starts from ASP.NET Core instrumentation, always on - (:536). Tracing adds four activity sources by name (:182-185) and then ASP.NET Core and HttpClient - instrumentation (:205-208 or :212-213, depending on a knob below). That is the free - auto-instrumentation floor plus the framework's own sources.

          + IncludeFormattedMessage and IncludeScopes on (Extensions.Telemetry.cs:73-77) so a scope carries its + structured state. The metrics half is a separate private method, ConfigureMetrics + (Extensions.Telemetry.cs:243, called through a one-line lambda at :80), and it starts with the ASP.NET + Core instrumentation through ConfigureAspNetCoreMetrics (called at :245, declared at :352), which is + on unless a cost knob below drops it. Tracing adds four activity sources by name (:83-86) and then + ASP.NET Core and HttpClient instrumentation (:106-109 or :113-114, depending on a knob below). That + is the free auto-instrumentation floor plus the framework's own sources.

          It instruments only where auto-instrumentation is blind. Nine framework-owned meters carry custom signals, subscribed here by literal name because the Aspire package deliberately has no project reference to the assemblies that define them:

          @@ -234,14 +240,15 @@

          The MMCA answer: on five: a dead-letter counter outbox.dead_letter.count (:41-44), a success counter outbox.processed.count (:47-50), an end-to-end dispatch-lag histogram in seconds (:57-60), an ObservableGauge for pending depth (:75-79) published each cycle from the depth the processor observed - (OutboxProcessor.cs:251), and a second gauge, outbox.oldest_pending.age in seconds tagged + (OutboxProcessor.cs:165), and a second gauge, outbox.oldest_pending.age in seconds tagged data_source (:98-102, fed by SetOldestPendingAge at :115). The two say different things: the histogram reports how late the messages that did get delivered were, the age gauge reports how late a backlog already is while it is still stuck, which is the number an alert on a wedged outbox fires on (:81-86). The dead-letter counter has two increment sites, tagged event_type and reason: an - unresolvable event type (OutboxProcessor.cs:752-755, reason type_unresolvable) and an exhausted retry - budget (:707-710, reason retries_exhausted). The same activity source emits outbox spans - (OutboxProcessor.cs:93). + unresolvable event type (OutboxProcessor.cs:667-670, reason type_unresolvable; a row on its first + attempt is retried once as transient before that, :656-663) and an exhausted retry budget + (:617-620, reason retries_exhausted). The same activity source emits outbox spans + (OutboxProcessor.cs:88).
        10. The durable internal-command queue owns MMCA.Common.InternalCommands (InternalCommandMetrics.cs:20, meter at :22) with the same shape one drain over a table needs: processed, failed and dead-letter counters (:38, :48, :57), a duration histogram (:66), a @@ -274,47 +281,59 @@

          The MMCA answer: on (hosts call it from handlers, hosted services and consumers alike), so an operator can drop or keep it independently of the RED metrics (BestEffort.cs:92-97). And the optional language-model package publishes its token spend and call duration under one name, MMCA.Common.AI, used as both meter and - trace source (Extensions.cs:62, subscribed at :606), inert in a host that never adds that package. + trace source (Extensions.Telemetry.cs:44, subscribed as a meter at :315 and as a source at :86), + inert in a host that never adds that package. All four publish nothing in a host that stays on the in-process bus, takes no output cache, dispatches no best-effort work, and calls no model.

        11. -

          The Aspire defaults subscribe all nine by literal name in one chain (Extensions.cs:598-606), with a - comment enumerating what each one carries (:587-597), and then subscribe a tenth meter that nobody in - this repo defines: Polly's own (:613). The standard resilience handler sits on every HttpClient and +

          The Aspire defaults subscribe all nine by literal name in one chain (Extensions.Telemetry.cs:307-315), + with a comment enumerating what each one carries (:296-306), and then subscribe a tenth meter that nobody + in this repo defines: Polly's own (:322). The standard resilience handler sits on every HttpClient and every gRPC typed client, so it is the component that decides whether an inter-service call is retried, timed out, or refused by an open circuit, and resilience.polly.strategy.events is what makes a brownout - look like a brownout rather than like latency (:608-612).

          -

          It exposes cost knobs that default to safe. There are five, and only the first two are about volume - for its own sake. HttpClient connection and request metrics are on unless - Telemetry:DisableHttpClientMetrics is set (Extensions.cs:545), and .NET runtime metrics - (dotnet.gc.*, jit.*, thread_pool.*) unless Telemetry:DisableRuntimeMetrics is set (:572). Both - keys are read by IsInstrumentationDisabled (Extensions.cs:499), which drops the family only when the - value parses as boolean true; absent, blank, or unparseable keeps the instrumentation, so a typo cannot - silently blind a whole metric family. Skipping the Add call is not enough on its own, and the source says - why (:547-556): a deployed host also calls UseAzureMonitor(), and the Azure Monitor distro adds the - System.Net.Http meter itself, so the toggle stayed advisory. Each disabled branch therefore installs a - drop View, over System.Net.Http plus System.Net.NameResolution (:557-561) and over System.Runtime - (:577-580); a View applies to the whole MeterProvider regardless of which component added the meter, - which is what makes the knob authoritative. The third knob is the mirror image: Polly's two duration - histograms are dropped by a View unless a host opts in with Telemetry:EnablePollyDurationMetrics - (:43, read by IsInstrumentationEnabled at :512, the View at :623-631), while the - strategy-events counter is never dropped (:620-622). Head-based trace sampling is the fourth: - Telemetry:TracesSampleRatio (read at Extensions.cs:479), parsed by TryGetTraceSampleRatio - (Extensions.cs:476, called at :236), is unset by default so a host samples everything. Set a ratio in - the open interval (0,1) and it installs a TraceIdRatioBasedSampler wrapped in a ParentBasedSampler - (Extensions.cs:237) so a sampled-in request keeps its whole trace intact across service boundaries. A - value that is absent, unparseable, or outside (0,1) falls back to sample-all (Extensions.cs:478-485), so - a typo can never silently drop all telemetry.

          -

          It filters idle poll and probe spans out of export. That is the fifth knob and the sharpest decision in + look like a brownout rather than like latency (:317-321).

          +

          It exposes cost knobs with deliberate defaults. There are six, and the first three are about volume + for its own sake. ASP.NET Core metrics (http.server.*, kestrel.*, aspnetcore.*, + signalr.server.*) are on unless Telemetry:DisableAspNetCoreMetrics is set + (Extensions.Telemetry.cs:354). The source records why that knob exists: the family was 73% of both + production workspaces' ingestion over 2026-09-22..28, mostly gauges re-emitted on replicas serving no + traffic, and no alert reads any of it (:343-349), so both production templates set it + (MMCA.ADC/infra/main.bicep:298-299, MMCA.Store/infra/main.bicep:253-254). HttpClient connection and + request metrics are on unless Telemetry:DisableHttpClientMetrics is set (Extensions.Telemetry.cs:254), + and .NET runtime metrics (dotnet.gc.*, jit.*, thread_pool.*) unless Telemetry:DisableRuntimeMetrics + is set (:281). All three keys are read by IsInstrumentationDisabled (Extensions.Telemetry.cs:208, its + doc naming the three at :201-203), which drops the family only when the value parses as boolean true; + absent, blank, or unparseable keeps the instrumentation, so a typo cannot silently blind a whole metric + family. Skipping the Add call is not enough on its own, and the source says why (:256-265): a deployed + host also calls UseAzureMonitor(), and the Azure Monitor distro adds the System.Net.Http meter itself, + so the toggle stayed advisory. Each disabled branch therefore installs a drop View, over every meter + under the Microsoft.AspNetCore. prefix (:359-362), over System.Net.Http plus + System.Net.NameResolution (:266-270) and over System.Runtime (:286-289); a View applies to the + whole MeterProvider regardless of which component added the meter, which is what makes the knob + authoritative. The fourth knob is the mirror image: Polly's two duration histograms are dropped by a + View unless a host opts in with Telemetry:EnablePollyDurationMetrics (:25, read by + IsInstrumentationEnabled at :221, the View at :332-340), because they re-measure what + http.client.request.duration and the dependency traces already report (:324-328); absent, blank or + unparseable all mean "stay off" (:211-216), while the strategy-events counter is never dropped + (:329-331). Head-based trace sampling is the fifth: Telemetry:TracesSampleRatio (read at + Extensions.Telemetry.cs:188), parsed by TryGetTraceSampleRatio (Extensions.Telemetry.cs:185, called + at :137), is unset by default so a host samples everything, and both production templates set it to + 0.25 (MMCA.ADC/infra/main.bicep:253-254, MMCA.Store/infra/main.bicep:207-208). Set a ratio in the + open interval (0,1) and it installs a TraceIdRatioBasedSampler wrapped in a ParentBasedSampler + (Extensions.Telemetry.cs:138) so a sampled-in request keeps its whole trace intact across service + boundaries. A value that is absent, unparseable, or outside (0,1) falls back to sample-all + (Extensions.Telemetry.cs:189-194), so a typo can never silently drop all telemetry.

          +

          It filters idle poll and probe spans out of export. That is the sixth knob and the sharpest decision in the file. More on it below.

          -

          Then AddOpenTelemetryExporters (Extensions.cs:348) decides where telemetry goes, from the environment, - with no code change: OTLP when OTEL_EXPORTER_OTLP_ENDPOINT is present (Extensions.cs:350-356, the Aspire - dashboard sets it locally) and Azure Monitor via UseAzureMonitor when APPLICATIONINSIGHTS_CONNECTION_STRING - is present (Extensions.cs:358-364, set by the cloud deployment). Both can be active at once - (Extensions.cs:346). Local development ships to the Aspire dashboard; production ships to workspace-based - Application Insights; the same binary does both depending on which variable is set.

          -

          Here is the shape of the pipeline (condensed from Extensions.cs:170-243 and :534-632, comments trimmed, - body faithful):

          +

          Then AddOpenTelemetryExporters (Extensions.Telemetry.cs:159) decides where telemetry goes, from the + environment, with no code change: OTLP when OTEL_EXPORTER_OTLP_ENDPOINT is present + (Extensions.Telemetry.cs:161-167, the Aspire dashboard sets it locally) and Azure Monitor via + UseAzureMonitor when APPLICATIONINSIGHTS_CONNECTION_STRING is present (Extensions.Telemetry.cs:169-175, + set by the cloud deployment). Both can be active at once (Extensions.Telemetry.cs:157). Local development + ships to the Aspire dashboard; production ships to workspace-based Application Insights; the same binary + does both depending on which variable is set.

          +

          Here is the shape of the pipeline (condensed from Extensions.Telemetry.cs:71-144 and :243-368, + comments trimmed, body faithful):

          public TBuilder ConfigureOpenTelemetry()
           {
               builder.Logging.AddOpenTelemetry(logging =>
          @@ -363,9 +382,9 @@ 

          The MMCA answer: on private static void ConfigureMetrics(MeterProviderBuilder metrics, IConfiguration configuration) { - metrics.AddAspNetCoreInstrumentation(); + ConfigureAspNetCoreMetrics(metrics, configuration); - // Two highest-volume families, on by default. Disabling drops the whole meter with a View, + // HttpClient and runtime families, on by default. Disabling drops the whole meter with a View, // because the Azure Monitor distro adds these meters itself: if (IsInstrumentationDisabled(configuration, "Telemetry:DisableHttpClientMetrics")) metrics.AddView(instrument => @@ -400,19 +419,32 @@

          The MMCA answer: on && instrument.Name is PollyAttemptDurationInstrument or PollyPipelineDurationInstrument ? MetricStreamConfiguration.Drop : null); +} + +private static void ConfigureAspNetCoreMetrics(MeterProviderBuilder metrics, IConfiguration configuration) +{ + // On by default; both production deployments drop the whole Microsoft.AspNetCore.* family: + if (IsInstrumentationDisabled(configuration, "Telemetry:DisableAspNetCoreMetrics")) + metrics.AddView(instrument => + instrument.Meter.Name.StartsWith("Microsoft.AspNetCore.", StringComparison.Ordinal) + ? MetricStreamConfiguration.Drop + : null); + else + metrics.AddAspNetCoreInstrumentation(); }

          The one that pays for itself: filtering idle poll spans

          The OutboxProcessor polls every relational outbox table on a recurring cycle (both deployment templates push the interval to 300 seconds precisely so idle polls cost less: Outbox__PollingIntervalSeconds is set - to 300 on every container app, four in MMCA.ADC/infra/main.bicep (:1591, :1812, :1950, :2102) - and three in MMCA.Store/infra/main.bicep (:1461, :1635, :1762), against the 2-second default in + to 300 on every container app, four in MMCA.ADC/infra/main.bicep (:1700, :1923, :2063, :2217) + and three in MMCA.Store/infra/main.bicep (:1493, :1669, :1801), against the 2-second default in OutboxSettings.cs:31). Each poll runs inside an OutboxPoll - activity (OutboxProcessor.cs:426, named at :75), and under the Azure Monitor distro that span gets a - child SqlClient dependency span for the poll query. A second OutboxPoll activity wraps the backlog-depth - count that feeds the pending-depth gauge (OutboxProcessor.cs:373, inside CountPendingAsync at :361), - deliberately reusing the same name so the same filter suppresses it. The internal-command queue drains the - same way, under its own InternalCommandPoll name (InternalCommandProcessor.cs:63, opened at :318 and - :351). At fleet scale, that steady stream of + activity (OutboxProcessor.cs:330, inside FetchCandidatesAsync at :324, named at :70), and under + the Azure Monitor distro that span gets a child SqlClient dependency span for the poll query. A second + OutboxPoll activity wraps the backlog-depth count that feeds the pending-depth gauge + (OutboxProcessor.cs:277, inside CountPendingAsync at :265, which only queries when the fetched batch + came back full, :272-275), deliberately reusing the same name so the same filter suppresses it. The + internal-command queue drains the same way, under its own InternalCommandPoll name + (InternalCommandProcessor.cs:57, opened at :235 and :268). At fleet scale, that steady stream of idle-poll spans would dominate Application Insights ingestion and spam the local dashboard, telemetry about nothing happening, priced like something happening.

          OutboxPollFilterProcessor (OutboxPollFilterProcessor.cs:17) is a BaseProcessor<Activity> that drops @@ -422,20 +454,20 @@

          The one that pay InternalCommandPoll on source MMCA.Common.InternalCommands (:26-29). Matching operation name and source together is what stops an unrelated span that happens to be named "OutboxPoll" from being suppressed. Clearing Recorded makes the batch exporters skip the activity, which is why the processor is - registered before the exporters (Extensions.cs:221, ahead of AddOpenTelemetryExporters() at :240): - its OnEnd runs first, and the exporters never see the span. A second processor, + registered before the exporters (Extensions.Telemetry.cs:122, ahead of AddOpenTelemetryExporters() at + :141): its OnEnd runs first, and the exporters never see the span. A second processor, ProbeTelemetryFilterProcessor, is registered right behind it under the same ordering requirement - (:228), because the inbound filter refuses the probe request span itself while its dependency children - are sampled independently and need un-recording before the exporters look (:225-227).

          + (:129), because the inbound filter refuses the probe request span itself while its dependency children + are sampled independently and need un-recording before the exporters look (:126-128).

          Real work survives untouched. Each per-message OutboxProcess span is started under an explicit parent context rebuilt from the message's stored trace and span ids and passed straight into StartActivity - (OutboxProcessor.cs:808, the start call at :820), so it is never a child of the poll span and never + (OutboxProcessor.cs:708, the start call at :720), so it is never a child of the poll span and never matched by the parent-chain walk. Per-command InternalCommandExecute spans work the same way (OutboxPollFilterProcessor.cs:13-15). The outbox counters, the lag histogram, and the two gauges are metrics, not spans, so they are unaffected too. You lose the noise and keep the signal.

          The poll-span and source literals live on both sides of the package boundary: the filter (OutboxPollFilterProcessor.cs:26-29) and the two processors that emit them, where the outbox declares its - pair across three sites, PollActivityName (OutboxProcessor.cs:75), the activity source (:93), and the + pair across three sites, PollActivityName (OutboxProcessor.cs:70), the activity source (:88), and the meter name (OutboxMetrics.cs:19). They are duplicated on purpose, with a sync comment on both sides (OutboxPollFilterProcessor.cs:19-25, OutboxMetrics.cs:6-15), because the Aspire package must not take a project reference on Infrastructure: its one ProjectReference is MMCA.Common.Shared, which is what keeps @@ -448,16 +480,22 @@

          The other half: which signal 2026-08-01) is that record.

          Each consuming app declares its SLO alerts as data in its Bicep template. sloAlertSpecs is one array of records carrying key, description, query, timeAggregation, metricMeasureColumn, threshold, - and severity (MMCA.ADC/infra/main.bicep:330, MMCA.Store/infra/main.bicep:282), materialized + and severity (MMCA.ADC/infra/main.bicep:362, MMCA.Store/infra/main.bicep:312), materialized one-for-one into Log Analytics scheduledQueryRules named ${prefix}-alert-${spec.key}-v2 - (MMCA.ADC/infra/main.bicep:372,376) and evaluated every 15 minutes over a 15-minute window (:390-391), - a frequency the template's own comment ties to the bill: a scheduled-query rule is billed per evaluation, - and the 5-minute tier costs $1.47 per month per rule against about $0.50 at 15 minutes (:385-389). Both - apps declare the same four SLOs with the same numbers: failed-requests at severity 2 (:332-338), - server-response-time at severity 3 (:341-347), dependency-failures at severity 2 (:350-356), and - resilience-circuit-open at severity 2 with a threshold of 0 (:362-368, Store's at :314-320), which - queries the resilience.polly.strategy.events instrument for an OnCircuitOpened event and so fires on - the first breaker opening rather than on a rate (:358-360). An alert + (MMCA.ADC/infra/main.bicep:454-458) and evaluated every 15 minutes over a 15-minute window, a frequency + the template's own comment ties to the bill: a scheduled-query rule is billed per evaluation, and the + 5-minute tier costs $1.47 per month per rule against about $0.50 at 15 minutes (:474-478; Store's rules + carry the same cadence and reasoning at MMCA.Store/infra/main.bicep:368-376). Both apps declare the same + four core SLOs at the same severities: failed-requests at severity 2 + (MMCA.ADC/infra/main.bicep:363-371), server-response-time at severity 3 (:372-380), + dependency-failures at severity 2 (:381-389), and resilience-circuit-open at severity 2 with a + threshold of 0 (:393-401, Store's at MMCA.Store/infra/main.bicep:343-351), which queries the + resilience.polly.strategy.events instrument for an OnCircuitOpened event and so fires on the first + breaker opening rather than on a rate (MMCA.ADC/infra/main.bicep:390-392). ADC carries a fifth entry, + ai-scoring-token-ceiling at severity 3 (:439-451), the one rule that overrides the cadence: it sums AI + input and output tokens over a two-day window evaluated every 12 hours (the override rationale at + :480-483, the 15-minute defaults at :485 and :487), and it is enabled only when an AI key is + deployed. An alert clicked together in the portal is invisible to review, absent from the next environment, and impossible to diff; an array in the template that provisions the workloads is all three.

          Why log-search rules and not metric alerts. This is the decision worth stealing. A metric alert on @@ -465,72 +503,88 @@

          The other half: which signal this traffic level it pages on completely routine traffic. A 401 (expired or absent auth) and a 499 (client disconnected mid-request) both count as failed requests, a long-lived SignalR hub connection reports its connection lifetime as request duration, and a crawler's first contact with a host is a GET /robots.txt followed by a GET /sitemap.xml. ADC's own template records three pages that made the case - (MMCA.ADC/infra/main.bicep:318-327): one window held eight 401s plus two 499s plus a single readiness 503 + (MMCA.ADC/infra/main.bicep:350-359): one window held eight 401s plus two 499s plus a single readiness 503 and zero other failures, all from one browser session retrying with an expired token; five hub connections averaging 11.3 seconds dragged the fleet-wide average to 5539ms against a 3000ms threshold with every real request fast; and twelve robots and sitemap 404s arrived from a single Azure-hosted crawler inside one 15-minute window. A metric alert has no way to say "exclude 401 and 499", "exclude /hubs/ before - averaging", or "exclude a 404 on /sitemap.xml"; a KQL query says exactly that (:334, :343, :352). - Only those codes and the two crawler etiquette paths are excluded, so a genuine 400, 404 or 500 burst - still pages at the same number (:328-329). Thresholds and severities are unchanged by the exclusions, so - this is a precision fix, not a sensitivity cut.

          + averaging", or "exclude a 404 on /sitemap.xml"; a KQL query says exactly that (:366, :375, :384). + The two count rules exclude only those codes and, in ADC's failed-requests, the two crawler etiquette + paths (Store's failed-requests excludes only the two codes, MMCA.Store/infra/main.bicep:316), so a + genuine 400, 404 or 500 burst still pages at the same number (MMCA.ADC/infra/main.bicep:360-361). The + response-time rule goes further: beyond the /hubs/ filter it drops ResultCode 101 (a hub or Blazor + circuit connection, whose duration is its lifetime) and rows with no Url (the background + InternalCommandExecute and OutboxProcess spans), and it only evaluates a window holding at least five + requests, so a single cold request cannot page (:373-375, Store's at MMCA.Store/infra/main.bicep:325). + The exclusions are a precision fix; the five-request floor is a deliberate trade of sensitivity in quiet + windows.

          The operational trap: a rule name is an identity. An incremental ARM deployment never removes a resource just because it left the template, and a name is how Azure decides whether a deployment updates a resource or creates a second one. That cuts both ways when a metric alert is superseded by a query rule covering the same signal: the old resource has to be deleted deliberately, and the replacement must not reuse its name, or the deployment renames the live metric alert instead of provisioning a rule. So every generated query rule carries the -v2 suffix, and the template says in place that the suffix is part of - the rule's identity in Azure and must stay stable (MMCA.ADC/infra/main.bicep:374-376). Cheap to respect, + the rule's identity in Azure and must stay stable (MMCA.ADC/infra/main.bicep:456-458). Cheap to respect, expensive to discover.

          Two smaller properties matter as much. Every active rule routes to one unconditional action group: alertEmailAddress is a required parameter with no default (MMCA.ADC/infra/main.bicep:124, Store's at - :91), so the email receiver is never conditional (:297, receivers at :303-307) and every rule points - at it (:414, and the same actionGroups: [ actionGroup.id ] line on each ungated rule). An alert wired to - no channel is worse than no alert, because it looks like coverage and pages nobody. And a saved workbook - renders the same signals off the same workspace, embedded at compile time from a JSON file in the repo - (:701, :710), so the dashboard cannot drift from the alerts by being maintained somewhere else.

          + :91), so the email receiver is never conditional (:329, receivers at :335-341), every SLO rule points + at it (:511), and the gateway metric alert reaches the same group through its own actions block + (:714-718). An alert wired to no channel is worse than no alert, because it looks like coverage and pages + nobody. And a saved workbook renders the same signals off the same workspace, embedded at compile time + from a JSON file in the repo (:730, :739), so the dashboard cannot drift from the alerts by being + maintained somewhere else.

          The other half of ADR-062 is a build gate that fails when an alert has no severity-matching runbook section, or when a runbook section outlives its alert. That belongs with the rest of the fitness tier, so it is Article 34's subject rather than this one's.

          Two honest limits. The gate covers only what sits inside the parsed spec window, and both apps provision - alerts outside it, more of them every time an incident teaches something. ADC has four: the + alerts outside it, more of them every time an incident teaches something. ADC has five: the outbox-dead-letter, sql-dependency-failures and revision-activation-failed scheduled query rules - (scheduledQueryAlertSpecs at MMCA.ADC/infra/main.bicep:442, keys at :444, :450, :456, materialized - at :463) and a severity 1 gateway-availability alert (:662, severity at :668) over a three-location - web test against /health (:629, locations at :645-649, the URL at :651). Store has six, each its own - resource: outboxDeadLetterAlert (MMCA.Store/infra/main.bicep:389, severity 2 at :396), - revisionActivationAlert (:439), authFailureSpikeAlert (:507), forbiddenBurstAlert (:547), - logIngestionQuotaAlert (:593), and its own severity 1 gatewayAvailabilityAlert (:674, severity at - :680) over the same kind of three-location /health web test (:641). All of them can be added, + (scheduledQueryAlertSpecs at MMCA.ADC/infra/main.bicep:539, keys at :541, :547, :553, materialized + at :560), a severity 2 logIngestionCapAlert that fires when the workspace hits its daily ingestion cap, + evaluated every 15 minutes over a one-hour window (:612, severity at :619, cadence at :622-623), and + a severity 1 gateway-availability alert (:691, severity at :697) over a three-location web test against + /health (:658, locations at :674-678, the URL at :680). Store has six, each its own resource: + outboxDeadLetterAlert (MMCA.Store/infra/main.bicep:419, severity 2 at :426), + revisionActivationAlert (:469), authFailureSpikeAlert (:537), forbiddenBurstAlert (:577), + logIngestionQuotaAlert (:623), and its own severity 1 gatewayAvailabilityAlert (:704, severity at + :710) over the same kind of three-location /health web test (:671). All of them can be added, renamed, or re-tiered with no runbook consequence. And MMCA.Helpdesk has no infra/ template at all, so it has neither the alerts nor anything for a pairing gate to check.

          Trade-offs, honestly

          • The literal names can drift. The meter, activity-source, and poll-span names are duplicated as string literals across the Aspire package (OutboxPollFilterProcessor.cs:26-29 and the ten AddMeter literals - at Extensions.cs:598-606 and :613) and the defining assemblies (CqrsMetrics.cs, OutboxMetrics.cs, - InternalCommandMetrics.cs, IdempotencyMetrics.cs, SchedulerMetrics.cs, BrokerMetrics.cs, - OutputCacheMetrics.cs, BestEffort.cs and OutboxProcessor.cs), plus one name, Polly, that no - assembly here owns at all. Every new meter family widens that surface, and each family lands with the same - duplicated-literal note in its own doc comment. A rename on one side silently stops the - matching export or subscription until the literal is updated. The decoupled package graph is worth it; - the sync discipline is real.
          • + at Extensions.Telemetry.cs:307-315 and :322) and the defining assemblies (CqrsMetrics.cs, + OutboxMetrics.cs, InternalCommandMetrics.cs, IdempotencyMetrics.cs, SchedulerMetrics.cs, + BrokerMetrics.cs, OutputCacheMetrics.cs, BestEffort.cs and OutboxProcessor.cs), plus one name, + Polly, that no assembly here owns at all. Every new meter family widens that surface, and each family + lands with the same duplicated-literal note in its own doc comment. A rename on one side silently stops + the matching export or subscription until the literal is updated. The decoupled package graph is worth + it; the sync discipline is real.
          • Sampling trades trace completeness for cost. A sampled-out trace is gone, so deep debugging of one specific request can miss it. Metrics and logs are unaffected (sampling is trace-only), so RED rates and error counts stay whole even at a low ratio. Size the ratio to your debugging horizon, not to zero.
          • Poll-span and probe-span filtering hide steady-state activity by design. "Is the poller alive and - looping" and "are the probes passing" are not questions traces answer once both filters are on. Those - signals live in metrics on purpose, and the metrics that answer them exist: outbox.processed.count - (OutboxMetrics.cs:47), the dispatch-lag histogram (:57), the pending-depth gauge (:75), the - oldest-pending-age gauge (:98) and the dead-letter counter (:41-44) on one side, and the untouched - http.server.request.duration and Kestrel instruments on the other (Extensions.cs:197-198). If you rely - on poll or probe spans for a liveness check, chart those instead.
          • + looping" and "are the probes passing" are not questions traces answer once both filters are on. The + poller's signals live in metrics on purpose: outbox.processed.count (OutboxMetrics.cs:47), the + dispatch-lag histogram (:57), the pending-depth gauge (:75), the oldest-pending-age gauge (:98) and + the dead-letter counter (:41-44). Probe traffic is a sharper case. The probe filter itself leaves + metrics alone, so http.server.request.duration and the Kestrel instruments keep it visible + (Extensions.Telemetry.cs:98-99), but only while Telemetry:DisableAspNetCoreMetrics is off, and both + production templates turn it on (MMCA.ADC/infra/main.bicep:298-299, + MMCA.Store/infra/main.bicep:253-254), so in production probe traffic appears on neither the trace nor + the metric dashboards. If you rely on poll or probe spans for a liveness check, chart the outbox metrics + instead, and decide deliberately what answers the probe question.
          • Exporters are opt-in per host. A host that sets neither OTEL_EXPORTER_OTLP_ENDPOINT nor - APPLICATIONINSIGHTS_CONNECTION_STRING emits to nothing. And four of the five cost knobs fail toward - keeping data (higher cost), not toward silence, so a misconfigured ratio is a possible cost surprise, - never a silent data gap. The exception is deliberate and documented: the probe-telemetry filter defaults - to on, because probe chatter is ingestion nobody wants billed (Extensions.cs:515-525). That is the - intended bias, but it is a bias worth naming.
          • + APPLICATIONINSIGHTS_CONNECTION_STRING emits to nothing. And four of the six cost knobs (the three + Disable* metric knobs and the sample ratio) fail toward keeping data (higher cost), not toward + silence, so a misconfigured value is a possible cost surprise, never a silent data gap. The two + exceptions are deliberate and documented, and both fail toward a smaller bill: the Polly duration + histograms stay off unless a host opts in, so a typo never adds a high-volume stream + (Extensions.Telemetry.cs:211-216), and the probe-telemetry filter defaults to on, because probe chatter + is ingestion nobody wants billed (Extensions.Telemetry.cs:224-234). That is the intended bias, but it + is a bias worth naming.

          Apply this even without MMCA

          The pattern ports to any OpenTelemetry stack, with or without Aspire:

          @@ -541,9 +595,11 @@

          Apply this even without MMCA

          ride the free instrumentation. Add your own meters and activity sources for the paths that carry your real work (a use-case pipeline, a background drain), and emit RED from a layer you already have (a logging decorator) rather than sprinkling it through every handler. -
        12. Make expensive fidelity a knob, not a rewrite. Gate the highest-volume metric families and - head-based trace sampling behind configuration, and make every knob fail toward keeping data: drop a - family only on an explicit boolean, ignore an out-of-range sample ratio, and treat a typo as sample-all.
        13. +
        14. Make expensive fidelity a knob, not a rewrite, and pick each knob's failure direction on purpose. + Gate the highest-volume metric families and head-based trace sampling behind configuration. A knob that + removes a family should drop it only on an explicit boolean, a knob that adds a redundant stream should + stay off unless explicitly enabled, and an out-of-range sample ratio should mean sample-all, so a typo + can neither blind you nor silently grow the bill.
        15. Check that a metrics toggle is actually authoritative. If a vendor distro adds a meter behind your back, skipping your own Add call changes nothing; a drop View on the meter applies to the whole provider and does.
        16. @@ -556,8 +612,9 @@

          Apply this even without MMCA

        The takeaway: observability is a hosting-layer default, not a per-app afterthought. Wire the useful signal once for every host, instrument the paths auto-instrumentation cannot see, and make the expensive fidelity a - knob that fails toward data, because the two ways this goes wrong in production are a telemetry bill you did - not expect and a trace that cannot answer the question you actually have.

        + knob whose typo can never blind you or silently grow the bill, because the two ways this goes wrong in + production are a telemetry bill you did not expect and a trace that cannot answer the question you actually + have.


        What we covered: why auto-instrumentation is structurally blind to the CQRS pipeline and the outbox, how one ConfigureOpenTelemetry call in the shared Aspire defaults wires logs, metrics, and traces plus nine @@ -567,9 +624,10 @@

        Apply this even without MMCA

        MMCA.Common.Scheduler run, duration and lag instruments, and the MMCA.Common.Broker, MMCA.Common.OutputCache, MMCA.Common.BestEffort and MMCA.Common.AI streams) plus Polly's resilience meter on - every host, how five - cost knobs (Telemetry:DisableHttpClientMetrics, Telemetry:DisableRuntimeMetrics, - Telemetry:EnablePollyDurationMetrics, Telemetry:TracesSampleRatio and Telemetry:FilterProbeTelemetry) + every host, how six + cost knobs (Telemetry:DisableAspNetCoreMetrics, Telemetry:DisableHttpClientMetrics, + Telemetry:DisableRuntimeMetrics, Telemetry:EnablePollyDurationMetrics, Telemetry:TracesSampleRatio + and Telemetry:FilterProbeTelemetry) trim spend without going dark, why a drop View is what makes a metrics toggle authoritative over the Azure Monitor distro, how OutboxPollFilterProcessor drops idle poll spans from two drains before export while real work survives, how the exporter (OTLP or Azure Monitor, or diff --git a/articles/open-sourced-enterprise-dotnet-34-categories.html b/articles/open-sourced-enterprise-dotnet-34-categories.html index a4e0207e..c4706736 100644 --- a/articles/open-sourced-enterprise-dotnet-34-categories.html +++ b/articles/open-sourced-enterprise-dotnet-34-categories.html @@ -175,7 +175,7 @@

        What it is

        -

        MMCA.Common is a set of nineteen NuGet packages that give you a DDD + Clean Architecture + CQRS +

        MMCA.Common is a set of twenty-two NuGet packages that give you a DDD + Clean Architecture + CQRS foundation as a modular monolith, plus the extraction boundaries to pull a module out into its own microservice later without rewriting application code.

        The packages layer strictly, each one only depending on the layers below it:

        @@ -190,23 +190,26 @@

        What it is

        Shared (Result pattern, errors, DTOs, value objects)

        A few packages sit off to the side of that stack rather than on top of it. UI and Grpc depend on Shared only: the Blazor UI stays WebAssembly-friendly, and Grpc is pure transport that must not - couple to Domain, Application, or Infrastructure. The rest of the UI family builds on UI rather than - the layer stack: UI.Web is the web-host UI package, and UI.Maui (the one MAUI-target package) - depends on UI plus Shared only (ADR-042).

        -

        Two more packages sit outside the stack entirely. Gateway is the YARP edge that fronts the service - hosts once modules are extracted (ADR-008), and AI is a governed boundary for language-model calls, - isolated, versioned, evaluated, observed, and bounded in one package so a second AI feature inherits - the rules instead of copying them (ADR-120). The nineteenth package is MMCA.Common itself: a - metapackage that ships no assembly, one PackageReference in place of the six a standard application + couple to Domain, Application, or Infrastructure. UI.Maui (the one MAUI-target package) depends on + UI plus Shared only (ADR-042). UI.Web is the one UI package that sits above the stack instead: it + is the Blazor Web host layer, referencing UI, API, and Aspire directly, which is exactly what keeps + those server dependencies out of the WebAssembly-safe UI.

        +

        More packages sit outside the stack entirely. Gateway is the YARP edge that fronts the service + hosts once modules are extracted (ADR-008). The AI family is a governed boundary for language-model + calls (ADR-120): AI isolates, versions, evaluates, observes, and bounds every call so a second AI + feature inherits the rules instead of copying them; AI.Anthropic and AI.OpenAI are provider adapters + that each register one provider factory, so the governed package never names a vendor; and AI.Testing + ships the replay harness that pins prompt contracts. The twenty-second package is MMCA.Common itself: + a metapackage that ships no assembly, one PackageReference in place of the six a standard application host always takes (ADR-101).

        Adding it to a solution you already have is one line, and each package transitively pulls the layers beneath it:

        dotnet add package MMCA.Common.API

        API brings Infrastructure, which brings Application, Domain, and Shared. The other packages - (Grpc, UI, UI.Web, UI.Maui, Aspire, Aspire.Hosting, Gateway, AI, and five Testing.* - packages) are opt-in for the surface you need.

        + (Grpc, UI, UI.Web, UI.Maui, Aspire, Aspire.Hosting, Gateway, the four AI packages, and + five Testing.* packages) are opt-in for the surface you need.

        Starting from nothing is a different command, because a package reference is not an application. A - solution on this framework is twelve projects and roughly 6,600 lines of plumbing before any business + solution on this framework is twelve projects and roughly 9,000 lines of C# and Razor before any business logic, so the framework ships a dotnet new pack that writes all of it:

        dotnet new install MMCA.Templates
         dotnet new mmca-app -n Contoso.Support --module Orders --aggregate Order
        @@ -226,11 +229,12 @@

        The one thing that makes it diffe
      14. At runtime, by NetArchTest fitness functions that assert the same rules against the compiled assemblies.
      -

      Those fitness functions do not live as copy-pasted test code in three repos. They live once, in a +

      Those fitness functions do not live as copy-pasted test code in each repo. They live once, in a shipped package, MMCA.Common.Testing.Architecture, which exposes a reusable rule library and abstract - test bases (136 test methods across 53 base classes). MMCA.Common's own build runs - 267 of them; the two consumer apps subclass the same bases and supply their own architecture map, - so the rules are literally identical across all three codebases.

      + test bases (141 test methods across 55 base classes). MMCA.Common's own build executes 339 fitness + tests built on them. MMCA.ADC and MMCA.Store subclass the same bases and supply their own architecture + map, and so does MMCA.Helpdesk, the reference app the templates are staged from, so the rules are + literally identical in every codebase that runs them.

      This is the line I care about most: if a rule matters, it should be a check, not a comment.

      Modular monolith now, microservices later, no rewrite

      The other thesis baked into the framework is that "monolith vs microservices" is a false binary. You @@ -255,31 +259,31 @@

      I scored it on two axe

      I graded MMCA.Common against a 34-category architecture rubric (backend, front-end, and operational/governance categories), scoring each category on two axes: Maturity (how well-governed the process is) and Implementation (how much substance is actually executed). It sits at a - maturity index of 97.0% and an implementation index of 86.0% across all 34 categories + maturity index of 96.6% and an implementation index of 86.0% across all 34 categories (internationalization ships in the framework as en-US plus Spanish under ADR-027, which supersedes the single-locale ADR-011, so it scores on both axes like every other category; nothing is excluded as N/A). Then I committed the full evaluation to the repo, with every category's two scores, the evidence, and the honest gaps.

      The rubric itself is versioned. Version 2 (ADR-110) keeps all 34 categories and scores category 10 as Messaging & Integration Architecture (Maturity 4 / Implementation 9) and category 16 as AI-Native - Application Architecture (Maturity 3 / Implementation 6), which is where the governed language-model + Application Architecture (Maturity 4 / Implementation 9), which is where the governed language-model boundary is graded.

      The pattern in the scores is the same line from earlier: every category that earned top marks was backed by a fitness function or a compile-time guard. Every category capped lower either left the design to code review, or has its real proof living downstream in a consumer app. Clean Architecture, - SOLID, microservices readiness, CQRS, and testability all sit at Maturity 4 / Implementation 9, and all - of them are enforced automatically.

      + microservices readiness, CQRS, and testability all sit at Maturity 4 / Implementation 9, and all of them + are enforced automatically. SOLID sits lower, at Maturity 3 / Implementation 8, for exactly that reason: + the principles are applied throughout, but only two of the five are enforced automatically.

      Implementation is the weaker axis on purpose. A framework ships mature, well-governed mechanisms whose - full execution often completes in the apps that consume it. Deployment, resilience recovery, and - data-migration gating all score higher on maturity than on implementation precisely because the - substance they reward (infrastructure-as-code, a drilled restore, a CI migration step) lives in - MMCA.ADC and MMCA.Store, not in a library.

      + full execution often completes in the apps that consume it. Deployment and resilience recovery both + stop at Implementation 8 precisely because the substance they reward (a real deploy, production + recovery targets proven against real cloud backups) lives in the consuming apps, not in a library.

      The headline gap the rubric named was Compliance and Privacy: soft-delete everywhere and no right-to-erasure path, which is the exact GDPR conflict the rubric names. I wrote that down rather than hiding it, and it became ADR-005, a real anonymization extension point, and a PII fitness function that fails the build. That is the whole point of scoring yourself in public: the gaps turn into the roadmap.

      It runs in production, on two real apps

      -

      MMCA.Common is not a toy. Two deployed apps consume the same nineteen packages:

      +

      MMCA.Common is not a toy. Two deployed apps are built on it:

      • MMCA.ADC, the Atlanta Developers Conference app, deployed to Azure and used to run a live event.
      • MMCA.Store, an e-commerce app with Catalog, Sales, and Identity modules and Stripe integration.
      • diff --git a/articles/optimistic-concurrency-rowversion.html b/articles/optimistic-concurrency-rowversion.html index 77a1af36..17fef46a 100644 --- a/articles/optimistic-concurrency-rowversion.html +++ b/articles/optimistic-concurrency-rowversion.html @@ -5,24 +5,24 @@ - Optimistic concurrency you cannot opt out of: RowVersion from the database to a required If-Match · MMCA · Ivan Ball-llovera + Optimistic concurrency with a required If-Match: RowVersion from the database to a 412 · MMCA · Ivan Ball-llovera - + - + - + - + @@ -158,7 +158,7 @@

        Data & persistence · No. 13

        -

        Optimistic concurrency you cannot opt out of: RowVersion from the database to a required If-Match

        +

        Optimistic concurrency with a required If-Match: RowVersion from the database to a 412

        Two admins open the same session, both edit it, both hit Save. Without a precondition the @@ -191,8 +191,8 @@

        Why it matters, and why it

        The MMCA answer: a database token, handed out as an ETag, demanded back as a precondition

        The mechanism is a concurrency token that the database manages, the read model exposes, the client states back in the If-Match header, and the persistence layer plants as EF's original value so a stale update - fails inside the UPDATE statement itself. There is exactly one transport for it, and no way past it: a - conditional write that states no precondition never reaches the action.

        + fails inside the UPDATE statement itself. There is exactly one transport for it, and on a guarded action + no way past it: a conditional write that states no precondition never reaches the action.

        It rests on four members.

        AuditableBaseEntity<TId> carries a byte[] RowVersion property with a private setter, so every aggregate root and every child entity inherits it and no domain code ever sets it. On SQL Server it maps @@ -246,20 +246,27 @@

        The detail that actually m as part of the write. If the row's current token no longer matches (someone else wrote since the client read), the UPDATE affects zero rows and EF raises DbUpdateConcurrencyException. There is no window. The check and the write are the same statement.

        -

        ConfigureConcurrencyTokens wires this for every non-owned IAuditableEntity in the model, uniformly. - On SQL Server the property is configured with IsRowVersion (server-generated). On other relational - providers it falls back to IsConcurrencyToken over the same byte[], application-managed. One - configuration, every table, no per-entity boilerplate.

        +

        ConfigureConcurrencyTokens wires this for every non-owned IAuditableEntity in a relational context's + model, uniformly, and the engine decides how. Each data source engine declares a RowVersionStrategy in + its capabilities. SQL Server declares StoreGenerated, so the property is configured with IsRowVersion + (server-generated). PostgreSQL and SQLite declare ClientStamped: the property falls back to + IsConcurrencyToken over the same byte[], and AuditSaveChangesInterceptor writes a fresh value on + every insert and every update, so the next stale writer's WHERE clause misses. Cosmos declares None, + and its context never calls ConfigureConcurrencyTokens. One configuration, every auditable table on a + relational engine, no per-entity boilerplate.

        From exception to a status at the edge

        DbUpdateConcurrencyException is a DbUpdateException, and the framework already has one handler for that whole family. DbUpdateExceptionHandler translates any DbUpdateException into an RFC 9457 409 Conflict ProblemDetails, logs the full exception, and returns a deliberately generic detail message ("A data conflict occurred. Please retry or contact support.") so the database schema never leaks to the - client. This is the same edge that already returns 409 for unique-constraint and foreign-key violations, - so a concurrency conflict inherits its translation, logging, and schema-safe message with no new - middleware. On a guarded action the conflict never reaches the client as a 409: the filter rewrites the - outcome to 412 after the action, keeping the problem-details body exactly as it was built. Either way the - caller gets a status it can act on: reload, show the fresh values, let the human decide.

        + client. This is the same edge that returns 409 for unique-constraint and foreign-key violations, so on an + unguarded endpoint a concurrency conflict inherits its translation, logging, and schema-safe message with + no new middleware. On a guarded action the concurrency conflict never reaches that handler: the filter + catches the DbUpdateConcurrencyException itself and answers 412 with its own problem details (title + "Precondition failed", stable error code Concurrency.PreconditionFailed). A unique or foreign-key + DbUpdateException thrown on the same action is not caught there and still reaches the client as the + generic 409. Either way the caller gets a status it can act on: reload, show the fresh values, let the + human decide.

        The transport: a weak ETag out, a required If-Match back

        The same RowVersion, the same SetOriginalRowVersion extension point, the same comparison inside the UPDATE. The header is where the token lives on the wire, which means anything that speaks HTTP can @@ -278,10 +285,11 @@

        The transport: a header and * both count, because the wildcard names no particular version), a malformed tag is a 400 short-circuit because the server cannot tell what the caller meant, and only a decodable tag lets the action run.

        -

        Then the status changes. After the action, RewriteConflictToPreconditionFailed turns the conflict - outcome, both a DbUpdateConcurrencyException and an already-built 409 result, into - 412 Precondition Failed. It does so unconditionally, because every request that reached the action - stated a precondition. RFC 9110 reserves 412 for a precondition the client stated in a conditional request +

        Then the status changes. After the action, RewriteConflictToPreconditionFailed turns two conflict + outcomes into 412 Precondition Failed: a thrown DbUpdateConcurrencyException gets a fresh 412 problem + response, and a 409 result the action itself returned keeps its problem-details body and has only its + status relabeled. It does so unconditionally, because every request that reached the action stated a + precondition. RFC 9110 reserves 412 for a precondition the client stated in a conditional request header, which is exactly what If-Match is; 409 stays the answer on the unconditional endpoints, for a conflict the client never conditioned on.

        PUT /orders/42/pay
        @@ -296,12 +304,14 @@ 

        The transport: a If-Match: W/"AAAAAAAAB9E=" 412 Precondition Failed

        The generic UpdateAsync on CrudEntityControllerBase carries the attribute, so every CRUD PUT - inherits the precondition without anyone remembering it. Beyond that it is applied by hand, on 40 actions - across 18 controllers today: 24 across seven controllers in Store (five in Sales' OrdersController, - five in ProductsController, four in ProductVariantsController, three each in CustomersController - and ReviewsController, two each in CategoriesController and InventoryItemsController) and 16 across - eleven in ADC (three in Conference's EventsController, three in Engagement's SessionQuestionsController, - two in its LivePollsController, and one each in eight more Conference controllers). Nothing here decides + inherits the precondition without anyone remembering it. Beyond that it is applied by hand, on 41 actions + across 23 controllers today: 25 across eleven controllers in Store (in Sales, two in OrdersController, + three in OrderFulfillmentController and two in InventoryItemsController; in Catalog, four each in + ProductAttributesController and ProductVariantsController, two each in CategoriesController and + ReviewModerationController, and one each in ProductsController, ProductImagesController and + ReviewsController; in Identity, three in CustomersController) and 16 across twelve in ADC (three in + Engagement's SessionQuestionsController, two in its LivePollsController, two in Conference's + EventLifecycleController, and one each in nine more Conference controllers). Nothing here decides conditional GET. The tag exists to be stated back on the next write, and there is no If-None-Match handling and no 304 path.

        The invariant: one source for the precondition

        @@ -313,35 +323,47 @@

        The invariant: one source UpdateRequests_ShouldNotImplement_IConcurrencyAware, and both consumers subclass it: ADC and Store each supply their own IArchitectureMap. A module with no mutable aggregate is legitimately vacuous. This is invariant-over-discipline (ADR-015), and it is the type-level half of the rule; the 428 is the caller-level - half, so neither a request model nor a client can quietly reintroduce last-write-wins.

        + half, so on a guarded action neither a request model nor a client can quietly reintroduce + last-write-wins. Which actions are guarded is a separate question that no rule answers: the attribute is + opt-in per action, and an unguarded write is still last-write-wins.

        Both apps have adopted the pattern end to end. In ADC, UpdateSessionHandler overrides RowVersion to report the token that arrived on UpdateSessionCommand, SessionDTO implements IConcurrencyAware, and SessionUpdateRequest implements only its field contract. In Store, the same shape runs across all three modules: Catalog and Identity edits are appliers over the shared handler base (changing a customer's email, changing a product's brand), and the Sales order transitions (PayOrderHandler, DeliverOrderHandler, CancelOrderHandler, ShipOrderHandler, UpdateShipmentHandler) each report the - command's token the same way. Both apps run one database per service (ADR-006), so each per-service - database is created with the RowVersion column on every table by its own module's InitialCreate - migration, and the token is present from the first row.

        + command's token the same way. Both apps run one database per service (ADR-006), and every table mapped + from an auditable entity carries the RowVersion column from the migration that creates it: Store's + Catalog InitialCreate adds it to the aggregate tables (its inbox and outbox tables carry none), and the + later AddProductReviews migration adds it with the review tables.

        Trade-offs, honestly

          -
        • The precondition is mandatory, and that is a real constraint. A caller that has not read the - resource cannot write it. There is no null token, no wildcard escape, no legacy-client path: a write - with no If-Match is a 428 and stops there. Scripts and generic REST tools have to do a GET first, and - a client that drops the header sees an immediate error instead of a silent overwrite. That is the - trade the framework makes, deliberately.
        • -
        • The 409 is coarse, and the 412 inherits it. All DbUpdateExceptions map to one 409 with a generic - message, so from the status and body alone a client cannot tell a concurrency conflict from a - unique-constraint or foreign-key violation. That is deliberate (no schema leak), but it means retry logic - treats the three the same. The rewrite keys on the conflict outcome, not its cause, so on a guarded - action all three come back as 412, and one of them then wears a status naming a precondition the client - did not actually violate.
        • +
        • On a guarded action the precondition is mandatory, and that is a real constraint. A caller that + has not read the resource cannot write it. There is no null token, no wildcard escape, no legacy-client + path: a write with no If-Match is a 428 and stops there. Scripts and generic REST tools have to do a + GET first, and a client that drops the header sees an immediate error instead of a silent overwrite. + That is the trade the framework makes, deliberately.
        • +
        • Opt-in per action. [SupportsIfMatch] has to be applied, and no fitness rule requires it anywhere, + so a conditional write exists exactly where someone annotated one. The handler base's RowVersion + override defaults to no token, and with no token it skips the stamp, so an endpoint nobody guarded is + last-write-wins with no error. The fitness rule covers what an update request must not carry, not which + actions are guarded.
        • +
        • The 409 is coarse, and only the guarded concurrency path escapes it. Every DbUpdateException + that reaches the global handler maps to one 409 with a generic message, so on an unguarded endpoint a + client cannot tell a concurrency conflict from a unique-constraint or foreign-key violation. That is + deliberate (no schema leak), but it means retry logic treats the three the same. On a guarded action the + concurrency conflict is a 412 with its own error code, and a thrown unique or foreign-key violation + stays a 409. The relabel of a returned 409 keys on the conflict outcome, not its cause, so an action + whose own Error.Conflict result means a duplicate key reports it as a 412, error codes intact, under a + status naming a precondition the client did not actually violate.
        • It does not merge. Optimistic concurrency detects the collision and refuses the stale write. It does not reconcile the two edits for you. What to do on a 412 (reload and retry, or surface a diff to the human) is the caller's decision, not the framework's.
        • -
        • Cross-engine asymmetry. SQL Server gets a server-generated rowversion; SQLite and other relational - providers get an application-managed IsConcurrencyToken over the same byte[]. Cosmos has its own - ETag mechanism that is not routed through this property.
        • +
        • Cross-engine asymmetry. SQL Server gets a server-generated rowversion; PostgreSQL and SQLite get + an application-managed IsConcurrencyToken over the same byte[], re-stamped by the audit interceptor + on every insert and update. Cosmos gets no framework concurrency token at all: its engine declares + RowVersionStrategy.None and its context skips ConfigureConcurrencyTokens, so [SupportsIfMatch] + over a Cosmos-mapped entity stamps an original value on a property EF does not compare.
        • A child-level precondition costs a second field. If-Match names exactly one version, and that slot belongs to the aggregate root, so a write that needs to condition on a child row states that second precondition in the body: Store's ProductVariantChangePriceRequest carries a required @@ -353,8 +375,9 @@

          Trade-offs, honestly

          so the precondition is actually evaluated, which means a conditional write always emits a root UPDATE and always advances the root's token, even when only a child row changed. Correctness over a spared statement: the cost is that every other editor holding that aggregate's tag now has a stale one.
        • -
        • Adoption is a per-database migration. A new database, or a table added later, must carry the - RowVersion column for the token to exist there.
        • +
        • Adoption is a schema step per database. Every auditable table needs the RowVersion column for the + token to exist there, so a new database, or a table added later, has no version to condition on until + its migration carries the column.

        None of these are reasons to keep last-write-wins. They are the reasons to state the precondition explicitly and to decide, per endpoint, what a conflict means to your user.

        @@ -384,12 +407,12 @@

        Apply this even without MMCA

        an overwrite nobody notices.


        What we covered: why a load-modify-save handler silently loses the first of two concurrent edits, how - MMCA.Common gives every auditable entity a database-managed RowVersion, renders it on the read as a weak - ETag through IConcurrencyAware, requires it back in If-Match so a write with no precondition is a - 428 Precondition Required, plants it as EF's original value via SetOriginalRowVersion (and touches the - root so the comparison always runs) to detect the conflict atomically inside the UPDATE, rewrites that - conflict to 412 Precondition Failed at the edge, and keeps the token out of every request body with a - build-wide fitness function.

        + MMCA.Common gives every auditable entity on a relational engine a RowVersion token whose mapping each + engine declares, renders it on the read as a weak ETag through IConcurrencyAware, requires it back in + If-Match on a guarded action so a write with no precondition is a 428 Precondition Required, plants it + as EF's original value via SetOriginalRowVersion (and touches the root so the comparison always runs) to + detect the conflict atomically inside the UPDATE, answers that conflict with 412 Precondition Failed at + the edge, and keeps the token out of every request body with a build-wide fitness function.

        Next in the series: self-ordering modules, discovered and Kahn-sorted so a dependency is always registered before the modules that need it.

        MMCA.Common is Apache-2.0 licensed and open source. Star the repo, read ADR-035 for the decision record, or diff --git a/articles/password-hashing.html b/articles/password-hashing.html index 2592af88..4018a22c 100644 --- a/articles/password-hashing.html +++ b/articles/password-hashing.html @@ -212,10 +212,12 @@

        Why constant-time matters more than it looks

        The naive comparison computed == stored returns as soon as it finds the first differing byte. That is a timing side channel: an attacker who can measure response time learns how many leading bytes @@ -242,7 +244,7 @@

        One algorithm, an Infrastructure registration change, and the application handlers never name a hashing primitive.

        Defense in depth: PII at rest, not just passwords

        Passwords are the famous case, but they are not the only personal data sitting in your database. - MMCA.Common ships field-level PII encryption as a separate control, now recorded in its own decision + MMCA.Common ships field-level PII encryption as a separate control, recorded in its own decision record (ADR-037): EncryptedStringConverter is an EF Core value converter that encrypts a column with AES-256-GCM transparently on the way to the database and decrypts on the way out. GCM is authenticated encryption, so it protects confidentiality and detects tampering. It is the framework @@ -256,8 +258,9 @@

        Defense in depth: PII a (SonarAnalyzer and Meziantou) carry security-relevant rules. The security category (§11) scored Maturity 4 / Implementation 8 on the framework's two-axis rubric (Maturity 0-4, Implementation 0-10), on the strength of JWT algorithm pinning, this hashing scheme (recorded in ADR-102), - AES-256-GCM field encryption, server-side authorization, and rate limiting (brute-force protection - applies exponential-backoff lockouts and clears the counter on success).

        + permission-based server-side authorization, and rate limiting (brute-force protection applies + exponential-backoff lockouts and clears the counter on success). The field-encryption converter is not + part of that credit: the scorecard entry lists it as shipped but latent.

        Trade-offs, honestly

        A credible security post owns its rough edges, and a few sit around this hash rather than in it.

          @@ -269,14 +272,17 @@

          Trade-offs, honestly

          beside the setting). Permissive dev CORS is a development affordance in the code, not a recommendation for what you run in production.
        • Iteration counts are a moving target. 600,000 PBKDF2-SHA512 iterations matches 2023 OWASP - guidance; that number ratchets up with hardware. Treat the iteration count as a config decision you - revisit, and prefer a memory-hard KDF (Argon2id) when you can, which is exactly why the algorithm - lives behind an interface here.
        • + guidance; that number ratchets up with hardware. Here it is a private constant pinned by a test, not + a setting, and because the stored record carries no iteration count, raising it is a deliberate code + change that needs a plan for the hashes already stored. Revisit it anyway, and prefer a memory-hard + KDF (Argon2id) when you can, which is exactly why the algorithm lives behind an interface here.
        -

        The current §11 entry itself names two limitations, both upstream of the hash: vault/managed-identity - secret binding is delegated to the deployer (correct for a library), and authorization is RBAC with a - capability layer rather than a full resource- or attribute-based policy engine. None of these undermine - the storage scheme. They are the operational and governance work that surrounds a correct hash.

        +

        The current §11 entry itself names three reasons it holds at Implementation 8, all upstream of the + hash: the rubric's threat-model criterion is unmet, authorization is RBAC with a capability layer plus + opt-in ownership checks rather than a full resource- or attribute-based policy engine, and the + failed-login counter behind the brute-force lockout is documented as non-atomic. None of these + undermine the storage scheme. They are the operational and governance work that surrounds a correct + hash.

        Apply this even without MMCA

        The rules port to any stack, and they are short enough to memorize:

          diff --git a/articles/permission-based-authorization.html b/articles/permission-based-authorization.html index 7a5b2b1c..1b10119a 100644 --- a/articles/permission-based-authorization.html +++ b/articles/permission-based-authorization.html @@ -170,7 +170,7 @@

          Permission Clean enough. You add RequireAttendee, RequireAdmin, RequireAuthenticated, and for a while the mapping from "who is allowed" to "which attribute" is obvious.

          Then the requirement arrives that role checks cannot express cleanly. You need a content editor: someone - who may curate the session catalog but must not manage events, rooms, the question queue, or the organizer + who may curate the session catalog but must not manage events, rooms, feedback questions, or the organizer session-selection workflow. An organizer can do all of those. The new role can do exactly one slice of them.

          Now look at your options with role-name checks. You can add ContentEditor to every [Authorize(Roles = "Organizer")] on the endpoints they should reach, and remember to leave it off the @@ -204,9 +204,8 @@

          Both reads are framework-wide definitions rather than local helpers. GetRoleValues() gathers roles from - ClaimTypes.Role, "role", and "roles", so it works whether or not inbound-claim mapping is on, and it - is the framework's single definition of "the caller's roles", so no other reader can disagree with the - handler about who is privileged. HasPermissionClaim(...) is the single definition of "the token itself - grants this". Baking a permission claim into the token is therefore optional: role-derived resolution is - the default, and a token that already carries explicit permissions short-circuits the registry lookup.

          + ClaimTypes.Role, "role", and "roles", so it works whether or not inbound-claim mapping is on; the + CQRS gate reads the same three claim types through ICurrentUserService.Roles. HasPermissionClaim(...) + is the single definition of "the token itself grants this", and both gates call it. The framework's + TokenService writes that claim at sign-in: every access token carries one permission claim for each + permission the minting host's registry grants the account's role. Both apps' Identity hosts apply every + module's grant map before minting (AddTokenPermissionGrants()), so a service that does not own a + module's grant map, the CQRS gate in that service, and the Blazor navigation all read the capability from + the token rather than from a registry they do not hold.

          The same registry gates use cases, not just routes. A command or query that implements IRequiresPermission is checked by AuthorizationGate.Evaluate inside the CQRS decorator pipeline, against that same registry and that same claim read, returning a Forbidden error rather than throwing. @@ -259,8 +261,8 @@

          Inert until adopted

          The piece that makes this safe to add to a framework everyone consumes is that wiring it confers nothing until a host grants something. AddAuthorizationPolicies() always registers the handler (via - TryAddEnumerable), the policy provider (via Replace), and an empty registry, which is bound as both - IPermissionRegistry and IPermissionCatalog so the two contracts can never answer from different maps. + TryAddEnumerable), the policy provider (via Replace), and an empty registry, with IPermissionRegistry + and IPermissionCatalog both forwarding to that one built instance. The same call also installs a fail-closed fallback policy, so an endpoint that declares no authorization metadata at all requires an authenticated caller and a deliberate anonymous route says so with [AllowAnonymous]. The capability mechanism itself still confers nothing beyond explicit claims until a @@ -273,8 +275,10 @@

          Inert until adopted

          alias the framework-owned users:manage and roles:manage from AdministrationPermissions so the shared administration controller bases can carry their own [HasPermission]. MMCA.Store defines eleven of its own across Catalog, Sales and Identity, each module granting its whole set to its own Admin role from its own - AddPermissions(...) call. The role vocabulary stays the application's throughout: MMCA.Common declares no - role names at all. The registry, the catalog, the handler and the policy provider carry nineteen unit tests + AddPermissions(...) call. Both apps' Identity hosts also call AddStoredPermissionGrants(...), which + decorates IPermissionRegistry with a LayeredPermissionRegistry (the compiled grants plus stored ones, + union only) while IPermissionCatalog keeps enumerating the compiled set. The role vocabulary stays the + application's throughout: MMCA.Common declares no role names at all. The registry, the catalog, the handler and the policy provider carry nineteen unit tests between them (PermissionRegistryTests, PermissionCatalogTests, PermissionAuthorizationHandlerTests, PermissionPolicyProviderTests), and the ADC grant maps carry dedicated grant tests of their own.

          Trade-offs, honestly

          @@ -314,8 +318,9 @@

          Apply this even without MMCA

          perm:{name} policy lazily means you never hand-register one policy per permission, and it can fall through to the default provider so any policy you do register by hand survives.
        1. Accept two grant sources. Honor an explicit permission claim if the token carries one, and fall - back to role-derived resolution if it does not. That keeps tokens small by default and lets you push - permissions into the token later without changing endpoints.
        2. + back to role-derived resolution if it does not. Whether you emit permission claims at sign-in is then a + minting decision, not an endpoint change, and emitting them lets a service that holds no grant table + still answer the question.
        3. Make it inert until used. Register the mechanism with an empty registry so the feature is free to ship and confers nothing until a module actually grants a capability.
        diff --git a/articles/polyglot-persistence.html b/articles/polyglot-persistence.html index 6a2122d7..d3eeb1ec 100644 --- a/articles/polyglot-persistence.html +++ b/articles/polyglot-persistence.html @@ -187,11 +187,11 @@

        Two axes, not one

        Database-per-service (ADR-006) is the Name axis: which physical database owns an entity, so that the Conference module's data and the Engagement module's data sit in separate databases that can be deployed and scaled independently. Article 10 covers that axis in full.

        -

        Polyglot persistence (ADR-018, extended to a fourth engine by ADR-113) is the Engine axis: which - storage technology backs an entity, SQL Server vs PostgreSQL vs Cosmos DB vs SQLite, independent of - which logical database it belongs to. The two compose. An entity has a Name (its database) and an - Engine (its technology), and you can change one without touching the other. This article is about the - Engine axis.

        +

        Polyglot persistence (ADR-018, extended to a fourth engine by ADR-113, and organized as one strategy + object per engine by ADR-130) is the Engine axis: which storage technology backs an entity, SQL + Server vs PostgreSQL vs Cosmos DB vs SQLite, independent of which logical database it belongs to. The + two compose. An entity has a Name (its database) and an Engine (its technology), and you can change + one without touching the other. This article is about the Engine axis.

        The configuration hierarchy: where the engine lives

        Every entity in the framework gets an EntityConfiguration class. The relevant inheritance chain is short and worth holding in your head.

        @@ -200,41 +200,53 @@

        The configuration hi DomainEvents collection so EF never tries to persist it. That is all. It knows nothing about engines.

        Above it sits the piece that ADR-018 added: a single, engine-aware - EntityTypeConfiguration<TEntity, TIdentifierType> base. This one class carries all the - table-versus-container, schema, and key-mapping logic for every engine. Its Configure method reads - the [UseDataSource(...)] attribute off the concrete configuration, and if the attribute is absent it - throws InvalidOperationException at startup. A configuration with no declared engine is a hard error, - not a silent default. Then it dispatches to a protected static ApplyEngineConventions helper that is - a switch over the engine, four cases in three branches:

        + EntityTypeConfiguration<TEntity, TIdentifierType> base. Its Configure method reads the + [UseDataSource(...)] attribute off the concrete configuration, and if the attribute is absent it + throws InvalidOperationException as the model is built. A configuration with no declared engine is + a hard error, not a silent default. Then it hands the entity to a protected static ApplyEngineConventions helper, and that helper holds no branching at all. Its body is one call: + DataSourceEngines.For(engine).ApplyKeyAndTableMapping<TEntity, TIdentifierType>(builder).

        +

        The per-engine knowledge lives one level down, in one strategy class per engine (ADR-130). + IDataSourceEngine is the internal contract every engine implements: descriptive facts, a small + Capabilities record (is the engine relational, how it migrates, how it stamps the row version), and + a handful of behaviour hooks, one of which is the key-and-table mapping. DataSourceEngines is a + static registry that holds the four strategies in one array and looks them up by the DataSource + enum value. The four mappings:

          -
        • SQL Server and PostgreSQL, one shared branch deliberately: ToTable(Name, schema) where the - schema is the module name derived from the entity's namespace (the segment before "Domain"), - HasKey(Id), and identity-column key generation. PostgreSQL takes the SQL Server mapping unchanged, - module schema and PascalCase identifiers included, so an entity moves between the two engines by - changing its configuration base class and nothing else (ADR-113). PostgreSQL house style (snake_case, - the public schema) is a consumer's naming-convention plugin, not a framework decision.
        • -
        • SQLite: ToTable(Name) with no schema, HasKey(Id), and SQLite identity columns.
        • +
        • SQL Server: ToTable(Name, schema) where the schema is the module name derived from the + entity's namespace (the segment before "Domain"), HasKey(Id), and ValueGeneratedOnAdd() for a + store-generated key.
        • +
        • PostgreSQL: deliberately the same code as SQL Server, module schema and PascalCase identifiers + included, so an entity moves between the two engines by changing its configuration base class and + nothing else (ADR-113). PostgreSQL house style (snake_case, the public schema) is a consumer's + naming-convention plugin, not a framework decision.
        • +
        • SQLite: ToTable(Name) with no schema, HasKey(Id), and an identity column + (ValueGeneratedOnAdd().UseIdentityColumn(1, 1)).
        • Cosmos DB: ToContainer(moduleName).HasPartitionKey(Id), one container per module so a module's entities and their relationships co-locate, HasKey(Id), and a client-side CosmosIntIdValueGenerator for keys (Cosmos has no server-side IDENTITY).
        • -
        • Anything else: a default branch that throws InvalidOperationException. An engine with no - mapping fails loudly instead of falling through to a relational guess.
        • +
        • Anything else: DataSourceEngines.For throws InvalidOperationException for a value with no + registered strategy. An engine with no mapping fails loudly instead of falling through to a + relational guess.
        -

        Key generation is conditional in every branch: the engine's generator applies only when the entity's - identifier is store-generated (typeof(TEntity).IsIdValueGenerated), and otherwise the key is - ValueGeneratedNever(), so an entity that supplies its own ids keeps them on every engine.

        -

        On top of that single base sit four thin shims: EntityTypeConfigurationSQLServer, +

        Key generation is conditional in every strategy: the engine's generator applies only when the + entity's identifier is store-generated (typeof(TEntity).IsIdValueGenerated), and otherwise the key + is ValueGeneratedNever(), so an entity that supplies its own ids keeps them on every engine.

        +

        The registry is static on purpose: model-building code (this configuration base, the EF conventions, + the soft-delete SQL builder) runs where no DI container is reachable, and the engine set is a closed + enum only the framework extends. A fifth engine is one strategy class plus one line in the registry. + What keeps it that way is a source-scanning fitness test, DataSourceBranchingFitnessTests, which + fails the test run on any reference to a concrete engine value outside the strategies and a short, + reasoned allow-list, and also fails when an allow-list entry goes stale. A new switch over the + engine cannot quietly reappear in a call site.

        +

        On top of the engine-aware base sit four thin shims: EntityTypeConfigurationSQLServer, EntityTypeConfigurationPostgreSQL, EntityTypeConfigurationCosmos, and - EntityTypeConfigurationSqlite. Each one is a one-line class. Its entire body is the attribute plus an - empty derivation. Here is the SQL Server shim, near enough verbatim:

        + EntityTypeConfigurationSqlite. None of them has a body. Each is the attribute plus a + semicolon-terminated derivation. Here is the SQL Server shim, verbatim apart from its doc comment:

        [UseDataSource(DataSource.SQLServer)]
         public abstract class EntityTypeConfigurationSQLServer<TEntity, TIdentifierType>
             : EntityTypeConfiguration<TEntity, TIdentifierType>
             where TEntity : AuditableBaseEntity<TIdentifierType>
        -    where TIdentifierType : notnull
        -{
        -    // no Configure override; all mapping lives in the engine-aware base
        -}
        + where TIdentifierType : notnull;

        The PostgreSQL, Cosmos, and SQLite shims are identical except for the attribute value (DataSource.PostgreSQL, DataSource.CosmosDB, DataSource.Sqlite). They exist purely so that a consumer can express the engine choice by which base class they derive from, without ever typing the @@ -266,13 +278,21 @@

        The entity move is one token

        } }

        The Session entity class does not change. The command handlers do not change. The query handlers do - not change. The DTOs and mappers do not change. The engine is resolved once at startup by the - EntityDataSourceRegistry, which reflects over the configuration assemblies, reads each config's - [UseDataSource] attribute, and records the engine in a frozen lookup. The right DbContext + not change. The DTOs and mappers do not change. Routing is the job of the EntityDataSourceRegistry, + a singleton built lazily on first access: it reflects over the configuration assemblies, reads each + config's [UseDataSource] attribute (and its logical database name), resolves the pair through + IDataSourceResolver into a DataSourceKey, and records the result in a frozen lookup, rescanning + once on a miss so a module assembly loaded later is still found. The right DbContext (SQLServerDbContext, PostgreSQLDbContext, CosmosDbContext, or SqliteDbContext, all sealed subclasses of the abstract ApplicationDbContext, one class per engine) is then built per data source, and the whole save and query pipeline routes through it without any caller knowing which engine answered.

        +

        One nuance keeps that honest. The attribute declares the engine, and the resolver honors it whenever + the host configures that engine. A host that does not configure the declared engine (a SQL Server + configuration running in a PostgreSQL-only host, say) is served from the engine it does configure, + rather than handed an empty connection string. EntityTypeConfiguration exposes that answer as + EffectiveEngine, so any hand-written SQL in a configuration body, such as an index filter, targets + the engine actually being built.

        When a relationship crosses an engine boundary

        A document store cannot enforce a foreign key into a SQL table. So the moment Session moves to Cosmos while the Event it references stays in SQL Server, the relationship between them spans two @@ -323,19 +343,23 @@

        Keeping a cross-source pr it resolves published Event ids and filters Session.EventId IN (...), which is portable across all four engines.

        There is even a fitness rule that enforces this discipline: an opt-in - SpecificationsDoNotNavigateToOtherEntities test fails the build if a specification navigates across - an entity boundary the way the un-translatable version above does.

        + SpecificationsDoNotNavigateToOtherEntities test fails the test run if a specification navigates + across an entity boundary the way the un-translatable version above does.

        The honest adoption note

        Here is the part most articles would quietly omit. All of the above is shipped and tested. None of it is running in production yet.

        -

        Today, every current production entity configuration uses the …SQLServer base. ADC runs SQL Server - only, across four databases (the Name axis), with no entity on PostgreSQL, Cosmos, or SQLite in - production. The SQLite base backs the fast test database in MMCA.Common's own infrastructure tests; - the Cosmos base is exercised by portability tests and a factory test. ADC Conference actually trialed the Session→Cosmos - and Room→SQLite move (the worked example throughout this article): it was built and locally tested, - then deliberately reverted to all-SQL-Server, with every framework extension point kept in place. The unified - base, the cross-source degrade convention, the Cosmos-index skip, the SQLite EnsureCreated path, the - cross-source specification, and the fitness rule are all in place and green.

        +

        Today, every current production entity configuration uses the EntityTypeConfigurationSQLServer + base. ADC runs SQL Server only, across four databases (the Name axis), with no entity on PostgreSQL, + Cosmos, or SQLite in production. The SQLite engine backs the fast test database in MMCA.Common's own + infrastructure tests, and the Cosmos engine path is exercised by a portability test whose + configuration declares [UseDataSource(DataSource.CosmosDB)] on the engine-aware base. ADC + Conference actually trialed the Session-to-Cosmos and Room-to-SQLite move (the worked example + throughout this article): it was built and locally tested, then deliberately reverted to + all-SQL-Server, with every framework extension point kept in place. The unified base and its four + engine strategies, the cross-source degrade convention, the Cosmos-index skip, the EnsureCreated + path for a source that names no migrations assembly (always on Cosmos, and on SQLite or PostgreSQL + until one is configured), the cross-source specification, and the fitness rule are all in place and + green.

        So treat PostgreSQL, Cosmos, and SQLite as supported, exercised extension points rather than dormant ones, but do not read this as "ADC is polyglot in production." It is not. The capability is real and has been trialed end to end, but no production entity routes to a non-SQL engine today. Saying so is @@ -352,16 +376,19 @@

        Trade-offs, honestly

        keys and embeds them in the predicate. That is ideal for "published events" or "active tenants," but an unbounded principal set would inline a very large IN list. The class documents this limit explicitly; it is a tool for the common bounded shape, not a general join replacement. -
      • Concurrency tokens differ by engine. SQL Server maps RowVersion to a server-generated - rowversion; SQLite has no server-generated equivalent, so the same token is application-managed - there, and PostgreSQL takes that same application-managed token rather than its native xmin, so it - is not the one engine whose entity shape differs (ADR-113). The entity model is one, but the - optimistic-concurrency mechanics underneath are not - identical across engines, and you should know which you are getting.
      • -
      • Cosmos has no durable outbox. CosmosDbContext overrides SupportsOutbox to false. Domain - events from a Cosmos-stored aggregate are dispatched in-process only, with no durable outbox row to - replay from. That is a real reliability difference from the relational path, and it is a deliberate - consequence of Cosmos having no relational OutboxMessages table.
      • +
      • Concurrency tokens differ by engine. Each strategy declares its row-version strategy. SQL Server + maps RowVersion to a server-generated rowversion; SQLite has no server-generated equivalent, so + the same token is client-stamped there, and PostgreSQL takes that same client-stamped token rather + than its native xmin, so it is not the one engine whose entity shape differs (ADR-113). Cosmos + declares no row-version strategy at all, so a Cosmos-stored entity has no optimistic-concurrency + token. The entity model is one, but the concurrency mechanics underneath are not identical across + engines, and you should know which you are getting.
      • +
      • Cosmos has no durable outbox. The outbox path runs only when the context's engine reports + IsRelational (and the host has the outbox enabled). Cosmos reports IsRelational: false, and + CosmosDbContext leaves OutboxMessage out of its model, so domain events from a Cosmos-stored + aggregate are dispatched in-process only, with no durable outbox row to replay from. That is a real + reliability difference from the relational path, and it is a deliberate consequence of Cosmos having + no relational OutboxMessages table.
      • Trialed, then reverted, not deployed. As above: the extension points are built and tested, ADC trialed the Cosmos/SQLite move and rolled it back to all-SQL-Server, and no production polyglot entity has shipped. Validate the engine behavior you depend on against your own data before you lean on it in production.
      • @@ -375,8 +402,10 @@

        Apply this even without MMCA

        property of the configuration, not the entity.
      • Put the engine choice behind a single attribute or base class, and make a missing engine a startup error, never a silent default. Loud beats subtle.
      • -
      • Centralize the per-engine mapping in one place (one switch over the engine), so the four - engine shims share identical logic and cannot drift.
      • +
      • Give each engine one strategy object that answers every engine question (mapping, capabilities, + dialect), looked up by the engine value, so call sites read engine facts instead of branching on + the engine. A new engine is then one class and one registry line, and a text-scan test can keep new + branches from creeping back into call sites.
      • Degrade cross-engine relationships automatically at model-build time: drop the impossible constraint, keep the scalar FK column, and make it a no-op when everything is on one engine.
      • For cross-engine filters, resolve principal keys first, then filter by foreignKey IN (keys). @@ -389,11 +418,12 @@

        Apply this even without MMCA

        you do not flip it on day one.


        What we covered: why welding an entity to a storage engine is an expensive, usually irreversible - decision, how MMCA.Common's engine-aware EntityTypeConfiguration base plus four thin - …SQLServer/PostgreSQL/Cosmos/Sqlite shims re-point the same entity to a different engine through one - [UseDataSource] attribute, how CrossDataSourceDegradeConvention and CrossSourceSpecification keep - cross-engine relationships and predicates working without rewrites, and the honest note that this is - shipped and tested but not yet running in ADC production.

        + decision, how MMCA.Common's engine-aware EntityTypeConfiguration base, its four per-engine + strategies, and four thin EntityTypeConfigurationSQLServer/PostgreSQL/Cosmos/Sqlite shims re-point + the same entity to a different engine through one [UseDataSource] attribute, how + CrossDataSourceDegradeConvention and CrossSourceSpecification keep cross-engine relationships and + predicates working without rewrites, and the honest note that this is shipped and tested but not yet + running in ADC production.

        Next in the series: navigation populators, the batch-loader that replaces EF Include chains once a relationship crosses a data-source boundary.

        MMCA.Common is Apache-2.0 licensed and open source. Star the repo, read the persistence chapter of the diff --git a/articles/problem-details-http-grpc.html b/articles/problem-details-http-grpc.html index 22da5573..dec4eda6 100644 --- a/articles/problem-details-http-grpc.html +++ b/articles/problem-details-http-grpc.html @@ -196,7 +196,8 @@

        The MMCA an

        MMCA.Common's whole error story starts from one decision recorded across the codebase: expected failures are values, not exceptions. Handlers return Result<T> carrying an Error list, each error typed by an ErrorType. The edge's only job is to translate that value into the right wire shape.

        -

        On the HTTP side, every controller derives from ApiControllerBase, whose single job is +

        On the HTTP side, the framework's result-returning controller bases (EntityControllerBase among + them) derive from ApiControllerBase, whose single job is HandleFailure(IEnumerable<Error>). It produces an ObjectResult whose status belongs to the most severe ErrorType present, deliberately not the first error's, so an aggregate built by Result.Combine cannot be downgraded by error ordering: a 403 or a 500 travelling alongside a @@ -214,11 +215,12 @@

        The MMCA an // UnprocessableEntity-> 422 // Failure -> 400 // Unexpected -> 500 +// TooManyRequests -> 429 // // A multi-error failure is ranked, not indexed: GetStatusCode(errors) asks // ErrorTypeSeverity.MostSevere which type wins, most to least severe: -// Unexpected > Unauthorized > Forbidden > Conflict > NotFound -// > UnprocessableEntity > Invariant / Validation / Failure +// Unexpected > Unauthorized > Forbidden > TooManyRequests > Conflict +// > NotFound > UnprocessableEntity > Invariant / Validation / Failure // // Centralizing the map is what keeps every endpoint's error shape identical.

        Thrown exceptions get folded into the same Problem Details shape by an ordered, most-specific-first @@ -239,10 +241,13 @@

        The MMCA an calls the inner C# service, gets a Result, and calls result.ThrowIfFailure(). That throws a ResultFailureException carrying the Error list. GrpcResultExceptionInterceptor, registered by AddGrpcServiceDefaults(), catches it for all four call shapes (unary and the three streaming kinds), - logs it, and rethrows errors.ToRpcException(): an RpcException whose StatusCode comes from a + logs it, and rethrows errors.ToRpcException() (or a plain Internal status carrying the exception + message when the exception holds no errors): an RpcException whose StatusCode comes from a FrozenDictionary<ErrorType, StatusCode> that mirrors the HTTP table, picked from the most severe error by the same ErrorTypeSeverity ranking the HTTP edge uses, and whose trailing metadata carries - every error as error-{i}-code/-message/-type/-source/-target entries.

        + every error as error-{i}-code/-message/-type/-source/-target entries. The message, source and target + values are percent-encoded wherever they fall outside printable ASCII, because gRPC text metadata + accepts nothing else.

        Both halves of that round trip ship in the framework, in the same file. errors.ToRpcException() lives in MMCA.Common's gRPC package (ResultGrpcExtensions), so every extracted service emits the same structured trailers for free, and Metadata.ToErrors() is the exact inverse: it walks the @@ -253,11 +258,12 @@

        The MMCA an connection, an exceeded deadline) to a single Failure error coded Grpc.{StatusCode} rather than letting an exception escape. A consumer's client adapter is then a two-line catch: ADC's SessionBookmarkValidationServiceGrpcAdapter and EventLiveValidationServiceGrpcAdapter catch - RpcException and return ex.ToResult<T>(), and the caller sees the same Result it would have seen - in-process.

        + RpcException and return ex.ToResult() or ex.ToResult<T>(), and the caller sees the same Result + it would have seen in-process.

        That status-mapping symmetry is the point. The ErrorType -> status decision is made once per transport in a frozen table, the translation is a pipeline concern written once in an interceptor, and a NotFound is a 404 - over HTTP and a NotFound RpcException over gRPC because both tables agree.

        + over HTTP and a NotFound RpcException over gRPC because both tables agree. The same holds for a + temporary refusal: TooManyRequests is a 429 over HTTP and ResourceExhausted over gRPC.

        The rest of the §9 contract

        The same edge standardizes the things that drift if left to each endpoint:

          @@ -279,11 +285,13 @@

          Trade-offs, honestly

          it lives.

          • The contract snapshot is guarded at two levels, on purpose. The framework generates an OpenAPI - document: AddCommonOpenApi() calls ASP.NET Core's built-in AddOpenApi(), MapCommonOpenApi() - serves /openapi/v1.json outside Production, and an opt-in MapCommonScalarUi() renders the Scalar - reference UI from that document. OpenApiBaselineTests closes the loop in the framework's own CI: it - boots an in-memory host over that exact registration path (AddCommonApiVersioning() + - AddCommonOpenApi() + MapCommonOpenApi()), fetches /openapi/v1.json, normalizes it (the + document: the host registers it with ASP.NET Core's built-in AddOpenApi(), AddCommonOpenApi() + layers the framework's transformers onto every registered document, MapCommonOpenApi() serves + /openapi/v1.json outside Production (and fails at startup when no v1 document is registered), and + an opt-in MapCommonScalarUi() renders the Scalar reference UI from that document. + OpenApiBaselineTests closes the loop in the framework's own CI: it boots an in-memory host over that + exact registration path (AddCommonApiVersioning() + AddOpenApi() + AddCommonOpenApi() + + MapCommonOpenApi()), fetches /openapi/v1.json, normalizes it (the host-assigned servers block is dropped, object properties are ordered ordinally so generator ordering is not mistaken for drift, array order is preserved because it is contractual), and diffs the result against a committed openapi-baseline.v1.json. A change to the generated surface fails the diff --git a/articles/rate-limiting-brute-force-protection.html b/articles/rate-limiting-brute-force-protection.html index c318daf1..55006be0 100644 --- a/articles/rate-limiting-brute-force-protection.html +++ b/articles/rate-limiting-brute-force-protection.html @@ -205,50 +205,55 @@

            Why it matters

            count. Together they cover the whole edge.

            The MMCA answer: an authenticated-only global limiter, plus two controls for the surface it exempts

            Layer one: cap the traffic that is both attributable and expensive

            -

            AddCommonRateLimiting (in MMCA.Common.API, - Source/Presentation/MMCA.Common.API/Startup/WebApplicationBuilderExtensions.cs:386) installs a - GlobalLimiter (:430-431) that runs on every request. Its partition function, - GlobalRateLimitPartition (WebApplicationBuilderExtensions.cs:169-194), makes three decisions in - order, and the order is the whole design.

            -

            First, it exempts infrastructure traffic outright. IsRateLimitBypassed - (WebApplicationBuilderExtensions.cs:75-79) returns GetNoLimiter("__infra") (:173) for /health - (:76), /alive (:77), JWKS and OIDC discovery under /.well-known (:78), and any request that - routed to a mapped gRPC method (IsGrpcEndpoint, :79, implemented at :136-155). That last arm is - keyed on the routed endpoint's Grpc.AspNetCore.Server metadata (GrpcServerMetadataNamespace, - :128), never on the request's Content-Type, and the remark above it says why (:62-68, - SEC-Common-44): a content type is caller-supplied and unverifiable, so keying on one hands any - authenticated account the no-limiter partition for the price of stamping - Content-Type: application/grpc on an ordinary request. Endpoint metadata is produced by routing from - the server's own MapGrpcService registrations, so it cannot be forged, and the predicate runs from - middleware that sits after UseRouting, so the endpoint is already resolved (:66-68). All of these - are legitimately high-frequency: a probe that gets throttled is an outage, and a JWKS fetch the auth - middleware depends on must never be capped.

            +

            AddCommonRateLimiting (in MMCA.Common.API, the partial + Source/Presentation/MMCA.Common.API/Startup/WebApplicationBuilderExtensions.RateLimiting.cs:328) installs a + GlobalLimiter (:376-377) that runs on every request. Its partition function, + GlobalRateLimitPartition (WebApplicationBuilderExtensions.RateLimiting.cs:137-162), makes three decisions + in order, and the order is the whole design.

            +

            First, it exempts infrastructure traffic outright. IsRateLimitBypassed (:42-46) sends the request to + GetNoLimiter("__infra") (:141) for /health (:43), /alive (:44), JWKS and OIDC discovery under + /.well-known (:45), and any request that routed to a mapped gRPC method (IsGrpcEndpoint, :46, + implemented at :103-122). That last arm is keyed on the routed endpoint's Grpc.AspNetCore.Server + metadata (GrpcServerMetadataNamespace, :95), never on the request's Content-Type, and the remark above + it says why (:29-35, SEC-Common-44): a content type is caller-supplied and unverifiable, so keying on one + hands any authenticated account the no-limiter partition for the price of stamping + Content-Type: application/grpc on an ordinary request. Endpoint metadata is produced by routing from the + server's own MapGrpcService registrations, so it cannot be forged, and the predicate runs from middleware + that sits after UseRouting, so the endpoint is already resolved (:33-35). All of these are legitimately + high-frequency: a probe that gets throttled is an outage, and a JWKS fetch the auth middleware depends on + must never be capped.

            Second, it hands anonymous traffic to its own partition, which is a no-limiter for almost all of it. When - httpContext.User?.Identity?.IsAuthenticated != true (:176) the request goes to AnonymousPartition - (:178, declared at :91-101), which returns GetNoLimiter("__anonymous") (:101) for every path but - one. That is the deliberate gap: public reads are output-cached and cheap, anonymous Blazor Server - browsing shares one IP, and login brute-force has its own controls. None of those should be counted by a + httpContext.User?.Identity?.IsAuthenticated != true (:144) the request goes to AnonymousPartition + (:146, declared at :58-68), which returns GetNoLimiter("__anonymous") (:68) for every path but one. + That is the deliberate gap: public reads are output-cached and cheap, anonymous Blazor Server browsing + shares one IP, and login brute-force has its own controls (:52-57). None of those should be counted by a per-principal limiter.

            -

            The exception is a real-time hub. IsAnonymousHubRequest (:111-121) matches the request path against +

            The exception is a real-time hub. IsAnonymousHubRequest (:78-88) matches the request path against HubPathPrefixes (default ["/hubs"], RateLimitingSettings.cs:91), and a match is metered per client - IP at AnonymousHubPermitLimit (default 60, RateLimitingSettings.cs:99) under Redis scope "hub" with - allowDistributed: true (WebApplicationBuilderExtensions.cs:93-100). The reason sits on the setting - (RateLimitingSettings.cs:74-90, SEC-ADC-25): the gateway bypasses /hubs at the edge, because ADR-024's - hub authenticates from a query-string token the edge cannot read, which leaves /hubs/*/negotiate as the - one anonymous route nothing else counts, where an unauthenticated loop costs full middleware plus - auth-reject CPU per request. Authenticated hub traffic is untouched by this: it already takes the per-user - partition (RateLimitingSettings.cs:87-89).

            -

            Third, and only for an authenticated caller, it caps. The partition key is the principal's identity name, - falling back to FindUserIdValue(), the subject claim (:182), then the remote IP, then a literal - "authenticated" (WebApplicationBuilderExtensions.cs:181-184). That key goes to - CreateLimitedPartition (:186-193, declared at :238-289), which by default builds a fixed one-minute + IP at AnonymousHubPermitLimit (default 60, RateLimitingSettings.cs:99) under Redis scope "hub" + (WebApplicationBuilderExtensions.RateLimiting.cs:63) with allowDistributed: true (:67). A hub request + with no readable IP is not waved through: it shares one "anonymous-hub" bucket (:62). The reason for + metering sits on the setting (RateLimitingSettings.cs:74-90, SEC-ADC-25): the gateway bypasses /hubs at + the edge, because ADR-024's hub authenticates from a query-string token the edge cannot read, which leaves + /hubs/*/negotiate as the one anonymous route nothing else counts, where an unauthenticated loop costs full + middleware plus auth-reject CPU per request. Authenticated hub traffic is untouched by this: it already + takes the per-user partition (RateLimitingSettings.cs:87-89).

            +

            Third, and only for an authenticated caller, it caps. The partition key is the subject claim from + FindUserIdValue(), falling back to the principal's identity name, then the remote IP, then a literal + "authenticated" (WebApplicationBuilderExtensions.RateLimiting.cs:149-152). The subject leads because it + is unique per account, while the name claim carries the full name, which two users can share (:124-126). + The final fallback is a shared bucket, not a free pass: an authenticated request with no subject, no name + and no IP is still counted, together with every other such request. That key goes to + CreateLimitedPartition (:154-161, declared at :207-258), which by default builds a fixed one-minute window with a permit limit of GlobalPermitLimit, which defaults to 300 (RateLimitingSettings.cs:40), and a queue limit of zero so overage is rejected rather than buffered - (WebApplicationBuilderExtensions.cs:282-288). Rejection is a 429 Too Many Requests (:428).

            + (WebApplicationBuilderExtensions.RateLimiting.cs:251-257). Rejection is a 429 Too Many Requests + (:374).

            The code is short enough to read whole. This is condensed from the real partition function - (WebApplicationBuilderExtensions.cs:169-194) plus the anonymous partition it delegates to (:91-101). - The factory both of them call has two further branches, a sliding window (:270-280) and a shared Redis - counter (:247-268), which are the configuration layer covered further down; neither is on by default:

            + (WebApplicationBuilderExtensions.RateLimiting.cs:137-162) plus the anonymous partition it delegates to + (:58-68). The factory both of them call has two further branches, a sliding window (:239-249) and a + shared Redis counter (:216-237), which are the configuration layer covered further down; neither is on by + default:

            // Illustrative of the real GlobalRateLimitPartition shape (condensed, default settings).
             // Order is load-bearing: infra exempt, then the anonymous partition, then cap the principal.
             internal static RateLimitPartition<string> GlobalRateLimitPartition(HttpContext ctx, RateLimitingSettings settings)
            @@ -259,10 +264,10 @@ 

            Layer if (ctx.User?.Identity?.IsAuthenticated != true) // the deliberate gap layers two and three fill return AnonymousPartition(ctx, settings); - var partitionKey = ctx.User.Identity.Name // attributable to a principal - ?? ctx.User.FindUserIdValue() // the subject claim + var partitionKey = ctx.User.FindUserIdValue() // the subject claim: unique per account + ?? ctx.User.Identity.Name // the name claim: a full name, not unique ?? ctx.Connection.RemoteIpAddress?.ToString() - ?? "authenticated"; + ?? "authenticated"; // one shared bucket, still counted return CreateLimitedPartition(ctx, partitionKey, redisScope: "global", permitLimit: settings.GlobalPermitLimit, // default 300 @@ -280,10 +285,11 @@

            Layer queueLimit: 0, settings, allowDistributed: true) : RateLimitPartition.GetNoLimiter("__anonymous");

            -

            The same method registers three named policies alongside the global limiter. Two of them, FixedPolicy - (WebApplicationBuilderExtensions.cs:436-443) and UserPolicy (:445), are purely opt-in: nothing - applies them automatically, and they are there for the endpoint that knows it is special. The third is the - per-IP auth throttle registered at :455-457, and unlike the other two the framework attaches it for +

            The same registration adds three named policies alongside the global limiter. Two of them, FixedPolicy + (WebApplicationBuilderExtensions.RateLimiting.cs:382-389) and UserPolicy (:391, partitioned + subject-first like the global limiter by UserPolicyRateLimitPartition at :172-187), are purely opt-in: + nothing applies them automatically, and they are there for the endpoint that knows it is special. The third + is the per-IP auth throttle registered at :401-403, and unlike the other two the framework attaches it for you. That is layer three.

            Layer two: a pre-authentication guard keyed on the submitted identity

            The second layer exists for one reason: the first layer exempts the anonymous surface, and the login and @@ -291,54 +297,58 @@

            La (Source/Core/MMCA.Common.Application/Auth/ILoginProtectionService.cs:10) is the contract, and LoginProtectionService (Source/Core/MMCA.Common.Infrastructure/Auth/LoginProtectionService.cs:19) is the implementation. It is registered unconditionally by AddInfrastructure - (Source/Core/MMCA.Common.Infrastructure/DependencyInjection.cs:72) via - TryAddScoped<ILoginProtectionService, LoginProtectionService>() (DependencyInjection.cs:168), so every + (Source/Core/MMCA.Common.Infrastructure/DependencyInjection.cs:57) via + TryAddScoped<ILoginProtectionService, LoginProtectionService>() (DependencyInjection.cs:158), so every host that wires infrastructure has it. Its state lives entirely in ICacheService, never in a table.

            It keys on the submitted identity and the client IP, not on a principal, which is exactly what lets it work before authentication.

            Login lockout, keyed by email. IncrementFailedAttemptsAsync(email) - (LoginProtectionService.cs:64) counts consecutive failures under a login:attempts:{email} cache key - (AttemptsKey, :47) inside a window of FailedAttemptWindowMinutes (default 30, + (LoginProtectionService.cs:53) counts consecutive failures under a login:attempts:{email} cache key + (AttemptsKey, :36) inside a window of FailedAttemptWindowMinutes (default 30, LoginProtectionSettings.cs:31). Once the count reaches MaxFailedAttempts (default 5, LoginProtectionSettings.cs:18), it writes a lockout key with exponential backoff: Math.Min(1 << Math.Min(excessAttempts, 30), _settings.MaxLockoutSeconds) - (LoginProtectionService.cs:88), so each extra failure doubles the wait up to the MaxLockoutSeconds + (LoginProtectionService.cs:77), so each extra failure doubles the wait up to the MaxLockoutSeconds cap (default 300, LoginProtectionSettings.cs:24). The inner Math.Min(excessAttempts, 30) clamps the shift exponent: a large excessAttempts would overflow the int shift (C# masks the count to five - bits, so 1 << 32 wraps back to 1), silently shrinking the lockout, and 30 already exceeds any - permitted cap. CheckLockoutAsync(email) (LoginProtectionService.cs:50) returns - Result.Failure(Error.Unauthorized("Auth.TooManyAttempts", ...)) while the lockout key is present - (:55-60), and ResetFailedAttemptsAsync(email) (:94) clears both the attempt and lockout keys on a - successful login (:96-97).

            + bits, so 1 << 31 is negative and 1 << 32 wraps back to 1), silently shrinking the lockout, and 30 + already exceeds any permitted cap. CheckLockoutAsync(email) (LoginProtectionService.cs:39) returns + Result.Failure(Error.TooManyRequests("Auth.TooManyAttempts", ...)) while the lockout key is present + (:44-48), and ResetFailedAttemptsAsync(email) (:83) clears both the attempt and lockout keys on a + successful login (:85-86).

            That {email} is the normalized address, not the raw request string, and the difference is the whole - control. Both key builders route the submitted value through NormalizeIdentity - (LoginProtectionService.cs:34-43), which runs it through the same Email value object the user lookup - uses (trim and lowercase, falling back to a plain trim-and-lowercase when the address is malformed), so - LockoutKey (:45) and AttemptsKey (:47) build one key per account. Key off raw input instead and - User@x.com, user@x.com and a padded variant hit one account but get three independent counters: - an attacker defeats the backoff by varying capitalization.

            + control. Both key builders, LockoutKey (LoginProtectionService.cs:34) and AttemptsKey (:36), route + the submitted value through EmailIdentity.Normalize + (Source/Core/MMCA.Common.Infrastructure/Auth/EmailIdentity.cs:22-31), the one address normalization the + auth services share. It runs the address through the same Email value object the user lookup uses and + falls back to a plain trim-and-lowercase when the address is malformed, so both builders produce one key + per account. Key off raw input instead and User@x.com, user@x.com and a padded variant hit one account + but get three independent counters: an attacker defeats the backoff by varying capitalization + (LoginProtectionService.cs:25-33).

            Registration throttle, keyed by IP. CheckRegistrationRateLimitAsync(ip) - (LoginProtectionService.cs:101) fails with - Error.Unauthorized("Auth.RegistrationRateLimitExceeded", ...) (:111-116) once + (LoginProtectionService.cs:90) fails with + Error.Unauthorized("Auth.RegistrationRateLimitExceeded", ...) (:100-105) once MaxRegistrationsPerIpPerHour (default 10, LoginProtectionSettings.cs:37) signups from one IP land inside RegistrationRateLimitWindowMinutes (default 60, LoginProtectionSettings.cs:43), tracked under a - registration:ip:{ip} key (RegistrationKey, LoginProtectionService.cs:136, read at :108). - IncrementRegistrationCountAsync(ip) (:120) bumps that counter. A missing or empty IP is a deliberate - no-op that fails open (:103-106, :122-125): the check returns Result.Success() rather than blocking - a request it cannot attribute.

            -

            Every check returns Result (ADR-013), so the HTTP edge maps a lockout or a throttle to a uniform 401 - without the endpoint special-casing it. And because the counters live in the same swappable - ICacheService substrate, they self-expire by TTL: a lockout is inherently ephemeral, so cache expiry - is the reset.

            + registration:ip:{ip} key (RegistrationKey, LoginProtectionService.cs:125, built at :97 and read at + :98). IncrementRegistrationCountAsync(ip) (:109) bumps that counter. A missing or empty IP is a + deliberate no-op that fails open (:92-95, :111-114): the check returns Result.Success() rather than + blocking a request it cannot attribute.

            +

            Every check returns Result (ADR-013), so the HTTP edge maps each failure through the shared error-type + table without the endpoint special-casing it, and the two failures land on different status codes. The + lockout is a TooManyRequests error, which maps to 429 (Source/Presentation/MMCA.Common.API/Middleware/ErrorHttpMapping.cs:31); + the registration throttle is an Unauthorized error, which maps to 401 (ErrorHttpMapping.cs:26). And + because the counters live in the same swappable ICacheService substrate, they self-expire by TTL: a + lockout is inherently ephemeral, so cache expiry is the reset.

            Here is the backoff, the one line that does the work. It mirrors the tail of - IncrementFailedAttemptsAsync (LoginProtectionService.cs:80-90), with the source comment condensed and + IncrementFailedAttemptsAsync (LoginProtectionService.cs:69-79), with the source comment condensed and the trailing .ConfigureAwait(false) elided:

            if (newCount >= _settings.MaxFailedAttempts)              // default 5
             {
                 // newCount is a long; clamp before the int shift.
                 var excessAttempts = (int)Math.Min(newCount - _settings.MaxFailedAttempts, int.MaxValue);
            -    // Clamp the shift exponent to 30: a large excessAttempts would overflow the int shift
            -    // (C# masks the count to 5 bits, so 1 << 32 wraps back to 1, shrinking the lockout).
            +    // Clamp the shift exponent to 30: C# masks int shift counts to 5 bits, so 1 << 31 is
            +    // negative and 1 << 32 wraps back to 1, silently shrinking the lockout.
                 var lockoutSeconds = Math.Min(1 << Math.Min(excessAttempts, 30), _settings.MaxLockoutSeconds); // doubles, cap 300s
                 // LockoutKey normalizes the email first: one key per account, no principal needed.
                 await cacheService.SetAsync(LockoutKey(email), true, TimeSpan.FromSeconds(lockoutSeconds), cancellationToken);
            @@ -350,19 +360,23 @@ 

            // Illustrative of the real AuthIpRateLimitPartition shape (condensed). -// Fail open on an IP it cannot read, rather than pooling every such request into one bucket. +// No limiter on an IP it cannot read, rather than pooling every such request into one bucket. internal static RateLimitPartition<string> AuthIpRateLimitPartition(HttpContext ctx, RateLimitingSettings settings) { var clientIp = ctx.Connection.RemoteIpAddress?.ToString(); @@ -376,12 +390,12 @@

            reset-password (:102), so the framework's default surface is four anonymous credential actions; ADR-019 records both apps extending the same policy to the two email-confirmation actions on their EmailConfirmationController, which the framework bases do not own - (Website/docs-src/adr/019-rate-limiting.md:66-69). The base documents why the default is attached rather + (Website/docs-src/adr/019-rate-limiting.md:70-73). The base documents why the default is attached rather than opt-in (AuthControllerBase.cs:20-29): a policy that ships in the framework but leaves each app to attach it is a policy an app can silently lack, and an app that simply inherited these actions would have no spray protection at all. A consumer that inherits the base without calling AddCommonRateLimiting fails @@ -404,47 +418,49 @@

            The settings layer: the same three controls, tunable without a recompile

            There are three controls, not four: the settings layer is configuration, not another defence. ADR-019 - (Website/docs-src/adr/019-rate-limiting.md:142-199) records what it buys, the ability to tune the three + (Website/docs-src/adr/019-rate-limiting.md:149-206) records what it buys, the ability to tune the three without a recompile, and one way to make several of them mean the same thing behind a load balancer.

            The limits live in RateLimitingSettings (Source/Presentation/MMCA.Common.API/RateLimiting/RateLimitingSettings.cs:21), bound from a "RateLimiting" configuration section (:24) with a [Range] on every count. AddCommonRateLimiting has three overloads: the permit-count one quoted above - (WebApplicationBuilderExtensions.cs:386), which only builds a settings object and delegates; an - IConfiguration one that binds the section and falls back to a default instance when it is absent - (:404-412); and the settings one that actually calls AddRateLimiter (:422). Every default matches - the framework's shipped value, so a host that configures nothing behaves exactly as described above.

            + (WebApplicationBuilderExtensions.RateLimiting.cs:328-336), which only builds a settings object and + delegates; an IConfiguration one that binds the section with validation on start and falls back to a + default instance when it is absent (:346-358, ValidateOnStart at :353); and the settings one that + actually calls AddRateLimiter (:368-405, the call at :372). Every default matches the framework's + shipped value, so a host that configures nothing behaves exactly as described above.

            The section also holds the two hub controls layer one uses, HubPathPrefixes (RateLimitingSettings.cs:91) and AnonymousHubPermitLimit (:99), so which anonymous paths are metered, and how hard, is a deployment decision rather than a constant.

            Two knobs do more than relocate a constant. Algorithm (RateLimitingSettings.cs:53) can select RateLimitAlgorithm.SlidingWindow (RateLimitAlgorithm.cs:22) instead of the default FixedWindow (:15), dividing the same one-minute window into SegmentsPerWindow segments (default 4, - RateLimitingSettings.cs:62) so a caller can no longer spend a full minute's allowance at the end of one + RateLimitingSettings.cs:62) so a caller cannot spend a full minute's allowance at the end of one window and again at the start of the next. That is a smoothing choice, not a new cap. And Distributed (:72, default false) swaps the in-process counter for RedisFixedWindowRateLimiter (RateLimiting/RedisFixedWindowRateLimiter.cs:37), which counts one key per partition per minute in Redis so N replicas share one allowance instead of holding N of them.

            -

            Exactly three partitions may take that shared counter: the global limiter - (WebApplicationBuilderExtensions.cs:186-193, Redis scope "global" at :189), UserPolicy - (UserPolicyRateLimitPartition, :204-218, scope "user" at :213), and the anonymous hub partition - (:93-100, scope "hub" at :96). The "auth-ip" policy passes allowDistributed: false (:324), and - so does FixedPolicy (:436-443). That is deliberate, and the reason sits on the factory parameter - itself (:233-237): the per-IP window is a coarse backstop in front of a control that is already global - and stateful, the per-email lockout, so buying a tighter limit with a Redis round trip on the login path is - the wrong trade. ADR-019 states the same three-partition scope (019-rate-limiting.md:171-175).

            +

            Exactly three partitions may take that shared counter: the global limiter (Redis scope "global", + WebApplicationBuilderExtensions.RateLimiting.cs:157, allowDistributed: true at :161), UserPolicy + (scope "user" at :182, :186), and the anonymous hub partition (scope "hub" at :63, :67). The + "auth-ip" policy passes allowDistributed: false (:293), and so does FixedPolicy (:389). That is + deliberate, and the reason sits on the factory parameter itself (:202-206): per-account login protection + already backs the per-IP window, and a login throttle that fails open on a Redis outage is a worse trade + than one that stays local. ADR-019 states the same three-partition scope and adds the cost side, that + making auth-ip distributed would put a Redis round trip on the login path to tighten a limit whose + per-replica multiplication its generous default already absorbs (019-rate-limiting.md:172-189).

            The honest framing is that the section reaches almost none of it. ADC's Notification service is the one host that declares one: "RateLimiting": { "AnonymousHubPermitLimit": 600 } (MMCA.ADC/Source/Services/MMCA.ADC.Notification.Service/appsettings.json:53-55), with a nine-line rationale above it (:44-52) that the venue's NAT puts roughly 67 attendees behind a single address, so a 60-per-minute budget goes in seconds when the room reconnects. A declared section only reaches the limiter through the IConfiguration overload, and no host calls it: that service calls the permit-count overload - (MMCA.ADC.Notification.Service/Program.cs:141), which builds a RateLimitingSettings from its five - integer parameters (WebApplicationBuilderExtensions.cs:386-394) and never reads + (MMCA.ADC.Notification.Service/Program.cs:137), which builds a RateLimitingSettings from its five + integer parameters (WebApplicationBuilderExtensions.RateLimiting.cs:328-336) and never reads RateLimitingSettings.SectionName, so the hub limit in force there is the shipped default of 60 (RateLimitingSettings.cs:99). Every other host calls the same permit-count overload, and the one value either app passes into it is ADC Identity's authIpPermitLimit - (MMCA.ADC.Identity.Service/Program.cs:161-162). Both apps therefore run the in-memory fixed-window + (MMCA.ADC.Identity.Service/Program.cs:159-160). Both apps therefore run the in-memory fixed-window defaults this article describes.

            Where the three controls meet

            This is the connective tissue, and it is worth stating plainly. The global limiter protects authenticated @@ -459,26 +475,34 @@

            Where the three controls meet

            check-before, increment-on-failure, reset-on-success sequence around login and the registration check around sign-up lives in AuthenticationServiceBase<TUser> (Source/Core/MMCA.Common.Application/Auth/AuthenticationServiceBase.cs), which calls - CheckLockoutAsync (:169), IncrementFailedAttemptsAsync (:189, :196), ResetFailedAttemptsAsync - (:240), CheckRegistrationRateLimitAsync (:267), and IncrementRegistrationCountAsync (:326). The - ADC and Store AuthenticationService are sealed subclasses that take ILoginProtectionService as a - constructor parameter (ADC AuthenticationService.cs:50, Store :26) and forward it to the base - constructor (ADC :60, Store :35); ADC's subclass additionally injects IExternalLoginEmailVerifier - (:51) for its external OAuth flow. The login and registration workflow, and every protection call in it, - lives once in the base. One framework call site sits outside it: ResetPasswordHandlerBase takes - ILoginProtectionService as a constructor dependency - (Source/Core/MMCA.Common.Application/Users/UseCases/ResetPassword/ResetPasswordHandlerBase.cs:47) and + CheckLockoutAsync (:118), IncrementFailedAttemptsAsync (:138, :145, and a third time later in the + class at :531), ResetFailedAttemptsAsync (:189), CheckRegistrationRateLimitAsync (:216), and + IncrementRegistrationCountAsync (:275). The ADC and Store AuthenticationService are sealed subclasses + that take ILoginProtectionService as a constructor parameter (ADC AuthenticationService.cs:53, Store + :29) and forward it to the base constructor (ADC :61, Store :36); ADC's subclass additionally injects + IExternalLoginEmailVerifier (:54) for its external OAuth flow. The login and registration workflow, and + every protection call in it, lives once in the base.

            +

            Two framework call sites sit outside it. ResetPasswordHandlerBase takes ILoginProtectionService as a + constructor dependency + (Source/Core/MMCA.Common.Application/Users/UseCases/ResetPassword/ResetPasswordHandlerBase.cs:45) and calls ResetFailedAttemptsAsync(request.Email) once the new credential is persisted (:110), so a user - who resets the password because of a lockout is not left locked out by it, which ADR-029 records at - Website/docs-src/adr/029-authentication-brute-force-protection.md:95-98. Settings bind from the - "LoginProtection" configuration section (LoginProtectionSettings.cs:12).

            + who resets the password because of a lockout is not left locked out by it. ChangePasswordHandlerBase + takes it too + (Source/Core/MMCA.Common.Application/Users/UseCases/ChangePassword/ChangePasswordHandlerBase.cs:47) and + runs the whole sequence on its own key: CheckLockoutAsync before the current-password check (:89), + IncrementFailedAttemptsAsync on a wrong current password (:97) and ResetFailedAttemptsAsync on a + right one (:102). That is the one principal-keyed use of the service: the counter is + password-change:{userId} (:129, rationale at :37), so a signed-in session is not an unthrottled + password oracle, and a change-password lockout does not lock the owner out of sign-in. ADR-029 records both + (Website/docs-src/adr/029-authentication-brute-force-protection.md:61-66, :103-110). Settings bind from + the "LoginProtection" configuration section (LoginProtectionSettings.cs:12).

            They adopt the third the same way, and the redundancy in that is deliberate. ADC's Identity service re-declares the attribute on both actions it overrides (MMCA.ADC.Identity.API/Controllers/AuthController.cs:54 on register and :108 on login, the overrides at :58 and :112) and tunes the window from configuration - (MMCA.ADC.Identity.Service/Program.cs:161-162, after deleting its own local copy of the policy because a - duplicate policy name throws at startup, :153-160). Store's Identity service takes the framework default - (MMCA.Store.Identity.Service/Program.cs:136) and its RegisterAsync override re-declares the attribute + (MMCA.ADC.Identity.Service/Program.cs:159-160, after deleting its own local copy of the policy because a + duplicate policy name throws at startup, :151-158). Store's Identity service takes the framework default + (MMCA.Store.Identity.Service/Program.cs:135) and its RegisterAsync override re-declares the attribute too (MMCA.Store.Identity.API/Controllers/AuthController.cs:50, the override at :54), with a doc comment saying exactly what that line is for (:41-46): the attribute is inherited by an override, so re-applying it is convention parity with ADC plus a regression pin, not a live hole being closed.

            @@ -493,35 +517,48 @@

            Where the three controls meet

            through GetCustomAttributes(inherit: true). The test's own comment is careful about what that buys (:57-60): it pins the mechanism, it does not bless a bare override. Applying the attribute on every override stays the convention precisely because a dropped security attribute is invisible.

            -

            The UI origin needs a different ceiling, and it lives in the apps

            -

            Every control above bounds an arrival rate at an API host. The server-rendered Blazor UI host is the case - none of them reaches: it is a separate externally reachable origin on its own Container Apps FQDN, so the - gateway's edge limiter guards the gateway's own hostname and never sees a single request to the front door - a browser actually loads (ADR-124, Website/docs-src/adr/124-blazor-circuit-ceiling-ui-edge.md:9-15).

            +

            The UI origin is its own edge, and the framework ships its kit

            +

            Every control above bounds traffic at an API host. The server-rendered Blazor UI host is the case none of + them reaches: it is a separate externally reachable origin on its own Container Apps FQDN, so the gateway's + edge limiter guards the gateway's own hostname and never sees a single request to the front door a browser + actually loads (ADR-124, Website/docs-src/adr/124-blazor-circuit-ceiling-ui-edge.md:12-19).

            +

            So that origin carries its own limiter. AddUiRateLimiting + (Source/Presentation/MMCA.Common.UI.Web/Hardening/UiRateLimitingExtensions.cs:161) and + UseUiRateLimiting (:203) put a per-client-IP fixed window, chained with a replica-wide concurrency + ceiling, in front of the host, both rejecting with 429 (:10-13); the concurrency half defaults to 200 + permits (GlobalConcurrencyLimit, UiRateLimitingSettings.cs:76). The Blazor circuit transport, + /_blazor, stays inside the per-IP window but out of the concurrency ceiling, because a circuit WebSocket + would hold its lease for the circuit's whole lifetime (UiRateLimitingExtensions.cs:33-39).

            A page load there is also not a cheap request. Under the Interactive Auto render strategy the first render is always a Server circuit, so every page load opens one, and each open circuit holds live render state for as long as the connection lives, inside a container of 0.25 vCPU and 0.5 GiB - (MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web/Hardening/BoundedCircuitHandler.cs:13-19, - BlazorCircuitLimitSettings.cs:27-28). The framework knob that looks like the answer is not one: - CircuitOptions exposes DisconnectedCircuitMaxRetained and DisconnectedCircuitRetentionPeriod, and - both bound only circuits that have already dropped their connection and are being held for reconnect - (BlazorCircuitLimitSettings.cs:13-15). A rate limiter does not close it from the other direction either: - it bounds how fast requests arrive, while a caller who opens circuits slowly enough to stay inside the - window still accumulates them (BlazorCircuitLimitSettings.cs:10-13).

            + (Source/Presentation/MMCA.Common.UI.Web/Hardening/BoundedCircuitHandler.cs:15-21, + BlazorCircuitLimitSettings.cs:27-28). A rate limiter does not bound that: it bounds how fast requests + arrive, while a caller who opens circuits slowly enough to stay inside the window still accumulates them + (BlazorCircuitLimitSettings.cs:10-13). Neither do the CircuitOptions knobs + DisconnectedCircuitMaxRetained and DisconnectedCircuitRetentionPeriod, which bound only circuits that + have already dropped their connection and are being held for reconnect (BlazorCircuitLimitSettings.cs:13-15). + The settings type still tightens both, as defence in depth: 25 retained circuits (:46) for 60 seconds + (:57).

            So the ceiling is on concurrency, and it is held by a CircuitHandler. BoundedCircuitHandler - (MMCA.ADC.UI.Web/Hardening/BoundedCircuitHandler.cs:37-39) counts opens and closes and refuses anything - past MaxActiveCircuits, default 200 per replica (BlazorCircuitLimitSettings.cs:40, derived from that - container's memory and vCPU at :27-35). It is registered as a singleton so one count spans the replica: - circuit handlers are resolved from each circuit's own scope, so a scoped registration would count to one - and cap nothing (BoundedCircuitHandler.cs:30-33). It runs last among the registered handlers, - Order => int.MaxValue (:46-50), so a refusal lands after cheaper handlers have done their work. The - count is race-safe by construction in both directions: the open path increments first and rolls back on - refusal (:57-62), because reading and then incrementing would let two simultaneous opens both take the - last free slot, and the close path floors at zero rather than trusting the pairing (:74-83), because a - close without a counted open would drive the count negative and hand out permits forever.

            -
            // The real open path (MMCA.ADC.UI.Web/Hardening/BoundedCircuitHandler.cs:53-71), logging elided.
            +          (BoundedCircuitHandler.cs:43-45) counts opens and closes and refuses anything past MaxActiveCircuits,
            +          default 200 per replica (BlazorCircuitLimitSettings.cs:38, derived from that container's memory and vCPU
            +          at :27-35). It is registered as a singleton by AddBoundedBlazorCircuits() so one count spans the
            +          replica: circuit handlers are resolved from each circuit's own scope, so a scoped registration would count
            +          to one and cap nothing (BoundedCircuitHandler.cs:32-34). It runs last among the registered handlers,
            +          Order => int.MaxValue (:57-61), so a refusal lands after cheaper handlers have done their work. The
            +          count is race-safe by construction in both directions. The open path increments first and rolls back on
            +          refusal (:70-76), because reading and then incrementing would let two simultaneous opens both take the
            +          last free slot. The close path releases a permit only for a circuit the open path admitted, tracked in a
            +          set keyed by reference (:47, added at :83, checked at :92-98), because the framework tears a refused
            +          circuit down through the same close callback and that close would otherwise release a permit another
            +          circuit holds (:37-38). Flooring the count at zero stays behind that as the last line of defence
            +          (:100-106).

            +
            // The real open path (MMCA.Common.UI.Web/Hardening/BoundedCircuitHandler.cs:64-85), logging elided.
             public override Task OnCircuitOpenedAsync(Circuit circuit, CancellationToken cancellationToken)
             {
            +    ArgumentNullException.ThrowIfNull(circuit);
            +
                 var ceiling = settings.Value.MaxActiveCircuits;
             
                 // Increment first and roll back on refusal: reading then incrementing would let two
            @@ -534,19 +571,21 @@ 

            The UI return Task.FromException(new InvalidOperationException(/* ...the ceiling, to the user... */)); } + _admitted[circuit] = 0; // only an admitted circuit releases a permit on close return Task.CompletedTask; }

            The refusal is a thrown exception, and the type says in place that this is the one spot where the Result - pattern does not apply (:22-27): CircuitHandler.OnCircuitOpenedAsync returns Task and has no - "refuse" return value, so a faulted task is the only way to stop a circuit from starting, and the contract - belongs to the framework. Refusal is observable rather than silent, one Warning per refusal naming the - ceiling (:88-91).

            -

            Say the ownership plainly: this one is app code, not a framework package. BoundedCircuitHandler and - BlazorCircuitLimitSettings sit in each UI host's own Hardening/ folder, identical in MMCA.ADC and - MMCA.Store (MMCA.Store/Source/Hosts/UI/MMCA.Store.UI.Web/Hardening/BoundedCircuitHandler.cs:37-39, - BlazorCircuitLimitSettings.cs:39), and ADR-124 records it as a decision about those two hosts - (124-blazor-circuit-ceiling-ui-edge.md:37-51). A limiter and a ceiling bound different resources, so - having the rate limiter in a shared package does not mean the concurrency bound belongs there too.

            + pattern does not apply (:24-29): CircuitHandler.OnCircuitOpenedAsync returns Task and has no + "refuse" return value, so a faulted task is the only way to stop a circuit from starting (:78-80), and + the contract belongs to the framework. Refusal is observable rather than silent, one Warning per refusal + naming the ceiling (:111-114).

            +

            Both halves are one framework kit in MMCA.Common.UI.Web, and both apps consume the same copy: each UI host + calls AddBoundedBlazorCircuits() (MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web/Program.cs:78, + MMCA.Store/Source/Hosts/UI/MMCA.Store.UI.Web/Program.cs:86), AddUiRateLimiting (ADC :143, Store :95) + and UseUiRateLimiting() (ADC :215, Store :229). ADR-124 records the decision as three layers from one + framework kit (124-blazor-circuit-ceiling-ui-edge.md:40-42). A limiter and a ceiling bound different + resources, so the kit keeps them as two settings types bound from two sections rather than folding the + concurrency bound into the limiter (BlazorCircuitLimitSettings.cs:10-13).

            Trade-offs, honestly

            None of the three is a complete edge defence on its own, and the §11 review is explicit about the boundaries.

            @@ -557,10 +596,11 @@

            Trade-offs, honestly

            no global cap and would need its own control or a named policy.

          • The limiter's placement is load-bearing. Per-user partitioning depends on the authenticated principal already being populated when the limiter runs - (WebApplicationBuilderExtensions.cs:176,181). Move the limiter relative to authentication in the - pipeline and the partition sees a different or empty principal. The gRPC exemption has the same - property in the other direction: it reads the routed endpoint, so it depends on running after - UseRouting (:66-68). This is a config-order trap, not a code bug.
          • + (WebApplicationBuilderExtensions.RateLimiting.cs:144, :149-150). Move the limiter relative to + authentication in the pipeline and the partition sees a different or empty principal, which drops an + authenticated caller into the anonymous partition. The gRPC exemption has the same property in the other + direction: it reads the routed endpoint, so it depends on running after UseRouting (:33-35). This is + a config-order trap, not a code bug.
          • Attribute-shaped protection fails silently when it goes missing. The per-IP throttle is applied by an attribute, so dropping it breaks nothing loudly: the endpoint simply stops being throttled and the app keeps serving traffic. A host missing the attribute has no spray protection while every build @@ -572,14 +612,15 @@

            Trade-offs, honestly

            it is missing needs a test whose only job is to notice.
          • The per-IP auth throttle is coarse, fail-open, and deliberately loose. Shared NAT, proxies and Blazor Server circuits put many users behind one IP, which is exactly why the default is 30 a minute - rather than 10 (WebApplicationBuilderExtensions.cs:378-385), and an IP it cannot read is not limited - at all (:316). It covers the four anonymous credential actions the framework bases carry and the two - email-confirmation actions each app adds, and deliberately not refresh. It raises the cost of spray - from one source by orders of magnitude; it does not stop an attacker rotating across many.
          • + rather than 10 (WebApplicationBuilderExtensions.RateLimiting.cs:320-327), and an IP it cannot read is + not limited at all (:284-285). It covers the four anonymous credential actions the framework bases + carry and the two email-confirmation actions each app adds, and deliberately not refresh. It raises the + cost of spray from one source by orders of magnitude; it does not stop an attacker rotating across many.
          • Email-keyed lockout is a denial-of-service-on-the-user lever. An attacker can lock a known account out by deliberately failing its logins. That is why the control is exponential backoff with a - short cap (default 300s, LoginProtectionSettings.cs:24) plus a generic 401, not a hard permanent - block. It bounds the harm to a brief self-healing lockout, an accepted availability-for-security trade.
          • + short cap (default 300s, LoginProtectionSettings.cs:24) plus a 429 that says only to try again later + (LoginProtectionService.cs:44-48), not a hard permanent block. It bounds the harm to a brief + self-healing lockout, an accepted availability-for-security trade.
          • Cache-scoped state weakens under scale-out, and for the limiter the fix is opt-in. In memory mode the login-protection counters are per-replica and evaporate on restart, so a multi-replica deployment that did not wire a distributed cache does not aggregate an attacker hitting different replicas; the @@ -587,39 +628,39 @@

            Trade-offs, honestly

            in-process counters have the same shape: across N replicas the effective ceiling is roughly N times the configured limit. The framework ships a way out for that one, the shared Redis counter behind Distributed = true for the global, UserPolicy and anonymous-hub partitions - (RateLimitingSettings.cs:64-72, WebApplicationBuilderExtensions.cs:93-100), but - it defaults to false and neither app sets it, so the ceiling is N times the limit - everywhere. ADR-019 calls the trade-off narrowed rather than removed - (Website/docs-src/adr/019-rate-limiting.md:195-199), and it stands exactly as written for auth-ip + (WebApplicationBuilderExtensions.RateLimiting.cs:161, :186, :67), but it defaults to false + (RateLimitingSettings.cs:72) and neither app sets it, so the ceiling is N times the limit everywhere. + ADR-019 calls the trade-off narrowed rather than removed + (Website/docs-src/adr/019-rate-limiting.md:202-206), and it stands exactly as written for auth-ip and FixedPolicy, which never take the shared counter.
          • Turning the shared counter on can silently do nothing. Setting Distributed = true in a host with no IConnectionMultiplexer registered degrades to the in-memory limiter rather than failing startup - (WebApplicationBuilderExtensions.cs:247-268, documented at RateLimitingSettings.cs:64-71), and the - Redis limiter itself fails open on a Redis fault, granting the lease and warning at most once per - window (Website/docs-src/adr/019-rate-limiting.md:184-193). Both are the right posture for a backstop + (WebApplicationBuilderExtensions.RateLimiting.cs:234-236, documented at RateLimitingSettings.cs:64-71), + and the Redis limiter itself fails open on a Redis fault, granting the lease and warning at most once per + window (Website/docs-src/adr/019-rate-limiting.md:191-192). Both are the right posture for a backstop that must never become an outage, and both mean a misconfiguration here looks exactly like success.
          • The counter increment is not atomic, by decision. IncrementAsync is a read-modify-write on the - cache, and the code says why in place (LoginProtectionService.cs:66-74): a Redis INCR writes a + cache, and the code says why in place (LoginProtectionService.cs:55-63): a Redis INCR writes a plain string key, while IDistributedCache reads entries back as hashes, so an atomic increment issued underneath the cache abstraction leaves a counter the cache itself cannot read. A readable counter is worth more than an atomic one. The accepted cost is that genuinely parallel attempts can overwrite each other's increments and undercount, so a concurrent burst can stay under MaxFailedAttempts; sequential guessing, which is what a credential-stuffing run against one account looks like, still trips the lockout. The same shape means each write refreshes the TTL, so both windows slide rather than staying - anchored to the first attempt (:127-129), which only ever tightens the limit. ADR-029 records the + anchored to the first attempt (:116-118), which only ever tightens the limit. ADR-029 records the whole trade, including the opt-in HybridCacheService that overrides the member with the same shape - (029-authentication-brute-force-protection.md:69-85).
          • + (029-authentication-brute-force-protection.md:74-93).
          • The per-IP registration throttle is coarse and fail-open. Shared NAT or proxy IPs throttle innocents together, per-attacker IP rotation evades it, and a missing IP is a deliberate no-op - (LoginProtectionService.cs:103-106). It raises the cost of bulk signup; it does not stop a determined + (LoginProtectionService.cs:92-95). It raises the cost of bulk signup; it does not stop a determined distributed attacker.
          • The defaults are deployment-agnostic. 300 requests per minute per user is a coarse backstop, not a tuned SLO. A service with heavier legitimate per-user traffic must raise GlobalPermitLimit, a host with real client IPs can tighten AuthIpPermitLimit (ADC binds that one value to configuration), and a stricter endpoint must opt into a named policy. Those knobs have a "RateLimiting" section to live in (RateLimitingSettings.cs:21-99), which makes tuning a deployment concern rather than a recompile, - but reaching the section at all takes the IConfiguration overload (WebApplicationBuilderExtensions.cs:404-412), - and no host calls it.
          • + but reaching the section at all takes the IConfiguration overload + (WebApplicationBuilderExtensions.RateLimiting.cs:346-358), and no host calls it.

          None of these argue against the layering. They are the edges of what each control is for: a per-principal cap protects attributable throughput, a per-source window protects anonymous credential submission, a @@ -631,7 +672,7 @@

          Apply this even without MMCA

        • Pick the partition key before you pick the limit. "300 a minute" is meaningless until you answer "per what." Per authenticated principal caps attributable load without punishing shared-origin anonymous browsing; per IP does the opposite. Choose deliberately, because the key determines who you - actually protect.
        • + actually protect. And key the principal on a claim that is unique per account: a display name is not.
        • Exempt infrastructure traffic explicitly, on something the caller cannot set. Health and liveness probes, JWKS and OIDC discovery, and inter-service RPC are legitimately high-frequency, and a limiter that throttles a probe causes the outage it was meant to prevent. Key the exemption on the routed @@ -666,17 +707,18 @@

          Apply this even without MMCA


          What we covered: why "turn on rate limiting" is not one decision but three (who, by what key, what is exempt), how MMCA.Common's authenticated-only global limiter (AddCommonRateLimiting) caps attributable - per-principal traffic and exempts infrastructure and anonymous traffic outside the real-time hub paths, - why that exemption leaves the most-attacked endpoints uncovered, how ILoginProtectionService closes part - of that gap with email-keyed exponential-backoff lockout and a per-IP registration throttle that key on - the submitted identity rather than a principal, how the "auth-ip" per-source window closes the rest by - catching password spray that no per-account counter can see and is attached by default on + per-principal traffic subject-first and exempts infrastructure and anonymous traffic outside the real-time + hub paths, why that exemption leaves the most-attacked endpoints uncovered, how ILoginProtectionService + closes part of that gap with email-keyed exponential-backoff lockout and a per-IP registration throttle + that key on the submitted identity rather than a principal, how the "auth-ip" per-source window closes + the rest by catching password spray that no per-account counter can see and is attached by default on AuthControllerBase and PasswordResetAuthControllerBase rather than left to each app to remember, what the settings layer adds on top (a bound "RateLimiting" section, the hub-path controls, a selectable sliding window, and an opt-in shared Redis counter for three of the partitions, none of which either app - has turned on), why the UI origin gets a concurrency ceiling in app code rather than another limiter, and - the honest boundaries in all three: principal-dependence, config order, silently-droppable attributes, - shared-IP coarseness, the DoS-on-the-user lever, and cache state under scale-out.

          + has turned on), why the UI origin is its own edge with a framework kit of its own (a per-IP window chained + with a concurrency ceiling, plus a circuit ceiling), and the honest boundaries in all three: + principal-dependence, config order, silently-droppable attributes, shared-IP coarseness, the + DoS-on-the-user lever, and cache state under scale-out.

          Next in the series: Aspire, the one command that brings up the whole distributed stack locally.

          MMCA.Common is Apache-2.0 licensed and open source. Star the repo, read the ADRs behind this pattern, or dotnet add package MMCA.Common.API and try it.

          diff --git a/articles/resilience-recovery-objectives.html b/articles/resilience-recovery-objectives.html index 03897560..af4d4373 100644 --- a/articles/resilience-recovery-objectives.html +++ b/articles/resilience-recovery-objectives.html @@ -168,15 +168,15 @@

          Half one: the standard resilience handler on every outbound client

          The runtime half is the part already shown elsewhere in this series, so I will summarize and attribute rather than re-derive it. Every outbound HTTP and gRPC client in the system gets the same Polly pipeline: retry, timeout, and a circuit breaker. It is not wired call-site by call-site. It is configured once, in the Aspire service-side baseline, and every client inherits it.

          -

          The wiring lives in AddServiceDefaults() from MMCA.Common.Aspire, the single method every service host calls first in Program.cs. The Aspire one-command deep-dive (Article 31) walks it in full; the short version is that AddServiceDefaults() configures OpenTelemetry, service discovery, and Polly resilience handlers on every HttpClient, with a 30 second per-attempt timeout, a 60 second circuit-breaker sampling window, and a 90 second total-request timeout. Those are the values that article verified against source. Every outbound call rides this pipeline by default. That is the runtime side of ADR-009 stated plainly: a developer adding a new typed client does not opt into resilience and cannot forget it, because it is applied at the HttpClient defaults layer, not per registration.

          -

          The gRPC side gets the identical treatment, and the gRPC contracts chapter is explicit about it. AddTypedGrpcClient<TClient>(serviceName) calls AddStandardResilienceHandler(), which gives every gRPC client an explicit Polly pipeline sourced entirely from GrpcResilienceDefaults: the attempt timeout, the total timeout and the retry budget are the same values the HTTP defaults use, and the circuit-breaker values are spelled out on their own (a 0.5 failure ratio, a minimum throughput of 10, a 10 second break), precisely because an east-west gRPC call bypasses the Gateway's active health checks. There is one sharp edge worth knowing, covered in the module-extraction deep-dive (Article 32): a deliberate SocketsHttpHandler override forces explicit HTTP/2 first, because the global resilience handler can otherwise wrap the primary handler in a way that defeats the h2c negotiation. Resilience is then layered back on top. So the order is "force the transport, then add resilience," not the reverse.

          +

          The wiring lives in AddServiceDefaults() from MMCA.Common.Aspire, the method every service host calls early in Program.cs, before any module-specific services are added. The Aspire one-command deep-dive (Article 31) walks it in full; the short version is that AddServiceDefaults() configures OpenTelemetry, service discovery, and Polly resilience handlers on every HttpClient, with a 30 second per-attempt timeout, a 60 second circuit-breaker sampling window, a 90 second total-request timeout, and exactly one retry per hop. That retry never replays a POST or a PATCH: an attempt that timed out may still be running on the server, and a server-to-server hop carries no idempotency key, so only the idempotent verbs keep their single retry. Every outbound call rides this pipeline by default. That is the runtime side of ADR-009 stated plainly: a developer adding a new typed client does not opt into resilience and cannot forget it, because it is applied at the HttpClient defaults layer, not per registration.

          +

          The gRPC side gets the same pipeline with two deliberate differences, and the gRPC contracts chapter is explicit about both. AddTypedGrpcClient<TClient>(serviceName) calls AddStandardResilienceHandler(), which gives every gRPC client an explicit Polly pipeline sourced entirely from GrpcResilienceDefaults: the attempt timeout, the total timeout, the sampling window and the retry budget are the same values the HTTP defaults use, while the circuit-breaker values are spelled out on their own (a 0.5 failure ratio, a minimum throughput of 10, a 10 second break), precisely because an east-west gRPC call bypasses the Gateway's active health checks. The second difference is the retry predicate. Every gRPC call is a POST, so the HTTP rule would switch the retry off entirely; instead the gRPC retry handles only an HttpRequestException, a failure to reach the peer at all (DNS or connect during a replica rollover). A status code or an attempt timeout may already have reached the handler, and replaying it could run the call twice. There is one sharp edge worth knowing, covered in the module-extraction deep-dive (Article 32): a deliberate SocketsHttpHandler override forces explicit HTTP/2 first, because the global resilience handler can otherwise wrap the primary handler in a way that defeats the h2c negotiation. Resilience is then layered back on top. So the order is "force the transport, then add resilience," not the reverse.

          This pipeline is not decorative. It is load-bearing for a specific, documented case. In ADC, Conference and Engagement form a bidirectional gRPC pair, and the AppHost gives Engagement a WaitFor(conference) but deliberately gives the reverse Conference-to-Engagement edge only a WithReference with no WaitFor, because a reciprocal wait would deadlock startup (each service waiting for the other to be healthy). The transient "peer not ready" errors that result during startup self-heal through the resilience pipeline. The gRPC chapter says this directly: "the retry plus circuit breaker is what makes them tolerable." That is the runtime payoff. Retries are what let a mutual synchronous dependency boot at all.

          Fitness-enforced, not just present

          -

          A convention that is "applied everywhere by everyone remembering to" is the same failure mode the idempotency and caching articles kept warning about. The framing across this series is that the standard resilience handler is fitness-enforced: the architecture asserts that outbound clients carry it, rather than trusting each registration. The honest detail is that the primary mechanism for getting it onto every client is structural: it is added at the HttpClient defaults layer in AddServiceDefaults() and inside AddTypedGrpcClient<TClient>, so the only way to get an outbound client without resilience is to bypass the framework's registration helpers entirely. That structural default is what makes "every outbound client" a statement of fact instead of a hope.

          +

          A convention that is "applied everywhere by everyone remembering to" is the same failure mode the idempotency and caching articles kept warning about. The standard resilience handler works on two levels. The first is structural: it is added at the HttpClient defaults layer in AddServiceDefaults(), inside AddTypedGrpcClient<TClient>, and inside AddTypedServiceClient<TInterface, TImplementation>, the typed HTTP client helper for service-to-service calls, which configures its handler from the same HttpResilienceDefaults. So the only way to get an outbound client without resilience is to bypass the framework's registration helpers entirely. The second is executable: named tests pin what those helpers configure. ResilienceHandlerTests asserts every option the gRPC path sets, pins the GrpcResilienceDefaults values, ties its timeouts and retry budget to the HTTP defaults, and checks the connection-failure-only retry predicate at runtime. TypedServiceClientRegistrationTests asserts the one retry and the 30, 90 and 60 second values on the typed HTTP client. ResilienceCircuitBreakerFaultInjectionTests drives sustained failures and proves the breaker actually opens and short-circuits. Choosing the values stays a review concern; changing one silently does not survive the build. The structural default is what makes "every outbound client" a statement of fact instead of a hope, and the tests are what keep the values behind it from drifting.

          The one place resilience left the outbound client: the outbox broker publish

          For most of this series, "resilience policy" has meant "outbound HTTP or gRPC client." ADR-087 (accepted 2026-08-18) amends ADR-009 with the first exception, and it is a narrow one: the outbox's broker publish carries a Polly circuit breaker of its own, and nothing else in the persistence path does.

          -

          The scope is deliberate. OutboxProcessor holds a per-instance ResiliencePipeline (OutboxProcessor.cs:107, built at :790-801) and wraps exactly one call in it, state.Bus.PublishAsync(state.Event, ct) (:631-635). The in-process dispatch branch sits outside it, because a direct method call into the same process has no transport that can be dead (:627-630, with the else branch at :637-640). The parameters live in BrokerResilienceDefaults: a 0.5 failure ratio (:32), a minimum throughput of 10 attempts before the ratio is evaluated at all (:40), a 30 second sampling window (:47), and a 15 second break (:55). No retry strategy is paired with the breaker (:17-22), because the outbox already is the retry: a Polly retry inside a loop that re-leases and retries would multiply the attempt count without changing the outcome.

          -

          Note what this breaker does and does not buy, because it is the cleanest small example of the honesty this article is asking for. It adds no delivery guarantee. BrokenCircuitException is caught by the same catch (Exception ex) as any publish failure (:666), increments RetryCount (:668), re-leases the row with the usual backoff (:677-678), and dead-letters at MaxRetries like everything else (:702). Only the observability differs: a broker.circuit.open.count increment (:691-693) and one log line per batch instead of one per message (:696-700). What it fixes is cost and noise. When the broker is unreachable rather than slow, every message in every batch fails identically, and the breaker converts a batch of connection timeouts into a batch of microsecond rejections. The pipeline is also a per-instance field, so N replicas mean N independent circuits and an effective threshold N times the configured one.

          +

          The scope is deliberate. OutboxProcessor holds a per-instance ResiliencePipeline (OutboxProcessor.cs:102, built at :690) and wraps exactly one call in it, state.Bus.PublishAsync(state.Event, ct) (:540-544). The in-process dispatch branch sits outside it, because a direct method call into the same process has no transport that can be dead (:536-539, with the else branch at :546-550). The parameters live in BrokerResilienceDefaults: a 0.5 failure ratio (:32), a minimum throughput of 10 attempts before the ratio is evaluated at all (:40), a 30 second sampling window (:47), and a 15 second break (:55). No retry strategy is paired with the breaker (:17-22), because the outbox already is the retry: a Polly retry inside a loop that re-leases and retries would multiply the attempt count without changing the outcome.

          +

          Note what this breaker does and does not buy, because it is the cleanest small example of the honesty this article is asking for. It adds no delivery guarantee. BrokenCircuitException is caught by the same catch (Exception ex) as any publish failure (:576), increments RetryCount (:578), re-leases the row with the usual backoff (:587-588), and dead-letters at MaxRetries like everything else (:612). Only the observability differs: a broker.circuit.open.count increment (:601-603) and one log line per batch instead of one per message (:606-610, with the per-message retry log skipped for those rows at :623). What it fixes is cost and noise. When the broker is unreachable rather than slow, every message in every batch fails identically, and the breaker converts a batch of connection timeouts into a batch of microsecond rejections. The pipeline is also a per-instance field, so N replicas mean N independent circuits and an effective threshold N times the configured one.

          The other half of that record is what it declined to do, and that is the part worth copying. The symmetric move, a breaker on the query path so a failing database sheds load instead of queueing on it, is explicitly rejected. The reason is composition, not appetite: EF Core's EnableRetryOnFailure execution strategy (SQLServerDbContext.cs:63-66, 5 retries, a 10 second maximum delay) already owns retrying at the EF layer, and it constrains how a user-initiated transaction may be written. Wrapping a breaker around a call that is already being retried inside that strategy would either count one logical failure many times or force the strategy to be replaced, which is an EF execution-strategy rework rather than a breaker. So the database keeps EnableRetryOnFailure plus CommandTimeoutSeconds (:55) as its posture, and the asymmetry is recorded as a decision. The ADR's own reason for writing the rejection down is the reusable lesson: an engineer who finds a breaker on the broker and none on the database will otherwise conclude the second was forgotten, and add it.

          Half two: declared RTO and RPO per scenario

          Now the part that is actually missing from most "resilience" treatments, and the part this article exists to document.

          @@ -206,12 +206,12 @@

          Half two: declared RTO and R

          These numbers exist in source. They are real and modest, and the runbook says why they are modest on purpose: ADC is a regional, non-24x7 conference app, so sub-hour multi-region failover is explicitly declared a non-goal. That sentence is the whole point of declaring objectives. An RTO is not a brag about how fast you are. It is a statement of how fast you have decided to be, so that the architecture, the backup tier, and the on-call expectations can all be sized to match it. A declared four-hour RTO for a region loss is an honest, scoped commitment. An undeclared one is a fight at 3am about what "back up" even means.

          -

          The runbook pairs the objectives with the SPOFs it knowingly accepts: one Azure SQL server, one Container Apps environment with every app at minReplicas: 1, one Service Bus namespace, one ACR. Each is listed with its mitigation. Accepting a single point of failure in writing, with the mitigation named, is a different act than having one by accident.

          +

          The runbook pairs the objectives with the SPOFs it knowingly accepts: one Azure SQL server, one Container Apps environment with every app at minReplicas: 1, one Service Bus namespace, one ACR. The SQL server entry names its mitigation (geo-redundant PITR plus LTR, and a documented import path for the archived legacy data), the Container Apps entry names a conference-day scale-up applied only when the load warrants it, and the Service Bus and ACR line is a bare acceptance with no mitigation attached. Accepting a single point of failure in writing is a different act than having one by accident, and the uneven entries are themselves informative: they show exactly where the runbook has a plan and where it has only a decision.

          The drilled restore: backups you tested, not backups you assumed

          The second word in "declared RTO/RPO and a drilled restore" is the one that separates a posture from a wish.

          The backup posture in ADC's runbook is two tiers. Point-in-time restore (PITR) on geo-redundant storage covers the "undo the last bad change" case with an RPO of minutes. Long-term retention (LTR) on all four live per-service databases keeps weekly, monthly, and yearly backups, declared as a serviceDatabaseLtr resource in infra/main.bicep. Those four are the only databases on the SQL server, so the two tiers cover the entire application data estate; the AtlDevCon archive of the legacy shared database lives in blob storage as a bacpac instead, which puts it outside PITR and LTR by design. Backups being declared in infrastructure-as-code, not clicked into existence in a portal, is itself part of the discipline: the retention policy is version-controlled and reviewable.

          But a backup you have never restored is a hypothesis, not a recovery plan. So the runbook ships an Azure-CLI drill script (az sql db restore, then az sql db show, then az sql db delete): it PITR-restores a throwaway copy of a database, times the restore as the measured RTO, verifies the copy comes back Online, then deletes it. The automated check is deliberately ARM-level (is the restored database Online?); a deeper data check, row counts against the original via the SQL admin login, is a documented manual step you run with -KeepCopy. The objective is not to recover anything. It is to prove the restore path works before you need it under pressure, and to time it against the declared RTO. ADR-009 requires the drill to be recorded in a drill-result table.

          -

          The drill is executed, repeated and enforced. Its first recorded run, on 2026-06-20, took ADC_Conference through a point-in-time restore to a throwaway copy, verified and timed at 2.6 minutes against the declared 2-hour RTO, recorded in the drill table in DISASTER-RECOVERY.md and closing TD-10. It runs as a dr-drill.yml workflow over a dr-restore-drill.ps1 script, on a weekly cron (Mondays 06:00 UTC) as well as on-demand workflow_dispatch, and the deploy pipeline carries a dr-freshness job in its needs that reads the latest successful drill and fails the deploy if it is older than an 8-day window, so a stale recovery proof blocks the deploy instead of being a soft reminder. The ADC scorecard puts resilience at its top maturity precisely on that gate. Coverage is a rotation rather than a single-database story: the scheduled run picks its target across all four live per-service databases by ISO week number, so each one earns its own recovery proof roughly monthly, and the drill table records six passing restores from 2026-06-20 through 2026-08-10 covering ADC_Identity, ADC_Conference, ADC_Engagement, and ADC_Notification, the slowest at 4.4 minutes against the 2-hour RTO. That is also the cleanest illustration of why "drilled" is a separate requirement from "documented": a runbook can be complete and correct and still be a hypothesis, and only a run that is timed and written down turns a correct procedure into a measured recovery posture. What remains genuinely open is narrower: every one of those proofs is the same scenario, a single-database point-in-time restore, so the region-loss objective and the full multi-service restore order are declared targets rather than measured ones, and the drill plus its freshness gate live in the consuming app's pipeline, because ADR-009 makes recovery each app's obligation rather than something the framework can run for it.

          +

          The drill is executed, repeated and enforced. Its first recorded run, on 2026-06-20, took ADC_Conference through a point-in-time restore to a throwaway copy, verified and timed at 2.6 minutes against the declared 2-hour RTO, recorded in the drill table in DISASTER-RECOVERY.md and closing TD-10. It runs as a dr-drill.yml workflow over a dr-restore-drill.ps1 script, on a weekly cron (Mondays 06:00 UTC) as well as on-demand workflow_dispatch, and the deploy pipeline carries a dr-freshness job in its needs that reads the latest successful drill and fails the deploy if it is older than an 8-day window, so a stale recovery proof blocks the deploy instead of being a soft reminder. The ADC scorecard puts resilience at its top maturity precisely on that gate. Coverage is a rotation rather than a single-database story: the scheduled run picks its target across all four live per-service databases by ISO week number, so each one earns its own recovery proof roughly monthly. The drill table records six passing restores from 2026-06-20 through 2026-08-10 covering ADC_Identity, ADC_Conference, ADC_Engagement, and ADC_Notification, the slowest recorded at 4.4 minutes against the 2-hour RTO. The weekly runs after 2026-08-10 succeed in the workflow history but are not written into that table, and one scheduled run on 2026-09-14 was cancelled at a 30-minute job limit, and the drill job carries a 60-minute timeout for that reason: Azure SQL restore time is platform-queued and varies run to run. The freshness gate reads the workflow's latest successful run, not the table, so the deploy stays honestly gated while the written ledger lags, and ADR-009 names exactly that lag as the risk the table exists to expose: a stale drill table is a visible smell. That is also the cleanest illustration of why "drilled" is a separate requirement from "documented": a runbook can be complete and correct and still be a hypothesis, and only a run that is timed and written down turns a correct procedure into a measured recovery posture. What remains genuinely open is narrower: every one of those proofs is the same scenario, a single-database point-in-time restore, so the region-loss objective and the full multi-service restore order are declared targets rather than measured ones. The split of ownership is also worth noticing. The drill itself lives in the consuming app's pipeline, because ADR-009 makes recovery each app's obligation rather than something the framework can run for it. The gate logic does not: the dr-freshness job in ADC's deploy.yml calls freshness-gate, a composite action shipped from the MMCA.Common repository and shared by the ADC and Store deploy pipelines, which also owns the break-glass path (skipping the gate without a written justification fails the job).

          Database-per-service multiplies the restore surface

          There is a structural reason recovery is harder here than in a monolith, and it is the direct cost of a decision celebrated elsewhere in this series.

          ADR-006 (database-per-service) gives every service its own database and its own outbox, the right call for isolation and the outbox-race fix. But it has a recovery consequence: there is no single database to restore. There are four (ADC_Identity, ADC_Conference, ADC_Engagement, ADC_Notification), each with its own PITR window, its own LTR policy, and its own place in the restore order. A point-in-time restore of one service to 10:42 does not automatically align with the others, and cross-service references are scalar IDs with consistency flowing through the outbox and broker, so a restore can leave an event mid-flight. The runbook's per-database, restore-to-new-name-then-repoint procedure is the operational answer, and it is more steps than "restore the database." Database-per-service multiplies the backup and restore surface. That is not a reason to avoid it. It is a reason to declare the objectives per service and to drill the restore, which is precisely what ADR-009 demands.

          @@ -220,9 +220,9 @@

          The DR runbook and the d

          The deploy pipeline closes the loop on the runtime side with two post-deploy gates that answer different questions. The activation gate asserts that for every app the newest revision reports healthy, running, and carrying 100% of the traffic, which is what proves the code just built is the code currently serving. The reachability gate then probes every service through the Gateway: /health, the JWKS endpoint, an anonymous GET /Events on Conference, the auth-gated /Bookmarks and /Notifications/inbox (where a 401 is the healthy signal, because it proves the request traversed Gateway to service to auth pipeline), and the UI root. Either gate failing rolls every app back to its last healthy provisioned revision and fails the job. The order matters: HTTP probes all enter through the Gateway, and a healthy Gateway keeps serving from the previous backend revision when the new one never goes ready, so every probe answers from old code and the run goes green, and the activation gate is what catches that. Together the two gates are recovery automation for the most common failure (a bad deploy), beside the manual restore procedures for the rarer, scarier ones.

          Trade-offs, honestly

            -
          • RTO/RPO are only as real as the last drill. ADC's objectives are declared with specific numbers, and the restore is drilled repeatedly: the drill table records six passing restores from 2026-06-20 through 2026-08-10, covering every live database on a weekly rotation, from a 1.8-minute ADC_Identity restore to a 4.4-minute one, all well inside the 2-hour RTO. That is six timed proofs of a single scenario: a one-database point-in-time restore. The cadence is enforced rather than aspirational: the drill runs on a weekly cron, and a dr-freshness deploy gate blocks the deploy when the latest successful drill goes stale. The recovery time is measured rather than assumed for that path, but the figures for the other scenarios (region loss, the full multi-service restore order) remain declared targets until each is drilled too.
          • +
          • RTO/RPO are only as real as the last drill. ADC's objectives are declared with specific numbers, and the restore is drilled repeatedly: the drill table records six passing restores from 2026-06-20 through 2026-08-10, covering every live database on a weekly rotation, from a 1.8-minute ADC_Identity restore to a 4.4-minute one, all well inside the 2-hour RTO. Those are six recorded, timed proofs of a single scenario, a one-database point-in-time restore, and the later weekly runs are not yet in the table, so the written record is only as current as the last time someone copied a run into it. The cadence is enforced rather than aspirational: the drill runs on a weekly cron, and a dr-freshness deploy gate blocks the deploy when the latest successful drill goes stale. The recovery time is measured rather than assumed for that path, but the figures for the other scenarios (region loss, the full multi-service restore order) remain declared targets until each is drilled too.
          • Database-per-service multiplies the backup and restore surface. Four databases mean four PITR windows, four LTR policies, and a restore order to get right. The isolation win from ADR-006 is paid for in recovery complexity. The mitigation is per-service objectives and a per-database restore procedure, not a single "restore everything" button, because that button cannot exist across independent databases.
          • -
          • Retries can amplify load. The resilience handler resends calls that did not visibly succeed, which is the whole reason the idempotency article exists: a retry is only safe if the operation it retries is idempotent. Under a partial outage, aggressive retries across many clients can also pile load onto a struggling dependency. The circuit breaker (the 60 second sampling window) is what bounds that, but the tension is real and the timeouts are tuned, not arbitrary.
          • +
          • Retries can amplify load, so they are rationed. Every hop that multiplies its own full retry budget turns a backend brownout into a request storm at exactly the wrong moment, which is why the framework caps the handler at one retry per hop and leaves user-facing retries to the UI service base classes. The handler also refuses to replay a mutation: the HTTP defaults disable the retry for POST and PATCH, and the gRPC clients retry only a failure to reach the peer. That is the idempotency article's lesson applied at the transport: a retry is only safe if the operation it repeats is idempotent, so the handler retries only what is. The cost is that a genuinely transient failure on a mutation surfaces to the caller instead of being absorbed, and the circuit breaker (the 60 second sampling window) is what bounds the remaining retry pressure on a struggling dependency.
          • Single-region by design. ADC accepts one SQL server, one Container Apps environment, one Service Bus namespace, and one ACR as written-down single points of failure. The four-hour region-loss RTO is honest about this. A system that needs sub-hour multi-region failover would declare different objectives and pay for them; this one declared that it does not, and sized accordingly.

          Apply this even without MMCA

          @@ -236,7 +236,7 @@

          Apply this even without MMCA

    The takeaway: resilience is not retries; it is a declared, tested recovery posture. A Polly pipeline keeps a single call alive under transient failure. An RTO, an RPO, and a restore you actually drilled keep the business alive after a real one. Ship both, and write down the drill.


    -

    What we covered: how ADR-009 bolts two decisions together; the standard Polly resilience handler (retry, timeout, circuit breaker) applied to every outbound HTTP and gRPC client through AddServiceDefaults() and AddTypedGrpcClient, and why it is what lets a bidirectional gRPC pair even boot; the one place ADR-087 extends that posture past outbound clients, a circuit breaker around the outbox broker publish and nothing else, plus the per-query database breaker the same record rejects because it does not compose with EF's execution strategy; why retries alone are insufficient; the declared RTO/RPO per scenario in ADC's DR runbook; the two-tier PITR/LTR backup posture and the drills that were run and timed rather than assumed (a 2.6-minute ADC_Conference PITR restore on 2026-06-20 closed TD-10, and a weekly rotation records six proofs through 2026-08-10 covering all four live databases); how database-per-service multiplies the restore surface; and the activation and reachability smoke gates that surround the runbook.

    +

    What we covered: how ADR-009 bolts two decisions together; the standard Polly resilience handler (retry, timeout, circuit breaker) applied to every outbound HTTP and gRPC client through AddServiceDefaults(), AddTypedGrpcClient and AddTypedServiceClient, capped at one retry per hop that never replays a mutation, and why it is what lets a bidirectional gRPC pair even boot; the one place ADR-087 extends that posture past outbound clients, a circuit breaker around the outbox broker publish and nothing else, plus the per-query database breaker the same record rejects because it does not compose with EF's execution strategy; why retries alone are insufficient; the declared RTO/RPO per scenario in ADC's DR runbook; the two-tier PITR/LTR backup posture and the drills that were run and timed rather than assumed (a 2.6-minute ADC_Conference PITR restore on 2026-06-20 closed TD-10, and a weekly rotation records six proofs through 2026-08-10 covering all four live databases); how database-per-service multiplies the restore surface; and the activation and reachability smoke gates that surround the runbook.

    Next in the series: architecture fitness functions, the executable rules that keep every pattern in this series honest by failing the build when one is violated.

    MMCA.Common is Apache-2.0 licensed and open source. Star the repo, read the operational-runbooks chapter of the onboarding guide, or dotnet add package MMCA.Common.Aspire and try it.

    diff --git a/articles/resource-ownership-authorization.html b/articles/resource-ownership-authorization.html index 8854257a..88612064 100644 --- a/articles/resource-ownership-authorization.html +++ b/articles/resource-ownership-authorization.html @@ -201,7 +201,8 @@

    The MMCA answer: two narrow a list without re-running the query, and a query predicate cannot 403 a single bad id. MMCA.Common ships one piece for each, keyed on the same claim, sharing the same bypass role, and a third piece that exists only because the filter refuses to guess: an attribute an action uses to declare that it has no - owner parameter to compare.

    + owner parameter to compare. Beside the collection helper sit two fail-closed checks, so a controller + that scopes by ownership does not hand-write its own gate either.

    Single-resource routes get an action filter. OwnerOrAdminFilter (Source/Presentation/MMCA.Common.API/Authorization/OwnerOrAdminFilter.cs:31) is a sealed IAsyncActionFilter whose primary constructor takes ICurrentUserService and an @@ -234,7 +235,7 @@

    The MMCA answer: two "nothing to enforce", which silently stops guarding any action whose parameter is optional or not an integer: the guard disappears with no error, no exception and nothing for a who-can-do-what test to catch. ADR-033 records deny-by-default as the deliberate choice - (033-resource-ownership-authorization.md:71-82). An action that genuinely has no owner parameter says + (033-resource-ownership-authorization.md:80-91). An action that genuinely has no owner parameter says so out loud with [AllowMissingOwner] (Source/Presentation/MMCA.Common.API/Authorization/AllowMissingOwnerAttribute.cs:21, an AttributeTargets.Class | AttributeTargets.Method attribute with Inherited = true, @@ -243,13 +244,13 @@

    The MMCA answer: two OwnerOrAdminFilter.cs:84). The opt-out excuses a missing parameter only: an action carrying a foreign owner id is still denied, and a missing owner claim is still denied regardless.

    Collection routes get an ownership Specification. OwnershipHelper - (Source/Presentation/MMCA.Common.API/Authorization/OwnershipHelper.cs:10) is a static helper. Its - GetOwnershipSpecification<TSpec, TId> (OwnershipHelper.cs:34) takes the bypass role as a required - argument (OwnershipHelper.cs:38) and returns null for a caller who holds it - (OwnershipHelper.cs:45, OwnershipHelper.cs:47), and otherwise reads the caller's id claim - (GetClaimValue<TId>(claimType), OwnershipHelper.cs:50) and builds a specification through a supplied - factory (OwnershipHelper.cs:51); a convenience overload defaults the claim name to "customer_id" - (OwnershipHelper.cs:64-69, the literal at :69) and still requires the role (:67). The object it + (Source/Presentation/MMCA.Common.API/Authorization/OwnershipHelper.cs:11) is a static helper. Its + GetOwnershipSpecification<TSpec, TId> (OwnershipHelper.cs:35) takes the bypass role as a required + argument (OwnershipHelper.cs:39) and returns null for a caller who holds it + (OwnershipHelper.cs:46, OwnershipHelper.cs:48), and otherwise reads the caller's id claim + (GetClaimValue<TId>(claimType), OwnershipHelper.cs:51) and builds a specification through a supplied + factory (OwnershipHelper.cs:52); a convenience overload defaults the claim name to "customer_id" + (OwnershipHelper.cs:65-70, the literal at :70) and still requires the role (:68). The object it hands back is a Specification<TEntity, TIdentifierType> (Source/Core/MMCA.Common.Domain/Specifications/Specification.cs:15) whose Criteria is an EF-translatable expression tree (Specification.cs:23). That is the same specification type from Article @@ -257,19 +258,33 @@

    The MMCA answer: two list query returns only the caller's rows. A null specification (the bypass case) applies no filter, and because these are real specifications they compose, an AndSpecification (Specification.cs:81) ties the ownership scope to any other criteria a query already carries.

    -

    One bypass role, on both. Both points call OwnershipHelper.IsAdmin (OwnershipHelper.cs:17), which +

    One bypass role, on both. Both points call OwnershipHelper.IsAdmin (OwnershipHelper.cs:18), which compares ICurrentUserService.Role (Source/Core/MMCA.Common.Application/Interfaces/Infrastructure/Auth/ICurrentUserService.cs:22) to the - bypassRole its caller supplies, case-insensitively (OwnershipHelper.cs:20). That parameter has no + bypassRole its caller supplies, case-insensitively (OwnershipHelper.cs:21). That parameter has no default value, and the XML doc says why: the framework declares no role names - (OwnershipHelper.cs:13-15). MMCA.Store passes its own RoleNames.Admin at both points - (OrdersController.cs:67, OrdersController.cs:69-71). One predicate, consulted by the filter and by - the helper, so a privileged caller sees and touches any resource through either path and you do not - maintain two definitions of "may see everything."

    -

    Notice the two deliberately different failure shapes. The single-resource filter denies with a 403 - ForbidResult. The collection path never 403s: it returns a filtered, possibly empty, result set. Both - flow through the caller's normal Result/HTTP edge, not exceptions.

    -
    // Illustrative of shape: the two enforcement points, assembled from the real members.
    +          (OwnershipHelper.cs:13-17, the sentence at :16). MMCA.Store names its own RoleNames.Admin at both
    +          points: as the filter's BypassRole in each module that applies it
    +          (MMCA.Store/.../Sales.API/DependencyInjection.cs:50, MMCA.Store/.../Identity.API/DependencyInjection.cs:64)
    +          and as the helper's argument in each controller (OrdersController.cs:68). One predicate, consulted by
    +          the filter and by the helper, so a privileged caller sees and touches any resource through either path
    +          and you do not maintain two definitions of "may see everything."

    +

    The helper also owns the two fail-closed checks. A null from GetOwnershipSpecification means two + different things: the caller holds the bypass role, or the caller's owner claim cannot be resolved, and + only the first may read unscoped. RequireResolvableOwner<TId> (OwnershipHelper.cs:91-104) tells them + apart: it succeeds for the bypass role or a parsable owner claim and otherwise fails with + Error.Forbidden, a 403 (OwnershipHelper.cs:101-103, the error built at :174-175). + ValidateOwnershipAsync<TId> (OwnershipHelper.cs:133-157) is the per-record check for a mutation: the + bypass role passes without a lookup (:146), a missing owner claim fails with the same 403 before any + lookup (:151-153), and a caller who does not own the record gets Error.NotFound, a 404 + (:167-171), so the existence of someone else's record cannot be probed. Both take the claim type and + the bypass role from the caller, exactly as the rest of the helper does, so a host's vocabulary flows + through unchanged.

    +

    Notice the deliberately different failure shapes. The single-resource filter denies with a 403 + ForbidResult. The ownership specification never 403s: it returns a filtered, possibly empty, result + set, and the only 403 on a collection read comes from the separate resolvable-owner gate, never from the + query. Both flow through the caller's normal Result/HTTP edge, not exceptions.

    +
    // Illustrative of shape: the enforcement points, assembled from the real members.
     
     // (1) Single-resource: the filter's core check (OwnerOrAdminFilter.cs:43-79), options-driven.
     var settings = options.Value;   // OwnerOrAdminFilterOptions: OwnerClaimType, BypassRole, OwnerParameterName
    @@ -313,7 +328,16 @@ 

    The MMCA answer: two // BypassRole is required and has no default, so the host names it (Store: RoleNames.Admin). private OrdersByCustomerSpecification? GetOwnershipSpecification() => OwnershipHelper.GetOwnershipSpecification( - currentUserService, id => new OrdersByCustomerSpecification(id), RoleNames.Admin);

    + currentUserService, id => new OrdersByCustomerSpecification(id), RoleNames.Admin); + +// (3) The fail-closed gate every collection read runs first: null means "bypass role" OR +// "unresolvable claim", and only the first may read unscoped. The helper answers the second with 403. +private ObjectResult? RequireResolvableOwner() => + OwnershipHelper.RequireResolvableOwner<CustomerIdentifierType>( + currentUserService, StoreClaimTypes.CustomerId, RoleNames.Admin, nameof(OrdersController), nameof(Order)) + is { IsFailure: true } gate + ? HandleFailure(gate.Errors) + : null;

    How MMCA.Store wires it

    This is not framework-only theory. MMCA.Store turns both points on in production. The filter guards the shopping-cart and customer-profile controllers as a class-level @@ -321,75 +345,87 @@

    How MMCA.Store wires it

    (MMCA.Store/.../Sales.API/Controllers/ShoppingCartsController.cs:50, MMCA.Store/.../Identity.API/Controllers/CustomersController.cs:35). The ownership specification scopes the list and read queries: ShoppingCartsController builds a ShoppingCartByCustomerSpecification - through a private GetOwnershipSpecification() method (ShoppingCartsController.cs:67-69) that filters + through a private GetOwnershipSpecification() method (ShoppingCartsController.cs:65-67) that filters by Id, because a cart is keyed by its customer (ShoppingCartByCustomerSpecification.cs:24, cart => cart.Id.Equals(customerId)), and OrdersController builds an OrdersByCustomerSpecification the same way - (OrdersController.cs:69-71) that filters by CustomerId + (OrdersController.cs:66-68) that filters by CustomerId (OrdersByCustomerSpecification.cs:18, order => order.CustomerId.Equals(customerId)), passing it into - each of its three query call sites (OrdersController.cs:110, :148, :182). Both hand the helper + each of its three query call sites (OrdersController.cs:102, :140, :174). Both hand the helper Store's own RoleNames.Admin, because the framework offers no role name to fall back on.

    Because both filtered controllers apply the filter at class level, deny-by-default forced an audit of - every action on them, and the ones with no owner parameter carry [AllowMissingOwner]: nine - application sites across the two, each with a comment naming the guard that replaces the parameter check. - Four are on ShoppingCartsController (ShoppingCartsController.cs:99, :114, :143, :179): the two - cart list overloads are narrowed to the caller by the controller's GetReadSpecificationAsync override, - so ownership is enforced in the query rather than on a route value, the lookup endpoint is gated by - [HasPermission(SalesPermissions.ShoppingCartsManage)] (:145), and the CSV export is row-scoped the - same way the lists are (more on that below). Five are on CustomersController - (CustomersController.cs:50, :62, :79, :111, :132), all of them gated by - [HasPermission(IdentityPermissions.CustomersManage)] (:52, :64, :81, :113, :131), a capability - rather than a role name (ADR-020). The last of those, CreateAsync, is the telling one: its remarks say - that a guard which holds by accident is one a later signature change can remove without anyone noticing - (CustomersController.cs:124-129).

    + every action on them. The actions with no owner parameter carry [AllowMissingOwner], and so does one + that has one: ten application sites across the two, each next to the guard that replaces or backs up + the parameter check. Four are on ShoppingCartsController (ShoppingCartsController.cs:92, :107, + :136, :172): the two cart list overloads are narrowed to the caller by the controller's + GetReadSpecificationAsync override, so ownership is enforced in the query rather than on a route value, + the lookup endpoint is gated by [HasPermission(SalesPermissions.ShoppingCartsManage)] (:138), and the + CSV export is row-scoped the same way the lists are (more on that below). Six are on CustomersController + (CustomersController.cs:53, :65, :82, :114, :135, :150), all of them gated by + [HasPermission(IdentityPermissions.CustomersManage)] (:55, :67, :84, :116, :134, :149), a + capability rather than a role name (ADR-020). CreateAsync is the telling one: its remarks say that a + guard which holds by accident is one a later signature change can remove without anyone noticing + (CustomersController.cs:127-132). DeleteAsync is the odd one out, because it does take a route id: + without the override the owner would reach the inherited delete through the filter, and a plain + soft-delete of the Customer row skips the anonymizing erasure (ADR-005), so the override puts the action + behind the management capability and the owner erases through the user-deletion path instead + (CustomersController.cs:142-147).

    OrdersController is the instructive one. It does not wear the class-level filter, because an order has its own id and a separate foreign-key owner, so comparing the route id directly to customer_id would - be wrong. Instead it runs an explicit per-mutation ownership check, ValidateOwnershipAsync - (OrdersController.cs:507), which reuses the same OwnershipHelper.IsAdmin bypass through its IsAdmin - property (OrdersController.cs:67) and then splits into two denial shapes on purpose. A caller carrying no - customer_id claim at all gets Error.Forbidden, a 403 (OrdersController.cs:515, - OrdersController.cs:517-521): nothing was looked up, so there is no resource whose existence a 403 could - leak, and this matches the filter's own missing-claim ForbidResult. Only an owner mismatch, where the - claim is present but the order is someone else's, returns Error.NotFound, a 404 rather than a 403 - (OrdersController.cs:530-532), so the response does not reveal that another - customer's order exists (the rationale is in the method's own summary, OrdersController.cs:502-506). - That is the same axis, hand-fit to a resource whose owning id is not its route id.

    + be wrong. Instead its mutating endpoints run a per-record ownership check: a private + ValidateOwnershipAsync (OrdersController.cs:386-402) that delegates to + OwnershipHelper.ValidateOwnershipAsync (OrdersController.cs:390) with Store's customer_id claim and + RoleNames.Admin (:392-393). The only ownership logic the controller supplies is the existence + predicate, an order with this id whose CustomerId is the caller's (OrdersController.cs:394-396). The + helper then splits into two denial shapes on purpose. A caller carrying no customer_id claim at all gets + Error.Forbidden, a 403 (OwnershipHelper.cs:151-153): nothing was looked up, so there is no resource + whose existence a 403 could leak, and this matches the filter's own missing-claim ForbidResult. Only an + owner mismatch, where the claim is present but the order is someone else's, returns Error.NotFound, a + 404 rather than a 403 (OwnershipHelper.cs:167-171), so the response does not reveal that another + customer's order exists (the rationale is in the helper's remarks, OwnershipHelper.cs:110-115, and in + the wrapper's own summary, OrdersController.cs:381-385). That is the same axis, fitted to a resource + whose owning id is not its route id by a single predicate.

    The query endpoints carry a third guard the mutating check does not need, and both filtered controllers - carry it. RequireResolvableOwner (OrdersController.cs:83-93) runs before the query on both - GetAllAsync overloads and GetByIdAsync (call sites at OrdersController.cs:103, :137, :174). It - exists because GetOwnershipSpecification() returns null for two different reasons, a bypass-role - caller (scoping deliberately skipped) or a caller whose customer_id claim cannot be resolved, and only - the first may run unscoped. RequireResolvableOwner rejects the second with the same Error.Forbidden, - a 403, before the query ever runs, mirroring the missing-claim branch of ValidateOwnershipAsync for - reads and lists too. ShoppingCartsController carries an identically named gate - (ShoppingCartsController.cs:81-91, called at :107, :127 and :189), even though its class-level - filter already refuses a claim-less caller through the missing-claim branch: a guard that holds by - accident is one a later change can remove without anyone noticing, so the collection reads state it - themselves. Both controllers' class-level doc comments name the pair that fail closed - (OrdersController.cs:38-45, ShoppingCartsController.cs:35-44).

    -

    The CSV export is where the two mechanisms meet, and the hook that joins them scopes every read. Without - a scoping hook the framework export would query with specification: null, and a Customer-role token - would read every customer's rows, so the gate is an extension point rather than a blanket role lock: + carry it. Each declares a private RequireResolvableOwner() wrapper (OrdersController.cs:80-85, + ShoppingCartsController.cs:79-84) that delegates to OwnershipHelper.RequireResolvableOwner and maps a + failure through HandleFailure. In OrdersController it runs before the query on both GetAllAsync + overloads and GetByIdAsync (call sites at OrdersController.cs:95, :129, :166), so a claim-less + non-admin gets the 403 before the query ever runs, mirroring the missing-claim branch of the per-record + check for reads and lists too. ShoppingCartsController runs the same gate on its collection reads and + its export (ShoppingCartsController.cs:100, :120 and :182), even though its class-level filter + already refuses a claim-less caller through the missing-claim branch: a guard that holds by accident is + one a later change can remove without anyone noticing, so the collection reads state it themselves. Both + controllers' class-level doc comments explain the fail-closed rule (OrdersController.cs:40-47, + ShoppingCartsController.cs:35-44).

    +

    The CSV export is where the two mechanisms meet, and the hook that joins them scopes every read. EntityControllerBase.GetReadSpecificationAsync() - (Source/Presentation/MMCA.Common.API/Controllers/EntityControllerBase.cs:597-599) is virtual and + (Source/Presentation/MMCA.Common.API/Controllers/EntityControllerBase.cs:571-573) is virtual and supplies the specification for every read action, both GetAllAsync overloads, GetAllForLookupAsync, - GetByIdAsync and ExportAsync (summary at EntityControllerBase.cs:562-567). It defaults to - GetExportSpecification() (EntityControllerBase.cs:626), itself virtual and null, so a controller - that overrides neither queries unscoped. The export resolves the hook once per request, so the same - instance filters every page it streams (EntityControllerBase.cs:263-264), and a scoped GetByIdAsync - that filters a row out answers 404 rather than 403, because a "forbidden" would confirm the id exists - (EntityControllerBase.cs:588-590). ShoppingCartsController overrides the read hook - (ShoppingCartsController.cs:207-209, summary :194-198) and OrdersController overrides the export - hook (OrdersController.cs:249-250, summary :242-247), both returning the same + GetByIdAsync and ExportAsync (summary at EntityControllerBase.cs:535-542). It defaults to + GetExportSpecification() (EntityControllerBase.cs:601), itself virtual and null. A controller that + overrides neither serves its JSON reads unscoped, but its export does not follow: when the hook resolves + to null the export refuses with a 403 carrying Export.RowScopeRequired and queries nothing + (EntityControllerBase.cs:272-274, the code at :487, the error at :608-613), unless the controller + opts in to whole-table exports through AllowUnscopedExport (EntityControllerBase.cs:508, false by + default). A forgotten scope therefore serves no rows rather than every row. The export resolves the hook + once per request, so the same instance filters every page it streams (EntityControllerBase.cs:269-270), + and a scoped GetByIdAsync that filters a row out answers 404 rather than 403, because a "forbidden" + would confirm the id exists (EntityControllerBase.cs:562-564). ShoppingCartsController overrides the + read hook (ShoppingCartsController.cs:200-202, summary :187-199) and OrdersController overrides the + export hook (OrdersController.cs:241-242, summary :234-240), both returning the same GetOwnershipSpecification() their list endpoints use, so it is the query and not the role that keeps one - customer out of another's rows, and each export still runs the RequireResolvableOwner gate - (OrdersController.cs:237, ShoppingCartsController.cs:189) that rejects the other caller a null can - stand for. CustomersController deliberately does not follow. Its collection reads are not row-scoped, - they are gated by the customer-management capability, so there is no ownership specification to reproduce, - and relaxing the export would make it more permissive than the list it mirrors - (CustomersController.cs:87-102, the gate at :113). The hook exists to make an export match its list - endpoints: where the list is scoped by a query, so is the export, and where the list is gated by a - capability, so is the export.

    + customer out of another's rows. Because that hook returns null for an admin, both also set + AllowUnscopedExport to the same OwnershipHelper.IsAdmin check the hook uses (OrdersController.cs:249, + ShoppingCartsController.cs:209), so only the bypass role exports the whole table, and each export still + runs the RequireResolvableOwner gate (OrdersController.cs:229, ShoppingCartsController.cs:182) that + rejects the other caller a null can stand for. CustomersController deliberately does not follow. Its + collection reads are not row-scoped, they are gated by the customer-management capability, so there is + no ownership specification to reproduce, and relaxing the export would make it more permissive than the + list it mirrors (CustomersController.cs:90-105, the gate at :116). It declares + AllowUnscopedExport => true instead (CustomersController.cs:48), because every caller who passes that + gate already lists every customer unscoped. The hook exists to make an export match its list endpoints: + where the list is scoped by a query, so is the export, and where the list is gated by a capability, so is + the export.

    The options are what make the filter portable, and MMCA.ADC proves it on both halves. ADC applies the same OwnerOrAdminFilter to its two bookmarks GET endpoints as a [ServiceFilter(typeof(OwnerOrAdminFilter))] (MMCA.ADC/.../Engagement.API/Controllers/BookmarksController.cs:85 for the [HttpGet] at :84, and @@ -401,9 +437,11 @@

    How MMCA.Store wires it

    route id (:55). The row-level half travels too: two Conference controllers override GetExportSpecification() through the same OwnershipHelper.GetOwnershipSpecification, yielding an OwnedByUserSpecification for an attendee and null for an Organizer - (MMCA.ADC/.../Conference.API/Controllers/Events/EventQuestionAnswersController.cs:85-90, - MMCA.ADC/.../Conference.API/Controllers/Sessions/SessionQuestionAnswersController.cs:107-112). Same - filter, same helper, different words, because the words are options rather than literals.

    + (MMCA.ADC/.../Conference.API/Controllers/Events/EventQuestionAnswersController.cs:107-112, + MMCA.ADC/.../Conference.API/Controllers/Sessions/SessionQuestionAnswersController.cs:107-112), set + AllowUnscopedExport to the Organizer check (:119 in each), and run the framework's resolvable-owner + gate through a private RequireResolvableOwner() wrapper (:135-136 in each). Same filter, same helper, + different words, because the words are options rather than literals.

    Trade-offs, honestly

    The §11 review is blunt about the edges of this, and they are real.

      @@ -416,16 +454,19 @@

      Trade-offs, honestly

    • Its correctness rests on the token. Because the check trusts the owner claim, it is exactly as trustworthy as the upstream token validation that put the claim there (ADR-004). A missing claim 403s in the filter and yields a null specification in the helper, and that null means "no scoping," so a - caller must never read a missing claim as the bypass role. The validated principal is load-bearing.
    • + caller must never read a missing claim as the bypass role: that is what RequireResolvableOwner exists + to check, and a controller still has to call it. The validated principal is load-bearing.
    • It is opt-in, so the risk moved rather than vanished. Neither point is automatic. A controller that omits the [ServiceFilter], or a query that forgets to pass the ownership specification, leaks across - customers silently. The two-point split sharpens the risk: one route can guard its mutations and forget - to scope its list, or the reverse. Inside a controller that does wear the filter, deny-by-default - makes a forgotten guard fail closed and visible: an unresolvable owner parameter 403s rather than - slipping through, so every exemption is a declared [AllowMissingOwner] you have to justify in review. - That is a better failure mode, not a solved problem, because the attribute is an assertion the compiler - cannot check. This is the same audit-the-inventory caveat the permission layer and the idempotency - filter carry, and it is honest to name it.
    • + customers silently on its JSON reads. The two-point split sharpens the risk: one route can guard its + mutations and forget to scope its list, or the reverse. The CSV export is the one read the framework + closes by default (no row scope means a 403, not the whole table), but AllowUnscopedExport is itself + an opt-in nothing verifies. Inside a controller that does wear the filter, deny-by-default makes a + forgotten guard fail closed and visible: an unresolvable owner parameter 403s rather than slipping + through, so every exemption is a declared [AllowMissingOwner] you have to justify in review. That is a + better failure mode, not a solved problem, because the attribute is an assertion the compiler cannot + check. This is the same audit-the-inventory caveat the permission layer and the idempotency filter + carry, and it is honest to name it.
    • The filter compares an owner parameter, not the resource's own key. It checks its configured OwnerParameterName (default id), resolved from a route value or a model-bound query or body argument, against the configured owner claim. That works when the parameter is the owning id, as for a cart or a @@ -463,12 +504,14 @@

      Apply this even without MMCA

      scoped out, how MMCA.Common fills it with two enforcement points (OwnerOrAdminFilter that 403s a single-resource route whose id mismatches the caller's owner claim, and OwnershipHelper that builds an ownership Specification to row-scope collection queries) sharing one IsAdmin bypass whose - role name the host supplies, why the + role name the host supplies, plus the helper's two fail-closed checks (a resolvable-owner gate and a + per-record check), why the filter denies when it cannot resolve an owner parameter and how [AllowMissingOwner] makes each exemption - explicit, how MMCA.Store wires all of it (why OrdersController splits its denials, 403 for a missing - claim and 404 for someone else's order, instead of using the class filter, and how both Sales controllers - row-scope their CSV export through the GetReadSpecificationAsync and GetExportSpecification hooks - rather than gating it to a role), and the honest limits: it is + explicit, how MMCA.Store wires all of it (why OrdersController splits its denials through the helper, + 403 for a missing claim and 404 for someone else's order, instead of using the class filter, and how both + Sales controllers row-scope their CSV export through the GetReadSpecificationAsync and + GetExportSpecification hooks rather than gating it to a role, while the framework refuses an unscoped + export by default), and the honest limits: it is claim-trusting not ABAC, it trusts the token (ADR-004), and it is opt-in so a controller that never applies it still leaks.

      Next in the series: defending the API edge, rate limiting for authenticated callers and brute-force diff --git a/articles/result-railway-csharp.html b/articles/result-railway-csharp.html index c6883109..6ff831b3 100644 --- a/articles/result-railway-csharp.html +++ b/articles/result-railway-csharp.html @@ -163,7 +163,7 @@

      Stop

      "This order ID does not exist" is not an exceptional event, it is a routine branch of normal control flow. Here is the Result<T> railway that models it as a value, and why the domain in - MMCA.Common throws zero exceptions.

      + MMCA.Common throws zero exceptions for business outcomes.


      Here is a method signature you have written a hundred times:

      public Order GetOrder(int id);
      @@ -201,21 +201,23 @@

      The MMCA answer: three

      The pattern is factored into three dependency-free pieces, all living in MMCA.Common.Shared, the innermost layer (the Blazor WebAssembly UI can reference it without dragging in EF Core or ASP.NET):

        -
      • ErrorType is the classification axis: a nine-value enum. Validation, Invariant, - NotFound, Conflict, Unauthorized, Forbidden, UnprocessableEntity, Failure, and - Unexpected for a genuine server-side fault the caller cannot fix by changing the request. - Critically, this is a pure enum with no reference to ASP.NET. The domain never names an HTTP - status code.
      • +
      • ErrorType is the classification axis: a ten-value enum. Validation, Invariant, + NotFound, Conflict, Unauthorized, Forbidden, UnprocessableEntity, Failure, + Unexpected for a genuine server-side fault the caller cannot fix by changing the request, and + TooManyRequests for a temporary refusal after too many attempts (a login lockout, say), where + retrying later rather than changing the request is the fix. Critically, this is a pure enum with + no reference to ASP.NET. The domain never names an HTTP status code.
      • Error is the carrier: an immutable positional record with a machine-readable Code (e.g. "Order.NotFound", for programmatic branching), a human-readable Message, an ErrorType, and - optional Source / Target context. Nine factory methods (one per ErrorType) each hard-code the + optional Source / Target context. Ten factory methods (one per ErrorType) each hard-code the correct type, so a caller can never pair Error.NotFoundError(...) with the wrong classification.
      • Result (and the generic Result<T>) is the outcome envelope: either a success, or a failure carrying one or more Errors.
      -

      You cannot new a Result<T>. Its constructors are internal; the only way in is through the static - factories (Result.Success, Result.Failure). That discipline guarantees the invariant the rest of - the codebase relies on: a result is always either a clean success or a non-empty failure, never a +

      You cannot new a Result<T>. Its constructors are internal, so a result comes from the static + factories (Result.Success, Result.Failure) or from the implicit conversions that let a method write + return error; or return value;, and those conversions delegate to the same factories. That + discipline guarantees the invariant the rest of the codebase relies on: a result is always either a clean success or a non-empty failure, never a half-built object.

      The railway, in one picture

      "Railway-oriented programming" is the mental model. Picture two parallel tracks, a success track and a @@ -238,26 +240,40 @@

      The railway, in one picture

      handed when the result is already a failure. A separate ResultExtensions class lifts BindAsync, MapAsync, TapAsync and MatchAsync onto a pending Task<Result<T>>, so an asynchronous pipeline composes end to end without an await and a temporary local between every step.

      -

      The non-generic base carries four members of its own, and Result.Combine(params ReadOnlySpan<Result>) +

      The non-generic base carries four combinators of its own, and Result.Combine(params ReadOnlySpan<Result>) is the one that earns its keep: the aggregate-all-failures combinator. It runs several invariant checks and returns all their errors at once rather than failing on the first. This is the workhorse of domain factory methods. The ReadOnlySpan parameter avoids a heap allocation in the common case. Match, Bind and OnFailure round out the base, so a valueless step composes the same way instead of forcing an if (result.IsFailure) check.

      -
      // A domain factory: invalidity is unrepresentable, and every broken rule is reported at once.
      -public static Result<Speaker> Create(string name, Email email, DateOnly availableFrom)
      +          
      // A domain factory (condensed): invalidity is unrepresentable, and Combine reports every broken rule at once.
      +public static Result<Speaker> Create(
      +    SpeakerIdentifierType? id,
      +    string firstName,
      +    string lastName,
      +    string? email,
      +    /* bio, tagLine, profilePicture, isTopSpeaker, optional social links */)
       {
      -    var validation = Result.Combine(
      -        CheckName(name),
      -        EmailInvariants.EnsureEmailIsValid(email, nameof(Create)),
      -        CheckAvailability(availableFrom));
      -
      -    if (validation.IsFailure)
      +    Email? emailVO = null;
      +    if (!string.IsNullOrWhiteSpace(email))
           {
      -        return Result.Failure<Speaker>(validation.Errors);
      +        var emailResult = Email.Create(email);
      +        if (emailResult.IsFailure)
      +            return Result.Failure<Speaker>(emailResult.Errors);
      +        emailVO = emailResult.Value;
           }
       
      -    return Result.Success(new Speaker { Id = default, Name = name, Email = email });
      +    var result = Result.Combine(
      +        SpeakerInvariants.EnsureFirstNameIsValid(firstName, nameof(Create)),
      +        SpeakerInvariants.EnsureLastNameIsValid(lastName, nameof(Create)),
      +        SpeakerInvariants.EnsureOptionalFieldsAreValid(/* tagLine, links, */ nameof(Create)));
      +    if (result.IsFailure)
      +        return Result.Failure<Speaker>(result.Errors);
      +
      +    var speaker = new Speaker(firstName, lastName, emailVO /* , ... */) { /* Id, links */ };
      +    speaker.AddDomainEvent(new SpeakerChanged(DomainEntityState.Added, speaker.Id, speaker.FullName));
      +
      +    return Result.Success(speaker);
       }
       
       // The shared create pipeline propagates the failure and stops; the success path continues.
      @@ -279,6 +295,9 @@ 

      The railway, in one picture

      await PersistAsync(attemptUnitOfWork, repository, entity, cancellationToken).ConfigureAwait(false); + LogCreated(entity); + await OnCreatedAsync(entity, cancellationToken).ConfigureAwait(false); + return Result.Success(dtoMapper.MapToDTO(entity)); }

      No try, no catch, no throw. The factory refuses to build an invalid Speaker, the handler @@ -287,8 +306,8 @@

      The transport mapping live

      Because ErrorType is transport-agnostic, the translation to an HTTP status code is centralized in a single shared internal class, ErrorHttpMapping. It owns the FrozenDictionary that maps each ErrorType to a status (Validation, Invariant and Failure to 400, NotFound to 404, Conflict - to 409, Unauthorized to 401, Forbidden to 403, UnprocessableEntity to 422, Unexpected to 500, - anything unmapped falling back to 400) and the GetStatusCode lookups over it. Two consumers share the + to 409, Unauthorized to 401, Forbidden to 403, UnprocessableEntity to 422, TooManyRequests to + 429, Unexpected to 500, anything unmapped falling back to 400) and the GetStatusCode lookups over it. Two consumers share the status lookup. ApiControllerBase.HandleFailure() is the normal path: a controller action resolves the status from the most severe error present through ErrorHttpMapping and renders an RFC 9457 ProblemDetails body carrying all the errors. UnhandledResultFailureFilter is the safety net: a global @@ -297,7 +316,8 @@

      The transport mapping live attribute, reuses the same class for the errors projection alone. Because the dictionary lives in one place, the controller base and the filter can never drift apart.

      The gRPC layer does the equivalent over the wire (GrpcResultExceptionInterceptor, ADR-007), so a remote - call looks like a local Result<T> to application code. One enum drives both transports, so every + call looks like a local Result<T> to application code (TooManyRequests, for instance, travels as + ResourceExhausted). One enum drives both transports, so every endpoint and every extracted service produces the same error shape. There is one source of truth for "what does a not-found look like."

      The payoff at the framework level: the domain layer throws zero exceptions for business outcomes. The @@ -336,12 +356,12 @@

      Trade-offs, honestly

      framework-owned. That is not the only exception the framework catches, though. An ordered IExceptionHandler chain converges every escaped exception onto the same RFC 9457 ProblemDetails contract: a cancellation handler (499), a domain-exception handler (400), a DbUpdate handler (409), - a validation handler (400), and a catch-all (500), registered in that load-bearing order. So the + a validation handler (400), and a catch-all (500, or 400 for a refused cross-tenant write), registered in that load-bearing order. So the failure shape stays identical whether it arrived as a Result or as a throw.
    • One status has to stand for a whole list of errors. Every error serializes into the ProblemDetails body, but the status code can only be one number, so it is resolved by ranking: the most severe ErrorType present wins (Unexpected over Unauthorized over Forbidden over - Conflict over NotFound over UnprocessableEntity over the shared bottom rank of Invariant, + TooManyRequests over Conflict over NotFound over UnprocessableEntity over the shared bottom rank of Invariant, Validation and Failure), and equal ranks keep the earliest error. A result carrying both a Validation and a Conflict answers 409, and the validation detail is readable only in the body.
    diff --git a/articles/reusable-blazor-ui-framework.html b/articles/reusable-blazor-ui-framework.html index de26f198..067e6e9c 100644 --- a/articles/reusable-blazor-ui-framework.html +++ b/articles/reusable-blazor-ui-framework.html @@ -171,20 +171,32 @@

    The package tha

    One structural fact sets the tone. MMCA.Common.UI is allowed to reference MMCA.Common.Shared and nothing else. Not Application, not Domain, not Infrastructure. That is a deliberate Clean Architecture constraint, and it has a hard technical reason: the package has to compile into a Blazor WebAssembly bundle that runs in the browser, where it cannot drag EF Core or your database adapters along.

    That constraint is what forces the design to be honest. The UI cannot reach into a repository or call a handler directly, so it has to talk to the backend through a contract over HTTP, binding to DTOs and interfaces it shares with the API, never to server internals. The same dependency rule that protects the domain protects the browser bundle. Ports in, adapters at the edge, all the way out to the screen.

    DataGridListPageBase: the screen you stop rewriting

    -

    The centerpiece is an abstract Blazor component, DataGridListPageBase<TDto>. Every server-paged list screen in every consumer app derives from it. It folds into one reusable place the concerns that were otherwise copy-pasted onto each page: server-side paging against MudBlazor's MudDataGrid<T>, the CancellationTokenSource lifecycle, the loading flag, extracting filter and sort out of MudBlazor's GridState<T>, surfacing errors through ISnackbar, viewport-driven mobile-versus-desktop rendering, and a careful IAsyncDisposable / IDisposable teardown.

    -

    Because all of that lives in the base, a concrete page is tiny. It supplies a Title, points the grid's ServerData at the inherited load method, and declares its columns in markup. That is the whole page. It does not write a query string, does not manage a token source, does not branch on screen size, and does not handle its own disposal.

    +

    The centerpiece is an abstract Blazor component, DataGridListPageBase<TDto>. Every server-paged list screen in every consumer app derives from it. It folds into one reusable place the concerns that were otherwise copy-pasted onto each page: server-side paging against MudBlazor's MudDataGrid<T>, the CancellationTokenSource lifecycle, the loading flag, extracting filter and sort out of MudBlazor's GridState<T>, surfacing errors through the framework's own IToastService, viewport-driven mobile-versus-desktop rendering, and a careful IAsyncDisposable / IDisposable teardown.

    +

    Because all of that lives in the base, a concrete page is tiny. It supplies a Title, hands the base its grid reference, points the grid's ServerData at a one-expression method that passes the inherited load method its data call, and declares its columns in markup. That is the whole page. It does not write a query string, does not manage a token source, does not branch on screen size, and does not handle its own disposal.

    @inherits DataGridListPageBase<ProductDto>
     @page "/products"
    +@inject IEntityService<ProductDto, int> ProductService
     
    -<MudDataGrid T="ProductDto" @ref="GridRef"
    -             ServerData="@(state => LoadServerDataAsync(state, _service.GetPagedAsync))"
    +<MudDataGrid T="ProductDto" @ref="_dataGrid"
    +             ServerData="LoadServerData" Loading="IsLoading"
                  Filterable="true" SortMode="SortMode.Multiple">
         <Columns>
             <PropertyColumn Property="x => x.Name" Title="Name" />
             <PropertyColumn Property="x => x.Price" Title="Price" />
         </Columns>
    -</MudDataGrid>
    -

    The single inherited method doing the work, LoadServerDataAsync, is the heart of the desktop path. It resets the cancellation source, extracts filters and sort from the GridState<TDto> MudBlazor hands it, runs the fetch, and maps a cancellation or an exception to an empty grid plus an optional snackbar instead of an unhandled error. Paging is genuinely server-side: only the requested page is fetched, never the whole table.

    +</MudDataGrid> + +@code { + private MudDataGrid<ProductDto>? _dataGrid; + protected override MudDataGrid<ProductDto>? GridRef => _dataGrid; + + private Task<GridData<ProductDto>> LoadServerData(GridState<ProductDto> state, CancellationToken cancellationToken) + => LoadServerDataAsync( + state, + (filters, page, size, sortCol, sortDir, ct) + => ProductService.GetPagedAsync(filters, page, size, sortCol, sortDir, cancellationToken: ct)); +}
    +

    The single inherited method doing the work, LoadServerDataAsync, is the heart of the desktop path. It resets the cancellation source, extracts filters and sort from the GridState<TDto> MudBlazor hands it, runs the fetch, and maps a cancellation, an exception, or a failed Result to an empty grid plus a toast (the cancellation toast is optional) instead of an unhandled error, raising a LoadFailed flag on a failure. Overlapping calls end on the newest one: a load superseded by a later call answers with that later call's rows, so a slow stale fetch can never overwrite fresher data. Paging is genuinely server-side: only the requested page is fetched, never the whole table.

    Two of the gnarliest details in this base are battle scars, and they are the best argument for consolidating. The first is a MudDataGrid v9 quirk: a parameter setter that clobbers the current page, worked around in one place by re-restoring the page after a rows-per-page reset. The second is a disposed-token-source race, where a debounced reload firing after the component disposed threw ObjectDisposedException and left the blazor-error-ui banner stuck onto the next page. Both were found through end-to-end tests, both were fixed once, and because the fix lives in the base, every list page got it for free. That is the entire thesis in one observation: when the concern is in one place, so is the fix.

    The same page on a phone, without a second page

    The desktop path above is only half of what DataGridListPageBase does, because a data grid is the @@ -223,16 +235,16 @@

    The same page on a phone The three-engine E2E matrix (chromium, firefox, and webkit, all blocking merge gates) exercises the same pages rather than a mobile-specific build that could drift.

    The data-access boundary: bind to an interface, never to HttpClient

    -

    A page in this framework never injects a raw HttpClient. It injects IEntityService<TEntityDTO, TIdentifierType>, a generic CRUD contract: GetAllAsync, GetPagedAsync, GetByIdAsync, AddAsync, UpdateAsync, DeleteAsync, plus a GetAllForLookupAsync for dropdowns. The grid's ServerData callback above is just calling GetPagedAsync, which returns an (Items, TotalItems) tuple shaped exactly for a server-side grid.

    -

    The behavior behind that interface comes from an abstract base, EntityServiceBase<TEntityDTO, TIdentifierType>. A concrete module service is mostly an endpoint string. Every verb routes through one dispatch chokepoint, SendRequestAsync, so retry, auth, and error extraction are applied identically to every call. The error extraction is the subtle, valuable part: before letting EnsureSuccessStatusCode throw a contextless HttpRequestException, the base calls a helper that pulls the server's structured Problem Details payload (a domain failure, a validation failure) out of the response body. A backend Result.Failure therefore surfaces to the page as the server's real message, not a generic "server error."

    -

    EntityServiceBase derives in turn from AuthenticatedServiceBase, which owns the two cross-cutting concerns of any outbound API call. One is a Polly retry policy: three attempts with exponential backoff on HttpRequestException or any 5xx. The other is stamping the JWT bearer token onto a freshly created "APIClient" HttpClient from IHttpClientFactory. That base exists for a precise Blazor Server reason, documented in source: IHttpClientFactory builds its handler chain in a separate DI scope from the Blazor circuit, so the conventional delegating handler cannot reach the circuit-scoped storage that holds the in-memory access token. Reading the token directly and setting the header on a fresh client is the smallest correct fix for that scope mismatch.

    +

    A page in this framework never injects a raw HttpClient. It injects IEntityService<TEntityDTO, TIdentifierType>, a generic CRUD contract: GetAllAsync, GetPagedAsync, GetByIdAsync, AddAsync, UpdateAsync, DeleteAsync, plus a GetAllForLookupAsync for dropdowns. Every member returns a Result, the same railway type the server produced. GetPagedAsync returns a Result wrapping an (Items, TotalItems) tuple shaped exactly for a server-side grid, and a missing entity from GetByIdAsync is a NotFound failure, never a success carrying null. A page branches on the outcome instead of catching an exception.

    +

    The behavior behind that interface comes from an abstract base, EntityServiceBase<TEntityDTO, TIdentifierType>. A concrete module service is mostly an endpoint string. Every verb routes through one dispatch chokepoint, SendRequestAsync, so retry, auth, and error handling are applied identically to every call. The error handling is the subtle, valuable part: the call runs through an HttpResultExecutor that turns transport faults into failures, and every response is read through a ProblemDetailsResultReader that rebuilds the server's structured Problem Details payload (a domain failure, a validation failure) as a Result with its original ErrorType intact. The base states the rule in source: nothing in it throws for a server answer, and the only exception that escapes is the caller's own cancellation. A backend Result.Failure therefore surfaces to the page as the server's real message and error type, not a generic "server error."

    +

    EntityServiceBase derives in turn from AuthenticatedServiceBase, which owns the two cross-cutting concerns of any outbound API call. One is a Polly retry policy: three retries with exponential backoff (2, 4, and 8 seconds plus up to a second of jitter) on HttpRequestException or a retryable status, meaning any 5xx except the permanent 501 and 505, plus 408 and 429, with each retried response disposed so a sustained outage does not leak connections. The other is stamping the JWT bearer token onto a freshly created "APIClient" HttpClient from IHttpClientFactory. That base exists for a precise Blazor Server reason, documented in source: IHttpClientFactory builds its handler chain in a separate DI scope from the Blazor circuit, so the conventional delegating handler cannot reach the circuit-scoped storage that holds the in-memory access token. Reading the token directly and setting the header on a fresh client is the smallest correct fix for that scope mismatch.

    The shape is the same one the backend uses for everything: an interface the consumer programs against, a base class that carries the 80 percent, and a composition root that wires the transport. The UI is just another consumer of ports.

    Theming: one set of tokens, guarded by a fitness test

    Visual consistency lives in one static MudTheme, exposed as MMCATheme.Instance and handed to MudThemeProvider by a shared component, MmcaThemeProviders, that a root layout drops in as a single tag. It defines a light palette, a dark palette, an Inter typography scale, and a 6px border radius.

    That default is not a lock-in. MmcaThemeProviders takes an optional Theme parameter that defaults to MMCATheme.Instance, so an app with its own brand passes a derived MudTheme in one attribute instead of forking the provider block and re-implementing the day/dark lifecycle wired behind it. Two honest limits. The override reaches MudBlazor's own components and stops there: the raw CSS rules in app.css read their colors from --mmca-* custom properties whose literal hex mirrors BrandColors, so a host that swaps the theme object and nothing else gets rebranded Mud components sitting on framework-colored stylesheet rules. And the extension point is unexercised: every root layout across these repos renders <MmcaThemeProviders /> bare, so "one theme everywhere" is the observed state rather than an enforced one.

    -

    The interesting move is what feeds it. The brand palette is a single C# source of truth, BrandColors, six const hex values (a primary and a secondary each with a darkened and lightened variant) that MMCATheme references. The catch is that raw CSS rules in app.css need those same colors as custom properties, so the palette exists twice: once in C# for MudBlazor, once in CSS for stylesheet rules. That is a textbook drift hazard. The codebase neutralizes it with a fitness test, BrandColorTokenTests, which parses app.css and asserts each CSS token equals its BrandColors constant. If the two drift, the build fails before it ships.

    -

    This is the same "executable governance" idea the backend uses to enforce its layer rules: an invariant that matters is enforced by a test, not by hope and code review. And the color choices themselves carry accessibility reasoning. The theme's Secondary color was deliberately bumped from Teal 600 (around 4.0:1 on light surfaces, below the WCAG AA 4.5:1 floor for normal text) to Teal 700 (around 5.3:1), with the contrast calculation written into the source comment, because that color drives muted helper text.

    -

    The typography half of the theme had a quieter version of the same duplication problem, and for a while it was losing. MMCATheme names Inter first in its font stack and app.css names it again on html, body, but the package shipped no Inter faces, so the stack silently fell through to Segoe UI on Windows and to a generic sans-serif everywhere else. The "professional typography" was declared in two files and rendered in neither. The fix was to vendor the font rather than link it: five latin-subset woff2 files (weights 400 through 800, about 24 KB each) now live under the package's wwwroot/fonts with their SIL OFL license, declared by five @font-face blocks at the top of app.css and served same-origin from _content/MMCA.Common.UI/fonts/. Two details there are deliberate. Self-hosting fits the host's existing font-src 'self' content-security policy with no CDN allowance to add, which is the kind of default worth taking when the alternative is loosening a header. And font-display: swap keeps first paint on the fallback face instead of blocking text, which is exactly what the LCP budget in the Web Vitals E2E suite is watching. The cost is honest: roughly 120 KB of font in the package, latin glyphs only, and a family name that now exists in two places with a comment in each asking you to keep them in step.

    +

    The interesting move is what feeds it. The palette is a single C# source of truth, BrandColors: 37 const hex values, the six brand colors (a primary and a secondary, each with a darkened and lightened variant) plus the shared chrome, light-palette, and dark-palette values, so every hex value in both MMCATheme palettes is one of its constants. The catch is that raw CSS rules in app.css need the brand colors as custom properties, so those exist twice: once in C# for MudBlazor, once in CSS for stylesheet rules. That is a textbook drift hazard. The codebase neutralizes it with a fitness test, BrandColorTokenTests, which parses app.css and asserts each brand CSS token equals its BrandColors constant. If the two drift, the build fails before it ships.

    +

    This is the same "executable governance" idea the backend uses to enforce its layer rules: an invariant that matters is enforced by a test, not by hope and code review. And the color choices themselves carry accessibility reasoning. The theme's Secondary color is Teal 700 (around 5.3:1 on light surfaces) rather than Teal 600 (around 4.0:1, below the WCAG AA 4.5:1 floor for normal text), with the contrast calculation written into the source comment, because that color drives muted helper text.

    +

    The typography half of the theme has a quieter version of the same duplication problem. MMCATheme names Inter first in its font stack and app.css names it again on html, body, and with no faces shipped the stack would silently fall through to Segoe UI on Windows and to a generic sans-serif everywhere else: "professional typography" declared in two files and rendered in neither. So the package vendors the font rather than linking it: five latin-subset woff2 files (weights 400 through 800, about 24 KB each) live under the package's wwwroot/fonts with their SIL OFL license, declared by five @font-face blocks at the top of app.css and served same-origin from _content/MMCA.Common.UI/fonts/. Two details there are deliberate. Self-hosting fits the host's existing font-src 'self' content-security policy with no CDN allowance to add, which is the kind of default worth taking when the alternative is loosening a header. And font-display: swap keeps first paint on the fallback face instead of blocking text, which is exactly what the LCP and FCP budgets in the Web Vitals E2E suite are watching. The cost is honest: roughly 120 KB of font in the package, latin glyphs only, and a family name that exists in two places with a comment in each asking you to keep them in step.

    Render-mode state persistence: no flash, no double fetch

    Modern Blazor's InteractiveAuto renders a page up to three times: static SSR, then interactive Server, then WASM. Naively, each transition re-runs the data fetch, and the user sees a grid populate, blank, and re-populate. DataGridListPageBase solves this with Blazor's PersistentComponentState.

    During the SSR pre-render pass, the base serializes the grid's already-fetched rows into a tiny private record, PersistedGridState, a (List<TDto> Items, int TotalItems) payload embedded in the pre-rendered HTML. On the first interactive ServerData call, the base takes that payload back out and returns it directly, skipping the round-trip entirely. The fetch-cancel-refetch flicker of the render-mode handoff disappears.

    @@ -271,39 +283,44 @@

    The s framework's components without this composition model.

    Host-polymorphic token refresh: one component set, three platforms

    Here is where the front-end ports pay off the most. The same Razor component set runs on Blazor Server, Blazor WebAssembly, and a .NET MAUI hybrid host (Android, iOS, macOS, Windows) with no per-platform reimplementation. The primer's phrase for this is "write-once UI, render everywhere." A component never asks "am I on MAUI?" It asks an injected abstraction, and each host registers its own implementation.

    -

    Token refresh is the cleanest example, because the right answer genuinely differs per platform for security reasons. The swap point is a one-method interface, ITokenRefresher, with two implementations chosen per host:

    -
    // Browser (Blazor Server + WASM): the refresh token lives in an HttpOnly cookie.
    +          

    Token refresh is the cleanest example, because the right answer genuinely differs per host for security reasons. The swap point is a one-method interface, ITokenRefresher, with three implementations chosen per host:

    +
    // Browser default: the refresh token lives in an HttpOnly cookie.
     // A same-origin JS helper POSTs to /auth/session/token; the cookie rides along;
     // the host refreshes server-side and returns ONLY the access token. JS never
    -// sees the refresh token, so there is no XSS exfiltration surface.
    +// sees the refresh token, so there is no XSS exfiltration surface for it.
     public sealed class SameOriginProxyTokenRefresher : ITokenRefresher { /* ... */ }
     
    +// Blazor Server with the same-origin API proxy enabled (AddCommonSameOriginApiProxy
    +// swaps this in): the circuit asks /auth/session/handoff for a protected handoff and
    +// opens it on the server, so the access token only ever exists in circuit memory.
    +internal sealed class HandoffTokenRefresher : ITokenRefresher { /* ... */ }
    +
     // MAUI: there is no browser DOM, hence no XSS surface. The refresh token sits in
     // OS SecureStorage (iOS Keychain / Android Keystore) and is exchanged directly
     // against auth/refresh.
     public sealed class DirectApiTokenRefresher : ITokenRefresher { /* ... */ }
    -

    Both return Task<string?>, and the null is load-bearing: null means "no valid session exists," and the caller treats that as a logout, not an error to catch. The higher-level AuthUIService calls the same code path regardless of host. Above it, a custom JwtAuthenticationStateProvider reads claims from the stored JWT client-side and pushes auth-state changes so Blazor's AuthorizeView and CascadingAuthenticationState react instantly after login or refresh, with the server still validating every request as the real authority. The whole client-side auth surface, login, register, OAuth code-exchange, logout, refresh, change-password, sits behind IAuthUIService and depends only on Shared auth DTOs, so it too honors the UI-to-Shared-only rule.

    -

    The payoff is concrete. Adding a platform is "implement these interfaces," not "fork the UI." The threat model differs per host, so the implementations differ, but the components above them never know.

    +

    All three return Task<string?>, and the null is load-bearing: null means "no valid session exists," and the caller treats that as a logout, not an error to catch. The higher-level AuthUIService calls the same code path regardless of host. Above it, a custom JwtAuthenticationStateProvider reads claims from the stored JWT client-side and pushes auth-state changes so Blazor's AuthorizeView and CascadingAuthenticationState react instantly after login or refresh, with the server still validating every request as the real authority. The whole client-side auth surface, login, register, OAuth code-exchange, logout, refresh, change-password, sits behind IAuthUIService and depends only on Shared auth DTOs, so it too honors the UI-to-Shared-only rule.

    +

    The payoff is concrete. Adding a platform, or a stricter mode of an existing one, is "implement these interfaces," not "fork the UI." The threat model differs per host, so the implementations differ, but the components above them never know.

    Trade-offs, honestly

    • This is opinionated UI infrastructure coupled to MudBlazor. DataGridListPageBase is built around MudDataGrid<T>, GridState<T>, and MudBlazor's viewport observer. The base is reusable across your screens, but it is not framework-agnostic: swapping out MudBlazor would mean rewriting it. The trade is the usual one for a design system, a smaller surface and consistency in exchange for a hard dependency.
    • -
    • The test layer is thorough, and its residuals are narrow. The shared primitives and the two mobile list components both carry a fast bUnit suite, a render-snapshot tier diffs their markup against committed baselines and fails the build on an unintended structural change, and Playwright axe (WCAG 2.1 AA) plus a render smoke run as a real-browser CI job against a self-hosted gallery, with all three engines (chromium, firefox, and webkit) blocking merge gates. The most logic-heavy component, the desktop DataGridListPageBase, carries its own direct bUnit suite (DataGridListPageBaseTests, thirty facts that drive the base through a concrete test page, covering initial load, grid filters translated into the fetch call, page and sort state mirrored to the URL, error and cancel snackbar severities, URL-driven restoration, density and scroll persistence, the mobile card path, the virtualized-window fetch path, and a regression guard for the disposed-token-source race). What the layer does not cover is narrow: the visual check is markup-snapshot rather than pixel diffing, and there is no mutation testing on the core tier.
    • +
    • The test layer is thorough, and its residuals are narrow. The shared primitives and the two mobile list components both carry a fast bUnit suite, a render-snapshot tier diffs their markup against committed baselines and fails the build on an unintended structural change, and Playwright axe (WCAG 2.1 AA) plus a render smoke run as a real-browser CI job against a self-hosted gallery, with all three engines (chromium, firefox, and webkit) blocking merge gates. The most logic-heavy component, the desktop DataGridListPageBase, carries its own direct bUnit suite (DataGridListPageBaseTests, 35 facts and a theory that drive the base through a concrete test page, covering initial load, grid filters translated into the fetch call, page and sort state mirrored to the URL, failed-Result and exception paths, error and cancel toast severities, superseded loads returning the newest rows, URL-driven restoration, density and scroll persistence, the mobile card path, the virtualized-window fetch path, and a regression guard for the disposed-token-source race). What the layer does not cover is narrow: the visual check is markup-snapshot rather than pixel diffing, and there is no mutation testing on the core tier.
    • Render-mode handling is genuinely complex. The three-channel persistence (URL, memory, session) plus the prerender cache, plus the BL0005 suppressions to set the grid page from outside the component, plus catch-and-degrade around every JS interop call, is a lot of machinery. It is the right machinery for the InteractiveAuto lifecycle, but it is not simple, and it earns its keep only because it is written once.
    • -
    • There is still design-system residue. The source still carries Bootstrap chrome (navbar, navbar-brand, navbar-toggler) coexisting with MudBlazor in the shared NavMenu. The mobile infinite-scroll list is DOM-bounded by a MaxRenderedItems cap, so it is not part of that residue. The design-system scorecard's pair is that leftover Bootstrap chrome plus some app.css blocks that use !important overrides and raw hex outside the token set. The dark palette clears its own contrast scan: the filled-primary button label and error-alert text take dark on-color text (rgba(0,0,0,0.87)), locked by a blocking dark-mode axe gate, so both light and dark modes are AA-gated. Client-side Web Vitals are measured too: a WebVitalsE2ETests suite asserts LCP, TTFB, and CLS budgets against the gallery inside the blocking chromium E2E gate, so a catastrophic front-end-performance regression fails the build.
    • +
    • There is still design-system residue, and it sits in the shell's own CSS. MudBlazor is the only component library: the package ships no Bootstrap, and the shared NavMenu brand row is a plain flex row with no CSS framework classes. The residue the design-system scorecard names is narrower: the shared layout's scoped stylesheets (NavMenu.razor.css, MainLayout.razor.css) fight MudBlazor with dozens of !important declarations and some raw nav colors instead of tokens, inline style declarations sit across a handful of razor files with no inline-style guard in the framework, and the brand hex is still restated outside the drift guard. The mobile infinite-scroll list is DOM-bounded by a MaxRenderedItems cap, so it is not part of that residue. The dark palette clears its own contrast scan: the filled-primary button label and error-alert text take dark on-color text (rgba(0,0,0,0.87)), locked by a blocking dark-mode axe gate, so both light and dark modes are AA-gated. Client-side Web Vitals are measured too: a WebVitalsE2ETests suite asserts LCP, FCP, TTFB, CLS, and INP budgets against the gallery inside the required ui-e2e gate on all three engines (INP is skipped only where an engine cannot sample it), so a front-end-performance regression fails the build.
    -

    None of these argue for going back to per-page plumbing. They argue for closing the last gaps (retiring the leftover NavMenu chrome, adding pixel-level visual regression) and being clear-eyed that a UI framework is still a framework: a dependency you adopt, not a thing you get for free.

    +

    None of these argue for going back to per-page plumbing. They argue for closing the last gaps (moving the shell's !important overrides and inline styles onto tokens, adding pixel-level visual regression) and being clear-eyed that a UI framework is still a framework: a dependency you adopt, not a thing you get for free.

    Apply this even without MMCA

    The moves port to any component framework, not just Blazor:

    1. Put a list-page base component in charge of paging, sort, filter, loading, cancellation, and teardown. A concrete screen should declare its data source and its columns, nothing else.
    2. -
    3. Bind pages to a typed service interface over a named HTTP client, never to a raw client. Route every call through one method so retry, auth, and error extraction are applied uniformly, and surface the server's real error instead of a generic one.
    4. +
    5. Bind pages to a typed service interface over a named HTTP client, never to a raw client. Route every call through one method so retry, auth, and error handling are applied uniformly, and return the server's real error as a value instead of throwing a generic one.
    6. Make the design tokens one source of truth and guard the duplication with a fitness test if the tokens have to exist in two languages.
    7. Treat the URL as the source of truth for list state so deep links and back-forward just work, and persist transient state across render-mode or navigation transitions so the screen does not flash or refetch.
    8. Hide every platform difference behind an interface declared in the shared layer, with one implementation per host. Adding a platform should be "implement these ports," not "fork the UI."

    The takeaway: a UI framework is "compose, don't repeat" applied to the front end. The same ports, base classes, and fitness tests that keep your backend honest do not stop at the API. Push them into the components, and a list screen becomes a few lines that inherit the hard parts instead of re-deriving them, one diverged copy at a time.


    -

    What we covered: why every list screen re-implements the same paging and loading plumbing, how DataGridListPageBase<TDto> folds it into one reusable Blazor base so a concrete page is tiny, how the IEntityService / EntityServiceBase / AuthenticatedServiceBase pipeline binds the UI to a DTO contract with Polly retry and real server errors, how MMCATheme plus a BrandColors fitness test keep the design tokens from drifting, how PersistentComponentState and URL-as-source-of-truth kill the render-mode flash, how the package ships the application shell so a module plugs into it by implementing IUIModule instead of the host wiring it in by hand, and how one ITokenRefresher interface with two host implementations lets one component set run on Server, WASM, and MAUI.

    +

    What we covered: why every list screen re-implements the same paging and loading plumbing, how DataGridListPageBase<TDto> folds it into one reusable Blazor base so a concrete page is tiny, how the IEntityService / EntityServiceBase / AuthenticatedServiceBase pipeline binds the UI to a DTO contract with Polly retry and server errors returned as Result values, how MMCATheme plus a BrandColors fitness test keep the design tokens from drifting, how PersistentComponentState and URL-as-source-of-truth kill the render-mode flash, how the package ships the application shell so a module plugs into it by implementing IUIModule instead of the host wiring it in by hand, and how one ITokenRefresher interface with per-host implementations lets one component set run on Server, WASM, and MAUI.

    Next in the series: internationalization and theming, en-US and Spanish localization plus a day/dark mode toggle, both persisted on one cookie-and-profile mechanism.

    MMCA.Common is Apache-2.0 licensed and open source. Star the repo, read the UI-framework chapter of the onboarding guide, or dotnet add package MMCA.Common.UI and try it.

    diff --git a/articles/saga-compensation-reconciliation.html b/articles/saga-compensation-reconciliation.html index 2544ea4d..ec92a0d5 100644 --- a/articles/saga-compensation-reconciliation.html +++ b/articles/saga-compensation-reconciliation.html @@ -163,15 +163,17 @@

    Und

    A cancelled order has to give back stock that a transaction closed minutes ago already took, and a payment confirmation that never arrives strands the order forever. Here is compensation as its own - event handler, idempotency as a persisted marker committed by the same SaveChanges as the writes it - guards, and a periodic sweep as the saga-timeout backstop.

    + event handler, idempotency as a persisted marker committed in the same transaction as the writes it + guards, an honest account of which failures get retried and which only get logged, and a periodic sweep + as the saga-timeout backstop.


    Checkout is the easy part. In MMCA.Store's Sales module it is genuinely atomic: the order insert, the cart transition, and the conditional stock decrements all commit inside one explicit local transaction - (CheckOutHandler.cs:135-188, insert :165, save :176), and a failed decrement returns a failed Result - that rolls the whole thing back. One database, one transaction, no drama. Checkout then arms the order's - own unpaid-payment deadline as a scheduled row and saves that separately (:226, second save :240, - because the transaction helper commits without flushing what comes after it, :238-239).

    + (ExecuteInTransactionAsync at CheckOutHandler.cs:80-82 over the WriteAsync delegate :122-183, + insert :163, decrements :169, save :174), and a failed decrement returns a failed Result that rolls + the whole thing back. One database, one transaction, no drama. The same delegate also arms the order's own + unpaid-payment deadline as a scheduled row (:180), so the deadline commits with the order or rolls back + with it (comment :176-179).

    Then the money moves at Stripe, and the confirmation comes back later, as a webhook, from outside your database entirely. And two things go wrong that no transaction can fix:

      @@ -198,7 +200,7 @@

      Why it matters

      And it is the question the neighbouring records leave open on purpose. ADR-003 gets an event out of the process at least once. ADR-021 stops a broker redelivery from being applied twice at the consume edge. ADR-006 decides database-per-service and records "no cross-database transactions, no two-phase commit" only - as a cost it accepts, without saying how that cost gets paid (ADR-054:41-46). None of them says what a + as a cost it accepts, without saying how that cost gets paid (ADR-054:50-55). None of them says what a multi-step workflow does when step two fails or step three never reports back.

      The MMCA answer: compensation is a handler, not a branch in the command

      The command handler does one thing, and it does not even own the plumbing for that. @@ -213,27 +215,29 @@

      T an order can only be cancelled out of PaymentInitiated while the provider still serves a payable hosted page, so the cancel has to answer "has this already been paid?" before it commits. A saga step runs after the commit and could only ever discover the money afterwards, with the order already Cancelled and a - manual refund the only remedy left. So RetirePaymentSessionAsync (:90-124) asks the provider for the - session status and, when it reports paid, refuses the cancellation with - OrderCancellationErrorCodes.PaymentAlreadyCompleted (:101-109). Every other outcome (already expired, - session gone, provider unreachable) is non-fatal: it is logged and the cancellation proceeds (:111-121).

      -

      Order.MarkAsCancelled() (Order.cs:548) asks the current state object whether the transition is legal - and, on success, records a domain event (Order.cs:556). OrderCancelled is a plain BaseDomainEvent + manual refund the only remedy left. So RetirePaymentSessionAsync (:90-126) hands the session to the + shared PaymentSessionRetirement.RetireAsync, which reads the session status, expires the hosted page, and + reads the status again when the expire fails (:99-103). When the session turns out to be paid, the + handler refuses the cancellation with OrderCancellationErrorCodes.PaymentAlreadyCompleted + (:110-118). Every other outcome (already expired, session gone, provider unreachable) is non-fatal: it is + logged and the cancellation proceeds (:105-108, :120-123).

      +

      Order.MarkAsCancelled() (Order.cs:551) asks the current state object whether the transition is legal + and, on success, records a domain event (Order.cs:559). OrderCancelled is a plain BaseDomainEvent (OrderCancelled.cs:6-9), not an integration event, so it dispatches in-process after the save.

      Restoring the stock is a separate class: OrderCancelledSagaHandler : IDomainEventHandler<OrderCancelled> - (OrderCancelledSagaHandler.cs:30-33). Notifying the customer of a failed payment is another one, + (OrderCancelledSagaHandler.cs:40-42). Notifying the customer of a failed payment is another one, OrderPaymentFailedSagaHandler (OrderPaymentFailedSagaHandler.cs:22-24). This is the choreographed shape: each step raises an event, and each follow-up or compensating action lives in its own handler. A new compensating action that can run after the commit (a refund, another notification) is a new handler, not an edit to the command.

      Each handler runs in its own DI scope. Domain-event handlers are registered as singletons by the - framework's convention scan (MMCA.Common.Application/DependencyInjection.cs:187-197, with the comment - "Domain event handlers are singletons, they create their own DI scopes internally" at :192 and - WithSingletonLifetime() closing the scan at :197), so every handler opens a scope through - IServiceScopeFactory and resolves what it needs from that scope (OrderCancelledSagaHandler.cs:40-41, - OrderPaymentFailedSagaHandler.cs:31-32). The consequence is the important part: compensation commits on - its own, after the originating save, rather than joining the transaction it is compensating for. That is - what makes it compensation rather than a rollback.

      + framework's convention scan (ScanModuleApplicationServices at + MMCA.Common.Application/DependencyInjection.ModuleScanning.cs:46, with the comment at :51 stating that + they are singletons that create their own DI scopes internally, and WithSingletonLifetime() closing that + scan at :56), so every handler opens a scope through IServiceScopeFactory and resolves what it needs from + that scope (OrderCancelledSagaHandler.cs:49-51, OrderPaymentFailedSagaHandler.cs:31-32). The consequence + is the important part: compensation commits on its own, after the originating save, rather than joining + the transaction it is compensating for. That is what makes it compensation rather than a rollback.

      The marker: idempotency as a database invariant

      Here is the part worth stealing even if you never touch this framework.

      At-least-once delivery means the compensating handler will eventually run twice. If restoring stock is not @@ -241,29 +245,41 @@

      The marker: idempotency mechanism.

      MMCA.Store makes it idempotent with a persisted marker on the aggregate. Order.InventoryRestored (Order.cs:122, documented :116-121) is a boolean with a private setter, and MarkInventoryRestored() - (Order.cs:568-591) is a guarded transition like any other: it refuses on a non-cancelled order - (:570-577) and refuses a second call (:579-586), both as Result.Failure with named invariant codes.

      -

      The handler then does four things in order (OrderCancelledSagaHandler.cs:36-103):

      + (Order.cs:571-594) is a guarded transition like any other: it refuses on a non-cancelled order + (:573-580) and refuses a second call (:582-589), both as Result.Failure with named invariant codes.

      +

      The handler runs the whole restoration as one ExecuteInTransactionAsync delegate + (OrderCancelledSagaHandler.cs:55-57, the delegate RestoreAsync at :64-160), and inside it does five + things in order:

        -
      1. Loads the order with its lines, tracked, in its own scope (:44-48).
      2. -
      3. Checks the marker first and returns without saving if it is already set (:57-61).
      4. -
      5. Loads the matching inventory rows with the soft-delete filter deliberately turned off - (ignoreQueryFilters: true, :74), then applies the increases through a pure domain service with no - infrastructure dependencies, InventoryRestorationDomainService.RestoreInventory (:79, service at - InventoryRestorationDomainService.cs:13-33, "pure domain service" comment :8), which hands back the - variant ids it could not match (:21-27, returned at :32) so the handler can log them by name - (:80-86).
      6. -
      7. Sets the marker (:93) and calls one SaveChangesAsync (:101).
      8. +
      9. Loads the order with its lines, tracked, in its own scope (:70-75).
      10. +
      11. Checks the marker first and returns success without writing anything if it is already set (:84-88).
      12. +
      13. Reads the matching inventory rows non-tracking (asTracking: false, :98) and with the + soft-delete filter deliberately turned off (ignoreQueryFilters: true, :103), then runs them through + a static, pure domain service with no infrastructure dependencies, + InventoryRestorationDomainService.RestoreInventory (:108; the static class at + InventoryRestorationDomainService.cs:10, "pure domain service" comment :8, method :24-51). That + call validates every increase against the inventory invariants and hands back either a failure carrying + every rejected error (:41-50) or the variant ids it could not match (:33-38), which the handler logs + by name (OrderCancelledSagaHandler.cs:117-123). Its in-memory increase lands on the non-tracking + snapshot and is never saved (comment :96-97, class doc :30-32).
      14. +
      15. Sets the marker (:130) and saves it first (:139).
      16. +
      17. Moves the stock through IInventoryAllocationService.IncrementAsync, a relative atomic UPDATE rather + than a load-edit-save, for the lines that matched a row (:141-156).
      -

      That last step is the whole design. The inventory increases and the marker are written by the same - SaveChanges against the same database, in one transaction. So the marker cannot exist without the writes - it guards, and the writes cannot land unmarked. Idempotency stops being handler discipline and becomes a - database invariant.

      +

      The transaction is the whole design. The marker and the increases commit together or roll back together, + against the same database: a failed Result from the delegate rolls back everything it wrote, marker + included (DbContextFactory.cs:608-614), and a throw does the same (:657-661). So the marker cannot exist + without the writes it guards, and the writes cannot land unmarked. Idempotency stops being handler + discipline and becomes a database invariant.

      +

      Step 5's relative update is there because checkout never stops. Checkouts decrement the same inventory rows + with atomic updates at any moment, so a tracked restore would either overwrite those decrements or fail on + the row's concurrency token (class doc OrderCancelledSagaHandler.cs:26-33). Validating on a snapshot and + moving the stock with a relative update keeps the restore out of that race entirely.

      Step 3's filter override is a smaller decision with a real consequence. A retired variant is soft-deleted, not removed, and the stock a cancelled order is returning still belongs to that row: without ignoreQueryFilters, the row is invisible to the handler and the returned quantity is silently dropped - (the comment saying so is at :70-73).

      -

      This is why ADR-054 says the marker is strictly stronger than the ADR-021 inbox (ADR-054:186-189). + (the comment saying so is at :99-102).

      +

      This is why ADR-054 says the marker is strictly stronger than the ADR-021 inbox (ADR-054:219-222). The inbox records a message id after the handlers have succeeded, which leaves a narrow crash window between the handler's commit and the inbox write. A marker committed with the writes has no such window. The two are complementary rather than competing: the inbox dedups broker redeliveries between services, the @@ -271,71 +287,121 @@

      The marker: idempotency

      Concurrent redeliveries are handled by a different mechanism. The marker check is a read, so two deliveries can both pass it. Every auditable entity carries a RowVersion concurrency token (AuditableBaseEntity.cs:53), configured automatically on every non-owned auditable type by - ConfigureConcurrencyTokens (ApplicationDbContext.cs:582-602, called from OnModelCreating at :415, - ADR-035). Both deliveries carry the same original token into their update: one commits, the other gets - DbUpdateConcurrencyException, and its outbox retry then finds the committed marker and skips. Sequential - redelivery is handled by the marker, concurrent redelivery by the token.

      -
      // Condensed from OrderCancelledSagaHandler.HandleAsync (most logging trimmed).
      +          ConfigureConcurrencyTokens (ApplicationDbContext.cs:588-608, called from OnModelCreating at :420,
      +          ADR-035). Both deliveries carry the same original token into the marker save. One commits; the other gets
      +          DbUpdateConcurrencyException on the order row before it has touched any stock (that is why the marker is
      +          saved first, comment OrderCancelledSagaHandler.cs:137-138), its transaction rolls back and the exception
      +          propagates, and its outbox retry then finds the committed marker and skips. Sequential redelivery is handled
      +          by the marker, concurrent redelivery by the token.

      +
      // Condensed from OrderCancelledSagaHandler.HandleAsync and RestoreAsync (logging trimmed).
       public async Task HandleAsync(OrderCancelled domainEvent, CancellationToken cancellationToken = default)
       {
           using var scope = serviceScopeFactory.CreateScope();
           var unitOfWork = scope.ServiceProvider.GetRequiredService<IUnitOfWork>();
      +    var inventoryAllocation = scope.ServiceProvider.GetRequiredService<IInventoryAllocationService>();
       
      -    var orderRepository = unitOfWork.GetRepository<Order, OrderIdentifierType>();
      -    var order = await orderRepository.GetByIdAsync(
      +    // One transaction: a failed Result rolls the whole unit back, marker included.
      +    // The Result itself is discarded, so a returned failure is logged, never thrown.
      +    _ = await unitOfWork.ExecuteInTransactionAsync(
      +        ct => RestoreAsync(domainEvent, unitOfWork, inventoryAllocation, ct),
      +        cancellationToken).ConfigureAwait(false);
      +}
      +
      +private async Task<Result> RestoreAsync(OrderCancelled domainEvent, IUnitOfWork unitOfWork,
      +    IInventoryAllocationService inventoryAllocation, CancellationToken cancellationToken)
      +{
      +    var order = await unitOfWork.GetRepository<Order, OrderIdentifierType>().GetByIdAsync(
               domainEvent.OrderId, includes: [nameof(Order.OrderLines)], asTracking: true,
               cancellationToken: cancellationToken);
           if (order is null)
      -        return;
      +        return Result.Success();
       
      -    // Idempotency guard: a redelivered OrderCancelled event (outbox is at-least-once)
      -    // must not restore the same stock twice.
      +    // Idempotency guard: a redelivered OrderCancelled event must not restore stock twice.
           if (order.InventoryRestored)
      -        return;
      +        return Result.Success();
       
      -    var inventoryRepo = unitOfWork.GetRepository<InventoryItem, ProductVariantIdentifierType>();
           var variantIds = order.OrderLines.Select(ol => ol.ProductVariantId).Distinct().ToArray();
      -    var allItems = await inventoryRepo.GetAllAsync(
      -        includes: [], where: i => variantIds.Contains(i.Id), asTracking: true,
      -        // A soft-deleted inventory row is still the row this stock belongs to.
      -        ignoreQueryFilters: true,
      +    var allItems = await unitOfWork.GetRepository<InventoryItem, ProductVariantIdentifierType>().GetAllAsync(
      +        includes: [], where: i => variantIds.Contains(i.Id),
      +        asTracking: false,         // validation only: this in-memory increase is never saved
      +        ignoreQueryFilters: true,  // a soft-deleted row is still the row this stock belongs to
               cancellationToken: cancellationToken).ConfigureAwait(false);
      +    var itemsByVariant = allItems.ToDictionary(i => i.Id);
       
      -    var restoreResult = inventoryRestorationDomainService.RestoreInventory(
      -        order.OrderLines, allItems.ToDictionary(i => i.Id));
      +    var restoreResult = InventoryRestorationDomainService.RestoreInventory(order.OrderLines, itemsByVariant);
      +    if (restoreResult.IsFailure)
      +        return Result.Failure(restoreResult.Errors);   // Warning; nothing written
           if (restoreResult.Value is { Count: > 0 } unmatchedVariantIds)
               LogInventoryItemsNotFound(logger, domainEvent.OrderId, string.Join(", ", unmatchedVariantIds));
       
      -    // The marker is set even when some variants had no inventory record: withholding it would
      -    // re-apply every MATCHED increase on the next redelivery. The warning is the record.
           var markResult = order.MarkInventoryRestored();
           if (markResult.IsFailure)
      -        return;
      +        return Result.Failure(markResult.Errors);      // Warning; nothing written
       
      -    // ONE save: the restoration and the idempotency marker commit atomically (same DB).
      +    // The marker first: its rowversion-guarded UPDATE takes the order row, so a
      +    // concurrent delivery fails here, before it touches any stock.
           await unitOfWork.SaveChangesAsync(cancellationToken).ConfigureAwait(false);
      +
      +    InventoryIncrement[] increments =
      +    [
      +        .. order.OrderLines
      +            .Where(line => itemsByVariant.ContainsKey(line.ProductVariantId))
      +            .Select(line => new InventoryIncrement(line.ProductVariantId, line.Quantity)),
      +    ];
      +    if (increments.Length > 0)
      +    {
      +        var incrementResult = await inventoryAllocation.IncrementAsync(increments, cancellationToken)
      +            .ConfigureAwait(false);
      +        if (incrementResult.IsFailure)
      +            return incrementResult;                     // Warning; the marker rolls back with it
      +    }
      +
      +    return Result.Success();
       }
      -

      Redelivery is the retry mechanism, so throwing is correct

      -

      A compensating handler needs no retry loop of its own, because it already sits on one.

      -

      When in-process dispatch fails, the domain-event interceptor logs the failure and signals the outbox rather +

      Redelivery is the retry mechanism, but only for a throw

      +

      A compensating handler needs no retry loop of its own, because it already sits on one. The catch is that + the loop only ever sees exceptions.

      +

      When in-process dispatch throws, the domain-event interceptor logs the failure and signals the outbox rather than swallowing the work. FlushStateAsync (DomainEventSaveChangesInterceptor.cs:332) dispatches the save's local events (:336-337) and only then marks their outbox entries processed (:341), so a throwing handler never reaches the mark, and the catch below it logs and signals the processor (:346-354). The OutboxProcessor re-dispatches the pure domain event on a later cycle - (OutboxProcessor.DispatchMessagesAsync, OutboxProcessor.cs:585, the dispatcher call at :639) with the - bounded retries, backoff, and dead-lettering ADR-003 already defines. So a handler that cannot complete its - work should fail loudly and let redelivery re-run it. Inventing local retries would just duplicate a policy - that already exists one layer down.

      -

      The framework takes that same position in its own base class. + (OutboxProcessor.DispatchMessagesAsync, OutboxProcessor.cs:490, called from the cycle at :228, the + dispatcher call at :549) with the bounded retries, backoff, and dead-lettering ADR-003 already defines. So + a handler that wants to be re-run has to throw. Inventing local retries would just duplicate a policy that + already exists one layer down.

      +

      OrderCancelledSagaHandler takes that path for exactly one failure: the concurrent delivery that loses the + rowversion race on the marker save (OrderCancelledSagaHandler.cs:139). That exception rolls the + transaction back and is rethrown (DbContextFactory.cs:657-661), the event comes back, and the retry finds + the committed marker.

      +

      Every other failure in that handler is returned, not thrown. An inventory invariant that refuses an + increase (OrderCancelledSagaHandler.cs:109-115), a refused MarkInventoryRestored (:130-135) and a + failed IncrementAsync after the marker save (:148-155) each log a Warning that says the compensation + was not persisted (messages :174-178) and return a failed Result. The transaction rolls back, marker + included (DbContextFactory.cs:608-614), so nothing partial reaches the database. But HandleAsync discards + that Result (OrderCancelledSagaHandler.cs:55), so the dispatcher sees a handler that completed, and the + interceptor goes on to mark the event's outbox row processed (DomainEventSaveChangesInterceptor.cs:336-341). + Nothing redelivers it. The comment above the call says a later delivery can still restore (:53-54); for + these three cases no later delivery arrives, and ADR-054 records exactly that gap as its own trade-off + (ADR-054:259-270, restated in its 2026-10-01 Revision :372-376).

      +

      Nothing else picks it up either. The reconciliation sweep below selects PaymentInitiated orders with a + session (PaymentReconciliationService.cs:153-155) and PendingPayment or PaymentFailed orders + (:200-201); an order left in this state is Cancelled with InventoryRestored still false, which matches + neither predicate, and no other Store source reads the marker. The Warning naming the order and the + rejected error codes is the whole safety net: that order's stock stays unrestored until someone acts on the + log line. It is a real cost, and the honest way to read the handler is as a deliberate "give up and record" + for these cases, not as a retry.

      +

      The framework takes the throwing position in its own base class. SafeDomainEventHandler<TDomainEvent> (SafeDomainEventHandler.cs:32) runs your HandleSafelyAsync inside an exception filter, LogAndRethrow (:61-70), which writes one error line naming the handler and the event type and then returns false, so the exception keeps travelling with its original stack intact (:42-46). A cancellation during host shutdown passes straight through unlogged, because that is not a delivery failure (:42). The class documentation records why rethrowing is required (:13-20): a handler that reports success has its outbox row marked processed, so nothing retries and the side - effect is lost with only a log line to show for it. The base class is not a way to absorb a failure. It is - a way to fail with context, and its tests assert exactly that, including that the log lands before the - caller sees the exception (SafeDomainEventHandlerTests.cs:33,51,73).

      + effect is lost with only a log line to show for it. That sentence describes the returned-failure path above + precisely. The base class is not a way to absorb a failure. It is a way to fail with context, and its tests + assert exactly that, including that the log lands before the caller sees the exception + (SafeDomainEventHandlerTests.cs:33,51,73).

      The documentation also names the consequence to design for (:21-29). The interceptor dispatches every local event of one save in a single call, so one rethrowing handler skips the mark-processed step for the whole local batch: every event that save raised comes back, not only the one whose handler failed. A @@ -347,16 +413,18 @@

      Redelivery is naming the order and customer when scheduling fails, an Information line when it succeeds, :38-45), and then re-arms the order's payment deadline so a failed attempt hands the customer the whole retry window again (:47, RearmExpiryDeadlineAsync :67-93, itself logging rather than throwing on failure, - :86-90). The class documentation states the rule that makes both branches correct (:11-21): the order is + :86-90). The class documentation states the rule that makes both branches correct (:11-20): the order is already persisted as PaymentFailed before this handler runs, so a scheduling failure is logged rather than - thrown, and an SMTP outage retries the message off the queue instead of dragging the whole local batch back - through the pipeline. It implements IDomainEventHandler<OrderPaymentFailed> directly (:22-24), and no - production handler in the four repos derives from SafeDomainEventHandler, its only subclass being the test - double in that base class's own unit tests (SafeDomainEventHandlerTests.cs:124). The durable queue that - carries that scheduled row, its retries and its dead-letter path are the subject of Article 51, "Four ways - to do work later: channels, cron and durable internal commands", so they are not re-taught here.

      -

      The choice is therefore explicit per handler: throw to get a redelivery, or take the work somewhere that - survives on its own. What you cannot do is neither.

      + thrown, and a transport outage retries the queued message rather than losing it. It implements + IDomainEventHandler<OrderPaymentFailed> directly (:22-24), and no production handler in the four repos + derives from SafeDomainEventHandler, its only subclass being the test double in that base class's own + unit tests (SafeDomainEventHandlerTests.cs:124). The durable queue that carries that scheduled row, its + retries and its dead-letter path are the subject of Article 51, "Four Ways to Do Work Later: Channels, Cron, + the Outbox and Durable Internal Commands", so they are not re-taught here.

      +

      The choice is therefore explicit per handler: throw to get a redelivery, take the work somewhere that + survives on its own, or return a failure and accept that a log line is the record. The first two are + mechanisms. The third is a decision to stop, and it should be made on purpose and written down, the way + ADR-054 writes it down.

      The inbound edge: a webhook is a delivery contract, not an API call

      Everything so far is about a message leaving the process (ADR-003, at-least-once out) or a broker redelivery arriving at a consumer (ADR-021, dedup on the way in). The Stripe webhook is the third leg of @@ -388,129 +456,146 @@

      The i not drama: this ran at Warning for weeks while the configured signing secret did not match the live endpoint, so 100% of deliveries were rejected and nothing surfaced it (:105-110).

      The provider-side half is that the endpoint registers itself. StripeWebhookRegistrationService is a - BackgroundService (:35-40) registered by the Sales module in the same method that registers the + BackgroundService (:36-42) registered by the Sales module in the same method that registers the reconciliation sweep below (Sales.Infrastructure/DependencyInjection.cs:39, sweep at :42). It skips entirely when no WebhookBaseUrl is set, which is the local path where the Stripe CLI forwards instead, and - warns and skips with no SecretKey (:63-73); it subscribes exactly three event types (:51-56); and it - stamps every endpoint it creates with the description prefix Auto-registered by MMCA (:49). That prefix + warns and skips with no SecretKey (:65-75); it subscribes exactly three event types (:53-58); and it + stamps every endpoint it creates with the description prefix Auto-registered by MMCA (:51). That prefix is the whole reason an automated delete is acceptable: IsStaleAutoRegistered returns false for any endpoint lacking it, so an operator-created endpoint is never touched, and true only for one of its own whose URL has moved or whose status is no longer enabled (:210-220). The disabled-but-still-present duplicate that predicate collapses is a real incident, not a hypothetical: a second endpoint got created at the same URL with a brand-new signing secret, invalidating the configured one (ADR-084:30-33).

      -

      The secret is the honest ugly part. Stripe reveals a signing secret only at creation time (:180), so the - minted value goes two places at once. It is written to a shared IStripeWebhookSecretStore the moment it - exists (:186), and that store is read first, before the Stripe client is even built (:100-105), which is - what makes every replica converge on one secret instead of each minting its own. It is also held in a - volatile-backed singleton (StripeWebhookSecretProvider.cs:17-27) that the payment service prefers over - configuration on every incoming event (StripePaymentService.cs:362), announced at Critical - (StripeWebhookRegistrationService.cs:189,292-293), and written to stderr for an operator to copy into - Stripe:WebhookSecret (:190-192). That is live credential material in the log pipeline, on purpose: the - alternative is a first boot where the endpoint exists and every single delivery is rejected. ADR-084 files - it as a trade-off, not a feature, along with the fact that a configured secret is trusted and never - validated, because the provider will not re-reveal it (ADR-084:174-177).

      +

      The secret is the honest awkward part. Stripe reveals a signing secret only at creation time (:182), so + the minted value is written to a shared IStripeWebhookSecretStore the moment it exists (:189), and that + store is read first, before the Stripe client is even built (:95-107, the read at :102), which is what + makes every replica converge on one secret instead of each minting its own (class documentation + :25-34). It is also held in a volatile-backed singleton (StripeWebhookSecretProvider.cs:17-27, assigned + at StripeWebhookRegistrationService.cs:190) that the payment service prefers over configuration on every + incoming event (StripePaymentService.cs:315). The secret itself is never written to a log or a console + stream (class documentation StripeWebhookRegistrationService.cs:20-23, comment :187-188): the + Critical creation line names only the endpoint id (:192), and an operator reveals that endpoint's secret + in the Stripe Dashboard to persist it in Stripe:WebhookSecret. ADR-084 files the automated minting as a + trade-off, not a feature, along with the fact that a configured secret is trusted and never validated, + because the provider will not re-reveal it (ADR-084:182-186).

      The backstop: a periodic sweep against the provider

      Compensation answers "step two failed." It does not answer "step three never reported back." A webhook that is never delivered, or that arrives and is rejected because the signing secret is stale, produces no event to compensate, so no handler ever runs.

      -

      PaymentReconciliationService (PaymentReconciliationService.cs:68-74) is that backstop, registered as a +

      PaymentReconciliationService (PaymentReconciliationService.cs:69-75) is that backstop, registered as a hosted service by the Sales module's infrastructure (DependencyInjection.cs:42). Backstop is the exact - word the class documentation uses, and it is careful about it (:50-60): every order arms its own + word the class documentation uses, and it is careful about it (:51-61): every order arms its own Sales.ExpireUnpaidOrder deadline at checkout and re-arms it whenever a payment attempt fails, so the scheduled row is the primary path for an unpaid order and the sweep covers what a scheduled row cannot, a deadline that was never written, one dead-lettered by the internal-command processor, and every order created before the deadline existed. Both paths converge on the same transition and the same OrderCancelled compensation, so whichever arrives first wins and the other finds nothing to do.

      Its loop shape is deliberate, and it is deliberately not its own. The sweep derives from the framework's - PeriodicBackgroundService (PaymentReconciliationService.cs:74), whose ExecuteAsync owns the + PeriodicBackgroundService (PaymentReconciliationService.cs:75), whose ExecuteAsync owns the enablement gate, the 15-second startup delay that lets the host finish initializing, the per-cycle try/catch that logs and never kills the loop, and every wait through TimeProvider so the cycle is - testable without real time (PeriodicBackgroundService.cs:45-87: gate :47-51, delay :31, per-cycle - catch :64-76, waits :55,80).

      + testable without real time (PeriodicBackgroundService.cs:53-95: gate :55-59, delay :31 awaited at + :63, per-cycle catch :81-84 through the overridable LogCycleFailure :45-46, waits :63,88).

      The sweep overrides exactly three members: Interval, read from configuration - (PaymentReconciliationService.cs:81); IsEnabled, which refuses to run when the toggle is off - (:93-97) or when no Stripe key is configured (:99-103), logging which of the two it was because those - are very different situations to find in a log; and ExecuteCycleAsync (:110-111), which delegates to an - internally visible ReconcileOnceAsync so one cycle is testable without the timer. That is also the base - class's only subclass in any of the four repos, apart from the test double in PeriodicBackgroundService's - own unit tests (PeriodicBackgroundServiceTests.cs:104): one adopter, not yet a convention.

      -

      One cycle (ReconcileOnceAsync, PaymentReconciliationService.cs:119) computes a single cutoff (:122) - and runs two passes against it, expiry first (:128) and Stripe reconciliation second (:129). The - ordering is load-bearing, and the comment says why (:124-127): reconciliation can move an order into + (PaymentReconciliationService.cs:82); IsEnabled, which refuses to run when the toggle is off + (:94-98) or when no Stripe key is configured (:100-104), logging which of the two it was because those + are very different situations to find in a log; and ExecuteCycleAsync (:111-112), which delegates to an + internally visible ReconcileOnceAsync so one cycle is testable without the timer. It is the base class's + only subclass outside MMCA.Common. Inside the framework the same base carries four of Common's own periodic + jobs (outbox cleanup, internal-command cleanup, refresh-session cleanup and the permission-grant refresh, + ADR-054:190-196), plus the test double in the base class's own unit tests + (PeriodicBackgroundServiceTests.cs:104).

      +

      One cycle (ReconcileOnceAsync, PaymentReconciliationService.cs:120) computes a single cutoff (:123) + and runs two passes against it, expiry first (:129) and Stripe reconciliation second (:130). The + ordering is load-bearing, and the comment says why (:125-128): reconciliation can move an order into PaymentFailed, and an expiry pass running afterwards would find that brand-new row against the same cutoff and cancel it in the same cycle, collapsing the retry window to nothing.

      Pass one expires the orders that never reached the provider at all. - ExpireStrandedUnpaidOrdersAsync (:178-201) takes PendingPayment or PaymentFailed orders older than - the cutoff (:184-185) and makes no provider call, because there is nothing to call about: a - PendingPayment order has no session id (remarks :173-177). Checkout has already committed that stock, so + ExpireStrandedUnpaidOrdersAsync (:194-224) takes PendingPayment or PaymentFailed orders older than + the cutoff (:199-201) and makes no provider call, because there is nothing to call about: a + PendingPayment order has no session id (remarks :185-189). Checkout has already committed that stock, so an order nobody ever pays holds inventory nothing else can release. Each one is driven to Cancelled - through the same MarkAsCancelled() guarded transition (:251), which is the point: Cancelled is the one - terminal state the OrderCancelled compensation already listens on, so the release runs exactly once per - order however many times a sweep, a webhook or an outbox redelivery revisit it. PaymentFailed is - deliberately not the release state, because it is explicitly retryable (:41-49): releasing stock the - moment an order enters it would hand back quantities the very next checkout-session request expects to still - be committed, and a later payment would oversell.

      + through the same MarkAsCancelled() guarded transition (ExpireOrderAsync :252, the call at :274), + which is the point: Cancelled is the one terminal state the OrderCancelled compensation already listens + on, so the release runs exactly once per order however many times a sweep, a webhook or an outbox + redelivery revisit it. PaymentFailed is deliberately not the release state, because it is explicitly + retryable (:42-50): releasing stock the moment an order enters it would hand back quantities the very next + checkout-session request expects to still be committed, and a later payment would oversell.

      Pass two asks Stripe about the orders that are waiting on a confirmation. - ReconcileStripeSessionsAsync (:136-166) takes PaymentInitiated orders that have a session id and last - changed before the cutoff (:147-152).

      + ReconcileStripeSessionsAsync (:141-178) takes PaymentInitiated orders that have a session id and last + changed before the cutoff (:152-157).

      Both passes bound the work in SQL, not in memory. One shared helper, QueryStrandedOrderIdsAsync - (:207-223), takes each pass's predicate, orders oldest-first, takes the batch size and projects to ids, - all server-side (:217-220), over a dedicated filtered index IX_Order_Status_Modified on (Status, LastModifiedOn, CreatedOn) (OrderConfiguration.cs:74-76). The comment above the reconciliation predicate - explains the rule (:141-146): materializing every stuck order and taking the batch in memory would make + (:230-246), takes each pass's predicate, orders oldest-first, takes the batch size and projects to ids, + all server-side (:240-243), over a dedicated filtered index IX_Order_Status_Modified on (Status, LastModifiedOn, CreatedOn) (OrderConfiguration.cs:74-76). The comment above the reconciliation predicate + explains the rule (:146-151): materializing every stuck order and taking the batch in memory would make the batch size a Stripe-call budget rather than a query bound, and the exact failure this sweep exists to handle (a prolonged webhook outage) is the one that strands a large backlog.

      -

      It reloads each order in its own scope and re-checks. ReconcileOrderAsync (:275) opens a scope per - order (:277) so one order's failure never poisons the batch, reloads the order tracked (:282-286), and - returns immediately if it is no longer PaymentInitiated (:288-292), because a webhook may have arrived +

      It reloads each order in its own scope and re-checks. ReconcileOrderAsync (:298) opens a scope per + order (:300) so one order's failure never poisons the batch, reloads the order tracked (:305-309), and + returns immediately if it is no longer PaymentInitiated (:311-315), because a webhook may have arrived between the id query and now.

      -

      It applies the same guarded transitions the webhook would have. The session status maps to exactly - three outcomes (TryApplyTransition, :325-347): paid to MarkAsPaid, expired to MarkAsPaymentFailed, - still open to nothing at all, left for a later cycle. Those are the identical Result-returning methods - called by the webhook handler (ProcessPaymentWebhookHandler.cs:97,128) and by the client-initiated check - (VerifyPaymentHandler.cs:64). The sweep gets no private path into the aggregate, so it cannot reach a +

      It applies the same guarded transitions the webhook would have, and only on proof. The session status + maps to three outcomes (TryApplyTransition, :350-373): a paid session to MarkAsPaid, but only when + PaymentProof.IsPaymentForOrder accepts the paid amount and currency as payment of this order + (IsProvenPayment, :380-400); expired to MarkAsPaymentFailed; anything else to nothing at all, left for + a later cycle. A paid session the proof refuses changes nothing and is logged at Warning with what an + operator needs to reconcile it by hand (:392-399). Those are the identical Result-returning methods + called by the webhook handler (ProcessPaymentWebhookHandler.cs:109,174) and by the client-initiated check + (VerifyPaymentHandler.cs:72). The sweep gets no private path into the aggregate, so it cannot reach a state the webhook could not.

      And it loses races on purpose. If a webhook transitions the order between the sweep's load and its save, - the save throws DbUpdateConcurrencyException, which is logged and skipped, not retried (:307-317, the - concurrency branch :312-317). The concurrent writer is authoritative; the next cycle sees the final state.

      + the save throws DbUpdateConcurrencyException, which is logged and skipped, not retried (:330-340, the + concurrency branch :335-340). The concurrent writer is authoritative; the next cycle sees the final state.

      The whole thing is configuration-gated by PaymentReconciliationSettings (PaymentReconciliationSettings.cs:24-53): Enabled defaults true (:30), a 10-minute poll interval (:34), a 30-minute stuck age (:48), and a 50-order batch (:52), carried as those exact values in the - Sales service's appsettings.json:90-95, directly below the UnpaidOrderExpiry section that sets the - per-order deadline (:86). The settings documentation asks for the stuck age to stay above normal webhook + Sales service's appsettings.json:97-102, directly below the UnpaidOrderExpiry section that sets the + per-order deadline (:93). The settings documentation asks for the stuck age to stay above normal webhook latency and equal to UnpaidOrderExpiry:Minutes (:12-22), so the two mechanisms agree on one window and the sweep never races a healthy delivery.

      -

      Both mechanisms are covered by tests that assert the behavior, not the wiring: seven cases on the saga - handler including a redelivered event that must not restore stock twice (:44), the lookup that has to - ignore the soft-delete filter (:122), and the missing-inventory case that must warn and still mark the - order restored (:149), all in OrderCancelledSagaHandlerTests.cs:21,44,65,81,102,122,149; and thirteen on - the sweep, seven on the Stripe pass including the lost race and the bound-the-query-not-the-list case and - six on the expiry pass including the stale PendingPayment order that is expired into Cancelled without - Stripe ever being called (PaymentReconciliationServiceTests.cs:31,47,62,77,93,105,122,149,167,186,202,219,237). - The ingress contract has its own pair: five methods pinning the controller's accept-versus-reject mapping, - one of them a [Theory] over both shape-rejection codes (:59) and one pinning the request-size bound - (:83), in PaymentsControllerTests.cs:34,43,59,68,83; and five on the deletion predicate, including the - operator-created endpoint that must never be judged stale +

      Both mechanisms are covered by tests that assert the behavior, not the wiring. Thirteen cases cover the saga + handler in OrderCancelledSagaHandlerTests.cs, including a redelivered event that must not restore stock + twice (:45), the lookup that has to ignore the soft-delete filter (:123), the missing-inventory case that + must warn and still mark the order restored (:150), stock returned through the atomic increment + (:178), the increment and the marker committing in one transaction (:235), a failed increment failing + the transaction so the marker rolls back (:264), and the non-tracking snapshot (:284). Fifteen cover the + sweep in PaymentReconciliationServiceTests.cs: nine on the Stripe pass, including a session paid for a + different amount that leaves the order untouched (:52), the lost race (:126), one throwing order that + does not stop the rest (:147) and the bound-the-query-not-the-list case (:167), and six on the expiry + pass (:194-282), including the stale PendingPayment order that is expired into Cancelled without + Stripe ever being called (:194, :212). The ingress contract has its own pair: five methods pinning the + controller's accept-versus-reject mapping, one of them a [Theory] over both shape-rejection codes (:59) + and one pinning the request-size bound (:83), in PaymentsControllerTests.cs:34,43,59,68,83; and five on + the deletion predicate, including the operator-created endpoint that must never be judged stale (StripeWebhookRegistrationServiceTests.cs:181,189,203,213,226).

      Trade-offs, honestly

      • Adoption is one module, and the record says so. This pattern lives in MMCA.Store's Sales module only: the two saga handlers and the one reconciliation sweep above. MMCA.ADC and MMCA.Helpdesk have no - compensating saga handler and no reconciliation sweep today (ADR-054:172-176). The record exists because - the mechanism is the framework's stated answer to cross-boundary consistency, not because it is broadly - adopted. Read this article as one worked implementation, not a fleet-wide convention.
      • + compensating saga handler and no reconciliation sweep (ADR-054:198-200); the nearest thing in ADC is a + single compensating step, an upload handler that schedules the delete of an orphaned session-asset blob, + which ADR-054 points to ADR-123 for rather than counting as a saga (ADR-054:200-209). The record exists + because the mechanism is the framework's stated answer to cross-boundary consistency, not because it is + broadly adopted. Read this article as one worked implementation, not a fleet-wide convention. +
      • A returned failure is abandoned, not retried. An invariant rejection, a refused marker or a failed + increment rolls the restoration back, logs a Warning and returns; the handler discards that Result, so + the outbox row is marked processed and no redelivery or sweep revisits the order + (OrderCancelledSagaHandler.cs:55,109-115,130-135,148-155, ADR-054:259-270). The stock stays held + against a cancelled order until someone acts on the log line. If that is not the outcome you want for a + given failure, it has to throw.
      • There is no orchestrator, and that is a written deferral rather than a silence. Choreography is correct for this workflow because Order.Status plus Order.InventoryRestored already are the saga state, and ADR-086 records what would replace it when that stops being true: a MassTransit v8 saga state machine, durable per-instance correlation state in the owning service's own database, and - per-instance deadlines instead of a fixed-interval sweep (ADR-086:59-85). The technology is already - pinned, because MassTransit is held at v8 (v9 requires a commercial license, :87-90). The trigger is + per-instance deadlines instead of a fixed-interval sweep (ADR-086:65-91). The technology is already + pinned, because MassTransit is held at v8 (v9 requires a commercial license, :93-102). The trigger is specific: a workflow with three or more steps across two or more services, state that does not fit one - aggregate, and at least one per-instance deadline (:97-102). Its own Revision records that the first of + aggregate, and at least one per-instance deadline (:104-109). Its own Revision records that the first of those three properties is already satisfied without a coordinator: the per-instance unpaid-order deadline - exists as a scheduled internal-command row rather than as state-machine state (:8-10, :143-180). The + exists as a scheduled internal-command row rather than as state-machine state (:8-10, :150-186). The deferral stands, it ships no coordinator, and even after one exists the sweep stays underneath it for the - external system that never replies (:79-85, :138-141).
      • + external system that never replies (:86-91, :145-148).
      • Inconsistency is bounded, not eliminated. Between the cancellation commit and the compensation commit, stock is held against a cancelled order. An unpaid order loses its stock at its own scheduled deadline; when that row is missing, the bound is the sweep's stuck age plus one poll interval instead, 30 @@ -520,13 +605,13 @@

        Trade-offs, honestly

      • Compensation is best-effort per line, and names what it could not restore. RestoreInventory cannot restore an order line whose InventoryItem row is missing, so it collects those variant ids and returns them instead of skipping quietly - (InventoryRestorationDomainService.cs:21-27), and the handler logs them as a warning naming the order - and the variants (OrderCancelledSagaHandler.cs:80-86). The marker still commits, that quantity is never - restored, and nothing retries it. The comment above the marker says why (:88-92): the increases and the - marker land in the same save, so withholding the marker would re-apply every matched increase on the - next redelivery, and because the lookup already ignores the soft-delete filter, an unmatched variant means - the row never existed at all. The warning is the record, not a repair, and ADR-054's own trade-off bullet - states it the same way (ADR-054:214-225).
      • + (InventoryRestorationDomainService.cs:33-38), and the handler logs them as a warning naming the order + and the variants (OrderCancelledSagaHandler.cs:117-123). The marker still commits, that quantity is never + restored, and nothing retries it. The comment above the marker says why (:125-129): the increases and the + marker commit in one transaction, so withholding the marker would re-apply every matched increase on + the next redelivery, and because the lookup already ignores the soft-delete filter, an unmatched variant + means the row never existed at all. The warning is the record, not a repair, and ADR-054's own trade-off + bullet states it the same way (ADR-054:247-258).
      • Redelivery re-runs every handler of the event, not the failed one. The dispatcher iterates handlers sequentially with no per-handler isolation (DomainEventDispatcher.cs:76-85), so one throwing handler also skips the handlers after it, and a redelivery re-runs the ones that already succeeded. The mark-processed @@ -534,7 +619,7 @@

        Trade-offs, honestly

        back is every event that save raised, not just the failed one. Every handler on a shared event must be idempotent or must keep its failure to itself.
      • The sweep is not replica-leased. The outbox processor claims rows with a lease before working them - (ADR-003); the sweep takes no such claim, so at the configured maxReplicas: 2 (main.bicep:1810) two + (ADR-003); the sweep takes no such claim, so at the configured maxReplicas: 2 (main.bicep:1850) two replicas can pick the same stuck order and each spend a Stripe status call. Correctness holds through the concurrency token; the duplicated external call does not deduplicate.
      • The webhook ingress trades visibility for endpoint survival. A post-acceptance failure returns 200, @@ -542,7 +627,7 @@

        Trade-offs, honestly

        (PaymentsController.cs:115) or through the sweep above. The endpoint is also anonymous, internet-reachable and exempt from both gateway rate limiters, with signature verification as its only authentication, so a hostile caller can generate Critical log volume one rejected request at a time - (ADR-084:181-193).
      • + (ADR-084:194-206).
      • Every compensating action needs its own marker. There is no generic mechanism here. A second compensating action means a second persisted marker or a naturally idempotent operation, decided by the author of that handler.
      • @@ -555,19 +640,22 @@

        Apply this even without MMCA

        what makes it compensation instead of an impossible rollback. The exception is worth naming: a check that must happen before the commit, like asking whether the money already moved, cannot be a post-commit handler at all, and belongs in the command where it can still refuse. -
      • Make idempotency a persisted marker that commits with the writes it guards. One SaveChanges, one - database, one transaction. A flag written after the work is a narrower version of the same bug; a flag - written with the work is an invariant. Guard the marker in the aggregate so a second call is a typed - failure, not a silent overwrite.
      • +
      • Make idempotency a persisted marker that commits with the writes it guards. One transaction, one + database. A flag written after the work is a narrower version of the same bug; a flag written with the + work is an invariant. Guard the marker in the aggregate so a second call is a typed failure, not a silent + overwrite. If other writers touch the same rows concurrently, move the quantities with a relative update + inside that transaction rather than a load-edit-save.
      • Add an optimistic-concurrency token so two simultaneous deliveries cannot both pass the marker check - and both commit. The marker handles sequential re-runs, the token handles concurrent ones. You need both.
      • -
      • Let your delivery layer own retry. If your event transport already retries with backoff and - dead-letters, throw and let it re-run you. Decide explicitly, per handler, whether failure should force a - redelivery (throw) or be kept local, and if it is kept local, give that work its own durable home rather - than a catch that logs. A shared base class that logs the handler and event context and then rethrows - makes the honest option the default one. Then check what your delivery layer actually redelivers: if - it acknowledges a batch in one step, one thrown exception brings the whole batch back, not just your - event.
      • + and both commit. The marker handles sequential re-runs, the token handles concurrent ones. You need both. + Write the marker before the side effects, so the loser fails before it has done anything. +
      • Let your delivery layer own retry, and know which of your failures reach it. If your event transport + already retries with backoff and dead-letters, throw and let it re-run you. A failure you log and return + is a failure nothing retries, so decide explicitly, per failure, whether it should force a redelivery + (throw), be kept local with its own durable home rather than a catch that logs, or be abandoned with a + log line as the record, and write the third choice down. A shared base class that logs the handler and + event context and then rethrows makes the honest option the default one. Then check what your delivery + layer actually redelivers: if it acknowledges a batch in one step, one thrown exception brings the whole + batch back, not just your event.
      • Decide what your inbound webhook's status code means, and write it down. A third-party caller reads it as a delivery instruction ("retry me" or "stop"), not as an application result, and providers disable endpoints that keep failing. Return the error code only for the failures where nothing was @@ -586,12 +674,12 @@

        Apply this even without MMCA


        What we covered: why a cross-boundary workflow has no transaction to roll it back, how MMCA.Store puts compensation in its own domain-event handler running in its own DI scope (and which single check has to stay - in the command instead), how the Order.InventoryRestored marker committed by the same SaveChanges as the - inventory increases turns idempotency into a database invariant (and why that is stronger than a - record-after-success inbox), how the RowVersion token serializes concurrent redeliveries, why throwing is - the correct failure mode when the outbox already owns retry and what the alternative costs, why the inbound - webhook's status code encodes acceptance rather than success and registers its own endpoint (ADR-084), and - how PaymentReconciliationService backs both halves with a two-pass sweep that expires stranded unpaid + in the command instead), how the Order.InventoryRestored marker committed in the same transaction as the + atomic inventory increments turns idempotency into a database invariant (and why that is stronger than a + record-after-success inbox), how the RowVersion token serializes concurrent redeliveries, why only a thrown + failure gets a redelivery and what a returned failure costs, why the inbound webhook's status code encodes + acceptance rather than success and registers its own endpoint (ADR-084), and how + PaymentReconciliationService backs the payment flow with a two-pass sweep that expires stranded unpaid orders and asks Stripe for authoritative status on the rest.

        Next in the series: Article 50, "The LLM is a dependency: a bounded, guarded, metered boundary for chat completions."

        @@ -623,7 +711,7 @@

        Apply this even without MMCA

      • Why it matters
      • The MMCA answer: compensation is a handler, not a branch in the command
      • The marker: idempotency as a database invariant
      • -
      • Redelivery is the retry mechanism, so throwing is correct
      • +
      • Redelivery is the retry mechanism, but only for a throw
      • The inbound edge: a webhook is a delivery contract, not an API call
      • The backstop: a periodic sweep against the provider
      • Trade-offs, honestly
      • diff --git a/articles/security-headers-csp-blazor.html b/articles/security-headers-csp-blazor.html index ebb70305..680fb01a 100644 --- a/articles/security-headers-csp-blazor.html +++ b/articles/security-headers-csp-blazor.html @@ -210,7 +210,7 @@

        The MMCA answer: one mid

        Two of those headers are path-sensitive. CredentialPathPrefixes (:46, default ["/reset-password", "/auth/oauth-complete"]) names the paths a single-use secret arrives on, matched segment-based and case-insensitively by IsCredentialPath (:174-177). On a hit the response answers Referrer-Policy: no-referrer instead of the site-wide value (:187-189) and adds Cache-Control: no-store, no-cache, must-revalidate, max-age=0 with Pragma: no-cache (:192-196), so a reset token or an OAuth authorization code sitting in the URL never travels onward in a Referer header and the rendered page never lingers in a - browser or proxy cache (ADR-023:114-125).

        + browser or proxy cache (ADR-023:121-132).

        The interesting part is the CSP. Instead of stamping a string, the middleware asks an ICspPolicyProvider (SecurityHeaders.cs:84) for a CspPolicy(string Value, bool Enforce) (:76). When Enforce is true it writes Content-Security-Policy (:219); when false it writes Content-Security-Policy-Report-Only @@ -265,32 +265,38 @@

        The MMCA answer: one mid SecurityHeadersSettings.ContentSecurityPolicy (:65-67): default-src 'self'; script-src 'self' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'. Nothing is left out, including the two directives that blank a Blazor page when they are wrong: the XML doc on the setting calls it a complete hardened baseline that ships script-src and style-src at exactly the strength Blazor ('wasm-unsafe-eval') and MudBlazor ('unsafe-inline' styles) - require (:51-64). An HTML host that never registers a fuller provider gets a functional policy instead of + require (:51-64). An HTML host that never registers its own provider gets a functional policy instead of one silently missing both directives, and the JSON, WebSocket, and static-page responses an API or gateway serves are unaffected either way (ADR-023:46-53).

        The Blazor policy, built at runtime

        -

        An HTML host opts into the origin-pinned policy by registering its own provider before calling - AddCommonSecurityHeaders. Both apps register one shared BlazorCspPolicyProvider +

        An HTML host opts into the origin-pinned policy by registering its own provider. Both apps register one + shared BlazorCspPolicyProvider (MMCA.Common.UI.Web/Security/BlazorCspPolicyProvider.cs:28) via AddCommonBlazorCsp() (MMCA.Common.UI.Web/DependencyInjection.cs:52), which does three things: binds BlazorCspSettings from the "BlazorCsp" configuration section with ValidateOnStart() (:54-56), registers BlazorCspSettingsValidator through TryAddEnumerable so calling it twice validates once (:59-60), and - registers AddSingleton<ICspPolicyProvider, BlazorCspPolicyProvider> (:62). Because the static default is - registered with TryAdd, the first-registered provider wins, so the call order is load-bearing: - AddCommonBlazorCsp() must run before AddCommonSecurityHeaders(...).

        + registers AddSingleton<ICspPolicyProvider, BlazorCspPolicyProvider> (:62). Only the static default uses + TryAddSingleton (SecurityHeaders.cs:263), so a provider registered first suppresses it, and because a + single-service resolve returns the last registration, a plain AddSingleton provider registered afterwards + still wins. Calling AddCommonBlazorCsp() before AddCommonSecurityHeaders(...) is the documented + convention (SecurityHeaders.cs:243-244, DependencyInjection.cs:41-43; ADR-023:98-106), not the thing + that makes the Blazor provider win.

        The provider builds the full policy once, at construction (BlazorCspPolicyProvider.cs:33-42), and returns the cached result for every request (:45). BuildPolicy (:103-113) assembles what a Blazor + MudBlazor page actually needs: default-src 'self', script-src 'self' 'wasm-unsafe-eval' (the WASM runtime), style-src 'self' 'unsafe-inline' (MudBlazor), img-src 'self' data: https: (profile pictures and CDN images are low XSS-risk, so images stay open while the directives that matter for exfiltration stay locked), - font-src 'self', plus base-uri, form-action, and frame-ancestors 'none'.

        + font-src 'self', plus base-uri, form-action, and frame-ancestors 'none'. The list carries no + object-src, so objects fall back to default-src 'self' rather than the static baseline's explicit + object-src 'none' (ADR-023:181-184): on that one directive the Blazor policy is looser than the default it + replaces.

        One directive in that list is opt-in. BuildFrameSrc (:85-97) emits frame-src 'self' <origins> only when BlazorCspSettings.FrameSources lists at least one origin, canonicalized and de-duplicated before the splice (:92-96, spliced into the policy at :110); with the default empty list there is no frame-src at all and - frames fall back to default-src 'self' (:82). Entries are validated at boot rather than trusted, so a - wildcard or a stray semicolon fails startup with a message naming it instead of landing verbatim in a security - response header (ADR-023:185-197). ADC's Blazor host configures it for the embedded Google Maps venue maps on - its public event page (MMCA.ADC.UI.Web/appsettings.json:47-52). frame-ancestors 'none' is never relaxed by + frames fall back to default-src 'self' (class doc :21-23; :82). Entries are validated at boot rather + than trusted, so a wildcard or a stray semicolon fails startup with a message naming it instead of landing + verbatim in a security response header (ADR-023:192-204). ADC's Blazor host configures it for the embedded + Google Maps venue maps on its public event page (MMCA.ADC.UI.Web/appsettings.json:53-63). frame-ancestors 'none' is never relaxed by that path (:21-24).

        The hard directive is connect-src, because it is per-deployment. BuildCsp (:49) reads the API origin from ApiSettings (WasmApiEndpoint ?? ApiEndpoint, :51), and if it resolves to a real http(s) URL it pins @@ -300,15 +306,24 @@

        The Blazor policy, built at runtime< because Visual Studio's Browser Link and Hot Reload inject an inline bootstrap script as well as opening a WebSocket on a port that changes every run (:70-73). Only the first of those is localhost-scoped, and neither reaches a non-Development host, because the flag is IWebHostEnvironment.IsDevelopment() read once at - construction (:41; ADR-023:178-184).

        + construction (:41; ADR-023:185-191).

        The detail worth stealing is the failure path. If the origin cannot be parsed, or on Linux parses as a file:// URI instead of http(s), the provider does not guess and it does not stop enforcing. It narrows connect-src to 'self', the strictest value it can be sure of, leaves the rest of the policy exactly as it was, and returns it with Enforce: true (:62). The policy fails closed. A deployment whose ApiSettings endpoint is wrong still serves its pages, and every cross-origin API call and the SignalR hub are blocked loudly in the browser console, because the alternative is a permissive Report-Only header that protects - nothing and that nobody notices (:16-20, :60-61; ADR-023:85-88). A security response header that quietly + nothing and that nobody notices (:16-20, :60-61; ADR-023:86-89). A security response header that quietly stops being enforced is the worse failure mode.

        +

        Both apps also opt into the same-origin API proxy (ADR-131): AddCommonSameOriginApiProxy (ADC UI + Program.cs:156, Store UI Program.cs:153) paired with MapCommonSameOriginApiProxy (:268, :262). + With it, /client-config switches the WebAssembly client's API client and notification hub to the proxy on + the UI host's own origin (MMCA.Common.UI.Web/SameOriginProxy/SameOriginApiProxyServiceExtensions.cs:13-16, + :24-25), so the browser's API and hub traffic is same-origin and admitted by the 'self' entry that leads + every connect-src the provider builds (BlazorCspPolicyProvider.cs:62, :68). The provider does not read + the proxy settings: it pins the configured gateway origin either way (:51, :66-68). In a proxied host the + fail-closed narrowing therefore leaves the proxied API and hub calls working, because 'self' still covers + them.

        font-src 'self' (:108) reads like the boring entry in that list, and it is the one that carries a real web font. The shared MudBlazor theme names Inter first in its font stack, and the reflex way to supply it is a Google Fonts link tag, with the reflex follow-on of widening font-src to that CDN's origin plus a @@ -334,36 +349,39 @@

        Adopted at both edges of both appsProgram.cs:118,168; Store Gateway Program.cs:71,159). The Blazor UI hosts register AddCommonBlazorCsp() first, then the same plain AddCommonSecurityHeaders(builder.Configuration) with no - configure delegate, then UseCommonSecurityHeaders() (ADC UI Program.cs:162,163,192; Store UI - Program.cs:191,192,215). Each UI origin emits its own HSTS on purpose, because an HSTS pin is per-origin and + configure delegate, then UseCommonSecurityHeaders() (ADC UI Program.cs:189,190,210; Store UI + Program.cs:185,186,204). Each UI origin emits its own HSTS on purpose, because an HSTS pin is per-origin and the Gateway's header says nothing about the sibling hostname a user actually types (ADC UI - Program.cs:156-161; Store UI Program.cs:184-190). The built-in app.UseHsts() stays uncalled on both, + Program.cs:183-188; Store UI Program.cs:178-184). The built-in app.UseHsts() stays uncalled on both, since it would run later in the pipeline and overwrite the shared one-year value with its own weaker default - (ADC UI Program.cs:188-191).

        + (ADC UI Program.cs:206-209; Store UI Program.cs:215-219).

        The cross-origin posture at that same edge is a separate decision with its own record: two policies, an allow-listed one for service hosts and a deliberately broader one for gateways (ADR-082, Website/docs-src/adr/082-two-tier-cors-posture.md:28-34), which names ADR-023 as its edge sibling (:19-25). - The middleware carries a unit test, SecurityHeadersMiddlewareTests in MMCA.Common.Aspire.Tests, and each - app's Gateway has its own SecurityHeadersTests asserting the headers are present.

        + The middleware carries a unit test, SecurityHeadersMiddlewareTests in MMCA.Common.Aspire.Tests, and all + four edges carry their own SecurityHeadersTests: each app's Gateway, and each app's UI host, where a + Production-pinned host factory is what lets the test see the per-origin HSTS described above (ADR-023:146-163).

        Trade-offs, honestly

        • The baseline is complete, not maximal. A default that works for a Blazor and MudBlazor host is a default that carries style-src 'unsafe-inline' (SecurityHeaders.cs:65-67), so inline styles are not blocked out of the box, and an API or gateway host that serves no HTML inherits a script and style allowance it does not need. Tightening past that is an explicit act: configure the "SecurityHeaders" section, register your own - provider, or move to the {nonce} placeholder (ADR-023:91-96).
        • -
        • Registration order is a foot-gun. Because the provider uses TryAddSingleton (SecurityHeaders.cs:263), - a host that calls AddCommonSecurityHeaders before registering its custom ICspPolicyProvider silently - keeps the static default. The order is correct in both apps, but nothing forces it.
        • + provider, or move to the {nonce} placeholder (ADR-023:92-97). +
        • Registration order matters only for TryAdd. The static default uses TryAddSingleton + (SecurityHeaders.cs:263) and AddCommonBlazorCsp uses plain AddSingleton (DependencyInjection.cs:62), + so the Blazor provider wins in either order. The trap is narrower: a custom provider added after + AddCommonSecurityHeaders with TryAdd silently keeps the static default (ADR-023:98-106). Both apps + register in the documented order, but nothing forces it.
        • Failing closed moves the pain onto a running app. A Blazor host whose ApiSettings endpoint is wrong - still serves pages, but the enforced connect-src 'self' blocks every cross-origin API call and the SignalR - notification hub (BlazorCspPolicyProvider.cs:62). That loud signal is the point, and the cost is that the - configuration mistake lands on the users of that deployment rather than in a passive report - (ADR-023:105-109).
        • + still serves pages, but the enforced connect-src 'self' blocks every cross-origin API call and SignalR + connection a client makes to the gateway directly (BlazorCspPolicyProvider.cs:62). That loud signal is the + point, and the cost is that the configuration mistake lands on the users of that deployment rather than in + a passive report (ADR-023:112-116).
        • One shared Blazor provider constrains divergence. BlazorCspPolicyProvider lives once in MMCA.Common.UI.Web over the shared ApiSettings, so a host that needs genuinely different CSP logic cannot tweak an app-local copy. It has to supply its own ICspPolicyProvider instead, registered before - AddCommonSecurityHeaders.
        • + AddCommonSecurityHeaders by convention.

        None of these argue against centralizing the headers. They argue for keeping the extension point visible and for treating the CSP as the one header you test in every host that renders HTML.

        diff --git a/articles/self-invalidating-cache.html b/articles/self-invalidating-cache.html index a3edf276..0c9677f4 100644 --- a/articles/self-invalidating-cache.html +++ b/articles/self-invalidating-cache.html @@ -193,6 +193,8 @@

        The cache abstraction

        public interface ICacheService
         {
             Task<T?> GetAsync<T>(string key, CancellationToken ct);
        +    Task<(bool Found, T? Value)> TryGetAsync<T>(string key, CancellationToken ct);   // presence, not just value
        +    Task<T?> GetFromSharedStoreAsync<T>(string key, CancellationToken ct);           // never a local copy
             Task SetAsync<T>(string key, T value, TimeSpan? expiration = null, CancellationToken ct = default);
             Task RemoveAsync(string key, CancellationToken ct);
             Task RemoveByPrefixAsync(string prefix, CancellationToken ct);   // the load-bearing one
        @@ -200,18 +202,25 @@ 

        The cache abstraction

        Task<T> GetOrCreateAsync<T>(string key, Func<CancellationToken, Task<T>> factory, TimeSpan? expiration = null, CancellationToken ct = default); }
        -

        Four cache operations, a counter primitive, and one composed read-through helper. RemoveByPrefixAsync is - the member that earns its keep. It is what lets a single write evict a whole family of cached reads +

        Four cache operations, two specialized reads, a counter primitive, and one composed read-through helper. + RemoveByPrefixAsync is the member that earns its keep. It is what lets a single write evict a whole family of cached reads (every paged and filtered view under one prefix) in one call, without enumerating individual keys. It is also why the backends had to be hand-built rather than pulled off the shelf: IMemoryCache has no key - enumeration, and IDistributedCache has no prefix delete. (IncrementAsync was the first late arrival, a - default interface member so no existing implementer broke, added as the single entry point for the + enumeration, and IDistributedCache has no prefix delete. Four of the eight are default interface + members, so a hand-written implementer keeps compiling when one is added.

        +

        The two specialized reads each close a gap a plain GetAsync leaves open. TryGetAsync reports + presence separately from the value, because for a value type a miss and a cached default (0, + false, Guid.Empty) look identical; the shipped stores override it with a real presence check. + GetFromSharedStoreAsync reads the shared store and never a process-local copy, for single-use records + (an OAuth exchange code, a password-reset or email-confirmation token, the last accepted second-factor + time step) whose consumption on one replica must be visible on every other replica at once; the hybrid + backend below is the store that overrides it. (IncrementAsync is the single entry point for the brute-force and rate-limit counters of ADR-029 instead of a read-then-write pair at each call site. The distributed backend overrides it, but with the same read-modify-write shape rather than a Redis INCR, because the counter lives in the adapter's own JSON layout: the override buys one call site, not atomicity.)

        -

        GetOrCreateAsync is the second late arrival and the more interesting one, because of who does not use - it. It is also a default interface member: get, then take a per-key lock from a process-wide stripe, +

        GetOrCreateAsync is the most interesting of the default members, because of who does not use + it. It is get, then take a per-key lock from a process-wide stripe, double-check, run the factory, store the result. That is the read-through shape the query decorator below implements, offered to the callers that are not queries. The decorators still do not route through it, and the interface says so in its own remarks: GetOrCreateAsync caches whatever the factory returns, @@ -236,8 +245,8 @@

        One contract, three backends

        Redis IConnectionMultiplexer is available, prefix eviction reaches past IDistributedCache to the raw connection and uses server-side SCAN to find and delete matching keys (that scan lives in a shared RedisPrefixScanner, because two backends need it). This is the cache with a Redis - backplane the architecture scorecard carries in its §10 row as former Cross-Cutting Concerns evidence, - retained for the record now that those facets are scored in §5, §6, §9, §12, §17 and §29, and whose + backplane the architecture scorecard carries in its §10 row as related cross-cutting evidence, + scored under §5, §6, §9, §12, §17 and §29, and whose substrate is recorded in ADR-026: a single-host monolith caches in-process for free, and the same code transparently uses a shared Redis once the distributed cache is present, so cached reads stay coherent when a module is scaled out or extracted into its own service. @@ -258,9 +267,11 @@

        One contract, three backends

        writer gets its own.

      Be honest about what "opt-in" means in a deployed system: all seven ADC and Store services call - AddCommonHybridCache() inside the same Redis conditional that wires everything else, so the effective - Tier-1 substrate in production is the hybrid one, not the distributed adapter, and the memory-or-Redis - swap is what a host gets when it does not state a preference. The contract that makes that + AddCommonHybridCacheWhenRedisConfigured(builder.Configuration), a framework helper that registers the + hybrid backend only when the Redis connection string is set (with no Redis L2 the hybrid tier would be a + plain in-memory cache, which the memory fallback already is). So whenever Redis is configured, the + effective Tier-1 substrate in production is the hybrid one, not the distributed adapter, and the + memory-or-Redis swap is what a host gets when it does not state a preference. The contract that makes that substitution a one-line change is the point. Nothing in any handler, decorator, or query changes.

      A short, conservative default TTL keeps the cache erring toward correctness over hit-rate: 30 seconds. The constant sits in one place (CacheOptions.DefaultDuration, a bare TimeSpan) precisely so the @@ -371,8 +382,9 @@

      The two key transforma

      The stampede stripe locks the same scoped key, so one tenant never waits on another tenant's lock. And the honest limit: this lives in the decorators, so code that resolves ICacheService directly gets no tenant - prefix at all. Today's direct consumers (login counters, OAuth state, idempotency records) are keyed by - subject already, so they are safe by the shape of their keys rather than by a rule that would catch the + prefix at all. Today's direct consumers (login and registration counters, OAuth exchange state, + idempotency records, password-reset and email-confirmation tokens, the last accepted second-factor time + step, the soft-deleted marker) are keyed by subject already, so they are safe by the shape of their keys rather than by a rule that would catch the next one. The rest of the tenancy model (resolution middleware, the named query filter, the write interceptor, database-per-tenant routing) is ADR-073's, and belongs to the multi-tenancy deep-dive.

      The second transformation answers the parameter that is never on the request: who is asking. A query @@ -414,7 +426,9 @@

      The app.UseOutputCache() but ships no policies: each host opts in. A read-heavy public service (ADC's Conference service, Store's Catalog) declares named short-TTL policies on its [AllowAnonymous] GET controllers, so an anonymous agenda or speaker read is served straight from the output cache and never - reaches a query handler. Store's Catalog runs four such policies, all on the 5-minute TTL; ADC's + reaches a query handler. Store's Catalog runs four such policies, three at 5 minutes and + ProductsCache at 60 seconds, because a product payload carries each variant's effective price, which + moves on the clock when a discount window opens or closes with no mutation to evict on; ADC's Conference service runs twelve, ten at 5 minutes and two at 60 seconds where the payload turns over faster. This is also the lever ADR-019 leans on: the global rate limiter partitions by authenticated user and routes anonymous traffic to a NoLimiter partition, so output caching, not a throttle, is what @@ -525,7 +539,9 @@

      Trade-offs, honestly

      independent copies until each entry's TTL reconciles them. That is exactly why the distributed adapter exists for scaled-out deployments. The two-level backend narrows the window rather than closing it: an eviction clears L2 and the evicting process's L1, but every other replica's L1 copy survives until its - local expiration, capped at 30 seconds. That is a deliberate trade, and it is the same order of + local expiration, capped at 30 seconds by default (Cache:LocalCacheDuration retunes it). Single-use + records read through GetFromSharedStoreAsync, and counters, skip L1 entirely, so that window never + applies to a token that must not be used twice. That is a deliberate trade, and it is the same order of staleness as the delayed second eviction the write path already performs.
    1. The edge tier trades a data-leak risk for its speed. PublicEndpointOutputCachePolicy serves one cached response verbatim to every later caller, so it is safe only on endpoints that are @@ -533,8 +549,9 @@

      Trade-offs, honestly

      per-user endpoint must never move onto it, and the bypass-roles overload covers role-shaped variance only, never per-user variance. The store behind it is the other thing to get right: AddOutputCache defaults to per-replica memory, so under scale-out a tag eviction reaches only the replica that handled - the mutation. Both deployed adopters register a Redis-backed output-cache store inside the same Redis - conditional that wires the pipeline tier, and ADR-040 makes the shared store the expected posture + the mutation. Both deployed adopters call the framework's builder.AddRedisOutputCaching(), which + registers a Redis-backed output-cache store when the Redis connection string is set and no-ops + otherwise, and ADR-040 makes the shared store the expected posture wherever a service runs more than one replica; the in-memory store is the single-replica case.
    2. Cross-service tag eviction is a coherence hint, not a guarantee. The eviction event is what lets a payload written by a different service be cleared from this one's edge cache at all, and that reach diff --git a/articles/self-ordering-modules.html b/articles/self-ordering-modules.html index e0b9f44e..91c8d578 100644 --- a/articles/self-ordering-modules.html +++ b/articles/self-ordering-modules.html @@ -225,12 +225,14 @@

      The engine: ModuleLoader an come out of the sort than went in, the leftovers form a dependency cycle, and the loader throws with the offending module names. A circular dependency between modules becomes a loud, named startup failure instead of a subtle runtime surprise.

      -

      The scan is also defensive. Each GetTypes() call sits inside a try/catch (a - ReflectionTypeLoadException raised by a missing transitive reference is the case it exists for), so a - broken assembly contributes no types and logs why instead of aborting discovery of the rest. And every - step emits a structured [LoggerMessage]-generated log line, so the startup log tells you precisely - which modules loaded, in what order, and how long each took. When something is wrong, you read it, you - do not guess it.

      +

      The scan is also defensive. Each GetTypes() call sits inside a guard with two catches. A + ReflectionTypeLoadException (the shape a missing transitive reference produces) still carries every + type that did load, so the loader keeps those and the assembly's loadable modules still register; any + other exception drops that one assembly. Both paths log at Error, because a module that silently fails + to register is an outage that looks like a configuration choice, and neither aborts discovery of the + rest. And every step emits a structured [LoggerMessage]-generated log line, so the startup log tells + you precisely which modules loaded, in what order, and how long each took. When something is wrong, you + read it, you do not guess it.

      // In each host's Program.cs. AddModuleHost binds and validates ApplicationSettings and
       // ModulesSettings, builds the ModuleLoader and registers it as a singleton. It deliberately does
       // not run discovery itself.
      @@ -256,7 +258,8 @@ 

      Disabling a module wi

      Here is the part that turns this from a tidy registration trick into an extraction mechanism. A host can disable a module through configuration. ModulesSettings binds the "Modules" config section (it is a Dictionary<string, ModuleSettings>), and ModuleSettings carries a per-module Enabled flag - (default true) plus a RemoteDependencies list.

      + (default true) plus a RemoteDependencies list. A module the section does not list at all counts as + disabled, so enabling a module is always an explicit line of configuration.

      {
         "Modules": {
           "Conference":   { "Enabled": true },
      @@ -266,18 +269,22 @@ 

      Disabling a module wi

      When the loader reaches a disabled module it does not skip it. It calls that module's RegisterDisabledStubs(services) and records the name in DisabledModuleNames. This is the crux. A disabled Engagement module still contributes stub registrations for the cross-module interfaces other - modules depend on. So when Conference's GetSessionBookmarkCountHandler asks the container for - Engagement's IBookmarkCountService, resolution still succeeds, because the disabled module left a - Disabled* stub behind.

      + modules depend on: EngagementModule registers DisabledBookmarkCountService as its + IBookmarkCountService. So in a host that names the Engagement assembly but disables the module, + Conference's GetSessionBookmarkCountsHandler still resolves IBookmarkCountService, because the + disabled module left a Disabled* stub behind.

      That is a clean strategy plus null-object pairing (real service, disabled stub, or remote client) rather than if (moduleEnabled) checks scattered through the call sites. The handler does not know or care which of the three it got.

      Dependency validation is microservice-aware to match. A dependency that is disabled in-process but listed in this host's ModuleSettings.RemoteDependencies is treated as satisfied remotely (the host - will wire a typed gRPC client to the extracted peer), and only a module with RequiresDependencies = true and a genuinely unsatisfied dependency throws at startup. The loader also loads per-module - configuration by convention: before calling module.Register(...) it adds modules.{name}.json (and - the environment-specific variant) to the configuration builder, so a module can ship its own config - file.

      + will wire a typed gRPC client to the extracted peer), and only a module with RequiresDependencies = true and a genuinely unsatisfied dependency throws at startup. Because a remote declaration is + configuration the loader takes on trust, it also offers ValidateRemoteDependencies(IServiceProvider), + an opt-in check a host runs against the built provider: every service type a remote-declared + dependency's disabled stubs registered must resolve (a miss throws), and one that still resolves to the + stub logs a warning. The loader also loads per-module configuration by convention: before calling + module.Register(...) it adds modules.{name}.json (and the environment-specific variant) to the + configuration builder, so a module can ship its own config file.

      Convention scanning: what a module's Register actually wires

      Modules do not hand-register every handler. ScanModuleApplicationServices<TAssemblyMarker>() is the Scrutor-based convention scan that a module's Add{X}Module calls to register, by assembly, every kind @@ -321,12 +328,15 @@

      Each module is the unit of extrac enables every module and cross-module calls are in-process method calls: MMCA.Helpdesk is the framework's monolith-first reference app, a single Tickets module exercised end to end through all five layers to demonstrate the "build the monolith now, extract a service later" path. As a fleet, each service host - runs the same ModuleLoader with only its own module enabled (Modules:{Module}:Enabled=true); the - disabled peers contribute their stubs, and the host then replaces a stub with a typed gRPC client pointed - at the real, extracted peer process. MMCA.ADC runs this way today: four single-module service hosts - (Identity, Conference, Engagement, Notification) behind a YARP gateway, with no combined monolith host at - all. The Domain, Application, and Shared code is identical in both topologies. The transport choice lives - entirely at the composition edge (ADR-008).

      + names only its own module assembly to ModuleLoader, so its peers are never discovered and contribute + no stubs; the host instead registers a typed gRPC client adapter for each cross-module interface it + consumes, pointed at the real, extracted peer process. MMCA.ADC runs this way: four single-module + service hosts (Identity, Conference, Engagement, Notification) behind a YARP gateway, with no combined + monolith host at all. In its Conference host, IBookmarkCountService resolves to a + BookmarkCountServiceGrpcAdapter that calls the Engagement service. The disabled-stub path serves the + other shape: a host that names a peer's assembly and switches the module off. The Domain, Application, + and Shared code is identical in every topology. The transport choice lives entirely at the composition + edge (ADR-008).

      That is the payoff of declaring intent instead of position: the same self-ordering registration that makes the monolith correct is what makes the split reversible. Nothing in Helpdesk's TicketsModule or ADC's ConferenceModule changes when it moves from one host to its own process.

      @@ -341,8 +351,9 @@

      Trade-offs, honestly

      cost: the order is not visible as a list of lines. The structured startup log is the mitigation, but a developer used to reading the order off Program.cs has to learn to read it off the log instead.

    3. Stubs must be maintained. RegisterDisabledStubs is a real obligation. Add a cross-module - interface and forget to register a stub for it, and a host that disables that module fails to resolve. - This is caught at startup rather than in production, but it is a discipline the contract assumes.
    4. + interface and forget to register a stub for it, and a host that names that module's assembly but + disables it fails to resolve the interface the first time something asks for it. The loader does not + check stub coverage, so this is a discipline the contract assumes.
    5. Cycles are rejected, not resolved. A dependency cycle is a hard startup failure by design. That is the correct behavior, but it means you cannot lean on lazy resolution to paper over a genuine circular design between modules.
    6. diff --git a/articles/series-index.html b/articles/series-index.html index 805ece6d..d7809329 100644 --- a/articles/series-index.html +++ b/articles/series-index.html @@ -202,7 +202,7 @@

      Data and persistence

    7. 10 · Database-per-service inside a monolith (and why)
    8. 11 · One entity model, four databases: polyglot persistence behind a single attribute
    9. 12 · EF Core Include chains are a trap: navigation populators decouple eager loading
    10. -
    11. 13 · Optimistic concurrency you cannot opt out of: RowVersion from the database to a required If-Match
    12. +
    13. 13 · Optimistic concurrency with a required If-Match: RowVersion from the database to a 412
    14. 14 · Self-ordering modules: discovered, Kahn-ordered, and extractable
    15. 15 · Event-schema versioning: never silently reshape an event
    16. @@ -213,7 +213,7 @@

      Auth, the API edge, and cross-cutti encrypting PII columns at rest, the hardened response headers every host stamps, and the optional second factor, email-confirmation gate and stored permission grants that complete the identity story.

        -
      • 16 · Cross-service auth without a shared secret: JWKS dual-fetch
      • +
      • 16 · Cross-service auth without a shared secret: JWKS discovery
      • 17 · Password hashing done right: PBKDF2-SHA512, 600k iterations, timing-safe
      • 18 · Idempotency in one attribute: safe retries for HTTP APIs
      • 19 · The self-invalidating cache that lives in the pipeline, not your handlers
      • diff --git a/articles/session-cookie-auth-blazor-ssr.html b/articles/session-cookie-auth-blazor-ssr.html index b4a5d00b..6450ad84 100644 --- a/articles/session-cookie-auth-blazor-ssr.html +++ b/articles/session-cookie-auth-blazor-ssr.html @@ -190,13 +190,18 @@

        Why it matters

        The answer is an HttpOnly cookie for transport, a non-validating SSR reader for prerender, and a strict rule that the cookie reader is for rendering only. The API stays the boundary.

        The MMCA answer: HttpOnly cookies plus an SSR-time reader

        -

        The mechanism ships in MMCA.Common.API (a SessionCookies/ folder) with a MMCA.Common.UI companion, - and both apps' Web UI hosts wire it. It has four moving parts.

        -

        Two HttpOnly cookies, seeded from the client at login. mmca_auth_access carries the JWT and - mmca_auth_refresh carries the refresh token (the names are constants on SessionCookieEndpoints). After a - successful login the browser POSTs to /auth/session-cookie, and SessionCookieJar.Append writes both - cookies HttpOnly with SameSite=Lax; logout DELETEs them. Because they are HttpOnly, no script can read - either one.

        +

        The mechanism ships in MMCA.Common.API (a SessionCookies/ folder) with a MMCA.Common.UI companion + and a same-origin API proxy in MMCA.Common.UI.Web, and both apps' Web UI hosts wire all of it. It has + five moving parts.

        +

        Two HttpOnly cookies, written by the server. mmca_auth_access carries the JWT and + mmca_auth_refresh carries the refresh token (the names are constants on SessionCookieEndpoints). + SessionCookieJar is the one writer: both cookies are HttpOnly, Secure outside Development, and carry + the SameSite mode from SessionCookieSettings (framework default Lax). Because they are HttpOnly, no + script can read either one. On a host that runs the same-origin proxy (both apps do), the UI host writes + the cookies itself: a sign-in from the WebAssembly client passes through the proxy, which moves the issued + pair into the cookies, and the Blazor Server circuit hands its tokens over as short-lived, data-protected + handoffs. The script-facing POST /auth/session-cookie therefore answers 204 without writing anything on + those hosts, and logout DELETEs the cookies.

        An SSR-time scheme reads the access cookie, and deliberately does not validate its signature. SessionCookieAuthenticationHandler (scheme "SessionCookie") reads mmca_auth_access during prerender, parses its claims, checks expiry, and populates HttpContext.User so [Authorize] passes.

        @@ -227,14 +232,20 @@

        The MMCA answe reason: the cookie was minted by the UI host from a token the API already issued, and every API call still fully validates the JWT (the cross-service JWKS story from the auth article). The SSR handler only needs the user's claims to render the first paint; it is explicitly not the security boundary.

        -

        The refresh token never leaves the server. When the interactive client starts, it calls - POST /auth/session/token, a same-origin "validate-or-refresh" endpoint, to hydrate its in-memory access - token. CookieSessionRefresher.GetOrRefreshAsync reads the HttpOnly refresh cookie server-side, refreshes - the access token if it has expired, writes fresh cookies back, and returns only the access token and - its expiry.

        -
        // POST /auth/session/token: hydrate the in-memory access token; the refresh token never leaves the server.
        +          

        The browser holds a claims copy, never a credential. When the interactive client starts, it calls + POST /auth/session/token, a same-origin "validate-or-refresh" endpoint, to learn who is signed in. + CookieSessionRefresher.GetOrRefreshAsync reads the HttpOnly refresh cookie server-side, refreshes the + access token if it has expired, writes fresh cookies back, and returns the access token and its expiry. + On a host where SessionCookieSettings.ClaimsOnlyBrowserTokens is set (the proxy sets it, so both apps + run this way), the endpoint does not hand that token over either: it returns SessionClaimsToken.Create, + the token's own payload under an alg: none header with an empty signature. The client can read the + user's claims and the expiry to render its auth state, and no API accepts it, because every API checks + signatures.

        +
        // POST /auth/session/token: the refresh token never leaves the server, and a claims-only host
        +// never hands out the access token either.
         endpoints.MapPost("/auth/session/token", async (
        -    HttpContext httpContext, ICookieSessionRefresher refresher, CancellationToken cancellationToken) =>
        +    HttpContext httpContext, ICookieSessionRefresher refresher,
        +    IOptions<SessionCookieSettings> settings, CancellationToken cancellationToken) =>
         {
             if (IsCrossSite(httpContext.Request))                       // Sec-Fetch-Site CSRF guard
             {
        @@ -242,31 +253,54 @@ 

        The MMCA answe } var result = await refresher.GetOrRefreshAsync(httpContext, cancellationToken).ConfigureAwait(false); - return result is null - ? Results.Json(new { error = "no_session" }, statusCode: StatusCodes.Status401Unauthorized) - : Results.Json(new SessionTokenResponse(result.Value.AccessToken, result.Value.AccessTokenExpiry)); + if (result is null) + { + return Results.Json(new { error = "no_session" }, statusCode: StatusCodes.Status401Unauthorized); + } + + var browserToken = settings.Value.ClaimsOnlyBrowserTokens + ? SessionClaimsToken.Create(result.Value.AccessToken) ?? string.Empty // unsigned claims copy + : result.Value.AccessToken; + return Results.Json(new SessionTokenResponse(browserToken, result.Value.AccessTokenExpiry)); });

        -

        The response is a SessionTokenResponse(AccessToken, AccessTokenExpiry). The refresh token is never - serialized to the browser. On the UI side, ITokenStorageService keeps the access token in memory and - treats the refresh token as living only in the HttpOnly cookie, and ISessionCookieSync (implemented by - JsFetchSessionCookieSync) mirrors the client's tokens back into the cookies via a small JS shim so the - next prerender sees a current session.

        +

        The response is a SessionTokenResponse(AccessToken, AccessTokenExpiry), and the refresh token is never + serialized to the browser. On the UI side, ITokenStorageService keeps what the client holds in memory, + never in localStorage; on these hosts that is the claims copy.

        +

        A same-origin proxy carries every browser API call (ADR-131). A claims copy cannot call the API, so + the browser never calls the API directly. The WebAssembly client's API client and notification hub point + at /api/** on the UI host's own origin, and the UI host forwards each call to the gateway server-side + with the bearer it reads from the HttpOnly cookie. AddCommonSameOriginApiProxy(IConfiguration) + registers it: it sets the session cookies' SameSite mode from the proxy settings and turns on + claims-only browser tokens, registers YARP's forwarder, and replaces the Blazor Server circuit's + ITokenRefresher and ISessionCookieSync with handoff implementations, so the circuit keeps calling the + gateway server-to-server and trades tokens with the cookies only as protected handoffs. Before anything + is forwarded, the proxy endpoint refuses a cross-origin caller (403 cross_origin_rejected), requires an + X-CSRF: 1 header on every unsafe method (403 csrf_header_required), and validates or refreshes the + session through ICookieSessionRefresher.ValidateOrRefreshAsync. When the identity endpoint is + unreachable it answers 503 session_refresh_unavailable and keeps the cookies, rather than signing the + user out over a blip. Both Web UI hosts register the proxy after their session-cookie wiring and map it + next to MapSessionCookieEndpoints.

        A refresh middleware closes the expiry race. CookieSessionRefreshMiddleware runs before UseAuthentication and, only on GET requests that accept HTML, refreshes the access token server-side if it has expired but the refresh cookie is still good. So a fresh GET after the access token lapsed still renders authenticated, because the middleware has already minted a fresh access token (read by CookieTokenReader from HttpContext.Items) before the SSR scheme runs.

        -

        This is a backend-for-frontend (BFF) token-storage layer: the browser holds an HttpOnly session whose - refresh half it cannot read, the SSR pass authenticates from the access cookie without trusting it as the - boundary, and the real enforcement stays at the API.

        +

        This is a backend-for-frontend (BFF) layer: the browser holds an HttpOnly session it cannot read and a + claims copy that authorizes nothing, the SSR pass authenticates from the access cookie without trusting it + as the boundary, the UI host attaches the real bearer on the way to the gateway, and the real enforcement + stays at the API.

        The CSRF tax, and how it is paid

        Cookie-based auth reintroduces a concern that a pure bearer-header design does not have: a cross-site page can cause the browser to send your cookies. The framework pays that tax with defense-in-depth rather than a - single control. The cookies are SameSite=Lax, so they are not sent on cross-site subrequests. The - refresh endpoint additionally rejects cross-site POSTs by checking the Sec-Fetch-Site header - (IsCrossSite). The cookie endpoints disable antiforgery deliberately (they carry no antiforgery token and - are guarded by SameSite + Sec-Fetch-Site + POST-only instead). Three overlapping checks, none of them - load-bearing alone.

        + single control, at two layers. On the session endpoints, the cookies carry a SameSite mode (framework + default Lax, so they are not sent on cross-site subrequests), the refresh endpoint rejects cross-site + POSTs by checking the Sec-Fetch-Site header (IsCrossSite), and the cookie endpoints disable antiforgery + deliberately (they carry no antiforgery token and are guarded by SameSite + Sec-Fetch-Site + POST-only + instead). On the proxied data path, the same-origin check and the X-CSRF header carry CSRF: a custom + header cannot be sent cross-origin without a preflight, and the proxy answers OPTIONS itself with no + CORS grant. That makes SameSite a usability choice there rather than the CSRF control. The proxy + defaults it to Strict; both apps choose Lax, so a signed-in user following a mailed deep link keeps + the session on the first server render. Overlapping checks, none of them load-bearing alone.

        Scaling out: the key ring has to be shared

        One replica is a special case. Add a second and a failure appears that has nothing to do with the design above: ASP.NET Core's DataProtection key ring lives in memory, per process, so every replica generates @@ -288,8 +322,7 @@

        Scaling out: the key ring has registers no DataProtection services at all. A developer machine, a test host and the Helpdesk seed all run single-process, keep the in-memory default, and take no Azure dependency at startup.

        Adoption is per host, and the shape of it is worth saying plainly. MMCA.ADC calls it on exactly the two - hosts that mint those payloads, its Identity service and its Web UI host, and points both at one private - container on a storage account it already had. MMCA.Store's Web UI host calls it as well, on a storage + hosts that mint those payloads, its Identity service and its Web UI host. MMCA.Store's Web UI host calls it as well, on a storage account provisioned for this and nothing else, with one extra catch on the infrastructure side: the blob URI is injected only when a dataProtectionStorageReady parameter is true (it defaults to false), because AddCommonDataProtection gates on the presence of the URI and never on its reachability, so wiring the @@ -304,11 +337,16 @@

        Trade-offs, honestly

        host-minted and the API independently validates every call. Authorize a sensitive action on the SSR principal without an API round-trip and you have broken the safety argument. The rule "the API is the boundary" is not a nicety here, it is the whole proof. -
      • The session now lives in two places. Cookies for browser GETs and SSR, an in-memory bearer token for - interactive API calls. The two must stay in sync, which is exactly what /auth/session/token and the UI's - ISessionCookieSync exist to manage. A bug in that sync shows up as a flicker of the wrong auth state.
      • -
      • CSRF surface a header-only design would not have. SameSite=Lax plus Sec-Fetch-Site plus POST-only - is solid, but it is a surface, and a reviewer has to understand all three to trust the cookie endpoints.
      • +
      • The UI host becomes part of the API path. Every browser API call and hub frame passes through the UI + host before the gateway, which is one extra hop, and the UI host owns refresh, the refresh race and + cookie rotation for browser traffic. A UI host outage takes the browser's API path down with it, and the + UI host's rate limiter meters API traffic as well as pages.
      • +
      • The proxy removes theft, not use. An injected script runs same-origin and passes both proxy gates, + so it can still act as the user while the page is open; it just cannot carry a token away. Content + Security Policy stays the control for that.
      • +
      • CSRF surface a header-only design would not have. SameSite plus Sec-Fetch-Site plus POST-only on + the session endpoints, and an origin gate plus X-CSRF on the proxy, is solid, but it is a surface, and + a reviewer has to understand both layers to trust it.
      • Expiry is checked, not cryptographically enforced, at the SSR edge. A tampered cookie produces claims that fail at the API on the next call, but the one prerendered HTML pass is produced from unverified claims. For rendering, that is acceptable; for a decision, it is not, which loops back to the first point.
      • @@ -328,27 +366,30 @@

        Apply this even without MMCA

      • Let the prerender pass read claims, not verify them, and make the API the only validator. A parse-don't-validate reader is safe only if a real validation boundary sits behind every state-changing call. Write that invariant down.
      • -
      • Keep the refresh token server-side behind a hydrate endpoint. The browser asks a same-origin - endpoint for a fresh access token; the refresh token is exchanged on the server and never serialized to - the client.
      • +
      • Keep every credential server-side and proxy the API through the UI origin. The browser asks a + same-origin endpoint for its session state and gets an unsigned claims copy; its API calls go to the UI + host, which attaches the real bearer from the HttpOnly cookie on the way to the API. The refresh token + is exchanged on the server and never serialized to the client.
      • Refresh before authentication on GETs. A small middleware that mints a fresh access token before the auth handler runs closes the "expired between requests" gap without a client round-trip.
      • -
      • Budget for CSRF. Cookies bring it back. SameSite=Lax plus a Sec-Fetch-Site check plus POST-only - endpoints is a defensible, layered answer.
      • +
      • Budget for CSRF. Cookies bring it back. SameSite plus a Sec-Fetch-Site check plus POST-only + endpoints protects the session endpoints, and a strict same-origin check plus a custom header protects a + cookie-authenticated proxy: a defensible, layered answer.
      • Share the key ring before you scale out. The moment a cookie-minting host runs more than one replica, per-process keys become random sign-outs. Persist the ring to one shared store with an application discriminator, and keep encryption of the ring at rest as a separate switch so a lagging role assignment costs you hardening rather than login.

    The takeaway: the SSR prerender gap is real, and the fix is an HttpOnly cookie the server can read plus - the discipline that reading it is for rendering, never for deciding. Keep the refresh token off the client, + the discipline that reading it is for rendering, never for deciding. Keep every credential off the client, keep the API as the one validator, and an [Authorize] page survives an F5 without weakening anything.


    What we covered: why a Blazor Web App's SSR prerender pass bounces [Authorize] pages to login on a fresh GET (no Authorization header, no server-readable token), how MMCA.Common closes the gap with two HttpOnly cookies, a SessionCookieAuthenticationHandler that reads claims for prerender without validating - the signature, a server-side /auth/session/token refresher that keeps the refresh token off the client, - and a pre-auth refresh middleware, why the design is safe only because the API stays the validation + the signature, a server-side /auth/session/token refresher that hands the browser only an unsigned + claims copy, a same-origin API proxy (ADR-131) that attaches the real bearer server-side, and a pre-auth + refresh middleware, why the design is safe only because the API stays the validation boundary, why a scaled-out cookie host also needs a shared DataProtection key ring (ADR-069, adopted by both apps, with Store's blob URI gated behind a readiness flag), and the CSRF and dual-path costs that buys.

    Next in the series: external OAuth login, adding Google and GitHub sign-in behind your own local diff --git a/articles/soft-delete-vs-erasure.html b/articles/soft-delete-vs-erasure.html index 3436c6ad..9571dcc0 100644 --- a/articles/soft-delete-vs-erasure.html +++ b/articles/soft-delete-vs-erasure.html @@ -171,9 +171,9 @@

    The MMC [Pii]-marked member with a [REDACTED] token before an entity that holds personal data is written to a structured log, and a PiiErasureContractFitnessTests build gate runs a [Pii]-bearing sample through both the redactor and Anonymize() end to end, so neither half of the [Pii] contract can be - advertised without being exercised. The framework now wires the redactor into one production path of + advertised without being exercised. The framework wires the redactor into one production path of its own: the opt-in field-level audit trail, whose save-changes interceptor asks the redactor whether a type carries personal data and, for the properties that do, writes the redaction token in place of both the old and the new value of the recorded change. One honest caveat for logging: PiiRedactor is still @@ -261,10 +261,10 @@

    The delete that the rest of the system reacts to. That is a destructive default nobody wrote down, and it sits underneath every privacy story above.

    ADR-119 inverts it. RestrictDeleteByDefaultConvention - (Source/Core/MMCA.Common.Infrastructure/Persistence/Conventions/RestrictDeleteByDefaultConvention.cs:41) + (Source/Core/MMCA.Common.Infrastructure/Persistence/Conventions/RestrictDeleteByDefaultConvention.cs:42) is an IModelFinalizingConvention that makes DeleteBehavior.Restrict the default for every relationship nobody configured, registered per engine by the shared ApplicationDbContext at model - finalization (Persistence/DbContexts/ApplicationDbContext.cs:394). A delete that would orphan rows + finalization (Persistence/DbContexts/ApplicationDbContext.cs:399). A delete that would orphan rows fails loudly instead of quietly taking the children with it, and a genuine cascade becomes a decision somebody recorded with .OnDelete(DeleteBehavior.Cascade) in an entity configuration. Two things are deliberately left alone: an ownership foreign key keeps the cascade EF requires, and any behavior a @@ -277,8 +277,8 @@

    The delete that // "Convention" = this convention restricted it // "Ownership" = an owned type's cascade, which EF owns

    That stamp is the point as much as the restrict is. Each foreign key carries a - MMCA:DeleteBehaviorSource annotation (:47) holding Explicit (:50), Convention (:53) or - Ownership (:56), and DeleteBehaviorConventionTestsBase + MMCA:DeleteBehaviorSource annotation (:48) holding Explicit (:51), Convention (:54) or + Ownership (:57), and DeleteBehaviorConventionTestsBase (Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Domain/DeleteBehaviorConventionTestsBase.cs:21) reads exactly that annotation to assert every cascading relationship was opted into on purpose. The convention is a no-op on Cosmos, which has no foreign key constraints to restrict.

    @@ -287,13 +287,37 @@

    The delete that effect of a required foreign key. Erasure stays a deliberate operation (Anonymize()), lifecycle stays a deliberate operation (Delete()), and row removal is the third deliberate operation rather than the one the ORM chose for you.

    +

    The row that still holds its slot: filtered unique indexes

    +

    Soft-delete has one more leak, and it is the database disagreeing with the application. The global + query filter says a deleted row does not exist; a unique index still counts it. Delete a speaker and + the email's unique index keeps refusing a new speaker with that email, with an error the user cannot + act on, because the conflicting row is invisible to them.

    +

    ADR-095 makes the fix a convention rather than a per-index habit. SoftDeleteUniqueIndexConvention + (Source/Core/MMCA.Common.Infrastructure/Persistence/Conventions/SoftDeleteUniqueIndexConvention.cs:34) + is a model-finalizing convention registered once by the shared ApplicationDbContext + (Persistence/DbContexts/ApplicationDbContext.cs:392), so it reaches every module, every database and + every consumer with nothing to opt into. At finalization it walks every non-owned IAuditableEntity + type (:46-47) and filters every unique index on it (:61-64) on that engine's soft-delete + predicate (= false on PostgreSQL, = 0 on the other relational engines), built by the same + SoftDeleteFilterSql.Build that the opt-in HasSoftDeleteFilter uses (:55-57), so the automatic + and the manual path cannot disagree about quoting or column name. An index that already declares its + own filter keeps it and gains the soft-delete clause with AND (:80); a filter that already + constrains the soft-delete column is left exactly as it is (:73-76), so a second model build never + appends the clause twice. SQL Server, PostgreSQL and SQLite are covered, and Cosmos is a no-op + (:29-30, the relational check at :43-44).

    +

    Privacy and uniqueness meet here. An erased User already frees its real address, because + Anonymize() rewrites the email to a per-row deleted-{Id}@anonymized.invalid placeholder; for every + other soft-deleted record that keeps its values, it is the filter that frees the slot. ADR-095 states + the cost plainly: any number of deleted rows may share a "unique" value, so an undelete path has to + handle a collision with the live row that took the slot, and the filter is invisible where the index + is declared (it first appears in a generated migration).

    The second hiding place: the outbox

    -

    There was a second source of retained personal data, and it is the kind of thing you only find when you +

    There is a second source of retained personal data, and it is the kind of thing you only find when you go looking honestly. The transactional outbox (ADR-003) writes an event row in the same transaction - as the state change, and those serialized event payloads can contain personal data. The outbox - processor only set ProcessedOn; nothing ever purged processed rows. ADR-003 itself admitted the table - "grows until cleaned up." So even after you anonymized a user's aggregate, their personal data could - still be sitting in old, processed outbox payloads forever.

    + as the state change, and those serialized event payloads can contain personal data. Marking a row + processed does not remove it, and ADR-003 records the consequence: the outbox table grows until + processed entries are cleaned up. So without a purge, even after you anonymized a user's aggregate, + their personal data could still be sitting in old, processed outbox payloads forever.

    ADR-005 closes that too: OutboxCleanupService purges processed outbox rows older than Outbox:RetentionDays (default 7, set 0 to disable) across every relational data source. Bounded retention without changing delivery semantics. It is worth flagging as a deliberate behavior change: @@ -304,36 +328,49 @@

    The live session: cutti

    Anonymizing the aggregate and committing the soft-delete shuts two doors: no future logins, and no silent re-mint of a fresh access token, because the refresh flow re-fetches the account through the same soft-delete query filter - (Source/Core/MMCA.Common.Application/Users/UseCases/DeleteUser/DeleteUserHandlerBase.cs:103-107). + (Source/Core/MMCA.Common.Application/Users/UseCases/DeleteUser/DeleteUserHandlerBase.cs:107-111). There is a third door, though, and stateless auth holds it open by design. Authentication is stateless JWT (ADR-004): every service validates an access token by signature and expiry, with no per-request lookup against the account store. That is exactly what makes it scale, and it is also why soft-deleting a user does not, on its own, stop a token that was already issued. A bearer credential keeps passing validation until it expires on its own clock, which can be minutes after the account was deactivated.

    -

    ADR-047 bounds that window. SoftDeletedUserMiddleware - (Source/Presentation/MMCA.Common.API/Middleware/SoftDeletedUserMiddleware.cs:31, business rule +

    ADR-047 closes that door. SoftDeletedUserMiddleware + (Source/Presentation/MMCA.Common.API/Middleware/SoftDeletedUserMiddleware.cs:33, business rule BR-133 named in its class doc at :11) runs in the shared pipeline after authentication and before authorization. That ordering is a declarative step list (ADR-079): - Startup/Pipeline/MiddlewarePipelineBuilder.cs registers UseAuthentication() at :117, the - SoftDeletedUserFilter step that adds the middleware at :137, and UseAuthorization() at :141. + Startup/Pipeline/MiddlewarePipelineBuilder.cs registers UseAuthentication() at :105, the + SoftDeletedUserFilter step that adds the middleware at :124-125, and UseAuthorization() at :129. So HttpContext.User is already populated and the check gates every downstream endpoint. For an authenticated caller whose account has been soft-deleted, it - returns HTTP 401 mid-flight, before the endpoint runs. The account-status lookup goes through - ISoftDeletedUserValidator + returns HTTP 401 mid-flight, before the endpoint runs.

    +

    The check reads a shared deleted-user marker first. The erasure handler writes that marker itself, + right after the erasure is saved (SoftDeletedUserCache.MarkDeletedAsync, + DeleteUserHandlerBase.cs:146-148), and the marker lasts 15 minutes + (SoftDeletedUserCache.MarkerDuration, Source/Core/MMCA.Common.Application/Auth/SoftDeletedUserCache.cs:32), + the default access-token lifetime, because it has to outlive every token issued before the delete. + Every host honors it (SoftDeletedUserMiddleware.cs:102-109), so on any host that shares that cache + the deleted user's token is refused on its next request, not at its own expiry. On a cache miss, a + host that runs Identity falls back to ISoftDeletedUserValidator (Source/Core/MMCA.Common.Application/Interfaces/Infrastructure/Auth/ISoftDeletedUserValidator.cs:7, - one IsUserSoftDeletedAsync method at :15), which each Identity module implements with a single - filter-bypassing existence query, and the boolean result is cached for roughly 30 seconds - (SoftDeletedUserCache.MarkerDuration, Source/Core/MMCA.Common.Application/Auth/SoftDeletedUserCache.cs:29, - consumed by the middleware at SoftDeletedUserMiddleware.cs:132). So a given user costs at most one status query per cache window per - cache scope, not one per request. The effect is a bounded revocation window, not instant - revocation: a deactivated user's still-valid access token stops working within about the cache duration - instead of at the token's own expiry.

    + one IsUserSoftDeletedAsync method at :15), which the framework implements once as + SoftDeletedUserValidator<TUser> (Source/Core/MMCA.Common.Application/Users/SoftDeletedUserValidator.cs:20), + a single filter-bypassing existence query that an Identity module closes over its own User at + registration. The middleware caches that answer asymmetrically: "deleted" as the 15-minute marker, + "not deleted" for only 30 seconds (NotDeletedLookupDuration, SoftDeletedUserMiddleware.cs:39, + chosen at :147). So a live user costs at most one status query per 30 seconds per cache scope, not + one per request.

    +

    The marker write is best effort: a failure is logged and the erasure still succeeds + (DeleteUserHandlerBase.cs:150-153). That failure is the one case with a residual window. An + Identity host still catches the deleted account once any cached "not deleted" answer lapses, within + 30 seconds; a host with no validator has nothing to fall back to, so the existing access token stays + usable until it expires, which is exactly what the logged warning says (DeleteUserHandlerBase.cs:199-200).

    Two honest edges. Anonymous requests pass straight through with no lookup - (SoftDeletedUserMiddleware.cs:65-73), so unauthenticated traffic pays nothing. And the validator is - resolved lazily (SoftDeletedUserMiddleware.cs:75) rather than injected as a parameter, so a host that - does not register one (a non-Identity extracted service, or MMCA.Helpdesk's single Tickets host) simply - no-ops on that check: Identity is the source of truth and already validated the token upstream. Lazy + (SoftDeletedUserMiddleware.cs:74-82), so unauthenticated traffic pays nothing. And the validator is + resolved lazily (SoftDeletedUserMiddleware.cs:111) rather than injected as a parameter, so a host that + does not register one (a non-Identity extracted service, or MMCA.Helpdesk's single Tickets host) still + honors the marker and passes only a cache miss through (:112-119): Identity is the source of truth, + and the marker carries what it decided. Lazy resolution is what keeps one pipeline correct in both Identity-hosting and non-Identity hosts without a per-host variant.

    The other right: portability, and why it degrades instead of failing

    @@ -354,7 +391,7 @@

    The // Best-effort: the contributor failed after whatever resilience pipeline it uses. // Degrade the section instead of failing the whole export. The reason handed back is // deliberately generic; the exception detail goes to the log, never to the subject. - UserUseCaseLog.ExportSectionUnavailable(logger, ex, sectionName, userId); + ExportSectionUnavailable(logger, ex, sectionName, userId); return new UserDataExportSectionDTO { @@ -364,7 +401,7 @@

    The }; }

    A section degrades to Available = false and the export completes. One peer outage never fails the - whole export. That catch now lives once, in the base, wrapping every registered section, so a section a + whole export. That catch lives once, in the base, wrapping every registered section, so a section a consumer adds tomorrow inherits the behavior instead of re-implementing it (and the section contributors deliberately catch nothing themselves).

    That is worth sitting with, because the instinct runs the other way. A partial export feels wrong, @@ -427,8 +464,8 @@

    Apply this even without MMCA

    separating the concerns: an IAnonymizable anonymize-in-place hook that preserves the audit trail, plus an OutboxCleanupService that bounds retention of PII-bearing outbox payloads, with the consumer owning the policy. And how ADR-047's SoftDeletedUserMiddleware - closes the third door, cutting off an already-issued access token mid-flight within roughly a 30-second - cache window instead of letting it live to its own expiry.

    + closes the third door, cutting off an already-issued access token mid-flight through a shared + deleted-user marker the erasure writes as it saves, instead of letting the token live to its own expiry.

    Next in the series: the reusable Blazor UI framework that brings the same backend discipline to the front end, a server-paged list page in a few lines.

    MMCA.Common is Apache-2.0 licensed and open source. Star the repo, read the 2-minute ADR-005 behind this @@ -454,6 +491,7 @@

    Apply this even without MMCA

  • Why it matters, and why I am telling on myself
  • The MMCA answer: separate the two concerns, give each a mechanism
  • The delete that really removes rows: restrict by default
  • +
  • The row that still holds its slot: filtered unique indexes
  • The second hiding place: the outbox
  • The live session: cutting off a token mid-flight
  • The other right: portability, and why it degrades instead of failing
  • diff --git a/articles/specification-pattern.html b/articles/specification-pattern.html index 6ca09675..7eaefb22 100644 --- a/articles/specification-pattern.html +++ b/articles/specification-pattern.html @@ -250,16 +250,20 @@

    1. The Specification public override Expression<Func<Session, bool>> Criteria => StatusCriteria; } -// The paged sessions read: the speaker scope (itself a specification, a Session.Id IN (...) filter -// over the SessionSpeaker join) is ANDed with the public rule, never substituted for it. +// The paged sessions read. publicSpecification is the public filter (null for a privileged caller): +// a specification built from StatusCriteria plus a published-event scope. The speaker scope (itself a +// specification, a Session.Id IN (...) filter over the SessionSpeaker join) is ANDed with it, never +// substituted for it. return publicSpecification is null ? speakerResult.Value : publicSpecification.And(speakerResult.Value!);

    The leaked-query bug from the opening cannot happen here. Both halves of the composed query are named objects, not text someone retypes at every call site: the speaker scope arrives as a specification - built by a query handler, and the public visibility rule is a type the controller always ANDs in, - because substituting one for the other would leak non-accepted sessions to non-privileged callers (the - composing method's own doc comment says exactly that). The criteria are server-authored, so the client + built by a query handler, and the public visibility rule arrives the same way, built by another handler + from the same StatusCriteria plus a published-event scope. For every non-privileged caller the + controller always ANDs that rule in, because substituting one for the other would leak non-accepted + sessions to non-privileged callers (the composing method's own doc comment says exactly that); a + privileged caller (organizer or content editor) gets no public filter at all. The criteria are server-authored, so the client cannot tamper with them, and each rule is reusable and testable in isolation. This is a textbook Specification with security overtones: the authorization predicate is not something the request can override.

    @@ -268,16 +272,22 @@

    1. The Specification AuditableBaseEntity<TIdentifierType> rather than an interface, because a member access declared on an interface is not guaranteed to map to the entity's audit column and the criteria has to stay EF-translatable. ADC's question-answer controllers show the intended shape: an organizer gets null - (no scoping at all), and everyone else gets that specification bound to their own user id.

    + (no scoping at all), and everyone else gets that specification bound to their own user id. The one + other way to get null is a non-organizer whose owner claim cannot be resolved, and that caller is + answered with a 403 by a fail-closed gate on the read endpoints, so null means "unscoped" only for + the role that is allowed to read everything.

    2. Dynamic filtering (the untrusted input)

    The other half of any list endpoint is user-driven shaping: the ?filter=...&sort=...&fields=... querystring. This is untrusted and is handled completely separately. Each CLR type gets an - IFilterStrategy (StringFilterStrategy, IntFilterStrategy, DateTimeFilterStrategy, and so on) - that knows which operators it supports, and a QueryFilterService registry dispatches by type. It runs - in two phases: ValidateFilters checks that the property exists on the entity and the operator is - legal for its type before the query (so a bad filter is a 400, not a SQL exception), and - ApplyFilters builds the .Where() chain. Untrusted input is allow-listed against real entity - metadata, never concatenated blindly.

    + IFilterStrategy (StringFilterStrategy, IntFilterStrategy, DateTimeFilterStrategy, and so on, + plus one built on first use for a strongly typed identifier column) that knows which operators it + supports, and a QueryFilterService registry dispatches by type. It runs in two phases: + ValidateFilters checks every key and operator before the query (so a bad filter is a 400, not a SQL + exception), and ApplyFilters builds the .Where() chain. Validation checks the response DTO's field + contract before the entity: a key the client wrote must name a field the DTO declares and must not be a + navigation path, a server-mapped path is capped in depth, the property must exist on the entity, and + the operator must be legal for its type. Untrusted input is allow-listed against the response contract + and real entity metadata, never concatenated blindly.

    The separation is deliberate and worth stating plainly: specifications are trusted and live with the domain; dynamic filters are untrusted and are validated, capped, and reflection-cached at the application boundary. Conflating the two is how authorization clauses end up overridable by a query diff --git a/articles/test-pyramid.html b/articles/test-pyramid.html index d13c7e31..a0a46846 100644 --- a/articles/test-pyramid.html +++ b/articles/test-pyramid.html @@ -163,7 +163,7 @@

    The

    A suite you run constantly is worth more than a suite you run nervously. Here is how MMCA.Common keeps 2,254 tests fast enough to live in the inner loop, with real-database - integration coverage and no Docker in sight.

    + integration coverage and no Docker in that loop.


    There is a failure mode that almost every long-lived codebase drifts into, and it has a name: the ice-cream cone. The pyramid is inverted. A thin layer of unit tests sits at the bottom, and the bulk of @@ -178,21 +178,19 @@

    The the enforced coverage floor and the size of the suite behind it.

    Why the shape matters more than the count

    The test-count number is not the point. The shape is. The rubric (Architecture Evaluation Criteria, - category 14) describes a healthy pyramid as "many fast unit tests on domain and application, fewer - integration, few E2E," and names the inverted pyramid, "mostly slow E2E, flaky tests, tests disabled - without tracking," as the headline red flag.

    + category 14) describes a healthy pyramid as "many fast unit tests on domain/application, fewer + integration, few E2E," and leads its red flags with "Inverted pyramid (mostly slow E2E), flaky tests, + tests disabled/skipped without tracking."

    The reason is the inner loop. A wide base of fast tests is one you run after every change, which means defects surface in seconds, while you still have the context to fix them. A top-heavy suite is one you run at the end, in CI, after you have moved on, which means defects surface as a red build an hour later with no context. Speed is not a vanity metric. It is what determines whether the tests are part of how you write code or a tax you pay at the end.

    The base: fast, pure, no infrastructure

    -

    The wide base of the MMCA.Common pyramid is pure unit tests with no I/O - (28. Testing & Quality Infrastructure): domain entity factories and invariants, value - objects, the Result/Error primitives, CQRS handlers with mocked repositories, FluentValidation - validators, and DTO and request mappers. These dominate the type count and run in-memory in - milliseconds. The whole reason this layer can be wide is the framework's design: Clean Architecture - keeps the Domain framework-pure and the Application layer testable without infrastructure, so the +

    The wide base of the MMCA.Common pyramid is pure unit tests with no I/O: domain entity factories and + invariants, value objects, the Result/Error primitives, CQRS handlers with mocked repositories, + FluentValidation validators, and DTO and request mappers. They run in-memory in milliseconds. The + whole reason this layer can be wide is the framework's design: Clean Architecture keeps the Domain framework-pure and the Application layer testable without infrastructure, so the logic worth testing is reachable without booting a host or touching a database.

    Two design choices keep this layer honest. First, time is injected: tests use FakeTimeProvider rather than DateTime.Now, so time-dependent logic (audit stamping, outbox eligibility delays) is @@ -226,7 +224,7 @@

    The cap, and an orthogonal tier

    fastest tier of all, pure reflection, and they catch a class of regression that no functional test would.

    Shipped test packages: consumers do not re-invent the harness

    -

    Five of the framework's nineteen published NuGet packages are test infrastructure, not test code, and this is +

    Six of the framework's twenty-two published NuGet packages are test infrastructure, not test code, and this is how the pyramid stays consistent across three codebases instead of being rebuilt three times:

    • MMCA.Common.Testing, the integration base: IntegrationTestBase<TFixture> supplies a configured @@ -239,12 +237,17 @@

      Shipped te an axe-core WCAG 2.1 AA assertion.

    • MMCA.Common.Testing.UI, the bUnit base: BunitComponentTestBase registers MudBlazor's services, configures loose JSInterop, and wires real auth doubles so component tests resolve <AuthorizeView> - cascades.
    • + cascades; the same package ships the MarkupSnapshot golden-markup helper and page-test bases for the + framework's identity pages (ConfirmEmailPageTestsBase, RoleAdminListPageTestsBase<TPage>, + RoleAdminEditPageTestsBase<TPage>).
    • MMCA.Common.Testing.Aspire, the AppHost base: AppHostFixtureBase boots a real AppHost once per test collection and waits on each resource's own readiness signal, while AppHostTestBase<TFixture> - hands a test a client bound to a named resource plus typed health, readiness and JWKS assertions.
    • + hands a test a client bound to a named resource plus typed health, readiness, JWKS, h2c and + data-source assertions.
    • MMCA.Common.Testing.Architecture, the fitness-rule library: the architecture rules defined once and consumed by each repo's thin test suite.
    • +
    • MMCA.Common.AI.Testing, the AI test harness: ReplayChatClient, GoldenReplayTestsBase and + PromptContractPinTestsBase, keyed on a PromptContract's normalized SHA-256 hash.
    // A downstream integration test: a few lines of fixture glue, then real HTTP calls.
     public sealed class CatalogTests : IntegrationTestBase<CatalogFixture>
    @@ -282,8 +285,10 @@ 

    Shipped te
  • MmcaGatewayHardeningTestsBase<TEntryPoint> drives a booted gateway through eight edge gates: the per-client-IP rate limiter and its bypass list, the tighter named policy on the credential route, a correlation id generated when the caller supplies none and echoed when it does, one readiness check - per downstream service, an active health probe on every cluster, and partitioning by the forwarded - client IP rather than the proxy IP.
  • + per downstream service, the active health-probe state of every cluster, and partitioning by the + forwarded client IP rather than the proxy IP. The probe gate is switchable: by default every cluster + must carry an enabled active probe, and both consumer gateways override ActiveHealthChecksExpected + to false, so on them it asserts that no cluster carries one.
  • DecoratorPipelineOrderTestsBase<TCommand, TCommandResult, TQuery, TQueryResult> resolves the decorated handler out of a built provider and walks the constructed object graph, asserting the documented nesting order.
  • @@ -294,16 +299,20 @@

    Shipped te behavior, and nothing here is inferred from a registration list. Service hosts boot through SqlServerIntegrationTestFixtureBase<TEntryPoint>, which creates a GUID-named throwaway SQL Server database, lets the host's own migrate-on-start strategy apply the schema, resets data between tests - with Respawn, and drops the database on disposal. Database-free hosts (the two YARP gateways) boot - through ProductionHostApplicationFactory<TEntryPoint>, which pins UseEnvironment("Production") so - the production-only branches (restrictive CORS, HSTS emission) are the ones actually under test, and - captures the started IHost, because StopAsync is not reachable through the WebApplicationFactory + with Respawn, and drops the database on disposal. Database-free hosts boot through + ProductionHostApplicationFactory<TEntryPoint>: the two YARP gateways, and the UI web heads through + Production-pinned factories such as ADC's ConferenceUiHostApplicationFactory, which derives from it. + The base pins UseEnvironment("Production") so the production-only branches (restrictive CORS, HSTS + emission) are the ones actually under test, and captures the started IHost, because StopAsync is not reachable through the WebApplicationFactory surface at all.

    The cost of adopting one stays small, which is the point of writing the body once: a subclass supplies two probe requests, or a path-count floor plus a pinned resource list, or a client factory, and the two - gateway shutdown subclasses are single-line declarations with no body. There are no committed snapshots - either. The OpenAPI guard asserts against the live document rather than a checked-in file, so a new - controller can never leave a stale snapshot behind.

    + gateway shutdown subclasses are single-line declarations with no body. The runtime guard reads no + committed snapshot either: the OpenAPI base asserts against the live document rather than a checked-in + file, so a new controller can never leave a stale snapshot behind. ADC and Store do commit each host's + openapi/<host>.json and fail CI on an uncommitted difference, but that is a separate build-time check + each consumer owns, asking whether the contract changed without review rather than whether a booted + host serves a usable one.

    Adoption is partial, and that is worth reporting as an inventory rather than a clean sweep. The OpenAPI guard and the problem-details guard both run on every extracted REST host: four ADC services and three Store services. Versioning is subclassed once per repo (ADC Conference and Store Catalog), enough to keep @@ -320,8 +329,9 @@

    The AppHost tie share, where JWKS discovery points, and the WaitFor graph that orders the startup. A solution build type-checks that file and never runs it, so a resource renamed on one side of a WithReference still compiles. The in-process integration tier boots hosts directly through WebApplicationFactory, which is - the point of that tier and also means it never sees the orchestration. The E2E tier runs against a - deployed environment, by which time a composition mistake is an incident rather than a test failure. + the point of that tier and also means it never sees the orchestration. The E2E tier does boot a full + stack (ADC's E2E workflow brings the Aspire stack up in CI), but it asserts browser journeys rather than + the wiring contracts, and the deploy path runs it only for UI-affecting changes. ADR-117 closes that gap as a package rather than a per-repo copy, and both consumer smoke tiers subclass it.

    AppHostFixtureBase is a collection fixture: it boots the real AppHost once through an @@ -342,8 +352,10 @@

    The AppHost tie an eight-day red nightly to diagnose.

    AppHostTestBase<TFixture> then gives a test the two things only a running stack can hand it, an HttpClient bound to a named resource and a resolved connection string, plus typed assertions over the - wiring contracts: AssertHealthyAsync, AssertAliveAsync, AssertReadyAsync, AssertJwksAsync and - AssertH2cAsync. The probe paths are constants (/health, /alive, /health/ready, + wiring contracts: AssertHealthyAsync, AssertAliveAsync, AssertReadyAsync, AssertJwksAsync, + AssertH2cAsync, and AssertDataSourceAsync, which checks that the AppHost injected the data-source + connection string the framework's multi-database resolver reads, a logical-name typo that no build and + no in-process tier can see. The probe paths are constants (/health, /alive, /health/ready, /.well-known/jwks.json) mirrored from the framework's own, with a unit test cross-asserting each pair so a rename cannot silently orphan a probe. One rule is written into the constant's own documentation: a startup gate probes liveness, never readiness, because a readiness endpoint aggregates downstream checks @@ -360,10 +372,17 @@

    The AppHost tie [Fact] public async Task Identity_publishes_its_key_set() { - Assert.SkipWhen(!Fixture.IsAvailable, Fixture.SkipReason!); + if (!Fixture.IsAvailable) + { + Assert.Skip(Fixture.SkipReason!); + } + await AssertJwksAsync("identity"); } }

    +

    The skip is written as a branch on purpose. Assert.SkipWhen validates its reason before its + condition, and SkipReason is null exactly when the stack did start, so the one-line form throws on + every runner able to boot the AppHost; the base class documentation prescribes the branch.

    Accessibility as a shipped test contract

    The E2E package carries one more contract, and it is the tier where a published standard turns into a build failure instead of a review comment. ADR-063 records it: WCAG 2.1 AA ships as a named constant in @@ -394,7 +413,10 @@

    Accessibility as a shipped tes backend-less gallery across chromium, firefox, and webkit, and all three are required merge checks. ADC and Store run a chromium-only leg against the full Aspire stack as a deploy gate, and that gate is scoped to UI changes, so a backend-only or infra-only deploy legitimately skips it: "deployed" does not - always mean "axe ran on this commit". MMCA.Helpdesk adopts none of it. It pins the package version, + always mean "axe ran on this commit". Firefox and webkit run on separate weekly E2E runs instead, and a + cross-browser freshness gate fails a deploy when either engine has no successful run inside a 10-day + window, so cross-engine coverage is enforced by recency rather than per commit. MMCA.Helpdesk adopts + none of it. It pins the package version, references it from no project, and has no E2E test project at all, so the seed demonstrates the layers and not this contract.

    Runner and gate: xUnit v3, MTP, and a coverage floor

    @@ -413,8 +435,8 @@

    Runner and gate: xUni

    Trade-offs, honestly

    The shape is right, but the scorecard names real gaps and one is squarely in the testing story.

      -
    • The UI tier's visual check is markup-deep, not pixel-deep. The framework ships roughly a dozen - reusable Blazor primitives in MMCA.Common.UI, some with real branching logic (MobileCardList, +
    • The UI tier's visual check is markup-deep, not pixel-deep. The framework ships 26 reusable + Blazor components in MMCA.Common.UI, some with real branching logic (MobileCardList, MobileInfiniteScrollList), and the pyramid carries a fast base layer for the UI under them: the MMCA.Common.Testing.UI bUnit base backs their component tests, a real-browser render-smoke gate runs in CI, and a render-snapshot regression tier diffs their markup against committed baselines. @@ -422,15 +444,20 @@

      Trade-offs, honestly

      what a snapshot compares: markup structure, not rendered pixels.
    • SQLite is not SQL Server. The middle tier is fast precisely because it uses SQLite, which means SQL-Server-specific behavior (certain query translations, concurrency-token semantics) is validated - against an approximation. The scorecard's Data Architecture row is candid about the surrounding + in the inner loop only against an approximation. Common CI adds a SQL Server Testcontainers job that + asserts row-version concurrency, identity insert and outbox-in-the-same-save against the real engine, + but that is a container tier outside the fast run. The scorecard's Data Architecture row is candid about the surrounding shape: it holds maturity at 4 with implementation at 9, and ADR-018 records the non-SQL engines as deliberately latent, with no production entity on them. The trade buys a fast, Docker-free inner loop at the cost of needing the consumer apps and CI to cover the SQL-Server-specific paths.
    • -
    • The honest limit is mutation testing, not coverage. The unit tier holds a 68.3% line-coverage +
    • The honest limits are mutation testing and the container tiers, not coverage. The unit tier holds a 68.3% line-coverage floor (measured about 70.3%), enforced in CI and ratcheted up as the suite grows rather than left as - an aspiration. What holds category 14 below the top band is a single Exemplary gap: there is no - mutation testing on the Core tier, so a green suite proves the lines run, not that every assertion - would catch a mutant. That is a real limit, stated plainly.
    • + an aspiration. What holds category 14 below the top band starts with mutation testing: there is none + on the Core tier, so a green suite proves the lines run, not that every assertion would catch a + mutant. The scorecard names three structural gaps beside it: the integration tier (Redis, PostgreSQL, + package consumption, Bicep) runs on pull requests but is not a merge gate, the AppHost tier is + advisory, and messaging never meets a real broker in the framework's own CI. Those are real limits, + stated plainly.

    None of these argue against the pyramid. They are the cost of keeping the base fast and honest about what each tier actually proves.

    @@ -456,7 +483,7 @@

    Apply this even without MMCA

    What we covered: why the pyramid's shape matters more than its count, the fast no-Docker base (pure unit tests plus FakeTimeProvider), the real-SQLite middle tier with two databases in MultiSourceSqliteIntegrationTests, the thin bUnit/Playwright cap and the orthogonal fitness-test tier, - the five shipped test packages that let consumers reuse the harness, the seven runtime conformance bases + the six shipped test packages that let consumers reuse the harness, the seven runtime conformance bases that prove a really-booted host wired the framework's contracts (ADR-058) and their partial adoption, the AppHost tier that compiles a claim about the composition itself (ADR-117), WCAG 2.1 AA shipped as a named axe target with one recorded exception (ADR-063), the xUnit v3 / MTP runner and the CI coverage floor, and diff --git a/articles/transactional-outbox-dotnet.html b/articles/transactional-outbox-dotnet.html index e6cff5d7..d31315c1 100644 --- a/articles/transactional-outbox-dotnet.html +++ b/articles/transactional-outbox-dotnet.html @@ -203,7 +203,8 @@

    How MMCA.Common does it:

    AddDomainEvent lives on the aggregate base (AuditableAggregateRootEntity), so any aggregate can raise events. The interesting work happens in SaveChangesAsync, which runs a fixed sequence:

    -

    stamp audit fields -> capture domain events from the aggregates -> serialize them to OutboxMessage +

    stamp audit fields -> stamp the tenant (when the host registers a tenant interceptor) -> capture + domain events from the aggregates -> serialize them to OutboxMessage rows -> base.SaveChangesAsync() commits data + outbox in the same transaction -> dispatch the local domain events in-process -> mark their outbox rows processed.

    @@ -219,20 +220,22 @@

    The third parti answer what changed, because the stamp is a single overwrite: a row edited nine times carries the ninth editor and nothing else. ADR-075 adds the missing half, and it belongs in this article because it does not invent a mechanic, it reuses this one.

    -

    AuditTrailSaveChangesInterceptor is a third SaveChangesInterceptor, registered after the - audit-stamp interceptor and after the domain-event interceptor that writes the outbox rows. The - order is load-bearing: running last is what makes the diff it captures see the final stamped values +

    AuditTrailSaveChangesInterceptor is one more SaveChangesInterceptor, registered last: after the + audit-stamp interceptor, after the tenant interceptor when a host registers one, and after the + domain-event interceptor that writes the outbox rows. The order is load-bearing: running last is what makes the diff it captures see the final stamped values rather than a half-populated entity. It walks the change tracker, compares each modified property's original value against its current one, and adds one AuditTrailEntry row per changed property into the same SaveChanges call. The history therefore commits or rolls back with the data it describes, same transaction, same database. That is the outbox guarantee applied to a different payload: a trail that can be committed without its data, or lost to a crash in the window after the commit, is a hint rather than a record.

    -

    It is opt-in twice over, which is what keeps the cost proportional to the value. A host has to call - AddAuditTrail(configuration), and an entity has to carry the IAuditedEntity marker. A host that - never calls it resolves the interceptor as null (GetService, not GetRequiredService), so nothing - joins the pipeline and the feature costs nothing. Seven service hosts across the reference apps opt - in today, among them Store's Sales service, ADC's Identity service, and Helpdesk's web host.

    +

    It is opt-in three times over, which is what keeps the cost proportional to the value. A host has + to call AddAuditTrail(configuration), it has to set AuditTrail:Enabled (default false, and the + single switch for both recording and whether the AuditTrailEntries table is mapped into the model + at all), and an entity has to carry the IAuditedEntity marker. A host that never calls + AddAuditTrail resolves the interceptor as null (GetService, not GetRequiredService), so nothing + joins the pipeline and the feature costs nothing. Seven hosts across the reference apps call it + today, among them Store's Sales service, ADC's Identity service, and Helpdesk's web host.

    Two details follow from what a change history is. A property marked [Pii] records PiiRedactor.RedactedToken on both sides of the change rather than the values, redacted at capture and never at read, since a store that by construction outlives the row it describes would otherwise @@ -240,7 +243,9 @@

    The third parti deliberately not an IAuditableEntity, exactly like OutboxMessage: no audit stamps of its own (stamping is itself a change, so it would recurse) and no soft-delete flag (a soft-deleted audit row is rewritten history that a query filter quietly hides). Rows are append-only and leave only through - a scheduled retention purge.

    + the scheduled AuditTrailCleanupJob (AuditTrail:RetentionDays, default 90), and that job runs only + when the host also calls AddScheduledJobs(configuration) and sets Scheduler:Enabled. Without the + scheduler the trail keeps recording, nothing purges it, and the retention setting is inert.

    The honest cost is that this one sits on the caller's latency path. An audited entity with twenty changed properties writes twenty extra rows inside your transaction, which is exactly not the beside-the-request work that the outbox drain is.

    @@ -282,13 +287,16 @@

    When the commit itself is ambiguous UnitOfWork forwards straight to DbContextFactory.ExecuteInTransactionAsync, and the CQRS pipeline's TransactionalCommandDecorator calls it for any command carrying ITransactional. Running the delegate inside SQL Server's retrying execution strategy (EnableRetryOnFailure, five - attempts, a ten-second maximum delay) decides four things. The whole delegate is the retriable unit, + attempts, a ten-second maximum delay) decides five things. The whole delegate is the retriable unit, so anything computed outside it but committed inside it is silently wrong on a second attempt. Every attempt after the first starts from ResetForRetry, which calls ChangeTracker.Clear() on every context, because the failed attempt's entities are still Added and would otherwise be inserted a second time with a duplicate outbox row per event. A returned failed Result rolls back exactly like - a thrown exception, which is what a framework that mandates Result over exceptions owes itself. And - the deferred in-process dispatch is flushed only after the commit succeeds (FlushDeferredAsync) and + a thrown exception, which is what a framework that mandates Result over exceptions owes itself. On + a successful result, FlushEnrolledCommandsBeforeCommitAsync runs just before the commit: it saves + internal-command rows enrolled after the handler's last save, so they commit with the caller's + change, and it throws on any other unsaved tracked change, which rolls the unit back rather than + committing while silently discarding that change. And the deferred in-process dispatch is flushed only after the commit succeeds (FlushDeferredAsync) and dropped on every other path (DropDeferred), so an in-process handler only ever sees durable state while the outbox carries everything that crosses a process boundary. A re-entrant call joins the ambient transaction instead of nesting, and a Cosmos context is never enlisted at all, since @@ -340,17 +348,17 @@

    The same code dis has exactly three values (InProcess, RabbitMq, AzureServiceBus), chosen at the deployment edge (the Aspire AppHost locally, Bicep environment variables in production) rather than anywhere in application code, and both broker branches are configured from one settings object with the same - exponential retry, so the two products stay substitutable. It also records the honest gap: the - production-only Azure Service Bus binding is exercised by a dedicated emulator test tier that runs - nightly and non-gating, so it is evidence that the binding works, not a check that blocks a - regression.

    + exponential retry, so the two products stay substitutable. It also records the honest residual: the + production-only Azure Service Bus binding is exercised by a dedicated emulator test tier that runs on + the weekday nightly and gates deployment in both ADC and Store, so a Service-Bus-only regression + blocks the next deploy, though not the merge that introduced it.

    // One abstraction, two transports. Application code depends only on IMessageBus.
     // InProcessMessageBus  -> in-monolith, method-call delivery
     // BrokerMessageBus     -> extracted service, MassTransit broker (RabbitMQ dev / Azure Service Bus prod)

    Whether there is an outbox at all is resolved from that same mode. MessageBus:EnableOutbox is a bool? that defaults to unset, and MessageBusSettings.IsOutboxEnabled reads EnableOutbox ?? Provider != MessageBusProvider.InProcess, character for character the rule - IsInboxEnabled uses one property above it. AddInfrastructure resolves that posture once, at + IsInboxEnabled uses two properties above it. AddInfrastructure resolves that posture once, at registration: on the enabled path it registers OutboxProcessor and OutboxCleanupService, and on the disabled path it registers neither and adds OutboxDisabledNoticeService, which logs one startup line naming exactly what is not running. The one combination that cannot work is refused rather than @@ -418,8 +426,16 @@

    The write that skips the whole // modification audit fields here unless the caller assigned them explicitly. if (!builder.SetsProperty(nameof(IAuditableEntity.LastModifiedOn))) { - var now = (timeProvider ?? TimeProvider.System).GetUtcNow().UtcDateTime; + var now = timeProvider.GetUtcNow().UtcDateTime; builder.Set(e => e.LastModifiedOn, (DateTime?)now); +} + +// With no current user (a background or system scope) the editor is the default sentinel, +// exactly as the save pipeline attributes a system save; leaving the column alone would keep +// crediting the change to the previous human editor. +if (!builder.SetsProperty(nameof(IAuditableEntity.LastModifiedBy))) +{ + builder.Set(e => e.LastModifiedBy, currentUserService?.UserId ?? default); }

    The mechanism that makes this possible is small and reusable: rather than handing EF's setter builder straight to the caller, the repository collects the assignments into an UpdatePropertySetterBuilder @@ -440,13 +456,17 @@

    Trade-offs, honestly

    • At-least-once means duplicates are possible. A consumer can receive the same event twice (publish succeeded, the "mark processed" step did not). The framework does not just - document this, it ships an opt-in consumer-side inbox: IInboxStore (EfInboxStore records processed - messages in an InboxMessages table, NoOpInboxStore is the default no-op) dedups by MessageId, - switched on with MessageBus:EnableInbox, and the generic IntegrationEventConsumer checks before - handling and records only after every handler succeeds (ADR-021, enabled in production on five - service hosts). The honest residual is narrower: the inbox is opt-in per service, and it narrows the - duplicate window rather than closing it, so a crash between a handler committing and the inbox write - reprocesses the event once more. Handlers must still be idempotent for that window.
    • + document this, it ships a consumer-side inbox that is on by default for a broker transport: + IInboxStore (EfInboxStore records processed messages in an InboxMessages table) dedups by + MessageId, and MessageBus:EnableInbox is a bool? that resolves ON for RabbitMQ and Azure + Service Bus when unset. NoOpInboxStore is reached only through an explicit EnableInbox=false, + and that opt-out logs a startup Warning rather than staying silent. The generic + IntegrationEventConsumer stages the inbox row in the scope's unit of work before the handlers + run and abandons it when a handler throws, so a handler that saves to the same source commits the + inbox row in its own transaction (ADR-021; every deployed service host also sets + EnableInbox: true explicitly, four in ADC and three in Store). The honest residual is narrower: + the duplicate window stays open for a handler that writes nothing or writes to a different source, + so handlers must still be idempotent for that case.
    • The table grows, but it self-purges. Processed outbox rows accumulate, and the serialized payloads can contain PII, so the framework ships an automatic OutboxCleanupService that sweeps every relational source and deletes processed rows whose ProcessedOn is older than Outbox:RetentionDays diff --git a/articles/two-real-apps-case-study.html b/articles/two-real-apps-case-study.html index a0481dfb..3e3f7b63 100644 --- a/articles/two-real-apps-case-study.html +++ b/articles/two-real-apps-case-study.html @@ -182,7 +182,7 @@

      The two apps

      • Identity (the User aggregate, JWT auth, plus social login via Google and GitHub),
      • Conference (events, sessions, speakers, rooms, categories, questions and answers, social - activities, partners and session assets, across eighteen domain REST controllers),
      • + activities, partners and session assets, across twenty-two domain REST controllers),
      • Engagement (session bookmarks, event and session feedback, and the conference-day live layer: the LivePolls and SessionQuestions aggregates behind Happening Now, the session Live view, and the presenter UI),
      • @@ -214,11 +214,12 @@

        What they actually share

        signed with RS256 and validated through JWKS discovery, with no shared secret.

        None of that topology is hand-rolled per app. It comes from the framework:

          -
        • The same packages, at the same number. MMCA.Common publishes nineteen packages, and each app pins - the subset it uses at one identical version literal: ADC pins eighteen MMCA.Common.* entries - (.Shared, .Domain, .Application, .Infrastructure, .AI, .API, .Grpc, .Gateway, .UI, - .UI.Maui, .UI.Web, .Aspire, .Aspire.Hosting, .Testing, .Testing.Architecture, - .Testing.Aspire, .Testing.E2E, .Testing.UI), Store pins seventeen of those, taking no .AI.
        • +
        • The same packages, at the same number. MMCA.Common publishes twenty-two packages, and each app pins + the subset it uses at one identical version literal: ADC pins twenty MMCA.Common.* entries + (.Shared, .Domain, .Application, .Infrastructure, .AI, .AI.Anthropic, .AI.Testing, + .API, .Grpc, .Gateway, .UI, .UI.Maui, .UI.Web, .Aspire, .Aspire.Hosting, .Testing, + .Testing.Architecture, .Testing.Aspire, .Testing.E2E, .Testing.UI), Store pins seventeen of + those, taking none of the .AI packages.
        • The same patterns. Result<T> for error flow, the CQRS command/query split with the same decorator order (commands run FeatureGate then Authorization then Logging then Caching then Validating then Timeout then Transactional then the handler; queries run FeatureGate then @@ -244,10 +245,10 @@

          How a framework change ships

          code reaches them. There is no phased rollout, no opt-in flag, no per-consumer compatibility shim.

          The release is a lockstep sweep:

            -
          1. Tag a new MMCA.Common version (the version comes from the git tag via MinVer). All nineteen packages +
          2. Tag a new MMCA.Common version (the version comes from the git tag via MinVer). All twenty-two packages publish at that same version.
          3. In each consumer, bump every MMCA.Common.* entry in Directory.Packages.props to the new version - in one pass. ADC keeps its eighteen entries and Store its seventeen on the same number.
          4. + in one pass. ADC keeps its twenty entries and Store its seventeen on the same number.
          5. Build, run the fitness tests and the rest of the suite, deploy.

          The framework's versioning policy doc (common-VERSIONING.md, canonical in the published docs @@ -266,8 +267,9 @@

          What each app proves tha real domain and a real deployment. That is the division of labor between MMCA.Common and its consumers.

          ADC proves real bounded contexts and real eventing. Identity publishing UserRegistered so Conference can auto-link a speaker by email match is a genuine cross-context workflow, not a contrived - one. Conference calling Engagement's bookmark-count service over gRPC, with a disabled-module stub - standing in when Engagement is not co-hosted, is the extraction boundary working in a running system + one. Conference calling Engagement's bookmark-count service over gRPC, through an adapter that implements + the same IBookmarkCountService interface the in-process call uses (each service host loads only its + own module, so the gRPC client is what answers), is the extraction boundary working in a running system rather than in a unit test. And the deployment is the operability proof: four services plus a gateway and a web UI, each service owning its own database and its own OutboxMessages table, rolled to Azure Container Apps.

          @@ -287,20 +289,21 @@

          The honest note

          Here is the caveat the framework writes about itself. It is not a preamble or a methodology section: it is written into the category rows. Because the framework is a library and not a runnable app, a few categories can only be judged on the substrate it provides, not on realized behavior. The §4 - Domain-Driven Design row holds its implementation score at 8 because strategic DDD is "still realized - downstream (only Notifications lives here)", and the §5 Vertical Slice Architecture row holds at 8 - because "the enforced in-repo slicing surface is still the Notifications family": the framework ships - a second sliced family (the Users use cases, thirteen abstract handler bases across nine folders) and - the slice gate does reach abstract bases, but twelve of the thirteen declare their handler contract over - a generic parameter and are exempt by design, and every one of them logs through the shared - UserUseCaseLog switchboard, so the family deepens the pattern without widening the enforced surface. + Domain-Driven Design row holds its implementation score at 8 on two open criteria, the first being that + strategic DDD "is realized downstream, since the Domain layer holds one aggregate family + (Notifications) plus auth support types". The §5 Vertical Slice Architecture row holds at 8 because + Common "is an SDK with no business use-case slices of its own", so "slice cohesion is proven in the + consumer repos": the framework ships a second sliced family (the Users use cases, thirteen abstract + handler bases across nine folders) and the slice gate does reach abstract bases, but twelve of the + thirteen declare their handler contract over a generic parameter and are exempt by design, so the + family deepens the pattern without widening the enforced surface. For both, the real surface lives in MMCA.Store and MMCA.ADC. For performance and cost, the framework ships an in-repo BenchmarkDotNet hot-path harness (§12) and a released cost guide (§31); only full load/stress data lives in the consumer apps.

          That is not a weakness to hide; it is the reason the two apps exist. The framework supplies the base classes, the enforced layering, and the extraction points. The apps supply the proof that those things hold up against two different real domains and two different production deployments. The - framework's two-axis evaluation scores it at roughly 97% maturity and 86% implementation (97.0% and 86.0% + framework's two-axis evaluation scores it at roughly 97% maturity and 86% implementation (96.6% and 86.0% exactly), with implementation the weaker axis precisely because some of the most important "does this actually model a domain well" evidence lives downstream, in the consumers, where it should.

          diff --git a/articles/validation-kit.html b/articles/validation-kit.html index 145d2d5f..4b7140a3 100644 --- a/articles/validation-kit.html +++ b/articles/validation-kit.html @@ -174,8 +174,8 @@

          Compo sits in the CQRS chain and gates every command before the handler, covered in the decorator-pipeline deep-dive. This article is about the other half that no one writes well: the reusable building blocks that make each validator a short list of includes rather than a copy-pasted RuleFor wall. MMCA.Common - ships that kit in MMCA.Common.Application, so ADC and Store both inherit identical email, password, and - address rules without duplicating a single line.

          + ships that kit in MMCA.Common.Application, so a module that composes from it gets the framework's email, + password, and address rules without restating a single chain.

          Reusable rule fragments, composed with Include

          The core idea is a rule fragment: a tiny AbstractValidator<T> that owns exactly one field's contract, generic over the parent type T and configured with a selector expression. CommonValidationRules.cs @@ -183,27 +183,37 @@

          Reusable rule fragments, AbsoluteUrlRules<T>, PositiveIntRules<T>, PositiveDecimalRules<T>, NonNegativeIntRules<T>, RequiredIdRules<T, TId>, OptionalPositiveIdRules<T, TId>, PasswordRules<T>, and StrongPasswordRules<T>. Each constructor is a single expression body. EmailRules<T>, for example, - chains NotEmpty() + EmailAddress() + MaximumLength(maxLength). StrongPasswordRules<T> repeats - PasswordRules<T>'s non-empty plus 8-to-128 length and adds four Matches(...) regexes for an uppercase - letter, a lowercase letter, a digit, and a special character.

          + chains NotEmpty() + EmailAddress() + MaximumLength(maxLength). StrongPasswordRules<T> declares + the same non-empty plus 8-to-128 length as PasswordRules<T> and adds four Matches(...) regexes for an + uppercase letter, a lowercase letter, a digit, and a special character. Its lengths and character classes + come from PasswordComplexity in MMCA.Common.Shared, the one Unicode-aware definition the client form + attribute evaluates too, so the server rule and the form cannot disagree.

          Two design choices make a fragment reusable across unrelated types. First, it is generic over T, the type that contains the field. Second, it takes a selector expression (Expression<Func<T, string>>) - rather than inheriting from the parent. So the same EmailRules<T> validates a RegisterRequest, a - LoginRequest, or a bare value object, with zero inheritance coupling. A concrete validator pulls a - fragment in with FluentValidation's Include(...):

          -
          public sealed class CreateSessionRequestValidator : AbstractValidator<CreateSessionRequest>
          +          rather than inheriting from the parent. So the same EmailRules<T> validates ADC's RegisterRequest, a
          +          speaker's email, and an event's organizer contact email, with zero inheritance coupling. A concrete
          +          validator pulls fragments in with FluentValidation's Include(...). This is ADC's registration validator:

          +
          public sealed class RegisterRequestValidator : AbstractValidator<RegisterRequest>
           {
          -    public CreateSessionRequestValidator()
          +    public RegisterRequestValidator()
               {
          -        Include(new RequiredStringRules<CreateSessionRequest>(r => r.Title, "Title", 200));
          -        Include(new EmailRules<CreateSessionRequest>(r => r.ContactEmail, "Contact Email", 256));
          +        Include(new EmailRules<RegisterRequest>(x => x.Email, "Email", UserInvariants.EmailMaxLength));
          +        Include(new StrongPasswordRules<RegisterRequest>(x => x.Password));
          +        Include(new RequiredStringRules<RegisterRequest>(x => x.FirstName, "First name", UserInvariants.FirstNameMaxLength));
          +        Include(new RequiredStringRules<RegisterRequest>(x => x.LastName, "Last name", UserInvariants.LastNameMaxLength));
          +
          +        RuleFor(x => x.Address)
          +            .SetValidator(new AddressValidator()!)
          +            .When(x => x.Address is not null);
               }
           }
          -

          Read that and the contract is obvious at a glance: a required title capped at 200 characters, a valid - contact email capped at 256. No RuleFor chain to re-derive. The "non-empty plus valid format plus max - length" logic lives in one place, and a security tweak (tighten the password regex, raise an email length - cap) is a one-line edit that propagates to every consumer on the next package bump instead of being missed - in some forgotten validator.

          +

          Read that and the contract is obvious at a glance: a required, well-formed email, a strong password, and + required first and last names, each length cap taken from the UserInvariants constants the domain's own + User checks use, plus an optional address handed to the shared AddressValidator. The only RuleFor + left is the one that wires the nested validator. The "non-empty plus valid format plus max length" logic + lives in one place, and a security tweak (tighten a password character class, raise an email length cap) + is a one-line edit that reaches every validator that includes the fragment on the next package bump + instead of being missed in some forgotten validator.

          The address family is the worked example of composition all the way up. AddressValidationRules.cs ships six field fragments (AddressLine1Rules<T> through CountryRules<T>), and AddressValidator is a composite AbstractValidator<Address> whose entire body is six Include(...) calls. It owns no @@ -212,11 +222,14 @@

          Reusable rule fragments, invariant and its validator agree by construction. The max length for a city lives in exactly one place across the entire solution, and the validator references it.

          One validator for the request, free for the command

          -

          Most commands in this codebase are thin wrappers that carry a request DTO, for example - CreateSessionCommand(CreateSessionRequest Request), and implement ICommandWithRequest<TRequest> (its - Request property is the bridge). The naive approach forces you to register a validator for both the - request and the command, which means restating the request's rules at the command level for every single - command. That is boilerplate begging to drift.

          +

          Some commands carry a request DTO rather than being one. The generic update command, + UpdateEntityCommand<TEntity, TUpdateRequest, TIdentifierType>(Id, Request, RowVersion), wraps the request + body together with the route id and the concurrency token, and implements ICommandWithRequest<TUpdateRequest> + (its Request property is the bridge). The naive approach forces you to register a validator for both + the request and the command, which means restating the request's rules at the command level for every + wrapping command. That is boilerplate begging to drift. (A create path often needs no wrapper at all: ADC's + CreateSessionHandler handles SessionCreateRequest itself as the command, so the request's own + validator applies directly.)

          CommandRequestValidator<TCommand, TRequest> removes it by convention. It is an auto-registered AbstractValidator<TCommand> whose constructor takes IEnumerable<IValidator<TRequest>> by DI and loops over the whole collection, de-duplicated by runtime type with DistinctBy(v => v.GetType()), applying @@ -233,8 +246,11 @@

          One validator for th TryAddTransient. That TryAdd is the load-bearing detail: it is a fallback, not an override. If a module ships an explicit hand-written IValidator<TCommand>, that wins, and the generic bridge stays out of the way. An empty validator collection is not an error either: it just means the request has no rules - and the generic validator is a no-op. Convention over configuration, with an escape hatch that never - blocks a bespoke case.

          + and the generic validator is a no-op. A command the scan cannot see (a closed generic constructed at + registration time rather than declared in the module assembly) gets the same bridge explicitly: + AddEntityUpdate<...>() calls AddCommandRequestValidator<TCommand, TRequest>(), which registers the same + CommandRequestValidator with the same TryAdd semantics. Convention over configuration, with an escape + hatch that never blocks a bespoke case.

          A validation failure is a Result, and the edge maps it to 400

          A validator that runs is useless unless its output flows into the rest of the system cleanly. FluentValidation speaks in ValidationResult and ValidationFailure. The rest of the codebase speaks in @@ -268,17 +284,19 @@

          The two-altitude than duplicate.

          The validator does cheap structural checks: is the string non-empty, is it under the max length, does it look like an email, does the password match the complexity regex. These are properties of the request - shape alone. They need no database, no other entity, no business context, and they are exactly what you - want to reject at the edge with a 400 before opening a transaction.

          + shape alone. The kit's fragments need no database, no other entity, no business context, and they are + exactly what you want to reject at the edge with a 400 before opening a transaction.

          The domain factory enforces business invariants: rules that depend on state the validator cannot see. "This email is already registered." "A session cannot be scheduled outside its parent event's window." "A discount cannot exceed the order total." Those need other data, so they belong in the domain where that data lives, returned as a Result failure from the factory method.

          Put the structural check in the validator and the business invariant in the domain factory, and each lives in exactly one place. The anti-pattern is smearing one altitude across both layers: re-doing a regex check - inside the factory, or trying to query the database from a validator. The kit's job is to make the cheap - structural layer composable and consistent, so the domain factory is free to focus on the rules only it - can enforce.

          + inside the factory, or pulling a business invariant out of the domain into a validator. The pipeline does + not forbid the second (the validating decorator runs validators one at a time precisely because a validator + may reach the database through a scoped repository), but a rule that needs other data already has a home + in the domain factory, next to that data. The kit's job is to make the cheap structural layer composable + and consistent, so the domain factory is free to focus on the rules only it can enforce.

          Trade-offs, honestly

          • It is a FluentValidation dependency. The kit is a thin composition layer over FluentValidation 12, @@ -289,6 +307,10 @@

            Trade-offs, honestly

            RequiredStringRules<T>(selector, fieldName, maxLength) is more abstract than a literal RuleFor(x => x.Title).NotEmpty().MaximumLength(200). The payoff is reuse, but a newcomer meets a small generic puzzle (what is T, what does the selector bind) before the first Include reads naturally.
          • +
          • Composition is opt-in, so adoption is uneven. Nothing forces a validator to include a fragment. + Store's registration validator hand-writes its email and password chains with literal lengths (and its + password chain carries no complexity regexes), and Common's own login and forgot-password validators + hand-write their email rule. The kit removes the reason to copy; it does not detect a copy.
          • This layer is structural only. A fragment validates shape, never cross-entity or stateful rules. That is correct (those belong in the domain factory), but it means the validator is not the whole story, and a reviewer must check both altitudes to know a command is fully guarded.
          • diff --git a/articles/write-your-first-fitness-test.html b/articles/write-your-first-fitness-test.html index 29f25acf..6b8b1dab 100644 --- a/articles/write-your-first-fitness-test.html +++ b/articles/write-your-first-fitness-test.html @@ -197,8 +197,8 @@

            Why rules-as-code beats review

            A third gate sits alongside those two, and ADR-015 as revised records the enforcement as running in three layers. It is neither MSBuild nor NetArchTest: Microsoft.CodeAnalysis.PublicApiAnalyzers runs on every published package except MMCA.Common.UI.Maui (excluded by name, because it builds only on the - Windows MAUI job outside the main solution) against a committed PublicAPI.Shipped.txt baseline (5,034 - declarations across eighteen files), so adding or removing a public member fails the compile until that + Windows MAUI job outside the main solution) against a committed PublicAPI.Shipped.txt baseline (one + per gated package, twenty-one files), so adding or removing a public member fails the compile until that text file is updated in the same pull request. It guards the shipped package surface rather than layer flow, which is why the two speeds above are the ones this tutorial teaches.

            This article is about adding the second layer to your own code, and optionally the first.

            @@ -209,18 +209,18 @@

            Prerequisites

          • Microsoft Testing Platform as your test runner (MMCA.Common uses it via global.json with xUnit v3). The fitness tests run inside the normal dotnet test tier, so they gate CI like any other test.
          • -
          • The package you are about to install: MMCA.Common.Testing.Architecture, one of the nineteen +
          • The package you are about to install: MMCA.Common.Testing.Architecture, one of the twenty-two packages the framework publishes. Its README row describes it exactly: "IArchitectureMap + reusable NetArchTest rule library + abstract test bases (consumed by each repo's *.Architecture.Tests)."

          The key design idea: the rule bodies ship in the package once. You do not copy them. You supply a tiny map of your assemblies and subclass the bases, and you inherit roughly the same suite that runs across - MMCA.Common, MMCA.Store, MMCA.ADC and MMCA.Helpdesk (136 test methods across 53 abstract *TestsBase - classes; the framework's own build executes 267 of them).

          + MMCA.Common, MMCA.Store, MMCA.ADC and MMCA.Helpdesk (141 test methods across 55 abstract *TestsBase + classes; the framework's own build executes 339 of them).

          If you scaffolded with dotnet new mmca-app, steps 1 through 4 are already done. The generated solution ships the architecture-test project, the IArchitectureMap, and every applicable base - subclassed (31 sealed subclasses in the current reference-app seed), including the wire-contract + subclassed (32 sealed subclasses in the current reference-app seed), including the wire-contract freeze, which arrives frozen under your own names and green on the first dotnet test. Read those steps anyway to know what you have, then skip to Step 5. If you are retrofitting an existing solution, the steps are the work.

          @@ -230,7 +230,7 @@

          Step 1: install th Tests/Architecture/*.Architecture.Tests), and reference the package:

          dotnet add package MMCA.Common.Testing.Architecture

          The package brings the NetArchTest engine (NetArchTest.eNhancedEdition), the ArchitectureRules rule - library, the diagnostic helpers, and the 53 abstract *TestsBase classes. You will not write rule + library, the diagnostic helpers, and the 55 abstract *TestsBase classes. You will not write rule logic; you will point the rules at your assemblies and subclass the bases.

          Step 2: implement IArchitectureMap, one anchor type per layer

          This is the only real work, and it is small. IArchitectureMap is the single extension point every rule is @@ -257,8 +257,8 @@

          Step 2: imp ]; }

          That is the "what to scan" half. The package's ArchitectureRules are the "what to assert" half. The - framework's own CommonArchitectureMap is module-less (every layer is a framework layer, one anchor per - package); ADC's AdcArchitectureMap adds module entries the same way. Your map looks like one of those, + framework's own CommonArchitectureMap is module-less (every layer is a framework layer, seven Framework(...) + entries, one anchor per layer it scans); ADC's AdcArchitectureMap adds module entries the same way. Your map looks like one of those, scaled to your solution.

          Step 3: subclass the test bases to inherit the rule library

          Now your test classes shrink to thin sealed subclasses that supply the map and inherit the [Fact]s. @@ -290,8 +290,8 @@

          Step 3: subc SDK, which the base names only generically in its doc comment as "a payment SDK or a broker client") without editing the package.

        -

        The other bases cover more ground when you are ready: MicroserviceExtractionTestsBase (no MassTransit - in Application/Domain/Shared), entity and aggregate conventions (aggregates have no public constructors, +

        The other bases cover more ground when you are ready: MicroserviceExtractionTestsBase (no MassTransit, + gRPC or Protobuf in Application/Domain/Shared), entity and aggregate conventions (aggregates have no public constructors, a Result-returning Create factory, entities are sealed and live in the Domain layer), concurrency awareness, controller conventions, and PII conventions ([Pii] implies IAnonymizable). You opt into each by adding a subclass.

        @@ -306,7 +306,7 @@

        Step 4: run the s

        Because they run in the normal tier, a violated invariant fails CI exactly like a failing unit test. One operational note: Microsoft Testing Platform fails the build if a test project discovers zero tests, so make sure your subclasses are public and actually inherit [Fact]s. The framework's CI even floors its - test steps with --minimum-expected-tests (1 on the ADC and Store CI runs, 2000 on MMCA.Common's own + test steps with --minimum-expected-tests (1 on the ADC CI runs, 2650 on the Store CI runs, 2000 on MMCA.Common's own solution-wide run, 40 on its Helpdesk canary) so neither an empty suite nor a silently shrunken one can pass. Where a step carries no floor the workflow says why, as ADC's live-judge step does: every case there skips itself without an API key, and a zero-run must not red the deploy.

        diff --git a/assets/data/articles.js b/assets/data/articles.js index 7d6548bc..0e81af8a 100644 --- a/assets/data/articles.js +++ b/assets/data/articles.js @@ -53,7 +53,7 @@ window.ARTICLES = [ { n: 14, page: "self-ordering-modules", cat: "data", hero: "assets/img/articles/article-14.png", title: "Self-ordering modules", summary: "Modules declare their dependencies and load in topological order, so registration is never hand-sequenced.", date: "2026-07-12T16:36:58Z", url: "https://medium.com/@ivanball76/self-ordering-modules-discovered-kahn-ordered-and-extractable-2ce7283a26b5" }, { n: 15, page: "event-schema-versioning", cat: "data", hero: "assets/img/articles/article-15.png", adr: "ADR 010", title: "Event-schema versioning", summary: "Every integration event carries a schema version; breaking changes get a new event type and an upcaster, never a silent reshape.", date: "2026-07-13T11:24:59Z", url: "https://medium.com/@ivanball76/event-schema-versioning-never-silently-reshape-an-event-93cd5d4a156d" }, { n: 16, page: "jwks-cross-service-auth", cat: "auth", hero: "assets/img/articles/article-16.png", adr: "ADR 004", title: "JWKS cross-service auth", summary: "Validate another service's RS256 tokens via JWKS discovery, with no shared secret crossing a boundary.", date: "2026-07-14T11:17:47Z", url: "https://medium.com/@ivanball76/cross-service-auth-without-a-shared-secret-jwks-dual-fetch-478e6f688c7e" }, - { n: 17, page: "password-hashing", cat: "auth", hero: "assets/img/articles/article-17.png", adr: "ADR 032", title: "Password hashing done right", summary: "The non-negotiables of password storage in .NET, done correctly and tested.", date: "2026-07-15T12:22:21Z", url: "https://medium.com/@ivanball76/password-hashing-done-right-pbkdf2-sha512-600k-iterations-timing-safe-d64ddb802403" }, + { n: 17, page: "password-hashing", cat: "auth", hero: "assets/img/articles/article-17.png", adr: "ADR 102", title: "Password hashing done right", summary: "The non-negotiables of password storage in .NET, done correctly and tested.", date: "2026-07-15T12:22:21Z", url: "https://medium.com/@ivanball76/password-hashing-done-right-pbkdf2-sha512-600k-iterations-timing-safe-d64ddb802403" }, { n: 18, page: "idempotency-attribute", cat: "auth", hero: "assets/img/articles/article-18.png", adr: "ADR 017/021", title: "Idempotency in one attribute", summary: "Dedup client retries with an Idempotency-Key header and cached replay, plus a consumer-side inbox for brokers.", date: "2026-07-16T13:46:11Z", url: "https://medium.com/@ivanball76/idempotency-in-one-attribute-safe-retries-for-http-apis-065848fd03f4" }, { n: 19, page: "self-invalidating-cache", cat: "auth", hero: "assets/img/articles/article-19.png", adr: "ADR 026/040", title: "The self-invalidating cache", summary: "A caching decorator where commands invalidate and queries populate, plus an authenticated output-cache tier at the API edge.", date: "2026-07-17T12:07:08Z", url: "https://medium.com/@ivanball76/the-self-invalidating-cache-that-lives-in-the-pipeline-not-your-handlers-e11548062d2f" }, { n: 20, page: "problem-details-http-grpc", cat: "auth", hero: "assets/img/articles/article-20.png", title: "Problem Details across HTTP and gRPC", summary: "One error contract mapped consistently to HTTP Problem Details and gRPC status.", date: "2026-07-20T13:33:53Z", url: "https://medium.com/@ivanball76/problem-details-across-http-and-grpc-rfc-9457-9f20157cf7de" }, @@ -63,7 +63,7 @@ window.ARTICLES = [ { n: 24, page: "permission-based-authorization", cat: "auth", hero: "assets/img/articles/article-24.png", adr: "ADR 020", title: "Permission-based authorization over roles", summary: "A capability layer over RBAC: permission policies that resolve on demand from a central registry.", date: "2026-07-24T11:34:48Z", url: "https://medium.com/@ivanball76/permission-based-authorization-capabilities-over-role-checks-ea6574cbee27" }, { n: 25, page: "session-cookie-auth-blazor-ssr", cat: "auth", hero: "assets/img/articles/article-25.png", adr: "ADR 022", title: "Browser session-cookie auth for Blazor SSR", summary: "HttpOnly session cookies and an SSR-time scheme so [Authorize] passes during prerender, with the API still the boundary.", date: "2026-07-25T12:25:21Z", url: "https://medium.com/@ivanball76/browser-session-cookie-auth-for-blazor-ssr-surviving-the-f5-eb0ea317820e" }, { n: 26, page: "external-oauth-login", cat: "auth", hero: "assets/img/articles/article-26.png", adr: "ADR 036", title: "External OAuth login behind your own JWTs", summary: "Sign in with Google or GitHub without leaking provider tokens: external identity exchanged for your own JWTs at the boundary.", date: "2026-07-26T14:22:48Z", url: "https://medium.com/@ivanball76/google-and-github-login-without-leaking-tokens-external-oauth-behind-your-own-jwts-d68ba5e3aca4" }, - { n: 27, page: "jwt-refresh-token-rotation", cat: "auth", hero: "assets/img/articles/article-27.png", adr: "ADR 050", title: "One rotating refresh token", summary: "A short-lived JWT plus one server-stored refresh token that rotates on every use, with reuse detection that makes a stolen token end its own session.", date: "2026-07-27T10:27:05Z", url: "https://medium.com/@ivanball76/one-rotating-refresh-token-and-reuse-detection-that-makes-theft-self-limiting-fab42234a04a" }, + { n: 27, page: "jwt-refresh-token-rotation", cat: "auth", hero: "assets/img/articles/article-27.png", adr: "ADR 097", title: "One rotating refresh token", summary: "A short-lived JWT plus one server-stored refresh token that rotates on every use, with reuse detection that makes a stolen token end its own session.", date: "2026-07-27T10:27:05Z", url: "https://medium.com/@ivanball76/one-rotating-refresh-token-and-reuse-detection-that-makes-theft-self-limiting-fab42234a04a" }, { n: 28, page: "generic-entity-controllers", cat: "auth", hero: "assets/img/articles/article-28.png", adr: "ADR 034", title: "Generic entity controllers", summary: "A write-once REST surface every entity inherits, plus a bounded dynamic query contract that is never open SQL.", date: "2026-07-28T12:10:47Z", url: "https://medium.com/@ivanball76/generic-entity-controllers-and-the-dynamic-query-contract-adr-034-2b5c799bc69f" }, { n: 29, page: "resource-ownership-authorization", cat: "auth", hero: "assets/img/articles/article-29.png", adr: "ADR 033", title: "Resource-ownership authorization", summary: "Beyond roles and permissions: which rows you may touch, enforced per resource.", date: "2026-07-29T13:02:35Z", url: "https://medium.com/@ivanball76/resource-ownership-authorization-which-rows-you-may-touch-not-just-which-actions-cb8e78867bae" }, { n: 30, page: "rate-limiting-brute-force-protection", cat: "auth", hero: "assets/img/articles/article-30.png", adr: "ADR 019/029", title: "Rate limiting and brute-force protection", summary: "Two layers that cover the whole API edge: endpoint rate limits plus lockout-based brute-force defense on identity.", date: "2026-07-30T12:20:41Z", url: "https://medium.com/@ivanball76/defending-the-api-edge-three-controls-that-cover-the-whole-surface-d958ecae1091" }, diff --git a/assets/data/search-index.json b/assets/data/search-index.json index 69987644..55e87405 100644 --- a/assets/data/search-index.json +++ b/assets/data/search-index.json @@ -1 +1 @@ -{"v":2,"n":2246,"o":{"fields":["t","d","i","b"],"storeFields":["u","d","k","t","x","e"],"idField":"id"},"i":{"documentCount":2246,"nextId":2246,"documentIds":{"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9,"10":10,"11":11,"12":12,"13":13,"14":14,"15":15,"16":16,"17":17,"18":18,"19":19,"20":20,"21":21,"22":22,"23":23,"24":24,"25":25,"26":26,"27":27,"28":28,"29":29,"30":30,"31":31,"32":32,"33":33,"34":34,"35":35,"36":36,"37":37,"38":38,"39":39,"40":40,"41":41,"42":42,"43":43,"44":44,"45":45,"46":46,"47":47,"48":48,"49":49,"50":50,"51":51,"52":52,"53":53,"54":54,"55":55,"56":56,"57":57,"58":58,"59":59,"60":60,"61":61,"62":62,"63":63,"64":64,"65":65,"66":66,"67":67,"68":68,"69":69,"70":70,"71":71,"72":72,"73":73,"74":74,"75":75,"76":76,"77":77,"78":78,"79":79,"80":80,"81":81,"82":82,"83":83,"84":84,"85":85,"86":86,"87":87,"88":88,"89":89,"90":90,"91":91,"92":92,"93":93,"94":94,"95":95,"96":96,"97":97,"98":98,"99":99,"100":100,"101":101,"102":102,"103":103,"104":104,"105":105,"106":106,"107":107,"108":108,"109":109,"110":110,"111":111,"112":112,"113":113,"114":114,"115":115,"116":116,"117":117,"118":118,"119":119,"120":120,"121":121,"122":122,"123":123,"124":124,"125":125,"126":126,"127":127,"128":128,"129":129,"130":130,"131":131,"132":132,"133":133,"134":134,"135":135,"136":136,"137":137,"138":138,"139":139,"140":140,"141":141,"142":142,"143":143,"144":144,"145":145,"146":146,"147":147,"148":148,"149":149,"150":150,"151":151,"152":152,"153":153,"154":154,"155":155,"156":156,"157":157,"158":158,"159":159,"160":160,"161":161,"162":162,"163":163,"164":164,"165":165,"166":166,"167":167,"168":168,"169":169,"170":170,"171":171,"172":172,"173":173,"174":174,"175":175,"176":176,"177":177,"178":178,"179":179,"180":180,"181":181,"182":182,"183":183,"184":184,"185":185,"186":186,"187":187,"188":188,"189":189,"190":190,"191":191,"192":192,"193":193,"194":194,"195":195,"196":196,"197":197,"198":198,"199":199,"200":200,"201":201,"202":202,"203":203,"204":204,"205":205,"206":206,"207":207,"208":208,"209":209,"210":210,"211":211,"212":212,"213":213,"214":214,"215":215,"216":216,"217":217,"218":218,"219":219,"220":220,"221":221,"222":222,"223":223,"224":224,"225":225,"226":226,"227":227,"228":228,"229":229,"230":230,"231":231,"232":232,"233":233,"234":234,"235":235,"236":236,"237":237,"238":238,"239":239,"240":240,"241":241,"242":242,"243":243,"244":244,"245":245,"246":246,"247":247,"248":248,"249":249,"250":250,"251":251,"252":252,"253":253,"254":254,"255":255,"256":256,"257":257,"258":258,"259":259,"260":260,"261":261,"262":262,"263":263,"264":264,"265":265,"266":266,"267":267,"268":268,"269":269,"270":270,"271":271,"272":272,"273":273,"274":274,"275":275,"276":276,"277":277,"278":278,"279":279,"280":280,"281":281,"282":282,"283":283,"284":284,"285":285,"286":286,"287":287,"288":288,"289":289,"290":290,"291":291,"292":292,"293":293,"294":294,"295":295,"296":296,"297":297,"298":298,"299":299,"300":300,"301":301,"302":302,"303":303,"304":304,"305":305,"306":306,"307":307,"308":308,"309":309,"310":310,"311":311,"312":312,"313":313,"314":314,"315":315,"316":316,"317":317,"318":318,"319":319,"320":320,"321":321,"322":322,"323":323,"324":324,"325":325,"326":326,"327":327,"328":328,"329":329,"330":330,"331":331,"332":332,"333":333,"334":334,"335":335,"336":336,"337":337,"338":338,"339":339,"340":340,"341":341,"342":342,"343":343,"344":344,"345":345,"346":346,"347":347,"348":348,"349":349,"350":350,"351":351,"352":352,"353":353,"354":354,"355":355,"356":356,"357":357,"358":358,"359":359,"360":360,"361":361,"362":362,"363":363,"364":364,"365":365,"366":366,"367":367,"368":368,"369":369,"370":370,"371":371,"372":372,"373":373,"374":374,"375":375,"376":376,"377":377,"378":378,"379":379,"380":380,"381":381,"382":382,"383":383,"384":384,"385":385,"386":386,"387":387,"388":388,"389":389,"390":390,"391":391,"392":392,"393":393,"394":394,"395":395,"396":396,"397":397,"398":398,"399":399,"400":400,"401":401,"402":402,"403":403,"404":404,"405":405,"406":406,"407":407,"408":408,"409":409,"410":410,"411":411,"412":412,"413":413,"414":414,"415":415,"416":416,"417":417,"418":418,"419":419,"420":420,"421":421,"422":422,"423":423,"424":424,"425":425,"426":426,"427":427,"428":428,"429":429,"430":430,"431":431,"432":432,"433":433,"434":434,"435":435,"436":436,"437":437,"438":438,"439":439,"440":440,"441":441,"442":442,"443":443,"444":444,"445":445,"446":446,"447":447,"448":448,"449":449,"450":450,"451":451,"452":452,"453":453,"454":454,"455":455,"456":456,"457":457,"458":458,"459":459,"460":460,"461":461,"462":462,"463":463,"464":464,"465":465,"466":466,"467":467,"468":468,"469":469,"470":470,"471":471,"472":472,"473":473,"474":474,"475":475,"476":476,"477":477,"478":478,"479":479,"480":480,"481":481,"482":482,"483":483,"484":484,"485":485,"486":486,"487":487,"488":488,"489":489,"490":490,"491":491,"492":492,"493":493,"494":494,"495":495,"496":496,"497":497,"498":498,"499":499,"500":500,"501":501,"502":502,"503":503,"504":504,"505":505,"506":506,"507":507,"508":508,"509":509,"510":510,"511":511,"512":512,"513":513,"514":514,"515":515,"516":516,"517":517,"518":518,"519":519,"520":520,"521":521,"522":522,"523":523,"524":524,"525":525,"526":526,"527":527,"528":528,"529":529,"530":530,"531":531,"532":532,"533":533,"534":534,"535":535,"536":536,"537":537,"538":538,"539":539,"540":540,"541":541,"542":542,"543":543,"544":544,"545":545,"546":546,"547":547,"548":548,"549":549,"550":550,"551":551,"552":552,"553":553,"554":554,"555":555,"556":556,"557":557,"558":558,"559":559,"560":560,"561":561,"562":562,"563":563,"564":564,"565":565,"566":566,"567":567,"568":568,"569":569,"570":570,"571":571,"572":572,"573":573,"574":574,"575":575,"576":576,"577":577,"578":578,"579":579,"580":580,"581":581,"582":582,"583":583,"584":584,"585":585,"586":586,"587":587,"588":588,"589":589,"590":590,"591":591,"592":592,"593":593,"594":594,"595":595,"596":596,"597":597,"598":598,"599":599,"600":600,"601":601,"602":602,"603":603,"604":604,"605":605,"606":606,"607":607,"608":608,"609":609,"610":610,"611":611,"612":612,"613":613,"614":614,"615":615,"616":616,"617":617,"618":618,"619":619,"620":620,"621":621,"622":622,"623":623,"624":624,"625":625,"626":626,"627":627,"628":628,"629":629,"630":630,"631":631,"632":632,"633":633,"634":634,"635":635,"636":636,"637":637,"638":638,"639":639,"640":640,"641":641,"642":642,"643":643,"644":644,"645":645,"646":646,"647":647,"648":648,"649":649,"650":650,"651":651,"652":652,"653":653,"654":654,"655":655,"656":656,"657":657,"658":658,"659":659,"660":660,"661":661,"662":662,"663":663,"664":664,"665":665,"666":666,"667":667,"668":668,"669":669,"670":670,"671":671,"672":672,"673":673,"674":674,"675":675,"676":676,"677":677,"678":678,"679":679,"680":680,"681":681,"682":682,"683":683,"684":684,"685":685,"686":686,"687":687,"688":688,"689":689,"690":690,"691":691,"692":692,"693":693,"694":694,"695":695,"696":696,"697":697,"698":698,"699":699,"700":700,"701":701,"702":702,"703":703,"704":704,"705":705,"706":706,"707":707,"708":708,"709":709,"710":710,"711":711,"712":712,"713":713,"714":714,"715":715,"716":716,"717":717,"718":718,"719":719,"720":720,"721":721,"722":722,"723":723,"724":724,"725":725,"726":726,"727":727,"728":728,"729":729,"730":730,"731":731,"732":732,"733":733,"734":734,"735":735,"736":736,"737":737,"738":738,"739":739,"740":740,"741":741,"742":742,"743":743,"744":744,"745":745,"746":746,"747":747,"748":748,"749":749,"750":750,"751":751,"752":752,"753":753,"754":754,"755":755,"756":756,"757":757,"758":758,"759":759,"760":760,"761":761,"762":762,"763":763,"764":764,"765":765,"766":766,"767":767,"768":768,"769":769,"770":770,"771":771,"772":772,"773":773,"774":774,"775":775,"776":776,"777":777,"778":778,"779":779,"780":780,"781":781,"782":782,"783":783,"784":784,"785":785,"786":786,"787":787,"788":788,"789":789,"790":790,"791":791,"792":792,"793":793,"794":794,"795":795,"796":796,"797":797,"798":798,"799":799,"800":800,"801":801,"802":802,"803":803,"804":804,"805":805,"806":806,"807":807,"808":808,"809":809,"810":810,"811":811,"812":812,"813":813,"814":814,"815":815,"816":816,"817":817,"818":818,"819":819,"820":820,"821":821,"822":822,"823":823,"824":824,"825":825,"826":826,"827":827,"828":828,"829":829,"830":830,"831":831,"832":832,"833":833,"834":834,"835":835,"836":836,"837":837,"838":838,"839":839,"840":840,"841":841,"842":842,"843":843,"844":844,"845":845,"846":846,"847":847,"848":848,"849":849,"850":850,"851":851,"852":852,"853":853,"854":854,"855":855,"856":856,"857":857,"858":858,"859":859,"860":860,"861":861,"862":862,"863":863,"864":864,"865":865,"866":866,"867":867,"868":868,"869":869,"870":870,"871":871,"872":872,"873":873,"874":874,"875":875,"876":876,"877":877,"878":878,"879":879,"880":880,"881":881,"882":882,"883":883,"884":884,"885":885,"886":886,"887":887,"888":888,"889":889,"890":890,"891":891,"892":892,"893":893,"894":894,"895":895,"896":896,"897":897,"898":898,"899":899,"900":900,"901":901,"902":902,"903":903,"904":904,"905":905,"906":906,"907":907,"908":908,"909":909,"910":910,"911":911,"912":912,"913":913,"914":914,"915":915,"916":916,"917":917,"918":918,"919":919,"920":920,"921":921,"922":922,"923":923,"924":924,"925":925,"926":926,"927":927,"928":928,"929":929,"930":930,"931":931,"932":932,"933":933,"934":934,"935":935,"936":936,"937":937,"938":938,"939":939,"940":940,"941":941,"942":942,"943":943,"944":944,"945":945,"946":946,"947":947,"948":948,"949":949,"950":950,"951":951,"952":952,"953":953,"954":954,"955":955,"956":956,"957":957,"958":958,"959":959,"960":960,"961":961,"962":962,"963":963,"964":964,"965":965,"966":966,"967":967,"968":968,"969":969,"970":970,"971":971,"972":972,"973":973,"974":974,"975":975,"976":976,"977":977,"978":978,"979":979,"980":980,"981":981,"982":982,"983":983,"984":984,"985":985,"986":986,"987":987,"988":988,"989":989,"990":990,"991":991,"992":992,"993":993,"994":994,"995":995,"996":996,"997":997,"998":998,"999":999,"1000":1000,"1001":1001,"1002":1002,"1003":1003,"1004":1004,"1005":1005,"1006":1006,"1007":1007,"1008":1008,"1009":1009,"1010":1010,"1011":1011,"1012":1012,"1013":1013,"1014":1014,"1015":1015,"1016":1016,"1017":1017,"1018":1018,"1019":1019,"1020":1020,"1021":1021,"1022":1022,"1023":1023,"1024":1024,"1025":1025,"1026":1026,"1027":1027,"1028":1028,"1029":1029,"1030":1030,"1031":1031,"1032":1032,"1033":1033,"1034":1034,"1035":1035,"1036":1036,"1037":1037,"1038":1038,"1039":1039,"1040":1040,"1041":1041,"1042":1042,"1043":1043,"1044":1044,"1045":1045,"1046":1046,"1047":1047,"1048":1048,"1049":1049,"1050":1050,"1051":1051,"1052":1052,"1053":1053,"1054":1054,"1055":1055,"1056":1056,"1057":1057,"1058":1058,"1059":1059,"1060":1060,"1061":1061,"1062":1062,"1063":1063,"1064":1064,"1065":1065,"1066":1066,"1067":1067,"1068":1068,"1069":1069,"1070":1070,"1071":1071,"1072":1072,"1073":1073,"1074":1074,"1075":1075,"1076":1076,"1077":1077,"1078":1078,"1079":1079,"1080":1080,"1081":1081,"1082":1082,"1083":1083,"1084":1084,"1085":1085,"1086":1086,"1087":1087,"1088":1088,"1089":1089,"1090":1090,"1091":1091,"1092":1092,"1093":1093,"1094":1094,"1095":1095,"1096":1096,"1097":1097,"1098":1098,"1099":1099,"1100":1100,"1101":1101,"1102":1102,"1103":1103,"1104":1104,"1105":1105,"1106":1106,"1107":1107,"1108":1108,"1109":1109,"1110":1110,"1111":1111,"1112":1112,"1113":1113,"1114":1114,"1115":1115,"1116":1116,"1117":1117,"1118":1118,"1119":1119,"1120":1120,"1121":1121,"1122":1122,"1123":1123,"1124":1124,"1125":1125,"1126":1126,"1127":1127,"1128":1128,"1129":1129,"1130":1130,"1131":1131,"1132":1132,"1133":1133,"1134":1134,"1135":1135,"1136":1136,"1137":1137,"1138":1138,"1139":1139,"1140":1140,"1141":1141,"1142":1142,"1143":1143,"1144":1144,"1145":1145,"1146":1146,"1147":1147,"1148":1148,"1149":1149,"1150":1150,"1151":1151,"1152":1152,"1153":1153,"1154":1154,"1155":1155,"1156":1156,"1157":1157,"1158":1158,"1159":1159,"1160":1160,"1161":1161,"1162":1162,"1163":1163,"1164":1164,"1165":1165,"1166":1166,"1167":1167,"1168":1168,"1169":1169,"1170":1170,"1171":1171,"1172":1172,"1173":1173,"1174":1174,"1175":1175,"1176":1176,"1177":1177,"1178":1178,"1179":1179,"1180":1180,"1181":1181,"1182":1182,"1183":1183,"1184":1184,"1185":1185,"1186":1186,"1187":1187,"1188":1188,"1189":1189,"1190":1190,"1191":1191,"1192":1192,"1193":1193,"1194":1194,"1195":1195,"1196":1196,"1197":1197,"1198":1198,"1199":1199,"1200":1200,"1201":1201,"1202":1202,"1203":1203,"1204":1204,"1205":1205,"1206":1206,"1207":1207,"1208":1208,"1209":1209,"1210":1210,"1211":1211,"1212":1212,"1213":1213,"1214":1214,"1215":1215,"1216":1216,"1217":1217,"1218":1218,"1219":1219,"1220":1220,"1221":1221,"1222":1222,"1223":1223,"1224":1224,"1225":1225,"1226":1226,"1227":1227,"1228":1228,"1229":1229,"1230":1230,"1231":1231,"1232":1232,"1233":1233,"1234":1234,"1235":1235,"1236":1236,"1237":1237,"1238":1238,"1239":1239,"1240":1240,"1241":1241,"1242":1242,"1243":1243,"1244":1244,"1245":1245,"1246":1246,"1247":1247,"1248":1248,"1249":1249,"1250":1250,"1251":1251,"1252":1252,"1253":1253,"1254":1254,"1255":1255,"1256":1256,"1257":1257,"1258":1258,"1259":1259,"1260":1260,"1261":1261,"1262":1262,"1263":1263,"1264":1264,"1265":1265,"1266":1266,"1267":1267,"1268":1268,"1269":1269,"1270":1270,"1271":1271,"1272":1272,"1273":1273,"1274":1274,"1275":1275,"1276":1276,"1277":1277,"1278":1278,"1279":1279,"1280":1280,"1281":1281,"1282":1282,"1283":1283,"1284":1284,"1285":1285,"1286":1286,"1287":1287,"1288":1288,"1289":1289,"1290":1290,"1291":1291,"1292":1292,"1293":1293,"1294":1294,"1295":1295,"1296":1296,"1297":1297,"1298":1298,"1299":1299,"1300":1300,"1301":1301,"1302":1302,"1303":1303,"1304":1304,"1305":1305,"1306":1306,"1307":1307,"1308":1308,"1309":1309,"1310":1310,"1311":1311,"1312":1312,"1313":1313,"1314":1314,"1315":1315,"1316":1316,"1317":1317,"1318":1318,"1319":1319,"1320":1320,"1321":1321,"1322":1322,"1323":1323,"1324":1324,"1325":1325,"1326":1326,"1327":1327,"1328":1328,"1329":1329,"1330":1330,"1331":1331,"1332":1332,"1333":1333,"1334":1334,"1335":1335,"1336":1336,"1337":1337,"1338":1338,"1339":1339,"1340":1340,"1341":1341,"1342":1342,"1343":1343,"1344":1344,"1345":1345,"1346":1346,"1347":1347,"1348":1348,"1349":1349,"1350":1350,"1351":1351,"1352":1352,"1353":1353,"1354":1354,"1355":1355,"1356":1356,"1357":1357,"1358":1358,"1359":1359,"1360":1360,"1361":1361,"1362":1362,"1363":1363,"1364":1364,"1365":1365,"1366":1366,"1367":1367,"1368":1368,"1369":1369,"1370":1370,"1371":1371,"1372":1372,"1373":1373,"1374":1374,"1375":1375,"1376":1376,"1377":1377,"1378":1378,"1379":1379,"1380":1380,"1381":1381,"1382":1382,"1383":1383,"1384":1384,"1385":1385,"1386":1386,"1387":1387,"1388":1388,"1389":1389,"1390":1390,"1391":1391,"1392":1392,"1393":1393,"1394":1394,"1395":1395,"1396":1396,"1397":1397,"1398":1398,"1399":1399,"1400":1400,"1401":1401,"1402":1402,"1403":1403,"1404":1404,"1405":1405,"1406":1406,"1407":1407,"1408":1408,"1409":1409,"1410":1410,"1411":1411,"1412":1412,"1413":1413,"1414":1414,"1415":1415,"1416":1416,"1417":1417,"1418":1418,"1419":1419,"1420":1420,"1421":1421,"1422":1422,"1423":1423,"1424":1424,"1425":1425,"1426":1426,"1427":1427,"1428":1428,"1429":1429,"1430":1430,"1431":1431,"1432":1432,"1433":1433,"1434":1434,"1435":1435,"1436":1436,"1437":1437,"1438":1438,"1439":1439,"1440":1440,"1441":1441,"1442":1442,"1443":1443,"1444":1444,"1445":1445,"1446":1446,"1447":1447,"1448":1448,"1449":1449,"1450":1450,"1451":1451,"1452":1452,"1453":1453,"1454":1454,"1455":1455,"1456":1456,"1457":1457,"1458":1458,"1459":1459,"1460":1460,"1461":1461,"1462":1462,"1463":1463,"1464":1464,"1465":1465,"1466":1466,"1467":1467,"1468":1468,"1469":1469,"1470":1470,"1471":1471,"1472":1472,"1473":1473,"1474":1474,"1475":1475,"1476":1476,"1477":1477,"1478":1478,"1479":1479,"1480":1480,"1481":1481,"1482":1482,"1483":1483,"1484":1484,"1485":1485,"1486":1486,"1487":1487,"1488":1488,"1489":1489,"1490":1490,"1491":1491,"1492":1492,"1493":1493,"1494":1494,"1495":1495,"1496":1496,"1497":1497,"1498":1498,"1499":1499,"1500":1500,"1501":1501,"1502":1502,"1503":1503,"1504":1504,"1505":1505,"1506":1506,"1507":1507,"1508":1508,"1509":1509,"1510":1510,"1511":1511,"1512":1512,"1513":1513,"1514":1514,"1515":1515,"1516":1516,"1517":1517,"1518":1518,"1519":1519,"1520":1520,"1521":1521,"1522":1522,"1523":1523,"1524":1524,"1525":1525,"1526":1526,"1527":1527,"1528":1528,"1529":1529,"1530":1530,"1531":1531,"1532":1532,"1533":1533,"1534":1534,"1535":1535,"1536":1536,"1537":1537,"1538":1538,"1539":1539,"1540":1540,"1541":1541,"1542":1542,"1543":1543,"1544":1544,"1545":1545,"1546":1546,"1547":1547,"1548":1548,"1549":1549,"1550":1550,"1551":1551,"1552":1552,"1553":1553,"1554":1554,"1555":1555,"1556":1556,"1557":1557,"1558":1558,"1559":1559,"1560":1560,"1561":1561,"1562":1562,"1563":1563,"1564":1564,"1565":1565,"1566":1566,"1567":1567,"1568":1568,"1569":1569,"1570":1570,"1571":1571,"1572":1572,"1573":1573,"1574":1574,"1575":1575,"1576":1576,"1577":1577,"1578":1578,"1579":1579,"1580":1580,"1581":1581,"1582":1582,"1583":1583,"1584":1584,"1585":1585,"1586":1586,"1587":1587,"1588":1588,"1589":1589,"1590":1590,"1591":1591,"1592":1592,"1593":1593,"1594":1594,"1595":1595,"1596":1596,"1597":1597,"1598":1598,"1599":1599,"1600":1600,"1601":1601,"1602":1602,"1603":1603,"1604":1604,"1605":1605,"1606":1606,"1607":1607,"1608":1608,"1609":1609,"1610":1610,"1611":1611,"1612":1612,"1613":1613,"1614":1614,"1615":1615,"1616":1616,"1617":1617,"1618":1618,"1619":1619,"1620":1620,"1621":1621,"1622":1622,"1623":1623,"1624":1624,"1625":1625,"1626":1626,"1627":1627,"1628":1628,"1629":1629,"1630":1630,"1631":1631,"1632":1632,"1633":1633,"1634":1634,"1635":1635,"1636":1636,"1637":1637,"1638":1638,"1639":1639,"1640":1640,"1641":1641,"1642":1642,"1643":1643,"1644":1644,"1645":1645,"1646":1646,"1647":1647,"1648":1648,"1649":1649,"1650":1650,"1651":1651,"1652":1652,"1653":1653,"1654":1654,"1655":1655,"1656":1656,"1657":1657,"1658":1658,"1659":1659,"1660":1660,"1661":1661,"1662":1662,"1663":1663,"1664":1664,"1665":1665,"1666":1666,"1667":1667,"1668":1668,"1669":1669,"1670":1670,"1671":1671,"1672":1672,"1673":1673,"1674":1674,"1675":1675,"1676":1676,"1677":1677,"1678":1678,"1679":1679,"1680":1680,"1681":1681,"1682":1682,"1683":1683,"1684":1684,"1685":1685,"1686":1686,"1687":1687,"1688":1688,"1689":1689,"1690":1690,"1691":1691,"1692":1692,"1693":1693,"1694":1694,"1695":1695,"1696":1696,"1697":1697,"1698":1698,"1699":1699,"1700":1700,"1701":1701,"1702":1702,"1703":1703,"1704":1704,"1705":1705,"1706":1706,"1707":1707,"1708":1708,"1709":1709,"1710":1710,"1711":1711,"1712":1712,"1713":1713,"1714":1714,"1715":1715,"1716":1716,"1717":1717,"1718":1718,"1719":1719,"1720":1720,"1721":1721,"1722":1722,"1723":1723,"1724":1724,"1725":1725,"1726":1726,"1727":1727,"1728":1728,"1729":1729,"1730":1730,"1731":1731,"1732":1732,"1733":1733,"1734":1734,"1735":1735,"1736":1736,"1737":1737,"1738":1738,"1739":1739,"1740":1740,"1741":1741,"1742":1742,"1743":1743,"1744":1744,"1745":1745,"1746":1746,"1747":1747,"1748":1748,"1749":1749,"1750":1750,"1751":1751,"1752":1752,"1753":1753,"1754":1754,"1755":1755,"1756":1756,"1757":1757,"1758":1758,"1759":1759,"1760":1760,"1761":1761,"1762":1762,"1763":1763,"1764":1764,"1765":1765,"1766":1766,"1767":1767,"1768":1768,"1769":1769,"1770":1770,"1771":1771,"1772":1772,"1773":1773,"1774":1774,"1775":1775,"1776":1776,"1777":1777,"1778":1778,"1779":1779,"1780":1780,"1781":1781,"1782":1782,"1783":1783,"1784":1784,"1785":1785,"1786":1786,"1787":1787,"1788":1788,"1789":1789,"1790":1790,"1791":1791,"1792":1792,"1793":1793,"1794":1794,"1795":1795,"1796":1796,"1797":1797,"1798":1798,"1799":1799,"1800":1800,"1801":1801,"1802":1802,"1803":1803,"1804":1804,"1805":1805,"1806":1806,"1807":1807,"1808":1808,"1809":1809,"1810":1810,"1811":1811,"1812":1812,"1813":1813,"1814":1814,"1815":1815,"1816":1816,"1817":1817,"1818":1818,"1819":1819,"1820":1820,"1821":1821,"1822":1822,"1823":1823,"1824":1824,"1825":1825,"1826":1826,"1827":1827,"1828":1828,"1829":1829,"1830":1830,"1831":1831,"1832":1832,"1833":1833,"1834":1834,"1835":1835,"1836":1836,"1837":1837,"1838":1838,"1839":1839,"1840":1840,"1841":1841,"1842":1842,"1843":1843,"1844":1844,"1845":1845,"1846":1846,"1847":1847,"1848":1848,"1849":1849,"1850":1850,"1851":1851,"1852":1852,"1853":1853,"1854":1854,"1855":1855,"1856":1856,"1857":1857,"1858":1858,"1859":1859,"1860":1860,"1861":1861,"1862":1862,"1863":1863,"1864":1864,"1865":1865,"1866":1866,"1867":1867,"1868":1868,"1869":1869,"1870":1870,"1871":1871,"1872":1872,"1873":1873,"1874":1874,"1875":1875,"1876":1876,"1877":1877,"1878":1878,"1879":1879,"1880":1880,"1881":1881,"1882":1882,"1883":1883,"1884":1884,"1885":1885,"1886":1886,"1887":1887,"1888":1888,"1889":1889,"1890":1890,"1891":1891,"1892":1892,"1893":1893,"1894":1894,"1895":1895,"1896":1896,"1897":1897,"1898":1898,"1899":1899,"1900":1900,"1901":1901,"1902":1902,"1903":1903,"1904":1904,"1905":1905,"1906":1906,"1907":1907,"1908":1908,"1909":1909,"1910":1910,"1911":1911,"1912":1912,"1913":1913,"1914":1914,"1915":1915,"1916":1916,"1917":1917,"1918":1918,"1919":1919,"1920":1920,"1921":1921,"1922":1922,"1923":1923,"1924":1924,"1925":1925,"1926":1926,"1927":1927,"1928":1928,"1929":1929,"1930":1930,"1931":1931,"1932":1932,"1933":1933,"1934":1934,"1935":1935,"1936":1936,"1937":1937,"1938":1938,"1939":1939,"1940":1940,"1941":1941,"1942":1942,"1943":1943,"1944":1944,"1945":1945,"1946":1946,"1947":1947,"1948":1948,"1949":1949,"1950":1950,"1951":1951,"1952":1952,"1953":1953,"1954":1954,"1955":1955,"1956":1956,"1957":1957,"1958":1958,"1959":1959,"1960":1960,"1961":1961,"1962":1962,"1963":1963,"1964":1964,"1965":1965,"1966":1966,"1967":1967,"1968":1968,"1969":1969,"1970":1970,"1971":1971,"1972":1972,"1973":1973,"1974":1974,"1975":1975,"1976":1976,"1977":1977,"1978":1978,"1979":1979,"1980":1980,"1981":1981,"1982":1982,"1983":1983,"1984":1984,"1985":1985,"1986":1986,"1987":1987,"1988":1988,"1989":1989,"1990":1990,"1991":1991,"1992":1992,"1993":1993,"1994":1994,"1995":1995,"1996":1996,"1997":1997,"1998":1998,"1999":1999,"2000":2000,"2001":2001,"2002":2002,"2003":2003,"2004":2004,"2005":2005,"2006":2006,"2007":2007,"2008":2008,"2009":2009,"2010":2010,"2011":2011,"2012":2012,"2013":2013,"2014":2014,"2015":2015,"2016":2016,"2017":2017,"2018":2018,"2019":2019,"2020":2020,"2021":2021,"2022":2022,"2023":2023,"2024":2024,"2025":2025,"2026":2026,"2027":2027,"2028":2028,"2029":2029,"2030":2030,"2031":2031,"2032":2032,"2033":2033,"2034":2034,"2035":2035,"2036":2036,"2037":2037,"2038":2038,"2039":2039,"2040":2040,"2041":2041,"2042":2042,"2043":2043,"2044":2044,"2045":2045,"2046":2046,"2047":2047,"2048":2048,"2049":2049,"2050":2050,"2051":2051,"2052":2052,"2053":2053,"2054":2054,"2055":2055,"2056":2056,"2057":2057,"2058":2058,"2059":2059,"2060":2060,"2061":2061,"2062":2062,"2063":2063,"2064":2064,"2065":2065,"2066":2066,"2067":2067,"2068":2068,"2069":2069,"2070":2070,"2071":2071,"2072":2072,"2073":2073,"2074":2074,"2075":2075,"2076":2076,"2077":2077,"2078":2078,"2079":2079,"2080":2080,"2081":2081,"2082":2082,"2083":2083,"2084":2084,"2085":2085,"2086":2086,"2087":2087,"2088":2088,"2089":2089,"2090":2090,"2091":2091,"2092":2092,"2093":2093,"2094":2094,"2095":2095,"2096":2096,"2097":2097,"2098":2098,"2099":2099,"2100":2100,"2101":2101,"2102":2102,"2103":2103,"2104":2104,"2105":2105,"2106":2106,"2107":2107,"2108":2108,"2109":2109,"2110":2110,"2111":2111,"2112":2112,"2113":2113,"2114":2114,"2115":2115,"2116":2116,"2117":2117,"2118":2118,"2119":2119,"2120":2120,"2121":2121,"2122":2122,"2123":2123,"2124":2124,"2125":2125,"2126":2126,"2127":2127,"2128":2128,"2129":2129,"2130":2130,"2131":2131,"2132":2132,"2133":2133,"2134":2134,"2135":2135,"2136":2136,"2137":2137,"2138":2138,"2139":2139,"2140":2140,"2141":2141,"2142":2142,"2143":2143,"2144":2144,"2145":2145,"2146":2146,"2147":2147,"2148":2148,"2149":2149,"2150":2150,"2151":2151,"2152":2152,"2153":2153,"2154":2154,"2155":2155,"2156":2156,"2157":2157,"2158":2158,"2159":2159,"2160":2160,"2161":2161,"2162":2162,"2163":2163,"2164":2164,"2165":2165,"2166":2166,"2167":2167,"2168":2168,"2169":2169,"2170":2170,"2171":2171,"2172":2172,"2173":2173,"2174":2174,"2175":2175,"2176":2176,"2177":2177,"2178":2178,"2179":2179,"2180":2180,"2181":2181,"2182":2182,"2183":2183,"2184":2184,"2185":2185,"2186":2186,"2187":2187,"2188":2188,"2189":2189,"2190":2190,"2191":2191,"2192":2192,"2193":2193,"2194":2194,"2195":2195,"2196":2196,"2197":2197,"2198":2198,"2199":2199,"2200":2200,"2201":2201,"2202":2202,"2203":2203,"2204":2204,"2205":2205,"2206":2206,"2207":2207,"2208":2208,"2209":2209,"2210":2210,"2211":2211,"2212":2212,"2213":2213,"2214":2214,"2215":2215,"2216":2216,"2217":2217,"2218":2218,"2219":2219,"2220":2220,"2221":2221,"2222":2222,"2223":2223,"2224":2224,"2225":2225,"2226":2226,"2227":2227,"2228":2228,"2229":2229,"2230":2230,"2231":2231,"2232":2232,"2233":2233,"2234":2234,"2235":2235,"2236":2236,"2237":2237,"2238":2238,"2239":2239,"2240":2240,"2241":2241,"2242":2242,"2243":2243,"2244":2244,"2245":2245},"fieldIds":{"t":0,"d":1,"i":2,"b":3},"fieldLength":{"0":[null,3,21,5392],"1":[4,3,null,152],"2":[null,7,null,7],"3":[1,7,2,61],"4":[1,7,4,27],"5":[1,7,12,95],"6":[1,7,3,80],"7":[2,7,2,61],"8":[null,7,null,7],"9":[1,7,null,1],"10":[1,7,8,91],"11":[1,7,12,67],"12":[1,7,1,57],"13":[2,7,1,39],"14":[null,7,null,7],"15":[1,7,11,237],"16":[1,7,null,41],"17":[1,7,9,181],"18":[1,7,7,139],"19":[2,7,7,265],"20":[5,7,16,230],"21":[5,7,8,171],"22":[5,7,1,157],"23":[5,7,null,125],"24":[5,7,18,649],"25":[5,7,2,138],"26":[5,7,14,319],"27":[5,7,12,486],"28":[null,10,null,10],"29":[1,10,3,28],"30":[1,10,null,87],"31":[1,10,20,356],"32":[1,10,null,120],"33":[2,10,null,98],"34":[5,10,3,48],"35":[1,10,1,36],"36":[null,8,null,8],"37":[1,8,6,54],"38":[1,8,5,119],"39":[1,8,19,438],"40":[1,8,1,78],"41":[2,8,4,185],"42":[5,8,5,142],"43":[5,8,12,111],"44":[null,5,null,5],"45":[1,5,2,63],"46":[1,5,6,88],"47":[1,5,13,173],"48":[1,5,1,52],"49":[2,5,null,53],"50":[null,9,null,9],"51":[1,9,2,46],"52":[1,9,3,61],"53":[1,9,16,217],"54":[1,9,5,118],"55":[2,9,4,73],"56":[null,13,null,13],"57":[1,13,3,149],"58":[1,13,4,123],"59":[1,13,14,339],"60":[1,13,1,133],"61":[2,13,8,124],"62":[1,13,10,229],"63":[5,13,8,124],"64":[1,13,null,29],"65":[null,6,null,6],"66":[1,6,3,96],"67":[1,6,6,98],"68":[1,6,10,216],"69":[1,6,null,76],"70":[2,6,10,122],"71":[5,6,9,275],"72":[5,6,19,282],"73":[5,6,12,196],"74":[5,6,4,172],"75":[null,8,null,8],"76":[1,8,5,109],"77":[1,8,5,96],"78":[1,8,12,168],"79":[1,8,1,110],"80":[2,8,17,219],"81":[8,8,14,289],"82":[5,8,7,95],"83":[null,9,null,9],"84":[1,9,null,28],"85":[1,9,3,50],"86":[1,9,1,94],"87":[1,9,null,41],"88":[2,9,null,40],"89":[null,14,null,14],"90":[1,14,null,36],"91":[9,14,15,226],"92":[14,14,18,216],"93":[22,14,15,274],"94":[18,14,7,213],"95":[20,14,24,351],"96":[20,14,18,234],"97":[1,14,6,173],"98":[1,14,15,258],"99":[19,14,19,245],"100":[17,14,16,300],"101":[1,14,4,109],"102":[2,14,7,123],"103":[5,14,7,154],"104":[5,14,8,157],"105":[1,14,null,38],"106":[null,9,null,9],"107":[1,9,9,109],"108":[1,9,null,77],"109":[1,9,17,968],"110":[1,9,8,231],"111":[2,9,14,279],"112":[5,9,9,67],"113":[1,9,2,73],"114":[null,8,null,8],"115":[1,8,9,202],"116":[1,8,null,60],"117":[1,8,16,297],"118":[1,8,null,61],"119":[2,8,1,56],"120":[5,8,7,127],"121":[5,8,18,296],"122":[5,8,13,493],"123":[5,8,5,118],"124":[1,8,7,94],"125":[5,8,5,212],"126":[5,8,22,323],"127":[5,8,8,102],"128":[5,8,11,207],"129":[null,8,null,8],"130":[1,8,11,234],"131":[1,8,1,84],"132":[1,8,14,189],"133":[1,8,1,83],"134":[2,8,2,77],"135":[5,8,25,855],"136":[8,8,16,421],"137":[15,8,13,299],"138":[15,8,19,265],"139":[16,8,17,366],"140":[12,8,7,240],"141":[14,8,19,215],"142":[14,8,21,411],"143":[1,8,1,72],"144":[null,10,null,10],"145":[1,10,21,244],"146":[1,10,10,107],"147":[1,10,23,312],"148":[1,10,3,116],"149":[2,10,9,134],"150":[3,10,18,377],"151":[2,10,5,102],"152":[5,10,20,134],"153":[1,10,null,39],"154":[null,9,null,9],"155":[1,9,10,126],"156":[1,9,1,93],"157":[1,9,15,422],"158":[1,9,1,99],"159":[2,9,10,228],"160":[5,9,17,391],"161":[5,9,15,188],"162":[1,9,2,98],"163":[null,11,null,11],"164":[1,11,10,192],"165":[1,11,3,121],"166":[1,11,12,415],"167":[1,11,null,87],"168":[2,11,4,188],"169":[1,11,1,48],"170":[10,11,12,262],"171":[5,11,7,146],"172":[null,11,null,11],"173":[1,11,2,161],"174":[1,11,null,124],"175":[1,11,15,426],"176":[1,11,null,101],"177":[2,11,1,208],"178":[5,11,14,362],"179":[5,11,13,251],"180":[5,11,13,216],"181":[5,11,4,103],"182":[1,11,5,95],"183":[null,8,null,8],"184":[1,8,11,141],"185":[1,8,3,133],"186":[1,8,22,471],"187":[1,8,1,94],"188":[2,8,7,145],"189":[5,8,15,217],"190":[5,8,12,87],"191":[1,8,1,36],"192":[null,9,null,9],"193":[1,9,6,201],"194":[1,9,null,101],"195":[1,9,14,375],"196":[1,9,3,134],"197":[2,9,3,115],"198":[5,9,2,108],"199":[1,9,2,81],"200":[5,9,17,305],"201":[5,9,16,435],"202":[5,9,14,303],"203":[5,9,13,149],"204":[null,9,null,9],"205":[1,9,null,2],"206":[1,9,3,96],"207":[1,9,16,170],"208":[1,9,1,120],"209":[2,9,2,116],"210":[1,9,null,41],"211":[null,11,null,11],"212":[1,11,4,110],"213":[1,11,null,106],"214":[1,11,15,280],"215":[1,11,1,139],"216":[2,11,15,198],"217":[5,11,11,210],"218":[5,11,4,121],"219":[5,11,13,338],"220":[5,11,15,191],"221":[1,11,null,36],"222":[null,13,null,13],"223":[1,13,2,95],"224":[1,13,null,103],"225":[1,13,16,375],"226":[1,13,3,111],"227":[2,13,9,136],"228":[5,13,1,130],"229":[1,13,10,116],"230":[5,13,12,372],"231":[5,13,10,144],"232":[null,12,null,12],"233":[1,12,5,124],"234":[1,12,10,185],"235":[1,12,12,544],"236":[1,12,1,177],"237":[2,12,9,287],"238":[5,12,3,71],"239":[1,12,2,60],"240":[null,15,1,15],"241":[1,15,14,229],"242":[1,15,2,124],"243":[1,15,18,673],"244":[1,15,3,140],"245":[2,15,14,399],"246":[5,15,15,198],"247":[1,15,15,121],"248":[5,15,13,203],"249":[5,15,5,138],"250":[5,15,7,120],"251":[5,15,8,155],"252":[5,15,12,186],"253":[5,15,15,150],"254":[5,15,16,254],"255":[5,15,16,459],"256":[5,15,15,305],"257":[5,15,12,252],"258":[5,15,19,326],"259":[5,15,17,392],"260":[5,15,12,196],"261":[5,15,16,273],"262":[null,8,null,8],"263":[1,8,null,52],"264":[1,8,3,120],"265":[1,8,23,923],"266":[1,8,4,141],"267":[2,8,5,147],"268":[5,8,11,138],"269":[1,8,5,69],"270":[null,6,null,6],"271":[1,6,null,10],"272":[1,6,7,95],"273":[1,6,18,272],"274":[1,6,1,81],"275":[2,6,4,110],"276":[5,6,8,58],"277":[1,6,1,33],"278":[null,9,null,9],"279":[1,9,7,160],"280":[1,9,2,153],"281":[1,9,16,156],"282":[1,9,1,132],"283":[2,9,7,208],"284":[5,9,11,184],"285":[5,9,10,136],"286":[2,9,7,125],"287":[1,9,3,59],"288":[null,13,null,13],"289":[1,13,null,5],"290":[1,13,4,146],"291":[1,13,13,212],"292":[1,13,2,73],"293":[2,13,4,131],"294":[1,13,null,36],"295":[5,13,14,296],"296":[5,13,7,139],"297":[null,10,null,10],"298":[1,10,7,95],"299":[1,10,1,80],"300":[1,10,19,177],"301":[1,10,3,111],"302":[2,10,3,124],"303":[5,10,16,212],"304":[1,10,4,57],"305":[5,10,13,253],"306":[5,10,7,106],"307":[null,12,null,12],"308":[1,12,null,58],"309":[1,12,null,120],"310":[1,12,20,310],"311":[1,12,1,122],"312":[2,12,2,176],"313":[1,12,1,78],"314":[5,12,12,192],"315":[null,11,null,11],"316":[1,11,1,31],"317":[1,11,2,140],"318":[1,11,17,617],"319":[1,11,7,140],"320":[2,11,7,186],"321":[1,11,4,71],"322":[5,11,8,96],"323":[5,11,7,71],"324":[5,11,16,226],"325":[5,11,13,207],"326":[5,11,13,188],"327":[null,10,null,10],"328":[1,10,9,122],"329":[1,10,null,115],"330":[1,10,13,366],"331":[1,10,11,141],"332":[2,10,7,152],"333":[5,10,15,220],"334":[1,10,5,56],"335":[5,10,17,231],"336":[5,10,2,94],"337":[5,10,13,149],"338":[null,8,null,8],"339":[1,8,null,33],"340":[1,8,2,178],"341":[1,8,18,530],"342":[1,8,6,235],"343":[2,8,13,286],"344":[5,8,12,165],"345":[5,8,8,139],"346":[1,8,6,96],"347":[null,13,null,13],"348":[1,13,null,109],"349":[1,13,2,161],"350":[1,13,16,589],"351":[1,13,5,170],"352":[2,13,15,230],"353":[5,13,15,306],"354":[5,13,16,93],"355":[1,13,3,70],"356":[null,13,null,13],"357":[1,13,null,29],"358":[1,13,null,180],"359":[1,13,18,498],"360":[1,13,3,274],"361":[2,13,4,318],"362":[1,13,null,71],"363":[5,13,2,96],"364":[5,13,7,89],"365":[5,13,8,317],"366":[5,13,1,81],"367":[null,14,null,14],"368":[1,14,1,76],"369":[1,14,5,159],"370":[1,14,22,329],"371":[1,14,6,158],"372":[2,14,5,138],"373":[5,14,16,325],"374":[11,14,13,148],"375":[5,14,8,170],"376":[1,14,null,72],"377":[null,12,null,12],"378":[1,12,3,51],"379":[1,12,null,108],"380":[1,12,13,180],"381":[1,12,1,87],"382":[2,12,1,100],"383":[5,12,9,166],"384":[5,12,7,195],"385":[null,8,null,8],"386":[1,8,10,190],"387":[1,8,6,220],"388":[1,8,15,255],"389":[1,8,1,80],"390":[2,8,12,407],"391":[5,8,9,253],"392":[5,8,11,180],"393":[5,8,12,117],"394":[null,6,null,6],"395":[1,6,17,305],"396":[1,6,1,139],"397":[1,6,26,552],"398":[1,6,3,163],"399":[2,6,2,171],"400":[5,6,16,223],"401":[5,6,18,344],"402":[6,6,16,299],"403":[5,6,2,226],"404":[5,6,11,175],"405":[2,6,3,115],"406":[1,6,4,89],"407":[7,6,19,286],"408":[9,6,14,172],"409":[5,6,18,255],"410":[null,9,null,9],"411":[1,9,3,66],"412":[1,9,12,134],"413":[1,9,15,464],"414":[1,9,2,96],"415":[2,9,12,234],"416":[5,9,null,53],"417":[null,12,null,12],"418":[1,12,23,308],"419":[1,12,6,133],"420":[1,12,14,258],"421":[1,12,null,56],"422":[2,12,4,184],"423":[5,12,16,309],"424":[5,12,12,168],"425":[5,12,10,175],"426":[5,12,19,293],"427":[5,12,3,151],"428":[5,12,16,278],"429":[5,12,12,155],"430":[5,12,9,91],"431":[null,10,null,10],"432":[1,10,1,51],"433":[1,10,2,106],"434":[1,10,16,299],"435":[1,10,6,192],"436":[5,10,15,150],"437":[null,8,null,8],"438":[1,8,null,87],"439":[1,8,null,83],"440":[1,8,12,210],"441":[1,8,2,118],"442":[5,8,6,115],"443":[5,8,14,222],"444":[5,8,5,178],"445":[null,6,null,6],"446":[1,6,8,141],"447":[1,6,5,122],"448":[1,6,15,423],"449":[1,6,5,137],"450":[2,6,12,158],"451":[11,6,11,155],"452":[12,6,19,138],"453":[5,6,11,117],"454":[12,6,16,212],"455":[1,6,7,79],"456":[null,10,null,10],"457":[1,10,3,72],"458":[1,10,6,148],"459":[1,10,19,570],"460":[1,10,7,143],"461":[2,10,7,259],"462":[1,10,1,86],"463":[5,10,12,285],"464":[5,10,14,282],"465":[10,10,11,287],"466":[5,10,13,191],"467":[null,11,null,11],"468":[1,11,14,183],"469":[1,11,12,143],"470":[1,11,14,281],"471":[1,11,14,120],"472":[2,11,7,160],"473":[1,11,5,80],"474":[5,11,5,134],"475":[5,11,5,116],"476":[5,11,13,147],"477":[5,11,11,196],"478":[5,11,7,98],"479":[null,9,null,9],"480":[1,9,null,47],"481":[1,9,12,117],"482":[1,9,14,128],"483":[1,9,10,153],"484":[2,9,3,116],"485":[1,9,null,37],"486":[5,9,14,211],"487":[5,9,14,193],"488":[5,9,14,185],"489":[5,9,14,214],"490":[5,9,17,406],"491":[5,9,17,354],"492":[5,9,17,368],"493":[5,9,19,367],"494":[5,9,13,218],"495":[5,9,14,195],"496":[null,14,null,14],"497":[1,14,12,306],"498":[1,14,2,120],"499":[1,14,17,432],"500":[1,14,1,171],"501":[2,14,6,213],"502":[5,14,9,152],"503":[1,14,3,54],"504":[null,10,null,10],"505":[1,10,2,51],"506":[1,10,1,148],"507":[1,10,14,451],"508":[1,10,3,151],"509":[2,10,14,185],"510":[1,10,3,52],"511":[5,10,17,251],"512":[5,10,3,106],"513":[5,10,8,193],"514":[5,10,14,150],"515":[null,11,null,11],"516":[1,11,1,89],"517":[1,11,3,196],"518":[1,11,14,281],"519":[1,11,2,94],"520":[2,11,2,138],"521":[1,11,null,47],"522":[5,11,14,229],"523":[5,11,14,238],"524":[5,11,12,222],"525":[null,12,null,12],"526":[1,12,7,166],"527":[1,12,11,180],"528":[1,12,19,320],"529":[1,12,1,164],"530":[2,12,6,315],"531":[5,12,2,133],"532":[1,12,null,71],"533":[null,9,null,9],"534":[1,9,14,231],"535":[1,9,3,154],"536":[1,9,16,712],"537":[1,9,6,236],"538":[2,9,10,332],"539":[15,9,12,402],"540":[5,9,14,250],"541":[1,9,2,120],"542":[null,10,null,10],"543":[1,10,12,278],"544":[1,10,3,180],"545":[1,10,18,643],"546":[1,10,9,179],"547":[2,10,10,245],"548":[1,10,2,106],"549":[5,10,16,770],"550":[5,10,12,298],"551":[5,10,13,329],"552":[5,10,15,212],"553":[null,10,null,10],"554":[1,10,9,111],"555":[1,10,4,172],"556":[1,10,14,618],"557":[1,10,4,196],"558":[2,10,16,265],"559":[5,10,14,118],"560":[1,10,1,85],"561":[null,11,null,11],"562":[1,11,5,92],"563":[1,11,10,170],"564":[1,11,19,435],"565":[1,11,1,146],"566":[2,11,12,238],"567":[5,11,5,104],"568":[1,11,null,68],"569":[null,9,null,9],"570":[1,9,null,61],"571":[1,9,null,138],"572":[1,9,16,610],"573":[1,9,2,193],"574":[2,9,4,224],"575":[5,9,2,127],"576":[13,9,15,156],"577":[14,9,11,179],"578":[5,9,8,157],"579":[1,9,3,87],"580":[null,10,null,10],"581":[1,10,null,8],"582":[1,10,1,124],"583":[1,10,13,612],"584":[1,10,8,219],"585":[2,10,13,419],"586":[5,10,7,135],"587":[1,10,2,90],"588":[null,11,null,11],"589":[1,11,4,71],"590":[1,11,1,173],"591":[1,11,18,480],"592":[1,11,4,286],"593":[2,11,6,250],"594":[5,11,4,95],"595":[1,11,null,67],"596":[null,12,null,12],"597":[1,12,6,84],"598":[1,12,2,160],"599":[1,12,19,629],"600":[1,12,null,189],"601":[2,12,16,271],"602":[5,12,4,200],"603":[5,12,10,134],"604":[5,12,19,125],"605":[1,12,null,85],"606":[null,13,null,13],"607":[1,13,11,296],"608":[1,13,null,206],"609":[1,13,21,771],"610":[1,13,null,213],"611":[2,13,6,300],"612":[5,13,7,206],"613":[5,13,4,75],"614":[1,13,null,76],"615":[null,15,null,15],"616":[1,15,8,123],"617":[1,15,3,174],"618":[1,15,17,525],"619":[1,15,4,206],"620":[2,15,6,206],"621":[5,15,8,102],"622":[1,15,null,74],"623":[null,9,null,9],"624":[1,9,6,205],"625":[1,9,2,224],"626":[1,9,22,648],"627":[1,9,null,273],"628":[2,9,1,240],"629":[5,9,10,212],"630":[1,9,null,46],"631":[null,9,7,178],"632":[1,9,17,214],"633":[1,9,22,617],"634":[1,9,10,157],"635":[2,9,9,263],"636":[5,9,18,145],"637":[null,9,null,9],"638":[1,9,13,199],"639":[1,9,2,100],"640":[1,9,16,701],"641":[1,9,2,176],"642":[2,9,16,326],"643":[5,9,null,121],"644":[5,9,13,172],"645":[1,9,2,52],"646":[null,9,null,9],"647":[1,9,10,77],"648":[1,9,6,133],"649":[1,9,19,490],"650":[1,9,9,245],"651":[2,9,13,226],"652":[5,9,10,83],"653":[1,9,2,49],"654":[null,8,null,8],"655":[1,8,12,101],"656":[1,8,3,159],"657":[1,8,18,640],"658":[1,8,15,227],"659":[2,8,14,208],"660":[5,8,16,183],"661":[1,8,2,56],"662":[null,10,null,10],"663":[1,10,2,37],"664":[1,10,2,184],"665":[1,10,20,491],"666":[1,10,null,165],"667":[2,10,6,187],"668":[5,10,11,190],"669":[5,10,4,152],"670":[1,10,1,63],"671":[null,6,null,6],"672":[1,6,7,125],"673":[1,6,1,149],"674":[1,6,14,687],"675":[1,6,12,204],"676":[2,6,14,328],"677":[5,6,12,156],"678":[1,6,null,52],"679":[null,11,null,11],"680":[1,11,3,59],"681":[1,11,9,172],"682":[1,11,18,368],"683":[1,11,9,209],"684":[2,11,14,246],"685":[5,11,3,98],"686":[1,11,5,57],"687":[null,11,null,11],"688":[1,11,2,124],"689":[1,11,null,203],"690":[1,11,21,674],"691":[1,11,3,362],"692":[2,11,14,400],"693":[5,11,9,98],"694":[1,11,2,87],"695":[null,14,null,14],"696":[1,14,12,222],"697":[1,14,13,174],"698":[1,14,17,687],"699":[1,14,5,198],"700":[2,14,13,248],"701":[1,14,7,97],"702":[5,14,7,249],"703":[5,14,15,171],"704":[null,15,null,15],"705":[1,15,2,40],"706":[1,15,2,157],"707":[1,15,17,553],"708":[1,15,5,196],"709":[2,15,1,252],"710":[5,15,9,85],"711":[1,15,3,110],"712":[null,11,null,11],"713":[1,11,5,108],"714":[1,11,4,185],"715":[1,11,17,424],"716":[1,11,6,230],"717":[2,11,4,205],"718":[5,11,5,149],"719":[12,11,16,155],"720":[15,11,15,177],"721":[1,11,5,91],"722":[null,10,null,10],"723":[1,10,8,99],"724":[1,10,4,223],"725":[1,10,14,559],"726":[1,10,6,214],"727":[2,10,12,269],"728":[5,10,7,104],"729":[1,10,6,96],"730":[null,12,1,12],"731":[1,12,13,146],"732":[1,12,12,174],"733":[1,12,21,598],"734":[1,12,4,178],"735":[2,12,8,224],"736":[5,12,15,146],"737":[1,12,2,115],"738":[null,11,null,11],"739":[1,11,1,73],"740":[1,11,15,280],"741":[1,11,18,633],"742":[1,11,2,215],"743":[2,11,12,476],"744":[5,11,13,172],"745":[1,11,3,98],"746":[null,12,null,12],"747":[1,12,11,116],"748":[1,12,5,153],"749":[1,12,13,603],"750":[1,12,2,167],"751":[2,12,13,343],"752":[5,12,4,70],"753":[1,12,null,60],"754":[null,9,null,9],"755":[1,9,2,84],"756":[1,9,5,204],"757":[1,9,14,525],"758":[1,9,null,237],"759":[2,9,8,302],"760":[5,9,5,136],"761":[5,9,7,158],"762":[1,9,null,74],"763":[null,10,null,10],"764":[1,10,7,175],"765":[1,10,2,216],"766":[1,10,24,497],"767":[1,10,9,224],"768":[2,10,15,268],"769":[5,10,8,116],"770":[1,10,2,62],"771":[null,16,null,16],"772":[1,16,null,5],"773":[1,16,null,150],"774":[1,16,16,346],"775":[1,16,6,140],"776":[2,16,14,237],"777":[5,16,4,79],"778":[1,16,null,88],"779":[null,12,null,12],"780":[1,12,13,107],"781":[1,12,9,127],"782":[1,12,12,474],"783":[1,12,4,138],"784":[2,12,9,228],"785":[2,12,6,97],"786":[1,12,1,61],"787":[null,13,null,13],"788":[1,13,null,40],"789":[1,13,6,219],"790":[1,13,18,649],"791":[1,13,2,185],"792":[2,13,9,336],"793":[5,13,9,256],"794":[5,13,15,206],"795":[1,13,null,76],"796":[null,13,null,13],"797":[1,13,3,125],"798":[1,13,14,298],"799":[1,13,12,421],"800":[1,13,5,188],"801":[2,13,4,185],"802":[1,13,null,102],"803":[5,13,13,241],"804":[5,13,13,210],"805":[5,13,11,179],"806":[5,13,4,104],"807":[null,13,null,13],"808":[1,13,null,81],"809":[1,13,11,284],"810":[1,13,10,279],"811":[1,13,1,143],"812":[2,13,1,164],"813":[17,13,13,219],"814":[5,13,7,113],"815":[1,13,null,119],"816":[null,12,null,12],"817":[1,12,null,60],"818":[1,12,5,216],"819":[1,12,17,600],"820":[1,12,2,215],"821":[2,12,10,307],"822":[5,12,11,91],"823":[1,12,7,117],"824":[null,11,null,11],"825":[1,11,6,271],"826":[1,11,9,354],"827":[1,11,17,1237],"828":[1,11,2,184],"829":[2,11,7,360],"830":[5,11,8,202],"831":[5,11,9,278],"832":[5,11,19,412],"833":[5,11,15,329],"834":[1,11,null,134],"835":[null,7,null,7],"836":[1,7,11,135],"837":[1,7,15,328],"838":[1,7,16,481],"839":[1,7,2,223],"840":[2,7,8,260],"841":[5,7,7,100],"842":[1,7,2,108],"843":[null,7,null,7],"844":[1,7,1,82],"845":[1,7,2,133],"846":[1,7,15,277],"847":[1,7,2,126],"848":[2,7,6,192],"849":[5,7,18,194],"850":[5,7,11,76],"851":[null,6,null,6],"852":[1,6,null,65],"853":[1,6,4,190],"854":[1,6,15,372],"855":[1,6,2,167],"856":[2,6,2,208],"857":[5,6,13,206],"858":[null,14,null,14],"859":[1,14,3,74],"860":[1,14,null,202],"861":[1,14,18,571],"862":[1,14,null,241],"863":[2,14,9,312],"864":[5,14,6,104],"865":[1,14,null,84],"866":[null,8,null,8],"867":[1,8,3,147],"868":[1,8,8,223],"869":[1,8,16,348],"870":[7,8,3,213],"871":[1,8,5,173],"872":[2,8,2,173],"873":[5,8,3,201],"874":[1,8,null,85],"875":[5,8,6,203],"876":[5,8,3,239],"877":[5,8,7,176],"878":[null,8,null,8],"879":[1,8,12,89],"880":[1,8,8,154],"881":[1,8,17,938],"882":[1,8,1,205],"883":[2,8,13,261],"884":[5,8,13,137],"885":[1,8,2,76],"886":[null,10,null,10],"887":[1,10,null,21],"888":[1,10,4,137],"889":[1,10,15,353],"890":[1,10,4,201],"891":[2,10,16,281],"892":[5,10,11,128],"893":[1,10,1,67],"894":[null,7,null,7],"895":[1,7,null,27],"896":[1,7,3,196],"897":[1,7,20,552],"898":[1,7,1,156],"899":[2,7,12,184],"900":[5,7,4,136],"901":[1,7,5,88],"902":[null,10,null,10],"903":[1,10,1,133],"904":[1,10,4,168],"905":[1,10,19,1139],"906":[1,10,8,406],"907":[2,10,12,450],"908":[5,10,7,124],"909":[5,10,13,173],"910":[1,10,7,189],"911":[null,10,null,10],"912":[1,10,7,115],"913":[1,10,11,254],"914":[1,10,21,551],"915":[1,10,4,177],"916":[2,10,17,263],"917":[5,10,13,144],"918":[1,10,1,113],"919":[null,16,null,16],"920":[1,16,4,156],"921":[1,16,5,194],"922":[1,16,13,394],"923":[1,16,12,198],"924":[2,16,12,238],"925":[1,16,8,74],"926":[11,16,13,705],"927":[5,16,7,143],"928":[null,13,null,13],"929":[1,13,5,75],"930":[1,13,9,170],"931":[1,13,14,282],"932":[1,13,3,175],"933":[2,13,6,162],"934":[5,13,2,49],"935":[1,13,1,76],"936":[null,10,2,10],"937":[1,10,null,58],"938":[1,10,12,146],"939":[1,10,17,225],"940":[1,10,null,134],"941":[2,10,4,147],"942":[1,10,6,74],"943":[null,6,null,6],"944":[1,6,2,59],"945":[1,6,2,166],"946":[1,6,16,445],"947":[1,6,null,156],"948":[2,6,4,209],"949":[5,6,9,66],"950":[1,6,1,91],"951":[null,10,null,10],"952":[1,10,3,57],"953":[1,10,7,189],"954":[1,10,17,490],"955":[1,10,6,180],"956":[2,10,5,197],"957":[1,10,6,83],"958":[5,10,2,100],"959":[5,10,9,125],"960":[5,10,17,201],"961":[null,14,null,14],"962":[1,14,2,63],"963":[1,14,15,293],"964":[1,14,15,501],"965":[1,14,8,184],"966":[2,14,16,267],"967":[5,14,8,102],"968":[1,14,8,95],"969":[null,11,null,11],"970":[1,11,null,21],"971":[1,11,5,240],"972":[1,11,13,420],"973":[1,11,4,236],"974":[2,11,8,241],"975":[5,11,9,136],"976":[1,11,1,97],"977":[null,11,null,11],"978":[1,11,null,9],"979":[1,11,16,215],"980":[1,11,18,553],"981":[1,11,11,188],"982":[2,11,14,297],"983":[5,11,16,135],"984":[1,11,11,88],"985":[null,8,null,8],"986":[1,8,4,88],"987":[1,8,12,184],"988":[1,8,13,626],"989":[1,8,2,169],"990":[2,8,3,215],"991":[5,8,16,147],"992":[1,8,2,97],"993":[null,8,null,8],"994":[1,8,1,94],"995":[1,8,10,211],"996":[1,8,13,606],"997":[1,8,5,159],"998":[2,8,7,270],"999":[5,8,11,157],"1000":[1,8,1,78],"1001":[null,10,null,10],"1002":[1,10,null,13],"1003":[1,10,4,163],"1004":[1,10,21,506],"1005":[1,10,1,150],"1006":[2,10,8,282],"1007":[5,10,null,96],"1008":[1,10,1,67],"1009":[null,9,null,9],"1010":[1,9,null,57],"1011":[1,9,null,188],"1012":[1,9,3,393],"1013":[1,9,null,113],"1014":[2,9,null,149],"1015":[null,6,null,6],"1016":[1,6,12,203],"1017":[1,6,5,309],"1018":[1,6,17,1026],"1019":[1,6,2,359],"1020":[2,6,5,408],"1021":[5,6,10,162],"1022":[1,6,2,104],"1023":[null,11,null,11],"1024":[1,11,1,75],"1025":[1,11,5,144],"1026":[1,11,18,457],"1027":[1,11,null,159],"1028":[2,11,5,208],"1029":[5,11,9,115],"1030":[1,11,3,80],"1031":[null,8,null,8],"1032":[1,8,1,40],"1033":[1,8,13,256],"1034":[1,8,19,556],"1035":[1,8,16,174],"1036":[2,8,17,198],"1037":[5,8,7,153],"1038":[1,8,4,61],"1039":[null,13,null,13],"1040":[1,13,1,66],"1041":[1,13,6,197],"1042":[1,13,14,491],"1043":[1,13,5,262],"1044":[2,13,10,257],"1045":[5,13,11,134],"1046":[1,13,null,51],"1047":[null,14,null,14],"1048":[1,14,5,95],"1049":[1,14,13,259],"1050":[1,14,17,658],"1051":[1,14,14,319],"1052":[2,14,16,329],"1053":[1,14,2,100],"1054":[5,14,10,180],"1055":[5,14,14,189],"1056":[null,13,null,13],"1057":[1,13,6,68],"1058":[1,13,14,249],"1059":[1,13,16,703],"1060":[1,13,7,185],"1061":[2,13,12,202],"1062":[5,13,13,110],"1063":[1,13,1,49],"1064":[null,9,null,9],"1065":[1,9,null,68],"1066":[1,9,19,306],"1067":[1,9,22,596],"1068":[1,9,8,205],"1069":[2,9,21,285],"1070":[5,9,5,108],"1071":[1,9,null,41],"1072":[null,13,null,13],"1073":[1,13,2,106],"1074":[1,13,22,411],"1075":[1,13,16,354],"1076":[1,13,3,153],"1077":[2,13,7,147],"1078":[5,13,11,122],"1079":[1,13,null,113],"1080":[null,13,null,13],"1081":[1,13,null,69],"1082":[1,13,8,255],"1083":[1,13,17,264],"1084":[1,13,1,141],"1085":[2,13,4,231],"1086":[5,13,3,104],"1087":[1,13,null,55],"1088":[null,10,null,10],"1089":[1,10,19,278],"1090":[1,10,10,309],"1091":[1,10,20,839],"1092":[1,10,5,288],"1093":[2,10,11,405],"1094":[1,10,12,182],"1095":[5,10,9,153],"1096":[1,10,3,92],"1097":[null,13,null,13],"1098":[1,13,null,8],"1099":[1,13,16,205],"1100":[1,13,15,439],"1101":[1,13,3,147],"1102":[2,13,4,162],"1103":[5,13,10,108],"1104":[1,13,null,69],"1105":[null,11,null,11],"1106":[1,11,null,5],"1107":[1,11,3,127],"1108":[1,11,16,292],"1109":[1,11,1,108],"1110":[2,11,2,83],"1111":[5,11,2,64],"1112":[1,11,null,59],"1113":[null,6,null,6],"1114":[1,6,1,63],"1115":[1,6,8,208],"1116":[1,6,20,772],"1117":[1,6,4,283],"1118":[2,6,3,236],"1119":[5,6,5,175],"1120":[1,6,null,65],"1121":[null,12,null,12],"1122":[1,12,1,68],"1123":[1,12,3,192],"1124":[1,12,18,595],"1125":[1,12,6,233],"1126":[2,12,1,241],"1127":[10,12,1,105],"1128":[9,12,9,129],"1129":[1,12,null,78],"1130":[null,10,null,10],"1131":[1,10,null,5],"1132":[1,10,12,202],"1133":[1,10,16,380],"1134":[1,10,1,191],"1135":[2,10,9,215],"1136":[5,10,5,73],"1137":[1,10,null,78],"1138":[null,7,null,7],"1139":[1,7,null,56],"1140":[1,7,12,223],"1141":[1,7,null,71],"1142":[1,7,1,148],"1143":[2,7,null,80],"1144":[2,7,null,117],"1145":[3,7,null,92],"1146":[5,7,1,36],"1147":[1,7,null,82],"1148":[null,8,null,8],"1149":[1,8,null,59],"1150":[1,8,8,268],"1151":[1,8,null,38],"1152":[1,8,null,115],"1153":[2,8,null,80],"1154":[2,8,2,133],"1155":[3,8,null,98],"1156":[5,8,3,75],"1157":[1,8,null,65],"1158":[null,15,null,15],"1159":[1,15,null,5],"1160":[1,15,6,158],"1161":[1,15,21,326],"1162":[1,15,5,165],"1163":[2,15,8,145],"1164":[1,15,null,40],"1165":[null,6,null,6],"1166":[1,6,null,5],"1167":[1,6,2,105],"1168":[1,6,14,453],"1169":[1,6,3,150],"1170":[2,6,5,156],"1171":[1,6,1,61],"1172":[null,15,null,15],"1173":[1,15,null,47],"1174":[1,15,7,160],"1175":[1,15,18,464],"1176":[1,15,7,185],"1177":[2,15,5,147],"1178":[2,15,6,164],"1179":[1,15,8,72],"1180":[1,15,2,54],"1181":[null,18,null,18],"1182":[1,18,1,84],"1183":[1,18,8,161],"1184":[1,18,15,556],"1185":[1,18,4,203],"1186":[2,18,4,191],"1187":[2,18,2,177],"1188":[1,18,9,103],"1189":[1,18,null,53],"1190":[null,6,4,139],"1191":[7,6,6,264],"1192":[1,6,14,780],"1193":[7,6,4,169],"1194":[3,6,4,121],"1195":[5,6,2,48],"1196":[null,5,7,171],"1197":[2,5,null,42],"1198":[6,5,null,145],"1199":[6,5,12,5067],"1200":[null,5,4,149],"1201":[9,5,15,205],"1202":[4,5,null,590],"1203":[2,5,20,3087],"1204":[null,4,2,50],"1205":[3,4,null,15],"1206":[6,4,null,108],"1207":[2,4,27,5872],"1208":[3,4,12,247],"1209":[8,4,null,128],"1210":[null,9,null,62],"1211":[4,9,14,216],"1212":[7,9,13,2598],"1213":[9,9,22,482],"1214":[7,9,22,331],"1215":[5,9,12,111],"1216":[7,9,2,269],"1217":[null,4,14,197],"1218":[8,4,3,130],"1219":[5,4,13,176],"1220":[5,4,14,279],"1221":[7,4,9,142],"1222":[6,4,16,187],"1223":[6,4,12,206],"1224":[7,4,12,123],"1225":[12,4,16,209],"1226":[8,4,6,124],"1227":[6,4,12,186],"1228":[10,4,13,294],"1229":[3,4,24,1938],"1230":[null,9,14,245],"1231":[7,9,13,484],"1232":[7,9,14,283],"1233":[7,9,14,363],"1234":[6,9,12,440],"1235":[9,9,14,270],"1236":[8,9,16,377],"1237":[4,9,24,3028],"1238":[null,8,12,234],"1239":[6,8,17,465],"1240":[7,8,12,288],"1241":[7,8,16,689],"1242":[6,8,16,452],"1243":[8,8,14,436],"1244":[6,8,13,484],"1245":[6,8,13,170],"1246":[9,8,12,221],"1247":[10,8,26,3371],"1248":[null,8,null,165],"1249":[5,8,13,360],"1250":[9,8,5,123],"1251":[8,8,12,226],"1252":[13,8,12,364],"1253":[7,8,12,296],"1254":[8,8,12,290],"1255":[6,8,10,222],"1256":[9,8,18,487],"1257":[10,8,12,319],"1258":[8,8,13,321],"1259":[7,8,25,3330],"1260":[null,7,12,312],"1261":[6,7,12,164],"1262":[11,7,14,394],"1263":[9,7,15,744],"1264":[11,7,18,401],"1265":[12,7,12,599],"1266":[7,7,13,215],"1267":[7,7,14,370],"1268":[3,7,18,212],"1269":[8,7,13,526],"1270":[8,7,24,3956],"1271":[null,2,24,1849],"1272":[null,4,12,195],"1273":[9,4,18,584],"1274":[5,4,13,470],"1275":[6,4,14,605],"1276":[8,4,12,520],"1277":[6,4,12,358],"1278":[7,4,15,733],"1279":[6,4,12,394],"1280":[6,4,13,391],"1281":[8,4,14,486],"1282":[5,4,12,306],"1283":[10,4,12,336],"1284":[8,4,12,405],"1285":[6,4,13,324],"1286":[4,4,22,7012],"1287":[null,3,15,335],"1288":[7,3,12,377],"1289":[4,3,13,514],"1290":[6,3,12,555],"1291":[8,3,12,231],"1292":[5,3,13,284],"1293":[10,3,14,398],"1294":[8,3,14,402],"1295":[9,3,14,237],"1296":[4,3,13,228],"1297":[4,3,12,591],"1298":[5,3,12,315],"1299":[6,3,13,144],"1300":[5,3,29,5991],"1301":[null,2,25,2164],"1302":[null,9,13,331],"1303":[10,9,14,209],"1304":[6,9,16,508],"1305":[13,9,13,224],"1306":[3,9,14,280],"1307":[8,9,17,471],"1308":[10,9,13,281],"1309":[4,9,25,3270],"1310":[null,9,23,1316],"1311":[null,8,28,5805],"1312":[null,5,19,1800],"1313":[null,5,12,336],"1314":[8,5,12,178],"1315":[5,5,15,432],"1316":[10,5,12,607],"1317":[9,5,14,497],"1318":[9,5,14,579],"1319":[2,5,12,124],"1320":[5,5,12,703],"1321":[4,5,12,120],"1322":[10,5,14,472],"1323":[7,5,25,5426],"1324":[null,10,35,7561],"1325":[null,5,11,225],"1326":[6,5,24,572],"1327":[11,5,14,255],"1328":[11,5,19,524],"1329":[5,5,16,173],"1330":[7,5,14,266],"1331":[9,5,16,209],"1332":[8,5,15,588],"1333":[7,5,23,645],"1334":[6,5,14,394],"1335":[9,5,13,229],"1336":[11,5,15,468],"1337":[9,5,21,555],"1338":[11,5,12,537],"1339":[6,5,32,5033],"1340":[null,7,15,251],"1341":[5,7,16,205],"1342":[6,7,13,636],"1343":[5,7,17,483],"1344":[6,7,17,470],"1345":[6,7,12,230],"1346":[8,7,12,238],"1347":[8,7,14,634],"1348":[6,7,15,382],"1349":[9,7,14,395],"1350":[6,7,22,4712],"1351":[null,6,5,205],"1352":[8,6,14,751],"1353":[8,6,19,634],"1354":[8,6,14,349],"1355":[7,6,15,556],"1356":[9,6,14,238],"1357":[10,6,14,457],"1358":[6,6,12,458],"1359":[7,6,26,7039],"1360":[null,5,9,142],"1361":[10,5,13,140],"1362":[11,5,15,484],"1363":[10,5,15,197],"1364":[12,5,12,301],"1365":[3,5,14,192],"1366":[8,5,18,628],"1367":[14,5,12,232],"1368":[9,5,12,293],"1369":[6,5,30,2856],"1370":[null,8,15,160],"1371":[7,8,12,295],"1372":[9,8,15,357],"1373":[8,8,14,440],"1374":[7,8,12,214],"1375":[12,8,13,445],"1376":[7,8,13,278],"1377":[10,8,13,251],"1378":[9,8,16,386],"1379":[10,8,18,524],"1380":[7,8,21,3438],"1381":[null,4,10,194],"1382":[10,4,12,286],"1383":[7,4,12,380],"1384":[10,4,17,402],"1385":[7,4,12,275],"1386":[9,4,14,151],"1387":[13,4,12,262],"1388":[7,4,12,241],"1389":[9,4,14,539],"1390":[7,4,12,326],"1391":[9,4,13,477],"1392":[9,4,12,314],"1393":[3,4,12,260],"1394":[5,4,12,180],"1395":[7,4,26,5766],"1396":[null,7,23,6280],"1397":[null,12,5,208],"1398":[6,12,13,393],"1399":[10,12,16,489],"1400":[10,12,15,353],"1401":[8,12,12,489],"1402":[10,12,28,3772],"1403":[null,10,12,258],"1404":[4,10,15,255],"1405":[12,10,12,453],"1406":[8,10,16,699],"1407":[8,10,13,243],"1408":[7,10,14,285],"1409":[7,10,12,408],"1410":[6,10,13,485],"1411":[5,10,15,326],"1412":[6,10,12,261],"1413":[8,10,15,383],"1414":[3,10,16,411],"1415":[5,10,29,4992],"1416":[null,9,26,2414],"1417":[null,12,22,4142],"1418":[null,4,14,255],"1419":[6,4,13,207],"1420":[11,4,12,202],"1421":[7,4,12,365],"1422":[10,4,16,358],"1423":[11,4,12,369],"1424":[8,4,13,296],"1425":[8,4,24,366],"1426":[6,4,15,181],"1427":[8,4,27,2039],"1428":[null,4,15,384],"1429":[10,4,14,555],"1430":[7,4,19,551],"1431":[8,4,13,1023],"1432":[6,4,12,505],"1433":[12,4,12,749],"1434":[3,4,16,231],"1435":[9,4,17,563],"1436":[5,4,31,9519],"1437":[4,4,21,564],"1438":[4,4,20,3654],"1439":[null,4,7,124],"1440":[5,4,2,234],"1441":[6,4,24,1310],"1442":[12,4,22,726],"1443":[8,4,21,1339],"1444":[8,4,16,538],"1445":[3,4,24,657],"1446":[4,4,20,519],"1447":[5,4,23,991],"1448":[3,4,3,102],"1449":[5,4,18,495],"1450":[6,4,12,350],"1451":[4,4,11,199],"1452":[null,4,3,175],"1453":[4,4,24,966],"1454":[4,4,21,776],"1455":[4,4,34,2297],"1456":[4,4,26,871],"1457":[5,4,15,329],"1458":[5,4,26,388],"1459":[9,4,26,680],"1460":[3,4,21,601],"1461":[6,4,13,403],"1462":[null,6,4,153],"1463":[5,6,13,279],"1464":[6,6,16,154],"1465":[7,6,22,774],"1466":[8,6,19,312],"1467":[7,6,31,3542],"1468":[3,6,17,100],"1469":[4,6,16,315],"1470":[4,6,24,283],"1471":[null,3,7,203],"1472":[7,3,28,485],"1473":[11,3,14,415],"1474":[6,3,16,889],"1475":[9,3,26,824],"1476":[8,3,20,806],"1477":[8,3,20,352],"1478":[10,3,14,410],"1479":[6,3,8,251],"1480":[8,3,12,297],"1481":[6,3,22,466],"1482":[6,3,6,263],"1483":[3,3,4,194],"1484":[4,3,13,226],"1485":[null,4,1,152],"1486":[7,4,20,647],"1487":[4,4,22,819],"1488":[5,4,19,1811],"1489":[6,4,22,1451],"1490":[5,4,21,1031],"1491":[3,4,18,435],"1492":[9,4,23,1397],"1493":[8,4,null,179],"1494":[2,4,6,128],"1495":[null,4,4,48],"1496":[3,4,22,4093],"1497":[9,4,17,224],"1498":[4,4,13,279],"1499":[4,4,4,207],"1500":[7,4,16,343],"1501":[6,4,2,24],"1502":[null,4,null,56],"1503":[9,4,14,143],"1504":[7,4,11,104],"1505":[8,4,null,60],"1506":[9,4,1,42],"1507":[10,4,6,109],"1508":[13,4,10,142],"1509":[12,4,13,113],"1510":[13,4,11,86],"1511":[4,4,null,40],"1512":[12,4,7,96],"1513":[9,4,9,119],"1514":[8,4,null,53],"1515":[6,4,2,59],"1516":[6,4,1,24],"1517":[9,4,4,141],"1518":[null,2,null,38],"1519":[2,2,null,48],"1520":[3,2,null,13],"1521":[4,2,null,69],"1522":[null,4,3,69],"1523":[3,4,4,165],"1524":[3,4,13,431],"1525":[3,4,17,410],"1526":[1,4,24,2766],"1527":[2,4,4,151],"1528":[3,4,null,53],"1529":[null,5,6,101],"1530":[5,5,null,182],"1531":[2,5,17,804],"1532":[2,5,11,400],"1533":[2,5,1,99],"1534":[3,5,18,991],"1535":[1,5,18,724],"1536":[null,3,null,154],"1537":[5,3,null,260],"1538":[3,3,3,107],"1539":[3,3,null,116],"1540":[3,3,3,109],"1541":[4,3,4,145],"1542":[4,3,null,104],"1543":[5,3,null,114],"1544":[3,3,null,165],"1545":[3,3,1,202],"1546":[4,3,null,131],"1547":[4,3,null,222],"1548":[2,3,null,176],"1549":[3,3,2,112],"1550":[3,3,2,107],"1551":[4,3,null,122],"1552":[5,3,3,106],"1553":[5,3,null,229],"1554":[3,3,null,204],"1555":[5,3,4,142],"1556":[5,3,2,143],"1557":[6,3,null,126],"1558":[4,3,2,139],"1559":[6,3,null,104],"1560":[5,3,2,123],"1561":[5,3,null,126],"1562":[5,3,null,111],"1563":[4,3,2,117],"1564":[3,3,null,90],"1565":[5,3,null,148],"1566":[5,3,null,166],"1567":[5,3,null,130],"1568":[4,3,null,143],"1569":[5,3,null,140],"1570":[5,3,3,187],"1571":[4,3,2,183],"1572":[4,3,null,282],"1573":[null,4,4,72],"1574":[3,4,2,167],"1575":[3,4,12,372],"1576":[3,4,17,419],"1577":[1,4,20,2968],"1578":[2,4,3,177],"1579":[3,4,null,53],"1580":[null,5,null,76],"1581":[5,5,null,182],"1582":[2,5,15,769],"1583":[2,5,14,375],"1584":[2,5,null,132],"1585":[3,5,17,685],"1586":[1,5,14,722],"1587":[null,4,3,62],"1588":[3,4,4,163],"1589":[3,4,15,329],"1590":[3,4,2,188],"1591":[1,4,20,2212],"1592":[2,4,null,144],"1593":[3,4,null,29],"1594":[null,5,10,106],"1595":[5,5,4,205],"1596":[2,5,18,874],"1597":[2,5,17,445],"1598":[2,5,3,129],"1599":[3,5,20,533],"1600":[1,5,16,920],"1601":[null,2,null,42],"1602":[4,2,3,123],"1603":[5,2,null,12],"1604":[4,2,null,24],"1605":[null,8,6,120],"1606":[1,8,6,60],"1607":[6,8,10,147],"1608":[11,8,null,93],"1609":[2,8,null,32],"1610":[3,8,null,37],"1611":[null,8,18,430],"1612":[4,8,7,81],"1613":[9,8,14,77],"1614":[1,8,7,70],"1615":[2,8,15,57],"1616":[1,8,2,36],"1617":[6,8,13,94],"1618":[2,8,1,63],"1619":[2,8,14,65],"1620":[null,2,null,35],"1621":[1,2,8,108],"1622":[3,2,null,17],"1623":[5,2,null,19],"1624":[2,2,null,23],"1625":[2,2,1,59],"1626":[6,2,12,233],"1627":[2,2,17,538],"1628":[null,6,null,12],"1629":[3,6,null,255],"1630":[3,6,16,937],"1631":[3,6,17,1411],"1632":[5,6,14,975],"1633":[4,6,13,147],"1634":[4,6,13,204],"1635":[4,6,15,436],"1636":[6,6,12,175],"1637":[2,6,11,323],"1638":[3,6,14,756],"1639":[4,6,16,1103],"1640":[4,6,14,866],"1641":[4,6,16,1192],"1642":[null,4,3,63],"1643":[9,4,13,160],"1644":[4,4,6,119],"1645":[4,4,7,106],"1646":[null,6,7,213],"1647":[4,6,6,114],"1648":[5,6,17,209],"1649":[8,6,20,220],"1650":[7,6,12,192],"1651":[12,6,14,683],"1652":[6,6,13,179],"1653":[9,6,21,693],"1654":[8,6,15,412],"1655":[6,6,14,102],"1656":[12,6,18,352],"1657":[2,6,14,120],"1658":[4,6,6,132],"1659":[null,4,null,106],"1660":[2,4,14,318],"1661":[4,4,12,334],"1662":[2,4,16,516],"1663":[4,4,12,316],"1664":[3,4,12,487],"1665":[3,4,15,358],"1666":[3,4,12,517],"1667":[4,4,13,465],"1668":[4,4,12,447],"1669":[6,4,12,459],"1670":[4,4,12,489],"1671":[4,4,13,560],"1672":[3,4,13,219],"1673":[5,4,8,406],"1674":[2,4,7,178],"1675":[3,4,11,319],"1676":[null,6,null,73],"1677":[6,6,17,373],"1678":[7,6,null,133],"1679":[9,6,null,88],"1680":[9,6,null,33],"1681":[null,10,4,141],"1682":[3,10,11,105],"1683":[7,10,6,167],"1684":[5,10,19,371],"1685":[7,10,19,647],"1686":[9,10,18,798],"1687":[7,10,21,203],"1688":[4,10,5,70],"1689":[9,10,13,232],"1690":[2,10,8,85],"1691":[4,10,null,51],"1692":[null,9,1,183],"1693":[3,9,12,137],"1694":[5,9,null,21],"1695":[4,9,5,110],"1696":[8,9,1,71],"1697":[5,9,17,160],"1698":[3,9,12,168],"1699":[5,9,13,162],"1700":[4,9,14,192],"1701":[4,9,15,314],"1702":[5,9,18,296],"1703":[2,9,7,109],"1704":[2,9,12,107],"1705":[4,9,1,128],"1706":[null,6,null,118],"1707":[9,6,13,312],"1708":[9,6,5,251],"1709":[9,6,1,121],"1710":[5,6,null,85],"1711":[null,8,3,52],"1712":[1,8,5,79],"1713":[2,8,null,48],"1714":[2,8,null,85],"1715":[2,8,7,50],"1716":[2,8,1,92],"1717":[null,8,3,107],"1718":[4,8,6,160],"1719":[4,8,14,269],"1720":[4,8,8,256],"1721":[4,8,4,157],"1722":[4,8,14,138],"1723":[7,8,7,129],"1724":[5,8,4,205],"1725":[4,8,null,66],"1726":[null,5,6,162],"1727":[2,5,18,731],"1728":[2,5,20,353],"1729":[4,5,13,349],"1730":[4,5,13,189],"1731":[5,5,10,192],"1732":[null,4,6,118],"1733":[2,4,7,66],"1734":[4,4,1,81],"1735":[5,4,10,140],"1736":[2,4,null,59],"1737":[1,4,1,80],"1738":[2,4,4,45],"1739":[null,8,4,126],"1740":[1,8,6,63],"1741":[6,8,14,175],"1742":[11,8,null,164],"1743":[2,8,null,32],"1744":[3,8,null,37],"1745":[null,4,null,10],"1746":[3,4,8,195],"1747":[4,4,15,272],"1748":[4,4,15,549],"1749":[4,4,16,654],"1750":[3,4,6,350],"1751":[4,4,16,168],"1752":[3,4,6,67],"1753":[7,4,10,98],"1754":[5,4,3,50],"1755":[6,4,12,235],"1756":[null,2,2,43],"1757":[1,2,8,99],"1758":[3,2,4,86],"1759":[5,2,5,116],"1760":[2,2,12,160],"1761":[2,2,18,263],"1762":[null,4,null,10],"1763":[3,4,null,148],"1764":[4,4,11,574],"1765":[3,4,21,1079],"1766":[5,4,6,78],"1767":[3,4,15,571],"1768":[3,4,null,236],"1769":[6,4,19,424],"1770":[3,4,18,210],"1771":[3,4,13,168],"1772":[4,4,7,129],"1773":[3,4,11,268],"1774":[4,4,12,140],"1775":[2,4,10,134],"1776":[6,4,13,340],"1777":[7,4,1,105],"1778":[null,5,null,45],"1779":[5,5,null,480],"1780":[null,17,null,124],"1781":[3,17,14,218],"1782":[7,17,6,134],"1783":[7,17,3,143],"1784":[10,17,null,232],"1785":[8,17,null,82],"1786":[5,17,2,80],"1787":[7,17,7,87],"1788":[null,7,null,128],"1789":[3,7,null,119],"1790":[11,7,15,354],"1791":[7,7,null,32],"1792":[3,7,3,163],"1793":[5,7,9,205],"1794":[null,14,null,134],"1795":[6,14,null,89],"1796":[6,14,null,200],"1797":[12,14,null,160],"1798":[5,14,null,56],"1799":[9,14,null,233],"1800":[7,14,null,185],"1801":[3,14,2,170],"1802":[5,14,null,219],"1803":[null,11,5,127],"1804":[8,11,3,137],"1805":[9,11,16,518],"1806":[3,11,12,208],"1807":[5,11,14,219],"1808":[null,13,4,128],"1809":[3,13,5,98],"1810":[10,13,16,599],"1811":[3,13,6,152],"1812":[5,13,15,204],"1813":[null,8,4,120],"1814":[3,8,3,121],"1815":[9,8,16,660],"1816":[3,8,1,161],"1817":[5,8,15,304],"1818":[null,12,null,111],"1819":[3,12,null,96],"1820":[6,12,4,105],"1821":[10,12,16,346],"1822":[4,12,6,134],"1823":[11,12,7,167],"1824":[7,12,7,153],"1825":[9,12,5,329],"1826":[3,12,3,227],"1827":[5,12,13,218],"1828":[null,10,10,155],"1829":[6,10,15,202],"1830":[7,10,12,169],"1831":[13,10,13,180],"1832":[8,10,1,142],"1833":[3,10,13,161],"1834":[5,10,16,202],"1835":[null,11,null,111],"1836":[3,11,null,71],"1837":[8,11,1,99],"1838":[9,11,8,127],"1839":[9,11,13,242],"1840":[6,11,14,335],"1841":[4,11,9,237],"1842":[10,11,12,264],"1843":[7,11,15,248],"1844":[7,11,13,202],"1845":[3,11,10,217],"1846":[5,11,8,163],"1847":[null,9,1,114],"1848":[3,9,3,112],"1849":[9,9,12,332],"1850":[6,9,3,44],"1851":[8,9,13,383],"1852":[3,9,6,209],"1853":[5,9,11,241],"1854":[null,11,3,176],"1855":[4,11,null,86],"1856":[7,11,13,248],"1857":[6,11,13,95],"1858":[7,11,3,154],"1859":[6,11,16,188],"1860":[4,11,3,147],"1861":[3,11,8,205],"1862":[5,11,13,221],"1863":[null,12,2,137],"1864":[3,12,2,128],"1865":[10,12,16,243],"1866":[5,12,3,118],"1867":[3,12,7,133],"1868":[5,12,9,219],"1869":[null,16,5,155],"1870":[8,16,null,111],"1871":[14,16,13,199],"1872":[8,16,8,116],"1873":[8,16,4,101],"1874":[10,16,13,247],"1875":[7,16,12,163],"1876":[3,16,9,251],"1877":[5,16,14,260],"1878":[null,8,2,98],"1879":[9,8,1,100],"1880":[6,8,11,84],"1881":[7,8,12,257],"1882":[7,8,12,159],"1883":[9,8,12,201],"1884":[7,8,6,134],"1885":[3,8,4,143],"1886":[5,8,9,215],"1887":[null,8,2,132],"1888":[3,8,2,128],"1889":[13,8,8,276],"1890":[5,8,null,92],"1891":[3,8,8,230],"1892":[5,8,7,218],"1893":[null,10,null,118],"1894":[3,10,null,121],"1895":[11,10,15,159],"1896":[8,10,7,191],"1897":[9,10,8,153],"1898":[3,10,10,326],"1899":[5,10,8,249],"1900":[null,10,1,134],"1901":[3,10,null,88],"1902":[12,10,14,355],"1903":[9,10,2,173],"1904":[3,10,3,162],"1905":[5,10,9,250],"1906":[null,9,2,132],"1907":[3,9,1,91],"1908":[5,9,12,288],"1909":[6,9,13,392],"1910":[13,9,13,238],"1911":[3,9,5,264],"1912":[5,9,9,285],"1913":[null,12,1,116],"1914":[8,12,null,82],"1915":[3,12,13,211],"1916":[4,12,16,346],"1917":[8,12,5,134],"1918":[9,12,7,197],"1919":[7,12,18,184],"1920":[7,12,14,336],"1921":[6,12,4,132],"1922":[9,12,20,506],"1923":[3,12,13,533],"1924":[5,12,13,279],"1925":[null,9,2,121],"1926":[3,9,4,99],"1927":[10,9,13,326],"1928":[6,9,4,106],"1929":[3,9,9,278],"1930":[5,9,14,233],"1931":[null,14,3,109],"1932":[6,14,12,164],"1933":[6,14,14,406],"1934":[11,14,5,209],"1935":[11,14,15,194],"1936":[9,14,12,172],"1937":[12,14,12,166],"1938":[11,14,13,123],"1939":[6,14,9,79],"1940":[3,14,5,270],"1941":[5,14,14,291],"1942":[null,11,null,188],"1943":[6,11,2,102],"1944":[8,11,12,293],"1945":[9,11,12,198],"1946":[7,11,15,286],"1947":[10,11,9,250],"1948":[7,11,7,375],"1949":[3,11,5,207],"1950":[5,11,7,368],"1951":[null,12,8,180],"1952":[6,12,4,186],"1953":[4,12,14,192],"1954":[7,12,6,161],"1955":[10,12,3,170],"1956":[10,12,5,151],"1957":[3,12,5,98],"1958":[3,12,2,188],"1959":[5,12,11,237],"1960":[null,7,9,164],"1961":[3,7,null,126],"1962":[14,7,18,264],"1963":[3,7,12,172],"1964":[3,7,7,207],"1965":[5,7,14,253],"1966":[null,10,3,160],"1967":[3,10,1,108],"1968":[10,10,15,230],"1969":[8,10,2,80],"1970":[9,10,3,241],"1971":[3,10,2,197],"1972":[5,10,11,286],"1973":[null,14,1,214],"1974":[3,14,1,137],"1975":[10,14,17,294],"1976":[7,14,11,175],"1977":[6,14,14,310],"1978":[3,14,15,264],"1979":[5,14,13,304],"1980":[null,13,1,164],"1981":[3,13,null,117],"1982":[12,13,17,493],"1983":[10,13,7,129],"1984":[3,13,4,231],"1985":[5,13,7,259],"1986":[null,11,7,151],"1987":[3,11,1,147],"1988":[11,11,15,411],"1989":[10,11,12,185],"1990":[3,11,8,171],"1991":[5,11,14,286],"1992":[null,11,3,137],"1993":[3,11,null,129],"1994":[8,11,15,420],"1995":[5,11,17,462],"1996":[3,11,9,229],"1997":[5,11,14,298],"1998":[null,10,null,201],"1999":[3,10,null,173],"2000":[16,10,17,775],"2001":[3,10,12,508],"2002":[5,10,10,403],"2003":[null,9,2,146],"2004":[1,9,11,156],"2005":[9,9,null,122],"2006":[6,9,14,244],"2007":[9,9,6,181],"2008":[9,9,16,200],"2009":[10,9,13,147],"2010":[10,9,17,389],"2011":[9,9,12,164],"2012":[8,9,13,272],"2013":[5,9,15,241],"2014":[5,9,14,236],"2015":[null,7,null,112],"2016":[5,7,7,135],"2017":[6,7,9,97],"2018":[6,7,15,103],"2019":[7,7,12,144],"2020":[11,7,8,92],"2021":[9,7,3,70],"2022":[12,7,12,121],"2023":[7,7,null,76],"2024":[8,7,17,434],"2025":[12,7,15,227],"2026":[6,7,5,77],"2027":[3,7,1,181],"2028":[5,7,15,267],"2029":[null,15,null,167],"2030":[10,15,15,256],"2031":[5,15,4,83],"2032":[11,15,17,294],"2033":[8,15,1,192],"2034":[8,15,14,305],"2035":[7,15,5,115],"2036":[9,15,9,199],"2037":[3,15,2,213],"2038":[5,15,11,274],"2039":[null,12,1,110],"2040":[6,12,1,120],"2041":[6,12,5,188],"2042":[4,12,17,224],"2043":[5,12,17,468],"2044":[11,12,17,350],"2045":[10,12,8,203],"2046":[11,12,13,277],"2047":[8,12,5,346],"2048":[3,12,5,269],"2049":[5,12,12,255],"2050":[null,14,2,142],"2051":[7,14,null,98],"2052":[6,14,5,109],"2053":[9,14,4,156],"2054":[6,14,null,72],"2055":[10,14,15,480],"2056":[9,14,14,268],"2057":[6,14,16,280],"2058":[9,14,2,127],"2059":[3,14,6,191],"2060":[5,14,10,266],"2061":[null,11,5,169],"2062":[10,11,null,130],"2063":[11,11,15,344],"2064":[9,11,13,206],"2065":[6,11,2,118],"2066":[9,11,10,260],"2067":[11,11,7,263],"2068":[3,11,5,144],"2069":[5,11,3,268],"2070":[null,17,4,209],"2071":[10,17,4,93],"2072":[6,17,12,195],"2073":[8,17,5,207],"2074":[10,17,13,198],"2075":[10,17,13,333],"2076":[8,17,12,173],"2077":[11,17,16,209],"2078":[9,17,10,169],"2079":[3,17,12,297],"2080":[5,17,14,253],"2081":[null,15,null,196],"2082":[3,15,1,137],"2083":[8,15,19,447],"2084":[5,15,1,46],"2085":[3,15,16,329],"2086":[5,15,17,299],"2087":[null,13,8,203],"2088":[1,13,7,88],"2089":[5,13,12,227],"2090":[12,13,12,124],"2091":[8,13,5,109],"2092":[8,13,13,90],"2093":[6,13,3,74],"2094":[4,13,12,107],"2095":[8,13,6,129],"2096":[10,13,14,204],"2097":[6,13,16,287],"2098":[5,13,11,297],"2099":[null,6,4,168],"2100":[6,6,13,199],"2101":[1,6,10,171],"2102":[10,6,1,44],"2103":[9,6,9,78],"2104":[10,6,11,176],"2105":[9,6,9,136],"2106":[10,6,1,121],"2107":[5,6,7,254],"2108":[5,6,10,183],"2109":[null,11,null,122],"2110":[3,11,12,185],"2111":[4,11,16,225],"2112":[5,11,5,163],"2113":[8,11,5,183],"2114":[3,11,2,183],"2115":[4,11,6,156],"2116":[null,13,9,194],"2117":[10,13,12,178],"2118":[8,13,12,239],"2119":[8,13,14,173],"2120":[10,13,9,120],"2121":[7,13,15,216],"2122":[3,13,10,199],"2123":[5,13,11,247],"2124":[null,10,1,153],"2125":[3,10,null,117],"2126":[13,10,14,530],"2127":[3,10,13,276],"2128":[5,10,12,281],"2129":[null,7,2,154],"2130":[3,7,1,138],"2131":[8,7,17,395],"2132":[3,7,10,220],"2133":[5,7,10,262],"2134":[null,10,4,163],"2135":[3,10,null,144],"2136":[10,10,19,301],"2137":[8,10,13,130],"2138":[3,10,15,316],"2139":[5,10,11,235],"2140":[null,11,1,150],"2141":[3,11,null,155],"2142":[9,11,19,417],"2143":[6,11,4,213],"2144":[11,11,1,165],"2145":[3,11,3,208],"2146":[5,11,14,282],"2147":[null,10,1,182],"2148":[3,10,3,153],"2149":[8,10,20,359],"2150":[6,10,15,465],"2151":[6,10,13,159],"2152":[3,10,10,175],"2153":[5,10,10,269],"2154":[null,9,1,201],"2155":[3,9,null,156],"2156":[9,9,34,699],"2157":[10,9,14,314],"2158":[8,9,15,500],"2159":[3,9,23,241],"2160":[5,9,14,386],"2161":[null,10,3,202],"2162":[3,10,null,164],"2163":[12,10,13,255],"2164":[7,10,13,299],"2165":[8,10,12,317],"2166":[12,10,12,424],"2167":[8,10,16,570],"2168":[3,10,9,397],"2169":[5,10,13,411],"2170":[null,13,null,163],"2171":[3,13,null,184],"2172":[12,13,9,199],"2173":[6,13,12,138],"2174":[7,13,5,248],"2175":[8,13,12,211],"2176":[7,13,14,140],"2177":[6,13,22,230],"2178":[11,13,17,151],"2179":[3,13,3,300],"2180":[5,13,15,385],"2181":[null,14,4,175],"2182":[3,14,null,180],"2183":[4,14,5,211],"2184":[9,14,9,129],"2185":[8,14,10,198],"2186":[6,14,15,236],"2187":[8,14,2,125],"2188":[5,14,14,235],"2189":[10,14,4,154],"2190":[10,14,11,221],"2191":[2,14,22,176],"2192":[3,14,6,315],"2193":[5,14,15,395],"2194":[null,10,null,192],"2195":[3,10,2,152],"2196":[11,10,13,193],"2197":[12,10,11,190],"2198":[8,10,11,238],"2199":[9,10,10,222],"2200":[9,10,6,168],"2201":[9,10,13,132],"2202":[3,10,11,292],"2203":[5,10,10,365],"2204":[null,7,null,124],"2205":[2,7,null,47],"2206":[2,7,null,117],"2207":[3,7,null,83],"2208":[7,7,null,213],"2209":[4,7,null,91],"2210":[6,7,2,144],"2211":[4,7,6,119],"2212":[null,6,null,67],"2213":[5,6,null,130],"2214":[3,6,null,129],"2215":[5,6,null,89],"2216":[3,6,null,74],"2217":[null,1,null,36],"2218":[2,1,null,80],"2219":[2,1,null,114],"2220":[2,1,null,435],"2221":[4,1,null,168],"2222":[1,1,null,13],"2223":[1,1,null,4],"2224":[1,1,null,56],"2225":[2,1,null,45],"2226":[null,3,null,79],"2227":[2,3,null,214],"2228":[3,3,null,116],"2229":[6,3,null,42],"2230":[6,3,null,369],"2231":[5,3,null,60],"2232":[3,3,null,1754],"2233":[3,3,null,57],"2234":[6,3,null,103],"2235":[6,3,null,12],"2236":[null,1,null,75],"2237":[6,1,null,12],"2238":[null,2,null,61],"2239":[3,2,null,205],"2240":[4,2,null,95],"2241":[2,2,null,32],"2242":[3,2,null,49],"2243":[4,2,null,42],"2244":[null,1,null,65],"2245":[4,1,null,56]},"averageFieldLength":[3.968844739888356,9.106411398040967,10.026038294943469,284.3953695458596],"storedFields":{"0":{"u":"/docs/adr/index.html","d":"Architecture Decision Records","k":"Architecture Decision Records","x":"Accepted ADRs explaining why the core cross-cutting patterns exist. Read these before changing a pattern they describe: they capture context and trade-offs that aren't obvious…"},"1":{"u":"/docs/adr/index.html#writing-a-new-adr","d":"Architecture Decision Records","k":"Architecture Decision Records","t":"Writing a new ADR","x":"Start from docs-src/adr/template.md in this repo (it is not rendered; the generator only picks up NNN-.md), which carries the structure every record uses: Status (Proposed /…"},"2":{"u":"/docs/adr/001-manual-dto-mapping.html","d":"ADR-001: Manual DTO Mapping over AutoMapper","k":"Architecture Decision Records"},"3":{"u":"/docs/adr/001-manual-dto-mapping.html#status","d":"ADR-001: Manual DTO Mapping over AutoMapper","k":"Architecture Decision Records","t":"Status","x":"Accepted. Mechanism clarified 2026-06-26: the per-entity mappers are Riok.Mapperly source-generated (compile-time), not hand-written line by line. The decision to avoid runtime…"},"4":{"u":"/docs/adr/001-manual-dto-mapping.html#context","d":"ADR-001: Manual DTO Mapping over AutoMapper","k":"Architecture Decision Records","t":"Context","x":"Domain entities must be mapped to DTOs for API responses. The two common approaches are: 1. Manual mapping classes (IEntityDTOMapper ) 2. Convention-based reflection mapping…"},"5":{"u":"/docs/adr/001-manual-dto-mapping.html#decision","d":"ADR-001: Manual DTO Mapping over AutoMapper","k":"Architecture Decision Records","t":"Decision","x":"Use explicit, per-entity DTO mappers (each a Riok.Mapperly [Mapper] partial class whose MapToDTO body is source-generated at compile time) registered via Scrutor assembly…"},"6":{"u":"/docs/adr/001-manual-dto-mapping.html#rationale","d":"ADR-001: Manual DTO Mapping over AutoMapper","k":"Architecture Decision Records","t":"Rationale","x":"- Compile-time safety: Mapping errors surface at build time, not runtime. Property renames break the build rather than silently mapping null. - Testability: Each mapper is a…"},"7":{"u":"/docs/adr/001-manual-dto-mapping.html#trade-offs","d":"ADR-001: Manual DTO Mapping over AutoMapper","k":"Architecture Decision Records","t":"Trade-offs","x":"- More files (35 DTO mappers across Store + ADC: 22 in ADC, 13 in Store, plus the parallel IEntityRequestMapper classes). The interface's default MapToDTOs implementation is…"},"8":{"u":"/docs/adr/002-navigation-populators.html","d":"ADR-002: NavigationPopulators for Cross-Container Loading","k":"Architecture Decision Records"},"9":{"u":"/docs/adr/002-navigation-populators.html#status","d":"ADR-002: NavigationPopulators for Cross-Container Loading","k":"Architecture Decision Records","t":"Status","x":"Accepted"},"10":{"u":"/docs/adr/002-navigation-populators.html#context","d":"ADR-002: NavigationPopulators for Cross-Container Loading","k":"Architecture Decision Records","t":"Context","x":"The application supports multiple database backends (SQL Server, Cosmos DB, SQLite). EF Core's .Include() works for SQL Server but fails for Cosmos DB cross-container…"},"11":{"u":"/docs/adr/002-navigation-populators.html#decision","d":"ADR-002: NavigationPopulators for Cross-Container Loading","k":"Architecture Decision Records","t":"Decision","x":"Each entity that has unsupported navigations gets a INavigationPopulator implementation. A DeclarativeNavigationPopulator base class (added in MMCA.Common) allows populators to…"},"12":{"u":"/docs/adr/002-navigation-populators.html#rationale","d":"ADR-002: NavigationPopulators for Cross-Container Loading","k":"Architecture Decision Records","t":"Rationale","x":"- Multi-DB support: The query pipeline automatically falls back from Include to NavigationPopulator when the data source reports navigations as unsupported. - Batch efficiency:…"},"13":{"u":"/docs/adr/002-navigation-populators.html#trade-offs","d":"ADR-002: NavigationPopulators for Cross-Container Loading","k":"Architecture Decision Records","t":"Trade-offs","x":"- Extra abstraction layer for SQL Server (where Include works fine). Mitigated: the populator is only called when the query pipeline's metadata says navigations are unsupported.…"},"14":{"u":"/docs/adr/003-outbox-dual-dispatch.html","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records"},"15":{"u":"/docs/adr/003-outbox-dual-dispatch.html#status","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Status","x":"Accepted. Revised 2026-07-19 (integration-event routing via IMessageBus, lease-based claims for safe scale-out, dead-letter visibility, post-commit dispatch; see Revision below).…"},"16":{"u":"/docs/adr/003-outbox-dual-dispatch.html#context","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Context","x":"Domain events must be reliably published after aggregate changes are persisted. Two failure modes exist: 1. In-process dispatch fails (e.g., handler throws): the event is lost if…"},"17":{"u":"/docs/adr/003-outbox-dual-dispatch.html#decision","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Decision","x":"Use a dual-dispatch strategy: 1. Outbox persistence: Domain events are serialized into OutboxMessage rows within the same database transaction as the aggregate changes. This…"},"18":{"u":"/docs/adr/003-outbox-dual-dispatch.html#rationale","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Rationale","x":"- Guaranteed delivery: The outbox table is written atomically with the aggregate changes. Even if the process crashes after persistence, the background processor catches up. -…"},"19":{"u":"/docs/adr/003-outbox-dual-dispatch.html#trade-offs","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Trade-offs","x":"- Domain event handlers must be idempotent (this is a good practice regardless). - The outbox table grows until processed entries are cleaned up: OutboxCleanupService purges rows…"},"20":{"u":"/docs/adr/003-outbox-dual-dispatch.html#revision-2026-07-19","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Revision (2026-07-19)","x":"Four changes from the 2026-07-19 full review: 1. Integration events route through the outbox to IMessageBus, never local dispatch. An IIntegrationEvent raised via AddDomainEvent…"},"21":{"u":"/docs/adr/003-outbox-dual-dispatch.html#revision-2026-07-24","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Revision (2026-07-24)","x":"Three capture-side corrections found in a code review. None change the dual-dispatch decision; they close gaps between what it promised and what the interceptor did. 1. Capture…"},"22":{"u":"/docs/adr/003-outbox-dual-dispatch.html#revision-2026-08-01","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Revision (2026-08-01)","x":"One retry-pacing correction. The dual-dispatch decision is unchanged; the Trade-offs above described a cadence the processor no longer has. 1. Retry backoff is explicit, and it…"},"23":{"u":"/docs/adr/003-outbox-dual-dispatch.html#revision-2026-08-07","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Revision (2026-08-07)","x":"One retry-pacing refinement. The decision and the curve are unchanged; the waits are no longer identical across a batch. 1. The retry backoff carries random jitter. The…"},"24":{"u":"/docs/adr/003-outbox-dual-dispatch.html#revision-2026-08-26","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Revision (2026-08-26)","x":"Five changes. The dual-dispatch decision is unchanged; what changes is what happens to a message that must not overtake its predecessor, to one that never made it out, and to the…"},"25":{"u":"/docs/adr/003-outbox-dual-dispatch.html#revision-2026-09-07","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The dispatch model is unchanged. What changed is the name the outbox's downstream resources take by default, from the 2026-09-07 security review (SEC-Common-53).…"},"26":{"u":"/docs/adr/003-outbox-dual-dispatch.html#revision-2026-09-11","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Revision (2026-09-11)","x":"The dispatch model is unchanged: same table, same claim lease, same dual dispatch, same retry and dead-letter policy. What changed is what a row carries, because the hop was…"},"27":{"u":"/docs/adr/003-outbox-dual-dispatch.html#revision-2026-10-01","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The dual-dispatch decision is unchanged. One rule is added to it (Decision item 4), and several statements made by earlier revisions no longer describe the code. The…"},"28":{"u":"/docs/adr/004-authentication-dual-fetch.html","d":"ADR-004: Cross-Service Token Validation via JWKS / OIDC Discovery","k":"Architecture Decision Records"},"29":{"u":"/docs/adr/004-authentication-dual-fetch.html#status","d":"ADR-004: Cross-Service Token Validation via JWKS / OIDC Discovery","k":"Architecture Decision Records","t":"Status","x":"Accepted. Updated 2026-09-03 (JwtSettings / JwtSigningAlgorithm cited at their real Auth/ paths, and the validator registration described with its current signature and…"},"30":{"u":"/docs/adr/004-authentication-dual-fetch.html#context","d":"ADR-004: Cross-Service Token Validation via JWKS / OIDC Discovery","k":"Architecture Decision Records","t":"Context","x":"When the modular monolith is extracted into per-module service hosts behind a gateway (ADR-008), every service must authenticate the same end-user JWT, but only one service…"},"31":{"u":"/docs/adr/004-authentication-dual-fetch.html#decision","d":"ADR-004: Cross-Service Token Validation via JWKS / OIDC Discovery","k":"Architecture Decision Records","t":"Decision","x":"Validate cross-service tokens with asymmetric (RS256) signatures plus JWKS / OIDC discovery, keeping the symmetric (HS256) shared-secret path as the in-process monolith option.…"},"32":{"u":"/docs/adr/004-authentication-dual-fetch.html#rationale","d":"ADR-004: Cross-Service Token Validation via JWKS / OIDC Discovery","k":"Architecture Decision Records","t":"Rationale","x":"- No shared signing key. Only Identity can mint tokens; every other service holds only the public key it fetched, so a compromised non-Identity service cannot forge tokens, and…"},"33":{"u":"/docs/adr/004-authentication-dual-fetch.html#trade-offs","d":"ADR-004: Cross-Service Token Validation via JWKS / OIDC Discovery","k":"Architecture Decision Records","t":"Trade-offs","x":"- More moving parts than a shared secret. RS256 needs key generation, distribution of the public half, a JWKS endpoint, and discovery wiring, versus one symmetric string. -…"},"34":{"u":"/docs/adr/004-authentication-dual-fetch.html#revision-2026-10-01","d":"ADR-004: Cross-Service Token Validation via JWKS / OIDC Discovery","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Anchor-only refresh; no decision or rationale changed. The AddForwardedJwtBearer registration lives in the partial file…"},"35":{"u":"/docs/adr/004-authentication-dual-fetch.html#related","d":"ADR-004: Cross-Service Token Validation via JWKS / OIDC Discovery","k":"Architecture Decision Records","t":"Related","x":"ADR-007 (gRPC calls forward the validated JWT downstream via JwtForwardingClientInterceptor), ADR-008 (the extraction that split issuer and validator into separate processes),…"},"36":{"u":"/docs/adr/005-soft-delete-vs-erasure.html","d":"ADR-005: Soft-Delete vs. Right-to-Erasure","k":"Architecture Decision Records"},"37":{"u":"/docs/adr/005-soft-delete-vs-erasure.html#status","d":"ADR-005: Soft-Delete vs. Right-to-Erasure","k":"Architecture Decision Records","t":"Status","x":"Accepted. Updated 2026-06-27 (documented the [Pii] → IAnonymizable build-time guard and PiiRedactor). Updated 2026-08-26 (DeletedOn/DeletedBy stamps, the DeleteChildren cascade…"},"38":{"u":"/docs/adr/005-soft-delete-vs-erasure.html#context","d":"ADR-005: Soft-Delete vs. Right-to-Erasure","k":"Architecture Decision Records","t":"Context","x":"The framework's default deletion model is soft-delete: AuditableBaseEntity.Delete() sets IsDeleted = true and EF Core global query filters exclude the row from normal queries.…"},"39":{"u":"/docs/adr/005-soft-delete-vs-erasure.html#decision","d":"ADR-005: Soft-Delete vs. Right-to-Erasure","k":"Architecture Decision Records","t":"Decision","x":"Separate the two concerns and provide an extension point for each, rather than overloading soft-delete: 1. Soft-delete stays the default for lifecycle/state management (hide +…"},"40":{"u":"/docs/adr/005-soft-delete-vs-erasure.html#rationale","d":"ADR-005: Soft-Delete vs. Right-to-Erasure","k":"Architecture Decision Records","t":"Rationale","x":"- Right tool per concern: soft-delete answers \"is this record active?\"; erasure answers \"has this person's data been removed?\". Conflating them (e.g. hard-deleting inside…"},"41":{"u":"/docs/adr/005-soft-delete-vs-erasure.html#trade-offs","d":"ADR-005: Soft-Delete vs. Right-to-Erasure","k":"Architecture Decision Records","t":"Trade-offs","x":"- Erasure is opt-in per entity, but the opt-in is guarded: an aggregate exposing a [Pii]-marked property that does not implement IAnonymizable fails the architecture fitness…"},"42":{"u":"/docs/adr/005-soft-delete-vs-erasure.html#revision-2026-09-07","d":"ADR-005: Soft-Delete vs. Right-to-Erasure","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Anonymization keeps the row and its foreign keys: Anonymize() overwrites the personal fields and leaves the entity's relationships intact, because the aggregate still has to hang…"},"43":{"u":"/docs/adr/005-soft-delete-vs-erasure.html#revision-2026-10-01","d":"ADR-005: Soft-Delete vs. Right-to-Erasure","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision changed. One description in Decision 1 was corrected: it said composing Result.Combine(DeleteChildren (lines), base.Delete()) aborts the cascade \"before the root is…"},"44":{"u":"/docs/adr/006-database-per-service.html","d":"ADR-006: Database per Service","k":"Architecture Decision Records"},"45":{"u":"/docs/adr/006-database-per-service.html#status","d":"ADR-006: Database per Service","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-07). Supersedes the earlier \"deliberately one shared database\" stance. Clarified 2026-06-27: the single context class became one sealed context class per engine…"},"46":{"u":"/docs/adr/006-database-per-service.html#context","d":"ADR-006: Database per Service","k":"Architecture Decision Records","t":"Context","x":"When the modules were first extracted into independently-deployable services, all services in an app still pointed at a single shared SQL database with a single OutboxMessages…"},"47":{"u":"/docs/adr/006-database-per-service.html#decision","d":"ADR-006: Database per Service","k":"Architecture Decision Records","t":"Decision","x":"Adopt database-per-service: each service owns its own physical database with its own OutboxMessages table. - One sealed concrete context class per engine, one instance per…"},"48":{"u":"/docs/adr/006-database-per-service.html#rationale","d":"ADR-006: Database per Service","k":"Architecture Decision Records","t":"Rationale","x":"- Removes the shared-outbox race (the sharpest cost of the shared DB) without an OriginService filter: physical isolation is simpler and stronger than a logical filter. - Real…"},"49":{"u":"/docs/adr/006-database-per-service.html#trade-offs","d":"ADR-006: Database per Service","k":"Architecture Decision Records","t":"Trade-offs","x":"- No cross-database FKs or transactions. Relationships that span services degrade to scalar IDs; consistency across services is eventual (outbox + broker), not transactional. -…"},"50":{"u":"/docs/adr/007-grpc-extraction.html","d":"ADR-007: Synchronous Cross-Service Calls via gRPC Contracts","k":"Architecture Decision Records"},"51":{"u":"/docs/adr/007-grpc-extraction.html#status","d":"ADR-007: Synchronous Cross-Service Calls via gRPC Contracts","k":"Architecture Decision Records","t":"Status","x":"Accepted. Revised 2026-08-23 (the [ServiceContract] marker now has a dedicated fitness rule behind it, ServiceContractPurityTestsBase, subclassed in all four repos; it is a…"},"52":{"u":"/docs/adr/007-grpc-extraction.html#context","d":"ADR-007: Synchronous Cross-Service Calls via gRPC Contracts","k":"Architecture Decision Records","t":"Context","x":"Once modules became separate service processes, the in-process interface calls between them (e.g. Conference → Engagement's IBookmarkCountService, Engagement → Conference's…"},"53":{"u":"/docs/adr/007-grpc-extraction.html#decision","d":"ADR-007: Synchronous Cross-Service Calls via gRPC Contracts","k":"Architecture Decision Records","t":"Decision","x":"Use gRPC, exposed through MMCA.Common.Grpc, with a contract-package convention: - .Contracts projects hold the .proto definitions plus a gRPC adapter that implements the same…"},"54":{"u":"/docs/adr/007-grpc-extraction.html#rationale","d":"ADR-007: Synchronous Cross-Service Calls via gRPC Contracts","k":"Architecture Decision Records","t":"Rationale","x":"- No business-logic rewrite: the gRPC adapter implements the interface modules already depend on; swapping in-process for cross-process is a registration change. - Transport…"},"55":{"u":"/docs/adr/007-grpc-extraction.html#trade-offs","d":"ADR-007: Synchronous Cross-Service Calls via gRPC Contracts","k":"Architecture Decision Records","t":"Trade-offs","x":"- Bidirectional pairs need care. Conference ↔ Engagement is a mutual gRPC pair; the AppHost deliberately omits a reciprocal WaitFor to avoid a startup deadlock: transient \"peer…"},"56":{"u":"/docs/adr/008-service-extraction-topology.html","d":"ADR-008: Extraction of the Modular Monolith into Per-Module Services + Gateway","k":"Architecture Decision Records"},"57":{"u":"/docs/adr/008-service-extraction-topology.html#status","d":"ADR-008: Extraction of the Modular Monolith into Per-Module Services + Gateway","k":"Architecture Decision Records","t":"Status","x":"Accepted. Amended by ADR-089 (2026-08-18): the Gateway keeps the route-to-service map this record gave it, but stops expressing it as MapForwarder calls in code. YARP…"},"58":{"u":"/docs/adr/008-service-extraction-topology.html#context","d":"ADR-008: Extraction of the Modular Monolith into Per-Module Services + Gateway","k":"Architecture Decision Records","t":"Context","x":"ADC began as a modular monolith: one MMCA.ADC.WebAPI host loaded every module (Identity, Conference, Engagement, Notification) in-process via the ModuleLoader, sharing one…"},"59":{"u":"/docs/adr/008-service-extraction-topology.html#decision","d":"ADR-008: Extraction of the Modular Monolith into Per-Module Services + Gateway","k":"Architecture Decision Records","t":"Decision","x":"Extract one service host per module: MMCA.ADC.{Identity,Conference,Engagement,Notification}.Service and front them with a single YARP reverse-proxy Gateway (MMCA.ADC.Gateway,…"},"60":{"u":"/docs/adr/008-service-extraction-topology.html#rationale","d":"ADR-008: Extraction of the Modular Monolith into Per-Module Services + Gateway","k":"Architecture Decision Records","t":"Rationale","x":"- No business-logic rewrite. Because a service is just the monolith with one module enabled, extraction was a hosting/wiring change, not a domain change, and the module-isolation…"},"61":{"u":"/docs/adr/008-service-extraction-topology.html#trade-offs","d":"ADR-008: Extraction of the Modular Monolith into Per-Module Services + Gateway","k":"Architecture Decision Records","t":"Trade-offs","x":"- Operational complexity. Four deployables plus a Gateway, service discovery, a broker, and per-service databases, versus one process. Mitigated locally by Aspire orchestration…"},"62":{"u":"/docs/adr/008-service-extraction-topology.html#applicability","d":"ADR-008: Extraction of the Modular Monolith into Per-Module Services + Gateway","k":"Architecture Decision Records","t":"Applicability","x":"This ADR is framed around ADC (the first repo extracted), but the same topology is now the framework's standard extraction shape, not an ADC-only choice. MMCA.Store followed it:…"},"63":{"u":"/docs/adr/008-service-extraction-topology.html#revision-2026-10-01","d":"ADR-008: Extraction of the Modular Monolith into Per-Module Services + Gateway","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Three statements are corrected against the code; the topology itself is unchanged. The extracted service hosts do not rely on Disabled stubs for their peers: each passes only its…"},"64":{"u":"/docs/adr/008-service-extraction-topology.html#related","d":"ADR-008: Extraction of the Modular Monolith into Per-Module Services + Gateway","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (outbox dual dispatch), ADR-004 (cross-service token validation via JWKS), ADR-006 (database per service), and ADR-007 (gRPC cross-service calls) are the facet decisions…"},"65":{"u":"/docs/adr/009-resilience-and-recovery-objectives.html","d":"ADR-009: Resilience Policies & Recovery Objectives","k":"Architecture Decision Records"},"66":{"u":"/docs/adr/009-resilience-and-recovery-objectives.html#status","d":"ADR-009: Resilience Policies & Recovery Objectives","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-14). Amended by ADR-087 (2026-08-18): the resilience objective extends past outbound HTTP and gRPC clients for the first time, to the outbox's broker publish,…"},"67":{"u":"/docs/adr/009-resilience-and-recovery-objectives.html#context","d":"ADR-009: Resilience Policies & Recovery Objectives","k":"Architecture Decision Records","t":"Context","x":"The framework already supplies the mechanisms for surviving partial failure: a standard Polly resilience handler (timeout / retry / circuit breaker), the outbox for at-least-once…"},"68":{"u":"/docs/adr/009-resilience-and-recovery-objectives.html#decision","d":"ADR-009: Resilience Policies & Recovery Objectives","k":"Architecture Decision Records","t":"Decision","x":"1. Resilience is a framework invariant, not a per-call choice. Every outbound HttpClient and gRPC client registered through the framework's extension methods (AddTypedGrpcClient,…"},"69":{"u":"/docs/adr/009-resilience-and-recovery-objectives.html#rationale","d":"ADR-009: Resilience Policies & Recovery Objectives","k":"Architecture Decision Records","t":"Rationale","x":"- Invariant over discipline. A fitness function turns \"remember to add resilience\" into a build gate: the same approach the framework already uses for the layer rules and the…"},"70":{"u":"/docs/adr/009-resilience-and-recovery-objectives.html#trade-offs","d":"ADR-009: Resilience Policies & Recovery Objectives","k":"Architecture Decision Records","t":"Trade-offs","x":"- The named gate (ResilienceHandlerTests, MMCA.Common.Grpc.Tests) asserts every option the gRPC client path (AddTypedGrpcClient) configures…"},"71":{"u":"/docs/adr/009-resilience-and-recovery-objectives.html#revision-2026-08-18","d":"ADR-009: Resilience Policies & Recovery Objectives","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"This record's first Decision point scoped resilience to \"every outbound HttpClient and gRPC client registered through the framework's extension methods\". That scope was accurate…"},"72":{"u":"/docs/adr/009-resilience-and-recovery-objectives.html#revision-2026-09-11","d":"ADR-009: Resilience Policies & Recovery Objectives","k":"Architecture Decision Records","t":"Revision (2026-09-11)","x":"Two amendments, both about parts of this posture the record could not previously see or reach. (a) The standard handler is now observable. Decision point 1 makes the resilience…"},"73":{"u":"/docs/adr/009-resilience-and-recovery-objectives.html#revision-2026-09-19","d":"ADR-009: Resilience Policies & Recovery Objectives","k":"Architecture Decision Records","t":"Revision (2026-09-19)","x":"That consumer-side companion is now in MMCA.Store's main. StripeClientFactory builds the SDK client over an explicitly bounded HTTP stack instead of Stripe.net's defaults, and…"},"74":{"u":"/docs/adr/009-resilience-and-recovery-objectives.html#revision-2026-10-01","d":"ADR-009: Resilience Policies & Recovery Objectives","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changes; the current-state sections are brought back in line with the code. Decision point 1 no longer says the gRPC client matches the global HTTP…"},"75":{"u":"/docs/adr/010-integration-event-schema-versioning.html","d":"ADR-010: Integration-Event Schema Versioning & Upcaster Policy","k":"Architecture Decision Records"},"76":{"u":"/docs/adr/010-integration-event-schema-versioning.html#status","d":"ADR-010: Integration-Event Schema Versioning & Upcaster Policy","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-19). Updated 2026-06-27 (Helpdesk enforcement gap closed; all three consumers now gate the convention). Updated 2026-08-14 (ADC now gates seven events, and a…"},"77":{"u":"/docs/adr/010-integration-event-schema-versioning.html#context","d":"ADR-010: Integration-Event Schema Versioning & Upcaster Policy","k":"Architecture Decision Records","t":"Context","x":"Integration events cross service boundaries (Identity → Conference, Conference ↔ Engagement, …) and are resolved by consumers solely by their type string: the outbox serializes…"},"78":{"u":"/docs/adr/010-integration-event-schema-versioning.html#decision","d":"ADR-010: Integration-Event Schema Versioning & Upcaster Policy","k":"Architecture Decision Records","t":"Decision","x":"1. Every integration event carries an explicit SchemaVersion. BaseIntegrationEvent exposes public virtual int SchemaVersion = 1;. It is serialized with the payload…"},"79":{"u":"/docs/adr/010-integration-event-schema-versioning.html#rationale","d":"ADR-010: Integration-Event Schema Versioning & Upcaster Policy","k":"Architecture Decision Records","t":"Rationale","x":"- A signal, enforced. A version field plus a build-gating convention test turns \"remember the contract\" into something the tooling checks: the same invariant-over-discipline…"},"80":{"u":"/docs/adr/010-integration-event-schema-versioning.html#trade-offs","d":"ADR-010: Integration-Event Schema Versioning & Upcaster Policy","k":"Architecture Decision Records","t":"Trade-offs","x":"- SchemaVersion is a signal, not a mechanism: by itself it does not stop a consumer breaking on a real reshape. The load-bearing half is the discipline (new type + upcaster). At…"},"81":{"u":"/docs/adr/010-integration-event-schema-versioning.html#amendment-2026-09-11-integration-event-payload-purity","d":"ADR-010: Integration-Event Schema Versioning & Upcaster Policy","k":"Architecture Decision Records","t":"Amendment (2026-09-11): integration-event payload purity","x":"Versioning answers \"how may this contract change\". It does not answer \"what may be in it in the first place\", and that gap is where the more expensive failure lives. An event…"},"82":{"u":"/docs/adr/010-integration-event-schema-versioning.html#revision-2026-10-01","d":"ADR-010: Integration-Event Schema Versioning & Upcaster Policy","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; two statements and one citation were corrected against source. The amendment claimed both purity rules are vacuous for a module-less map; only…"},"83":{"u":"/docs/adr/011-single-locale-i18n.html","d":"ADR-011: Single-Locale by Design (No Internationalization)","k":"Architecture Decision Records"},"84":{"u":"/docs/adr/011-single-locale-i18n.html#status","d":"ADR-011: Single-Locale by Design (No Internationalization)","k":"Architecture Decision Records","t":"Status","x":"Superseded by ADR-027 (2026-06-27). Originally Accepted (2026-06-19). The \"if multi-locale is ever required\" scope below is the blueprint ADR-027 implements; this record is…"},"85":{"u":"/docs/adr/011-single-locale-i18n.html#context","d":"ADR-011: Single-Locale by Design (No Internationalization)","k":"Architecture Decision Records","t":"Context","x":"The MMCA applications (the ADC conference app, the Store) and the MMCA.Common.UI library currently ship a single locale (en-US). The architecture rubric scores…"},"86":{"u":"/docs/adr/011-single-locale-i18n.html#decision","d":"ADR-011: Single-Locale by Design (No Internationalization)","k":"Architecture Decision Records","t":"Decision","x":"1. Single-locale (en-US) is an explicit non-goal for now. User-facing strings are inline in markup; dates/numbers use invariant or fixed formatting where appropriate. 2. The…"},"87":{"u":"/docs/adr/011-single-locale-i18n.html#rationale","d":"ADR-011: Single-Locale by Design (No Internationalization)","k":"Architecture Decision Records","t":"Rationale","x":"- Recording the decision converts an implicit rubric-zero into a conscious, revisitable choice: the same posture as the single-region DR acceptance in ADR-009. - Premature i18n…"},"88":{"u":"/docs/adr/011-single-locale-i18n.html#trade-offs","d":"ADR-011: Single-Locale by Design (No Internationalization)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Adding a locale later touches every view plus the formatting paths: a real but bounded effort, accepted. - Hard-coded strings make a future extraction larger; mitigated by the…"},"89":{"u":"/docs/adr/012-grpc-host-transport.html","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records"},"90":{"u":"/docs/adr/012-grpc-host-transport.html#status","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Status","x":"Accepted (re-verified against source 2026-09-03). Revised 2026-09-07 (the rate-limit and HTTPS-redirect exemptions that used to key on a caller-set Content-Type: application/grpc…"},"91":{"u":"/docs/adr/012-grpc-host-transport.html#update-2026-06-22-store-converged-to-profile-a","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Update (2026-06-22): Store converged to Profile A","x":"Store originally chose Profile B, but its cross-service gRPC failed in Azure Container Apps. With Http1AndHttp2 Kestrel + transport: 'auto' ingress on a cleartext endpoint there…"},"92":{"u":"/docs/adr/012-grpc-host-transport.html#update-2026-07-09-adc-notification-adds-a-mixed-endpoint-profile-per-endpoint-protocols","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Update (2026-07-09): ADC Notification adds a mixed-endpoint profile (per-endpoint protocols)","x":"The live-channel push pipeline (ADR-039) gave ADC's Notification service an inbound cleartext gRPC server (LiveChannelPushService.PushToChannel, called best-effort by Engagement…"},"93":{"u":"/docs/adr/012-grpc-host-transport.html#update-2026-07-25-probe-listeners-are-adcs-answer-not-tcp-probes-and-gateway-routed-jwks-is-a-local-only-rule","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Update (2026-07-25): probe listeners are ADC's answer, not TCP probes; and gateway-routed JWKS is a local-only rule","x":"Two claims above were written from an earlier state of the code and no longer describe either app. 1. ADC probes never touch the traffic endpoint; TCP probes were then…"},"94":{"u":"/docs/adr/012-grpc-host-transport.html#update-2026-07-28-the-probe-listener-is-the-single-pattern-in-both-apps-no-tcp-probes-anywhere","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Update (2026-07-28): the probe listener is the single pattern in both apps (no TCP probes anywhere)","x":"Store PR 55 (commit 297064bb, merged 2026-07-27) ported ADC's dedicated probe listener to Store, so the Store-only tcpSocket exception recorded in the 2026-07-25 update above is…"},"95":{"u":"/docs/adr/012-grpc-host-transport.html#update-2026-08-07-the-probe-listener-moved-into-mmcacommon-and-notifications-grpc-endpoint-carries-a-second-service","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Update (2026-08-07): the probe listener moved into MMCA.Common, and Notification's gRPC endpoint carries a second service","x":"1. One shared framework method, not a per-service file. The KestrelConfiguration.cs copies the two updates above cite no longer exist in either app. The pattern was extracted…"},"96":{"u":"/docs/adr/012-grpc-host-transport.html#update-2026-08-14-stores-sales-runs-the-mixed-endpoint-profile-too-so-no-pure-profile-b-host-remains","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Update (2026-08-14): Store's Sales runs the mixed-endpoint profile too, so no pure Profile B host remains","x":"Sales gained an inbound gRPC edge of its own (IUserSalesExportService, the Identity-driven data-subject export), and it resolved that the same way ADC's Notification did: not by…"},"97":{"u":"/docs/adr/012-grpc-host-transport.html#context","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Context","x":"Once modules were extracted into separate service hosts (ADR-008) that call each other synchronously over gRPC (ADR-007), each service's Kestrel had to serve both REST traffic…"},"98":{"u":"/docs/adr/012-grpc-host-transport.html#decision","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Decision","x":"Pick one of two coherent transport profiles per app, and wire the gateway forwarder and JWKS discovery to match. Use when services must serve gRPC on cleartext (any bidirectional…"},"99":{"u":"/docs/adr/012-grpc-host-transport.html#update-2026-08-29-aspire-local-health-gating-for-http2-only-endpoints-and-the-downstream-probe-negotiates-its-version","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Update (2026-08-29): Aspire-local health gating for Http2-only endpoints, and the downstream probe negotiates its version","x":"Two v1.167.0 framework additions close the last two operational gaps this profile family carried. 1. Profile A resources are now health-gated locally. Aspire's stock…"},"100":{"u":"/docs/adr/012-grpc-host-transport.html#update-2026-08-29-east-west-grpc-clients-state-their-own-circuit-breaker-v11680","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Update (2026-08-29): east-west gRPC clients state their own circuit breaker (v1.168.0)","x":"The health checks above are the gateway's view of a downstream. An east-west call (AddTypedGrpcClient, MMCA.Common/Source/Presentation/MMCA.Common.Grpc/DependencyInjection.cs)…"},"101":{"u":"/docs/adr/012-grpc-host-transport.html#rationale","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Rationale","x":"- The Kestrel protocol choice is the root constraint; the gateway-forward mode and the JWKS authority are downstream consequences, not independent knobs. Documenting them as a…"},"102":{"u":"/docs/adr/012-grpc-host-transport.html#trade-offs","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Two profiles to keep straight. A service that gains an inbound gRPC edge must migrate from Profile B to Profile A and move its gateway cluster onto the HTTP/2 exact version…"},"103":{"u":"/docs/adr/012-grpc-host-transport.html#revision-2026-09-07","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The transport profiles are unchanged. What changed is how the rest of the pipeline recognises an h2c gRPC request, from the 2026-09-07 security review (SEC-Common-44). Two…"},"104":{"u":"/docs/adr/012-grpc-host-transport.html#revision-2026-10-01","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed: both apps still run Profile A on their gRPC-serving hosts and the mixed-endpoint profile on ADC Notification and Store Sales. This pass…"},"105":{"u":"/docs/adr/012-grpc-host-transport.html#related","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Related","x":"- ADR-004 (cross-service token validation via JWKS / OIDC discovery), ADR-007 (gRPC cross-service calls), ADR-008 (monolith → services + gateway topology), ADR-039 (live-channel…"},"106":{"u":"/docs/adr/013-result-pattern.html","d":"ADR-013: Result Pattern over Exceptions for Flow Control","k":"Architecture Decision Records"},"107":{"u":"/docs/adr/013-result-pattern.html#status","d":"ADR-013: Result Pattern over Exceptions for Flow Control","k":"Architecture Decision Records","t":"Status","x":"Accepted. Revised 2026-07-21 (exception-handler chain / ProblemDetails edge contract documented). Revised 2026-08-26 (ErrorType.Unexpected, severity-ranked status selection for…"},"108":{"u":"/docs/adr/013-result-pattern.html#context","d":"ADR-013: Result Pattern over Exceptions for Flow Control","k":"Architecture Decision Records","t":"Context","x":"Operations at every layer fail in expected ways: input is invalid, a domain invariant is broken, a requested entity is missing, a uniqueness conflict occurs, the caller lacks…"},"109":{"u":"/docs/adr/013-result-pattern.html#decision","d":"ADR-013: Result Pattern over Exceptions for Flow Control","k":"Architecture Decision Records","t":"Decision","x":"Model expected failures as values using Result / Result (MMCA.Common.Shared.Abstractions), not exceptions. - A Result is either success or failure; a failure carries one or more…"},"110":{"u":"/docs/adr/013-result-pattern.html#rationale","d":"ADR-013: Result Pattern over Exceptions for Flow Control","k":"Architecture Decision Records","t":"Rationale","x":"- Failures are in the signature. A method that can fail returns Result , so the caller cannot silently ignore the failure path the way an uncaught exception allows. - Category,…"},"111":{"u":"/docs/adr/013-result-pattern.html#trade-offs","d":"ADR-013: Result Pattern over Exceptions for Flow Control","k":"Architecture Decision Records","t":"Trade-offs","x":"- More ceremony at call sites than letting an exception bubble; the combinators absorb most of it. - Two error channels coexist (Result for expected, exceptions for exceptional).…"},"112":{"u":"/docs/adr/013-result-pattern.html#revision-2026-10-01","d":"ADR-013: Result Pattern over Exceptions for Flow Control","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Citations were re-anchored to the current source after line shifts: the gRPC status table, ToRpcException ranking and trailer writes in…"},"113":{"u":"/docs/adr/013-result-pattern.html#related","d":"ADR-013: Result Pattern over Exceptions for Flow Control","k":"Architecture Decision Records","t":"Related","x":"ADR-007 (Result over the wire via gRPC, the second edge the shared severity ranking now serves), ADR-014 (the decorator pipeline returns Result.Failure to short-circuit a command…"},"114":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records"},"115":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#status","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Status","x":"Accepted. Revised 2026-07-19 (Transactional semantics: rollback on business failure + post-commit event dispatch; see Revision below). Revised 2026-08-18 (the pipeline order…"},"116":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#context","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Context","x":"Commands and queries share cross-cutting concerns: validation, transactions, cache invalidation, logging / timing, and feature gating. Putting that logic inside each handler…"},"117":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#decision","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Decision","x":"Use single-responsibility handlers behind a Scrutor-composed decorator pipeline. - ICommandHandler and IQueryHandler (MMCA.Common.Application) are one handler per use case, each…"},"118":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#rationale","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Rationale","x":"- Thin, testable handlers. A handler has no transaction, logging, or caching plumbing, so it is unit-tested in isolation. - One place to read and change the pipeline. The order…"},"119":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#trade-offs","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Trade-offs","x":"- Registration order is the reverse of execution order (a Scrutor foot-gun), mitigated by the inline ordering comments in AddApplicationDecorators(). - Decorators must be…"},"120":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#revision-2026-07-19","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Revision (2026-07-19)","x":"Two Transactional-decorator semantics changed with the 2026-07-19 full review: - A returned business failure now rolls the transaction back. Previously a handler returning…"},"121":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#revision-2026-08-18","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"Two decorators were added to both chains, so the order recorded in the Decision above is no longer the shipped one. The registration site is unchanged in kind:…"},"122":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#revision-2026-08-26","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Revision (2026-08-26)","x":"One decorator joins the query chain, and the registration sequence stops being a rule consumers have to remember. The query line in the Revision (2026-08-18) above is superseded;…"},"123":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#revision-2026-09-07","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"One decorator's key composition changed (SEC-Common-19 / SEC-Common-37). CachingQueryDecorator builds its entry key as TenantCacheKey.Scope(tenantContext,…"},"124":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#related","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Related","x":"ADR-013 (Result, the short-circuit currency of the pipeline, and the Failure error type the timeout decorator reuses because the taxonomy has no timeout member), ADR-003…"},"125":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#revision-2026-09-11","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Revision (2026-09-11)","x":"One decorator behaviour changed on both chains, and it is a logging decision rather than a pipeline one: the order, the markers, the sealing rule and the short-circuit currency…"},"126":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#revision-2026-09-19","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Revision (2026-09-19)","x":"One decorator pair changed inside, and the pipeline around it did not: the order is still FeatureGate - Authorization - Logging - Caching - Validating - Timeout - Transactional -…"},"127":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#revision-2026-09-25","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Revision (2026-09-25)","x":"The consumer fitness tests changed, not the pipeline. ADC's DecoratorPipelineOrderTests now builds its registration sequence through AddMmcaApplicationPipeline, the helper its…"},"128":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#revision-2026-10-01","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The Decision gains one bullet stating where each kind of validation lives, so the Validating decorator's role is read against its neighbours rather than in isolation. The chain…"},"129":{"u":"/docs/adr/015-architecture-fitness-functions.html","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records"},"130":{"u":"/docs/adr/015-architecture-fitness-functions.html#status","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Status","x":"Accepted. Revised 2026-08-18 (two new rule families, namespace dependency cycles and trailing CancellationToken declarations, plus a third enforcement layer: a compile-time…"},"131":{"u":"/docs/adr/015-architecture-fitness-functions.html#context","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Context","x":"The codebase rests on invariants that are easy to state and easy to erode by accident: clean- architecture layer flow (Domain depends on nothing above it), module isolation (no…"},"132":{"u":"/docs/adr/015-architecture-fitness-functions.html#decision","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Decision","x":"Enforce architectural invariants as automated checks that gate the build, in two layers (a third joined them on 2026-08-18: see the Revision at the end). 1. Compile-time guard.…"},"133":{"u":"/docs/adr/015-architecture-fitness-functions.html#rationale","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Rationale","x":"- Invariant over discipline. Turning \"do not do X\" into a red build is the only enforcement that scales. It is the same lever used by the layer rules, the resilience gate…"},"134":{"u":"/docs/adr/015-architecture-fitness-functions.html#trade-offs","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Trade-offs","x":"- The tests assert structure / registration, not runtime behavior. ADR-009's test proves a client wires resilience, not that its policy values are correct; parameter tuning stays…"},"135":{"u":"/docs/adr/015-architecture-fitness-functions.html#revision-2026-08-18","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"Two new rule families joined the shared library, and a third enforcement layer joined the two the Decision above describes. The counts in MMCA.Common/FACTS.md move with them: 102…"},"136":{"u":"/docs/adr/015-architecture-fitness-functions.html#revision-2026-08-18-section-b-rule-families","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Revision (2026-08-18): Section B rule families","x":"A second entry on the same date, kept separate rather than folded into the one above because it lands with a different wave and changes a number that revision states. Two rule…"},"137":{"u":"/docs/adr/015-architecture-fitness-functions.html#revision-2026-08-23-superseded-counts-a-re-anchored-citation-and-the-real-test-floor","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Revision (2026-08-23): superseded counts, a re-anchored citation, and the real test floor","x":"No rule family joined or left the library in this entry. It corrects three things the two 2026-08-18 revisions above state, and it is kept as its own entry rather than edited…"},"138":{"u":"/docs/adr/015-architecture-fitness-functions.html#revision-2026-09-01-the-public-api-gates-real-coverage-and-re-anchored-citations","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Revision (2026-09-01): the public API gate's real coverage, and re-anchored citations","x":"No rule family joined or left the library in this entry and no decision changed. It corrects the public-API figures the first 2026-08-18 revision recorded, which had gone stale…"},"139":{"u":"/docs/adr/015-architecture-fitness-functions.html#revision-2026-09-03-the-accepted-cycles-middle-node-the-feature-folder-move-re-anchored-citations","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Revision (2026-09-03): the accepted cycle's middle node, the feature-folder move, re-anchored citations","x":"No rule family joined or left the library in this entry and no decision changed. One accepted allowance changed shape, the files that hold the rules and the tests moved, and the…"},"140":{"u":"/docs/adr/015-architecture-fitness-functions.html#revision-2026-09-11-the-restated-counts-come-out-six-citations-move","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Revision (2026-09-11): the restated counts come out, six citations move","x":"No rule family joined or left the library in this entry and no decision changed. It removes the one kind of number this record keeps failing to keep current and re-anchors the…"},"141":{"u":"/docs/adr/015-architecture-fitness-functions.html#revision-2026-09-19-the-gate-covers-eighteen-projects-and-the-unshipped-side-nearly-doubled","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Revision (2026-09-19): the gate covers eighteen projects, and the unshipped side nearly doubled","x":"No rule family joined or left the library in this entry and no decision changed. It corrects the public-API gate's file and declaration figures, which had gone stale in the…"},"142":{"u":"/docs/adr/015-architecture-fitness-functions.html#revision-2026-10-01-rs0026--rs0027-become-errors-the-baselines-roll-over-citations-move","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Revision (2026-10-01): RS0026 / RS0027 become errors, the baselines roll over, citations move","x":"No rule family joined or left the library in this entry. One public API gate setting changed, the baseline figures moved with the v1.216.0 release (MMCA.Common/FACTS.md:14), and…"},"143":{"u":"/docs/adr/015-architecture-fitness-functions.html#related","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Related","x":"ADR-009 (resilience gate), ADR-010 (event-version gate), ADR-016 (MassTransit pin gate, and the lockstep release cadence the public API baseline is pinned to), ADR-006/007/008…"},"144":{"u":"/docs/adr/016-lockstep-versioning-masstransit-pin.html","d":"ADR-016: Lockstep Package Versioning and the MassTransit-v8 Pin","k":"Architecture Decision Records"},"145":{"u":"/docs/adr/016-lockstep-versioning-masstransit-pin.html#status","d":"ADR-016: Lockstep Package Versioning and the MassTransit-v8 Pin","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-15). Amended (2026-07-28): the fitness function now gates two commercial-license majors (MassTransit and SixLabors.ImageSharp), so the decision is restated as…"},"146":{"u":"/docs/adr/016-lockstep-versioning-masstransit-pin.html#context","d":"ADR-016: Lockstep Package Versioning and the MassTransit-v8 Pin","k":"Architecture Decision Records","t":"Context","x":"MMCA.Common publishes its MMCA.Common. NuGet package set (see FACTS.md for the authoritative list and count) consumed by three downstream repos: the two production apps (Store,…"},"147":{"u":"/docs/adr/016-lockstep-versioning-masstransit-pin.html#decision","d":"ADR-016: Lockstep Package Versioning and the MassTransit-v8 Pin","k":"Architecture Decision Records","t":"Decision","x":"1. Version the whole MMCA.Common. package set in lockstep. All packages share one version (MinVer, derived from a single vX.Y.Z git tag); a release tags every package (see…"},"148":{"u":"/docs/adr/016-lockstep-versioning-masstransit-pin.html#rationale","d":"ADR-016: Lockstep Package Versioning and the MassTransit-v8 Pin","k":"Architecture Decision Records","t":"Rationale","x":"- One version, one compatibility story. Lockstep removes the N-package matrix: \"everything on vX.Y.Z\" is the only supported combination, which is the right trade for a small…"},"149":{"u":"/docs/adr/016-lockstep-versioning-masstransit-pin.html#trade-offs","d":"ADR-016: Lockstep Package Versioning and the MassTransit-v8 Pin","k":"Architecture Decision Records","t":"Trade-offs","x":"- A consumer cannot adopt a single package in isolation: it takes the whole set at the new version. - Lockstep will bump a package whose code did not change (acceptable: the…"},"150":{"u":"/docs/adr/016-lockstep-versioning-masstransit-pin.html#transport-exit-options","d":"ADR-016: Lockstep Package Versioning and the MassTransit-v8 Pin","k":"Architecture Decision Records","t":"Transport exit options","x":"The pin has a horizon. MassTransit v8 is the free major and its community support ends at the end of 2026 (a maintainer statement about the package, not something this repository…"},"151":{"u":"/docs/adr/016-lockstep-versioning-masstransit-pin.html#alternatives-rejected","d":"ADR-016: Lockstep Package Versioning and the MassTransit-v8 Pin","k":"Architecture Decision Records","t":"Alternatives rejected","x":"- Opt-in flags and compatibility shims for a framework change, with consumers upgraded per page or per PR. Declined outright: no virtual opt-in properties, no parallel old and…"},"152":{"u":"/docs/adr/016-lockstep-versioning-masstransit-pin.html#revision-2026-10-01","d":"ADR-016: Lockstep Package Versioning and the MassTransit-v8 Pin","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision, pin, gate or rationale changed: MassTransit stays below major 9 and ImageSharp below major 4, and every repo still sits on one MassTransit patch. The current-state…"},"153":{"u":"/docs/adr/016-lockstep-versioning-masstransit-pin.html#related","d":"ADR-016: Lockstep Package Versioning and the MassTransit-v8 Pin","k":"Architecture Decision Records","t":"Related","x":"ADR-015 (the fitness function that enforces the pins), ADR-003 / ADR-006 (MassTransit is the broker transport behind the outbox and database-per-service flows). ADR-118 revisits…"},"154":{"u":"/docs/adr/017-request-idempotency.html","d":"ADR-017: HTTP Request Idempotency via Client-Supplied Keys","k":"Architecture Decision Records"},"155":{"u":"/docs/adr/017-request-idempotency.html#status","d":"ADR-017: HTTP Request Idempotency via Client-Supplied Keys","k":"Architecture Decision Records","t":"Status","x":"Accepted. Revised 2026-08-01: the guard around execute-and-store is now an IDistributedLock resolved from DI (Redis-backed wherever a connection multiplexer is registered, which…"},"156":{"u":"/docs/adr/017-request-idempotency.html#context","d":"ADR-017: HTTP Request Idempotency via Client-Supplied Keys","k":"Architecture Decision Records","t":"Context","x":"Write endpoints (POST / PUT / PATCH) are exposed to client retries and double-submits: a flaky network, an impatient user double-clicking, or a resilience pipeline re-issuing a…"},"157":{"u":"/docs/adr/017-request-idempotency.html#decision","d":"ADR-017: HTTP Request Idempotency via Client-Supplied Keys","k":"Architecture Decision Records","t":"Decision","x":"Provide opt-in, client-driven request idempotency as an MVC action filter in MMCA.Common.API. - Opt-in per action. [Idempotent] (IdempotentAttribute, a ServiceFilterAttribute…"},"158":{"u":"/docs/adr/017-request-idempotency.html#rationale","d":"ADR-017: HTTP Request Idempotency via Client-Supplied Keys","k":"Architecture Decision Records","t":"Rationale","x":"- Safety at the edge, not in every handler. Deduplication lives in one filter, so a handler stays a thin use case (ADR-014) and does not grow ad-hoc \"did I already do this?\"…"},"159":{"u":"/docs/adr/017-request-idempotency.html#trade-offs","d":"ADR-017: HTTP Request Idempotency via Client-Supplied Keys","k":"Architecture Decision Records","t":"Trade-offs","x":"- Cross-instance mutual exclusion follows Redis, so it is a deployment property, not a guarantee. Every ADC and Store service host registers a Redis IConnectionMultiplexer when a…"},"160":{"u":"/docs/adr/017-request-idempotency.html#revision-2026-08-18","d":"ADR-017: HTTP Request Idempotency via Client-Supplied Keys","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"The last Trade-off above is the one this revision addresses, and it does so by changing what is required. Nothing here makes an endpoint idempotent. What it requires is that…"},"161":{"u":"/docs/adr/017-request-idempotency.html#revision-2026-10-01","d":"ADR-017: HTTP Request Idempotency via Client-Supplied Keys","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The Decision and Trade-offs are corrected to the filter as it runs today. Four statements had drifted. The cache-key subject is FindUserIdValue() (sub, then…"},"162":{"u":"/docs/adr/017-request-idempotency.html#related","d":"ADR-017: HTTP Request Idempotency via Client-Supplied Keys","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (handler idempotency for outbox/event consumers, a distinct concern), ADR-013 (Result is the response the filter caches/replays), ADR-014 (the filter keeps the handler…"},"163":{"u":"/docs/adr/018-polyglot-persistence.html","d":"ADR-018: Polyglot Persistence (Multiple Storage Engines Behind One Model)","k":"Architecture Decision Records"},"164":{"u":"/docs/adr/018-polyglot-persistence.html#status","d":"ADR-018: Polyglot Persistence (Multiple Storage Engines Behind One Model)","k":"Architecture Decision Records","t":"Status","x":"Accepted. The framework plumbing is complete, covered by unit and integration tests (DataSourceResolverTests, CrossDataSourceDegradeConventionTests, EntityTypeConfigurationTests,…"},"165":{"u":"/docs/adr/018-polyglot-persistence.html#context","d":"ADR-018: Polyglot Persistence (Multiple Storage Engines Behind One Model)","k":"Architecture Decision Records","t":"Context","x":"ADR-006 (database-per-service) splits storage along the Name axis: several physically separate databases, all on the same engine (SQL Server), one per service. A second,…"},"166":{"u":"/docs/adr/018-polyglot-persistence.html#decision","d":"ADR-018: Polyglot Persistence (Multiple Storage Engines Behind One Model)","k":"Architecture Decision Records","t":"Decision","x":"Support four storage engines behind one entity model and one set of repository abstractions, selected per entity configuration. 1. DataSource engine enum: SQLServer (full…"},"167":{"u":"/docs/adr/018-polyglot-persistence.html#rationale","d":"ADR-018: Polyglot Persistence (Multiple Storage Engines Behind One Model)","k":"Architecture Decision Records","t":"Rationale","x":"- Right store per access pattern, as a configuration decision. The engine becomes an attribute on a configuration class, not a rewrite. The same domain entity, application…"},"168":{"u":"/docs/adr/018-polyglot-persistence.html#trade-offs","d":"ADR-018: Polyglot Persistence (Multiple Storage Engines Behind One Model)","k":"Architecture Decision Records","t":"Trade-offs","x":"- No cross-engine JOINs, FKs, or transactions. This is the ADR-006 cost made sharper: across engines it is a hard limit, not a deployment choice. A query spanning engines (for…"},"169":{"u":"/docs/adr/018-polyglot-persistence.html#related","d":"ADR-018: Polyglot Persistence (Multiple Storage Engines Behind One Model)","k":"Architecture Decision Records","t":"Related","x":"ADR-006 (database-per-service: the Name axis this ADR's Engine axis is orthogonal to; they share DataSourceKey), ADR-002 (navigation populators bridge the relationships the…"},"170":{"u":"/docs/adr/018-polyglot-persistence.html#revision-2026-08-29-engine-substitution-for-a-single-engine-host","d":"ADR-018: Polyglot Persistence (Multiple Storage Engines Behind One Model)","k":"Architecture Decision Records","t":"Revision (2026-08-29): engine substitution for a single-engine host","x":"Decision item 4 says engines never collapse into each other, and that held while every host in this workspace configured SQL Server. A host that configures only SQLite (or only…"},"171":{"u":"/docs/adr/018-polyglot-persistence.html#revision-2026-10-01","d":"ADR-018: Polyglot Persistence (Multiple Storage Engines Behind One Model)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision changed; this pass corrects statements that overreached the code and refreshes stale citations. Decision items 5 and 6, the Trade-offs and Related now say that the…"},"172":{"u":"/docs/adr/019-rate-limiting.html","d":"ADR-019: Layered Rate Limiting with an Authenticated-Only Global Limiter","k":"Architecture Decision Records"},"173":{"u":"/docs/adr/019-rate-limiting.html#status","d":"ADR-019: Layered Rate Limiting with an Authenticated-Only Global Limiter","k":"Architecture Decision Records","t":"Status","x":"Accepted. Revised 2026-08-01 (the auth-ip per-IP anonymous-authentication limiter, which the shared auth controller applies to login and register by default, is recorded as the…"},"174":{"u":"/docs/adr/019-rate-limiting.html#context","d":"ADR-019: Layered Rate Limiting with an Authenticated-Only Global Limiter","k":"Architecture Decision Records","t":"Context","x":"Every service exposes read and write endpoints to the public internet through the gateway (ADR-008). Abusive or runaway clients (scrapers, credential stuffing, retry storms, a…"},"175":{"u":"/docs/adr/019-rate-limiting.html#decision","d":"ADR-019: Layered Rate Limiting with an Authenticated-Only Global Limiter","k":"Architecture Decision Records","t":"Decision","x":"Rate limiting is layered, and the always-on global limiter is authenticated-only. 1. A global limiter that only caps authenticated callers. AddCommonRateLimiting…"},"176":{"u":"/docs/adr/019-rate-limiting.html#rationale","d":"ADR-019: Layered Rate Limiting with an Authenticated-Only Global Limiter","k":"Architecture Decision Records","t":"Rationale","x":"- Limit the traffic that is both attributable and expensive. An authenticated request is tied to a principal and usually drives the database; capping per-principal stops a single…"},"177":{"u":"/docs/adr/019-rate-limiting.html#trade-offs","d":"ADR-019: Layered Rate Limiting with an Authenticated-Only Global Limiter","k":"Architecture Decision Records","t":"Trade-offs","x":"- The global limiter only protects the authenticated surface. The anonymous surface is covered endpoint by endpoint instead: the anonymous credential endpoints (login, register,…"},"178":{"u":"/docs/adr/019-rate-limiting.html#revision-2026-08-18","d":"ADR-019: Layered Rate Limiting with an Authenticated-Only Global Limiter","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"The layering above is unchanged: the global limiter is still authenticated-only, infrastructure and anonymous traffic are still exempt, auth-ip still covers login and register by…"},"179":{"u":"/docs/adr/019-rate-limiting.html#revision-2026-09-07","d":"ADR-019: Layered Rate Limiting with an Authenticated-Only Global Limiter","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The layering is unchanged: the global limiter is still authenticated-only, login and register still carry auth-ip, and infrastructure paths are still exempt. Four things below it…"},"180":{"u":"/docs/adr/019-rate-limiting.html#revision-2026-09-10","d":"ADR-019: Layered Rate Limiting with an Authenticated-Only Global Limiter","k":"Architecture Decision Records","t":"Revision (2026-09-10)","x":"Both gateways now scope auth-tight the same way, and the trusted-caller exemption's client half ships in the framework. Two items, both landed. 1. Store's gateway splits the…"},"181":{"u":"/docs/adr/019-rate-limiting.html#revision-2026-10-01","d":"ADR-019: Layered Rate Limiting with an Authenticated-Only Global Limiter","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Two current-state statements in the Decision were corrected. The ADC Conference output-cache list now reads as a sample of a larger…"},"182":{"u":"/docs/adr/019-rate-limiting.html#related","d":"ADR-019: Layered Rate Limiting with an Authenticated-Only Global Limiter","k":"Architecture Decision Records","t":"Related","x":"ADR-004 (the JWKS/discovery traffic the limiter exempts, and the authenticated principal it keys on), ADR-008 (the gateway edge this protects), ADR-017 (request idempotency, the…"},"183":{"u":"/docs/adr/020-permission-based-authorization.html","d":"ADR-020: Permission-Based Authorization Layered over Roles","k":"Architecture Decision Records"},"184":{"u":"/docs/adr/020-permission-based-authorization.html#status","d":"ADR-020: Permission-Based Authorization Layered over Roles","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-25, amended 2026-07-10 and 2026-08-23). Revised 2026-09-07 (a fallback policy requiring an authenticated caller is on by default, so anonymity has to be…"},"185":{"u":"/docs/adr/020-permission-based-authorization.html#context","d":"ADR-020: Permission-Based Authorization Layered over Roles","k":"Architecture Decision Records","t":"Context","x":"The default answer in ASP.NET Core is pure role-based access control (RBAC): an endpoint declares [Authorize(Policy = \"RequireOrganizer\")] against a named policy that calls…"},"186":{"u":"/docs/adr/020-permission-based-authorization.html#decision","d":"ADR-020: Permission-Based Authorization Layered over Roles","k":"Architecture Decision Records","t":"Decision","x":"Authorize on capabilities resolved from roles: a permission layer over RBAC, and the framework's one authorization model. Nothing is pre-registered per role name. - A central…"},"187":{"u":"/docs/adr/020-permission-based-authorization.html#rationale","d":"ADR-020: Permission-Based Authorization Layered over Roles","k":"Architecture Decision Records","t":"Rationale","x":"- Capabilities decouple endpoints from roles. A route says what it does (conference:sessions:manage), and who may do it is a registry decision, so adding ContentEditor with a…"},"188":{"u":"/docs/adr/020-permission-based-authorization.html#trade-offs","d":"ADR-020: Permission-Based Authorization Layered over Roles","k":"Architecture Decision Records","t":"Trade-offs","x":"- It is still RBAC, not ABAC. The model resolves role to permission; it does not evaluate resource or attribute conditions. Per-resource ownership (\"a customer may read only…"},"189":{"u":"/docs/adr/020-permission-based-authorization.html#revision-2026-09-07","d":"ADR-020: Permission-Based Authorization Layered over Roles","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Permission-based authorization is unchanged. What changed is the default for an endpoint that declares nothing (SEC-Common-16 / SEC-ADC-03). 1. An undecorated endpoint now…"},"190":{"u":"/docs/adr/020-permission-based-authorization.html#revision-2026-10-01","d":"ADR-020: Permission-Based Authorization Layered over Roles","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed: the framework still declares no role names and still gates its own endpoints and navigation on capabilities. The role-vocabulary paragraph now…"},"191":{"u":"/docs/adr/020-permission-based-authorization.html#related","d":"ADR-020: Permission-Based Authorization Layered over Roles","k":"Architecture Decision Records","t":"Related","x":"ADR-004 (the authenticated principal and claims this keys on, including the optional permission claim), ADR-008 (each extracted service authorizes independently, so the registry…"},"192":{"u":"/docs/adr/021-consumer-inbox-idempotency.html","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records"},"193":{"u":"/docs/adr/021-consumer-inbox-idempotency.html#status","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-09; adoption reviewed 2026-07-15, inventory refreshed 2026-10-01). Revised 2026-08-18 (the inbox stays opt-in, but being off is no longer silent: a…"},"194":{"u":"/docs/adr/021-consumer-inbox-idempotency.html#context","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records","t":"Context","x":"ADR-003 makes integration-event delivery at-least-once: the outbox guarantees a published event is not lost, and the MassTransit broker redelivers on consumer failure.…"},"195":{"u":"/docs/adr/021-consumer-inbox-idempotency.html#decision","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records","t":"Decision","x":"Add an opt-in inbox that records each successfully-processed integration event by its MessageId and skips redeliveries. - Every event carries a MessageId. BaseDomainEvent stamps…"},"196":{"u":"/docs/adr/021-consumer-inbox-idempotency.html#rationale","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records","t":"Rationale","x":"- Dedup once, not in every handler. A single consume-edge check turns \"every handler author must remember to be idempotent against redelivery\" into a framework guarantee for the…"},"197":{"u":"/docs/adr/021-consumer-inbox-idempotency.html#trade-offs","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records","t":"Trade-offs","x":"- Not exactly-once. The crash-after-handler-before-inbox window reprocesses once, so handlers must stay idempotent for it; the inbox narrows the duplicate window, it does not…"},"198":{"u":"/docs/adr/021-consumer-inbox-idempotency.html#revision-2026-09-07","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Inbox idempotency is unchanged. The names the consumer endpoints take are not (SEC-Common-53). MessageBus:EndpointPrefix left unset used to mean \"no prefix\"; it now defaults to…"},"199":{"u":"/docs/adr/021-consumer-inbox-idempotency.html#related","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (the outbox and at-least-once delivery whose consumer side this deduplicates; handler idempotency is still required for the crash window), ADR-006 (the inbox lives in the…"},"200":{"u":"/docs/adr/021-consumer-inbox-idempotency.html#revision-2026-08-18","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"The decision is unchanged: the inbox is still opt-in and NoOpInboxStore is still the default. What changed is that the default is now loud. 1. A broker-connected host with no…"},"201":{"u":"/docs/adr/021-consumer-inbox-idempotency.html#revision-2026-08-26","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records","t":"Revision (2026-08-26)","x":"Two changes, and the first one reverses this record's central choice. The inbox is no longer opt-in where redelivery is possible, and its row is no longer a separate write. 1.…"},"202":{"u":"/docs/adr/021-consumer-inbox-idempotency.html#revision-2026-09-11","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records","t":"Revision (2026-09-11)","x":"Dedup semantics are unchanged: same MessageId key, same TryBeginAsync to handlers to CompleteAsync path, same staged row, same unique index as the race guard. What changed is…"},"203":{"u":"/docs/adr/021-consumer-inbox-idempotency.html#revision-2026-10-01","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision changed. The consumer inventory did: ADC Conference now consumes UserDeleted beside UserRegistered…"},"204":{"u":"/docs/adr/022-browser-session-cookie-auth.html","d":"ADR-022: Browser Session-Cookie Authentication for Blazor SSR","k":"Architecture Decision Records"},"205":{"u":"/docs/adr/022-browser-session-cookie-auth.html#status","d":"ADR-022: Browser Session-Cookie Authentication for Blazor SSR","k":"Architecture Decision Records","t":"Status","x":"Accepted."},"206":{"u":"/docs/adr/022-browser-session-cookie-auth.html#context","d":"ADR-022: Browser Session-Cookie Authentication for Blazor SSR","k":"Architecture Decision Records","t":"Context","x":"The apps are Blazor Web Apps: a server-rendered (SSR) prerender pass runs on the first request, then an interactive phase (Blazor Server or WebAssembly) takes over.…"},"207":{"u":"/docs/adr/022-browser-session-cookie-auth.html#decision","d":"ADR-022: Browser Session-Cookie Authentication for Blazor SSR","k":"Architecture Decision Records","t":"Decision","x":"Carry the session in HttpOnly cookies and add an authentication scheme that reads them during SSR prerender. The mechanism ships in MMCA.Common.API (SessionCookies/) with a…"},"208":{"u":"/docs/adr/022-browser-session-cookie-auth.html#rationale","d":"ADR-022: Browser Session-Cookie Authentication for Blazor SSR","k":"Architecture Decision Records","t":"Rationale","x":"- Fixes the fresh-GET prerender gap. Without a server-readable session, every deep-link or F5 to an [Authorize] page would redirect to /login despite a valid session; the cookie…"},"209":{"u":"/docs/adr/022-browser-session-cookie-auth.html#trade-offs","d":"ADR-022: Browser Session-Cookie Authentication for Blazor SSR","k":"Architecture Decision Records","t":"Trade-offs","x":"- A non-validating auth scheme exists. SessionCookieAuthenticationHandler trusts a cookie it does not cryptographically verify. This is sound only because (a) the cookie is…"},"210":{"u":"/docs/adr/022-browser-session-cookie-auth.html#related","d":"ADR-022: Browser Session-Cookie Authentication for Blazor SSR","k":"Architecture Decision Records","t":"Related","x":"ADR-004 (the JWT/JWKS validation the API performs on every call, which is why the SSR handler can skip signature validation), ADR-008 (the gateway and topology the UI talks to),…"},"211":{"u":"/docs/adr/023-security-response-headers.html","d":"ADR-023: Centralized Security-Response-Headers Middleware with a Pluggable CSP","k":"Architecture Decision Records"},"212":{"u":"/docs/adr/023-security-response-headers.html#status","d":"ADR-023: Centralized Security-Response-Headers Middleware with a Pluggable CSP","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-02). Revised 2026-09-01 (the static default is now a complete hardened baseline: it ships script-src 'self' 'wasm-unsafe-eval' and style-src 'self'…"},"213":{"u":"/docs/adr/023-security-response-headers.html#context","d":"ADR-023: Centralized Security-Response-Headers Middleware with a Pluggable CSP","k":"Architecture Decision Records","t":"Context","x":"Every client-facing host (the YARP Gateway and the Blazor UI web host in each app) must stamp the same hardened HTTP response headers: X-Content-Type-Options, X-Frame-Options,…"},"214":{"u":"/docs/adr/023-security-response-headers.html#decision","d":"ADR-023: Centralized Security-Response-Headers Middleware with a Pluggable CSP","k":"Architecture Decision Records","t":"Decision","x":"Ship one security-headers middleware in MMCA.Common.Aspire (MMCA.Common.Aspire.Security), registered with AddCommonSecurityHeaders(configuration?, configure?) and inserted early…"},"215":{"u":"/docs/adr/023-security-response-headers.html#rationale","d":"ADR-023: Centralized Security-Response-Headers Middleware with a Pluggable CSP","k":"Architecture Decision Records","t":"Rationale","x":"- One hardened default, defined once. Centralizing the header set removes per-host drift and makes a new edge host secure by default rather than by remembering to copy headers. -…"},"216":{"u":"/docs/adr/023-security-response-headers.html#trade-offs","d":"ADR-023: Centralized Security-Response-Headers Middleware with a Pluggable CSP","k":"Architecture Decision Records","t":"Trade-offs","x":"- The baseline is complete, not maximal. Shipping a policy that works for a Blazor/MudBlazor host means the default carries style-src 'unsafe-inline' (MudBlazor injects styles at…"},"217":{"u":"/docs/adr/023-security-response-headers.html#revision-2026-09-07","d":"ADR-023: Centralized Security-Response-Headers Middleware with a Pluggable CSP","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Two changes from the 2026-09-07 security review. 1. Credential-carrying paths get a stricter referrer and cache posture. SecurityHeadersSettings.CredentialPathPrefixes…"},"218":{"u":"/docs/adr/023-security-response-headers.html#revision-2026-09-10","d":"ADR-023: Centralized Security-Response-Headers Middleware with a Pluggable CSP","k":"Architecture Decision Records","t":"Revision (2026-09-10)","x":"Both UI origins are now pinned by a test, not just Store's. ADC has MMCA.ADC/Tests/Hosts/MMCA.ADC.UI.Web.Tests/SecurityHeadersTests.cs:17-18, a one-line subclass of the…"},"219":{"u":"/docs/adr/023-security-response-headers.html#revision-2026-09-19","d":"ADR-023: Centralized Security-Response-Headers Middleware with a Pluggable CSP","k":"Architecture Decision Records","t":"Revision (2026-09-19)","x":"The Blazor policy is wider than the Decision above recorded, and the UI host's forwarded-headers options clear their allow-lists on purpose. The provider is no longer the copy…"},"220":{"u":"/docs/adr/023-security-response-headers.html#revision-2026-10-01","d":"ADR-023: Centralized Security-Response-Headers Middleware with a Pluggable CSP","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; one Trade-offs statement was corrected and the current homes of the forwarded-headers posture are recorded. 1. The registration-order trade-off…"},"221":{"u":"/docs/adr/023-security-response-headers.html#related","d":"ADR-023: Centralized Security-Response-Headers Middleware with a Pluggable CSP","k":"Architecture Decision Records","t":"Related","x":"ADR-019 (rate limiting, the other always-on edge protection living in the same Aspire layer), ADR-022 (browser session-cookie auth, the other browser-edge security control),…"},"222":{"u":"/docs/adr/024-push-notifications.html","d":"ADR-024: Two-Channel User Notifications (Transient SignalR Push + Durable Inbox)","k":"Architecture Decision Records"},"223":{"u":"/docs/adr/024-push-notifications.html#status","d":"ADR-024: Two-Channel User Notifications (Transient SignalR Push + Durable Inbox)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-27, amended 2026-07-15). Revised 2026-08-07 (transactional email recorded as an app-level concern outside the channel model; see Revision below). Revised…"},"224":{"u":"/docs/adr/024-push-notifications.html#context","d":"ADR-024: Two-Channel User Notifications (Transient SignalR Push + Durable Inbox)","k":"Architecture Decision Records","t":"Context","x":"The framework needs to deliver user-facing notifications (an organizer broadcasting a schedule change, a per-user alert). Two delivery models each fail on their own. A pure…"},"225":{"u":"/docs/adr/024-push-notifications.html#decision","d":"ADR-024: Two-Channel User Notifications (Transient SignalR Push + Durable Inbox)","k":"Architecture Decision Records","t":"Decision","x":"Deliver notifications over two channels from one application use case, with the transport and the recipient policy both behind abstractions. - A durable per-user inbox plus a…"},"226":{"u":"/docs/adr/024-push-notifications.html#rationale","d":"ADR-024: Two-Channel User Notifications (Transient SignalR Push + Durable Inbox)","k":"Architecture Decision Records","t":"Rationale","x":"- Each channel covers the other's failure mode. The inbox guarantees eventual delivery to offline users; the push gives connected users immediacy. Persisting the inbox before…"},"227":{"u":"/docs/adr/024-push-notifications.html#trade-offs","d":"ADR-024: Two-Channel User Notifications (Transient SignalR Push + Durable Inbox)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Fan-out write amplification. One UserNotification row is written per recipient, so a broadcast to a large audience is a large insert. This is fine for the current per-event /…"},"228":{"u":"/docs/adr/024-push-notifications.html#revision-2026-09-07","d":"ADR-024: Two-Channel User Notifications (Transient SignalR Push + Durable Inbox)","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Two bounds were added under the delivery model, from the 2026-09-07 security review. 1. A connection cap per user. NotificationHub refuses a connection once the caller already…"},"229":{"u":"/docs/adr/024-push-notifications.html#related","d":"ADR-024: Two-Channel User Notifications (Transient SignalR Push + Durable Inbox)","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (the outbox dual-dispatch path, which is distinct: that carries service-to-service integration events, this carries user-facing notifications), ADR-004 (the /hubs…"},"230":{"u":"/docs/adr/024-push-notifications.html#revision-2026-08-07","d":"ADR-024: Two-Channel User Notifications (Transient SignalR Push + Durable Inbox)","k":"Architecture Decision Records","t":"Revision (2026-08-07)","x":"Records transactional email, a delivery path the channel model above never mentions. The decision is unchanged: this closes a documentation gap so the asymmetry reads as…"},"231":{"u":"/docs/adr/024-push-notifications.html#revision-2026-10-01","d":"ADR-024: Two-Channel User Notifications (Transient SignalR Push + Durable Inbox)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The opt-in deduplication key is now scoped to the sender. SendPushNotificationHandler no longer stores or looks up the client-supplied DedupKey as-is: it derives the persisted…"},"232":{"u":"/docs/adr/025-startup-warmup-readiness.html","d":"ADR-025: Startup Warm-Up and Readiness Gating for Cold-Start Mitigation","k":"Architecture Decision Records"},"233":{"u":"/docs/adr/025-startup-warmup-readiness.html#status","d":"ADR-025: Startup Warm-Up and Readiness Gating for Cold-Start Mitigation","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-27). Revised 2026-07-28: /health/ready now excludes optional-tagged checks as well as live-tagged ones (see Decision), and the absence of a warm-up timeout was…"},"234":{"u":"/docs/adr/025-startup-warmup-readiness.html#context","d":"ADR-025: Startup Warm-Up and Readiness Gating for Cold-Start Mitigation","k":"Architecture Decision Records","t":"Context","x":"On the Azure Container Apps Consumption plan a replica that has been idle is CPU-throttled, and a scale-from-zero or scaled-out replica starts cold. The first authenticated…"},"235":{"u":"/docs/adr/025-startup-warmup-readiness.html#decision","d":"ADR-025: Startup Warm-Up and Readiness Gating for Cold-Start Mitigation","k":"Architecture Decision Records","t":"Decision","x":"Ship a small warm-up subsystem in MMCA.Common.Aspire, wired into AddServiceDefaults() so every host gets it. - A readiness gate that starts closed. WarmupReadinessGate…"},"236":{"u":"/docs/adr/025-startup-warmup-readiness.html#rationale","d":"ADR-025: Startup Warm-Up and Readiness Gating for Cold-Start Mitigation","k":"Architecture Decision Records","t":"Rationale","x":"- Keep cold replicas out of rotation, briefly. Gating readiness on warm-up means the platform does not send a user request to a replica that is still doing its first handshakes,…"},"237":{"u":"/docs/adr/025-startup-warmup-readiness.html#trade-offs","d":"ADR-025: Startup Warm-Up and Readiness Gating for Cold-Start Mitigation","k":"Architecture Decision Records","t":"Trade-offs","x":"- A replica can enter rotation not fully warm. The gate is opened in a finally once the Task.WhenAll over every registered task returns, that is, once each task has completed,…"},"238":{"u":"/docs/adr/025-startup-warmup-readiness.html#revision-2026-10-01","d":"ADR-025: Startup Warm-Up and Readiness Gating for Cold-Start Mitigation","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Citations were refreshed: the /health/ready predicate, the MapCachedHealthChecks helper and the uncached /alive mapping now live in…"},"239":{"u":"/docs/adr/025-startup-warmup-readiness.html#related","d":"ADR-025: Startup Warm-Up and Readiness Gating for Cold-Start Mitigation","k":"Architecture Decision Records","t":"Related","x":"ADR-004 (the OIDC discovery document the built-in task pre-fetches, and the auth-side view of the same cold-start), ADR-009 (the Polly resilience pipeline that absorbs the lazy…"},"240":{"u":"/docs/adr/026-caching-strategy.html","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records"},"241":{"u":"/docs/adr/026-caching-strategy.html#status","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-27, amended 2026-07-10, 2026-07-23, 2026-07-25, 2026-08-14). Amended by ADR-077 (2026-08-13): Tier 1's substrate gains a third, opt-in implementation…"},"242":{"u":"/docs/adr/026-caching-strategy.html#context","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Context","x":"The framework needs caching in two distinct places. Inside the application pipeline, query results are memoized and invalidated on mutation (the Caching decorators of ADR-014,…"},"243":{"u":"/docs/adr/026-caching-strategy.html#decision","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Decision","x":"Cache in two tiers, each with its own substrate. - One abstraction. ICacheService (MMCA.Common.Application/Interfaces/ICacheService.cs) exposes GetAsync / SetAsync / RemoveAsync…"},"244":{"u":"/docs/adr/026-caching-strategy.html#rationale","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Rationale","x":"- One substrate, swapped by environment. Keeping ICacheService as the only thing application code sees lets the deployment decide memory vs distributed. The auto-swap (presence…"},"245":{"u":"/docs/adr/026-caching-strategy.html#trade-offs","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Trade-offs","x":"- Memory mode is per-replica. In the in-process store each replica caches independently; a scaled-out deployment that did not wire Redis would see cross-replica staleness bounded…"},"246":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-09-07","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Four changes from the 2026-09-07 security review. The tiers themselves are unchanged. 1. Tier-1 keys are caller-scoped where the result is caller-scoped (SEC-Common-19 /…"},"247":{"u":"/docs/adr/026-caching-strategy.html#related","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Related","x":"ADR-014 (the Caching decorators and IQueryCacheable / ICacheInvalidating markers that consume this substrate), ADR-019 (output caching as the anonymous-traffic lever, and…"},"248":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-07-24","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-07-24)","x":"Three substrate corrections from a code review. 1. An optional key namespace (Cache:KeyPrefix). Services sharing one cache instance also share one keyspace, and nothing stopped…"},"249":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-07-25","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-07-25)","x":"An audit against the code. No behavior changed; the ADR text did. 1. The IncrementAsync entry above was wrong. It described a Redis INCR override. There is no such override, and…"},"250":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-07-28","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-07-28)","x":"Line anchors only, re-verified against the current source. No decision, no behavior, and no substantive prose changed. 1. Tier 2. Store Catalog's…"},"251":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-08-01","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-08-01)","x":"Line anchors only, re-verified against the current source. No decision, no behavior, and no substantive prose changed. 1. AddCaching. Now at…"},"252":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-08-07","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-08-07)","x":"Line anchors only, re-verified against the current source. No decision, no behavior, and no substantive prose changed. 1. AddCaching. Now at…"},"253":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-08-13","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-08-13)","x":"Tier 1 is amended by ADR-077, which is where the decision and its trade-offs are recorded. The three points that change the reading of this record: 1. A third substrate, opted…"},"254":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-08-14","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-08-14)","x":"One substrate correction plus a line-anchor re-verification. No decision and no behavior changed. 1. The 30-second default now has a named home, CacheOptions.DefaultDuration.…"},"255":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-08-18","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"Every previous revision moved Tier 1. This one moves Tier 2, and it is the first change to the output-cache edge since ADR-040. Tier 2 as decided here is per-process by…"},"256":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-08-23","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-08-23)","x":"One correction of substance plus a line-anchor re-verification. No decision and no behavior changed. 1. The counter trade-off now names the contradiction a reader will hit.…"},"257":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-08-31","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-08-31)","x":"Line anchors only, re-verified against the current source. No decision, no behavior, and no substantive prose changed. 1. AddCaching. Now at…"},"258":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-09-01","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-09-01)","x":"One amendment of substance (an optional third tier is recorded) plus line anchors for the files the 2026-08-31 entry did not re-read. No behavior changed, and neither server tier…"},"259":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-09-03","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-09-03)","x":"Two substrate corrections plus a line-anchor and file-path re-verification. No decision changed; what changed is where the wiring lives and which substrate the applications…"},"260":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-09-25","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-09-25)","x":"One wiring convergence, one count correction, and a line-anchor re-verification of the service call sites and the substrate registrations. No decision changed, and the ADC-only…"},"261":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-10-01","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"One wiring correction, one recorded client-tier detail, and a line-anchor re-verification. No decision and no rationale changed. 1. The hybrid opt-in is a framework helper now,…"},"262":{"u":"/docs/adr/027-multi-locale-i18n.html","d":"ADR-027: Multi-Locale Internationalization (Supersedes ADR-011)","k":"Architecture Decision Records"},"263":{"u":"/docs/adr/027-multi-locale-i18n.html#status","d":"ADR-027: Multi-Locale Internationalization (Supersedes ADR-011)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-27, amended 2026-07-02, 2026-07-03, 2026-07-09, 2026-07-29, and 2026-09-15: the MudBlazor localization interceptor is replaced so no dependency assigns the…"},"264":{"u":"/docs/adr/027-multi-locale-i18n.html#context","d":"ADR-027: Multi-Locale Internationalization (Supersedes ADR-011)","k":"Architecture Decision Records","t":"Context","x":"ADR-011 recorded single-locale (en-US) as a deliberate, revisitable non-goal and sketched what re-introducing i18n would entail. That revisit has now happened: the framework adds…"},"265":{"u":"/docs/adr/027-multi-locale-i18n.html#decision","d":"ADR-027: Multi-Locale Internationalization (Supersedes ADR-011)","k":"Architecture Decision Records","t":"Decision","x":"1. Supported cultures are an explicit allowlist: en-US (default) + es. Adding a locale is adding a .es.resx sibling set and one allowlist entry, not new infrastructure. 2.…"},"266":{"u":"/docs/adr/027-multi-locale-i18n.html#rationale","d":"ADR-027: Multi-Locale Internationalization (Supersedes ADR-011)","k":"Architecture Decision Records","t":"Rationale","x":"- Keying error localization on the existing Error.Code is the cheapest correct extension point. The codes are already stable and already cross the wire; localizing at the edge…"},"267":{"u":"/docs/adr/027-multi-locale-i18n.html#trade-offs","d":"ADR-027: Multi-Locale Internationalization (Supersedes ADR-011)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Every view and every user-facing message is touched: a large, mostly mechanical sweep, accepted as the cost ADR-011 always named. - WASM Spanish formatting needs ICU…"},"268":{"u":"/docs/adr/027-multi-locale-i18n.html#revision-2026-10-01","d":"ADR-027: Multi-Locale Internationalization (Supersedes ADR-011)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; four statements were corrected to match the code and several citations were refreshed. Decision 2: the composite-key example now matches the…"},"269":{"u":"/docs/adr/027-multi-locale-i18n.html#related","d":"ADR-027: Multi-Locale Internationalization (Supersedes ADR-011)","k":"Architecture Decision Records","t":"Related","x":"ADR-011 (superseded), ADR-013 (the Error.Code this localizes on), ADR-015 (the i18n gates now live here: the MA0076 culture-less formatting build gate and the…"},"270":{"u":"/docs/adr/028-dark-theme-mode.html","d":"ADR-028: Day/Dark Theme Mode","k":"Architecture Decision Records"},"271":{"u":"/docs/adr/028-dark-theme-mode.html#status","d":"ADR-028: Day/Dark Theme Mode","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-27; revised 2026-07-15; revised 2026-08-31)."},"272":{"u":"/docs/adr/028-dark-theme-mode.html#context","d":"ADR-028: Day/Dark Theme Mode","k":"Architecture Decision Records","t":"Context","x":"MMCATheme (MMCA.Common.UI/Theme/MMCATheme.cs) has always defined a complete, brand-tuned PaletteDark alongside PaletteLight, but MudThemeProvider was hard-wired to light: no…"},"273":{"u":"/docs/adr/028-dark-theme-mode.html#decision","d":"ADR-028: Day/Dark Theme Mode","k":"Architecture Decision Records","t":"Decision","x":"1. Bind the existing theme. The shared MainLayout renders a single component (MMCA.Common.UI/Layout/MainLayout.razor:14), which owns the four Mud providers plus the Day/Dark…"},"274":{"u":"/docs/adr/028-dark-theme-mode.html#rationale","d":"ADR-028: Day/Dark Theme Mode","k":"Architecture Decision Records","t":"Rationale","x":"- Reusing the i18n cookie/profile machinery means one persistence model for both user preferences, instead of two subtly different ones. Theme and locale are the same shape of…"},"275":{"u":"/docs/adr/028-dark-theme-mode.html#trade-offs","d":"ADR-028: Day/Dark Theme Mode","k":"Architecture Decision Records","t":"Trade-offs","x":"- The same FOUC hazard as locale is not yet closed for theme. The SSR data-theme/inline-script read is unimplemented (Decision 3), so the first paint can briefly flash the wrong…"},"276":{"u":"/docs/adr/028-dark-theme-mode.html#revision-2026-10-01","d":"ADR-028: Day/Dark Theme Mode","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Anchor refresh only: no decision or rationale changed. The snackbar live-region wrapper above the @code block moved the MmcaThemeProviders members, so the Theme parameter, the…"},"277":{"u":"/docs/adr/028-dark-theme-mode.html#related","d":"ADR-028: Day/Dark Theme Mode","k":"Architecture Decision Records","t":"Related","x":"ADR-027 (shares the cookie source-of-truth and the User preference migration, and is the model for the theme no-flash SSR bootstrap that is not yet wired), ADR-022 (the SSR…"},"278":{"u":"/docs/adr/029-authentication-brute-force-protection.html","d":"ADR-029: Authentication Brute-Force Protection and Registration Throttling","k":"Architecture Decision Records"},"279":{"u":"/docs/adr/029-authentication-brute-force-protection.html#status","d":"ADR-029: Authentication Brute-Force Protection and Registration Throttling","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-27). Updated 2026-07-02 (the check/increment/reset call sequence was hoisted into AuthenticationServiceBase ; the adoption note and the \"convention the consumer…"},"280":{"u":"/docs/adr/029-authentication-brute-force-protection.html#context","d":"ADR-029: Authentication Brute-Force Protection and Registration Throttling","k":"Architecture Decision Records","t":"Context","x":"ADR-019's global rate limiter is principal-keyed: it caps requests per authenticated principal, and anonymous traffic is exempt with one metered exception, the configured…"},"281":{"u":"/docs/adr/029-authentication-brute-force-protection.html#decision","d":"ADR-029: Authentication Brute-Force Protection and Registration Throttling","k":"Architecture Decision Records","t":"Decision","x":"Provide a framework ILoginProtectionService (MMCA.Common.Application.Auth) with a single implementation LoginProtectionService (MMCA.Common.Infrastructure.Auth), registered…"},"282":{"u":"/docs/adr/029-authentication-brute-force-protection.html#rationale","d":"ADR-029: Authentication Brute-Force Protection and Registration Throttling","k":"Architecture Decision Records","t":"Rationale","x":"- Complements ADR-019 rather than duplicating it. ADR-019 carries two limiter layers and this is the third on top of them: its global limiter caps authenticated throughput per…"},"283":{"u":"/docs/adr/029-authentication-brute-force-protection.html#trade-offs","d":"ADR-029: Authentication Brute-Force Protection and Registration Throttling","k":"Architecture Decision Records","t":"Trade-offs","x":"- Cache-scoped state weakens under scale-out without Redis. In memory mode the counters are per-replica and evaporate on restart, so a multi-replica deployment that did not wire…"},"284":{"u":"/docs/adr/029-authentication-brute-force-protection.html#revision-2026-09-07","d":"ADR-029: Authentication Brute-Force Protection and Registration Throttling","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The lockout model is unchanged. Three things about the order and cost of the login path changed, all from the 2026-09-07 security review. 1. The account-state gate runs after the…"},"285":{"u":"/docs/adr/029-authentication-brute-force-protection.html#revision-2026-10-01","d":"ADR-029: Authentication Brute-Force Protection and Registration Throttling","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The login lockout and registration throttle are unchanged. Two current-state statements were corrected. First, ResetPasswordHandlerBase is no longer the only framework call site…"},"286":{"u":"/docs/adr/029-authentication-brute-force-protection.html#alternatives-rejected","d":"ADR-029: Authentication Brute-Force Protection and Registration Throttling","k":"Architecture Decision Records","t":"Alternatives rejected","x":"- Making the failed-attempt and registration counters atomic. The increment in DistributedCacheService.IncrementAsync is a read-modify-write through IDistributedCache and is…"},"287":{"u":"/docs/adr/029-authentication-brute-force-protection.html#related","d":"ADR-029: Authentication Brute-Force Protection and Registration Throttling","k":"Architecture Decision Records","t":"Related","x":"ADR-019 (the layered limiter: a principal-keyed global cap that exempts this anonymous surface, its one metered anonymous exception being the real-time hub paths, plus the per-IP…"},"288":{"u":"/docs/adr/030-startup-sole-migrator.html","d":"ADR-030: Each Service Self-Applies Its Migrations at Startup (Sole Migrator)","k":"Architecture Decision Records"},"289":{"u":"/docs/adr/030-startup-sole-migrator.html#status","d":"ADR-030: Each Service Self-Applies Its Migrations at Startup (Sole Migrator)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-27)."},"290":{"u":"/docs/adr/030-startup-sole-migrator.html#context","d":"ADR-030: Each Service Self-Applies Its Migrations at Startup (Sole Migrator)","k":"Architecture Decision Records","t":"Context","x":"Under database-per-service (ADR-006), each service owns its own database and its own migrations project, so something must apply pending migrations on every deploy. The…"},"291":{"u":"/docs/adr/030-startup-sole-migrator.html#decision","d":"ADR-030: Each Service Self-Applies Its Migrations at Startup (Sole Migrator)","k":"Architecture Decision Records","t":"Decision","x":"In Azure Container Apps, every service host runs ApplicationSettingsDatabaseInitStrategy = Migrate in production and is the sole migrator of its own database: it applies its…"},"292":{"u":"/docs/adr/030-startup-sole-migrator.html#rationale","d":"ADR-030: Each Service Self-Applies Its Migrations at Startup (Sole Migrator)","k":"Architecture Decision Records","t":"Rationale","x":"- One migrator, one mechanism. The code that owns the schema applies the schema; there is no second tool to keep in lockstep and no ordering race between a deploy step and…"},"293":{"u":"/docs/adr/030-startup-sole-migrator.html#trade-offs","d":"ADR-030: Each Service Self-Applies Its Migrations at Startup (Sole Migrator)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Auto-migrate-in-production is what \"None\" exists to prevent. An unintended or destructive migration would ship itself on the next deploy. The apps accept this; the build-time…"},"294":{"u":"/docs/adr/030-startup-sole-migrator.html#related","d":"ADR-030: Each Service Self-Applies Its Migrations at Startup (Sole Migrator)","k":"Architecture Decision Records","t":"Related","x":"ADR-006 (database-per-service: why each service owns and migrates its own database), ADR-025 (readiness gating keeps traffic off a still-migrating replica), ADR-009 (RTO/RPO +…"},"295":{"u":"/docs/adr/030-startup-sole-migrator.html#revision-2026-08-07","d":"ADR-030: Each Service Self-Applies Its Migrations at Startup (Sole Migrator)","k":"Architecture Decision Records","t":"Revision (2026-08-07)","x":"The sole-migrator decision extends to seed data: the same startup owner that applies the schema also runs the module seeders, in the same call, on the same boot. The Decision…"},"296":{"u":"/docs/adr/030-startup-sole-migrator.html#revision-2026-10-01","d":"ADR-030: Each Service Self-Applies Its Migrations at Startup (Sole Migrator)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed: every service host still sets DatabaseInitStrategy = 'Migrate' in production and remains the sole migrator of its database. The Context now…"},"297":{"u":"/docs/adr/031-feature-flag-management.html","d":"ADR-031: Config-Driven Feature Flags with Dual-Surface Enforcement","k":"Architecture Decision Records"},"298":{"u":"/docs/adr/031-feature-flag-management.html#status","d":"ADR-031: Config-Driven Feature Flags with Dual-Surface Enforcement","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-27). Revised 2026-08-18 (a targeting-context accessor is now registered, so the built-in Targeting and Percentage filters give consistent per-user bucketing…"},"299":{"u":"/docs/adr/031-feature-flag-management.html#context","d":"ADR-031: Config-Driven Feature Flags with Dual-Surface Enforcement","k":"Architecture Decision Records","t":"Context","x":"The apps need to decouple release from deploy: ship code dark, flip a kill switch, or roll a feature out to a percentage of users without a redeploy. A flag has to be enforceable…"},"300":{"u":"/docs/adr/031-feature-flag-management.html#decision","d":"ADR-031: Config-Driven Feature Flags with Dual-Surface Enforcement","k":"Architecture Decision Records","t":"Decision","x":"Standardize on Microsoft.FeatureManagement, configured from the \"FeatureManagement\" configuration section and registered once in AddAPI (services.AddFeatureManagement() +…"},"301":{"u":"/docs/adr/031-feature-flag-management.html#rationale","d":"ADR-031: Config-Driven Feature Flags with Dual-Surface Enforcement","k":"Architecture Decision Records","t":"Rationale","x":"- Release decoupled from deploy. A kill switch or a percentage rollout becomes a configuration change, not a code change: the central reason feature management exists. - Two…"},"302":{"u":"/docs/adr/031-feature-flag-management.html#trade-offs","d":"ADR-031: Config-Driven Feature Flags with Dual-Surface Enforcement","k":"Architecture Decision Records","t":"Trade-offs","x":"- The two enforcement points must agree. A flag gated on the controller but not the handler (or vice versa) is a half-protected feature; no fitness rule asserts both are wired,…"},"303":{"u":"/docs/adr/031-feature-flag-management.html#revision-2026-08-18","d":"ADR-031: Config-Driven Feature Flags with Dual-Surface Enforcement","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"Progressive rollout is now usable, because the targeting context exists. The Decision above listed the Percentage / TimeWindow / Targeting filters as \"available\", and the last…"},"304":{"u":"/docs/adr/031-feature-flag-management.html#related","d":"ADR-031: Config-Driven Feature Flags with Dual-Surface Enforcement","k":"Architecture Decision Records","t":"Related","x":"ADR-014 (the decorator pipeline whose outermost slot FeatureGate fills, and the ordering that puts it first, now with Authorization registered directly inside it so a disabled…"},"305":{"u":"/docs/adr/031-feature-flag-management.html#revision-2026-09-11","d":"ADR-031: Config-Driven Feature Flags with Dual-Surface Enforcement","k":"Architecture Decision Records","t":"Revision (2026-09-11)","x":"The expiry gap the Trade-offs recorded is closed. \"The framework provides no expiry or staleness check\" was true from this record's acceptance until now. What it cost was never…"},"306":{"u":"/docs/adr/031-feature-flag-management.html#revision-2026-10-01","d":"ADR-031: Config-Driven Feature Flags with Dual-Surface Enforcement","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The disabled response is not-found, but not anonymous. The Decision and Rationale said both surfaces emit the HandleFailure not-found shape, so a disabled feature is…"},"307":{"u":"/docs/adr/032-password-hashing.html","d":"ADR-032: Password Hashing (PBKDF2-HMAC-SHA512) with Legacy-Hash Backward Compatibility","k":"Architecture Decision Records"},"308":{"u":"/docs/adr/032-password-hashing.html#status","d":"ADR-032: Password Hashing (PBKDF2-HMAC-SHA512) with Legacy-Hash Backward Compatibility","k":"Architecture Decision Records","t":"Status","x":"Superseded by ADR-102 (2026-08-31). Originally Accepted (2026-06-29, adoption note revised 2026-07-06, registration note revised 2026-08-01, call-site hoist recorded 2026-08-23).…"},"309":{"u":"/docs/adr/032-password-hashing.html#context","d":"ADR-032: Password Hashing (PBKDF2-HMAC-SHA512) with Legacy-Hash Backward Compatibility","k":"Architecture Decision Records","t":"Context","x":"Identity stores a credential as a (salt, hash) pair, never plaintext. The framework needs one canonical hasher that every consuming Identity flow shares, so the key-derivation…"},"310":{"u":"/docs/adr/032-password-hashing.html#decision","d":"ADR-032: Password Hashing (PBKDF2-HMAC-SHA512) with Legacy-Hash Backward Compatibility","k":"Architecture Decision Records","t":"Decision","x":"Provide a single IPasswordHasher (MMCA.Common.Application.Interfaces.Infrastructure, IPasswordHasher.cs:6) with one implementation PasswordHasher…"},"311":{"u":"/docs/adr/032-password-hashing.html#rationale","d":"ADR-032: Password Hashing (PBKDF2-HMAC-SHA512) with Legacy-Hash Backward Compatibility","k":"Architecture Decision Records","t":"Rationale","x":"- One framework-owned primitive, not per-app crypto. Putting the algorithm, work factor, salt size, and comparison in a single shared type means a future hardening (raising…"},"312":{"u":"/docs/adr/032-password-hashing.html#trade-offs","d":"ADR-032: Password Hashing (PBKDF2-HMAC-SHA512) with Legacy-Hash Backward Compatibility","k":"Architecture Decision Records","t":"Trade-offs","x":"- The legacy branch is a permanent correctness dependency that looks deletable. Its load-bearing role is invisible from the method body alone, so it is the single most…"},"313":{"u":"/docs/adr/032-password-hashing.html#related","d":"ADR-032: Password Hashing (PBKDF2-HMAC-SHA512) with Legacy-Hash Backward Compatibility","k":"Architecture Decision Records","t":"Related","x":"ADR-004 (cross-service JWT / JWKS authentication: the hasher gates credential verification that issues the tokens that ADR-004 then validates across services), ADR-005…"},"314":{"u":"/docs/adr/032-password-hashing.html#revision-2026-08-23","d":"ADR-032: Password Hashing (PBKDF2-HMAC-SHA512) with Legacy-Hash Backward Compatibility","k":"Architecture Decision Records","t":"Revision (2026-08-23)","x":"The decision is unchanged: one framework-owned IPasswordHasher, PBKDF2-HMAC-SHA512 for new passwords, salt-length dispatch on verification. What changed is where the last two…"},"315":{"u":"/docs/adr/033-resource-ownership-authorization.html","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records"},"316":{"u":"/docs/adr/033-resource-ownership-authorization.html#status","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-02, revised 2026-07-25, 2026-08-01, 2026-08-31). Revised 2026-10-01 (the fail-closed owner gate and the per-record ownership check are now framework code in…"},"317":{"u":"/docs/adr/033-resource-ownership-authorization.html#context","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records","t":"Context","x":"ADR-020 added a permission (capability) layer over RBAC: it answers \"what may this role do\", resolving a role to a permission so an endpoint can require a capability instead of a…"},"318":{"u":"/docs/adr/033-resource-ownership-authorization.html#decision","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records","t":"Decision","x":"Provide a row/resource-level ownership axis in MMCA.Common.API (the Authorization folder), with two enforcement points keyed on the caller's owner claim (customerid by default)…"},"319":{"u":"/docs/adr/033-resource-ownership-authorization.html#rationale","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records","t":"Rationale","x":"- Reject-one and filter-many are genuinely two mechanisms. A single-resource route has an id to compare, so a short action filter that 403s on a mismatch is the cheapest correct…"},"320":{"u":"/docs/adr/033-resource-ownership-authorization.html#trade-offs","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Opt-in per controller/handler. Neither point is automatic: a controller that forgets the [ServiceFilter] or omits the ownership spec from a query leaks across customers, the…"},"321":{"u":"/docs/adr/033-resource-ownership-authorization.html#related","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records","t":"Related","x":"ADR-020 (the role/permission RBAC layer this complements, and whose explicit 020-permission-based-authorization.md:159-160 scope-out this fills), ADR-034 (the generic entity…"},"322":{"u":"/docs/adr/033-resource-ownership-authorization.html#revision-2026-07-25","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records","t":"Revision (2026-07-25)","x":"An audit against the code. No behavior changed; the ADR text did. 1. The per-mutation check's failure shape was described as one branch, and it is two. ValidateOwnershipAsync was…"},"323":{"u":"/docs/adr/033-resource-ownership-authorization.html#revision-2026-08-01","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records","t":"Revision (2026-08-01)","x":"Anchor-only correction. No behavior changed; OrdersController was refactored (a constructor parameter added, GetOwnershipSpecification() and the IsAdmin property extracted,…"},"324":{"u":"/docs/adr/033-resource-ownership-authorization.html#revision-2026-08-31","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records","t":"Revision (2026-08-31)","x":"Behavior changed on both adopters since the 2026-08-01 pass, so this is not an anchor refresh. 1. The ambiguous null specification is now gated.…"},"325":{"u":"/docs/adr/033-resource-ownership-authorization.html#revision-2026-09-10","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records","t":"Revision (2026-09-10)","x":"ADC adopts both enforcement points, so the \"Engagement Bookmarks only\" framing above is no longer the whole inventory. The Adoption text describes ADC through the action-filter…"},"326":{"u":"/docs/adr/033-resource-ownership-authorization.html#revision-2026-10-01","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The fail-closed gate this record named as a candidate for extraction (Revision 2026-09-10, item 3) is now framework code. MMCA.Common v1.216.0 (MMCA.Common/CHANGELOG.md:26) adds…"},"327":{"u":"/docs/adr/034-generic-entity-query-layer.html","d":"ADR-034: Generic Entity Controllers with a Dynamic Query Contract","k":"Architecture Decision Records"},"328":{"u":"/docs/adr/034-generic-entity-query-layer.html#status","d":"ADR-034: Generic Entity Controllers with a Dynamic Query Contract","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-30). Amended (2026-07-23): the filter strategy registry now also covers long/long? via LongFilterStrategy. Amended (2026-07-25): the keyed by-id fast path is…"},"329":{"u":"/docs/adr/034-generic-entity-query-layer.html#context","d":"ADR-034: Generic Entity Controllers with a Dynamic Query Contract","k":"Architecture Decision Records","t":"Context","x":"Every module exposes many entities, and most of them need the same read and write surface: list, page, look up for a dropdown, fetch by id, create, delete. Hand writing a…"},"330":{"u":"/docs/adr/034-generic-entity-query-layer.html#decision","d":"ADR-034: Generic Entity Controllers with a Dynamic Query Contract","k":"Architecture Decision Records","t":"Decision","x":"Give every entity a generic REST resource surface and a bounded dynamic query contract, supplied by two controller bases over a shared query pipeline. 1. Generic read controller.…"},"331":{"u":"/docs/adr/034-generic-entity-query-layer.html#rationale","d":"ADR-034: Generic Entity Controllers with a Dynamic Query Contract","k":"Architecture Decision Records","t":"Rationale","x":"- Write the resource surface once, inherit it everywhere. The verbs, routes, filter contract, pagination, and header are defined once on the two bases; a concrete controller…"},"332":{"u":"/docs/adr/034-generic-entity-query-layer.html#trade-offs","d":"ADR-034: Generic Entity Controllers with a Dynamic Query Contract","k":"Architecture Decision Records","t":"Trade-offs","x":"- The wire contract tracks the entity model. Filterable, sortable, and projectable surface is the entity's property set. A model change is an API change unless mediated by the…"},"333":{"u":"/docs/adr/034-generic-entity-query-layer.html#revision-2026-09-07","d":"ADR-034: Generic Entity Controllers with a Dynamic Query Contract","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The query layer's shape is unchanged. What a caller is allowed to name is not, from the 2026-09-07 security review. 1. Client keys resolve against the DTO contract (SEC-Common-25…"},"334":{"u":"/docs/adr/034-generic-entity-query-layer.html#related","d":"ADR-034: Generic Entity Controllers with a Dynamic Query Contract","k":"Architecture Decision Records","t":"Related","x":"ADR-001 (manual DTO mapping: the generic controllers project through IEntityDTOMapper), ADR-002 (navigation populators: the unsupported-include path), ADR-013 (Result pattern at…"},"335":{"u":"/docs/adr/034-generic-entity-query-layer.html#revision-2026-07-24","d":"ADR-034: Generic Entity Controllers with a Dynamic Query Contract","k":"Architecture Decision Records","t":"Revision (2026-07-24)","x":"Filter and pagination corrections from a code review. The contract shape is unchanged; these close cases where the engine widened a result set instead of narrowing it, or…"},"336":{"u":"/docs/adr/034-generic-entity-query-layer.html#revision-2026-07-25","d":"ADR-034: Generic Entity Controllers with a Dynamic Query Contract","k":"Architecture Decision Records","t":"Revision (2026-07-25)","x":"Citation maintenance from an ADR audit. No decision or behavior changed; the source anchors above were rebased to their current declaration and call-site lines. 1. The fast-path…"},"337":{"u":"/docs/adr/034-generic-entity-query-layer.html#revision-2026-10-01","d":"ADR-034: Generic Entity Controllers with a Dynamic Query Contract","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; this records clarifications and refreshed citations from an ADR audit. 1. MaxPageSize is clamped to the pipeline ceiling. The resolved setting…"},"338":{"u":"/docs/adr/035-optimistic-concurrency.html","d":"ADR-035: Optimistic Concurrency via RowVersion Round-Trip","k":"Architecture Decision Records"},"339":{"u":"/docs/adr/035-optimistic-concurrency.html#status","d":"ADR-035: Optimistic Concurrency via RowVersion Round-Trip","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-02). Revised 2026-09-07 (a conditional write always stamps the aggregate root, so If-Match is enforced even when only child rows changed, and a…"},"340":{"u":"/docs/adr/035-optimistic-concurrency.html#context","d":"ADR-035: Optimistic Concurrency via RowVersion Round-Trip","k":"Architecture Decision Records","t":"Context","x":"Every mutable aggregate in the framework is edited through a load-modify-save handler: the update use case fetches the tracked entity, applies the request, and calls…"},"341":{"u":"/docs/adr/035-optimistic-concurrency.html#decision","d":"ADR-035: Optimistic Concurrency via RowVersion Round-Trip","k":"Architecture Decision Records","t":"Decision","x":"Give every auditable entity a database-managed RowVersion concurrency token, round-trip it through the client as an HTTP entity tag, and stamp the client's last-seen value as…"},"342":{"u":"/docs/adr/035-optimistic-concurrency.html#rationale","d":"ADR-035: Optimistic Concurrency via RowVersion Round-Trip","k":"Architecture Decision Records","t":"Rationale","x":"- Database-managed token over a hand-maintained version field. A SQL Server rowversion auto-increments on the server on every write; no domain code sets or reads it (the setter…"},"343":{"u":"/docs/adr/035-optimistic-concurrency.html#trade-offs","d":"ADR-035: Optimistic Concurrency via RowVersion Round-Trip","k":"Architecture Decision Records","t":"Trade-offs","x":"- The rewrite keys on the conflict outcome, not on its cause. The filter turns any 409 result the action returns under an If-Match request into a 412…"},"344":{"u":"/docs/adr/035-optimistic-concurrency.html#revision-2026-09-07","d":"ADR-035: Optimistic Concurrency via RowVersion Round-Trip","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Two additions from the 2026-09-07 security review. 1. If-Match is enforced even when the root row is otherwise unchanged (SEC-Common-77). IWriteRepository.TouchConcurrencyToken…"},"345":{"u":"/docs/adr/035-optimistic-concurrency.html#revision-2026-10-01","d":"ADR-035: Optimistic Concurrency via RowVersion Round-Trip","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision changed; three current-state statements were corrected and stale citations refreshed. (1) Only tables mapped from an auditable entity carry RowVersion; the…"},"346":{"u":"/docs/adr/035-optimistic-concurrency.html#related","d":"ADR-035: Optimistic Concurrency via RowVersion Round-Trip","k":"Architecture Decision Records","t":"Related","x":"ADR-017 (HTTP request idempotency, which dedups retries of the same request, the mirror-image concern to two distinct edits racing here, and whose declared-intent gate sits at…"},"347":{"u":"/docs/adr/036-external-oauth-login.html","d":"ADR-036: External OAuth Login (Federated Google/GitHub/Apple) with Local-JWT Exchange","k":"Architecture Decision Records"},"348":{"u":"/docs/adr/036-external-oauth-login.html#status","d":"ADR-036: External OAuth Login (Federated Google/GitHub/Apple) with Local-JWT Exchange","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-02, migration attribution corrected 2026-07-06, native-callback redirect branch added 2026-07-17 per ADR-043, email-verified account-takeover guard before…"},"349":{"u":"/docs/adr/036-external-oauth-login.html#context","d":"ADR-036: External OAuth Login (Federated Google/GitHub/Apple) with Local-JWT Exchange","k":"Architecture Decision Records","t":"Context","x":"The framework's Identity story so far is entirely first-party: a user registers with an email and password, the credentials are hashed (ADR-032), and Identity mints its own RS256…"},"350":{"u":"/docs/adr/036-external-oauth-login.html#decision","d":"ADR-036: External OAuth Login (Federated Google/GitHub/Apple) with Local-JWT Exchange","k":"Architecture Decision Records","t":"Decision","x":"Add an opt-in external-login path that federates Google, GitHub and Apple sign-in at the edge and immediately exchanges the external identity for the app's own local JWT pair,…"},"351":{"u":"/docs/adr/036-external-oauth-login.html#rationale","d":"ADR-036: External OAuth Login (Federated Google/GitHub/Apple) with Local-JWT Exchange","k":"Architecture Decision Records","t":"Rationale","x":"- Terminate federation at the edge, keep one internal identity. Exchanging the external principal for a local JWT the moment the callback returns means every downstream concern…"},"352":{"u":"/docs/adr/036-external-oauth-login.html#trade-offs","d":"ADR-036: External OAuth Login (Federated Google/GitHub/Apple) with Local-JWT Exchange","k":"Architecture Decision Records","t":"Trade-offs","x":"- Opt-in per app, and easy to half-wire. The flow needs four cooperating pieces (scheme registration, the controller subclass, the service override, and the OAuthUIBaseUrl…"},"353":{"u":"/docs/adr/036-external-oauth-login.html#revision-2026-09-07","d":"ADR-036: External OAuth Login (Federated Google/GitHub/Apple) with Local-JWT Exchange","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Four changes from the 2026-09-07 security review. 1. The empty credential an external account carries is explicitly non-authenticating (SEC-Common-01). This record already said…"},"354":{"u":"/docs/adr/036-external-oauth-login.html#revision-2026-10-01","d":"ADR-036: External OAuth Login (Federated Google/GitHub/Apple) with Local-JWT Exchange","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Anchor refresh only: no decision or rationale changed. The Decision and Trade-offs citations into ADC's AuthenticationService.cs are re-anchored to the current file…"},"355":{"u":"/docs/adr/036-external-oauth-login.html#related","d":"ADR-036: External OAuth Login (Federated Google/GitHub/Apple) with Local-JWT Exchange","k":"Architecture Decision Records","t":"Related","x":"ADR-004 (the RS256/JWKS token this flow exchanges the external identity for, and validates everywhere after), ADR-022 (the browser cookies that carry the resulting session),…"},"356":{"u":"/docs/adr/037-field-level-encryption-at-rest.html","d":"ADR-037: Field-Level Encryption at Rest (AES-256-GCM EF Converter)","k":"Architecture Decision Records"},"357":{"u":"/docs/adr/037-field-level-encryption-at-rest.html#status","d":"ADR-037: Field-Level Encryption at Rest (AES-256-GCM EF Converter)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-06; revised 2026-07-24, 2026-07-25, 2026-08-15, 2026-08-18). Revised 2026-08-18: the versioned-envelope converter is no longer unpublished, it is included in…"},"358":{"u":"/docs/adr/037-field-level-encryption-at-rest.html#context","d":"ADR-037: Field-Level Encryption at Rest (AES-256-GCM EF Converter)","k":"Architecture Decision Records","t":"Context","x":"Transparent database encryption (TDE) protects the data files as a whole, but it decrypts transparently for anyone who can query the database, so a leaked backup restored on a…"},"359":{"u":"/docs/adr/037-field-level-encryption-at-rest.html#decision","d":"ADR-037: Field-Level Encryption at Rest (AES-256-GCM EF Converter)","k":"Architecture Decision Records","t":"Decision","x":"Provide a single framework-owned EF Core value converter that transparently encrypts string columns at rest with authenticated encryption, applied per property in an entity…"},"360":{"u":"/docs/adr/037-field-level-encryption-at-rest.html#rationale","d":"ADR-037: Field-Level Encryption at Rest (AES-256-GCM EF Converter)","k":"Architecture Decision Records","t":"Rationale","x":"- Authenticated, not merely confidential. AES-GCM binds a 128-bit tag to the ciphertext (EncryptedStringConverter.cs:81, :201), so a tampered or truncated value fails to decrypt…"},"361":{"u":"/docs/adr/037-field-level-encryption-at-rest.html#trade-offs","d":"ADR-037: Field-Level Encryption at Rest (AES-256-GCM EF Converter)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Latent today, proven by tests rather than production. The plumbing is complete and unit-tested, but no entity configuration wires it, so the encrypt/decrypt round-trip, the…"},"362":{"u":"/docs/adr/037-field-level-encryption-at-rest.html#related","d":"ADR-037: Field-Level Encryption at Rest (AES-256-GCM EF Converter)","k":"Architecture Decision Records","t":"Related","x":"ADR-005 (soft-delete vs erasure: the other sensitive-data control, which names this converter as the mechanism for erasure fields that must stay retrievable,…"},"363":{"u":"/docs/adr/037-field-level-encryption-at-rest.html#revision-2026-07-24","d":"ADR-037: Field-Level Encryption at Rest (AES-256-GCM EF Converter)","k":"Architecture Decision Records","t":"Revision (2026-07-24)","x":"Documented a constraint the converter always had but did not state: the ciphertext is non-deterministic. Every write uses a fresh random nonce, which is the correct property for…"},"364":{"u":"/docs/adr/037-field-level-encryption-at-rest.html#revision-2026-07-25","d":"ADR-037: Field-Level Encryption at Rest (AES-256-GCM EF Converter)","k":"Architecture Decision Records","t":"Revision (2026-07-25)","x":"Documentation-only correction, no behavior change. Item 1 of the Decision still illustrated the converter with builder.Property(e = e.Email), contradicting the 2026-07-24…"},"365":{"u":"/docs/adr/037-field-level-encryption-at-rest.html#revision-2026-08-15","d":"ADR-037: Field-Level Encryption at Rest (AES-256-GCM EF Converter)","k":"Architecture Decision Records","t":"Revision (2026-08-15)","x":"Behavior change, not a documentation correction. The stored layout is now a versioned envelope: Base64 of [key version (1)] [nonce (12)] [ciphertext (N)] [tag (16)] rather than…"},"366":{"u":"/docs/adr/037-field-level-encryption-at-rest.html#revision-2026-10-01","d":"ADR-037: Field-Level Encryption at Rest (AES-256-GCM EF Converter)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Anchor-only refresh; no decision, rationale or trade-off changed. The three citations of ADR-005 in Context, Trade-offs and Related now point at the record's canonical home and…"},"367":{"u":"/docs/adr/038-supply-chain-provenance.html","d":"ADR-038: Supply-Chain Provenance (SBOM Release Gate + Lock Files + Vulnerability Audit)","k":"Architecture Decision Records"},"368":{"u":"/docs/adr/038-supply-chain-provenance.html#status","d":"ADR-038: Supply-Chain Provenance (SBOM Release Gate + Lock Files + Vulnerability Audit)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-06; revised 2026-07-21). Revised 2026-09-07 (MMCA.Common pins every action by commit SHA and every global tool by version, restores in locked mode, fails the…"},"369":{"u":"/docs/adr/038-supply-chain-provenance.html#context","d":"ADR-038: Supply-Chain Provenance (SBOM Release Gate + Lock Files + Vulnerability Audit)","k":"Architecture Decision Records","t":"Context","x":"MMCA.Common is a published framework: on every v tag (release.yml:3-5) it packs its NuGet packages and pushes them to both GitHub Packages (release.yml:117-118) and nuget.org…"},"370":{"u":"/docs/adr/038-supply-chain-provenance.html#decision","d":"ADR-038: Supply-Chain Provenance (SBOM Release Gate + Lock Files + Vulnerability Audit)","k":"Architecture Decision Records","t":"Decision","x":"Treat supply-chain integrity as a set of build-gating controls, the same invariant-over-discipline posture ADR-015 applies to architecture rules. Four controls, each a hard gate:…"},"371":{"u":"/docs/adr/038-supply-chain-provenance.html#rationale","d":"ADR-038: Supply-Chain Provenance (SBOM Release Gate + Lock Files + Vulnerability Audit)","k":"Architecture Decision Records","t":"Rationale","x":"- Provenance is a gate, not a document. A hard-failing SBOM step means the bill of materials cannot silently go missing on a release: the artifact is produced or the release…"},"372":{"u":"/docs/adr/038-supply-chain-provenance.html#trade-offs","d":"ADR-038: Supply-Chain Provenance (SBOM Release Gate + Lock Files + Vulnerability Audit)","k":"Architecture Decision Records","t":"Trade-offs","x":"- The SBOM is generated and archived, not yet signed or attested (superseded 2026-09-22; see the Revision below). The gate proves a bill of materials exists for each release…"},"373":{"u":"/docs/adr/038-supply-chain-provenance.html#revision-2026-09-07","d":"ADR-038: Supply-Chain Provenance (SBOM Release Gate + Lock Files + Vulnerability Audit)","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The provenance chain gained the controls that make it reproducible under an attacker, from the 2026-09-07 security review. 1. Actions are pinned by commit SHA, not by a mutable…"},"374":{"u":"/docs/adr/038-supply-chain-provenance.html#revision-2026-09-22-attestations-and-one-implementation-of-each-gate","d":"ADR-038: Supply-Chain Provenance (SBOM Release Gate + Lock Files + Vulnerability Audit)","k":"Architecture Decision Records","t":"Revision (2026-09-22): attestations, and one implementation of each gate","x":"Two of the trade-offs above have moved. First, every .nupkg a release packs now carries a signed SLSA build-provenance attestation: release.yml calls…"},"375":{"u":"/docs/adr/038-supply-chain-provenance.html#revision-2026-10-01","d":"ADR-038: Supply-Chain Provenance (SBOM Release Gate + Lock Files + Vulnerability Audit)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; the current-state sections now describe the gates where they live today. Context names both registries a tag publishes to: GitHub Packages…"},"376":{"u":"/docs/adr/038-supply-chain-provenance.html#related","d":"ADR-038: Supply-Chain Provenance (SBOM Release Gate + Lock Files + Vulnerability Audit)","k":"Architecture Decision Records","t":"Related","x":"ADR-016 (lockstep versioning + the MassTransit-v8 license pin; this record extends dependency governance from versioning and licensing into supply-chain provenance and…"},"377":{"u":"/docs/adr/039-live-channel-push.html","d":"ADR-039: Live channel push (ephemeral events over the notification hub)","k":"Architecture Decision Records"},"378":{"u":"/docs/adr/039-live-channel-push.html#status","d":"ADR-039: Live channel push (ephemeral events over the notification hub)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-09). Revised 2026-09-07 (channel subscription can be gated by an app-supplied authorizer, connections are capped per user, the backplane channel is namespaced…"},"379":{"u":"/docs/adr/039-live-channel-push.html#context","d":"ADR-039: Live channel push (ephemeral events over the notification hub)","k":"Architecture Decision Records","t":"Context","x":"Conference-day features (live polls, session Q&A, live result counters) need sub-second fan-out of small events to whoever is looking at a page right now. The existing…"},"380":{"u":"/docs/adr/039-live-channel-push.html#decision","d":"ADR-039: Live channel push (ephemeral events over the notification hub)","k":"Architecture Decision Records","t":"Decision","x":"One realtime transport, two publisher boundaries: - NotificationHub stays the single hub and gains its first client-invokable methods: JoinChannel / LeaveChannel map the calling…"},"381":{"u":"/docs/adr/039-live-channel-push.html#rationale","d":"ADR-039: Live channel push (ephemeral events over the notification hub)","k":"Architecture Decision Records","t":"Rationale","x":"- One WebSocket per client keeps connection management, token refresh, reconnect, and backplane behavior in one place; channel membership is a property of the existing…"},"382":{"u":"/docs/adr/039-live-channel-push.html#trade-offs","d":"ADR-039: Live channel push (ephemeral events over the notification hub)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Ephemeral means lossy: a client that connects after an event was published never sees it. Features must treat channel events as cache-invalidation hints over fetchable state,…"},"383":{"u":"/docs/adr/039-live-channel-push.html#revision-2026-07-24","d":"ADR-039: Live channel push (ephemeral events over the notification hub)","k":"Architecture Decision Records","t":"Revision (2026-07-24)","x":"Two corrections from a code review; the best-effort, per-session-ordered decision is unchanged. 1. Broadcasts are enqueued after commit, not during the command. CastVoteHandler…"},"384":{"u":"/docs/adr/039-live-channel-push.html#revision-2026-09-07","d":"ADR-039: Live channel push (ephemeral events over the notification hub)","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The channel model is unchanged: a client subscribes to a channel key and the server pushes to it. What a signed-in client is allowed to subscribe to, and how much it may hold…"},"385":{"u":"/docs/adr/040-authenticated-output-caching-for-public-reads.html","d":"ADR-040: Authenticated output caching for public reads","k":"Architecture Decision Records"},"386":{"u":"/docs/adr/040-authenticated-output-caching-for-public-reads.html#status","d":"ADR-040: Authenticated output caching for public reads","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-10). Amended (2026-07-10): explicit query-string variance parity with the built-in default policy (the initial release accidentally dropped it, collapsing every…"},"387":{"u":"/docs/adr/040-authenticated-output-caching-for-public-reads.html#context","d":"ADR-040: Authenticated output caching for public reads","k":"Architecture Decision Records","t":"Context","x":"The framework's read-scaling design leans on ASP.NET Core output caching: anonymous-readable endpoints ([AllowAnonymous] GETs like event/session/speaker catalogs) carry named…"},"388":{"u":"/docs/adr/040-authenticated-output-caching-for-public-reads.html#decision","d":"ADR-040: Authenticated output caching for public reads","k":"Architecture Decision Records","t":"Decision","x":"MMCA.Common.API ships PublicEndpointOutputCachePolicy, an IOutputCachePolicy that mirrors the built-in default policy with one deliberate difference: it does not disable cache…"},"389":{"u":"/docs/adr/040-authenticated-output-caching-for-public-reads.html#rationale","d":"ADR-040: Authenticated output caching for public reads","k":"Architecture Decision Records","t":"Rationale","x":"- The response payload, not the request's auth state, is what determines cacheability. For a user-independent payload, Authorization is noise; refusing to cache on it turns the…"},"390":{"u":"/docs/adr/040-authenticated-output-caching-for-public-reads.html#trade-offs","d":"ADR-040: Authenticated output caching for public reads","k":"Architecture Decision Records","t":"Trade-offs","x":"- Consumers must audit which named policies move to AddPublicEndpointPolicy. Policies on permission-gated endpoints (e.g. an organizer dashboard) must NOT move; if such an…"},"391":{"u":"/docs/adr/040-authenticated-output-caching-for-public-reads.html#revision-2026-09-10","d":"ADR-040: Authenticated output caching for public reads","k":"Architecture Decision Records","t":"Revision (2026-09-10)","x":"Store now uses the cross-service eviction path too, and the first case is an Application-layer handler rather than a controller. The trade-off above says to check which process…"},"392":{"u":"/docs/adr/040-authenticated-output-caching-for-public-reads.html#revision-2026-09-25","d":"ADR-040: Authenticated output caching for public reads","k":"Architecture Decision Records","t":"Revision (2026-09-25)","x":"Store's ProductsCache TTL is 60 seconds, because its payload moves on the clock. A product payload carries each variant's effective price, and a discount window opening or…"},"393":{"u":"/docs/adr/040-authenticated-output-caching-for-public-reads.html#revision-2026-10-01","d":"ADR-040: Authenticated output caching for public reads","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Citations in Context, Decision and Trade-offs are re-anchored to the current hosts: ADC Conference Program.cs (the adminBypassRoles array at…"},"394":{"u":"/docs/adr/041-observability-and-telemetry.html","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records"},"395":{"u":"/docs/adr/041-observability-and-telemetry.html#status","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-10). Amended (2026-07-23) to document the Telemetry:DisableHttpClientMetrics and Telemetry:DisableRuntimeMetrics cost knobs and to correct the…"},"396":{"u":"/docs/adr/041-observability-and-telemetry.html#context","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Context","x":"The framework is a modular monolith whose modules extract into standalone services (ADR-008), so the same telemetry has to make sense whether a request stays in one process or…"},"397":{"u":"/docs/adr/041-observability-and-telemetry.html#decision","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Decision","x":"Standardize telemetry in the shared Aspire service defaults, add framework-specific instrumentation for the CQRS and outbox paths, and expose cost knobs with fail-safe defaults.…"},"398":{"u":"/docs/adr/041-observability-and-telemetry.html#rationale","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Rationale","x":"- Instrument only where auto-instrumentation is blind. The CQRS RED histograms and the outbox dead-letter counter cover the two framework-owned hot paths; everything else (HTTP,…"},"399":{"u":"/docs/adr/041-observability-and-telemetry.html#trade-offs","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Trade-offs","x":"- Custom instrumentation carries a maintenance cost. The Aspire package has no reference to Application or Infrastructure by design, so the meter and activity-source names are…"},"400":{"u":"/docs/adr/041-observability-and-telemetry.html#revision-2026-08-18","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"Two meters and one hop. Two new failure counters, each on its own meter. cache.eviction.failed, tagged cachetag, on MMCA.Common.OutputCache…"},"401":{"u":"/docs/adr/041-observability-and-telemetry.html#amended-2026-08-31","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Amended (2026-08-31)","x":"The log side of this record. Until now it named only the OpenTelemetry logging call inside ConfigureOpenTelemetry (Extensions.cs:132); what a host actually WRITES its application…"},"402":{"u":"/docs/adr/041-observability-and-telemetry.html#amended-2026-09-03-probe-telemetry","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Amended (2026-09-03): probe telemetry","x":"Health probes were the trace bill. Container Apps liveness and readiness probes, the gateway's downstream aggregate probes, YARP active health checks and the availability web…"},"403":{"u":"/docs/adr/041-observability-and-telemetry.html#revision-2026-09-07","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Telemetry gained the properties that make it usable as evidence, from the 2026-09-07 security review. 1. The daily ingestion cap is alerted on (SEC-ADC-47 / SEC-Store-55). A…"},"404":{"u":"/docs/adr/041-observability-and-telemetry.html#revision-2026-09-11","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Revision (2026-09-11)","x":"An eighth meter, a second trace source, a second poll loop kept off the bill, and one meter this pipeline does not carry. The durable internal-command queue exports through this…"},"405":{"u":"/docs/adr/041-observability-and-telemetry.html#alternatives-rejected","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Alternatives rejected","x":"- An ActivitySource span per command and query in the CQRS pipeline, tagged by module. Evaluated 2026-09-16 against a modular-monolith template that ships one, and declined. The…"},"406":{"u":"/docs/adr/041-observability-and-telemetry.html#related","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (the outbox whose dead-letter counter and poll-span filtering this defines), ADR-014 (the CQRS decorator pipeline that emits the RED histograms as a byproduct of its…"},"407":{"u":"/docs/adr/041-observability-and-telemetry.html#amended-2026-09-11-the-polly-meter","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Amended (2026-09-11): the Polly meter","x":"A ninth meter, one cost knob, and one log level. Polly's meter is subscribed. AddServiceDefaults puts the standard resilience handler on every HttpClient and every gRPC typed…"},"408":{"u":"/docs/adr/041-observability-and-telemetry.html#revision-2026-09-19-the-ai-meter-is-subscribed","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Revision (2026-09-19): the AI meter is subscribed","x":"A tenth meter, and a fourth trace source. MMCA.Common.AI is in the chain now. The subscription block ends with .AddMeter(AiTelemetryName)…"},"409":{"u":"/docs/adr/041-observability-and-telemetry.html#revision-2026-10-01","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"A third metrics cost knob, and the citations follow the telemetry code into its own file. ASP.NET Core metrics are no longer unconditional. ConfigureMetrics now starts by calling…"},"410":{"u":"/docs/adr/042-device-capability-abstraction.html","d":"ADR-042: Device Capability Abstraction (MAUI Blazor Hybrid)","k":"Architecture Decision Records"},"411":{"u":"/docs/adr/042-device-capability-abstraction.html#status","d":"ADR-042: Device Capability Abstraction (MAUI Blazor Hybrid)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-10, amended 2026-07-17, 2026-07-23, 2026-08-14, 2026-08-29 and 2026-09-03). The 2026-08-29 amendment adds the UseMmcaMauiErrorHandling last-chance handlers and…"},"412":{"u":"/docs/adr/042-device-capability-abstraction.html#context","d":"ADR-042: Device Capability Abstraction (MAUI Blazor Hybrid)","k":"Architecture Decision Records","t":"Context","x":"The consumer apps ship the same Blazor component set through three heads: MAUI Blazor Hybrid (Android/iOS/MacCatalyst/Windows), Blazor Server SSR, and WebAssembly. Native device…"},"413":{"u":"/docs/adr/042-device-capability-abstraction.html#decision","d":"ADR-042: Device Capability Abstraction (MAUI Blazor Hybrid)","k":"Architecture Decision Records","t":"Decision","x":"Add a per-capability contract layer to MMCA.Common.UI and a dedicated package, MMCA.Common.UI.Maui, carrying the native implementations. - One small interface per capability, no…"},"414":{"u":"/docs/adr/042-device-capability-abstraction.html#rationale","d":"ADR-042: Device Capability Abstraction (MAUI Blazor Hybrid)","k":"Architecture Decision Records","t":"Rationale","x":"- A god IDeviceCapabilities interface would force every head to implement everything and turn each new capability into a breaking change; per-capability contracts are open/closed…"},"415":{"u":"/docs/adr/042-device-capability-abstraction.html#trade-offs","d":"ADR-042: Device Capability Abstraction (MAUI Blazor Hybrid)","k":"Architecture Decision Records","t":"Trade-offs","x":"- A second build runner raises release surface: ubuntu and windows must both succeed for a whole release. Accepted; the publish-maui job is gated by the same tag and SBOM…"},"416":{"u":"/docs/adr/042-device-capability-abstraction.html#revision-2026-10-01","d":"ADR-042: Device Capability Abstraction (MAUI Blazor Hybrid)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. The Decision bullet on safe defaults no longer points at a Fallbacks/ folder, which does not exist: each null fallback sits beside its contract…"},"417":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records"},"418":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#status","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-15). Revised 2026-07-28 (the Android https App Links leg is recorded as shipped, the outstanding Android item is restated as the served certificate fingerprint,…"},"419":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#context","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Context","x":"Three mobile flows all need a URL to leave the web world and land inside the MAUI app: 1. Shared links and QR codes. The share sheet and QR codes carry ordinary https web URLs.…"},"420":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#decision","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Decision","x":"- Custom-scheme returnUrl allowlist in the framework. CompleteAsync consults OAuth:AllowedReturnUrlSchemes (a config array, default empty). When the challenge's stashed returnUrl…"},"421":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#rationale","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Rationale","x":"- Reusing the single-use-code exchange keeps the token-never-in-URL invariant identical across web and native; the only new surface is WHERE the code lands. - A scheme allowlist…"},"422":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#trade-offs","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Trade-offs","x":"- The app-facing hostname is baked into store binaries (intent filters, entitlements). The apps currently ride the Azure Container Apps default domain, which changes if the…"},"423":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#revision-2026-07-28","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Revision (2026-07-28)","x":"Correction pass from an ADR audit. No decision or behavior changed; the Status section had the Android leg backwards and the Decision section attributed the token exchange to the…"},"424":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#revision-2026-08-01","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Revision (2026-08-01)","x":"Status pass from an ADR audit. No decision and no behavior changed; the one item the previous revision left open is closed, and the anchor that revision itself introduced had…"},"425":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#revision-2026-08-07","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Revision (2026-08-07)","x":"Anchor and precision pass from an ADR audit. No decision and no behavior changed. 1. The two Program.cs anchors moved one line. MMCA.ADC commit 886fa189 (PR 100, merged…"},"426":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#revision-2026-08-31","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Revision (2026-08-31)","x":"Anchor and count pass from an ADR audit. No decision and no behavior changed. 1. The ADC Program.cs association block moved again. MMCA.ADC commit 6323a7b9 (PR 155) shifted it…"},"427":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#revision-2026-09-07","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The callback routing is unchanged. The boundary where a platform-supplied URI enters the app is now validated (SEC-Common-88 / SEC-ADC-65). DeepLinkDispatcher.Publish…"},"428":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#revision-2026-09-11","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Revision (2026-09-11)","x":"Anchor and correction pass from an ADR audit. No decision and no behavior changed. One citation pointed at a file that does not exist. 1. There is no DeepLinkRouteGuard in ADC.…"},"429":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#revision-2026-09-25","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Revision (2026-09-25)","x":"Anchor pass over the MMCA.ADC citations. No decision and no behavior changed. 1. The ADC association block moved up six lines. In…"},"430":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#revision-2026-10-01","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Anchor pass from an ADR audit. No decision and no rationale changed. In the Decision's client-flow bullet the completion page now calls the service at…"},"431":{"u":"/docs/adr/044-native-push-delivery.html","d":"ADR-044: Native Push Delivery (the Third Notification Channel)","k":"Architecture Decision Records"},"432":{"u":"/docs/adr/044-native-push-delivery.html#status","d":"ADR-044: Native Push Delivery (the Third Notification Channel)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-11). Amends ADR-024. The framework pipeline is implemented and inert by default; each consumer switches it on by provisioning a notification hub with platform…"},"433":{"u":"/docs/adr/044-native-push-delivery.html#context","d":"ADR-044: Native Push Delivery (the Third Notification Channel)","k":"Architecture Decision Records","t":"Context","x":"ADR-024 established two notification channels: a durable per-user UserNotification inbox (the source of truth) and a transient SignalR push behind IPushNotificationSender. Both…"},"434":{"u":"/docs/adr/044-native-push-delivery.html#decision","d":"ADR-044: Native Push Delivery (the Third Notification Channel)","k":"Architecture Decision Records","t":"Decision","x":"- Azure Notification Hubs as the delivery fan-out. One hub abstracts both platforms behind one API, holds the platform credentials outside our code, and its installation model…"},"435":{"u":"/docs/adr/044-native-push-delivery.html#consequences","d":"ADR-044: Native Push Delivery (the Third Notification Channel)","k":"Architecture Decision Records","t":"Consequences","x":"- Sends fan out per 20-user chunk and per platform: an audience of N users costs ceil(N/20) 2 hub calls. Acceptable at conference scale; a template-based send can consolidate…"},"436":{"u":"/docs/adr/044-native-push-delivery.html#revision-2026-10-01","d":"ADR-044: Native Push Delivery (the Third Notification Channel)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The client half of the pipeline is no longer Null-only. MMCA.Common.UI.Maui ships credentialed token providers behind the opt-in AddMauiPushDeviceTokenProvider()…"},"437":{"u":"/docs/adr/045-managed-file-storage-and-avatars.html","d":"ADR-045: Managed File Storage and User Avatars","k":"Architecture Decision Records"},"438":{"u":"/docs/adr/045-managed-file-storage-and-avatars.html#status","d":"ADR-045: Managed File Storage and User Avatars","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-11). Records the BR-116 amendment (ADC): avatar photos are IN scope, powered by two new framework extension points. The framework legs are implemented; each…"},"439":{"u":"/docs/adr/045-managed-file-storage-and-avatars.html#context","d":"ADR-045: Managed File Storage and User Avatars","k":"Architecture Decision Records","t":"Context","x":"The MAUI capability program (ADR-042) brought MediaPicker/camera within reach, and ADC amended BR-116 to include user avatar photos. That needs binary blob storage (the databases…"},"440":{"u":"/docs/adr/045-managed-file-storage-and-avatars.html#decision","d":"ADR-045: Managed File Storage and User Avatars","k":"Architecture Decision Records","t":"Decision","x":"- IFileStorageService (Application): upload-by-blob-name returning the public URI, plus idempotent delete. Default is an unconfigured Null implementation whose uploads fail with…"},"441":{"u":"/docs/adr/045-managed-file-storage-and-avatars.html#consequences","d":"ADR-045: Managed File Storage and User Avatars","k":"Architecture Decision Records","t":"Consequences","x":"- The avatars container is public-read by design: avatar URLs render in tags on anonymous-visible surfaces without SAS plumbing. The random blob suffix prevents enumeration; the…"},"442":{"u":"/docs/adr/045-managed-file-storage-and-avatars.html#revision-2026-09-07","d":"ADR-045: Managed File Storage and User Avatars","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The 2 MB compressed upload cap bounds the bytes on the wire; it does not bound what those bytes decode to. A highly compressible image declares its dimensions in a header that…"},"443":{"u":"/docs/adr/045-managed-file-storage-and-avatars.html#revision-2026-09-12","d":"ADR-045: Managed File Storage and User Avatars","k":"Architecture Decision Records","t":"Revision (2026-09-12)","x":"This record scoped managed uploads to avatars and said so: \"no other managed uploads exist\". That statement is superseded by ADR-123, which publishes speaker session materials…"},"444":{"u":"/docs/adr/045-managed-file-storage-and-avatars.html#revision-2026-10-01","d":"ADR-045: Managed File Storage and User Avatars","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Avatar blob deletion no longer happens as an inline storage call. Every path that retires an avatar schedules a DeleteAvatarBlobInternalCommand…"},"445":{"u":"/docs/adr/046-http-api-versioning.html","d":"ADR-046: HTTP API Versioning Strategy","k":"Architecture Decision Records"},"446":{"u":"/docs/adr/046-http-api-versioning.html#status","d":"ADR-046: HTTP API Versioning Strategy","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-15). Revised 2026-08-01 (anonymity is granted by each per-service subclass, not by ServiceInfoControllerBase; corrected the ADR-034 cross-reference, which puts…"},"447":{"u":"/docs/adr/046-http-api-versioning.html#context","d":"ADR-046: HTTP API Versioning Strategy","k":"Architecture Decision Records","t":"Context","x":"The framework's REST surface is served by controllers hosted in extracted service processes behind a YARP gateway. As those services evolve, a response shape has to be able to…"},"448":{"u":"/docs/adr/046-http-api-versioning.html#decision","d":"ADR-046: HTTP API Versioning Strategy","k":"Architecture Decision Records","t":"Decision","x":"Standardize one header-based API-versioning setup in MMCA.Common.API, adopt it in every service host through a single registration call, and keep it exercised by a shared fitness…"},"449":{"u":"/docs/adr/046-http-api-versioning.html#rationale","d":"ADR-046: HTTP API Versioning Strategy","k":"Architecture Decision Records","t":"Rationale","x":"- Header selection keeps URLs stable. Routing stays version-free, so gateway route maps, client URL builders, and OpenAPI paths do not fork per version; a caller opts into a…"},"450":{"u":"/docs/adr/046-http-api-versioning.html#trade-offs","d":"ADR-046: HTTP API Versioning Strategy","k":"Architecture Decision Records","t":"Trade-offs","x":"- The class-level version attributes are not inherited. Each per-service subclass must repeat the [ApiVersion(...)] and routing attributes (the same inheritance caveat ADR-036…"},"451":{"u":"/docs/adr/046-http-api-versioning.html#revision-2026-09-22-the-consumer-contract-is-a-committed-artifact","d":"ADR-046: HTTP API Versioning Strategy","k":"Architecture Decision Records","t":"Revision (2026-09-22): the consumer contract is a committed artifact","x":"The trade-off above described the OpenAPI document as a dev/CI artifact that nothing outside a running host could diff. MMCA.ADC now writes it to disk at build time.…"},"452":{"u":"/docs/adr/046-http-api-versioning.html#revision-2026-09-25-both-consumers-commit-and-gate-their-openapi-documents","d":"ADR-046: HTTP API Versioning Strategy","k":"Architecture Decision Records","t":"Revision (2026-09-25): both consumers commit and gate their OpenAPI documents","x":"MMCA.Store now carries the same gate, so the committed contract is a property of both consumers rather than of MMCA.ADC alone. Each repo's Directory.Build.props references…"},"453":{"u":"/docs/adr/046-http-api-versioning.html#revision-2026-10-01","d":"ADR-046: HTTP API Versioning Strategy","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Re-anchored the citations in Decision, Trade-offs and Related, which had moved: AddCommonApiVersioning and its options…"},"454":{"u":"/docs/adr/046-http-api-versioning.html#revision-2026-10-01-v12170-the-host-registers-the-openapi-document","d":"ADR-046: HTTP API Versioning Strategy","k":"Architecture Decision Records","t":"Revision (2026-10-01, v1.217.0): the host registers the OpenAPI document","x":"What changed. AddCommonOpenApi used to register the documents itself through the versioning builder (AddApiVersioning().AddOpenApi(), one document per discovered API version),…"},"455":{"u":"/docs/adr/046-http-api-versioning.html#related","d":"ADR-046: HTTP API Versioning Strategy","k":"Architecture Decision Records","t":"Related","x":"ADR-010 (integration-event schema versioning: the asynchronous, SchemaVersion-carried, consumer-resolved axis this deliberately contrasts with; HTTP versioning here is…"},"456":{"u":"/docs/adr/047-soft-deleted-user-session-revocation.html","d":"ADR-047: Runtime Revocation of Soft-Deleted Users' Active Sessions","k":"Architecture Decision Records"},"457":{"u":"/docs/adr/047-soft-deleted-user-session-revocation.html#status","d":"ADR-047: Runtime Revocation of Soft-Deleted Users' Active Sessions","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-15). Revised 2026-08-07 (validator hoisted into a shared generic, the 30-second constant moved, the two apps revoke at different speeds). Revised 2026-08-23:…"},"458":{"u":"/docs/adr/047-soft-deleted-user-session-revocation.html#context","d":"ADR-047: Runtime Revocation of Soft-Deleted Users' Active Sessions","k":"Architecture Decision Records","t":"Context","x":"Soft-delete is the framework's default deletion model (ADR-005): AuditableBaseEntity.Delete() sets IsDeleted = true and EF global query filters hide the row, but the record…"},"459":{"u":"/docs/adr/047-soft-deleted-user-session-revocation.html#decision","d":"ADR-047: Runtime Revocation of Soft-Deleted Users' Active Sessions","k":"Architecture Decision Records","t":"Decision","x":"Add a shared-pipeline middleware, SoftDeletedUserMiddleware (Source/Presentation/MMCA.Common.API/Middleware/SoftDeletedUserMiddleware.cs:31, BR-133), that rejects an…"},"460":{"u":"/docs/adr/047-soft-deleted-user-session-revocation.html#rationale","d":"ADR-047: Runtime Revocation of Soft-Deleted Users' Active Sessions","k":"Architecture Decision Records","t":"Rationale","x":"- Bounds the stateless-JWT revocation gap cheaply. Stateless JWT (ADR-004) has no built-in revocation, so a deactivated account would otherwise stay usable for the full remaining…"},"461":{"u":"/docs/adr/047-soft-deleted-user-session-revocation.html#trade-offs","d":"ADR-047: Runtime Revocation of Soft-Deleted Users' Active Sessions","k":"Architecture Decision Records","t":"Trade-offs","x":"- Revocation is bounded, not immediate. A soft-deleted user whose status is cached as not-deleted keeps passing until that cache entry expires (up to 30 seconds), unless the…"},"462":{"u":"/docs/adr/047-soft-deleted-user-session-revocation.html#related","d":"ADR-047: Runtime Revocation of Soft-Deleted Users' Active Sessions","k":"Architecture Decision Records","t":"Related","x":"ADR-005 (soft-delete is the deletion model whose still-authenticated tokens this middleware revokes; deleting a user is a soft-delete, not a row removal), ADR-004 (the stateless…"},"463":{"u":"/docs/adr/047-soft-deleted-user-session-revocation.html#revision-2026-08-07","d":"ADR-047: Runtime Revocation of Soft-Deleted Users' Active Sessions","k":"Architecture Decision Records","t":"Revision (2026-08-07)","x":"Re-verified against current source. The decision is unchanged, but three things it described have moved: the validator implementation, the home of the 30-second constant, and the…"},"464":{"u":"/docs/adr/047-soft-deleted-user-session-revocation.html#revision-2026-08-23","d":"ADR-047: Runtime Revocation of Soft-Deleted Users' Active Sessions","k":"Architecture Decision Records","t":"Revision (2026-08-23)","x":"Re-verified against current source. The decision, the cache design, the fail-open policy and the per-app asymmetry are all unchanged; what moved is where the middleware's…"},"465":{"u":"/docs/adr/047-soft-deleted-user-session-revocation.html#revision-2026-09-03-mmcacommon-11850","d":"ADR-047: Runtime Revocation of Soft-Deleted Users' Active Sessions","k":"Architecture Decision Records","t":"Revision (2026-09-03, MMCA.Common 1.185.0)","x":"Re-verified against current source. The middleware, the cache design, the 30-second window and the fail-open policy are all unchanged. What changed is who writes the deleted…"},"466":{"u":"/docs/adr/047-soft-deleted-user-session-revocation.html#revision-2026-10-01","d":"ADR-047: Runtime Revocation of Soft-Deleted Users' Active Sessions","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Re-verified against current source (MMCA.Common v1.216.0). The decision, the middleware, the 30-second window, the fail-open policy and the shared marker write are unchanged. One…"},"467":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records"},"468":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html#status","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-15). Revised 2026-07-21 (corrected the empty-placeholder-folder inventory and the Directory.Build.props and ADC User source citations). Revised 2026-07-28…"},"469":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html#context","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records","t":"Context","x":"Every entity needs an identity type. The framework's base entity is generic over that type: BaseEntity constrains it to notnull and exposes a single required init Id…"},"470":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html#decision","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records","t":"Decision","x":"Model every identifier as a primitive named through a global-using alias, declared per module, not as a wrapper struct. - Identity is a primitive behind an alias. Each module…"},"471":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html#rationale","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records","t":"Rationale","x":"- Readable signatures at zero runtime cost. GetRepository () reads as intent while the CLR sees a plain int. There is no allocation, boxing, or wrapper indirection per…"},"472":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html#trade-offs","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records","t":"Trade-offs","x":"- No compile-time protection against swapping same-typed identifiers. An alias is a type synonym, not a distinct type. Because most aliases resolve to int, the compiler will not…"},"473":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html#related","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records","t":"Related","x":"ADR-001 (the per-entity DTO mappers are parameterized by this identifier type, IEntityDTOMapper ), ADR-034 (the generic entity controllers and query contract ride on the same…"},"474":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html#revision-2026-08-18","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"No decision, no behavior and no citation in this record changed. What changed is the standing of the deferral it records. The last Trade-offs entry above (\"Revisiting the trade…"},"475":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html#revision-2026-08-23","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records","t":"Revision (2026-08-23)","x":"No decision and no rationale changed. Two counts did, both because Conference gained an alias. The workspace census below is superseded by the Revision (2026-09-11), and…"},"476":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html#revision-2026-09-11","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records","t":"Revision (2026-09-11)","x":"No decision and no rationale changed. The workspace alias count did, because Store Catalog gained the Reviews aggregate's two identifiers. The census in this revision is itself…"},"477":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html#revision-2026-09-19","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records","t":"Revision (2026-09-19)","x":"No decision and no rationale changed. Three facts stated above did, two of them counts and one of them a claim about what exists. Conference's alias file declares nineteen…"},"478":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html#revision-2026-10-01","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision and no rationale changed. One Trade-offs statement and three Decision citations did. The Trade-offs entry on identifier swapping still treated SpeakerIdentifierType…"},"479":{"u":"/docs/adr/049-library-configureawait-policy.html","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records"},"480":{"u":"/docs/adr/049-library-configureawait-policy.html#status","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-20; measurements re-anchored 2026-08-07, 2026-08-14, 2026-08-18, 2026-08-23, 2026-08-31, 2026-09-01, 2026-09-03, 2026-09-11 and 2026-09-19). Revised 2026-09-19:…"},"481":{"u":"/docs/adr/049-library-configureawait-policy.html#context","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Context","x":"MMCA.Common ships as NuGet packages consumed by host applications, not as an application itself. Library code that awaits without ConfigureAwait(false) captures the caller's…"},"482":{"u":"/docs/adr/049-library-configureawait-policy.html#decision","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Decision","x":"Packaged non-UI framework code awaits with ConfigureAwait(false); UI component packages and application code do not. - Enforcement is a build gate, not a convention. The…"},"483":{"u":"/docs/adr/049-library-configureawait-policy.html#rationale","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Rationale","x":"- Correctness for the one consumer that already has a context. The MAUI head consumes Infrastructure/Application/API packages through DI; a sync-over-async call anywhere in that…"},"484":{"u":"/docs/adr/049-library-configureawait-policy.html#trade-offs","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Visual noise in framework source. Every await in Source/ (except UI packages) carries .ConfigureAwait(false) (324 sites at adoption; 1,115 gated sites as of the 2026-10-01…"},"485":{"u":"/docs/adr/049-library-configureawait-policy.html#related","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Related","x":"ADR-042 (the MAUI package whose synchronization context motivates the policy), ADR-027 (the same \"machine-boundary hygiene as a build gate\" posture applied to culture-explicit…"},"486":{"u":"/docs/adr/049-library-configureawait-policy.html#revision-2026-08-07","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Revision (2026-08-07)","x":"An audit against the code. The policy did not change; three statements about it did. 1. The exemption covers three packages, not the two the Decision named. The glob is…"},"487":{"u":"/docs/adr/049-library-configureawait-policy.html#revision-2026-08-14","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Revision (2026-08-14)","x":"A re-measurement only. The policy, the gate and the exemption are unchanged; the counts the document quotes were a week old and had moved by roughly 9%. 1. Framework site counts,…"},"488":{"u":"/docs/adr/049-library-configureawait-policy.html#revision-2026-08-18","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"A re-measurement only, in the same terms as the 2026-08-14 pass. The policy, the gate and the exemption are unchanged; two of the three counted figures moved. 1. Framework site…"},"489":{"u":"/docs/adr/049-library-configureawait-policy.html#revision-2026-08-23","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Revision (2026-08-23)","x":"A re-measurement only, in the same terms as the 2026-08-18 pass. The policy, the gate and the exemption are unchanged; both counted figures moved. 1. Framework site counts,…"},"490":{"u":"/docs/adr/049-library-configureawait-policy.html#revision-2026-08-31","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Revision (2026-08-31)","x":"A re-measurement plus a correction to two file anchors. The policy, the gate and the exemption are unchanged. Every counted figure moved, two of the surrounding narratives did…"},"491":{"u":"/docs/adr/049-library-configureawait-policy.html#revision-2026-09-01","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Revision (2026-09-01)","x":"A re-measurement only, in the same terms as the 2026-08-31 pass. The policy, the gate and the exemption are unchanged, the .editorconfig anchors that shifted last pass are still…"},"492":{"u":"/docs/adr/049-library-configureawait-policy.html#revision-2026-09-03","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Revision (2026-09-03)","x":"A re-measurement plus one anchor correction, in the same terms as the 2026-09-01 pass. The policy, the gate and the exemption are unchanged, the .editorconfig anchors are still…"},"493":{"u":"/docs/adr/049-library-configureawait-policy.html#revision-2026-09-11","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Revision (2026-09-11)","x":"A re-measurement plus one anchor correction, in the same terms as the 2026-09-03 pass. The policy, the gate and the exemption are unchanged and the .editorconfig anchors are…"},"494":{"u":"/docs/adr/049-library-configureawait-policy.html#revision-2026-09-19","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Revision (2026-09-19)","x":"A re-measurement in the same terms as the 2026-09-11 pass, covering the two counted figures that move (framework sites and the consumer-scale upper bound) and the…"},"495":{"u":"/docs/adr/049-library-configureawait-policy.html#revision-2026-10-01","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"A count and anchor refresh only. No decision or rationale changed: the policy, the gate (MMCA.Common/.editorconfig:833) and the UI exemption (:836) stand as written. The…"},"496":{"u":"/docs/adr/050-jwt-refresh-token-rotation.html","d":"ADR-050: JWT Access Tokens with a Single Rotating Refresh Token and Reuse Detection","k":"Architecture Decision Records"},"497":{"u":"/docs/adr/050-jwt-refresh-token-rotation.html#status","d":"ADR-050: JWT Access Tokens with a Single Rotating Refresh Token and Reuse Detection","k":"Architecture Decision Records","t":"Status","x":"Superseded by ADR-097 (2026-09-01). Originally Accepted (2026-07-21, storage model recorded as superseded 2026-08-26). The body below is retained as the historical record (its…"},"498":{"u":"/docs/adr/050-jwt-refresh-token-rotation.html#context","d":"ADR-050: JWT Access Tokens with a Single Rotating Refresh Token and Reuse Detection","k":"Architecture Decision Records","t":"Context","x":"Identity issues two credentials on every successful sign-in: a short-lived, stateless JWT access token that every service validates by signature and expiry (ADR-004), and a…"},"499":{"u":"/docs/adr/050-jwt-refresh-token-rotation.html#decision","d":"ADR-050: JWT Access Tokens with a Single Rotating Refresh Token and Reuse Detection","k":"Architecture Decision Records","t":"Decision","x":"Mint a stateless JWT access token plus a single, server-stored refresh token that rotates on every use, with a token mismatch triggering revocation. - Access token is stateless;…"},"500":{"u":"/docs/adr/050-jwt-refresh-token-rotation.html#rationale","d":"ADR-050: JWT Access Tokens with a Single Rotating Refresh Token and Reuse Detection","k":"Architecture Decision Records","t":"Rationale","x":"- Short access token plus refresh keeps the hot path stateless. Every service validates the access token with no store lookup (ADR-004); the short exp bounds the revocation gap,…"},"501":{"u":"/docs/adr/050-jwt-refresh-token-rotation.html#trade-offs","d":"ADR-050: JWT Access Tokens with a Single Rotating Refresh Token and Reuse Detection","k":"Architecture Decision Records","t":"Trade-offs","x":"- One refresh token per user means one live session. A new login overwrites the single stored token, so signing in on a second device invalidates the first device's refresh…"},"502":{"u":"/docs/adr/050-jwt-refresh-token-rotation.html#revision-2026-10-01","d":"ADR-050: JWT Access Tokens with a Single Rotating Refresh Token and Reuse Detection","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Three statements were corrected against current source. The removed UpdateRefreshToken and RevokeRefreshToken no longer appear in either Domain…"},"503":{"u":"/docs/adr/050-jwt-refresh-token-rotation.html#related","d":"ADR-050: JWT Access Tokens with a Single Rotating Refresh Token and Reuse Detection","k":"Architecture Decision Records","t":"Related","x":"ADR-004 (the stateless RS256/JWKS access token this refresh flow reissues, and the algorithm pinning GetPrincipalFromExpiredToken relies on), ADR-032 (the password hashing that…"},"504":{"u":"/docs/adr/051-client-auth-token-lifecycle.html","d":"ADR-051: Client-Side Authentication Token Lifecycle Across Render Modes","k":"Architecture Decision Records"},"505":{"u":"/docs/adr/051-client-auth-token-lifecycle.html#status","d":"ADR-051: Client-Side Authentication Token Lifecycle Across Render Modes","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-23). Revised 2026-08-14 (SetTokensAsync writes the refresh token and the access token under one shared guard, so a failed refresh-token write also drops both…"},"506":{"u":"/docs/adr/051-client-auth-token-lifecycle.html#context","d":"ADR-051: Client-Side Authentication Token Lifecycle Across Render Modes","k":"Architecture Decision Records","t":"Context","x":"ADR-022 and ADR-050 describe the two server halves of authentication: the Blazor host's HttpOnly session cookie that survives SSR prerender (ADR-022), and the Identity service's…"},"507":{"u":"/docs/adr/051-client-auth-token-lifecycle.html#decision","d":"ADR-051: Client-Side Authentication Token Lifecycle Across Render Modes","k":"Architecture Decision Records","t":"Decision","x":"Model the client token lifecycle as three small abstractions (ITokenStorageService, the freshness-checked persistence every caller consumes; ISecureTokenStore, raw persistence…"},"508":{"u":"/docs/adr/051-client-auth-token-lifecycle.html#rationale","d":"ADR-051: Client-Side Authentication Token Lifecycle Across Render Modes","k":"Architecture Decision Records","t":"Rationale","x":"- One application surface, three storage stories. Pages, services, and the HTTP pipeline talk to ITokenStorageService and AuthenticationStateProvider only; the head-specific…"},"509":{"u":"/docs/adr/051-client-auth-token-lifecycle.html#trade-offs","d":"ADR-051: Client-Side Authentication Token Lifecycle Across Render Modes","k":"Architecture Decision Records","t":"Trade-offs","x":"- The browser heads depend on the same-origin UI host. SameOriginProxyTokenRefresher only works where the UI host serves the /auth/session/ endpoints; a browser head deployed…"},"510":{"u":"/docs/adr/051-client-auth-token-lifecycle.html#related","d":"ADR-051: Client-Side Authentication Token Lifecycle Across Render Modes","k":"Architecture Decision Records","t":"Related","x":"ADR-022 (the Blazor host's HttpOnly session cookie and the /auth/session/ endpoints the browser refresher proxies through), ADR-050 (the single rotating refresh token with reuse…"},"511":{"u":"/docs/adr/051-client-auth-token-lifecycle.html#revision-2026-08-07","d":"ADR-051: Client-Side Authentication Token Lifecycle Across Render Modes","k":"Architecture Decision Records","t":"Revision (2026-08-07)","x":"The MAUI half of ITokenStorageService is no longer app-local. The original Decision left the SecureStorage-backed implementation in each app because it depends on the MAUI…"},"512":{"u":"/docs/adr/051-client-auth-token-lifecycle.html#revision-2026-08-14","d":"ADR-051: Client-Side Authentication Token Lifecycle Across Render Modes","k":"Architecture Decision Records","t":"Revision (2026-08-14)","x":"SetTokensAsync closed a gap the original hoist left open. Point 3 above previously described the method as writing the refresh token first and dropping both tokens only when the…"},"513":{"u":"/docs/adr/051-client-auth-token-lifecycle.html#revision-2026-08-31","d":"ADR-051: Client-Side Authentication Token Lifecycle Across Render Modes","k":"Architecture Decision Records","t":"Revision (2026-08-31)","x":"MAUI storage is two classes, and the freshness check the browser heads always had is now on every head. 1. A raw store beneath the storage service. ISecureTokenStore is the third…"},"514":{"u":"/docs/adr/051-client-auth-token-lifecycle.html#revision-2026-10-01","d":"ADR-051: Client-Side Authentication Token Lifecycle Across Render Modes","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Citations in Decision and Trade-offs are re-anchored to the current source (DirectApiTokenRefresher, JsFetchSessionCookieSync,…"},"515":{"u":"/docs/adr/052-background-job-execution.html","d":"ADR-052: Background Job Execution (Bounded Queue plus Hosted Drain)","k":"Architecture Decision Records"},"516":{"u":"/docs/adr/052-background-job-execution.html#status","d":"ADR-052: Background Job Execution (Bounded Queue plus Hosted Drain)","k":"Architecture Decision Records","t":"Status","x":"Superseded by ADR-121 (2026-09-11). The expensive half of this decision (Wait full mode, in-queue dedup, a 409 refusal, the session-scoring queue and drain) moved to durable…"},"517":{"u":"/docs/adr/052-background-job-execution.html#context","d":"ADR-052: Background Job Execution (Bounded Queue plus Hosted Drain)","k":"Architecture Decision Records","t":"Context","x":"Some requests trigger work that cannot run inside the request: an AI scoring pass over an event's sessions takes minutes and issues one paid API call per session, and a…"},"518":{"u":"/docs/adr/052-background-job-execution.html#decision","d":"ADR-052: Background Job Execution (Bounded Queue plus Hosted Drain)","k":"Architecture Decision Records","t":"Decision","x":"In-process background work runs as a bounded queue plus a single-reader hosted drain. Nothing starts an untracked Task from a request. - A bounded Channel per job kind,…"},"519":{"u":"/docs/adr/052-background-job-execution.html#rationale","d":"ADR-052: Background Job Execution (Bounded Queue plus Hosted Drain)","k":"Architecture Decision Records","t":"Rationale","x":"- The host lifetime is the point. A BackgroundService is the only in-process shape the host can cancel and await. Everything else in the decision follows from wanting that. - The…"},"520":{"u":"/docs/adr/052-background-job-execution.html#trade-offs","d":"ADR-052: Background Job Execution (Bounded Queue plus Hosted Drain)","k":"Architecture Decision Records","t":"Trade-offs","x":"- In-process only. The queue does not survive a restart and does not span replicas. Accepted because every current job is either ephemeral (a lost broadcast is a missed UI…"},"521":{"u":"/docs/adr/052-background-job-execution.html#related","d":"ADR-052: Background Job Execution (Bounded Queue plus Hosted Drain)","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (the outbox, for work that must be durable and cross-process, and the post-commit deferral this relies on), ADR-008 (the broker, for cross-service work), ADR-014 (the…"},"522":{"u":"/docs/adr/052-background-job-execution.html#revision-2026-08-23","d":"ADR-052: Background Job Execution (Bounded Queue plus Hosted Drain)","k":"Architecture Decision Records","t":"Revision (2026-08-23)","x":"The decision is unchanged: post-commit work is still enqueued only once the write is durable. What changed is the record of how. This ADR stated the domain-event handler as the…"},"523":{"u":"/docs/adr/052-background-job-execution.html#revision-2026-08-31","d":"ADR-052: Background Job Execution (Bounded Queue plus Hosted Drain)","k":"Architecture Decision Records","t":"Revision (2026-08-31)","x":"The decision and the safety property are unchanged: post-commit work is still enqueued only once the write is durable. What changed is who keeps the ordering for shape 2. Three…"},"524":{"u":"/docs/adr/052-background-job-execution.html#revision-2026-09-19","d":"ADR-052: Background Job Execution (Bounded Queue plus Hosted Drain)","k":"Architecture Decision Records","t":"Revision (2026-09-19)","x":"The decision and the safety property are unchanged: post-commit work is still enqueued only once the write is durable. What changed is where the save sits in the one remaining…"},"525":{"u":"/docs/adr/053-dual-registry-package-publishing.html","d":"ADR-053: Dual-Registry Package Publishing (nuget.org plus GitHub Packages)","k":"Architecture Decision Records"},"526":{"u":"/docs/adr/053-dual-registry-package-publishing.html#status","d":"ADR-053: Dual-Registry Package Publishing (nuget.org plus GitHub Packages)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-25). Amended (2026-07-25) to put the pre-decision Context statements in the past tense, to record the MMCA. ID prefix reservation as then-pending, to scope the…"},"527":{"u":"/docs/adr/053-dual-registry-package-publishing.html#context","d":"ADR-053: Dual-Registry Package Publishing (nuget.org plus GitHub Packages)","k":"Architecture Decision Records","t":"Context","x":"The MMCA.Common. packages have shipped to GitHub Packages since the first release (the package list and its count are generated and CI-gated in MMCA.Common/FACTS.md:19-43, so…"},"528":{"u":"/docs/adr/053-dual-registry-package-publishing.html#decision","d":"ADR-053: Dual-Registry Package Publishing (nuget.org plus GitHub Packages)","k":"Architecture Decision Records","t":"Decision","x":"Every release publishes to both registries, from the same tag, in the same workflow run. - release.yml keeps its existing dotnet nuget push to…"},"529":{"u":"/docs/adr/053-dual-registry-package-publishing.html#rationale","d":"ADR-053: Dual-Registry Package Publishing (nuget.org plus GitHub Packages)","k":"Architecture Decision Records","t":"Rationale","x":"- The install line has to be true. Documentation that cannot be followed is worse than no documentation, because the reader concludes the project is broken rather than that the…"},"530":{"u":"/docs/adr/053-dual-registry-package-publishing.html#trade-offs","d":"ADR-053: Dual-Registry Package Publishing (nuget.org plus GitHub Packages)","k":"Architecture Decision Records","t":"Trade-offs","x":"- A published version can never be withdrawn. nuget.org allows unlisting, not deletion. A bad release is now permanent public history, which raises the stakes on the release…"},"531":{"u":"/docs/adr/053-dual-registry-package-publishing.html#revision-2026-10-01","d":"ADR-053: Dual-Registry Package Publishing (nuget.org plus GitHub Packages)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision changed; the record is re-pinned to release.yml as of MMCA.Common v1.216.0 and two statements are corrected. Re-pinned: the GitHub Packages pushes (release.yml:118,…"},"532":{"u":"/docs/adr/053-dual-registry-package-publishing.html#related","d":"ADR-053: Dual-Registry Package Publishing (nuget.org plus GitHub Packages)","k":"Architecture Decision Records","t":"Related","x":"ADR-016 (lockstep versioning: every package ships at one version, so both registries receive the same set of ids per release, enumerated in MMCA.Common/FACTS.md:19-43), ADR-038…"},"533":{"u":"/docs/adr/054-saga-compensation-and-reconciliation.html","d":"ADR-054: Choreographed Saga Compensation with a Reconciliation Backstop","k":"Architecture Decision Records"},"534":{"u":"/docs/adr/054-saga-compensation-and-reconciliation.html#status","d":"ADR-054: Choreographed Saga Compensation with a Reconciliation Backstop","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-25). Amended (2026-07-28): Store's reconciliation sweep now derives from PeriodicBackgroundService, so the shared-loop and adoption paragraphs are rewritten and…"},"535":{"u":"/docs/adr/054-saga-compensation-and-reconciliation.html#context","d":"ADR-054: Choreographed Saga Compensation with a Reconciliation Backstop","k":"Architecture Decision Records","t":"Context","x":"Checkout spans a boundary no transaction covers. CheckOutHandler commits the order insert, the cart transition and the atomic conditional stock decrements in one local…"},"536":{"u":"/docs/adr/054-saga-compensation-and-reconciliation.html#decision","d":"ADR-054: Choreographed Saga Compensation with a Reconciliation Backstop","k":"Architecture Decision Records","t":"Decision","x":"Multi-step workflows are choreographed sagas: each step raises a domain event, and the follow-up or compensating action lives in its own handler. A periodic reconciliation sweep…"},"537":{"u":"/docs/adr/054-saga-compensation-and-reconciliation.html#rationale","d":"ADR-054: Choreographed Saga Compensation with a Reconciliation Backstop","k":"Architecture Decision Records","t":"Rationale","x":"- No two-phase commit is available, and none is wanted. Transactions are per data source and best-effort sequential (ADR-006), and an external payment provider cannot enlist in a…"},"538":{"u":"/docs/adr/054-saga-compensation-and-reconciliation.html#trade-offs","d":"ADR-054: Choreographed Saga Compensation with a Reconciliation Backstop","k":"Architecture Decision Records","t":"Trade-offs","x":"- Inconsistency is bounded, not eliminated. Between the cancellation commit and the compensation commit, stock is held against a cancelled order. Between a dropped webhook and…"},"539":{"u":"/docs/adr/054-saga-compensation-and-reconciliation.html#revision-2026-09-11-the-unpaid-order-deadline-moves-onto-the-order-and-the-sweep-becomes-its-backstop","d":"ADR-054: Choreographed Saga Compensation with a Reconciliation Backstop","k":"Architecture Decision Records","t":"Revision (2026-09-11): the unpaid-order deadline moves onto the order, and the sweep becomes its backstop","x":"Expiring an unpaid order is no longer something a scan notices. Every order now arms its own deadline, and the sweep's expiry pass stays exactly where it was, underneath.…"},"540":{"u":"/docs/adr/054-saga-compensation-and-reconciliation.html#revision-2026-10-01","d":"ADR-054: Choreographed Saga Compensation with a Reconciliation Backstop","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The idempotency guarantee is now one transaction rather than one SaveChanges. OrderCancelledSagaHandler runs the whole restoration as a single ExecuteInTransactionAsync delegate…"},"541":{"u":"/docs/adr/054-saga-compensation-and-reconciliation.html#related","d":"ADR-054: Choreographed Saga Compensation with a Reconciliation Backstop","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (the outbox delivery and retry this leans on for compensation redelivery; this record says what the redelivered handler must do), ADR-006 (which accepts \"no…"},"542":{"u":"/docs/adr/055-repository-and-specification-contract.html","d":"ADR-055: Repository plus Specification as the Data-Access Contract","k":"Architecture Decision Records"},"543":{"u":"/docs/adr/055-repository-and-specification-contract.html#status","d":"ADR-055: Repository plus Specification as the Data-Access Contract","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-25). Revised 2026-08-01 (qualified the \"referenced nowhere\" claim about IEntityReader / IEntityQuerier: an ADC doc comment now names IEntityQuerier, though no…"},"544":{"u":"/docs/adr/055-repository-and-specification-contract.html#context","d":"ADR-055: Repository plus Specification as the Data-Access Contract","k":"Architecture Decision Records","t":"Context","x":"Every read an application handler performs has to come from somewhere, and the shape of that contract decides whether the module can still be lifted into its own service later…"},"545":{"u":"/docs/adr/055-repository-and-specification-contract.html#decision","d":"ADR-055: Repository plus Specification as the Data-Access Contract","k":"Architecture Decision Records","t":"Decision","x":"Data access is repository plus specification: interface-segregated read interfaces for the operations, expression-tree specifications for the predicates, and a build-failing…"},"546":{"u":"/docs/adr/055-repository-and-specification-contract.html#rationale","d":"ADR-055: Repository plus Specification as the Data-Access Contract","k":"Architecture Decision Records","t":"Rationale","x":"- A narrow interface is the enforcement, not a style preference. A handler that asks for IEntityReader cannot reach TableNoTracking, because the member is not on the interface.…"},"547":{"u":"/docs/adr/055-repository-and-specification-contract.html#trade-offs","d":"ADR-055: Repository plus Specification as the Data-Access Contract","k":"Architecture Decision Records","t":"Trade-offs","x":"- The ISP split is guidance, not yet a wired dependency. (Superseded by the Revision (2026-08-21) below: the split has real dependents shipped in both MMCA.ADC and MMCA.Store,…"},"548":{"u":"/docs/adr/055-repository-and-specification-contract.html#related","d":"ADR-055: Repository plus Specification as the Data-Access Contract","k":"Architecture Decision Records","t":"Related","x":"ADR-007 and ADR-008 (the extraction promise the queryable ban exists to protect), ADR-015 (the fitness-function machinery that runs this rule and its per-repo maps), ADR-014 (the…"},"549":{"u":"/docs/adr/055-repository-and-specification-contract.html#revision-2026-08-18","d":"ADR-055: Repository plus Specification as the Data-Access Contract","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"Five changes, four of them widening the contract and one of them fixing a correctness defect. The decision this record states is unchanged: data access is still repository plus…"},"550":{"u":"/docs/adr/055-repository-and-specification-contract.html#revision-2026-08-21","d":"ADR-055: Repository plus Specification as the Data-Access Contract","k":"Architecture Decision Records","t":"Revision (2026-08-21)","x":"Nothing in the contract changed; its consumers did. This revision records the first real adoption of the two surfaces this record had honestly flagged as unconsumed: the narrow…"},"551":{"u":"/docs/adr/055-repository-and-specification-contract.html#revision-2026-08-31","d":"ADR-055: Repository plus Specification as the Data-Access Contract","k":"Architecture Decision Records","t":"Revision (2026-08-31)","x":"Again nothing in the decision changed. Two things did: the querier grew a second time, and the reference application joined the two production apps as a consumer of the narrow…"},"552":{"u":"/docs/adr/055-repository-and-specification-contract.html#revision-2026-10-01","d":"ADR-055: Repository plus Specification as the Data-Access Contract","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; the consumers grew again and the anchors moved. MMCA.ADC now declares IEntityReader / IEntityQuerier at forty read-only sites across…"},"553":{"u":"/docs/adr/056-blazor-render-mode-strategy.html","d":"ADR-056: Blazor Render-Mode Strategy for the Web Heads","k":"Architecture Decision Records"},"554":{"u":"/docs/adr/056-blazor-render-mode-strategy.html#status","d":"ADR-056: Blazor Render-Mode Strategy for the Web Heads","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-28). Revised 2026-08-14: re-anchored the host, base-class and AppHost citations to their current lines; scoped the \"only @rendermode attributes\" enumeration to…"},"555":{"u":"/docs/adr/056-blazor-render-mode-strategy.html#context","d":"ADR-056: Blazor Render-Mode Strategy for the Web Heads","k":"Architecture Decision Records","t":"Context","x":"Both web applications are Blazor Web Apps: a static server-rendered (SSR) prerender pass produces the first HTML, then an interactive runtime takes over, either a Blazor Server…"},"556":{"u":"/docs/adr/056-blazor-render-mode-strategy.html#decision","d":"ADR-056: Blazor Render-Mode Strategy for the Web Heads","k":"Architecture Decision Records","t":"Decision","x":"Run one render mode for the entire routable component tree, chosen at the application root, default InteractiveAuto, with prerendering left on and the resulting double fetch…"},"557":{"u":"/docs/adr/056-blazor-render-mode-strategy.html#rationale","d":"ADR-056: Blazor Render-Mode Strategy for the Web Heads","k":"Architecture Decision Records","t":"Rationale","x":"- InteractiveAuto gets both halves without asking page authors to choose. The first visit gets the Server circuit's immediate interactivity while the WASM bundle downloads in the…"},"558":{"u":"/docs/adr/056-blazor-render-mode-strategy.html#trade-offs","d":"ADR-056: Blazor Render-Mode Strategy for the Web Heads","k":"Architecture Decision Records","t":"Trade-offs","x":"- Everything shared has to run in both runtimes. The WASM-compatibility layer rule (MMCA.Common.LayerEnforcement.targets:102-115) forbids the shared UI package from touching…"},"559":{"u":"/docs/adr/056-blazor-render-mode-strategy.html#revision-2026-10-01","d":"ADR-056: Blazor Render-Mode Strategy for the Web Heads","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. The prerender-skip guard bullet now lists four stated reasons rather than three: ADCHome skips its prerender fetch because an un-timed call to a…"},"560":{"u":"/docs/adr/056-blazor-render-mode-strategy.html#related","d":"ADR-056: Blazor Render-Mode Strategy for the Web Heads","k":"Architecture Decision Records","t":"Related","x":"ADR-022 (reads the HttpOnly session cookie during the SSR prerender pass this decision keeps enabled), ADR-027 (flows one culture through the SSR to Server to WASM sequence this…"},"561":{"u":"/docs/adr/057-expand-contract-schema-evolution-gate.html","d":"ADR-057: Expand/Contract Schema Evolution Enforced as a CI Gate","k":"Architecture Decision Records"},"562":{"u":"/docs/adr/057-expand-contract-schema-evolution-gate.html#status","d":"ADR-057: Expand/Contract Schema Evolution Enforced as a CI Gate","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-28). Revised 2026-08-01: the diff now fails closed in both repos (the true is gone and MMCA.Store's build-and-test checkout sets fetch-depth: 0), so the…"},"563":{"u":"/docs/adr/057-expand-contract-schema-evolution-gate.html#context","d":"ADR-057: Expand/Contract Schema Evolution Enforced as a CI Gate","k":"Architecture Decision Records","t":"Context","x":"ADR-030 decides who applies a migration: every service host runs DatabaseInitStrategy = Migrate and self-applies its pending EF Core migrations at startup as the sole migrator,…"},"564":{"u":"/docs/adr/057-expand-contract-schema-evolution-gate.html#decision","d":"ADR-057: Expand/Contract Schema Evolution Enforced as a CI Gate","k":"Architecture Decision Records","t":"Decision","x":"Schema changes follow expand/contract, and a CI step enforces the contract half. - Expand now, contract later, as a written rule. Adding nullable columns, new tables and new…"},"565":{"u":"/docs/adr/057-expand-contract-schema-evolution-gate.html#rationale","d":"ADR-057: Expand/Contract Schema Evolution Enforced as a CI Gate","k":"Architecture Decision Records","t":"Rationale","x":"- Rollback is one-way for schema, so the check belongs where the drop is still cheap. The only moment a destructive migration can be reconsidered for free is the PR that adds it;…"},"566":{"u":"/docs/adr/057-expand-contract-schema-evolution-gate.html#trade-offs","d":"ADR-057: Expand/Contract Schema Evolution Enforced as a CI Gate","k":"Architecture Decision Records","t":"Trade-offs","x":"- Three operations, not a model of compatibility. AlterColumn narrowing a type or flipping a column to NOT NULL, DropForeignKey, DropPrimaryKey, DropSchema, RenameColumn and a…"},"567":{"u":"/docs/adr/057-expand-contract-schema-evolution-gate.html#revision-2026-10-01","d":"ADR-057: Expand/Contract Schema Evolution Enforced as a CI Gate","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Both deploy.yml files grew, so every workflow citation is re-anchored to the current lines: the startup-migrate note…"},"568":{"u":"/docs/adr/057-expand-contract-schema-evolution-gate.html#related","d":"ADR-057: Expand/Contract Schema Evolution Enforced as a CI Gate","k":"Architecture Decision Records","t":"Related","x":"ADR-030 (decides that each service self-applies its migrations at startup, which is precisely why a rolled-back revision meets the new schema; this ADR constrains what those…"},"569":{"u":"/docs/adr/058-runtime-conformance-suites-as-a-package.html","d":"ADR-058: Runtime Conformance Suites Shipped as a Package","k":"Architecture Decision Records"},"570":{"u":"/docs/adr/058-runtime-conformance-suites-as-a-package.html#status","d":"ADR-058: Runtime Conformance Suites Shipped as a Package","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-28; revised 2026-08-14, 2026-08-18, 2026-08-23, and 2026-09-03). Revised 2026-09-22 (the layer rules also ship as compile-time MSBuild targets inside…"},"571":{"u":"/docs/adr/058-runtime-conformance-suites-as-a-package.html#context","d":"ADR-058: Runtime Conformance Suites Shipped as a Package","k":"Architecture Decision Records","t":"Context","x":"ADR-015 turned the architecture invariants into build-gating tests, and drew its own boundary explicitly: the fitness suite asserts \"structure / registration, not runtime…"},"572":{"u":"/docs/adr/058-runtime-conformance-suites-as-a-package.html#decision","d":"ADR-058: Runtime Conformance Suites Shipped as a Package","k":"Architecture Decision Records","t":"Decision","x":"Ship the runtime conformance suites in the MMCA.Common.Testing package as abstract behavioral bases that each consuming host subclasses, and run every one of them against a host…"},"573":{"u":"/docs/adr/058-runtime-conformance-suites-as-a-package.html#rationale","d":"ADR-058: Runtime Conformance Suites Shipped as a Package","k":"Architecture Decision Records","t":"Rationale","x":"- Runtime conformance is the half ADR-015 excluded. Structural rules answer \"is the code shaped correctly\"; these suites answer \"does the composed host behave correctly\". A host…"},"574":{"u":"/docs/adr/058-runtime-conformance-suites-as-a-package.html#trade-offs","d":"ADR-058: Runtime Conformance Suites Shipped as a Package","k":"Architecture Decision Records","t":"Trade-offs","x":"- Opt-in per host, exactly like ADR-015. The framework ships the suites; a host gets the gate only once someone writes the subclass. That is the same audit-the-inventory caveat,…"},"575":{"u":"/docs/adr/058-runtime-conformance-suites-as-a-package.html#revision-2026-09-10","d":"ADR-058: Runtime Conformance Suites Shipped as a Package","k":"Architecture Decision Records","t":"Revision (2026-09-10)","x":"The security-headers suite reaches both UI web hosts, so the adoption inventory above is no longer Gateway-only for it. ADC added MMCA.ADC/Tests/Hosts/MMCA.ADC.UI.Web.Tests,…"},"576":{"u":"/docs/adr/058-runtime-conformance-suites-as-a-package.html#revision-2026-09-22-the-layer-rules-also-ship-as-compile-time-targets","d":"ADR-058: Runtime Conformance Suites Shipped as a Package","k":"Architecture Decision Records","t":"Revision (2026-09-22): the layer rules also ship as compile-time targets","x":"The runtime suites above judge compiled assemblies, which places the first failure in the architecture test tier. MMCA.Common.Shared now also packs…"},"577":{"u":"/docs/adr/058-runtime-conformance-suites-as-a-package.html#revision-2026-09-25-committed-openapi-documents-and-page-test-bases-in-testingui","d":"ADR-058: Runtime Conformance Suites Shipped as a Package","k":"Architecture Decision Records","t":"Revision (2026-09-25): committed OpenAPI documents, and page-test bases in Testing.UI","x":"The live-document guard now sits beside a committed document in both consumers. MMCA.ADC and MMCA.Store each write Source/Services/ /openapi/ .json at build time, commit it, and…"},"578":{"u":"/docs/adr/058-runtime-conformance-suites-as-a-package.html#revision-2026-10-01","d":"ADR-058: Runtime Conformance Suites Shipped as a Package","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; the seven bases still ship in MMCA.Common.Testing and are subclassed as inventoried above. Three statements are corrected. The gateway probe…"},"579":{"u":"/docs/adr/058-runtime-conformance-suites-as-a-package.html#related","d":"ADR-058: Runtime Conformance Suites Shipped as a Package","k":"Architecture Decision Records","t":"Related","x":"ADR-015 (the structural / registration fitness layer this complements; its stated non-goal, \"not runtime behavior\", is exactly this ADR's scope, and the two tiers ship as two…"},"580":{"u":"/docs/adr/059-module-contract-and-composition.html","d":"ADR-059: The IModule Contract and Reflection-Based Module Composition","k":"Architecture Decision Records"},"581":{"u":"/docs/adr/059-module-contract-and-composition.html#status","d":"ADR-059: The IModule Contract and Reflection-Based Module Composition","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-28; revised 2026-08-14)."},"582":{"u":"/docs/adr/059-module-contract-and-composition.html#context","d":"ADR-059: The IModule Contract and Reflection-Based Module Composition","k":"Architecture Decision Records","t":"Context","x":"The framework's headline claim is that an application is built as a modular monolith and later extracted into services without rewriting business logic. ADR-008 states the…"},"583":{"u":"/docs/adr/059-module-contract-and-composition.html#decision","d":"ADR-059: The IModule Contract and Reflection-Based Module Composition","k":"Architecture Decision Records","t":"Decision","x":"Make IModule the single composition contract, discover implementations by reflection, register them in topological dependency order, and represent a disabled module by stub…"},"584":{"u":"/docs/adr/059-module-contract-and-composition.html#rationale","d":"ADR-059: The IModule Contract and Reflection-Based Module Composition","k":"Architecture Decision Records","t":"Rationale","x":"- Reflection discovery keeps hosts out of the module registration business. A host names the assemblies and gets whatever IModule types they contain: no per-module registration…"},"585":{"u":"/docs/adr/059-module-contract-and-composition.html#trade-offs","d":"ADR-059: The IModule Contract and Reflection-Based Module Composition","k":"Architecture Decision Records","t":"Trade-offs","x":"- The composition root has to name every module assembly. Discovery scans exactly the list it is handed (ModuleLoader.cs:59-65), so adding a module to a host is a third edit…"},"586":{"u":"/docs/adr/059-module-contract-and-composition.html#revision-2026-10-01","d":"ADR-059: The IModule Contract and Reflection-Based Module Composition","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The decision is unchanged; four statements are corrected against the code and the citations are re-anchored. A GetTypes() failure is no longer a skip: a…"},"587":{"u":"/docs/adr/059-module-contract-and-composition.html#related","d":"ADR-059: The IModule Contract and Reflection-Based Module Composition","k":"Architecture Decision Records","t":"Related","x":"ADR-008 (the extraction topology that consumes this model: \"a service is the monolith with one module enabled\" is a statement about ModuleLoader plus the Disabled stubs, cited…"},"588":{"u":"/docs/adr/060-performance-regression-gate.html","d":"ADR-060: Performance-Regression Gate (Committed Benchmark Baseline in CI)","k":"Architecture Decision Records"},"589":{"u":"/docs/adr/060-performance-regression-gate.html#status","d":"ADR-060: Performance-Regression Gate (Committed Benchmark Baseline in CI)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-28). Revised 2026-08-01 (corrected the count in Trade-offs: the single ratio floor names two of the eight benchmarks, so six, not seven, are gated on…"},"590":{"u":"/docs/adr/060-performance-regression-gate.html#context","d":"ADR-060: Performance-Regression Gate (Committed Benchmark Baseline in CI)","k":"Architecture Decision Records","t":"Context","x":"Rubric section 12 asks for hot-path efficiency that is measured, not assumed (Website/docs-src/governance/ArchitectureEvaluationCriteria.md:386). MMCA.Common has a…"},"591":{"u":"/docs/adr/060-performance-regression-gate.html#decision","d":"ADR-060: Performance-Regression Gate (Committed Benchmark Baseline in CI)","k":"Architecture Decision Records","t":"Decision","x":"Measure the hot-path suite on every code PR and verify the results against a committed baseline that carries two rule kinds: absolute allocation ceilings where the measurement is…"},"592":{"u":"/docs/adr/060-performance-regression-gate.html#rationale","d":"ADR-060: Performance-Regression Gate (Committed Benchmark Baseline in CI)","k":"Architecture Decision Records","t":"Rationale","x":"- A ratio is a property of the code; an absolute nanosecond count is a property of the runner. Both benchmarks in a floor run in the same process, on the same machine, in the…"},"593":{"u":"/docs/adr/060-performance-regression-gate.html#trade-offs","d":"ADR-060: Performance-Regression Gate (Committed Benchmark Baseline in CI)","k":"Architecture Decision Records","t":"Trade-offs","x":"- The Short job cannot see small latency regressions. Three warmup and three iterations (ci.yml:386) give wide confidence intervals: enough for a 1000x floor and for counting…"},"594":{"u":"/docs/adr/060-performance-regression-gate.html#revision-2026-10-01","d":"ADR-060: Performance-Regression Gate (Committed Benchmark Baseline in CI)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. The consumer load-freshness jobs no longer carry the recency query and the break-glass check inline: both MMCA.ADC and MMCA.Store now call the…"},"595":{"u":"/docs/adr/060-performance-regression-gate.html#related","d":"ADR-060: Performance-Regression Gate (Committed Benchmark Baseline in CI)","k":"Architecture Decision Records","t":"Related","x":"ADR-015 (structural fitness functions, which explicitly stop at structure and registration; this is their runtime-cost counterpart), ADR-038 (the other build-gating control set,…"},"596":{"u":"/docs/adr/061-runtime-secret-management.html","d":"ADR-061: Runtime Secret Management via Key Vault References and Managed Identity","k":"Architecture Decision Records"},"597":{"u":"/docs/adr/061-runtime-secret-management.html#status","d":"ADR-061: Runtime Secret Management via Key Vault References and Managed Identity","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-01; vault-backed configuration source recorded and citations re-anchored 2026-08-23; gateway synthetic-traffic secret recorded and citations re-anchored…"},"598":{"u":"/docs/adr/061-runtime-secret-management.html#context","d":"ADR-061: Runtime Secret Management via Key Vault References and Managed Identity","k":"Architecture Decision Records","t":"Context","x":"A Container App can hold a credential two ways: as a literal value in the app's own secrets collection, or as a reference to a Key Vault secret that the platform resolves at…"},"599":{"u":"/docs/adr/061-runtime-secret-management.html#decision","d":"ADR-061: Runtime Secret Management via Key Vault References and Managed Identity","k":"Architecture Decision Records","t":"Decision","x":"Every production secret lives in Azure Key Vault and reaches the app as a keyVaultUrl secret reference resolved by a user-assigned managed identity; the same identity also lets a…"},"600":{"u":"/docs/adr/061-runtime-secret-management.html#rationale","d":"ADR-061: Runtime Secret Management via Key Vault References and Managed Identity","k":"Architecture Decision Records","t":"Rationale","x":"- A reference has one home; a literal has as many homes as it has consumers. Three vault secrets in each repo are referenced by more than one app: Redis by all four ADC services…"},"601":{"u":"/docs/adr/061-runtime-secret-management.html#trade-offs","d":"ADR-061: Runtime Secret Management via Key Vault References and Managed Identity","k":"Architecture Decision Records","t":"Trade-offs","x":"- One identity means vault-wide read for every app that carries it. A Key Vault Secrets User grant is scoped to the vault, so any app running as the shared identity can read…"},"602":{"u":"/docs/adr/061-runtime-secret-management.html#revision-2026-09-07","d":"ADR-061: Runtime Secret Management via Key Vault References and Managed Identity","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Two changes from the 2026-09-07 security review. 1. Per-service Service Bus SAS rules (SEC-ADC-26 / SEC-Store-38). One namespace-wide rule shared by every service means any one…"},"603":{"u":"/docs/adr/061-runtime-secret-management.html#revision-2026-09-10","d":"ADR-061: Runtime Secret Management via Key Vault References and Managed Identity","k":"Architecture Decision Records","t":"Revision (2026-09-10)","x":"ADC's Gateway now reads the vault like every other deployable, closing the one adoption difference above. MMCA.ADC/Source/Hosts/MMCA.ADC.Gateway/Program.cs:66 calls…"},"604":{"u":"/docs/adr/061-runtime-secret-management.html#revision-2026-10-01","d":"ADR-061: Runtime Secret Management via Key Vault References and Managed Identity","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Every main.bicep, deploy.yml, Program.cs, sample and CI citation in the sections above is re-anchored, and the secret counts (nineteen in ADC,…"},"605":{"u":"/docs/adr/061-runtime-secret-management.html#related","d":"ADR-061: Runtime Secret Management via Key Vault References and Managed Identity","k":"Architecture Decision Records","t":"Related","x":"ADR-037 (037-field-level-encryption-at-rest.md:108-110 directs a consumer to keep the field-encryption key in Key Vault but decides no delivery mechanism, and nothing wires that…"},"606":{"u":"/docs/adr/062-slo-alerting-as-code.html","d":"ADR-062: SLO Alerting as Code with an Alert-to-Runbook Build Gate","k":"Architecture Decision Records"},"607":{"u":"/docs/adr/062-slo-alerting-as-code.html#status","d":"ADR-062: SLO Alerting as Code with an Alert-to-Runbook Build Gate","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-01). Revised 2026-08-18: Store's two operational extras (the outbox-dead-letter scheduled query rule and the outside-in Gateway availability web test with its…"},"608":{"u":"/docs/adr/062-slo-alerting-as-code.html#context","d":"ADR-062: SLO Alerting as Code with an Alert-to-Runbook Build Gate","k":"Architecture Decision Records","t":"Context","x":"ADR-041 standardized what the fleet emits: RED histograms off the CQRS pipeline, an outbox dead-letter counter, correlation ids, exporters, and the cost knobs that keep ingestion…"},"609":{"u":"/docs/adr/062-slo-alerting-as-code.html#decision","d":"ADR-062: SLO Alerting as Code with an Alert-to-Runbook Build Gate","k":"Architecture Decision Records","t":"Decision","x":"Declare each consumer's SLO alerts as data in its Bicep template, materialize them as Log Analytics scheduled query rules, and make the alert-to-runbook pairing a build gate…"},"610":{"u":"/docs/adr/062-slo-alerting-as-code.html#rationale","d":"ADR-062: SLO Alerting as Code with an Alert-to-Runbook Build Gate","k":"Architecture Decision Records","t":"Rationale","x":"- Alerts as data, not as portal state. One array is reviewable in a PR, diffable across environments, and re-deployable; the rules, the workbook, and the notification channel are…"},"611":{"u":"/docs/adr/062-slo-alerting-as-code.html#trade-offs","d":"ADR-062: SLO Alerting as Code with an Alert-to-Runbook Build Gate","k":"Architecture Decision Records","t":"Trade-offs","x":"- It is a text gate over IaC, not a check against deployed state. The base matches literal anchors and regexes in the template and headings in markdown. It proves the two files…"},"612":{"u":"/docs/adr/062-slo-alerting-as-code.html#revision-2026-09-07","d":"ADR-062: SLO Alerting as Code with an Alert-to-Runbook Build Gate","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The alert-to-runbook model is unchanged. Store's rule set grew by three, in one block from the 2026-09-07 security review (MMCA.Store/infra/main.bicep:458-459). 1. A security…"},"613":{"u":"/docs/adr/062-slo-alerting-as-code.html#revision-2026-10-01","d":"ADR-062: SLO Alerting as Code with an Alert-to-Runbook Build Gate","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Both templates grew by 19 lines above the alert block, so every main.bicep citation in the current-state sections is re-anchored: sloAlertSpecs…"},"614":{"u":"/docs/adr/062-slo-alerting-as-code.html#related","d":"ADR-062: SLO Alerting as Code with an Alert-to-Runbook Build Gate","k":"Architecture Decision Records","t":"Related","x":"ADR-041 (the telemetry this alerts on top of: it defines emission, instrumentation and cost knobs and stops before thresholds, severities and runbooks), ADR-009 (recovery…"},"615":{"u":"/docs/adr/063-accessibility-conformance-gate.html","d":"ADR-063: WCAG 2.1 AA Accessibility as a Shipped Test Contract and CI Gate","k":"Architecture Decision Records"},"616":{"u":"/docs/adr/063-accessibility-conformance-gate.html#status","d":"ADR-063: WCAG 2.1 AA Accessibility as a Shipped Test Contract and CI Gate","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-01). Revised 2026-08-14: refreshed the E2ETestBase helper line anchors (explanatory comments were added above ScanGridAsync), the two consumer suite scan counts…"},"617":{"u":"/docs/adr/063-accessibility-conformance-gate.html#context","d":"ADR-063: WCAG 2.1 AA Accessibility as a Shipped Test Contract and CI Gate","k":"Architecture Decision Records","t":"Context","x":"Accessibility was documented before it was enforced. The narrative guide (common-ACCESSIBILITY.md, rubric section 21) named WCAG 2.1 AA as the target for the shared…"},"618":{"u":"/docs/adr/063-accessibility-conformance-gate.html#decision","d":"ADR-063: WCAG 2.1 AA Accessibility as a Shipped Test Contract and CI Gate","k":"Architecture Decision Records","t":"Decision","x":"Ship WCAG 2.1 AA as a named, versioned test contract in MMCA.Common.Testing.E2E, assert it from the package's own workflow bases, and wire it as a required merge check and a…"},"619":{"u":"/docs/adr/063-accessibility-conformance-gate.html#rationale","d":"ADR-063: WCAG 2.1 AA Accessibility as a Shipped Test Contract and CI Gate","k":"Architecture Decision Records","t":"Rationale","x":"- A named constant is the contract. Putting the rule set in a shipped, referenced symbol rather than in each repo's test setup means \"what WCAG 2.1 AA means here\" has exactly one…"},"620":{"u":"/docs/adr/063-accessibility-conformance-gate.html#trade-offs","d":"ADR-063: WCAG 2.1 AA Accessibility as a Shipped Test Contract and CI Gate","k":"Architecture Decision Records","t":"Trade-offs","x":"- Best-practice rules are out of scope, deliberately. Findings axe would classify as best practice (and anything WCAG AAA) are not measured at all, so the gate can be green on a…"},"621":{"u":"/docs/adr/063-accessibility-conformance-gate.html#revision-2026-10-01","d":"ADR-063: WCAG 2.1 AA Accessibility as a Shipped Test Contract and CI Gate","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Citations are re-anchored to current source: the Identity base assertions (UserLoginTestsBase.cs:82, UserRegistrationTestsBase.cs:95,…"},"622":{"u":"/docs/adr/063-accessibility-conformance-gate.html#related","d":"ADR-063: WCAG 2.1 AA Accessibility as a Shipped Test Contract and CI Gate","k":"Architecture Decision Records","t":"Related","x":"ADR-015 (architecture fitness functions: the structural tier this parallels at the browser tier, and the same invariant-over-discipline posture), ADR-058 (runtime conformance…"},"623":{"u":"/docs/adr/064-deploy-recency-gates.html","d":"ADR-064: Deploy Preconditions as Proof-of-Recency Gates","k":"Architecture Decision Records"},"624":{"u":"/docs/adr/064-deploy-recency-gates.html#status","d":"ADR-064: Deploy Preconditions as Proof-of-Recency Gates","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-01). Revised 2026-08-07: the MMCA.Helpdesk workflow inventory below was corrected (it also carries release-templates.yml, and its ci.yml runs two jobs, not…"},"625":{"u":"/docs/adr/064-deploy-recency-gates.html#context","d":"ADR-064: Deploy Preconditions as Proof-of-Recency Gates","k":"Architecture Decision Records","t":"Context","x":"A production rollout in both deployed apps waits on a list of jobs in deploy.needs (MMCA.ADC/.github/workflows/deploy.yml:1185, MMCA.Store/.github/workflows/deploy.yml:1136).…"},"626":{"u":"/docs/adr/064-deploy-recency-gates.html#decision","d":"ADR-064: Deploy Preconditions as Proof-of-Recency Gates","k":"Architecture Decision Records","t":"Decision","x":"A production deploy is blocked not only on green tests but on proof of recency for out-of-band verification: four gates assert that a real drill, a real load run, a real broker…"},"627":{"u":"/docs/adr/064-deploy-recency-gates.html#rationale","d":"ADR-064: Deploy Preconditions as Proof-of-Recency Gates","k":"Architecture Decision Records","t":"Rationale","x":"- A proof with no expiry date is documentation, not a control. ADR-009 already required the drill to be recorded, and recording it was the honest half of the problem; a record…"},"628":{"u":"/docs/adr/064-deploy-recency-gates.html#trade-offs","d":"ADR-064: Deploy Preconditions as Proof-of-Recency Gates","k":"Architecture Decision Records","t":"Trade-offs","x":"- An unrelated stale proof blocks an unrelated deploy. A one-line hotfix does not ship when the monthly k6 cron did not fire, and the failure surfaces after merge: the gate job…"},"629":{"u":"/docs/adr/064-deploy-recency-gates.html#revision-2026-10-01","d":"ADR-064: Deploy Preconditions as Proof-of-Recency Gates","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The four gate bodies no longer live in each repo's deploy.yml. MMCA.Common v1.216.0 (463) added the composite action MMCA.Common/.github/actions/freshness-gate/action.yml, and…"},"630":{"u":"/docs/adr/064-deploy-recency-gates.html#related","d":"ADR-064: Deploy Preconditions as Proof-of-Recency Gates","k":"Architecture Decision Records","t":"Related","x":"ADR-009 (states the recovery objectives and requires that a restore be drilled and recorded; this record decides that a deploy is blocked on how recently that drill, and the…"},"631":{"u":"/docs/adr/065-scaffolding-templates.html","d":"ADR-065: Scaffolding templates derived from the reference app","k":"Architecture Decision Records","x":"Status: Accepted (2026-08-02). Revised 2026-08-07: the staged analyzer delta relaxes three rules rather than one; mmca-module prints seven wire-ups rather than five, and a…"},"632":{"u":"/docs/adr/065-scaffolding-templates.html#context","d":"ADR-065: Scaffolding templates derived from the reference app","k":"Architecture Decision Records","t":"Context","x":"Build by hand is accurate and complete, and phases 1 through 6 of it are transcription work (common-BUILD-BY-HAND.md:98 through :1255). Its own instruction for the load-bearing…"},"633":{"u":"/docs/adr/065-scaffolding-templates.html#decision","d":"ADR-065: Scaffolding templates derived from the reference app","k":"Architecture Decision Records","t":"Decision","x":"Ship a dotnet new template pack, MMCA.Templates, containing four templates: The template content is the MMCA.Helpdesk reference application itself, staged at pack time.…"},"634":{"u":"/docs/adr/065-scaffolding-templates.html#rationale","d":"ADR-065: Scaffolding templates derived from the reference app","k":"Architecture Decision Records","t":"Rationale","x":"Deriving from the seed rather than maintaining a template tree is the whole design. A hand-maintained copy of a 12-project solution drifts within one release, and drift in a…"},"635":{"u":"/docs/adr/065-scaffolding-templates.html#trade-offs","d":"ADR-065: Scaffolding templates derived from the reference app","k":"Architecture Decision Records","t":"Trade-offs","x":"- One documented one-time fixup in every generated app, above, covering all three relaxed rules. The alternative to the SA1210 half of the delta was moving every app-local using…"},"636":{"u":"/docs/adr/065-scaffolding-templates.html#revision-2026-10-01","d":"ADR-065: Scaffolding templates derived from the reference app","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. The frozen wire contract is now keyed by each event's [EventName] value rather than its CLR type name…"},"637":{"u":"/docs/adr/066-broker-transport-selection.html","d":"ADR-066: Broker Transport Selection and Dev/Prod Parity","k":"Architecture Decision Records"},"638":{"u":"/docs/adr/066-broker-transport-selection.html#status","d":"ADR-066: Broker Transport Selection and Dev/Prod Parity","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-07). Revised 2026-08-14 (source citations re-anchored; the ADC AppHost comment that used to say no WithBroker() was wired has been corrected in code, so the…"},"639":{"u":"/docs/adr/066-broker-transport-selection.html#context","d":"ADR-066: Broker Transport Selection and Dev/Prod Parity","k":"Architecture Decision Records","t":"Context","x":"ADR-003 decides that integration events leave an aggregate through the outbox and are published by OutboxProcessor via IMessageBus, and it settles the dispatch question…"},"640":{"u":"/docs/adr/066-broker-transport-selection.html#decision","d":"ADR-066: Broker Transport Selection and Dev/Prod Parity","k":"Architecture Decision Records","t":"Decision","x":"Keep one IMessageBus abstraction with a three-value transport selector, choose the value at the deployment edge (never in application code), configure both broker transports…"},"641":{"u":"/docs/adr/066-broker-transport-selection.html#rationale","d":"ADR-066: Broker Transport Selection and Dev/Prod Parity","k":"Architecture Decision Records","t":"Rationale","x":"- The transport is a deployment fact, so it lives at the deployment edge. The only difference between a laptop and production is two environment variables set by the AppHost or…"},"642":{"u":"/docs/adr/066-broker-transport-selection.html#trade-offs","d":"ADR-066: Broker Transport Selection and Dev/Prod Parity","k":"Architecture Decision Records","t":"Trade-offs","x":"- Two brokers means two behaviors to keep aligned. Configuration parity is enforced by one code path, but the products still differ (Service Bus supports delayed redelivery…"},"643":{"u":"/docs/adr/066-broker-transport-selection.html#revision-2026-09-07","d":"ADR-066: Broker Transport Selection and Dev/Prod Parity","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The transport selection is unchanged. The credential topology under it is (SEC-ADC-26 / SEC-Store-38). Both repos previously sourced their Service Bus connection strings from one…"},"644":{"u":"/docs/adr/066-broker-transport-selection.html#revision-2026-10-01","d":"ADR-066: Broker Transport Selection and Dev/Prod Parity","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The local Service Bus emulator path is no longer ADC-only. Store's AppHost selects its broker once on STOREBROKER=servicebus: set, it calls AddServiceBusEmulatorBroker over the…"},"645":{"u":"/docs/adr/066-broker-transport-selection.html#related","d":"ADR-066: Broker Transport Selection and Dev/Prod Parity","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (the outbox that feeds IMessageBus; this ADR picks the transport underneath it), ADR-016 (the MassTransit v8 pin the emulator tier must work within, which is why the…"},"646":{"u":"/docs/adr/067-ui-module-shell-composition.html","d":"ADR-067: Shared Blazor Application Shell and IUIModule Composition","k":"Architecture Decision Records"},"647":{"u":"/docs/adr/067-ui-module-shell-composition.html#status","d":"ADR-067: Shared Blazor Application Shell and IUIModule Composition","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-07). Revised 2026-08-29: records the component-vendor choice (MudBlazor) that the Context already scoped to this ADR, and the IToastService / IAppDialogService…"},"648":{"u":"/docs/adr/067-ui-module-shell-composition.html#context","d":"ADR-067: Shared Blazor Application Shell and IUIModule Composition","k":"Architecture Decision Records","t":"Context","x":"ADR-059 decided how a module plugs into the server: an IModule implementation is discovered by reflection, registered in topological order, and a host composes an application out…"},"649":{"u":"/docs/adr/067-ui-module-shell-composition.html#decision","d":"ADR-067: Shared Blazor Application Shell and IUIModule Composition","k":"Architecture Decision Records","t":"Decision","x":"Ship the application shell in the framework package and let each module plug into it by implementing IUIModule, resolved from DI as IEnumerable . - The contract is four members,…"},"650":{"u":"/docs/adr/067-ui-module-shell-composition.html#rationale","d":"ADR-067: Shared Blazor Application Shell and IUIModule Composition","k":"Architecture Decision Records","t":"Rationale","x":"- One composition model across both tiers. A module already declares its server-side surface through IModule (ADR-059); declaring its UI surface through IUIModule means \"add a…"},"651":{"u":"/docs/adr/067-ui-module-shell-composition.html#trade-offs","d":"ADR-067: Shared Blazor Application Shell and IUIModule Composition","k":"Architecture Decision Records","t":"Trade-offs","x":"- Assembly is required even when it carries no route. A host-only module that contributes only a layout component still has to return an assembly, which then joins…"},"652":{"u":"/docs/adr/067-ui-module-shell-composition.html#revision-2026-10-01","d":"ADR-067: Shared Blazor Application Shell and IUIModule Composition","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Re-anchored the citations that moved: Routes.razor (inject :7, router :12-14, AuthorizeRouteView :27-50), NavMenu.razor (inject :9, filters…"},"653":{"u":"/docs/adr/067-ui-module-shell-composition.html#related","d":"ADR-067: Shared Blazor Application Shell and IUIModule Composition","k":"Architecture Decision Records","t":"Related","x":"ADR-059 (the server-side IModule contract this mirrors in the presentation layer), ADR-056 (the render-mode strategy for the web heads, which decides how these components render…"},"654":{"u":"/docs/adr/068-value-objects-as-validated-primitives.html","d":"ADR-068: Value Objects as Validated Domain Primitives","k":"Architecture Decision Records"},"655":{"u":"/docs/adr/068-value-objects-as-validated-primitives.html#status","d":"ADR-068: Value Objects as Validated Domain Primitives","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-07). Revised 2026-08-31 (Money's non-validating construction paths named, Currency's converter counted among the serialization annotations, Address added to the…"},"656":{"u":"/docs/adr/068-value-objects-as-validated-primitives.html#context","d":"ADR-068: Value Objects as Validated Domain Primitives","k":"Architecture Decision Records","t":"Context","x":"A domain model has two kinds of small type: the identity of a thing, and a value the thing carries. ADR-048 recorded the identity half: identifiers stay primitives named through…"},"657":{"u":"/docs/adr/068-value-objects-as-validated-primitives.html#decision","d":"ADR-068: Value Objects as Validated Domain Primitives","k":"Architecture Decision Records","t":"Decision","x":"Model a domain value that carries an invariant as an immutable record value object with a Result-returning factory; keep identifiers primitive (ADR-048). - One abstract record…"},"658":{"u":"/docs/adr/068-value-objects-as-validated-primitives.html#rationale","d":"ADR-068: Value Objects as Validated Domain Primitives","k":"Architecture Decision Records","t":"Rationale","x":"- The invariant belongs to the type, not to every caller. A string email can be validated in one handler and not the next; an Email cannot exist unvalidated, because the only…"},"659":{"u":"/docs/adr/068-value-objects-as-validated-primitives.html#trade-offs","d":"ADR-068: Value Objects as Validated Domain Primitives","k":"Architecture Decision Records","t":"Trade-offs","x":"- The pattern is not uniformly applied. Only three of the seven types have a companion Invariants class; the rest inline their checks. Only two of the four multi-field values…"},"660":{"u":"/docs/adr/068-value-objects-as-validated-primitives.html#revision-2026-10-01","d":"ADR-068: Value Objects as Validated Domain Primitives","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision changed; four statements were corrected and anchors refreshed. (1) The Money sugar paragraph claimed an external caller cannot assemble a Money whose currency was…"},"661":{"u":"/docs/adr/068-value-objects-as-validated-primitives.html#related","d":"ADR-068: Value Objects as Validated Domain Primitives","k":"Architecture Decision Records","t":"Related","x":"ADR-048 (the deliberate opposite call for identifiers: primitives behind aliases, wrapper structs rejected, because identifiers cross process boundaries constantly and carry no…"},"662":{"u":"/docs/adr/069-shared-data-protection-key-ring.html","d":"ADR-069: Shared DataProtection Key Ring for Scaled-Out Hosts","k":"Architecture Decision Records"},"663":{"u":"/docs/adr/069-shared-data-protection-key-ring.html#status","d":"ADR-069: Shared DataProtection Key Ring for Scaled-Out Hosts","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-07). Updated 2026-08-14: Store's adoption has landed and is live (its own dedicated storage account, gated on dataProtectionStorageReady), and the ADC call-site…"},"664":{"u":"/docs/adr/069-shared-data-protection-key-ring.html#context","d":"ADR-069: Shared DataProtection Key Ring for Scaled-Out Hosts","k":"Architecture Decision Records","t":"Context","x":"ASP.NET Core's DataProtection default keeps the key ring in memory, per process. That is correct for a single-process host and wrong for a scaled-out one: every replica generates…"},"665":{"u":"/docs/adr/069-shared-data-protection-key-ring.html#decision","d":"ADR-069: Shared DataProtection Key Ring for Scaled-Out Hosts","k":"Architecture Decision Records","t":"Decision","x":"Add one opt-in registration call, AddCommonDataProtection, that persists the key ring to a single Azure blob so every replica of a host shares one ring…"},"666":{"u":"/docs/adr/069-shared-data-protection-key-ring.html#rationale","d":"ADR-069: Shared DataProtection Key Ring for Scaled-Out Hosts","k":"Architecture Decision Records","t":"Rationale","x":"- The key ring is the smallest thing that has to be shared. Sticky sessions would paper over the symptom while making a replica restart a mass sign-out, and a shared cache would…"},"667":{"u":"/docs/adr/069-shared-data-protection-key-ring.html#trade-offs","d":"ADR-069: Shared DataProtection Key Ring for Scaled-Out Hosts","k":"Architecture Decision Records","t":"Trade-offs","x":"- The key ring is encrypted at rest only where gate 2 was switched on. Both templates ship the path and both default it off (2026-09-10 revision), so on default parameters the…"},"668":{"u":"/docs/adr/069-shared-data-protection-key-ring.html#revision-2026-09-10","d":"ADR-069: Shared DataProtection Key Ring for Scaled-Out Hosts","k":"Architecture Decision Records","t":"Revision (2026-09-10)","x":"Gate 2 ships in both templates, default off, so \"configured nowhere\" is retired. The framework side is unchanged: AddCommonDataProtection…"},"669":{"u":"/docs/adr/069-shared-data-protection-key-ring.html#revision-2026-10-01","d":"ADR-069: Shared DataProtection Key Ring for Scaled-Out Hosts","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; this revision refreshes citations only. Re-anchored in Context, Decision and the Store adoption notes: the ADC replica caps, sticky UI ingress,…"},"670":{"u":"/docs/adr/069-shared-data-protection-key-ring.html#related","d":"ADR-069: Shared DataProtection Key Ring for Scaled-Out Hosts","k":"Architecture Decision Records","t":"Related","x":"ADR-022 (the browser session cookies whose decryption this makes replica-independent, together with the antiforgery tokens the SSR pages mint), ADR-008 (the multi-host topology…"},"671":{"u":"/docs/adr/070-fail-fast-configuration-contract.html","d":"ADR-070: Fail-Fast Configuration Contract","k":"Architecture Decision Records"},"672":{"u":"/docs/adr/070-fail-fast-configuration-contract.html#status","d":"ADR-070: Fail-Fast Configuration Contract","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-07). Revised 2026-08-14 (source citations re-anchored). Revised 2026-08-23 (inventory re-counted after the password-reset vertical and the opt-in feature waves:…"},"673":{"u":"/docs/adr/070-fail-fast-configuration-contract.html#context","d":"ADR-070: Fail-Fast Configuration Contract","k":"Architecture Decision Records","t":"Context","x":"Every host in the workspace reads a dozen or more configuration sections: connection strings, SMTP, JWT key material, outbox tuning, message-bus provider, module enablement,…"},"674":{"u":"/docs/adr/070-fail-fast-configuration-contract.html#decision","d":"ADR-070: Fail-Fast Configuration Contract","k":"Architecture Decision Records","t":"Decision","x":"Bind every settings section through a validating chain that runs at startup, and read the bound value through IOptions of the concrete settings class. - One binding shape, used…"},"675":{"u":"/docs/adr/070-fail-fast-configuration-contract.html#rationale","d":"ADR-070: Fail-Fast Configuration Contract","k":"Architecture Decision Records","t":"Rationale","x":"- A boot failure is cheaper than a first-use failure. A host that will not start is caught by the deployment, by a local dotnet run, or by CI. A host that starts and fails on the…"},"676":{"u":"/docs/adr/070-fail-fast-configuration-contract.html#trade-offs","d":"ADR-070: Fail-Fast Configuration Contract","k":"Architecture Decision Records","t":"Trade-offs","x":"- Nothing enforces it. There is no architecture fitness test asserting that a new AddOptions call carries ValidateDataAnnotations().ValidateOnStart(). The uniformity above is…"},"677":{"u":"/docs/adr/070-fail-fast-configuration-contract.html#revision-2026-10-01","d":"ADR-070: Fail-Fast Configuration Contract","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; the inventory and several descriptions were brought back in line with source. The framework now has thirty-one registrations on the chain rather…"},"678":{"u":"/docs/adr/070-fail-fast-configuration-contract.html#related","d":"ADR-070: Fail-Fast Configuration Contract","k":"Architecture Decision Records","t":"Related","x":"ADR-025 (startup warm-up and readiness gating: this contract decides what happens before a host reaches that machinery), ADR-031 (feature flags read from configuration, whose…"},"679":{"u":"/docs/adr/071-barcode-scanning-and-qr-display.html","d":"ADR-071: Device Capability Pattern for Barcode Scanning and QR Display","k":"Architecture Decision Records"},"680":{"u":"/docs/adr/071-barcode-scanning-and-qr-display.html#status","d":"ADR-071: Device Capability Pattern for Barcode Scanning and QR Display","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-12). Amended 2026-08-13: the composition-time string trade-off below was resolved in v1.147.0 by a deferred-resolution overload; see the updated trade-off…"},"681":{"u":"/docs/adr/071-barcode-scanning-and-qr-display.html#context","d":"ADR-071: Device Capability Pattern for Barcode Scanning and QR Display","k":"Architecture Decision Records","t":"Context","x":"ADC's badge check-in feature (ADR-072) needs two things that look like one thing: an attendee's device has to show a QR code, and an organizer's device has to read one. They are…"},"682":{"u":"/docs/adr/071-barcode-scanning-and-qr-display.html#decision","d":"ADR-071: Device Capability Pattern for Barcode Scanning and QR Display","k":"Architecture Decision Records","t":"Decision","x":"Split the feature by what it actually depends on: QR display ships as a shared component, barcode scanning ships as an ADR-042 capability whose native half is opt-in per head. -…"},"683":{"u":"/docs/adr/071-barcode-scanning-and-qr-display.html#rationale","d":"ADR-071: Device Capability Pattern for Barcode Scanning and QR Display","k":"Architecture Decision Records","t":"Rationale","x":"- Rendering a QR is not a device concern, so making it one would have been ceremony. As a capability it would have needed an interface, a null fallback and a native override for…"},"684":{"u":"/docs/adr/071-barcode-scanning-and-qr-display.html#trade-offs","d":"ADR-071: Device Capability Pattern for Barcode Scanning and QR Display","k":"Architecture Decision Records","t":"Trade-offs","x":"- The scan page's text is the caller's delegate, not a string (resolved in v1.147.0). cancelText and cameraDescription arrive as Func and are invoked once per scan, when the…"},"685":{"u":"/docs/adr/071-barcode-scanning-and-qr-display.html#revision-2026-10-01","d":"ADR-071: Device Capability Pattern for Barcode Scanning and QR Display","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. The package pin citations are re-anchored to MMCA.Common/Directory.Packages.props:191 (QRCoder 1.8.0) and :225 (ZXing.Net.Maui.Controls 0.10.4).…"},"686":{"u":"/docs/adr/071-barcode-scanning-and-qr-display.html#related","d":"ADR-071: Device Capability Pattern for Barcode Scanning and QR Display","k":"Architecture Decision Records","t":"Related","x":"ADR-042 (the capability pattern this extends: contract in MMCA.Common.UI, native implementation in MMCA.Common.UI.Maui, override after AddUIShared), ADR-072 (the ADC feature that…"},"687":{"u":"/docs/adr/072-qr-badge-check-in-and-points.html","d":"ADR-072: QR Badge Check-In and Points Gamification in ADC","k":"Architecture Decision Records"},"688":{"u":"/docs/adr/072-qr-badge-check-in-and-points.html#status","d":"ADR-072: QR Badge Check-In and Points Gamification in ADC","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-13). Amended (2026-08-14): ADC shipped two attendee-self-recorded scan surfaces (sponsor booth visits and room self check-in), a third CheckInScope, a sixth…"},"689":{"u":"/docs/adr/072-qr-badge-check-in-and-points.html#context","d":"ADR-072: QR Badge Check-In and Points Gamification in ADC","k":"Architecture Decision Records","t":"Context","x":"ADC wanted two conference-day capabilities that turn out to be one mechanism. Organizers want to know who actually attended which session, which the schedule cannot tell them: a…"},"690":{"u":"/docs/adr/072-qr-badge-check-in-and-points.html#decision","d":"ADR-072: QR Badge Check-In and Points Gamification in ADC","k":"Architecture Decision Records","t":"Decision","x":"AttendeeBadge (MMCA.ADC/Source/Modules/Engagement/MMCA.ADC.Engagement.Domain/Badges/AttendeeBadge.cs:17-24) is one row per user holding a single Guid Credential, minted on first…"},"691":{"u":"/docs/adr/072-qr-badge-check-in-and-points.html#rationale","d":"ADR-072: QR Badge Check-In and Points Gamification in ADC","k":"Architecture Decision Records","t":"Rationale","x":"- An opaque credential makes the server the only interpreter. A JWT or HMAC badge would verify offline, but the scanning device is online by necessity (it has to write a check-in…"},"692":{"u":"/docs/adr/072-qr-badge-check-in-and-points.html#trade-offs","d":"ADR-072: QR Badge Check-In and Points Gamification in ADC","k":"Architecture Decision Records","t":"Trade-offs","x":"- The badge credential is a bearer value. Anyone who photographs an attendee's screen can be checked in as that attendee. The mitigations are that a badge scan is organizer-side,…"},"693":{"u":"/docs/adr/072-qr-badge-check-in-and-points.html#revision-2026-10-01","d":"ADR-072: QR Badge Check-In and Points Gamification in ADC","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"One content fact changed and is corrected in place in the Decision: a fourth handler raises the feedback events. The event-side batch path,…"},"694":{"u":"/docs/adr/072-qr-badge-check-in-and-points.html#related","d":"ADR-072: QR Badge Check-In and Points Gamification in ADC","k":"Architecture Decision Records","t":"Related","x":"ADR-071 (the framework halves this consumes: the QR component on /my-badge and the scanner capability behind /check-in), ADR-003 (the outbox path AttendeeCheckedIn and the two…"},"695":{"u":"/docs/adr/073-multi-tenancy-model.html","d":"ADR-073: Multi-Tenancy (Shared-Schema Query Filter plus DB-per-Tenant Routing)","k":"Architecture Decision Records"},"696":{"u":"/docs/adr/073-multi-tenancy-model.html#status","d":"ADR-073: Multi-Tenancy (Shared-Schema Query Filter plus DB-per-Tenant Routing)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-13). The implementation lands in the MMCA.Common enterprise capability wave release, alongside the scheduler, audit trail, DSAR export, and CSV export work. It…"},"697":{"u":"/docs/adr/073-multi-tenancy-model.html#context","d":"ADR-073: Multi-Tenancy (Shared-Schema Query Filter plus DB-per-Tenant Routing)","k":"Architecture Decision Records","t":"Context","x":"MMCA.Common already partitions data along two axes and neither of them is a tenant. ADR-006 partitions by source name (every entity resolves to a DataSourceKey(Engine, Name),…"},"698":{"u":"/docs/adr/073-multi-tenancy-model.html#decision","d":"ADR-073: Multi-Tenancy (Shared-Schema Query Filter plus DB-per-Tenant Routing)","k":"Architecture Decision Records","t":"Decision","x":"Ship shared-schema tenancy as a second named query filter, with per-tenant database routing as a configuration override on the same source key, both opt-in and both inert until a…"},"699":{"u":"/docs/adr/073-multi-tenancy-model.html#rationale","d":"ADR-073: Multi-Tenancy (Shared-Schema Query Filter plus DB-per-Tenant Routing)","k":"Architecture Decision Records","t":"Rationale","x":"- A query filter is the only place the rule cannot be forgotten. Per-handler Where clauses are correct until the tenth handler, and the tenth handler is a data leak rather than a…"},"700":{"u":"/docs/adr/073-multi-tenancy-model.html#trade-offs","d":"ADR-073: Multi-Tenancy (Shared-Schema Query Filter plus DB-per-Tenant Routing)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Reads are on discipline where writes are on an invariant. A consumer calling EF's own parameterless IgnoreQueryFilters() on a raw Table surface drops the tenant filter along…"},"701":{"u":"/docs/adr/073-multi-tenancy-model.html#related","d":"ADR-073: Multi-Tenancy (Shared-Schema Query Filter plus DB-per-Tenant Routing)","k":"Architecture Decision Records","t":"Related","x":"ADR-006 (the source-name axis this composes with: an override re-points a DataSourceKey without changing it, and the per-source outbox this record drains once per tenant),…"},"702":{"u":"/docs/adr/073-multi-tenancy-model.html#revision-2026-09-11","d":"ADR-073: Multi-Tenancy (Shared-Schema Query Filter plus DB-per-Tenant Routing)","k":"Architecture Decision Records","t":"Revision (2026-09-11)","x":"The gap this closes was never written down here. Everything above is about the tenant inside a request: the middleware resolves it, the named filter composes on it, the write…"},"703":{"u":"/docs/adr/073-multi-tenancy-model.html#revision-2026-10-01","d":"ADR-073: Multi-Tenancy (Shared-Schema Query Filter plus DB-per-Tenant Routing)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The body now agrees with the column the 2026-09-11 Revision added. \"Background work drains and migrates per tenant\" still stated that there was deliberately no OutboxMessage…"},"704":{"u":"/docs/adr/074-recurring-job-scheduler.html","d":"ADR-074: Recurring Job Scheduler (Persistent Cron Jobs on the Outbox Claim-Lease Pattern)","k":"Architecture Decision Records"},"705":{"u":"/docs/adr/074-recurring-job-scheduler.html#status","d":"ADR-074: Recurring Job Scheduler (Persistent Cron Jobs on the Outbox Claim-Lease Pattern)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-13; revised 2026-08-14, 2026-08-18, 2026-08-31). The implementation lands in the MMCA.Common \"enterprise capability wave\" release and is opt-in: a host calls…"},"706":{"u":"/docs/adr/074-recurring-job-scheduler.html#context","d":"ADR-074: Recurring Job Scheduler (Persistent Cron Jobs on the Outbox Claim-Lease Pattern)","k":"Architecture Decision Records","t":"Context","x":"The framework had two kinds of background work and neither of them is a schedule. OutboxProcessor…"},"707":{"u":"/docs/adr/074-recurring-job-scheduler.html#decision","d":"ADR-074: Recurring Job Scheduler (Persistent Cron Jobs on the Outbox Claim-Lease Pattern)","k":"Architecture Decision Records","t":"Decision","x":"A persistent job store plus a single-runner claim lease, reusing the exact idiom the outbox proved. The outbox claims a batch with an ExecuteUpdateAsync that sets LockedUntil and…"},"708":{"u":"/docs/adr/074-recurring-job-scheduler.html#rationale","d":"ADR-074: Recurring Job Scheduler (Persistent Cron Jobs on the Outbox Claim-Lease Pattern)","k":"Architecture Decision Records","t":"Rationale","x":"- The lease is already proven under production load. Multi-replica correctness for recurring work is the hard part, and it was solved once for the outbox: an atomic claim update,…"},"709":{"u":"/docs/adr/074-recurring-job-scheduler.html#trade-offs","d":"ADR-074: Recurring Job Scheduler (Persistent Cron Jobs on the Outbox Claim-Lease Pattern)","k":"Architecture Decision Records","t":"Trade-offs","x":"- A polling loop is not a real-time scheduler. Worst-case start lag is one polling interval, 30 seconds at the default, so sub-minute precision is not on offer. A job that must…"},"710":{"u":"/docs/adr/074-recurring-job-scheduler.html#revision-2026-10-01","d":"ADR-074: Recurring Job Scheduler (Persistent Cron Jobs on the Outbox Claim-Lease Pattern)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. The job-store field list now names LastError, a nullable string the entry already carries…"},"711":{"u":"/docs/adr/074-recurring-job-scheduler.html#related","d":"ADR-074: Recurring Job Scheduler (Persistent Cron Jobs on the Outbox Claim-Lease Pattern)","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (the outbox whose claim-lease idiom and smart wait this reuses verbatim, and whose at-least-once posture it inherits along with the idempotency obligation on job bodies),…"},"712":{"u":"/docs/adr/075-audit-trail.html","d":"ADR-075: Audit Trail (Same-Transaction Field-Level Change History)","k":"Architecture Decision Records"},"713":{"u":"/docs/adr/075-audit-trail.html#status","d":"ADR-075: Audit Trail (Same-Transaction Field-Level Change History)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-13; corrected 2026-08-14: the adoption sweep and the ApplicationDbContext line citations). The implementation lands in the MMCA.Common \"enterprise capability…"},"714":{"u":"/docs/adr/075-audit-trail.html#context","d":"ADR-075: Audit Trail (Same-Transaction Field-Level Change History)","k":"Architecture Decision Records","t":"Context","x":"The framework already answers \"who touched this row last\". Every AuditableBaseEntity carries CreatedOn/By and LastModifiedOn/By, stamped by AuditSaveChangesInterceptor on the way…"},"715":{"u":"/docs/adr/075-audit-trail.html#decision","d":"ADR-075: Audit Trail (Same-Transaction Field-Level Change History)","k":"Architecture Decision Records","t":"Decision","x":"AuditTrailSaveChangesInterceptor (Infrastructure Persistence/AuditTrail/) joins the interceptors ApplicationDbContext.OnConfiguring already passes to…"},"716":{"u":"/docs/adr/075-audit-trail.html#rationale","d":"ADR-075: Audit Trail (Same-Transaction Field-Level Change History)","k":"Architecture Decision Records","t":"Rationale","x":"- IAuditableEntity is a statement about a business row, and an audit row is not one. The interface means \"this row stamps who created and last modified it and participates in…"},"717":{"u":"/docs/adr/075-audit-trail.html#trade-offs","d":"ADR-075: Audit Trail (Same-Transaction Field-Level Change History)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Write amplification is real and it is on the caller's latency path. An entity with twenty changed properties writes twenty rows inside the caller's transaction, so an audited…"},"718":{"u":"/docs/adr/075-audit-trail.html#revision-2026-09-07","d":"ADR-075: Audit Trail (Same-Transaction Field-Level Change History)","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Two additions from the 2026-09-07 security review. 1. The [Pii] convention is now checked in both directions (SEC-Store-19 / SEC-Store-24). The shared base already obliged a…"},"719":{"u":"/docs/adr/075-audit-trail.html#revision-2026-09-25-both-apps-record-trail-dml-by-different-means","d":"ADR-075: Audit Trail (Same-Transaction Field-Level Change History)","k":"Architecture Decision Records","t":"Revision (2026-09-25): both apps record trail DML, by different means","x":"Revision item 2 above previously held for Store only: ADC's server-level audit carried no statement auditing, so a rewrite of dbo.AuditTrailEntries by the shared admin login left…"},"720":{"u":"/docs/adr/075-audit-trail.html#revision-2026-10-01-retention-has-no-fallback-and-the-current-state-text-matches-the-code","d":"ADR-075: Audit Trail (Same-Transaction Field-Level Change History)","k":"Architecture Decision Records","t":"Revision (2026-10-01): retention has no fallback, and the current-state text matches the code","x":"- Retention runs on the scheduler or not at all. The Decision previously named a PeriodicBackgroundService subclass as the fallback for a host without the scheduler. No such…"},"721":{"u":"/docs/adr/075-audit-trail.html#related","d":"ADR-075: Audit Trail (Same-Transaction Field-Level Change History)","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (the same-transaction write this copies wholesale, including the retry-discard and the Add-only mutation rule), ADR-005 (soft-delete, [Pii] and erasure: why the trail…"},"722":{"u":"/docs/adr/076-data-subject-export.html","d":"ADR-076: Data-Subject Export (DSAR) as a Framework Contract","k":"Architecture Decision Records"},"723":{"u":"/docs/adr/076-data-subject-export.html#status","d":"ADR-076: Data-Subject Export (DSAR) as a Framework Contract","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-13). Revised 2026-08-14 (the API-surface section corrected to the shipped mechanism, an abstract DataExportControllerBase a subclass mounts, not an…"},"724":{"u":"/docs/adr/076-data-subject-export.html#context","d":"ADR-076: Data-Subject Export (DSAR) as a Framework Contract","k":"Architecture Decision Records","t":"Context","x":"A data-subject access request is a legal obligation with a clock on it: the person asks for a copy of the personal data held about them, and the operator has a deadline to hand…"},"725":{"u":"/docs/adr/076-data-subject-export.html#decision","d":"ADR-076: Data-Subject Export (DSAR) as a Framework Contract","k":"Architecture Decision Records","t":"Decision","x":"The framework takes the part that is the same in both apps; the app keeps the part that is not. A consumer's export handler becomes a subclass that supplies a role test and a set…"},"726":{"u":"/docs/adr/076-data-subject-export.html#rationale","d":"ADR-076: Data-Subject Export (DSAR) as a Framework Contract","k":"Architecture Decision Records","t":"Rationale","x":"- The two halves of a handler have different owners. The ownership gate, the aggregate load, the fan-out, the per-section catch and the envelope are the same decisions in both…"},"727":{"u":"/docs/adr/076-data-subject-export.html#trade-offs","d":"ADR-076: Data-Subject Export (DSAR) as a Framework Contract","k":"Architecture Decision Records","t":"Trade-offs","x":"- Best-effort degradation can return a quietly incomplete package. Available = false is the only signal, and nothing forces a caller, a UI, or the subject to read it. A section…"},"728":{"u":"/docs/adr/076-data-subject-export.html#revision-2026-10-01","d":"ADR-076: Data-Subject Export (DSAR) as a Framework Contract","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Store now registers a second export section: alongside Sales it contributes CatalogUserDataExportSection (SectionName \"Catalog\",…"},"729":{"u":"/docs/adr/076-data-subject-export.html#related","d":"ADR-076: Data-Subject Export (DSAR) as a Framework Contract","k":"Architecture Decision Records","t":"Related","x":"ADR-005 (the erasure half of the same privacy obligation, whose IAnonymizable opt-in and [Pii] guard are this contract's mirror: one erases what the other copies), ADR-033 (the…"},"730":{"u":"/docs/adr/077-hybridcache-substrate.html","d":"ADR-077: HybridCache as an Opt-In ICacheService Substrate (Amends ADR-026)","k":"Architecture Decision Records"},"731":{"u":"/docs/adr/077-hybridcache-substrate.html#status","d":"ADR-077: HybridCache as an Opt-In ICacheService Substrate (Amends ADR-026)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-13). Amends ADR-026: Tier 1's substrate gains a third implementation beside MemoryCacheService and DistributedCacheService. It is opt-in through…"},"732":{"u":"/docs/adr/077-hybridcache-substrate.html#context","d":"ADR-077: HybridCache as an Opt-In ICacheService Substrate (Amends ADR-026)","k":"Architecture Decision Records","t":"Context","x":"ADR-026 settled Tier 1 as one abstraction (ICacheService) over two implementations chosen at startup: in-process memory when no real IDistributedCache is present, Redis…"},"733":{"u":"/docs/adr/077-hybridcache-substrate.html#decision","d":"ADR-077: HybridCache as an Opt-In ICacheService Substrate (Amends ADR-026)","k":"Architecture Decision Records","t":"Decision","x":"Ship HybridCacheService as a third ICacheService implementation, opt-in per host, under a disjoint keyspace. This is the structural rule the design is built around, and…"},"734":{"u":"/docs/adr/077-hybridcache-substrate.html#rationale","d":"ADR-077: HybridCache as an Opt-In ICacheService Substrate (Amends ADR-026)","k":"Architecture Decision Records","t":"Rationale","x":"- The disjoint keyspace is the decision; everything else is implementation. Rather than trusting a second implementation to write a shape compatible with the first, this record…"},"735":{"u":"/docs/adr/077-hybridcache-substrate.html#trade-offs","d":"ADR-077: HybridCache as an Opt-In ICacheService Substrate (Amends ADR-026)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Invalidation does not reach other replicas' L1 immediately. A remove evicts the L2 entry and the calling replica's L1; every other replica keeps its copy for up to…"},"736":{"u":"/docs/adr/077-hybridcache-substrate.html#revision-2026-10-01","d":"ADR-077: HybridCache as an Opt-In ICacheService Substrate (Amends ADR-026)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Two decisions joined the record. First, ICacheService gained GetFromSharedStoreAsync (MMCA.Common/Source/Core/MMCA.Common.Application/Interfaces/ICacheService.cs:62), which…"},"737":{"u":"/docs/adr/077-hybridcache-substrate.html#related","d":"ADR-077: HybridCache as an Opt-In ICacheService Substrate (Amends ADR-026)","k":"Architecture Decision Records","t":"Related","x":"ADR-026 (amended by this record: its Tier 1 substrate gains a third implementation, its 30-second default TTL becomes the local-cache bound as well, its prefix-invalidation model…"},"738":{"u":"/docs/adr/078-csv-export-endpoint.html","d":"ADR-078: CSV Export as a Dedicated Endpoint, Not Content Negotiation","k":"Architecture Decision Records"},"739":{"u":"/docs/adr/078-csv-export-endpoint.html#status","d":"ADR-078: CSV Export as a Dedicated Endpoint, Not Content Negotiation","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-13; revised 2026-08-18, 2026-08-31, 2026-09-19). The endpoint ships in the MMCA.Common \"enterprise capability wave\" release (v1.150.0), its scoping hook in…"},"740":{"u":"/docs/adr/078-csv-export-endpoint.html#context","d":"ADR-078: CSV Export as a Dedicated Endpoint, Not Content Negotiation","k":"Architecture Decision Records","t":"Context","x":"The request is \"export what you filtered\". The generic entity surface of ADR-034 already accepts a full query vocabulary on the paged route…"},"741":{"u":"/docs/adr/078-csv-export-endpoint.html#decision","d":"ADR-078: CSV Export as a Dedicated Endpoint, Not Content Negotiation","k":"Architecture Decision Records","t":"Decision","x":"EntityControllerBase gains a virtual [HttpGet(\"export\")] ExportAsync(...) action (Source/Presentation/MMCA.Common.API/Controllers/EntityControllerBase.cs:248, method at…"},"742":{"u":"/docs/adr/078-csv-export-endpoint.html#rationale","d":"ADR-078: CSV Export as a Dedicated Endpoint, Not Content Negotiation","k":"Architecture Decision Records","t":"Rationale","x":"- A route is an unambiguous request; an Accept header is a preference. Given a cache policy that ignores Accept and a pipeline configured to never return 406, a client that…"},"743":{"u":"/docs/adr/078-csv-export-endpoint.html#trade-offs","d":"ADR-078: CSV Export as a Dedicated Endpoint, Not Content Negotiation","k":"Architecture Decision Records","t":"Trade-offs","x":"- Every derivative gains a bulk read whether its owner wanted one or not. The only gate is the controller's existing authorization posture. A resource that was safe to page 20…"},"744":{"u":"/docs/adr/078-csv-export-endpoint.html#revision-2026-10-01","d":"ADR-078: CSV Export as a Dedicated Endpoint, Not Content Negotiation","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. The CSV machinery now lives outside the controller, in the internal static EntityCsvExporter…"},"745":{"u":"/docs/adr/078-csv-export-endpoint.html#related","d":"ADR-078: CSV Export as a Dedicated Endpoint, Not Content Negotiation","k":"Architecture Decision Records","t":"Related","x":"ADR-034 (the generic entity surface and query contract this extends, and the MaxUnboundedResultLimit ceiling that forced the page loop), ADR-040 (the output-cache policy whose…"},"746":{"u":"/docs/adr/079-shared-http-middleware-pipeline.html","d":"ADR-079: One Shared, Ordered HTTP Middleware Pipeline for Every Service Host","k":"Architecture Decision Records"},"747":{"u":"/docs/adr/079-shared-http-middleware-pipeline.html#status","d":"ADR-079: One Shared, Ordered HTTP Middleware Pipeline for Every Service Host","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-14). Revised 2026-08-19 (refreshed the WebApplicationBuilderExtensions.cs cross-reference anchor, which moved to :555). Revised 2026-08-21: the order became…"},"748":{"u":"/docs/adr/079-shared-http-middleware-pipeline.html#context","d":"ADR-079: One Shared, Ordered HTTP Middleware Pipeline for Every Service Host","k":"Architecture Decision Records","t":"Context","x":"In ASP.NET Core, middleware order is behavior, not style: a rate limiter placed before authentication partitions every request as anonymous, an HTTPS redirect placed in front of…"},"749":{"u":"/docs/adr/079-shared-http-middleware-pipeline.html#decision","d":"ADR-079: One Shared, Ordered HTTP Middleware Pipeline for Every Service Host","k":"Architecture Decision Records","t":"Decision","x":"Ship the edge as one ordered pipeline in the framework, UseCommonMiddlewarePipeline (MMCA.Common/Source/Presentation/MMCA.Common.API/Startup/WebApplicationExtensions.cs:48), and…"},"750":{"u":"/docs/adr/079-shared-http-middleware-pipeline.html#rationale","d":"ADR-079: One Shared, Ordered HTTP Middleware Pipeline for Every Service Host","k":"Architecture Decision Records","t":"Rationale","x":"- Order is behavior, so it belongs to the framework, not to each host. Four of the adjacencies above fail silently when reversed: the limiter stops limiting, the tenant resolver…"},"751":{"u":"/docs/adr/079-shared-http-middleware-pipeline.html#trade-offs","d":"ADR-079: One Shared, Ordered HTTP Middleware Pipeline for Every Service Host","k":"Architecture Decision Records","t":"Trade-offs","x":"- Two of this record's original costs are retired (2026-08-21). As accepted, nothing froze the order (no test referenced the method; the adjacencies were protected by comments…"},"752":{"u":"/docs/adr/079-shared-http-middleware-pipeline.html#revision-2026-10-01","d":"ADR-079: One Shared, Ordered HTTP Middleware Pipeline for Every Service Host","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Anchor refresh only; no decision or rationale changed. Refreshed citations: the private ApplyPipeline helper (WebApplicationExtensions.cs:163-179), the lazy validator resolution…"},"753":{"u":"/docs/adr/079-shared-http-middleware-pipeline.html#related","d":"ADR-079: One Shared, Ordered HTTP Middleware Pipeline for Every Service Host","k":"Architecture Decision Records","t":"Related","x":"ADR-014 (the in-process sibling: one fixed decorator order for commands and queries), ADR-019 (depends on forwarded headers before the limiter and on the limiter after…"},"754":{"u":"/docs/adr/080-deploy-rollout-revision-rollback.html","d":"ADR-080: Production Rollout with Automatic Revision-Only Rollback","k":"Architecture Decision Records"},"755":{"u":"/docs/adr/080-deploy-rollout-revision-rollback.html#status","d":"ADR-080: Production Rollout with Automatic Revision-Only Rollback","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-14). Revised 2026-09-03 (the smoke gate is now two tiers: a revision activation gate runs before the HTTP probes, and the rollback selector filters on…"},"756":{"u":"/docs/adr/080-deploy-rollout-revision-rollback.html#context","d":"ADR-080: Production Rollout with Automatic Revision-Only Rollback","k":"Architecture Decision Records","t":"Context","x":"Both production apps deploy to Azure Container Apps from a single deploy.yml job on push to main, and every gate runs before anything rolls out. The deploy job waits on eleven…"},"757":{"u":"/docs/adr/080-deploy-rollout-revision-rollback.html#decision","d":"ADR-080: Production Rollout with Automatic Revision-Only Rollback","k":"Architecture Decision Records","t":"Decision","x":"Roll out one revision at a time, verify it from outside, and auto-revert the image only when the verification fails. - Single-revision rollout. Every container app runs…"},"758":{"u":"/docs/adr/080-deploy-rollout-revision-rollback.html#rationale","d":"ADR-080: Production Rollout with Automatic Revision-Only Rollback","k":"Architecture Decision Records","t":"Rationale","x":"- ARM success is the wrong success signal. The smoke gate converts \"the control plane accepted the template\" into \"the fleet is serving the revision this run built\", which is the…"},"759":{"u":"/docs/adr/080-deploy-rollout-revision-rollback.html#trade-offs","d":"ADR-080: Production Rollout with Automatic Revision-Only Rollback","k":"Architecture Decision Records","t":"Trade-offs","x":"- Schema is never rolled back, so a bad migration is fix-forward only. The image reverts and the database does not, so the previous release resumes against the new schema. This…"},"760":{"u":"/docs/adr/080-deploy-rollout-revision-rollback.html#revision-2026-09-10","d":"ADR-080: Production Rollout with Automatic Revision-Only Rollback","k":"Architecture Decision Records","t":"Revision (2026-09-10)","x":"ADC's activation tier is now one shared budget over the whole fleet, matching Store. The attempt loop is the outer loop and the apps are iterated inside it: for i in $(seq 1 30)…"},"761":{"u":"/docs/adr/080-deploy-rollout-revision-rollback.html#revision-2026-10-01","d":"ADR-080: Production Rollout with Automatic Revision-Only Rollback","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Three current-state statements are corrected; the rollout and revision-only rollback model is unchanged. First, the Gateway is not readiness-gated on /health/ready: in both repos…"},"762":{"u":"/docs/adr/080-deploy-rollout-revision-rollback.html#related","d":"ADR-080: Production Rollout with Automatic Revision-Only Rollback","k":"Architecture Decision Records","t":"Related","x":"ADR-057 (built on this model: revision-only rollback is why every migration must be backward compatible one release back), ADR-030 (startup migration as sole migrator, the reason…"},"763":{"u":"/docs/adr/081-cost-baseline-deploy-gate.html","d":"ADR-081: The Cost Baseline as a Hard Deploy Gate","k":"Architecture Decision Records"},"764":{"u":"/docs/adr/081-cost-baseline-deploy-gate.html#status","d":"ADR-081: The Cost Baseline as a Hard Deploy Gate","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-14). Revised 2026-08-31 (the read-only claim is qualified: one az config set on the runner's own CLI precedes the queries; citations re-anchored). Revised…"},"765":{"u":"/docs/adr/081-cost-baseline-deploy-gate.html#context","d":"ADR-081: The Cost Baseline as a Hard Deploy Gate","k":"Architecture Decision Records","t":"Context","x":"Both deployed apps run a deliberately small production footprint: every Container App is declared with maxReplicas: 2 and every SQL database with the Basic tier…"},"766":{"u":"/docs/adr/081-cost-baseline-deploy-gate.html#decision","d":"ADR-081: The Cost Baseline as a Hard Deploy Gate","k":"Architecture Decision Records","t":"Decision","x":"The cost baseline is asserted by a read-only reusable workflow that both runs weekly and sits in deploy.needs, so an un-reverted scale-up blocks the next production deploy. - One…"},"767":{"u":"/docs/adr/081-cost-baseline-deploy-gate.html#rationale","d":"ADR-081: The Cost Baseline as a Hard Deploy Gate","k":"Architecture Decision Records","t":"Rationale","x":"- Configuration drift is the leading indicator; spend is the lagging one. The budget notification fires at 80% of actual spend, after the money is gone, and names a number rather…"},"768":{"u":"/docs/adr/081-cost-baseline-deploy-gate.html#trade-offs","d":"ADR-081: The Cost Baseline as a Hard Deploy Gate","k":"Architecture Decision Records","t":"Trade-offs","x":"- A legitimate scale-up blocks deploys until the baseline is edited. Standing up extra capacity for a real event and then shipping a fix during it requires a pull request against…"},"769":{"u":"/docs/adr/081-cost-baseline-deploy-gate.html#revision-2026-10-01","d":"ADR-081: The Cost Baseline as a Hard Deploy Gate","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Store's SQL check now matches its own stated window. It reads [sku.tier, sku.name] (MMCA.Store/.github/workflows/cost-guard.yml:96-97) and passes a database only through…"},"770":{"u":"/docs/adr/081-cost-baseline-deploy-gate.html#related","d":"ADR-081: The Cost Baseline as a Hard Deploy Gate","k":"Architecture Decision Records","t":"Related","x":"ADR-064 (the sibling deploy-precondition record, which decides the four proof-of-recency gates and enumerates this one only in passing; its break-glass input does not apply…"},"771":{"u":"/docs/adr/082-two-tier-cors-posture.html","d":"ADR-082: Two-Tier Cross-Origin Posture: Allow-Listed Service Policies, an Any-Header Gateway Policy","k":"Architecture Decision Records"},"772":{"u":"/docs/adr/082-two-tier-cors-posture.html#status","d":"ADR-082: Two-Tier Cross-Origin Posture: Allow-Listed Service Policies, an Any-Header Gateway Policy","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-14)."},"773":{"u":"/docs/adr/082-two-tier-cors-posture.html#context","d":"ADR-082: Two-Tier Cross-Origin Posture: Allow-Listed Service Policies, an Any-Header Gateway Policy","k":"Architecture Decision Records","t":"Context","x":"Both deployed applications put a YARP gateway in front of per-module service hosts (ADR-008), and the browser and MAUI clients talk to the gateway origin while the services…"},"774":{"u":"/docs/adr/082-two-tier-cors-posture.html#decision","d":"ADR-082: Two-Tier Cross-Origin Posture: Allow-Listed Service Policies, an Any-Header Gateway Policy","k":"Architecture Decision Records","t":"Decision","x":"Ship two cross-origin policies from the framework: an allow-listed one for service hosts and a deliberately broader one for gateways. - Service hosts register two named policies…"},"775":{"u":"/docs/adr/082-two-tier-cors-posture.html#rationale","d":"ADR-082: Two-Tier Cross-Origin Posture: Allow-Listed Service Policies, an Any-Header Gateway Policy","k":"Architecture Decision Records","t":"Rationale","x":"- A proxy cannot allow-list what it does not own. The gateway has no controllers and no knowledge of which headers the fronted services accept, so a header allow-list there would…"},"776":{"u":"/docs/adr/082-two-tier-cors-posture.html#trade-offs","d":"ADR-082: Two-Tier Cross-Origin Posture: Allow-Listed Service Policies, an Any-Header Gateway Policy","k":"Architecture Decision Records","t":"Trade-offs","x":"- The gateway policy is broad on two of three axes. Any header and any method are accepted for an allow-listed origin. The origin list is the only lever there, so a mistake in…"},"777":{"u":"/docs/adr/082-two-tier-cors-posture.html#revision-2026-10-01","d":"ADR-082: Two-Tier Cross-Origin Posture: Allow-Listed Service Policies, an Any-Header Gateway Policy","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision changed. Citations were re-anchored to the current source: AddCommonCors and its policy lines (WebApplicationBuilderExtensions.cs:124-141), the pipeline Cors step…"},"778":{"u":"/docs/adr/082-two-tier-cors-posture.html#related","d":"ADR-082: Two-Tier Cross-Origin Posture: Allow-Listed Service Policies, an Any-Header Gateway Policy","k":"Architecture Decision Records","t":"Related","x":"ADR-079 (the shared middleware pipeline whose fixed order places the environment-selected CORS policy between routing and authentication), ADR-008 (the gateway plus per-module…"},"779":{"u":"/docs/adr/083-crud-lifecycle-event-taxonomy.html","d":"ADR-083: One CRUD Lifecycle Event per Entity with a State Discriminator","k":"Architecture Decision Records"},"780":{"u":"/docs/adr/083-crud-lifecycle-event-taxonomy.html#status","d":"ADR-083: One CRUD Lifecycle Event per Entity with a State Discriminator","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-14). Revised 2026-08-23: the adopter counts were refreshed (ADC Conference's ActivityChanged joined the base-derived set) and three source citations were…"},"781":{"u":"/docs/adr/083-crud-lifecycle-event-taxonomy.html#context","d":"ADR-083: One CRUD Lifecycle Event per Entity with a State Discriminator","k":"Architecture Decision Records","t":"Context","x":"ADR-003 decides how a domain event moves: captured into the outbox inside SaveChangesAsync, dispatched in-process after commit, or published to the broker when it is an…"},"782":{"u":"/docs/adr/083-crud-lifecycle-event-taxonomy.html#decision","d":"ADR-083: One CRUD Lifecycle Event per Entity with a State Discriminator","k":"Architecture Decision Records","t":"Decision","x":"Every generic CRUD lifecycle transition of an entity raises one event type for that entity, carrying a DomainEntityState discriminator; handlers filter on State. - One base…"},"783":{"u":"/docs/adr/083-crud-lifecycle-event-taxonomy.html#rationale","d":"ADR-083: One CRUD Lifecycle Event per Entity with a State Discriminator","k":"Architecture Decision Records","t":"Rationale","x":"- One type per entity is one subscription surface. A subscriber declares interest in the entity, then decides which transitions matter, instead of the container deciding for it…"},"784":{"u":"/docs/adr/083-crud-lifecycle-event-taxonomy.html#trade-offs","d":"ADR-083: One CRUD Lifecycle Event per Entity with a State Discriminator","k":"Architecture Decision Records","t":"Trade-offs","x":"- Every selective handler pays a filter. A handler that cares about one transition has to open with a State guard and return (SpeakerDeletedHandler.cs:29-30 is the shape to…"},"785":{"u":"/docs/adr/083-crud-lifecycle-event-taxonomy.html#alternatives-rejected","d":"ADR-083: One CRUD Lifecycle Event per Entity with a State Discriminator","k":"Architecture Decision Records","t":"Alternatives rejected","x":"- Splitting each XChanged event into per-fact past-tense events (SpeakerRenamed, SessionCancelled, and so on) with every handler and bridge updated to match. Proposed 2026-08-26,…"},"786":{"u":"/docs/adr/083-crud-lifecycle-event-taxonomy.html#related","d":"ADR-083: One CRUD Lifecycle Event per Entity with a State Discriminator","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (how these events are captured and dispatched; this ADR decides only their shape), ADR-010 (schema versioning for the discriminator once it crosses a service boundary),…"},"787":{"u":"/docs/adr/084-stripe-webhook-ingress.html","d":"ADR-084: Stripe Webhook Ingress (Acceptance-Coded Responses and Startup Self-Registration)","k":"Architecture Decision Records"},"788":{"u":"/docs/adr/084-stripe-webhook-ingress.html#status","d":"ADR-084: Stripe Webhook Ingress (Acceptance-Coded Responses and Startup Self-Registration)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-14). Revised 2026-09-03. Revised 2026-09-07 (the webhook action carries its own request size limit, the auto-minted signing secret is shared through the…"},"789":{"u":"/docs/adr/084-stripe-webhook-ingress.html#context","d":"ADR-084: Stripe Webhook Ingress (Acceptance-Coded Responses and Startup Self-Registration)","k":"Architecture Decision Records","t":"Context","x":"Four ADRs already cover how a message crosses a boundary in this workspace. ADR-003 decides how an event leaves a service (outbox, at-least-once). ADR-021 decides how a…"},"790":{"u":"/docs/adr/084-stripe-webhook-ingress.html#decision","d":"ADR-084: Stripe Webhook Ingress (Acceptance-Coded Responses and Startup Self-Registration)","k":"Architecture Decision Records","t":"Decision","x":"Treat third-party webhook ingress as its own contract with two halves: an acceptance-coded endpoint and a self-registering, self-provisioning endpoint registration at startup. -…"},"791":{"u":"/docs/adr/084-stripe-webhook-ingress.html#rationale","d":"ADR-084: Stripe Webhook Ingress (Acceptance-Coded Responses and Startup Self-Registration)","k":"Architecture Decision Records","t":"Rationale","x":"- The caller's protocol decides the response vocabulary. Stripe reads a status code as \"keep retrying\" or \"stop\", not as \"this succeeded\" or \"this failed\". Mapping every…"},"792":{"u":"/docs/adr/084-stripe-webhook-ingress.html#trade-offs","d":"ADR-084: Stripe Webhook Ingress (Acceptance-Coded Responses and Startup Self-Registration)","k":"Architecture Decision Records","t":"Trade-offs","x":"- A startup service that writes to a live third-party account. Booting a Sales replica creates and deletes webhook endpoints in the real Stripe account…"},"793":{"u":"/docs/adr/084-stripe-webhook-ingress.html#revision-2026-09-07","d":"ADR-084: Stripe Webhook Ingress (Acceptance-Coded Responses and Startup Self-Registration)","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Four changes from the 2026-09-07 security review. The ingress contract (raw body, signature verified before parsing, anonymous endpoint) is unchanged. 1. The webhook action…"},"794":{"u":"/docs/adr/084-stripe-webhook-ingress.html#revision-2026-10-01","d":"ADR-084: Stripe Webhook Ingress (Acceptance-Coded Responses and Startup Self-Registration)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The ingress contract (acceptance-coded status codes, anonymous raw-body endpoint, startup self-registration with marker-scoped deletion) is unchanged. This revision brings the…"},"795":{"u":"/docs/adr/084-stripe-webhook-ingress.html#related","d":"ADR-084: Stripe Webhook Ingress (Acceptance-Coded Responses and Startup Self-Registration)","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (outbound at-least-once delivery, the other end of the same family), ADR-021 (broker-side inbound dedup, which never sees a webhook), ADR-017 (client-supplied idempotency…"},"796":{"u":"/docs/adr/085-identifier-type-aliases-revisited.html","d":"ADR-085: Identifier Type Aliases Revisited (Wrapper Structs Deferred Again, With Triggers)","k":"Architecture Decision Records"},"797":{"u":"/docs/adr/085-identifier-type-aliases-revisited.html#status","d":"ADR-085: Identifier Type Aliases Revisited (Wrapper Structs Deferred Again, With Triggers)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-18). Revised 2026-08-23 (the alias count and the migration-surface census were recounted, the census gained a stated methodology, and the CheckIn and…"},"798":{"u":"/docs/adr/085-identifier-type-aliases-revisited.html#context","d":"ADR-085: Identifier Type Aliases Revisited (Wrapper Structs Deferred Again, With Triggers)","k":"Architecture Decision Records","t":"Context","x":"ADR-048 decided that every entity identity is a primitive named through a per-module global using {Entity}IdentifierType = ... alias, and recorded the cost in one line of…"},"799":{"u":"/docs/adr/085-identifier-type-aliases-revisited.html#decision","d":"ADR-085: Identifier Type Aliases Revisited (Wrapper Structs Deferred Again, With Triggers)","k":"Architecture Decision Records","t":"Decision","x":"Keep the aliases. The wrapper-struct alternative is evaluated in this record, priced, and deferred again, this time against explicit triggers. Inside a module an identifier is…"},"800":{"u":"/docs/adr/085-identifier-type-aliases-revisited.html#rationale","d":"ADR-085: Identifier Type Aliases Revisited (Wrapper Structs Deferred Again, With Triggers)","k":"Architecture Decision Records","t":"Rationale","x":"- The cost is paid once and the benefit accrues per defect avoided, and the defect count is currently zero. No production incident in any of the four repos has been traced to a…"},"801":{"u":"/docs/adr/085-identifier-type-aliases-revisited.html#trade-offs","d":"ADR-085: Identifier Type Aliases Revisited (Wrapper Structs Deferred Again, With Triggers)","k":"Architecture Decision Records","t":"Trade-offs","x":"- The exposure is unmitigated, not reduced. This record buys no safety whatsoever. Every transposition ADR-048 could not catch is still uncatchable today, and the CheckIn…"},"802":{"u":"/docs/adr/085-identifier-type-aliases-revisited.html#related","d":"ADR-085: Identifier Type Aliases Revisited (Wrapper Structs Deferred Again, With Triggers)","k":"Architecture Decision Records","t":"Related","x":"ADR-048 (the decision this record revisits and upholds; its Status now points here), ADR-068 (the deliberate opposite case: domain values carry invariants and therefore do get…"},"803":{"u":"/docs/adr/085-identifier-type-aliases-revisited.html#revision-2026-08-23","d":"ADR-085: Identifier Type Aliases Revisited (Wrapper Structs Deferred Again, With Triggers)","k":"Architecture Decision Records","t":"Revision (2026-08-23)","x":"The decision, the priced alternative, the three triggers and the trade-offs are unchanged. What changed is arithmetic and three citations. The alias count is 44 across 10 files,…"},"804":{"u":"/docs/adr/085-identifier-type-aliases-revisited.html#revision-2026-09-11","d":"ADR-085: Identifier Type Aliases Revisited (Wrapper Structs Deferred Again, With Triggers)","k":"Architecture Decision Records","t":"Revision (2026-09-11)","x":"The decision, the priced alternative, the three triggers and the trade-offs are unchanged. What changed is arithmetic and one Context fact. The alias count is 46 across the same…"},"805":{"u":"/docs/adr/085-identifier-type-aliases-revisited.html#revision-2026-09-19","d":"ADR-085: Identifier Type Aliases Revisited (Wrapper Structs Deferred Again, With Triggers)","k":"Architecture Decision Records","t":"Revision (2026-09-19)","x":"The decision, the priced alternative, the three triggers and the trade-offs are unchanged. What changed is arithmetic and the non-int bullet. The alias count is 48 across the…"},"806":{"u":"/docs/adr/085-identifier-type-aliases-revisited.html#revision-2026-10-01","d":"ADR-085: Identifier Type Aliases Revisited (Wrapper Structs Deferred Again, With Triggers)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision, trigger, rationale or trade-off changed. The migration-surface census is re-measured on the same rule: 3,869 lines across 1,209 files (Common 296/117, ADC 2,282/694,…"},"807":{"u":"/docs/adr/086-process-manager-deferred.html","d":"ADR-086: A Process Manager Is Deferred, Not Absent (Relates to ADR-054)","k":"Architecture Decision Records"},"808":{"u":"/docs/adr/086-process-manager-deferred.html#status","d":"ADR-086: A Process Manager Is Deferred, Not Absent (Relates to ADR-054)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-18) as a documented deferral. Nothing ships with this record: no state machine, no correlation store, no new package. What ships is the shape the coordinator…"},"809":{"u":"/docs/adr/086-process-manager-deferred.html#context","d":"ADR-086: A Process Manager Is Deferred, Not Absent (Relates to ADR-054)","k":"Architecture Decision Records","t":"Context","x":"ADR-054 decided how this workspace achieves cross-boundary consistency without two-phase commit: choreography. Each step of a workflow raises a domain event, each compensating…"},"810":{"u":"/docs/adr/086-process-manager-deferred.html#decision","d":"ADR-086: A Process Manager Is Deferred, Not Absent (Relates to ADR-054)","k":"Architecture Decision Records","t":"Decision","x":"Defer the process manager, and record its shape so the deferral is a design decision rather than an omission. A durable multi-step workflow coordinator in this workspace is a…"},"811":{"u":"/docs/adr/086-process-manager-deferred.html#rationale","d":"ADR-086: A Process Manager Is Deferred, Not Absent (Relates to ADR-054)","k":"Architecture Decision Records","t":"Rationale","x":"- Choreography is genuinely correct for the workflow that exists. This is not a case of the simpler option being tolerated. Checkout's saga state is two fields on Order, and an…"},"812":{"u":"/docs/adr/086-process-manager-deferred.html#trade-offs","d":"ADR-086: A Process Manager Is Deferred, Not Absent (Relates to ADR-054)","k":"Architecture Decision Records","t":"Trade-offs","x":"- The first workflow to hit the trigger pays the full cost at once, under whatever deadline made it appear. Deferral moves the work onto the critical path of the feature that…"},"813":{"u":"/docs/adr/086-process-manager-deferred.html#revision-2026-09-11-the-first-per-instance-deadline-exists-and-it-is-not-a-state-machine","d":"ADR-086: A Process Manager Is Deferred, Not Absent (Relates to ADR-054)","k":"Architecture Decision Records","t":"Revision (2026-09-11): the first per-instance deadline exists, and it is not a state machine","x":"One of the three properties this record listed as absent has arrived, from an unexpected direction. MMCA.Store now gives every unpaid order its own scheduled deadline:…"},"814":{"u":"/docs/adr/086-process-manager-deferred.html#revision-2026-10-01","d":"ADR-086: A Process Manager Is Deferred, Not Absent (Relates to ADR-054)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Two current-state statements are refreshed. The MassTransit pin is 8.5.11 for all three packages, still v8…"},"815":{"u":"/docs/adr/086-process-manager-deferred.html#related","d":"ADR-086: A Process Manager Is Deferred, Not Absent (Relates to ADR-054)","k":"Architecture Decision Records","t":"Related","x":"ADR-054 (the accepted mechanism this record defers an alternative to: choreographed compensation, the persisted aggregate marker, and the reconciliation sweep that would remain…"},"816":{"u":"/docs/adr/087-broker-poison-message-handling.html","d":"ADR-087: Broker Poison-Message Handling: Second-Level Redelivery and Fault Observability","k":"Architecture Decision Records"},"817":{"u":"/docs/adr/087-broker-poison-message-handling.html#status","d":"ADR-087: Broker Poison-Message Handling: Second-Level Redelivery and Fault Observability","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-18). Amends ADR-009: the outbox's broker publish gains a circuit breaker, which is the first resilience policy this workspace applies to something other than an…"},"818":{"u":"/docs/adr/087-broker-poison-message-handling.html#context","d":"ADR-087: Broker Poison-Message Handling: Second-Level Redelivery and Fault Observability","k":"Architecture Decision Records","t":"Context","x":"Delivery in this workspace has always been at-least-once with retries on both legs: the outbox retries a failed publish with jittered exponential backoff and eventually…"},"819":{"u":"/docs/adr/087-broker-poison-message-handling.html#decision","d":"ADR-087: Broker Poison-Message Handling: Second-Level Redelivery and Fault Observability","k":"Architecture Decision Records","t":"Decision","x":"Three changes, each scoped to one failure: second-level redelivery configured per transport, a fault consumer with its own meter, and a circuit breaker around the outbox's broker…"},"820":{"u":"/docs/adr/087-broker-poison-message-handling.html#rationale","d":"ADR-087: Broker Poison-Message Handling: Second-Level Redelivery and Fault Observability","k":"Architecture Decision Records","t":"Rationale","x":"- The transport asymmetry follows a real capability difference, not a preference. RabbitMQ needs a plugin the dev container lacks; Service Bus does not. A single default would be…"},"821":{"u":"/docs/adr/087-broker-poison-message-handling.html#trade-offs","d":"ADR-087: Broker Poison-Message Handling: Second-Level Redelivery and Fault Observability","k":"Architecture Decision Records","t":"Trade-offs","x":"- Delayed redelivery is off where the plugin problem lives. RabbitMQ is the local transport and also a plausible self-hosted production transport; both get default-off, so the…"},"822":{"u":"/docs/adr/087-broker-poison-message-handling.html#revision-2026-10-01","d":"ADR-087: Broker Poison-Message Handling: Second-Level Redelivery and Fault Observability","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. The broker transport wiring now lives in MMCA.Common/Source/Core/MMCA.Common.Infrastructure/DependencyInjection.Messaging.cs…"},"823":{"u":"/docs/adr/087-broker-poison-message-handling.html#related","d":"ADR-087: Broker Poison-Message Handling: Second-Level Redelivery and Fault Observability","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (the outbox publish leg this breaker wraps, and the retry, jittered backoff and dead-lettering that BrokenCircuitException reuses unchanged), ADR-066 (the transport…"},"824":{"u":"/docs/adr/088-gateway-edge-responsibilities.html","d":"ADR-088: Gateway Edge Responsibilities (and the Three It Declines)","k":"Architecture Decision Records"},"825":{"u":"/docs/adr/088-gateway-edge-responsibilities.html#status","d":"ADR-088: Gateway Edge Responsibilities (and the Three It Declines)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-18). Extends ADR-019 with a fourth, edge-tier layer whose posture is the deliberate opposite of the service tier's authenticated-only global limiter; nothing in…"},"826":{"u":"/docs/adr/088-gateway-edge-responsibilities.html#context","d":"ADR-088: Gateway Edge Responsibilities (and the Three It Declines)","k":"Architecture Decision Records","t":"Context","x":"ADR-008 made the Gateway the only client entry point and gave it three jobs: the route-to-service map, CORS, and forwarding the caller's Authorization header. Nothing was added…"},"827":{"u":"/docs/adr/088-gateway-edge-responsibilities.html#decision","d":"ADR-088: Gateway Edge Responsibilities (and the Three It Declines)","k":"Architecture Decision Records","t":"Decision","x":"Ship a gateway edge kit in a Gateway namespace inside MMCA.Common.Aspire, owning exactly three responsibilities, and record three more as deliberately declined. A fourth section,…"},"828":{"u":"/docs/adr/088-gateway-edge-responsibilities.html#rationale","d":"ADR-088: Gateway Edge Responsibilities (and the Three It Declines)","k":"Architecture Decision Records","t":"Rationale","x":"- The edge is the only place that sees a request exactly once. That is what makes ensure-at-the-edge correct and mint-per-service wrong: not that the service version is broken,…"},"829":{"u":"/docs/adr/088-gateway-edge-responsibilities.html#trade-offs","d":"ADR-088: Gateway Edge Responsibilities (and the Three It Declines)","k":"Architecture Decision Records","t":"Trade-offs","x":"- The limiter closes over an eagerly-bound copy of the settings (GatewayRateLimitingExtensions.cs:278-279, consumed at :308 and :310), so an IOptionsMonitor reload never reaches…"},"830":{"u":"/docs/adr/088-gateway-edge-responsibilities.html#revision-2026-09-07","d":"ADR-088: Gateway Edge Responsibilities (and the Three It Declines)","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Two changes from the 2026-09-07 security review. 1. Health endpoints are cached server-side, and the bypass stays (SEC-Common-71 / SEC-ADC-17 / SEC-ADC-56). /health and…"},"831":{"u":"/docs/adr/088-gateway-edge-responsibilities.html#revision-2026-09-10","d":"ADR-088: Gateway Edge Responsibilities (and the Three It Declines)","k":"Architecture Decision Records","t":"Revision (2026-09-10)","x":"Both public UI hosts now carry the own-host hardening, so item 2 above is no longer a Store-only remediation. ADC's conference UI is externally reachable on its own FQDN, which…"},"832":{"u":"/docs/adr/088-gateway-edge-responsibilities.html#revision-2026-09-20","d":"ADR-088: Gateway Edge Responsibilities (and the Three It Declines)","k":"Architecture Decision Records","t":"Revision (2026-09-20)","x":"The decision the last revision declined to take is taken here: the own-host UI hardening is framework code. Two near-identical copies in two consumers is the shape that says a…"},"833":{"u":"/docs/adr/088-gateway-edge-responsibilities.html#revision-2026-10-01","d":"ADR-088: Gateway Edge Responsibilities (and the Three It Declines)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Both consumers now turn active destination probing off. The framework half of the delegation is unchanged: active checks stay opt-in…"},"834":{"u":"/docs/adr/088-gateway-edge-responsibilities.html#related","d":"ADR-088: Gateway Edge Responsibilities (and the Three It Declines)","k":"Architecture Decision Records","t":"Related","x":"ADR-008 (the record that made the Gateway the only entry point and gave it routing, CORS and auth forwarding; this is the first record to add cross-cutting behavior to it),…"},"835":{"u":"/docs/adr/089-gateway-topology-owned-by-configuration.html","d":"ADR-089: Gateway Topology Owned by Configuration","k":"Architecture Decision Records"},"836":{"u":"/docs/adr/089-gateway-topology-owned-by-configuration.html#status","d":"ADR-089: Gateway Topology Owned by Configuration","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-18; revised 2026-08-23: ADC's table gained a 27th route, /Activities, on 2026-08-19; revised 2026-08-31: section 5 now states the activity timeout where it…"},"837":{"u":"/docs/adr/089-gateway-topology-owned-by-configuration.html#context","d":"ADR-089: Gateway Topology Owned by Configuration","k":"Architecture Decision Records","t":"Context","x":"Before this record, both gateways built their route table by hand, in code. ADC made 26 MapForwarder calls and Store made 10. Neither host called AddReverseProxy or…"},"838":{"u":"/docs/adr/089-gateway-topology-owned-by-configuration.html#decision","d":"ADR-089: Gateway Topology Owned by Configuration","k":"Architecture Decision Records","t":"Decision","x":"Make configuration the single source of the gateway route table, and pin it with a test. Each gateway calls…"},"839":{"u":"/docs/adr/089-gateway-topology-owned-by-configuration.html#rationale","d":"ADR-089: Gateway Topology Owned by Configuration","k":"Architecture Decision Records","t":"Rationale","x":"- The drift already happened, in the repository that has the most gateway tests. ADC is the careful consumer, and it still carried three unpinned routes, an off-by-one comment…"},"840":{"u":"/docs/adr/089-gateway-topology-owned-by-configuration.html#trade-offs","d":"ADR-089: Gateway Topology Owned by Configuration","k":"Architecture Decision Records","t":"Trade-offs","x":"- The compiler stopped helping. A misspelled cluster reference, a malformed path pattern or a route that shadows another is a runtime failure, discovered as a 404 or a 502, where…"},"841":{"u":"/docs/adr/089-gateway-topology-owned-by-configuration.html#revision-2026-10-01","d":"ADR-089: Gateway Topology Owned by Configuration","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision changed. Two current-state statements were corrected. The Rationale example of an ungated comment drifting no longer holds for ADC, whose conference label now reads…"},"842":{"u":"/docs/adr/089-gateway-topology-owned-by-configuration.html#related","d":"ADR-089: Gateway Topology Owned by Configuration","k":"Architecture Decision Records","t":"Related","x":"ADR-008 (amended: the Gateway keeps the route-to-service map it was given, now expressed as configuration rather than as forwarder registrations), ADR-088 (the other half of this…"},"843":{"u":"/docs/adr/090-event-upcaster-registration.html","d":"ADR-090: Event Upcaster Registration Extension Point","k":"Architecture Decision Records"},"844":{"u":"/docs/adr/090-event-upcaster-registration.html#status","d":"ADR-090: Event Upcaster Registration Extension Point","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-21). Completes the follow-up named in ADR-010: that record established the versioning policy (a SchemaVersion signal plus a new-type-and-upcaster discipline for…"},"845":{"u":"/docs/adr/090-event-upcaster-registration.html#context","d":"ADR-090: Event Upcaster Registration Extension Point","k":"Architecture Decision Records","t":"Context","x":"ADR-010 splits event evolution into a signal and a discipline. The signal (SchemaVersion, a fitness-function-gated property on every integration event) shipped with ADR-010…"},"846":{"u":"/docs/adr/090-event-upcaster-registration.html#decision","d":"ADR-090: Event Upcaster Registration Extension Point","k":"Architecture Decision Records","t":"Decision","x":"1. A typed upcaster abstraction, in the Application layer. IEventUpcaster (Source/Core/MMCA.Common.Application/Interfaces/Events/IEventUpcaster.cs) is a pure payload mapping from…"},"847":{"u":"/docs/adr/090-event-upcaster-registration.html#rationale","d":"ADR-090: Event Upcaster Registration Extension Point","k":"Architecture Decision Records","t":"Rationale","x":"- The discipline becomes a mechanism. ADR-010's own framing (a thing that matters is a check, not a comment) now applies to the upcaster half: the transform has a first-class…"},"848":{"u":"/docs/adr/090-event-upcaster-registration.html#trade-offs","d":"ADR-090: Event Upcaster Registration Extension Point","k":"Architecture Decision Records","t":"Trade-offs","x":"- The upcast walk advances by declared target type, not runtime type. A misbehaving upcaster that returns an instance of some other type cannot send the walk into an unvalidated…"},"849":{"u":"/docs/adr/090-event-upcaster-registration.html#revision-2026-09-03","d":"ADR-090: Event Upcaster Registration Extension Point","k":"Architecture Decision Records","t":"Revision (2026-09-03)","x":"The decision, the mechanism, and both delivery paths are unchanged. What changed is one trade-off's premise and three file locations. 1. Outbox type resolution is no longer…"},"850":{"u":"/docs/adr/090-event-upcaster-registration.html#revision-2026-10-01","d":"ADR-090: Event Upcaster Registration Extension Point","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision, mechanism, or rationale changed; this revision refreshes citations only. AddEventUpcaster is defined in…"},"851":{"u":"/docs/adr/091-cache-backed-password-reset.html","d":"ADR-091: Cache-Backed Password Reset","k":"Architecture Decision Records"},"852":{"u":"/docs/adr/091-cache-backed-password-reset.html#status","d":"ADR-091: Cache-Backed Password Reset","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-22). Extends ADR-029 (the cache-backed login-protection idiom this record reuses) and ADR-032 (which decided how a password is stored, never how a user who has…"},"853":{"u":"/docs/adr/091-cache-backed-password-reset.html#context","d":"ADR-091: Cache-Backed Password Reset","k":"Architecture Decision Records","t":"Context","x":"Both consumer apps shipped authenticated password change (PUT /Auth/password) and nothing for a user who cannot sign in at all. The recorded fallback in MMCA.ADC's specification…"},"854":{"u":"/docs/adr/091-cache-backed-password-reset.html#decision","d":"ADR-091: Cache-Backed Password Reset","k":"Architecture Decision Records","t":"Decision","x":"1. The reset token is a cache record, not a schema change. IPasswordResetTokenService (Source/Core/MMCA.Common.Application/Auth/IPasswordResetTokenService.cs) is two methods,…"},"855":{"u":"/docs/adr/091-cache-backed-password-reset.html#rationale","d":"ADR-091: Cache-Backed Password Reset","k":"Architecture Decision Records","t":"Rationale","x":"- No migration is the whole point. A reset credential is short-lived by nature, and the expiry semantics a reset needs (a TTL, a single use, an attempt cap) are native to a cache…"},"856":{"u":"/docs/adr/091-cache-backed-password-reset.html#trade-offs","d":"ADR-091: Cache-Backed Password Reset","k":"Architecture Decision Records","t":"Trade-offs","x":"- Cache eviction invalidates outstanding tokens. A Redis restart, an eviction under memory pressure, or a fall back to the in-memory store on a different replica all silently…"},"857":{"u":"/docs/adr/091-cache-backed-password-reset.html#revision-2026-10-01","d":"ADR-091: Cache-Backed Password Reset","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Three behaviors changed after acceptance, and four statements are corrected: one was omitted at acceptance, two were wrong as written, and one had drifted from a later revision…"},"858":{"u":"/docs/adr/092-web-vitals-budget-gate.html","d":"ADR-092: Core Web Vitals Budget as a Shipped Test Contract and Deploy Gate","k":"Architecture Decision Records"},"859":{"u":"/docs/adr/092-web-vitals-budget-gate.html#status","d":"ADR-092: Core Web Vitals Budget as a Shipped Test Contract and Deploy Gate","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-23). Revised 2026-09-01: the measurement flow itself now ships as an IPage extension that every suite routes through, and the framework gallery measures three…"},"860":{"u":"/docs/adr/092-web-vitals-budget-gate.html#context","d":"ADR-092: Core Web Vitals Budget as a Shipped Test Contract and Deploy Gate","k":"Architecture Decision Records","t":"Context","x":"Rubric section 23 asks for client-side performance that is measured rather than assumed, naming Core Web Vitals (LCP, INP, CLS) or an equivalent as the evidence…"},"861":{"u":"/docs/adr/092-web-vitals-budget-gate.html#decision","d":"ADR-092: Core Web Vitals Budget as a Shipped Test Contract and Deploy Gate","k":"Architecture Decision Records","t":"Decision","x":"Ship the measurement infrastructure, the measurement flow and the assert mechanics in MMCA.Common.Testing.E2E, default the budget to the Core Web Vitals good band, and let the…"},"862":{"u":"/docs/adr/092-web-vitals-budget-gate.html#rationale","d":"ADR-092: Core Web Vitals Budget as a Shipped Test Contract and Deploy Gate","k":"Architecture Decision Records","t":"Rationale","x":"- The good band is an external contract, which is what makes an absolute ceiling defensible here. ADR-060 refused absolute latency because a nanosecond count is a property of the…"},"863":{"u":"/docs/adr/092-web-vitals-budget-gate.html#trade-offs","d":"ADR-092: Core Web Vitals Budget as a Shipped Test Contract and Deploy Gate","k":"Architecture Decision Records","t":"Trade-offs","x":"- The gate is ui-scoped and may legitimately skip. Both apps gate e2e-gate on a ui change filter (ADC deploy.yml:838, Store :810) and deploy accepts skipped for it (ADC :1230,…"},"864":{"u":"/docs/adr/092-web-vitals-budget-gate.html#revision-2026-10-01","d":"ADR-092: Core Web Vitals Budget as a Shipped Test Contract and Deploy Gate","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. One sentence is corrected: the gallery's components test was described as the only case in the whole adoption set that drives an interaction,…"},"865":{"u":"/docs/adr/092-web-vitals-budget-gate.html#related","d":"ADR-092: Core Web Vitals Budget as a Shipped Test Contract and Deploy Gate","k":"Architecture Decision Records","t":"Related","x":"ADR-063 (the structural sibling: the same package, the same Playwright suite and the same deploy gate, applied to WCAG 2.1 AA instead of load performance), ADR-060 (the backend…"},"866":{"u":"/docs/adr/093-container-image-posture.html","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records"},"867":{"u":"/docs/adr/093-container-image-posture.html#status","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-23) for the three build decisions below. The two runtime postures below were recorded as undecided at that date: they described what the images did and the…"},"868":{"u":"/docs/adr/093-container-image-posture.html#context","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records","t":"Context","x":"Eleven Dockerfiles produce every deployable container in the two Azure-hosted applications: six in MMCA.ADC (four services, the Gateway, the Blazor web host) and five in…"},"869":{"u":"/docs/adr/093-container-image-posture.html#decision","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records","t":"Decision","x":"1. The GitHub Packages credential is a BuildKit secret, never an ARG or ENV. Both applications' nuget.config source-maps MMCA. to GitHub Packages, so every restore inside an…"},"870":{"u":"/docs/adr/093-container-image-posture.html#runtime-postures-closed-2026-09-07","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records","t":"Runtime postures (closed 2026-09-07)","x":"The base image is pinned by digest. All eleven images name the runtime and the SDK image by sha256, with the 10.0 tag left in place as a readable suffix (ADC…"},"871":{"u":"/docs/adr/093-container-image-posture.html#rationale","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records","t":"Rationale","x":"- A secret that is never a layer cannot leak from a layer. BuildKit secret mounts are the only mechanism that keeps the credential out of the image, the build cache and docker…"},"872":{"u":"/docs/adr/093-container-image-posture.html#trade-offs","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records","t":"Trade-offs","x":"- Eleven copies drift independently. There is no shared base Dockerfile and no test that compares them, so a fix applied to one image is applied to one image. The ReadyToRun…"},"873":{"u":"/docs/adr/093-container-image-posture.html#revision-2026-09-07","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The open postures this record listed are closed in both consumers, from the 2026-09-07 security review. 1. Base images are pinned by digest (SEC-ADC-32 / SEC-ADC-54 /…"},"874":{"u":"/docs/adr/093-container-image-posture.html#related","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records","t":"Related","x":"ADR-038 (supply-chain provenance: it gates the package graph with lock files, a vulnerability audit and an SBOM, and stops at the repository boundary, so the image layers this…"},"875":{"u":"/docs/adr/093-container-image-posture.html#revision-2026-09-03","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records","t":"Revision (2026-09-03)","x":"Container sizing is uniform, so the ReadyToRun argument applies evenly. Decision 3 justified ReadyToRun by the CPU the replicas land on and cited a split: four ADC apps at 0.25…"},"876":{"u":"/docs/adr/093-container-image-posture.html#revision-2026-09-10","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records","t":"Revision (2026-09-10)","x":"Locked mode is back on Store's four non-UI images, and the inventory is stated per image rather than by one example. The anchor in Revision (2026-09-07) item 3 pointed at a line…"},"877":{"u":"/docs/adr/093-container-image-posture.html#revision-2026-10-01","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Three statements in Context and decision 4 no longer matched the files and are corrected in place. The digest pair is shared, not per…"},"878":{"u":"/docs/adr/094-client-entity-data-access.html","d":"ADR-094: Client-Side Entity Data-Access Contract","k":"Architecture Decision Records"},"879":{"u":"/docs/adr/094-client-entity-data-access.html#status","d":"ADR-094: Client-Side Entity Data-Access Contract","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-23). Revised 2026-08-31: GetByIdAsync is recorded with its real signature (id, includeChildren, CancellationToken; a missing entity is a NotFound failure, there…"},"880":{"u":"/docs/adr/094-client-entity-data-access.html#context","d":"ADR-094: Client-Side Entity Data-Access Contract","k":"Architecture Decision Records","t":"Context","x":"ADR-034 decided the server half of entity data access: a generic controller base with a dynamic query contract, where filters arrive as filters[Property].operator /…"},"881":{"u":"/docs/adr/094-client-entity-data-access.html#decision","d":"ADR-094: Client-Side Entity Data-Access Contract","k":"Architecture Decision Records","t":"Decision","x":"Client-side entity data access goes through one hand-written base hierarchy in MMCA.Common.UI. - One HTTP root: AuthenticatedServiceBase…"},"882":{"u":"/docs/adr/094-client-entity-data-access.html#rationale","d":"ADR-094: Client-Side Entity Data-Access Contract","k":"Architecture Decision Records","t":"Rationale","x":"- A hand-written typed base beats a generated client here because the surface is already generic. ADR-034 collapsed N entity endpoints into one shape, so there is exactly one…"},"883":{"u":"/docs/adr/094-client-entity-data-access.html#trade-offs","d":"ADR-094: Client-Side Entity Data-Access Contract","k":"Architecture Decision Records","t":"Trade-offs","x":"- No generated client means drift is caught at runtime, not at build time. A server-side rename of a query parameter or a DTO property does not fail the UI build; it fails the…"},"884":{"u":"/docs/adr/094-client-entity-data-access.html#revision-2026-10-01","d":"ADR-094: Client-Side Entity Data-Access Contract","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The Blazor Server per-circuit state rule is recorded as a Decision bullet. It was already enforced but not written down: UI assemblies carry no mutable static members outside a…"},"885":{"u":"/docs/adr/094-client-entity-data-access.html#related","d":"ADR-094: Client-Side Entity Data-Access Contract","k":"Architecture Decision Records","t":"Related","x":"ADR-034 (the server surface this contract calls, and the filter grammar the client constructs), ADR-017 (the server-side filter whose client half is specified here: who mints the…"},"886":{"u":"/docs/adr/095-soft-delete-unique-indexes.html","d":"ADR-095: Uniqueness Under Soft Delete (Filtered Unique Indexes)","k":"Architecture Decision Records"},"887":{"u":"/docs/adr/095-soft-delete-unique-indexes.html#status","d":"ADR-095: Uniqueness Under Soft Delete (Filtered Unique Indexes)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-23). Revised 2026-08-26 (the convention appends its clause to a hand-authored filter instead of skipping the index)."},"888":{"u":"/docs/adr/095-soft-delete-unique-indexes.html#context","d":"ADR-095: Uniqueness Under Soft Delete (Filtered Unique Indexes)","k":"Architecture Decision Records","t":"Context","x":"ADR-005 makes deletion soft: an IAuditableEntity sets IsDeleted = true (MMCA.Common/Source/Core/MMCA.Common.Domain/Interfaces/IAuditableEntity.cs:11) and a named global query…"},"889":{"u":"/docs/adr/095-soft-delete-unique-indexes.html#decision","d":"ADR-095: Uniqueness Under Soft Delete (Filtered Unique Indexes)","k":"Architecture Decision Records","t":"Decision","x":"Make the filter a convention: every unique index on a soft-deletable entity excludes deleted rows, automatically, in every context of every consumer. - A model-finalizing…"},"890":{"u":"/docs/adr/095-soft-delete-unique-indexes.html#rationale","d":"ADR-095: Uniqueness Under Soft Delete (Filtered Unique Indexes)","k":"Architecture Decision Records","t":"Rationale","x":"- The database should agree with what the application shows. The query filter already says a soft-deleted row does not exist; a unique index that disagrees is the one place the…"},"891":{"u":"/docs/adr/095-soft-delete-unique-indexes.html#trade-offs","d":"ADR-095: Uniqueness Under Soft Delete (Filtered Unique Indexes)","k":"Architecture Decision Records","t":"Trade-offs","x":"- It moves schema in consumers, invisibly from the entity configuration. Adopting the convention is a database-contract change: nothing in an entity configuration changed, but…"},"892":{"u":"/docs/adr/095-soft-delete-unique-indexes.html#revision-2026-10-01","d":"ADR-095: Uniqueness Under Soft Delete (Filtered Unique Indexes)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Engine coverage now includes PostgreSQL: SoftDeleteFilterSql.Build emits \"IsDeleted\" = false there, because the flag is a real boolean column,…"},"893":{"u":"/docs/adr/095-soft-delete-unique-indexes.html#related","d":"ADR-095: Uniqueness Under Soft Delete (Filtered Unique Indexes)","k":"Architecture Decision Records","t":"Related","x":"ADR-005 (decides soft-delete over erasure and owns the query filter that hides the row, but says nothing about uniqueness: this ADR closes that gap), ADR-057 (the expand/contract…"},"894":{"u":"/docs/adr/096-best-effort-side-effects.html","d":"ADR-096: Best-Effort Side-Effect Contract","k":"Architecture Decision Records"},"895":{"u":"/docs/adr/096-best-effort-side-effects.html#status","d":"ADR-096: Best-Effort Side-Effect Contract","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-23). Revised 2026-08-31. Revised 2026-09-19. Revised 2026-09-25 (the ADR-054 cross-reference is re-anchored onto that record's current best-effort trade-off)."},"896":{"u":"/docs/adr/096-best-effort-side-effects.html#context","d":"ADR-096: Best-Effort Side-Effect Contract","k":"Architecture Decision Records","t":"Context","x":"A command that has already committed often has follow-up work attached to it: evict the output-cache entries the write invalidated, broadcast the new state to a live channel,…"},"897":{"u":"/docs/adr/096-best-effort-side-effects.html#decision","d":"ADR-096: Best-Effort Side-Effect Contract","k":"Architecture Decision Records","t":"Decision","x":"One framework helper defines the contract, and a swallow that does not go through it is a deliberate, documented exception. - BestEffort.ExecuteAsync(operation, logger, action,…"},"898":{"u":"/docs/adr/096-best-effort-side-effects.html#rationale","d":"ADR-096: Best-Effort Side-Effect Contract","k":"Architecture Decision Records","t":"Rationale","x":"- One policy beats five local leniencies. Each feature record is still right about its own degradation; what they could not each decide is the shape of the swallow. A single…"},"899":{"u":"/docs/adr/096-best-effort-side-effects.html#trade-offs","d":"ADR-096: Best-Effort Side-Effect Contract","k":"Architecture Decision Records","t":"Trade-offs","x":"- Nothing gates use of the helper. There is no fitness rule, analyzer or architecture test that fails a build for a hand-rolled catch (Exception) that should have been a…"},"900":{"u":"/docs/adr/096-best-effort-side-effects.html#revision-2026-10-01","d":"ADR-096: Best-Effort Side-Effect Contract","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; the adoption inventory and several statements about it are corrected. Adoption is twelve call sites, not eleven: Store's inventory set path is a…"},"901":{"u":"/docs/adr/096-best-effort-side-effects.html#related","d":"ADR-096: Best-Effort Side-Effect Contract","k":"Architecture Decision Records","t":"Related","x":"ADR-024 (push delivery failure is non-fatal and recorded rather than raised, one of the local leniencies this policy generalizes), ADR-026 (eviction is best-effort, and its…"},"902":{"u":"/docs/adr/097-multi-device-refresh-sessions.html","d":"ADR-097: Multi-Device Refresh Sessions (Hashed, Rotating, Per Device)","k":"Architecture Decision Records"},"903":{"u":"/docs/adr/097-multi-device-refresh-sessions.html#status","d":"ADR-097: Multi-Device Refresh Sessions (Hashed, Rotating, Per Device)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-26). Supersedes the storage model of ADR-050 (one plaintext refresh-token column on the user row); the rotation and reuse-detection policy that record decided…"},"904":{"u":"/docs/adr/097-multi-device-refresh-sessions.html#context","d":"ADR-097: Multi-Device Refresh Sessions (Hashed, Rotating, Per Device)","k":"Architecture Decision Records","t":"Context","x":"ADR-050 stores a user's refresh token as a single nullable RefreshToken string plus its RefreshTokenExpiry on the app's User aggregate. That model settles rotation and reuse…"},"905":{"u":"/docs/adr/097-multi-device-refresh-sessions.html#decision","d":"ADR-097: Multi-Device Refresh Sessions (Hashed, Rotating, Per Device)","k":"Architecture Decision Records","t":"Decision","x":"Refresh tokens become rows in their own table: one row per signed-in device, hashed at rest, chained on rotation. - RefreshSession is a flat framework record, not an aggregate.…"},"906":{"u":"/docs/adr/097-multi-device-refresh-sessions.html#rationale","d":"ADR-097: Multi-Device Refresh Sessions (Hashed, Rotating, Per Device)","k":"Architecture Decision Records","t":"Rationale","x":"- A credential at rest is a credential. Hashing is what turns a database read from \"mint tokens for every signed-in user\" into \"hold a list of digests\". The unsalted digest is…"},"907":{"u":"/docs/adr/097-multi-device-refresh-sessions.html#trade-offs","d":"ADR-097: Multi-Device Refresh Sessions (Hashed, Rotating, Per Device)","k":"Architecture Decision Records","t":"Trade-offs","x":"- This is a breaking change with a data migration attached. IAuthUser loses RefreshToken, RefreshTokenExpiry, UpdateRefreshToken and RevokeRefreshToken (IAuthUser.cs:9-14, the…"},"908":{"u":"/docs/adr/097-multi-device-refresh-sessions.html#revision-2026-09-07","d":"ADR-097: Multi-Device Refresh Sessions (Hashed, Rotating, Per Device)","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Credential rotation now ends the session family (SEC-Common-02). A stolen refresh chain otherwise survived the exact remediation a user performs on discovering it: the rotation…"},"909":{"u":"/docs/adr/097-multi-device-refresh-sessions.html#revision-2026-10-01","d":"ADR-097: Multi-Device Refresh Sessions (Hashed, Rotating, Per Device)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; the current-state sections now match the code. Content corrected in place: the session cap is read through a protected virtual…"},"910":{"u":"/docs/adr/097-multi-device-refresh-sessions.html#related","d":"ADR-097: Multi-Device Refresh Sessions (Hashed, Rotating, Per Device)","k":"Architecture Decision Records","t":"Related","x":"ADR-050 (the single-column model this record replaces, and the source of the rotation and reuse-detection policy it keeps), ADR-004 (the stateless RS256 access token this flow…"},"911":{"u":"/docs/adr/098-aspire-orchestration-not-testing-or-dashboards.html","d":"ADR-098: Aspire for Orchestration, Not for Testing or Production Dashboards","k":"Architecture Decision Records"},"912":{"u":"/docs/adr/098-aspire-orchestration-not-testing-or-dashboards.html#status","d":"ADR-098: Aspire for Orchestration, Not for Testing or Production Dashboards","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-28). Revised 2026-08-31: the sanctioned nightly AppHost smoke test is implemented, and every citation below is re-verified against current source. Revised…"},"913":{"u":"/docs/adr/098-aspire-orchestration-not-testing-or-dashboards.html#context","d":"ADR-098: Aspire for Orchestration, Not for Testing or Production Dashboards","k":"Architecture Decision Records","t":"Context","x":"Aspire is used on exactly two surfaces here. Orchestration. Each app has an AppHost that composes the local stack from one file: ADC's provisions a persistent SQL Server…"},"914":{"u":"/docs/adr/098-aspire-orchestration-not-testing-or-dashboards.html#decision","d":"ADR-098: Aspire for Orchestration, Not for Testing or Production Dashboards","k":"Architecture Decision Records","t":"Decision","x":"The tiers that exist keep their shape, and DistributedApplicationTestingBuilder stays out of them. - Per-service tier: one in-process host, real SQL, mocked cross-service edges.…"},"915":{"u":"/docs/adr/098-aspire-orchestration-not-testing-or-dashboards.html#rationale","d":"ADR-098: Aspire for Orchestration, Not for Testing or Production Dashboards","k":"Architecture Decision Records","t":"Rationale","x":"- Test at the boundary that ships. A service is deployed as its own container app (MMCA.ADC/infra/main.bicep:1624, :1851, :2002, :2135), configured entirely through environment…"},"916":{"u":"/docs/adr/098-aspire-orchestration-not-testing-or-dashboards.html#trade-offs","d":"ADR-098: Aspire for Orchestration, Not for Testing or Production Dashboards","k":"Architecture Decision Records","t":"Trade-offs","x":"- Nothing below the E2E lane tests the AppHost's own wiring. A bad reference or a missing environment injection in Program.cs is caught by the E2E gate or by a developer, and the…"},"917":{"u":"/docs/adr/098-aspire-orchestration-not-testing-or-dashboards.html#revision-2026-10-01","d":"ADR-098: Aspire for Orchestration, Not for Testing or Production Dashboards","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Two statements were incomplete and are corrected in place. First, the framework's AppHost testing package is also exercised per PR in…"},"918":{"u":"/docs/adr/098-aspire-orchestration-not-testing-or-dashboards.html#related","d":"ADR-098: Aspire for Orchestration, Not for Testing or Production Dashboards","k":"Architecture Decision Records","t":"Related","x":"ADR-041 (the shared Aspire OpenTelemetry baseline and the sampling / metric-toggle knobs this record's production half configures), ADR-062 (the alert rules and the workbook that…"},"919":{"u":"/docs/adr/099-generic-write-side-entity-commands.html","d":"ADR-099: Generic Write-Side Entity Commands (Create, Update, Delete Without a Handler per Aggregate)","k":"Architecture Decision Records"},"920":{"u":"/docs/adr/099-generic-write-side-entity-commands.html#status","d":"ADR-099: Generic Write-Side Entity Commands (Create, Update, Delete Without a Handler per Aggregate)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-29, framework v1.170.0). Extends ADR-034, which gave every entity a generic read surface plus create and delete, by completing the write half: a generic update…"},"921":{"u":"/docs/adr/099-generic-write-side-entity-commands.html#context","d":"ADR-099: Generic Write-Side Entity Commands (Create, Update, Delete Without a Handler per Aggregate)","k":"Architecture Decision Records","t":"Context","x":"ADR-034 records the read side of the generic resource layer and stops one verb short. Its AggregateRootEntityControllerBase ships [HttpPost] create and [HttpDelete(\"{id}\")]…"},"922":{"u":"/docs/adr/099-generic-write-side-entity-commands.html#decision","d":"ADR-099: Generic Write-Side Entity Commands (Create, Update, Delete Without a Handler per Aggregate)","k":"Architecture Decision Records","t":"Decision","x":"Ship the generic write side as four additive pieces plus a registration helper. 1. The aggregate keeps the mutation, behind one interface. IEntityUpdateApplier…"},"923":{"u":"/docs/adr/099-generic-write-side-entity-commands.html#rationale","d":"ADR-099: Generic Write-Side Entity Commands (Create, Update, Delete Without a Handler per Aggregate)","k":"Architecture Decision Records","t":"Rationale","x":"- The one thing that varies per aggregate is the one thing the module writes. Load, concurrency stamping, NotFound, save, DTO projection, cache invalidation and validation are…"},"924":{"u":"/docs/adr/099-generic-write-side-entity-commands.html#trade-offs","d":"ADR-099: Generic Write-Side Entity Commands (Create, Update, Delete Without a Handler per Aggregate)","k":"Architecture Decision Records","t":"Trade-offs","x":"- The update request is the write contract, so it tracks the aggregate. Exactly the coupling ADR-034 records for the read side, on the other axis: what a caller may change is…"},"925":{"u":"/docs/adr/099-generic-write-side-entity-commands.html#related","d":"ADR-099: Generic Write-Side Entity Commands (Create, Update, Delete Without a Handler per Aggregate)","k":"Architecture Decision Records","t":"Related","x":"ADR-034 (the read side plus create and delete this record completes; its AggregateRootEntityControllerBase is what CrudEntityControllerBase derives from), ADR-083 (the events the…"},"926":{"u":"/docs/adr/099-generic-write-side-entity-commands.html#revision-2026-08-30-the-five-surfaces-that-complete-the-write-side","d":"ADR-099: Generic Write-Side Entity Commands (Create, Update, Delete Without a Handler per Aggregate)","k":"Architecture Decision Records","t":"Revision (2026-08-30): the five surfaces that complete the write side","x":"The decision above shipped the generic update and left the bases where it found them. Reading real write handlers against those bases surfaced five shapes that still forced a…"},"927":{"u":"/docs/adr/099-generic-write-side-entity-commands.html#revision-2026-10-01","d":"ADR-099: Generic Write-Side Entity Commands (Create, Update, Delete Without a Handler per Aggregate)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision changed; two statements in the current-state sections were corrected and stale citations re-anchored. The Rationale claimed the generic update inherits every ADR-014…"},"928":{"u":"/docs/adr/100-outbox-opt-in-resolved-from-messaging-mode.html","d":"ADR-100: The Outbox Is Resolved from the Messaging Mode, Not Always On","k":"Architecture Decision Records"},"929":{"u":"/docs/adr/100-outbox-opt-in-resolved-from-messaging-mode.html#status","d":"ADR-100: The Outbox Is Resolved from the Messaging Mode, Not Always On","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-29, framework v1.170.0). Amends ADR-003 (the outbox runs when the transport needs it, rather than in every host unconditionally) and follows the three-valued…"},"930":{"u":"/docs/adr/100-outbox-opt-in-resolved-from-messaging-mode.html#context","d":"ADR-100: The Outbox Is Resolved from the Messaging Mode, Not Always On","k":"Architecture Decision Records","t":"Context","x":"ADR-003 gives every host a transactional outbox: domain and integration events are written to OutboxMessages in the same transaction as the aggregate changes, OutboxProcessor…"},"931":{"u":"/docs/adr/100-outbox-opt-in-resolved-from-messaging-mode.html#decision","d":"ADR-100: The Outbox Is Resolved from the Messaging Mode, Not Always On","k":"Architecture Decision Records","t":"Decision","x":"Make the outbox a three-valued setting resolved from the transport, gate the components that cost something, keep the schema, and refuse the one combination that cannot work. 1.…"},"932":{"u":"/docs/adr/100-outbox-opt-in-resolved-from-messaging-mode.html#rationale","d":"ADR-100: The Outbox Is Resolved from the Messaging Mode, Not Always On","k":"Architecture Decision Records","t":"Rationale","x":"- The outbox is a transport decision, not a persistence one. Whether an event must survive a process boundary is exactly the question MessageBus:Provider already answers, so…"},"933":{"u":"/docs/adr/100-outbox-opt-in-resolved-from-messaging-mode.html#trade-offs","d":"ADR-100: The Outbox Is Resolved from the Messaging Mode, Not Always On","k":"Architecture Decision Records","t":"Trade-offs","x":"- The default for an in-process host changed. A host on InProcess messaging (or with no MessageBus section at all, which resolves to the same provider) no longer runs the durable…"},"934":{"u":"/docs/adr/100-outbox-opt-in-resolved-from-messaging-mode.html#revision-2026-10-01","d":"ADR-100: The Outbox Is Resolved from the Messaging Mode, Not Always On","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Re-anchored the startup-guard citations in Decision 4 (DependencyInjection.Messaging.cs:196, guard :198, throw :200-201) and the…"},"935":{"u":"/docs/adr/100-outbox-opt-in-resolved-from-messaging-mode.html#related","d":"ADR-100: The Outbox Is Resolved from the Messaging Mode, Not Always On","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (the outbox itself: the dual-dispatch contract, the processor, the retry and dead-letter policy, all unchanged for a host that runs it), ADR-021 (the consumer-side…"},"936":{"u":"/docs/adr/101-common-metapackage.html","d":"ADR-101: An MMCA.Common Metapackage for the Core Six","k":"Architecture Decision Records"},"937":{"u":"/docs/adr/101-common-metapackage.html#status","d":"ADR-101: An MMCA.Common Metapackage for the Core Six","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-29, framework v1.170.0). Extends ADR-053 (the metapackage ships to both registries from the same tag, through the same workflow) and inherits ADR-016 unchanged…"},"938":{"u":"/docs/adr/101-common-metapackage.html#context","d":"ADR-101: An MMCA.Common Metapackage for the Core Six","k":"Architecture Decision Records","t":"Context","x":"ADR-053 made the install path credential-free: dotnet add package MMCA.Common.API works for anyone, from nuget.org, with no token and no hand-written nuget.config. What it did…"},"939":{"u":"/docs/adr/101-common-metapackage.html#decision","d":"ADR-101: An MMCA.Common Metapackage for the Core Six","k":"Architecture Decision Records","t":"Decision","x":"Publish a metapackage named MMCA.Common that carries dependencies and no code. 1. It bundles the Core 6, in layer order. Source/MMCA.Common/MMCA.Common.csproj:26-31 references…"},"940":{"u":"/docs/adr/101-common-metapackage.html#rationale","d":"ADR-101: An MMCA.Common Metapackage for the Core Six","k":"Architecture Decision Records","t":"Rationale","x":"- The common case should cost one line. Six references is not hard, it is repetitive and order-independent noise that a reader has to verify rather than read, and getting it…"},"941":{"u":"/docs/adr/101-common-metapackage.html#trade-offs","d":"ADR-101: An MMCA.Common Metapackage for the Core Six","k":"Architecture Decision Records","t":"Trade-offs","x":"- A consumer mixing both forms has more pins to keep in step, not fewer. An app taking MMCA.Common plus MMCA.Common.UI and the Testing. set still has to sweep every entry to the…"},"942":{"u":"/docs/adr/101-common-metapackage.html#related","d":"ADR-101: An MMCA.Common Metapackage for the Core Six","k":"Architecture Decision Records","t":"Related","x":"ADR-053 (dual-registry publishing, which the metapackage joins with no workflow change), ADR-016 (one version for every package, one sweep per consumer: the property that makes…"},"943":{"u":"/docs/adr/102-pbkdf2-only-password-hashing.html","d":"ADR-102: PBKDF2-Only Password Hashing","k":"Architecture Decision Records"},"944":{"u":"/docs/adr/102-pbkdf2-only-password-hashing.html#status","d":"ADR-102: PBKDF2-Only Password Hashing","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-31). Supersedes ADR-032. Revised 2026-09-11: verification now carries a canonical-material length guard (it rejects any stored hash or salt that is not exactly…"},"945":{"u":"/docs/adr/102-pbkdf2-only-password-hashing.html#context","d":"ADR-102: PBKDF2-Only Password Hashing","k":"Architecture Decision Records","t":"Context","x":"ADR-032 recorded a hasher with two verification paths: PBKDF2-HMAC-SHA512 for new credentials, and an HMAC-SHA512 recompute for rows written under an older scheme, selected at…"},"946":{"u":"/docs/adr/102-pbkdf2-only-password-hashing.html#decision","d":"ADR-102: PBKDF2-Only Password Hashing","k":"Architecture Decision Records","t":"Decision","x":"Hashing and verification are PBKDF2-only. There is one framework IPasswordHasher and one code path through it, in both directions. - One interface, one implementation, one…"},"947":{"u":"/docs/adr/102-pbkdf2-only-password-hashing.html#rationale","d":"ADR-102: PBKDF2-Only Password Hashing","k":"Architecture Decision Records","t":"Rationale","x":"- A verification path that serves no rows is pure risk. With the production stores confirmed free of legacy-format credentials, the branch could only ever be reached by a…"},"948":{"u":"/docs/adr/102-pbkdf2-only-password-hashing.html#trade-offs","d":"ADR-102: PBKDF2-Only Password Hashing","k":"Architecture Decision Records","t":"Trade-offs","x":"- A legacy-format row that reaches production now fails verification. Restoring an old backup, importing a credential from an external system in the legacy shape, or missing a…"},"949":{"u":"/docs/adr/102-pbkdf2-only-password-hashing.html#revision-2026-10-01","d":"ADR-102: PBKDF2-Only Password Hashing","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Anchor refresh only; no decision or rationale changed. The Decision's citations are re-anchored to current source: the TryAddSingleton registration (DependencyInjection.cs:304),…"},"950":{"u":"/docs/adr/102-pbkdf2-only-password-hashing.html#related","d":"ADR-102: PBKDF2-Only Password Hashing","k":"Architecture Decision Records","t":"Related","x":"ADR-032 (the superseded record: the same hasher, its parameters and its call-site hoisting, plus the legacy-compatibility design this reverses), ADR-004 (cross-service JWT / JWKS…"},"951":{"u":"/docs/adr/103-bunit-component-test-tier.html","d":"ADR-103: bUnit Component-Test Tier as a Shipped Package","k":"Architecture Decision Records"},"952":{"u":"/docs/adr/103-bunit-component-test-tier.html#status","d":"ADR-103: bUnit Component-Test Tier as a Shipped Package","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-31). Revised 2026-09-03: one trade-off overstated how far the AngleSharp advisory pin travels. See Revision (2026-09-03) at the end. Revised 2026-09-19: four…"},"953":{"u":"/docs/adr/103-bunit-component-test-tier.html#context","d":"ADR-103: bUnit Component-Test Tier as a Shipped Package","k":"Architecture Decision Records","t":"Context","x":"Three test tiers in this workspace are decided in writing and one is not. ADR-015 gates structure with NetArchTest. ADR-058 ships the runtime conformance suites as abstract bases…"},"954":{"u":"/docs/adr/103-bunit-component-test-tier.html#decision","d":"ADR-103: bUnit Component-Test Tier as a Shipped Package","k":"Architecture Decision Records","t":"Decision","x":"Ship the component-test tier as a package. MMCA.Common.Testing.UI (MMCA.Common/Source/Hosting/MMCA.Common.Testing.UI/MMCA.Common.Testing.UI.csproj:3-4) is one of the MMCA.Common.…"},"955":{"u":"/docs/adr/103-bunit-component-test-tier.html#rationale","d":"ADR-103: bUnit Component-Test Tier as a Shipped Package","k":"Architecture Decision Records","t":"Rationale","x":"- The setup is what a component test gets wrong, so the setup is what the framework should own. Every item in the Decision is a choice with one correct answer per repo and a…"},"956":{"u":"/docs/adr/103-bunit-component-test-tier.html#trade-offs","d":"ADR-103: bUnit Component-Test Tier as a Shipped Package","k":"Architecture Decision Records","t":"Trade-offs","x":"- Loose JSInterop proves nothing about JS. A component test can render a component that calls a JS module which does not exist, because the loose mode answers with defaults…"},"957":{"u":"/docs/adr/103-bunit-component-test-tier.html#related","d":"ADR-103: bUnit Component-Test Tier as a Shipped Package","k":"Architecture Decision Records","t":"Related","x":"ADR-058 (the runtime conformance tier this sits below: same delivery shape, different question, and its bases need a booted host where these need only a renderer), ADR-063 and…"},"958":{"u":"/docs/adr/103-bunit-component-test-tier.html#revision-2026-09-03","d":"ADR-103: bUnit Component-Test Tier as a Shipped Package","k":"Architecture Decision Records","t":"Revision (2026-09-03)","x":"The decision and the mechanism are unchanged. One trade-off's premise was wrong. \"The bUnit version is pinned per repo\" said the AngleSharp advisory pin has to be repeated across…"},"959":{"u":"/docs/adr/103-bunit-component-test-tier.html#revision-2026-09-19","d":"ADR-103: bUnit Component-Test Tier as a Shipped Package","k":"Architecture Decision Records","t":"Revision (2026-09-19)","x":"The decision and the mechanism are unchanged. Four facts had drifted since the record was written. The bunit line is now pinned at 2.11.3, not 2.9.0, and all three central…"},"960":{"u":"/docs/adr/103-bunit-component-test-tier.html#revision-2026-10-01","d":"ADR-103: bUnit Component-Test Tier as a Shipped Package","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The authorization mechanism changed; the rest of the decision is unchanged. The base no longer registers a permissive IsAuthenticatedAuthorizationService. After…"},"961":{"u":"/docs/adr/104-smart-enums-as-opt-in-capability.html","d":"ADR-104: Plain Enums by Default, Enumeration as the Opt-In Smart-Enum Base","k":"Architecture Decision Records"},"962":{"u":"/docs/adr/104-smart-enums-as-opt-in-capability.html#status","d":"ADR-104: Plain Enums by Default, Enumeration as the Opt-In Smart-Enum Base","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-31). Revised 2026-09-09: ADR-115 copies this record's posture verbatim for strongly typed identifiers: shipped, tested, wired into JSON, EF Core, MVC binding…"},"963":{"u":"/docs/adr/104-smart-enums-as-opt-in-capability.html#context","d":"ADR-104: Plain Enums by Default, Enumeration as the Opt-In Smart-Enum Base","k":"Architecture Decision Records","t":"Context","x":"A bounded set of named values shows up everywhere in this workspace: the state that triggered a domain event, an error category, a rate-limiting algorithm, a message-bus…"},"964":{"u":"/docs/adr/104-smart-enums-as-opt-in-capability.html#decision","d":"ADR-104: Plain Enums by Default, Enumeration as the Opt-In Smart-Enum Base","k":"Architecture Decision Records","t":"Decision","x":"A plain C enum is the default for a bounded set. Enumeration is the opt-in base for a set whose members need behavior or data, and nothing in the framework pushes a consumer…"},"965":{"u":"/docs/adr/104-smart-enums-as-opt-in-capability.html#rationale","d":"ADR-104: Plain Enums by Default, Enumeration as the Opt-In Smart-Enum Base","k":"Architecture Decision Records","t":"Rationale","x":"- The default should be the cheap type. A CLR enum costs nothing at a call boundary, needs no serializer or EF registration, and is what a .NET reader expects for a set of names.…"},"966":{"u":"/docs/adr/104-smart-enums-as-opt-in-capability.html#trade-offs","d":"ADR-104: Plain Enums by Default, Enumeration as the Opt-In Smart-Enum Base","k":"Architecture Decision Records","t":"Trade-offs","x":"- A capability nobody uses is a capability nobody has stress-tested. The contract is pinned by 33 test methods against private fixtures, not by a production set with real…"},"967":{"u":"/docs/adr/104-smart-enums-as-opt-in-capability.html#revision-2026-10-01","d":"ADR-104: Plain Enums by Default, Enumeration as the Opt-In Smart-Enum Base","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. The remark on Enumeration now states the same three assertions the Context lists and says the fitness rule names no record and inspects no…"},"968":{"u":"/docs/adr/104-smart-enums-as-opt-in-capability.html#related","d":"ADR-104: Plain Enums by Default, Enumeration as the Opt-In Smart-Enum Base","k":"Architecture Decision Records","t":"Related","x":"ADR-037 (the precedent for recording a shipped, tested and unadopted framework capability as a decision rather than leaving it to read as unfinished adoption), ADR-068 (the seven…"},"969":{"u":"/docs/adr/105-data-residency-build-gate.html","d":"ADR-105: The Published Data-Residency Claim as a Build Gate","k":"Architecture Decision Records"},"970":{"u":"/docs/adr/105-data-residency-build-gate.html#status","d":"ADR-105: The Published Data-Residency Claim as a Build Gate","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-01). Revised 2026-10-01 (region matching is a whole-token comparison rather than plain containment; see Revision below)."},"971":{"u":"/docs/adr/105-data-residency-build-gate.html#context","d":"ADR-105: The Published Data-Residency Claim as a Build Gate","k":"Architecture Decision Records","t":"Context","x":"Both deployed apps publish a privacy policy at their repo root, and each has a section that tells a user where their personal data is stored (MMCA.ADC/PRIVACY.md:61,…"},"972":{"u":"/docs/adr/105-data-residency-build-gate.html#decision","d":"ADR-105: The Published Data-Residency Claim as a Build Gate","k":"Architecture Decision Records","t":"Decision","x":"The published data-residency claim is a build-gated assertion. A shared fitness base parses the region where a repo actually provisions its PII-bearing storage from that repo's…"},"973":{"u":"/docs/adr/105-data-residency-build-gate.html#rationale","d":"ADR-105: The Published Data-Residency Claim as a Build Gate","k":"Architecture Decision Records","t":"Rationale","x":"- The statement with the most legal weight had the least enforcement. Every other compliance claim in these repos is backed by code a rule can inspect: erasure by IAnonymizable,…"},"974":{"u":"/docs/adr/105-data-residency-build-gate.html#trade-offs","d":"ADR-105: The Published Data-Residency Claim as a Build Gate","k":"Architecture Decision Records","t":"Trade-offs","x":"- It proves the policy agrees with a file, not with Azure. Both extractors read committed text. A database provisioned by hand into another region, a restore into a different…"},"975":{"u":"/docs/adr/105-data-residency-build-gate.html#revision-2026-10-01","d":"ADR-105: The Published Data-Residency Claim as a Build Gate","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Region matching moved from plain containment to a whole-token comparison. The protected static ContainsRegionClaim…"},"976":{"u":"/docs/adr/105-data-residency-build-gate.html#related","d":"ADR-105: The Published Data-Residency Claim as a Build Gate","k":"Architecture Decision Records","t":"Related","x":"ADR-009 (the single-region acceptance a consumer must declare: this record is what keeps the published claim honest about which region that is), ADR-005 (the erasure path guarded…"},"977":{"u":"/docs/adr/106-extension-members-as-public-di-surface.html","d":"ADR-106: C# Extension Members as the Public DI Registration Surface","k":"Architecture Decision Records"},"978":{"u":"/docs/adr/106-extension-members-as-public-di-surface.html#status","d":"ADR-106: C# Extension Members as the Public DI Registration Surface","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-01; counts re-measured 2026-10-01)."},"979":{"u":"/docs/adr/106-extension-members-as-public-di-surface.html#context","d":"ADR-106: C# Extension Members as the Public DI Registration Surface","k":"Architecture Decision Records","t":"Context","x":"Every host in this workspace boots the same way: a Program.cs calls a short list of Add methods on IServiceCollection, one per layer, and all of the framework's wiring sits…"},"980":{"u":"/docs/adr/106-extension-members-as-public-di-surface.html#decision","d":"ADR-106: C# Extension Members as the Public DI Registration Surface","k":"Architecture Decision Records","t":"Decision","x":"The framework's public dependency-injection surface is written as C extension members: extension(T) blocks inside public static class types, compiled under LangVersion preview in…"},"981":{"u":"/docs/adr/106-extension-members-as-public-di-surface.html#rationale","d":"ADR-106: C# Extension Members as the Public DI Registration Surface","k":"Architecture Decision Records","t":"Rationale","x":"- One Add name per layer is the point of the surface. A host reads as a list of layers (Program.cs:78, :79, :101, :132), and grouping the registrations by receiver in a single…"},"982":{"u":"/docs/adr/106-extension-members-as-public-di-surface.html#trade-offs","d":"ADR-106: C# Extension Members as the Public DI Registration Surface","k":"Architecture Decision Records","t":"Trade-offs","x":"- A preview language feature under a floating SDK is a moving target. No global.json pins an SDK version and CI installs dotnet-version: '10.0.x'…"},"983":{"u":"/docs/adr/106-extension-members-as-public-di-surface.html#revision-2026-10-01","d":"ADR-106: C# Extension Members as the Public DI Registration Surface","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed: the framework's DI surface is still written as extension(T) blocks compiled under LangVersion preview, and both emitted shapes are still…"},"984":{"u":"/docs/adr/106-extension-members-as-public-di-surface.html#related","d":"ADR-106: C# Extension Members as the Public DI Registration Surface","k":"Architecture Decision Records","t":"Related","x":"ADR-015 (the RS0016/RS0017 baseline that freezes both emitted shapes of every extension member, and the fitness-rule tier that had to learn about ExtensionMarkerAttribute),…"},"985":{"u":"/docs/adr/107-transaction-execution-contract.html","d":"ADR-107: Transaction Execution and Commit-Ambiguity Contract","k":"Architecture Decision Records"},"986":{"u":"/docs/adr/107-transaction-execution-contract.html#status","d":"ADR-107: Transaction Execution and Commit-Ambiguity Contract","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-03; adoption counts and consumer state re-measured 2026-09-19). Revised 2026-09-25 (MMCA.ADC's ITransactional count corrected to six, adding…"},"987":{"u":"/docs/adr/107-transaction-execution-contract.html#context","d":"ADR-107: Transaction Execution and Commit-Ambiguity Contract","k":"Architecture Decision Records","t":"Context","x":"Every transactional write in this workspace funnels through one method. IUnitOfWork.ExecuteInTransactionAsync…"},"988":{"u":"/docs/adr/107-transaction-execution-contract.html#decision","d":"ADR-107: Transaction Execution and Commit-Ambiguity Contract","k":"Architecture Decision Records","t":"Decision","x":"ExecuteInTransactionAsync is a re-entrant, retriable, commit-once unit: the whole delegate is the retriable work, the commit phase is deliberately outside the retry, and a commit…"},"989":{"u":"/docs/adr/107-transaction-execution-contract.html#rationale","d":"ADR-107: Transaction Execution and Commit-Ambiguity Contract","k":"Architecture Decision Records","t":"Rationale","x":"- Retrying the operation is safe; retrying the commit is not. A transient failure before the commit leaves nothing durable, so re-running the delegate against a cleared change…"},"990":{"u":"/docs/adr/107-transaction-execution-contract.html#trade-offs","d":"ADR-107: Transaction Execution and Commit-Ambiguity Contract","k":"Architecture Decision Records","t":"Trade-offs","x":"- The ambiguity is a hard failure the caller must handle, and today nobody catches it. A host with no [Idempotent] coverage on the affected endpoint surfaces it as an unhandled…"},"991":{"u":"/docs/adr/107-transaction-execution-contract.html#revision-2026-10-01","d":"ADR-107: Transaction Execution and Commit-Ambiguity Contract","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The commit phase gained a pre-commit step. Since v1.215.0 (MMCA.Common/CHANGELOG.md:53), a successful attempt runs FlushEnrolledCommandsBeforeCommitAsync before TryCommit…"},"992":{"u":"/docs/adr/107-transaction-execution-contract.html#related","d":"ADR-107: Transaction Execution and Commit-Ambiguity Contract","k":"Architecture Decision Records","t":"Related","x":"ADR-014 (the Transactional decorator that is the main caller, and whose 2026-07-19 revision decided the failed-Result rollback this record implements), ADR-006…"},"993":{"u":"/docs/adr/108-distributed-lock-primitive.html","d":"ADR-108: Cross-Replica Mutual Exclusion via IDistributedLock","k":"Architecture Decision Records"},"994":{"u":"/docs/adr/108-distributed-lock-primitive.html#status","d":"ADR-108: Cross-Replica Mutual Exclusion via IDistributedLock","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-03). Revised 2026-09-19 (the second consumer moved: ADC's AI scoring pass now runs as the internal command ScoreEventSessionsInternalCommandHandler under…"},"995":{"u":"/docs/adr/108-distributed-lock-primitive.html#context","d":"ADR-108: Cross-Replica Mutual Exclusion via IDistributedLock","k":"Architecture Decision Records","t":"Context","x":"Both deployed apps run more than one replica of every service. ADC's Conference container app is declared with minReplicas: 1, maxReplicas: 2 (MMCA.ADC/infra/main.bicep:1851,…"},"996":{"u":"/docs/adr/108-distributed-lock-primitive.html#decision","d":"ADR-108: Cross-Replica Mutual Exclusion via IDistributedLock","k":"Architecture Decision Records","t":"Decision","x":"The framework ships one cross-replica mutual-exclusion primitive, IDistributedLock: a non-reentrant, TTL-bounded, explicitly best-effort lock with an owner-scoped idempotent…"},"997":{"u":"/docs/adr/108-distributed-lock-primitive.html#rationale","d":"ADR-108: Cross-Replica Mutual Exclusion via IDistributedLock","k":"Architecture Decision Records","t":"Rationale","x":"- The degraded mode had to be visible, not silent. Registering nothing when Redis is absent would push a null check onto every caller, and registering a no-op lock would make a…"},"998":{"u":"/docs/adr/108-distributed-lock-primitive.html#trade-offs","d":"ADR-108: Cross-Replica Mutual Exclusion via IDistributedLock","k":"Architecture Decision Records","t":"Trade-offs","x":"- Failover can hand the same key to two holders. The lock inherits Redis's failover behavior (RedisDistributedLock.cs:19-23), so a primary loss between acquire and replicate is a…"},"999":{"u":"/docs/adr/108-distributed-lock-primitive.html#revision-2026-10-01","d":"ADR-108: Cross-Replica Mutual Exclusion via IDistributedLock","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Two statements no longer matched the code. First, adoption grew to four call sites: the framework's own PasswordResetTokenService takes IDistributedLock as a constructor…"},"1000":{"u":"/docs/adr/108-distributed-lock-primitive.html#related","d":"ADR-108: Cross-Replica Mutual Exclusion via IDistributedLock","k":"Architecture Decision Records","t":"Related","x":"ADR-017 (the HTTP idempotency filter, the first consumer, whose 409-on-lock-miss this record explains), ADR-026 (the cache registration this lock is registered beside, and the…"},"1001":{"u":"/docs/adr/109-feature-by-folder-convention.html","d":"ADR-109: Feature-by-Folder Layout as an Enforced Convention","k":"Architecture Decision Records"},"1002":{"u":"/docs/adr/109-feature-by-folder-convention.html#status","d":"ADR-109: Feature-by-Folder Layout as an Enforced Convention","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-03; folder inventory and IDE0130 exception list refreshed 2026-09-19)."},"1003":{"u":"/docs/adr/109-feature-by-folder-convention.html#context","d":"ADR-109: Feature-by-Folder Layout as an Enforced Convention","k":"Architecture Decision Records","t":"Context","x":"The rubric's section 5 asks that \"code is organized by feature/capability, so a change touches one cohesive slice\", with features \"grouped by use case ..., not by horizontal…"},"1004":{"u":"/docs/adr/109-feature-by-folder-convention.html#decision","d":"ADR-109: Feature-by-Folder Layout as an Enforced Convention","k":"Architecture Decision Records","t":"Decision","x":"Folder structure is a governed architectural property, not a matter of taste: an aggregate or feature names a folder, a folder holds at most twelve direct code files, namespaces…"},"1005":{"u":"/docs/adr/109-feature-by-folder-convention.html#rationale","d":"ADR-109: Feature-by-Folder Layout as an Enforced Convention","k":"Architecture Decision Records","t":"Rationale","x":"- A wide folder has stopped naming a feature. The rule's own statement of intent is that a folder \"that accumulates dozens of direct code files has stopped naming a feature and…"},"1006":{"u":"/docs/adr/109-feature-by-folder-convention.html#trade-offs","d":"ADR-109: Feature-by-Folder Layout as an Enforced Convention","k":"Architecture Decision Records","t":"Trade-offs","x":"- Layout changes are public API breaks on a lockstep package family. Because the namespace is the folder, a reorganization is a breaking release for every consumer (ADR-016),…"},"1007":{"u":"/docs/adr/109-feature-by-folder-convention.html#revision-2026-10-01","d":"ADR-109: Feature-by-Folder Layout as an Enforced Convention","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Citations were re-anchored: the rubric section 5 text (ArchitectureEvaluationCriteria.md:211, :214), the v1.183.0 and v1.184.0 changelog entries…"},"1008":{"u":"/docs/adr/109-feature-by-folder-convention.html#related","d":"ADR-109: Feature-by-Folder Layout as an Enforced Convention","k":"Architecture Decision Records","t":"Related","x":"ADR-015 (the fitness-function tier this rule joins, and the public-API baseline that records FolderWidthTestsBase), ADR-016 (lockstep versioning: a layout change lands in every…"},"1009":{"u":"/docs/adr/110-rubric-v2-category-realignment.html","d":"ADR-110: Rubric Version 2, Category Realignment at 34","k":"Architecture Decision Records"},"1010":{"u":"/docs/adr/110-rubric-v2-category-realignment.html#status","d":"ADR-110: Rubric Version 2, Category Realignment at 34","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-04; section 16 scope corrected 2026-09-04: MMCA.ADC scores the category, recorded in ADR-111; content refreshed 2026-09-19: MMCA.Common now scores section 16,…"},"1011":{"u":"/docs/adr/110-rubric-v2-category-realignment.html#context","d":"ADR-110: Rubric Version 2, Category Realignment at 34","k":"Architecture Decision Records","t":"Context","x":"The 34-category Architecture Evaluation Criteria (Website/docs-src/governance/ArchitectureEvaluationCriteria.md) is the only basis on which the three scorecards are scored, and…"},"1012":{"u":"/docs/adr/110-rubric-v2-category-realignment.html#decision","d":"ADR-110: Rubric Version 2, Category Realignment at 34","k":"Architecture Decision Records","t":"Decision","x":"The rubric is versioned, and version 2 keeps 34 categories with stable numbering by replacing the two overlap-heavy categories in place and adding criteria to eleven others. 1.…"},"1013":{"u":"/docs/adr/110-rubric-v2-category-realignment.html#rationale","d":"ADR-110: Rubric Version 2, Category Realignment at 34","k":"Architecture Decision Records","t":"Rationale","x":"Replacing in place preserves every NN citation in the backlogs, every §NN in the ADRs and the scorecard history, the command document's Part A/B/C dispatch split, and the literal…"},"1014":{"u":"/docs/adr/110-rubric-v2-category-realignment.html#trade-offs","d":"ADR-110: Rubric Version 2, Category Realignment at 34","k":"Architecture Decision Records","t":"Trade-offs","x":"- The index trend line carries a denominator change. The scorecard headers and the backlog headers record both the old and the new fractions for the cycle where it happened. -…"},"1015":{"u":"/docs/adr/111-ai-session-scoring-governance.html","d":"ADR-111: AI Session Scoring Governance","k":"Architecture Decision Records"},"1016":{"u":"/docs/adr/111-ai-session-scoring-governance.html#status","d":"ADR-111: AI Session Scoring Governance","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-04). Extended by ADR-120 (2026-09-11): the rules here that belong to calling a model rather than to scoring a session (a bounded call, a versioned and hashed…"},"1017":{"u":"/docs/adr/111-ai-session-scoring-governance.html#context","d":"ADR-111: AI Session Scoring Governance","k":"Architecture Decision Records","t":"Context","x":"MMCA.ADC ships one product feature that calls a language model. An organizer, looking at the session selection dashboard for an event, can trigger an AI scoring pass that rates…"},"1018":{"u":"/docs/adr/111-ai-session-scoring-governance.html#decision","d":"ADR-111: AI Session Scoring Governance","k":"Architecture Decision Records","t":"Decision","x":"A product feature that calls a model is governed like any other production dependency: the call sits behind a port, the model and the prompt are versioned and persisted with…"},"1019":{"u":"/docs/adr/111-ai-session-scoring-governance.html#rationale","d":"ADR-111: AI Session Scoring Governance","k":"Architecture Decision Records","t":"Rationale","x":"- A version you do not persist is not a version. The prompt version is worth something only because it is on the row next to the score. An organizer looking at a number two…"},"1020":{"u":"/docs/adr/111-ai-session-scoring-governance.html#trade-offs","d":"ADR-111: AI Session Scoring Governance","k":"Architecture Decision Records","t":"Trade-offs","x":"- Recorded-response replay cannot see model drift. Every free-tier case answers from a response captured at a point in time, so the tier that runs on every deploy is blind to…"},"1021":{"u":"/docs/adr/111-ai-session-scoring-governance.html#revision-2026-10-01","d":"ADR-111: AI Session Scoring Governance","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The guardrails are now one module-owned composition rather than a single framework registration. AddConferenceAiGuardrails registers the framework's PiiRedactionGuardrail and…"},"1022":{"u":"/docs/adr/111-ai-session-scoring-governance.html#related","d":"ADR-111: AI Session Scoring Governance","k":"Architecture Decision Records","t":"Related","x":"ADR-110 (the rubric category this record answers: section 16, AI-Native Application Architecture, scored for MMCA.ADC because of this feature), ADR-061 (the Key Vault reference…"},"1023":{"u":"/docs/adr/112-catalog-owned-effective-pricing.html","d":"ADR-112: Catalog Owns Effective Pricing; Sales Snapshots It at Checkout","k":"Architecture Decision Records"},"1024":{"u":"/docs/adr/112-catalog-owned-effective-pricing.html#status","d":"ADR-112: Catalog Owns Effective Pricing; Sales Snapshots It at Checkout","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-07). Revised 2026-09-07: an order line freezes the list price and the promotion label beside the charged unit price, so an order answers what it saved without…"},"1025":{"u":"/docs/adr/112-catalog-owned-effective-pricing.html#context","d":"ADR-112: Catalog Owns Effective Pricing; Sales Snapshots It at Checkout","k":"Architecture Decision Records","t":"Context","x":"MMCA.Store sells product variants, and a variant's price is one Money on the variant row…"},"1026":{"u":"/docs/adr/112-catalog-owned-effective-pricing.html#decision","d":"ADR-112: Catalog Owns Effective Pricing; Sales Snapshots It at Checkout","k":"Architecture Decision Records","t":"Decision","x":"Promotional pricing is a variant-level owned value object, not an aggregate. VariantDiscount…"},"1027":{"u":"/docs/adr/112-catalog-owned-effective-pricing.html#rationale","d":"ADR-112: Catalog Owns Effective Pricing; Sales Snapshots It at Checkout","k":"Architecture Decision Records","t":"Rationale","x":"A discount that belongs to exactly one variant, is replaced rather than edited, and has no life of its own once the variant is gone is a value object by every test we apply…"},"1028":{"u":"/docs/adr/112-catalog-owned-effective-pricing.html#trade-offs","d":"ADR-112: Catalog Owns Effective Pricing; Sales Snapshots It at Checkout","k":"Architecture Decision Records","t":"Trade-offs","x":"- Cached reads lag a window boundary by up to 60 seconds. The three write commands implement ICacheInvalidating and their controllers evict the catalog:products output-cache tag,…"},"1029":{"u":"/docs/adr/112-catalog-owned-effective-pricing.html#revision-2026-10-01","d":"ADR-112: Catalog Owns Effective Pricing; Sales Snapshots It at Checkout","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Two statements no longer matched the code and are corrected in place; the decision itself is unchanged. The products output-cache policy now expires after 60 seconds rather than…"},"1030":{"u":"/docs/adr/112-catalog-owned-effective-pricing.html#related","d":"ADR-112: Catalog Owns Effective Pricing; Sales Snapshots It at Checkout","k":"Architecture Decision Records","t":"Related","x":"- ADR-005, ADR-006: each service owns its database, and cross-service copies are denormalized rather than joined. - ADR-007: [ServiceContract] purity, the rule that keeps the…"},"1031":{"u":"/docs/adr/113-postgresql-as-a-first-class-engine.html","d":"ADR-113: PostgreSQL as a First-Class Engine","k":"Architecture Decision Records"},"1032":{"u":"/docs/adr/113-postgresql-as-a-first-class-engine.html#status","d":"ADR-113: PostgreSQL as a First-Class Engine","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-09). Extends ADR-006 (one sealed context class per engine) and ADR-018 (engine as a routing decision) with a fourth engine. Revised 2026-10-01 (the Helpdesk…"},"1033":{"u":"/docs/adr/113-postgresql-as-a-first-class-engine.html#context","d":"ADR-113: PostgreSQL as a First-Class Engine","k":"Architecture Decision Records","t":"Context","x":"The framework has shipped three database engines since its first release: SQL Server, Azure Cosmos DB and SQLite. Every one of them is reached the same way, because ADR-006 fixed…"},"1034":{"u":"/docs/adr/113-postgresql-as-a-first-class-engine.html#decision","d":"ADR-113: PostgreSQL as a First-Class Engine","k":"Architecture Decision Records","t":"Decision","x":"PostgreSQL is added as a fourth first-class engine, mirroring the SQL Server footprint one for one, and differing from it only where the server forces a difference. 1. The engine…"},"1035":{"u":"/docs/adr/113-postgresql-as-a-first-class-engine.html#rationale","d":"ADR-113: PostgreSQL as a First-Class Engine","k":"Architecture Decision Records","t":"Rationale","x":"The shape follows from the alternatives that were weighed and declined: - A snakecase naming convention by default. Rejected. It is the PostgreSQL community norm, but it would…"},"1036":{"u":"/docs/adr/113-postgresql-as-a-first-class-engine.html#trade-offs","d":"ADR-113: PostgreSQL as a First-Class Engine","k":"Architecture Decision Records","t":"Trade-offs","x":"- Every consumer's package graph gains Npgsql.EntityFrameworkCore.PostgreSQL. It is referenced unconditionally from MMCA.Common.Infrastructure, exactly as the Cosmos, SQLite and…"},"1037":{"u":"/docs/adr/113-postgresql-as-a-first-class-engine.html#revision-2026-10-01","d":"ADR-113: PostgreSQL as a First-Class Engine","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The two rollout follow-ups are no longer plans. The Helpdesk canary ships as the advisory postgresql-canary job (MMCA.Helpdesk/.github/workflows/ci.yml:146-155,…"},"1038":{"u":"/docs/adr/113-postgresql-as-a-first-class-engine.html#related","d":"ADR-113: PostgreSQL as a First-Class Engine","k":"Architecture Decision Records","t":"Related","x":"ADR-006 (one sealed context per engine, one instance per database), ADR-018 (the engine axis this record adds a member to), ADR-035 (the application-managed RowVersion token…"},"1039":{"u":"/docs/adr/114-internal-commands-durable-job-queue.html","d":"ADR-114: Internal Commands, a Job Queue Built on the Outbox's Machinery","k":"Architecture Decision Records"},"1040":{"u":"/docs/adr/114-internal-commands-durable-job-queue.html#status","d":"ADR-114: Internal Commands, a Job Queue Built on the Outbox's Machinery","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-09). Rides the outbox machinery of ADR-003 without extending it. Revised 2026-09-19 (three corrections to match the code: a schedule outside a transaction…"},"1041":{"u":"/docs/adr/114-internal-commands-durable-job-queue.html#context","d":"ADR-114: Internal Commands, a Job Queue Built on the Outbox's Machinery","k":"Architecture Decision Records","t":"Context","x":"The framework has had two ways to move work off the request thread and neither of them is a job queue. The transactional outbox (ADR-003) carries events. OutboxMessage…"},"1042":{"u":"/docs/adr/114-internal-commands-durable-job-queue.html#decision","d":"ADR-114: Internal Commands, a Job Queue Built on the Outbox's Machinery","k":"Architecture Decision Records","t":"Decision","x":"Deferred work is an ordinary CQRS command, scheduled into a per-source InternalCommands table and executed later through the normal decorator pipeline. Five parts carry that. 1.…"},"1043":{"u":"/docs/adr/114-internal-commands-durable-job-queue.html#rationale","d":"ADR-114: Internal Commands, a Job Queue Built on the Outbox's Machinery","k":"Architecture Decision Records","t":"Rationale","x":"Four alternatives were weighed, and each one gave up the atomicity guarantee or duplicated a vocabulary the framework already owns: Hangfire. It is the obvious answer and it…"},"1044":{"u":"/docs/adr/114-internal-commands-durable-job-queue.html#trade-offs","d":"ADR-114: Internal Commands, a Job Queue Built on the Outbox's Machinery","k":"Architecture Decision Records","t":"Trade-offs","x":"Consumers take one migration per relational data source. The table is in the model of every relational source (SQL Server, PostgreSQL and SQLite after ADR-113), so a consumer…"},"1045":{"u":"/docs/adr/114-internal-commands-durable-job-queue.html#revision-2026-10-01","d":"ADR-114: Internal Commands, a Job Queue Built on the Outbox's Machinery","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Two statements no longer matched the code. First, a schedule made outside a transaction now saves…"},"1046":{"u":"/docs/adr/114-internal-commands-durable-job-queue.html#related","d":"ADR-114: Internal Commands, a Job Queue Built on the Outbox's Machinery","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (the claim-lease, backoff and dead-letter machinery this record borrows as an idiom), ADR-014 (the decorator chain a deferred command runs through unchanged), ADR-074…"},"1047":{"u":"/docs/adr/115-strongly-typed-identifiers-opt-in.html","d":"ADR-115: Strongly Typed Identifiers as an Opt-In Capability, Aliases Still the Default","k":"Architecture Decision Records"},"1048":{"u":"/docs/adr/115-strongly-typed-identifiers-opt-in.html#status","d":"ADR-115: Strongly Typed Identifiers as an Opt-In Capability, Aliases Still the Default","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-09). Revised 2026-09-19 (the alias count and the migration-surface census this record quotes were re-measured, the CheckIn parameter run was corrected from…"},"1049":{"u":"/docs/adr/115-strongly-typed-identifiers-opt-in.html#context","d":"ADR-115: Strongly Typed Identifiers as an Opt-In Capability, Aliases Still the Default","k":"Architecture Decision Records","t":"Context","x":"ADR-048 chose primitive identifier aliases over wrapper structs. ADR-085 re-opened that choice on 2026-08-18, priced the migration in numbers (44 aliases, 43 of them int, 3,192…"},"1050":{"u":"/docs/adr/115-strongly-typed-identifiers-opt-in.html#decision","d":"ADR-115: Strongly Typed Identifiers as an Opt-In Capability, Aliases Still the Default","k":"Architecture Decision Records","t":"Decision","x":"The framework ships strongly typed identifiers as an opt-in capability. The primitive aliases remain the default identifier model, no existing entity, consumer or test migrates,…"},"1051":{"u":"/docs/adr/115-strongly-typed-identifiers-opt-in.html#rationale","d":"ADR-115: Strongly Typed Identifiers as an Opt-In Capability, Aliases Still the Default","k":"Architecture Decision Records","t":"Rationale","x":"- The gap was the plumbing, not the type. A readonly record struct wrapping an int is four lines any team can write. What stops teams is the six boundaries around it: EF mapping…"},"1052":{"u":"/docs/adr/115-strongly-typed-identifiers-opt-in.html#trade-offs","d":"ADR-115: Strongly Typed Identifiers as an Opt-In Capability, Aliases Still the Default","k":"Architecture Decision Records","t":"Trade-offs","x":"- Two identifier styles can now coexist in one codebase, and nothing prevents that. A repo can wrap some identifiers and leave others primitive, and the reader cannot tell from…"},"1053":{"u":"/docs/adr/115-strongly-typed-identifiers-opt-in.html#related","d":"ADR-115: Strongly Typed Identifiers as an Opt-In Capability, Aliases Still the Default","k":"Architecture Decision Records","t":"Related","x":"ADR-048 (the primitive alias decision this record leaves in force), ADR-085 (the priced deferral and its three revisit triggers, none of which is the trigger here), ADR-104 (the…"},"1054":{"u":"/docs/adr/115-strongly-typed-identifiers-opt-in.html#revision-2026-09-19","d":"ADR-115: Strongly Typed Identifiers as an Opt-In Capability, Aliases Still the Default","k":"Architecture Decision Records","t":"Revision (2026-09-19)","x":"The decision is unchanged: the framework still ships the capability, the aliases are still the default, and adoption is still zero. Four facts this record borrowed were…"},"1055":{"u":"/docs/adr/115-strongly-typed-identifiers-opt-in.html#revision-2026-10-01","d":"ADR-115: Strongly Typed Identifiers as an Opt-In Capability, Aliases Still the Default","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The decision is unchanged: the framework still ships the capability, the aliases are still the default, and adoption is still zero. Three statements were corrected against source…"},"1056":{"u":"/docs/adr/116-identity-completions-opt-in.html","d":"ADR-116: Identity Completions Ship as Opt-In Base Classes, Not as Framework Features","k":"Architecture Decision Records"},"1057":{"u":"/docs/adr/116-identity-completions-opt-in.html#status","d":"ADR-116: Identity Completions Ship as Opt-In Base Classes, Not as Framework Features","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-09; revised 2026-09-19: item 10 now scopes the \"no @page directive\" claim to what this decision ships, because MMCA.Common.UI itself ships 13 of them in the…"},"1058":{"u":"/docs/adr/116-identity-completions-opt-in.html#context","d":"ADR-116: Identity Completions Ship as Opt-In Base Classes, Not as Framework Features","k":"Architecture Decision Records","t":"Context","x":"The framework already owns the hard, uniform parts of identity. AuthenticationServiceBase carries login, registration, refresh-token rotation with reuse detection and revocation…"},"1059":{"u":"/docs/adr/116-identity-completions-opt-in.html#decision","d":"ADR-116: Identity Completions Ship as Opt-In Base Classes, Not as Framework Features","k":"Architecture Decision Records","t":"Decision","x":"The four identity completions ship as opt-in extension points: contracts and abstract bases in Application, implementations in Infrastructure behind their own Add calls, and…"},"1060":{"u":"/docs/adr/116-identity-completions-opt-in.html#rationale","d":"ADR-116: Identity Completions Ship as Opt-In Base Classes, Not as Framework Features","k":"Architecture Decision Records","t":"Rationale","x":"Six shapes were considered for these four capabilities, and each rejection is what produced the opt-in posture above: - Ship a framework User entity with two-factor and…"},"1061":{"u":"/docs/adr/116-identity-completions-opt-in.html#trade-offs","d":"ADR-116: Identity Completions Ship as Opt-In Base Classes, Not as Framework Features","k":"Architecture Decision Records","t":"Trade-offs","x":"- A consumer that adopts nothing sees no behaviour change and no new configuration. The only edit that reaches an unadopted consumer is the widened AuthenticationServiceBase…"},"1062":{"u":"/docs/adr/116-identity-completions-opt-in.html#revision-2026-10-01","d":"ADR-116: Identity Completions Ship as Opt-In Base Classes, Not as Framework Features","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Item 10 said no confirmation page ships in MMCA.Common.UI. One now does: ConfirmEmail.razor carries @page \"/confirm-email\" and [AllowAnonymous]…"},"1063":{"u":"/docs/adr/116-identity-completions-opt-in.html#related","d":"ADR-116: Identity Completions Ship as Opt-In Base Classes, Not as Framework Features","k":"Architecture Decision Records","t":"Related","x":"ADR-020 (the compiled role-to-permission registry stored grants layer over), ADR-091 (the token-service design email confirmation mirrors), ADR-032 (the narrow-contract precedent…"},"1064":{"u":"/docs/adr/117-apphost-integration-test-base.html","d":"ADR-117: AppHost Integration Testing as a Shipped Package","k":"Architecture Decision Records"},"1065":{"u":"/docs/adr/117-apphost-integration-test-base.html#status","d":"ADR-117: AppHost Integration Testing as a Shipped Package","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-09). Adds the AppHost test tier ADR-098 left out, as a package rather than a per-repo copy. Revised 2026-09-11: both consumer tiers now subclass the package…"},"1066":{"u":"/docs/adr/117-apphost-integration-test-base.html#context","d":"ADR-117: AppHost Integration Testing as a Shipped Package","k":"Architecture Decision Records","t":"Context","x":"The AppHost is the only file that states how a whole stack fits together: which project resources exist, which database each one owns, which broker they share, where JWKS…"},"1067":{"u":"/docs/adr/117-apphost-integration-test-base.html#decision","d":"ADR-117: AppHost Integration Testing as a Shipped Package","k":"Architecture Decision Records","t":"Decision","x":"Ship the AppHost test tier as a package, MMCA.Common.Testing.Aspire, so a consumer's smoke tier is a subclass and a set of assertions rather than a copied fixture. Make the…"},"1068":{"u":"/docs/adr/117-apphost-integration-test-base.html#rationale","d":"ADR-117: AppHost Integration Testing as a Shipped Package","k":"Architecture Decision Records","t":"Rationale","x":"Six shapes were weighed, and each rejection is a property the package keeps: - Leave it as a per-repo copy. Rejected: that is what produced roughly a hundred lines of budget and…"},"1069":{"u":"/docs/adr/117-apphost-integration-test-base.html#trade-offs","d":"ADR-117: AppHost Integration Testing as a Shipped Package","k":"Architecture Decision Records","t":"Trade-offs","x":"- A consumer's smoke tier is a subclass. MMCA.ADC.AppHost.SmokeTests is two files. The fixture is AdcAppHostFixture : AppHostFixtureBase…"},"1070":{"u":"/docs/adr/117-apphost-integration-test-base.html#revision-2026-10-01","d":"ADR-117: AppHost Integration Testing as a Shipped Package","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Decision 9 is corrected: it showed Assert.SkipWhen(!Fixture.IsAvailable, Fixture.SkipReason!) as the consumer's skip, a form that throws…"},"1071":{"u":"/docs/adr/117-apphost-integration-test-base.html#related","d":"ADR-117: AppHost Integration Testing as a Shipped Package","k":"Architecture Decision Records","t":"Related","x":"ADR-098 (the orchestration posture this tier tests without changing), ADR-058 (the shipped-test-tier-as-a-package pattern this record follows), ADR-016 (the lockstep release this…"},"1072":{"u":"/docs/adr/118-message-transport-library-policy.html","d":"ADR-118: Message Transport Library Policy (MassTransit v8 Pin and Exit Strategy)","k":"Architecture Decision Records"},"1073":{"u":"/docs/adr/118-message-transport-library-policy.html#status","d":"ADR-118: Message Transport Library Policy (MassTransit v8 Pin and Exit Strategy)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-11). Promotes the MassTransit clause inside ADR-016 into a decision of its own: ADR-016 owns the release policy that the pin is enforced under, this record owns…"},"1074":{"u":"/docs/adr/118-message-transport-library-policy.html#context","d":"ADR-118: Message Transport Library Policy (MassTransit v8 Pin and Exit Strategy)","k":"Architecture Decision Records","t":"Context","x":"MassTransit is the only message-broker library in this workspace, and it is pinned to 8.5.11 across all three of its packages (MMCA.Common/Directory.Packages.props:128-130, the…"},"1075":{"u":"/docs/adr/118-message-transport-library-policy.html#decision","d":"ADR-118: Message Transport Library Policy (MassTransit v8 Pin and Exit Strategy)","k":"Architecture Decision Records","t":"Decision","x":"Stay on MassTransit v8 behind IMessageBus, and keep the outbox and inbox custom precisely because that is what keeps a transport swap cheap. Record the exit triggers now, and the…"},"1076":{"u":"/docs/adr/118-message-transport-library-policy.html#rationale","d":"ADR-118: Message Transport Library Policy (MassTransit v8 Pin and Exit Strategy)","k":"Architecture Decision Records","t":"Rationale","x":"- The pin is enforceable, so it is honest. A comment beside a version number is a hope; a fitness function that parses Directory.Packages.props is the reason the v9 crash was…"},"1077":{"u":"/docs/adr/118-message-transport-library-policy.html#trade-offs","d":"ADR-118: Message Transport Library Policy (MassTransit v8 Pin and Exit Strategy)","k":"Architecture Decision Records","t":"Trade-offs","x":"- The workspace sits on a library version with a finite support horizon. Nothing forces a move today, and the exit triggers above are what convert \"we should look at this…"},"1078":{"u":"/docs/adr/118-message-transport-library-policy.html#revision-2026-10-01","d":"ADR-118: Message Transport Library Policy (MassTransit v8 Pin and Exit Strategy)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision, trigger, replacement order or rationale changed. Facts restated from source: all five pinned MassTransit entries are at the v8 patch 8.5.11…"},"1079":{"u":"/docs/adr/118-message-transport-library-policy.html#related","d":"ADR-118: Message Transport Library Policy (MassTransit v8 Pin and Exit Strategy)","k":"Architecture Decision Records","t":"Related","x":"ADR-016 (the lockstep release policy this pin is enforced under; its 2026-08-28 amendment first sketched exit options, and this record takes ownership of that list. ADR-016's…"},"1080":{"u":"/docs/adr/119-restrict-delete-by-default.html","d":"ADR-119: Delete Behavior Is an Explicit Business Rule (Restrict by Default)","k":"Architecture Decision Records"},"1081":{"u":"/docs/adr/119-restrict-delete-by-default.html#status","d":"ADR-119: Delete Behavior Is an Explicit Business Rule (Restrict by Default)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-11). Inverts EF Core's cascading default for every relationship in every repo built on this framework, and stamps each foreign key with where its delete…"},"1082":{"u":"/docs/adr/119-restrict-delete-by-default.html#context","d":"ADR-119: Delete Behavior Is an Explicit Business Rule (Restrict by Default)","k":"Architecture Decision Records","t":"Context","x":"EF Core picks a delete behavior for you. A required relationship gets Cascade, an optional one gets ClientSetNull, and neither choice appears anywhere a reviewer reads. The…"},"1083":{"u":"/docs/adr/119-restrict-delete-by-default.html#decision","d":"ADR-119: Delete Behavior Is an Explicit Business Rule (Restrict by Default)","k":"Architecture Decision Records","t":"Decision","x":"Restrict is the default delete behavior for every relationship nobody configured, a cascade is an opt-in with a stated reason, and the finished model records which of the two…"},"1084":{"u":"/docs/adr/119-restrict-delete-by-default.html#rationale","d":"ADR-119: Delete Behavior Is an Explicit Business Rule (Restrict by Default)","k":"Architecture Decision Records","t":"Rationale","x":"- The safe default is the one that fails loudly. Restrict turns an unintended parent delete into an error at the point of the delete, where it can be read and fixed. Cascade…"},"1085":{"u":"/docs/adr/119-restrict-delete-by-default.html#trade-offs","d":"ADR-119: Delete Behavior Is an Explicit Business Rule (Restrict by Default)","k":"Architecture Decision Records","t":"Trade-offs","x":"- One migration per service database, authored and merged on 2026-09-11. The FK constraints change, so each database needed a migration: four in ADC (Conference, Identity,…"},"1086":{"u":"/docs/adr/119-restrict-delete-by-default.html#revision-2026-10-01","d":"ADR-119: Delete Behavior Is an Explicit Business Rule (Restrict by Default)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. The Context list of genuine hard deletes is completed: it now also names the framework's outbox cleanup…"},"1087":{"u":"/docs/adr/119-restrict-delete-by-default.html#related","d":"ADR-119: Delete Behavior Is an Explicit Business Rule (Restrict by Default)","k":"Architecture Decision Records","t":"Related","x":"ADR-006 (one context class per engine over one abstract base, which is what makes this a single registration), ADR-005 (the soft-delete posture that keeps cascades dormant at…"},"1088":{"u":"/docs/adr/120-governed-chat-client-boundary.html","d":"ADR-120: Governed Language-Model Boundary (MMCA.Common.AI)","k":"Architecture Decision Records"},"1089":{"u":"/docs/adr/120-governed-chat-client-boundary.html#status","d":"ADR-120: Governed Language-Model Boundary (MMCA.Common.AI)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-11). Extends ADR-111, which keeps every scoring-specific rule it states: this record moves the parts that are not about session scoring into the framework, as…"},"1090":{"u":"/docs/adr/120-governed-chat-client-boundary.html#context","d":"ADR-120: Governed Language-Model Boundary (MMCA.Common.AI)","k":"Architecture Decision Records","t":"Context","x":"Rubric section 16, AI-Native Application Architecture, asks one question of a product feature that calls a language model: is that dependency governed like any other external…"},"1091":{"u":"/docs/adr/120-governed-chat-client-boundary.html#decision","d":"ADR-120: Governed Language-Model Boundary (MMCA.Common.AI)","k":"Architecture Decision Records","t":"Decision","x":"The framework owns the language-model boundary as one optional package, MMCA.Common.AI, that names no vendor. A provider arrives as an adapter package contributing one factory,…"},"1092":{"u":"/docs/adr/120-governed-chat-client-boundary.html#rationale","d":"ADR-120: Governed Language-Model Boundary (MMCA.Common.AI)","k":"Architecture Decision Records","t":"Rationale","x":"- These rules belong to the call, not to the feature. An output ceiling, a timeout, a tool gate and a token counter are true of every model call anybody will ever write here.…"},"1093":{"u":"/docs/adr/120-governed-chat-client-boundary.html#trade-offs","d":"ADR-120: Governed Language-Model Boundary (MMCA.Common.AI)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Off by absence puts a null on the consumer. Because nothing is registered when Ai:Enabled is false, a feature resolves the client with GetService and holds a nullable…"},"1094":{"u":"/docs/adr/120-governed-chat-client-boundary.html#consequences","d":"ADR-120: Governed Language-Model Boundary (MMCA.Common.AI)","k":"Architecture Decision Records","t":"Consequences","x":"- ADC's SessionScoringService runs on IChatClient (SessionScoringService.cs:46-49). The port IAiScoringService stays, PromptVersion stays and keeps being persisted with every…"},"1095":{"u":"/docs/adr/120-governed-chat-client-boundary.html#revision-2026-10-01","d":"ADR-120: Governed Language-Model Boundary (MMCA.Common.AI)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; the current-state sections now match the code. ADC adopted the package fully: the host calls AddAnthropicAiProvider()…"},"1096":{"u":"/docs/adr/120-governed-chat-client-boundary.html#related","d":"ADR-120: Governed Language-Model Boundary (MMCA.Common.AI)","k":"Architecture Decision Records","t":"Related","x":"ADR-111 (the record this one extends: every scoring-specific rule, the prompt-change protocol, the golden and live evaluation tiers, the input and output guardrails and the…"},"1097":{"u":"/docs/adr/121-ephemeral-in-process-work-queue.html","d":"ADR-121: Ephemeral In-Process Work Queue (Bounded Channel plus Hosted Drain)","k":"Architecture Decision Records"},"1098":{"u":"/docs/adr/121-ephemeral-in-process-work-queue.html#status","d":"ADR-121: Ephemeral In-Process Work Queue (Bounded Channel plus Hosted Drain)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-11). Supersedes ADR-052."},"1099":{"u":"/docs/adr/121-ephemeral-in-process-work-queue.html#context","d":"ADR-121: Ephemeral In-Process Work Queue (Bounded Channel plus Hosted Drain)","k":"Architecture Decision Records","t":"Context","x":"ADR-052 ran two different kinds of work through one mechanism: ephemeral broadcasts that must not put a gRPC round trip on the hot path of a vote, and an AI scoring pass that…"},"1100":{"u":"/docs/adr/121-ephemeral-in-process-work-queue.html#decision","d":"ADR-121: Ephemeral In-Process Work Queue (Bounded Channel plus Hosted Drain)","k":"Architecture Decision Records","t":"Decision","x":"Ephemeral in-process work runs as a bounded channel plus a single-reader hosted drain. Nothing starts an untracked Task from a request, and nothing that must run lands here. - A…"},"1101":{"u":"/docs/adr/121-ephemeral-in-process-work-queue.html#rationale","d":"ADR-121: Ephemeral In-Process Work Queue (Bounded Channel plus Hosted Drain)","k":"Architecture Decision Records","t":"Rationale","x":"- The host lifetime is the point. A BackgroundService is the only in-process shape the host can cancel and await. Everything else in the decision follows from wanting that, and a…"},"1102":{"u":"/docs/adr/121-ephemeral-in-process-work-queue.html#trade-offs","d":"ADR-121: Ephemeral In-Process Work Queue (Bounded Channel plus Hosted Drain)","k":"Architecture Decision Records","t":"Trade-offs","x":"- In-process only. The queue does not survive a restart and does not span replicas. Accepted because every job left here is ephemeral by definition. Work that must survive a…"},"1103":{"u":"/docs/adr/121-ephemeral-in-process-work-queue.html#revision-2026-10-01","d":"ADR-121: Ephemeral In-Process Work Queue (Bounded Channel plus Hosted Drain)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Two Context and Related statements are corrected: the scoring trigger no longer answers 202 Accepted unconditionally, because a…"},"1104":{"u":"/docs/adr/121-ephemeral-in-process-work-queue.html#related","d":"ADR-121: Ephemeral In-Process Work Queue (Bounded Channel plus Hosted Drain)","k":"Architecture Decision Records","t":"Related","x":"ADR-114 (the durable, leased, retrying queue that owns expensive and must-run work), ADR-108 (the cross-replica claim that replaced this record's per-replica dedup), ADR-039…"},"1105":{"u":"/docs/adr/122-dev-only-relaxations-fail-closed.html","d":"ADR-122: Dev-Only Relaxations Are Environment-Gated and Fail Closed","k":"Architecture Decision Records"},"1106":{"u":"/docs/adr/122-dev-only-relaxations-fail-closed.html#status","d":"ADR-122: Dev-Only Relaxations Are Environment-Gated and Fail Closed","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-11)."},"1107":{"u":"/docs/adr/122-dev-only-relaxations-fail-closed.html#context","d":"ADR-122: Dev-Only Relaxations Are Environment-Gated and Fail Closed","k":"Architecture Decision Records","t":"Context","x":"Several capabilities are useful locally and dangerous in a deployed environment: EF Core rendering parameter values into logs and exception messages, an SMTP session that skips…"},"1108":{"u":"/docs/adr/122-dev-only-relaxations-fail-closed.html#decision","d":"ADR-122: Dev-Only Relaxations Are Environment-Gated and Fail Closed","k":"Architecture Decision Records","t":"Decision","x":"A relaxation applies only when the environment is positively identified as Development. An unknown, absent, or unparseable environment yields the production posture. Three…"},"1109":{"u":"/docs/adr/122-dev-only-relaxations-fail-closed.html#rationale","d":"ADR-122: Dev-Only Relaxations Are Environment-Gated and Fail Closed","k":"Architecture Decision Records","t":"Rationale","x":"- Unknown is not safe. The failure this prevents is not a developer flipping a flag on purpose, it is a flag arriving somewhere nobody looked. Treating an absent environment as…"},"1110":{"u":"/docs/adr/122-dev-only-relaxations-fail-closed.html#trade-offs","d":"ADR-122: Dev-Only Relaxations Are Environment-Gated and Fail Closed","k":"Architecture Decision Records","t":"Trade-offs","x":"- ASPNETCOREENVIRONMENT is the trust root. A host that misreports itself as Development gets every relaxation at once. The rule concentrates the risk on one value instead of…"},"1111":{"u":"/docs/adr/122-dev-only-relaxations-fail-closed.html#revision-2026-10-01","d":"ADR-122: Dev-Only Relaxations Are Environment-Gated and Fail Closed","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Citations were re-anchored to the current source: the AI gate (DependencyInjection.cs:262-266, remarks :257-260), the RequireHttpsMetadata…"},"1112":{"u":"/docs/adr/122-dev-only-relaxations-fail-closed.html#related","d":"ADR-122: Dev-Only Relaxations Are Environment-Gated and Fail Closed","k":"Architecture Decision Records","t":"Related","x":"ADR-070 (binds and validates settings at startup; this record governs when a validated setting may be honored), ADR-023 (the HSTS and CSP posture relaxed here), ADR-082 (the two…"},"1113":{"u":"/docs/adr/123-speaker-session-assets.html","d":"ADR-123: Speaker-Published Session Materials","k":"Architecture Decision Records"},"1114":{"u":"/docs/adr/123-speaker-session-assets.html#status","d":"ADR-123: Speaker-Published Session Materials","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-12). Extends ADR-045 from images to documents: the framework gains a document content sniffer, a blob-name sanitizer and stored response headers, and ADC gains…"},"1115":{"u":"/docs/adr/123-speaker-session-assets.html#context","d":"ADR-123: Speaker-Published Session Materials","k":"Architecture Decision Records","t":"Context","x":"A speaker finishes a talk and forty people want the deck. Until now ADC's only answer was Session.ResourceLinks, a free-text field imported from Sessionize: the speaker types…"},"1116":{"u":"/docs/adr/123-speaker-session-assets.html#decision","d":"ADR-123: Speaker-Published Session Materials","k":"Architecture Decision Records","t":"Decision","x":"Session materials are a separate Conference aggregate, written by the session's own speakers or by an organizer, stored in a public-read container under an unguessable blob name,…"},"1117":{"u":"/docs/adr/123-speaker-session-assets.html#rationale","d":"ADR-123: Speaker-Published Session Materials","k":"Architecture Decision Records","t":"Rationale","x":"Four alternatives were weighed. A child collection on Session. The obvious DDD answer, and wrong for this entity. Session is imported from Sessionize and re-imported on every…"},"1118":{"u":"/docs/adr/123-speaker-session-assets.html#trade-offs","d":"ADR-123: Speaker-Published Session Materials","k":"Architecture Decision Records","t":"Trade-offs","x":"- The container is public-read, so a URL is a credential. Anyone holding a blob URL can fetch it, forever, with no session and no referrer check. That is accepted for the same…"},"1119":{"u":"/docs/adr/123-speaker-session-assets.html#revision-2026-10-01","d":"ADR-123: Speaker-Published Session Materials","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Two parts of the decision changed and the rest of the record was re-anchored. The options-carrying IFileStorageService.UploadAsync overload is no longer a default interface…"},"1120":{"u":"/docs/adr/123-speaker-session-assets.html#related","d":"ADR-123: Speaker-Published Session Materials","k":"Architecture Decision Records","t":"Related","x":"ADR-045 (the storage abstraction, the image path this record is the document sibling of, and the avatar-only scope statement this supersedes), ADR-114 (the durable queue the blob…"},"1121":{"u":"/docs/adr/124-blazor-circuit-ceiling-ui-edge.html","d":"ADR-124: The Server-Rendered UI Host Is Its Own Hardened Edge","k":"Architecture Decision Records"},"1122":{"u":"/docs/adr/124-blazor-circuit-ceiling-ui-edge.html#status","d":"ADR-124: The Server-Rendered UI Host Is Its Own Hardened Edge","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-19). Revised 2026-09-25 (the hardening kit is one framework copy in MMCA.Common.UI.Web/Hardening/, first shipped in v1.206.0, which both UI hosts consume; the…"},"1123":{"u":"/docs/adr/124-blazor-circuit-ceiling-ui-edge.html#context","d":"ADR-124: The Server-Rendered UI Host Is Its Own Hardened Edge","k":"Architecture Decision Records","t":"Context","x":"ADR-019 layers rate limiting, and ADR-088 makes the Gateway the layer that carries the outermost one. Both records describe traffic that arrives through the Gateway. The…"},"1124":{"u":"/docs/adr/124-blazor-circuit-ceiling-ui-edge.html#decision","d":"ADR-124: The Server-Rendered UI Host Is Its Own Hardened Edge","k":"Architecture Decision Records","t":"Decision","x":"The server-rendered UI host defends itself, in three layers bound from two configuration sections the host owns, in both ADC and Store, using one framework kit. - A ceiling on…"},"1125":{"u":"/docs/adr/124-blazor-circuit-ceiling-ui-edge.html#rationale","d":"ADR-124: The Server-Rendered UI Host Is Its Own Hardened Edge","k":"Architecture Decision Records","t":"Rationale","x":"- A separate origin is a separate edge. The Gateway cannot defend a hostname it never receives a request for, so the choice was between routing the UI through the Gateway and…"},"1126":{"u":"/docs/adr/124-blazor-circuit-ceiling-ui-edge.html#trade-offs","d":"ADR-124: The Server-Rendered UI Host Is Its Own Hardened Edge","k":"Architecture Decision Records","t":"Trade-offs","x":"- Both ceilings are per replica, in memory. The effective allowance is the configured number multiplied by the replica count (two at most for ADC's UI today), so two replicas…"},"1127":{"u":"/docs/adr/124-blazor-circuit-ceiling-ui-edge.html#revision-2026-09-25-one-framework-kit-one-forwarded-header-posture","d":"ADR-124: The Server-Rendered UI Host Is Its Own Hardened Edge","k":"Architecture Decision Records","t":"Revision (2026-09-25): one framework kit, one forwarded-header posture","x":"The hardening kit this record decides now lives once, in MMCA.Common.UI.Web/Hardening/, first shipped in v1.206.0 (MMCA.Common/CHANGELOG.md:270-282). ADC and Store each import it…"},"1128":{"u":"/docs/adr/124-blazor-circuit-ceiling-ui-edge.html#revision-2026-10-01-the-circuit-transport-and-the-circuit-count","d":"ADR-124: The Server-Rendered UI Host Is Its Own Hardened Edge","k":"Architecture Decision Records","t":"Revision (2026-10-01): the circuit transport and the circuit count","x":"Two behaviours of the kit changed in v1.213.0 (MMCA.Common/CHANGELOG.md:82,145,148), and the Decision above now states both. First, the chained limiter no longer applies the…"},"1129":{"u":"/docs/adr/124-blazor-circuit-ceiling-ui-edge.html#related","d":"ADR-124: The Server-Rendered UI Host Is Its Own Hardened Edge","k":"Architecture Decision Records","t":"Related","x":"ADR-019 (the layered rate-limiting posture this adds a layer to), ADR-088 (the Gateway edge whose limiter this host is outside of, and which the registration comments name…"},"1130":{"u":"/docs/adr/125-parameterized-sql-only.html","d":"ADR-125: Parameterized SQL Only, Enforced by a Fitness Gate","k":"Architecture Decision Records"},"1131":{"u":"/docs/adr/125-parameterized-sql-only.html#status","d":"ADR-125: Parameterized SQL Only, Enforced by a Fitness Gate","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-19)."},"1132":{"u":"/docs/adr/125-parameterized-sql-only.html#context","d":"ADR-125: Parameterized SQL Only, Enforced by a Fitness Gate","k":"Architecture Decision Records","t":"Context","x":"The supported way to read data is the repository plus specification contract (ADR-055), and LINQ answers almost everything. It does not answer a window function, a recursive CTE…"},"1133":{"u":"/docs/adr/125-parameterized-sql-only.html#decision","d":"ADR-125: Parameterized SQL Only, Enforced by a Fitness Gate","k":"Architecture Decision Records","t":"Decision","x":"Give raw SQL exactly one door whose signature makes the unsafe call uncompilable, and ban the four raw EF members in module code with a fitness test rather than a guideline. -…"},"1134":{"u":"/docs/adr/125-parameterized-sql-only.html#rationale","d":"ADR-125: Parameterized SQL Only, Enforced by a Fitness Gate","k":"Architecture Decision Records","t":"Rationale","x":"- A signature outranks a guideline. Both halves of this decision aim at the same thing from different directions: the contract removes the unsafe call from the type system, and…"},"1135":{"u":"/docs/adr/125-parameterized-sql-only.html#trade-offs","d":"ADR-125: Parameterized SQL Only, Enforced by a Fitness Gate","k":"Architecture Decision Records","t":"Trade-offs","x":"- FormattableString blocks the accident, not the intent. FormattableStringFactory.Create builds a FormattableString out of an already-concatenated string with no interpolation…"},"1136":{"u":"/docs/adr/125-parameterized-sql-only.html#revision-2026-10-01","d":"ADR-125: Parameterized SQL Only, Enforced by a Fitness Gate","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Citations refreshed: the CHANGELOG anchors (MMCA.Common/CHANGELOG.md:1038, :1108-1117, :1118-1121, :1153-1159), the executor registration…"},"1137":{"u":"/docs/adr/125-parameterized-sql-only.html#related","d":"ADR-125: Parameterized SQL Only, Enforced by a Fitness Gate","k":"Architecture Decision Records","t":"Related","x":"ADR-055 (the repository plus specification path this escape hatch sits beside, and the reason the hatch stays narrow), ADR-015 (the fitness-function style this rule is written…"},"1138":{"u":"/docs/adr/126-event-sourcing-not-adopted.html","d":"ADR-126: Event Sourcing Is Not Adopted","k":"Architecture Decision Records"},"1139":{"u":"/docs/adr/126-event-sourcing-not-adopted.html#status","d":"ADR-126: Event Sourcing Is Not Adopted","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-22) as a documented rejection. Nothing ships with this record: no event store, no stream table, no projection host, no new package. What ships is the reason…"},"1140":{"u":"/docs/adr/126-event-sourcing-not-adopted.html#context","d":"ADR-126: Event Sourcing Is Not Adopted","k":"Architecture Decision Records","t":"Context","x":"Event sourcing keeps an append-only log of the facts that happened to an aggregate and treats that log as the system of record. Current state becomes a fold over the log, a…"},"1141":{"u":"/docs/adr/126-event-sourcing-not-adopted.html#decision","d":"ADR-126: Event Sourcing Is Not Adopted","k":"Architecture Decision Records","t":"Decision","x":"Do not adopt event sourcing. Aggregates stay current-state EF rows that raise domain events for notification, carry audit fields, and soft-delete. No repository gains an event…"},"1142":{"u":"/docs/adr/126-event-sourcing-not-adopted.html#rationale","d":"ADR-126: Event Sourcing Is Not Adopted","k":"Architecture Decision Records","t":"Rationale","x":"- No workload asks the question event sourcing answers. Neither ADC nor MMCA.Store has an aggregate that needs replayable per-aggregate history or a \"state as of\" query.…"},"1143":{"u":"/docs/adr/126-event-sourcing-not-adopted.html#trade-offs","d":"ADR-126: Event Sourcing Is Not Adopted","k":"Architecture Decision Records","t":"Trade-offs","x":"- A late adoption costs more than an early one. The module that eventually needs a stream converts an aggregate that already has production data, deployed migrations and reads…"},"1144":{"u":"/docs/adr/126-event-sourcing-not-adopted.html#alternatives-rejected","d":"ADR-126: Event Sourcing Is Not Adopted","k":"Architecture Decision Records","t":"Alternatives rejected","x":"- Marten on PostgreSQL, weighed 2026-09-22 and rejected. Marten is the credible .NET event store and the specific option this record weighed. It was dropped on two grounds rather…"},"1145":{"u":"/docs/adr/126-event-sourcing-not-adopted.html#when-to-revisit","d":"ADR-126: Event Sourcing Is Not Adopted","k":"Architecture Decision Records","t":"When to revisit","x":"Revisit when an aggregate acquires a business requirement for full replayable history or temporal queries: a financial ledger whose every movement must be reconstructible, or a…"},"1146":{"u":"/docs/adr/126-event-sourcing-not-adopted.html#revision-2026-10-01","d":"ADR-126: Event Sourcing Is Not Adopted","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Two citations were re-anchored: the soft-delete global query filter now points at ApplySoftDeleteFilters…"},"1147":{"u":"/docs/adr/126-event-sourcing-not-adopted.html#related","d":"ADR-126: Event Sourcing Is Not Adopted","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (at-least-once delivery of domain events, the mechanism a per-aggregate event log would duplicate rather than replace), ADR-021 (the consume-edge inbox that makes…"},"1148":{"u":"/docs/adr/127-actor-model-not-adopted.html","d":"ADR-127: The Actor Model Is Not Adopted","k":"Architecture Decision Records"},"1149":{"u":"/docs/adr/127-actor-model-not-adopted.html#status","d":"ADR-127: The Actor Model Is Not Adopted","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-22) as a documented rejection. Nothing ships with this record: no grain interface, no silo, no placement configuration, no new package. What ships is the reason…"},"1150":{"u":"/docs/adr/127-actor-model-not-adopted.html#context","d":"ADR-127: The Actor Model Is Not Adopted","k":"Architecture Decision Records","t":"Context","x":"The actor model gives every logical entity its own single-threaded unit of execution holding its state in memory and serializes all messages to that entity through it; a…"},"1151":{"u":"/docs/adr/127-actor-model-not-adopted.html#decision","d":"ADR-127: The Actor Model Is Not Adopted","k":"Architecture Decision Records","t":"Decision","x":"Do not adopt the actor model, and do not introduce an actor runtime as a hosting layer. Per-entity state stays in the owning module's database behind optimistic concurrency, read…"},"1152":{"u":"/docs/adr/127-actor-model-not-adopted.html#rationale","d":"ADR-127: The Actor Model Is Not Adopted","k":"Architecture Decision Records","t":"Rationale","x":"- No workload has the shape. Actors earn their cost on high-cardinality per-entity in-memory state with single-writer semantics, and nothing here has all three: entity counts are…"},"1153":{"u":"/docs/adr/127-actor-model-not-adopted.html#trade-offs","d":"ADR-127: The Actor Model Is Not Adopted","k":"Architecture Decision Records","t":"Trade-offs","x":"- A genuinely actor-shaped workload will arrive without groundwork, and the first adoption pays the learning cost under whatever deadline produced the requirement. - Some…"},"1154":{"u":"/docs/adr/127-actor-model-not-adopted.html#alternatives-rejected","d":"ADR-127: The Actor Model Is Not Adopted","k":"Architecture Decision Records","t":"Alternatives rejected","x":"- Microsoft Orleans hosted under Aspire, weighed 2026-09-22 and rejected. Orleans is the .NET virtual-actor runtime and the option this record weighed. Aspire already composes…"},"1155":{"u":"/docs/adr/127-actor-model-not-adopted.html#when-to-revisit","d":"ADR-127: The Actor Model Is Not Adopted","k":"Architecture Decision Records","t":"When to revisit","x":"Revisit when a real-time per-entity state workload appears that optimistic concurrency plus Redis cannot carry: an entity mutated by enough concurrent callers that the…"},"1156":{"u":"/docs/adr/127-actor-model-not-adopted.html#revision-2026-10-01","d":"ADR-127: The Actor Model Is Not Adopted","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Citations refreshed: the vote handler's class declaration (CastVoteHandler.cs:20) and its poll repository call (:33), OnModelCreating…"},"1157":{"u":"/docs/adr/127-actor-model-not-adopted.html#related","d":"ADR-127: The Actor Model Is Not Adopted","k":"Architecture Decision Records","t":"Related","x":"ADR-007, ADR-008 and ADR-059 (the boundary a future silo would live behind), ADR-026 and ADR-077 (the caching tiers that absorb the read pressure, and the in-process residency…"},"1158":{"u":"/docs/adr/128-time-as-an-input.html","d":"ADR-128: Time as an Input (No Ambient Clock Reads in Domain and Application)","k":"Architecture Decision Records"},"1159":{"u":"/docs/adr/128-time-as-an-input.html#status","d":"ADR-128: Time as an Input (No Ambient Clock Reads in Domain and Application)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-10-01)."},"1160":{"u":"/docs/adr/128-time-as-an-input.html#context","d":"ADR-128: Time as an Input (No Ambient Clock Reads in Domain and Application)","k":"Architecture Decision Records","t":"Context","x":"Expiry windows, payment deadlines, discount windows, overdue checks and cutoffs are business rules, and every one of them branches on \"now\". When the rule reads DateTime.UtcNow…"},"1161":{"u":"/docs/adr/128-time-as-an-input.html#decision","d":"ADR-128: Time as an Input (No Ambient Clock Reads in Domain and Application)","k":"Architecture Decision Records","t":"Decision","x":"Domain and Application code takes time as an input and never reads the ambient clock. A handler injects TimeProvider and passes the instant into the domain method; an aggregate…"},"1162":{"u":"/docs/adr/128-time-as-an-input.html#rationale","d":"ADR-128: Time as an Input (No Ambient Clock Reads in Domain and Application)","k":"Architecture Decision Records","t":"Rationale","x":"- A test can only drive what it can supply. Passing the instant in makes every time-dependent branch a plain input, so an expiry, a cutoff or an overdue state is one argument…"},"1163":{"u":"/docs/adr/128-time-as-an-input.html#trade-offs","d":"ADR-128: Time as an Input (No Ambient Clock Reads in Domain and Application)","k":"Architecture Decision Records","t":"Trade-offs","x":"- The rule bans five getters, not the idea of a clock. A read through any other path (a static TimeProvider.System.GetUtcNow(), Environment.TickCount, Stopwatch) is not matched…"},"1164":{"u":"/docs/adr/128-time-as-an-input.html#related","d":"ADR-128: Time as an Input (No Ambient Clock Reads in Domain and Application)","k":"Architecture Decision Records","t":"Related","x":"ADR-015 (the fitness-function style and the shared TestsBase package this rule is shipped in), ADR-125 (the precedent for a fitness-gated convention with its own record and an…"},"1165":{"u":"/docs/adr/129-tactical-aggregate-contract.html","d":"ADR-129: The Tactical Aggregate Contract","k":"Architecture Decision Records"},"1166":{"u":"/docs/adr/129-tactical-aggregate-contract.html#status","d":"ADR-129: The Tactical Aggregate Contract","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-10-01)."},"1167":{"u":"/docs/adr/129-tactical-aggregate-contract.html#context","d":"ADR-129: The Tactical Aggregate Contract","k":"Architecture Decision Records","t":"Context","x":"Every entity in the four repos is written the same way: a sealed class over a framework base, a private constructor, a static Create(...) returning Result , private setters,…"},"1168":{"u":"/docs/adr/129-tactical-aggregate-contract.html#decision","d":"ADR-129: The Tactical Aggregate Contract","k":"Architecture Decision Records","t":"Decision","x":"Entities follow one tactical contract. The construction, encapsulation and placement parts are fitness-gated by EntityConventionTestsBase; the child-access part and the use of…"},"1169":{"u":"/docs/adr/129-tactical-aggregate-contract.html#rationale","d":"ADR-129: The Tactical Aggregate Contract","k":"Architecture Decision Records","t":"Rationale","x":"- One contract, one record. The pieces were each correct in their own ADR, but an agent writing a new entity needs the whole shape at once, and a reviewer needs to know which…"},"1170":{"u":"/docs/adr/129-tactical-aggregate-contract.html#trade-offs","d":"ADR-129: The Tactical Aggregate Contract","k":"Architecture Decision Records","t":"Trade-offs","x":"- Part of the contract is not enforced. Child access through GetChildOrNotFound, SetItems and the remove, restore and cascade-delete helpers, the existence of an Invariants class…"},"1171":{"u":"/docs/adr/129-tactical-aggregate-contract.html#related","d":"ADR-129: The Tactical Aggregate Contract","k":"Architecture Decision Records","t":"Related","x":"ADR-013 (the Result factories this contract requires), ADR-068 (value-object factories and the static Invariants class this contract reuses for entities), ADR-126 (an aggregate…"},"1172":{"u":"/docs/adr/130-per-engine-data-source-strategy.html","d":"ADR-130: Per-Engine Data Source Strategy (Engine Facts Instead of Branching on the Enum)","k":"Architecture Decision Records"},"1173":{"u":"/docs/adr/130-per-engine-data-source-strategy.html#status","d":"ADR-130: Per-Engine Data Source Strategy (Engine Facts Instead of Branching on the Enum)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-10-01). Targeted at MMCA.Common v1.218.0, which is unreleased at the time of writing (the CHANGELOG carries no entry for it yet). Refines ADR-018 (engine as a…"},"1174":{"u":"/docs/adr/130-per-engine-data-source-strategy.html#context","d":"ADR-130: Per-Engine Data Source Strategy (Engine Facts Instead of Branching on the Enum)","k":"Architecture Decision Records","t":"Context","x":"MMCA.Common persists through four engines named by one shipped public enum, DataSource…"},"1175":{"u":"/docs/adr/130-per-engine-data-source-strategy.html#decision","d":"ADR-130: Per-Engine Data Source Strategy (Engine Facts Instead of Branching on the Enum)","k":"Architecture Decision Records","t":"Decision","x":"One internal strategy object per engine answers every engine question, looked up through a static registry keyed by the shipped enum. Call sites read engine facts; they no longer…"},"1176":{"u":"/docs/adr/130-per-engine-data-source-strategy.html#rationale","d":"ADR-130: Per-Engine Data Source Strategy (Engine Facts Instead of Branching on the Enum)","k":"Architecture Decision Records","t":"Rationale","x":"- One place per engine. An engine's behavior is now one class, and a fifth engine is one class plus one registry line (DataSourceEngines.cs:15-16); a missed branch can no longer…"},"1177":{"u":"/docs/adr/130-per-engine-data-source-strategy.html#trade-offs","d":"ADR-130: Per-Engine Data Source Strategy (Engine Facts Instead of Branching on the Enum)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Breaking for consumers. The RequestIdentityInsert rename has no alias (IUnitOfWork.cs:45); a Cosmos-default host that injects IRawSqlQueryExecutor now fails at startup…"},"1178":{"u":"/docs/adr/130-per-engine-data-source-strategy.html#alternatives-rejected","d":"ADR-130: Per-Engine Data Source Strategy (Engine Facts Instead of Branching on the Enum)","k":"Architecture Decision Records","t":"Alternatives rejected","x":"- Engines registered in DI (weighed 2026-10-01). Engines as IDataSourceEngine services resolved from the container. Rejected because the conventions, EntityTypeConfiguration and…"},"1179":{"u":"/docs/adr/130-per-engine-data-source-strategy.html#consequences","d":"ADR-130: Per-Engine Data Source Strategy (Engine Facts Instead of Branching on the Enum)","k":"Architecture Decision Records","t":"Consequences","x":"- Consumer upgrade. Rename RequestIdentityInsert calls to RequestExplicitKeyInsert; on a Cosmos-default host, remove any IRawSqlQueryExecutor dependency; on SQLite with…"},"1180":{"u":"/docs/adr/130-per-engine-data-source-strategy.html#related","d":"ADR-130: Per-Engine Data Source Strategy (Engine Facts Instead of Branching on the Enum)","k":"Architecture Decision Records","t":"Related","x":"ADR-006 (one sealed context per engine), ADR-018 (engines behind one model and the resolver), ADR-113 (the fourth engine), ADR-030 (the startup migrator that reads Migrations),…"},"1181":{"u":"/docs/adr/131-same-origin-api-proxy.html","d":"ADR-131: Same-Origin API Proxy (a Backend-for-Frontend That Keeps Tokens Out of Browser Script)","k":"Architecture Decision Records"},"1182":{"u":"/docs/adr/131-same-origin-api-proxy.html#status","d":"ADR-131: Same-Origin API Proxy (a Backend-for-Frontend That Keeps Tokens Out of Browser Script)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-10-01). Targeted at MMCA.Common v1.218.0, which is unreleased at the time of writing. Records the owner's TD-08 decision for Option A of the token-storage design…"},"1183":{"u":"/docs/adr/131-same-origin-api-proxy.html#context","d":"ADR-131: Same-Origin API Proxy (a Backend-for-Frontend That Keeps Tokens Out of Browser Script)","k":"Architecture Decision Records","t":"Context","x":"A Blazor WebAssembly client calls the API through the gateway, which is a different origin from the UI host, so the HttpOnly session cookies the UI host writes (ADR-022) never…"},"1184":{"u":"/docs/adr/131-same-origin-api-proxy.html#decision","d":"ADR-131: Same-Origin API Proxy (a Backend-for-Frontend That Keeps Tokens Out of Browser Script)","k":"Architecture Decision Records","t":"Decision","x":"The UI host serves the API on its own origin and forwards to the gateway server-side, attaching the bearer it reads from the HttpOnly cookie. The browser never holds a token that…"},"1185":{"u":"/docs/adr/131-same-origin-api-proxy.html#rationale","d":"ADR-131: Same-Origin API Proxy (a Backend-for-Frontend That Keeps Tokens Out of Browser Script)","k":"Architecture Decision Records","t":"Rationale","x":"- Tokens out of script, with no infrastructure prerequisite. An injected script can still call the API as the user while the page is open, but it cannot carry a token away: the…"},"1186":{"u":"/docs/adr/131-same-origin-api-proxy.html#trade-offs","d":"ADR-131: Same-Origin API Proxy (a Backend-for-Frontend That Keeps Tokens Out of Browser Script)","k":"Architecture Decision Records","t":"Trade-offs","x":"- One extra hop. Every browser API call and every hub frame passes through the UI host before the gateway (SameOriginApiProxyEndpoint.cs:315-319). - The UI host becomes a…"},"1187":{"u":"/docs/adr/131-same-origin-api-proxy.html#alternatives-rejected","d":"ADR-131: Same-Origin API Proxy (a Backend-for-Frontend That Keeps Tokens Out of Browser Script)","k":"Architecture Decision Records","t":"Alternatives rejected","x":"- Option B: a same-site cookie sent straight to the API (weighed 2026-10-01). Rejected because it needs UI and gateway under one registrable domain in every environment (DNS,…"},"1188":{"u":"/docs/adr/131-same-origin-api-proxy.html#consequences","d":"ADR-131: Same-Origin API Proxy (a Backend-for-Frontend That Keeps Tokens Out of Browser Script)","k":"Architecture Decision Records","t":"Consequences","x":"- Adoption, per Blazor Web host. Register after the session-cookie and token registrations, map next to the session-cookie endpoints after UseAuthorization, configure the section…"},"1189":{"u":"/docs/adr/131-same-origin-api-proxy.html#related","d":"ADR-131: Same-Origin API Proxy (a Backend-for-Frontend That Keeps Tokens Out of Browser Script)","k":"Architecture Decision Records","t":"Related","x":"ADR-022 (the HttpOnly session cookie the proxy reads), ADR-051 (client token lifecycle across render modes), ADR-023 (security headers and the CSP), ADR-082 (the gateway CORS…"},"1190":{"u":"/docs/onboarding/index.html","d":"MMCA.Common + MMCA.ADC, Onboarding Guide","k":"Onboarding Guide","x":"A teaching guide for an experienced .NET engineer who is new to this codebase. It walks every first-party type, explaining not just what each type is but how it works and why it…"},"1191":{"u":"/docs/onboarding/index.html#how-the-guide-is-organized-two-axes","d":"MMCA.Common + MMCA.ADC, Onboarding Guide","k":"Onboarding Guide","t":"How the guide is organized, two axes","x":"The guide has two organizing axes that work together. 1. Primary axis, functional grouping. Every type lives in exactly one functional group: the capability or cross-cutting…"},"1192":{"u":"/docs/onboarding/index.html#chapters","d":"MMCA.Common + MMCA.ADC, Onboarding Guide","k":"Onboarding Guide","t":"Chapters","x":"---"},"1193":{"u":"/docs/onboarding/index.html#legend-how-to-read-a-type-section","d":"MMCA.Common + MMCA.ADC, Onboarding Guide","k":"Onboarding Guide","t":"Legend, how to read a type section","x":"Every type gets one section using this template: {TypeName} {Assembly} · {namespace} · {file:line} · Level {n} · {kind} - What it is: one or two plain-language sentences. -…"},"1194":{"u":"/docs/onboarding/index.html#suggested-reading-paths","d":"MMCA.Common + MMCA.ADC, Onboarding Guide","k":"Onboarding Guide","t":"Suggested reading paths","x":"- Framework-first (recommended). Primer → group-01 → upward. You meet the MMCA.Common foundations before the MMCA.ADC features that build on them; this matches dependency order…"},"1195":{"u":"/docs/onboarding/index.html#the-companion-projects-context","d":"MMCA.Common + MMCA.ADC, Onboarding Guide","k":"Onboarding Guide","t":"The companion projects (context)","x":"This guide covers MMCA.Common (the framework) and MMCA.ADC (one consumer). MMCA.Store is out of scope. The dependency arrow is why the Common framework groups (1–16) come before…"},"1196":{"u":"/docs/onboarding/00-dependency-manifest.html","d":"Phase 1: Dependency Manifest & Leveling","k":"Onboarding Guide","x":"Each distinct type node is assigned a Level by longest-path layering over its first-party dependencies (base/interface, generic constraints, field/property/param/return types,…"},"1197":{"u":"/docs/onboarding/00-dependency-manifest.html#level-distribution","d":"Phase 1: Dependency Manifest & Leveling","k":"Onboarding Guide","t":"Level distribution"},"1198":{"u":"/docs/onboarding/00-dependency-manifest.html#cycles-scc-size--1-47","d":"Phase 1: Dependency Manifest & Leveling","k":"Onboarding Guide","t":"Cycles (SCC size > 1): 47"},"1199":{"u":"/docs/onboarding/00-dependency-manifest.html#manifest-by-level-then-assembly","d":"Phase 1: Dependency Manifest & Leveling","k":"Onboarding Guide","t":"Manifest (by level, then assembly)"},"1200":{"u":"/docs/onboarding/00-group-taxonomy.html","d":"Phase 1b - Functional Group Taxonomy","k":"Onboarding Guide","x":"This is the primary axis of the guide. Every one of the 5,234 distinct first-party type nodes from 00-inventory.md is assigned to exactly one functional group - its primary home:…"},"1201":{"u":"/docs/onboarding/00-group-taxonomy.html#design-notes-boundary-decisions-worth-stating-up-front","d":"Phase 1b - Functional Group Taxonomy","k":"Onboarding Guide","t":"Design notes (boundary decisions worth stating up front)","x":"- Cycles are kept whole. The 13 dependency cycles (SCCs) from the manifest are never split across groups. Notably the ApplicationDbContext AuditSaveChangesInterceptor…"},"1202":{"u":"/docs/onboarding/00-group-taxonomy.html#the-groups-ordered","d":"Phase 1b - Functional Group Taxonomy","k":"Onboarding Guide","t":"The groups (ordered)","x":"Reconciliation: 2311 production types across 27 groups + 2923 test/testing types in G25 = 5234 (matches the inventory's distinct-node count). No type appears twice; none dropped.…"},"1203":{"u":"/docs/onboarding/00-group-taxonomy.html#group-membership","d":"Phase 1b - Functional Group Taxonomy","k":"Onboarding Guide","t":"Group membership","x":"group-01-result-error-handling.md 16 types The Result/Error railway that every operation returns instead of throwing; pagination result shapes. group-02-domain-building-blocks.md…"},"1204":{"u":"/docs/onboarding/00-inventory.html","d":"Phase 0: Type Inventory","k":"Onboarding Guide","x":"Generated mechanically by a Roslyn syntactic parse of every in-scope .cs file under MMCA.Common/Source, MMCA.Common/Tests, MMCA.ADC/Source, MMCA.ADC/Tests. - Files scanned: 4000…"},"1205":{"u":"/docs/onboarding/00-inventory.html#counts-by-kind","d":"Phase 0: Type Inventory","k":"Onboarding Guide","t":"Counts by kind"},"1206":{"u":"/docs/onboarding/00-inventory.html#counts-by-assembly-distinct-nodes","d":"Phase 0: Type Inventory","k":"Onboarding Guide","t":"Counts by assembly (distinct nodes)"},"1207":{"u":"/docs/onboarding/00-inventory.html#full-inventory","d":"Phase 0: Type Inventory","k":"Onboarding Guide","t":"Full inventory"},"1208":{"u":"/docs/onboarding/00-inventory.html#extensiont-blocks","d":"Phase 0: Type Inventory","k":"Onboarding Guide","t":"extension(T) blocks"},"1209":{"u":"/docs/onboarding/00-inventory.html#generated--excluded-artifacts-no-type-sections-written","d":"Phase 0: Type Inventory","k":"Onboarding Guide","t":"Generated / excluded artifacts (no type sections written)","x":"138 files excluded as generated (EF migrations, snapshots, .g.cs, AssemblyInfo)."},"1210":{"u":"/docs/onboarding/00-primer.html","d":"Primer, the concepts, stack, and conventions you need first","k":"Onboarding Guide","x":"This chapter teaches the cross-cutting things once, so the per-type chapters can stay focused. Read it before the group chapters (start with group-01). Everything here is either…"},"1211":{"u":"/docs/onboarding/00-primer.html#1-the-big-picture","d":"Primer, the concepts, stack, and conventions you need first","k":"Onboarding Guide","t":"1. The big picture","x":"Two codebases are in scope: - MMCA.Common: a framework, published as twenty-two NuGet packages (the count and list are owned by MMCA.Common/FACTS.md) to nuget.org (the documented…"},"1212":{"u":"/docs/onboarding/00-primer.html#2-architectural-styles-this-codebase-commits-to","d":"Primer, the concepts, stack, and conventions you need first","k":"Onboarding Guide","t":"2. Architectural styles this codebase commits to","x":"These are the recurring ideas. Each is taught fully at its first concrete appearance in a group chapter; here is the orientation so the vocabulary is familiar. - Domain-Driven…"},"1213":{"u":"/docs/onboarding/00-primer.html#3-the-external-stack-bcl--nuget-external-level-0","d":"Primer, the concepts, stack, and conventions you need first","k":"Onboarding Guide","t":"3. The external stack (BCL / NuGet, \"external Level 0\")","x":"These are not first-party and get no per-type sections. Versions are from MMCA.Common/Directory.Packages.props and MMCA.ADC/Directory.Packages.props (Central Package Management,…"},"1214":{"u":"/docs/onboarding/00-primer.html#4-c-build-and-code-style-conventions","d":"Primer, the concepts, stack, and conventions you need first","k":"Onboarding Guide","t":"4. C#, build, and code-style conventions","x":"- .NET 10.0, LangVersion: preview: required because the codebase uses C extension types (extension(T) syntax, see below). - Central Package Management (CPM). All NuGet versions…"},"1215":{"u":"/docs/onboarding/00-primer.html#5-the-solution--test-layout","d":"Primer, the concepts, stack, and conventions you need first","k":"Onboarding Guide","t":"5. The solution / test layout","x":"- .slnx: the human solution (XML format). .slnf, a solution filter used in CI to build a subset fast (MMCA.Store.CI.slnf, MMCA.ADC.CI.slnf). - Microsoft Testing Platform, not…"},"1216":{"u":"/docs/onboarding/00-primer.html#6-the-34-category-architecture-evaluation-lens","d":"Primer, the concepts, stack, and conventions you need first","k":"Onboarding Guide","t":"6. The 34-category architecture-evaluation lens","x":"This codebase is also scored against a 34-category rubric (Website/docs-src/governance/ArchitectureEvaluationCriteria.md, published at ). This guide weaves the rubric in so you…"},"1217":{"u":"/docs/onboarding/group-01-result-error-handling.html","d":"1. Result & Error Handling","k":"Onboarding Guide","x":"What this group covers. This is the first capability chapter, and it is deliberately first because the pattern it teaches underpins almost every other one in the guide. Before…"},"1218":{"u":"/docs/onboarding/group-01-result-error-handling.html#why-a-return-value-instead-of-an-exception","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"Why a return value instead of an exception","x":"Exceptions are expensive (stack capture and unwinding), they are invisible in a method's signature, and they conflate programmer errors with business outcomes. \"This order ID…"},"1219":{"u":"/docs/onboarding/group-01-result-error-handling.html#three-pieces-classification-carrier-envelope","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"Three pieces: classification, carrier, envelope","x":"ErrorType (MMCA.Common/Source/Core/MMCA.Common.Shared/Abstractions/ErrorType.cs:10) is the classification axis, a nine-member enum whose per-member doc comments name the HTTP…"},"1220":{"u":"/docs/onboarding/group-01-result-error-handling.html#the-railway-in-one-picture","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"The railway, in one picture","x":"\"Railway-oriented programming\" is the mental model: imagine two parallel tracks, a success track and a failure track. An operation that takes the current result as input is…"},"1221":{"u":"/docs/onboarding/group-01-result-error-handling.html#construction-discipline-and-the-invariant-it-buys","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"Construction discipline, and the invariant it buys","x":"You cannot new a Result directly: its constructors are internal (Result.cs:211, Result.cs:217), so the only way to produce one is through the static factory methods on the base…"},"1222":{"u":"/docs/onboarding/group-01-result-error-handling.html#severity-not-position-classifies-a-failure","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"Severity, not position, classifies a failure","x":"Result.Combine aggregates errors in evaluation order, so if a transport picked the first error to classify the whole failure, an incidental validation failure evaluated early…"},"1223":{"u":"/docs/onboarding/group-01-result-error-handling.html#making-a-result-survive-a-round-trip","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"Making a result survive a round trip","x":"The construction discipline above creates a problem the moment a result must be serialized: because Result 's constructors are internal and its properties are get-only,…"},"1224":{"u":"/docs/onboarding/group-01-result-error-handling.html#how-a-failure-becomes-an-http-response","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"How a failure becomes an HTTP response","x":"Follow a typical write through the layers. A domain factory or aggregate method validates its inputs and returns Result.Combine(...); a command handler in the application layer…"},"1225":{"u":"/docs/onboarding/group-01-result-error-handling.html#and-how-the-same-failure-crosses-a-service-boundary-or-reaches-the-browser","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"And how the same failure crosses a service boundary, or reaches the browser","x":"On the gRPC side, ResultGrpcExtensions carries a mirror of that table, ErrorType to Grpc.Core.StatusCode, in its own FrozenDictionary…"},"1226":{"u":"/docs/onboarding/group-01-result-error-handling.html#the-two-exceptions-and-why-they-exist-anyway","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"The two exceptions, and why they exist anyway","x":"A return-value pattern still needs a fallback for the places where you genuinely cannot return one. DomainException…"},"1227":{"u":"/docs/onboarding/group-01-result-error-handling.html#offset-paging-the-read-side-envelopes","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"Offset paging: the read-side envelopes","x":"The read side needs shapes of its own. A query that returns a list wraps it in CollectionResult , a thin [DataContract] record…"},"1228":{"u":"/docs/onboarding/group-01-result-error-handling.html#keyset-paging-the-same-envelope-family-a-different-cost-model","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"Keyset paging: the same envelope family, a different cost model","x":"Offset paging answers \"give me page 37\" and costs the database a scan of the 36 pages before it. KeysetPageRequest…"},"1229":{"u":"/docs/onboarding/group-01-result-error-handling.html#where-this-leads","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"Where this leads","x":"With these sixteen types you have the full error-and-result vocabulary the rest of the guide assumes. You will see Result returned by the domain building blocks of Chapter 2…"},"1230":{"u":"/docs/onboarding/group-02-domain-building-blocks.html","d":"2. Domain Building Blocks (Entities, Value Objects, Aggregates)","k":"Onboarding Guide","x":"What this group covers. This is the DDD heart of the framework, the small, dependency-light primitives every business model in MMCA.Common and MMCA.ADC is built from. There are…"},"1231":{"u":"/docs/onboarding/group-02-domain-building-blocks.html#the-entity-chain-one-capability-per-rung","d":"2. Domain Building Blocks (Entities, Value Objects, Aggregates)","k":"Onboarding Guide","t":"The entity chain, one capability per rung","x":"Read the chain bottom-up. BaseEntity (MMCA.Common/Source/Core/MMCA.Common.Domain/Entities/BaseEntity.cs:34) carries a single required init identifier of the per-entity alias…"},"1232":{"u":"/docs/onboarding/group-02-domain-building-blocks.html#three-opt-in-markers-beside-the-chain","d":"2. Domain Building Blocks (Entities, Value Objects, Aggregates)","k":"Onboarding Guide","t":"Three opt-in markers beside the chain","x":"Not every cross-cutting capability belongs on the inheritance chain, because not every entity should pay for it. ITenantEntity…"},"1233":{"u":"/docs/onboarding/group-02-domain-building-blocks.html#how-a-domain-event-leaves-an-aggregate","d":"2. Domain Building Blocks (Entities, Value Objects, Aggregates)","k":"Onboarding Guide","t":"How a domain event leaves an aggregate","x":"The runtime flow ties this group to the events/outbox group. A command handler loads an aggregate, calls a business method, and that method calls AddDomainEvent(...); the event…"},"1234":{"u":"/docs/onboarding/group-02-domain-building-blocks.html#value-objects-invalid-instances-cannot-exist","d":"2. Domain Building Blocks (Entities, Value Objects, Aggregates)","k":"Onboarding Guide","t":"Value objects, invalid instances cannot exist","x":"The second family models concepts with no identity: two Money(10, USD) are equal because their values match, not because they are the same row. ValueObject is the cheapest…"},"1235":{"u":"/docs/onboarding/group-02-domain-building-blocks.html#smart-enumerations-a-closed-set-that-can-carry-behavior","d":"2. Domain Building Blocks (Entities, Value Objects, Aggregates)","k":"Onboarding Guide","t":"Smart enumerations, a closed set that can carry behavior","x":"Enumeration (MMCA.Common/Source/Core/MMCA.Common.Shared/ValueObjects/Enumeration.cs:77) is the answer to a recurring shape a CLR enum handles badly: a closed set of named members…"},"1236":{"u":"/docs/onboarding/group-02-domain-building-blocks.html#governance-markers-metadata-that-other-layers-act-on","d":"2. Domain Building Blocks (Entities, Value Objects, Aggregates)","k":"Onboarding Guide","t":"Governance markers, metadata that other layers act on","x":"The last family is tiny attributes and helpers that carry intent the rest of the stack reads reflectively. PiiAttribute…"},"1237":{"u":"/docs/onboarding/group-02-domain-building-blocks.html#where-this-group-sits","d":"2. Domain Building Blocks (Entities, Value Objects, Aggregates)","k":"Onboarding Guide","t":"Where this group sits","x":"Everything above is consumed by the layers that follow: every module entity (for example the Conference domain, Engagement, and Identity modules) derives from one of the three…"},"1238":{"u":"/docs/onboarding/group-03-querying-specifications.html","d":"3. Querying: Specifications, Filtering & the Entity Query Service","k":"Onboarding Guide","x":"What this group covers. Every read in MMCA.Common and ADC (\"list the published events\", \"get session 42\", \"the speakers in Atlanta, page 3, sorted by name, with only the name and…"},"1239":{"u":"/docs/onboarding/group-03-querying-specifications.html#the-specification-pattern-the-trusted-predicate","d":"3. Querying: Specifications, Filtering & the Entity Query Service","k":"Onboarding Guide","t":"The Specification pattern, the trusted predicate","x":"ISpecification (MMCA.Common/Source/Core/MMCA.Common.Domain/Interfaces/ISpecification.cs:12) exposes two faces of one rule: a Criteria expression tree that EF Core translates to…"},"1240":{"u":"/docs/onboarding/group-03-querying-specifications.html#queryspecification-a-whole-read-in-one-object","d":"3. Querying: Specifications, Filtering & the Entity Query Service","k":"Onboarding Guide","t":"QuerySpecification, a whole read in one object","x":"A plain specification is only a predicate, which leaves includes, ordering, paging, and tracking to be threaded through every layer as loose arguments. QuerySpecification…"},"1241":{"u":"/docs/onboarding/group-03-querying-specifications.html#dynamic-filtering-one-strategy-per-clr-type","d":"3. Querying: Specifications, Filtering & the Entity Query Service","k":"Onboarding Guide","t":"Dynamic filtering, one Strategy per CLR type","x":"User filters arrive as a Dictionary , property name to operator key plus raw string value, parsed from the query string by QueryFilterModelBinder at the API edge, which caps a…"},"1242":{"u":"/docs/onboarding/group-03-querying-specifications.html#sorting-sparse-fieldsets-and-paging-arithmetic","d":"3. Querying: Specifications, Filtering & the Entity Query Service","k":"Onboarding Guide","t":"Sorting, sparse fieldsets, and paging arithmetic","x":"QueryFieldService (MMCA.Common/Source/Core/MMCA.Common.Application/Services/QueryFieldService.cs:16) owns the rest of read shaping. ApplySorting (QueryFieldService.cs:184, with a…"},"1243":{"u":"/docs/onboarding/group-03-querying-specifications.html#the-pipeline-two-entity-paths-plus-projection-pushdown","d":"3. Querying: Specifications, Filtering & the Entity Query Service","k":"Onboarding Guide","t":"The pipeline: two entity paths plus projection pushdown","x":"IEntityQueryPipeline (MMCA.Common/Source/Core/MMCA.Common.Application/Services/Query/IEntityQueryPipeline.cs:10) is the execution contract, implemented by the sealed…"},"1244":{"u":"/docs/onboarding/group-03-querying-specifications.html#the-query-service-the-public-face","d":"3. Querying: Specifications, Filtering & the Entity Query Service","k":"Onboarding Guide","t":"The query service, the public face","x":"IEntityQueryService (MMCA.Common/Source/Core/MMCA.Common.Application/Interfaces/Mapping/IEntityQueryService.cs:19) and its concrete EntityQueryService…"},"1245":{"u":"/docs/onboarding/group-03-querying-specifications.html#end-to-end-one-list-request","d":"3. Querying: Specifications, Filtering & the Entity Query Service","k":"Onboarding Guide","t":"End to end, one list request","x":"The request reaches a read controller, EntityControllerBase (Group 12), which resolves MaxPageSize per request from ApplicationSettings, falling back to 500 when unset…"},"1246":{"u":"/docs/onboarding/group-03-querying-specifications.html#query-tags-naming-the-use-case-behind-a-statement","d":"3. Querying: Specifications, Filtering & the Entity Query Service","k":"Onboarding Guide","t":"Query tags, naming the use case behind a statement","x":"Two types in the Services/Query folder serve the operator reading a query store rather than the read path itself. QueryTagScope…"},"1247":{"u":"/docs/onboarding/group-03-querying-specifications.html#also-filed-here-best-effort-dispatch-and-the-upcaster-registry","d":"3. Querying: Specifications, Filtering & the Entity Query Service","k":"Onboarding Guide","t":"Also filed here: best-effort dispatch and the upcaster registry","x":"Four types in this group are not part of the read path at all; they are co-located in MMCA.Common.Application/Services and are grouped by that folder. BestEffort…"},"1248":{"u":"/docs/onboarding/group-04-events-outbox.html","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","x":"What this chapter covers. This group is the codebase's event spine: how an aggregate says \"something happened\", how that fact is persisted so it cannot be lost, and how it…"},"1249":{"u":"/docs/onboarding/group-04-events-outbox.html#the-two-kinds-of-event","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","t":"The two kinds of event","x":"Everything starts with two marker interfaces in the Domain layer. IDomainEvent is the base contract: a DateOccurred timestamp (when the business action happened, not when it was…"},"1250":{"u":"/docs/onboarding/group-04-events-outbox.html#stored-identity-what-a-row-remembers-an-event-as","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","t":"Stored identity: what a row remembers an event as","x":"An event in memory is a CLR type; an event in a table is a string. Which string it is decides whether a row survives a refactoring, and EventNameResolver is the single cached…"},"1251":{"u":"/docs/onboarding/group-04-events-outbox.html#raising-and-capturing-where-the-outbox-is-written","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","t":"Raising and capturing: where the outbox is written","x":"Aggregates raise events by calling AddDomainEvent() (see AuditableAggregateRootEntity in G02), which simply buffers them on the entity. Nothing is dispatched yet; the events ride…"},"1252":{"u":"/docs/onboarding/group-04-events-outbox.html#the-routing-split-local-events-dispatch-in-process-integration-events-wait-for-the-bus","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","t":"The routing split: local events dispatch in-process, integration events wait for the bus","x":"Here is the detail that most people get wrong, and it is the heart of the design. After the transaction commits (SavedChanges), the interceptor does not treat all captured events…"},"1253":{"u":"/docs/onboarding/group-04-events-outbox.html#who-the-delivery-runs-as-the-captured-origin","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","t":"Who the delivery runs as: the captured origin","x":"A delivered event runs a poll cycle later, on another thread and possibly in another process, so without help it would run as an anonymous, tenant-less system call: a handler…"},"1254":{"u":"/docs/onboarding/group-04-events-outbox.html#the-safety-net-how-the-processor-schedules-itself","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","t":"The safety net: how the processor schedules itself","x":"The OutboxProcessor is a BackgroundService and the most intricate type in the group; most of its complexity is about not wasting work. It exists because the steps between commit…"},"1255":{"u":"/docs/onboarding/group-04-events-outbox.html#claiming-scale-out-and-ordered-delivery","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","t":"Claiming, scale-out, and ordered delivery","x":"Because a deployment may run more than one replica, each cycle claims its eligible prefix with a lease (LockedUntil plus LockToken,…"},"1256":{"u":"/docs/onboarding/group-04-events-outbox.html#failures-dead-letters-and-keeping-the-table-and-telemetry-bounded","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","t":"Failures, dead-letters, and keeping the table (and telemetry) bounded","x":"Delivery failures split into outcomes worth keeping straight. A transient failure (a handler or broker publish throwing) increments the row's RetryCount, records LastError, and…"},"1257":{"u":"/docs/onboarding/group-04-events-outbox.html#the-pluggable-transport-and-the-posture-flags-that-decide-it","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","t":"The pluggable transport, and the posture flags that decide it","x":"Here is the boundary that makes a module extractable without rewriting its handlers. Application code that wants to publish an integration event depends on IEventBus (or on the…"},"1258":{"u":"/docs/onboarding/group-04-events-outbox.html#consuming-from-the-broker-the-inbox-and-the-generic-consumer","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","t":"Consuming from the broker: the inbox and the generic consumer","x":"On the receiving side of a broker hop, application code keeps writing plain IIntegrationEventHandler implementations; there is no MassTransit-specific consumer class to author…"},"1259":{"u":"/docs/onboarding/group-04-events-outbox.html#putting-it-together-one-events-life","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","t":"Putting it together, one event's life","x":"To see the whole spine at once, follow a single integration event from a producer service to a consumer service in broker mode. (1) A command mutates an aggregate, which raises…"},"1260":{"u":"/docs/onboarding/group-05-cqrs-pipeline.html","d":"5. CQRS: Commands, Queries & the Decorator Pipeline","k":"Onboarding Guide","x":"What this group covers. Every write and every read in an MMCA application is a use case: a small, single-purpose object (a command or a query) handed to a handler that does…"},"1261":{"u":"/docs/onboarding/group-05-cqrs-pipeline.html#the-shape-thin-handlers-fat-pipeline","d":"5. CQRS: Commands, Queries & the Decorator Pipeline","k":"Onboarding Guide","t":"The shape: thin handlers, fat pipeline","x":"A handler is deliberately tiny. ICommandHandler (MMCA.Common/Source/Core/MMCA.Common.Application/UseCases/Contracts/ICommandHandler.cs:9) and IQueryHandler…"},"1262":{"u":"/docs/onboarding/group-05-cqrs-pipeline.html#how-the-pipeline-is-assembled-scrutor-registration-versus-execution-order","d":"5. CQRS: Commands, Queries & the Decorator Pipeline","k":"Onboarding Guide","t":"How the pipeline is assembled (Scrutor, registration versus execution order)","x":"The wiring lives in the partial DependencyInjection class (MMCA.Common/Source/Core/MMCA.Common.Application/DependencyInjection.cs:24, with the module scan in…"},"1263":{"u":"/docs/onboarding/group-05-cqrs-pipeline.html#why-this-exact-order-and-what-each-layer-guards","d":"5. CQRS: Commands, Queries & the Decorator Pipeline","k":"Onboarding Guide","t":"Why this exact order, and what each layer guards","x":"The nesting order is a deliberate cost-and-correctness argument, spelled out in the registration XML-doc (DependencyInjection.cs:87-109): - Feature-gating is outermost so a…"},"1264":{"u":"/docs/onboarding/group-05-cqrs-pipeline.html#opt-in-by-marker-interface-pay-only-for-what-you-use","d":"5. CQRS: Commands, Queries & the Decorator Pipeline","k":"Onboarding Guide","t":"Opt-in by marker interface, pay only for what you use","x":"The pipeline is registered for every handler, but most decorators are dormant unless the use case asks for them. The switch is a set of tiny marker / role interfaces in…"},"1265":{"u":"/docs/onboarding/group-05-cqrs-pipeline.html#the-generic-write-side-three-verbs-a-module-does-not-have-to-write","d":"5. CQRS: Commands, Queries & the Decorator Pipeline","k":"Onboarding Guide","t":"The generic write side: three verbs a module does not have to write","x":"Below the pipeline sits a second body of shared code: the workflows every aggregate write repeats. They are ordinary handlers, so the decorators wrap them exactly as they wrap a…"},"1266":{"u":"/docs/onboarding/group-05-cqrs-pipeline.html#declaring-the-contract-the-opt-in-request-markers","d":"5. CQRS: Commands, Queries & the Decorator Pipeline","k":"Onboarding Guide","t":"Declaring the contract: the opt-in request markers","x":"ICommand (.../UseCases/ICommand.cs:31) and IQuery (.../UseCases/IQuery.cs:26) let a request DTO declare the result type its handler produces. Both are body-less interfaces whose…"},"1267":{"u":"/docs/onboarding/group-05-cqrs-pipeline.html#tenant-scoping-and-the-two-lock-tables","d":"5. CQRS: Commands, Queries & the Decorator Pipeline","k":"Onboarding Guide","t":"Tenant scoping and the two lock tables","x":"Both caching decorators are multi-tenant aware, and the reason is a nice illustration of where a cross-cutting concern has to live. ICacheService is a singleton and therefore…"},"1268":{"u":"/docs/onboarding/group-05-cqrs-pipeline.html#two-supporting-pieces","d":"5. CQRS: Commands, Queries & the Decorator Pipeline","k":"Onboarding Guide","t":"Two supporting pieces","x":"Two small helpers make the short-circuit decorators possible. ResultFailureFactory…"},"1269":{"u":"/docs/onboarding/group-05-cqrs-pipeline.html#the-other-application-layer-contracts-in-this-group","d":"5. CQRS: Commands, Queries & the Decorator Pipeline","k":"Onboarding Guide","t":"The other Application-layer contracts in this group","x":"Several contracts sit beside the pipeline rather than inside it. They are declared here, in the Application layer, and implemented in Infrastructure or the composition root,…"},"1270":{"u":"/docs/onboarding/group-05-cqrs-pipeline.html#where-this-fits-and-the-failure-mode-contract","d":"5. CQRS: Commands, Queries & the Decorator Pipeline","k":"Onboarding Guide","t":"Where this fits, and the failure-mode contract","x":"These contracts sit in the Application layer of Clean Architecture (primer §1), above Domain and below Infrastructure and the API. The API layer (G12) resolves a closed handler…"},"1271":{"u":"/docs/onboarding/group-06-validation.html","d":"6. Validation","k":"Onboarding Guide","x":"What this group covers. This is the framework-level validation kit that MMCA.Common.Application ships so every module validates input the same way. It has four parts: (1) a set…"},"1272":{"u":"/docs/onboarding/group-07-persistence-ef-core.html","d":"7. Persistence & EF Core","k":"Onboarding Guide","x":"What this group covers. This is the framework's data-access engine: everything between a domain aggregate and a row in a database. It is the single largest group in the guide…"},"1273":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#one-base-context-one-class-per-engine-one-instance-per-database","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"One base context, one class per engine, one instance per database","x":"ApplicationDbContext (MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/ApplicationDbContext.cs:46) is an abstract primary-constructor class over EF's…"},"1274":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#savechanges-as-an-interceptor-pipeline","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"SaveChanges as an interceptor pipeline","x":"The base context resolves its interceptors from DI in OnConfiguring (ApplicationDbContext.cs:290-322), and registration order is execution order. The audit interceptor runs…"},"1275":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#deferred-work-the-internal-command-queue","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"Deferred work, the internal-command queue","x":"The same \"write it in the transaction, run it afterwards\" reasoning the outbox applies to events is applied to work by the internal-command queue (ADR-114).…"},"1276":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#the-tenant-boundary-read-filter-plus-write-guard","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"The tenant boundary, read filter plus write guard","x":"Multi-tenancy (ADR-073) is two independent halves that meet in this group. The read half is the named Tenant query filter the base context applies to every non-owned…"},"1277":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#recording-what-changed-the-audit-trail","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"Recording what changed, the audit trail","x":"AuditTrailSaveChangesInterceptor (MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/AuditTrail/AuditTrailSaveChangesInterceptor.cs:63) is the fourth interceptor…"},"1278":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#repositories-specifications-and-the-unit-of-work","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"Repositories, specifications, and the unit of work","x":"Handlers do not touch a DbContext directly. They ask a UnitOfWork (MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/UnitOfWork.cs:13) for a repository. The…"},"1279":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#routing-an-entity-to-its-database","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"Routing an entity to its database","x":"The heart of ADR-006 is that every entity resolves to a DataSourceKey (MMCA.Common/Source/Core/MMCA.Common.Application/Interfaces/Infrastructure/Persistence/DataSourceKey.cs:15),…"},"1280":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#one-registry-answers-every-engine-question","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"One registry answers every engine question","x":"Four engines would otherwise mean a four-way switch in every component that maps a key, quotes a column, picks a migrations assembly or decides whether a source has an outbox.…"},"1281":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#three-model-finalizing-conventions-and-the-identifier-mapping","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"Three model-finalizing conventions and the identifier mapping","x":"The base context adds all three of its conventions in ConfigureConventions (ApplicationDbContext.cs:378-399), and each exists because a cross-cutting policy above would otherwise…"},"1282":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#entity-configuration-and-engine-portability","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"Entity configuration and engine portability","x":"Concrete entity configurations derive from the engine-aware EntityTypeConfiguration…"},"1283":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#two-tables-one-database-owns-refresh-sessions-and-permission-grants","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"Two tables one database owns, refresh sessions and permission grants","x":"Most of the framework's own tables are infrastructure every relational source needs. Two are not: both are Identity-module data that exactly one database owns, so both are mapped…"},"1284":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#encryption-seeding-design-time-and-the-shared-helpers","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"Encryption, seeding, design time, and the shared helpers","x":"A handful of supporting pieces round out the EF side. EncryptedStringConverter…"},"1285":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#the-storage-image-and-push-contracts","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"The storage, image, and push contracts","x":"The group also carries the Application-layer contracts for the storage-adjacent services that are not EF at all. Each has a null default in the container so a host that has not…"},"1286":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#where-this-group-sits","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"Where this group sits","x":"Persistence is the concrete floor the abstract domain stands on. The entity bases and audit contracts from Group 02 are what the interceptors stamp and the query filters hide;…"},"1287":{"u":"/docs/onboarding/group-08-auth.html","d":"8. Authentication & Authorization","k":"Onboarding Guide","x":"What this group covers. This is the security spine of the framework: how a caller proves who they are (authentication), how the system decides what they may do (authorization),…"},"1288":{"u":"/docs/onboarding/group-08-auth.html#tokens-one-signing-switch-two-validation-worlds","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"Tokens: one signing switch, two validation worlds","x":"The framework mints two credentials on every successful sign-in: a short-lived access token (a JWT, 15 minutes by default,…"},"1289":{"u":"/docs/onboarding/group-08-auth.html#the-shared-authentication-workflow","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"The shared authentication workflow","x":"Login, registration, refresh, revocation, and device listing are not re-implemented per app. They live once in AuthenticationServiceBase…"},"1290":{"u":"/docs/onboarding/group-08-auth.html#refresh-sessions-one-row-per-device","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"Refresh sessions: one row per device","x":"A refresh token is no longer a column on the user row. Every issue opens its own RefreshSession (MMCA.Common/Source/Core/MMCA.Common.Domain/Auth/RefreshSession.cs:31), so signing…"},"1291":{"u":"/docs/onboarding/group-08-auth.html#what-the-apps-user-aggregate-must-expose","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"What the app's User aggregate must expose","x":"The shared workflows never see an app's User class. They see four small Domain-layer contracts, each sized to one workflow, which is the [Rubric §1, SOLID] interface-segregation…"},"1292":{"u":"/docs/onboarding/group-08-auth.html#passwords-and-brute-force-protection","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"Passwords and brute-force protection","x":"Password material is handled by PasswordHasher (MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Auth/PasswordHasher.cs:12), which hashes with PBKDF2-HMAC-SHA512 at 600,000…"},"1293":{"u":"/docs/onboarding/group-08-auth.html#the-second-factor-one-optional-step-in-the-same-sign-in","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"The second factor: one optional step in the same sign-in","x":"Two-factor authentication ships as contracts plus a stateless implementation, never as a feature that turns itself on: the account row belongs to the app, and making a second…"},"1294":{"u":"/docs/onboarding/group-08-auth.html#forgot-password-a-cache-backed-single-use-token","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"Forgot password: a cache-backed single-use token","x":"A user who has lost the password cannot present one, so this flow is anonymous by necessity, which makes every one of its responses a potential account-enumeration oracle. It is…"},"1295":{"u":"/docs/onboarding/group-08-auth.html#email-confirmation-the-same-token-shape-a-different-prefix","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"Email confirmation: the same token shape, a different prefix","x":"Confirming an address is the forgot-password flow's twin, and it is built that way on purpose: member for member, IEmailConfirmationTokenService…"},"1296":{"u":"/docs/onboarding/group-08-auth.html#reading-identity-from-claims","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"Reading identity from claims","x":"Once a request is authenticated, downstream code needs the caller's identity without re-parsing the JWT, and it needs one answer no matter which pipeline produced the principal.…"},"1297":{"u":"/docs/onboarding/group-08-auth.html#authorization-permissions-and-ownership","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"Authorization: permissions and ownership","x":"There is one authorization model here, and it is capabilities, not role names. The single AddAuthorizationPolicies() extension in AuthorizationExtensions…"},"1298":{"u":"/docs/onboarding/group-08-auth.html#session-cookies-keeping-ssr-authenticated","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"Session cookies: keeping SSR authenticated","x":"The final cluster solves a Blazor-specific problem: an interactive Blazor app keeps its access token in browser memory, but a cold server-side render (a new tab, an F5, an…"},"1299":{"u":"/docs/onboarding/group-08-auth.html#privacy-the-data-subject-export-package","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"Privacy: the data-subject export package","x":"Three members of this group belong to the privacy surface that sits beside erasure. UserDataExportDTO (MMCA.Common/Source/Core/MMCA.Common.Shared/Privacy/UserDataExportDTO.cs:15)…"},"1300":{"u":"/docs/onboarding/group-08-auth.html#shared-primitives-and-adjacent-members","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"Shared primitives and adjacent members","x":"Several group members are general-purpose primitives that landed in this chapter because of how the dependency grouping fell, though one of them is now load-bearing for auth.…"},"1301":{"u":"/docs/onboarding/group-09-caching.html","d":"9. Caching","k":"Onboarding Guide","x":"What this group covers. Caching in this codebase is small, deliberate, and woven into the CQRS pipeline rather than scattered across handlers. The group is nine types: one port…"},"1302":{"u":"/docs/onboarding/group-10-notifications.html","d":"10. Notifications (Push + In-App Inbox + Email)","k":"Onboarding Guide","x":"What this group covers. This is the notification subsystem, the machinery that turns \"an organizer wants to tell every attendee something\" into messages that actually reach…"},"1303":{"u":"/docs/onboarding/group-10-notifications.html#the-layering-and-why-the-pieces-sit-where-they-do","d":"10. Notifications (Push + In-App Inbox + Email)","k":"Onboarding Guide","t":"The layering, and why the pieces sit where they do","x":"The dependency flow of the group mirrors the framework's Clean Architecture story ([Rubric §3, Clean Architecture]). The Domain layer holds the two aggregates, PushNotification…"},"1304":{"u":"/docs/onboarding/group-10-notifications.html#the-broadcast-send-flow-end-to-end","d":"10. Notifications (Push + In-App Inbox + Email)","k":"Onboarding Guide","t":"The broadcast send flow, end to end","x":"Sending a notification is a command-side vertical slice ([Rubric §5, Vertical Slice], [Rubric §6, CQRS & Event-Driven]). An organizer POSTs to NotificationsController, which is…"},"1305":{"u":"/docs/onboarding/group-10-notifications.html#scope-keys-one-string-that-narrows-a-broadcast-an-inbox-and-a-live-channel","d":"10. Notifications (Push + In-App Inbox + Email)","k":"Onboarding Guide","t":"Scope keys: one string that narrows a broadcast, an inbox, and a live channel","x":"NotificationScopeKey is the small type that ties three otherwise unrelated paths together. It owns the format (event:{id} via ForEvent, session:{id} via ForSession, both rendered…"},"1306":{"u":"/docs/onboarding/group-10-notifications.html#the-inbox-side","d":"10. Notifications (Push + In-App Inbox + Email)","k":"Onboarding Guide","t":"The inbox side","x":"Reading and acknowledging notifications is the query/command counterpart, served by InboxController under the same feature gate and a plain [Authorize], so any authenticated user…"},"1307":{"u":"/docs/onboarding/group-10-notifications.html#the-signalr-transport-and-how-it-survives-extraction","d":"10. Notifications (Push + In-App Inbox + Email)","k":"Onboarding Guide","t":"The SignalR transport, and how it survives extraction","x":"NotificationHub is intentionally thin (MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Notifications/NotificationHub.cs:24-27): it is [Authorize]d, and beyond ASP.NET's…"},"1308":{"u":"/docs/onboarding/group-10-notifications.html#the-module-host-native-device-registration-and-the-privacy-export","d":"10. Notifications (Push + In-App Inbox + Email)","k":"Onboarding Guide","t":"The module host, native-device registration, and the privacy export","x":"On the ADC side the whole capability is packaged by NotificationModule (MMCA.ADC/Source/Modules/Notification/MMCA.ADC.Notification.API/NotificationModule.cs:15), an IModule that…"},"1309":{"u":"/docs/onboarding/group-10-notifications.html#where-this-group-sits","d":"10. Notifications (Push + In-App Inbox + Email)","k":"Onboarding Guide","t":"Where this group sits","x":"Upstream, this group depends on the domain building blocks of Group 02 (both aggregates derive from AuditableAggregateRootEntity ), the Result pattern of Group 01, the CQRS…"},"1310":{"u":"/docs/onboarding/group-11-navigation-populators.html","d":"11. Navigation Metadata & Populators (EF-decoupled eager loading)","k":"Onboarding Guide","x":"EF Core gives you .Include() for eager loading, and for a single SQL Server database that is the right tool. But this codebase is a database-per-service modular monolith…"},"1311":{"u":"/docs/onboarding/group-12-api-hosting-mapping.html","d":"12. API Hosting, Middleware, Idempotency & DTO/Contract Mapping","k":"Onboarding Guide","x":"What this group covers. This is the ASP.NET Core edge of the framework: the layer that turns an HTTP request into a domain call and turns a Result back into an HTTP response.…"},"1312":{"u":"/docs/onboarding/group-13-grpc-contracts.html","d":"13. gRPC & Inter-Service Contracts","k":"Onboarding Guide","x":"What this chapter is about. Once the ADC modules stopped sharing a process and became four separate service hosts (Identity, Conference, Engagement, Notification), the in-process…"},"1313":{"u":"/docs/onboarding/group-14-module-system-composition.html","d":"14. Module System, Composition & Configuration","k":"Onboarding Guide","x":"What this chapter covers. This is the wiring layer, the code that turns a pile of layered assemblies into a running host. It answers three questions a new host author asks: how…"},"1314":{"u":"/docs/onboarding/group-14-module-system-composition.html#the-module-contract-and-the-boundary-it-creates","d":"14. Module System, Composition & Configuration","k":"Onboarding Guide","t":"The module contract and the boundary it creates","x":"A module is the unit of cohesion above a feature slice: Conference, Engagement, Identity, Notification. Each one implements IModule…"},"1315":{"u":"/docs/onboarding/group-14-module-system-composition.html#discovery-and-kahn-ordered-registration","d":"14. Module System, Composition & Configuration","k":"Onboarding Guide","t":"Discovery and Kahn-ordered registration","x":"ModuleLoader (MMCA.Common/Source/Core/MMCA.Common.Application/Modules/ModuleLoader.cs:16) is the engine. Its one DiscoverAndRegister overload (ModuleLoader.cs:59-65) takes the…"},"1316":{"u":"/docs/onboarding/group-14-module-system-composition.html#the-two-composition-roots-and-the-pipeline-that-seals-them","d":"14. Module System, Composition & Configuration","k":"Onboarding Guide","t":"The two composition roots, and the pipeline that seals them","x":"Service registration itself lives in two static DependencyInjection classes, each using a C extension(IServiceCollection services) block (see primer §4 for the extension(T)…"},"1317":{"u":"/docs/onboarding/group-14-module-system-composition.html#opt-in-platform-features-are-composed-the-same-way","d":"14. Module System, Composition & Configuration","k":"Onboarding Guide","t":"Opt-in platform features are composed the same way","x":"Four capabilities are registered beside the roots rather than inside them, and they share one discipline: registering a feature is not the same as turning it on.…"},"1318":{"u":"/docs/onboarding/group-14-module-system-composition.html#deferred-work-and-the-context-that-travels-with-it","d":"14. Module System, Composition & Configuration","k":"Onboarding Guide","t":"Deferred work, and the context that travels with it","x":"The last two things AddInfrastructure composes are a queue for work a request wants done later, and the machinery that lets whatever drains a queue act as the identity that…"},"1319":{"u":"/docs/onboarding/group-14-module-system-composition.html#assembly-anchors","d":"14. Module System, Composition & Configuration","k":"Onboarding Guide","t":"Assembly anchors","x":"Several pieces of machinery need a Type whose Assembly identifies a layer: Scrutor's FromAssemblyOf () scans, FluentValidation's AddValidatorsFromAssemblyContaining (), and…"},"1320":{"u":"/docs/onboarding/group-14-module-system-composition.html#configuration-binding-the-settings-family","d":"14. Module System, Composition & Configuration","k":"Onboarding Guide","t":"Configuration binding, the Settings family","x":"Everything a host operator tunes arrives as a strongly-typed settings object bound from an appsettings.json section, each carrying a static readonly string SectionName so the…"},"1321":{"u":"/docs/onboarding/group-14-module-system-composition.html#the-two-routing-attributes","d":"14. Module System, Composition & Configuration","k":"Onboarding Guide","t":"The two routing attributes","x":"Two attributes, both in MMCA.Common.Infrastructure, both Inherited = true so they ride down a configuration class hierarchy, encode where an entity is stored declaratively: the…"},"1322":{"u":"/docs/onboarding/group-14-module-system-composition.html#shared-user-use-case-bases-composition-in-the-other-direction","d":"14. Module System, Composition & Configuration","k":"Onboarding Guide","t":"Shared user use-case bases: composition in the other direction","x":"The chapter's last family is composition at the handler level rather than the container level. ADC and Store each own an Identity module, and thirteen of their account use cases…"},"1323":{"u":"/docs/onboarding/group-14-module-system-composition.html#end-to-end-one-hosts-boot","d":"14. Module System, Composition & Configuration","k":"Onboarding Guide","t":"End-to-end: one host's boot","x":"Reading MMCA.ADC/Source/Services/MMCA.ADC.Conference.Service/Program.cs top to bottom shows the whole chapter cooperating. The host calls AddInfrastructure(builder.Configuration)…"},"1324":{"u":"/docs/onboarding/group-15-common-ui-framework.html","d":"15. Common UI Framework (MudBlazor components, theme, base pages)","k":"Onboarding Guide","x":"What this chapter covers. MMCA.Common.UI is the Blazor presentation package, and it is one of the two layers (with Grpc) allowed to reference Shared only: its single…"},"1325":{"u":"/docs/onboarding/group-16-aspire-orchestration.html","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","x":"This chapter covers the hosting boundary: how the distributed MMCA system is composed and run, locally as a single dotnet run, and in Azure Container Apps (ACA) as a set of…"},"1326":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#the-orchestrator-declaring-the-resource-graph","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"The orchestrator: declaring the resource graph","x":"When you run dotnet run --project Source/Hosting/MMCA.ADC.AppHost, Aspire executes Program.cs top to bottom, building a resource model rather than starting anything immediately.…"},"1327":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#broker-parity-rabbitmq-by-default-the-service-bus-emulator-on-demand","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"Broker parity: RabbitMQ by default, the Service Bus emulator on demand","x":"RabbitMQ is a different broker from the one production runs, so anything that only misbehaves on Azure Service Bus (entity-name limits, topic and subscription provisioning,…"},"1328":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#startup-ordering-health-gated-waits-and-the-grpc-deadlock-avoidance-trick","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"Startup ordering, health-gated waits, and the gRPC deadlock-avoidance trick","x":"Aspire's WaitFor builds a startup dependency graph from the resource model: a service does not start until the resources it waits on report healthy. What \"healthy\" means for a…"},"1329":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#the-service-baseline-addservicedefaults","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"The service baseline: AddServiceDefaults()","x":"Every running host calls one method early in Program.cs: AddServiceDefaults() from the single framework-grade Extensions in MMCA.Common.Aspire (Level 11,…"},"1330":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#one-source-of-truth-for-resilience-numbers","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"One source of truth for resilience numbers","x":"The numbers that pipeline uses are not literals in the Aspire package. They live in HttpResilienceDefaults (Level 0,…"},"1331":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#listeners-and-probes-one-kestrel-profile-per-host-shape","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"Listeners and probes: one Kestrel profile per host shape","x":"Before a service can answer a health probe it has to be listening on a protocol the prober speaks, and that is not free when the same port serves inbound gRPC.…"},"1332":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#health-checks-liveness-readiness-and-the-optional-tag","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"Health checks: liveness, readiness, and the \"optional\" tag","x":"MapDefaultEndpoints() (MMCA.Common/Source/Hosting/MMCA.Common.Aspire/Extensions.Health.cs:123) exposes the three-probe surface the platform reads: /health (every check, for…"},"1333":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#telemetry-what-gets-exported-and-what-it-costs","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"Telemetry: what gets exported, and what it costs","x":"ConfigureOpenTelemetry() (MMCA.Common/Source/Hosting/MMCA.Common.Aspire/Extensions.Telemetry.cs:71) wires logging with formatted messages and scopes (:73-77), metrics, and…"},"1334":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#warm-up-defeating-aca-cold-start","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"Warm-up: defeating ACA cold-start","x":"The warm-up subsystem exists for one concrete failure mode: the \"first request fails, second succeeds\" pattern on a CPU-throttled idle ACA replica, where lazy initialization…"},"1335":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#configuration-secrets-the-vault-as-one-more-configuration-source","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"Configuration secrets: the vault as one more configuration source","x":"Connection strings, RSA signing keys and OAuth client secrets have to reach the process somehow, and KeyVaultConfigurationExtensions (Level 0,…"},"1336":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#security-headers-cors-and-the-shared-key-ring-at-the-host-edge","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"Security headers, CORS, and the shared key ring at the host edge","x":"The next boundary in this group hardens the request and response edge. The shared response-header middleware is defined entirely in…"},"1337":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#the-gateway-edge-kit-correlation-rate-limiting-downstream-readiness","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"The gateway edge kit: correlation, rate limiting, downstream readiness","x":"A YARP gateway is the one process every client request passes through, and it is also the one host that has no application container: no DbContext, no module loader, no…"},"1338":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#the-yarp-building-blocks-cluster-profiles-ejection-trace-headers-route-policies","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"The YARP building blocks: cluster profiles, ejection, trace headers, route policies","x":"The route table itself is configuration, not code (ADR-089), and MMCA.Common.Gateway deliberately does not load it: LoadFromConfig (or any other IProxyConfigProvider) stays the…"},"1339":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#how-it-all-fits-at-runtime","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"How it all fits at runtime","x":"Putting the pieces in sequence: the AppHost declares the graph, picks a broker once, and injects per-service env vars (WithSQLServerDataSource, WithSelectedBroker,…"},"1340":{"u":"/docs/onboarding/group-17-conference-domain.html","d":"17. ADC Conference - Domain Model & Module Contracts","k":"Onboarding Guide","x":"What this chapter covers. This is the heart of the Atlanta Developers Conference application, the Conference bounded context, the largest and richest domain in MMCA.ADC. It…"},"1341":{"u":"/docs/onboarding/group-17-conference-domain.html#two-packages-one-bounded-context","d":"17. ADC Conference - Domain Model & Module Contracts","k":"Onboarding Guide","t":"Two packages, one bounded context","x":"The Conference context spans two of the module's projects, and the split is deliberate Clean Architecture ([Rubric §3, Clean Architecture]). MMCA.ADC.Conference.Domain holds the…"},"1342":{"u":"/docs/onboarding/group-17-conference-domain.html#ten-aggregates-and-their-ownership-boundaries","d":"17. ADC Conference - Domain Model & Module Contracts","k":"Onboarding Guide","t":"Ten aggregates and their ownership boundaries","x":"An aggregate is a root entity plus the children it exclusively owns; invariants are enforced inside the boundary, and references across aggregates are by ID, never by object…"},"1343":{"u":"/docs/onboarding/group-17-conference-domain.html#the-aggregate-shape-taught-once","d":"17. ADC Conference - Domain Model & Module Contracts","k":"Onboarding Guide","t":"The aggregate shape, taught once","x":"Open any of the roots and you will see the same skeleton; this repetition is the point, and it is what makes the per-type sections that follow read quickly. The shape, using…"},"1344":{"u":"/docs/onboarding/group-17-conference-domain.html#invariants-business-rules-as-testable-units","d":"17. ADC Conference - Domain Model & Module Contracts","k":"Onboarding Guide","t":"Invariants, business rules as testable units","x":"Each aggregate has a co-located static invariant class, EventInvariants (MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Domain/Events/EventInvariants.cs:14),…"},"1345":{"u":"/docs/onboarding/group-17-conference-domain.html#domain-events-and-the-outbox-spine","d":"17. ADC Conference - Domain Model & Module Contracts","k":"Onboarding Guide","t":"Domain events and the outbox spine","x":"Every state-changing method raises a domain event through the inherited AddDomainEvent(...), and the eighteen events come in two shapes with two different base types. The nine…"},"1346":{"u":"/docs/onboarding/group-17-conference-domain.html#the-cross-aggregate-cascade-a-pure-domain-service","d":"17. ADC Conference - Domain Model & Module Contracts","k":"Onboarding Guide","t":"The cross-aggregate cascade: a pure domain service","x":"One business rule cannot live inside a single aggregate: deleting an Event must also delete every Session belonging to it (BR-127), every Sponsor sold against it, every Partner…"},"1347":{"u":"/docs/onboarding/group-17-conference-domain.html#read-models-and-the-ai-decision-support-feature","d":"17. ADC Conference - Domain Model & Module Contracts","k":"Onboarding Guide","t":"Read models and the AI decision-support feature","x":"The largest cluster in Conference.Shared is the DTO layer, the wire contracts that decouple the API from the domain entities ([Rubric §9, API & Contract Design]; ADR-001 chose…"},"1348":{"u":"/docs/onboarding/group-17-conference-domain.html#authorization-vocabulary-and-current-event-selection","d":"17. ADC Conference - Domain Model & Module Contracts","k":"Onboarding Guide","t":"Authorization vocabulary and current-event selection","x":"Two more Shared helpers deserve a mention because they encode policy the whole module relies on. ConferencePermissions…"},"1349":{"u":"/docs/onboarding/group-17-conference-domain.html#crossing-the-module-boundary-contracts-stubs-and-integration-events","d":"17. ADC Conference - Domain Model & Module Contracts","k":"Onboarding Guide","t":"Crossing the module boundary: contracts, stubs, and integration events","x":"Conference does not live alone. Three kinds of connection point join it to other modules, and all live in Conference.Shared so neither side reaches into the other's domain…"},"1350":{"u":"/docs/onboarding/group-17-conference-domain.html#end-to-end-one-organizer-action","d":"17. ADC Conference - Domain Model & Module Contracts","k":"Onboarding Guide","t":"End-to-end: one organizer action","x":"To see the chapter cooperate, follow an organizer renaming a room on an event. The application handler loads the Event aggregate (with its Rooms hydrated by the navigation…"},"1351":{"u":"/docs/onboarding/group-18-conference-application.html","d":"18. ADC Conference - Application & Use Cases","k":"Onboarding Guide","x":"What this chapter covers. This is the application layer of the Conference module, the largest single application assembly in the codebase (this group covers 358 entries in the…"},"1352":{"u":"/docs/onboarding/group-18-conference-application.html#the-vertical-slice-anatomy-of-a-use-case","d":"18. ADC Conference - Application & Use Cases","k":"Onboarding Guide","t":"The vertical-slice anatomy of a use case","x":"Open any feature folder under Sessions/UseCases/, Events/UseCases/, Speakers/UseCases/, Sponsors/UseCases/, Partners/UseCases/, Activities/UseCases/, Categories/UseCases/, or…"},"1353":{"u":"/docs/onboarding/group-18-conference-application.html#manual-mapping-validation-rule-fragments-and-authorization-specifications","d":"18. ADC Conference - Application & Use Cases","k":"Onboarding Guide","t":"Manual mapping, validation rule fragments, and authorization specifications","x":"Three sibling families recur across every aggregate. DTO mappers (SessionDTOMapper, EventDTOMapper, SpeakerDTOMapper, SponsorDTOMapper, PartnerDTOMapper…"},"1354":{"u":"/docs/onboarding/group-18-conference-application.html#query-services-navigation-populators-and-the-composition-root","d":"18. ADC Conference - Application & Use Cases","k":"Onboarding Guide","t":"Query services, navigation populators, and the composition root","x":"Read paths do not get bespoke handlers for the common cases; they go through the framework's generic IEntityQueryService , which supplies filtering, sorting, paging, and field…"},"1355":{"u":"/docs/onboarding/group-18-conference-application.html#event-driven-reactions-domain-and-integration-handlers","d":"18. ADC Conference - Application & Use Cases","k":"Onboarding Guide","t":"Event-driven reactions: domain and integration handlers","x":"The application layer is also where the module reacts to events. The module keeps exactly one domain event handler, and it is the one with a real side effect.…"},"1356":{"u":"/docs/onboarding/group-18-conference-application.html#attendee-facing-read-models-calendar-export-and-nownext","d":"18. ADC Conference - Application & Use Cases","k":"Onboarding Guide","t":"Attendee-facing read models: calendar export and Now/Next","x":"A small cluster of queries serves the public schedule surfaces without going through the generic query service, because their output is not a DTO list. ExportEventCalendarHandler…"},"1357":{"u":"/docs/onboarding/group-18-conference-application.html#session-materials-authorization-as-data-blob-cleanup-as-a-durable-command","d":"18. ADC Conference - Application & Use Cases","k":"Onboarding Guide","t":"Session materials: authorization as data, blob cleanup as a durable command","x":"Speakers publish their slides and links against their own sessions, which makes the SessionAssets slice the one write surface in this module where the right to act is data rather…"},"1358":{"u":"/docs/onboarding/group-18-conference-application.html#the-sessionize-import-strategy-pattern-orchestration","d":"18. ADC Conference - Application & Use Cases","k":"Onboarding Guide","t":"The Sessionize import: Strategy-pattern orchestration","x":"The single most involved use case is importing a conference agenda from Sessionize.com. Sessionize returns one JSON payload covering five interdependent entity families…"},"1359":{"u":"/docs/onboarding/group-18-conference-application.html#decision-support-ai-scoring-and-content-analytics","d":"18. ADC Conference - Application & Use Cases","k":"Onboarding Guide","t":"Decision support: AI scoring and content analytics","x":"The last cluster is session-selection decision support, analytics that help organizers triage proposals. GetSessionSelectionDashboardHandler is a composite query: it validates…"},"1360":{"u":"/docs/onboarding/group-19-conference-infrastructure.html","d":"19. ADC Conference - Infrastructure & Persistence","k":"Onboarding Guide","x":"What this chapter covers. This is the adapter layer of the Conference module, the place where the engine-agnostic domain meets concrete technology. Three concerns live here: (1)…"},"1361":{"u":"/docs/onboarding/group-19-conference-infrastructure.html#engine-agnostic-entities-engine-chosen-by-the-config-base-class","d":"19. ADC Conference - Infrastructure & Persistence","k":"Onboarding Guide","t":"Engine-agnostic entities, engine chosen by the config base class","x":"The most important idea in this chapter is one the entities themselves never express: what storage engine each entity uses is decided here, not in the domain. A Conference domain…"},"1362":{"u":"/docs/onboarding/group-19-conference-infrastructure.html#each-config-inherits-the-cross-cutting-behavior-then-adds-entity-specifics","d":"19. ADC Conference - Infrastructure & Persistence","k":"Onboarding Guide","t":"Each config inherits the cross-cutting behavior, then adds entity specifics","x":"Every configuration's Configure method begins with base.Configure(builder) (for example SessionConfiguration.cs:18, ActivityConfiguration.cs:17) and then adds its own mappings.…"},"1363":{"u":"/docs/onboarding/group-19-conference-infrastructure.html#dbsets-the-context-shape-and-how-the-configurations-are-actually-found","d":"19. ADC Conference - Infrastructure & Persistence","k":"Onboarding Guide","t":"DbSets, the context shape, and how the configurations are actually found","x":"ModuleApplicationDbContext (MMCA.ADC.Conference.Infrastructure/Persistence/DbContexts/ModuleApplicationDbContext.cs:22) is the Conference module's abstract DbContext. It does one…"},"1364":{"u":"/docs/onboarding/group-19-conference-infrastructure.html#seeding-two-real-events-always-sample-data-only-in-dev-and-ci","d":"19. ADC Conference - Infrastructure & Persistence","k":"Onboarding Guide","t":"Seeding: two real events always, sample data only in dev and CI","x":"ConferenceModuleDbSeeder (MMCA.ADC.Conference.Infrastructure/Persistence/DbContexts/Seeding/ConferenceModuleDbSeeder.cs:27) derives from the framework's DbSeeder and runs after…"},"1365":{"u":"/docs/onboarding/group-19-conference-infrastructure.html#the-sessionize-adapter","d":"19. ADC Conference - Infrastructure & Persistence","k":"Onboarding Guide","t":"The Sessionize adapter","x":"SessionizeService (MMCA.ADC.Conference.Infrastructure/Events/Sessionize/SessionizeService.cs:12) is a deliberately thin HTTP client: the whole class is one method…"},"1366":{"u":"/docs/onboarding/group-19-conference-infrastructure.html#the-ai-scoring-adapter-and-its-response-guardrail","d":"19. ADC Conference - Infrastructure & Persistence","k":"Onboarding Guide","t":"The AI scoring adapter and its response guardrail","x":"SessionScoringService (MMCA.ADC.Conference.Infrastructure/Sessions/Scoring/SessionScoringService.cs:46) is the richer of the two adapters: it scores one session proposal against…"},"1367":{"u":"/docs/onboarding/group-19-conference-infrastructure.html#the-scoring-run-is-durable-now-and-this-layer-keeps-one-adapter-inside-it","d":"19. ADC Conference - Infrastructure & Persistence","k":"Onboarding Guide","t":"The scoring run is durable now, and this layer keeps one adapter inside it","x":"A multi-minute paid AI pass triggered from an HTTP POST used to be this chapter's biggest piece of machinery: a hosted BackgroundService draining an in-memory queue, plus a…"},"1368":{"u":"/docs/onboarding/group-19-conference-infrastructure.html#di-wiring-and-what-it-deliberately-no-longer-registers","d":"19. ADC Conference - Infrastructure & Persistence","k":"Onboarding Guide","t":"DI wiring, and what it deliberately no longer registers","x":"DependencyInjection (MMCA.ADC.Conference.Infrastructure/DependencyInjection.cs:18) is a single extension(IServiceCollection) block (the codebase's standard DI-registration idiom,…"},"1369":{"u":"/docs/onboarding/group-19-conference-infrastructure.html#how-it-fits-together-at-runtime","d":"19. ADC Conference - Infrastructure & Persistence","k":"Onboarding Guide","t":"How it fits together at runtime","x":"Three flows tie the chapter together. Persistence flow: a Conference command handler mutates an aggregate and the unit of work saves; that resolves the concrete…"},"1370":{"u":"/docs/onboarding/group-20-conference-api-grpc.html","d":"20. ADC Conference - API, gRPC Contracts & Service Host","k":"Onboarding Guide","x":"What this chapter covers. This is the edge of the Conference bounded context: the layer that turns the Conference domain (G17) and its CQRS slices (G18) into a running HTTP +…"},"1371":{"u":"/docs/onboarding/group-20-conference-api-grpc.html#the-controller-hierarchy-almost-everything-is-inherited","d":"20. ADC Conference - API, gRPC Contracts & Service Host","k":"Onboarding Guide","t":"The controller hierarchy, almost everything is inherited","x":"The Conference API exposes twenty-three controllers, and the striking thing about them is how little code each carries. They split into three structural families, all built on…"},"1372":{"u":"/docs/onboarding/group-20-conference-api-grpc.html#one-read-hook-per-controller-not-one-filter-per-action","d":"20. ADC Conference - API, gRPC Contracts & Service Host","k":"Onboarding Guide","t":"One read hook per controller, not one filter per action","x":"The single most important thing to learn before editing any file here is where row scoping lives. It is not threaded through each action: the framework base declares one hook,…"},"1373":{"u":"/docs/onboarding/group-20-conference-api-grpc.html#authorization-at-the-edge-three-shapes-not-one","d":"20. ADC Conference - API, gRPC Contracts & Service Host","k":"Onboarding Guide","t":"Authorization at the edge, three shapes not one","x":"Authorization is capability-based by default but not uniform, and the differences are the interesting part. Most write-bearing controllers carry a class-level…"},"1374":{"u":"/docs/onboarding/group-20-conference-api-grpc.html#the-request-records-the-inbound-write-shapes","d":"20. ADC Conference - API, gRPC Contracts & Service Host","k":"Onboarding Guide","t":"The request records, the inbound write shapes","x":"Several controllers declare small record class request types alongside themselves, co-located in the same file: AddRoomRequest and UpdateRoomRequest…"},"1375":{"u":"/docs/onboarding/group-20-conference-api-grpc.html#where-the-generic-shape-gives-way-filters-warnings-calendars-and-conditional-writes","d":"20. ADC Conference - API, gRPC Contracts & Service Host","k":"Onboarding Guide","t":"Where the generic shape gives way: filters, warnings, calendars and conditional writes","x":"SessionsController shows best how a controller earns its overrides. Every read action is [AllowAnonymous] and [OutputCache(PolicyName = \"SessionsCache\")]…"},"1376":{"u":"/docs/onboarding/group-20-conference-api-grpc.html#two-more-deviations-versioning-and-decision-support","d":"20. ADC Conference - API, gRPC Contracts & Service Host","k":"Onboarding Guide","t":"Two more deviations, versioning and decision support","x":"ServiceInfoController exists to prove the API-versioning machinery works beyond a single version ([Rubric §9, API & Contract Design]). It is a one-member shell over Common's…"},"1377":{"u":"/docs/onboarding/group-20-conference-api-grpc.html#the-module-entry-point-and-seeder-how-conference-plugs-in","d":"20. ADC Conference - API, gRPC Contracts & Service Host","k":"Onboarding Guide","t":"The module entry point and seeder, how Conference plugs in","x":"ConferenceModule is the Conference implementation of IModule. It is tiny by design: Register(...) calls the DependencyInjection extension's AddConferenceModule(...)…"},"1378":{"u":"/docs/onboarding/group-20-conference-api-grpc.html#the-grpc-edge-conference-as-both-server-and-client","d":"20. ADC Conference - API, gRPC Contracts & Service Host","k":"Onboarding Guide","t":"The gRPC edge, Conference as both server and client","x":"When Conference runs in its own process, two of its in-process collaborations must cross a network boundary, and both are handled by the G13 transport boundary (Result over the…"},"1379":{"u":"/docs/onboarding/group-20-conference-api-grpc.html#the-service-host-kestrel-first-then-caching-and-warm-up","d":"20. ADC Conference - API, gRPC Contracts & Service Host","k":"Onboarding Guide","t":"The service host: Kestrel first, then caching and warm-up","x":"The MMCA.ADC.Conference.Service Program.cs boots only the Conference module. Kestrel is configured before anything else, and the whole of it is one line:…"},"1380":{"u":"/docs/onboarding/group-20-conference-api-grpc.html#the-runtime-picture-one-host-two-transports","d":"20. ADC Conference - API, gRPC Contracts & Service Host","k":"Onboarding Guide","t":"The runtime picture, one host, two transports","x":"After module discovery (Program.cs:367-371) the host wires the Engagement gRPC client (:349), the broker (AddBrokerMessaging registering the UserRegistered integration-event…"},"1381":{"u":"/docs/onboarding/group-21-conference-ui.html","d":"21. ADC Conference - UI","k":"Onboarding Guide","x":"What this chapter covers. This is the consumer half of the \"write-once UI, render everywhere\" story (primer §2): the Blazor pages, page-local collaborators, and per-entity HTTP…"},"1382":{"u":"/docs/onboarding/group-21-conference-ui.html#the-layering-inside-the-ui-a-page-never-touches-httpclient","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"The layering inside the UI: a page never touches HttpClient","x":"Each page is a .razor + .razor.cs code-behind pair that depends on a UI service interface, never on HttpClient and never on the API's internals. The ten CRUD-shaped entities…"},"1383":{"u":"/docs/onboarding/group-21-conference-ui.html#the-list-pages-two-bases-one-recipe","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"The list pages: two bases, one recipe","x":"Twelve list screens hang off DataGridListPageBase , which supplies server-side paging against MudDataGrid , cancellation lifecycle, loading and load-failed state, filter and sort…"},"1384":{"u":"/docs/onboarding/group-21-conference-ui.html#detail-pages-form-models-and-one-declaration-of-the-rules","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"Detail pages, form models, and one declaration of the rules","x":"The organizer detail pages have no ADC-local base: all nine inherit Common's DetailPageBase (MMCA.Common/Source/Presentation/MMCA.Common.UI/Pages/Common/DetailPageBase.cs:26)…"},"1385":{"u":"/docs/onboarding/group-21-conference-ui.html#container-and-presentational-split-and-page-local-collaborators","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"Container and presentational split, and page-local collaborators","x":"The behaviour-heavy screens do not keep everything in one code-behind: the page stays the container (data fetching, filter and paging state, service calls) and hands rendering to…"},"1386":{"u":"/docs/onboarding/group-21-conference-ui.html#child-and-join-entities-a-thin-postdelete-base","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"Child-and-join entities: a thin POST/DELETE base","x":"Sessions, speakers, and events own join relationships (a speaker added to a session, a category item to a speaker) that the generic CRUD base cannot model, because the write…"},"1387":{"u":"/docs/onboarding/group-21-conference-ui.html#display-enrichment-lookups-the-getall-vs-getbyid-populator-gap-worked-around-in-the-ui","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"Display-enrichment lookups: the GetAll-vs-GetById populator gap, worked around in the UI","x":"Because the API's list endpoints do not always populate every cross-entity navigation, several pages need a cheap id-to-name map to render speaker names beside a session or an…"},"1388":{"u":"/docs/onboarding/group-21-conference-ui.html#three-feature-areas-that-go-beyond-crud","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"Three feature areas that go beyond CRUD","x":"First, the speaker self-service dashboard. SpeakerDashboard sits behind a plain [Authorize] attribute and is gated on the speakerid JWT claim, showing the linked speaker's…"},"1389":{"u":"/docs/onboarding/group-21-conference-ui.html#session-materials-a-resource-deliberately-not-shaped-as-crud","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"Session materials, a resource deliberately not shaped as CRUD","x":"Speakers publish the decks, handouts, and links that go with their own sessions, and anyone downloads them from the public session page (ADR-123, speaker session assets). This is…"},"1390":{"u":"/docs/onboarding/group-21-conference-ui.html#session-selection-decision-support-the-asynchronous-edge","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"Session-selection decision support, the asynchronous edge","x":"The most behaviour-rich page is the organizer-only SessionSelectionDashboard (Pages/Sessions/Selection/SessionSelectionDashboard.razor.cs:16), which renders category…"},"1391":{"u":"/docs/onboarding/group-21-conference-ui.html#public-versus-authenticated-rendering-and-the-offline-first-path","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"Public versus authenticated rendering, and the offline-first path","x":"A recurring [Rubric §11, Security] pattern: the same conference entity is exposed through two page families. No page under Pages/Public/ carries an @attribute [Authorize] at all,…"},"1392":{"u":"/docs/onboarding/group-21-conference-ui.html#sponsors-partners-and-activities-three-feature-areas-in-miniature","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"Sponsors, partners, and activities, three feature areas in miniature","x":"The sponsor surface is a compact tour of every pattern above. Organizers manage the roster through SponsorList / SponsorCreate / SponsorDetail: the list is an…"},"1393":{"u":"/docs/onboarding/group-21-conference-ui.html#the-landing-page","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"The landing page","x":"ADCHome is the conference front door, shared by the web and MAUI heads; both keep their own copy of the editorial assets under wwwroot/images, so the default serves both and…"},"1394":{"u":"/docs/onboarding/group-21-conference-ui.html#routes-navigation-and-localized-strings","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"Routes, navigation, and localized strings","x":"All paths are centralized in ConferenceRoutePaths, a static catalogue of literal routes and id-parameterized builder methods (EventDetails(id), PublicSessionDetails(id),…"},"1395":{"u":"/docs/onboarding/group-21-conference-ui.html#how-it-all-plugs-into-the-shell","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"How it all plugs into the shell","x":"Two registration types wire the area in. ConferenceUIModule implements Common's IUIModule (the front-end counterpart of the IModule back-end contract): it declares the module's…"},"1396":{"u":"/docs/onboarding/group-22-engagement-module.html","d":"22. ADC Engagement Module (Session Bookmarks)","k":"Onboarding Guide","x":"What this group covers. Engagement is the ADC bounded context that holds everything an attendee does at the conference beyond browsing the catalog. Four capability families live…"},"1397":{"u":"/docs/onboarding/group-23-engagement-live-layer.html","d":"23. ADC Engagement Live Layer (Real-Time Polls & Session Q&A)","k":"Onboarding Guide","x":"What this chapter covers. This is the conference-day layer of the Engagement bounded context: the features that only matter while an event is actually happening in the room.…"},"1398":{"u":"/docs/onboarding/group-23-engagement-live-layer.html#the-two-aggregates-and-their-invariants","d":"23. ADC Engagement Live Layer (Real-Time Polls & Session Q&A)","k":"Onboarding Guide","t":"The two aggregates and their invariants","x":"Both aggregates are sealed AuditableAggregateRootEntity subclasses that follow the framework's factory-plus-Result discipline (primer §2). LivePoll holds an EventId, an optional…"},"1399":{"u":"/docs/onboarding/group-23-engagement-live-layer.html#the-write-path-and-where-the-realtime-broadcast-actually-happens","d":"23. ADC Engagement Live Layer (Real-Time Polls & Session Q&A)","k":"Onboarding Guide","t":"The write path, and where the realtime broadcast actually happens","x":"Each operation is a vertical slice under Application/{LivePollsSessionQuestions}/UseCases/{Op}/. The three lifecycle commands do not hand-roll their load-mutate-save sequence at…"},"1400":{"u":"/docs/onboarding/group-23-engagement-live-layer.html#one-websocket-one-publisher-port-and-a-cross-service-ingress","d":"23. ADC Engagement Live Layer (Real-Time Polls & Session Q&A)","k":"Onboarding Guide","t":"One WebSocket, one publisher port, and a cross-service ingress","x":"The transport itself is framework-owned (ADR-039, Group 10). The single NotificationHub carries both durable notifications and channel events on one connection, and the…"},"1401":{"u":"/docs/onboarding/group-23-engagement-live-layer.html#the-read-path-and-how-the-ui-reacts","d":"23. ADC Engagement Live Layer (Real-Time Polls & Session Q&A)","k":"Onboarding Guide","t":"The read path and how the UI reacts","x":"Reads do not go through the generic entity-query machinery; the live views need shaped projections. LivePollResultsBuilder…"},"1402":{"u":"/docs/onboarding/group-23-engagement-live-layer.html#authorization-feature-gating-and-the-cross-service-dependency-on-conference","d":"23. ADC Engagement Live Layer (Real-Time Polls & Session Q&A)","k":"Onboarding Guide","t":"Authorization, feature gating, and the cross-service dependency on Conference","x":"Both controllers, LivePollsController (MMCA.ADC.Engagement.API/Controllers/LivePollsController.cs:42) and SessionQuestionsController…"},"1403":{"u":"/docs/onboarding/group-24-identity-module.html","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","x":"What this chapter covers. This is the Identity bounded context of MMCA.ADC, the module that owns who a person is across every ADC surface: web, WebAssembly, and MAUI. It is a…"},"1404":{"u":"/docs/onboarding/group-24-identity-module.html#projects-one-bounded-context","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"Projects, one bounded context","x":"The module is split along the standard Clean Architecture layering ([Rubric §3, Clean Architecture]), each project pinned by a trivial AssemblyReference / ClassReference anchor…"},"1405":{"u":"/docs/onboarding/group-24-identity-module.html#the-user-aggregate-credentials-profile-and-cross-context-links-in-one-root","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"The User aggregate: credentials, profile, and cross-context links in one root","x":"User (MMCA.ADC/Source/Modules/Identity/MMCA.ADC.Identity.Domain/Users/User.cs:34) is the only aggregate root in the module, and it carries more responsibility than most: it is…"},"1406":{"u":"/docs/onboarding/group-24-identity-module.html#authentication-a-thin-subclass-over-the-shared-engine","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"Authentication: a thin subclass over the shared engine","x":"The login / registration / refresh / revocation workflow is not re-implemented here. It lives in AuthenticationServiceBase (G08), which owns the validate-first flow, the lockout…"},"1407":{"u":"/docs/onboarding/group-24-identity-module.html#password-recovery-the-anonymous-half-of-the-credential-lifecycle","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"Password recovery: the anonymous half of the credential lifecycle","x":"PUT /Auth/password only serves a user who can already sign in. The recovery pair that serves one who cannot is a second, anonymous vertical, and it is assembled the same way: two…"},"1408":{"u":"/docs/onboarding/group-24-identity-module.html#email-confirmation-proving-the-address-is-reachable","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"Email confirmation: proving the address is reachable","x":"ADC asks a new account to prove its address, and deliberately does not gate sign-in on the answer: Authentication:EmailConfirmation:RequireConfirmedEmail is false…"},"1409":{"u":"/docs/onboarding/group-24-identity-module.html#administration-accounts-roles-and-the-capability-map","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"Administration: accounts, roles, and the capability map","x":"The organizer-facing administration surface is a framework surface with ADC vocabulary plugged into it. UsersAdminController (UsersAdminController.cs:25) subclasses the framework…"},"1410":{"u":"/docs/onboarding/group-24-identity-module.html#the-privacy-pair-export-and-erasure","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"The privacy pair: export and erasure","x":"Two use cases make this module the codebase's clearest [Rubric §30, Compliance / Privacy / Data Governance] story, and both are thin ADC specializations of a G14 base. The…"},"1411":{"u":"/docs/onboarding/group-24-identity-module.html#avatars-the-third-mutating-slice","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"Avatars: the third mutating slice","x":"The avatar trio is a small but complete example of a file-handling slice ([Rubric §11, Security] at the content boundary, ADR-045). UsersController caps the upload in two places:…"},"1412":{"u":"/docs/onboarding/group-24-identity-module.html#persistence-seeding-and-the-disabled-stub","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"Persistence, seeding, and the disabled stub","x":"ModuleApplicationDbContext (ModuleApplicationDbContext.cs:15) is the abstract, engine-agnostic context declaring the single Users set (:22); the concrete per-engine class…"},"1413":{"u":"/docs/onboarding/group-24-identity-module.html#crossing-the-service-boundary-grpc-and-integration-events","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"Crossing the service boundary: gRPC and integration events","x":"Identity talks to its peers two ways, and both live in Shared and Contracts so neither side reaches into the other's domain ([Rubric §7, Microservices Readiness]). Synchronously,…"},"1414":{"u":"/docs/onboarding/group-24-identity-module.html#the-ui-edge","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"The UI edge","x":"The Blazor surface is registered as an IdentityUIModule (MMCA.ADC.Identity.UI/IdentityUIModule.cs:15), an IUIModule descriptor that contributes three NavItems as resource keys,…"},"1415":{"u":"/docs/onboarding/group-24-identity-module.html#end-to-end-one-registration","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"End-to-end: one registration","x":"To see the chapter cooperate, follow a new attendee signing up. AuthController receives the register POST, captures the client IP for BR-213 rate limiting and the user-agent for…"},"1416":{"u":"/docs/onboarding/group-25-adc-host-composition.html","d":"25. ADC Application Host, UI Shell & Cross-Module Composition","k":"Onboarding Guide","x":"What this chapter covers. Every ADC module described so far (Conference, Engagement, Identity, Notification) is consumed somewhere. This chapter is that somewhere: the client…"},"1417":{"u":"/docs/onboarding/group-26-device-capability-layer.html","d":"26. Device Capability Abstraction Layer (Native Contracts, MAUI, Browser & Fallback Adapters)","k":"Onboarding Guide","x":"What this chapter covers. One Blazor component library in MMCA.Common.UI renders on three very different heads: Blazor Server (server-side prerender plus interactive Server…"},"1418":{"u":"/docs/onboarding/group-27-common-ai-integration.html","d":"27. Common AI Integration","k":"Onboarding Guide","x":"What this chapter covers. This group is the framework's language-model boundary: the optional MMCA.Common.AI package that turns a call to an LLM provider into an ordinary,…"},"1419":{"u":"/docs/onboarding/group-27-common-ai-integration.html#the-configuration-surface-is-the-contract","d":"27. Common AI Integration","k":"Onboarding Guide","t":"The configuration surface is the contract","x":"AiSettings (MMCA.Common/Source/Core/MMCA.Common.AI/AiSettings.cs:22) binds from the Ai section (AiSettings.cs:25) and holds every knob the package has: Enabled (:39), Provider…"},"1420":{"u":"/docs/onboarding/group-27-common-ai-integration.html#the-provider-is-a-registered-factory-not-a-type-the-package-names","d":"27. Common AI Integration","k":"Onboarding Guide","t":"The provider is a registered factory, not a type the package names","x":"IAiProviderFactory (MMCA.Common/Source/Core/MMCA.Common.AI/Providers/IAiProviderFactory.cs:20) is the whole provider boundary: a Name a configuration file selects it by (:26) and…"},"1421":{"u":"/docs/onboarding/group-27-common-ai-integration.html#one-entry-point-one-pipeline-outermost-first","d":"27. Common AI Integration","k":"Onboarding Guide","t":"One entry point, one pipeline, outermost first","x":"AiServiceCollectionExtensions (MMCA.Common/Source/Core/MMCA.Common.AI/DependencyInjection.cs:77) is the only composition surface. It exposes two AddMmcaChatClient overloads…"},"1422":{"u":"/docs/onboarding/group-27-common-ai-integration.html#the-outer-layer-what-a-call-is-allowed-to-do","d":"27. Common AI Integration","k":"Onboarding Guide","t":"The outer layer: what a call is allowed to do","x":"BoundedChatClient (MMCA.Common/Source/Core/MMCA.Common.AI/Chat/BoundedChatClient.cs:65) is a DelegatingChatClient that applies five bounds (output tokens, wall clock, tool use,…"},"1423":{"u":"/docs/onboarding/group-27-common-ai-integration.html#the-middle-layer-what-the-call-may-say-and-what-it-may-answer","d":"27. Common AI Integration","k":"Onboarding Guide","t":"The middle layer: what the call may say, and what it may answer","x":"Bounds are configuration, so the framework can decide them. Content is not, so it does not. IChatGuardrail (MMCA.Common/Source/Core/MMCA.Common.AI/Chat/IChatGuardrail.cs:21) is…"},"1424":{"u":"/docs/onboarding/group-27-common-ai-integration.html#the-two-content-policies-the-framework-does-ship","d":"27. Common AI Integration","k":"Onboarding Guide","t":"The two content policies the framework does ship","x":"PiiRedactionGuardrail (MMCA.Common/Source/Core/MMCA.Common.AI/Guardrails/PiiRedactionGuardrail.cs:39) is the stated exception to \"extension points and no policy\": an email…"},"1425":{"u":"/docs/onboarding/group-27-common-ai-integration.html#the-inner-layer-what-the-call-actually-cost","d":"27. Common AI Integration","k":"Onboarding Guide","t":"The inner layer: what the call actually cost","x":"UsageRecordingChatClient (MMCA.Common/Source/Core/MMCA.Common.AI/Chat/UsageRecordingChatClient.cs:38) sits inside the guardrails and reports the provider's own numbers. On the…"},"1426":{"u":"/docs/onboarding/group-27-common-ai-integration.html#the-prompt-is-a-versioned-artifact","d":"27. Common AI Integration","k":"Onboarding Guide","t":"The prompt is a versioned artifact","x":"PromptContract (MMCA.Common/Source/Core/MMCA.Common.AI/PromptContract.cs:23) is a sealed record of the four things that decide what a model will answer: Name, Version, Model and…"},"1427":{"u":"/docs/onboarding/group-27-common-ai-integration.html#where-it-runs-today-and-how-it-is-tested","d":"27. Common AI Integration","k":"Onboarding Guide","t":"Where it runs today, and how it is tested","x":"Exactly one feature in the workspace calls a model: ADC's organizer-facing session scoring. The Conference service host reads one secret, Ai:ApiKey, and derives Ai:Enabled from…"},"1428":{"u":"/docs/onboarding/group-28-testing-infrastructure.html","d":"28. Testing & Quality Infrastructure","k":"Onboarding Guide","x":"What this group covers. Everything the codebase uses to prove itself: the five reusable test-support packages that ship out of MMCA.Common/Source/Hosting (MMCA.Common.Testing,…"},"1429":{"u":"/docs/onboarding/group-28-testing-infrastructure.html#integration-tests-a-real-host-a-throwaway-database-a-per-test-reset","d":"28. Testing & Quality Infrastructure","k":"Onboarding Guide","t":"Integration tests: a real host, a throwaway database, a per-test reset","x":"The integration tier boots the actual application, not a mock of it. The abstraction at its center is IIntegrationTestFixture…"},"1430":{"u":"/docs/onboarding/group-28-testing-infrastructure.html#orchestration-smoke-tests-booting-a-real-apphost","d":"28. Testing & Quality Infrastructure","k":"Onboarding Guide","t":"Orchestration smoke tests: booting a real AppHost","x":"Every tier above boots hosts directly, which means none of them ever runs the file that states how a whole stack fits together. The AppHost declares the project resources, the…"},"1431":{"u":"/docs/onboarding/group-28-testing-infrastructure.html#architecture-fitness-functions-rules-that-gate-the-build","d":"28. Testing & Quality Infrastructure","k":"Onboarding Guide","t":"Architecture fitness functions: rules that gate the build","x":"The layering and DDD conventions this codebase commits to are not left to code review, they are executed as tests. The reusable rule library lives in…"},"1432":{"u":"/docs/onboarding/group-28-testing-infrastructure.html#component-tests-real-mudblazor-faked-edges","d":"28. Testing & Quality Infrastructure","k":"Onboarding Guide","t":"Component tests: real MudBlazor, faked edges","x":"The bUnit tier renders a single Blazor component in-process with its real dependencies but stubbed network and auth. BunitComponentTestBase…"},"1433":{"u":"/docs/onboarding/group-28-testing-infrastructure.html#end-to-end-tests-a-real-browser-accessibility-and-performance-as-gates","d":"28. Testing & Quality Infrastructure","k":"Onboarding Guide","t":"End-to-end tests: a real browser, accessibility and performance as gates","x":"The E2E tier drives a real browser through Playwright. PlaywrightFixture (MMCA.Common.Testing.E2E/Infrastructure/PlaywrightFixture.cs:6) is an xUnit collection fixture (its…"},"1434":{"u":"/docs/onboarding/group-28-testing-infrastructure.html#the-gallery-harness","d":"28. Testing & Quality Infrastructure","k":"Onboarding Guide","t":"The Gallery harness","x":"Component and E2E coverage of MMCA.Common's own UI needs a page to render, but the framework is not a runnable app. MMCA.Common.UI.Gallery is a deliberately backend-less Blazor…"},"1435":{"u":"/docs/onboarding/group-28-testing-infrastructure.html#evaluating-a-nondeterministic-dependency-the-ai-scoring-golden-corpus","d":"28. Testing & Quality Infrastructure","k":"Onboarding Guide","t":"Evaluating a nondeterministic dependency: the AI-scoring golden corpus","x":"Every tier above assumes a deterministic system under test. ADC's session-scoring judge is not one: it asks a hosted model for a structured score, and the same prompt can return…"},"1436":{"u":"/docs/onboarding/group-28-testing-infrastructure.html#contract-pipeline-and-benchmark-bases","d":"28. Testing & Quality Infrastructure","k":"Onboarding Guide","t":"Contract, pipeline, and benchmark bases","x":"The last family pins guarantees that live in the composition of the stack rather than in any one type, and it is the subject of ADR-058: these suites ship in MMCA.Common.Testing…"},"1437":{"u":"/docs/onboarding/group-28-testing-infrastructure.html#per-project-test-rollup","d":"28. Testing & Quality Infrastructure","k":"Onboarding Guide","t":"Per-project test rollup","x":"The remaining test types in G25 are logged here by project rather than as individual sections (per the TESTS note): each project below is a Microsoft Testing Platform / xUnit v3…"},"1438":{"u":"/docs/onboarding/group-28-testing-infrastructure.html#test-suites-by-module","d":"28. Testing & Quality Infrastructure","k":"Onboarding Guide","t":"Test suites by module","x":"--- ⬅ Common AI Integration • Index • Coverage audit ➡"},"1439":{"u":"/docs/onboarding/devops-aspire.html","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","x":"This chapter teaches how the MMCA.ADC system goes from a single dotnet run on your workstation to a running stack of six .NET processes plus four containers: databases, a broker,…"},"1440":{"u":"/docs/onboarding/devops-aspire.html#the-one-command-local-run","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"The one-command local run","x":"That command brings up everything the application needs locally: four SQL Server databases, Redis, RabbitMQ with management UI, a MailDev SMTP interceptor, four extracted…"},"1441":{"u":"/docs/onboarding/devops-aspire.html#mmcaadcapphost-the-orchestration-project","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"MMCA.ADC.AppHost, the orchestration project","x":"Source file: MMCA.ADC/Source/Hosting/MMCA.ADC.AppHost/Program.cs AppHost-local helper: MMCA.ADC/Source/Hosting/MMCA.ADC.AppHost/BrokerSelection.cs Framework extension helpers:…"},"1442":{"u":"/docs/onboarding/devops-aspire.html#where-service-defaults-come-from-mmcacommonaspire-not-a-local-project","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"Where service defaults come from, MMCA.Common.Aspire, not a local project","x":"There is no MMCA.ADC.ServiceDefaults project. Source/Hosting/ contains the AppHost and the four per-service migrations assemblies, nothing else. The conventional Aspire…"},"1443":{"u":"/docs/onboarding/devops-aspire.html#mmcacommonaspire-the-framework-service-defaults-package","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"MMCA.Common.Aspire, the framework service-defaults package","x":"Source: MMCA.Common/Source/Hosting/MMCA.Common.Aspire/Extensions.cs Tags: .../HealthCheckTags.cs Telemetry: .../Telemetry/OutboxPollFilterProcessor.cs Security:…"},"1444":{"u":"/docs/onboarding/devops-aspire.html#mmcacommonaspirehosting-the-apphost-extensions-package","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"MMCA.Common.Aspire.Hosting, the AppHost extensions package","x":"Source: MMCA.Common/Source/Hosting/MMCA.Common.Aspire.Hosting/ Files: Extensions.cs, H2cHealthCheckExtensions.cs, H2cEndpointHealthCheck.cs, ServiceBusEmulatorResource.cs This…"},"1445":{"u":"/docs/onboarding/devops-aspire.html#the-six-dockerfiles","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"The six Dockerfiles","x":"All six Dockerfiles share the same multi-stage structure (base, build, publish, final) and the same base images. None build the AppHost: it is a local-only orchestration…"},"1446":{"u":"/docs/onboarding/devops-aspire.html#local-to-cloud-parity","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"Local-to-cloud parity","x":"The AppHost topology maps directly to the Azure infrastructure provisioned by infra/main.bicep. The table below cross-references the local resource with its Azure equivalent: The…"},"1447":{"u":"/docs/onboarding/devops-aspire.html#the-yarp-gateways-role","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"The YARP Gateway's role","x":"The gateway (Source/Hosts/MMCA.ADC.Gateway) is a pure YARP reverse proxy. It has no DbContext, no ModuleLoader, no REST controllers, and no broker connection. Its Program.cs is…"},"1448":{"u":"/docs/onboarding/devops-aspire.html#startup-ordering-summary","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"Startup ordering summary","x":"The health-based WaitFor chain imposes this ordering. Two things shape it that are not visible at the call site: three of the four services wait on Identity without any explicit…"},"1449":{"u":"/docs/onboarding/devops-aspire.html#the-apphost-composition-smoke-test","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"The AppHost composition smoke test","x":"MMCA.ADC/Tests/Integration/MMCA.ADC.AppHost.SmokeTests/AdcAppHostFixture.cs, MMCA.ADC/Tests/Integration/MMCA.ADC.AppHost.SmokeTests/AdcAppHostSmokeTests.cs Everything above is…"},"1450":{"u":"/docs/onboarding/devops-aspire.html#rubric-category-index-for-this-chapter","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"Rubric category index for this chapter","x":"---"},"1451":{"u":"/docs/onboarding/devops-aspire.html#not-determinable-from-source","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"Not determinable from source","x":"- The specific integration events that flow over the broker (UserRegistered, SpeakerLinkedToUser, SpeakerUnlinkedFromUser) are cited from AppHost inline comments…"},"1452":{"u":"/docs/onboarding/devops-cicd.html","d":"CI/CD and Operations","k":"Onboarding Guide","x":"This chapter walks the GitHub Actions workflows that govern MMCA, from the framework's continuous integration and lockstep NuGet release in MMCA.Common, through the ADC…"},"1453":{"u":"/docs/onboarding/devops-cicd.html#mmcacommon-ciyml","d":"CI/CD and Operations","k":"Onboarding Guide","t":"MMCA.Common, ci.yml","x":"File: MMCA.Common/.github/workflows/ci.yml The continuous-integration workflow for the MMCA.Common framework. Because the published packages (the authoritative id list and count…"},"1454":{"u":"/docs/onboarding/devops-cicd.html#mmcacommon-releaseyml","d":"CI/CD and Operations","k":"Onboarding Guide","t":"MMCA.Common, release.yml","x":"File: MMCA.Common/.github/workflows/release.yml The lockstep NuGet release workflow. When a maintainer pushes a vX.Y.Z git tag, this workflow deterministically derives the…"},"1455":{"u":"/docs/onboarding/devops-cicd.html#mmcaadc-deployyml","d":"CI/CD and Operations","k":"Onboarding Guide","t":"MMCA.ADC, deploy.yml","x":"File: MMCA.ADC/.github/workflows/deploy.yml The primary CI/CD pipeline for the Atlanta Developers Conference application. It runs on every push to main, on every pull request…"},"1456":{"u":"/docs/onboarding/devops-cicd.html#mmcaadc-e2eyml","d":"CI/CD and Operations","k":"Onboarding Guide","t":"MMCA.ADC, e2e.yml","x":"File: MMCA.ADC/.github/workflows/e2e.yml The full-stack Playwright E2E test workflow. It brings up the complete Aspire stack (SQL Server + Redis + RabbitMQ + four services +…"},"1457":{"u":"/docs/onboarding/devops-cicd.html#mmcaadc-cost-guardyml","d":"CI/CD and Operations","k":"Onboarding Guide","t":"MMCA.ADC, cost-guard.yml","x":"File: MMCA.ADC/.github/workflows/cost-guard.yml A read-only FinOps check that confirms the production Azure footprint is at its cost baseline. It detects a specific operational…"},"1458":{"u":"/docs/onboarding/devops-cicd.html#mmcaadc-load-testyml","d":"CI/CD and Operations","k":"Onboarding Guide","t":"MMCA.ADC, load-test.yml","x":"File: MMCA.ADC/.github/workflows/load-test.yml A k6 load test targeting the output-cached Conference read endpoints through the production Gateway. It establishes a repeatable…"},"1459":{"u":"/docs/onboarding/devops-cicd.html#repository-automation-the-claude-review-pair-and-the-maui-audit","d":"CI/CD and Operations","k":"Onboarding Guide","t":"Repository automation: the Claude review pair and the MAUI audit","x":"Files: MMCA.Common/.github/workflows/claude.yml, MMCA.Common/.github/workflows/claude-code-review.yml, MMCA.ADC/.github/workflows/claude.yml,…"},"1460":{"u":"/docs/onboarding/devops-cicd.html#cross-workflow-summary","d":"CI/CD and Operations","k":"Onboarding Guide","t":"Cross-workflow summary","x":"(dr-drill.yml is the ADR-009 §29 restore drill: it PITR-restores a copy of a chosen database, times the restore for the RTO record, verifies it comes back Online, then deletes…"},"1461":{"u":"/docs/onboarding/devops-cicd.html#rubric-category-index-for-this-chapter","d":"CI/CD and Operations","k":"Onboarding Guide","t":"Rubric category index for this chapter"},"1462":{"u":"/docs/onboarding/devops-iac.html","d":"Infrastructure as Code, ADC Azure Deployment","k":"Onboarding Guide","x":"This chapter teaches the Azure Infrastructure-as-Code layer for the MMCA.ADC application: what resources are provisioned, why they are shaped the way they are, how secrets reach…"},"1463":{"u":"/docs/onboarding/devops-iac.html#how-the-pieces-fit-together","d":"Infrastructure as Code, ADC Azure Deployment","k":"Onboarding Guide","t":"How the pieces fit together","x":"Before diving into individual files, here is the end-to-end picture: Phases 1 and 2 are their own jobs (deploy.yml:1089, deploy.yml:1143) rather than steps inside deploy, so they…"},"1464":{"u":"/docs/onboarding/devops-iac.html#azureyaml-the-azd-project-definition","d":"Infrastructure as Code, ADC Azure Deployment","k":"Onboarding Guide","t":"azure.yaml, the azd project definition","x":"File: MMCA.ADC/azure.yaml azure.yaml is the Azure Developer CLI (azd) manifest for the project. It declares six deployable services and points azd at the Bicep infrastructure…"},"1465":{"u":"/docs/onboarding/devops-iac.html#infrafoundationbicep-long-lived-shared-infrastructure","d":"Infrastructure as Code, ADC Azure Deployment","k":"Onboarding Guide","t":"infra/foundation.bicep, long-lived shared infrastructure","x":"File: MMCA.ADC/infra/foundation.bicep Foundation is deployed first (CI/CD chapter: deploy.yml:1115-1121) on every run. It provisions three resources: the Azure Container…"},"1466":{"u":"/docs/onboarding/devops-iac.html#deployment-parameters-assembled-at-deploy-time-not-committed","d":"Infrastructure as Code, ADC Azure Deployment","k":"Onboarding Guide","t":"Deployment parameters, assembled at deploy time, not committed","x":"There is no infra/main.parameters.json file in the repository, the tracked infra/ directory holds only foundation.bicep, main.bicep, DISASTER-RECOVERY.md, OPERATIONS.md,…"},"1467":{"u":"/docs/onboarding/devops-iac.html#inframainbicep-the-full-application-infrastructure","d":"Infrastructure as Code, ADC Azure Deployment","k":"Onboarding Guide","t":"infra/main.bicep, the full application infrastructure","x":"File: MMCA.ADC/infra/main.bicep main.bicep declares every application-layer Azure resource: Application Insights, five SLO scheduled query rules (one of them the AI-scoring token…"},"1468":{"u":"/docs/onboarding/devops-iac.html#deployment-model-summary","d":"Infrastructure as Code, ADC Azure Deployment","k":"Onboarding Guide","t":"Deployment model summary","x":"The complete credential chain: No static credential exists at any link in this chain. The GitHub secrets AZURECLIENTID, AZURETENANTID, AZURESUBSCRIPTIONID are the OIDC…"},"1469":{"u":"/docs/onboarding/devops-iac.html#rubric-category-cross-reference","d":"Infrastructure as Code, ADC Azure Deployment","k":"Onboarding Guide","t":"Rubric category cross-reference","x":"---"},"1470":{"u":"/docs/onboarding/devops-iac.html#not-determinable-from-source","d":"Infrastructure as Code, ADC Azure Deployment","k":"Onboarding Guide","t":"Not determinable from source","x":"- The exact AcrPull and Key Vault Secrets User role-assignment commands used in the out-of- band bootstrap are referenced in comments (main.bicep:1045-1049, main.bicep:1063-1066)…"},"1471":{"u":"/docs/onboarding/devops-runbooks.html","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","x":"This chapter covers every operational script and runbook in MMCA.ADC: the one-time Azure bootstrap, the database-per-service cutover story (how the legacy AtlDevCon monolith DB…"},"1472":{"u":"/docs/onboarding/devops-runbooks.html#azure-setupsh-one-time-azure-bootstrap","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"azure-setup.sh, One-time Azure bootstrap","x":"File: MMCA.ADC/scripts/azure-setup.sh (175 lines) What it is. A bash script that creates every Azure identity and OIDC credential the GitHub Actions deploy pipeline needs. It is…"},"1473":{"u":"/docs/onboarding/devops-runbooks.html#the-database-per-service-cutover-and-why-its-scripts-are-gone","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"The database-per-service cutover, and why its scripts are gone","x":"Before the surviving artifacts make sense, the story behind them does. Before ADR-006. All four modules (Identity, Conference, Engagement, Notification) pointed at a single…"},"1474":{"u":"/docs/onboarding/devops-runbooks.html#infradisaster-recoverymd-dr-runbook","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"infra/DISASTER-RECOVERY.md, DR runbook","x":"File: MMCA.ADC/infra/DISASTER-RECOVERY.md (234 lines; not the Store file of the same name) What it is. The authoritative disaster-recovery runbook for the ADC production…"},"1475":{"u":"/docs/onboarding/devops-runbooks.html#dr-drillyml-and-dr-restore-drillps1-the-adr-009-restore-drill","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"dr-drill.yml and dr-restore-drill.ps1, the ADR-009 restore drill","x":"Files: MMCA.ADC/.github/workflows/dr-drill.yml (120 lines), MMCA.ADC/scripts/dr-restore-drill.ps1 (101 lines) What it is. The automation behind the drill requirement above: the…"},"1476":{"u":"/docs/onboarding/devops-runbooks.html#infraoperationsmd-day-2-alert-triage-runbook","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"infra/OPERATIONS.md, day-2 alert triage runbook","x":"File: MMCA.ADC/infra/OPERATIONS.md (207 lines) What it is. The alert-to-action companion to the provisioned observability: what to do when each alert fires, how to read the SLO…"},"1477":{"u":"/docs/onboarding/devops-runbooks.html#infrasql-managed-identitymd-staged-passwordless-sql-runbook","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"infra/SQL-MANAGED-IDENTITY.md, staged passwordless-SQL runbook","x":"File: MMCA.ADC/infra/SQL-MANAGED-IDENTITY.md (100 lines) What it is. The runbook for moving the four service apps from SQL-login (password) auth to Entra managed-identity auth…"},"1478":{"u":"/docs/onboarding/devops-runbooks.html#infrapost-cutover-atldevcon-downgrademd-archive-downgrade-and-drop-runbook","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"infra/POST-CUTOVER-atldevcon-downgrade.md, archive downgrade and drop runbook","x":"File: MMCA.ADC/infra/POST-CUTOVER-atldevcon-downgrade.md (128 lines) What it is. The record of what happened to the legacy AtlDevCon database after the database-per-service…"},"1479":{"u":"/docs/onboarding/devops-runbooks.html#play-store-captureps1-android-screenshot-capture","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"play-store-capture.ps1, Android screenshot capture","x":"File: MMCA.ADC/scripts/play-store-capture.ps1 (147 lines) What it is. A PowerShell 7 script (play-store-capture.ps1:1) that captures a screenshot from an attached Android device…"},"1480":{"u":"/docs/onboarding/devops-runbooks.html#play-store-composeps1-play-store-screenshot-compositor","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"play-store-compose.ps1, Play Store screenshot compositor","x":"File: MMCA.ADC/scripts/play-store-compose.ps1 (187 lines) What it is. A PowerShell 7 script that reads raw captures from store-assets/play-store/raw/, wraps each into a 1080x1920…"},"1481":{"u":"/docs/onboarding/devops-runbooks.html#docsmobilereleaserunbookmd-store-submission-runbook","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"Docs/MobileReleaseRunbook.md, store-submission runbook","x":"File: MMCA.ADC/Docs/MobileReleaseRunbook.md (205 lines) What it is. The manual, credential-holding steps around a store submission that code and CI cannot perform, each tagged…"},"1482":{"u":"/docs/onboarding/devops-runbooks.html#the-operational-artifacts-in-full-context","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"The operational artifacts in full context","x":"The surviving artifacts form one story that starts at bootstrap and ends at day-2 triage: The AtlDevCon database is the thread that runs through the database half of that table,…"},"1483":{"u":"/docs/onboarding/devops-runbooks.html#rubric-tag-summary","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"Rubric tag summary","x":"---"},"1484":{"u":"/docs/onboarding/devops-runbooks.html#not-determinable-from-source","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"Not determinable from source","x":"- Whether the newest weekly drill is green: the drill ledger is maintained through 2026-08-10 (DISASTER-RECOVERY.md:210-217), but dr-drill.yml runs every Monday and a run reaches…"},"1485":{"u":"/docs/onboarding/devops-testing.html","d":"Testing Architecture & Solution Composition","k":"Onboarding Guide","x":"Chapter scope note. The tier chapters (tier-00 through the sweep) document every type in the production codebase one by one. Test types are the logged exception: this chapter…"},"1486":{"u":"/docs/onboarding/devops-testing.html#1-solution-composition-and-the-test-runner","d":"Testing Architecture & Solution Composition","k":"Onboarding Guide","t":"1. Solution composition and the test runner","x":"The two deployed apps use the same two-file pattern; MMCA.Common and MMCA.Helpdesk ship a .slnx only, because their solutions are already fast enough not to need a CI subset:…"},"1487":{"u":"/docs/onboarding/devops-testing.html#2-test-project-layout","d":"Testing Architecture & Solution Composition","k":"Onboarding Guide","t":"2. Test project layout","x":"The inventory below is drawn from 00-inventory.md:25-135 (test-assembly counts) and the solution files above. Counts are distinct types per project as reported by the Roslyn…"},"1488":{"u":"/docs/onboarding/devops-testing.html#3-shipped-testing-infrastructure-packages","d":"Testing Architecture & Solution Composition","k":"Onboarding Guide","t":"3. Shipped testing-infrastructure packages","x":"MMCA.Common ships five of its twenty-two packages as general testing infrastructure that downstream apps consume as NuGet references rather than writing their own harness…"},"1489":{"u":"/docs/onboarding/devops-testing.html#4-architecture-fitness-tests-executable-governance","d":"Testing Architecture & Solution Composition","k":"Onboarding Guide","t":"4. Architecture fitness tests, executable governance","x":"[Rubric §34, Architecture Governance & Documentation]: §34 assesses whether architectural decisions are documented, enforced, and kept honest over time; fitness functions are the…"},"1490":{"u":"/docs/onboarding/devops-testing.html#5-integration-and-e2e-strategy","d":"Testing Architecture & Solution Composition","k":"Onboarding Guide","t":"5. Integration and E2E strategy","x":"The four integration test projects (Identity, Conference, Engagement, Notification) each boot their service in-process with WebApplicationFactory . The lifecycle is not written…"},"1491":{"u":"/docs/onboarding/devops-testing.html#6-worked-examples","d":"Testing Architecture & Solution Composition","k":"Onboarding Guide","t":"6. Worked examples","x":"Three examples tie the infrastructure above to real test code. The per-repo class is a bare subclass; the facts, the package lists and the parsing live once in the shared base:…"},"1492":{"u":"/docs/onboarding/devops-testing.html#7-the-tiers-and-the-gates-that-run-them","d":"Testing Architecture & Solution Composition","k":"Onboarding Guide","t":"7. The tiers and the gates that run them","x":"A test tier only means something once you know what it blocks. This is the map. MMCA.Common's ui-e2e job (MMCA.Common/.github/workflows/ci.yml:248) builds the out-of-slnx gallery…"},"1493":{"u":"/docs/onboarding/devops-testing.html#quick-reference-rubric-categories-touched-in-this-chapter","d":"Testing Architecture & Solution Composition","k":"Onboarding Guide","t":"Quick reference: rubric categories touched in this chapter","x":"---"},"1494":{"u":"/docs/onboarding/devops-testing.html#cross-links","d":"Testing Architecture & Solution Composition","k":"Onboarding Guide","t":"Cross-links","x":"- Primer: 00-primer.md5-the-solution--test-layout , solution files, MTP runner, slnx-excluded UI projects - Primer:…"},"1495":{"u":"/docs/onboarding/99-coverage-audit.html","d":"Phase 4, Coverage Audit","k":"Onboarding Guide","x":"This audit reconciles the written guide against the mechanically-extracted inventory, logs every deliberate exception, verifies the grouping/ordering rules, proves all 34 rubric…"},"1496":{"u":"/docs/onboarding/99-coverage-audit.html#1-coverage-reconciliation","d":"Phase 4, Coverage Audit","k":"Onboarding Guide","t":"1. Coverage reconciliation","x":"Cross-check result: verify.ps1 confirms 0 of the 2,624 individually-sectioned types are missing from their group chapter, every one appears as a heading or in a sibling-family…"},"1497":{"u":"/docs/onboarding/99-coverage-audit.html#2-exceptions-log-every-deliberate-omission-with-reason","d":"Phase 4, Coverage Audit","k":"Onboarding Guide","t":"2. Exceptions log (every deliberate omission, with reason)","x":"EF Core migrations (/Migrations/, .Migrations.SqlServer), ModelSnapshot, .Designer.cs, .g.cs, GlobalUsings.g.cs, and AssemblyInfo.cs are excluded by rule (Tools/invtool…"},"1498":{"u":"/docs/onboarding/99-coverage-audit.html#3-grouping--ordering-verification","d":"Phase 4, Coverage Audit","k":"Onboarding Guide","t":"3. Grouping & ordering verification","x":"- Every type in exactly one group. classify.ps1 assigns all 3,668 nodes via name-level overrides (for the grab-bag MMCA.Common.Interfaces/Services namespaces) + ordered…"},"1499":{"u":"/docs/onboarding/99-coverage-audit.html#4-rubric-coverage-matrix","d":"Phase 4, Coverage Audit","k":"Onboarding Guide","t":"4. Rubric coverage matrix","x":"Every one of the 34 categories is explained at least once against real code. \"First explained in\" is the earliest group chapter (by order) that tags it; many recur and several…"},"1500":{"u":"/docs/onboarding/99-coverage-audit.html#5-open-questions--not-determinable-from-source","d":"Phase 4, Coverage Audit","k":"Onboarding Guide","t":"5. Open questions / not determinable from source","x":"1. IDbSeeder host invocation (group-07). The seeding contract and implementations are in MMCA.Common, but the IHostedService/startup invoker that actually runs seeding at boot…"},"1501":{"u":"/docs/onboarding/99-coverage-audit.html#6-how-to-regenerate-this-audit","d":"Phase 4, Coverage Audit","k":"Onboarding Guide","t":"6. How to regenerate this audit","x":"Then copy the refreshed out/00-inventory.md and out/00-dependency-manifest.md into Docs/Onboarding/ (the 00-group-taxonomy.md is written there directly by classify.ps1)."},"1502":{"u":"/docs/onboarding/CONCEPT-MAPS.html","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","x":"Mermaid diagrams distilled from the Onboarding guide (primer, group taxonomy, dependency manifest, and the 28 group chapters). Each diagram captures a relationship between the…"},"1503":{"u":"/docs/onboarding/CONCEPT-MAPS.html#1-system-context-two-codebases--the-22-packages","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"1. System context, two codebases + the 22 packages","x":"MMCA.Common is a framework published as twenty-two NuGet packages in lockstep, to nuget.org and GitHub Packages from one tag (ADR-053); MMCA.ADC and MMCA.Store consume them.…"},"1504":{"u":"/docs/onboarding/CONCEPT-MAPS.html#2-clean-architecture-the-layered-dependency-rule","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"2. Clean Architecture, the layered dependency rule","x":"Source dependencies point inward toward the Domain; each layer references only layers below it. Deliberate exceptions: UI and Grpc depend on Shared only (UI for Blazor WASM…"},"1505":{"u":"/docs/onboarding/CONCEPT-MAPS.html#3-the-28-functional-groups-dependency--build-order","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"3. The 28 functional groups, dependency / build order","x":"The primary axis of the guide: every type lives in exactly one of 28 chapter groups, ordered roughly topologically. Foundational, widely-depended-on concerns first (Result →…"},"1506":{"u":"/docs/onboarding/CONCEPT-MAPS.html#4-core-framework-patterns-how-the-building-blocks-compose","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"4. Core framework patterns, how the building blocks compose","x":"The pattern-level view of the same backbone: the ideas the primer commits to and how they feed each other. Result is the pervasive currency; DDD blocks produce domain events;…"},"1507":{"u":"/docs/onboarding/CONCEPT-MAPS.html#5-request-lifecycle-the-cqrs-decorator-pipeline-adr-014","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"5. Request lifecycle, the CQRS decorator pipeline (ADR-014)","x":"Handlers are thin (one method); every cross-cutting concern is a decorator wrapping the next. Scrutor TryDecorate composes them in reverse registration order (last registered =…"},"1508":{"u":"/docs/onboarding/CONCEPT-MAPS.html#6-event-driven-integration-outbox-dual-dispatch-adr-003--010--021--100","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"6. Event-driven integration, outbox dual-dispatch (ADR-003 / 010 / 021 / 100)","x":"Domain events are captured into an OutboxMessage row in the same transaction as the data (no dual-write bug). The two event kinds then part ways: local domain events are…"},"1509":{"u":"/docs/onboarding/CONCEPT-MAPS.html#7-modular-monolith--extractable-services-adr-006--007--008--012","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"7. Modular monolith → extractable services (ADR-006 / 007 / 008 / 012)","x":"Modules implement IModule and are discovered + Kahn-ordered by ModuleLoader (ADR-059). The same module code runs as a single monolith host or as N service processes behind a YARP…"},"1510":{"u":"/docs/onboarding/CONCEPT-MAPS.html#8-persistence-database-per-service--polyglot-engines-adr-006--018--030","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"8. Persistence, database-per-service + polyglot engines (ADR-006 / 018 / 030)","x":"One sealed context class per engine (SQLServerDbContext, PostgreSQLDbContext, SqliteDbContext, CosmosDbContext) over the abstract ApplicationDbContext, one instance per database.…"},"1511":{"u":"/docs/onboarding/CONCEPT-MAPS.html#9-authentication--authorization-stack","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"9. Authentication & Authorization stack","x":"The auth concern (G08) spans token validation, session cookies, federated sign-in, password hashing, brute-force protection, per-device refresh-session rotation and revocation, a…"},"1512":{"u":"/docs/onboarding/CONCEPT-MAPS.html#10-notifications-three-channels-behind-one-send-pipeline-adr-024--044","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"10. Notifications, three channels behind one send pipeline (ADR-024 / 044)","x":"One use case (SendPushNotificationHandler) writes a durable per-user inbox (optionally scoped to an event via ScopeKey), fires a transient SignalR push, and then an OS-level…"},"1513":{"u":"/docs/onboarding/CONCEPT-MAPS.html#11-ui-write-once-render-everywhere--i18n--theming","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"11. UI, write-once render everywhere + i18n + theming","x":"A page is authored once as a Razor component in a per-module UI library; both the Blazor web host (Server + WASM) and the .NET MAUI host reference the same libraries, so it…"},"1514":{"u":"/docs/onboarding/CONCEPT-MAPS.html#12-adc-business-modules-bounded-contexts-end-to-end","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"12. ADC business modules, bounded contexts end-to-end","x":"Each ADC module is a vertical slice through all layers. Conference is large enough to split across five chapters (G17-G21); Engagement takes two (G22 the bookmark, QR badge…"},"1515":{"u":"/docs/onboarding/CONCEPT-MAPS.html#13-the-adrs-grouped-by-theme","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"13. The ADRs, grouped by theme","x":"Every accepted ADR in Website/docs-src/adr/, clustered by the concern it governs. That directory's README.md is the canonical index and owns the count and range; this map only…"},"1516":{"u":"/docs/onboarding/CONCEPT-MAPS.html#14-the-34-category-evaluation-rubric","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"14. The 34-category evaluation rubric","x":"The lens the guide tags code against ([Rubric §N]). Scored on two axes: Maturity (0-4, process) and Implementation (0-10, substance). Three parts. ---"},"1517":{"u":"/docs/onboarding/CONCEPT-MAPS.html#15-how-the-axes-fit-together-reading-map","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"15. How the axes fit together (reading map)","x":"The guide is organized on two axes at once. This ties the diagrams above back to the guide's navigation. --- - Group-to-group arrows in §3 show the dominant \"builds on\" direction…"},"1518":{"u":"/docs/governance/index.html","d":"Architecture Governance","k":"Architecture Governance","x":"The governance artifacts behind the MMCA platform: the shared 34-category evaluation rubric, and each repo's evidence-based scorecard plus its remediation backlog. Every score…"},"1519":{"u":"/docs/governance/index.html#the-rubric","d":"Architecture Governance","k":"Architecture Governance","t":"The rubric","x":"- Architecture Evaluation Criteria: the 34-category rubric (Maturity 0-4 and Implementation 0-10 per category) that all three application repos are scored against. - Rubric…"},"1520":{"u":"/docs/governance/index.html#scorecards-and-backlogs","d":"Architecture Governance","k":"Architecture Governance","t":"Scorecards and backlogs"},"1521":{"u":"/docs/governance/index.html#how-these-are-maintained","d":"Architecture Governance","k":"Architecture Governance","t":"How these are maintained","x":"Scores are re-verified from source on a cadence: each category is scored by reading the current code, config, and CI (never rolled forward), and any change lands with the…"},"1522":{"u":"/docs/governance/adc-ArchitectureScorecard.html","d":"MMCA.ADC: Architecture Scorecard","k":"Architecture Governance","x":"Canonical, version-controlled scorecard for this repo: the single source of truth for MMCA.ADC's architecture scores, scored against the rubric at…"},"1523":{"u":"/docs/governance/adc-ArchitectureScorecard.html#at-a-glance","d":"MMCA.ADC: Architecture Scorecard","k":"Architecture Governance","t":"At a glance","x":"- Maturity index = Σ(maturity×weight) ÷ Σ(weight×4) = 314 ÷ 324 = 96.9% - Implementation index = Σ(impl×weight) ÷ Σ(weight×10) = 697 ÷ 810 = 86.0% - Weaker axis: Implementation,…"},"1524":{"u":"/docs/governance/adc-ArchitectureScorecard.html#top-5-risks","d":"MMCA.ADC: Architecture Scorecard","k":"Architecture Governance","t":"Top 5 risks","x":"1. Responsive behavior holds the lowest implementation score and sits in both bands: §22 (mat 3 / impl 7, weight 2; the top row of the implementation band at implPriority 4, and…"},"1525":{"u":"/docs/governance/adc-ArchitectureScorecard.html#top-5-strengths","d":"MMCA.ADC: Architecture Scorecard","k":"Architecture Governance","t":"Top 5 strengths","x":"1. Architecture intent is executable, not prose (§34 Governance, mat 4 / impl 9, and §3 Clean Architecture, mat 4 / impl 9): 54 architecture-test classes in…"},"1526":{"u":"/docs/governance/adc-ArchitectureScorecard.html#scorecard","d":"MMCA.ADC: Architecture Scorecard","k":"Architecture Governance","t":"Scorecard","x":"Weighted column = Maturity·weight / Implementation·weight per row. The maturity gap is four categories at maturity 3 (§10, §12, §21, §22); every other category is at maturity 4,…"},"1527":{"u":"/docs/governance/adc-ArchitectureScorecard.html#scoring-notes","d":"MMCA.ADC: Architecture Scorecard","k":"Architecture Governance","t":"Scoring notes","x":"- N/A (excluded from denominators): none. §16 AI-Native Application Architecture is scored because the AI session-scoring feature calls a model in production (the rubric's…"},"1528":{"u":"/docs/governance/adc-ArchitectureScorecard.html#cross-repo-comparison","d":"MMCA.ADC: Architecture Scorecard","k":"Architecture Governance","t":"Cross-repo comparison","x":"How this repo's quality relates to the other consumers (where the framework's quality propagates, where a repo diverges or under-uses it, and where a consumer does better than…"},"1529":{"u":"/docs/governance/adc-RemediationBacklog.html","d":"MMCA.ADC: Architecture Remediation Backlog","k":"Architecture Governance","x":"Derived from ArchitectureScorecard.md (evidence as of 2026-10-01 at MMCA.Common. v1.217.0): Maturity 96.9% (314/324) / Implementation 86.0% (697/810), weight total 81, no N/A…"},"1530":{"u":"/docs/governance/adc-RemediationBacklog.html#open-work-at-a-glance","d":"MMCA.ADC: Architecture Remediation Backlog","k":"Architecture Governance","t":"Open work at a glance"},"1531":{"u":"/docs/governance/adc-RemediationBacklog.html#open-items","d":"MMCA.ADC: Architecture Remediation Backlog","k":"Architecture Governance","t":"Open items","x":"Most criteria are CI-enforced (a frozen contract snapshot that spells out generic arguments and is keyed by the [EventName] wire identity, Common…"},"1532":{"u":"/docs/governance/adc-RemediationBacklog.html#implementation-band","d":"MMCA.ADC: Architecture Remediation Backlog","k":"Architecture Governance","t":"Implementation band","x":"Categories scoring implementation <= 8, ranked by implPriority (target 9). §10, §21 and §22 also hold a maturity-band row; their items are under Open items. Σ implPriority = 34…"},"1533":{"u":"/docs/governance/adc-RemediationBacklog.html#maturity-band","d":"MMCA.ADC: Architecture Remediation Backlog","k":"Architecture Governance","t":"Maturity band","x":"Σ maturity priority = 10 across the 4 rows (3+3+2+2)."},"1534":{"u":"/docs/governance/adc-RemediationBacklog.html#deliberate-and-accepted","d":"MMCA.ADC: Architecture Remediation Backlog","k":"Architecture Governance","t":"Deliberate and accepted","x":"Recorded decisions, not scheduled work. - Single-region deployment (no multi-region failover): accepted in infra/DISASTER-RECOVERY.md, with the single SQL server and single…"},"1535":{"u":"/docs/governance/adc-RemediationBacklog.html#resolved","d":"MMCA.ADC: Architecture Remediation Backlog","k":"Architecture Governance","t":"Resolved"},"1536":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html","d":"Architecture Evaluation Criteria","k":"Architecture Governance","x":"A structured rubric for evaluating the architecture of an enterprise application. Each category defines what is being assessed, concrete criteria to check, red flags that signal…"},"1537":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#how-to-use-this-rubric","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"How to Use This Rubric","x":"Score each category 0–4. Use the same scale everywhere so totals are comparable. Alongside the maturity level, rate how well each category is actually implemented on a finer 0–10…"},"1538":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#1-solid-principles","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"1. SOLID Principles","x":"Intent: Object/module-level design discipline that keeps code flexible and decoupled. Criteria - SRP: each class/handler has one reason to change; no \"god\" services orchestrating…"},"1539":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#2-design-patterns","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"2. Design Patterns","x":"Intent: Appropriate, idiomatic use of patterns, solving real problems, not pattern theater. Criteria - Creational (Factory methods on entities, Builder, Options) used where…"},"1540":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#3-clean-architecture","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"3. Clean Architecture","x":"Intent: Dependencies point inward; business rules are independent of frameworks, UI, and data stores. Criteria - Dependency rule enforced: Domain → (nothing); Application →…"},"1541":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#4-domain-driven-design","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"4. Domain-Driven Design","x":"Intent: The model reflects the business; boundaries follow capability boundaries, not technical layers. Criteria - Ubiquitous language: type/method names match business terms…"},"1542":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#5-vertical-slice-architecture","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"5. Vertical Slice Architecture","x":"Intent: Code is organized by feature/capability, so a change touches one cohesive slice. Criteria - Features grouped by use case (command/query + handler + validator + DTO…"},"1543":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#6-cqrs--event-driven-design","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"6. CQRS & Event-Driven Design","x":"Intent: Reads and writes are separated where it pays off; integration via events is reliable. Criteria - Commands (mutate, return Result) and queries (read, side-effect-free) are…"},"1544":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#7-microservices-readiness","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"7. Microservices Readiness","x":"Intent: Whether services (or future-extractable modules) are independently deployable and own their data. Criteria - Service boundaries align with bounded contexts; one team can…"},"1545":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#8-data-architecture","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"8. Data Architecture","x":"Intent: Persistence, consistency, and migrations are deliberate and safe. Criteria - Transaction boundaries match aggregate boundaries; unit-of-work scope is clear. - Migrations…"},"1546":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#9-api--contract-design","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"9. API & Contract Design","x":"Intent: External and inter-service contracts are clear, stable, and evolvable. Criteria - Consistent resource/endpoint design (REST/minimal APIs/gRPC) with predictable shapes. -…"},"1547":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#10-messaging--integration-architecture","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"10. Messaging & Integration Architecture","x":"Intent: Integration over a broker or an edge gateway is reliable, observable and evolvable: the transport, the failure paths and the long-running processes are deliberate. (§6…"},"1548":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#11-security","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"11. Security","x":"Intent: AuthN/AuthZ, secrets, and data protection are correct by construction. Criteria - Authentication centralized; tokens validated; identity flows documented (e.g.,…"},"1549":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#12-performance--scalability","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"12. Performance & Scalability","x":"Intent: The system meets latency/throughput goals and scales horizontally. Criteria - Async I/O throughout; no sync-over-async; no blocking the request thread. - Hot-path query…"},"1550":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#13-observability--operability","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"13. Observability & Operability","x":"Intent: You can understand and operate the system in production. Criteria - Structured logging with correlation/trace IDs flowing across module/service boundaries. - Distributed…"},"1551":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#14-testability--test-strategy","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"14. Testability & Test Strategy","x":"Intent: The design supports fast, reliable, meaningful tests at the right levels. Criteria - Healthy test pyramid: many fast unit tests on domain/application, fewer integration,…"},"1552":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#15-best-practices--code-quality","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"15. Best Practices & Code Quality","x":"Intent: Day-to-day craftsmanship that keeps the codebase healthy. Criteria - Analyzers at error severity (style, security, threading, maintainability) enforced in CI;…"},"1553":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#16-ai-native-application-architecture","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"16. AI-Native Application Architecture","x":"Intent: Where a product feature calls a language model or an agent, that dependency is governed like any other external system: isolated, versioned, evaluated, observed and…"},"1554":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#17-devops--deployment","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"17. DevOps & Deployment","x":"Intent: Building, releasing, and provisioning are automated, repeatable, and safe. (The local developer experience / inner loop behind this (local orchestration, cross-repo dev,…"},"1555":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#18-ui-architecture--component-design","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"18. UI Architecture & Component Design","x":"Intent: Components are cohesive, reusable, and composed cleanly, the UI has a deliberate structure, not page-sized blobs. Criteria - Container/presentational split: smart…"},"1556":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#19-state-management--data-flow","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"19. State Management & Data Flow","x":"Intent: Client state has a clear owner and predictable flow; server state is cached and invalidated deliberately. Criteria - Single source of truth per piece of state; ownership…"},"1557":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#20-design-system-theming--ui-consistency","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"20. Design System, Theming & UI Consistency","x":"Intent: A coherent visual language enforced by a component library, not re-implemented per screen. Criteria - Component library used consistently (e.g., MudBlazor): teams build…"},"1558":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#21-accessibility-a11y","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"21. Accessibility (a11y)","x":"Intent: The UI is usable by everyone, including assistive-technology users, and ideally enforced, not aspirational. Criteria - Semantic structure: correct…"},"1559":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#22-responsive-design--cross-browserdevice","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"22. Responsive Design & Cross-Browser/Device","x":"Intent: The UI works across viewport sizes, input modes, and supported browsers. Criteria - Fluid/responsive layouts via the design system's grid/breakpoints; no fixed-width…"},"1560":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#23-front-end-performance--rendering","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"23. Front-End Performance & Rendering","x":"Intent: The UI loads and responds fast; rendering work is bounded. (Complements §12: this is the client side.) Criteria - Initial load: bundle/payload size controlled;…"},"1561":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#24-forms-validation--ux-safety","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"24. Forms, Validation & UX Safety","x":"Intent: Data entry is safe, forgiving, and consistent, users don't lose work or get confused by errors. Criteria - Validation parity: client-side validation for fast feedback…"},"1562":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#25-navigation-routing--information-architecture","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"25. Navigation, Routing & Information Architecture","x":"Intent: Users can find their way; routes are meaningful, guarded, and role-aware. Criteria - Route design: clean, bookmarkable, deep-linkable URLs; parameters typed and…"},"1563":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#26-front-end-security","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"26. Front-End Security","x":"Intent: The client doesn't become the weak link, XSS, token handling, and trust boundaries are correct. (Complements §11.) Criteria - Output encoding / XSS: no unsanitized HTML…"},"1564":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#27-internationalization--localization","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"27. Internationalization & Localization","x":"Intent: The UI can be translated and respects culture, if in scope. (Score weight 0–1 if single-locale by design.) Criteria - Externalized strings: UI text in resource files, not…"},"1565":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#28-front-end-testing--quality","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"28. Front-End Testing & Quality","x":"Intent: The UI is verified at the right levels with stable, meaningful tests. (Complements §14.) Criteria - Component tests (e.g., bUnit) for rendering logic, parameters, events,…"},"1566":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#29-resilience-reliability--business-continuity","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"29. Resilience, Reliability & Business Continuity","x":"Intent: The system survives partial failure and recovers from disaster within defined objectives. (Extends the resilience facets of §7/§12 into a first-class recovery story.)…"},"1567":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#30-compliance-privacy--data-governance","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"30. Compliance, Privacy & Data Governance","x":"Intent: Personal and regulated data is classified, governed, and handled lawfully across its lifecycle. (§11 defends against attackers; this answers to regulators.) Criteria -…"},"1568":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#31-cost-efficiency--finops","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"31. Cost Efficiency / FinOps","x":"Intent: Cloud spend is proportional to value and driven by data, not guesswork. (§17 mentions cost; this makes it a first-class axis.) Criteria - Right-sizing: compute/database…"},"1569":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#32-dependency--supply-chain-management","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"32. Dependency & Supply-Chain Management","x":"Intent: Third-party and inter-package dependencies are controlled, auditable, and evolve safely, especially critical for a framework that publishes packages. (Elevates §15's…"},"1570":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#33-developer-experience--inner-loop","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"33. Developer Experience & Inner Loop","x":"Intent: Developers build, run, test, and iterate locally with fast, low-friction feedback. (Promoted out of §17: that scores release/ops automation; this scores the inner loop.)…"},"1571":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#34-architecture-governance--documentation","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"34. Architecture Governance & Documentation","x":"Intent: Decisions are recorded, conformance is enforced, and the system is documented so it stays coherent as it evolves. (Absorbs the former §16 Maintainability & Evolvability…"},"1572":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#appendix-quick-scan-checklist","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"Appendix: Quick-Scan Checklist","x":"A 2-minute triage before the full evaluation: any \"no\" warrants a deeper look. - [ ] Can you draw the dependency graph and is it acyclic and inward-pointing? - [ ] Is the domain…"},"1573":{"u":"/docs/governance/common-ArchitectureScorecard.html","d":"MMCA.Common: Architecture Scorecard","k":"Architecture Governance","x":"Canonical, version-controlled scorecard for this repo: the single source of truth for MMCA.Common's architecture scores. Scored against the rubric at…"},"1574":{"u":"/docs/governance/common-ArchitectureScorecard.html#at-a-glance","d":"MMCA.Common: Architecture Scorecard","k":"Architecture Governance","t":"At a glance","x":"- Maturity index = Σ(maturity×weight) ÷ Σ(weight×4) = 317 ÷ 328 = 96.6% - Implementation index = Σ(impl×weight) ÷ Σ(weight×10) = 705 ÷ 820 = 86.0% - Weaker axis: Implementation…"},"1575":{"u":"/docs/governance/common-ArchitectureScorecard.html#top-5-risks","d":"MMCA.Common: Architecture Scorecard","k":"Architecture Governance","t":"Top 5 risks","x":"1. FinOps execution and governance live downstream, §31 (impl 8, maturity 2, the lowest maturity on the board; a documented accepted cap per the backlog's Deliberate and accepted…"},"1576":{"u":"/docs/governance/common-ArchitectureScorecard.html#top-5-strengths","d":"MMCA.Common: Architecture Scorecard","k":"Architecture Governance","t":"Top 5 strengths","x":"1. Dual-enforced Clean Architecture dependency rule (compile-time + fitness functions), §3 (impl 9): Source/Build/MMCA.Common.LayerEnforcement.targets:1-90 fails the build on…"},"1577":{"u":"/docs/governance/common-ArchitectureScorecard.html#scorecard","d":"MMCA.Common: Architecture Scorecard","k":"Architecture Governance","t":"Scorecard","x":"Weighted column = Maturity·weight / Implementation·weight per row."},"1578":{"u":"/docs/governance/common-ArchitectureScorecard.html#scoring-notes","d":"MMCA.Common: Architecture Scorecard","k":"Architecture Governance","t":"Scoring notes","x":"- N/A (excluded from denominators): none. All 34 rows carry numeric Maturity and Implementation, so Σweight is 82. §16 AI-Native Application Architecture is scored because…"},"1579":{"u":"/docs/governance/common-ArchitectureScorecard.html#cross-repo-comparison","d":"MMCA.Common: Architecture Scorecard","k":"Architecture Governance","t":"Cross-repo comparison","x":"How this repo's quality relates to the other consumers (where the framework's quality propagates, where a repo diverges or under-uses it, and where a consumer does better than…"},"1580":{"u":"/docs/governance/common-RemediationBacklog.html","d":"MMCA.Common: Architecture Remediation Backlog","k":"Architecture Governance","x":"Derived from the scorecard: Maturity 96.6% (317/328) and Implementation 86.0% (705/820), framework v1.218.0, evidence as of 2026-10-01. Tasks are ranked on both scorecard axes,…"},"1581":{"u":"/docs/governance/common-RemediationBacklog.html#open-work-at-a-glance","d":"MMCA.Common: Architecture Remediation Backlog","k":"Architecture Governance","t":"Open work at a glance"},"1582":{"u":"/docs/governance/common-RemediationBacklog.html#open-items","d":"MMCA.Common: Architecture Remediation Backlog","k":"Architecture Governance","t":"Open items","x":"- Gap (maturity): SRP and DIP are enforced automatically: a ratcheted constructor-dependency ceiling is subclassed in Common…"},"1583":{"u":"/docs/governance/common-RemediationBacklog.html#implementation-band","d":"MMCA.Common: Architecture Remediation Backlog","k":"Architecture Governance","t":"Implementation band","x":"Every category at implementation <= 8, ranked by implPriority = max(0, 9 − implementation) × weight. Four of these categories (1, 17, 30, 31) also sit in the maturity band; this…"},"1584":{"u":"/docs/governance/common-RemediationBacklog.html#maturity-band","d":"MMCA.Common: Architecture Remediation Backlog","k":"Architecture Governance","t":"Maturity band","x":"Every category at maturity < 4, ranked by priority = (4 − maturity) × weight. Σ priority = 11 across the 4 maturity-band rows (4 + 3 + 2 + 2)."},"1585":{"u":"/docs/governance/common-RemediationBacklog.html#deliberate-and-accepted","d":"MMCA.Common: Architecture Remediation Backlog","k":"Architecture Governance","t":"Deliberate and accepted","x":"Recorded decisions and deferred findings: each is real, none is scheduled work. The computed maturity priority = (4 − 2) × 2 = 4 is the highest weighted gap of any open category,…"},"1586":{"u":"/docs/governance/common-RemediationBacklog.html#resolved","d":"MMCA.Common: Architecture Remediation Backlog","k":"Architecture Governance","t":"Resolved","x":"Categories at maturity 4 AND implementation = 9 (protect them, do not regress), then the closed items inside categories that are still open."},"1587":{"u":"/docs/governance/store-ArchitectureScorecard.html","d":"MMCA.Store: Architecture Scorecard","k":"Architecture Governance","x":"Canonical, version-controlled scorecard for this repo: the single source of truth for MMCA.Store's architecture scores. Scored against the rubric at…"},"1588":{"u":"/docs/governance/store-ArchitectureScorecard.html#at-a-glance","d":"MMCA.Store: Architecture Scorecard","k":"Architecture Governance","t":"At a glance","x":"- Maturity index = Σ(maturity×weight) ÷ Σ(weight×4) = 308 ÷ 316 = 97.5% - Implementation index = Σ(impl×weight) ÷ Σ(weight×10) = 659 ÷ 790 = 83.4% - Weaker axis: Implementation…"},"1589":{"u":"/docs/governance/store-ArchitectureScorecard.html#top-5-risks","d":"MMCA.Store: Architecture Scorecard","k":"Architecture Governance","t":"Top 5 risks","x":"1. An internal gRPC edge returns customer PII to any caller: §11 (impl 7, weight 3): Identity maps CustomersGrpcService with .AllowAnonymous(), and it returns email and full name…"},"1590":{"u":"/docs/governance/store-ArchitectureScorecard.html#top-5-strengths","d":"MMCA.Store: Architecture Scorecard","k":"Architecture Governance","t":"Top 5 strengths","x":"1. Clean Architecture + DDD + CQRS depth, fitness-enforced: §3/§4 (impl 9): inherited framework substance, guarded by the shared NetArchTest suite (53 test classes,…"},"1591":{"u":"/docs/governance/store-ArchitectureScorecard.html#scorecard","d":"MMCA.Store: Architecture Scorecard","k":"Architecture Governance","t":"Scorecard","x":"Weighted = Maturity·weight / Implementation·weight."},"1592":{"u":"/docs/governance/store-ArchitectureScorecard.html#scoring-notes","d":"MMCA.Store: Architecture Scorecard","k":"Architecture Governance","t":"Scoring notes","x":"- Two axes per category: Maturity (0-4, process/governance) and Implementation (0-10, substance/execution). The indices are computed deterministically from the table: every…"},"1593":{"u":"/docs/governance/store-ArchitectureScorecard.html#cross-repo-comparison","d":"MMCA.Store: Architecture Scorecard","k":"Architecture Governance","t":"Cross-repo comparison","x":"How Store relates to MMCA.Common (the framework) and MMCA.ADC (the sibling consumer) is maintained once, for all three repos, in the workspace-internal…"},"1594":{"u":"/docs/governance/store-RemediationBacklog.html","d":"MMCA.Store: Architecture Remediation Backlog","k":"Architecture Governance","x":"Derived from ArchitectureScorecard.md: Maturity 97.5% (308/316) / Implementation 83.4% (659/790), evidence as of 2026-10-01 at MMCA.Common. v1.217.0 (all 17 packages lockstep,…"},"1595":{"u":"/docs/governance/store-RemediationBacklog.html#open-work-at-a-glance","d":"MMCA.Store: Architecture Remediation Backlog","k":"Architecture Governance","t":"Open work at a glance"},"1596":{"u":"/docs/governance/store-RemediationBacklog.html#open-items","d":"MMCA.Store: Architecture Remediation Backlog","k":"Architecture Governance","t":"Open items","x":"- [ ] 11 Security, implementation 7: internal trust and secret handling. Four red flags hold the row at 7. The Identity customer gRPC edge is anonymous and returns email and full…"},"1597":{"u":"/docs/governance/store-RemediationBacklog.html#implementation-band","d":"MMCA.Store: Architecture Remediation Backlog","k":"Architecture Governance","t":"Implementation band","x":"21 categories, 52 gap points, the largest of the three repos. Levers are cited only where this ledger or the scorecard records one; an unnamed lever is named at the next…"},"1598":{"u":"/docs/governance/store-RemediationBacklog.html#maturity-band","d":"MMCA.Store: Architecture Remediation Backlog","k":"Architecture Governance","t":"Maturity band","x":"3 categories, 8 gap points. Ties break by priority desc, then weight desc, then category asc."},"1599":{"u":"/docs/governance/store-RemediationBacklog.html#deliberate-and-accepted","d":"MMCA.Store: Architecture Remediation Backlog","k":"Architecture Governance","t":"Deliberate and accepted","x":"- §16 AI-Native Application Architecture is N/A (rubric v2, ADR-110): no product feature calls a language model, so its weight 2 leaves both denominators until one does. - 5…"},"1600":{"u":"/docs/governance/store-RemediationBacklog.html#resolved","d":"MMCA.Store: Architecture Remediation Backlog","k":"Architecture Governance","t":"Resolved"},"1601":{"u":"/docs/guides/index.html","d":"Guides & Specifications","k":"Guides & Specifications","x":"As of: 2026-09-06. The narrative documentation for the MMCA platform: adoption guides, business specifications, workflow analyses, and per-concern reference notes. Files are…"},"1602":{"u":"/docs/guides/index.html#framework-mmcacommon","d":"Guides & Specifications","k":"Guides & Specifications","t":"Framework (MMCA.Common)","x":"- Capability Catalog: everything an adopting team gets, section by section (packages, scaffolding, the architectural core, the extraction path, data, messaging, API, identity,…"},"1603":{"u":"/docs/guides/index.html#mmcastore-e-commerce","d":"Guides & Specifications","k":"Guides & Specifications","t":"MMCA.Store (e-commerce)","x":"- Business Specification - Business Workflow Analysis - Navigation Flow - Manual Screen-Reader Pass Runbook"},"1604":{"u":"/docs/guides/index.html#mmcaadc-conference","d":"Guides & Specifications","k":"Guides & Specifications","t":"MMCA.ADC (conference)","x":"- Business Specifications - Navigation Flow - Manual Screen-Reader Pass Runbook - Integration-Test Tier Rework Plan Related reading: the Architecture Decision Records and the…"},"1605":{"u":"/docs/guides/adc-ACCESSIBILITY-SCREENREADER-PASS.html","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","x":"As of: 2026-07-20. The automated layer (axe-core WCAG 2.1 AA scans in Tests/E2E/MMCA.ADC.E2E.Tests/AccessibilityTests.cs plus the shared Login/Register/Profile bases in…"},"1606":{"u":"/docs/guides/adc-ACCESSIBILITY-SCREENREADER-PASS.html#tools","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","t":"Tools","x":"Run against the app started via Aspire (dotnet run --project Source/Hosting/MMCA.ADC.AppHost), reaching the UI through the Gateway. Test with the keyboard only (no mouse) for the…"},"1607":{"u":"/docs/guides/adc-ACCESSIBILITY-SCREENREADER-PASS.html#what-to-verify-on-every-flow","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","t":"What to verify on every flow","x":"1. Landmarks and headings. The SR's landmark/heading list (NVDA Insert+F7) exposes a logical banner / navigation / main structure and a sensible h1...hN outline (one h1 per…"},"1608":{"u":"/docs/guides/adc-ACCESSIBILITY-SCREENREADER-PASS.html#flows-to-cover-mirror-the-automated-accessibilitytests-plus-the-role-journeys","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","t":"Flows to cover (mirror the automated AccessibilityTests plus the role journeys)"},"1609":{"u":"/docs/guides/adc-ACCESSIBILITY-SCREENREADER-PASS.html#results-log","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","t":"Results log","x":"Record one row per pass. A flow with any unresolved blocker is a FAIL (open a backlog item for it)."},"1610":{"u":"/docs/guides/adc-ACCESSIBILITY-SCREENREADER-PASS.html#after-a-pass","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","t":"After a pass","x":"- File any defect as a remediation item; cross-link it from the §21 row's evidence. - Update the dated row above so the scorecard can cite a real, current manual pass (this is…"},"1611":{"u":"/docs/guides/adc-IntegrationTestReworkPlan.html","d":"Integration-Test Tier Rework Plan (RemediationBacklog #14)","k":"Guides & Specifications","x":"As of: 2026-08-30. Status: complete (Phase 4 broker-transport tier landed 2026-07-06; Phase 5 residual = coverlet only). - Phase 0 ✅: Tests/WebAPI revived as MMCA.Common.API…"},"1612":{"u":"/docs/guides/adc-IntegrationTestReworkPlan.html#recommended-strategy-two-tiers","d":"Integration-Test Tier Rework Plan (RemediationBacklog #14)","k":"Guides & Specifications","t":"Recommended strategy: two tiers","x":"1. Primary: per-service WebApplicationFactory : one in-process host per service (Identity / Conference / Engagement), cross-service edges mocked. AddBrokerMessaging…"},"1613":{"u":"/docs/guides/adc-IntegrationTestReworkPlan.html#three-code-facts-that-shape-the-rework-verified","d":"Integration-Test Tier Rework Plan (RemediationBacklog #14)","k":"Guides & Specifications","t":"Three code facts that shape the rework (verified)","x":"- Only Conference.Service is WAF-incompatible: it ends with StartAsync() + self-HTTP/2 WarmupViaHttpAsync + WaitForShutdownAsync(). Identity/Engagement/Notification use…"},"1614":{"u":"/docs/guides/adc-IntegrationTestReworkPlan.html#databases","d":"Integration-Test Tier Rework Plan (RemediationBacklog #14)","k":"Guides & Specifications","t":"Databases","x":"- SQLite in-memory for the fast bulk tier (no Docker, CI-friendly). A SQLite source with no migrations assembly has its schema created at startup by InitializeDatabasesAsync,…"},"1615":{"u":"/docs/guides/adc-IntegrationTestReworkPlan.html#project-structure","d":"Integration-Test Tier Rework Plan (RemediationBacklog #14)","k":"Guides & Specifications","t":"Project structure","x":"- One WAF test project per service (MMCA.ADC.{Identity,Conference,Engagement}.IntegrationTests): can't reference two Program-bearing hosts in one project. - One…"},"1616":{"u":"/docs/guides/adc-IntegrationTestReworkPlan.html#ci","d":"Integration-Test Tier Rework Plan (RemediationBacklog #14)","k":"Guides & Specifications","t":"CI","x":"- Add the SQLite per-service tier to CI.slnf (seconds, no Docker) → restores the authz/CRUD merge gate (11) with no workflow change. - Keep the container-based MsSql + RabbitMQ…"},"1617":{"u":"/docs/guides/adc-IntegrationTestReworkPlan.html#phased-sequencing-fastest-win-first","d":"Integration-Test Tier Rework Plan (RemediationBacklog #14)","k":"Guides & Specifications","t":"Phased sequencing (fastest win first)","x":"- Phase 0: re-home WebAPI.Tests middleware unit tests; drop the dead WebAPI reference; re-add to slnx+CI.slnf. ~16 tests green; removes a non-building project (16). - Phase 1:…"},"1618":{"u":"/docs/guides/adc-IntegrationTestReworkPlan.html#key-risks","d":"Integration-Test Tier Rework Plan (RemediationBacklog #14)","k":"Guides & Specifications","t":"Key risks","x":"- The non-Identity JwtBearerOptions in-process override is the trickiest piece: prove it on one Conference auth test before fanning out. - SQLite vs SQL-Server fidelity (owned…"},"1619":{"u":"/docs/guides/adc-IntegrationTestReworkPlan.html#critical-files","d":"Integration-Test Tier Rework Plan (RemediationBacklog #14)","k":"Guides & Specifications","t":"Critical files","x":"- Tests/Integration/MMCA.ADC.IntegrationTests/Infrastructure/TestWebApplicationFactory.cs (combined-host factory → split into per-service fixtures; its JWT config block is the…"},"1620":{"u":"/docs/guides/adc-NavigationFlow.html","d":"Navigation Flow","k":"Guides & Specifications","x":"As of: 2026-09-17. This document maps the site navigation flow for each actor in the MMCA.ADC application. Each mermaid diagram shows the pages accessible to that actor and the…"},"1621":{"u":"/docs/guides/adc-NavigationFlow.html#actors","d":"Navigation Flow","k":"Guides & Specifications","t":"Actors","x":"Roles & menu: the role vocabulary is Organizer, ContentEditor and Attendee (the default, RoleNames). Organizer holds every capability; ContentEditor holds the catalog-curation…"},"1622":{"u":"/docs/guides/adc-NavigationFlow.html#1-anonymous-user","d":"Navigation Flow","k":"Guides & Specifications","t":"1. Anonymous User","x":"Pages accessible without authentication: home, login, register, the two password-reset pages, and all public conference pages. ---"},"1623":{"u":"/docs/guides/adc-NavigationFlow.html#2-attendee-authenticated-user","d":"Navigation Flow","k":"Guides & Specifications","t":"2. Attendee (Authenticated User)","x":"Inherits all anonymous pages. Gains access to profile, feedback submission, and session bookmarking. Unauthenticated visitors are redirected to login. ---"},"1624":{"u":"/docs/guides/adc-NavigationFlow.html#3-speaker","d":"Navigation Flow","k":"Guides & Specifications","t":"3. Speaker","x":"Inherits all attendee pages. Gains access to the speaker dashboard for managing their own profile, viewing assigned sessions, and reviewing feedback ratings. ---"},"1625":{"u":"/docs/guides/adc-NavigationFlow.html#4-organizer","d":"Navigation Flow","k":"Guides & Specifications","t":"4. Organizer","x":"Authenticated users with the Organizer role. Inherits all attendee and public pages. Adds CRUD management for every conference entity (events, sessions, speakers, categories,…"},"1626":{"u":"/docs/guides/adc-NavigationFlow.html#5-functionality-flows-attendee--speaker","d":"Navigation Flow","k":"Guides & Specifications","t":"5. Functionality Flows (Attendee & Speaker)","x":"The diagrams in sections 1-4 map which pages each actor can reach. The diagrams below map how attendees and speakers accomplish each functionality, including inline actions…"},"1627":{"u":"/docs/guides/adc-NavigationFlow.html#navigation-patterns","d":"Navigation Flow","k":"Guides & Specifications","t":"Navigation Patterns","x":"- Unauthenticated users accessing protected pages are redirected to /login via the RedirectToLogin component. - Successful login/register redirects to Home (/) with a full page…"},"1628":{"u":"/docs/guides/adc-specifications.html","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","x":"As of: 2026-09-17. ---"},"1629":{"u":"/docs/guides/adc-specifications.html#1-system-overview","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"1. System Overview","x":"ADC is a conference management system for the Atlanta Developers Conference. It provides backend services to manage multi-day conference events, sessions, speakers, rooms,…"},"1630":{"u":"/docs/guides/adc-specifications.html#2-domain-model","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"2. Domain Model","x":"Relationships: - Owns many Rooms (child entities) - Owns many EventSpeakers (child join entities linking Event ↔ Speaker) - Owns many EventQuestionAnswers (child feedback…"},"1631":{"u":"/docs/guides/adc-specifications.html#3-business-rules","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"3. Business Rules","x":"Reading guide: Some rules reference other rules defined later in the document (e.g., BR-63, BR-80 are defined in Section 10). Forward references use the BR- numbering…"},"1632":{"u":"/docs/guides/adc-specifications.html#4-use-cases--business-processes","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"4. Use Cases / Business Processes","x":"See UC-30 (Registration) and UC-31 (Login) in Section 12.2 for the current email + password authentication flows. UC-34 (Request password reset) and UC-35 (Reset password) in the…"},"1633":{"u":"/docs/guides/adc-specifications.html#5-workflows--state-transitions","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"5. Workflows & State Transitions","x":"The Session.Status field is a free-text string imported from Sessionize. Default: null (for manually created sessions). Known Sessionize values: Accepted, Waitlisted, Accept…"},"1634":{"u":"/docs/guides/adc-specifications.html#6-events--side-effects","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"6. Events & Side Effects","x":"Domain events are raised for entity mutations. Not all events have registered handlers: events without handlers serve as extension points for future requirements. Note: Only…"},"1635":{"u":"/docs/guides/adc-specifications.html#7-business-constraints--invariants","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"7. Business Constraints & Invariants","x":"---"},"1636":{"u":"/docs/guides/adc-specifications.html#8-external-integrations-business-perspective","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"8. External Integrations (Business Perspective)","x":"---"},"1637":{"u":"/docs/guides/adc-specifications.html#9-glossary","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"9. Glossary","x":"---"},"1638":{"u":"/docs/guides/adc-specifications.html#ddd-structural-summary","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"DDD Structural Summary","x":"Why three bounded contexts instead of two: The original Events + Identity split grouped all conference-related entities together regardless of write profile. Separating…"},"1639":{"u":"/docs/guides/adc-specifications.html#10-specification-clarifications--addenda","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"10. Specification Clarifications & Addenda","x":"This section addresses gaps, ambiguities, and implicit design decisions identified during implementation review. New business rules are numbered BR-61+. API contract…"},"1640":{"u":"/docs/guides/adc-specifications.html#11-api-contract-specifications","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"11. API Contract Specifications","x":"This section documents API design decisions that apply across all endpoints. --- All error responses use the RFC 9457 ProblemDetails format (the successor to RFC 7807, same…"},"1641":{"u":"/docs/guides/adc-specifications.html#12-authentication--identity-architecture","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"12. Authentication & Identity Architecture","x":"This section defines the authentication mechanism for both the Web UI (Blazor) and MAUI (mobile) clients, which share a common Razor class library. It replaces the device-based…"},"1642":{"u":"/docs/guides/common-ACCESSIBILITY.html","d":"Accessibility (rubric §21)","k":"Guides & Specifications","x":"As of: 2026-07-20. The shared MMCA.Common.UI surface targets WCAG 2.1 AA. Accessibility is enforced two ways: an automated axe-core gate in CI (the bulk of coverage) and a…"},"1643":{"u":"/docs/guides/common-ACCESSIBILITY.html#automated-coverage-axe-core-wcag-21-aa","d":"Accessibility (rubric §21)","k":"Guides & Specifications","t":"Automated coverage (axe-core, WCAG 2.1 AA)","x":"The ui-e2e CI job runs Playwright + axe-core against the backend-less gallery; chromium is the blocking merge gate (firefox/webkit advisory). Scanned states: Component render is…"},"1644":{"u":"/docs/guides/common-ACCESSIBILITY.html#manual-screen-reader-pass","d":"Accessibility (rubric §21)","k":"Guides & Specifications","t":"Manual screen-reader pass","x":"Automation cannot judge reading order, focus management, or announcement quality, so the shared surface is walked manually. Checklist (re-run on any change to MainLayout, the…"},"1645":{"u":"/docs/guides/common-ACCESSIBILITY.html#known-limitations-tracked","d":"Accessibility (rubric §21)","k":"Guides & Specifications","t":"Known limitations (tracked)","x":"- ~~Dark-mode contrast (§20, not §21).~~ RESOLVED (2026-07-11). The two dark-palette WCAG AA contrast failures the prototype scan flagged (filled-primary button label ~2.65:1 on…"},"1646":{"u":"/docs/guides/common-BUILD-BY-HAND.html","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","x":"As of: 2026-09-13. This is the long-form walkthrough: every project, every file, and every load-bearing line that goes into an application on the MMCA.Common framework, in the…"},"1647":{"u":"/docs/guides/common-BUILD-BY-HAND.html#what-you-will-build","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"What you will build","x":"A modular monolith with one business module and two hosts: - Orders (your business module): an Order aggregate with OrderComment children, opened through a Result-returning…"},"1648":{"u":"/docs/guides/common-BUILD-BY-HAND.html#phase-0-prerequisites-and-decisions","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"Phase 0: Prerequisites and decisions","x":"Install: - .NET 10 SDK (the framework targets net10.0 with LangVersion: preview for C extension types). - SQL Server reachable locally (LocalDB, a container, or the one Aspire…"},"1649":{"u":"/docs/guides/common-BUILD-BY-HAND.html#phase-1-create-the-solution-and-the-build-plumbing","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"Phase 1: Create the solution and the build plumbing","x":"Scaffolded. dotnet new mmca-app writes every file in this phase. Read it to know what each one does; you do not need to type any of it. The plumbing files are the load-bearing,…"},"1650":{"u":"/docs/guides/common-BUILD-BY-HAND.html#phase-2-scaffold-the-module-project-set","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"Phase 2: Scaffold the module project set","x":"Scaffolded. dotnet new mmca-app creates this project set for your first module, and pwsh build/add-module.ps1 adds another one later: it drives dotnet new mmca-module and then…"},"1651":{"u":"/docs/guides/common-BUILD-BY-HAND.html#phase-3-the-vertical-slice-end-to-end-the-heart-of-it","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"Phase 3: The vertical slice end-to-end (the heart of it)","x":"Scaffolded. The generated module already contains this slice and six more, worked end to end. dotnet new mmca-command and dotnet new mmca-query add another one. This phase is the…"},"1652":{"u":"/docs/guides/common-BUILD-BY-HAND.html#phase-4-dbcontext-model-and-migrations","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"Phase 4: DbContext model and migrations","x":"Partly scaffolded. The migrations project and its design-time factory are generated. Running dotnet ef migrations add InitialCreate is still yours, and for a module added later…"},"1653":{"u":"/docs/guides/common-BUILD-BY-HAND.html#phase-5-compose-the-monolith-host-and-run-it","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"Phase 5: Compose the monolith host and run it","x":"Scaffolded. Both hosts, the AppHost, and the .resx pairs are generated. Read this phase before you touch any of them: the DI sequence, WaitFor(sql) rather than the database…"},"1654":{"u":"/docs/guides/common-BUILD-BY-HAND.html#phase-6-tests-and-the-architecture-fitness-map","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"Phase 6: Tests and the architecture-fitness map","x":"Scaffolded, with one deliberate gap. All three test projects and the map are generated. The IntegrationEventContractTests subclass is NOT: its frozen literal lists members…"},"1655":{"u":"/docs/guides/common-BUILD-BY-HAND.html#phase-7-upgrading-the-framework-version","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"Phase 7: Upgrading the framework version","x":"Not scaffolded. dotnet new mmca-app --framework-version picks the version you START on; moving to a later one is this phase. When a new MMCA.Common release ships, upgrade in one…"},"1656":{"u":"/docs/guides/common-BUILD-BY-HAND.html#phase-8-extract-a-module-into-its-own-service-the-payoff","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"Phase 8: Extract a module into its own service (the payoff)","x":"Not scaffolded. The generated solution carries the plumbing (the .Contracts proto convention and the .Service OpenAPI block in Directory.Build.props), but the extraction itself…"},"1657":{"u":"/docs/guides/common-BUILD-BY-HAND.html#verification-checklist","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"Verification checklist","x":"1. Build green: dotnet build Contoso.Support.slnx with no warnings (TreatWarningsAsErrors + five analyzers). This is the primary automatable gate. 2. Unit + architecture tests…"},"1658":{"u":"/docs/guides/common-BUILD-BY-HAND.html#where-to-look-next","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"Where to look next","x":"- Getting Started: the one-command path that writes phases 1 through 6 for you. If you are starting a new solution rather than adding the framework to an existing one, that is…"},"1659":{"u":"/docs/guides/common-CAPABILITIES.html","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","x":"As of: 2026-09-10 (framework v1.187.0). Everything an adopting team gets from the MMCA.Common framework: a .NET 10 package set for building a modular monolith on DDD, Clean…"},"1660":{"u":"/docs/guides/common-CAPABILITIES.html#package-map","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Package map","x":"Seventeen packages, one version number. The layer rule is enforced at compile time inside the framework and at test time in every consumer: API/Grpc depend on Infrastructure,…"},"1661":{"u":"/docs/guides/common-CAPABILITIES.html#getting-started-and-scaffolding","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Getting started and scaffolding","x":"From zero to a green, warning-free, tested solution before writing any business logic. - One-command solution scaffold. dotnet new install MMCA.Templates then dotnet new mmca-app…"},"1662":{"u":"/docs/guides/common-CAPABILITIES.html#architectural-core","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Architectural core","x":"The opinionated backbone: errors as values, one sealed pipeline, DDD building blocks, and module composition. - Result pattern end to end. Result / Result with nine ErrorType…"},"1663":{"u":"/docs/guides/common-CAPABILITIES.html#monolith-now-services-later","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Monolith now, services later","x":"The framework's central promise, and it is a tested property, not a slogan. - Host-only extraction. Turning a module into its own service changes hosting code only; Domain,…"},"1664":{"u":"/docs/guides/common-CAPABILITIES.html#data-and-persistence","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Data and persistence","x":"EF Core with the cross-cutting concerns every production system eventually rebuilds, already built. - Multi-database routing. Every entity resolves to a DataSourceKey (engine,…"},"1665":{"u":"/docs/guides/common-CAPABILITIES.html#messaging-and-eventing","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Messaging and eventing","x":"Reliable events with two deliberately distinct paths: in-process domain events and durable integration events. - Transactional outbox. The save interceptor writes every captured…"},"1666":{"u":"/docs/guides/common-CAPABILITIES.html#http-api-surface","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"HTTP API surface","x":"Controllers and middleware that erase most CRUD endpoint code and keep the pipeline order under test. - Five generic read endpoints for free. EntityControllerBase gives list,…"},"1667":{"u":"/docs/guides/common-CAPABILITIES.html#identity-auth-and-authorization","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Identity, auth, and authorization","x":"A full identity building-block set you compose when you want it; a fresh app runs issuer-less until then. - RS256 + JWKS + OIDC discovery across services. TokenService signs with…"},"1668":{"u":"/docs/guides/common-CAPABILITIES.html#caching-resilience-and-performance","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Caching, resilience, and performance","x":"- Declarative handler caching. A query implements IQueryCacheable, its invalidating commands implement ICacheInvalidating, and the pipeline does the rest; tenant-scoped keys are…"},"1669":{"u":"/docs/guides/common-CAPABILITIES.html#ui-blazor-web-desktop-and-mobile","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"UI: Blazor web, desktop, and mobile","x":"One shared component layer serving Blazor Server, WASM, and MAUI hybrid heads on Android, iOS, Mac Catalyst, and Windows. - Module-composed application shell. AddUIModule() scans…"},"1670":{"u":"/docs/guides/common-CAPABILITIES.html#hosting-orchestration-and-operations","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Hosting, orchestration, and operations","x":"Aspire-first local orchestration and one-line production plumbing. - AppHost DSL. Thirteen extensions: WithSQLServerDataSource, WithCosmosDataSource, WithSqliteDataSource…"},"1671":{"u":"/docs/guides/common-CAPABILITIES.html#testing-and-quality-gates","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Testing and quality gates","x":"The framework ships its own enforcement: adopters subclass, and drift fails the build. - 124 test methods across 47 abstract bases. Thirty-seven are parameterized by your…"},"1672":{"u":"/docs/guides/common-CAPABILITIES.html#compliance-and-privacy","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Compliance and privacy","x":"- PII handling. [Pii] marks personal data; the audit trail redacts marked values at capture so it never becomes a second copy erasure has to chase; PiiRedactor (Redact,…"},"1673":{"u":"/docs/guides/common-CAPABILITIES.html#governance-versioning-and-supply-chain","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Governance, versioning, and supply chain","x":"- 117 ADRs. Every framework pattern is documented as an architecture decision record with context and consequences, published publicly and indexed in one place; adopters inherit…"},"1674":{"u":"/docs/guides/common-CAPABILITIES.html#documentation-library","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Documentation library","x":"This library holds ten framework guides, the ADR index, the governance rubric with scorecards, and a chapter-per-subsystem onboarding walkthrough. - Getting Started. Nothing to a…"},"1675":{"u":"/docs/guides/common-CAPABILITIES.html#constraints-worth-knowing","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Constraints worth knowing","x":"Design choices an adopter should read before sizing a plan around them. None is a defect; each is documented in source or an ADR. - The outbox is off in in-process mode. With…"},"1676":{"u":"/docs/guides/common-COST.html","d":"Cost & FinOps Notes (rubric §31)","k":"Guides & Specifications","x":"As of: 2026-09-02. MMCA.Common is a library, so it cannot provision anything: right-sizing, scale rules, budgets, and per-service cost attribution live in the consumer apps' IaC…"},"1677":{"u":"/docs/guides/common-COST.html#what-the-framework-does-for-cost","d":"Cost & FinOps Notes (rubric §31)","k":"Guides & Specifications","t":"What the framework does for cost","x":"- Telemetry ingestion is the real line item, so high-volume / low-value spans are dropped. OutboxPollFilterProcessor (MMCA.Common.Aspire) suppresses the recurring OutboxPoll…"},"1678":{"u":"/docs/guides/common-COST.html#recommended-consumer-defaults-set-these-downstream","d":"Cost & FinOps Notes (rubric §31)","k":"Guides & Specifications","t":"Recommended consumer defaults (set these downstream)","x":"- Telemetry retention & sampling. Tune Log Analytics retention to the minimum the consumer's compliance window allows, and set Telemetry:TracesSampleRatio (the built-in…"},"1679":{"u":"/docs/guides/common-COST.html#cost-attribution--guardrail-samples-distilled-from-mmcaadc","d":"Cost & FinOps Notes (rubric §31)","k":"Guides & Specifications","t":"Cost-attribution & guardrail samples (distilled from MMCA.ADC)","x":"These belong in the consumer's IaC, not the library, but the framework documents the shape so every consumer attributes spend and guards surges the same way. The worked, deployed…"},"1680":{"u":"/docs/guides/common-COST.html#out-of-scope-for-the-framework-by-design","d":"Cost & FinOps Notes (rubric §31)","k":"Guides & Specifications","t":"Out of scope for the framework (by design)","x":"Provisioning, scale rules, budgets, per-service cost attribution, and surge/revert automation are consumer/IaC concerns and are not added to the library: see also ADR-009…"},"1681":{"u":"/docs/guides/common-ECOMMERCE-SAMPLE.html","d":"Build MMCA.ECommerce: a Two-Module Store from the Templates","k":"Guides & Specifications","x":"As of: 2026-08-06. MMCA.ECommerce is the simplest e-commerce application on the MMCA.Common framework: a Products catalog module and an Orders module with line items, behind a…"},"1682":{"u":"/docs/guides/common-ECOMMERCE-SAMPLE.html#before-you-start","d":"Build MMCA.ECommerce: a Two-Module Store from the Templates","k":"Guides & Specifications","t":"Before you start","x":"- .NET 10 SDK (the framework targets net10.0 with LangVersion: preview). - Docker Desktop (Aspire provisions SQL Server as a container). - EF Core tools: dotnet tool install…"},"1683":{"u":"/docs/guides/common-ECOMMERCE-SAMPLE.html#2-generate-the-solution-with-the-products-module","d":"Build MMCA.ECommerce: a Two-Module Store from the Templates","k":"Guides & Specifications","t":"2. Generate the solution with the Products module","x":"Five options do most of this guide's old work. Three remove an axis a catalog product does not have, and the code for an axis you turn off is never generated: --flat drops the…"},"1684":{"u":"/docs/guides/common-ECOMMERCE-SAMPLE.html#3-add-the-orders-module","d":"Build MMCA.ECommerce: a Two-Module Store from the Templates","k":"Guides & Specifications","t":"3. Add the Orders module","x":"build/add-module.ps1 ships inside the solution you just generated. It runs dotnet new mmca-module with the shape options passed through, then performs every wire-up the template…"},"1685":{"u":"/docs/guides/common-ECOMMERCE-SAMPLE.html#4-reshape-products-into-a-catalog-product","d":"Build MMCA.ECommerce: a Two-Module Store from the Templates","k":"Guides & Specifications","t":"4. Reshape Products into a catalog product","x":"The scaffolded module arrives as the template's worked example in your namespaces, already shaped by the flags in step 2: no children, no status, no requester, Name instead of…"},"1686":{"u":"/docs/guides/common-ECOMMERCE-SAMPLE.html#5-reshape-orders-into-an-order-with-line-items","d":"Build MMCA.ECommerce: a Two-Module Store from the Templates","k":"Guides & Specifications","t":"5. Reshape Orders into an order with line items","x":"Orders keeps the child-collection pattern the template scaffolded, retargeted. -Child Item already did the naming (the entity is OrderItem, the slices are AddItem / EditItem /…"},"1687":{"u":"/docs/guides/common-ECOMMERCE-SAMPLE.html#6-point-the-ui-at-the-new-domain","d":"Build MMCA.ECommerce: a Two-Module Store from the Templates","k":"Guides & Specifications","t":"6. Point the UI at the new domain","x":"The scaffolded Blazor host already has the load-bearing parts: the typed ECommerceApiClient calling the API server-side through Aspire service discovery (no CORS, no token), the…"},"1688":{"u":"/docs/guides/common-ECOMMERCE-SAMPLE.html#7-create-the-migrations","d":"Build MMCA.ECommerce: a Two-Module Store from the Templates","k":"Guides & Specifications","t":"7. Create the migrations","x":"Neither module has a migration yet: any shape flag makes mmca-app drop the template's sample one (it described the sample shape), and -SkipMigration deferred the Orders one to…"},"1689":{"u":"/docs/guides/common-ECOMMERCE-SAMPLE.html#8-the-two-one-time-fixups-then-run-it","d":"Build MMCA.ECommerce: a Two-Module Store from the Templates","k":"Guides & Specifications","t":"8. The two one-time fixups, then run it","x":"Apply the two fixups the scaffold deliberately leaves to you (they are name-dependent, so no generated value could be right). First, sort the using directives and the identifier…"},"1690":{"u":"/docs/guides/common-ECOMMERCE-SAMPLE.html#verification-checklist","d":"Build MMCA.ECommerce: a Two-Module Store from the Templates","k":"Guides & Specifications","t":"Verification checklist","x":"1. Baseline green immediately after mmca-app, before any edit: 81 tests. 2. After build/add-module.ps1: still green at 99 tests, both modules' scaffolded suites running. 3. After…"},"1691":{"u":"/docs/guides/common-ECOMMERCE-SAMPLE.html#where-to-look-next","d":"Build MMCA.ECommerce: a Two-Module Store from the Templates","k":"Guides & Specifications","t":"Where to look next","x":"- MMCA.ECommerce: the finished result of this guide, build- and test-verified. - Getting started: the single-module path, the vertical-slice templates (mmca-command /…"},"1692":{"u":"/docs/guides/common-GETTING-STARTED.html","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","x":"As of: 2026-10-01 (MMCA.Templates 1.12.0, framework v1.218.0). MMCA.Common is a .NET 10 framework for DDD, Clean Architecture, and CQRS, shipped as a set of lockstep-versioned…"},"1693":{"u":"/docs/guides/common-GETTING-STARTED.html#before-you-start","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"Before you start","x":"- .NET 10 SDK. The framework targets net10.0 with LangVersion: preview for C extension types. - Docker Desktop. Aspire provisions SQL Server as a container, so you do not install…"},"1694":{"u":"/docs/guides/common-GETTING-STARTED.html#1-install-the-template-pack","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"1. Install the template pack","x":"Four templates arrive: mmca-app (a whole solution), mmca-module (a business module across all five layers), and mmca-command / mmca-query (a single vertical slice)."},"1695":{"u":"/docs/guides/common-GETTING-STARTED.html#2-generate-the-solution","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"2. Generate the solution","x":"Three names, and they are independent: the solution (also your root namespace), the first module in plural PascalCase, and that module's aggregate root in singular PascalCase.…"},"1696":{"u":"/docs/guides/common-GETTING-STARTED.html#3-build-and-test-before-you-change-anything","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"3. Build and test before you change anything","x":"That is a warning-free build with TreatWarningsAsErrors and all five analyzers at error severity, and a passing test run including the architecture-fitness rules, with no…"},"1697":{"u":"/docs/guides/common-GETTING-STARTED.html#4-check-the-first-migration","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"4. Check the first migration","x":"The scaffold ships the migrations project, its design-time factory, and (in the default shape) the sample's migrations already renamed for your aggregate. Look inside…"},"1698":{"u":"/docs/guides/common-GETTING-STARTED.html#5-run-it","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"5. Run it","x":"Run this from a real, interactive terminal. Launched from a headless or background shell the Aspire AppHost stalls at control-plane init and no dashboard appears. The dashboard…"},"1699":{"u":"/docs/guides/common-GETTING-STARTED.html#6-the-one-time-fixup","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"6. The one-time fixup","x":"The scaffold deliberately does not hand this one over, because renaming invalidates it and no fixed value is right for every name you could pick. It is covered in full in the…"},"1700":{"u":"/docs/guides/common-GETTING-STARTED.html#what-you-were-handed","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"What you were handed","x":"The Order aggregate arrives fully worked: a Result-returning factory, invariants, guarded mutations raising domain events, a child entity, soft-delete cascade, the caching pair,…"},"1701":{"u":"/docs/guides/common-GETTING-STARTED.html#add-your-next-feature","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"Add your next feature","x":"A vertical slice (the path every feature follows) is one command, run from the module's UseCases folder: Handlers, validators, and mappers are convention-scanned, so there is no…"},"1702":{"u":"/docs/guides/common-GETTING-STARTED.html#surface-the-slice-at-the-edge","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"Surface the slice at the edge","x":"The scaffold stops at the handler, and the template's closing instructions tell you to map the command in your module's controller. Every write in the generated app follows the…"},"1703":{"u":"/docs/guides/common-GETTING-STARTED.html#then-what","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"Then what","x":"- Upgrade the framework. Bump every MMCA.Common. entry in Directory.Packages.props together, in one pass. See Phase 7 and the versioning policy. - Add real authentication. Copy…"},"1704":{"u":"/docs/guides/common-GETTING-STARTED.html#verification-checklist","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"Verification checklist","x":"1. dotnet new mmca-app -n produced a solution that builds and tests green before you changed anything. 2. dotnet build .slnx is warning-free (TreatWarningsAsErrors + five…"},"1705":{"u":"/docs/guides/common-GETTING-STARTED.html#where-to-look-next","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"Where to look next","x":"- Templates: every parameter of all four templates, dropping the Blazor UI host, and how the pack is built. ADR-065 explains why it is derived from the reference app rather than…"},"1706":{"u":"/docs/guides/common-RESILIENCE.html","d":"Resilience & Business Continuity (rubric §29)","k":"Guides & Specifications","x":"As of: 2026-09-15. MMCA.Common is a library, so it cannot operate a deployment: restores, RTO/RPO, and SLO alerting are executed in the consumer apps' IaC (e.g. MMCA.ADC's…"},"1707":{"u":"/docs/guides/common-RESILIENCE.html#what-the-framework-provides-and-verifies-in-repo","d":"Resilience & Business Continuity (rubric §29)","k":"Guides & Specifications","t":"What the framework provides (and verifies in-repo)","x":"Failure isolation, graceful degradation, graceful startup, and the restore procedure itself are therefore demonstrated and tested centrally: the framework drills backup→restore…"},"1708":{"u":"/docs/guides/common-RESILIENCE.html#caching-is-fail-open-configurable-never-load-bearing","d":"Resilience & Business Continuity (rubric §29)","k":"Guides & Specifications","t":"Caching is fail-open (configurable, never load-bearing)","x":"The cache is an optimization, never the system of record, so nothing about it can turn a cache problem into a failed request. A miss, an unreachable cache, or a populate that…"},"1709":{"u":"/docs/guides/common-RESILIENCE.html#baseline-slo--error-budget-template-consumers-fill-in","d":"Resilience & Business Continuity (rubric §29)","k":"Guides & Specifications","t":"Baseline SLO / error-budget template (consumers fill in)","x":"Adopt and tune per app; ADC's filled-in version lives in infra/DISASTER-RECOVERY.md + the SLO metric-alerts in infra/main.bicep. Define RTO/RPO per service (ADC's worked…"},"1710":{"u":"/docs/guides/common-RESILIENCE.html#restore-drill-runbook-reference","d":"Resilience & Business Continuity (rubric §29)","k":"Guides & Specifications","t":"Restore-drill runbook (reference)","x":"The only evidence backups actually restore is a periodic drill: restore a throwaway copy, confirm it comes back Online, record the measured restore time, then delete the copy.…"},"1711":{"u":"/docs/guides/common-RESPONSIVE.html","d":"Responsive Design & Cross-Browser Support (rubric §22)","k":"Guides & Specifications","x":"As of: 2026-07-20. This document is the supported-device and browser matrix for the shared MMCA.Common.UI component library. It makes the responsive contract explicit (the rubric…"},"1712":{"u":"/docs/guides/common-RESPONSIVE.html#breakpoints","d":"Responsive Design & Cross-Browser Support (rubric §22)","k":"Guides & Specifications","t":"Breakpoints","x":"The framework keeps C viewport detection and CSS media queries aligned around one mobile threshold. The C 960px mobile cutoff and the CSS 1023.98px cutoff intentionally differ:…"},"1713":{"u":"/docs/guides/common-RESPONSIVE.html#supported-devices","d":"Responsive Design & Cross-Browser Support (rubric §22)","k":"Guides & Specifications","t":"Supported devices"},"1714":{"u":"/docs/guides/common-RESPONSIVE.html#touch-targets","d":"Responsive Design & Cross-Browser Support (rubric §22)","k":"Guides & Specifications","t":"Touch targets","x":"Interactive controls on mobile surfaces meet a 48px minimum hit area (Material Design), exceeding both WCAG 2.5.8 Target Size (Minimum, AA, 24px) and WCAG 2.5.5 Target Size…"},"1715":{"u":"/docs/guides/common-RESPONSIVE.html#grid-density","d":"Responsive Design & Cross-Browser Support (rubric §22)","k":"Guides & Specifications","t":"Grid density","x":"DataGridListPageBase exposes a DenseGrid property and a ToggleDensity() method. Derived list pages bind Dense=\"@DenseGrid\" on their MudDataGrid and surface a toggle. The chosen…"},"1716":{"u":"/docs/guides/common-RESPONSIVE.html#browser-matrix","d":"Responsive Design & Cross-Browser Support (rubric §22)","k":"Guides & Specifications","t":"Browser matrix","x":"The shared UI is tested against three Playwright engines in CI (.github/workflows/ci.yml, ui-e2e job): a real-browser axe (WCAG 2.1 AA) + render smoke against the backend-less…"},"1717":{"u":"/docs/guides/common-SMALL-APPS.html","d":"Small Apps: the lowest floor MMCA.Common has","k":"Guides & Specifications","x":"As of: 2026-08-30. Two mmca-app options decide the shape of the solution rather than the shape of the sample module, and together they are the smallest thing the framework…"},"1718":{"u":"/docs/guides/common-SMALL-APPS.html#why-this-shape-exists","d":"Small Apps: the lowest floor MMCA.Common has","k":"Guides & Specifications","t":"Why this shape exists","x":"The default mmca-app output is a twelve-project solution: five module layers, a REST API host, a Blazor UI host, an Aspire AppHost, a migrations project, and three test projects.…"},"1719":{"u":"/docs/guides/common-SMALL-APPS.html#the-five-minute-path","d":"Small Apps: the lowest floor MMCA.Common has","k":"Guides & Specifications","t":"The five-minute path","x":"Add --flat if the aggregate owns no child collection; the four module-shape flags all still apply (see the templates guide). Warning-free under all five analyzers with…"},"1720":{"u":"/docs/guides/common-SMALL-APPS.html#what-you-get-anyway","d":"Small Apps: the lowest floor MMCA.Common has","k":"Guides & Specifications","t":"What you get anyway","x":"Nothing in the framework is disabled by this shape. The application code is identical to the SQL-Server-plus-Aspire output: the engine is a configuration-base choice plus a…"},"1721":{"u":"/docs/guides/common-SMALL-APPS.html#what-is-deliberately-off","d":"Small Apps: the lowest floor MMCA.Common has","k":"Guides & Specifications","t":"What is deliberately off","x":"- The transactional outbox. With in-process messaging (the default, since no MessageBus:Provider is configured) the outbox resolves off: events are dispatched inside the process…"},"1722":{"u":"/docs/guides/common-SMALL-APPS.html#adding-a-second-module","d":"Small Apps: the lowest floor MMCA.Common has","k":"Guides & Specifications","t":"Adding a second module","x":"mmca-module takes --database sqlserversqlite, and a solution generated by mmca-app adds its modules through build/add-module.ps1, which reads the engine off the API host's own…"},"1723":{"u":"/docs/guides/common-SMALL-APPS.html#two-limitations-worth-knowing-before-you-start","d":"Small Apps: the lowest floor MMCA.Common has","k":"Guides & Specifications","t":"Two limitations worth knowing before you start","x":"1. Writes need the X-Tenant-Id header. The generated app enables tenancy with RequireTenant: false, so an unresolved caller reads across tenants, but a write with no tenant…"},"1724":{"u":"/docs/guides/common-SMALL-APPS.html#when-to-flip-each-switch","d":"Small Apps: the lowest floor MMCA.Common has","k":"Guides & Specifications","t":"When to flip each switch","x":"Each of these is additive: the code you have written does not change, and the change is confined to configuration or to a host project. ---"},"1725":{"u":"/docs/guides/common-SMALL-APPS.html#where-to-look-next","d":"Small Apps: the lowest floor MMCA.Common has","k":"Guides & Specifications","t":"Where to look next","x":"- Getting started: the full-shape path, in six steps, with Aspire and SQL Server. - Templates: every parameter of all four templates, including the two solution-shape options…"},"1726":{"u":"/docs/guides/common-TEMPLATES.html","d":"Templates: scaffolding an MMCA app","k":"Guides & Specifications","x":"As of: 2026-09-20 (MMCA.Templates 1.11.0, framework v1.206.0). MMCA.Templates is a dotnet new pack that scaffolds solutions, modules, and vertical slices on the MMCA.Common…"},"1727":{"u":"/docs/guides/common-TEMPLATES.html#mmca-app","d":"Templates: scaffolding an MMCA app","k":"Guides & Specifications","t":"mmca-app","x":"The module and aggregate names are independent, so --module Billing --aggregate Invoice is fine. Everything derived from them follows: routes, the Aspire database resource, the…"},"1728":{"u":"/docs/guides/common-TEMPLATES.html#mmca-module","d":"Templates: scaffolding an MMCA app","k":"Guides & Specifications","t":"mmca-module","x":"The six shape options behave exactly as they do for mmca-app, and they are per module: a solution can hold a flat, status-less catalog module beside one whose aggregate owns a…"},"1729":{"u":"/docs/guides/common-TEMPLATES.html#buildadd-moduleps1","d":"Templates: scaffolding an MMCA app","k":"Guides & Specifications","t":"build/add-module.ps1","x":"Since 1.4.0 every solution mmca-app generates ships this script, and it is the supported way to add a second module. It runs mmca-module with your shape options passed through,…"},"1730":{"u":"/docs/guides/common-TEMPLATES.html#mmca-command-and-mmca-query","d":"Templates: scaffolding an MMCA app","k":"Guides & Specifications","t":"mmca-command and mmca-query","x":"Run these from the module's UseCases folder. Each creates a folder named after the slice holding its two files. --child-collection exists because both handlers load through…"},"1731":{"u":"/docs/guides/common-TEMPLATES.html#how-the-pack-is-built","d":"Templates: scaffolding an MMCA app","k":"Guides & Specifications","t":"How the pack is built","x":"The template content is the MMCA.Helpdesk reference application itself, staged at pack time. There is no second copy of the solution, so the template cannot drift from the app…"},"1732":{"u":"/docs/guides/common-VERSIONING.html","d":"Versioning & Breaking-Change Policy","k":"Guides & Specifications","x":"As of: 2026-09-03. MMCA.Common publishes its NuGet packages (the authoritative list and count live in FACTS.md) versioned and released together as a single unit. They share one…"},"1733":{"u":"/docs/guides/common-VERSIONING.html#semantic-versioning","d":"Versioning & Breaking-Change Policy","k":"Guides & Specifications","t":"Semantic Versioning","x":"Versions follow SemVer 2.0: MAJOR.MINOR.PATCH: - MAJOR: reserved (see \"Breaking changes within 1.x\" below). - MINOR: new capability, and the channel breaking changes currently…"},"1734":{"u":"/docs/guides/common-VERSIONING.html#what-counts-as-breaking","d":"Versioning & Breaking-Change Policy","k":"Guides & Specifications","t":"What counts as breaking","x":"A change is breaking if it is any of: - Removing or renaming a public type/member, or changing a signature. - Changing the meaning of an existing configuration key, or changing a…"},"1735":{"u":"/docs/guides/common-VERSIONING.html#breaking-changes-within-1x","d":"Versioning & Breaking-Change Policy","k":"Guides & Specifications","t":"Breaking changes within 1.x","x":"Breaking changes ship as MINOR bumps, not MAJOR ones, and the version number is therefore not a reliable breakage signal on its own. This is deliberate and follows from the…"},"1736":{"u":"/docs/guides/common-VERSIONING.html#consumer-rollout","d":"Versioning & Breaking-Change Policy","k":"Guides & Specifications","t":"Consumer rollout","x":"Per project convention, framework upgrades are swept across all consumers in one pass: there are no opt-in flags or phased rollouts for a MMCA.Common change. When a release…"},"1737":{"u":"/docs/guides/common-VERSIONING.html#deprecation","d":"Versioning & Breaking-Change Policy","k":"Guides & Specifications","t":"Deprecation","x":"There is no [Obsolete] grace period today. Because the lockstep sweep updates every first-party caller in the same change set, a superseded API is removed in the release that…"},"1738":{"u":"/docs/guides/common-VERSIONING.html#supply-chain","d":"Versioning & Breaking-Change Policy","k":"Guides & Specifications","t":"Supply chain","x":"- All package versions are centrally pinned (Directory.Packages.props). - NuGet lock files are committed for reproducible restores. - MassTransit is pinned to v8 by policy (v9…"},"1739":{"u":"/docs/guides/store-ACCESSIBILITY-SCREENREADER-PASS.html","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","x":"As of: 2026-09-07. The automated layer (axe-core WCAG 2.1 AA scans in Tests/E2E/MMCA.Store.E2E.Tests/Workflows/AccessibilityTests.cs plus the shared Login/Register/Profile bases…"},"1740":{"u":"/docs/guides/store-ACCESSIBILITY-SCREENREADER-PASS.html#tools","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","t":"Tools","x":"Run against the app started via Aspire (dotnet run --project Source/Hosting/MMCA.Store.AppHost), reaching the Web UI at https://localhost:6002. Test with the keyboard only (no…"},"1741":{"u":"/docs/guides/store-ACCESSIBILITY-SCREENREADER-PASS.html#what-to-verify-on-every-flow","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","t":"What to verify on every flow","x":"1. Landmarks and headings. The SR's landmark/heading list (NVDA Insert+F7) exposes a logical banner / navigation / main structure and a sensible h1...hN outline (one h1 per…"},"1742":{"u":"/docs/guides/store-ACCESSIBILITY-SCREENREADER-PASS.html#flows-to-cover-mirror-the-automated-accessibilitytests-plus-the-role-journeys","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","t":"Flows to cover (mirror the automated AccessibilityTests plus the role journeys)"},"1743":{"u":"/docs/guides/store-ACCESSIBILITY-SCREENREADER-PASS.html#results-log","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","t":"Results log","x":"Record one row per pass. A flow with any unresolved blocker is a FAIL (open a backlog item for it)."},"1744":{"u":"/docs/guides/store-ACCESSIBILITY-SCREENREADER-PASS.html#after-a-pass","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","t":"After a pass","x":"- File any defect as a remediation item; cross-link it from the §21 row's evidence. - Update the dated row above so the scorecard can cite a real, current manual pass (this is…"},"1745":{"u":"/docs/guides/store-BusinessWorkflows.html","d":"MMCA Business Workflow Analysis","k":"Guides & Specifications","x":"As of: 2026-09-07."},"1746":{"u":"/docs/guides/store-BusinessWorkflows.html#workflow-list-summary","d":"MMCA Business Workflow Analysis","k":"Guides & Specifications","t":"Workflow List Summary","x":"---"},"1747":{"u":"/docs/guides/store-BusinessWorkflows.html#1-identity-module-workflows","d":"MMCA Business Workflow Analysis","k":"Guides & Specifications","t":"1. Identity Module Workflows","x":"Entry Point: POST /auth/register, AuthController.RegisterAsync(), AllowAnonymous Execution Path: Business Steps: 1. Validate registration input (email, password, first name, last…"},"1748":{"u":"/docs/guides/store-BusinessWorkflows.html#2-catalog-module-workflows","d":"MMCA Business Workflow Analysis","k":"Guides & Specifications","t":"2. Catalog Module Workflows","x":"Entry Point: POST /categories, Admin only, [Idempotent] Response: 201 Created with CategoryDTO Entry Point: PUT /categories/{id}/name, Admin only Entry Point: PUT…"},"1749":{"u":"/docs/guides/store-BusinessWorkflows.html#3-sales-module-workflows","d":"MMCA Business Workflow Analysis","k":"Guides & Specifications","t":"3. Sales Module Workflows","x":"Entry Point: POST /shoppingcarts/{customerId}/shoppingcartitems, Authenticated (owner or admin via OwnerOrAdminFilter) Decision Points: - Product variant doesn't exist - NotFound…"},"1750":{"u":"/docs/guides/store-BusinessWorkflows.html#4-ui-workflows","d":"MMCA Business Workflow Analysis","k":"Guides & Specifications","t":"4. UI Workflows","x":"The UI provides a complete shopping experience through the CartDrawer component and Blazor pages. The CartDrawer is the only cart UI: there is no dedicated cart page. It is a…"},"1751":{"u":"/docs/guides/store-BusinessWorkflows.html#5-cross-module-interactions","d":"MMCA Business Workflow Analysis","k":"Guides & Specifications","t":"5. Cross-Module Interactions","x":"Both export edges are best-effort: an unreachable peer degrades that one section rather than failing the export, so neither carries a startup wait. Asynchronously, four…"},"1752":{"u":"/docs/guides/store-BusinessWorkflows.html#6-external-interactions","d":"MMCA Business Workflow Analysis","k":"Guides & Specifications","t":"6. External Interactions","x":"---"},"1753":{"u":"/docs/guides/store-BusinessWorkflows.html#7-cross-cutting-concerns-participating-in-workflows","d":"MMCA Business Workflow Analysis","k":"Guides & Specifications","t":"7. Cross-Cutting Concerns Participating in Workflows","x":"---"},"1754":{"u":"/docs/guides/store-BusinessWorkflows.html#8-end-to-end-customer-journey","d":"MMCA Business Workflow Analysis","k":"Guides & Specifications","t":"8. End-to-End Customer Journey","x":"Alternative Flows: - Payment fails - Order status PaymentFailed - customer can retry (create new Stripe session) - Cancel order - Status Cancelled (from PendingPayment,…"},"1755":{"u":"/docs/guides/store-BusinessWorkflows.html#9-potentially-missing-or-incomplete-workflows","d":"MMCA Business Workflow Analysis","k":"Guides & Specifications","t":"9. Potentially Missing or Incomplete Workflows","x":"--- This document is derived from source code analysis. All workflows, decisions, and behaviors described above are confirmed implementations traceable to the referenced source…"},"1756":{"u":"/docs/guides/store-NavigationFlow.html","d":"Navigation Flow","k":"Guides & Specifications","x":"As of: 2026-09-25. This document maps the site navigation flow for each actor in the MMCA.Store application. Each mermaid diagram shows the pages accessible to that actor and the…"},"1757":{"u":"/docs/guides/store-NavigationFlow.html#actors","d":"Navigation Flow","k":"Guides & Specifications","t":"Actors","x":"Roles and enforcement: Admin is the only elevated role (registration creates a Customer). The 19 admin pages carry page-level [Authorize(Roles = \"Admin\")]. The three per-module…"},"1758":{"u":"/docs/guides/store-NavigationFlow.html#1-anonymous-user","d":"Navigation Flow","k":"Guides & Specifications","t":"1. Anonymous User","x":"Pages accessible without authentication: home, login, register, the two password-reset pages, and the public catalog. Add-to-cart on the product detail page sits inside an…"},"1759":{"u":"/docs/guides/store-NavigationFlow.html#2-customer-authenticated-user","d":"Navigation Flow","k":"Guides & Specifications","t":"2. Customer (Authenticated User)","x":"Inherits all anonymous pages. Gains the profile page, the cart drawer (a layout component, not a route), checkout, and their own orders. Unauthenticated visitors deep-linking to…"},"1760":{"u":"/docs/guides/store-NavigationFlow.html#3-admin","d":"Navigation Flow","k":"Guides & Specifications","t":"3. Admin","x":"Inherits all customer pages, plus the admin CRUD surfaces for all three modules and the user and role administration pages. Every page below except the shared /orders pair (see…"},"1761":{"u":"/docs/guides/store-NavigationFlow.html#authorization-model","d":"Navigation Flow","k":"Guides & Specifications","t":"Authorization Model","x":"Three cooperating layers; the API is always the boundary: 1. Page-level route guards. The 19 admin pages carry [Authorize(Roles = \"Admin\")] and /profile / /orders carry…"},"1762":{"u":"/docs/guides/store-Specification.html","d":"MMCA Business Specification Document","k":"Guides & Specifications","x":"As of: 2026-09-07."},"1763":{"u":"/docs/guides/store-Specification.html#1-system-overview","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"1. System Overview","x":"MMCA is an e-commerce platform built with .NET 10.0 using DDD and Clean Architecture. The business logic is organized as modules (Catalog, Sales, Identity) that have been…"},"1764":{"u":"/docs/guides/store-Specification.html#2-core-business-entities","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"2. Core Business Entities","x":"Description: A classification grouping for products. Supports hierarchical (parent-child) structures for nested categorization (e.g., \"Jewelry\" \"Rings\"). Key Properties:…"},"1765":{"u":"/docs/guides/store-Specification.html#3-business-workflows","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"3. Business Workflows","x":"Trigger: A new user submits registration with first name, last name, email, and password. Steps: 1. Validate registration request (email format, password requirements) 2. Verify…"},"1766":{"u":"/docs/guides/store-Specification.html#4-order-status-state-machine","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"4. Order Status State Machine","x":"Cancellable States: PendingPayment, PaymentInitiated, PaymentFailed. Shipped is deliberately NOT cancellable, for the same reason Paid is not: the goods and the money have both…"},"1767":{"u":"/docs/guides/store-Specification.html#5-business-rules","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"5. Business Rules","x":"---"},"1768":{"u":"/docs/guides/store-Specification.html#6-use-cases","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"6. Use Cases","x":"---"},"1769":{"u":"/docs/guides/store-Specification.html#7-domain-events-and-state-changes","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"7. Domain Events and State Changes","x":"Most mutations raise a single {Entity}Changed lifecycle event carrying a DomainEntityState discriminator (Added, Updated, Deleted) rather than one event per verb (ADR-083). Those…"},"1770":{"u":"/docs/guides/store-Specification.html#8-external-integrations","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"8. External Integrations","x":"Purpose: Processes online customer payments for orders. Business Impact: Enables the system to collect payments from customers and confirm payment success or failure…"},"1771":{"u":"/docs/guides/store-Specification.html#9-authorization-model","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"9. Authorization Model","x":"Permission-based endpoints: an endpoint states the capability it needs with [HasPermission(...)] over a constant from the owning module's {Module}Permissions, and each module…"},"1772":{"u":"/docs/guides/store-Specification.html#10-cross-module-communication","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"10. Cross-Module Communication","x":"The system enforces strict module boundaries. Modules communicate only through shared interface contracts: Across process boundaries these interfaces are satisfied by gRPC…"},"1773":{"u":"/docs/guides/store-Specification.html#11-user-interface","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"11. User Interface","x":"The UI is a Blazor Server + WebAssembly hybrid (InteractiveAuto render mode) using MudBlazor component library. It supports multiple hosting targets: - Web (Server + WASM):…"},"1774":{"u":"/docs/guides/store-Specification.html#12-cross-cutting-infrastructure","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"12. Cross-Cutting Infrastructure","x":"The IdempotencyFilter (applied via [Idempotent] attribute on Create endpoints) caches the first response for a given Idempotency-Key header value for 24 hours. Duplicate requests…"},"1775":{"u":"/docs/guides/store-Specification.html#13-testing","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"13. Testing","x":"- Full customer journey: Register - Browse - Add to Cart - Checkout - Admin Pay - Deliver - Order lifecycle: all state transitions including cancellation with inventory…"},"1776":{"u":"/docs/guides/store-Specification.html#14-missing-or-unclear-business-logic","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"14. Missing or Unclear Business Logic","x":"Observation: Four handlers send email today: the password-reset request (Section 3.12), OrderPaidHandler (payment receipt, which prints a struck \"Was\" amount and the promotion…"},"1777":{"u":"/docs/guides/store-Specification.html#15-seed-data-initial-system-state","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"15. Seed Data (Initial System State)","x":"The system seeds the following data at startup: Users: - Admin: one seeded administrator account (Admin role, no Customer record; credentials are environment-specific and not…"},"1778":{"u":"/articles/index.html","d":"The MMCA.Common article series","k":"The MMCA.Common series","x":"A long-form series that turns the MMCA.Common framework's architecture decisions into teachable patterns: the Result railway, the transactional outbox, database-per-service, JWKS…"},"1779":{"u":"/articles/index.html#the-series-53-articles","d":"The MMCA.Common article series","k":"The MMCA.Common series","t":"The series (53 articles)","x":"★ = cornerstone pillar (publish first; everything links up to these). The numbering is the reading order. Each article builds on the ones before it, so reading 1 through 53 in…"},"1780":{"u":"/articles/open-sourced-enterprise-dotnet-34-categories.html","d":"I open-sourced the enterprise .NET plumbing I never want to rewrite, and graded it against 34 categories","k":"The MMCA.Common series","x":"Subtitle: A .NET 10 framework for DDD, Clean Architecture, and CQRS, built as a modular monolith that extracts to microservices without a rewrite, and scored in the open against…"},"1781":{"u":"/articles/open-sourced-enterprise-dotnet-34-categories.html#what-it-is","d":"I open-sourced the enterprise .NET plumbing I never want to rewrite, and graded it against 34 categories","k":"The MMCA.Common series","t":"What it is","x":"MMCA.Common is a set of nineteen NuGet packages that give you a DDD + Clean Architecture + CQRS foundation as a modular monolith, plus the extraction boundaries to pull a module…"},"1782":{"u":"/articles/open-sourced-enterprise-dotnet-34-categories.html#the-one-thing-that-makes-it-different","d":"I open-sourced the enterprise .NET plumbing I never want to rewrite, and graded it against 34 categories","k":"The MMCA.Common series","t":"The one thing that makes it different","x":"Plenty of repositories will sell you Clean Architecture. The difference here is that the rules are not prose in a README. They are executable, and they fail the build. The…"},"1783":{"u":"/articles/open-sourced-enterprise-dotnet-34-categories.html#modular-monolith-now-microservices-later-no-rewrite","d":"I open-sourced the enterprise .NET plumbing I never want to rewrite, and graded it against 34 categories","k":"The MMCA.Common series","t":"Modular monolith now, microservices later, no rewrite","x":"The other thesis baked into the framework is that \"monolith vs microservices\" is a false binary. You build the extraction point now and cut the service when (if) you actually…"},"1784":{"u":"/articles/open-sourced-enterprise-dotnet-34-categories.html#i-scored-it-on-two-axes-then-published-every-gap","d":"I open-sourced the enterprise .NET plumbing I never want to rewrite, and graded it against 34 categories","k":"The MMCA.Common series","t":"I scored it on two axes, then published every gap","x":"Here is the part that usually gets left out of \"look at my framework\" posts. I graded MMCA.Common against a 34-category architecture rubric (backend, front-end, and…"},"1785":{"u":"/articles/open-sourced-enterprise-dotnet-34-categories.html#it-runs-in-production-on-two-real-apps","d":"I open-sourced the enterprise .NET plumbing I never want to rewrite, and graded it against 34 categories","k":"The MMCA.Common series","t":"It runs in production, on two real apps","x":"MMCA.Common is not a toy. Two deployed apps consume the same nineteen packages: - MMCA.ADC, the Atlanta Developers Conference app, deployed to Azure and used to run a live event.…"},"1786":{"u":"/articles/open-sourced-enterprise-dotnet-34-categories.html#what-this-series-will-cover","d":"I open-sourced the enterprise .NET plumbing I never want to rewrite, and graded it against 34 categories","k":"The MMCA.Common series","t":"What this series will cover","x":"Over the coming weeks I will take one pattern per article and go deep: - The Result railway that retired exceptions-as-control-flow. - The transactional outbox, in full. -…"},"1787":{"u":"/articles/open-sourced-enterprise-dotnet-34-categories.html#try-it-or-come-argue-with-me","d":"I open-sourced the enterprise .NET plumbing I never want to rewrite, and graded it against 34 categories","k":"The MMCA.Common series","t":"Try it, or come argue with me","x":"MMCA.Common is Apache-2.0 licensed and open source. The fastest way to form an opinion is to read the scorecard (the gaps are the honest part) and skim the ADRs (the \"why\" behind…"},"1788":{"u":"/articles/modular-monolith-to-microservices.html","d":"Modular monolith to microservices, without the rewrite","k":"The MMCA.Common series","x":"Subtitle: \"Monolith or microservices\" is the wrong question. Build the extraction point now, keep it tested, and cut the service later, on a boundary you have already proven. ---…"},"1789":{"u":"/articles/modular-monolith-to-microservices.html#why-it-matters","d":"Modular monolith to microservices, without the rewrite","k":"The MMCA.Common series","t":"Why it matters","x":"The reason the \"we will split it later\" plan usually fails is that the monolith quietly grows couplings that the eventual split has to unwind. Two modules share a database, so a…"},"1790":{"u":"/articles/modular-monolith-to-microservices.html#the-mmca-answer-four-extraction-points-all-enforced-in-the-monolith","d":"Modular monolith to microservices, without the rewrite","k":"The MMCA.Common series","t":"The MMCA answer: four extraction points, all enforced in the monolith","x":"There are four places a \"split it later\" plan leaks, and the framework closes each one with a real mechanism, not a guideline. The first leak is the shared database. In…"},"1791":{"u":"/articles/modular-monolith-to-microservices.html#what-the-boundary-looks-like-in-code","d":"Modular monolith to microservices, without the rewrite","k":"The MMCA.Common series","t":"What the boundary looks like in code","x":"The whole thesis fits in one DI swap. The same handler depends on the same interface; only the registration line differs between the two topologies. The transport choice is one…"},"1792":{"u":"/articles/modular-monolith-to-microservices.html#trade-offs-honestly","d":"Modular monolith to microservices, without the rewrite","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"Reversibility is not free, and the ADRs are candid about the bill. - Distributed-systems semantics arrive the moment you split. Cross-service consistency is eventual (outbox plus…"},"1793":{"u":"/articles/modular-monolith-to-microservices.html#apply-this-even-without-mmca","d":"Modular monolith to microservices, without the rewrite","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"You do not need this framework to keep the extraction point open. You need three habits. 1. Give each module its own logical data ownership now, even in one database. No…"},"1794":{"u":"/articles/34-category-architecture-rubric.html","d":"What good architecture actually means: a 34-category rubric you can score yourself against","k":"The MMCA.Common series","x":"Subtitle: \"Clean architecture\" is not a vibe. Here is a 34-category rubric that scores any system on two axes, demands evidence for every score, and exposes the one line that…"},"1795":{"u":"/articles/34-category-architecture-rubric.html#why-good-architecture-needs-a-rubric","d":"What good architecture actually means: a 34-category rubric you can score yourself against","k":"The MMCA.Common series","t":"Why \"good architecture\" needs a rubric","x":"The problem with architectural quality is that it is multi-dimensional and most of the dimensions are invisible until they bite you. SOLID discipline is invisible until a feature…"},"1796":{"u":"/articles/34-category-architecture-rubric.html#the-structure-three-parts-34-categories","d":"What good architecture actually means: a 34-category rubric you can score yourself against","k":"The MMCA.Common series","t":"The structure: three parts, 34 categories","x":"The rubric (Architecture Evaluation Criteria) is organized into three parts that match how a real system is actually built and operated. It stands at version 2 (ADR-110), which…"},"1797":{"u":"/articles/34-category-architecture-rubric.html#the-two-axes-maturity-and-implementation-evidence-or-it-does-not-count","d":"What good architecture actually means: a 34-category rubric you can score yourself against","k":"The MMCA.Common series","t":"The two axes: maturity and implementation, evidence or it does not count","x":"Here is the part that makes the rubric honest. Each category gets two scores, not one. - Maturity (0 to 4) measures process: how consistently and how well-governed the pattern…"},"1798":{"u":"/articles/34-category-architecture-rubric.html#how-the-index-is-computed","d":"What good architecture actually means: a 34-category rubric you can score yourself against","k":"The MMCA.Common series","t":"How the index is computed","x":"The scores roll up into two indices using per-category weights (defaults provided, adjustable per engagement). The maturity index is the sum of (category maturity × weight)…"},"1799":{"u":"/articles/34-category-architecture-rubric.html#the-worked-example-mmcacommon-scored-on-both-axes","d":"What good architecture actually means: a 34-category rubric you can score yourself against","k":"The MMCA.Common series","t":"The worked example: MMCA.Common, scored on both axes","x":"When I ran MMCA.Common through the rubric (the canonical, version-controlled scorecard lives in MMCA.Common: Architecture Scorecard), it landed at a maturity index of 97.0% and…"},"1800":{"u":"/articles/34-category-architecture-rubric.html#the-one-insight-worth-the-whole-exercise","d":"What good architecture actually means: a 34-category rubric you can score yourself against","k":"The MMCA.Common series","t":"The one insight worth the whole exercise","x":"When I lined the scores up, a single pattern explained almost all of the variance between the top tier and the middle tier, and it is the pattern that has driven every re-score…"},"1801":{"u":"/articles/34-category-architecture-rubric.html#trade-offs-honestly","d":"What good architecture actually means: a 34-category rubric you can score yourself against","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"A rubric is a tool, not an oracle, and it has sharp edges worth naming. - It can be gamed. If you score yourself, you can rationalize a 3 into a 4. The evidence requirement is…"},"1802":{"u":"/articles/34-category-architecture-rubric.html#apply-this-even-without-mmca","d":"What good architecture actually means: a 34-category rubric you can score yourself against","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"You do not need this framework, or even this exact rubric, to get the benefit: 1. Pick a fixed set of categories and score every system against the same set. Comparability is…"},"1803":{"u":"/articles/result-railway-csharp.html","d":"Stop throwing exceptions for control flow: the Result railway in C","k":"The MMCA.Common series","x":"Subtitle: \"This order ID does not exist\" is not an exceptional event, it is a routine branch of normal control flow. Here is the Result railway that models it as a value, and why…"},"1804":{"u":"/articles/result-railway-csharp.html#why-exceptions-are-not-a-control-flow-mechanism","d":"Stop throwing exceptions for control flow: the Result railway in C","k":"The MMCA.Common series","t":"Why exceptions are not a control-flow mechanism","x":"Exceptions are excellent at one job: aborting a computation that has gone genuinely wrong and unwinding the stack to someone who can recover. They are a poor fit for expected…"},"1805":{"u":"/articles/result-railway-csharp.html#the-mmca-answer-three-small-types-and-a-railway","d":"Stop throwing exceptions for control flow: the Result railway in C","k":"The MMCA.Common series","t":"The MMCA answer: three small types and a railway","x":"The pattern is factored into three dependency-free pieces, all living in MMCA.Common.Shared, the innermost layer (the Blazor WebAssembly UI can reference it without dragging in…"},"1806":{"u":"/articles/result-railway-csharp.html#trade-offs-honestly","d":"Stop throwing exceptions for control flow: the Result railway in C","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The Result pattern is not free, and ADR-013 names the rough edges rather than hiding them: - More ceremony at the call site than letting an exception bubble. Combine absorbs most…"},"1807":{"u":"/articles/result-railway-csharp.html#apply-this-even-without-mmca","d":"Stop throwing exceptions for control flow: the Result railway in C","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"You do not need this framework to adopt the railway. The ideas port to any stack: 1. Make failure visible in the signature. Return a result type (Result , OneOf, ErrorOr, your…"},"1808":{"u":"/articles/kill-anemic-domain-model.html","d":"Kill the anemic domain model: rich aggregates with factory methods that return Result","k":"The MMCA.Common series","x":"Subtitle: Public setters plus logic-in-services is not a domain model, it is a database row with extra steps. Here is the three-rung entity hierarchy in MMCA.Common that makes…"},"1809":{"u":"/articles/kill-anemic-domain-model.html#why-it-matters","d":"Kill the anemic domain model: rich aggregates with factory methods that return Result","k":"The MMCA.Common series","t":"Why it matters","x":"The cost is not theoretical. When the rules live outside the object: - Invalid state is representable. You can construct an Order with a negative total and no lines, because the…"},"1810":{"u":"/articles/kill-anemic-domain-model.html#the-mmca-answer-a-three-rung-hierarchy-one-capability-per-rung","d":"Kill the anemic domain model: rich aggregates with factory methods that return Result","k":"The MMCA.Common series","t":"The MMCA answer: a three-rung hierarchy, one capability per rung","x":"MMCA.Common builds every entity on a three-class inheritance chain. Read it bottom-up; each rung adds exactly one capability. BaseEntity is almost nothing: a single required init…"},"1811":{"u":"/articles/kill-anemic-domain-model.html#trade-offs-honestly","d":"Kill the anemic domain model: rich aggregates with factory methods that return Result","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"Rich aggregates are the right default, but they are not free, and the scorecard's §4 review names the gaps: - More boilerplate per entity. A private constructor, a static…"},"1812":{"u":"/articles/kill-anemic-domain-model.html#apply-this-even-without-mmca","d":"Kill the anemic domain model: rich aggregates with factory methods that return Result","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"You do not need this framework to drop the anemic model. The moves are portable: 1. Make constructors private and add a static factory that validates and returns a result type.…"},"1813":{"u":"/articles/specification-pattern.html","d":"Specifications over LINQ spaghetti: composable, reusable query intent","k":"The MMCA.Common series","x":"Subtitle: A .Where(s = s.SpeakerId == id && !s.IsDeleted && s.IsPublished) copied into nine controllers is nine places to forget the authorization clause. Here is the…"},"1814":{"u":"/articles/specification-pattern.html#why-it-matters","d":"Specifications over LINQ spaghetti: composable, reusable query intent","k":"The MMCA.Common series","t":"Why it matters","x":"Query predicates are not throwaway plumbing. Some of them encode business rules (\"a published event is one whose status is Published and whose start date has not passed\") and…"},"1815":{"u":"/articles/specification-pattern.html#the-mmca-answer-trusted-specifications-untrusted-filters-one-pipeline","d":"Specifications over LINQ spaghetti: composable, reusable query intent","k":"The MMCA.Common series","t":"The MMCA answer: trusted specifications, untrusted filters, one pipeline","x":"MMCA.Common splits the read side into three cooperating sub-systems, and the split is the point. ISpecification exposes two faces of the same rule: - a Criteria expression tree…"},"1816":{"u":"/articles/specification-pattern.html#trade-offs-honestly","d":"Specifications over LINQ spaghetti: composable, reusable query intent","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The pattern earns its keep, but a few real, specific gaps are worth stating plainly rather than glossing: - Two query vocabularies coexist. Specifications (typed,…"},"1817":{"u":"/articles/specification-pattern.html#apply-this-even-without-mmca","d":"Specifications over LINQ spaghetti: composable, reusable query intent","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The core ideas port to any stack and any ORM: 1. Give predicates a type and a name. A PublishedEvent specification object beats a copied .Where() lambda. Named intent is…"},"1818":{"u":"/articles/cqrs-decorator-pipeline.html","d":"The CQRS decorator pipeline: logging, caching, and transactions without touching a handler","k":"The MMCA.Common series","x":"Subtitle: Cross-cutting concerns belong around a handler, not inside it. Here is a Scrutor-composed decorator pipeline where logging, caching, and transactions wrap every command…"},"1819":{"u":"/articles/cqrs-decorator-pipeline.html#why-it-matters","d":"The CQRS decorator pipeline: logging, caching, and transactions without touching a handler","k":"The MMCA.Common series","t":"Why it matters","x":"The scattered approach fails in two specific ways. First, drift. When the transaction boilerplate lives in every handler, one handler eventually forgets it, or wraps the wrong…"},"1820":{"u":"/articles/cqrs-decorator-pipeline.html#the-shape-thin-handlers-fat-pipeline","d":"The CQRS decorator pipeline: logging, caching, and transactions without touching a handler","k":"The MMCA.Common series","t":"The shape: thin handlers, fat pipeline","x":"Every write and every read in MMCA.Common is a use case behind one of two interfaces: One method each. TResult is almost always a Result or Result (the railway error type from…"},"1821":{"u":"/articles/cqrs-decorator-pipeline.html#how-the-pipeline-is-assembled-and-why-order-is-the-whole-game","d":"The CQRS decorator pipeline: logging, caching, and transactions without touching a handler","k":"The MMCA.Common series","t":"How the pipeline is assembled, and why order is the whole game","x":"The wiring uses Scrutor's TryDecorate, and there is one rule you have to internalize: TryDecorate applies decorators in reverse registration order. The last one registered…"},"1822":{"u":"/articles/cqrs-decorator-pipeline.html#transactional-behavior-in-detail","d":"The CQRS decorator pipeline: logging, caching, and transactions without touching a handler","k":"The MMCA.Common series","t":"Transactional behavior, in detail","x":"The transactional decorator wraps the handler in IUnitOfWork.ExecuteInTransactionAsync only when the command implements ITransactional. Three outcomes, three behaviors: - An…"},"1823":{"u":"/articles/cqrs-decorator-pipeline.html#opt-in-by-marker-interface-pay-only-for-what-you-use","d":"The CQRS decorator pipeline: logging, caching, and transactions without touching a handler","k":"The MMCA.Common series","t":"Opt in by marker interface: pay only for what you use","x":"The pipeline is registered for every handler, but most decorators are dormant unless the use case asks for them, through a set of tiny marker interfaces: Each decorator does an…"},"1824":{"u":"/articles/cqrs-decorator-pipeline.html#the-di-sequence-that-makes-it-work","d":"The CQRS decorator pipeline: logging, caching, and transactions without touching a handler","k":"The MMCA.Common series","t":"The DI sequence that makes it work","x":"Because TryDecorate can only wrap registrations that already exist, the decorators must be registered after every module's concrete handlers. One step of this sequence is…"},"1825":{"u":"/articles/cqrs-decorator-pipeline.html#the-same-argument-one-layer-out-the-http-pipeline","d":"The CQRS decorator pipeline: logging, caching, and transactions without touching a handler","k":"The MMCA.Common series","t":"The same argument, one layer out: the HTTP pipeline","x":"The decorator chain covers everything that happens once a command or query reaches a handler. But the request had to cross an edge to get there, and that edge is an ordered chain…"},"1826":{"u":"/articles/cqrs-decorator-pipeline.html#trade-offs-honestly","d":"The CQRS decorator pipeline: logging, caching, and transactions without touching a handler","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The pipeline is not free, and ADR-014 names the rough edges: - Registration order is the reverse of execution order. This is a genuine Scrutor foot-gun. The framework mitigates…"},"1827":{"u":"/articles/cqrs-decorator-pipeline.html#apply-this-even-without-mmca","d":"The CQRS decorator pipeline: logging, caching, and transactions without touching a handler","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The idea ports to any DI container that supports decoration (Scrutor for Microsoft.Extensions.DI, or the equivalent in your stack): 1. Define a single handler interface per…"},"1828":{"u":"/articles/validation-kit.html","d":"Compose validators, don't copy them: a reusable FluentValidation kit","k":"The MMCA.Common series","x":"Subtitle: \"Email must be valid, password must be strong, name is required.\" Every command re-declares those rules, and then they drift. Here is a validation kit where the rules…"},"1829":{"u":"/articles/validation-kit.html#reusable-rule-fragments-composed-with-include","d":"Compose validators, don't copy them: a reusable FluentValidation kit","k":"The MMCA.Common series","t":"Reusable rule fragments, composed with Include","x":"The core idea is a rule fragment: a tiny AbstractValidator that owns exactly one field's contract, generic over the parent type T and configured with a selector expression.…"},"1830":{"u":"/articles/validation-kit.html#one-validator-for-the-request-free-for-the-command","d":"Compose validators, don't copy them: a reusable FluentValidation kit","k":"The MMCA.Common series","t":"One validator for the request, free for the command","x":"Most commands in this codebase are thin wrappers that carry a request DTO, for example CreateSessionCommand(CreateSessionRequest Request), and implement ICommandWithRequest (its…"},"1831":{"u":"/articles/validation-kit.html#a-validation-failure-is-a-result-and-the-edge-maps-it-to-400","d":"Compose validators, don't copy them: a reusable FluentValidation kit","k":"The MMCA.Common series","t":"A validation failure is a Result, and the edge maps it to 400","x":"A validator that runs is useless unless its output flows into the rest of the system cleanly. FluentValidation speaks in ValidationResult and ValidationFailure. The rest of the…"},"1832":{"u":"/articles/validation-kit.html#the-two-altitude-rule-validator-versus-domain-factory","d":"Compose validators, don't copy them: a reusable FluentValidation kit","k":"The MMCA.Common series","t":"The two-altitude rule: validator versus domain factory","x":"A reasonable objection: if the validator checks the input, why does the domain factory also return a Result and re-check things? Because they check at two different altitudes,…"},"1833":{"u":"/articles/validation-kit.html#trade-offs-honestly","d":"Compose validators, don't copy them: a reusable FluentValidation kit","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- It is a FluentValidation dependency. The kit is a thin composition layer over FluentValidation 12, not a hand-rolled engine. That is a deliberate trade (a mature, well-known…"},"1834":{"u":"/articles/validation-kit.html#apply-this-even-without-mmca","d":"Compose validators, don't copy them: a reusable FluentValidation kit","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any stack with a validation library that supports composition: 1. Write each field contract once as a fragment: a small validator generic over the parent…"},"1835":{"u":"/articles/transactional-outbox-dotnet.html","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","x":"Subtitle: \"Save to the database, then publish to the broker\" is a dual write with no atomicity. Here is the at-least-once pattern that fixes it, in one SaveChanges call. ---…"},"1836":{"u":"/articles/transactional-outbox-dotnet.html#why-it-matters","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","t":"Why it matters","x":"The failure is rare per request and catastrophic in aggregate. It does not show up in tests, because tests do not kill the broker between two awaits. It shows up in production as…"},"1837":{"u":"/articles/transactional-outbox-dotnet.html#the-pattern-one-transaction-then-a-separate-delivery","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","t":"The pattern: one transaction, then a separate delivery","x":"The transactional outbox splits the problem into two phases that are each individually safe: 1. Record intent atomically. When you save the order, you also write the event to an…"},"1838":{"u":"/articles/transactional-outbox-dotnet.html#how-mmcacommon-does-it-you-just-record-intent","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","t":"How MMCA.Common does it: you just record intent","x":"The reason this pattern is often skipped is that wiring it by hand is tedious. In MMCA.Common it is automatic. Your aggregate records a domain event, and the framework does the…"},"1839":{"u":"/articles/transactional-outbox-dotnet.html#the-third-participant-in-that-sequence-the-change-trail","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","t":"The third participant in that sequence: the change trail","x":"The first step of that sequence, \"stamp audit fields\", answers who touched a row last. It cannot answer what changed, because the stamp is a single overwrite: a row edited nine…"},"1840":{"u":"/articles/transactional-outbox-dotnet.html#when-the-commit-itself-is-ambiguous","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","t":"When the commit itself is ambiguous","x":"Everything above rests on one commit, which makes it fair to ask what happens when the commit is the thing that fails. A commit can fail after the database has applied it but…"},"1841":{"u":"/articles/transactional-outbox-dotnet.html#the-delivery-side-outboxprocessor","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","t":"The delivery side: OutboxProcessor","x":"A background service, OutboxProcessor, drains the outbox. The details that make it production-grade: - It only touches its own outbox. Under database-per-service, every…"},"1842":{"u":"/articles/transactional-outbox-dotnet.html#the-same-code-dispatches-in-process-and-over-a-broker","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","t":"The same code dispatches in-process and over a broker","x":"Here is where the outbox earns its place in a framework whose whole thesis is \"monolith now, microservices later.\" The event you raised does not know how it will be delivered.…"},"1843":{"u":"/articles/transactional-outbox-dotnet.html#when-the-consumer-runs-out-of-retries","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","t":"When the consumer runs out of retries","x":"The outbox makes the publish durable. It says nothing about what happens after the broker accepts the message, and that is the other half of delivery. MassTransit applies its own…"},"1844":{"u":"/articles/transactional-outbox-dotnet.html#the-write-that-skips-the-whole-pipeline","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","t":"The write that skips the whole pipeline","x":"Everything above depends on one assumption: that writes go through SaveChangesAsync. There is a write that does not, and it is worth knowing before you reach for it, because the…"},"1845":{"u":"/articles/transactional-outbox-dotnet.html#trade-offs-honestly","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The outbox is not free, and the rubric review of this framework names the rough edges: - At-least-once means duplicates are possible. A consumer can receive the same event twice…"},"1846":{"u":"/articles/transactional-outbox-dotnet.html#apply-this-even-without-mmca","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The idea ports to any stack: 1. Write the event row in the same transaction as the state change. If your ORM cannot do that, you do not have an outbox, you have a hopeful second…"},"1847":{"u":"/articles/database-per-service.html","d":"Database-per-service inside a monolith (and why)","k":"The MMCA.Common series","x":"Subtitle: One DbContext class. Many databases. A host with no extra configuration behaves exactly like a single-database monolith, and the same code runs against per-service…"},"1848":{"u":"/articles/database-per-service.html#why-it-matters","d":"Database-per-service inside a monolith (and why)","k":"The MMCA.Common series","t":"Why it matters","x":"Two failures hide in the shared-database monolith, and both surface at the worst possible time. The first is the coupling itself. Once a foreign key spans two modules, those…"},"1849":{"u":"/articles/database-per-service.html#the-mmca-answer-one-context-class-one-instance-per-database","d":"Database-per-service inside a monolith (and why)","k":"The MMCA.Common series","t":"The MMCA answer: one context class, one instance per database","x":"The single most counter-intuitive fact, and the one every other choice flows from: there is exactly one concrete context class per engine (SQLServerDbContext,…"},"1850":{"u":"/articles/database-per-service.html#what-it-looks-like-in-configuration","d":"Database-per-service inside a monolith (and why)","k":"The MMCA.Common series","t":"What it looks like in configuration","x":"You do not write routing code. You write configuration, and the same compiled binary becomes a monolith or a set of isolated services depending on what is in appsettings.json.…"},"1851":{"u":"/articles/database-per-service.html#the-third-axis-which-customer-owns-the-row","d":"Database-per-service inside a monolith (and why)","k":"The MMCA.Common series","t":"The third axis: which customer owns the row","x":"Source name is one axis of partitioning, and the engine is another (that is the next article). Neither of them is a tenant. ADR-073 adds the third axis, \"which customer does this…"},"1852":{"u":"/articles/database-per-service.html#trade-offs-honestly","d":"Database-per-service inside a monolith (and why)","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"ADR-006 lists the bill in plain terms, and it is a real bill. - No distributed transactions. When a save spans sources, DbContextFactory.ExecuteInTransactionAsync opens a…"},"1853":{"u":"/articles/database-per-service.html#apply-this-even-without-mmca","d":"Database-per-service inside a monolith (and why)","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The mechanism is EF-specific, but the discipline ports to any stack. 1. Decide an entity's home logically, not physically. Route by module or bounded context, with a default that…"},"1854":{"u":"/articles/polyglot-persistence.html","d":"One entity model, four databases: polyglot persistence behind a single attribute","k":"The MMCA.Common series","x":"Subtitle: A domain entity should not know which database engine stores it. Here is a design where the same entity moves between SQL Server, PostgreSQL, Cosmos DB, and SQLite by…"},"1855":{"u":"/articles/polyglot-persistence.html#two-axes-not-one","d":"One entity model, four databases: polyglot persistence behind a single attribute","k":"The MMCA.Common series","t":"Two axes, not one","x":"This is the companion to the database-per-service article (Article 10), and the two are deliberately orthogonal. It helps to name the axes. Database-per-service (ADR-006) is the…"},"1856":{"u":"/articles/polyglot-persistence.html#the-configuration-hierarchy-where-the-engine-lives","d":"One entity model, four databases: polyglot persistence behind a single attribute","k":"The MMCA.Common series","t":"The configuration hierarchy: where the engine lives","x":"Every entity in the framework gets an EntityConfiguration class. The relevant inheritance chain is short and worth holding in your head. At the bottom is…"},"1857":{"u":"/articles/polyglot-persistence.html#the-entity-move-is-one-token","d":"One entity model, four databases: polyglot persistence behind a single attribute","k":"The MMCA.Common series","t":"The entity move is one token","x":"So what does it take to move Session from SQL Server to Cosmos? You change its configuration's base class from EntityTypeConfigurationSQLServer to EntityTypeConfigurationCosmos .…"},"1858":{"u":"/articles/polyglot-persistence.html#when-a-relationship-crosses-an-engine-boundary","d":"One entity model, four databases: polyglot persistence behind a single attribute","k":"The MMCA.Common series","t":"When a relationship crosses an engine boundary","x":"A document store cannot enforce a foreign key into a SQL table. So the moment Session moves to Cosmos while the Event it references stays in SQL Server, the relationship between…"},"1859":{"u":"/articles/polyglot-persistence.html#keeping-a-cross-source-predicate-translatable","d":"One entity model, four databases: polyglot persistence behind a single attribute","k":"The MMCA.Common series","t":"Keeping a cross-source predicate translatable","x":"Degrading the relationship solves the schema. It does not solve the query. Suppose you want all sessions whose event is published. Written the obvious way, that is a navigation:…"},"1860":{"u":"/articles/polyglot-persistence.html#the-honest-adoption-note","d":"One entity model, four databases: polyglot persistence behind a single attribute","k":"The MMCA.Common series","t":"The honest adoption note","x":"Here is the part most articles would quietly omit. All of the above is shipped and tested. None of it is running in production yet. Today, every current production entity…"},"1861":{"u":"/articles/polyglot-persistence.html#trade-offs-honestly","d":"One entity model, four databases: polyglot persistence behind a single attribute","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Cosmos has no JOINs, and the framework does not pretend otherwise. The whole resolve-then-filter-by-FK machinery exists because you cannot join across containers or across…"},"1862":{"u":"/articles/polyglot-persistence.html#apply-this-even-without-mmca","d":"One entity model, four databases: polyglot persistence behind a single attribute","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any stack with EF Core or a comparable configuration-driven ORM: 1. Keep the entity engine-free. The domain class is a plain object. The persistence engine…"},"1863":{"u":"/articles/navigation-populators.html","d":"EF Core Include chains are a trap: navigation populators decouple eager loading","k":"The MMCA.Common series","x":"Subtitle: Include(x).Include(y).ThenInclude(z) couples your read model to one physical database. Here is the eager-loading boundary that batch-loads related data and survives…"},"1864":{"u":"/articles/navigation-populators.html#why-it-matters","d":"EF Core Include chains are a trap: navigation populators decouple eager loading","k":"The MMCA.Common series","t":"Why it matters","x":"The cartesian explosion is the famous failure, and EF Core has a fix for it (AsSplitQuery), but split query is a band-aid on the deeper problem: Include is a JOIN, and a JOIN…"},"1865":{"u":"/articles/navigation-populators.html#the-mmca-answer-classify-then-batch-load-through-a-populator","d":"EF Core Include chains are a trap: navigation populators decouple eager loading","k":"The MMCA.Common series","t":"The MMCA answer: classify, then batch-load through a populator","x":"MMCA.Common splits the question into three responsibilities that live in three different layers, and no EF knowledge leaks upward. The Domain layer declares only what…"},"1866":{"u":"/articles/navigation-populators.html#the-boundary-that-survives-extraction","d":"EF Core Include chains are a trap: navigation populators decouple eager loading","k":"The MMCA.Common series","t":"The boundary that survives extraction","x":"Here is why this is not over-engineering. When you split a module out and a relationship's two ends move to different physical sources, the EF model's…"},"1867":{"u":"/articles/navigation-populators.html#trade-offs-honestly","d":"EF Core Include chains are a trap: navigation populators decouple eager loading","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"ADR-002 names the rough edges rather than hiding them. - Extra abstraction for the single-database case. For a pure single-SQL-Server host where Include always works, the…"},"1868":{"u":"/articles/navigation-populators.html#apply-this-even-without-mmca","d":"EF Core Include chains are a trap: navigation populators decouple eager loading","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any stack that might outgrow one database: 1. Stop assuming a relationship is a JOIN. Treat \"can these two be loaded together in one query?\" as a runtime…"},"1869":{"u":"/articles/optimistic-concurrency-rowversion.html","d":"Optimistic concurrency you cannot opt out of: RowVersion from the database to a required If-Match","k":"The MMCA.Common series","x":"Subtitle: Two admins open the same session, both edit it, both hit Save. Without a precondition the second write silently wins and the first admin's change is gone, with no…"},"1870":{"u":"/articles/optimistic-concurrency-rowversion.html#why-it-matters-and-why-it-is-not-idempotency","d":"Optimistic concurrency you cannot opt out of: RowVersion from the database to a required If-Match","k":"The MMCA.Common series","t":"Why it matters, and why it is not idempotency","x":"The lost update is a data-integrity bug that never announces itself. It does not throw. It does not log. It leaves a perfectly valid-looking row. You find out when the organizer…"},"1871":{"u":"/articles/optimistic-concurrency-rowversion.html#the-mmca-answer-a-database-token-handed-out-as-an-etag-demanded-back-as-a-precondition","d":"Optimistic concurrency you cannot opt out of: RowVersion from the database to a required If-Match","k":"The MMCA.Common series","t":"The MMCA answer: a database token, handed out as an ETag, demanded back as a precondition","x":"The mechanism is a concurrency token that the database manages, the read model exposes, the client states back in the If-Match header, and the persistence layer plants as EF's…"},"1872":{"u":"/articles/optimistic-concurrency-rowversion.html#the-detail-that-actually-makes-it-a-conflict","d":"Optimistic concurrency you cannot opt out of: RowVersion from the database to a required If-Match","k":"The MMCA.Common series","t":"The detail that actually makes it a conflict","x":"The interesting part is not \"store a version number.\" It is where the comparison happens. A hand-rolled \"read the current token, compare it to the client's, then save if they…"},"1873":{"u":"/articles/optimistic-concurrency-rowversion.html#from-exception-to-a-status-at-the-edge","d":"Optimistic concurrency you cannot opt out of: RowVersion from the database to a required If-Match","k":"The MMCA.Common series","t":"From exception to a status at the edge","x":"DbUpdateConcurrencyException is a DbUpdateException, and the framework already has one handler for that whole family. DbUpdateExceptionHandler translates any DbUpdateException…"},"1874":{"u":"/articles/optimistic-concurrency-rowversion.html#the-transport-a-weak-etag-out-a-required-if-match-back","d":"Optimistic concurrency you cannot opt out of: RowVersion from the database to a required If-Match","k":"The MMCA.Common series","t":"The transport: a weak ETag out, a required If-Match back","x":"The same RowVersion, the same SetOriginalRowVersion extension point, the same comparison inside the UPDATE. The header is where the token lives on the wire, which means anything…"},"1875":{"u":"/articles/optimistic-concurrency-rowversion.html#the-invariant-one-source-for-the-precondition","d":"Optimistic concurrency you cannot opt out of: RowVersion from the database to a required If-Match","k":"The MMCA.Common series","t":"The invariant: one source for the precondition","x":"A convention that lives only in a code-review checklist rots. So the one-transport rule is enforced mechanically. ArchitectureRules.UpdateRequestsAreNotConcurrencyAware scans…"},"1876":{"u":"/articles/optimistic-concurrency-rowversion.html#trade-offs-honestly","d":"Optimistic concurrency you cannot opt out of: RowVersion from the database to a required If-Match","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- The precondition is mandatory, and that is a real constraint. A caller that has not read the resource cannot write it. There is no null token, no wildcard escape, no…"},"1877":{"u":"/articles/optimistic-concurrency-rowversion.html#apply-this-even-without-mmca","d":"Optimistic concurrency you cannot opt out of: RowVersion from the database to a required If-Match","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any load-modify-save stack: 1. Put a database-managed concurrency token on your rows (SQL Server rowversion, a Postgres xmin, or an application-managed…"},"1878":{"u":"/articles/self-ordering-modules.html","d":"Self-ordering modules: discovered, Kahn-ordered, and extractable","k":"The MMCA.Common series","x":"Subtitle: A module declares its name and its dependencies. The framework discovers every module, sorts them with Kahn's algorithm, and registers them in an order where a…"},"1879":{"u":"/articles/self-ordering-modules.html#why-ordering-is-a-correctness-concern-not-a-style-one","d":"Self-ordering modules: discovered, Kahn-ordered, and extractable","k":"The MMCA.Common series","t":"Why ordering is a correctness concern, not a style one","x":"In MMCA.Common the registration order is not cosmetic. The CQRS pipeline wraps command and query handlers with decorators (logging, caching, validation, transactions) using…"},"1880":{"u":"/articles/self-ordering-modules.html#a-module-declares-intent-not-position","d":"Self-ordering modules: discovered, Kahn-ordered, and extractable","k":"The MMCA.Common series","t":"A module declares intent, not position","x":"A module in MMCA.Common is an IModule. The contract is deliberately small: Three of the five members ship with default implementations, so a minimal module implements only Name…"},"1881":{"u":"/articles/self-ordering-modules.html#the-engine-moduleloader-and-kahns-algorithm","d":"Self-ordering modules: discovered, Kahn-ordered, and extractable","k":"The MMCA.Common series","t":"The engine: ModuleLoader and Kahn's algorithm","x":"ModuleLoader is the piece that turns those declarations into an order. Its DiscoverAndRegister method scans the assemblies the host names in a required moduleAssemblies…"},"1882":{"u":"/articles/self-ordering-modules.html#disabling-a-module-without-breaking-its-consumers","d":"Self-ordering modules: discovered, Kahn-ordered, and extractable","k":"The MMCA.Common series","t":"Disabling a module without breaking its consumers","x":"Here is the part that turns this from a tidy registration trick into an extraction mechanism. A host can disable a module through configuration. ModulesSettings binds the…"},"1883":{"u":"/articles/self-ordering-modules.html#convention-scanning-what-a-modules-register-actually-wires","d":"Self-ordering modules: discovered, Kahn-ordered, and extractable","k":"The MMCA.Common series","t":"Convention scanning: what a module's Register actually wires","x":"Modules do not hand-register every handler. ScanModuleApplicationServices () is the Scrutor-based convention scan that a module's Add{X}Module calls to register, by assembly,…"},"1884":{"u":"/articles/self-ordering-modules.html#each-module-is-the-unit-of-extraction","d":"Self-ordering modules: discovered, Kahn-ordered, and extractable","k":"The MMCA.Common series","t":"Each module is the unit of extraction","x":"The reason all of this is worth the machinery is that the module is also the deploy and scale boundary, and the same self-ordering ModuleLoader registration runs at both ends of…"},"1885":{"u":"/articles/self-ordering-modules.html#trade-offs-honestly","d":"Self-ordering modules: discovered, Kahn-ordered, and extractable","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Reflection at startup. Discovery calls GetTypes() on every assembly the host named. This is a startup cost, paid once, and the per-GetTypes() guard means a load-time exception…"},"1886":{"u":"/articles/self-ordering-modules.html#apply-this-even-without-mmca","d":"Self-ordering modules: discovered, Kahn-ordered, and extractable","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports cleanly to any DI container: 1. Give each module a name and a declared dependency list, not a hard-coded registration position. 2. Topologically sort before you…"},"1887":{"u":"/articles/event-schema-versioning.html","d":"Event-schema versioning: never silently reshape an event","k":"The MMCA.Common series","x":"Subtitle: An integration event is a wire contract the moment it crosses a service boundary. Reshape it in place and you break consumers that are already deployed. Here is the…"},"1888":{"u":"/articles/event-schema-versioning.html#why-it-matters","d":"Event-schema versioning: never silently reshape an event","k":"The MMCA.Common series","t":"Why it matters","x":"In a monolith, an event handler and the code that raises the event compile together. Reshape the event and the consumer fails to compile; you fix it in the same commit. The type…"},"1889":{"u":"/articles/event-schema-versioning.html#the-mmca-answer-a-version-on-every-event-and-a-rule-for-changing-it","d":"Event-schema versioning: never silently reshape an event","k":"The MMCA.Common series","t":"The MMCA answer: a version on every event, and a rule for changing it","x":"The decision has two halves: a signal that is enforced, and a discipline for breaking changes. Half one: every integration event carries an explicit SchemaVersion. The base…"},"1890":{"u":"/articles/event-schema-versioning.html#how-it-complements-the-outbox","d":"Event-schema versioning: never silently reshape an event","k":"The MMCA.Common series","t":"How it complements the outbox","x":"This sits directly on top of the transactional outbox (ADR-003). The outbox guarantees an event is delivered at least once: persisted atomically with the state change, then…"},"1891":{"u":"/articles/event-schema-versioning.html#trade-offs-honestly","d":"Event-schema versioning: never silently reshape an event","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"ADR-010 is candid that the field is a signal, not a complete mechanism. - SchemaVersion by itself does not stop a consumer breaking on a real reshape. It is a value on the wire,…"},"1892":{"u":"/articles/event-schema-versioning.html#apply-this-even-without-mmca","d":"Event-schema versioning: never silently reshape an event","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The policy ports to any event-driven system with independently deployed consumers: 1. Put an explicit version on every event, and make it un-skippable. A test that fails the…"},"1893":{"u":"/articles/jwks-cross-service-auth.html","d":"Cross-service auth without a shared secret: JWKS dual-fetch","k":"The MMCA.Common series","x":"Subtitle: When you split a monolith into services, the easy answer is to copy the JWT signing secret into every validator. That is also the answer that turns one leaked key into…"},"1894":{"u":"/articles/jwks-cross-service-auth.html#why-it-matters","d":"Cross-service auth without a shared secret: JWKS dual-fetch","k":"The MMCA.Common series","t":"Why it matters","x":"Symmetric signing couples trust to secret distribution. The more services you have, the more copies of the forge-anything key exist, and the more places it can leak: a…"},"1895":{"u":"/articles/jwks-cross-service-auth.html#the-mmca-answer-publish-the-public-half-as-a-jwks-document","d":"Cross-service auth without a shared secret: JWKS dual-fetch","k":"The MMCA.Common series","t":"The MMCA answer: publish the public half as a JWKS document","x":"The framework's token service supports two signing algorithms, selected by the concrete JwtSettings.SigningAlgorithm, which defaults to RS256: - Monolith mode: HS256 (symmetric…"},"1896":{"u":"/articles/jwks-cross-service-auth.html#the-dual-fetch-and-the-graceful-empty-set","d":"Cross-service auth without a shared secret: JWKS dual-fetch","k":"The MMCA.Common series","t":"The dual-fetch, and the graceful empty set","x":"The dual-fetch ADR-004 describes is in the key discovery itself: a validator discovers the issuer's public key from the JWKS endpoint, and the framework falls back gracefully…"},"1897":{"u":"/articles/jwks-cross-service-auth.html#jwt-algorithm-pinning-the-attack-you-would-otherwise-ship","d":"Cross-service auth without a shared secret: JWKS dual-fetch","k":"The MMCA.Common series","t":"JWT algorithm pinning: the attack you would otherwise ship","x":"Switching to asymmetric keys opens a specific, classic attack, and the framework closes it explicitly. Once the RSA public key is published (which is the entire point of JWKS),…"},"1898":{"u":"/articles/jwks-cross-service-auth.html#trade-offs-honestly","d":"Cross-service auth without a shared secret: JWKS dual-fetch","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The JWKS layer is the right model, but it is not free, and the §11 review of the framework names the rough edges. - Two round trips on successful login. The Identity service's…"},"1899":{"u":"/articles/jwks-cross-service-auth.html#apply-this-even-without-mmca","d":"Cross-service auth without a shared secret: JWKS dual-fetch","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any stack with a JWT story: 1. In a single process, symmetric (HS256) is fine. Do not add asymmetric complexity you do not need. The signer and validator are…"},"1900":{"u":"/articles/password-hashing.html","d":"Password hashing done right: PBKDF2-SHA512, 600k iterations, timing-safe","k":"The MMCA.Common series","x":"Subtitle: Storing a password is a solved problem, and almost every breach headline is someone who solved it the wrong way. Here are the four decisions that separate a hash you…"},"1901":{"u":"/articles/password-hashing.html#why-it-matters","d":"Password hashing done right: PBKDF2-SHA512, 600k iterations, timing-safe","k":"The MMCA.Common series","t":"Why it matters","x":"A leaked password table is not just a breach of your app. People reuse passwords. The credentials you fail to protect become the keys an attacker tries against their bank, their…"},"1902":{"u":"/articles/password-hashing.html#the-mmca-answer-a-deliberately-slow-kdf-salted-compared-in-constant-time","d":"Password hashing done right: PBKDF2-SHA512, 600k iterations, timing-safe","k":"The MMCA.Common series","t":"The MMCA answer: a deliberately slow KDF, salted, compared in constant time","x":"MMCA.Common ships one production password hasher, split the Clean-Architecture way: the IPasswordHasher port sits in MMCA.Common.Application and its single PasswordHasher…"},"1903":{"u":"/articles/password-hashing.html#defense-in-depth-pii-at-rest-not-just-passwords","d":"Password hashing done right: PBKDF2-SHA512, 600k iterations, timing-safe","k":"The MMCA.Common series","t":"Defense in depth: PII at rest, not just passwords","x":"Passwords are the famous case, but they are not the only personal data sitting in your database. MMCA.Common ships field-level PII encryption as a separate control, now recorded…"},"1904":{"u":"/articles/password-hashing.html#trade-offs-honestly","d":"Password hashing done right: PBKDF2-SHA512, 600k iterations, timing-safe","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"A credible security post owns its rough edges, and a few sit around this hash rather than in it. - Plain-HTTP metadata discovery is an opt-out, not a default.…"},"1905":{"u":"/articles/password-hashing.html#apply-this-even-without-mmca","d":"Password hashing done right: PBKDF2-SHA512, 600k iterations, timing-safe","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The rules port to any stack, and they are short enough to memorize: 1. Never store plaintext, and never use a fast hash (MD5, SHA-1, plain SHA-256/512) for passwords. Use a…"},"1906":{"u":"/articles/idempotency-attribute.html","d":"Idempotency in one attribute: safe retries for HTTP APIs","k":"The MMCA.Common series","x":"Subtitle: Clients retry. Resilient HTTP handlers retry harder. A POST that creates a resource must survive being sent twice. Here is the whole thing in one [Idempotent]…"},"1907":{"u":"/articles/idempotency-attribute.html#why-it-matters","d":"Idempotency in one attribute: safe retries for HTTP APIs","k":"The MMCA.Common series","t":"Why it matters","x":"The non-idempotent POST is a quiet, expensive bug. It does not throw. It does not log an error. It produces a second perfectly valid-looking row. You find out when finance…"},"1908":{"u":"/articles/idempotency-attribute.html#the-mechanism-one-attribute-one-header","d":"Idempotency in one attribute: safe retries for HTTP APIs","k":"The MMCA.Common series","t":"The mechanism: one attribute, one header","x":"You mark an action [Idempotent]: The generic create action in the framework's controller bases carries [Idempotent] by default, so most write endpoints get it for free. The…"},"1909":{"u":"/articles/idempotency-attribute.html#the-concurrency-detail-that-actually-matters","d":"Idempotency in one attribute: safe retries for HTTP APIs","k":"The MMCA.Common series","t":"The concurrency detail that actually matters","x":"The interesting part is not \"cache the response.\" It is what happens when two duplicates arrive at the same time, before the first has finished. A naive cache check would let…"},"1910":{"u":"/articles/idempotency-attribute.html#the-same-problem-shows-up-on-the-broker-and-the-inbox-is-the-matching-mechanism","d":"Idempotency in one attribute: safe retries for HTTP APIs","k":"The MMCA.Common series","t":"The same problem shows up on the broker, and the inbox is the matching mechanism","x":"HTTP retries are one source of duplicates. The other is the message broker. MMCA.Common's outbox gives at-least-once delivery: an event may be published twice (the publish…"},"1911":{"u":"/articles/idempotency-attribute.html#trade-offs-honestly","d":"Idempotency in one attribute: safe retries for HTTP APIs","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Clients must send a stable key, from a stable identity. Idempotency is a contract, not magic. If a client generates a fresh key per retry, every retry is a \"new\" request and…"},"1912":{"u":"/articles/idempotency-attribute.html#apply-this-even-without-mmca","d":"Idempotency in one attribute: safe retries for HTTP APIs","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any HTTP stack: 1. Accept an Idempotency-Key header on write endpoints and require clients to keep it stable across retries. 2. Cache the first response…"},"1913":{"u":"/articles/self-invalidating-cache.html","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","x":"Subtitle: A read-through cache is easy. Keeping it correct is the hard part. Here is a cache where a write invalidates the reads it staled automatically, because invalidation…"},"1914":{"u":"/articles/self-invalidating-cache.html#why-invalidation-belongs-in-the-pipeline-not-the-handler","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","t":"Why invalidation belongs in the pipeline, not the handler","x":"A handler's job is one use case. The fact that succeeding at that use case happens to stale some cached reads is a cross-cutting concern, not part of the use case. Tie the two…"},"1915":{"u":"/articles/self-invalidating-cache.html#the-cache-abstraction","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","t":"The cache abstraction","x":"The whole subsystem is small and deliberate. The Application layer depends on one port: Four cache operations, a counter primitive, and one composed read-through helper.…"},"1916":{"u":"/articles/self-invalidating-cache.html#one-contract-three-backends","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","t":"One contract, three backends","x":"AddCaching() picks a backend by probing the container. If a real distributed cache is registered (an IDistributedCache that is not the default MemoryDistributedCache, typically…"},"1917":{"u":"/articles/self-invalidating-cache.html#the-read-path-opt-in-by-marker-interface","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","t":"The read path: opt in by marker interface","x":"A query caches by implementing IQueryCacheable (it supplies the cache key and the retention duration). The CachingQueryDecorator does the read-through: On a hit, the decorator…"},"1918":{"u":"/articles/self-invalidating-cache.html#the-write-path-invalidate-on-success-outside-the-transaction","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","t":"The write path: invalidate on success, outside the transaction","x":"A command invalidates by implementing ICacheInvalidating, which exposes a CachePrefix. The CachingCommandDecorator runs the inner handler first, then evicts: The decorator calls…"},"1919":{"u":"/articles/self-invalidating-cache.html#swallowing-a-failure-is-a-discipline-not-a-catch","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","t":"Swallowing a failure is a discipline, not a catch","x":"That swallow is the right call here and a dangerous habit everywhere else, so the framework gives it a name: BestEffort.ExecuteAsync(operation, logger, action, ct), for a side…"},"1920":{"u":"/articles/self-invalidating-cache.html#the-two-key-transformations-the-pipeline-applies","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","t":"The two key transformations the pipeline applies","x":"Everything above treats the query's CacheKey and the command's CachePrefix as literal strings. At the decorator layer there are two exceptions, and they are the parts of key…"},"1921":{"u":"/articles/self-invalidating-cache.html#what-the-cache-is-and-is-not","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","t":"What the cache is, and is not","x":"This is a request-result read-through cache for query handlers. It is not a session store and not a write-behind buffer. The cross-source consistency mechanism in this framework…"},"1922":{"u":"/articles/self-invalidating-cache.html#the-edge-tier-caching-authenticated-reads-without-leaking-identity","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","t":"The edge tier: caching authenticated reads without leaking identity","x":"Tier 2 sits in front of the handler instead of inside the pipeline. MMCA.Common.API always calls app.UseOutputCache() but ships no policies: each host opts in. A read-heavy…"},"1923":{"u":"/articles/self-invalidating-cache.html#trade-offs-honestly","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Cache key correctness is the consumer's responsibility. The framework gives you read-through caching and prefix invalidation. It cannot know that GetProductQuery's key and…"},"1924":{"u":"/articles/self-invalidating-cache.html#apply-this-even-without-mmca","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any stack with a decoratable handler pipeline: 1. Put the cache behind a port the business layer depends on (Get, Set, Remove, RemoveByPrefix), and choose…"},"1925":{"u":"/articles/problem-details-http-grpc.html","d":"Problem Details across HTTP and gRPC (RFC 9457)","k":"The MMCA.Common series","x":"Subtitle: One error model, two transports. How a Result failure becomes the same RFC 9457 shape whether the caller reached you over HTTP or gRPC, and the honest gaps that still…"},"1926":{"u":"/articles/problem-details-http-grpc.html#why-it-matters","d":"Problem Details across HTTP and gRPC (RFC 9457)","k":"The MMCA.Common series","t":"Why it matters","x":"A consistent error contract is not cosmetic. It is the difference between a client that can branch on \"was this a validation problem, a not-found, or a conflict?\" mechanically,…"},"1927":{"u":"/articles/problem-details-http-grpc.html#the-mmca-answer-one-mapping-table-reused-on-both-transports","d":"Problem Details across HTTP and gRPC (RFC 9457)","k":"The MMCA.Common series","t":"The MMCA answer: one mapping table, reused on both transports","x":"MMCA.Common's whole error story starts from one decision recorded across the codebase: expected failures are values, not exceptions. Handlers return Result carrying an Error…"},"1928":{"u":"/articles/problem-details-http-grpc.html#the-rest-of-the-9-contract","d":"Problem Details across HTTP and gRPC (RFC 9457)","k":"The MMCA.Common series","t":"The rest of the §9 contract","x":"The same edge standardizes the things that drift if left to each endpoint: - Pagination and filtering. The generic read controllers expose GET /paged with filter, sort, and page…"},"1929":{"u":"/articles/problem-details-http-grpc.html#trade-offs-honestly","d":"Problem Details across HTTP and gRPC (RFC 9457)","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The scorecard scores §9 (API and Contract Design) at Maturity 4 of 4 and Implementation 9 of 10 (weighted 8/18). The category sits at the maturity ceiling: the contract is…"},"1930":{"u":"/articles/problem-details-http-grpc.html#apply-this-even-without-mmca","d":"Problem Details across HTTP and gRPC (RFC 9457)","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any stack with more than one client or more than one transport: 1. Model expected failures as typed values, not exceptions or ad-hoc status codes. A small…"},"1931":{"u":"/articles/notifications-vertical-slice.html","d":"Notifications as a vertical slice: in-app inbox, real-time push, native push, and email","k":"The MMCA.Common series","x":"Subtitle: A framework is mostly horizontal layers and abstract base classes. Notifications is the one concrete bounded context MMCA.Common ships, and it is built as a textbook…"},"1932":{"u":"/articles/notifications-vertical-slice.html#horizontal-layer-cut-vs-vertical-slice","d":"Notifications as a vertical slice: in-app inbox, real-time push, native push, and email","k":"The MMCA.Common series","t":"Horizontal layer cut vs. vertical slice","x":"The horizontal instinct is to organize by technical role. All the controllers in one folder, all the handlers in another, all the EF configurations in a third. The cost shows up…"},"1933":{"u":"/articles/notifications-vertical-slice.html#sending-a-push-notification-end-to-end","d":"Notifications as a vertical slice: in-app inbox, real-time push, native push, and email","k":"The MMCA.Common series","t":"Sending a push notification, end to end","x":"The send flow is the most instructive because it touches distinct consistency concerns: a deduplication check, a durable audit record, a per-user inbox, and two best-effort…"},"1934":{"u":"/articles/notifications-vertical-slice.html#retry-safety-on-two-levels-the-idempotency-filter-and-the-dedup-key","d":"Notifications as a vertical slice: in-app inbox, real-time push, native push, and email","k":"The MMCA.Common series","t":"Retry safety on two levels: the idempotency filter and the dedup key","x":"A broadcast is exactly the operation you never want to run twice, and the two ways it gets run twice are different problems. The client retries the HTTP call; or two retries…"},"1935":{"u":"/articles/notifications-vertical-slice.html#the-push-channel-an-adapter-chosen-at-composition-not-branched-at-runtime","d":"Notifications as a vertical slice: in-app inbox, real-time push, native push, and email","k":"The MMCA.Common series","t":"The push channel: an adapter chosen at composition, not branched at runtime","x":"The real-time channel is two cooperating types. NotificationHub is an [Authorize]d SignalR Hub. For this durable-push slice it contributes a ReceiveNotification method-name…"},"1936":{"u":"/articles/notifications-vertical-slice.html#the-native-push-channel-reaching-devices-the-hub-cannot","d":"Notifications as a vertical slice: in-app inbox, real-time push, native push, and email","k":"The MMCA.Common series","t":"The native push channel: reaching devices the hub cannot","x":"The SignalR leg stops at the edge of a connected client. A phone with the app backgrounded, killed, or offline hears nothing until the next launch, and conference announcements…"},"1937":{"u":"/articles/notifications-vertical-slice.html#the-in-app-inbox-pure-cqrs-readwrite-scoped-to-the-caller","d":"Notifications as a vertical slice: in-app inbox, real-time push, native push, and email","k":"The MMCA.Common series","t":"The in-app inbox: pure CQRS read/write, scoped to the caller","x":"The inbox is the durable channel, exposed by InboxController to any authenticated user (unlike the organizer-only send and history endpoints). Four slices back it: -…"},"1938":{"u":"/articles/notifications-vertical-slice.html#the-email-channel-and-the-feature-gate-over-all-of-it","d":"Notifications as a vertical slice: in-app inbox, real-time push, native push, and email","k":"The MMCA.Common series","t":"The email channel, and the feature gate over all of it","x":"Email is the smallest channel: one port IEmailSender and one SMTP adapter SmtpEmailSender, which constructs and disposes a fresh SmtpClient per send. It is independent of the…"},"1939":{"u":"/articles/notifications-vertical-slice.html#identifier-aliases-keep-the-ids-honest","d":"Notifications as a vertical slice: in-app inbox, real-time push, native push, and email","k":"The MMCA.Common series","t":"Identifier aliases keep the IDs honest","x":"A small but consistent detail: the notification entities do not type their keys as bare int. The slice uses solution-wide identifier aliases declared once in…"},"1940":{"u":"/articles/notifications-vertical-slice.html#trade-offs-honestly","d":"Notifications as a vertical slice: in-app inbox, real-time push, native push, and email","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Best-effort real-time, durable record. The deliberate swallow of delivery exceptions means a push can fail silently as far as the WebSocket is concerned. That is the right call…"},"1941":{"u":"/articles/notifications-vertical-slice.html#apply-this-even-without-mmca","d":"Notifications as a vertical slice: in-app inbox, real-time push, native push, and email","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The vertical-slice discipline ports to any stack: 1. Organize by feature, not by technical role. Keep a feature's domain, use cases, adapters, and endpoints together so the…"},"1942":{"u":"/articles/live-channel-push.html","d":"Ephemeral by design: sub-second live channels over one SignalR hub","k":"The MMCA.Common series","x":"Subtitle: Conference-day polls and Q&A need small events fanned out to whoever is watching the page right now, and persisting them is wrong. Here is how MMCA.Common adds…"},"1943":{"u":"/articles/live-channel-push.html#two-message-shapes-not-two-transports","d":"Ephemeral by design: sub-second live channels over one SignalR hub","k":"The MMCA.Common series","t":"Two message shapes, not two transports","x":"The mistake in both approaches is treating \"durable notification\" and \"live update\" as if the difference lives in the transport. It does not. Both are small messages pushed over…"},"1944":{"u":"/articles/live-channel-push.html#the-mmca-answer-one-hub-two-publisher-paths","d":"Ephemeral by design: sub-second live channels over one SignalR hub","k":"The MMCA.Common series","t":"The MMCA answer: one hub, two publisher paths","x":"The single NotificationHub gains channel semantics. A channel is just a SignalR group named by a key like event:1 or session:123, and the hub gets its first client-invokable…"},"1945":{"u":"/articles/live-channel-push.html#joining-a-channel-and-why-the-key-is-validated","d":"Ephemeral by design: sub-second live channels over one SignalR hub","k":"The MMCA.Common series","t":"Joining a channel, and why the key is validated","x":"Channel membership is a property of the one existing connection, which is the point of not adding a second hub. On the browser side, NotificationHubService carries both traffic…"},"1946":{"u":"/articles/live-channel-push.html#crossing-a-service-boundary-the-grpc-ingress","d":"Ephemeral by design: sub-second live channels over one SignalR hub","k":"The MMCA.Common series","t":"Crossing a service boundary: the gRPC ingress","x":"Here is where the publisher abstraction earns its keep. In ADC the module that raises live events (Engagement, running the poll and Q&A handlers) is not the host that maps the…"},"1947":{"u":"/articles/live-channel-push.html#the-queue-is-where-you-say-what-the-work-is-worth","d":"Ephemeral by design: sub-second live channels over one SignalR hub","k":"The MMCA.Common series","t":"The queue is where you say what the work is worth","x":"The publish queue in this article is one instance of a general contract (ADR-052): work that outlives a request goes on a bounded Channel singleton, drained by a SingleReader…"},"1948":{"u":"/articles/live-channel-push.html#the-sibling-contract-work-a-clock-owns","d":"Ephemeral by design: sub-second live channels over one SignalR hub","k":"The MMCA.Common series","t":"The sibling contract: work a clock owns","x":"The queue above and the durable row beside it answer the same question: a request started work and must not wait for it. Neither can answer the other one. Nothing starts a…"},"1949":{"u":"/articles/live-channel-push.html#trade-offs-honestly","d":"Ephemeral by design: sub-second live channels over one SignalR hub","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The ADR names the sharp edges, and they are all consequences of the ephemeral contract, not accidents: - Ephemeral means lossy. A client that connects after an event was…"},"1950":{"u":"/articles/live-channel-push.html#apply-this-even-without-mmca","d":"Ephemeral by design: sub-second live channels over one SignalR hub","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The idea ports to any real-time stack: 1. Split on the delivery contract, not the transport. \"Must survive an offline user\" and \"only matters on screen\" are different guarantees.…"},"1951":{"u":"/articles/manual-dto-mapping.html","d":"Delete AutoMapper: explicit, compile-time DTO mapping that you can actually test","k":"The MMCA.Common series","x":"Subtitle: Reflection-based mappers feel like they save you work until the day a renamed property silently maps to null in production. Here is the alternative: named mapper…"},"1952":{"u":"/articles/manual-dto-mapping.html#the-case-against-convention-based-mapping","d":"Delete AutoMapper: explicit, compile-time DTO mapping that you can actually test","k":"The MMCA.Common series","t":"The case against convention-based mapping","x":"Be precise about what goes wrong with a reflection mapper, because \"I prefer explicit code\" is not an argument. Here are four concrete failure modes, all things a type system is…"},"1953":{"u":"/articles/manual-dto-mapping.html#two-roles-two-interfaces","d":"Delete AutoMapper: explicit, compile-time DTO mapping that you can actually test","k":"The MMCA.Common series","t":"Two roles, two interfaces","x":"The first design move is to notice that \"mapping\" is actually two different jobs that deserve two different contracts. Reading data out and accepting data in are not symmetric,…"},"1954":{"u":"/articles/manual-dto-mapping.html#why-the-request-mapper-returns-a-result","d":"Delete AutoMapper: explicit, compile-time DTO mapping that you can actually test","k":"The MMCA.Common series","t":"Why the request mapper returns a Result","x":"When you read an entity out, mapping cannot really fail. The data already passed validation when it was written; you are just reshaping a valid object. So the read mapper returns…"},"1955":{"u":"/articles/manual-dto-mapping.html#mapperly-explicit-and-fast-because-a-generator-writes-the-body","d":"Delete AutoMapper: explicit, compile-time DTO mapping that you can actually test","k":"The MMCA.Common series","t":"Mapperly: explicit and fast, because a generator writes the body","x":"The AutoMapper crowd will raise one objection immediately: if you write every mapper by hand, you are back to typing dto.Name = entity.Name; forty times per entity, and that is…"},"1956":{"u":"/articles/manual-dto-mapping.html#auto-discovery-you-write-the-mapper-you-do-not-wire-it","d":"Delete AutoMapper: explicit, compile-time DTO mapping that you can actually test","k":"The MMCA.Common series","t":"Auto-discovery: you write the mapper, you do not wire it","x":"The last piece is registration, and the framework keeps it convention-driven without making it reflection-at-runtime. Mappers are plain classes that implement one of the two…"},"1957":{"u":"/articles/manual-dto-mapping.html#a-concrete-pair","d":"Delete AutoMapper: explicit, compile-time DTO mapping that you can actually test","k":"The MMCA.Common series","t":"A concrete pair","x":"Putting it together, a module holds both directions. The pair below is trimmed from the Store Catalog module's real Product mappers (the delegating sub-mappers, the two…"},"1958":{"u":"/articles/manual-dto-mapping.html#trade-offs-honestly","d":"Delete AutoMapper: explicit, compile-time DTO mapping that you can actually test","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"This is not a free win, and pretending otherwise would be exactly the kind of hand-waving the framework is built to avoid. - It is more boilerplate than AutoMapper's zero-config…"},"1959":{"u":"/articles/manual-dto-mapping.html#apply-this-even-without-mmca","d":"Delete AutoMapper: explicit, compile-time DTO mapping that you can actually test","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"You do not need this framework to adopt the pattern. The ideas port to any stack: 1. Split read mapping from write mapping. They are not symmetric. Reading reshapes valid data;…"},"1960":{"u":"/articles/permission-based-authorization.html","d":"Permission-based authorization: capabilities over role checks","k":"The MMCA.Common series","x":"Subtitle: [Authorize(Roles = \"Organizer\")] couples every endpoint to a role name. The day you need a role that can do most of what an organizer does but not all of it, you are…"},"1961":{"u":"/articles/permission-based-authorization.html#why-it-matters","d":"Permission-based authorization: capabilities over role checks","k":"The MMCA.Common series","t":"Why it matters","x":"Authorization that is coupled to role names has a fixed failure mode: reshaping who-can-do-what means touching endpoints. Every time the org chart of your application changes (a…"},"1962":{"u":"/articles/permission-based-authorization.html#the-mmca-answer-a-registry-a-builder-an-attribute-and-the-gates-that-read-them","d":"Permission-based authorization: capabilities over role checks","k":"The MMCA.Common series","t":"The MMCA answer: a registry, a builder, an attribute, and the gates that read them","x":"The capability layer is a small set of parts, and the design goal running through all of them is that the mechanism grants nothing until a host opts in. The registry is the…"},"1963":{"u":"/articles/permission-based-authorization.html#inert-until-adopted","d":"Permission-based authorization: capabilities over role checks","k":"The MMCA.Common series","t":"Inert until adopted","x":"The piece that makes this safe to add to a framework everyone consumes is that wiring it confers nothing until a host grants something. AddAuthorizationPolicies() always…"},"1964":{"u":"/articles/permission-based-authorization.html#trade-offs-honestly","d":"Permission-based authorization: capabilities over role checks","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The capability indirection earns its keep on exactly the content-editor case, but it is still RBAC, and the §11 review is explicit about the edges. - It is RBAC, not ABAC. The…"},"1965":{"u":"/articles/permission-based-authorization.html#apply-this-even-without-mmca","d":"Permission-based authorization: capabilities over role checks","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern is portable to any policy-based authorization stack: 1. Name capabilities, not roles, on the endpoint. sessions:manage says what the route does; Roles = \"Organizer\"…"},"1966":{"u":"/articles/session-cookie-auth-blazor-ssr.html","d":"Browser session-cookie auth for Blazor SSR: surviving the F5","k":"The MMCA.Common series","x":"Subtitle: Your Blazor app authenticates with a bearer token. Then a user presses F5 on an [Authorize] page and gets bounced to the login screen even though they are signed in.…"},"1967":{"u":"/articles/session-cookie-auth-blazor-ssr.html#why-it-matters","d":"Browser session-cookie auth for Blazor SSR: surviving the F5","k":"The MMCA.Common series","t":"Why it matters","x":"This is the gap between \"the user has a valid session\" and \"the server rendering the first paint can see it.\" A pure bearer-header design has nowhere to put the session that the…"},"1968":{"u":"/articles/session-cookie-auth-blazor-ssr.html#the-mmca-answer-httponly-cookies-plus-an-ssr-time-reader","d":"Browser session-cookie auth for Blazor SSR: surviving the F5","k":"The MMCA.Common series","t":"The MMCA answer: HttpOnly cookies plus an SSR-time reader","x":"The mechanism ships in MMCA.Common.API (a SessionCookies/ folder) with a MMCA.Common.UI companion, and both apps' Web UI hosts wire it. It has four moving parts. Two HttpOnly…"},"1969":{"u":"/articles/session-cookie-auth-blazor-ssr.html#the-csrf-tax-and-how-it-is-paid","d":"Browser session-cookie auth for Blazor SSR: surviving the F5","k":"The MMCA.Common series","t":"The CSRF tax, and how it is paid","x":"Cookie-based auth reintroduces a concern that a pure bearer-header design does not have: a cross-site page can cause the browser to send your cookies. The framework pays that tax…"},"1970":{"u":"/articles/session-cookie-auth-blazor-ssr.html#scaling-out-the-key-ring-has-to-be-shared","d":"Browser session-cookie auth for Blazor SSR: surviving the F5","k":"The MMCA.Common series","t":"Scaling out: the key ring has to be shared","x":"One replica is a special case. Add a second and a failure appears that has nothing to do with the design above: ASP.NET Core's DataProtection key ring lives in memory, per…"},"1971":{"u":"/articles/session-cookie-auth-blazor-ssr.html#trade-offs-honestly","d":"Browser session-cookie auth for Blazor SSR: surviving the F5","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The pattern fixes a real gap, and the §26 review names what it costs. - A non-validating auth scheme exists in your codebase. SessionCookieAuthenticationHandler trusts a cookie…"},"1972":{"u":"/articles/session-cookie-auth-blazor-ssr.html#apply-this-even-without-mmca","d":"Browser session-cookie auth for Blazor SSR: surviving the F5","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The shape ports to any server-prerendered SPA with token auth: 1. Put the session in an HttpOnly cookie, not localStorage. The server can read a cookie during render; it cannot…"},"1973":{"u":"/articles/external-oauth-login.html","d":"Google, GitHub and Apple login without leaking tokens: external OAuth behind your own JWTs","k":"The MMCA.Common series","x":"Subtitle: You want \"Sign in with Google,\" \"Sign in with GitHub,\" and the \"Sign in with Apple\" button the store guidelines ask for. So you add the provider packages, wire the…"},"1974":{"u":"/articles/external-oauth-login.html#why-it-matters","d":"Google, GitHub and Apple login without leaking tokens: external OAuth behind your own JWTs","k":"The MMCA.Common series","t":"Why it matters","x":"The invariant the rest of the system leans on is small and load-bearing: inside the app, a user is always a local User carrying the app's own JWT. Every other auth concern is…"},"1975":{"u":"/articles/external-oauth-login.html#the-mmca-answer-external-oauth-behind-a-local-jwt-exchange","d":"Google, GitHub and Apple login without leaking tokens: external OAuth behind your own JWTs","k":"The MMCA.Common series","t":"The MMCA answer: external OAuth behind a local-JWT exchange","x":"The mechanism ships in MMCA.Common.API, and adoption is one app deep (more on that below). It has three moving parts and one rule: the tokens never touch the URL. Scheme…"},"1976":{"u":"/articles/external-oauth-login.html#the-same-handshake-now-for-native-heads","d":"Google, GitHub and Apple login without leaking tokens: external OAuth behind your own JWTs","k":"The MMCA.Common series","t":"The same handshake, now for native heads","x":"A mobile head cannot intercept a redirect to a web URL, and the providers reject OAuth inside an embedded WebView, so a MAUI app has to run the provider flow in the system…"},"1977":{"u":"/articles/external-oauth-login.html#finding-the-local-user-three-ways","d":"Google, GitHub and Apple login without leaking tokens: external OAuth behind your own JWTs","k":"The MMCA.Common series","t":"Finding the local user, three ways","x":"ExternalLoginAsync is where the external identity becomes one of your users, and it resolves in a deliberate order inside a single transaction. First it looks for a user already…"},"1978":{"u":"/articles/external-oauth-login.html#trade-offs-honestly","d":"Google, GitHub and Apple login without leaking tokens: external OAuth behind your own JWTs","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The pattern buys real safety, and ADR-036 is candid about what it costs. - Opt-in per app, and easy to half-wire. The flow needs four cooperating pieces: scheme registration, the…"},"1979":{"u":"/articles/external-oauth-login.html#apply-this-even-without-mmca","d":"Google, GitHub and Apple login without leaking tokens: external OAuth behind your own JWTs","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The shape ports to any app that wants social login without a second identity system: 1. Terminate federation at the edge. Exchange the external principal for your own token the…"},"1980":{"u":"/articles/jwt-refresh-token-rotation.html","d":"Refresh tokens that rotate per device, and reuse detection that makes theft self-limiting","k":"The MMCA.Common series","x":"Subtitle: A stateless JWT you cannot revoke has to be short-lived, which forces a refresh token, which is a long-lived bearer credential that can be stolen and replayed. Here is…"},"1981":{"u":"/articles/jwt-refresh-token-rotation.html#why-it-matters","d":"Refresh tokens that rotate per device, and reuse detection that makes theft self-limiting","k":"The MMCA.Common series","t":"Why it matters","x":"The two credentials pull in opposite directions, and you cannot collapse them. The access token wants to be stateless (no lookup on the hot path) which means it cannot be revoked…"},"1982":{"u":"/articles/jwt-refresh-token-rotation.html#the-mmca-answer-one-hashed-session-per-device-rotated-on-every-use","d":"Refresh tokens that rotate per device, and reuse detection that makes theft self-limiting","k":"The MMCA.Common series","t":"The MMCA answer: one hashed session per device, rotated on every use","x":"The whole workflow lives in one place: AuthenticationServiceBase (AuthenticationServiceBase.cs:74). Both apps' Identity modules subclass it and change nothing about the token…"},"1983":{"u":"/articles/jwt-refresh-token-rotation.html#both-apps-inherit-it-the-oauth-path-opens-the-same-session","d":"Refresh tokens that rotate per device, and reuse detection that makes theft self-limiting","k":"The MMCA.Common series","t":"Both apps inherit it; the OAuth path opens the same session","x":"The rotation, reuse detection, session cap, and lifetime logic are identical in ADC and Store because neither one owns a copy. ADC's AuthenticationService…"},"1984":{"u":"/articles/jwt-refresh-token-rotation.html#trade-offs-honestly","d":"Refresh tokens that rotate per device, and reuse detection that makes theft self-limiting","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"This model is a deliberate set of choices, and ADR-097 names the edges rather than hiding them. - Every device is its own row, so sign-ins grow a table. A session is a device…"},"1985":{"u":"/articles/jwt-refresh-token-rotation.html#apply-this-even-without-mmca","d":"Refresh tokens that rotate per device, and reuse detection that makes theft self-limiting","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any stack with a JWT story: 1. Keep the access token short and stateless. Validate it by signature and expiry with no lookup, and set a lifetime measured in…"},"1986":{"u":"/articles/generic-entity-controllers.html","d":"Generic entity controllers and the dynamic query contract (ADR-034)","k":"The MMCA.Common series","x":"Subtitle: The write-once REST surface every entity inherits. How list, page, lookup, by-id, create, and delete come from two base classes, plus a bounded OData-lite query…"},"1987":{"u":"/articles/generic-entity-controllers.html#why-it-matters","d":"Generic entity controllers and the dynamic query contract (ADR-034)","k":"The MMCA.Common series","t":"Why it matters","x":"Most entities need the same six things: list them, page through them, fetch a lightweight id/name list for a dropdown, get one by id, create one, delete one. That surface is so…"},"1988":{"u":"/articles/generic-entity-controllers.html#the-mmca-answer-two-base-classes-and-an-odata-lite-contract","d":"Generic entity controllers and the dynamic query contract (ADR-034)","k":"The MMCA.Common series","t":"The MMCA answer: two base classes and an OData-lite contract","x":"The read surface is EntityControllerBase . It is an [ApiController] with [Route(\"[controller]\")] and [ApiVersion(\"1.0\")], and it exposes five GET routes that any entity inherits…"},"1989":{"u":"/articles/generic-entity-controllers.html#the-line-where-the-users-value-stops-being-code","d":"Generic entity controllers and the dynamic query contract (ADR-034)","k":"The MMCA.Common series","t":"The line where the user's value stops being code","x":"There is one more constraint under all of this, and it is the one that decides whether a user-supplied filter DSL is a good idea or a liability. When a strategy builds its…"},"1990":{"u":"/articles/generic-entity-controllers.html#trade-offs-honestly","d":"Generic entity controllers and the dynamic query contract (ADR-034)","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"A generic, dynamically queryable contract coupled to the entity model is a real trade against narrow bespoke endpoints. ADR-034 names the costs rather than hiding them. - The…"},"1991":{"u":"/articles/generic-entity-controllers.html#apply-this-even-without-mmca","d":"Generic entity controllers and the dynamic query contract (ADR-034)","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any stack where you expose more than a handful of CRUD resources: 1. Put the CRUD shape on a generic base and close the type parameters per entity. The…"},"1992":{"u":"/articles/resource-ownership-authorization.html","d":"Resource-ownership authorization: which rows you may touch, not just which actions","k":"The MMCA.Common series","x":"Subtitle: Article 24 covered what a role or permission lets you do. It said, explicitly, that \"a customer may read only their own order\" is a different concern. This is that…"},"1993":{"u":"/articles/resource-ownership-authorization.html#why-it-matters","d":"Resource-ownership authorization: which rows you may touch, not just which actions","k":"The MMCA.Common series","t":"Why it matters","x":"The failure mode here has a name, and it is not obscure. The OWASP API Security Top 10 lists Broken Object Level Authorization (the modern label for the classic Insecure Direct…"},"1994":{"u":"/articles/resource-ownership-authorization.html#the-mmca-answer-two-enforcement-points-one-bypass","d":"Resource-ownership authorization: which rows you may touch, not just which actions","k":"The MMCA.Common series","t":"The MMCA answer: two enforcement points, one bypass","x":"The first instinct is to look for a single ownership abstraction. There is not one, and ADR-033 is explicit about why: there are two genuinely different problems wearing one…"},"1995":{"u":"/articles/resource-ownership-authorization.html#how-mmcastore-wires-it","d":"Resource-ownership authorization: which rows you may touch, not just which actions","k":"The MMCA.Common series","t":"How MMCA.Store wires it","x":"This is not framework-only theory. MMCA.Store turns both points on in production. The filter guards the shopping-cart and customer-profile controllers as a class-level…"},"1996":{"u":"/articles/resource-ownership-authorization.html#trade-offs-honestly","d":"Resource-ownership authorization: which rows you may touch, not just which actions","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The §11 review is blunt about the edges of this, and they are real. - It is claim-trusting, not ABAC. Both points key entirely on the configured owner claim (customerid by…"},"1997":{"u":"/articles/resource-ownership-authorization.html#apply-this-even-without-mmca","d":"Resource-ownership authorization: which rows you may touch, not just which actions","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern carries to any web API, framework or not: 1. Treat ownership as a second axis, not a corollary of the role check. \"May read orders\" and \"may read this order\" are…"},"1998":{"u":"/articles/rate-limiting-brute-force-protection.html","d":"Defending the API edge: three controls that cover the whole surface","k":"The MMCA.Common series","x":"Subtitle: A global \"N requests per minute\" limiter feels like edge protection until you notice what it cannot do: it cannot key an anonymous login attempt to a principal, because…"},"1999":{"u":"/articles/rate-limiting-brute-force-protection.html#why-it-matters","d":"Defending the API edge: three controls that cover the whole surface","k":"The MMCA.Common series","t":"Why it matters","x":"\"Add rate limiting\" is not a decision. The load-bearing questions are who gets limited, by what partition key, and what is exempt. A naive global IP bucket gets all three wrong…"},"2000":{"u":"/articles/rate-limiting-brute-force-protection.html#the-mmca-answer-an-authenticated-only-global-limiter-plus-two-controls-for-the-surface-it-exempts","d":"Defending the API edge: three controls that cover the whole surface","k":"The MMCA.Common series","t":"The MMCA answer: an authenticated-only global limiter, plus two controls for the surface it exempts","x":"AddCommonRateLimiting (in MMCA.Common.API, Source/Presentation/MMCA.Common.API/Startup/WebApplicationBuilderExtensions.cs:386) installs a GlobalLimiter (:430-431) that runs on…"},"2001":{"u":"/articles/rate-limiting-brute-force-protection.html#trade-offs-honestly","d":"Defending the API edge: three controls that cover the whole surface","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"None of the three is a complete edge defence on its own, and the §11 review is explicit about the boundaries. - Per-principal keying needs an authenticated identity, full stop.…"},"2002":{"u":"/articles/rate-limiting-brute-force-protection.html#apply-this-even-without-mmca","d":"Defending the API edge: three controls that cover the whole surface","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The shape ports to any ASP.NET Core service, with or without this framework: 1. Pick the partition key before you pick the limit. \"300 a minute\" is meaningless until you answer…"},"2003":{"u":"/articles/aspire-one-command.html","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","x":"Subtitle: Four service processes, four databases, a broker, a cache, a mail interceptor, and a live telemetry dashboard, all from a single dotnet run. Here is how MMCA.Common…"},"2004":{"u":"/articles/aspire-one-command.html#prerequisites","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","t":"Prerequisites","x":"You need a few things in place before the first run: - .NET 10 SDK (the framework targets .NET 10.0 with C preview language features). - Docker (or a compatible container…"},"2005":{"u":"/articles/aspire-one-command.html#step-1-run-the-whole-stack-with-one-command","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","t":"Step 1: run the whole stack with one command","x":"From the consumer repo, the entire local topology comes up with: That single command brings up everything the application needs locally: four SQL Server databases, Redis,…"},"2006":{"u":"/articles/aspire-one-command.html#step-2-understand-what-addservicedefaults-configured","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","t":"Step 2: understand what AddServiceDefaults() configured","x":"Each service host calls one method first in its Program.cs, before anything app-specific: AddServiceDefaults() is the service-side baseline, and it is identical across both…"},"2007":{"u":"/articles/aspire-one-command.html#step-3-read-the-health-endpoints-from-mapdefaultendpoints","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","t":"Step 3: read the health endpoints from MapDefaultEndpoints()","x":"MapDefaultEndpoints() exposes the probe surface your platform reads: - /health runs all registered checks. This is the one for humans and dashboards. It is served through…"},"2008":{"u":"/articles/aspire-one-command.html#step-4-see-how-the-apphost-wires-the-distributed-app","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","t":"Step 4: see how the AppHost wires the distributed app","x":"The AppHost Program.cs does not start anything immediately. It builds a resource model: a graph of containers, databases, services, the gateway, and the UI, with their dependency…"},"2009":{"u":"/articles/aspire-one-command.html#step-5-wire-the-extraction-points-grpc-and-jwks","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","t":"Step 5: wire the extraction points (gRPC and JWKS)","x":"The same AppHost wires the extraction boundaries that make the modular monolith behave like real microservices: typed gRPC clients and cross-service auth. gRPC references are…"},"2010":{"u":"/articles/aspire-one-command.html#step-6-make-the-telemetry-coherent-and-keep-the-bill-down","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","t":"Step 6: make the telemetry coherent, and keep the bill down","x":"There are a few more pieces worth knowing, because they shape what you see in the dashboard, and what you pay for it. Start with the noise. The OutboxProcessor background service…"},"2011":{"u":"/articles/aspire-one-command.html#step-7-harden-the-response-headers-and-reuse-connections","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","t":"Step 7: harden the response headers, and reuse connections","x":"Two smaller pieces round out the baseline, and both are the kind of thing each host would otherwise hand-roll and drift on. First, security headers at the host edge. Instead of…"},"2012":{"u":"/articles/aspire-one-command.html#step-8-refuse-to-boot-on-bad-configuration","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","t":"Step 8: refuse to boot on bad configuration","x":"One command bringing the stack up is only useful if a misconfigured process says so immediately. A bad settings value can surface in two places. At first use, where a missing…"},"2013":{"u":"/articles/aspire-one-command.html#trade-offs-and-gotchas-honestly","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","t":"Trade-offs and gotchas, honestly","x":"A single-command stack is a force multiplier, but it has edges worth naming: - It wants Docker and an interactive console. No container runtime means no SQL, Redis, or broker.…"},"2014":{"u":"/articles/aspire-one-command.html#apply-this-even-without-mmca","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports cleanly to any Aspire app: 1. Put service defaults (telemetry, discovery, resilience) in one shared method every host calls, not copy-pasted per service. Drift…"},"2015":{"u":"/articles/extract-module-to-grpc-service.html","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","x":"Subtitle: A step-by-step walkthrough of lifting a module out of the monolith into its own gRPC service without rewriting application code. Define a contract, wire a typed client,…"},"2016":{"u":"/articles/extract-module-to-grpc-service.html#step-0-the-starting-invariant","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"Step 0: the starting invariant","x":"The precondition that makes everything else possible: application and domain code already talk to abstractions, and transport choices live at the edges. Concretely, that means…"},"2017":{"u":"/articles/extract-module-to-grpc-service.html#step-1-define-the-contracts-project","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"Step 1: define the .Contracts project","x":"The wire surface lives in its own project whose name ends in .Contracts. That suffix is load-bearing. Directory.Build.props gives any .Contracts project special treatment: it…"},"2018":{"u":"/articles/extract-module-to-grpc-service.html#step-2-server-side-addgrpcservicedefaults","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"Step 2: server side, AddGrpcServiceDefaults()","x":"In the extracted Engagement service's host, register the gRPC server defaults and map the service: AddGrpcServiceDefaults() registers GrpcResultExceptionInterceptor plus gRPC…"},"2019":{"u":"/articles/extract-module-to-grpc-service.html#step-3-client-side-addtypedgrpcclienttclientservicename","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"Step 3: client side, AddTypedGrpcClient(serviceName)","x":"On the calling side (Conference's host), wire the typed gRPC client and replace the local interface registration with the adapter: AddTypedGrpcClient (serviceName) wires the…"},"2020":{"u":"/articles/extract-module-to-grpc-service.html#step-4-flip-the-message-bus-from-in-process-to-broker","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"Step 4: flip the message bus from in-process to broker","x":"Synchronous calls now cross the wire. The asynchronous, fire-and-forget flows (domain and integration events) need the same treatment, and the framework makes it a configuration…"},"2021":{"u":"/articles/extract-module-to-grpc-service.html#step-5-jwks-so-the-new-service-validates-tokens","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"Step 5: JWKS so the new service validates tokens","x":"The extracted Engagement service now receives forwarded JWTs from Conference and must validate them. It does so against the issuer's JWKS, the public signing keys, not a shared…"},"2022":{"u":"/articles/extract-module-to-grpc-service.html#step-6-wire-it-in-the-apphost-with-mmcacommonaspirehosting","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"Step 6: wire it in the AppHost with MMCA.Common.Aspire.Hosting","x":"Local orchestration is where the topology becomes runnable. MMCA.Common.Aspire.Hosting provides AppHost extension methods for the cross-cutting infrastructure of an extracted…"},"2023":{"u":"/articles/extract-module-to-grpc-service.html#step-7-route-through-the-yarp-gateway","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"Step 7: route through the YARP gateway","x":"Clients never address a service directly. A single YARP reverse-proxy gateway owns the route-to-service map and is the only entry point. It has no DbContext and no controllers;…"},"2024":{"u":"/articles/extract-module-to-grpc-service.html#step-8-what-the-edge-process-itself-owns","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"Step 8: what the edge process itself owns","x":"Step 7 gets a request to the right service. The edge process also has jobs of its own, and they are jobs no service behind it can do, because only the gateway sees every request…"},"2025":{"u":"/articles/extract-module-to-grpc-service.html#a-note-you-cannot-skip-adr-012s-two-kestrel-transport-profiles","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"A note you cannot skip: ADR-012's two Kestrel transport profiles","x":"On a cleartext endpoint there is no TLS, so there is no ALPN to negotiate the protocol. Kestrel must be told up front which protocols the cleartext port speaks, and the choice…"},"2026":{"u":"/articles/extract-module-to-grpc-service.html#the-whole-point-it-stays-reversible","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"The whole point: it stays reversible","x":"Walk the steps back and you see why this is not a one-way door. Because transport lives at the edge and the core talks to abstractions, a service can be re-collapsed into a…"},"2027":{"u":"/articles/extract-module-to-grpc-service.html#trade-offs-honestly","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Operational complexity multiplies. You now run multiple deployables plus a gateway, service discovery, a broker, and per-service databases instead of one process. Aspire hides…"},"2028":{"u":"/articles/extract-module-to-grpc-service.html#apply-this-even-without-mmca","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The recipe ports to any stack: 1. Make the core talk to abstractions and put a fitness test on it. A message-bus interface and plain service interfaces, with an architecture test…"},"2029":{"u":"/articles/resilience-recovery-objectives.html","d":"Retries are not a recovery plan: resilience handlers, RTO/RPO, and a restore you actually drilled","k":"The MMCA.Common series","x":"Subtitle: The last article promised the resilience handler that makes retries happen, and the recovery objectives behind it. Here is both halves: the Polly pipeline on every…"},"2030":{"u":"/articles/resilience-recovery-objectives.html#half-one-the-standard-resilience-handler-on-every-outbound-client","d":"Retries are not a recovery plan: resilience handlers, RTO/RPO, and a restore you actually drilled","k":"The MMCA.Common series","t":"Half one: the standard resilience handler on every outbound client","x":"The runtime half is the part already shown elsewhere in this series, so I will summarize and attribute rather than re-derive it. Every outbound HTTP and gRPC client in the system…"},"2031":{"u":"/articles/resilience-recovery-objectives.html#fitness-enforced-not-just-present","d":"Retries are not a recovery plan: resilience handlers, RTO/RPO, and a restore you actually drilled","k":"The MMCA.Common series","t":"Fitness-enforced, not just present","x":"A convention that is \"applied everywhere by everyone remembering to\" is the same failure mode the idempotency and caching articles kept warning about. The framing across this…"},"2032":{"u":"/articles/resilience-recovery-objectives.html#the-one-place-resilience-left-the-outbound-client-the-outbox-broker-publish","d":"Retries are not a recovery plan: resilience handlers, RTO/RPO, and a restore you actually drilled","k":"The MMCA.Common series","t":"The one place resilience left the outbound client: the outbox broker publish","x":"For most of this series, \"resilience policy\" has meant \"outbound HTTP or gRPC client.\" ADR-087 (accepted 2026-08-18) amends ADR-009 with the first exception, and it is a narrow…"},"2033":{"u":"/articles/resilience-recovery-objectives.html#half-two-declared-rto-and-rpo-per-scenario","d":"Retries are not a recovery plan: resilience handlers, RTO/RPO, and a restore you actually drilled","k":"The MMCA.Common series","t":"Half two: declared RTO and RPO per scenario","x":"Now the part that is actually missing from most \"resilience\" treatments, and the part this article exists to document. ADR-009 requires each consuming app to declare, in writing,…"},"2034":{"u":"/articles/resilience-recovery-objectives.html#the-drilled-restore-backups-you-tested-not-backups-you-assumed","d":"Retries are not a recovery plan: resilience handlers, RTO/RPO, and a restore you actually drilled","k":"The MMCA.Common series","t":"The drilled restore: backups you tested, not backups you assumed","x":"The second word in \"declared RTO/RPO and a drilled restore\" is the one that separates a posture from a wish. The backup posture in ADC's runbook is two tiers. Point-in-time…"},"2035":{"u":"/articles/resilience-recovery-objectives.html#database-per-service-multiplies-the-restore-surface","d":"Retries are not a recovery plan: resilience handlers, RTO/RPO, and a restore you actually drilled","k":"The MMCA.Common series","t":"Database-per-service multiplies the restore surface","x":"There is a structural reason recovery is harder here than in a monolith, and it is the direct cost of a decision celebrated elsewhere in this series. ADR-006…"},"2036":{"u":"/articles/resilience-recovery-objectives.html#the-dr-runbook-and-the-deploy-time-auto-revert","d":"Retries are not a recovery plan: resilience handlers, RTO/RPO, and a restore you actually drilled","k":"The MMCA.Common series","t":"The DR runbook and the deploy-time auto-revert","x":"The runbook governs four per-service databases, ADCIdentity, ADCConference, ADCEngagement and ADCNotification, and those four are the entire application data estate: one Basic…"},"2037":{"u":"/articles/resilience-recovery-objectives.html#trade-offs-honestly","d":"Retries are not a recovery plan: resilience handlers, RTO/RPO, and a restore you actually drilled","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- RTO/RPO are only as real as the last drill. ADC's objectives are declared with specific numbers, and the restore is drilled repeatedly: the drill table records six passing…"},"2038":{"u":"/articles/resilience-recovery-objectives.html#apply-this-even-without-mmca","d":"Retries are not a recovery plan: resilience handlers, RTO/RPO, and a restore you actually drilled","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The posture ports to any stack, and most of it is discipline rather than code: 1. Put the resilience handler in one shared place every client inherits (the HttpClient/gRPC…"},"2039":{"u":"/articles/architecture-fitness-functions.html","d":"Architecture fitness functions: rules that fail the build, not a wiki page","k":"The MMCA.Common series","x":"Subtitle: The inward-dependency rule everyone agrees on is the one everyone eventually breaks. Here is how MMCA.Common enforces it twice, defines the rules once, and makes them…"},"2040":{"u":"/articles/architecture-fitness-functions.html#why-a-diagram-is-not-enforcement","d":"Architecture fitness functions: rules that fail the build, not a wiki page","k":"The MMCA.Common series","t":"Why a diagram is not enforcement","x":"The inward-dependency rule is the load-bearing wall of Clean Architecture. The whole value proposition, business logic that is independent of frameworks, UI, and data stores,…"},"2041":{"u":"/articles/architecture-fitness-functions.html#enforced-twice-compile-time-and-runtime","d":"Architecture fitness functions: rules that fail the build, not a wiki page","k":"The MMCA.Common series","t":"Enforced twice: compile-time and runtime","x":"MMCA.Common enforces the dependency rules through two independent gates, and the redundancy is deliberate (MMCA.Common/CLAUDE.md, Architecture Enforcement section). 1.…"},"2042":{"u":"/articles/architecture-fitness-functions.html#defined-once-identical-everywhere","d":"Architecture fitness functions: rules that fail the build, not a wiki page","k":"The MMCA.Common series","t":"Defined once, identical everywhere","x":"Here is the part that makes the fitness functions scale across more than one repo without rotting into three slightly-different copies. The rule bodies do not live in the test…"},"2043":{"u":"/articles/architecture-fitness-functions.html#the-rules-that-matter-most","d":"Architecture fitness functions: rules that fail the build, not a wiki page","k":"The MMCA.Common series","t":"The rules that matter most","x":"Three example rule families show what fitness functions actually assert. LayerDependencyTests. The inward-dependency rule: API reaches down to Infrastructure, Infrastructure to…"},"2044":{"u":"/articles/architecture-fitness-functions.html#freezing-the-wire-the-contract-no-single-repos-build-can-see","d":"Architecture fitness functions: rules that fail the build, not a wiki page","k":"The MMCA.Common series","t":"Freezing the wire: the contract no single repo's build can see","x":"A .proto file is not source in the ordinary sense. It is a published contract, and what makes it dangerous is that breaking it looks exactly like editing a local file. Renumber a…"},"2045":{"u":"/articles/architecture-fitness-functions.html#the-other-kind-of-fitness-test-documentation-as-a-contract","d":"Architecture fitness functions: rules that fail the build, not a wiki page","k":"The MMCA.Common series","t":"The other kind of fitness test: documentation as a contract","x":"Everything above tests code against code. There is a second family that tests documentation against code, and it is the one that stops a doc from rotting the moment someone ships…"},"2046":{"u":"/articles/architecture-fitness-functions.html#the-same-family-aimed-at-operations-every-alert-needs-a-runbook","d":"Architecture fitness functions: rules that fail the build, not a wiki page","k":"The MMCA.Common series","t":"The same family, aimed at operations: every alert needs a runbook","x":"The newest member of that family points the idea at your on-call rotation. An alert with no triage steps is a page with no next step, and a runbook section for an alert that no…"},"2047":{"u":"/articles/architecture-fitness-functions.html#the-third-kind-a-fitness-function-for-cost","d":"Architecture fitness functions: rules that fail the build, not a wiki page","k":"The MMCA.Common series","t":"The third kind: a fitness function for cost","x":"Structural rules assert shape. Documentation rules assert honesty. There is a third thing worth failing a build over, and it is the one most teams leave to a dashboard: cost.…"},"2048":{"u":"/articles/architecture-fitness-functions.html#trade-offs-honestly","d":"Architecture fitness functions: rules that fail the build, not a wiki page","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"Fitness functions are not free, and the scorecard does not pretend otherwise. - They only cover what you write a rule for. Read the scorecard category by category and the pattern…"},"2049":{"u":"/articles/architecture-fitness-functions.html#apply-this-even-without-mmca","d":"Architecture fitness functions: rules that fail the build, not a wiki page","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any stack and most of it is one afternoon of work: 1. Pick the one rule you would be most upset to see violated silently. For most teams that is the…"},"2050":{"u":"/articles/test-pyramid.html","d":"The test pyramid, not the ice-cream cone: 2,254 fast tests, zero Docker","k":"The MMCA.Common series","x":"Subtitle: A suite you run constantly is worth more than a suite you run nervously. Here is how MMCA.Common keeps 2,254 tests fast enough to live in the inner loop, with…"},"2051":{"u":"/articles/test-pyramid.html#why-the-shape-matters-more-than-the-count","d":"The test pyramid, not the ice-cream cone: 2,254 fast tests, zero Docker","k":"The MMCA.Common series","t":"Why the shape matters more than the count","x":"The test-count number is not the point. The shape is. The rubric (Architecture Evaluation Criteria, category 14) describes a healthy pyramid as \"many fast unit tests on domain…"},"2052":{"u":"/articles/test-pyramid.html#the-base-fast-pure-no-infrastructure","d":"The test pyramid, not the ice-cream cone: 2,254 fast tests, zero Docker","k":"The MMCA.Common series","t":"The base: fast, pure, no infrastructure","x":"The wide base of the MMCA.Common pyramid is pure unit tests with no I/O (28. Testing & Quality Infrastructure): domain entity factories and invariants, value objects, the…"},"2053":{"u":"/articles/test-pyramid.html#the-middle-real-sqlite-two-real-databases-still-no-docker","d":"The test pyramid, not the ice-cream cone: 2,254 fast tests, zero Docker","k":"The MMCA.Common series","t":"The middle: real SQLite, two real databases, still no Docker","x":"Above the base sit the persistence and EF-configuration tests, and this is where the \"no Docker\" claim gets interesting. Rather than mock the ORM (which proves nothing about…"},"2054":{"u":"/articles/test-pyramid.html#the-cap-and-an-orthogonal-tier","d":"The test pyramid, not the ice-cream cone: 2,254 fast tests, zero Docker","k":"The MMCA.Common series","t":"The cap, and an orthogonal tier","x":"At the top of the pyramid are the component tests (bUnit, rendering Blazor components in isolation) and the end-to-end tests (Playwright, driving a real browser). These are…"},"2055":{"u":"/articles/test-pyramid.html#shipped-test-packages-consumers-do-not-re-invent-the-harness","d":"The test pyramid, not the ice-cream cone: 2,254 fast tests, zero Docker","k":"The MMCA.Common series","t":"Shipped test packages: consumers do not re-invent the harness","x":"Five of the framework's nineteen published NuGet packages are test infrastructure, not test code, and this is how the pyramid stays consistent across three codebases instead of…"},"2056":{"u":"/articles/test-pyramid.html#the-apphost-tier-a-compiled-claim-about-the-composition","d":"The test pyramid, not the ice-cream cone: 2,254 fast tests, zero Docker","k":"The MMCA.Common series","t":"The AppHost tier: a compiled claim about the composition","x":"There is one file the tiers above never execute: the AppHost. It is the only place that states how a whole stack fits together, which project resources exist, which database each…"},"2057":{"u":"/articles/test-pyramid.html#accessibility-as-a-shipped-test-contract","d":"The test pyramid, not the ice-cream cone: 2,254 fast tests, zero Docker","k":"The MMCA.Common series","t":"Accessibility as a shipped test contract","x":"The E2E package carries one more contract, and it is the tier where a published standard turns into a build failure instead of a review comment. ADR-063 records it: WCAG 2.1 AA…"},"2058":{"u":"/articles/test-pyramid.html#runner-and-gate-xunit-v3-mtp-and-a-coverage-floor","d":"The test pyramid, not the ice-cream cone: 2,254 fast tests, zero Docker","k":"The MMCA.Common series","t":"Runner and gate: xUnit v3, MTP, and a coverage floor","x":"A detail that trips up people coming from older .NET projects: the suite runs on the Microsoft Testing Platform (MTP), not VSTest, configured in global.json, with xUnit v3,…"},"2059":{"u":"/articles/test-pyramid.html#trade-offs-honestly","d":"The test pyramid, not the ice-cream cone: 2,254 fast tests, zero Docker","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The shape is right, but the scorecard names real gaps and one is squarely in the testing story. - The UI tier's visual check is markup-deep, not pixel-deep. The framework ships…"},"2060":{"u":"/articles/test-pyramid.html#apply-this-even-without-mmca","d":"The test pyramid, not the ice-cream cone: 2,254 fast tests, zero Docker","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The shape ports to any stack: 1. Make the base fast enough to run on every save. No Docker, no network, no shared database in the layer you run constantly. If your unit tests…"},"2061":{"u":"/articles/soft-delete-vs-erasure.html","d":"Soft-delete vs the right to erasure: the GDPR conflict and the erasure pathway","k":"The MMCA.Common series","x":"Subtitle: Soft-delete is the right default for lifecycle and audit. It is also, by itself, illegal for personal data under GDPR. This is the story of scoring that conflict 1 out…"},"2062":{"u":"/articles/soft-delete-vs-erasure.html#why-it-matters-and-why-i-am-telling-on-myself","d":"Soft-delete vs the right to erasure: the GDPR conflict and the erasure pathway","k":"The MMCA.Common series","t":"Why it matters, and why I am telling on myself","x":"When I first graded MMCA.Common against an architecture rubric and committed the scorecard to the repo, the original single-axis snapshot scored Compliance, Privacy & Data…"},"2063":{"u":"/articles/soft-delete-vs-erasure.html#the-mmca-answer-separate-the-two-concerns-give-each-a-mechanism","d":"Soft-delete vs the right to erasure: the GDPR conflict and the erasure pathway","k":"The MMCA.Common series","t":"The MMCA answer: separate the two concerns, give each a mechanism","x":"The wrong fix is to overload Delete() so it hard-deletes personal data. That would break audit, undelete, and referential integrity all at once, trading one defect for three.…"},"2064":{"u":"/articles/soft-delete-vs-erasure.html#the-delete-that-really-removes-rows-restrict-by-default","d":"Soft-delete vs the right to erasure: the GDPR conflict and the erasure pathway","k":"The MMCA.Common series","t":"The delete that really removes rows: restrict by default","x":"Soft-delete keeps the row. Anonymization keeps the row and destroys the person inside it. Physical erasure, a real DELETE that takes rows out of the table, is a third thing, and…"},"2065":{"u":"/articles/soft-delete-vs-erasure.html#the-second-hiding-place-the-outbox","d":"Soft-delete vs the right to erasure: the GDPR conflict and the erasure pathway","k":"The MMCA.Common series","t":"The second hiding place: the outbox","x":"There was a second source of retained personal data, and it is the kind of thing you only find when you go looking honestly. The transactional outbox (ADR-003) writes an event…"},"2066":{"u":"/articles/soft-delete-vs-erasure.html#the-live-session-cutting-off-a-token-mid-flight","d":"Soft-delete vs the right to erasure: the GDPR conflict and the erasure pathway","k":"The MMCA.Common series","t":"The live session: cutting off a token mid-flight","x":"Anonymizing the aggregate and committing the soft-delete shuts two doors: no future logins, and no silent re-mint of a fresh access token, because the refresh flow re-fetches the…"},"2067":{"u":"/articles/soft-delete-vs-erasure.html#the-other-right-portability-and-why-it-degrades-instead-of-failing","d":"Soft-delete vs the right to erasure: the GDPR conflict and the erasure pathway","k":"The MMCA.Common series","t":"The other right: portability, and why it degrades instead of failing","x":"Erasure has a sibling that lands in the same regulation and is usually built badly. The right to data portability means a user can ask for everything you hold about them, and…"},"2068":{"u":"/articles/soft-delete-vs-erasure.html#trade-offs-honestly","d":"Soft-delete vs the right to erasure: the GDPR conflict and the erasure pathway","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The framework provides the mechanisms (IAnonymizable, OutboxCleanupService); the consumer owns the policy. That division is the most important caveat, and ADR-005 states it…"},"2069":{"u":"/articles/soft-delete-vs-erasure.html#apply-this-even-without-mmca","d":"Soft-delete vs the right to erasure: the GDPR conflict and the erasure pathway","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern is independent of the framework: 1. Keep soft-delete for lifecycle. It is the right tool for \"is this active?\", and audit / undelete / referential integrity all…"},"2070":{"u":"/articles/reusable-blazor-ui-framework.html","d":"A list page in a few lines: a reusable Blazor UI framework with the same discipline as the backend","k":"The MMCA.Common series","x":"Subtitle: This series has been backend all the way down. But the front end is where DRY usually goes to die: every list screen re-implements paging, sort, filter, loading, and…"},"2071":{"u":"/articles/reusable-blazor-ui-framework.html#the-package-that-is-allowed-to-depend-on-almost-nothing","d":"A list page in a few lines: a reusable Blazor UI framework with the same discipline as the backend","k":"The MMCA.Common series","t":"The package that is allowed to depend on almost nothing","x":"One structural fact sets the tone. MMCA.Common.UI is allowed to reference MMCA.Common.Shared and nothing else. Not Application, not Domain, not Infrastructure. That is a…"},"2072":{"u":"/articles/reusable-blazor-ui-framework.html#datagridlistpagebase-the-screen-you-stop-rewriting","d":"A list page in a few lines: a reusable Blazor UI framework with the same discipline as the backend","k":"The MMCA.Common series","t":"DataGridListPageBase: the screen you stop rewriting","x":"The centerpiece is an abstract Blazor component, DataGridListPageBase . Every server-paged list screen in every consumer app derives from it. It folds into one reusable place the…"},"2073":{"u":"/articles/reusable-blazor-ui-framework.html#the-same-page-on-a-phone-without-a-second-page","d":"A list page in a few lines: a reusable Blazor UI framework with the same discipline as the backend","k":"The MMCA.Common series","t":"The same page on a phone, without a second page","x":"The desktop path above is only half of what DataGridListPageBase does, because a data grid is the wrong control on a 390px screen and no amount of CSS fixes that. The base…"},"2074":{"u":"/articles/reusable-blazor-ui-framework.html#the-data-access-boundary-bind-to-an-interface-never-to-httpclient","d":"A list page in a few lines: a reusable Blazor UI framework with the same discipline as the backend","k":"The MMCA.Common series","t":"The data-access boundary: bind to an interface, never to HttpClient","x":"A page in this framework never injects a raw HttpClient. It injects IEntityService , a generic CRUD contract: GetAllAsync, GetPagedAsync, GetByIdAsync, AddAsync, UpdateAsync,…"},"2075":{"u":"/articles/reusable-blazor-ui-framework.html#theming-one-set-of-tokens-guarded-by-a-fitness-test","d":"A list page in a few lines: a reusable Blazor UI framework with the same discipline as the backend","k":"The MMCA.Common series","t":"Theming: one set of tokens, guarded by a fitness test","x":"Visual consistency lives in one static MudTheme, exposed as MMCATheme.Instance and handed to MudThemeProvider by a shared component, MmcaThemeProviders, that a root layout drops…"},"2076":{"u":"/articles/reusable-blazor-ui-framework.html#render-mode-state-persistence-no-flash-no-double-fetch","d":"A list page in a few lines: a reusable Blazor UI framework with the same discipline as the backend","k":"The MMCA.Common series","t":"Render-mode state persistence: no flash, no double fetch","x":"Modern Blazor's InteractiveAuto renders a page up to three times: static SSR, then interactive Server, then WASM. Naively, each transition re-runs the data fetch, and the user…"},"2077":{"u":"/articles/reusable-blazor-ui-framework.html#the-shell-ships-in-the-package-too-modules-plug-in-with-iuimodule","d":"A list page in a few lines: a reusable Blazor UI framework with the same discipline as the backend","k":"The MMCA.Common series","t":"The shell ships in the package too: modules plug in with IUIModule","x":"A base class removes the duplication inside a page. The next duplication up is the application shell itself: the router, the layout, the nav menu, and the handful of pages every…"},"2078":{"u":"/articles/reusable-blazor-ui-framework.html#host-polymorphic-token-refresh-one-component-set-three-platforms","d":"A list page in a few lines: a reusable Blazor UI framework with the same discipline as the backend","k":"The MMCA.Common series","t":"Host-polymorphic token refresh: one component set, three platforms","x":"Here is where the front-end ports pay off the most. The same Razor component set runs on Blazor Server, Blazor WebAssembly, and a .NET MAUI hybrid host (Android, iOS, macOS,…"},"2079":{"u":"/articles/reusable-blazor-ui-framework.html#trade-offs-honestly","d":"A list page in a few lines: a reusable Blazor UI framework with the same discipline as the backend","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- This is opinionated UI infrastructure coupled to MudBlazor. DataGridListPageBase is built around MudDataGrid , GridState , and MudBlazor's viewport observer. The base is…"},"2080":{"u":"/articles/reusable-blazor-ui-framework.html#apply-this-even-without-mmca","d":"A list page in a few lines: a reusable Blazor UI framework with the same discipline as the backend","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The moves port to any component framework, not just Blazor: 1. Put a list-page base component in charge of paging, sort, filter, loading, cancellation, and teardown. A concrete…"},"2081":{"u":"/articles/i18n-and-theming.html","d":"One preference, two switches: shipping i18n and dark mode on a single cookie-and-profile pipeline","k":"The MMCA.Common series","x":"Subtitle: A user picking Spanish and a user picking dark mode are doing the same thing: stating a per-user preference that has to survive a page refresh, three render modes, and…"},"2082":{"u":"/articles/i18n-and-theming.html#why-it-matters","d":"One preference, two switches: shipping i18n and dark mode on a single cookie-and-profile pipeline","k":"The MMCA.Common series","t":"Why it matters","x":"Count the places a preference has to be true at once. The static prerender pass renders HTML on the server before any JavaScript runs. The interactive Server circuit takes over.…"},"2083":{"u":"/articles/i18n-and-theming.html#the-mmca-answer-one-preference-pipeline-used-twice","d":"One preference, two switches: shipping i18n and dark mode on a single cookie-and-profile pipeline","k":"The MMCA.Common series","t":"The MMCA answer: one preference pipeline, used twice","x":"Supported cultures are an explicit allowlist, not an open-ended capability. SupportedCultures (MMCA.Common.Shared/Globalization/SupportedCultures.cs:9) holds Default = \"en-US\"…"},"2084":{"u":"/articles/i18n-and-theming.html#the-pipeline-in-one-sketch","d":"One preference, two switches: shipping i18n and dark mode on a single cookie-and-profile pipeline","k":"The MMCA.Common series","t":"The pipeline, in one sketch","x":"This is illustrative-of-shape, condensed from the files above to put the shared pipeline in one view, not a verbatim paste: A culture choice and a theme choice enter the same way…"},"2085":{"u":"/articles/i18n-and-theming.html#trade-offs-honestly","d":"One preference, two switches: shipping i18n and dark mode on a single cookie-and-profile pipeline","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Coverage is two locales, en-US and Spanish, full stop. Spanish (es) is the one added locale (SupportedCultures.cs:18). The mechanism is built to scale (adding a locale is one…"},"2086":{"u":"/articles/i18n-and-theming.html#apply-this-even-without-mmca","d":"One preference, two switches: shipping i18n and dark mode on a single cookie-and-profile pipeline","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The moves port to any component framework with a server-prerender-then-client lifecycle: 1. Treat locale and theme as the same kind of thing. Both are small per-user preferences.…"},"2087":{"u":"/articles/build-your-first-module.html","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","x":"Subtitle: One command writes the solution. The seven steps after it are the ones worth understanding, because they are what makes the generated code safe to change. --- Most \"add…"},"2088":{"u":"/articles/build-your-first-module.html#prerequisites","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","t":"Prerequisites","x":"- .NET 10 SDK. The framework targets net10.0 with LangVersion: preview for C extension types. - Familiarity with the layer flow: API/Grpc - Infrastructure - Application - Domain…"},"2089":{"u":"/articles/build-your-first-module.html#step-0-scaffold-the-solution","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","t":"Step 0: scaffold the solution","x":"Three names, all independent: the solution (also your root namespace), the first module in plural PascalCase, and its aggregate root in singular PascalCase. Everything derived…"},"2090":{"u":"/articles/build-your-first-module.html#step-1-define-the-aggregate-with-a-private-constructor-and-a-result-factory","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","t":"Step 1: define the aggregate with a private constructor and a Result factory","x":"Open the Domain layer of the module you just generated (Source/Modules/Orders/...Orders.Domain/), or start a fresh one there. An aggregate root inherits from…"},"2091":{"u":"/articles/build-your-first-module.html#step-2-raise-a-domain-event-with-adddomainevent","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","t":"Step 2: raise a domain event with AddDomainEvent","x":"State changes that other parts of the system care about are announced as domain events. You do not publish them directly; you record them on the aggregate, and the framework…"},"2092":{"u":"/articles/build-your-first-module.html#step-3-write-the-command-and-its-handler","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","t":"Step 3: write the command and its handler","x":"A write is a use case: a small command object handed to a handler that does exactly one thing. The handler implements ICommandHandler , which is a single method, Task…"},"2093":{"u":"/articles/build-your-first-module.html#step-4-add-a-fluentvalidation-validator","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","t":"Step 4: add a FluentValidation validator","x":"Input validation does not belong in the handler. Write a FluentValidation validator for the command, and the pipeline runs it automatically before the handler ever executes: This…"},"2094":{"u":"/articles/build-your-first-module.html#step-5-implement-imodule","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","t":"Step 5: implement IModule","x":"A module is the unit of cohesion above a feature slice. It implements IModule: a display Name, an optional Dependencies list of other module names, a RequiresDependencies flag,…"},"2095":{"u":"/articles/build-your-first-module.html#step-6-register-in-the-exact-di-sequence","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","t":"Step 6: register in the exact DI sequence","x":"This is the step the most experienced developers still get wrong, because one ordering rule is load-bearing. AddApplicationDecorators() must run after every module's handler…"},"2096":{"u":"/articles/build-your-first-module.html#step-7-watch-the-decorator-pipeline-kick-in-for-free","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","t":"Step 7: watch the decorator pipeline kick in, for free","x":"With the sequence correct, every command and query handler is now wrapped, in this execution order: You wrote a thin handler. The pipeline added the rest, driven by the marker…"},"2097":{"u":"/articles/build-your-first-module.html#the-next-slice-and-the-next-module","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","t":"The next slice, and the next module","x":"You will repeat that shape for every feature you add, so the pack scaffolds it too, which keeps it from drifting one hand-typed slice at a time. A single vertical slice is one…"},"2098":{"u":"/articles/build-your-first-module.html#trade-offs-and-gotchas-honestly","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","t":"Trade-offs and gotchas, honestly","x":"The shape buys consistency, and it asks for discipline in return: - The DI order is unforgiving. Call AddApplicationDecorators() too early and handlers run undecorated with no…"},"2099":{"u":"/articles/write-your-first-fitness-test.html","d":"Write your first architecture fitness test","k":"The MMCA.Common series","x":"Subtitle: Your Clean Architecture diagram is a hope, not a guarantee, until something fails the build when it is violated. Here is how to add NetArchTest fitness functions to…"},"2100":{"u":"/articles/write-your-first-fitness-test.html#why-rules-as-code-beats-review","d":"Write your first architecture fitness test","k":"The MMCA.Common series","t":"Why rules-as-code beats review","x":"Before the steps, the thesis, because it shapes everything below. An architecture invariant is easy to state (\"Domain depends on nothing above it\") and easy to erode by accident.…"},"2101":{"u":"/articles/write-your-first-fitness-test.html#prerequisites","d":"Write your first architecture fitness test","k":"The MMCA.Common series","t":"Prerequisites","x":"- A .NET solution with a layered shape you want to protect. The MMCA layers are API/Grpc - Infrastructure - Application - Domain - Shared, but the rule library generalizes. -…"},"2102":{"u":"/articles/write-your-first-fitness-test.html#step-1-install-the-package-and-create-a-test-project","d":"Write your first architecture fitness test","k":"The MMCA.Common series","t":"Step 1: install the package and create a test project","x":"Add a dedicated architecture-test project (mirroring how the framework keeps Tests/Architecture/.Architecture.Tests), and reference the package: The package brings the…"},"2103":{"u":"/articles/write-your-first-fitness-test.html#step-2-implement-iarchitecturemap-one-anchor-type-per-layer","d":"Write your first architecture fitness test","k":"The MMCA.Common series","t":"Step 2: implement IArchitectureMap, one anchor type per layer","x":"This is the only real work, and it is small. IArchitectureMap is the single extension point every rule is parameterized by. You declare your layers (and modules, if you have…"},"2104":{"u":"/articles/write-your-first-fitness-test.html#step-3-subclass-the-test-bases-to-inherit-the-rule-library","d":"Write your first architecture fitness test","k":"The MMCA.Common series","t":"Step 3: subclass the test bases to inherit the rule library","x":"Now your test classes shrink to thin sealed subclasses that supply the map and inherit the [Fact]s. Two of the most valuable bases to start with: That is genuinely the whole test…"},"2105":{"u":"/articles/write-your-first-fitness-test.html#step-4-run-the-suite-under-microsoft-testing-platform","d":"Write your first architecture fitness test","k":"The MMCA.Common series","t":"Step 4: run the suite under Microsoft Testing Platform","x":"The fitness tests are ordinary tests in your test tier, so they run with the same command as everything else: Because they run in the normal tier, a violated invariant fails CI…"},"2106":{"u":"/articles/write-your-first-fitness-test.html#step-5-optional-add-the-compile-time-layer-guard-too","d":"Write your first architecture fitness test","k":"The MMCA.Common series","t":"Step 5 (optional): add the compile-time layer guard too","x":"The runtime suite is the broad net. For the single most common mistake, a bad project reference, you can get even faster feedback by also adding the compile-time guard, so the…"},"2107":{"u":"/articles/write-your-first-fitness-test.html#trade-offs-and-gotchas-honestly","d":"Write your first architecture fitness test","k":"The MMCA.Common series","t":"Trade-offs and gotchas, honestly","x":"ADR-015 names its own rough edges, and you should know them before you trust the green: - The tests assert structure and registration, not runtime behavior. A fitness test can…"},"2108":{"u":"/articles/write-your-first-fitness-test.html#apply-this-even-without-mmca","d":"Write your first architecture fitness test","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"If you are not on MMCA.Common, the pattern still ports to any .NET stack with NetArchTest: 1. Write each invariant as a named test, one per forbidden edge, so a failure points at…"},"2109":{"u":"/articles/two-real-apps-case-study.html","d":"Two real apps on one framework: a conference platform and a store","k":"The MMCA.Common series","x":"Subtitle: A framework's README can claim anything. The real test is whether two unrelated applications, with different domains and different deployments, can both run on it…"},"2110":{"u":"/articles/two-real-apps-case-study.html#the-two-apps","d":"Two real apps on one framework: a conference platform and a store","k":"The MMCA.Common series","t":"The two apps","x":"MMCA.ADC is the Atlanta Developers Conference application. Its domain is events: conferences, sessions, speakers, rooms, categories, and the questions attendees ask. It carries…"},"2111":{"u":"/articles/two-real-apps-case-study.html#what-they-actually-share","d":"Two real apps on one framework: a conference platform and a store","k":"The MMCA.Common series","t":"What they actually share","x":"Both apps sit at the same architecture stage, and that is deliberate. Each one has its modules extracted into separate service hosts (one process per module) behind a YARP…"},"2112":{"u":"/articles/two-real-apps-case-study.html#how-a-framework-change-ships","d":"Two real apps on one framework: a conference platform and a store","k":"The MMCA.Common series","t":"How a framework change ships","x":"The interesting operational property is not that the apps share code. It is how a change to the shared code reaches them. There is no phased rollout, no opt-in flag, no…"},"2113":{"u":"/articles/two-real-apps-case-study.html#what-each-app-proves-that-the-framework-cannot","d":"Two real apps on one framework: a conference platform and a store","k":"The MMCA.Common series","t":"What each app proves that the framework cannot","x":"A framework can demonstrate a pattern. It cannot, by itself, demonstrate that the pattern survives a real domain and a real deployment. That is the division of labor between…"},"2114":{"u":"/articles/two-real-apps-case-study.html#the-honest-note","d":"Two real apps on one framework: a conference platform and a store","k":"The MMCA.Common series","t":"The honest note","x":"Here is the caveat the framework writes about itself. It is not a preamble or a methodology section: it is written into the category rows. Because the framework is a library and…"},"2115":{"u":"/articles/two-real-apps-case-study.html#what-we-covered--next","d":"Two real apps on one framework: a conference platform and a store","k":"The MMCA.Common series","t":"What we covered / Next","x":"What we covered: two unrelated applications, a conference platform and an e-commerce store, both running on the same MMCA.Common packages at the same lockstep version and the…"},"2116":{"u":"/articles/device-capability-abstraction.html","d":"One Blazor UI, two hosts: a device-capability layer that stays resolvable everywhere","k":"The MMCA.Common series","x":"Subtitle: The same Blazor component set runs in a browser and inside a MAUI Blazor Hybrid app. But a share sheet, a fingerprint prompt, and a haptic tap only exist on the phone.…"},"2117":{"u":"/articles/device-capability-abstraction.html#the-mmca-answer-one-small-contract-per-capability-chosen-per-host","d":"One Blazor UI, two hosts: a device-capability layer that stays resolvable everywhere","k":"The MMCA.Common series","t":"The MMCA answer: one small contract per capability, chosen per host","x":"There is no god IDeviceCapabilities interface. That was a deliberate rejection: an aggregate device service forces every head to implement everything, and every new capability…"},"2118":{"u":"/articles/device-capability-abstraction.html#three-flavors-of-unavailable-all-registered-by-default","d":"One Blazor UI, two hosts: a device-capability layer that stays resolvable everywhere","k":"The MMCA.Common series","t":"Three flavors of \"unavailable,\" all registered by default","x":"Small contracts only help if every one of them always resolves. A component that injects IShareService must get something on every head, or the browser build throws at runtime…"},"2119":{"u":"/articles/device-capability-abstraction.html#heads-override-after-the-defaults-last-registration-wins","d":"One Blazor UI, two hosts: a device-capability layer that stays resolvable everywhere","k":"The MMCA.Common series","t":"Heads override after the defaults, last registration wins","x":"A default that is always inert would be useless on the platforms that can do the real thing. So heads override, and the mechanism is deliberately boring: plain Add registrations,…"},"2120":{"u":"/articles/device-capability-abstraction.html#the-ninth-package-and-why-it-lives-outside-the-solution","d":"One Blazor UI, two hosts: a device-capability layer that stays resolvable everywhere","k":"The MMCA.Common series","t":"The ninth package, and why it lives outside the solution","x":"The native adapters cannot ship in MMCA.Common.UI, because that package must stay WebAssembly-compatible. They ship in MMCA.Common.UI.Maui, the ninth of the framework's nineteen…"},"2121":{"u":"/articles/device-capability-abstraction.html#deep-links-one-funnel-no-translation-table","d":"One Blazor UI, two hosts: a device-capability layer that stays resolvable everywhere","k":"The MMCA.Common series","t":"Deep links: one funnel, no translation table","x":"The most elegant part is navigation. A notification tap, a home-screen app action, an app link, a scanned QR code: all four are native events that need to land on a Blazor route.…"},"2122":{"u":"/articles/device-capability-abstraction.html#trade-offs-honestly","d":"One Blazor UI, two hosts: a device-capability layer that stays resolvable everywhere","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Null-object defaults can mask a missing registration. A MAUI head that forgets UseMauiDeviceCapabilities does not fail fast: it silently resolves the null defaults and loses…"},"2123":{"u":"/articles/device-capability-abstraction.html#apply-this-even-without-mmca","d":"One Blazor UI, two hosts: a device-capability layer that stays resolvable everywhere","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any UI that runs on more than one host: 1. Define one small interface per capability, not an aggregate device service. Each new capability is then additive,…"},"2124":{"u":"/articles/managed-file-storage-avatars.html","d":"Managed file storage: uploads you don't have to trust","k":"The MMCA.Common series","x":"Subtitle: A user uploads a profile photo. It is attacker-controlled bytes with GPS coordinates baked into the metadata and, if you are unlucky, a payload hiding behind a valid…"},"2125":{"u":"/articles/managed-file-storage-avatars.html#why-it-matters","d":"Managed file storage: uploads you don't have to trust","k":"The MMCA.Common series","t":"Why it matters","x":"An avatar is user-generated content on an anonymous-visible surface. That combination is exactly where file-upload bugs turn into incidents. The two that bite hardest are not…"},"2126":{"u":"/articles/managed-file-storage-avatars.html#the-mmca-answer-a-storage-boundary-and-a-re-encode-that-keeps-only-pixels","d":"Managed file storage: uploads you don't have to trust","k":"The MMCA.Common series","t":"The MMCA answer: a storage boundary, and a re-encode that keeps only pixels","x":"The framework had no blob abstraction before this. Anything file-shaped would have been written directly against the Azure SDK inside a module, unusable by the next consumer and…"},"2127":{"u":"/articles/managed-file-storage-avatars.html#trade-offs-honestly","d":"Managed file storage: uploads you don't have to trust","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"ADR-045 owns its rough edges in its Consequences section, and they are real design choices rather than oversights. - The avatars container is public-read by design. Avatar URLs…"},"2128":{"u":"/articles/managed-file-storage-avatars.html#apply-this-even-without-mmca","d":"Managed file storage: uploads you don't have to trust","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any stack and any blob store. The rules are short: 1. Never trust the declared content type or the file extension. Sniff the leading magic bytes and accept…"},"2129":{"u":"/articles/http-api-versioning.html","d":"HTTP API versioning, proven not just claimed","k":"The MMCA.Common series","x":"Subtitle: Most APIs \"support versioning\" by shipping v1.0 and never a second version. Here is a header-based setup that introduces versioning without breaking a single caller,…"},"2130":{"u":"/articles/http-api-versioning.html#why-it-matters","d":"HTTP API versioning, proven not just claimed","k":"The MMCA.Common series","t":"Why it matters","x":"HTTP APIs need a versioning axis of their own: one the caller selects per request, that the service can advertise, and that it can deprecate over time. In a framework whose…"},"2131":{"u":"/articles/http-api-versioning.html#the-mmca-answer-one-registration-one-exemplar-one-fitness-contract","d":"HTTP API versioning, proven not just claimed","k":"The MMCA.Common series","t":"The MMCA answer: one registration, one exemplar, one fitness contract","x":"MMCA.Common standardizes a single header-based setup in MMCA.Common.API, adopts it in every service host through one call, and keeps it exercised by a shared contract test that…"},"2132":{"u":"/articles/http-api-versioning.html#trade-offs-honestly","d":"HTTP API versioning, proven not just claimed","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"ADR-046 is refreshingly candid about what is real today versus what the shape leaves room for. Four things are worth naming, and none of them is a bug. - The class-level version…"},"2133":{"u":"/articles/http-api-versioning.html#apply-this-even-without-mmca","d":"HTTP API versioning, proven not just claimed","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any HTTP stack that will have to evolve a response shape without a flag day: 1. Pick one version reader and put it behind one registration. Header, query, or…"},"2134":{"u":"/articles/feature-flags-cqrs-pipeline.html","d":"Feature Flags in the CQRS Pipeline: Gate Commands, Not Code","k":"The MMCA.Common series","x":"Subtitle: Decoupling release from deploy means shipping code dark and flipping a switch. Here is how MMCA.Common gates commands and queries with feature flags at the outermost…"},"2135":{"u":"/articles/feature-flags-cqrs-pipeline.html#why-it-matters","d":"Feature Flags in the CQRS Pipeline: Gate Commands, Not Code","k":"The MMCA.Common series","t":"Why it matters","x":"A feature flag is a branch in production behavior, and branches that are copy-pasted drift. If the gate lives inside the handler, then whether a feature is on is decided in as…"},"2136":{"u":"/articles/feature-flags-cqrs-pipeline.html#the-mmca-answer-an-outermost-decorator-plus-a-marker-interface","d":"Feature Flags in the CQRS Pipeline: Gate Commands, Not Code","k":"The MMCA.Common series","t":"The MMCA answer: an outermost decorator plus a marker interface","x":"The whole mechanism is two small types plus a registration. The opt-in signal is IFeatureGated (UseCases/Markers/IFeatureGated.cs:10), an interface with exactly one member,…"},"2137":{"u":"/articles/feature-flags-cqrs-pipeline.html#the-second-surface-and-why-disabled-means-404","d":"Feature Flags in the CQRS Pipeline: Gate Commands, Not Code","k":"The MMCA.Common series","t":"The second surface, and why disabled means 404","x":"A feature can be reachable from the CQRS pipeline, but it can also be reachable straight from an MVC action that never dispatches a command. So the same flag name is enforced at…"},"2138":{"u":"/articles/feature-flags-cqrs-pipeline.html#trade-offs-honestly","d":"Feature Flags in the CQRS Pipeline: Gate Commands, Not Code","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- The two surfaces must be kept in agreement by hand. Gating the controller but not the command (or the reverse) leaves a half-protected feature reachable through the entry you…"},"2139":{"u":"/articles/feature-flags-cqrs-pipeline.html#apply-this-even-without-mmca","d":"Feature Flags in the CQRS Pipeline: Gate Commands, Not Code","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any pipeline that already wraps its handlers (MediatR behaviors, an interceptor, your own decorator chain): 1. Make feature gating a marker interface with…"},"2140":{"u":"/articles/field-level-encryption-ef-core.html","d":"Field-Level Encryption in EF Core: AES-GCM for PII Columns","k":"The MMCA.Common series","x":"Subtitle: Transparent database encryption protects the file, then decrypts for anyone who can query it. When a column holds data sensitive enough that a database reader should…"},"2141":{"u":"/articles/field-level-encryption-ef-core.html#why-it-matters","d":"Field-Level Encryption in EF Core: AES-GCM for PII Columns","k":"The MMCA.Common series","t":"Why it matters","x":"The gap between \"the database is encrypted\" and \"this column is protected\" is where compliance findings live. A PII inventory (rubric §30 asks for exactly this: what is…"},"2142":{"u":"/articles/field-level-encryption-ef-core.html#the-mmca-answer-one-value-converter-applied-per-property","d":"Field-Level Encryption in EF Core: AES-GCM for PII Columns","k":"The MMCA.Common series","t":"The MMCA answer: one value converter, applied per property","x":"The mechanism is EncryptedStringConverter, a sealed ValueConverter in the MMCA.Common.Infrastructure.Persistence.Encryption namespace. You attach it to a single property in an EF…"},"2143":{"u":"/articles/field-level-encryption-ef-core.html#the-honest-part-shipped-tested-latent","d":"Field-Level Encryption in EF Core: AES-GCM for PII Columns","k":"The MMCA.Common series","t":"The honest part: shipped, tested, latent","x":"Here is what separates this from a \"look what we built\" post. This converter is not in production. Zero columns across the four repositories are encrypted with it today. The…"},"2144":{"u":"/articles/field-level-encryption-ef-core.html#column-level-crypto-vs-tde-the-trade-you-are-actually-making","d":"Field-Level Encryption in EF Core: AES-GCM for PII Columns","k":"The MMCA.Common series","t":"Column-level crypto vs TDE: the trade you are actually making","x":"TDE and field-level encryption are not competitors; they are different threat models, and the honest framing is when each earns its cost. TDE is cheap, global, and transparent to…"},"2145":{"u":"/articles/field-level-encryption-ef-core.html#trade-offs-honestly","d":"Field-Level Encryption in EF Core: AES-GCM for PII Columns","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Encrypted columns are not queryable. The random nonce makes ciphertext non-deterministic, so there is no equality filter, index seek, sort, or join on an encrypted column.…"},"2146":{"u":"/articles/field-level-encryption-ef-core.html#apply-this-even-without-mmca","d":"Field-Level Encryption in EF Core: AES-GCM for PII Columns","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any EF Core codebase, and to most ORMs with a value-conversion or type-handler hook: 1. Use an EF Core ValueConverter (or your ORM's equivalent) so…"},"2147":{"u":"/articles/security-headers-csp-blazor.html","d":"Security Headers and CSP for Blazor: One Middleware, Every Host","k":"The MMCA.Common series","x":"Subtitle: Every client-facing host must stamp the same hardened response headers, but a Blazor host needs a Content-Security-Policy no static string can express. Here is one…"},"2148":{"u":"/articles/security-headers-csp-blazor.html#why-it-matters","d":"Security Headers and CSP for Blazor: One Middleware, Every Host","k":"The MMCA.Common series","t":"Why it matters","x":"Security response headers are cheap defence-in-depth: X-Content-Type-Options: nosniff stops MIME sniffing, X-Frame-Options and frame-ancestors stop clickjacking, HSTS forces…"},"2149":{"u":"/articles/security-headers-csp-blazor.html#the-mmca-answer-one-middleware-a-pluggable-csp","d":"Security Headers and CSP for Blazor: One Middleware, Every Host","k":"The MMCA.Common series","t":"The MMCA answer: one middleware, a pluggable CSP","x":"MMCA.Common ships a single SecurityHeadersMiddleware (MMCA.Common.Aspire/Security/SecurityHeaders.cs:145) in the MMCA.Common.Aspire.Security layer, registered with…"},"2150":{"u":"/articles/security-headers-csp-blazor.html#the-blazor-policy-built-at-runtime","d":"Security Headers and CSP for Blazor: One Middleware, Every Host","k":"The MMCA.Common series","t":"The Blazor policy, built at runtime","x":"An HTML host opts into the origin-pinned policy by registering its own provider before calling AddCommonSecurityHeaders. Both apps register one shared BlazorCspPolicyProvider…"},"2151":{"u":"/articles/security-headers-csp-blazor.html#adopted-at-both-edges-of-both-apps","d":"Security Headers and CSP for Blazor: One Middleware, Every Host","k":"The MMCA.Common series","t":"Adopted at both edges of both apps","x":"This is not a library that exists and waits to be used. Store and ADC each wire it at both client-facing edges. The Gateway hosts call…"},"2152":{"u":"/articles/security-headers-csp-blazor.html#trade-offs-honestly","d":"Security Headers and CSP for Blazor: One Middleware, Every Host","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- The baseline is complete, not maximal. A default that works for a Blazor and MudBlazor host is a default that carries style-src 'unsafe-inline' (SecurityHeaders.cs:65-67), so…"},"2153":{"u":"/articles/security-headers-csp-blazor.html#apply-this-even-without-mmca","d":"Security Headers and CSP for Blazor: One Middleware, Every Host","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The shape ports to any ASP.NET Core stack, and the idea ports to any web framework: 1. Put the hardened header set in one middleware with strongly-typed, overridable settings,…"},"2154":{"u":"/articles/observability-opentelemetry.html","d":"Observability by Default: OpenTelemetry and Azure Monitor in MMCA","k":"The MMCA.Common series","x":"Subtitle: Auto-instrumentation gives you HTTP and runtime signals for free, but it is blind to the two paths that carry almost all of your framework's own work: the CQRS pipeline…"},"2155":{"u":"/articles/observability-opentelemetry.html#why-it-matters","d":"Observability by Default: OpenTelemetry and Azure Monitor in MMCA","k":"The MMCA.Common series","t":"Why it matters","x":"Observability is the category you do not miss until production, and by then retrofitting it is expensive. The rubric names the bar directly: structured logging with correlation…"},"2156":{"u":"/articles/observability-opentelemetry.html#the-mmca-answer-one-call-one-baseline-on-every-host","d":"Observability by Default: OpenTelemetry and Azure Monitor in MMCA","k":"The MMCA.Common series","t":"The MMCA answer: one call, one baseline, on every host","x":"Every framework-consuming host calls AddServiceDefaults() first in Program.cs, and that method calls ConfigureOpenTelemetry() (Extensions.cs:87, the call at :89) before anything…"},"2157":{"u":"/articles/observability-opentelemetry.html#the-one-that-pays-for-itself-filtering-idle-poll-spans","d":"Observability by Default: OpenTelemetry and Azure Monitor in MMCA","k":"The MMCA.Common series","t":"The one that pays for itself: filtering idle poll spans","x":"The OutboxProcessor polls every relational outbox table on a recurring cycle (both deployment templates push the interval to 300 seconds precisely so idle polls cost less:…"},"2158":{"u":"/articles/observability-opentelemetry.html#the-other-half-which-signal-wakes-a-human","d":"Observability by Default: OpenTelemetry and Azure Monitor in MMCA","k":"The MMCA.Common series","t":"The other half: which signal wakes a human","x":"Everything above is emission. Which of those signals pages somebody, at what threshold, at what severity, is a separate decision, and for a long time it lived in the deployment…"},"2159":{"u":"/articles/observability-opentelemetry.html#trade-offs-honestly","d":"Observability by Default: OpenTelemetry and Azure Monitor in MMCA","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- The literal names can drift. The meter, activity-source, and poll-span names are duplicated as string literals across the Aspire package (OutboxPollFilterProcessor.cs:26-29 and…"},"2160":{"u":"/articles/observability-opentelemetry.html#apply-this-even-without-mmca","d":"Observability by Default: OpenTelemetry and Azure Monitor in MMCA","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any OpenTelemetry stack, with or without Aspire: 1. Put the telemetry baseline in one shared bootstrap every host calls, not in each app. One place to change…"},"2161":{"u":"/articles/saga-compensation-reconciliation.html","d":"Undo Is a Feature: Saga Compensation and the Reconciliation Backstop","k":"The MMCA.Common series","x":"Subtitle: A cancelled order has to give back stock that a transaction closed minutes ago already took, and a payment confirmation that never arrives strands the order forever.…"},"2162":{"u":"/articles/saga-compensation-reconciliation.html#why-it-matters","d":"Undo Is a Feature: Saga Compensation and the Reconciliation Backstop","k":"The MMCA.Common series","t":"Why it matters","x":"The rubric has two categories aimed straight at this. §6 (CQRS and Event-Driven Design, heading at ArchitectureEvaluationCriteria.md:229) asks for idempotent consumers (:238) and…"},"2163":{"u":"/articles/saga-compensation-reconciliation.html#the-mmca-answer-compensation-is-a-handler-not-a-branch-in-the-command","d":"Undo Is a Feature: Saga Compensation and the Reconciliation Backstop","k":"The MMCA.Common series","t":"The MMCA answer: compensation is a handler, not a branch in the command","x":"The command handler does one thing, and it does not even own the plumbing for that. CancelOrderHandler derives from MutateEntityHandlerBase (CancelOrderHandler.cs:27-31), so the…"},"2164":{"u":"/articles/saga-compensation-reconciliation.html#the-marker-idempotency-as-a-database-invariant","d":"Undo Is a Feature: Saga Compensation and the Reconciliation Backstop","k":"The MMCA.Common series","t":"The marker: idempotency as a database invariant","x":"Here is the part worth stealing even if you never touch this framework. At-least-once delivery means the compensating handler will eventually run twice. If restoring stock is not…"},"2165":{"u":"/articles/saga-compensation-reconciliation.html#redelivery-is-the-retry-mechanism-so-throwing-is-correct","d":"Undo Is a Feature: Saga Compensation and the Reconciliation Backstop","k":"The MMCA.Common series","t":"Redelivery is the retry mechanism, so throwing is correct","x":"A compensating handler needs no retry loop of its own, because it already sits on one. When in-process dispatch fails, the domain-event interceptor logs the failure and signals…"},"2166":{"u":"/articles/saga-compensation-reconciliation.html#the-inbound-edge-a-webhook-is-a-delivery-contract-not-an-api-call","d":"Undo Is a Feature: Saga Compensation and the Reconciliation Backstop","k":"The MMCA.Common series","t":"The inbound edge: a webhook is a delivery contract, not an API call","x":"Everything so far is about a message leaving the process (ADR-003, at-least-once out) or a broker redelivery arriving at a consumer (ADR-021, dedup on the way in). The Stripe…"},"2167":{"u":"/articles/saga-compensation-reconciliation.html#the-backstop-a-periodic-sweep-against-the-provider","d":"Undo Is a Feature: Saga Compensation and the Reconciliation Backstop","k":"The MMCA.Common series","t":"The backstop: a periodic sweep against the provider","x":"Compensation answers \"step two failed.\" It does not answer \"step three never reported back.\" A webhook that is never delivered, or that arrives and is rejected because the…"},"2168":{"u":"/articles/saga-compensation-reconciliation.html#trade-offs-honestly","d":"Undo Is a Feature: Saga Compensation and the Reconciliation Backstop","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Adoption is one module, and the record says so. This pattern lives in MMCA.Store's Sales module only: the two saga handlers and the one reconciliation sweep above. MMCA.ADC and…"},"2169":{"u":"/articles/saga-compensation-reconciliation.html#apply-this-even-without-mmca","d":"Undo Is a Feature: Saga Compensation and the Reconciliation Backstop","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The mechanism ports to any stack that has events, a database, and an external dependency: 1. Put the compensating action in its own handler, triggered by the event the first step…"},"2170":{"u":"/articles/governed-llm-boundary.html","d":"The LLM Is a Dependency: A Bounded, Guarded, Metered Boundary for Chat Completions","k":"The MMCA.Common series","x":"Subtitle: A chat completion is an unbounded, metered, non-deterministic call to somebody else's server, and most codebases make it by newing up a vendor client in the middle of a…"},"2171":{"u":"/articles/governed-llm-boundary.html#why-it-matters","d":"The LLM Is a Dependency: A Bounded, Guarded, Metered Boundary for Chat Completions","k":"The MMCA.Common series","t":"Why it matters","x":"Rubric §16, AI-Native Application Architecture, asks exactly one question of a product feature that calls a model: is that dependency governed like any other external system,…"},"2172":{"u":"/articles/governed-llm-boundary.html#the-mmca-answer-one-optional-package-and-the-call-is-a-pipeline","d":"The LLM Is a Dependency: A Bounded, Guarded, Metered Boundary for Chat Completions","k":"The MMCA.Common series","t":"The MMCA answer: one optional package, and the call is a pipeline","x":"MMCA.Common.AI is one of the nineteen published framework packages (MMCA.Common/FACTS.md:19, listed at :22, framework v1.205.0 at :14) and it is optional: nothing in the…"},"2173":{"u":"/articles/governed-llm-boundary.html#off-by-absence-not-off-by-flag","d":"The LLM Is a Dependency: A Bounded, Guarded, Metered Boundary for Chat Completions","k":"The MMCA.Common series","t":"Off by absence, not off by flag","x":"AiSettings (AiSettings.cs:31) binds one configuration section, Ai (:34), and carries the whole surface: Enabled (:48), Provider (:51), Model (:59), ApiKey (:70), MaxOutputTokens…"},"2174":{"u":"/articles/governed-llm-boundary.html#bounds-four-of-them-on-both-paths","d":"The LLM Is a Dependency: A Bounded, Guarded, Metered Boundary for Chat Completions","k":"The MMCA.Common series","t":"Bounds: four of them, on both paths","x":"BoundedChatClient (BoundedChatClient.cs:51) is a DelegatingChatClient and enforces four bounds, each applied to the buffered and the streaming path (the list is documented on the…"},"2175":{"u":"/articles/governed-llm-boundary.html#guardrails-the-framework-ships-the-extension-point-not-the-policy","d":"The LLM Is a Dependency: A Bounded, Guarded, Metered Boundary for Chat Completions","k":"The MMCA.Common series","t":"Guardrails: the framework ships the extension point, not the policy","x":"IChatGuardrail (IChatGuardrail.cs:20) has two methods: InspectRequestAsync (:27-30) and InspectResponseAsync (:37-40), each answering with a GuardrailVerdict. An application…"},"2176":{"u":"/articles/governed-llm-boundary.html#prompts-a-versioned-contract-the-framework-hashes","d":"The LLM Is a Dependency: A Bounded, Guarded, Metered Boundary for Chat Completions","k":"The MMCA.Common series","t":"Prompts: a versioned contract the framework hashes","x":"PromptContract (PromptContract.cs:23) is a record of four things: name, version, model and system prompt. Its Hash (:46) is the lowercase hex SHA-256 of those four joined with a…"},"2177":{"u":"/articles/governed-llm-boundary.html#metering-two-counters-one-histogram-one-name","d":"The LLM Is a Dependency: A Bounded, Guarded, Metered Boundary for Chat Completions","k":"The MMCA.Common series","t":"Metering: two counters, one histogram, one name","x":"AiUsageMeter (AiUsageMeter.cs:20) publishes mmca.ai.inputtokens (:29) and mmca.ai.outputtokens (:32) on the meter MMCA.Common.AI (:26), plus a mmca.ai.call.duration histogram in…"},"2178":{"u":"/articles/governed-llm-boundary.html#the-layering-rule-that-keeps-all-of-this-at-one-place","d":"The LLM Is a Dependency: A Bounded, Guarded, Metered Boundary for Chat Completions","k":"The MMCA.Common series","t":"The layering rule that keeps all of this at one place","x":"A governed boundary that leaks is not a boundary. There are exactly two ways this one leaks, and AiDependencyIsolationTestsBase (AiDependencyIsolationTestsBase.cs:19) is the…"},"2179":{"u":"/articles/governed-llm-boundary.html#trade-offs-honestly","d":"The LLM Is a Dependency: A Bounded, Guarded, Metered Boundary for Chat Completions","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Two of the seven §16 criteria are absent from the framework on purpose. An evaluation gate in CI and retrieval as data architecture are feature-side, and ADR-120 records both…"},"2180":{"u":"/articles/governed-llm-boundary.html#apply-this-even-without-mmca","d":"The LLM Is a Dependency: A Bounded, Guarded, Metered Boundary for Chat Completions","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The shape ports to any stack with a DI container and a vendor SDK. Microsoft.Extensions.AI makes it cheap in .NET because IChatClient and DelegatingChatClient already exist, but…"},"2181":{"u":"/articles/durable-internal-commands.html","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","x":"Subtitle: A handler that wants something to happen after its transaction commits has four mechanisms to choose from, and picking the wrong one loses the work or pays for…"},"2182":{"u":"/articles/durable-internal-commands.html#why-it-matters","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"Why it matters","x":"The rubric asks for this twice, from two directions. §6 (CQRS and Event-Driven Design) wants reads and writes separated through a dispatcher with a real decorator pipeline, an…"},"2183":{"u":"/articles/durable-internal-commands.html#four-mechanisms-one-question","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"Four mechanisms, one question","x":"The framework has four ways to do work later, and they are not interchangeable. The bounded channel (ADR-121) is a Channel singleton with a SingleReader BackgroundService drain,…"},"2184":{"u":"/articles/durable-internal-commands.html#the-mmca-answer-a-deferred-execution-is-the-inline-execution","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"The MMCA answer: a deferred execution IS the inline execution","x":"Here is the decision that makes the rest of it cheap. IInternalCommand is a marker interface deriving from ICommand and nothing else (IInternalCommand.cs:38). A command that opts…"},"2185":{"u":"/articles/durable-internal-commands.html#scheduling-rides-the-callers-unit-of-work","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"Scheduling rides the caller's unit of work","x":"IInternalCommandScheduler exposes ScheduleAsync(command, runAt) and a TimeSpan delay overload, both returning Result (IInternalCommandScheduler.cs:41-57). runAt is \"the earliest…"},"2186":{"u":"/articles/durable-internal-commands.html#the-row-and-what-it-remembers","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"The row, and what it remembers","x":"InternalCommandMessage (InternalCommandMessage.cs:21) is deliberately not an auditable entity, for the same reason OutboxMessage is not: it is framework bookkeeping, not domain…"},"2187":{"u":"/articles/durable-internal-commands.html#a-rename-that-does-not-orphan-the-queue","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"A rename that does not orphan the queue","x":"The row stores the command's assembly-qualified CLR name by default, which means renaming the class, moving its namespace, or moving its assembly orphans every row already…"},"2188":{"u":"/articles/durable-internal-commands.html#the-drain-claim-execute-stamp","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"The drain: claim, execute, stamp","x":"InternalCommandProcessor is a BackgroundService (InternalCommandProcessor.cs:47). Its cycle is the outbox's idiom, borrowed rather than shared. It waits a five-second startup…"},"2189":{"u":"/articles/durable-internal-commands.html#the-worked-example-an-email-that-must-survive-a-deploy","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"The worked example: an email that must survive a deploy","x":"MMCA.Store's Sales module schedules a payment-failure notification. The command is fifteen lines and most of them are documentation: One identifier as the payload, a stable name,…"},"2190":{"u":"/articles/durable-internal-commands.html#the-expensive-case-permission-timeout-and-a-cross-replica-claim","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"The expensive case: permission, timeout and a cross-replica claim","x":"MMCA.ADC's AI session scoring is the other end of the range, and it is the case ADR-121 moved out of the in-process channel. One pass issues one paid Anthropic call per session,…"},"2191":{"u":"/articles/durable-internal-commands.html#operating-it","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"Operating it","x":"A queue with no operator surface is a queue that gets hand-edited in production SQL. IInternalCommandAdministration (IInternalCommandAdministration.cs:17) mirrors…"},"2192":{"u":"/articles/durable-internal-commands.html#trade-offs-honestly","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- One migration per relational data source. The table is in the model of every relational source (SQL Server, PostgreSQL and SQLite after ADR-113), so adopting the queue means…"},"2193":{"u":"/articles/durable-internal-commands.html#apply-this-even-without-mmca","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The mechanism ports to anything with a relational database and a background worker. Six steps, in the order that matters: 1. Write the job to a table inside the caller's…"},"2194":{"u":"/articles/identity-completions.html","d":"Finishing Identity: Second Factor, Email Confirmation and Stored Permission Grants","k":"The MMCA.Common series","x":"Subtitle: A framework that owns sign-in for two deployed apps cannot add a second factor by adding a step. Here is how a TOTP challenge, an email-confirmation gate and…"},"2195":{"u":"/articles/identity-completions.html#why-it-matters","d":"Finishing Identity: Second Factor, Email Confirmation and Stored Permission Grants","k":"The MMCA.Common series","t":"Why it matters","x":"Rubric §11 (Security) is a weight-3 category asking that authentication be centralized and identity flows documented, that authorization be enforced at the right layer rather…"},"2196":{"u":"/articles/identity-completions.html#the-mmca-answer-the-unadopted-path-is-unreachable-not-merely-disabled","d":"Finishing Identity: Second Factor, Email Confirmation and Stored Permission Grants","k":"The MMCA.Common series","t":"The MMCA answer: the unadopted path is unreachable, not merely disabled","x":"AuthenticationServiceBase gained two constructor parameters, both optional and both defaulted to null: ITwoFactorAuthenticator? twoFactor = null and IOptions ?…"},"2197":{"u":"/articles/identity-completions.html#the-step-up-assertion-is-a-claim-and-presence-is-the-whole-test","d":"Finishing Identity: Second Factor, Email Confirmation and Stored Permission Grants","k":"The MMCA.Common series","t":"The step-up assertion is a claim, and presence is the whole test","x":"A challenge that is satisfied has to be recorded somewhere the rest of the system can read. The framework stamps an amr-style claim: AuthClaimTypes.MultiFactor is the literal mfa…"},"2198":{"u":"/articles/identity-completions.html#the-framework-ships-no-user-table-on-purpose","d":"Finishing Identity: Second Factor, Email Confirmation and Stored Permission Grants","k":"The MMCA.Common series","t":"The framework ships no user table, on purpose","x":"ITwoFactorService is stateless cryptography: secrets, provisioning URIs, verification inside a skew window, recovery codes. ITwoFactorStore is the persistence, and the consumer…"},"2199":{"u":"/articles/identity-completions.html#stored-grants-operator-editable-and-structurally-unable-to-deny","d":"Finishing Identity: Second Factor, Email Confirmation and Stored Permission Grants","k":"The MMCA.Common series","t":"Stored grants: operator-editable, and structurally unable to deny","x":"Article 24 covered the compiled permission registry: a frozen role-to-permission map, consulted by the CQRS authorization decorators and the [HasPermission] policy. It has one…"},"2200":{"u":"/articles/identity-completions.html#two-refusals-that-are-worth-more-than-the-feature","d":"Finishing Identity: Second Factor, Email Confirmation and Stored Permission Grants","k":"The MMCA.Common series","t":"Two refusals that are worth more than the feature","x":"StoredPermissionRoleAdministrationService (:45) is the shipped IRoleAdministrationService: it reports each role's compiled and stored permissions and replaces the stored half.…"},"2201":{"u":"/articles/identity-completions.html#the-administration-api-is-two-bases-gated-on-capabilities","d":"Finishing Identity: Second Factor, Email Confirmation and Stored Permission Grants","k":"The MMCA.Common series","t":"The administration API is two bases, gated on capabilities","x":"RolesAdminControllerBase (:61) needs no app-supplied service, because AddStoredPermissionGrants() registers a complete one; an app implements the interface only to change that…"},"2202":{"u":"/articles/identity-completions.html#trade-offs-honestly","d":"Finishing Identity: Second Factor, Email Confirmation and Stored Permission Grants","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Two-factor ships unadopted, and the article will not pretend otherwise. A search across both consumers' Source/ trees this run finds no call to AddTwoFactorAuthentication and…"},"2203":{"u":"/articles/identity-completions.html#apply-this-even-without-mmca","d":"Finishing Identity: Second Factor, Email Confirmation and Stored Permission Grants","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The identity mechanics here are standard. What is worth copying is the shape of the extension. 1. Make the unadopted path unreachable rather than disabled. An optional…"},"2204":{"u":"/articles/series-index.html","d":"The MMCA series: every pattern, one place","k":"The MMCA.Common series","x":"Subtitle: A single map of the whole series. Start at the top if MMCA.Common is new to you, or jump straight to the pattern you came for. --- MMCA.Common is an Apache-2.0 licensed…"},"2205":{"u":"/articles/series-index.html#start-here","d":"The MMCA series: every pattern, one place","k":"The MMCA.Common series","t":"Start here","x":"The thesis and the framing. Read these first if you have not met the framework. - 01 · I open-sourced the enterprise .NET plumbing I never want to rewrite, and graded it against…"},"2206":{"u":"/articles/series-index.html#core-patterns","d":"The MMCA series: every pattern, one place","k":"The MMCA.Common series","t":"Core patterns","x":"The day-one building blocks. Error handling, the domain model, query intent, the handler pipeline, the reliability backbone that ties them together, the compensating handlers…"},"2207":{"u":"/articles/series-index.html#data-and-persistence","d":"The MMCA series: every pattern, one place","k":"The MMCA.Common series","t":"Data and persistence","x":"How the data layer is built so a module owns its own database, and even its own storage engine, and can become its own service later without a rewrite. - 10 ·…"},"2208":{"u":"/articles/series-index.html#auth-the-api-edge-and-cross-cutting","d":"The MMCA series: every pattern, one place","k":"The MMCA.Common series","t":"Auth, the API edge, and cross-cutting","x":"The concerns that sit across every module: authentication between services, authorization (by role, by permission, and by row ownership), password storage, safe retries, caching,…"},"2209":{"u":"/articles/series-index.html#run-extract-and-harden","d":"The MMCA series: every pattern, one place","k":"The MMCA.Common series","t":"Run, extract, and harden","x":"Bring the whole stack up with one command, then cut a module out into its own service, make the running system survive failure, see what it is doing in production, and put…"},"2210":{"u":"/articles/series-index.html#proof-front-end-and-getting-started","d":"The MMCA series: every pattern, one place","k":"The MMCA.Common series","t":"Proof, front end, and getting started","x":"The evidence that the patterns hold (fitness functions, the test pyramid, the erasure pathway), the reusable Blazor UI framework and the internationalization and theming that…"},"2211":{"u":"/articles/series-index.html#where-to-go-next","d":"The MMCA series: every pattern, one place","k":"The MMCA.Common series","t":"Where to go next","x":"If you are evaluating the framework, read 01 then 03 then 41: the thesis, the rubric, and the proof. If you are here to solve a specific problem, the core-patterns and…"},"2212":{"u":"/","d":"Ivan Ball-llovera · Senior Software Architect","k":"Site","x":"Senior Software Architect Ivan Ball-llovera Cloud-native enterprise architecture on the Microsoft stack I design and ship production-grade .NET platforms: modular monoliths that…"},"2213":{"u":"/","d":"Ivan Ball-llovera · Senior Software Architect","k":"Site","t":"Architecture that earns its keep","x":"I am a Senior Software Architect with more than 25 years designing and delivering scalable, cloud-native systems on the Microsoft stack. My focus is Domain-Driven Design, Clean…"},"2214":{"u":"/","d":"Ivan Ball-llovera · Senior Software Architect","k":"Site","t":"The MMCA platform","x":"A production-grade .NET 10 framework and a set of reference apps that demonstrate modern enterprise architecture end to end. It is built as a modular monolith that extracts…"},"2215":{"u":"/","d":"Ivan Ball-llovera · Senior Software Architect","k":"Site","t":"Deep dives on enterprise .NET","x":"A long-form series turning the framework's decisions into teachable patterns, every claim grounded in real source. A few recent pieces: Proof & getting started · No. 53 The…"},"2216":{"u":"/","d":"Ivan Ball-llovera · Senior Software Architect","k":"Site","t":"Speaking & giving back","x":"I help run two community-driven Atlanta technology conferences and keep production-grade patterns free and in the open. See talks & community work Organizer & speaker Two Atlanta…"},"2217":{"u":"/resume.html","d":"Résumé","k":"Site","x":"Résumé Ivan Ball-llovera Senior Software Architect 25+ years designing and delivering scalable, cloud-native systems on the Microsoft stack: Domain-Driven Design, Clean…"},"2218":{"u":"/resume.html","d":"Résumé","k":"Site","t":"Professional summary","x":"Senior Software Architect with 25+ years designing and delivering scalable, cloud-native systems on the Microsoft stack. Deep expertise in Domain-Driven Design, Clean…"},"2219":{"u":"/resume.html","d":"Résumé","k":"Site","t":"Core competencies","x":"Architecture & design Domain-Driven Design, Clean Architecture, CQRS, Modular Monolith → Microservices, Event-Driven Architecture, Outbox Pattern, gRPC, API Gateway (YARP),…"},"2220":{"u":"/resume.html","d":"Résumé","k":"Site","t":"Professional experience","x":"Senior Software Engineer · Assurant June 2025 – Present · Architect-level scope: platform, security, and cross-team technical decisions Re-architected the AR.com renters quote…"},"2221":{"u":"/resume.html","d":"Résumé","k":"Site","t":"Featured project · MMCA platform","x":"Personal / open source · github.com/ivanball/MMCA.Common A production-grade .NET 10 reference platform demonstrating modern enterprise architecture end-to-end. The conference…"},"2222":{"u":"/resume.html","d":"Résumé","k":"Site","t":"Education","x":"B.S., Computer Science University of Havana (Faculty of Mathematics), Havana, Cuba (1994 – 1999)"},"2223":{"u":"/resume.html","d":"Résumé","k":"Site","t":"Languages","x":"English · Spanish (bilingual)"},"2224":{"u":"/resume.html","d":"Résumé","k":"Site","t":"Certifications","x":"✓ Azure Administrator Associate (AZ-104, 2025) ✓ Azure AI Fundamentals (AI-900, 2024) ✓ Azure Data Fundamentals (DP-900, 2021) ✓ Azure Fundamentals (AZ-900, 2021) → In progress…"},"2225":{"u":"/resume.html","d":"Résumé","k":"Site","t":"Professional development","x":"Continuously prototypes emerging technologies, with a current focus on Clean Architecture using .NET 10, Blazor, .NET MAUI, and ASP.NET Core Web API, and on AI-assisted…"},"2226":{"u":"/platform.html","d":"The MMCA Platform","k":"Site","x":"Featured work · Open source The MMCA platform A production-grade .NET 10 platform that demonstrates modern enterprise architecture end to end: an open-source framework of…"},"2227":{"u":"/platform.html","d":"The MMCA Platform","k":"Site","t":"MMCA.Common","x":"A NuGet package framework for building modular-monolith applications with DDD, Clean Architecture, and CQRS, and the extension points to extract a module into its own…"},"2228":{"u":"/platform.html","d":"The MMCA Platform","k":"Site","t":"Three reference applications","x":"The framework is consumed by real apps. Each one exercises the patterns differently, and the conference app ran a live event on Azure. Conference MMCA.ADC A production-deployed…"},"2229":{"u":"/platform.html","d":"The MMCA Platform","k":"Site","t":"From one graph, laptop to cloud","x":"Orchestrated locally with .NET Aspire, then deployed to Azure Container Apps from the same declarative model. The .NET Aspire dashboard: services, databases, and the broker as…"},"2230":{"u":"/platform.html","d":"The MMCA Platform","k":"Site","t":"Architectural styles the codebase commits to","x":"The recurring ideas every repo is built on, summarized from the onboarding primer's orientation chapter. Each is taught in full at its first concrete appearance in the reference…"},"2231":{"u":"/platform.html","d":"The MMCA Platform","k":"Site","t":"A two-axis architecture scorecard","x":"Every repo is scored against a 34-category rubric on two axes, Maturity (how complete the decision is) and Implementation (how well it is realized in code), with evidence and…"},"2232":{"u":"/platform.html","d":"The MMCA Platform","k":"Site","t":"Architecture Decision Records","x":"131 ADRs capture the context and trade-offs behind each cross-cutting pattern, so the design is teachable, not tribal knowledge. Every entry below links to the full record. 001…"},"2233":{"u":"/platform.html","d":"The MMCA Platform","k":"Site","t":"The reference library","x":"The full architecture documentation, maintained in this site's repository as its canonical home and rendered as browsable pages: every Architecture Decision Record, the…"},"2234":{"u":"/platform.html","d":"The MMCA Platform","k":"Site","t":"Use it, read it, or follow along","x":"The framework is Apache 2.0 and published to nuget.org. The fastest way in is the reference app: one module wired end to end through all five layers, with the extraction path…"},"2235":{"u":"/platform.html","d":"The MMCA Platform","k":"Site","t":"Get each deep dive by email","x":"One message per article, no digests and no other mail. Email address Subscribe"},"2236":{"u":"/writing.html","d":"Writing","k":"Site","x":"Writing Deep dives on enterprise .NET A long-form series that turns the MMCA framework's architecture decisions into teachable patterns, every claim grounded in real source. Read…"},"2237":{"u":"/writing.html","d":"Writing","k":"Site","t":"Get each deep dive by email","x":"One message per article, no digests and no other mail. Email address Subscribe"},"2238":{"u":"/speaking.html","d":"Speaking & Community","k":"Site","x":"Speaking & community Talks and giving back For more than 20 years I have been an active contributor to the Microsoft developer communities in Atlanta and South Florida: teaching,…"},"2239":{"u":"/speaking.html","d":"Speaking & Community","k":"Site","t":"Sessions and workshops","x":"Upcoming · Atlanta Developers Conference precon · October 16, 2026 Build an AI-Ready .NET App with an AI Pair: Clean Architecture, MCP, and Agentic Workflows Full-day, hands-on…"},"2240":{"u":"/speaking.html","d":"Speaking & Community","k":"Site","t":"Organizing two Atlanta conferences","x":"I help convene developers in person, giving the local community direct, no-cost access to expert content on the Microsoft platform. Lead organizer Atlanta Cloud + AI Conference…"},"2241":{"u":"/speaking.html","d":"Speaking & Community","k":"Site","t":"User groups","x":"An active participant in Atlanta's Microsoft technology user-group ecosystem, the same community network from which the conferences draw their speakers and attendees. • Atlanta…"},"2242":{"u":"/speaking.html","d":"Speaking & Community","k":"Site","t":"Open source & mentorship","x":"My MMCA framework is Apache-2.0 licensed and documented with architecture decision records, so the patterns are not just usable but teachable. I mentor developers one on one,…"},"2243":{"u":"/speaking.html","d":"Speaking & Community","k":"Site","t":"What I speak on","x":"Sessions and workshops for conferences, user groups, and teams. Clean Architecture & DDD on .NET Modular monolith → microservices The transactional outbox Database-per-service…"},"2244":{"u":"/contact.html","d":"Contact","k":"Site","x":"Contact Let's connect Happy to talk architecture, the MMCA platform, speaking at your conference or user group, or comparing notes on .NET and Azure. The fastest ways to reach…"},"2245":{"u":"/contact.html","d":"Contact","k":"Site","t":"Three places to start","x":"Open source The MMCA platform A .NET 10 framework and three reference apps, graded in the open against a 34-category rubric. See the architecture → Writing Deep dives on…"}},"dirtCount":0,"index":[["✉",{"3":{"2244":1}}],["✓",{"3":{"2224":4}}],["▸",{"3":{"2214":4}}],["↗",{"3":{"2214":1,"2226":2,"2232":1,"2234":5,"2236":1,"2242":1}}],["📚",{"3":{"1877":1,"1886":1,"1941":1,"1950":1,"1979":1,"2028":1}}],["📄",{"3":{"1793":1,"1802":1,"1846":1,"1853":1,"1877":1,"1886":1,"1899":1,"1905":1,"1950":1,"1965":1,"1972":1,"1979":1,"1985":1,"1991":1,"1997":1,"2002":1,"2028":1,"2049":1,"2060":1,"2069":1,"2086":1,"2128":1}}],["⭐",{"3":{"1787":1,"1793":1,"1802":1,"1846":1,"1853":1,"1877":1,"1886":1,"1899":1,"1905":1,"1941":1,"1950":1,"1965":1,"1972":1,"1979":1,"1985":1,"1991":1,"1997":1,"2002":1,"2028":1,"2049":1,"2060":1,"2069":1,"2086":1,"2128":1}}],["★",{"3":{"1779":8}}],["✅",{"3":{"1611":6}}],["−",{"3":{"1583":1,"1584":1,"1585":1}}],["≈",{"3":{"1537":1}}],["÷",{"3":{"1523":4,"1537":2,"1574":4,"1588":4}}],["σ",{"3":{"1523":4,"1532":1,"1533":1,"1537":4,"1574":4,"1583":1,"1584":1,"1588":4}}],["σweight",{"3":{"0":1,"1527":1,"1578":1,"1592":1}}],["≥",{"3":{"1467":1,"1709":1}}],["×4",{"3":{"1578":1,"1592":1}}],["×10",{"3":{"1527":1,"1578":1,"1592":1}}],["×",{"3":{"1456":1,"1537":5,"1583":1,"1584":1,"1585":1,"1594":2,"1678":1,"1798":2}}],["➡",{"3":{"1229":1,"1237":1,"1247":1,"1259":1,"1270":1,"1271":1,"1286":1,"1300":1,"1301":1,"1309":1,"1310":1,"1311":1,"1312":1,"1323":1,"1324":1,"1339":1,"1350":1,"1359":1,"1369":1,"1380":1,"1395":1,"1396":1,"1402":1,"1415":1,"1416":1,"1417":1,"1427":1,"1438":1}}],["⬅",{"3":{"1229":1,"1237":1,"1247":1,"1259":1,"1270":1,"1271":1,"1286":1,"1300":1,"1301":1,"1309":1,"1310":1,"1311":1,"1312":1,"1323":1,"1324":1,"1339":1,"1350":1,"1359":1,"1369":1,"1380":1,"1395":1,"1396":1,"1402":1,"1415":1,"1416":1,"1417":1,"1427":1,"1438":1}}],[">",{"0":{"1198":1},"3":{"2244":1}}],["<=",{"3":{"1532":1,"1583":1,"1588":1,"1635":1}}],["",{"1":{"961":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1},"3":{"2232":1}}],["enumerationconverter<",{"3":{"1237":1}}],["enumerationconverter",{"2":{"1230":1,"1235":1},"3":{"1198":1,"1199":2,"1203":1,"1207":1,"1230":1,"1235":1,"1237":3}}],["enumerationtests",{"3":{"964":3,"1191":1,"1199":1,"1207":4,"1237":1,"1438":1,"1496":1}}],["enumerationserializationtests",{"2":{"964":1},"3":{"964":3,"966":1,"1199":1,"1207":5,"1237":1}}],["enumerations",{"0":{"1235":1},"3":{"0":1,"964":1,"1049":1,"1051":1,"1230":1,"1286":4,"1311":2,"1436":1,"1438":1}}],["enumerationvalueconvertertests",{"2":{"964":1},"3":{"964":3,"1191":1,"1199":1,"1207":3,"1237":1,"1286":6,"1496":1}}],["enumerationvalueconverter",{"2":{"964":1},"3":{"0":1,"964":2,"965":1,"966":1,"1199":2,"1203":1,"1207":3,"1237":3,"1282":2,"1286":23}}],["enumerationjsonconverterfactory",{"2":{"964":1,"1230":1,"1235":1,"1237":1},"3":{"0":1,"964":1,"1050":1,"1198":1,"1199":5,"1203":1,"1207":1,"1230":1,"1235":1,"1237":6,"1300":1,"1311":2}}],["enumeration",{"2":{"963":1,"964":2,"966":1,"967":2,"968":1,"1049":1,"1051":1,"1052":1,"1235":2},"3":{"0":5,"166":1,"243":1,"441":1,"554":1,"626":1,"649":2,"651":1,"838":1,"853":1,"854":1,"855":1,"961":1,"963":8,"964":14,"965":5,"966":8,"967":4,"968":1,"990":1,"1049":1,"1050":1,"1051":1,"1052":1,"1198":1,"1199":10,"1203":1,"1207":4,"1212":2,"1230":2,"1231":1,"1234":1,"1235":17,"1237":71,"1271":1,"1282":2,"1286":22,"1294":2,"1300":16,"1301":2,"1311":8,"1323":4,"1324":9,"1359":3,"1396":1,"1415":4,"1433":1,"1436":17,"1438":4,"1496":1,"1498":1,"1526":1,"1632":1,"1641":2,"1662":3,"1767":1,"1770":1,"1915":1,"2077":1,"2127":1}}],["enumerator",{"3":{"1222":1,"1229":1,"1425":1,"2177":1}}],["enumerate",{"3":{"166":1,"248":1,"698":1,"773":1,"775":1,"1059":1,"1286":2,"1300":4,"1301":2,"1311":1,"1324":4,"1349":1,"1369":1,"1380":1,"1396":2,"1407":1,"1408":2,"1415":2,"1417":1,"1427":3,"1429":1,"1436":5,"1534":1,"1589":1,"1591":1,"1596":1,"1916":1}}],["enumerated",{"3":{"0":1,"171":1,"184":1,"186":1,"200":1,"526":1,"532":1,"618":1,"837":1,"899":1,"1018":1,"1033":1,"1036":1,"1212":1,"1237":1,"1270":1,"1300":1,"1301":1,"1309":1,"1311":1,"1323":1,"1324":3,"1339":2,"1344":1,"1359":3,"1396":1,"1436":3,"1454":1,"1492":1}}],["enumeratesourcefiles",{"3":{"1436":1}}],["enumerates",{"3":{"0":3,"184":1,"189":1,"243":2,"526":1,"585":2,"626":1,"640":1,"699":1,"765":1,"766":1,"770":1,"990":1,"1259":1,"1271":1,"1286":2,"1300":2,"1301":1,"1311":1,"1324":6,"1339":1,"1396":5,"1413":1,"1415":2,"1417":1,"1427":1,"1436":15,"1447":1,"1455":1,"1686":1,"1851":1,"1962":1,"2200":1}}],["enums",{"1":{"961":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1},"3":{"0":2,"782":1,"961":1,"963":2,"964":1,"1203":1,"1207":2,"1212":1,"1230":1,"1233":1,"1235":1,"1236":1,"1237":2,"1286":1,"1324":2,"1342":1,"1350":2,"1351":1,"1359":4,"1369":1,"1380":1,"1395":1,"1396":6,"1402":1,"1436":3,"1438":1,"1489":1,"1496":1,"1662":3,"2044":1,"2232":1}}],["enum",{"1":{"961":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1,"1172":1,"1173":1,"1174":1,"1175":1,"1176":1,"1177":1,"1178":1,"1179":1,"1180":1},"3":{"0":6,"110":1,"136":1,"142":1,"150":1,"164":1,"166":1,"454":2,"682":1,"691":2,"692":1,"717":1,"782":2,"783":2,"784":2,"961":1,"963":4,"964":6,"965":3,"966":1,"968":1,"1034":1,"1049":1,"1051":1,"1089":1,"1091":1,"1094":1,"1172":1,"1174":2,"1175":3,"1176":1,"1177":1,"1178":1,"1203":42,"1205":1,"1207":47,"1212":4,"1217":1,"1219":1,"1225":1,"1229":7,"1230":1,"1233":1,"1235":1,"1236":1,"1237":11,"1247":2,"1259":1,"1270":6,"1280":1,"1282":1,"1285":1,"1286":32,"1300":16,"1309":12,"1310":3,"1311":6,"1312":1,"1320":2,"1323":8,"1324":29,"1339":10,"1341":2,"1342":2,"1344":2,"1349":1,"1350":23,"1353":1,"1359":34,"1369":13,"1380":8,"1384":1,"1390":1,"1393":2,"1394":1,"1395":20,"1396":58,"1402":18,"1410":1,"1415":7,"1417":1,"1422":1,"1427":6,"1430":1,"1431":1,"1436":41,"1438":2,"1496":2,"1538":1,"1631":1,"1650":1,"1686":3,"1727":1,"1749":1,"1766":1,"1805":3,"1807":1,"1930":2,"1932":1,"2044":1,"2197":2,"2232":2}}],["entonces",{"3":{"1436":1}}],["entangled",{"3":{"1436":1}}],["entail",{"3":{"85":1,"264":1}}],["enterprise",{"0":{"2215":1},"1":{"1780":1,"1781":1,"1782":1,"1783":1,"1784":1,"1785":1,"1786":1,"1787":1},"3":{"696":1,"705":1,"713":1,"723":1,"739":1,"1011":1,"1213":1,"1332":1,"1339":3,"1438":2,"1443":1,"1496":1,"1536":2,"1780":2,"2205":1,"2212":1,"2214":1,"2216":1,"2220":2,"2221":1,"2226":1,"2236":1,"2239":1,"2245":1}}],["entering",{"3":{"498":1,"501":1,"1317":1,"1323":1,"1339":1,"1395":4,"1396":1,"1436":2}}],["enter",{"3":{"237":1,"507":1,"513":1,"725":1,"1247":1,"1271":4,"1286":1,"1324":5,"1339":1,"1359":11,"1380":1,"1395":1,"1417":1,"1438":2,"1453":1,"1460":1,"1467":1,"1496":1,"1669":1,"1980":1,"2036":1,"2084":1}}],["entered",{"3":{"139":1,"265":1,"333":1,"512":1,"1271":1,"1320":1,"1323":1,"1350":2,"1353":1,"1359":4,"1395":9,"1412":1,"1415":2,"1417":4,"1444":1,"1631":1,"1641":1,"1765":1}}],["enters",{"3":{"27":1,"235":1,"292":1,"427":1,"545":1,"564":1,"758":1,"1012":1,"1237":1,"1247":1,"1286":3,"1323":1,"1324":2,"1350":3,"1359":5,"1380":1,"1396":2,"1417":1,"1436":3,"1455":2,"2167":1,"2173":1}}],["entropy",{"3":{"907":1,"1300":1,"1311":1}}],["entrancy",{"3":{"1286":2,"1324":3,"1417":1}}],["entrance",{"3":{"657":2,"658":1}}],["entrant",{"3":{"0":1,"988":2,"989":1,"991":1,"1212":1,"1263":1,"1270":1,"1278":1,"1324":1,"1664":1,"1840":1}}],["entra",{"3":{"0":1,"599":2,"600":2,"1455":1,"1467":7,"1477":4}}],["entries",{"2":{"1231":1,"1233":1},"3":{"0":1,"17":4,"19":1,"122":1,"135":1,"137":1,"139":1,"142":3,"145":2,"147":1,"150":1,"166":2,"186":1,"219":1,"245":1,"330":2,"337":1,"372":1,"388":1,"390":1,"395":2,"407":1,"418":1,"423":2,"424":1,"429":1,"497":1,"511":1,"543":2,"585":1,"599":1,"611":1,"624":2,"626":2,"633":4,"669":3,"690":2,"692":2,"698":1,"715":1,"725":1,"733":2,"734":1,"735":1,"737":1,"740":1,"777":1,"819":1,"827":1,"829":1,"839":1,"841":1,"881":1,"896":1,"972":1,"996":1,"998":1,"1006":1,"1007":2,"1018":1,"1073":1,"1074":3,"1075":1,"1078":1,"1116":1,"1161":1,"1225":1,"1231":1,"1233":1,"1237":5,"1241":4,"1242":1,"1247":5,"1259":6,"1267":1,"1270":6,"1271":1,"1273":1,"1274":1,"1276":1,"1278":2,"1280":3,"1285":1,"1286":34,"1300":9,"1301":12,"1310":1,"1311":6,"1312":1,"1320":1,"1323":5,"1324":22,"1339":7,"1350":1,"1351":1,"1359":5,"1369":1,"1380":8,"1394":1,"1395":7,"1396":33,"1415":8,"1417":7,"1427":1,"1436":57,"1438":1,"1443":2,"1447":1,"1456":1,"1463":1,"1467":9,"1490":1,"1492":1,"1496":1,"1599":1,"1631":2,"1650":1,"1651":2,"1652":1,"1661":1,"1701":2,"1708":1,"1727":2,"1731":1,"1774":1,"1851":1,"1898":1,"1912":1,"1916":1,"1918":1,"1920":2,"1922":1,"1924":1,"1927":2,"1988":1,"2001":1,"2085":1,"2097":1,"2103":2,"2111":1,"2112":1,"2150":1,"2165":1}}],["entrypagesize",{"3":{"1396":1}}],["entrypoint",{"2":{"869":1},"3":{"0":1,"869":1,"870":1,"873":1,"1445":5}}],["entry",{"0":{"1377":1,"1421":1},"3":{"0":12,"27":1,"41":1,"59":2,"60":1,"71":1,"73":1,"74":1,"96":1,"121":1,"122":3,"123":1,"130":1,"135":4,"136":3,"137":3,"138":3,"139":5,"140":8,"141":4,"142":6,"145":5,"147":3,"149":1,"157":2,"166":7,"170":3,"171":1,"177":1,"186":2,"200":2,"201":5,"219":2,"243":2,"245":1,"248":4,"249":2,"251":1,"252":3,"254":5,"256":5,"257":4,"258":7,"259":4,"261":1,"265":2,"286":2,"298":1,"301":1,"303":2,"333":1,"335":2,"341":1,"349":1,"359":3,"362":1,"365":1,"366":1,"370":1,"372":1,"386":1,"395":2,"404":1,"408":1,"418":1,"423":4,"424":1,"425":5,"426":4,"427":1,"428":6,"436":1,"443":3,"461":1,"474":1,"478":2,"483":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"499":1,"507":1,"511":1,"543":2,"549":4,"551":2,"558":1,"572":1,"577":1,"585":1,"599":6,"600":1,"607":2,"609":1,"633":3,"636":1,"649":2,"657":1,"668":1,"676":1,"680":1,"698":4,"709":2,"710":1,"720":1,"725":1,"731":1,"732":1,"733":2,"735":1,"740":2,"742":1,"774":1,"776":2,"782":1,"790":1,"792":2,"794":1,"798":1,"821":1,"825":1,"826":1,"830":1,"832":1,"834":1,"838":2,"840":2,"861":2,"881":2,"899":1,"905":2,"909":1,"914":1,"937":1,"941":2,"972":2,"980":1,"988":1,"995":1,"996":2,"997":1,"1018":6,"1019":1,"1034":2,"1036":1,"1059":1,"1065":1,"1067":1,"1069":1,"1070":1,"1073":1,"1074":1,"1082":1,"1116":4,"1133":2,"1135":1,"1136":1,"1160":2,"1161":4,"1162":2,"1163":4,"1173":1,"1175":2,"1179":1,"1192":1,"1199":9,"1203":1,"1207":1,"1212":2,"1223":1,"1229":2,"1231":1,"1237":14,"1241":2,"1242":2,"1247":24,"1259":7,"1262":2,"1263":3,"1264":1,"1265":1,"1267":3,"1270":24,"1271":1,"1273":1,"1274":1,"1276":2,"1279":3,"1280":1,"1284":1,"1285":1,"1286":110,"1298":1,"1300":36,"1301":40,"1304":1,"1307":1,"1309":6,"1310":1,"1311":20,"1312":2,"1316":1,"1320":2,"1323":23,"1324":79,"1326":1,"1332":2,"1338":2,"1339":24,"1347":1,"1350":9,"1356":1,"1357":1,"1359":42,"1369":1,"1370":2,"1373":1,"1375":1,"1379":2,"1380":17,"1389":1,"1392":1,"1395":26,"1396":63,"1402":1,"1408":1,"1414":2,"1415":20,"1416":18,"1417":33,"1418":1,"1422":1,"1425":1,"1427":6,"1429":1,"1432":1,"1434":1,"1436":140,"1437":1,"1438":12,"1441":3,"1443":2,"1447":3,"1449":2,"1454":1,"1455":1,"1456":1,"1460":2,"1464":1,"1465":1,"1467":16,"1474":2,"1480":1,"1488":2,"1489":2,"1490":4,"1492":1,"1507":2,"1526":3,"1561":1,"1577":1,"1585":1,"1589":1,"1591":1,"1596":1,"1599":2,"1627":1,"1631":5,"1637":1,"1640":1,"1641":2,"1648":1,"1651":3,"1652":1,"1653":3,"1655":2,"1662":1,"1673":1,"1675":1,"1684":2,"1685":4,"1686":3,"1687":1,"1693":1,"1702":2,"1703":1,"1708":4,"1719":1,"1722":1,"1727":2,"1728":1,"1729":1,"1737":1,"1746":1,"1747":5,"1748":17,"1749":13,"1778":1,"1790":2,"1821":2,"1849":1,"1851":2,"1871":2,"1898":2,"1904":1,"1905":2,"1908":1,"1909":3,"1912":1,"1915":1,"1916":2,"1917":1,"1918":2,"1920":2,"1922":4,"1923":1,"1930":1,"1933":1,"1934":1,"1962":1,"1974":1,"1989":1,"2008":1,"2023":2,"2043":1,"2069":2,"2083":1,"2085":1,"2096":1,"2112":1,"2121":2,"2138":1,"2142":2,"2150":1,"2172":1,"2228":1,"2232":2}}],["entire",{"3":{"0":1,"47":1,"556":1,"557":1,"564":1,"640":1,"756":1,"759":1,"798":1,"906":1,"926":1,"979":1,"990":1,"1212":1,"1247":1,"1259":2,"1263":1,"1270":7,"1271":1,"1286":3,"1300":4,"1301":2,"1309":4,"1310":2,"1311":5,"1323":6,"1324":8,"1339":4,"1348":1,"1350":6,"1359":26,"1380":2,"1382":1,"1395":9,"1396":6,"1402":2,"1415":5,"1416":5,"1417":11,"1427":2,"1436":14,"1441":1,"1454":1,"1467":3,"1472":1,"1482":1,"1560":1,"1638":1,"1683":1,"1767":1,"1799":1,"1810":1,"1815":1,"1829":2,"1831":1,"1856":1,"1893":1,"1897":1,"1909":1,"1918":1,"1922":1,"1938":1,"1942":1,"2005":1,"2034":1,"2036":1,"2072":1,"2131":1,"2135":1,"2189":1}}],["entirely",{"3":{"0":3,"27":1,"32":1,"70":1,"109":1,"121":1,"126":1,"136":1,"137":1,"243":1,"244":1,"259":1,"295":1,"320":1,"349":1,"361":1,"388":1,"391":1,"427":1,"443":1,"464":1,"508":1,"527":1,"536":1,"556":1,"560":1,"564":1,"607":1,"657":1,"684":1,"724":1,"757":1,"789":1,"790":1,"799":1,"915":1,"926":1,"935":1,"988":1,"1118":1,"1170":1,"1229":2,"1237":1,"1241":1,"1245":1,"1247":4,"1256":1,"1259":4,"1266":1,"1270":7,"1271":2,"1274":1,"1279":1,"1281":1,"1286":14,"1300":13,"1301":4,"1309":3,"1311":6,"1312":2,"1314":1,"1320":2,"1323":4,"1324":13,"1331":1,"1336":1,"1339":8,"1340":1,"1342":2,"1350":2,"1359":21,"1368":1,"1369":2,"1379":1,"1380":2,"1383":1,"1392":1,"1393":1,"1395":11,"1396":13,"1400":1,"1401":1,"1402":7,"1415":9,"1417":12,"1427":2,"1430":1,"1436":23,"1438":3,"1446":1,"1447":1,"1449":1,"1454":1,"1455":3,"1456":1,"1459":1,"1465":2,"1467":3,"1478":1,"1488":1,"1490":1,"1496":2,"1504":1,"1562":1,"1577":1,"1631":1,"1651":1,"1683":1,"1720":1,"1727":1,"1765":1,"1777":1,"1781":1,"1849":1,"1858":1,"1859":1,"1872":1,"1884":1,"1916":1,"1921":1,"1922":1,"1986":1,"1988":1,"1996":1,"2000":1,"2013":1,"2029":1,"2030":1,"2031":1,"2044":1,"2047":1,"2054":1,"2076":1,"2118":1,"2121":1,"2145":1,"2161":1,"2166":1}}],["entitling",{"3":{"1764":1,"1765":1}}],["entitlements",{"3":{"418":1,"422":2,"425":1,"426":1,"1436":2,"1481":1,"1748":1,"1749":1,"1765":2,"1769":1}}],["entitlement",{"3":{"418":1,"420":1,"422":1,"1286":1,"1307":2,"1309":1,"1416":2,"1417":2,"1436":1,"1748":1,"1764":3,"1765":6,"1767":2,"1945":1}}],["entitled",{"3":{"0":1,"1247":1,"1309":2,"1323":1,"1359":7,"1396":3,"1759":1,"1764":1,"1945":1}}],["entitieswithtenantid",{"3":{"1436":1}}],["entitieswithpiiproperties",{"3":{"1436":3,"1489":1}}],["entitieswithpiiimplementanonymizable",{"2":{"725":1},"3":{"39":1,"725":1,"1237":1,"1436":1,"1496":1}}],["entities",{"0":{"1361":1,"1386":1,"1764":1},"1":{"1230":1,"1231":1,"1232":1,"1233":1,"1234":1,"1235":1,"1236":1,"1237":1},"3":{"0":1,"4":1,"5":1,"11":1,"12":1,"13":1,"21":1,"39":2,"43":1,"47":1,"132":1,"164":1,"166":1,"329":1,"331":2,"341":2,"360":1,"439":1,"469":1,"470":2,"536":1,"549":1,"642":1,"657":2,"698":1,"715":1,"799":1,"881":1,"988":1,"1018":1,"1049":1,"1082":1,"1085":1,"1117":1,"1132":1,"1140":1,"1150":2,"1168":17,"1169":1,"1170":3,"1171":1,"1202":1,"1203":4,"1207":43,"1212":3,"1229":1,"1230":2,"1231":3,"1232":1,"1236":1,"1237":28,"1244":1,"1247":7,"1249":1,"1259":3,"1269":1,"1270":1,"1277":1,"1278":3,"1279":1,"1282":2,"1286":57,"1300":1,"1309":5,"1310":12,"1311":9,"1317":1,"1323":2,"1324":2,"1340":1,"1342":2,"1343":1,"1347":1,"1350":15,"1353":1,"1359":45,"1360":1,"1361":2,"1363":1,"1369":5,"1374":1,"1380":3,"1382":1,"1395":4,"1396":7,"1402":3,"1431":3,"1436":27,"1437":4,"1441":1,"1446":1,"1467":3,"1489":3,"1496":2,"1526":2,"1539":1,"1540":1,"1541":3,"1546":2,"1577":1,"1627":1,"1629":1,"1630":12,"1631":8,"1632":11,"1633":1,"1635":2,"1636":2,"1637":1,"1638":11,"1639":17,"1640":8,"1650":1,"1651":1,"1652":1,"1686":1,"1728":1,"1729":1,"1772":1,"1810":1,"1812":1,"1840":2,"1844":1,"1849":1,"1853":1,"1856":1,"1863":1,"1864":1,"1865":1,"1867":1,"1939":1,"1987":3,"1988":1,"1991":1,"2061":1,"2104":1,"2227":2,"2230":2}}],["entitypropertysettersarenonpublic",{"3":{"1436":1}}],["entitypath",{"3":{"1247":1}}],["entityquotasapplied",{"3":{"1323":2}}],["entityqueryparameterstests",{"3":{"1199":1,"1207":3}}],["entityqueryparameters",{"2":{"333":1,"1243":1,"1244":1,"1245":1,"1815":1},"3":{"333":1,"1199":12,"1203":1,"1207":2,"1243":4,"1244":1,"1245":1,"1247":20,"1359":1,"1496":2,"1815":1}}],["entityquerypipelinetests",{"3":{"1199":1,"1207":3}}],["entityquerypipelineorderingtests",{"3":{"1199":1,"1207":3,"1436":1,"1438":2}}],["entityquerypipeline",{"2":{"330":2,"333":1,"337":1,"740":1,"1245":1,"1310":1,"1817":1,"1988":1,"1991":1},"3":{"330":9,"331":1,"332":1,"333":2,"337":3,"549":3,"552":2,"740":2,"741":1,"744":1,"1199":9,"1203":1,"1207":2,"1229":2,"1243":42,"1245":1,"1247":19,"1262":1,"1278":2,"1286":8,"1310":17,"1311":5,"1496":2,"1577":1,"1815":1,"1817":1,"1988":2,"1991":1}}],["entityqueryservicetests",{"3":{"1199":1,"1207":7,"1247":1,"1436":1,"1586":1}}],["entityqueryservicecontracttests",{"3":{"1199":1,"1207":5}}],["entityqueryserviceresolutiontests",{"3":{"1199":1,"1207":6,"1247":1,"1438":1}}],["entityqueryserviceprojectiontests",{"3":{"1199":1,"1207":6,"1247":1,"1438":1}}],["entityqueryservice",{"2":{"333":2,"337":1,"543":1,"552":1,"1269":1,"1498":1,"1817":1,"1991":1},"3":{"331":5,"332":1,"333":3,"336":3,"337":1,"543":1,"545":4,"549":2,"552":1,"1199":16,"1203":1,"1207":2,"1229":5,"1244":49,"1247":24,"1269":1,"1270":5,"1286":4,"1309":11,"1310":8,"1311":2,"1354":1,"1359":37,"1396":4,"1436":4,"1438":2,"1496":2,"1498":1,"1586":1,"1815":2,"1817":1,"1988":1,"1991":1}}],["entityname",{"3":{"1286":3,"1311":2,"1324":2,"1395":4}}],["entitytenantid",{"3":{"1286":3}}],["entitytypeof",{"3":{"1436":2}}],["entitytypename",{"3":{"1286":1}}],["entitytypeextensionstests",{"3":{"1199":1,"1207":4,"1237":2}}],["entitytypeextensions",{"2":{"980":1,"1214":1,"1230":1,"1236":1,"1237":1},"3":{"980":3,"1199":1,"1203":1,"1207":2,"1208":1,"1214":1,"1230":1,"1236":2,"1237":9,"1282":1,"1286":2,"1350":6}}],["entitytype",{"3":{"715":3,"980":1,"1208":1,"1237":2,"1270":2,"1286":15,"1323":1,"1436":1}}],["entitytypebuilder",{"2":{"658":1,"660":1,"1036":1},"3":{"658":1,"660":1,"1036":1,"1286":13,"1369":3,"1396":10,"1415":1}}],["entitytypebuilderextensions",{"2":{"655":1},"3":{"655":1,"657":2,"658":1,"1199":1,"1203":1,"1207":2,"1237":4,"1282":2,"1286":12,"1496":1}}],["entitytypeconfigurationbasetests",{"3":{"1199":1,"1207":8,"1286":1}}],["entitytypeconfigurationbase",{"2":{"1856":1},"3":{"1199":4,"1203":1,"1207":2,"1212":1,"1282":2,"1286":15,"1369":2,"1856":1}}],["entitytypeconfigurationsqlite",{"2":{"166":1,"1282":1,"1722":1,"1727":1,"1856":1},"3":{"166":1,"1199":12,"1203":1,"1207":2,"1282":2,"1286":6,"1722":1,"1727":1,"1856":1}}],["entitytypeconfigurationsqlserver",{"2":{"166":1,"470":1,"1212":1,"1282":1,"1361":1,"1412":1,"1651":1,"1849":1,"1856":1,"1857":1},"3":{"166":1,"470":1,"1199":39,"1203":1,"1207":2,"1212":1,"1282":2,"1286":12,"1323":1,"1359":1,"1361":2,"1369":25,"1396":12,"1412":1,"1415":2,"1651":1,"1849":1,"1856":1,"1857":1}}],["entitytypeconfigurationcosmos",{"2":{"166":1,"1282":1,"1856":1,"1857":1},"3":{"166":1,"1199":1,"1203":1,"1207":2,"1282":2,"1286":10,"1856":1,"1857":1}}],["entitytypeconfigurationtests",{"2":{"164":1},"3":{"164":1,"1199":1,"1207":5,"1286":2}}],["entitytypeconfiguration",{"2":{"1176":1,"1178":1,"1280":1,"1286":1,"1361":1,"1500":1,"1856":1,"1862":1},"3":{"135":1,"164":2,"166":1,"171":1,"231":1,"889":1,"1004":2,"1007":1,"1034":1,"1175":2,"1176":1,"1178":1,"1199":6,"1203":14,"1207":28,"1212":1,"1237":2,"1280":1,"1282":7,"1286":81,"1300":3,"1304":1,"1309":2,"1323":1,"1361":2,"1369":3,"1436":2,"1496":1,"1500":2,"1577":3,"1856":1,"1862":1}}],["entitytypeconfigurationpostgresql",{"2":{"166":1,"1034":1,"1036":1,"1212":1,"1282":1,"1856":1},"3":{"0":1,"166":1,"1034":3,"1036":1,"1199":4,"1203":1,"1207":2,"1212":1,"1282":2,"1286":5,"1496":1,"1856":1}}],["entityfilter",{"3":{"1286":2}}],["entityframeworkqueryableextensions",{"3":{"1286":2}}],["entityframeworkcore",{"2":{"401":1,"633":1,"1034":1,"1035":1,"1036":1,"1213":1,"1311":1,"1369":2,"1436":2,"1685":1,"1686":1,"1722":1,"1727":1,"1728":1,"1815":1,"1865":1,"2043":1,"2105":1},"3":{"0":1,"401":1,"633":1,"1034":1,"1035":1,"1036":1,"1213":1,"1286":15,"1310":2,"1311":2,"1323":1,"1339":1,"1369":20,"1436":9,"1489":2,"1685":1,"1686":2,"1722":1,"1727":1,"1728":1,"1815":1,"1865":2,"2043":1,"2105":1}}],["entityfullname",{"3":{"1286":3}}],["entityentry",{"3":{"1259":2,"1286":7}}],["entityexportauthorizationtests",{"3":{"1199":1,"1207":2,"1380":3,"1437":1,"1438":2,"1487":1}}],["entitymodel",{"2":{"1436":1},"3":{"1207":8,"1436":9,"1577":2,"1582":2}}],["entityhandlerbasetests",{"3":{"1207":18}}],["entitywithoutgeneratedid",{"3":{"1199":2,"1207":1}}],["entitywithgeneratedid",{"3":{"1199":2,"1207":1}}],["entitywithnavigation",{"3":{"1199":2,"1207":1}}],["entitybuilderbase",{"3":{"1199":9,"1207":2,"1428":1,"1429":2,"1436":8,"1488":2,"1671":1}}],["entitysettypenames",{"3":{"1436":1}}],["entityservicebasecachingtests",{"3":{"1199":1,"1207":5,"1324":1}}],["entityservicebasetests",{"2":{"883":1},"3":{"883":1,"1199":1,"1207":5,"1324":1}}],["entityservicebaseidempotencyretrytests",{"3":{"881":1,"1199":1,"1207":5,"1324":1,"1438":2}}],["entityservicebase",{"2":{"258":1,"259":1,"341":1,"833":1,"879":1,"881":1,"884":1,"1227":1,"1382":1,"1669":1,"2074":1,"2080":1},"3":{"0":2,"243":4,"245":1,"258":3,"259":2,"261":2,"341":2,"345":1,"827":2,"833":1,"879":1,"881":10,"884":2,"1199":13,"1203":1,"1207":2,"1212":1,"1227":2,"1229":1,"1300":7,"1311":4,"1324":43,"1350":1,"1380":1,"1382":1,"1395":46,"1396":1,"1438":1,"1526":1,"1577":1,"1591":1,"1653":1,"1668":1,"1669":1,"2074":2,"2080":1}}],["entitystate",{"2":{"1082":1},"3":{"1082":1,"1259":1,"1286":1}}],["entityid",{"3":{"782":1,"1249":1,"1259":2,"1265":1,"1270":5,"1350":5,"1359":24,"1399":1,"1402":4,"1415":2,"1631":1,"1638":1,"1640":1}}],["entitykey",{"3":{"715":3,"1270":2,"1286":7,"1323":1}}],["entitydatasourceregistrytests",{"3":{"1199":1,"1207":14,"1286":10}}],["entitydatasourceregistry",{"2":{"46":1,"166":1,"171":1,"1033":1,"1279":1,"1284":1,"1321":1,"1361":1,"1790":1,"1849":1,"1853":1,"1857":1},"3":{"46":1,"166":2,"171":2,"1004":1,"1033":1,"1199":9,"1203":1,"1207":3,"1212":1,"1279":3,"1284":1,"1286":64,"1300":2,"1321":1,"1323":4,"1326":1,"1339":1,"1361":1,"1438":1,"1790":1,"1849":1,"1853":1,"1857":1}}],["entitycollection",{"3":{"1309":1,"1311":2,"1359":6,"1396":2,"1415":1}}],["entityconventiontests",{"3":{"1168":2,"1199":2,"1207":4,"1436":10,"1489":1,"1526":1,"1535":1,"1577":1,"1582":1}}],["entityconventiontestsbase",{"2":{"1168":1},"3":{"0":1,"1168":4,"1199":3,"1207":2,"1212":1,"1436":8,"1489":1,"1526":1,"1582":1,"1654":1}}],["entityconfigurationinterface",{"3":{"1286":2}}],["entityconfigurationoptionstests",{"3":{"1199":1,"1207":2}}],["entityconfigurationoptions",{"3":{"1199":7,"1203":1,"1207":2,"1282":2,"1286":8}}],["entityconfiguration",{"3":{"470":1,"536":1,"657":3,"658":1,"690":3,"693":2,"889":1,"1004":2,"1026":1,"1082":2,"1116":1,"1203":30,"1207":60,"1212":1,"1237":3,"1286":16,"1350":9,"1359":13,"1361":2,"1369":44,"1396":31,"1398":2,"1401":1,"1402":1,"1412":1,"1415":3,"1436":1,"1685":1,"1686":1,"1854":1,"1856":1}}],["entitycontrollerbasetests",{"3":{"1199":1,"1207":5,"1311":1}}],["entitycontrollerbasereadspecificationtests",{"2":{"1438":1},"3":{"1199":1,"1207":9,"1311":2,"1438":2}}],["entitycontrollerbaseexporttests",{"3":{"1199":1,"1207":12,"1311":2,"1438":2}}],["entitycontrollerbaseexportcolumntests",{"3":{"1199":1,"1207":1}}],["entitycontrollerbaseetagtests",{"3":{"1199":1,"1207":8,"1311":1,"1438":2}}],["entitycontrollerbase",{"2":{"325":1,"337":1,"341":1,"345":1,"739":1,"744":1,"1049":1,"1245":1,"1702":1,"1730":1,"1874":1,"1988":1,"1991":1,"1995":1},"3":{"0":2,"318":1,"325":1,"330":15,"331":1,"332":1,"334":1,"337":2,"341":2,"345":1,"453":1,"455":1,"674":2,"739":1,"740":3,"741":10,"743":2,"744":2,"1049":2,"1055":1,"1199":31,"1203":1,"1207":2,"1212":2,"1229":5,"1245":7,"1247":1,"1300":4,"1311":44,"1323":3,"1359":8,"1371":1,"1372":4,"1380":40,"1436":1,"1438":1,"1496":3,"1575":1,"1577":3,"1582":1,"1586":1,"1651":1,"1666":1,"1702":1,"1730":1,"1874":1,"1988":1,"1991":1,"1995":6}}],["entitycsvexportertests",{"3":{"1199":1,"1207":3,"1311":2,"1438":1}}],["entitycsvexporter",{"2":{"744":1},"3":{"741":13,"743":3,"744":4,"1199":3,"1203":1,"1207":2,"1229":1,"1311":24,"1496":1}}],["entitychangedeventtests",{"3":{"782":1,"1199":1,"1207":4}}],["entitychangedevent",{"2":{"780":1,"784":1,"1249":1,"1340":1,"1345":1,"1665":1},"3":{"0":1,"780":1,"782":6,"784":1,"964":1,"1199":12,"1203":1,"1207":2,"1212":1,"1237":5,"1249":3,"1259":10,"1340":1,"1345":1,"1350":31,"1651":1,"1665":1,"1769":1}}],["entity",{"0":{"1231":1,"1243":1,"1279":1,"1282":1,"1362":1,"1857":1},"1":{"327":1,"328":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"779":1,"780":1,"781":1,"782":1,"783":1,"784":1,"785":1,"786":1,"878":1,"879":1,"880":1,"881":1,"882":1,"883":1,"884":1,"885":1,"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":1,"1238":1,"1239":1,"1240":1,"1241":1,"1242":1,"1243":1,"1244":1,"1245":1,"1246":1,"1247":1,"1854":1,"1855":1,"1856":1,"1857":1,"1858":1,"1859":1,"1860":1,"1861":1,"1862":1,"1986":1,"1987":1,"1988":1,"1989":1,"1990":1,"1991":1},"2":{"697":1,"715":1,"781":1,"923":1,"1048":1,"1232":1,"1273":1,"1867":1,"1955":1,"2163":1},"3":{"0":26,"3":1,"5":2,"7":1,"11":1,"12":1,"39":4,"41":2,"42":1,"81":2,"108":1,"109":1,"117":1,"122":1,"128":1,"145":1,"150":1,"164":1,"165":1,"166":6,"167":1,"168":2,"170":1,"193":1,"265":5,"268":1,"321":1,"327":1,"328":1,"329":5,"330":3,"331":2,"332":3,"333":3,"335":2,"340":1,"341":8,"343":1,"345":1,"346":1,"358":1,"359":2,"361":2,"365":2,"440":1,"455":1,"460":1,"469":4,"470":5,"471":2,"472":1,"473":2,"477":1,"536":1,"544":1,"545":5,"551":1,"642":1,"649":2,"658":1,"697":3,"698":4,"699":1,"700":2,"707":1,"713":1,"714":1,"715":5,"716":2,"717":3,"718":2,"720":1,"725":1,"740":1,"741":1,"745":1,"779":1,"781":4,"782":7,"783":3,"784":3,"798":2,"799":1,"853":1,"878":1,"879":1,"880":2,"881":5,"882":1,"883":1,"889":4,"890":1,"891":4,"899":1,"905":7,"906":1,"919":1,"920":1,"922":2,"923":1,"926":3,"932":1,"935":1,"971":1,"988":1,"1026":1,"1033":1,"1034":4,"1035":2,"1042":1,"1048":2,"1049":1,"1050":2,"1052":1,"1060":1,"1074":1,"1083":1,"1115":1,"1117":1,"1134":1,"1140":1,"1150":4,"1151":1,"1152":3,"1153":1,"1154":1,"1155":2,"1167":4,"1168":4,"1169":1,"1170":2,"1175":1,"1191":1,"1192":3,"1193":1,"1200":1,"1201":1,"1202":4,"1203":4,"1212":24,"1213":1,"1218":1,"1229":3,"1230":3,"1231":8,"1232":6,"1233":1,"1234":2,"1236":3,"1237":76,"1238":5,"1239":3,"1241":4,"1242":5,"1243":8,"1244":5,"1245":2,"1247":79,"1251":1,"1259":13,"1260":1,"1265":2,"1269":4,"1270":40,"1271":3,"1272":2,"1273":3,"1274":2,"1276":3,"1277":3,"1278":1,"1279":5,"1280":2,"1281":6,"1282":5,"1283":1,"1284":1,"1286":271,"1291":1,"1300":14,"1309":19,"1310":35,"1311":45,"1316":2,"1317":1,"1319":1,"1321":5,"1323":30,"1324":41,"1327":1,"1339":4,"1340":1,"1342":1,"1347":2,"1349":2,"1350":109,"1354":3,"1355":1,"1356":1,"1358":6,"1359":321,"1360":1,"1361":5,"1362":3,"1363":3,"1369":44,"1371":2,"1374":1,"1380":18,"1381":1,"1382":1,"1383":1,"1384":1,"1387":2,"1391":1,"1395":62,"1396":59,"1401":2,"1402":22,"1403":1,"1409":1,"1415":20,"1429":2,"1431":1,"1436":95,"1437":1,"1438":6,"1440":1,"1455":3,"1467":3,"1487":2,"1488":2,"1489":5,"1496":6,"1497":1,"1500":1,"1506":1,"1510":1,"1526":3,"1535":1,"1577":9,"1591":2,"1625":1,"1627":2,"1630":8,"1631":15,"1632":5,"1633":5,"1634":8,"1635":3,"1637":4,"1638":10,"1639":30,"1640":11,"1641":15,"1649":2,"1650":1,"1651":3,"1652":1,"1653":1,"1654":1,"1660":3,"1662":4,"1664":3,"1668":1,"1671":1,"1684":1,"1686":4,"1700":1,"1704":1,"1720":2,"1723":1,"1724":1,"1727":6,"1728":2,"1729":1,"1734":1,"1747":2,"1764":1,"1765":2,"1767":1,"1769":1,"1774":2,"1775":1,"1779":1,"1783":1,"1790":2,"1803":1,"1808":1,"1810":6,"1811":2,"1815":7,"1816":1,"1817":4,"1824":1,"1832":1,"1833":1,"1839":3,"1847":1,"1849":12,"1850":1,"1851":5,"1853":2,"1854":8,"1855":3,"1856":6,"1857":1,"1858":3,"1859":1,"1860":3,"1861":4,"1862":5,"1865":6,"1866":1,"1867":3,"1868":2,"1869":1,"1871":4,"1872":1,"1877":2,"1883":1,"1903":1,"1908":1,"1948":1,"1951":1,"1953":6,"1954":4,"1955":5,"1956":1,"1957":1,"1958":1,"1959":2,"1985":2,"1986":4,"1987":2,"1988":4,"1990":5,"1991":6,"2039":1,"2052":1,"2053":2,"2059":1,"2063":3,"2064":1,"2068":1,"2090":1,"2099":1,"2104":1,"2110":1,"2126":1,"2142":2,"2145":1,"2163":1,"2164":1,"2186":1,"2207":1,"2208":1,"2220":1,"2230":5,"2232":12}}],["endian",{"3":{"1479":1}}],["endipaddress",{"3":{"1467":1}}],["endings",{"3":{"1091":1,"1300":1,"1324":1,"1426":1,"1427":1,"1436":1,"1438":1,"2176":1,"2180":1}}],["ending",{"3":{"0":4,"53":1,"905":2,"1168":1,"1300":3,"1311":1,"1323":1,"1324":1,"1333":1,"1359":3,"1369":1,"1425":1,"1436":6,"1438":1,"1631":1,"1989":1,"2010":1,"2157":1}}],["endless",{"3":{"1395":1}}],["endlocal",{"3":{"1350":1}}],["endexclusiveutc",{"3":{"1350":1}}],["endedit",{"3":{"1324":2,"1384":1,"1395":22}}],["endedly",{"3":{"0":1,"468":1}}],["ended",{"3":{"0":1,"499":1,"797":1,"1012":1,"1049":1,"1075":1,"1212":1,"1247":1,"1300":1,"1311":1,"1324":2,"1348":1,"1350":2,"1393":2,"1395":4,"1396":1,"1402":1,"1417":3,"1492":1,"1750":1,"2029":1,"2083":1}}],["endutc",{"3":{"1350":2,"1395":1,"1396":1}}],["enddateselector",{"3":{"1359":1}}],["enddate",{"2":{"1630":1},"3":{"1348":1,"1350":8,"1353":1,"1359":13,"1369":1,"1375":1,"1395":7,"1396":2,"1630":3,"1631":5,"1635":2,"1640":1}}],["endtimeselector",{"3":{"1359":2}}],["endtime",{"3":{"1342":1,"1350":3,"1359":11,"1369":2,"1395":3}}],["endcaptureexclusion",{"2":{"1274":1},"3":{"1274":1,"1286":2}}],["endobject",{"3":{"1229":2}}],["endsatafterstartsatkey",{"3":{"1395":5}}],["endsattime",{"3":{"1395":1}}],["endsatdate",{"3":{"1395":1}}],["endsatlocal",{"3":{"1350":1,"1396":1}}],["endsat",{"3":{"1350":5,"1359":14,"1362":1,"1369":5,"1395":9,"1396":3,"1526":1,"1630":2,"1631":9,"1635":2,"1639":1,"1640":2}}],["endsatutc",{"3":{"1300":2,"1350":1}}],["endswith",{"2":{"1006":1},"3":{"1006":1,"1247":1,"1359":1}}],["ends",{"3":{"0":2,"10":2,"109":1,"110":1,"113":1,"117":1,"150":1,"166":1,"295":1,"341":2,"408":1,"413":1,"500":1,"538":1,"555":1,"675":1,"744":1,"757":1,"908":1,"1018":1,"1027":1,"1117":1,"1126":1,"1234":1,"1237":3,"1241":1,"1243":1,"1246":2,"1247":2,"1259":1,"1262":2,"1270":3,"1271":2,"1281":2,"1286":3,"1300":14,"1301":1,"1309":2,"1310":8,"1311":8,"1312":7,"1316":1,"1323":4,"1324":17,"1327":1,"1339":4,"1350":4,"1359":16,"1369":4,"1373":1,"1375":1,"1380":6,"1395":5,"1396":8,"1402":7,"1415":3,"1416":1,"1417":11,"1423":1,"1427":4,"1436":17,"1438":3,"1441":1,"1445":1,"1453":1,"1455":1,"1460":1,"1467":2,"1475":2,"1482":2,"1492":1,"1496":1,"1613":1,"1638":1,"1639":1,"1701":1,"1790":1,"1849":1,"1858":1,"1865":3,"1866":1,"1875":1,"1884":1,"1902":1,"1933":1,"1980":1,"1983":1,"1984":1,"1985":1,"1987":1,"1988":1,"2017":1,"2024":1,"2121":1,"2125":1,"2232":1}}],["endpointproperty",{"3":{"1339":1}}],["endpointprefix",{"2":{"203":1},"3":{"0":1,"15":1,"25":1,"198":2,"203":1,"1323":6,"1665":1}}],["endpointreference",{"3":{"1339":5}}],["endpointkey",{"3":{"1339":5}}],["endpointname",{"3":{"1328":1,"1339":6}}],["endpoint=sb",{"3":{"1339":1}}],["endpoint=",{"3":{"1323":1}}],["endpointmetadata",{"2":{"1300":1},"3":{"1300":1}}],["endpointfeaturestub",{"3":{"1199":2,"1207":1}}],["endpointcultureappliertests",{"3":{"1199":1,"1207":2,"1438":1}}],["endpointcultureapplier",{"3":{"265":1,"1199":4,"1203":1,"1207":2,"1324":17,"1417":1,"1438":1,"1496":1}}],["endpointdatasource",{"3":{"175":1}}],["endpointdefaults",{"3":{"91":1,"98":1,"1312":2}}],["endpointswithoutauthorizationattribute",{"3":{"1436":5}}],["endpoints",{"0":{"99":1,"2007":1},"2":{"189":1},"3":{"0":11,"31":1,"33":1,"92":2,"93":1,"95":2,"102":1,"156":1,"157":1,"162":1,"174":2,"175":1,"176":2,"177":1,"178":1,"182":1,"184":1,"185":2,"186":5,"187":1,"189":4,"190":1,"198":1,"207":1,"208":1,"235":2,"239":1,"242":1,"243":1,"279":1,"280":2,"283":1,"287":2,"318":2,"324":1,"329":2,"332":1,"350":1,"386":1,"387":3,"388":1,"390":1,"393":1,"401":1,"402":1,"406":1,"415":1,"418":3,"420":1,"423":1,"424":1,"438":1,"448":1,"508":1,"509":1,"510":1,"583":1,"585":1,"591":1,"625":1,"690":1,"725":1,"743":1,"749":2,"759":1,"790":1,"791":1,"792":1,"825":1,"826":2,"827":1,"830":1,"840":1,"854":1,"860":1,"881":1,"882":1,"903":1,"905":1,"906":1,"910":1,"917":1,"980":1,"1026":1,"1030":1,"1058":1,"1059":2,"1069":1,"1123":1,"1188":1,"1192":1,"1203":5,"1207":16,"1208":10,"1212":1,"1213":2,"1229":2,"1237":1,"1247":1,"1271":1,"1286":2,"1288":2,"1294":1,"1297":2,"1300":17,"1304":1,"1307":2,"1309":6,"1311":59,"1312":1,"1323":5,"1324":22,"1331":1,"1332":1,"1339":11,"1347":1,"1348":2,"1350":6,"1352":1,"1359":18,"1377":1,"1379":1,"1380":13,"1387":1,"1392":1,"1395":12,"1396":38,"1402":5,"1406":1,"1408":1,"1414":3,"1415":21,"1417":2,"1436":22,"1438":5,"1441":1,"1442":2,"1443":2,"1447":1,"1451":1,"1455":2,"1456":1,"1458":6,"1467":4,"1469":1,"1490":1,"1492":1,"1496":1,"1524":1,"1526":3,"1534":1,"1540":1,"1548":1,"1550":1,"1577":2,"1600":1,"1626":1,"1630":2,"1631":8,"1632":10,"1633":1,"1635":3,"1637":1,"1638":3,"1639":9,"1640":13,"1641":4,"1651":3,"1653":1,"1660":1,"1666":2,"1667":2,"1677":1,"1700":1,"1703":1,"1717":1,"1727":1,"1747":1,"1748":3,"1749":3,"1750":1,"1753":4,"1760":1,"1765":4,"1771":3,"1774":1,"1776":3,"1874":1,"1896":1,"1898":2,"1908":2,"1912":1,"1922":3,"1923":1,"1924":1,"1929":1,"1937":1,"1941":1,"1960":1,"1961":2,"1962":2,"1963":1,"1964":1,"1965":2,"1969":1,"1971":1,"1972":1,"1975":1,"1990":2,"1992":1,"1995":4,"1998":2,"1999":1,"2000":1,"2001":1,"2002":2,"2025":1,"2047":1,"2113":1,"2126":1,"2127":1,"2132":2,"2169":1,"2195":1,"2232":1}}],["endpoint",{"0":{"92":2,"95":1,"96":1},"1":{"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1},"2":{"397":1,"1333":1,"1419":1,"2010":1,"2156":1,"2159":1},"3":{"0":24,"24":1,"25":1,"27":2,"31":2,"33":2,"39":2,"42":1,"53":1,"55":2,"59":2,"62":3,"90":1,"91":9,"92":11,"93":5,"94":3,"95":12,"96":9,"97":3,"98":16,"99":6,"100":6,"101":4,"102":3,"103":3,"104":1,"105":1,"111":1,"126":1,"157":1,"159":2,"160":2,"173":2,"175":4,"177":4,"179":1,"185":2,"187":1,"188":1,"189":4,"193":1,"198":5,"203":2,"207":2,"208":1,"209":2,"216":1,"223":1,"225":2,"229":3,"235":3,"243":3,"245":1,"265":3,"281":1,"317":2,"318":2,"321":1,"324":1,"332":2,"333":1,"335":1,"342":1,"350":1,"378":1,"389":1,"390":2,"391":1,"397":1,"415":3,"418":1,"435":1,"448":1,"453":1,"459":1,"507":1,"510":1,"517":2,"520":1,"535":1,"549":1,"599":1,"640":1,"649":2,"651":1,"690":1,"709":1,"717":1,"724":1,"725":4,"726":2,"727":2,"728":1,"732":1,"735":1,"738":1,"739":2,"740":2,"741":2,"742":1,"743":2,"749":3,"751":2,"773":1,"775":1,"789":6,"790":17,"791":4,"792":7,"793":4,"794":3,"795":1,"800":1,"826":2,"827":1,"832":1,"837":1,"838":1,"853":2,"869":1,"881":4,"883":1,"907":1,"914":1,"924":1,"965":1,"990":1,"1016":1,"1018":3,"1019":2,"1020":1,"1021":2,"1051":1,"1059":2,"1060":1,"1066":1,"1067":3,"1068":2,"1069":2,"1091":3,"1099":1,"1116":1,"1124":1,"1184":1,"1185":1,"1188":1,"1192":1,"1212":4,"1218":1,"1225":1,"1229":4,"1237":1,"1241":1,"1247":4,"1259":3,"1263":2,"1264":1,"1269":1,"1270":9,"1271":2,"1278":1,"1286":10,"1288":3,"1297":5,"1298":2,"1300":70,"1301":3,"1302":1,"1304":1,"1307":3,"1309":22,"1311":74,"1312":6,"1320":2,"1322":1,"1323":27,"1324":138,"1326":4,"1328":10,"1331":2,"1332":2,"1333":1,"1334":1,"1337":3,"1339":91,"1347":3,"1350":17,"1353":1,"1359":91,"1366":1,"1369":2,"1372":1,"1373":1,"1375":1,"1379":4,"1380":21,"1382":1,"1386":1,"1387":1,"1388":1,"1389":3,"1390":2,"1395":62,"1396":103,"1400":3,"1402":26,"1406":1,"1408":1,"1409":2,"1410":1,"1413":1,"1415":59,"1416":6,"1417":12,"1419":4,"1420":2,"1427":6,"1430":3,"1434":1,"1436":72,"1437":1,"1438":19,"1440":1,"1441":12,"1442":2,"1443":4,"1444":2,"1447":3,"1449":3,"1455":2,"1456":2,"1458":1,"1460":1,"1461":1,"1467":13,"1476":1,"1477":1,"1487":3,"1488":1,"1489":2,"1496":4,"1524":1,"1526":4,"1534":4,"1546":1,"1577":1,"1582":2,"1591":1,"1612":1,"1631":3,"1632":7,"1635":1,"1638":1,"1639":7,"1640":10,"1641":17,"1653":3,"1656":2,"1664":1,"1666":5,"1670":4,"1671":2,"1673":1,"1686":1,"1698":4,"1702":1,"1703":2,"1707":1,"1720":1,"1727":1,"1747":4,"1748":5,"1749":4,"1755":2,"1758":1,"1760":1,"1765":1,"1771":1,"1775":1,"1776":3,"1805":1,"1815":2,"1823":1,"1825":2,"1876":1,"1877":1,"1896":2,"1898":3,"1909":1,"1910":1,"1912":1,"1921":1,"1922":1,"1923":2,"1925":3,"1928":2,"1930":2,"1934":1,"1946":3,"1950":1,"1960":3,"1961":3,"1963":1,"1964":1,"1965":3,"1968":1,"1969":1,"1972":2,"1978":1,"1987":1,"1990":2,"1993":2,"1994":1,"1995":1,"1998":1,"2000":4,"2001":4,"2002":2,"2005":1,"2008":1,"2009":2,"2010":1,"2025":12,"2036":1,"2056":1,"2066":2,"2068":1,"2074":1,"2126":1,"2132":4,"2133":2,"2134":1,"2135":1,"2150":1,"2152":1,"2156":1,"2159":1,"2160":1,"2161":1,"2166":11,"2167":1,"2168":2,"2169":1,"2190":1,"2199":1,"2200":1,"2201":1,"2203":2,"2232":4,"2239":1}}],["end",{"0":{"1245":2,"1304":2,"1323":2,"1350":2,"1415":2,"1433":2,"1514":2,"1560":1,"1563":1,"1565":1,"1651":2,"1754":2,"1933":2,"2210":1},"3":{"0":10,"15":1,"30":1,"59":1,"62":2,"66":2,"76":1,"92":2,"96":1,"107":2,"109":2,"115":4,"130":6,"132":1,"150":1,"155":1,"164":3,"173":1,"179":1,"180":1,"193":3,"241":4,"272":1,"298":2,"386":1,"395":6,"398":2,"402":1,"434":2,"468":4,"501":1,"516":1,"543":3,"574":1,"625":4,"626":1,"696":1,"706":1,"795":1,"797":3,"812":1,"827":1,"844":1,"846":2,"857":2,"861":1,"862":1,"867":2,"881":2,"883":2,"905":1,"920":1,"946":2,"952":2,"972":1,"1025":1,"1026":1,"1048":1,"1050":2,"1067":2,"1073":1,"1075":2,"1081":2,"1185":1,"1192":4,"1202":4,"1203":4,"1212":6,"1216":4,"1220":2,"1225":2,"1229":2,"1233":2,"1234":2,"1237":13,"1247":1,"1256":2,"1259":4,"1270":1,"1271":4,"1274":2,"1275":1,"1281":1,"1286":14,"1290":3,"1297":1,"1300":17,"1309":3,"1310":3,"1311":5,"1312":4,"1323":7,"1324":83,"1326":2,"1333":1,"1336":1,"1339":28,"1344":1,"1348":1,"1350":21,"1352":2,"1358":1,"1359":46,"1362":1,"1369":3,"1375":2,"1376":2,"1380":6,"1383":1,"1385":1,"1390":1,"1391":1,"1393":1,"1395":82,"1396":26,"1398":2,"1402":18,"1403":2,"1413":1,"1415":10,"1416":4,"1417":40,"1427":7,"1428":5,"1431":2,"1432":1,"1433":1,"1436":85,"1437":8,"1438":16,"1439":1,"1441":2,"1442":1,"1443":2,"1452":3,"1455":4,"1456":2,"1461":1,"1462":1,"1463":2,"1465":2,"1467":15,"1475":1,"1481":2,"1486":1,"1488":1,"1489":2,"1491":1,"1492":2,"1493":1,"1496":13,"1499":3,"1525":1,"1526":5,"1530":3,"1531":3,"1532":1,"1535":3,"1536":2,"1554":1,"1563":1,"1565":3,"1572":1,"1574":1,"1576":2,"1577":4,"1581":2,"1582":2,"1583":1,"1585":1,"1586":2,"1588":2,"1590":1,"1591":3,"1597":2,"1599":2,"1600":3,"1602":2,"1621":1,"1630":6,"1631":2,"1632":1,"1635":2,"1647":3,"1651":2,"1653":4,"1654":2,"1661":2,"1662":2,"1669":2,"1674":2,"1677":1,"1681":2,"1685":1,"1689":1,"1702":2,"1720":2,"1722":2,"1757":1,"1764":1,"1767":2,"1768":1,"1779":1,"1784":1,"1796":4,"1805":2,"1815":1,"1818":1,"1860":2,"1875":2,"1884":2,"1909":1,"1910":1,"1923":1,"1936":2,"1941":2,"1947":2,"1981":1,"1982":1,"2004":1,"2009":2,"2024":1,"2025":2,"2050":2,"2051":2,"2054":2,"2057":1,"2059":1,"2063":2,"2069":1,"2070":2,"2072":2,"2078":1,"2079":1,"2080":2,"2081":1,"2086":2,"2127":2,"2130":1,"2147":1,"2155":1,"2156":2,"2175":1,"2190":1,"2199":1,"2214":2,"2220":3,"2221":2,"2226":2,"2232":1,"2234":2}}],["exotic",{"3":{"1259":1,"1906":1,"1952":1,"2125":1}}],["exhibiting",{"3":{"1395":1}}],["exhibits",{"3":{"1395":1}}],["exhibitors",{"3":{"1359":1,"1364":1,"1369":1,"1380":1,"1438":1,"1629":1,"1631":1}}],["exhibitor",{"3":{"1350":1,"1359":3,"1369":1,"1395":3,"1438":1,"1631":2}}],["exhibit",{"3":{"725":1}}],["exhausting",{"3":{"1268":1,"1339":1,"2156":1}}],["exhaustively",{"3":{"1344":1,"1405":1}}],["exhaustiveness",{"3":{"257":1,"1438":1}}],["exhaustive",{"3":{"254":1,"260":1,"626":1,"1324":2,"1359":1,"1395":1,"1396":2,"1436":1,"1498":2}}],["exhaustion",{"3":{"0":1,"20":2,"1256":1,"1359":2,"1395":2,"1436":1}}],["exhaust",{"3":{"174":1,"1323":2,"1324":3,"1339":1}}],["exhausts",{"3":{"24":1,"818":1,"1237":1,"1255":1,"1256":1,"1258":1,"1259":3,"1267":1,"1317":1,"1323":2,"1332":1,"1436":2,"1438":1,"1442":1,"1447":1,"1589":1,"1591":1,"1596":1,"1917":1}}],["exhausted",{"3":{"0":1,"20":1,"395":1,"397":1,"819":1,"820":1,"1212":1,"1256":1,"1259":8,"1286":3,"1309":1,"1318":1,"1323":4,"1324":3,"1350":1,"1359":2,"1389":1,"1395":3,"1417":1,"1427":1,"1436":1,"1442":1,"1467":2,"1577":1,"1639":1,"1665":1,"1843":1,"1845":1,"2156":3}}],["exfiltrate",{"3":{"1300":1,"1966":1}}],["exfiltrated",{"3":{"530":1}}],["exfiltrating",{"3":{"1300":1}}],["exfiltration",{"3":{"206":1,"208":1,"219":1,"1324":1,"2150":1}}],["ex",{"3":{"265":1,"819":1,"1247":3,"1259":7,"1270":4,"1300":1,"1301":1,"1309":2,"1311":1,"1312":4,"1323":2,"1324":5,"1339":1,"1359":4,"1366":1,"1380":6,"1395":1,"1396":2,"1415":2,"1526":2,"1591":1,"1927":1,"2032":1}}],["examples",{"0":{"1491":1},"3":{"493":1,"495":2,"1270":1,"1286":1,"1309":1,"1310":1,"1324":1,"1359":1,"1436":1,"1485":2,"1491":1,"1735":1,"2109":1}}],["example",{"0":{"1799":1,"2189":1},"3":{"31":1,"53":2,"72":1,"82":1,"111":1,"119":1,"128":2,"165":1,"168":1,"185":1,"188":1,"268":2,"283":1,"318":1,"359":2,"363":1,"364":2,"370":1,"380":1,"401":1,"413":1,"415":1,"416":1,"420":1,"427":1,"448":1,"459":1,"474":1,"486":1,"490":1,"491":1,"492":1,"493":1,"543":1,"545":4,"550":1,"556":1,"566":1,"599":1,"620":1,"733":2,"780":1,"782":1,"799":1,"801":1,"837":1,"841":2,"861":1,"873":1,"876":1,"881":2,"963":1,"980":1,"1103":1,"1133":1,"1168":2,"1175":1,"1177":1,"1212":1,"1219":1,"1229":7,"1233":1,"1237":10,"1243":1,"1247":7,"1249":1,"1259":9,"1262":1,"1265":1,"1268":1,"1270":10,"1271":9,"1286":40,"1288":1,"1300":17,"1301":4,"1302":1,"1309":3,"1310":13,"1311":21,"1312":11,"1316":1,"1320":3,"1322":1,"1323":16,"1324":22,"1339":13,"1343":1,"1345":1,"1347":1,"1348":1,"1350":21,"1352":1,"1359":27,"1361":1,"1362":1,"1369":2,"1371":1,"1372":2,"1373":2,"1374":1,"1376":1,"1380":4,"1384":1,"1385":1,"1389":1,"1395":7,"1396":11,"1402":1,"1411":1,"1415":8,"1416":4,"1417":12,"1427":1,"1431":3,"1433":1,"1436":41,"1437":1,"1438":2,"1442":2,"1443":3,"1454":1,"1455":1,"1467":1,"1474":1,"1479":1,"1480":1,"1486":1,"1488":3,"1491":3,"1492":1,"1493":2,"1500":1,"1525":1,"1526":1,"1577":1,"1585":3,"1629":1,"1631":1,"1639":1,"1653":1,"1656":1,"1675":1,"1685":1,"1686":2,"1701":1,"1702":1,"1709":1,"1710":1,"1727":1,"1728":2,"1802":1,"1810":1,"1829":2,"1830":1,"1841":1,"1860":1,"1881":1,"1922":1,"1931":1,"1933":1,"1940":1,"1941":1,"1954":1,"1955":1,"1976":1,"2004":1,"2008":1,"2010":2,"2016":1,"2019":1,"2032":1,"2033":1,"2042":1,"2043":2,"2048":1,"2078":1,"2083":1,"2087":1,"2088":1,"2144":1,"2156":1}}],["exacting",{"3":{"1380":1}}],["exactness",{"3":{"1339":1}}],["exact",{"0":{"1263":1,"2095":1},"3":{"0":3,"1":1,"22":1,"24":1,"98":1,"99":2,"100":1,"102":1,"109":1,"167":1,"283":1,"341":1,"342":1,"371":1,"420":1,"440":1,"459":1,"472":1,"499":1,"530":1,"572":1,"574":1,"626":1,"627":1,"691":1,"707":1,"716":1,"725":1,"740":1,"757":1,"758":1,"765":1,"766":1,"813":1,"827":1,"838":1,"861":1,"863":1,"871":1,"890":1,"905":1,"908":1,"916":1,"980":1,"996":2,"1004":1,"1005":1,"1018":1,"1036":1,"1067":2,"1071":1,"1092":1,"1163":1,"1191":1,"1217":1,"1237":3,"1249":1,"1259":3,"1270":3,"1276":1,"1286":18,"1300":10,"1301":6,"1309":2,"1311":15,"1312":2,"1315":1,"1323":5,"1324":16,"1339":7,"1348":1,"1350":3,"1357":2,"1359":17,"1366":1,"1369":8,"1380":7,"1395":6,"1396":4,"1402":3,"1405":1,"1409":1,"1415":3,"1416":1,"1417":9,"1418":1,"1427":2,"1429":1,"1435":1,"1436":49,"1438":4,"1444":1,"1445":1,"1447":1,"1450":1,"1453":2,"1454":1,"1455":10,"1456":1,"1463":1,"1467":1,"1470":1,"1474":1,"1486":3,"1492":1,"1496":6,"1500":2,"1525":1,"1526":4,"1531":1,"1591":3,"1596":1,"1599":1,"1640":1,"1646":1,"1697":1,"1729":1,"1735":1,"1784":1,"1799":1,"1802":1,"1831":1,"1851":1,"1872":1,"1874":1,"1909":1,"1922":1,"1927":1,"1929":1,"1951":1,"1954":1,"1974":1,"1982":1,"2036":1,"2062":1,"2083":1,"2086":1,"2089":1,"2098":1,"2108":1,"2121":1,"2124":1,"2126":1,"2136":1,"2167":3,"2176":1}}],["exactlyonce",{"3":{"1492":1}}],["exactlyone",{"3":{"1415":1}}],["exactly",{"3":{"0":24,"15":1,"21":1,"23":2,"24":1,"26":2,"38":1,"39":1,"71":2,"93":1,"96":1,"99":1,"109":3,"135":6,"136":1,"139":2,"140":1,"148":2,"159":1,"160":1,"166":2,"170":2,"178":2,"180":1,"186":1,"187":1,"195":3,"197":1,"199":1,"201":1,"202":2,"214":1,"217":1,"218":1,"235":2,"243":1,"253":1,"254":1,"255":1,"257":1,"260":1,"266":1,"292":1,"303":2,"305":1,"310":1,"318":1,"335":2,"342":1,"343":1,"350":2,"351":1,"352":1,"353":1,"359":2,"361":1,"363":1,"369":1,"373":1,"374":1,"380":1,"387":1,"388":1,"390":2,"391":1,"395":1,"400":1,"401":1,"402":1,"407":1,"414":1,"415":1,"420":2,"426":1,"433":1,"443":1,"448":1,"458":2,"459":1,"464":1,"483":1,"490":2,"491":2,"492":1,"493":2,"494":1,"499":1,"507":1,"527":1,"536":2,"539":1,"545":1,"549":2,"551":1,"556":1,"563":1,"564":1,"571":1,"572":1,"574":1,"577":1,"579":1,"583":2,"585":2,"592":2,"593":1,"600":1,"608":1,"609":2,"610":1,"618":2,"619":1,"625":1,"626":1,"627":1,"633":1,"634":1,"635":1,"639":1,"640":2,"649":1,"651":1,"656":1,"657":1,"658":1,"665":1,"667":1,"674":5,"682":2,"684":1,"690":4,"692":1,"693":1,"698":3,"699":1,"702":1,"707":2,"708":1,"709":1,"714":1,"715":1,"716":1,"725":1,"727":1,"732":1,"733":4,"734":1,"735":2,"736":1,"740":1,"741":2,"742":1,"749":1,"757":3,"758":2,"761":1,"766":2,"768":1,"773":1,"775":1,"782":1,"790":2,"791":1,"799":1,"801":1,"803":1,"813":3,"814":1,"815":1,"819":2,"820":1,"826":1,"827":7,"828":1,"829":3,"832":1,"838":3,"839":1,"840":1,"846":1,"847":1,"849":1,"853":1,"861":1,"862":1,"876":1,"881":2,"882":1,"889":2,"891":1,"897":2,"898":1,"899":1,"903":1,"904":1,"905":6,"907":1,"913":2,"920":1,"923":2,"924":2,"926":3,"931":1,"932":1,"938":1,"939":1,"940":2,"944":1,"946":2,"948":2,"955":1,"956":1,"962":1,"966":1,"968":1,"971":1,"972":1,"980":1,"988":1,"990":1,"995":1,"996":1,"1005":1,"1006":1,"1013":1,"1018":4,"1020":1,"1027":2,"1034":1,"1036":1,"1041":1,"1042":2,"1043":1,"1049":1,"1050":2,"1051":2,"1053":1,"1059":1,"1061":1,"1067":1,"1069":1,"1076":1,"1082":1,"1083":1,"1084":2,"1085":1,"1090":1,"1091":2,"1092":1,"1093":2,"1107":1,"1108":1,"1116":2,"1118":1,"1124":1,"1132":1,"1133":2,"1135":1,"1140":1,"1161":1,"1175":1,"1178":1,"1184":2,"1191":2,"1200":1,"1212":4,"1220":1,"1223":1,"1228":1,"1229":14,"1230":1,"1231":2,"1232":1,"1233":1,"1234":1,"1235":1,"1237":22,"1239":1,"1241":2,"1243":2,"1244":1,"1247":26,"1250":1,"1251":2,"1253":1,"1255":1,"1259":28,"1260":1,"1262":1,"1263":2,"1264":1,"1265":1,"1266":1,"1267":1,"1269":1,"1270":48,"1271":7,"1274":3,"1275":3,"1276":2,"1277":1,"1278":2,"1279":3,"1280":2,"1281":3,"1283":3,"1284":1,"1286":110,"1289":1,"1290":2,"1292":1,"1294":2,"1295":1,"1297":2,"1300":61,"1301":17,"1307":1,"1309":27,"1310":8,"1311":61,"1312":4,"1315":1,"1316":3,"1317":2,"1318":4,"1320":2,"1322":1,"1323":66,"1324":102,"1325":1,"1328":1,"1330":1,"1331":1,"1332":1,"1334":3,"1335":1,"1336":2,"1337":1,"1339":54,"1342":6,"1345":1,"1347":1,"1348":1,"1349":1,"1350":37,"1352":2,"1353":2,"1354":1,"1355":1,"1357":2,"1358":1,"1359":144,"1362":1,"1368":2,"1369":12,"1371":1,"1372":1,"1373":1,"1374":1,"1378":1,"1380":24,"1384":1,"1389":2,"1391":2,"1395":82,"1396":90,"1399":1,"1400":1,"1402":31,"1405":1,"1407":1,"1408":1,"1409":1,"1410":1,"1411":1,"1412":1,"1415":56,"1416":13,"1417":38,"1420":1,"1421":1,"1423":1,"1424":1,"1426":1,"1427":10,"1428":2,"1430":1,"1433":1,"1435":2,"1436":183,"1438":17,"1441":3,"1442":2,"1443":2,"1447":2,"1449":1,"1453":2,"1454":1,"1455":15,"1456":3,"1459":1,"1462":1,"1463":1,"1466":1,"1467":18,"1472":1,"1473":2,"1474":1,"1476":7,"1480":1,"1482":1,"1483":1,"1484":1,"1486":3,"1488":3,"1489":2,"1490":2,"1491":2,"1492":5,"1496":6,"1498":1,"1505":1,"1526":5,"1531":1,"1577":1,"1591":1,"1631":3,"1632":1,"1635":2,"1639":1,"1641":1,"1651":1,"1652":1,"1656":1,"1664":2,"1668":2,"1683":2,"1684":1,"1685":4,"1686":5,"1689":1,"1693":1,"1697":2,"1719":1,"1728":1,"1749":3,"1764":5,"1765":2,"1767":1,"1783":1,"1789":1,"1790":1,"1796":1,"1799":1,"1800":1,"1801":1,"1805":1,"1810":1,"1814":1,"1815":3,"1816":1,"1821":1,"1822":1,"1825":2,"1829":2,"1832":2,"1839":2,"1840":1,"1842":2,"1843":1,"1847":1,"1849":3,"1852":2,"1856":1,"1864":1,"1869":1,"1871":1,"1873":1,"1874":1,"1876":1,"1881":1,"1888":1,"1891":1,"1892":1,"1900":1,"1902":1,"1904":1,"1908":1,"1909":2,"1918":1,"1919":2,"1920":1,"1922":2,"1923":3,"1927":2,"1929":1,"1931":1,"1933":1,"1934":1,"1936":1,"1937":1,"1940":1,"1942":1,"1944":1,"1946":1,"1947":1,"1948":1,"1953":1,"1958":1,"1960":1,"1961":1,"1964":1,"1965":1,"1968":1,"1970":1,"1971":1,"1974":1,"1975":1,"1976":2,"1977":1,"1978":2,"1979":3,"1980":2,"1981":1,"1982":2,"1983":1,"1993":1,"1996":1,"1998":1,"2000":2,"2001":3,"2002":1,"2003":1,"2008":1,"2010":1,"2012":1,"2024":1,"2027":1,"2029":1,"2032":1,"2036":1,"2042":2,"2043":2,"2044":2,"2047":2,"2048":1,"2057":2,"2061":1,"2064":2,"2066":1,"2070":1,"2074":1,"2075":1,"2076":1,"2081":1,"2085":1,"2088":1,"2092":1,"2098":1,"2101":1,"2105":1,"2107":2,"2109":1,"2111":1,"2114":1,"2119":1,"2125":1,"2129":1,"2131":1,"2134":1,"2136":1,"2138":1,"2140":1,"2141":1,"2142":3,"2143":1,"2144":1,"2148":2,"2149":1,"2150":1,"2151":1,"2157":1,"2158":1,"2165":1,"2166":1,"2167":3,"2171":1,"2174":1,"2176":1,"2178":1,"2179":1,"2185":1,"2186":1,"2190":1,"2192":1,"2195":1,"2199":2,"2203":1,"2230":1}}],["exif",{"3":{"439":1,"440":1,"1115":1,"1285":1,"1286":2,"1323":3,"1415":2,"1631":1,"2124":1,"2125":1,"2126":2,"2128":3}}],["exiting",{"3":{"626":1,"1460":1}}],["exits",{"3":{"0":2,"397":1,"566":2,"591":1,"626":5,"627":1,"757":1,"766":1,"1215":2,"1300":1,"1310":1,"1311":1,"1324":1,"1350":1,"1395":4,"1396":2,"1416":1,"1417":2,"1436":4,"1455":6,"1458":1,"1475":2,"1486":2,"1492":1,"1526":3,"1591":1,"1685":1,"2058":1}}],["exit",{"0":{"150":1},"1":{"1072":1,"1073":1,"1074":1,"1075":1,"1076":1,"1077":1,"1078":1,"1079":1},"3":{"0":4,"145":4,"153":1,"370":2,"373":1,"452":1,"633":1,"757":1,"766":1,"873":2,"876":1,"877":2,"980":1,"1072":1,"1073":1,"1075":2,"1077":2,"1078":1,"1079":2,"1212":1,"1270":2,"1286":2,"1293":1,"1300":2,"1311":1,"1323":1,"1324":4,"1359":1,"1380":1,"1396":3,"1415":1,"1417":9,"1445":1,"1453":2,"1455":3,"1459":1,"1475":1,"1486":1,"1496":1,"1526":3,"1577":1,"1591":1,"1673":1,"1930":1,"2058":1,"2232":1}}],["existent",{"3":{"1359":1,"1415":1,"1496":1}}],["existence",{"3":{"0":1,"230":1,"295":1,"318":5,"435":1,"459":1,"463":1,"468":1,"545":2,"550":1,"583":2,"856":1,"1003":1,"1058":1,"1170":1,"1244":1,"1247":2,"1270":3,"1276":1,"1286":16,"1300":2,"1308":1,"1309":1,"1311":2,"1322":1,"1323":3,"1324":1,"1352":1,"1359":16,"1364":1,"1369":4,"1380":2,"1395":1,"1396":3,"1402":1,"1412":1,"1415":2,"1436":3,"1438":2,"1591":1,"1600":1,"1631":1,"1666":1,"1748":1,"1759":1,"1761":1,"1765":1,"1772":1,"1995":1,"2034":1,"2066":1,"2090":1,"2137":1}}],["existed",{"3":{"22":1,"243":1,"274":1,"459":1,"477":1,"538":1,"539":1,"600":1,"698":1,"708":1,"837":1,"921":1,"945":1,"1017":1,"1018":1,"1020":1,"1066":1,"1090":1,"1118":1,"1160":1,"1183":1,"1247":3,"1249":1,"1250":1,"1253":1,"1259":4,"1270":1,"1273":1,"1286":5,"1300":1,"1301":2,"1311":2,"1318":1,"1320":1,"1323":3,"1324":6,"1330":1,"1350":4,"1355":1,"1359":8,"1365":1,"1369":2,"1395":2,"1396":3,"1402":1,"1408":1,"1415":2,"1417":1,"1427":1,"1436":10,"1465":1,"1467":1,"1496":3,"1631":1,"1641":1,"1727":1,"1748":1,"1765":1,"2048":1,"2061":1,"2167":1,"2168":1,"2186":1}}],["existinguser",{"3":{"1415":4}}],["existingdeletedbookmark",{"3":{"1396":3}}],["existinganswerids",{"3":{"1396":3}}],["existinganswer",{"3":{"1359":1}}],["existingspeaker",{"3":{"1359":1}}],["existingquestion",{"3":{"1359":1}}],["existingfilter",{"3":{"1286":3}}],["existing",{"2":{"1484":1,"1697":1},"3":{"0":21,"20":1,"24":1,"48":1,"52":1,"78":1,"79":1,"81":1,"99":1,"121":3,"126":1,"131":1,"142":1,"160":2,"200":1,"218":1,"241":1,"255":1,"265":1,"266":1,"273":1,"295":1,"309":1,"310":1,"318":1,"319":1,"350":1,"351":2,"352":2,"379":1,"380":1,"381":1,"390":1,"396":1,"401":1,"420":1,"434":1,"438":1,"443":1,"448":1,"449":2,"493":1,"518":1,"528":1,"534":1,"537":1,"545":1,"546":1,"549":2,"563":1,"575":1,"582":1,"587":1,"590":1,"599":2,"635":1,"640":1,"644":1,"648":1,"649":1,"664":1,"665":1,"690":1,"725":1,"733":3,"734":1,"736":1,"741":1,"742":1,"743":1,"756":1,"765":1,"789":1,"790":2,"793":1,"794":1,"799":2,"827":1,"846":1,"852":1,"854":2,"861":1,"889":1,"890":1,"905":1,"914":2,"920":2,"922":1,"923":1,"926":1,"938":1,"945":1,"948":1,"964":1,"1006":1,"1011":1,"1018":2,"1019":1,"1026":1,"1027":1,"1034":2,"1050":1,"1058":2,"1059":3,"1068":1,"1075":1,"1100":1,"1116":2,"1134":1,"1144":2,"1149":1,"1155":1,"1162":1,"1178":1,"1179":1,"1184":1,"1187":1,"1190":2,"1212":2,"1220":1,"1232":1,"1237":2,"1247":8,"1249":1,"1259":6,"1269":1,"1270":11,"1271":2,"1276":1,"1281":2,"1286":18,"1290":1,"1293":2,"1300":11,"1301":2,"1304":1,"1305":1,"1309":13,"1310":1,"1311":7,"1312":1,"1316":1,"1323":4,"1324":14,"1327":1,"1339":9,"1350":4,"1353":1,"1359":36,"1362":1,"1366":1,"1369":4,"1380":2,"1395":4,"1396":26,"1402":3,"1406":2,"1407":1,"1408":1,"1415":10,"1416":2,"1417":6,"1427":1,"1436":16,"1438":1,"1441":3,"1463":1,"1467":7,"1470":1,"1472":2,"1474":1,"1481":2,"1484":1,"1488":1,"1489":1,"1496":13,"1526":1,"1577":3,"1602":1,"1612":1,"1627":1,"1631":4,"1632":7,"1635":5,"1636":1,"1638":1,"1639":13,"1640":3,"1641":4,"1645":1,"1658":1,"1661":3,"1664":1,"1674":1,"1681":1,"1684":1,"1697":1,"1705":1,"1722":1,"1724":1,"1728":2,"1729":1,"1734":1,"1748":1,"1765":1,"1767":1,"1777":1,"1800":1,"1810":1,"1815":1,"1826":1,"1859":1,"1886":1,"1889":1,"1915":1,"1933":1,"1944":1,"1945":2,"1977":1,"1978":2,"1979":2,"1994":1,"2075":1,"2097":2,"2101":1,"2131":1,"2133":1,"2142":1,"2150":1,"2196":1,"2198":2,"2232":2}}],["existsasync",{"2":{"91":1,"295":1,"1364":1,"1777":1},"3":{"91":1,"295":1,"459":1,"545":2,"550":1,"1244":1,"1247":4,"1286":6,"1300":1,"1323":1,"1359":5,"1364":1,"1369":1,"1396":2,"1415":1,"1639":1,"1751":1,"1777":1,"1815":1}}],["exists",{"0":{"813":1,"1718":1},"2":{"1255":1},"3":{"0":6,"19":1,"24":1,"33":1,"45":1,"93":1,"103":1,"122":1,"135":3,"136":1,"143":1,"150":2,"157":1,"160":1,"161":1,"175":1,"179":1,"200":1,"209":1,"225":1,"243":2,"245":1,"254":1,"256":1,"265":3,"268":1,"273":1,"293":1,"301":1,"303":1,"305":1,"309":1,"318":2,"324":1,"325":1,"326":1,"336":1,"341":1,"343":2,"350":1,"361":1,"372":1,"383":1,"388":1,"390":1,"391":1,"398":1,"401":1,"413":2,"415":1,"418":2,"420":1,"423":1,"428":1,"442":1,"443":1,"448":1,"463":1,"477":1,"490":1,"491":1,"492":1,"493":2,"507":1,"517":1,"528":1,"536":1,"539":1,"543":1,"546":1,"548":1,"549":1,"551":1,"556":2,"557":1,"563":1,"572":1,"583":2,"585":1,"591":2,"592":1,"593":1,"599":3,"605":1,"607":1,"608":1,"609":3,"611":2,"618":2,"626":1,"633":2,"640":1,"645":1,"656":1,"657":1,"658":2,"665":3,"674":1,"676":4,"681":1,"689":1,"690":2,"698":2,"703":2,"707":2,"714":1,"716":2,"718":1,"720":1,"724":1,"725":1,"727":1,"736":1,"741":2,"749":1,"753":1,"759":1,"760":1,"762":1,"773":1,"790":1,"792":2,"797":1,"798":1,"804":1,"808":1,"809":2,"810":1,"811":2,"812":2,"818":1,"819":1,"820":2,"821":1,"827":2,"832":1,"834":1,"837":2,"838":1,"840":1,"862":1,"871":1,"882":1,"884":1,"890":1,"891":1,"913":2,"914":1,"916":1,"924":1,"926":2,"932":1,"945":1,"946":1,"947":1,"953":1,"956":1,"963":1,"965":1,"973":1,"974":2,"980":1,"988":1,"996":1,"997":1,"1005":1,"1014":1,"1018":1,"1019":1,"1020":1,"1029":1,"1042":2,"1043":1,"1050":2,"1051":1,"1052":1,"1067":2,"1071":1,"1077":1,"1082":1,"1092":1,"1100":1,"1118":2,"1132":1,"1134":2,"1142":1,"1168":1,"1190":1,"1191":1,"1196":1,"1200":1,"1212":1,"1229":8,"1231":1,"1232":1,"1235":1,"1237":12,"1239":2,"1240":1,"1241":2,"1242":1,"1247":12,"1251":1,"1254":1,"1255":1,"1257":1,"1259":9,"1270":15,"1271":4,"1274":1,"1276":1,"1277":2,"1278":1,"1281":1,"1286":61,"1288":1,"1289":2,"1290":1,"1293":1,"1297":2,"1300":40,"1301":8,"1304":1,"1307":1,"1309":7,"1310":2,"1311":34,"1312":1,"1313":1,"1315":1,"1320":2,"1322":1,"1323":35,"1324":63,"1332":1,"1333":2,"1334":1,"1337":2,"1339":21,"1345":1,"1348":1,"1349":1,"1350":28,"1352":3,"1357":2,"1359":100,"1368":1,"1369":8,"1371":1,"1372":2,"1375":1,"1376":1,"1379":1,"1380":10,"1383":1,"1389":1,"1395":33,"1396":46,"1401":1,"1402":14,"1405":1,"1406":1,"1410":1,"1411":1,"1414":2,"1415":40,"1416":8,"1417":37,"1418":1,"1427":6,"1431":1,"1436":106,"1438":5,"1441":1,"1443":2,"1445":3,"1447":1,"1448":1,"1449":2,"1452":1,"1455":10,"1457":2,"1458":1,"1459":1,"1465":1,"1466":1,"1467":8,"1468":1,"1470":1,"1471":1,"1472":3,"1474":2,"1475":2,"1476":1,"1478":1,"1479":1,"1482":1,"1484":2,"1486":2,"1488":3,"1489":4,"1490":1,"1491":2,"1492":2,"1496":2,"1524":2,"1526":6,"1531":5,"1532":1,"1534":3,"1539":1,"1545":1,"1547":1,"1548":1,"1577":2,"1585":1,"1591":1,"1596":3,"1626":1,"1627":1,"1631":5,"1632":9,"1633":1,"1635":1,"1638":3,"1639":6,"1641":6,"1646":1,"1651":2,"1653":1,"1654":1,"1666":1,"1668":1,"1675":1,"1683":1,"1684":1,"1686":2,"1692":1,"1701":1,"1720":2,"1724":1,"1726":1,"1730":1,"1732":1,"1737":1,"1747":1,"1748":1,"1749":6,"1755":2,"1760":1,"1765":3,"1776":3,"1790":1,"1802":1,"1810":1,"1811":1,"1815":2,"1825":1,"1831":1,"1835":1,"1837":1,"1849":1,"1851":3,"1858":1,"1861":1,"1864":2,"1874":1,"1878":1,"1881":2,"1889":1,"1902":1,"1908":1,"1909":3,"1923":1,"1926":1,"1934":1,"1945":1,"1947":1,"1948":1,"1952":1,"1953":1,"1954":3,"1955":1,"1956":1,"1970":1,"1971":1,"1975":1,"1989":1,"1994":1,"1995":4,"2000":1,"2009":1,"2014":1,"2033":1,"2037":1,"2040":1,"2041":1,"2046":1,"2057":1,"2063":1,"2074":1,"2075":2,"2078":1,"2107":1,"2121":1,"2127":1,"2131":1,"2132":1,"2135":1,"2138":1,"2151":1,"2156":1,"2165":1,"2166":3,"2167":1,"2168":3,"2174":1,"2176":1,"2183":2,"2185":1,"2188":1,"2204":1}}],["exist",{"0":{"1226":1,"1234":1},"3":{"0":11,"11":1,"16":1,"19":1,"61":1,"62":1,"68":1,"95":1,"97":1,"117":1,"122":2,"141":2,"142":1,"160":1,"219":1,"255":1,"341":1,"343":1,"395":1,"412":1,"416":1,"418":1,"422":2,"428":1,"433":1,"443":1,"468":1,"477":1,"518":1,"536":1,"543":1,"549":1,"551":1,"556":1,"560":1,"583":1,"591":1,"592":1,"601":1,"611":1,"619":1,"622":1,"625":1,"629":1,"638":1,"658":1,"666":1,"677":1,"681":1,"691":1,"725":1,"735":1,"780":1,"803":1,"819":1,"827":1,"829":2,"831":1,"846":1,"847":1,"856":1,"861":1,"876":1,"890":1,"899":1,"905":2,"914":1,"916":1,"918":1,"923":1,"924":1,"926":2,"956":1,"989":2,"1021":1,"1034":1,"1066":1,"1092":1,"1114":1,"1117":1,"1125":1,"1153":1,"1167":1,"1191":1,"1218":1,"1223":1,"1229":2,"1237":3,"1241":1,"1247":3,"1251":1,"1259":2,"1262":1,"1263":2,"1270":9,"1271":2,"1286":20,"1289":1,"1297":1,"1300":10,"1301":1,"1308":1,"1309":3,"1311":6,"1312":1,"1315":1,"1320":1,"1323":11,"1324":20,"1326":1,"1328":1,"1332":1,"1339":12,"1348":2,"1349":1,"1350":11,"1353":1,"1359":30,"1364":1,"1368":1,"1369":4,"1371":1,"1373":1,"1380":1,"1395":5,"1396":21,"1402":3,"1404":1,"1409":1,"1415":11,"1416":4,"1417":11,"1433":1,"1436":31,"1438":1,"1453":2,"1454":1,"1455":6,"1456":1,"1459":1,"1465":1,"1467":5,"1470":2,"1471":1,"1473":1,"1474":1,"1476":1,"1477":1,"1489":2,"1492":4,"1496":2,"1507":1,"1526":1,"1545":1,"1550":1,"1553":1,"1557":1,"1567":1,"1571":1,"1577":4,"1596":1,"1597":1,"1626":1,"1631":5,"1632":9,"1634":1,"1635":1,"1638":1,"1639":1,"1640":2,"1649":1,"1653":1,"1669":1,"1700":1,"1701":1,"1728":1,"1749":3,"1755":2,"1765":2,"1767":3,"1776":2,"1801":1,"1803":2,"1804":1,"1810":1,"1812":1,"1816":1,"1821":1,"1824":1,"1825":1,"1840":1,"1843":1,"1856":1,"1867":1,"1876":1,"1879":1,"1881":1,"1894":1,"1928":1,"1941":1,"1961":1,"1971":1,"2001":1,"2033":1,"2037":1,"2040":1,"2047":2,"2056":1,"2080":1,"2097":1,"2098":1,"2114":1,"2116":2,"2122":1,"2159":1,"2164":1,"2169":1,"2179":1,"2180":2,"2181":1,"2182":1}}],["exchanging",{"3":{"351":1,"1311":1,"1324":1,"1436":1,"1577":1}}],["exchangecode",{"3":{"1311":1}}],["exchanged",{"3":{"1300":1,"1324":3,"1416":1,"1582":1,"1972":1}}],["exchangeresponse",{"3":{"1199":2,"1207":1}}],["exchangeoauthcodeasync",{"2":{"420":2,"423":1,"426":1,"428":1},"3":{"420":2,"423":1,"426":1,"428":1,"1324":2,"1436":1}}],["exchangeasync",{"2":{"1535":1,"1975":1,"1976":1},"3":{"350":1,"1300":1,"1311":4,"1535":1,"1975":1,"1976":1}}],["exchanges",{"3":{"0":1,"350":1,"355":1,"419":1,"499":1,"503":1,"528":1,"1184":1,"1298":1,"1300":5,"1324":1,"1454":1,"1455":1,"1585":1,"1727":1}}],["exchange",{"0":{"1975":1},"1":{"347":1,"348":1,"349":1,"350":1,"351":1,"352":1,"353":1,"354":1,"355":1},"2":{"178":1,"818":1,"1334":1,"1843":1},"3":{"0":5,"159":1,"160":1,"161":1,"178":1,"340":1,"341":1,"342":1,"347":1,"350":6,"351":1,"352":1,"418":1,"420":1,"421":1,"422":1,"423":3,"426":3,"428":1,"528":3,"529":1,"530":2,"531":1,"640":1,"733":1,"735":1,"818":1,"872":1,"923":1,"1184":1,"1259":1,"1300":8,"1301":8,"1311":10,"1323":6,"1324":13,"1334":1,"1339":2,"1359":1,"1395":1,"1406":1,"1415":2,"1417":4,"1436":7,"1438":2,"1454":3,"1467":1,"1535":1,"1585":1,"1667":1,"1776":1,"1843":1,"1898":2,"1911":1,"1974":1,"1975":3,"1977":2,"1978":2,"1979":3,"2013":1,"2078":1,"2079":1,"2232":1}}],["excuse",{"3":{"1286":1}}],["excuses",{"3":{"318":1,"565":1,"1300":1,"1436":1,"1994":1}}],["excused",{"3":{"135":1,"139":1,"1436":2}}],["excluding",{"3":{"152":1,"619":1,"690":1,"799":1,"940":1,"1196":1,"1280":1,"1282":1,"1286":3,"1311":1,"1323":1,"1332":2,"1339":1,"1350":2,"1359":4,"1402":1,"1415":1,"1436":7,"1455":1,"1467":4,"1631":1,"1748":1,"1801":1,"2067":1}}],["excludereservedids",{"3":{"1359":1}}],["excludeitemid",{"3":{"1350":1}}],["excludefromdescription",{"3":{"1300":1,"1311":1,"1324":3,"1339":1}}],["excludessoftdeleteditems",{"2":{"1686":1},"3":{"1686":1}}],["excludesframeworkevents",{"3":{"1436":1}}],["excludesessionid",{"3":{"1359":7}}],["excludescoredsinceasync",{"3":{"1359":3}}],["excludesdomainevents",{"3":{"1286":1}}],["excludes",{"3":{"233":1,"607":1,"609":1,"819":1,"889":2,"1212":1,"1259":1,"1282":1,"1286":6,"1323":3,"1324":1,"1332":1,"1339":2,"1350":2,"1359":6,"1372":1,"1380":2,"1396":2,"1401":1,"1404":1,"1415":1,"1433":1,"1436":7,"1455":2,"1467":1,"1486":1,"1492":1,"1534":1,"1666":1,"2007":1,"2061":1}}],["exclude",{"3":{"0":1,"38":1,"141":1,"403":1,"609":1,"612":1,"1082":1,"1212":1,"1247":1,"1286":1,"1350":1,"1352":1,"1359":2,"1402":1,"1436":1,"1631":1,"1635":1,"1639":2,"1801":1,"2061":1,"2158":3,"2232":1}}],["excludedpathfragments",{"3":{"1436":3}}],["excludedpathprefixes",{"3":{"698":1,"1286":1,"1320":1}}],["excluded",{"0":{"1209":1},"3":{"0":5,"24":1,"135":2,"149":1,"474":1,"482":1,"490":1,"536":1,"573":1,"698":1,"700":1,"734":1,"799":1,"803":1,"805":1,"867":1,"871":1,"980":1,"982":1,"988":1,"996":1,"1026":1,"1074":1,"1075":1,"1078":1,"1184":1,"1196":1,"1204":1,"1209":1,"1212":2,"1215":1,"1227":1,"1231":1,"1259":4,"1270":2,"1277":1,"1286":6,"1300":2,"1311":2,"1323":2,"1324":6,"1339":3,"1350":4,"1359":13,"1369":1,"1395":2,"1396":5,"1401":1,"1402":7,"1410":1,"1415":8,"1436":13,"1438":1,"1459":1,"1467":1,"1474":2,"1486":1,"1487":1,"1494":1,"1496":3,"1497":1,"1526":1,"1527":1,"1553":1,"1577":1,"1578":1,"1582":1,"1591":1,"1592":1,"1611":1,"1617":1,"1630":1,"1631":5,"1632":1,"1633":2,"1635":5,"1637":1,"1638":2,"1639":2,"1640":4,"1664":1,"1784":1,"1851":2,"1923":1,"2067":1,"2100":1,"2158":1}}],["exclusivity",{"3":{"709":1,"1911":1}}],["exclusivemajorceiling",{"3":{"1436":1}}],["exclusively",{"3":{"193":1,"930":1,"1247":1,"1259":1,"1270":2,"1286":3,"1300":2,"1311":1,"1324":1,"1339":1,"1342":1,"1350":1,"1359":1,"1417":1,"1427":1,"1465":1,"1773":1}}],["exclusive",{"3":{"0":2,"159":1,"996":1,"997":1,"1026":1,"1074":1,"1212":1,"1269":1,"1300":1,"1316":1,"1323":3,"1348":1,"1350":4,"1395":1,"1396":2,"1402":1,"1427":1,"1436":2,"1489":1,"1630":2,"1749":1,"1764":1,"1765":1,"1767":1,"1909":1}}],["exclusionid",{"3":{"1359":1}}],["exclusiontestdbcontext",{"3":{"1199":2,"1207":1}}],["exclusionaggregate",{"3":{"1199":3,"1207":1}}],["exclusionevent",{"3":{"1199":2,"1207":1}}],["exclusions",{"3":{"876":1,"1006":1,"1353":1,"1415":1,"1436":1,"1455":1,"1486":1,"1496":2,"2043":1,"2158":1}}],["exclusion",{"1":{"993":1,"994":1,"995":1,"996":1,"997":1,"998":1,"999":1,"1000":1},"3":{"0":1,"135":1,"142":1,"159":2,"161":1,"235":1,"484":1,"486":1,"490":1,"524":1,"607":1,"696":3,"984":1,"993":1,"995":2,"996":3,"997":1,"998":2,"1000":1,"1212":1,"1237":2,"1260":1,"1269":1,"1270":4,"1274":2,"1286":11,"1300":3,"1301":2,"1311":6,"1323":1,"1339":2,"1344":2,"1350":2,"1352":1,"1359":5,"1367":1,"1395":1,"1396":1,"1402":1,"1415":1,"1417":1,"1436":5,"1438":2,"1443":1,"1474":1,"1496":1,"1534":2,"1592":1,"1635":1,"2057":1,"2120":1,"2232":1}}],["excerpt",{"3":{"1324":1}}],["excellent",{"3":{"1537":1,"1797":1,"1804":1}}],["excel",{"3":{"741":1,"1311":2}}],["exceeding",{"3":{"1427":1,"1714":1}}],["exceed",{"3":{"709":1,"828":1,"829":1,"1286":2,"1292":1,"1350":3,"1359":1,"1395":1,"1399":1,"1436":6,"1685":2,"1686":2,"1832":1,"2166":1}}],["exceeded",{"3":{"556":1,"861":1,"1300":3,"1312":2,"1324":1,"1378":1,"1380":1,"1396":1,"1467":1,"1476":1,"1640":2,"1641":2,"1927":1}}],["exceeds",{"3":{"0":1,"137":1,"369":1,"576":1,"591":1,"626":1,"861":1,"1091":1,"1237":1,"1247":1,"1300":2,"1309":2,"1350":1,"1417":1,"1422":1,"1427":1,"1436":2,"1456":1,"1467":1,"1638":1}}],["excessive",{"3":{"1639":2}}],["excessattempts",{"3":{"1300":1}}],["excess",{"3":{"282":1,"1324":2,"1339":1,"1436":1,"1640":1,"1641":1}}],["exceptargumentguards",{"3":{"1436":2}}],["excepted",{"3":{"619":1,"1488":1}}],["except",{"3":{"0":5,"31":2,"109":1,"130":2,"135":2,"138":2,"141":1,"142":1,"359":1,"388":1,"401":1,"484":1,"766":1,"881":1,"905":1,"926":1,"1034":1,"1092":1,"1247":2,"1259":1,"1270":1,"1271":1,"1278":1,"1286":3,"1300":4,"1309":1,"1311":7,"1312":1,"1318":1,"1323":1,"1324":4,"1333":1,"1339":3,"1350":1,"1359":10,"1369":2,"1392":1,"1395":7,"1396":5,"1415":2,"1427":1,"1436":11,"1438":1,"1443":1,"1455":1,"1459":1,"1490":1,"1611":1,"1627":1,"1635":1,"1760":1,"1761":1,"1821":1,"1823":1,"1856":1,"1878":1,"1898":1,"1904":1,"1919":1,"1922":2,"1948":1,"1954":1,"1955":1,"2100":1}}],["exceptionobject",{"3":{"1417":1}}],["exceptionhandler",{"3":{"1311":2,"1436":1,"1666":1}}],["exceptionhandlertests",{"3":{"1199":1,"1207":3,"1229":1}}],["exceptionhandled",{"3":{"1311":2}}],["exception",{"0":{"1218":1,"1873":1},"2":{"896":1,"899":1,"1821":1,"1919":1,"2032":1},"3":{"0":15,"17":1,"20":1,"24":1,"39":1,"53":1,"94":1,"95":1,"98":1,"107":2,"108":1,"109":12,"110":3,"111":6,"115":3,"122":1,"125":6,"135":1,"141":1,"142":1,"164":1,"175":1,"200":1,"230":1,"235":1,"265":3,"279":1,"280":2,"285":1,"287":1,"303":1,"310":1,"342":1,"370":1,"386":1,"388":2,"395":2,"397":1,"407":4,"414":1,"415":1,"420":1,"427":1,"440":1,"459":1,"465":1,"536":4,"539":1,"549":1,"583":1,"586":1,"618":3,"619":1,"620":2,"651":1,"657":2,"672":1,"674":2,"683":1,"688":1,"690":1,"691":2,"692":1,"698":1,"749":1,"757":1,"819":1,"827":1,"840":1,"881":1,"882":2,"896":2,"897":3,"899":2,"912":2,"913":1,"914":2,"917":1,"918":1,"965":1,"980":1,"988":6,"989":1,"990":1,"1002":1,"1004":1,"1005":1,"1018":2,"1022":1,"1042":1,"1054":1,"1058":1,"1107":1,"1124":2,"1126":1,"1134":1,"1201":1,"1202":1,"1203":2,"1208":1,"1212":2,"1217":1,"1226":1,"1228":1,"1229":18,"1237":3,"1241":1,"1247":12,"1252":2,"1259":19,"1263":6,"1269":1,"1270":34,"1271":1,"1273":1,"1275":1,"1278":3,"1284":1,"1286":75,"1288":1,"1293":1,"1299":1,"1300":18,"1301":1,"1304":2,"1309":8,"1311":41,"1312":22,"1318":1,"1323":36,"1324":52,"1328":2,"1339":19,"1350":5,"1352":2,"1355":3,"1357":1,"1358":1,"1359":33,"1366":1,"1369":4,"1378":1,"1379":1,"1380":2,"1390":1,"1395":24,"1396":40,"1402":6,"1413":1,"1415":19,"1416":8,"1417":31,"1423":2,"1424":1,"1427":12,"1436":70,"1438":8,"1445":1,"1447":1,"1450":1,"1455":2,"1467":1,"1485":1,"1487":1,"1488":6,"1489":2,"1495":1,"1496":12,"1498":1,"1526":1,"1591":1,"1615":1,"1631":1,"1634":1,"1638":1,"1640":2,"1651":1,"1660":1,"1666":1,"1669":1,"1685":1,"1702":1,"1729":1,"1741":1,"1753":1,"1774":2,"1804":1,"1806":6,"1807":1,"1815":1,"1821":2,"1822":4,"1825":1,"1826":1,"1827":1,"1840":5,"1873":1,"1885":1,"1886":1,"1912":1,"1918":1,"1919":1,"1922":1,"1927":1,"1933":2,"1934":2,"1951":1,"1954":3,"1959":1,"1994":1,"1998":1,"2000":2,"2032":2,"2057":3,"2060":1,"2072":1,"2090":1,"2092":1,"2096":2,"2117":1,"2120":1,"2123":1,"2126":1,"2132":1,"2159":1,"2165":3,"2169":2,"2175":2,"2188":1,"2190":1,"2191":1,"2202":1,"2232":1}}],["exceptional",{"3":{"0":2,"109":1,"111":1,"1217":1,"1218":1,"1226":2,"1229":1,"1324":1,"1415":1,"1436":3,"1803":1,"1805":1,"1806":1,"1807":1,"1959":1}}],["exceptions",{"0":{"1226":1,"1497":1,"1804":1},"1":{"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"1803":1,"1804":1,"1805":1,"1806":1,"1807":1},"2":{"1229":1},"3":{"0":5,"39":1,"106":1,"108":1,"109":2,"111":1,"120":3,"139":1,"265":1,"314":1,"318":1,"344":1,"549":1,"619":1,"674":2,"677":1,"683":1,"690":1,"798":1,"964":1,"988":1,"992":1,"1004":1,"1049":1,"1192":1,"1203":3,"1207":10,"1211":1,"1212":1,"1217":1,"1218":1,"1226":4,"1229":13,"1247":1,"1256":1,"1259":1,"1270":3,"1271":1,"1278":1,"1286":5,"1287":1,"1300":2,"1311":5,"1312":5,"1323":2,"1324":7,"1339":1,"1350":1,"1359":2,"1373":1,"1396":6,"1402":2,"1415":3,"1417":3,"1436":5,"1467":1,"1489":1,"1496":1,"1504":1,"1539":1,"1552":1,"1577":2,"1640":1,"1653":1,"1662":1,"1700":1,"1786":1,"1802":1,"1803":2,"1804":1,"1805":2,"1806":2,"1807":5,"1840":1,"1920":1,"1923":1,"1927":2,"1930":2,"1933":1,"1940":1,"1954":1,"1959":1,"1994":1,"2012":1,"2043":1,"2206":1,"2230":1,"2232":1}}],["exec",{"3":{"1479":2}}],["executably",{"3":{"1237":1}}],["executable",{"0":{"1489":1},"3":{"0":1,"1116":1,"1134":1,"1162":1,"1169":1,"1214":1,"1229":1,"1237":3,"1247":1,"1271":2,"1285":1,"1286":1,"1311":1,"1312":2,"1347":1,"1350":1,"1353":1,"1359":9,"1436":19,"1438":3,"1445":1,"1457":1,"1461":1,"1485":1,"1489":2,"1491":1,"1492":1,"1523":1,"1525":1,"1526":1,"1571":1,"1574":1,"1576":1,"1591":1,"1670":1,"1782":1,"1793":1,"1811":1,"1898":1,"2038":1,"2040":1,"2043":1,"2063":2,"2075":1}}],["executor",{"3":{"0":1,"881":1,"1133":1,"1135":2,"1136":1,"1137":1,"1175":1,"1176":1,"1180":1,"1286":2,"1309":4,"1310":1,"1323":1,"1324":3,"1395":4,"1396":5,"1415":2,"1417":1,"1436":2,"1653":1}}],["executing",{"3":{"0":1,"157":2,"698":1,"709":1,"995":1,"1044":1,"1212":1,"1246":1,"1247":1,"1270":1,"1276":1,"1286":3,"1300":1,"1311":2,"1323":2,"1332":1,"1359":1,"1416":1,"1436":1,"1438":1,"1577":1,"1851":1,"1909":1,"1912":1,"2192":1,"2232":1}}],["executionrejectedexception",{"3":{"1300":1}}],["executionandpublication",{"2":{"1288":1},"3":{"1288":1,"1300":1}}],["executions",{"3":{"1263":1,"1270":1,"1323":1,"1708":1,"1821":1,"1909":1}}],["executionlog",{"3":{"1199":4,"1207":1}}],["executionconfigurationbuilder",{"2":{"1067":1},"3":{"1067":1}}],["executioncontext",{"2":{"1246":1},"3":{"265":1,"1246":1,"1324":1,"1417":1}}],["execution",{"0":{"1262":1,"2184":2},"1":{"515":1,"516":1,"517":1,"518":1,"519":1,"520":1,"521":1,"522":1,"523":1,"524":1,"985":1,"986":1,"987":1,"988":1,"989":1,"990":1,"991":1,"992":1},"2":{"2191":1},"3":{"0":9,"21":1,"71":2,"117":1,"119":1,"120":1,"121":1,"122":3,"157":1,"407":1,"435":1,"515":1,"518":1,"549":1,"579":1,"707":3,"708":1,"711":1,"715":1,"819":2,"985":1,"987":2,"988":1,"991":1,"992":1,"996":1,"997":1,"1042":5,"1044":2,"1046":1,"1135":1,"1150":1,"1152":1,"1212":4,"1243":1,"1245":1,"1247":6,"1251":1,"1261":1,"1262":1,"1263":1,"1267":2,"1269":1,"1270":21,"1271":1,"1274":3,"1275":5,"1278":2,"1286":19,"1300":2,"1301":1,"1309":2,"1311":3,"1312":1,"1316":2,"1317":1,"1318":4,"1323":11,"1324":1,"1357":1,"1359":6,"1415":2,"1417":1,"1436":7,"1438":2,"1455":3,"1461":1,"1463":1,"1467":1,"1476":1,"1486":1,"1488":1,"1492":1,"1507":1,"1524":1,"1525":1,"1526":1,"1531":2,"1534":1,"1537":2,"1574":2,"1575":1,"1577":4,"1578":1,"1584":1,"1585":1,"1588":1,"1592":1,"1611":1,"1664":2,"1747":4,"1774":2,"1784":1,"1821":1,"1826":1,"1840":3,"1865":1,"1909":1,"1917":1,"1948":1,"2032":2,"2038":1,"2096":2,"2156":2,"2184":1,"2188":1,"2191":2,"2192":3,"2193":3,"2220":1,"2232":2}}],["executeandstoreasync",{"3":{"1311":1}}],["executeasync",{"2":{"255":1,"391":1,"522":1,"523":1,"524":1,"881":1,"897":1,"988":1,"1100":1,"1310":1,"1399":1,"1414":1,"1653":1,"1665":1,"1919":1,"1922":1,"1924":1,"1946":1,"2184":1},"3":{"0":1,"255":1,"391":1,"522":2,"523":2,"524":1,"536":1,"707":1,"881":1,"897":1,"988":1,"1100":4,"1212":1,"1243":2,"1244":1,"1247":12,"1259":3,"1269":1,"1270":3,"1273":1,"1286":9,"1310":1,"1311":1,"1323":5,"1324":8,"1334":1,"1339":7,"1395":9,"1396":27,"1399":2,"1402":6,"1414":1,"1415":1,"1442":1,"1653":1,"1665":1,"1919":2,"1922":1,"1924":1,"1946":1,"2167":1,"2184":1}}],["executeunderdistributedlockasync",{"3":{"1311":1}}],["executeunderprocesslockasync",{"3":{"1311":1}}],["executeupdateasync",{"2":{"20":1,"24":1,"995":1,"1844":1,"1948":1},"3":{"20":1,"24":1,"698":1,"707":2,"995":1,"1259":4,"1278":1,"1286":16,"1290":1,"1300":1,"1309":2,"1317":1,"1323":3,"1496":2,"1749":1,"1765":1,"1844":1,"1948":1}}],["executeupdate",{"2":{"1255":1,"1844":1},"3":{"0":1,"536":1,"540":1,"1252":1,"1255":1,"1259":3,"1278":1,"1286":5,"1300":1,"1309":1,"1591":1,"1664":1,"1844":2}}],["executerawlookupmethod",{"3":{"1286":1}}],["executerawlookupasync",{"3":{"1286":5}}],["executeclaimedjobasync",{"3":{"1323":3}}],["executeclaimedasync",{"3":{"1286":1}}],["executecycleasync",{"3":{"536":1,"1286":1,"1317":1,"1323":2,"2167":1}}],["executewithserversideincludesasync",{"3":{"1247":2}}],["executewithmanualnavigationasync",{"3":{"1247":2,"1310":1}}],["execute",{"0":{"2188":1},"3":{"0":1,"155":1,"156":1,"157":2,"159":1,"590":1,"707":1,"733":1,"990":1,"995":1,"996":1,"1202":1,"1203":1,"1244":1,"1247":2,"1259":1,"1269":1,"1270":2,"1284":1,"1286":3,"1301":1,"1309":1,"1311":7,"1323":3,"1324":1,"1339":1,"1359":2,"1395":2,"1417":1,"1436":4,"1445":1,"1467":1,"1490":1,"1591":1,"1666":1,"1668":1,"1765":1,"1815":1,"1909":6,"1911":2,"1912":2,"1915":1,"2056":1,"2193":2}}],["executeintransactionasync",{"2":{"21":1,"120":1,"535":1,"536":1,"539":1,"540":1,"987":2,"988":1,"1278":1,"1358":1,"1406":1,"1664":1,"1822":1,"1840":2,"1852":1,"2092":1,"2096":1},"3":{"0":1,"21":1,"120":1,"535":1,"536":1,"539":1,"540":2,"987":2,"988":3,"1212":1,"1263":1,"1270":3,"1278":1,"1286":10,"1358":1,"1359":2,"1406":1,"1415":2,"1591":1,"1664":1,"1822":1,"1840":3,"1852":1,"2092":1,"2096":1}}],["executeprojectedasync",{"2":{"549":1,"1243":1,"1244":1,"1247":1},"3":{"0":1,"549":1,"1243":1,"1244":1,"1247":4}}],["executedeletingfixture",{"3":{"1199":2,"1207":1,"1436":7}}],["executedelete",{"3":{"39":1,"1277":1,"1286":1,"1359":1,"1436":3}}],["executedeleteasync",{"2":{"39":1},"3":{"0":1,"39":1,"905":1,"1278":1,"1286":12,"1359":2,"1436":10,"1526":1}}],["executed",{"3":{"0":5,"130":2,"136":2,"137":4,"140":2,"142":1,"218":1,"626":1,"628":1,"641":1,"827":1,"1042":1,"1050":2,"1055":1,"1212":1,"1246":1,"1247":1,"1270":4,"1286":5,"1311":1,"1312":1,"1318":1,"1324":1,"1339":2,"1359":12,"1380":2,"1395":2,"1396":1,"1402":2,"1405":1,"1411":1,"1416":1,"1431":1,"1436":2,"1438":1,"1441":1,"1455":2,"1489":1,"1496":1,"1526":1,"1591":2,"1706":1,"1784":1,"1824":1,"2034":1}}],["executesql",{"2":{"1132":1},"3":{"1132":1,"1436":1}}],["executesqlinterpolated",{"2":{"1132":1},"3":{"1132":1}}],["executesqlrawasync",{"2":{"1132":1,"1133":1},"3":{"0":1,"1132":1,"1133":1,"1431":1,"1436":3}}],["executesqlraw",{"2":{"1132":1},"3":{"0":1,"1132":1,"1133":1,"1431":1,"1436":3}}],["executes",{"3":{"0":2,"135":1,"136":1,"137":2,"159":2,"265":1,"707":1,"972":1,"1042":1,"1043":1,"1100":1,"1238":1,"1247":1,"1259":2,"1270":4,"1271":2,"1275":1,"1286":3,"1300":1,"1310":2,"1311":2,"1317":1,"1323":1,"1324":2,"1326":1,"1359":2,"1369":1,"1395":1,"1415":1,"1417":3,"1430":1,"1431":1,"1436":2,"1453":1,"1489":1,"1492":1,"1524":1,"1526":1,"1531":1,"1577":1,"1815":1,"1911":2,"2093":1,"2101":1,"2178":1,"2184":1,"2188":1,"2194":1,"2203":1}}],["exe",{"3":{"1286":1,"1416":1,"1479":1,"1486":2}}],["exercisable",{"3":{"1359":1}}],["exercising",{"3":{"914":1,"1271":1,"1427":1,"1436":6,"1437":4,"1456":1,"1460":1,"1490":1,"2067":1}}],["exercised",{"3":{"136":1,"150":1,"267":1,"359":1,"361":1,"448":2,"450":1,"455":1,"572":1,"583":1,"639":1,"659":1,"667":1,"707":1,"733":1,"812":1,"917":1,"998":1,"1075":1,"1212":1,"1237":4,"1247":5,"1259":1,"1264":1,"1270":12,"1271":1,"1286":11,"1300":4,"1301":3,"1309":2,"1311":1,"1323":14,"1324":10,"1339":1,"1350":3,"1359":16,"1364":1,"1369":4,"1380":2,"1395":4,"1396":6,"1402":1,"1415":4,"1417":3,"1427":6,"1429":1,"1432":1,"1436":28,"1438":2,"1446":1,"1488":1,"1490":1,"1496":1,"1500":1,"1577":3,"1671":2,"1673":1,"1842":1,"1860":2,"1884":1,"2055":1,"2063":1,"2129":1,"2131":2,"2143":1,"2228":1}}],["exercises",{"3":{"0":3,"136":1,"170":1,"185":1,"558":1,"573":1,"635":1,"638":1,"641":1,"698":1,"716":1,"758":1,"848":1,"941":1,"954":1,"1020":1,"1270":1,"1271":1,"1286":3,"1300":1,"1309":1,"1311":2,"1323":1,"1324":1,"1339":1,"1359":6,"1369":1,"1395":1,"1396":3,"1402":1,"1427":2,"1436":25,"1438":2,"1446":1,"1456":1,"1487":1,"1490":2,"1526":1,"1535":1,"1585":1,"1600":1,"1611":1,"1663":1,"1673":1,"1702":1,"1706":1,"1929":1,"1952":1,"1960":1,"2053":1,"2073":1,"2097":1,"2113":1,"2228":1,"2232":1}}],["exercise",{"0":{"1800":1},"3":{"0":2,"62":1,"390":1,"650":1,"725":1,"776":1,"838":1,"1154":1,"1259":1,"1270":2,"1286":4,"1311":2,"1324":5,"1339":4,"1359":2,"1380":1,"1395":2,"1396":1,"1402":1,"1417":1,"1427":2,"1429":1,"1430":1,"1435":1,"1436":8,"1455":2,"1488":2,"1491":1,"1494":1,"1526":1,"1653":1,"1698":1,"1891":1,"1923":1,"2055":1,"2129":1}}],["exemplary",{"3":{"1526":3,"1537":1,"1576":1,"1577":2,"1590":1,"1591":2,"1797":1,"1799":1,"2059":1}}],["exemplar",{"0":{"2131":1},"3":{"0":1,"448":1,"449":2,"1212":1,"1323":1,"1343":1,"2131":2,"2132":1}}],["exemptprefixes",{"3":{"1324":1}}],["exemptpartitionkey",{"3":{"1324":1}}],["exemptpathprefixes",{"2":{"189":1},"3":{"189":1,"1300":3}}],["exemptablefixtureservice",{"3":{"1199":2,"1207":1,"1436":3}}],["exempting",{"3":{"1135":1,"1300":1,"1324":1,"1339":1,"1436":8,"2002":1}}],["exemption",{"3":{"0":5,"103":2,"135":6,"136":1,"139":1,"142":1,"173":4,"175":1,"179":2,"180":1,"181":1,"279":1,"480":1,"482":1,"486":1,"487":2,"488":3,"489":3,"490":3,"491":3,"492":3,"493":3,"494":1,"495":1,"507":1,"545":1,"747":1,"749":1,"753":1,"789":1,"792":1,"825":1,"826":1,"827":1,"828":1,"830":1,"832":4,"834":1,"1004":1,"1006":4,"1122":1,"1124":1,"1126":1,"1127":1,"1133":2,"1134":1,"1135":1,"1161":3,"1162":1,"1212":2,"1286":1,"1300":3,"1309":1,"1311":8,"1324":8,"1337":1,"1339":7,"1416":2,"1436":41,"1438":1,"1447":3,"1467":3,"1489":1,"1496":1,"1799":1,"1825":1,"1996":1,"1997":1,"1998":1,"2001":1,"2002":4,"2043":1}}],["exemptions",{"3":{"0":2,"90":1,"103":1,"135":1,"142":1,"545":1,"547":1,"1005":1,"1124":1,"1161":1,"1311":1,"1324":2,"1339":1,"1416":1,"1436":10,"1526":1}}],["exemptfoldersuffixes",{"2":{"1004":1,"2043":1},"3":{"1004":2,"1431":1,"1436":4,"2043":1}}],["exemptmethods",{"3":{"135":1,"139":1,"1436":2}}],["exempt",{"3":{"0":3,"174":1,"178":1,"179":3,"180":1,"189":1,"227":1,"244":1,"280":1,"484":1,"486":1,"487":2,"488":4,"489":5,"490":8,"491":7,"492":8,"493":3,"494":3,"495":2,"552":1,"575":1,"749":1,"792":1,"827":1,"830":1,"831":1,"832":1,"881":1,"1006":1,"1124":3,"1126":1,"1186":1,"1297":2,"1300":6,"1311":3,"1324":4,"1337":1,"1339":5,"1344":1,"1416":2,"1431":1,"1436":18,"1447":2,"1465":1,"1467":1,"1577":1,"1582":1,"1583":1,"1600":1,"1637":1,"1666":1,"1670":1,"1698":1,"1999":2,"2002":3,"2114":1,"2168":1}}],["exemptedoffenderfixture",{"3":{"1199":2,"1207":1,"1436":5}}],["exempted",{"3":{"0":1,"135":1,"136":1,"139":1,"179":1,"265":1,"635":1,"749":1,"1168":1,"1212":1,"1286":1,"1311":1,"1324":1,"1431":1,"1436":10,"1447":1,"1467":1,"1771":1,"2042":1}}],["exemptseverytypeunderit",{"3":{"1436":1}}],["exemptsonlythatmember",{"3":{"1436":2}}],["exempts",{"0":{"2000":1},"3":{"0":4,"175":2,"182":1,"239":1,"243":1,"287":1,"484":1,"545":2,"566":1,"792":1,"826":1,"827":1,"829":1,"832":1,"833":2,"881":1,"884":1,"1135":1,"1161":3,"1163":2,"1300":1,"1311":2,"1337":1,"1339":4,"1380":2,"1436":9,"1455":1,"1465":1,"1591":1,"1998":1,"2000":2,"2002":1,"2024":2,"2232":2}}],["extreme",{"3":{"1359":1,"1417":1,"1436":1}}],["extraforbiddendomaindependencies",{"2":{"2104":1},"3":{"1436":2,"1489":1,"2104":1}}],["extrastatefixtureid",{"3":{"1199":2,"1207":1,"1436":9}}],["extras",{"3":{"598":1,"607":2,"752":1,"1034":1,"1309":1,"1324":9,"1359":1,"1395":1,"1436":2,"1441":1,"1666":1}}],["extra",{"3":{"0":1,"13":1,"24":1,"92":1,"94":1,"95":2,"102":1,"265":1,"275":1,"330":1,"351":1,"383":1,"401":1,"405":1,"426":1,"435":1,"454":2,"471":1,"633":1,"640":1,"649":1,"665":1,"683":1,"690":1,"749":1,"768":1,"782":1,"784":1,"827":2,"871":1,"924":1,"996":1,"1027":1,"1050":1,"1186":1,"1227":1,"1228":1,"1229":3,"1247":7,"1252":1,"1254":1,"1259":8,"1265":1,"1270":9,"1276":1,"1284":1,"1286":13,"1300":7,"1309":1,"1310":1,"1311":8,"1320":1,"1323":5,"1324":8,"1326":1,"1337":1,"1338":1,"1339":6,"1345":1,"1350":3,"1359":15,"1369":1,"1374":1,"1380":1,"1385":1,"1395":12,"1396":3,"1402":2,"1415":4,"1417":3,"1436":25,"1438":1,"1441":2,"1447":1,"1467":1,"1475":1,"1476":1,"1496":1,"1627":1,"1648":1,"1682":1,"1693":1,"1702":1,"1727":1,"1755":1,"1783":1,"1808":1,"1826":1,"1839":1,"1847":1,"1851":1,"1867":1,"1898":1,"1901":1,"1908":1,"1926":1,"1949":1,"1970":1,"2107":1,"2130":1,"2150":1,"2169":1,"2193":1}}],["extracttwitterhandle",{"3":{"1359":2}}],["extractability",{"3":{"1312":1,"1436":1}}],["extractable",{"0":{"1509":1},"1":{"1878":1,"1879":1,"1880":1,"1881":1,"1882":1,"1883":1,"1884":1,"1885":1,"1886":1},"3":{"135":1,"692":1,"1192":3,"1202":1,"1203":1,"1212":1,"1257":1,"1269":1,"1350":1,"1359":3,"1369":1,"1396":2,"1415":2,"1416":1,"1436":2,"1496":2,"1526":1,"1544":2,"1576":1,"1577":1,"1590":1,"1591":1,"1662":1,"1686":1,"1878":1,"2207":1,"2214":1,"2230":1}}],["extractname",{"3":{"1311":1}}],["extractclaims",{"3":{"1311":2}}],["extractors",{"3":{"974":1}}],["extractor",{"3":{"973":1,"1496":5,"1498":1}}],["extractgridfilters",{"3":{"881":1,"1324":1}}],["extractsociallinks",{"3":{"1359":1}}],["extractsortparameters",{"3":{"881":1,"1324":1}}],["extracts",{"3":{"350":1,"1289":1,"1311":2,"1324":2,"1339":1,"1396":1,"1436":1,"1453":1,"1672":1,"1780":1,"2072":1,"2155":1,"2204":1,"2214":1,"2221":1}}],["extracting",{"1":{"2015":1,"2016":1,"2017":1,"2018":1,"2019":1,"2020":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1,"2027":1,"2028":1},"3":{"59":1,"734":1,"1109":1,"1247":1,"1259":1,"1270":3,"1286":3,"1300":1,"1311":1,"1324":1,"1339":3,"1350":1,"1359":6,"1395":7,"1396":1,"1416":1,"1436":1,"1544":1,"1646":1,"1779":1,"2014":1,"2015":2,"2072":1,"2209":1}}],["extractions",{"3":{"1496":1}}],["extraction",{"0":{"1307":1,"1790":1,"1866":1,"1884":1,"2009":1},"1":{"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1},"3":{"0":5,"31":1,"35":1,"56":1,"57":1,"59":1,"60":1,"62":3,"64":1,"86":1,"88":2,"126":1,"229":1,"325":1,"326":1,"463":1,"545":1,"548":1,"567":1,"582":3,"584":2,"587":1,"640":1,"645":1,"690":1,"707":1,"733":1,"750":1,"753":1,"773":1,"783":1,"786":1,"827":1,"831":1,"846":1,"882":2,"883":1,"935":1,"954":1,"1025":1,"1034":1,"1035":1,"1212":4,"1213":1,"1214":1,"1259":1,"1270":1,"1286":6,"1287":1,"1288":1,"1300":4,"1301":2,"1303":1,"1309":5,"1311":4,"1312":7,"1313":1,"1314":1,"1320":1,"1323":9,"1324":3,"1349":1,"1350":5,"1359":3,"1380":11,"1383":1,"1395":3,"1396":9,"1415":6,"1416":2,"1436":23,"1446":1,"1447":3,"1450":1,"1453":1,"1489":1,"1496":6,"1526":2,"1530":1,"1531":2,"1532":1,"1535":1,"1576":4,"1577":5,"1586":1,"1602":1,"1638":2,"1646":1,"1648":1,"1652":2,"1654":1,"1656":1,"1657":1,"1663":4,"1684":1,"1691":1,"1697":1,"1717":1,"1724":1,"1781":1,"1783":2,"1787":1,"1788":3,"1790":1,"1793":4,"1815":1,"1842":1,"1848":1,"1853":1,"1863":1,"1866":2,"1882":1,"1886":3,"1892":1,"1895":1,"1899":1,"1926":1,"2009":1,"2016":1,"2020":1,"2028":3,"2029":1,"2030":1,"2043":1,"2054":1,"2074":2,"2080":1,"2094":1,"2111":1,"2113":1,"2114":1,"2209":1,"2227":1,"2234":1}}],["extractdeployedregion",{"2":{"972":1,"973":1,"2043":1},"3":{"0":1,"972":2,"973":1,"1436":3,"1489":1,"2043":1}}],["extract",{"0":{"1656":1,"2209":1},"3":{"0":2,"58":1,"59":1,"62":2,"243":1,"396":1,"743":1,"745":1,"1211":1,"1286":1,"1300":2,"1309":1,"1311":3,"1380":1,"1396":1,"1534":1,"1646":2,"1647":2,"1650":1,"1656":1,"1659":1,"1663":1,"1692":1,"1703":1,"1718":1,"1724":1,"1779":1,"1842":1,"1864":1,"1884":1,"1893":1,"1930":1,"2016":1,"2169":1,"2180":1,"2193":1,"2203":1,"2212":1,"2215":1,"2226":1,"2227":1}}],["extracted",{"3":{"0":6,"20":1,"30":2,"31":2,"32":1,"46":1,"57":1,"59":2,"62":2,"63":1,"95":1,"97":1,"191":1,"323":1,"349":1,"398":1,"447":1,"448":2,"458":1,"459":1,"461":1,"564":1,"572":1,"574":1,"578":1,"582":3,"583":1,"584":2,"586":1,"639":1,"640":2,"649":1,"707":1,"708":1,"725":1,"726":1,"733":1,"749":2,"750":1,"882":1,"918":1,"933":1,"972":2,"998":1,"1192":2,"1213":2,"1229":1,"1248":1,"1252":1,"1259":7,"1270":2,"1273":1,"1286":10,"1287":1,"1297":1,"1300":10,"1301":1,"1302":1,"1307":2,"1309":7,"1310":2,"1311":16,"1312":7,"1320":1,"1323":10,"1324":2,"1339":2,"1350":3,"1359":7,"1370":2,"1380":3,"1385":1,"1391":2,"1395":9,"1396":10,"1402":1,"1404":2,"1409":1,"1413":1,"1415":11,"1431":1,"1436":18,"1438":1,"1440":1,"1444":1,"1455":1,"1489":2,"1495":1,"1496":6,"1508":1,"1576":1,"1577":1,"1600":1,"1651":1,"1656":1,"1663":2,"1763":1,"1780":1,"1781":1,"1783":1,"1790":4,"1805":1,"1838":1,"1848":1,"1868":1,"1882":1,"1884":1,"1888":1,"1892":1,"1896":1,"1897":1,"1899":2,"1916":1,"1925":1,"1927":1,"1929":1,"1948":1,"2005":1,"2018":1,"2019":1,"2020":1,"2021":2,"2022":1,"2055":1,"2066":1,"2111":1,"2131":1,"2135":1,"2155":1,"2230":1,"2232":1}}],["extern",{"3":{"1611":1}}],["externalauthbroker",{"3":{"1417":1}}],["externalauthextensionstests",{"3":{"1199":1,"1207":2}}],["externalauthextensions",{"2":{"1415":1},"3":{"350":2,"980":1,"1199":5,"1203":1,"1207":2,"1208":1,"1300":1,"1311":10,"1324":1,"1415":3,"1496":1}}],["externalizing",{"3":{"1300":1}}],["externalized",{"3":{"265":1,"1311":2,"1324":2,"1394":1,"1395":4,"1396":1,"1416":1,"1549":1,"1554":1,"1564":1,"1653":1,"2083":1}}],["externalize",{"3":{"86":1,"1653":1}}],["externalcontractfixtureservice",{"3":{"1199":1,"1207":1,"1436":2}}],["externalsessionid",{"3":{"1286":1}}],["externals",{"3":{"1193":1,"1229":7,"1237":2,"1259":3,"1286":6,"1300":3,"1301":2,"1309":13,"1311":3,"1323":20,"1324":48,"1339":7,"1359":3,"1380":9,"1395":39,"1396":105,"1402":7,"1415":26,"1416":1,"1417":12,"1436":25}}],["externalprovideralreadylinked",{"2":{"350":1,"352":1,"1977":1},"3":{"350":1,"352":1,"1415":1,"1977":1}}],["externalemailnotverified",{"2":{"350":1,"352":1,"353":1,"354":1,"1406":1,"1977":1},"3":{"0":1,"350":1,"352":2,"353":1,"354":1,"1406":1,"1415":2,"1977":1}}],["externalemailinvalid",{"2":{"350":1,"354":1,"1977":1},"3":{"0":1,"350":1,"354":1,"1415":1,"1977":1}}],["externallinkservice",{"3":{"1417":2}}],["externallinktests",{"3":{"1199":1,"1207":3}}],["externallink",{"2":{"2121":1},"3":{"0":1,"413":1,"1324":1,"1417":7,"1599":2,"2121":1}}],["externallinkrequireslocalsignin",{"2":{"350":1,"353":1,"354":1,"1406":1,"1977":1},"3":{"0":1,"350":1,"353":1,"354":1,"1406":1,"1415":1,"1977":1}}],["externalloginemailverifier",{"3":{"1415":1}}],["externalloginscheme",{"2":{"1415":1},"3":{"1311":2,"1415":1}}],["externallogincoreasync",{"2":{"354":1},"3":{"350":1,"354":1,"1415":1}}],["externalloginnotsupported",{"2":{"350":1,"352":1,"1978":1},"3":{"350":1,"352":1,"1300":1,"1978":1}}],["externalloginasync",{"2":{"350":1,"351":1,"353":1,"354":1,"1975":1,"1977":1,"1978":1,"1979":1},"3":{"350":5,"351":1,"353":1,"354":1,"1289":1,"1300":5,"1311":3,"1406":2,"1415":2,"1975":1,"1977":2,"1978":2,"1979":1}}],["externallogin",{"2":{"352":1,"1975":1,"1979":1},"3":{"0":1,"350":2,"352":1,"1311":2,"1406":1,"1415":4,"1667":1,"1975":2,"1979":1}}],["externallyfixedmethods",{"3":{"1436":2}}],["externally",{"3":{"0":4,"350":1,"831":1,"860":1,"1123":1,"1259":7,"1270":1,"1286":1,"1311":1,"1323":2,"1324":5,"1344":1,"1350":7,"1359":3,"1380":1,"1395":3,"1415":2,"1416":1,"1427":2,"1436":2,"1441":1,"1467":2,"1631":1,"1636":2,"1640":1,"1755":1,"2000":1,"2169":1}}],["external",{"0":{"1213":2,"1636":1,"1752":1,"1770":1,"1975":1},"1":{"347":1,"348":1,"349":1,"350":1,"351":1,"352":1,"353":1,"354":1,"355":1,"1973":1,"1974":1,"1975":1,"1976":1,"1977":1,"1978":1,"1979":1},"2":{"601":1,"1477":1,"1975":1},"3":{"0":3,"150":1,"219":1,"284":1,"291":1,"347":1,"348":2,"349":1,"350":15,"351":3,"352":1,"353":4,"355":2,"415":1,"419":1,"440":1,"459":1,"497":1,"499":2,"502":2,"503":1,"519":1,"535":1,"536":1,"537":1,"538":1,"599":1,"601":1,"657":2,"660":1,"706":1,"792":1,"809":1,"810":2,"812":1,"840":1,"862":1,"926":1,"946":1,"948":2,"950":1,"988":1,"996":1,"1004":2,"1073":1,"1074":1,"1090":2,"1188":1,"1191":2,"1192":3,"1202":1,"1203":1,"1210":2,"1212":1,"1237":3,"1258":1,"1259":5,"1270":1,"1271":3,"1286":4,"1289":1,"1298":1,"1300":6,"1301":1,"1309":2,"1311":9,"1323":6,"1324":11,"1339":2,"1340":1,"1342":1,"1344":1,"1347":2,"1350":7,"1352":1,"1355":1,"1358":1,"1359":47,"1369":30,"1380":2,"1391":2,"1395":9,"1396":2,"1402":1,"1405":1,"1406":2,"1412":1,"1415":30,"1416":2,"1417":21,"1418":1,"1427":5,"1436":2,"1438":4,"1454":1,"1455":2,"1467":9,"1477":2,"1487":1,"1496":3,"1534":1,"1546":1,"1553":1,"1599":2,"1629":1,"1633":1,"1639":1,"1640":1,"1641":2,"1667":3,"1669":3,"1737":1,"1749":1,"1779":1,"1902":1,"1972":1,"1973":2,"1974":2,"1975":5,"1977":6,"1978":1,"1979":5,"1983":2,"2000":1,"2067":1,"2121":1,"2122":1,"2126":1,"2161":1,"2168":2,"2169":1,"2171":1,"2208":1,"2232":1}}],["extexp0001",{"3":{"1591":1}}],["extensibility",{"2":{"960":1,"1067":1},"3":{"846":1,"850":1,"960":1,"980":1,"1067":1,"1176":1,"1178":1,"1207":1,"1208":1,"1247":6,"1270":1,"1280":1,"1316":1,"1317":1,"1323":7,"1339":1,"1415":2}}],["extensible",{"3":{"235":1,"920":1,"1270":2,"1311":1,"1350":1,"1359":1,"1369":1,"1395":1,"1666":1}}],["extensiont",{"3":{"1427":1}}],["extensionof",{"3":{"1395":2}}],["extensionmarkerattribute",{"2":{"984":1},"3":{"980":1,"984":1}}],["extensions",{"0":{"1444":1},"2":{"63":1,"171":2,"253":1,"395":1,"409":1,"451":1,"452":1,"665":1,"676":1,"732":1,"733":1,"833":1,"917":1,"1090":1,"1091":1,"1213":2,"1247":1,"1259":1,"1270":1,"1301":2,"1311":2,"1312":3,"1323":2,"1324":1,"1329":2,"1339":4,"1369":1,"1417":1,"1427":6,"1611":1,"1915":1,"1916":1,"2012":1,"2177":1,"2178":1,"2180":1},"3":{"0":3,"61":1,"63":1,"72":2,"166":2,"171":3,"235":3,"237":1,"238":2,"253":1,"255":1,"256":1,"258":2,"259":1,"261":1,"395":1,"397":25,"399":3,"400":3,"401":3,"402":11,"404":4,"407":6,"408":5,"409":3,"451":1,"452":1,"640":3,"665":2,"673":1,"674":1,"676":1,"732":1,"733":1,"819":2,"821":1,"822":1,"827":1,"833":2,"883":2,"884":1,"897":1,"899":1,"900":1,"913":2,"917":1,"920":1,"926":1,"980":6,"982":1,"1006":1,"1018":1,"1034":3,"1037":1,"1066":1,"1090":1,"1091":4,"1103":1,"1199":13,"1202":1,"1203":10,"1207":42,"1208":12,"1213":4,"1229":1,"1236":2,"1237":7,"1247":4,"1259":4,"1270":16,"1271":8,"1278":1,"1286":18,"1296":2,"1300":8,"1301":6,"1309":12,"1311":13,"1312":3,"1323":26,"1324":39,"1325":1,"1326":7,"1327":5,"1329":5,"1332":11,"1333":8,"1334":4,"1337":1,"1339":108,"1350":3,"1359":22,"1369":5,"1380":3,"1382":1,"1395":7,"1396":15,"1415":16,"1416":1,"1417":5,"1422":1,"1425":2,"1427":26,"1436":17,"1437":2,"1438":4,"1441":25,"1442":2,"1443":47,"1444":27,"1448":1,"1450":3,"1467":1,"1487":1,"1496":12,"1535":1,"1575":1,"1577":7,"1583":1,"1586":1,"1591":1,"1611":1,"1656":1,"1662":1,"1666":1,"1670":1,"1671":1,"1707":1,"1783":1,"1827":1,"1915":1,"1916":1,"2012":1,"2156":17,"2157":1,"2159":3,"2177":1,"2178":1,"2180":1}}],["extension",{"0":{"1208":1,"2175":1},"1":{"843":1,"844":1,"845":1,"846":1,"847":1,"848":1,"849":1,"850":1,"977":1,"978":1,"979":1,"980":1,"981":1,"982":1,"983":1,"984":1},"2":{"180":1,"388":1,"980":1,"982":1,"983":1,"1204":1,"1327":1,"1354":1,"1418":1,"1831":1},"3":{"0":20,"39":2,"41":1,"48":1,"68":1,"71":1,"76":1,"80":1,"95":1,"99":1,"109":3,"110":1,"133":1,"164":2,"165":1,"167":1,"180":1,"200":1,"214":1,"215":1,"243":1,"258":3,"265":1,"266":1,"295":1,"300":1,"301":1,"306":1,"341":2,"342":1,"358":1,"388":1,"411":1,"413":1,"415":1,"434":2,"438":2,"443":2,"511":1,"549":3,"574":1,"614":1,"649":2,"724":2,"725":1,"728":1,"749":1,"751":2,"766":1,"826":1,"827":2,"833":1,"843":1,"844":1,"845":1,"847":1,"859":2,"861":2,"889":1,"914":1,"922":1,"926":1,"972":1,"976":1,"977":1,"979":4,"980":20,"981":3,"982":1,"983":3,"984":2,"1004":1,"1033":1,"1034":1,"1059":2,"1067":1,"1089":3,"1116":3,"1117":1,"1119":1,"1124":2,"1125":1,"1126":2,"1204":1,"1211":1,"1212":10,"1214":7,"1224":1,"1225":1,"1229":7,"1236":2,"1237":12,"1239":1,"1243":1,"1244":1,"1245":1,"1247":10,"1258":1,"1259":7,"1262":2,"1265":2,"1270":19,"1271":15,"1280":1,"1281":2,"1282":1,"1285":1,"1286":64,"1297":1,"1300":20,"1301":3,"1304":1,"1309":15,"1310":1,"1311":54,"1312":12,"1313":1,"1314":1,"1316":2,"1323":19,"1324":57,"1326":1,"1327":1,"1334":1,"1336":1,"1339":62,"1340":1,"1347":3,"1350":6,"1354":1,"1359":18,"1368":1,"1369":4,"1377":1,"1378":1,"1379":3,"1380":9,"1382":1,"1389":2,"1392":2,"1395":27,"1396":42,"1398":1,"1400":2,"1402":5,"1415":15,"1416":3,"1417":20,"1418":1,"1420":1,"1421":2,"1423":4,"1424":1,"1427":15,"1429":1,"1430":2,"1431":1,"1432":1,"1433":2,"1435":2,"1436":59,"1438":3,"1441":7,"1442":1,"1444":1,"1456":2,"1487":1,"1488":9,"1496":3,"1500":1,"1526":1,"1575":2,"1577":5,"1582":2,"1585":3,"1586":1,"1599":1,"1619":1,"1631":2,"1634":2,"1640":1,"1648":1,"1651":2,"1658":1,"1666":1,"1693":1,"1735":1,"1769":1,"1784":1,"1799":1,"1801":1,"1810":1,"1815":1,"1823":2,"1825":2,"1831":1,"1851":1,"1860":3,"1861":1,"1868":1,"1871":1,"1874":1,"1880":1,"1891":1,"1892":2,"1903":1,"1919":1,"1926":1,"1995":1,"2022":1,"2042":1,"2063":1,"2075":1,"2077":1,"2088":1,"2103":1,"2113":1,"2122":1,"2125":1,"2126":1,"2128":1,"2148":1,"2149":1,"2152":1,"2171":1,"2172":1,"2180":2,"2203":1,"2220":1,"2227":1,"2232":3}}],["extending",{"3":{"890":1,"1040":1,"1043":1,"1286":1,"1324":1,"1339":1,"1348":1,"1349":1,"1350":1,"1395":3,"1402":3,"1467":1,"2192":1,"2232":1}}],["extend",{"3":{"0":3,"175":1,"189":1,"237":1,"572":1,"658":1,"694":1,"706":1,"749":1,"854":1,"926":1,"1229":1,"1247":2,"1259":1,"1280":1,"1286":2,"1294":1,"1300":4,"1310":1,"1311":5,"1323":2,"1324":1,"1359":2,"1395":4,"1396":3,"1402":1,"1413":1,"1436":3,"1455":1,"1488":2,"1571":1,"1595":1,"1596":1,"1597":1,"1600":1,"1641":1,"1685":1,"2043":1,"2194":1,"2232":1}}],["extends",{"3":{"0":5,"66":1,"295":1,"376":1,"532":1,"549":2,"600":1,"660":1,"686":1,"745":1,"823":1,"825":2,"852":1,"914":1,"920":1,"937":1,"976":1,"981":1,"998":1,"1032":1,"1057":1,"1089":1,"1096":1,"1114":1,"1176":1,"1182":1,"1192":1,"1212":3,"1227":1,"1237":3,"1249":1,"1259":3,"1270":1,"1271":2,"1281":1,"1286":11,"1291":2,"1300":3,"1311":7,"1322":1,"1324":3,"1339":6,"1350":1,"1359":4,"1380":2,"1395":25,"1396":4,"1406":1,"1410":1,"1412":1,"1415":4,"1417":1,"1418":1,"1431":1,"1436":3,"1443":1,"1467":2,"1488":3,"1489":2,"1566":1,"1576":1,"1591":1,"1765":1,"1805":1,"1853":1,"1905":1,"2038":1,"2049":1,"2232":7}}],["extended",{"3":{"0":3,"15":1,"328":1,"674":1,"690":1,"701":1,"834":1,"889":1,"920":1,"1016":1,"1160":1,"1169":1,"1217":1,"1229":1,"1271":2,"1286":4,"1300":1,"1311":4,"1323":1,"1324":2,"1339":2,"1359":2,"1396":1,"1415":1,"1417":4,"1436":5,"1438":1,"1496":2,"1538":1,"1855":1,"1940":1,"2012":1,"2232":1}}],["expr",{"3":{"1247":1}}],["expressiveness",{"3":{"1359":3}}],["expressible",{"3":{"699":1,"823":1,"1229":1,"1270":1,"1286":1,"1309":2,"1311":1,"1359":5,"1402":1,"1415":2,"1416":2,"1417":1}}],["expressing",{"3":{"57":1,"691":1,"926":1,"1041":1,"1275":1,"1309":1,"1311":1,"1323":1,"1324":3,"1350":2,"1359":4,"1395":1,"1402":1,"1415":1,"1844":1,"2183":1}}],["expressionboundliteraltrue",{"3":{"1436":1}}],["expression<",{"3":{"1359":5}}],["expressionsortabletemplatecolumngrid",{"3":{"1436":2}}],["expressions",{"3":{"359":1,"365":1,"434":1,"545":1,"1020":1,"1091":1,"1227":1,"1229":1,"1237":1,"1242":1,"1247":15,"1259":1,"1270":1,"1271":3,"1286":10,"1310":3,"1323":5,"1324":3,"1339":3,"1353":1,"1359":21,"1395":1,"1396":6,"1415":1,"1436":3,"2142":1}}],["expressionvisitor",{"2":{"1817":1,"1859":1},"3":{"0":1,"545":1,"549":1,"1239":1,"1247":2,"1431":1,"1436":2,"1815":1,"1817":1,"1859":1}}],["expression",{"2":{"547":1,"1238":1,"1242":1,"1817":1,"1859":2},"3":{"0":3,"6":1,"318":2,"319":1,"330":1,"332":1,"523":1,"543":2,"545":7,"546":2,"547":3,"548":1,"549":5,"556":1,"633":1,"651":1,"655":1,"657":1,"660":1,"676":1,"697":1,"698":2,"699":1,"707":4,"709":1,"726":1,"1050":1,"1091":1,"1213":1,"1214":1,"1219":1,"1229":3,"1231":1,"1237":7,"1238":1,"1239":9,"1242":3,"1247":79,"1252":1,"1259":6,"1268":1,"1269":2,"1270":9,"1271":21,"1273":1,"1286":51,"1300":16,"1301":3,"1305":1,"1309":13,"1310":17,"1311":8,"1312":1,"1323":26,"1324":21,"1339":12,"1350":14,"1353":2,"1359":139,"1369":3,"1372":1,"1380":6,"1395":16,"1396":25,"1402":10,"1415":18,"1416":3,"1417":6,"1426":1,"1427":1,"1431":1,"1436":38,"1438":1,"1453":1,"1458":1,"1465":1,"1467":1,"1475":2,"1490":1,"1577":1,"1591":1,"1599":1,"1687":1,"1689":1,"1727":2,"1815":8,"1817":4,"1829":4,"1859":3,"1865":2,"1920":1,"1948":2,"1952":1,"1953":1,"1955":1,"1988":3,"1989":1,"1990":1,"1991":1,"1994":1,"2089":1,"2176":1,"2196":1}}],["expressed",{"3":{"0":1,"59":1,"136":1,"243":1,"319":1,"464":1,"509":1,"530":1,"729":1,"781":1,"784":1,"836":1,"837":1,"838":2,"842":1,"1091":1,"1237":3,"1247":1,"1255":1,"1259":1,"1263":1,"1270":3,"1271":2,"1273":1,"1278":1,"1283":1,"1286":6,"1300":6,"1309":2,"1311":2,"1323":3,"1324":3,"1339":7,"1343":1,"1350":8,"1353":1,"1359":29,"1369":1,"1380":1,"1395":6,"1396":13,"1402":2,"1415":6,"1417":2,"1436":5,"1441":1,"1455":1,"1460":1,"1465":1,"1467":1,"1491":1,"1526":1,"1656":1,"1727":1,"1833":1}}],["expresses",{"3":{"0":1,"691":1,"708":2,"783":1,"809":1,"810":1,"954":1,"1231":1,"1237":2,"1247":1,"1271":1,"1286":2,"1300":2,"1301":1,"1309":1,"1338":1,"1359":8,"1380":3,"1395":2,"1396":1,"1417":1,"1436":1,"1455":1,"1540":1,"2042":1}}],["express",{"3":{"0":2,"187":1,"189":1,"203":1,"317":1,"523":1,"547":1,"608":1,"610":1,"675":1,"733":1,"743":1,"810":1,"819":2,"820":1,"855":1,"861":1,"862":1,"889":1,"926":1,"1102":1,"1115":1,"1116":1,"1134":1,"1229":1,"1237":1,"1247":2,"1259":1,"1270":3,"1271":1,"1276":1,"1286":8,"1300":1,"1301":1,"1311":1,"1323":6,"1324":3,"1339":2,"1342":1,"1348":1,"1350":3,"1352":1,"1353":1,"1357":1,"1359":17,"1361":1,"1362":1,"1369":1,"1373":2,"1380":3,"1395":14,"1396":3,"1402":2,"1416":1,"1431":1,"1436":6,"1441":1,"1453":3,"1467":1,"1474":1,"1490":2,"1537":1,"1816":1,"1856":1,"1898":1,"1960":1,"1965":1,"1992":1,"1997":1,"2147":1}}],["exp",{"2":{"500":1,"1980":1},"3":{"499":1,"500":1,"1300":6,"1577":1,"1980":1,"1982":1}}],["expansion",{"3":{"86":1,"265":1,"1259":2,"1286":7,"1324":1,"1436":6,"1438":2,"1454":1,"1526":3,"1534":1,"1564":1,"1577":1,"1639":1}}],["expanding",{"3":{"1277":1,"1286":1,"1475":1}}],["expandoobject",{"3":{"1242":1,"1244":1,"1247":6}}],["expandrelational",{"2":{"698":1,"703":1},"3":{"698":1,"703":1,"1286":1}}],["expands",{"3":{"442":1,"674":1,"869":1,"1259":1,"1286":2,"1300":1,"1311":1,"1436":3,"1454":1,"1847":1}}],["expandedsessions",{"3":{"1395":1}}],["expanded",{"3":{"27":1,"135":1,"468":2,"476":1,"1243":1,"1247":1,"1256":1,"1276":1,"1286":1,"1310":1,"1339":1,"1395":1,"1436":4,"1577":1,"1988":1}}],["expand",{"1":{"561":1,"562":1,"563":1,"564":1,"565":1,"566":1,"567":1,"568":1},"3":{"0":6,"15":1,"26":2,"41":1,"293":2,"296":1,"561":1,"564":6,"566":2,"756":2,"759":1,"761":1,"891":1,"892":1,"893":2,"907":2,"932":1,"1012":1,"1018":1,"1212":2,"1275":1,"1276":2,"1286":11,"1311":3,"1395":3,"1436":1,"1455":6,"1459":1,"1461":2,"1526":2,"1545":2,"1577":2,"1591":2,"1600":1,"1664":1,"1728":1,"2232":2}}],["expert",{"3":{"2224":1,"2240":1}}],["expertise",{"3":{"1369":1,"2218":1}}],["experiment",{"3":{"1300":2}}],["experiences",{"3":{"860":1,"1417":1}}],["experience",{"0":{"1570":1,"2220":1},"2":{"1327":1},"3":{"820":1,"1051":1,"1216":1,"1259":1,"1271":1,"1286":2,"1311":1,"1323":5,"1324":5,"1327":1,"1339":4,"1350":1,"1354":1,"1359":1,"1396":4,"1402":1,"1415":1,"1416":2,"1417":5,"1436":12,"1440":1,"1450":1,"1456":1,"1461":1,"1464":2,"1486":1,"1488":1,"1492":1,"1493":1,"1499":1,"1526":1,"1535":1,"1554":1,"1577":1,"1581":1,"1582":1,"1583":1,"1591":1,"1597":1,"1605":1,"1739":1,"1750":2,"1796":1,"1956":1,"2131":1,"2220":1,"2240":1}}],["experienced",{"3":{"513":1,"1190":1,"2095":1}}],["expecting",{"3":{"1270":1,"1415":1,"1438":1}}],["expects",{"3":{"185":1,"564":1,"634":1,"743":1,"827":1,"831":1,"965":1,"1259":1,"1270":2,"1271":1,"1286":3,"1300":1,"1309":1,"1311":2,"1323":2,"1324":7,"1350":1,"1359":1,"1395":2,"1396":1,"1417":1,"1436":6,"1467":1,"1639":1,"1887":1,"1888":1,"1892":1,"2167":1}}],["expect",{"3":{"77":1,"139":1,"812":1,"1036":1,"1214":1,"1237":1,"1270":1,"1286":1,"1309":1,"1311":1,"1359":1,"1395":1,"1406":1,"1577":1,"1582":1,"1685":1,"1686":1,"1719":1,"1852":1,"1887":1,"2067":1,"2106":1,"2160":1}}],["expectations",{"3":{"689":1,"1270":1,"1300":1,"1301":1,"1436":5,"1455":1,"1547":1,"2033":1}}],["expectation",{"3":{"23":1,"572":1,"585":1,"838":2,"1090":1,"1286":1,"1300":1,"1309":1,"1311":1,"1323":1,"1359":1,"1395":1,"1436":6,"1438":1,"1492":1,"1591":1,"1596":1,"1899":1}}],["expecteddisabledstubs",{"3":{"1436":1}}],["expecteddependencies",{"3":{"1436":5,"1438":1}}],["expectedrequiresdependencies",{"3":{"1436":5,"1438":1}}],["expectedname",{"3":{"1436":10,"1438":1}}],["expectedsecret",{"3":{"1339":1}}],["expectedstepnames",{"3":{"459":1,"464":1,"1311":1,"1436":3,"1488":1}}],["expectedcontract",{"2":{"635":1,"1729":1,"2107":1},"3":{"633":1,"635":1,"1436":6,"1654":1,"1727":1,"1729":1,"2107":1}}],["expectedcommanddecorators",{"2":{"121":1},"3":{"1436":1}}],["expectedquerydecorators",{"2":{"121":1},"3":{"1436":1}}],["expected",{"3":{"0":3,"68":1,"108":2,"109":2,"110":1,"111":1,"126":1,"127":1,"130":1,"132":1,"137":1,"140":1,"141":1,"142":1,"243":1,"386":1,"472":1,"530":1,"565":1,"635":1,"757":1,"765":1,"790":1,"972":1,"973":1,"996":1,"1018":1,"1020":1,"1049":1,"1163":1,"1212":3,"1215":1,"1217":2,"1218":1,"1229":4,"1259":1,"1261":1,"1262":1,"1268":1,"1270":5,"1273":1,"1275":1,"1286":4,"1287":1,"1288":1,"1300":3,"1311":4,"1312":1,"1318":1,"1323":10,"1324":7,"1339":1,"1350":3,"1359":3,"1380":1,"1395":13,"1396":8,"1402":3,"1413":1,"1415":3,"1417":3,"1436":27,"1449":1,"1453":3,"1455":8,"1459":1,"1460":1,"1461":1,"1465":2,"1486":2,"1488":3,"1489":1,"1490":1,"1492":4,"1524":5,"1525":5,"1526":1,"1575":5,"1576":5,"1577":2,"1586":1,"1589":5,"1638":1,"1720":1,"1804":2,"1806":1,"1807":3,"1820":1,"1826":1,"1877":1,"1887":1,"1897":2,"1923":1,"1927":1,"1930":1,"1945":1,"1954":2,"1959":1,"2058":1,"2104":1,"2105":1,"2107":1,"2129":1,"2156":1,"2191":1,"2227":1,"2230":1,"2232":2}}],["expensive",{"0":{"2190":1},"3":{"0":4,"81":1,"108":1,"111":1,"176":1,"234":1,"311":1,"474":1,"516":1,"518":3,"519":1,"520":1,"619":1,"627":1,"683":1,"735":1,"776":1,"800":1,"811":2,"830":1,"921":1,"953":2,"965":1,"1049":1,"1051":2,"1066":1,"1067":1,"1099":3,"1100":1,"1104":1,"1123":1,"1218":1,"1229":2,"1237":1,"1247":2,"1270":4,"1286":1,"1310":1,"1324":1,"1328":1,"1339":2,"1359":5,"1395":3,"1396":2,"1417":1,"1436":5,"1441":1,"1455":2,"1475":1,"1490":1,"1555":1,"1684":1,"1804":1,"1812":1,"1840":1,"1854":1,"1862":1,"1901":1,"1902":1,"1905":1,"1907":1,"1958":1,"1998":1,"1999":1,"2000":1,"2002":1,"2155":2,"2158":1,"2160":2,"2174":1,"2190":1}}],["expiries",{"3":{"1270":1,"1323":1}}],["expiring",{"3":{"534":1,"539":1,"1292":1,"1324":1,"1396":2,"1436":1,"1438":1}}],["expiryrule",{"3":{"1436":6}}],["expiryskew",{"3":{"1324":7,"1417":2}}],["expiryinpast",{"3":{"1300":1}}],["expiry",{"3":{"0":7,"150":1,"159":1,"201":1,"207":2,"209":1,"243":1,"255":1,"302":1,"305":2,"372":1,"458":1,"474":1,"497":2,"498":1,"499":6,"500":1,"505":1,"506":1,"507":2,"509":1,"513":1,"514":1,"529":1,"534":2,"536":3,"537":2,"538":1,"539":3,"627":1,"628":1,"708":1,"853":1,"854":1,"855":1,"905":2,"906":1,"998":1,"1160":1,"1162":1,"1212":3,"1263":1,"1267":1,"1270":1,"1288":1,"1298":2,"1300":31,"1301":3,"1311":2,"1323":5,"1324":14,"1332":1,"1396":5,"1415":3,"1417":2,"1436":12,"1438":2,"1630":1,"1635":1,"1639":2,"1641":4,"1764":1,"1765":2,"1767":3,"1922":1,"1968":3,"1971":1,"1980":1,"1981":1,"1982":3,"1984":1,"1985":1,"2002":1,"2066":2,"2069":1,"2096":1,"2138":2,"2167":3,"2193":1}}],["expiration",{"3":{"0":1,"243":3,"259":1,"388":3,"389":1,"733":4,"1300":1,"1301":24,"1311":7,"1668":1,"1708":1,"1922":2,"1923":1}}],["expireunpaidorderinternalcommand",{"2":{"539":1,"813":1,"814":1,"2189":1},"3":{"539":2,"813":1,"814":1,"2189":1}}],["expireunpaidorderinternalcommandhandler",{"2":{"539":1,"674":1},"3":{"539":2,"674":2,"813":1}}],["expireunpaidorder",{"2":{"534":1,"794":1,"2167":1},"3":{"0":1,"534":1,"794":1,"2167":1}}],["expirestrandedunpaidordersasync",{"2":{"2167":1},"3":{"2167":1}}],["expiresin",{"3":{"1641":2}}],["expiresatunixseconds",{"3":{"1300":5}}],["expiresat",{"3":{"905":3,"1300":3,"1339":2,"1436":1}}],["expires",{"3":{"0":2,"19":1,"20":1,"27":1,"392":1,"458":2,"459":2,"460":1,"461":1,"498":1,"536":1,"707":1,"788":1,"793":2,"794":1,"881":1,"905":1,"907":1,"1028":1,"1029":1,"1044":1,"1074":1,"1183":1,"1255":1,"1259":6,"1270":3,"1275":1,"1294":1,"1300":8,"1301":3,"1311":6,"1318":1,"1323":4,"1324":5,"1339":1,"1359":1,"1395":2,"1396":4,"1417":2,"1429":1,"1436":1,"1438":1,"1467":1,"1639":1,"1641":5,"1841":1,"1909":1,"1911":1,"1917":1,"1918":1,"1922":1,"1947":1,"1981":1,"2066":1,"2096":1,"2167":1,"2169":1,"2189":1,"2192":1}}],["expiredflag",{"3":{"1436":2}}],["expired",{"2":{"790":1,"1770":1},"3":{"0":2,"350":1,"499":2,"500":1,"513":1,"536":3,"608":1,"612":1,"768":1,"790":1,"813":1,"853":2,"854":1,"855":1,"856":1,"904":1,"905":5,"996":1,"997":1,"1026":1,"1042":1,"1212":1,"1255":1,"1263":1,"1270":5,"1286":2,"1287":1,"1288":1,"1289":1,"1290":3,"1294":1,"1298":1,"1300":43,"1301":2,"1311":1,"1323":7,"1324":16,"1358":1,"1359":3,"1380":1,"1396":1,"1408":1,"1415":3,"1431":1,"1436":4,"1467":1,"1641":5,"1708":2,"1747":1,"1765":3,"1770":1,"1897":1,"1916":1,"1934":1,"1948":1,"1968":2,"1972":1,"1975":1,"1982":5,"1985":4,"2158":2,"2163":1,"2167":2,"2188":1}}],["expire",{"3":{"0":1,"536":1,"540":1,"793":1,"1270":1,"1283":1,"1286":1,"1300":2,"1301":1,"1311":2,"1324":3,"1395":1,"1415":1,"1436":1,"1438":1,"1631":1,"1635":1,"1767":3,"2197":1}}],["expo",{"3":{"1340":1,"1342":1,"1350":3,"1359":3,"1395":1}}],["exponent",{"3":{"279":1,"1259":1,"1275":1,"1286":1,"1292":1}}],["exponentially",{"3":{"1841":1}}],["exponential",{"3":{"0":4,"15":1,"19":1,"23":1,"72":1,"73":1,"150":1,"175":1,"281":1,"282":1,"285":1,"640":1,"818":1,"827":1,"881":1,"1041":1,"1212":1,"1256":1,"1259":2,"1275":1,"1292":1,"1300":2,"1323":4,"1324":3,"1330":1,"1339":2,"1395":1,"1396":2,"1415":1,"1526":1,"1576":1,"1577":1,"1641":1,"1665":2,"1667":1,"1707":1,"1842":1,"1903":1,"1910":1,"2000":1,"2001":1,"2002":2,"2074":1,"2183":1,"2232":1}}],["exposing",{"3":{"41":1,"60":1,"188":1,"206":1,"225":1,"300":1,"413":1,"939":1,"1237":2,"1239":2,"1270":4,"1286":5,"1300":2,"1309":3,"1311":5,"1312":1,"1323":3,"1324":7,"1339":1,"1350":6,"1359":7,"1368":1,"1369":2,"1380":1,"1382":1,"1395":3,"1396":3,"1402":1,"1415":4,"1417":3,"1431":1,"1436":6,"1488":2,"1651":1,"1815":1,"1831":1,"1962":1,"1964":1,"2023":1}}],["exposure",{"3":{"0":1,"177":1,"459":2,"461":1,"465":1,"481":1,"498":1,"501":2,"520":1,"691":1,"735":1,"792":1,"799":2,"801":1,"802":1,"981":1,"1019":1,"1135":1,"1237":1,"1247":2,"1270":2,"1286":1,"1300":4,"1307":1,"1311":2,"1323":1,"1324":2,"1359":7,"1396":3,"1424":1,"1436":3,"1477":1,"1492":1,"1524":1,"1532":1,"1534":1,"1641":1,"1923":1,"1980":1}}],["expose",{"0":{"1291":1},"3":{"76":1,"141":1,"397":1,"507":1,"545":1,"940":1,"1168":2,"1237":1,"1247":2,"1270":1,"1280":1,"1300":3,"1310":1,"1311":8,"1312":1,"1323":2,"1324":2,"1333":1,"1339":3,"1350":1,"1359":2,"1372":1,"1380":1,"1395":3,"1396":4,"1436":12,"1442":1,"1445":2,"1488":1,"1600":1,"1667":1,"1877":1,"1928":1,"1991":1,"2193":1,"2239":1}}],["exposes",{"3":{"0":4,"24":1,"31":1,"68":1,"78":1,"81":1,"102":1,"160":1,"174":1,"243":1,"329":1,"330":1,"341":1,"459":1,"469":1,"507":1,"545":1,"547":2,"549":1,"578":1,"599":1,"618":1,"649":1,"657":1,"698":1,"725":1,"727":1,"840":1,"854":1,"869":1,"905":1,"924":1,"959":1,"988":1,"996":1,"1018":1,"1042":1,"1059":1,"1060":1,"1067":1,"1083":1,"1123":1,"1161":1,"1168":1,"1175":2,"1212":1,"1237":4,"1239":1,"1241":2,"1244":1,"1247":6,"1257":1,"1259":1,"1264":5,"1267":1,"1270":5,"1273":1,"1285":1,"1286":13,"1287":1,"1290":1,"1293":1,"1296":1,"1300":14,"1301":5,"1303":1,"1306":1,"1309":2,"1310":3,"1311":10,"1316":2,"1318":1,"1320":1,"1323":5,"1324":11,"1332":1,"1336":1,"1337":1,"1339":2,"1341":1,"1342":1,"1350":8,"1359":12,"1366":1,"1369":5,"1371":2,"1378":2,"1379":1,"1380":6,"1383":1,"1385":1,"1395":14,"1396":17,"1400":1,"1402":2,"1408":1,"1415":12,"1416":3,"1417":8,"1420":2,"1421":1,"1427":2,"1429":2,"1431":2,"1432":1,"1435":1,"1436":15,"1441":1,"1444":1,"1453":1,"1455":1,"1465":1,"1467":1,"1488":2,"1526":1,"1577":2,"1607":1,"1630":3,"1651":1,"1662":1,"1664":2,"1667":1,"1715":1,"1741":1,"1755":1,"1776":2,"1782":1,"1790":1,"1794":1,"1810":1,"1811":1,"1815":2,"1816":1,"1871":1,"1875":1,"1889":1,"1918":1,"1932":1,"1982":1,"1988":1,"2000":1,"2007":1,"2014":1,"2021":1,"2057":1,"2092":1,"2104":1,"2122":1,"2126":1,"2156":1,"2185":1}}],["exposed",{"3":{"0":2,"53":1,"92":1,"93":1,"94":1,"100":1,"130":1,"156":1,"160":1,"207":1,"243":1,"292":1,"305":1,"599":1,"743":1,"751":1,"881":1,"883":1,"924":1,"1050":1,"1100":2,"1228":1,"1237":3,"1239":1,"1240":1,"1247":2,"1259":1,"1262":1,"1270":4,"1286":3,"1290":1,"1297":1,"1300":9,"1310":1,"1311":4,"1312":4,"1323":6,"1324":4,"1330":1,"1339":4,"1343":1,"1347":1,"1350":11,"1354":1,"1359":12,"1369":2,"1380":2,"1391":1,"1395":2,"1396":4,"1398":1,"1402":3,"1407":2,"1415":1,"1416":2,"1432":1,"1436":11,"1441":1,"1467":1,"1475":1,"1548":1,"1550":1,"1591":1,"1630":2,"1632":2,"1639":3,"1641":1,"1647":1,"1670":1,"1755":1,"1765":1,"1776":1,"1790":1,"1937":1,"2075":1,"2138":1}}],["exportforbidden",{"3":{"1323":2,"1415":1}}],["exportfilenameprefix",{"3":{"741":1,"1311":1}}],["exportparameters",{"3":{"1300":1}}],["exporting",{"3":{"1264":1,"1270":1,"1300":1,"1309":1,"1359":1,"1415":3,"1416":1,"1436":1,"1455":1,"1467":2}}],["exportcalendarasync",{"3":{"1380":2}}],["exportcalendar",{"3":{"1203":5,"1207":16,"1300":6,"1350":1,"1356":3,"1359":15,"1438":1,"1496":1}}],["exportcontenttype",{"3":{"725":1,"1311":2}}],["exporttestcontroller",{"3":{"1199":2,"1207":1}}],["exporttestentity",{"3":{"1199":8,"1207":1}}],["exporttestdto",{"3":{"1199":6,"1207":1}}],["exportmoney",{"3":{"1199":3,"1207":1}}],["exportrowscoperequirederrorcode",{"3":{"1311":1}}],["exportrow",{"3":{"1199":2,"1207":1}}],["exportrowlimitheadername",{"2":{"741":1},"3":{"741":1,"1311":1}}],["exportability",{"3":{"744":1}}],["exportable",{"3":{"725":1,"743":1,"1311":1,"1356":1,"1359":5,"1487":1}}],["exportasync",{"2":{"318":1,"324":2,"743":1},"3":{"318":2,"324":2,"725":1,"741":3,"743":4,"1311":14,"1323":2,"1359":1,"1372":2,"1380":17,"1415":5,"1438":1,"1496":1,"1995":1}}],["exportuserdataregistrationtests",{"3":{"1199":1,"1207":2,"1415":2,"1438":2}}],["exportuserdatahandler",{"3":{"724":4,"1199":3,"1203":1,"1207":2,"1300":2,"1309":1,"1323":3,"1396":5,"1410":2,"1415":22,"1535":1,"1600":1}}],["exportuserdatahandlertests",{"2":{"724":1},"3":{"724":1,"1199":1,"1207":3,"1415":2,"1438":2}}],["exportuserdatahandlerbasetests",{"3":{"1199":1,"1207":7,"1323":4,"1438":2}}],["exportuserdatahandlerbase",{"2":{"723":1,"725":1,"1299":1,"1403":1,"1672":1,"2067":1},"3":{"0":1,"723":1,"725":3,"727":1,"728":1,"1199":4,"1203":1,"1207":2,"1212":1,"1270":2,"1299":1,"1300":11,"1322":5,"1323":18,"1403":1,"1410":1,"1415":11,"1438":1,"1496":2,"1672":1,"2067":1}}],["exportuserdataquery",{"2":{"723":1,"726":1},"3":{"726":1,"1199":6,"1203":1,"1207":2,"1311":1,"1323":3,"1410":2,"1415":8}}],["exportuserdata",{"2":{"1500":1},"3":{"585":1,"724":2,"725":4,"727":1,"728":1,"1203":8,"1207":26,"1300":4,"1309":1,"1322":2,"1323":17,"1396":2,"1410":3,"1415":21,"1438":1,"1500":1}}],["exporteventcalendarhandlertests",{"3":{"1199":1,"1207":2,"1359":2,"1438":1}}],["exporteventcalendarhandler",{"3":{"1199":2,"1203":1,"1207":2,"1300":5,"1356":6,"1359":6,"1438":1}}],["exporteventcalendarquery",{"3":{"1199":5,"1203":1,"1207":2,"1359":3,"1380":1,"1496":1}}],["exporter",{"2":{"397":1,"1333":1,"2010":1,"2156":1,"2159":1},"3":{"395":1,"397":2,"399":1,"741":4,"744":1,"1213":1,"1311":6,"1333":2,"1339":6,"1443":3,"1467":1,"2010":2,"2156":1,"2159":1,"2160":2}}],["exporters",{"3":{"0":1,"397":2,"399":1,"402":1,"409":1,"591":1,"608":1,"1333":4,"1339":6,"1443":5,"1492":1,"1577":3,"1923":1,"2010":2,"2014":1,"2047":1,"2157":4,"2159":1,"2160":1}}],["exported",{"0":{"1333":1},"3":{"0":3,"47":1,"396":1,"407":1,"428":1,"440":1,"556":1,"591":2,"764":1,"766":1,"899":1,"1089":1,"1213":1,"1311":3,"1323":1,"1324":1,"1339":5,"1350":2,"1359":13,"1396":6,"1402":1,"1404":1,"1410":1,"1415":6,"1416":3,"1417":2,"1435":1,"1436":3,"1441":1,"1456":1,"1467":1,"1473":1,"1475":1,"1492":2,"1631":1,"1670":1,"1765":1,"2047":1,"2215":1}}],["exportsectionunavailable",{"3":{"1323":2}}],["exportsessioncalendarhandlertests",{"3":{"1199":1,"1207":2,"1359":2}}],["exportsessioncalendarhandler",{"3":{"1199":2,"1203":1,"1207":2,"1300":5,"1356":4,"1359":4}}],["exportsessioncalendarquery",{"2":{"1375":1},"3":{"1199":4,"1203":1,"1207":2,"1359":3,"1375":1,"1380":3,"1496":1}}],["exportshapetestcontroller",{"3":{"1199":2,"1207":1}}],["exportshapetestdto",{"3":{"1199":3,"1207":1}}],["exports",{"3":{"0":2,"81":1,"324":2,"397":1,"400":1,"404":2,"408":1,"557":1,"583":1,"585":3,"591":1,"725":2,"728":1,"741":1,"743":1,"821":1,"1203":8,"1207":24,"1247":1,"1259":1,"1270":1,"1300":5,"1311":3,"1312":2,"1323":1,"1339":1,"1350":2,"1359":6,"1372":1,"1380":2,"1396":24,"1402":2,"1417":3,"1436":14,"1438":2,"1443":2,"1444":1,"1455":1,"1456":1,"1460":1,"1465":1,"1488":1,"1490":1,"1535":1,"1545":1,"1631":2,"1764":1,"1765":2,"1895":1,"2004":1}}],["export",{"0":{"1299":1,"1308":1,"1356":1,"1410":1},"1":{"722":1,"723":1,"724":1,"725":1,"726":1,"727":1,"728":1,"729":1,"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1,"1403":1,"1404":1,"1405":1,"1406":1,"1407":1,"1408":1,"1409":1,"1410":1,"1411":1,"1412":1,"1413":1,"1414":1,"1415":1},"2":{"690":1,"916":1,"1478":1,"1766":1},"3":{"0":14,"18":1,"39":1,"41":1,"95":3,"96":2,"104":2,"318":3,"321":2,"324":2,"325":1,"330":1,"397":1,"399":1,"408":1,"440":1,"545":1,"583":1,"585":3,"586":3,"650":2,"690":2,"692":4,"694":1,"696":2,"709":1,"722":1,"723":2,"724":6,"725":10,"727":12,"728":2,"729":1,"738":1,"740":3,"741":18,"742":4,"743":13,"744":2,"745":1,"896":2,"914":2,"916":2,"973":1,"976":1,"1018":1,"1020":2,"1026":2,"1028":1,"1044":1,"1192":4,"1201":1,"1202":2,"1203":4,"1207":10,"1212":6,"1229":1,"1256":1,"1259":1,"1270":1,"1286":1,"1299":2,"1300":21,"1307":1,"1308":1,"1309":49,"1311":59,"1312":3,"1317":2,"1322":2,"1323":32,"1324":4,"1328":1,"1333":1,"1339":8,"1350":3,"1351":1,"1356":3,"1359":18,"1371":2,"1372":7,"1373":1,"1380":76,"1396":58,"1402":2,"1403":3,"1404":2,"1405":1,"1410":2,"1415":67,"1416":2,"1417":6,"1436":9,"1437":2,"1438":17,"1441":2,"1443":7,"1446":1,"1448":1,"1450":2,"1455":2,"1467":7,"1469":1,"1470":1,"1476":1,"1478":4,"1482":2,"1484":1,"1487":4,"1496":7,"1526":3,"1534":2,"1535":1,"1545":2,"1567":1,"1575":1,"1577":3,"1582":3,"1586":1,"1590":1,"1591":3,"1631":5,"1639":1,"1660":1,"1662":1,"1666":7,"1667":1,"1668":1,"1670":2,"1672":1,"1677":1,"1720":1,"1746":2,"1747":2,"1749":1,"1751":4,"1764":1,"1765":4,"1766":1,"1772":4,"1841":1,"1898":1,"1988":5,"1991":1,"1995":10,"1997":1,"2014":1,"2067":5,"2068":2,"2126":1,"2128":1,"2156":1,"2159":1,"2160":2,"2171":1,"2192":1,"2232":4}}],["exploiting",{"3":{"2119":1}}],["exploits",{"3":{"1323":1,"1324":1,"1436":1,"1447":1}}],["explodes",{"3":{"1436":1}}],["exploding",{"3":{"1300":1}}],["explosion",{"3":{"1247":1,"1286":2,"1864":1}}],["exploring",{"3":{"2228":1}}],["explore",{"3":{"2212":1,"2244":1}}],["explorer",{"3":{"446":1,"448":4,"1050":1,"1311":4,"2131":1,"2132":1}}],["exploration",{"3":{"740":1}}],["explainable",{"3":{"1350":1,"1359":2,"1396":2}}],["explainswhatismissinganddoesnotcalltheservice",{"3":{"1436":1}}],["explains",{"3":{"1000":1,"1193":1,"1216":1,"1229":1,"1237":3,"1247":8,"1259":8,"1270":4,"1271":1,"1286":21,"1300":23,"1301":2,"1309":5,"1311":8,"1323":10,"1324":20,"1328":1,"1339":20,"1344":1,"1350":10,"1359":15,"1369":5,"1395":20,"1396":24,"1397":1,"1402":7,"1405":1,"1415":15,"1416":3,"1417":7,"1427":1,"1436":21,"1443":1,"1445":1,"1453":1,"1456":1,"1459":1,"1465":1,"1467":4,"1476":2,"1489":1,"1496":1,"1497":1,"1658":1,"1685":1,"1705":1,"1802":1,"2003":1,"2089":1,"2167":1,"2176":1,"2178":1,"2211":1}}],["explain",{"3":{"982":1,"990":1,"1237":1,"1247":5,"1259":1,"1270":2,"1271":1,"1286":6,"1300":5,"1301":1,"1311":2,"1312":2,"1313":1,"1323":4,"1324":1,"1339":1,"1350":5,"1359":4,"1380":1,"1395":3,"1396":1,"1402":1,"1413":1,"1415":1,"1436":2,"1439":1,"1443":1,"1449":1,"1455":1,"1502":1,"1515":1,"1552":1,"1639":1,"2166":1}}],["explained",{"3":{"905":1,"972":2,"1191":1,"1194":1,"1216":2,"1237":1,"1300":1,"1309":1,"1311":1,"1324":1,"1339":1,"1359":5,"1369":1,"1380":1,"1395":2,"1416":1,"1417":1,"1436":1,"1441":1,"1493":1,"1494":1,"1495":1,"1496":1,"1499":4,"1800":1}}],["explaining",{"3":{"0":1,"365":1,"373":1,"424":1,"484":1,"626":1,"700":1,"750":1,"820":1,"1190":1,"1222":1,"1237":3,"1259":1,"1271":1,"1286":1,"1300":4,"1311":1,"1323":1,"1324":2,"1339":2,"1359":2,"1362":1,"1369":1,"1395":2,"1396":3,"1436":5,"1489":1,"2143":1,"2197":1}}],["explanation",{"3":{"642":1,"1133":1,"1161":1,"1232":1,"1300":1,"1339":1,"1369":1,"1395":1,"1396":4,"1417":1,"1427":1,"1436":1,"1467":1,"1803":1}}],["explanatory",{"3":{"93":1,"616":1,"856":1,"1052":1,"1259":1,"1270":1,"1286":1,"1323":1,"1359":2,"1417":2,"1627":1}}],["explicitcapture",{"3":{"1309":2,"1427":1,"1436":2}}],["explicitsource",{"3":{"1286":2}}],["explicitkeyinsertrequested",{"3":{"1286":1}}],["explicitkeyinsert",{"3":{"1286":8}}],["explicitkeyinsertgroup",{"2":{"1280":1},"3":{"1175":2,"1199":4,"1203":1,"1207":2,"1278":1,"1280":2,"1286":12,"1496":1}}],["explicitorderupdatecommandvalidator",{"3":{"1199":2,"1207":1}}],["explicitassemblyprovider",{"2":{"1284":1},"3":{"1199":2,"1203":1,"1207":1,"1284":1,"1286":4}}],["explicitly",{"2":{"1844":1},"3":{"0":8,"15":1,"24":1,"25":1,"31":1,"39":1,"54":1,"70":1,"71":1,"73":1,"93":1,"100":1,"109":1,"135":1,"175":1,"184":1,"186":1,"193":1,"195":1,"196":1,"243":1,"317":1,"348":1,"353":1,"415":1,"556":1,"564":1,"571":1,"590":1,"595":1,"625":1,"627":1,"630":1,"657":1,"690":1,"698":1,"733":1,"741":1,"758":1,"775":1,"782":1,"819":1,"823":1,"827":1,"881":1,"897":1,"899":1,"905":1,"922":1,"931":2,"953":1,"954":1,"955":1,"963":1,"973":1,"996":1,"1012":1,"1014":1,"1051":1,"1059":1,"1118":1,"1124":1,"1133":1,"1190":1,"1193":1,"1212":3,"1229":4,"1237":4,"1241":1,"1247":7,"1257":1,"1259":10,"1270":8,"1271":4,"1275":1,"1276":2,"1286":34,"1288":1,"1297":2,"1299":1,"1300":28,"1301":6,"1302":1,"1304":1,"1309":8,"1310":2,"1311":18,"1312":3,"1323":19,"1324":22,"1330":1,"1333":1,"1337":1,"1339":8,"1343":1,"1347":1,"1349":1,"1350":8,"1352":1,"1354":1,"1359":29,"1362":3,"1369":2,"1379":1,"1380":6,"1385":1,"1386":1,"1388":1,"1395":31,"1396":25,"1402":6,"1404":1,"1409":1,"1415":25,"1416":1,"1417":11,"1422":1,"1427":1,"1431":1,"1432":1,"1436":18,"1438":2,"1441":2,"1442":1,"1443":2,"1444":1,"1447":2,"1453":1,"1455":4,"1458":1,"1459":1,"1460":1,"1462":1,"1467":4,"1470":1,"1474":1,"1475":1,"1476":1,"1488":4,"1489":1,"1494":1,"1496":2,"1508":1,"1554":1,"1572":1,"1577":1,"1591":2,"1631":2,"1639":1,"1667":1,"1685":1,"1686":1,"1709":1,"1724":1,"1799":1,"1827":1,"1842":1,"1844":1,"1853":1,"1861":1,"1876":1,"1881":1,"1897":1,"1898":1,"1899":1,"1916":1,"1958":1,"1968":1,"1992":1,"1997":2,"2002":1,"2032":1,"2033":1,"2041":1,"2043":1,"2044":1,"2055":1,"2063":1,"2067":1,"2086":1,"2097":1,"2131":1,"2167":1,"2169":1,"2232":1}}],["explicit",{"0":{"1955":1},"1":{"1080":1,"1081":1,"1082":1,"1083":1,"1084":1,"1085":1,"1086":1,"1087":1,"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1956":1,"1957":1,"1958":1,"1959":1},"2":{"1083":1,"1084":1,"1583":1,"2064":1},"3":{"0":14,"5":1,"7":1,"15":1,"19":1,"22":2,"24":1,"31":1,"39":1,"68":1,"72":2,"73":1,"74":1,"78":1,"86":1,"95":3,"99":1,"108":1,"115":1,"118":1,"128":1,"173":1,"186":2,"189":1,"193":1,"195":1,"198":1,"200":1,"201":1,"215":1,"219":1,"243":1,"255":1,"265":4,"266":1,"274":1,"291":1,"312":1,"318":1,"320":1,"321":1,"353":1,"358":1,"368":1,"370":1,"373":1,"386":1,"390":2,"393":1,"397":1,"398":1,"402":1,"418":1,"420":1,"427":1,"428":1,"485":1,"499":1,"518":1,"537":1,"549":3,"556":1,"557":1,"558":1,"564":1,"583":1,"584":1,"618":1,"626":1,"628":1,"633":1,"640":1,"674":1,"709":1,"715":1,"742":1,"766":1,"774":1,"799":1,"817":1,"840":1,"847":2,"881":1,"905":2,"914":2,"926":2,"931":2,"932":1,"933":1,"939":1,"941":1,"942":1,"947":1,"965":1,"971":1,"980":1,"982":1,"988":1,"996":1,"998":1,"999":1,"1012":1,"1013":1,"1035":1,"1050":3,"1052":2,"1060":1,"1066":1,"1067":1,"1080":1,"1083":3,"1084":2,"1092":1,"1108":1,"1117":1,"1133":1,"1175":3,"1212":2,"1213":1,"1219":1,"1221":1,"1229":8,"1233":2,"1236":1,"1237":10,"1239":1,"1241":1,"1247":7,"1249":2,"1253":1,"1256":1,"1257":1,"1259":14,"1263":2,"1264":1,"1269":1,"1270":12,"1271":3,"1274":1,"1275":1,"1278":3,"1280":4,"1281":2,"1286":66,"1288":1,"1300":33,"1301":8,"1309":21,"1310":2,"1311":21,"1312":11,"1316":1,"1317":1,"1318":1,"1320":2,"1322":1,"1323":25,"1324":41,"1331":3,"1333":2,"1338":2,"1339":25,"1342":1,"1343":1,"1345":1,"1350":30,"1352":1,"1353":1,"1354":1,"1358":2,"1359":70,"1364":1,"1369":15,"1373":1,"1375":1,"1376":1,"1380":13,"1383":1,"1390":1,"1392":1,"1393":1,"1394":1,"1395":29,"1396":42,"1399":1,"1401":1,"1402":23,"1411":1,"1415":36,"1416":12,"1417":19,"1427":2,"1436":47,"1438":1,"1440":1,"1441":1,"1442":1,"1443":2,"1444":1,"1445":1,"1448":1,"1451":1,"1453":1,"1454":3,"1455":2,"1458":1,"1467":4,"1469":1,"1474":1,"1475":2,"1476":1,"1486":1,"1487":1,"1489":1,"1496":1,"1510":1,"1526":4,"1534":1,"1541":1,"1543":1,"1544":1,"1545":1,"1547":1,"1553":3,"1556":1,"1566":1,"1576":1,"1577":12,"1582":1,"1583":1,"1591":1,"1631":2,"1632":1,"1639":1,"1641":1,"1651":1,"1667":1,"1673":1,"1677":1,"1686":1,"1693":1,"1711":1,"1749":1,"1765":1,"1795":1,"1830":1,"1841":1,"1842":1,"1858":1,"1889":2,"1890":1,"1892":1,"1898":3,"1903":1,"1904":1,"1910":2,"1911":1,"1948":1,"1950":1,"1951":2,"1952":2,"1955":2,"1957":1,"1958":3,"1959":3,"1962":1,"1963":1,"1964":1,"1965":2,"1982":1,"1994":1,"1995":1,"1996":1,"1997":1,"2001":1,"2019":1,"2030":3,"2033":1,"2063":1,"2064":2,"2067":1,"2083":1,"2085":1,"2086":1,"2127":1,"2138":1,"2142":1,"2152":1,"2157":1,"2160":1,"2161":1,"2162":1,"2165":1,"2169":2,"2175":1,"2179":1,"2185":1,"2186":1,"2198":1,"2208":1,"2232":3}}],["sf1nopko",{"2":{"1364":1},"3":{"1364":1,"1369":1}}],["svg",{"3":{"1324":1,"2125":1}}],["svc",{"3":{"248":1,"1301":3}}],["sdlc",{"3":{"1395":1,"2239":1}}],["sd",{"3":{"1324":3,"2076":1}}],["sdks",{"3":{"74":1,"1076":1,"1213":1,"1417":2,"1436":1,"1577":1}}],["sdk",{"2":{"877":1,"1449":1,"1460":1},"3":{"0":4,"72":5,"73":6,"74":1,"374":1,"439":1,"868":2,"869":1,"870":1,"873":1,"877":1,"980":3,"982":3,"1016":1,"1018":1,"1067":3,"1075":1,"1076":1,"1091":5,"1092":1,"1095":1,"1212":1,"1270":1,"1286":1,"1323":3,"1339":3,"1351":1,"1359":1,"1416":9,"1417":3,"1420":2,"1427":10,"1430":1,"1431":1,"1436":13,"1438":1,"1441":1,"1443":1,"1445":3,"1449":1,"1450":1,"1455":4,"1460":1,"1467":2,"1479":2,"1488":1,"1490":1,"1526":2,"1553":2,"1577":1,"1582":1,"1591":1,"1648":1,"1682":1,"1693":1,"1718":2,"1719":1,"2004":1,"2043":1,"2088":1,"2104":2,"2124":1,"2126":1,"2170":2,"2171":1,"2172":1,"2178":1,"2180":4}}],["sb",{"3":{"1323":1,"1436":3}}],["sbom",{"1":{"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1},"3":{"0":2,"367":1,"368":1,"369":2,"370":5,"371":4,"372":2,"373":3,"374":3,"375":4,"413":1,"415":1,"530":1,"531":1,"532":1,"590":1,"861":1,"870":1,"874":1,"1212":1,"1445":1,"1454":11,"1461":2,"1526":5,"1535":1,"1569":2,"1576":2,"1577":6,"1585":1,"1586":1,"1591":2,"1600":1,"1673":1,"1738":1,"1801":1,"2120":1,"2122":1,"2232":1}}],["s6672",{"3":{"1311":2}}],["s6932",{"3":{"790":1,"1309":1}}],["s5693",{"3":{"1380":1,"1395":1}}],["s5332",{"3":{"1309":1,"1312":1,"1323":1,"1359":1}}],["s5122",{"3":{"0":1,"774":2,"776":1,"777":1,"1311":1,"1339":1}}],["s4",{"3":{"1457":2}}],["s4275",{"3":{"1395":1}}],["s4830",{"3":{"1286":1,"1416":1}}],["s4035",{"3":{"0":1,"964":1,"1231":1,"1235":1,"1237":2,"1300":2}}],["sr",{"3":{"1359":3,"1597":1,"1607":1,"1609":1,"1741":1,"1743":1}}],["srp",{"3":{"1270":1,"1271":1,"1431":1,"1436":1,"1526":1,"1538":2,"1577":2,"1582":1,"1584":1}}],["srcset",{"3":{"1599":1}}],["src",{"3":{"0":2,"1":1,"147":2,"212":7,"213":3,"214":15,"215":3,"216":3,"219":23,"220":2,"324":1,"358":1,"361":1,"362":1,"366":1,"490":1,"491":1,"492":1,"493":1,"495":1,"582":1,"590":2,"756":2,"765":1,"773":2,"860":1,"914":1,"1003":1,"1011":1,"1012":3,"1017":1,"1090":2,"1094":1,"1095":1,"1212":4,"1216":2,"1237":2,"1271":1,"1300":8,"1311":1,"1324":53,"1336":2,"1339":16,"1350":1,"1359":11,"1380":7,"1391":1,"1395":11,"1417":4,"1428":1,"1430":2,"1436":3,"1438":1,"1441":1,"1443":2,"1445":1,"1496":1,"1502":1,"1515":1,"1525":4,"1526":9,"1531":1,"1575":1,"1577":14,"1582":2,"1586":1,"1591":5,"1596":1,"1600":3,"1793":1,"2000":2,"2001":2,"2002":1,"2075":1,"2086":1,"2117":1,"2118":1,"2120":1,"2147":3,"2149":6,"2150":17,"2151":1,"2152":2,"2153":4,"2158":1,"2172":1}}],["s2696",{"3":{"1417":1}}],["s2092",{"3":{"1300":1,"1311":1}}],["s2077",{"3":{"0":1,"1133":1,"1286":1,"1436":1}}],["s2326",{"3":{"1270":2}}],["s2245",{"3":{"1259":1,"1324":1}}],["s2221",{"3":{"1247":1,"1311":1,"1427":1}}],["s8970",{"3":{"1577":2,"1586":1,"1591":1}}],["s8",{"3":{"1201":1}}],["s1481",{"3":{"1727":1}}],["s107",{"3":{"1577":1,"1581":1,"1582":1,"1584":1}}],["s1075",{"3":{"1369":1,"1395":3,"1416":1,"1417":3}}],["s1144",{"3":{"1237":1}}],["s1200",{"3":{"1577":1,"1581":1,"1582":1,"1584":1}}],["s12",{"3":{"766":1,"769":1}}],["s1",{"3":{"766":1,"767":1,"769":1,"1591":1}}],["s+",{"3":{"609":1,"1476":1}}],["ssas",{"3":{"2219":1,"2220":1}}],["ssis",{"3":{"2219":1,"2220":2}}],["ssh",{"3":{"1526":1,"1535":1}}],["ssl",{"3":{"1416":2,"1770":1}}],["ss",{"3":{"1359":13}}],["ss9",{"3":{"448":1}}],["ssrs",{"3":{"2219":1,"2220":1}}],["ssrf",{"3":{"1358":1,"1359":1,"1369":1}}],["ssr",{"0":{"1298":1,"1968":1},"1":{"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"1966":1,"1967":1,"1968":1,"1969":1,"1970":1,"1971":1,"1972":1},"3":{"0":6,"204":1,"206":3,"207":3,"208":2,"209":3,"210":1,"264":1,"265":3,"266":1,"269":1,"272":2,"273":2,"274":1,"275":1,"277":2,"412":1,"458":1,"462":1,"486":1,"506":2,"507":2,"555":3,"556":3,"557":1,"560":2,"649":1,"664":1,"670":1,"682":1,"881":2,"1212":2,"1298":2,"1300":8,"1311":3,"1324":37,"1383":1,"1391":1,"1393":1,"1395":6,"1396":1,"1402":3,"1416":4,"1417":5,"1436":6,"1438":2,"1447":2,"1467":1,"1488":1,"1526":2,"1534":1,"1560":1,"1577":5,"1582":1,"1591":1,"1667":1,"1759":1,"1761":1,"1779":1,"1965":1,"1966":3,"1967":3,"1968":4,"1971":4,"1972":3,"2076":3,"2085":2,"2086":2,"2119":1,"2208":1,"2232":2}}],["snyk",{"3":{"2219":1,"2220":2}}],["snippet",{"3":{"1436":2,"2022":1}}],["snippets",{"3":{"955":1}}],["sniff",{"3":{"1286":1,"1369":1,"1415":4,"2128":1}}],["sniffed",{"3":{"1174":1,"1415":1}}],["sniffer",{"3":{"1114":1,"1116":2,"1117":3,"1118":2,"1285":1,"1286":2,"1347":1,"1359":2,"1380":1,"1438":1,"2232":1}}],["sniffs",{"3":{"1116":1,"1411":1,"1415":1}}],["sniffing",{"3":{"201":1,"1259":1,"1286":2,"1415":3,"1417":1,"1538":1,"1631":1,"1640":1,"2148":1}}],["snap",{"3":{"2082":1}}],["snappy",{"3":{"1324":1}}],["snapshotname",{"3":{"1436":2}}],["snapshotoutputvariable",{"3":{"1436":2}}],["snapshotted",{"3":{"692":1,"1286":3,"1300":5,"1324":1,"1339":1,"1369":2,"1390":1,"1396":1,"1398":1,"1402":7,"1429":1,"1436":1,"1438":1,"1526":1,"1630":2,"1631":1,"1930":1}}],["snapshotting",{"3":{"691":1,"1233":1,"1286":1,"1300":1,"1311":2,"1350":1,"1402":5,"1436":1,"1630":1,"1930":1}}],["snapshots=1",{"3":{"1432":1,"1436":3,"1438":1}}],["snapshots",{"1":{"1023":1,"1024":1,"1025":1,"1026":1,"1027":1,"1028":1,"1029":1,"1030":1},"3":{"21":1,"583":1,"739":1,"741":3,"743":1,"745":1,"988":1,"1023":1,"1144":1,"1178":1,"1209":1,"1212":1,"1251":2,"1259":1,"1274":1,"1286":4,"1311":2,"1323":4,"1324":6,"1350":2,"1359":1,"1395":4,"1396":1,"1402":3,"1417":5,"1427":1,"1432":1,"1436":5,"1438":3,"1577":1,"1632":1,"1660":1,"1671":1,"1686":1,"1687":1,"2055":1,"2060":1,"2199":1,"2232":1}}],["snapshot",{"2":{"633":1,"636":1},"3":{"0":3,"184":1,"186":1,"387":1,"484":1,"486":1,"487":1,"488":1,"489":1,"490":2,"491":2,"492":2,"493":2,"494":2,"536":1,"540":1,"556":1,"564":1,"572":2,"573":2,"585":1,"633":1,"636":1,"676":1,"690":1,"725":2,"727":1,"744":1,"782":2,"783":2,"801":1,"825":1,"891":1,"914":1,"990":2,"1034":1,"1050":1,"1059":1,"1060":1,"1142":1,"1199":3,"1203":1,"1207":1,"1247":1,"1273":2,"1275":2,"1279":1,"1283":3,"1286":40,"1297":1,"1299":1,"1300":16,"1301":3,"1311":3,"1322":1,"1323":7,"1324":17,"1339":3,"1347":1,"1349":1,"1350":12,"1355":1,"1356":1,"1359":9,"1375":1,"1380":4,"1391":1,"1395":21,"1396":42,"1398":1,"1402":8,"1410":2,"1415":5,"1416":3,"1417":6,"1431":1,"1432":1,"1436":61,"1438":10,"1455":2,"1488":2,"1496":2,"1497":1,"1500":1,"1524":1,"1525":3,"1526":4,"1531":3,"1535":2,"1577":4,"1586":1,"1631":1,"1640":1,"1643":1,"1663":1,"1671":1,"1675":1,"1686":8,"1697":1,"1727":1,"1749":4,"1765":4,"1767":1,"1769":2,"1801":1,"1929":3,"1930":1,"1933":1,"2044":3,"2049":1,"2055":1,"2059":2,"2062":1,"2069":1,"2079":2,"2199":1,"2200":1}}],["snackbars",{"3":{"1324":1,"1526":3,"1591":1,"1607":1,"1644":1,"1669":1,"1741":1,"1742":1}}],["snackbaroptions",{"3":{"1324":2}}],["snackbar",{"2":{"1687":1},"3":{"109":1,"265":3,"276":1,"881":1,"905":1,"954":1,"1324":17,"1394":1,"1395":29,"1396":5,"1401":1,"1402":1,"1417":2,"1432":1,"1436":13,"1488":2,"1526":4,"1577":1,"1591":1,"1653":3,"1669":1,"1671":1,"1686":1,"1687":1,"2072":1,"2079":1}}],["snake",{"2":{"1035":1},"3":{"0":2,"1034":1,"1035":1,"1273":1,"1286":1,"1311":2,"1856":1}}],["s3330",{"3":{"1311":1}}],["s3875",{"3":{"1237":1}}],["s3011",{"3":{"1286":1}}],["s30",{"2":{"1201":1},"3":{"1201":1}}],["s3",{"3":{"0":1,"764":1,"769":1,"1591":1}}],["s0",{"3":{"0":2,"764":4,"766":5,"767":3,"769":3,"1478":4,"1483":1,"1591":1,"1600":1}}],["skills",{"3":{"2239":2}}],["skim",{"3":{"1194":1,"1248":1,"1418":1,"1441":1,"1787":1,"1812":1,"2115":1}}],["skims",{"3":{"1132":1,"1436":1}}],["skipmigration",{"3":{"1684":1,"1688":1,"1722":1,"1729":2}}],["skiperror",{"3":{"1286":1}}],["skipwhenunavailable",{"2":{"1328":1,"1449":1},"3":{"1328":1,"1339":3,"1449":1}}],["skipwhen",{"2":{"1070":2},"3":{"1067":2,"1070":2,"1328":2,"1339":2,"1430":2,"1449":2}}],["skipreason",{"2":{"1070":1,"1328":1},"3":{"1067":4,"1070":2,"1328":2,"1339":3,"1430":3,"1449":2,"2056":1}}],["skipbearer",{"2":{"514":1},"3":{"507":1,"514":1,"1324":10}}],["skippable",{"3":{"764":3,"1455":1,"1596":1,"1599":1,"1892":1}}],["skipping",{"3":{"0":1,"208":1,"397":1,"557":1,"733":1,"759":1,"887":1,"889":1,"890":2,"1067":1,"1068":1,"1117":1,"1133":1,"1168":1,"1223":1,"1231":1,"1237":2,"1241":1,"1247":1,"1271":1,"1286":12,"1300":2,"1301":2,"1311":6,"1323":1,"1324":2,"1333":1,"1339":2,"1349":1,"1350":3,"1359":9,"1395":5,"1396":1,"1402":1,"1415":3,"1417":5,"1433":1,"1436":10,"1441":1,"1443":1,"1455":1,"1467":2,"1470":1,"1489":1,"1921":1,"1985":1,"2010":1,"2076":1,"2156":1,"2160":1,"2168":1,"2232":1}}],["skippedsoftdeleted",{"2":{"1632":1},"3":{"1350":2,"1359":4,"1632":1,"1639":1}}],["skipped",{"2":{"620":1,"624":1,"863":1},"3":{"0":6,"39":1,"120":1,"135":1,"157":1,"168":1,"201":2,"214":1,"292":1,"318":1,"335":1,"341":1,"370":1,"397":1,"534":1,"536":1,"564":1,"583":1,"593":1,"620":1,"624":1,"626":5,"627":1,"628":1,"649":1,"707":1,"709":1,"717":1,"749":1,"758":1,"766":4,"849":1,"861":4,"863":2,"889":1,"891":1,"990":1,"997":1,"1004":1,"1006":1,"1092":1,"1220":1,"1229":1,"1241":2,"1242":1,"1247":4,"1259":8,"1266":1,"1269":1,"1270":6,"1276":2,"1278":2,"1279":1,"1286":10,"1288":1,"1289":1,"1300":1,"1301":3,"1311":4,"1315":1,"1323":11,"1324":4,"1334":1,"1339":1,"1347":1,"1350":3,"1359":21,"1369":1,"1372":1,"1380":2,"1395":3,"1396":7,"1402":3,"1415":4,"1425":1,"1431":2,"1436":23,"1438":1,"1443":1,"1445":3,"1449":1,"1453":3,"1455":11,"1456":2,"1459":1,"1473":1,"1475":1,"1488":1,"1489":1,"1490":2,"1492":8,"1526":5,"1531":1,"1534":1,"1551":1,"1577":2,"1585":1,"1591":6,"1596":2,"1599":1,"1631":1,"1632":2,"1636":1,"1639":2,"1641":1,"1654":1,"1729":1,"1748":1,"1765":1,"1805":1,"1822":1,"1838":1,"1858":1,"1909":1,"1910":1,"1995":1,"2043":1,"2156":1,"2167":1,"2176":1,"2180":1}}],["skipsabstractcontrollers",{"3":{"1436":1}}],["skipsave",{"3":{"0":1,"926":3,"1265":1,"1270":7,"1359":4,"1415":2,"1666":1}}],["skipscoredsinceutc",{"3":{"1359":4}}],["skipsspeakersmissingfromrepository",{"3":{"1359":1}}],["skips",{"0":{"1844":1},"3":{"0":4,"22":1,"27":1,"117":1,"135":1,"166":1,"194":1,"195":2,"243":1,"244":1,"248":1,"255":1,"259":1,"296":1,"330":1,"337":1,"451":1,"452":1,"499":1,"528":1,"536":1,"538":3,"547":1,"556":1,"557":1,"559":1,"564":1,"573":1,"583":1,"599":1,"626":1,"628":1,"657":2,"715":1,"757":1,"790":2,"795":1,"889":1,"907":1,"914":1,"931":1,"980":1,"988":1,"1018":1,"1020":1,"1107":1,"1133":1,"1192":1,"1241":2,"1242":1,"1245":1,"1247":8,"1252":1,"1255":1,"1259":4,"1270":2,"1271":3,"1281":2,"1286":16,"1300":4,"1301":1,"1309":2,"1311":6,"1320":1,"1323":3,"1324":5,"1328":1,"1337":1,"1339":2,"1350":4,"1358":1,"1359":19,"1369":3,"1379":1,"1380":2,"1391":1,"1393":1,"1395":5,"1396":9,"1402":5,"1414":1,"1415":5,"1417":5,"1435":1,"1436":28,"1438":6,"1445":1,"1449":1,"1454":1,"1455":5,"1456":1,"1458":1,"1459":1,"1460":1,"1467":2,"1472":1,"1486":2,"1488":1,"1490":2,"1492":1,"1496":1,"1534":1,"1596":1,"1599":2,"1632":1,"1639":1,"1651":1,"1668":1,"1677":1,"1729":1,"1765":1,"1805":1,"1816":1,"1897":1,"1918":1,"1920":1,"1922":1,"1923":1,"1947":1,"1982":1,"1988":1,"2012":1,"2057":1,"2096":2,"2105":1,"2164":1,"2165":1,"2166":2,"2168":1}}],["skip",{"0":{"2025":1},"2":{"626":2,"642":1,"768":2,"1475":2,"1534":1,"1599":1},"3":{"0":8,"20":1,"24":1,"32":1,"103":2,"179":1,"195":1,"200":1,"201":2,"210":1,"276":1,"318":1,"335":1,"341":1,"355":1,"388":1,"453":1,"459":1,"528":1,"529":1,"538":1,"549":3,"554":1,"556":1,"559":1,"567":1,"586":1,"591":3,"620":1,"626":8,"627":2,"642":1,"708":1,"741":1,"743":1,"768":2,"863":1,"869":1,"916":1,"918":1,"924":1,"1005":1,"1006":1,"1020":2,"1067":6,"1070":1,"1084":1,"1184":1,"1212":2,"1229":2,"1240":1,"1242":1,"1243":2,"1247":19,"1259":6,"1270":3,"1271":1,"1280":1,"1286":19,"1291":1,"1300":6,"1301":2,"1309":6,"1310":2,"1323":5,"1324":8,"1333":1,"1339":17,"1350":2,"1353":1,"1359":14,"1391":1,"1395":8,"1396":13,"1400":1,"1401":1,"1402":3,"1415":10,"1417":3,"1426":1,"1430":4,"1436":12,"1438":3,"1443":2,"1445":1,"1449":1,"1453":1,"1454":1,"1455":13,"1456":2,"1475":5,"1486":1,"1490":1,"1492":4,"1496":2,"1500":1,"1525":1,"1526":4,"1534":1,"1577":1,"1589":1,"1591":2,"1596":1,"1598":1,"1599":2,"1600":1,"1607":2,"1611":2,"1613":1,"1639":1,"1644":2,"1651":1,"1664":1,"1684":1,"1686":2,"1720":1,"1727":1,"1741":2,"1808":1,"1815":1,"1841":1,"1845":1,"1858":1,"1860":1,"1865":1,"1871":1,"1882":1,"1891":1,"1911":1,"1918":1,"1921":1,"1922":1,"1950":1,"1984":1,"2010":1,"2029":1,"2056":1,"2068":1,"2087":1,"2101":1,"2107":1,"2111":1,"2121":1,"2126":1,"2131":1,"2145":1,"2155":1,"2157":1,"2171":1,"2180":1,"2190":1}}],["skuexistsasync",{"3":{"1751":1}}],["skus",{"3":{"1750":1,"1767":2,"1773":1}}],["skuid",{"3":{"1198":2,"1199":10,"1207":2}}],["sku",{"2":{"767":1,"769":3,"1465":1},"3":{"583":1,"766":5,"767":1,"769":3,"889":1,"897":1,"1436":5,"1465":2,"1467":1,"1473":1,"1478":6,"1599":1,"1746":2,"1748":4,"1750":2,"1751":2,"1764":2,"1767":2,"1768":1,"1769":3,"1772":2,"1773":1}}],["sketch",{"0":{"2084":1}}],["sketched",{"3":{"264":1,"963":1,"1079":1}}],["skeletons",{"3":{"1560":1}}],["skeleton",{"3":{"980":1,"1343":1,"1359":1,"1395":2,"1396":1,"1402":1,"1436":2}}],["skew",{"3":{"0":3,"146":1,"148":1,"178":1,"507":1,"513":1,"1059":1,"1256":1,"1259":1,"1293":2,"1298":1,"1300":2,"1311":1,"1324":9,"1417":1,"1436":3,"1467":1,"1648":1,"1655":1,"1727":1,"2198":2}}],["squash",{"3":{"1453":1}}],["squatting",{"3":{"1286":1}}],["squarely",{"3":{"1285":1,"1359":1,"2059":1}}],["square",{"3":{"0":1,"440":1,"1286":2,"1323":3,"1395":1,"1496":1,"2126":1}}],["sqs",{"3":{"0":1,"1075":1}}],["sqldatabase",{"2":{"1473":1,"1478":1},"3":{"1473":1,"1478":1}}],["sqllocation",{"3":{"1466":2,"1467":2,"1474":2}}],["sqlaadadminobjectid",{"3":{"1467":2}}],["sqlaadadminlogin",{"3":{"1467":1}}],["sqladminpassword",{"2":{"1466":1},"3":{"1466":2,"1467":1,"1526":1,"1534":1}}],["sqlauditingsettings",{"2":{"719":1},"3":{"719":1}}],["sqlauditconventiontests",{"2":{"719":1},"3":{"0":1,"719":2,"1199":1,"1207":2,"1436":4,"1467":2,"1591":1}}],["sql=true",{"3":{"1455":1,"1467":1,"1477":1,"1591":1,"1596":1,"1600":1}}],["sqlbaseenvironmentvariable",{"2":{"1429":1},"3":{"1429":1,"1436":2,"1488":1,"1490":1}}],["sqlthingconfiguration",{"3":{"1199":1,"1207":1}}],["sqlthing",{"3":{"1199":2,"1207":1,"1438":1}}],["sqlthingshipped",{"3":{"1199":2,"1207":1}}],["sqlqueryable",{"3":{"1286":2}}],["sqlquery",{"2":{"1132":1,"1133":1},"3":{"1132":1,"1133":1,"1286":2,"1436":1}}],["sqlqueryraw",{"2":{"1132":1},"3":{"0":1,"1132":1,"1133":1,"1431":1,"1436":3}}],["sqlsecurityauditevents",{"2":{"719":1},"3":{"719":2,"1467":2}}],["sqlserverfqdn",{"3":{"1467":1}}],["sqlserverbaseconnectionstring",{"3":{"1436":1}}],["sqlservermodel",{"3":{"1436":2}}],["sqlservermigrationsassembly",{"2":{"166":1,"633":1,"1446":1,"1684":1,"2097":1},"3":{"166":1,"633":1,"1286":5,"1436":1,"1446":1,"1684":3,"2097":1}}],["sqlserverretryingexecutionstrategy",{"3":{"1286":1}}],["sqlserverthingconfiguration",{"3":{"1199":1,"1207":1}}],["sqlserverthing",{"3":{"1199":3,"1207":1}}],["sqlserverindexedentity",{"3":{"1199":3,"1207":1}}],["sqlserverintegrationtestfixturebase",{"2":{"572":1,"914":1,"1212":1,"1428":1,"1429":1,"1488":1,"1490":1,"1600":1,"1671":1,"2055":1},"3":{"0":1,"572":6,"914":3,"916":1,"1199":5,"1207":2,"1212":1,"1428":1,"1429":3,"1436":8,"1488":2,"1490":2,"1496":1,"1600":1,"1671":1,"2055":1}}],["sqlserverpersistencetests",{"2":{"1453":1},"3":{"1198":1,"1199":2,"1207":9,"1437":1,"1438":2,"1453":1}}],["sqlserverdatasourceengine",{"2":{"1280":1},"3":{"1175":3,"1198":1,"1199":2,"1203":1,"1207":2,"1280":6,"1282":2,"1286":24,"1359":1}}],["sqlserverdbcontexttests",{"3":{"1199":1,"1207":3}}],["sqlserverdbcontextmodelsnapshot",{"3":{"1140":1,"1209":4}}],["sqlserverdbcontext",{"2":{"47":1,"200":1,"812":1,"1363":1,"1412":1,"1510":1,"1614":1,"1652":1,"1697":1,"1849":1,"1853":1,"1857":1},"3":{"47":2,"71":1,"166":1,"200":1,"674":2,"812":1,"819":3,"987":1,"1034":1,"1192":1,"1198":1,"1199":4,"1202":1,"1203":2,"1207":2,"1212":2,"1272":1,"1273":5,"1284":1,"1286":23,"1363":1,"1369":7,"1396":10,"1412":1,"1415":1,"1436":5,"1438":1,"1441":1,"1453":1,"1486":1,"1487":1,"1490":1,"1510":1,"1614":1,"1651":2,"1652":1,"1664":1,"1697":1,"1727":1,"1849":2,"1853":1,"1857":1,"2032":1}}],["sqlserverauditing",{"2":{"719":1},"3":{"719":1,"1467":1}}],["sqlserveruniqueconstraintviolationdetectortests",{"2":{"1199":1,"1438":1},"3":{"1199":1,"1207":2,"1286":1,"1438":2}}],["sqlserveruniqueconstraintviolationdetector",{"2":{"1203":1,"1284":1,"1323":1},"3":{"692":1,"1199":4,"1203":1,"1207":2,"1284":2,"1286":8,"1323":1,"1396":1}}],["sqlserverorsqlite",{"2":{"636":1},"3":{"633":1,"636":1}}],["sqlserver",{"2":{"170":1,"564":2,"631":1,"1174":1,"1203":1,"1327":1,"1361":1,"1369":1,"1437":1,"1438":1,"1487":1,"1497":1,"1724":1,"1728":1,"1729":1},"3":{"166":2,"170":2,"195":3,"341":2,"345":1,"350":1,"403":1,"564":8,"631":2,"633":1,"891":4,"1018":1,"1026":1,"1034":2,"1085":1,"1140":1,"1174":1,"1175":1,"1199":8,"1203":1,"1206":1,"1207":24,"1209":138,"1212":1,"1213":3,"1259":1,"1282":1,"1286":25,"1323":1,"1327":1,"1339":6,"1359":1,"1361":1,"1369":8,"1396":7,"1415":3,"1436":12,"1437":2,"1438":4,"1441":3,"1443":1,"1444":1,"1453":2,"1455":2,"1473":1,"1486":1,"1487":1,"1490":1,"1492":1,"1496":3,"1497":1,"1500":1,"1577":1,"1591":1,"1652":1,"1661":1,"1697":1,"1722":2,"1724":1,"1727":4,"1728":4,"1729":1,"1860":1,"1862":1}}],["sqlserverconnectionstring",{"2":{"166":1,"170":1,"1326":1,"1441":2,"1473":1,"1490":1,"1722":1,"1729":1},"3":{"166":1,"170":1,"1286":6,"1326":1,"1339":3,"1436":1,"1441":3,"1473":1,"1490":1,"1722":1,"1729":1,"2008":1}}],["sqlexception",{"3":{"692":1,"1286":6,"1359":1,"1396":1,"1438":1}}],["sqlconnection",{"3":{"1488":1,"1490":1}}],["sqlconnectionstringbuilder",{"3":{"1436":1}}],["sqlcommand",{"3":{"1436":1}}],["sqlcliententraauthenticationtests",{"3":{"1199":1,"1207":2,"1496":1}}],["sqlclient",{"2":{"1477":1},"3":{"692":1,"1207":2,"1259":1,"1286":1,"1339":3,"1436":2,"1443":1,"1477":1,"1534":1,"1677":1,"2010":1,"2154":1,"2157":1}}],["sqlcmd",{"2":{"291":1,"563":1},"3":{"0":1,"291":4,"563":1,"757":1,"1212":1,"1455":4,"1467":2,"1474":1}}],["sqliteconfig",{"3":{"1286":2}}],["sqliteconnectionstring",{"2":{"633":1,"1722":1,"1729":1},"3":{"166":1,"633":1,"1286":5,"1339":2,"1441":1,"1722":1,"1729":1}}],["sqlitetestdbcontext",{"3":{"1199":2,"1207":1}}],["sqlitetestentityconfig",{"3":{"1199":2,"1207":1}}],["sqlitetestentity",{"3":{"1199":4,"1207":1}}],["sqliteindexedentity",{"3":{"1199":3,"1207":1}}],["sqlitedatasourceengine",{"2":{"1175":1,"1280":1},"3":{"1175":3,"1176":1,"1198":1,"1199":2,"1203":1,"1207":2,"1280":5,"1286":14}}],["sqlitedbcontext",{"2":{"47":1,"1510":1,"1697":1,"1719":1,"1728":1,"1731":1,"1857":1},"3":{"47":1,"166":1,"200":1,"1198":1,"1199":4,"1203":1,"1207":2,"1212":2,"1272":1,"1273":2,"1286":13,"1323":2,"1436":5,"1510":1,"1664":1,"1697":1,"1719":1,"1727":2,"1728":2,"1731":1,"1849":1,"1857":1}}],["sqlite3",{"2":{"370":1},"3":{"370":1}}],["sqlitepclraw",{"2":{"370":1},"3":{"370":3}}],["sqlitemigrationsassembly",{"2":{"171":1,"633":1,"1279":1,"1323":1,"1719":1,"1722":1,"1727":1,"1728":1,"1731":1},"3":{"166":1,"171":1,"633":1,"1279":1,"1286":4,"1323":1,"1719":1,"1722":1,"1727":1,"1728":1,"1731":1}}],["sqlite",{"0":{"2053":1},"2":{"170":1,"631":1,"932":1,"1492":1,"1602":1,"1661":1,"1674":1,"1692":1,"1697":1,"1705":1,"1718":1,"1722":2,"1726":1,"1727":2,"1728":3,"1731":2},"3":{"0":11,"10":2,"45":1,"164":1,"166":6,"170":4,"201":1,"290":1,"296":1,"343":2,"345":1,"370":1,"371":1,"564":1,"631":2,"633":8,"676":1,"698":1,"889":2,"890":1,"892":1,"906":1,"932":1,"1033":3,"1034":6,"1035":1,"1036":1,"1044":1,"1050":3,"1067":2,"1174":2,"1175":3,"1176":1,"1177":1,"1178":3,"1179":1,"1180":1,"1212":8,"1213":4,"1247":1,"1259":2,"1273":1,"1274":1,"1279":5,"1280":2,"1281":1,"1282":3,"1284":1,"1286":99,"1309":1,"1311":9,"1319":1,"1320":1,"1321":1,"1323":8,"1326":1,"1332":1,"1339":5,"1361":1,"1369":2,"1396":2,"1436":15,"1437":1,"1438":11,"1441":3,"1443":2,"1453":1,"1487":1,"1489":1,"1490":5,"1492":3,"1496":1,"1500":3,"1510":1,"1526":2,"1577":3,"1582":1,"1583":1,"1585":2,"1602":1,"1614":2,"1616":1,"1618":1,"1661":2,"1664":2,"1674":1,"1692":1,"1697":2,"1705":1,"1707":3,"1718":3,"1719":4,"1720":1,"1721":1,"1722":6,"1723":1,"1726":1,"1727":11,"1728":7,"1729":3,"1731":5,"1752":1,"1763":1,"1774":1,"1849":1,"1853":1,"1854":2,"1855":1,"1856":4,"1860":4,"1861":2,"1862":1,"1876":1,"2053":2,"2059":2,"2060":2,"2192":1,"2230":1,"2232":1}}],["sql",{"0":{"1477":2},"1":{"1130":1,"1131":1,"1132":1,"1133":1,"1134":1,"1135":1,"1136":1,"1137":1},"2":{"566":1,"599":1,"769":1,"974":1,"1455":1,"1466":2,"1468":1,"1470":4,"1472":1,"1477":4,"1482":1,"1484":1,"1647":1,"1775":1,"2036":1},"3":{"0":39,"10":2,"13":1,"21":1,"24":1,"41":1,"45":1,"46":1,"47":3,"164":3,"165":2,"166":3,"168":1,"170":8,"171":1,"201":1,"235":1,"318":1,"330":1,"331":1,"341":2,"342":1,"343":1,"387":1,"395":1,"402":1,"403":2,"405":2,"471":1,"536":1,"543":1,"544":1,"546":1,"547":1,"549":1,"566":1,"572":1,"574":1,"598":1,"599":9,"600":1,"601":2,"605":1,"609":5,"611":1,"632":1,"633":3,"640":1,"644":1,"692":1,"698":1,"699":1,"713":2,"715":1,"718":1,"764":4,"765":3,"766":9,"769":2,"800":1,"860":1,"888":1,"889":4,"890":2,"892":1,"905":1,"907":1,"913":2,"914":2,"971":2,"972":2,"973":1,"974":2,"987":1,"988":1,"1004":1,"1033":4,"1034":15,"1035":2,"1036":2,"1044":1,"1050":3,"1067":1,"1069":1,"1085":1,"1130":1,"1132":4,"1133":4,"1134":1,"1135":1,"1144":1,"1162":1,"1167":1,"1174":2,"1175":5,"1176":2,"1178":2,"1180":1,"1192":1,"1212":13,"1217":1,"1236":1,"1237":4,"1239":1,"1241":5,"1242":1,"1246":1,"1247":20,"1259":7,"1263":1,"1270":3,"1272":1,"1273":2,"1276":1,"1277":1,"1279":7,"1280":6,"1281":1,"1282":2,"1284":2,"1286":193,"1290":1,"1300":5,"1301":2,"1309":8,"1310":8,"1311":7,"1312":2,"1317":1,"1318":1,"1320":1,"1321":1,"1323":2,"1326":2,"1327":2,"1332":4,"1339":13,"1342":2,"1350":7,"1352":3,"1353":1,"1358":1,"1359":28,"1360":1,"1361":1,"1369":12,"1380":5,"1396":25,"1401":1,"1402":7,"1406":1,"1410":1,"1415":9,"1428":1,"1429":5,"1430":1,"1436":52,"1437":7,"1438":20,"1440":1,"1441":11,"1443":4,"1446":2,"1451":1,"1453":4,"1455":16,"1456":2,"1457":7,"1460":3,"1463":1,"1465":2,"1466":5,"1467":40,"1468":1,"1469":1,"1470":5,"1471":2,"1472":2,"1473":9,"1474":10,"1475":7,"1476":3,"1477":24,"1478":8,"1482":3,"1483":2,"1484":2,"1486":9,"1487":3,"1488":4,"1490":11,"1492":4,"1496":3,"1510":1,"1524":4,"1525":2,"1526":9,"1532":1,"1534":6,"1535":1,"1575":1,"1577":6,"1585":1,"1589":1,"1590":1,"1591":16,"1595":1,"1596":2,"1597":1,"1599":2,"1600":4,"1602":1,"1611":6,"1614":1,"1617":1,"1618":1,"1641":1,"1647":1,"1648":2,"1653":4,"1654":3,"1657":1,"1664":2,"1665":1,"1670":2,"1671":1,"1673":1,"1677":1,"1678":1,"1682":1,"1684":2,"1685":1,"1689":3,"1693":1,"1697":1,"1698":1,"1700":1,"1704":1,"1717":2,"1718":3,"1719":1,"1720":1,"1721":1,"1723":1,"1724":1,"1725":1,"1727":2,"1731":2,"1752":1,"1763":2,"1774":1,"1775":2,"1815":3,"1840":2,"1844":1,"1848":1,"1849":1,"1851":1,"1853":1,"1854":4,"1855":1,"1856":3,"1857":1,"1858":2,"1859":2,"1860":3,"1861":2,"1863":1,"1864":1,"1865":1,"1867":1,"1871":1,"1872":1,"1876":1,"1877":1,"1922":1,"1986":1,"1988":1,"1989":2,"1994":1,"2003":1,"2004":2,"2005":1,"2007":1,"2013":2,"2033":1,"2034":5,"2036":4,"2037":1,"2043":3,"2053":1,"2055":1,"2059":4,"2111":1,"2158":1,"2167":1,"2191":1,"2192":1,"2193":1,"2213":1,"2219":2,"2220":4,"2224":1,"2230":1,"2232":4}}],["slept",{"3":{"1436":1}}],["sleeps",{"3":{"1259":1,"1323":1,"1324":1,"1436":1,"1671":1,"1841":2,"1948":1}}],["sleep",{"2":{"760":1},"3":{"757":1,"759":1,"760":2,"998":1,"1286":1,"1323":2,"1324":1,"1417":1,"1429":1,"1436":1,"1467":1,"1526":1,"1565":1,"1577":1}}],["sleeping",{"3":{"17":1,"881":1,"1160":1,"1259":1,"1275":1,"1324":1,"1396":1,"1436":1}}],["slugged",{"3":{"1496":1}}],["slugs",{"3":{"1480":1,"1496":1}}],["slug",{"2":{"1479":1,"1480":1},"3":{"1415":2,"1479":2,"1480":3}}],["slate",{"3":{"1324":1}}],["slashes",{"3":{"1359":1,"1436":3}}],["slash",{"3":{"420":1,"427":1,"1311":1,"1324":4,"1339":2,"1384":1,"1416":1,"1417":4,"1456":1}}],["slack",{"3":{"178":1,"593":1,"626":1,"627":1,"1286":1,"1324":1,"1415":1,"1455":1,"1492":1,"2047":1,"2220":1}}],["slsa",{"3":{"374":1,"1454":1,"1577":2}}],["sldexp",{"3":{"245":1,"1301":1,"1438":1}}],["sln",{"3":{"1728":1}}],["slnf",{"2":{"1215":2,"1455":1,"1459":1,"1486":2,"1494":1,"1531":1,"1611":1,"1616":1,"1617":1,"1619":1,"1775":1},"3":{"218":2,"374":1,"575":2,"609":2,"914":1,"954":2,"960":1,"1066":1,"1192":1,"1215":3,"1339":2,"1429":1,"1436":6,"1438":3,"1455":6,"1459":1,"1460":2,"1486":19,"1487":6,"1490":1,"1492":5,"1494":1,"1524":1,"1526":34,"1531":6,"1532":1,"1534":2,"1535":2,"1591":24,"1596":3,"1597":1,"1600":2,"1611":5,"1616":1,"1617":2,"1619":1,"1757":1,"1775":1}}],["slnx",{"2":{"139":1,"140":1,"373":1,"509":1,"511":1,"514":1,"528":1,"591":1,"868":1,"906":1,"974":1,"1066":1,"1215":1,"1434":1,"1454":1,"1503":1,"1617":1,"1619":1,"1649":1,"1655":1,"1657":1,"1684":1,"1690":1,"1704":1,"2120":1},"3":{"0":2,"135":3,"137":1,"139":1,"140":1,"142":1,"373":2,"413":1,"509":2,"511":1,"514":3,"528":2,"531":1,"591":1,"618":1,"633":1,"733":1,"737":1,"868":1,"906":1,"914":1,"972":1,"974":1,"980":1,"1034":1,"1066":2,"1067":1,"1192":1,"1215":2,"1323":2,"1339":2,"1417":2,"1434":2,"1436":21,"1438":4,"1453":3,"1454":3,"1455":1,"1456":1,"1460":2,"1486":12,"1487":8,"1490":4,"1492":4,"1494":1,"1503":1,"1577":14,"1611":1,"1617":2,"1619":1,"1649":1,"1654":2,"1657":2,"1684":1,"1686":1,"1690":2,"1704":2,"1727":1,"1728":1,"1729":1,"1923":1,"2097":1,"2120":1}}],["sli",{"3":{"1707":1,"1709":1}}],["slight",{"3":{"1324":1}}],["slightly",{"3":{"178":1,"283":1,"592":1,"804":1,"933":1,"1117":1,"1237":1,"1247":1,"1286":1,"1300":1,"1311":3,"1324":2,"1343":1,"1359":1,"1380":1,"1396":1,"1492":1,"1631":1,"1960":1,"2042":1,"2047":1}}],["slid",{"3":{"1324":1}}],["slideware",{"3":{"1783":1,"2227":1}}],["slides",{"3":{"1351":1,"1357":1,"1369":1,"1395":1,"1630":1,"1982":1,"2232":1}}],["slide",{"3":{"1115":1,"1350":1,"1380":1,"1395":1,"1467":1,"2001":1,"2239":1}}],["sliding",{"3":{"0":2,"173":1,"178":1,"280":1,"497":2,"499":1,"500":1,"1212":2,"1301":1,"1311":3,"1339":1,"1666":1,"2000":1,"2002":1}}],["slidingwindowratelimiteroptions",{"3":{"1311":1}}],["slidingwindow",{"2":{"2000":1},"3":{"0":1,"178":1,"1311":4}}],["slicing",{"3":{"1005":1,"1311":1,"1415":1,"1436":2,"2114":1}}],["sliceable",{"3":{"1323":1}}],["sliced",{"3":{"1311":1,"1485":1,"2114":1}}],["slicefixtures",{"3":{"1207":11,"1431":5,"1436":25,"1496":1}}],["slicecohesion",{"3":{"1576":1}}],["slicecohesiontests",{"3":{"1199":2,"1207":4,"1436":16,"1489":2,"1496":1,"1526":1,"1534":1,"1535":1,"1577":1,"1591":2}}],["slicecohesiontestsbase",{"2":{"1003":1,"2048":1},"3":{"1003":2,"1199":3,"1207":2,"1431":3,"1436":13,"1496":1,"1526":1,"1577":2,"1591":1,"1654":1,"2048":1}}],["slicecohesionfitnesstests",{"3":{"1199":1,"1207":3,"1431":4,"1436":13,"1496":1,"1577":1,"1586":1}}],["slices",{"3":{"132":1,"1006":1,"1207":1,"1300":2,"1351":1,"1359":7,"1370":1,"1399":1,"1402":2,"1431":6,"1436":13,"1489":1,"1496":1,"1514":1,"1526":3,"1542":2,"1577":6,"1582":2,"1583":2,"1586":1,"1591":1,"1684":1,"1686":3,"1701":1,"1726":1,"1727":2,"1728":1,"1730":1,"1731":3,"1932":1,"1937":2,"2142":1}}],["slice",{"0":{"1352":1,"1411":1,"1542":1,"1651":1,"1702":1,"1932":1,"2097":1},"1":{"1931":1,"1932":1,"1933":1,"1934":1,"1935":1,"1936":1,"1937":1,"1938":1,"1939":1,"1940":1,"1941":1},"3":{"122":1,"359":1,"387":1,"632":1,"633":2,"1003":2,"1119":1,"1192":4,"1201":1,"1212":3,"1216":1,"1224":1,"1247":3,"1259":1,"1265":3,"1270":8,"1286":3,"1300":1,"1304":2,"1309":2,"1310":2,"1311":5,"1314":1,"1323":5,"1324":4,"1348":1,"1350":3,"1351":2,"1352":5,"1357":1,"1359":69,"1362":1,"1369":1,"1370":1,"1380":1,"1396":16,"1399":1,"1402":7,"1403":1,"1411":1,"1415":11,"1431":6,"1436":31,"1488":2,"1489":1,"1496":8,"1497":1,"1499":1,"1514":1,"1525":2,"1526":7,"1530":1,"1531":1,"1532":1,"1534":2,"1535":2,"1542":6,"1572":1,"1577":6,"1581":1,"1582":3,"1583":2,"1586":1,"1591":2,"1597":1,"1651":1,"1661":2,"1671":1,"1684":1,"1686":2,"1691":1,"1694":1,"1701":4,"1726":2,"1727":3,"1730":4,"1779":1,"1796":1,"1804":1,"1865":1,"1883":1,"1922":1,"1930":1,"1931":3,"1932":1,"1934":1,"1935":2,"1937":1,"1939":1,"1940":2,"1941":6,"1960":1,"2048":1,"2087":1,"2094":1,"2097":3,"2114":2,"2208":1,"2230":3}}],["slimmer",{"3":{"784":1}}],["slipping",{"3":{"1996":1}}],["slipped",{"3":{"1286":1}}],["slips",{"3":{"1323":1,"1496":1,"1909":1}}],["slip",{"3":{"157":1,"856":1,"1311":1,"1323":1,"1339":1,"1396":1,"1402":1,"1415":1,"1432":1,"1436":5,"1872":1,"2048":1}}],["slogan",{"3":{"1663":1,"2057":1}}],["sloalerts",{"2":{"612":1,"613":1,"2046":1},"3":{"609":2,"612":1,"613":1,"1436":2,"1467":1,"1476":1,"1526":1,"2046":1}}],["sloalertspecs",{"2":{"607":1,"609":1,"611":1,"612":1,"613":1,"1016":1,"1019":1,"1474":1,"2046":1},"3":{"0":1,"607":3,"609":3,"611":1,"612":1,"613":1,"1016":1,"1018":1,"1019":1,"1212":1,"1436":6,"1467":4,"1474":1,"1476":2,"1526":1,"1577":1,"1591":2,"1600":1,"2046":1,"2158":1}}],["slos",{"3":{"609":3,"914":1,"1018":1,"1436":2,"1467":3,"1566":1,"1574":1,"1575":1,"1577":1,"1578":1,"1581":1,"1582":1,"1583":1,"1707":1,"2158":1}}],["slowmo",{"3":{"1436":2,"1488":1}}],["slowing",{"3":{"1259":1,"1300":1,"1486":1}}],["slowly",{"3":{"1123":1,"1300":1,"1324":2,"1339":1,"1340":1,"1380":1,"1396":1,"1402":1,"1416":1,"2000":1,"2011":1}}],["sloworkbook",{"3":{"609":1,"1474":1,"1526":1,"1577":1}}],["slowdown",{"3":{"593":1,"1380":1,"1436":1,"2048":1}}],["slows",{"3":{"592":2,"1436":1,"1456":1,"2047":2}}],["slowbenchmark",{"2":{"591":1},"3":{"591":1}}],["slower",{"3":{"509":1,"511":1,"539":1,"717":1,"996":1,"1247":1,"1270":1,"1286":1,"1311":1,"1339":2,"1359":1,"1395":1,"1415":1,"1436":2,"1441":1,"1453":1,"1534":1,"1989":1,"2049":1}}],["slowest",{"3":{"0":1,"727":1,"1069":1,"1270":1,"1339":3,"1433":1,"1436":1,"1449":1,"1453":2,"1454":1,"1455":1,"1474":2,"1488":1,"1490":1,"2034":1}}],["slow",{"0":{"1902":1},"3":{"235":1,"236":1,"309":1,"311":1,"383":1,"459":1,"520":2,"539":1,"591":1,"709":1,"759":1,"765":1,"818":1,"821":1,"829":1,"833":1,"860":1,"996":1,"1020":1,"1042":1,"1102":1,"1259":1,"1270":1,"1286":2,"1300":1,"1301":3,"1307":1,"1309":1,"1311":2,"1323":2,"1324":5,"1332":1,"1337":1,"1339":4,"1357":1,"1359":2,"1380":1,"1390":1,"1395":5,"1396":6,"1402":1,"1415":1,"1416":1,"1417":3,"1433":1,"1436":7,"1438":1,"1441":1,"1443":1,"1446":1,"1447":1,"1449":1,"1455":1,"1459":2,"1460":1,"1475":1,"1487":1,"1488":1,"1491":1,"1549":1,"1551":1,"1570":1,"1668":1,"1671":1,"1708":1,"1889":1,"1902":1,"1922":1,"1944":1,"1946":1,"1989":1,"2007":1,"2014":1,"2032":1,"2047":1,"2050":1,"2051":1,"2053":1,"2060":1,"2188":1}}],["sloppy",{"3":{"135":1,"2067":1}}],["slots",{"3":{"319":1,"321":1,"471":1,"1012":1,"1013":1,"1247":1,"1301":3,"1311":1,"1324":1,"1359":5,"1380":1,"1402":2,"1415":1,"1453":1,"1479":2,"1480":2,"1554":1,"1555":1,"1572":1,"1577":1,"1631":1,"1994":1}}],["slot",{"3":{"0":1,"235":1,"265":1,"273":1,"299":1,"304":1,"499":1,"753":2,"774":1,"888":1,"891":1,"904":1,"1012":1,"1013":2,"1033":1,"1034":1,"1124":1,"1212":1,"1270":3,"1271":1,"1286":3,"1300":1,"1301":3,"1304":2,"1307":1,"1309":2,"1311":4,"1323":4,"1324":24,"1332":2,"1339":3,"1350":5,"1352":1,"1359":18,"1369":5,"1380":2,"1396":5,"1402":2,"1415":6,"1416":3,"1417":6,"1436":3,"1458":1,"1459":1,"1479":1,"1480":2,"1489":1,"1496":5,"1531":1,"1554":2,"1631":1,"1637":1,"1779":1,"1876":1,"1945":1,"1957":1,"2000":1,"2083":1,"2084":1,"2118":1,"2123":1,"2134":1}}],["slo",{"0":{"1709":1},"1":{"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"613":1,"614":1},"3":{"0":4,"177":1,"403":1,"606":1,"607":3,"609":11,"612":1,"759":1,"765":1,"914":1,"971":1,"1212":1,"1431":1,"1436":6,"1455":2,"1466":1,"1467":16,"1469":3,"1474":6,"1476":6,"1482":2,"1489":2,"1526":3,"1535":1,"1550":1,"1575":2,"1577":6,"1582":1,"1583":2,"1586":2,"1591":3,"1670":1,"1671":1,"1706":3,"1709":2,"2001":1,"2046":1,"2049":1,"2158":2,"2160":1,"2232":2}}],["spun",{"3":{"2135":1}}],["spurious",{"3":{"897":1,"898":1,"996":1,"1300":1,"1309":1,"1323":1,"1324":2,"1396":2,"1415":1,"1436":1,"1472":1,"1534":1,"1651":1,"1919":1}}],["splats",{"3":{"1395":1,"1436":2}}],["splice",{"3":{"219":1,"1324":1,"2150":1}}],["spliced",{"3":{"219":1,"1286":1,"1324":2,"1467":2,"2149":1,"2150":1}}],["splitter",{"3":{"1436":1}}],["splittoplevel",{"3":{"1436":3}}],["splitting",{"3":{"135":1,"185":1,"507":1,"530":1,"592":1,"642":1,"691":1,"757":2,"758":1,"785":1,"989":1,"1237":3,"1247":2,"1261":1,"1270":2,"1271":1,"1286":5,"1300":4,"1301":1,"1309":2,"1311":3,"1323":2,"1324":8,"1339":1,"1350":2,"1359":10,"1369":1,"1380":1,"1385":1,"1395":5,"1396":3,"1402":9,"1415":3,"1417":5,"1436":7,"1455":1,"1498":1,"1560":1,"1597":1,"1749":1,"1820":1}}],["splitfullname",{"3":{"1311":1}}],["splits",{"3":{"0":1,"165":1,"180":1,"505":1,"528":1,"574":1,"649":1,"759":1,"778":1,"781":1,"845":1,"905":1,"1175":1,"1178":1,"1241":1,"1247":2,"1259":1,"1280":1,"1286":9,"1300":6,"1309":2,"1310":1,"1311":2,"1312":1,"1324":1,"1338":1,"1343":1,"1350":1,"1359":4,"1369":1,"1383":1,"1395":4,"1396":1,"1402":2,"1416":1,"1430":1,"1436":1,"1446":2,"1460":1,"1467":2,"1492":1,"1496":2,"1526":1,"1535":1,"1788":1,"1815":2,"1837":1,"1865":1,"1938":1,"1942":1,"1950":1,"1959":1,"1995":1,"1997":1,"2185":1,"2193":1,"2232":1}}],["split",{"0":{"1252":1,"1385":1},"3":{"0":8,"35":1,"47":2,"58":1,"59":1,"60":1,"62":1,"91":1,"92":1,"96":1,"97":1,"139":1,"145":1,"160":1,"161":1,"168":2,"226":1,"266":1,"320":1,"379":1,"380":1,"440":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":2,"495":1,"507":1,"509":1,"513":1,"514":1,"522":1,"526":1,"529":1,"530":1,"543":2,"545":3,"547":3,"549":2,"550":1,"554":1,"560":1,"582":1,"587":1,"616":1,"631":1,"633":2,"638":1,"652":1,"657":1,"664":1,"677":1,"682":1,"698":1,"707":1,"726":2,"731":1,"733":2,"741":1,"757":1,"758":1,"804":1,"805":1,"826":1,"827":1,"828":1,"844":1,"849":1,"862":1,"867":1,"872":1,"875":2,"923":1,"926":1,"927":1,"938":1,"941":1,"983":1,"1004":3,"1010":1,"1011":1,"1013":1,"1018":1,"1019":2,"1069":1,"1101":1,"1177":1,"1201":2,"1212":4,"1229":2,"1234":1,"1237":2,"1238":2,"1240":1,"1243":2,"1244":1,"1247":9,"1249":1,"1254":1,"1256":1,"1259":5,"1265":1,"1270":4,"1273":1,"1274":2,"1278":3,"1280":1,"1281":1,"1286":22,"1293":1,"1300":13,"1301":3,"1309":4,"1310":10,"1311":12,"1316":1,"1323":8,"1324":24,"1328":1,"1339":7,"1341":1,"1349":1,"1350":11,"1352":1,"1359":35,"1362":1,"1363":1,"1366":2,"1369":5,"1371":2,"1375":2,"1380":17,"1385":1,"1389":2,"1395":27,"1396":27,"1402":13,"1403":1,"1404":1,"1413":1,"1414":1,"1415":16,"1416":4,"1417":12,"1423":1,"1424":1,"1425":1,"1427":1,"1431":1,"1436":35,"1438":3,"1441":2,"1447":5,"1450":1,"1454":4,"1455":7,"1456":1,"1461":1,"1462":1,"1463":1,"1467":2,"1469":2,"1470":1,"1471":2,"1474":1,"1486":2,"1487":1,"1489":1,"1492":2,"1496":10,"1498":1,"1514":1,"1526":2,"1530":1,"1531":1,"1532":1,"1535":1,"1555":1,"1577":4,"1585":2,"1589":1,"1591":2,"1595":1,"1596":1,"1597":1,"1599":1,"1600":2,"1611":1,"1614":1,"1619":1,"1638":1,"1651":1,"1674":1,"1675":1,"1702":1,"1755":1,"1776":2,"1783":2,"1788":1,"1789":2,"1790":1,"1792":4,"1793":1,"1796":1,"1807":1,"1815":1,"1817":1,"1847":2,"1849":1,"1852":3,"1853":3,"1864":2,"1865":2,"1866":1,"1867":1,"1884":1,"1893":1,"1902":1,"1915":1,"1932":1,"1942":1,"1948":1,"1950":1,"1951":1,"1959":1,"1977":1,"1979":1,"1985":1,"1988":1,"1996":1,"1997":1,"2007":1,"2014":1,"2015":3,"2025":1,"2026":1,"2027":1,"2028":2,"2038":1,"2063":1,"2111":1,"2126":1,"2127":1,"2128":1,"2149":1,"2154":1,"2179":1,"2185":1,"2198":1,"2232":2}}],["spymapper",{"3":{"1199":2,"1207":1}}],["sp",{"2":{"518":1},"3":{"518":2,"1100":2,"1323":1,"1436":1,"1534":1}}],["sprint",{"3":{"1986":1,"2043":1}}],["sprinkling",{"3":{"1913":1,"2160":1}}],["sprinkled",{"3":{"1292":1,"1309":1}}],["spring",{"3":{"1348":1,"1350":2,"1355":1,"1359":4,"1393":1}}],["sprawling",{"3":{"1300":1}}],["sprawl",{"3":{"1286":1,"1526":1,"1542":1}}],["sprayed",{"3":{"1369":1,"1998":1}}],["spraying",{"3":{"280":1,"1311":1,"1406":1,"1415":1}}],["spray",{"3":{"175":1,"177":1,"1311":5,"1339":1,"1406":1,"1438":1,"1599":1,"1600":1,"1999":2,"2001":2,"2002":1}}],["spreading",{"3":{"280":1,"1396":1,"1436":2}}],["spreadsheet",{"3":{"743":2,"1286":2,"1311":3}}],["spreadsheets",{"3":{"743":1}}],["spreads",{"3":{"22":1,"23":1,"603":1,"651":1,"1286":1,"1323":1,"1350":1,"1380":2,"1417":1,"1436":2,"1526":1,"1542":1}}],["spread",{"3":{"0":2,"80":1,"408":1,"956":1,"980":1,"1174":1,"1286":2,"1301":1,"1311":1,"1323":1,"1324":1,"1347":1,"1359":10,"1380":3,"1396":1,"1415":1,"1417":1,"1436":4,"1474":1,"1638":1,"2178":1}}],["spills",{"3":{"1324":1}}],["spirit",{"3":{"491":1,"1324":1}}],["spinners",{"3":{"1607":1,"1741":1}}],["spinner",{"3":{"1324":2,"1390":1,"1395":10,"1396":1,"1561":1,"1577":1,"1643":2,"1644":1,"2070":1}}],["spinning",{"3":{"1259":2,"1323":1,"1677":1,"2003":1}}],["spine",{"0":{"1345":1},"3":{"1248":1,"1259":1,"1287":1,"1288":1,"1340":1,"1345":1,"1403":1,"1500":1}}],["spins",{"3":{"1213":1,"1570":1}}],["spin",{"3":{"19":1,"237":1,"1324":1,"1948":1,"2053":1}}],["spikes",{"3":{"875":1,"1188":1,"1488":1}}],["spike",{"3":{"0":3,"58":1,"390":1,"609":2,"611":1,"863":1,"898":1,"1077":3,"1124":1,"1339":2,"1350":1,"1436":1,"1456":1,"1465":1,"1467":2,"1670":1}}],["spof",{"3":{"2038":1}}],["spofs",{"3":{"1476":1,"2033":1}}],["spooky",{"3":{"1556":1}}],["spoof",{"3":{"1309":1}}],["spoofed",{"3":{"1300":1,"1402":2}}],["spoofable",{"3":{"177":1,"751":1,"1286":2,"1311":1}}],["spoofing",{"3":{"0":1}}],["spoken",{"3":{"1417":3}}],["sportsesports",{"3":{"1395":1}}],["sporadic",{"3":{"484":1}}],["spotting",{"3":{"2048":1}}],["spotty",{"3":{"1641":1}}],["spots",{"3":{"0":1,"422":1,"759":1,"1270":1,"1396":1,"1416":1,"1436":1,"1474":1,"1537":2,"1797":1}}],["spot",{"3":{"0":2,"135":1,"422":1,"425":1,"429":1,"759":1,"761":1,"800":1,"988":1,"1259":1,"1339":1,"1396":1,"1405":1,"1436":8,"1438":1,"1449":2,"1492":1,"1496":21,"1500":1,"2000":1,"2048":1}}],["sponsorvalidationrules",{"3":{"1207":10,"1271":4,"1350":3,"1359":37}}],["sponsorvisitlink",{"2":{"1394":1},"3":{"1394":1,"1395":2,"1396":1}}],["sponsorvisitroundtriptests",{"3":{"1199":1,"1207":3}}],["sponsorvisitresultdto",{"3":{"1199":8,"1203":1,"1207":2,"1396":15}}],["sponsorvisitrequestvalidatortests",{"3":{"1199":1,"1207":2}}],["sponsorvisitrequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1396":5}}],["sponsorvisitrequest",{"3":{"1199":7,"1203":1,"1207":2,"1396":9}}],["sponsorvisittests",{"3":{"1199":1,"1207":2,"1396":3,"1438":2}}],["sponsorvisitpage",{"3":{"1199":2,"1207":2}}],["sponsorvisits",{"2":{"690":2,"1396":1},"3":{"690":2,"1203":2,"1207":4,"1396":14}}],["sponsorvisit",{"2":{"690":1},"3":{"556":1,"690":1,"1199":5,"1203":1,"1207":3,"1395":1,"1396":38}}],["sponsorname",{"3":{"1350":2,"1380":2,"1396":2}}],["sponsornamerules",{"3":{"1199":2,"1203":1,"1207":1,"1353":1,"1359":6}}],["sponsornavigationpopulatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["sponsornavigationpopulator",{"3":{"1199":2,"1203":1,"1207":2,"1310":5,"1350":1,"1354":1,"1359":7}}],["sponsorbuilder",{"3":{"1199":3,"1207":2,"1436":1}}],["sponsorboothnumberrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":7}}],["sponsorupdateappliertests",{"3":{"1199":1,"1207":2}}],["sponsorupdateapplier",{"3":{"1199":2,"1203":1,"1207":2,"1270":1,"1350":1,"1354":1,"1359":8}}],["sponsorupdaterequestvalidatortests",{"3":{"1199":1,"1207":2}}],["sponsorupdaterequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":13}}],["sponsorupdaterequest",{"3":{"1199":7,"1203":1,"1207":2,"1350":1,"1359":16,"1380":1}}],["sponsorformfields",{"3":{"1350":1,"1395":5}}],["sponsorformmodel",{"3":{"1199":3,"1203":1,"1207":2,"1350":1,"1384":2,"1395":9}}],["sponsorfieldrules",{"3":{"1199":3,"1203":1,"1207":1,"1353":1,"1359":20}}],["sponsorwebsiteurlrules",{"3":{"1199":2,"1203":1,"1207":1,"1271":1,"1359":4}}],["sponsortests",{"3":{"1199":1,"1207":2,"1350":1,"1438":2}}],["sponsortwitterhandlerules",{"3":{"1199":2,"1203":1,"1207":1,"1359":4}}],["sponsortierinfo",{"3":{"1496":2}}],["sponsortiers",{"3":{"1395":2}}],["sponsortier",{"3":{"1199":25,"1203":1,"1207":2,"1342":1,"1350":10,"1359":3,"1369":5,"1392":1,"1395":11}}],["sponsorlogourlrules",{"3":{"1199":2,"1203":1,"1207":1,"1271":1,"1359":4}}],["sponsorlist",{"3":{"1199":3,"1203":1,"1207":2,"1324":2,"1350":2,"1383":2,"1392":2,"1395":20}}],["sponsorlistpage",{"3":{"1199":2,"1207":2}}],["sponsorlinkedinurlrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":6}}],["sponsorliveinfo",{"3":{"1199":8,"1203":1,"1207":2,"1349":1,"1350":7,"1359":1,"1378":1,"1380":3,"1396":2}}],["sponsorinfo",{"3":{"1496":2}}],["sponsoring",{"3":{"1395":1}}],["sponsorinvariantstests",{"3":{"1199":1,"1207":2,"1350":1}}],["sponsorinvariants",{"2":{"1344":1,"1362":1},"3":{"1199":14,"1203":1,"1207":2,"1344":2,"1350":8,"1359":34,"1362":1,"1369":7}}],["sponsorid",{"2":{"803":1,"1052":1,"1055":1},"3":{"690":3,"799":2,"803":1,"1052":1,"1055":1,"1350":2,"1359":2,"1380":1,"1396":34,"1415":2,"1436":1,"1526":1,"1627":2}}],["sponsoridentifiertype",{"2":{"468":1,"799":1,"1055":1},"3":{"468":1,"799":2,"1055":1,"1350":4,"1359":5,"1395":4,"1396":11}}],["sponsoreditmodel",{"3":{"1199":2,"1203":1,"1207":2,"1395":8}}],["sponsoreventidrules",{"3":{"1199":2,"1203":1,"1207":1,"1271":1,"1359":8}}],["sponsordetails",{"2":{"1394":1},"3":{"1394":1,"1395":1}}],["sponsordetailtests",{"3":{"1199":1,"1207":2}}],["sponsordetail",{"3":{"1199":2,"1203":1,"1207":2,"1350":1,"1384":2,"1388":1,"1392":2,"1395":33,"1396":1}}],["sponsordetailpage",{"3":{"1199":3,"1207":2}}],["sponsordescriptionrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":4}}],["sponsordtomappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["sponsordtomapper",{"3":{"1199":5,"1203":1,"1207":2,"1311":1,"1350":4,"1353":1,"1359":7}}],["sponsordto",{"3":{"1199":20,"1203":1,"1207":2,"1347":2,"1350":13,"1359":22,"1380":1,"1382":1,"1395":27,"1496":1}}],["sponsorconfiguration",{"2":{"1361":1},"3":{"1199":1,"1203":1,"1207":2,"1350":8,"1359":5,"1361":1,"1362":3,"1369":10}}],["sponsorcreatetests",{"3":{"1199":1,"1207":2}}],["sponsorcreate",{"3":{"1199":2,"1203":1,"1207":2,"1350":3,"1392":1,"1395":25}}],["sponsorcreaterequestvalidatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["sponsorcreaterequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":11}}],["sponsorcreaterequestmapper",{"3":{"1199":1,"1203":1,"1207":2,"1311":2,"1359":5}}],["sponsorcreaterequest",{"3":{"1199":8,"1203":1,"1207":2,"1270":1,"1350":1,"1359":13,"1380":1}}],["sponsorcreatemodel",{"3":{"1199":3,"1203":1,"1207":2,"1395":7}}],["sponsorcreatepage",{"3":{"1199":3,"1207":2}}],["sponsorchanged",{"3":{"782":1,"1199":3,"1203":1,"1207":2,"1345":1,"1350":10,"1359":2,"1438":1}}],["sponsorsmanage",{"3":{"1350":2,"1359":1,"1373":1,"1380":2}}],["sponsorships",{"3":{"1380":1,"1395":1}}],["sponsorshippacketurl",{"2":{"1387":1},"3":{"1350":2,"1359":6,"1369":2,"1387":1,"1395":4,"1526":1}}],["sponsorshippacketurlmaxlength",{"3":{"1350":2,"1359":2}}],["sponsorship",{"3":{"1271":1,"1340":1,"1342":3,"1350":5,"1359":10,"1364":1,"1369":4,"1380":1,"1384":1,"1392":2,"1395":12,"1436":1,"1438":1,"1455":1,"1463":1,"1467":1,"1474":1,"1629":1,"1631":2}}],["sponsorsortrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":4}}],["sponsorservice",{"3":{"881":1,"1199":6,"1203":1,"1207":2,"1369":1,"1382":3,"1395":9}}],["sponsorscontrollertests",{"3":{"1199":1,"1207":2,"1438":2,"1487":1}}],["sponsorscontroller",{"3":{"743":1,"1199":4,"1203":1,"1207":2,"1350":5,"1359":20,"1371":2,"1372":3,"1373":3,"1375":3,"1380":10,"1436":1}}],["sponsorscache",{"2":{"386":1},"3":{"386":1,"1350":1,"1379":1,"1380":2}}],["sponsors",{"0":{"1392":1},"2":{"1350":1,"1395":1,"1396":1},"3":{"0":1,"186":1,"556":1,"743":1,"837":1,"838":1,"881":1,"1004":1,"1203":40,"1207":112,"1270":1,"1271":4,"1310":4,"1311":2,"1342":3,"1346":2,"1347":1,"1348":2,"1349":1,"1350":37,"1351":2,"1352":1,"1353":1,"1359":127,"1363":1,"1364":1,"1369":18,"1375":1,"1380":9,"1381":1,"1382":3,"1383":4,"1384":3,"1387":1,"1388":1,"1392":6,"1395":69,"1396":13,"1415":1,"1433":1,"1436":1,"1437":1,"1438":6,"1447":1,"1487":1,"1496":1,"1526":1,"1621":1,"1625":1,"1627":6,"1629":1,"1631":7,"2240":1}}],["sponsor",{"2":{"1346":1},"3":{"0":2,"556":1,"583":1,"688":2,"690":7,"691":3,"924":1,"1199":28,"1203":1,"1207":2,"1212":1,"1270":1,"1271":5,"1310":4,"1311":1,"1340":1,"1342":12,"1343":2,"1346":3,"1349":1,"1350":76,"1351":1,"1352":3,"1354":1,"1355":1,"1359":141,"1361":1,"1362":2,"1369":22,"1375":1,"1380":11,"1381":1,"1383":1,"1387":2,"1388":1,"1392":3,"1393":1,"1395":83,"1396":103,"1415":1,"1436":2,"1438":11,"1466":1,"1467":1,"1487":5,"1496":4,"1526":4,"1627":2,"1629":1,"1631":10,"1638":1}}],["speeding",{"3":{"1301":1}}],["speed",{"3":{"459":1,"463":1,"1301":1,"1436":3,"1488":1,"1554":1,"1560":1,"1900":1,"1923":1,"2051":1}}],["speeds",{"3":{"133":1,"457":1,"465":1,"2100":1,"2106":3}}],["speechoptions",{"3":{"1417":2}}],["speechtotextoptions",{"3":{"1417":1}}],["speechtotext",{"3":{"1402":3,"1417":2}}],["speech",{"3":{"412":1,"415":1,"1192":1,"1202":1,"1203":1,"1395":1,"1416":2,"1417":16,"1496":1,"1669":2}}],["spell",{"3":{"526":1,"607":1,"611":1,"650":1,"727":1,"1247":3,"1286":3,"1300":3,"1301":2,"1323":1,"1324":1,"1326":1,"1339":1,"1352":1,"1359":2,"1369":1,"1396":2,"1405":1,"1406":1,"1415":5,"1436":3,"1444":1,"1596":1,"1814":1}}],["spellsoutgenericarguments",{"3":{"1436":3}}],["spells",{"3":{"390":1,"674":1,"1034":1,"1237":1,"1247":3,"1259":4,"1270":1,"1286":5,"1300":4,"1309":2,"1311":3,"1315":1,"1323":6,"1324":6,"1326":1,"1339":1,"1343":1,"1350":2,"1359":4,"1369":2,"1380":2,"1395":3,"1396":4,"1402":2,"1412":1,"1415":4,"1417":2,"1436":8,"1455":1,"1467":1,"1486":1,"1524":1,"1526":1,"1531":1,"1577":1,"2004":1,"2144":1}}],["spellings",{"3":{"892":1,"1247":2,"1286":3,"1296":1,"1297":1,"1324":1,"1339":1,"1350":1,"1436":1,"1596":1}}],["spelling",{"3":{"283":2,"633":4,"889":1,"974":1,"1068":1,"1247":1,"1270":1,"1286":7,"1300":1,"1323":1,"1343":1,"1369":1,"1395":1,"1396":1,"1402":1,"1415":2,"1417":1,"1436":9,"1596":1,"1722":1,"1729":1}}],["spelled",{"3":{"122":1,"793":1,"803":1,"938":1,"980":1,"1020":1,"1230":1,"1237":1,"1259":1,"1263":1,"1270":2,"1271":1,"1286":3,"1300":4,"1301":1,"1309":1,"1311":3,"1312":1,"1323":2,"1324":3,"1326":2,"1339":2,"1359":4,"1369":1,"1379":1,"1380":1,"1395":1,"1396":5,"1402":1,"1409":1,"1415":2,"1417":4,"1436":5,"1438":2,"1492":1,"1535":1,"2030":1,"2166":1}}],["spent",{"3":{"73":1,"818":2,"819":1,"872":1,"1259":1,"1283":1,"1286":1,"1293":1,"1300":3,"1311":1,"1324":1,"1339":3,"1408":1,"1418":1,"1473":1,"1483":1,"1667":1,"1843":1,"1980":1,"1982":1,"1985":1,"2170":1}}],["spending",{"3":{"151":1,"1293":1,"1436":1,"1438":1}}],["spends",{"3":{"19":1,"122":1,"592":1,"818":1,"1263":2,"1270":2,"1311":1,"1324":2,"1339":1,"1395":2,"1396":1,"1401":1,"1402":2,"1415":1,"1436":2,"1455":2,"1492":2,"1821":1,"1908":1,"2003":1,"2047":1}}],["spend",{"3":{"0":3,"178":1,"408":1,"517":1,"538":1,"650":1,"759":1,"760":1,"765":3,"767":2,"768":1,"831":1,"1017":1,"1018":3,"1019":3,"1020":3,"1041":1,"1090":1,"1091":2,"1092":1,"1093":3,"1212":1,"1229":1,"1300":1,"1311":2,"1324":2,"1330":1,"1339":2,"1350":2,"1359":3,"1369":2,"1380":1,"1395":1,"1396":1,"1402":1,"1422":1,"1425":1,"1426":1,"1427":2,"1435":1,"1436":3,"1438":1,"1442":2,"1456":2,"1457":2,"1460":1,"1467":7,"1476":1,"1490":1,"1496":1,"1526":3,"1553":1,"1568":2,"1577":2,"1591":1,"1678":1,"1679":1,"1683":1,"1788":1,"2006":1,"2156":1,"2160":1,"2168":1,"2170":1,"2177":3,"2179":1,"2180":2,"2183":1}}],["speakasync",{"3":{"1395":1,"1417":4}}],["speakable",{"3":{"882":1}}],["speak",{"0":{"2243":1},"3":{"243":1,"286":1,"346":1,"536":1,"800":1,"1301":1,"1311":1,"1312":1,"1331":1,"1338":1,"1339":6,"1350":1,"1417":2,"1446":1,"1447":1,"1656":1,"1670":1,"1928":1,"2025":1,"2116":1,"2216":1,"2243":1}}],["speaking",{"0":{"2216":1},"1":{"2238":1,"2239":1,"2240":1,"2241":1,"2242":1,"2243":1},"3":{"103":1,"856":1,"1050":1,"1053":1,"1417":3,"2238":2,"2244":1}}],["speaks",{"3":{"31":1,"97":2,"98":1,"99":1,"265":1,"331":2,"341":1,"433":1,"692":1,"905":1,"1067":1,"1134":1,"1217":1,"1241":1,"1270":1,"1271":3,"1300":2,"1309":1,"1311":1,"1326":1,"1331":1,"1337":1,"1339":4,"1350":2,"1359":1,"1395":2,"1396":2,"1417":5,"1430":1,"1436":1,"1440":2,"1444":1,"1447":1,"1685":1,"1831":2,"1874":1,"1888":1,"1928":1,"1988":2,"2009":2,"2025":1,"2083":1,"2141":1}}],["speakerprofiletests",{"3":{"1496":1}}],["speakeroverlap",{"3":{"1350":2,"1395":1}}],["speakername",{"3":{"1350":1,"1395":1}}],["speakernavigationpopulatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["speakernavigationpopulator",{"3":{"1199":2,"1203":1,"1207":2,"1310":5,"1350":2,"1354":1,"1359":10}}],["speakerresult",{"3":{"1247":1}}],["speakerrenamed",{"2":{"785":1},"3":{"785":1}}],["speakervalidationrules",{"3":{"1207":7,"1271":3,"1350":4,"1359":23}}],["speakervalidationrulestests",{"3":{"1199":1,"1207":4,"1359":6}}],["speakermanagementtests",{"3":{"1199":1,"1207":2}}],["speakertests",{"3":{"1199":1,"1207":2,"1350":1}}],["speakerbuilder",{"3":{"1199":11,"1207":2,"1436":1}}],["speakerwebsiteurlrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":2}}],["speakergithuburlrules",{"3":{"1199":2,"1203":1,"1207":1,"1271":1,"1359":5}}],["speakerformfields",{"3":{"1395":2}}],["speakerformmodel",{"3":{"1199":3,"1203":1,"1207":2,"1384":2,"1395":8}}],["speakerfeedbackauthtests",{"3":{"1199":1,"1207":2,"1438":2}}],["speakerfieldrules",{"3":{"1199":3,"1203":1,"1207":1,"1353":1,"1359":20}}],["speakerfirstnamerules",{"3":{"1199":3,"1203":1,"1207":1,"1271":1,"1353":1,"1359":5}}],["speakerentityqueryservicetests",{"3":{"1199":1,"1207":2,"1359":2}}],["speakerentityqueryservice",{"2":{"1244":1},"3":{"1199":2,"1203":1,"1207":2,"1242":2,"1244":3,"1247":2,"1354":2,"1359":9}}],["speakeremailrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":7}}],["speakereditmodeltests",{"3":{"1199":1,"1207":2}}],["speakereditmodel",{"3":{"1199":4,"1203":1,"1207":2,"1395":6}}],["speakerqrtests",{"3":{"1199":1,"1207":3,"1438":2}}],["speakerqr",{"3":{"1199":2,"1203":1,"1207":2,"1324":5,"1388":3,"1395":11,"1526":1}}],["speakerqrpage",{"3":{"1199":2,"1207":2}}],["speakerquestionanswernavigationpopulator",{"3":{"1496":1}}],["speakerquestionanswerid",{"3":{"1350":1}}],["speakerquestionansweridentifiertype",{"3":{"1350":3,"1359":1}}],["speakerquestionanswerscontroller",{"2":{"1632":1,"1639":1},"3":{"1632":1,"1639":2}}],["speakerquestionanswers",{"3":{"1310":1,"1350":3,"1359":4,"1369":1,"1436":1,"1630":2,"1632":2,"1639":1}}],["speakerquestionanswerconfiguration",{"2":{"1362":1},"3":{"1199":1,"1203":1,"1207":2,"1350":3,"1362":2,"1369":4}}],["speakerquestionanswerchanged",{"2":{"1345":1,"1631":1,"1632":1,"1634":1},"3":{"1199":3,"1203":1,"1207":2,"1345":1,"1350":6,"1631":1,"1632":3,"1634":2}}],["speakerquestionanswertests",{"3":{"1199":1,"1207":2,"1350":1}}],["speakerquestionanswerdtomappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["speakerquestionanswerdtomapper",{"3":{"1199":7,"1203":1,"1207":2,"1350":3,"1359":7}}],["speakerquestionanswerdto",{"2":{"1347":1},"3":{"1199":3,"1203":1,"1207":2,"1347":1,"1350":5,"1359":1}}],["speakerquestionanswer",{"2":{"1342":1,"1363":1,"1638":1,"1640":1},"3":{"1198":1,"1199":10,"1203":1,"1207":2,"1342":2,"1350":12,"1359":6,"1363":1,"1369":4,"1630":1,"1631":3,"1632":1,"1634":2,"1635":3,"1637":1,"1638":5,"1639":7,"1640":5}}],["speakerlastnamerules",{"3":{"1199":3,"1203":1,"1207":1,"1359":3}}],["speakerlocalities",{"3":{"1350":3,"1395":1}}],["speakerlocality",{"3":{"1350":2,"1395":1}}],["speakerlocalityhelpertests",{"3":{"1199":1,"1207":2,"1359":5}}],["speakerlocalityhelper",{"3":{"1199":3,"1203":1,"1207":3,"1347":1,"1350":6,"1359":18,"1496":2}}],["speakerlocalitysummary",{"3":{"1199":4,"1203":1,"1207":1,"1347":1,"1350":3,"1359":2}}],["speakerlookupservicetests",{"3":{"1199":1,"1207":2}}],["speakerlookupservice",{"2":{"1387":1},"3":{"1199":2,"1203":1,"1207":2,"1324":4,"1380":1,"1382":1,"1387":2,"1395":12}}],["speakerlist",{"3":{"1199":1,"1203":1,"1207":2,"1324":2,"1350":1,"1359":1,"1383":2,"1395":13}}],["speakerlistpage",{"3":{"1199":2,"1207":2}}],["speakerlinkbrokerflowtests",{"3":{"1199":1,"1207":2}}],["speakerlinkscontrollertests",{"3":{"1199":1,"1207":2,"1487":1}}],["speakerlinkscontroller",{"3":{"1199":2,"1203":1,"1207":2,"1350":5,"1359":14,"1371":2,"1373":2,"1380":8,"1395":4,"1436":1,"1496":1,"1535":1}}],["speakerlinked",{"3":{"1438":1,"1490":1,"1611":1}}],["speakerlinkedinurlrules",{"3":{"1199":2,"1203":1,"1207":1,"1271":1,"1359":2}}],["speakerlinkedtouserhandlertests",{"3":{"1199":1,"1207":3}}],["speakerlinkedtouserhandler",{"2":{"1413":1,"1611":1},"3":{"1199":2,"1203":1,"1207":2,"1259":2,"1350":1,"1413":2,"1415":9,"1524":1,"1526":1,"1534":1,"1611":1}}],["speakerlinkedtouser",{"2":{"195":1,"1341":1,"1355":1,"1451":1,"1612":1},"3":{"195":1,"1199":10,"1203":1,"1207":2,"1237":2,"1259":1,"1341":1,"1349":4,"1350":16,"1355":2,"1359":5,"1395":1,"1413":1,"1415":6,"1436":2,"1438":1,"1451":1,"1467":1,"1534":1,"1612":1}}],["speakerinvariantstests",{"3":{"1199":1,"1207":2,"1350":1}}],["speakerinvariants",{"2":{"1344":1,"1810":1},"3":{"1199":18,"1203":1,"1207":2,"1237":1,"1286":1,"1344":3,"1350":15,"1359":42,"1369":5,"1496":1,"1810":1}}],["speakerinfo",{"3":{"1199":28,"1203":2,"1207":2,"1359":9,"1369":1,"1387":1,"1395":15}}],["speakerids",{"3":{"1350":1,"1359":4,"1380":2,"1402":5}}],["speakerid",{"2":{"1386":2,"1813":2},"3":{"1198":2,"1199":9,"1207":2,"1247":1,"1350":24,"1359":50,"1362":1,"1369":14,"1375":1,"1380":16,"1386":2,"1388":1,"1395":46,"1415":1,"1438":1,"1488":1,"1631":3,"1632":4,"1634":2,"1635":4,"1640":1,"1641":7,"1813":2}}],["speakeridentifiertype",{"2":{"470":1,"472":1,"475":1,"476":1,"477":1,"478":1,"798":1,"803":1,"804":1,"805":1,"1049":1,"1054":1},"3":{"470":2,"472":1,"475":2,"476":2,"477":1,"478":2,"798":1,"803":1,"804":1,"805":1,"1049":1,"1054":1,"1212":1,"1286":1,"1350":22,"1359":45,"1380":4,"1395":20,"1402":7,"1404":1,"1415":2}}],["speakerunlinked",{"3":{"1438":1}}],["speakerunlinkedfromuserhandlertests",{"3":{"1199":1,"1207":3}}],["speakerunlinkedfromuserhandler",{"2":{"1413":1,"1611":1},"3":{"1199":2,"1203":1,"1207":2,"1259":2,"1350":1,"1359":1,"1413":1,"1415":4,"1526":1,"1534":1,"1611":1}}],["speakerunlinkedfromuser",{"2":{"195":1,"1341":1,"1349":1,"1355":1,"1413":1,"1451":1,"1612":1},"3":{"195":1,"1199":8,"1203":1,"1207":2,"1237":2,"1259":1,"1341":1,"1349":2,"1350":14,"1355":1,"1359":9,"1395":1,"1413":1,"1415":2,"1436":1,"1438":1,"1451":1,"1467":1,"1612":1}}],["speakerusersearch",{"3":{"1199":2,"1203":1,"1207":2,"1385":2,"1395":5,"1415":2}}],["speakerupdateauthtests",{"3":{"1199":1,"1207":2}}],["speakerupdateapplier",{"3":{"926":1,"1199":3,"1203":1,"1207":2,"1270":4,"1354":2,"1359":11}}],["speakerupdaterequestvalidatortests",{"3":{"1199":1,"1207":2}}],["speakerupdaterequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":9}}],["speakerupdaterequest",{"3":{"1199":7,"1203":1,"1207":2,"1359":15,"1380":1}}],["speakerclaims",{"3":{"1406":1,"1415":1}}],["speakercount",{"3":{"1350":1}}],["speakercommandvalidatortests",{"3":{"1207":1,"1359":2}}],["speakerconfiguration",{"2":{"1361":1},"3":{"657":1,"1199":1,"1203":1,"1207":2,"1286":3,"1350":8,"1359":1,"1361":1,"1362":3,"1369":4}}],["speakercreated",{"3":{"1631":1,"1634":1}}],["speakercreaterequestvalidatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["speakercreaterequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":11}}],["speakercreaterequestmappertests",{"3":{"1199":1,"1207":2,"1438":1}}],["speakercreaterequestmapper",{"3":{"1199":2,"1203":1,"1207":2,"1359":15}}],["speakercreaterequest",{"3":{"1199":9,"1203":1,"1207":2,"1270":1,"1359":34,"1380":1}}],["speakercreate",{"3":{"1199":1,"1203":1,"1207":2,"1395":20}}],["speakercreatemodel",{"3":{"1199":3,"1203":1,"1207":2,"1395":6}}],["speakercreatepage",{"3":{"1199":5,"1207":2}}],["speakercategoryitemid",{"3":{"1350":1,"1359":5}}],["speakercategoryitemidentifiertype",{"3":{"1350":4,"1359":4,"1395":4}}],["speakercategoryitemconfiguration",{"2":{"1362":1},"3":{"1199":1,"1203":1,"1207":2,"1350":1,"1359":1,"1362":2,"1369":6}}],["speakercategoryitemchanged",{"2":{"1345":1,"1631":1,"1634":1},"3":{"1199":4,"1203":1,"1207":2,"1345":1,"1350":6,"1359":2,"1631":1,"1634":1}}],["speakercategoryitemnavigationpopulatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["speakercategoryitemnavigationpopulator",{"3":{"1199":2,"1203":1,"1207":2,"1310":1,"1359":9}}],["speakercategoryitemtests",{"3":{"1199":1,"1207":2,"1350":1}}],["speakercategoryitems",{"2":{"1363":1},"3":{"1310":3,"1324":1,"1350":4,"1359":12,"1363":1,"1369":2,"1380":2,"1395":1,"1436":1,"1447":1,"1630":2,"1632":3,"1635":1,"1639":2}}],["speakercategoryitemscontrollertests",{"3":{"1199":1,"1207":2}}],["speakercategoryitemscontroller",{"2":{"1371":1,"1372":1},"3":{"1199":3,"1203":1,"1207":3,"1311":2,"1350":1,"1359":23,"1371":2,"1372":3,"1373":2,"1374":1,"1380":17}}],["speakercategoryitemspaneltests",{"3":{"1199":1,"1207":3}}],["speakercategoryitemspanel",{"2":{"1385":1},"3":{"1199":2,"1203":1,"1207":2,"1385":2,"1395":12}}],["speakercategoryitemservice",{"2":{"1386":1},"3":{"1199":2,"1203":1,"1207":1,"1324":1,"1386":1,"1395":4}}],["speakercategoryitemdtomappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["speakercategoryitemdtomapper",{"3":{"1199":9,"1203":1,"1207":2,"1350":3,"1359":16}}],["speakercategoryitemdto",{"3":{"1199":10,"1203":1,"1207":2,"1347":1,"1350":7,"1359":6,"1380":1,"1395":4}}],["speakercategoryitem",{"2":{"1342":1},"3":{"1198":1,"1199":16,"1203":1,"1207":2,"1237":2,"1310":1,"1342":3,"1350":8,"1359":25,"1369":3,"1380":1,"1395":1,"1630":1,"1631":1,"1632":1,"1634":2,"1635":2,"1637":1,"1638":3,"1639":5}}],["speakerchanged",{"2":{"1638":1},"3":{"782":2,"1199":5,"1203":1,"1207":2,"1259":1,"1345":3,"1350":13,"1355":1,"1359":4,"1631":1,"1634":3,"1638":3,"1639":1}}],["speakerdeleted",{"3":{"1359":1}}],["speakerdeletedhandlertests",{"3":{"1199":1,"1207":3}}],["speakerdeletedhandler",{"2":{"780":1,"782":1,"785":1},"3":{"780":1,"782":2,"784":1,"785":1,"1199":3,"1203":1,"1207":2,"1237":1,"1350":7,"1355":4,"1359":3}}],["speakerdetails",{"3":{"1395":2}}],["speakerdetailtests",{"3":{"1199":1,"1207":2,"1395":2}}],["speakerdetail",{"3":{"1199":2,"1203":1,"1207":2,"1237":1,"1350":1,"1384":2,"1395":47,"1415":2,"1496":1,"1526":1,"1531":1,"1535":1,"1627":1}}],["speakerdetailpage",{"3":{"1199":4,"1207":2}}],["speakerdetaillookupservice",{"2":{"1387":1},"3":{"1199":1,"1203":1,"1207":2,"1387":2,"1395":18}}],["speakerdetaillookups",{"2":{"1387":1},"3":{"1199":5,"1203":1,"1207":1,"1387":1,"1395":8}}],["speakerdtotests",{"3":{"1199":1,"1207":2}}],["speakerdto",{"3":{"1199":30,"1203":1,"1207":3,"1347":2,"1350":17,"1359":22,"1380":1,"1382":1,"1395":20}}],["speakerdtomappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["speakerdtomapper",{"2":{"5":1,"6":1},"3":{"5":1,"6":1,"657":1,"1199":8,"1203":1,"1207":2,"1350":9,"1353":3,"1359":27}}],["speakerdashboardtests",{"3":{"1199":2,"1207":4}}],["speakerdashboardpage",{"3":{"1199":3,"1207":2}}],["speakerdashboardservicetests",{"3":{"1199":1,"1207":2,"1395":1,"1436":1}}],["speakerdashboardservice",{"2":{"1388":1},"3":{"881":1,"1199":2,"1203":1,"1207":2,"1300":2,"1350":3,"1388":3,"1395":23}}],["speakerdashboard",{"2":{"1388":1},"3":{"556":1,"1119":1,"1199":2,"1203":1,"1207":2,"1350":3,"1388":2,"1395":20,"1531":1}}],["speakerscache",{"3":{"1350":1,"1359":1,"1379":1,"1380":2}}],["speakerscontrollertests",{"3":{"1199":1,"1207":2}}],["speakerscontroller",{"3":{"550":1,"552":1,"743":1,"1199":3,"1203":1,"1207":2,"1247":4,"1311":6,"1350":7,"1359":43,"1371":2,"1372":3,"1373":7,"1375":5,"1380":19,"1395":1,"1396":2,"1436":2,"1496":1,"1526":1}}],["speakerssynced",{"3":{"1350":1,"1359":1}}],["speakersmanage",{"2":{"1373":1},"3":{"1350":3,"1359":7,"1373":3,"1380":10,"1395":1}}],["speakersyncstrategytests",{"3":{"1199":1,"1207":2,"1359":1}}],["speakersyncstrategy",{"3":{"1199":3,"1203":1,"1207":2,"1350":8,"1358":1,"1359":16,"1526":1}}],["speakersexcept",{"3":{"1395":1}}],["speakerselfservicetests",{"3":{"1199":1,"1207":2,"1526":2}}],["speakersessionassettests",{"3":{"1199":1,"1207":2}}],["speakersessionscontrollertests",{"3":{"1199":1,"1207":2,"1487":1}}],["speakersessionscontroller",{"2":{"1371":1,"1375":1},"3":{"1199":2,"1203":1,"1207":2,"1350":4,"1371":2,"1375":3,"1380":6,"1396":2,"1436":1,"1496":1}}],["speakersessionsummary",{"3":{"1199":7,"1203":1,"1207":1,"1347":1,"1350":3,"1359":3,"1395":1}}],["speakersessionoverlapdto",{"2":{"1347":1},"3":{"1199":8,"1203":1,"1207":4,"1347":1,"1350":9,"1359":3,"1380":1}}],["speakerservice",{"3":{"881":1,"1199":7,"1203":1,"1207":2,"1382":4,"1395":8}}],["speakers",{"2":{"1350":1,"1380":1,"1395":1},"3":{"0":2,"186":1,"353":2,"470":1,"550":1,"554":1,"556":2,"657":3,"743":1,"782":1,"881":2,"926":1,"1004":6,"1018":1,"1116":4,"1118":1,"1168":1,"1202":1,"1203":94,"1207":296,"1212":1,"1237":6,"1238":1,"1242":2,"1247":3,"1259":2,"1270":8,"1271":3,"1286":1,"1300":1,"1310":7,"1311":4,"1324":6,"1340":1,"1342":3,"1343":1,"1345":1,"1346":1,"1347":5,"1348":1,"1349":3,"1350":87,"1351":4,"1352":3,"1353":4,"1354":2,"1355":5,"1357":2,"1358":4,"1359":289,"1363":1,"1364":3,"1365":1,"1367":1,"1369":19,"1371":3,"1373":1,"1380":36,"1381":1,"1382":4,"1383":5,"1384":3,"1385":2,"1386":1,"1387":4,"1388":7,"1389":1,"1391":1,"1392":1,"1395":115,"1396":3,"1402":11,"1413":1,"1415":7,"1416":2,"1433":1,"1435":2,"1436":2,"1437":1,"1438":8,"1441":1,"1447":1,"1458":1,"1492":1,"1496":2,"1526":1,"1531":1,"1534":1,"1535":1,"1608":1,"1621":1,"1625":1,"1626":1,"1627":4,"1629":8,"1630":7,"1631":6,"1632":16,"1635":3,"1636":5,"1637":5,"1638":4,"1639":10,"1640":4,"1641":14,"1815":1,"1863":1,"1866":1,"2070":1,"2110":2,"2216":1,"2238":1,"2240":2,"2241":1}}],["speaker",{"0":{"1624":1,"1626":1},"1":{"1113":1,"1114":1,"1115":1,"1116":1,"1117":1,"1118":1,"1119":1,"1120":1},"2":{"1355":1,"1621":1,"1626":1,"1635":1,"1636":1,"1640":1,"1641":1,"1983":1},"3":{"0":3,"340":1,"348":1,"350":2,"351":1,"353":5,"387":2,"443":1,"470":1,"545":1,"655":1,"657":4,"888":2,"926":1,"1017":1,"1018":3,"1113":1,"1115":4,"1116":7,"1117":1,"1118":2,"1168":2,"1192":1,"1198":2,"1199":62,"1201":1,"1202":1,"1203":2,"1207":19,"1212":1,"1237":3,"1239":1,"1247":3,"1270":3,"1271":2,"1281":1,"1286":3,"1288":1,"1300":4,"1310":4,"1311":1,"1312":1,"1323":1,"1324":4,"1340":3,"1342":13,"1343":8,"1345":2,"1347":5,"1348":2,"1349":2,"1350":186,"1351":2,"1352":2,"1353":4,"1354":1,"1355":9,"1357":7,"1359":494,"1361":1,"1362":4,"1363":1,"1364":1,"1366":3,"1369":33,"1371":2,"1373":5,"1375":3,"1376":1,"1377":1,"1378":2,"1379":1,"1380":70,"1381":1,"1382":1,"1383":2,"1385":1,"1386":2,"1387":1,"1388":8,"1389":7,"1390":1,"1391":1,"1392":1,"1395":203,"1396":17,"1397":2,"1402":38,"1403":1,"1405":1,"1406":3,"1412":1,"1413":4,"1415":28,"1416":2,"1424":1,"1436":11,"1437":1,"1438":23,"1467":5,"1487":4,"1489":2,"1490":1,"1492":1,"1496":6,"1498":1,"1524":1,"1526":4,"1531":1,"1534":2,"1535":2,"1608":1,"1611":4,"1617":1,"1621":8,"1624":1,"1626":2,"1627":15,"1629":4,"1630":37,"1631":14,"1632":58,"1633":2,"1634":7,"1635":11,"1636":4,"1637":12,"1638":16,"1639":38,"1640":12,"1641":77,"1805":1,"1813":1,"1815":4,"1869":2,"1922":2,"1955":1,"1977":1,"1983":1,"2110":1,"2113":1,"2126":1,"2127":1,"2216":1,"2232":1}}],["specparser",{"3":{"2220":1}}],["speculatively",{"3":{"1455":1}}],["spectrum",{"3":{"1436":1,"1492":1,"2004":1}}],["spectestentity",{"3":{"1199":28,"1207":1}}],["spectestchild",{"3":{"1199":6,"1207":1}}],["spectestmap",{"3":{"1198":1,"1199":2,"1207":1,"1436":8}}],["specfactory",{"3":{"1300":1}}],["spec2",{"3":{"1247":3}}],["spec1",{"3":{"1247":3}}],["specs",{"3":{"319":1,"607":2,"609":3,"976":1,"1192":1,"1247":1,"1339":1,"1431":1,"1436":3,"1467":3,"1476":3,"1496":1,"1546":1,"2046":3}}],["spec",{"3":{"0":3,"318":2,"320":3,"549":1,"607":4,"609":15,"610":1,"611":1,"1212":1,"1247":6,"1286":2,"1311":1,"1336":1,"1339":2,"1359":3,"1415":1,"1417":2,"1431":1,"1436":3,"1467":6,"1476":1,"1496":1,"1500":1,"1534":1,"1577":1,"1591":1,"1638":1,"1639":10,"1815":2,"2158":2,"2239":1}}],["specimen",{"3":{"1323":1,"1340":1}}],["specifying",{"3":{"1639":1}}],["specifykind",{"3":{"1286":2,"1309":1,"1312":1,"1415":1}}],["specify",{"3":{"1237":1,"1271":1,"1359":6,"1639":2}}],["specified",{"3":{"861":1,"885":1,"1359":1,"1631":1,"1639":3,"1640":1}}],["specifies",{"3":{"859":1,"880":1,"1286":1,"1417":1,"1429":1,"1640":1}}],["specificity",{"3":{"1311":1,"1577":1}}],["specifically",{"3":{"665":1,"702":1,"1229":1,"1247":1,"1286":1,"1311":3,"1312":1,"1323":2,"1324":3,"1339":2,"1350":1,"1359":2,"1395":2,"1396":3,"1415":2,"1417":1,"1427":1,"1436":8,"1455":1,"1467":1,"1490":1,"1727":1,"1840":1,"1960":1,"2175":1}}],["specificationprefix",{"3":{"1286":3}}],["specificationtestcontext",{"3":{"1207":3}}],["specificationtestdbcontext",{"3":{"1199":9,"1207":1}}],["specificationtests",{"3":{"1199":1,"1207":5,"1247":5}}],["specificationadditionaltests",{"3":{"1199":1,"1207":5}}],["specificationhonoringqueryservice",{"3":{"1199":2,"1207":1}}],["specificationconventiontests",{"3":{"1199":1,"1207":2,"1247":1,"1436":5,"1489":2,"1526":3}}],["specificationconventiontestsbase",{"2":{"1654":1},"3":{"1199":2,"1207":2,"1239":3,"1247":1,"1436":7,"1496":1,"1654":1}}],["specificationcompositiontests",{"3":{"1199":1,"1207":7,"1247":6,"1438":2}}],["specificationcomposer",{"2":{"1239":1},"3":{"545":1,"549":1,"1199":4,"1203":1,"1207":1,"1239":1,"1247":6,"1496":1}}],["specificationentitytype",{"3":{"1436":1}}],["specificationevaluatortests",{"3":{"1199":1,"1207":8,"1247":1,"1286":1,"1438":1}}],["specificationevaluator",{"2":{"1272":1},"3":{"1199":4,"1203":1,"1207":2,"1240":8,"1244":1,"1246":1,"1247":8,"1272":1,"1278":2,"1286":26,"1438":1,"1496":1}}],["specificationextensions",{"2":{"549":1,"550":1,"1239":1},"3":{"319":1,"326":1,"549":2,"550":1,"1199":1,"1203":1,"1207":2,"1239":6,"1247":5,"1359":1,"1380":3,"1496":1}}],["specificationbenchmarks",{"3":{"591":2,"592":1,"1199":1,"1207":5,"1247":1,"1436":2,"1438":2,"1496":1,"1577":1}}],["specificationfitnesstests",{"2":{"137":1,"139":1},"3":{"137":1,"139":1,"1198":1,"1199":2,"1207":9,"1436":28,"1489":2,"1496":1,"1577":1}}],["specificationsdonotnavigatetootherentities",{"2":{"168":1,"171":1,"548":1,"1247":1,"1438":1,"1489":1,"1496":1,"1577":1,"1859":1},"3":{"168":1,"171":1,"548":1,"1239":1,"1247":2,"1359":1,"1436":5,"1438":1,"1489":1,"1496":1,"1577":1,"1859":1}}],["specifications",{"0":{"1278":1,"1353":1,"1640":1,"1815":1},"1":{"1238":1,"1239":1,"1240":1,"1241":1,"1242":1,"1243":1,"1244":1,"1245":1,"1246":1,"1247":1,"1601":1,"1602":1,"1603":1,"1604":1,"1628":1,"1629":1,"1630":1,"1631":1,"1632":1,"1633":1,"1634":1,"1635":1,"1636":1,"1637":1,"1638":1,"1639":1,"1640":1,"1641":1,"1813":1,"1814":1,"1815":1,"1816":1,"1817":1},"2":{"168":1},"3":{"132":1,"168":3,"171":2,"318":3,"322":1,"543":1,"545":8,"547":1,"549":3,"592":1,"743":1,"1192":1,"1202":4,"1203":18,"1207":112,"1237":1,"1238":2,"1239":11,"1240":1,"1241":1,"1247":46,"1259":1,"1286":4,"1350":3,"1351":1,"1353":3,"1359":16,"1380":1,"1396":2,"1431":5,"1436":23,"1437":1,"1438":6,"1487":1,"1489":2,"1496":3,"1526":2,"1577":3,"1586":1,"1591":2,"1601":2,"1604":1,"1628":1,"1639":1,"1660":1,"1662":1,"1779":1,"1812":1,"1813":1,"1815":2,"1816":2,"1817":2,"1994":2,"2206":1,"2220":1,"2227":2,"2233":2}}],["specification",{"0":{"1239":1,"1639":1},"1":{"542":1,"543":1,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"550":1,"551":1,"552":1,"1762":1,"1763":1,"1764":1,"1765":1,"1766":1,"1767":1,"1768":1,"1769":1,"1770":1,"1771":1,"1772":1,"1773":1,"1774":1,"1775":1,"1776":1,"1777":1},"2":{"319":1,"321":1,"547":1,"550":2,"592":1,"1240":2,"1246":1,"1759":1,"1997":1},"3":{"0":7,"168":1,"318":9,"319":5,"321":2,"324":3,"325":1,"542":1,"543":5,"544":1,"545":12,"546":1,"547":4,"548":3,"549":18,"550":6,"551":4,"552":1,"591":1,"592":3,"595":1,"743":1,"798":1,"853":1,"1132":1,"1137":1,"1192":1,"1199":69,"1202":1,"1203":2,"1207":7,"1212":1,"1238":2,"1239":25,"1240":7,"1243":2,"1244":1,"1245":1,"1246":2,"1247":92,"1272":1,"1278":1,"1284":1,"1286":60,"1297":1,"1300":11,"1310":1,"1311":18,"1323":2,"1339":2,"1350":1,"1353":4,"1359":94,"1372":2,"1373":1,"1375":2,"1380":35,"1395":2,"1431":1,"1436":43,"1438":4,"1489":2,"1496":3,"1525":1,"1526":2,"1539":2,"1576":1,"1577":5,"1586":2,"1591":1,"1600":1,"1603":1,"1631":3,"1632":1,"1637":1,"1662":2,"1668":1,"1671":1,"1749":2,"1759":1,"1762":1,"1777":1,"1813":2,"1814":1,"1815":17,"1817":2,"1859":2,"1860":1,"1923":1,"1994":8,"1995":4,"1996":3,"1997":2,"2047":1,"2183":1,"2232":2}}],["specifics",{"0":{"1362":1},"3":{"164":1,"166":1,"987":1,"1350":1,"1359":1,"1369":1,"1417":1,"1467":5}}],["specific",{"3":{"0":4,"6":2,"93":1,"94":1,"109":1,"111":2,"137":1,"166":1,"175":1,"201":1,"224":1,"236":1,"265":1,"319":1,"332":1,"351":1,"381":1,"397":1,"399":1,"498":1,"499":1,"500":1,"506":1,"508":1,"530":1,"558":1,"572":1,"618":1,"627":1,"633":2,"642":1,"649":1,"650":1,"666":1,"681":1,"683":1,"697":1,"724":4,"725":1,"727":1,"728":1,"737":1,"743":1,"766":1,"782":1,"815":1,"828":1,"854":1,"863":1,"876":1,"882":1,"888":1,"890":1,"916":1,"939":1,"954":2,"959":1,"963":1,"987":1,"1016":1,"1020":1,"1041":1,"1066":1,"1067":1,"1068":1,"1089":1,"1093":1,"1096":1,"1132":1,"1144":1,"1174":1,"1175":1,"1179":1,"1190":1,"1201":1,"1211":1,"1212":1,"1214":1,"1229":4,"1234":1,"1237":1,"1246":1,"1247":3,"1258":1,"1259":2,"1265":1,"1270":11,"1271":2,"1272":1,"1273":1,"1280":1,"1284":1,"1286":29,"1289":1,"1291":2,"1296":1,"1298":1,"1300":19,"1301":1,"1302":1,"1309":11,"1311":10,"1321":1,"1322":1,"1323":18,"1324":28,"1328":1,"1338":1,"1339":9,"1344":2,"1350":7,"1352":1,"1359":29,"1366":1,"1369":2,"1371":1,"1380":14,"1387":1,"1395":21,"1396":21,"1402":6,"1406":1,"1410":1,"1415":23,"1416":8,"1417":11,"1424":1,"1427":2,"1429":2,"1432":1,"1433":1,"1436":38,"1438":6,"1440":1,"1441":1,"1443":1,"1445":1,"1447":1,"1449":2,"1451":1,"1453":1,"1455":2,"1456":1,"1457":1,"1460":1,"1467":1,"1474":1,"1475":2,"1488":4,"1490":3,"1496":2,"1525":1,"1538":1,"1554":1,"1577":1,"1591":2,"1596":1,"1630":3,"1631":1,"1632":3,"1636":1,"1637":5,"1639":5,"1640":1,"1641":6,"1645":1,"1656":1,"1658":1,"1666":1,"1667":1,"1670":1,"1685":1,"1686":1,"1727":2,"1749":1,"1764":3,"1769":1,"1771":1,"1777":1,"1816":1,"1819":1,"1852":1,"1853":1,"1882":1,"1896":1,"1897":1,"1927":1,"1929":1,"1977":1,"1983":1,"1990":1,"1992":1,"2006":2,"2030":1,"2033":1,"2037":1,"2059":2,"2067":1,"2073":1,"2088":1,"2107":1,"2123":1,"2137":1,"2145":1,"2154":1,"2156":1,"2159":1,"2168":1,"2183":1,"2189":1,"2211":1,"2232":4}}],["specially",{"3":{"1312":1}}],["specialcharacter",{"3":{"1271":1,"1300":1}}],["specialization",{"3":{"1359":8,"1395":2,"1416":1}}],["specializations",{"3":{"1354":1,"1408":1,"1410":1}}],["specialize",{"3":{"1359":1}}],["specializes",{"3":{"1339":1,"1637":1}}],["specialized",{"3":{"1286":2,"1350":2,"1359":3,"1395":2,"1396":3,"1416":1}}],["specializing",{"3":{"1229":1,"1359":1}}],["specialised",{"3":{"940":1,"1271":1,"1693":1}}],["specialist",{"3":{"620":1}}],["specialprice",{"2":{"658":1,"660":1},"3":{"658":1,"660":1}}],["special",{"3":{"0":2,"109":1,"135":2,"227":1,"389":1,"741":1,"820":1,"982":1,"1025":1,"1026":1,"1028":1,"1212":1,"1237":1,"1259":1,"1271":1,"1286":1,"1289":2,"1300":1,"1311":3,"1312":1,"1324":3,"1339":1,"1342":2,"1350":8,"1359":6,"1364":1,"1369":3,"1380":1,"1395":3,"1396":1,"1415":3,"1416":1,"1417":1,"1436":5,"1438":1,"1455":1,"1467":1,"1629":1,"1631":3,"1638":1,"1641":1,"1748":1,"1764":1,"1767":6,"1768":1,"1829":1,"1970":1,"2000":1,"2017":1}}],["spaghetti",{"1":{"1813":1,"1814":1,"1815":1,"1816":1,"1817":1},"3":{"1779":1,"1812":1,"1813":2,"2099":1,"2206":1,"2227":1}}],["spawning",{"3":{"1443":1}}],["spacing",{"3":{"890":1,"1324":1,"1557":2,"1577":1}}],["spaces",{"3":{"23":1,"972":1,"1286":1,"1324":1,"1436":3}}],["space",{"3":{"0":1,"157":1,"607":2,"609":2,"725":1,"1060":1,"1247":1,"1286":2,"1300":2,"1311":2,"1324":4,"1339":1,"1359":5,"1369":1,"1395":3,"1415":1,"1417":1,"1455":1,"1459":1,"1465":1,"1637":1,"1908":1,"1927":1}}],["sparingly",{"3":{"1270":2}}],["spared",{"3":{"1876":1}}],["spares",{"3":{"1270":2,"1380":1}}],["spare",{"3":{"790":1,"862":1,"1339":1,"1436":1}}],["sparse",{"0":{"1242":1},"3":{"0":1,"330":1,"332":1,"337":1,"591":1,"740":1,"1238":2,"1247":4,"1286":1,"1362":1,"1415":1,"1438":1,"1666":1,"1720":1,"1815":1,"1817":1,"1986":1,"1988":1,"1991":1,"2232":1}}],["spam",{"3":{"280":1,"1339":1,"1399":1,"1402":3,"1417":1,"1999":1,"2157":1}}],["spa",{"3":{"174":1,"1300":2,"1488":1,"1972":1,"1973":1,"1998":1,"2153":1}}],["spanid",{"3":{"1074":1,"1253":1,"1259":3,"1286":2,"2186":1}}],["spanish",{"3":{"0":1,"264":1,"265":2,"267":1,"856":1,"1311":3,"1324":5,"1380":1,"1389":1,"1395":2,"1396":1,"1436":11,"1438":1,"1577":3,"1582":1,"1583":1,"1591":1,"1595":1,"1596":2,"1653":1,"1669":1,"1685":2,"1784":1,"2080":1,"2081":2,"2085":4,"2086":1,"2216":1,"2223":1,"2232":1,"2242":1,"2245":1}}],["spanning",{"3":{"168":1,"760":1,"810":1,"1201":1,"1350":1,"1359":1,"1369":2,"1395":1,"1424":1,"1436":1,"1438":1,"1496":3,"1541":1,"1547":1,"1577":1,"1637":1,"2218":1,"2220":1}}],["span",{"2":{"1558":1},"3":{"47":1,"49":1,"115":1,"295":1,"395":6,"397":9,"398":1,"399":3,"400":1,"402":4,"404":1,"405":2,"406":3,"409":1,"520":1,"635":1,"821":1,"1042":1,"1091":1,"1093":1,"1102":1,"1212":1,"1229":2,"1247":2,"1251":1,"1259":3,"1273":1,"1286":10,"1301":2,"1309":1,"1311":5,"1324":4,"1333":4,"1339":39,"1350":1,"1359":7,"1415":4,"1421":1,"1425":2,"1427":1,"1436":1,"1443":7,"1450":1,"1496":3,"1526":1,"1558":1,"1565":1,"1572":1,"1575":1,"1577":4,"1583":1,"1591":2,"1631":1,"1664":1,"1819":1,"1843":1,"1909":1,"2010":3,"2154":1,"2157":10,"2159":3,"2160":1,"2179":1,"2183":1,"2192":1,"2213":1,"2215":1,"2232":1}}],["spans",{"0":{"2157":1},"3":{"0":1,"139":1,"157":1,"161":1,"230":1,"359":1,"396":1,"397":2,"398":1,"399":2,"402":2,"405":2,"466":1,"535":1,"609":1,"674":2,"676":1,"761":1,"803":1,"926":1,"946":1,"1044":1,"1089":1,"1124":1,"1201":1,"1212":1,"1270":2,"1286":6,"1300":1,"1302":1,"1320":1,"1323":1,"1339":14,"1341":1,"1346":1,"1350":2,"1359":8,"1380":1,"1395":1,"1396":1,"1417":1,"1427":1,"1431":1,"1436":2,"1438":2,"1442":1,"1443":6,"1454":1,"1467":3,"1496":1,"1511":1,"1550":1,"1577":1,"1668":1,"1670":1,"1677":2,"1789":1,"1841":1,"1848":1,"1852":1,"1853":1,"1858":1,"1888":1,"1892":1,"1902":1,"1909":1,"1912":1,"2000":1,"2010":3,"2012":1,"2014":2,"2142":1,"2154":2,"2156":2,"2157":4,"2159":1,"2160":2,"2161":1,"2192":1,"2220":1,"2227":1}}],["sms",{"3":{"1417":1,"2220":1}}],["sm",{"3":{"1324":1,"1591":1,"1712":1,"2073":1}}],["smuggling",{"3":{"1312":1,"1324":1}}],["smuggled",{"3":{"926":1,"1265":1,"1270":1,"1323":1,"1395":1}}],["smuggle",{"3":{"0":1,"1247":1,"1300":1,"1323":1,"1324":1,"1359":2,"1402":2,"1436":1}}],["smearing",{"3":{"1832":1,"1834":1}}],["smear",{"3":{"1278":1}}],["smeared",{"3":{"1247":1,"1324":1,"1359":1,"1396":1,"1402":1,"1931":1}}],["smell",{"3":{"70":1,"785":1,"1247":2,"1359":1,"1436":2,"1538":1,"1828":1,"1834":1}}],["smooth",{"3":{"1324":1}}],["smooths",{"3":{"1311":1}}],["smoothing",{"3":{"178":1,"1311":1}}],["smokes",{"3":{"1446":1,"1490":1}}],["smoketests",{"2":{"1069":1},"3":{"913":4,"1066":1,"1067":2,"1069":3,"1070":1,"1199":3,"1203":3,"1206":1,"1207":9,"1328":2,"1339":9,"1449":2,"1487":1}}],["smoke",{"0":{"1430":1,"1449":1},"3":{"0":8,"150":2,"373":1,"563":1,"564":1,"589":1,"591":1,"594":1,"620":1,"624":4,"626":4,"629":1,"631":2,"633":8,"635":3,"640":2,"642":1,"699":1,"755":2,"757":4,"758":2,"759":2,"762":1,"912":2,"913":2,"914":2,"916":1,"917":2,"1067":1,"1069":2,"1073":1,"1075":1,"1192":1,"1212":4,"1213":1,"1339":8,"1428":1,"1434":1,"1436":7,"1437":2,"1438":10,"1449":1,"1453":2,"1455":12,"1460":2,"1461":3,"1465":1,"1467":3,"1469":2,"1474":1,"1482":1,"1486":3,"1487":3,"1488":1,"1490":5,"1492":10,"1493":1,"1494":1,"1496":3,"1497":2,"1524":1,"1526":6,"1531":3,"1535":1,"1575":1,"1577":3,"1581":1,"1582":1,"1583":1,"1585":1,"1588":1,"1589":1,"1590":2,"1591":6,"1600":2,"1611":1,"1657":1,"1661":1,"1696":1,"1706":1,"1716":1,"1727":1,"1731":1,"1923":2,"2038":1,"2056":1,"2059":1,"2079":1,"2089":1,"2232":2}}],["smallness",{"3":{"2172":1}}],["smallestscreensize",{"3":{"1416":1}}],["smallest",{"3":{"414":1,"666":1,"699":1,"979":1,"1232":1,"1237":1,"1247":1,"1269":1,"1270":1,"1286":3,"1323":1,"1324":5,"1339":1,"1350":1,"1352":1,"1359":15,"1369":2,"1395":9,"1396":3,"1402":3,"1415":2,"1417":4,"1436":10,"1438":1,"1467":1,"1717":1,"1727":1,"1765":1,"1770":1,"1851":1,"1938":1,"2074":1}}],["smaller",{"3":{"409":1,"545":1,"547":1,"549":1,"593":1,"775":1,"827":1,"840":1,"875":1,"981":1,"1091":1,"1115":1,"1168":1,"1170":1,"1201":1,"1281":1,"1283":1,"1300":1,"1311":2,"1323":2,"1324":3,"1344":1,"1350":2,"1359":2,"1395":2,"1422":1,"1427":2,"1429":2,"1436":4,"1438":1,"1467":2,"1479":1,"1480":1,"1492":1,"1923":1,"1946":1,"2011":1,"2079":1,"2158":1,"2164":1,"2172":1,"2174":1}}],["small",{"0":{"1805":1,"2117":1},"1":{"1717":1,"1718":1,"1719":1,"1720":1,"1721":1,"1722":1,"1723":1,"1724":1,"1725":1},"3":{"6":1,"60":1,"122":1,"148":1,"165":1,"201":1,"235":1,"255":1,"273":1,"280":1,"292":1,"379":1,"398":1,"413":1,"440":1,"442":1,"507":1,"520":1,"572":1,"583":1,"593":1,"633":1,"650":1,"656":1,"681":1,"684":1,"692":1,"732":1,"742":1,"765":1,"897":1,"921":1,"930":1,"932":1,"1093":1,"1134":1,"1150":3,"1152":1,"1191":1,"1222":1,"1223":1,"1229":4,"1230":2,"1233":1,"1237":1,"1241":1,"1242":1,"1247":6,"1248":1,"1252":1,"1256":1,"1257":1,"1259":6,"1260":1,"1268":1,"1270":3,"1272":1,"1284":1,"1286":5,"1290":1,"1291":1,"1292":2,"1300":13,"1301":3,"1305":1,"1309":1,"1310":3,"1311":5,"1312":1,"1313":1,"1318":1,"1320":1,"1322":3,"1323":6,"1324":29,"1325":1,"1328":1,"1337":1,"1339":6,"1347":1,"1350":13,"1352":1,"1353":1,"1354":1,"1356":1,"1359":15,"1360":1,"1369":3,"1374":1,"1380":1,"1382":1,"1385":1,"1389":1,"1395":20,"1396":22,"1398":1,"1399":1,"1402":12,"1410":1,"1411":1,"1415":10,"1416":2,"1417":8,"1427":1,"1436":13,"1438":1,"1449":1,"1455":2,"1459":1,"1460":1,"1467":2,"1478":1,"1489":1,"1492":1,"1509":1,"1526":1,"1531":1,"1534":1,"1577":1,"1582":1,"1602":1,"1611":1,"1653":1,"1661":1,"1674":1,"1675":1,"1692":1,"1705":1,"1712":1,"1717":1,"1718":1,"1726":1,"1727":2,"1792":1,"1803":1,"1805":1,"1807":1,"1826":1,"1833":1,"1834":1,"1844":1,"1880":1,"1898":1,"1915":1,"1930":1,"1932":1,"1939":1,"1942":1,"1943":1,"1947":1,"1950":1,"1958":1,"1962":1,"1965":1,"1968":1,"1972":1,"1974":1,"1985":1,"2012":1,"2026":1,"2032":1,"2042":1,"2047":1,"2055":1,"2081":1,"2086":1,"2092":1,"2103":1,"2115":1,"2116":1,"2117":1,"2118":1,"2123":3,"2127":1,"2136":1,"2174":1,"2197":1}}],["smarttoy",{"3":{"1395":1}}],["smarter",{"3":{"1311":1}}],["smart",{"0":{"1235":1},"1":{"961":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1},"3":{"0":4,"15":1,"17":1,"18":1,"707":2,"711":1,"961":1,"963":2,"964":2,"965":3,"966":1,"1042":1,"1043":1,"1045":1,"1049":1,"1051":2,"1212":2,"1230":1,"1237":2,"1254":2,"1259":10,"1275":1,"1282":1,"1286":16,"1317":2,"1323":3,"1324":1,"1395":3,"1436":1,"1438":1,"1467":2,"1526":1,"1555":1,"1577":1,"1586":1,"1662":1,"1665":1,"1677":1,"1841":1,"2232":1}}],["smtppassword",{"3":{"1467":1}}],["smtpemailsendertests",{"3":{"1199":1,"1207":2}}],["smtpemailsender",{"2":{"72":1,"1512":1,"1752":1,"1938":1},"3":{"72":2,"230":4,"674":2,"1199":2,"1203":1,"1207":2,"1302":5,"1309":24,"1320":2,"1323":5,"1496":2,"1512":1,"1670":1,"1752":1,"1770":1,"1932":1,"1938":1}}],["smtpclient",{"2":{"72":1,"1938":1},"3":{"72":1,"230":1,"1302":2,"1309":4,"1323":2,"1938":1}}],["smtpsettingstests",{"3":{"1199":1,"1207":1}}],["smtpsettings",{"2":{"72":1,"1302":1},"3":{"72":2,"674":2,"1199":7,"1203":1,"1207":2,"1302":1,"1309":11,"1313":1,"1320":1,"1323":12}}],["smtptransportsecuritytests",{"3":{"1108":1,"1199":1,"1207":2,"1323":1}}],["smtptransportsecurity",{"2":{"1108":1,"1302":1},"3":{"0":1,"1108":2,"1199":3,"1203":1,"1207":2,"1212":1,"1302":1,"1309":4,"1313":1,"1320":5,"1323":5,"1496":2}}],["smtp",{"3":{"0":2,"66":2,"72":2,"74":1,"230":2,"598":1,"599":1,"600":1,"673":2,"827":1,"853":1,"856":1,"1107":1,"1108":4,"1109":2,"1112":1,"1302":2,"1303":1,"1309":9,"1320":1,"1323":9,"1326":4,"1339":3,"1408":1,"1415":2,"1440":1,"1441":3,"1446":5,"1455":1,"1466":1,"1467":9,"1470":2,"1472":5,"1474":1,"1670":1,"1752":1,"1770":1,"1938":2,"2005":1,"2012":2,"2013":1,"2165":1,"2189":2}}],["shy",{"3":{"1526":1}}],["sh",{"0":{"1472":1},"3":{"1471":1,"1472":20,"1475":1,"1482":1,"1483":2}}],["shuffling",{"3":{"1396":1}}],["shuts",{"3":{"1417":1,"2066":1}}],["shut",{"3":{"1300":1,"2007":1}}],["shutting",{"3":{"1270":1}}],["shutdowntimeoutseconds",{"3":{"1436":2,"1488":1}}],["shutdownsavetimeout",{"3":{"1259":1}}],["shutdown",{"3":{"0":5,"21":2,"27":2,"235":1,"237":1,"517":1,"518":2,"536":1,"572":4,"573":1,"574":2,"819":1,"837":1,"897":1,"898":3,"1100":2,"1192":1,"1212":2,"1247":2,"1252":1,"1255":1,"1259":7,"1270":2,"1275":1,"1286":2,"1309":1,"1311":4,"1323":6,"1324":1,"1334":1,"1337":1,"1339":9,"1359":1,"1366":1,"1396":1,"1400":1,"1402":1,"1415":1,"1436":5,"1437":1,"1438":1,"1488":2,"1525":1,"1526":1,"1550":1,"1566":1,"1591":2,"1600":1,"1671":1,"1919":1,"2055":2,"2165":1,"2232":1}}],["shrug",{"3":{"1416":1,"1436":1}}],["shrugs",{"3":{"1309":1}}],["shrunken",{"3":{"2105":1}}],["shrunk",{"3":{"1395":1}}],["shrinks",{"3":{"546":1,"783":1,"1237":1,"1350":1,"1369":1,"1395":1,"1436":3,"1480":1,"1578":1,"1815":1,"2148":1}}],["shrink",{"3":{"491":1,"651":1,"1183":1,"1300":1,"1311":1,"1353":1,"1359":1,"1390":1,"1395":2,"1402":2,"1436":5,"2042":1,"2104":1}}],["shrinking",{"3":{"461":1,"1018":1,"1020":1,"1300":1,"1380":1,"1402":1}}],["shrank",{"3":{"490":1,"1415":1,"1492":1,"1496":1}}],["shredded",{"3":{"2010":1}}],["shred",{"3":{"398":1}}],["shed",{"3":{"1126":1,"1347":1,"1350":1,"1396":2,"1436":1}}],["sheds",{"3":{"819":1,"1124":1,"1324":1,"1339":1,"1436":1,"2032":1}}],["shedding",{"3":{"575":1,"831":1,"1270":1,"1402":1,"1416":2}}],["shelf",{"3":{"627":1,"1041":1,"1101":1,"1301":1,"1915":1}}],["shelling",{"3":{"1430":1}}],["shells",{"3":{"1192":1,"1202":1,"1203":1,"1212":1,"1324":1,"1370":1,"1414":1,"1416":1,"1432":1,"1436":1,"1496":1}}],["shellpagese2etests",{"2":{"616":1},"3":{"616":1,"618":1,"1199":1,"1207":2}}],["shell",{"0":{"1395":1,"2077":1},"1":{"646":1,"647":1,"648":1,"649":1,"650":1,"651":1,"652":1,"653":1,"1416":1},"2":{"1479":1},"3":{"0":6,"415":1,"616":1,"618":3,"646":1,"648":3,"649":7,"650":3,"651":3,"869":2,"914":1,"954":1,"957":1,"974":1,"1059":1,"1192":1,"1202":1,"1203":1,"1212":3,"1324":23,"1359":1,"1376":1,"1395":5,"1396":3,"1414":1,"1415":6,"1416":13,"1417":5,"1436":3,"1438":2,"1440":1,"1452":3,"1454":1,"1461":1,"1475":3,"1479":2,"1481":1,"1490":1,"1496":1,"1513":1,"1526":1,"1562":1,"1591":1,"1597":1,"1653":1,"1660":1,"1669":1,"1682":1,"1698":1,"1761":2,"2077":6,"2080":1,"2232":3}}],["sheets",{"3":{"1324":2}}],["sheet",{"3":{"412":1,"419":1,"743":1,"1324":6,"1402":1,"1417":13,"1526":1,"2116":2}}],["shirt",{"3":{"1350":3}}],["shims",{"3":{"135":1,"151":1,"1282":1,"1286":2,"1436":1,"1496":2,"1856":2,"1862":2}}],["shim",{"3":{"0":1,"166":1,"470":1,"1004":1,"1034":1,"1175":1,"1212":1,"1286":12,"1361":1,"1369":1,"1396":4,"1436":1,"1496":1,"1577":1,"1856":1,"1968":1,"2112":1}}],["shifting",{"3":{"861":1,"1286":1,"1396":1,"1436":1,"1496":2}}],["shifted",{"3":{"251":1,"323":1,"424":1,"425":1,"426":1,"490":1,"491":1,"493":1,"543":1,"589":1,"1359":1,"1496":13}}],["shifts",{"3":{"41":1,"112":1,"693":1,"860":1,"1004":1,"1269":1,"1270":1,"1348":1,"1350":1,"1359":1,"1380":1,"1396":1,"1436":2,"1496":3}}],["shift",{"2":{"1607":1,"1741":1},"3":{"0":1,"279":1,"490":1,"709":1,"1019":1,"1074":1,"1292":1,"1300":1,"1348":1,"1359":3,"1380":1,"1396":1,"1435":1,"1443":1,"1496":1,"1607":1,"1741":1}}],["shipall",{"2":{"1809":1},"3":{"1809":1}}],["shiporderhandler",{"2":{"1875":1},"3":{"1765":1,"1875":1}}],["shiporderdialog",{"2":{"1750":1,"1760":1},"3":{"1750":1,"1760":1}}],["shipmentinvariants",{"3":{"1767":3}}],["shipments",{"3":{"1755":1,"1776":2}}],["shipmenttrackingnumber",{"2":{"1749":1},"3":{"1749":1}}],["shipment",{"2":{"1755":1},"3":{"1746":2,"1749":4,"1755":4,"1760":1,"1763":1,"1764":3,"1765":4,"1766":1,"1767":5,"1768":1,"1769":1,"1770":1,"1771":2,"1776":4,"1777":1,"2110":1}}],["shipmentline",{"3":{"1727":1}}],["shipmentlineidentifiertype",{"2":{"1727":1},"3":{"1727":1}}],["shippable",{"3":{"1270":1,"1766":1}}],["shippingaddresscity",{"3":{"1286":1}}],["shippingaddressline1",{"3":{"1286":1}}],["shippingaddress",{"3":{"1286":1}}],["shipping",{"1":{"2081":1,"2082":1,"2083":1,"2084":1,"2085":1,"2086":1},"3":{"0":2,"67":1,"216":1,"360":1,"449":1,"591":1,"619":1,"627":1,"635":2,"650":1,"657":1,"682":1,"706":1,"715":1,"726":1,"768":1,"832":1,"854":1,"932":1,"955":1,"973":1,"1051":1,"1052":1,"1092":1,"1133":1,"1212":1,"1270":2,"1286":8,"1300":2,"1309":2,"1323":2,"1324":2,"1339":1,"1350":5,"1380":1,"1402":1,"1415":2,"1416":2,"1417":1,"1427":1,"1435":1,"1436":11,"1445":1,"1455":1,"1488":1,"1750":1,"1765":1,"1767":3,"1771":1,"1776":1,"1808":1,"1809":1,"1810":1,"1815":1,"1902":1,"1931":1,"2010":1,"2055":1,"2081":1,"2129":1,"2134":1,"2210":1}}],["shippedstate",{"3":{"1767":3}}],["shippedon",{"3":{"1764":1}}],["shipped",{"0":{"1488":1,"2055":1,"2057":1,"2143":1},"1":{"569":1,"570":1,"571":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"578":1,"579":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1,"858":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"865":1,"951":1,"952":1,"953":1,"954":1,"955":1,"956":1,"957":1,"958":1,"959":1,"960":1,"1064":1,"1065":1,"1066":1,"1067":1,"1068":1,"1069":1,"1070":1,"1071":1},"2":{"135":1,"136":1,"138":1,"141":1,"142":1,"967":1,"980":1,"981":1,"983":1,"991":1,"1052":1,"1055":1,"1673":1,"1755":1,"1766":1,"1808":1,"1812":1,"2100":1},"3":{"0":28,"19":1,"22":1,"23":1,"80":1,"81":1,"91":1,"107":1,"109":1,"115":2,"121":1,"122":1,"130":1,"135":10,"136":1,"137":1,"138":2,"139":3,"140":1,"141":4,"142":7,"164":1,"166":1,"180":1,"186":1,"233":1,"235":2,"238":1,"241":1,"243":1,"245":1,"255":1,"256":1,"258":1,"265":2,"268":1,"317":1,"350":1,"358":1,"361":1,"362":1,"364":2,"370":1,"403":1,"418":2,"423":2,"443":1,"448":1,"468":1,"469":1,"482":1,"487":1,"497":3,"502":1,"527":1,"538":1,"539":1,"543":2,"545":1,"547":1,"550":1,"563":1,"569":1,"575":1,"576":1,"583":1,"599":2,"607":1,"609":1,"614":1,"615":1,"618":1,"619":1,"622":1,"627":1,"638":1,"640":1,"647":1,"649":2,"655":1,"657":5,"659":1,"660":2,"661":1,"665":1,"668":1,"688":1,"707":1,"714":1,"717":1,"723":4,"725":2,"729":1,"731":1,"732":1,"733":1,"734":1,"743":2,"745":1,"758":1,"797":1,"804":1,"809":1,"825":1,"827":1,"831":2,"845":1,"853":1,"858":1,"861":4,"873":1,"891":1,"905":2,"910":1,"921":1,"922":1,"923":1,"926":1,"951":1,"954":2,"955":1,"960":2,"962":1,"963":1,"964":5,"966":3,"967":1,"968":2,"972":2,"975":2,"980":8,"981":2,"982":3,"983":3,"988":1,"990":1,"991":1,"996":2,"1003":1,"1004":1,"1007":1,"1012":1,"1013":1,"1016":2,"1017":1,"1032":1,"1033":1,"1034":1,"1036":1,"1037":2,"1049":1,"1052":2,"1055":2,"1064":1,"1071":1,"1074":1,"1075":1,"1081":1,"1089":1,"1092":1,"1093":1,"1094":3,"1122":1,"1124":1,"1127":1,"1132":1,"1134":1,"1150":1,"1160":1,"1161":1,"1164":1,"1174":1,"1175":1,"1192":2,"1212":8,"1214":1,"1231":1,"1234":2,"1237":5,"1247":1,"1259":2,"1270":8,"1271":1,"1273":1,"1280":1,"1282":1,"1284":1,"1286":22,"1287":1,"1290":1,"1293":1,"1297":1,"1300":12,"1301":4,"1311":13,"1323":10,"1324":27,"1327":1,"1339":2,"1347":1,"1350":2,"1359":1,"1369":6,"1395":2,"1396":4,"1415":6,"1416":1,"1417":4,"1427":1,"1428":2,"1430":1,"1432":1,"1433":1,"1435":2,"1436":67,"1437":2,"1438":5,"1444":1,"1453":1,"1455":4,"1465":1,"1467":2,"1485":1,"1486":2,"1487":7,"1488":6,"1489":1,"1490":3,"1491":1,"1492":1,"1494":1,"1496":4,"1507":1,"1521":1,"1526":1,"1546":1,"1553":1,"1563":1,"1574":2,"1575":2,"1576":4,"1577":17,"1581":2,"1582":3,"1583":1,"1586":1,"1631":1,"1639":1,"1646":1,"1654":1,"1659":1,"1664":1,"1665":1,"1666":2,"1667":1,"1669":1,"1671":1,"1673":2,"1682":1,"1685":1,"1686":2,"1689":2,"1690":1,"1692":1,"1704":1,"1727":1,"1749":8,"1750":1,"1751":1,"1755":1,"1758":1,"1760":1,"1765":5,"1766":4,"1767":6,"1768":2,"1776":1,"1782":1,"1808":1,"1810":2,"1812":1,"1854":1,"1860":1,"1861":1,"1862":1,"1887":1,"1891":1,"1899":1,"1903":1,"2041":1,"2042":2,"2046":1,"2060":2,"2062":2,"2075":1,"2085":2,"2100":2,"2116":1,"2127":1,"2129":1,"2131":1,"2144":1,"2146":1,"2168":1,"2200":1,"2220":1,"2230":1,"2232":8,"2239":2}}],["ships",{"0":{"2077":1,"2112":1,"2175":1,"2198":1},"3":{"0":34,"72":1,"76":3,"78":1,"80":1,"99":1,"109":1,"134":1,"135":1,"136":3,"140":1,"145":1,"147":1,"150":1,"168":1,"174":1,"180":1,"185":1,"207":1,"212":1,"214":1,"225":1,"243":1,"255":1,"256":1,"273":1,"295":1,"302":1,"317":1,"318":1,"328":1,"358":1,"369":1,"370":1,"371":1,"380":1,"388":1,"397":2,"405":1,"413":2,"432":1,"433":1,"434":2,"436":1,"440":1,"447":1,"448":1,"454":1,"477":1,"481":1,"483":1,"497":1,"528":1,"532":1,"536":1,"543":1,"545":2,"550":1,"551":2,"564":1,"565":1,"571":1,"572":1,"574":1,"579":1,"583":1,"609":1,"610":2,"617":1,"620":1,"631":1,"633":1,"634":1,"635":1,"640":1,"648":1,"649":1,"656":1,"659":1,"667":1,"668":1,"682":2,"683":1,"684":1,"691":1,"707":1,"711":1,"715":1,"725":4,"739":1,"748":1,"774":1,"776":1,"782":2,"786":1,"808":2,"825":1,"827":1,"831":1,"832":1,"840":1,"844":1,"848":1,"855":1,"859":2,"863":1,"880":1,"905":3,"907":1,"914":1,"915":1,"921":1,"922":1,"933":1,"937":1,"939":2,"940":1,"953":1,"954":1,"960":1,"963":1,"974":1,"984":1,"996":1,"1004":2,"1017":1,"1034":1,"1037":1,"1044":2,"1049":1,"1050":1,"1053":1,"1054":1,"1055":1,"1057":3,"1058":2,"1059":7,"1061":1,"1062":2,"1066":1,"1075":1,"1077":1,"1089":2,"1091":5,"1093":2,"1096":1,"1124":2,"1139":2,"1149":2,"1160":1,"1162":1,"1178":1,"1211":1,"1212":4,"1213":1,"1237":4,"1239":1,"1248":1,"1259":1,"1269":1,"1270":4,"1271":2,"1286":12,"1289":1,"1293":2,"1297":2,"1300":9,"1301":2,"1309":3,"1311":11,"1312":3,"1313":1,"1318":1,"1320":1,"1323":8,"1324":10,"1336":1,"1339":8,"1341":1,"1350":6,"1359":1,"1369":1,"1380":3,"1395":1,"1396":3,"1408":1,"1415":9,"1416":2,"1417":20,"1420":1,"1423":1,"1427":5,"1428":1,"1431":4,"1435":1,"1436":47,"1438":2,"1442":2,"1443":4,"1445":1,"1447":2,"1453":1,"1454":1,"1455":4,"1459":2,"1461":1,"1467":6,"1471":1,"1487":2,"1488":2,"1489":6,"1491":1,"1492":1,"1496":1,"1503":2,"1524":1,"1526":5,"1531":2,"1545":1,"1553":1,"1575":2,"1577":16,"1578":2,"1582":3,"1583":1,"1585":1,"1591":3,"1595":1,"1596":1,"1626":1,"1631":1,"1641":1,"1651":1,"1652":1,"1653":2,"1654":1,"1655":1,"1661":1,"1662":1,"1663":1,"1664":1,"1666":1,"1667":1,"1668":1,"1670":1,"1671":1,"1674":1,"1675":1,"1681":1,"1683":1,"1684":1,"1686":1,"1689":1,"1697":1,"1699":1,"1701":1,"1719":1,"1727":2,"1728":1,"1729":2,"1750":1,"1764":1,"1765":1,"1767":1,"1768":1,"1781":2,"1784":2,"1790":1,"1799":1,"1800":1,"1810":1,"1815":1,"1828":1,"1829":1,"1830":1,"1840":1,"1845":2,"1883":2,"1889":1,"1891":3,"1898":1,"1902":1,"1903":1,"1921":1,"1922":2,"1930":2,"1931":1,"1933":1,"1941":1,"1948":1,"1961":1,"1968":1,"1970":1,"1975":1,"1977":1,"1994":1,"1997":1,"1998":1,"1999":1,"2001":1,"2008":1,"2010":2,"2011":2,"2017":1,"2024":1,"2034":1,"2044":1,"2045":1,"2046":1,"2055":2,"2057":1,"2059":1,"2067":1,"2068":1,"2075":1,"2077":1,"2080":1,"2081":1,"2083":2,"2087":1,"2094":1,"2097":1,"2101":1,"2107":1,"2114":2,"2115":1,"2124":1,"2127":1,"2131":2,"2133":2,"2147":1,"2148":1,"2149":2,"2150":1,"2153":1,"2154":2,"2156":2,"2168":1,"2170":1,"2175":1,"2178":2,"2180":1,"2192":2,"2202":2,"2203":1,"2232":11}}],["ship",{"0":{"576":1,"1424":1,"1897":1},"1":{"1056":1,"1057":1,"1058":1,"1059":1,"1060":1,"1061":1,"1062":1,"1063":1},"2":{"1809":1,"1812":1},"3":{"0":7,"62":1,"76":1,"78":1,"85":1,"109":1,"135":2,"147":1,"186":1,"213":1,"214":1,"235":1,"265":1,"269":1,"293":1,"299":1,"300":1,"302":1,"412":1,"415":1,"422":1,"425":1,"426":2,"448":1,"470":1,"528":1,"570":1,"572":2,"574":1,"577":1,"578":1,"579":1,"618":1,"628":2,"633":2,"634":1,"638":1,"640":1,"649":1,"658":1,"660":1,"665":1,"667":1,"672":1,"682":1,"691":1,"698":1,"708":1,"715":1,"717":1,"723":1,"733":1,"749":1,"758":1,"774":1,"798":1,"818":1,"827":1,"832":1,"836":1,"854":1,"861":1,"862":1,"914":1,"922":1,"953":1,"954":1,"955":1,"1016":1,"1049":1,"1056":1,"1059":2,"1060":2,"1067":1,"1091":1,"1096":1,"1212":2,"1237":2,"1259":1,"1270":1,"1271":3,"1282":1,"1286":4,"1300":5,"1301":1,"1308":1,"1309":1,"1311":4,"1315":1,"1323":4,"1324":5,"1334":1,"1339":3,"1359":1,"1395":1,"1396":2,"1402":2,"1415":1,"1416":2,"1417":7,"1418":2,"1419":1,"1427":4,"1428":1,"1431":1,"1432":1,"1433":2,"1436":9,"1438":2,"1454":1,"1459":1,"1465":1,"1467":1,"1486":1,"1489":2,"1492":1,"1526":1,"1531":1,"1534":1,"1575":1,"1577":1,"1583":1,"1585":1,"1591":1,"1596":1,"1627":1,"1648":1,"1654":1,"1661":1,"1662":1,"1666":1,"1667":1,"1669":1,"1673":2,"1675":1,"1699":1,"1706":1,"1727":1,"1733":1,"1735":1,"1746":2,"1749":6,"1750":1,"1755":1,"1760":1,"1761":1,"1764":1,"1765":7,"1767":1,"1768":1,"1769":2,"1771":1,"1788":1,"1809":1,"1810":2,"1812":1,"1815":2,"1843":1,"1853":1,"1880":1,"1882":1,"1889":1,"1905":1,"1927":1,"1941":1,"1959":1,"1965":1,"1970":1,"1978":1,"1999":1,"2024":1,"2028":1,"2029":1,"2038":2,"2044":1,"2049":1,"2053":1,"2060":1,"2073":1,"2085":1,"2089":1,"2101":1,"2107":1,"2116":1,"2120":2,"2122":2,"2131":2,"2133":1,"2134":1,"2138":1,"2160":1,"2173":1,"2180":1,"2195":1,"2196":1,"2200":1,"2202":1,"2203":1,"2212":1,"2213":1,"2218":1,"2220":1,"2226":1,"2232":1,"2239":1}}],["shop",{"3":{"1750":1,"1773":1}}],["shopping",{"3":{"1742":1,"1749":2,"1750":6,"1763":2,"1764":11,"1765":4,"1767":2,"1768":6,"1771":2,"1773":4,"1995":1}}],["shoppingcartinvariants",{"3":{"1767":3}}],["shoppingcartitems",{"3":{"1746":3,"1749":3,"1764":1}}],["shoppingcartitemcreaterequest",{"3":{"1270":1}}],["shoppingcartitemchanged",{"2":{"782":1,"1749":1},"3":{"782":2,"1749":2,"1769":1}}],["shoppingcartitem",{"3":{"1237":1,"1764":1}}],["shoppingcartlisttests",{"3":{"1436":2}}],["shoppingcartlist",{"3":{"1324":1,"1591":3,"1596":3,"1597":1}}],["shoppingcartcreaterequest",{"3":{"1270":1}}],["shoppingcartchanged",{"3":{"782":1,"1749":1,"1769":1}}],["shoppingcartcheckedout",{"2":{"782":1,"1749":1},"3":{"0":1,"782":3,"1259":1,"1749":1,"1769":1}}],["shoppingcart",{"2":{"1749":1,"1769":1,"2110":1},"3":{"782":1,"1324":2,"1591":1,"1749":1,"1764":1,"1765":1,"1767":1,"1769":4,"2110":1}}],["shoppingcartdetail",{"2":{"1591":1},"3":{"556":1,"1324":1,"1591":2}}],["shoppingcartbycustomerspecification",{"2":{"318":1,"1995":1},"3":{"318":4,"1995":2}}],["shoppingcartservice",{"3":{"881":1,"1324":1,"1591":1,"1597":1}}],["shoppingcartsmanage",{"2":{"318":1,"324":1,"1995":1},"3":{"318":1,"324":1,"1995":1}}],["shoppingcartscontroller",{"2":{"318":3,"324":1,"743":1},"3":{"318":9,"324":3,"325":1,"326":1,"743":1,"1300":7,"1311":4,"1591":1,"1599":1,"1995":11}}],["shoppingcarts",{"2":{"554":1},"3":{"317":1,"318":1,"535":1,"539":1,"554":1,"556":1,"674":1,"782":3,"813":1,"814":1,"881":2,"897":1,"900":1,"988":2,"1025":2,"1324":1,"1436":2,"1742":1,"1746":5,"1749":9,"1750":3,"1764":2,"1765":3,"1994":1}}],["shopper",{"3":{"831":1,"1028":1,"1591":1,"1596":2,"1742":2,"1764":1,"1769":1}}],["shouting",{"3":{"1324":1}}],["shouldgotoregisterpage",{"3":{"1436":1}}],["shouldnavigatetohomepage",{"3":{"1436":2}}],["shouldnotexceed",{"3":{"1436":1}}],["shouldnotexpose",{"3":{"81":1,"1436":2}}],["shouldnotinject",{"3":{"1436":2}}],["shouldnotimplement",{"3":{"1311":1,"1436":2,"1875":1}}],["shouldnotresidein",{"3":{"1436":1}}],["shouldnotreach",{"3":{"1436":6}}],["shouldnotreadtheambientclock",{"2":{"1161":1,"1436":1},"3":{"1161":1,"1436":2}}],["shouldnothave",{"3":{"1436":2}}],["shouldnot",{"3":{"1436":3,"1489":1}}],["shouldnotnavigate",{"3":{"1436":2}}],["shouldnotthrow",{"3":{"1436":2}}],["shouldnotbe",{"3":{"1436":10}}],["shouldnotdependon",{"2":{"1436":2,"1489":2},"3":{"54":1,"1436":15,"1489":6}}],["shouldupdateemail",{"3":{"1436":1}}],["shouldupdateprofileaddress",{"3":{"1436":1}}],["shouldupdateprofilename",{"3":{"1436":1}}],["shouldusereadrepositories",{"3":{"1436":4}}],["shouldpreventaccesstoprotectedpages",{"3":{"1436":1}}],["shouldexpose",{"3":{"1436":2,"1489":1}}],["shoulder",{"3":{"1300":1}}],["shouldrender",{"2":{"1555":1,"1560":1},"3":{"1555":1,"1560":1}}],["shouldredirecttologinpage",{"3":{"1436":1}}],["shouldredirecttologin",{"3":{"1436":1}}],["shouldresidein",{"3":{"1436":4}}],["shouldreside",{"3":{"1436":1}}],["shouldreturn",{"3":{"1436":2,"1489":1}}],["shouldregister",{"3":{"1436":1}}],["shouldreportpartialresults",{"3":{"1417":1}}],["shouldonlyoccurin",{"3":{"1436":3}}],["shouldinherit",{"3":{"1436":2}}],["shouldincrease",{"3":{"1436":2}}],["shouldimplement",{"3":{"1436":4,"1489":1}}],["shouldcarry",{"3":{"1436":3}}],["shouldcollectrequest",{"2":{"402":1},"3":{"402":1,"1333":1,"1339":5,"1443":2}}],["shouldcollectoutgoing",{"2":{"402":1},"3":{"402":1,"1333":1,"1339":5,"1443":1}}],["shouldhavenoaccessibilityviolations",{"3":{"1436":7}}],["shouldhave",{"2":{"1489":1},"3":{"1436":14,"1489":2}}],["shouldhandle",{"3":{"819":1,"1312":1,"1339":1}}],["shouldmatch",{"3":{"1436":5}}],["shouldlocalizeandpersist",{"3":{"1436":1}}],["shouldlockasync",{"3":{"1324":4}}],["shouldloadwithuserdata",{"3":{"1436":1}}],["shouldload",{"3":{"1310":2}}],["shouldapplyandpersist",{"3":{"1436":1}}],["shouldattempt",{"3":{"1300":2}}],["shouldaudit",{"3":{"1237":1,"1286":3}}],["shouldbypasscertificatevalidation",{"3":{"1286":2}}],["shouldbereachable",{"3":{"1436":1}}],["shouldbeforbidden",{"2":{"1627":1},"3":{"1436":1,"1627":1}}],["shouldbeaccessible",{"3":{"1436":2}}],["shouldbesealed",{"3":{"1436":4}}],["shouldbecolocatedwith",{"3":{"1436":6}}],["shouldbe",{"2":{"1168":1},"3":{"1168":1,"1237":1,"1436":26}}],["shouldsucceed",{"3":{"1436":1}}],["shouldshowerror",{"3":{"1436":4}}],["shouldshipfrom",{"2":{"81":1,"1436":1},"3":{"81":1,"1436":2}}],["shouldstayat",{"2":{"2178":1},"3":{"1436":2,"2178":1}}],["shouldstaybehind",{"2":{"1436":1,"2178":1},"3":{"1436":2,"2178":1}}],["shouldseed",{"2":{"1596":1},"3":{"1284":1,"1286":3,"1412":1,"1415":3,"1596":1}}],["shouldwritefilesink",{"2":{"401":1},"3":{"401":1,"1333":1,"1339":2}}],["shoulddeclare",{"2":{"160":1},"3":{"160":1,"1436":12}}],["should",{"3":{"0":1,"32":1,"33":1,"59":1,"62":1,"71":1,"109":1,"139":1,"155":1,"159":2,"160":2,"174":1,"175":1,"185":3,"188":1,"224":1,"230":1,"349":1,"358":1,"360":2,"361":1,"517":1,"519":1,"520":1,"537":1,"545":1,"550":1,"573":1,"625":1,"667":1,"674":1,"682":1,"709":1,"725":2,"758":1,"767":2,"801":1,"819":1,"832":2,"837":1,"861":1,"890":1,"899":1,"916":1,"940":2,"941":1,"955":1,"965":1,"980":1,"989":1,"1000":1,"1017":1,"1049":1,"1077":1,"1085":1,"1124":1,"1140":1,"1229":1,"1232":1,"1247":2,"1259":1,"1270":3,"1286":9,"1300":9,"1301":3,"1304":1,"1309":4,"1310":1,"1311":12,"1312":3,"1323":4,"1324":9,"1339":6,"1342":1,"1350":6,"1359":10,"1369":3,"1380":2,"1395":7,"1396":10,"1411":1,"1415":2,"1416":1,"1417":8,"1420":1,"1427":1,"1435":1,"1436":33,"1438":1,"1439":1,"1440":1,"1454":1,"1455":1,"1456":1,"1467":1,"1489":1,"1490":3,"1492":2,"1500":1,"1531":1,"1537":1,"1630":2,"1631":3,"1638":2,"1639":7,"1640":5,"1641":2,"1674":1,"1675":1,"1676":1,"1677":1,"1678":1,"1765":1,"1776":3,"1782":2,"1801":1,"1802":1,"1806":1,"1812":2,"1817":1,"1819":3,"1827":1,"1854":1,"1861":1,"1862":1,"1863":1,"1868":2,"1888":1,"1890":1,"1898":1,"1899":2,"1901":1,"1911":1,"1924":1,"1930":1,"1960":2,"1965":2,"1979":1,"1981":1,"1987":1,"1991":1,"1999":1,"2000":1,"2015":1,"2039":1,"2077":1,"2080":2,"2081":1,"2085":1,"2086":1,"2099":1,"2107":1,"2114":1,"2128":1,"2135":1,"2140":3,"2141":1,"2145":1,"2146":1,"2165":1,"2168":1,"2169":1,"2174":1,"2189":1,"2192":1}}],["showtargetpickers",{"3":{"1395":1}}],["showeventpicker",{"3":{"1395":1}}],["showeventpicker=",{"3":{"1395":2}}],["showempty",{"3":{"1395":1}}],["showed",{"3":{"147":1,"1070":1,"1339":1}}],["showgrid",{"3":{"1395":1}}],["showmyscheduleonlychanged",{"3":{"1395":1}}],["showmyscheduleonly",{"3":{"1395":1}}],["showmap",{"3":{"1395":3}}],["showmessageboxasync",{"3":{"1324":3}}],["showasync",{"3":{"1395":5}}],["showactionerror",{"3":{"1402":5}}],["showaction",{"3":{"1324":6,"1396":1}}],["showcancelsnackbar",{"3":{"1324":3,"1395":1}}],["showcase",{"3":{"618":1,"1434":1,"1436":1,"1438":1,"1486":1,"1487":1,"1643":2}}],["showpersistent",{"3":{"1324":8}}],["show",{"2":{"1484":1,"2034":1},"3":{"450":1,"537":1,"644":1,"681":1,"689":1,"741":1,"766":1,"1020":1,"1026":1,"1027":1,"1028":1,"1239":1,"1259":2,"1286":1,"1300":5,"1309":3,"1324":17,"1350":6,"1353":1,"1359":6,"1382":1,"1395":13,"1396":9,"1399":1,"1402":3,"1415":5,"1416":1,"1417":7,"1431":1,"1436":5,"1438":2,"1442":1,"1474":1,"1475":1,"1476":1,"1478":1,"1484":1,"1505":1,"1517":1,"1627":1,"1653":1,"1681":1,"1720":1,"1728":1,"1749":1,"1758":1,"1815":1,"1836":1,"1873":1,"1958":1,"2010":1,"2027":1,"2034":1,"2043":1,"2070":1,"2087":1,"2119":1,"2132":1,"2165":1,"2202":1}}],["shown",{"3":{"265":1,"1300":3,"1324":6,"1350":4,"1359":1,"1369":1,"1395":7,"1396":3,"1415":2,"1436":5,"1438":1,"1444":1,"1467":1,"1591":1,"1626":1,"1627":1,"1629":1,"1637":1,"1647":1,"1654":1,"1682":1,"1727":1,"1761":1,"2030":1,"2136":1}}],["showingcacheddata",{"3":{"1395":1}}],["showing",{"3":{"109":1,"265":1,"635":1,"881":1,"1300":1,"1311":2,"1324":3,"1350":1,"1359":4,"1388":1,"1391":1,"1395":8,"1396":5,"1415":2,"1416":1,"1417":2,"1436":5,"1479":1,"1750":1,"1941":1,"2003":1}}],["showstheapismessage",{"3":{"1436":1}}],["showsthesameconfirmation",{"3":{"1436":1}}],["showsclientvalidationerrors",{"3":{"1436":1}}],["showsearch",{"3":{"1324":1}}],["showsessionslink",{"3":{"1324":1}}],["shows",{"0":{"1910":1},"3":{"82":1,"109":1,"214":1,"227":1,"279":1,"536":1,"557":1,"585":1,"674":1,"684":1,"776":1,"782":1,"875":1,"890":1,"897":1,"905":2,"963":1,"981":1,"1004":1,"1018":1,"1020":1,"1029":1,"1102":2,"1229":1,"1237":2,"1259":1,"1270":1,"1280":1,"1286":7,"1289":1,"1300":4,"1301":1,"1307":1,"1309":7,"1311":3,"1313":1,"1323":6,"1324":38,"1339":13,"1340":1,"1344":1,"1350":7,"1351":1,"1359":10,"1362":1,"1369":1,"1375":1,"1380":3,"1384":1,"1385":1,"1387":1,"1388":1,"1391":3,"1395":40,"1396":26,"1397":1,"1398":1,"1402":13,"1403":1,"1414":1,"1415":2,"1416":2,"1417":7,"1427":2,"1431":1,"1433":1,"1436":9,"1438":1,"1440":1,"1456":1,"1467":1,"1470":1,"1474":1,"1484":2,"1492":1,"1577":1,"1620":1,"1627":1,"1631":2,"1646":1,"1657":2,"1661":2,"1670":1,"1673":1,"1684":1,"1685":1,"1689":1,"1702":1,"1704":1,"1729":1,"1730":1,"1748":1,"1750":2,"1756":1,"1768":2,"1773":2,"1836":1,"1913":1,"1919":1,"1923":1,"1932":1,"1943":1,"1949":1,"1950":1,"1971":1,"2005":1,"2010":1,"2022":1,"2081":1,"2086":1,"2099":1,"2116":1,"2117":1,"2135":1}}],["shotgun",{"3":{"1011":1,"1012":1,"1496":1,"1571":1}}],["shot",{"3":{"0":1,"422":1,"1161":1,"1259":1,"1286":3,"1297":1,"1309":1,"1324":4,"1334":1,"1339":1,"1359":1,"1389":1,"1393":1,"1395":6,"1414":1,"1415":1,"1417":2,"1436":2,"1438":1,"1765":1}}],["shortfall",{"3":{"1350":1,"1417":1}}],["shortcuts",{"3":{"1416":7}}],["shortcut",{"3":{"517":1,"923":1,"940":1,"1247":1,"1286":1,"1311":1,"1396":2,"1416":7,"1436":2,"1441":2,"1488":2,"1491":1,"1759":1,"2040":1}}],["shorthand",{"3":{"255":1,"674":1,"952":1,"954":1,"959":1,"1258":1,"1259":2,"1286":1,"1436":1,"1496":1}}],["shorter",{"3":{"139":1,"142":1,"359":1,"386":1,"387":1,"500":1,"733":1,"741":1,"827":2,"907":1,"975":1,"1244":1,"1247":1,"1270":2,"1286":2,"1288":1,"1300":1,"1301":2,"1309":1,"1311":2,"1323":1,"1324":1,"1350":1,"1359":1,"1415":1,"1436":3,"1438":1,"1465":1,"1821":1,"1824":1,"1900":1}}],["shortest",{"3":{"59":1,"135":1,"1265":1,"1359":2,"1436":6,"1759":1}}],["shorten",{"3":{"938":1,"1259":1,"1323":1,"1396":1}}],["shortened",{"3":{"461":1,"1187":1,"1396":1}}],["shortening",{"3":{"22":1,"459":1}}],["shortens",{"3":{"19":1,"526":1,"675":1,"1339":1,"1415":1}}],["short",{"3":{"0":3,"1":1,"39":1,"70":1,"71":1,"109":2,"110":1,"113":1,"117":1,"121":1,"122":1,"124":1,"125":1,"126":1,"223":1,"233":1,"235":1,"243":2,"244":1,"283":1,"284":1,"300":1,"318":1,"319":1,"324":1,"350":3,"351":1,"352":1,"359":2,"360":1,"361":2,"386":1,"390":2,"392":1,"459":2,"498":2,"500":2,"501":1,"508":1,"528":1,"549":1,"591":3,"593":1,"633":1,"640":1,"684":1,"690":1,"691":1,"734":1,"741":1,"743":1,"744":1,"790":2,"819":1,"820":2,"853":1,"855":1,"920":1,"921":1,"946":1,"948":1,"964":1,"973":1,"979":1,"1006":1,"1042":1,"1061":1,"1168":1,"1183":1,"1212":1,"1220":2,"1224":1,"1229":5,"1231":1,"1237":6,"1239":1,"1245":1,"1247":3,"1250":1,"1255":1,"1256":1,"1259":10,"1263":2,"1265":1,"1268":5,"1270":32,"1271":3,"1286":19,"1288":1,"1300":26,"1301":5,"1304":1,"1309":9,"1310":1,"1311":20,"1320":1,"1323":8,"1324":13,"1328":1,"1337":1,"1339":19,"1346":1,"1347":1,"1350":9,"1359":51,"1371":1,"1375":2,"1380":7,"1387":1,"1389":1,"1391":1,"1395":25,"1396":19,"1402":14,"1406":1,"1410":1,"1415":13,"1416":5,"1417":5,"1427":2,"1430":1,"1436":11,"1438":2,"1441":1,"1443":1,"1447":1,"1453":1,"1454":3,"1455":2,"1460":1,"1461":1,"1462":1,"1467":1,"1489":2,"1492":3,"1496":3,"1523":1,"1526":1,"1554":1,"1577":9,"1585":2,"1592":2,"1612":1,"1630":1,"1640":2,"1641":1,"1666":1,"1701":1,"1707":1,"1726":1,"1732":1,"1800":1,"1805":2,"1821":1,"1828":1,"1831":1,"1834":1,"1856":1,"1874":1,"1905":1,"1916":1,"1919":1,"1921":1,"1922":1,"1923":1,"1933":2,"1962":1,"1972":1,"1975":1,"1979":1,"1980":3,"1981":1,"1984":1,"1985":1,"1994":1,"2000":1,"2001":1,"2007":1,"2008":1,"2030":1,"2047":2,"2048":1,"2096":2,"2128":1,"2136":1,"2137":1,"2142":2,"2143":1,"2156":1,"2160":1,"2188":1,"2203":1,"2232":2}}],["shas",{"3":{"1483":1}}],["sha1",{"3":{"1300":1}}],["shadowed",{"3":{"1324":1}}],["shadow",{"3":{"1035":1,"1059":1,"1237":1,"1276":1,"1286":5,"1301":3,"1350":2,"1369":1,"1395":6,"1436":1,"1467":1,"1480":2,"2201":1}}],["shadowing",{"3":{"964":1,"1237":1}}],["shadows",{"3":{"840":1,"1311":1,"1443":1}}],["sha2",{"3":{"905":1,"1300":1}}],["sha256",{"2":{"418":2,"423":1,"424":1,"868":1,"870":1,"873":1,"1481":1},"3":{"30":1,"418":2,"423":2,"424":1,"868":1,"870":1,"873":1,"1300":8,"1309":1,"1311":2,"1427":1,"1445":1,"1481":1,"1895":2}}],["shaky",{"3":{"682":1,"685":1,"1417":2}}],["shaping",{"3":{"346":1,"572":1,"591":1,"595":1,"744":1,"827":2,"1238":1,"1242":3,"1244":2,"1247":9,"1270":3,"1272":1,"1309":4,"1311":2,"1339":2,"1350":4,"1356":1,"1359":7,"1380":1,"1395":1,"1436":3,"1438":1,"1488":1,"1727":2,"1815":1,"2055":1}}],["shapecollectiondata",{"2":{"1242":1},"3":{"741":1,"1242":1,"1247":4}}],["shaperow",{"2":{"744":1},"3":{"741":1,"744":1,"1311":1}}],["shaper",{"3":{"741":2,"742":1,"1436":1,"1438":1}}],["shapedaccessorcache",{"3":{"1247":4}}],["shapedata",{"2":{"741":1},"3":{"741":1,"1242":1,"1247":3,"1311":1}}],["shaped",{"0":{"1389":1},"3":{"175":1,"249":1,"253":1,"337":1,"341":1,"388":3,"439":1,"443":2,"573":1,"585":1,"608":1,"626":1,"633":1,"719":1,"741":3,"743":1,"785":1,"789":1,"825":1,"830":1,"880":1,"890":1,"921":1,"946":1,"948":1,"964":1,"1004":1,"1018":1,"1117":1,"1124":1,"1150":1,"1152":1,"1153":1,"1177":1,"1217":1,"1229":4,"1247":5,"1259":1,"1270":1,"1271":2,"1285":1,"1286":8,"1300":9,"1311":11,"1320":1,"1323":2,"1324":9,"1326":1,"1339":1,"1347":1,"1350":8,"1352":1,"1353":1,"1359":12,"1369":4,"1380":1,"1382":1,"1395":8,"1396":8,"1401":1,"1402":1,"1410":1,"1415":5,"1416":1,"1417":7,"1427":1,"1436":10,"1438":1,"1462":1,"1476":1,"1496":1,"1526":1,"1543":1,"1576":1,"1577":3,"1585":1,"1669":1,"1685":1,"1702":2,"1722":1,"1730":1,"1731":1,"1874":1,"1883":1,"1911":1,"1916":1,"1923":1,"1940":1,"1958":1,"2001":1,"2002":1,"2074":1,"2117":1,"2126":1,"2150":1}}],["shapes",{"0":{"1373":1,"1374":1,"1943":1},"3":{"0":2,"109":2,"157":1,"166":1,"170":1,"301":1,"317":1,"318":1,"395":1,"518":1,"522":1,"535":1,"549":1,"557":1,"566":1,"583":1,"591":1,"633":3,"640":1,"657":1,"733":1,"734":1,"743":1,"781":1,"782":1,"789":1,"810":1,"812":1,"826":1,"834":1,"845":1,"853":1,"920":1,"926":2,"980":2,"983":1,"984":1,"998":1,"1050":2,"1060":1,"1068":1,"1100":1,"1110":1,"1118":1,"1171":1,"1202":1,"1203":1,"1212":1,"1227":2,"1228":1,"1229":1,"1237":2,"1242":1,"1245":1,"1247":1,"1249":1,"1260":1,"1263":1,"1265":1,"1270":6,"1271":2,"1273":1,"1279":1,"1286":11,"1293":1,"1297":1,"1300":14,"1301":1,"1309":4,"1311":14,"1312":8,"1315":1,"1317":1,"1320":1,"1323":7,"1324":7,"1328":1,"1334":1,"1339":5,"1340":1,"1342":1,"1345":1,"1347":1,"1350":1,"1359":20,"1366":1,"1369":1,"1373":2,"1374":1,"1380":1,"1387":1,"1393":1,"1395":7,"1396":19,"1399":1,"1402":4,"1410":1,"1415":6,"1416":1,"1431":1,"1432":1,"1436":43,"1438":2,"1444":1,"1496":2,"1526":1,"1535":1,"1546":2,"1600":1,"1652":1,"1665":1,"1666":1,"1720":1,"1731":1,"1927":1,"1949":1,"1952":1,"1955":2,"1958":1,"1991":1,"1994":1,"1995":1,"2018":1,"2100":1,"2131":1}}],["shape",{"0":{"1261":1,"1295":1,"1331":1,"1343":1,"1363":1,"1375":1,"1613":1,"1718":1,"1820":1,"2051":1},"2":{"1704":1},"3":{"0":21,"24":1,"31":1,"42":1,"53":1,"59":1,"62":2,"68":1,"71":1,"72":1,"76":1,"77":2,"78":1,"80":1,"109":4,"110":1,"111":1,"122":1,"125":1,"126":1,"127":1,"130":1,"134":1,"136":2,"138":1,"139":2,"159":1,"164":1,"166":3,"180":1,"184":1,"186":1,"195":2,"201":1,"218":1,"226":1,"227":1,"230":1,"234":1,"243":1,"245":1,"247":1,"248":2,"255":2,"256":1,"258":1,"274":1,"280":1,"282":1,"300":1,"306":1,"309":1,"322":1,"325":2,"329":1,"331":1,"332":1,"333":1,"335":1,"341":1,"350":2,"352":1,"353":1,"372":1,"379":1,"380":1,"384":1,"400":1,"401":1,"404":1,"407":1,"412":1,"418":2,"423":1,"427":2,"428":1,"429":1,"430":1,"447":2,"448":5,"449":1,"451":1,"455":1,"459":1,"497":1,"498":1,"502":1,"509":1,"517":2,"519":1,"522":1,"523":1,"536":1,"539":1,"541":1,"544":1,"545":2,"549":6,"556":1,"563":2,"564":4,"572":2,"574":1,"582":2,"609":1,"625":1,"626":1,"630":1,"633":5,"635":2,"638":1,"655":1,"657":1,"661":1,"668":1,"674":2,"675":1,"676":1,"681":1,"689":1,"691":1,"698":2,"699":1,"700":1,"707":2,"714":1,"725":2,"726":1,"727":1,"731":1,"732":2,"733":2,"734":1,"740":1,"743":1,"749":3,"750":1,"760":2,"774":1,"776":1,"780":1,"782":5,"783":2,"784":3,"786":1,"790":3,"797":1,"798":1,"799":1,"801":2,"804":1,"808":1,"810":2,"812":1,"818":1,"821":1,"827":2,"829":1,"831":1,"832":1,"837":2,"838":1,"840":3,"845":3,"846":2,"847":1,"848":2,"854":1,"862":1,"868":1,"881":1,"882":2,"889":1,"891":1,"897":1,"898":1,"899":1,"901":1,"905":2,"907":1,"909":1,"913":1,"914":1,"921":1,"924":1,"926":5,"930":1,"935":1,"939":1,"941":1,"945":1,"946":4,"947":1,"948":2,"950":1,"957":1,"963":1,"964":1,"965":1,"966":1,"968":1,"971":2,"976":1,"979":2,"980":5,"981":3,"982":1,"1003":1,"1004":3,"1005":1,"1006":1,"1008":1,"1018":4,"1020":1,"1025":1,"1033":1,"1034":1,"1035":2,"1037":1,"1042":1,"1043":1,"1048":1,"1049":1,"1050":2,"1058":1,"1059":3,"1066":1,"1069":1,"1082":1,"1090":1,"1091":1,"1092":1,"1095":1,"1101":1,"1102":1,"1104":1,"1108":1,"1115":1,"1124":1,"1126":2,"1132":2,"1143":1,"1152":1,"1162":1,"1167":1,"1168":1,"1169":1,"1174":1,"1184":1,"1193":1,"1212":2,"1218":1,"1223":1,"1226":1,"1229":22,"1233":1,"1234":3,"1235":2,"1237":16,"1238":2,"1239":2,"1240":1,"1242":1,"1244":3,"1247":31,"1258":1,"1259":9,"1260":1,"1262":1,"1263":3,"1269":2,"1270":38,"1271":10,"1273":1,"1275":1,"1276":1,"1278":1,"1286":74,"1288":1,"1289":3,"1292":2,"1294":1,"1296":1,"1299":1,"1300":110,"1301":12,"1307":1,"1309":31,"1310":5,"1311":42,"1312":9,"1313":1,"1317":1,"1320":3,"1323":60,"1324":117,"1330":1,"1333":1,"1334":1,"1337":1,"1339":40,"1343":2,"1348":1,"1350":79,"1352":3,"1353":4,"1358":1,"1359":226,"1362":1,"1366":1,"1368":1,"1369":30,"1370":1,"1372":1,"1373":3,"1376":3,"1378":1,"1380":40,"1382":1,"1383":1,"1389":1,"1392":2,"1395":84,"1396":136,"1397":1,"1399":1,"1400":1,"1401":1,"1402":45,"1404":1,"1405":2,"1409":1,"1415":54,"1416":15,"1417":48,"1418":2,"1421":1,"1427":6,"1429":1,"1431":5,"1433":1,"1435":1,"1436":246,"1438":9,"1440":1,"1441":3,"1443":2,"1444":1,"1447":1,"1448":1,"1455":4,"1456":1,"1459":3,"1465":1,"1466":1,"1467":5,"1470":1,"1474":1,"1476":1,"1478":1,"1486":1,"1488":1,"1489":3,"1491":1,"1492":4,"1496":2,"1497":1,"1515":1,"1526":1,"1534":1,"1545":1,"1547":1,"1577":2,"1585":1,"1591":3,"1596":2,"1611":1,"1627":1,"1631":3,"1641":7,"1646":1,"1651":1,"1654":2,"1661":2,"1662":1,"1665":1,"1668":1,"1673":1,"1679":1,"1684":2,"1685":2,"1686":3,"1688":2,"1692":2,"1697":3,"1699":1,"1701":3,"1704":2,"1705":1,"1717":5,"1718":3,"1719":3,"1720":2,"1723":2,"1724":1,"1725":2,"1727":14,"1728":2,"1729":2,"1730":1,"1731":1,"1765":1,"1805":6,"1806":1,"1810":2,"1815":4,"1816":1,"1817":1,"1825":1,"1832":1,"1833":1,"1843":1,"1861":2,"1863":1,"1867":1,"1869":1,"1875":1,"1887":3,"1888":2,"1889":3,"1890":1,"1892":1,"1901":1,"1902":2,"1905":1,"1909":2,"1915":2,"1919":2,"1920":2,"1922":1,"1923":1,"1924":1,"1925":1,"1926":1,"1927":2,"1928":1,"1929":1,"1930":1,"1933":1,"1934":1,"1942":1,"1945":1,"1947":1,"1950":1,"1951":1,"1953":1,"1955":1,"1957":1,"1970":1,"1972":1,"1977":1,"1978":2,"1979":2,"1986":1,"1987":2,"1988":1,"1989":1,"1990":1,"1991":2,"1993":1,"2001":3,"2002":1,"2008":2,"2010":1,"2013":1,"2024":1,"2043":1,"2044":1,"2046":1,"2047":1,"2050":1,"2051":1,"2055":1,"2057":1,"2059":2,"2060":2,"2067":1,"2074":1,"2082":1,"2084":1,"2088":1,"2089":4,"2093":1,"2096":1,"2097":1,"2098":2,"2101":1,"2106":1,"2107":3,"2110":1,"2113":1,"2119":1,"2123":1,"2125":1,"2129":1,"2130":2,"2131":4,"2132":3,"2133":2,"2134":1,"2136":1,"2142":1,"2150":1,"2153":1,"2156":2,"2163":1,"2166":1,"2167":2,"2180":1,"2186":1,"2198":1,"2203":1,"2230":1,"2232":1}}],["shallowly",{"3":{"1459":1}}],["shallow",{"3":{"237":1,"566":1,"1237":1,"1359":1,"1436":1,"1438":1,"1453":1,"1577":1,"1957":1}}],["shards",{"3":{"2220":1}}],["sharply",{"3":{"1311":1,"1417":1}}],["sharpened",{"3":{"804":1}}],["sharpens",{"3":{"803":1,"1996":1}}],["sharper",{"3":{"168":1,"549":1,"1267":1,"1281":1,"1286":1,"1324":3,"1436":7,"2025":1}}],["sharpest",{"3":{"48":1,"160":1,"585":1,"1301":1,"1323":1,"1324":1,"1328":1,"1359":1,"1395":1,"1396":1,"1415":2,"1436":6,"1441":1,"1455":1,"2156":1}}],["sharp",{"3":{"102":1,"549":1,"735":1,"1312":1,"1396":1,"1436":2,"1787":1,"1792":1,"1793":1,"1801":1,"1807":1,"1812":1,"1817":1,"1827":1,"1834":1,"1846":1,"1853":1,"1862":1,"1868":1,"1877":1,"1886":1,"1892":1,"1899":1,"1905":1,"1912":1,"1921":1,"1922":3,"1924":1,"1930":1,"1941":1,"1949":1,"1950":1,"1959":1,"1965":1,"1972":1,"1979":1,"1985":1,"1991":1,"1997":1,"2002":1,"2014":1,"2022":1,"2028":1,"2030":1,"2048":1,"2049":1,"2058":1,"2060":1,"2069":1,"2080":1,"2086":1,"2098":1,"2108":1,"2123":1,"2128":1,"2133":1,"2139":1,"2146":1,"2153":1,"2160":1,"2169":1,"2180":1,"2193":1,"2203":1,"2211":1}}],["sharing",{"3":{"24":1,"25":1,"30":1,"58":1,"175":1,"228":1,"246":1,"248":1,"503":1,"597":1,"629":1,"665":1,"682":2,"715":1,"827":1,"846":1,"897":1,"964":1,"996":1,"1052":1,"1055":1,"1203":1,"1207":8,"1229":2,"1237":3,"1242":1,"1247":1,"1259":2,"1267":1,"1270":5,"1279":1,"1286":6,"1298":1,"1300":7,"1301":6,"1309":1,"1310":1,"1311":2,"1312":1,"1323":5,"1324":10,"1339":2,"1342":1,"1350":1,"1356":1,"1359":8,"1369":2,"1380":1,"1395":3,"1396":6,"1402":3,"1406":2,"1415":4,"1417":7,"1436":5,"1437":1,"1438":3,"1543":1,"1722":1,"1765":1,"1849":1,"1920":2,"1994":1,"1997":1,"2053":1,"2124":1}}],["sharefile",{"3":{"1417":2}}],["sharefilerequest",{"3":{"1417":2}}],["sharefileasync",{"3":{"1324":1,"1417":6,"2117":1}}],["sharetextrequest",{"3":{"1417":2}}],["sharetitle",{"3":{"1324":1}}],["sharelinkasync",{"3":{"1417":5,"2117":2}}],["sharelink",{"3":{"1417":4}}],["sharepagebutton",{"3":{"1324":7}}],["sharepagebuttontests",{"3":{"1199":2,"1207":4}}],["shareable",{"3":{"691":1,"1324":4,"1395":1,"1396":3,"1715":1}}],["sharescheduleasync",{"3":{"1395":1}}],["sharesthegatewayliftstrigger",{"3":{"1339":1}}],["shares",{"3":{"0":1,"74":1,"174":1,"181":2,"243":1,"265":1,"269":1,"277":1,"309":1,"665":1,"881":1,"998":1,"1000":1,"1133":1,"1229":2,"1239":1,"1255":1,"1259":2,"1267":1,"1270":1,"1271":2,"1273":1,"1277":1,"1278":1,"1286":13,"1290":1,"1300":2,"1309":1,"1310":2,"1311":10,"1323":3,"1324":10,"1339":5,"1348":1,"1350":3,"1359":8,"1380":4,"1391":1,"1395":1,"1396":3,"1402":1,"1415":1,"1416":1,"1417":3,"1427":1,"1436":9,"1438":1,"1442":1,"1475":1,"1488":1,"1539":1,"1591":1,"1698":1,"1849":1,"1851":1,"1894":1,"1998":1,"2000":1,"2071":1,"2177":1,"2232":1}}],["share",{"0":{"2111":1},"2":{"412":1,"2116":1,"2119":1},"3":{"0":8,"10":1,"15":1,"25":1,"27":1,"32":1,"46":1,"111":1,"116":1,"147":1,"157":1,"166":2,"169":1,"235":1,"248":1,"253":1,"335":1,"395":2,"412":2,"419":1,"420":1,"507":1,"633":2,"665":2,"667":1,"714":1,"733":1,"778":1,"799":1,"803":1,"827":2,"854":1,"881":1,"883":1,"891":1,"905":2,"909":1,"922":1,"926":1,"964":1,"998":1,"1018":1,"1036":1,"1040":1,"1043":1,"1044":1,"1045":1,"1066":1,"1096":1,"1116":1,"1185":1,"1192":1,"1193":1,"1196":1,"1202":1,"1203":1,"1237":1,"1239":1,"1241":1,"1242":1,"1243":3,"1247":13,"1259":1,"1270":7,"1271":3,"1284":1,"1286":27,"1297":1,"1300":12,"1301":10,"1309":6,"1310":3,"1311":8,"1312":1,"1317":1,"1320":2,"1322":1,"1323":9,"1324":31,"1325":1,"1332":1,"1337":1,"1339":12,"1346":1,"1350":5,"1351":1,"1353":1,"1358":1,"1359":38,"1366":1,"1369":3,"1380":6,"1385":2,"1387":1,"1395":30,"1396":17,"1397":1,"1402":3,"1415":2,"1416":2,"1417":51,"1425":1,"1427":2,"1435":1,"1436":21,"1438":10,"1445":1,"1453":1,"1454":1,"1467":6,"1486":1,"1489":1,"1496":5,"1591":2,"1597":1,"1630":2,"1631":2,"1639":5,"1640":1,"1641":3,"1664":1,"1669":2,"1731":1,"1732":1,"1789":1,"1805":1,"1847":1,"1859":1,"1862":1,"1865":1,"1868":1,"1894":1,"1898":1,"1900":1,"1908":2,"1909":1,"1916":1,"1932":1,"1972":1,"2021":1,"2024":1,"2056":1,"2081":1,"2086":1,"2112":1,"2115":1,"2116":4,"2117":1,"2118":2,"2119":2,"2121":1,"2122":2,"2192":1,"2232":1}}],["shared→masstransit",{"3":{"1576":1}}],["shared→domain→application→infra→api",{"3":{"1576":1}}],["shareddtos",{"3":{"1436":1}}],["sharedintegrationeventsnamespace",{"3":{"1436":1}}],["sharedadchome",{"3":{"1416":1}}],["sharedaccesskey=sas",{"3":{"1339":1}}],["sharedaccesskeyname=rootmanagesharedaccesskey",{"3":{"1339":1}}],["sharedassemblies",{"2":{"81":1,"1436":1},"3":{"80":1,"81":1,"1436":2}}],["sharedretrypolicy",{"2":{"1395":1},"3":{"1324":3,"1395":1}}],["sharedresource",{"3":{"265":1,"268":1,"905":1,"1199":15,"1203":1,"1207":2,"1324":29,"1436":5,"1496":1,"1577":2}}],["sharedownloadedfileasync",{"3":{"1324":1}}],["sharedkeywords",{"3":{"1350":2}}],["sharedkey",{"3":{"1300":1}}],["sharedlayertests",{"3":{"1199":1,"1207":2,"1436":4,"1489":1}}],["sharedlayertestsbase",{"3":{"1199":2,"1207":2,"1436":5,"1654":1}}],["sharedhttptestdoublestests",{"3":{"1199":1,"1207":2,"1436":3}}],["sharedcode",{"3":{"1436":2}}],["sharedcodes",{"3":{"1436":2}}],["sharedcodeerrors",{"3":{"1199":2,"1207":1,"1436":5}}],["sharedcategoryitems",{"3":{"1350":2}}],["sharedcachestripewebhooksecretstore",{"2":{"793":1},"3":{"792":1,"793":2,"794":1,"1589":1,"1591":1,"1596":1,"1597":1}}],["sharedstorereadoptions",{"2":{"733":1,"736":1},"3":{"733":1,"736":1,"1301":4}}],["shared",{"0":{"1284":1,"1289":1,"1300":1,"1322":1,"1336":1,"1406":1,"1465":1,"1970":1},"1":{"646":1,"647":1,"648":1,"649":1,"650":1,"651":1,"652":1,"653":1,"662":1,"663":1,"664":1,"665":1,"666":1,"667":1,"668":1,"669":1,"670":1,"695":1,"696":1,"697":1,"698":1,"699":1,"700":1,"701":1,"702":1,"703":1,"746":1,"747":1,"748":1,"749":1,"750":1,"751":1,"752":1,"753":1,"1893":1,"1894":1,"1895":1,"1896":1,"1897":1,"1898":1,"1899":1},"2":{"107":1,"109":1,"186":1,"190":1,"471":1,"472":1,"473":1,"576":1,"578":1,"938":1,"963":1,"966":1,"1051":1,"1217":1,"1222":1,"1229":3,"1230":1,"1237":2,"1271":1,"1287":2,"1309":2,"1325":1,"1340":1,"1341":1,"1344":1,"1359":1,"1396":4,"1402":2,"1404":1,"1415":1,"1504":1,"1650":2,"1653":1,"1660":1,"1687":1,"1699":2,"1702":2,"1727":2,"1781":1,"1805":1,"1829":1,"1962":1,"2071":1,"2078":1,"2157":1},"3":{"0":62,"15":1,"23":1,"26":2,"27":5,"31":2,"32":1,"33":1,"39":1,"42":1,"43":1,"45":1,"46":1,"47":1,"48":2,"53":1,"54":2,"58":1,"59":2,"61":1,"62":1,"68":1,"71":1,"74":1,"76":1,"78":2,"80":10,"81":4,"93":1,"95":2,"96":1,"98":2,"100":1,"107":1,"109":14,"110":2,"111":1,"113":1,"115":1,"121":1,"126":2,"130":2,"131":1,"132":1,"134":1,"135":1,"136":1,"139":1,"140":1,"150":1,"152":1,"155":1,"157":2,"160":2,"161":3,"166":1,"171":1,"173":2,"175":4,"176":1,"179":2,"182":1,"184":1,"186":13,"190":2,"196":1,"200":1,"202":2,"208":1,"214":2,"215":1,"216":2,"217":1,"220":1,"235":1,"237":1,"238":1,"241":1,"242":1,"243":3,"245":1,"246":2,"255":1,"256":1,"265":7,"266":2,"273":4,"283":2,"303":2,"305":5,"310":2,"311":1,"314":1,"318":2,"320":1,"325":1,"330":1,"340":1,"341":4,"346":1,"348":1,"350":1,"353":1,"360":1,"361":1,"368":1,"370":2,"382":2,"386":2,"387":1,"388":3,"391":1,"392":1,"397":2,"411":1,"412":2,"413":5,"418":3,"419":1,"420":5,"426":2,"427":1,"428":2,"430":1,"447":1,"448":2,"450":2,"457":1,"459":5,"461":2,"462":1,"463":1,"464":1,"466":1,"469":2,"470":9,"471":1,"472":2,"473":1,"475":10,"476":11,"477":13,"478":1,"482":1,"484":1,"490":1,"491":1,"492":1,"493":1,"499":2,"500":1,"505":1,"507":5,"508":1,"509":1,"510":1,"511":2,"516":1,"518":1,"523":2,"528":1,"534":1,"536":3,"538":1,"540":1,"549":2,"556":8,"558":2,"564":1,"570":1,"571":1,"572":3,"574":1,"576":6,"577":1,"578":1,"579":2,"583":6,"585":5,"587":1,"590":1,"591":2,"593":1,"594":1,"599":4,"601":4,"602":3,"603":1,"604":1,"605":1,"609":1,"610":1,"614":1,"617":2,"618":2,"624":1,"626":1,"633":1,"638":2,"640":2,"642":1,"643":4,"644":1,"646":1,"647":1,"649":2,"656":1,"657":5,"662":1,"665":1,"666":3,"667":3,"672":1,"674":4,"682":1,"690":10,"693":1,"695":1,"696":3,"698":4,"700":1,"702":2,"703":1,"707":1,"709":1,"718":1,"719":1,"725":4,"728":1,"729":1,"733":1,"741":1,"743":1,"746":1,"750":1,"753":1,"756":1,"757":1,"759":1,"760":2,"774":1,"776":1,"778":1,"782":4,"788":1,"790":5,"792":3,"793":1,"794":4,"798":3,"799":1,"803":1,"804":2,"805":1,"806":1,"810":1,"819":3,"821":1,"826":1,"827":5,"829":1,"831":2,"832":1,"833":1,"834":1,"836":1,"837":1,"838":4,"840":1,"841":1,"848":1,"860":1,"861":2,"868":1,"869":1,"872":1,"877":1,"881":6,"883":2,"884":1,"890":1,"891":1,"893":1,"903":1,"905":6,"906":1,"909":1,"910":1,"912":1,"914":1,"918":2,"920":1,"921":1,"922":1,"926":1,"938":1,"939":1,"946":1,"954":1,"956":1,"960":1,"962":1,"963":5,"964":3,"966":2,"967":1,"972":2,"973":2,"980":1,"982":1,"995":1,"996":1,"999":2,"1000":1,"1004":8,"1006":1,"1025":1,"1026":4,"1035":2,"1040":1,"1042":2,"1049":2,"1050":10,"1051":1,"1052":4,"1054":2,"1055":5,"1057":1,"1058":2,"1059":14,"1066":1,"1067":2,"1074":2,"1078":1,"1087":1,"1094":1,"1096":1,"1100":1,"1116":6,"1119":1,"1124":3,"1126":1,"1137":1,"1147":1,"1150":1,"1164":1,"1168":3,"1171":1,"1183":1,"1191":1,"1192":11,"1193":1,"1198":12,"1199":330,"1201":1,"1202":2,"1203":258,"1206":9,"1207":996,"1208":2,"1211":4,"1212":19,"1214":1,"1217":1,"1219":3,"1220":1,"1222":2,"1223":2,"1224":1,"1225":1,"1226":2,"1227":2,"1228":1,"1229":68,"1230":2,"1234":12,"1235":2,"1236":2,"1237":74,"1239":1,"1240":1,"1241":4,"1242":1,"1243":1,"1246":2,"1247":25,"1251":1,"1253":2,"1254":3,"1257":1,"1259":20,"1260":1,"1263":1,"1264":1,"1265":2,"1267":1,"1270":36,"1271":29,"1275":1,"1276":5,"1278":1,"1282":1,"1284":1,"1286":108,"1287":4,"1289":6,"1290":1,"1291":6,"1293":2,"1295":1,"1296":3,"1297":9,"1298":1,"1299":2,"1300":400,"1301":28,"1303":4,"1304":3,"1305":2,"1308":2,"1309":59,"1310":1,"1311":107,"1312":38,"1313":2,"1318":1,"1320":2,"1322":2,"1323":55,"1324":173,"1325":2,"1326":1,"1328":3,"1330":6,"1333":1,"1334":1,"1336":5,"1337":3,"1338":6,"1339":74,"1340":1,"1341":10,"1342":2,"1344":4,"1347":13,"1348":8,"1349":9,"1350":272,"1351":1,"1352":1,"1353":4,"1355":1,"1358":2,"1359":371,"1364":1,"1368":1,"1369":18,"1371":1,"1372":1,"1373":3,"1375":1,"1376":1,"1377":2,"1378":1,"1379":5,"1380":33,"1383":1,"1384":3,"1385":1,"1386":1,"1388":2,"1389":3,"1391":2,"1393":1,"1395":200,"1396":291,"1398":2,"1399":3,"1401":3,"1402":146,"1403":1,"1404":7,"1405":4,"1406":2,"1409":1,"1410":3,"1411":1,"1412":1,"1413":3,"1414":5,"1415":192,"1416":63,"1417":114,"1423":1,"1427":3,"1430":1,"1431":5,"1432":1,"1433":3,"1434":2,"1436":363,"1437":15,"1438":40,"1441":2,"1442":2,"1443":3,"1445":2,"1447":9,"1449":2,"1450":3,"1453":1,"1454":3,"1455":5,"1456":1,"1459":1,"1462":1,"1463":1,"1464":1,"1465":1,"1467":23,"1469":1,"1472":2,"1473":3,"1475":2,"1476":1,"1477":1,"1478":2,"1481":1,"1486":3,"1487":9,"1488":9,"1489":18,"1490":3,"1491":6,"1492":4,"1496":66,"1497":5,"1500":1,"1503":1,"1504":4,"1513":1,"1518":1,"1523":1,"1524":1,"1525":1,"1526":37,"1528":1,"1531":1,"1532":1,"1534":2,"1535":4,"1540":1,"1542":3,"1544":2,"1551":1,"1555":1,"1556":2,"1557":2,"1565":2,"1566":1,"1568":1,"1570":1,"1572":1,"1576":1,"1577":27,"1579":1,"1582":1,"1585":1,"1586":2,"1589":2,"1590":1,"1591":18,"1595":1,"1596":4,"1597":1,"1599":3,"1600":3,"1605":1,"1627":2,"1630":1,"1631":2,"1639":1,"1640":1,"1641":3,"1642":1,"1643":1,"1644":2,"1648":1,"1649":1,"1650":3,"1651":2,"1653":4,"1656":2,"1660":4,"1662":3,"1663":3,"1664":1,"1665":1,"1667":1,"1668":2,"1669":8,"1670":1,"1671":3,"1672":1,"1673":1,"1675":1,"1677":1,"1685":4,"1686":4,"1687":1,"1693":1,"1699":2,"1701":1,"1702":5,"1707":1,"1711":1,"1714":2,"1716":1,"1721":1,"1724":1,"1727":2,"1731":1,"1739":1,"1741":1,"1748":1,"1760":2,"1761":1,"1764":6,"1765":1,"1769":1,"1772":1,"1781":3,"1783":1,"1786":1,"1790":4,"1805":3,"1806":1,"1807":1,"1815":1,"1821":1,"1827":4,"1829":1,"1833":1,"1835":1,"1841":1,"1842":1,"1848":3,"1849":1,"1851":3,"1852":1,"1853":2,"1856":1,"1869":1,"1875":1,"1884":1,"1891":1,"1892":2,"1893":3,"1895":3,"1896":2,"1898":2,"1899":1,"1916":2,"1917":2,"1920":1,"1922":3,"1923":3,"1929":1,"1939":1,"1946":1,"1949":3,"1962":2,"1963":1,"1971":1,"1972":2,"1976":1,"1977":1,"1983":1,"1989":1,"1991":1,"1996":1,"1997":1,"1998":1,"1999":1,"2000":2,"2001":5,"2002":4,"2009":1,"2011":1,"2014":2,"2015":1,"2016":1,"2017":1,"2021":1,"2024":2,"2028":2,"2034":1,"2036":1,"2038":1,"2042":1,"2043":4,"2047":1,"2049":1,"2052":1,"2055":2,"2060":2,"2064":1,"2066":1,"2067":1,"2068":1,"2071":1,"2075":1,"2078":2,"2079":2,"2080":1,"2083":2,"2084":1,"2085":1,"2088":1,"2101":1,"2104":3,"2107":2,"2111":3,"2112":1,"2114":1,"2116":2,"2118":2,"2119":2,"2120":1,"2121":3,"2122":1,"2123":3,"2128":1,"2130":1,"2131":3,"2132":2,"2143":1,"2150":3,"2151":1,"2152":2,"2154":1,"2155":1,"2157":1,"2160":2,"2166":1,"2167":1,"2168":1,"2169":1,"2175":1,"2178":2,"2186":1,"2188":1,"2194":1,"2195":1,"2198":1,"2203":2,"2208":1,"2214":1,"2215":1,"2221":1,"2227":5,"2230":3,"2232":13}}],["sha",{"2":{"1589":1,"1597":1},"3":{"0":5,"157":2,"161":1,"225":1,"231":1,"368":1,"373":3,"374":2,"418":1,"424":1,"428":1,"429":1,"629":1,"854":1,"868":1,"870":1,"873":1,"905":1,"1018":3,"1091":1,"1212":2,"1286":1,"1290":1,"1294":1,"1295":1,"1300":8,"1309":1,"1311":4,"1418":1,"1426":1,"1427":1,"1436":1,"1438":1,"1445":4,"1452":2,"1455":8,"1456":2,"1459":4,"1461":3,"1465":1,"1466":1,"1467":1,"1469":1,"1475":3,"1526":1,"1589":1,"1591":1,"1596":1,"1597":1,"1641":2,"1666":1,"1667":1,"1765":1,"1767":1,"1900":1,"1902":2,"1905":2,"1908":2,"1982":1,"2176":1,"2180":1}}],["sha512",{"1":{"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"1900":1,"1901":1,"1902":1,"1903":1,"1904":1,"1905":1},"2":{"310":1,"946":1},"3":{"0":3,"307":1,"308":1,"309":1,"310":3,"311":1,"314":1,"945":2,"946":4,"1212":2,"1292":1,"1300":4,"1324":1,"1436":1,"1576":1,"1577":1,"1667":1,"1747":1,"1763":1,"1764":1,"1765":4,"1899":1,"1900":1,"1902":3,"1904":1,"1905":3,"2208":1}}],["symptoms",{"3":{"770":1,"2081":1}}],["symptom",{"3":{"234":1,"310":1,"664":1,"666":1,"821":1,"956":1,"963":1,"1339":5,"1396":2,"1430":1,"1436":3,"1651":1,"1970":1,"1989":1}}],["symmetricsecuritykey",{"3":{"1300":1,"1311":1}}],["symmetrically",{"3":{"1259":1,"1286":1,"1300":1,"1323":1,"1324":1,"1436":1}}],["symmetrical",{"3":{"930":1}}],["symmetric",{"3":{"24":1,"30":2,"31":2,"32":1,"33":1,"698":1,"764":2,"766":1,"819":1,"1212":1,"1237":1,"1267":1,"1270":1,"1286":1,"1288":1,"1300":3,"1312":3,"1324":3,"1350":1,"1415":1,"1441":1,"1450":1,"1843":1,"1893":2,"1894":1,"1895":1,"1898":1,"1899":2,"1920":1,"1953":1,"1959":1,"2009":1,"2021":1,"2028":1,"2032":1,"2230":1}}],["symmetry",{"3":{"0":1,"870":1,"1035":1,"1270":3,"1286":1,"1311":2,"1312":1,"1339":1,"1359":1,"1395":2,"1396":2,"1415":3,"1927":1,"2183":1}}],["symbolic",{"3":{"1467":1}}],["symbolically",{"3":{"1311":1}}],["symbols",{"3":{"636":1,"954":2,"1034":1,"1037":1,"1324":1,"1417":1,"1436":2,"1673":1}}],["symbol",{"3":{"0":1,"336":1,"619":1,"633":4,"634":1,"1311":2,"1324":11,"1396":1,"1417":1,"1432":1,"1488":1,"1492":1,"1591":1,"1600":1}}],["synonym",{"3":{"472":1}}],["synonyms",{"3":{"0":1,"798":1}}],["syncquestionanswers",{"3":{"1350":1,"1359":1}}],["synccategoryitems",{"3":{"1350":1,"1359":2}}],["synctrackedkey",{"3":{"1286":1}}],["syncing",{"3":{"1259":1,"1350":1,"1417":2}}],["syncstrategy",{"3":{"1526":1,"1535":1}}],["syncsessionquestionanswers",{"3":{"1359":1}}],["syncsessionchildren",{"3":{"1359":1}}],["syncscopedreadcontroller",{"3":{"1199":2,"1207":1}}],["syncs",{"3":{"988":1,"1252":1,"1259":1,"1359":3,"1417":1,"1632":2,"2220":1}}],["syncregistrationsasync",{"2":{"707":1,"710":1},"3":{"707":1,"710":1,"1323":1}}],["syncfusion",{"3":{"650":1}}],["syncasync",{"2":{"507":1},"3":{"507":1,"1324":7,"1359":3}}],["synchronizes",{"3":{"1632":1}}],["synchronize",{"2":{"1460":1},"3":{"1359":1,"1459":2,"1460":1}}],["synchronized",{"3":{"23":1,"643":1,"1324":1}}],["synchronization",{"3":{"481":2,"482":1,"485":1,"1229":1,"1286":1,"1310":1,"1312":1,"1324":2,"1380":1,"1395":2,"2232":1}}],["synchronizationcontext",{"2":{"481":1},"3":{"481":1,"1359":1}}],["synchronously",{"3":{"97":1,"601":1,"1259":4,"1323":1,"1324":1,"1335":1,"1339":2,"1350":1,"1395":6,"1402":1,"1413":1,"1427":1,"1467":1,"1792":1,"2016":1,"2111":1}}],["synchronous",{"1":{"50":1,"51":1,"52":1,"53":1,"54":1,"55":1},"3":{"0":3,"50":1,"52":1,"59":1,"68":1,"109":1,"184":1,"444":1,"603":1,"727":1,"743":3,"861":1,"933":1,"1059":2,"1060":1,"1202":1,"1203":1,"1212":1,"1213":1,"1220":1,"1229":3,"1247":2,"1259":10,"1270":1,"1274":1,"1283":1,"1286":16,"1297":1,"1300":5,"1301":1,"1309":1,"1311":8,"1312":4,"1318":1,"1323":2,"1324":10,"1339":1,"1349":2,"1350":2,"1359":10,"1372":2,"1380":4,"1395":6,"1396":3,"1402":4,"1417":13,"1431":1,"1436":10,"1496":1,"1526":1,"1543":1,"1544":1,"1549":1,"1656":2,"1789":1,"1790":2,"1793":1,"1805":1,"2016":1,"2020":1,"2030":1,"2044":1,"2190":1,"2199":1,"2203":1,"2232":1}}],["synced",{"3":{"0":1,"1212":1,"1347":1,"1359":7,"1369":1,"1632":2,"1636":1}}],["sync",{"3":{"0":1,"209":1,"243":1,"273":1,"274":1,"399":1,"434":1,"483":1,"507":1,"509":1,"649":1,"650":1,"1117":1,"1212":1,"1220":1,"1229":1,"1237":1,"1270":2,"1286":6,"1300":1,"1311":2,"1323":1,"1324":8,"1339":4,"1342":1,"1347":2,"1350":16,"1358":1,"1359":16,"1362":1,"1369":4,"1395":2,"1396":4,"1402":1,"1416":1,"1417":1,"1427":1,"1436":3,"1438":3,"1480":1,"1496":2,"1526":2,"1535":1,"1544":1,"1549":1,"1560":1,"1577":2,"1629":2,"1630":1,"1631":1,"1635":1,"1636":1,"1638":1,"1639":1,"1660":1,"1669":1,"1673":1,"1833":1,"1971":2,"2083":1,"2136":1,"2157":1,"2159":1,"2220":1}}],["syntactically",{"3":{"1323":1,"1324":1,"1395":1}}],["syntactic",{"3":{"1191":1,"1204":1,"1500":1}}],["syntax",{"2":{"2044":1},"3":{"0":1,"136":2,"332":1,"981":1,"1184":1,"1214":2,"1237":1,"1247":3,"1259":1,"1262":1,"1264":1,"1270":1,"1271":1,"1286":7,"1300":3,"1309":5,"1311":2,"1316":1,"1323":3,"1324":8,"1339":1,"1350":1,"1395":1,"1417":4,"1436":5,"1438":1,"1455":1,"1486":1,"1493":1,"1640":1,"1928":1,"1990":1,"2044":1}}],["synthesis",{"3":{"1417":2}}],["synthesize",{"3":{"1417":1}}],["synthesizer",{"3":{"1417":2}}],["synthesizes",{"3":{"1300":1,"1396":1,"1488":1}}],["synthesized",{"3":{"1300":2,"1311":1,"1312":1,"1324":1,"1436":1}}],["synthesizing",{"3":{"109":1,"1300":1,"1312":2,"1438":1}}],["synthetictrafficheadername",{"3":{"827":1,"1339":3}}],["synthetictrafficsecret",{"2":{"827":1,"1467":1,"2024":1},"3":{"827":2,"1339":6,"1458":1,"1467":2,"2024":1}}],["synthetic",{"2":{"1458":2,"1468":1,"1470":1},"3":{"0":1,"173":1,"179":1,"572":1,"597":1,"598":1,"599":2,"825":2,"827":6,"1244":1,"1247":1,"1337":2,"1339":12,"1350":1,"1369":1,"1395":2,"1436":1,"1455":3,"1458":5,"1461":1,"1466":1,"1467":5,"1468":1,"1470":1,"1474":1,"1476":1,"1488":1,"1535":1,"1591":1,"1670":1}}],["systematically",{"3":{"1526":1,"1531":1}}],["systematic",{"3":{"1436":1,"1496":1,"1530":1,"1532":1}}],["systempreferred",{"3":{"1417":1}}],["systemprefersdark",{"2":{"273":1},"3":{"273":1,"1324":1,"2083":1}}],["systemprompt",{"2":{"1426":1},"3":{"1018":1,"1369":2,"1426":1,"1427":2}}],["systemnethttpclient",{"2":{"73":1},"3":{"73":1}}],["systems",{"3":{"0":1,"61":1,"689":1,"812":1,"1011":1,"1116":1,"1238":1,"1359":2,"1380":1,"1395":1,"1426":1,"1776":1,"1789":1,"1792":1,"1802":1,"1815":1,"1835":1,"1846":1,"1847":1,"1853":1,"1912":1,"2027":1,"2108":1,"2160":1,"2162":1,"2169":1,"2171":1,"2193":1,"2213":1,"2217":1,"2218":1,"2220":6,"2238":1}}],["system",{"0":{"1503":1,"1557":1,"1629":1,"1763":1,"1777":1},"1":{"1313":1,"1314":1,"1315":1,"1316":1,"1317":1,"1318":1,"1319":1,"1320":1,"1321":1,"1322":1,"1323":1},"2":{"72":1,"397":1,"471":1,"475":1,"476":1,"477":1,"591":1,"665":1,"681":1,"798":1,"800":1,"803":1,"804":1,"805":1,"960":1,"966":1,"1049":1,"1054":1,"1163":1,"1196":1,"1229":5,"1270":1,"1311":2,"1324":3,"1332":1,"1344":1,"1369":1,"1400":1,"1415":1,"1447":1,"1480":2,"1687":1,"2156":1,"2186":1},"3":{"0":4,"58":1,"72":1,"78":2,"79":1,"81":1,"125":1,"244":1,"259":1,"266":1,"274":1,"340":1,"349":2,"350":2,"351":1,"361":1,"397":3,"400":1,"413":1,"419":1,"427":1,"470":2,"471":1,"475":1,"476":1,"477":1,"517":1,"520":1,"536":1,"539":1,"591":1,"593":1,"607":2,"611":1,"612":1,"665":1,"681":1,"691":2,"696":1,"698":4,"699":1,"700":2,"702":3,"706":1,"717":1,"741":1,"765":1,"792":1,"798":1,"799":2,"800":1,"801":1,"803":1,"804":1,"805":3,"809":1,"810":1,"853":1,"899":1,"947":1,"948":1,"954":2,"960":1,"963":1,"964":1,"966":1,"980":3,"1013":1,"1018":5,"1035":1,"1049":1,"1050":1,"1054":1,"1058":1,"1082":1,"1090":1,"1091":4,"1099":1,"1115":1,"1134":1,"1140":1,"1142":1,"1145":1,"1154":1,"1155":1,"1157":1,"1163":1,"1185":1,"1192":2,"1196":1,"1202":2,"1203":2,"1212":3,"1213":3,"1216":2,"1221":1,"1223":1,"1227":1,"1229":17,"1231":1,"1235":1,"1237":34,"1241":1,"1247":59,"1249":1,"1253":2,"1259":19,"1264":1,"1270":25,"1271":5,"1274":1,"1275":2,"1286":67,"1287":1,"1293":1,"1294":1,"1300":81,"1301":11,"1302":1,"1309":24,"1310":7,"1311":49,"1312":8,"1313":2,"1318":2,"1323":41,"1324":94,"1325":1,"1332":1,"1333":2,"1339":24,"1340":1,"1342":1,"1344":2,"1350":14,"1359":71,"1366":3,"1369":13,"1370":1,"1380":7,"1381":1,"1395":39,"1396":62,"1400":1,"1402":6,"1403":1,"1414":1,"1415":29,"1416":8,"1417":68,"1422":1,"1424":1,"1426":1,"1427":20,"1431":1,"1435":3,"1436":124,"1438":3,"1439":1,"1441":3,"1443":6,"1447":1,"1449":1,"1453":1,"1455":3,"1457":1,"1458":3,"1465":2,"1467":6,"1474":1,"1476":1,"1480":3,"1488":2,"1492":2,"1496":6,"1499":1,"1523":1,"1526":1,"1534":1,"1535":1,"1537":1,"1549":1,"1550":1,"1553":1,"1559":1,"1565":1,"1566":1,"1570":1,"1571":1,"1572":2,"1574":1,"1577":2,"1581":1,"1582":1,"1583":1,"1588":1,"1591":2,"1595":1,"1596":1,"1597":1,"1629":1,"1630":4,"1631":2,"1632":31,"1633":1,"1636":1,"1638":3,"1639":3,"1641":31,"1660":1,"1662":1,"1664":1,"1666":1,"1669":1,"1670":1,"1687":1,"1708":1,"1748":1,"1752":1,"1763":1,"1765":3,"1769":1,"1770":2,"1772":1,"1776":1,"1777":1,"1788":1,"1794":1,"1795":1,"1796":3,"1799":1,"1801":1,"1802":1,"1812":1,"1813":1,"1831":1,"1835":1,"1836":2,"1844":1,"1851":1,"1869":2,"1888":1,"1889":3,"1892":1,"1893":2,"1899":1,"1907":2,"1916":1,"1921":1,"1922":1,"1932":1,"1951":1,"1952":1,"1974":3,"1976":2,"1977":1,"1979":2,"1989":1,"2003":1,"2007":1,"2024":1,"2030":1,"2037":1,"2038":1,"2064":1,"2067":2,"2079":3,"2091":1,"2113":1,"2121":1,"2155":2,"2156":4,"2168":1,"2171":1,"2176":1,"2186":2,"2193":1,"2195":1,"2196":1,"2197":1,"2203":1,"2209":1,"2220":2,"2227":1}}],["swipe",{"3":{"1324":1,"1416":1,"1417":2,"1669":1}}],["switchboard",{"3":{"2114":1}}],["switchboards",{"3":{"1542":1}}],["switchgeneration",{"3":{"1396":2}}],["switchable",{"3":{"572":1,"578":1,"1417":1,"1648":1}}],["switching",{"3":{"265":1,"267":1,"415":1,"454":1,"733":1,"799":1,"882":1,"1247":1,"1276":1,"1286":3,"1300":2,"1311":2,"1323":1,"1324":1,"1369":1,"1390":1,"1395":2,"1416":1,"1417":2,"1427":1,"1436":2,"1662":1,"1854":1,"1897":1}}],["switchexpressionexception",{"3":{"1436":3}}],["switchexpressionfixture",{"3":{"1199":1,"1207":1,"1436":4}}],["switched",{"3":{"0":2,"235":1,"556":1,"667":1,"914":1,"930":1,"941":1,"1232":1,"1259":1,"1270":1,"1286":4,"1300":1,"1309":1,"1311":4,"1312":1,"1313":1,"1323":2,"1324":3,"1332":1,"1339":2,"1347":1,"1350":1,"1359":3,"1380":1,"1395":5,"1396":11,"1415":2,"1417":2,"1419":1,"1436":3,"1438":2,"1450":1,"1467":1,"1572":1,"1631":1,"1668":1,"1720":1,"1845":1,"1938":1,"1970":1}}],["switchers",{"3":{"1415":1}}],["switcher",{"3":{"0":1,"265":5,"266":1,"273":1,"1300":1,"1311":5,"1323":1,"1324":5,"1415":1,"1417":4,"1436":1,"1438":1,"1577":1,"1644":1,"1653":4,"1669":1,"2083":2,"2086":1}}],["switches",{"1":{"2081":1,"2082":1,"2083":1,"2084":1,"2085":1,"2086":1},"3":{"0":2,"109":1,"171":1,"179":1,"265":1,"432":1,"452":2,"609":1,"674":1,"684":1,"939":1,"1175":1,"1184":1,"1270":2,"1277":1,"1286":7,"1300":1,"1301":1,"1306":2,"1309":2,"1310":2,"1311":1,"1320":2,"1323":3,"1324":7,"1326":1,"1333":1,"1339":3,"1350":1,"1355":1,"1359":3,"1395":4,"1396":6,"1402":1,"1416":2,"1427":1,"1436":4,"1441":2,"1456":1,"1467":4,"1481":1,"1496":1,"1675":1,"1701":1,"1921":1,"2081":1,"2210":1}}],["switch",{"0":{"1288":1,"1724":1},"2":{"966":1,"1538":1,"1862":1},"3":{"0":8,"31":1,"32":1,"59":1,"142":1,"150":2,"164":1,"166":2,"171":1,"195":1,"243":2,"265":4,"267":1,"290":1,"295":3,"296":1,"299":1,"301":1,"302":1,"361":1,"440":1,"572":1,"576":1,"600":1,"602":1,"618":1,"644":1,"666":1,"674":1,"691":1,"819":1,"838":1,"879":1,"916":1,"963":1,"964":1,"965":1,"966":1,"1034":4,"1035":1,"1036":1,"1051":1,"1075":2,"1091":1,"1107":2,"1108":1,"1212":1,"1220":1,"1229":1,"1235":1,"1237":2,"1241":1,"1243":1,"1247":4,"1259":2,"1260":1,"1264":1,"1270":4,"1273":2,"1280":1,"1286":20,"1288":1,"1297":2,"1300":6,"1303":1,"1311":15,"1312":2,"1313":1,"1323":6,"1324":25,"1336":1,"1339":9,"1347":1,"1350":7,"1359":2,"1363":1,"1380":1,"1395":24,"1396":39,"1399":1,"1402":6,"1415":3,"1416":3,"1417":22,"1421":2,"1427":3,"1431":1,"1436":22,"1438":5,"1440":1,"1443":1,"1444":1,"1446":2,"1447":1,"1450":1,"1467":9,"1475":1,"1479":1,"1488":2,"1496":3,"1507":1,"1526":1,"1535":1,"1538":2,"1591":2,"1602":1,"1607":1,"1608":1,"1631":1,"1653":1,"1661":2,"1674":1,"1686":1,"1692":1,"1712":1,"1717":1,"1724":2,"1741":1,"1742":1,"1795":1,"1805":1,"1842":1,"1856":1,"1862":1,"1894":1,"1970":1,"1972":1,"2011":1,"2013":1,"2020":2,"2073":1,"2083":1,"2086":2,"2111":1,"2126":1,"2134":1,"2135":1,"2138":1,"2139":1,"2145":1,"2179":1,"2180":1,"2197":1}}],["swagger",{"3":{"1534":1}}],["swamping",{"3":{"714":1}}],["swallowing",{"0":{"1919":1},"3":{"230":1,"537":1,"897":1,"898":2,"901":1,"989":1,"1237":1,"1252":1,"1259":2,"1311":2,"1323":1,"1324":4,"1339":1,"1355":1,"1359":1,"1396":2,"1413":1,"1415":1,"1417":4,"1436":1,"1455":1,"1459":1,"1496":1,"1946":1,"2165":1}}],["swallow",{"3":{"0":1,"111":1,"255":1,"258":1,"517":1,"534":2,"536":1,"538":1,"896":1,"897":5,"898":2,"899":2,"901":1,"1247":6,"1259":5,"1270":1,"1301":1,"1309":1,"1311":2,"1323":1,"1324":2,"1339":1,"1359":2,"1389":1,"1395":3,"1396":6,"1402":4,"1415":2,"1417":5,"1438":2,"1665":1,"1919":2,"1933":1,"1934":1,"1940":1,"1946":1,"1949":1,"1950":1}}],["swallowed",{"3":{"0":1,"157":1,"400":1,"461":1,"854":1,"896":2,"897":3,"898":1,"901":1,"988":1,"1212":1,"1247":8,"1286":1,"1300":1,"1301":2,"1307":1,"1309":1,"1311":4,"1323":2,"1324":10,"1355":1,"1358":1,"1359":1,"1369":1,"1383":2,"1395":11,"1396":7,"1399":1,"1402":5,"1408":1,"1415":1,"1417":7,"1433":1,"1436":2,"1438":3,"1443":1,"1455":1,"1665":1,"1909":2,"1918":1,"1919":1,"2006":1,"2117":1,"2156":1}}],["swallows",{"3":{"0":2,"125":1,"195":1,"230":1,"759":1,"897":1,"988":1,"1259":1,"1263":1,"1270":1,"1275":1,"1286":2,"1300":2,"1309":1,"1311":2,"1324":6,"1359":1,"1395":1,"1396":3,"1402":3,"1415":1,"1416":1,"1417":6,"1431":1,"1436":3,"1438":1,"1665":1,"1933":1,"1949":2}}],["swapping",{"3":{"0":2,"54":1,"472":1,"478":1,"798":1,"799":1,"1212":1,"1259":1,"1286":2,"1300":1,"1301":1,"1312":1,"1323":1,"1324":4,"1359":2,"1361":1,"1369":1,"1378":1,"1396":3,"1415":1,"1420":1,"1436":2,"1438":1,"1793":1,"1825":1,"1902":1,"2017":1,"2073":1,"2079":1,"2150":1}}],["swappable",{"1":{"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1},"3":{"0":1,"240":1,"1212":1,"1248":1,"1259":1,"1270":1,"1286":4,"1309":1,"1324":3,"1359":3,"1396":3,"1417":4,"1427":1,"1436":2,"1668":1,"2232":1}}],["swapped",{"3":{"0":3,"244":1,"380":1,"499":1,"636":1,"800":1,"803":1,"1259":3,"1300":1,"1311":1,"1324":1,"1350":1,"1359":2,"1396":1,"1402":1,"1436":4,"1496":1,"1684":1,"1736":1,"1902":2,"1982":1,"2026":1,"2178":1}}],["swaps",{"3":{"0":4,"178":1,"225":1,"434":1,"440":1,"633":1,"832":2,"881":1,"1018":1,"1212":2,"1239":1,"1286":1,"1300":1,"1307":1,"1311":3,"1316":1,"1323":1,"1324":2,"1339":1,"1359":2,"1378":1,"1380":1,"1383":1,"1395":4,"1396":5,"1413":1,"1415":2,"1417":2,"1431":1,"1436":1,"1438":1,"1440":1,"1467":1,"1477":1,"1488":1,"1492":1,"1526":1,"1936":1,"1948":1,"1972":1,"1975":1,"1979":1,"2013":1,"2075":1,"2119":1,"2123":1,"2126":1}}],["swap",{"3":{"0":3,"31":1,"68":1,"150":1,"241":1,"243":2,"244":1,"247":1,"253":1,"257":1,"259":2,"261":1,"265":1,"350":1,"454":1,"632":1,"651":1,"664":1,"732":1,"801":1,"1018":2,"1019":1,"1075":1,"1076":1,"1077":1,"1079":1,"1090":1,"1091":1,"1092":2,"1142":1,"1212":2,"1247":1,"1257":1,"1259":1,"1286":2,"1288":1,"1301":1,"1309":2,"1311":1,"1312":1,"1323":5,"1324":2,"1339":1,"1369":1,"1380":1,"1396":7,"1413":1,"1415":1,"1417":1,"1427":3,"1435":1,"1436":5,"1438":1,"1442":1,"1474":1,"1492":1,"1534":1,"1553":1,"1571":1,"1577":4,"1586":1,"1724":1,"1727":1,"1765":1,"1790":1,"1791":1,"1803":1,"1847":1,"1849":1,"1853":1,"1916":2,"1922":1,"1933":1,"1979":1,"2028":1,"2033":1,"2060":1,"2075":1,"2078":1,"2111":1,"2128":1,"2150":2,"2177":1,"2232":1}}],["swelling",{"3":{"1395":1}}],["sweepdeadlettersasync",{"3":{"1436":1}}],["sweepharness",{"3":{"1199":2,"1207":1}}],["sweeper",{"3":{"853":1,"854":1,"1259":2,"1293":1,"1294":1,"1300":3,"1324":1,"1415":2,"1641":1,"1667":1,"1765":1}}],["sweeping",{"3":{"148":1,"284":1,"1300":1,"1324":1,"1359":1,"1406":1,"1415":1,"1961":1,"2196":1}}],["sweeps",{"3":{"0":2,"24":1,"145":1,"635":1,"788":1,"793":1,"839":1,"937":1,"1212":2,"1259":2,"1276":2,"1278":1,"1284":1,"1286":6,"1300":1,"1313":1,"1317":1,"1323":1,"1359":1,"1438":3,"1490":1,"1492":1,"1526":1,"1585":1,"1661":1,"1664":2,"1731":2,"1764":1,"1845":1}}],["sweep",{"0":{"539":1,"2167":1},"3":{"0":9,"24":1,"27":1,"123":1,"135":1,"146":1,"147":3,"148":1,"149":1,"151":1,"187":2,"245":2,"246":1,"254":1,"257":1,"258":1,"260":1,"267":1,"369":1,"465":1,"497":1,"534":6,"536":7,"537":2,"538":3,"539":9,"540":2,"541":4,"574":1,"579":1,"634":1,"696":1,"707":2,"713":1,"715":2,"720":1,"725":1,"733":1,"737":1,"739":1,"741":2,"743":2,"744":1,"760":1,"780":1,"782":1,"789":1,"792":1,"794":1,"798":1,"799":1,"802":1,"809":6,"810":5,"812":2,"813":3,"814":1,"815":2,"891":1,"903":2,"905":9,"906":1,"907":2,"909":1,"941":2,"942":1,"955":1,"1003":1,"1004":1,"1016":1,"1018":1,"1022":1,"1036":1,"1041":1,"1042":1,"1044":1,"1074":1,"1075":1,"1084":1,"1118":1,"1212":1,"1256":2,"1259":8,"1264":1,"1270":2,"1273":1,"1275":2,"1276":2,"1286":34,"1290":4,"1300":8,"1311":2,"1316":1,"1317":1,"1318":1,"1323":8,"1324":2,"1359":3,"1367":2,"1368":1,"1369":1,"1395":2,"1396":4,"1436":7,"1438":5,"1459":1,"1460":2,"1461":1,"1467":1,"1475":5,"1483":1,"1485":1,"1489":1,"1490":1,"1492":1,"1496":33,"1500":1,"1526":1,"1576":2,"1577":3,"1585":1,"1591":2,"1600":3,"1648":1,"1654":1,"1664":1,"1672":1,"1693":1,"1737":1,"1765":3,"1844":2,"1845":1,"1948":1,"1959":1,"1960":1,"1965":2,"1982":1,"1984":2,"2055":1,"2112":1,"2115":1,"2161":1,"2166":2,"2167":9,"2168":8,"2169":2,"2183":1,"2190":1,"2215":1,"2232":1}}],["swept",{"3":{"0":2,"78":1,"249":1,"633":1,"905":1,"1004":1,"1077":1,"1256":1,"1277":1,"1286":2,"1290":1,"1300":2,"1333":1,"1359":2,"1436":1,"1441":1,"1455":1,"1465":1,"1531":1,"1569":1,"1735":1,"1736":1,"1785":1,"2112":1}}],["se",{"3":{"1686":1}}],["seq",{"2":{"760":1},"3":{"760":1}}],["sequencing",{"0":{"1617":1},"3":{"127":1,"151":1,"383":1,"518":1,"1100":1,"1359":1,"1395":1,"1467":1,"1944":1}}],["sequenceequal",{"2":{"1902":1},"3":{"1286":1,"1300":1,"1436":1,"1902":1}}],["sequenced",{"3":{"1191":1,"1323":1,"1436":2}}],["sequences",{"3":{"0":1,"126":1,"127":1,"1262":1,"1323":1,"1396":1,"1423":1,"1436":2,"1826":2}}],["sequence",{"0":{"1824":1,"1839":1,"2095":1},"3":{"0":3,"57":1,"115":1,"117":2,"119":1,"121":2,"122":1,"127":1,"256":1,"279":1,"281":1,"283":1,"459":1,"523":1,"560":1,"572":3,"633":1,"651":1,"698":1,"715":1,"733":1,"749":1,"750":1,"751":1,"838":1,"1069":1,"1100":2,"1145":1,"1212":1,"1232":1,"1237":5,"1259":4,"1262":4,"1270":7,"1286":5,"1289":1,"1300":4,"1301":1,"1309":2,"1311":7,"1316":2,"1323":8,"1324":4,"1339":2,"1343":1,"1350":1,"1359":22,"1395":8,"1396":2,"1399":1,"1402":3,"1415":3,"1416":4,"1417":1,"1427":1,"1436":17,"1438":2,"1441":1,"1452":1,"1455":1,"1463":1,"1467":1,"1473":1,"1474":1,"1478":1,"1488":1,"1489":1,"1577":1,"1591":1,"1631":1,"1653":2,"1656":1,"1658":1,"1685":1,"1727":1,"1779":1,"1824":3,"1825":1,"1826":3,"1838":1,"1839":1,"1878":1,"1881":1,"1883":1,"1886":1,"1905":1,"1915":1,"1941":1,"2091":1,"2095":1,"2096":1,"2098":2,"2107":1,"2196":1}}],["sequentially",{"3":{"1":1,"122":1,"538":1,"727":1,"759":1,"914":1,"916":1,"1263":1,"1271":1,"1278":1,"1310":1,"1322":1,"1339":1,"1359":3,"1415":2,"1429":1,"1436":2,"1488":1,"1852":1,"2168":1}}],["sequential",{"3":{"0":1,"122":1,"286":1,"470":1,"477":1,"537":1,"690":1,"798":1,"987":1,"988":1,"992":1,"1116":1,"1233":1,"1237":2,"1263":1,"1270":2,"1271":1,"1286":4,"1292":1,"1300":1,"1322":1,"1342":1,"1350":1,"1359":8,"1369":1,"1395":2,"1396":5,"1402":1,"1415":4,"1436":2,"1438":1,"1455":2,"1577":1,"1631":2,"1664":1,"1840":1,"1845":1,"2001":1,"2164":1,"2169":1}}],["segoe",{"3":{"1324":2,"2075":1}}],["segregation",{"3":{"1212":1,"1237":2,"1259":1,"1260":1,"1270":3,"1278":1,"1286":3,"1291":1,"1300":7,"1309":2,"1311":3,"1323":1,"1324":2,"1359":5,"1380":1,"1395":4,"1396":1,"1415":1,"1417":1,"1427":1}}],["segregated",{"3":{"545":1,"1272":1,"1278":1,"1311":1,"1359":1}}],["segmentversionedprobecontroller",{"3":{"1199":3,"1207":1}}],["segmented",{"3":{"178":1}}],["segment",{"3":{"0":1,"123":1,"135":1,"139":1,"178":1,"246":1,"333":1,"446":1,"447":1,"450":1,"470":1,"477":1,"549":1,"607":1,"635":1,"741":1,"798":1,"827":1,"1004":3,"1006":2,"1050":2,"1115":1,"1116":2,"1118":1,"1124":1,"1126":2,"1228":1,"1229":4,"1241":3,"1247":13,"1267":1,"1270":3,"1285":1,"1286":14,"1300":8,"1301":1,"1311":9,"1321":1,"1323":2,"1324":10,"1339":6,"1342":1,"1350":1,"1359":2,"1365":1,"1369":3,"1396":1,"1415":5,"1436":21,"1467":1,"1477":1,"1666":1,"1730":1,"1810":1,"1856":1,"1920":2,"2043":3,"2044":1,"2129":1,"2130":1,"2132":1,"2133":1,"2149":1}}],["segments",{"3":{"0":1,"333":1,"549":1,"599":1,"1228":1,"1229":3,"1241":2,"1247":4,"1270":2,"1286":1,"1300":1,"1311":4,"1324":4,"1337":1,"1339":2,"1436":2,"1467":2}}],["segmentsperwindow",{"2":{"178":1},"3":{"0":1,"178":1,"1311":5}}],["sesion",{"3":{"265":1}}],["session→400",{"3":{"1611":1}}],["sessionpresent",{"3":{"1396":1}}],["sessionprefix",{"3":{"1309":3}}],["sessionvalidationservice",{"3":{"1396":1}}],["sessionvalidationrules",{"3":{"1207":9,"1271":2,"1359":28,"1496":1}}],["sessionvalidationrulestests",{"3":{"1199":1,"1207":4,"1359":4}}],["sessionqa",{"2":{"1630":1,"1632":1},"3":{"1396":3,"1402":2,"1630":1,"1632":1}}],["sessionquestionid",{"3":{"1396":3,"1402":5,"1630":1}}],["sessionquestionidentifiertype",{"3":{"1396":4,"1402":16,"1415":1}}],["sessionquestioninvariants",{"2":{"1398":1},"3":{"1199":9,"1203":1,"1207":2,"1396":3,"1398":2,"1399":2,"1402":17}}],["sessionquestionlifecycletests",{"3":{"1199":1,"1207":2}}],["sessionquestionconfiguration",{"3":{"1199":2,"1203":1,"1207":2,"1396":5,"1402":3}}],["sessionquestionchannel",{"2":{"1402":1},"3":{"1199":10,"1203":1,"1207":2,"1399":2,"1402":29}}],["sessionquestionchanged",{"2":{"782":1,"1398":1},"3":{"690":1,"782":1,"1199":5,"1203":1,"1207":2,"1396":4,"1398":1,"1402":11}}],["sessionquestiontests",{"3":{"1199":1,"1207":2}}],["sessionquestionviewbuilder",{"2":{"1401":1,"1534":1},"3":{"1199":6,"1203":1,"1207":2,"1286":1,"1396":2,"1401":2,"1402":11,"1436":1,"1534":1}}],["sessionquestion",{"2":{"1397":1,"1398":1},"3":{"1199":24,"1203":1,"1207":2,"1350":1,"1396":11,"1397":2,"1398":6,"1402":46,"1415":1,"1436":2,"1438":1,"1487":1,"1496":2,"1630":1}}],["sessionquestiondto",{"2":{"1398":1},"3":{"1199":20,"1203":1,"1207":2,"1396":4,"1398":2,"1402":39}}],["sessionquestiondismissedpayload",{"3":{"1199":2,"1203":1,"1207":2,"1402":5}}],["sessionquestionpendingcountchangedpayload",{"2":{"1402":1},"3":{"1199":4,"1203":1,"1207":2,"1402":9}}],["sessionquestionapprovedpayload",{"2":{"1399":1},"3":{"1199":4,"1203":1,"1207":2,"1399":1,"1402":10}}],["sessionquestionanswerid",{"3":{"1350":1,"1359":8}}],["sessionquestionansweridentifiertype",{"3":{"1350":3,"1359":4,"1395":3,"1396":1}}],["sessionquestionanswerconfiguration",{"2":{"1362":1},"3":{"1199":1,"1203":1,"1207":2,"1359":1,"1362":4,"1369":5,"1396":1}}],["sessionquestionanswerchanged",{"2":{"1345":1,"1631":1,"1634":1},"3":{"1199":3,"1203":1,"1207":2,"1345":1,"1350":5,"1359":2,"1631":1,"1634":1}}],["sessionquestionanswertests",{"3":{"1199":1,"1207":2}}],["sessionquestionanswernavigationpopulatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionquestionanswernavigationpopulator",{"3":{"1199":2,"1203":1,"1207":2,"1359":5}}],["sessionquestionanswerrules",{"3":{"1199":4,"1203":1,"1207":2,"1350":4,"1352":1,"1359":38}}],["sessionquestionanswerdtomappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionquestionanswerdtomapper",{"3":{"1199":11,"1203":1,"1207":2,"1359":8}}],["sessionquestionanswerdto",{"2":{"1347":1},"3":{"1199":16,"1203":1,"1207":2,"1347":1,"1350":9,"1359":3,"1380":1,"1395":4,"1396":5}}],["sessionquestionansweredpayload",{"3":{"1199":2,"1203":1,"1207":2,"1402":7}}],["sessionquestionanswer",{"2":{"1342":1,"1638":1,"1639":1,"1640":1},"3":{"1198":1,"1199":21,"1203":1,"1207":2,"1342":2,"1350":11,"1359":20,"1369":3,"1380":1,"1630":1,"1631":5,"1632":1,"1634":2,"1635":3,"1637":1,"1638":7,"1639":5,"1640":6}}],["sessionquestionanswers",{"2":{"1115":1,"1343":1,"1363":1},"3":{"1115":1,"1343":1,"1350":5,"1359":18,"1363":1,"1369":2,"1380":3,"1395":3,"1396":2,"1447":1,"1630":2,"1631":1,"1632":1,"1635":1,"1638":1,"1639":4}}],["sessionquestionanswerscontrollertests",{"3":{"1199":1,"1207":2}}],["sessionquestionanswerscontroller",{"2":{"325":1,"1371":1,"1373":1,"1639":1},"3":{"325":3,"326":1,"743":1,"1199":3,"1203":1,"1207":6,"1239":1,"1247":3,"1300":2,"1311":4,"1350":1,"1359":32,"1371":2,"1372":4,"1373":2,"1374":3,"1380":30,"1396":2,"1496":1,"1639":1,"1995":1}}],["sessionquestionupvoteidentifiertype",{"3":{"1402":1}}],["sessionquestionupvoteinvariants",{"3":{"1199":2,"1203":1,"1207":2,"1402":4}}],["sessionquestionupvotes",{"3":{"1396":1,"1630":1}}],["sessionquestionupvoteconfiguration",{"3":{"1199":2,"1203":1,"1207":2,"1286":1,"1396":4,"1402":1}}],["sessionquestionupvotechangedpayload",{"3":{"1199":4,"1203":1,"1207":2,"1396":2,"1402":7}}],["sessionquestionupvotechangedhandlertests",{"3":{"1199":1,"1207":3,"1438":1}}],["sessionquestionupvotechangedhandler",{"2":{"522":1,"1100":1,"1399":1},"3":{"522":2,"897":2,"900":1,"1100":2,"1199":2,"1203":1,"1207":2,"1247":1,"1396":3,"1399":7,"1402":11,"1496":2}}],["sessionquestionupvotechanged",{"2":{"383":1,"522":1,"1100":1,"1399":1},"3":{"383":1,"1199":5,"1203":1,"1207":2,"1399":1,"1402":10}}],["sessionquestionupvotetests",{"3":{"1199":1,"1207":2}}],["sessionquestionupvote",{"2":{"1398":1,"1402":1},"3":{"1199":17,"1203":1,"1207":2,"1396":6,"1398":1,"1402":27,"1496":1,"1630":1}}],["sessionquestionuiservicetests",{"3":{"1199":1,"1207":2}}],["sessionquestionuiservice",{"2":{"1192":1},"3":{"881":1,"1192":1,"1199":2,"1203":1,"1207":2,"1300":6,"1396":7,"1402":1}}],["sessionquestionscontrollertests",{"3":{"1199":1,"1207":3}}],["sessionquestionscontroller",{"2":{"1874":1},"3":{"1199":3,"1203":1,"1207":2,"1311":2,"1380":1,"1396":3,"1402":30,"1496":1,"1526":1,"1874":1}}],["sessionquestionsubmittedpointshandlertests",{"3":{"782":1,"1199":1,"1207":3,"1396":1}}],["sessionquestionsubmittedpointshandler",{"3":{"690":1,"692":1,"782":1,"1199":2,"1203":1,"1207":2,"1237":1,"1396":10,"1402":2}}],["sessionquestions",{"2":{"1402":2,"2110":1},"3":{"493":1,"494":1,"495":1,"522":3,"523":2,"524":1,"897":1,"996":1,"1100":3,"1203":34,"1207":102,"1247":4,"1270":1,"1286":1,"1309":1,"1359":1,"1396":19,"1397":1,"1398":3,"1399":3,"1401":3,"1402":92,"1436":3,"1438":1,"1447":1,"1496":1,"1632":3,"2110":1}}],["sessionmatchesscoretier",{"3":{"1395":1}}],["sessionmatchesstatus",{"3":{"1395":2}}],["sessionmatchesfilters",{"3":{"1395":1}}],["sessionmappingonlydbcontext",{"3":{"1199":1,"1207":1}}],["sessionget",{"3":{"1324":1}}],["sessionnotinevent",{"3":{"1402":1}}],["sessionnotfound",{"3":{"905":1,"1300":2,"1359":1,"1395":1}}],["sessionnavigationpopulatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionnavigationpopulator",{"3":{"1199":2,"1203":1,"1207":2,"1310":2,"1354":1,"1359":11}}],["sessionbstatus",{"3":{"1350":1}}],["sessionbtitle",{"3":{"1350":1}}],["sessionbid",{"3":{"1350":1}}],["sessionbuilder",{"3":{"1199":29,"1207":2,"1436":1}}],["sessionbookmarkcount",{"3":{"1396":1}}],["sessionbookmarks",{"3":{"1396":5}}],["sessionbookmarksgrpcservicetests",{"3":{"1199":1,"1207":2,"1438":1}}],["sessionbookmarksgrpcservice",{"2":{"1378":1},"3":{"1199":2,"1203":1,"1207":2,"1312":6,"1350":1,"1359":2,"1378":4,"1380":6,"1396":1}}],["sessionbookmarkvalidationserviceclient",{"3":{"1380":1}}],["sessionbookmarkvalidationservicebase",{"3":{"1380":1}}],["sessionbookmarkvalidationservicetests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionbookmarkvalidationservice",{"3":{"1199":6,"1203":1,"1207":2,"1350":2,"1355":4,"1359":9,"1380":3}}],["sessionbookmarkvalidationservicegrpcadaptertests",{"2":{"1199":1},"3":{"1199":1,"1207":2,"1438":1}}],["sessionbookmarkvalidationservicegrpcadapter",{"2":{"53":1,"1203":1,"1312":1,"1378":1,"1927":1},"3":{"53":1,"1199":2,"1203":1,"1207":2,"1312":4,"1350":1,"1378":4,"1380":8,"1927":1}}],["sessionbookmarkuiservicetests",{"3":{"1199":1,"1207":2,"1396":2,"1417":1}}],["sessionbookmarkuiservice",{"3":{"1199":2,"1203":1,"1207":2,"1396":14,"1417":1}}],["sessionbookmarkbuttontests",{"3":{"1199":1,"1207":2}}],["sessionbookmarkbutton",{"2":{"1391":1},"3":{"1199":2,"1203":1,"1207":2,"1391":3,"1395":6,"1396":4,"1496":1}}],["sessiontitlerequiredkey",{"3":{"1395":1}}],["sessiontitlerules",{"3":{"1199":3,"1203":1,"1207":1,"1271":1,"1353":1,"1359":5}}],["sessiontitle",{"3":{"1350":5,"1380":1,"1395":3,"1396":3}}],["sessiontests",{"3":{"1199":1,"1207":2}}],["sessiontokenresult",{"2":{"1298":1},"3":{"1199":9,"1203":1,"1207":1,"1298":1,"1300":10}}],["sessiontokenresponse",{"2":{"1298":1,"1968":1},"3":{"1199":5,"1203":1,"1207":1,"1298":1,"1300":6,"1968":1}}],["sessionevent",{"3":{"1369":1}}],["sessioneventidrules",{"3":{"1199":3,"1203":1,"1207":1,"1271":3,"1359":8,"1496":1}}],["sessionentityqueryservicetests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionentityqueryservice",{"3":{"1199":2,"1203":1,"1207":2,"1354":2,"1359":8}}],["sessioneditmodeltests",{"3":{"1199":1,"1207":2}}],["sessioneditmodel",{"3":{"1199":2,"1203":1,"1207":2,"1395":6}}],["sessionhandoff",{"2":{"1324":1},"3":{"1324":1}}],["sessionhandoffendpoints",{"3":{"1199":2,"1203":1,"1207":3,"1300":4,"1324":18,"1496":1}}],["sessionhandoffservicestests",{"3":{"1199":1,"1207":2,"1324":2,"1438":1}}],["sessionhandoffprotector",{"3":{"1184":1,"1199":7,"1203":1,"1207":3,"1324":17}}],["sessionformfields",{"3":{"1395":2}}],["sessionformmodel",{"2":{"1526":1},"3":{"1199":4,"1203":1,"1207":2,"1350":2,"1384":2,"1395":14,"1526":2,"1531":1,"1532":1,"1535":1}}],["sessionfieldrules",{"3":{"1199":3,"1203":1,"1207":1,"1353":1,"1359":21}}],["sessionfeedbackorganizer",{"2":{"1395":1},"3":{"1395":2}}],["sessionfeedbacktests",{"3":{"1199":1,"1207":2,"1396":1,"1438":1}}],["sessionfeedbackservicetests",{"3":{"1199":1,"1207":2,"1396":1}}],["sessionfeedbackservice",{"3":{"1199":2,"1203":1,"1207":2,"1396":6}}],["sessionfeedbacksubmittedpointshandlertests",{"3":{"1199":1,"1207":2,"1396":1}}],["sessionfeedbacksubmittedpointshandler",{"3":{"1199":2,"1203":1,"1207":2,"1259":1,"1350":2,"1359":2,"1396":8}}],["sessionfeedbacksubmitted",{"2":{"195":1,"1341":1,"1349":1,"1639":1},"3":{"195":1,"690":1,"1199":6,"1203":1,"1207":2,"1237":2,"1341":1,"1349":5,"1350":6,"1359":4,"1396":3,"1436":1,"1467":1,"1631":1,"1639":1}}],["sessionfeedbackdto",{"3":{"1199":10,"1203":1,"1207":4,"1347":2,"1350":12,"1359":3,"1380":1,"1395":3}}],["sessionfeedbackpage",{"3":{"1199":2,"1207":2}}],["sessionfeedback",{"2":{"692":1},"3":{"690":1,"692":1,"1199":5,"1203":1,"1207":2,"1344":1,"1350":1,"1395":2,"1396":38,"1526":1,"1531":1,"1534":1}}],["sessiondurationsorttests",{"3":{"1199":1,"1207":2}}],["sessiondtomappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessiondtomapper",{"3":{"1199":8,"1203":1,"1207":2,"1350":4,"1353":2,"1359":21}}],["sessiondtotests",{"3":{"1199":1,"1207":2}}],["sessiondto",{"3":{"1199":47,"1203":1,"1207":2,"1311":2,"1347":2,"1350":40,"1359":23,"1380":2,"1382":1,"1395":21,"1396":7,"1496":2,"1875":1}}],["sessiondescriptionrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":3}}],["sessiondetails",{"3":{"1395":2,"1396":1}}],["sessiondetailstaleloadtests",{"3":{"1199":1,"1207":2}}],["sessiondetailscheduletests",{"3":{"1199":1,"1207":2,"1438":1}}],["sessiondetailroomcachetests",{"3":{"1199":1,"1207":2,"1438":2}}],["sessiondetailcategorychiptests",{"3":{"1199":1,"1207":2}}],["sessiondetailpage",{"3":{"1199":10,"1207":2}}],["sessiondetail",{"3":{"1119":1,"1199":5,"1203":1,"1207":2,"1237":1,"1384":2,"1395":51,"1526":3,"1531":1,"1535":1}}],["sessiondeleted",{"2":{"781":1,"783":1},"3":{"781":1,"783":1}}],["sessionupdaterequestvalidatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionupdaterequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":13}}],["sessionupdaterequest",{"2":{"1875":1},"3":{"1199":5,"1203":1,"1207":2,"1359":10,"1380":1,"1875":1}}],["sessiononlycontextbase",{"3":{"1199":3,"1207":1}}],["sessionlookup",{"3":{"1396":1,"1402":1}}],["sessionlookups",{"3":{"1199":1,"1203":1,"1207":2,"1385":2,"1387":1,"1395":26}}],["sessionlookupservicetests",{"3":{"1199":1,"1207":2,"1396":2}}],["sessionlookupservice",{"2":{"1192":1},"3":{"1192":1,"1199":2,"1203":1,"1207":2,"1324":2,"1396":14,"1496":1}}],["sessionlevel",{"3":{"1350":2,"1359":1,"1395":1}}],["sessionlisturi",{"3":{"1380":2}}],["sessionlisteventfiltertests",{"3":{"1199":1,"1207":2,"1436":1}}],["sessionlistcurrenteventclocktests",{"3":{"1199":1,"1207":3,"1438":1}}],["sessionlist",{"3":{"1199":3,"1203":1,"1207":2,"1324":4,"1350":2,"1383":2,"1385":1,"1395":22}}],["sessionlistpage",{"3":{"1199":3,"1207":2,"1436":1}}],["sessionlivemoderationpaneltests",{"3":{"1199":1,"1207":2}}],["sessionlivemoderationpanel",{"2":{"1401":1},"3":{"1199":3,"1203":1,"1207":3,"1396":4,"1401":1,"1402":16,"1531":1}}],["sessionliveurlrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":5}}],["sessionliveuiservice",{"2":{"1192":1,"1401":1},"3":{"1192":1,"1199":1,"1203":1,"1207":2,"1396":6,"1401":2,"1402":2}}],["sessionlivequestionpanel",{"2":{"1401":1},"3":{"1199":3,"1203":1,"1207":2,"1396":2,"1401":1,"1402":10}}],["sessionlivequestionpaneltests",{"3":{"954":1,"960":1,"1199":1,"1207":2}}],["sessionlivepollpaneltests",{"3":{"1199":1,"1207":2}}],["sessionlivepollpanel",{"2":{"1401":1},"3":{"1199":3,"1203":1,"1207":2,"1395":1,"1396":1,"1401":1,"1402":7}}],["sessionliveinfo",{"3":{"1199":23,"1203":1,"1207":2,"1349":1,"1350":9,"1359":1,"1378":1,"1380":3,"1402":10,"1496":1}}],["sessionlive",{"2":{"1397":1},"3":{"556":3,"881":1,"954":1,"960":1,"1192":1,"1199":2,"1203":17,"1207":46,"1300":5,"1395":1,"1396":44,"1397":4,"1400":5,"1401":9,"1402":36,"1436":1,"1496":3,"1526":1,"1531":1,"1534":1}}],["sessionroomfiltertests",{"3":{"1199":1,"1207":2,"1247":1,"1438":2}}],["sessionroomschedulingtests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionroomscheduling",{"2":{"1359":1,"1534":1},"3":{"545":1,"551":1,"1199":4,"1203":1,"1207":2,"1352":7,"1359":15,"1496":2,"1534":1}}],["sessionretrievalfailed",{"2":{"1600":1},"3":{"1600":1}}],["sessionresult",{"3":{"1395":1,"1396":1}}],["sessionresourcelinksrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":3}}],["sessionrecordingurlrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":3}}],["sessionremindercoordinatortests",{"3":{"1199":1,"1207":2,"1396":1,"1417":1}}],["sessionremindercoordinator",{"3":{"1199":4,"1203":1,"1207":2,"1396":10,"1417":3}}],["sessionreminderplannertests",{"3":{"1199":1,"1207":2}}],["sessionreminderplanner",{"3":{"1199":4,"1203":1,"1207":3,"1396":16}}],["sessionreminder",{"3":{"1199":3,"1203":1,"1207":1,"1396":5}}],["sessionrefreshoutcome",{"3":{"1184":1,"1185":1,"1199":6,"1203":1,"1207":3,"1300":8,"1324":1,"1496":1}}],["sessionrefreshstatus",{"3":{"1184":1,"1199":5,"1203":1,"1207":1,"1300":6,"1324":1}}],["sessioncreationfailed",{"2":{"1600":1},"3":{"1600":1,"1770":1}}],["sessioncreaterequestvalidatortests",{"3":{"1199":1,"1207":2,"1359":4}}],["sessioncreaterequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":13}}],["sessioncreaterequestmappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessioncreaterequestmapper",{"3":{"1199":2,"1203":1,"1207":2,"1359":7}}],["sessioncreaterequest",{"3":{"1199":9,"1203":1,"1207":2,"1270":1,"1359":12,"1374":1,"1380":1}}],["sessioncreatetests",{"3":{"1199":1,"1207":2}}],["sessioncreatemodeltests",{"3":{"1199":1,"1207":2}}],["sessioncreatemodel",{"3":{"1199":3,"1203":1,"1207":2,"1395":6}}],["sessioncreatepage",{"3":{"1199":12,"1207":2}}],["sessioncreated",{"2":{"781":1,"783":1},"3":{"781":1,"783":1,"1259":1,"1631":1,"1632":2,"1634":3}}],["sessioncreatedhandler",{"2":{"780":1},"3":{"780":1}}],["sessioncreate",{"3":{"128":1,"1199":2,"1203":1,"1207":2,"1395":25,"1526":2,"1532":1,"1535":2}}],["sessioncleanuptestcontext",{"3":{"1199":2,"1207":1}}],["sessionclaimstokentests",{"3":{"1199":1,"1207":2,"1300":1,"1438":1}}],["sessionclaimstoken",{"3":{"1184":2,"1185":1,"1199":5,"1203":1,"1207":2,"1300":6,"1324":2,"1496":1}}],["sessioncount",{"3":{"1350":1}}],["sessioncommandvalidatortests",{"3":{"1207":4,"1359":4}}],["sessionconfiguration",{"2":{"1361":1},"3":{"1082":1,"1199":1,"1203":1,"1207":2,"1350":1,"1359":2,"1361":2,"1362":7,"1369":6,"1496":1}}],["sessioncookieauthenticationextensions",{"2":{"1298":1},"3":{"1199":1,"1203":1,"1207":1,"1298":1,"1300":2}}],["sessioncookieauthenticationhandlertests",{"3":{"1199":1,"1207":2,"1300":1}}],["sessioncookieauthenticationhandler",{"2":{"207":1,"209":1,"1287":1,"1298":1,"1300":1,"1968":1,"1971":1,"1972":1},"3":{"0":1,"207":1,"209":1,"1199":3,"1203":1,"1207":3,"1208":1,"1287":1,"1298":7,"1300":14,"1416":1,"1968":1,"1971":1,"1972":1}}],["sessioncookierequest",{"2":{"1298":1},"3":{"1199":4,"1203":1,"1207":1,"1298":1,"1300":4}}],["sessioncookieendpointstests",{"3":{"1199":1,"1207":3,"1300":1}}],["sessioncookieendpoints",{"2":{"1298":1,"1968":1},"3":{"980":1,"1198":1,"1199":17,"1203":1,"1207":3,"1208":1,"1287":1,"1298":8,"1300":20,"1324":3,"1968":1}}],["sessioncookie",{"3":{"207":1,"1300":2,"1968":1}}],["sessioncookiesync",{"3":{"1324":4}}],["sessioncookiestore",{"3":{"1199":1,"1203":1,"1207":1,"1300":4,"1311":2,"1496":1}}],["sessioncookiesamesite",{"3":{"1184":2,"1300":1,"1324":2}}],["sessioncookiesettings",{"2":{"1184":1},"3":{"1184":3,"1199":8,"1203":1,"1207":2,"1300":10,"1311":2,"1324":3,"1496":1}}],["sessioncookies",{"3":{"207":1,"980":1,"1108":1,"1183":2,"1184":3,"1203":18,"1207":64,"1208":3,"1298":6,"1300":68,"1311":1,"1324":1,"1438":2,"1496":1,"1582":1,"1968":1}}],["sessioncookiejartests",{"3":{"1199":1,"1207":2,"1300":1}}],["sessioncookiejar",{"2":{"207":1,"1968":1},"3":{"207":1,"1108":1,"1198":1,"1199":5,"1203":1,"1207":2,"1298":4,"1300":15,"1534":1,"1968":1}}],["sessioncategories",{"3":{"1350":2,"1395":1}}],["sessioncategoryitemid",{"3":{"1350":1,"1359":5}}],["sessioncategoryitemidentifiertype",{"3":{"1350":3,"1359":4,"1395":3}}],["sessioncategoryitemconfiguration",{"2":{"1362":1},"3":{"1199":1,"1203":1,"1207":2,"1362":2,"1369":6}}],["sessioncategoryitemchanged",{"2":{"1345":1,"1631":1,"1634":1},"3":{"1199":4,"1203":1,"1207":2,"1345":1,"1350":6,"1359":1,"1631":1,"1634":1}}],["sessioncategoryitemtests",{"3":{"1199":1,"1207":2}}],["sessioncategoryitemnavigationpopulatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessioncategoryitemnavigationpopulator",{"3":{"1199":2,"1203":1,"1207":2,"1359":10}}],["sessioncategoryitemdtomappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessioncategoryitemdtomapper",{"3":{"1199":9,"1203":1,"1207":2,"1359":9}}],["sessioncategoryitemdto",{"3":{"1199":10,"1203":1,"1207":2,"1347":1,"1350":10,"1359":2,"1380":1,"1395":4}}],["sessioncategoryitem",{"2":{"1342":1},"3":{"1198":1,"1199":17,"1203":1,"1207":2,"1237":2,"1342":3,"1350":12,"1359":16,"1369":3,"1380":1,"1395":2,"1630":1,"1631":1,"1632":2,"1634":2,"1635":3,"1637":1,"1638":3,"1639":3}}],["sessioncategoryitemscontrollertests",{"3":{"1199":1,"1207":2}}],["sessioncategoryitemscontroller",{"2":{"1371":1,"1372":1},"3":{"1199":3,"1203":1,"1207":3,"1350":2,"1359":22,"1371":2,"1372":2,"1373":2,"1374":1,"1380":17}}],["sessioncategoryitemservice",{"2":{"1386":1},"3":{"1199":2,"1203":1,"1207":1,"1324":1,"1386":1,"1395":4}}],["sessioncategoryitems",{"2":{"1115":1,"1363":1},"3":{"1115":1,"1324":1,"1350":3,"1359":14,"1363":1,"1369":2,"1380":2,"1395":1,"1447":1,"1630":2,"1631":1,"1632":2,"1635":2,"1638":1,"1639":2}}],["sessioncalendarcontroller",{"2":{"1371":1,"1373":1,"1375":1},"3":{"1199":1,"1203":1,"1207":2,"1371":2,"1373":2,"1375":3,"1380":6,"1436":1,"1496":1,"1535":1}}],["sessioncapexceeded",{"3":{"905":2,"1290":1,"1300":1,"1982":1}}],["sessioncancelled",{"2":{"785":1},"3":{"785":1}}],["sessionchanged",{"2":{"781":1,"783":1},"3":{"781":1,"782":3,"783":1,"1199":3,"1203":1,"1207":2,"1259":1,"1345":3,"1350":12,"1359":1,"1631":1,"1634":1}}],["sessioncheckin",{"2":{"691":1,"692":1},"3":{"690":1,"691":1,"692":1,"1396":5,"1415":1}}],["sessionissuer",{"3":{"1300":8}}],["sessionincludechildrenregressiontests",{"3":{"1199":1,"1207":2,"1526":3}}],["sessioninvariantstests",{"3":{"1199":1,"1207":2}}],["sessioninvariants",{"2":{"1344":1,"1362":1,"1364":1,"1395":1},"3":{"1199":24,"1203":1,"1207":2,"1237":1,"1344":10,"1350":28,"1352":1,"1355":1,"1359":55,"1362":1,"1364":1,"1369":8,"1395":2,"1396":2}}],["sessioninfo",{"3":{"1199":14,"1203":1,"1207":1,"1396":12,"1402":10}}],["sessionizeid",{"3":{"1639":1}}],["sessionizeintegration",{"2":{"1352":1,"2136":1},"3":{"1347":1,"1350":4,"1352":1,"1359":2,"2136":2}}],["sessionizemodels",{"3":{"1207":9,"1358":1,"1359":22}}],["sessionizerefreshtests",{"3":{"1199":1,"1207":2,"1359":1}}],["sessionizerefreshoutcome",{"2":{"1382":1,"1387":1},"3":{"1199":4,"1203":1,"1207":2,"1382":2,"1387":1,"1395":10,"1526":1}}],["sessionizeresponse",{"2":{"1365":1},"3":{"1199":13,"1203":1,"1207":1,"1358":1,"1359":10,"1365":1,"1369":3}}],["sessionizeroom",{"3":{"1199":5,"1203":1,"1207":1,"1358":1,"1359":3}}],["sessionizeservicetests",{"3":{"1199":1,"1207":2,"1438":1}}],["sessionizeservice",{"2":{"1365":1},"3":{"1199":3,"1203":1,"1207":2,"1350":1,"1359":4,"1365":8,"1369":5,"1496":1}}],["sessionizesession",{"3":{"1199":5,"1203":1,"1207":1,"1358":1,"1359":4}}],["sessionizesynccontext",{"3":{"1199":13,"1203":1,"1207":2,"1358":1,"1359":14}}],["sessionizesyncwarnings",{"3":{"1199":6,"1203":1,"1207":2,"1358":1,"1359":12,"1496":1}}],["sessionizesyncresult",{"3":{"1199":8,"1203":1,"1207":1,"1350":1,"1358":1,"1359":5}}],["sessionizespeaker",{"3":{"1199":5,"1203":1,"1207":1,"1358":1,"1359":5}}],["sessionizecodemaxlength",{"3":{"1350":2,"1359":1}}],["sessionizecode",{"2":{"1636":1},"3":{"1350":5,"1353":1,"1359":14,"1362":1,"1369":8,"1395":9,"1630":2,"1631":1,"1632":5,"1636":1}}],["sessionizecodeattribute",{"2":{"1384":1},"3":{"1199":1,"1203":1,"1207":2,"1384":3,"1395":4,"1526":1}}],["sessionizecodeformattests",{"3":{"1199":1,"1207":2,"1350":1,"1437":1}}],["sessionizecodeformat",{"2":{"1353":2,"1365":1,"1631":1},"3":{"1199":8,"1203":1,"1207":2,"1347":7,"1350":10,"1353":2,"1359":12,"1365":1,"1369":2,"1384":1,"1395":3,"1496":2,"1526":1,"1631":1}}],["sessionizecategory",{"3":{"1199":5,"1203":1,"1207":1,"1358":1,"1359":4}}],["sessionizecategoryitem",{"3":{"1199":4,"1203":1,"1207":1,"1358":1,"1359":13}}],["sessionizequestionanswer",{"3":{"1199":6,"1203":1,"1207":1,"1358":1,"1359":6}}],["sessionizequestion",{"3":{"1199":4,"1203":1,"1207":1,"1358":1,"1359":3}}],["sessionizelink",{"3":{"1199":3,"1203":1,"1207":1,"1358":1,"1359":5}}],["sessionize",{"0":{"1358":1,"1365":1},"2":{"1207":1,"1359":1},"3":{"0":1,"344":1,"353":1,"470":1,"477":1,"798":1,"988":1,"1004":1,"1115":2,"1116":2,"1117":1,"1192":1,"1202":1,"1203":12,"1207":22,"1212":1,"1286":3,"1342":9,"1343":3,"1344":3,"1347":6,"1350":72,"1351":1,"1352":4,"1353":2,"1355":1,"1358":7,"1359":148,"1360":1,"1362":1,"1364":4,"1365":3,"1368":1,"1369":25,"1371":1,"1375":2,"1380":10,"1382":1,"1395":28,"1436":3,"1437":2,"1438":2,"1487":2,"1489":1,"1496":1,"1534":1,"1629":4,"1630":27,"1631":30,"1632":18,"1633":3,"1635":1,"1636":6,"1637":3,"1638":5,"1639":48,"1640":3,"1641":14,"2136":1}}],["sessionid=",{"3":{"1395":3,"1396":4,"1402":2,"1631":1,"1640":1}}],["sessionids=",{"3":{"1395":1}}],["sessionids",{"3":{"1359":6,"1380":2,"1395":3,"1396":6}}],["sessionidentifiertype",{"2":{"472":1,"799":1,"1055":1},"3":{"472":1,"799":2,"1055":1,"1259":1,"1350":23,"1359":41,"1380":6,"1395":19,"1396":36,"1402":26,"1415":2}}],["sessionid",{"2":{"1052":1,"1055":1,"1357":1},"3":{"0":2,"690":3,"799":1,"905":3,"996":1,"1052":1,"1055":1,"1116":2,"1212":1,"1259":1,"1300":19,"1311":2,"1324":4,"1342":2,"1345":1,"1350":28,"1357":1,"1359":80,"1362":4,"1369":19,"1380":30,"1395":52,"1396":117,"1398":2,"1401":1,"1402":54,"1415":4,"1436":2,"1438":1,"1467":1,"1526":1,"1535":1,"1627":1,"1630":2,"1631":6,"1632":7,"1634":3,"1635":4,"1638":1,"1639":1,"1640":2,"1641":2}}],["sessionastatus",{"3":{"1350":1}}],["sessionassetmalwarescanning",{"3":{"1467":1}}],["sessionassetrequests",{"3":{"1207":2,"1389":2,"1395":6}}],["sessionassetvalidationrules",{"3":{"1207":6,"1286":2,"1350":3,"1353":1,"1359":7}}],["sessionassettests",{"3":{"1199":1,"1207":2,"1350":2}}],["sessionassettitlerules",{"3":{"1199":2,"1203":1,"1207":1,"1359":5}}],["sessionassetbuilder",{"3":{"1199":2,"1207":2}}],["sessionassetfixtures",{"3":{"1199":7,"1207":2}}],["sessionassetfieldrules",{"3":{"1199":4,"1203":1,"1207":1,"1353":1,"1359":11}}],["sessionassetfilenamerules",{"3":{"1199":2,"1203":1,"1207":1,"1359":3}}],["sessionasseturlrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":5}}],["sessionassetupdaterequestvalidatortests",{"3":{"1199":1,"1207":2}}],["sessionassetupdaterequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1350":1,"1359":6}}],["sessionassetupdaterequest",{"2":{"1389":1},"3":{"1199":12,"1203":2,"1207":3,"1359":10,"1380":1,"1389":1,"1395":4}}],["sessionassetdisplay",{"3":{"1199":3,"1203":1,"1207":2,"1389":3,"1395":6,"1496":1}}],["sessionassetdto",{"3":{"1199":19,"1203":1,"1207":2,"1347":3,"1350":23,"1359":5,"1380":1,"1395":7}}],["sessionassetdtomappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionassetdtomapper",{"2":{"3":1},"3":{"3":1,"1199":10,"1203":1,"1207":2,"1350":1,"1357":1,"1359":14}}],["sessionassetlinkrequestvalidatortests",{"3":{"1199":1,"1207":2}}],["sessionassetlinkrequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":7,"1395":2}}],["sessionassetlinkrequest",{"2":{"1389":1},"3":{"1199":13,"1203":2,"1207":3,"1359":12,"1380":1,"1389":1,"1395":8}}],["sessionassetlimits",{"2":{"1118":1,"1357":1,"1373":1,"1389":1},"3":{"1116":3,"1118":1,"1199":14,"1203":1,"1207":2,"1286":2,"1347":8,"1350":13,"1357":1,"1359":9,"1373":1,"1380":4,"1389":3,"1395":7}}],["sessionassetid",{"3":{"1350":2}}],["sessionassetidentifiertype",{"2":{"468":1,"470":1,"472":1,"477":1,"478":1,"798":1,"805":1,"1049":1,"1054":1},"3":{"468":1,"470":1,"472":1,"477":3,"478":1,"798":1,"805":1,"1049":1,"1054":1,"1212":1,"1350":3,"1359":4}}],["sessionassetinvariantstests",{"3":{"1199":1,"1207":2,"1350":2}}],["sessionassetinvariants",{"2":{"1344":1,"1369":1},"3":{"1116":2,"1199":11,"1203":1,"1207":2,"1344":7,"1350":6,"1359":9,"1369":5,"1496":1}}],["sessionassetkind",{"2":{"1342":1},"3":{"1116":1,"1199":14,"1203":1,"1207":2,"1342":3,"1350":12,"1395":3}}],["sessionassetcomposer",{"3":{"1199":2,"1203":1,"1207":2,"1389":2,"1395":5,"1496":1}}],["sessionassetconfiguration",{"2":{"1361":1},"3":{"1116":1,"1199":1,"1203":1,"1207":2,"1350":2,"1361":1,"1362":6,"1369":5,"1496":2}}],["sessionassetchanged",{"2":{"780":1,"1345":1},"3":{"780":1,"782":1,"1199":3,"1203":1,"1207":2,"1345":3,"1350":7,"1496":1}}],["sessionassetstests",{"3":{"1199":1,"1207":2}}],["sessionassetsortorderrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":7}}],["sessionassetsessionidrules",{"3":{"1199":3,"1203":1,"1207":1,"1359":6}}],["sessionassetservicetests",{"3":{"1199":1,"1207":2}}],["sessionassetservice",{"3":{"881":1,"1199":4,"1203":1,"1207":2,"1350":2,"1389":2,"1395":9,"1496":2}}],["sessionassetspaneltests",{"3":{"1199":1,"1207":2}}],["sessionassetspanelpage",{"3":{"1199":2,"1207":2}}],["sessionassetspanel",{"3":{"1116":1,"1199":2,"1203":1,"1207":2,"1350":4,"1389":4,"1395":18,"1496":2,"1526":1,"1531":1}}],["sessionassetscontrollertests",{"3":{"1199":1,"1207":2,"1380":1,"1487":1}}],["sessionassetscontroller",{"2":{"1373":1},"3":{"1116":4,"1199":3,"1203":1,"1207":2,"1350":2,"1359":13,"1371":2,"1373":4,"1380":3,"1436":2,"1496":2}}],["sessionassetsdownloadlisttests",{"3":{"1199":1,"1207":2}}],["sessionassetsdownloadlist",{"2":{"1116":1,"1389":1},"3":{"1116":1,"1199":2,"1203":1,"1207":2,"1350":1,"1389":3,"1395":11,"1496":1}}],["sessionassetsmanage",{"2":{"184":1},"3":{"184":1,"1350":5,"1373":2,"1380":2}}],["sessionassets",{"2":{"1004":1,"1207":1,"1357":1,"1380":1,"1395":1},"3":{"0":1,"536":2,"881":1,"1004":1,"1116":12,"1203":45,"1207":128,"1264":1,"1286":6,"1318":1,"1323":3,"1342":2,"1344":1,"1345":1,"1347":2,"1350":17,"1353":1,"1357":4,"1359":73,"1363":1,"1369":6,"1371":1,"1373":1,"1380":5,"1389":8,"1395":33,"1438":1,"1447":2,"1487":1,"1630":1,"1631":5,"1640":5}}],["sessionassetaccessservicetests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionassetaccessservice",{"2":{"552":1,"1116":1},"3":{"0":1,"552":1,"1116":4,"1199":3,"1203":1,"1207":2,"1350":3,"1357":3,"1359":9,"1496":1}}],["sessionasset",{"2":{"1114":1,"1116":1,"1346":1,"1347":1,"1357":1,"1389":4},"3":{"0":1,"1114":1,"1116":4,"1199":24,"1203":1,"1207":2,"1212":1,"1323":1,"1340":1,"1342":9,"1343":7,"1344":3,"1345":1,"1346":2,"1347":1,"1350":23,"1352":1,"1357":1,"1359":45,"1369":4,"1389":4,"1395":2,"1436":1,"1496":2}}],["sessionatitle",{"3":{"1350":1}}],["sessionattendance",{"3":{"1396":3}}],["sessionattendancerow",{"3":{"1199":2,"1203":1,"1207":1,"1396":4}}],["sessionattendancedto",{"3":{"1199":6,"1203":1,"1207":2,"1396":10}}],["sessionaid",{"3":{"1350":1}}],["sessionaiscoreconfiguration",{"3":{"1199":1,"1203":1,"1207":2,"1350":1,"1359":1,"1362":4,"1369":4,"1496":1}}],["sessionaiscoretests",{"3":{"1199":1,"1207":2}}],["sessionaiscoredto",{"3":{"1199":9,"1203":1,"1207":3,"1347":2,"1350":8,"1359":1,"1395":3,"1496":2}}],["sessionaiscoreidentifiertype",{"2":{"468":1,"477":1},"3":{"468":1,"477":1,"1350":1}}],["sessionaiscore",{"2":{"1018":2},"3":{"0":1,"1018":3,"1199":7,"1203":1,"1207":2,"1342":8,"1347":1,"1350":10,"1359":11,"1363":1,"1369":9,"1496":2}}],["sessionawareauthenticationservice",{"3":{"1199":2,"1207":1}}],["sessionaccessibilityinforules",{"3":{"1199":2,"1203":1,"1207":1,"1359":7}}],["sessionsnext",{"3":{"1396":1}}],["sessionsnow",{"3":{"1396":1}}],["sessionsnavrequiredrole",{"2":{"186":1,"190":1},"3":{"186":1,"190":1,"905":1,"909":1,"1324":1,"1627":1,"1761":1}}],["sessionsfailed",{"3":{"1350":1}}],["sessionsscored",{"3":{"1350":1,"1390":1,"1395":5}}],["sessionssynced",{"3":{"1350":1,"1359":1}}],["sessionsmanage",{"3":{"1350":2,"1359":8,"1373":1,"1380":4}}],["sessionsyncstrategytests",{"3":{"1199":1,"1207":2,"1359":1}}],["sessionsyncstrategy",{"3":{"1199":3,"1203":1,"1207":2,"1358":6,"1359":9,"1496":1}}],["sessionscachetag",{"3":{"1369":2,"1396":2}}],["sessionscache",{"3":{"1350":1,"1359":1,"1373":2,"1375":1,"1379":1,"1380":6}}],["sessionschedulepagerequest",{"2":{"1391":1},"3":{"1199":5,"1203":1,"1207":1,"1391":1,"1395":7}}],["sessionscorestamp",{"3":{"1496":2}}],["sessionscored",{"3":{"1259":1}}],["sessionscoreresponseguardrailtests",{"2":{"1435":1},"3":{"1199":1,"1207":3,"1369":2,"1435":2,"1437":1,"1438":1,"1487":1}}],["sessionscoreresponseguardrail",{"2":{"1018":1,"1021":1,"1094":1,"1366":1},"3":{"1018":3,"1021":3,"1094":1,"1199":5,"1203":1,"1207":2,"1366":4,"1369":11,"1427":2,"1496":1,"1526":2,"1535":1}}],["sessionscoringcandidate",{"3":{"1496":2}}],["sessionscoringcontract",{"2":{"1366":1,"1368":1,"1369":1,"1492":1},"3":{"1366":1,"1368":1,"1369":3,"1492":1}}],["sessionscoringworkitem",{"3":{"1496":2}}],["sessionscoringenqueueresult",{"3":{"1496":2}}],["sessionscoringsweepjob",{"3":{"1270":1,"1496":2}}],["sessionscoringservicetests",{"2":{"1435":1},"3":{"1199":1,"1207":3,"1369":1,"1435":2,"1437":1,"1438":1}}],["sessionscoringservice",{"2":{"1016":1,"1018":1,"1021":1,"1094":1,"1095":1,"1366":2,"1369":1,"1492":1},"3":{"1016":1,"1017":1,"1018":11,"1021":2,"1090":1,"1093":1,"1094":2,"1095":2,"1199":9,"1203":1,"1207":2,"1347":1,"1350":1,"1359":9,"1366":11,"1369":19,"1427":3,"1435":1,"1438":2,"1492":1,"1496":3,"1526":8}}],["sessionscoringinput",{"3":{"1199":10,"1203":1,"1207":1,"1359":7,"1369":1}}],["sessionscoringresult",{"3":{"1199":6,"1203":1,"1207":1,"1359":5,"1366":1,"1369":4}}],["sessionscoringrunnertests",{"3":{"1199":1,"1207":2,"1359":2,"1438":2}}],["sessionscoringrunner",{"3":{"1082":1,"1086":1,"1199":2,"1203":1,"1207":2,"1286":1,"1350":2,"1359":23,"1369":2,"1436":2,"1438":1,"1496":3,"1526":1}}],["sessionscoring",{"2":{"1018":1,"1021":1,"1099":1,"1103":1},"3":{"1018":1,"1021":1,"1099":1,"1103":1,"1347":1,"1350":4,"1359":2,"1380":2,"1496":1}}],["sessionscoringpromptcontractpintests",{"2":{"1018":1,"1426":1,"1428":1,"1435":1},"3":{"1018":1,"1199":1,"1207":1,"1426":1,"1428":1,"1435":1}}],["sessionscoringprocessortests",{"3":{"1496":1}}],["sessionscoringprocessor",{"2":{"491":1,"492":1,"493":1,"518":1},"3":{"491":2,"492":3,"493":2,"518":1,"1496":4}}],["sessionscoringqueue",{"2":{"518":1},"3":{"0":2,"518":1,"1496":4}}],["sessionscontrollertests",{"3":{"1199":1,"1207":2}}],["sessionscontroller",{"2":{"543":1,"552":1},"3":{"543":2,"545":2,"546":1,"550":1,"552":1,"743":2,"1199":3,"1203":1,"1207":2,"1247":7,"1311":8,"1350":2,"1359":45,"1371":5,"1372":5,"1373":4,"1374":1,"1375":9,"1380":10,"1395":2,"1436":4,"1496":1,"1526":1,"1534":1}}],["sessionsimilaritycalculatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionsimilaritycalculator",{"3":{"1199":3,"1203":1,"1207":2,"1359":7}}],["sessionspeakerids",{"3":{"1359":1}}],["sessionspeakerid",{"3":{"1350":1,"1359":5}}],["sessionspeakeridentifiertype",{"3":{"1350":3,"1359":4,"1395":3}}],["sessionspeakerconfiguration",{"3":{"1199":1,"1203":1,"1207":2,"1362":2,"1369":8}}],["sessionspeakerchanged",{"2":{"1345":1,"1634":1},"3":{"1199":4,"1203":1,"1207":2,"1345":1,"1350":6,"1359":2,"1631":1,"1634":1}}],["sessionspeakertests",{"3":{"1199":1,"1207":2}}],["sessionspeakernavigationpopulatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionspeakernavigationpopulator",{"3":{"1199":2,"1203":1,"1207":2,"1359":5}}],["sessionspeakerdtomappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionspeakerdtomapper",{"3":{"1199":9,"1203":1,"1207":2,"1359":8}}],["sessionspeakerdto",{"3":{"1199":9,"1203":1,"1207":2,"1347":1,"1350":9,"1359":2,"1380":1,"1395":3}}],["sessionspeaker",{"3":{"1198":1,"1199":24,"1203":1,"1207":2,"1237":4,"1324":1,"1342":3,"1350":8,"1353":1,"1359":38,"1364":2,"1369":5,"1380":1,"1395":5,"1438":1,"1630":1,"1631":2,"1632":2,"1634":2,"1635":3,"1637":1,"1638":3,"1639":4,"1640":1}}],["sessionspeakerscontrollertests",{"3":{"1199":1,"1207":2}}],["sessionspeakerscontroller",{"2":{"1371":1,"1372":1},"3":{"1199":3,"1203":1,"1207":3,"1311":2,"1350":2,"1359":23,"1371":2,"1372":2,"1373":2,"1374":1,"1380":17}}],["sessionspeakerservice",{"2":{"1386":1},"3":{"1199":1,"1203":1,"1207":1,"1324":1,"1386":1,"1395":3}}],["sessionspeakers",{"2":{"1115":1,"1357":1,"1363":1},"3":{"1115":1,"1116":1,"1324":1,"1350":4,"1357":1,"1359":21,"1363":1,"1369":4,"1380":2,"1395":6,"1447":1,"1526":1,"1630":2,"1631":1,"1632":2,"1635":3,"1638":1,"1639":3}}],["sessionspagee2etests",{"3":{"618":2,"906":1,"909":1,"1199":1,"1207":2,"1324":1,"1436":5,"1438":1}}],["sessionstatusrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":3}}],["sessionstatusdisplay",{"3":{"1199":1,"1203":1,"1207":2,"1385":2,"1395":6,"1496":1}}],["sessionstatuses",{"3":{"1199":23,"1203":1,"1207":2,"1344":7,"1350":10,"1353":1,"1356":1,"1359":40,"1395":6,"1396":2,"1496":2,"1535":1}}],["sessionstampingtokenservice",{"2":{"1287":1,"1290":1},"3":{"905":1,"1199":2,"1203":1,"1207":1,"1287":1,"1290":1,"1300":6,"1496":1}}],["sessionstests",{"3":{"906":1,"1199":1,"1207":2,"1324":1,"1436":1,"1438":2}}],["sessionstorage",{"2":{"2076":1},"3":{"881":1,"1324":7,"1577":1,"1715":1,"2076":1}}],["sessionset",{"3":{"1324":1}}],["sessionservice",{"3":{"881":1,"1199":8,"1203":1,"1207":2,"1324":1,"1382":3,"1395":7,"1396":1}}],["sessionselectiontests",{"3":{"1199":1,"1207":2}}],["sessionselectionstaleresponsetests",{"3":{"1199":1,"1207":2,"1395":2,"1438":2}}],["sessionselectionspeakeroverlaptests",{"3":{"1199":1,"1207":2,"1395":1}}],["sessionselectionspeakeroverlap",{"2":{"1385":1},"3":{"1199":2,"1203":1,"1207":2,"1385":3,"1395":4}}],["sessionselectionservicetests",{"3":{"1199":1,"1207":2}}],["sessionselectionservice",{"2":{"1390":1},"3":{"881":1,"1199":2,"1203":1,"1207":2,"1359":4,"1382":1,"1390":4,"1395":9}}],["sessionselectionfilters",{"2":{"1385":1},"3":{"1199":2,"1203":1,"1207":2,"1385":2,"1395":7}}],["sessionselectionfilteroptions",{"2":{"1385":1},"3":{"1199":2,"1203":1,"1207":2,"1385":2,"1395":4,"1496":1}}],["sessionselectionaiscorestests",{"3":{"1199":1,"1207":2,"1395":2,"1438":1}}],["sessionselectionaiscores",{"2":{"1385":1},"3":{"1199":2,"1203":1,"1207":2,"1385":3,"1395":8}}],["sessionselectiondashboard",{"2":{"1390":1,"1535":1},"3":{"1199":3,"1203":1,"1207":2,"1350":2,"1359":1,"1390":2,"1395":30,"1535":1}}],["sessionselectiondashboardtests",{"3":{"1199":2,"1207":4,"1395":2}}],["sessionselectiondashboarddto",{"2":{"1347":1,"1390":1},"3":{"1199":16,"1203":1,"1207":3,"1347":5,"1350":8,"1359":2,"1380":1,"1390":1,"1395":10}}],["sessionselectiondisplay",{"2":{"1385":1},"3":{"1199":3,"1203":1,"1207":2,"1385":2,"1395":15}}],["sessionselectioncontrollertests",{"3":{"1199":1,"1207":3}}],["sessionselectioncontroller",{"2":{"1371":1,"1376":1,"1390":1},"3":{"1018":1,"1021":1,"1099":1,"1103":1,"1199":2,"1203":1,"1207":2,"1311":1,"1323":2,"1347":3,"1350":6,"1359":19,"1367":1,"1369":1,"1371":2,"1373":1,"1376":2,"1379":1,"1380":10,"1390":2,"1395":3,"1496":2,"1526":1,"2190":1}}],["sessionselectionmanage",{"2":{"1018":1,"1264":1,"1376":1,"1380":1},"3":{"1018":1,"1264":1,"1350":1,"1359":4,"1373":1,"1376":1,"1380":2,"1526":1}}],["sessionselection",{"3":{"837":1,"839":1,"841":1,"1018":1,"1359":9,"1395":6,"1438":1,"1447":1,"1496":1,"1632":2,"1640":5}}],["sessions",{"0":{"1283":1,"1290":1,"2239":1},"1":{"456":1,"457":1,"458":1,"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1,"902":1,"903":1,"904":1,"905":1,"906":1,"907":1,"908":1,"909":1,"910":1},"2":{"1350":1,"1380":1,"1395":2},"3":{"0":9,"128":1,"186":2,"187":1,"325":1,"353":1,"456":1,"492":1,"493":2,"494":1,"495":1,"497":4,"501":1,"517":1,"543":2,"545":3,"550":1,"554":1,"556":1,"583":1,"616":2,"618":3,"666":1,"690":1,"743":3,"782":2,"827":1,"852":1,"857":1,"862":1,"881":2,"902":1,"903":1,"905":12,"906":1,"907":4,"908":1,"909":2,"910":4,"926":1,"995":1,"1004":2,"1017":1,"1018":6,"1082":3,"1085":1,"1090":1,"1099":2,"1103":1,"1116":3,"1192":1,"1199":14,"1202":2,"1203":179,"1207":548,"1212":1,"1237":5,"1239":2,"1247":10,"1264":2,"1270":7,"1271":2,"1283":2,"1286":16,"1287":2,"1290":6,"1293":1,"1297":2,"1300":56,"1301":1,"1310":1,"1311":6,"1312":1,"1323":5,"1324":56,"1340":1,"1342":3,"1344":3,"1345":1,"1346":1,"1347":10,"1348":2,"1349":5,"1350":137,"1351":2,"1352":9,"1353":4,"1354":1,"1355":3,"1356":4,"1357":1,"1358":2,"1359":582,"1361":1,"1362":2,"1363":1,"1364":2,"1365":1,"1366":3,"1367":4,"1369":43,"1371":3,"1373":2,"1375":5,"1380":69,"1381":2,"1382":3,"1383":2,"1384":3,"1385":13,"1386":1,"1388":3,"1389":2,"1390":12,"1391":12,"1395":189,"1396":41,"1402":6,"1405":1,"1409":2,"1415":20,"1416":2,"1417":1,"1427":3,"1433":1,"1436":31,"1437":1,"1438":21,"1441":1,"1442":1,"1447":1,"1458":1,"1467":3,"1479":1,"1489":1,"1496":9,"1526":8,"1531":2,"1535":2,"1577":1,"1582":1,"1583":1,"1586":1,"1591":1,"1600":1,"1608":2,"1621":1,"1624":1,"1625":1,"1627":11,"1629":9,"1630":11,"1631":16,"1632":29,"1633":3,"1635":10,"1636":2,"1637":8,"1638":10,"1639":12,"1640":9,"1641":6,"1667":6,"1669":1,"1672":1,"1752":1,"1761":3,"1763":1,"1813":1,"1815":3,"1859":1,"1922":1,"1947":1,"1961":1,"1962":1,"1965":1,"1982":1,"1985":2,"1995":1,"2012":1,"2063":1,"2070":1,"2110":2,"2190":1,"2216":1,"2232":1,"2238":1,"2240":1,"2243":1}}],["session",{"0":{"1298":1,"1357":1,"1389":1,"1390":1,"1982":1,"1983":1,"2066":1},"1":{"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"1015":1,"1016":1,"1017":1,"1018":1,"1019":1,"1020":1,"1021":1,"1022":1,"1113":1,"1114":1,"1115":1,"1116":1,"1117":1,"1118":1,"1119":1,"1120":1,"1396":1,"1397":1,"1398":1,"1399":1,"1400":1,"1401":1,"1402":1,"1966":1,"1967":1,"1968":1,"1969":1,"1970":1,"1971":1,"1972":1},"2":{"164":1,"780":1,"781":1,"790":2,"1115":2,"1116":1,"1117":1,"1188":1,"1342":1,"1343":1,"1346":1,"1630":1,"1631":1,"1633":1,"1635":1,"1638":1,"1640":1,"1765":1,"1770":2,"1854":1,"1857":1,"1858":1,"1859":1,"1860":1},"3":{"0":42,"57":1,"59":1,"160":1,"164":1,"165":1,"168":1,"170":1,"185":2,"186":1,"204":1,"207":6,"208":2,"209":2,"210":1,"221":1,"243":2,"261":1,"281":1,"285":1,"287":1,"340":1,"348":1,"350":2,"351":1,"355":1,"379":1,"380":2,"383":1,"384":1,"387":2,"390":1,"443":1,"458":1,"462":1,"497":2,"498":1,"499":4,"500":2,"501":4,"503":1,"506":1,"507":3,"508":2,"509":1,"510":2,"514":1,"516":1,"517":2,"519":1,"524":1,"534":3,"536":11,"540":3,"545":2,"551":1,"555":1,"560":1,"583":3,"664":2,"665":1,"670":1,"689":4,"690":11,"691":1,"692":1,"693":1,"748":1,"756":1,"780":1,"781":2,"782":2,"788":1,"790":4,"793":5,"794":1,"854":1,"857":1,"861":1,"864":1,"897":4,"903":4,"904":2,"905":18,"906":5,"907":1,"908":2,"909":1,"910":1,"926":2,"954":2,"995":1,"996":2,"1012":1,"1015":1,"1016":2,"1017":4,"1018":2,"1020":1,"1059":1,"1082":2,"1089":2,"1090":3,"1091":1,"1099":2,"1100":1,"1101":1,"1107":1,"1108":1,"1113":1,"1115":4,"1116":21,"1117":7,"1118":4,"1124":1,"1125":1,"1129":1,"1150":2,"1182":1,"1183":1,"1184":9,"1185":3,"1187":3,"1188":3,"1189":1,"1192":8,"1198":1,"1199":131,"1201":1,"1202":6,"1203":7,"1207":2,"1212":9,"1237":6,"1238":1,"1239":6,"1247":11,"1270":5,"1271":2,"1273":1,"1280":1,"1283":4,"1284":2,"1286":29,"1287":4,"1289":5,"1290":10,"1298":1,"1300":165,"1301":1,"1302":1,"1303":1,"1305":2,"1307":2,"1309":10,"1311":13,"1312":2,"1316":1,"1318":1,"1322":1,"1323":14,"1324":119,"1339":2,"1340":4,"1342":30,"1343":7,"1344":6,"1346":7,"1347":4,"1348":6,"1349":9,"1350":251,"1351":4,"1352":8,"1353":3,"1354":1,"1355":8,"1356":1,"1357":14,"1358":1,"1359":760,"1360":2,"1361":2,"1362":5,"1363":1,"1364":4,"1366":7,"1367":1,"1369":70,"1371":2,"1373":9,"1374":2,"1375":5,"1376":2,"1377":2,"1378":3,"1380":70,"1381":2,"1385":4,"1386":1,"1387":2,"1388":4,"1389":12,"1390":6,"1391":5,"1395":233,"1396":362,"1397":5,"1399":7,"1400":2,"1401":6,"1402":177,"1405":3,"1406":6,"1408":1,"1410":1,"1415":46,"1416":6,"1417":12,"1427":2,"1428":1,"1433":1,"1435":3,"1436":45,"1437":6,"1438":49,"1441":1,"1442":1,"1447":4,"1453":2,"1455":2,"1461":1,"1463":1,"1467":12,"1475":1,"1479":1,"1485":1,"1487":11,"1488":3,"1489":1,"1490":2,"1492":1,"1496":27,"1498":1,"1500":1,"1511":2,"1513":1,"1524":1,"1526":7,"1527":1,"1531":2,"1534":7,"1535":1,"1549":1,"1556":1,"1563":1,"1582":1,"1585":2,"1586":1,"1591":1,"1608":1,"1611":2,"1621":2,"1623":1,"1625":1,"1626":1,"1627":7,"1629":7,"1630":35,"1631":63,"1632":55,"1633":4,"1634":8,"1635":20,"1636":1,"1637":10,"1638":36,"1639":46,"1640":31,"1641":7,"1660":1,"1664":1,"1667":6,"1669":2,"1672":1,"1746":1,"1749":4,"1750":1,"1754":1,"1759":1,"1761":1,"1764":2,"1765":6,"1768":4,"1769":1,"1770":3,"1779":1,"1790":1,"1804":1,"1813":1,"1815":3,"1832":1,"1854":1,"1857":2,"1858":1,"1859":3,"1860":1,"1869":3,"1870":1,"1921":1,"1922":1,"1935":1,"1941":1,"1944":1,"1945":1,"1960":2,"1965":1,"1966":1,"1967":2,"1968":4,"1971":3,"1972":4,"1973":3,"1974":1,"1975":1,"1977":1,"1979":1,"1980":1,"1981":2,"1982":11,"1983":3,"1984":4,"1985":5,"1995":1,"2002":1,"2076":1,"2078":1,"2079":1,"2110":4,"2126":1,"2127":1,"2158":1,"2163":3,"2167":4,"2179":1,"2180":1,"2190":4,"2208":2,"2232":6,"2239":1}}],["semicolons",{"3":{"1286":1}}],["semicolon",{"3":{"219":1,"1270":4,"1286":2,"1300":1,"1311":1,"1324":4,"1339":1,"1415":2,"1436":4,"2150":1}}],["semanticproperties",{"3":{"1417":2}}],["semantically",{"3":{"1286":2,"1359":1,"1380":1,"1436":1,"1639":1}}],["semantic",{"0":{"1733":1},"3":{"684":1,"1196":1,"1237":1,"1249":1,"1259":1,"1270":1,"1271":1,"1300":1,"1324":1,"1359":1,"1396":1,"1417":2,"1425":1,"1500":1,"1526":2,"1534":1,"1558":1,"1569":1,"1577":2,"1585":1,"1591":1,"2177":1}}],["semanticscreenreader",{"3":{"1417":5}}],["semantics",{"3":{"0":5,"24":1,"40":1,"61":1,"115":1,"119":1,"120":1,"121":1,"202":1,"242":1,"247":1,"265":1,"310":1,"389":1,"434":1,"513":1,"618":1,"641":1,"658":1,"698":1,"733":1,"734":1,"735":1,"840":1,"842":1,"855":1,"906":1,"923":1,"946":1,"996":1,"1012":1,"1020":1,"1042":1,"1043":1,"1050":1,"1076":1,"1150":1,"1152":2,"1212":1,"1229":1,"1237":4,"1247":3,"1259":5,"1260":2,"1263":1,"1270":1,"1286":6,"1300":7,"1309":4,"1311":5,"1323":2,"1324":16,"1339":2,"1350":2,"1359":14,"1369":1,"1379":1,"1380":3,"1395":6,"1396":14,"1402":2,"1415":7,"1417":6,"1436":11,"1438":2,"1446":1,"1455":2,"1467":1,"1488":1,"1492":1,"1547":1,"1558":1,"1577":2,"1586":1,"1591":1,"1631":3,"1638":2,"1640":1,"1664":1,"1759":1,"1789":1,"1792":1,"1821":1,"1825":1,"1826":2,"1847":1,"1944":1,"1991":1,"2027":1,"2059":1,"2065":1,"2182":1,"2188":1,"2192":1,"2203":1}}],["semaphores",{"3":{"1270":2,"1300":2}}],["semaphoreslim",{"2":{"436":1,"995":1,"1254":1,"1774":1,"1909":1},"3":{"157":1,"434":1,"436":1,"995":1,"1254":1,"1259":6,"1270":3,"1275":1,"1286":5,"1300":8,"1324":3,"1332":1,"1339":3,"1417":3,"1774":1,"1909":1}}],["semaphorefullexception",{"3":{"1259":1,"1275":1,"1286":1}}],["semaphore",{"3":{"155":1,"157":3,"159":1,"830":1,"996":1,"1259":4,"1267":1,"1270":6,"1275":1,"1286":9,"1298":1,"1300":8,"1301":1,"1311":3,"1323":2,"1324":1,"1332":1,"1339":4,"1417":5,"1577":1,"1585":1,"1909":2}}],["semver",{"3":{"147":1,"1576":1,"1577":3,"1673":1,"1674":1,"1733":1}}],["separable",{"3":{"126":1,"1300":1,"1396":1,"1436":1}}],["separators",{"3":{"741":1,"1116":1,"1286":2,"1300":3,"1323":1,"1324":1,"1396":1}}],["separator",{"3":{"599":1,"741":2,"743":1,"1228":1,"1229":1,"1247":3,"1286":1,"1296":1,"1301":1,"1309":1,"1324":4,"1335":1,"1339":1,"1395":4,"1442":1,"1467":1,"1486":1,"1685":1}}],["separation",{"3":{"0":1,"642":1,"868":1,"999":2,"1050":1,"1230":1,"1270":1,"1286":2,"1300":3,"1309":1,"1323":2,"1324":2,"1359":1,"1381":1,"1395":2,"1396":2,"1402":2,"1417":2,"1436":1,"1467":1,"1526":1,"1545":1,"1555":1,"1577":1,"1638":1,"1639":1,"1815":1,"1817":1}}],["separating",{"3":{"0":1,"1185":1,"1229":1,"1259":1,"1286":1,"1300":4,"1302":1,"1309":1,"1311":2,"1324":4,"1350":1,"1359":4,"1369":1,"1380":1,"1395":3,"1402":3,"1417":1,"1427":1,"1436":1,"1478":1,"1489":1,"1577":1,"1638":2,"1953":1,"2007":1,"2069":1}}],["separates",{"3":{"395":1,"418":1,"426":1,"862":1,"905":1,"998":2,"1237":1,"1247":1,"1263":1,"1270":1,"1286":1,"1300":2,"1311":1,"1323":1,"1324":2,"1359":1,"1396":1,"1402":1,"1415":1,"1416":1,"1436":3,"1455":1,"1462":1,"1794":1,"1982":1,"2034":1,"2063":1,"2143":1}}],["separately",{"3":{"224":1,"235":1,"265":1,"275":1,"296":1,"322":1,"518":2,"549":1,"626":1,"665":1,"676":1,"684":1,"707":1,"715":1,"724":1,"785":1,"789":1,"838":2,"881":1,"883":1,"1049":1,"1061":1,"1100":1,"1169":1,"1231":1,"1237":2,"1243":1,"1247":1,"1259":3,"1270":1,"1271":3,"1286":4,"1300":3,"1301":2,"1305":1,"1309":1,"1310":1,"1311":1,"1316":1,"1323":1,"1324":5,"1334":1,"1339":4,"1350":5,"1359":15,"1380":1,"1395":2,"1396":4,"1402":2,"1415":4,"1417":3,"1427":1,"1429":1,"1436":14,"1438":1,"1441":1,"1442":1,"1443":1,"1467":4,"1476":2,"1487":1,"1489":1,"1554":1,"1639":1,"1640":1,"1675":1,"1815":1,"1837":1,"1887":1,"1938":1,"2001":1,"2002":1,"2063":1,"2161":1,"2193":1}}],["separated",{"3":{"26":1,"330":1,"633":2,"757":1,"974":1,"1012":1,"1212":1,"1247":4,"1253":1,"1259":1,"1260":1,"1270":1,"1271":1,"1286":2,"1300":4,"1310":1,"1311":3,"1318":1,"1323":1,"1324":3,"1339":2,"1396":2,"1402":1,"1417":2,"1436":1,"1455":1,"1526":2,"1543":1,"1545":1,"1630":1,"1727":1,"1988":1,"2182":1}}],["separate",{"0":{"1837":1,"2063":1},"3":{"0":9,"24":1,"30":1,"35":1,"39":1,"52":1,"70":1,"97":1,"109":1,"117":1,"136":1,"165":2,"168":3,"186":1,"188":1,"201":1,"237":2,"255":1,"291":1,"317":1,"318":1,"319":1,"320":1,"361":1,"363":1,"390":1,"391":1,"403":1,"509":1,"511":1,"532":1,"551":1,"558":1,"572":2,"579":1,"602":1,"634":1,"640":1,"651":1,"665":1,"676":1,"690":1,"698":1,"707":1,"731":1,"742":1,"751":1,"782":1,"784":1,"790":1,"829":2,"838":1,"862":1,"869":1,"881":1,"882":1,"905":1,"971":1,"980":1,"1006":1,"1018":1,"1019":2,"1025":2,"1042":1,"1043":2,"1045":1,"1049":1,"1050":1,"1059":2,"1067":1,"1068":1,"1116":3,"1123":1,"1124":1,"1125":2,"1170":1,"1174":1,"1178":1,"1193":1,"1212":4,"1237":5,"1247":7,"1248":1,"1259":3,"1262":1,"1267":1,"1270":9,"1271":4,"1273":1,"1279":1,"1286":16,"1293":1,"1300":15,"1301":4,"1302":1,"1309":10,"1310":1,"1311":7,"1312":1,"1313":1,"1315":1,"1323":15,"1324":28,"1325":1,"1339":11,"1342":1,"1346":1,"1349":1,"1350":19,"1352":2,"1355":1,"1359":40,"1369":3,"1374":1,"1380":1,"1384":1,"1393":1,"1395":20,"1396":31,"1398":1,"1401":2,"1402":17,"1415":19,"1416":3,"1417":11,"1427":5,"1433":1,"1436":29,"1437":1,"1438":1,"1441":2,"1442":1,"1444":1,"1447":1,"1449":1,"1455":1,"1456":1,"1457":1,"1460":1,"1465":1,"1467":6,"1473":1,"1478":1,"1490":2,"1492":4,"1512":1,"1517":1,"1545":1,"1599":1,"1605":1,"1616":1,"1617":1,"1626":1,"1627":1,"1630":3,"1631":2,"1632":1,"1634":1,"1638":1,"1639":1,"1640":1,"1652":1,"1662":2,"1665":1,"1693":1,"1696":1,"1731":3,"1739":1,"1748":1,"1749":1,"1755":1,"1765":1,"1767":1,"1768":1,"1790":1,"1796":1,"1802":1,"1805":1,"1810":1,"1821":1,"1842":1,"1846":1,"1847":1,"1848":1,"1849":2,"1851":1,"1855":1,"1883":1,"1900":1,"1903":1,"1919":1,"1964":1,"1972":1,"1995":1,"1997":1,"2000":1,"2004":1,"2034":1,"2041":1,"2063":2,"2067":1,"2068":1,"2069":1,"2073":1,"2074":1,"2088":1,"2107":1,"2109":1,"2111":1,"2122":1,"2123":1,"2133":1,"2144":1,"2151":1,"2156":1,"2158":1,"2163":1,"2185":1,"2193":1,"2202":1,"2230":1}}],["seat",{"3":{"1631":1,"1632":1}}],["seating",{"3":{"1630":2}}],["seats",{"3":{"1395":1}}],["season",{"3":{"1324":1}}],["seam",{"3":{"1323":1,"1324":1,"1359":1}}],["seamless",{"3":{"1300":1}}],["searchandwaitforrowasync",{"2":{"1433":1},"3":{"1433":1,"1436":1,"1488":1}}],["searchasync",{"3":{"1396":8}}],["searchability",{"3":{"1286":1}}],["searchable",{"3":{"363":1,"611":1,"1286":1,"1350":1}}],["searchfunc",{"3":{"1395":1}}],["searchfilterkey",{"3":{"1324":3,"1415":1}}],["searchusersasync",{"3":{"1395":2}}],["searchstringchanged",{"3":{"1395":1}}],["searchstring",{"3":{"1324":2,"1359":1,"1395":2}}],["searchvalues",{"3":{"1309":1,"1311":4,"1324":3}}],["searchtermfrom",{"3":{"1324":1}}],["searchterm",{"3":{"1300":1,"1311":1,"1324":2}}],["searching",{"3":{"1286":1,"1395":1}}],["searchedlocation",{"3":{"1324":1}}],["searched",{"3":{"488":1,"490":1,"1161":1,"1395":1,"1436":1}}],["searches",{"3":{"350":1,"1150":1,"1259":1,"1359":2,"1436":2,"1456":1,"1749":1}}],["search",{"3":{"0":1,"135":1,"243":1,"255":1,"259":1,"491":1,"492":1,"493":1,"511":1,"527":1,"528":1,"610":1,"684":1,"685":1,"690":2,"751":1,"819":1,"822":1,"837":1,"861":1,"863":1,"899":1,"946":1,"956":1,"963":1,"980":1,"1093":1,"1229":2,"1270":16,"1271":1,"1286":3,"1300":3,"1301":2,"1311":3,"1324":14,"1350":1,"1359":2,"1369":2,"1383":1,"1385":1,"1391":2,"1395":51,"1396":17,"1414":1,"1415":8,"1417":4,"1427":1,"1436":9,"1438":3,"1474":1,"1490":1,"1526":1,"1545":1,"1553":1,"1577":1,"1591":1,"1599":1,"1600":1,"1627":2,"1631":1,"1632":1,"1681":1,"1685":1,"1750":4,"1755":4,"1773":1,"1786":1,"1881":1,"1902":1,"1922":1,"1989":1,"2048":1,"2145":1,"2158":1,"2202":1,"2204":1,"2220":2}}],["seal",{"3":{"1323":5,"1438":1,"1824":1,"1826":1}}],["sealpipeline",{"3":{"1262":1,"1316":1,"1323":2}}],["sealing",{"3":{"0":1,"125":1,"126":1,"1168":1,"1169":1,"1170":1,"1259":1,"1270":1,"1312":1,"1323":1,"1324":1,"1415":1,"1436":5,"1671":1,"1827":1,"1883":1}}],["seals",{"0":{"1316":1},"3":{"0":1,"117":1,"122":1,"1289":1,"1311":1,"1323":1,"1324":1,"1383":1,"1396":1,"1415":1,"1436":1,"1662":1,"1824":1,"1883":1}}],["sealed",{"3":{"0":10,"45":1,"47":2,"80":1,"115":2,"166":1,"214":1,"255":1,"281":1,"310":2,"314":1,"318":1,"341":1,"350":1,"359":1,"448":2,"450":1,"455":1,"492":1,"498":1,"499":1,"511":1,"577":1,"631":2,"635":1,"657":2,"725":1,"733":1,"782":1,"854":1,"910":1,"922":1,"925":1,"926":1,"962":1,"963":3,"964":2,"967":1,"968":1,"988":1,"996":1,"1026":1,"1032":1,"1033":2,"1034":1,"1038":1,"1051":1,"1117":1,"1119":1,"1167":1,"1168":4,"1170":1,"1173":1,"1175":1,"1180":1,"1212":5,"1219":1,"1229":11,"1235":1,"1237":23,"1241":1,"1243":1,"1247":35,"1259":20,"1260":1,"1262":1,"1265":2,"1270":32,"1271":8,"1272":1,"1273":1,"1280":1,"1283":1,"1286":119,"1289":1,"1300":75,"1301":10,"1309":43,"1310":10,"1311":54,"1312":6,"1318":1,"1323":50,"1324":108,"1339":56,"1350":84,"1359":352,"1366":1,"1369":17,"1377":1,"1380":35,"1384":1,"1395":65,"1396":143,"1398":1,"1402":57,"1415":96,"1416":7,"1417":86,"1423":1,"1426":1,"1427":4,"1431":2,"1432":1,"1436":259,"1489":1,"1490":1,"1510":1,"1525":1,"1526":8,"1577":2,"1591":6,"1651":1,"1654":1,"1662":2,"1664":1,"1675":1,"1720":1,"1807":1,"1849":1,"1857":1,"1874":1,"1891":1,"1896":1,"1978":1,"1994":1,"2000":1,"2042":1,"2101":1,"2104":2,"2131":3,"2132":1,"2142":1,"2199":1,"2232":1}}],["senior",{"1":{"2212":1,"2213":1,"2214":1,"2215":1,"2216":1},"3":{"1794":1,"2099":1,"2109":1,"2212":1,"2213":1,"2217":1,"2218":1,"2220":2}}],["sensibly",{"3":{"1417":1,"1562":1}}],["sensible",{"3":{"709":1,"1339":1,"1395":1,"1436":2,"1488":1,"1555":1,"1561":1,"1607":1,"1642":1,"1678":1,"1741":1,"1927":1}}],["sensitivity",{"3":{"610":1,"1196":1,"1431":1,"1436":3,"1467":1,"1638":1,"2158":1}}],["sensitivedatadiscovery",{"3":{"1467":1}}],["sensitivedatalogginggatetests",{"3":{"1108":1,"1199":1,"1207":3,"1286":1}}],["sensitivedatalogginggate",{"2":{"1108":1},"3":{"0":1,"1108":2,"1199":2,"1203":1,"1207":2,"1212":1,"1273":3,"1286":6,"1323":1,"1496":2}}],["sensitively",{"3":{"1350":1,"1359":1}}],["sensitive",{"3":{"0":1,"122":1,"209":1,"265":1,"295":1,"313":1,"358":2,"360":1,"362":1,"585":1,"916":1,"950":1,"1108":1,"1110":1,"1247":1,"1284":1,"1286":1,"1300":3,"1310":1,"1311":1,"1312":1,"1323":1,"1324":3,"1339":1,"1350":1,"1359":6,"1380":1,"1395":1,"1396":3,"1415":3,"1416":1,"1417":6,"1423":1,"1436":3,"1453":2,"1467":1,"1563":1,"1567":1,"1631":1,"1971":1,"1973":1,"2139":1,"2140":2,"2141":1,"2144":1,"2145":1,"2149":1}}],["sense",{"3":{"396":1,"988":1,"1247":1,"1259":1,"1286":1,"1301":1,"1359":4,"1369":1,"1396":1,"1417":1,"1467":1,"1473":1,"2044":1,"2155":1}}],["sentto",{"3":{"1324":1,"1436":1}}],["senton",{"3":{"1309":6,"1415":2,"1436":2}}],["sentrequest",{"3":{"1199":3,"1207":1}}],["sentbyuserid",{"2":{"231":1},"3":{"225":1,"231":1,"1286":1,"1309":7,"1436":1,"1933":1}}],["sent",{"3":{"225":2,"227":1,"231":1,"434":1,"741":1,"759":1,"791":1,"837":1,"857":1,"1018":1,"1091":1,"1183":1,"1184":1,"1185":1,"1187":2,"1270":1,"1278":1,"1286":3,"1300":4,"1303":1,"1308":2,"1309":19,"1311":2,"1323":5,"1324":18,"1337":1,"1339":4,"1359":4,"1369":1,"1380":1,"1395":8,"1396":9,"1415":4,"1423":1,"1427":1,"1435":1,"1436":10,"1438":1,"1640":1,"1641":2,"1770":1,"1776":1,"1906":1,"1933":1,"1969":1,"2024":1,"2129":1,"2189":1}}],["sentences",{"3":{"265":1,"534":1,"543":1,"626":1,"1193":1,"1237":1,"1286":1,"1300":1,"1395":2,"1396":1,"1435":1,"1496":2,"1564":1,"1653":1,"1737":1}}],["sentence",{"3":{"0":1,"138":1,"139":1,"142":1,"245":1,"265":2,"373":1,"522":1,"523":1,"582":2,"611":1,"624":1,"626":2,"628":1,"798":1,"822":1,"864":1,"971":2,"972":2,"973":4,"974":2,"1007":1,"1026":1,"1067":2,"1068":1,"1119":1,"1237":1,"1270":1,"1286":3,"1311":3,"1323":3,"1324":9,"1339":2,"1359":4,"1369":1,"1389":1,"1395":12,"1396":9,"1415":2,"1427":1,"1430":1,"1436":7,"1478":1,"1496":3,"1526":2,"1577":2,"1586":1,"1591":2,"1653":1,"1750":1,"1900":1,"2033":1,"2039":2,"2043":2,"2056":1,"2171":1,"2178":1,"2226":1}}],["sentinels",{"3":{"1324":1}}],["sentinelref",{"3":{"1324":2}}],["sentinel",{"3":{"0":1,"26":1,"265":4,"268":1,"657":5,"658":3,"1234":1,"1237":4,"1244":1,"1247":1,"1253":1,"1259":1,"1274":1,"1275":1,"1282":1,"1286":7,"1300":4,"1309":2,"1311":1,"1324":11,"1350":2,"1352":1,"1359":3,"1369":1,"1383":1,"1390":3,"1395":19,"1396":3,"1436":6,"1438":4,"1577":1,"1591":1,"1611":1,"1653":1,"1669":1}}],["sendnotfoundprobeasync",{"3":{"1436":1}}],["sendnotificationasync",{"3":{"1324":1}}],["sendvalidationerrorprobeasync",{"3":{"1436":1}}],["sendforwardedasync",{"3":{"1436":1}}],["sendgetrequestasync",{"3":{"1395":3}}],["sendgrid",{"3":{"1309":1}}],["sendprobeasync",{"3":{"1339":2}}],["sendpushnotificationrequestvalidatortests",{"3":{"1199":1,"1207":2}}],["sendpushnotificationrequestvalidator",{"2":{"1305":1},"3":{"1199":2,"1203":1,"1207":2,"1305":2,"1309":13}}],["sendpushnotificationrequest",{"2":{"1303":1,"1305":1},"3":{"1199":14,"1203":1,"1207":2,"1303":1,"1305":2,"1309":13,"1324":11,"1436":1}}],["sendpushnotificationcommand",{"2":{"435":1,"436":1,"1304":1,"1933":1},"3":{"435":1,"436":1,"1199":5,"1203":1,"1207":2,"1270":2,"1304":3,"1309":13,"1933":1}}],["sendpushnotificationhandlertests",{"3":{"1199":1,"1207":3}}],["sendpushnotificationhandler",{"2":{"225":1,"229":1,"230":1,"231":1,"434":1,"435":1,"1304":1,"1512":1,"1933":1},"3":{"0":1,"225":7,"229":1,"230":1,"231":2,"434":1,"435":3,"436":1,"1199":2,"1203":1,"1207":2,"1286":2,"1302":1,"1304":3,"1309":54,"1323":2,"1512":1,"1933":1}}],["sendresult",{"3":{"1324":3}}],["sendreadwithauthrefreshasync",{"3":{"1324":3}}],["sendrequestasync",{"2":{"2074":1},"3":{"0":1,"881":2,"1324":8,"1395":12,"2074":1}}],["sendtouserasync",{"3":{"1309":3}}],["sendtousersasync",{"2":{"434":1,"1933":2},"3":{"434":1,"1286":1,"1309":5,"1323":2,"1933":2}}],["sendmailasync",{"3":{"230":1,"1309":1}}],["sendasync",{"3":{"230":1,"1309":8,"1311":3,"1323":1,"1324":15,"1339":1,"1436":7,"1488":1}}],["sendemailasync",{"2":{"2181":1},"3":{"2181":1}}],["sendemailconfirmationasync",{"3":{"1415":2,"1436":1}}],["sendemailconfirmationcommand",{"2":{"1408":1},"3":{"1199":7,"1203":1,"1207":2,"1300":1,"1323":2,"1408":2,"1415":12,"1436":1}}],["sendemailconfirmationrequestvalidator",{"2":{"1295":1},"3":{"1199":1,"1203":1,"1207":1,"1295":1,"1300":3}}],["sendemailconfirmationrequest",{"2":{"1295":1},"3":{"1199":11,"1203":1,"1207":1,"1295":1,"1300":3,"1323":1,"1324":1,"1415":3}}],["sendemailconfirmation",{"2":{"1408":1},"3":{"674":1,"1203":2,"1207":6,"1323":2,"1408":2,"1415":4}}],["sendemailconfirmationhandlertests",{"3":{"1199":1,"1207":2}}],["sendemailconfirmationhandler",{"2":{"674":1,"1408":1},"3":{"674":4,"1199":2,"1203":1,"1207":2,"1300":2,"1323":1,"1408":2,"1415":5,"1496":1}}],["sendemailconfirmationhandlerbase",{"2":{"674":1,"1322":1,"1408":1,"2198":1},"3":{"230":1,"674":2,"1199":3,"1203":1,"1207":2,"1300":3,"1322":3,"1323":4,"1408":1,"1415":2,"1496":1,"1577":1,"1582":1,"2198":1}}],["senderscopeddedupkey",{"3":{"1309":2}}],["senders",{"3":{"1309":3,"1323":1}}],["sender",{"3":{"0":1,"223":1,"225":4,"230":3,"231":3,"380":1,"433":1,"436":1,"1192":1,"1286":1,"1300":2,"1302":1,"1303":3,"1307":1,"1309":24,"1320":1,"1323":8,"1436":1,"1467":1,"1496":1,"1512":1,"1935":1,"1938":1,"1940":1,"1941":1,"1944":1}}],["sendordershippedemailinternalcommand",{"2":{"1264":1},"3":{"1264":2}}],["sendordershippedemailinternalcommandhandler",{"2":{"230":1},"3":{"230":1}}],["sendorderpaymentfailedemail",{"3":{"2187":1}}],["sendorderpaymentfailedemailinternalcommand",{"2":{"2165":1},"3":{"2165":1,"2189":2}}],["sendorderpaymentfailedemailinternalcommandhandler",{"2":{"230":1},"3":{"230":1,"2189":1}}],["sendorderpaidemailinternalcommand",{"2":{"1026":1},"3":{"1026":1}}],["sendorderpaidemailinternalcommandhandler",{"2":{"230":1,"1026":1},"3":{"230":2,"1026":3}}],["sending",{"0":{"1933":1},"3":{"180":1,"792":1,"1019":1,"1186":1,"1202":1,"1203":1,"1271":1,"1286":2,"1304":2,"1309":8,"1323":4,"1324":4,"1339":1,"1359":3,"1384":1,"1395":1,"1396":3,"1402":3,"1415":3,"1424":1,"1427":1,"1508":1,"1769":1,"1770":1,"1933":2}}],["sendshttp2withpriorknowledge",{"3":{"1339":1}}],["sendshttp11",{"3":{"1339":1}}],["sends",{"3":{"0":2,"97":1,"111":1,"157":2,"160":1,"180":1,"206":1,"227":1,"230":1,"382":1,"434":2,"435":2,"448":2,"449":1,"507":1,"649":1,"773":1,"826":1,"827":1,"842":1,"881":2,"1050":1,"1091":1,"1237":1,"1241":1,"1247":1,"1286":3,"1300":4,"1304":1,"1309":11,"1311":2,"1312":1,"1323":5,"1324":23,"1328":1,"1339":4,"1347":1,"1350":3,"1359":13,"1369":1,"1380":2,"1389":1,"1395":18,"1396":9,"1400":1,"1402":1,"1415":4,"1416":1,"1422":1,"1436":6,"1438":2,"1441":1,"1455":1,"1458":2,"1467":3,"1481":1,"1600":1,"1627":1,"1641":2,"1666":1,"1719":1,"1765":1,"1767":1,"1770":1,"1835":1,"1908":1,"1933":1,"1936":1,"1944":1,"1949":1,"2003":1,"2010":1,"2131":2,"2133":2,"2147":2,"2181":1,"2189":1}}],["send",{"0":{"1304":1,"1512":1},"2":{"641":1,"642":1},"3":{"0":6,"31":1,"72":2,"109":1,"175":1,"202":1,"225":6,"227":2,"230":10,"231":2,"236":1,"336":1,"380":1,"435":1,"436":1,"640":1,"641":1,"642":1,"649":1,"675":1,"740":1,"789":1,"795":1,"848":1,"854":2,"856":2,"881":2,"883":1,"896":1,"926":1,"1018":1,"1041":1,"1203":3,"1207":6,"1247":1,"1249":1,"1270":1,"1286":8,"1294":1,"1300":10,"1302":5,"1303":1,"1304":3,"1305":2,"1307":1,"1309":51,"1311":8,"1323":16,"1324":54,"1339":4,"1350":1,"1359":3,"1369":1,"1395":2,"1396":6,"1400":1,"1402":1,"1408":3,"1415":9,"1427":1,"1434":1,"1436":10,"1438":5,"1467":3,"1512":2,"1534":1,"1577":1,"1591":1,"1595":1,"1596":2,"1641":4,"1666":1,"1667":1,"1669":1,"1719":1,"1723":1,"1749":1,"1761":1,"1765":1,"1767":1,"1770":2,"1776":1,"1911":1,"1933":7,"1934":5,"1935":2,"1936":2,"1937":1,"1938":3,"1940":4,"1941":1,"1950":1,"1969":1,"2148":1,"2166":1,"2196":1}}],["sev",{"2":{"2046":1},"3":{"0":1,"609":15,"1436":2,"1467":3,"1469":1,"1474":4,"1476":8,"2046":1}}],["seventy",{"3":{"2044":1}}],["seventeen",{"3":{"135":1,"141":2,"468":1,"475":2,"616":1,"618":2,"782":1,"803":1,"1212":1,"1350":1,"1369":13,"1395":3,"1417":2,"1467":1,"1660":1,"1666":1,"2111":1,"2112":1}}],["seventh",{"3":{"0":1,"1055":1,"1359":1,"1396":1,"1436":5,"1526":1,"1728":1}}],["seven",{"3":{"0":14,"76":1,"80":1,"115":2,"117":1,"121":2,"122":1,"126":1,"135":1,"150":1,"184":1,"195":1,"203":1,"241":3,"243":1,"245":3,"250":1,"251":2,"252":1,"254":5,"256":2,"257":2,"258":1,"259":3,"260":3,"261":1,"400":2,"401":2,"404":1,"418":1,"423":1,"426":1,"454":1,"501":3,"502":1,"554":1,"556":1,"572":2,"574":1,"577":1,"578":3,"579":1,"589":1,"599":1,"604":1,"616":1,"626":1,"631":1,"632":2,"633":3,"635":2,"638":1,"640":1,"657":1,"659":3,"672":3,"674":3,"677":1,"690":1,"715":1,"749":1,"750":1,"767":1,"774":1,"782":2,"801":1,"881":3,"897":1,"900":1,"914":1,"968":1,"1018":1,"1020":1,"1050":1,"1076":1,"1090":1,"1176":1,"1212":4,"1220":1,"1237":1,"1241":1,"1247":9,"1260":1,"1262":1,"1270":7,"1273":1,"1286":2,"1300":3,"1301":2,"1309":1,"1311":1,"1312":2,"1323":5,"1324":7,"1339":7,"1347":1,"1350":17,"1359":33,"1369":4,"1371":1,"1380":2,"1382":1,"1395":6,"1396":8,"1402":2,"1415":11,"1417":1,"1428":2,"1431":1,"1436":34,"1438":2,"1443":1,"1450":1,"1455":1,"1459":1,"1467":2,"1476":1,"1486":1,"1492":1,"1496":3,"1524":1,"1526":6,"1531":1,"1532":2,"1577":3,"1591":3,"1600":2,"1627":1,"1650":1,"1651":1,"1662":1,"1667":1,"1670":1,"1671":2,"1686":1,"1728":1,"1729":1,"1805":1,"1821":1,"1826":1,"1839":1,"1874":1,"1916":1,"1923":1,"1963":1,"1980":1,"1982":1,"1984":2,"2044":1,"2055":1,"2060":1,"2065":1,"2087":1,"2097":2,"2098":2,"2131":1,"2167":2,"2171":2,"2179":1}}],["sever",{"3":{"1436":2}}],["severities",{"3":{"610":1,"614":1,"649":1,"1324":3,"1467":1,"1474":1,"1476":1,"1483":1,"2079":1,"2158":1}}],["severityfor",{"3":{"1396":2}}],["severity",{"0":{"1222":1},"2":{"135":1,"490":1,"491":1,"492":1,"493":1,"1526":1},"3":{"0":6,"107":2,"110":1,"111":1,"113":1,"135":2,"265":1,"407":1,"486":1,"490":2,"491":2,"492":2,"493":2,"607":2,"608":1,"609":23,"610":1,"611":6,"612":2,"633":2,"896":2,"898":2,"980":1,"981":2,"1018":1,"1198":2,"1199":9,"1207":2,"1212":1,"1213":1,"1214":2,"1225":1,"1229":2,"1237":1,"1271":1,"1311":2,"1324":24,"1339":1,"1359":1,"1395":3,"1396":5,"1431":1,"1436":6,"1438":1,"1453":2,"1467":12,"1476":2,"1489":1,"1526":1,"1552":1,"1577":1,"1581":1,"1582":1,"1584":1,"1591":1,"1649":1,"1654":1,"1661":1,"1662":1,"1673":1,"1683":1,"1685":1,"1696":1,"1727":2,"1903":1,"1905":1,"2046":2,"2049":1,"2085":1,"2086":1,"2158":12,"2220":1,"2232":1}}],["several",{"3":{"0":1,"27":1,"109":3,"131":1,"165":1,"166":1,"185":1,"228":1,"268":1,"396":1,"471":1,"508":1,"509":1,"544":1,"549":1,"551":1,"600":2,"601":1,"632":1,"677":1,"714":1,"765":1,"809":1,"810":1,"822":1,"839":1,"900":1,"974":1,"988":1,"1055":1,"1067":1,"1103":1,"1104":1,"1107":1,"1220":1,"1229":4,"1239":1,"1246":1,"1247":1,"1259":1,"1263":1,"1269":2,"1270":9,"1271":1,"1280":1,"1286":15,"1289":1,"1300":3,"1301":3,"1302":1,"1309":1,"1310":1,"1311":8,"1319":1,"1320":1,"1323":5,"1324":11,"1332":1,"1333":1,"1339":3,"1350":9,"1351":1,"1352":1,"1353":1,"1359":10,"1362":1,"1374":1,"1380":2,"1387":1,"1395":4,"1396":10,"1405":1,"1409":1,"1416":1,"1417":6,"1420":1,"1429":1,"1436":17,"1442":1,"1475":1,"1488":2,"1489":1,"1490":1,"1496":3,"1499":1,"1500":2,"1537":1,"1577":1,"1582":1,"1671":1,"1675":1,"1692":1,"1697":1,"1699":1,"1708":1,"1726":1,"1727":1,"1767":1,"1805":1,"1863":1,"1942":1,"2041":1,"2087":1}}],["severe",{"3":{"0":1,"109":2,"1224":1,"1229":2,"1311":5,"1312":2,"1324":2,"1702":1,"1805":1,"1806":1,"1927":2}}],["ser",{"3":{"1685":1,"1686":2}}],["serious",{"3":{"2061":1}}],["seriously",{"3":{"1396":1}}],["serif",{"3":{"1324":1,"2075":1}}],["serially",{"3":{"1455":1}}],["serial",{"3":{"1300":1,"1436":1}}],["serializable",{"3":{"1286":1,"1300":1,"1324":1,"1350":1,"1359":2,"1417":1,"1534":1}}],["serializationerror",{"3":{"1286":1}}],["serialization",{"2":{"1229":2,"1369":1},"3":{"0":1,"245":1,"253":1,"291":1,"380":1,"520":1,"593":1,"655":1,"657":2,"658":1,"659":1,"733":1,"964":1,"1043":1,"1102":1,"1150":1,"1154":1,"1203":3,"1207":24,"1212":2,"1223":1,"1229":8,"1233":1,"1234":1,"1235":1,"1237":6,"1259":3,"1270":1,"1300":3,"1301":3,"1311":3,"1323":3,"1324":2,"1341":1,"1350":1,"1359":9,"1369":1,"1380":2,"1402":2,"1415":3,"1417":2,"1436":3,"1438":1,"1496":1,"1540":1,"1916":1,"1920":1,"1944":1,"2040":1,"2232":1}}],["serializing",{"3":{"434":1,"1251":1,"1270":1,"1300":1,"1301":1,"1311":3,"1323":1,"1359":1,"1396":2,"1402":1,"1417":2,"1475":1,"1916":1}}],["serializetoutf8bytes",{"3":{"1301":1,"1311":1,"1415":1}}],["serialize",{"3":{"1229":1,"1244":1,"1247":2,"1270":2,"1286":1,"1300":5,"1301":2,"1311":3,"1324":2,"1350":2,"1359":1,"1395":1,"1399":1,"1402":2,"1415":3,"1417":3,"1427":2,"1838":1,"1909":2,"1912":1,"1950":1}}],["serializes",{"3":{"24":2,"77":1,"157":1,"195":1,"243":1,"301":1,"306":1,"341":1,"423":1,"424":1,"436":1,"519":1,"541":1,"657":1,"660":1,"725":1,"964":1,"995":1,"996":2,"999":1,"1018":1,"1050":2,"1142":1,"1150":1,"1229":3,"1233":3,"1234":1,"1237":5,"1259":2,"1270":1,"1286":4,"1300":8,"1301":2,"1311":12,"1323":3,"1324":5,"1345":1,"1350":1,"1359":1,"1396":2,"1399":1,"1402":4,"1415":4,"1417":3,"1436":2,"1455":1,"1496":1,"1638":1,"1806":1,"1874":1,"1887":2,"1909":1,"1912":1,"1927":1,"2076":1,"2091":1,"2169":1}}],["serialized",{"3":{"0":3,"17":1,"38":1,"78":1,"157":2,"159":3,"330":1,"380":1,"447":1,"472":1,"536":1,"558":1,"781":1,"783":1,"852":1,"857":1,"965":1,"966":1,"1034":1,"1043":1,"1074":1,"1140":1,"1175":1,"1212":1,"1223":1,"1229":4,"1237":3,"1245":1,"1259":6,"1274":1,"1275":1,"1286":2,"1289":1,"1298":1,"1300":6,"1309":3,"1311":4,"1312":1,"1323":2,"1324":7,"1350":4,"1359":1,"1380":1,"1396":9,"1400":1,"1402":5,"1406":1,"1415":4,"1417":2,"1436":6,"1546":1,"1630":1,"1631":1,"1639":1,"1640":1,"1805":1,"1845":1,"1889":1,"1908":2,"1944":1,"1946":1,"1950":1,"1968":1,"1972":1,"1988":1,"2065":1,"2130":1,"2184":1}}],["serializeroptions",{"3":{"1259":1,"1286":1}}],["serializer",{"3":{"0":1,"79":1,"82":1,"381":1,"470":1,"965":1,"1212":1,"1286":1,"1300":2,"1311":2,"1324":1,"1359":1,"1396":1,"1400":1,"1427":1,"1438":1,"1944":1,"2232":1}}],["series",{"0":{"1779":1,"1786":1},"1":{"1778":1,"1779":1,"2204":1,"2205":1,"2206":1,"2207":1,"2208":1,"2209":1,"2210":1,"2211":1},"3":{"0":1,"24":1,"126":1,"527":1,"863":1,"1247":1,"1259":1,"1270":1,"1286":1,"1311":1,"1359":1,"1395":2,"1425":3,"1427":4,"1778":2,"1779":2,"1780":1,"1783":1,"1790":1,"1793":1,"1802":1,"1807":1,"1812":1,"1817":1,"1821":1,"1827":1,"1834":1,"1840":1,"1846":1,"1853":1,"1862":1,"1868":1,"1877":2,"1886":2,"1892":1,"1899":1,"1905":1,"1912":1,"1924":1,"1930":1,"1935":1,"1941":2,"1942":1,"1947":1,"1950":2,"1957":1,"1959":1,"1965":1,"1972":1,"1979":2,"1985":1,"1991":1,"1997":1,"2002":1,"2014":1,"2028":2,"2030":1,"2031":1,"2032":1,"2035":1,"2038":2,"2049":1,"2060":1,"2069":1,"2070":2,"2077":1,"2080":1,"2086":1,"2098":1,"2108":2,"2115":1,"2123":2,"2128":1,"2133":1,"2139":2,"2146":2,"2153":1,"2160":1,"2169":1,"2177":1,"2180":1,"2183":1,"2193":1,"2194":1,"2203":4,"2204":3,"2211":1,"2215":3,"2232":1,"2236":2,"2245":2}}],["serilogbootstraptests",{"3":{"1199":1,"1207":2,"1437":1,"1487":1}}],["seriloghostextensionstests",{"3":{"401":1,"1199":1,"1207":3,"1339":2,"1438":1}}],["seriloghostextensions",{"3":{"401":3,"980":1,"1199":2,"1203":1,"1207":2,"1208":1,"1311":1,"1333":2,"1339":3,"1442":2}}],["serilogloggerprovider",{"2":{"401":1},"3":{"401":1,"1339":1}}],["serilog",{"3":{"0":3,"395":2,"401":4,"914":1,"1213":1,"1311":1,"1323":1,"1325":1,"1333":1,"1339":6,"1379":1,"1437":1,"1438":1,"1442":2,"1445":1,"1456":1,"1467":2,"1489":1,"1490":1,"1577":1,"1660":1,"1670":2,"2043":1,"2063":1}}],["serving",{"3":{"0":2,"31":1,"62":1,"91":2,"94":1,"99":1,"104":1,"234":1,"235":2,"390":1,"421":1,"563":1,"609":1,"699":1,"733":1,"756":1,"757":4,"758":2,"765":1,"875":1,"971":1,"1124":1,"1270":1,"1278":1,"1286":3,"1300":2,"1301":1,"1307":1,"1311":10,"1312":1,"1324":3,"1335":1,"1339":4,"1350":1,"1359":7,"1369":1,"1372":1,"1379":1,"1380":1,"1395":1,"1396":8,"1415":2,"1436":5,"1455":6,"1461":1,"1467":7,"1474":1,"1476":1,"1478":1,"1577":1,"1669":1,"1708":1,"1920":1,"1923":1,"2001":1,"2036":2,"2043":1,"2124":1,"2125":1,"2147":1,"2151":1,"2156":1}}],["servicetestfixture",{"2":{"1617":1},"3":{"1617":1}}],["servicetype",{"3":{"1323":2,"1339":1,"1436":1}}],["servicelifetime",{"3":{"1436":1}}],["servicehost",{"3":{"1431":1,"1436":3}}],["serviceprovider",{"3":{"1259":6,"1286":5,"1301":2,"1315":2,"1323":2,"1324":2,"1369":3,"1380":1,"1395":2,"1396":2,"1402":1,"1427":4,"1436":2}}],["serviced",{"3":{"1571":1}}],["servicedatabaseltr",{"2":{"1474":1,"2034":1},"3":{"1474":1,"2034":1}}],["servicedatabasenames",{"2":{"1473":1},"3":{"1467":1,"1473":1}}],["servicedatabases",{"3":{"1436":1}}],["servicedatasources",{"3":{"1328":1,"1339":2}}],["servicediscovery",{"2":{"1213":1},"3":{"1213":2,"1324":1}}],["servicedescriptor",{"2":{"122":1},"3":{"122":1,"1286":2,"1309":1,"1311":2,"1312":1,"1323":7,"1359":1,"1369":1,"1380":2,"1396":2,"1415":2,"1427":1,"1436":2}}],["servicedefaultsretrytests",{"3":{"1199":1,"1207":2,"1438":2}}],["servicedefaults",{"2":{"61":1,"1439":1,"1442":1},"3":{"0":1,"61":1,"1192":2,"1202":1,"1203":1,"1325":1,"1339":3,"1436":1,"1439":1,"1442":3,"1496":2,"1591":1,"2156":1}}],["servicemodel",{"3":{"1415":1}}],["servicemodels",{"3":{"1199":2,"1207":1,"1436":6,"1487":1,"1489":1}}],["servicemocks",{"3":{"1199":4,"1207":3}}],["servicecollectiondescriptorextensions",{"2":{"1309":1,"1350":1,"1380":1,"1415":1},"3":{"1309":1,"1311":1,"1350":1,"1380":1,"1396":1,"1415":1}}],["servicecollection",{"3":{"572":1,"1262":1,"1436":9}}],["servicecontractinterfaceof",{"3":{"1436":1}}],["servicecontractimplementations",{"3":{"1436":2}}],["servicecontractimplementationsarenotpublic",{"2":{"1312":1},"3":{"1312":1,"1436":1}}],["servicecontractpuritytests",{"3":{"1199":2,"1207":4,"1312":1,"1436":16,"1489":3,"1577":1,"1591":1}}],["servicecontractpuritytestsbase",{"2":{"51":1,"1585":1,"1663":1},"3":{"51":1,"54":1,"1199":3,"1207":2,"1312":5,"1350":1,"1415":1,"1436":13,"1577":1,"1585":1,"1663":1}}],["servicecontractattributefullname",{"3":{"1312":1,"1436":1}}],["servicecontractattribute",{"2":{"1349":1,"1801":1},"3":{"1199":1,"1203":1,"1207":2,"1312":9,"1349":1,"1350":3,"1396":4,"1415":3,"1436":6,"1577":1,"1801":1}}],["servicecontractsdonotdependonserviceinternals",{"2":{"1929":1},"3":{"54":1,"1312":1,"1436":4,"1929":1}}],["servicecontracts",{"3":{"54":1,"1436":3}}],["servicecontract",{"2":{"51":1,"54":1,"1025":1,"1030":1,"1663":1,"1929":1,"1930":1},"3":{"51":1,"54":1,"1025":1,"1030":1,"1202":1,"1203":1,"1309":2,"1312":5,"1349":1,"1350":2,"1359":1,"1396":3,"1404":1,"1415":2,"1436":11,"1577":1,"1585":1,"1586":1,"1662":1,"1663":1,"1929":2,"1930":1}}],["servicefilter",{"2":{"320":1,"1996":1},"3":{"318":2,"320":1,"324":1,"1300":1,"1396":3,"1994":1,"1995":2,"1996":1}}],["servicefilterattribute",{"2":{"157":1,"343":1,"1908":1},"3":{"157":1,"341":1,"343":1,"1311":4,"1908":1}}],["serviceinternalnamespaces",{"3":{"1436":1}}],["serviceinternals",{"3":{"54":1,"1436":3}}],["serviceinforesponse",{"3":{"448":1,"1199":2,"1203":1,"1207":1,"1311":6,"1380":1,"1496":1,"2131":1}}],["serviceinfo",{"2":{"449":1,"450":1,"2132":1},"3":{"448":2,"449":1,"450":1,"572":1,"1212":1,"1311":2,"1376":1,"1380":3,"1436":5,"1488":2,"1496":1,"1497":1,"1591":1,"2055":1,"2131":1,"2132":2}}],["serviceinfov2response",{"2":{"448":1,"2131":1},"3":{"448":1,"1199":2,"1203":1,"1207":1,"1311":6,"1380":1,"1496":1,"2131":1}}],["serviceinfoversioningcontracttestsbase",{"2":{"448":1,"455":1,"572":1,"1428":1,"1488":1,"2055":1,"2131":1,"2133":1},"3":{"0":1,"448":4,"455":1,"572":3,"1199":2,"1207":2,"1311":2,"1428":1,"1436":7,"1488":2,"2055":1,"2131":4,"2133":1}}],["serviceinfocontroller",{"2":{"448":1,"1376":1,"2131":1},"3":{"448":8,"1199":1,"1203":1,"1207":2,"1311":3,"1371":2,"1376":4,"1380":6,"1436":3,"1489":1,"1496":1,"1526":1,"1535":1,"1591":2,"1600":2,"2131":5}}],["serviceinfocontrollerbase",{"2":{"446":1,"448":1,"449":1,"1371":1,"1376":1,"2131":1,"2133":1},"3":{"0":1,"446":1,"448":8,"449":1,"1199":2,"1203":1,"1207":4,"1212":1,"1311":24,"1371":1,"1376":1,"1380":8,"1436":1,"1496":1,"2131":7,"2133":1}}],["servicenames",{"3":{"827":1,"1339":3}}],["servicename",{"0":{"2019":1},"2":{"53":1,"2009":1,"2019":1,"2028":1,"2030":1},"3":{"53":1,"1309":5,"1311":2,"1312":7,"1316":1,"1323":1,"1339":5,"1376":1,"1378":2,"1380":7,"1396":4,"1415":5,"1441":4,"1467":1,"1656":1,"2009":1,"2019":2,"2028":1,"2030":1}}],["serviceuri",{"2":{"440":1},"3":{"0":1,"440":1,"1323":7,"1467":2,"2126":2}}],["servicebusadministrationclient",{"3":{"1323":2}}],["servicebusclient",{"3":{"1323":2}}],["servicebusroundtripsmoketests",{"3":{"1199":1,"1207":2,"1436":2,"1438":1}}],["servicebusemulatorimagetag",{"3":{"1339":1}}],["servicebusemulatorimage",{"3":{"1339":1}}],["servicebusemulatorimageregistry",{"3":{"1339":1}}],["servicebusemulatorbrokertests",{"3":{"1199":1,"1207":2,"1339":3,"1438":2}}],["servicebusemulatorcollection",{"3":{"1199":2,"1207":1}}],["servicebusemulator",{"2":{"1203":1,"1437":1,"1438":1,"1486":1,"1487":1,"1490":2},"3":{"1199":3,"1203":1,"1206":1,"1207":9,"1436":4,"1437":1,"1438":2,"1446":1,"1486":1,"1487":1,"1490":2,"1496":1,"1599":1}}],["servicebusemulatorfixture",{"3":{"1199":3,"1207":3,"1436":2,"1438":2}}],["servicebusemulatorfixturebasetests",{"3":{"1199":1,"1207":4,"1436":1,"1438":1,"1487":1}}],["servicebusemulatorfixturebase",{"2":{"145":1,"638":1,"640":1,"1077":1,"1671":1},"3":{"145":1,"150":3,"638":1,"640":2,"642":1,"1074":1,"1077":1,"1199":4,"1207":2,"1323":2,"1436":4,"1438":2,"1488":1,"1496":1,"1671":1}}],["servicebusemulatorresource",{"2":{"640":1,"1444":2},"3":{"640":1,"1199":3,"1203":1,"1207":2,"1327":5,"1339":6,"1441":2,"1444":4,"1451":1,"1496":1}}],["servicebusemulatorsupporttests",{"3":{"1199":1,"1207":2,"1323":2,"1438":2}}],["servicebusemulatorsupport",{"2":{"638":1,"640":1,"1320":1},"3":{"150":3,"638":1,"640":2,"1074":1,"1199":2,"1203":1,"1207":2,"1320":3,"1323":10,"1496":1}}],["servicebus",{"2":{"145":1,"147":1,"149":1,"150":1,"152":1,"810":1,"1074":1,"1075":2,"1077":1,"1078":1},"3":{"0":2,"145":4,"147":2,"149":1,"150":2,"152":1,"624":2,"626":1,"640":4,"810":1,"1074":1,"1075":2,"1077":1,"1078":1,"1213":1,"1323":2,"1339":1,"1436":5,"1438":1,"1441":1,"1444":1,"1455":1,"1460":1,"1489":1,"1490":1,"1526":2,"1600":1}}],["serviceexceptionhelper",{"3":{"0":1,"109":1,"265":1}}],["services",{"0":{"1354":1,"1509":1,"1663":1},"1":{"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1},"2":{"92":1,"95":1,"96":1,"104":1,"121":1,"180":1,"265":1,"300":1,"412":1,"454":2,"846":1,"954":3,"979":8,"980":1,"981":1,"1004":1,"1207":2,"1247":2,"1249":1,"1269":1,"1307":1,"1309":1,"1310":1,"1369":1,"1377":1,"1395":1,"1396":3,"1416":2,"1417":6,"1441":1,"1447":1,"1455":1,"1486":1,"1491":1,"1653":2,"1684":1,"1702":1,"1728":1,"1810":1,"1882":1,"1935":1,"2009":1,"2019":1,"2022":1,"2026":1,"2094":1,"2097":1},"3":{"0":14,"20":1,"24":1,"30":1,"31":4,"46":4,"49":3,"53":2,"55":2,"56":1,"59":1,"60":2,"61":1,"62":1,"63":2,"73":1,"92":1,"93":3,"94":2,"95":8,"96":5,"97":1,"98":5,"99":1,"102":1,"103":1,"104":1,"105":1,"107":1,"109":1,"117":2,"121":1,"142":1,"157":2,"175":2,"180":1,"181":1,"186":2,"195":4,"203":1,"235":6,"241":2,"242":1,"243":14,"245":9,"247":1,"248":1,"254":2,"258":2,"259":5,"260":4,"261":2,"264":1,"265":4,"281":1,"283":2,"295":7,"300":2,"303":1,"310":1,"312":1,"313":1,"318":1,"330":5,"331":1,"333":4,"336":1,"337":3,"341":1,"349":2,"353":1,"387":2,"388":1,"390":5,"391":2,"392":3,"396":1,"400":1,"401":2,"412":1,"413":4,"416":2,"418":1,"420":1,"423":1,"426":2,"427":1,"428":5,"429":1,"430":2,"434":1,"436":1,"447":1,"448":5,"449":1,"451":1,"452":2,"454":4,"459":3,"461":1,"482":1,"486":2,"487":1,"489":1,"490":1,"491":2,"492":2,"493":1,"505":1,"507":12,"508":1,"509":2,"511":1,"512":1,"513":3,"514":3,"518":1,"536":1,"538":2,"539":1,"541":1,"545":1,"549":1,"552":1,"556":1,"558":1,"572":4,"574":1,"577":1,"578":1,"582":1,"583":9,"584":1,"585":7,"586":1,"600":2,"602":1,"640":2,"642":1,"644":1,"649":2,"657":2,"665":2,"668":1,"669":1,"674":7,"682":3,"690":2,"698":1,"707":1,"715":2,"723":1,"725":2,"727":1,"733":3,"736":1,"740":1,"741":1,"744":1,"749":6,"751":1,"773":1,"774":3,"775":1,"790":1,"810":1,"826":2,"827":5,"831":1,"833":1,"837":1,"838":2,"846":2,"854":2,"868":3,"869":2,"870":2,"873":3,"876":8,"877":3,"881":27,"897":2,"905":1,"913":2,"914":1,"916":1,"930":2,"931":1,"950":1,"953":1,"954":8,"979":10,"980":5,"981":1,"983":1,"998":4,"999":2,"1004":4,"1006":1,"1025":1,"1026":2,"1028":1,"1029":1,"1050":4,"1059":5,"1069":2,"1082":1,"1086":1,"1090":1,"1092":1,"1095":1,"1100":1,"1103":1,"1104":1,"1116":1,"1140":1,"1161":1,"1178":1,"1183":2,"1184":3,"1192":7,"1199":17,"1201":1,"1202":4,"1203":293,"1206":1,"1207":1067,"1208":61,"1212":5,"1213":2,"1227":1,"1229":3,"1237":2,"1241":4,"1242":2,"1243":5,"1244":1,"1246":2,"1247":92,"1248":1,"1249":1,"1252":1,"1253":1,"1256":3,"1257":1,"1259":10,"1262":3,"1269":1,"1270":12,"1271":1,"1275":3,"1276":1,"1278":1,"1281":1,"1285":1,"1286":33,"1287":1,"1300":51,"1301":22,"1304":1,"1305":1,"1307":9,"1309":55,"1310":32,"1311":78,"1312":36,"1314":3,"1316":2,"1320":1,"1323":44,"1324":368,"1325":6,"1326":2,"1328":3,"1331":6,"1332":11,"1333":1,"1334":4,"1335":5,"1336":1,"1337":1,"1338":1,"1339":77,"1340":1,"1341":1,"1345":1,"1349":1,"1350":18,"1351":1,"1352":1,"1353":1,"1354":1,"1355":2,"1359":95,"1360":1,"1368":1,"1369":9,"1377":1,"1378":7,"1379":3,"1380":52,"1381":3,"1382":25,"1385":1,"1386":7,"1387":12,"1388":8,"1389":3,"1390":3,"1391":3,"1392":2,"1393":2,"1395":209,"1396":239,"1401":7,"1402":32,"1404":2,"1406":3,"1409":1,"1413":1,"1414":2,"1415":82,"1416":36,"1417":365,"1421":1,"1427":6,"1428":1,"1429":1,"1431":1,"1432":4,"1434":1,"1435":3,"1436":77,"1437":7,"1438":49,"1440":1,"1441":12,"1442":2,"1443":5,"1444":2,"1445":3,"1446":3,"1447":7,"1448":1,"1449":2,"1455":5,"1456":4,"1460":1,"1461":1,"1464":10,"1467":32,"1469":1,"1473":1,"1474":1,"1477":1,"1486":1,"1487":6,"1488":5,"1489":2,"1490":4,"1491":2,"1496":30,"1498":2,"1508":1,"1509":2,"1523":1,"1526":9,"1531":2,"1534":2,"1535":3,"1538":1,"1541":1,"1542":2,"1544":4,"1547":1,"1548":1,"1549":1,"1550":1,"1555":1,"1556":2,"1570":1,"1577":9,"1582":3,"1586":2,"1588":1,"1589":2,"1591":13,"1596":5,"1599":1,"1600":1,"1611":2,"1613":1,"1619":1,"1629":1,"1638":1,"1641":1,"1651":1,"1652":1,"1653":5,"1656":5,"1663":1,"1667":1,"1669":2,"1677":1,"1678":1,"1684":1,"1702":2,"1708":1,"1724":1,"1728":1,"1761":1,"1765":3,"1770":2,"1790":2,"1792":2,"1808":2,"1810":1,"1824":1,"1835":1,"1848":1,"1850":1,"1852":2,"1864":1,"1878":1,"1882":1,"1883":3,"1887":1,"1893":1,"1894":2,"1895":2,"1897":1,"1898":1,"1899":1,"1908":3,"1916":1,"1920":1,"1923":1,"1926":1,"1935":1,"1948":2,"1970":1,"2004":1,"2008":1,"2009":2,"2010":1,"2015":1,"2019":1,"2022":1,"2023":1,"2024":2,"2025":1,"2026":1,"2028":1,"2055":3,"2067":1,"2082":2,"2083":3,"2086":1,"2094":2,"2097":1,"2110":1,"2111":1,"2113":1,"2117":1,"2118":2,"2119":1,"2121":3,"2123":1,"2127":1,"2130":2,"2131":2,"2136":1,"2154":1,"2155":1,"2156":3,"2164":1,"2168":1,"2177":1,"2202":1,"2208":1,"2229":1,"2230":1,"2232":2}}],["service",{"0":{"95":1,"1225":1,"1244":1,"1327":1,"1329":1,"1346":1,"1379":1,"1400":1,"1402":1,"1413":1,"1442":1,"1443":1,"1473":1,"1510":1,"1656":1,"1946":1,"2021":1,"2035":1},"1":{"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"746":1,"747":1,"748":1,"749":1,"750":1,"751":1,"752":1,"753":1,"771":1,"772":1,"773":1,"774":1,"775":1,"776":1,"777":1,"778":1,"1238":1,"1239":1,"1240":1,"1241":1,"1242":1,"1243":1,"1244":1,"1245":1,"1246":1,"1247":1,"1312":1,"1325":1,"1326":1,"1327":1,"1328":1,"1329":1,"1330":1,"1331":1,"1332":1,"1333":1,"1334":1,"1335":1,"1336":1,"1337":1,"1338":1,"1339":1,"1370":1,"1371":1,"1372":1,"1373":1,"1374":1,"1375":1,"1376":1,"1377":1,"1378":1,"1379":1,"1380":1,"1847":1,"1848":1,"1849":1,"1850":1,"1851":1,"1852":1,"1853":1,"1893":1,"1894":1,"1895":1,"1896":1,"1897":1,"1898":1,"1899":1,"2015":1,"2016":1,"2017":1,"2018":1,"2019":1,"2020":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1,"2027":1,"2028":1},"2":{"62":1,"229":1,"493":3,"1363":1,"1370":1,"1379":1,"1404":1,"1445":4,"1469":1,"1525":1,"1613":1,"1703":1},"3":{"0":82,"10":1,"15":1,"28":1,"30":7,"31":6,"32":3,"40":1,"44":1,"46":1,"47":5,"48":1,"49":1,"50":1,"52":1,"53":3,"54":1,"55":2,"57":2,"59":14,"60":4,"61":5,"62":6,"63":3,"64":3,"67":1,"68":2,"77":2,"81":1,"91":4,"92":6,"93":6,"94":3,"95":8,"96":5,"97":3,"98":5,"99":2,"100":5,"102":2,"103":3,"105":2,"107":1,"109":3,"110":1,"111":1,"115":1,"117":9,"122":2,"126":2,"127":1,"136":2,"145":2,"146":1,"147":1,"150":7,"152":2,"153":1,"155":1,"158":2,"159":2,"165":2,"167":1,"169":1,"174":2,"175":3,"176":1,"177":3,"181":1,"186":1,"191":2,"195":23,"196":2,"197":2,"200":5,"201":4,"202":1,"203":1,"216":1,"217":1,"219":1,"220":1,"224":1,"229":4,"234":1,"235":6,"236":1,"237":1,"241":4,"243":14,"245":13,"249":1,"255":7,"257":1,"258":1,"259":3,"260":5,"279":1,"280":1,"281":1,"283":3,"285":1,"288":1,"290":2,"291":7,"292":3,"293":2,"294":2,"295":8,"296":1,"300":1,"302":2,"313":1,"329":1,"330":1,"343":1,"349":2,"350":3,"352":1,"361":1,"380":1,"381":1,"382":1,"386":3,"387":4,"388":1,"389":2,"390":10,"391":3,"392":3,"395":3,"396":1,"397":2,"398":2,"399":1,"400":3,"401":6,"403":1,"407":1,"412":1,"413":2,"415":1,"418":2,"420":1,"426":3,"428":3,"429":2,"430":1,"433":1,"435":1,"446":2,"447":2,"448":6,"449":1,"450":1,"451":1,"452":8,"453":1,"454":1,"458":3,"459":3,"461":3,"471":1,"473":1,"493":4,"497":1,"498":1,"499":2,"500":1,"506":1,"513":3,"517":1,"518":1,"521":2,"524":1,"535":1,"536":3,"539":1,"541":1,"544":1,"545":1,"547":1,"548":1,"556":1,"558":2,"563":1,"564":1,"568":3,"572":5,"573":1,"574":2,"582":3,"583":18,"584":3,"585":5,"586":1,"587":1,"597":2,"598":3,"599":8,"600":1,"601":1,"602":8,"605":2,"609":2,"612":1,"624":1,"625":2,"626":9,"628":1,"633":1,"638":7,"639":2,"640":20,"641":4,"642":8,"643":10,"644":3,"645":1,"657":1,"659":1,"664":3,"665":5,"667":1,"668":2,"669":1,"674":5,"675":1,"690":3,"691":1,"692":4,"693":1,"696":1,"697":1,"699":1,"702":2,"706":3,"707":1,"708":1,"709":1,"711":1,"715":2,"725":4,"726":1,"727":1,"731":2,"732":1,"733":6,"741":1,"744":2,"746":1,"749":11,"750":3,"751":3,"756":1,"757":3,"758":4,"759":1,"762":2,"764":1,"766":2,"768":3,"771":1,"773":6,"774":21,"775":2,"776":5,"777":1,"778":3,"783":1,"786":1,"789":1,"790":1,"791":1,"792":1,"793":3,"794":1,"799":1,"809":1,"810":3,"815":2,"818":1,"819":4,"820":1,"821":2,"822":1,"823":1,"825":2,"826":10,"827":8,"828":2,"829":2,"834":2,"836":1,"837":2,"838":3,"839":1,"842":1,"846":1,"848":1,"854":4,"857":1,"860":1,"868":3,"869":12,"870":3,"872":2,"873":3,"875":1,"876":8,"877":2,"881":1,"883":2,"896":1,"897":2,"905":1,"906":1,"907":1,"913":4,"914":10,"915":3,"918":1,"922":1,"930":1,"931":2,"933":1,"935":1,"939":1,"950":1,"952":1,"954":4,"956":1,"960":1,"980":2,"987":3,"990":1,"992":1,"994":1,"995":1,"996":1,"998":3,"999":3,"1000":1,"1004":1,"1011":2,"1012":2,"1013":1,"1016":2,"1017":3,"1018":8,"1021":1,"1024":1,"1026":1,"1027":2,"1028":2,"1029":1,"1030":2,"1034":2,"1043":1,"1058":1,"1059":5,"1061":1,"1063":1,"1066":2,"1067":7,"1068":1,"1069":1,"1070":1,"1073":1,"1074":3,"1075":8,"1076":1,"1083":1,"1085":1,"1090":1,"1093":3,"1094":3,"1095":1,"1100":1,"1107":1,"1108":1,"1116":4,"1117":1,"1118":1,"1119":1,"1124":1,"1127":1,"1135":1,"1140":1,"1150":1,"1155":2,"1175":2,"1176":1,"1185":1,"1187":2,"1191":2,"1192":15,"1198":2,"1199":12,"1202":10,"1203":22,"1206":4,"1207":36,"1208":4,"1212":28,"1213":6,"1218":1,"1225":2,"1229":1,"1237":8,"1238":2,"1239":1,"1241":1,"1242":1,"1243":1,"1244":2,"1245":3,"1246":1,"1247":16,"1248":2,"1249":1,"1251":1,"1252":2,"1253":1,"1254":1,"1257":2,"1258":2,"1259":55,"1262":3,"1263":1,"1265":2,"1269":2,"1270":23,"1271":2,"1272":1,"1273":1,"1275":3,"1276":2,"1277":2,"1280":1,"1286":78,"1287":1,"1288":6,"1289":1,"1290":5,"1292":1,"1294":1,"1297":1,"1300":68,"1301":34,"1302":1,"1303":2,"1304":2,"1306":1,"1307":9,"1308":1,"1309":77,"1310":9,"1311":149,"1312":60,"1313":3,"1314":3,"1315":2,"1316":2,"1318":3,"1320":3,"1321":1,"1323":100,"1324":111,"1325":12,"1326":10,"1327":4,"1328":8,"1329":2,"1330":1,"1331":6,"1332":13,"1333":7,"1334":3,"1335":5,"1336":2,"1337":5,"1338":2,"1339":193,"1340":2,"1341":4,"1344":1,"1346":3,"1347":1,"1348":2,"1349":3,"1350":52,"1354":4,"1355":1,"1356":1,"1359":97,"1361":1,"1363":2,"1366":2,"1368":2,"1369":13,"1370":5,"1373":1,"1377":1,"1378":7,"1379":5,"1380":107,"1381":1,"1382":2,"1383":1,"1385":1,"1386":1,"1388":2,"1389":2,"1390":2,"1391":3,"1392":1,"1395":167,"1396":232,"1398":1,"1400":4,"1401":2,"1402":49,"1403":2,"1404":2,"1406":7,"1409":6,"1410":1,"1412":2,"1413":6,"1414":1,"1415":134,"1416":9,"1417":44,"1425":1,"1427":8,"1428":1,"1429":3,"1430":3,"1431":4,"1432":2,"1435":1,"1436":180,"1437":7,"1438":49,"1439":4,"1440":2,"1441":43,"1442":15,"1443":7,"1444":8,"1445":12,"1446":12,"1447":14,"1449":6,"1450":1,"1451":1,"1452":1,"1455":32,"1456":11,"1459":1,"1460":15,"1461":1,"1462":1,"1463":1,"1464":10,"1465":1,"1467":91,"1469":9,"1471":3,"1473":16,"1474":6,"1475":3,"1476":7,"1477":4,"1478":2,"1481":1,"1482":4,"1483":1,"1484":1,"1486":7,"1487":13,"1488":10,"1489":12,"1490":24,"1491":2,"1492":12,"1493":1,"1496":34,"1497":1,"1498":3,"1500":1,"1509":3,"1510":1,"1523":1,"1524":2,"1525":3,"1526":46,"1531":6,"1532":8,"1534":14,"1535":11,"1544":5,"1545":2,"1546":1,"1547":2,"1548":2,"1550":1,"1553":1,"1556":1,"1566":2,"1568":2,"1572":4,"1575":3,"1576":3,"1577":8,"1581":1,"1582":1,"1583":1,"1585":2,"1586":1,"1588":1,"1589":4,"1590":4,"1591":46,"1595":4,"1596":13,"1597":6,"1599":5,"1600":6,"1611":11,"1612":3,"1613":2,"1614":1,"1615":1,"1616":1,"1617":1,"1618":1,"1619":2,"1626":2,"1630":3,"1631":6,"1632":6,"1635":2,"1636":1,"1637":2,"1638":4,"1639":1,"1640":4,"1641":2,"1646":2,"1647":2,"1650":1,"1651":2,"1652":1,"1653":2,"1654":3,"1656":12,"1660":5,"1662":2,"1663":9,"1664":1,"1665":2,"1666":3,"1667":1,"1668":1,"1670":8,"1671":4,"1675":2,"1676":1,"1677":2,"1678":1,"1680":1,"1686":1,"1687":1,"1697":1,"1699":1,"1702":1,"1703":2,"1707":2,"1709":2,"1715":1,"1718":2,"1721":1,"1724":3,"1727":1,"1749":1,"1750":1,"1752":3,"1761":2,"1763":2,"1765":3,"1769":2,"1770":1,"1772":1,"1775":2,"1778":1,"1779":3,"1781":1,"1783":5,"1786":2,"1788":4,"1790":10,"1792":4,"1793":4,"1799":1,"1803":1,"1805":1,"1808":2,"1810":1,"1817":1,"1818":1,"1823":1,"1824":2,"1825":1,"1826":2,"1827":1,"1839":3,"1841":4,"1842":3,"1843":2,"1845":2,"1846":1,"1847":3,"1848":3,"1852":3,"1853":4,"1855":2,"1863":1,"1864":1,"1865":1,"1875":2,"1882":1,"1883":1,"1884":3,"1886":3,"1887":2,"1888":1,"1892":3,"1893":7,"1894":2,"1895":3,"1896":3,"1897":2,"1898":1,"1899":3,"1903":1,"1916":2,"1919":1,"1920":1,"1921":1,"1922":7,"1923":5,"1924":3,"1927":3,"1928":1,"1929":2,"1940":1,"1944":1,"1946":4,"1948":4,"1949":1,"1950":1,"1951":1,"1968":1,"1970":2,"1974":1,"1975":1,"1978":3,"1980":1,"1988":2,"1994":1,"1999":1,"2000":4,"2001":3,"2002":2,"2003":2,"2004":4,"2006":5,"2008":7,"2009":4,"2010":2,"2012":1,"2013":3,"2014":6,"2015":2,"2018":4,"2019":1,"2020":2,"2021":3,"2022":3,"2023":4,"2024":11,"2025":4,"2026":1,"2027":4,"2028":4,"2029":1,"2030":4,"2033":2,"2034":3,"2035":6,"2036":5,"2037":4,"2038":3,"2043":1,"2049":1,"2053":2,"2055":4,"2060":1,"2063":2,"2066":2,"2067":3,"2074":1,"2076":1,"2080":1,"2082":2,"2085":1,"2087":1,"2107":1,"2111":5,"2113":4,"2115":1,"2117":1,"2118":1,"2119":1,"2123":1,"2127":4,"2128":1,"2130":3,"2131":7,"2132":1,"2135":1,"2138":2,"2145":1,"2151":1,"2154":1,"2155":1,"2156":5,"2160":1,"2162":1,"2164":3,"2166":2,"2167":2,"2168":1,"2175":2,"2179":3,"2180":1,"2193":1,"2194":1,"2201":1,"2202":3,"2207":2,"2208":1,"2209":2,"2213":1,"2214":2,"2219":2,"2221":2,"2226":1,"2227":3,"2228":1,"2230":8,"2232":11,"2243":2}}],["servefromcacheasync",{"3":{"1311":1}}],["serve",{"3":{"0":2,"53":1,"55":1,"91":2,"92":2,"97":2,"98":2,"100":1,"101":1,"213":1,"234":1,"235":1,"236":1,"237":1,"243":1,"264":1,"265":1,"266":1,"388":1,"441":1,"451":1,"506":1,"556":1,"571":1,"733":1,"741":1,"751":1,"774":1,"819":1,"825":1,"829":1,"945":1,"1043":1,"1191":1,"1200":1,"1237":1,"1239":1,"1246":1,"1247":4,"1259":1,"1267":1,"1270":4,"1276":1,"1278":1,"1286":17,"1300":4,"1301":2,"1309":1,"1310":2,"1311":8,"1312":1,"1317":1,"1323":2,"1324":9,"1332":2,"1337":1,"1339":8,"1350":1,"1357":1,"1359":12,"1362":1,"1369":3,"1380":8,"1395":6,"1396":13,"1402":1,"1415":2,"1416":2,"1417":3,"1436":3,"1441":1,"1443":3,"1467":2,"1475":1,"1476":3,"1488":1,"1534":1,"1631":1,"1634":1,"1667":1,"1708":1,"1821":1,"1849":1,"1899":1,"1920":1,"1922":1,"1946":1,"2014":1,"2025":3,"2127":1,"2128":1,"2147":1,"2153":1}}],["served",{"3":{"0":7,"37":1,"42":1,"164":1,"170":2,"175":1,"176":1,"177":1,"233":1,"235":2,"242":1,"243":2,"341":2,"388":1,"391":1,"418":4,"420":1,"423":2,"424":2,"426":1,"428":1,"429":1,"433":1,"447":1,"450":1,"461":1,"573":1,"577":1,"707":1,"733":1,"735":1,"740":1,"749":1,"761":1,"826":2,"827":1,"905":1,"947":1,"1099":1,"1116":1,"1124":1,"1185":1,"1212":1,"1221":1,"1246":1,"1247":1,"1263":1,"1264":1,"1267":2,"1270":5,"1286":5,"1288":1,"1297":1,"1300":4,"1301":1,"1306":2,"1309":6,"1311":9,"1323":3,"1324":14,"1339":1,"1347":1,"1350":6,"1358":1,"1359":5,"1379":3,"1380":5,"1395":7,"1396":8,"1400":1,"1402":1,"1406":1,"1415":5,"1416":2,"1427":1,"1436":3,"1438":2,"1446":2,"1447":2,"1453":2,"1454":2,"1455":19,"1456":2,"1457":1,"1458":2,"1459":3,"1466":1,"1467":3,"1473":1,"1481":2,"1488":1,"1526":2,"1591":3,"1631":1,"1640":1,"1641":1,"1651":1,"1708":1,"1748":1,"1765":1,"1821":1,"1825":1,"1849":1,"1917":1,"1920":1,"1922":3,"1926":1,"1936":1,"2007":1,"2024":2,"2055":1,"2075":1,"2125":1,"2130":1,"2133":1,"2140":1,"2150":1,"2202":1,"2220":1,"2232":1}}],["serves",{"3":{"0":4,"63":1,"91":2,"93":1,"95":1,"98":3,"102":2,"110":1,"113":2,"170":1,"213":1,"216":2,"229":1,"265":1,"291":1,"391":1,"418":1,"448":2,"509":1,"536":1,"546":1,"571":1,"574":1,"577":1,"584":1,"633":1,"650":1,"665":1,"676":1,"697":1,"698":2,"725":1,"756":1,"758":1,"767":1,"832":1,"869":1,"877":1,"881":1,"882":1,"889":1,"926":2,"947":1,"954":1,"972":1,"1034":1,"1059":3,"1067":2,"1118":1,"1150":1,"1184":1,"1212":2,"1237":1,"1247":4,"1249":1,"1259":3,"1263":1,"1270":5,"1277":1,"1281":1,"1286":15,"1287":1,"1300":4,"1309":6,"1311":19,"1312":1,"1323":2,"1324":20,"1325":1,"1331":1,"1332":3,"1339":9,"1350":2,"1356":1,"1359":9,"1362":2,"1366":1,"1369":4,"1371":1,"1376":1,"1378":1,"1380":3,"1391":1,"1393":1,"1395":9,"1396":14,"1400":1,"1402":2,"1407":2,"1408":1,"1409":2,"1413":1,"1415":6,"1416":2,"1417":1,"1431":2,"1433":1,"1436":22,"1438":1,"1441":2,"1444":1,"1447":3,"1448":1,"1449":1,"1453":1,"1455":1,"1456":1,"1457":1,"1467":2,"1475":1,"1481":1,"1491":1,"1513":1,"1591":1,"1596":1,"1627":2,"1649":1,"1666":1,"1668":1,"1720":1,"1750":1,"1760":1,"1761":1,"1790":1,"1851":2,"1895":1,"1922":1,"1923":1,"1929":1,"1989":1,"1999":1,"2017":1,"2021":1,"2025":4,"2073":1,"2077":1,"2121":1,"2126":1,"2131":1,"2149":1,"2150":1,"2152":2,"2163":1,"2201":1,"2232":2}}],["serverless",{"3":{"1568":1,"1678":1}}],["server=true",{"3":{"1456":1,"1534":1}}],["serververdict",{"3":{"1436":1}}],["serveresponseasync",{"3":{"1311":1}}],["servercallcontext",{"3":{"1309":2,"1380":2,"1396":2,"1415":1,"1438":1}}],["servertokenstorageservicetests",{"3":{"1199":1,"1207":3,"1324":2,"1438":1}}],["servertokenstorageservice",{"2":{"486":1,"487":1,"489":1,"490":1,"491":1,"492":1,"507":1},"3":{"486":2,"487":2,"489":2,"490":2,"491":2,"492":3,"507":8,"514":1,"1199":4,"1203":1,"1207":2,"1300":2,"1324":18,"1416":1,"1417":1,"1438":1,"1487":1,"1496":2,"1590":1,"1591":2,"1600":1}}],["serverstreamingserverhandler",{"3":{"1312":1}}],["servers",{"2":{"1929":1},"3":{"91":1,"1192":1,"1202":1,"1203":1,"1301":3,"1359":1,"1370":1,"1436":1,"1437":1,"1474":1,"1929":1,"2220":1}}],["serverdata=",{"3":{"1395":1}}],["serverdata",{"2":{"2072":1,"2076":1},"3":{"0":1,"556":1,"881":1,"1324":5,"1383":1,"1395":6,"1526":1,"2072":1,"2074":1,"2076":1}}],["server",{"0":{"1378":1,"2018":1},"1":{"1121":1,"1122":1,"1123":1,"1124":1,"1125":1,"1126":1,"1127":1,"1128":1,"1129":1},"2":{"402":1,"409":1,"451":1,"452":1,"1698":1,"2159":1},"3":{"0":49,"10":2,"13":1,"45":1,"47":1,"53":2,"86":1,"91":2,"92":2,"97":2,"100":1,"103":1,"109":5,"117":1,"128":1,"158":1,"164":3,"165":2,"166":6,"170":9,"171":1,"174":2,"175":3,"176":1,"179":3,"180":1,"201":1,"206":3,"207":2,"208":2,"217":1,"228":1,"237":1,"241":1,"243":1,"258":1,"264":1,"265":7,"273":2,"330":2,"333":1,"337":1,"341":4,"342":4,"343":2,"350":1,"351":1,"363":1,"384":2,"387":1,"389":1,"397":2,"402":2,"409":1,"412":1,"413":1,"415":3,"419":1,"434":1,"436":1,"440":1,"443":1,"451":1,"452":1,"470":1,"499":1,"501":1,"506":3,"507":5,"508":2,"547":1,"549":1,"555":2,"556":5,"557":2,"558":3,"560":1,"572":1,"574":1,"609":1,"632":1,"633":5,"640":1,"644":1,"648":2,"650":1,"653":1,"664":1,"682":1,"684":1,"689":1,"690":3,"691":1,"692":1,"708":1,"719":4,"735":1,"741":1,"749":1,"766":1,"826":1,"827":3,"828":1,"830":2,"833":2,"855":2,"857":1,"860":2,"863":1,"865":2,"879":1,"880":2,"881":6,"882":3,"883":1,"884":1,"885":4,"889":2,"890":1,"892":1,"905":3,"909":1,"913":1,"914":1,"926":1,"971":1,"972":1,"974":1,"987":1,"988":1,"1004":1,"1028":1,"1033":4,"1034":18,"1035":2,"1036":3,"1044":1,"1050":2,"1052":1,"1067":1,"1069":1,"1083":1,"1085":1,"1091":1,"1116":2,"1117":1,"1121":1,"1123":3,"1124":1,"1129":1,"1132":1,"1133":1,"1134":1,"1135":1,"1144":1,"1174":2,"1175":2,"1176":1,"1182":1,"1184":9,"1185":2,"1187":2,"1192":1,"1212":12,"1213":3,"1217":1,"1219":2,"1225":1,"1227":1,"1229":7,"1236":1,"1237":3,"1239":1,"1241":5,"1242":6,"1243":2,"1245":2,"1247":24,"1259":2,"1265":2,"1270":6,"1271":3,"1273":2,"1274":1,"1277":1,"1278":1,"1279":7,"1280":5,"1281":1,"1282":3,"1284":3,"1286":141,"1287":2,"1289":1,"1290":1,"1298":5,"1300":49,"1301":17,"1306":1,"1309":30,"1310":4,"1311":39,"1312":28,"1317":1,"1320":1,"1321":1,"1323":8,"1324":253,"1326":2,"1327":2,"1332":2,"1333":3,"1334":2,"1339":43,"1342":3,"1347":1,"1350":21,"1352":1,"1355":1,"1357":1,"1358":1,"1359":54,"1360":1,"1361":1,"1369":7,"1378":2,"1379":1,"1380":13,"1381":1,"1382":1,"1383":2,"1384":3,"1385":1,"1387":1,"1388":2,"1389":1,"1390":1,"1391":1,"1392":3,"1393":1,"1395":182,"1396":170,"1399":1,"1401":1,"1402":22,"1408":1,"1410":1,"1414":3,"1415":31,"1416":21,"1417":88,"1419":1,"1427":1,"1428":1,"1429":3,"1431":1,"1432":1,"1433":1,"1436":79,"1437":8,"1438":27,"1440":1,"1441":12,"1443":10,"1446":3,"1447":2,"1451":2,"1453":8,"1455":3,"1456":2,"1457":2,"1460":2,"1467":42,"1473":3,"1474":3,"1475":5,"1476":2,"1477":1,"1478":2,"1486":4,"1487":4,"1488":7,"1489":2,"1490":15,"1492":4,"1496":5,"1510":1,"1513":1,"1526":16,"1531":1,"1532":2,"1534":3,"1535":2,"1554":1,"1556":4,"1560":2,"1561":3,"1563":1,"1564":1,"1572":3,"1577":9,"1582":3,"1583":1,"1585":1,"1586":1,"1591":9,"1595":1,"1596":2,"1597":1,"1599":8,"1600":1,"1602":1,"1611":2,"1618":1,"1626":1,"1627":2,"1630":2,"1631":5,"1632":2,"1635":1,"1638":1,"1639":3,"1640":5,"1641":5,"1647":2,"1648":2,"1653":7,"1654":1,"1656":1,"1660":2,"1664":2,"1666":1,"1667":2,"1668":2,"1669":4,"1671":2,"1673":2,"1675":1,"1677":3,"1681":1,"1682":1,"1685":1,"1687":1,"1692":1,"1693":1,"1697":1,"1698":1,"1702":3,"1709":1,"1717":2,"1718":3,"1719":1,"1720":2,"1721":2,"1723":1,"1724":2,"1725":1,"1727":2,"1731":2,"1748":1,"1749":1,"1750":1,"1752":1,"1757":1,"1759":2,"1763":3,"1765":1,"1767":1,"1773":2,"1774":1,"1775":1,"1790":2,"1805":2,"1814":1,"1815":2,"1817":2,"1840":2,"1851":1,"1853":1,"1854":3,"1855":1,"1856":4,"1857":1,"1858":1,"1859":2,"1860":2,"1861":4,"1863":1,"1867":1,"1871":2,"1872":2,"1874":1,"1876":2,"1877":1,"1883":1,"1903":1,"1906":4,"1916":1,"1921":1,"1927":1,"1928":1,"1936":1,"1945":1,"1956":1,"1966":4,"1967":2,"1968":3,"1972":7,"1975":3,"1979":2,"1980":2,"1981":1,"1984":1,"1985":2,"1988":2,"1989":1,"1998":1,"1999":1,"2000":5,"2001":1,"2002":1,"2003":1,"2004":2,"2005":1,"2007":1,"2017":1,"2018":2,"2024":1,"2025":1,"2028":2,"2033":1,"2034":1,"2036":2,"2037":1,"2043":2,"2053":1,"2055":1,"2059":3,"2069":1,"2070":3,"2071":1,"2072":3,"2074":5,"2076":1,"2077":1,"2078":2,"2080":3,"2081":2,"2082":3,"2083":2,"2085":3,"2086":4,"2089":1,"2118":2,"2119":1,"2126":1,"2158":1,"2159":1,"2167":1,"2170":1,"2192":1,"2219":1,"2220":2,"2224":1,"2230":1,"2232":5}}],["selenium",{"3":{"2219":1,"2220":1}}],["selecteventasync",{"3":{"1359":2}}],["selectedrole",{"3":{"1415":1}}],["selectedroomidchanged",{"3":{"1395":1}}],["selectedroomid",{"3":{"1395":4}}],["selectedvalue",{"3":{"1396":1}}],["selectedsessionid",{"3":{"1396":1}}],["selectedstatus",{"3":{"1395":1}}],["selectedeventname",{"3":{"1395":1}}],["selectedeventidchanged",{"3":{"1395":1}}],["selectedeventid",{"3":{"1395":4}}],["selected",{"3":{"0":3,"31":1,"166":1,"170":1,"243":1,"253":1,"447":1,"448":1,"455":1,"674":1,"689":1,"774":1,"775":1,"778":1,"827":1,"840":1,"905":1,"945":1,"1016":1,"1091":1,"1133":1,"1192":1,"1202":1,"1203":1,"1212":1,"1257":1,"1286":7,"1291":1,"1300":2,"1301":2,"1310":1,"1311":5,"1323":2,"1324":2,"1339":3,"1350":4,"1356":1,"1359":3,"1376":1,"1380":1,"1389":1,"1395":15,"1396":3,"1402":1,"1415":2,"1416":1,"1417":6,"1418":1,"1427":2,"1433":2,"1436":4,"1467":1,"1496":1,"1577":1,"1626":1,"1627":1,"1630":1,"1635":1,"1653":1,"1656":1,"1663":1,"1671":1,"1842":1,"1895":1,"1898":1,"2012":1,"2047":1,"2130":1,"2131":1,"2133":1,"2232":2}}],["selectcurrentornext",{"3":{"1350":7,"1359":1,"1395":10,"1396":1}}],["selectcleartexturl",{"3":{"1339":2}}],["selectmany",{"3":{"1286":1,"1311":1,"1324":1,"1436":1}}],["selectable",{"3":{"178":1,"1342":1,"1350":3,"1475":1,"1591":1,"1667":1,"2002":1}}],["selective",{"3":{"780":1,"784":1,"1350":2}}],["selecting",{"3":{"0":1,"359":1,"846":1,"1247":2,"1284":1,"1286":3,"1300":1,"1311":1,"1350":1,"1359":2,"1395":1,"1396":1,"1436":2,"1492":1,"1687":1,"1748":1}}],["selections",{"3":{"1395":1}}],["selectionservice",{"3":{"1395":1}}],["selection",{"0":{"1348":1,"1390":1},"1":{"637":1,"638":1,"639":1,"640":1,"641":1,"642":1,"643":1,"644":1,"645":1},"2":{"1395":1},"3":{"0":1,"27":1,"86":2,"107":1,"185":1,"199":1,"225":1,"305":1,"312":1,"359":1,"365":1,"412":1,"449":1,"591":1,"637":1,"642":2,"643":1,"774":2,"823":1,"881":1,"913":1,"917":1,"945":1,"947":2,"1017":1,"1111":1,"1202":2,"1203":14,"1207":34,"1212":2,"1229":1,"1238":1,"1243":2,"1247":2,"1257":1,"1278":1,"1286":9,"1292":1,"1300":1,"1301":1,"1311":4,"1323":2,"1324":3,"1326":1,"1339":6,"1340":1,"1347":1,"1348":1,"1350":9,"1359":9,"1369":2,"1377":1,"1380":2,"1381":1,"1382":1,"1385":9,"1390":9,"1393":1,"1395":66,"1396":4,"1405":1,"1415":2,"1417":7,"1427":3,"1429":1,"1436":2,"1437":2,"1438":8,"1446":2,"1455":1,"1460":1,"1467":1,"1469":1,"1492":1,"1493":1,"1496":1,"1524":2,"1526":1,"1531":1,"1532":1,"1564":1,"1577":1,"1621":2,"1625":1,"1627":2,"1632":2,"1640":1,"1815":1,"1960":1,"2047":1,"2142":1,"2232":1}}],["selectors",{"3":{"1278":1,"1286":1,"1310":3,"1359":18,"1416":2,"1436":4,"1526":1,"1531":1,"1565":2,"1577":1,"1640":1,"1865":1,"1868":1}}],["selectorderedcandidates",{"2":{"1255":1},"3":{"1237":1,"1255":1,"1259":1}}],["selector",{"2":{"1833":1},"3":{"0":4,"328":1,"333":2,"640":2,"692":1,"755":1,"1192":1,"1229":1,"1239":1,"1247":6,"1271":25,"1286":12,"1300":1,"1310":7,"1311":3,"1323":1,"1324":3,"1339":1,"1348":1,"1353":3,"1359":129,"1395":7,"1396":4,"1415":1,"1416":1,"1436":17,"1487":1,"1526":1,"1534":1,"1577":1,"1750":1,"1773":1,"1829":2,"1830":1,"1833":3,"1834":1,"1859":1,"2232":1}}],["select",{"2":{"1238":1,"2077":1,"2140":1,"2193":1},"3":{"0":2,"235":1,"311":1,"330":1,"402":1,"536":1,"549":2,"550":1,"618":2,"620":1,"640":1,"649":1,"1238":1,"1242":1,"1243":1,"1247":4,"1269":1,"1270":2,"1271":2,"1286":14,"1287":1,"1309":3,"1311":3,"1323":1,"1324":2,"1326":1,"1332":1,"1333":1,"1339":4,"1350":4,"1359":14,"1362":1,"1369":1,"1380":4,"1395":2,"1396":12,"1402":4,"1415":10,"1417":2,"1433":1,"1436":5,"1438":1,"1441":1,"1443":1,"1444":1,"1446":1,"1467":1,"1488":2,"1577":1,"1677":1,"1750":1,"1815":1,"1988":1,"2008":1,"2010":1,"2022":1,"2057":1,"2077":1,"2140":1,"2142":1,"2193":1}}],["selectsortkey",{"3":{"1415":3}}],["selects",{"3":{"0":1,"98":1,"201":1,"280":1,"330":1,"332":1,"447":1,"448":1,"499":1,"539":1,"592":1,"599":1,"638":1,"644":1,"757":1,"905":1,"946":1,"1091":1,"1108":1,"1112":1,"1222":1,"1229":1,"1237":1,"1240":1,"1243":2,"1247":4,"1256":1,"1259":2,"1269":2,"1284":1,"1286":6,"1288":1,"1300":3,"1311":1,"1312":2,"1319":1,"1323":2,"1327":1,"1336":1,"1339":4,"1359":5,"1392":1,"1395":1,"1396":4,"1402":2,"1416":1,"1420":1,"1427":1,"1436":11,"1438":2,"1441":1,"1455":3,"1456":1,"1467":3,"1486":1,"1526":1,"1653":1,"1669":1,"1765":1,"1790":1,"1842":1,"1902":1,"1916":1,"1924":1,"1988":1,"2020":1,"2130":1}}],["selling",{"3":{"1395":1,"2110":1}}],["sell",{"3":{"1395":1,"1782":1}}],["sells",{"3":{"689":1,"698":1,"1025":1,"1035":1,"1395":2}}],["selfreference",{"3":{"1417":3}}],["selfhealasync",{"3":{"1301":2}}],["selfhttpwarmup",{"3":{"1396":1,"1415":1}}],["selfhttpwarmuptask",{"2":{"1191":1,"1498":1},"3":{"235":2,"1191":3,"1198":2,"1199":4,"1203":2,"1207":4,"1334":1,"1339":4,"1396":9,"1413":2,"1415":14,"1496":5,"1498":3}}],["selfhttpwarmuptaskbasetests",{"3":{"1199":1,"1207":8,"1339":3,"1438":1}}],["selfhttpwarmuptaskbase",{"2":{"233":1,"235":1,"238":1,"1413":1,"1668":1},"3":{"0":1,"233":1,"235":3,"238":1,"1199":6,"1203":1,"1207":2,"1334":2,"1339":5,"1379":1,"1380":3,"1396":2,"1413":1,"1415":1,"1438":1,"1443":7,"1496":1,"1668":1}}],["selfhttpoutputcache",{"3":{"1380":1}}],["selfhttpoutputcachewarmuptasktests",{"2":{"1379":1},"3":{"1199":1,"1207":2,"1379":1,"1380":2,"1438":1}}],["selfhttpoutputcachewarmuptask",{"2":{"1379":1},"3":{"235":4,"1199":2,"1203":1,"1207":2,"1324":2,"1334":1,"1339":4,"1379":3,"1380":8,"1395":5}}],["selfonlydeletefixture",{"3":{"1199":2,"1207":1,"1436":5}}],["selfmappingupcaster",{"3":{"1199":2,"1207":1}}],["selfcheckinoutcome",{"3":{"1199":5,"1203":1,"1207":2,"1396":20}}],["self",{"1":{"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"787":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"794":1,"795":1,"1878":1,"1879":1,"1880":1,"1881":1,"1882":1,"1883":1,"1884":1,"1885":1,"1886":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"1919":1,"1920":1,"1921":1,"1922":1,"1923":1,"1924":1,"1980":1,"1981":1,"1982":1,"1983":1,"1984":1,"1985":1},"3":{"0":8,"55":1,"109":1,"165":1,"195":1,"196":1,"212":3,"214":11,"215":1,"216":1,"219":10,"235":3,"236":1,"243":1,"245":1,"282":1,"288":1,"332":1,"333":1,"341":1,"359":1,"360":1,"389":1,"484":1,"486":1,"500":2,"563":1,"568":1,"684":1,"688":2,"689":1,"690":2,"691":3,"692":2,"707":1,"733":1,"757":1,"758":1,"787":1,"790":2,"791":1,"794":1,"821":1,"828":1,"846":1,"853":1,"856":1,"910":1,"964":2,"1020":1,"1050":1,"1052":1,"1100":1,"1161":1,"1192":1,"1212":2,"1235":1,"1237":3,"1247":3,"1270":4,"1271":1,"1286":4,"1288":1,"1292":1,"1300":9,"1309":5,"1310":2,"1311":10,"1312":1,"1317":1,"1323":10,"1324":25,"1328":1,"1332":3,"1336":2,"1339":26,"1350":13,"1359":13,"1373":2,"1375":2,"1378":1,"1380":10,"1388":2,"1395":9,"1396":52,"1402":8,"1406":1,"1407":1,"1411":1,"1415":14,"1416":2,"1417":1,"1431":1,"1434":1,"1436":40,"1438":3,"1441":1,"1443":3,"1455":3,"1459":1,"1460":1,"1467":3,"1469":1,"1486":2,"1492":1,"1493":1,"1496":3,"1510":1,"1526":1,"1534":1,"1552":1,"1575":2,"1577":11,"1582":1,"1586":1,"1591":2,"1600":1,"1611":1,"1613":1,"1630":2,"1632":3,"1641":2,"1665":1,"1749":1,"1764":1,"1779":3,"1792":1,"1810":1,"1845":1,"1877":1,"1878":1,"1884":2,"1912":1,"1913":1,"1923":1,"1924":1,"1979":1,"1980":1,"1990":1,"2001":1,"2002":1,"2007":1,"2009":1,"2022":1,"2029":1,"2030":1,"2075":2,"2079":1,"2127":1,"2142":1,"2146":3,"2149":5,"2150":12,"2152":1,"2169":1,"2207":1,"2208":2,"2232":1}}],["seeing",{"3":{"1247":1,"1301":3,"1311":1,"1350":1,"1359":3,"1369":1,"1381":1,"1395":1,"1396":3,"1415":2,"1436":3}}],["seekable",{"3":{"1286":1,"1323":1}}],["seeks",{"3":{"1278":1,"1286":2,"1402":1}}],["seeking",{"3":{"1228":1,"1229":1}}],["seeked",{"3":{"359":1}}],["seek",{"3":{"200":1,"361":1,"1228":1,"1229":4,"1259":3,"1278":1,"1286":10,"1311":1,"1396":6,"1438":2,"1577":1,"2144":1,"2145":1}}],["seenrequest",{"3":{"1199":2,"1207":1}}],["seen",{"3":{"100":1,"188":1,"341":2,"344":1,"527":1,"1093":1,"1229":2,"1259":2,"1270":1,"1276":1,"1286":1,"1300":4,"1301":1,"1309":2,"1311":1,"1312":1,"1323":2,"1324":4,"1350":3,"1359":9,"1380":1,"1396":3,"1402":1,"1415":1,"1416":1,"1423":1,"1427":2,"1436":2,"1467":1,"1685":1,"1708":1,"1808":1,"1851":1,"1927":1,"1964":1,"2163":1}}],["sees",{"3":{"0":5,"17":1,"39":1,"41":1,"47":1,"53":1,"78":1,"109":1,"125":2,"126":1,"160":1,"175":1,"177":1,"217":1,"224":1,"244":1,"255":1,"265":1,"318":1,"351":1,"371":1,"382":1,"384":1,"390":1,"471":1,"544":1,"564":1,"583":1,"584":1,"592":1,"609":1,"611":1,"620":1,"639":1,"675":1,"692":1,"698":1,"699":1,"700":1,"714":3,"715":1,"717":2,"725":1,"789":1,"795":1,"798":1,"821":1,"825":1,"826":1,"827":1,"828":1,"829":1,"831":1,"881":1,"926":2,"933":1,"966":1,"982":1,"988":1,"989":1,"1018":2,"1019":1,"1020":1,"1033":1,"1050":2,"1059":1,"1061":1,"1066":1,"1092":1,"1116":2,"1117":1,"1123":1,"1125":2,"1141":1,"1162":1,"1169":1,"1170":1,"1177":1,"1184":1,"1186":1,"1188":1,"1212":2,"1232":1,"1237":4,"1247":7,"1257":1,"1259":6,"1266":1,"1270":6,"1271":5,"1276":1,"1280":1,"1286":20,"1300":6,"1301":3,"1302":1,"1305":2,"1309":9,"1311":9,"1312":1,"1315":1,"1323":7,"1324":19,"1332":1,"1333":1,"1336":1,"1338":2,"1339":6,"1350":8,"1359":27,"1366":1,"1369":1,"1371":1,"1375":1,"1379":1,"1380":6,"1395":19,"1396":12,"1402":9,"1408":1,"1410":1,"1415":9,"1416":1,"1417":6,"1420":1,"1424":1,"1427":3,"1436":28,"1438":2,"1441":1,"1442":1,"1443":1,"1455":1,"1467":2,"1473":1,"1475":1,"1485":1,"1489":2,"1496":1,"1596":1,"1641":1,"1672":1,"1677":1,"1708":2,"1749":2,"1759":1,"1765":1,"1831":2,"1840":1,"1841":1,"1851":1,"1871":1,"1876":1,"1881":1,"1889":1,"1906":1,"1927":1,"1930":1,"1933":1,"1940":1,"1949":1,"1966":1,"1968":1,"1974":1,"1994":1,"1999":1,"2000":1,"2001":1,"2024":2,"2041":1,"2047":1,"2048":1,"2056":1,"2076":1,"2116":1,"2123":1,"2141":1,"2144":1,"2165":1,"2167":1,"2179":1}}],["seeddarkthemeasync",{"3":{"1436":2}}],["seeddevelopersconferenceeventasync",{"3":{"1369":1}}],["seedlive",{"3":{"1436":1}}],["seedpartnersasync",{"3":{"1369":3}}],["seedquestionsasync",{"3":{"1369":1}}],["seedcloudaiconferenceeventasync",{"3":{"1369":1}}],["seedable",{"3":{"1436":1}}],["seedactivitiesasync",{"3":{"1369":1}}],["seedaccountasync",{"3":{"1286":1}}],["seedaccount",{"3":{"1199":5,"1203":1,"1207":2,"1284":2,"1286":6,"1415":1,"1496":1}}],["seedasync",{"2":{"1315":1,"1881":1},"3":{"1286":6,"1315":2,"1323":3,"1369":3,"1380":2,"1415":4,"1881":1}}],["seedallasync",{"2":{"295":2},"3":{"295":2,"1286":1,"1315":1,"1323":2,"1369":1,"1881":1}}],["seededday",{"3":{"1395":1}}],["seededids",{"3":{"1199":2,"1207":1}}],["seeded",{"3":{"207":1,"295":2,"310":1,"499":1,"618":1,"657":1,"747":1,"749":1,"774":1,"1282":1,"1286":2,"1297":1,"1298":1,"1300":2,"1311":3,"1342":1,"1350":3,"1364":3,"1369":7,"1380":1,"1395":10,"1396":1,"1402":2,"1415":4,"1429":1,"1433":1,"1436":12,"1438":4,"1488":3,"1577":1,"1595":1,"1596":2,"1630":1,"1643":1,"1777":2,"1825":1,"1968":1,"2057":1}}],["seedermocks",{"3":{"1199":6,"1207":3}}],["seeders",{"3":{"295":2,"314":1,"583":2,"1272":1,"1276":1,"1284":1,"1286":4,"1300":1,"1311":2,"1323":4,"1777":1,"1851":1}}],["seeder",{"0":{"1377":1},"3":{"0":2,"295":7,"585":1,"698":1,"1237":2,"1246":1,"1247":1,"1253":1,"1270":1,"1286":20,"1300":1,"1311":2,"1315":1,"1323":9,"1350":3,"1359":2,"1360":1,"1364":1,"1369":9,"1380":6,"1412":1,"1415":12,"1437":1,"1438":2}}],["seeding",{"0":{"1284":1,"1364":1,"1412":1},"3":{"0":1,"295":6,"296":1,"310":4,"314":2,"470":1,"583":1,"698":1,"700":1,"946":2,"1192":1,"1202":1,"1203":7,"1207":32,"1284":6,"1286":28,"1300":1,"1311":2,"1315":1,"1323":5,"1350":1,"1359":2,"1364":2,"1369":12,"1377":2,"1380":5,"1412":3,"1415":13,"1436":2,"1438":1,"1441":2,"1444":1,"1487":1,"1500":3,"1595":1,"1596":2,"1600":1,"1618":1,"1631":1,"1638":1,"1641":1,"1662":1,"1664":2,"1777":1,"1881":1,"2013":1}}],["seed",{"0":{"1777":1},"3":{"0":2,"80":1,"146":1,"207":1,"295":6,"314":1,"369":1,"545":1,"551":1,"556":1,"562":1,"564":1,"566":1,"572":3,"583":1,"585":1,"616":1,"618":2,"620":1,"631":11,"632":1,"633":6,"634":2,"635":7,"636":2,"649":1,"651":1,"657":1,"658":1,"665":1,"666":1,"674":1,"698":1,"700":1,"782":2,"861":1,"980":1,"1004":1,"1034":1,"1036":1,"1037":1,"1190":1,"1212":1,"1229":1,"1234":1,"1237":1,"1270":1,"1284":3,"1286":18,"1300":6,"1301":1,"1311":1,"1315":1,"1324":4,"1335":1,"1336":1,"1339":5,"1364":1,"1369":5,"1380":3,"1395":1,"1396":3,"1415":3,"1436":8,"1486":1,"1488":1,"1489":2,"1492":6,"1577":1,"1596":2,"1597":1,"1600":1,"1618":1,"1619":1,"1653":1,"1661":1,"1664":1,"1707":1,"1731":3,"1751":1,"1881":2,"1970":1,"2057":1,"2077":2,"2087":1,"2101":1,"2228":2,"2232":1,"2234":1,"2239":2}}],["seedsignedincookieasync",{"3":{"1436":1}}],["seedsponsorsasync",{"3":{"1369":1}}],["seedspeakersasync",{"3":{"1369":1}}],["seedsampleeventlinksasync",{"3":{"1369":1}}],["seedsessionsasync",{"3":{"1369":2}}],["seeds",{"3":{"0":1,"207":1,"210":1,"295":1,"296":1,"459":1,"464":1,"499":1,"507":1,"583":1,"698":1,"749":2,"1229":1,"1237":1,"1241":1,"1247":1,"1278":1,"1300":2,"1301":3,"1309":2,"1311":6,"1323":2,"1324":6,"1339":1,"1347":1,"1350":6,"1359":1,"1364":2,"1369":1,"1380":1,"1395":11,"1396":1,"1402":3,"1412":1,"1415":3,"1436":7,"1441":3,"1449":1,"1492":1,"1652":1,"1664":1,"1707":1,"1777":1,"2118":1,"2123":2}}],["see",{"0":{"2008":1,"2044":1},"3":{"0":9,"15":6,"17":2,"19":2,"21":1,"22":1,"24":1,"39":1,"47":1,"57":2,"62":1,"66":3,"72":1,"76":2,"91":4,"92":2,"93":2,"95":1,"97":1,"98":1,"101":1,"110":1,"115":4,"117":1,"122":2,"130":8,"132":1,"133":1,"135":3,"136":1,"139":1,"145":1,"146":1,"147":1,"155":3,"164":2,"166":1,"173":1,"175":2,"189":1,"193":4,"194":1,"202":1,"223":2,"228":1,"233":6,"241":5,"245":1,"248":2,"259":1,"272":1,"279":1,"298":2,"301":1,"302":1,"303":1,"316":1,"346":1,"359":1,"368":1,"372":1,"376":1,"386":4,"388":1,"391":1,"395":7,"397":1,"400":2,"413":1,"418":4,"423":2,"424":1,"425":2,"428":2,"432":1,"438":1,"443":1,"446":3,"448":1,"449":1,"451":1,"463":1,"468":4,"472":1,"497":2,"499":1,"505":1,"516":1,"526":2,"528":1,"530":2,"534":2,"537":1,"543":3,"546":1,"547":1,"564":1,"570":2,"593":1,"599":1,"612":1,"617":1,"624":1,"633":1,"638":1,"655":1,"665":1,"676":1,"680":1,"696":2,"698":1,"699":1,"713":1,"718":1,"725":1,"731":1,"733":1,"734":1,"759":1,"764":1,"790":1,"791":1,"797":3,"798":1,"808":1,"809":1,"821":1,"825":1,"826":1,"827":1,"829":2,"836":1,"840":1,"844":1,"852":1,"867":2,"868":1,"869":1,"870":3,"873":1,"875":1,"879":1,"891":1,"899":1,"905":1,"920":1,"922":2,"926":3,"952":3,"957":1,"970":1,"971":1,"974":1,"986":1,"994":1,"995":1,"1016":1,"1018":1,"1019":1,"1020":1,"1028":1,"1032":1,"1033":1,"1040":1,"1048":1,"1050":1,"1057":1,"1067":1,"1068":1,"1074":1,"1101":1,"1108":2,"1114":1,"1116":3,"1122":2,"1135":1,"1140":1,"1162":1,"1191":1,"1193":1,"1212":2,"1213":4,"1214":2,"1218":1,"1223":1,"1225":1,"1228":1,"1229":7,"1230":1,"1231":1,"1232":1,"1236":1,"1237":12,"1246":1,"1247":11,"1251":2,"1253":1,"1259":17,"1263":1,"1265":3,"1267":1,"1269":1,"1270":30,"1271":7,"1281":1,"1283":1,"1286":56,"1289":2,"1291":2,"1300":40,"1301":10,"1302":1,"1306":1,"1309":27,"1310":3,"1311":47,"1312":12,"1316":1,"1319":1,"1321":1,"1323":28,"1324":55,"1339":25,"1341":1,"1342":1,"1343":1,"1348":1,"1350":28,"1357":1,"1359":103,"1367":1,"1369":12,"1373":1,"1380":31,"1389":1,"1392":1,"1395":46,"1396":66,"1399":2,"1402":35,"1409":1,"1415":21,"1416":2,"1417":12,"1423":1,"1427":26,"1428":1,"1429":1,"1431":2,"1433":1,"1436":128,"1438":4,"1441":1,"1442":1,"1443":3,"1444":2,"1447":1,"1453":2,"1454":1,"1455":6,"1459":2,"1460":1,"1463":2,"1465":2,"1467":11,"1471":1,"1474":2,"1476":2,"1486":1,"1487":3,"1488":3,"1489":1,"1492":3,"1496":8,"1497":1,"1498":1,"1500":2,"1502":1,"1526":1,"1527":1,"1530":1,"1531":1,"1545":1,"1547":1,"1551":1,"1561":1,"1562":1,"1574":2,"1576":1,"1577":1,"1581":1,"1583":2,"1584":1,"1588":2,"1591":1,"1596":1,"1597":1,"1621":1,"1627":1,"1630":7,"1631":13,"1632":8,"1634":2,"1635":3,"1637":1,"1638":4,"1639":8,"1640":6,"1641":1,"1646":1,"1648":3,"1649":2,"1650":2,"1651":7,"1652":1,"1653":3,"1654":1,"1655":1,"1656":5,"1670":1,"1677":1,"1680":1,"1689":1,"1693":1,"1701":1,"1703":3,"1707":1,"1718":1,"1719":1,"1726":1,"1727":1,"1733":1,"1749":2,"1755":1,"1757":1,"1760":1,"1764":1,"1765":2,"1768":4,"1803":1,"1804":1,"1813":1,"1816":1,"1817":1,"1819":1,"1825":1,"1832":1,"1839":1,"1840":1,"1841":1,"1852":1,"1861":1,"1877":1,"1912":2,"1915":1,"1922":2,"1924":1,"1937":1,"1957":1,"1967":1,"1979":1,"1994":1,"1997":2,"2002":2,"2010":1,"2026":1,"2028":1,"2040":1,"2049":1,"2100":1,"2106":1,"2119":1,"2129":1,"2131":1,"2133":1,"2136":1,"2140":1,"2142":1,"2146":1,"2157":1,"2160":1,"2171":1,"2172":1,"2174":1,"2209":1,"2214":1,"2216":1,"2231":1,"2232":2,"2242":1,"2244":1,"2245":2}}],["setviewportsize",{"3":{"1591":1,"1596":1}}],["setvalues",{"3":{"1286":1}}],["setvalidator",{"2":{"1830":1,"1833":1},"3":{"1271":7,"1402":4,"1415":3,"1830":1,"1833":1}}],["setvariantdiscount",{"3":{"674":1}}],["setvariantdiscounthandler",{"3":{"674":2}}],["sethostconnectionstring",{"3":{"1436":1,"1488":1}}],["setnameddatasource",{"3":{"1436":2}}],["setbearertoken",{"3":{"1429":1,"1436":2,"1488":2,"1491":1}}],["setb",{"3":{"1359":1}}],["setbrowsercultureasync",{"2":{"265":1,"1526":1,"1653":1,"2083":1},"3":{"265":1,"1311":1,"1324":4,"1526":1,"1653":1,"2083":1}}],["setenvironmentvariable",{"3":{"1436":2,"1488":1}}],["seteventquestionanswers",{"3":{"1350":1,"1359":2}}],["seteventspeakers",{"3":{"1350":1,"1359":2}}],["setevent",{"3":{"1350":7,"1359":8}}],["seterror",{"3":{"1324":1}}],["setcategory",{"3":{"1350":1,"1359":1}}],["setcategoryitems",{"3":{"1350":2,"1359":1}}],["setcookie",{"3":{"1324":1}}],["setcorrelationid",{"3":{"1311":4}}],["setconcurrencyetag",{"3":{"341":1,"922":1,"1300":1,"1311":6,"1666":1,"1874":1}}],["setx",{"3":{"1343":1}}],["setxxx",{"3":{"1168":2}}],["setdiscount",{"3":{"1767":1}}],["setdiscountonallvariants",{"2":{"1026":1,"1767":1},"3":{"1026":1,"1767":2}}],["setdescription",{"3":{"1417":1}}],["setdarkmodeasync",{"3":{"1324":4,"2083":1}}],["setinventory",{"2":{"1769":1},"3":{"1746":2,"1749":3,"1769":1}}],["setinventoryitemcommand",{"3":{"1270":1}}],["setitems",{"2":{"1170":1},"3":{"1168":2,"1170":1,"1231":1,"1237":2,"1343":1,"1350":4,"1359":2,"1402":2,"1438":1,"1496":1,"1662":1,"1810":1}}],["setobserved",{"3":{"1417":2}}],["setoptions",{"3":{"1402":4}}],["setoldestdueage",{"3":{"1286":1}}],["setoldestpendingage",{"3":{"1259":2,"2156":1}}],["setoriginalrowversion",{"2":{"341":1,"342":1,"1871":1,"1872":1,"1874":1,"1876":1,"1877":1},"3":{"0":1,"341":3,"342":1,"926":1,"1237":2,"1270":2,"1286":8,"1311":2,"1359":4,"1871":1,"1872":1,"1874":1,"1876":1,"1877":1}}],["setprincipal",{"3":{"1436":2}}],["setproperty",{"3":{"1286":2}}],["setpropertycalls",{"3":{"1286":1}}],["setproperties",{"3":{"1286":1}}],["setproductdiscount",{"3":{"674":1}}],["setproductdiscounthandler",{"3":{"674":2}}],["setpublishedasync",{"3":{"1395":1}}],["setpermissionasync",{"3":{"1436":3}}],["setpermissionsasync",{"3":{"1311":2}}],["setpermissions",{"3":{"1300":1}}],["setpendingdepth",{"3":{"1259":3,"1286":2}}],["setresponse",{"3":{"1432":1,"1436":3}}],["setrendererinfo",{"2":{"955":1,"956":1},"3":{"0":1,"954":3,"955":1,"956":1,"1432":2,"1436":3}}],["setrooms",{"3":{"1350":1,"1359":2}}],["setroom",{"3":{"1350":1,"1359":1}}],["setrowsperpageasync",{"3":{"1324":1}}],["setroleasync",{"3":{"1324":7,"1415":1}}],["setroles",{"3":{"1300":1}}],["setrolesasync",{"3":{"1300":1,"1311":2,"1324":7,"1415":2}}],["setrolepermissionsrequestvalidator",{"2":{"1297":1},"3":{"1199":1,"1203":1,"1207":1,"1297":1,"1300":5}}],["setrolepermissionsrequest",{"3":{"1199":6,"1203":1,"1207":1,"1297":1,"1300":3,"1324":2}}],["setlivepoll",{"3":{"1402":4}}],["setlockedasync",{"3":{"1300":3,"1311":1,"1415":1}}],["setloadfailed",{"2":{"111":1,"112":1},"3":{"109":1,"111":1,"112":1,"1324":1}}],["setleaderboardparticipationasync",{"3":{"1396":7}}],["setleaderboardparticipation",{"3":{"1203":1,"1207":2,"1271":1,"1286":1,"1396":4}}],["setleaderboardparticipationrequest",{"3":{"1199":5,"1203":1,"1207":2,"1396":10,"1436":1}}],["setleaderboardparticipationhandlertests",{"3":{"1199":1,"1207":3,"1396":1}}],["setleaderboardparticipationhandler",{"2":{"692":1,"693":1},"3":{"690":1,"692":1,"693":1,"1199":2,"1203":1,"1207":2,"1271":2,"1286":3,"1396":15,"1496":1}}],["setauthenticationstate",{"3":{"1436":3}}],["setactionsasync",{"3":{"1416":2}}],["setavatarasync",{"3":{"1415":2}}],["setavatarurl",{"3":{"1415":3}}],["seta",{"3":{"1359":1}}],["setapplicationname",{"3":{"665":1,"1339":1}}],["setasync",{"3":{"243":1,"733":2,"1270":2,"1300":1,"1301":17,"1311":2,"1324":2,"1416":1,"1417":12}}],["setunreadcount",{"3":{"1324":4}}],["setuserrolesrequestvalidator",{"2":{"1297":1},"3":{"1199":1,"1203":1,"1207":1,"1297":1,"1300":4}}],["setuserrolesrequest",{"3":{"1199":6,"1203":1,"1207":1,"1297":1,"1300":2,"1311":1,"1324":3,"1496":1}}],["setuser",{"3":{"954":1,"1432":1,"1436":3,"1488":1}}],["setuseravatarcommandmarkertests",{"3":{"1199":1,"1207":2}}],["setuseravatarcommandvalidator",{"3":{"1199":1,"1203":1,"1207":2,"1415":8}}],["setuseravatarcommand",{"2":{"1264":1},"3":{"1199":7,"1203":1,"1207":2,"1264":2,"1411":2,"1415":9}}],["setuseravatarhandlertests",{"3":{"1199":1,"1207":2,"1415":1}}],["setuseravatarhandler",{"2":{"1526":1,"2127":1},"3":{"444":2,"926":1,"1199":3,"1203":1,"1207":2,"1270":3,"1286":9,"1323":4,"1411":2,"1415":19,"1496":1,"1526":1,"2127":2}}],["setuseravatar",{"3":{"444":2,"926":1,"1203":3,"1207":10,"1264":1,"1270":1,"1286":1,"1411":1,"1415":8,"1436":1,"1496":2}}],["setupdefaultroles",{"3":{"1436":1}}],["setupdefaultclient",{"3":{"1436":1}}],["setuproles",{"3":{"1436":1}}],["setups",{"3":{"1369":1}}],["setuppublicroomfilter",{"3":{"1359":1}}],["setup",{"0":{"1472":1},"3":{"0":1,"61":1,"140":1,"373":1,"402":1,"448":1,"619":1,"749":1,"953":1,"954":1,"955":2,"1247":2,"1286":1,"1300":2,"1309":1,"1311":3,"1324":2,"1396":1,"1406":1,"1415":1,"1417":3,"1427":1,"1429":1,"1431":1,"1432":1,"1436":15,"1453":3,"1454":1,"1455":3,"1456":1,"1471":1,"1472":20,"1475":1,"1482":1,"1483":2,"1488":2,"1565":1,"1570":1,"1577":1,"1686":1,"1751":1,"2129":1,"2131":1,"2139":1,"2142":1,"2154":1}}],["settag",{"3":{"1427":1}}],["settable",{"3":{"382":1,"881":1,"954":1,"1259":1,"1270":1,"1286":2,"1300":1,"1311":1,"1323":1,"1324":3,"1339":1,"1359":3,"1380":1,"1396":1,"1402":2,"1436":8,"1891":1,"1949":1}}],["settling",{"3":{"831":1}}],["settleasync",{"3":{"1436":1}}],["settleselector",{"3":{"1436":2}}],["settles",{"3":{"350":1,"639":1,"904":1,"1323":4,"1339":1,"1355":1,"1359":1,"1395":1,"1398":1,"1415":2,"1433":1,"1436":4,"1488":2,"1686":1}}],["settled",{"3":{"175":1,"325":1,"732":1,"906":1,"1300":2,"1311":1,"1337":1,"1339":4,"1359":1,"1395":2,"1402":2,"1427":1,"1433":1,"1436":1,"1453":1,"1455":1,"1488":1,"1828":1,"1926":1,"2143":1}}],["settle",{"3":{"160":1,"716":1,"1004":1,"1190":1,"1247":1,"1436":6,"1484":1,"1686":1,"1924":1}}],["settextasync",{"3":{"1417":5}}],["settenant",{"2":{"698":1},"3":{"698":4,"1270":3,"1286":3,"1311":2,"1317":1,"1323":3}}],["setter",{"3":{"265":1,"341":1,"342":1,"674":1,"675":1,"698":1,"883":1,"963":1,"1168":4,"1169":2,"1170":3,"1237":1,"1247":1,"1270":1,"1274":1,"1286":2,"1311":2,"1323":4,"1324":8,"1342":4,"1343":2,"1350":14,"1359":4,"1395":1,"1396":4,"1402":3,"1405":1,"1415":3,"1417":1,"1431":1,"1436":13,"1809":1,"1844":1,"1871":1,"2072":1,"2087":1,"2164":1}}],["setters",{"3":{"0":2,"265":1,"962":1,"1167":1,"1168":3,"1212":1,"1229":1,"1231":1,"1237":4,"1242":1,"1274":1,"1278":1,"1286":2,"1309":2,"1324":2,"1350":5,"1359":3,"1396":2,"1402":3,"1436":10,"1488":1,"1489":1,"1526":2,"1535":1,"1541":1,"1591":1,"1808":2,"1810":2,"1811":1,"1812":1,"1988":1,"2090":1}}],["settokensasync",{"2":{"423":1,"426":1,"428":1,"430":1,"505":1,"512":1,"514":1},"3":{"423":1,"426":1,"428":1,"430":1,"505":1,"507":1,"511":1,"512":3,"514":1,"1324":8,"1417":2,"1436":2}}],["setting",{"3":{"0":1,"20":1,"24":2,"32":1,"73":1,"100":1,"142":1,"145":1,"178":2,"186":1,"193":1,"195":2,"200":1,"201":2,"274":1,"290":1,"291":1,"296":1,"337":1,"403":1,"418":1,"422":1,"423":1,"499":1,"599":1,"640":1,"673":1,"719":2,"740":1,"741":3,"750":1,"776":1,"819":2,"820":1,"821":1,"827":1,"828":1,"831":1,"832":1,"837":1,"838":2,"882":1,"905":1,"907":1,"922":1,"931":3,"933":1,"935":1,"1107":1,"1108":2,"1112":1,"1118":1,"1175":1,"1178":1,"1229":1,"1232":1,"1237":2,"1256":2,"1259":5,"1267":1,"1270":2,"1273":2,"1280":1,"1286":20,"1292":1,"1300":6,"1301":6,"1309":3,"1311":4,"1312":2,"1323":8,"1324":9,"1326":1,"1335":1,"1339":10,"1350":2,"1359":1,"1395":3,"1396":9,"1402":1,"1416":1,"1417":7,"1422":1,"1427":2,"1436":8,"1438":1,"1440":1,"1441":2,"1442":1,"1444":1,"1453":1,"1455":2,"1465":4,"1466":1,"1467":12,"1470":1,"1490":1,"1492":1,"1526":1,"1591":1,"1627":1,"1701":1,"1721":1,"1767":1,"1769":1,"1843":2,"1845":1,"1871":1,"1904":1,"1929":1,"2000":1,"2001":1,"2011":1,"2020":1,"2057":1,"2074":1,"2131":1,"2149":2,"2203":1,"2232":1}}],["settingstests",{"3":{"1207":6,"1323":2}}],["settings",{"0":{"1320":1},"2":{"130":1,"201":1,"819":1,"1994":2},"3":{"0":11,"22":1,"24":2,"59":1,"73":1,"74":1,"130":1,"135":3,"139":3,"178":1,"186":2,"190":1,"193":1,"200":1,"201":1,"217":1,"243":1,"281":1,"318":2,"330":1,"337":1,"403":1,"530":1,"539":1,"583":2,"586":1,"633":1,"640":1,"641":1,"649":2,"650":1,"672":2,"673":1,"674":5,"675":2,"676":2,"696":1,"701":1,"707":3,"710":1,"713":1,"715":3,"727":1,"733":1,"741":2,"742":1,"743":1,"819":2,"827":6,"829":2,"831":1,"832":2,"834":1,"838":1,"840":1,"905":2,"907":1,"909":1,"914":1,"932":1,"946":1,"954":1,"980":1,"1004":1,"1034":1,"1042":1,"1045":1,"1107":1,"1112":1,"1116":1,"1119":1,"1127":1,"1175":3,"1177":3,"1178":2,"1179":1,"1184":4,"1189":1,"1192":5,"1202":2,"1203":13,"1207":48,"1212":2,"1259":7,"1267":1,"1270":4,"1272":1,"1273":1,"1276":2,"1279":1,"1284":1,"1286":64,"1287":1,"1288":3,"1290":1,"1294":1,"1295":1,"1300":33,"1301":16,"1302":1,"1309":6,"1311":38,"1313":2,"1316":1,"1320":9,"1323":50,"1324":45,"1326":1,"1327":1,"1335":1,"1337":1,"1338":2,"1339":61,"1359":11,"1366":1,"1379":1,"1380":1,"1396":16,"1415":2,"1416":7,"1417":19,"1418":1,"1419":1,"1427":17,"1429":3,"1436":15,"1437":1,"1438":7,"1442":1,"1443":2,"1444":1,"1455":1,"1456":1,"1466":1,"1467":2,"1474":1,"1476":1,"1484":1,"1487":2,"1488":2,"1496":13,"1526":1,"1577":2,"1582":1,"1626":2,"1627":1,"1661":1,"1666":1,"1670":2,"1675":1,"1708":1,"1734":1,"1748":1,"1765":1,"1825":1,"1842":1,"1881":1,"1983":1,"1994":2,"2000":1,"2002":1,"2012":5,"2014":1,"2024":2,"2027":1,"2028":1,"2153":1,"2167":1,"2173":1,"2180":1,"2188":1,"2196":1,"2198":1,"2202":1,"2203":1,"2232":1}}],["setsharedenvironment",{"3":{"1436":1}}],["setsessioncategoryitems",{"3":{"1359":1}}],["setsessionquestionanswers",{"3":{"1359":1}}],["setsessionspeakers",{"3":{"1359":1}}],["setsession",{"3":{"1350":4,"1359":4}}],["setscrollposition",{"3":{"1324":1}}],["setspeaker",{"3":{"1350":3,"1359":1}}],["setspeakerquestionanswers",{"3":{"1350":1,"1359":2}}],["setspeakercategoryitems",{"3":{"1310":1,"1350":1,"1359":2}}],["setsproperty",{"2":{"1844":1},"3":{"1286":4,"1844":1}}],["setsvaluegeneratednever",{"3":{"1286":1}}],["setstatus",{"3":{"1395":1,"1402":1}}],["setstablenameandkey",{"3":{"1286":1}}],["setstoredpermissionsasync",{"2":{"2200":1,"2203":1},"3":{"1059":1,"1300":6,"1311":1,"1324":4,"2200":1,"2203":1}}],["setsrequiredmembers",{"3":{"1229":3}}],["sets",{"3":{"0":4,"17":1,"24":1,"31":2,"38":1,"43":1,"59":1,"72":1,"74":1,"94":1,"178":1,"189":1,"202":1,"243":1,"263":1,"265":3,"296":1,"305":1,"311":1,"341":1,"342":1,"370":1,"397":4,"399":1,"446":1,"448":2,"458":1,"499":1,"507":2,"528":1,"557":1,"562":1,"564":1,"578":1,"601":1,"611":1,"617":1,"626":2,"640":4,"650":1,"657":1,"660":1,"698":1,"702":1,"705":1,"707":1,"715":1,"733":1,"736":1,"740":2,"741":1,"755":1,"757":1,"764":2,"767":1,"810":1,"819":1,"826":1,"827":2,"854":1,"863":1,"881":2,"888":1,"905":1,"907":1,"916":1,"926":1,"931":1,"933":2,"954":1,"963":1,"979":1,"1004":2,"1018":2,"1042":1,"1083":1,"1124":1,"1134":1,"1140":1,"1160":1,"1162":1,"1184":2,"1212":2,"1213":1,"1229":2,"1231":1,"1237":2,"1239":1,"1242":1,"1247":4,"1257":1,"1259":7,"1271":6,"1274":1,"1275":1,"1286":24,"1288":1,"1290":1,"1295":1,"1300":13,"1301":5,"1309":6,"1311":34,"1312":2,"1323":15,"1324":51,"1326":1,"1327":1,"1336":1,"1339":24,"1349":1,"1350":10,"1352":1,"1359":55,"1364":1,"1369":8,"1379":1,"1380":3,"1395":23,"1396":24,"1402":8,"1412":1,"1415":15,"1416":6,"1417":10,"1427":1,"1429":1,"1430":1,"1431":1,"1432":1,"1436":33,"1441":6,"1443":6,"1444":1,"1445":1,"1447":1,"1449":1,"1453":2,"1454":2,"1455":3,"1459":2,"1464":2,"1467":3,"1475":1,"1476":2,"1484":1,"1488":3,"1489":1,"1490":1,"1491":1,"1492":1,"1496":3,"1524":1,"1526":2,"1531":1,"1535":1,"1549":1,"1560":1,"1577":1,"1591":1,"1596":2,"1611":1,"1627":1,"1630":1,"1640":1,"1641":5,"1649":1,"1668":1,"1678":1,"1708":1,"1748":1,"1749":2,"1754":1,"1765":2,"1810":1,"1811":1,"1830":1,"1861":1,"1871":1,"1898":1,"1910":1,"1933":1,"1970":1,"1993":1,"2001":1,"2008":2,"2009":1,"2010":2,"2071":1,"2077":1,"2083":2,"2126":1,"2131":2,"2138":1,"2156":1,"2159":1,"2164":1,"2167":1,"2186":1,"2193":1}}],["set",{"0":{"1235":1,"1650":1,"1678":1,"1896":1,"2075":1,"2078":1},"2":{"764":1,"1135":1,"1136":1,"1912":1,"1924":1},"3":{"0":24,"17":1,"19":2,"24":2,"25":1,"26":2,"31":2,"32":1,"33":3,"39":3,"41":1,"45":1,"68":2,"79":1,"81":1,"82":1,"90":1,"94":1,"95":2,"98":3,"109":1,"121":1,"122":1,"135":1,"139":1,"142":2,"145":5,"146":1,"147":2,"149":2,"157":1,"164":1,"166":1,"167":1,"173":1,"175":1,"177":1,"178":1,"180":1,"181":2,"186":4,"189":1,"195":2,"200":1,"202":1,"215":1,"243":2,"245":1,"248":2,"259":1,"261":1,"265":8,"273":1,"291":2,"317":1,"318":1,"330":2,"332":1,"335":4,"337":2,"349":1,"350":1,"351":1,"352":1,"370":2,"386":3,"388":1,"392":1,"397":2,"402":1,"411":1,"412":1,"415":1,"424":1,"441":1,"448":2,"452":2,"461":1,"493":1,"494":1,"498":1,"499":3,"500":1,"507":2,"509":1,"514":1,"526":2,"528":2,"532":1,"549":2,"551":1,"554":2,"556":4,"564":1,"566":1,"567":1,"571":1,"572":1,"574":1,"576":1,"578":1,"584":2,"585":2,"592":1,"595":1,"598":1,"599":4,"601":1,"602":1,"612":1,"616":1,"618":2,"619":1,"632":1,"633":2,"640":1,"641":1,"642":1,"644":1,"650":1,"652":1,"655":1,"656":1,"657":1,"659":1,"668":2,"674":2,"689":1,"690":1,"697":1,"698":2,"702":1,"703":1,"707":2,"711":1,"715":1,"725":1,"727":1,"733":4,"749":3,"757":1,"764":2,"766":3,"780":2,"790":2,"809":1,"827":2,"832":1,"833":2,"837":3,"857":1,"859":1,"861":3,"863":1,"864":1,"869":1,"873":1,"875":2,"876":1,"881":4,"884":2,"897":3,"900":2,"903":1,"905":1,"907":2,"914":1,"924":1,"926":3,"929":1,"933":1,"937":1,"938":1,"939":2,"940":3,"941":1,"942":1,"948":1,"953":3,"963":4,"964":5,"965":4,"966":3,"973":1,"974":1,"980":1,"981":1,"988":1,"996":1,"998":2,"999":1,"1006":1,"1020":1,"1033":1,"1034":1,"1036":1,"1042":2,"1043":2,"1050":1,"1058":1,"1059":4,"1060":1,"1067":3,"1079":1,"1082":1,"1090":2,"1095":1,"1107":1,"1108":1,"1116":2,"1124":3,"1133":2,"1135":1,"1136":1,"1150":1,"1163":1,"1168":1,"1175":1,"1184":1,"1196":1,"1212":6,"1214":1,"1229":7,"1234":1,"1235":1,"1237":17,"1241":7,"1242":5,"1243":3,"1247":37,"1252":1,"1254":1,"1256":1,"1259":23,"1261":1,"1264":2,"1265":2,"1266":1,"1270":21,"1271":8,"1273":3,"1274":1,"1275":2,"1276":1,"1278":1,"1279":2,"1280":1,"1283":2,"1286":112,"1287":1,"1288":1,"1290":1,"1293":2,"1296":1,"1297":2,"1298":1,"1300":94,"1301":12,"1302":1,"1304":1,"1309":20,"1310":6,"1311":58,"1312":6,"1316":1,"1317":1,"1318":2,"1320":2,"1322":2,"1323":49,"1324":108,"1325":1,"1326":2,"1328":1,"1338":1,"1339":34,"1342":1,"1343":1,"1348":1,"1349":1,"1350":37,"1353":5,"1355":1,"1357":1,"1358":2,"1359":172,"1362":2,"1364":2,"1369":10,"1377":1,"1380":7,"1384":2,"1385":1,"1387":1,"1388":1,"1390":1,"1391":1,"1395":64,"1396":73,"1401":3,"1402":40,"1405":2,"1408":2,"1409":2,"1412":2,"1413":2,"1414":1,"1415":58,"1416":4,"1417":19,"1421":1,"1422":1,"1427":9,"1430":1,"1431":2,"1432":1,"1433":1,"1436":143,"1437":1,"1438":12,"1440":1,"1441":3,"1442":1,"1443":1,"1444":1,"1445":1,"1446":1,"1450":1,"1453":3,"1454":2,"1455":8,"1456":2,"1458":1,"1459":6,"1460":3,"1461":1,"1465":2,"1467":18,"1470":3,"1472":1,"1475":2,"1477":5,"1479":1,"1480":1,"1481":1,"1487":1,"1488":3,"1489":2,"1490":2,"1492":1,"1496":9,"1504":1,"1509":1,"1525":1,"1526":8,"1534":5,"1535":1,"1560":1,"1571":1,"1575":1,"1577":8,"1591":4,"1596":4,"1599":1,"1611":1,"1613":1,"1630":8,"1631":12,"1632":3,"1633":1,"1635":1,"1637":1,"1638":3,"1639":1,"1640":2,"1641":5,"1646":1,"1648":2,"1650":3,"1651":1,"1653":1,"1655":1,"1659":1,"1662":1,"1664":1,"1666":1,"1667":3,"1668":3,"1670":1,"1671":1,"1673":1,"1674":1,"1676":1,"1677":5,"1678":1,"1679":1,"1684":1,"1686":2,"1692":1,"1693":1,"1695":2,"1699":1,"1703":1,"1724":1,"1727":2,"1735":1,"1736":1,"1737":1,"1742":2,"1746":3,"1748":3,"1749":3,"1765":3,"1767":1,"1768":3,"1780":1,"1781":1,"1802":2,"1803":1,"1808":2,"1810":2,"1820":1,"1823":1,"1828":1,"1841":1,"1844":4,"1845":1,"1850":1,"1861":1,"1863":1,"1877":1,"1895":4,"1896":2,"1898":1,"1899":3,"1909":1,"1912":2,"1916":1,"1920":1,"1922":1,"1924":1,"1932":1,"1933":1,"1955":1,"1962":3,"1963":1,"1975":4,"1977":1,"1979":1,"1983":1,"1984":1,"1985":1,"1988":3,"1990":1,"1994":2,"2002":1,"2005":1,"2008":1,"2010":2,"2012":1,"2027":2,"2029":1,"2042":1,"2045":1,"2057":1,"2065":2,"2073":1,"2078":1,"2079":2,"2080":1,"2083":3,"2085":2,"2090":1,"2098":1,"2106":1,"2107":3,"2116":1,"2119":1,"2123":1,"2127":1,"2129":1,"2147":1,"2149":2,"2153":2,"2156":5,"2157":1,"2160":2,"2164":1,"2166":2,"2174":1,"2180":1,"2186":1,"2188":1,"2196":1,"2197":1,"2199":2,"2200":1,"2214":1,"2227":1,"2232":1}}],["securely",{"3":{"1764":1}}],["secure",{"2":{"601":1,"1107":1,"1108":1,"1111":1,"1468":1},"3":{"0":1,"29":1,"215":1,"506":1,"507":1,"508":1,"601":1,"1107":1,"1108":2,"1109":1,"1111":1,"1183":1,"1298":1,"1300":5,"1311":4,"1320":2,"1323":2,"1324":1,"1339":1,"1416":2,"1417":7,"1438":1,"1455":1,"1466":1,"1467":4,"1468":1,"1469":1,"1586":1,"1641":3,"1660":1,"1669":1,"1900":1}}],["securestorage",{"2":{"509":1,"511":1,"513":1},"3":{"0":2,"507":3,"508":1,"509":2,"510":1,"511":3,"513":1,"1184":1,"1187":1,"1212":1,"1324":7,"1416":2,"1417":5,"1639":1,"1641":6,"2232":1}}],["securitytokenexception",{"3":{"1300":1}}],["securitykey",{"3":{"1300":2}}],["securityalgorithms",{"3":{"1300":3,"1436":1}}],["securityheadersextensions",{"3":{"1199":1,"1203":1,"1207":1,"1336":1,"1339":4,"1443":1}}],["securityheaderstestsbase",{"2":{"218":1},"3":{"218":2,"572":5,"1199":3,"1207":2,"1339":1,"1428":1,"1436":10,"1438":1,"1488":3,"1493":1,"1496":1,"2055":1}}],["securityheaderstests",{"2":{"2151":1},"3":{"217":1,"218":2,"572":4,"575":1,"1199":2,"1207":4,"1436":4,"1437":1,"1438":2,"1487":2,"1488":1,"1535":1,"2151":1}}],["securityheaders",{"3":{"214":2,"216":3,"217":1,"219":1,"220":1,"674":1,"980":1,"1108":1,"1207":7,"1208":2,"1336":2,"1339":28,"1443":6,"1450":1,"1496":1,"1526":1,"1577":1,"1585":1,"1586":1,"2011":1,"2149":8,"2152":3}}],["securityheadersmiddleware",{"2":{"214":1,"217":1,"2011":1,"2149":1,"2153":1},"3":{"214":1,"217":1,"1199":3,"1203":1,"1207":1,"1324":3,"1336":1,"1339":12,"1416":1,"1436":1,"1438":1,"1443":1,"1496":2,"2011":1,"2149":1,"2153":1}}],["securityheadersmiddlewaretests",{"2":{"214":1,"2151":1},"3":{"214":1,"1199":1,"1207":4,"1339":5,"1577":1,"1586":1,"2151":1}}],["securityheaderssettings",{"2":{"0":1,"214":2,"216":1,"217":1,"1339":1,"1577":1,"2149":1},"3":{"0":1,"214":2,"216":1,"217":1,"674":1,"1199":5,"1203":1,"1207":1,"1336":1,"1339":7,"1577":1,"2149":2}}],["security",{"0":{"1336":1,"1548":1,"1563":1},"1":{"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"2147":1,"2148":1,"2149":1,"2150":1,"2151":1,"2152":1,"2153":1},"2":{"214":1,"665":1,"1335":1,"1423":1,"1674":1,"2149":1},"3":{"0":4,"23":1,"25":1,"59":1,"103":1,"177":1,"179":1,"207":2,"211":1,"213":2,"214":4,"216":2,"217":3,"218":1,"219":7,"220":1,"221":1,"228":1,"246":1,"283":1,"284":1,"311":1,"312":1,"313":2,"333":1,"344":1,"353":1,"358":2,"362":2,"369":2,"373":1,"375":1,"376":3,"395":1,"403":1,"419":1,"440":1,"509":1,"563":1,"572":4,"573":1,"574":2,"575":1,"602":1,"607":1,"612":2,"617":1,"665":1,"674":1,"676":1,"684":1,"718":1,"751":2,"752":1,"773":1,"778":1,"793":1,"810":1,"825":1,"826":2,"827":2,"830":1,"837":1,"854":1,"873":1,"946":2,"948":1,"950":2,"980":1,"1011":1,"1075":1,"1077":1,"1108":3,"1115":1,"1117":3,"1186":1,"1189":1,"1192":2,"1202":2,"1203":13,"1207":44,"1208":2,"1212":2,"1216":2,"1228":1,"1229":2,"1236":1,"1237":5,"1239":1,"1241":3,"1247":14,"1253":1,"1259":1,"1263":1,"1270":13,"1271":6,"1273":1,"1276":1,"1283":1,"1284":1,"1285":1,"1286":36,"1287":2,"1290":2,"1292":1,"1297":1,"1300":118,"1301":6,"1304":1,"1305":1,"1306":1,"1307":1,"1308":1,"1309":24,"1311":39,"1312":3,"1318":1,"1320":2,"1322":1,"1323":39,"1324":89,"1325":1,"1335":1,"1336":5,"1337":1,"1338":2,"1339":69,"1347":2,"1348":1,"1350":12,"1353":2,"1355":2,"1357":1,"1359":82,"1365":1,"1366":1,"1369":3,"1372":1,"1373":1,"1380":20,"1384":1,"1388":1,"1389":1,"1391":2,"1395":49,"1396":65,"1402":39,"1403":1,"1406":1,"1407":1,"1409":1,"1411":1,"1415":60,"1416":10,"1417":50,"1419":1,"1421":1,"1422":1,"1423":1,"1427":9,"1429":1,"1436":59,"1437":4,"1438":4,"1441":1,"1442":1,"1443":5,"1450":1,"1454":2,"1455":3,"1456":1,"1459":1,"1461":1,"1465":6,"1466":1,"1467":8,"1469":1,"1472":2,"1474":1,"1475":1,"1477":1,"1483":1,"1487":2,"1488":5,"1492":2,"1493":1,"1496":5,"1499":2,"1525":1,"1526":7,"1530":2,"1531":1,"1532":1,"1534":1,"1535":2,"1548":1,"1552":1,"1554":2,"1562":1,"1563":2,"1575":3,"1576":1,"1577":9,"1581":2,"1582":2,"1583":1,"1585":3,"1586":6,"1588":2,"1590":1,"1591":3,"1595":3,"1596":3,"1597":1,"1600":1,"1627":1,"1639":1,"1641":1,"1660":1,"1667":1,"1670":2,"1671":1,"1673":1,"1674":1,"1675":1,"1769":1,"1779":2,"1796":2,"1801":1,"1814":1,"1815":1,"1817":1,"1829":1,"1899":1,"1903":2,"1904":1,"1905":2,"1908":1,"1933":1,"1937":1,"1940":1,"1965":2,"1966":1,"1968":1,"1972":1,"1979":1,"1983":1,"1985":1,"1993":1,"1997":1,"2000":1,"2001":2,"2002":2,"2011":4,"2045":1,"2055":2,"2075":1,"2078":1,"2126":3,"2128":2,"2143":1,"2146":2,"2147":3,"2148":3,"2149":4,"2150":3,"2153":5,"2160":1,"2195":1,"2199":1,"2203":1,"2208":1,"2219":2,"2220":3,"2232":2}}],["sec",{"3":{"0":2,"25":1,"42":2,"103":1,"123":2,"179":2,"189":2,"198":1,"207":1,"209":1,"217":2,"246":3,"284":3,"333":5,"344":1,"353":2,"373":7,"384":3,"403":6,"427":2,"442":1,"602":4,"612":2,"643":3,"718":3,"747":1,"749":1,"793":4,"830":4,"831":1,"873":7,"876":1,"908":1,"920":1,"921":1,"1184":1,"1247":19,"1270":3,"1286":3,"1298":1,"1300":4,"1301":3,"1309":3,"1311":5,"1323":11,"1324":3,"1339":6,"1355":1,"1359":2,"1402":1,"1415":3,"1416":3,"1417":6,"1436":5,"1438":1,"1447":1,"1453":1,"1467":4,"1496":1,"1534":1,"1969":2,"1971":1,"1972":1,"2000":2}}],["sectionheading",{"2":{"1687":1}}],["sectioned",{"3":{"1201":1,"1203":2,"1496":40,"1497":2,"1500":1}}],["sectionname",{"2":{"728":1,"1447":1,"2000":1},"3":{"674":2,"725":1,"728":1,"1259":3,"1286":7,"1300":9,"1301":4,"1309":1,"1311":4,"1320":2,"1323":17,"1324":11,"1339":5,"1396":2,"1415":7,"1427":3,"1447":1}}],["sections",{"0":{"1209":1},"3":{"0":3,"27":3,"74":2,"104":1,"128":1,"203":1,"231":1,"256":1,"259":1,"337":1,"375":2,"393":1,"409":1,"418":1,"429":1,"463":1,"540":1,"552":2,"604":1,"607":1,"609":3,"611":2,"612":1,"613":1,"649":1,"672":2,"673":1,"674":8,"675":1,"676":2,"677":1,"725":8,"726":1,"727":3,"728":1,"731":1,"794":1,"832":1,"833":2,"877":1,"909":1,"927":1,"960":1,"976":1,"980":1,"995":1,"1021":1,"1068":1,"1095":1,"1124":1,"1125":1,"1128":1,"1191":1,"1194":1,"1210":1,"1211":1,"1212":1,"1213":1,"1229":1,"1279":1,"1286":4,"1300":3,"1310":1,"1311":4,"1313":4,"1316":1,"1320":3,"1322":1,"1323":8,"1324":11,"1339":2,"1340":1,"1343":2,"1359":1,"1395":7,"1401":1,"1402":2,"1403":1,"1404":1,"1406":1,"1415":9,"1427":1,"1436":4,"1437":1,"1438":2,"1451":1,"1452":1,"1467":1,"1476":4,"1481":1,"1487":1,"1489":1,"1496":77,"1497":4,"1498":2,"1500":1,"1523":1,"1526":1,"1577":1,"1626":1,"2012":4,"2046":1,"2060":1,"2067":1,"2232":1}}],["section",{"0":{"136":1,"1193":1},"2":{"1418":1,"1423":1,"1426":1},"3":{"0":21,"59":1,"72":1,"76":1,"94":1,"95":1,"96":1,"97":1,"109":1,"130":3,"135":1,"137":2,"139":2,"145":1,"159":1,"161":1,"166":3,"173":1,"178":3,"180":3,"214":2,"215":1,"216":1,"219":1,"225":2,"243":1,"255":1,"281":1,"286":1,"298":1,"300":1,"350":1,"375":1,"395":4,"397":1,"400":1,"407":1,"408":1,"409":1,"418":1,"423":3,"426":1,"428":2,"429":2,"432":1,"434":2,"440":1,"475":1,"476":1,"477":1,"482":1,"484":1,"490":1,"511":1,"526":1,"543":1,"583":1,"584":1,"585":4,"586":1,"590":1,"607":6,"608":1,"609":6,"610":1,"611":2,"617":1,"633":1,"640":1,"651":1,"652":1,"673":1,"674":13,"675":1,"676":5,"678":1,"690":2,"696":1,"698":1,"702":1,"707":3,"715":2,"723":1,"725":8,"726":2,"727":5,"728":2,"729":1,"731":1,"733":2,"798":1,"800":1,"819":1,"821":1,"827":5,"829":1,"832":3,"836":1,"837":1,"838":2,"839":1,"841":1,"845":1,"849":1,"854":1,"860":2,"865":1,"896":1,"901":1,"915":3,"931":1,"933":1,"971":1,"972":1,"976":1,"996":5,"997":1,"998":2,"1003":1,"1006":1,"1007":2,"1010":5,"1012":2,"1014":2,"1017":1,"1018":1,"1022":1,"1034":2,"1058":1,"1059":1,"1062":1,"1073":1,"1078":1,"1079":2,"1089":1,"1090":2,"1091":2,"1094":2,"1095":1,"1096":1,"1124":3,"1184":1,"1188":1,"1193":3,"1194":1,"1212":8,"1214":1,"1216":1,"1229":1,"1237":2,"1247":6,"1259":37,"1260":1,"1264":1,"1270":6,"1271":1,"1273":2,"1275":1,"1276":1,"1277":1,"1278":1,"1279":5,"1280":1,"1286":43,"1289":1,"1294":1,"1297":1,"1299":3,"1300":28,"1301":18,"1307":1,"1309":16,"1310":3,"1311":21,"1312":2,"1316":1,"1320":12,"1322":1,"1323":89,"1324":65,"1326":2,"1332":2,"1336":2,"1337":1,"1338":4,"1339":38,"1350":6,"1352":1,"1355":1,"1359":4,"1366":1,"1368":1,"1369":11,"1389":1,"1392":1,"1395":31,"1396":38,"1402":8,"1410":2,"1414":3,"1415":31,"1416":3,"1417":2,"1418":4,"1419":4,"1420":1,"1421":3,"1422":4,"1423":2,"1424":1,"1425":1,"1426":1,"1427":13,"1428":1,"1431":2,"1435":1,"1436":36,"1438":10,"1440":1,"1441":1,"1442":2,"1443":2,"1444":3,"1447":2,"1452":1,"1460":2,"1463":1,"1465":1,"1467":15,"1470":1,"1471":1,"1472":1,"1473":1,"1474":2,"1476":5,"1478":1,"1481":4,"1485":1,"1486":3,"1487":8,"1488":8,"1489":2,"1490":1,"1494":2,"1496":51,"1497":3,"1498":1,"1500":2,"1526":3,"1532":1,"1575":2,"1577":2,"1589":1,"1591":3,"1596":2,"1600":1,"1602":2,"1625":1,"1627":2,"1630":4,"1631":9,"1632":7,"1635":1,"1638":3,"1639":4,"1640":1,"1641":4,"1651":1,"1652":1,"1656":4,"1666":1,"1667":1,"1668":1,"1669":1,"1670":2,"1672":3,"1673":1,"1675":1,"1683":1,"1684":2,"1708":3,"1722":1,"1726":1,"1727":1,"1729":1,"1749":1,"1750":1,"1751":4,"1758":2,"1759":1,"1760":1,"1765":6,"1770":1,"1772":3,"1773":1,"1776":2,"1849":1,"1882":1,"1895":1,"1902":1,"1908":1,"1909":1,"1916":1,"1919":1,"1921":1,"1933":1,"1936":1,"1940":1,"1975":1,"1992":1,"2000":1,"2001":2,"2002":1,"2011":2,"2012":4,"2013":1,"2014":2,"2024":1,"2027":1,"2041":1,"2046":3,"2049":3,"2055":1,"2060":1,"2063":1,"2067":7,"2094":1,"2114":1,"2126":2,"2127":1,"2136":1,"2138":1,"2149":1,"2150":1,"2152":1,"2158":2,"2167":1,"2173":2,"2180":1,"2186":1,"2195":1,"2232":6}}],["secretbytelength",{"3":{"1300":2}}],["secretkey",{"2":{"792":1,"2166":1},"3":{"790":1,"792":1,"1770":1,"2166":1}}],["secretmissing",{"3":{"790":1}}],["secretforkey",{"3":{"31":1,"674":1,"1300":3}}],["secretref",{"3":{"0":1,"599":2,"640":1,"1212":1,"1467":11,"1496":1,"1577":1}}],["secrets",{"0":{"1335":1},"2":{"598":1,"601":1,"869":1,"875":1,"1339":1,"1455":1},"3":{"0":5,"349":1,"351":1,"359":1,"598":2,"599":6,"600":2,"601":4,"603":1,"758":1,"766":1,"869":2,"875":1,"1012":1,"1059":1,"1066":2,"1212":2,"1286":3,"1300":4,"1311":3,"1323":2,"1324":2,"1326":1,"1335":2,"1339":12,"1415":6,"1417":7,"1419":1,"1427":1,"1436":1,"1441":1,"1442":1,"1445":1,"1454":1,"1455":1,"1456":1,"1459":1,"1460":1,"1462":2,"1466":2,"1467":24,"1468":5,"1469":2,"1470":1,"1472":3,"1474":5,"1475":1,"1477":1,"1484":1,"1526":2,"1535":1,"1548":2,"1554":3,"1563":3,"1570":1,"1572":2,"1577":3,"1586":1,"1591":2,"1663":1,"1670":1,"1770":1,"1945":1,"1974":1,"1975":1,"1979":1,"2068":1,"2128":1,"2142":2,"2146":1,"2198":1,"2230":1}}],["secret",{"1":{"596":1,"597":1,"598":1,"599":1,"600":1,"601":1,"602":1,"603":1,"604":1,"605":1,"1893":1,"1894":1,"1895":1,"1896":1,"1897":1,"1898":1,"1899":1},"2":{"1458":1,"1468":1,"1470":1,"1472":1},"3":{"0":10,"30":4,"31":3,"33":1,"53":1,"72":1,"179":1,"180":1,"217":1,"350":1,"441":1,"500":1,"529":2,"530":2,"535":1,"596":1,"597":2,"598":3,"599":12,"601":5,"604":1,"605":3,"640":2,"644":1,"664":2,"670":1,"673":1,"678":1,"788":1,"789":2,"790":11,"791":3,"792":9,"793":4,"794":6,"827":10,"869":3,"871":2,"872":1,"1017":4,"1020":2,"1212":2,"1288":2,"1293":9,"1300":35,"1311":8,"1312":2,"1322":3,"1323":18,"1324":13,"1335":2,"1337":3,"1339":33,"1396":1,"1406":1,"1416":2,"1417":1,"1419":1,"1423":1,"1427":3,"1441":1,"1442":2,"1445":4,"1447":2,"1450":2,"1454":3,"1455":13,"1458":4,"1461":1,"1466":4,"1467":35,"1468":3,"1469":2,"1470":4,"1472":3,"1473":1,"1481":2,"1486":2,"1492":1,"1526":1,"1554":1,"1585":1,"1586":1,"1589":2,"1591":2,"1595":1,"1596":3,"1597":1,"1667":2,"1670":4,"1770":1,"1786":1,"1790":1,"1892":1,"1893":7,"1894":1,"1895":3,"1897":1,"1898":1,"1899":2,"1901":1,"1902":2,"1904":1,"1905":3,"1973":1,"1975":2,"1980":2,"1981":1,"1985":1,"2009":1,"2012":1,"2021":2,"2024":3,"2028":1,"2111":1,"2125":1,"2127":1,"2142":1,"2149":1,"2161":1,"2166":7,"2167":1,"2169":1,"2175":1,"2198":2,"2208":1,"2230":1,"2232":3}}],["secondfactor",{"3":{"1300":1}}],["secondentityfullname",{"3":{"1286":2}}],["secondjob",{"3":{"1199":2,"1207":1}}],["secondtestrequestvalidator",{"3":{"1199":2,"1207":1}}],["secondarysynced",{"3":{"1359":1}}],["secondarycontrasttext",{"3":{"1324":1}}],["secondarylight",{"3":{"1324":1}}],["secondarydark",{"3":{"1324":1}}],["secondary",{"2":{"2075":1},"3":{"618":1,"1191":1,"1286":1,"1300":1,"1324":12,"1350":1,"1358":1,"1359":1,"1380":1,"1395":1,"1492":1,"1526":5,"1535":1,"1577":1,"1591":1,"1612":1,"1638":1,"2075":2}}],["seconds",{"3":{"0":1,"19":2,"22":2,"23":1,"24":1,"72":2,"73":2,"121":1,"178":1,"233":1,"235":1,"243":3,"245":1,"254":1,"257":1,"379":2,"387":1,"390":3,"392":2,"460":2,"461":2,"463":1,"565":1,"707":1,"709":1,"733":1,"735":1,"818":1,"819":2,"821":2,"827":1,"830":1,"831":1,"833":1,"837":2,"838":2,"869":1,"914":1,"1028":2,"1029":1,"1044":1,"1061":1,"1089":1,"1091":1,"1101":1,"1124":2,"1184":1,"1256":1,"1259":6,"1263":1,"1264":3,"1270":4,"1273":1,"1286":4,"1293":1,"1300":11,"1301":7,"1309":4,"1311":6,"1312":4,"1317":1,"1320":1,"1323":8,"1324":15,"1328":1,"1337":1,"1339":9,"1359":2,"1378":1,"1380":4,"1390":1,"1395":2,"1396":3,"1402":5,"1415":1,"1416":2,"1417":5,"1419":1,"1425":1,"1427":2,"1430":1,"1433":1,"1436":8,"1441":3,"1443":2,"1447":3,"1451":1,"1455":2,"1456":1,"1467":11,"1490":1,"1492":1,"1616":1,"1639":1,"1668":1,"1748":1,"1765":1,"1841":1,"1843":1,"1906":1,"1916":1,"1918":1,"1922":1,"1923":1,"1924":1,"1948":1,"2010":1,"2024":1,"2051":1,"2066":1,"2134":1,"2156":4,"2157":1,"2158":1,"2173":1,"2177":1,"2192":1,"2198":1,"2202":1}}],["second",{"0":{"95":1,"1293":1,"1722":1,"2065":1,"2073":1,"2137":1},"1":{"816":1,"817":1,"818":1,"819":1,"820":1,"821":1,"822":1,"823":1,"1942":1,"1943":1,"1944":1,"1945":1,"1946":1,"1947":1,"1948":1,"1949":1,"1950":1,"2194":1,"2195":1,"2196":1,"2197":1,"2198":1,"2199":1,"2200":1,"2201":1,"2202":1,"2203":1},"3":{"0":34,"15":1,"24":2,"27":1,"31":1,"38":1,"55":1,"70":3,"71":4,"74":1,"91":1,"92":1,"95":1,"100":2,"113":1,"115":1,"122":1,"126":3,"130":1,"136":1,"137":1,"139":2,"150":1,"152":1,"156":1,"157":1,"165":1,"173":1,"178":3,"189":1,"197":1,"199":1,"200":1,"201":2,"214":1,"219":1,"231":1,"233":1,"234":1,"235":4,"237":2,"243":3,"252":1,"254":2,"258":1,"265":2,"279":1,"280":1,"285":1,"292":1,"296":1,"305":1,"324":1,"325":1,"340":1,"341":3,"342":1,"350":2,"351":1,"352":2,"358":1,"374":1,"379":2,"386":1,"387":2,"388":1,"390":1,"391":1,"395":3,"397":1,"404":3,"409":1,"411":1,"412":1,"415":1,"428":1,"436":1,"448":2,"450":2,"457":1,"459":7,"460":1,"461":2,"463":2,"465":5,"466":1,"477":1,"501":2,"505":1,"507":1,"508":1,"513":1,"517":1,"519":1,"524":1,"528":1,"530":1,"531":1,"534":1,"536":1,"538":2,"539":1,"540":1,"543":1,"546":1,"549":1,"551":1,"556":3,"558":1,"564":2,"599":1,"600":1,"609":1,"617":1,"619":1,"624":1,"628":2,"629":1,"631":1,"633":3,"635":2,"638":1,"640":4,"642":1,"649":1,"655":1,"656":1,"657":1,"660":1,"665":2,"673":1,"674":1,"675":2,"676":2,"681":1,"689":1,"690":2,"691":4,"692":1,"697":1,"698":2,"699":1,"700":1,"702":1,"707":3,"709":1,"715":1,"720":1,"728":1,"732":1,"733":4,"734":2,"735":2,"736":2,"737":2,"740":1,"741":3,"742":1,"749":2,"757":3,"758":1,"759":2,"761":1,"784":1,"789":1,"790":1,"792":1,"794":1,"810":1,"811":3,"813":1,"816":1,"818":1,"819":4,"820":1,"821":2,"825":1,"827":8,"828":1,"829":5,"831":1,"832":2,"834":1,"837":2,"849":1,"853":1,"854":2,"855":1,"859":1,"861":1,"881":2,"882":2,"889":1,"891":1,"897":1,"904":1,"905":1,"906":1,"907":1,"914":1,"916":1,"917":1,"926":2,"931":1,"934":1,"946":1,"947":2,"974":1,"988":3,"990":1,"994":1,"995":2,"996":6,"999":1,"1003":1,"1018":1,"1019":1,"1020":2,"1025":1,"1028":1,"1042":2,"1043":2,"1045":1,"1050":1,"1051":2,"1058":1,"1059":1,"1060":1,"1074":1,"1075":1,"1079":1,"1089":2,"1090":2,"1091":1,"1092":1,"1093":1,"1107":1,"1116":3,"1128":1,"1134":1,"1142":1,"1154":2,"1178":1,"1184":1,"1185":1,"1212":5,"1221":1,"1229":4,"1231":1,"1234":1,"1236":2,"1237":18,"1243":1,"1244":2,"1247":12,"1248":1,"1249":2,"1251":1,"1252":1,"1254":2,"1255":1,"1256":1,"1257":1,"1259":15,"1262":1,"1263":3,"1264":3,"1265":3,"1267":1,"1269":1,"1270":36,"1271":4,"1273":3,"1274":3,"1275":5,"1277":1,"1278":3,"1283":1,"1286":72,"1287":2,"1289":3,"1293":5,"1297":1,"1298":2,"1300":67,"1301":17,"1302":1,"1305":1,"1307":4,"1309":26,"1310":4,"1311":31,"1312":10,"1315":1,"1317":2,"1318":1,"1322":1,"1323":38,"1324":78,"1326":1,"1327":2,"1328":1,"1330":9,"1331":1,"1332":1,"1333":2,"1334":2,"1335":1,"1337":1,"1338":7,"1339":55,"1347":1,"1350":22,"1352":1,"1355":2,"1356":1,"1358":2,"1359":103,"1365":1,"1366":1,"1368":1,"1369":11,"1372":2,"1375":2,"1376":1,"1378":2,"1379":2,"1380":16,"1385":1,"1388":1,"1389":2,"1390":3,"1392":2,"1393":2,"1395":43,"1396":79,"1397":1,"1398":1,"1399":1,"1402":15,"1406":1,"1407":1,"1413":1,"1415":39,"1416":13,"1417":17,"1424":1,"1427":4,"1429":1,"1430":3,"1431":1,"1433":2,"1436":96,"1438":10,"1440":1,"1441":5,"1442":3,"1443":2,"1445":1,"1446":2,"1447":4,"1453":2,"1454":1,"1455":10,"1456":1,"1458":1,"1459":2,"1460":1,"1465":5,"1466":1,"1467":17,"1469":1,"1473":1,"1474":1,"1476":3,"1478":2,"1481":1,"1488":3,"1489":2,"1490":1,"1492":5,"1496":8,"1509":1,"1526":3,"1534":2,"1545":1,"1547":1,"1577":4,"1585":1,"1591":3,"1630":2,"1631":3,"1632":1,"1639":2,"1651":1,"1654":1,"1666":1,"1667":1,"1668":2,"1672":1,"1684":2,"1686":2,"1689":1,"1701":2,"1719":1,"1721":2,"1722":2,"1724":1,"1727":4,"1729":2,"1731":4,"1748":1,"1755":1,"1765":2,"1767":1,"1776":1,"1779":2,"1781":1,"1790":1,"1813":1,"1819":1,"1821":3,"1825":1,"1829":1,"1839":1,"1840":4,"1841":1,"1843":2,"1846":1,"1848":1,"1851":1,"1852":1,"1853":1,"1863":1,"1869":1,"1871":1,"1875":1,"1876":2,"1877":2,"1898":3,"1899":1,"1900":2,"1902":1,"1907":1,"1909":3,"1911":1,"1915":1,"1916":2,"1918":2,"1920":2,"1921":1,"1922":2,"1923":2,"1925":1,"1933":3,"1934":1,"1937":1,"1942":6,"1943":1,"1944":1,"1945":2,"1946":1,"1947":1,"1948":2,"1950":3,"1959":1,"1960":1,"1962":1,"1964":1,"1967":3,"1970":3,"1973":1,"1974":1,"1977":1,"1978":1,"1979":3,"1980":1,"1986":1,"1995":1,"1997":1,"2000":2,"2006":3,"2007":1,"2011":1,"2012":2,"2013":1,"2024":4,"2029":1,"2030":4,"2032":4,"2034":1,"2037":1,"2045":2,"2048":1,"2049":1,"2052":1,"2057":1,"2063":1,"2065":1,"2069":2,"2070":1,"2072":1,"2073":1,"2081":1,"2082":1,"2089":1,"2097":1,"2100":1,"2113":1,"2114":1,"2121":1,"2126":1,"2129":4,"2131":1,"2132":2,"2133":1,"2134":1,"2136":1,"2137":1,"2140":2,"2146":1,"2147":1,"2156":2,"2157":3,"2158":1,"2161":1,"2164":2,"2166":1,"2167":2,"2168":2,"2169":1,"2172":1,"2174":1,"2178":1,"2179":1,"2180":1,"2181":2,"2184":1,"2187":1,"2188":1,"2192":1,"2193":2,"2194":4,"2195":1,"2196":2,"2197":3,"2198":1,"2203":2,"2208":3,"2211":1,"2232":5,"2239":1}}],["school",{"3":{"1395":1}}],["schedulable",{"3":{"0":1,"1044":1,"1323":1,"1534":1,"1575":1,"1582":1,"1585":1,"2186":1,"2192":1}}],["scheduling",{"0":{"2185":1},"3":{"0":1,"230":1,"255":1,"444":1,"517":1,"529":1,"536":1,"539":3,"706":1,"707":6,"708":1,"709":2,"710":1,"995":1,"1036":1,"1041":1,"1042":2,"1044":2,"1191":1,"1203":6,"1207":44,"1259":1,"1264":1,"1275":1,"1284":1,"1286":14,"1317":3,"1318":1,"1320":1,"1323":27,"1350":1,"1357":1,"1359":16,"1380":3,"1396":1,"1410":1,"1411":1,"1415":12,"1417":11,"1436":1,"1438":6,"1442":1,"1487":1,"1496":1,"1527":1,"1532":1,"1574":1,"1578":1,"1594":1,"1630":2,"1637":1,"1638":1,"1923":1,"1950":2,"2165":2,"2189":1,"2192":2}}],["scheduleavatarblobdeletionasync",{"3":{"1415":5}}],["scheduleasync",{"2":{"1099":1,"1103":1,"2185":1,"2193":1},"3":{"1042":1,"1099":1,"1103":1,"1286":5,"1323":5,"1359":2,"1376":1,"1380":1,"1396":3,"1415":4,"1417":5,"2185":1,"2189":1,"2193":1}}],["scheduleuploadedblobcleanupasync",{"3":{"1415":1}}],["scheduleerror",{"3":{"1395":7}}],["schedulecachekey",{"3":{"1395":1}}],["scheduleblobcleanupasync",{"3":{"1359":1}}],["scheduleorphancleanupasync",{"3":{"1359":2}}],["schedule",{"2":{"1456":1},"3":{"0":1,"19":1,"23":1,"224":1,"230":1,"404":1,"444":2,"500":1,"511":1,"536":1,"539":2,"591":1,"617":1,"625":1,"627":1,"628":1,"641":1,"689":1,"706":1,"707":7,"708":3,"709":3,"727":1,"860":1,"900":1,"954":2,"1018":2,"1019":1,"1040":2,"1045":1,"1099":1,"1100":1,"1103":1,"1116":2,"1118":1,"1247":1,"1259":2,"1260":1,"1269":1,"1270":5,"1286":3,"1317":1,"1323":25,"1324":3,"1340":1,"1343":1,"1349":1,"1350":12,"1351":1,"1352":1,"1356":1,"1357":1,"1359":31,"1369":6,"1376":2,"1380":11,"1385":1,"1391":5,"1395":59,"1396":21,"1411":1,"1415":3,"1416":2,"1417":12,"1427":1,"1436":2,"1438":8,"1443":1,"1455":1,"1456":7,"1458":1,"1459":1,"1475":1,"1490":3,"1492":2,"1524":1,"1526":1,"1534":2,"1599":3,"1626":3,"1629":4,"1630":2,"1631":4,"1632":6,"1636":1,"1637":4,"1638":1,"1639":1,"1640":4,"1841":1,"1895":1,"1948":6,"2006":1,"2047":1,"2127":1,"2156":1,"2186":2,"2190":1,"2192":1,"2232":2}}],["schedules",{"0":{"1254":1},"3":{"0":2,"440":1,"444":3,"459":1,"466":1,"536":1,"640":1,"644":1,"707":1,"810":1,"814":1,"819":1,"849":1,"897":1,"901":1,"907":1,"1016":1,"1018":1,"1020":1,"1042":1,"1044":1,"1116":1,"1118":1,"1212":1,"1286":1,"1300":1,"1301":1,"1323":7,"1339":1,"1347":1,"1357":1,"1359":9,"1367":1,"1369":2,"1376":1,"1380":4,"1390":1,"1395":4,"1396":5,"1408":1,"1410":1,"1411":2,"1415":14,"1417":5,"1436":2,"1631":1,"1639":1,"1640":1,"1843":1,"1918":1,"2165":1,"2185":1,"2189":2,"2190":1,"2192":1,"2193":2}}],["scheduledon",{"2":{"1045":1},"3":{"1042":1,"1045":1,"1286":4,"1323":2,"2186":1}}],["scheduledjobs",{"3":{"1273":1,"1286":3,"1317":1,"1323":4,"1436":1,"1438":1}}],["scheduledjobrunnertests",{"3":{"1199":1,"1207":2,"1323":2,"1438":1}}],["scheduledjobrunner",{"2":{"995":1,"1043":1},"3":{"707":4,"710":1,"995":2,"996":1,"1043":1,"1199":5,"1203":1,"1207":3,"1269":1,"1270":2,"1286":4,"1313":1,"1317":10,"1323":42,"1438":1,"1442":2,"1496":3}}],["scheduledjoboverridesettings",{"2":{"707":1,"1320":1},"3":{"707":1,"1199":3,"1203":1,"1207":1,"1270":1,"1320":1,"1323":2}}],["scheduledjobentry",{"2":{"995":1,"1036":1,"1041":1},"3":{"0":1,"707":3,"710":1,"995":1,"1041":2,"1199":7,"1203":1,"1207":2,"1212":1,"1270":1,"1273":1,"1286":4,"1317":3,"1323":8}}],["scheduledqueryalertspecs",{"2":{"609":1,"1476":1,"2158":1},"3":{"609":1,"1467":1,"1476":2,"2158":1}}],["scheduledqueryrules",{"2":{"1474":1,"2158":1},"3":{"0":1,"609":1,"1467":1,"1474":1,"1577":1,"2158":1}}],["scheduled",{"3":{"0":4,"24":1,"71":1,"166":1,"229":1,"403":1,"405":1,"440":1,"444":1,"470":1,"534":1,"536":1,"538":1,"539":1,"541":1,"607":1,"609":4,"625":1,"626":1,"709":1,"715":1,"720":1,"767":1,"808":1,"810":1,"813":2,"818":2,"827":1,"897":1,"898":1,"988":1,"1018":2,"1019":1,"1020":1,"1026":1,"1042":1,"1043":1,"1044":3,"1099":1,"1100":1,"1116":2,"1212":4,"1259":2,"1263":1,"1270":5,"1275":1,"1277":1,"1278":1,"1286":17,"1318":1,"1323":17,"1327":1,"1337":1,"1339":5,"1346":1,"1350":3,"1352":1,"1357":2,"1359":14,"1369":1,"1380":7,"1395":1,"1396":14,"1415":9,"1416":2,"1417":5,"1436":4,"1438":1,"1440":1,"1455":4,"1456":2,"1457":1,"1458":1,"1460":5,"1465":5,"1467":9,"1469":1,"1474":3,"1475":6,"1476":1,"1492":1,"1525":2,"1526":5,"1530":1,"1531":3,"1532":2,"1534":6,"1568":1,"1575":3,"1577":1,"1578":1,"1581":2,"1582":1,"1583":2,"1584":1,"1585":7,"1591":3,"1599":2,"1630":3,"1665":1,"1670":1,"1678":1,"1679":1,"1710":1,"1720":1,"1823":1,"1832":1,"1839":1,"2034":1,"2158":2,"2161":1,"2165":1,"2167":2,"2168":2,"2187":1,"2191":1,"2192":4,"2193":1,"2232":2}}],["scheduleretryasync",{"3":{"1286":1}}],["schedulertableenabled",{"3":{"1286":2}}],["schedulertestharness",{"3":{"1199":3,"1207":5,"1323":2}}],["schedulertestcontext",{"3":{"1199":2,"1207":1}}],["schedulermodelgatetests",{"3":{"1191":1,"1199":1,"1207":4,"1286":2,"1323":2,"1438":2,"1496":1}}],["schedulermetricstests",{"3":{"1199":1,"1207":2,"1323":2,"1438":1}}],["schedulermetrics",{"2":{"711":1,"2159":1},"3":{"707":2,"711":1,"1199":3,"1203":1,"1207":2,"1317":5,"1323":12,"1438":1,"1496":1,"2156":1,"2159":1}}],["schedulersettings",{"2":{"707":1,"711":1},"3":{"674":1,"707":4,"711":1,"1199":7,"1203":1,"1207":3,"1270":1,"1286":3,"1313":1,"1317":2,"1320":5,"1323":17}}],["schedulers",{"3":{"0":1,"827":1,"1043":1}}],["scheduler",{"1":{"704":1,"705":1,"706":1,"707":1,"708":1,"709":1,"710":1,"711":1},"2":{"400":1,"408":1,"1317":1,"2006":1,"2013":1,"2160":1},"3":{"0":9,"170":2,"258":1,"400":2,"408":1,"536":2,"539":1,"540":1,"696":1,"704":1,"705":1,"707":9,"708":1,"709":1,"710":1,"711":1,"713":1,"715":2,"716":2,"720":3,"721":1,"897":1,"905":1,"910":2,"994":1,"996":1,"999":1,"1000":1,"1034":1,"1041":1,"1042":1,"1043":1,"1046":1,"1085":1,"1212":1,"1213":1,"1237":1,"1269":1,"1270":8,"1273":1,"1275":1,"1277":2,"1284":1,"1286":23,"1300":1,"1317":5,"1318":2,"1320":1,"1323":37,"1333":3,"1339":1,"1359":3,"1379":1,"1380":1,"1396":2,"1415":1,"1436":1,"1438":3,"1442":2,"1443":2,"1446":1,"1467":6,"1469":1,"1496":2,"1577":1,"1585":1,"1660":1,"1664":4,"1670":1,"1675":1,"1948":1,"1950":1,"2006":3,"2012":1,"2013":1,"2156":7,"2160":1,"2183":1,"2192":1,"2227":1,"2232":1}}],["schemas",{"3":{"0":1,"109":1,"656":1,"1034":1,"1035":1,"1082":1,"1085":1,"1093":1,"1286":1,"1300":2,"1422":1,"1543":1,"2174":1}}],["schemaversionrule",{"3":{"1436":1}}],["schemaversion",{"2":{"78":1,"81":1,"131":1,"256":1,"447":1,"455":1,"844":1,"845":1,"847":1,"1508":1,"1576":1,"1577":1,"1889":1,"1891":1,"1892":1,"2130":1},"3":{"0":2,"78":5,"79":1,"80":2,"81":1,"82":1,"131":1,"255":1,"256":1,"447":1,"455":1,"782":1,"844":1,"845":1,"846":1,"847":1,"1212":1,"1249":3,"1259":7,"1270":2,"1350":1,"1436":19,"1489":1,"1508":1,"1526":3,"1576":1,"1577":2,"1665":1,"1889":5,"1891":3,"1892":1,"2130":1,"2232":2}}],["schema",{"1":{"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"561":1,"562":1,"563":1,"564":1,"565":1,"566":1,"567":1,"568":1,"695":1,"696":1,"697":1,"698":1,"699":1,"700":1,"701":1,"702":1,"703":1,"1887":1,"1888":1,"1889":1,"1890":1,"1891":1,"1892":1},"3":{"0":15,"26":1,"46":1,"48":1,"75":1,"109":1,"166":1,"200":1,"282":1,"292":2,"295":1,"309":1,"342":1,"343":1,"376":1,"452":1,"453":1,"455":1,"470":1,"471":2,"561":1,"563":1,"564":2,"565":2,"566":1,"568":3,"572":1,"573":1,"574":1,"633":1,"657":1,"658":1,"695":1,"698":1,"700":1,"702":1,"703":1,"707":1,"708":1,"719":1,"756":2,"757":2,"759":2,"761":1,"762":1,"786":1,"799":1,"854":1,"855":1,"891":3,"892":1,"893":1,"931":1,"932":1,"933":1,"935":1,"964":1,"965":1,"1004":1,"1012":1,"1018":5,"1026":1,"1034":4,"1042":1,"1043":1,"1050":2,"1051":1,"1082":1,"1083":1,"1085":2,"1090":2,"1093":1,"1133":2,"1144":1,"1154":1,"1175":1,"1212":8,"1213":1,"1237":3,"1259":2,"1270":1,"1273":1,"1276":1,"1280":2,"1281":1,"1282":3,"1286":60,"1294":1,"1300":7,"1309":2,"1311":30,"1312":2,"1323":10,"1327":1,"1339":1,"1350":5,"1359":7,"1362":2,"1364":1,"1366":4,"1369":21,"1380":4,"1395":1,"1396":12,"1402":1,"1405":1,"1412":1,"1415":5,"1417":1,"1427":1,"1436":4,"1438":5,"1441":1,"1455":8,"1461":2,"1467":5,"1473":2,"1490":2,"1492":1,"1496":1,"1526":3,"1544":1,"1545":4,"1546":1,"1547":1,"1551":1,"1577":5,"1590":1,"1591":1,"1614":1,"1641":1,"1664":4,"1665":1,"1667":1,"1684":1,"1688":1,"1697":1,"1719":1,"1721":1,"1765":1,"1779":1,"1810":1,"1848":1,"1851":3,"1854":1,"1856":6,"1859":1,"1873":2,"1876":1,"1886":1,"1887":2,"1888":1,"1890":1,"1892":2,"1927":1,"1948":1,"1991":1,"2013":1,"2043":1,"2055":1,"2112":1,"2133":1,"2179":1,"2192":1,"2207":1,"2232":5}}],["schemename",{"2":{"1300":1},"3":{"1300":4,"1436":3}}],["schemes",{"3":{"350":2,"352":1,"420":1,"422":1,"1237":1,"1271":1,"1300":1,"1311":4,"1324":3,"1350":1,"1359":2,"1417":2,"1975":1,"1976":1,"1978":2}}],["scheme",{"3":{"0":3,"59":1,"92":2,"96":1,"207":3,"208":2,"209":2,"265":1,"273":2,"309":1,"310":1,"311":1,"350":3,"352":1,"355":1,"360":1,"361":2,"418":4,"420":5,"421":2,"422":3,"427":2,"556":1,"557":1,"618":1,"665":1,"668":1,"749":2,"751":1,"827":2,"907":1,"945":1,"948":1,"1124":1,"1184":1,"1186":1,"1212":2,"1237":3,"1271":7,"1286":4,"1287":1,"1298":1,"1300":13,"1311":27,"1312":1,"1323":2,"1324":17,"1339":2,"1347":1,"1350":2,"1353":1,"1359":38,"1395":4,"1406":1,"1415":4,"1416":11,"1417":15,"1434":1,"1436":8,"1441":1,"1447":1,"1467":1,"1490":1,"1534":1,"1577":1,"1599":1,"1611":1,"1647":1,"1650":1,"1698":1,"1721":1,"1825":3,"1900":1,"1903":1,"1904":1,"1965":1,"1968":3,"1971":1,"1975":5,"1976":3,"1978":1,"2025":1,"2083":1,"2086":1,"2122":1,"2142":1,"2144":1,"2232":2}}],["sc",{"3":{"1359":2}}],["science",{"3":{"1913":1,"2222":1}}],["sci",{"3":{"1350":4,"1359":9}}],["scuffed",{"3":{"1324":1}}],["sccs",{"3":{"1201":1,"1496":3,"1498":1,"1517":1}}],["scc",{"0":{"1198":1},"3":{"1196":1,"1237":1,"1436":1,"1496":5,"1498":1}}],["scenarios",{"3":{"1286":1,"1359":1,"1474":1,"1492":1,"1639":1,"1775":1,"2033":1,"2037":1}}],["scenario",{"0":{"2033":1},"3":{"68":2,"627":1,"1229":1,"1271":1,"1286":1,"1323":2,"1324":1,"1350":1,"1395":2,"1436":3,"1438":1,"1467":1,"1472":1,"1474":2,"1492":3,"1534":1,"1591":1,"1709":1,"2029":1,"2033":3,"2034":1,"2037":1,"2038":2}}],["scorable",{"3":{"1350":1,"2190":1}}],["scoretier",{"3":{"1395":1}}],["scoretieroptions",{"3":{"1395":2}}],["scorematchesfilter",{"3":{"1395":3}}],["scorepollsession",{"2":{"1390":1},"3":{"1199":2,"1203":1,"1207":3,"1390":5,"1395":21}}],["scorepollsignal",{"2":{"1390":1},"3":{"1199":4,"1203":1,"1207":1,"1390":1,"1395":6,"1496":1}}],["scorepollhost",{"3":{"1199":3,"1203":1,"1207":1,"1390":1,"1395":6,"1496":1}}],["scorepolltrackertests",{"3":{"1199":1,"1207":2}}],["scorepolltracker",{"2":{"1390":1},"3":{"1199":3,"1203":1,"1207":3,"1390":2,"1395":17,"1496":2}}],["scorerequested",{"3":{"1395":2}}],["scorer",{"3":{"756":1,"1016":1,"1018":4,"1021":2,"1095":2,"1359":4,"1360":1,"1366":5,"1368":1,"1369":9,"1435":1,"1437":1,"1442":1,"1455":2,"1461":1,"1463":1,"1485":1,"1487":1,"1492":2,"2239":1}}],["scoreeventsessionscommand",{"3":{"1496":1}}],["scoreeventsessionshandler",{"3":{"1286":1,"1350":1,"1496":3}}],["scoreeventsessionsresultdto",{"2":{"1347":1,"1390":1},"3":{"1199":9,"1203":1,"1207":1,"1347":1,"1350":3,"1359":2,"1390":1,"1395":3}}],["scoreeventsessionsinternalcommandmarkertests",{"2":{"1438":1},"3":{"1199":1,"1207":2,"1438":2}}],["scoreeventsessionsinternalcommand",{"2":{"1018":1,"1264":1,"1347":1,"1367":1,"1376":1,"1390":1},"3":{"1018":1,"1199":6,"1203":1,"1207":2,"1264":2,"1286":1,"1347":2,"1350":3,"1359":8,"1367":1,"1369":1,"1376":1,"1380":3,"1390":2,"1438":1,"1442":1,"1496":2,"2190":2}}],["scoreeventsessionsinternalcommandhandlertests",{"2":{"1438":1},"3":{"1199":1,"1207":2,"1438":2}}],["scoreeventsessionsinternalcommandhandler",{"2":{"994":1,"996":1,"1018":1,"1270":1,"1367":1,"1369":1,"1496":1,"2190":1},"3":{"493":1,"494":1,"495":1,"994":1,"995":1,"996":2,"998":1,"1018":2,"1099":1,"1103":1,"1199":2,"1203":1,"1207":2,"1270":3,"1350":2,"1359":14,"1367":2,"1369":3,"1438":2,"1496":2,"2190":1}}],["scoreeventsessions",{"3":{"493":1,"494":1,"495":1,"995":1,"1018":2,"1082":1,"1099":1,"1203":9,"1207":18,"1264":1,"1270":3,"1286":1,"1347":1,"1350":1,"1359":24,"1367":1,"1369":2,"1390":1,"1438":1,"1442":1,"1467":1,"1496":3,"1526":1}}],["score",{"1":{"1794":1,"1795":1,"1796":1,"1797":1,"1798":1,"1799":1,"1800":1,"1801":1,"1802":1},"3":{"0":3,"520":1,"1010":2,"1012":6,"1014":2,"1017":2,"1018":9,"1019":2,"1020":2,"1082":1,"1094":1,"1193":1,"1212":1,"1216":1,"1342":3,"1347":1,"1350":15,"1359":40,"1362":2,"1366":3,"1369":16,"1376":1,"1385":2,"1395":39,"1396":1,"1435":5,"1436":1,"1438":3,"1455":1,"1487":1,"1496":1,"1518":1,"1524":1,"1525":1,"1526":4,"1527":2,"1530":3,"1531":3,"1534":1,"1535":1,"1537":8,"1553":1,"1564":1,"1575":1,"1578":2,"1580":1,"1582":2,"1585":3,"1591":1,"1597":1,"1599":1,"1630":1,"1632":2,"1640":1,"1784":1,"1794":3,"1797":1,"1799":4,"1800":1,"1801":3,"1802":6,"2050":1,"2060":1,"2114":1,"2171":1,"2190":3,"2205":1,"2239":2}}],["scorecards",{"0":{"1520":1},"3":{"1011":1,"1012":1,"1216":1,"1521":1,"1604":1,"1674":2,"2231":1,"2233":1}}],["scorecard",{"0":{"1526":1,"1577":1,"1591":1,"2231":1},"1":{"1522":1,"1523":1,"1524":1,"1525":1,"1526":1,"1527":1,"1528":1,"1573":1,"1574":1,"1575":1,"1576":1,"1577":1,"1578":1,"1579":1,"1587":1,"1588":1,"1589":1,"1590":1,"1591":1,"1592":1,"1593":1},"3":{"0":2,"1006":2,"1007":1,"1010":1,"1011":4,"1012":3,"1013":2,"1014":2,"1021":1,"1089":1,"1340":1,"1342":2,"1477":1,"1496":1,"1518":1,"1520":4,"1522":2,"1526":1,"1528":1,"1529":1,"1536":2,"1537":1,"1553":1,"1571":1,"1573":2,"1577":1,"1579":1,"1580":3,"1587":2,"1591":1,"1594":2,"1597":1,"1605":1,"1610":1,"1673":1,"1739":1,"1744":1,"1778":1,"1787":2,"1794":1,"1796":1,"1799":3,"1801":2,"1802":4,"1805":1,"1811":2,"1888":1,"1905":2,"1910":2,"1916":1,"1929":1,"1930":3,"2034":1,"2043":2,"2048":2,"2059":2,"2060":1,"2062":3,"2069":2,"2079":1,"2085":1,"2109":1,"2115":3,"2133":2,"2153":2,"2160":2,"2169":2,"2180":2,"2193":2,"2203":2,"2211":2}}],["scoredshown",{"3":{"1395":1}}],["scoredthisrun",{"3":{"1395":14}}],["scoredon",{"3":{"1350":2,"1359":1,"1390":1,"1395":3}}],["scored",{"0":{"1784":1,"1799":1},"3":{"0":1,"1011":5,"1012":5,"1013":2,"1014":2,"1017":1,"1018":1,"1022":1,"1090":2,"1216":1,"1347":2,"1350":4,"1359":17,"1376":1,"1380":3,"1390":2,"1395":6,"1426":1,"1428":1,"1438":2,"1467":1,"1516":1,"1519":1,"1521":1,"1522":1,"1526":3,"1527":2,"1534":1,"1536":2,"1547":1,"1553":1,"1554":1,"1571":1,"1573":1,"1577":3,"1578":2,"1585":3,"1587":1,"1591":1,"1592":1,"1599":1,"1645":1,"1780":1,"1794":2,"1799":2,"1801":3,"1802":1,"1903":1,"1916":1,"2040":1,"2062":2,"2069":2,"2085":1,"2171":1,"2190":1,"2214":1,"2231":1}}],["scoresessionsasync",{"2":{"1390":1},"3":{"1380":4,"1390":1,"1395":7}}],["scoresessionasync",{"3":{"1018":1,"1359":5,"1369":1}}],["scoreschema",{"3":{"1366":2,"1369":2}}],["scores",{"3":{"0":2,"85":1,"768":1,"1010":3,"1012":5,"1014":1,"1017":1,"1018":7,"1019":2,"1020":1,"1090":1,"1094":1,"1259":28,"1286":1,"1323":7,"1342":2,"1347":2,"1350":10,"1359":21,"1362":1,"1366":4,"1367":1,"1369":9,"1380":1,"1390":2,"1395":10,"1396":1,"1435":2,"1436":2,"1437":1,"1438":2,"1487":1,"1492":1,"1496":1,"1521":1,"1522":1,"1526":1,"1536":1,"1537":1,"1547":2,"1570":2,"1573":1,"1587":1,"1591":1,"1592":3,"1594":1,"1632":1,"1784":4,"1794":1,"1797":1,"1798":1,"1799":4,"1800":1,"1910":1,"1929":1,"2053":1,"2059":1,"2062":3,"2114":1,"2171":1,"2182":1,"2232":1}}],["scoringinstruments",{"3":{"1496":2}}],["scoring=true",{"3":{"1492":1}}],["scoringnoscores",{"3":{"1395":1}}],["scoringcomplete",{"3":{"1395":2}}],["scoringtimedout",{"3":{"1395":2}}],["scoringpartial",{"3":{"1395":2}}],["scoringpollfailed",{"3":{"1395":2}}],["scoringpercent",{"3":{"1395":1}}],["scoring",{"0":{"1359":1,"1366":1,"1367":1,"1435":1,"1527":1,"1578":1,"1592":1},"1":{"1015":1,"1016":1,"1017":1,"1018":1,"1019":1,"1020":1,"1021":1,"1022":1},"2":{"1203":1,"1369":1,"1379":1,"1427":1,"1435":1,"1437":1,"1438":1,"1442":1,"1455":1,"1486":1,"1487":1,"1492":1,"1496":1},"3":{"0":8,"492":1,"493":1,"516":1,"517":2,"520":2,"607":2,"609":2,"994":1,"995":1,"996":2,"998":1,"999":1,"1004":1,"1012":1,"1015":1,"1016":3,"1017":3,"1018":11,"1019":1,"1020":3,"1022":3,"1089":4,"1090":4,"1093":1,"1096":1,"1099":2,"1103":2,"1192":1,"1193":1,"1199":10,"1203":5,"1206":1,"1207":38,"1212":1,"1270":2,"1342":1,"1347":4,"1350":14,"1354":1,"1359":47,"1360":2,"1366":10,"1367":3,"1368":1,"1369":36,"1376":1,"1379":1,"1380":5,"1390":7,"1395":29,"1396":1,"1426":1,"1427":12,"1428":1,"1435":10,"1436":5,"1437":8,"1438":12,"1442":3,"1455":8,"1463":1,"1467":9,"1469":1,"1470":2,"1486":2,"1487":3,"1492":8,"1493":1,"1496":20,"1526":5,"1527":1,"1529":1,"1532":1,"1534":1,"1535":2,"1537":1,"1553":1,"1594":1,"1632":2,"1640":1,"1784":2,"1794":1,"1795":1,"1802":1,"1947":1,"2060":1,"2061":1,"2062":1,"2179":1,"2180":1,"2182":1,"2190":1,"2232":4}}],["scoping",{"0":{"1267":1},"3":{"0":1,"159":1,"318":3,"320":1,"321":2,"324":1,"335":1,"544":1,"545":1,"619":1,"739":1,"743":3,"826":1,"906":1,"964":1,"1239":1,"1247":3,"1270":11,"1286":2,"1297":1,"1300":7,"1309":1,"1311":12,"1323":2,"1324":6,"1350":1,"1353":2,"1359":5,"1372":2,"1380":27,"1388":1,"1395":14,"1396":9,"1402":3,"1415":1,"1416":1,"1417":1,"1436":9,"1438":3,"1455":1,"1467":1,"1496":2,"1526":2,"1591":1,"1595":1,"1596":1,"1599":1,"1631":2,"1639":4,"1666":1,"1749":1,"1759":1,"1815":2,"1920":6,"1995":2,"1996":1}}],["scoper",{"3":{"1997":1}}],["scopers",{"3":{"1260":1}}],["scopeunresolvedforpublicreader",{"3":{"1395":4}}],["scopecaption",{"3":{"1324":1}}],["scopecapturinglogger",{"3":{"1199":3,"1207":2}}],["scope=",{"3":{"1324":1}}],["scopequeryasync",{"3":{"1324":1}}],["scopeprovider",{"3":{"1324":4}}],["scopeable",{"3":{"1324":1,"1465":1}}],["scopefactory",{"3":{"1259":5,"1286":1,"1359":4,"1402":1}}],["scopekeyregex",{"3":{"1309":1}}],["scopekeymaxlength",{"2":{"1306":1},"3":{"1286":2,"1306":1,"1309":7}}],["scopekey",{"2":{"231":1,"1512":1,"1941":1},"3":{"225":1,"231":1,"1286":1,"1309":31,"1324":4,"1396":1,"1415":4,"1512":1,"1933":2,"1941":1}}],["scopedeventids",{"3":{"1359":1}}],["scopedexporttestcontroller",{"3":{"1199":2,"1207":1}}],["scopedkey",{"3":{"1324":4}}],["scopedintegrationeventhandlerbasetests",{"3":{"1199":1,"1207":6,"1259":1,"1438":2}}],["scopedintegrationeventhandlerbase",{"2":{"1252":1,"1413":1,"1665":1},"3":{"1199":15,"1203":1,"1207":2,"1252":3,"1259":24,"1355":2,"1359":11,"1396":12,"1402":4,"1413":1,"1415":7,"1496":1,"1665":1}}],["scopedprobe",{"3":{"1199":3,"1207":1}}],["scopeduseroverride",{"2":{"1045":1,"2186":1},"3":{"0":1,"1042":2,"1045":1,"1199":5,"1203":1,"1207":2,"1313":1,"1318":6,"1323":12,"1496":2,"2186":1}}],["scoped",{"0":{"1937":1},"1":{"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1},"3":{"0":19,"24":1,"26":1,"39":1,"71":1,"85":1,"86":1,"109":1,"115":1,"122":1,"149":1,"157":1,"173":1,"195":1,"200":1,"201":2,"214":1,"219":1,"223":1,"225":1,"231":1,"241":1,"243":1,"246":2,"283":1,"292":1,"303":1,"317":3,"318":2,"320":1,"324":2,"325":2,"326":1,"397":1,"415":1,"434":1,"443":1,"479":1,"482":1,"483":1,"490":1,"491":1,"492":1,"493":1,"494":1,"511":1,"513":1,"518":1,"524":1,"530":2,"545":1,"549":1,"554":1,"564":1,"601":1,"602":1,"609":2,"620":1,"633":1,"638":1,"647":1,"651":1,"665":2,"666":2,"669":1,"670":1,"698":4,"699":1,"700":2,"702":1,"703":1,"706":1,"707":3,"708":2,"719":1,"724":1,"743":1,"747":1,"749":1,"751":1,"758":1,"766":1,"791":1,"794":1,"819":1,"827":2,"832":1,"863":1,"881":1,"905":2,"910":1,"916":1,"924":1,"926":1,"941":1,"988":1,"996":3,"1012":3,"1019":1,"1020":1,"1035":1,"1042":1,"1052":1,"1073":1,"1099":1,"1100":1,"1116":2,"1124":1,"1133":2,"1147":1,"1153":1,"1168":2,"1183":1,"1212":4,"1214":2,"1237":6,"1247":7,"1252":1,"1253":3,"1256":1,"1258":1,"1259":15,"1262":2,"1263":2,"1264":1,"1265":1,"1267":3,"1269":3,"1270":41,"1271":2,"1273":1,"1275":3,"1276":1,"1277":2,"1278":1,"1286":55,"1290":1,"1294":1,"1296":1,"1300":34,"1301":4,"1306":2,"1307":1,"1308":1,"1309":25,"1310":1,"1311":44,"1312":1,"1313":2,"1316":3,"1317":3,"1318":1,"1322":1,"1323":44,"1324":70,"1337":1,"1339":16,"1346":1,"1350":5,"1353":3,"1355":2,"1359":41,"1366":1,"1368":2,"1369":10,"1372":1,"1378":1,"1380":30,"1383":1,"1384":1,"1385":1,"1395":59,"1396":85,"1400":1,"1401":1,"1402":25,"1413":1,"1415":19,"1416":4,"1417":39,"1427":1,"1431":1,"1436":50,"1438":6,"1446":1,"1453":1,"1454":1,"1455":9,"1458":1,"1460":1,"1461":2,"1467":14,"1469":1,"1474":2,"1481":1,"1486":1,"1487":2,"1489":1,"1492":3,"1496":2,"1512":1,"1525":2,"1526":8,"1531":1,"1534":3,"1548":1,"1552":1,"1555":1,"1556":3,"1577":7,"1582":1,"1591":3,"1596":2,"1599":1,"1600":1,"1629":2,"1630":4,"1631":5,"1632":4,"1635":2,"1636":1,"1638":1,"1639":2,"1640":1,"1664":1,"1666":1,"1668":2,"1669":1,"1673":1,"1714":1,"1749":1,"1757":1,"1815":3,"1825":1,"1849":1,"1851":2,"1883":3,"1908":1,"1920":3,"1921":1,"1924":2,"1937":1,"1940":3,"1941":1,"1948":2,"1956":2,"1959":1,"1994":2,"1995":4,"1997":2,"2000":1,"2001":1,"2010":1,"2024":1,"2033":1,"2057":2,"2074":1,"2095":2,"2118":1,"2122":1,"2126":1,"2150":1,"2186":1,"2232":1}}],["scopes",{"3":{"0":6,"143":1,"179":1,"200":1,"201":1,"225":1,"318":1,"325":2,"378":1,"384":1,"397":1,"544":2,"545":1,"548":1,"607":1,"743":1,"782":1,"826":1,"905":2,"953":1,"1057":1,"1212":1,"1239":1,"1259":2,"1267":1,"1270":3,"1286":3,"1300":1,"1301":1,"1309":1,"1311":5,"1323":2,"1324":2,"1333":1,"1339":2,"1350":4,"1359":6,"1380":1,"1395":3,"1396":17,"1402":3,"1415":4,"1417":1,"1436":15,"1438":1,"1457":1,"1483":1,"1577":2,"1761":1,"1813":1,"1815":1,"1817":2,"1933":1,"1975":1,"1995":2,"2006":1,"2163":1,"2232":2}}],["scope",{"0":{"1305":1,"1680":1},"2":{"1054":1,"1920":2},"3":{"0":15,"15":1,"24":2,"26":6,"27":7,"71":1,"81":1,"84":1,"123":4,"125":1,"135":3,"136":2,"141":1,"160":2,"178":3,"180":1,"193":1,"201":1,"202":6,"223":1,"225":1,"230":1,"243":1,"246":2,"264":1,"312":1,"319":2,"320":1,"321":1,"343":1,"350":2,"359":2,"361":1,"365":2,"368":1,"369":1,"384":1,"388":1,"397":1,"405":2,"438":2,"459":1,"461":2,"501":1,"507":1,"522":1,"526":1,"528":1,"529":1,"531":1,"534":1,"536":4,"545":1,"546":1,"550":1,"556":1,"579":1,"620":1,"674":1,"688":1,"690":10,"691":3,"692":1,"696":3,"698":12,"699":1,"700":2,"702":5,"703":1,"707":3,"719":1,"731":2,"743":2,"744":1,"749":1,"799":1,"803":1,"820":1,"827":1,"848":4,"889":1,"898":1,"899":1,"905":1,"910":1,"914":1,"920":1,"926":3,"966":1,"988":5,"990":1,"994":1,"996":1,"1010":1,"1012":2,"1013":1,"1018":2,"1042":3,"1051":1,"1054":1,"1067":1,"1074":1,"1093":1,"1100":1,"1108":1,"1114":1,"1120":1,"1124":1,"1133":1,"1157":1,"1161":1,"1168":3,"1177":1,"1192":1,"1195":1,"1204":2,"1211":1,"1212":2,"1214":1,"1236":1,"1237":1,"1238":1,"1239":1,"1240":1,"1245":1,"1246":7,"1247":14,"1252":1,"1253":3,"1254":1,"1256":1,"1258":1,"1259":38,"1260":1,"1263":3,"1265":1,"1267":1,"1269":1,"1270":43,"1273":1,"1275":3,"1276":6,"1277":1,"1278":4,"1286":92,"1300":12,"1303":1,"1304":1,"1305":3,"1306":2,"1308":2,"1309":58,"1311":28,"1317":1,"1318":3,"1323":40,"1324":51,"1339":4,"1342":1,"1350":5,"1352":1,"1353":3,"1355":2,"1357":2,"1359":65,"1369":1,"1372":3,"1376":1,"1380":16,"1383":2,"1387":2,"1391":2,"1395":43,"1396":159,"1399":1,"1401":4,"1402":42,"1407":1,"1411":2,"1413":1,"1415":25,"1416":1,"1417":15,"1428":1,"1431":1,"1433":1,"1436":59,"1438":14,"1454":1,"1455":1,"1459":2,"1463":1,"1467":1,"1470":1,"1472":1,"1475":1,"1485":1,"1487":1,"1488":1,"1489":1,"1496":9,"1498":1,"1500":2,"1534":1,"1545":1,"1548":1,"1553":1,"1564":1,"1585":1,"1596":1,"1600":1,"1605":1,"1630":1,"1631":9,"1632":3,"1636":1,"1639":6,"1641":2,"1654":1,"1665":1,"1667":1,"1669":1,"1685":1,"1707":1,"1739":1,"1748":1,"1765":1,"1776":1,"1815":2,"1818":1,"1821":2,"1824":1,"1849":1,"1851":3,"1891":1,"1910":2,"1920":4,"1924":2,"1933":3,"1935":1,"1937":6,"1940":2,"1941":1,"1948":1,"1953":1,"1975":2,"1994":1,"1996":1,"1997":3,"2000":2,"2010":1,"2032":1,"2036":1,"2047":1,"2048":1,"2066":1,"2074":2,"2085":3,"2107":1,"2126":1,"2135":1,"2136":1,"2142":2,"2156":1,"2163":3,"2164":1,"2165":1,"2167":2,"2169":3,"2179":1,"2184":1,"2185":1,"2188":1,"2189":1,"2220":1,"2232":2}}],["scrypt",{"3":{"1905":1}}],["scroller",{"3":{"1526":1}}],["scrolledid",{"3":{"1324":3}}],["scrolled",{"3":{"1324":2,"2073":1}}],["scrollports",{"3":{"1438":1}}],["scrollposition",{"3":{"1324":1}}],["scrollwidth",{"3":{"1436":1}}],["scrollbar",{"3":{"1436":1}}],["scrollbehavior",{"3":{"1324":2}}],["scrollintoviewasync",{"3":{"1324":1}}],["scrollingelement",{"3":{"1324":1}}],["scrolling",{"3":{"1228":1,"1229":1,"1324":1,"1436":1,"1559":1}}],["scrollmanager",{"3":{"1324":2}}],["scrolltop",{"3":{"1324":1}}],["scrolltrackerid",{"3":{"1324":1}}],["scrollcontainerselector",{"3":{"1324":1}}],["scrolls",{"3":{"1247":1,"1324":5,"1436":1,"1438":1}}],["scroll",{"3":{"881":2,"883":1,"1286":1,"1324":33,"1383":1,"1395":12,"1396":2,"1438":3,"1526":1,"1643":1,"1669":3,"2073":2,"2076":1,"2079":2}}],["scratch",{"3":{"799":1,"1396":1,"1402":1,"1415":1,"1436":2,"1455":1,"1466":1,"1780":1}}],["scraper",{"3":{"1998":1}}],["scrapers",{"3":{"174":1}}],["scraped",{"3":{"1459":1}}],["scrape",{"3":{"1415":1,"1893":1}}],["scraping",{"3":{"725":1,"1317":1}}],["scramble",{"3":{"150":1}}],["screenreader",{"3":{"1524":1,"1526":2,"1531":1,"1533":1,"1589":2,"1591":2,"1596":1,"1598":1}}],["screencap",{"2":{"1479":1},"3":{"1479":3}}],["screenlayout",{"3":{"1416":1}}],["screening",{"3":{"1359":1}}],["screensize",{"3":{"1416":1}}],["screens",{"3":{"1059":1,"1300":1,"1324":4,"1350":3,"1380":2,"1381":1,"1383":1,"1385":1,"1395":3,"1396":2,"1409":1,"1415":3,"1417":3,"1436":1,"1438":1,"1559":1,"2070":1,"2079":1}}],["screenshots",{"3":{"1417":1,"1436":2,"1479":4,"1480":5,"1669":1}}],["screenshotformat",{"3":{"1417":1}}],["screenshotted",{"3":{"690":1,"1396":5,"1631":1}}],["screenshot",{"0":{"1479":1,"1480":1},"3":{"0":1,"691":1,"1202":1,"1203":1,"1391":1,"1396":2,"1417":7,"1436":1,"1479":1,"1480":1,"1496":1}}],["screened",{"3":{"676":1,"1359":1,"1415":1}}],["screen",{"0":{"1644":1,"2072":1},"1":{"1605":1,"1606":1,"1607":1,"1608":1,"1609":1,"1610":1,"1739":1,"1740":1,"1741":1,"1742":1,"1743":1,"1744":1},"3":{"24":1,"109":1,"380":1,"620":1,"622":1,"683":1,"691":1,"692":1,"906":1,"1059":2,"1259":2,"1270":2,"1286":3,"1300":8,"1311":1,"1318":1,"1323":1,"1324":21,"1339":1,"1347":1,"1350":2,"1359":8,"1375":1,"1380":3,"1388":1,"1391":1,"1395":26,"1396":23,"1397":1,"1402":2,"1409":1,"1414":3,"1415":6,"1416":10,"1417":27,"1436":13,"1438":1,"1479":1,"1523":1,"1524":3,"1526":1,"1530":1,"1531":2,"1532":1,"1533":1,"1557":1,"1558":1,"1577":1,"1589":1,"1591":1,"1595":1,"1596":2,"1603":1,"1604":1,"1605":2,"1606":1,"1610":1,"1626":1,"1640":1,"1642":1,"1668":1,"1669":2,"1674":1,"1685":1,"1712":1,"1739":2,"1740":1,"1744":1,"1760":1,"1773":1,"1942":2,"1943":1,"1950":1,"1962":1,"1966":1,"2045":1,"2070":4,"2071":1,"2072":2,"2073":1,"2080":4,"2116":1,"2121":1,"2191":1,"2200":1,"2202":1,"2203":1}}],["scrum",{"3":{"2219":1,"2220":1}}],["scrutiny",{"3":{"1436":1}}],["scrutor",{"0":{"1262":1},"3":{"0":2,"5":1,"117":2,"119":1,"121":2,"122":2,"572":1,"649":1,"781":1,"922":1,"1042":1,"1212":1,"1213":1,"1259":2,"1262":2,"1265":1,"1268":1,"1270":12,"1275":1,"1309":1,"1311":3,"1313":1,"1316":3,"1318":1,"1319":1,"1323":15,"1324":8,"1354":1,"1359":10,"1380":2,"1395":9,"1404":1,"1415":9,"1436":5,"1438":2,"1489":1,"1507":1,"1577":3,"1651":1,"1730":1,"1818":1,"1821":1,"1826":1,"1827":1,"1879":1,"1883":1,"1956":1,"2043":1,"2095":2,"2184":1,"2227":1,"2232":1}}],["scrubemailaddressesfromproductreviewernames",{"3":{"403":1}}],["scrubs",{"3":{"403":1,"1323":1,"1324":2,"1496":1,"1627":1,"1641":1,"2063":1}}],["scrubbed",{"3":{"0":1,"395":1,"1359":1}}],["scripting",{"3":{"1467":1}}],["scriptedhandler",{"3":{"1199":4,"1207":2}}],["scripted",{"3":{"861":2,"862":1,"1003":1,"1004":1,"1126":1,"1436":2,"1727":1,"2005":1}}],["scripts",{"0":{"1473":1},"1":{"1471":1,"1472":1,"1473":1,"1474":1,"1475":1,"1476":1,"1477":1,"1478":1,"1479":1,"1480":1,"1481":1,"1482":1,"1483":1,"1484":1},"3":{"0":1,"208":1,"387":1,"390":1,"484":1,"490":1,"491":1,"492":1,"493":1,"633":1,"1004":3,"1093":1,"1192":1,"1324":2,"1339":1,"1422":1,"1436":2,"1471":6,"1472":1,"1473":6,"1474":1,"1475":1,"1479":2,"1480":1,"1482":3,"1563":1,"1570":1,"1706":1,"1710":1,"1727":1,"1876":1,"1922":1,"2174":1}}],["script",{"1":{"1181":1,"1182":1,"1183":1,"1184":1,"1185":1,"1186":1,"1187":1,"1188":1,"1189":1},"2":{"483":1},"3":{"0":3,"157":1,"208":1,"212":2,"213":1,"214":5,"215":1,"216":1,"219":6,"273":1,"275":1,"286":1,"461":1,"483":1,"484":1,"543":1,"545":1,"633":2,"634":1,"659":1,"861":2,"869":1,"966":1,"996":2,"998":1,"1004":1,"1082":1,"1084":1,"1181":1,"1183":4,"1184":1,"1185":3,"1186":2,"1187":3,"1212":3,"1271":1,"1286":2,"1300":5,"1311":2,"1316":1,"1323":5,"1324":20,"1336":2,"1339":9,"1350":1,"1359":1,"1415":2,"1417":1,"1433":2,"1436":6,"1438":1,"1443":1,"1452":1,"1455":1,"1458":5,"1460":1,"1471":1,"1472":5,"1473":1,"1475":14,"1479":3,"1480":4,"1492":1,"1496":1,"1525":1,"1526":3,"1531":1,"1577":1,"1591":2,"1600":1,"1661":2,"1665":1,"1673":2,"1674":1,"1681":1,"1682":1,"1684":5,"1685":1,"1701":2,"1710":1,"1722":2,"1727":1,"1728":1,"1729":5,"1731":1,"1966":1,"1968":1,"1972":1,"2034":2,"2085":1,"2097":2,"2124":1,"2135":1,"2147":2,"2148":1,"2149":3,"2150":3,"2152":1,"2153":1,"2232":1}}],["scars",{"3":{"2072":1}}],["scarier",{"3":{"2036":1}}],["scar",{"3":{"1359":1,"1455":1}}],["scarcest",{"3":{"871":1}}],["scatter",{"3":{"1396":1,"1817":1,"1826":1,"1913":1,"1923":1}}],["scattering",{"3":{"1247":1,"1300":1,"1324":1,"1359":1,"1380":1,"1396":1,"1924":1,"1964":1,"2230":1}}],["scattered",{"3":{"118":1,"187":1,"360":1,"1201":1,"1212":1,"1237":1,"1247":2,"1260":1,"1270":1,"1286":3,"1301":3,"1311":1,"1314":1,"1323":2,"1324":2,"1348":1,"1350":6,"1352":1,"1395":2,"1396":1,"1402":2,"1415":1,"1417":2,"1436":2,"1557":1,"1813":1,"1819":2,"1822":1,"1827":1,"1882":1,"1930":1,"2136":1}}],["scatters",{"3":{"116":1}}],["scaffold",{"0":{"1650":1,"2089":1},"1":{"2087":1,"2088":1,"2089":1,"2090":1,"2091":1,"2092":1,"2093":1,"2094":1,"2095":1,"2096":1,"2097":1,"2098":1},"2":{"1689":1,"1699":1},"3":{"631":1,"633":1,"634":1,"635":1,"907":1,"923":1,"939":1,"942":1,"1034":1,"1133":1,"1286":4,"1436":3,"1488":3,"1602":2,"1646":2,"1649":1,"1656":1,"1661":2,"1674":1,"1681":1,"1683":1,"1684":4,"1685":4,"1686":6,"1687":1,"1689":3,"1692":1,"1693":1,"1697":1,"1699":2,"1701":3,"1702":1,"1705":2,"1719":3,"1724":1,"1727":2,"1729":1,"1730":1,"2004":1,"2087":1,"2089":1,"2098":2,"2210":1}}],["scaffolds",{"3":{"564":1,"698":1,"891":1,"1034":2,"1037":1,"1190":1,"1284":1,"1286":1,"1681":1,"1726":1,"1731":1,"2097":1,"2211":1}}],["scaffolded",{"3":{"41":1,"551":1,"749":1,"891":1,"921":1,"1270":2,"1286":4,"1396":1,"1436":5,"1497":1,"1646":1,"1649":1,"1650":1,"1651":1,"1652":1,"1653":1,"1654":1,"1655":1,"1656":1,"1664":1,"1675":1,"1684":1,"1685":4,"1686":4,"1687":1,"1690":1,"1697":1,"1699":1,"1701":4,"1720":1,"1727":1,"1729":1,"1730":1,"2004":1,"2101":1}}],["scaffolding",{"0":{"1661":1},"1":{"631":1,"632":1,"633":1,"634":1,"635":1,"636":1,"1726":1,"1727":1,"1728":1,"1729":1,"1730":1,"1731":1},"3":{"0":1,"534":1,"631":1,"633":1,"1212":1,"1286":1,"1428":1,"1429":1,"1436":3,"1438":2,"1442":1,"1488":1,"1602":1,"1699":1,"1726":1,"1727":2,"2062":1,"2098":1,"2232":1}}],["scalable",{"3":{"1237":1,"2213":1,"2217":1,"2218":1,"2220":1}}],["scalability",{"0":{"1549":1},"3":{"1216":1,"1223":1,"1228":1,"1229":8,"1231":1,"1233":1,"1237":3,"1241":1,"1242":1,"1243":1,"1247":16,"1252":1,"1259":8,"1260":1,"1263":1,"1269":1,"1270":18,"1271":1,"1274":1,"1278":1,"1286":33,"1287":1,"1300":10,"1301":10,"1306":1,"1307":1,"1309":12,"1310":4,"1311":21,"1313":1,"1316":1,"1323":9,"1324":9,"1337":1,"1339":10,"1343":1,"1347":1,"1350":13,"1355":1,"1358":1,"1359":61,"1367":1,"1369":5,"1375":1,"1380":16,"1388":1,"1395":19,"1396":43,"1402":16,"1406":1,"1413":1,"1415":11,"1417":10,"1422":1,"1427":1,"1436":13,"1438":1,"1450":1,"1455":1,"1456":1,"1458":2,"1461":1,"1496":1,"1499":1,"1526":1,"1530":1,"1531":1,"1533":1,"1535":1,"1577":1,"1581":1,"1582":1,"1583":1,"1591":1,"1595":1,"1596":1,"1597":1,"1598":1,"1796":1,"1800":1}}],["scalars",{"3":{"1234":1,"1237":1,"1286":2,"1350":9,"1359":1,"1369":6,"1396":3,"1415":1,"1436":1,"1686":2,"2186":1,"2192":1}}],["scalaronlyspec",{"3":{"1199":2,"1207":1,"1436":8}}],["scalaronlyqueryspec",{"3":{"1199":2,"1207":1,"1436":6}}],["scalar",{"3":{"0":1,"47":1,"49":1,"166":1,"799":3,"801":1,"802":1,"1050":2,"1053":1,"1132":1,"1133":1,"1236":1,"1237":1,"1241":1,"1247":3,"1281":2,"1286":13,"1300":1,"1311":6,"1312":3,"1323":2,"1342":5,"1350":22,"1353":1,"1359":22,"1363":1,"1369":10,"1395":1,"1396":27,"1401":1,"1402":2,"1410":1,"1415":11,"1436":9,"1473":1,"1489":1,"1496":1,"1534":1,"1577":1,"1656":1,"1663":1,"1666":3,"1727":1,"1749":1,"1810":1,"1849":1,"1853":1,"1858":2,"1859":1,"1862":1,"1866":1,"1929":1,"2035":1}}],["scaling",{"0":{"1970":1},"3":{"48":1,"58":2,"387":1,"389":1,"706":1,"740":1,"742":1,"759":1,"768":1,"1300":2,"1323":1,"1480":1,"1568":1,"1724":1,"1948":1,"1971":1}}],["scales",{"3":{"133":1,"282":1,"760":1,"765":1,"781":1,"799":1,"1125":1,"1270":1,"1300":1,"1301":1,"1309":1,"1339":1,"1359":3,"1395":1,"1396":1,"1526":1,"1549":1,"1671":1,"1896":1,"2100":1,"2202":1}}],["scaled",{"1":{"662":1,"663":1,"664":1,"665":1,"666":1,"667":1,"668":1,"669":1,"670":1},"3":{"0":1,"24":1,"58":1,"234":1,"242":1,"245":2,"283":1,"662":1,"664":2,"667":2,"732":1,"766":1,"768":1,"769":1,"793":1,"1212":1,"1233":1,"1237":1,"1301":2,"1309":1,"1317":1,"1336":1,"1339":2,"1442":1,"1447":1,"1467":1,"1473":1,"1480":1,"1524":1,"1531":1,"1568":1,"1591":1,"1600":1,"1848":1,"1855":1,"1916":1,"1923":1,"1924":1,"1971":1,"1972":1,"2001":1,"2103":1,"2188":1,"2232":2}}],["scale",{"0":{"1255":1},"2":{"766":1},"3":{"0":5,"15":1,"20":1,"48":1,"58":1,"60":1,"62":2,"68":1,"100":1,"141":1,"176":1,"225":1,"234":1,"243":1,"283":1,"285":1,"291":1,"390":2,"435":1,"458":1,"480":1,"483":1,"486":1,"487":1,"488":1,"489":1,"490":2,"491":1,"492":1,"493":1,"494":2,"495":1,"517":1,"538":1,"700":1,"765":2,"766":2,"768":1,"869":1,"871":1,"882":1,"995":1,"1011":1,"1101":1,"1152":1,"1154":1,"1156":1,"1213":1,"1229":1,"1237":1,"1255":1,"1256":1,"1259":8,"1270":1,"1275":1,"1286":1,"1300":1,"1309":2,"1312":1,"1323":3,"1324":6,"1336":1,"1339":1,"1350":2,"1351":1,"1359":4,"1380":1,"1396":10,"1398":1,"1402":1,"1415":1,"1457":1,"1462":1,"1465":1,"1467":9,"1474":1,"1525":1,"1526":4,"1531":1,"1532":1,"1534":1,"1536":1,"1537":3,"1549":2,"1554":3,"1565":1,"1568":3,"1572":1,"1575":1,"1577":6,"1585":1,"1591":2,"1599":1,"1638":2,"1665":1,"1676":1,"1678":2,"1679":2,"1680":1,"1795":1,"1797":1,"1841":1,"1884":1,"1900":1,"1923":1,"1935":1,"1940":1,"1942":1,"1972":1,"2001":1,"2002":1,"2010":1,"2014":1,"2042":1,"2066":1,"2075":1,"2085":1,"2157":1,"2228":1}}],["scanfile",{"3":{"1436":2}}],["scanfailingassembly",{"3":{"1199":2,"1207":1,"1438":1}}],["scanpage",{"3":{"1417":1}}],["scanoutcome",{"3":{"1199":2,"1203":1,"1207":1,"1396":4}}],["scanoutcomekind",{"3":{"1199":3,"1203":1,"1207":1,"1396":5}}],["scanonmainthreadasync",{"2":{"682":1},"3":{"682":1,"1417":1}}],["scangridasync",{"2":{"616":1,"620":1,"621":1,"2057":1},"3":{"616":1,"618":2,"620":1,"621":1,"1433":1,"1436":4,"1487":1,"1488":2,"1591":1,"2057":1}}],["scananddeleteasync",{"2":{"251":1},"3":{"251":1,"1301":2}}],["scanasync",{"2":{"621":1},"3":{"0":1,"618":1,"621":1,"682":1,"1396":1,"1417":4,"1433":1,"1436":4,"1487":1,"1488":2,"1591":1,"2057":1}}],["scanmodules",{"3":{"1316":1,"1323":1,"1662":1}}],["scanmodule",{"3":{"121":1,"1316":1,"1323":2,"1436":1,"1662":1}}],["scanmoduleapplicationservices",{"2":{"117":1,"122":1,"127":1,"922":1,"1262":1,"1316":1,"1354":1,"1404":1,"1651":1,"1662":1,"1830":1,"1883":1,"1886":1,"1956":1,"2095":1},"3":{"117":1,"122":1,"127":1,"922":1,"1259":1,"1262":2,"1270":5,"1271":2,"1316":2,"1323":15,"1350":1,"1354":1,"1359":15,"1396":8,"1402":2,"1404":1,"1415":12,"1651":1,"1662":1,"1830":1,"1883":2,"1886":1,"1956":1,"2095":2,"2098":1}}],["scannableassemblylocations",{"3":{"1436":5}}],["scannable",{"3":{"1301":1,"1395":1,"1396":2,"1436":2}}],["scanners",{"3":{"1311":1}}],["scanner",{"2":{"685":1},"3":{"684":1,"685":2,"690":2,"691":1,"694":1,"734":1,"872":1,"1271":2,"1300":1,"1301":3,"1311":1,"1323":9,"1350":1,"1396":20,"1415":4,"1416":4,"1417":7,"1436":5,"1627":1}}],["scanneravailable",{"2":{"684":1,"685":1},"3":{"684":1,"685":1,"690":1,"1396":1}}],["scannedpages",{"3":{"1436":3}}],["scannedpasswordhasherset",{"3":{"1436":1}}],["scanneduifiles",{"3":{"1436":1}}],["scannedcontrollers",{"3":{"1436":2}}],["scannedservices",{"3":{"1436":2}}],["scannedsourcedirectories",{"3":{"1436":5}}],["scannedhandlers",{"3":{"1436":3}}],["scannedendpointset",{"3":{"1436":4}}],["scannedassemblies",{"3":{"1286":3}}],["scanned",{"3":{"0":2,"27":1,"160":1,"200":1,"545":1,"564":1,"566":1,"618":1,"622":1,"628":1,"691":1,"692":1,"781":1,"799":1,"870":1,"873":1,"910":1,"1118":1,"1135":1,"1163":1,"1204":1,"1271":3,"1286":3,"1300":2,"1301":4,"1311":1,"1323":1,"1324":1,"1349":1,"1388":1,"1396":24,"1414":1,"1415":1,"1417":2,"1434":2,"1436":50,"1438":1,"1443":1,"1455":1,"1459":2,"1467":1,"1475":1,"1489":1,"1496":3,"1526":2,"1591":2,"1626":1,"1627":2,"1643":2,"1661":1,"1701":1,"1720":1,"1730":1,"1815":1,"1883":1,"1956":1,"2097":1,"2121":1}}],["scanning",{"0":{"1883":1},"1":{"679":1,"680":1,"681":1,"682":1,"683":1,"684":1,"685":1,"686":1},"3":{"0":5,"5":1,"117":1,"413":1,"565":2,"618":1,"619":1,"679":1,"681":1,"682":2,"683":1,"689":2,"690":1,"691":2,"801":1,"966":1,"1055":1,"1114":1,"1116":2,"1118":3,"1119":1,"1161":1,"1175":1,"1192":1,"1212":2,"1213":2,"1259":2,"1262":1,"1270":2,"1271":1,"1286":4,"1300":3,"1301":2,"1309":1,"1311":7,"1312":1,"1319":1,"1323":8,"1324":1,"1339":2,"1350":3,"1359":20,"1369":6,"1380":2,"1395":3,"1396":32,"1402":5,"1404":1,"1415":13,"1416":2,"1417":12,"1427":1,"1433":1,"1436":19,"1437":1,"1438":1,"1455":1,"1467":3,"1469":1,"1470":1,"1488":1,"1496":1,"1548":1,"1627":1,"1631":2,"1651":1,"1669":1,"1956":1,"1959":1,"2057":1,"2093":1,"2095":1,"2232":1}}],["scansource",{"3":{"1436":2}}],["scans",{"3":{"0":5,"54":1,"122":1,"253":1,"265":1,"268":1,"341":1,"413":2,"545":4,"583":1,"585":1,"616":3,"618":10,"620":1,"621":1,"682":1,"689":2,"690":1,"691":1,"733":1,"870":3,"873":1,"953":1,"1050":1,"1108":1,"1133":1,"1170":1,"1229":1,"1237":2,"1250":1,"1256":1,"1259":2,"1270":3,"1275":1,"1279":1,"1282":1,"1286":7,"1300":4,"1301":2,"1311":2,"1312":1,"1316":2,"1319":1,"1323":6,"1324":5,"1339":1,"1350":3,"1359":5,"1395":3,"1396":18,"1415":2,"1416":1,"1417":8,"1421":1,"1431":1,"1436":67,"1438":2,"1467":2,"1485":1,"1487":1,"1490":1,"1492":1,"1526":2,"1531":1,"1532":1,"1577":1,"1591":2,"1596":2,"1600":1,"1605":1,"1631":2,"1654":1,"1669":1,"1739":1,"1741":1,"1810":1,"1824":1,"1875":1,"1881":1,"1883":1,"1898":1,"1929":1,"1956":1,"2057":1,"2220":1}}],["scan",{"0":{"1572":1},"3":{"0":17,"24":2,"109":2,"117":1,"121":1,"245":1,"248":2,"251":1,"257":1,"483":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":2,"492":2,"493":2,"494":3,"495":3,"537":1,"539":1,"546":2,"549":1,"552":1,"572":1,"583":4,"585":1,"587":1,"616":4,"618":8,"619":1,"620":3,"622":1,"626":3,"628":1,"629":2,"649":1,"682":5,"683":1,"684":6,"685":2,"686":1,"688":2,"690":6,"691":2,"692":1,"726":1,"733":3,"734":1,"735":1,"799":1,"810":1,"849":1,"867":3,"870":1,"871":1,"872":1,"874":1,"876":1,"881":2,"906":1,"922":4,"924":1,"926":3,"946":1,"1133":5,"1135":2,"1161":2,"1162":1,"1163":3,"1196":1,"1212":2,"1228":1,"1229":2,"1236":1,"1237":3,"1242":1,"1259":6,"1262":3,"1263":2,"1265":2,"1269":2,"1270":5,"1271":7,"1286":23,"1300":21,"1301":13,"1308":1,"1309":2,"1311":7,"1315":4,"1316":1,"1318":1,"1319":1,"1323":28,"1324":14,"1339":1,"1350":4,"1354":4,"1359":122,"1369":6,"1377":1,"1380":1,"1395":30,"1396":119,"1402":3,"1414":1,"1415":34,"1416":2,"1417":33,"1421":1,"1431":2,"1433":3,"1434":1,"1436":195,"1438":10,"1442":1,"1445":2,"1450":1,"1459":1,"1487":5,"1488":3,"1489":2,"1491":1,"1492":2,"1496":7,"1526":3,"1531":1,"1577":2,"1589":1,"1591":5,"1596":2,"1627":2,"1629":1,"1631":2,"1643":1,"1645":2,"1651":2,"1653":1,"1666":1,"1673":1,"1677":1,"1749":1,"1815":1,"1816":1,"1824":2,"1830":1,"1849":1,"1881":2,"1883":2,"1898":3,"1916":2,"1920":1,"1923":1,"1956":2,"1959":1,"1991":1,"2041":1,"2057":3,"2079":1,"2095":1,"2103":2,"2163":2,"2232":1}}],["sil",{"3":{"2075":1,"2150":1}}],["silver",{"3":{"1350":1,"1364":1,"1369":1,"1631":1}}],["silo",{"3":{"1149":1,"1152":1,"1154":1,"1155":1,"1157":2,"2232":1}}],["silenced",{"3":{"982":1,"1309":1,"1417":1,"1436":2}}],["silencestherule",{"3":{"1436":5}}],["silencesonlythattype",{"3":{"1436":7}}],["silences",{"3":{"27":1,"372":1,"1359":1,"1436":9}}],["silence",{"3":{"0":2,"122":1,"200":1,"255":1,"370":1,"399":1,"401":1,"591":1,"821":1,"863":1,"1013":1,"1311":1,"1339":1,"1395":1,"1417":1,"1436":5,"1467":1,"1492":1,"1670":1,"1923":1,"2148":1,"2159":1,"2168":1}}],["silently",{"1":{"1887":1,"1888":1,"1889":1,"1890":1,"1891":1,"1892":1},"3":{"0":15,"6":1,"20":1,"67":1,"68":1,"77":1,"98":1,"109":2,"110":1,"119":1,"121":1,"122":1,"132":1,"135":3,"142":1,"160":1,"170":1,"175":2,"178":1,"180":1,"188":1,"214":1,"216":1,"220":1,"248":1,"302":1,"310":1,"318":2,"335":2,"340":1,"344":1,"350":1,"359":1,"360":1,"361":1,"363":2,"364":1,"370":1,"371":1,"373":1,"387":2,"391":1,"397":2,"399":1,"403":1,"408":1,"413":1,"415":1,"427":1,"428":1,"447":1,"459":1,"461":2,"474":1,"478":1,"484":1,"499":1,"501":2,"509":1,"518":1,"530":1,"534":1,"549":1,"558":1,"573":1,"574":1,"576":2,"583":1,"585":1,"592":1,"608":1,"610":1,"611":1,"625":1,"628":1,"632":1,"634":1,"635":1,"658":1,"667":1,"676":1,"698":2,"699":1,"700":1,"706":1,"709":1,"717":1,"735":1,"741":1,"749":1,"750":1,"758":1,"765":1,"768":1,"775":1,"784":1,"789":1,"819":1,"821":1,"827":1,"837":1,"838":1,"840":1,"847":1,"856":1,"863":1,"889":1,"890":1,"899":2,"907":1,"930":1,"931":1,"953":1,"954":1,"964":1,"972":1,"988":1,"990":1,"991":1,"998":1,"1005":1,"1017":1,"1018":1,"1028":1,"1042":1,"1050":2,"1051":1,"1059":1,"1060":1,"1067":1,"1085":1,"1100":1,"1102":1,"1117":1,"1126":1,"1132":1,"1154":1,"1215":1,"1222":1,"1228":1,"1229":3,"1237":4,"1241":4,"1247":10,"1252":1,"1257":2,"1259":6,"1262":2,"1263":1,"1270":6,"1271":2,"1273":2,"1276":1,"1278":2,"1279":1,"1281":2,"1284":1,"1286":46,"1291":1,"1300":34,"1301":9,"1306":1,"1309":5,"1310":1,"1311":24,"1312":4,"1315":2,"1322":1,"1323":22,"1324":34,"1326":1,"1332":1,"1333":2,"1334":1,"1335":1,"1336":1,"1339":20,"1343":1,"1344":2,"1347":1,"1349":1,"1350":15,"1352":1,"1355":1,"1359":42,"1366":1,"1368":1,"1369":5,"1380":7,"1383":1,"1385":1,"1387":1,"1390":1,"1395":32,"1396":26,"1402":11,"1406":1,"1409":1,"1414":1,"1415":20,"1416":7,"1417":19,"1421":1,"1423":1,"1426":1,"1427":9,"1428":1,"1429":1,"1430":1,"1431":2,"1432":1,"1433":2,"1436":79,"1438":15,"1442":2,"1443":2,"1444":2,"1445":2,"1447":2,"1449":1,"1453":3,"1454":2,"1455":3,"1460":1,"1467":7,"1469":1,"1473":1,"1475":1,"1486":2,"1488":4,"1489":3,"1490":1,"1491":1,"1492":2,"1526":1,"1546":1,"1547":1,"1571":1,"1585":1,"1607":1,"1639":3,"1640":1,"1641":2,"1645":1,"1651":1,"1653":2,"1654":2,"1675":1,"1677":2,"1684":1,"1685":3,"1686":1,"1700":2,"1701":1,"1708":1,"1728":1,"1730":1,"1741":1,"1748":1,"1749":1,"1764":1,"1765":2,"1767":2,"1785":1,"1802":1,"1821":1,"1823":1,"1825":1,"1826":1,"1830":1,"1840":1,"1843":1,"1844":1,"1849":1,"1851":2,"1869":1,"1870":1,"1877":1,"1879":1,"1881":1,"1886":1,"1887":2,"1890":1,"1892":1,"1902":1,"1920":1,"1923":2,"1940":1,"1947":1,"1948":1,"1951":1,"1952":1,"1959":1,"1964":1,"1977":1,"1984":1,"1988":1,"1994":1,"1996":1,"2001":2,"2002":1,"2010":1,"2013":1,"2043":1,"2044":1,"2045":2,"2047":1,"2049":1,"2056":1,"2058":1,"2061":1,"2067":1,"2075":1,"2095":1,"2097":2,"2098":2,"2105":1,"2108":1,"2121":1,"2122":1,"2125":1,"2129":1,"2138":1,"2142":1,"2144":1,"2145":1,"2149":1,"2152":1,"2156":2,"2159":1,"2164":1,"2166":1,"2174":1,"2175":1,"2182":1,"2183":1,"2188":1,"2197":2,"2200":1,"2207":1,"2220":1,"2232":2}}],["silent",{"3":{"0":5,"70":1,"78":1,"122":1,"136":1,"155":1,"193":1,"201":1,"227":1,"230":1,"235":1,"340":1,"342":2,"361":1,"383":1,"401":1,"465":1,"500":1,"518":1,"519":1,"520":1,"538":1,"573":1,"583":1,"585":1,"609":1,"617":1,"642":1,"649":1,"666":1,"692":1,"726":1,"734":1,"740":1,"748":1,"757":1,"765":1,"782":1,"784":1,"790":1,"818":1,"829":1,"831":1,"838":1,"922":1,"924":1,"931":1,"971":1,"990":1,"997":1,"1036":1,"1094":1,"1102":1,"1108":1,"1191":1,"1224":1,"1229":2,"1237":2,"1247":3,"1249":1,"1259":3,"1269":1,"1270":5,"1273":1,"1276":1,"1286":13,"1300":3,"1309":1,"1310":1,"1311":10,"1316":1,"1320":1,"1323":8,"1324":3,"1327":1,"1338":1,"1339":11,"1350":2,"1353":1,"1359":23,"1379":1,"1389":1,"1395":4,"1396":9,"1402":4,"1415":5,"1417":10,"1420":1,"1427":2,"1433":2,"1436":45,"1438":1,"1444":2,"1455":1,"1460":1,"1466":1,"1467":1,"1472":1,"1476":1,"1486":1,"1488":4,"1489":1,"1492":1,"1496":1,"1553":1,"1561":1,"1585":2,"1599":2,"1639":2,"1654":1,"1667":1,"1671":1,"1684":1,"1699":1,"1812":1,"1843":1,"1856":1,"1862":1,"1868":1,"1876":1,"1889":1,"1945":1,"1949":1,"1952":1,"1958":2,"1985":1,"1986":1,"1994":1,"2000":1,"2066":1,"2067":1,"2107":1,"2112":1,"2142":1,"2159":1,"2169":1,"2187":1,"2192":1}}],["sigsegv",{"3":{"1417":1}}],["sigstore",{"3":{"374":1}}],["sighted",{"3":{"1396":1,"1417":6}}],["sight",{"3":{"1359":1,"1380":1,"1396":1,"1417":1,"2050":1}}],["sighting",{"3":{"1237":1,"1350":1}}],["sig",{"3":{"1300":1}}],["sigma",{"3":{"1012":2}}],["signer",{"3":{"1893":1,"1899":1}}],["signedout",{"3":{"905":1,"1290":1,"1982":1}}],["signed",{"3":{"0":5,"68":1,"110":1,"186":1,"188":1,"265":3,"285":1,"351":1,"372":1,"374":1,"384":2,"434":1,"499":2,"501":1,"616":2,"618":1,"689":1,"691":1,"759":1,"790":1,"792":1,"827":1,"853":2,"855":1,"904":4,"905":5,"906":3,"907":3,"1067":1,"1184":1,"1212":2,"1228":1,"1229":1,"1276":1,"1286":5,"1289":2,"1290":1,"1291":1,"1300":26,"1307":1,"1311":4,"1323":1,"1324":30,"1339":2,"1373":1,"1395":5,"1396":5,"1407":1,"1414":2,"1415":12,"1416":2,"1417":4,"1429":1,"1434":1,"1436":13,"1438":1,"1454":1,"1479":1,"1576":1,"1577":2,"1586":1,"1591":1,"1596":1,"1627":1,"1668":1,"1672":2,"1703":1,"1750":1,"1761":2,"1773":1,"1897":1,"1922":1,"1945":1,"1966":1,"1973":2,"1977":1,"1980":1,"1982":6,"1983":1,"1984":2,"1985":1,"2033":1,"2083":1,"2111":1,"2124":1,"2166":1,"2232":1}}],["signoutlocallyasync",{"3":{"1324":4}}],["signouteverywhereasync",{"3":{"1300":3}}],["signoutasync",{"3":{"1300":3,"1324":1,"1436":5,"1671":1}}],["signup",{"3":{"283":1,"1999":1,"2001":1}}],["signups",{"3":{"282":1}}],["significance",{"3":{"1631":3}}],["significant",{"3":{"46":1,"1537":1,"1552":1,"1571":2}}],["signinwithbrokerasync",{"3":{"1417":1}}],["signinasync",{"3":{"1417":5}}],["signinscheme",{"3":{"1311":1}}],["signingkey",{"3":{"1339":2,"1442":2}}],["signingcredentials",{"3":{"1300":2,"1436":1}}],["signingalgorithm=rs256",{"3":{"1436":1}}],["signingalgorithm",{"2":{"31":1,"1288":1,"1895":1},"3":{"31":2,"1212":1,"1288":1,"1300":4,"1467":2,"1641":1,"1895":1}}],["signing",{"0":{"1288":1},"2":{"31":1,"418":1,"1481":1},"3":{"0":4,"30":1,"31":3,"32":1,"349":1,"353":1,"418":2,"420":1,"423":2,"424":1,"428":1,"499":1,"501":1,"514":1,"598":1,"599":2,"674":1,"788":1,"789":2,"790":2,"791":1,"792":1,"793":2,"794":1,"904":1,"905":1,"906":1,"963":1,"1212":1,"1290":2,"1300":15,"1311":4,"1323":1,"1324":2,"1335":1,"1339":1,"1415":2,"1416":1,"1429":1,"1433":1,"1436":3,"1442":1,"1455":1,"1456":1,"1466":1,"1467":2,"1472":2,"1481":5,"1488":1,"1490":1,"1576":1,"1589":2,"1591":1,"1595":1,"1596":2,"1597":1,"1790":1,"1893":2,"1894":1,"1895":1,"1899":1,"1982":1,"1984":1,"2021":2,"2166":4,"2167":1,"2230":1,"2232":1}}],["signs",{"3":{"0":2,"30":1,"31":1,"350":3,"353":1,"599":2,"905":3,"907":2,"909":1,"1212":1,"1288":2,"1290":1,"1300":9,"1311":3,"1324":8,"1326":1,"1328":1,"1348":1,"1350":1,"1359":1,"1380":1,"1396":2,"1406":2,"1415":2,"1436":2,"1441":1,"1449":1,"1455":1,"1466":1,"1467":1,"1481":1,"1667":1,"1893":1,"1894":1,"1895":2,"1975":2,"1978":1,"2055":1}}],["sign",{"0":{"1293":1},"3":{"0":8,"186":1,"243":2,"258":2,"261":1,"265":1,"281":1,"349":1,"350":4,"352":1,"353":2,"433":2,"434":3,"498":1,"512":1,"513":1,"618":1,"648":1,"650":1,"664":1,"665":1,"666":1,"674":1,"743":1,"853":1,"903":1,"905":8,"906":3,"907":1,"909":1,"1057":1,"1058":2,"1059":5,"1060":1,"1061":1,"1063":1,"1184":1,"1185":1,"1188":1,"1237":1,"1283":1,"1286":2,"1288":1,"1290":2,"1293":4,"1295":1,"1300":39,"1311":5,"1323":7,"1324":51,"1335":1,"1336":1,"1339":4,"1359":1,"1406":1,"1407":1,"1408":1,"1409":1,"1415":8,"1417":16,"1436":33,"1438":3,"1442":1,"1455":1,"1456":1,"1466":1,"1488":3,"1511":1,"1577":1,"1627":1,"1630":1,"1631":1,"1637":1,"1641":3,"1666":1,"1668":1,"1670":1,"1671":1,"1742":1,"1765":2,"1897":1,"1936":2,"1970":1,"1972":2,"1973":4,"1975":1,"1976":1,"1977":3,"1978":1,"1979":2,"1980":1,"1982":3,"1983":2,"1984":1,"1985":1,"2012":1,"2077":1,"2144":1,"2194":3,"2195":1,"2196":1,"2198":1,"2202":1,"2203":3,"2220":1,"2232":1}}],["signalling",{"3":{"1283":1,"1286":3}}],["signalled",{"3":{"743":1,"782":1,"1259":1,"1275":1,"1311":1,"1359":1,"1415":2,"1436":1,"1446":1,"1467":1,"1651":1,"1686":1,"2185":1,"2232":1}}],["signalingentry",{"3":{"1199":2,"1207":1}}],["signals",{"3":{"0":2,"18":1,"19":1,"396":1,"406":1,"608":1,"609":1,"767":1,"827":1,"1040":2,"1042":1,"1045":1,"1247":1,"1254":2,"1257":1,"1259":7,"1270":1,"1274":2,"1286":12,"1311":1,"1324":1,"1339":2,"1350":1,"1359":2,"1396":1,"1402":1,"1415":1,"1417":2,"1427":1,"1433":1,"1436":5,"1455":1,"1467":1,"1474":1,"1488":1,"1526":1,"1568":1,"1577":1,"2118":1,"2154":2,"2156":1,"2158":2,"2159":1,"2165":2}}],["signal",{"0":{"2158":1},"3":{"0":6,"17":1,"18":1,"19":1,"20":1,"22":1,"72":1,"77":1,"79":1,"80":1,"108":1,"125":1,"147":1,"159":1,"216":1,"237":1,"255":1,"343":1,"350":1,"376":1,"395":1,"399":1,"400":1,"402":1,"403":1,"406":1,"407":2,"518":1,"527":1,"530":1,"549":1,"585":1,"607":1,"612":2,"627":2,"628":1,"702":1,"726":1,"727":1,"735":1,"740":1,"741":1,"742":1,"758":1,"789":1,"830":1,"840":1,"844":1,"845":2,"905":2,"906":1,"914":1,"916":1,"948":1,"990":1,"1018":1,"1044":3,"1045":1,"1068":2,"1069":1,"1074":1,"1100":1,"1126":1,"1188":1,"1247":2,"1254":2,"1256":1,"1257":1,"1259":28,"1270":5,"1274":1,"1275":4,"1286":20,"1290":1,"1300":11,"1301":1,"1309":1,"1311":4,"1317":1,"1322":1,"1323":3,"1324":8,"1339":6,"1347":1,"1350":1,"1355":1,"1359":13,"1369":2,"1380":2,"1390":1,"1395":8,"1396":11,"1402":6,"1415":1,"1417":10,"1426":1,"1433":1,"1436":13,"1438":1,"1441":2,"1442":1,"1443":4,"1447":1,"1450":1,"1455":2,"1456":4,"1459":1,"1465":1,"1467":11,"1476":2,"1486":2,"1488":2,"1491":1,"1492":2,"1534":1,"1536":1,"1541":1,"1630":1,"1641":1,"1665":1,"1666":1,"1675":1,"1677":2,"1724":1,"1735":1,"1769":2,"1841":1,"1888":1,"1889":1,"1891":1,"1919":1,"1923":1,"1982":1,"1985":1,"1988":1,"2036":1,"2055":1,"2056":1,"2136":1,"2152":1,"2155":3,"2157":1,"2158":1,"2160":1,"2192":3,"2232":1}}],["signalrconfigured",{"2":{"1935":1},"3":{"1935":1}}],["signalrextensions",{"3":{"225":1,"749":1,"1150":1,"1199":1,"1203":1,"1207":2,"1208":1,"1309":1,"1311":7}}],["signalrlivechannelpublishertests",{"3":{"1199":1,"1207":2}}],["signalrlivechannelpublisher",{"2":{"225":1,"380":1,"1303":1,"1307":1,"1400":1,"1944":1,"1946":1},"3":{"225":2,"380":1,"1150":1,"1199":3,"1203":1,"1207":2,"1303":1,"1307":4,"1309":13,"1323":1,"1400":1,"1496":1,"1944":1,"1946":2}}],["signalrpushnotificationsendertests",{"3":{"1199":1,"1207":2}}],["signalrpushnotificationsenderadditionaltests",{"3":{"1199":1,"1207":2}}],["signalrpushnotificationsender",{"2":{"225":1,"1303":1,"1307":1,"1932":1,"1935":1},"3":{"225":2,"1199":4,"1203":1,"1207":2,"1300":3,"1303":1,"1307":2,"1309":16,"1323":1,"1932":1,"1935":2}}],["signalr",{"0":{"1307":1},"1":{"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"1942":1,"1943":1,"1944":1,"1945":1,"1946":1,"1947":1,"1948":1,"1949":1,"1950":1},"3":{"0":8,"25":1,"27":1,"31":1,"55":1,"61":1,"92":2,"96":1,"98":1,"100":1,"101":1,"135":1,"216":1,"222":1,"225":7,"226":1,"227":1,"228":1,"229":2,"230":2,"379":1,"380":2,"397":1,"433":1,"434":2,"507":1,"508":1,"513":1,"555":1,"556":1,"608":1,"749":1,"759":1,"774":3,"827":1,"832":1,"837":1,"838":2,"1124":1,"1149":1,"1150":1,"1192":1,"1202":2,"1203":2,"1212":1,"1213":2,"1247":1,"1285":1,"1286":4,"1296":1,"1300":8,"1302":4,"1303":2,"1304":1,"1307":1,"1308":1,"1309":43,"1311":4,"1312":4,"1320":3,"1323":8,"1324":20,"1331":1,"1338":1,"1339":5,"1397":1,"1400":1,"1402":10,"1417":4,"1433":2,"1436":10,"1437":1,"1438":8,"1441":3,"1443":1,"1447":4,"1467":10,"1474":1,"1488":1,"1489":1,"1496":1,"1512":2,"1599":1,"1656":1,"1658":1,"1666":1,"1667":1,"1669":1,"1705":1,"1779":1,"1932":1,"1933":6,"1935":5,"1936":2,"1940":2,"1941":2,"1942":3,"1944":1,"1945":1,"1946":1,"1950":3,"2024":1,"2025":1,"2110":1,"2150":2,"2152":1,"2158":1,"2208":1,"2232":1}}],["signatureverification",{"3":{"1770":1}}],["signatureverificationfailed",{"2":{"790":1},"3":{"790":1}}],["signaturemissing",{"3":{"790":1}}],["signatures",{"3":{"0":2,"31":1,"135":2,"265":1,"471":1,"676":1,"798":1,"799":1,"1115":1,"1300":3,"1301":1,"1324":2,"1349":1,"1395":1,"1396":2,"1416":1,"1431":1,"1436":3,"1455":1,"1489":1,"1496":1,"1585":1,"1671":1,"2083":1,"2232":1}}],["signature",{"3":{"0":4,"29":1,"31":1,"34":1,"108":1,"110":1,"135":5,"207":1,"208":1,"210":1,"372":1,"458":2,"498":1,"499":1,"509":1,"757":1,"790":7,"792":1,"793":2,"799":2,"803":1,"879":1,"903":1,"905":1,"907":1,"908":1,"1034":1,"1049":1,"1059":1,"1116":1,"1133":1,"1134":1,"1184":1,"1212":1,"1218":1,"1229":1,"1241":1,"1246":1,"1247":4,"1259":1,"1270":6,"1286":20,"1289":1,"1290":1,"1300":22,"1301":2,"1309":2,"1310":4,"1311":3,"1323":4,"1324":14,"1339":2,"1359":21,"1389":1,"1395":6,"1396":11,"1415":4,"1417":5,"1431":1,"1436":14,"1438":2,"1441":1,"1489":1,"1534":1,"1585":1,"1685":1,"1702":2,"1734":1,"1749":1,"1765":1,"1770":2,"1803":2,"1804":1,"1807":2,"1810":2,"1897":1,"1953":1,"1954":1,"1968":2,"1972":1,"1980":1,"1985":1,"1995":1,"2066":1,"2126":2,"2166":5,"2168":1,"2169":2,"2197":1,"2232":2}}],["sizebytes",{"3":{"1350":5,"1369":1,"1395":2}}],["size=10",{"3":{"1270":1}}],["sizes",{"3":{"237":1,"312":1,"359":1,"1018":1,"1286":2,"1300":1,"1309":1,"1324":2,"1359":1,"1369":1,"1396":2,"1398":1,"1415":1,"1436":1,"1467":1,"1559":2,"1661":1,"1678":1,"1711":1,"1748":1,"1777":1,"1825":1,"2142":1}}],["sized",{"3":{"236":1,"719":1,"996":1,"1020":1,"1150":1,"1291":1,"1300":2,"1311":2,"1324":1,"1350":4,"1359":2,"1369":3,"1380":1,"1395":3,"1396":2,"1402":2,"1415":1,"1436":1,"1438":1,"1467":5,"1478":1,"1486":1,"1523":1,"1525":1,"1526":3,"1549":1,"1554":1,"1555":1,"1560":1,"1572":2,"1591":2,"1670":1,"1909":1,"2033":1,"2037":1}}],["size",{"0":{"1198":1},"2":{"1986":1},"3":{"137":1,"140":1,"311":1,"330":3,"331":1,"335":2,"337":1,"360":2,"434":1,"438":1,"558":2,"609":1,"673":1,"692":1,"740":1,"741":2,"766":1,"788":1,"872":1,"881":1,"915":1,"1116":2,"1118":1,"1187":1,"1198":1,"1201":1,"1228":1,"1229":2,"1242":1,"1243":2,"1244":2,"1245":1,"1247":13,"1259":1,"1286":7,"1300":5,"1309":5,"1311":7,"1320":1,"1323":11,"1324":23,"1344":1,"1350":11,"1359":11,"1380":1,"1387":2,"1389":2,"1395":33,"1396":16,"1398":1,"1402":1,"1406":1,"1415":9,"1417":1,"1422":2,"1436":1,"1438":3,"1467":1,"1479":2,"1496":1,"1526":3,"1529":1,"1560":1,"1577":1,"1589":1,"1596":1,"1599":2,"1631":3,"1639":1,"1640":2,"1662":1,"1669":1,"1673":1,"1678":2,"1714":2,"1764":1,"1765":1,"1777":3,"1797":1,"1817":1,"1845":1,"1911":1,"1986":2,"1987":1,"1988":2,"1991":1,"2050":1,"2072":1,"2126":2,"2128":2,"2142":1,"2143":2,"2159":1,"2167":3,"2174":1}}],["sizing",{"3":{"0":1,"682":1,"867":1,"875":1,"1300":1,"1309":1,"1324":1,"1350":1,"1369":2,"1390":1,"1396":3,"1455":1,"1465":1,"1467":3,"1469":2,"1526":1,"1534":1,"1568":1,"1574":1,"1575":3,"1577":2,"1585":1,"1602":1,"1675":1,"1676":1,"1799":1}}],["simulated",{"3":{"1436":3,"1671":1,"1707":2}}],["simulate",{"3":{"1324":1,"1417":1,"1436":1,"1707":1}}],["simultaneous",{"3":{"0":1,"159":1,"856":1,"1124":1,"1311":2,"1323":1,"1324":2,"1339":1,"1357":1,"1359":2,"1396":1,"1416":1,"1667":1,"1982":1,"2000":1,"2169":1}}],["simultaneously",{"3":{"0":1,"40":1,"501":1,"690":1,"907":1,"1323":2,"1339":2,"1380":1,"1396":4,"1436":2,"1443":2,"1638":1,"1670":1}}],["similarityscore",{"3":{"1350":1}}],["similarity",{"3":{"1350":4,"1359":7,"1376":2,"1380":1,"1390":1,"1395":2,"1632":1,"1640":1}}],["similarly",{"3":{"1350":1,"1638":1,"1639":1}}],["similarsessionpair",{"3":{"1199":4,"1203":1,"1207":1,"1347":1,"1350":2,"1359":2}}],["similar",{"3":{"158":1,"725":1,"827":1,"973":1,"1229":1,"1350":5,"1369":1,"1373":1,"1415":1,"1467":1,"1640":1,"1834":1}}],["simplify",{"3":{"1631":1}}],["simplifying",{"3":{"1395":1,"1641":1}}],["simplification",{"3":{"1339":1,"1402":1,"1417":1}}],["simplifies",{"3":{"310":1,"1417":1,"1638":2}}],["simplename",{"3":{"1436":3}}],["simpletypename",{"3":{"1436":1}}],["simplest",{"3":{"1286":2,"1323":1,"1353":1,"1359":5,"1380":1,"1383":1,"1395":2,"1396":1,"1436":5,"1445":1,"1617":1,"1681":1}}],["simple",{"3":{"136":1,"160":1,"161":1,"196":1,"341":1,"372":1,"699":1,"1074":1,"1117":1,"1196":2,"1247":1,"1270":1,"1286":1,"1300":1,"1309":1,"1311":3,"1323":6,"1324":4,"1339":1,"1341":1,"1357":1,"1359":3,"1369":1,"1380":1,"1395":4,"1396":7,"1402":1,"1415":4,"1416":1,"1436":9,"1638":2,"1641":1,"1853":1,"1875":1,"1958":1,"2079":1,"2238":1}}],["simpler",{"3":{"48":1,"811":1,"871":1,"1034":1,"1323":1,"1324":4,"1350":2,"1359":1,"1395":1,"1396":2,"1436":1,"1650":1,"1658":1,"1703":1,"1705":1,"1848":1,"2063":1}}],["simply",{"3":{"22":1,"24":1,"79":1,"117":1,"135":1,"137":1,"213":1,"224":1,"225":1,"235":1,"295":1,"342":1,"343":1,"399":1,"415":1,"464":1,"539":1,"585":1,"599":1,"676":1,"681":1,"709":1,"717":1,"751":1,"840":1,"907":1,"933":1,"963":1,"1042":1,"1059":1,"1084":1,"1232":1,"1234":1,"1237":2,"1239":1,"1241":1,"1243":1,"1247":5,"1251":1,"1254":1,"1256":1,"1259":5,"1270":8,"1271":1,"1276":1,"1286":12,"1297":1,"1300":10,"1301":6,"1302":1,"1309":8,"1310":1,"1311":14,"1316":1,"1323":7,"1324":15,"1339":6,"1343":1,"1350":6,"1353":1,"1359":19,"1369":1,"1375":1,"1380":3,"1389":1,"1395":15,"1396":18,"1401":1,"1402":4,"1415":8,"1416":5,"1417":22,"1427":1,"1431":1,"1436":18,"1438":2,"1449":1,"1455":1,"1467":2,"1488":1,"1640":1,"1641":1,"1810":1,"1841":1,"1851":1,"1863":1,"1870":1,"1880":1,"1885":1,"1889":1,"1916":1,"1946":1,"1948":1,"1977":1,"2001":1,"2006":1,"2010":1,"2066":1,"2092":1,"2097":1,"2117":1,"2139":1,"2156":1,"2188":1,"2196":1}}],["sid",{"2":{"903":1,"906":1,"909":1},"3":{"0":4,"903":1,"905":5,"906":2,"907":3,"909":1,"1059":1,"1289":1,"1290":3,"1296":2,"1300":23,"1311":3,"1324":1,"1438":2,"1667":1}}],["sideways",{"3":{"1436":2,"2128":1}}],["sidekick",{"3":{"1313":1}}],["sided",{"3":{"1300":1,"1339":1,"1369":1,"1436":2}}],["sidebar",{"3":{"881":1,"1324":11,"1409":1,"1414":2,"1415":3,"1438":1,"1712":1,"1713":1,"1750":1,"1773":1}}],["sides",{"3":{"122":1,"180":1,"243":1,"286":1,"556":1,"631":1,"640":1,"720":1,"827":1,"975":1,"1050":1,"1212":1,"1236":1,"1237":3,"1241":1,"1247":2,"1270":4,"1271":1,"1276":1,"1277":1,"1286":5,"1289":1,"1300":5,"1309":2,"1311":2,"1312":2,"1323":1,"1324":5,"1339":1,"1350":1,"1359":5,"1380":1,"1396":3,"1415":2,"1436":13,"1488":1,"1577":1,"1641":1,"1651":1,"1839":1,"1979":1,"2044":1,"2096":1,"2136":1,"2157":2}}],["sidesteps",{"3":{"92":1,"1270":1,"1286":2,"1300":1,"1323":1,"1359":1,"1396":2,"1402":1,"1415":1,"1436":1,"1467":1,"1872":1}}],["side",{"0":{"141":1,"926":1,"1227":1,"1265":1,"1306":1,"1634":1,"1841":1,"2018":1,"2019":1},"1":{"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"202":1,"203":1,"504":1,"505":1,"506":1,"507":1,"508":1,"509":1,"510":1,"511":1,"512":1,"513":1,"514":1,"878":1,"879":1,"880":1,"881":1,"882":1,"883":1,"884":1,"885":1,"894":1,"895":1,"896":1,"897":1,"898":1,"899":1,"900":1,"901":1,"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":1},"3":{"0":27,"15":1,"21":1,"24":3,"31":2,"39":1,"53":2,"66":1,"72":1,"73":2,"99":1,"100":1,"103":1,"109":4,"113":2,"117":1,"121":1,"122":3,"124":1,"126":1,"128":1,"135":1,"139":2,"141":2,"145":2,"147":2,"150":3,"166":2,"168":2,"175":1,"180":1,"192":1,"193":1,"194":1,"199":1,"201":1,"207":1,"208":1,"236":1,"239":1,"245":1,"248":1,"255":2,"258":1,"264":1,"265":3,"267":1,"273":2,"295":1,"298":1,"330":2,"335":1,"337":1,"342":1,"343":1,"346":1,"350":3,"351":1,"353":3,"360":1,"363":1,"379":1,"387":1,"388":1,"389":1,"391":1,"399":1,"400":1,"401":3,"408":1,"415":1,"418":1,"419":1,"420":1,"433":1,"434":1,"436":1,"451":1,"470":1,"490":1,"499":1,"501":2,"504":1,"507":3,"508":1,"509":1,"518":1,"536":1,"537":1,"545":1,"549":1,"551":1,"557":1,"560":1,"591":2,"599":2,"601":1,"612":1,"629":1,"633":2,"635":1,"640":1,"645":1,"648":1,"649":2,"650":2,"653":1,"657":1,"665":2,"668":2,"674":1,"684":1,"690":3,"692":3,"693":2,"696":1,"697":1,"698":2,"701":1,"702":2,"725":1,"741":1,"756":1,"758":1,"770":1,"785":1,"786":1,"790":2,"795":1,"818":2,"827":6,"829":2,"830":1,"833":1,"836":2,"839":2,"844":1,"845":1,"846":1,"848":2,"860":3,"861":1,"865":3,"870":1,"878":1,"880":1,"881":6,"883":2,"885":2,"894":1,"897":7,"898":2,"899":1,"901":1,"904":1,"905":1,"919":1,"920":1,"921":1,"922":2,"923":1,"924":1,"925":1,"926":2,"930":1,"935":1,"984":1,"995":1,"1012":3,"1017":1,"1018":3,"1020":2,"1021":2,"1028":1,"1041":1,"1044":2,"1066":1,"1067":1,"1068":1,"1085":1,"1093":1,"1094":2,"1100":1,"1115":1,"1118":1,"1126":1,"1160":1,"1182":1,"1184":4,"1185":1,"1187":2,"1202":1,"1203":1,"1212":14,"1219":1,"1220":2,"1222":2,"1225":2,"1227":2,"1228":1,"1229":9,"1231":1,"1233":1,"1237":11,"1238":2,"1240":1,"1242":2,"1243":2,"1245":2,"1247":28,"1248":1,"1249":2,"1252":3,"1253":1,"1258":3,"1259":24,"1260":4,"1261":1,"1262":1,"1263":6,"1265":2,"1268":1,"1269":3,"1270":71,"1271":7,"1274":1,"1278":3,"1282":1,"1284":3,"1285":3,"1286":45,"1287":1,"1292":1,"1293":1,"1298":1,"1300":62,"1301":7,"1304":1,"1305":2,"1306":2,"1308":2,"1309":29,"1310":6,"1311":38,"1312":22,"1313":1,"1317":2,"1318":4,"1322":1,"1323":36,"1324":135,"1325":6,"1326":1,"1330":2,"1337":3,"1339":37,"1342":2,"1344":1,"1349":1,"1350":47,"1352":1,"1353":1,"1355":5,"1357":2,"1359":136,"1362":1,"1366":2,"1368":2,"1369":12,"1370":1,"1374":2,"1375":1,"1378":1,"1380":21,"1383":2,"1385":1,"1387":1,"1388":3,"1389":1,"1390":1,"1391":1,"1392":4,"1393":1,"1395":85,"1396":127,"1399":2,"1400":1,"1401":1,"1402":38,"1405":1,"1406":1,"1413":1,"1414":1,"1415":50,"1416":19,"1417":35,"1422":1,"1424":2,"1427":6,"1429":1,"1430":1,"1433":2,"1435":5,"1436":88,"1437":1,"1438":17,"1441":4,"1443":3,"1444":1,"1445":1,"1447":5,"1449":1,"1451":1,"1455":3,"1456":1,"1461":2,"1467":8,"1475":2,"1476":3,"1487":1,"1488":4,"1489":1,"1492":4,"1494":1,"1496":7,"1526":13,"1531":1,"1532":1,"1534":4,"1535":2,"1543":1,"1545":1,"1547":2,"1553":1,"1560":3,"1561":2,"1563":1,"1566":1,"1572":4,"1575":3,"1576":1,"1577":9,"1582":2,"1585":2,"1586":1,"1589":1,"1591":5,"1596":4,"1597":1,"1598":1,"1599":3,"1627":5,"1630":1,"1631":2,"1632":8,"1634":1,"1635":1,"1638":1,"1639":3,"1640":2,"1641":4,"1647":1,"1651":4,"1653":1,"1661":2,"1665":3,"1666":3,"1667":3,"1668":3,"1669":2,"1670":2,"1675":2,"1677":1,"1685":1,"1687":1,"1702":1,"1720":1,"1721":1,"1726":2,"1748":1,"1749":1,"1750":2,"1757":1,"1759":2,"1761":1,"1765":1,"1767":2,"1773":1,"1781":1,"1800":1,"1805":5,"1808":1,"1810":1,"1814":1,"1815":2,"1820":1,"1821":2,"1843":2,"1845":1,"1853":1,"1854":1,"1856":2,"1883":4,"1902":2,"1903":1,"1906":1,"1910":2,"1911":2,"1912":1,"1913":1,"1916":2,"1919":3,"1920":1,"1924":1,"1927":2,"1928":1,"1929":1,"1935":1,"1936":1,"1942":1,"1944":1,"1945":1,"1946":1,"1952":2,"1953":2,"1956":4,"1957":2,"1959":1,"1966":2,"1968":3,"1970":1,"1972":2,"1973":1,"1975":2,"1977":1,"1979":2,"1982":2,"1983":1,"1984":1,"1985":2,"1988":2,"2002":1,"2004":2,"2006":3,"2018":1,"2019":1,"2028":2,"2030":3,"2036":1,"2056":1,"2064":1,"2070":1,"2072":2,"2073":1,"2074":1,"2077":2,"2078":2,"2079":1,"2083":1,"2085":1,"2086":1,"2127":1,"2136":1,"2138":1,"2141":1,"2156":2,"2159":2,"2162":1,"2165":3,"2166":1,"2167":1,"2171":1,"2174":1,"2179":1,"2182":1,"2187":1,"2189":1,"2192":2,"2193":1,"2198":1,"2230":1,"2232":5}}],["siblings",{"3":{"509":1,"511":1,"703":1,"773":1,"914":1,"980":1,"1212":1,"1234":1,"1247":2,"1258":1,"1271":1,"1281":1,"1282":1,"1286":3,"1300":2,"1301":1,"1311":3,"1324":5,"1326":2,"1330":1,"1336":1,"1339":5,"1350":11,"1353":3,"1359":28,"1369":1,"1371":1,"1380":2,"1382":1,"1395":11,"1396":9,"1401":1,"1402":4,"1404":1,"1411":1,"1415":4,"1416":1,"1417":30,"1431":2,"1436":13,"1441":3,"1467":1,"1489":1,"1496":1,"1577":1,"1591":2,"2165":1}}],["sibling",{"0":{"1948":1},"3":{"0":4,"194":1,"247":1,"255":1,"256":1,"258":1,"265":4,"291":1,"406":1,"443":1,"538":1,"568":1,"614":1,"630":1,"645":1,"657":1,"694":1,"711":1,"725":1,"741":1,"750":1,"753":1,"765":1,"770":1,"782":1,"852":1,"854":2,"865":1,"881":1,"905":1,"922":1,"926":1,"935":1,"963":1,"973":1,"975":2,"976":2,"1120":1,"1133":1,"1136":1,"1184":1,"1193":1,"1212":2,"1223":1,"1228":1,"1229":2,"1237":5,"1247":1,"1252":2,"1256":1,"1259":6,"1260":1,"1267":1,"1270":11,"1271":2,"1278":1,"1282":1,"1285":1,"1286":16,"1295":1,"1296":1,"1300":11,"1309":4,"1310":4,"1311":17,"1316":1,"1323":10,"1324":27,"1339":13,"1343":1,"1344":1,"1350":13,"1352":1,"1353":1,"1356":1,"1359":55,"1369":4,"1380":14,"1395":13,"1396":19,"1402":21,"1407":2,"1415":18,"1416":3,"1417":8,"1427":1,"1431":1,"1436":55,"1438":2,"1456":1,"1475":1,"1486":1,"1489":1,"1491":1,"1492":1,"1496":8,"1497":2,"1526":2,"1577":2,"1593":1,"1653":2,"1654":1,"1749":1,"1950":1,"2043":2,"2067":1,"2085":1,"2092":1,"2151":2,"2183":1}}],["situations",{"3":{"1417":1,"1982":1,"2167":1}}],["situation",{"3":{"1300":1,"1324":1,"1380":1,"1396":2,"1415":1,"1436":1,"1908":1}}],["sitting",{"3":{"178":1,"198":1,"235":1,"257":1,"486":1,"536":1,"545":1,"572":1,"826":1,"1004":1,"1050":1,"1117":1,"1259":1,"1270":1,"1300":3,"1302":1,"1323":2,"1324":4,"1339":1,"1359":1,"1380":3,"1395":1,"1396":3,"1415":1,"1416":2,"1417":1,"1436":8,"1443":2,"1463":1,"1465":1,"1467":2,"1749":1,"1765":1,"1843":1,"1902":1,"1903":1,"1966":1,"1973":1,"1980":1,"2054":1,"2062":1,"2065":1,"2067":1,"2075":1,"2149":1,"2170":1}}],["sitemap",{"3":{"609":1,"1300":1,"1467":3,"2158":3}}],["sites",{"3":{"0":9,"93":1,"94":1,"95":1,"104":1,"111":1,"128":3,"223":1,"230":2,"254":1,"257":1,"260":1,"261":1,"281":1,"310":1,"314":1,"323":1,"326":1,"330":1,"418":1,"429":1,"453":1,"454":1,"483":2,"484":2,"486":2,"487":2,"488":2,"489":2,"490":2,"491":2,"492":2,"493":2,"494":3,"516":1,"522":3,"523":2,"545":2,"549":1,"550":2,"552":3,"647":1,"668":1,"669":1,"688":1,"693":1,"696":4,"698":1,"700":1,"703":1,"752":1,"782":1,"819":1,"837":1,"884":1,"897":2,"899":1,"900":2,"994":2,"996":1,"999":2,"1036":1,"1100":1,"1127":1,"1132":1,"1134":1,"1175":2,"1176":1,"1212":1,"1237":3,"1240":1,"1247":5,"1250":1,"1262":1,"1267":1,"1270":2,"1271":4,"1276":1,"1286":20,"1300":19,"1301":6,"1310":1,"1311":6,"1312":1,"1318":2,"1323":5,"1324":12,"1339":1,"1350":7,"1359":8,"1369":1,"1387":1,"1395":4,"1396":13,"1402":1,"1415":1,"1417":4,"1427":1,"1436":22,"1438":1,"1442":1,"1496":1,"1510":1,"1535":1,"1810":1,"1815":1,"1851":1,"1882":1,"1995":3,"2063":1,"2156":1,"2157":1}}],["site",{"3":{"0":8,"67":1,"109":3,"111":1,"113":1,"118":1,"121":1,"184":1,"207":2,"209":1,"217":1,"230":2,"279":2,"285":1,"303":1,"308":1,"310":3,"318":2,"325":1,"336":1,"353":1,"386":1,"387":1,"395":3,"397":1,"419":1,"420":1,"424":1,"446":3,"472":1,"480":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1,"516":1,"517":2,"523":1,"524":2,"545":3,"549":1,"650":1,"655":1,"657":2,"663":1,"665":2,"667":1,"669":1,"674":2,"696":1,"700":1,"733":1,"777":1,"782":1,"799":2,"800":1,"803":1,"819":2,"827":2,"832":1,"838":1,"846":1,"861":2,"889":1,"896":1,"900":1,"926":1,"934":1,"946":1,"948":1,"950":1,"952":1,"955":1,"964":2,"980":1,"981":1,"990":1,"1050":1,"1051":1,"1052":1,"1100":1,"1102":1,"1116":1,"1123":1,"1124":1,"1126":1,"1133":2,"1136":1,"1176":1,"1179":1,"1184":1,"1187":1,"1212":1,"1221":1,"1229":7,"1236":1,"1237":7,"1241":1,"1246":1,"1247":10,"1259":3,"1270":10,"1271":5,"1280":1,"1286":37,"1297":1,"1298":2,"1300":23,"1301":4,"1309":8,"1310":5,"1311":14,"1312":3,"1323":14,"1324":40,"1332":1,"1339":12,"1344":1,"1350":9,"1359":30,"1366":1,"1369":4,"1380":1,"1392":1,"1395":15,"1396":28,"1402":2,"1415":11,"1416":9,"1417":12,"1427":4,"1436":49,"1438":3,"1444":1,"1447":3,"1448":1,"1467":3,"1534":2,"1566":1,"1620":1,"1659":1,"1666":1,"1667":1,"1673":1,"1675":1,"1701":1,"1756":1,"1793":1,"1802":1,"1806":1,"1807":1,"1810":1,"1813":1,"1815":2,"1817":1,"1821":1,"1826":1,"1827":2,"1843":1,"1846":1,"1853":1,"1868":1,"1877":1,"1886":2,"1892":2,"1899":1,"1905":1,"1915":2,"1919":1,"1930":1,"1939":1,"1950":1,"1965":1,"1969":5,"1971":1,"1972":2,"1975":1,"1979":1,"1985":1,"1991":1,"1997":1,"2000":1,"2002":1,"2012":1,"2024":1,"2030":2,"2063":1,"2069":1,"2086":1,"2108":1,"2115":1,"2121":1,"2124":1,"2128":1,"2133":1,"2149":1,"2150":1,"2153":1,"2160":1,"2169":1,"2175":1,"2179":1,"2180":1,"2189":1,"2193":1,"2203":1,"2211":1,"2233":1}}],["sit",{"0":{"1303":1},"3":{"0":6,"25":1,"27":1,"64":1,"71":1,"80":1,"95":1,"147":1,"180":1,"182":1,"201":1,"242":1,"281":1,"287":1,"344":1,"423":1,"455":1,"459":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":2,"494":1,"495":2,"509":1,"511":1,"566":1,"572":1,"599":1,"609":1,"626":1,"627":1,"632":1,"633":1,"649":1,"674":2,"676":2,"751":1,"766":1,"798":1,"814":1,"815":1,"823":1,"832":1,"834":1,"862":1,"926":1,"954":1,"968":1,"980":1,"982":1,"992":1,"1051":1,"1055":1,"1067":1,"1117":1,"1144":1,"1168":1,"1192":1,"1211":1,"1212":2,"1213":1,"1220":1,"1229":1,"1230":1,"1237":1,"1249":1,"1258":1,"1259":1,"1260":1,"1269":1,"1270":3,"1271":3,"1275":1,"1278":1,"1284":1,"1285":1,"1286":6,"1300":4,"1311":7,"1316":1,"1317":2,"1322":1,"1323":4,"1324":11,"1330":1,"1332":1,"1339":8,"1347":1,"1350":4,"1354":1,"1359":16,"1371":1,"1372":1,"1378":1,"1379":1,"1380":2,"1389":1,"1391":1,"1395":5,"1396":9,"1402":2,"1403":1,"1414":1,"1415":6,"1416":1,"1417":3,"1421":2,"1431":1,"1436":20,"1438":2,"1441":1,"1445":1,"1447":2,"1453":1,"1459":1,"1467":2,"1489":3,"1490":2,"1496":2,"1498":2,"1523":2,"1531":1,"1551":1,"1574":3,"1577":10,"1581":1,"1582":3,"1583":1,"1584":1,"1591":6,"1596":2,"1597":1,"1599":2,"1627":2,"1630":1,"1640":1,"1767":2,"1781":2,"1784":1,"1810":1,"1851":1,"1855":1,"1856":1,"1864":1,"1883":1,"1898":1,"1904":1,"1927":1,"1956":1,"1975":1,"2000":1,"2010":1,"2053":1,"2111":1,"2172":1,"2196":1,"2198":1,"2203":1,"2208":1,"2232":1}}],["sits",{"0":{"1237":1,"1286":1,"1309":1},"3":{"0":5,"109":1,"122":3,"123":1,"135":1,"141":1,"149":1,"150":1,"152":1,"162":1,"178":1,"182":1,"218":1,"230":1,"237":1,"255":2,"259":1,"279":1,"287":1,"291":1,"295":1,"310":1,"317":1,"346":1,"349":1,"355":1,"366":1,"373":1,"380":1,"395":1,"407":1,"411":1,"416":1,"423":2,"427":1,"428":1,"457":1,"459":1,"462":1,"464":1,"491":1,"492":3,"493":3,"494":1,"495":1,"524":1,"536":1,"538":1,"544":1,"560":1,"564":1,"567":1,"575":1,"577":1,"591":1,"609":2,"619":1,"631":1,"633":2,"638":1,"665":2,"682":1,"692":1,"701":1,"706":1,"724":1,"736":1,"748":1,"749":3,"766":1,"768":1,"784":1,"803":1,"821":1,"823":1,"827":1,"856":1,"897":1,"905":1,"914":1,"953":1,"957":1,"963":2,"966":1,"967":1,"979":2,"980":1,"1004":1,"1014":1,"1018":1,"1034":1,"1052":1,"1054":1,"1059":1,"1066":1,"1077":1,"1093":1,"1124":1,"1125":1,"1137":1,"1167":1,"1212":3,"1229":1,"1230":1,"1233":1,"1237":2,"1247":1,"1259":31,"1263":7,"1265":1,"1270":15,"1271":5,"1278":1,"1285":2,"1286":11,"1297":1,"1299":1,"1300":9,"1301":2,"1304":1,"1309":3,"1310":1,"1311":10,"1316":3,"1323":19,"1324":16,"1328":1,"1330":1,"1336":1,"1337":1,"1339":7,"1343":1,"1347":1,"1348":2,"1350":4,"1351":1,"1359":12,"1369":2,"1371":1,"1372":1,"1373":1,"1375":1,"1380":1,"1388":1,"1393":1,"1395":10,"1396":23,"1402":4,"1404":1,"1410":1,"1415":6,"1416":4,"1417":8,"1421":1,"1425":1,"1429":1,"1433":1,"1435":1,"1436":18,"1438":2,"1443":1,"1447":1,"1453":1,"1455":1,"1456":1,"1460":1,"1467":3,"1473":1,"1474":1,"1475":2,"1479":1,"1486":1,"1490":1,"1492":5,"1503":1,"1504":2,"1507":1,"1523":1,"1524":2,"1526":2,"1527":1,"1534":2,"1544":1,"1554":1,"1574":1,"1577":2,"1582":2,"1588":1,"1591":3,"1592":1,"1631":2,"1648":1,"1653":1,"1662":1,"1695":1,"1749":1,"1757":1,"1758":1,"1766":1,"1784":1,"1799":1,"1800":1,"1804":1,"1815":1,"1821":7,"1825":1,"1828":1,"1831":1,"1839":1,"1856":1,"1881":1,"1889":1,"1890":1,"1902":2,"1916":3,"1918":1,"1921":1,"1922":3,"1929":1,"1938":1,"1944":1,"1947":1,"1953":1,"1972":1,"1988":1,"2000":3,"2007":1,"2032":1,"2046":1,"2048":1,"2050":1,"2064":1,"2078":1,"2091":1,"2096":2,"2100":1,"2126":2,"2136":1,"2149":1,"2156":1,"2158":1,"2161":1,"2165":1,"2168":1,"2171":1,"2177":1,"2179":1,"2195":1,"2199":1,"2232":1}}],["sixlaborslicensekey",{"3":{"1436":1}}],["sixlabors",{"2":{"145":1,"147":1},"3":{"145":2,"147":1,"1323":1,"1431":1,"1436":3,"1489":1}}],["sixty",{"3":{"1359":1,"1395":1,"1415":1,"1985":1}}],["sixteen",{"3":{"130":1,"138":2,"139":1,"141":2,"468":1,"554":1,"672":1,"1217":1,"1229":1,"1263":1,"1286":1,"1324":2,"1339":1,"1359":2,"1369":2,"1372":1,"1417":1,"1436":1,"1438":1,"1455":1,"1486":1,"1496":1}}],["sixth",{"3":{"19":1,"142":1,"258":1,"259":1,"261":1,"350":1,"688":1,"761":1,"776":1,"806":1,"1004":1,"1270":1,"1359":2,"1415":2,"1428":1,"1431":1,"1433":1,"1467":1,"1488":1,"1977":1}}],["six",{"0":{"140":1,"1445":1},"1":{"936":1,"937":1,"938":1,"939":1,"940":1,"941":1,"942":1},"3":{"0":19,"62":1,"63":1,"115":1,"122":1,"126":1,"130":1,"136":1,"140":1,"142":1,"145":2,"147":1,"184":1,"186":1,"251":1,"252":1,"335":1,"413":1,"429":1,"440":1,"466":2,"468":1,"470":1,"476":2,"478":1,"526":1,"531":1,"545":1,"554":1,"572":3,"589":1,"593":1,"599":1,"603":1,"607":5,"609":3,"625":1,"632":1,"657":3,"658":1,"660":1,"672":1,"674":2,"696":3,"707":2,"757":2,"760":1,"798":1,"800":2,"804":2,"832":1,"867":1,"868":2,"869":1,"875":1,"881":1,"897":2,"905":1,"936":1,"938":4,"939":2,"940":4,"946":1,"954":2,"955":1,"980":1,"981":1,"982":2,"986":1,"991":1,"998":1,"1004":1,"1017":1,"1018":3,"1019":2,"1020":1,"1033":1,"1048":1,"1051":1,"1060":1,"1068":1,"1116":1,"1191":1,"1211":2,"1212":1,"1234":1,"1237":4,"1244":2,"1247":10,"1259":1,"1260":2,"1268":1,"1270":4,"1271":15,"1286":10,"1293":1,"1300":8,"1309":4,"1311":2,"1312":1,"1322":1,"1323":6,"1324":14,"1339":5,"1342":1,"1343":1,"1346":1,"1350":12,"1359":53,"1362":1,"1364":1,"1366":2,"1369":13,"1375":1,"1377":1,"1380":1,"1383":2,"1395":16,"1396":16,"1402":4,"1415":6,"1416":1,"1417":1,"1433":1,"1436":84,"1439":1,"1441":2,"1442":1,"1443":1,"1445":9,"1449":1,"1450":5,"1454":1,"1455":10,"1461":1,"1464":1,"1465":5,"1466":1,"1467":27,"1469":2,"1472":1,"1474":3,"1488":2,"1489":3,"1492":1,"1496":10,"1497":1,"1503":1,"1525":2,"1526":4,"1535":2,"1577":2,"1591":1,"1602":1,"1630":1,"1631":1,"1651":1,"1660":1,"1661":2,"1662":1,"1666":1,"1674":1,"1684":1,"1686":2,"1692":1,"1693":3,"1717":1,"1725":1,"1726":1,"1727":2,"1728":2,"1781":1,"1794":1,"1801":1,"1809":1,"1810":3,"1826":1,"1829":2,"1881":1,"1902":1,"1913":1,"1948":2,"1951":1,"1958":1,"1987":1,"2034":1,"2037":2,"2038":1,"2044":1,"2055":1,"2075":1,"2110":1,"2127":1,"2128":1,"2138":1,"2147":1,"2158":1,"2167":1,"2193":1,"2198":1,"2200":1,"2226":1,"2227":2,"2232":2,"2234":1}}],["sin",{"3":{"2047":1}}],["singular",{"3":{"872":1,"1324":1,"1359":3,"1436":1,"1577":1,"1695":1,"1727":3,"1728":3,"1729":1,"2089":1}}],["singly",{"3":{"386":1,"1402":1}}],["singles",{"3":{"1496":1}}],["singleserviceprovider",{"3":{"1199":2,"1207":1}}],["singleframesettlescript",{"3":{"1436":1}}],["singlecapture",{"3":{"1436":1}}],["singlecontextfactory",{"3":{"1199":2,"1207":1}}],["singletop",{"3":{"1416":1}}],["singletonstateregistration",{"3":{"1436":1}}],["singletonscan",{"3":{"1436":1}}],["singletons",{"3":{"522":1,"536":1,"651":1,"884":1,"1100":1,"1219":1,"1229":4,"1237":2,"1252":1,"1259":2,"1262":1,"1270":1,"1286":1,"1300":1,"1316":4,"1323":3,"1324":1,"1377":1,"1380":1,"1395":1,"1396":2,"1399":1,"1415":1,"1417":4,"1436":1,"1438":1,"1555":1,"1883":1,"2163":2}}],["singleton",{"3":{"0":6,"200":1,"201":1,"235":1,"303":1,"310":2,"413":1,"511":1,"518":2,"649":1,"698":1,"699":1,"700":1,"703":1,"790":1,"831":1,"832":1,"846":1,"850":1,"881":3,"946":1,"954":1,"980":1,"1050":1,"1089":1,"1091":2,"1100":3,"1124":2,"1133":2,"1212":2,"1229":1,"1237":2,"1247":1,"1253":1,"1259":8,"1262":1,"1267":1,"1269":1,"1270":3,"1277":2,"1278":1,"1279":2,"1283":1,"1286":48,"1300":21,"1301":2,"1309":2,"1310":1,"1311":28,"1315":1,"1316":2,"1320":1,"1323":22,"1324":25,"1332":2,"1339":12,"1350":3,"1355":2,"1359":8,"1368":1,"1369":2,"1395":4,"1396":18,"1402":2,"1413":1,"1415":5,"1416":6,"1417":64,"1424":1,"1427":10,"1436":18,"1438":2,"1443":2,"1488":1,"1526":1,"1539":1,"1556":1,"1577":1,"1591":1,"1669":1,"1750":1,"1773":1,"1810":1,"1849":3,"1851":1,"1881":1,"1920":1,"1947":1,"2000":1,"2095":1,"2118":1,"2121":2,"2166":1,"2183":1}}],["singlewriter",{"3":{"1396":1}}],["singleordefaultasync",{"3":{"1286":1}}],["singlereader",{"2":{"1947":1,"2183":1},"3":{"0":2,"518":1,"1100":1,"1212":2,"1396":3,"1400":1,"1947":1,"2183":1}}],["single",{"0":{"94":1,"170":1,"1294":1,"2044":1},"1":{"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"496":1,"497":1,"498":1,"499":1,"500":1,"501":1,"502":1,"503":1,"1854":1,"1855":1,"1856":1,"1857":1,"1858":1,"1859":1,"1860":1,"1861":1,"1862":1,"2081":1,"2082":1,"2083":1,"2084":1,"2085":1,"2086":1},"3":{"0":39,"11":1,"15":1,"23":1,"24":1,"26":1,"30":1,"31":2,"32":1,"45":1,"46":2,"47":1,"48":1,"57":1,"58":1,"59":2,"60":1,"62":3,"67":1,"68":3,"69":1,"73":1,"83":1,"85":2,"86":2,"87":1,"91":1,"92":1,"99":1,"100":1,"115":1,"117":1,"121":1,"125":2,"128":1,"132":1,"135":2,"145":1,"147":1,"149":1,"157":3,"159":1,"160":1,"166":3,"174":1,"175":1,"176":2,"179":1,"180":1,"186":1,"194":1,"195":1,"196":2,"201":1,"202":1,"214":1,"216":1,"217":1,"220":1,"230":1,"233":1,"234":2,"235":3,"242":2,"243":2,"245":1,"246":1,"248":1,"249":1,"255":1,"259":1,"263":1,"264":1,"265":2,"266":1,"273":2,"281":1,"290":1,"310":2,"311":2,"312":1,"317":1,"318":3,"319":1,"320":1,"333":1,"340":1,"341":1,"350":3,"351":1,"352":1,"359":5,"360":1,"361":1,"365":1,"369":1,"370":2,"380":1,"382":3,"386":1,"388":1,"389":1,"390":2,"396":1,"397":1,"398":1,"405":1,"407":1,"412":1,"413":1,"418":1,"419":1,"420":2,"421":1,"422":1,"427":1,"428":2,"429":1,"446":2,"447":1,"448":2,"449":1,"459":1,"469":1,"475":1,"476":1,"491":1,"492":2,"496":1,"497":1,"499":2,"501":1,"503":1,"505":1,"506":2,"507":3,"508":1,"509":1,"510":1,"511":1,"518":1,"519":1,"526":1,"528":1,"536":1,"538":1,"539":1,"540":1,"545":4,"546":1,"549":1,"556":2,"564":1,"573":1,"582":2,"583":3,"584":1,"589":1,"608":1,"609":1,"618":1,"626":2,"627":1,"629":1,"633":1,"638":1,"649":1,"657":1,"659":1,"664":1,"665":3,"666":1,"674":3,"676":1,"681":1,"688":1,"690":3,"691":3,"693":1,"698":3,"702":1,"707":1,"709":1,"714":1,"731":1,"733":1,"735":2,"736":1,"741":1,"748":1,"756":1,"757":2,"758":1,"759":1,"766":1,"775":1,"781":1,"782":2,"790":2,"792":1,"795":1,"799":2,"808":1,"810":3,"819":1,"820":1,"821":1,"825":1,"826":1,"827":5,"830":2,"836":1,"837":1,"838":1,"853":1,"854":1,"855":2,"861":1,"862":1,"863":1,"872":1,"881":1,"889":1,"891":1,"893":1,"898":1,"904":2,"905":1,"906":1,"907":1,"910":1,"912":1,"922":2,"930":1,"941":1,"945":1,"946":3,"947":1,"954":1,"955":1,"971":2,"972":2,"973":1,"974":2,"976":1,"980":2,"981":1,"982":1,"988":2,"990":1,"996":4,"997":1,"1004":1,"1012":3,"1018":2,"1020":1,"1021":1,"1026":1,"1033":1,"1034":2,"1041":2,"1044":1,"1058":1,"1066":1,"1067":1,"1069":1,"1083":1,"1087":1,"1099":1,"1100":1,"1101":1,"1116":1,"1123":1,"1124":5,"1126":1,"1150":5,"1152":1,"1157":1,"1161":1,"1162":1,"1183":1,"1185":1,"1191":1,"1192":2,"1202":1,"1203":1,"1212":13,"1213":1,"1218":1,"1220":1,"1221":1,"1225":1,"1227":1,"1228":1,"1229":6,"1231":1,"1232":1,"1234":1,"1236":2,"1237":24,"1239":1,"1241":2,"1243":1,"1244":1,"1246":1,"1247":38,"1248":1,"1250":1,"1251":1,"1252":2,"1253":1,"1254":1,"1256":1,"1257":1,"1258":1,"1259":37,"1260":1,"1265":1,"1266":1,"1267":1,"1269":3,"1270":46,"1271":17,"1272":1,"1273":1,"1276":1,"1277":1,"1278":1,"1279":1,"1280":1,"1281":1,"1282":1,"1284":1,"1285":1,"1286":121,"1287":1,"1288":5,"1289":1,"1290":1,"1291":2,"1292":1,"1293":1,"1294":1,"1296":1,"1297":1,"1298":2,"1299":1,"1300":97,"1301":30,"1303":1,"1304":1,"1306":1,"1307":1,"1309":44,"1310":22,"1311":70,"1312":7,"1313":1,"1317":1,"1318":2,"1320":4,"1323":73,"1324":143,"1325":1,"1326":3,"1327":1,"1329":2,"1331":1,"1332":1,"1338":1,"1339":62,"1340":1,"1346":2,"1347":1,"1350":63,"1351":1,"1352":4,"1354":1,"1355":2,"1357":1,"1358":2,"1359":205,"1362":1,"1363":1,"1366":2,"1368":2,"1369":18,"1370":1,"1371":1,"1372":1,"1374":1,"1376":2,"1378":1,"1380":32,"1384":1,"1387":2,"1389":2,"1390":1,"1391":1,"1393":1,"1394":1,"1395":91,"1396":106,"1397":1,"1398":1,"1400":2,"1401":1,"1402":56,"1403":2,"1406":1,"1407":2,"1408":1,"1412":1,"1414":2,"1415":51,"1416":20,"1417":67,"1418":2,"1427":8,"1429":2,"1430":1,"1431":3,"1432":1,"1436":198,"1437":1,"1438":11,"1439":1,"1440":2,"1441":5,"1442":2,"1443":4,"1444":3,"1446":1,"1447":5,"1449":1,"1450":1,"1453":3,"1454":3,"1455":5,"1456":2,"1459":2,"1460":1,"1464":1,"1465":3,"1467":16,"1469":1,"1472":1,"1473":4,"1474":7,"1475":1,"1487":2,"1488":3,"1489":2,"1490":4,"1492":1,"1496":3,"1498":1,"1508":1,"1509":3,"1510":1,"1517":1,"1522":2,"1526":10,"1527":1,"1529":1,"1534":7,"1535":1,"1538":1,"1541":1,"1545":1,"1548":1,"1553":1,"1554":1,"1556":1,"1564":1,"1566":2,"1573":1,"1574":1,"1577":6,"1578":1,"1585":2,"1586":1,"1587":1,"1591":8,"1592":1,"1594":1,"1595":1,"1596":2,"1597":2,"1599":3,"1600":2,"1611":3,"1627":1,"1629":1,"1630":2,"1631":5,"1632":4,"1634":1,"1638":3,"1639":3,"1640":2,"1641":6,"1649":1,"1651":1,"1652":2,"1656":1,"1661":1,"1664":1,"1667":2,"1670":1,"1673":1,"1675":2,"1677":2,"1685":4,"1686":2,"1689":1,"1691":1,"1692":1,"1694":1,"1699":1,"1708":1,"1709":2,"1727":2,"1732":1,"1748":4,"1749":4,"1764":1,"1765":2,"1767":2,"1768":2,"1769":1,"1773":1,"1775":1,"1776":1,"1783":1,"1784":1,"1788":1,"1790":3,"1799":1,"1800":1,"1802":2,"1803":1,"1804":1,"1805":3,"1806":1,"1807":1,"1810":2,"1815":3,"1818":1,"1819":1,"1823":1,"1825":1,"1827":2,"1828":1,"1829":1,"1830":1,"1831":1,"1839":1,"1840":1,"1847":3,"1849":5,"1851":1,"1852":1,"1853":2,"1854":2,"1856":2,"1858":1,"1859":1,"1862":1,"1863":1,"1867":2,"1869":1,"1871":1,"1875":1,"1884":2,"1893":1,"1897":1,"1899":1,"1900":1,"1902":1,"1905":1,"1906":1,"1908":1,"1909":2,"1915":2,"1916":2,"1918":2,"1920":2,"1922":2,"1923":2,"1927":2,"1930":2,"1933":3,"1935":1,"1939":1,"1941":1,"1942":1,"1944":2,"1945":1,"1946":1,"1949":3,"1952":1,"1953":1,"1959":1,"1961":1,"1962":3,"1965":1,"1969":1,"1970":2,"1972":1,"1973":1,"1975":1,"1976":1,"1977":2,"1978":1,"1979":3,"1983":1,"1985":1,"1986":1,"1987":1,"1988":1,"1989":1,"1991":1,"1994":5,"1997":2,"1998":2,"1999":1,"2000":1,"2002":1,"2003":1,"2005":2,"2007":1,"2008":2,"2010":1,"2013":1,"2023":1,"2024":2,"2025":2,"2028":1,"2029":1,"2030":1,"2033":2,"2034":2,"2035":1,"2036":1,"2037":4,"2038":2,"2043":2,"2044":1,"2050":1,"2053":1,"2055":1,"2057":1,"2059":1,"2062":1,"2066":2,"2069":1,"2072":1,"2073":1,"2075":2,"2081":2,"2083":3,"2085":1,"2086":2,"2089":1,"2090":1,"2092":2,"2094":1,"2097":1,"2103":1,"2106":1,"2112":1,"2116":1,"2119":1,"2121":1,"2123":1,"2126":1,"2128":1,"2129":2,"2131":1,"2133":2,"2135":1,"2141":1,"2142":3,"2143":1,"2147":2,"2149":2,"2154":1,"2156":1,"2158":2,"2165":1,"2166":2,"2167":1,"2169":1,"2170":1,"2182":1,"2183":2,"2185":1,"2192":1,"2193":1,"2197":1,"2198":1,"2203":1,"2204":1,"2207":1,"2210":1,"2227":2,"2228":1,"2230":2,"2231":1,"2232":6}}],["sinks",{"3":{"401":1,"665":1,"1339":2,"1396":1}}],["sink",{"3":{"0":1,"395":1,"401":3,"914":1,"1271":1,"1286":1,"1311":1,"1326":1,"1333":1,"1339":5,"1359":2,"1416":1,"1417":2,"1436":2,"1445":1,"1467":2,"1670":1}}],["since",{"3":{"0":30,"18":1,"57":1,"91":1,"94":1,"98":1,"122":1,"126":1,"130":1,"135":2,"137":1,"138":3,"139":1,"140":2,"141":1,"142":1,"150":1,"157":1,"160":1,"166":2,"171":1,"175":1,"178":1,"202":1,"228":1,"229":1,"237":2,"243":1,"245":1,"251":1,"252":2,"254":3,"255":1,"256":2,"257":1,"258":1,"259":1,"265":2,"280":1,"291":1,"308":1,"314":1,"323":1,"324":2,"340":1,"349":1,"360":1,"365":1,"386":1,"390":1,"402":1,"413":1,"423":1,"427":1,"446":1,"448":2,"450":1,"465":1,"469":1,"490":2,"492":1,"493":1,"494":1,"499":1,"501":1,"511":1,"518":1,"526":1,"527":1,"543":1,"545":1,"550":1,"572":3,"600":1,"604":1,"626":1,"631":2,"633":1,"634":1,"636":1,"638":2,"640":1,"664":1,"665":1,"675":1,"677":1,"681":1,"696":1,"702":1,"703":1,"708":1,"711":1,"716":1,"720":2,"728":1,"789":1,"799":1,"800":1,"803":1,"805":2,"809":2,"826":1,"853":1,"857":1,"870":1,"875":1,"889":1,"898":1,"905":1,"907":1,"947":1,"948":1,"959":1,"988":1,"991":2,"1004":1,"1006":1,"1012":2,"1014":1,"1017":1,"1033":1,"1034":1,"1043":1,"1049":1,"1050":2,"1052":1,"1059":1,"1069":1,"1075":2,"1083":1,"1124":1,"1156":1,"1177":1,"1192":1,"1212":4,"1229":5,"1237":3,"1244":1,"1247":8,"1252":1,"1254":2,"1256":2,"1258":1,"1259":3,"1262":1,"1263":2,"1268":1,"1270":8,"1271":1,"1275":2,"1283":1,"1285":1,"1286":37,"1290":2,"1300":20,"1301":7,"1304":1,"1308":1,"1309":6,"1310":1,"1311":27,"1312":1,"1317":1,"1322":1,"1323":14,"1324":38,"1331":1,"1333":1,"1337":1,"1339":16,"1344":1,"1350":9,"1351":1,"1359":27,"1369":3,"1375":1,"1379":1,"1380":10,"1393":1,"1395":17,"1396":29,"1398":1,"1400":1,"1401":1,"1402":7,"1406":1,"1408":1,"1415":16,"1416":5,"1417":6,"1424":1,"1425":1,"1427":5,"1429":1,"1431":1,"1436":72,"1438":20,"1441":3,"1442":2,"1443":1,"1445":2,"1449":1,"1453":1,"1454":1,"1455":6,"1457":2,"1459":1,"1460":1,"1467":9,"1482":1,"1486":1,"1490":2,"1496":21,"1497":2,"1498":1,"1500":1,"1526":2,"1534":1,"1548":1,"1577":1,"1591":1,"1631":1,"1635":1,"1654":1,"1656":1,"1670":1,"1684":1,"1701":1,"1721":1,"1722":1,"1727":2,"1729":2,"1732":1,"1750":2,"1800":1,"1839":1,"1840":1,"1843":1,"1844":2,"1845":1,"1851":1,"1872":1,"1889":1,"1947":1,"1988":3,"2067":1,"2142":1,"2151":1}}],["sacrificing",{"3":{"2218":1}}],["sacrificed",{"3":{"1286":1}}],["saas",{"3":{"1940":1}}],["sa1203",{"3":{"1395":1}}],["sa1211",{"2":{"1689":1,"1699":1,"2089":1},"3":{"0":1,"490":1,"491":1,"492":1,"493":1,"495":1,"633":2,"1686":1,"1689":1,"1699":1,"1727":1,"2089":1}}],["sa1210",{"2":{"635":1,"1689":1,"2089":1},"3":{"0":1,"490":1,"491":1,"492":1,"493":1,"495":1,"633":2,"635":1,"1689":1,"1727":1,"2089":1}}],["sake",{"3":{"1339":1,"2156":1}}],["sa",{"3":{"1339":2,"1441":1}}],["sails",{"3":{"1998":1}}],["sail",{"3":{"1324":1}}],["said",{"3":{"0":1,"22":1,"27":1,"43":1,"62":1,"130":1,"138":1,"160":1,"200":1,"220":1,"256":1,"306":1,"353":1,"374":1,"408":1,"425":2,"426":1,"443":1,"624":1,"642":1,"683":1,"720":1,"761":1,"794":1,"837":1,"958":1,"1017":2,"1052":1,"1054":1,"1055":1,"1062":1,"1091":1,"1259":1,"1270":1,"1300":1,"1323":2,"1324":3,"1359":2,"1396":3,"1417":1,"1427":1,"1431":1,"1496":1,"1992":2}}],["safari",{"3":{"1324":5,"1417":1,"1436":2,"1606":1,"1716":1,"1740":1}}],["safer",{"3":{"584":1,"1286":1,"1301":1,"1339":1,"1436":1,"1998":1}}],["safedomaineventhandlertests",{"3":{"536":1,"1199":1,"1207":5,"1259":2,"1438":1,"2165":2}}],["safedomaineventhandler",{"2":{"534":1,"1252":1,"1665":1,"2165":1},"3":{"534":1,"536":2,"537":1,"1199":2,"1203":1,"1207":2,"1252":5,"1259":25,"1396":1,"1438":1,"1496":2,"1665":1,"2165":3}}],["safely",{"3":{"350":1,"508":1,"829":2,"883":1,"1237":1,"1259":1,"1271":1,"1286":4,"1300":3,"1311":1,"1312":1,"1324":3,"1358":1,"1359":1,"1395":1,"1396":3,"1402":2,"1415":1,"1417":3,"1427":1,"1436":1,"1438":1,"1472":1,"1563":1,"1569":1,"1646":1,"1665":1,"1840":1,"1977":1,"2185":1}}],["safeguards",{"3":{"1922":2}}],["safeguard",{"3":{"182":1,"1359":1,"1436":3,"1489":1,"1526":1}}],["safety",{"0":{"1254":1,"1561":1,"1934":1},"3":{"0":1,"6":1,"19":1,"158":1,"160":1,"209":1,"255":1,"330":1,"335":1,"382":1,"435":1,"472":1,"501":1,"522":1,"523":1,"524":1,"564":1,"800":1,"801":1,"803":1,"882":1,"1068":1,"1116":1,"1132":1,"1135":1,"1216":1,"1229":1,"1237":2,"1243":1,"1247":1,"1255":1,"1257":1,"1259":7,"1263":2,"1270":5,"1271":6,"1273":1,"1286":3,"1300":4,"1302":1,"1309":4,"1311":4,"1323":2,"1324":30,"1339":2,"1350":3,"1353":1,"1359":54,"1380":1,"1384":2,"1395":45,"1396":16,"1402":10,"1414":1,"1415":8,"1417":3,"1427":2,"1436":26,"1438":3,"1455":3,"1458":1,"1467":1,"1499":1,"1508":1,"1526":2,"1530":1,"1532":1,"1535":1,"1577":1,"1586":1,"1591":1,"1595":1,"1597":1,"1652":1,"1671":1,"1796":1,"1805":1,"1817":1,"1888":1,"1941":1,"1949":2,"1952":1,"1959":1,"1971":1,"1978":1,"1987":2,"2201":1,"2202":1}}],["safe",{"1":{"1900":1,"1901":1,"1902":1,"1903":1,"1904":1,"1905":1,"1906":1,"1907":1,"1908":1,"1909":1,"1910":1,"1911":1,"1912":1},"3":{"0":8,"15":1,"20":1,"78":1,"79":1,"109":1,"111":1,"122":1,"145":1,"147":2,"158":1,"187":1,"189":1,"208":1,"245":1,"265":2,"291":1,"302":1,"309":1,"310":1,"335":1,"397":1,"398":1,"402":1,"413":2,"416":1,"443":1,"460":1,"506":1,"507":1,"530":1,"550":1,"556":1,"564":1,"565":1,"607":2,"609":1,"610":1,"681":1,"691":1,"694":1,"700":1,"706":1,"711":1,"743":1,"751":1,"758":1,"767":1,"776":1,"827":1,"832":1,"838":1,"848":1,"861":1,"869":1,"890":1,"926":1,"940":1,"942":1,"946":1,"965":1,"989":1,"1059":1,"1084":1,"1109":1,"1115":2,"1116":1,"1124":1,"1132":1,"1147":1,"1184":1,"1212":2,"1229":3,"1237":4,"1238":1,"1247":3,"1252":1,"1259":15,"1263":1,"1269":3,"1270":12,"1271":2,"1275":1,"1278":1,"1283":1,"1285":1,"1286":30,"1298":1,"1299":1,"1300":26,"1301":4,"1304":1,"1309":12,"1310":2,"1311":29,"1312":3,"1320":3,"1322":1,"1323":19,"1324":39,"1333":1,"1334":1,"1337":1,"1339":20,"1344":1,"1346":1,"1349":1,"1350":7,"1355":1,"1358":1,"1359":26,"1364":1,"1369":6,"1380":4,"1395":12,"1396":26,"1402":11,"1415":17,"1416":1,"1417":28,"1421":1,"1427":1,"1429":2,"1436":27,"1453":3,"1455":7,"1457":1,"1458":2,"1463":1,"1467":2,"1472":1,"1475":2,"1477":1,"1478":2,"1484":1,"1488":1,"1490":1,"1492":2,"1496":1,"1545":1,"1554":1,"1561":1,"1577":1,"1590":1,"1591":1,"1611":1,"1626":1,"1631":1,"1660":1,"1661":1,"1668":1,"1672":2,"1686":1,"1708":1,"1729":1,"1734":1,"1748":1,"1790":1,"1835":1,"1837":1,"1842":1,"1844":1,"1873":1,"1889":2,"1899":1,"1900":1,"1902":1,"1905":1,"1906":1,"1907":2,"1910":1,"1911":1,"1912":3,"1920":1,"1923":1,"1933":1,"1935":1,"1948":1,"1950":1,"1958":1,"1963":1,"1968":1,"1972":2,"2000":1,"2011":1,"2014":1,"2020":1,"2021":1,"2029":1,"2037":1,"2048":1,"2055":1,"2063":1,"2069":1,"2087":1,"2118":1,"2119":1,"2123":2,"2126":1,"2138":1,"2148":1,"2156":1,"2162":1,"2188":1,"2196":1,"2199":1,"2208":3,"2232":1}}],["saturation",{"3":{"1324":1}}],["saturate",{"3":{"1311":1}}],["saturated",{"3":{"1124":1,"1256":1,"1259":2,"1286":2,"1339":2,"1380":1,"1444":1}}],["satellites",{"3":{"1436":2}}],["satellite",{"3":{"265":2,"269":1,"1324":1,"1380":2,"1402":1,"1436":1}}],["sat",{"3":{"72":1,"179":1,"390":1,"424":1,"689":1,"1174":1,"1324":5,"1460":1,"1467":2,"1475":1,"1500":1}}],["satisfaction",{"3":{"1396":1}}],["satisfiable",{"3":{"593":1,"1309":2,"1323":1,"1415":1}}],["satisfiesloadbearinginvariants",{"3":{"1436":2}}],["satisfies",{"3":{"160":1,"470":1,"799":1,"1018":1,"1049":1,"1089":1,"1091":1,"1229":1,"1237":1,"1247":1,"1270":1,"1286":6,"1300":4,"1309":1,"1310":2,"1311":2,"1323":1,"1324":1,"1359":13,"1368":1,"1369":2,"1380":1,"1395":4,"1396":6,"1402":2,"1410":1,"1415":4,"1417":4,"1436":14,"1482":1,"1671":1,"1810":1,"1845":1,"2126":1,"2230":1}}],["satisfied",{"3":{"0":1,"59":2,"130":1,"135":1,"140":1,"166":1,"584":1,"905":1,"926":1,"1050":1,"1059":1,"1237":1,"1247":3,"1265":1,"1270":2,"1286":1,"1293":1,"1300":5,"1309":2,"1315":1,"1320":1,"1323":6,"1324":2,"1350":3,"1359":8,"1380":1,"1396":4,"1415":7,"1416":3,"1417":2,"1431":2,"1436":7,"1478":1,"1488":1,"1534":1,"1577":1,"1662":1,"1772":1,"1790":1,"1863":1,"1882":1,"2168":1,"2197":2}}],["satisfy",{"3":{"109":1,"518":1,"528":1,"1006":1,"1017":1,"1100":1,"1124":1,"1145":1,"1220":1,"1229":1,"1237":3,"1247":1,"1286":3,"1300":4,"1301":2,"1309":1,"1310":1,"1311":1,"1312":2,"1323":6,"1324":7,"1337":1,"1338":1,"1339":3,"1350":3,"1359":8,"1378":1,"1380":2,"1388":1,"1395":1,"1396":2,"1402":1,"1415":4,"1416":1,"1417":1,"1424":1,"1427":1,"1436":14,"1447":1,"1454":1,"1467":1,"1480":1,"1488":1,"1492":1,"1591":1,"1790":1,"1793":1,"1805":1,"1864":1,"1916":1,"1967":1,"2017":1,"2069":1}}],["satisfying",{"3":{"40":1,"803":1,"1300":2,"1310":1,"1350":1,"1396":1,"1416":1,"1417":1,"1436":1,"1438":1}}],["sawerrors",{"3":{"1229":1}}],["sawvalue",{"3":{"1229":2}}],["saw",{"3":{"26":1,"72":1,"236":1,"340":1,"873":1,"876":1,"881":1,"1017":1,"1052":1,"1055":1,"1169":1,"1259":1,"1286":1,"1300":3,"1311":3,"1323":1,"1324":2,"1350":2,"1359":2,"1395":1,"1396":3,"1436":2,"1869":1,"1870":1}}],["sandboxing",{"3":{"2239":1}}],["sandboxed",{"3":{"1526":1}}],["sandbox",{"3":{"1429":1}}],["sandwich",{"3":{"1415":1}}],["santiago",{"3":{"1350":1}}],["sans",{"3":{"1324":1,"2075":1}}],["sane",{"3":{"1228":1,"1229":1,"1300":1,"1324":1,"1339":1,"1396":1,"1676":1}}],["sanctions",{"3":{"913":1,"1396":1,"1591":1}}],["sanctioned",{"3":{"0":1,"260":1,"371":1,"392":1,"642":1,"912":1,"914":1,"996":1,"1229":1,"1237":1,"1247":1,"1286":5,"1380":1,"1416":2,"1417":1,"1436":3,"1455":1,"1806":1,"2232":1}}],["sanitization",{"3":{"1286":1,"1323":1,"1563":1}}],["sanitizes",{"3":{"1286":1,"1320":1,"1324":2,"1359":1}}],["sanitize",{"3":{"1270":2,"1323":1,"1324":4}}],["sanitized",{"3":{"1116":2,"1286":1,"1300":2,"1323":1,"1324":3,"1344":1,"1350":2,"1357":1,"1359":2,"1526":1,"1563":1,"1572":1,"1577":1,"1631":1,"1669":1}}],["sanitizer",{"3":{"1114":1,"1324":2,"2232":1}}],["sanitizefilename",{"2":{"443":1,"1116":1},"3":{"0":1,"443":1,"1116":1,"1286":1}}],["sanity",{"3":{"846":1,"1436":2,"1479":1,"1489":1}}],["saying",{"3":{"201":1,"350":1,"541":1,"576":1,"673":1,"1140":1,"1161":1,"1259":1,"1270":1,"1286":3,"1309":1,"1323":1,"1324":2,"1339":3,"1359":3,"1389":1,"1395":1,"1396":5,"1415":1,"1427":1,"1436":3,"1442":1,"1596":1,"1646":1,"1685":1,"1860":1,"1887":1,"1908":1,"1909":1,"1961":1,"1970":1,"1977":1,"2000":1,"2162":1,"2164":1}}],["say",{"0":{"1423":1,"1947":1},"3":{"0":1,"73":1,"109":1,"122":1,"123":1,"136":1,"171":1,"185":1,"220":1,"231":1,"260":1,"261":1,"284":1,"300":1,"353":1,"390":1,"444":1,"477":1,"564":1,"578":1,"590":1,"610":1,"619":1,"626":2,"627":1,"638":1,"660":1,"676":1,"684":2,"689":1,"702":1,"703":1,"741":1,"743":1,"756":1,"776":1,"790":1,"804":1,"864":1,"871":1,"899":1,"904":1,"905":1,"907":1,"921":1,"960":1,"988":1,"1062":1,"1067":1,"1079":1,"1082":1,"1085":1,"1107":1,"1216":1,"1231":1,"1233":1,"1237":2,"1247":1,"1253":1,"1259":2,"1270":1,"1271":1,"1280":1,"1286":11,"1293":1,"1297":1,"1300":8,"1309":1,"1311":10,"1316":1,"1323":9,"1324":8,"1339":1,"1350":2,"1359":17,"1366":1,"1369":2,"1395":5,"1396":10,"1402":2,"1415":9,"1417":2,"1418":1,"1423":1,"1431":1,"1436":16,"1438":1,"1443":1,"1474":1,"1486":1,"1488":1,"1489":1,"1553":1,"1591":2,"1596":1,"1638":1,"1651":1,"1685":1,"1686":1,"1689":1,"1698":1,"1702":1,"1748":1,"1749":1,"1765":1,"1799":1,"1803":1,"1810":1,"1823":1,"1842":1,"1848":1,"1853":1,"1854":1,"1862":1,"1902":1,"1904":1,"1908":1,"1909":1,"1911":1,"1929":1,"1995":1,"2000":1,"2007":1,"2012":1,"2013":1,"2044":1,"2057":1,"2064":1,"2086":1,"2087":1,"2156":1,"2158":1,"2163":1,"2175":1,"2180":1,"2203":1}}],["saysnothingaboutthecanonicaldeclaration",{"3":{"1436":3}}],["says",{"3":{"0":4,"13":1,"27":2,"74":1,"77":1,"135":2,"137":1,"138":1,"139":1,"142":1,"149":1,"170":1,"171":1,"187":1,"189":1,"200":3,"201":2,"254":1,"256":2,"259":1,"265":1,"317":1,"342":1,"343":1,"353":1,"391":1,"459":1,"461":1,"478":1,"490":1,"535":1,"537":1,"539":1,"540":1,"541":1,"549":1,"550":1,"556":1,"563":1,"564":1,"601":1,"611":1,"624":1,"625":1,"633":3,"636":1,"657":1,"659":1,"660":2,"665":2,"674":1,"690":1,"692":1,"703":1,"725":1,"740":1,"742":1,"743":1,"749":2,"751":1,"761":1,"765":1,"781":1,"784":1,"793":1,"798":1,"827":1,"832":1,"833":2,"861":1,"876":1,"880":3,"890":2,"891":1,"893":1,"897":2,"904":1,"907":1,"927":1,"932":1,"946":1,"955":1,"958":1,"964":1,"966":1,"967":1,"979":1,"988":1,"996":1,"997":1,"1014":1,"1018":3,"1026":1,"1037":1,"1050":2,"1051":1,"1058":1,"1067":1,"1074":1,"1079":1,"1085":1,"1091":1,"1093":1,"1099":1,"1119":1,"1124":1,"1133":1,"1167":3,"1176":2,"1190":1,"1212":1,"1227":1,"1229":4,"1237":6,"1241":1,"1247":6,"1248":1,"1259":12,"1262":1,"1266":1,"1269":1,"1270":17,"1271":1,"1276":1,"1277":1,"1286":31,"1290":1,"1291":1,"1297":1,"1300":26,"1301":2,"1305":1,"1309":4,"1310":2,"1311":26,"1315":1,"1316":1,"1318":1,"1320":1,"1323":19,"1324":30,"1337":1,"1338":1,"1339":20,"1342":2,"1346":1,"1347":1,"1348":1,"1350":10,"1354":1,"1355":1,"1356":1,"1357":1,"1359":57,"1367":1,"1369":3,"1380":4,"1393":1,"1395":22,"1396":47,"1400":1,"1402":11,"1410":1,"1413":1,"1414":1,"1415":26,"1416":1,"1417":9,"1419":1,"1430":2,"1433":1,"1436":45,"1438":2,"1441":1,"1442":1,"1445":2,"1453":3,"1455":4,"1459":1,"1460":1,"1462":1,"1467":8,"1470":1,"1473":1,"1474":2,"1476":2,"1481":1,"1488":1,"1489":2,"1490":1,"1492":2,"1496":2,"1500":1,"1553":1,"1596":1,"1639":1,"1646":1,"1661":1,"1685":3,"1702":1,"1721":1,"1723":1,"1727":1,"1729":1,"1765":1,"1769":1,"1794":1,"1799":1,"1815":2,"1831":1,"1835":1,"1836":1,"1843":1,"1880":2,"1887":1,"1892":1,"1906":1,"1915":1,"1944":1,"1945":1,"1960":1,"1963":1,"1965":2,"1982":1,"1992":2,"1994":2,"2000":2,"2001":1,"2002":1,"2012":1,"2029":1,"2030":1,"2033":1,"2039":1,"2045":1,"2047":1,"2056":1,"2105":1,"2124":2,"2126":1,"2131":1,"2151":1,"2156":1,"2158":2,"2162":1,"2164":1,"2167":1,"2168":2,"2171":1,"2172":1,"2173":1,"2175":1,"2177":1,"2179":1,"2196":1}}],["sast",{"3":{"2219":1,"2220":1}}],["sas",{"3":{"0":2,"441":1,"597":1,"599":1,"602":1,"638":2,"643":2,"1446":1,"1467":7,"1589":1,"1591":1,"1595":1,"1596":2,"1597":1,"2127":1}}],["savings",{"3":{"1026":1,"1455":1,"1459":1,"1749":2,"1750":1,"1764":2,"1767":2,"1769":1}}],["savingchangesasync",{"3":{"715":1,"1286":5}}],["savingchanges",{"2":{"21":1,"1251":1},"3":{"21":1,"715":1,"1251":1,"1274":3,"1286":11}}],["saving",{"3":{"0":1,"43":1,"197":1,"342":1,"391":1,"534":1,"709":1,"827":1,"1026":2,"1229":1,"1237":1,"1269":1,"1270":4,"1286":10,"1300":1,"1323":3,"1324":1,"1339":1,"1359":2,"1395":1,"1396":1,"1399":1,"1401":1,"1402":19,"1417":1,"1438":1,"1484":1,"1526":1,"1749":1,"2024":1,"2164":1,"2220":1}}],["savebutton",{"3":{"1436":1}}],["savebehindaninterface",{"3":{"1436":2}}],["saveaddressbutton",{"3":{"1436":1}}],["saveasync",{"3":{"1324":4}}],["savenamebutton",{"3":{"1436":1}}],["saveupvoteasync",{"3":{"1402":2}}],["saver",{"3":{"1396":4,"1417":5}}],["saveresult",{"3":{"1324":2,"1395":27}}],["savepasswordasync",{"3":{"1415":1}}],["savepagefilters",{"3":{"1383":2,"1395":10}}],["saveprofileasync",{"3":{"1395":1}}],["savetitleasync",{"3":{"1395":2}}],["savetoken",{"3":{"1312":1}}],["savetokens",{"3":{"1311":2}}],["savefilters",{"3":{"1324":3,"1383":2,"1395":8,"1396":1}}],["saveexplicitkeygroupsasync",{"3":{"1286":3}}],["saveerror",{"3":{"265":1,"1324":1}}],["savewithexplicitkeyinsertasync",{"2":{"1278":1},"3":{"1278":1,"1286":2}}],["savecount",{"3":{"1436":3}}],["savechangedetectiontests",{"3":{"1199":1,"1207":5,"1286":2,"1438":2}}],["savechangesinterceptor",{"2":{"1839":1},"3":{"0":1,"715":1,"1212":3,"1286":2,"1839":1}}],["savechanges",{"0":{"1274":1},"2":{"124":1,"365":1,"809":1,"1701":1,"1839":1,"1844":1,"1846":1,"2091":1,"2092":1,"2161":1,"2164":1,"2169":1},"3":{"0":1,"124":1,"359":1,"365":1,"540":1,"715":1,"809":1,"1212":1,"1213":1,"1237":2,"1252":1,"1259":6,"1273":1,"1286":11,"1369":2,"1396":1,"1436":5,"1438":1,"1453":1,"1487":1,"1490":1,"1498":1,"1585":1,"1671":1,"1701":1,"1835":1,"1838":1,"1839":1,"1844":1,"1846":1,"2091":1,"2092":1,"2142":1,"2161":1,"2164":1,"2169":2}}],["savechangesasync",{"2":{"17":1,"27":1,"340":1,"444":1,"465":1,"466":1,"518":1,"522":1,"523":2,"524":1,"539":1,"714":1,"781":1,"1355":1,"1358":1,"1363":1,"1823":1,"1838":2,"1844":1,"1869":1,"1910":1,"1934":1,"2111":1,"2164":1},"3":{"0":1,"17":1,"27":1,"201":1,"340":1,"444":1,"459":1,"465":1,"466":1,"499":1,"518":1,"522":2,"523":4,"524":1,"539":1,"540":1,"714":1,"781":1,"897":2,"905":1,"1100":2,"1212":1,"1237":3,"1258":1,"1259":13,"1270":3,"1272":1,"1273":1,"1286":23,"1300":2,"1309":3,"1323":10,"1345":1,"1349":1,"1350":12,"1355":1,"1358":1,"1359":43,"1363":1,"1369":1,"1395":19,"1396":5,"1402":7,"1410":1,"1415":10,"1436":21,"1488":2,"1489":1,"1526":2,"1651":1,"1749":1,"1765":1,"1810":1,"1823":1,"1838":2,"1844":1,"1869":1,"1910":1,"1934":1,"2111":1,"2164":1}}],["savecurrentstate",{"3":{"881":1,"1324":3}}],["savedsortdescending",{"3":{"1324":1}}],["savedsortcolumn",{"3":{"1324":1}}],["savedpagesize",{"3":{"1324":2}}],["savedpage",{"3":{"1324":1}}],["savedtoken",{"3":{"1312":1}}],["savedchangesasync",{"3":{"1274":1,"1286":3}}],["savedchanges",{"3":{"1252":1,"1274":2,"1286":7}}],["saved",{"3":{"0":2,"120":2,"536":1,"538":1,"540":1,"609":1,"627":1,"725":1,"914":2,"926":1,"991":1,"1024":1,"1026":2,"1093":2,"1247":1,"1259":3,"1270":2,"1274":1,"1275":2,"1278":1,"1286":12,"1300":2,"1306":1,"1309":2,"1311":2,"1312":4,"1318":1,"1322":1,"1323":5,"1324":2,"1350":1,"1355":1,"1359":9,"1380":4,"1383":4,"1391":1,"1395":15,"1396":13,"1399":1,"1402":3,"1406":1,"1415":6,"1436":2,"1438":1,"1456":1,"1467":2,"1479":1,"1480":1,"1591":1,"1749":2,"1750":1,"1765":1,"1768":1,"1776":2,"1835":1,"1933":2,"1951":1,"2158":1,"2185":1}}],["save",{"2":{"268":1},"3":{"0":6,"17":2,"18":1,"20":2,"21":2,"26":2,"27":2,"39":1,"109":2,"120":1,"166":1,"195":1,"201":4,"225":1,"265":1,"268":1,"340":2,"342":1,"344":1,"388":1,"391":1,"435":1,"436":1,"516":2,"518":4,"522":2,"523":5,"524":3,"534":1,"536":1,"538":4,"539":4,"698":1,"715":1,"716":1,"717":1,"857":1,"897":1,"905":2,"908":2,"920":1,"921":1,"923":2,"926":6,"931":1,"988":2,"991":1,"1033":1,"1035":1,"1100":6,"1102":1,"1116":1,"1140":1,"1168":1,"1175":1,"1212":2,"1231":2,"1232":2,"1233":2,"1237":10,"1251":4,"1252":6,"1253":3,"1257":2,"1258":1,"1259":32,"1260":1,"1265":7,"1270":31,"1272":1,"1273":3,"1274":3,"1276":3,"1277":3,"1278":2,"1280":1,"1286":146,"1289":2,"1290":3,"1293":1,"1294":1,"1300":11,"1304":4,"1309":7,"1311":4,"1316":1,"1318":2,"1322":1,"1323":32,"1324":8,"1344":1,"1345":1,"1349":1,"1350":10,"1352":1,"1355":1,"1357":4,"1358":3,"1359":119,"1369":4,"1379":1,"1390":1,"1395":46,"1396":19,"1398":1,"1399":3,"1402":17,"1406":2,"1411":2,"1415":31,"1417":3,"1432":1,"1436":43,"1438":10,"1453":1,"1456":1,"1508":1,"1543":1,"1638":2,"1664":2,"1665":1,"1666":2,"1672":1,"1685":2,"1720":1,"1742":1,"1749":1,"1765":1,"1818":1,"1835":2,"1837":1,"1846":1,"1849":1,"1852":1,"1857":1,"1869":3,"1871":1,"1872":2,"1877":5,"1906":1,"1933":5,"1934":1,"1940":1,"1946":1,"1951":1,"1973":1,"2060":1,"2063":1,"2083":1,"2091":1,"2161":2,"2163":3,"2165":3,"2167":2,"2168":3,"2182":1,"2185":1,"2230":2,"2232":1}}],["savestate",{"3":{"1324":1}}],["savestagedasync",{"3":{"201":1,"1259":1}}],["saveskipped",{"3":{"926":1,"1270":3}}],["saves",{"3":{"0":2,"24":1,"27":2,"39":1,"195":1,"201":1,"499":1,"518":2,"522":3,"523":1,"524":1,"536":2,"540":2,"792":1,"897":1,"908":1,"921":1,"986":1,"988":3,"1042":1,"1045":1,"1061":1,"1100":1,"1115":1,"1143":1,"1237":2,"1258":1,"1259":4,"1260":1,"1265":2,"1270":3,"1286":18,"1289":1,"1300":7,"1309":3,"1318":1,"1323":4,"1324":3,"1346":2,"1352":1,"1355":1,"1359":17,"1369":3,"1373":1,"1395":4,"1396":7,"1402":1,"1411":1,"1414":1,"1415":7,"1431":1,"1436":12,"1455":1,"1472":1,"1476":1,"1479":1,"1638":1,"1869":2,"1933":2,"1982":1,"2063":1,"2091":1,"2092":1,"2161":1}}],["sagastatemachineinstance",{"2":{"809":1,"813":1},"3":{"809":1,"813":1}}],["sagas",{"3":{"0":3,"536":1,"926":1,"1011":1,"1012":1,"1577":1}}],["saga",{"1":{"533":1,"534":1,"535":1,"536":1,"537":1,"538":1,"539":1,"540":1,"541":1,"2161":1,"2162":1,"2163":1,"2164":1,"2165":1,"2166":1,"2167":1,"2168":1,"2169":1},"3":{"0":4,"230":1,"533":1,"534":1,"536":9,"537":2,"539":1,"674":1,"809":2,"810":3,"811":2,"812":3,"813":2,"815":2,"896":1,"987":1,"1041":1,"1044":1,"1212":2,"1309":1,"1359":1,"1436":1,"1526":2,"1547":1,"1572":1,"1591":5,"1600":2,"1665":1,"1755":2,"1765":1,"1779":2,"2113":1,"2160":2,"2161":2,"2163":2,"2167":1,"2168":4,"2169":1,"2180":1,"2189":1,"2206":1,"2215":2,"2232":2}}],["salient",{"3":{"1795":1}}],["salvages",{"3":{"1300":1}}],["salvaged",{"3":{"1018":1}}],["saleable",{"3":{"1764":1}}],["sale",{"3":{"539":1,"1025":1,"1027":1,"1028":3,"1742":1,"1750":2,"1769":1,"1773":2}}],["salesrouteauthorizationtests",{"3":{"1436":1,"1591":1}}],["salesintegrationtestfixture",{"3":{"1436":1}}],["salescrossservicefactory",{"3":{"1436":1}}],["salestestwebapplicationfactory",{"3":{"1436":1}}],["salesfakeusecase",{"3":{"1199":2,"1207":2}}],["salesfakeorder",{"3":{"1199":2,"1207":2}}],["salesfakeaggregate",{"3":{"1199":2,"1207":2}}],["salesfeatures",{"2":{"2136":1},"3":{"300":1,"1270":1,"2136":2}}],["salesuimodule",{"3":{"649":1,"1324":4}}],["salesuserdataexportsection",{"2":{"583":1},"3":{"585":1,"725":1,"1323":4}}],["salesmoduletests",{"3":{"1436":2}}],["salesmoduleseeder",{"3":{"1323":2}}],["salesmoduledbseeder",{"3":{"1286":2}}],["salesmodule",{"3":{"539":1,"540":2,"583":2,"584":1,"674":1,"676":1,"1323":1}}],["salesapp",{"2":{"538":1},"3":{"538":1}}],["salespermissiongrants",{"3":{"186":1}}],["salespermissions",{"2":{"318":1,"324":1,"1264":1,"1995":1},"3":{"186":1,"318":1,"324":1,"1264":1,"1995":1}}],["salesservice",{"2":{"96":1},"3":{"96":1}}],["sales",{"0":{"96":1,"1749":1},"1":{"1023":1,"1024":1,"1025":1,"1026":1,"1027":1,"1028":1,"1029":1,"1030":1},"2":{"62":1,"96":2,"493":1,"534":1,"794":1,"1588":1,"1748":1,"1751":1,"1766":1,"2167":1},"3":{"0":11,"24":1,"62":2,"72":6,"73":4,"80":3,"91":8,"94":1,"95":4,"96":12,"97":2,"98":1,"99":1,"100":1,"101":3,"102":1,"104":3,"117":2,"128":2,"165":1,"186":2,"195":4,"230":7,"235":2,"238":1,"243":3,"245":2,"250":1,"251":1,"252":1,"254":1,"257":1,"260":4,"261":1,"291":1,"295":1,"318":6,"324":1,"401":1,"448":1,"452":3,"453":1,"454":1,"459":1,"475":4,"476":4,"477":4,"493":1,"534":1,"535":2,"536":3,"539":4,"540":1,"545":3,"554":1,"556":2,"564":3,"572":2,"583":11,"584":1,"585":4,"586":1,"599":2,"602":1,"640":2,"643":1,"649":3,"657":2,"674":7,"676":2,"715":1,"725":1,"728":1,"743":2,"749":2,"752":1,"757":1,"774":3,"780":2,"782":9,"789":5,"790":20,"792":1,"793":13,"794":9,"795":1,"798":1,"804":1,"809":3,"813":4,"837":1,"838":4,"841":1,"868":1,"869":1,"870":1,"873":2,"876":3,"877":1,"881":3,"897":2,"900":2,"914":1,"926":6,"954":4,"988":4,"1023":1,"1025":9,"1026":11,"1027":2,"1029":2,"1054":1,"1083":1,"1085":1,"1161":1,"1207":6,"1212":3,"1233":1,"1237":10,"1259":1,"1264":4,"1265":1,"1270":14,"1286":18,"1300":21,"1301":1,"1309":4,"1310":4,"1311":23,"1312":4,"1323":10,"1324":16,"1339":13,"1436":30,"1486":1,"1496":2,"1541":1,"1588":2,"1589":1,"1591":21,"1596":3,"1600":6,"1631":1,"1742":1,"1746":17,"1748":1,"1749":4,"1751":14,"1752":1,"1757":1,"1761":1,"1763":1,"1764":16,"1765":40,"1766":1,"1769":9,"1770":3,"1771":1,"1772":5,"1775":2,"1785":1,"1839":1,"1874":1,"1875":1,"1963":1,"1995":1,"1997":1,"2025":1,"2087":1,"2110":1,"2111":1,"2113":1,"2131":1,"2136":1,"2138":1,"2161":1,"2166":2,"2167":3,"2168":1,"2187":1,"2189":1,"2220":1,"2228":1,"2232":1}}],["salted",{"0":{"1902":1},"3":{"309":1,"905":1,"1300":1}}],["saltsize",{"2":{"284":1,"944":1,"948":1},"3":{"284":1,"310":1,"944":1,"946":3,"948":1,"1300":5}}],["salt",{"3":{"0":7,"284":2,"309":1,"310":6,"311":2,"312":5,"314":2,"350":1,"352":1,"906":1,"944":1,"945":4,"946":10,"947":1,"948":3,"1212":3,"1286":1,"1291":1,"1292":2,"1300":29,"1323":3,"1410":1,"1415":8,"1436":2,"1577":1,"1630":1,"1641":4,"1667":1,"1673":1,"1747":1,"1765":2,"1900":2,"1902":7,"1905":3,"1977":2,"1978":1,"2067":1}}],["sample=",{"3":{"1436":1}}],["sampleid",{"3":{"1436":1}}],["sampleitem",{"3":{"1199":4,"1207":1,"1496":1}}],["samplev1tov2upcaster",{"3":{"1199":2,"1207":1}}],["samplemodel",{"3":{"1199":2,"1207":1}}],["samplegriddata",{"3":{"1199":1,"1207":1,"1436":4}}],["samplegridrow",{"3":{"1199":2,"1207":3,"1436":9}}],["samplegatewayhardeningtests",{"3":{"1199":1,"1207":1,"1436":1}}],["samplegatewayentrypoint",{"3":{"1199":2,"1207":1}}],["sampleapphostcollection",{"2":{"1430":1},"3":{"1199":2,"1207":2,"1430":2,"1487":1}}],["sampleapphostfixture",{"3":{"1069":1,"1199":3,"1207":2,"1430":2,"1487":1}}],["sampleapphosttests",{"3":{"1067":1,"1199":1,"1207":2,"1430":2,"1487":1}}],["sampler",{"3":{"398":1,"402":1,"1339":2,"1575":1,"1577":2,"1585":1,"1678":1}}],["sampleservice",{"3":{"1199":2,"1207":1}}],["samples",{"0":{"1679":1},"3":{"397":1,"599":2,"601":1,"781":1,"963":1,"1300":1,"1350":1,"1431":1,"1436":8,"1438":1,"1443":1,"1467":3,"1470":1,"1496":3,"1575":2,"1577":10,"1581":1,"1582":2,"1583":1,"1585":1,"1586":3,"1648":1,"1670":1,"1671":1,"1677":1,"2109":1,"2156":1}}],["sample",{"0":{"1364":1},"2":{"1453":1},"3":{"0":5,"76":1,"80":2,"181":1,"295":1,"397":1,"399":1,"405":1,"543":1,"550":1,"554":1,"556":1,"597":1,"599":2,"604":2,"718":1,"749":1,"780":1,"782":1,"861":8,"862":2,"863":2,"905":1,"913":1,"917":1,"964":1,"1050":1,"1067":8,"1069":2,"1090":1,"1229":1,"1237":2,"1264":1,"1270":2,"1286":1,"1311":1,"1323":1,"1350":3,"1359":1,"1364":6,"1369":11,"1380":5,"1415":1,"1431":1,"1436":31,"1437":1,"1438":1,"1441":1,"1443":1,"1446":1,"1453":3,"1467":5,"1486":2,"1487":1,"1488":1,"1490":1,"1496":1,"1526":1,"1575":3,"1576":1,"1577":10,"1581":1,"1582":3,"1583":2,"1586":1,"1602":1,"1654":1,"1661":1,"1673":1,"1674":2,"1677":1,"1683":1,"1685":2,"1686":2,"1687":1,"1688":2,"1689":3,"1690":1,"1697":2,"1717":1,"1718":1,"1719":1,"1727":6,"1728":1,"1729":1,"1800":1,"1815":1,"1891":1,"2063":1,"2089":1,"2110":1,"2156":1,"2160":2}}],["sampledeploymentobservabilitytests",{"2":{"1431":1},"3":{"1199":1,"1207":2,"1431":4,"1436":7,"1467":1,"1496":1,"1577":2,"1583":1,"1586":2}}],["sampled",{"3":{"0":1,"135":1,"397":1,"398":2,"399":1,"861":1,"1333":2,"1339":3,"1443":1,"1446":1,"1467":3,"1496":2,"1677":1,"2010":2,"2156":1,"2157":1,"2159":1}}],["samplingduration",{"3":{"819":1,"1339":3}}],["sampling",{"2":{"1330":1},"3":{"0":4,"68":1,"70":1,"71":1,"100":1,"395":1,"397":1,"398":2,"399":4,"402":1,"406":1,"914":1,"916":1,"918":1,"1212":1,"1259":1,"1312":1,"1330":2,"1333":2,"1339":7,"1438":1,"1443":3,"1467":3,"1469":1,"1568":1,"1591":1,"1677":1,"1678":1,"2006":1,"2010":1,"2030":1,"2032":1,"2037":1,"2156":1,"2159":2,"2160":1,"2232":1}}],["sameevent",{"3":{"1396":1}}],["samesponsor",{"3":{"1396":1}}],["samesession",{"3":{"1396":1}}],["samesitemode",{"3":{"1300":4,"1324":2}}],["samesite",{"2":{"1187":1,"1969":1},"3":{"1184":3,"1185":1,"1187":1,"1300":21,"1311":1,"1324":3,"1667":1,"1969":1}}],["samesite=none",{"3":{"1311":1}}],["samesite=strict",{"3":{"0":1,"1324":1,"1641":2}}],["samesite=lax",{"3":{"0":1,"207":3,"209":1,"350":1,"1187":1,"1298":2,"1311":1,"1324":2,"1534":2,"1968":1,"1969":1,"1971":1,"1972":1,"1975":1,"2083":1}}],["sameoriginproxyendpoint",{"3":{"1324":1}}],["sameoriginproxyclienttests",{"3":{"1199":1,"1207":3,"1324":4,"1438":1}}],["sameoriginproxyinvoker",{"3":{"1199":4,"1203":1,"1207":2,"1324":7,"1496":1}}],["sameoriginproxytransformer",{"3":{"1184":2,"1199":2,"1203":1,"1207":3,"1300":3,"1324":13}}],["sameoriginproxytokenrefreshertests",{"3":{"1199":1,"1207":2,"1324":2}}],["sameoriginproxytokenrefresher",{"2":{"507":1,"509":1,"1582":1},"3":{"0":1,"507":5,"509":1,"1199":3,"1203":1,"1207":2,"1324":8,"1416":1,"1582":2}}],["sameoriginproxyheaders",{"3":{"1184":2,"1199":6,"1203":1,"1207":2,"1324":12,"1582":1}}],["sameoriginproxy",{"2":{"1324":1},"3":{"1184":8,"1203":15,"1207":54,"1208":2,"1300":11,"1324":47,"1437":1,"1438":2,"1496":1,"1582":1}}],["sameoriginproxyrequesthandler",{"2":{"1184":1},"3":{"1184":2,"1199":1,"1203":1,"1207":2,"1324":13}}],["sameoriginapiproxymarker",{"3":{"1199":4,"1203":1,"1207":1,"1324":5}}],["sameoriginapiproxyhubtests",{"3":{"1184":2,"1199":1,"1207":2,"1438":1}}],["sameoriginapiproxycsrftests",{"3":{"1184":2,"1199":1,"1207":2,"1438":1}}],["sameoriginapiproxyendpoint",{"3":{"1184":5,"1185":1,"1186":3,"1187":1,"1199":4,"1203":1,"1207":2,"1300":7,"1324":20,"1496":2,"1582":1}}],["sameoriginapiproxyendpointextensions",{"3":{"1184":1,"1199":1,"1203":1,"1207":2,"1208":1,"1324":13}}],["sameoriginapiproxy",{"3":{"1184":1,"1324":2,"1582":1}}],["sameoriginapiproxysettingsvalidator",{"3":{"1184":1,"1185":1,"1199":2,"1203":1,"1207":2,"1324":6}}],["sameoriginapiproxysettings",{"3":{"1184":3,"1199":7,"1203":1,"1207":2,"1300":2,"1324":11}}],["sameoriginapiproxyserviceextensions",{"3":{"1184":3,"1186":1,"1199":1,"1203":1,"1207":3,"1208":1,"1300":2,"1324":21,"1582":1}}],["sameoriginapiproxytokentests",{"2":{"1184":1},"3":{"1184":2,"1199":1,"1207":2,"1437":1,"1438":1}}],["sameoriginapiproxyoptintests",{"2":{"1184":1},"3":{"1184":2,"1199":1,"1207":2,"1324":1,"1438":1}}],["sameoriginapiproxyorigintests",{"2":{"1184":1},"3":{"1184":2,"1199":1,"1207":2,"1438":1}}],["sameoriginapiproxyauthflowtests",{"2":{"1184":1},"3":{"1184":2,"1199":1,"1207":2,"1324":1,"1438":1}}],["sameoriginapiproxyrefreshoutcometests",{"2":{"1184":1},"3":{"1184":2,"1199":1,"1207":2,"1438":1}}],["sameoriginapiendpoint",{"2":{"1184":1},"3":{"1184":4,"1324":16,"1438":1}}],["sameness",{"3":{"284":1}}],["same",{"0":{"1225":1,"1228":1,"1293":1,"1295":1,"1317":1,"1825":1,"1842":1,"1910":1,"1976":1,"1983":1,"2046":1,"2073":1},"1":{"712":1,"713":1,"714":1,"715":1,"716":1,"717":1,"718":1,"719":1,"720":1,"721":1,"1181":1,"1182":1,"1183":1,"1184":1,"1185":1,"1186":1,"1187":1,"1188":1,"1189":1,"2070":1,"2071":1,"2072":1,"2073":1,"2074":1,"2075":1,"2076":1,"2077":1,"2078":1,"2079":1,"2080":1},"3":{"0":71,"17":1,"18":1,"20":2,"21":2,"23":1,"24":6,"26":8,"30":2,"31":1,"32":1,"39":1,"41":1,"42":2,"46":1,"53":2,"57":1,"59":2,"61":1,"62":1,"68":1,"69":1,"70":1,"71":1,"72":1,"76":1,"78":1,"79":1,"87":1,"91":1,"92":2,"93":2,"94":1,"95":3,"96":3,"99":3,"100":2,"103":1,"109":9,"110":4,"117":1,"118":1,"120":2,"122":4,"125":3,"126":2,"130":1,"132":1,"133":1,"135":5,"136":5,"139":1,"142":1,"145":4,"146":1,"147":4,"148":1,"150":2,"151":1,"156":1,"157":6,"158":1,"159":1,"160":2,"162":1,"164":1,"165":2,"166":1,"167":1,"173":1,"175":3,"178":1,"180":3,"185":1,"186":2,"188":1,"193":2,"194":1,"195":2,"196":1,"197":3,"200":2,"201":5,"202":10,"207":1,"213":1,"217":1,"218":1,"220":1,"221":1,"225":3,"226":2,"227":1,"230":4,"231":1,"235":3,"236":1,"237":1,"239":1,"242":1,"243":7,"245":3,"247":1,"248":1,"251":1,"255":4,"257":1,"265":9,"266":1,"272":1,"273":2,"274":1,"275":2,"279":1,"282":1,"283":3,"285":2,"290":1,"291":1,"295":6,"300":1,"302":1,"309":1,"310":3,"313":2,"314":1,"318":5,"320":1,"321":1,"325":2,"329":1,"330":1,"331":1,"337":1,"340":6,"341":6,"342":2,"343":1,"344":2,"346":4,"348":1,"349":3,"350":8,"351":1,"352":2,"353":1,"358":1,"359":3,"361":3,"362":1,"365":1,"370":3,"371":1,"373":1,"375":1,"376":1,"380":2,"381":1,"383":1,"386":1,"388":3,"390":1,"391":1,"392":1,"395":1,"396":1,"397":6,"401":4,"402":1,"403":1,"404":3,"406":2,"407":1,"408":1,"409":1,"412":1,"413":3,"414":1,"415":3,"420":1,"422":1,"423":1,"424":2,"427":1,"434":1,"435":1,"440":1,"443":3,"444":1,"446":1,"448":5,"449":1,"450":2,"452":1,"455":1,"458":1,"459":3,"460":1,"461":2,"462":1,"463":2,"464":1,"470":3,"472":1,"473":2,"475":2,"476":1,"477":2,"480":1,"481":1,"482":1,"485":1,"486":1,"487":1,"488":2,"489":2,"490":1,"491":1,"492":2,"493":3,"494":4,"499":4,"500":1,"503":2,"506":2,"507":5,"508":2,"509":2,"513":1,"514":1,"517":3,"519":1,"520":1,"524":2,"526":1,"528":4,"529":2,"530":2,"532":2,"536":8,"537":2,"538":3,"539":7,"543":3,"544":1,"545":4,"546":1,"549":5,"550":1,"551":1,"555":1,"556":8,"557":2,"558":2,"560":2,"564":3,"565":1,"566":2,"572":1,"573":1,"574":2,"575":1,"577":2,"579":1,"582":2,"583":3,"584":2,"585":2,"587":1,"591":5,"592":7,"599":9,"600":1,"601":1,"602":1,"603":1,"604":1,"605":3,"607":1,"609":9,"610":2,"611":4,"613":1,"614":1,"617":2,"618":1,"619":1,"622":1,"624":3,"626":10,"627":1,"628":1,"629":3,"633":3,"635":2,"638":2,"639":1,"640":8,"641":3,"642":4,"644":4,"648":2,"649":2,"650":4,"651":1,"657":6,"658":5,"659":2,"665":1,"667":2,"668":2,"674":13,"675":1,"676":1,"681":1,"682":2,"683":1,"684":1,"686":1,"689":1,"690":6,"691":2,"692":1,"694":1,"698":6,"699":1,"702":2,"707":7,"709":1,"711":1,"712":1,"714":2,"715":3,"716":4,"718":1,"721":1,"724":3,"725":6,"726":4,"729":1,"732":2,"733":2,"734":1,"740":5,"741":7,"742":1,"743":3,"747":1,"748":1,"749":4,"750":3,"751":2,"756":3,"757":1,"758":1,"759":1,"760":1,"761":1,"766":4,"767":1,"770":1,"773":1,"774":3,"776":1,"778":3,"782":7,"783":3,"784":1,"785":1,"786":1,"789":1,"790":3,"794":1,"795":1,"798":1,"799":2,"801":1,"803":2,"804":3,"805":6,"806":1,"809":1,"810":2,"819":1,"821":1,"825":3,"827":12,"829":6,"830":1,"831":4,"832":5,"833":1,"837":3,"838":8,"839":1,"840":1,"846":2,"854":1,"856":1,"859":1,"861":6,"862":1,"863":3,"865":3,"868":3,"869":1,"870":2,"871":1,"872":2,"873":1,"875":1,"876":3,"877":1,"880":1,"881":10,"882":1,"883":1,"885":1,"889":8,"890":4,"891":3,"897":2,"899":1,"901":1,"903":1,"904":2,"905":8,"906":1,"907":3,"910":3,"913":1,"914":3,"916":9,"921":1,"922":3,"923":5,"924":1,"926":5,"930":2,"931":1,"933":4,"935":1,"937":3,"939":2,"941":1,"942":1,"946":3,"948":2,"950":2,"953":1,"954":1,"955":2,"957":1,"958":1,"963":4,"964":1,"965":2,"966":1,"967":1,"968":1,"971":2,"972":3,"976":1,"979":4,"980":3,"981":1,"982":5,"988":3,"992":1,"995":5,"996":3,"997":2,"998":4,"1000":1,"1004":2,"1012":2,"1016":1,"1018":10,"1019":2,"1020":1,"1022":1,"1026":3,"1027":1,"1028":2,"1033":1,"1034":8,"1035":3,"1041":2,"1042":7,"1044":4,"1049":1,"1050":7,"1051":1,"1052":2,"1055":1,"1058":2,"1059":5,"1061":4,"1066":2,"1067":1,"1068":4,"1069":2,"1074":3,"1075":4,"1076":1,"1079":1,"1084":1,"1090":1,"1091":3,"1093":1,"1100":1,"1108":2,"1116":3,"1117":1,"1118":2,"1123":1,"1124":8,"1126":3,"1127":1,"1133":3,"1134":1,"1137":1,"1142":2,"1145":1,"1147":1,"1150":1,"1162":1,"1167":2,"1168":1,"1175":2,"1176":1,"1178":1,"1179":1,"1181":1,"1182":1,"1183":1,"1184":5,"1185":1,"1186":1,"1187":1,"1192":2,"1193":1,"1211":3,"1212":15,"1214":1,"1216":1,"1217":1,"1218":2,"1219":1,"1220":2,"1222":1,"1223":2,"1225":3,"1226":1,"1227":1,"1228":1,"1229":26,"1231":6,"1232":1,"1233":4,"1234":1,"1235":3,"1236":1,"1237":55,"1239":3,"1241":3,"1242":3,"1243":1,"1244":5,"1247":53,"1248":1,"1249":1,"1251":2,"1252":3,"1253":7,"1254":1,"1255":2,"1256":5,"1257":1,"1258":5,"1259":68,"1260":1,"1261":2,"1262":1,"1263":5,"1265":7,"1267":6,"1270":103,"1271":35,"1272":1,"1273":3,"1274":6,"1275":9,"1276":2,"1277":2,"1278":1,"1279":1,"1280":1,"1281":4,"1283":3,"1284":2,"1285":1,"1286":274,"1288":3,"1289":7,"1290":2,"1292":1,"1293":1,"1294":4,"1295":3,"1296":1,"1297":4,"1298":2,"1300":210,"1301":48,"1302":3,"1303":1,"1304":3,"1305":2,"1306":2,"1307":2,"1308":1,"1309":57,"1310":14,"1311":159,"1312":15,"1313":2,"1316":1,"1317":3,"1318":6,"1320":7,"1322":1,"1323":153,"1324":302,"1326":2,"1327":1,"1328":4,"1330":2,"1331":1,"1332":3,"1333":1,"1334":2,"1335":1,"1336":1,"1337":6,"1338":2,"1339":124,"1340":1,"1341":1,"1342":2,"1343":3,"1344":1,"1345":1,"1347":4,"1348":2,"1349":1,"1350":117,"1352":6,"1353":7,"1355":5,"1356":6,"1357":2,"1358":2,"1359":435,"1361":1,"1362":2,"1367":1,"1369":37,"1370":1,"1371":2,"1372":3,"1373":1,"1374":1,"1376":2,"1377":2,"1378":3,"1379":2,"1380":107,"1381":1,"1383":1,"1384":5,"1385":2,"1387":2,"1388":1,"1389":1,"1390":1,"1391":4,"1392":5,"1393":1,"1395":246,"1396":299,"1397":1,"1398":3,"1399":2,"1400":3,"1401":3,"1402":98,"1404":2,"1405":1,"1406":5,"1407":4,"1408":3,"1409":2,"1410":2,"1411":2,"1413":1,"1415":148,"1416":48,"1417":97,"1418":1,"1419":1,"1421":1,"1422":1,"1423":3,"1425":5,"1426":1,"1427":27,"1428":1,"1429":2,"1430":1,"1431":2,"1432":2,"1433":5,"1435":10,"1436":455,"1437":1,"1438":39,"1440":5,"1441":12,"1442":6,"1443":8,"1444":4,"1445":9,"1446":5,"1447":4,"1450":1,"1453":11,"1454":17,"1455":28,"1456":6,"1457":3,"1458":1,"1459":9,"1460":4,"1461":2,"1462":1,"1463":2,"1465":9,"1466":1,"1467":55,"1469":1,"1470":2,"1471":1,"1473":4,"1474":6,"1475":9,"1476":3,"1477":1,"1478":3,"1481":2,"1486":4,"1487":1,"1488":10,"1489":13,"1490":7,"1491":2,"1492":20,"1493":1,"1496":29,"1498":1,"1500":1,"1504":1,"1506":1,"1507":2,"1508":2,"1509":1,"1512":1,"1513":2,"1526":11,"1530":1,"1531":3,"1534":1,"1537":1,"1545":1,"1554":1,"1557":2,"1565":1,"1570":2,"1577":10,"1581":1,"1582":4,"1585":1,"1589":1,"1591":13,"1596":3,"1598":1,"1599":3,"1600":2,"1602":1,"1608":1,"1611":3,"1627":5,"1630":2,"1631":12,"1632":8,"1635":2,"1637":1,"1638":5,"1639":11,"1640":8,"1641":14,"1646":1,"1648":2,"1651":6,"1652":3,"1653":5,"1654":1,"1656":1,"1661":1,"1662":3,"1663":1,"1664":2,"1665":1,"1667":1,"1668":2,"1669":1,"1670":3,"1671":3,"1673":2,"1674":1,"1677":3,"1679":1,"1681":1,"1684":1,"1685":1,"1686":4,"1689":1,"1692":1,"1693":2,"1695":1,"1697":1,"1699":2,"1701":3,"1702":4,"1705":3,"1707":2,"1708":3,"1717":5,"1719":1,"1722":1,"1727":6,"1729":1,"1730":1,"1732":1,"1735":2,"1736":1,"1737":1,"1742":1,"1748":4,"1749":7,"1750":1,"1751":2,"1756":1,"1759":1,"1761":1,"1765":13,"1766":1,"1767":8,"1769":2,"1772":1,"1776":1,"1780":2,"1782":2,"1783":2,"1784":1,"1785":2,"1790":2,"1791":2,"1795":2,"1796":1,"1800":1,"1802":1,"1805":7,"1806":1,"1810":8,"1815":3,"1820":1,"1821":3,"1823":1,"1825":2,"1827":2,"1829":1,"1833":2,"1834":3,"1837":1,"1838":1,"1839":3,"1840":1,"1841":1,"1842":4,"1844":1,"1845":2,"1846":2,"1847":1,"1848":1,"1849":3,"1850":1,"1851":1,"1853":4,"1854":1,"1858":1,"1861":2,"1862":1,"1866":1,"1868":1,"1869":4,"1870":4,"1872":2,"1873":1,"1874":4,"1875":3,"1876":3,"1877":2,"1878":1,"1883":2,"1884":3,"1888":1,"1889":2,"1891":1,"1893":3,"1897":1,"1899":3,"1902":2,"1903":1,"1905":1,"1906":4,"1907":1,"1908":5,"1909":7,"1910":3,"1911":2,"1912":5,"1914":1,"1915":1,"1916":4,"1918":2,"1919":1,"1920":3,"1922":1,"1923":5,"1924":2,"1925":1,"1926":2,"1927":7,"1928":3,"1929":2,"1930":2,"1934":4,"1935":2,"1936":1,"1941":1,"1942":1,"1943":2,"1944":2,"1945":2,"1947":2,"1948":8,"1951":2,"1952":1,"1953":1,"1954":1,"1955":2,"1956":1,"1960":1,"1962":4,"1963":1,"1964":1,"1968":1,"1972":1,"1974":2,"1975":1,"1976":2,"1977":1,"1978":1,"1980":1,"1981":2,"1982":3,"1983":4,"1984":2,"1987":1,"1988":4,"1989":2,"1992":1,"1993":1,"1994":4,"1995":11,"1996":1,"1997":1,"1999":1,"2000":2,"2001":4,"2002":1,"2007":1,"2008":2,"2009":1,"2010":2,"2011":1,"2012":2,"2013":1,"2014":1,"2017":1,"2018":1,"2019":1,"2020":3,"2023":1,"2024":1,"2025":1,"2026":2,"2028":2,"2029":2,"2030":2,"2031":1,"2032":2,"2034":1,"2036":1,"2038":1,"2041":1,"2042":2,"2043":3,"2044":5,"2045":1,"2046":3,"2047":6,"2048":1,"2049":2,"2053":1,"2055":2,"2056":1,"2057":1,"2061":3,"2062":1,"2063":1,"2065":1,"2066":1,"2067":2,"2069":1,"2070":3,"2071":1,"2073":1,"2074":1,"2075":4,"2077":2,"2078":2,"2080":2,"2081":7,"2082":2,"2083":5,"2084":4,"2086":3,"2089":2,"2091":1,"2092":1,"2100":2,"2101":1,"2103":1,"2105":1,"2107":1,"2110":1,"2111":9,"2112":2,"2113":3,"2115":5,"2116":2,"2117":1,"2118":2,"2120":2,"2122":2,"2123":1,"2124":1,"2125":1,"2126":3,"2131":5,"2132":2,"2134":3,"2135":1,"2137":1,"2138":1,"2139":1,"2141":1,"2142":2,"2144":3,"2146":1,"2147":1,"2149":1,"2150":1,"2151":2,"2154":3,"2155":3,"2156":5,"2157":5,"2158":8,"2159":1,"2160":1,"2161":1,"2164":3,"2165":1,"2166":2,"2167":6,"2168":3,"2169":3,"2170":1,"2172":2,"2176":1,"2177":3,"2181":1,"2182":1,"2183":1,"2184":1,"2185":1,"2186":3,"2188":1,"2189":2,"2190":4,"2192":5,"2193":3,"2196":2,"2198":1,"2199":1,"2202":6,"2210":1,"2229":1,"2230":3,"2232":8,"2240":2,"2241":1}}],["s",{"0":{"93":1,"95":1,"96":1,"138":1,"139":1,"1259":1,"1291":1,"1323":1,"1447":1,"1881":1,"1883":1,"1989":1,"2025":1,"2044":1,"2185":1},"1":{"1039":1,"1040":1,"1041":1,"1042":1,"1043":1,"1044":1,"1045":1,"1046":1},"2":{"1239":1,"1353":1,"1813":2},"3":{"0":269,"6":1,"7":2,"10":2,"13":1,"15":1,"20":2,"21":5,"22":1,"24":3,"25":1,"26":2,"27":6,"30":1,"31":7,"37":1,"38":2,"39":6,"40":2,"41":1,"42":4,"43":2,"46":2,"47":1,"49":1,"51":1,"52":2,"53":10,"54":2,"57":3,"59":5,"60":1,"62":5,"66":4,"68":1,"71":6,"72":6,"73":6,"74":1,"76":1,"77":1,"78":2,"79":1,"80":8,"81":4,"82":2,"91":7,"92":4,"93":6,"94":4,"95":9,"96":6,"97":3,"98":3,"99":6,"100":9,"101":3,"102":2,"103":4,"104":2,"109":9,"111":2,"115":3,"117":2,"121":2,"122":5,"123":2,"125":2,"126":2,"127":3,"128":1,"130":6,"131":1,"132":1,"134":1,"135":15,"136":8,"137":4,"138":2,"139":5,"140":3,"141":3,"142":5,"145":7,"147":5,"149":2,"150":2,"152":1,"157":3,"159":2,"160":5,"161":2,"162":1,"164":1,"165":1,"166":6,"168":1,"169":1,"170":2,"173":1,"174":2,"175":7,"177":1,"178":1,"179":4,"180":6,"184":3,"186":20,"187":2,"189":1,"190":1,"193":5,"194":1,"195":4,"196":1,"199":1,"200":2,"201":6,"202":2,"208":1,"209":2,"212":2,"215":1,"217":3,"218":4,"219":4,"225":6,"226":3,"228":3,"230":7,"231":2,"233":1,"234":1,"235":7,"237":5,"241":10,"242":1,"243":9,"245":4,"246":3,"247":5,"248":1,"249":2,"250":2,"251":3,"252":2,"253":1,"254":5,"255":10,"256":7,"257":5,"258":4,"259":9,"260":2,"261":4,"264":1,"265":15,"267":2,"268":1,"273":3,"274":1,"275":3,"276":1,"279":3,"280":1,"282":3,"284":2,"286":1,"290":4,"291":3,"292":2,"293":1,"295":3,"296":1,"298":2,"300":1,"301":1,"302":1,"303":1,"305":4,"306":1,"309":1,"310":6,"311":1,"313":1,"314":3,"317":2,"318":17,"320":3,"322":1,"324":3,"325":4,"326":6,"330":1,"332":1,"333":4,"340":1,"341":13,"342":2,"343":2,"344":2,"345":1,"348":5,"349":3,"350":15,"351":3,"352":6,"353":8,"354":1,"355":1,"359":3,"361":3,"364":1,"365":2,"366":1,"369":1,"370":1,"373":7,"374":1,"375":1,"382":1,"383":2,"386":8,"387":5,"388":2,"389":2,"390":7,"391":5,"392":8,"393":2,"396":1,"397":5,"400":5,"401":3,"402":7,"404":2,"407":4,"408":1,"409":2,"411":1,"412":2,"413":3,"414":2,"415":2,"418":4,"420":6,"421":1,"422":2,"423":1,"426":2,"427":2,"428":3,"429":3,"430":2,"434":3,"435":2,"441":2,"447":1,"448":11,"450":2,"451":3,"452":4,"453":1,"454":4,"455":1,"458":3,"459":12,"460":2,"461":2,"462":1,"463":5,"464":2,"465":7,"466":3,"468":7,"469":2,"472":1,"473":1,"474":2,"475":2,"476":4,"477":4,"478":1,"481":3,"483":1,"484":1,"487":1,"488":1,"489":2,"490":5,"491":1,"492":1,"493":1,"494":1,"497":8,"498":1,"499":9,"500":1,"501":2,"502":3,"503":1,"506":2,"507":3,"509":4,"510":1,"511":1,"512":1,"513":1,"517":3,"518":1,"522":1,"524":2,"527":1,"528":3,"530":5,"532":1,"534":5,"535":1,"536":10,"537":3,"538":2,"539":4,"540":4,"541":1,"543":5,"545":12,"548":1,"549":8,"550":4,"551":6,"554":1,"556":14,"557":3,"558":2,"562":2,"564":7,"565":1,"566":3,"568":1,"572":15,"573":3,"575":3,"576":1,"577":3,"578":3,"579":1,"582":1,"583":12,"584":2,"585":6,"586":1,"587":3,"590":1,"591":5,"592":1,"593":1,"598":3,"599":5,"601":3,"602":3,"603":3,"604":1,"607":19,"609":22,"610":2,"611":3,"612":2,"613":1,"614":2,"616":1,"617":4,"618":11,"619":3,"620":1,"622":1,"624":2,"626":10,"627":1,"629":4,"631":3,"632":1,"633":20,"634":2,"635":8,"636":3,"638":2,"640":13,"642":3,"643":1,"644":4,"649":14,"650":1,"651":8,"655":5,"656":1,"657":7,"658":4,"659":1,"660":1,"663":1,"664":1,"665":4,"666":1,"667":1,"668":1,"674":17,"675":1,"676":1,"677":4,"681":3,"682":7,"683":5,"684":6,"685":1,"688":1,"689":3,"690":4,"691":1,"692":1,"693":1,"694":1,"696":1,"697":1,"698":8,"699":2,"700":6,"702":2,"703":1,"706":1,"707":2,"708":3,"709":3,"711":1,"714":4,"715":7,"716":4,"717":5,"718":3,"719":1,"720":2,"724":1,"725":11,"726":4,"727":6,"729":1,"731":3,"732":2,"733":11,"734":3,"735":6,"736":2,"737":1,"739":2,"740":2,"741":6,"742":1,"743":4,"744":1,"745":1,"749":7,"750":2,"751":4,"755":2,"757":5,"758":1,"759":1,"760":3,"761":1,"764":8,"766":13,"767":2,"768":1,"769":3,"774":2,"775":1,"776":2,"780":6,"781":1,"782":9,"783":1,"784":3,"785":1,"789":1,"790":5,"791":3,"792":2,"793":1,"798":2,"799":4,"800":1,"802":1,"803":7,"804":1,"805":1,"808":2,"809":5,"810":8,"811":2,"812":3,"813":3,"814":1,"815":1,"817":3,"818":3,"819":4,"820":1,"821":1,"822":1,"825":8,"826":7,"827":28,"828":1,"829":7,"830":2,"831":5,"832":9,"833":6,"834":1,"836":1,"837":6,"838":20,"839":3,"840":7,"841":2,"842":1,"844":1,"845":1,"846":4,"847":3,"848":3,"849":3,"850":1,"853":3,"854":6,"855":1,"857":3,"860":2,"861":6,"862":1,"863":7,"864":4,"867":3,"868":2,"870":2,"873":4,"876":9,"877":2,"879":1,"880":1,"881":16,"882":1,"884":3,"889":4,"891":5,"892":3,"895":1,"896":1,"897":14,"898":1,"900":2,"901":1,"903":1,"904":5,"905":26,"906":7,"907":7,"908":1,"909":1,"910":2,"912":2,"913":4,"914":9,"916":6,"917":2,"918":3,"920":3,"921":4,"922":10,"923":2,"924":5,"925":1,"926":10,"927":1,"931":1,"932":1,"934":1,"944":1,"945":1,"946":3,"947":1,"949":1,"952":1,"953":1,"954":14,"956":4,"958":2,"959":2,"960":3,"962":1,"964":6,"965":3,"966":1,"971":4,"972":9,"973":4,"974":3,"979":4,"980":2,"981":1,"982":1,"983":2,"986":3,"987":1,"988":13,"990":3,"991":1,"992":1,"994":4,"995":4,"996":8,"997":1,"998":5,"999":2,"1003":1,"1004":6,"1005":2,"1006":2,"1007":1,"1010":1,"1011":1,"1012":4,"1013":1,"1014":2,"1016":1,"1017":2,"1018":22,"1019":4,"1020":1,"1021":2,"1022":1,"1024":2,"1025":1,"1026":9,"1028":5,"1029":1,"1030":1,"1033":4,"1034":9,"1035":2,"1036":3,"1037":2,"1038":1,"1039":1,"1040":1,"1042":12,"1043":3,"1044":5,"1045":1,"1048":3,"1049":5,"1050":8,"1051":5,"1052":5,"1054":3,"1055":3,"1057":1,"1058":7,"1059":9,"1060":2,"1061":3,"1063":1,"1066":3,"1067":15,"1068":2,"1069":9,"1070":3,"1073":3,"1074":9,"1075":5,"1076":1,"1077":1,"1078":1,"1079":1,"1081":1,"1082":4,"1083":1,"1085":2,"1086":2,"1089":3,"1090":2,"1091":14,"1092":3,"1093":8,"1094":2,"1099":3,"1100":1,"1103":2,"1104":1,"1108":1,"1114":1,"1115":1,"1116":18,"1117":5,"1118":3,"1119":2,"1122":1,"1123":3,"1124":17,"1125":5,"1126":2,"1127":3,"1128":1,"1133":7,"1135":3,"1140":2,"1142":2,"1144":2,"1147":1,"1149":1,"1150":5,"1151":1,"1155":1,"1156":1,"1157":1,"1160":2,"1161":4,"1162":1,"1168":3,"1170":1,"1175":5,"1176":4,"1178":2,"1182":1,"1184":11,"1186":1,"1187":1,"1191":1,"1192":2,"1193":3,"1194":2,"1196":3,"1201":1,"1202":2,"1203":2,"1211":1,"1212":41,"1213":3,"1214":6,"1215":1,"1216":3,"1218":1,"1219":1,"1221":1,"1223":2,"1224":1,"1226":1,"1227":1,"1228":3,"1229":56,"1230":4,"1231":4,"1232":2,"1233":4,"1235":2,"1236":5,"1237":147,"1238":2,"1239":10,"1240":3,"1241":5,"1242":2,"1243":2,"1244":5,"1246":3,"1247":217,"1248":1,"1249":5,"1251":4,"1252":2,"1253":7,"1254":1,"1256":2,"1257":1,"1258":8,"1259":216,"1260":3,"1262":8,"1263":9,"1264":11,"1265":18,"1266":3,"1267":7,"1268":3,"1269":4,"1270":355,"1271":91,"1272":1,"1273":11,"1274":4,"1275":7,"1276":13,"1277":5,"1278":17,"1279":5,"1280":2,"1281":8,"1282":5,"1283":6,"1284":2,"1285":3,"1286":977,"1287":2,"1288":1,"1289":13,"1290":19,"1291":1,"1292":2,"1293":5,"1294":4,"1295":4,"1296":3,"1297":10,"1298":5,"1300":773,"1301":79,"1302":3,"1303":1,"1304":8,"1305":2,"1306":1,"1307":8,"1308":3,"1309":297,"1310":70,"1311":527,"1312":71,"1314":5,"1315":9,"1316":12,"1317":3,"1318":8,"1319":4,"1320":6,"1321":1,"1322":6,"1323":478,"1324":1026,"1325":1,"1326":8,"1327":5,"1328":7,"1329":1,"1330":4,"1331":3,"1332":5,"1333":10,"1334":4,"1335":1,"1336":5,"1337":4,"1338":8,"1339":433,"1340":3,"1341":5,"1342":10,"1343":2,"1344":3,"1345":2,"1346":3,"1347":6,"1348":9,"1349":5,"1350":480,"1351":4,"1352":14,"1353":12,"1354":6,"1355":13,"1356":3,"1357":14,"1358":6,"1359":1774,"1360":5,"1362":9,"1363":5,"1364":5,"1366":13,"1367":5,"1368":7,"1369":147,"1371":5,"1372":5,"1373":4,"1374":3,"1375":6,"1376":3,"1377":7,"1378":12,"1379":9,"1380":336,"1381":3,"1382":5,"1383":7,"1384":14,"1385":6,"1386":2,"1387":7,"1388":5,"1389":13,"1390":3,"1391":7,"1392":4,"1393":1,"1394":1,"1395":955,"1396":1023,"1397":2,"1398":5,"1399":7,"1400":5,"1401":7,"1402":471,"1404":1,"1405":4,"1406":5,"1407":3,"1409":1,"1410":5,"1411":3,"1412":4,"1413":1,"1414":4,"1415":645,"1416":134,"1417":394,"1418":3,"1420":3,"1421":4,"1422":6,"1423":6,"1424":8,"1425":3,"1426":4,"1427":165,"1428":1,"1429":7,"1430":3,"1431":20,"1432":3,"1433":6,"1434":6,"1435":14,"1436":1904,"1437":28,"1438":92,"1439":1,"1441":31,"1442":8,"1443":38,"1444":4,"1445":8,"1446":8,"1447":23,"1449":4,"1450":6,"1451":5,"1452":2,"1453":10,"1454":9,"1455":44,"1456":17,"1457":4,"1458":4,"1459":14,"1460":11,"1461":8,"1463":1,"1465":10,"1466":4,"1467":90,"1469":1,"1470":4,"1471":3,"1472":2,"1473":6,"1474":5,"1475":18,"1476":21,"1477":1,"1478":1,"1479":2,"1480":1,"1481":3,"1483":1,"1484":2,"1486":10,"1487":5,"1488":30,"1489":30,"1490":16,"1491":9,"1492":34,"1494":1,"1496":105,"1497":2,"1498":3,"1500":5,"1507":1,"1509":1,"1512":2,"1513":3,"1515":1,"1517":1,"1518":1,"1522":1,"1523":4,"1524":5,"1525":3,"1526":42,"1527":2,"1528":2,"1529":1,"1531":9,"1532":2,"1534":14,"1536":1,"1537":1,"1541":1,"1542":1,"1543":1,"1546":2,"1547":1,"1553":3,"1558":1,"1559":1,"1565":1,"1567":2,"1569":2,"1571":1,"1573":1,"1575":6,"1576":1,"1577":41,"1578":2,"1579":2,"1582":10,"1583":1,"1585":8,"1586":2,"1587":1,"1588":1,"1589":5,"1591":42,"1592":1,"1595":3,"1596":21,"1597":3,"1598":2,"1599":8,"1600":7,"1607":2,"1610":1,"1611":2,"1615":1,"1621":2,"1625":1,"1626":2,"1627":6,"1629":1,"1630":23,"1631":31,"1632":16,"1635":5,"1636":1,"1637":3,"1638":6,"1639":20,"1640":10,"1641":22,"1644":1,"1645":1,"1650":3,"1651":13,"1652":1,"1653":10,"1654":1,"1656":7,"1658":1,"1661":3,"1662":3,"1663":7,"1664":3,"1665":4,"1666":6,"1667":3,"1668":3,"1669":5,"1670":1,"1671":4,"1674":2,"1675":2,"1676":1,"1677":4,"1678":2,"1679":2,"1680":2,"1683":3,"1684":6,"1685":17,"1686":9,"1687":2,"1688":3,"1689":2,"1690":1,"1693":1,"1695":1,"1697":2,"1699":1,"1700":1,"1701":6,"1702":6,"1703":3,"1706":1,"1707":5,"1708":4,"1709":4,"1710":1,"1718":2,"1719":5,"1720":2,"1722":2,"1723":1,"1724":4,"1726":2,"1727":20,"1728":7,"1729":7,"1730":5,"1731":4,"1741":3,"1742":1,"1744":1,"1748":8,"1749":8,"1750":1,"1751":2,"1756":1,"1759":3,"1760":1,"1761":2,"1764":8,"1765":22,"1767":8,"1768":1,"1769":10,"1770":3,"1771":2,"1772":1,"1773":1,"1778":1,"1779":3,"1781":1,"1782":1,"1784":1,"1789":1,"1790":4,"1792":1,"1795":1,"1797":1,"1799":2,"1800":1,"1802":2,"1805":1,"1810":6,"1811":2,"1813":5,"1815":11,"1817":2,"1821":4,"1823":2,"1824":4,"1825":3,"1826":1,"1827":1,"1829":3,"1830":2,"1831":2,"1832":2,"1833":1,"1834":2,"1839":5,"1840":6,"1841":2,"1843":5,"1844":2,"1848":2,"1849":7,"1851":8,"1852":2,"1853":1,"1855":2,"1856":5,"1857":2,"1859":3,"1860":1,"1861":2,"1862":1,"1865":3,"1866":4,"1869":2,"1871":4,"1872":5,"1874":3,"1875":5,"1876":6,"1877":4,"1878":1,"1879":2,"1880":1,"1881":5,"1882":4,"1883":1,"1884":3,"1885":1,"1886":1,"1889":2,"1891":5,"1892":1,"1894":1,"1895":4,"1896":6,"1897":4,"1898":6,"1899":5,"1903":1,"1905":1,"1906":1,"1908":4,"1909":4,"1910":4,"1911":2,"1912":3,"1914":1,"1915":1,"1919":1,"1920":11,"1921":1,"1922":17,"1923":13,"1924":1,"1925":1,"1927":7,"1928":1,"1929":5,"1930":1,"1934":5,"1935":2,"1936":1,"1937":3,"1938":1,"1940":1,"1941":1,"1944":2,"1945":2,"1946":5,"1947":5,"1948":1,"1949":3,"1950":4,"1952":1,"1953":1,"1954":3,"1955":1,"1956":2,"1957":1,"1958":3,"1961":1,"1962":4,"1963":3,"1964":2,"1965":1,"1966":1,"1967":1,"1968":2,"1970":3,"1971":1,"1972":2,"1973":3,"1974":3,"1975":1,"1976":2,"1977":4,"1978":8,"1979":1,"1981":1,"1982":6,"1983":5,"1985":3,"1987":1,"1989":3,"1990":1,"1991":2,"1993":3,"1994":6,"1995":9,"1996":2,"1997":3,"1998":1,"2000":14,"2001":4,"2002":3,"2004":1,"2006":7,"2008":5,"2009":4,"2010":8,"2012":4,"2013":1,"2014":1,"2015":1,"2018":1,"2019":4,"2021":2,"2023":2,"2024":8,"2025":4,"2027":2,"2028":1,"2030":1,"2031":1,"2032":3,"2033":1,"2034":3,"2035":1,"2036":1,"2037":1,"2038":2,"2041":2,"2042":5,"2043":9,"2044":3,"2046":4,"2047":3,"2048":1,"2050":1,"2052":1,"2053":2,"2055":7,"2056":3,"2057":4,"2059":2,"2060":5,"2061":1,"2062":2,"2063":5,"2064":1,"2065":1,"2066":3,"2068":1,"2069":1,"2070":1,"2072":3,"2073":1,"2074":3,"2075":4,"2076":4,"2077":5,"2078":2,"2079":2,"2080":1,"2082":2,"2083":3,"2085":4,"2086":1,"2087":1,"2088":1,"2089":3,"2090":1,"2091":1,"2093":1,"2094":2,"2095":7,"2096":1,"2097":6,"2099":1,"2101":2,"2103":3,"2104":3,"2105":4,"2106":2,"2107":2,"2108":1,"2109":3,"2112":1,"2113":3,"2114":1,"2115":2,"2118":3,"2120":2,"2121":1,"2122":1,"2126":4,"2127":2,"2128":2,"2129":1,"2131":14,"2132":3,"2133":1,"2136":2,"2137":2,"2138":6,"2141":1,"2142":3,"2143":2,"2144":1,"2146":1,"2148":1,"2150":6,"2151":2,"2153":2,"2154":2,"2156":5,"2157":2,"2158":8,"2160":3,"2161":3,"2163":3,"2164":2,"2165":3,"2166":1,"2167":9,"2168":7,"2169":3,"2170":2,"2171":1,"2172":2,"2174":2,"2176":2,"2177":2,"2178":4,"2179":3,"2180":6,"2185":6,"2186":1,"2187":1,"2188":3,"2189":2,"2190":4,"2192":7,"2193":6,"2194":2,"2195":3,"2197":2,"2198":2,"2200":1,"2202":5,"2203":2,"2215":1,"2216":1,"2220":3,"2222":1,"2228":1,"2230":1,"2232":17,"2233":1,"2236":1,"2239":2,"2241":1,"2244":1}}],["sunday",{"3":{"1460":1,"1492":1,"1526":1}}],["sundays",{"3":{"1459":1,"1591":1}}],["suffers",{"3":{"1324":1}}],["suffer",{"3":{"1243":1,"1247":1,"1395":1}}],["suffixing",{"3":{"1324":1}}],["suffixes",{"3":{"1324":1,"1436":7}}],["suffixed",{"3":{"1270":2,"1300":1,"1309":1,"1333":1,"1359":1,"1429":1,"1436":2,"1496":1,"2128":1}}],["suffixredactor",{"3":{"1199":2,"1207":1}}],["suffix",{"2":{"1006":1},"3":{"123":1,"246":1,"343":2,"441":2,"443":2,"444":1,"576":1,"607":1,"609":1,"611":1,"629":1,"868":1,"870":1,"873":1,"975":1,"1006":2,"1267":2,"1270":1,"1300":2,"1309":2,"1311":2,"1312":1,"1324":4,"1339":1,"1350":1,"1395":3,"1396":1,"1411":1,"1415":4,"1416":1,"1436":18,"1444":1,"1465":1,"1467":3,"1475":2,"1476":3,"1535":1,"1591":1,"1651":2,"1685":1,"1686":1,"1733":1,"1920":2,"1923":1,"1924":2,"2017":1,"2127":2,"2158":2,"2160":1}}],["sufficiency",{"3":{"1300":1,"1749":1,"1765":2}}],["sufficient",{"3":{"100":1,"810":1,"813":1,"815":1,"856":1,"1300":1,"1309":1,"1311":1,"1323":1,"1324":1,"1350":1,"1380":2,"1395":3,"1402":1,"1415":2,"1417":1,"1457":1,"1472":1,"1490":1,"1496":1,"1631":1,"1639":1,"1749":1,"1765":1,"1767":2,"1891":1}}],["sufficed",{"3":{"1436":1}}],["suffices",{"3":{"30":1,"1273":1,"1286":1,"1359":3}}],["suffice",{"3":{"0":1,"1212":1}}],["sustain",{"3":{"1458":1}}],["sustained",{"3":{"0":1,"70":1,"403":1,"612":1,"625":1,"1102":1,"1311":2,"1324":2,"1396":1,"1400":1,"1534":1,"1949":1,"2166":1}}],["suspend",{"3":{"1396":1}}],["suspected",{"3":{"1323":1}}],["suspicious",{"3":{"801":1,"1415":1}}],["suggest",{"3":{"1341":1,"1436":1}}],["suggested",{"0":{"1194":1},"3":{"1075":1,"1286":1,"1709":1}}],["suggests",{"3":{"640":1,"768":1,"981":1,"987":1,"1252":1,"1270":1,"1467":1,"1727":1}}],["suggestions",{"3":{"1311":1,"1699":1,"1727":1}}],["suggestion",{"2":{"2089":1},"3":{"633":1,"1092":1,"1419":1,"1427":1,"1577":1,"1581":1,"1582":1,"1584":1,"1824":1,"1826":1,"2057":1,"2058":1,"2089":1,"2197":1}}],["sugar",{"3":{"0":1,"359":1,"655":1,"657":2,"660":1,"1168":1,"1259":1,"1286":2,"1761":1,"2142":1}}],["sums",{"3":{"1018":1,"1259":2,"1286":2,"1396":4}}],["sumselector",{"3":{"551":1,"1286":2}}],["summing",{"3":{"1286":2,"1396":1}}],["summer",{"3":{"1028":1,"1467":1,"1478":1}}],["summed",{"3":{"688":1,"1259":3,"1286":2,"1311":1,"1396":7,"1402":2}}],["summarizer",{"3":{"1435":1}}],["summarizes",{"3":{"1369":1,"1686":1}}],["summarize",{"3":{"1359":1,"2030":1}}],["summarized",{"3":{"369":1,"2230":1}}],["summaries",{"3":{"454":3,"1212":1,"1311":3,"1324":2,"1461":1,"1492":1,"1674":1,"1685":2}}],["summarypath",{"3":{"1475":1}}],["summary",{"0":{"1448":1,"1460":1,"1468":1,"1483":1,"1638":1,"1746":1,"2218":1},"3":{"0":2,"313":1,"376":1,"626":1,"627":1,"628":1,"642":1,"751":1,"757":1,"759":1,"766":3,"905":1,"946":1,"950":1,"972":1,"1006":2,"1237":2,"1259":1,"1263":1,"1270":2,"1277":1,"1286":3,"1300":12,"1309":1,"1311":3,"1312":2,"1323":3,"1324":10,"1339":2,"1350":7,"1359":31,"1380":1,"1395":13,"1396":10,"1402":6,"1407":1,"1414":1,"1415":4,"1416":11,"1417":7,"1431":1,"1433":1,"1436":19,"1438":4,"1452":1,"1455":5,"1457":1,"1459":1,"1461":1,"1474":1,"1475":4,"1488":2,"1489":1,"1492":2,"1526":3,"1561":1,"1607":1,"1608":1,"1632":1,"1639":3,"1669":1,"1671":1,"1685":1,"1686":1,"1701":1,"1729":1,"1741":1,"1742":1,"1748":2,"1750":1,"1760":1,"1765":2,"1767":2,"1769":1,"1957":1,"1958":1,"1995":4}}],["sumbyasync",{"3":{"543":1,"545":1,"551":1,"690":1,"692":1,"1286":9,"1396":4,"1815":1}}],["sum",{"3":{"0":1,"551":1,"592":1,"690":1,"692":2,"1011":1,"1012":3,"1259":1,"1270":1,"1286":4,"1339":1,"1359":1,"1366":1,"1395":1,"1396":11,"1402":1,"1455":1,"1467":2,"1487":1,"1492":1,"1496":8,"1498":1,"1686":1,"1764":2,"1798":2,"2047":1}}],["suiting",{"3":{"1339":1}}],["suitable",{"3":{"1323":2}}],["suit",{"3":{"165":1,"1309":1}}],["suits",{"3":{"0":1,"165":1,"650":1,"1270":1,"1300":1}}],["suite",{"0":{"2105":1},"2":{"2047":1},"3":{"0":4,"59":1,"132":1,"133":1,"135":3,"136":1,"137":4,"140":2,"143":1,"162":1,"218":1,"361":2,"546":1,"555":1,"556":1,"558":2,"571":1,"572":8,"573":1,"574":3,"575":2,"577":1,"591":6,"593":1,"616":2,"618":2,"621":1,"777":1,"838":1,"840":1,"859":1,"860":1,"861":2,"862":2,"863":1,"865":2,"906":1,"972":1,"973":1,"974":1,"1012":1,"1017":1,"1018":4,"1022":1,"1094":1,"1117":1,"1168":2,"1192":1,"1212":3,"1213":1,"1241":1,"1247":2,"1271":1,"1286":8,"1300":1,"1323":4,"1324":6,"1326":2,"1339":4,"1359":3,"1366":2,"1368":1,"1369":5,"1395":1,"1396":2,"1400":1,"1402":1,"1409":1,"1414":1,"1415":4,"1426":1,"1427":1,"1428":1,"1433":2,"1434":1,"1435":1,"1436":126,"1437":5,"1438":20,"1441":5,"1444":3,"1449":1,"1455":1,"1456":12,"1460":1,"1461":2,"1486":5,"1487":6,"1488":4,"1489":2,"1490":5,"1492":7,"1496":1,"1497":1,"1524":1,"1526":3,"1534":2,"1535":1,"1553":1,"1572":1,"1589":2,"1590":1,"1591":4,"1596":2,"1612":1,"1685":2,"1686":3,"1689":1,"1739":1,"1785":1,"1898":1,"1961":1,"2016":1,"2041":1,"2047":3,"2048":1,"2050":4,"2051":1,"2055":1,"2058":3,"2059":2,"2060":2,"2075":1,"2079":3,"2101":1,"2105":2,"2106":2,"2107":2,"2108":3,"2112":1,"2171":1,"2180":1,"2220":1,"2232":1}}],["suites",{"0":{"1438":1},"1":{"569":1,"570":1,"571":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"578":1,"579":1},"3":{"0":2,"124":1,"143":1,"569":1,"572":3,"573":1,"574":6,"576":1,"577":1,"578":1,"622":1,"650":1,"773":1,"837":1,"841":1,"863":1,"953":2,"1212":1,"1247":1,"1270":1,"1286":1,"1323":1,"1359":1,"1395":1,"1415":1,"1428":2,"1429":1,"1432":1,"1433":1,"1435":2,"1436":27,"1438":2,"1460":1,"1485":2,"1487":3,"1488":2,"1489":1,"1492":1,"1494":1,"1496":7,"1500":1,"1526":1,"1660":2,"1661":1,"1668":1,"1671":3,"1684":1,"1685":1,"1690":1,"1898":1,"1923":1,"2041":1,"2055":2,"2232":1}}],["succeeding",{"3":{"350":1,"881":1,"906":1,"1286":1,"1300":2,"1324":2,"1395":1,"1436":1,"1767":1,"1914":1,"1977":1}}],["succeeded",{"3":{"243":1,"538":1,"707":1,"741":1,"791":1,"881":1,"896":1,"1229":1,"1247":3,"1259":1,"1265":2,"1270":2,"1278":1,"1300":1,"1304":1,"1311":4,"1323":5,"1324":6,"1343":1,"1350":4,"1359":6,"1380":1,"1389":1,"1395":4,"1396":2,"1402":2,"1410":1,"1415":4,"1417":1,"1433":1,"1436":3,"1438":2,"1467":1,"1488":1,"1490":1,"1492":1,"1525":1,"1591":2,"1599":1,"1840":1,"1845":1,"1852":1,"1908":1,"1910":1,"1922":1,"2156":1,"2164":1,"2168":1}}],["succeed",{"3":{"22":1,"109":1,"195":1,"196":1,"342":1,"415":1,"537":1,"854":1,"857":1,"996":1,"1258":1,"1259":2,"1265":1,"1271":1,"1286":2,"1300":5,"1323":3,"1324":2,"1359":3,"1415":1,"1417":1,"1436":3,"1454":1,"1455":1,"1668":1,"1765":1,"1906":1,"2037":1,"2122":1,"2126":2}}],["succeeds",{"3":{"0":4,"31":1,"53":1,"186":1,"234":1,"239":1,"255":1,"318":1,"511":1,"518":1,"549":1,"848":1,"856":1,"988":1,"1018":1,"1212":1,"1237":1,"1247":1,"1252":1,"1255":1,"1286":2,"1294":1,"1300":11,"1311":2,"1322":1,"1323":6,"1324":3,"1334":1,"1339":4,"1350":2,"1352":1,"1359":3,"1367":1,"1380":1,"1395":4,"1396":6,"1402":1,"1410":1,"1415":10,"1417":2,"1435":1,"1436":3,"1438":2,"1443":1,"1456":1,"1472":1,"1488":1,"1492":1,"1631":2,"1649":1,"1657":2,"1701":1,"1748":2,"1749":1,"1755":1,"1776":1,"1835":1,"1840":1,"1845":1,"1882":1,"1923":1,"1944":2,"1947":1,"1962":1,"1992":1,"2007":1,"2165":1}}],["successalert",{"3":{"1436":2}}],["successoutcome",{"3":{"1427":2}}],["successorevent",{"3":{"1199":3,"1207":1}}],["successors",{"3":{"905":1,"1255":1,"1286":1,"1300":1,"1436":3}}],["successor",{"3":{"0":4,"499":1,"846":1,"903":1,"905":3,"906":2,"1252":1,"1258":1,"1259":2,"1270":2,"1286":4,"1290":1,"1300":11,"1436":9,"1438":4,"1496":1,"1640":1,"1667":1,"1926":1,"1982":4,"1984":1,"1985":1}}],["successive",{"3":{"1396":1}}],["successcontrasttext",{"3":{"1324":1}}],["successfully",{"3":{"195":1,"265":1,"527":1,"539":1,"585":1,"818":1,"1259":3,"1270":1,"1300":2,"1324":4,"1359":3,"1395":1,"1436":2,"1455":1,"1639":1,"1641":2,"1653":1,"1677":1,"1843":1}}],["successful",{"2":{"1467":1},"3":{"0":5,"20":1,"21":1,"24":1,"109":1,"120":1,"234":1,"243":1,"258":1,"265":1,"281":1,"312":1,"498":1,"499":2,"500":1,"591":2,"626":1,"725":1,"727":1,"732":1,"733":1,"756":1,"757":1,"758":1,"854":1,"857":1,"881":1,"908":1,"922":1,"988":2,"991":1,"1020":1,"1140":1,"1183":1,"1184":1,"1212":2,"1217":1,"1220":2,"1227":1,"1229":2,"1233":1,"1237":2,"1247":1,"1259":3,"1263":1,"1265":1,"1270":7,"1274":1,"1286":5,"1288":1,"1289":1,"1294":1,"1300":14,"1301":1,"1309":2,"1311":5,"1318":1,"1323":5,"1324":12,"1350":1,"1358":1,"1359":26,"1369":1,"1380":3,"1391":1,"1395":21,"1396":6,"1398":1,"1402":4,"1406":1,"1407":1,"1415":8,"1417":2,"1436":2,"1438":2,"1455":2,"1456":1,"1460":1,"1463":1,"1467":1,"1474":2,"1475":2,"1488":2,"1490":1,"1526":2,"1577":1,"1589":1,"1591":3,"1596":2,"1598":1,"1627":2,"1641":3,"1651":2,"1709":2,"1767":1,"1774":1,"1895":1,"1898":1,"1911":1,"1968":1,"1982":1,"2034":1,"2037":1}}],["successes",{"3":{"0":1,"243":1,"258":1,"1286":1,"1324":1,"1359":1,"1396":2,"1402":2,"1438":1,"1577":1}}],["success",{"0":{"1918":1},"2":{"620":1,"855":1,"1099":1,"1221":1,"2190":1},"3":{"0":5,"109":4,"157":1,"178":1,"196":1,"225":1,"226":1,"230":1,"265":1,"312":1,"350":1,"423":1,"434":1,"435":1,"461":1,"537":1,"539":1,"583":1,"585":1,"620":1,"626":6,"640":1,"737":1,"756":2,"758":2,"766":1,"790":3,"854":2,"855":1,"861":1,"881":1,"897":1,"905":4,"922":1,"926":4,"988":1,"989":1,"996":2,"1018":2,"1075":1,"1089":1,"1099":1,"1103":1,"1168":1,"1212":2,"1217":1,"1219":2,"1220":6,"1221":5,"1223":3,"1227":1,"1229":31,"1236":1,"1237":7,"1247":1,"1252":1,"1256":2,"1259":5,"1264":1,"1265":3,"1270":18,"1271":2,"1286":13,"1289":1,"1290":1,"1292":1,"1294":1,"1300":42,"1304":1,"1309":14,"1311":22,"1318":1,"1322":1,"1323":42,"1324":61,"1339":7,"1346":1,"1350":25,"1358":2,"1359":97,"1365":1,"1366":1,"1369":3,"1379":1,"1380":13,"1389":1,"1390":1,"1395":77,"1396":52,"1398":1,"1402":24,"1407":1,"1408":1,"1415":38,"1416":2,"1417":15,"1425":2,"1427":2,"1433":5,"1436":29,"1438":5,"1445":3,"1455":18,"1456":1,"1460":1,"1467":2,"1473":1,"1474":1,"1475":4,"1488":4,"1492":9,"1496":1,"1526":7,"1561":1,"1577":2,"1589":1,"1591":6,"1596":2,"1641":1,"1651":3,"1653":1,"1686":2,"1702":2,"1709":1,"1749":1,"1770":1,"1805":10,"1821":1,"1822":2,"1896":1,"1898":1,"1903":1,"1911":1,"1912":1,"1923":1,"1924":2,"1930":1,"1933":3,"1940":1,"1975":1,"1976":1,"1982":1,"2001":1,"2045":1,"2046":1,"2063":1,"2067":1,"2092":1,"2096":2,"2156":1,"2163":1,"2165":1,"2169":2,"2177":1,"2189":1,"2190":2,"2196":1}}],["such",{"3":{"0":4,"57":1,"81":2,"145":1,"157":1,"175":1,"185":1,"193":1,"215":1,"234":1,"235":1,"249":1,"290":1,"296":1,"341":1,"352":1,"363":1,"369":1,"390":1,"391":1,"427":1,"428":1,"491":1,"509":1,"536":1,"538":1,"549":1,"605":1,"657":1,"698":1,"707":1,"720":1,"743":3,"767":1,"776":1,"782":1,"799":1,"801":1,"803":1,"868":1,"883":2,"889":1,"930":2,"948":1,"966":1,"980":2,"995":1,"1034":1,"1042":2,"1108":1,"1115":1,"1168":1,"1184":1,"1188":1,"1233":1,"1237":4,"1244":1,"1247":3,"1249":1,"1252":1,"1256":1,"1259":5,"1270":2,"1271":2,"1275":1,"1286":23,"1297":1,"1300":21,"1301":2,"1309":4,"1311":15,"1312":2,"1323":10,"1324":20,"1339":5,"1342":1,"1347":1,"1348":1,"1350":7,"1353":1,"1359":28,"1372":1,"1380":5,"1384":1,"1395":11,"1396":10,"1402":6,"1406":1,"1415":8,"1416":2,"1417":8,"1427":1,"1428":1,"1431":4,"1436":28,"1453":1,"1455":1,"1500":1,"1534":1,"1569":1,"1585":1,"1653":1,"1808":1,"1883":1,"1908":1,"1909":1,"1922":1,"1948":1,"2012":1,"2107":1,"2164":1,"2168":1,"2188":2,"2199":1}}],["superar",{"3":{"1685":2,"1686":2}}],["supervisedusercircle",{"3":{"1415":1}}],["supertype",{"3":{"1339":1}}],["superficial",{"3":{"1140":1}}],["supersession",{"3":{"1324":5,"1436":1,"1478":1}}],["supersets",{"3":{"1247":1}}],["superset",{"3":{"448":1,"564":1,"1270":1,"1309":1,"1311":4,"1436":1,"2131":1}}],["supersede",{"3":{"607":1,"610":1,"1395":3,"1438":1,"1456":1,"1892":1}}],["supersedes",{"1":{"262":1,"263":1,"264":1,"265":1,"266":1,"267":1,"268":1,"269":1},"3":{"0":3,"15":1,"22":1,"45":1,"142":1,"145":2,"262":1,"263":1,"313":1,"326":1,"390":1,"724":1,"739":1,"743":1,"792":1,"903":1,"944":1,"1098":1,"1120":1,"1212":4,"1286":1,"1287":1,"1300":3,"1324":3,"1395":2,"1436":1,"1438":1,"1453":1,"1455":1,"1459":1,"1496":1,"1527":1,"1578":1,"1591":1,"1592":1,"1639":1,"1737":1,"1784":1,"1799":1,"1947":1,"2081":1,"2085":1,"2232":4}}],["superseded",{"0":{"137":1},"3":{"0":8,"1":1,"27":1,"84":1,"91":2,"92":1,"109":1,"117":1,"122":1,"130":1,"136":3,"137":2,"142":1,"195":2,"197":1,"200":1,"264":1,"269":1,"308":1,"372":1,"395":3,"408":2,"409":1,"438":1,"443":1,"463":2,"465":1,"475":2,"476":1,"477":1,"490":1,"492":1,"493":1,"497":2,"516":1,"522":2,"523":1,"543":6,"547":3,"549":1,"607":1,"609":2,"611":1,"833":1,"867":1,"950":1,"1016":1,"1096":1,"1104":1,"1114":1,"1212":4,"1259":1,"1301":1,"1309":1,"1311":1,"1324":6,"1394":1,"1395":12,"1415":1,"1436":3,"1465":1,"1467":1,"1473":1,"1478":1,"1496":6,"1515":1,"1585":1,"1591":1,"1600":1,"1611":1,"1631":1,"1671":1,"1737":1,"2126":1,"2158":1,"2232":1}}],["superseding",{"3":{"0":2,"1":1,"130":1,"495":1,"1287":1,"1527":1,"2085":1}}],["suppose",{"3":{"1859":1}}],["supposedly",{"3":{"2081":1}}],["supposed",{"3":{"141":1,"673":1,"765":1,"789":1,"1019":1,"1323":2,"1359":1,"1427":1,"1455":1,"1803":1,"1906":1,"1952":1,"2042":1,"2050":1,"2099":1,"2130":1,"2135":1,"2147":1,"2154":1}}],["supportapiclient",{"3":{"1653":1,"1702":1}}],["supportemail",{"3":{"1359":1}}],["supporter",{"3":{"1350":1}}],["supportedversions",{"3":{"1311":1,"1436":2}}],["supportedincludes",{"3":{"1310":6,"1865":1}}],["supportedfk",{"3":{"1199":2,"1207":1}}],["supportedchild",{"3":{"1199":2,"1207":1}}],["supportedculturestests",{"3":{"1199":1,"1207":2,"1438":2}}],["supportedcultures",{"2":{"265":1,"268":1,"2083":1,"2086":1},"3":{"265":8,"268":1,"1199":15,"1203":1,"1207":2,"1237":2,"1311":15,"1324":11,"1415":7,"1417":5,"1436":12,"1438":1,"1496":3,"1577":1,"1653":1,"2083":4,"2085":1,"2086":1}}],["supportedoperators",{"2":{"330":1,"331":1},"3":{"330":1,"331":1,"1241":2,"1247":10,"1988":1}}],["supported",{"0":{"1713":1},"2":{"31":3},"3":{"0":1,"31":3,"148":1,"170":1,"216":1,"265":1,"330":1,"350":1,"351":1,"352":1,"448":3,"501":1,"549":1,"550":1,"572":1,"682":1,"741":1,"1033":1,"1050":2,"1108":1,"1132":2,"1212":2,"1213":1,"1229":1,"1237":1,"1241":1,"1243":2,"1244":1,"1247":8,"1259":1,"1271":1,"1277":1,"1278":1,"1286":13,"1300":5,"1301":1,"1310":4,"1311":17,"1323":1,"1324":4,"1336":1,"1339":6,"1359":4,"1376":1,"1380":3,"1395":1,"1404":1,"1405":1,"1416":1,"1417":9,"1436":9,"1438":1,"1443":1,"1444":1,"1467":1,"1487":1,"1488":1,"1500":1,"1534":1,"1559":3,"1567":1,"1577":1,"1591":1,"1627":1,"1632":1,"1640":3,"1641":1,"1667":1,"1670":1,"1674":1,"1711":1,"1727":1,"1729":1,"1734":1,"1761":1,"1860":1,"1867":1,"1868":1,"1902":1,"1977":1,"1978":1,"1979":1,"1988":1,"2055":1,"2083":1,"2131":3,"2133":1,"2142":1,"2149":1,"2232":1}}],["supporting",{"0":{"1268":1},"3":{"659":1,"683":1,"845":1,"1247":2,"1272":1,"1284":1,"1286":2,"1287":1,"1311":1,"1312":1,"1324":1,"1346":1,"1350":1,"1415":1,"1432":1,"1436":1,"1488":1,"1763":1,"1774":1}}],["supportshttpstrafficonly",{"3":{"1467":1}}],["supportsrelationaloperator",{"3":{"1286":1}}],["supportstransactions",{"2":{"1840":1},"3":{"988":1,"1286":1,"1840":1}}],["supportsoutbox",{"2":{"720":1,"1174":1,"1175":1,"1178":1,"1861":1},"3":{"166":1,"715":1,"720":1,"1174":1,"1175":1,"1178":1,"1496":1,"1861":1}}],["supports",{"3":{"0":1,"10":1,"57":1,"449":1,"527":1,"528":1,"618":1,"640":1,"642":1,"845":1,"846":1,"891":1,"1019":1,"1048":1,"1050":1,"1237":1,"1241":1,"1247":2,"1270":1,"1286":2,"1300":2,"1323":1,"1326":1,"1339":1,"1340":1,"1342":1,"1350":2,"1359":5,"1395":1,"1396":3,"1417":2,"1436":1,"1456":1,"1467":1,"1488":1,"1534":1,"1551":1,"1629":1,"1631":1,"1639":1,"1675":1,"1764":1,"1773":1,"1799":1,"1815":1,"1827":1,"1834":1,"1895":1,"2129":1}}],["supportsifmatchattributetests",{"3":{"1199":1,"1207":2,"1438":2}}],["supportsifmatchattribute",{"2":{"341":1,"922":1,"1375":1,"1651":1,"1874":1},"3":{"341":4,"343":1,"345":1,"922":1,"1199":22,"1203":1,"1207":2,"1286":1,"1300":3,"1311":17,"1347":1,"1350":2,"1359":17,"1375":1,"1380":16,"1402":9,"1496":1,"1651":2,"1874":1}}],["supportsifmatch",{"2":{"343":1,"346":1,"1635":1},"3":{"0":2,"341":1,"343":2,"346":1,"922":1,"1212":1,"1286":1,"1311":4,"1350":1,"1359":2,"1373":1,"1375":1,"1380":5,"1402":5,"1438":2,"1635":1,"1651":1,"1664":1,"1666":1,"1874":1}}],["support",{"0":{"1347":1,"1359":1,"1376":1,"1390":1},"1":{"1711":1,"1712":1,"1713":1,"1714":1,"1715":1,"1716":1},"2":{"1646":1,"1649":1,"1650":5,"1657":1,"1697":2,"1698":1,"1699":1,"1727":2,"1728":2,"2089":1},"3":{"0":4,"12":1,"24":1,"109":1,"150":1,"166":2,"243":1,"363":1,"447":1,"461":1,"552":1,"556":1,"633":1,"650":1,"690":1,"743":1,"800":1,"812":1,"845":1,"848":1,"853":1,"904":1,"931":1,"980":2,"1019":1,"1052":1,"1073":1,"1074":2,"1075":3,"1077":2,"1175":2,"1192":1,"1202":1,"1203":1,"1207":66,"1208":2,"1211":1,"1232":1,"1237":2,"1247":2,"1257":2,"1259":2,"1270":3,"1279":1,"1286":19,"1300":4,"1311":3,"1324":2,"1340":1,"1342":1,"1350":5,"1351":1,"1359":16,"1376":1,"1380":3,"1395":12,"1396":1,"1405":1,"1415":2,"1416":1,"1417":5,"1428":2,"1429":3,"1430":1,"1436":59,"1438":6,"1467":1,"1487":1,"1488":3,"1490":2,"1492":3,"1496":2,"1558":1,"1567":1,"1577":2,"1582":1,"1602":1,"1629":3,"1630":2,"1631":2,"1635":1,"1638":1,"1639":1,"1640":2,"1641":2,"1646":1,"1649":1,"1650":5,"1653":3,"1654":2,"1656":5,"1657":2,"1665":1,"1673":1,"1674":1,"1685":2,"1697":3,"1698":2,"1699":1,"1711":1,"1716":1,"1727":4,"1728":2,"1774":1,"1873":1,"1898":1,"1951":1,"1974":1,"2073":1,"2089":1,"2128":1,"2129":1,"2131":1,"2133":2,"2141":1,"2200":1,"2220":1,"2234":1}}],["suppresswhenunderprobe",{"3":{"1339":2}}],["suppressnextlocationchanged",{"3":{"1324":2}}],["suppressfinalize",{"3":{"1324":2,"1396":3}}],["suppressible",{"3":{"1286":2}}],["suppressing",{"3":{"1286":2,"1339":1,"1436":1,"1438":1,"1443":2,"1450":1,"1639":1}}],["suppression",{"3":{"0":2,"258":1,"370":1,"371":1,"619":1,"726":1,"774":2,"941":1,"980":1,"982":2,"1108":1,"1111":1,"1133":1,"1237":5,"1259":5,"1266":1,"1270":2,"1271":1,"1273":1,"1286":5,"1300":6,"1309":2,"1311":5,"1323":5,"1324":6,"1339":16,"1350":1,"1359":2,"1395":4,"1396":2,"1415":2,"1416":3,"1417":2,"1427":1,"1436":7,"1441":2,"1453":1,"1487":1,"1488":1,"1490":1,"1496":1,"1586":1,"1591":1,"2057":1}}],["suppressions",{"3":{"0":2,"371":1,"776":1,"980":1,"981":2,"982":2,"1237":2,"1311":1,"1324":1,"1417":1,"1488":1,"1552":1,"1577":1,"1591":1,"1600":1,"2079":1}}],["suppressmessageattribute",{"3":{"1237":1,"1324":1}}],["suppressmessage",{"2":{"1270":1,"1324":1,"1415":1},"3":{"142":1,"980":1,"1229":1,"1247":1,"1270":5,"1286":2,"1300":4,"1311":3,"1312":1,"1323":2,"1324":6,"1369":1,"1380":1,"1396":1,"1415":1,"1427":2,"1436":4,"1496":1}}],["suppress",{"3":{"135":1,"231":1,"790":1,"1108":1,"1273":1,"1286":1,"1309":1,"1461":1,"1526":1,"1591":2,"1600":1,"2043":1,"2160":1,"2166":1}}],["suppresses",{"3":{"18":1,"216":1,"225":1,"733":1,"819":1,"1034":1,"1256":1,"1259":1,"1271":1,"1286":3,"1309":1,"1324":2,"1339":2,"1359":1,"1396":1,"1402":1,"1415":1,"1436":2,"1467":1,"1596":1,"1677":1,"2157":1}}],["suppressed",{"3":{"0":4,"130":1,"135":1,"265":1,"370":2,"454":1,"674":1,"692":1,"726":1,"790":1,"939":1,"941":1,"980":2,"983":1,"1044":1,"1212":1,"1241":1,"1259":2,"1270":1,"1273":1,"1286":2,"1309":1,"1312":2,"1323":1,"1324":3,"1339":2,"1387":1,"1395":3,"1415":1,"1416":2,"1417":2,"1427":1,"1453":2,"1496":1,"1526":1,"1569":1,"1577":1,"1591":2,"1841":1,"1897":1,"1934":1,"2157":1,"2192":1}}],["supplements",{"3":{"1395":1}}],["supplementary",{"3":{"1389":1,"1630":1}}],["supplemental",{"3":{"1286":1}}],["supplementation",{"3":{"1286":1}}],["supplied",{"1":{"154":1,"155":1,"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":1},"3":{"0":2,"31":1,"103":1,"109":1,"111":1,"154":1,"157":2,"175":1,"186":2,"190":1,"231":1,"265":1,"318":2,"330":1,"332":1,"350":2,"359":1,"378":1,"381":1,"397":1,"409":1,"423":1,"427":1,"443":2,"549":1,"599":1,"649":1,"674":1,"733":1,"795":1,"861":1,"905":1,"1059":2,"1091":1,"1115":2,"1116":1,"1132":1,"1184":1,"1228":1,"1229":4,"1237":2,"1239":1,"1242":2,"1247":15,"1270":3,"1271":12,"1282":1,"1285":1,"1286":19,"1289":1,"1300":20,"1301":4,"1306":2,"1309":7,"1310":1,"1311":18,"1323":9,"1324":16,"1334":1,"1339":9,"1343":3,"1349":1,"1350":15,"1352":1,"1355":1,"1359":61,"1369":2,"1378":1,"1380":6,"1395":10,"1396":17,"1402":7,"1415":14,"1416":2,"1417":5,"1421":1,"1423":1,"1424":1,"1425":1,"1427":2,"1429":2,"1432":1,"1436":24,"1438":4,"1467":2,"1526":2,"1534":1,"1631":1,"1663":1,"1748":1,"1764":1,"1765":2,"1767":1,"1805":1,"1830":1,"1831":1,"1909":1,"1912":1,"1937":1,"1950":1,"1977":1,"1988":1,"1989":1,"1990":1,"1994":1,"2000":1,"2002":1,"2131":1,"2136":1,"2196":1,"2201":1}}],["supplies",{"3":{"0":3,"5":1,"25":1,"31":1,"67":1,"79":1,"132":1,"150":1,"157":1,"166":1,"186":2,"230":1,"235":1,"265":1,"266":1,"269":1,"310":2,"318":1,"350":1,"398":1,"413":1,"415":1,"448":2,"460":1,"461":1,"507":1,"544":1,"572":4,"583":1,"603":1,"609":1,"610":1,"633":1,"639":1,"648":1,"653":1,"674":1,"683":1,"724":1,"725":2,"731":1,"799":1,"827":1,"836":1,"846":1,"881":1,"922":1,"923":1,"946":1,"972":1,"1018":3,"1050":3,"1059":1,"1074":1,"1083":2,"1108":1,"1161":3,"1184":1,"1237":4,"1247":4,"1257":1,"1258":1,"1259":5,"1265":1,"1269":1,"1270":12,"1271":3,"1286":13,"1289":1,"1300":12,"1301":3,"1302":1,"1303":1,"1304":1,"1305":2,"1309":7,"1310":1,"1311":15,"1323":11,"1324":21,"1326":1,"1328":1,"1333":1,"1336":1,"1338":1,"1339":6,"1350":3,"1352":1,"1354":1,"1355":1,"1359":54,"1360":1,"1369":4,"1380":4,"1383":1,"1395":25,"1396":10,"1402":2,"1406":2,"1407":1,"1409":1,"1410":1,"1412":1,"1414":1,"1415":22,"1416":5,"1417":6,"1427":3,"1431":1,"1435":1,"1436":98,"1438":2,"1467":1,"1488":3,"1489":2,"1490":1,"1526":1,"1651":1,"1654":1,"1666":2,"1685":1,"1686":1,"1708":1,"1765":1,"1810":3,"1815":1,"1817":1,"1856":1,"1889":1,"1891":1,"1897":1,"1908":1,"1917":1,"1932":1,"1937":1,"1940":1,"1945":1,"1994":1,"1995":1,"1997":1,"2010":1,"2042":1,"2043":3,"2044":1,"2055":3,"2072":1,"2085":1,"2111":1,"2114":1,"2131":2,"2138":1,"2142":1}}],["supplyparameterfromqueryattribute",{"3":{"1436":1}}],["supplyparameterfromquery",{"3":{"1324":3,"1395":1,"1436":3,"1526":1}}],["supplying",{"3":{"136":1,"341":1,"470":1,"640":1,"854":1,"1004":1,"1214":1,"1259":1,"1286":2,"1297":1,"1309":2,"1311":6,"1323":2,"1324":3,"1338":1,"1350":1,"1359":12,"1386":1,"1395":3,"1396":2,"1415":2,"1417":2,"1431":2,"1436":13,"1496":1,"1765":1,"1957":1,"2096":1}}],["supply",{"0":{"1569":1,"1673":1,"1738":1},"1":{"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1},"3":{"0":3,"117":1,"216":1,"314":1,"367":1,"369":3,"370":1,"371":1,"373":1,"376":2,"499":1,"529":1,"532":1,"548":1,"583":1,"590":1,"591":1,"592":1,"595":1,"599":1,"603":1,"625":1,"626":1,"756":1,"765":1,"870":1,"874":1,"922":1,"1017":1,"1058":1,"1070":1,"1110":1,"1162":1,"1168":1,"1212":1,"1214":1,"1216":1,"1247":1,"1249":1,"1259":1,"1265":2,"1270":1,"1286":6,"1300":5,"1301":1,"1311":7,"1323":4,"1324":10,"1326":1,"1339":6,"1342":1,"1350":1,"1359":5,"1362":1,"1369":2,"1371":2,"1380":6,"1395":4,"1396":1,"1402":2,"1415":3,"1417":7,"1430":1,"1431":1,"1433":1,"1436":19,"1443":1,"1445":2,"1450":1,"1453":2,"1454":3,"1455":2,"1459":7,"1460":1,"1461":3,"1463":1,"1465":1,"1467":1,"1475":1,"1483":1,"1486":3,"1488":1,"1489":1,"1491":1,"1493":1,"1499":1,"1526":11,"1534":1,"1535":1,"1576":1,"1577":2,"1586":1,"1591":6,"1600":1,"1649":1,"1651":1,"1673":1,"1723":1,"1782":1,"1796":1,"1799":1,"1851":1,"1875":1,"1891":1,"1896":1,"1983":1,"2042":1,"2101":1,"2104":1,"2114":1,"2150":1,"2152":1,"2232":1}}],["subrequests",{"3":{"1969":1}}],["subdirectories",{"3":{"1464":1}}],["subdomains",{"3":{"1339":1}}],["subdomain",{"3":{"698":1,"1184":1}}],["suburbs",{"3":{"1350":1,"1359":2}}],["subgroup",{"3":{"1347":1}}],["subverted",{"3":{"1286":1}}],["subagent",{"3":{"1011":1}}],["subfolders",{"3":{"607":1,"693":1}}],["submissions",{"3":{"1347":1,"1350":5,"1359":3,"1396":1,"1402":3,"1467":2,"1635":3,"1637":1,"1638":3}}],["submission",{"0":{"1481":1},"3":{"173":1,"179":1,"1018":1,"1324":1,"1350":2,"1359":2,"1360":1,"1366":2,"1369":1,"1380":3,"1395":1,"1396":3,"1399":1,"1401":1,"1402":6,"1415":1,"1436":1,"1447":1,"1467":1,"1471":1,"1481":3,"1482":1,"1483":1,"1623":1,"1629":1,"1630":2,"1631":3,"1632":4,"1638":3,"1639":4,"1640":6,"1764":1,"1765":1,"1767":1,"1999":1,"2001":1,"2200":1}}],["submitbutton",{"3":{"1436":2}}],["submitbuttontext",{"3":{"1396":1}}],["submitanswerasync",{"3":{"1396":6}}],["submitanswersasync",{"3":{"1396":11}}],["submitasync",{"3":{"1396":2,"1402":1}}],["submitfailed",{"3":{"1396":1}}],["submitfeedback",{"3":{"1396":2}}],["submitfeedbackasync",{"3":{"1396":3}}],["submitter",{"3":{"1398":1,"1402":1,"1632":1}}],["submittedquestions",{"3":{"1396":1,"1415":3}}],["submittedonutc",{"3":{"1350":2,"1396":2}}],["submitted",{"3":{"280":1,"282":1,"285":1,"690":1,"1018":2,"1238":1,"1247":1,"1300":2,"1323":5,"1324":3,"1349":1,"1350":11,"1359":13,"1366":1,"1369":2,"1380":3,"1395":3,"1396":12,"1398":1,"1399":1,"1402":5,"1410":1,"1415":4,"1436":1,"1438":1,"1455":1,"1534":1,"1629":1,"1630":1,"1631":1,"1632":3,"1638":1,"1639":2,"1640":5,"1765":1,"1999":1,"2000":2,"2002":2}}],["submittingwithoutatoken",{"3":{"1436":1}}],["submitting",{"3":{"1300":2,"1307":1,"1359":8,"1380":1,"1396":3,"1402":3,"1561":1,"1630":1,"1631":1,"1638":2,"1639":1,"1640":1,"1946":1,"1998":1}}],["submitreviewhandler",{"3":{"552":1,"1767":2}}],["submitquestionasync",{"3":{"1402":1}}],["submitquestionrequest",{"3":{"1199":8,"1203":1,"1207":2,"1396":3,"1402":8}}],["submitquestioncommandvalidatortests",{"3":{"1199":1,"1207":2}}],["submitquestioncommandvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1402":10}}],["submitquestioncommand",{"2":{"523":1},"3":{"1199":5,"1203":1,"1207":2,"1402":9}}],["submitquestionhandlertests",{"3":{"1199":1,"1207":3,"1436":1}}],["submitquestionhandler",{"2":{"522":1,"523":1,"524":1,"899":1,"900":1,"996":1,"1102":1,"1534":1},"3":{"0":2,"493":1,"494":1,"495":1,"522":2,"523":3,"524":3,"897":2,"899":2,"900":1,"996":2,"1100":2,"1102":2,"1199":1,"1203":1,"1207":2,"1247":2,"1350":4,"1359":2,"1396":5,"1399":8,"1402":20,"1436":2,"1496":1,"1534":1}}],["submit",{"3":{"160":1,"493":1,"494":1,"495":1,"522":1,"523":1,"524":1,"552":1,"897":3,"899":1,"900":1,"994":2,"996":4,"1100":1,"1203":3,"1207":6,"1247":2,"1265":1,"1270":1,"1300":1,"1324":13,"1359":14,"1369":1,"1373":1,"1380":7,"1395":10,"1396":33,"1397":1,"1399":1,"1402":34,"1415":2,"1436":15,"1467":1,"1488":6,"1526":3,"1534":1,"1561":3,"1591":1,"1607":1,"1608":1,"1626":1,"1627":1,"1632":4,"1638":1,"1639":1,"1640":1,"1741":1,"1742":1,"1746":1,"1748":1,"1765":2}}],["submitsitasthestoredset",{"3":{"1436":1}}],["submitscanasync",{"3":{"1396":1}}],["submits",{"3":{"156":1,"1349":1,"1350":3,"1352":1,"1369":1,"1380":1,"1395":1,"1396":2,"1399":1,"1402":2,"1432":1,"1436":6,"1488":1,"1632":3,"1765":2}}],["subtitled",{"3":{"1395":2}}],["subtitles",{"3":{"1395":1,"1480":1}}],["subtitle",{"3":{"1395":1,"1480":2,"1780":1,"1788":1,"1794":1,"1803":1,"1808":1,"1813":1,"1818":1,"1828":1,"1835":1,"1847":1,"1854":1,"1863":1,"1869":1,"1878":1,"1887":1,"1893":1,"1900":1,"1906":1,"1913":1,"1925":1,"1931":1,"1942":1,"1951":1,"1960":1,"1966":1,"1973":1,"1980":1,"1986":1,"1992":1,"1998":1,"2003":1,"2015":1,"2029":1,"2039":1,"2050":1,"2061":1,"2070":1,"2081":1,"2087":1,"2099":1,"2109":1,"2116":1,"2124":1,"2129":1,"2134":1,"2140":1,"2147":1,"2154":1,"2161":1,"2170":1,"2181":1,"2194":1,"2204":1}}],["subtitle2",{"3":{"1324":1}}],["subtitle1",{"3":{"1324":1}}],["subtag",{"3":{"1311":2}}],["subtrees",{"3":{"1487":3}}],["subtree",{"3":{"1286":1,"1333":1,"1339":2,"1436":1,"1443":1,"1487":2}}],["subtract",{"3":{"1395":1}}],["subtracted",{"3":{"1369":1}}],["subtracts",{"3":{"742":1,"1286":1,"1300":1,"1323":1,"1436":2,"1749":1}}],["subtractive",{"3":{"1300":1}}],["subtraction",{"3":{"741":1,"1019":1,"1359":1,"1362":1,"1369":1}}],["subtracting",{"3":{"137":1}}],["subtype",{"3":{"1259":1}}],["subtypes",{"3":{"1229":3,"1807":1}}],["subtly",{"3":{"274":1,"840":1,"1051":1,"1359":3,"1436":2,"1479":1,"1828":1,"2082":1}}],["subtlest",{"3":{"1291":1,"1300":1,"1339":1,"1417":1}}],["subtleties",{"3":{"1286":1,"1436":1}}],["subtlety",{"3":{"97":1,"1252":1,"1300":1,"1320":1,"1328":1,"1339":1,"1348":1,"1395":1,"1405":1,"1415":1,"1416":1,"1436":1,"1881":1}}],["subtle",{"3":{"574":1,"800":1,"862":1,"1229":1,"1247":3,"1258":1,"1259":2,"1262":1,"1270":1,"1274":1,"1286":1,"1300":1,"1309":3,"1311":2,"1323":3,"1324":4,"1332":1,"1350":3,"1359":1,"1380":1,"1395":1,"1396":3,"1415":1,"1436":5,"1454":1,"1815":1,"1818":1,"1822":1,"1862":1,"1881":1,"1886":1,"2041":1,"2074":1,"2118":1,"2136":1,"2239":1}}],["subtler",{"3":{"133":1,"610":1,"1237":1,"1332":1,"1417":1,"2100":1,"2106":1}}],["subquery",{"3":{"24":1,"1237":1,"1259":1,"1286":1,"1309":3,"1401":1,"1402":2}}],["sub",{"1":{"1942":1,"1943":1,"1944":1,"1945":1,"1946":1,"1947":1,"1948":1,"1949":1,"1950":1},"2":{"298":1,"910":1},"3":{"0":6,"68":1,"157":1,"161":1,"175":1,"259":1,"298":1,"303":3,"318":2,"324":1,"379":1,"413":1,"416":1,"493":1,"497":1,"545":1,"709":1,"905":3,"910":1,"954":1,"1004":1,"1006":1,"1011":1,"1018":4,"1019":1,"1042":1,"1238":1,"1269":1,"1270":1,"1286":2,"1288":2,"1289":1,"1296":2,"1300":19,"1311":2,"1323":1,"1324":2,"1332":1,"1339":3,"1350":3,"1359":2,"1362":1,"1366":1,"1369":3,"1371":1,"1372":1,"1380":3,"1395":2,"1396":3,"1415":2,"1432":1,"1436":12,"1474":1,"1488":1,"1492":1,"1526":3,"1529":1,"1530":1,"1531":1,"1532":1,"1535":1,"1582":1,"1585":1,"1594":1,"1600":1,"1747":1,"1765":1,"1771":1,"1779":1,"1815":1,"1942":1,"1957":1,"1982":1,"1995":1,"2033":1,"2037":1,"2043":1,"2138":1,"2186":1,"2208":1}}],["subclassable",{"3":{"622":1,"1286":1}}],["subclasses",{"3":{"0":8,"27":2,"76":1,"124":1,"130":1,"137":1,"139":1,"140":1,"147":1,"160":1,"281":1,"283":1,"305":1,"314":1,"465":1,"523":1,"549":1,"572":3,"573":1,"575":1,"577":1,"578":5,"609":1,"618":2,"631":2,"632":1,"635":1,"707":1,"723":1,"725":3,"741":1,"744":1,"749":1,"751":1,"809":1,"846":1,"881":1,"884":1,"905":1,"912":1,"964":1,"973":1,"976":1,"1004":1,"1018":2,"1074":2,"1091":1,"1136":1,"1161":1,"1162":1,"1163":1,"1168":1,"1212":1,"1214":1,"1231":1,"1237":3,"1247":6,"1252":1,"1259":5,"1262":1,"1265":1,"1270":7,"1271":1,"1286":5,"1300":7,"1311":5,"1312":1,"1322":1,"1323":4,"1324":6,"1354":1,"1359":8,"1384":1,"1395":4,"1398":1,"1402":1,"1406":1,"1409":1,"1415":4,"1418":1,"1427":2,"1429":1,"1431":2,"1436":54,"1438":2,"1476":1,"1487":3,"1488":2,"1489":8,"1496":2,"1526":3,"1577":5,"1582":2,"1654":1,"1666":1,"1826":1,"1857":1,"1896":1,"1983":1,"2000":1,"2042":1,"2055":3,"2057":1,"2101":1,"2104":1,"2105":1,"2107":1,"2111":1,"2138":1,"2232":1}}],["subclassed",{"3":{"0":3,"51":1,"80":1,"130":1,"265":1,"302":1,"572":4,"573":1,"574":1,"578":2,"638":1,"723":1,"972":1,"1050":1,"1054":1,"1161":1,"1168":1,"1247":1,"1259":1,"1270":3,"1286":1,"1300":1,"1310":1,"1311":3,"1323":9,"1359":1,"1395":4,"1396":1,"1430":1,"1436":71,"1488":3,"1489":2,"1526":1,"1576":1,"1577":2,"1582":1,"1583":1,"1586":2,"2042":1,"2055":1,"2101":1,"2131":1,"2178":1}}],["subclassing",{"3":{"0":2,"534":1,"545":1,"611":1,"619":1,"1075":1,"1247":2,"1270":1,"1271":2,"1310":1,"1311":3,"1323":3,"1359":3,"1402":3,"1416":1,"1436":2,"1488":3,"1489":1,"1577":1,"1654":1,"1667":1,"1815":1,"1891":1,"2108":1}}],["subclass",{"0":{"1406":1,"2104":1},"3":{"0":10,"27":1,"47":1,"54":1,"80":1,"109":1,"128":1,"134":1,"135":3,"136":2,"139":1,"142":1,"147":1,"218":1,"233":1,"235":2,"281":1,"283":1,"310":4,"341":1,"350":1,"351":1,"352":1,"446":1,"448":4,"449":1,"450":2,"455":1,"459":2,"461":1,"463":1,"465":1,"497":2,"498":1,"499":1,"500":1,"518":1,"523":2,"536":3,"540":1,"545":1,"551":1,"572":8,"573":1,"574":2,"575":1,"577":1,"585":2,"607":1,"609":3,"610":1,"611":1,"614":1,"616":1,"618":1,"631":2,"635":1,"640":1,"706":1,"720":1,"723":1,"724":1,"725":8,"726":1,"727":1,"749":2,"813":1,"814":1,"855":1,"881":3,"884":1,"905":2,"907":1,"909":1,"910":1,"914":2,"920":1,"922":1,"924":1,"926":3,"954":3,"956":1,"957":1,"960":2,"972":1,"973":1,"974":1,"1004":1,"1005":2,"1048":1,"1050":1,"1054":1,"1058":1,"1059":2,"1065":1,"1067":1,"1069":1,"1081":1,"1083":2,"1091":2,"1100":1,"1133":2,"1135":2,"1137":1,"1161":3,"1168":2,"1169":1,"1171":1,"1226":1,"1229":2,"1237":2,"1244":2,"1247":6,"1252":1,"1259":10,"1265":1,"1270":21,"1271":1,"1272":1,"1282":1,"1286":13,"1289":2,"1290":1,"1300":11,"1310":6,"1311":20,"1312":1,"1318":2,"1322":1,"1323":31,"1324":5,"1334":1,"1339":5,"1353":1,"1359":49,"1369":2,"1380":6,"1384":1,"1395":10,"1396":3,"1402":3,"1406":3,"1407":2,"1410":1,"1411":1,"1412":1,"1413":2,"1414":1,"1415":22,"1416":2,"1417":2,"1427":2,"1428":1,"1429":3,"1431":2,"1432":1,"1433":1,"1435":1,"1436":263,"1438":9,"1443":1,"1467":1,"1488":4,"1489":7,"1490":1,"1491":2,"1496":1,"1525":1,"1526":7,"1532":1,"1577":1,"1582":1,"1585":1,"1591":5,"1653":1,"1654":2,"1660":1,"1671":2,"1689":1,"1699":1,"1727":1,"1782":1,"1815":2,"1816":1,"1849":1,"1865":1,"1875":1,"1898":1,"1977":1,"1978":2,"1982":1,"1983":1,"1990":1,"2000":1,"2043":3,"2044":3,"2046":2,"2055":1,"2056":1,"2101":1,"2102":1,"2103":1,"2104":2,"2107":1,"2131":7,"2132":2,"2133":1,"2165":2,"2167":1,"2180":1,"2196":1,"2197":1,"2201":1}}],["subjective",{"3":{"1801":1}}],["subjects",{"3":{"1436":7,"1455":1,"2063":1}}],["subjectsnapshot",{"3":{"1199":2,"1207":1}}],["subjectkey",{"3":{"0":1,"690":2,"1212":1,"1396":22,"1415":2,"1631":2}}],["subject",{"0":{"1299":1},"1":{"722":1,"723":1,"724":1,"725":1,"726":1,"727":1,"728":1,"729":1},"2":{"31":1,"303":1,"1299":1,"2138":1},"3":{"0":5,"31":1,"38":1,"39":3,"41":2,"42":2,"95":1,"96":1,"136":1,"137":1,"157":2,"159":1,"161":1,"173":2,"175":1,"181":1,"230":1,"303":1,"358":1,"583":1,"585":1,"625":1,"690":2,"691":3,"692":1,"693":1,"698":1,"700":1,"716":1,"722":1,"724":4,"725":6,"727":3,"745":1,"765":1,"766":1,"868":1,"896":2,"905":1,"976":1,"1026":1,"1028":1,"1044":1,"1199":6,"1207":1,"1212":1,"1229":1,"1236":3,"1237":8,"1270":2,"1277":1,"1283":1,"1286":3,"1299":4,"1300":29,"1308":1,"1309":21,"1311":7,"1312":2,"1320":1,"1322":2,"1323":20,"1324":1,"1350":5,"1359":6,"1395":3,"1396":51,"1402":2,"1403":1,"1410":4,"1415":51,"1417":1,"1431":1,"1435":1,"1436":33,"1438":11,"1455":1,"1457":1,"1460":1,"1461":1,"1467":3,"1472":5,"1487":1,"1489":5,"1492":1,"1567":2,"1591":1,"1597":1,"1631":6,"1639":5,"1640":1,"1641":1,"1666":1,"1747":1,"1751":1,"1764":1,"1765":4,"1772":1,"1908":2,"1920":1,"1964":1,"1974":1,"2000":1,"2044":1,"2062":1,"2068":1,"2138":1,"2141":1,"2156":1,"2158":1,"2165":1,"2193":1,"2232":2,"2239":1}}],["subsuming",{"3":{"1436":1}}],["subsumes",{"3":{"1436":1,"1731":1}}],["subsequent",{"3":{"388":1,"390":1,"1247":2,"1259":1,"1286":2,"1311":2,"1324":1,"1359":1,"1456":1,"1475":1,"1491":1,"1630":1,"1635":3,"1639":1,"1641":1,"1908":1}}],["subsequently",{"3":{"91":1,"1324":1}}],["subsections",{"3":{"1467":1}}],["subsection",{"3":{"258":1,"1496":2}}],["subsets",{"3":{"0":1,"1242":1,"1247":1,"1324":1,"1348":1,"1350":2,"1436":2}}],["subset",{"3":{"0":1,"137":1,"140":1,"184":1,"186":1,"187":2,"741":1,"751":1,"954":1,"1215":1,"1242":1,"1244":1,"1245":1,"1247":6,"1259":1,"1271":1,"1286":3,"1300":6,"1332":1,"1350":1,"1373":1,"1377":2,"1380":8,"1396":4,"1405":1,"1409":1,"1415":6,"1417":1,"1486":1,"1496":4,"1526":1,"1560":1,"1614":1,"1617":1,"1618":1,"1621":2,"1627":1,"1961":1,"1963":1,"2075":1,"2111":1,"2150":2}}],["substantial",{"3":{"1436":1}}],["substantive",{"3":{"0":1,"77":1,"250":1,"251":1,"252":1,"257":1,"543":4,"1270":1,"1324":1,"1402":1,"1888":1}}],["substance",{"3":{"200":1,"256":1,"258":1,"464":1,"524":1,"703":1,"797":1,"875":1,"958":1,"1216":1,"1286":1,"1324":1,"1359":1,"1436":1,"1516":1,"1523":1,"1526":7,"1537":1,"1577":2,"1588":1,"1590":1,"1591":2,"1592":4,"1784":2,"1797":1,"1799":1}}],["substitutability",{"3":{"1237":1,"1270":1,"1286":2,"1300":1,"1359":1,"1417":3,"1427":1}}],["substitutable",{"3":{"641":1,"1309":1,"1395":1,"1417":1,"1436":1,"1538":1,"1842":1}}],["substituting",{"3":{"448":1,"545":1,"685":1,"1300":1,"1311":1,"1323":2,"1324":1,"1375":1,"1380":2,"1395":1,"1396":1,"1416":1,"1436":2,"1815":2}}],["substitutionpriority",{"2":{"1279":1},"3":{"1175":1,"1279":1,"1286":8}}],["substitutions",{"3":{"633":1}}],["substitution",{"0":{"170":1},"3":{"170":1,"543":1,"550":1,"1175":3,"1239":1,"1247":5,"1280":1,"1286":9,"1300":1,"1311":2,"1323":1,"1339":2,"1380":1,"1396":2,"1436":1,"1465":1,"1475":1,"1577":2,"1685":1,"1686":1,"1815":2,"1817":2,"1897":1,"1899":1,"1916":1,"2149":1,"2153":1}}],["substituteengine",{"3":{"1286":1}}],["substituteapiversioninurl",{"2":{"448":1},"3":{"448":1,"1311":1}}],["substituted",{"3":{"214":1,"359":1,"365":1,"369":1,"370":1,"838":1,"1237":1,"1247":1,"1259":1,"1286":2,"1324":1,"1336":1,"1339":1,"1350":1,"1359":3,"1375":1,"1380":3,"1395":1,"1396":1,"1436":4,"2142":1}}],["substitutes",{"3":{"170":1,"212":1,"954":1,"1279":1,"1280":2,"1286":9,"1300":1,"1309":2,"1312":1,"1323":1,"1324":4,"1339":1,"1359":2,"1380":1,"1396":1,"1417":3,"1436":3,"1438":2}}],["substitute",{"3":{"170":3,"546":1,"1034":1,"1177":1,"1259":1,"1286":8,"1311":2,"1324":5,"1359":1,"1362":1,"1368":1,"1373":1,"1395":1,"1396":2,"1417":1,"1481":1,"1646":1,"1897":1,"1992":1}}],["substituteunconfiguredengine",{"2":{"170":1,"1279":1},"3":{"170":1,"1279":1,"1286":1}}],["substrings",{"3":{"1311":1,"1395":1,"1436":2}}],["substring",{"3":{"0":1,"585":1,"633":2,"1270":1,"1286":1,"1339":1,"1359":2,"1395":1,"1415":1,"1436":5,"1455":1,"1686":1,"1727":2,"1731":1}}],["substrates",{"3":{"1438":1}}],["substrate",{"1":{"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"730":1,"731":1,"732":1,"733":1,"734":1,"735":1,"736":1,"737":1},"3":{"0":5,"124":1,"162":1,"239":1,"240":1,"241":2,"242":1,"243":3,"244":1,"247":3,"248":1,"253":3,"254":1,"259":3,"260":1,"282":1,"287":1,"730":1,"731":3,"733":5,"734":1,"735":2,"736":1,"737":2,"853":1,"1044":1,"1212":2,"1300":3,"1301":10,"1339":1,"1415":1,"1428":1,"1577":1,"1641":1,"1651":1,"1668":1,"1708":1,"1916":2,"1921":1,"2114":1,"2232":2}}],["subscribing",{"3":{"408":1,"784":2,"1323":1,"1324":2,"1339":1,"1350":4,"1359":1,"1396":4,"1417":2,"2179":1}}],["subscribers",{"3":{"1270":1,"1309":1,"1324":3,"1396":1,"1415":1,"1417":2,"1750":1}}],["subscriber",{"3":{"198":1,"382":1,"781":1,"783":1,"784":1,"1026":1,"1324":11,"1349":1,"1350":15,"1359":3,"1396":11,"1399":1,"1402":10,"1415":5,"1417":2,"1436":1,"1949":3}}],["subscribes",{"3":{"72":1,"273":1,"384":1,"391":1,"397":1,"404":1,"782":1,"790":1,"899":1,"1259":1,"1324":11,"1339":3,"1349":1,"1350":19,"1396":7,"1402":2,"1415":3,"1417":12,"1427":1,"1438":1,"1442":1,"1526":1,"1922":1,"2006":1,"2166":1}}],["subscribed",{"0":{"408":1},"3":{"0":1,"72":1,"255":1,"395":5,"400":1,"404":1,"407":1,"1259":1,"1302":1,"1309":4,"1324":3,"1339":2,"1402":1,"1417":1,"2006":1,"2156":2}}],["subscribe",{"3":{"0":1,"66":1,"273":1,"384":1,"404":1,"406":1,"819":1,"897":1,"1309":1,"1324":3,"1341":1,"1350":2,"1396":3,"1402":1,"1417":5,"1435":1,"1945":1,"2156":2,"2215":1,"2235":1,"2236":1,"2237":1}}],["subscription",{"2":{"1468":1,"1472":1},"3":{"0":1,"258":2,"259":1,"261":1,"276":1,"378":1,"384":1,"395":2,"400":1,"407":2,"408":3,"640":2,"641":1,"766":1,"767":1,"783":1,"784":1,"822":1,"900":1,"971":1,"973":2,"1323":1,"1324":12,"1327":1,"1339":2,"1396":5,"1400":2,"1401":1,"1402":9,"1415":2,"1417":7,"1436":4,"1438":2,"1440":1,"1443":1,"1455":2,"1463":1,"1465":1,"1466":1,"1467":6,"1468":1,"1470":2,"1472":2,"1474":1,"1476":1,"1484":2,"1950":1,"2043":1,"2073":1,"2156":2,"2159":1,"2180":1}}],["subscriptions",{"3":{"0":1,"380":1,"399":1,"1192":1,"1324":2,"1339":1,"1417":1,"1467":3,"1945":1}}],["subsystems",{"3":{"0":1,"1108":1,"1192":1,"1300":3,"1309":1,"1396":1}}],["subsystem",{"3":{"0":1,"165":1,"235":2,"237":1,"707":1,"1110":1,"1192":1,"1202":1,"1203":1,"1300":1,"1302":1,"1309":5,"1310":2,"1334":2,"1339":3,"1402":1,"1496":2,"1674":1,"1915":1}}],["surname",{"3":{"1311":1}}],["surround",{"3":{"2038":1}}],["surrounds",{"3":{"1904":1}}],["surrounding",{"3":{"139":1,"426":1,"490":1,"1300":2,"1311":1,"1323":1,"1324":2,"1350":1,"1359":4,"1380":1,"1395":1,"1396":6,"1415":2,"1416":1,"1417":1,"1436":2,"1438":1,"1728":1,"2059":1}}],["surrogate",{"3":{"1259":2,"1300":1,"1396":1,"1414":1,"1415":2}}],["surplus",{"3":{"1241":1,"1254":1,"1259":4,"1307":1,"1311":1}}],["surprisingly",{"3":{"1380":1}}],["surprising",{"3":{"692":1,"743":1,"1237":1,"1281":1,"1286":1,"1339":1,"1396":1,"1415":1,"1436":1,"1639":1,"2099":1}}],["surprises",{"3":{"1286":1,"1363":1,"1369":1,"1486":1,"1568":1,"1662":1}}],["surprise",{"3":{"399":1,"698":1,"741":1,"1093":1,"1229":1,"1286":3,"1311":2,"1339":2,"1350":2,"1395":1,"1406":1,"1415":2,"1455":1,"1679":1,"1686":1,"1881":1,"1885":1,"1955":1,"2046":1,"2065":1,"2159":1}}],["surprised",{"3":{"243":1,"1925":1,"1986":1}}],["surgically",{"3":{"1359":1}}],["surgical",{"3":{"1231":1,"1237":1}}],["surges",{"3":{"1457":1,"1526":1,"1679":1}}],["surgery",{"3":{"1011":1,"1012":1,"1436":1,"1496":1,"1571":1}}],["surge",{"3":{"0":1,"765":2,"766":3,"767":4,"769":1,"1212":1,"1457":5,"1461":2,"1467":4,"1469":1,"1476":1,"1525":1,"1526":4,"1530":1,"1531":2,"1532":1,"1534":1,"1591":3,"1597":1,"1678":2,"1679":1,"1680":1,"2232":1}}],["sure",{"3":{"215":1,"1300":1,"1324":1,"1436":1,"1877":1,"1930":1,"2105":1,"2150":1,"2153":1}}],["surfacing",{"3":{"39":1,"99":1,"501":1,"1259":1,"1263":1,"1271":1,"1286":1,"1300":1,"1311":2,"1312":1,"1323":1,"1324":3,"1339":1,"1350":2,"1383":1,"1395":3,"1396":2,"1402":4,"1417":1,"1427":2,"1436":1,"1984":1,"2072":1,"2220":1,"2232":1}}],["surfaced",{"3":{"39":2,"78":1,"265":1,"690":1,"729":1,"789":1,"846":1,"926":1,"1026":1,"1036":1,"1084":1,"1099":1,"1237":2,"1242":1,"1270":1,"1286":1,"1300":2,"1309":1,"1312":1,"1323":1,"1324":3,"1339":2,"1350":6,"1358":1,"1359":7,"1395":4,"1396":5,"1402":1,"1415":2,"1427":1,"1431":1,"1436":4,"1488":1,"1496":3,"1532":1,"1535":1,"1577":1,"1621":1,"1627":1,"1643":1,"1916":1,"1944":1,"1955":1,"2166":1,"2220":1}}],["surfaces",{"0":{"926":1},"3":{"0":5,"41":1,"43":1,"95":1,"109":1,"127":1,"189":1,"201":1,"215":1,"237":1,"245":1,"274":1,"300":2,"301":1,"303":1,"306":2,"340":1,"388":1,"390":1,"401":1,"441":1,"500":1,"514":1,"545":1,"550":1,"585":1,"612":1,"628":1,"648":1,"649":1,"650":1,"651":1,"688":1,"690":1,"732":1,"790":1,"802":1,"803":1,"861":1,"883":1,"913":1,"926":1,"966":1,"990":1,"996":1,"1004":1,"1043":1,"1051":1,"1212":2,"1247":2,"1259":2,"1263":1,"1270":6,"1271":1,"1276":1,"1278":1,"1286":9,"1287":1,"1297":1,"1300":8,"1301":2,"1307":1,"1309":1,"1310":1,"1311":7,"1323":1,"1324":18,"1339":6,"1347":1,"1350":2,"1352":1,"1355":1,"1356":1,"1359":23,"1379":1,"1380":1,"1388":1,"1394":1,"1395":15,"1396":33,"1397":1,"1401":1,"1402":16,"1415":4,"1416":4,"1417":6,"1433":2,"1434":1,"1436":18,"1438":7,"1444":1,"1447":1,"1454":1,"1456":1,"1467":2,"1487":1,"1488":1,"1489":1,"1496":1,"1526":6,"1531":2,"1532":2,"1534":1,"1535":1,"1576":1,"1577":1,"1582":1,"1591":2,"1596":1,"1627":2,"1636":1,"1651":1,"1698":1,"1714":2,"1760":1,"1869":1,"1923":1,"2074":1,"2075":1,"2077":1,"2083":2,"2113":1,"2127":1,"2137":1,"2138":1,"2153":1,"2232":3}}],["surface",{"0":{"1419":1,"1666":1,"1702":1,"2000":1,"2035":1,"2137":1},"1":{"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1,"977":1,"978":1,"979":1,"980":1,"981":1,"982":1,"983":1,"984":1,"1998":1,"1999":1,"2000":1,"2001":1,"2002":1},"3":{"0":16,"6":1,"24":1,"37":1,"42":1,"53":1,"54":2,"55":1,"58":2,"100":1,"103":1,"107":1,"109":1,"111":1,"121":1,"124":1,"130":1,"135":10,"138":1,"139":1,"141":1,"143":1,"145":2,"150":1,"162":1,"165":1,"166":1,"173":2,"177":2,"186":1,"189":1,"209":2,"210":1,"237":2,"256":1,"265":2,"275":1,"280":2,"287":1,"297":1,"299":1,"301":1,"305":1,"306":1,"314":1,"321":1,"329":1,"330":1,"331":1,"332":4,"334":1,"341":1,"349":1,"351":1,"355":1,"363":1,"384":1,"391":1,"398":1,"403":1,"415":2,"421":1,"435":1,"447":1,"450":1,"471":1,"474":1,"506":2,"507":1,"508":3,"513":1,"527":1,"543":1,"545":1,"547":1,"548":1,"549":2,"550":2,"551":2,"572":3,"583":2,"591":1,"609":1,"611":1,"617":1,"618":1,"649":1,"650":2,"674":2,"675":2,"676":1,"681":1,"682":2,"684":1,"690":2,"691":5,"692":1,"694":1,"700":3,"707":2,"715":2,"717":1,"723":1,"725":2,"727":1,"740":1,"741":1,"743":1,"745":1,"751":1,"773":1,"774":1,"775":2,"783":2,"784":1,"792":1,"795":1,"797":4,"799":1,"803":1,"804":1,"805":2,"806":1,"827":2,"832":1,"840":1,"848":1,"880":1,"881":1,"882":1,"885":1,"914":1,"920":3,"921":1,"942":1,"963":1,"964":3,"966":1,"968":1,"971":1,"976":1,"977":1,"979":2,"980":7,"981":1,"982":1,"983":1,"984":2,"988":1,"1008":1,"1020":1,"1025":1,"1043":1,"1044":1,"1048":1,"1049":2,"1051":1,"1052":3,"1053":1,"1054":1,"1055":2,"1059":3,"1073":1,"1074":1,"1076":1,"1091":1,"1118":1,"1132":1,"1133":2,"1134":1,"1187":1,"1192":1,"1202":1,"1203":1,"1212":4,"1213":1,"1217":1,"1220":1,"1227":1,"1229":6,"1237":3,"1238":1,"1247":7,"1248":1,"1249":1,"1256":1,"1259":4,"1263":1,"1270":9,"1271":1,"1275":1,"1276":2,"1277":1,"1278":1,"1280":1,"1285":1,"1286":33,"1290":1,"1291":1,"1297":2,"1299":2,"1300":34,"1301":3,"1309":15,"1310":1,"1311":43,"1312":8,"1316":1,"1318":3,"1320":1,"1323":16,"1324":60,"1332":2,"1336":1,"1338":1,"1339":8,"1348":2,"1350":18,"1354":1,"1356":2,"1357":1,"1358":1,"1359":49,"1366":1,"1367":1,"1368":1,"1369":8,"1370":2,"1371":2,"1373":2,"1375":1,"1380":11,"1381":2,"1392":1,"1395":41,"1396":65,"1401":2,"1402":22,"1403":2,"1406":2,"1409":3,"1414":2,"1415":41,"1416":9,"1417":17,"1421":1,"1429":1,"1431":3,"1436":73,"1437":1,"1438":11,"1443":1,"1445":1,"1449":1,"1450":1,"1453":1,"1454":1,"1455":2,"1465":1,"1467":2,"1476":2,"1487":2,"1488":2,"1492":1,"1496":4,"1524":1,"1526":2,"1531":1,"1534":1,"1570":1,"1577":7,"1585":4,"1591":2,"1597":1,"1599":2,"1626":1,"1627":1,"1630":1,"1631":2,"1640":1,"1642":1,"1644":2,"1662":2,"1665":1,"1673":2,"1686":1,"1715":1,"1716":1,"1720":1,"1748":1,"1761":1,"1771":1,"1781":1,"1792":1,"1815":1,"1848":1,"1852":1,"1868":1,"1876":1,"1929":5,"1930":2,"1932":1,"1936":1,"1938":1,"1940":1,"1941":1,"1958":1,"1971":2,"1985":1,"1986":1,"1987":3,"1988":2,"1989":1,"1990":3,"1997":1,"1998":1,"2000":1,"2001":1,"2002":3,"2007":2,"2012":1,"2017":1,"2035":1,"2037":1,"2038":2,"2041":1,"2044":1,"2051":2,"2055":1,"2078":1,"2079":1,"2080":1,"2085":2,"2100":1,"2106":1,"2114":3,"2122":2,"2125":1,"2129":1,"2132":1,"2137":1,"2159":1,"2168":1,"2169":1,"2172":1,"2173":1,"2191":1,"2193":2,"2200":1,"2201":1,"2203":2,"2208":2,"2210":1,"2232":6}}],["surveys",{"3":{"1074":1,"1629":1,"1639":1}}],["survey",{"3":{"1033":1,"1350":1,"1359":3,"1629":1,"1630":4,"1637":5,"1639":5,"1640":1}}],["surveyed",{"3":{"0":1,"1049":1,"1051":1}}],["survival",{"3":{"1359":1,"2168":1}}],["survivable",{"3":{"563":1,"698":1,"759":1,"1324":1,"1359":1,"1417":3,"2193":1}}],["survivor",{"3":{"1359":1,"1436":2}}],["survivors",{"3":{"1286":1,"1415":1}}],["surviving",{"1":{"1966":1,"1967":1,"1968":1,"1969":1,"1970":1,"1971":1,"1972":1},"3":{"0":1,"67":1,"122":1,"201":1,"497":1,"734":1,"856":1,"863":1,"1247":1,"1259":1,"1262":1,"1271":1,"1285":1,"1286":2,"1311":1,"1323":1,"1324":3,"1339":2,"1350":2,"1359":5,"1395":2,"1410":1,"1415":1,"1427":1,"1436":4,"1438":1,"1473":1,"1482":1,"1966":1,"2208":1}}],["survived",{"3":{"266":1,"839":1,"840":1,"908":1,"1359":2,"1415":1,"1989":1}}],["survive",{"0":{"1223":1,"2189":1},"3":{"0":2,"39":2,"49":1,"131":1,"166":1,"242":1,"265":1,"380":1,"390":1,"440":1,"490":1,"520":2,"610":1,"626":1,"708":1,"711":1,"846":1,"932":1,"933":1,"997":1,"1018":1,"1020":1,"1043":1,"1074":1,"1102":2,"1115":1,"1212":1,"1217":1,"1229":1,"1237":3,"1259":4,"1274":1,"1286":7,"1287":1,"1294":1,"1300":4,"1310":1,"1311":1,"1312":1,"1323":4,"1324":13,"1339":3,"1342":1,"1349":1,"1350":4,"1359":6,"1369":2,"1376":1,"1380":2,"1395":4,"1396":8,"1400":1,"1402":1,"1410":1,"1413":1,"1415":4,"1416":1,"1417":7,"1418":1,"1426":1,"1427":1,"1436":2,"1438":3,"1441":1,"1476":1,"1591":1,"1596":1,"1597":1,"1662":1,"1663":1,"1684":1,"1686":1,"1689":1,"1724":1,"1729":1,"1787":1,"1794":1,"1851":1,"1866":1,"1889":1,"1906":1,"1930":1,"1945":1,"1950":1,"1965":1,"2045":1,"2063":1,"2081":1,"2100":1,"2109":1,"2126":1,"2128":1,"2162":1,"2176":1,"2183":1,"2185":1,"2200":1,"2209":1}}],["survivesblockcommentsineveryposition",{"3":{"142":1,"1436":1}}],["survives",{"0":{"1307":1,"1866":1},"3":{"0":4,"24":1,"31":1,"91":1,"96":1,"101":1,"248":1,"458":1,"472":1,"497":1,"506":1,"524":1,"592":1,"633":1,"635":1,"638":1,"690":1,"699":1,"715":1,"716":1,"732":1,"783":1,"855":1,"862":1,"881":1,"897":1,"905":1,"988":2,"992":1,"996":2,"1018":1,"1019":1,"1054":1,"1093":1,"1115":1,"1116":1,"1212":3,"1237":1,"1239":1,"1247":4,"1250":1,"1251":1,"1259":4,"1270":5,"1274":1,"1286":10,"1287":1,"1288":1,"1300":7,"1301":2,"1304":1,"1309":3,"1311":5,"1312":1,"1318":1,"1323":8,"1324":16,"1333":1,"1336":1,"1337":1,"1339":2,"1350":1,"1357":1,"1359":14,"1369":1,"1379":1,"1380":2,"1395":9,"1396":9,"1402":1,"1415":8,"1416":3,"1417":5,"1427":1,"1436":11,"1441":1,"1453":1,"1454":1,"1486":1,"1492":2,"1566":1,"1651":1,"1664":1,"1699":1,"1715":1,"1727":1,"1790":1,"1792":1,"1815":1,"1840":1,"1852":1,"1858":1,"1863":1,"1923":1,"1933":1,"1943":1,"1965":1,"1972":1,"2010":1,"2024":1,"2047":1,"2076":1,"2089":1,"2113":1,"2121":1,"2157":1,"2160":1,"2165":1}}],["sovereignty",{"3":{"1567":1}}],["sonnet",{"3":{"1496":2}}],["sonaranalyzer",{"3":{"1213":1,"1395":2,"1417":1,"1453":1,"1903":1}}],["sonar",{"3":{"1133":1,"1237":2,"1266":1,"1270":1,"1300":2,"1309":1,"1312":1,"1369":1,"1380":1,"1395":1,"1436":1,"1577":1,"1673":1}}],["soak",{"3":{"1456":1}}],["sothecontractisnotvacuous",{"2":{"1436":1},"3":{"1436":1}}],["soi",{"3":{"1286":1,"2126":1}}],["sock",{"3":{"1430":1}}],["sockets",{"3":{"1300":1,"1339":2,"1436":1}}],["socketshttphandler",{"2":{"53":1,"100":1,"1329":1,"1450":1,"1663":1,"1677":1,"2006":1,"2011":1,"2014":1,"2019":1,"2030":1},"3":{"53":1,"100":1,"1312":4,"1324":2,"1329":1,"1339":11,"1380":1,"1416":3,"1441":1,"1443":2,"1450":1,"1663":1,"1677":1,"2006":1,"2011":1,"2014":1,"2019":1,"2030":1}}],["socket",{"3":{"0":2,"94":1,"95":1,"100":1,"109":1,"110":1,"235":1,"881":1,"1067":1,"1225":1,"1323":1,"1324":2,"1329":1,"1334":1,"1339":14,"1395":2,"1396":3,"1415":1,"1430":1,"1436":1,"1443":2,"1577":1,"1611":1,"1653":1,"1702":1}}],["socialsecuritynumber",{"2":{"364":1},"3":{"359":1,"364":1}}],["social",{"3":{"349":1,"657":1,"691":1,"1020":1,"1300":2,"1311":1,"1324":3,"1342":1,"1350":6,"1351":1,"1359":11,"1364":1,"1369":4,"1380":4,"1383":1,"1392":1,"1395":7,"1415":2,"1416":4,"1467":1,"1629":2,"1630":2,"1631":4,"1632":1,"1636":2,"1639":1,"1641":2,"1658":1,"1705":1,"1973":1,"1974":1,"1977":1,"1979":3,"2110":2}}],["southcentralus",{"3":{"1436":1}}],["southeast",{"3":{"975":1}}],["south",{"3":{"972":1,"1339":1,"1436":3,"1467":1,"2238":1}}],["sound",{"3":{"209":1,"659":1,"811":1,"1051":1,"1286":1,"1301":1,"1323":1,"1455":2,"1549":1,"1870":1,"1923":1,"1971":1,"1997":1}}],["sounds",{"3":{"136":1,"1150":1,"1286":1,"1339":1,"1799":1,"1951":1,"2129":1}}],["sourcing",{"1":{"1138":1,"1139":1,"1140":1,"1141":1,"1142":1,"1143":1,"1144":1,"1145":1,"1146":1,"1147":1},"3":{"0":1,"638":1,"1138":1,"1139":1,"1140":1,"1141":2,"1142":1,"1144":1,"1145":1,"1212":1,"1259":1,"1323":1,"1324":1,"1359":3,"1396":1,"1402":1,"1431":1,"1436":1,"1496":1,"1577":1,"1585":1,"2232":1}}],["source=",{"3":{"1339":1,"1441":1}}],["sourcecollectinghostapplicationbuilder",{"3":{"1199":2,"1207":1}}],["sourcecollectingconfigurationmanager",{"3":{"1199":2,"1207":1}}],["sourcetype",{"3":{"846":1,"1247":1,"1269":1,"1270":2,"1436":1}}],["sourcedatabase",{"2":{"1475":1},"3":{"1474":1,"1475":3}}],["sourcedir",{"3":{"1436":2}}],["sourced",{"1":{"1780":1,"1781":1,"1782":1,"1783":1,"1784":1,"1785":1,"1786":1,"1787":1},"3":{"0":1,"373":1,"602":1,"631":1,"643":1,"1083":1,"1085":1,"1116":1,"1142":1,"1145":1,"1286":6,"1300":2,"1312":1,"1344":1,"1350":4,"1359":8,"1362":1,"1369":4,"1376":1,"1378":1,"1380":2,"1396":3,"1415":1,"1436":1,"1489":1,"1600":1,"1630":2,"1779":1,"1780":2,"2030":1,"2205":1}}],["sourcename",{"2":{"634":1},"3":{"0":1,"634":1,"698":1,"1286":4,"1323":1,"1492":1}}],["sourcesbrandcolorfromtoken",{"3":{"1436":2}}],["sources",{"3":{"0":3,"26":1,"46":1,"47":1,"166":1,"169":1,"186":1,"265":1,"369":1,"370":1,"399":1,"407":1,"413":1,"640":1,"676":1,"715":1,"717":1,"827":1,"838":1,"905":1,"926":1,"988":2,"989":1,"1014":1,"1069":1,"1144":2,"1175":1,"1214":1,"1247":4,"1276":3,"1279":4,"1281":3,"1286":31,"1300":2,"1301":1,"1310":4,"1311":12,"1323":4,"1324":1,"1333":1,"1335":2,"1338":1,"1339":7,"1353":1,"1359":8,"1375":1,"1395":4,"1402":2,"1415":2,"1417":2,"1429":1,"1436":7,"1437":1,"1438":1,"1442":1,"1453":2,"1454":1,"1488":1,"1489":2,"1526":1,"1534":1,"1548":1,"1569":1,"1630":2,"1631":1,"1639":1,"1660":1,"1665":1,"1670":1,"1675":1,"1774":2,"1790":1,"1833":1,"1840":1,"1841":1,"1845":1,"1849":2,"1852":3,"1853":1,"1858":1,"1859":1,"1861":1,"1863":1,"1866":1,"1868":1,"1962":1,"1965":1,"2006":1,"2022":1,"2024":1,"2153":1,"2156":2,"2160":1,"2188":1,"2220":1,"2232":1}}],["source",{"0":{"1330":1,"1335":1,"1451":1,"1470":1,"1484":1,"1500":1,"1859":1,"1875":1,"2242":1},"1":{"1172":1,"1173":1,"1174":1,"1175":1,"1176":1,"1177":1,"1178":1,"1179":1,"1180":1},"2":{"138":1,"468":1,"469":1,"474":1,"477":1,"805":1,"809":1,"813":1,"1150":1,"1475":2},"3":{"0":53,"1":1,"3":1,"5":1,"10":1,"12":1,"15":5,"17":2,"24":13,"25":4,"26":10,"27":6,"31":2,"34":1,"38":1,"39":4,"42":2,"43":2,"47":4,"53":1,"57":1,"59":6,"60":1,"61":1,"62":1,"63":3,"68":3,"71":2,"72":6,"73":1,"74":4,"79":1,"80":6,"81":3,"82":3,"90":1,"93":3,"94":2,"95":8,"96":5,"98":5,"99":1,"100":2,"103":3,"109":16,"111":1,"112":1,"117":6,"121":3,"122":3,"123":4,"125":5,"126":5,"128":4,"130":1,"132":1,"135":5,"136":1,"138":2,"141":3,"142":4,"145":2,"146":1,"147":5,"150":5,"151":1,"152":1,"157":2,"160":3,"161":3,"162":1,"164":1,"166":17,"168":2,"169":1,"170":3,"171":4,"175":3,"178":3,"179":6,"180":7,"181":2,"184":1,"186":5,"189":4,"190":5,"193":1,"195":9,"196":2,"197":1,"198":3,"200":2,"201":3,"202":7,"203":2,"216":2,"217":2,"218":1,"219":5,"220":5,"225":1,"228":4,"230":9,"231":4,"235":15,"237":2,"238":1,"243":8,"245":9,"246":7,"250":1,"251":1,"252":2,"254":1,"255":5,"256":1,"257":2,"259":3,"260":4,"261":1,"265":11,"266":1,"273":2,"277":1,"280":1,"282":1,"283":2,"284":2,"285":3,"290":7,"295":12,"296":3,"303":4,"305":7,"306":4,"310":3,"314":4,"318":9,"324":1,"325":3,"328":2,"330":9,"331":2,"333":5,"336":4,"337":4,"341":17,"342":2,"343":3,"344":6,"345":2,"350":5,"352":4,"353":7,"359":1,"369":1,"370":4,"371":1,"372":1,"373":1,"379":1,"384":7,"387":2,"388":3,"390":6,"391":7,"392":4,"393":1,"395":4,"397":11,"399":1,"400":3,"401":7,"402":3,"403":1,"404":5,"406":1,"407":5,"408":4,"409":3,"412":1,"413":11,"415":3,"416":2,"418":11,"419":1,"420":3,"422":1,"423":7,"424":3,"425":2,"426":8,"427":2,"428":10,"429":5,"430":4,"433":2,"434":1,"435":1,"440":1,"442":1,"443":2,"444":3,"448":11,"450":1,"451":1,"452":2,"453":1,"454":1,"459":13,"461":1,"463":6,"464":4,"465":5,"466":2,"468":3,"469":4,"470":14,"474":1,"475":10,"476":13,"477":13,"478":1,"482":2,"483":3,"484":3,"486":11,"487":7,"488":5,"489":7,"490":7,"491":8,"492":9,"493":12,"494":8,"495":5,"497":13,"498":1,"499":6,"502":4,"507":20,"509":1,"511":6,"512":1,"513":5,"514":2,"522":2,"523":3,"524":2,"527":1,"528":1,"530":1,"535":1,"536":4,"537":1,"539":3,"544":2,"545":26,"547":1,"549":7,"550":3,"551":2,"552":4,"554":1,"556":25,"559":1,"564":7,"572":4,"576":3,"577":4,"583":33,"585":12,"586":5,"587":2,"592":1,"597":1,"599":6,"601":2,"603":3,"609":2,"616":2,"618":2,"621":1,"626":1,"629":2,"632":3,"633":3,"634":1,"636":1,"638":2,"640":14,"642":3,"644":3,"649":13,"651":1,"656":2,"657":17,"665":7,"668":4,"669":3,"672":4,"674":45,"675":3,"676":15,"677":2,"680":1,"682":1,"685":1,"690":1,"696":3,"697":2,"698":24,"699":3,"700":2,"701":4,"702":10,"703":9,"706":1,"707":9,"708":1,"709":2,"711":2,"715":6,"717":1,"720":3,"721":3,"724":5,"725":11,"727":3,"728":2,"731":1,"732":1,"733":8,"736":4,"740":5,"741":10,"742":1,"743":2,"744":2,"749":11,"751":2,"774":12,"777":1,"780":3,"782":19,"784":2,"789":4,"790":8,"792":3,"793":6,"794":4,"798":9,"799":8,"803":3,"804":5,"805":4,"806":1,"809":3,"813":4,"818":1,"819":16,"822":2,"825":1,"826":7,"827":18,"830":7,"831":3,"832":6,"833":14,"836":1,"837":5,"838":11,"839":2,"840":1,"841":2,"842":1,"846":9,"849":1,"850":1,"854":7,"857":4,"861":2,"863":1,"868":3,"869":6,"872":5,"873":3,"876":17,"877":4,"880":1,"881":14,"883":1,"884":1,"888":2,"889":1,"891":4,"892":1,"897":10,"900":2,"904":1,"905":13,"908":3,"909":1,"910":1,"912":1,"913":6,"914":2,"915":1,"916":1,"921":3,"922":9,"923":1,"924":3,"926":10,"929":1,"930":1,"931":7,"935":1,"939":1,"946":10,"949":1,"954":4,"959":1,"960":2,"963":4,"964":4,"966":1,"971":1,"972":6,"975":2,"979":5,"980":7,"982":2,"987":3,"988":17,"989":1,"990":4,"992":1,"995":4,"996":5,"998":1,"999":2,"1000":1,"1003":1,"1004":6,"1006":1,"1012":1,"1017":1,"1018":2,"1021":1,"1025":5,"1026":14,"1028":1,"1029":1,"1033":1,"1034":13,"1035":1,"1036":1,"1041":6,"1042":21,"1043":2,"1044":6,"1045":2,"1049":4,"1050":17,"1051":1,"1052":2,"1054":2,"1055":3,"1058":4,"1059":27,"1061":2,"1062":1,"1066":4,"1067":4,"1070":1,"1073":1,"1074":7,"1075":1,"1078":1,"1082":6,"1083":7,"1085":1,"1086":3,"1089":1,"1090":2,"1091":9,"1094":1,"1095":1,"1099":2,"1100":6,"1103":3,"1108":6,"1111":1,"1116":17,"1119":1,"1123":3,"1124":2,"1132":1,"1133":7,"1134":1,"1135":4,"1140":10,"1142":1,"1144":1,"1150":14,"1160":2,"1161":3,"1163":1,"1168":16,"1172":1,"1174":1,"1175":27,"1177":1,"1183":4,"1184":18,"1186":2,"1190":4,"1191":1,"1192":6,"1193":1,"1196":1,"1202":3,"1203":3,"1204":3,"1211":2,"1212":28,"1213":2,"1214":2,"1219":4,"1220":1,"1222":3,"1223":2,"1224":1,"1225":6,"1226":2,"1227":3,"1228":3,"1229":59,"1231":6,"1232":5,"1233":8,"1234":13,"1235":2,"1236":8,"1237":166,"1238":1,"1239":18,"1240":4,"1241":5,"1242":4,"1243":10,"1244":5,"1245":2,"1246":3,"1247":152,"1251":1,"1252":1,"1254":2,"1256":1,"1257":1,"1259":120,"1261":2,"1262":6,"1263":6,"1264":9,"1265":3,"1267":5,"1268":1,"1269":5,"1270":270,"1271":103,"1272":1,"1273":13,"1274":2,"1275":7,"1276":15,"1277":7,"1278":22,"1279":14,"1280":9,"1281":6,"1282":1,"1283":5,"1284":5,"1285":7,"1286":877,"1288":8,"1289":10,"1290":11,"1291":12,"1292":8,"1293":9,"1294":9,"1295":6,"1296":5,"1297":30,"1298":7,"1299":2,"1300":1020,"1301":82,"1302":6,"1303":8,"1304":11,"1305":7,"1306":9,"1307":16,"1308":8,"1309":208,"1310":78,"1311":456,"1312":85,"1313":1,"1314":3,"1315":4,"1316":8,"1317":11,"1318":10,"1319":1,"1320":28,"1321":3,"1322":14,"1323":388,"1324":595,"1325":9,"1326":11,"1327":4,"1328":4,"1329":1,"1330":3,"1331":5,"1332":19,"1333":7,"1334":10,"1335":7,"1336":8,"1337":6,"1338":10,"1339":367,"1341":3,"1342":12,"1344":7,"1345":5,"1346":1,"1347":17,"1348":5,"1349":10,"1350":359,"1353":2,"1354":1,"1359":930,"1361":1,"1362":2,"1363":3,"1364":1,"1366":1,"1368":1,"1369":84,"1371":6,"1372":2,"1373":5,"1374":1,"1375":1,"1376":1,"1377":7,"1378":8,"1379":4,"1380":199,"1381":1,"1384":3,"1387":1,"1389":1,"1390":2,"1395":373,"1396":591,"1402":129,"1403":1,"1404":4,"1405":1,"1406":5,"1407":2,"1409":1,"1410":1,"1412":1,"1413":1,"1414":1,"1415":377,"1416":32,"1417":148,"1419":2,"1420":6,"1421":1,"1422":5,"1423":5,"1424":6,"1425":6,"1426":1,"1427":58,"1428":1,"1429":3,"1430":1,"1431":4,"1433":1,"1435":1,"1436":742,"1437":1,"1438":16,"1440":3,"1441":9,"1442":7,"1443":6,"1444":6,"1445":9,"1447":2,"1449":5,"1451":1,"1453":5,"1454":4,"1455":12,"1459":2,"1461":1,"1462":1,"1464":16,"1466":1,"1467":17,"1469":2,"1470":2,"1473":1,"1474":3,"1475":3,"1476":1,"1477":1,"1478":2,"1482":1,"1484":2,"1485":2,"1486":5,"1487":2,"1488":27,"1489":8,"1490":3,"1491":1,"1492":12,"1494":1,"1495":1,"1496":108,"1497":1,"1500":5,"1504":2,"1509":1,"1510":2,"1512":1,"1521":1,"1522":1,"1526":22,"1531":6,"1534":3,"1535":3,"1545":1,"1547":1,"1548":1,"1553":2,"1554":1,"1556":1,"1569":1,"1570":1,"1572":1,"1573":1,"1576":1,"1577":43,"1578":1,"1581":1,"1582":18,"1583":6,"1585":2,"1586":7,"1587":1,"1591":7,"1594":1,"1596":1,"1606":1,"1614":1,"1619":3,"1630":1,"1631":3,"1632":16,"1636":1,"1637":2,"1638":1,"1639":4,"1640":1,"1641":2,"1646":1,"1648":4,"1649":1,"1650":4,"1651":4,"1652":5,"1653":7,"1654":1,"1655":1,"1656":6,"1659":1,"1661":2,"1664":12,"1665":1,"1671":2,"1673":6,"1675":5,"1684":1,"1685":5,"1686":5,"1687":1,"1695":2,"1697":1,"1708":1,"1710":1,"1712":1,"1718":1,"1719":3,"1722":3,"1727":4,"1728":6,"1729":3,"1731":2,"1734":1,"1736":1,"1740":1,"1755":2,"1764":27,"1765":31,"1770":4,"1773":3,"1777":2,"1778":1,"1783":1,"1787":2,"1790":3,"1792":1,"1793":1,"1802":1,"1805":2,"1807":1,"1810":1,"1812":1,"1815":3,"1817":1,"1827":1,"1831":5,"1834":2,"1838":1,"1840":4,"1841":1,"1845":3,"1846":1,"1849":9,"1851":8,"1852":8,"1853":3,"1857":1,"1859":1,"1860":2,"1861":2,"1862":2,"1865":5,"1866":3,"1867":2,"1868":2,"1875":1,"1877":3,"1886":1,"1889":1,"1891":1,"1892":1,"1895":1,"1899":1,"1902":1,"1905":1,"1910":1,"1912":1,"1921":1,"1924":1,"1927":2,"1930":1,"1933":1,"1941":1,"1942":1,"1948":1,"1950":1,"1951":1,"1955":1,"1958":1,"1959":4,"1962":1,"1965":1,"1972":1,"1979":1,"1983":1,"1985":1,"1987":1,"1988":3,"1991":1,"1994":6,"1995":1,"1997":1,"1999":1,"2000":8,"2001":2,"2002":4,"2005":1,"2008":2,"2013":2,"2014":1,"2024":2,"2028":1,"2030":1,"2033":1,"2036":1,"2038":1,"2041":2,"2043":2,"2044":4,"2046":1,"2049":1,"2053":6,"2060":1,"2064":2,"2065":2,"2066":5,"2069":1,"2070":1,"2072":3,"2074":1,"2075":2,"2076":1,"2079":2,"2080":5,"2082":1,"2083":3,"2085":1,"2086":3,"2090":1,"2097":1,"2098":1,"2106":1,"2108":1,"2111":1,"2115":2,"2117":1,"2123":2,"2126":1,"2127":1,"2128":1,"2133":1,"2136":1,"2139":1,"2142":1,"2146":1,"2147":1,"2153":1,"2156":4,"2157":5,"2159":1,"2160":2,"2169":1,"2172":1,"2179":1,"2180":1,"2188":1,"2189":1,"2191":1,"2192":4,"2193":1,"2199":1,"2202":3,"2203":1,"2211":1,"2212":1,"2215":1,"2216":1,"2221":1,"2226":2,"2230":3,"2232":6,"2234":1,"2236":1,"2239":1,"2245":2}}],["someday",{"3":{"1436":1}}],["somefixture",{"3":{"1436":3}}],["somehandler",{"3":{"1396":1}}],["somehow",{"3":{"1335":1}}],["somerandomtype",{"3":{"1380":1}}],["somerandomhandler",{"3":{"1323":2}}],["someincidentalclass",{"3":{"1311":1}}],["someintegrationevent",{"2":{"1252":1},"3":{"1252":1}}],["someid",{"3":{"1237":1}}],["sometimes",{"3":{"1345":1,"1359":1,"1436":1,"2099":1}}],["sometime",{"3":{"1077":1}}],["somethingbroke",{"3":{"1436":4}}],["something",{"3":{"1":1,"79":1,"81":1,"103":1,"108":1,"110":1,"135":1,"138":1,"139":1,"140":1,"147":1,"150":1,"175":1,"258":1,"290":1,"449":1,"539":1,"626":1,"627":1,"681":1,"683":1,"734":1,"740":1,"751":1,"758":1,"781":1,"793":1,"799":1,"812":1,"817":1,"860":2,"905":1,"931":1,"989":2,"1019":1,"1059":1,"1066":1,"1067":1,"1068":2,"1074":1,"1102":1,"1140":1,"1220":1,"1237":2,"1247":1,"1248":1,"1259":4,"1265":1,"1270":2,"1281":1,"1286":12,"1292":1,"1293":1,"1300":7,"1302":1,"1309":4,"1311":4,"1320":1,"1323":9,"1324":16,"1339":3,"1344":1,"1350":4,"1352":1,"1359":17,"1368":1,"1369":1,"1380":1,"1389":1,"1395":5,"1396":12,"1402":3,"1409":1,"1415":5,"1416":1,"1417":9,"1427":2,"1435":1,"1436":20,"1443":2,"1451":1,"1455":1,"1459":1,"1460":1,"1467":1,"1478":1,"1486":1,"1492":3,"1512":1,"1637":1,"1651":1,"1653":1,"1684":1,"1686":2,"1693":1,"1787":1,"1794":1,"1804":1,"1815":2,"1817":2,"1836":1,"1842":1,"1847":1,"1865":1,"1867":1,"1881":2,"1890":1,"1900":1,"1913":1,"1933":1,"1943":2,"1949":1,"1952":1,"1963":1,"1965":1,"1982":1,"2002":2,"2016":1,"2034":1,"2043":1,"2049":1,"2056":1,"2064":1,"2094":1,"2098":1,"2099":1,"2116":1,"2118":1,"2124":2,"2126":1,"2128":1,"2132":1,"2138":3,"2157":1,"2158":1,"2181":1,"2182":1,"2183":1,"2203":1,"2232":1}}],["somebody",{"3":{"896":1,"1082":1,"1083":1,"1134":1,"1229":1,"1286":1,"1306":1,"1323":2,"1324":1,"1359":1,"1396":2,"1415":2,"1422":1,"1427":1,"1436":2,"1465":1,"1475":1,"1951":1,"2039":1,"2043":1,"2046":1,"2047":1,"2048":1,"2064":1,"2153":1,"2158":1,"2170":2,"2174":1,"2180":2,"2194":1,"2195":1,"2196":1,"2202":1,"2203":1}}],["someone",{"3":{"160":1,"215":1,"255":1,"318":1,"342":1,"343":1,"372":1,"373":1,"387":1,"407":1,"435":1,"538":1,"574":1,"592":1,"610":1,"627":1,"634":1,"692":1,"715":1,"717":1,"759":1,"765":1,"767":2,"812":1,"820":1,"821":1,"828":1,"855":1,"890":1,"965":1,"974":1,"1052":1,"1085":1,"1102":1,"1160":1,"1237":2,"1247":2,"1263":1,"1270":1,"1286":4,"1300":4,"1309":3,"1311":2,"1323":5,"1324":7,"1332":1,"1339":2,"1350":1,"1359":7,"1369":1,"1395":4,"1396":11,"1402":1,"1415":8,"1417":2,"1436":14,"1467":1,"1472":1,"1654":1,"1718":1,"1788":1,"1794":2,"1797":1,"1800":2,"1804":1,"1809":1,"1813":1,"1815":1,"1817":1,"1818":1,"1828":1,"1872":1,"1878":1,"1900":2,"1901":1,"1914":1,"1947":2,"1960":2,"1966":1,"1976":1,"1993":1,"1995":1,"1997":1,"2029":1,"2033":1,"2045":2,"2048":1,"2067":1,"2073":1,"2089":1,"2099":1,"2118":1,"2129":1,"2144":1,"2147":1,"2148":1,"2154":1}}],["someerror",{"3":{"109":1,"1220":1,"1229":1}}],["some",{"3":{"6":1,"52":1,"134":1,"188":1,"318":1,"358":1,"412":1,"517":1,"537":1,"574":1,"585":1,"676":1,"725":1,"757":1,"759":2,"800":1,"848":1,"891":1,"974":1,"995":1,"1052":1,"1135":1,"1143":1,"1153":1,"1215":1,"1216":1,"1247":1,"1271":3,"1286":4,"1300":3,"1310":1,"1311":1,"1312":1,"1320":1,"1323":2,"1324":6,"1339":2,"1350":2,"1359":6,"1369":1,"1380":4,"1395":1,"1396":3,"1415":3,"1416":2,"1417":3,"1436":10,"1438":1,"1453":2,"1454":1,"1455":1,"1467":1,"1476":1,"1498":1,"1526":1,"1531":1,"1537":2,"1627":1,"1631":1,"1654":1,"1708":1,"1776":1,"1801":1,"1814":2,"1816":1,"1817":1,"1829":1,"1914":1,"1986":1,"2059":1,"2073":1,"2079":1,"2114":1,"2122":1,"2136":1,"2140":1,"2202":1}}],["somewhere",{"3":{"0":1,"138":1,"150":1,"157":1,"255":1,"544":1,"609":1,"718":1,"809":1,"921":1,"989":1,"995":1,"1027":1,"1109":1,"1235":1,"1237":1,"1271":1,"1286":2,"1311":1,"1324":3,"1350":1,"1359":2,"1395":1,"1396":5,"1416":2,"1417":1,"1423":1,"1432":1,"1436":6,"1467":1,"1488":1,"1531":1,"1575":1,"1818":1,"1909":1,"1922":1,"1954":1,"1967":2,"1972":1,"1987":1,"2044":1,"2116":1,"2158":1,"2165":1,"2175":1,"2182":1,"2185":1,"2197":1}}],["soonest",{"3":{"1348":2,"1350":1}}],["sooner",{"3":{"19":1,"640":1,"1436":1}}],["soon",{"3":{"0":1,"234":1,"827":1,"1116":1,"1278":1,"1323":3,"1324":2,"1339":1,"1359":1,"1396":1,"1433":1,"1436":2,"1553":1,"1631":1,"1902":1,"2157":1,"2185":1,"2189":1}}],["solo",{"3":{"1686":1}}],["sold",{"3":{"1340":1,"1342":1,"1346":1,"1350":4,"1359":2,"1380":1,"1395":5}}],["solvable",{"3":{"1638":1}}],["solving",{"3":{"1324":1,"1358":1,"1443":1,"1539":1}}],["solve",{"3":{"390":1,"811":1,"948":1,"990":1,"1043":1,"1218":1,"1229":4,"1247":1,"1286":1,"1310":1,"1350":1,"1395":1,"1396":1,"1415":2,"1417":1,"1488":1,"1859":1,"1942":1,"2181":1,"2211":1}}],["solves",{"3":{"272":1,"555":1,"971":2,"1237":1,"1247":1,"1259":1,"1270":2,"1298":1,"1300":1,"1324":2,"1359":3,"1395":1,"1396":1,"1417":1,"1436":1,"1443":1,"1447":1,"1818":1,"1859":1,"1910":1,"2076":1,"2124":1}}],["solved",{"3":{"26":1,"601":1,"708":1,"827":1,"990":1,"1115":1,"1311":1,"1312":1,"1323":1,"1339":1,"1380":1,"1395":1,"1396":4,"1415":1,"1417":1,"1436":1,"1900":4,"1996":1,"2086":1,"2162":1}}],["solid",{"0":{"1538":1},"3":{"1216":1,"1229":1,"1234":1,"1237":4,"1241":1,"1244":1,"1247":4,"1259":4,"1261":1,"1264":1,"1270":16,"1271":5,"1278":1,"1286":14,"1291":1,"1300":20,"1301":1,"1309":9,"1310":2,"1311":15,"1316":1,"1322":1,"1323":12,"1324":15,"1339":1,"1343":1,"1350":5,"1353":1,"1359":60,"1369":2,"1371":1,"1380":6,"1384":1,"1395":17,"1396":19,"1402":8,"1405":1,"1415":8,"1416":2,"1417":16,"1427":5,"1431":1,"1436":12,"1499":1,"1526":1,"1535":1,"1577":1,"1581":1,"1582":1,"1583":1,"1584":1,"1588":1,"1591":1,"1597":1,"1784":1,"1795":1,"1796":1,"1799":1,"1971":1,"2090":1}}],["solutions",{"3":{"556":1,"633":1,"1485":1,"1486":1,"1654":1,"1696":1,"1726":1,"1731":1,"2089":1,"2220":1,"2224":1}}],["solutionfilename",{"2":{"136":1},"3":{"136":1,"1431":1,"1436":5}}],["solution",{"0":{"1215":1,"1486":1,"1649":1,"1683":1,"1695":1,"2089":1,"2120":1},"1":{"1485":1,"1486":1,"1487":1,"1488":1,"1489":1,"1490":1,"1491":1,"1492":1,"1493":1,"1494":1},"3":{"0":4,"132":1,"135":1,"137":2,"140":1,"142":1,"370":2,"470":2,"509":1,"609":1,"631":1,"632":2,"633":7,"634":1,"635":2,"733":1,"863":1,"870":1,"883":1,"905":1,"906":2,"938":1,"939":2,"942":1,"979":1,"980":1,"1034":1,"1067":2,"1190":1,"1192":1,"1212":1,"1215":3,"1237":1,"1247":1,"1259":1,"1271":1,"1286":2,"1296":1,"1300":5,"1309":3,"1311":1,"1323":4,"1350":2,"1359":1,"1395":1,"1396":12,"1402":2,"1428":2,"1436":12,"1441":1,"1445":1,"1449":1,"1453":5,"1454":6,"1455":3,"1485":1,"1486":8,"1487":12,"1488":2,"1490":3,"1492":5,"1494":2,"1524":1,"1526":2,"1531":1,"1577":2,"1591":1,"1596":1,"1599":1,"1602":2,"1646":3,"1647":1,"1649":2,"1650":1,"1654":1,"1656":1,"1657":1,"1658":1,"1661":8,"1662":1,"1674":1,"1675":1,"1681":1,"1684":4,"1685":4,"1686":4,"1690":1,"1692":2,"1694":1,"1695":1,"1700":1,"1701":2,"1703":1,"1704":2,"1705":2,"1707":1,"1717":1,"1718":3,"1722":3,"1725":2,"1726":4,"1727":6,"1728":8,"1729":10,"1730":1,"1731":4,"1781":2,"1810":1,"1829":1,"1939":1,"2044":1,"2056":1,"2087":2,"2089":1,"2097":5,"2098":4,"2099":2,"2100":1,"2101":3,"2103":1,"2105":1,"2211":1,"2220":1,"2224":1,"2239":1}}],["solely",{"3":{"77":1,"149":1,"776":1,"1323":2,"1324":1,"1325":1,"1359":3,"1369":1,"1396":1,"1415":1,"1486":1,"1488":1,"1641":1,"1887":1}}],["sole",{"1":{"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1},"3":{"0":6,"20":1,"288":1,"291":3,"295":1,"296":2,"370":1,"563":1,"620":1,"756":2,"757":1,"762":1,"827":1,"833":1,"1212":1,"1229":1,"1237":1,"1247":1,"1270":2,"1286":2,"1311":2,"1324":2,"1350":1,"1359":5,"1396":7,"1415":1,"1416":1,"1417":1,"1436":5,"1447":1,"1455":1,"1467":2,"1469":1,"1473":1,"1476":1,"1477":1,"1488":2,"1496":3,"1534":1,"1652":1,"1664":1,"1750":1,"2232":2}}],["sortability",{"3":{"1395":1}}],["sortabletemplatecolumngrid",{"3":{"1436":2}}],["sortabletemplatecolumn",{"3":{"1436":1}}],["sortablegridcolumnsusepropertycolumn",{"3":{"1436":3}}],["sortable=",{"3":{"1395":1,"1436":5}}],["sortablecolumns",{"3":{"1436":2}}],["sortablecolumnconventiontests",{"3":{"1199":1,"1207":2,"1436":9,"1489":1}}],["sortablecolumnconventiontestsbase",{"3":{"1199":2,"1207":2,"1436":8}}],["sortablecolumnfitnesstests",{"3":{"1199":1,"1207":2,"1436":3,"1489":1}}],["sortable",{"3":{"332":1,"1247":1,"1286":1,"1311":1,"1324":2,"1350":1,"1359":3,"1383":1,"1395":10,"1396":1,"1415":4,"1436":14,"1489":1,"1629":1,"1640":2,"1671":1,"1748":1,"1765":1,"1988":1,"1990":1}}],["sortorder",{"3":{"1342":1,"1350":10,"1359":18,"1362":2,"1369":5,"1395":9}}],["sortby",{"3":{"1324":1}}],["sortproperty",{"3":{"1286":4}}],["sort=",{"3":{"1238":1,"1815":1}}],["sorttestentity",{"3":{"1199":2,"1207":1}}],["sortdescending",{"3":{"1324":1}}],["sortdefinition",{"3":{"881":1,"1324":1}}],["sortdirection=asc",{"3":{"1324":1,"1380":1,"1395":3}}],["sortdirection",{"3":{"330":1,"740":1,"741":1,"881":1,"1247":2,"1311":1,"1324":2,"1395":2,"1396":1,"1415":4,"1640":1,"1988":1}}],["sorts",{"3":{"583":1,"633":1,"741":1,"1242":1,"1247":3,"1286":2,"1310":1,"1311":1,"1313":1,"1323":2,"1342":1,"1350":4,"1359":7,"1362":1,"1369":1,"1395":4,"1396":1,"1402":1,"1415":2,"1436":5,"1599":1,"1699":2,"1727":2,"1815":1,"1878":1,"1879":1,"1886":1,"2089":1}}],["sortkey",{"3":{"549":1,"1278":1,"1286":3,"1577":1}}],["sortvalue",{"3":{"549":1,"1228":1,"1229":3,"1286":1}}],["sorted",{"3":{"359":1,"549":1,"1059":1,"1200":1,"1238":1,"1242":1,"1247":3,"1270":1,"1286":3,"1300":8,"1315":1,"1323":1,"1324":2,"1350":4,"1354":1,"1359":2,"1369":1,"1371":1,"1395":9,"1396":2,"1402":2,"1427":1,"1436":7,"1492":1,"1496":1,"1498":1,"1877":1,"1988":1}}],["sortcolumn=id",{"3":{"1324":1,"1380":1,"1395":3}}],["sortcolumn",{"2":{"42":1},"3":{"42":1,"330":1,"549":1,"740":1,"741":1,"881":1,"1228":1,"1229":2,"1247":4,"1286":1,"1311":1,"1324":3,"1369":1,"1395":2,"1396":1,"1415":4,"1640":2,"1765":1,"1988":1}}],["sorting",{"0":{"1242":1},"3":{"0":1,"319":1,"329":1,"333":1,"363":1,"545":1,"549":2,"591":1,"742":1,"1050":2,"1202":1,"1203":1,"1238":2,"1243":2,"1245":1,"1247":7,"1284":1,"1300":1,"1311":2,"1324":1,"1350":3,"1354":1,"1359":7,"1362":1,"1369":2,"1380":2,"1395":4,"1396":5,"1402":1,"1415":4,"1436":4,"1438":1,"1526":2,"1546":1,"1557":1,"1560":1,"1577":1,"1630":1,"1631":1,"1632":2,"1639":1,"1640":3,"1666":1,"1669":1,"1748":2,"1815":1,"1816":1,"1817":1,"1987":1,"1988":1,"1997":1}}],["sort",{"2":{"1353":1},"3":{"0":5,"122":1,"243":1,"328":1,"329":1,"330":1,"331":1,"361":1,"547":1,"549":8,"583":4,"585":2,"595":1,"633":1,"881":4,"882":1,"1050":2,"1053":1,"1192":1,"1212":1,"1228":2,"1229":9,"1242":4,"1243":6,"1244":3,"1245":1,"1247":23,"1259":1,"1263":1,"1270":1,"1278":2,"1286":24,"1309":1,"1315":1,"1323":5,"1324":22,"1342":1,"1344":1,"1350":31,"1353":1,"1354":1,"1357":2,"1359":120,"1362":2,"1369":15,"1380":15,"1383":1,"1392":4,"1395":46,"1396":8,"1402":14,"1406":3,"1415":11,"1436":5,"1438":6,"1496":1,"1498":1,"1526":2,"1600":1,"1607":1,"1630":5,"1631":3,"1632":8,"1639":5,"1640":9,"1669":1,"1675":1,"1686":1,"1689":2,"1699":1,"1715":1,"1720":1,"1727":2,"1741":1,"1750":1,"1751":1,"1769":1,"1773":1,"1815":2,"1881":2,"1886":2,"1923":1,"1928":1,"1988":2,"1991":3,"2070":3,"2072":2,"2076":1,"2079":1,"2080":1,"2089":2,"2144":1,"2145":1,"2232":1}}],["softer",{"3":{"1396":2}}],["softens",{"3":{"803":1}}],["softdeletingfixture",{"3":{"1199":2,"1207":1,"1436":5}}],["softdeletabletestentity",{"3":{"1199":3,"1207":1}}],["softdeletableentity",{"3":{"1199":3,"1207":1}}],["softdeletepredicate",{"3":{"1286":1}}],["softdeletefidelitytests",{"2":{"1535":1},"3":{"1199":1,"1207":2,"1535":1}}],["softdeletefilteronly",{"3":{"698":1}}],["softdeletefiltername",{"2":{"697":1},"3":{"697":1,"698":1,"1286":1}}],["softdeletefiltersql",{"2":{"889":2,"892":3,"1034":1,"1176":1},"3":{"0":2,"889":7,"891":1,"892":6,"1034":3,"1175":1,"1176":1,"1198":1,"1199":4,"1203":1,"1207":2,"1280":1,"1281":2,"1286":27,"1369":1,"1415":2,"1496":1}}],["softdeletequeryfiltertests",{"3":{"1199":1,"1207":5}}],["softdeleteenforcementtests",{"3":{"1199":2,"1207":4,"1286":4,"1436":16,"1489":2,"1577":1}}],["softdeleteenforcementtestsbase",{"3":{"39":2,"1199":3,"1207":2,"1436":14}}],["softdeleteenforcementfitnesstests",{"3":{"1199":1,"1207":3,"1436":22,"1489":1}}],["softdeletetestdbcontext",{"3":{"1199":6,"1207":2}}],["softdeleted",{"3":{"1286":1,"1396":1,"1402":1}}],["softdeletedmarkerfailed",{"2":{"459":1,"465":1},"3":{"459":1,"465":1,"1323":2,"1415":1}}],["softdeleteduserfilter",{"2":{"464":1,"1311":1,"2066":1},"3":{"459":2,"464":2,"466":1,"698":1,"749":2,"1311":3,"1436":1,"1666":1,"2066":1}}],["softdeleteduservalidatortests",{"3":{"1199":2,"1207":4,"1323":1,"1438":2}}],["softdeleteduservalidator",{"2":{"460":1,"463":1},"3":{"0":1,"459":4,"460":1,"463":3,"464":1,"465":1,"1199":4,"1203":1,"1207":2,"1300":1,"1322":3,"1323":8,"1404":1,"1415":3,"1496":2}}],["softdeletedusercachetests",{"3":{"1199":1,"1207":2,"1438":1}}],["softdeletedusercache",{"2":{"459":3,"461":2,"463":1,"2066":1},"3":{"0":1,"459":7,"461":4,"463":3,"464":1,"465":1,"1199":7,"1203":1,"1207":2,"1300":10,"1301":3,"1311":6,"1323":2,"1403":1,"1438":1,"2066":2}}],["softdeletedusermiddlewaretests",{"2":{"459":1,"466":1},"3":{"459":3,"463":1,"464":1,"466":2,"1199":1,"1207":2}}],["softdeletedusermiddleware",{"2":{"463":1,"464":1,"748":1,"752":1,"1923":1,"2066":1,"2069":1},"3":{"0":1,"459":7,"461":1,"463":4,"464":1,"465":1,"748":1,"749":4,"752":1,"1199":3,"1203":1,"1207":2,"1212":1,"1300":5,"1301":2,"1311":10,"1323":2,"1415":2,"1923":1,"2066":5,"2069":1}}],["softdeleteuniqueindexconventiontests",{"3":{"890":1,"891":1,"1199":1,"1207":8,"1286":1,"1438":1}}],["softdeleteuniqueindexconvention",{"2":{"889":1,"1212":1,"1281":1,"1362":1,"1412":1},"3":{"0":1,"888":1,"889":8,"890":1,"891":2,"892":1,"1198":1,"1199":2,"1203":1,"1207":2,"1212":1,"1280":1,"1281":3,"1286":32,"1362":2,"1369":9,"1396":7,"1412":1,"1415":4,"1496":2,"1577":1}}],["softdelete",{"3":{"0":2,"39":3,"549":2,"551":1,"699":1,"701":1,"1207":1,"1212":2,"1232":1,"1237":1,"1240":1,"1247":1,"1273":1,"1276":1,"1286":6,"1436":13,"1438":1,"1489":1,"1664":1,"1851":2}}],["softwarefactory",{"3":{"1395":1}}],["software",{"1":{"2212":1,"2213":1,"2214":1,"2215":1,"2216":1},"3":{"370":1,"1395":2,"1454":2,"1673":1,"1787":1,"1793":1,"1802":1,"1807":1,"1812":1,"1817":1,"1827":1,"1834":1,"1846":1,"1853":1,"1862":1,"1868":1,"1877":1,"1886":1,"1892":1,"1899":1,"1905":1,"1924":1,"1930":1,"1941":1,"1950":1,"1959":1,"1965":1,"1979":1,"1985":1,"1991":1,"1997":1,"2002":1,"2028":1,"2038":1,"2049":1,"2060":1,"2069":1,"2080":1,"2086":1,"2098":1,"2108":1,"2115":1,"2123":1,"2128":1,"2133":1,"2139":1,"2169":1,"2180":1,"2193":1,"2203":1,"2211":1,"2212":1,"2213":1,"2217":1,"2218":1,"2220":8}}],["soft",{"1":{"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"456":1,"457":1,"458":1,"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1,"886":1,"887":1,"888":1,"889":1,"890":1,"891":1,"892":1,"893":1,"2061":1,"2062":1,"2063":1,"2064":1,"2065":1,"2066":1,"2067":1,"2068":1,"2069":1},"3":{"0":14,"36":1,"38":3,"39":2,"40":1,"41":2,"313":1,"318":1,"326":1,"346":1,"358":1,"361":1,"362":2,"366":1,"456":1,"458":3,"459":3,"461":3,"462":2,"503":1,"538":1,"545":1,"549":1,"550":1,"551":1,"690":2,"698":4,"699":2,"700":1,"707":2,"710":1,"714":1,"715":1,"716":3,"721":2,"733":1,"734":1,"735":1,"748":1,"749":2,"781":1,"782":1,"886":1,"888":3,"889":7,"890":7,"891":4,"893":1,"905":1,"910":1,"926":1,"950":1,"1033":2,"1034":1,"1059":1,"1061":1,"1063":1,"1082":2,"1084":1,"1086":1,"1087":1,"1116":1,"1118":1,"1120":1,"1141":1,"1142":1,"1146":1,"1147":1,"1168":4,"1174":2,"1175":4,"1180":1,"1192":2,"1201":2,"1212":6,"1213":1,"1230":2,"1231":10,"1232":2,"1236":2,"1237":29,"1240":1,"1244":1,"1247":9,"1270":3,"1273":1,"1274":1,"1275":1,"1276":2,"1278":2,"1280":1,"1281":6,"1286":80,"1287":1,"1289":1,"1290":1,"1300":16,"1301":6,"1304":1,"1306":1,"1309":3,"1311":8,"1323":14,"1324":1,"1342":2,"1343":4,"1346":1,"1347":1,"1350":46,"1352":2,"1358":1,"1359":80,"1361":1,"1362":4,"1363":1,"1369":26,"1380":3,"1395":6,"1396":82,"1398":2,"1399":1,"1402":43,"1405":3,"1406":1,"1412":2,"1415":31,"1417":3,"1431":2,"1436":35,"1438":12,"1453":1,"1480":1,"1487":2,"1489":2,"1490":2,"1496":3,"1526":2,"1534":1,"1535":1,"1545":2,"1567":3,"1572":1,"1577":4,"1586":2,"1591":2,"1612":1,"1614":1,"1618":2,"1630":3,"1631":11,"1632":29,"1633":4,"1634":7,"1635":13,"1636":1,"1637":1,"1638":14,"1639":51,"1640":6,"1641":2,"1651":2,"1653":1,"1657":1,"1662":1,"1664":1,"1667":1,"1671":2,"1672":3,"1675":1,"1685":2,"1686":1,"1698":1,"1700":1,"1704":1,"1717":1,"1719":1,"1720":1,"1727":1,"1747":2,"1748":6,"1749":1,"1765":4,"1769":7,"1779":1,"1784":1,"1795":1,"1796":1,"1799":1,"1810":2,"1812":1,"1815":1,"1825":1,"1839":2,"1851":3,"1923":1,"1964":1,"2034":1,"2060":1,"2061":4,"2062":1,"2063":2,"2064":2,"2066":4,"2068":1,"2069":6,"2090":1,"2098":1,"2164":2,"2167":1,"2168":1,"2186":1,"2202":1,"2210":1,"2221":1,"2230":2,"2232":6}}],["so",{"0":{"96":1,"2021":1,"2165":1},"3":{"0":224,"1":2,"5":1,"15":3,"18":1,"19":2,"20":1,"21":2,"22":1,"23":2,"24":15,"26":4,"27":4,"30":1,"31":10,"32":2,"33":2,"34":1,"39":11,"41":5,"42":1,"43":1,"45":1,"46":2,"47":2,"53":4,"54":2,"59":4,"62":2,"63":1,"68":1,"71":2,"72":3,"73":2,"76":2,"78":3,"79":1,"80":3,"81":4,"88":1,"91":5,"92":1,"93":4,"94":2,"95":4,"97":2,"98":9,"99":2,"100":5,"101":1,"107":2,"109":23,"110":4,"111":3,"117":3,"118":2,"119":1,"120":2,"121":5,"122":7,"123":1,"124":1,"125":2,"126":4,"127":2,"128":2,"130":2,"132":2,"135":21,"136":2,"137":2,"139":4,"141":2,"142":2,"145":6,"147":7,"149":1,"150":5,"151":1,"152":1,"155":1,"157":6,"158":2,"159":4,"160":7,"161":2,"164":2,"165":1,"166":3,"167":1,"168":1,"170":2,"171":1,"173":1,"174":2,"175":3,"177":3,"178":4,"179":2,"180":4,"181":1,"184":2,"185":1,"186":9,"187":2,"189":2,"191":1,"193":2,"195":10,"196":2,"197":2,"198":1,"200":8,"201":8,"202":6,"203":3,"206":1,"207":1,"208":2,"213":2,"214":4,"215":2,"216":3,"217":2,"218":1,"219":3,"220":4,"223":2,"225":8,"227":3,"228":2,"230":5,"231":2,"233":3,"234":3,"235":13,"236":3,"237":6,"241":3,"242":1,"243":12,"244":3,"245":4,"246":1,"248":3,"249":2,"250":1,"253":1,"254":3,"255":9,"256":1,"257":1,"258":1,"259":4,"260":2,"261":2,"263":1,"264":1,"265":31,"266":2,"267":3,"268":1,"272":1,"273":5,"274":3,"275":2,"276":2,"279":2,"280":3,"281":3,"282":2,"283":3,"284":1,"285":3,"286":3,"290":2,"291":4,"292":2,"293":1,"295":5,"298":1,"300":2,"301":2,"302":2,"303":3,"304":1,"305":3,"306":2,"309":2,"310":4,"311":1,"312":2,"314":2,"317":1,"318":13,"319":2,"320":3,"322":1,"324":2,"325":4,"326":3,"330":5,"331":1,"332":1,"333":2,"335":5,"337":1,"339":1,"341":13,"342":4,"343":5,"344":2,"349":1,"350":15,"351":2,"352":4,"353":4,"358":5,"359":5,"360":3,"361":4,"365":4,"370":8,"371":2,"373":3,"374":1,"375":1,"380":1,"383":4,"384":2,"388":5,"390":6,"391":2,"392":1,"393":1,"395":4,"396":2,"397":13,"398":2,"399":2,"400":2,"401":5,"402":2,"403":1,"404":2,"405":2,"407":6,"408":1,"409":2,"413":7,"415":2,"418":2,"419":1,"420":3,"423":1,"424":2,"425":1,"426":2,"427":2,"428":1,"434":2,"435":3,"436":1,"440":1,"441":1,"442":1,"443":3,"444":4,"446":1,"448":5,"449":3,"450":3,"451":3,"452":1,"454":1,"457":1,"458":2,"459":13,"460":4,"461":3,"463":2,"464":3,"465":4,"466":1,"468":3,"469":1,"470":2,"471":1,"477":1,"478":2,"481":1,"482":1,"483":2,"484":3,"486":3,"487":2,"488":2,"489":2,"490":4,"491":4,"492":5,"493":7,"494":5,"495":3,"497":2,"498":2,"499":5,"501":5,"502":1,"505":1,"506":1,"507":7,"508":3,"509":1,"511":6,"512":1,"513":2,"514":2,"517":2,"518":6,"519":1,"520":1,"522":3,"523":3,"524":4,"526":3,"527":3,"528":5,"529":3,"530":5,"531":1,"532":1,"534":10,"536":8,"537":4,"538":6,"539":5,"540":4,"543":3,"544":1,"545":7,"546":2,"547":6,"549":13,"550":4,"551":8,"552":2,"555":1,"556":9,"557":4,"558":6,"559":1,"562":1,"564":7,"565":3,"566":3,"567":1,"572":8,"573":2,"574":2,"575":3,"576":2,"578":1,"583":8,"584":1,"585":10,"586":1,"589":1,"590":2,"591":3,"592":3,"593":5,"594":1,"597":1,"599":12,"600":1,"601":4,"602":1,"603":1,"605":1,"607":11,"609":14,"610":4,"611":5,"612":3,"613":1,"616":1,"617":1,"618":10,"619":2,"620":4,"624":7,"626":18,"627":2,"628":4,"629":3,"631":2,"632":2,"633":10,"634":2,"635":5,"636":2,"638":8,"640":12,"641":3,"642":6,"644":2,"648":1,"649":9,"650":3,"651":4,"655":1,"656":2,"657":12,"658":5,"659":3,"660":6,"664":1,"665":8,"666":1,"667":4,"668":2,"672":1,"674":11,"675":1,"676":4,"677":1,"680":1,"681":2,"682":5,"683":1,"684":8,"690":7,"691":8,"692":11,"693":1,"696":2,"698":16,"699":2,"700":4,"702":3,"703":1,"706":2,"707":6,"708":1,"709":4,"714":2,"715":5,"716":5,"717":5,"718":2,"719":2,"720":1,"723":1,"725":11,"726":1,"727":5,"728":1,"731":1,"732":1,"733":8,"734":1,"735":3,"736":1,"739":1,"740":2,"741":11,"742":1,"743":4,"747":1,"748":1,"749":8,"750":1,"751":3,"755":1,"756":1,"757":7,"758":5,"759":7,"760":2,"761":1,"762":1,"764":4,"766":6,"767":2,"768":4,"769":1,"773":1,"774":5,"775":4,"776":5,"778":1,"780":1,"781":1,"782":3,"783":1,"784":4,"785":1,"789":4,"790":9,"791":2,"792":6,"793":4,"797":1,"798":2,"799":5,"801":2,"804":1,"805":2,"809":1,"810":4,"812":2,"813":2,"814":2,"819":11,"820":1,"821":5,"825":2,"826":7,"827":19,"828":2,"829":8,"830":1,"831":4,"832":4,"833":4,"836":1,"837":4,"838":10,"839":1,"840":1,"844":1,"845":1,"846":7,"848":3,"849":1,"853":3,"854":6,"856":4,"857":4,"861":10,"862":3,"863":9,"867":1,"868":1,"869":3,"870":2,"871":1,"872":2,"873":3,"874":1,"875":4,"876":5,"877":1,"881":14,"882":3,"883":3,"884":2,"888":1,"889":5,"890":2,"891":3,"896":1,"897":10,"898":1,"899":3,"903":1,"904":2,"905":22,"906":2,"907":7,"908":2,"909":1,"912":1,"914":5,"916":4,"917":1,"920":2,"921":2,"922":8,"923":1,"924":2,"926":11,"927":1,"929":1,"930":2,"931":4,"932":4,"938":1,"939":2,"941":2,"945":1,"946":4,"948":5,"952":1,"953":1,"954":11,"955":3,"956":4,"958":2,"959":1,"960":2,"963":3,"964":8,"965":1,"966":2,"967":1,"971":1,"972":6,"973":3,"974":5,"975":1,"979":1,"980":3,"981":1,"982":3,"983":2,"986":1,"987":1,"988":12,"989":2,"990":4,"991":1,"995":2,"996":10,"997":1,"998":4,"999":2,"1003":1,"1004":4,"1005":3,"1006":3,"1012":4,"1013":1,"1014":2,"1016":2,"1017":3,"1018":26,"1019":8,"1020":7,"1021":2,"1024":1,"1026":4,"1028":5,"1029":1,"1030":1,"1033":2,"1034":5,"1036":3,"1041":3,"1042":8,"1043":2,"1044":4,"1045":2,"1049":1,"1050":11,"1051":1,"1052":4,"1054":2,"1055":3,"1058":1,"1059":13,"1060":1,"1061":4,"1062":3,"1065":1,"1066":5,"1067":14,"1068":3,"1069":3,"1074":3,"1075":4,"1076":1,"1077":2,"1079":1,"1081":1,"1082":2,"1083":5,"1085":5,"1089":2,"1090":3,"1091":17,"1092":4,"1093":6,"1100":6,"1107":1,"1108":5,"1109":2,"1115":3,"1116":15,"1117":4,"1118":7,"1119":1,"1123":2,"1124":14,"1125":3,"1126":2,"1127":2,"1128":1,"1132":4,"1133":12,"1134":3,"1135":5,"1136":1,"1144":1,"1145":1,"1150":2,"1154":3,"1155":1,"1156":1,"1160":2,"1161":4,"1162":1,"1163":1,"1168":6,"1169":1,"1170":3,"1174":1,"1175":6,"1176":1,"1177":3,"1178":2,"1183":1,"1184":7,"1185":1,"1186":2,"1187":2,"1190":1,"1191":4,"1193":1,"1196":2,"1210":1,"1212":34,"1213":2,"1214":2,"1215":2,"1216":2,"1218":1,"1219":1,"1220":4,"1221":2,"1222":2,"1223":3,"1224":2,"1225":3,"1226":1,"1227":3,"1228":4,"1229":54,"1230":1,"1231":6,"1232":5,"1233":6,"1234":8,"1235":2,"1236":4,"1237":102,"1239":10,"1240":4,"1241":15,"1242":6,"1243":7,"1244":6,"1246":3,"1247":186,"1248":1,"1249":4,"1250":1,"1251":3,"1252":9,"1253":7,"1254":2,"1255":4,"1256":8,"1257":6,"1258":7,"1259":183,"1260":1,"1261":2,"1262":3,"1263":20,"1264":6,"1265":11,"1266":1,"1267":11,"1269":13,"1270":230,"1271":55,"1273":11,"1274":11,"1275":13,"1276":12,"1277":3,"1278":9,"1279":4,"1280":3,"1281":12,"1282":3,"1283":7,"1284":10,"1285":3,"1286":606,"1287":2,"1288":8,"1289":12,"1290":9,"1291":2,"1292":7,"1293":11,"1294":9,"1295":1,"1296":2,"1297":7,"1298":6,"1299":2,"1300":451,"1301":114,"1302":2,"1303":2,"1304":7,"1305":3,"1306":3,"1307":9,"1308":4,"1309":176,"1310":40,"1311":440,"1312":61,"1313":1,"1314":3,"1315":7,"1316":13,"1317":10,"1318":11,"1320":12,"1321":2,"1322":10,"1323":392,"1324":746,"1325":2,"1326":7,"1327":4,"1328":7,"1329":1,"1330":3,"1331":1,"1332":10,"1333":12,"1334":3,"1335":4,"1336":6,"1337":10,"1338":10,"1339":339,"1341":2,"1342":9,"1343":3,"1344":4,"1345":2,"1346":2,"1347":8,"1348":7,"1349":7,"1350":297,"1352":13,"1353":10,"1354":4,"1355":16,"1356":4,"1357":9,"1358":9,"1359":1013,"1360":1,"1362":7,"1364":5,"1365":2,"1366":10,"1367":2,"1368":5,"1369":93,"1371":3,"1372":5,"1373":5,"1374":5,"1375":5,"1376":3,"1377":3,"1378":5,"1379":11,"1380":184,"1381":1,"1382":3,"1383":6,"1384":4,"1385":4,"1386":2,"1387":2,"1388":4,"1389":14,"1390":5,"1391":9,"1392":4,"1393":5,"1394":2,"1395":601,"1396":706,"1397":2,"1398":2,"1399":11,"1400":4,"1401":7,"1402":235,"1403":1,"1404":1,"1405":7,"1406":14,"1407":3,"1408":6,"1409":10,"1410":9,"1411":7,"1412":5,"1413":7,"1414":5,"1415":369,"1416":87,"1417":340,"1419":4,"1420":3,"1421":5,"1422":7,"1423":11,"1424":6,"1425":7,"1426":3,"1427":73,"1428":3,"1429":16,"1430":10,"1431":25,"1432":11,"1433":10,"1434":6,"1435":13,"1436":1113,"1437":1,"1438":100,"1440":2,"1441":35,"1442":13,"1443":24,"1444":9,"1445":13,"1446":2,"1447":23,"1449":8,"1450":1,"1452":2,"1453":17,"1454":11,"1455":71,"1456":19,"1457":4,"1458":5,"1459":11,"1460":9,"1461":2,"1462":1,"1463":2,"1465":12,"1467":115,"1469":1,"1470":1,"1471":1,"1472":4,"1473":4,"1474":9,"1475":25,"1476":17,"1477":6,"1478":1,"1480":2,"1481":6,"1483":1,"1484":2,"1486":9,"1487":1,"1488":35,"1489":30,"1490":22,"1491":5,"1492":28,"1496":50,"1497":1,"1498":3,"1500":4,"1504":1,"1507":2,"1508":3,"1509":1,"1510":1,"1512":1,"1513":2,"1517":2,"1524":3,"1525":1,"1526":36,"1527":2,"1531":9,"1532":1,"1533":1,"1534":11,"1536":2,"1537":1,"1541":1,"1542":1,"1544":1,"1545":1,"1553":3,"1557":1,"1567":1,"1569":2,"1570":1,"1571":1,"1575":2,"1576":2,"1577":25,"1578":3,"1582":6,"1583":1,"1584":2,"1585":6,"1589":3,"1591":22,"1592":1,"1596":10,"1597":1,"1598":1,"1599":6,"1600":2,"1610":1,"1611":4,"1612":1,"1613":2,"1626":1,"1627":8,"1630":4,"1631":22,"1635":2,"1638":4,"1639":4,"1640":2,"1641":24,"1643":2,"1644":1,"1645":1,"1646":2,"1647":1,"1648":3,"1649":2,"1650":1,"1651":8,"1652":4,"1653":10,"1654":5,"1655":1,"1656":3,"1657":1,"1660":2,"1661":6,"1662":7,"1663":4,"1664":6,"1665":6,"1666":4,"1667":6,"1668":6,"1669":9,"1670":9,"1671":7,"1672":4,"1673":5,"1675":3,"1676":1,"1677":10,"1678":1,"1679":3,"1681":1,"1682":2,"1683":1,"1684":6,"1685":14,"1686":14,"1687":1,"1688":1,"1689":4,"1692":1,"1693":4,"1697":1,"1698":3,"1699":3,"1700":1,"1701":7,"1702":6,"1705":1,"1706":3,"1707":3,"1708":3,"1711":1,"1714":1,"1715":1,"1718":1,"1719":4,"1720":2,"1721":3,"1722":2,"1723":1,"1724":1,"1725":1,"1727":19,"1728":4,"1729":4,"1730":4,"1731":2,"1732":2,"1735":1,"1736":1,"1744":1,"1747":1,"1748":10,"1749":10,"1750":3,"1751":1,"1757":1,"1758":1,"1759":2,"1760":1,"1761":6,"1764":6,"1765":17,"1766":1,"1767":5,"1769":2,"1770":1,"1772":1,"1773":2,"1779":1,"1780":1,"1781":3,"1782":1,"1783":1,"1784":1,"1785":1,"1788":2,"1789":4,"1790":3,"1792":1,"1794":1,"1796":1,"1799":2,"1800":1,"1805":7,"1806":2,"1810":12,"1811":1,"1814":2,"1815":15,"1816":1,"1817":2,"1819":1,"1821":10,"1822":2,"1823":3,"1824":2,"1825":10,"1826":2,"1827":1,"1828":2,"1829":2,"1830":1,"1831":4,"1832":2,"1833":1,"1834":2,"1838":3,"1839":2,"1840":9,"1841":3,"1842":4,"1843":2,"1844":3,"1845":3,"1848":2,"1849":5,"1851":7,"1852":1,"1853":1,"1855":1,"1856":5,"1857":1,"1858":4,"1859":3,"1860":2,"1861":2,"1862":1,"1863":1,"1865":4,"1867":1,"1868":2,"1869":1,"1871":6,"1873":2,"1874":4,"1875":3,"1876":4,"1877":5,"1879":1,"1880":1,"1881":3,"1882":2,"1883":1,"1886":4,"1889":6,"1891":3,"1892":1,"1893":2,"1895":2,"1896":3,"1897":1,"1898":4,"1899":2,"1900":1,"1902":8,"1903":2,"1904":1,"1905":3,"1906":1,"1908":6,"1909":10,"1910":4,"1911":4,"1912":3,"1913":2,"1915":3,"1916":10,"1917":3,"1918":3,"1919":4,"1920":9,"1921":1,"1922":12,"1923":14,"1924":3,"1926":1,"1927":5,"1928":1,"1929":5,"1930":1,"1932":1,"1933":5,"1934":2,"1935":3,"1936":3,"1937":3,"1938":2,"1940":2,"1941":3,"1942":1,"1944":8,"1945":7,"1946":4,"1947":3,"1948":10,"1949":2,"1950":4,"1951":1,"1952":1,"1953":3,"1954":2,"1955":1,"1956":1,"1959":3,"1960":1,"1962":8,"1963":4,"1964":1,"1965":2,"1966":1,"1967":1,"1968":3,"1969":1,"1970":4,"1971":2,"1972":2,"1973":2,"1974":1,"1975":4,"1976":4,"1977":5,"1978":6,"1979":1,"1980":1,"1981":2,"1982":5,"1983":1,"1984":3,"1985":3,"1986":2,"1987":1,"1988":7,"1989":3,"1990":1,"1992":1,"1993":2,"1994":6,"1995":12,"1996":3,"1997":3,"1998":3,"1999":1,"2000":15,"2001":8,"2002":2,"2004":1,"2006":2,"2007":4,"2008":3,"2009":2,"2010":12,"2011":2,"2012":6,"2013":4,"2014":2,"2016":1,"2019":3,"2021":2,"2022":1,"2023":1,"2024":7,"2025":5,"2027":2,"2028":4,"2030":2,"2031":1,"2032":3,"2033":2,"2034":5,"2035":1,"2036":1,"2038":1,"2041":2,"2042":4,"2043":4,"2044":2,"2045":1,"2046":1,"2047":6,"2048":2,"2049":1,"2052":3,"2055":5,"2056":5,"2057":4,"2058":2,"2059":1,"2060":1,"2061":2,"2063":8,"2064":1,"2065":1,"2066":4,"2067":4,"2069":2,"2070":2,"2071":1,"2072":1,"2073":1,"2074":2,"2075":5,"2076":4,"2077":3,"2078":3,"2079":3,"2080":5,"2081":3,"2082":1,"2083":8,"2085":6,"2086":2,"2087":2,"2089":3,"2090":2,"2091":1,"2093":1,"2094":3,"2095":1,"2096":4,"2097":7,"2098":1,"2099":1,"2100":1,"2101":1,"2104":3,"2105":3,"2106":2,"2107":2,"2108":4,"2111":3,"2112":1,"2113":3,"2114":1,"2116":2,"2117":5,"2118":6,"2119":1,"2120":1,"2121":4,"2123":5,"2126":8,"2127":1,"2131":9,"2132":3,"2133":3,"2134":3,"2135":1,"2136":4,"2137":1,"2138":6,"2139":5,"2140":1,"2141":1,"2142":3,"2143":2,"2144":2,"2145":3,"2146":4,"2147":1,"2149":3,"2150":7,"2152":2,"2153":3,"2154":1,"2155":2,"2156":14,"2157":4,"2158":9,"2159":3,"2160":2,"2161":1,"2163":7,"2164":4,"2165":8,"2166":7,"2167":10,"2168":8,"2169":2,"2170":1,"2172":3,"2173":1,"2174":3,"2175":2,"2176":3,"2177":1,"2179":5,"2180":3,"2181":4,"2183":2,"2184":1,"2185":2,"2186":3,"2187":1,"2188":2,"2189":2,"2190":3,"2192":5,"2193":4,"2194":1,"2195":2,"2196":1,"2197":3,"2198":2,"2199":5,"2200":1,"2201":1,"2202":2,"2203":4,"2204":1,"2207":1,"2211":1,"2216":1,"2227":1,"2230":4,"2232":13,"2242":1}}],["stderr",{"3":{"790":1,"792":2,"794":1,"1456":1,"1465":1,"1467":2,"1589":1,"1591":1,"1596":1,"1597":1,"2166":1}}],["stdout",{"3":{"0":1,"401":2,"914":1,"916":1,"1339":1,"1442":1,"1456":1,"1465":1,"1467":3,"1476":1}}],["stylistic",{"3":{"979":1,"1229":1,"1311":1,"1359":1,"1417":1,"1436":1,"1460":1}}],["styling",{"3":{"682":1,"905":1,"1324":1,"1436":1,"1557":1,"1561":1}}],["stylefunc",{"3":{"1436":1}}],["stylefunc=",{"3":{"1436":1,"1526":1}}],["style=",{"3":{"1436":3,"1526":2,"1534":2,"1591":1,"1600":1}}],["styled",{"3":{"1396":1,"1415":1,"1417":1}}],["stylecop",{"3":{"1213":1,"1453":1,"1577":1,"1673":1}}],["stylesheets",{"3":{"1431":1,"1436":3}}],["stylesheet",{"3":{"1324":1,"1395":1,"1417":1,"1436":8,"1489":1,"1496":1,"1526":2,"1534":1,"1591":3,"1596":3,"1597":1,"2075":2,"2150":1}}],["styles",{"0":{"1212":1,"2230":1},"3":{"0":1,"214":1,"216":2,"469":1,"889":1,"981":1,"1052":1,"1229":1,"1286":1,"1324":3,"1339":1,"1351":1,"1359":2,"1396":2,"1436":3,"1439":1,"1443":1,"1526":2,"1534":1,"1535":1,"1557":2,"2149":1,"2152":1,"2230":1}}],["style",{"0":{"1214":1,"1879":1},"2":{"1004":1,"1214":1},"3":{"0":5,"207":1,"212":1,"213":1,"214":3,"215":1,"216":2,"219":1,"546":1,"725":1,"748":1,"855":1,"980":1,"1004":1,"1034":1,"1059":1,"1134":1,"1137":1,"1160":1,"1162":1,"1164":1,"1169":1,"1171":1,"1210":1,"1212":1,"1214":2,"1229":2,"1247":1,"1265":1,"1270":2,"1273":1,"1286":4,"1297":1,"1300":8,"1309":2,"1310":1,"1323":2,"1324":6,"1336":1,"1339":7,"1343":1,"1350":2,"1359":10,"1369":1,"1395":4,"1396":3,"1402":1,"1417":2,"1436":19,"1437":2,"1438":20,"1443":1,"1497":1,"1524":2,"1525":2,"1526":2,"1530":1,"1532":1,"1534":1,"1552":1,"1554":1,"1574":1,"1577":6,"1581":1,"1582":2,"1583":1,"1591":1,"1600":2,"1685":1,"1807":1,"1826":1,"1856":1,"1988":1,"2060":1,"2086":1,"2147":2,"2149":3,"2150":2,"2152":2,"2153":1,"2186":1,"2197":1}}],["stickiness",{"3":{"2138":2}}],["stick",{"3":{"1436":1}}],["sticks",{"3":{"1380":1,"1433":1}}],["stickysidebare2etests",{"3":{"1199":1,"1207":2,"1436":1,"1438":2}}],["sticky",{"3":{"664":1,"666":1,"669":1,"1311":3,"1438":2,"1467":4}}],["stitches",{"3":{"398":1,"400":1,"1309":1,"1380":1,"1396":1,"1653":1}}],["stillcarriestheauthippolicy",{"3":{"2000":1}}],["stillcoversframeworkevents",{"3":{"1436":1}}],["stillfails",{"3":{"1436":1}}],["stillassertsthetwoscanscannotoverlap",{"3":{"1436":1}}],["stillreported",{"3":{"1436":5}}],["stillreportsunhealthyratherthanthrowing",{"3":{"1339":1}}],["still",{"0":{"2053":1},"1":{"1047":1,"1048":1,"1049":1,"1050":1,"1051":1,"1052":1,"1053":1,"1054":1,"1055":1},"3":{"0":27,"13":1,"22":1,"23":1,"24":5,"26":2,"27":3,"39":1,"41":2,"42":1,"46":1,"47":1,"59":1,"62":1,"70":1,"71":2,"73":2,"80":1,"81":1,"91":4,"92":3,"93":1,"95":1,"96":1,"98":1,"104":1,"109":3,"111":3,"117":1,"120":1,"121":2,"123":1,"125":3,"126":2,"127":1,"130":1,"135":2,"137":1,"139":6,"140":1,"141":1,"142":4,"145":1,"147":2,"152":2,"155":1,"157":1,"159":1,"160":1,"166":1,"170":1,"175":1,"177":1,"178":5,"179":3,"186":1,"188":1,"190":2,"195":2,"198":1,"199":1,"200":4,"201":5,"202":1,"203":1,"207":1,"214":1,"215":2,"216":2,"220":1,"225":2,"231":1,"235":5,"236":1,"237":4,"241":1,"243":2,"245":1,"246":1,"248":2,"250":1,"253":1,"254":2,"255":2,"256":3,"257":4,"258":2,"259":6,"260":1,"261":1,"265":4,"267":1,"273":1,"275":1,"280":1,"283":1,"286":1,"293":1,"294":1,"296":2,"300":1,"302":1,"303":3,"310":1,"318":2,"320":2,"330":1,"335":1,"337":1,"342":1,"343":2,"350":1,"352":2,"358":1,"359":3,"361":5,"364":1,"366":2,"383":1,"384":1,"387":2,"390":3,"392":1,"397":2,"407":4,"408":2,"409":1,"413":2,"422":2,"423":1,"424":2,"425":1,"426":4,"428":2,"429":2,"442":1,"444":1,"447":1,"448":1,"449":1,"451":1,"454":1,"458":1,"459":3,"461":1,"462":1,"464":1,"465":1,"466":3,"478":1,"480":1,"487":2,"488":2,"489":3,"490":3,"491":7,"492":8,"493":6,"494":3,"495":2,"497":2,"499":1,"507":1,"511":1,"513":1,"518":1,"522":2,"523":3,"524":3,"528":1,"529":2,"536":3,"538":3,"539":4,"540":2,"544":1,"545":1,"546":1,"549":7,"550":4,"551":3,"552":2,"558":1,"564":2,"565":1,"572":3,"573":1,"577":2,"578":1,"583":3,"584":1,"585":2,"590":1,"592":1,"593":1,"599":1,"601":3,"602":1,"607":4,"609":2,"610":1,"618":1,"620":1,"624":3,"625":1,"626":3,"627":1,"628":1,"633":1,"634":1,"636":2,"640":1,"642":4,"651":3,"656":1,"657":3,"658":1,"661":1,"667":1,"668":1,"674":1,"681":1,"684":2,"688":2,"691":1,"692":1,"696":1,"698":3,"700":1,"702":2,"703":4,"707":1,"709":2,"715":2,"717":1,"718":1,"724":3,"732":1,"733":2,"735":1,"741":3,"743":2,"749":1,"751":1,"756":1,"757":1,"759":1,"761":1,"766":1,"767":1,"774":1,"776":1,"782":1,"789":1,"790":4,"792":1,"798":1,"800":2,"801":2,"803":3,"804":2,"805":2,"809":3,"812":1,"813":6,"814":1,"819":1,"825":1,"826":1,"827":3,"829":3,"830":1,"831":2,"832":2,"833":1,"837":1,"839":2,"840":3,"848":1,"849":3,"856":1,"861":1,"862":1,"867":1,"872":2,"876":1,"877":2,"881":1,"882":1,"888":2,"890":1,"891":1,"897":2,"898":3,"899":1,"905":2,"906":1,"907":6,"914":1,"920":2,"921":2,"924":1,"926":4,"931":1,"932":1,"939":1,"941":1,"942":1,"945":1,"946":2,"949":1,"956":2,"959":2,"965":1,"967":1,"971":1,"972":1,"974":1,"975":1,"981":1,"983":2,"988":3,"996":2,"998":1,"999":1,"1006":1,"1014":1,"1018":5,"1020":2,"1026":2,"1027":1,"1028":1,"1043":1,"1045":1,"1047":1,"1049":2,"1051":4,"1052":1,"1054":5,"1055":3,"1058":1,"1059":3,"1066":1,"1069":1,"1070":1,"1073":1,"1078":1,"1079":1,"1086":1,"1089":1,"1092":2,"1093":2,"1100":1,"1116":1,"1118":1,"1123":1,"1135":1,"1136":1,"1156":1,"1168":1,"1170":2,"1175":2,"1177":1,"1183":2,"1185":1,"1186":2,"1196":1,"1212":2,"1222":1,"1225":1,"1226":1,"1228":1,"1229":5,"1231":3,"1233":1,"1236":1,"1237":8,"1241":2,"1242":1,"1244":1,"1247":23,"1249":1,"1251":1,"1252":1,"1254":1,"1259":29,"1262":2,"1263":3,"1264":1,"1265":1,"1267":2,"1269":1,"1270":31,"1271":5,"1274":2,"1276":1,"1278":2,"1280":1,"1281":3,"1284":1,"1285":1,"1286":80,"1288":1,"1289":2,"1290":1,"1292":2,"1294":1,"1297":1,"1298":3,"1300":74,"1301":24,"1302":2,"1304":1,"1305":1,"1308":1,"1309":21,"1310":3,"1311":64,"1312":7,"1314":2,"1315":1,"1316":2,"1317":3,"1323":42,"1324":85,"1328":1,"1332":1,"1334":3,"1336":1,"1337":1,"1338":2,"1339":36,"1344":1,"1346":1,"1350":16,"1352":2,"1353":1,"1354":3,"1355":1,"1357":2,"1359":87,"1362":1,"1364":1,"1366":3,"1369":11,"1377":1,"1379":2,"1380":9,"1383":1,"1389":1,"1390":1,"1391":1,"1395":74,"1396":64,"1397":2,"1398":2,"1399":2,"1400":2,"1401":2,"1402":31,"1410":2,"1412":1,"1415":43,"1416":6,"1417":42,"1421":2,"1423":1,"1427":4,"1429":1,"1430":1,"1431":1,"1435":4,"1436":148,"1438":18,"1441":1,"1443":5,"1445":5,"1446":1,"1447":3,"1449":1,"1451":1,"1453":4,"1455":17,"1456":7,"1457":1,"1459":2,"1463":2,"1465":1,"1466":1,"1467":29,"1468":2,"1469":1,"1472":1,"1474":3,"1475":2,"1476":4,"1477":1,"1478":3,"1481":3,"1484":1,"1486":2,"1488":7,"1489":1,"1490":3,"1492":6,"1496":6,"1497":1,"1515":1,"1517":1,"1524":1,"1525":1,"1562":1,"1586":2,"1596":1,"1611":1,"1627":1,"1631":2,"1632":2,"1638":1,"1640":1,"1641":5,"1651":2,"1652":1,"1653":2,"1656":1,"1662":1,"1663":1,"1670":1,"1677":3,"1684":3,"1685":8,"1686":2,"1690":1,"1693":1,"1702":2,"1708":2,"1713":1,"1719":1,"1720":1,"1727":4,"1731":1,"1737":1,"1748":3,"1749":2,"1759":1,"1765":4,"1766":1,"1767":1,"1770":1,"1776":1,"1789":1,"1790":1,"1799":1,"1800":1,"1807":1,"1810":2,"1815":1,"1817":1,"1822":1,"1825":3,"1838":1,"1840":2,"1845":1,"1848":1,"1849":1,"1851":2,"1858":1,"1866":1,"1867":1,"1881":1,"1882":2,"1886":1,"1887":1,"1888":1,"1891":4,"1892":1,"1894":1,"1896":2,"1898":1,"1903":1,"1908":2,"1909":2,"1910":1,"1911":2,"1913":1,"1915":1,"1916":1,"1917":1,"1918":2,"1919":2,"1920":2,"1922":1,"1923":5,"1924":1,"1925":2,"1927":2,"1928":1,"1933":1,"1934":1,"1935":1,"1940":3,"1944":2,"1946":1,"1949":3,"1951":1,"1953":1,"1961":1,"1962":1,"1963":1,"1964":1,"1965":1,"1966":1,"1968":3,"1970":1,"1976":1,"1978":3,"1979":1,"1982":1,"1984":1,"1986":1,"1988":2,"1994":3,"1995":1,"1996":1,"1997":2,"1998":1,"2000":2,"2001":1,"2002":1,"2007":2,"2008":1,"2010":1,"2013":1,"2016":1,"2025":2,"2034":1,"2036":1,"2043":1,"2045":2,"2047":1,"2051":1,"2055":1,"2056":1,"2057":1,"2058":1,"2063":3,"2065":1,"2066":1,"2068":1,"2078":1,"2079":3,"2083":1,"2085":1,"2086":1,"2090":1,"2093":1,"2095":1,"2096":1,"2097":1,"2108":1,"2114":2,"2122":1,"2123":1,"2124":2,"2126":1,"2127":1,"2130":1,"2131":1,"2135":1,"2138":2,"2140":1,"2142":2,"2145":5,"2148":1,"2150":2,"2152":1,"2153":2,"2156":2,"2158":1,"2161":1,"2163":1,"2164":1,"2166":3,"2167":3,"2168":1,"2169":2,"2173":1,"2176":1,"2179":2,"2180":1,"2181":1,"2191":1,"2203":2,"2232":4}}],["steals",{"3":{"2146":1}}],["stealing",{"3":{"2047":1,"2073":1,"2150":1,"2158":1,"2164":1,"2191":1,"2197":1}}],["stealable",{"3":{"1985":1}}],["steal",{"3":{"1300":1,"1324":1,"1454":1,"1981":1}}],["steady",{"3":{"390":1,"397":1,"399":1,"996":1,"1259":2,"1301":3,"1323":3,"1459":1,"1677":2,"2154":1,"2157":1,"2159":1}}],["steers",{"3":{"1323":1,"1417":3,"1436":1}}],["steering",{"3":{"1300":1,"1415":1,"1737":1}}],["steer",{"3":{"1270":1,"1324":2}}],["steered",{"3":{"659":1}}],["stem",{"3":{"741":1,"1286":2,"1393":1,"1395":1}}],["stepnames",{"3":{"1311":2,"1436":2}}],["stepupquery",{"3":{"1199":2,"1207":1}}],["stepupcommand",{"3":{"1199":2,"1207":1}}],["steppable",{"3":{"6":1,"1359":1}}],["stepped",{"3":{"0":1,"859":1,"1270":1}}],["steps",{"3":{"0":5,"110":1,"168":1,"243":1,"256":1,"296":1,"360":1,"368":1,"459":2,"464":1,"528":2,"536":1,"562":1,"566":1,"593":1,"599":1,"602":1,"604":1,"609":2,"611":1,"633":1,"698":1,"747":1,"749":3,"790":1,"809":1,"810":2,"873":1,"881":1,"914":2,"923":1,"927":1,"1018":1,"1094":1,"1212":1,"1229":1,"1247":2,"1248":1,"1254":1,"1259":1,"1265":1,"1270":1,"1286":1,"1289":1,"1300":5,"1301":2,"1310":1,"1311":18,"1312":1,"1315":1,"1316":1,"1323":2,"1324":2,"1336":1,"1359":18,"1369":1,"1380":1,"1395":3,"1396":1,"1402":1,"1415":1,"1417":3,"1436":7,"1453":1,"1454":4,"1455":7,"1456":1,"1461":1,"1463":1,"1467":2,"1478":1,"1481":1,"1488":1,"1490":2,"1526":1,"1577":2,"1585":1,"1602":1,"1641":1,"1653":1,"1659":1,"1666":2,"1674":1,"1675":1,"1692":1,"1717":1,"1719":1,"1725":1,"1727":1,"1729":1,"1747":3,"1749":1,"1765":10,"1808":1,"1815":1,"1825":3,"1835":1,"1846":1,"1898":1,"1923":1,"2026":1,"2035":1,"2046":2,"2087":2,"2100":1,"2101":3,"2105":1,"2163":1,"2168":1,"2169":1,"2193":2,"2202":1,"2226":1}}],["step",{"0":{"1293":1,"2005":1,"2006":1,"2007":1,"2008":1,"2009":1,"2010":1,"2011":1,"2012":1,"2016":1,"2017":1,"2018":1,"2019":1,"2020":1,"2021":1,"2022":1,"2023":1,"2024":1,"2089":1,"2090":1,"2091":1,"2092":1,"2093":1,"2094":1,"2095":1,"2096":1,"2102":1,"2103":1,"2104":1,"2105":1,"2106":1,"2197":1},"2":{"451":1,"483":1},"3":{"0":16,"24":1,"57":1,"59":2,"62":1,"63":1,"109":2,"115":1,"117":1,"126":3,"128":2,"132":1,"135":2,"137":2,"140":3,"142":2,"147":1,"149":1,"217":1,"220":1,"243":1,"256":2,"258":2,"265":1,"291":2,"292":1,"295":1,"343":1,"365":1,"370":4,"371":1,"373":3,"375":1,"435":1,"451":2,"452":1,"453":1,"457":2,"459":4,"462":2,"464":6,"466":1,"483":1,"529":3,"530":1,"534":1,"535":4,"536":5,"563":1,"564":7,"566":4,"567":1,"584":1,"587":1,"600":1,"608":1,"624":1,"626":8,"627":1,"628":1,"629":2,"632":1,"633":1,"635":1,"640":1,"656":1,"659":1,"665":1,"666":1,"674":3,"675":1,"684":1,"696":1,"698":5,"700":1,"703":1,"725":1,"733":1,"735":1,"741":1,"747":1,"749":13,"751":6,"756":2,"757":9,"758":1,"766":5,"767":2,"769":1,"774":5,"776":1,"777":2,"791":1,"809":7,"810":2,"812":2,"813":1,"829":1,"839":1,"847":1,"861":2,"864":1,"867":1,"870":2,"873":1,"876":2,"877":1,"882":1,"907":2,"917":1,"920":1,"927":1,"941":1,"991":1,"1018":3,"1020":2,"1043":1,"1058":1,"1059":2,"1060":2,"1067":1,"1069":2,"1116":1,"1117":1,"1124":1,"1156":1,"1170":1,"1184":1,"1187":1,"1212":2,"1220":1,"1229":9,"1233":2,"1237":1,"1241":1,"1244":1,"1247":3,"1252":2,"1253":1,"1258":1,"1259":6,"1262":1,"1263":2,"1264":1,"1265":3,"1270":15,"1271":1,"1284":1,"1286":28,"1293":2,"1300":28,"1301":6,"1309":3,"1311":46,"1312":1,"1315":2,"1318":1,"1320":1,"1322":2,"1323":15,"1324":10,"1325":1,"1338":1,"1339":2,"1346":1,"1350":3,"1359":66,"1364":1,"1366":1,"1367":1,"1369":1,"1375":1,"1380":2,"1395":15,"1396":12,"1399":1,"1400":1,"1402":1,"1415":18,"1416":1,"1417":6,"1427":1,"1433":1,"1436":25,"1438":2,"1445":6,"1447":1,"1449":1,"1452":2,"1453":21,"1454":15,"1455":43,"1456":15,"1457":2,"1458":6,"1459":6,"1460":3,"1461":2,"1465":7,"1466":2,"1467":8,"1469":2,"1471":2,"1472":1,"1473":2,"1475":13,"1476":2,"1477":1,"1478":1,"1481":1,"1482":1,"1486":4,"1488":5,"1489":1,"1490":6,"1492":13,"1496":1,"1526":2,"1531":1,"1545":1,"1570":1,"1572":1,"1577":8,"1582":1,"1591":5,"1600":1,"1611":1,"1631":1,"1641":3,"1646":1,"1651":1,"1656":1,"1658":1,"1661":3,"1663":2,"1667":1,"1670":1,"1673":2,"1681":1,"1682":2,"1683":1,"1684":3,"1685":2,"1686":3,"1696":1,"1697":1,"1705":1,"1719":1,"1722":2,"1726":1,"1728":1,"1729":3,"1774":2,"1784":1,"1805":2,"1815":1,"1821":2,"1824":1,"1825":6,"1826":1,"1835":2,"1839":1,"1845":1,"1846":1,"1881":2,"1898":2,"1909":1,"1910":1,"1923":1,"1940":1,"1982":1,"2003":2,"2006":4,"2013":1,"2015":5,"2022":1,"2023":1,"2024":3,"2034":1,"2041":1,"2045":1,"2046":1,"2066":2,"2075":1,"2087":2,"2093":1,"2095":3,"2096":1,"2097":2,"2099":1,"2100":1,"2101":1,"2105":2,"2106":1,"2136":1,"2142":1,"2147":1,"2161":1,"2162":3,"2163":3,"2164":2,"2165":1,"2167":2,"2168":1,"2169":5,"2187":1,"2189":1,"2194":2,"2195":1,"2196":1,"2197":2,"2198":2,"2203":4,"2206":1,"2232":3,"2234":1}}],["stumbles",{"3":{"1912":1}}],["student",{"3":{"1395":1}}],["study",{"3":{"1324":2,"1332":1,"1395":1,"1396":1,"1416":1,"1779":1,"2109":1,"2234":1}}],["studying",{"3":{"1286":1,"1300":1,"1309":1,"1324":2,"1350":1,"1359":2,"1380":1,"1390":1,"1396":1,"1399":1}}],["studio",{"3":{"214":1,"219":1,"665":1,"1074":1,"1324":1,"1335":1,"1339":2,"2150":1}}],["studied",{"3":{"0":1,"1033":1,"1324":1}}],["stuffing",{"3":{"174":1,"280":1,"286":1,"403":1,"612":1,"1292":1,"1300":1,"1326":1,"1339":1,"1444":1,"1998":2,"1999":1,"2001":1}}],["stubviewport",{"3":{"1436":4}}],["stubregistrations",{"3":{"1323":1}}],["stubrefresher",{"3":{"1199":3,"1207":2}}],["stubpushnotificationuiservice",{"2":{"1434":1},"3":{"1199":2,"1207":2,"1434":2,"1436":4}}],["stubparent",{"3":{"1199":2,"1207":1}}],["stubnotificationinboxuiservice",{"2":{"1434":1},"3":{"1199":2,"1207":2,"1434":2,"1436":5}}],["stubentity",{"3":{"1199":2,"1207":1}}],["stuberrorlocalizer",{"3":{"1199":2,"1207":1}}],["stubuimodule",{"3":{"1199":2,"1207":1,"1324":1}}],["stubmap",{"3":{"1199":2,"1207":1,"1436":3}}],["stubmetricsbuilder",{"3":{"1199":2,"1207":1}}],["stubfeaturemanager",{"3":{"1199":2,"1207":1}}],["stubguardrail",{"3":{"1199":4,"1207":2,"1427":1,"1435":2,"1487":1}}],["stubtwofactorservice",{"3":{"1199":2,"1207":1}}],["stubtenantcontext",{"3":{"1199":2,"1207":1}}],["stubtoolpolicy",{"3":{"1199":3,"1207":3,"1427":1}}],["stubtool",{"3":{"1199":2,"1207":1}}],["stubtokenstorageservicetests",{"3":{"1199":1,"1207":2,"1436":1}}],["stubtokenstorageservice",{"2":{"1432":1},"3":{"954":1,"1199":9,"1207":2,"1324":1,"1428":1,"1432":2,"1436":7,"1488":1}}],["stublocalizer",{"3":{"1199":8,"1207":5}}],["stubloggingbuilder",{"3":{"1199":2,"1207":1}}],["stubwebhostenvironment",{"3":{"1199":2,"1207":1}}],["stubcurrentuserservice",{"3":{"1199":3,"1207":1}}],["stubchild",{"3":{"1199":2,"1207":1}}],["stubchanneljoinauthorizer",{"3":{"1199":2,"1207":1}}],["stubchatclient",{"3":{"1199":17,"1207":6,"1427":1,"1487":1}}],["stubcspprovider",{"3":{"1199":2,"1207":1}}],["stubclock",{"3":{"1199":2,"1207":1}}],["stubhandler",{"3":{"1199":6,"1207":3}}],["stubhttpmessagehandler",{"3":{"1199":17,"1207":2}}],["stubhttpclientfactory",{"3":{"1199":16,"1207":3}}],["stubhostenvironment",{"3":{"1199":10,"1207":5}}],["stubbed",{"3":{"583":1,"957":1,"1396":1,"1415":1,"1432":1,"1436":2,"1438":2}}],["stubsharedlocalizer",{"3":{"1199":2,"1207":1}}],["stubscopeprovider",{"3":{"1199":3,"1207":2}}],["stubs",{"0":{"1349":1},"3":{"53":3,"59":1,"63":1,"135":1,"413":1,"582":1,"583":9,"584":1,"585":2,"586":2,"587":2,"649":1,"1192":1,"1207":16,"1212":1,"1286":1,"1300":1,"1309":1,"1323":3,"1324":3,"1341":2,"1380":4,"1396":3,"1434":9,"1436":38,"1496":2,"1656":1,"1671":1,"1790":2,"1884":1,"1885":1,"1886":1,"2028":1}}],["stub",{"0":{"1412":1},"3":{"0":1,"53":1,"63":1,"583":9,"585":4,"649":1,"650":1,"954":1,"1212":1,"1300":3,"1309":6,"1311":2,"1312":2,"1314":3,"1315":2,"1323":9,"1324":11,"1349":2,"1350":23,"1359":1,"1378":2,"1380":3,"1396":13,"1398":1,"1402":4,"1412":1,"1413":1,"1415":13,"1417":1,"1427":1,"1431":1,"1432":1,"1435":2,"1436":52,"1437":2,"1489":1,"1490":1,"1496":1,"1577":1,"1651":1,"1653":1,"1662":1,"1751":1,"1772":1,"1882":3,"1884":1,"1885":1,"1886":1,"2017":1,"2019":1,"2053":1,"2094":2,"2113":1,"2118":1,"2123":1,"2232":1}}],["stuckageminutes",{"2":{"793":1},"3":{"0":1,"539":1,"540":1,"793":1}}],["stuck",{"3":{"0":2,"24":2,"174":1,"234":1,"235":1,"237":1,"536":1,"537":1,"538":2,"540":1,"792":1,"809":1,"811":1,"997":1,"1259":2,"1324":4,"1339":1,"1395":2,"1396":1,"1436":1,"1476":1,"1854":1,"1998":1,"2072":1,"2156":1,"2167":3,"2168":2}}],["stryker",{"3":{"1577":1}}],["stroke",{"3":{"1359":2}}],["strongpasswordrules",{"2":{"1829":1,"1834":1},"3":{"1199":6,"1203":1,"1207":1,"1271":10,"1289":1,"1294":1,"1300":9,"1323":1,"1324":1,"1415":5,"1436":6,"1496":1,"1829":2,"1834":1}}],["strongest",{"3":{"947":1,"1229":1,"1286":1,"1323":1,"1324":1,"1359":2,"1380":2,"1454":1,"1523":1,"1574":1,"1588":1}}],["stronger",{"3":{"0":2,"48":1,"537":1,"694":1,"785":1,"801":1,"804":1,"819":1,"840":1,"995":1,"1043":1,"1237":1,"1286":1,"1300":1,"1323":1,"1359":2,"1396":1,"1417":1,"1436":2,"1474":1,"1848":1,"2164":1,"2169":1}}],["strong",{"3":{"54":1,"727":1,"1019":1,"1237":1,"1271":2,"1300":6,"1311":1,"1324":1,"1350":1,"1395":1,"1415":3,"1438":1,"1526":5,"1527":1,"1537":2,"1541":2,"1544":1,"1575":1,"1577":9,"1582":1,"1591":3,"1592":1,"1638":1,"1666":1,"1797":1,"1812":1,"1828":1,"1834":2,"1902":1,"2107":1,"2144":1}}],["stronglytypedidapitests",{"3":{"1199":1,"1207":7,"1300":2}}],["stronglytypedidconverter",{"3":{"1199":2,"1203":1,"1207":1,"1300":6}}],["stronglytypedidconventiontests",{"3":{"1050":1,"1199":1,"1207":2,"1436":10}}],["stronglytypedidregistry",{"2":{"1281":1},"3":{"1050":2,"1199":4,"1203":1,"1207":2,"1281":1,"1286":3,"1300":11,"1810":1}}],["stronglytypedidvaluecomparer<",{"3":{"1286":2}}],["stronglytypedidvaluecomparer",{"2":{"1281":1,"1810":1},"3":{"1050":1,"1199":3,"1203":1,"1207":1,"1281":1,"1286":1,"1810":1}}],["stronglytypedidvalueconverter",{"2":{"1281":1,"1810":1},"3":{"798":1,"806":1,"1050":2,"1199":3,"1203":1,"1207":4,"1281":3,"1286":14,"1496":1,"1810":1}}],["stronglytypedidvalueparserdelegate",{"3":{"1199":2,"1203":1,"1207":1,"1300":3}}],["stronglytypedidvalueparser",{"3":{"1050":1,"1199":2,"1203":1,"1207":1,"1300":7}}],["stronglytypedidpersistencetests",{"2":{"1050":1},"3":{"1050":1,"1199":1,"1207":2,"1286":3}}],["stronglytypedidparametertransformer",{"2":{"1050":1},"3":{"1050":1,"1199":2,"1203":1,"1207":1,"1311":6,"1496":1}}],["stronglytypedidtests",{"3":{"1050":3,"1199":2,"1207":4,"1300":4,"1436":3}}],["stronglytypedidtestsbase",{"2":{"130":1,"1054":1},"3":{"0":1,"130":1,"1050":2,"1054":1,"1199":3,"1207":2,"1431":3,"1436":11}}],["stronglytypedidtypeconverter",{"2":{"1810":1},"3":{"1050":2,"1052":1,"1055":2,"1199":3,"1203":1,"1207":3,"1300":15,"1810":1}}],["stronglytypedidtypeconvertertests",{"2":{"1050":1},"3":{"1050":1,"1052":1,"1055":1,"1199":1,"1207":3,"1300":4}}],["stronglytypedidtypeconverters",{"2":{"1050":1,"1052":1,"1810":1},"3":{"1050":1,"1052":1,"1199":4,"1203":1,"1207":1,"1300":4,"1810":1}}],["stronglytypedidmappertests",{"3":{"1199":1,"1207":8,"1300":2}}],["stronglytypedidmappings",{"3":{"798":1,"806":1,"1050":3,"1199":2,"1203":1,"1207":2,"1300":8,"1810":1}}],["stronglytypedidmodelconfiguration",{"2":{"1050":1,"1281":1,"1810":1},"3":{"1050":3,"1199":1,"1203":1,"1207":2,"1281":2,"1286":19,"1300":2,"1496":1,"1810":1}}],["stronglytypedidjsonconverterfactory",{"2":{"967":1,"1050":1,"1810":1},"3":{"967":1,"1050":2,"1199":2,"1203":1,"1207":3,"1300":12,"1311":3,"1810":1}}],["stronglytypedid",{"2":{"798":1,"1241":1},"3":{"798":2,"799":1,"1050":3,"1198":1,"1199":11,"1203":1,"1207":4,"1241":1,"1247":3,"1300":32,"1311":4,"1496":2}}],["stronglytypedidfitnesstests",{"3":{"1198":1,"1199":2,"1207":3,"1436":13}}],["stronglytypedidfixtures",{"3":{"477":2,"1207":15,"1300":3,"1436":22}}],["stronglytypedidfilterstrategytests",{"3":{"1199":1,"1207":5,"1247":2}}],["stronglytypedidfilterstrategy",{"2":{"330":1,"337":1,"1241":2,"1247":1},"3":{"330":1,"337":1,"1050":2,"1199":2,"1203":1,"1207":4,"1241":11,"1247":8,"1300":1,"1496":3}}],["stronglytypedidschematransformer",{"3":{"1050":2,"1199":3,"1203":1,"1207":3,"1300":2,"1311":14,"1496":2}}],["stronglytypedidserializationtests",{"2":{"1050":1},"3":{"1050":1,"1199":1,"1207":3,"1300":4}}],["stronglytypedids",{"2":{"468":1},"3":{"468":1,"798":1,"801":1,"804":1,"1050":1,"1207":1,"1436":9,"1489":1}}],["stronglytypedidsarereadonlyrecordstructs",{"2":{"0":1,"130":1,"798":1,"801":1,"804":1,"1050":1},"3":{"0":1,"130":1,"798":1,"801":1,"804":1,"1050":1,"1436":6}}],["strongly",{"1":{"467":1,"468":1,"469":1,"470":1,"471":1,"472":1,"473":1,"474":1,"475":1,"476":1,"477":1,"478":1,"1047":1,"1048":1,"1049":1,"1050":1,"1051":1,"1052":1,"1053":1,"1054":1,"1055":1},"3":{"0":4,"135":2,"139":1,"330":1,"337":1,"454":1,"467":1,"469":1,"656":1,"962":1,"1047":1,"1049":1,"1050":1,"1212":2,"1231":1,"1236":1,"1237":6,"1241":1,"1247":4,"1270":1,"1286":13,"1300":14,"1309":1,"1311":10,"1320":1,"1323":1,"1336":1,"1339":2,"1340":1,"1350":2,"1359":3,"1362":1,"1395":4,"1396":1,"1403":1,"1417":1,"1431":1,"1436":23,"1441":1,"1496":2,"1554":1,"1577":1,"1581":1,"1641":1,"1810":1,"1812":1,"2153":1,"2232":3}}],["struggling",{"3":{"1339":2,"2037":1}}],["strung",{"3":{"1300":1}}],["struck",{"3":{"1026":2,"1027":1,"1028":1,"1030":1,"1496":4,"1515":1,"1749":2,"1750":3,"1764":1,"1765":1,"1767":1,"1768":1,"1769":1,"1773":2,"1776":1}}],["structurally",{"0":{"2199":1},"3":{"0":1,"827":1,"946":1,"973":1,"1100":1,"1217":1,"1226":1,"1229":3,"1231":1,"1236":1,"1237":4,"1247":1,"1270":2,"1271":1,"1286":5,"1300":3,"1310":3,"1311":2,"1324":2,"1339":3,"1350":7,"1359":18,"1369":2,"1380":4,"1395":13,"1396":4,"1402":3,"1415":4,"1417":2,"1436":10,"1453":1,"1459":1,"1465":1,"1489":2,"1576":1,"1577":1,"1707":1,"1927":1,"1992":1,"1997":1,"2002":2,"2038":1,"2116":1,"2123":1,"2154":1,"2160":1}}],["structural",{"0":{"1638":1},"3":{"0":3,"135":4,"140":1,"518":1,"523":1,"572":2,"573":1,"579":1,"595":1,"622":1,"657":1,"733":1,"831":1,"865":1,"882":1,"926":1,"957":1,"997":1,"1022":1,"1050":1,"1212":1,"1234":1,"1237":3,"1247":2,"1249":1,"1259":2,"1265":1,"1270":1,"1286":9,"1300":3,"1301":2,"1310":1,"1311":1,"1323":4,"1324":2,"1332":1,"1339":5,"1350":8,"1359":9,"1371":2,"1380":4,"1395":5,"1396":12,"1401":1,"1402":10,"1415":5,"1428":1,"1431":1,"1436":22,"1455":1,"1467":2,"1488":1,"1489":1,"1494":1,"1496":1,"1526":1,"1539":1,"1574":1,"1575":1,"1577":2,"1578":1,"1638":3,"1639":2,"1654":2,"1799":1,"1806":1,"1810":2,"1832":3,"1833":3,"1834":1,"1849":1,"1858":1,"1922":1,"1950":1,"2031":2,"2035":1,"2047":1,"2054":1,"2071":1,"2079":1,"2093":1,"2098":1,"2232":1}}],["structures",{"3":{"1301":2,"1764":1}}],["structure",{"0":{"1615":1,"1796":1},"3":{"0":1,"1":1,"58":1,"130":1,"134":1,"264":1,"571":1,"590":1,"595":1,"617":2,"865":1,"953":1,"955":1,"1004":1,"1237":1,"1270":1,"1271":1,"1300":6,"1301":1,"1311":1,"1324":5,"1339":1,"1350":1,"1359":3,"1377":1,"1380":1,"1395":2,"1396":2,"1402":1,"1405":1,"1415":4,"1428":1,"1436":4,"1445":3,"1455":1,"1486":1,"1494":1,"1555":1,"1558":1,"1607":1,"1621":1,"1640":1,"1654":1,"1741":1,"1750":1,"1773":1,"1775":1,"1794":1,"1802":1,"1932":1,"1991":1,"2041":1,"2042":1,"2055":2,"2059":1,"2107":1}}],["structured",{"3":{"0":1,"53":1,"265":1,"372":1,"1018":1,"1116":1,"1213":1,"1217":1,"1229":1,"1237":3,"1247":2,"1263":1,"1270":5,"1311":3,"1312":7,"1315":1,"1317":1,"1323":2,"1324":1,"1339":1,"1340":1,"1342":1,"1350":1,"1359":11,"1369":2,"1376":1,"1378":1,"1380":4,"1396":1,"1402":1,"1417":1,"1435":2,"1436":2,"1438":1,"1465":2,"1467":1,"1473":1,"1526":1,"1536":1,"1550":1,"1577":3,"1630":1,"1665":1,"1821":1,"1881":1,"1885":1,"1927":1,"1928":1,"1991":1,"2018":1,"2063":1,"2074":1,"2155":1,"2156":1}}],["struct",{"2":{"469":1,"1051":1},"3":{"0":6,"468":4,"469":4,"470":4,"471":1,"472":1,"473":1,"474":1,"477":3,"656":2,"661":1,"797":3,"798":2,"799":3,"802":1,"803":1,"804":1,"1048":1,"1049":1,"1050":6,"1051":2,"1052":1,"1203":27,"1205":2,"1207":48,"1212":1,"1229":2,"1237":1,"1241":1,"1242":1,"1247":8,"1253":1,"1259":12,"1271":1,"1275":1,"1277":1,"1279":1,"1286":20,"1287":1,"1289":1,"1300":48,"1310":4,"1311":2,"1312":1,"1359":1,"1396":6,"1415":1,"1423":2,"1427":3,"1436":32,"1810":5,"1812":1,"2175":1}}],["structs",{"1":{"467":1,"468":1,"469":1,"470":1,"471":1,"472":1,"473":1,"474":1,"475":1,"476":1,"477":1,"478":1,"796":1,"797":1,"798":1,"799":1,"800":1,"801":1,"802":1,"803":1,"804":1,"805":1,"806":1},"3":{"0":2,"467":1,"469":1,"470":1,"472":1,"477":1,"660":1,"661":1,"796":1,"799":2,"1049":1,"1212":2,"1231":1,"1286":1,"1300":2,"2232":2}}],["street",{"3":{"1359":1,"1391":1,"1417":5}}],["streak",{"3":{"1069":1,"1453":1,"1490":1}}],["streamboundedasync",{"3":{"1427":2}}],["streamrendering",{"3":{"1324":1}}],["streamwriter",{"2":{"744":1},"3":{"741":1,"744":1,"1311":3}}],["streamedguardrailtests",{"3":{"1199":1,"1207":3,"1435":2}}],["streamed",{"3":{"741":2,"745":1,"1089":2,"1091":3,"1093":2,"1324":1,"1366":1,"1371":1,"1415":1,"1418":1,"1423":3,"1424":1,"1427":9,"1435":2,"1437":1,"1487":1,"1577":2,"1585":1,"1599":1,"1988":2,"1991":1,"2175":2,"2179":1}}],["stream",{"3":{"443":1,"741":1,"742":1,"743":2,"914":2,"1091":1,"1093":1,"1116":1,"1139":1,"1141":1,"1142":1,"1143":1,"1144":1,"1147":1,"1212":1,"1229":1,"1233":1,"1237":1,"1286":8,"1301":2,"1311":7,"1323":2,"1324":6,"1339":1,"1350":3,"1357":2,"1359":2,"1369":1,"1373":1,"1380":1,"1389":1,"1395":4,"1396":1,"1414":1,"1415":10,"1416":2,"1417":16,"1422":2,"1423":1,"1425":2,"1427":5,"1436":6,"1443":2,"1446":1,"1447":1,"1451":1,"1456":1,"1467":5,"1476":1,"1479":2,"1483":1,"1629":1,"1630":1,"1677":1,"1908":1,"2010":1,"2126":1,"2157":1,"2174":2,"2177":1,"2232":1}}],["streamprefix",{"3":{"142":1}}],["streams",{"3":{"0":1,"318":1,"407":1,"743":1,"1117":1,"1212":1,"1286":2,"1311":3,"1324":1,"1339":1,"1359":2,"1375":1,"1380":1,"1389":1,"1415":1,"1417":1,"1465":1,"1467":1,"1986":1,"1995":1,"2160":1,"2192":1,"2232":1}}],["streaming",{"3":{"0":1,"136":2,"142":1,"741":5,"1091":2,"1093":1,"1311":1,"1312":8,"1372":1,"1380":1,"1395":1,"1417":2,"1422":3,"1423":2,"1424":1,"1425":3,"1427":8,"1436":4,"1526":1,"1549":1,"1927":1,"2044":3,"2174":3,"2175":2,"2177":1,"2179":2}}],["stresses",{"3":{"1286":1,"1324":1,"1436":1}}],["stress",{"3":{"966":1,"1052":1,"1549":1,"1577":1,"1582":1,"2114":1}}],["stretching",{"3":{"1467":1,"2002":1}}],["stretches",{"3":{"1334":1,"1443":1}}],["stretched",{"3":{"309":1,"914":1}}],["stretch",{"3":{"234":1,"491":1,"1339":1,"1443":1,"1654":1}}],["strengths",{"0":{"1525":1,"1576":1,"1590":1},"3":{"1324":1,"1527":1}}],["strengthen",{"3":{"1577":1}}],["strengthened",{"3":{"1292":1,"1300":1}}],["strengthens",{"3":{"831":1,"917":1}}],["strength",{"3":{"103":1,"214":1,"215":1,"341":1,"472":1,"801":1,"1300":3,"1311":1,"1323":2,"1324":1,"1336":1,"1339":3,"1348":1,"1350":2,"1415":5,"1443":1,"1474":1,"1577":1,"1641":7,"1765":1,"1767":3,"1825":1,"1874":1,"1903":1,"1910":1,"2148":1,"2149":1,"2171":1}}],["strike",{"3":{"1773":1}}],["strikethrough",{"3":{"1639":1,"1742":1}}],["striking",{"3":{"1371":1}}],["stride",{"3":{"1534":1,"1577":1}}],["stripper",{"3":{"1436":1}}],["stripped",{"3":{"166":1,"889":1,"1091":2,"1184":1,"1323":1,"1324":2,"1359":2,"1366":1,"1369":1,"1395":1,"1421":1,"1422":1,"1427":2,"1435":1,"1436":5,"1447":1,"1577":1,"1631":1,"2174":1}}],["stripping",{"3":{"1286":1,"1300":1,"1323":1,"1324":2,"1339":2,"1436":1,"2179":1}}],["striping",{"3":{"157":1,"1267":1,"1270":2,"1298":1,"1300":2,"1301":2,"1311":1,"1909":1}}],["strips",{"3":{"0":1,"169":1,"972":1,"1184":1,"1286":5,"1300":4,"1309":1,"1323":2,"1324":3,"1359":1,"1395":2,"1396":2,"1401":1,"1402":1,"1415":1,"1417":1,"1427":1,"1436":7,"1445":1,"1454":1,"1526":1,"2126":1,"2128":1,"2232":1}}],["strip",{"3":{"0":1,"440":1,"1115":1,"1212":1,"1286":2,"1300":1,"1322":1,"1323":1,"1324":2,"1350":1,"1352":1,"1353":1,"1359":2,"1369":2,"1380":1,"1392":2,"1395":3,"1396":1,"1402":1,"1436":1,"1438":1,"1496":1,"1534":1,"1663":1,"2126":1,"2128":2}}],["stripepaymentintentid",{"2":{"1749":1,"1754":1},"3":{"1749":1,"1754":1,"1764":1}}],["stripepaymentservice",{"2":{"72":1,"73":1,"794":1,"1752":1},"3":{"72":2,"73":2,"674":1,"790":3,"791":2,"792":1,"794":1,"1591":1,"1600":1,"1752":1,"1765":1,"1770":1,"2166":1}}],["stripeuri",{"3":{"1600":1}}],["stripesessionid",{"3":{"1286":1,"1764":1}}],["stripesettings",{"2":{"73":1,"1770":1},"3":{"72":1,"73":2,"1770":1}}],["stripes",{"3":{"996":1,"1267":1,"1270":3,"1300":2,"1301":3,"1323":2,"1438":1,"1909":1}}],["stripewebhooksecretprovider",{"2":{"790":1},"3":{"790":2,"2166":1}}],["stripewebhookregistrationservicetests",{"3":{"790":1,"2167":1}}],["stripewebhookregistrationservice",{"2":{"790":1,"792":1,"794":1,"2166":1},"3":{"674":1,"789":1,"790":3,"791":1,"792":4,"794":2,"1589":1,"1591":2,"1596":1,"1597":1,"2166":2}}],["striped",{"3":{"155":1,"157":2,"159":1,"995":1,"996":1,"1183":1,"1267":1,"1270":4,"1300":2,"1311":1,"1323":1,"1438":1,"1496":1,"1577":2,"1585":1,"1668":1,"1909":1,"1912":1}}],["stripeclient",{"2":{"73":1},"3":{"73":1}}],["stripeclientfactorytests",{"3":{"73":2}}],["stripeclientfactory",{"2":{"73":1},"3":{"72":1,"73":2,"674":1}}],["stripeexception",{"2":{"72":1},"3":{"72":1}}],["stripe",{"1":{"787":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"794":1,"795":1},"2":{"1600":3},"3":{"0":13,"66":1,"72":5,"73":4,"96":2,"101":1,"157":1,"534":1,"535":2,"536":3,"537":1,"538":2,"539":1,"598":1,"599":1,"674":1,"698":1,"701":1,"733":2,"757":1,"759":1,"761":1,"787":1,"789":3,"790":8,"791":1,"792":5,"793":2,"794":2,"795":1,"827":2,"837":1,"838":1,"840":1,"841":1,"996":2,"1026":1,"1212":3,"1270":13,"1298":1,"1300":13,"1301":18,"1311":4,"1339":1,"1436":4,"1489":1,"1588":1,"1589":1,"1591":6,"1595":1,"1596":1,"1597":1,"1600":7,"1673":1,"1746":2,"1749":7,"1750":2,"1752":1,"1754":2,"1755":2,"1759":1,"1763":2,"1765":10,"1768":1,"1769":1,"1770":7,"1773":2,"1776":1,"1785":1,"1909":2,"1910":1,"1911":1,"1915":1,"1917":1,"1920":1,"2012":1,"2024":1,"2104":1,"2110":1,"2113":1,"2136":1,"2161":2,"2166":8,"2167":6,"2168":2,"2169":2,"2221":1,"2228":1,"2232":1}}],["strict=true",{"3":{"1591":1}}],["stricttransportsecurity",{"3":{"1339":1}}],["strictconformanttests",{"3":{"1198":1,"1199":2,"1207":1,"1436":6}}],["strictdriftedtests",{"3":{"1198":1,"1199":2,"1207":1,"1436":8}}],["strictness",{"3":{"461":1,"583":1,"584":2,"618":1,"1323":1}}],["strictest",{"3":{"215":1,"2150":1,"2153":1}}],["stricter",{"3":{"135":1,"177":1,"214":1,"217":1,"243":1,"1093":1,"1223":1,"1241":1,"1247":1,"1300":1,"1309":1,"1320":1,"1323":1,"1324":3,"1359":2,"1395":1,"1436":6,"1443":1,"1496":1,"1500":1,"1898":1,"2001":1,"2153":1}}],["strictly",{"3":{"0":3,"93":1,"95":1,"537":1,"591":1,"666":1,"846":1,"890":1,"914":1,"916":1,"1229":1,"1259":1,"1270":1,"1286":3,"1300":2,"1308":1,"1311":1,"1324":3,"1339":2,"1359":4,"1395":1,"1396":1,"1402":3,"1417":1,"1429":1,"1436":6,"1438":1,"1442":1,"1488":1,"1526":1,"1577":1,"1631":1,"1635":1,"1767":1,"1781":1,"1867":1,"2047":1,"2164":1}}],["strict",{"3":{"0":1,"58":1,"109":1,"187":1,"213":1,"214":1,"215":1,"217":2,"218":1,"219":1,"236":1,"388":1,"583":3,"584":1,"616":1,"618":7,"621":2,"953":1,"1184":4,"1191":1,"1200":1,"1229":2,"1237":1,"1247":3,"1262":1,"1270":2,"1286":2,"1300":5,"1309":2,"1311":1,"1324":4,"1334":1,"1339":3,"1359":3,"1395":1,"1396":1,"1398":1,"1402":1,"1405":1,"1409":1,"1415":4,"1433":1,"1436":25,"1443":1,"1455":3,"1480":1,"1486":1,"1488":1,"1496":1,"1498":1,"1517":1,"1534":2,"1585":1,"1621":1,"1638":1,"1640":1,"1671":1,"1772":1,"1922":1,"1961":1,"1967":1,"1977":1,"2057":1,"2147":2,"2148":1,"2149":1,"2151":1,"2153":1,"2227":1}}],["stringcontent",{"3":{"1436":2}}],["stringcomparemethod",{"3":{"1286":1}}],["stringcomparer",{"3":{"1237":1,"1247":4,"1286":4,"1300":4,"1301":1,"1309":2,"1310":1,"1311":1,"1323":3,"1324":8,"1339":5,"1350":2,"1359":2,"1395":3,"1396":4,"1402":1,"1417":2}}],["stringcomparison",{"3":{"1271":1,"1286":1,"1300":5,"1301":1,"1311":2,"1323":1,"1324":5,"1339":2,"1350":3,"1359":3,"1395":3,"1396":4,"1415":1,"1436":1}}],["stringwithqualityheadervalue",{"3":{"1324":1}}],["stringvalues",{"3":{"1311":1,"1324":1}}],["stringbuilder",{"3":{"1286":2,"1300":1,"1312":1,"1324":2,"1427":1}}],["stringfilterstrategytests",{"3":{"1199":1,"1207":3,"1247":1}}],["stringfilterstrategy",{"3":{"1199":3,"1203":1,"1207":2,"1241":4,"1247":10,"1359":1,"1496":3,"1815":1}}],["stringlocalizer",{"3":{"1324":1}}],["stringlocalizerpluralextensionstests",{"3":{"1199":1,"1207":3,"1586":1}}],["stringlocalizerpluralextensions",{"3":{"1199":1,"1203":1,"1207":2,"1208":1,"1324":5,"1436":2,"1496":1,"1577":2,"1586":1,"1591":1,"1596":1}}],["stringlength",{"3":{"827":1,"1300":4,"1309":4,"1323":3,"1324":5,"1339":4}}],["stringly",{"3":{"188":1,"1324":1,"1359":1,"1964":1}}],["stringifies",{"3":{"1247":1}}],["stringified",{"3":{"741":1,"1309":1,"1311":1,"1378":1}}],["stringidentity",{"3":{"1199":2,"1207":1}}],["stringincrementasync",{"2":{"178":1},"3":{"178":1,"1311":1}}],["stringstrategy",{"3":{"1247":3}}],["stringsplitoptions",{"3":{"1247":3}}],["stringsetasync",{"3":{"996":1,"1323":1}}],["strings",{"0":{"1394":1},"3":{"0":2,"86":2,"88":2,"164":1,"166":1,"188":1,"202":1,"230":1,"265":6,"286":1,"380":1,"448":1,"585":1,"599":2,"643":1,"673":1,"698":1,"700":1,"717":1,"974":1,"980":1,"983":1,"1059":1,"1175":1,"1229":1,"1232":1,"1237":3,"1247":2,"1259":1,"1270":5,"1271":3,"1278":1,"1282":1,"1286":16,"1300":18,"1309":10,"1311":9,"1312":3,"1323":3,"1324":28,"1335":1,"1339":7,"1350":14,"1359":19,"1369":1,"1380":1,"1394":2,"1395":11,"1396":14,"1402":4,"1409":2,"1415":14,"1416":4,"1417":12,"1427":2,"1436":24,"1442":1,"1455":1,"1467":10,"1470":1,"1473":2,"1474":1,"1477":2,"1489":1,"1490":1,"1496":1,"1524":1,"1526":1,"1531":1,"1548":1,"1553":1,"1554":1,"1564":2,"1591":2,"1596":1,"1653":1,"1666":1,"1669":2,"1670":1,"1671":1,"1684":1,"1686":1,"1695":1,"1727":2,"1790":1,"1920":1,"1928":1,"1964":1,"2012":1,"2081":1,"2083":2,"2131":1,"2136":1,"2139":1,"2171":1}}],["string",{"0":{"1305":1},"2":{"360":1,"397":1,"656":1,"658":1,"680":1,"684":1,"701":1,"776":1,"914":1,"959":1,"1132":1,"1333":1,"1356":1,"1443":1,"1446":1,"1467":1,"1541":1,"1687":1,"2010":1,"2078":1,"2146":1,"2156":1,"2159":1},"3":{"0":14,"24":1,"31":1,"33":1,"77":1,"86":1,"109":1,"111":1,"121":2,"159":1,"160":1,"164":1,"166":1,"168":1,"170":4,"171":1,"186":1,"190":1,"214":1,"216":1,"219":1,"225":1,"227":1,"229":1,"241":1,"243":2,"245":2,"249":1,"253":1,"255":1,"259":2,"260":2,"261":1,"265":11,"266":1,"286":1,"305":1,"314":1,"330":1,"335":1,"350":1,"358":1,"359":5,"360":1,"381":1,"386":1,"388":1,"390":1,"392":1,"397":1,"422":1,"425":1,"426":1,"429":1,"499":1,"547":1,"558":1,"572":1,"598":3,"599":8,"600":1,"601":2,"602":1,"604":1,"605":2,"609":1,"626":1,"633":1,"640":5,"643":1,"644":1,"656":1,"657":7,"658":1,"659":2,"680":5,"684":1,"691":1,"692":1,"698":7,"699":2,"701":1,"707":1,"708":2,"710":1,"715":1,"732":1,"733":1,"736":1,"740":1,"759":2,"827":1,"839":3,"881":3,"883":1,"888":1,"899":1,"904":1,"905":1,"906":1,"914":5,"922":1,"926":2,"959":2,"963":2,"964":2,"972":2,"974":1,"996":2,"1005":1,"1017":1,"1018":4,"1027":1,"1028":1,"1034":2,"1036":1,"1050":3,"1067":1,"1089":1,"1091":3,"1094":1,"1095":2,"1132":1,"1133":1,"1135":2,"1150":1,"1175":2,"1176":1,"1177":1,"1192":1,"1208":1,"1212":2,"1229":11,"1232":2,"1234":3,"1235":1,"1236":3,"1237":60,"1238":2,"1240":1,"1241":12,"1242":1,"1244":1,"1246":1,"1247":74,"1250":2,"1259":8,"1264":2,"1265":1,"1269":1,"1270":41,"1271":26,"1273":1,"1278":5,"1279":5,"1280":2,"1284":1,"1286":216,"1290":1,"1299":2,"1300":206,"1301":25,"1307":1,"1309":68,"1310":2,"1311":103,"1312":25,"1320":4,"1323":102,"1324":201,"1326":3,"1332":4,"1333":1,"1339":85,"1341":1,"1344":2,"1348":1,"1350":105,"1352":1,"1353":2,"1359":180,"1366":3,"1369":15,"1379":2,"1380":28,"1382":1,"1385":1,"1388":1,"1389":1,"1394":1,"1395":101,"1396":104,"1400":1,"1402":31,"1405":1,"1408":1,"1415":108,"1416":17,"1417":112,"1419":1,"1422":1,"1427":18,"1429":5,"1430":1,"1431":2,"1435":1,"1436":216,"1438":8,"1441":3,"1442":2,"1443":3,"1444":3,"1446":2,"1449":1,"1451":1,"1453":2,"1454":3,"1455":1,"1456":1,"1459":1,"1460":1,"1465":2,"1466":1,"1467":18,"1472":1,"1477":1,"1481":2,"1486":1,"1488":4,"1489":1,"1490":2,"1491":1,"1492":1,"1496":5,"1526":4,"1531":1,"1532":1,"1535":1,"1541":1,"1564":1,"1577":2,"1582":1,"1583":1,"1586":2,"1591":1,"1630":2,"1631":1,"1633":1,"1640":4,"1641":21,"1651":1,"1653":4,"1662":1,"1664":1,"1667":1,"1668":1,"1669":3,"1670":1,"1684":3,"1685":2,"1686":3,"1687":2,"1700":1,"1720":1,"1724":1,"1727":1,"1730":1,"1758":1,"1764":1,"1815":1,"1816":2,"1831":1,"1832":1,"1847":1,"1849":4,"1851":2,"1853":1,"1887":1,"1912":1,"1916":1,"1921":1,"1922":2,"1923":2,"1935":1,"1937":1,"1940":1,"1944":2,"1948":1,"1949":1,"1950":1,"1951":1,"1962":3,"1973":1,"1982":1,"1988":1,"1989":2,"1991":1,"2000":1,"2001":1,"2003":1,"2008":3,"2010":1,"2013":1,"2056":1,"2070":1,"2072":1,"2074":1,"2076":1,"2083":2,"2085":1,"2086":1,"2097":1,"2108":1,"2126":1,"2127":1,"2129":1,"2130":1,"2136":1,"2142":4,"2143":1,"2146":2,"2147":4,"2149":2,"2153":1,"2156":1,"2159":2,"2160":1,"2193":1,"2201":1,"2230":1,"2232":2}}],["straddle",{"3":{"1536":1}}],["straddles",{"3":{"1324":1,"1356":1,"1359":1}}],["stratification",{"3":{"1487":1}}],["strategic",{"3":{"1577":1,"1581":1,"1582":1,"1583":1,"1811":2,"2114":1}}],["strategies",{"3":{"0":1,"290":1,"295":1,"335":2,"1176":1,"1212":1,"1238":1,"1241":2,"1247":23,"1284":1,"1286":8,"1339":1,"1359":17,"1369":1,"1436":2,"1438":3,"1485":1,"1496":1,"1497":1,"1535":1,"1538":1,"1664":1,"1666":1,"1988":1,"2232":1}}],["strategy",{"0":{"1241":1,"1358":1,"1490":1,"1551":1,"1612":1},"1":{"394":1,"395":1,"396":1,"397":1,"398":1,"399":1,"400":1,"401":1,"402":1,"403":1,"404":1,"405":1,"406":1,"407":1,"408":1,"409":1,"445":1,"446":1,"447":1,"448":1,"449":1,"450":1,"451":1,"452":1,"453":1,"454":1,"455":1,"553":1,"554":1,"555":1,"556":1,"557":1,"558":1,"559":1,"560":1,"1072":1,"1073":1,"1074":1,"1075":1,"1076":1,"1077":1,"1078":1,"1079":1,"1172":1,"1173":1,"1174":1,"1175":1,"1176":1,"1177":1,"1178":1,"1179":1,"1180":1},"2":{"72":1,"407":2,"609":1,"988":1,"2156":1,"2158":1},"3":{"0":12,"17":1,"21":1,"27":1,"71":6,"72":2,"120":1,"153":1,"239":1,"290":3,"295":1,"296":3,"328":1,"330":3,"335":1,"394":1,"407":3,"435":1,"445":1,"459":1,"553":1,"573":1,"609":1,"653":1,"749":1,"819":7,"897":1,"948":1,"987":1,"988":5,"989":1,"991":1,"992":1,"1050":3,"1051":3,"1072":1,"1123":1,"1129":1,"1172":1,"1175":1,"1179":1,"1192":2,"1212":5,"1216":1,"1237":8,"1238":1,"1241":10,"1247":34,"1251":1,"1256":1,"1259":1,"1270":5,"1273":1,"1274":2,"1278":3,"1281":1,"1286":51,"1301":3,"1309":3,"1310":7,"1311":26,"1314":1,"1321":1,"1323":3,"1324":4,"1339":5,"1350":1,"1358":4,"1359":29,"1361":1,"1364":1,"1369":2,"1380":2,"1395":8,"1396":3,"1415":2,"1416":1,"1417":3,"1418":1,"1429":1,"1436":9,"1438":3,"1449":1,"1450":1,"1453":1,"1455":3,"1461":1,"1467":3,"1487":1,"1488":1,"1490":1,"1491":1,"1492":1,"1493":3,"1496":3,"1499":1,"1510":1,"1526":3,"1535":1,"1539":1,"1543":1,"1545":1,"1546":1,"1554":1,"1556":1,"1566":1,"1571":1,"1576":1,"1577":4,"1586":2,"1591":3,"1597":1,"1600":1,"1637":1,"1639":1,"1652":1,"1664":1,"1708":1,"1719":1,"1752":1,"1763":1,"1774":2,"1796":1,"1825":1,"1840":5,"1854":1,"1882":1,"1988":3,"1989":2,"1990":1,"1991":3,"2000":1,"2032":5,"2038":1,"2055":1,"2133":1,"2156":2,"2158":1,"2160":1,"2232":4}}],["stray",{"3":{"1091":1,"1300":1,"1395":2,"1396":1,"1425":1,"1436":2,"1496":3,"2150":1}}],["straightforward",{"3":{"1265":1,"1323":1,"1347":1}}],["straight",{"3":{"0":2,"102":1,"109":1,"121":1,"135":1,"150":1,"295":1,"423":1,"424":1,"459":1,"522":1,"523":1,"534":1,"545":1,"599":1,"674":1,"700":1,"749":1,"782":1,"790":1,"793":1,"799":1,"827":1,"881":1,"905":1,"987":1,"1018":1,"1042":1,"1077":1,"1100":1,"1116":1,"1183":1,"1187":1,"1194":1,"1237":1,"1244":1,"1247":2,"1252":1,"1256":1,"1257":1,"1259":5,"1263":1,"1264":1,"1270":11,"1271":1,"1278":2,"1286":23,"1289":1,"1300":11,"1301":2,"1307":1,"1309":5,"1311":11,"1318":1,"1323":4,"1324":22,"1339":6,"1347":1,"1350":6,"1359":41,"1369":4,"1375":1,"1380":7,"1383":1,"1389":1,"1392":1,"1395":20,"1396":18,"1402":1,"1406":1,"1415":14,"1416":3,"1417":5,"1436":11,"1438":2,"1467":2,"1479":1,"1585":1,"1651":1,"1669":1,"1730":1,"1773":1,"1823":1,"1840":2,"1844":1,"1851":1,"1859":1,"1902":1,"1917":1,"1922":1,"1945":1,"1955":2,"1957":1,"1975":1,"1986":1,"1991":1,"1994":1,"1998":1,"2047":1,"2066":1,"2069":1,"2096":1,"2124":1,"2137":1,"2157":1,"2162":1,"2165":1,"2186":1,"2204":1}}],["strangers",{"3":{"1396":1}}],["stranger",{"3":{"1017":1,"1415":1,"1454":1}}],["strangler",{"3":{"0":2,"53":1,"57":1,"59":1,"1012":1,"1312":1,"1436":1,"1526":1,"1532":1,"1544":1,"1576":1,"1577":1,"1586":1,"1591":1,"1663":1}}],["stranding",{"3":{"897":1,"1311":1,"1431":1}}],["strands",{"3":{"539":1,"1270":1,"1309":1,"1324":1,"1436":1,"2161":1,"2167":1}}],["strand",{"3":{"350":1,"1255":1,"1318":1,"1324":4,"1406":1,"1415":1,"1918":1,"1977":1}}],["strandedfixturehandler",{"3":{"1207":1,"1431":1,"1436":3}}],["strandedfixturehandlerbase",{"3":{"1199":2,"1207":1,"1431":1,"1436":7}}],["stranded",{"3":{"0":1,"534":1,"788":1,"793":1,"794":1,"1003":1,"1207":2,"1323":1,"1431":2,"1436":9,"1496":1,"1526":1,"1569":1,"1577":2,"2048":1,"2169":1}}],["stolen",{"3":{"500":1,"907":2,"908":1,"1300":4,"1322":2,"1323":1,"1406":1,"1415":1,"1436":1,"1901":1,"1905":2,"1980":1,"1981":1,"2140":2,"2144":1}}],["stood",{"3":{"111":1,"136":1,"285":1,"497":1,"1312":1,"1350":1,"1396":1,"1436":1,"1474":1,"2013":1,"2232":1}}],["stock",{"3":{"0":3,"99":2,"534":3,"535":3,"536":6,"538":4,"539":4,"540":2,"556":1,"793":2,"809":1,"1066":1,"1067":2,"1286":1,"1324":4,"1328":2,"1339":7,"1441":5,"1444":1,"1490":1,"1492":1,"1591":2,"1742":2,"1749":1,"1750":1,"1751":1,"1755":1,"1763":1,"1764":3,"1765":1,"1767":2,"1768":1,"1769":2,"1776":2,"2022":1,"2110":1,"2113":1,"2161":4,"2163":1,"2164":2,"2167":3,"2168":3,"2215":1}}],["storable",{"3":{"1369":2}}],["storagedelete",{"3":{"1467":1}}],["storagewrite",{"3":{"1467":1}}],["storageread",{"3":{"1467":2}}],["storageremove",{"3":{"1417":3}}],["storageaccesskey",{"3":{"1467":1}}],["storageallowsharedkeyaccess",{"3":{"1467":1}}],["storagev2",{"3":{"1467":1}}],["storageclearprefix",{"3":{"1417":1}}],["storageset",{"3":{"1417":3}}],["storageget",{"3":{"1417":1}}],["storagekey",{"3":{"1324":2}}],["storagenotconfigured",{"2":{"1116":1,"1389":1},"3":{"1116":1,"1323":1,"1359":1,"1389":1}}],["storage",{"0":{"1285":1,"2126":1},"1":{"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"437":1,"438":1,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1,"2124":1,"2125":1,"2126":1,"2127":1,"2128":1},"2":{"1484":1,"2127":1},"3":{"0":11,"163":1,"165":2,"166":1,"182":1,"207":1,"243":1,"245":3,"248":1,"251":1,"254":1,"257":1,"258":1,"259":2,"353":1,"359":1,"360":1,"361":1,"365":1,"387":1,"388":2,"403":1,"437":1,"438":2,"439":2,"441":2,"442":1,"443":5,"444":2,"459":1,"497":2,"505":2,"506":3,"507":8,"508":1,"509":4,"510":1,"511":2,"513":6,"514":3,"536":1,"555":1,"560":1,"598":2,"599":1,"602":2,"641":1,"663":1,"664":1,"665":6,"666":1,"670":1,"707":2,"708":1,"717":1,"732":1,"737":1,"853":1,"855":1,"903":1,"906":1,"972":1,"974":2,"1043":3,"1115":2,"1116":11,"1117":2,"1118":1,"1119":2,"1120":1,"1182":1,"1183":1,"1192":2,"1203":11,"1207":32,"1212":3,"1237":5,"1247":2,"1250":1,"1259":3,"1271":1,"1272":1,"1285":8,"1286":44,"1287":1,"1300":5,"1301":2,"1309":2,"1310":4,"1311":3,"1318":2,"1323":38,"1324":57,"1339":2,"1350":6,"1357":3,"1359":25,"1361":1,"1369":4,"1373":1,"1375":1,"1380":5,"1395":5,"1396":7,"1407":1,"1410":1,"1411":1,"1415":19,"1416":2,"1417":37,"1436":14,"1437":1,"1438":3,"1445":1,"1446":1,"1455":3,"1465":6,"1467":13,"1470":1,"1472":1,"1473":1,"1474":2,"1478":2,"1481":2,"1484":2,"1487":1,"1490":1,"1496":3,"1526":1,"1563":1,"1567":1,"1577":2,"1599":1,"1631":2,"1635":1,"1638":1,"1639":2,"1640":2,"1641":5,"1660":1,"1668":2,"1669":3,"1670":2,"1677":1,"1748":1,"1765":3,"1779":2,"1854":1,"1855":1,"1862":2,"1863":1,"1864":1,"1900":1,"1901":1,"1904":1,"1922":1,"1933":1,"1948":2,"1968":1,"1970":2,"1980":1,"2012":1,"2034":2,"2036":2,"2074":1,"2098":1,"2123":2,"2124":3,"2126":7,"2127":3,"2128":3,"2133":1,"2142":1,"2143":3,"2144":1,"2145":1,"2207":1,"2208":1,"2210":2,"2232":3}}],["stories",{"3":{"506":1,"508":1,"555":1,"560":1,"2131":1}}],["storing",{"3":{"206":1,"208":1,"995":1,"1092":1,"1259":3,"1270":1,"1286":5,"1300":2,"1309":1,"1311":2,"1323":1,"1324":5,"1339":1,"1350":4,"1359":1,"1362":1,"1369":4,"1395":4,"1396":2,"1417":3,"1436":3,"1631":1,"1900":1,"1979":1,"2124":1,"2125":1}}],["story",{"3":{"24":1,"71":1,"148":1,"168":1,"236":1,"349":1,"350":1,"365":1,"379":1,"413":1,"507":1,"633":1,"707":1,"916":1,"990":1,"1018":1,"1020":1,"1035":1,"1044":1,"1074":1,"1084":1,"1212":1,"1228":1,"1230":1,"1234":1,"1236":1,"1237":2,"1241":1,"1247":2,"1259":1,"1263":2,"1270":2,"1271":1,"1275":1,"1286":9,"1290":1,"1291":1,"1292":1,"1300":5,"1301":1,"1303":1,"1309":3,"1311":3,"1312":2,"1323":4,"1324":4,"1336":1,"1348":1,"1350":4,"1353":1,"1359":3,"1366":1,"1369":3,"1375":1,"1376":1,"1380":3,"1381":1,"1395":2,"1396":7,"1400":1,"1410":1,"1415":2,"1416":2,"1417":6,"1427":1,"1428":1,"1436":4,"1455":2,"1471":1,"1473":1,"1476":1,"1482":1,"1488":1,"1496":1,"1547":1,"1549":1,"1566":1,"1577":1,"1591":1,"1699":1,"1706":1,"1723":1,"1727":1,"1833":1,"1853":1,"1894":1,"1899":2,"1927":1,"1929":1,"1968":1,"1978":1,"1985":2,"1989":1,"2029":1,"2034":1,"2059":1,"2061":1,"2062":1,"2064":2,"2089":1,"2090":1,"2113":1,"2121":1,"2129":2,"2146":1,"2155":1,"2169":1,"2182":1,"2194":1,"2208":1,"2232":1}}],["storming",{"3":{"1438":1}}],["storms",{"3":{"174":1,"1547":1,"1566":1,"2014":1,"2162":1,"2182":1}}],["storm",{"3":{"0":3,"72":1,"407":1,"612":1,"792":1,"827":2,"883":1,"1259":1,"1330":1,"1339":3,"1402":1,"1436":1,"1438":1,"1443":1,"1465":2,"1668":1,"2007":1,"2073":1,"2166":1,"2232":1}}],["storehome",{"3":{"1591":6,"1595":1,"1596":3,"1597":2,"1600":2}}],["storehomepagecontent",{"3":{"1324":1}}],["storeharness",{"3":{"1199":2,"1207":1}}],["storegenerated",{"3":{"1175":1,"1280":1,"1286":3}}],["storeaccounts",{"3":{"1286":1}}],["storeapphostfixture",{"3":{"914":1,"1069":1}}],["storearchitecturemap",{"2":{"132":1,"1161":1},"3":{"132":1,"1161":1,"1431":1,"1436":3,"1489":2,"1590":1,"1591":4,"1600":1,"2042":1}}],["storetimezonesettings",{"2":{"675":1,"676":1},"3":{"675":1,"676":1}}],["storefronthostapplicationfactory",{"2":{"572":1},"3":{"572":1}}],["storefront",{"3":{"0":2,"217":1,"825":1,"830":1,"831":1,"832":1,"1027":1,"1028":2,"1124":1,"1416":1,"1436":2,"1600":2,"1750":1,"1764":2,"1765":1,"1767":1}}],["stores",{"3":{"0":6,"24":1,"26":1,"231":1,"243":1,"245":2,"256":1,"261":1,"286":1,"309":1,"420":1,"696":1,"702":1,"715":1,"727":1,"732":1,"848":1,"849":1,"854":1,"883":1,"904":1,"945":1,"947":1,"1012":1,"1025":1,"1026":1,"1034":1,"1035":1,"1068":1,"1116":1,"1229":1,"1237":2,"1247":2,"1259":4,"1263":1,"1270":5,"1273":1,"1275":2,"1285":1,"1286":13,"1293":2,"1300":7,"1301":8,"1309":1,"1311":9,"1312":1,"1318":1,"1322":1,"1323":7,"1324":13,"1339":6,"1350":2,"1357":1,"1359":5,"1369":2,"1395":12,"1396":4,"1402":1,"1406":1,"1409":1,"1412":1,"1415":10,"1416":1,"1417":11,"1433":1,"1436":8,"1438":1,"1441":1,"1454":1,"1456":1,"1465":1,"1467":1,"1488":1,"1496":1,"1540":1,"1553":1,"1631":3,"1641":1,"1660":1,"1667":1,"1854":1,"1902":1,"1909":1,"1911":1,"1917":1,"2040":1,"2143":1,"2149":1,"2187":1,"2232":1}}],["storedat",{"3":{"1324":1}}],["storedpermission",{"3":{"1436":1}}],["storedpermissions",{"3":{"1300":2,"1324":1}}],["storedpermissionroleadministrationservicetests",{"2":{"1199":1},"3":{"1199":1,"1207":4}}],["storedpermissionroleadministrationservice",{"2":{"1287":1,"1297":1,"2200":1},"3":{"1059":1,"1199":2,"1203":1,"1207":2,"1287":1,"1297":2,"1300":22,"1323":1,"1496":1,"2200":1}}],["storedhashes",{"3":{"1300":1}}],["storedstate",{"3":{"1199":2,"1207":1}}],["stored",{"0":{"1250":1,"2199":1},"1":{"2194":1,"2195":1,"2196":1,"2197":1,"2198":1,"2199":1,"2200":1,"2201":1,"2202":1,"2203":1},"2":{"1902":1},"3":{"0":12,"24":3,"27":1,"41":1,"126":1,"157":5,"160":1,"184":1,"186":2,"224":1,"225":1,"231":1,"243":1,"246":1,"248":1,"265":1,"284":1,"309":2,"310":6,"311":1,"314":1,"353":1,"358":1,"359":6,"360":1,"363":1,"364":1,"365":3,"387":1,"388":1,"395":1,"397":1,"399":1,"403":1,"423":1,"443":2,"499":11,"500":1,"501":2,"507":2,"511":1,"513":1,"528":1,"529":2,"530":1,"539":1,"574":1,"591":1,"605":1,"666":1,"672":1,"692":1,"707":1,"717":1,"740":1,"767":2,"790":1,"813":1,"849":1,"852":1,"854":1,"880":1,"881":2,"885":1,"904":1,"944":2,"945":4,"946":2,"948":5,"965":1,"971":1,"995":1,"996":1,"1017":1,"1018":3,"1026":3,"1034":1,"1035":1,"1042":2,"1044":1,"1050":1,"1057":1,"1059":6,"1060":2,"1061":4,"1063":1,"1114":1,"1115":2,"1116":3,"1118":2,"1135":1,"1140":1,"1183":1,"1212":7,"1229":2,"1234":2,"1237":4,"1247":2,"1250":2,"1251":1,"1256":2,"1259":11,"1270":7,"1271":2,"1283":2,"1284":2,"1285":1,"1286":37,"1289":1,"1291":2,"1292":2,"1293":1,"1294":1,"1295":1,"1297":3,"1300":80,"1301":15,"1309":4,"1311":31,"1312":1,"1321":1,"1323":15,"1324":49,"1339":5,"1342":2,"1344":1,"1347":3,"1350":16,"1352":1,"1356":1,"1357":1,"1358":1,"1359":43,"1362":3,"1369":11,"1380":7,"1382":1,"1384":1,"1389":2,"1391":1,"1395":19,"1396":13,"1402":3,"1405":1,"1409":5,"1411":1,"1414":1,"1415":26,"1417":18,"1432":1,"1435":1,"1436":12,"1438":2,"1443":1,"1454":2,"1455":2,"1462":1,"1465":2,"1467":4,"1492":1,"1496":3,"1563":1,"1567":1,"1577":2,"1585":1,"1630":6,"1631":8,"1633":1,"1638":1,"1639":4,"1640":3,"1641":20,"1664":1,"1686":2,"1732":1,"1747":2,"1749":2,"1764":3,"1765":3,"1767":2,"1779":1,"1849":1,"1854":1,"1861":1,"1900":1,"1902":4,"1908":3,"1909":4,"1922":1,"1933":1,"1964":1,"1975":1,"1979":1,"1980":1,"1982":1,"2043":1,"2047":1,"2078":1,"2083":2,"2125":1,"2128":1,"2141":2,"2142":4,"2144":1,"2157":1,"2186":1,"2192":1,"2193":1,"2194":1,"2199":3,"2200":3,"2202":3,"2203":2,"2208":2,"2211":1,"2232":4}}],["store",{"0":{"91":1,"96":1,"1479":1,"1480":2,"1481":1,"1603":1,"1995":1},"1":{"1587":1,"1588":1,"1589":1,"1590":1,"1591":1,"1592":1,"1593":1,"1594":1,"1595":1,"1596":1,"1597":1,"1598":1,"1599":1,"1600":1,"1681":1,"1682":1,"1683":1,"1684":1,"1685":1,"1686":1,"1687":1,"1688":1,"1689":1,"1690":1,"1691":1,"2109":1,"2110":1,"2111":1,"2112":1,"2113":1,"2114":1,"2115":1},"2":{"62":3,"80":1,"395":1,"401":1,"493":3,"564":1,"642":1,"1195":1,"1215":1,"1471":1,"1486":1,"1490":2,"1503":1,"1588":3,"1591":1,"1775":3,"2105":1,"2111":1,"2202":1},"3":{"0":117,"3":5,"7":2,"24":1,"27":3,"37":1,"39":1,"42":7,"59":5,"62":6,"63":1,"66":1,"68":1,"72":9,"73":5,"76":1,"80":8,"85":1,"86":1,"91":6,"93":5,"94":12,"95":5,"96":12,"97":2,"98":3,"99":2,"100":1,"101":2,"102":1,"103":3,"104":3,"109":3,"115":1,"117":3,"121":3,"127":3,"128":7,"132":1,"135":1,"145":6,"146":1,"147":5,"149":3,"150":1,"151":1,"152":5,"155":1,"157":4,"159":1,"161":1,"165":2,"166":2,"167":1,"170":1,"175":3,"180":11,"184":2,"186":5,"193":1,"195":17,"196":2,"200":1,"201":1,"202":1,"203":2,"212":1,"214":1,"217":6,"218":7,"223":1,"229":1,"230":11,"235":7,"238":1,"241":1,"242":1,"243":27,"245":10,"249":3,"250":4,"251":2,"252":3,"253":1,"254":2,"256":1,"257":2,"258":1,"259":3,"260":10,"261":8,"279":1,"281":2,"283":3,"285":1,"291":5,"293":1,"295":6,"300":1,"310":4,"314":2,"318":13,"320":1,"322":1,"324":3,"325":5,"326":3,"333":2,"341":5,"345":2,"350":1,"351":1,"352":1,"353":1,"359":3,"368":1,"373":3,"375":3,"386":4,"387":3,"388":1,"390":14,"391":13,"392":8,"393":7,"395":4,"397":1,"401":11,"403":13,"405":1,"409":1,"414":1,"418":1,"421":1,"422":2,"433":1,"435":2,"439":1,"446":2,"448":12,"452":19,"453":1,"454":4,"458":2,"459":5,"461":1,"462":1,"463":6,"464":2,"465":5,"466":1,"468":1,"470":7,"475":10,"476":11,"477":11,"478":2,"481":1,"482":1,"483":2,"486":1,"487":1,"488":2,"489":2,"490":2,"491":2,"492":3,"493":7,"494":4,"495":4,"497":12,"499":11,"500":1,"502":1,"507":10,"511":4,"513":6,"514":2,"527":1,"534":2,"535":2,"536":3,"537":2,"538":1,"539":6,"540":1,"543":5,"545":22,"547":1,"550":1,"551":1,"552":7,"554":2,"556":25,"562":1,"563":5,"564":20,"566":6,"567":8,"572":29,"574":1,"575":3,"576":1,"577":4,"578":8,"582":1,"583":30,"585":13,"586":7,"589":1,"591":7,"593":1,"594":3,"597":1,"598":1,"599":35,"600":5,"601":5,"602":3,"603":5,"604":3,"607":14,"609":52,"611":11,"612":6,"613":6,"616":4,"618":7,"620":3,"621":4,"624":8,"625":7,"626":37,"627":2,"628":6,"629":5,"638":4,"640":25,"641":1,"642":8,"643":5,"644":10,"649":10,"651":5,"655":5,"657":14,"658":1,"660":2,"663":1,"665":12,"666":1,"667":2,"668":9,"669":7,"674":17,"675":3,"676":5,"677":3,"681":2,"683":1,"689":1,"690":1,"691":2,"698":2,"702":2,"707":4,"710":1,"711":1,"713":1,"714":1,"715":4,"718":6,"719":4,"720":2,"723":1,"724":4,"725":20,"726":2,"727":2,"728":7,"733":5,"737":2,"739":1,"741":2,"743":6,"744":2,"745":1,"749":14,"751":4,"752":2,"755":1,"756":4,"757":24,"758":1,"759":6,"760":5,"761":6,"764":5,"765":4,"766":35,"767":2,"768":6,"769":5,"774":17,"780":4,"782":15,"789":6,"790":21,"792":4,"793":16,"794":9,"798":2,"799":1,"803":1,"804":5,"805":2,"806":1,"808":2,"809":5,"810":2,"813":5,"825":4,"826":8,"827":25,"829":1,"830":10,"831":7,"832":14,"833":7,"836":1,"837":13,"838":25,"839":6,"840":3,"841":6,"842":1,"846":1,"853":4,"854":5,"855":2,"856":2,"857":1,"859":1,"861":15,"863":9,"864":5,"867":1,"868":7,"869":14,"870":8,"872":2,"873":12,"875":2,"876":23,"877":7,"879":1,"881":7,"884":3,"889":3,"891":4,"892":1,"896":1,"897":10,"900":6,"903":2,"905":6,"906":1,"907":1,"908":1,"913":6,"914":7,"916":5,"917":2,"924":7,"926":7,"927":4,"930":1,"933":1,"939":1,"946":3,"949":1,"954":16,"956":1,"958":1,"959":2,"960":1,"964":1,"971":3,"972":4,"973":1,"974":3,"979":1,"980":3,"981":1,"983":1,"986":2,"988":7,"990":3,"991":3,"994":1,"996":2,"999":1,"1004":5,"1006":1,"1010":1,"1012":6,"1014":2,"1020":1,"1025":11,"1026":28,"1027":1,"1028":2,"1029":2,"1036":1,"1044":1,"1050":5,"1051":2,"1054":4,"1058":4,"1063":1,"1065":2,"1067":3,"1069":3,"1073":1,"1074":3,"1078":2,"1081":1,"1082":7,"1083":3,"1085":2,"1086":3,"1090":1,"1093":1,"1094":1,"1117":1,"1123":2,"1124":13,"1127":3,"1128":1,"1129":1,"1133":4,"1139":1,"1141":1,"1142":2,"1144":1,"1154":2,"1156":1,"1161":4,"1162":1,"1163":1,"1168":11,"1184":1,"1187":3,"1192":1,"1195":1,"1207":1,"1208":1,"1212":9,"1214":1,"1215":1,"1216":1,"1229":4,"1231":1,"1233":1,"1237":43,"1246":2,"1247":15,"1253":1,"1257":1,"1259":23,"1262":5,"1263":1,"1264":8,"1265":1,"1266":1,"1269":2,"1270":75,"1271":29,"1273":1,"1275":1,"1277":1,"1280":2,"1282":1,"1283":1,"1285":1,"1286":95,"1290":5,"1293":1,"1294":1,"1300":138,"1301":36,"1309":9,"1310":6,"1311":117,"1312":13,"1315":1,"1316":3,"1318":2,"1322":2,"1323":118,"1324":141,"1326":2,"1337":1,"1339":139,"1350":1,"1357":2,"1359":13,"1369":2,"1379":2,"1380":7,"1395":9,"1396":6,"1402":2,"1405":2,"1406":1,"1409":1,"1415":19,"1416":1,"1417":69,"1427":1,"1428":1,"1431":1,"1436":323,"1438":5,"1441":1,"1442":1,"1444":6,"1447":1,"1453":2,"1454":1,"1455":10,"1459":1,"1460":1,"1462":1,"1465":3,"1467":5,"1471":8,"1474":1,"1475":2,"1479":21,"1480":30,"1481":3,"1482":2,"1483":3,"1485":1,"1486":10,"1487":2,"1488":4,"1489":5,"1490":8,"1492":10,"1496":7,"1500":2,"1503":1,"1512":1,"1520":1,"1526":2,"1531":1,"1545":1,"1556":1,"1566":1,"1573":1,"1577":2,"1582":4,"1583":1,"1585":2,"1587":2,"1588":4,"1589":2,"1591":80,"1593":1,"1594":1,"1596":20,"1597":3,"1598":1,"1599":12,"1600":18,"1601":1,"1602":1,"1627":1,"1631":1,"1635":1,"1636":1,"1638":1,"1641":2,"1645":1,"1646":1,"1650":2,"1653":1,"1654":1,"1658":2,"1659":1,"1660":1,"1665":1,"1666":1,"1667":1,"1668":2,"1669":2,"1672":1,"1673":1,"1675":1,"1681":1,"1703":2,"1705":3,"1708":1,"1721":1,"1724":1,"1736":1,"1739":1,"1740":1,"1747":1,"1756":1,"1757":1,"1760":2,"1761":6,"1764":14,"1765":35,"1770":1,"1773":3,"1775":3,"1784":1,"1785":1,"1810":2,"1815":3,"1828":1,"1839":2,"1851":1,"1854":1,"1856":1,"1858":1,"1872":1,"1874":1,"1875":2,"1876":1,"1891":1,"1896":2,"1898":1,"1900":1,"1905":1,"1909":2,"1910":1,"1912":3,"1915":1,"1916":1,"1921":1,"1922":6,"1923":5,"1934":1,"1947":1,"1948":2,"1957":1,"1963":1,"1967":1,"1970":2,"1972":2,"1973":1,"1978":2,"1979":1,"1982":2,"1983":5,"1985":3,"1994":1,"1995":4,"1996":1,"1997":1,"2000":9,"2004":1,"2012":1,"2024":2,"2025":3,"2042":1,"2043":1,"2044":5,"2046":1,"2055":3,"2057":1,"2066":1,"2069":1,"2083":1,"2101":1,"2104":1,"2105":1,"2109":1,"2110":1,"2111":6,"2112":2,"2113":5,"2114":1,"2115":1,"2123":1,"2124":1,"2125":1,"2126":1,"2127":1,"2128":3,"2131":7,"2136":1,"2138":2,"2142":1,"2146":1,"2149":1,"2151":4,"2156":2,"2157":1,"2158":5,"2161":1,"2164":1,"2166":2,"2168":1,"2169":1,"2179":2,"2185":1,"2187":1,"2189":1,"2192":1,"2193":2,"2200":1,"2202":5,"2210":1,"2228":1,"2231":1,"2232":3}}],["stoptracingasync",{"3":{"1436":1}}],["stoplistenasync",{"3":{"1417":1}}],["stopdetecting",{"3":{"1417":1}}],["stopwords",{"3":{"1359":1}}],["stopwatch",{"2":{"1163":1,"1821":1},"3":{"1163":1,"1263":3,"1270":6,"1311":2,"1323":5,"1339":3,"1425":1,"1427":2,"1436":3,"1475":1,"1818":1,"1821":2}}],["stopasync",{"3":{"572":2,"1069":1,"1259":2,"1286":1,"1323":1,"1324":1,"1395":1,"1417":7,"1429":1,"1436":6,"1488":2,"2055":2}}],["stop",{"0":{"2072":1},"1":{"1803":1,"1804":1,"1805":1,"1806":1,"1807":1},"3":{"80":1,"81":2,"115":1,"156":2,"237":1,"283":1,"341":1,"433":1,"472":1,"557":1,"571":1,"595":1,"674":1,"751":1,"791":1,"827":1,"870":1,"897":2,"898":1,"910":1,"932":1,"948":1,"1006":1,"1124":1,"1133":1,"1134":1,"1212":1,"1237":2,"1240":1,"1247":1,"1251":1,"1259":3,"1270":1,"1286":3,"1300":3,"1311":6,"1323":5,"1324":5,"1326":1,"1328":1,"1339":4,"1350":2,"1357":1,"1359":7,"1366":1,"1369":1,"1395":6,"1396":9,"1415":5,"1417":4,"1436":13,"1438":3,"1443":1,"1454":1,"1456":2,"1467":2,"1489":1,"1490":1,"1526":1,"1589":1,"1595":1,"1596":1,"1606":1,"1654":1,"1671":1,"1684":1,"1727":1,"1729":1,"1740":1,"1749":1,"1765":1,"1796":1,"1802":1,"1803":1,"1812":1,"1859":1,"1868":1,"1891":1,"1893":1,"1924":1,"1980":1,"2000":1,"2001":3,"2016":1,"2049":1,"2050":1,"2066":1,"2080":1,"2085":1,"2097":1,"2148":1,"2150":1,"2169":1,"2180":1,"2206":1}}],["stopped",{"3":{"0":1,"67":1,"109":1,"170":1,"248":1,"318":1,"413":1,"497":1,"499":1,"527":1,"563":1,"741":1,"757":1,"832":1,"840":1,"876":1,"905":2,"932":1,"1005":2,"1019":1,"1247":2,"1259":1,"1270":2,"1286":3,"1309":1,"1311":1,"1312":1,"1322":1,"1323":4,"1324":5,"1328":1,"1332":1,"1339":4,"1359":2,"1395":1,"1396":2,"1399":1,"1402":2,"1415":1,"1417":4,"1435":1,"1436":13,"1438":2,"1449":1,"1451":1,"1455":1,"1467":2,"1478":1,"1489":2,"1496":1,"1699":1,"1727":1,"1765":1,"1826":1,"1919":2,"1946":1,"1992":1,"2039":1,"2045":1,"2097":1}}],["stoppingtoken",{"2":{"237":1},"3":{"237":1,"518":1,"1100":1,"1286":1,"1323":2,"1339":4,"1396":3}}],["stopping",{"3":{"0":3,"135":1,"235":1,"255":1,"626":1,"898":1,"1091":1,"1187":1,"1271":1,"1312":1,"1323":3,"1339":1,"1380":1,"1395":4,"1396":1,"1417":2,"1427":3,"1431":1,"1435":1,"1436":3,"1492":1,"1665":1,"1807":1,"1919":1,"1922":1}}],["stopsgracefully",{"3":{"1436":1}}],["stopsthewalk",{"3":{"1436":2}}],["stops",{"0":{"1989":1},"3":{"0":13,"1":1,"19":1,"24":2,"27":1,"57":1,"72":1,"81":1,"109":1,"111":1,"122":1,"137":1,"148":1,"160":1,"176":1,"216":1,"235":1,"241":1,"243":1,"265":1,"290":1,"361":1,"369":1,"370":1,"371":1,"391":1,"399":1,"401":1,"403":1,"408":1,"472":1,"528":1,"535":1,"539":1,"549":2,"593":1,"608":1,"611":1,"612":1,"614":1,"626":1,"632":1,"633":1,"648":1,"657":1,"698":1,"700":2,"707":1,"714":1,"741":1,"750":1,"782":1,"789":1,"800":1,"809":1,"810":1,"821":1,"827":1,"829":1,"838":1,"863":1,"869":1,"874":1,"889":1,"898":1,"899":1,"912":1,"921":2,"923":1,"924":1,"926":2,"948":1,"963":1,"973":1,"1020":1,"1022":1,"1033":1,"1042":1,"1049":1,"1051":1,"1067":1,"1093":1,"1153":1,"1163":1,"1212":2,"1229":2,"1233":1,"1237":1,"1247":2,"1256":2,"1259":8,"1270":7,"1274":1,"1277":1,"1281":1,"1286":16,"1300":13,"1301":1,"1309":2,"1311":8,"1312":1,"1322":1,"1323":9,"1324":12,"1327":1,"1339":12,"1350":3,"1359":15,"1369":3,"1380":1,"1395":20,"1396":14,"1400":2,"1401":1,"1402":1,"1405":1,"1415":8,"1416":2,"1417":5,"1423":1,"1425":1,"1427":4,"1431":1,"1436":25,"1438":4,"1441":3,"1443":1,"1449":1,"1455":1,"1465":1,"1467":4,"1472":1,"1475":1,"1488":1,"1489":2,"1490":1,"1492":1,"1494":2,"1531":1,"1545":1,"1654":1,"1665":1,"1681":1,"1685":1,"1692":1,"1702":1,"1717":1,"1722":1,"1729":1,"1769":1,"1824":1,"1849":1,"1851":1,"1876":1,"1902":2,"1936":1,"1951":1,"1964":1,"1988":1,"1990":1,"1994":1,"2001":1,"2029":1,"2041":2,"2045":1,"2048":1,"2056":1,"2066":1,"2067":1,"2069":1,"2075":1,"2082":1,"2097":2,"2116":1,"2142":1,"2146":1,"2148":2,"2150":1,"2157":1,"2159":1,"2162":1,"2164":1,"2166":1,"2168":1,"2170":1,"2175":1,"2180":1,"2193":1}}],["stakeholders",{"3":{"1541":1}}],["stake",{"3":{"1396":1,"1436":2,"1438":1,"2195":1}}],["stakes",{"3":{"530":1,"1286":1,"1324":1,"1350":1,"2148":1}}],["stash",{"3":{"1311":3,"1324":1,"1352":1}}],["stashes",{"3":{"350":1,"419":1,"1273":1,"1298":1,"1300":3,"1311":3,"1339":1,"1359":1,"1415":1,"1443":1,"1825":1,"1975":2}}],["stashed",{"3":{"214":1,"350":1,"420":1,"1300":2,"1311":3,"1336":1,"1976":1,"2149":1}}],["staffs",{"3":{"1350":1}}],["staff",{"3":{"689":1}}],["stably",{"3":{"1324":1,"1395":2}}],["stablepolls",{"3":{"1395":3}}],["stablepollsforcompletion",{"3":{"1395":1}}],["stable",{"3":{"0":3,"24":1,"264":1,"265":4,"266":1,"303":1,"341":1,"434":2,"449":1,"549":1,"593":1,"635":1,"742":1,"750":1,"751":1,"880":1,"891":1,"964":1,"1012":1,"1133":1,"1178":1,"1212":1,"1229":3,"1233":1,"1237":5,"1247":2,"1259":4,"1269":1,"1270":4,"1271":3,"1276":1,"1286":7,"1300":7,"1301":1,"1308":1,"1309":5,"1310":1,"1311":13,"1318":1,"1323":14,"1324":4,"1339":1,"1348":1,"1350":16,"1353":2,"1359":46,"1369":2,"1380":4,"1387":1,"1390":2,"1395":7,"1396":28,"1402":16,"1406":1,"1410":1,"1415":9,"1416":1,"1417":7,"1427":1,"1435":1,"1436":10,"1438":3,"1441":1,"1465":1,"1496":1,"1519":1,"1536":1,"1546":1,"1560":1,"1565":1,"1577":1,"1585":1,"1638":1,"1639":1,"1641":3,"1664":1,"1665":1,"1796":1,"1805":1,"1896":1,"1899":1,"1911":2,"1912":1,"1958":1,"2083":1,"2086":2,"2132":1,"2138":2,"2158":1,"2180":1,"2187":1,"2189":1,"2193":1}}],["stability",{"3":{"592":1,"1134":1,"1359":2,"1369":1,"1395":3,"1396":1,"1417":1,"1436":2,"1492":1,"1565":1}}],["starred",{"3":{"1396":1}}],["starborder",{"3":{"1324":1}}],["starhalf",{"3":{"1324":1}}],["stars",{"3":{"1324":4,"1385":1,"1391":1,"1395":3,"1396":1,"1748":1,"1765":1,"1767":1}}],["starving",{"3":{"1259":1}}],["starve",{"3":{"1124":1,"1128":1,"1254":1,"1259":1,"1275":1,"1324":1,"1447":1}}],["starved",{"3":{"556":1}}],["star",{"3":{"391":1,"1324":11,"1391":2,"1395":12,"1396":16,"1417":1,"1748":1,"1750":1,"1758":1,"1763":1,"1764":3,"1765":1,"1767":1,"1768":1,"1773":1,"1787":1,"1793":1,"1807":1,"1812":1,"1817":1,"1827":1,"1834":1,"1846":1,"1853":1,"1862":1,"1868":1,"1877":1,"1886":1,"1892":1,"1899":1,"1905":1,"1912":1,"1922":2,"1924":1,"1930":1,"1941":1,"1950":1,"1959":1,"1965":1,"1972":1,"1979":1,"1985":1,"1991":1,"1997":1,"2002":1,"2014":1,"2028":1,"2038":1,"2049":1,"2060":1,"2069":1,"2080":1,"2086":1,"2098":1,"2108":1,"2115":1,"2123":1,"2128":1,"2133":1,"2139":1,"2146":1,"2153":1,"2160":1,"2169":1,"2180":1,"2193":1,"2203":1,"2211":1}}],["startipaddress",{"3":{"1467":1}}],["startindex",{"3":{"1324":1}}],["starting",{"0":{"2016":1},"3":{"59":1,"256":1,"529":1,"674":6,"749":1,"1067":1,"1124":1,"1229":1,"1247":2,"1263":1,"1270":1,"1286":1,"1293":1,"1300":1,"1301":4,"1311":1,"1320":1,"1323":1,"1324":7,"1326":1,"1327":1,"1339":4,"1342":1,"1350":3,"1359":3,"1380":1,"1390":1,"1395":7,"1396":2,"1402":1,"1415":2,"1417":1,"1436":5,"1438":1,"1441":3,"1449":1,"1488":1,"1492":1,"1537":1,"1646":1,"1658":1,"1727":1,"1781":1,"1801":1,"1821":1,"1825":1,"2000":1,"2028":1,"2087":1,"2098":1,"2156":1}}],["startlocal",{"3":{"1350":1}}],["startutc",{"3":{"1350":2,"1395":1,"1396":1}}],["startuptext",{"3":{"1416":3}}],["startupresources",{"3":{"1416":2}}],["startupbudget",{"3":{"1069":1}}],["startupdelay",{"3":{"905":1,"1259":2,"1275":1,"1286":5,"1317":1,"1323":3}}],["startup",{"0":{"1328":1,"1448":1},"1":{"232":1,"233":1,"234":1,"235":1,"236":1,"237":1,"238":1,"239":1,"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"787":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"794":1,"795":1},"3":{"0":16,"15":1,"24":1,"31":3,"33":1,"34":1,"55":1,"61":1,"72":2,"91":1,"92":1,"93":1,"94":2,"99":2,"103":2,"122":2,"146":1,"147":1,"148":1,"150":1,"170":4,"175":1,"178":3,"179":2,"181":1,"193":2,"199":1,"200":1,"201":1,"212":1,"219":1,"220":2,"232":1,"235":1,"237":1,"243":3,"245":1,"255":1,"256":4,"258":1,"259":1,"265":4,"288":1,"290":2,"291":3,"292":1,"293":1,"295":3,"296":2,"310":1,"350":1,"387":1,"401":1,"406":1,"418":2,"423":1,"424":1,"448":4,"453":1,"459":4,"464":3,"501":1,"521":1,"536":1,"563":1,"564":1,"567":1,"568":1,"583":6,"585":1,"587":1,"599":3,"601":2,"603":2,"633":1,"640":2,"665":1,"666":1,"667":2,"674":5,"675":1,"678":1,"684":1,"698":2,"700":1,"702":1,"709":1,"711":1,"727":1,"732":1,"747":1,"749":7,"751":3,"756":3,"757":2,"762":1,"774":2,"776":3,"787":1,"790":2,"792":3,"794":1,"795":1,"821":1,"827":3,"830":1,"838":1,"846":1,"875":1,"905":1,"907":1,"913":1,"918":1,"929":1,"931":3,"932":2,"933":3,"934":1,"980":8,"1006":2,"1011":1,"1012":1,"1018":1,"1034":1,"1050":1,"1066":4,"1067":2,"1068":4,"1069":1,"1071":1,"1074":1,"1089":2,"1091":2,"1093":1,"1104":1,"1107":1,"1108":7,"1109":1,"1112":1,"1124":3,"1125":1,"1150":3,"1174":1,"1176":1,"1177":1,"1180":1,"1186":1,"1189":1,"1192":1,"1202":1,"1203":20,"1207":88,"1208":15,"1212":3,"1213":1,"1222":1,"1229":2,"1237":1,"1247":5,"1248":1,"1254":1,"1257":2,"1259":10,"1270":1,"1272":1,"1275":1,"1279":1,"1280":1,"1283":1,"1286":46,"1288":3,"1297":1,"1300":19,"1301":1,"1309":8,"1311":121,"1312":2,"1315":5,"1316":2,"1317":2,"1320":3,"1323":38,"1324":32,"1325":1,"1328":5,"1332":2,"1333":1,"1334":1,"1335":4,"1336":1,"1338":1,"1339":43,"1359":2,"1364":1,"1369":6,"1378":1,"1379":1,"1380":7,"1395":4,"1396":10,"1406":1,"1413":1,"1415":17,"1416":6,"1417":16,"1418":1,"1419":1,"1420":1,"1427":11,"1430":2,"1436":18,"1438":22,"1439":1,"1441":10,"1442":3,"1443":3,"1444":1,"1446":1,"1447":1,"1450":1,"1455":6,"1456":3,"1460":1,"1461":1,"1467":19,"1469":2,"1476":1,"1477":1,"1491":1,"1496":6,"1500":1,"1526":3,"1550":1,"1554":1,"1566":1,"1577":6,"1586":2,"1614":1,"1619":1,"1641":1,"1652":1,"1653":1,"1663":1,"1664":3,"1665":3,"1667":1,"1670":4,"1684":2,"1689":1,"1700":1,"1706":1,"1707":2,"1718":1,"1719":3,"1721":1,"1722":1,"1724":2,"1727":1,"1728":1,"1748":1,"1751":1,"1764":1,"1765":1,"1767":1,"1772":1,"1777":1,"1790":1,"1792":1,"1824":1,"1825":1,"1826":1,"1827":1,"1842":1,"1849":1,"1856":1,"1857":1,"1862":1,"1881":3,"1882":1,"1885":5,"1886":1,"1889":1,"1898":1,"1904":1,"1908":1,"1910":1,"1922":1,"1923":1,"1956":2,"1959":1,"1964":1,"1970":1,"1971":1,"1975":2,"1982":2,"1984":1,"1994":1,"2000":2,"2001":1,"2004":1,"2006":1,"2007":1,"2009":1,"2012":1,"2014":1,"2022":1,"2027":2,"2030":2,"2056":3,"2066":1,"2083":1,"2127":1,"2131":1,"2132":2,"2150":1,"2167":1,"2169":1,"2188":1,"2232":5}}],["startdatefunc",{"3":{"1359":2}}],["startdateselector",{"3":{"1359":2}}],["startdate",{"2":{"1630":1},"3":{"1348":1,"1350":8,"1353":1,"1359":9,"1369":3,"1375":1,"1395":9,"1396":2,"1630":4,"1631":3,"1635":2,"1640":2}}],["starttimefunc",{"3":{"1359":3}}],["starttimeselector",{"3":{"1359":3}}],["starttimestamp",{"3":{"1270":1}}],["starttime",{"3":{"1342":1,"1350":4,"1359":4,"1362":1,"1369":4,"1395":6}}],["startaddingitem",{"3":{"1395":2}}],["startactivity",{"3":{"1339":1,"2157":1}}],["startasync",{"2":{"135":1,"1613":1,"1619":1},"3":{"135":1,"200":1,"1069":1,"1259":3,"1286":1,"1323":1,"1324":6,"1436":4,"1611":1,"1613":1,"1619":1}}],["startcoreasync",{"3":{"1324":3}}],["starter",{"3":{"2239":1}}],["startenrollmentasync",{"3":{"1293":1,"1300":2}}],["startedhost",{"3":{"1436":3,"1488":1}}],["starteditingitem",{"3":{"1395":2}}],["starteditingprofile",{"3":{"1395":1}}],["startediting",{"3":{"1395":22}}],["startedat",{"3":{"1323":2,"1324":1}}],["started",{"0":{"1661":1,"2210":1},"1":{"1692":1,"1693":1,"1694":1,"1695":1,"1696":1,"1697":1,"1698":1,"1699":1,"1700":1,"1701":1,"1702":1,"1703":1,"1704":1,"1705":1},"3":{"0":2,"24":1,"99":1,"170":1,"234":1,"348":1,"353":1,"397":4,"451":1,"490":1,"491":1,"492":1,"493":1,"495":1,"507":1,"513":1,"517":1,"527":1,"528":1,"572":1,"632":3,"640":1,"673":1,"706":2,"711":1,"799":1,"868":1,"869":1,"889":1,"938":1,"1005":1,"1050":1,"1067":2,"1190":1,"1194":1,"1251":1,"1259":1,"1270":2,"1286":1,"1300":3,"1311":2,"1324":14,"1328":1,"1333":1,"1339":7,"1359":1,"1395":9,"1396":3,"1409":1,"1417":4,"1427":1,"1429":1,"1430":2,"1436":8,"1438":1,"1441":2,"1444":1,"1467":3,"1488":1,"1489":1,"1526":1,"1535":1,"1577":7,"1600":1,"1602":1,"1606":1,"1646":1,"1658":1,"1661":1,"1669":1,"1673":1,"1674":1,"1681":1,"1689":2,"1691":1,"1692":1,"1717":1,"1718":1,"1725":1,"1726":1,"1730":1,"1740":1,"1779":1,"1948":1,"1950":2,"1975":1,"1976":1,"2012":1,"2041":1,"2055":1,"2056":2,"2098":2,"2157":1,"2215":1,"2226":1,"2228":1,"2232":1,"2234":2,"2236":1}}],["startobject",{"3":{"1229":2}}],["startoutboxactivity",{"3":{"397":1,"1259":1}}],["startscanningasync",{"3":{"1396":1}}],["startsattime",{"3":{"1395":1}}],["startsatdate",{"3":{"1395":1}}],["startsatlocal",{"3":{"1350":1,"1396":1,"1416":2}}],["startsat",{"2":{"1342":1},"3":{"1342":1,"1350":5,"1352":2,"1359":19,"1362":1,"1369":5,"1380":2,"1395":13,"1396":4,"1526":1,"1534":1,"1630":2,"1631":9,"1635":2,"1639":1,"1640":3,"1814":1}}],["startsatutc",{"3":{"1300":2,"1350":1,"1359":1,"1396":4}}],["startsync",{"3":{"1324":2}}],["startswithscheme",{"3":{"1417":2}}],["startswithsegments",{"3":{"1300":1,"1311":1,"1339":3}}],["startswith",{"3":{"1247":1,"1301":1,"1339":1,"1467":1,"1640":1}}],["starts",{"3":{"0":5,"104":1,"148":1,"195":1,"234":1,"235":2,"238":1,"241":1,"350":2,"395":1,"400":1,"402":1,"409":1,"413":1,"452":1,"518":1,"528":1,"545":1,"551":1,"556":1,"632":1,"640":1,"641":1,"675":1,"705":1,"733":1,"759":1,"762":1,"766":1,"776":1,"782":1,"792":1,"810":1,"827":1,"861":1,"875":1,"907":1,"914":1,"932":1,"965":1,"988":1,"1017":1,"1018":2,"1019":2,"1069":2,"1074":1,"1100":1,"1168":1,"1212":1,"1241":2,"1247":1,"1249":1,"1259":2,"1270":3,"1273":1,"1285":1,"1286":5,"1290":2,"1293":1,"1298":1,"1300":8,"1301":2,"1310":1,"1311":3,"1318":1,"1323":4,"1324":8,"1327":1,"1328":2,"1334":1,"1339":14,"1350":1,"1359":9,"1366":1,"1369":2,"1376":1,"1380":2,"1383":1,"1387":1,"1390":1,"1395":17,"1396":11,"1402":2,"1414":1,"1415":3,"1416":3,"1417":11,"1422":1,"1427":3,"1430":1,"1436":23,"1438":2,"1441":1,"1443":1,"1444":1,"1445":1,"1449":1,"1450":1,"1453":1,"1455":1,"1475":1,"1476":1,"1482":1,"1488":1,"1489":1,"1490":4,"1491":3,"1630":1,"1632":1,"1640":1,"1648":1,"1651":2,"1721":1,"1821":1,"1840":2,"1866":1,"1927":1,"1929":1,"1945":1,"1948":1,"1951":1,"1968":1,"1977":1,"2004":1,"2040":1,"2056":1,"2067":1,"2069":1,"2156":1,"2227":1}}],["start",{"0":{"1334":1,"1682":1,"1693":1,"1723":1,"2205":1,"2245":1},"1":{"232":1,"233":1,"234":1,"235":1,"236":1,"237":1,"238":1,"239":1},"2":{"1606":1,"1740":1},"3":{"0":3,"1":1,"24":1,"33":1,"99":1,"101":1,"135":1,"170":1,"195":1,"232":1,"236":3,"239":1,"256":1,"395":1,"427":1,"452":1,"486":1,"517":1,"539":1,"673":1,"675":2,"676":1,"698":2,"707":1,"709":2,"768":1,"795":1,"808":1,"818":1,"819":1,"820":1,"837":1,"846":1,"867":1,"869":1,"872":1,"875":1,"905":1,"918":1,"932":1,"1025":1,"1026":1,"1070":1,"1091":2,"1093":1,"1096":1,"1125":1,"1133":1,"1144":1,"1184":1,"1194":1,"1210":1,"1212":2,"1234":2,"1237":9,"1238":1,"1247":2,"1269":1,"1270":6,"1286":2,"1300":8,"1311":11,"1317":2,"1320":1,"1323":16,"1324":30,"1327":1,"1328":4,"1333":1,"1339":15,"1344":1,"1348":1,"1350":14,"1352":1,"1356":2,"1359":33,"1364":2,"1369":4,"1379":1,"1380":6,"1392":1,"1395":31,"1396":20,"1402":4,"1415":4,"1416":13,"1417":13,"1430":1,"1436":13,"1438":3,"1441":1,"1443":5,"1444":2,"1449":3,"1453":1,"1454":1,"1456":5,"1467":4,"1475":1,"1477":1,"1488":1,"1489":1,"1490":3,"1496":2,"1577":2,"1606":2,"1630":3,"1631":2,"1635":2,"1650":1,"1651":1,"1654":2,"1655":1,"1669":1,"1671":1,"1675":1,"1707":1,"1718":1,"1724":2,"1740":2,"1751":1,"1764":1,"1765":1,"1767":2,"1768":1,"1772":1,"1814":1,"1818":1,"1843":1,"1860":1,"1913":1,"1947":1,"1958":1,"1960":1,"1962":1,"2003":1,"2007":1,"2008":1,"2010":1,"2012":2,"2013":1,"2015":1,"2055":1,"2065":1,"2090":1,"2097":1,"2104":1,"2121":1,"2157":1,"2178":1,"2197":1,"2204":2,"2211":1,"2233":1,"2236":1}}],["staging",{"3":{"201":1,"543":1,"545":1,"600":1,"631":2,"633":4,"635":1,"636":2,"1034":1,"1258":1,"1259":7,"1286":3,"1290":1,"1311":1,"1324":1,"1441":1,"1458":1,"1467":1,"1477":1,"1685":1,"1686":1,"2107":1}}],["stagefileasync",{"3":{"1324":1}}],["stage",{"2":{"636":1},"3":{"0":5,"157":1,"160":1,"161":1,"490":1,"491":1,"492":1,"493":1,"495":1,"543":2,"545":1,"552":1,"599":1,"600":1,"631":1,"633":6,"635":1,"636":2,"757":1,"790":1,"867":2,"868":2,"869":8,"871":3,"873":2,"876":1,"877":1,"1034":2,"1037":1,"1212":3,"1237":1,"1247":3,"1259":3,"1270":5,"1271":4,"1286":1,"1300":4,"1311":4,"1323":1,"1324":1,"1339":1,"1359":7,"1395":3,"1402":2,"1415":6,"1427":1,"1436":6,"1438":1,"1445":12,"1450":1,"1455":3,"1467":2,"1477":5,"1482":1,"1496":1,"1591":1,"1764":1,"1908":2,"2111":1,"2115":1}}],["stages",{"3":{"0":1,"24":1,"201":1,"599":1,"1074":1,"1258":1,"1259":7,"1270":1,"1286":3,"1300":4,"1311":2,"1323":1,"1324":2,"1396":1,"1402":1,"1436":4,"1445":1,"1455":1,"1467":1,"1477":3,"1577":1,"1908":1,"1910":1}}],["staged",{"0":{"1477":1},"3":{"0":4,"21":1,"24":1,"193":1,"195":1,"201":3,"202":1,"384":1,"543":2,"598":1,"599":3,"601":1,"631":2,"633":3,"782":1,"905":1,"1212":2,"1258":1,"1259":11,"1286":3,"1300":1,"1323":2,"1395":1,"1417":1,"1436":12,"1441":1,"1466":1,"1467":3,"1469":1,"1471":1,"1477":2,"1483":1,"1490":1,"1500":2,"1526":1,"1577":1,"1646":1,"1691":1,"1701":1,"1705":1,"1725":1,"1731":2,"1781":1,"1910":1,"2089":1,"2232":1}}],["stanza",{"3":{"1464":1}}],["stance",{"3":{"39":1,"45":1,"1176":1,"1286":1,"1300":1,"1324":1,"1380":1,"1396":2,"1416":1,"1436":5,"1596":1,"1598":1}}],["standout",{"3":{"2053":1}}],["standalone",{"3":{"350":1,"396":1,"609":1,"631":1,"1271":1,"1309":2,"1323":1,"1324":1,"1341":1,"1350":3,"1359":3,"1380":1,"1395":3,"1396":1,"1402":2,"1415":3,"1432":1,"1436":3,"1441":2,"1443":1,"1467":2,"1489":1,"1611":1,"1630":2,"1632":1,"1635":1,"1638":5,"1639":2,"1648":1}}],["standards",{"3":{"1311":1,"2213":1,"2218":1}}],["standardized",{"3":{"608":1,"826":1,"1218":1,"1229":2,"1259":1,"1271":1,"1311":1,"1526":1,"1546":1}}],["standardizes",{"3":{"340":1,"536":1,"901":1,"1436":1,"1665":1,"1928":1,"2131":1}}],["standardize",{"3":{"300":1,"397":1,"448":1,"1237":1}}],["standard",{"0":{"2030":1},"3":{"0":6,"53":1,"62":1,"66":1,"67":1,"68":1,"70":1,"72":2,"74":1,"100":2,"109":1,"200":1,"265":2,"341":1,"350":1,"407":1,"481":1,"483":1,"497":1,"640":3,"665":1,"743":1,"764":1,"766":4,"768":1,"769":2,"799":1,"819":1,"822":1,"833":1,"846":1,"880":1,"882":1,"883":1,"938":1,"939":1,"1043":1,"1125":1,"1126":1,"1211":1,"1212":2,"1229":4,"1270":10,"1286":6,"1290":1,"1296":1,"1300":13,"1309":3,"1311":11,"1312":4,"1316":1,"1323":3,"1324":5,"1329":1,"1339":17,"1350":4,"1358":1,"1359":8,"1365":1,"1368":2,"1369":1,"1379":1,"1380":2,"1395":12,"1396":7,"1402":1,"1404":1,"1405":1,"1410":1,"1415":5,"1417":2,"1421":1,"1425":1,"1427":2,"1431":1,"1435":1,"1436":3,"1438":1,"1443":2,"1446":1,"1455":2,"1456":1,"1457":1,"1459":1,"1467":8,"1474":1,"1476":3,"1488":1,"1489":1,"1503":1,"1526":3,"1534":1,"1537":1,"1591":3,"1600":2,"1631":2,"1632":5,"1639":2,"1640":3,"1641":1,"1647":1,"1653":1,"1656":1,"1663":1,"1668":1,"1670":1,"1693":1,"1707":1,"1720":1,"1781":1,"1895":1,"1899":1,"1909":1,"1926":1,"1930":1,"1975":1,"1980":1,"1982":1,"2011":1,"2013":1,"2029":1,"2031":1,"2038":1,"2057":2,"2156":1,"2177":1,"2185":1,"2203":1,"2227":1,"2232":1}}],["stand",{"3":{"73":1,"95":1,"111":1,"126":1,"258":1,"476":1,"490":1,"491":1,"492":1,"493":1,"495":1,"601":1,"1016":1,"1074":1,"1077":1,"1128":1,"1154":1,"1211":1,"1270":1,"1284":1,"1286":2,"1312":1,"1339":2,"1350":2,"1359":2,"1369":1,"1380":2,"1396":1,"1402":1,"1415":1,"1417":3,"1428":1,"1436":10,"1438":1,"1443":1,"1467":1,"1503":1,"1577":1,"1602":1,"1663":2,"1806":1,"1929":1,"1942":1,"1995":1,"2008":1}}],["standing",{"3":{"0":2,"140":1,"177":1,"474":1,"490":1,"572":1,"591":1,"745":1,"768":1,"801":1,"811":1,"812":1,"840":1,"867":1,"912":1,"1054":1,"1090":1,"1094":1,"1247":1,"1300":3,"1301":2,"1323":2,"1339":1,"1359":3,"1392":1,"1395":1,"1396":5,"1415":1,"1427":2,"1436":5,"1460":2,"1461":1,"1472":1,"1474":1,"1490":1,"1492":1,"1496":3,"1526":2,"1692":1,"1726":1,"1809":1,"1896":1,"1929":1,"1950":1,"2113":1,"2131":1}}],["standstill",{"3":{"1124":1,"1311":2,"1339":2}}],["stands",{"3":{"0":4,"20":1,"54":1,"178":1,"257":1,"259":1,"508":1,"551":1,"620":1,"640":1,"649":1,"790":1,"797":1,"803":1,"804":1,"808":1,"813":1,"814":1,"827":1,"840":1,"848":1,"877":1,"1055":1,"1075":1,"1116":1,"1142":1,"1177":1,"1286":2,"1300":3,"1309":1,"1323":2,"1324":1,"1350":1,"1359":3,"1380":1,"1395":1,"1396":2,"1415":1,"1436":7,"1496":1,"1526":1,"1534":1,"1577":1,"1591":1,"1671":1,"1786":1,"1796":1,"1933":1,"2001":1,"2048":1,"2050":1,"2094":1,"2168":1,"2204":1}}],["stalling",{"3":{"1309":1,"1312":1,"1323":1,"1413":1}}],["stall",{"3":{"1301":1,"1324":1,"1396":3,"1402":1,"1415":1,"1451":1,"1727":1,"1944":1,"2005":1,"2013":1}}],["stalled",{"3":{"759":1,"1323":1,"1396":1,"1488":1,"2193":1}}],["stalls",{"3":{"0":1,"709":1,"914":1,"1256":1,"1427":1,"1440":1,"1456":1,"1467":1,"1490":1,"1577":1,"1582":1,"1653":1,"1689":1,"1698":1,"2174":1}}],["stales",{"3":{"1922":2}}],["stalerowversionconflicttests",{"3":{"1591":1,"1600":1}}],["staler",{"3":{"1395":1}}],["staled",{"3":{"1301":1,"1912":1,"1913":1,"1918":1,"1924":1}}],["staleundecoratedallowlisttests",{"3":{"1198":1,"1199":2,"1207":1,"1436":5}}],["staleallowlisttests",{"3":{"1198":1,"1199":2,"1207":1,"1436":7,"1496":1}}],["staleness",{"3":{"189":1,"243":1,"245":2,"305":1,"390":2,"391":1,"441":1,"444":1,"674":1,"735":1,"736":1,"924":1,"1060":1,"1102":1,"1270":4,"1283":1,"1300":1,"1301":5,"1311":2,"1324":14,"1350":1,"1359":1,"1395":1,"1402":2,"1436":2,"1475":1,"1496":1,"1534":1,"1556":1,"1577":2,"1586":1,"1591":2,"1597":1,"1651":1,"1668":1,"1923":1,"2127":1,"2128":1,"2203":1}}],["stale",{"3":{"0":5,"70":1,"104":1,"128":1,"130":1,"138":2,"140":1,"141":1,"171":1,"231":1,"235":1,"243":1,"255":2,"279":1,"324":1,"340":1,"341":2,"343":1,"344":1,"345":1,"373":1,"388":1,"426":1,"512":2,"572":2,"608":1,"610":1,"626":1,"628":2,"703":1,"716":1,"720":1,"733":2,"735":1,"751":1,"759":1,"790":3,"792":1,"793":1,"810":1,"841":1,"848":1,"873":1,"876":1,"877":1,"892":1,"905":1,"906":1,"927":1,"971":1,"972":2,"986":1,"991":1,"1028":1,"1042":1,"1045":1,"1065":1,"1101":1,"1175":1,"1184":1,"1212":2,"1229":1,"1237":3,"1249":1,"1259":3,"1265":1,"1270":7,"1271":1,"1286":7,"1300":10,"1301":6,"1306":1,"1309":2,"1311":6,"1323":1,"1324":29,"1332":1,"1339":4,"1347":1,"1350":3,"1352":1,"1359":17,"1373":1,"1375":1,"1379":1,"1380":4,"1393":1,"1395":20,"1396":25,"1399":1,"1402":3,"1406":1,"1411":1,"1415":5,"1416":1,"1417":9,"1436":23,"1438":3,"1453":2,"1460":1,"1475":3,"1488":2,"1489":1,"1490":1,"1492":1,"1496":21,"1525":1,"1526":5,"1534":2,"1546":1,"1549":1,"1556":2,"1561":1,"1571":2,"1577":1,"1591":5,"1596":1,"1597":1,"1600":1,"1635":1,"1639":1,"1648":1,"1651":2,"1668":1,"1685":1,"1689":1,"1701":1,"1702":1,"1708":3,"1720":1,"1730":1,"1748":3,"1749":1,"1765":1,"1822":1,"1869":1,"1870":1,"1871":1,"1876":2,"1877":2,"1898":2,"1912":1,"1913":1,"1914":1,"1918":2,"1920":1,"1923":2,"1924":1,"1948":1,"2013":1,"2034":1,"2037":1,"2043":2,"2045":2,"2046":1,"2055":1,"2097":1,"2127":1,"2163":1,"2167":3,"2188":1,"2193":1,"2199":1,"2202":1,"2232":1}}],["stamptimeout",{"3":{"1323":4}}],["stamptestdbcontext",{"3":{"1199":2,"1207":1}}],["stamper",{"3":{"1323":1}}],["stampeding",{"3":{"1396":1,"1402":1}}],["stampedentity",{"3":{"1199":3,"1207":1}}],["stampedetestquery",{"3":{"1199":2,"1207":1}}],["stampede",{"3":{"0":1,"248":1,"508":1,"733":3,"737":1,"1192":1,"1267":3,"1270":10,"1301":9,"1323":1,"1496":1,"1668":1,"1708":1,"1917":2,"1920":1}}],["stamped",{"3":{"0":3,"26":1,"39":1,"214":1,"221":1,"345":1,"397":1,"434":1,"435":1,"500":1,"501":1,"507":1,"714":1,"715":1,"720":1,"905":1,"907":1,"1044":1,"1083":1,"1084":1,"1140":1,"1168":1,"1212":3,"1231":1,"1232":1,"1237":3,"1247":4,"1253":2,"1259":7,"1265":1,"1269":1,"1270":3,"1275":1,"1280":1,"1281":1,"1286":19,"1290":1,"1300":5,"1309":3,"1312":2,"1318":1,"1323":7,"1324":4,"1339":6,"1357":1,"1358":1,"1359":19,"1380":2,"1390":1,"1395":7,"1396":6,"1402":2,"1415":8,"1418":1,"1425":1,"1427":5,"1436":5,"1438":5,"1496":1,"1545":1,"1577":1,"1591":1,"1653":1,"1657":1,"1664":1,"1665":1,"1672":1,"1685":1,"1698":1,"1704":1,"1719":1,"1720":1,"1749":1,"1767":1,"1810":1,"1839":1,"1933":1,"1936":1,"1982":2,"1984":1,"2090":1,"2186":1,"2192":1,"2197":1,"2203":1,"2230":1}}],["stampauditfields",{"3":{"1286":2}}],["stampasync",{"3":{"1042":1,"1436":5,"2188":1}}],["stamprowversion",{"3":{"1274":1,"1286":2}}],["stamporverifyinsert",{"3":{"698":1,"1286":2}}],["stampingtransformer",{"3":{"1199":2,"1207":1}}],["stamping",{"3":{"0":1,"21":1,"26":1,"39":1,"179":1,"202":1,"350":1,"698":1,"716":2,"826":1,"840":1,"847":1,"923":1,"926":1,"1083":1,"1163":1,"1232":1,"1237":4,"1244":1,"1247":3,"1259":3,"1265":1,"1270":1,"1272":1,"1274":1,"1281":1,"1286":12,"1300":4,"1304":1,"1309":1,"1311":3,"1323":2,"1324":3,"1339":4,"1342":1,"1359":7,"1369":2,"1396":2,"1398":1,"1402":3,"1412":1,"1415":2,"1438":1,"1526":1,"1577":2,"1591":1,"1663":1,"1664":2,"1717":1,"1839":1,"1844":1,"1871":1,"1977":1,"2000":1,"2052":1,"2074":1,"2149":1,"2221":1}}],["stamp",{"0":{"2188":1},"3":{"0":4,"213":1,"214":1,"341":1,"343":1,"365":1,"397":1,"716":1,"926":2,"988":1,"996":1,"1034":1,"1035":1,"1083":1,"1084":1,"1091":1,"1160":1,"1163":1,"1174":1,"1175":1,"1231":1,"1237":1,"1247":1,"1249":2,"1253":1,"1259":8,"1265":1,"1270":7,"1286":21,"1300":7,"1309":1,"1311":2,"1318":2,"1323":9,"1324":8,"1336":1,"1339":5,"1342":1,"1350":1,"1352":2,"1356":1,"1358":5,"1359":33,"1380":1,"1382":1,"1395":4,"1396":2,"1402":2,"1415":2,"1427":4,"1431":2,"1436":14,"1438":2,"1496":1,"1524":1,"1526":1,"1531":1,"1534":3,"1577":1,"1585":1,"1679":1,"1765":1,"1838":1,"1839":3,"1948":1,"2010":1,"2064":1,"2086":1,"2142":1,"2147":1,"2153":1,"2163":1,"2176":1,"2180":1,"2191":1,"2193":2,"2203":1}}],["stampsoftdeletetransition",{"2":{"1274":1},"3":{"1274":1,"1286":2}}],["stamps",{"3":{"0":8,"27":2,"37":1,"39":1,"41":2,"109":1,"195":1,"202":1,"214":1,"246":1,"339":1,"341":1,"343":1,"359":1,"365":1,"402":1,"499":1,"574":1,"698":2,"702":2,"707":1,"714":1,"715":3,"716":2,"740":1,"827":2,"833":1,"846":1,"849":1,"861":1,"905":1,"909":1,"921":1,"995":1,"1018":1,"1033":1,"1034":1,"1042":1,"1059":2,"1081":1,"1083":3,"1118":1,"1184":1,"1212":5,"1231":1,"1232":2,"1237":7,"1247":1,"1249":1,"1252":1,"1253":1,"1255":2,"1259":5,"1270":4,"1271":2,"1273":1,"1274":3,"1275":1,"1276":1,"1278":2,"1281":1,"1286":34,"1290":1,"1300":11,"1309":2,"1310":1,"1311":3,"1312":2,"1317":1,"1323":5,"1324":14,"1326":1,"1333":1,"1336":1,"1338":1,"1339":11,"1350":3,"1359":13,"1363":1,"1366":1,"1369":1,"1373":1,"1380":1,"1389":1,"1395":1,"1396":6,"1402":3,"1410":1,"1415":4,"1417":1,"1426":1,"1427":2,"1433":1,"1436":8,"1438":1,"1441":2,"1443":2,"1447":1,"1496":2,"1585":1,"1664":1,"1670":1,"1839":1,"1844":1,"1851":1,"1876":1,"1889":1,"1948":1,"2083":1,"2091":1,"2143":1,"2148":1,"2149":2,"2153":1,"2166":1,"2186":1,"2188":1,"2197":1,"2200":1,"2208":1,"2232":1}}],["stacked",{"3":{"1304":1,"1402":1,"1524":1,"1713":1}}],["stackexchangeredis",{"2":{"1339":1},"3":{"1339":1}}],["stackexchangerediscache",{"2":{"245":1,"249":1,"253":1,"286":1,"732":1},"3":{"245":1,"249":1,"253":1,"286":1,"732":1,"1301":2}}],["stackexchange",{"2":{"234":1,"245":1,"1301":1,"1915":1,"2043":1},"3":{"234":2,"245":1,"259":2,"1213":1,"1270":3,"1286":1,"1301":6,"1311":4,"1323":3,"1332":1,"1339":6,"1442":2,"1443":1,"1489":1,"1577":1,"1915":1,"2043":1}}],["stackalloc",{"3":{"1286":1}}],["stacks",{"3":{"125":1,"881":1,"1263":1,"1270":1,"1311":1,"1368":1,"1369":1,"1417":1,"1585":1,"2220":1}}],["stacking",{"3":{"0":1,"1028":1,"1324":1,"1339":1,"1396":1,"1415":1,"1416":1,"1443":1,"1459":1}}],["stack",{"0":{"1213":1,"1511":1,"2005":1},"1":{"1210":1,"1211":1,"1212":1,"1213":1,"1214":1,"1215":1,"1216":1},"3":{"0":7,"6":1,"73":1,"115":1,"125":5,"150":1,"340":1,"387":1,"401":1,"407":1,"483":1,"618":1,"619":1,"625":1,"640":1,"641":2,"644":1,"827":1,"837":1,"860":1,"883":1,"913":1,"953":1,"1066":1,"1067":2,"1069":1,"1070":1,"1154":1,"1192":1,"1210":1,"1212":1,"1218":1,"1226":1,"1229":3,"1230":1,"1236":1,"1237":1,"1247":1,"1252":1,"1259":5,"1261":1,"1263":2,"1270":5,"1286":6,"1300":6,"1309":2,"1311":3,"1313":1,"1316":1,"1318":2,"1323":5,"1324":13,"1328":1,"1339":13,"1350":2,"1359":3,"1395":1,"1396":5,"1402":3,"1415":2,"1416":4,"1417":11,"1430":4,"1436":10,"1437":1,"1438":3,"1439":1,"1440":2,"1441":3,"1443":1,"1444":1,"1446":1,"1447":1,"1449":3,"1450":1,"1456":7,"1464":1,"1467":2,"1486":1,"1487":3,"1488":1,"1489":2,"1490":4,"1492":5,"1496":2,"1536":1,"1582":1,"1591":1,"1599":1,"1640":1,"1647":1,"1653":1,"1663":1,"1669":2,"1673":1,"1763":1,"1781":3,"1800":1,"1804":2,"1806":1,"1807":2,"1817":1,"1827":1,"1834":1,"1846":1,"1853":1,"1862":1,"1868":1,"1874":1,"1877":1,"1899":1,"1905":1,"1906":1,"1912":1,"1924":1,"1925":1,"1930":1,"1941":1,"1950":1,"1952":1,"1958":1,"1959":1,"1965":1,"1985":1,"1991":1,"1993":1,"2002":1,"2003":1,"2012":1,"2013":1,"2014":1,"2028":1,"2038":1,"2049":1,"2053":1,"2056":2,"2057":1,"2060":2,"2075":2,"2076":1,"2108":1,"2128":1,"2133":1,"2150":1,"2153":1,"2157":1,"2160":1,"2165":1,"2169":1,"2180":1,"2209":1,"2212":2,"2213":1,"2217":1,"2218":1}}],["stat",{"3":{"1396":1,"1455":1,"1526":1}}],["stats",{"3":{"1396":12,"1487":1}}],["statistics",{"3":{"1339":1,"1524":1,"1526":1,"1531":1}}],["stating",{"0":{"1201":1},"3":{"128":1,"219":1,"463":1,"819":1,"828":1,"972":1,"1012":1,"1018":1,"1082":1,"1134":1,"1248":1,"1270":2,"1286":4,"1300":2,"1311":3,"1323":1,"1324":2,"1339":3,"1350":2,"1359":6,"1362":1,"1369":1,"1395":1,"1396":4,"1417":4,"1436":10,"1459":1,"1526":1,"1810":1,"1815":1,"1816":1,"1844":1,"1881":1,"1948":1,"1956":1,"2081":1,"2137":1}}],["staticwebassets",{"3":{"1436":2}}],["statically",{"3":{"1237":1,"1339":1,"1359":1,"1396":1,"1416":1,"1436":7,"2070":1}}],["staticcsppolicyprovider",{"2":{"214":1,"2011":1,"2149":1},"3":{"214":1,"1199":2,"1203":1,"1207":1,"1336":1,"1339":8,"2011":1,"2149":1}}],["statics",{"3":{"145":1,"150":1,"413":1,"1237":1,"1270":1,"1286":1,"1311":1,"1319":1,"1323":2,"1324":3,"1415":1,"1417":1,"1436":3}}],["static",{"2":{"883":1,"982":1,"1051":1,"1162":1,"1168":1,"1196":1,"1246":1,"1319":1,"1346":1},"3":{"0":14,"10":1,"15":1,"27":1,"59":2,"122":1,"135":3,"137":1,"140":1,"178":1,"189":2,"212":1,"213":2,"214":1,"215":1,"216":2,"219":1,"220":1,"258":1,"305":1,"318":1,"343":1,"350":1,"397":1,"413":1,"549":1,"555":1,"556":2,"640":2,"642":1,"657":3,"698":1,"741":2,"744":1,"782":1,"819":2,"826":1,"881":3,"883":2,"884":1,"897":1,"963":2,"964":3,"972":2,"975":1,"979":1,"980":8,"981":1,"982":1,"1026":1,"1050":6,"1051":1,"1052":1,"1109":1,"1117":1,"1124":1,"1126":1,"1162":1,"1163":1,"1167":3,"1168":7,"1171":1,"1175":2,"1176":1,"1177":1,"1178":1,"1196":2,"1212":5,"1214":2,"1219":1,"1221":1,"1228":1,"1229":9,"1234":2,"1235":2,"1237":33,"1239":3,"1241":3,"1243":1,"1246":2,"1247":43,"1259":21,"1266":1,"1268":3,"1270":39,"1271":11,"1274":1,"1275":1,"1280":2,"1286":107,"1297":1,"1300":75,"1301":14,"1307":1,"1309":35,"1310":7,"1311":59,"1312":6,"1316":1,"1319":3,"1320":1,"1323":75,"1324":106,"1326":1,"1330":1,"1336":1,"1338":1,"1339":82,"1340":1,"1341":1,"1343":1,"1344":1,"1346":1,"1350":52,"1352":1,"1353":2,"1354":1,"1359":72,"1366":2,"1368":1,"1369":11,"1380":17,"1383":1,"1393":2,"1394":1,"1395":53,"1396":82,"1402":17,"1405":2,"1415":46,"1416":13,"1417":26,"1422":2,"1423":1,"1426":1,"1427":15,"1433":1,"1434":1,"1436":138,"1438":2,"1441":1,"1443":2,"1447":1,"1453":1,"1455":2,"1460":1,"1465":1,"1468":1,"1469":1,"1488":3,"1489":3,"1496":4,"1510":1,"1525":1,"1526":3,"1556":2,"1572":1,"1577":1,"1591":2,"1611":1,"1631":1,"1651":1,"1653":1,"1667":1,"1671":1,"1698":2,"1702":1,"1805":1,"1810":5,"1811":2,"1812":1,"1831":1,"1856":1,"1868":1,"1956":1,"1959":1,"1975":1,"1980":1,"1989":1,"1994":1,"2023":1,"2036":1,"2075":1,"2076":1,"2081":1,"2082":1,"2083":1,"2090":1,"2119":1,"2126":1,"2147":1,"2148":1,"2149":2,"2150":2,"2151":2,"2152":1,"2153":4,"2175":1,"2219":1}}],["statequery",{"3":{"1417":1}}],["statehaschanged",{"2":{"1556":1},"3":{"1324":3,"1395":7,"1396":4,"1401":1,"1402":1,"1526":1,"1556":2,"1577":1,"1591":2}}],["state=",{"3":{"1311":1,"1417":2}}],["statetable",{"3":{"1286":1}}],["staterules",{"3":{"1199":3,"1203":1,"1207":1,"1271":8}}],["statemaxlength",{"3":{"1237":1,"1271":2}}],["statemanagementconventiontests",{"2":{"1525":1,"1591":1},"3":{"881":4,"884":1,"1199":2,"1207":4,"1324":1,"1436":17,"1489":2,"1525":1,"1526":2,"1535":1,"1591":2,"1600":1}}],["statemanagementconventiontestsbase",{"2":{"1526":1},"3":{"881":1,"884":1,"1199":3,"1207":2,"1436":17,"1526":2}}],["statements",{"3":{"27":1,"63":1,"82":1,"161":1,"171":1,"181":1,"268":1,"285":1,"345":1,"375":1,"409":1,"486":1,"502":1,"514":1,"526":1,"531":1,"534":1,"540":2,"578":1,"586":1,"604":1,"607":1,"660":1,"713":1,"718":1,"744":1,"761":1,"777":1,"814":1,"825":1,"833":2,"841":1,"857":1,"877":1,"900":1,"917":1,"927":1,"999":1,"1029":1,"1045":1,"1055":1,"1074":1,"1103":1,"1271":1,"1286":2,"1300":1,"1311":1,"1350":1,"1352":1,"1359":9,"1396":6,"1467":1,"1538":1}}],["statement",{"0":{"1246":1},"3":{"0":2,"135":1,"136":1,"140":1,"150":1,"200":1,"220":1,"341":2,"395":1,"423":1,"438":1,"443":1,"478":1,"488":1,"489":1,"518":1,"522":1,"523":1,"524":3,"563":1,"566":1,"587":1,"590":1,"607":2,"633":1,"677":1,"707":1,"716":1,"719":4,"827":1,"838":1,"973":1,"974":1,"996":1,"1005":1,"1007":1,"1049":1,"1100":1,"1114":1,"1120":1,"1123":1,"1132":2,"1133":7,"1134":2,"1135":2,"1141":1,"1175":2,"1190":1,"1212":1,"1235":1,"1237":1,"1242":1,"1243":1,"1246":1,"1247":2,"1252":1,"1259":3,"1270":3,"1271":2,"1275":1,"1278":1,"1280":1,"1286":25,"1300":3,"1301":1,"1309":3,"1310":1,"1323":3,"1324":5,"1339":3,"1348":1,"1350":5,"1359":11,"1369":1,"1396":6,"1402":1,"1415":1,"1416":1,"1417":1,"1423":1,"1431":1,"1436":15,"1438":1,"1447":1,"1451":1,"1489":4,"1526":1,"1689":1,"1699":1,"1727":1,"1749":1,"1795":1,"1865":1,"1871":1,"1872":1,"1876":1,"2031":1,"2033":1,"2043":1,"2089":1,"2126":1,"2203":1}}],["statecontainer",{"3":{"881":1,"884":1,"1436":1,"1526":1}}],["stateful",{"3":{"178":1,"458":1,"881":1,"1020":1,"1186":1,"1187":1,"1300":1,"1324":1,"1396":3,"1415":1,"1417":2,"1436":5,"1467":3,"1489":1,"1526":1,"1566":1,"1833":1}}],["stated",{"3":{"0":2,"24":1,"27":1,"67":1,"100":1,"109":1,"111":1,"115":1,"125":1,"126":1,"135":3,"160":1,"193":2,"200":1,"202":1,"223":1,"243":1,"342":1,"463":1,"477":1,"518":1,"522":1,"536":1,"543":1,"545":1,"556":1,"559":1,"579":1,"602":2,"628":1,"631":2,"632":1,"658":1,"703":1,"723":1,"725":1,"751":1,"766":1,"769":1,"792":1,"797":1,"799":2,"809":1,"819":1,"826":1,"827":3,"838":4,"861":1,"868":1,"869":1,"876":2,"883":1,"888":1,"906":1,"914":1,"931":1,"946":2,"963":1,"968":1,"972":1,"979":2,"988":1,"996":1,"1012":2,"1019":1,"1021":1,"1075":1,"1083":1,"1100":2,"1108":1,"1116":1,"1124":1,"1133":1,"1134":1,"1168":1,"1193":1,"1212":1,"1225":1,"1228":1,"1229":1,"1236":1,"1237":3,"1247":3,"1259":1,"1270":8,"1273":1,"1286":19,"1291":1,"1292":1,"1293":1,"1294":1,"1298":1,"1300":11,"1304":1,"1309":8,"1311":11,"1312":3,"1318":1,"1323":10,"1324":10,"1330":2,"1332":1,"1333":1,"1336":1,"1337":1,"1339":8,"1350":5,"1359":28,"1369":1,"1380":3,"1384":1,"1389":1,"1392":1,"1395":5,"1396":27,"1399":1,"1402":9,"1405":1,"1415":7,"1416":1,"1417":3,"1424":1,"1425":1,"1436":25,"1441":2,"1445":1,"1455":1,"1459":1,"1467":3,"1469":1,"1470":1,"1474":1,"1486":1,"1489":1,"1496":3,"1526":1,"1531":1,"1541":1,"1545":2,"1547":1,"1548":1,"1558":1,"1572":1,"1577":1,"1591":2,"1666":1,"1673":1,"1685":1,"1709":1,"1789":1,"1799":1,"1874":3,"1877":1,"1958":1,"2030":1,"2059":1,"2168":1,"2174":1,"2182":1,"2232":1}}],["statelessness",{"3":{"1323":1,"1427":1}}],["stateless",{"3":{"0":5,"310":1,"359":1,"365":1,"458":2,"460":4,"462":1,"498":2,"499":2,"500":1,"501":2,"503":2,"910":1,"946":1,"1059":1,"1176":1,"1184":1,"1187":1,"1212":3,"1259":1,"1272":1,"1280":1,"1286":6,"1293":2,"1300":7,"1309":1,"1311":2,"1323":3,"1339":2,"1350":1,"1359":4,"1395":4,"1396":1,"1402":1,"1417":6,"1441":1,"1539":1,"1549":1,"1577":1,"1591":1,"1980":2,"1981":1,"1982":1,"1984":1,"1985":3,"2066":2,"2142":1,"2198":1,"2232":2}}],["state",{"0":{"100":1,"720":1,"813":1,"1556":1,"1633":1,"1766":1,"1769":1,"1777":1,"2076":1},"1":{"779":1,"780":1,"781":1,"782":1,"783":1,"784":1,"785":1,"786":1},"2":{"426":1,"784":1,"1976":1,"2032":2},"3":{"0":23,"17":1,"27":3,"39":1,"42":1,"74":1,"93":1,"109":1,"120":1,"131":1,"137":1,"141":1,"152":1,"159":1,"177":1,"178":1,"181":1,"186":1,"188":1,"195":1,"201":1,"208":1,"227":1,"228":1,"243":2,"249":1,"252":1,"254":1,"256":1,"257":1,"258":1,"259":1,"265":1,"266":1,"267":1,"272":1,"279":1,"281":1,"283":1,"284":1,"285":1,"286":1,"302":1,"324":1,"341":1,"342":1,"345":1,"348":1,"350":1,"353":1,"363":1,"375":1,"382":2,"384":2,"389":1,"390":2,"397":1,"399":1,"413":1,"423":1,"426":1,"429":1,"434":1,"497":3,"499":2,"501":1,"506":1,"507":4,"508":1,"513":1,"518":1,"524":1,"534":1,"536":1,"537":5,"540":2,"547":1,"549":1,"550":1,"552":1,"554":1,"557":1,"566":1,"572":1,"578":1,"599":1,"609":1,"610":1,"611":2,"613":1,"618":3,"622":1,"651":1,"664":3,"667":1,"670":1,"698":2,"699":1,"700":1,"707":1,"709":1,"736":3,"758":1,"761":1,"768":1,"779":1,"782":9,"783":1,"784":5,"785":1,"793":1,"794":1,"808":2,"809":6,"810":10,"811":4,"812":2,"813":6,"814":1,"815":2,"819":2,"821":1,"833":1,"836":1,"838":1,"841":1,"855":3,"856":1,"868":1,"871":1,"876":2,"879":1,"881":7,"882":3,"883":1,"884":1,"896":1,"905":1,"909":1,"923":1,"926":7,"927":1,"946":1,"954":3,"959":1,"960":1,"962":1,"963":1,"972":1,"976":1,"986":1,"988":2,"989":3,"994":1,"996":2,"1014":1,"1021":2,"1030":1,"1050":2,"1052":1,"1065":1,"1067":2,"1068":1,"1081":1,"1089":2,"1095":1,"1100":1,"1116":1,"1117":1,"1119":1,"1123":1,"1124":2,"1125":2,"1139":1,"1140":5,"1141":1,"1142":1,"1145":1,"1147":1,"1150":5,"1151":1,"1152":4,"1154":2,"1155":2,"1161":3,"1162":2,"1167":1,"1169":3,"1171":1,"1175":1,"1184":1,"1199":64,"1207":1,"1212":7,"1216":1,"1226":1,"1227":1,"1229":5,"1230":1,"1231":2,"1232":1,"1233":1,"1237":14,"1240":1,"1246":1,"1247":9,"1249":1,"1252":1,"1259":22,"1261":1,"1263":2,"1264":1,"1265":4,"1267":1,"1269":1,"1270":25,"1271":10,"1274":4,"1275":2,"1278":2,"1286":60,"1290":1,"1293":3,"1300":39,"1301":10,"1303":1,"1309":20,"1311":24,"1317":1,"1318":1,"1322":1,"1323":39,"1324":206,"1327":1,"1334":2,"1339":18,"1342":1,"1343":2,"1345":2,"1347":1,"1350":57,"1352":1,"1354":1,"1355":1,"1357":1,"1359":71,"1366":1,"1369":4,"1378":1,"1380":17,"1383":4,"1384":2,"1385":1,"1390":2,"1391":5,"1395":204,"1396":121,"1397":3,"1398":1,"1402":82,"1405":2,"1409":3,"1411":1,"1414":2,"1415":41,"1416":6,"1417":87,"1427":3,"1431":2,"1432":2,"1433":1,"1434":1,"1436":116,"1438":13,"1441":2,"1447":2,"1451":1,"1453":1,"1454":2,"1455":4,"1459":1,"1460":1,"1467":1,"1470":1,"1472":1,"1473":1,"1474":1,"1475":2,"1478":1,"1481":1,"1484":1,"1486":1,"1488":2,"1489":1,"1490":1,"1491":3,"1496":4,"1499":1,"1525":3,"1526":8,"1535":2,"1541":1,"1542":1,"1547":1,"1549":2,"1555":1,"1556":10,"1561":3,"1562":3,"1563":1,"1572":2,"1577":8,"1586":2,"1588":1,"1591":9,"1597":1,"1599":1,"1600":3,"1607":2,"1608":3,"1631":3,"1632":2,"1633":3,"1638":1,"1641":1,"1643":5,"1645":1,"1651":3,"1652":1,"1654":1,"1660":2,"1665":1,"1669":1,"1671":2,"1677":1,"1686":1,"1701":1,"1709":1,"1715":2,"1741":2,"1742":1,"1747":5,"1748":6,"1749":7,"1750":3,"1755":1,"1764":3,"1765":5,"1769":9,"1773":3,"1775":1,"1776":2,"1796":1,"1805":1,"1808":1,"1809":2,"1810":1,"1820":1,"1822":2,"1832":1,"1840":3,"1844":1,"1846":1,"1849":1,"1851":1,"1852":1,"1862":1,"1871":1,"1876":1,"1877":1,"1883":1,"1890":1,"1916":1,"1918":3,"1920":1,"1937":1,"1940":1,"1948":2,"1949":3,"1950":2,"1971":2,"1972":1,"1975":2,"1976":1,"1979":1,"1984":1,"1995":1,"2000":2,"2001":1,"2002":3,"2013":1,"2032":2,"2060":1,"2063":1,"2065":1,"2070":2,"2075":1,"2076":3,"2078":1,"2079":1,"2080":2,"2081":1,"2082":1,"2086":1,"2090":1,"2091":3,"2100":1,"2118":2,"2119":1,"2123":1,"2154":1,"2156":1,"2159":1,"2163":1,"2167":4,"2168":6,"2173":1,"2182":1,"2185":1,"2186":1,"2194":1,"2230":1,"2232":5}}],["stateservice",{"3":{"881":1,"884":1,"1436":1,"1526":1,"1591":1}}],["states",{"3":{"0":6,"68":1,"85":1,"91":1,"98":1,"115":1,"130":1,"136":1,"138":1,"141":1,"156":1,"171":1,"195":1,"200":2,"268":1,"301":1,"318":2,"322":1,"341":1,"353":1,"378":1,"392":1,"393":1,"459":1,"465":1,"490":1,"524":1,"529":1,"544":1,"549":1,"555":3,"556":1,"572":1,"582":1,"584":1,"591":1,"609":1,"612":1,"618":4,"627":1,"630":1,"642":1,"643":1,"644":1,"649":1,"650":1,"756":1,"766":1,"782":1,"789":1,"790":1,"794":1,"797":1,"809":1,"827":1,"833":1,"836":1,"838":3,"849":1,"867":1,"869":1,"881":1,"905":1,"914":1,"922":2,"941":1,"946":1,"963":2,"964":1,"967":1,"972":1,"1003":1,"1004":1,"1017":1,"1018":1,"1066":1,"1067":1,"1089":1,"1091":1,"1108":1,"1128":1,"1143":1,"1160":1,"1167":1,"1212":1,"1229":6,"1237":13,"1247":15,"1259":15,"1270":20,"1271":4,"1273":1,"1275":2,"1277":1,"1278":1,"1280":1,"1284":1,"1286":56,"1297":1,"1300":54,"1301":5,"1309":16,"1310":1,"1311":28,"1312":2,"1323":19,"1324":62,"1333":1,"1338":1,"1339":45,"1343":1,"1350":23,"1359":111,"1362":3,"1365":1,"1369":3,"1375":1,"1380":12,"1389":1,"1395":55,"1396":82,"1400":1,"1402":31,"1407":1,"1414":1,"1415":39,"1416":5,"1417":12,"1423":1,"1430":1,"1436":81,"1438":3,"1440":1,"1447":2,"1449":1,"1453":1,"1454":2,"1455":9,"1457":1,"1459":1,"1465":2,"1467":11,"1473":1,"1475":1,"1483":1,"1486":1,"1488":1,"1489":2,"1491":2,"1492":2,"1496":1,"1525":1,"1526":1,"1545":1,"1557":1,"1558":1,"1560":1,"1561":2,"1562":1,"1565":2,"1577":5,"1585":2,"1591":1,"1596":2,"1633":1,"1634":1,"1639":3,"1643":2,"1645":2,"1651":1,"1653":2,"1656":2,"1669":1,"1686":1,"1708":1,"1720":1,"1749":1,"1766":6,"1767":1,"1769":1,"1771":1,"1799":1,"1869":1,"1871":2,"1874":1,"1876":1,"1877":1,"1917":1,"1960":1,"1961":1,"1964":1,"1970":1,"2024":1,"2028":1,"2043":2,"2056":1,"2068":1,"2112":1,"2165":1,"2168":1,"2183":1,"2189":1,"2198":1,"2232":2}}],["status202accepted",{"3":{"1380":1}}],["status201created",{"3":{"1311":1}}],["statusmaxlength",{"3":{"1350":2,"1359":2,"1369":1}}],["statusineligible",{"3":{"1344":2,"1350":1}}],["status500internalservererror",{"3":{"1311":1}}],["status429toomanyrequests",{"3":{"1339":1}}],["status400badrequest",{"3":{"1311":3}}],["status409conflict",{"3":{"1311":1}}],["status499clientclosedrequest",{"3":{"1311":2}}],["statuserrorcodeprefix",{"3":{"1300":1}}],["statuses",{"3":{"318":1,"326":1,"1311":1,"1350":1,"1359":7,"1395":3,"1396":1,"1402":1,"1630":2,"1631":1,"1632":1,"1633":2,"1635":1,"1639":1}}],["statuscriteria",{"2":{"1239":1,"1359":1},"3":{"1239":1,"1247":1,"1359":7}}],["statuscodes",{"3":{"1311":8,"1339":1,"1380":1}}],["statuscodetoerrortype",{"3":{"1300":1}}],["statuscoderesult",{"2":{"159":1,"1909":1,"1911":1},"3":{"157":1,"159":1,"1311":6,"1909":1,"1911":1}}],["statuscode",{"2":{"100":1,"1225":2,"2018":1},"3":{"100":1,"1225":2,"1270":1,"1309":1,"1311":10,"1312":14,"1378":1,"1380":1,"1436":6,"1438":1,"1927":2,"2018":1}}],["statusbucket",{"2":{"1351":1},"3":{"1199":3,"1203":2,"1207":2,"1351":1,"1359":11,"1496":1}}],["status=success",{"3":{"626":1,"1475":1}}],["status",{"0":{"3":1,"9":1,"15":1,"29":1,"37":1,"45":1,"51":1,"57":1,"66":1,"76":1,"84":1,"90":1,"107":1,"115":1,"130":1,"145":1,"155":1,"164":1,"173":1,"184":1,"193":1,"205":1,"212":1,"223":1,"233":1,"241":1,"263":1,"271":1,"279":1,"289":1,"298":1,"308":1,"316":1,"328":1,"339":1,"348":1,"357":1,"368":1,"378":1,"386":1,"395":1,"411":1,"418":1,"432":1,"438":1,"446":1,"457":1,"468":1,"480":1,"497":1,"505":1,"516":1,"526":1,"534":1,"543":1,"554":1,"562":1,"570":1,"581":1,"589":1,"597":1,"607":1,"616":1,"624":1,"638":1,"647":1,"655":1,"663":1,"672":1,"680":1,"688":1,"696":1,"705":1,"713":1,"723":1,"731":1,"739":1,"747":1,"755":1,"764":1,"772":1,"780":1,"788":1,"797":1,"808":1,"817":1,"825":1,"836":1,"844":1,"852":1,"859":1,"867":1,"879":1,"887":1,"895":1,"903":1,"912":1,"920":1,"929":1,"937":1,"944":1,"952":1,"962":1,"970":1,"978":1,"986":1,"994":1,"1002":1,"1010":1,"1016":1,"1024":1,"1032":1,"1040":1,"1048":1,"1057":1,"1065":1,"1073":1,"1081":1,"1089":1,"1098":1,"1106":1,"1114":1,"1122":1,"1131":1,"1139":1,"1149":1,"1159":1,"1166":1,"1173":1,"1182":1,"1766":1,"1873":1},"2":{"537":1,"574":1,"809":1,"813":1,"1594":1,"1633":1,"1749":1,"1808":1,"1812":1,"1926":1,"2167":1,"2168":1},"3":{"0":5,"1":1,"27":1,"42":1,"74":1,"100":2,"107":1,"109":8,"110":2,"111":3,"112":1,"138":1,"139":1,"140":1,"142":1,"150":1,"157":4,"203":1,"225":1,"230":2,"235":1,"261":1,"301":1,"340":1,"341":3,"343":1,"392":1,"403":1,"423":2,"424":1,"434":1,"435":1,"451":1,"458":1,"459":4,"460":1,"461":1,"497":2,"499":1,"502":1,"536":4,"537":1,"538":1,"556":1,"574":1,"591":1,"609":1,"631":1,"633":2,"660":1,"731":1,"741":1,"757":3,"759":1,"761":1,"766":1,"789":3,"790":2,"791":3,"794":1,"802":1,"809":3,"811":1,"812":1,"813":1,"856":1,"882":1,"909":2,"921":1,"1019":1,"1021":2,"1062":1,"1116":1,"1124":1,"1140":1,"1143":1,"1150":1,"1212":2,"1217":2,"1219":1,"1222":1,"1224":1,"1225":1,"1229":13,"1237":1,"1239":1,"1247":3,"1260":1,"1263":1,"1266":1,"1270":3,"1286":4,"1300":18,"1304":2,"1309":27,"1311":43,"1312":15,"1324":14,"1328":1,"1332":1,"1337":2,"1339":19,"1341":1,"1344":7,"1349":1,"1350":43,"1353":4,"1356":1,"1358":2,"1359":66,"1365":1,"1369":4,"1380":3,"1385":3,"1389":2,"1390":1,"1395":38,"1396":28,"1398":2,"1401":1,"1402":49,"1415":4,"1416":1,"1417":9,"1436":17,"1438":5,"1449":1,"1453":1,"1455":5,"1465":1,"1467":5,"1474":4,"1475":1,"1478":1,"1496":2,"1526":3,"1531":1,"1535":1,"1546":1,"1577":5,"1586":1,"1591":1,"1594":1,"1600":1,"1611":1,"1630":7,"1631":6,"1632":4,"1633":4,"1635":5,"1637":1,"1638":1,"1639":10,"1640":6,"1641":1,"1643":1,"1644":1,"1650":1,"1651":3,"1660":1,"1661":1,"1662":1,"1666":1,"1669":1,"1683":3,"1684":1,"1685":1,"1686":13,"1687":1,"1697":1,"1701":1,"1702":1,"1710":1,"1716":1,"1727":10,"1728":3,"1729":2,"1742":1,"1748":3,"1749":10,"1750":4,"1753":1,"1754":2,"1760":1,"1764":5,"1765":14,"1768":3,"1770":1,"1776":1,"1805":5,"1806":2,"1808":1,"1810":1,"1812":1,"1814":2,"1815":1,"1831":1,"1873":1,"1874":1,"1876":2,"1877":1,"1908":2,"1909":3,"1912":1,"1923":1,"1925":2,"1926":1,"1927":7,"1930":6,"1933":4,"1940":1,"1941":1,"1957":1,"1959":1,"2018":1,"2066":2,"2085":1,"2089":1,"2127":1,"2137":1,"2158":1,"2163":1,"2166":4,"2167":3,"2168":2,"2169":3,"2232":3}}],["staywithinthelinecap",{"3":{"1436":3}}],["stayed",{"3":{"148":1,"265":1,"592":1,"766":1,"832":1,"871":1,"1300":1,"1311":1,"1339":2,"1369":1,"1387":1,"1436":1,"1449":1,"1474":1,"1476":1,"1491":1,"2156":1}}],["staying",{"3":{"131":1,"212":1,"499":1,"906":1,"909":1,"1020":1,"1128":1,"1237":1,"1247":1,"1271":1,"1286":2,"1297":1,"1300":2,"1311":3,"1312":1,"1324":1,"1339":1,"1359":1,"1395":1,"1396":3,"1436":4,"1438":2,"1441":1,"1477":1,"1667":1,"2001":1}}],["stay",{"2":{"2043":1},"3":{"0":21,"27":2,"58":1,"62":1,"68":1,"72":1,"78":1,"91":1,"93":1,"96":1,"100":3,"111":1,"117":1,"122":1,"128":1,"138":1,"140":1,"141":1,"142":2,"149":1,"150":1,"186":2,"197":1,"201":1,"209":1,"219":1,"224":1,"265":2,"273":1,"274":1,"286":1,"351":1,"358":1,"362":1,"363":1,"369":1,"395":1,"398":1,"399":1,"401":1,"407":1,"412":1,"413":2,"442":1,"448":1,"460":2,"468":1,"482":2,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"498":2,"500":1,"509":1,"511":1,"518":1,"524":1,"528":1,"544":1,"547":1,"568":1,"590":1,"591":1,"609":3,"611":1,"618":1,"625":1,"649":1,"656":1,"657":1,"681":1,"683":1,"724":1,"735":1,"742":1,"785":1,"790":2,"799":1,"821":2,"827":1,"829":1,"832":1,"833":3,"838":1,"846":1,"863":1,"876":1,"877":1,"922":1,"923":1,"926":2,"939":1,"960":1,"964":2,"980":1,"996":1,"1004":1,"1018":1,"1026":1,"1036":1,"1045":1,"1049":1,"1059":4,"1074":1,"1075":2,"1091":1,"1096":1,"1109":1,"1123":1,"1141":1,"1168":1,"1175":1,"1177":1,"1184":1,"1201":2,"1210":1,"1212":5,"1217":1,"1220":1,"1229":4,"1233":1,"1235":1,"1237":8,"1239":2,"1241":1,"1247":2,"1252":1,"1257":1,"1259":5,"1267":1,"1269":1,"1270":10,"1271":2,"1280":1,"1281":1,"1286":24,"1291":1,"1295":1,"1300":13,"1301":4,"1309":6,"1310":1,"1311":12,"1317":1,"1322":1,"1323":8,"1324":24,"1338":1,"1339":9,"1347":1,"1350":6,"1353":1,"1355":1,"1359":47,"1362":1,"1369":4,"1377":1,"1380":9,"1393":1,"1395":16,"1396":23,"1401":1,"1402":4,"1409":1,"1415":5,"1416":8,"1417":8,"1423":1,"1424":1,"1433":1,"1435":1,"1436":69,"1438":5,"1442":1,"1447":1,"1455":1,"1456":1,"1467":2,"1474":1,"1476":1,"1489":4,"1490":1,"1492":2,"1496":1,"1508":1,"1509":1,"1515":1,"1526":3,"1527":1,"1534":1,"1536":1,"1560":1,"1569":1,"1572":1,"1577":2,"1582":1,"1583":1,"1591":2,"1592":1,"1599":1,"1627":1,"1654":1,"1656":1,"1663":1,"1665":2,"1668":1,"1672":1,"1677":1,"1686":1,"1693":1,"1703":1,"1722":1,"1758":1,"1765":1,"1805":1,"1810":1,"1815":2,"1842":1,"1843":1,"1886":1,"1891":1,"1898":2,"1916":1,"1920":1,"1933":1,"1967":1,"1971":1,"1977":1,"1991":1,"2000":1,"2001":1,"2010":1,"2028":1,"2042":1,"2043":1,"2047":1,"2058":1,"2083":3,"2094":1,"2104":1,"2120":1,"2131":1,"2135":1,"2139":1,"2141":1,"2150":2,"2158":1,"2159":1,"2167":1,"2169":1,"2179":1,"2202":1,"2232":3}}],["staysinsidetheenginestrategies",{"3":{"1436":2}}],["stays",{"0":{"2026":1},"1":{"2116":1,"2117":1,"2118":1,"2119":1,"2120":1,"2121":1,"2122":1,"2123":1},"3":{"0":26,"15":1,"20":1,"31":2,"38":1,"39":2,"54":2,"59":3,"62":1,"72":1,"91":1,"92":2,"96":1,"100":1,"109":1,"124":1,"134":1,"135":1,"139":1,"140":1,"141":1,"152":1,"158":1,"173":1,"178":2,"182":1,"184":1,"188":1,"193":1,"195":2,"201":1,"207":1,"219":1,"225":1,"229":1,"230":1,"233":1,"235":3,"237":1,"244":1,"250":1,"258":1,"260":2,"265":2,"295":1,"312":1,"313":1,"314":1,"317":1,"324":1,"342":3,"345":1,"350":1,"357":1,"359":3,"361":1,"362":1,"365":1,"380":1,"384":1,"392":1,"396":1,"398":1,"402":1,"404":1,"408":1,"413":2,"414":1,"425":1,"434":1,"448":1,"449":1,"451":1,"458":2,"460":1,"486":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"499":1,"501":1,"508":1,"528":1,"530":1,"538":1,"539":3,"545":1,"547":1,"549":1,"556":1,"591":1,"592":1,"607":1,"609":1,"617":1,"627":1,"633":1,"640":2,"644":1,"657":1,"668":1,"682":1,"683":1,"684":1,"692":1,"698":1,"711":1,"719":1,"725":1,"733":1,"741":1,"749":1,"751":1,"758":1,"774":1,"790":1,"793":1,"797":1,"799":1,"803":1,"810":1,"827":3,"830":1,"834":1,"836":1,"837":1,"838":1,"849":1,"853":1,"857":1,"863":1,"870":1,"873":1,"876":1,"897":1,"905":1,"914":6,"917":1,"926":2,"929":1,"946":1,"950":1,"954":1,"957":1,"964":2,"966":1,"973":1,"990":1,"1013":1,"1018":2,"1026":1,"1034":2,"1037":1,"1048":2,"1050":1,"1059":1,"1060":1,"1075":1,"1093":3,"1094":3,"1096":1,"1100":1,"1116":1,"1133":1,"1137":1,"1149":1,"1151":3,"1163":1,"1175":1,"1182":1,"1184":1,"1185":1,"1186":1,"1187":2,"1188":1,"1193":1,"1212":10,"1215":1,"1220":1,"1229":2,"1231":1,"1234":1,"1237":9,"1239":1,"1240":1,"1243":1,"1247":8,"1252":1,"1254":1,"1256":1,"1259":12,"1263":1,"1264":1,"1265":1,"1266":1,"1270":10,"1271":3,"1274":1,"1275":2,"1276":3,"1281":1,"1286":39,"1288":1,"1289":1,"1293":2,"1300":24,"1301":7,"1304":2,"1306":1,"1309":12,"1310":2,"1311":23,"1312":2,"1316":1,"1323":26,"1324":50,"1328":1,"1329":1,"1332":1,"1333":2,"1338":1,"1339":26,"1350":13,"1352":1,"1353":1,"1355":1,"1358":1,"1359":70,"1360":1,"1366":1,"1368":1,"1369":11,"1379":1,"1380":13,"1385":1,"1391":1,"1395":41,"1396":51,"1399":1,"1402":20,"1406":2,"1407":1,"1408":2,"1409":1,"1410":3,"1415":31,"1416":13,"1417":28,"1420":1,"1423":1,"1427":4,"1431":2,"1433":1,"1434":1,"1436":84,"1438":6,"1441":1,"1443":2,"1447":6,"1454":2,"1455":3,"1456":1,"1458":1,"1460":1,"1467":10,"1474":1,"1486":2,"1489":3,"1490":2,"1492":1,"1496":10,"1534":2,"1568":1,"1571":1,"1577":5,"1585":5,"1586":1,"1592":1,"1599":2,"1627":2,"1629":1,"1630":1,"1631":1,"1641":4,"1651":1,"1653":1,"1660":1,"1661":2,"1662":1,"1667":1,"1668":1,"1669":1,"1677":1,"1684":2,"1685":2,"1686":2,"1721":1,"1727":3,"1729":1,"1764":1,"1765":1,"1767":1,"1770":1,"1781":1,"1785":1,"1792":1,"1799":1,"1805":2,"1806":1,"1810":2,"1815":1,"1818":1,"1823":2,"1830":1,"1837":1,"1838":1,"1842":1,"1858":3,"1859":1,"1865":1,"1871":1,"1874":1,"1881":1,"1891":1,"1896":1,"1902":2,"1908":1,"1915":1,"1920":1,"1929":1,"1933":1,"1934":1,"1940":1,"1946":1,"1959":1,"1963":1,"1967":1,"1968":1,"1972":1,"1978":1,"1979":1,"1982":1,"1984":1,"1985":3,"1988":1,"2000":1,"2001":1,"2002":1,"2006":1,"2015":1,"2025":1,"2028":1,"2044":1,"2048":1,"2055":3,"2061":2,"2063":1,"2064":2,"2089":1,"2096":1,"2099":1,"2104":1,"2107":2,"2112":1,"2116":1,"2120":1,"2122":2,"2142":1,"2145":1,"2151":1,"2155":1,"2156":1,"2168":1,"2175":1,"2199":2,"2210":1,"2225":1,"2232":3}}],["mcp",{"3":{"2239":2}}],["mcpd",{"3":{"2224":1}}],["mcts",{"3":{"2224":1}}],["mct001",{"3":{"1417":2}}],["mcsa",{"3":{"2224":2}}],["mcr",{"3":{"640":1,"868":2,"1339":1,"1441":1,"1445":2,"1465":1}}],["mvp",{"3":{"1395":3}}],["mvc",{"2":{"300":1,"2137":1},"3":{"0":4,"157":1,"299":1,"300":1,"301":1,"448":1,"583":1,"657":1,"725":1,"726":1,"827":1,"962":1,"1049":1,"1050":3,"1051":2,"1052":1,"1213":2,"1235":2,"1237":5,"1300":7,"1308":1,"1309":10,"1311":40,"1323":1,"1379":1,"1380":2,"1396":7,"1402":2,"1415":3,"1436":13,"1438":1,"1447":1,"1666":1,"1810":3,"2131":2,"2137":2,"2220":1,"2224":1}}],["m119",{"3":{"1496":1}}],["m135",{"3":{"1496":1}}],["m136",{"3":{"1496":1}}],["m137",{"3":{"1496":1}}],["m139",{"3":{"1350":2,"1496":1}}],["m140",{"3":{"1496":1}}],["m148",{"3":{"1415":1,"1496":1}}],["m146",{"3":{"1398":1,"1496":1}}],["m143",{"3":{"1350":1,"1496":1}}],["m162",{"3":{"1395":1}}],["m161",{"3":{"1350":1,"1496":1}}],["m8",{"3":{"1323":1}}],["mgmt",{"3":{"1192":1}}],["m48",{"3":{"1438":1}}],["m4",{"3":{"1012":2,"1014":2,"1089":1,"1090":1,"1094":1,"1095":1,"1526":5,"1531":9,"1534":1,"1577":2,"1582":1,"1588":1,"1591":4,"1592":1,"1595":11,"1600":42}}],["m3",{"3":{"1012":2,"1014":1,"1526":2,"1531":5,"1577":2,"1589":2,"1591":1,"1592":1,"1595":4,"1596":1,"1600":11}}],["m2",{"3":{"1012":1,"1090":1}}],["mm",{"3":{"305":1,"1018":1,"1300":2,"1350":2,"1359":1,"1369":2,"1416":2,"1436":6,"1492":1,"1609":1,"1710":1,"1743":1,"2138":1}}],["mmcacommondomain",{"3":{"1436":2}}],["mmcaclientconfigbootstraptests",{"3":{"1199":1,"1207":3,"1324":2}}],["mmcaclientconfigbootstrap",{"3":{"1184":1,"1199":3,"1203":1,"1207":2,"1324":5,"1416":1,"1496":1}}],["mmcaculturebootstrap",{"2":{"265":1,"1526":1,"1653":1,"2083":1,"2086":1},"3":{"265":2,"1199":1,"1203":1,"1207":2,"1311":3,"1324":17,"1416":1,"1417":1,"1496":1,"1526":1,"1653":1,"2083":2,"2086":1}}],["mmcastore",{"2":{"764":1,"1471":1},"3":{"764":1,"766":2,"1471":1,"1591":1,"1600":2}}],["mmca0002",{"2":{"576":1},"3":{"576":1,"1489":1}}],["mmca0001",{"2":{"576":1},"3":{"576":1,"1489":1}}],["mmcalayerenforcement",{"2":{"576":1}}],["mmcaadcuiweb",{"3":{"1456":1,"1490":1}}],["mmcaadc",{"3":{"1456":2,"1490":1}}],["mmcaauthhandoff",{"3":{"1324":3}}],["mmcaauthcookie",{"3":{"1324":6}}],["mmcaauthsession",{"2":{"507":1},"3":{"507":1,"1324":2}}],["mmcaapplicationpipelinebuilder",{"2":{"1262":1,"1313":1,"1316":1,"1662":1},"3":{"122":1,"1199":1,"1203":1,"1207":2,"1262":1,"1313":1,"1316":3,"1323":7,"1662":1}}],["mmcaopenapidesigntime",{"2":{"452":1},"3":{"452":1,"1311":1}}],["mmcagatewaysection",{"3":{"1326":1,"1339":1,"1444":1}}],["mmcagatewaytests",{"3":{"180":1,"827":1,"833":1}}],["mmcagateway",{"2":{"836":1,"841":1},"3":{"0":2,"827":1,"833":1,"836":1,"838":3,"841":1,"1338":2,"1339":12,"1436":1,"1438":2,"1447":4,"1656":1}}],["mmcagatewayhardeningtestsbasetests",{"3":{"1199":1,"1207":4,"1436":1,"1438":1,"1487":1}}],["mmcagatewayhardeningtestsbase",{"2":{"572":1,"578":1,"2055":1},"3":{"0":1,"572":8,"578":3,"1199":4,"1207":2,"1436":5,"1438":2,"1488":4,"1493":1,"1496":1,"2055":1}}],["mmcagenerateopenapidocument",{"2":{"451":1,"452":1,"1455":1},"3":{"0":1,"451":1,"452":1,"1311":1,"1455":1}}],["mmcathemeprovidersprerendertests",{"3":{"1199":1,"1207":2,"1324":1}}],["mmcathemeproviderstests",{"3":{"1199":2,"1207":2,"1324":1}}],["mmcathemeproviders",{"2":{"273":1,"275":1,"276":1,"2075":1,"2083":1},"3":{"0":2,"273":5,"275":1,"276":2,"1324":9,"1433":1,"1436":2,"1526":3,"2075":2,"2083":2}}],["mmcatheme",{"2":{"272":1,"273":1,"621":1,"2075":2,"2080":1,"2083":1,"2086":1},"3":{"0":2,"272":2,"273":2,"618":1,"621":1,"622":1,"1199":3,"1203":1,"1207":2,"1324":13,"1436":1,"1496":1,"1526":3,"1577":2,"1586":1,"2075":4,"2080":1,"2083":3,"2086":1}}],["mmca",{"0":{"95":1,"465":1,"1441":1,"1442":1,"1443":1,"1444":1,"1453":1,"1454":1,"1455":1,"1456":1,"1457":1,"1458":1,"1602":1,"1603":1,"1604":1,"1679":1,"1727":1,"1728":1,"1730":2,"1790":1,"1793":1,"1799":1,"1802":1,"1805":1,"1807":1,"1810":1,"1812":1,"1815":1,"1817":1,"1827":1,"1834":1,"1838":1,"1846":1,"1849":1,"1853":1,"1862":1,"1865":1,"1868":1,"1871":1,"1877":1,"1886":1,"1889":1,"1892":1,"1895":1,"1899":1,"1902":1,"1905":1,"1912":1,"1924":1,"1927":1,"1930":1,"1941":1,"1944":1,"1950":1,"1959":1,"1962":1,"1965":1,"1968":1,"1972":1,"1975":1,"1979":1,"1982":1,"1985":1,"1988":1,"1991":1,"1994":1,"1995":1,"1997":1,"2000":1,"2002":1,"2014":1,"2022":1,"2028":1,"2038":1,"2049":1,"2060":1,"2063":1,"2069":1,"2080":1,"2083":1,"2086":1,"2108":1,"2117":1,"2123":1,"2126":1,"2128":1,"2131":1,"2133":1,"2136":1,"2139":1,"2142":1,"2146":1,"2149":1,"2153":1,"2156":1,"2160":1,"2163":1,"2169":1,"2172":1,"2180":1,"2184":1,"2193":1,"2196":1,"2203":1,"2214":1,"2221":1,"2227":1},"1":{"936":1,"937":1,"938":1,"939":1,"940":1,"941":1,"942":1,"1088":1,"1089":1,"1090":1,"1091":1,"1092":1,"1093":1,"1094":1,"1095":1,"1096":1,"1190":2,"1191":2,"1192":2,"1193":2,"1194":2,"1195":2,"1502":1,"1503":1,"1504":1,"1505":1,"1506":1,"1507":1,"1508":1,"1509":1,"1510":1,"1511":1,"1512":1,"1513":1,"1514":1,"1515":1,"1516":1,"1517":1,"1522":1,"1523":1,"1524":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1531":1,"1532":1,"1533":1,"1534":1,"1535":1,"1573":1,"1574":1,"1575":1,"1576":1,"1577":1,"1578":1,"1579":1,"1580":1,"1581":1,"1582":1,"1583":1,"1584":1,"1585":1,"1586":1,"1587":1,"1588":1,"1589":1,"1590":1,"1591":1,"1592":1,"1593":1,"1594":1,"1595":1,"1596":1,"1597":1,"1598":1,"1599":1,"1600":1,"1646":1,"1647":1,"1648":1,"1649":1,"1650":1,"1651":1,"1652":1,"1653":1,"1654":1,"1655":1,"1656":1,"1657":1,"1658":1,"1659":1,"1660":1,"1661":1,"1662":1,"1663":1,"1664":1,"1665":1,"1666":1,"1667":1,"1668":1,"1669":1,"1670":1,"1671":1,"1672":1,"1673":1,"1674":1,"1675":1,"1681":1,"1682":1,"1683":1,"1684":1,"1685":1,"1686":1,"1687":1,"1688":1,"1689":1,"1690":1,"1691":1,"1692":1,"1693":1,"1694":1,"1695":1,"1696":1,"1697":1,"1698":1,"1699":1,"1700":1,"1701":1,"1702":1,"1703":1,"1704":1,"1705":1,"1717":1,"1718":1,"1719":1,"1720":1,"1721":1,"1722":1,"1723":1,"1724":1,"1725":1,"1726":1,"1727":1,"1728":1,"1729":1,"1730":1,"1731":1,"1745":1,"1746":1,"1747":1,"1748":1,"1749":1,"1750":1,"1751":1,"1752":1,"1753":1,"1754":1,"1755":1,"1762":1,"1763":1,"1764":1,"1765":1,"1766":1,"1767":1,"1768":1,"1769":1,"1770":1,"1771":1,"1772":1,"1773":1,"1774":1,"1775":1,"1776":1,"1777":1,"1778":1,"1779":1,"2154":1,"2155":1,"2156":1,"2157":1,"2158":1,"2159":1,"2160":1,"2204":1,"2205":1,"2206":1,"2207":1,"2208":1,"2209":1,"2210":1,"2211":1,"2226":1,"2227":1,"2228":1,"2229":1,"2230":1,"2231":1,"2232":1,"2233":1,"2234":1,"2235":1},"2":{"24":1,"39":3,"53":1,"58":1,"59":2,"61":2,"62":3,"67":1,"68":1,"70":1,"78":1,"80":3,"85":1,"95":1,"99":1,"100":1,"107":2,"109":1,"111":1,"117":1,"124":1,"126":1,"130":1,"132":2,"135":2,"137":1,"138":1,"139":3,"140":1,"141":6,"142":6,"145":2,"147":1,"150":1,"152":2,"160":1,"180":1,"186":1,"190":1,"207":4,"214":2,"216":1,"225":2,"229":1,"241":2,"247":1,"250":1,"252":1,"255":2,"258":1,"259":2,"261":1,"265":1,"273":1,"281":2,"310":1,"359":2,"370":1,"373":1,"388":1,"395":6,"400":7,"401":2,"404":2,"406":1,"408":1,"412":1,"436":1,"460":1,"481":1,"482":3,"486":3,"487":3,"488":3,"489":3,"490":3,"491":3,"492":3,"493":6,"494":3,"495":3,"509":6,"511":3,"514":1,"526":2,"527":2,"528":3,"529":1,"530":1,"558":1,"564":2,"572":2,"576":1,"577":1,"578":2,"591":1,"599":1,"617":1,"618":1,"632":1,"633":1,"634":3,"635":1,"636":1,"638":3,"648":1,"649":1,"667":1,"681":1,"683":1,"684":1,"686":2,"731":1,"733":1,"780":1,"789":1,"821":1,"822":3,"823":3,"825":2,"826":3,"832":1,"836":1,"838":1,"840":1,"861":1,"880":1,"897":2,"899":1,"906":1,"912":1,"913":1,"914":2,"917":1,"936":1,"938":2,"939":7,"941":2,"942":1,"953":1,"954":1,"957":1,"963":1,"966":1,"982":1,"984":1,"1004":2,"1012":1,"1016":1,"1036":3,"1037":1,"1044":1,"1051":1,"1057":1,"1058":1,"1062":1,"1066":1,"1067":2,"1068":3,"1069":3,"1074":1,"1089":4,"1090":1,"1091":1,"1093":1,"1124":2,"1161":2,"1191":2,"1192":1,"1194":2,"1195":1,"1200":2,"1201":2,"1203":4,"1207":10,"1211":1,"1213":5,"1214":1,"1215":4,"1217":1,"1222":1,"1229":3,"1230":2,"1236":1,"1237":3,"1247":3,"1256":1,"1259":6,"1264":1,"1268":1,"1270":6,"1271":2,"1275":1,"1286":5,"1287":2,"1300":2,"1301":3,"1309":4,"1310":2,"1317":1,"1321":1,"1323":5,"1324":1,"1325":6,"1326":1,"1327":1,"1328":2,"1329":1,"1330":1,"1333":1,"1336":1,"1337":1,"1339":1,"1340":1,"1341":3,"1350":6,"1351":1,"1359":5,"1363":1,"1366":1,"1369":2,"1370":3,"1378":1,"1379":2,"1380":7,"1381":1,"1386":1,"1395":6,"1396":11,"1402":6,"1404":6,"1414":1,"1415":4,"1416":3,"1417":9,"1418":4,"1422":2,"1425":4,"1426":3,"1427":1,"1428":1,"1430":3,"1434":3,"1435":1,"1436":2,"1437":12,"1438":3,"1439":1,"1442":2,"1445":8,"1449":1,"1451":1,"1452":1,"1453":3,"1454":2,"1455":2,"1456":1,"1459":1,"1460":1,"1471":2,"1476":1,"1486":10,"1487":9,"1488":1,"1490":6,"1492":3,"1494":1,"1496":4,"1497":2,"1500":1,"1503":10,"1509":2,"1512":1,"1513":2,"1523":1,"1524":1,"1525":1,"1526":2,"1527":2,"1531":2,"1534":1,"1535":1,"1576":1,"1577":1,"1578":1,"1585":3,"1591":1,"1599":1,"1602":1,"1605":1,"1611":2,"1615":4,"1619":2,"1639":1,"1642":1,"1643":2,"1648":1,"1649":1,"1650":5,"1653":2,"1654":1,"1656":2,"1660":12,"1661":2,"1675":1,"1677":1,"1681":1,"1682":1,"1684":1,"1687":1,"1690":1,"1693":2,"1702":4,"1711":1,"1726":1,"1730":1,"1732":1,"1739":1,"1741":1,"1761":2,"1775":2,"1781":1,"1782":2,"1787":1,"1790":1,"1793":1,"1805":1,"1807":1,"1812":1,"1815":1,"1817":1,"1827":1,"1828":1,"1829":1,"1834":1,"1843":1,"1846":1,"1853":1,"1862":1,"1865":1,"1868":1,"1877":1,"1886":1,"1892":1,"1895":1,"1896":1,"1899":1,"1902":2,"1905":1,"1912":1,"1919":1,"1922":1,"1924":1,"1930":1,"1935":1,"1941":1,"1950":1,"1953":1,"1959":1,"1962":1,"1965":1,"1972":1,"1975":2,"1979":1,"1985":1,"1991":1,"1997":1,"2002":1,"2004":3,"2006":9,"2008":1,"2013":8,"2014":3,"2016":1,"2022":1,"2024":1,"2028":2,"2030":1,"2038":1,"2042":1,"2044":1,"2046":1,"2049":1,"2055":2,"2056":1,"2057":1,"2059":2,"2060":1,"2063":1,"2070":1,"2071":2,"2077":1,"2080":1,"2086":1,"2100":2,"2101":1,"2108":1,"2111":1,"2115":1,"2116":1,"2120":3,"2123":1,"2128":1,"2131":1,"2133":1,"2139":1,"2142":1,"2146":1,"2149":1,"2150":1,"2151":1,"2152":1,"2153":1,"2156":1,"2157":3,"2160":9,"2169":1,"2172":1,"2176":3,"2177":4,"2178":1,"2180":2,"2191":1,"2193":2,"2203":1,"2211":1},"3":{"0":139,"5":1,"11":1,"15":4,"17":4,"18":1,"19":3,"22":2,"23":1,"24":11,"25":8,"26":19,"27":24,"31":5,"34":2,"39":9,"42":4,"43":4,"46":1,"53":3,"54":2,"58":1,"59":17,"60":2,"61":4,"62":11,"63":7,"66":1,"67":1,"68":8,"70":5,"71":4,"72":14,"73":5,"74":14,"76":2,"78":1,"79":2,"80":14,"81":9,"82":4,"85":2,"93":8,"94":6,"95":17,"96":11,"97":2,"98":10,"99":3,"100":5,"103":6,"104":2,"107":2,"109":46,"111":6,"117":14,"121":15,"122":5,"123":8,"124":1,"125":10,"126":7,"127":4,"128":17,"130":6,"132":2,"135":26,"136":6,"137":5,"138":5,"139":6,"140":3,"141":7,"142":14,"145":3,"146":3,"147":19,"149":6,"150":13,"151":2,"152":9,"157":5,"160":8,"161":6,"164":1,"166":10,"168":1,"170":3,"171":3,"173":1,"175":7,"178":6,"179":12,"180":19,"181":4,"184":1,"186":27,"189":10,"190":11,"193":3,"195":21,"196":4,"198":6,"200":4,"201":3,"202":18,"203":4,"207":5,"208":1,"214":4,"216":5,"217":6,"218":12,"219":8,"220":10,"225":9,"228":8,"229":1,"230":18,"231":8,"235":24,"237":2,"238":1,"241":2,"243":44,"245":22,"246":14,"247":1,"250":2,"251":1,"252":3,"254":1,"255":11,"256":8,"257":1,"258":8,"259":15,"260":9,"261":5,"265":22,"268":2,"272":1,"273":4,"275":1,"281":3,"283":4,"284":4,"285":6,"290":2,"291":4,"295":24,"296":2,"300":4,"301":1,"303":8,"305":14,"306":8,"310":12,"312":1,"314":4,"318":20,"324":1,"325":10,"326":2,"328":1,"330":8,"331":1,"333":10,"336":1,"337":4,"341":37,"342":2,"343":6,"344":12,"345":4,"350":11,"352":8,"353":14,"359":9,"365":2,"366":1,"368":1,"369":2,"370":5,"373":6,"374":4,"375":5,"384":14,"387":4,"388":7,"390":12,"391":14,"392":8,"395":8,"397":13,"400":16,"401":19,"402":4,"403":9,"404":7,"406":1,"407":12,"408":8,"409":8,"412":4,"413":18,"415":3,"416":2,"418":27,"419":1,"420":3,"422":4,"423":11,"424":7,"425":7,"426":19,"427":4,"428":18,"429":12,"430":7,"434":3,"436":3,"442":2,"443":4,"444":6,"446":2,"448":24,"450":3,"451":3,"452":17,"453":2,"454":1,"457":1,"459":27,"460":1,"463":15,"464":10,"465":10,"466":5,"469":6,"470":31,"472":1,"475":28,"476":34,"477":34,"478":6,"481":2,"482":6,"483":2,"484":2,"486":27,"487":16,"488":10,"489":17,"490":24,"491":22,"492":22,"493":27,"494":12,"495":15,"497":20,"498":1,"499":10,"502":5,"507":44,"509":12,"511":15,"512":2,"513":10,"514":6,"522":4,"523":6,"524":4,"526":4,"527":7,"528":7,"529":1,"530":3,"531":4,"532":1,"535":2,"536":23,"538":3,"539":7,"540":3,"543":6,"544":2,"545":57,"547":5,"549":6,"550":7,"551":7,"552":16,"556":73,"558":6,"559":2,"562":3,"563":10,"564":45,"566":11,"567":3,"570":2,"572":83,"575":6,"576":12,"577":16,"578":12,"579":1,"582":1,"583":77,"585":26,"586":12,"587":2,"589":2,"590":1,"591":20,"592":2,"593":6,"594":5,"597":1,"599":69,"600":8,"601":14,"602":3,"603":8,"604":3,"607":1,"608":1,"609":78,"611":11,"612":3,"613":7,"616":2,"617":1,"618":21,"620":1,"621":1,"624":10,"625":13,"626":75,"627":3,"628":10,"629":12,"631":4,"632":5,"633":23,"634":8,"635":8,"636":4,"638":4,"640":46,"642":12,"643":3,"644":8,"648":1,"649":43,"651":5,"652":2,"656":2,"657":28,"659":1,"664":2,"665":24,"667":1,"668":11,"669":10,"674":92,"675":6,"676":22,"677":1,"681":3,"682":6,"683":1,"684":1,"685":1,"686":2,"688":1,"689":2,"690":5,"691":2,"692":2,"693":1,"696":3,"697":3,"698":33,"700":3,"702":19,"703":13,"705":1,"706":2,"707":8,"713":1,"715":10,"718":2,"719":5,"720":8,"723":1,"724":8,"725":31,"727":7,"728":5,"731":1,"732":2,"733":16,"736":8,"739":1,"740":4,"741":10,"742":1,"743":2,"744":4,"749":38,"751":8,"756":6,"757":35,"758":3,"759":8,"760":4,"761":5,"765":5,"766":51,"768":8,"769":3,"774":41,"776":7,"780":2,"782":48,"784":4,"789":7,"790":21,"792":7,"793":12,"794":8,"798":20,"799":14,"803":6,"804":7,"805":4,"806":2,"808":1,"809":7,"810":1,"813":7,"814":2,"818":2,"819":34,"821":1,"822":8,"823":3,"825":9,"826":20,"827":58,"830":14,"831":10,"832":26,"833":32,"836":1,"837":16,"838":29,"839":6,"840":1,"841":6,"846":5,"849":5,"850":2,"853":2,"854":15,"855":2,"857":12,"860":1,"861":18,"863":3,"864":1,"865":1,"868":13,"869":31,"870":8,"872":4,"873":8,"875":4,"876":28,"877":13,"880":3,"881":43,"883":4,"884":3,"888":4,"889":2,"890":2,"891":7,"892":2,"897":23,"899":1,"900":4,"904":2,"905":22,"906":14,"907":1,"908":6,"912":1,"913":27,"914":16,"915":4,"916":1,"917":6,"921":2,"922":9,"923":1,"924":7,"926":20,"927":1,"930":1,"931":7,"932":1,"936":1,"938":2,"939":12,"941":2,"942":1,"945":1,"946":21,"950":1,"953":1,"954":59,"955":1,"956":10,"957":1,"958":9,"959":10,"960":15,"963":9,"964":18,"966":3,"971":11,"972":21,"973":1,"974":5,"975":7,"979":15,"980":21,"982":3,"983":1,"984":1,"986":2,"987":4,"988":15,"990":3,"991":2,"994":2,"995":9,"996":13,"998":3,"999":7,"1003":5,"1004":36,"1006":6,"1007":4,"1010":5,"1012":14,"1013":1,"1016":3,"1017":7,"1018":24,"1021":2,"1022":1,"1025":11,"1026":28,"1028":2,"1029":2,"1034":26,"1036":3,"1037":6,"1041":8,"1042":38,"1043":3,"1044":8,"1045":5,"1049":10,"1050":49,"1051":1,"1052":6,"1054":8,"1055":6,"1057":2,"1058":10,"1059":57,"1062":4,"1065":2,"1066":12,"1067":25,"1068":5,"1069":13,"1070":5,"1073":4,"1074":24,"1075":6,"1078":6,"1082":12,"1083":13,"1085":5,"1086":4,"1088":1,"1089":11,"1090":7,"1091":48,"1093":5,"1094":6,"1095":5,"1099":4,"1100":13,"1103":6,"1108":15,"1116":39,"1117":1,"1119":5,"1122":1,"1123":11,"1124":46,"1125":9,"1126":7,"1127":4,"1128":4,"1129":2,"1132":4,"1133":26,"1135":2,"1136":4,"1137":1,"1140":18,"1142":3,"1150":26,"1154":2,"1156":2,"1160":7,"1161":17,"1163":1,"1164":1,"1168":45,"1170":1,"1171":1,"1173":1,"1174":4,"1175":54,"1180":1,"1182":3,"1183":8,"1184":39,"1185":3,"1186":4,"1187":2,"1189":1,"1190":4,"1191":9,"1192":3,"1194":2,"1195":3,"1199":5234,"1200":3,"1201":3,"1203":2371,"1204":6,"1206":110,"1207":16206,"1208":236,"1209":138,"1211":13,"1212":40,"1213":9,"1214":11,"1215":7,"1217":1,"1219":6,"1220":2,"1222":7,"1223":4,"1224":2,"1225":8,"1226":4,"1227":6,"1228":4,"1229":129,"1230":4,"1231":12,"1232":10,"1233":14,"1234":24,"1235":4,"1236":19,"1237":376,"1238":1,"1239":26,"1240":8,"1241":12,"1242":6,"1243":10,"1244":5,"1245":2,"1246":6,"1247":348,"1249":8,"1250":1,"1251":3,"1252":4,"1253":1,"1254":4,"1255":1,"1256":3,"1257":10,"1258":5,"1259":289,"1260":1,"1261":4,"1262":21,"1263":4,"1264":25,"1265":8,"1266":5,"1267":10,"1268":4,"1269":4,"1270":558,"1271":215,"1273":10,"1274":4,"1275":5,"1276":16,"1277":8,"1278":18,"1279":18,"1280":2,"1281":7,"1282":2,"1283":4,"1284":4,"1285":14,"1286":1670,"1287":2,"1288":16,"1289":19,"1290":22,"1291":24,"1292":12,"1293":18,"1294":18,"1295":12,"1296":10,"1297":60,"1298":14,"1299":4,"1300":2345,"1301":163,"1302":14,"1303":17,"1304":20,"1305":12,"1306":16,"1307":32,"1308":16,"1309":511,"1310":140,"1311":989,"1312":164,"1313":1,"1314":6,"1315":10,"1316":24,"1317":23,"1318":19,"1319":6,"1320":57,"1321":5,"1322":29,"1323":907,"1324":1729,"1325":28,"1326":16,"1327":9,"1328":11,"1329":3,"1330":11,"1331":10,"1332":34,"1333":23,"1334":20,"1335":12,"1336":15,"1337":14,"1338":22,"1339":723,"1340":2,"1341":21,"1342":24,"1344":15,"1345":10,"1346":2,"1347":32,"1348":10,"1349":20,"1350":826,"1351":1,"1352":19,"1353":21,"1354":10,"1355":7,"1356":4,"1357":3,"1358":3,"1359":3249,"1361":4,"1362":4,"1363":6,"1364":5,"1365":2,"1366":7,"1367":3,"1368":4,"1369":215,"1370":4,"1371":14,"1372":4,"1373":8,"1374":2,"1376":2,"1377":14,"1378":17,"1379":6,"1380":489,"1381":3,"1384":2,"1386":1,"1387":2,"1389":2,"1390":4,"1395":1050,"1396":1492,"1397":3,"1398":3,"1399":2,"1400":4,"1401":5,"1402":473,"1403":4,"1404":24,"1405":3,"1406":15,"1407":3,"1408":1,"1409":3,"1410":6,"1411":1,"1412":5,"1413":8,"1414":14,"1415":950,"1416":282,"1417":897,"1418":5,"1419":4,"1420":12,"1421":2,"1422":8,"1423":10,"1424":10,"1425":11,"1426":7,"1427":194,"1428":13,"1429":10,"1430":19,"1431":45,"1432":9,"1433":23,"1434":13,"1435":23,"1436":4105,"1437":139,"1438":207,"1439":3,"1440":3,"1441":23,"1442":29,"1443":32,"1444":7,"1445":21,"1446":1,"1447":14,"1449":11,"1450":1,"1451":4,"1452":4,"1453":15,"1454":12,"1455":34,"1456":4,"1457":2,"1458":1,"1459":32,"1460":16,"1461":3,"1462":3,"1464":14,"1465":1,"1467":66,"1470":1,"1471":4,"1472":3,"1473":2,"1474":2,"1475":8,"1476":4,"1477":1,"1478":2,"1479":1,"1480":1,"1481":9,"1484":1,"1485":7,"1486":68,"1487":84,"1488":93,"1489":54,"1490":34,"1491":5,"1492":59,"1494":1,"1496":377,"1497":2,"1498":3,"1500":4,"1502":1,"1503":13,"1504":1,"1509":4,"1512":1,"1513":2,"1518":1,"1520":3,"1521":1,"1522":4,"1523":3,"1524":4,"1525":6,"1526":114,"1527":4,"1529":2,"1531":18,"1532":2,"1534":10,"1535":14,"1569":1,"1570":1,"1573":2,"1574":1,"1576":2,"1577":85,"1578":2,"1580":1,"1582":24,"1583":5,"1584":1,"1585":9,"1586":11,"1587":4,"1588":3,"1589":1,"1591":79,"1592":1,"1593":2,"1594":3,"1596":8,"1597":1,"1599":2,"1600":8,"1601":1,"1602":7,"1605":2,"1606":1,"1611":17,"1615":4,"1619":9,"1620":1,"1627":11,"1631":1,"1639":1,"1642":1,"1643":2,"1646":8,"1648":11,"1649":9,"1650":12,"1651":4,"1652":2,"1653":18,"1654":3,"1655":4,"1656":4,"1658":8,"1659":5,"1660":17,"1661":9,"1664":1,"1673":3,"1674":2,"1675":6,"1676":2,"1677":4,"1678":3,"1679":2,"1681":5,"1682":3,"1684":2,"1685":12,"1686":10,"1687":2,"1688":1,"1689":1,"1690":3,"1691":4,"1692":3,"1693":4,"1694":4,"1695":3,"1699":1,"1701":2,"1702":6,"1703":3,"1704":1,"1705":4,"1706":2,"1707":1,"1708":1,"1710":1,"1711":1,"1712":1,"1713":1,"1714":1,"1717":2,"1718":1,"1722":2,"1724":2,"1725":1,"1726":10,"1727":13,"1728":3,"1729":2,"1730":2,"1731":2,"1732":2,"1736":5,"1739":2,"1740":1,"1741":1,"1745":1,"1748":1,"1756":2,"1757":1,"1761":5,"1762":1,"1763":1,"1764":17,"1765":33,"1770":2,"1773":3,"1775":2,"1778":2,"1780":1,"1781":2,"1782":3,"1784":3,"1785":3,"1787":4,"1788":1,"1790":3,"1793":4,"1794":1,"1799":2,"1801":1,"1802":4,"1803":2,"1805":2,"1806":1,"1807":3,"1808":1,"1810":4,"1812":3,"1815":8,"1816":1,"1817":3,"1820":1,"1826":1,"1827":4,"1828":2,"1829":1,"1834":4,"1838":2,"1843":1,"1846":4,"1847":1,"1851":1,"1853":3,"1854":1,"1860":1,"1862":4,"1865":2,"1868":4,"1877":4,"1879":1,"1880":1,"1884":2,"1886":3,"1889":1,"1891":1,"1892":4,"1894":1,"1895":3,"1896":1,"1897":1,"1899":3,"1902":4,"1903":1,"1905":4,"1906":1,"1910":1,"1912":3,"1913":1,"1919":1,"1922":2,"1924":4,"1927":2,"1929":2,"1930":5,"1931":2,"1935":1,"1939":1,"1941":4,"1942":1,"1947":3,"1950":3,"1951":1,"1953":1,"1955":1,"1959":3,"1961":1,"1962":1,"1963":2,"1965":4,"1968":5,"1970":2,"1972":4,"1975":2,"1978":1,"1979":4,"1981":1,"1985":4,"1991":4,"1994":8,"1995":8,"1997":5,"1999":1,"2000":19,"2001":1,"2002":4,"2003":2,"2004":7,"2006":13,"2008":1,"2013":9,"2014":6,"2015":1,"2016":1,"2022":1,"2024":3,"2028":4,"2030":1,"2038":3,"2039":2,"2041":5,"2042":5,"2043":3,"2044":18,"2046":11,"2047":3,"2049":4,"2050":2,"2052":1,"2055":7,"2056":1,"2057":3,"2059":2,"2060":4,"2061":1,"2062":1,"2063":1,"2064":3,"2066":5,"2067":1,"2069":2,"2070":1,"2071":2,"2075":2,"2077":2,"2080":3,"2081":1,"2083":14,"2085":7,"2086":4,"2087":1,"2089":1,"2097":2,"2098":5,"2099":1,"2100":3,"2101":8,"2105":1,"2106":1,"2107":1,"2108":5,"2109":1,"2110":2,"2111":6,"2112":2,"2113":1,"2114":2,"2115":4,"2116":1,"2117":1,"2119":2,"2120":5,"2122":3,"2123":6,"2124":1,"2127":5,"2128":3,"2131":10,"2133":4,"2134":2,"2136":1,"2137":1,"2138":1,"2139":3,"2140":1,"2142":1,"2146":4,"2149":3,"2150":6,"2151":1,"2152":1,"2153":7,"2154":2,"2156":12,"2157":5,"2158":9,"2160":13,"2161":1,"2163":1,"2164":1,"2166":1,"2168":3,"2169":6,"2171":1,"2172":2,"2176":3,"2177":4,"2178":3,"2179":5,"2180":6,"2182":1,"2189":1,"2190":1,"2191":1,"2193":5,"2195":1,"2202":2,"2203":5,"2204":4,"2209":1,"2210":1,"2211":3,"2221":1,"2226":2,"2227":23,"2228":3,"2229":1,"2231":3,"2232":12,"2234":5,"2236":1,"2240":1,"2242":1,"2244":2,"2245":1}}],["mx",{"3":{"265":1,"1311":1,"1417":1,"1438":1}}],["mtp",{"0":{"2058":1},"3":{"1192":1,"1213":2,"1215":2,"1456":1,"1486":6,"1493":1,"1494":1,"1611":1,"1654":1,"1685":1,"1686":1,"2058":4,"2060":1}}],["mt",{"2":{"146":1,"147":1},"3":{"146":1,"147":1,"150":1,"1436":1,"1491":1}}],["mfa",{"2":{"909":1,"1063":1,"2197":1,"2203":1},"3":{"0":1,"126":1,"905":1,"909":1,"1059":1,"1063":1,"1270":5,"1289":2,"1293":1,"1300":18,"1437":2,"2197":4,"2203":1}}],["m",{"2":{"2077":1},"3":{"0":1,"69":1,"137":1,"138":1,"649":2,"758":1,"980":2,"1259":2,"1270":1,"1324":6,"1436":2,"1524":2,"1526":2,"1529":1,"1530":1,"1531":8,"1532":4,"1534":1,"1535":1,"1577":1,"1581":5,"1585":4,"1586":1,"1591":1,"1595":1,"1596":3,"1600":1,"1727":1,"1730":1,"2077":2,"2220":1}}],["myprofile",{"3":{"1415":1}}],["mypointstests",{"3":{"1199":1,"1207":2,"1396":2,"1438":2}}],["mypoints",{"3":{"1199":3,"1203":1,"1207":2,"1396":26}}],["mypointsdto",{"3":{"1199":7,"1203":1,"1207":2,"1396":12}}],["mypointspage",{"3":{"1199":3,"1207":2}}],["myvotebypoll",{"3":{"1402":1}}],["myvoteoptionid",{"3":{"1396":1,"1399":1,"1402":9}}],["mymoderatedquestions",{"3":{"1402":1}}],["myupvote",{"3":{"1401":1,"1402":9}}],["mysql",{"3":{"2219":1,"2220":1}}],["mysteriously",{"3":{"2126":1}}],["mystery",{"3":{"1315":1}}],["myself",{"0":{"2062":1},"3":{"1436":2}}],["myscheduleroute",{"3":{"1416":2}}],["myschedulesessionids",{"3":{"1395":4}}],["myschedule",{"3":{"1395":1}}],["myapp",{"3":{"1311":1}}],["myrolenames",{"3":{"1300":1}}],["myordersquery",{"3":{"1199":2,"1207":1}}],["mybadgetests",{"3":{"1199":1,"1207":2,"1396":1,"1438":2}}],["mybadge",{"3":{"1199":2,"1203":1,"1207":2,"1324":1,"1396":23,"1438":1}}],["mybadgedto",{"3":{"1199":7,"1203":1,"1207":2,"1396":14}}],["mybadgepage",{"3":{"1199":3,"1207":2}}],["my",{"3":{"0":1,"317":1,"649":1,"690":3,"694":1,"905":1,"907":1,"1194":1,"1247":1,"1267":2,"1290":1,"1300":2,"1309":3,"1311":4,"1324":2,"1359":3,"1385":1,"1391":3,"1395":21,"1396":24,"1402":3,"1414":1,"1415":4,"1416":2,"1417":1,"1436":2,"1438":1,"1441":1,"1487":1,"1608":1,"1627":3,"1631":2,"1667":2,"1728":1,"1750":3,"1759":1,"1768":1,"1773":3,"1784":1,"1794":1,"1801":1,"1880":1,"1920":2,"2003":1,"2213":1,"2216":1,"2238":1,"2242":1,"2244":1}}],["msg",{"3":{"1455":1}}],["mssqllocaldb",{"3":{"1490":1}}],["mssql",{"3":{"1213":1,"1339":1,"1436":1,"1441":1,"1614":1,"1616":1,"1617":1,"1618":1,"1775":1}}],["ms",{"3":{"0":3,"556":1,"861":7,"862":1,"881":2,"1212":1,"1237":1,"1270":1,"1271":1,"1300":1,"1309":1,"1323":2,"1324":2,"1347":1,"1395":1,"1417":1,"1429":1,"1433":6,"1436":22,"1453":1,"1474":1,"1488":3,"1492":2,"1577":1,"1707":4}}],["msbuild",{"3":{"0":2,"133":1,"135":1,"138":1,"147":1,"266":1,"570":1,"869":1,"1196":1,"1416":1,"1431":2,"1436":2,"1455":1,"1459":2,"1489":1,"1491":1,"1504":1,"1577":2,"1591":1,"1650":1,"1671":1,"1782":1,"2041":2,"2048":1,"2049":1,"2100":2,"2106":2,"2108":1,"2230":1}}],["mp",{"3":{"0":1,"1324":2}}],["mb",{"3":{"0":3,"440":1,"442":1,"875":3,"1116":1,"1117":1,"1118":1,"1212":1,"1323":4,"1347":1,"1350":1,"1373":1,"1380":2,"1389":3,"1395":2,"1411":1,"1414":1,"1415":5,"1417":1,"1443":2,"1447":4,"1451":2,"1456":2,"1465":1,"1467":8,"1478":1,"1490":1,"1631":2,"1640":2,"1748":2,"1765":2,"2126":3,"2128":1,"2166":1}}],["muscle",{"3":{"1144":1}}],["mustcascadesoftdelete",{"3":{"1436":2}}],["mustquote",{"3":{"1311":2}}],["mustnotexceed",{"2":{"1074":1,"1489":2,"1491":1},"3":{"1074":1,"1436":4,"1489":2,"1491":1}}],["must",{"0":{"1291":1,"2189":1},"3":{"0":21,"4":1,"16":1,"17":1,"18":2,"19":1,"24":3,"25":1,"30":1,"37":1,"38":1,"39":1,"41":1,"42":1,"55":1,"62":2,"68":2,"70":1,"92":2,"95":1,"97":2,"98":3,"100":3,"102":2,"108":1,"109":1,"111":2,"117":1,"119":1,"120":1,"126":1,"134":1,"135":1,"149":1,"157":1,"160":1,"168":2,"176":1,"177":3,"178":1,"188":1,"194":1,"195":2,"196":1,"197":1,"198":1,"199":1,"201":1,"209":1,"213":2,"216":1,"217":1,"219":1,"224":1,"235":1,"243":1,"253":1,"255":1,"265":1,"272":1,"279":1,"280":1,"290":1,"302":3,"309":1,"317":2,"318":1,"320":1,"332":1,"333":1,"336":1,"343":1,"348":1,"349":1,"352":1,"358":2,"359":1,"361":2,"362":1,"363":1,"366":1,"380":1,"382":1,"388":1,"390":3,"401":1,"407":1,"412":1,"415":1,"419":1,"424":1,"428":1,"433":1,"434":1,"435":1,"441":1,"448":1,"450":1,"459":1,"465":1,"482":1,"490":1,"498":2,"501":1,"506":2,"509":1,"511":1,"517":3,"518":2,"520":1,"521":1,"527":1,"536":1,"538":2,"541":1,"544":1,"545":1,"549":3,"556":1,"564":1,"572":1,"583":1,"587":1,"590":2,"591":2,"601":1,"626":1,"632":2,"633":1,"645":1,"657":1,"659":1,"667":2,"674":1,"676":1,"681":1,"683":1,"690":1,"698":1,"707":3,"709":3,"716":1,"718":1,"724":1,"757":3,"759":1,"761":1,"762":2,"766":1,"769":1,"774":1,"775":1,"783":2,"790":1,"792":1,"799":1,"809":2,"813":1,"820":1,"821":1,"823":1,"827":2,"829":1,"832":1,"838":1,"840":1,"846":2,"855":1,"856":1,"861":1,"889":1,"897":2,"898":1,"905":1,"914":1,"916":1,"922":2,"926":2,"932":1,"946":1,"948":1,"964":1,"972":2,"976":1,"987":1,"989":1,"990":1,"996":1,"997":1,"1014":1,"1017":1,"1018":2,"1019":1,"1026":1,"1036":1,"1041":2,"1042":1,"1043":1,"1044":1,"1066":1,"1067":1,"1068":1,"1074":1,"1079":1,"1083":2,"1091":4,"1099":2,"1100":3,"1102":2,"1104":1,"1116":4,"1117":1,"1124":1,"1126":1,"1133":1,"1135":1,"1145":1,"1155":1,"1168":3,"1170":1,"1175":1,"1184":1,"1185":2,"1186":4,"1187":1,"1188":1,"1191":1,"1200":1,"1211":1,"1212":5,"1213":1,"1214":2,"1215":1,"1219":1,"1222":1,"1223":1,"1225":1,"1228":1,"1229":7,"1231":3,"1233":2,"1236":2,"1237":17,"1238":2,"1239":1,"1243":1,"1247":24,"1252":1,"1254":1,"1255":1,"1259":26,"1262":2,"1263":2,"1264":6,"1265":3,"1269":4,"1270":38,"1271":15,"1273":3,"1274":1,"1275":2,"1278":1,"1279":1,"1284":1,"1286":87,"1290":1,"1296":1,"1297":1,"1300":71,"1301":14,"1309":17,"1310":10,"1311":44,"1312":8,"1316":2,"1318":3,"1323":47,"1324":80,"1326":1,"1328":2,"1332":2,"1333":2,"1336":1,"1337":4,"1338":3,"1339":51,"1342":1,"1344":3,"1346":1,"1347":1,"1350":28,"1352":3,"1353":2,"1354":1,"1356":1,"1358":1,"1359":138,"1366":4,"1368":1,"1369":4,"1372":1,"1373":1,"1377":1,"1378":3,"1379":3,"1380":19,"1383":1,"1390":1,"1391":1,"1393":1,"1394":1,"1395":44,"1396":65,"1397":1,"1399":1,"1402":29,"1410":1,"1411":1,"1413":1,"1415":38,"1416":16,"1417":45,"1422":1,"1423":3,"1424":1,"1425":1,"1427":7,"1429":3,"1431":1,"1435":2,"1436":306,"1438":47,"1441":2,"1443":4,"1444":1,"1445":1,"1447":3,"1453":5,"1454":4,"1455":13,"1457":3,"1460":1,"1465":2,"1467":13,"1472":1,"1473":1,"1474":2,"1475":1,"1476":3,"1477":1,"1478":1,"1479":1,"1480":1,"1481":5,"1486":3,"1487":1,"1488":4,"1489":10,"1490":1,"1491":1,"1492":1,"1496":2,"1534":1,"1542":1,"1544":1,"1567":1,"1569":1,"1570":1,"1575":1,"1577":3,"1582":2,"1585":2,"1589":1,"1591":2,"1596":2,"1611":1,"1613":1,"1630":7,"1631":17,"1632":9,"1635":12,"1638":1,"1639":5,"1640":5,"1641":8,"1648":1,"1651":1,"1653":3,"1656":1,"1657":1,"1665":1,"1675":1,"1685":1,"1686":4,"1700":1,"1724":3,"1728":1,"1748":1,"1749":2,"1764":6,"1765":10,"1767":25,"1781":1,"1782":1,"1790":1,"1815":1,"1821":1,"1823":1,"1824":2,"1826":1,"1827":1,"1828":2,"1833":1,"1845":1,"1853":1,"1876":1,"1883":1,"1885":1,"1898":4,"1906":1,"1909":1,"1910":1,"1911":1,"1915":1,"1916":1,"1918":2,"1919":2,"1922":1,"1923":2,"1924":2,"1933":1,"1936":1,"1942":1,"1943":1,"1946":1,"1947":1,"1948":2,"1949":1,"1950":3,"1960":1,"1967":2,"1971":1,"1974":1,"1981":1,"1994":1,"1996":1,"1997":1,"2000":1,"2001":4,"2002":1,"2007":1,"2013":1,"2021":1,"2022":1,"2025":4,"2027":2,"2039":1,"2042":1,"2043":2,"2047":1,"2048":1,"2049":1,"2058":2,"2068":2,"2085":1,"2093":1,"2095":2,"2104":2,"2105":1,"2107":1,"2118":1,"2120":1,"2122":1,"2127":1,"2132":1,"2138":1,"2141":1,"2142":3,"2143":1,"2144":1,"2147":1,"2149":1,"2150":1,"2157":1,"2158":2,"2167":3,"2168":2,"2169":1,"2177":1,"2178":1,"2183":3,"2185":1,"2192":1,"2193":1,"2197":1}}],["much",{"3":{"235":1,"384":1,"490":1,"491":1,"492":1,"493":1,"494":1,"625":1,"749":1,"815":1,"819":1,"869":1,"897":1,"1033":1,"1044":1,"1243":1,"1247":1,"1259":1,"1270":2,"1286":4,"1290":1,"1295":1,"1323":1,"1324":7,"1339":4,"1348":1,"1350":1,"1359":2,"1368":1,"1378":1,"1395":2,"1396":8,"1402":1,"1415":1,"1417":2,"1429":1,"1431":1,"1436":4,"1488":2,"1692":1,"1726":1,"1784":1,"1818":1,"1946":1,"1966":1,"1999":1,"2002":1,"2029":1,"2064":1,"2086":1,"2087":1,"2158":1,"2191":1,"2192":1,"2193":1}}],["mute",{"3":{"1436":2}}],["muted",{"3":{"590":1,"2075":1}}],["mutually",{"3":{"667":1,"1191":1,"1196":1,"1300":1,"1323":1,"1395":1,"1396":1,"1427":1,"1749":1,"1765":1}}],["mutual",{"1":{"993":1,"994":1,"995":1,"996":1,"997":1,"998":1,"999":1,"1000":1},"3":{"0":1,"55":1,"135":1,"159":2,"161":1,"993":1,"996":1,"1212":1,"1237":8,"1260":1,"1269":1,"1270":2,"1286":1,"1300":1,"1301":2,"1312":1,"1350":1,"1436":1,"1438":1,"2030":1,"2232":1}}],["mutant",{"3":{"2059":1}}],["mutability",{"3":{"1339":1,"1396":2}}],["mutablepropertyviolations",{"3":{"1436":1}}],["mutableoptions",{"3":{"1199":2,"1207":1}}],["mutablefixtureid",{"3":{"1199":2,"1207":1,"1436":9}}],["mutabletenantcontext",{"3":{"1199":2,"1207":1}}],["mutableauthenticationstateprovider",{"2":{"954":1,"1488":1,"1491":1},"3":{"954":1,"1199":2,"1207":1,"1436":3,"1488":1,"1491":1}}],["mutable",{"3":{"0":1,"340":1,"341":1,"342":1,"343":1,"373":1,"629":1,"881":1,"884":1,"954":1,"962":1,"963":1,"1050":1,"1170":1,"1237":1,"1281":1,"1286":4,"1300":7,"1301":1,"1310":3,"1311":1,"1323":3,"1324":8,"1339":8,"1350":6,"1359":5,"1380":1,"1395":5,"1396":3,"1402":5,"1417":1,"1427":1,"1432":1,"1436":21,"1452":1,"1459":1,"1475":1,"1488":2,"1489":1,"1491":2,"1525":1,"1526":2,"1542":1,"1556":2,"1572":1,"1577":1,"1591":1,"1630":1,"1632":2,"1639":1,"1660":1,"1671":1,"1686":1,"1869":1,"1875":1,"1877":1,"2052":1}}],["mutator",{"3":{"1291":1,"1300":2,"1310":1,"1343":1,"1345":1,"1359":14,"1396":3,"1402":1}}],["mutators",{"3":{"0":1,"109":1,"690":1,"782":1,"1309":1,"1310":4,"1311":2,"1344":1,"1350":1,"1359":3,"1396":2,"1631":1}}],["mutating",{"0":{"1411":1},"3":{"80":1,"258":1,"318":1,"359":1,"388":2,"390":1,"727":1,"905":1,"1247":1,"1270":2,"1283":1,"1286":4,"1293":1,"1300":1,"1301":1,"1309":1,"1311":3,"1323":1,"1324":2,"1339":1,"1359":4,"1375":1,"1380":3,"1395":2,"1396":1,"1402":1,"1415":8,"1429":1,"1436":1,"1460":2,"1475":2,"1556":1,"1664":1,"1701":1,"1923":1,"1995":1,"2142":1}}],["mutationcontexttests",{"3":{"926":1,"1199":1,"1207":1,"1270":1}}],["mutationcontexthandlertests",{"2":{"926":1},"3":{"926":1,"1199":1,"1207":1}}],["mutationcontext",{"3":{"0":1,"926":4,"1199":15,"1203":1,"1207":2,"1260":1,"1265":5,"1270":16,"1352":1,"1359":9,"1411":1,"1415":5,"1666":1}}],["mutation",{"3":{"0":1,"120":1,"241":1,"242":1,"243":1,"244":1,"255":2,"318":3,"322":1,"341":1,"344":1,"386":1,"387":1,"390":3,"715":1,"721":1,"792":1,"905":1,"920":1,"921":2,"922":3,"926":10,"988":1,"1153":1,"1167":1,"1168":1,"1169":1,"1229":1,"1237":3,"1259":2,"1263":1,"1265":6,"1270":28,"1278":1,"1286":14,"1290":1,"1300":5,"1301":5,"1311":7,"1323":3,"1324":3,"1339":2,"1340":1,"1350":10,"1352":2,"1354":1,"1359":51,"1369":1,"1379":1,"1380":14,"1395":9,"1396":7,"1402":9,"1411":1,"1415":11,"1417":2,"1427":1,"1431":1,"1436":7,"1438":1,"1556":1,"1576":2,"1577":2,"1591":1,"1632":1,"1651":1,"1685":1,"1686":1,"1701":1,"1748":2,"1749":1,"1750":1,"1753":1,"1761":1,"1765":2,"1821":1,"1918":2,"1922":1,"1923":2,"1941":1,"1995":1,"2059":2,"2079":1,"2163":2}}],["mutations",{"3":{"0":2,"24":1,"193":1,"201":2,"320":1,"926":1,"1155":1,"1258":1,"1259":4,"1270":3,"1286":1,"1306":1,"1323":1,"1324":2,"1346":1,"1350":2,"1359":4,"1380":9,"1395":2,"1396":2,"1402":2,"1436":1,"1455":2,"1465":1,"1599":1,"1631":1,"1634":2,"1638":1,"1651":1,"1685":1,"1686":2,"1700":1,"1727":1,"1748":1,"1769":1,"1910":1,"1996":1}}],["mutatefirstmultimemberevent",{"3":{"1436":1}}],["mutatetrackedasync",{"3":{"1396":3}}],["mutatechildasync",{"3":{"1395":2}}],["mutatecoreasync",{"2":{"523":1,"921":1},"3":{"0":1,"523":1,"921":1,"926":1,"1270":4,"1359":5,"1402":1,"1415":1}}],["mutateattemptscopetests",{"2":{"926":1},"3":{"926":1,"1199":1,"1207":1}}],["mutateasync",{"3":{"0":1,"922":1,"926":6,"1265":1,"1270":12,"1352":1,"1359":35,"1389":1,"1395":6,"1399":1,"1402":6}}],["mutated",{"3":{"914":1,"922":1,"926":2,"1091":1,"1150":1,"1155":1,"1229":1,"1237":1,"1265":1,"1270":6,"1286":4,"1300":2,"1309":1,"1311":1,"1323":2,"1339":2,"1350":9,"1359":9,"1395":4,"1396":5,"1415":2,"1417":1,"1436":4,"1453":1,"1556":1,"1647":1,"2174":1}}],["mutateentityhandlercore",{"2":{"523":2,"926":1,"1100":1,"1265":1},"3":{"523":2,"926":1,"1100":1,"1199":3,"1203":1,"1207":1,"1212":1,"1260":1,"1265":1,"1270":9,"1359":6,"1402":1,"1415":1,"1496":2,"1666":1}}],["mutateentityhandlerbasetests",{"3":{"1199":1,"1207":1,"1270":3}}],["mutateentityhandlerbase",{"2":{"344":1,"518":1,"523":1,"922":1,"926":1,"1100":1,"1265":1,"1399":1,"1871":1,"2163":1},"3":{"0":3,"341":1,"344":2,"345":1,"444":1,"518":1,"523":3,"921":2,"922":2,"923":1,"926":4,"927":1,"1100":2,"1199":25,"1203":1,"1207":6,"1260":1,"1265":17,"1270":17,"1311":2,"1352":1,"1355":1,"1359":91,"1399":1,"1402":16,"1415":5,"1496":2,"1871":1,"2163":1}}],["mutateentitypayloadhandlerbase",{"3":{"0":1,"926":1,"1199":6,"1203":1,"1207":1,"1260":1,"1265":1,"1270":3,"1352":1,"1359":3,"1411":1,"1415":2}}],["mutate",{"3":{"0":3,"827":1,"920":3,"921":1,"926":8,"927":1,"1068":1,"1153":1,"1212":1,"1237":1,"1247":3,"1260":1,"1261":1,"1265":3,"1270":9,"1286":6,"1300":1,"1301":1,"1309":1,"1324":1,"1342":1,"1343":1,"1350":2,"1359":25,"1369":1,"1380":2,"1395":5,"1396":1,"1399":1,"1402":3,"1415":5,"1423":1,"1436":5,"1543":1,"1651":2,"1666":1,"1808":1,"1820":1,"1891":1,"1937":1,"2230":1}}],["mutates",{"3":{"0":1,"17":1,"341":1,"766":1,"767":1,"1212":1,"1237":1,"1247":1,"1259":2,"1270":1,"1286":4,"1309":1,"1311":3,"1323":2,"1324":1,"1350":4,"1352":1,"1359":9,"1369":1,"1380":2,"1395":2,"1396":1,"1402":5,"1415":1,"1436":6,"1455":1,"1457":1,"1458":1,"1460":1,"1591":1,"1632":1,"1911":1,"2091":2}}],["mudnumericfield",{"3":{"1702":1}}],["mudnavgroup",{"3":{"1324":1}}],["mudpagination",{"3":{"1591":1}}],["mudpopoverprovider",{"3":{"1436":2,"1653":1}}],["mudprogresscircular",{"3":{"1324":1}}],["mudproviderhandles",{"3":{"1199":3,"1207":1,"1432":1,"1436":3,"1488":1}}],["mudmenu",{"3":{"1436":1}}],["mudmessagebox",{"3":{"1415":2,"1436":1,"1488":1,"1526":2}}],["mudrating",{"3":{"1395":2,"1396":3}}],["mudcheckbox",{"3":{"1436":2}}],["mudchip",{"3":{"1395":2}}],["mudcard",{"3":{"1395":2}}],["muddialogprovider",{"3":{"1436":2,"1653":1}}],["muddivider",{"3":{"1395":1}}],["muddatagridrowselector",{"3":{"1436":1}}],["muddatagrid",{"2":{"1715":1,"2072":1,"2079":1},"3":{"0":1,"881":1,"883":1,"1324":14,"1383":1,"1395":6,"1396":1,"1415":2,"1433":1,"1436":6,"1526":1,"1715":1,"1741":1,"1750":7,"2072":2,"2079":1}}],["mudimage",{"3":{"1395":2}}],["muditem",{"3":{"1395":1}}],["mudicon",{"3":{"1324":1}}],["mudiconbutton",{"3":{"1324":2}}],["mudbutton",{"3":{"1324":1,"1436":3}}],["mudblazor",{"0":{"1432":1},"1":{"1324":1},"2":{"265":1,"1698":1},"3":{"0":4,"213":1,"214":1,"215":1,"216":2,"263":1,"265":8,"267":3,"268":1,"556":2,"558":1,"618":2,"620":1,"647":1,"649":3,"650":1,"651":2,"940":1,"954":5,"956":2,"960":1,"1125":1,"1192":1,"1202":1,"1203":1,"1212":1,"1213":1,"1323":1,"1324":129,"1336":1,"1339":4,"1383":1,"1395":51,"1396":11,"1402":2,"1415":4,"1416":5,"1428":1,"1432":3,"1433":2,"1436":25,"1438":3,"1443":1,"1488":7,"1489":1,"1491":2,"1496":3,"1526":2,"1534":1,"1536":1,"1557":1,"1577":8,"1586":1,"1591":4,"1600":1,"1647":1,"1653":2,"1660":1,"1669":3,"1670":1,"1671":1,"1681":1,"1687":1,"1698":1,"1712":2,"1741":1,"1763":1,"1773":1,"2043":1,"2055":1,"2057":1,"2072":3,"2073":1,"2075":2,"2079":4,"2085":3,"2089":1,"2147":1,"2149":1,"2150":3,"2152":1,"2221":1,"2227":1}}],["mudlink",{"3":{"1324":1,"1395":5,"1417":1,"1436":1}}],["mudlocalizer",{"2":{"267":1},"3":{"265":1,"267":1,"1324":22,"2085":1}}],["mudswitch",{"3":{"1396":2}}],["mudsimpletable",{"2":{"1531":1},"3":{"1395":2,"1396":2,"1526":1,"1531":1}}],["mudsnackbarprovider",{"3":{"1324":1,"1436":2,"1653":1}}],["mudselect",{"3":{"618":1,"1395":1,"1396":1,"1488":1}}],["mudavatar",{"3":{"1395":2,"1415":1,"1491":1}}],["mudautocomplete",{"3":{"1395":2}}],["mudappdialogservice",{"2":{"649":1},"3":{"649":1,"954":1,"1199":2,"1203":1,"1207":2,"1324":22}}],["mudappbar",{"3":{"273":1}}],["mudalert",{"3":{"109":1,"1324":1,"1395":4,"1396":2,"1436":2}}],["mudform",{"2":{"128":1,"2045":1},"3":{"109":1,"117":1,"128":1,"1324":9,"1384":1,"1395":25,"1396":5,"1415":1,"1436":3,"1489":1,"1526":1,"1535":1,"1591":1,"2045":1}}],["mudtext",{"3":{"1324":1}}],["mudtextfield",{"3":{"1324":1,"1395":2,"1396":2,"1402":2}}],["mudtoastservicetests",{"3":{"1199":1,"1207":2,"1324":3}}],["mudtoastservice",{"3":{"649":1,"954":1,"1199":3,"1203":1,"1207":2,"1324":18,"1496":1}}],["mudtable",{"2":{"554":1},"3":{"554":1,"556":1,"1324":1}}],["mudtablepager",{"2":{"651":1,"2057":1},"3":{"0":1,"618":2,"651":1,"1436":2,"1488":2,"2057":1}}],["mudtranslations",{"2":{"267":1,"268":1,"2085":1},"3":{"265":2,"267":1,"268":2,"1199":2,"1203":1,"1207":2,"1324":10,"1436":2,"1496":1,"1577":2,"2085":3}}],["mudtheme",{"2":{"2075":1},"3":{"0":1,"273":2,"1324":6,"2075":2,"2083":1}}],["mudthemeprovider",{"2":{"272":1,"273":1,"2075":1,"2086":1},"3":{"0":1,"272":1,"273":1,"1212":1,"1324":4,"1436":1,"1577":1,"1653":1,"2075":1,"2086":1,"2232":1}}],["mud",{"3":{"0":2,"273":1,"275":1,"954":1,"1324":6,"1436":7,"1653":1,"2075":1}}],["multidimensional",{"3":{"2220":1}}],["multidevicerefreshsessionsandauditdeletioncolumns",{"3":{"1209":2}}],["multithreaded",{"3":{"2220":1}}],["multiline",{"3":{"1396":1,"1436":1,"1455":1}}],["multifactor",{"2":{"2197":1},"3":{"1300":7,"2197":1}}],["multifactormethodrecoverycode",{"3":{"1300":1}}],["multifactormethodtotp",{"3":{"1300":1}}],["multifactormethodfor",{"3":{"1300":2}}],["multifactormethod",{"3":{"1300":6}}],["multifactorrequired",{"2":{"1263":1},"3":{"126":1,"1263":1,"1270":1,"1821":1}}],["multihandlereventhandler2",{"3":{"1199":2,"1207":1}}],["multihandlereventhandler1",{"3":{"1199":2,"1207":1}}],["multihandlerevent",{"3":{"1199":4,"1207":1}}],["multipartformdatacontent",{"3":{"1395":2,"1415":2}}],["multipart",{"3":{"1116":1,"1347":1,"1350":2,"1389":1,"1395":4,"1411":1,"1415":3,"1447":1,"1631":2,"1640":1,"1748":1,"1765":1}}],["multiplying",{"3":{"1247":1,"1323":1,"1396":1}}],["multiply",{"3":{"657":1,"685":1,"716":1,"819":1,"1229":1,"1237":1,"1242":1,"1247":4,"1286":2,"1339":2,"1359":1,"1449":1,"1863":1,"1925":1,"2032":1}}],["multiplicity",{"3":{"1396":1}}],["multiplication",{"3":{"0":1,"178":1,"827":1,"1339":1}}],["multipliers",{"3":{"1339":1}}],["multiplier",{"3":{"714":1,"742":1,"1339":2,"2013":1}}],["multiplies",{"0":{"2035":1},"3":{"509":1,"682":1,"700":1,"740":1,"783":1,"1232":1,"1237":1,"1286":1,"1300":1,"1337":1,"1402":1,"1417":1,"2027":1,"2035":1,"2037":1,"2038":1}}],["multiplied",{"3":{"19":1,"23":1,"1126":1,"1256":1,"1259":2,"1275":1,"1339":2,"1395":1,"1416":1,"1841":1,"2027":1,"2038":1}}],["multiplexed",{"3":{"1329":1,"1339":1,"1443":1}}],["multiplexer",{"3":{"0":2,"155":1,"159":1,"178":1,"243":2,"245":1,"257":1,"260":1,"261":1,"733":1,"996":1,"1301":11,"1323":1,"1332":1,"1339":8,"1438":1,"1443":1,"1577":1,"1666":1,"1668":1,"1909":1,"1911":1,"1923":3}}],["multiple",{"1":{"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1},"3":{"0":1,"10":1,"46":1,"135":1,"163":1,"839":1,"1085":1,"1237":1,"1247":1,"1259":1,"1270":2,"1286":4,"1300":3,"1311":3,"1312":1,"1323":3,"1324":2,"1347":1,"1350":1,"1359":3,"1369":1,"1395":2,"1397":1,"1417":1,"1429":1,"1436":5,"1464":1,"1488":1,"1537":1,"1544":1,"1555":1,"1556":1,"1630":2,"1639":3,"1668":1,"1767":1,"1773":1,"1792":1,"1940":1,"2027":1,"2220":1}}],["multisourceorderconfiguration",{"3":{"1199":1,"1207":1}}],["multisourceorder",{"3":{"1199":3,"1207":1}}],["multisourcecustomerconfiguration",{"3":{"1199":1,"1207":1}}],["multisourcecustomer",{"3":{"1199":4,"1207":1}}],["multisourcetestevent",{"3":{"1199":1,"1207":1}}],["multisourcesqliteintegrationtests",{"2":{"164":1,"2053":1,"2060":1},"3":{"164":1,"1198":1,"1199":2,"1207":8,"1286":1,"1496":1,"2053":1,"2060":1}}],["multisessionspeaker",{"3":{"1199":9,"1203":1,"1207":1,"1347":1,"1350":3,"1359":3,"1395":1}}],["multiselect",{"3":{"757":1,"1455":1}}],["multicast",{"3":{"0":1,"380":1,"382":1,"1324":2,"1400":2,"1402":1,"1945":1,"1949":1}}],["multi",{"1":{"262":1,"263":1,"264":1,"265":1,"266":1,"267":1,"268":1,"269":1,"695":1,"696":1,"697":1,"698":1,"699":1,"700":1,"701":1,"702":1,"703":1,"902":1,"903":1,"904":1,"905":1,"906":1,"907":1,"908":1,"909":1,"910":1},"3":{"0":9,"12":1,"30":1,"68":2,"84":1,"86":1,"149":1,"158":1,"166":1,"227":1,"243":1,"245":1,"258":1,"262":1,"264":1,"283":1,"340":1,"386":1,"390":1,"392":1,"413":1,"442":1,"462":1,"491":1,"501":1,"517":1,"535":1,"536":1,"555":1,"657":1,"659":1,"660":1,"670":1,"695":1,"706":1,"708":1,"748":1,"750":1,"809":2,"810":2,"827":1,"897":1,"902":1,"926":1,"988":1,"990":1,"997":1,"998":1,"1012":1,"1013":1,"1067":1,"1212":6,"1217":1,"1237":1,"1247":2,"1259":1,"1267":1,"1270":6,"1271":1,"1276":1,"1283":1,"1286":24,"1287":1,"1296":1,"1300":17,"1301":4,"1311":7,"1316":1,"1323":6,"1324":9,"1332":1,"1333":1,"1336":1,"1339":5,"1350":6,"1359":5,"1367":1,"1380":5,"1395":8,"1415":2,"1416":2,"1417":1,"1427":1,"1436":14,"1437":1,"1438":3,"1441":1,"1445":1,"1449":1,"1454":1,"1455":1,"1459":1,"1466":1,"1474":1,"1489":1,"1496":4,"1499":1,"1526":3,"1529":1,"1534":1,"1541":2,"1547":1,"1548":1,"1566":1,"1570":1,"1572":1,"1577":3,"1599":1,"1629":2,"1631":2,"1638":1,"1653":1,"1661":1,"1664":2,"1667":1,"1673":1,"1675":2,"1677":1,"1686":1,"1698":1,"1713":1,"1720":1,"1727":2,"1774":1,"1780":1,"1795":1,"1799":1,"1853":1,"1869":1,"1920":1,"1940":1,"1948":1,"1949":1,"1950":1,"1971":1,"1985":2,"2001":1,"2008":1,"2033":1,"2034":1,"2037":2,"2053":1,"2081":1,"2085":1,"2086":1,"2120":1,"2162":1,"2220":4,"2221":1,"2227":2,"2230":1,"2232":4,"2240":1}}],["mobility",{"3":{"1630":1}}],["mobileviewport",{"3":{"1436":1}}],["mobilepage",{"3":{"1324":1}}],["mobilepagesize",{"3":{"881":1,"1324":1,"1395":2}}],["mobilelist",{"3":{"1324":2}}],["mobiletoprowe2etests",{"3":{"1199":1,"1207":2,"1436":4}}],["mobiletotalitems",{"3":{"881":1,"1324":1,"1395":1}}],["mobilecardlist",{"2":{"2059":1},"3":{"1436":2,"2059":1}}],["mobilecardlisttests",{"3":{"1199":1,"1207":2}}],["mobilecurrentpage",{"3":{"881":1,"1324":3,"1395":1}}],["mobilehostparitytests",{"3":{"1199":1,"1207":2,"1436":3}}],["mobileitems",{"3":{"881":1,"1324":1,"1395":1}}],["mobileinfinitescrolllisttests",{"3":{"1199":1,"1207":2,"1324":1}}],["mobileinfinitescrolllist",{"2":{"112":1,"1383":1,"2059":1,"2073":1},"3":{"0":1,"109":2,"111":1,"112":2,"1199":18,"1203":1,"1207":2,"1324":12,"1383":1,"1395":12,"1396":1,"1436":1,"1526":1,"1577":1,"1591":1,"1600":1,"2059":1,"2073":1}}],["mobilenavkeyboarde2etests",{"2":{"616":1},"3":{"616":1,"618":1,"1199":1,"1207":2}}],["mobilereleaserunbook",{"0":{"1481":1},"3":{"422":1,"423":1,"424":1,"425":1,"426":2,"1416":1,"1470":1,"1481":16,"1482":1,"1483":1,"1526":1}}],["mobileredirectscheme",{"3":{"415":1,"1416":1,"1417":4}}],["mobile",{"0":{"1669":1},"1":{"417":1,"418":1,"419":1,"420":1,"421":1,"422":1,"423":1,"424":1,"425":1,"426":1,"427":1,"428":1,"429":1,"430":1},"3":{"0":2,"340":1,"387":1,"417":1,"419":1,"618":1,"649":1,"652":1,"881":3,"905":1,"907":1,"1124":1,"1212":1,"1300":3,"1311":3,"1323":1,"1324":29,"1350":1,"1380":1,"1383":2,"1385":1,"1395":39,"1396":9,"1402":2,"1411":1,"1414":1,"1415":5,"1416":2,"1417":5,"1436":8,"1438":5,"1459":1,"1471":1,"1472":1,"1481":1,"1487":1,"1490":1,"1496":1,"1524":2,"1526":5,"1531":3,"1534":2,"1559":2,"1577":2,"1591":2,"1595":1,"1596":1,"1597":1,"1599":1,"1629":1,"1640":1,"1641":4,"1667":1,"1669":3,"1673":1,"1675":1,"1712":2,"1713":1,"1714":4,"1874":1,"1976":2,"2072":1,"2073":4,"2079":3,"2116":1,"2121":1,"2232":1}}],["mouse",{"3":{"1606":1,"1740":1}}],["mount=type=secret",{"3":{"1445":1}}],["mounted",{"3":{"869":1,"1300":3,"1309":1,"1311":1,"1323":2,"1324":4,"1380":4,"1395":3,"1396":5,"1402":2,"1415":5,"1455":1,"1458":1,"2149":1}}],["mounts",{"3":{"217":1,"723":1,"871":1,"1311":1,"1324":2,"1380":1,"1395":2,"1396":1,"1416":1,"1432":1,"1666":1}}],["mount",{"3":{"0":1,"871":1,"1300":1,"1396":1,"1445":1,"1666":1,"2153":1}}],["mo",{"3":{"1436":2,"1534":1,"1671":1}}],["motion",{"3":{"1433":1,"1436":1}}],["motive",{"3":{"1270":1,"1300":2,"1395":1,"1402":1}}],["motivation",{"3":{"1323":2,"1339":1,"1359":1,"1395":1,"1415":1,"1436":1}}],["motivations",{"3":{"1237":1}}],["motivating",{"3":{"1286":1,"1324":2,"1396":1}}],["motivate",{"3":{"1259":1}}],["motivates",{"3":{"485":1,"1296":1,"1309":1,"1359":1}}],["motivated",{"3":{"0":1,"105":1,"318":1,"686":1,"829":1,"836":1,"1396":1,"1413":1,"1436":1,"1438":1,"1467":3,"1492":1,"2027":1}}],["motor",{"3":{"1417":2}}],["moot",{"3":{"915":1,"1395":1}}],["mojibake",{"3":{"741":1,"1311":1}}],["mornings",{"3":{"1457":1}}],["morning",{"3":{"689":1,"1342":1,"1350":1,"1359":2,"1364":1,"1369":1}}],["more",{"0":{"1335":1,"1376":1,"2051":1,"2200":1},"3":{"0":11,"7":1,"27":1,"33":1,"49":1,"81":1,"95":1,"96":1,"109":2,"111":2,"126":1,"130":1,"135":1,"137":1,"141":1,"145":1,"185":1,"194":1,"195":1,"243":1,"245":1,"259":1,"264":1,"340":1,"350":1,"361":2,"365":2,"382":1,"390":1,"391":1,"392":1,"413":1,"423":1,"461":1,"463":1,"470":1,"497":1,"518":1,"530":2,"549":2,"551":2,"566":1,"572":1,"590":1,"592":1,"597":1,"600":1,"601":1,"609":3,"633":1,"635":1,"673":1,"674":3,"690":1,"706":1,"708":1,"723":1,"725":1,"743":1,"758":1,"767":1,"782":1,"800":1,"827":1,"829":1,"833":1,"838":1,"849":1,"854":1,"856":2,"862":1,"871":2,"881":1,"905":1,"907":1,"920":1,"924":1,"926":2,"937":1,"941":3,"979":1,"980":1,"981":1,"982":2,"987":2,"995":1,"1004":1,"1006":1,"1013":1,"1019":2,"1020":1,"1034":1,"1036":1,"1051":2,"1061":1,"1067":1,"1069":2,"1085":1,"1089":1,"1091":1,"1100":1,"1101":1,"1116":2,"1134":1,"1142":1,"1143":1,"1145":1,"1154":1,"1156":2,"1163":1,"1168":1,"1170":1,"1219":1,"1229":6,"1237":3,"1243":1,"1247":1,"1252":1,"1254":1,"1255":1,"1256":1,"1258":1,"1259":7,"1265":1,"1268":1,"1270":11,"1273":1,"1275":2,"1277":1,"1278":1,"1282":1,"1284":1,"1285":3,"1286":22,"1294":1,"1300":13,"1301":2,"1309":2,"1311":13,"1314":1,"1317":1,"1320":1,"1322":1,"1323":9,"1324":25,"1326":1,"1328":1,"1339":10,"1347":1,"1348":1,"1350":7,"1352":2,"1359":33,"1364":1,"1369":2,"1375":1,"1379":1,"1380":5,"1395":18,"1396":21,"1401":1,"1402":2,"1405":1,"1407":1,"1409":2,"1415":11,"1416":1,"1417":5,"1421":1,"1427":3,"1431":2,"1436":36,"1438":3,"1441":3,"1442":3,"1443":1,"1444":1,"1455":2,"1456":2,"1457":1,"1460":1,"1465":2,"1467":8,"1475":1,"1478":1,"1488":2,"1489":2,"1492":3,"1496":4,"1503":1,"1508":1,"1534":1,"1631":1,"1637":3,"1638":1,"1640":1,"1651":1,"1654":1,"1662":1,"1673":1,"1683":1,"1693":1,"1695":1,"1724":1,"1727":1,"1764":6,"1765":1,"1778":1,"1781":1,"1793":1,"1794":1,"1799":1,"1802":1,"1805":2,"1806":1,"1810":1,"1811":2,"1826":1,"1828":1,"1833":1,"1836":1,"1845":1,"1851":2,"1852":1,"1870":1,"1874":1,"1880":1,"1892":1,"1894":3,"1902":1,"1907":1,"1909":1,"1915":1,"1923":1,"1925":1,"1929":1,"1930":2,"1942":1,"1945":1,"1949":1,"1958":1,"1962":1,"1965":1,"1971":2,"1972":1,"1973":1,"1975":1,"1986":1,"1989":1,"1991":1,"1995":2,"2001":1,"2010":1,"2035":1,"2042":1,"2043":1,"2046":1,"2047":2,"2049":1,"2050":1,"2055":2,"2057":2,"2060":3,"2062":1,"2063":1,"2067":1,"2073":2,"2085":1,"2086":1,"2104":1,"2121":1,"2123":1,"2126":1,"2131":2,"2135":1,"2136":1,"2145":1,"2155":1,"2156":3,"2158":1,"2168":2,"2180":1,"2183":1,"2187":1,"2192":1,"2193":1,"2197":1,"2199":1,"2201":1,"2202":1,"2213":1,"2238":1}}],["mockable",{"3":{"1286":2,"1324":3,"1415":1}}],["mocks",{"3":{"1199":28,"1207":17,"1286":2,"1323":2,"1359":2,"1395":1,"1396":1,"1436":2,"1438":2,"1491":1,"1685":1}}],["mocking",{"3":{"956":1,"1213":1,"1286":1,"1323":1,"1359":1,"1436":2,"1440":1,"1685":1,"2060":1}}],["mocked",{"3":{"914":1,"998":1,"1286":1,"1323":2,"1324":1,"1359":1,"1396":1,"1436":7,"1438":5,"1487":1,"1490":1,"1612":1,"1654":1,"1671":1,"1685":2,"2052":1}}],["mock",{"3":{"414":1,"1271":1,"1286":5,"1300":3,"1323":1,"1324":5,"1359":1,"1395":1,"1396":5,"1429":1,"1436":19,"1438":4,"1453":4,"1488":1,"1490":1,"1538":1,"1551":1,"1577":1,"1617":2,"1686":1,"2053":1}}],["moq",{"3":{"0":1,"954":1,"956":2,"960":1,"1213":1,"1369":2,"1436":5,"1488":1,"1686":2,"2058":1,"2219":1}}],["momentarily",{"3":{"1402":1,"1454":1}}],["moments",{"3":{"135":1,"1324":1}}],["moment",{"3":{"0":1,"20":1,"24":1,"54":1,"160":1,"351":1,"358":1,"499":2,"527":1,"539":1,"557":1,"565":1,"628":1,"692":1,"714":1,"741":1,"765":1,"767":1,"768":1,"798":1,"800":1,"828":1,"840":1,"889":1,"891":1,"971":1,"1090":1,"1153":1,"1160":1,"1212":1,"1223":1,"1237":1,"1247":2,"1249":1,"1254":1,"1256":1,"1259":4,"1265":1,"1270":2,"1271":2,"1275":1,"1286":11,"1300":5,"1301":1,"1309":1,"1310":1,"1311":5,"1312":2,"1318":1,"1323":6,"1324":6,"1330":1,"1339":4,"1350":2,"1358":3,"1359":11,"1369":1,"1390":1,"1393":1,"1395":2,"1396":7,"1402":2,"1405":1,"1415":5,"1416":1,"1417":6,"1436":9,"1438":2,"1465":2,"1467":1,"1489":2,"1534":1,"1577":1,"1585":1,"1653":1,"1654":1,"1708":1,"1792":1,"1805":1,"1836":1,"1858":1,"1863":1,"1887":1,"1888":1,"1899":1,"1913":1,"1918":1,"1929":1,"1950":1,"1960":1,"1972":1,"1974":1,"1978":1,"1979":1,"1985":1,"1988":1,"1998":1,"2006":1,"2040":1,"2045":1,"2063":1,"2081":1,"2116":1,"2126":3,"2127":1,"2129":1,"2135":1,"2140":1,"2146":1,"2150":1,"2166":1,"2167":1,"2171":1,"2194":2}}],["mon",{"3":{"1456":1,"1460":2,"1490":1}}],["monetary",{"3":{"1237":1}}],["moneytestdbcontext",{"3":{"1199":2,"1207":1}}],["moneytests",{"3":{"1199":1,"1207":2}}],["moneytowire",{"3":{"657":1}}],["moneyserializationtests",{"3":{"1199":1,"1207":2,"1438":2}}],["moneyextensionstests",{"3":{"1199":1,"1207":3,"1324":1}}],["moneyextensions",{"3":{"980":1,"1199":1,"1203":1,"1207":2,"1208":2,"1237":1,"1324":4,"1496":1,"1591":2,"1596":1,"1600":1}}],["moneyfromwire",{"3":{"657":2}}],["moneyv1",{"3":{"0":1,"657":1}}],["money",{"2":{"655":1,"658":1,"659":1,"660":3,"1025":1},"3":{"0":3,"535":1,"536":1,"655":2,"657":29,"658":5,"659":5,"660":7,"689":1,"767":1,"768":1,"793":1,"1020":1,"1025":2,"1026":1,"1168":1,"1199":13,"1203":1,"1207":2,"1208":1,"1212":1,"1230":1,"1234":13,"1237":41,"1247":1,"1282":2,"1286":11,"1311":1,"1312":3,"1324":13,"1395":1,"1422":1,"1435":1,"1438":3,"1455":4,"1492":1,"1496":2,"1541":1,"1577":1,"1585":2,"1591":3,"1596":1,"1600":3,"1662":2,"1749":1,"1764":6,"1765":2,"1766":1,"1770":1,"1810":4,"2161":1,"2163":1,"2169":1}}],["monadic",{"3":{"1220":1,"1229":1,"1805":1}}],["months",{"3":{"888":1,"1019":1,"1436":2,"1661":1,"1794":1,"1809":1,"1913":1,"1948":1,"1951":1,"2039":1,"2043":1,"2100":1,"2147":1,"2200":1}}],["month",{"3":{"827":1,"1020":2,"1118":1,"1270":2,"1395":1,"1457":1,"1465":1,"1467":8,"1474":1,"1476":1,"1709":1,"1958":1,"1973":1,"2043":1,"2057":1,"2158":1}}],["monthlybudgetamount",{"3":{"1467":1,"1591":1}}],["monthly",{"3":{"0":1,"591":1,"609":1,"625":1,"626":1,"627":1,"628":1,"765":2,"827":1,"870":1,"1020":1,"1116":1,"1436":1,"1446":1,"1455":2,"1456":1,"1458":1,"1460":2,"1467":8,"1469":2,"1474":2,"1475":1,"1484":1,"1524":1,"1525":1,"1526":1,"1531":1,"1535":1,"1589":2,"1591":1,"1595":1,"1596":3,"1598":1,"1678":1,"1709":1,"2034":2,"2047":1,"2211":1}}],["mondays",{"3":{"1475":1,"2034":1}}],["monday",{"3":{"625":3,"766":1,"1438":1,"1455":1,"1456":1,"1457":3,"1460":3,"1461":1,"1475":1,"1484":1,"1490":1,"1492":1,"1534":1,"1591":2,"1599":1}}],["monitors",{"3":{"1417":1}}],["monitored",{"3":{"1324":1,"1465":1,"1467":2}}],["monitoringviewresourceregex",{"3":{"1436":2}}],["monitoringworkbookordashboard",{"3":{"1436":2,"1467":1}}],["monitoring",{"3":{"109":1,"827":1,"1311":1,"1417":1,"1436":2,"1467":2,"1474":1,"1927":1,"2220":1}}],["monitor",{"1":{"2154":1,"2155":1,"2156":1,"2157":1,"2158":1,"2159":1,"2160":1},"3":{"0":2,"395":1,"397":2,"401":1,"402":1,"790":1,"914":1,"997":1,"1068":1,"1213":1,"1333":4,"1339":11,"1379":1,"1436":1,"1438":1,"1442":2,"1443":3,"1447":1,"1450":1,"1467":7,"1474":2,"1526":1,"1577":1,"1668":1,"1670":1,"1779":1,"2010":3,"2014":1,"2153":2,"2154":3,"2156":2,"2157":1,"2160":2,"2169":1,"2209":1,"2215":1}}],["monotonic",{"3":{"1390":1,"1395":1,"1396":1,"1417":1,"1438":1}}],["monotonically",{"3":{"690":1,"1286":1,"1324":1,"1396":2,"1465":1}}],["monopolizing",{"3":{"176":1}}],["mono",{"3":{"0":1,"27":1,"39":1,"109":1,"1161":1,"1162":1,"1436":12}}],["monolithic",{"3":{"1359":1,"1396":1}}],["monoliths",{"3":{"1211":1,"2212":1}}],["monolith",{"0":{"1509":1,"1653":1,"1663":1,"1783":1,"1790":1},"1":{"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"1788":1,"1789":1,"1790":1,"1791":1,"1792":1,"1793":1,"1847":1,"1848":1,"1849":1,"1850":1,"1851":1,"1852":1,"1853":1,"2087":1,"2088":1,"2089":1,"2090":1,"2091":1,"2092":1,"2093":1,"2094":1,"2095":1,"2096":1,"2097":1,"2098":1},"3":{"0":10,"20":1,"30":2,"31":3,"32":1,"47":1,"56":1,"58":2,"59":2,"60":1,"61":1,"62":2,"105":1,"196":1,"201":1,"224":1,"242":1,"243":2,"247":1,"282":1,"329":1,"396":1,"405":1,"448":1,"582":3,"583":1,"587":1,"639":1,"640":1,"664":1,"674":1,"734":1,"781":1,"783":1,"845":1,"931":1,"933":2,"1212":4,"1248":1,"1252":1,"1257":3,"1259":16,"1270":2,"1273":1,"1279":1,"1281":2,"1286":15,"1287":1,"1288":1,"1300":7,"1301":3,"1307":1,"1309":1,"1310":1,"1311":6,"1312":4,"1313":1,"1320":2,"1323":10,"1339":1,"1350":2,"1359":4,"1396":4,"1402":2,"1415":2,"1429":1,"1436":5,"1447":1,"1471":1,"1489":1,"1508":1,"1509":1,"1534":1,"1536":1,"1544":2,"1577":3,"1641":1,"1646":2,"1647":2,"1648":1,"1652":4,"1653":2,"1656":4,"1658":1,"1659":1,"1663":3,"1670":1,"1675":1,"1683":1,"1692":1,"1697":1,"1779":2,"1780":2,"1781":1,"1783":3,"1786":1,"1787":1,"1788":4,"1789":1,"1790":5,"1792":1,"1793":3,"1815":1,"1842":3,"1846":1,"1847":5,"1848":1,"1849":4,"1850":1,"1853":2,"1858":1,"1864":1,"1878":1,"1884":5,"1886":1,"1888":2,"1893":2,"1895":1,"1896":2,"1899":1,"1916":1,"1924":1,"1926":1,"1986":1,"1991":1,"2004":1,"2008":1,"2009":1,"2014":1,"2015":2,"2016":1,"2017":1,"2020":2,"2028":1,"2035":1,"2043":1,"2087":1,"2111":1,"2130":1,"2131":1,"2135":1,"2154":1,"2155":1,"2169":1,"2180":1,"2193":1,"2203":1,"2204":1,"2205":1,"2207":1,"2210":1,"2213":2,"2214":2,"2218":1,"2219":1,"2221":1,"2226":1,"2227":1,"2228":1,"2230":2,"2232":1,"2239":2,"2243":1}}],["movable",{"3":{"373":1,"1247":1,"1436":1}}],["moving",{"3":{"0":4,"33":1,"59":1,"164":1,"166":1,"286":1,"291":1,"295":1,"374":1,"591":1,"609":1,"610":1,"627":1,"631":1,"633":1,"635":1,"691":1,"838":1,"856":1,"891":1,"982":1,"1003":1,"1019":1,"1034":1,"1051":1,"1212":1,"1233":1,"1237":2,"1259":2,"1263":1,"1270":2,"1271":1,"1282":1,"1286":2,"1293":1,"1300":2,"1301":1,"1309":1,"1311":3,"1323":6,"1342":3,"1350":4,"1353":1,"1359":14,"1369":2,"1380":1,"1392":1,"1395":12,"1396":2,"1402":3,"1415":3,"1417":1,"1428":1,"1436":6,"1438":1,"1447":1,"1459":1,"1465":1,"1477":2,"1492":2,"1534":1,"1577":1,"1585":1,"1631":2,"1638":1,"1655":1,"1727":1,"1735":1,"1765":1,"1801":1,"1854":1,"1885":1,"1904":1,"1968":1,"1975":1,"1990":1,"2046":1,"2047":1,"2097":1,"2107":1,"2187":2,"2198":1}}],["movenext",{"3":{"1436":2}}],["movenextasync",{"3":{"1427":1,"1436":2}}],["movement",{"3":{"1145":1,"1496":8,"1575":2,"1582":1,"1585":1,"1769":1}}],["move",{"0":{"139":1,"140":1,"142":1,"1857":1},"3":{"0":10,"24":3,"46":1,"59":1,"102":1,"130":2,"135":1,"136":1,"138":1,"140":1,"141":1,"145":1,"150":2,"165":1,"177":1,"242":1,"254":1,"390":2,"407":1,"440":1,"488":1,"492":1,"493":1,"494":2,"545":1,"590":1,"635":1,"640":1,"676":1,"688":1,"690":1,"691":1,"698":1,"725":2,"726":1,"727":1,"741":1,"765":1,"767":1,"790":1,"791":1,"812":1,"819":1,"827":1,"838":1,"842":1,"849":3,"882":1,"899":1,"921":1,"926":1,"932":1,"954":1,"971":1,"980":1,"1004":3,"1005":1,"1006":3,"1012":3,"1014":1,"1019":1,"1041":1,"1053":1,"1075":1,"1077":1,"1085":1,"1134":1,"1137":1,"1176":1,"1212":1,"1214":1,"1229":1,"1233":1,"1237":1,"1249":1,"1250":2,"1259":4,"1270":2,"1271":1,"1275":1,"1286":5,"1297":1,"1300":6,"1301":1,"1309":2,"1310":1,"1311":5,"1312":1,"1323":7,"1324":13,"1339":5,"1343":1,"1350":2,"1353":1,"1359":8,"1369":3,"1380":1,"1385":1,"1391":1,"1392":1,"1395":8,"1396":11,"1399":1,"1402":7,"1415":6,"1416":1,"1417":2,"1436":22,"1438":1,"1441":1,"1442":1,"1455":1,"1461":1,"1467":2,"1482":1,"1489":3,"1492":2,"1496":8,"1500":1,"1524":1,"1525":1,"1577":2,"1578":1,"1607":1,"1618":1,"1663":1,"1665":1,"1673":1,"1675":1,"1686":1,"1687":1,"1697":1,"1701":1,"1735":1,"1741":1,"1749":1,"1765":2,"1802":1,"1817":1,"1824":1,"1826":1,"1857":1,"1860":1,"1861":1,"1862":1,"1866":1,"1893":1,"1914":1,"1923":1,"1924":1,"1950":1,"1953":1,"1955":1,"2001":1,"2011":1,"2032":1,"2047":1,"2070":2,"2075":1,"2106":1,"2124":1,"2128":1,"2152":1,"2167":1,"2187":1,"2194":1,"2232":1}}],["moves",{"0":{"539":1},"3":{"0":7,"25":1,"57":1,"126":2,"141":1,"147":1,"150":1,"170":1,"198":1,"203":1,"216":1,"228":1,"253":1,"255":2,"258":1,"311":1,"386":1,"387":1,"392":1,"407":1,"459":1,"464":1,"490":1,"535":1,"536":1,"540":2,"591":1,"592":1,"638":1,"651":1,"691":1,"727":1,"743":1,"781":1,"799":1,"803":1,"804":1,"805":1,"812":1,"818":2,"831":1,"840":2,"891":2,"916":1,"955":1,"959":1,"971":1,"974":1,"990":1,"1004":1,"1006":2,"1012":3,"1018":3,"1069":1,"1077":1,"1083":1,"1089":1,"1092":1,"1093":1,"1125":1,"1126":1,"1129":1,"1136":1,"1153":1,"1184":1,"1212":1,"1229":1,"1259":4,"1263":1,"1270":1,"1271":1,"1286":4,"1300":2,"1309":2,"1311":4,"1323":2,"1324":13,"1326":1,"1339":3,"1350":2,"1352":1,"1355":1,"1359":5,"1369":1,"1380":1,"1390":1,"1395":3,"1396":7,"1402":2,"1413":1,"1415":4,"1417":1,"1422":1,"1426":1,"1435":1,"1436":13,"1438":1,"1441":1,"1445":1,"1455":4,"1460":1,"1467":2,"1475":1,"1476":3,"1496":4,"1575":1,"1582":1,"1607":2,"1644":1,"1648":1,"1660":1,"1666":1,"1686":1,"1695":1,"1701":1,"1727":1,"1741":2,"1742":1,"1748":1,"1765":1,"1799":1,"1812":1,"1823":1,"1843":2,"1854":1,"1856":1,"1858":1,"1884":1,"1896":1,"1961":1,"2043":1,"2047":1,"2058":1,"2080":1,"2086":1,"2141":1,"2144":1,"2146":1,"2152":1,"2160":1,"2161":1,"2176":1,"2177":2,"2232":2}}],["moved",{"0":{"95":1},"3":{"0":5,"43":1,"57":1,"59":1,"82":1,"91":1,"93":1,"99":1,"104":3,"111":1,"125":1,"126":1,"130":3,"137":1,"138":5,"139":7,"140":1,"142":2,"161":1,"167":1,"168":1,"171":1,"179":1,"180":1,"201":1,"223":1,"238":1,"241":1,"243":1,"248":1,"250":1,"251":2,"252":2,"254":3,"255":2,"256":3,"257":1,"258":1,"259":1,"261":2,"276":1,"296":1,"322":1,"323":1,"364":1,"365":1,"374":1,"383":1,"395":1,"407":1,"418":2,"424":1,"425":2,"426":1,"428":3,"429":4,"430":1,"446":1,"453":1,"457":2,"463":2,"464":1,"465":1,"468":1,"475":1,"476":1,"478":1,"487":1,"488":1,"489":1,"490":2,"491":1,"492":2,"493":3,"495":2,"497":1,"516":2,"522":1,"524":1,"528":1,"534":2,"536":1,"539":1,"540":2,"543":1,"547":1,"549":1,"551":1,"552":2,"559":1,"607":2,"609":1,"611":1,"618":1,"631":1,"632":1,"638":1,"647":1,"652":1,"677":1,"688":1,"693":1,"696":2,"714":1,"720":1,"747":2,"821":1,"822":1,"825":2,"832":2,"845":1,"867":1,"875":1,"877":1,"909":1,"926":1,"929":1,"934":1,"967":1,"975":1,"983":2,"994":1,"1016":2,"1021":2,"1037":1,"1040":1,"1049":2,"1054":1,"1078":1,"1099":1,"1127":1,"1133":1,"1237":1,"1247":1,"1259":2,"1270":1,"1271":1,"1286":3,"1300":1,"1311":1,"1323":4,"1324":6,"1339":2,"1342":1,"1350":6,"1359":2,"1366":1,"1367":1,"1369":2,"1371":1,"1380":2,"1395":7,"1396":6,"1402":2,"1409":1,"1415":4,"1416":1,"1417":1,"1431":1,"1436":27,"1438":1,"1445":1,"1447":2,"1453":1,"1455":1,"1467":1,"1474":1,"1475":1,"1476":2,"1489":2,"1490":1,"1496":61,"1500":1,"1524":1,"1526":1,"1531":2,"1535":1,"1544":1,"1589":1,"1591":1,"1596":1,"1611":1,"1639":1,"1729":1,"1764":1,"1766":1,"1816":1,"1888":1,"1889":1,"1996":1,"2048":1,"2051":1,"2166":1,"2169":1,"2171":1,"2190":1,"2192":1,"2232":1}}],["mostsevere",{"2":{"109":1,"1222":1,"1225":1},"3":{"109":2,"1222":1,"1225":1,"1229":2,"1311":1,"1312":2}}],["mostly",{"3":{"41":1,"135":1,"267":1,"409":1,"734":1,"1011":1,"1264":1,"1270":1,"1311":1,"1312":1,"1350":1,"1359":1,"1380":1,"1396":1,"1436":4,"1438":1,"1496":2,"1551":1,"1577":1,"1582":1,"1583":1,"1585":2,"1931":1,"2051":1,"2074":1}}],["most",{"0":{"2043":1},"3":{"0":5,"24":2,"69":1,"109":3,"110":1,"111":1,"132":1,"150":1,"157":1,"178":1,"235":1,"243":1,"255":1,"312":1,"329":1,"349":1,"351":1,"352":1,"390":1,"402":1,"459":2,"460":1,"463":1,"470":1,"472":1,"487":1,"500":1,"518":1,"556":1,"584":1,"590":1,"599":1,"625":1,"628":3,"641":1,"650":1,"692":1,"725":1,"742":1,"781":1,"811":1,"819":2,"821":1,"826":1,"830":1,"839":1,"840":1,"842":1,"854":1,"941":1,"947":1,"971":1,"973":1,"984":1,"998":1,"1004":1,"1020":2,"1033":1,"1051":1,"1058":1,"1067":1,"1075":1,"1085":1,"1115":1,"1116":1,"1125":1,"1126":1,"1140":2,"1154":1,"1191":1,"1200":1,"1212":3,"1216":1,"1218":1,"1224":1,"1226":1,"1229":4,"1237":5,"1247":2,"1251":1,"1252":1,"1254":2,"1255":1,"1259":6,"1264":1,"1265":1,"1267":1,"1270":7,"1271":3,"1274":1,"1280":1,"1283":1,"1286":19,"1290":1,"1291":1,"1300":8,"1301":4,"1309":2,"1310":2,"1311":15,"1312":2,"1316":1,"1322":1,"1323":8,"1324":14,"1333":1,"1337":1,"1338":1,"1339":11,"1340":2,"1343":1,"1347":2,"1348":1,"1350":7,"1352":1,"1358":1,"1359":32,"1361":1,"1363":1,"1366":1,"1369":4,"1372":1,"1373":1,"1376":1,"1379":1,"1380":4,"1390":1,"1395":13,"1396":21,"1397":1,"1399":1,"1401":1,"1402":12,"1403":1,"1405":1,"1414":1,"1415":6,"1417":19,"1426":1,"1428":1,"1431":1,"1436":22,"1438":3,"1441":1,"1442":1,"1443":1,"1445":1,"1447":1,"1453":1,"1455":8,"1458":1,"1460":1,"1465":1,"1467":2,"1475":2,"1489":4,"1492":2,"1496":2,"1525":1,"1526":2,"1527":1,"1531":1,"1537":3,"1574":2,"1578":1,"1585":1,"1625":1,"1627":1,"1630":2,"1631":2,"1632":1,"1638":1,"1639":1,"1641":4,"1656":1,"1666":2,"1677":1,"1683":1,"1702":1,"1765":3,"1769":1,"1782":1,"1795":1,"1796":1,"1797":1,"1799":1,"1802":4,"1803":1,"1805":2,"1806":2,"1813":2,"1823":1,"1830":1,"1840":1,"1843":1,"1847":1,"1849":1,"1858":1,"1860":1,"1878":1,"1900":2,"1908":1,"1917":1,"1922":1,"1927":4,"1931":1,"1933":1,"1959":1,"1960":1,"1964":1,"1973":2,"1974":1,"1978":1,"1986":1,"1987":1,"1989":1,"1998":2,"2001":1,"2002":1,"2010":1,"2015":2,"2029":2,"2032":1,"2033":1,"2036":1,"2038":1,"2047":2,"2049":4,"2050":1,"2066":1,"2068":1,"2069":2,"2078":1,"2079":1,"2081":1,"2087":1,"2095":1,"2100":1,"2104":1,"2106":1,"2108":1,"2111":1,"2114":1,"2121":2,"2124":1,"2129":1,"2131":1,"2135":1,"2146":1,"2155":2,"2170":2,"2171":1,"2189":1,"2195":1,"2220":1,"2230":1}}],["modreq",{"3":{"1168":1}}],["modificar",{"3":{"1686":1}}],["modification",{"3":{"564":1,"566":1,"1244":1,"1270":4,"1286":5,"1323":1,"1324":1,"1359":2,"1415":1,"1630":1,"1749":1,"1823":1}}],["modifier",{"3":{"1259":1,"1270":1,"1286":1,"1359":1,"1369":1,"1380":1,"1395":1,"1431":1,"1436":4,"1630":1}}],["modifiers",{"3":{"1214":1}}],["modified",{"2":{"2167":1},"3":{"344":1,"698":1,"714":1,"715":2,"716":1,"1274":1,"1277":1,"1286":17,"1323":1,"1436":1,"1438":1,"1496":2,"1545":1,"1632":1,"1633":1,"1636":1,"1755":1,"1839":1,"1851":1,"1871":1,"1876":1,"2167":1}}],["modifying",{"3":{"1286":1,"1359":1,"1458":1}}],["modify",{"3":{"0":1,"245":2,"248":1,"249":1,"253":1,"254":1,"256":1,"257":1,"279":1,"285":1,"286":1,"340":1,"732":1,"733":1,"854":1,"856":1,"857":1,"1286":1,"1292":1,"1300":4,"1301":6,"1395":1,"1438":3,"1542":1,"1631":1,"1638":1,"1869":1,"1877":2,"1915":1,"2001":1}}],["modalities",{"3":{"1395":1}}],["modally",{"3":{"682":1,"1417":4}}],["modal",{"3":{"0":1,"682":1,"684":1,"1324":1,"1417":8}}],["mode=complete",{"3":{"1472":1}}],["mode=form",{"3":{"1311":1,"1975":1}}],["mode=max",{"3":{"868":1,"1455":4,"1465":2}}],["moderating",{"3":{"1395":1,"1402":3,"1946":1}}],["moderationqueue",{"3":{"1402":2}}],["moderationaction",{"3":{"1199":6,"1203":1,"1207":2,"1402":12}}],["moderation",{"3":{"523":1,"897":2,"900":1,"1342":1,"1349":2,"1350":10,"1353":1,"1355":1,"1359":11,"1378":2,"1380":2,"1381":1,"1388":1,"1395":11,"1396":16,"1398":1,"1399":2,"1401":2,"1402":75,"1438":3,"1626":1,"1627":2,"1629":1,"1630":1,"1631":3,"1632":5,"1635":1,"1748":2,"1750":1,"1760":1,"1763":1,"1765":3,"1771":1}}],["moderateasync",{"3":{"1402":3}}],["moderatequestioncommand",{"3":{"1199":5,"1203":1,"1207":2,"1402":7,"1436":1}}],["moderatequestionhandlertests",{"3":{"1199":1,"1207":3}}],["moderatequestionhandler",{"2":{"522":1,"523":1,"1100":1,"1399":1},"3":{"522":2,"523":2,"897":2,"1100":2,"1199":2,"1203":1,"1207":2,"1247":1,"1270":2,"1350":2,"1396":4,"1399":10,"1402":8,"1436":1}}],["moderated",{"3":{"1192":1,"1202":1,"1203":1,"1350":1,"1402":2}}],["moderate",{"3":{"522":1,"523":1,"897":1,"1100":1,"1203":2,"1207":4,"1247":1,"1270":2,"1350":1,"1395":3,"1396":2,"1399":1,"1402":9,"1626":1,"1632":1,"1748":2,"1760":1,"1765":3,"1768":2,"1771":1}}],["moderators",{"3":{"1396":4,"1399":1,"1402":11,"1748":1,"1765":1}}],["moderator",{"3":{"391":1,"1350":1,"1396":3,"1397":1,"1402":21,"1438":1,"1630":1,"1632":2,"1764":1,"1765":3,"1768":1}}],["modernizing",{"3":{"2213":1,"2218":1,"2220":1}}],["modernize",{"3":{"1396":1}}],["modernization",{"3":{"1012":1,"1526":1,"1531":1,"1532":1,"1544":1,"1576":1,"1577":1,"2220":1}}],["modern",{"3":{"309":1,"743":1,"799":1,"1049":1,"1237":1,"1286":1,"1292":1,"1417":1,"1436":3,"1993":1,"2070":1,"2076":1,"2214":1,"2220":1,"2221":1,"2226":1,"2239":1,"2240":1}}],["modest",{"3":{"1474":1,"2033":2,"2060":1}}],["modes",{"1":{"504":1,"505":1,"506":1,"507":1,"508":1,"509":1,"510":1,"511":1,"512":1,"513":1,"514":1},"3":{"0":1,"16":1,"100":1,"101":1,"185":1,"504":1,"520":1,"536":1,"555":1,"626":2,"666":1,"880":1,"885":1,"1152":1,"1189":1,"1212":1,"1229":1,"1247":2,"1259":2,"1270":1,"1286":4,"1311":3,"1324":5,"1339":1,"1350":1,"1359":3,"1395":2,"1396":1,"1415":2,"1417":2,"1424":1,"1427":1,"1436":7,"1453":2,"1467":1,"1490":2,"1492":1,"1559":1,"1577":1,"1648":1,"1664":1,"1684":1,"1721":1,"1890":1,"1899":1,"1952":1,"2079":1,"2081":1,"2232":1}}],["model=",{"3":{"1596":1}}],["modeltype",{"3":{"1311":2}}],["modeltestcontext",{"3":{"1199":2,"1207":1}}],["modelmetadata",{"3":{"1311":2}}],["modelconfigurationbuilder",{"3":{"1286":1}}],["modelidvalue",{"3":{"1018":2,"1369":1,"1526":1}}],["modelid",{"2":{"1090":1,"1425":1},"3":{"1018":2,"1090":1,"1212":1,"1350":1,"1359":3,"1366":1,"1425":2,"1427":5,"1496":1}}],["modeling",{"3":{"168":1,"1229":1,"1286":1,"1309":1,"1324":1,"1350":5,"1359":3,"1380":2,"1395":2,"1402":1,"1415":1,"1417":1,"1436":1,"1473":1,"1804":1,"1811":1}}],["modelused",{"2":{"1018":1},"3":{"1018":1,"1350":9,"1359":2,"1362":1,"1369":2}}],["modelling",{"3":{"683":1,"1041":1,"1115":1,"1162":1,"1218":1,"1249":1,"1259":1,"1300":1,"1311":1,"1323":1,"1324":1,"1339":1,"1350":3,"1359":3,"1362":1,"1369":1,"1395":2,"1402":3,"1415":2,"1436":1,"1776":1,"2183":1}}],["modelled",{"3":{"0":1,"691":1,"1108":1,"1217":1,"1247":1,"1270":1,"1286":2,"1311":1,"1323":1,"1324":1,"1350":2,"1359":3,"1396":1,"1415":2,"1436":3,"1631":2}}],["modelbindingresult",{"3":{"1311":1}}],["modelbinding",{"3":{"1311":1}}],["modelbinders",{"3":{"330":1,"880":1,"883":1,"1203":1,"1207":4,"1241":1,"1247":1,"1311":3}}],["modelbinder",{"3":{"330":1,"741":1,"1311":1,"1380":1,"1988":1}}],["modelbuilderextensions",{"3":{"1199":2,"1203":1,"1207":2,"1208":1,"1282":3,"1286":14}}],["modelbuilderextensionstests",{"3":{"1198":1,"1199":2,"1207":6,"1286":2}}],["modelbuilder",{"2":{"697":1},"3":{"200":1,"697":1,"715":1,"1208":2,"1282":1,"1286":13,"1396":1}}],["modelvalidationtests",{"3":{"1199":1,"1207":7}}],["modelvalidation",{"2":{"117":1,"128":2,"1596":1},"3":{"117":2,"128":4,"1199":24,"1203":1,"1207":2,"1324":18,"1384":1,"1395":26,"1396":6,"1436":1,"1496":1,"1591":1,"1596":2,"1600":1}}],["modeled",{"3":{"109":1,"1286":3,"1300":3,"1309":3,"1342":2,"1350":5,"1359":2,"1380":3,"1395":2,"1396":4,"1402":2,"1417":1,"1531":1,"1532":1,"2239":1}}],["model",{"0":{"1228":1,"1281":1,"1468":1,"1630":1,"1652":1,"1761":1,"1771":1},"1":{"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"1088":1,"1089":1,"1090":1,"1091":1,"1092":1,"1093":1,"1094":1,"1095":1,"1096":1,"1148":1,"1149":1,"1150":1,"1151":1,"1152":1,"1153":1,"1154":1,"1155":1,"1156":1,"1157":1,"1340":1,"1341":1,"1342":1,"1343":1,"1344":1,"1345":1,"1346":1,"1347":1,"1348":1,"1349":1,"1350":1,"1808":1,"1809":1,"1810":1,"1811":1,"1812":1,"1854":1,"1855":1,"1856":1,"1857":1,"1858":1,"1859":1,"1860":1,"1861":1,"1862":1},"2":{"1083":1,"1594":1},"3":{"0":36,"25":1,"26":1,"38":1,"39":1,"52":1,"53":1,"81":1,"109":2,"117":1,"121":1,"124":1,"126":1,"128":1,"163":1,"166":3,"167":1,"168":1,"185":1,"186":2,"187":1,"188":1,"193":1,"200":2,"201":1,"223":1,"226":1,"227":1,"228":1,"230":4,"274":1,"277":1,"284":1,"291":2,"293":1,"296":1,"313":1,"317":1,"318":3,"319":1,"320":1,"329":1,"332":2,"341":1,"346":1,"350":1,"358":1,"362":1,"384":1,"397":1,"408":1,"434":1,"458":1,"462":1,"470":1,"497":2,"498":1,"501":1,"507":1,"560":1,"563":2,"564":2,"566":1,"567":1,"572":1,"582":1,"587":2,"599":1,"600":1,"605":1,"612":1,"641":1,"650":1,"651":1,"656":1,"657":2,"670":1,"686":1,"690":1,"697":1,"698":5,"699":5,"707":3,"708":1,"720":1,"733":1,"737":1,"748":1,"755":1,"756":2,"758":1,"761":1,"762":1,"783":1,"790":1,"797":1,"798":1,"811":1,"821":1,"834":1,"842":1,"857":1,"889":5,"890":1,"891":4,"903":2,"904":1,"905":2,"906":1,"907":3,"910":1,"913":2,"914":5,"915":3,"918":1,"929":2,"931":1,"932":1,"934":1,"946":1,"950":1,"974":1,"1011":2,"1012":6,"1013":1,"1016":2,"1017":7,"1018":19,"1019":8,"1020":5,"1025":1,"1026":2,"1027":1,"1033":2,"1034":2,"1035":1,"1036":1,"1042":1,"1044":1,"1049":1,"1050":3,"1051":3,"1052":2,"1058":1,"1059":2,"1060":1,"1062":1,"1068":1,"1069":2,"1076":1,"1083":10,"1084":2,"1085":3,"1088":1,"1089":2,"1090":9,"1091":12,"1092":5,"1093":5,"1094":3,"1118":1,"1133":1,"1137":1,"1139":1,"1140":2,"1142":1,"1148":1,"1149":1,"1150":1,"1151":1,"1152":1,"1155":1,"1160":1,"1168":1,"1170":1,"1174":1,"1176":2,"1177":1,"1178":2,"1180":1,"1192":3,"1202":2,"1203":2,"1212":11,"1213":1,"1220":1,"1230":2,"1235":1,"1237":11,"1241":2,"1247":5,"1249":2,"1259":5,"1263":1,"1269":1,"1270":11,"1271":3,"1272":1,"1273":5,"1276":1,"1277":1,"1278":1,"1279":2,"1280":2,"1281":11,"1282":1,"1283":1,"1284":1,"1286":207,"1287":2,"1290":3,"1296":1,"1297":2,"1300":37,"1302":1,"1309":10,"1310":4,"1311":18,"1312":4,"1320":1,"1323":29,"1324":108,"1326":1,"1328":1,"1339":6,"1340":2,"1342":3,"1347":2,"1348":2,"1350":54,"1359":44,"1362":3,"1363":1,"1365":1,"1366":5,"1368":1,"1369":30,"1371":1,"1373":2,"1374":1,"1380":5,"1381":1,"1384":4,"1386":1,"1395":200,"1396":54,"1401":1,"1402":16,"1409":1,"1410":1,"1412":1,"1415":10,"1416":3,"1417":9,"1418":3,"1419":2,"1420":6,"1422":6,"1423":1,"1424":3,"1425":2,"1426":3,"1427":41,"1428":2,"1429":2,"1431":5,"1435":8,"1436":118,"1438":12,"1441":1,"1442":2,"1443":1,"1446":1,"1453":3,"1455":14,"1456":1,"1461":1,"1462":4,"1467":8,"1469":2,"1476":1,"1488":3,"1489":2,"1490":2,"1492":7,"1496":10,"1503":1,"1508":1,"1511":1,"1524":2,"1526":15,"1527":1,"1530":1,"1531":1,"1532":2,"1534":8,"1535":1,"1537":2,"1541":4,"1543":1,"1544":2,"1545":2,"1548":3,"1553":11,"1554":1,"1556":1,"1572":2,"1575":3,"1576":1,"1577":8,"1578":1,"1581":1,"1582":3,"1583":1,"1585":5,"1591":5,"1592":1,"1594":1,"1596":2,"1599":4,"1600":1,"1614":1,"1621":1,"1627":1,"1630":2,"1631":2,"1635":1,"1636":1,"1638":3,"1639":3,"1640":1,"1641":4,"1651":1,"1653":1,"1663":1,"1664":1,"1686":2,"1697":3,"1704":1,"1721":1,"1724":1,"1727":1,"1735":1,"1757":1,"1776":1,"1779":2,"1781":1,"1784":1,"1790":1,"1795":1,"1799":1,"1805":1,"1807":1,"1808":3,"1809":1,"1810":1,"1812":2,"1849":10,"1851":4,"1853":1,"1854":1,"1858":7,"1859":1,"1861":1,"1862":1,"1863":3,"1864":1,"1866":2,"1868":1,"1871":1,"1872":1,"1874":1,"1875":1,"1894":1,"1898":1,"1901":2,"1908":1,"1920":1,"1923":1,"1925":1,"1927":1,"1928":1,"1930":2,"1948":1,"1961":1,"1964":1,"1978":1,"1980":1,"1982":1,"1984":1,"1990":3,"1991":1,"1993":1,"1994":2,"1996":1,"2008":1,"2018":2,"2053":2,"2055":1,"2061":2,"2064":1,"2068":1,"2077":1,"2078":1,"2083":1,"2086":1,"2114":1,"2125":2,"2140":1,"2141":1,"2146":1,"2154":1,"2156":3,"2166":1,"2170":2,"2171":4,"2172":2,"2173":2,"2174":2,"2175":1,"2176":2,"2177":3,"2178":2,"2179":2,"2180":7,"2192":1,"2195":1,"2198":1,"2199":1,"2206":2,"2207":1,"2209":1,"2220":2,"2227":1,"2229":1,"2230":2,"2232":9,"2239":2}}],["modelsnapshot",{"3":{"1497":1}}],["modelstatedictionary",{"3":{"1311":1}}],["models",{"0":{"1347":1,"1356":1,"1384":1},"3":{"0":1,"95":1,"115":1,"117":1,"128":1,"165":1,"224":1,"242":1,"255":1,"659":1,"731":1,"810":1,"932":1,"1028":1,"1083":2,"1085":2,"1234":1,"1237":1,"1286":4,"1311":2,"1324":7,"1339":1,"1340":2,"1347":1,"1350":6,"1359":2,"1380":7,"1395":7,"1396":3,"1402":6,"1415":1,"1436":20,"1488":1,"1496":1,"1543":1,"1567":1,"1577":2,"1600":1,"1803":1,"2144":1}}],["mode",{"0":{"1270":1,"2076":1},"1":{"270":1,"271":1,"272":1,"273":1,"274":1,"275":1,"276":1,"277":1,"553":1,"554":1,"555":1,"556":1,"557":1,"558":1,"559":1,"560":1,"928":1,"929":1,"930":1,"931":1,"932":1,"933":1,"934":1,"935":1,"2081":1,"2082":1,"2083":1,"2084":1,"2085":1,"2086":1},"3":{"0":17,"18":1,"20":1,"23":1,"31":1,"100":1,"101":1,"135":1,"146":1,"147":1,"168":1,"216":1,"226":1,"234":1,"235":1,"236":1,"243":2,"245":5,"255":1,"259":1,"265":1,"270":1,"272":1,"273":1,"283":1,"361":1,"368":2,"373":3,"401":1,"483":1,"507":2,"508":1,"516":1,"518":1,"519":1,"520":1,"526":1,"527":1,"529":1,"530":2,"531":2,"532":1,"536":1,"537":1,"553":1,"555":4,"556":12,"557":2,"558":6,"560":2,"592":1,"609":1,"610":1,"618":2,"622":1,"626":2,"633":6,"648":1,"653":1,"684":1,"699":1,"700":1,"702":1,"716":1,"718":1,"740":1,"758":1,"765":1,"767":1,"809":1,"811":1,"825":1,"845":1,"856":2,"860":1,"863":1,"865":2,"867":3,"868":1,"873":2,"876":4,"877":1,"881":1,"883":1,"885":1,"923":1,"928":1,"940":1,"954":1,"955":1,"956":1,"982":1,"997":1,"1018":2,"1034":1,"1055":1,"1067":1,"1074":2,"1091":2,"1099":1,"1100":2,"1101":2,"1125":1,"1212":7,"1228":1,"1229":4,"1237":1,"1240":1,"1247":1,"1257":3,"1259":21,"1270":1,"1271":1,"1286":14,"1288":1,"1300":11,"1301":2,"1311":9,"1323":6,"1324":41,"1326":1,"1332":1,"1334":1,"1336":1,"1339":19,"1350":1,"1357":1,"1359":9,"1362":1,"1369":2,"1384":1,"1389":1,"1391":1,"1395":21,"1396":17,"1402":3,"1415":2,"1416":2,"1417":6,"1427":9,"1432":1,"1433":1,"1436":45,"1438":3,"1441":3,"1442":1,"1443":1,"1445":6,"1449":2,"1450":1,"1451":1,"1453":4,"1454":1,"1455":4,"1456":1,"1459":1,"1460":2,"1461":1,"1463":3,"1467":9,"1469":1,"1472":1,"1473":1,"1475":1,"1476":1,"1478":2,"1486":2,"1487":1,"1488":2,"1490":2,"1491":1,"1492":9,"1496":1,"1524":1,"1526":3,"1531":2,"1534":1,"1535":1,"1566":1,"1577":12,"1582":1,"1585":1,"1589":1,"1591":5,"1596":1,"1600":1,"1608":1,"1641":1,"1643":2,"1644":1,"1645":2,"1648":1,"1649":1,"1655":1,"1660":1,"1661":2,"1669":1,"1670":1,"1673":1,"1675":4,"1696":1,"1731":5,"1742":1,"1750":1,"1773":2,"1790":1,"1825":1,"1842":2,"1851":1,"1895":2,"1896":1,"1914":1,"1922":1,"1923":2,"1948":1,"1951":1,"1959":1,"1961":1,"1993":1,"1996":1,"2001":1,"2020":1,"2027":1,"2031":1,"2036":1,"2043":1,"2048":1,"2050":1,"2056":1,"2070":1,"2073":1,"2076":1,"2079":2,"2080":3,"2081":3,"2086":2,"2089":1,"2142":1,"2145":1,"2146":1,"2148":1,"2150":1,"2169":1,"2174":1,"2183":1,"2204":1,"2210":1,"2232":4}}],["modulo",{"3":{"1286":1,"1436":1,"1475":1}}],["modularity",{"3":{"1436":3}}],["modular",{"0":{"1509":1,"1783":1},"1":{"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"1788":1,"1789":1,"1790":1,"1791":1,"1792":1,"1793":1,"2087":1,"2088":1,"2089":1,"2090":1,"2091":1,"2092":1,"2093":1,"2094":1,"2095":1,"2096":1,"2097":1,"2098":1},"3":{"0":1,"30":1,"56":1,"58":3,"62":1,"329":1,"396":1,"405":1,"582":1,"781":1,"905":1,"1211":1,"1212":1,"1259":2,"1270":1,"1290":1,"1300":5,"1310":1,"1312":2,"1323":3,"1324":1,"1359":1,"1395":1,"1396":2,"1402":2,"1436":3,"1455":1,"1489":1,"1534":1,"1536":1,"1544":1,"1646":1,"1647":1,"1659":1,"1675":1,"1692":1,"1779":1,"1780":2,"1781":1,"1787":1,"1788":1,"1793":1,"1864":1,"1878":1,"1886":1,"1986":1,"2009":1,"2087":1,"2155":1,"2204":1,"2205":1,"2210":1,"2212":1,"2213":2,"2214":2,"2218":1,"2219":1,"2221":1,"2227":1,"2230":1,"2239":2,"2243":1}}],["moduledefinition",{"3":{"1436":3}}],["moduledomains",{"3":{"1436":2}}],["moduledomain",{"3":{"1431":1,"1436":4}}],["modulebearingmap",{"3":{"1436":2}}],["modulelayerisolated",{"3":{"1436":1}}],["modulelayer",{"3":{"1436":1}}],["modulelessmap",{"3":{"1436":1}}],["moduleless",{"3":{"1436":1}}],["moduleloaderlogger",{"3":{"1311":1}}],["moduleloadertests",{"3":{"583":7,"586":1,"1199":1,"1207":16,"1315":1,"1323":2,"1438":2}}],["moduleloader",{"0":{"1881":1},"2":{"58":1,"59":1,"60":1,"63":1,"117":1,"295":2,"582":1,"587":1,"633":1,"636":1,"1378":1,"1413":1,"1509":1,"1700":1,"1701":1,"1884":1,"1886":1,"2019":1,"2026":1,"2094":1,"2097":1},"3":{"58":1,"59":3,"60":1,"63":3,"117":2,"122":1,"295":3,"582":1,"583":18,"584":5,"585":6,"586":1,"587":1,"633":1,"636":1,"674":1,"980":1,"1199":8,"1202":1,"1203":2,"1207":2,"1286":2,"1309":4,"1311":21,"1313":1,"1315":28,"1323":20,"1350":2,"1359":1,"1369":3,"1377":1,"1378":1,"1380":7,"1396":6,"1413":1,"1415":4,"1431":1,"1436":5,"1438":1,"1447":1,"1496":2,"1509":1,"1534":1,"1577":1,"1653":2,"1662":1,"1684":1,"1700":1,"1701":1,"1728":1,"1790":1,"1881":1,"1884":2,"1886":1,"2019":1,"2026":1,"2094":1,"2097":1}}],["moduletests",{"3":{"1436":2,"1489":1}}],["modulerequiredlayeroverrides",{"3":{"1436":3,"1489":1}}],["moduleinfrastructures",{"3":{"1436":1}}],["moduleinternallayersareisolated",{"3":{"1436":3}}],["moduleinternallayers",{"3":{"1436":2}}],["moduleinitializer",{"3":{"1433":1,"1436":2,"1488":1}}],["moduleisolationtests",{"3":{"1199":1,"1207":2,"1436":4,"1489":3,"1591":1}}],["moduleisolationtestsbasetests",{"3":{"1199":1,"1207":3,"1436":6,"1489":1}}],["moduleisolationtestsbase",{"3":{"587":1,"1199":2,"1207":2,"1431":1,"1436":8,"1489":1,"1654":1}}],["moduleof",{"3":{"1431":1,"1436":2}}],["modulepath",{"3":{"1324":4,"1417":1}}],["moduleprobemap",{"3":{"1199":2,"1207":1,"1436":6}}],["moduleenabled",{"2":{"1314":1,"1882":1},"3":{"1314":1,"1882":1}}],["moduleapis",{"3":{"1436":1}}],["moduleapplications",{"3":{"1436":2}}],["moduleapplication",{"3":{"1431":1,"1436":13}}],["moduleapplicationdbcontext",{"2":{"1363":1,"1404":1,"1412":1,"1500":1,"1685":1,"1686":1},"3":{"1199":3,"1203":3,"1207":6,"1363":5,"1369":17,"1396":8,"1404":2,"1412":2,"1415":6,"1496":2,"1500":1,"1651":1,"1685":1,"1686":1}}],["moduleassembly",{"2":{"1830":1},"3":{"1270":2,"1271":1,"1359":4,"1415":2,"1830":1}}],["moduleassemblies",{"2":{"1881":1},"3":{"0":1,"583":1,"1311":3,"1323":2,"1881":1}}],["modulehost",{"3":{"1311":10,"1312":1,"1323":3,"1380":1}}],["modulehostcontext",{"2":{"1881":1},"3":{"1199":4,"1203":1,"1207":2,"1311":16,"1315":3,"1323":6,"1881":1}}],["modulehostextensionstests",{"3":{"1199":1,"1207":2,"1311":5,"1438":2}}],["modulehostextensions",{"3":{"583":1,"674":1,"677":1,"980":2,"1199":1,"1203":1,"1207":2,"1208":1,"1311":9,"1315":3,"1323":6,"1339":1}}],["moduleconformancetestsbasetests",{"3":{"1199":1,"1207":9,"1436":32,"1489":4}}],["moduleconformancetestsbase",{"2":{"585":1,"1497":1},"3":{"585":2,"1199":6,"1207":2,"1323":2,"1428":1,"1431":3,"1436":15,"1438":1,"1489":2,"1496":2,"1497":1}}],["modulecontrollerfeatureprovidertests",{"3":{"1199":1,"1207":2}}],["modulecontrollerfeatureprovider",{"2":{"583":1},"3":{"583":2,"585":3,"1199":3,"1203":1,"1207":2,"1311":10,"1323":4}}],["modulecode",{"2":{"1133":1},"3":{"0":1,"1133":1,"1436":2}}],["modulename",{"2":{"1773":1},"3":{"405":1,"583":2,"585":1,"1270":5,"1286":2,"1300":1,"1311":3,"1315":2,"1323":5,"1324":2,"1380":1,"1415":1,"1436":2,"1773":1,"1856":1}}],["modulenames",{"2":{"80":1,"82":1},"3":{"80":1,"82":1,"1436":12}}],["modulenameconventionstests",{"3":{"1004":1,"1199":1,"1207":2,"1286":1,"1300":3,"1438":2}}],["modulenameconventions",{"3":{"0":1,"1004":2,"1199":5,"1203":1,"1207":2,"1263":1,"1270":3,"1286":8,"1300":10,"1662":1,"2043":1}}],["moduleshared",{"3":{"1436":6}}],["modulesdeclarelayers",{"3":{"1436":12}}],["modulesdeclareeveryexpectedlayer",{"2":{"1489":1},"3":{"1436":2,"1489":2}}],["modulessectionname",{"3":{"1324":1}}],["modulessettingstests",{"3":{"1199":1,"1207":2}}],["modulessettings",{"2":{"585":1,"1315":1,"1882":1,"2012":1,"2094":1},"3":{"0":1,"583":5,"584":1,"585":4,"586":1,"674":1,"979":1,"1199":10,"1203":1,"1207":2,"1311":18,"1313":1,"1315":2,"1320":4,"1323":9,"1436":4,"1662":1,"1882":1,"2012":1,"2094":1,"2098":1}}],["modulesbyname",{"3":{"1323":1}}],["modulescanning",{"2":{"115":1,"1262":1},"3":{"115":1,"122":1,"536":1,"552":1,"922":1,"927":1,"980":1,"1207":1,"1208":1,"1262":7,"1263":2,"1270":8,"1271":4,"1300":1,"1311":3,"1316":7,"1323":6,"1359":8,"1396":6,"1415":13}}],["modulesettings",{"2":{"585":1,"674":1,"1882":2},"3":{"0":1,"583":4,"584":1,"674":2,"677":1,"1199":5,"1203":1,"1207":2,"1313":1,"1315":1,"1320":4,"1323":5,"1882":2}}],["modules",{"0":{"1514":1,"2077":1},"1":{"1878":1,"1879":1,"1880":1,"1881":1,"1882":1,"1883":1,"1884":1,"1885":1,"1886":1},"2":{"576":1,"584":1,"586":1,"1004":1,"1639":1,"1884":1},"3":{"0":3,"42":2,"46":1,"52":1,"53":1,"54":1,"59":6,"60":1,"63":2,"72":3,"73":2,"80":6,"97":1,"109":1,"128":3,"132":1,"165":1,"184":1,"186":5,"230":6,"265":1,"295":4,"311":1,"318":1,"325":2,"344":1,"350":2,"352":3,"353":4,"360":1,"384":2,"388":2,"390":1,"391":2,"396":1,"401":1,"444":1,"448":2,"459":2,"463":2,"465":2,"466":1,"470":8,"475":8,"476":10,"477":8,"478":1,"491":1,"492":1,"493":2,"494":2,"495":2,"497":6,"499":2,"502":1,"522":1,"523":1,"524":1,"535":1,"536":1,"539":1,"545":15,"550":1,"551":1,"552":2,"556":8,"559":1,"572":1,"576":1,"577":2,"583":27,"584":1,"585":11,"586":5,"618":1,"633":1,"648":1,"649":4,"650":1,"651":1,"653":1,"657":6,"674":7,"675":2,"676":3,"690":1,"707":1,"724":3,"725":5,"728":2,"741":1,"743":2,"782":14,"784":2,"789":2,"790":7,"793":6,"794":4,"798":1,"799":1,"803":1,"804":1,"805":1,"809":1,"813":2,"846":1,"881":4,"889":1,"897":4,"900":1,"905":1,"924":4,"926":6,"946":2,"954":5,"956":1,"958":1,"960":1,"963":1,"980":2,"988":4,"995":1,"996":1,"1004":3,"1017":1,"1025":5,"1026":11,"1049":1,"1052":1,"1054":1,"1055":1,"1058":1,"1059":1,"1082":4,"1086":1,"1090":1,"1099":2,"1100":4,"1103":1,"1116":12,"1133":2,"1140":1,"1142":1,"1150":4,"1152":1,"1168":7,"1191":1,"1195":1,"1200":1,"1201":1,"1203":3,"1207":37,"1211":1,"1212":2,"1213":1,"1237":38,"1239":5,"1242":1,"1247":20,"1259":8,"1264":8,"1265":2,"1270":43,"1271":35,"1284":1,"1286":73,"1300":98,"1301":3,"1304":4,"1305":1,"1308":5,"1309":31,"1310":18,"1311":64,"1312":15,"1313":3,"1314":3,"1315":10,"1317":1,"1318":3,"1320":1,"1323":102,"1324":72,"1339":1,"1341":3,"1342":12,"1344":7,"1345":5,"1346":1,"1347":16,"1348":5,"1349":12,"1350":254,"1355":1,"1359":546,"1369":60,"1371":6,"1373":4,"1374":1,"1376":1,"1377":6,"1380":112,"1381":1,"1389":1,"1390":2,"1395":272,"1396":377,"1402":63,"1403":1,"1404":3,"1405":1,"1406":1,"1415":216,"1416":16,"1417":12,"1426":1,"1427":6,"1431":1,"1435":2,"1436":130,"1437":20,"1438":26,"1442":1,"1455":5,"1467":1,"1473":1,"1487":1,"1489":6,"1491":1,"1492":2,"1496":10,"1505":1,"1509":2,"1526":9,"1534":3,"1535":1,"1538":1,"1540":1,"1541":1,"1544":2,"1571":3,"1577":2,"1588":1,"1590":1,"1591":6,"1626":1,"1638":1,"1639":2,"1649":1,"1650":3,"1651":1,"1653":1,"1654":2,"1656":1,"1658":1,"1659":1,"1662":1,"1666":1,"1667":1,"1675":1,"1681":1,"1684":3,"1685":6,"1686":7,"1690":1,"1700":1,"1705":1,"1718":1,"1722":1,"1726":1,"1728":4,"1729":2,"1731":1,"1760":1,"1763":1,"1764":14,"1765":31,"1770":1,"1772":1,"1773":2,"1777":1,"1779":1,"1781":1,"1785":1,"1789":1,"1790":2,"1793":2,"1811":1,"1848":4,"1864":1,"1875":1,"1877":2,"1878":2,"1881":5,"1882":3,"1883":2,"1884":1,"1885":1,"1886":3,"1891":1,"1896":1,"1962":2,"1982":1,"2015":1,"2017":1,"2027":1,"2067":1,"2083":1,"2087":1,"2090":1,"2094":3,"2097":2,"2103":1,"2110":2,"2111":1,"2202":1,"2207":1,"2214":2,"2230":1,"2232":1}}],["module",{"0":{"1265":1,"1308":1,"1314":1,"1349":1,"1377":1,"1438":1,"1650":1,"1656":1,"1683":1,"1684":1,"1722":1,"1728":1,"1729":1,"1747":1,"1748":1,"1749":1,"1751":1,"1772":1,"1880":1,"1882":1,"1883":1,"1884":1,"2097":1},"1":{"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"580":1,"581":1,"582":1,"583":1,"584":1,"585":1,"586":1,"587":1,"1313":1,"1314":1,"1315":1,"1316":1,"1317":1,"1318":1,"1319":1,"1320":1,"1321":1,"1322":1,"1323":1,"1340":1,"1341":1,"1342":1,"1343":1,"1344":1,"1345":1,"1346":1,"1347":1,"1348":1,"1349":1,"1350":1,"1396":1,"1403":1,"1404":1,"1405":1,"1406":1,"1407":1,"1408":1,"1409":1,"1410":1,"1411":1,"1412":1,"1413":1,"1414":1,"1415":1,"1416":1,"1681":1,"1682":1,"1683":1,"1684":1,"1685":1,"1686":1,"1687":1,"1688":1,"1689":1,"1690":1,"1691":1,"2015":1,"2016":1,"2017":1,"2018":1,"2019":1,"2020":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1,"2027":1,"2028":1,"2087":1,"2088":1,"2089":1,"2090":1,"2091":1,"2092":1,"2093":1,"2094":1,"2095":1,"2096":1,"2097":1,"2098":1},"2":{"1731":1,"1771":1,"1882":1,"1884":1,"2103":1},"3":{"0":52,"24":1,"30":1,"47":3,"51":1,"53":6,"56":1,"57":1,"58":4,"59":12,"60":6,"62":3,"63":4,"80":2,"81":4,"82":1,"109":2,"117":3,"121":2,"122":2,"127":2,"128":2,"131":2,"132":1,"143":1,"166":2,"168":1,"184":1,"186":16,"187":7,"265":2,"295":4,"300":1,"318":2,"324":1,"325":1,"328":1,"329":1,"341":2,"350":2,"401":1,"405":4,"439":1,"459":2,"460":1,"470":2,"471":3,"472":1,"473":2,"474":1,"490":1,"493":1,"498":1,"536":3,"544":1,"545":3,"547":2,"556":1,"558":1,"562":1,"564":1,"572":4,"576":1,"580":1,"582":6,"583":30,"584":13,"585":20,"586":1,"587":7,"631":3,"632":2,"633":18,"635":8,"636":3,"639":1,"645":1,"648":4,"649":12,"650":6,"651":3,"673":1,"674":2,"688":1,"690":2,"692":2,"697":1,"698":1,"700":1,"707":2,"709":1,"725":3,"727":1,"750":1,"773":1,"778":1,"781":1,"782":3,"783":1,"784":1,"792":1,"798":2,"799":6,"801":1,"802":1,"803":1,"805":1,"809":1,"846":2,"880":1,"889":2,"891":1,"893":1,"905":2,"906":1,"912":1,"920":2,"921":2,"922":7,"923":2,"924":4,"926":3,"933":1,"956":1,"963":1,"979":1,"980":2,"1004":8,"1007":1,"1008":1,"1016":1,"1018":5,"1020":1,"1021":2,"1022":1,"1026":2,"1027":1,"1034":1,"1048":1,"1049":2,"1050":1,"1052":1,"1053":1,"1058":1,"1059":4,"1077":1,"1083":1,"1084":1,"1090":2,"1094":3,"1095":2,"1116":1,"1117":2,"1118":1,"1132":1,"1133":8,"1134":2,"1135":3,"1140":1,"1143":1,"1145":5,"1147":1,"1149":1,"1150":3,"1151":1,"1152":2,"1155":5,"1168":7,"1170":1,"1192":7,"1194":1,"1195":1,"1201":4,"1202":11,"1203":11,"1211":3,"1212":16,"1213":1,"1229":3,"1234":1,"1237":7,"1241":1,"1244":1,"1247":6,"1248":1,"1249":5,"1252":2,"1257":1,"1259":29,"1260":1,"1261":1,"1262":4,"1263":6,"1265":7,"1269":2,"1270":64,"1271":37,"1273":4,"1274":1,"1276":1,"1279":2,"1281":2,"1282":2,"1283":4,"1284":1,"1286":87,"1289":1,"1297":5,"1300":68,"1301":3,"1304":3,"1308":4,"1309":67,"1310":17,"1311":90,"1312":13,"1313":5,"1314":8,"1315":11,"1316":4,"1320":3,"1321":2,"1322":1,"1323":108,"1324":119,"1328":1,"1333":1,"1337":1,"1339":9,"1340":4,"1341":6,"1342":1,"1344":1,"1345":1,"1347":1,"1348":3,"1349":5,"1350":79,"1351":2,"1352":2,"1353":2,"1354":7,"1355":7,"1357":1,"1359":299,"1360":3,"1362":2,"1363":5,"1366":1,"1367":2,"1368":6,"1369":39,"1370":3,"1377":5,"1378":1,"1379":2,"1380":43,"1381":2,"1384":1,"1386":2,"1389":1,"1391":1,"1392":1,"1394":1,"1395":55,"1396":258,"1398":1,"1401":1,"1402":40,"1403":3,"1404":6,"1405":2,"1409":6,"1410":1,"1412":1,"1414":2,"1415":141,"1416":31,"1417":25,"1427":2,"1429":3,"1431":4,"1436":417,"1437":11,"1438":23,"1441":1,"1445":3,"1446":1,"1455":7,"1458":1,"1467":1,"1486":1,"1487":13,"1488":1,"1489":29,"1490":2,"1496":29,"1509":2,"1512":1,"1513":2,"1514":1,"1526":3,"1534":2,"1538":1,"1541":1,"1544":2,"1545":1,"1550":1,"1551":1,"1571":1,"1572":1,"1576":1,"1577":5,"1582":4,"1591":7,"1596":1,"1599":1,"1602":2,"1618":3,"1621":1,"1627":2,"1631":1,"1638":3,"1639":4,"1646":5,"1647":5,"1649":4,"1650":10,"1651":16,"1652":1,"1653":6,"1654":6,"1656":3,"1658":2,"1660":2,"1661":9,"1662":7,"1663":7,"1664":2,"1665":2,"1666":6,"1667":1,"1669":4,"1670":4,"1671":7,"1672":1,"1673":3,"1674":2,"1675":1,"1681":7,"1682":1,"1683":2,"1684":18,"1685":2,"1686":11,"1687":2,"1688":3,"1689":1,"1690":3,"1691":2,"1692":1,"1694":2,"1695":3,"1697":1,"1698":1,"1700":4,"1701":6,"1702":1,"1703":3,"1705":1,"1717":2,"1718":2,"1719":2,"1720":1,"1721":1,"1722":6,"1724":4,"1726":6,"1727":25,"1728":20,"1729":10,"1730":5,"1731":9,"1746":1,"1748":1,"1749":2,"1751":1,"1757":1,"1760":1,"1761":1,"1763":1,"1764":1,"1765":7,"1769":1,"1771":3,"1772":7,"1773":1,"1775":3,"1779":2,"1781":1,"1783":2,"1788":1,"1789":2,"1790":5,"1793":3,"1815":3,"1816":1,"1817":1,"1823":1,"1824":5,"1830":3,"1838":1,"1842":3,"1849":6,"1853":1,"1855":2,"1856":4,"1864":1,"1865":1,"1866":1,"1868":1,"1875":3,"1878":5,"1879":3,"1880":5,"1881":9,"1882":11,"1883":3,"1884":7,"1885":4,"1886":5,"1888":1,"1889":1,"1891":2,"1893":1,"1899":1,"1916":1,"1925":1,"1930":1,"1933":1,"1946":2,"1950":1,"1956":4,"1957":4,"1962":4,"1963":7,"1965":2,"1978":1,"1981":1,"2012":2,"2014":1,"2015":4,"2016":3,"2019":2,"2026":2,"2030":1,"2042":2,"2043":5,"2066":1,"2074":1,"2077":10,"2080":1,"2083":2,"2086":1,"2087":4,"2088":2,"2089":3,"2090":1,"2094":9,"2095":5,"2096":1,"2097":11,"2098":5,"2103":3,"2104":1,"2110":1,"2111":2,"2113":1,"2119":1,"2126":1,"2130":1,"2134":1,"2136":1,"2138":1,"2139":1,"2143":1,"2156":1,"2161":1,"2166":1,"2167":1,"2168":2,"2178":1,"2179":1,"2188":1,"2189":1,"2207":1,"2208":1,"2209":2,"2210":2,"2220":2,"2227":3,"2228":1,"2230":3,"2232":8,"2234":1}}],["miami",{"3":{"2220":1}}],["mientras",{"3":{"1686":1}}],["mi",{"3":{"1526":1,"1590":2,"1591":2,"1600":1}}],["mildly",{"3":{"1396":1}}],["miles",{"3":{"1395":1}}],["million",{"3":{"1228":1,"1229":1,"1467":1}}],["millions",{"3":{"1150":1}}],["millisecond",{"3":{"930":1,"1399":1,"1402":2,"1436":1,"1946":1}}],["milliseconds",{"3":{"235":1,"397":1,"1268":1,"1270":1,"1323":1,"1339":3,"1436":2,"1443":1,"1638":1,"2050":1,"2052":1,"2156":1}}],["might",{"3":{"1247":1,"1286":1,"1323":2,"1359":2,"1366":1,"1396":2,"1415":2,"1417":1,"1424":1,"1436":2,"1803":1,"1810":1,"1868":2,"1886":1,"1913":1,"1930":1,"1954":3}}],["migrating",{"3":{"294":1,"1035":1,"1048":1,"1051":1,"1116":1,"1323":1,"1416":1,"1436":1,"1444":1}}],["migrationid",{"3":{"1323":3}}],["migrationattribute",{"3":{"1323":1}}],["migrationapplyprooftests",{"3":{"1199":1,"1207":4,"1323":4,"1438":2,"1577":1,"1586":1}}],["migrationproof",{"3":{"1323":3}}],["migrationpolicy",{"3":{"1175":2,"1199":8,"1203":1,"1207":2,"1278":1,"1279":1,"1280":2,"1286":16,"1311":1,"1496":1}}],["migrationbuilder",{"2":{"566":1},"3":{"566":1,"1323":3}}],["migrationless",{"3":{"296":1,"1311":5}}],["migrationsassemblyprefix",{"3":{"1436":1}}],["migrationsassemblysettingname",{"3":{"1286":3}}],["migrationsassembly",{"3":{"1286":12}}],["migrationsfixture",{"2":{"1453":1},"3":{"564":1,"1199":1,"1203":1,"1206":1,"1207":3,"1319":1,"1323":6,"1487":1,"1490":1}}],["migrations",{"0":{"1652":1,"1688":1},"1":{"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1},"2":{"291":1,"563":1,"564":2,"1037":1,"1044":1,"1180":1,"1369":1,"1497":1,"1614":1,"1652":1,"1657":1,"1688":2,"1697":3,"1719":1,"1722":2,"1727":1,"1728":3,"1729":2,"1731":1,"2097":1,"2192":1},"3":{"0":13,"49":1,"164":1,"166":1,"168":1,"169":1,"195":6,"200":2,"288":1,"290":7,"291":3,"295":2,"341":5,"343":1,"345":2,"350":2,"403":2,"563":2,"564":19,"568":2,"632":1,"633":5,"698":2,"699":1,"700":1,"701":1,"757":1,"872":1,"891":9,"905":3,"906":1,"918":1,"966":1,"1004":1,"1018":2,"1026":2,"1034":6,"1037":1,"1044":1,"1052":1,"1067":1,"1081":1,"1082":1,"1085":4,"1087":1,"1135":1,"1140":2,"1143":1,"1175":5,"1177":1,"1179":1,"1180":1,"1209":273,"1212":1,"1213":1,"1273":4,"1276":1,"1279":5,"1280":3,"1283":2,"1284":4,"1286":75,"1290":1,"1300":1,"1311":15,"1317":1,"1319":1,"1320":1,"1323":13,"1326":1,"1359":1,"1361":1,"1369":9,"1396":11,"1415":8,"1431":1,"1436":17,"1438":3,"1441":2,"1442":1,"1445":1,"1455":13,"1461":1,"1467":6,"1469":1,"1473":2,"1476":1,"1486":1,"1487":1,"1490":2,"1492":2,"1496":3,"1497":3,"1510":2,"1526":1,"1545":4,"1572":1,"1577":5,"1590":1,"1591":3,"1614":2,"1647":1,"1652":9,"1657":3,"1661":2,"1664":4,"1673":1,"1681":1,"1683":1,"1684":2,"1688":2,"1689":1,"1690":1,"1697":12,"1701":1,"1704":2,"1718":1,"1719":7,"1722":3,"1724":1,"1726":1,"1727":11,"1728":11,"1729":3,"1731":1,"1851":1,"1852":1,"2043":2,"2089":1,"2097":5,"2192":1,"2232":1}}],["migration",{"0":{"1697":1},"2":{"1697":1},"3":{"0":23,"15":2,"26":2,"41":2,"68":1,"78":1,"81":1,"167":1,"168":2,"195":4,"197":2,"200":3,"273":1,"275":2,"277":1,"290":1,"291":6,"292":3,"293":8,"294":1,"296":1,"308":1,"311":1,"348":2,"350":4,"352":1,"360":1,"403":1,"461":1,"474":2,"548":1,"562":4,"563":5,"564":10,"565":5,"566":6,"568":1,"598":1,"600":1,"609":1,"625":1,"630":1,"633":5,"635":1,"657":2,"691":1,"697":1,"698":1,"699":1,"700":1,"702":1,"707":1,"711":1,"715":2,"733":1,"756":3,"757":2,"759":3,"762":2,"797":4,"798":1,"799":4,"800":2,"801":1,"802":2,"803":1,"804":1,"805":1,"806":1,"810":1,"811":1,"812":1,"846":1,"848":2,"853":1,"855":1,"891":5,"893":1,"905":2,"907":3,"924":1,"929":1,"931":2,"932":1,"939":1,"947":1,"948":2,"965":1,"972":1,"973":1,"1004":1,"1016":1,"1026":1,"1034":2,"1035":1,"1037":1,"1042":1,"1044":1,"1046":1,"1048":2,"1049":2,"1050":1,"1051":4,"1052":1,"1054":1,"1059":1,"1060":1,"1061":1,"1082":1,"1085":5,"1089":1,"1145":1,"1174":1,"1175":1,"1177":1,"1178":2,"1179":1,"1212":4,"1259":4,"1273":3,"1281":1,"1284":1,"1286":24,"1290":1,"1293":1,"1300":7,"1309":2,"1311":8,"1316":1,"1319":3,"1323":24,"1324":1,"1326":1,"1339":1,"1350":1,"1369":8,"1402":1,"1408":1,"1415":5,"1429":1,"1436":5,"1438":1,"1455":21,"1460":1,"1461":2,"1467":8,"1469":1,"1471":1,"1474":1,"1475":1,"1477":1,"1478":1,"1490":1,"1492":1,"1496":2,"1497":1,"1508":1,"1526":2,"1545":1,"1577":1,"1586":1,"1591":3,"1600":1,"1614":1,"1641":3,"1650":1,"1651":1,"1652":3,"1661":2,"1663":1,"1664":2,"1684":1,"1688":3,"1689":1,"1697":3,"1701":1,"1709":1,"1718":1,"1719":3,"1721":1,"1722":1,"1724":1,"1727":3,"1728":3,"1729":2,"1731":1,"1765":1,"1784":2,"1787":1,"1788":1,"1810":1,"1842":1,"1848":1,"1851":2,"1852":1,"1853":1,"1854":1,"1875":1,"1876":1,"1889":2,"1891":1,"1948":1,"1978":1,"2008":1,"2013":1,"2033":1,"2038":1,"2083":2,"2085":1,"2097":1,"2188":1,"2192":2,"2202":1,"2220":3,"2232":4}}],["migrateasync",{"2":{"291":1},"3":{"291":1,"1278":1,"1286":4,"1311":3,"1323":2,"1577":1,"1664":1}}],["migrated",{"3":{"151":1,"200":1,"290":1,"563":1,"573":1,"633":1,"800":1,"1034":1,"1280":1,"1286":11,"1311":5,"1323":1,"1369":1,"1415":1,"1432":1,"1436":2,"1473":1,"1488":1,"1496":2,"1638":1,"1674":1,"1684":2,"1692":1,"1719":1,"1727":1,"1728":1,"1889":1,"2036":1,"2097":1}}],["migrates",{"3":{"0":3,"79":1,"294":1,"296":1,"468":1,"564":1,"698":1,"703":1,"1034":2,"1036":1,"1050":1,"1212":2,"1286":9,"1300":1,"1311":2,"1339":1,"1436":1,"1449":1,"1455":1,"1467":1,"1475":1,"1491":1,"1722":1,"1729":1}}],["migrate",{"2":{"291":1,"563":1,"1364":1,"1614":1,"1652":1,"1719":1},"3":{"0":2,"49":1,"102":1,"290":3,"291":4,"293":1,"295":1,"296":2,"311":1,"365":1,"563":1,"567":1,"846":1,"1212":1,"1286":4,"1311":6,"1320":1,"1323":4,"1364":1,"1417":1,"1429":1,"1436":1,"1438":2,"1455":2,"1467":2,"1473":2,"1490":1,"1570":1,"1614":1,"1652":1,"1653":1,"1665":1,"1684":1,"1719":2,"1792":1,"1905":1,"2055":1,"2232":1}}],["migrator",{"1":{"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1},"3":{"0":2,"20":1,"288":1,"291":3,"292":1,"295":1,"296":2,"563":1,"756":2,"757":1,"762":1,"1180":1,"1192":1,"1212":1,"1286":1,"1324":1,"1396":2,"1455":1,"1467":1,"1469":1,"1473":1,"1476":1,"1477":1,"1496":2,"1652":1,"1664":1,"2232":2}}],["mime",{"3":{"1116":1,"1286":4,"1324":2,"1417":3,"2148":1}}],["mib",{"3":{"875":1,"1125":1,"1324":2,"1467":1}}],["microphone",{"3":{"1339":1,"1417":6}}],["microphone=",{"3":{"214":1,"2149":1}}],["micro",{"3":{"1135":1,"1286":1,"1359":1,"1417":2}}],["microbenchmark",{"3":{"860":1}}],["microsecond",{"3":{"820":1,"2032":1}}],["microseconds",{"3":{"71":1,"819":1,"827":1,"1126":1,"1270":1,"1324":1,"1337":1,"1339":1,"1948":1,"2024":1}}],["microserviceextraction",{"3":{"1576":1,"1577":1}}],["microserviceextractiontests",{"2":{"54":1,"59":1,"150":1,"1525":1,"1535":1,"1591":1,"1790":1,"1793":1,"1842":1,"2016":1,"2028":1,"2043":1,"2049":1},"3":{"54":1,"59":1,"62":1,"150":1,"1199":2,"1207":4,"1257":1,"1259":3,"1436":12,"1489":7,"1494":1,"1525":1,"1526":2,"1535":1,"1576":1,"1577":1,"1586":1,"1591":2,"1790":1,"1793":1,"1842":1,"2016":1,"2028":1,"2043":1,"2049":1}}],["microserviceextractiontestsbase",{"2":{"1074":1,"1077":1,"1654":1,"1663":1,"2042":1,"2104":1},"3":{"0":1,"1074":2,"1077":1,"1199":3,"1207":2,"1312":1,"1431":1,"1436":9,"1489":1,"1576":1,"1577":1,"1654":1,"1663":1,"2042":1,"2104":1}}],["microservice",{"3":{"846":1,"1034":1,"1211":1,"1214":1,"1248":1,"1259":1,"1286":2,"1311":2,"1312":2,"1315":1,"1323":3,"1380":1,"1440":1,"1488":1,"1489":1,"1526":1,"1646":1,"1647":1,"1692":1,"1781":1,"1815":1,"1847":1,"1882":1,"1895":1,"2005":1,"2017":1,"2054":1,"2227":1}}],["microservices",{"0":{"1544":1,"1783":1},"1":{"1788":1,"1789":1,"1790":1,"1791":1,"1792":1,"1793":1},"3":{"46":1,"60":1,"1216":1,"1229":1,"1237":1,"1247":2,"1257":1,"1259":8,"1270":3,"1272":1,"1273":1,"1281":1,"1286":14,"1287":1,"1290":1,"1297":1,"1300":14,"1301":3,"1303":1,"1307":1,"1309":11,"1310":3,"1311":13,"1312":7,"1313":1,"1323":14,"1324":5,"1326":1,"1338":1,"1339":12,"1349":1,"1350":15,"1354":1,"1355":1,"1359":15,"1363":1,"1369":3,"1370":1,"1378":1,"1380":7,"1391":1,"1395":4,"1396":36,"1402":14,"1410":1,"1413":1,"1415":16,"1436":50,"1441":1,"1444":1,"1446":1,"1447":1,"1450":1,"1467":1,"1469":1,"1499":1,"1526":1,"1530":1,"1532":1,"1536":1,"1545":1,"1576":1,"1577":1,"1586":1,"1590":1,"1591":1,"1595":1,"1596":1,"1597":1,"1659":1,"1675":1,"1779":1,"1780":1,"1783":1,"1784":1,"1787":2,"1788":3,"1792":1,"1793":2,"1796":1,"1799":1,"1842":1,"1846":1,"1847":1,"1868":1,"1886":1,"1892":1,"1895":1,"1899":1,"2009":1,"2014":1,"2026":1,"2028":2,"2115":1,"2169":1,"2193":1,"2204":1,"2205":1,"2211":1,"2212":1,"2213":3,"2214":1,"2217":1,"2218":2,"2219":1,"2221":1,"2228":2,"2243":1}}],["microsoft",{"0":{"2105":1},"2":{"0":1,"135":1,"137":1,"138":1,"253":1,"300":2,"401":2,"409":1,"451":1,"452":1,"676":1,"732":1,"733":1,"1090":1,"1091":2,"1213":2,"1247":1,"1259":1,"1270":2,"1300":1,"1301":2,"1311":6,"1312":5,"1323":2,"1324":5,"1339":3,"1369":3,"1395":1,"1416":1,"1417":1,"1427":6,"1477":1,"1492":1,"1611":1,"1685":1,"1686":1,"1722":1,"1727":1,"1728":1,"1815":1,"1865":1,"1915":1,"1916":1,"2012":1,"2043":2,"2099":1,"2100":1,"2105":1,"2120":1,"2137":1,"2177":1,"2178":1,"2180":1},"3":{"0":6,"135":2,"137":1,"138":1,"253":1,"300":2,"397":1,"401":2,"409":1,"413":1,"451":1,"452":1,"609":2,"640":1,"673":1,"676":1,"732":1,"733":1,"868":2,"870":1,"954":1,"980":1,"1018":1,"1036":1,"1090":3,"1091":5,"1116":1,"1154":1,"1212":1,"1213":11,"1215":1,"1244":1,"1247":3,"1259":4,"1270":12,"1286":26,"1300":19,"1301":6,"1309":18,"1310":2,"1311":40,"1312":5,"1323":25,"1324":61,"1339":21,"1359":20,"1369":26,"1380":4,"1395":7,"1396":11,"1402":1,"1415":14,"1416":9,"1417":7,"1422":1,"1425":2,"1427":25,"1432":1,"1436":70,"1437":1,"1438":1,"1441":1,"1443":1,"1445":2,"1446":1,"1453":1,"1455":1,"1459":1,"1465":2,"1466":1,"1467":13,"1472":1,"1477":1,"1481":1,"1485":1,"1486":1,"1488":1,"1489":4,"1492":1,"1577":4,"1586":1,"1611":1,"1654":1,"1671":1,"1685":2,"1686":2,"1722":1,"1727":1,"1728":1,"1815":1,"1827":1,"1865":2,"1915":1,"1916":1,"2012":1,"2043":2,"2058":1,"2099":1,"2100":1,"2101":1,"2105":2,"2108":1,"2120":1,"2137":1,"2177":1,"2178":1,"2180":1,"2212":2,"2213":1,"2217":1,"2218":1,"2220":1,"2224":1,"2238":2,"2240":2,"2241":2}}],["mixes",{"3":{"649":1,"1176":1,"1286":1,"1310":1,"1396":1}}],["mixedentity",{"3":{"1199":2,"1207":1}}],["mixed",{"0":{"92":1,"96":1},"3":{"0":3,"62":1,"91":2,"92":1,"93":1,"95":4,"96":2,"98":2,"99":2,"100":1,"101":1,"102":3,"104":1,"105":1,"229":1,"267":1,"692":1,"790":1,"795":1,"837":1,"838":1,"869":1,"981":1,"1034":1,"1178":1,"1279":1,"1286":5,"1307":1,"1309":2,"1312":2,"1324":2,"1328":2,"1337":1,"1339":7,"1359":1,"1396":1,"1400":1,"1415":1,"1438":1,"1441":1,"1442":1,"1449":1,"1467":2,"1552":1,"1557":1,"1670":1,"1946":1,"1950":1,"2025":3}}],["mix",{"3":{"392":1,"1018":1,"1020":1,"1229":1,"1297":1,"1359":2,"1395":1,"1415":1}}],["mixing",{"3":{"0":1,"95":1,"941":1,"990":1,"1035":1,"1237":1,"1301":1,"1311":1,"1324":1,"1415":1,"1436":1,"1438":1,"1555":1,"1630":1}}],["mitigates",{"3":{"237":1,"1826":1}}],["mitigated",{"3":{"13":1,"61":1,"88":1,"119":1,"188":1,"209":1,"812":1,"947":1,"1055":1,"1474":1,"1526":1,"1867":1,"1964":1}}],["mitigations",{"3":{"692":1,"1534":1,"1548":1}}],["mitigation",{"1":{"232":1,"233":1,"234":1,"235":1,"236":1,"237":1,"238":1,"239":1},"3":{"70":1,"121":1,"188":1,"232":1,"312":1,"318":1,"684":1,"725":1,"743":1,"883":1,"947":1,"1402":1,"1417":1,"1436":1,"1459":1,"1474":1,"1478":1,"1630":1,"1885":1,"1964":1,"2033":2,"2037":1,"2038":1,"2107":1}}],["mit",{"3":{"0":1,"650":1,"682":2,"683":1,"707":1,"708":1,"1059":1,"1323":1,"1661":1,"1948":1,"2239":1}}],["misclassified",{"3":{"1436":1}}],["misconstructed",{"3":{"1427":1}}],["misconfigurations",{"3":{"1438":1}}],["misconfiguration",{"3":{"0":1,"178":1,"214":1,"215":1,"401":1,"501":1,"674":1,"846":1,"1060":1,"1259":1,"1269":1,"1272":1,"1286":7,"1300":2,"1320":2,"1323":4,"1324":3,"1339":3,"1396":1,"1415":1,"1427":1,"1436":1,"1721":1,"1984":1,"2001":1}}],["misconfigured",{"3":{"0":1,"399":1,"415":1,"535":1,"700":1,"792":1,"1212":1,"1259":2,"1264":1,"1270":2,"1300":1,"1311":1,"1317":1,"1324":4,"1332":1,"1339":1,"1396":1,"1417":1,"1419":1,"1427":1,"1430":1,"1443":1,"1670":2,"1823":1,"1894":1,"2012":1,"2014":2,"2159":1,"2161":1}}],["miscounts",{"3":{"607":1,"1436":1}}],["mishandled",{"3":{"1416":1}}],["miswiring",{"3":{"1339":1}}],["misled",{"3":{"1436":1}}],["misleads",{"3":{"1436":1}}],["mislead",{"3":{"1369":1,"1415":1,"1436":2,"1474":1}}],["misleading",{"3":{"1324":1,"1359":1,"1415":1,"1417":1,"1467":1,"1927":1,"2048":1}}],["mislabeled",{"3":{"1311":1,"1359":1}}],["misbehaves",{"3":{"1327":1,"1339":1,"2134":1}}],["misbehaved",{"3":{"1312":1}}],["misbehaving",{"3":{"827":1,"848":1,"1339":1}}],["misalignment",{"3":{"1496":1}}],["misaligned",{"3":{"1359":1,"1631":1}}],["misattributed",{"3":{"1436":1}}],["misapplication",{"3":{"1311":1}}],["misauthenticates",{"3":{"312":1}}],["misrouting",{"3":{"1311":1,"1438":1}}],["misrouted",{"3":{"1300":1,"1438":1}}],["misreported",{"3":{"1323":1,"1396":1,"1436":1}}],["misreports",{"3":{"1110":1,"1324":1,"1339":1,"1481":1}}],["misregistration",{"3":{"1270":1}}],["misreadable",{"3":{"1467":1}}],["misreads",{"3":{"827":1,"1300":1,"1339":1}}],["misread",{"3":{"136":1,"1311":1,"1312":1,"1323":1,"1362":1,"2044":1}}],["misplaced",{"3":{"1436":1}}],["misplacedtokenfixtureservice",{"3":{"1199":2,"1207":1,"1436":2}}],["mispositioned",{"3":{"135":1}}],["misfires",{"3":{"1561":1}}],["misfire",{"3":{"1043":1,"1436":1,"2203":1}}],["mistype",{"3":{"1396":1}}],["mistyped",{"3":{"838":1,"1286":1,"1338":1,"1339":4,"1359":3,"1427":1,"1438":1}}],["mistakes",{"3":{"1311":1}}],["mistaken",{"3":{"109":1,"235":1,"1339":2,"1396":1,"1417":1,"1423":1,"1433":1,"1436":6,"1459":1,"1910":1,"1929":1}}],["mistake",{"3":{"0":1,"122":1,"132":1,"140":1,"215":1,"216":1,"290":1,"391":1,"465":1,"676":1,"727":1,"776":2,"801":1,"828":2,"1041":1,"1066":1,"1132":1,"1241":1,"1247":3,"1259":1,"1270":1,"1286":2,"1300":1,"1311":4,"1317":1,"1323":1,"1328":1,"1333":1,"1359":1,"1369":1,"1436":2,"1686":2,"1927":1,"1930":1,"1939":1,"1943":1,"2043":1,"2056":1,"2100":1,"2106":1,"2107":1,"2108":1,"2152":1,"2153":1,"2183":2}}],["misdiagnose",{"3":{"829":1}}],["misordered",{"3":{"751":1}}],["misordering",{"3":{"749":1,"1825":1}}],["misused",{"3":{"1396":1,"1436":1}}],["misuse",{"3":{"735":1,"1396":2,"1436":1,"1605":1,"1739":1}}],["misnamedtokenfixtureservice",{"3":{"1199":2,"1207":1,"1436":2}}],["misnamed",{"3":{"135":1,"1436":1}}],["mis",{"3":{"111":1,"324":1,"733":1,"1228":1,"1229":1,"1286":2,"1300":1,"1311":1,"1323":2,"1395":1,"1396":2,"1436":4,"1952":1}}],["misshapen",{"3":{"1324":1}}],["misspelled",{"3":{"840":1,"1311":1,"1339":1,"1427":1,"1652":1}}],["miss",{"3":{"157":1,"159":1,"166":1,"171":1,"343":1,"399":1,"404":1,"459":1,"463":1,"538":1,"549":1,"733":2,"734":1,"849":1,"964":1,"995":1,"1000":1,"1006":1,"1107":1,"1118":1,"1162":1,"1237":2,"1241":1,"1242":1,"1247":4,"1263":1,"1267":2,"1268":1,"1270":16,"1278":1,"1279":1,"1283":1,"1286":21,"1300":12,"1301":27,"1309":1,"1311":14,"1323":3,"1324":4,"1339":2,"1350":1,"1355":1,"1359":6,"1369":1,"1388":1,"1395":12,"1396":11,"1415":2,"1417":4,"1427":1,"1436":11,"1438":4,"1443":1,"1444":1,"1538":2,"1600":2,"1651":1,"1653":1,"1655":1,"1668":1,"1684":1,"1708":1,"1810":1,"1849":1,"1909":2,"1911":1,"1917":2,"1923":2,"1945":1,"1989":1,"1998":1,"2006":1,"2048":1,"2135":1,"2155":1,"2156":1,"2159":1}}],["misses",{"3":{"24":1,"159":1,"243":1,"255":1,"618":1,"762":1,"980":1,"1241":1,"1247":4,"1267":1,"1270":3,"1286":1,"1311":1,"1323":1,"1324":2,"1339":1,"1359":2,"1396":4,"1397":1,"1415":1,"1417":1,"1436":6,"1496":1,"1641":1,"1668":1,"1911":1,"1989":1}}],["missed",{"3":{"0":3,"235":1,"301":1,"520":1,"558":1,"627":1,"658":1,"707":2,"890":1,"1036":1,"1041":1,"1099":1,"1101":1,"1174":1,"1176":1,"1212":1,"1269":1,"1270":2,"1271":1,"1286":1,"1300":2,"1301":1,"1309":1,"1311":1,"1323":2,"1324":2,"1334":1,"1339":1,"1359":1,"1395":1,"1396":4,"1399":1,"1424":1,"1427":1,"1436":5,"1438":2,"1459":1,"1467":1,"1474":1,"1577":1,"1585":1,"1708":1,"1709":1,"1829":1,"1918":1,"1933":2,"1948":2,"1961":1,"2138":1,"2183":2,"2192":1,"2193":1,"2232":1}}],["missingsubscription",{"2":{"1472":1},"3":{"1472":1}}],["missingroot",{"3":{"1436":1}}],["missingrequired",{"2":{"1687":1},"3":{"1396":5,"1687":2}}],["missingrecordingharness",{"3":{"1199":2,"1207":1}}],["missingcode",{"3":{"1324":1}}],["missingaccesstokencode",{"3":{"1324":2}}],["missingaccesstoken",{"3":{"1324":2}}],["missingoverridefixture",{"3":{"1199":2,"1207":1,"1436":10}}],["missingtokenfixtureservice",{"3":{"1199":2,"1207":1,"1436":3}}],["missing",{"0":{"1755":1,"1776":1},"3":{"0":8,"67":1,"79":1,"102":1,"108":1,"136":1,"155":1,"159":1,"160":1,"188":1,"214":1,"230":1,"265":1,"283":1,"302":1,"305":1,"318":7,"320":2,"322":1,"323":1,"324":1,"326":2,"342":1,"350":3,"370":1,"371":1,"375":1,"383":1,"411":1,"415":1,"448":2,"484":1,"534":1,"538":2,"549":1,"554":1,"572":1,"573":1,"576":1,"583":1,"584":1,"585":1,"591":1,"599":1,"601":1,"602":1,"609":1,"610":1,"617":1,"626":2,"632":1,"633":2,"642":1,"648":1,"667":1,"673":1,"676":1,"684":1,"700":1,"707":1,"725":1,"757":1,"765":1,"780":1,"790":2,"791":1,"795":1,"819":1,"820":1,"828":1,"838":1,"842":1,"844":1,"871":1,"879":2,"881":1,"888":2,"915":1,"916":1,"921":1,"926":1,"948":1,"972":1,"974":1,"1018":1,"1042":1,"1049":1,"1058":1,"1067":1,"1084":1,"1092":1,"1093":1,"1109":1,"1163":1,"1184":1,"1188":1,"1212":1,"1246":1,"1250":1,"1259":2,"1265":1,"1266":1,"1270":8,"1271":2,"1282":1,"1286":12,"1297":1,"1300":23,"1301":3,"1309":2,"1311":20,"1312":3,"1320":1,"1323":13,"1324":35,"1336":1,"1339":6,"1343":1,"1349":1,"1350":9,"1352":1,"1359":51,"1369":5,"1372":1,"1380":9,"1384":1,"1395":17,"1396":19,"1402":9,"1406":1,"1411":1,"1415":11,"1416":1,"1417":10,"1421":1,"1422":1,"1427":4,"1430":1,"1431":1,"1432":1,"1436":60,"1438":3,"1440":1,"1442":1,"1443":1,"1449":2,"1454":1,"1455":3,"1459":2,"1466":1,"1467":6,"1472":1,"1480":1,"1489":1,"1491":1,"1492":3,"1496":30,"1524":2,"1525":1,"1526":3,"1531":2,"1558":1,"1577":1,"1591":1,"1600":1,"1605":1,"1631":1,"1640":1,"1641":3,"1668":1,"1684":1,"1685":1,"1700":2,"1702":1,"1719":1,"1727":2,"1728":1,"1729":2,"1731":1,"1739":1,"1748":1,"1749":2,"1765":1,"1803":1,"1839":1,"1843":1,"1844":1,"1862":1,"1881":1,"1887":1,"1889":1,"1913":1,"1924":1,"1944":1,"1948":1,"1951":1,"1959":1,"1964":2,"1968":1,"1975":2,"1986":1,"1987":2,"1993":1,"1994":3,"1995":3,"1996":2,"1997":2,"2001":4,"2012":1,"2033":1,"2044":1,"2045":1,"2056":2,"2067":1,"2081":1,"2097":1,"2100":1,"2107":2,"2122":1,"2123":1,"2131":1,"2138":1,"2149":1,"2167":1,"2168":2,"2169":2,"2173":1,"2180":1,"2188":1,"2189":1,"2194":1,"2195":1,"2232":3}}],["mismatched",{"3":{"511":1,"854":1,"1270":1,"1286":4,"1294":1,"1300":6,"1309":1,"1311":1,"1323":1,"1324":1,"1359":1,"1417":1,"1436":4,"1641":1,"1765":1}}],["mismatches",{"2":{"1997":1},"3":{"0":2,"501":1,"1270":2,"1415":1,"1496":4,"1635":1,"1670":1,"1761":1,"1997":1,"2232":1}}],["mismatch",{"3":{"0":1,"91":1,"245":1,"251":1,"254":1,"257":1,"259":1,"264":1,"318":1,"319":1,"322":2,"323":1,"350":1,"452":1,"499":2,"500":2,"609":1,"658":1,"659":1,"732":1,"907":1,"926":1,"1069":1,"1212":1,"1234":1,"1237":1,"1270":10,"1286":4,"1300":4,"1301":1,"1311":4,"1323":4,"1324":5,"1339":3,"1350":2,"1359":7,"1369":1,"1396":2,"1402":1,"1415":2,"1416":1,"1417":1,"1427":1,"1436":7,"1454":1,"1467":1,"1490":1,"1496":1,"1577":2,"1585":1,"1747":1,"1764":1,"1902":1,"1922":1,"1955":1,"1995":1,"1997":1,"2074":1,"2232":1}}],["midpointrounding",{"3":{"1359":1,"1369":1}}],["midsavecontextcreatingdbcontext",{"2":{"1498":1},"3":{"1198":1,"1199":3,"1207":1,"1496":1,"1498":1}}],["midnight",{"3":{"403":1,"612":1,"1348":1,"1350":1,"1355":2,"1393":1,"1395":6,"1438":1,"1631":1}}],["middle",{"0":{"139":1,"1423":1,"2053":1},"3":{"27":1,"130":1,"135":1,"139":1,"602":1,"1092":2,"1124":1,"1271":1,"1286":1,"1300":1,"1323":1,"1324":6,"1350":1,"1369":1,"1395":1,"1396":3,"1417":2,"1436":7,"1685":1,"1794":1,"1800":1,"1818":1,"1887":1,"1950":1,"2059":1,"2060":1,"2073":1,"2170":1,"2236":1}}],["middlewares",{"3":{"829":1,"1311":2}}],["middlewarepipelinestep",{"3":{"749":1,"1199":3,"1203":1,"1207":2,"1311":9}}],["middlewarepipelinestepnames",{"2":{"243":1,"256":1,"258":1,"259":1,"696":1,"749":1,"751":1,"1311":2},"3":{"243":2,"256":3,"258":2,"259":1,"261":1,"459":1,"696":1,"698":2,"749":2,"751":1,"1199":4,"1203":1,"1207":2,"1311":13,"1436":4}}],["middlewarepipelineordertests",{"2":{"572":1},"3":{"572":2,"749":4,"1199":2,"1207":4,"1311":1,"1436":10,"1438":1,"1487":1,"1488":3,"1489":3}}],["middlewarepipelineordertestsbase",{"2":{"572":1,"696":1,"698":1,"747":1,"749":1,"751":1,"1428":1,"1488":1,"2055":1},"3":{"0":1,"459":2,"464":2,"572":2,"696":1,"698":1,"747":1,"749":2,"751":1,"1199":3,"1207":2,"1311":8,"1428":1,"1436":15,"1438":1,"1488":5,"1489":1,"2055":1}}],["middlewarepipelinebuildertests",{"3":{"776":1,"777":1,"1199":1,"1207":2,"1311":1,"1438":1}}],["middlewarepipelinebuilder",{"2":{"103":1,"179":1,"259":1,"457":1,"459":2,"464":2,"465":1,"466":1,"696":1,"698":1,"747":3,"749":3,"1496":1,"1666":1},"3":{"0":1,"103":2,"179":2,"243":1,"256":1,"258":1,"259":1,"261":1,"457":1,"459":5,"464":6,"465":1,"466":1,"696":1,"698":5,"747":3,"749":14,"751":2,"774":2,"777":1,"1108":1,"1111":1,"1124":1,"1150":1,"1156":1,"1198":1,"1199":5,"1203":1,"1207":2,"1301":2,"1311":31,"1436":7,"1438":1,"1496":3,"1666":1,"2066":1}}],["middleware",{"0":{"2149":1},"1":{"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"746":1,"747":1,"748":1,"749":1,"750":1,"751":1,"752":1,"753":1,"1311":1,"2147":1,"2148":1,"2149":1,"2150":1,"2151":1,"2152":1,"2153":1},"3":{"0":10,"31":2,"33":1,"57":1,"59":3,"86":1,"109":7,"118":1,"125":2,"135":1,"174":1,"175":1,"182":1,"211":1,"212":1,"214":3,"215":1,"217":1,"219":1,"234":1,"235":1,"236":1,"237":2,"243":1,"256":1,"265":1,"280":1,"282":1,"301":1,"306":1,"342":1,"397":2,"407":2,"409":2,"415":2,"459":11,"460":4,"462":3,"463":6,"464":4,"465":1,"466":2,"503":1,"571":1,"573":1,"696":2,"698":2,"700":1,"702":1,"703":1,"741":1,"746":1,"748":2,"749":5,"750":1,"753":1,"773":1,"774":1,"775":1,"778":2,"825":2,"826":2,"827":6,"833":1,"910":1,"1125":1,"1126":1,"1129":1,"1192":2,"1202":2,"1203":12,"1207":36,"1212":9,"1222":1,"1229":5,"1270":2,"1286":5,"1296":1,"1297":1,"1300":23,"1301":2,"1304":1,"1309":1,"1310":1,"1311":75,"1312":2,"1323":6,"1324":14,"1334":1,"1336":3,"1337":1,"1338":1,"1339":38,"1359":1,"1370":1,"1379":1,"1380":1,"1396":3,"1415":3,"1416":2,"1429":1,"1436":19,"1438":6,"1441":1,"1443":2,"1447":3,"1486":1,"1487":2,"1488":3,"1496":4,"1526":1,"1540":1,"1577":2,"1611":1,"1615":1,"1617":1,"1659":1,"1660":1,"1666":2,"1670":1,"1671":1,"1753":1,"1774":1,"1825":1,"1827":3,"1873":1,"1920":1,"1934":1,"1968":2,"1972":2,"1973":1,"1975":1,"1998":1,"2000":3,"2024":2,"2066":3,"2083":1,"2146":1,"2147":2,"2149":2,"2151":1,"2153":4,"2160":1,"2208":1,"2227":1,"2230":2,"2232":5}}],["mid",{"0":{"2066":1},"3":{"0":3,"20":1,"26":1,"194":1,"517":1,"674":1,"691":1,"707":1,"741":1,"743":1,"759":1,"767":1,"881":1,"954":1,"996":1,"998":1,"1042":1,"1101":1,"1247":1,"1251":1,"1255":2,"1259":3,"1267":1,"1270":4,"1276":1,"1286":6,"1300":1,"1311":6,"1323":9,"1324":8,"1339":1,"1359":3,"1369":1,"1380":2,"1390":1,"1395":8,"1396":16,"1400":1,"1402":1,"1415":2,"1417":3,"1432":1,"1436":6,"1438":1,"1455":1,"1456":1,"1460":1,"1475":3,"1488":2,"1496":3,"1684":1,"1749":1,"1765":1,"1766":1,"1835":1,"1841":1,"1889":1,"1909":1,"1911":1,"1948":1,"2035":1,"2066":1,"2069":1,"2158":1,"2188":1,"2232":1}}],["minoptions",{"3":{"1398":1,"1402":10}}],["minority",{"3":{"689":1,"741":1,"1380":1}}],["minor",{"2":{"1733":2},"3":{"147":1,"1004":1,"1075":1,"1324":1,"1496":1,"1517":1,"1526":3,"1532":1,"1537":1,"1576":1,"1577":1,"1591":2,"1599":1,"1673":1,"1675":1,"1733":3,"1735":1}}],["mind",{"3":{"1323":1,"1355":1,"1359":1,"1398":1}}],["mincount",{"3":{"1237":1}}],["minvalue",{"2":{"1352":1},"3":{"1300":1,"1311":2,"1350":2,"1352":1,"1359":1,"1369":1,"1395":2,"1465":1}}],["minvaluespec",{"3":{"1199":2,"1207":1,"1496":1}}],["minverskip=true",{"3":{"1454":1}}],["minver",{"3":{"0":1,"147":1,"939":1,"1212":1,"1213":1,"1453":1,"1454":3,"1492":1,"1577":1,"1733":1,"2112":2}}],["mini",{"3":{"2239":1}}],["miniprofiler",{"3":{"1262":2,"1270":6,"1278":1,"1284":1,"1286":15,"1311":4,"1316":1,"1323":1,"1438":1,"1664":1,"1753":1,"1774":2}}],["miniprofilerextensions",{"3":{"980":1,"1199":1,"1203":1,"1207":2,"1208":1,"1270":1,"1311":4,"1323":2}}],["miniature",{"0":{"1392":1},"3":{"1217":1,"1230":1,"1291":1,"1300":2,"1301":1,"1309":2,"1350":1,"1359":1,"1395":1,"1417":1,"1431":1,"1436":1,"2090":1}}],["minimisation",{"3":{"1396":1}}],["minimizing",{"3":{"1396":1,"1445":1,"1458":1}}],["minimizes",{"3":{"1395":1}}],["minimized",{"3":{"1359":1}}],["minimization",{"3":{"1237":1,"1359":2,"1396":1,"1415":2,"1417":1}}],["minimaltlsversion",{"3":{"1467":1}}],["minimality",{"3":{"1324":1}}],["minimalism",{"3":{"1300":1}}],["minimal",{"3":{"0":1,"31":1,"59":1,"448":2,"632":1,"674":1,"1004":1,"1050":1,"1213":1,"1229":1,"1237":1,"1247":1,"1259":2,"1284":1,"1286":6,"1289":1,"1300":8,"1309":1,"1311":8,"1313":1,"1323":4,"1324":6,"1339":1,"1350":2,"1376":1,"1380":2,"1395":2,"1396":2,"1402":3,"1415":2,"1416":3,"1417":1,"1429":1,"1430":1,"1436":21,"1438":1,"1441":1,"1443":1,"1445":1,"1454":1,"1489":1,"1492":1,"1542":1,"1546":1,"1555":1,"1563":1,"1638":2,"1658":1,"1810":1,"1880":1,"1898":1,"2055":1,"2094":1,"2131":2,"2221":1,"2228":1,"2232":1}}],["minimumtlsversion",{"3":{"1467":1}}],["minimumthroughput",{"2":{"100":1},"3":{"100":1,"819":1,"1312":2,"1339":2}}],["minimumroutes",{"3":{"1436":2}}],["minimumrazorfiles",{"3":{"1436":1}}],["minimumcreateforms=4",{"3":{"1591":1,"1600":1}}],["minimumcreateforms",{"3":{"1436":2,"1489":1,"1596":1}}],["minimumcodebehindfiles",{"3":{"1436":3,"1591":1}}],["minimumcommonpackagecount",{"3":{"1436":2}}],["minimumcommands",{"3":{"1436":2,"1489":2}}],["minimumcontainerapps",{"3":{"1436":1}}],["minimumbaseresources=25",{"3":{"1591":1}}],["minimumbaseresources",{"3":{"1436":4,"1489":1}}],["minimumscannedfiles=40",{"3":{"1591":1}}],["minimumscannedfiles=60",{"3":{"1526":1}}],["minimumscannedfiles",{"3":{"1436":5,"1489":1}}],["minimumscannedtypes",{"3":{"1436":7}}],["minimumsimilarity",{"2":{"1376":1},"3":{"1359":6,"1376":1,"1380":1}}],["minimumgovernedpages",{"3":{"1431":1,"1436":1,"1526":1}}],["minimumlevel",{"3":{"1339":1}}],["minimumlength",{"3":{"827":1,"1271":2,"1300":2,"1339":2,"1436":1}}],["minimumerrorcodes",{"2":{"1271":1},"3":{"1271":1,"1436":2}}],["minimumwait",{"3":{"1259":1,"1286":2,"1323":2}}],["minimumpathcount=10",{"3":{"1526":1,"1531":1}}],["minimumpathcountbecause",{"3":{"1436":1}}],["minimumpathcount",{"2":{"574":1},"3":{"574":1,"1436":3,"1488":1}}],["minimum",{"3":{"0":1,"24":1,"71":1,"74":1,"101":1,"130":1,"132":1,"137":1,"140":1,"142":1,"215":1,"401":1,"530":1,"610":1,"635":1,"821":1,"1018":2,"1020":1,"1215":1,"1259":2,"1271":2,"1300":1,"1309":1,"1310":1,"1323":1,"1330":2,"1333":1,"1339":3,"1359":6,"1396":2,"1402":2,"1415":4,"1416":1,"1431":1,"1436":8,"1441":1,"1449":1,"1453":3,"1454":1,"1455":6,"1460":1,"1461":1,"1465":1,"1467":1,"1477":1,"1486":2,"1490":1,"1492":4,"1526":1,"1577":2,"1586":1,"1591":1,"1602":1,"1640":1,"1641":2,"1678":1,"1705":1,"1714":3,"2030":1,"2032":1,"2045":1,"2047":1,"2058":1,"2105":1,"2107":1}}],["minimumalertspecs",{"2":{"607":1,"1476":1,"2046":1},"3":{"0":2,"607":2,"609":2,"1018":1,"1436":7,"1476":1,"1526":1,"2046":2}}],["minlength",{"3":{"657":1,"1237":2,"1300":1,"1467":1,"1472":1,"1474":1}}],["minratio",{"3":{"591":1}}],["minreplicas",{"2":{"291":1,"293":1,"995":1,"1154":1,"1156":1,"1255":1,"1469":1,"1841":1,"2033":1},"3":{"0":1,"20":1,"291":2,"293":1,"390":2,"995":1,"1154":1,"1156":1,"1255":1,"1259":2,"1455":1,"1467":4,"1469":2,"1474":1,"1526":2,"1534":1,"1841":1,"2033":1}}],["mine=true",{"3":{"1391":1,"1395":1,"1416":2}}],["mine",{"3":{"320":1,"1237":1,"1395":1,"1396":1,"1402":1,"1748":1,"1759":1,"1765":1,"1996":1}}],["minus",{"3":{"22":1,"707":1,"743":1,"1019":1,"1262":1,"1271":1,"1286":2,"1309":2,"1311":1,"1324":1,"1339":1,"1359":2,"1366":1,"1380":4,"1396":3,"1417":1,"1435":1,"1436":3,"1438":1,"1455":1,"1480":1,"1507":1,"1662":1,"1765":1,"1827":1}}],["minutesuntilstart",{"3":{"1396":2}}],["minutes",{"2":{"539":1,"1475":1},"3":{"0":3,"18":1,"19":2,"22":1,"237":1,"386":1,"387":3,"392":2,"499":1,"517":1,"530":1,"535":1,"538":1,"539":6,"540":1,"609":2,"611":1,"619":1,"625":2,"627":3,"640":2,"675":1,"708":1,"757":1,"759":5,"760":2,"813":1,"818":1,"819":1,"905":1,"996":1,"1018":1,"1019":1,"1029":1,"1067":1,"1069":1,"1099":2,"1212":1,"1264":1,"1288":1,"1289":1,"1294":1,"1295":1,"1300":6,"1305":1,"1311":3,"1312":2,"1323":3,"1324":4,"1328":2,"1330":1,"1339":3,"1350":2,"1358":1,"1359":9,"1376":1,"1380":1,"1387":1,"1390":1,"1395":6,"1396":5,"1397":1,"1416":1,"1417":2,"1430":1,"1436":2,"1449":1,"1453":5,"1454":2,"1455":9,"1456":5,"1460":2,"1465":1,"1466":1,"1467":14,"1473":1,"1474":6,"1475":8,"1476":6,"1478":1,"1486":1,"1490":2,"1492":1,"1496":1,"1577":3,"1582":2,"1630":1,"1631":1,"1632":2,"1638":1,"1639":1,"1641":2,"1767":1,"1843":2,"1922":1,"1923":1,"1942":1,"1980":1,"1982":1,"1985":1,"2012":1,"2033":2,"2034":3,"2036":1,"2038":1,"2050":1,"2066":1,"2158":2,"2161":2,"2167":1,"2168":1}}],["minute",{"0":{"1719":1},"3":{"0":8,"175":2,"178":2,"179":1,"260":1,"280":1,"282":1,"350":1,"390":1,"391":1,"392":2,"422":1,"459":1,"517":1,"536":2,"591":1,"593":1,"607":1,"609":1,"626":1,"627":1,"640":1,"709":1,"759":1,"766":1,"809":2,"819":1,"854":2,"862":1,"914":1,"916":1,"1018":2,"1029":1,"1066":1,"1124":2,"1184":1,"1212":2,"1264":2,"1270":3,"1286":1,"1288":1,"1292":1,"1300":5,"1311":13,"1323":2,"1324":5,"1330":2,"1339":4,"1342":2,"1350":1,"1357":1,"1358":2,"1359":11,"1362":1,"1367":3,"1368":1,"1369":1,"1379":1,"1380":9,"1390":1,"1395":3,"1396":3,"1436":1,"1438":4,"1443":1,"1447":1,"1449":2,"1455":4,"1456":4,"1458":1,"1459":2,"1460":2,"1463":1,"1467":16,"1469":2,"1474":1,"1475":4,"1476":2,"1492":1,"1496":1,"1525":1,"1526":2,"1531":2,"1534":1,"1535":1,"1572":1,"1591":1,"1599":1,"1631":1,"1639":2,"1641":1,"1667":1,"1807":1,"1827":1,"1843":1,"1846":1,"1853":1,"1868":1,"1892":1,"1899":1,"1922":1,"1950":1,"1958":1,"1965":1,"1972":1,"1975":3,"1979":1,"1980":1,"1985":1,"1991":1,"1997":1,"1998":3,"2000":1,"2001":2,"2002":1,"2037":2,"2038":1,"2048":1,"2069":1,"2087":1,"2108":1,"2128":1,"2133":1,"2139":1,"2153":1,"2158":3,"2160":1,"2167":2,"2169":1,"2180":1,"2190":2,"2193":1,"2203":1}}],["minter",{"3":{"1396":1}}],["minted",{"3":{"0":7,"207":1,"208":1,"209":1,"350":1,"443":1,"470":1,"664":1,"690":1,"788":1,"790":2,"793":2,"794":3,"805":1,"826":1,"827":1,"829":1,"880":1,"881":2,"882":1,"905":1,"1067":1,"1116":2,"1212":3,"1259":1,"1264":1,"1270":2,"1293":2,"1300":16,"1309":1,"1311":7,"1323":1,"1324":3,"1336":1,"1339":2,"1342":1,"1348":1,"1350":1,"1357":1,"1380":2,"1395":4,"1396":10,"1404":1,"1409":1,"1415":2,"1417":1,"1436":1,"1438":1,"1442":1,"1467":2,"1490":1,"1631":2,"1641":1,"1667":1,"1765":1,"1893":1,"1968":2,"1970":2,"1971":1,"1973":1,"1982":1,"2166":1,"2197":1,"2198":1,"2232":1}}],["mintaccesstoken",{"3":{"1300":6}}],["mintable",{"3":{"0":1}}],["mintforsession",{"3":{"1290":1,"1300":4}}],["mint",{"3":{"30":1,"32":1,"177":1,"499":1,"500":1,"664":2,"665":2,"670":2,"792":3,"828":1,"881":1,"883":1,"904":1,"905":2,"906":1,"926":1,"1212":1,"1278":1,"1286":2,"1292":1,"1293":1,"1300":18,"1311":4,"1323":3,"1324":3,"1326":1,"1336":1,"1339":1,"1369":1,"1380":1,"1395":2,"1396":1,"1415":2,"1417":1,"1436":3,"1438":1,"1441":1,"1454":1,"1455":1,"1467":3,"1472":1,"1582":1,"1585":1,"1667":1,"1765":1,"1767":1,"1894":1,"1899":1,"1911":1,"1970":1,"1980":1,"2063":1,"2066":1,"2197":1,"2232":1}}],["mints",{"3":{"0":1,"32":1,"186":1,"349":1,"350":2,"353":1,"458":1,"499":1,"602":1,"665":1,"667":1,"668":2,"792":1,"827":1,"829":1,"880":1,"885":1,"905":3,"907":1,"1059":1,"1069":1,"1249":1,"1259":2,"1270":1,"1288":1,"1289":2,"1290":2,"1294":1,"1300":24,"1301":1,"1309":2,"1311":3,"1322":1,"1323":1,"1324":4,"1328":1,"1337":1,"1339":2,"1343":1,"1380":3,"1395":3,"1396":8,"1407":1,"1414":1,"1415":3,"1417":1,"1429":1,"1430":1,"1436":1,"1438":2,"1449":1,"1460":1,"1467":1,"1472":1,"1475":1,"1488":1,"1490":1,"1589":1,"1596":1,"1627":1,"1641":1,"1671":1,"1732":1,"1893":2,"1899":1,"1972":1,"1975":2,"1982":1,"1985":1,"2024":1,"2056":1,"2202":1}}],["minting",{"3":{"0":2,"126":1,"295":1,"333":1,"351":1,"400":1,"827":1,"881":1,"908":1,"1030":1,"1116":1,"1259":1,"1263":1,"1270":1,"1286":1,"1287":1,"1290":1,"1295":1,"1300":5,"1304":1,"1309":2,"1324":1,"1337":1,"1339":1,"1348":1,"1350":3,"1377":2,"1380":1,"1395":1,"1396":8,"1402":1,"1406":1,"1409":2,"1415":3,"1417":2,"1432":1,"1445":1,"1447":1,"1449":1,"1455":1,"1491":1,"1972":1,"2024":1,"2166":1}}],["min",{"3":{"0":3,"24":1,"68":2,"177":1,"281":1,"330":1,"609":2,"612":1,"733":1,"1237":1,"1244":1,"1259":1,"1286":1,"1300":1,"1311":3,"1324":3,"1339":2,"1396":1,"1415":1,"1422":1,"1443":2,"1455":2,"1467":4,"1474":14,"1525":1,"1526":1,"1534":1,"1535":1,"1576":1,"1577":2,"1590":1,"1591":2,"1596":1,"1599":1,"1600":2,"1632":1,"1709":2,"1710":1,"1712":1,"1747":1,"1753":1,"1765":1,"1988":1,"2000":1}}],["mirrors",{"3":{"0":4,"26":1,"199":1,"247":1,"265":1,"268":1,"269":1,"321":1,"324":1,"351":1,"355":1,"362":1,"388":1,"471":1,"556":1,"599":1,"626":1,"644":1,"653":1,"698":2,"707":1,"725":1,"766":1,"832":1,"857":1,"881":1,"1042":1,"1059":2,"1063":1,"1067":1,"1068":1,"1108":1,"1212":3,"1229":2,"1237":3,"1242":1,"1247":1,"1259":2,"1270":3,"1271":1,"1286":6,"1295":1,"1300":2,"1301":2,"1303":1,"1309":2,"1310":2,"1311":7,"1312":3,"1322":1,"1323":3,"1324":17,"1339":4,"1350":10,"1353":1,"1359":11,"1369":4,"1372":1,"1374":1,"1379":2,"1380":3,"1384":1,"1395":7,"1396":10,"1402":7,"1407":1,"1412":1,"1414":1,"1415":5,"1416":1,"1417":2,"1430":1,"1436":17,"1438":1,"1441":1,"1444":1,"1455":2,"1490":1,"1496":1,"1526":1,"1561":1,"1570":1,"1591":2,"1599":1,"1653":1,"1662":1,"1666":1,"1825":1,"1922":1,"1927":1,"1968":1,"1995":1,"2018":1,"2075":1,"2076":1,"2187":1,"2191":1}}],["mirror",{"0":{"1608":1,"1742":1},"3":{"0":3,"122":1,"162":1,"181":1,"217":1,"219":1,"241":1,"346":1,"407":1,"448":1,"528":1,"576":1,"707":1,"729":1,"803":1,"860":1,"931":1,"1034":1,"1042":1,"1212":1,"1225":1,"1227":1,"1228":1,"1229":3,"1237":3,"1253":2,"1258":1,"1270":1,"1283":1,"1286":2,"1300":3,"1301":1,"1309":4,"1310":1,"1311":2,"1324":15,"1339":3,"1340":1,"1350":4,"1359":13,"1380":3,"1384":1,"1395":7,"1396":10,"1398":1,"1401":1,"1402":3,"1415":2,"1416":5,"1432":1,"1436":3,"1444":1,"1531":1,"1535":1,"1648":1,"1649":1,"1667":1,"1669":1,"1685":1,"1687":2,"1702":1,"1835":1,"1851":1,"1922":1,"1930":1,"1953":1,"2131":1,"2156":1,"2165":1,"2188":1}}],["mirroring",{"3":{"0":1,"53":1,"145":1,"243":1,"246":1,"698":1,"715":1,"799":1,"854":1,"1034":1,"1116":1,"1124":1,"1229":2,"1244":1,"1247":1,"1259":1,"1286":3,"1300":1,"1309":2,"1311":1,"1312":1,"1323":1,"1324":4,"1350":2,"1359":2,"1380":3,"1395":3,"1396":2,"1416":1,"1417":3,"1427":1,"1436":6,"1486":1,"1596":1,"1631":1,"1645":1,"1825":1,"1995":1,"2102":1}}],["mirrored",{"3":{"0":2,"109":1,"147":1,"374":1,"618":1,"649":1,"1067":1,"1068":1,"1211":1,"1291":1,"1312":1,"1324":3,"1330":1,"1339":3,"1344":1,"1350":1,"1396":4,"1417":2,"1436":1,"1443":1,"1478":1,"1488":1,"1526":1,"1532":1,"1591":1,"1669":1,"1673":1,"2056":1,"2079":1}}],["mezzanine",{"3":{"1359":1,"1630":1}}],["meziantou",{"2":{"138":1},"3":{"138":1,"265":1,"1213":1,"1453":1,"1577":1,"1673":1,"1903":1}}],["mega",{"3":{"1323":1}}],["megabytes",{"3":{"1323":1,"1395":3}}],["megabyte",{"3":{"390":1,"1117":1,"1125":1,"1324":1,"1359":1}}],["me",{"0":{"1787":1},"3":{"1228":2,"1229":2,"1270":1,"1286":2,"1300":1,"1309":1,"1311":1,"1312":1,"1324":1,"1359":4,"1378":1,"1395":1,"1396":12,"1402":1,"1415":9,"1417":1,"1436":1,"1631":2,"1640":3,"1787":1,"1859":1,"1880":1,"2098":1,"2166":1,"2169":1,"2211":1,"2243":1,"2244":1}}],["mesh",{"3":{"702":1,"1312":2,"1396":1}}],["messagingentitynotfoundexception",{"3":{"1323":1}}],["messagingexception",{"3":{"1323":2}}],["messaging",{"0":{"1547":1,"1665":1},"1":{"928":1,"929":1,"930":1,"931":1,"932":1,"933":1,"934":1,"935":1},"2":{"130":1,"150":1,"152":1,"203":1,"917":1,"929":1,"1074":1,"1075":1,"1077":1,"1078":2,"1259":1,"1323":1},"3":{"0":4,"15":1,"25":1,"26":2,"27":5,"68":1,"70":1,"74":1,"130":1,"135":1,"139":2,"145":1,"150":15,"152":2,"166":1,"171":1,"193":2,"196":2,"198":1,"200":1,"201":2,"202":6,"203":5,"255":1,"256":1,"259":1,"391":1,"638":1,"640":12,"641":2,"642":2,"644":1,"674":1,"702":4,"818":1,"819":5,"821":1,"822":2,"846":1,"849":1,"915":2,"917":1,"928":1,"929":1,"930":1,"931":4,"933":1,"934":2,"980":3,"982":2,"983":1,"1006":1,"1012":1,"1013":1,"1074":9,"1075":3,"1077":1,"1078":2,"1175":2,"1203":16,"1207":141,"1208":2,"1212":3,"1213":1,"1216":1,"1237":2,"1247":2,"1257":5,"1258":2,"1259":84,"1270":3,"1286":4,"1300":8,"1309":1,"1311":4,"1316":2,"1317":4,"1318":3,"1320":5,"1323":71,"1339":3,"1359":1,"1396":1,"1415":2,"1417":1,"1436":6,"1438":8,"1441":1,"1443":1,"1451":1,"1496":4,"1499":1,"1519":1,"1524":1,"1526":3,"1527":1,"1530":1,"1531":3,"1532":1,"1533":1,"1536":1,"1539":1,"1551":1,"1577":7,"1578":1,"1582":1,"1583":1,"1585":1,"1586":1,"1588":1,"1589":1,"1591":2,"1592":1,"1595":1,"1596":2,"1597":1,"1598":1,"1602":1,"1656":1,"1660":1,"1662":1,"1673":1,"1675":1,"1707":2,"1718":1,"1721":1,"1784":1,"1796":1,"1924":1,"1936":1,"2008":1,"2182":1,"2212":1,"2213":1,"2218":1,"2232":1}}],["messagepack",{"3":{"370":1,"1577":1}}],["messageheaders",{"2":{"202":1},"3":{"202":2,"702":1,"1199":5,"1203":1,"1207":2,"1259":5,"1300":6,"1323":2,"1496":1}}],["messageid",{"2":{"77":1,"195":1,"197":1,"200":1,"202":1,"203":2,"786":1,"847":1,"1273":1,"1508":1,"1845":1,"1888":1,"1889":1},"3":{"0":2,"77":1,"195":7,"197":2,"200":2,"201":2,"202":1,"203":2,"782":1,"786":1,"846":2,"847":1,"1074":1,"1212":2,"1247":4,"1249":3,"1258":1,"1259":26,"1269":1,"1270":2,"1273":1,"1286":1,"1309":1,"1323":2,"1350":3,"1427":1,"1436":2,"1438":2,"1508":1,"1577":2,"1845":1,"1888":1,"1889":1,"1910":4}}],["messages=",{"3":{"1436":1}}],["messages",{"3":{"0":1,"21":1,"24":1,"25":1,"27":1,"53":1,"109":1,"117":1,"195":1,"198":1,"225":1,"255":1,"265":1,"397":1,"433":1,"538":1,"629":2,"640":1,"656":1,"790":1,"810":1,"819":1,"1012":1,"1018":1,"1026":1,"1082":1,"1091":2,"1107":1,"1150":1,"1229":1,"1237":1,"1247":2,"1255":1,"1259":13,"1270":1,"1271":4,"1273":1,"1286":5,"1296":1,"1300":5,"1301":1,"1302":1,"1309":8,"1311":3,"1315":1,"1323":11,"1324":14,"1333":1,"1339":2,"1359":18,"1377":1,"1380":4,"1394":1,"1395":9,"1396":11,"1402":3,"1415":7,"1420":1,"1423":3,"1424":1,"1427":9,"1435":2,"1436":17,"1437":1,"1467":3,"1492":2,"1577":1,"1641":1,"1653":1,"1677":1,"1686":1,"1702":1,"1727":1,"1817":1,"1831":1,"1841":1,"1845":1,"1846":1,"1936":1,"1943":1,"2044":1,"2081":1,"2156":1,"2172":1}}],["message",{"0":{"1943":1,"2020":1},"1":{"816":1,"817":1,"818":1,"819":1,"820":1,"821":1,"822":1,"823":1,"1072":1,"1073":1,"1074":1,"1075":1,"1076":1,"1077":1,"1078":1,"1079":1},"2":{"301":1,"818":1,"1843":1},"3":{"0":10,"17":1,"19":4,"22":2,"24":4,"26":1,"27":1,"71":1,"72":1,"77":1,"109":11,"111":2,"113":1,"125":1,"136":1,"170":2,"193":2,"195":2,"196":1,"197":1,"198":1,"200":1,"201":4,"202":2,"219":1,"255":1,"265":9,"266":1,"267":1,"284":1,"290":1,"300":1,"301":1,"306":1,"342":1,"352":1,"353":1,"354":1,"391":1,"397":5,"399":2,"434":1,"536":2,"537":2,"538":2,"539":1,"546":1,"568":1,"574":1,"583":1,"624":1,"626":3,"628":1,"629":1,"640":2,"657":1,"659":1,"673":1,"674":1,"684":1,"688":1,"690":2,"691":1,"692":2,"696":1,"702":2,"766":3,"768":1,"789":3,"790":2,"816":1,"818":7,"819":7,"820":2,"821":2,"823":1,"838":1,"845":1,"846":1,"862":1,"875":1,"882":1,"905":1,"931":1,"963":1,"972":1,"973":1,"988":1,"989":1,"996":1,"1004":1,"1012":2,"1017":1,"1018":3,"1019":2,"1043":1,"1067":1,"1072":1,"1074":1,"1075":2,"1091":3,"1092":1,"1093":1,"1100":1,"1108":1,"1126":1,"1133":1,"1134":1,"1140":1,"1161":1,"1162":1,"1169":1,"1175":1,"1192":1,"1202":1,"1203":1,"1212":3,"1219":1,"1225":1,"1229":9,"1230":1,"1237":9,"1247":10,"1248":1,"1249":1,"1253":2,"1256":2,"1258":3,"1259":82,"1264":1,"1269":1,"1270":23,"1271":27,"1274":1,"1279":2,"1284":1,"1286":46,"1297":2,"1299":1,"1300":31,"1301":2,"1302":3,"1306":1,"1309":11,"1311":43,"1312":25,"1315":1,"1316":1,"1317":3,"1318":3,"1320":1,"1323":93,"1324":95,"1333":1,"1338":1,"1339":12,"1350":15,"1352":1,"1353":1,"1355":1,"1359":148,"1366":3,"1369":1,"1380":10,"1384":1,"1395":45,"1396":59,"1402":39,"1406":1,"1413":1,"1414":1,"1415":28,"1417":12,"1420":1,"1422":1,"1423":2,"1424":1,"1427":22,"1429":1,"1430":1,"1435":1,"1436":176,"1438":14,"1441":1,"1443":1,"1455":1,"1467":6,"1488":4,"1489":2,"1492":1,"1496":1,"1524":1,"1526":3,"1531":1,"1543":1,"1547":4,"1575":1,"1577":3,"1585":1,"1591":3,"1596":1,"1639":1,"1640":3,"1641":2,"1645":1,"1653":1,"1665":1,"1669":1,"1677":4,"1685":1,"1686":2,"1702":1,"1752":1,"1769":1,"1776":1,"1790":1,"1802":1,"1805":1,"1815":1,"1824":2,"1831":2,"1840":1,"1841":2,"1843":9,"1852":1,"1873":2,"1876":1,"1887":1,"1889":2,"1891":1,"1910":3,"1912":1,"1922":5,"1924":1,"1927":2,"1942":2,"1977":1,"1978":1,"1985":1,"1994":1,"2003":1,"2006":1,"2010":1,"2012":2,"2015":1,"2028":1,"2032":2,"2044":1,"2047":1,"2069":1,"2074":1,"2083":3,"2086":2,"2092":1,"2099":1,"2126":1,"2128":1,"2150":1,"2154":1,"2157":2,"2164":1,"2165":1,"2166":2,"2172":1,"2174":1,"2179":1,"2180":1,"2181":2,"2182":2,"2200":1,"2227":2,"2232":3,"2235":1,"2237":1}}],["messagebusbackpressuretests",{"2":{"1591":1},"3":{"1591":2,"1596":1}}],["messagebusprovider",{"2":{"150":1,"200":1,"201":1,"931":1,"1075":1,"1446":1,"1842":2},"3":{"0":2,"150":1,"200":1,"201":2,"640":1,"931":1,"964":1,"1075":1,"1199":4,"1203":1,"1207":1,"1212":1,"1320":1,"1323":4,"1326":1,"1339":3,"1446":1,"1842":2}}],["messagebus",{"2":{"640":2,"642":1,"644":1,"915":1,"933":1,"1441":1,"2013":1},"3":{"0":7,"15":3,"24":1,"25":1,"27":1,"193":2,"195":1,"198":2,"200":1,"203":1,"640":9,"642":1,"644":1,"819":1,"914":1,"915":1,"930":1,"931":3,"932":1,"933":2,"1212":2,"1257":2,"1259":10,"1286":1,"1323":6,"1326":1,"1327":1,"1339":4,"1429":1,"1436":2,"1441":4,"1446":3,"1451":1,"1467":4,"1508":1,"1577":1,"1582":1,"1591":1,"1612":1,"1653":1,"1663":1,"1665":1,"1675":1,"1721":1,"1724":2,"1842":1,"1843":1,"1845":1,"1910":1,"1911":1,"2008":2,"2013":1,"2022":1}}],["messagebussettingstests",{"3":{"1199":1,"1207":1}}],["messagebussettings",{"2":{"0":1,"145":1,"152":1,"201":1,"638":1,"644":1,"822":1,"929":1,"931":1,"1257":1,"1707":2,"1790":1,"1842":2,"1910":2,"2020":1,"2026":1},"3":{"0":1,"15":1,"24":1,"25":1,"27":2,"145":2,"150":1,"152":1,"193":1,"196":1,"198":1,"200":2,"201":2,"203":1,"638":1,"640":4,"644":1,"674":1,"818":1,"819":2,"822":1,"915":1,"929":1,"930":1,"931":2,"1199":14,"1203":1,"1207":3,"1257":3,"1259":20,"1286":2,"1313":1,"1316":1,"1320":2,"1323":24,"1326":1,"1339":3,"1436":2,"1496":1,"1534":1,"1577":1,"1582":1,"1583":1,"1586":1,"1591":1,"1707":3,"1790":1,"1842":2,"1910":2,"2020":1,"2026":1}}],["mediocre",{"3":{"1216":1,"1537":1,"1797":1}}],["medium",{"3":{"682":1,"1324":3,"1395":1,"1396":1,"1417":2,"2220":1,"2234":1,"2236":2}}],["median",{"3":{"1436":1,"1577":1,"1707":1}}],["mediapicker",{"3":{"439":1,"1415":1,"1417":6}}],["media",{"2":{"1712":1},"3":{"416":1,"682":4,"684":1,"691":1,"740":1,"741":1,"743":1,"1202":1,"1203":15,"1207":28,"1300":1,"1311":1,"1324":1,"1350":2,"1415":1,"1417":57,"1491":1,"1496":1,"1585":1,"1669":2,"1712":2,"1714":1,"2073":1,"2118":1}}],["mediate",{"3":{"1991":1}}],["mediated",{"3":{"0":1,"332":1}}],["mediators",{"3":{"1556":1}}],["mediator",{"3":{"1270":2,"1539":2,"1543":1}}],["mediatr",{"3":{"0":1,"1075":1,"2139":1}}],["meetups",{"3":{"1380":1}}],["meetup",{"3":{"1342":1,"1350":1}}],["meetcustomrule",{"3":{"1312":1,"1436":2}}],["meeting",{"3":{"734":1,"808":1,"1283":1,"1311":1,"1417":1,"1436":1,"1491":1,"1526":1,"1888":1}}],["meet",{"3":{"92":1,"255":1,"813":1,"1191":1,"1194":1,"1200":1,"1214":1,"1241":1,"1247":1,"1276":1,"1286":2,"1300":3,"1301":4,"1311":1,"1322":1,"1324":2,"1350":1,"1359":4,"1366":1,"1396":3,"1478":1,"1577":2,"1641":3,"1668":1,"1714":1,"1831":1,"1923":1,"1995":1,"2141":1}}],["meetsminimumsizeonmobileviewport",{"3":{"1714":1}}],["meets",{"3":{"53":1,"135":1,"136":1,"568":1,"811":1,"1231":1,"1247":1,"1271":1,"1286":1,"1300":1,"1311":1,"1326":1,"1346":1,"1359":2,"1360":1,"1396":2,"1415":1,"1417":3,"1436":5,"1476":1,"1488":1,"1526":1,"1549":1,"1558":1,"1577":1,"1641":2,"1833":1,"2136":1}}],["mermaid",{"3":{"1502":1,"1620":1,"1756":1}}],["merchandising",{"3":{"1025":1}}],["mere",{"3":{"681":1,"1270":1,"1297":1}}],["merely",{"0":{"2196":1},"3":{"24":1,"38":1,"39":1,"96":1,"135":2,"137":1,"218":1,"324":1,"353":1,"358":1,"359":1,"360":1,"371":1,"497":1,"540":1,"575":1,"690":1,"757":1,"800":2,"827":2,"904":1,"946":1,"1060":1,"1237":2,"1255":1,"1270":1,"1271":1,"1286":6,"1295":1,"1300":2,"1306":1,"1309":2,"1311":1,"1313":1,"1320":1,"1323":2,"1324":1,"1327":1,"1328":1,"1339":5,"1350":2,"1359":10,"1380":2,"1395":3,"1396":10,"1402":2,"1415":4,"1417":1,"1428":1,"1436":17,"1438":1,"1444":1,"1455":1,"1457":1,"1460":1,"1467":1,"1473":1,"1486":1,"1526":1,"1685":1,"1825":1,"1920":1,"1923":1,"2045":1,"2048":1,"2061":1,"2132":1,"2137":1,"2140":1,"2142":2}}],["merging",{"3":{"627":1,"1018":1,"1359":3,"1453":1,"1591":1,"1767":1}}],["merges",{"3":{"0":1,"418":1,"618":1,"838":2,"1091":1,"1271":1,"1286":1,"1300":1,"1309":1,"1311":1,"1324":1,"1359":6,"1396":1,"1415":1,"1436":1,"1453":1,"1455":2,"1492":1,"1572":1,"1577":1,"1582":1,"1591":1,"1905":1}}],["merge",{"3":{"0":3,"112":1,"135":1,"265":1,"564":2,"590":1,"591":1,"595":1,"618":2,"625":1,"626":3,"628":2,"629":1,"630":1,"642":2,"838":1,"863":2,"1212":2,"1247":3,"1286":1,"1300":2,"1310":1,"1311":2,"1323":4,"1339":2,"1359":1,"1415":4,"1436":2,"1453":3,"1454":1,"1455":5,"1456":1,"1459":1,"1478":1,"1485":1,"1486":4,"1490":1,"1492":16,"1496":2,"1526":6,"1531":1,"1535":1,"1554":1,"1565":1,"1570":1,"1572":1,"1577":12,"1581":3,"1582":3,"1583":1,"1586":1,"1589":3,"1590":1,"1591":12,"1595":1,"1596":5,"1598":1,"1605":1,"1616":1,"1643":1,"1662":1,"1673":1,"1716":3,"1765":1,"1800":2,"1811":1,"1876":1,"1902":1,"1923":2,"2057":1,"2073":1,"2079":1,"2110":1,"2134":1,"2232":1}}],["merged",{"3":{"0":2,"94":1,"109":1,"365":1,"368":1,"373":1,"424":1,"425":1,"526":1,"530":1,"543":1,"550":2,"572":1,"607":1,"832":2,"833":1,"1012":2,"1016":1,"1081":1,"1085":2,"1229":1,"1237":1,"1247":2,"1256":1,"1259":2,"1300":1,"1323":1,"1339":3,"1359":3,"1396":1,"1415":2,"1429":1,"1438":1,"1447":1,"1453":1,"1454":3,"1459":1,"1481":1,"1492":2,"1496":1,"2058":1}}],["merits",{"3":{"486":1,"801":1,"1018":1,"1054":1}}],["mechanic",{"3":{"715":1,"716":1,"1286":4,"1301":1,"1395":1,"1396":4,"1417":1,"1839":1}}],["mechanics",{"3":{"1":1,"147":1,"272":1,"329":1,"369":1,"506":1,"715":1,"861":1,"862":1,"1043":1,"1045":1,"1229":1,"1237":2,"1247":1,"1259":5,"1270":1,"1275":1,"1286":12,"1300":5,"1311":3,"1324":5,"1339":4,"1350":5,"1359":4,"1380":1,"1395":9,"1415":1,"1417":1,"1433":1,"1435":1,"1436":11,"1475":1,"1577":1,"1861":1,"2047":1,"2203":1}}],["mechanically",{"3":{"342":1,"801":1,"1191":2,"1192":1,"1204":1,"1270":1,"1286":1,"1359":2,"1369":1,"1417":1,"1436":6,"1480":1,"1495":1,"1496":8,"1500":1,"1875":1,"1926":1}}],["mechanical",{"3":{"0":1,"88":1,"135":1,"143":1,"267":1,"483":1,"486":1,"674":1,"980":1,"1069":1,"1094":1,"1270":2,"1286":1,"1309":1,"1311":1,"1324":1,"1350":2,"1359":4,"1369":1,"1396":1,"1431":1,"1436":7,"1455":1,"1459":2,"1460":1,"1496":9,"1585":1,"1653":1,"1673":1,"1675":1,"1735":1}}],["mechanisms",{"0":{"2183":1},"3":{"19":1,"67":1,"282":1,"319":1,"340":1,"358":1,"557":1,"812":1,"1144":1,"1236":2,"1237":1,"1286":2,"1300":1,"1304":1,"1310":1,"1311":1,"1323":1,"1324":4,"1359":4,"1379":1,"1395":10,"1396":3,"1417":1,"1436":4,"1497":1,"1517":1,"1706":1,"1708":1,"1784":1,"1816":1,"1858":1,"1995":1,"2068":2,"2069":1,"2141":1,"2167":2,"2181":1,"2193":1}}],["mechanism",{"0":{"1804":1,"1908":1,"1910":1,"2063":1,"2165":1},"3":{"0":10,"3":1,"24":1,"39":1,"68":1,"80":1,"86":1,"109":1,"142":1,"169":1,"186":1,"207":1,"235":1,"259":1,"265":2,"266":2,"292":1,"295":1,"317":2,"320":1,"340":1,"358":1,"361":2,"362":1,"366":1,"372":1,"389":1,"391":1,"413":1,"465":1,"508":1,"517":1,"522":1,"536":2,"537":1,"538":1,"539":1,"582":1,"598":1,"599":1,"605":1,"608":1,"624":1,"658":1,"678":1,"689":2,"696":1,"699":1,"715":1,"723":1,"764":4,"769":1,"808":1,"809":1,"815":1,"820":1,"827":2,"829":1,"844":1,"846":1,"847":1,"848":2,"849":2,"850":1,"871":1,"905":1,"931":1,"958":1,"959":1,"960":1,"981":1,"988":1,"1012":1,"1075":1,"1099":1,"1101":1,"1139":1,"1147":1,"1192":1,"1193":1,"1212":2,"1213":1,"1218":1,"1229":5,"1237":6,"1247":3,"1249":1,"1253":1,"1258":1,"1259":9,"1270":11,"1271":3,"1286":16,"1290":1,"1297":1,"1300":5,"1309":1,"1310":1,"1311":5,"1318":1,"1323":8,"1324":17,"1339":11,"1350":5,"1355":1,"1359":21,"1377":1,"1380":4,"1395":10,"1396":6,"1402":5,"1413":1,"1415":6,"1416":1,"1417":9,"1418":1,"1436":25,"1438":1,"1446":1,"1454":1,"1456":1,"1457":1,"1459":1,"1474":3,"1477":1,"1479":1,"1486":1,"1488":1,"1489":1,"1490":1,"1496":2,"1510":1,"1526":1,"1564":1,"1566":1,"1567":2,"1575":2,"1577":2,"1578":1,"1582":1,"1586":1,"1591":5,"1634":1,"1639":2,"1641":2,"1677":1,"1707":1,"1764":1,"1790":1,"1840":1,"1842":1,"1844":1,"1845":1,"1846":1,"1851":1,"1853":1,"1871":1,"1876":1,"1882":1,"1891":1,"1921":1,"1922":1,"1947":1,"1948":1,"1950":1,"1962":1,"1963":1,"1964":1,"1965":1,"1968":1,"1975":1,"1992":1,"1994":1,"1996":2,"1997":1,"2000":1,"2002":1,"2020":1,"2031":1,"2043":1,"2046":1,"2061":2,"2062":1,"2063":1,"2068":3,"2069":1,"2080":1,"2082":1,"2085":1,"2086":1,"2113":1,"2119":1,"2120":1,"2122":1,"2130":1,"2133":1,"2134":1,"2136":1,"2142":1,"2143":1,"2145":1,"2164":3,"2168":2,"2169":1,"2185":1,"2193":1,"2230":1,"2232":1}}],["mentor",{"3":{"2216":1,"2242":1}}],["mentorship",{"0":{"2242":1},"3":{"2216":1,"2219":1}}],["mentoring",{"3":{"2213":1,"2218":1,"2238":1,"2245":1}}],["mentioning",{"3":{"1415":1}}],["mentioned",{"3":{"370":1,"1006":1,"1632":1}}],["mention",{"3":{"256":1,"423":1,"638":1,"988":1,"1286":1,"1348":1,"1436":1,"1459":1,"1460":1,"1685":2}}],["mentions",{"3":{"0":1,"230":1,"418":1,"425":1,"426":1,"435":1,"497":1,"555":1,"593":1,"609":1,"700":1,"782":1,"1270":4,"1311":3,"1359":1,"1369":1,"1396":1,"1415":2,"1436":3,"1472":1,"1496":1,"1568":1,"1639":2}}],["mental",{"3":{"167":1,"906":1,"932":1,"1220":1,"1323":1,"1359":1,"1395":1,"1416":1,"1805":1}}],["menuitem",{"3":{"1436":1}}],["menus",{"3":{"265":1,"1324":3,"1436":1,"1526":1,"1559":1,"1591":1,"1607":1,"1653":1,"1741":1,"2085":1}}],["menu",{"3":{"0":1,"618":1,"647":1,"648":1,"649":1,"651":1,"1212":1,"1324":19,"1395":2,"1396":4,"1415":6,"1436":2,"1438":1,"1526":1,"1562":1,"1621":1,"1625":1,"1627":4,"1653":3,"1761":2,"2077":4,"2083":1}}],["measurably",{"3":{"1289":1,"1483":1}}],["measurable",{"3":{"255":1,"405":1,"799":1,"1270":1,"1271":1,"1395":1,"1402":1,"1427":1,"1802":2}}],["measuring",{"3":{"236":1,"474":1,"592":1,"1286":1,"1339":1,"1436":1,"1455":1,"1458":1,"1492":2,"2047":1}}],["measureasync",{"3":{"1436":1}}],["measureandassertasync",{"2":{"861":1},"3":{"861":1}}],["measurewebvitalsasync",{"2":{"861":1},"3":{"861":1,"1436":6}}],["measurewebvitalswithinteractionasync",{"2":{"859":1,"861":1,"864":1},"3":{"859":1,"861":2,"864":1,"1436":3}}],["measure",{"3":{"72":1,"407":1,"591":1,"617":1,"631":1,"865":1,"1271":1,"1286":1,"1324":1,"1339":1,"1359":1,"1395":1,"1416":1,"1417":1,"1436":1,"1458":1,"1467":1,"1488":1,"1491":1,"1492":2,"1521":1,"1531":1,"1537":2,"1710":1,"1797":1,"1902":1,"2193":1}}],["measuresarevokedrowfromitsrevocationnotitsexpiry",{"3":{"906":1}}],["measures",{"3":{"0":2,"140":1,"558":1,"591":2,"611":1,"797":1,"821":1,"859":1,"860":2,"861":3,"1259":1,"1263":1,"1270":1,"1323":2,"1324":2,"1339":1,"1395":2,"1425":1,"1436":6,"1438":1,"1455":5,"1461":1,"1467":2,"1492":3,"1496":1,"1526":1,"1591":1,"1670":1,"1797":2,"1821":1,"2024":1,"2046":1,"2087":1}}],["measurements",{"3":{"480":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1,"591":1,"631":5,"636":1,"915":1,"1270":1,"1311":1,"1323":1,"1436":3,"1456":1,"1467":1,"1484":1,"1492":2,"1794":1}}],["measurement",{"3":{"0":1,"397":1,"487":2,"488":1,"489":1,"490":2,"491":1,"492":1,"493":1,"494":1,"591":3,"592":3,"799":1,"859":1,"860":1,"861":5,"863":1,"869":1,"875":1,"980":1,"1018":1,"1199":4,"1207":1,"1259":2,"1270":1,"1339":1,"1369":1,"1395":1,"1427":3,"1436":10,"1438":1,"1445":1,"1451":1,"1453":1,"1455":2,"1458":1,"1465":1,"1467":3,"1475":2,"1478":1,"1492":3,"1531":1,"1802":1,"2047":2,"2048":1,"2232":2}}],["measuredconstructors",{"3":{"1436":4}}],["measured",{"3":{"0":7,"137":1,"237":1,"397":1,"480":1,"483":1,"486":2,"487":2,"488":2,"489":2,"490":2,"491":2,"492":2,"493":2,"494":2,"590":1,"591":3,"592":1,"597":1,"604":1,"616":2,"620":1,"621":1,"632":1,"683":1,"797":2,"801":1,"803":1,"804":1,"805":1,"806":1,"827":1,"828":1,"860":2,"861":5,"862":3,"863":3,"869":1,"871":1,"914":2,"915":1,"947":1,"978":1,"980":1,"983":1,"986":1,"1011":1,"1012":1,"1048":1,"1054":1,"1101":1,"1125":1,"1199":2,"1207":1,"1212":1,"1270":2,"1286":1,"1300":4,"1323":2,"1324":2,"1339":2,"1344":1,"1358":1,"1395":2,"1396":1,"1402":1,"1416":1,"1425":1,"1436":21,"1438":2,"1443":1,"1447":1,"1455":4,"1458":1,"1460":1,"1461":1,"1465":3,"1467":4,"1474":2,"1475":2,"1476":1,"1483":1,"1484":1,"1492":6,"1496":4,"1500":1,"1523":1,"1525":1,"1526":4,"1529":1,"1534":2,"1549":1,"1560":1,"1566":1,"1568":1,"1571":1,"1575":3,"1576":1,"1577":8,"1581":1,"1582":1,"1583":1,"1591":4,"1596":1,"1670":1,"1678":2,"1707":10,"1709":1,"1710":1,"1923":2,"1985":1,"2024":1,"2034":3,"2037":1,"2043":1,"2047":2,"2058":1,"2059":1,"2079":1,"2156":1,"2177":1,"2232":3}}],["meanings",{"3":{"1300":1,"1323":1,"1339":1,"1630":1}}],["meaningless",{"3":{"691":1,"784":1,"1247":1,"1311":1,"1323":4,"1359":1,"1395":2,"1396":1,"1415":1,"1417":1,"1434":1,"1436":1,"1631":2,"1638":1,"1639":2,"2002":1}}],["meaningfulness",{"3":{"1487":1}}],["meaningfully",{"3":{"1323":1,"1359":1,"1417":1,"1436":1,"1492":1,"1950":1}}],["meaningful",{"3":{"305":1,"390":1,"499":1,"775":1,"918":1,"932":1,"1140":1,"1212":1,"1237":1,"1240":1,"1247":3,"1259":1,"1265":1,"1267":1,"1270":2,"1286":3,"1300":1,"1310":1,"1311":1,"1312":1,"1323":1,"1324":3,"1339":1,"1350":4,"1359":8,"1369":1,"1395":6,"1396":4,"1402":5,"1415":2,"1420":1,"1427":1,"1435":1,"1436":7,"1453":1,"1458":1,"1467":1,"1537":1,"1541":1,"1551":2,"1562":1,"1565":1,"1605":1,"1607":1,"1630":1,"1637":1,"1642":1,"1739":1,"1741":1,"1909":1,"2073":1,"2230":1,"2232":1}}],["meaning",{"3":{"284":1,"698":2,"758":1,"827":2,"1090":1,"1222":1,"1237":2,"1241":1,"1247":1,"1253":1,"1259":1,"1264":2,"1271":1,"1286":5,"1300":6,"1301":4,"1311":2,"1323":2,"1324":9,"1339":5,"1350":4,"1359":9,"1369":3,"1395":9,"1396":6,"1402":4,"1415":1,"1417":5,"1436":6,"1442":1,"1459":1,"1465":1,"1467":3,"1476":1,"1537":2,"1630":17,"1633":2,"1638":1,"1639":2,"1640":1,"1727":1,"1728":1,"1729":1,"1730":1,"1734":1,"1769":4,"1797":1,"1810":1,"1933":1,"2171":1,"2185":1}}],["meanwhile",{"3":{"261":1,"826":1,"1350":1,"1380":1,"1395":1}}],["mean",{"3":{"60":1,"110":1,"135":1,"198":1,"218":1,"310":1,"402":1,"414":1,"509":1,"591":2,"593":1,"620":2,"626":1,"697":1,"699":1,"757":1,"768":1,"776":1,"810":1,"819":1,"821":1,"829":1,"856":1,"861":1,"862":1,"863":1,"923":1,"981":2,"1006":1,"1018":1,"1043":1,"1067":1,"1091":1,"1092":1,"1116":1,"1188":1,"1259":3,"1270":1,"1275":1,"1280":1,"1286":6,"1300":4,"1301":1,"1309":4,"1310":2,"1311":2,"1323":4,"1324":2,"1333":1,"1339":6,"1350":6,"1359":6,"1395":4,"1396":8,"1402":1,"1415":4,"1417":5,"1422":1,"1427":1,"1436":5,"1438":1,"1443":1,"1455":2,"1467":2,"1472":1,"1478":1,"1479":1,"1489":1,"1492":2,"1630":1,"1638":1,"1862":1,"1863":1,"1922":1,"1933":1,"1979":1,"2000":1,"2001":1,"2015":1,"2028":1,"2032":1,"2037":1,"2048":1,"2057":1,"2079":1,"2098":1,"2127":1}}],["meantime",{"3":{"635":1,"988":1,"1117":1}}],["meant",{"3":{"0":2,"81":1,"110":1,"246":1,"302":1,"318":1,"342":1,"403":1,"460":1,"539":1,"540":1,"609":1,"648":1,"650":1,"683":1,"697":1,"698":1,"709":1,"765":1,"939":1,"945":1,"1074":1,"1169":1,"1174":1,"1229":2,"1239":1,"1247":4,"1259":2,"1270":1,"1271":2,"1286":3,"1300":8,"1301":1,"1311":2,"1323":2,"1324":4,"1350":1,"1355":1,"1359":3,"1379":2,"1380":1,"1395":1,"1396":4,"1402":2,"1413":1,"1415":1,"1427":1,"1436":16,"1455":1,"1475":1,"1677":1,"1698":1,"1726":1,"1815":1,"1872":1,"1874":1,"2002":1,"2032":1,"2138":1}}],["means",{"0":{"719":1,"2137":1},"1":{"1794":1,"1795":1,"1796":1,"1797":1,"1798":1,"1799":1,"1800":1,"1801":1,"1802":1},"3":{"0":9,"30":1,"32":1,"58":1,"79":1,"80":1,"119":1,"122":1,"132":1,"134":1,"135":1,"136":1,"149":1,"159":1,"160":2,"170":1,"175":1,"185":1,"187":1,"189":1,"194":1,"196":1,"201":1,"216":1,"226":2,"236":1,"237":1,"243":2,"244":1,"255":1,"266":1,"274":1,"282":1,"283":1,"292":1,"311":1,"318":1,"319":1,"320":1,"332":1,"341":1,"342":1,"343":1,"349":1,"351":2,"352":1,"359":1,"361":2,"363":1,"371":1,"372":1,"382":1,"384":1,"390":1,"399":1,"413":1,"441":2,"448":1,"449":3,"461":1,"500":2,"501":1,"508":1,"519":1,"520":1,"538":2,"546":1,"547":1,"549":1,"564":2,"573":1,"575":1,"583":2,"591":1,"598":1,"601":2,"602":1,"617":1,"619":5,"642":1,"650":1,"651":1,"665":1,"666":1,"667":1,"676":1,"682":1,"684":1,"691":1,"692":1,"698":2,"700":1,"708":1,"713":1,"716":1,"717":1,"718":1,"726":1,"727":1,"733":2,"741":3,"743":1,"750":2,"756":1,"766":1,"767":2,"768":1,"781":1,"782":1,"784":1,"792":2,"799":1,"800":1,"801":1,"810":1,"819":1,"821":1,"827":1,"838":1,"845":1,"855":2,"863":1,"872":1,"883":1,"905":1,"906":1,"916":1,"932":2,"945":1,"955":1,"965":2,"988":1,"989":1,"996":3,"997":1,"999":1,"1020":1,"1026":1,"1034":2,"1035":1,"1041":1,"1044":1,"1060":2,"1066":1,"1076":1,"1083":1,"1091":1,"1092":3,"1093":1,"1101":1,"1102":1,"1107":1,"1108":1,"1109":1,"1144":1,"1177":1,"1212":2,"1229":10,"1231":1,"1237":13,"1240":1,"1243":1,"1247":12,"1253":1,"1254":1,"1259":26,"1264":1,"1270":25,"1271":1,"1276":1,"1285":1,"1286":81,"1291":1,"1300":53,"1301":12,"1305":2,"1309":20,"1310":8,"1311":47,"1312":3,"1323":49,"1324":64,"1328":1,"1332":2,"1339":32,"1344":2,"1350":32,"1352":1,"1354":1,"1359":99,"1366":1,"1368":1,"1369":9,"1372":2,"1373":1,"1380":7,"1395":50,"1396":69,"1402":35,"1406":1,"1407":1,"1408":1,"1411":1,"1415":32,"1416":3,"1417":49,"1427":8,"1430":2,"1431":1,"1433":1,"1436":56,"1438":3,"1440":1,"1441":7,"1442":1,"1443":2,"1445":1,"1446":1,"1453":2,"1454":2,"1455":6,"1456":1,"1458":1,"1460":1,"1464":1,"1467":7,"1468":1,"1473":1,"1475":1,"1476":1,"1488":4,"1489":1,"1490":1,"1492":4,"1526":2,"1537":2,"1542":1,"1597":1,"1599":1,"1631":2,"1639":1,"1640":1,"1641":1,"1652":1,"1653":1,"1668":1,"1685":1,"1692":1,"1702":1,"1723":1,"1731":1,"1735":1,"1748":1,"1755":1,"1767":1,"1792":1,"1793":1,"1794":1,"1797":1,"1798":2,"1810":1,"1812":1,"1815":1,"1817":1,"1822":1,"1823":1,"1826":1,"1830":2,"1833":1,"1843":1,"1844":1,"1845":2,"1851":2,"1854":1,"1871":1,"1874":1,"1876":3,"1885":2,"1889":1,"1890":1,"1891":2,"1900":1,"1902":3,"1905":1,"1908":2,"1909":1,"1911":1,"1912":2,"1916":1,"1920":1,"1932":1,"1933":1,"1940":2,"1948":1,"1949":2,"1958":1,"1961":1,"1965":1,"1981":3,"1982":1,"1990":1,"1991":1,"1996":1,"1998":1,"2001":1,"2002":1,"2013":2,"2015":1,"2016":2,"2033":1,"2041":1,"2042":1,"2043":1,"2044":1,"2045":1,"2046":1,"2047":2,"2051":2,"2053":1,"2056":2,"2059":1,"2067":1,"2070":3,"2077":1,"2078":1,"2085":1,"2117":1,"2126":1,"2127":1,"2131":2,"2134":1,"2136":1,"2138":1,"2142":1,"2150":1,"2156":1,"2160":1,"2164":1,"2166":1,"2168":2,"2169":1,"2174":1,"2175":1,"2177":1,"2179":1,"2183":2,"2184":3,"2187":1,"2192":2,"2193":1,"2196":1,"2197":1,"2199":1,"2202":1,"2205":1,"2230":1,"2232":3}}],["memoizing",{"3":{"1259":1,"1286":1,"1311":1}}],["memoization",{"3":{"1247":1,"1395":1,"1556":1}}],["memoize",{"3":{"1247":1,"1395":1}}],["memoizes",{"3":{"244":1,"330":1,"337":1,"1050":1,"1247":2,"1286":2,"1323":1,"1359":1,"1387":1,"1395":2}}],["memoized",{"3":{"242":1,"682":1,"1241":2,"1247":2,"1300":1,"1310":1,"1395":1}}],["memorize",{"3":{"1270":1,"1311":1,"1905":1}}],["memorizing",{"3":{"1231":1,"1263":1,"1311":1,"1372":1,"1396":2}}],["memoryallocator",{"3":{"1438":1}}],["memorymarshal",{"3":{"1359":1}}],["memorystream",{"3":{"1323":1,"1324":1,"1359":1,"1380":1,"1415":3}}],["memorycache",{"3":{"1467":1}}],["memorycacheentryoptions",{"3":{"1301":3}}],["memorycacheservicetests",{"3":{"1199":1,"1207":2,"1301":5}}],["memorycacheservice",{"2":{"248":1,"252":1,"253":1,"731":1,"1916":1},"3":{"0":1,"243":2,"248":2,"252":1,"253":1,"731":1,"1199":4,"1203":1,"1207":2,"1300":6,"1301":57,"1323":2,"1496":2,"1577":1,"1916":2}}],["memorydiagnoser",{"2":{"591":1,"592":1,"2047":1},"3":{"591":2,"592":1,"1436":1,"1492":1,"2047":1}}],["memorydistributedcache",{"2":{"252":1,"1916":1},"3":{"243":1,"252":1,"1301":2,"1323":1,"1916":1}}],["memory",{"2":{"875":1},"3":{"0":6,"16":1,"17":1,"39":1,"43":1,"157":1,"158":1,"162":1,"178":2,"207":1,"209":1,"235":2,"241":1,"242":1,"243":5,"244":1,"245":3,"249":1,"259":1,"261":1,"283":1,"386":1,"390":2,"461":1,"507":5,"508":1,"514":1,"536":1,"540":1,"545":2,"546":1,"549":1,"551":1,"664":1,"665":1,"667":1,"688":1,"692":1,"699":1,"732":1,"733":1,"767":1,"792":1,"793":1,"794":1,"818":1,"827":1,"831":1,"856":2,"875":2,"881":2,"903":1,"905":1,"914":1,"916":1,"1050":1,"1052":1,"1085":1,"1117":1,"1123":1,"1125":1,"1126":1,"1150":2,"1152":2,"1154":1,"1155":1,"1183":1,"1212":1,"1229":1,"1237":4,"1239":3,"1243":1,"1247":11,"1250":1,"1259":1,"1270":1,"1278":1,"1282":1,"1286":21,"1290":2,"1297":1,"1298":3,"1300":11,"1301":7,"1309":2,"1310":2,"1311":15,"1323":3,"1324":46,"1332":1,"1334":1,"1336":1,"1337":1,"1339":12,"1346":1,"1350":6,"1354":1,"1357":1,"1359":45,"1362":1,"1367":1,"1369":5,"1379":1,"1380":1,"1383":1,"1391":1,"1395":13,"1396":17,"1401":1,"1402":3,"1415":2,"1417":5,"1427":1,"1429":1,"1431":1,"1436":25,"1438":9,"1442":3,"1443":2,"1457":1,"1465":1,"1467":6,"1473":1,"1476":1,"1526":2,"1535":1,"1549":1,"1560":1,"1562":1,"1577":3,"1582":1,"1586":1,"1590":1,"1591":1,"1611":1,"1614":1,"1641":4,"1651":1,"1667":1,"1668":1,"1675":1,"1715":1,"1721":1,"1814":2,"1815":2,"1817":1,"1824":1,"1856":1,"1868":1,"1885":1,"1904":1,"1909":1,"1916":1,"1923":4,"1924":1,"1929":1,"1950":1,"1966":1,"1968":2,"1970":2,"1971":1,"1982":1,"1986":1,"1988":1,"2000":1,"2001":2,"2007":1,"2027":1,"2052":1,"2074":1,"2076":2,"2079":1,"2081":1,"2108":1,"2128":1,"2167":2,"2180":1,"2199":1,"2232":2}}],["memberallowlistentry",{"3":{"1436":2}}],["membername",{"3":{"1324":3,"1427":1,"1436":2}}],["memberexpression",{"3":{"1247":1,"1286":3,"1310":1,"1324":2,"1436":1}}],["memberpath",{"3":{"1247":2,"1310":1,"1395":1}}],["memberless",{"3":{"657":1}}],["memberinit",{"3":{"330":1,"1242":1,"1247":3,"1286":1,"1311":2,"1988":1}}],["member",{"2":{"1161":1},"3":{"0":13,"24":1,"27":1,"121":2,"124":1,"126":1,"135":4,"142":1,"164":1,"186":1,"245":1,"248":1,"249":1,"255":1,"261":1,"335":1,"350":1,"443":1,"463":1,"501":1,"502":1,"545":1,"546":2,"549":1,"550":2,"583":1,"609":1,"633":2,"692":1,"698":2,"725":1,"726":1,"733":2,"734":1,"735":1,"741":2,"745":1,"749":1,"782":3,"783":2,"784":2,"854":1,"859":1,"861":2,"922":1,"963":3,"964":12,"965":2,"966":3,"967":1,"979":3,"980":6,"981":3,"982":3,"984":2,"1034":1,"1038":1,"1042":1,"1050":3,"1052":1,"1059":2,"1060":2,"1091":1,"1119":1,"1133":1,"1135":1,"1161":14,"1162":1,"1163":2,"1168":1,"1176":1,"1193":1,"1212":1,"1219":3,"1225":2,"1229":13,"1230":1,"1232":1,"1235":2,"1236":1,"1237":21,"1239":1,"1241":2,"1247":19,"1249":1,"1259":6,"1263":1,"1266":1,"1270":39,"1271":7,"1276":2,"1278":1,"1279":1,"1280":1,"1286":99,"1293":1,"1294":1,"1295":3,"1297":1,"1300":29,"1301":12,"1309":23,"1310":5,"1311":21,"1312":1,"1315":1,"1318":2,"1323":23,"1324":48,"1327":1,"1339":6,"1348":1,"1350":21,"1352":1,"1353":1,"1354":2,"1357":1,"1359":145,"1369":8,"1376":1,"1380":7,"1395":25,"1396":60,"1402":13,"1405":1,"1407":1,"1408":1,"1411":1,"1415":29,"1416":2,"1417":22,"1423":2,"1427":3,"1429":1,"1431":1,"1436":210,"1438":2,"1467":1,"1477":1,"1478":1,"1489":2,"1496":2,"1517":1,"1526":1,"1577":3,"1673":1,"1686":1,"1699":1,"1727":5,"1734":2,"1769":1,"1815":3,"1887":1,"1915":3,"1953":1,"1963":1,"1977":1,"1989":1,"2001":1,"2046":1,"2063":1,"2077":1,"2100":1,"2107":3,"2126":1,"2136":1,"2186":1}}],["membersof",{"3":{"1436":3}}],["memberslazy",{"3":{"1237":1}}],["membershipservice",{"3":{"1199":2,"1207":1}}],["membershipdto",{"3":{"1199":3,"1207":1}}],["membership",{"0":{"1203":1},"3":{"0":1,"284":1,"380":2,"381":1,"1152":1,"1154":1,"1200":1,"1247":6,"1259":1,"1286":2,"1296":1,"1300":5,"1302":1,"1307":2,"1309":4,"1310":1,"1311":1,"1312":1,"1324":9,"1350":1,"1359":3,"1380":1,"1396":5,"1400":1,"1402":1,"1436":5,"1496":5,"1638":1,"1945":4}}],["members",{"0":{"1300":1},"1":{"977":1,"978":1,"979":1,"980":1,"981":1,"982":1,"983":1,"984":1},"3":{"0":8,"39":2,"109":1,"112":1,"135":6,"136":1,"142":1,"166":1,"184":1,"201":1,"235":1,"258":1,"261":1,"276":1,"326":1,"486":1,"497":1,"499":1,"543":1,"545":1,"549":7,"550":4,"551":3,"552":1,"583":5,"633":1,"649":1,"650":1,"657":1,"674":2,"675":1,"677":1,"682":1,"733":1,"749":1,"782":2,"784":1,"819":1,"846":1,"849":1,"881":1,"884":1,"922":1,"963":1,"964":5,"966":2,"975":1,"977":1,"980":4,"982":1,"1018":1,"1027":1,"1034":1,"1036":1,"1045":1,"1050":2,"1133":2,"1135":1,"1168":3,"1175":2,"1193":1,"1198":1,"1212":4,"1214":3,"1220":1,"1229":3,"1232":1,"1235":2,"1236":1,"1237":19,"1239":2,"1247":11,"1249":1,"1259":9,"1262":1,"1269":1,"1270":12,"1271":1,"1280":1,"1281":2,"1286":67,"1288":1,"1296":1,"1299":1,"1300":39,"1301":7,"1304":1,"1309":16,"1310":5,"1311":19,"1312":3,"1314":1,"1323":28,"1324":74,"1334":1,"1339":10,"1347":2,"1349":1,"1350":46,"1359":107,"1380":7,"1395":37,"1396":55,"1402":40,"1405":1,"1409":1,"1412":1,"1414":1,"1415":35,"1416":5,"1417":23,"1427":6,"1431":2,"1436":141,"1438":3,"1488":3,"1489":1,"1496":47,"1498":2,"1538":1,"1575":1,"1577":1,"1648":1,"1654":1,"1766":1,"1805":1,"1810":1,"1815":1,"1849":1,"1858":1,"1871":1,"1880":1,"1926":1,"1948":1,"2094":1,"2107":1,"2167":1,"2232":1}}],["met",{"3":{"1017":1,"1145":1,"1152":1,"1153":1,"1155":1,"1248":1,"1323":3,"1359":1,"1396":1,"1415":1,"1418":1,"1436":1,"1445":1,"1526":6,"1527":1,"1531":1,"1537":5,"1576":1,"1577":10,"1578":1,"1582":2,"1591":1,"1797":1,"2014":1,"2205":1}}],["metastasizes",{"3":{"2116":1}}],["meta",{"3":{"1436":24,"1486":1,"1496":1}}],["metacharacters",{"3":{"1452":1}}],["metacharacter",{"3":{"1324":1}}],["metaphor",{"3":{"1229":1}}],["metapackages",{"3":{"940":1}}],["metapackage",{"1":{"936":1,"937":1,"938":1,"939":1,"940":1,"941":1,"942":1},"3":{"0":3,"135":2,"139":1,"141":3,"142":1,"145":1,"526":1,"936":1,"937":1,"939":4,"940":3,"941":3,"942":1,"953":2,"957":1,"966":1,"984":1,"1096":1,"1211":1,"1212":1,"1454":1,"1503":1,"1527":1,"1577":1,"1660":1,"1661":1,"1693":1,"1781":1,"2172":1,"2227":2,"2232":2,"2234":1}}],["metadatanames",{"3":{"1311":1}}],["metadata",{"0":{"1236":1},"1":{"1310":1},"2":{"1369":1},"3":{"0":5,"13":1,"31":2,"90":1,"91":1,"93":1,"98":2,"99":1,"103":1,"173":2,"175":3,"179":1,"189":1,"318":1,"330":1,"435":1,"439":1,"440":1,"526":1,"528":1,"611":1,"749":2,"939":1,"981":1,"1089":1,"1093":1,"1107":1,"1115":1,"1133":1,"1136":1,"1192":1,"1202":1,"1203":1,"1208":1,"1212":1,"1229":4,"1230":1,"1236":1,"1237":2,"1238":1,"1244":2,"1245":1,"1247":4,"1259":1,"1262":1,"1271":1,"1286":20,"1287":1,"1297":3,"1300":16,"1309":9,"1310":15,"1311":23,"1312":10,"1323":10,"1324":1,"1339":1,"1340":1,"1350":4,"1359":10,"1369":16,"1380":1,"1396":5,"1405":1,"1409":1,"1415":10,"1416":2,"1417":1,"1427":1,"1434":1,"1436":20,"1438":1,"1441":2,"1443":1,"1447":2,"1450":1,"1454":1,"1467":4,"1496":1,"1629":1,"1630":2,"1631":2,"1639":1,"1640":1,"1641":15,"1663":1,"1664":1,"1667":1,"1668":1,"1703":1,"1805":2,"1815":1,"1817":1,"1825":1,"1867":1,"1898":2,"1904":1,"1905":1,"1925":1,"1927":2,"1928":1,"1963":1,"1988":1,"1994":1,"2000":2,"2009":1,"2018":1,"2019":1,"2124":2,"2125":1,"2126":2,"2128":2,"2232":1}}],["methodreference",{"3":{"1436":1}}],["methoddefinition",{"3":{"1436":1}}],["methodinfo",{"3":{"1270":1,"1286":3}}],["methodology",{"3":{"491":1,"797":1,"1496":2,"2114":1,"2232":1}}],["methodname",{"3":{"135":1,"1286":3,"1436":4}}],["methods",{"1":{"1808":1,"1809":1,"1810":1,"1811":1,"1812":1},"3":{"0":11,"68":1,"71":1,"109":1,"130":2,"135":5,"136":3,"137":2,"139":1,"142":1,"281":1,"380":1,"415":1,"499":1,"537":1,"547":1,"549":1,"578":1,"674":2,"749":1,"773":1,"774":2,"775":1,"776":1,"790":1,"854":1,"860":1,"914":1,"921":1,"922":2,"923":1,"924":1,"926":1,"963":1,"964":3,"966":1,"979":3,"980":1,"982":1,"1004":1,"1050":1,"1075":1,"1161":1,"1167":1,"1168":2,"1169":1,"1186":1,"1193":1,"1212":2,"1214":1,"1219":1,"1220":1,"1221":2,"1223":1,"1229":9,"1236":1,"1237":9,"1240":1,"1247":8,"1259":5,"1265":2,"1269":1,"1270":5,"1286":26,"1290":1,"1294":1,"1297":1,"1300":22,"1301":3,"1309":15,"1310":5,"1311":12,"1312":3,"1320":1,"1323":22,"1324":28,"1339":14,"1342":1,"1343":5,"1344":1,"1350":18,"1353":1,"1358":1,"1359":36,"1366":1,"1368":2,"1369":2,"1378":2,"1380":18,"1394":1,"1395":20,"1396":30,"1402":9,"1405":4,"1415":9,"1416":1,"1417":23,"1420":1,"1427":6,"1431":1,"1436":39,"1437":1,"1442":1,"1443":1,"1444":1,"1485":1,"1487":2,"1488":2,"1489":3,"1496":3,"1525":2,"1526":1,"1539":1,"1541":1,"1576":1,"1577":3,"1585":2,"1639":1,"1647":1,"1651":2,"1654":1,"1659":1,"1662":1,"1671":1,"1686":1,"1751":1,"1782":1,"1805":2,"1807":2,"1808":1,"1810":1,"1812":1,"1815":1,"1817":1,"1935":1,"1944":1,"2008":1,"2022":1,"2088":1,"2090":1,"2101":1,"2117":1,"2118":1,"2122":1,"2167":2,"2175":1,"2178":1,"2191":1,"2206":1,"2220":1,"2227":1,"2230":1}}],["method",{"2":{"160":1,"1994":1},"3":{"0":10,"5":3,"24":1,"27":1,"39":1,"93":1,"94":1,"95":2,"96":1,"98":2,"108":1,"109":1,"110":1,"113":1,"130":2,"135":11,"137":1,"139":2,"140":2,"157":1,"160":1,"225":1,"252":1,"254":1,"256":1,"295":1,"312":1,"318":1,"325":1,"336":1,"341":1,"395":1,"397":1,"407":1,"409":1,"459":1,"487":1,"499":1,"511":1,"512":1,"546":2,"548":1,"549":1,"592":1,"631":1,"632":1,"657":1,"665":1,"672":1,"674":6,"676":1,"677":1,"682":1,"715":1,"741":2,"748":1,"749":2,"750":1,"751":4,"776":1,"826":1,"827":1,"846":1,"849":1,"850":1,"855":1,"905":2,"921":1,"979":5,"980":7,"981":2,"982":3,"987":1,"988":1,"996":1,"1004":1,"1018":1,"1019":1,"1021":1,"1026":1,"1027":1,"1030":1,"1036":1,"1043":1,"1059":1,"1093":1,"1100":1,"1133":1,"1135":1,"1161":6,"1162":1,"1168":1,"1169":1,"1170":1,"1184":3,"1212":2,"1214":1,"1215":1,"1218":4,"1224":2,"1229":8,"1231":1,"1233":2,"1234":1,"1237":24,"1238":1,"1241":1,"1242":1,"1244":2,"1247":22,"1259":19,"1261":1,"1265":1,"1269":3,"1270":35,"1271":8,"1278":1,"1286":66,"1288":1,"1291":2,"1293":2,"1300":59,"1301":3,"1309":32,"1310":7,"1311":52,"1312":15,"1314":2,"1315":2,"1316":2,"1318":1,"1323":53,"1324":74,"1326":1,"1329":1,"1333":1,"1335":1,"1336":2,"1339":44,"1344":1,"1345":1,"1346":1,"1348":1,"1350":30,"1353":3,"1355":1,"1359":142,"1362":1,"1365":2,"1368":3,"1369":7,"1372":1,"1378":3,"1380":19,"1382":1,"1383":1,"1389":1,"1395":67,"1396":87,"1402":21,"1405":1,"1415":49,"1417":25,"1418":1,"1421":1,"1427":8,"1429":1,"1431":4,"1436":133,"1438":4,"1441":4,"1442":1,"1443":1,"1444":2,"1453":1,"1467":2,"1486":1,"1488":2,"1489":2,"1492":1,"1493":1,"1496":4,"1507":1,"1539":1,"1541":1,"1641":1,"1653":1,"1654":2,"1666":1,"1685":2,"1686":1,"1701":6,"1702":3,"1715":1,"1730":4,"1747":1,"1755":1,"1769":1,"1776":1,"1783":1,"1789":1,"1790":1,"1803":3,"1804":1,"1806":1,"1807":2,"1809":2,"1810":3,"1812":2,"1815":1,"1817":1,"1818":1,"1820":1,"1821":1,"1824":1,"1825":3,"1826":1,"1831":1,"1832":1,"1840":1,"1842":1,"1856":1,"1859":1,"1880":1,"1881":2,"1884":1,"1899":1,"1908":1,"1912":1,"1935":2,"1937":1,"1944":5,"1950":1,"1953":1,"1954":1,"1955":1,"1956":1,"1962":1,"1970":1,"1982":1,"1983":1,"1994":1,"1995":2,"2000":2,"2006":1,"2014":1,"2015":1,"2020":1,"2030":1,"2032":1,"2043":1,"2047":1,"2058":2,"2066":1,"2072":2,"2078":1,"2080":1,"2083":1,"2091":1,"2092":2,"2094":1,"2097":2,"2126":1,"2134":1,"2139":1,"2156":2,"2166":1,"2170":1,"2172":1,"2184":1,"2191":1,"2197":4,"2200":1,"2203":1,"2232":1}}],["metername",{"3":{"1247":2,"1259":2,"1270":1,"1286":2,"1311":2,"1323":3,"1339":1,"1427":4}}],["metering",{"0":{"2177":1},"3":{"1016":1,"1020":1,"1022":1,"1192":1,"1311":3,"1418":1,"1421":1,"1496":1,"2176":1,"2209":1,"2227":1}}],["meterlistener",{"3":{"897":1}}],["meterprovider",{"3":{"397":1,"1333":1,"1339":1,"1443":1,"2156":1}}],["meters",{"3":{"0":2,"395":2,"397":1,"400":2,"407":1,"408":1,"792":1,"818":1,"819":1,"822":1,"899":1,"1018":1,"1186":1,"1212":1,"1270":1,"1311":1,"1323":1,"1333":3,"1339":7,"1427":1,"1442":1,"1443":3,"1450":1,"1467":2,"1577":1,"1670":2,"1843":1,"2006":1,"2010":1,"2013":1,"2156":2,"2160":2}}],["metered",{"1":{"2170":1,"2171":1,"2172":1,"2173":1,"2174":1,"2175":1,"2176":1,"2177":1,"2178":1,"2179":1,"2180":1},"3":{"0":3,"173":2,"175":1,"177":1,"179":1,"279":1,"280":1,"287":1,"1016":1,"1018":1,"1091":2,"1202":1,"1203":1,"1212":1,"1311":4,"1324":1,"1350":2,"1358":2,"1359":5,"1369":2,"1395":1,"1425":1,"1668":1,"1779":1,"1998":1,"2000":1,"2169":2,"2170":2,"2193":1,"2209":1}}],["meter",{"0":{"407":1,"408":1},"3":{"0":14,"24":2,"66":1,"72":3,"121":1,"124":1,"126":1,"241":1,"255":4,"258":3,"259":1,"261":1,"395":12,"397":7,"399":2,"400":3,"404":5,"406":2,"407":3,"408":4,"409":2,"707":2,"731":1,"819":3,"821":3,"822":2,"823":1,"827":1,"829":1,"897":3,"899":2,"900":1,"901":1,"914":1,"916":1,"917":1,"1016":1,"1018":3,"1020":1,"1044":1,"1089":2,"1090":3,"1091":3,"1092":2,"1093":1,"1094":1,"1096":1,"1192":1,"1212":2,"1247":12,"1256":1,"1259":9,"1268":2,"1270":7,"1275":1,"1286":3,"1311":15,"1317":2,"1323":13,"1333":5,"1339":12,"1366":1,"1369":1,"1379":1,"1396":5,"1400":1,"1402":2,"1418":2,"1421":1,"1425":6,"1427":13,"1435":2,"1438":1,"1442":3,"1443":3,"1451":1,"1465":3,"1467":8,"1496":2,"1577":1,"1586":1,"1665":1,"1668":1,"1843":1,"1919":1,"1922":1,"1946":1,"1949":1,"2002":1,"2006":1,"2010":1,"2013":2,"2156":14,"2157":1,"2159":2,"2160":4,"2177":6,"2179":1,"2180":1,"2191":1,"2193":2}}],["metricalerts",{"3":{"609":1,"1467":1}}],["metricmeasurecolumn",{"2":{"609":1,"2158":1},"3":{"609":2,"1467":2,"2158":1}}],["metricstreamconfiguration",{"2":{"1333":1,"1443":1},"3":{"1333":1,"1339":1,"1443":1,"1577":1}}],["metricsinstrumentationtoggletests",{"3":{"1199":1,"1207":2,"1339":1,"1438":1}}],["metrics",{"2":{"407":1},"3":{"0":2,"15":1,"125":1,"395":4,"397":7,"398":1,"399":2,"401":1,"402":4,"404":1,"407":3,"409":5,"707":1,"709":1,"711":1,"859":1,"861":2,"897":1,"914":1,"916":1,"917":1,"1020":1,"1043":1,"1044":1,"1213":1,"1247":5,"1259":2,"1268":1,"1270":5,"1286":1,"1311":2,"1323":3,"1333":4,"1339":13,"1421":1,"1425":1,"1427":4,"1436":4,"1438":3,"1440":1,"1442":1,"1443":8,"1450":1,"1451":1,"1465":3,"1467":6,"1487":1,"1496":10,"1550":1,"1577":2,"1591":1,"1632":1,"1641":1,"1664":1,"1677":4,"1841":1,"1923":1,"2003":1,"2005":1,"2006":2,"2010":1,"2153":1,"2154":2,"2155":1,"2156":6,"2157":1,"2159":3,"2160":3,"2215":1,"2232":1}}],["metric",{"2":{"916":1},"3":{"0":7,"20":1,"343":1,"395":2,"397":2,"398":2,"527":1,"530":2,"607":2,"608":2,"609":4,"610":2,"611":1,"613":1,"727":1,"818":1,"860":1,"861":3,"862":2,"863":1,"897":2,"898":1,"899":1,"914":1,"916":3,"918":1,"1247":5,"1259":1,"1268":1,"1270":7,"1275":1,"1309":1,"1311":2,"1317":1,"1323":4,"1333":1,"1339":9,"1396":3,"1402":2,"1415":1,"1436":4,"1438":1,"1443":4,"1446":2,"1450":1,"1467":12,"1469":2,"1474":3,"1476":1,"1577":2,"1586":1,"1589":1,"1591":2,"1596":1,"1598":1,"1665":1,"1677":1,"1706":1,"1709":1,"1843":1,"1909":2,"1911":1,"1912":1,"1919":2,"2010":1,"2014":1,"2051":1,"2156":2,"2158":5,"2160":2}}],["ma0176",{"3":{"1436":1}}],["ma0136",{"3":{"1436":1}}],["ma0004",{"2":{"481":1,"482":1},"3":{"481":1,"482":2,"490":1,"491":1,"492":1}}],["ma0076",{"2":{"269":1},"3":{"0":1,"265":1,"269":1,"485":1,"1577":1,"2085":1}}],["magic",{"3":{"1270":1,"1285":1,"1286":2,"1300":2,"1309":2,"1311":4,"1323":4,"1324":1,"1350":1,"1353":1,"1359":1,"1395":2,"1396":1,"1402":2,"1411":1,"1415":7,"1436":1,"1438":1,"1467":1,"1526":1,"1554":1,"1557":1,"1631":1,"1641":2,"1859":1,"1911":1,"1958":1,"2126":1,"2128":2,"2136":1,"2139":1,"2220":1}}],["magazine",{"3":{"1074":1}}],["magnitude",{"3":{"592":1,"860":1,"1436":1,"1707":1,"2001":1}}],["macintosh",{"3":{"1324":2}}],["macos",{"3":{"1212":1,"1381":1,"1416":3,"1417":2,"1459":3,"1513":1,"1606":1,"1740":1,"1773":1,"2078":1,"2230":1}}],["mac",{"3":{"682":1,"684":1,"1286":1,"1324":1,"1417":4,"1660":1,"1669":1}}],["maccatalyst",{"3":{"412":1,"413":2,"434":1,"436":1,"1207":2,"1416":7,"1417":3,"1454":1,"1459":1,"2120":1}}],["machinery",{"1":{"1039":1,"1040":1,"1041":1,"1042":1,"1043":1,"1044":1,"1045":1,"1046":1},"3":{"0":2,"46":1,"164":1,"167":1,"225":1,"230":1,"255":1,"269":1,"272":1,"274":1,"447":1,"448":1,"455":1,"469":1,"470":1,"477":1,"536":1,"548":1,"556":1,"572":1,"676":1,"678":1,"697":1,"733":1,"744":1,"802":1,"845":1,"921":1,"1039":1,"1040":1,"1041":1,"1043":1,"1046":1,"1076":1,"1144":1,"1201":1,"1212":3,"1217":1,"1227":1,"1247":3,"1248":1,"1249":2,"1252":1,"1259":3,"1270":2,"1275":1,"1281":1,"1286":2,"1287":1,"1300":1,"1301":1,"1302":1,"1309":3,"1310":2,"1311":4,"1317":1,"1318":1,"1319":1,"1323":1,"1324":4,"1328":1,"1333":1,"1340":1,"1343":1,"1359":11,"1363":1,"1367":1,"1370":1,"1376":1,"1379":1,"1380":3,"1395":3,"1396":4,"1401":1,"1402":2,"1403":1,"1415":2,"1428":1,"1436":13,"1439":1,"1488":1,"1571":1,"1577":1,"1800":1,"1826":1,"1853":1,"1854":1,"1861":1,"1884":1,"1895":1,"1952":1,"2055":1,"2079":2,"2081":1,"2086":1,"2129":1,"2131":1,"2132":1,"2135":1,"2181":1,"2182":2,"2193":1,"2232":2}}],["machines",{"3":{"0":1,"27":1,"926":1,"1161":1,"1402":1,"1436":3}}],["machine",{"0":{"813":1,"1766":1},"3":{"0":3,"264":1,"265":5,"295":1,"450":1,"485":1,"537":2,"576":1,"584":1,"592":2,"593":1,"620":1,"641":2,"665":2,"725":1,"741":1,"782":1,"784":1,"791":1,"808":2,"809":1,"810":6,"811":2,"812":1,"813":1,"815":1,"914":1,"926":1,"1067":2,"1068":1,"1116":1,"1117":1,"1161":2,"1162":1,"1212":2,"1219":1,"1229":1,"1237":1,"1247":1,"1249":1,"1259":2,"1263":1,"1270":2,"1271":4,"1296":1,"1300":5,"1309":1,"1311":12,"1323":2,"1324":3,"1335":1,"1336":1,"1339":9,"1350":2,"1359":19,"1380":1,"1389":1,"1390":1,"1395":4,"1396":3,"1402":7,"1415":6,"1416":1,"1417":1,"1430":1,"1436":35,"1438":2,"1441":1,"1442":1,"1453":2,"1454":2,"1455":1,"1481":1,"1488":1,"1490":1,"1492":2,"1496":1,"1525":1,"1526":6,"1577":4,"1591":6,"1600":1,"1633":2,"1666":1,"1668":1,"1689":1,"1749":2,"1764":1,"1765":1,"1805":1,"1811":1,"1926":1,"1970":1,"2003":1,"2047":2,"2083":2,"2086":1,"2091":1,"2106":1,"2132":1,"2168":2,"2181":1,"2220":1,"2232":2}}],["mailaddress",{"2":{"1344":1},"3":{"1344":1,"1350":2,"1415":2,"1639":1,"1640":1}}],["mailing",{"3":{"1311":1,"1764":2}}],["mailmessage",{"3":{"1309":2,"1323":1}}],["mails",{"3":{"1294":1,"1407":1}}],["mailto",{"3":{"1271":1,"1417":2}}],["mailed",{"3":{"1184":1,"1300":1,"1324":1}}],["mailbox",{"3":{"1150":1,"1436":1}}],["maildevsmtpport",{"3":{"1339":1,"1441":1}}],["maildevhttpport",{"3":{"1339":1,"1441":1}}],["maildev",{"3":{"1069":1,"1302":1,"1320":1,"1326":1,"1339":6,"1440":1,"1441":4,"1444":2,"1446":2,"1490":1,"1526":1,"1591":1,"1660":1,"1938":1,"2005":2,"2013":1}}],["mail",{"2":{"72":1,"1344":1},"3":{"72":3,"230":3,"673":1,"674":2,"675":1,"926":1,"1059":1,"1108":2,"1203":4,"1207":12,"1295":1,"1300":1,"1302":2,"1309":12,"1311":1,"1320":2,"1323":7,"1339":2,"1344":1,"1350":2,"1408":1,"1415":3,"1436":1,"1438":1,"1439":1,"1467":1,"1512":2,"1932":1,"2003":1,"2004":1,"2012":1,"2013":1,"2235":1,"2237":1}}],["mainly",{"3":{"2109":1}}],["mainlauncher",{"3":{"428":1,"1416":3}}],["mainlayout",{"2":{"275":1,"276":1,"1607":1,"1644":2,"1741":1,"2077":1},"3":{"0":2,"273":6,"275":2,"276":2,"649":3,"652":1,"1324":11,"1396":1,"1526":3,"1577":4,"1582":1,"1607":1,"1627":1,"1644":5,"1653":1,"1687":1,"1741":1,"2077":3,"2083":4}}],["mainapplication",{"3":{"1199":1,"1203":1,"1207":2,"1212":1,"1416":13}}],["mainactivity",{"2":{"423":1},"3":{"418":3,"422":2,"423":2,"425":2,"426":2,"427":1,"428":1,"429":1,"1199":2,"1203":1,"1207":2,"1416":26,"1417":2,"1436":5,"1496":2}}],["mainpage",{"3":{"1199":2,"1203":1,"1207":2,"1212":1,"1416":20,"1417":3}}],["mainpagebase",{"3":{"1199":2,"1203":1,"1207":2,"1324":3,"1416":9,"1417":27,"1496":1}}],["mainthread",{"3":{"1417":6}}],["maintenance",{"3":{"0":1,"336":1,"360":1,"399":1,"423":1,"529":1,"809":1,"814":1,"1075":1,"1247":1,"1286":2,"1300":1,"1350":1,"1369":1,"1395":1,"1436":2,"1459":1,"1465":1,"1844":1,"1848":1,"2142":1}}],["maintainable",{"3":{"1436":1}}],["maintainability",{"3":{"0":1,"1011":1,"1496":1,"1526":1,"1534":1,"1536":1,"1552":1,"1553":1,"1571":1,"1591":1,"2042":1}}],["maintains",{"3":{"1286":2,"1301":1,"1323":1,"1369":1,"1436":1,"1916":1}}],["maintaining",{"3":{"486":1,"634":1,"1309":1,"1311":1,"1359":1,"1436":2,"1479":1,"1639":1}}],["maintainers",{"3":{"1436":1}}],["maintainer",{"3":{"150":1,"590":1,"1436":1,"1454":1,"1459":1,"2047":1}}],["maintained",{"0":{"1521":1},"3":{"0":1,"58":1,"135":1,"342":1,"584":1,"609":1,"620":1,"634":1,"642":1,"683":1,"759":1,"801":1,"839":1,"974":2,"1237":1,"1286":1,"1324":1,"1339":1,"1350":2,"1359":6,"1380":1,"1396":2,"1416":1,"1436":1,"1467":1,"1474":1,"1479":1,"1484":1,"1490":1,"1526":1,"1528":1,"1534":1,"1546":1,"1571":1,"1577":1,"1579":1,"1593":1,"1599":1,"1600":1,"1658":1,"1705":1,"1885":1,"2098":1,"2158":1,"2233":1}}],["maintain",{"3":{"136":1,"167":1,"311":1,"1324":1,"1395":1,"1415":1,"1492":1,"1638":1,"1877":1,"1885":1,"1942":1,"1994":1,"2048":1}}],["main",{"0":{"1467":1},"2":{"63":1,"66":1,"73":1,"296":1,"365":1,"373":1,"374":1,"375":1,"566":1,"593":1,"597":1,"601":1,"604":1,"607":2,"613":1,"629":1,"644":1,"719":1,"756":1,"761":1,"766":1,"794":1,"877":1,"920":1,"1016":1,"1128":1,"1458":1,"1463":1,"1464":1,"1476":1,"1478":1,"1583":1,"1589":1,"1597":1,"1607":1,"1644":1,"1741":1},"3":{"0":5,"15":1,"27":1,"47":1,"59":1,"62":1,"63":2,"66":1,"72":1,"73":1,"92":1,"93":6,"94":3,"95":1,"96":3,"104":3,"128":1,"135":1,"162":1,"180":2,"261":1,"265":1,"291":2,"296":1,"365":1,"368":1,"373":1,"374":2,"375":1,"397":2,"403":5,"409":2,"495":2,"526":1,"528":1,"530":1,"538":1,"543":1,"550":1,"564":1,"566":2,"572":1,"591":2,"593":1,"597":1,"599":57,"600":8,"601":11,"602":3,"603":2,"604":3,"607":6,"608":1,"609":44,"611":3,"612":2,"613":5,"629":2,"633":1,"640":12,"642":4,"643":3,"644":2,"648":1,"664":2,"665":5,"668":4,"669":4,"682":1,"684":1,"719":3,"720":2,"756":2,"757":6,"761":3,"765":5,"766":4,"768":1,"774":2,"790":2,"794":1,"827":3,"832":2,"837":2,"854":1,"869":3,"875":3,"877":3,"914":2,"915":1,"916":2,"917":2,"920":1,"992":1,"995":1,"998":1,"1016":1,"1017":2,"1018":1,"1020":2,"1043":1,"1044":1,"1045":1,"1116":2,"1119":1,"1125":1,"1128":1,"1154":2,"1156":2,"1212":1,"1229":2,"1300":1,"1309":1,"1324":5,"1331":1,"1339":3,"1350":3,"1359":4,"1380":1,"1395":1,"1396":5,"1416":10,"1417":7,"1431":2,"1436":19,"1438":1,"1441":7,"1442":5,"1443":13,"1446":27,"1447":3,"1450":4,"1451":2,"1453":5,"1454":5,"1455":18,"1456":1,"1457":1,"1458":1,"1460":3,"1462":1,"1463":5,"1464":1,"1465":8,"1466":8,"1467":312,"1470":9,"1472":5,"1473":10,"1474":19,"1475":3,"1476":26,"1477":5,"1478":3,"1480":1,"1481":8,"1482":3,"1483":1,"1484":6,"1486":1,"1489":3,"1492":7,"1496":24,"1524":2,"1525":2,"1526":17,"1531":2,"1532":2,"1534":3,"1535":4,"1554":1,"1577":10,"1582":4,"1583":2,"1585":1,"1586":3,"1589":3,"1590":1,"1591":21,"1596":5,"1597":4,"1600":2,"1607":2,"1611":1,"1616":1,"1632":18,"1639":1,"1641":6,"1644":2,"1665":1,"1675":1,"1676":1,"1679":1,"1683":1,"1706":1,"1709":1,"1716":1,"1727":2,"1728":1,"1729":1,"1731":1,"1741":2,"2034":1,"2046":1,"2077":1,"2100":1,"2110":1,"2157":2,"2158":8,"2168":1}}],["masquerading",{"3":{"1543":1,"2048":1}}],["massive",{"3":{"1549":1}}],["mass",{"3":{"666":1}}],["masstransitpackageids",{"2":{"1075":1},"3":{"1075":1,"1436":1,"1491":1}}],["masstransitstatemachine",{"2":{"809":1,"810":1,"813":1},"3":{"0":1,"809":1,"810":1,"813":1}}],["masstransit",{"1":{"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1,"151":1,"152":1,"153":1,"1072":1,"1073":1,"1074":1,"1075":1,"1076":1,"1077":1,"1078":1,"1079":1},"2":{"54":1,"145":1,"146":1,"147":3,"149":1,"150":1,"152":2,"810":3,"1073":1,"1074":2,"1075":1,"1078":1,"1489":1,"1738":1,"2016":1},"3":{"0":14,"20":1,"54":1,"59":2,"69":1,"77":1,"78":1,"79":2,"131":2,"133":1,"143":1,"144":1,"145":13,"146":1,"147":8,"148":1,"149":3,"150":7,"152":5,"153":1,"194":1,"195":1,"201":1,"255":1,"369":1,"371":1,"376":1,"639":1,"640":5,"641":2,"645":1,"683":1,"810":6,"812":1,"814":1,"815":1,"818":3,"819":1,"820":1,"845":1,"846":1,"1013":1,"1072":1,"1073":2,"1074":12,"1075":6,"1077":1,"1078":2,"1212":3,"1213":1,"1214":2,"1257":4,"1258":3,"1259":26,"1311":5,"1312":1,"1317":1,"1323":30,"1327":3,"1339":5,"1350":1,"1355":2,"1359":1,"1396":1,"1413":1,"1415":2,"1431":1,"1436":29,"1437":1,"1438":3,"1441":1,"1444":3,"1446":3,"1454":2,"1455":1,"1467":8,"1487":1,"1489":8,"1490":1,"1491":3,"1508":1,"1523":1,"1526":2,"1576":2,"1577":6,"1585":1,"1586":1,"1588":1,"1590":1,"1591":2,"1599":1,"1611":1,"1649":1,"1654":1,"1655":1,"1656":1,"1660":1,"1663":1,"1665":1,"1671":1,"1673":1,"1738":1,"1752":1,"1790":2,"1801":2,"1842":2,"1843":3,"1889":2,"1910":1,"2013":1,"2016":1,"2020":1,"2042":1,"2043":1,"2048":2,"2104":1,"2111":1,"2112":1,"2156":1,"2168":2,"2232":4}}],["masked",{"3":{"1237":3,"1415":1,"1436":1,"1466":1}}],["masking",{"3":{"1230":1,"1237":2,"1300":1,"1396":1,"1436":3,"1575":1}}],["mask",{"3":{"415":1,"1237":1,"1311":4,"1406":1,"1436":2,"1459":1,"1496":1,"1549":1,"1675":1,"2122":1}}],["maskseverypiimember",{"3":{"1436":1}}],["masks",{"3":{"39":1,"227":1,"684":1,"1237":1,"1422":1,"1438":1,"1453":1,"1467":1,"1561":1,"1577":1,"2063":1}}],["masterclass",{"3":{"1455":1}}],["master",{"3":{"403":1,"719":1,"766":1,"1324":1,"1395":1,"1415":1,"1417":1,"1436":1,"1467":4,"1496":1,"1629":1,"1632":1,"1637":1,"1638":3}}],["malicious",{"3":{"1311":1,"1415":1,"1452":1,"1459":1,"1467":1}}],["malwarescanning",{"3":{"1116":1,"1119":1}}],["malware",{"3":{"0":1,"1114":1,"1116":1,"1118":1,"1119":1,"1469":1,"1470":1}}],["malformedresponsereason",{"3":{"1369":1}}],["malformedresponse",{"3":{"1300":1,"1378":1,"1380":4}}],["malformedresponsecode",{"3":{"1300":2}}],["malformedifmatchresult",{"3":{"1311":1}}],["malformedifmatch",{"2":{"341":1},"3":{"0":1,"341":1,"1311":1}}],["malformed",{"3":{"0":3,"122":1,"202":1,"255":1,"341":1,"361":1,"657":1,"707":1,"840":1,"854":1,"907":1,"948":1,"1016":1,"1021":1,"1228":1,"1229":1,"1236":1,"1237":2,"1247":4,"1263":2,"1270":1,"1286":6,"1292":1,"1294":1,"1300":13,"1309":1,"1311":5,"1312":2,"1318":1,"1323":8,"1324":7,"1339":2,"1350":4,"1359":12,"1365":1,"1369":3,"1380":2,"1395":1,"1396":4,"1402":2,"1415":2,"1436":3,"1438":6,"1496":1,"1641":3,"1651":1,"1720":1,"1767":1,"1821":1,"1874":1,"1922":1,"1954":2,"1959":2,"2093":1}}],["mariner",{"3":{"2220":1}}],["mariadb",{"3":{"2220":1}}],["martin",{"3":{"1808":1}}],["marten",{"3":{"0":1,"1144":2}}],["marshalling",{"3":{"1416":1}}],["marshalled",{"3":{"1395":1,"1417":1,"1556":1,"1577":1}}],["marshals",{"3":{"682":1,"1324":1,"1396":1,"1417":3}}],["marries",{"3":{"1359":1}}],["margin",{"3":{"1126":1,"1324":4,"1359":1,"1417":1,"1436":2,"1438":1,"1447":2,"1712":1}}],["marginal",{"3":{"0":2,"237":1,"627":1,"862":1,"863":1}}],["march",{"3":{"625":1}}],["markquestionansweredasync",{"3":{"1402":1}}],["markready",{"3":{"1339":3}}],["markreadasync",{"3":{"1309":1,"1324":4,"1436":1}}],["markread",{"3":{"1203":2,"1207":4,"1306":1,"1309":5,"1577":1}}],["marknotificationreadhandlertests",{"3":{"1199":1,"1207":4}}],["marknotificationreadhandler",{"2":{"1306":1,"1937":1},"3":{"1199":4,"1203":1,"1207":2,"1286":1,"1306":3,"1309":6,"1937":1}}],["marknotificationreadcommand",{"2":{"1306":1,"1939":1},"3":{"1199":7,"1203":1,"1207":2,"1306":1,"1309":10,"1939":1}}],["markanswered",{"3":{"1398":1,"1402":3}}],["markansweredasync",{"3":{"1396":2,"1402":1}}],["markallreadasync",{"3":{"1309":1,"1324":3,"1436":1}}],["markallread",{"3":{"1203":2,"1207":4,"1306":1,"1309":4,"1496":1,"1577":1}}],["markallnotificationsreadhandlertests",{"3":{"1199":1,"1207":5,"1438":2,"1496":1}}],["markallnotificationsreadhandlertrackingtests",{"3":{"1199":1,"1207":4}}],["markallnotificationsreadhandler",{"2":{"1306":1,"1937":1},"3":{"1199":5,"1203":1,"1207":2,"1286":1,"1306":2,"1309":4,"1496":2,"1937":1}}],["markallnotificationsreadcommand",{"2":{"1306":1},"3":{"1199":8,"1203":1,"1207":2,"1306":1,"1309":6}}],["markasdelivered",{"3":{"1769":2}}],["markascheckedout",{"2":{"1769":1},"3":{"1769":1}}],["markascancelled",{"2":{"2163":2},"3":{"536":1,"539":1,"1769":1,"2163":2,"2167":1}}],["markassent",{"2":{"1933":1},"3":{"1304":1,"1309":3,"1933":1}}],["markaspaymentfailed",{"2":{"2167":1},"3":{"536":1,"1769":1,"2167":1}}],["markaspaidmanually",{"3":{"1765":1,"1769":1}}],["markaspaid",{"3":{"536":1,"1769":1,"2167":1}}],["markasfailed",{"2":{"896":1,"1933":1},"3":{"225":1,"896":1,"1304":1,"1309":3,"1933":2}}],["markasread",{"2":{"1937":1},"3":{"225":1,"1306":2,"1309":9,"1496":1,"1577":1,"1937":1}}],["markdirty",{"3":{"1324":1,"1395":5,"1396":1}}],["markdown",{"3":{"564":1,"567":1,"611":1,"1286":1,"1436":3,"1453":1,"1457":1,"1475":1}}],["markdeletedasync",{"2":{"459":1,"461":1},"3":{"459":2,"461":1,"1300":2,"1323":1}}],["markinventoryrestored",{"2":{"538":1,"2164":1},"3":{"536":1,"538":1,"2164":1}}],["markings",{"3":{"1672":1}}],["marking",{"3":{"41":1,"196":2,"973":1,"1212":1,"1232":3,"1237":7,"1256":1,"1259":1,"1264":1,"1286":3,"1300":2,"1309":1,"1312":1,"1359":1,"1402":1,"1415":6,"1436":5,"1575":1,"1577":1,"1582":1,"1586":1,"1632":1,"2067":1}}],["markprocessedasync",{"2":{"195":1,"201":1},"3":{"195":1,"201":1,"1258":1,"1259":8,"1286":1,"1586":1}}],["mark",{"3":{"18":2,"20":1,"54":1,"290":1,"536":1,"538":1,"757":1,"761":1,"829":1,"1252":2,"1254":2,"1259":3,"1274":1,"1286":2,"1289":1,"1300":3,"1306":2,"1309":10,"1311":1,"1312":1,"1323":1,"1324":16,"1359":1,"1396":1,"1397":1,"1402":7,"1415":1,"1416":1,"1431":1,"1436":14,"1443":1,"1462":1,"1489":1,"1526":4,"1553":1,"1591":1,"1651":1,"1653":1,"1689":1,"1765":3,"1768":2,"1838":1,"1845":1,"1908":1,"1910":1,"1937":2,"2007":1,"2165":2,"2167":1,"2168":1}}],["markupstring",{"2":{"1563":1},"3":{"1526":1,"1563":1,"1577":1}}],["markupsnapshotresult",{"3":{"1199":2,"1207":1,"1432":1,"1436":2,"1496":1}}],["markupsnapshot",{"3":{"954":2,"1199":5,"1207":3,"1428":1,"1432":9,"1436":8,"1488":1,"1496":1,"1577":3,"1586":1}}],["markuproots",{"3":{"1436":3}}],["markup",{"3":{"0":2,"86":1,"265":2,"273":1,"618":3,"620":1,"648":1,"953":2,"954":3,"957":1,"1207":1,"1324":38,"1350":2,"1359":2,"1384":1,"1391":1,"1394":1,"1395":68,"1396":38,"1402":12,"1415":7,"1417":6,"1431":1,"1432":1,"1434":1,"1436":58,"1438":6,"1488":3,"1489":1,"1497":1,"1498":1,"1525":2,"1526":2,"1531":2,"1534":2,"1535":1,"1555":2,"1563":1,"1564":1,"1577":5,"1586":1,"1591":1,"1597":1,"1600":1,"1643":1,"1660":1,"1671":1,"1702":1,"2057":2,"2059":3,"2060":1,"2072":1,"2077":1,"2079":2}}],["marketing",{"3":{"1359":1,"1395":1,"1416":1,"2240":1}}],["markers",{"0":{"1232":1,"1236":1,"1266":1},"2":{"1270":1},"3":{"0":2,"121":2,"123":1,"125":1,"126":1,"160":1,"246":1,"247":1,"522":1,"523":1,"564":1,"741":1,"744":1,"923":1,"974":1,"1059":1,"1089":1,"1091":1,"1095":1,"1100":1,"1192":1,"1201":1,"1202":2,"1203":10,"1207":16,"1212":1,"1230":2,"1232":1,"1249":1,"1260":2,"1264":11,"1270":21,"1286":3,"1321":1,"1323":4,"1324":3,"1359":15,"1395":2,"1396":1,"1403":2,"1415":8,"1422":1,"1424":3,"1436":3,"1438":1,"1526":1,"1577":1,"1591":1,"1660":1,"1662":2,"1667":1,"1826":1,"2098":1,"2136":1,"2190":1}}],["marker",{"0":{"1264":1,"1823":1,"1917":1,"2136":1,"2164":1},"3":{"0":9,"51":1,"115":1,"117":1,"121":5,"122":3,"123":1,"126":2,"135":1,"242":1,"246":1,"265":2,"293":1,"295":1,"312":1,"402":2,"457":1,"459":11,"461":3,"463":1,"465":5,"466":3,"491":1,"492":1,"493":1,"522":2,"523":1,"534":2,"536":9,"537":2,"538":7,"539":1,"540":2,"541":1,"564":3,"565":1,"566":1,"567":1,"583":1,"618":1,"633":1,"640":1,"700":1,"713":1,"715":3,"716":1,"717":1,"741":1,"742":1,"766":1,"791":1,"792":1,"794":1,"809":1,"815":1,"891":1,"892":1,"893":1,"907":1,"910":1,"923":1,"927":1,"945":1,"947":1,"948":2,"972":7,"973":3,"974":1,"982":1,"988":1,"1042":1,"1059":2,"1091":2,"1093":1,"1095":1,"1100":1,"1192":1,"1202":1,"1203":1,"1212":3,"1232":3,"1236":1,"1237":16,"1239":1,"1247":2,"1249":2,"1259":6,"1260":2,"1262":1,"1264":5,"1266":3,"1267":3,"1269":1,"1270":64,"1273":1,"1277":1,"1282":2,"1283":1,"1286":20,"1297":1,"1300":22,"1301":2,"1309":9,"1310":2,"1311":20,"1312":12,"1313":1,"1316":2,"1318":1,"1323":40,"1324":28,"1327":1,"1333":2,"1339":14,"1340":2,"1350":11,"1354":1,"1359":41,"1369":3,"1380":6,"1394":1,"1395":17,"1396":34,"1401":1,"1402":6,"1405":1,"1410":2,"1415":38,"1416":2,"1424":2,"1427":7,"1435":1,"1436":63,"1438":6,"1441":1,"1444":1,"1455":1,"1478":1,"1489":1,"1496":4,"1507":1,"1526":1,"1531":1,"1532":1,"1577":2,"1582":1,"1591":2,"1596":1,"1653":1,"1662":1,"1666":1,"1667":2,"1672":1,"1749":1,"1753":2,"1764":1,"1765":4,"1774":1,"1823":2,"1827":1,"1839":1,"1851":1,"1902":1,"1908":1,"1914":1,"1920":1,"1923":1,"1929":2,"1933":1,"1988":2,"2063":1,"2092":3,"2095":1,"2096":1,"2098":2,"2134":1,"2139":2,"2161":1,"2164":11,"2168":6,"2169":5,"2184":1,"2189":2,"2194":1,"2199":1,"2203":1,"2232":3}}],["markerduration",{"2":{"459":1,"461":1,"463":1,"2066":1},"3":{"0":1,"459":2,"461":1,"463":1,"1300":3,"1311":2,"2066":1}}],["marked",{"3":{"0":2,"18":1,"20":1,"39":2,"41":1,"51":1,"54":2,"126":2,"160":2,"189":1,"484":1,"490":1,"534":1,"537":1,"538":1,"543":2,"690":1,"714":1,"905":1,"910":1,"980":1,"1003":1,"1203":1,"1212":1,"1229":1,"1237":6,"1252":3,"1259":2,"1264":1,"1270":1,"1277":1,"1286":5,"1300":8,"1309":1,"1311":2,"1312":4,"1323":1,"1342":1,"1347":1,"1349":1,"1350":5,"1357":1,"1359":10,"1380":12,"1402":6,"1405":1,"1415":3,"1422":1,"1436":23,"1438":3,"1441":1,"1447":1,"1459":1,"1467":2,"1489":1,"1496":2,"1508":1,"1577":5,"1640":1,"1672":1,"1699":1,"1727":1,"1737":1,"1749":3,"1764":2,"1767":2,"1821":1,"1839":1,"1840":1,"1930":1,"1975":1,"2063":1,"2089":1,"2098":1,"2165":1,"2197":1}}],["markstale",{"3":{"1324":2,"1577":2}}],["marksnothingcurrent",{"3":{"907":1}}],["marks",{"3":{"0":4,"157":1,"160":1,"344":1,"528":1,"538":1,"540":1,"543":1,"657":1,"674":1,"873":1,"876":1,"907":1,"1012":1,"1091":1,"1233":1,"1236":1,"1237":4,"1257":1,"1259":5,"1265":1,"1270":1,"1274":1,"1286":8,"1297":1,"1300":11,"1309":7,"1310":1,"1311":5,"1312":4,"1322":1,"1323":1,"1324":2,"1339":2,"1350":6,"1359":3,"1369":1,"1395":2,"1396":3,"1402":3,"1405":1,"1415":9,"1416":2,"1417":1,"1427":2,"1436":14,"1441":1,"1512":1,"1577":1,"1582":1,"1586":1,"1630":1,"1632":1,"1639":1,"1662":2,"1666":1,"1672":1,"1687":1,"1765":1,"1784":1,"1846":1,"1871":1,"1876":1,"1929":2,"1937":2,"2012":1,"2013":1,"2044":1,"2091":1,"2165":1}}],["making",{"0":{"1223":1,"2144":1},"3":{"0":3,"159":1,"178":1,"235":1,"237":1,"264":1,"286":1,"340":1,"436":1,"520":1,"551":1,"619":1,"651":1,"666":2,"683":1,"691":1,"698":1,"700":1,"709":1,"716":1,"724":1,"742":1,"767":2,"805":1,"819":1,"820":1,"827":2,"855":1,"890":1,"907":1,"965":1,"996":1,"1018":1,"1027":1,"1051":1,"1076":1,"1117":1,"1212":1,"1229":2,"1237":4,"1247":3,"1259":6,"1270":7,"1271":2,"1286":8,"1293":1,"1300":6,"1301":1,"1309":1,"1310":2,"1311":6,"1323":4,"1324":11,"1332":1,"1339":6,"1350":9,"1359":15,"1369":1,"1395":8,"1396":12,"1402":5,"1417":6,"1436":9,"1438":1,"1454":1,"1455":5,"1467":1,"1492":1,"1638":1,"1641":1,"1734":1,"1776":1,"1806":1,"1901":2,"1956":1,"2007":1,"2045":1,"2070":1,"2081":1,"2155":1,"2162":1}}],["makegenericmethod",{"3":{"1247":1,"1270":1,"1286":5}}],["makegenerictype",{"3":{"1229":1,"1237":1,"1247":1,"1259":1,"1286":5,"1300":2,"1323":1}}],["makes",{"0":{"1782":1,"1824":1,"1872":1},"1":{"1980":1,"1981":1,"1982":1,"1983":1,"1984":1,"1985":1},"3":{"0":20,"24":2,"26":1,"72":2,"100":1,"109":1,"110":3,"111":1,"116":1,"125":1,"136":1,"137":1,"147":1,"150":1,"151":1,"158":1,"160":1,"162":1,"168":1,"177":2,"182":1,"186":2,"187":1,"188":1,"189":1,"194":1,"195":1,"215":1,"217":1,"218":1,"219":1,"230":1,"236":1,"243":1,"244":1,"245":1,"255":2,"264":1,"265":3,"266":3,"273":1,"283":1,"284":1,"309":1,"311":1,"341":1,"342":2,"361":3,"374":1,"388":2,"397":1,"398":1,"407":1,"449":1,"458":1,"460":1,"465":1,"477":1,"484":1,"498":1,"500":1,"511":1,"530":2,"543":1,"546":2,"551":1,"556":1,"557":1,"558":1,"560":1,"563":2,"572":1,"573":1,"582":1,"584":2,"591":1,"592":3,"599":1,"600":1,"601":1,"603":1,"607":2,"609":1,"610":1,"619":1,"641":2,"649":1,"650":1,"656":2,"658":1,"667":1,"670":1,"672":1,"674":1,"675":1,"690":1,"691":4,"692":1,"694":1,"697":1,"698":2,"708":1,"716":3,"717":1,"718":1,"721":1,"725":2,"733":3,"734":1,"735":1,"742":2,"748":1,"750":1,"751":2,"766":1,"767":1,"773":1,"789":1,"791":1,"799":1,"800":1,"802":1,"812":1,"819":1,"820":1,"823":1,"827":3,"828":1,"838":1,"839":1,"840":1,"847":1,"856":2,"860":1,"862":3,"871":1,"873":1,"874":1,"881":1,"882":2,"883":2,"888":1,"890":2,"891":1,"896":3,"898":1,"901":1,"906":1,"918":1,"923":1,"924":1,"932":2,"938":1,"940":2,"942":1,"946":1,"948":2,"954":1,"965":1,"968":1,"972":1,"988":2,"989":1,"990":2,"992":1,"996":1,"997":1,"1005":1,"1006":1,"1012":1,"1018":1,"1019":1,"1020":2,"1025":1,"1027":1,"1033":1,"1036":1,"1044":1,"1051":3,"1052":2,"1060":2,"1067":2,"1076":1,"1084":2,"1087":1,"1091":1,"1092":3,"1093":1,"1109":1,"1116":1,"1123":1,"1124":1,"1129":2,"1132":1,"1133":1,"1135":1,"1137":1,"1147":1,"1150":1,"1162":1,"1167":1,"1169":1,"1212":1,"1223":1,"1229":11,"1231":1,"1237":10,"1247":11,"1250":1,"1252":1,"1253":1,"1257":1,"1259":25,"1265":2,"1266":1,"1269":1,"1270":28,"1271":4,"1275":1,"1276":1,"1278":2,"1283":1,"1284":1,"1286":77,"1290":1,"1291":1,"1292":1,"1294":1,"1300":51,"1301":7,"1309":18,"1310":5,"1311":42,"1312":4,"1314":1,"1316":1,"1317":1,"1320":1,"1323":34,"1324":74,"1325":1,"1326":1,"1327":1,"1328":2,"1330":1,"1333":3,"1334":1,"1336":1,"1337":2,"1338":1,"1339":60,"1343":1,"1344":1,"1346":1,"1350":17,"1353":1,"1355":1,"1356":1,"1357":1,"1359":121,"1362":1,"1364":1,"1366":1,"1369":16,"1376":1,"1380":7,"1392":1,"1393":1,"1395":51,"1396":98,"1397":1,"1401":1,"1402":33,"1405":1,"1406":1,"1412":1,"1415":42,"1416":10,"1417":35,"1421":1,"1422":2,"1424":2,"1425":1,"1427":2,"1430":1,"1431":1,"1435":2,"1436":150,"1438":7,"1441":2,"1443":2,"1447":2,"1453":3,"1454":1,"1455":7,"1456":2,"1457":1,"1458":1,"1460":1,"1465":1,"1467":8,"1472":1,"1474":2,"1475":1,"1476":2,"1477":1,"1480":1,"1488":5,"1489":1,"1490":1,"1491":1,"1492":3,"1526":2,"1534":2,"1536":1,"1568":1,"1577":1,"1633":1,"1638":1,"1649":1,"1652":1,"1658":1,"1661":1,"1662":2,"1667":1,"1677":1,"1684":1,"1685":1,"1686":3,"1688":1,"1697":1,"1701":1,"1708":1,"1711":1,"1720":1,"1729":1,"1731":2,"1737":1,"1749":2,"1755":1,"1765":1,"1779":1,"1790":2,"1795":2,"1797":1,"1808":1,"1810":1,"1811":1,"1812":1,"1813":1,"1814":1,"1815":1,"1819":1,"1825":1,"1839":1,"1840":2,"1841":1,"1842":1,"1843":1,"1844":2,"1846":1,"1849":2,"1853":1,"1854":1,"1876":1,"1879":1,"1883":1,"1884":2,"1895":1,"1899":1,"1902":1,"1905":1,"1907":1,"1908":1,"1916":1,"1922":1,"1923":2,"1924":1,"1939":1,"1943":1,"1944":2,"1946":2,"1947":2,"1950":1,"1958":1,"1963":1,"1970":1,"1971":1,"1980":1,"1982":1,"1983":1,"1989":1,"1993":1,"1996":1,"1997":1,"1998":1,"2000":1,"2001":1,"2010":1,"2016":1,"2020":2,"2021":1,"2022":1,"2024":2,"2029":1,"2030":1,"2031":1,"2034":1,"2039":1,"2040":1,"2042":1,"2043":1,"2044":1,"2045":1,"2057":1,"2061":2,"2064":1,"2066":1,"2070":1,"2073":1,"2083":1,"2087":1,"2098":1,"2112":1,"2132":1,"2133":1,"2137":1,"2141":1,"2142":1,"2144":2,"2145":4,"2146":1,"2156":2,"2157":1,"2160":1,"2163":1,"2164":1,"2165":2,"2166":1,"2167":1,"2169":2,"2170":2,"2177":1,"2180":2,"2184":1,"2185":1,"2186":1,"2188":1,"2192":1,"2193":1,"2202":2,"2203":1,"2208":1}}],["make",{"0":{"2010":1},"3":{"0":4,"1":1,"6":1,"20":1,"39":1,"41":1,"88":1,"109":3,"160":1,"195":1,"219":1,"257":1,"295":1,"305":1,"342":1,"361":1,"373":1,"381":1,"383":1,"390":1,"395":1,"396":1,"403":1,"469":1,"500":1,"518":1,"537":1,"583":1,"584":1,"585":1,"593":1,"609":1,"618":1,"626":1,"650":1,"656":1,"657":1,"675":1,"683":1,"698":1,"709":1,"726":1,"729":1,"740":1,"741":1,"749":1,"750":1,"776":1,"810":1,"815":1,"820":1,"827":1,"829":1,"838":2,"848":1,"861":1,"862":1,"872":1,"889":1,"898":1,"899":1,"903":1,"906":1,"907":1,"914":1,"915":1,"926":1,"931":1,"932":1,"945":1,"988":1,"989":1,"997":1,"1018":1,"1020":1,"1034":2,"1035":2,"1042":1,"1052":1,"1059":1,"1060":1,"1067":1,"1083":1,"1091":1,"1092":1,"1100":1,"1108":1,"1123":1,"1139":1,"1149":1,"1187":1,"1212":1,"1219":1,"1221":1,"1229":3,"1237":2,"1242":1,"1247":3,"1249":1,"1258":2,"1259":1,"1265":1,"1268":1,"1269":3,"1270":4,"1271":3,"1276":1,"1281":1,"1286":23,"1300":14,"1301":1,"1309":2,"1311":13,"1313":1,"1315":1,"1319":1,"1320":1,"1323":8,"1324":13,"1330":1,"1334":1,"1337":1,"1339":7,"1344":1,"1350":7,"1357":1,"1358":1,"1359":30,"1366":1,"1369":2,"1373":1,"1379":1,"1380":1,"1395":14,"1396":23,"1402":5,"1403":1,"1409":1,"1410":1,"1415":2,"1416":2,"1417":8,"1427":1,"1431":1,"1436":39,"1438":1,"1441":2,"1453":1,"1455":5,"1465":1,"1467":4,"1471":1,"1473":1,"1488":1,"1489":1,"1492":1,"1585":1,"1595":1,"1596":1,"1639":2,"1651":1,"1656":1,"1678":1,"1686":1,"1702":1,"1708":1,"1720":1,"1728":1,"1729":1,"1749":1,"1765":2,"1788":2,"1793":1,"1803":1,"1807":2,"1812":1,"1827":2,"1828":1,"1829":1,"1832":1,"1841":1,"1846":2,"1853":2,"1859":1,"1862":2,"1863":1,"1865":1,"1868":1,"1871":1,"1877":2,"1886":2,"1890":1,"1892":2,"1901":1,"1905":1,"1907":1,"1911":1,"1912":3,"1930":2,"1941":1,"1947":1,"1948":1,"1954":1,"1958":1,"1959":1,"1964":1,"1965":1,"1972":1,"1979":1,"1980":1,"1981":1,"1985":1,"1995":3,"1996":1,"1997":1,"1998":1,"2004":1,"2009":1,"2028":1,"2038":1,"2040":1,"2043":1,"2049":1,"2060":1,"2067":1,"2068":1,"2069":1,"2080":1,"2097":1,"2105":1,"2108":1,"2111":1,"2113":1,"2125":1,"2136":1,"2139":1,"2142":1,"2145":1,"2153":1,"2155":1,"2160":3,"2161":1,"2166":2,"2167":1,"2169":1,"2170":1,"2179":2,"2180":3,"2192":2,"2193":3,"2197":1,"2200":1,"2203":4,"2209":1,"2211":1,"2232":1}}],["mat",{"3":{"1524":8,"1525":10,"1589":6,"1598":1}}],["matrices",{"3":{"1456":1,"1526":1,"1535":1,"1611":1}}],["matrix",{"0":{"1499":1,"1716":1},"2":{"1456":1},"3":{"137":1,"146":1,"148":1,"265":1,"618":1,"619":1,"684":1,"756":1,"863":2,"868":1,"1192":1,"1212":1,"1216":1,"1247":1,"1300":1,"1324":2,"1402":1,"1417":2,"1433":2,"1436":3,"1438":1,"1445":1,"1450":1,"1453":1,"1455":5,"1456":10,"1460":1,"1461":1,"1465":1,"1490":4,"1492":3,"1496":1,"1526":2,"1533":1,"1559":1,"1577":7,"1591":4,"1596":1,"1599":1,"1611":1,"1632":2,"1639":1,"1674":1,"1711":1,"2073":1,"2076":1,"2112":1}}],["mates",{"3":{"1271":1}}],["materialised",{"3":{"1339":2,"1396":3}}],["materializing",{"3":{"1237":1,"1242":1,"1243":1,"1245":1,"1259":1,"1269":1,"1270":1,"1286":5,"1309":2,"1311":1,"1323":1,"1324":1,"1353":1,"1359":5,"1395":1,"1396":2,"1402":2,"1415":2,"1436":1,"1988":1,"2167":1}}],["materializers",{"3":{"1286":3}}],["materializer",{"3":{"657":1,"1237":1,"1438":1}}],["materialize",{"3":{"31":1,"549":1,"609":1,"659":1,"741":1,"1243":2,"1247":1,"1269":1,"1270":3,"1271":1,"1278":1,"1286":4,"1300":2,"1301":1,"1309":2,"1311":2,"1323":1,"1359":4,"1395":1,"1396":1,"1402":1,"1427":1,"1436":2,"1438":2,"1667":1,"1883":1,"1956":1,"1965":1}}],["materializes",{"3":{"0":1,"166":1,"186":1,"551":1,"819":1,"964":1,"966":1,"1212":1,"1231":1,"1237":1,"1239":1,"1243":1,"1247":3,"1259":1,"1263":1,"1270":1,"1271":2,"1286":13,"1297":1,"1300":5,"1309":4,"1310":2,"1311":2,"1324":4,"1350":1,"1359":8,"1380":1,"1395":3,"1396":5,"1402":3,"1415":3,"1417":1,"1423":1,"1427":3,"1436":5,"1467":1,"1810":1,"1815":1,"1844":1,"1859":1,"1861":1,"1895":1,"1962":1,"2090":1}}],["materialized",{"3":{"0":1,"47":1,"71":1,"122":1,"188":1,"335":1,"609":2,"658":1,"799":1,"988":1,"1091":1,"1229":1,"1239":1,"1243":4,"1244":1,"1247":11,"1259":2,"1270":4,"1286":9,"1288":1,"1300":3,"1309":2,"1310":4,"1311":1,"1323":1,"1324":1,"1359":25,"1396":9,"1402":1,"1406":1,"1415":2,"1423":3,"1427":1,"1431":1,"1436":2,"1467":1,"1474":1,"1476":1,"1964":1,"1988":1,"2158":2,"2232":1}}],["materialization",{"3":{"0":1,"330":1,"359":1,"365":1,"657":1,"990":1,"1226":1,"1229":2,"1244":1,"1247":5,"1270":2,"1278":1,"1284":1,"1286":10,"1300":1,"1309":6,"1310":1,"1323":1,"1343":1,"1359":2,"1362":1,"1369":1,"1395":1,"1396":6,"1402":3,"1436":1,"1805":1,"1806":1,"1811":1,"1815":1,"2142":1}}],["materials",{"0":{"1357":1,"1389":1},"1":{"1113":1,"1114":1,"1115":1,"1116":1,"1117":1,"1118":1,"1119":1,"1120":1},"3":{"0":2,"370":1,"371":1,"372":1,"374":1,"443":1,"1113":1,"1116":5,"1117":3,"1212":1,"1348":1,"1350":2,"1357":2,"1359":4,"1373":1,"1377":1,"1380":2,"1381":1,"1389":1,"1395":10,"1436":1,"1454":1,"1630":1,"1631":5,"1636":1,"1640":2,"2126":1,"2232":1}}],["material",{"3":{"0":1,"30":1,"31":1,"284":1,"359":3,"361":1,"599":1,"650":1,"673":1,"674":1,"792":1,"827":1,"906":1,"907":1,"944":1,"946":3,"948":2,"950":1,"1060":1,"1063":1,"1066":1,"1115":1,"1117":1,"1118":1,"1212":1,"1241":1,"1285":1,"1286":2,"1287":2,"1288":1,"1292":1,"1294":1,"1300":20,"1311":1,"1323":2,"1324":6,"1339":1,"1342":2,"1350":3,"1351":1,"1352":1,"1357":1,"1359":2,"1373":2,"1380":1,"1389":1,"1395":15,"1409":1,"1410":1,"1415":6,"1417":1,"1429":1,"1430":1,"1436":4,"1438":3,"1442":1,"1447":1,"1456":1,"1467":2,"1640":1,"1645":1,"1667":1,"1714":1,"1902":4,"1905":1,"1973":1,"1982":1,"2012":1,"2024":1,"2056":2,"2142":2,"2145":1,"2166":1,"2198":1,"2203":1,"2230":1,"2232":1,"2234":1}}],["materially",{"3":{"0":1,"259":1,"474":1,"549":1,"799":1,"987":1,"1324":1,"1436":1,"1467":1,"1534":1}}],["maturity×weight",{"3":{"1523":1,"1574":1,"1588":1}}],["maturity",{"0":{"1533":1,"1584":1,"1598":1,"1797":1},"2":{"1529":1},"3":{"1216":1,"1516":1,"1519":1,"1523":5,"1524":6,"1526":27,"1529":3,"1530":4,"1531":10,"1532":2,"1533":2,"1534":1,"1535":7,"1536":1,"1537":9,"1554":1,"1565":1,"1574":4,"1575":10,"1576":1,"1577":20,"1578":3,"1580":4,"1581":4,"1582":4,"1583":4,"1584":4,"1585":4,"1586":1,"1588":3,"1589":1,"1591":21,"1592":3,"1594":3,"1595":3,"1596":3,"1597":3,"1599":1,"1673":1,"1784":6,"1794":1,"1797":1,"1798":3,"1799":7,"1800":1,"1802":2,"1903":2,"1929":2,"2034":1,"2041":1,"2043":2,"2048":1,"2050":1,"2053":1,"2059":2,"2062":1,"2069":1,"2114":1,"2171":1,"2182":2,"2195":1,"2231":4}}],["mature",{"3":{"1216":1,"1537":1,"1578":1,"1784":1,"1797":1,"1833":1}}],["mathematics",{"3":{"2222":1}}],["math",{"3":{"281":1,"330":1,"337":1,"1229":1,"1244":3,"1247":7,"1259":1,"1286":1,"1300":3,"1311":3,"1324":9,"1348":1,"1350":6,"1359":2,"1369":1,"1395":1,"1396":15,"1401":1,"1402":1,"1415":4,"1417":4,"1422":1,"1435":1,"1438":1,"1455":2,"1988":1,"2000":1}}],["mattering",{"3":{"1323":1,"2097":1}}],["matters",{"0":{"1789":1,"1809":1,"1814":1,"1819":1,"1836":1,"1848":1,"1864":1,"1870":1,"1888":1,"1894":1,"1901":1,"1907":1,"1909":1,"1926":1,"1961":1,"1967":1,"1974":1,"1981":1,"1987":1,"1993":1,"1999":1,"2051":1,"2062":1,"2082":1,"2125":1,"2130":1,"2135":1,"2141":1,"2148":1,"2155":1,"2162":1,"2171":1,"2182":1,"2195":1},"3":{"160":1,"198":1,"216":1,"264":1,"380":1,"387":1,"390":1,"423":1,"551":1,"592":1,"702":1,"827":1,"845":1,"847":1,"875":1,"906":1,"941":2,"1186":1,"1223":1,"1229":1,"1237":3,"1238":1,"1247":3,"1259":2,"1270":4,"1271":1,"1280":1,"1286":17,"1300":7,"1309":5,"1311":6,"1315":1,"1323":7,"1324":11,"1339":13,"1345":1,"1347":1,"1359":18,"1366":1,"1369":1,"1372":1,"1379":1,"1380":1,"1395":11,"1396":13,"1398":1,"1402":2,"1415":7,"1417":6,"1421":1,"1427":1,"1436":18,"1438":2,"1441":1,"1445":1,"1447":1,"1453":3,"1454":1,"1455":1,"1456":1,"1467":2,"1475":2,"1488":1,"1490":1,"1555":1,"1649":1,"1684":1,"1782":1,"1813":1,"1817":1,"1840":1,"1844":1,"1878":1,"1886":1,"1889":1,"1898":1,"1902":1,"1934":1,"1937":1,"1943":1,"1950":1,"1962":1,"2007":1,"2010":1,"2029":1,"2036":1,"2039":1,"2049":1,"2057":1,"2060":1,"2073":1,"2075":1,"2095":1,"2098":1,"2099":1,"2118":1,"2128":1,"2155":1,"2156":1,"2193":1,"2201":1}}],["matter",{"0":{"2043":1},"3":{"122":1,"160":1,"219":1,"265":1,"783":1,"998":1,"1004":1,"1059":1,"1192":2,"1229":1,"1259":1,"1270":1,"1271":1,"1286":3,"1296":1,"1300":5,"1301":3,"1311":3,"1323":3,"1324":2,"1339":3,"1350":1,"1359":10,"1369":1,"1395":1,"1396":3,"1397":1,"1402":1,"1410":1,"1415":1,"1417":4,"1431":2,"1436":4,"1438":3,"1463":1,"1475":2,"1489":1,"1490":1,"1496":2,"1638":1,"1831":1,"1874":1,"1883":1,"1908":1,"1918":1,"1922":1,"2024":1,"2045":1,"2049":1,"2093":1,"2109":1,"2150":1,"2154":1,"2158":1,"2187":1,"2200":1}}],["matchtimeout",{"3":{"1427":2}}],["matchtimeoutmilliseconds",{"3":{"1237":2,"1309":1}}],["matchlocaleasync",{"3":{"1417":2}}],["matchmedia",{"2":{"273":1},"3":{"273":1,"2083":1}}],["matchingmethods",{"3":{"1436":1}}],["matching",{"0":{"1910":1},"3":{"0":8,"31":1,"80":1,"97":1,"126":1,"136":1,"158":1,"166":1,"180":1,"226":1,"243":2,"265":2,"272":1,"295":1,"318":1,"351":1,"352":1,"353":1,"365":1,"403":1,"420":1,"448":1,"470":1,"473":1,"491":1,"492":1,"493":2,"494":2,"495":1,"528":1,"536":2,"540":1,"543":1,"551":2,"554":1,"556":1,"575":1,"599":1,"603":1,"607":1,"609":2,"612":1,"643":1,"657":2,"692":3,"697":1,"698":1,"716":1,"749":1,"760":1,"764":1,"790":1,"827":1,"838":1,"839":1,"840":1,"842":1,"847":1,"882":1,"925":1,"939":1,"946":1,"948":1,"964":1,"970":1,"972":1,"975":1,"1059":1,"1089":1,"1133":1,"1191":1,"1196":1,"1212":1,"1229":4,"1230":1,"1234":1,"1237":5,"1239":1,"1247":7,"1258":1,"1259":3,"1270":9,"1271":3,"1276":1,"1278":1,"1286":30,"1288":1,"1289":1,"1291":1,"1293":3,"1300":18,"1301":3,"1309":8,"1310":3,"1311":21,"1312":4,"1322":1,"1323":8,"1324":22,"1327":1,"1337":1,"1339":15,"1344":2,"1350":16,"1352":1,"1353":1,"1359":38,"1366":1,"1369":3,"1374":1,"1380":3,"1395":15,"1396":17,"1399":1,"1402":7,"1405":1,"1415":4,"1417":12,"1427":10,"1430":1,"1436":68,"1438":1,"1443":2,"1445":1,"1446":1,"1447":2,"1454":1,"1455":2,"1464":1,"1467":1,"1476":1,"1488":2,"1489":1,"1492":1,"1496":2,"1526":1,"1572":2,"1577":2,"1586":1,"1589":2,"1591":2,"1599":1,"1630":2,"1631":1,"1632":2,"1639":1,"1641":8,"1662":1,"1670":1,"1821":1,"1851":1,"1859":1,"1861":1,"1894":1,"1895":1,"1902":1,"1906":1,"1916":1,"1975":1,"1978":1,"1979":1,"1994":1,"2025":1,"2027":1,"2046":1,"2063":1,"2131":1,"2157":1,"2158":1,"2159":1,"2164":1,"2232":1}}],["matchers",{"3":{"1427":1}}],["matcher",{"3":{"1237":1,"1309":2,"1311":1,"1324":1,"1339":1,"1347":1,"1350":1,"1436":2,"1438":1}}],["matcheswholeregiontokensonly",{"3":{"1436":2}}],["matchestherouteattributereality",{"3":{"1436":1}}],["matchesthecurrentcontract",{"2":{"1427":1},"3":{"1427":1}}],["matchesserverstrongpasswordrules",{"3":{"1436":2}}],["matchessignature",{"3":{"1286":1}}],["matchesdeployedregion",{"3":{"972":1,"1436":3,"2043":1}}],["matches",{"0":{"720":1},"3":{"0":5,"39":1,"40":1,"74":1,"91":1,"96":1,"109":1,"139":1,"142":1,"179":1,"217":1,"218":1,"258":1,"265":1,"268":1,"318":1,"324":1,"335":1,"341":1,"345":1,"352":1,"372":1,"398":1,"402":1,"415":1,"500":1,"545":1,"551":2,"564":1,"611":4,"650":1,"655":1,"666":1,"688":1,"734":1,"740":1,"749":1,"769":1,"790":1,"801":1,"827":1,"847":1,"857":1,"871":1,"881":1,"904":1,"946":1,"955":1,"972":1,"973":1,"974":1,"975":2,"1004":1,"1006":2,"1018":1,"1040":1,"1091":1,"1118":1,"1135":1,"1177":1,"1194":1,"1196":1,"1202":1,"1212":1,"1223":1,"1229":1,"1234":1,"1237":3,"1240":1,"1241":1,"1247":8,"1259":3,"1262":1,"1270":6,"1271":5,"1275":1,"1284":2,"1286":26,"1289":1,"1292":1,"1297":1,"1300":19,"1301":3,"1306":1,"1309":6,"1310":4,"1311":18,"1312":1,"1317":1,"1323":8,"1324":29,"1333":1,"1337":1,"1339":8,"1347":1,"1350":4,"1352":1,"1353":2,"1358":1,"1359":41,"1364":1,"1369":1,"1380":4,"1385":1,"1395":11,"1396":13,"1402":3,"1406":1,"1413":1,"1415":14,"1416":2,"1417":9,"1420":1,"1421":1,"1424":1,"1427":8,"1432":1,"1435":1,"1436":41,"1438":2,"1440":1,"1441":2,"1443":2,"1453":2,"1455":1,"1456":1,"1467":1,"1475":3,"1476":2,"1480":2,"1481":1,"1488":1,"1489":1,"1496":1,"1524":1,"1525":1,"1526":2,"1531":1,"1567":1,"1571":1,"1575":1,"1577":6,"1582":1,"1585":3,"1586":1,"1589":2,"1591":3,"1596":2,"1597":1,"1631":1,"1632":1,"1639":2,"1641":2,"1651":1,"1654":1,"1686":2,"1730":1,"1749":1,"1750":1,"1765":1,"1767":2,"1771":1,"1829":1,"1851":1,"1872":1,"1904":1,"1920":1,"1923":1,"1928":1,"1948":1,"1952":1,"1978":1,"1995":1,"1996":2,"2000":1,"2043":1,"2045":2,"2048":1,"2083":1,"2097":1,"2157":1,"2166":1,"2187":1,"2199":1,"2232":1}}],["matchedhash",{"3":{"1300":1}}],["matchedstep",{"3":{"1300":4}}],["matched",{"3":{"0":2,"136":1,"142":1,"160":1,"186":1,"249":1,"265":2,"310":1,"353":1,"372":1,"538":2,"557":1,"564":1,"585":1,"586":1,"592":1,"649":1,"827":1,"837":1,"840":2,"877":1,"905":1,"946":1,"999":1,"1029":1,"1045":1,"1067":1,"1089":1,"1091":2,"1117":1,"1135":1,"1161":2,"1163":1,"1196":1,"1231":1,"1237":1,"1247":2,"1270":2,"1286":9,"1300":14,"1301":1,"1310":1,"1311":8,"1312":1,"1315":1,"1323":2,"1324":4,"1338":1,"1339":8,"1350":1,"1355":1,"1359":5,"1395":3,"1396":2,"1402":1,"1415":1,"1416":1,"1417":3,"1419":1,"1421":1,"1424":1,"1427":4,"1436":38,"1443":1,"1447":1,"1455":1,"1458":1,"1492":1,"1526":1,"1568":1,"1577":1,"1631":5,"1636":1,"1639":2,"1640":1,"1641":2,"1653":1,"1684":1,"1700":1,"1902":1,"1951":1,"2044":1,"2139":1,"2149":1,"2157":1,"2168":1}}],["matchasync",{"2":{"1220":1},"3":{"0":1,"109":2,"1220":2,"1229":3,"1805":2}}],["match",{"0":{"1874":1},"1":{"1869":1,"1870":1,"1871":1,"1872":1,"1873":1,"1874":1,"1875":1,"1876":1,"1877":1},"2":{"1004":1,"1807":1},"3":{"0":8,"93":1,"98":1,"102":1,"109":2,"152":1,"162":1,"173":1,"268":1,"279":1,"300":1,"314":1,"339":1,"340":1,"341":3,"342":3,"343":2,"344":1,"348":1,"350":2,"353":2,"363":1,"402":1,"420":1,"489":1,"499":1,"507":1,"511":1,"540":1,"547":1,"564":1,"572":1,"607":1,"609":2,"610":1,"611":2,"635":1,"658":1,"744":1,"766":1,"785":1,"789":1,"809":1,"813":1,"829":1,"833":1,"879":1,"881":2,"885":1,"907":1,"909":1,"916":1,"922":2,"925":1,"944":1,"965":1,"972":4,"973":1,"974":2,"975":1,"1004":3,"1006":1,"1021":1,"1026":1,"1040":1,"1042":1,"1091":3,"1095":1,"1119":1,"1120":1,"1133":1,"1135":1,"1150":1,"1212":1,"1220":2,"1229":5,"1234":1,"1237":6,"1247":5,"1259":3,"1264":1,"1265":2,"1270":8,"1271":2,"1273":1,"1286":24,"1289":1,"1293":2,"1295":1,"1300":26,"1301":6,"1305":1,"1307":1,"1309":4,"1310":3,"1311":27,"1323":9,"1324":28,"1339":14,"1347":3,"1349":1,"1350":15,"1355":4,"1359":55,"1369":5,"1373":1,"1375":1,"1380":9,"1382":1,"1389":2,"1395":18,"1396":17,"1402":18,"1406":3,"1413":2,"1414":1,"1415":13,"1416":3,"1417":5,"1424":2,"1427":7,"1432":3,"1436":65,"1438":2,"1443":4,"1451":1,"1455":2,"1456":1,"1457":1,"1459":1,"1461":1,"1467":1,"1475":1,"1476":3,"1481":1,"1489":3,"1492":3,"1496":9,"1517":1,"1526":4,"1531":1,"1541":1,"1545":1,"1562":1,"1577":1,"1591":1,"1596":1,"1600":2,"1611":2,"1627":1,"1631":3,"1632":5,"1635":3,"1638":1,"1640":1,"1641":7,"1651":3,"1654":1,"1662":1,"1664":1,"1689":1,"1720":1,"1728":1,"1748":4,"1749":4,"1765":5,"1779":1,"1796":1,"1805":3,"1807":1,"1810":1,"1816":1,"1832":1,"1869":2,"1871":1,"1872":1,"1874":3,"1876":2,"1877":3,"1882":1,"1923":1,"1926":1,"1945":1,"1973":2,"1975":1,"1976":1,"1977":1,"1978":1,"1979":2,"1995":1,"2000":1,"2003":1,"2033":1,"2107":1,"2113":1,"2126":1,"2136":1,"2144":1,"2160":1,"2164":1,"2166":1,"2188":1,"2198":1,"2207":1,"2232":1}}],["maxhandlerconstructordependencies",{"2":{"1431":1},"3":{"1431":1,"1436":9}}],["maxopenquestionsperuserpersession",{"3":{"1402":4}}],["maxoptions",{"3":{"1398":1,"1402":8}}],["maxoutcomes",{"3":{"1396":2}}],["maxoutputtokens",{"2":{"1419":1,"1422":1,"2173":1,"2174":1},"3":{"1018":1,"1090":1,"1091":3,"1094":1,"1366":1,"1369":3,"1419":1,"1422":1,"1427":5,"2173":1,"2174":1}}],["maxsizebytes",{"2":{"1478":1},"3":{"1478":1}}],["maxserviceconstructorparameters",{"3":{"1436":2}}],["maxsponsors",{"3":{"1395":1}}],["maxspeakersessions",{"3":{"1395":4}}],["maxsuggestions",{"3":{"1395":1}}],["maxsavepasses",{"3":{"1278":1,"1286":3}}],["maxpolls",{"3":{"1395":5}}],["maxpairs",{"3":{"1359":2}}],["maxpages",{"3":{"1324":2,"1395":1}}],["maxpagesize=500",{"3":{"1577":1}}],["maxpagesize",{"2":{"331":1,"337":1,"741":1,"743":1,"1228":1,"1245":1,"1988":1,"1991":1,"2201":1},"3":{"0":1,"330":2,"331":1,"337":2,"674":1,"741":1,"743":1,"1228":2,"1229":3,"1242":1,"1245":1,"1247":3,"1259":1,"1286":1,"1309":4,"1311":8,"1320":1,"1323":4,"1324":3,"1380":2,"1395":1,"1396":4,"1415":2,"1748":2,"1988":3,"1991":1,"2201":1}}],["maxpayloadbytes",{"3":{"1309":1}}],["maxmanualidattempts",{"3":{"1359":3,"1395":1}}],["maxlineoctets",{"3":{"1300":2}}],["maxlockoutseconds",{"2":{"1292":1},"3":{"1292":2,"1300":2}}],["maxlookupselectorcacheentries",{"3":{"1286":2}}],["maxlengtherror",{"3":{"1396":2}}],["maxlengthattribute",{"3":{"1324":1,"1395":1}}],["maxlength",{"2":{"657":1,"1353":1,"1833":1},"3":{"657":2,"1237":6,"1271":10,"1286":5,"1309":5,"1311":2,"1324":10,"1350":10,"1353":1,"1359":24,"1395":15,"1396":9,"1631":1,"1727":1,"1810":2,"1829":1,"1833":1}}],["maxrosterpages",{"3":{"1396":2}}],["maxroster",{"3":{"1395":2}}],["maxroleslength",{"3":{"1286":4,"1318":1,"1323":2}}],["maxrenderedrows",{"3":{"1436":1}}],["maxrendereditems",{"2":{"2079":1},"3":{"1324":2,"2079":1}}],["maxreturnedownquestions",{"3":{"1402":1}}],["maxreturnedquestions",{"3":{"1402":2}}],["maxretryattempts",{"3":{"1339":5,"1443":1}}],["maxretrydelay",{"2":{"987":1},"3":{"987":1,"1286":2}}],["maxretrycount",{"2":{"987":1},"3":{"987":1,"1286":2}}],["maxretrybackoffseconds",{"2":{"2188":1},"3":{"0":1,"1042":2,"1286":1,"2188":2}}],["maxretries",{"2":{"19":1,"409":1,"2032":1},"3":{"19":3,"24":1,"27":1,"397":2,"409":1,"819":1,"849":1,"1256":1,"1259":11,"1286":1,"1324":1,"1339":1,"1359":1,"2032":1}}],["maxrecentcount",{"3":{"1396":3}}],["maxrequestsperemail",{"2":{"1641":1},"3":{"1300":5,"1641":2,"1767":1}}],["maxrequestspertcpconnection",{"3":{"1286":1}}],["maxrequestbytes",{"2":{"1118":1,"1373":1},"3":{"1118":1,"1350":2,"1373":1,"1380":1}}],["maxregistrationsperipperhour",{"2":{"281":1,"1326":1,"1339":1,"1444":1},"3":{"1300":1,"1326":1,"1339":1,"1444":1,"1496":1}}],["maxreplicas",{"2":{"538":1,"664":1,"764":1,"765":1,"766":2,"767":1,"768":1,"995":1,"1154":1,"1156":1,"1469":1,"2168":1},"3":{"0":1,"390":2,"534":4,"538":1,"540":1,"664":1,"665":1,"764":1,"765":1,"766":2,"767":1,"768":1,"995":1,"1154":1,"1156":1,"1467":6,"1469":1,"1526":4,"1535":1,"2168":1}}],["maxtimeout",{"3":{"1427":3}}],["maxtagsperexpression",{"3":{"1323":2}}],["maxtcpconnectionsperendpoint",{"3":{"1286":1}}],["maxtenantidlength",{"3":{"1286":2}}],["maxkeylength",{"3":{"1286":1}}],["maxintervalseconds",{"3":{"1707":1}}],["maxinlinecodelines",{"3":{"1436":4,"1526":1}}],["maxinspectedentries",{"3":{"1286":1}}],["maximumlength",{"2":{"1828":1,"1833":1},"3":{"1271":16,"1300":6,"1309":3,"1324":4,"1359":38,"1402":4,"1436":3,"1828":1,"1829":1,"1833":1}}],["maximumlengthvalidator",{"3":{"1271":2,"1395":1}}],["maximum",{"3":{"71":1,"529":1,"819":1,"862":1,"1271":1,"1275":1,"1286":1,"1300":1,"1324":5,"1339":1,"1359":11,"1395":7,"1396":1,"1402":1,"1415":2,"1436":1,"1457":1,"1630":1,"1631":2,"1640":3,"1641":1,"1767":1,"1840":1,"1908":1,"2032":1}}],["maximal",{"3":{"216":1,"1324":1,"2152":1}}],["maxima",{"3":{"0":1,"861":2,"862":1,"1436":1,"1596":1}}],["maxeventnamelength",{"3":{"1309":1}}],["maxentitytypelength",{"3":{"1286":1}}],["maxerrorlength",{"3":{"1259":1,"1286":1,"1323":1}}],["maxexportrows",{"2":{"743":1,"1988":1,"1991":1},"3":{"0":1,"674":1,"741":1,"743":1,"1212":1,"1229":1,"1311":4,"1320":1,"1323":4,"1988":2,"1991":1}}],["maxfilemegabytes",{"3":{"1395":3}}],["maxfilebytes",{"3":{"1350":8,"1359":2,"1380":1,"1395":5}}],["maxfilters",{"3":{"1241":1,"1247":2,"1311":4}}],["maxframes",{"3":{"1323":3}}],["maxfailedattempts",{"2":{"286":1,"1292":1,"2001":1},"3":{"175":1,"281":1,"286":1,"1292":1,"1300":4,"2000":1,"2001":1}}],["maxdirectfiles",{"2":{"1004":1},"3":{"1004":2,"1431":1,"1436":3,"2043":1}}],["maxdecodeddimension",{"2":{"442":1},"3":{"0":1,"442":1,"1323":3,"2126":1}}],["maxdecodedpixels",{"2":{"442":1},"3":{"0":1,"442":1,"1323":3,"2126":1}}],["maxvalidationattempts",{"2":{"1641":1},"3":{"854":1,"1294":1,"1300":5,"1641":2,"1767":1}}],["maxvalue",{"2":{"335":1,"1419":1},"3":{"335":1,"827":1,"1124":1,"1242":1,"1247":2,"1286":1,"1309":4,"1311":1,"1323":3,"1324":4,"1339":3,"1350":2,"1396":3,"1415":4,"1419":1,"1427":1,"1436":5,"1465":1,"2000":1}}],["maxavatarbytes",{"3":{"1415":7}}],["maxavatarrequestbytes",{"2":{"1411":1},"3":{"1411":1,"1415":4}}],["maxactivities",{"3":{"1395":1}}],["maxactivecircuits",{"2":{"830":1,"831":1,"1128":1},"3":{"830":1,"831":1,"832":1,"1124":3,"1128":1,"1212":1,"1324":5,"1416":1,"2000":1}}],["maxactivesessionsperuser",{"2":{"909":1,"1290":1},"3":{"0":1,"905":2,"909":1,"1290":1,"1300":2,"1982":2}}],["maxassetspersession",{"2":{"1357":1,"1389":1},"3":{"1350":2,"1357":1,"1359":2,"1380":1,"1389":1,"1395":1}}],["maxage",{"3":{"1300":2,"1324":3}}],["maxattempts",{"3":{"444":1,"1042":1,"1286":2,"1323":1,"1436":1,"2188":1}}],["maxcalldepth",{"3":{"1436":4}}],["maxcacheentries",{"2":{"337":1},"3":{"330":1,"333":1,"337":1,"1242":1,"1247":2}}],["maxchannelkeylength",{"3":{"1309":1}}],["maxcodebehindlines",{"2":{"1531":1},"3":{"1436":4,"1526":1,"1531":1}}],["maxcodelength",{"3":{"1300":3}}],["maxconstructordependencies",{"3":{"1431":1,"1436":7}}],["maxconsecutivefailures",{"3":{"1395":1}}],["maxcontrollerconstructordependencies",{"2":{"1431":1},"3":{"1431":1,"1436":7}}],["maxconnectionsperuser",{"2":{"1307":1,"1309":1,"1945":1},"3":{"0":1,"228":1,"384":1,"1307":1,"1309":3,"1323":3,"1945":1}}],["maxcorrelationidlength",{"3":{"1286":2}}],["maxcount",{"3":{"1237":1}}],["max",{"2":{"766":1,"768":1,"1457":1,"1529":1},"3":{"214":1,"217":1,"572":1,"626":1,"690":1,"698":1,"766":1,"768":2,"905":1,"1237":4,"1244":1,"1247":4,"1271":5,"1286":2,"1298":1,"1300":1,"1303":2,"1309":2,"1311":1,"1324":7,"1339":2,"1344":1,"1350":11,"1353":2,"1359":32,"1369":8,"1395":3,"1396":3,"1402":1,"1405":1,"1415":5,"1436":3,"1456":1,"1457":1,"1467":2,"1488":1,"1526":1,"1577":1,"1583":1,"1630":1,"1631":4,"1640":1,"1641":2,"1683":1,"1713":1,"1727":2,"1748":3,"1764":14,"1767":22,"1829":2,"1832":1,"1833":1,"1911":1,"1934":1,"1986":1,"2055":1,"2149":2}}],["maxby",{"3":{"109":1,"1222":1,"1229":1}}],["maxnetworkretries",{"2":{"73":2},"3":{"73":2}}],["maxnavigationdepth",{"2":{"333":1,"1242":1},"3":{"0":1,"333":1,"1241":1,"1242":1,"1247":6}}],["maxunboundedresultlimit",{"2":{"330":2,"331":1,"332":1,"333":1,"335":1,"552":1,"740":1,"741":1,"745":1,"1243":1,"1244":1,"1815":1,"1988":2,"1990":1,"1991":1},"3":{"0":1,"330":3,"331":1,"332":1,"333":1,"335":1,"337":1,"552":1,"740":1,"741":1,"745":1,"1229":2,"1243":1,"1244":2,"1247":6,"1278":1,"1286":3,"1310":1,"1311":3,"1577":1,"1815":1,"1988":2,"1990":1,"1991":1}}],["mayor",{"3":{"1685":1,"1686":2}}],["maybenullwhen",{"3":{"1270":1}}],["maybe",{"3":{"1237":1,"1286":1,"1808":1,"1818":1,"1973":1,"2003":1}}],["may",{"0":{"1423":2},"1":{"1992":1,"1993":1,"1994":1,"1995":1,"1996":1,"1997":1},"3":{"0":7,"18":1,"24":1,"27":1,"38":1,"71":1,"76":1,"77":1,"80":1,"81":3,"122":1,"126":1,"185":1,"186":1,"187":1,"188":1,"219":1,"225":1,"235":2,"243":2,"255":1,"266":1,"267":1,"317":3,"318":1,"325":1,"335":1,"342":1,"353":1,"384":1,"390":1,"433":1,"441":1,"530":1,"536":1,"556":2,"563":1,"564":1,"568":1,"620":1,"626":1,"628":1,"658":4,"674":1,"683":1,"727":1,"782":1,"793":1,"819":1,"863":1,"881":1,"891":1,"896":1,"916":1,"924":1,"989":2,"1014":1,"1020":1,"1042":1,"1059":1,"1075":1,"1090":1,"1091":1,"1102":1,"1107":1,"1112":1,"1116":1,"1168":1,"1187":1,"1193":1,"1211":1,"1220":1,"1228":1,"1229":2,"1230":1,"1237":5,"1241":1,"1242":1,"1244":1,"1247":15,"1254":1,"1255":1,"1256":2,"1259":7,"1263":3,"1264":2,"1265":1,"1269":4,"1270":9,"1273":1,"1275":1,"1278":1,"1279":1,"1284":1,"1285":1,"1286":30,"1287":1,"1290":1,"1296":1,"1297":1,"1300":18,"1301":1,"1305":1,"1307":1,"1309":11,"1311":16,"1312":2,"1320":2,"1323":16,"1324":26,"1330":1,"1339":12,"1342":1,"1348":3,"1350":14,"1353":1,"1355":1,"1357":3,"1359":62,"1369":1,"1373":2,"1375":1,"1380":8,"1389":1,"1395":5,"1396":16,"1399":1,"1402":8,"1403":1,"1405":1,"1406":1,"1409":1,"1415":18,"1417":6,"1418":3,"1427":4,"1431":1,"1436":28,"1438":4,"1455":1,"1456":1,"1467":3,"1488":1,"1489":2,"1492":1,"1496":1,"1553":1,"1585":3,"1596":1,"1626":1,"1630":4,"1631":7,"1632":1,"1635":2,"1639":1,"1640":1,"1641":1,"1708":1,"1755":2,"1764":1,"1765":1,"1767":1,"1776":5,"1792":1,"1805":1,"1816":1,"1837":1,"1840":4,"1910":1,"1923":1,"1960":2,"1964":1,"1973":1,"1991":2,"1992":5,"1994":1,"1995":1,"1997":5,"2032":1,"2077":1,"2098":1,"2107":1,"2127":1,"2142":1,"2167":1,"2170":1,"2171":1,"2185":1,"2186":1,"2188":1,"2198":1,"2199":1,"2208":1,"2220":3,"2232":1,"2240":1}}],["mangled",{"3":{"1380":1}}],["mangling",{"3":{"743":1}}],["manipulation",{"3":{"1438":1}}],["manipulations",{"3":{"1350":1}}],["manipulate",{"3":{"1371":1}}],["manifestation",{"3":{"1326":1,"1339":1}}],["manifests",{"2":{"1461":1},"3":{"422":1,"1416":1,"1436":1,"1455":3,"1461":1,"1465":3}}],["manifest",{"0":{"1199":1},"1":{"1196":1,"1197":1,"1198":1,"1199":1},"3":{"418":2,"423":1,"426":1,"1191":2,"1192":1,"1196":1,"1200":1,"1201":1,"1300":1,"1309":2,"1324":4,"1369":3,"1416":7,"1417":7,"1431":1,"1434":1,"1436":6,"1445":1,"1455":2,"1464":2,"1465":1,"1476":1,"1479":1,"1481":1,"1496":2,"1498":1,"1500":1,"1501":1,"1502":2,"1517":1,"1599":1,"2046":1}}],["manufacturing",{"3":{"2136":1}}],["manufacture",{"3":{"1436":2,"2139":1}}],["manufacturer",{"3":{"1300":1,"1630":1,"1764":1}}],["manufactures",{"3":{"1229":1,"1268":1}}],["manufactured",{"3":{"295":1,"1271":1}}],["manualidrangeexhausted",{"3":{"1359":2,"1395":2}}],["manualidrangeend",{"3":{"1350":2,"1359":2,"1395":2}}],["manualidrangestart",{"2":{"1364":1},"3":{"1350":3,"1352":1,"1359":2,"1364":2,"1369":2,"1395":2}}],["manualinstructions",{"2":{"633":1},"3":{"633":1}}],["manualcheckinasync",{"3":{"1396":4}}],["manualcheckin",{"3":{"1203":2,"1207":4,"1271":1,"1396":6}}],["manualcheckinhandlertests",{"3":{"1199":1,"1207":3}}],["manualcheckinhandler",{"3":{"1199":2,"1203":1,"1207":2,"1271":2,"1350":2,"1396":13}}],["manualcheckinrequestvalidatortests",{"3":{"1199":1,"1207":2}}],["manualcheckinrequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1396":6}}],["manualcheckinrequest",{"3":{"1199":10,"1203":1,"1207":2,"1396":10}}],["manualclock",{"3":{"1199":4,"1207":2}}],["manuals",{"3":{"1117":1}}],["manually",{"3":{"435":1,"767":1,"1247":2,"1309":1,"1350":3,"1355":1,"1396":2,"1417":1,"1457":1,"1467":1,"1627":1,"1630":3,"1631":1,"1633":1,"1637":1,"1638":1,"1639":4,"1641":2,"1644":1,"1765":1,"1768":1}}],["manual",{"0":{"1353":1,"1644":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"1605":1,"1606":1,"1607":1,"1608":1,"1609":1,"1610":1,"1739":1,"1740":1,"1741":1,"1742":1,"1743":1,"1744":1},"3":{"0":2,"2":1,"4":1,"10":1,"13":1,"19":1,"20":1,"41":1,"293":1,"330":1,"331":1,"334":1,"435":1,"444":2,"512":1,"528":2,"530":1,"536":1,"549":1,"577":1,"620":1,"622":1,"626":1,"635":2,"659":1,"684":1,"685":2,"690":2,"757":1,"759":3,"765":1,"791":1,"793":1,"799":1,"889":1,"890":1,"966":1,"990":1,"1110":1,"1118":1,"1168":1,"1192":1,"1202":1,"1203":1,"1212":3,"1213":1,"1238":1,"1243":1,"1247":3,"1259":2,"1265":1,"1270":1,"1273":1,"1286":13,"1300":5,"1309":1,"1310":7,"1311":5,"1323":1,"1324":7,"1344":1,"1347":2,"1349":1,"1350":10,"1352":1,"1359":17,"1369":1,"1380":4,"1395":3,"1396":27,"1402":1,"1415":2,"1417":1,"1427":1,"1432":1,"1436":5,"1438":4,"1454":1,"1455":2,"1456":2,"1457":1,"1467":2,"1470":1,"1473":1,"1474":1,"1475":3,"1476":1,"1480":1,"1481":3,"1483":1,"1487":1,"1490":1,"1492":3,"1496":1,"1523":1,"1524":2,"1525":1,"1526":5,"1530":1,"1531":3,"1532":1,"1533":1,"1546":1,"1554":1,"1558":1,"1564":1,"1565":1,"1570":2,"1571":1,"1577":4,"1582":1,"1589":1,"1591":2,"1595":1,"1596":2,"1598":1,"1603":1,"1604":1,"1605":4,"1610":2,"1611":1,"1627":1,"1630":1,"1631":3,"1632":1,"1636":2,"1639":6,"1641":10,"1642":1,"1645":1,"1651":1,"1653":1,"1662":1,"1674":1,"1684":1,"1701":1,"1710":1,"1728":1,"1729":1,"1739":4,"1744":2,"1746":1,"1749":3,"1754":2,"1765":3,"1766":1,"1767":2,"1771":1,"1779":1,"1865":1,"1867":1,"1988":1,"1991":1,"2034":1,"2036":1,"2147":1,"2163":1,"2232":2}}],["managing",{"3":{"188":1,"1380":1,"1395":2,"1415":1,"1624":1,"1629":1,"1637":1}}],["managepollrows",{"3":{"1402":1}}],["managepolls",{"3":{"1402":4}}],["managepackageversionscentrally",{"2":{"1214":1},"3":{"1214":1}}],["manageable",{"3":{"1286":1,"1638":1}}],["managers",{"3":{"1380":1,"1395":1,"1577":1}}],["manager",{"1":{"807":1,"808":1,"809":1,"810":1,"811":1,"812":1,"813":1,"814":1,"815":1},"3":{"0":1,"807":1,"810":2,"812":1,"815":1,"1212":1,"1300":4,"1307":1,"1309":2,"1311":1,"1324":1,"1380":1,"1395":1,"1396":1,"1416":1,"1436":1,"1539":1,"1547":1,"1577":1,"1768":1,"1935":1,"2232":1}}],["manageroles",{"2":{"184":1,"1059":1,"2200":1,"2201":1},"3":{"0":1,"184":1,"186":1,"1059":2,"1300":14,"1311":2,"1324":5,"1415":4,"2200":1,"2201":1}}],["managed",{"0":{"1477":1},"1":{"437":1,"438":1,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1,"596":1,"597":1,"598":1,"599":1,"600":1,"601":1,"602":1,"603":1,"604":1,"605":1,"2124":1,"2125":1,"2126":1,"2127":1,"2128":1},"2":{"599":1,"1455":1,"1466":1,"1470":1,"1477":2,"1484":1},"3":{"0":7,"234":1,"245":1,"259":1,"341":2,"342":1,"343":1,"437":1,"440":1,"443":2,"591":1,"596":1,"598":1,"599":4,"601":1,"639":1,"640":1,"641":1,"664":1,"665":1,"666":1,"670":1,"681":1,"682":1,"683":1,"684":1,"860":1,"1022":1,"1035":1,"1038":1,"1114":1,"1115":1,"1150":1,"1192":1,"1212":4,"1213":1,"1237":1,"1286":4,"1302":1,"1323":2,"1332":1,"1335":1,"1339":7,"1350":3,"1380":1,"1395":1,"1396":1,"1415":3,"1416":7,"1417":7,"1436":1,"1438":1,"1441":1,"1442":2,"1443":1,"1445":1,"1446":1,"1455":6,"1459":1,"1463":1,"1466":3,"1467":12,"1470":2,"1471":2,"1472":3,"1474":1,"1476":1,"1477":19,"1478":1,"1482":1,"1483":2,"1484":2,"1496":2,"1524":2,"1526":5,"1534":2,"1535":1,"1548":1,"1554":1,"1575":1,"1577":2,"1588":1,"1589":1,"1591":8,"1596":2,"1597":1,"1600":1,"1629":3,"1630":2,"1631":2,"1632":1,"1635":1,"1636":1,"1637":1,"1638":4,"1668":1,"1670":2,"1748":1,"1765":1,"1779":2,"1861":2,"1868":1,"1872":1,"1876":1,"1877":4,"1904":1,"2047":1,"2123":1,"2124":1,"2126":1,"2128":2,"2133":1,"2142":1,"2146":1,"2210":2,"2213":1,"2219":1,"2221":1,"2232":2}}],["manages",{"3":{"0":1,"1074":1,"1286":1,"1307":1,"1309":1,"1324":1,"1373":1,"1396":1,"1402":2,"1472":1,"1637":1,"1750":1,"1765":1,"1773":1,"1871":1,"1936":1}}],["managementrouteauthorizationtests",{"2":{"1535":1},"3":{"1199":1,"1207":2,"1436":1,"1526":2,"1535":2}}],["management",{"0":{"1556":1,"1569":1},"1":{"596":1,"597":1,"598":1,"599":1,"600":1,"601":1,"602":1,"603":1,"604":1,"605":1},"3":{"0":2,"32":1,"39":1,"186":1,"225":1,"301":1,"324":1,"359":1,"361":1,"369":1,"379":1,"381":1,"596":1,"640":2,"641":1,"881":1,"938":1,"954":1,"1026":1,"1192":1,"1202":1,"1203":1,"1212":1,"1213":1,"1214":1,"1216":2,"1259":2,"1300":11,"1308":1,"1309":1,"1311":7,"1323":9,"1324":34,"1326":1,"1327":2,"1339":5,"1350":5,"1359":2,"1380":6,"1383":1,"1389":1,"1390":1,"1395":50,"1396":14,"1402":8,"1414":1,"1415":6,"1417":10,"1429":1,"1431":1,"1436":12,"1437":1,"1438":9,"1440":1,"1441":2,"1444":3,"1446":1,"1453":1,"1455":1,"1467":2,"1487":2,"1496":1,"1499":1,"1525":2,"1526":2,"1534":1,"1535":2,"1552":1,"1569":1,"1577":2,"1586":1,"1588":1,"1591":1,"1597":1,"1600":1,"1611":2,"1621":1,"1625":2,"1626":1,"1627":7,"1629":6,"1630":1,"1632":5,"1636":1,"1637":2,"1638":4,"1639":2,"1641":2,"1644":1,"1649":1,"1666":1,"1667":2,"1671":1,"1685":1,"1686":1,"1747":1,"1748":4,"1749":1,"1750":2,"1763":3,"1767":1,"1771":3,"1773":1,"1796":2,"1802":1,"1942":1,"1963":1,"1995":1,"2005":2,"2055":1,"2063":1,"2135":1,"2145":1,"2220":1,"2232":2}}],["manageusers",{"2":{"184":1,"1059":1,"2201":1},"3":{"0":1,"184":1,"186":1,"1059":1,"1300":6,"1311":1,"1415":3,"2201":1}}],["manage",{"2":{"186":1,"638":1,"642":1,"1304":1},"3":{"0":6,"152":1,"185":1,"186":6,"187":1,"209":1,"378":1,"384":2,"638":1,"640":3,"642":2,"690":1,"694":1,"1026":1,"1078":1,"1116":3,"1120":1,"1297":4,"1300":6,"1303":1,"1304":3,"1309":13,"1324":5,"1347":1,"1348":7,"1350":11,"1357":2,"1359":1,"1373":1,"1377":1,"1380":5,"1389":1,"1392":1,"1395":1,"1396":16,"1402":29,"1409":3,"1414":2,"1415":5,"1417":1,"1438":1,"1455":1,"1467":5,"1496":1,"1550":1,"1589":1,"1591":1,"1596":1,"1597":1,"1621":1,"1626":2,"1627":5,"1629":1,"1631":5,"1632":5,"1638":1,"1640":2,"1651":1,"1653":2,"1687":1,"1748":3,"1749":3,"1760":1,"1763":2,"1767":1,"1768":8,"1771":1,"1960":1,"1961":1,"1962":1,"1963":4,"1965":1,"1971":1,"2072":1}}],["many",{"3":{"71":1,"135":1,"175":2,"186":1,"227":1,"258":1,"282":1,"310":1,"317":1,"319":1,"329":1,"333":1,"361":1,"472":1,"598":1,"600":1,"697":1,"740":1,"760":1,"819":1,"827":1,"829":1,"853":1,"881":2,"946":1,"1110":1,"1124":1,"1126":1,"1150":1,"1153":1,"1200":1,"1229":1,"1237":2,"1247":5,"1259":2,"1270":1,"1271":1,"1276":1,"1279":1,"1286":9,"1300":10,"1301":4,"1304":1,"1305":1,"1309":4,"1310":12,"1311":5,"1312":2,"1323":5,"1324":13,"1339":5,"1350":29,"1354":1,"1359":17,"1380":3,"1387":1,"1395":14,"1396":25,"1402":5,"1406":1,"1410":1,"1415":4,"1417":3,"1427":1,"1428":1,"1431":2,"1436":7,"1438":2,"1456":1,"1459":1,"1465":1,"1473":1,"1476":1,"1496":2,"1499":1,"1500":1,"1541":1,"1551":1,"1555":1,"1565":1,"1571":1,"1577":3,"1630":23,"1638":3,"1640":2,"1641":1,"1749":1,"1780":1,"1790":1,"1808":1,"1815":1,"1847":1,"1853":1,"1894":1,"1901":1,"1902":1,"1982":1,"1984":1,"1994":1,"1997":1,"2000":1,"2001":2,"2024":1,"2032":1,"2037":1,"2051":1,"2135":1,"2145":1,"2167":1,"2226":1}}],["mandating",{"3":{"1436":1}}],["mandated",{"3":{"1474":1}}],["mandates",{"3":{"120":1,"988":1,"1237":1,"1323":1,"1380":2,"1840":1}}],["mandate",{"3":{"0":1,"68":1}}],["mandatory",{"3":{"0":1,"674":1,"707":1,"1058":1,"1060":2,"1270":3,"1286":1,"1293":1,"1300":2,"1311":3,"1323":1,"1324":1,"1350":1,"1359":9,"1380":1,"1395":1,"1396":4,"1402":3,"1415":1,"1436":5,"1455":1,"1461":1,"1491":1,"1526":1,"1600":1,"1635":1,"1654":1,"1748":1,"1749":4,"1765":5,"1802":1,"1876":1,"2195":1,"2203":1}}],["major≥9",{"3":{"1576":1,"1577":1}}],["majorversion3",{"2":{"1489":1,"1491":1},"3":{"1436":2,"1489":1,"1491":1}}],["majorversion8",{"2":{"1074":1,"1489":1},"3":{"1074":1,"1436":2,"1489":1}}],["majority",{"3":{"1229":1,"1286":1,"1380":1,"1415":1,"1443":1,"1896":1,"1898":1}}],["majors",{"3":{"145":1,"413":2,"1431":1}}],["major",{"2":{"1733":1},"3":{"0":4,"147":6,"149":1,"150":2,"152":2,"1036":1,"1074":1,"1075":2,"1212":1,"1213":1,"1323":1,"1431":2,"1436":3,"1454":1,"1489":1,"1526":1,"1537":1,"1552":1,"1569":1,"1576":1,"1577":2,"1586":1,"1733":2,"1735":2,"1763":1,"2042":1,"2220":1}}],["maui=",{"3":{"1416":1}}],["mauiuiapplicationdelegate",{"3":{"1416":1}}],["mauiuimodule",{"2":{"651":1},"3":{"649":2,"651":2,"1324":2}}],["mauiwinuiapplication",{"3":{"1416":5}}],["mauimediapickerservice",{"3":{"1199":1,"1203":1,"1207":2,"1417":12}}],["mauimapnavigationservice",{"3":{"1199":1,"1203":1,"1207":2,"1417":9}}],["mauilocalnotificationservice",{"3":{"1199":1,"1203":1,"1207":2,"1417":17}}],["mauilocalcachestore",{"3":{"1199":1,"1203":1,"1207":2,"1417":14}}],["mauigeolocationservice",{"2":{"2119":1},"3":{"1199":1,"1203":1,"1207":2,"1417":11,"2119":1}}],["mauigeocodingservice",{"3":{"1199":1,"1203":1,"1207":2,"1417":10}}],["mauitexttospeechservice",{"3":{"1199":1,"1203":1,"1207":2,"1417":13}}],["mauitokenstorageservice",{"2":{"507":1,"510":1,"513":1},"3":{"0":1,"507":5,"510":1,"513":8,"1199":1,"1203":1,"1207":2,"1324":3,"1416":4,"1417":10,"1496":1}}],["mauispeechtotextservice",{"3":{"1199":1,"1203":1,"1207":2,"1417":10}}],["mauishareservice",{"2":{"2119":1},"3":{"1199":1,"1203":1,"1207":2,"1417":8,"2119":2}}],["mauiscreenshotservice",{"3":{"1199":1,"1203":1,"1207":2,"1417":7}}],["mauisecuretokenstore",{"2":{"510":1,"511":1,"513":1},"3":{"507":5,"509":1,"510":1,"511":7,"512":1,"513":2,"1199":1,"1203":1,"1207":2,"1324":1,"1417":11}}],["mauihapticfeedbackservice",{"2":{"2119":1},"3":{"1199":1,"1203":1,"1207":2,"1417":9,"2119":1}}],["mauiformfactor",{"3":{"1199":1,"1203":1,"1207":2,"1417":17}}],["mauifirebasemessagingservice",{"2":{"434":1,"436":1},"3":{"434":2,"436":2}}],["mauidevicepreferences",{"3":{"1199":1,"1203":1,"1207":2,"1417":16}}],["mauicommunitytoolkit",{"3":{"1417":1}}],["mauicontext",{"3":{"1416":3}}],["mauiconnectivitystatusservice",{"3":{"1199":1,"1203":1,"1207":2,"1417":11}}],["mauiclipboardservice",{"2":{"2119":1},"3":{"1199":1,"1203":1,"1207":2,"1417":7,"2119":1}}],["mauiculturestore",{"3":{"265":1,"268":1,"415":1,"1199":3,"1203":1,"1207":2,"1311":2,"1417":14}}],["mauicultureinitializer",{"3":{"265":1,"1199":2,"1203":1,"1207":2,"1324":1,"1416":1,"1417":12}}],["mauicultureapplier",{"3":{"265":1,"415":1,"1199":2,"1203":1,"1207":2,"1311":2,"1324":3,"1417":13}}],["mauibiometricauthenticator",{"3":{"1199":1,"1203":1,"1207":2,"1417":9}}],["mauibatterystatusservice",{"3":{"1199":1,"1203":1,"1207":2,"1417":11}}],["mauibarcodescannerservice",{"2":{"680":1,"682":1},"3":{"680":1,"682":5,"684":1,"1199":2,"1203":1,"1207":2,"1417":30}}],["mauibacknavigationbridgetests",{"3":{"1199":1,"1207":2,"1438":1}}],["mauibacknavigationbridge",{"2":{"1417":1},"3":{"413":1,"1199":3,"1203":1,"1207":3,"1324":14,"1416":1,"1417":4}}],["mauiapp",{"3":{"1416":3}}],["mauiapplication",{"3":{"1416":2}}],["mauiappcompatactivity",{"3":{"1416":1}}],["mauiappbuilder",{"3":{"265":1,"682":1,"980":1,"1208":1,"1417":9}}],["mauiaccessibilityannouncer",{"3":{"1199":1,"1203":1,"1207":2,"1417":9}}],["mauipubliclinkbuilder",{"3":{"1199":1,"1203":1,"1207":2,"1324":4,"1417":8,"1496":1}}],["mauipushregistrationservice",{"2":{"434":1,"436":1},"3":{"434":2,"436":2,"1199":1,"1203":1,"1207":2,"1417":21,"1496":1}}],["mauiprogram",{"2":{"683":1},"3":{"412":1,"413":1,"507":2,"511":4,"513":2,"649":2,"683":1,"1199":4,"1203":1,"1207":2,"1212":2,"1324":11,"1395":2,"1415":1,"1416":77,"1417":20,"1496":2}}],["mauiexternallinkservice",{"3":{"1199":1,"1203":1,"1207":2,"1417":8}}],["mauiexternalauthbroker",{"2":{"415":1,"418":1,"1976":1,"2122":1},"3":{"0":1,"415":2,"418":2,"420":1,"423":1,"428":1,"1199":1,"1203":1,"1207":2,"1324":1,"1417":13,"1496":1,"1976":1,"2122":1}}],["mauierrorhandlinginitializer",{"2":{"413":1},"3":{"413":1,"1199":2,"1203":1,"1207":2,"1417":29}}],["maui",{"0":{"1459":1},"1":{"410":1,"411":1,"412":1,"413":1,"414":1,"415":1,"416":1,"1417":1},"2":{"130":1,"138":1,"141":1,"142":1,"436":1,"481":1,"482":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1,"509":1,"511":1,"528":1,"682":1,"686":1,"939":1,"942":1,"982":1,"984":1,"1416":2,"1417":4,"1454":1,"1503":1,"1504":1,"1585":1,"1599":1,"1660":1,"1675":1,"1732":1,"1781":1,"2100":1,"2120":2,"2123":1},"3":{"0":19,"59":1,"60":1,"130":2,"135":4,"138":1,"141":1,"142":1,"243":1,"265":4,"370":1,"373":2,"389":1,"410":1,"412":5,"413":15,"414":2,"415":6,"418":3,"419":2,"420":2,"422":1,"423":2,"426":1,"428":2,"429":1,"430":1,"432":1,"434":2,"436":2,"439":1,"481":2,"482":3,"483":1,"485":1,"486":4,"487":1,"488":1,"489":1,"490":3,"491":1,"492":1,"493":2,"494":1,"495":2,"505":1,"506":3,"507":11,"508":2,"509":10,"510":2,"511":12,"512":1,"513":6,"514":2,"528":4,"530":1,"531":2,"532":1,"555":1,"560":1,"649":1,"650":1,"653":1,"681":1,"682":5,"683":2,"684":2,"685":1,"686":1,"773":1,"854":1,"880":1,"939":2,"942":2,"980":8,"982":4,"983":2,"984":2,"1004":1,"1184":1,"1185":1,"1187":2,"1192":3,"1199":35,"1202":2,"1203":37,"1206":1,"1207":105,"1208":6,"1211":2,"1212":12,"1289":1,"1294":1,"1298":1,"1300":1,"1311":5,"1323":2,"1324":67,"1328":1,"1339":1,"1359":1,"1381":1,"1384":1,"1388":1,"1391":1,"1393":1,"1395":13,"1396":1,"1402":1,"1403":1,"1405":1,"1414":1,"1415":15,"1416":109,"1417":426,"1427":1,"1436":6,"1438":2,"1441":1,"1447":1,"1449":1,"1452":1,"1453":1,"1454":13,"1455":2,"1456":2,"1459":23,"1460":2,"1461":4,"1486":4,"1488":1,"1489":3,"1496":15,"1503":2,"1504":2,"1513":2,"1524":4,"1526":9,"1530":1,"1531":8,"1532":2,"1577":1,"1582":1,"1583":1,"1585":3,"1591":11,"1595":1,"1596":5,"1597":2,"1599":4,"1600":2,"1626":2,"1627":2,"1629":1,"1630":7,"1639":1,"1641":25,"1660":2,"1669":6,"1673":1,"1675":2,"1732":2,"1773":1,"1781":3,"1976":2,"2077":1,"2078":2,"2080":1,"2100":2,"2111":1,"2115":1,"2116":4,"2118":1,"2119":4,"2120":7,"2122":6,"2123":4,"2219":1,"2221":1,"2225":1,"2227":2,"2228":1,"2230":1,"2232":4}}],["made",{"3":{"0":7,"24":2,"26":1,"27":1,"110":1,"125":1,"135":1,"136":2,"149":1,"151":1,"157":1,"168":1,"170":1,"173":1,"201":1,"243":1,"255":1,"265":1,"303":1,"365":1,"372":1,"448":1,"454":1,"526":1,"537":1,"539":1,"550":1,"603":1,"609":1,"626":1,"706":1,"716":2,"724":1,"726":1,"734":1,"749":1,"799":1,"812":1,"819":1,"826":2,"827":3,"829":1,"832":1,"834":1,"837":2,"840":1,"860":1,"868":1,"896":1,"906":1,"923":1,"938":1,"954":1,"964":2,"965":2,"971":1,"1033":1,"1036":1,"1043":1,"1045":1,"1051":2,"1055":1,"1061":2,"1074":1,"1082":1,"1090":1,"1092":1,"1101":1,"1212":1,"1229":2,"1237":1,"1239":1,"1241":1,"1247":1,"1252":1,"1253":1,"1255":1,"1259":8,"1270":3,"1271":3,"1273":1,"1275":1,"1286":8,"1300":12,"1301":4,"1309":3,"1310":1,"1311":10,"1312":2,"1313":1,"1318":1,"1320":1,"1323":8,"1324":19,"1331":1,"1332":1,"1339":5,"1350":1,"1352":1,"1353":2,"1359":18,"1369":2,"1380":2,"1388":1,"1395":11,"1396":7,"1402":3,"1415":6,"1417":1,"1422":1,"1426":1,"1427":2,"1428":1,"1432":1,"1436":14,"1443":1,"1447":1,"1455":6,"1457":1,"1461":1,"1467":2,"1473":1,"1478":1,"1489":2,"1496":3,"1631":1,"1641":2,"1686":1,"1700":1,"1727":2,"1735":1,"1822":1,"1823":1,"1825":1,"1835":1,"1854":1,"1863":1,"1908":1,"1927":1,"1941":1,"1963":1,"2029":1,"2045":1,"2048":1,"2158":1,"2174":1,"2176":1,"2179":1,"2198":1,"2232":1}}],["mapget",{"3":{"1324":1}}],["mapgrpcservice",{"2":{"103":1,"179":1},"3":{"103":1,"179":1,"1311":2,"1312":1,"1380":4,"1415":1,"2000":1}}],["maphub",{"3":{"1311":1}}],["maphealthchecks",{"3":{"235":1,"1332":1,"1339":4}}],["mapformat",{"3":{"1311":5}}],["mapforwarder",{"2":{"57":1,"59":1,"836":1,"837":1,"840":1,"1509":1},"3":{"0":2,"57":1,"59":1,"836":1,"837":2,"838":1,"840":1,"1212":1,"1436":1,"1447":1,"1509":1,"2024":1}}],["maptype",{"3":{"1311":5}}],["maptoapiversion",{"3":{"448":2,"1311":4,"1380":1,"2131":2}}],["maptodtogenerated",{"3":{"1350":1,"1359":3}}],["maptodto",{"2":{"5":1,"6":1,"1953":1,"1956":1},"3":{"5":4,"6":1,"1270":1,"1309":3,"1311":3,"1350":3,"1359":51,"1396":5,"1402":5,"1415":3,"1953":2,"1956":1}}],["maptodtos",{"2":{"5":1,"7":1,"331":1,"1953":1},"3":{"5":2,"7":1,"331":1,"1244":1,"1309":2,"1311":2,"1359":20,"1396":3,"1402":1,"1415":1,"1953":1}}],["mapopenapi",{"2":{"2132":1},"3":{"454":1,"1311":2,"1591":1,"2132":1}}],["mapoidcdiscoveryendpoint",{"2":{"31":1,"751":1,"1667":1},"3":{"31":1,"751":1,"1311":1,"1667":1}}],["mapcontrollers",{"3":{"1311":1}}],["mapcommonscalarui",{"2":{"1929":1},"3":{"1311":2,"1496":1,"1577":2,"1929":1}}],["mapcommonsameoriginapiproxy",{"2":{"1184":1},"3":{"0":1,"1184":1,"1212":1,"1324":5}}],["mapcommonopenapiauthorizationtests",{"3":{"1199":1,"1207":2,"1311":2,"1438":1}}],["mapcommonopenapi",{"2":{"446":1,"453":1,"454":2,"1929":1,"2132":1},"3":{"446":1,"448":1,"450":1,"453":1,"454":3,"1311":4,"1438":1,"1577":3,"1929":2,"2132":1}}],["mapchild",{"3":{"1265":1,"1270":3,"1359":9}}],["mapclientconfigendpoint",{"2":{"674":1},"3":{"674":1,"1324":8,"1526":1}}],["mapcultureendpoint",{"2":{"415":1},"3":{"265":1,"415":1,"1311":4,"1324":1,"1591":1,"1653":1,"1666":1}}],["mapcachedhealthchecks",{"2":{"233":1,"235":1,"238":1,"1332":1,"2007":1},"3":{"233":1,"235":1,"238":1,"1332":1,"1339":7,"2007":1}}],["mapnotificationhub",{"3":{"225":2,"1307":1,"1309":1,"1311":2,"1666":1}}],["mapasync",{"3":{"109":1,"1220":1,"1229":2,"1805":1}}],["mapappassociationendpoints",{"2":{"418":1,"423":1,"424":1,"425":1,"426":1,"428":1,"1481":1,"1666":1},"3":{"0":1,"418":1,"423":1,"424":1,"425":1,"426":1,"428":1,"429":1,"1311":1,"1481":1,"1666":1}}],["mapjwksendpoint",{"3":{"31":1,"827":1,"1311":1,"1667":1}}],["mapdefaultendpoints",{"0":{"2007":1},"2":{"235":1,"464":1,"913":1,"1331":1,"1332":1,"1677":1,"1720":1,"1727":1,"2007":1,"2014":1},"3":{"0":1,"235":1,"464":1,"913":1,"1212":1,"1331":1,"1332":1,"1338":1,"1339":10,"1442":1,"1443":2,"1447":1,"1653":1,"1670":1,"1677":1,"1720":1,"1727":1,"2007":1,"2014":1}}],["mapregistry",{"3":{"1199":2,"1207":1}}],["mapreverseproxy",{"2":{"59":1,"836":1,"838":1,"841":1,"1509":1},"3":{"0":1,"59":1,"827":1,"836":1,"838":1,"841":1,"1338":1,"1339":1,"1436":1,"1447":1,"1509":1}}],["maprazorcomponents",{"2":{"647":1,"1434":1},"3":{"0":1,"556":1,"647":1,"649":1,"1311":1,"1324":1,"1416":1,"1434":1,"1436":2}}],["mapssearchurl",{"3":{"1417":1}}],["mapspeakersessions",{"3":{"1359":1}}],["mapscalarapireference",{"3":{"1311":1}}],["mapsearchurl",{"3":{"1395":2}}],["mapsessionizequestiontype",{"3":{"1359":2}}],["mapsessioncookieendpoints",{"2":{"1667":1},"3":{"1300":2,"1667":1}}],["mapsentity",{"3":{"1286":1}}],["mapstaticassets",{"3":{"1436":1}}],["mapstatustostring",{"3":{"1270":1,"1309":3}}],["mapstoaprovisionedalert",{"2":{"609":1},"3":{"609":2,"1436":2}}],["mapster",{"3":{"3":1,"4":1}}],["maps",{"0":{"1831":1},"1":{"1502":1,"1503":1,"1504":1,"1505":1,"1506":1,"1507":1,"1508":1,"1509":1,"1510":1,"1511":1,"1512":1,"1513":1,"1514":1,"1515":1,"1516":1,"1517":1},"3":{"0":7,"5":1,"53":1,"60":1,"78":1,"95":1,"107":1,"109":7,"170":2,"186":3,"225":1,"235":2,"265":1,"282":1,"318":2,"324":1,"330":1,"341":1,"365":1,"405":1,"449":1,"454":2,"548":1,"585":1,"626":1,"655":1,"657":5,"660":2,"674":1,"707":1,"710":1,"713":1,"733":1,"751":1,"827":1,"838":1,"845":1,"854":1,"869":1,"905":2,"921":1,"1020":1,"1033":1,"1034":1,"1050":3,"1059":1,"1061":1,"1161":1,"1180":1,"1184":1,"1191":1,"1194":1,"1212":1,"1217":1,"1219":1,"1229":3,"1237":5,"1245":1,"1247":6,"1263":2,"1265":2,"1269":1,"1270":5,"1271":3,"1273":2,"1277":1,"1279":1,"1280":1,"1281":1,"1283":3,"1284":1,"1286":42,"1296":1,"1297":2,"1300":13,"1306":1,"1307":2,"1309":9,"1311":24,"1312":7,"1316":1,"1323":6,"1324":25,"1331":1,"1332":1,"1335":1,"1339":13,"1350":9,"1352":1,"1354":4,"1359":36,"1362":2,"1369":4,"1372":1,"1374":2,"1380":13,"1390":1,"1391":5,"1395":24,"1396":29,"1400":1,"1402":8,"1405":1,"1406":1,"1408":1,"1412":1,"1413":1,"1415":13,"1416":2,"1417":26,"1427":1,"1435":1,"1436":35,"1438":2,"1441":1,"1442":1,"1443":1,"1444":1,"1446":1,"1466":1,"1467":1,"1489":1,"1496":14,"1502":1,"1509":1,"1582":1,"1589":1,"1591":2,"1596":1,"1600":1,"1620":1,"1631":1,"1632":1,"1636":2,"1651":1,"1658":1,"1662":1,"1663":2,"1665":1,"1666":1,"1667":1,"1670":1,"1677":1,"1681":1,"1685":1,"1700":1,"1702":3,"1729":1,"1749":1,"1753":1,"1756":1,"1770":1,"1790":2,"1805":1,"1807":1,"1821":1,"1834":1,"1849":1,"1861":1,"1871":1,"1889":2,"1930":1,"1933":1,"1946":2,"1951":1,"1952":1,"1953":2,"1954":2,"1959":2,"1961":2,"1962":1,"1963":2,"1965":1,"1988":1,"1995":1,"2042":1,"2072":1,"2087":1,"2115":1,"2150":2,"2167":1,"2199":1,"2203":1,"2232":1,"2234":1}}],["map",{"0":{"1409":1,"1517":1,"1654":1,"1660":1},"2":{"80":1,"82":1,"973":1,"1224":1,"1951":1},"3":{"0":7,"26":1,"41":1,"54":1,"57":2,"59":1,"80":3,"81":1,"82":2,"109":1,"111":1,"135":4,"166":2,"184":3,"186":3,"305":1,"333":2,"341":1,"350":1,"359":1,"380":3,"413":1,"546":1,"549":1,"583":1,"585":1,"599":1,"631":2,"632":1,"633":1,"635":1,"659":1,"698":2,"749":1,"751":1,"826":1,"827":1,"833":1,"836":3,"838":1,"840":2,"842":3,"846":2,"905":1,"926":1,"964":1,"972":3,"973":1,"1004":2,"1011":2,"1054":1,"1058":1,"1059":1,"1133":2,"1161":6,"1162":1,"1168":1,"1188":1,"1190":1,"1196":1,"1212":2,"1220":1,"1224":1,"1225":1,"1229":5,"1236":1,"1237":3,"1239":1,"1241":3,"1242":7,"1243":1,"1247":17,"1265":3,"1269":1,"1270":11,"1279":1,"1282":1,"1286":15,"1291":1,"1297":1,"1300":13,"1301":1,"1304":3,"1309":4,"1311":10,"1312":4,"1320":1,"1321":1,"1323":13,"1324":8,"1339":3,"1341":1,"1348":4,"1350":4,"1351":1,"1352":1,"1354":1,"1357":1,"1359":50,"1362":1,"1364":1,"1369":22,"1377":1,"1378":1,"1380":8,"1385":3,"1387":2,"1391":1,"1395":25,"1396":42,"1400":2,"1402":2,"1404":1,"1406":1,"1409":7,"1414":1,"1415":12,"1416":1,"1417":7,"1428":2,"1431":5,"1436":516,"1438":4,"1445":1,"1455":5,"1467":2,"1469":1,"1487":1,"1489":11,"1492":1,"1493":1,"1496":6,"1509":1,"1515":2,"1525":1,"1526":6,"1531":1,"1535":1,"1571":1,"1572":1,"1577":4,"1582":1,"1585":1,"1586":1,"1600":1,"1621":1,"1626":3,"1627":1,"1629":1,"1630":1,"1636":1,"1649":1,"1650":1,"1654":5,"1660":1,"1661":2,"1662":2,"1669":1,"1671":1,"1673":2,"1675":1,"1700":1,"1701":2,"1702":2,"1728":3,"1729":1,"1730":1,"1735":2,"1760":1,"1765":1,"1782":1,"1790":1,"1805":1,"1807":1,"1815":2,"1817":1,"1834":1,"1840":1,"1849":1,"1876":1,"1883":1,"1891":1,"1894":1,"1929":2,"1930":1,"1935":1,"1944":1,"1946":1,"1951":2,"1952":3,"1953":1,"1956":4,"1958":2,"1959":2,"1962":2,"1964":1,"1965":1,"1990":1,"1991":2,"2018":1,"2023":1,"2042":2,"2043":1,"2049":1,"2097":3,"2098":1,"2101":1,"2103":1,"2104":4,"2111":1,"2120":1,"2129":1,"2142":1,"2178":1,"2197":2,"2199":1,"2204":2,"2236":1}}],["mapproperty",{"2":{"1957":1},"3":{"1309":2,"1359":4,"1957":1}}],["mappedadminport",{"3":{"1436":1}}],["mappedentityqueryservice",{"3":{"1199":2,"1207":1}}],["mappedorder",{"3":{"1199":4,"1207":1}}],["mappedorderid",{"3":{"1199":5,"1207":1}}],["mappeddto",{"3":{"1199":2,"1207":1}}],["mapped",{"3":{"0":5,"4":1,"15":1,"31":1,"59":1,"96":1,"110":1,"111":1,"225":1,"303":1,"335":2,"341":1,"343":1,"345":1,"415":2,"448":3,"453":1,"454":1,"545":2,"549":1,"583":1,"585":2,"640":1,"657":4,"682":1,"698":1,"702":1,"703":1,"749":1,"751":1,"929":1,"932":1,"935":2,"1011":1,"1042":1,"1046":1,"1089":1,"1094":1,"1132":1,"1133":2,"1140":1,"1150":1,"1212":1,"1218":1,"1234":1,"1237":1,"1247":4,"1253":1,"1269":1,"1270":4,"1271":2,"1273":3,"1277":1,"1278":1,"1283":1,"1286":18,"1288":2,"1297":1,"1300":12,"1304":1,"1307":2,"1309":10,"1311":12,"1312":2,"1316":1,"1318":1,"1320":1,"1323":9,"1324":5,"1332":1,"1339":7,"1350":19,"1359":18,"1362":1,"1363":1,"1369":4,"1380":3,"1395":3,"1396":16,"1402":5,"1405":1,"1415":11,"1417":2,"1436":12,"1447":1,"1455":2,"1467":1,"1477":2,"1486":1,"1489":3,"1496":5,"1577":2,"1600":1,"1632":1,"1685":1,"1720":1,"1804":1,"1815":1,"1842":1,"1889":1,"2000":1,"2025":1,"2131":2,"2138":1}}],["mapperignoretarget",{"3":{"1359":2}}],["mapper",{"0":{"1954":1,"1956":1},"2":{"1957":1,"1958":1},"3":{"3":1,"5":2,"6":2,"7":2,"333":1,"423":1,"424":1,"549":2,"657":1,"798":1,"806":1,"1026":1,"1050":1,"1201":1,"1212":1,"1213":1,"1220":1,"1229":1,"1241":1,"1243":1,"1244":2,"1247":3,"1260":1,"1265":2,"1269":2,"1270":14,"1283":1,"1300":5,"1309":18,"1311":13,"1324":3,"1350":11,"1352":1,"1353":4,"1354":2,"1359":163,"1369":1,"1375":1,"1380":3,"1396":13,"1401":1,"1402":8,"1415":8,"1436":2,"1438":2,"1481":1,"1487":1,"1526":1,"1532":1,"1546":1,"1651":1,"1653":1,"1727":1,"1805":1,"1810":1,"1831":1,"1849":1,"1951":4,"1952":1,"1953":3,"1954":6,"1955":7,"1956":2,"1957":3,"1958":7,"1959":4,"2230":1}}],["mappers",{"3":{"0":1,"3":4,"5":2,"6":1,"7":1,"117":1,"473":1,"548":1,"1262":2,"1269":2,"1270":4,"1311":4,"1316":2,"1323":2,"1350":1,"1351":1,"1353":2,"1359":23,"1396":6,"1404":1,"1415":3,"1437":2,"1438":3,"1496":1,"1526":1,"1650":1,"1651":1,"1661":1,"1662":3,"1686":1,"1701":1,"1775":1,"1857":1,"1883":3,"1951":1,"1953":1,"1956":3,"1957":2,"2052":1,"2095":1,"2232":1}}],["mapperly",{"0":{"1955":1},"3":{"0":3,"3":1,"5":2,"548":1,"549":1,"1050":4,"1051":1,"1212":1,"1213":2,"1270":3,"1300":2,"1306":1,"1309":11,"1347":1,"1350":7,"1353":1,"1357":1,"1359":48,"1396":11,"1401":1,"1402":6,"1404":1,"1415":7,"1438":1,"1650":1,"1651":1,"1662":1,"1810":1,"1955":4,"1956":1,"1957":1,"1958":1,"1959":2}}],["mappings",{"3":{"104":1,"658":1,"1309":1,"1362":1,"1395":1,"1774":1}}],["mapping",{"0":{"1281":1,"1353":1,"1927":1,"1952":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"1311":1,"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1956":1,"1957":1,"1958":1,"1959":1},"2":{"1247":1,"1270":1},"3":{"0":7,"2":1,"3":1,"4":2,"6":5,"7":1,"26":1,"53":1,"92":1,"104":1,"109":1,"111":1,"151":1,"166":1,"185":1,"186":1,"188":1,"238":1,"265":1,"331":1,"334":1,"360":1,"369":1,"370":2,"371":1,"372":1,"420":1,"454":1,"470":1,"545":1,"549":2,"559":1,"572":1,"583":1,"657":1,"658":2,"659":1,"690":1,"707":1,"734":1,"741":1,"742":1,"749":1,"782":1,"790":1,"791":2,"799":2,"806":1,"833":1,"838":1,"846":1,"872":1,"874":1,"905":2,"906":2,"910":1,"922":1,"925":1,"964":1,"1011":1,"1018":1,"1026":1,"1034":3,"1042":1,"1049":2,"1050":2,"1051":4,"1052":1,"1069":1,"1175":3,"1192":3,"1202":4,"1203":10,"1207":26,"1212":1,"1213":3,"1224":1,"1225":2,"1229":3,"1237":2,"1238":1,"1244":2,"1245":1,"1247":10,"1265":1,"1269":2,"1270":12,"1271":4,"1273":2,"1280":1,"1281":1,"1282":4,"1283":2,"1286":56,"1290":1,"1300":22,"1304":1,"1307":1,"1309":10,"1310":1,"1311":45,"1312":6,"1317":1,"1323":3,"1324":12,"1332":2,"1339":3,"1347":1,"1350":4,"1353":3,"1359":64,"1360":1,"1365":1,"1366":1,"1369":17,"1370":1,"1375":1,"1378":1,"1380":19,"1395":15,"1396":44,"1401":1,"1402":11,"1404":1,"1409":1,"1411":1,"1414":1,"1415":16,"1416":3,"1417":3,"1436":14,"1437":2,"1438":3,"1441":1,"1443":1,"1450":1,"1453":1,"1455":1,"1461":1,"1487":1,"1488":2,"1489":1,"1496":3,"1498":1,"1526":1,"1546":1,"1571":1,"1577":1,"1585":1,"1600":1,"1651":1,"1662":2,"1666":1,"1673":1,"1686":1,"1779":1,"1805":2,"1807":1,"1810":3,"1825":1,"1831":1,"1854":1,"1856":3,"1862":1,"1923":1,"1924":2,"1925":1,"1927":1,"1929":1,"1930":2,"1935":1,"1950":1,"1951":4,"1952":3,"1953":2,"1954":2,"1955":4,"1956":2,"1957":1,"1958":2,"1959":9,"1960":1,"1962":2,"1964":1,"1965":1,"1988":1,"1991":1,"2018":1,"2025":1,"2055":1,"2060":1,"2146":1,"2166":1,"2167":1,"2192":1,"2208":2,"2232":1}}],["md5",{"3":{"1905":1}}],["md",{"0":{"1474":1,"1476":1,"1477":1,"1478":1,"1481":1},"2":{"137":1,"138":1,"140":1,"146":1,"147":1,"164":1,"375":1,"607":1,"609":1,"636":2,"971":1,"972":1,"974":1,"975":1,"1003":2,"1004":1,"1058":1,"1190":1,"1451":1,"1457":1,"1458":1,"1465":1,"1467":1,"1476":1,"1483":1,"1515":1,"1522":2,"1529":1,"1571":1,"1573":2,"1574":1,"1575":2,"1577":1,"1587":2,"1589":1,"1594":1,"1595":1,"1605":1,"1658":2,"1673":2,"1674":5,"1675":1,"1697":1,"1756":1,"2045":1,"2049":2,"2060":1,"2112":1,"2195":1},"3":{"0":12,"1":5,"27":1,"68":1,"130":4,"135":6,"136":3,"137":8,"138":4,"139":4,"140":5,"141":2,"142":4,"146":1,"147":5,"152":1,"164":1,"313":1,"317":1,"321":1,"324":1,"326":2,"358":2,"361":1,"362":2,"365":1,"366":2,"369":4,"371":1,"375":2,"376":3,"398":1,"406":1,"422":1,"423":1,"424":1,"425":1,"426":2,"435":1,"443":1,"469":1,"483":1,"490":1,"491":1,"492":1,"493":1,"495":1,"497":1,"502":1,"526":2,"527":1,"528":2,"531":1,"532":1,"550":1,"555":6,"556":1,"557":1,"558":2,"563":2,"564":7,"571":2,"577":1,"579":1,"582":1,"590":2,"591":3,"593":1,"594":3,"598":2,"599":1,"601":2,"605":1,"607":5,"608":1,"609":16,"611":6,"612":1,"614":1,"617":1,"618":1,"620":1,"621":1,"622":1,"626":5,"632":2,"633":5,"634":2,"636":4,"657":1,"660":1,"748":3,"756":4,"761":1,"765":1,"766":2,"773":2,"825":1,"827":1,"832":1,"857":1,"860":1,"861":1,"864":2,"892":1,"893":1,"896":5,"897":1,"899":1,"904":1,"914":2,"917":1,"937":1,"946":1,"950":1,"953":2,"954":1,"955":1,"959":1,"960":1,"971":4,"972":5,"974":1,"975":2,"987":2,"990":1,"991":1,"1003":5,"1004":8,"1006":2,"1007":5,"1011":1,"1012":3,"1017":1,"1018":5,"1058":2,"1062":1,"1069":1,"1089":1,"1090":2,"1091":1,"1092":1,"1093":3,"1094":2,"1095":5,"1116":1,"1119":1,"1124":2,"1127":1,"1128":1,"1132":2,"1136":1,"1137":1,"1160":2,"1164":1,"1171":1,"1180":1,"1182":1,"1186":3,"1188":1,"1189":1,"1190":2,"1191":4,"1192":11,"1193":2,"1200":3,"1201":1,"1202":28,"1203":28,"1211":2,"1212":5,"1214":1,"1216":5,"1237":4,"1270":3,"1286":8,"1300":17,"1301":7,"1304":2,"1308":1,"1309":4,"1311":1,"1323":1,"1324":22,"1339":3,"1347":1,"1350":4,"1355":1,"1359":22,"1380":20,"1395":11,"1396":11,"1402":2,"1403":1,"1405":1,"1410":2,"1411":1,"1415":6,"1416":2,"1417":4,"1427":1,"1428":2,"1430":2,"1431":4,"1436":48,"1438":1,"1440":1,"1451":2,"1453":7,"1454":3,"1455":1,"1457":2,"1458":1,"1459":3,"1462":1,"1465":1,"1466":4,"1467":22,"1470":6,"1471":4,"1472":1,"1473":1,"1474":37,"1475":1,"1476":32,"1477":12,"1478":5,"1479":1,"1480":2,"1481":17,"1482":9,"1483":10,"1484":4,"1485":2,"1486":3,"1487":2,"1488":1,"1489":6,"1492":6,"1494":4,"1496":48,"1497":2,"1498":1,"1501":3,"1502":5,"1503":1,"1515":1,"1517":5,"1521":1,"1522":4,"1524":3,"1525":4,"1526":50,"1527":1,"1528":1,"1529":1,"1531":5,"1532":1,"1533":1,"1534":3,"1535":5,"1571":1,"1573":3,"1574":1,"1575":4,"1576":3,"1577":72,"1578":1,"1579":1,"1582":11,"1583":1,"1585":6,"1586":13,"1587":4,"1589":6,"1590":1,"1591":32,"1593":1,"1594":3,"1595":1,"1596":9,"1597":3,"1598":3,"1599":1,"1600":4,"1605":1,"1617":1,"1631":1,"1646":1,"1648":1,"1649":2,"1654":1,"1658":3,"1673":2,"1674":5,"1675":2,"1692":1,"1697":1,"1706":1,"1709":1,"1732":1,"1734":1,"1735":1,"1756":1,"1765":1,"1838":1,"1895":1,"1994":1,"2000":3,"2001":3,"2033":1,"2034":1,"2041":1,"2042":1,"2043":1,"2045":1,"2046":2,"2049":2,"2060":1,"2112":2,"2117":1,"2118":1,"2120":1,"2126":1,"2151":1,"2155":1,"2158":1,"2162":1,"2171":2,"2172":2,"2178":1,"2179":3,"2182":2,"2195":3,"2239":2}}],["cmd",{"2":{"1606":1,"1740":1},"3":{"1606":1,"1740":1}}],["cms",{"3":{"1395":1}}],["ck",{"2":{"1591":1},"3":{"1591":1}}],["c4adff2",{"2":{"1761":1},"3":{"1591":1,"1761":1}}],["c4",{"3":{"1571":1}}],["cwv",{"3":{"1526":1,"1531":1,"1600":3}}],["c64b9fe2",{"3":{"1496":1}}],["c6369020",{"3":{"1472":1}}],["c911480",{"3":{"1496":2}}],["cyan",{"3":{"1480":3}}],["cyclic",{"3":{"1259":1,"1286":1}}],["cyclomatic",{"3":{"1237":1,"1247":1,"1312":1,"1359":1}}],["cyclonedx",{"2":{"373":1},"3":{"0":1,"370":4,"371":1,"372":1,"373":1,"374":1,"375":2,"870":1,"1445":1,"1454":4,"1455":1,"1526":1,"1576":1,"1577":5,"1673":1,"1738":1}}],["cyclefixtures",{"2":{"1436":1},"3":{"1207":8,"1436":15}}],["cycletestmap",{"3":{"1198":1,"1199":2,"1207":1,"1436":5,"1496":1}}],["cycles",{"0":{"1198":1},"2":{"135":1},"3":{"0":1,"19":1,"130":1,"135":3,"136":1,"139":1,"627":1,"1011":1,"1191":1,"1192":1,"1196":1,"1201":3,"1207":1,"1259":1,"1270":1,"1275":2,"1286":1,"1300":1,"1323":1,"1324":1,"1339":1,"1431":1,"1436":12,"1438":1,"1489":1,"1496":24,"1498":5,"1517":2,"1638":1,"1639":1,"1665":1,"1804":1,"1867":1,"1885":1,"1886":1}}],["cycle",{"0":{"139":1},"3":{"0":3,"17":1,"19":1,"22":1,"24":5,"26":2,"27":3,"99":1,"125":1,"130":1,"135":5,"139":1,"140":1,"534":1,"536":6,"539":2,"556":1,"583":2,"707":5,"846":1,"861":1,"876":1,"1012":1,"1014":1,"1017":1,"1036":2,"1085":1,"1089":2,"1090":1,"1201":2,"1212":1,"1229":1,"1237":8,"1247":4,"1251":1,"1253":2,"1254":4,"1255":2,"1256":1,"1259":27,"1269":1,"1270":2,"1275":6,"1286":17,"1309":1,"1315":1,"1317":4,"1323":27,"1324":5,"1328":2,"1330":1,"1339":6,"1350":2,"1359":2,"1369":1,"1395":3,"1409":1,"1415":1,"1416":2,"1417":1,"1431":1,"1436":35,"1438":2,"1441":2,"1443":1,"1448":1,"1449":1,"1450":1,"1453":1,"1456":1,"1467":2,"1486":1,"1490":1,"1491":1,"1496":9,"1498":2,"1517":2,"1571":1,"1664":1,"1706":1,"1881":1,"1885":1,"1886":1,"1889":1,"1948":1,"2010":1,"2156":1,"2157":1,"2165":1,"2167":8,"2188":3,"2193":1}}],["cn=user",{"3":{"1416":1}}],["c50d86f",{"3":{"1496":1}}],["c5",{"3":{"1355":1,"1359":1,"1641":1}}],["cbc",{"3":{"1286":1}}],["c2y6ydjf5",{"3":{"1286":1}}],["cjk",{"3":{"1271":1,"1289":1,"1300":1,"1324":1,"1436":4,"1438":1}}],["cpm",{"3":{"1214":1,"1591":2}}],["cpu",{"2":{"875":1},"3":{"31":1,"234":1,"361":1,"593":1,"869":1,"871":1,"875":5,"1300":1,"1334":1,"1339":4,"1443":2,"1467":9,"1534":1,"2000":1,"2007":1,"2011":1,"2145":1}}],["cdc",{"3":{"1526":1,"1545":1}}],["cd0026df",{"2":{"1204":1},"3":{"1204":1,"1496":1}}],["cd",{"1":{"1452":1,"1453":1,"1454":1,"1455":1,"1456":1,"1457":1,"1458":1,"1459":1,"1460":1,"1461":1},"3":{"1192":1,"1452":1,"1453":1,"1455":1,"1462":2,"1463":1,"1465":1,"1471":1,"1474":1,"1475":1,"1476":1,"1482":1,"1486":1,"1526":2,"1545":1,"1554":1,"1575":1,"1577":2,"1582":1,"1584":1,"1586":2,"1670":1,"1674":1,"2109":1,"2213":1,"2218":1,"2219":1,"2220":2}}],["cdn",{"3":{"441":1,"1116":1,"1311":2,"1415":1,"1467":1,"1481":1,"1666":1,"1973":1,"2075":1,"2127":1,"2150":4}}],["cf69cb8e",{"3":{"1496":3}}],["cfg",{"2":{"819":1},"3":{"640":2,"819":1,"1323":7}}],["cfbundleurltypes",{"2":{"420":1},"3":{"420":1}}],["ctrl",{"2":{"1606":1,"1740":1},"3":{"1606":1,"1740":1}}],["cts",{"3":{"1324":30,"1395":16,"1396":14,"1402":5,"1415":3,"1417":4,"1526":2,"1577":4}}],["ctor",{"3":{"1286":2,"1311":1,"1324":2,"1436":7,"1526":2,"1591":1}}],["ctorprobequeryhandler",{"3":{"1199":2,"1207":1}}],["ctorprobequery",{"3":{"1199":3,"1207":1}}],["ctorprobecommandhandler",{"3":{"1199":2,"1207":1}}],["ctorprobecommand",{"3":{"1199":3,"1207":1}}],["cte",{"3":{"1132":1}}],["ct",{"3":{"109":2,"434":1,"690":1,"819":1,"1212":1,"1259":3,"1270":3,"1286":6,"1300":6,"1323":9,"1324":28,"1359":2,"1380":4,"1395":60,"1396":23,"1436":9,"1919":1,"1944":1,"2032":1}}],["c→a",{"3":{"78":1,"1591":1,"1594":1,"1596":4,"1597":2,"1599":1}}],["c+",{"3":{"0":1,"1183":2,"1187":2}}],["c",{"0":{"1214":1},"1":{"977":1,"978":1,"979":1,"980":1,"981":1,"982":1,"983":1,"984":1,"1803":1,"1804":1,"1805":1,"1806":1,"1807":1},"3":{"0":3,"53":1,"142":1,"145":1,"147":1,"265":1,"274":1,"418":1,"543":1,"549":1,"692":1,"839":1,"840":1,"963":1,"964":2,"977":1,"979":2,"980":1,"1004":1,"1010":1,"1011":1,"1013":1,"1019":1,"1066":1,"1183":1,"1193":1,"1196":1,"1212":2,"1214":3,"1216":1,"1229":3,"1236":1,"1237":5,"1247":2,"1259":1,"1262":1,"1270":2,"1271":8,"1286":6,"1300":9,"1309":3,"1311":7,"1312":7,"1316":1,"1323":6,"1324":25,"1326":1,"1339":6,"1342":1,"1344":1,"1349":1,"1350":6,"1354":1,"1359":12,"1378":1,"1379":1,"1380":7,"1395":8,"1396":31,"1401":2,"1402":5,"1413":1,"1415":10,"1416":3,"1417":9,"1425":1,"1427":5,"1430":1,"1433":1,"1436":18,"1441":1,"1455":1,"1479":1,"1488":2,"1491":1,"1492":1,"1496":2,"1497":1,"1526":2,"1536":1,"1565":1,"1577":1,"1582":1,"1585":4,"1586":7,"1632":1,"1639":1,"1641":1,"1648":2,"1651":1,"1661":1,"1692":1,"1693":1,"1712":3,"1726":1,"1727":1,"1728":1,"1761":1,"1765":1,"1779":1,"1787":1,"1790":1,"1793":1,"1796":1,"1803":1,"1807":1,"1812":1,"1817":1,"1827":1,"1830":3,"1831":1,"1834":1,"1846":1,"1853":1,"1862":1,"1868":1,"1877":1,"1886":1,"1892":1,"1899":1,"1905":1,"1912":1,"1924":1,"1927":1,"1930":1,"1941":1,"1950":1,"1953":1,"1955":1,"1959":1,"1965":1,"1972":1,"1979":1,"1985":1,"1991":1,"1997":1,"2002":1,"2004":1,"2014":1,"2016":1,"2017":2,"2018":1,"2028":1,"2049":1,"2060":1,"2069":1,"2075":2,"2080":1,"2086":1,"2088":1,"2098":1,"2108":1,"2123":1,"2128":1,"2133":1,"2139":1,"2146":1,"2153":1,"2160":1,"2169":1,"2177":1,"2180":1,"2193":1,"2203":1,"2206":1,"2211":1,"2219":1,"2220":2,"2232":1}}],["cve",{"3":{"0":1,"370":1,"1445":1}}],["cs0103",{"2":{"1648":1},"3":{"1648":1}}],["cs0618",{"3":{"1417":1,"1436":1}}],["cs1591",{"3":{"1577":2,"1586":3,"1591":1}}],["cs8509",{"3":{"1436":1}}],["cs9113",{"3":{"1436":3}}],["cs9107",{"3":{"1259":1,"1286":3}}],["cswinrt1028",{"3":{"1417":1}}],["cswinrt1030",{"3":{"1417":2}}],["cswinrt",{"3":{"1417":2}}],["css3",{"3":{"2220":1}}],["css",{"2":{"2075":1,"2079":1},"3":{"954":1,"1300":1,"1324":13,"1395":1,"1432":1,"1436":17,"1438":1,"1489":2,"1524":2,"1526":12,"1531":2,"1532":1,"1534":2,"1535":1,"1557":1,"1565":1,"1577":11,"1582":6,"1583":2,"1586":1,"1591":7,"1595":1,"1596":2,"1597":2,"1600":4,"1712":3,"1714":1,"2073":1,"2075":9,"2079":1,"2150":2}}],["csrfheadervalue",{"3":{"1324":2}}],["csrfheadername",{"3":{"1324":1}}],["csrf",{"0":{"1969":1},"3":{"0":2,"207":1,"209":2,"1184":7,"1185":3,"1186":1,"1187":2,"1300":2,"1324":25,"1417":1,"1438":2,"1534":1,"1582":1,"1971":1,"1972":2}}],["cs",{"2":{"43":2,"63":1,"93":1,"95":1,"112":1,"115":3,"142":1,"145":4,"152":3,"171":2,"181":2,"203":1,"220":2,"254":1,"256":1,"258":1,"259":4,"337":5,"345":3,"354":2,"364":1,"378":1,"395":1,"409":1,"418":1,"424":1,"425":1,"428":2,"452":1,"453":1,"464":1,"465":1,"466":1,"514":2,"543":4,"545":1,"547":1,"552":7,"558":1,"559":1,"572":1,"597":1,"604":1,"618":1,"621":1,"638":1,"644":2,"649":1,"651":1,"652":1,"693":5,"720":2,"728":2,"736":1,"744":1,"747":3,"750":1,"752":1,"822":3,"832":2,"833":3,"841":1,"846":1,"849":1,"850":1,"883":1,"892":5,"916":1,"917":2,"929":1,"949":4,"960":1,"967":1,"975":2,"991":1,"999":1,"1029":4,"1050":3,"1062":1,"1074":6,"1078":2,"1128":3,"1133":1,"1135":1,"1214":1,"1262":2,"1300":1,"1311":2,"1329":2,"1444":2,"1445":1,"1453":2,"1497":2,"1532":1,"1535":4,"1577":1,"1582":2,"1586":1,"1591":2,"1596":1,"1597":1,"1619":1,"1684":1,"1685":1,"1686":1,"1689":1,"1767":8,"1829":1,"1878":1,"1885":1,"1895":2,"1902":1,"2011":1,"2030":1,"2148":1,"2159":8,"2188":1,"2190":1},"3":{"0":6,"15":2,"17":2,"19":5,"22":2,"23":1,"24":24,"25":5,"26":13,"27":23,"31":5,"34":1,"39":13,"42":2,"43":4,"53":1,"59":5,"60":1,"61":1,"62":1,"63":4,"68":4,"70":2,"71":4,"72":7,"73":4,"74":8,"79":1,"80":10,"81":6,"82":2,"93":6,"94":2,"95":15,"96":6,"98":5,"99":1,"100":2,"103":3,"104":2,"109":38,"110":3,"111":7,"112":4,"115":3,"117":12,"121":15,"122":15,"123":4,"125":7,"126":16,"127":2,"128":9,"135":9,"136":3,"138":1,"139":10,"142":6,"145":7,"147":3,"150":25,"152":4,"157":11,"159":2,"160":9,"161":12,"164":1,"166":14,"168":1,"170":5,"171":10,"175":2,"178":9,"179":7,"180":5,"181":4,"186":35,"188":1,"189":5,"190":6,"193":2,"195":9,"196":2,"198":3,"200":8,"201":9,"202":11,"203":6,"216":4,"217":3,"218":4,"219":7,"220":10,"225":11,"228":4,"230":12,"231":4,"235":25,"237":5,"238":3,"243":37,"245":15,"246":8,"250":6,"251":12,"252":15,"254":19,"255":7,"256":17,"257":16,"258":16,"259":15,"260":11,"261":19,"265":12,"268":7,"272":1,"281":1,"283":2,"284":2,"285":3,"290":1,"295":12,"296":1,"300":4,"301":1,"303":4,"305":8,"306":5,"310":30,"312":5,"314":8,"318":67,"319":4,"320":2,"323":7,"324":8,"325":8,"326":13,"328":1,"330":37,"331":8,"332":7,"333":5,"334":2,"336":3,"337":12,"341":23,"342":1,"343":5,"344":6,"345":9,"350":21,"352":7,"353":7,"354":2,"359":62,"360":8,"361":9,"364":1,"365":3,"378":1,"384":8,"387":2,"388":4,"390":10,"391":8,"392":4,"393":5,"395":2,"397":66,"399":6,"400":5,"401":15,"402":16,"403":1,"404":7,"407":12,"408":7,"409":6,"412":1,"413":12,"415":4,"416":1,"418":11,"419":1,"420":2,"422":2,"423":6,"424":3,"425":4,"426":6,"427":2,"428":9,"429":2,"430":2,"434":7,"435":3,"436":8,"442":1,"443":5,"444":9,"448":45,"450":3,"452":1,"453":7,"454":3,"455":1,"459":35,"461":5,"463":15,"464":17,"465":14,"466":8,"469":4,"470":17,"472":1,"474":1,"475":10,"476":14,"477":14,"478":2,"482":2,"486":6,"487":6,"488":5,"489":6,"490":6,"491":7,"492":8,"493":8,"494":6,"495":5,"497":12,"498":1,"499":45,"500":1,"501":5,"502":4,"507":63,"508":1,"509":1,"511":13,"512":1,"513":15,"514":8,"522":8,"523":8,"524":2,"535":1,"536":73,"537":1,"538":15,"539":14,"540":13,"543":11,"544":2,"545":44,"546":4,"547":6,"549":25,"550":9,"551":3,"552":21,"556":47,"558":4,"559":6,"564":8,"572":81,"574":2,"575":4,"577":10,"578":9,"583":60,"584":12,"585":28,"586":6,"587":1,"591":14,"592":3,"597":1,"599":4,"601":2,"603":3,"604":1,"609":7,"618":35,"620":3,"621":4,"622":1,"633":4,"635":1,"636":3,"638":1,"640":24,"642":5,"644":5,"649":28,"651":5,"652":4,"656":1,"657":72,"658":4,"659":6,"660":10,"665":8,"668":4,"669":3,"674":82,"675":3,"676":14,"677":11,"682":10,"684":2,"685":2,"690":40,"691":4,"692":3,"693":9,"697":1,"698":26,"700":4,"702":9,"703":7,"706":1,"707":15,"710":8,"715":7,"718":1,"719":1,"720":11,"724":8,"725":21,"727":3,"728":6,"732":1,"733":16,"736":12,"740":7,"741":31,"743":14,"744":6,"747":3,"749":48,"750":1,"751":12,"752":2,"774":28,"776":7,"777":6,"782":51,"783":1,"784":4,"789":5,"790":20,"791":4,"792":10,"793":6,"794":4,"798":12,"799":5,"801":3,"803":5,"804":3,"805":2,"806":4,"809":6,"813":6,"814":8,"818":1,"819":21,"821":3,"822":7,"826":5,"827":47,"829":6,"830":9,"831":15,"832":21,"833":15,"837":6,"838":10,"839":2,"841":4,"846":5,"847":1,"849":4,"850":4,"854":5,"857":4,"861":11,"862":4,"863":4,"864":3,"880":1,"881":60,"883":8,"884":4,"888":3,"889":20,"890":5,"891":8,"892":10,"897":34,"899":3,"900":8,"904":1,"905":55,"906":18,"907":15,"908":5,"909":11,"910":2,"913":5,"914":15,"915":2,"916":3,"917":2,"921":3,"922":11,"923":5,"924":4,"926":29,"927":8,"929":1,"930":1,"931":9,"934":3,"946":19,"948":5,"949":5,"954":21,"955":2,"956":1,"959":1,"960":7,"963":6,"964":12,"965":3,"966":7,"967":5,"971":2,"972":6,"973":1,"974":5,"975":4,"979":8,"980":71,"981":1,"982":10,"983":7,"987":6,"988":36,"990":3,"991":4,"995":4,"996":18,"997":2,"998":9,"999":4,"1003":1,"1004":20,"1005":2,"1006":4,"1007":3,"1017":2,"1018":38,"1020":3,"1021":9,"1025":5,"1026":29,"1028":2,"1029":9,"1034":19,"1037":5,"1041":4,"1042":20,"1043":1,"1044":4,"1045":6,"1049":5,"1050":25,"1052":3,"1054":2,"1055":9,"1058":4,"1059":56,"1061":1,"1062":3,"1066":4,"1067":20,"1069":5,"1070":3,"1074":22,"1075":1,"1078":3,"1082":11,"1083":7,"1085":2,"1086":9,"1090":3,"1091":64,"1092":5,"1093":13,"1094":5,"1095":7,"1099":2,"1100":17,"1102":2,"1103":5,"1108":15,"1111":6,"1116":37,"1117":2,"1119":4,"1123":8,"1124":37,"1125":7,"1126":6,"1127":2,"1128":6,"1129":2,"1132":1,"1133":17,"1135":3,"1136":3,"1140":11,"1142":1,"1146":2,"1150":13,"1156":3,"1160":2,"1161":8,"1162":4,"1163":4,"1168":32,"1169":1,"1170":3,"1174":1,"1175":39,"1176":6,"1177":7,"1178":3,"1179":2,"1183":4,"1184":36,"1185":6,"1186":7,"1187":1,"1188":1,"1190":1,"1191":6,"1204":1,"1207":5402,"1208":118,"1209":139,"1212":6,"1214":2,"1219":13,"1220":24,"1221":11,"1222":9,"1223":15,"1224":6,"1225":11,"1226":7,"1227":13,"1228":21,"1229":244,"1231":31,"1232":18,"1233":18,"1234":43,"1235":14,"1236":27,"1237":528,"1239":59,"1240":36,"1241":96,"1242":48,"1243":54,"1244":56,"1245":6,"1246":16,"1247":330,"1249":15,"1250":5,"1251":6,"1252":13,"1253":16,"1254":17,"1255":10,"1256":37,"1257":17,"1258":19,"1259":576,"1261":4,"1262":41,"1263":84,"1264":34,"1265":60,"1266":17,"1267":28,"1268":18,"1269":48,"1270":588,"1271":181,"1273":20,"1274":4,"1275":20,"1276":11,"1277":8,"1278":29,"1279":14,"1280":33,"1281":16,"1282":29,"1283":9,"1284":11,"1285":9,"1286":2431,"1288":35,"1289":49,"1290":61,"1291":19,"1292":21,"1293":52,"1294":47,"1295":30,"1296":18,"1297":100,"1298":38,"1299":9,"1300":1398,"1301":413,"1302":8,"1303":11,"1304":19,"1305":8,"1306":11,"1307":26,"1308":11,"1309":440,"1310":118,"1311":973,"1312":127,"1314":12,"1315":35,"1316":51,"1317":39,"1318":45,"1319":6,"1320":64,"1321":3,"1322":41,"1323":863,"1324":1359,"1325":7,"1326":14,"1327":12,"1328":6,"1329":5,"1330":5,"1331":5,"1332":34,"1333":20,"1334":14,"1335":6,"1336":7,"1337":6,"1338":13,"1339":404,"1341":3,"1342":78,"1343":42,"1344":46,"1345":8,"1346":6,"1347":47,"1348":19,"1349":25,"1350":995,"1352":49,"1353":38,"1354":15,"1355":17,"1356":12,"1357":14,"1358":11,"1359":3331,"1361":3,"1362":46,"1363":5,"1364":14,"1365":8,"1366":16,"1367":6,"1368":7,"1369":111,"1371":27,"1372":40,"1373":45,"1374":16,"1375":38,"1376":4,"1377":15,"1378":19,"1379":9,"1380":378,"1382":25,"1383":27,"1384":24,"1385":16,"1386":6,"1387":13,"1388":12,"1389":14,"1390":11,"1391":22,"1392":21,"1393":10,"1394":6,"1395":998,"1396":1539,"1397":5,"1398":26,"1399":44,"1400":13,"1401":22,"1402":504,"1403":1,"1404":22,"1405":13,"1406":32,"1407":6,"1408":8,"1409":11,"1410":13,"1411":7,"1412":7,"1413":12,"1414":13,"1415":821,"1416":211,"1417":1129,"1419":7,"1420":7,"1421":4,"1422":11,"1423":7,"1424":6,"1425":9,"1426":3,"1427":285,"1429":28,"1430":23,"1431":90,"1432":43,"1433":50,"1434":18,"1435":37,"1436":2192,"1437":40,"1438":400,"1440":2,"1441":95,"1442":40,"1443":111,"1444":39,"1445":1,"1446":2,"1447":39,"1448":4,"1449":25,"1450":8,"1451":3,"1453":2,"1455":4,"1467":18,"1476":11,"1481":1,"1487":1,"1488":69,"1489":36,"1490":6,"1491":3,"1492":27,"1496":341,"1497":4,"1498":2,"1524":6,"1525":8,"1526":227,"1531":20,"1532":16,"1534":10,"1535":55,"1575":3,"1576":11,"1577":247,"1582":29,"1583":10,"1584":1,"1585":7,"1586":66,"1589":5,"1590":5,"1591":148,"1596":22,"1597":9,"1599":6,"1600":57,"1605":1,"1611":3,"1619":6,"1627":2,"1651":2,"1653":5,"1654":1,"1656":2,"1684":2,"1685":25,"1686":35,"1689":1,"1697":1,"1707":5,"1708":1,"1712":1,"1727":1,"1728":2,"1739":1,"1749":1,"1757":1,"1760":2,"1761":2,"1764":19,"1765":30,"1767":83,"1770":2,"1815":1,"1829":2,"1878":1,"1885":1,"1895":2,"1896":1,"1902":1,"1939":1,"1953":1,"1982":22,"1983":3,"1984":3,"1994":41,"1995":36,"2000":38,"2001":12,"2006":1,"2008":1,"2011":1,"2030":1,"2032":2,"2044":7,"2046":2,"2064":3,"2066":8,"2083":12,"2085":8,"2097":2,"2117":9,"2118":8,"2119":4,"2121":3,"2122":3,"2126":19,"2127":6,"2131":23,"2132":3,"2136":15,"2137":3,"2138":11,"2143":1,"2148":1,"2149":7,"2150":3,"2151":7,"2152":3,"2156":33,"2157":13,"2159":14,"2161":1,"2163":9,"2164":6,"2165":5,"2166":5,"2167":15,"2168":5,"2172":2,"2173":2,"2174":5,"2175":9,"2176":1,"2177":3,"2178":1,"2179":8,"2184":3,"2185":2,"2186":4,"2187":2,"2188":2,"2189":3,"2190":4,"2191":2,"2192":1,"2196":1,"2197":4,"2198":3,"2199":6,"2201":2,"2202":10}}],["csvcontenttype",{"3":{"1311":1}}],["csvwritertests",{"3":{"1199":1,"1207":2,"1438":1}}],["csvwriter",{"2":{"741":1},"3":{"741":5,"743":1,"1199":3,"1203":1,"1207":2,"1311":25,"1438":1,"1496":1}}],["csvs",{"3":{"725":2}}],["csvhelper",{"3":{"0":1,"741":1,"1311":1}}],["csv",{"1":{"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1},"3":{"0":3,"318":3,"321":1,"324":1,"330":1,"696":1,"738":1,"740":5,"741":9,"742":2,"743":4,"744":1,"745":1,"1212":1,"1229":1,"1311":22,"1323":1,"1359":3,"1371":1,"1372":2,"1380":15,"1438":2,"1487":1,"1496":1,"1498":1,"1526":2,"1575":1,"1577":1,"1582":1,"1586":1,"1660":1,"1666":4,"1720":1,"1988":3,"1991":1,"1995":2,"1997":1,"2232":1}}],["cspoptions",{"3":{"1324":2}}],["cspnonce",{"2":{"2149":1},"3":{"214":1,"1199":3,"1203":1,"1207":1,"1336":1,"1339":6,"1443":1,"1526":1,"1577":2,"1670":1,"2149":2}}],["csppolicy",{"2":{"2011":1},"3":{"214":1,"1199":7,"1203":1,"1207":1,"1324":3,"1336":1,"1339":11,"2011":1,"2149":1}}],["csproj",{"2":{"152":1,"872":1,"1215":1,"1728":1,"2041":1},"3":{"0":1,"135":1,"147":1,"152":2,"265":1,"370":1,"375":1,"422":1,"426":1,"429":1,"430":1,"486":4,"487":1,"489":1,"490":1,"491":1,"492":1,"493":1,"526":1,"528":1,"572":2,"576":1,"591":2,"593":1,"609":2,"613":1,"665":1,"669":1,"826":2,"827":1,"861":1,"872":1,"876":4,"913":4,"914":1,"917":1,"939":1,"954":11,"956":4,"958":2,"960":2,"971":1,"972":1,"979":1,"1059":1,"1067":3,"1090":1,"1091":6,"1094":2,"1212":1,"1214":1,"1215":1,"1247":1,"1323":2,"1324":3,"1325":2,"1339":5,"1341":5,"1344":1,"1350":1,"1359":4,"1380":1,"1395":2,"1396":3,"1415":2,"1416":5,"1417":1,"1434":1,"1435":1,"1436":36,"1437":1,"1438":2,"1441":8,"1445":4,"1454":2,"1476":1,"1481":9,"1486":2,"1488":2,"1489":3,"1492":1,"1494":1,"1524":1,"1526":6,"1531":1,"1535":1,"1577":1,"1586":1,"1591":2,"1600":1,"1649":2,"1685":1,"1686":1,"1727":1,"1728":5,"2041":1,"2046":1,"2179":2}}],["csprng",{"3":{"0":1,"1212":1,"1300":5}}],["csp",{"0":{"2149":1},"1":{"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"2147":1,"2148":1,"2149":1,"2150":1,"2151":1,"2152":1,"2153":1},"3":{"0":4,"211":1,"213":1,"214":2,"215":1,"216":2,"672":1,"676":1,"1108":1,"1109":1,"1111":1,"1112":1,"1183":1,"1189":1,"1212":2,"1324":11,"1336":4,"1339":25,"1391":1,"1395":3,"1437":1,"1441":1,"1450":1,"1496":3,"1525":1,"1526":4,"1535":1,"1577":3,"1585":1,"1586":1,"1590":1,"1591":2,"1660":2,"1670":1,"1779":2,"2011":3,"2012":1,"2146":1,"2147":4,"2148":2,"2149":3,"2150":2,"2152":2,"2153":6,"2160":1,"2208":1,"2232":2}}],["csharp",{"2":{"136":1,"1214":2,"2044":1},"3":{"0":1,"136":2,"1213":1,"1214":2,"1436":3,"2044":2}}],["celebrated",{"3":{"2035":1}}],["celebration",{"3":{"1396":1}}],["cellclass=",{"3":{"1395":1,"1591":1}}],["celltemplate",{"3":{"1395":1}}],["cellstyle=",{"3":{"1526":1,"1534":1,"1591":1,"1600":1}}],["cells",{"3":{"1311":2,"1402":5,"1436":2}}],["cell",{"3":{"743":2,"1311":4,"1395":3,"1396":1,"1402":1,"1436":2,"1488":2,"1496":2,"1500":1,"1526":1,"1534":1,"1591":2,"1988":1}}],["cede",{"3":{"1079":1}}],["ceding",{"3":{"1078":1}}],["census",{"3":{"474":1,"475":1,"476":1,"797":4,"803":1,"804":1,"805":1,"806":1,"1048":1,"1049":1,"1051":1,"1054":1,"2232":3}}],["cents",{"3":{"1765":1,"1770":1}}],["centric",{"3":{"1359":1,"1436":1,"1540":1,"1577":1}}],["centre",{"3":{"1286":1,"1679":1}}],["centralising",{"3":{"1339":2}}],["centralised",{"3":{"1270":1,"1301":1,"1323":1,"1339":2}}],["centralizing",{"3":{"132":1,"215":1,"750":1,"1229":1,"1237":2,"1247":1,"1270":2,"1286":5,"1300":2,"1309":1,"1311":2,"1323":1,"1344":1,"1350":1,"1359":2,"1380":1,"1395":1,"1396":1,"1402":3,"1405":1,"1415":1,"1417":1,"1436":3,"2023":1,"2152":1}}],["centralize",{"3":{"1336":1,"1862":1,"2153":1}}],["centralizes",{"3":{"60":1,"1286":1,"1339":1,"1396":1,"1417":1,"1431":1,"1436":2,"2023":1,"2147":1}}],["centralized",{"1":{"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1},"3":{"0":2,"211":1,"283":1,"1117":1,"1237":2,"1270":1,"1286":1,"1292":1,"1300":2,"1301":1,"1309":1,"1311":3,"1323":1,"1324":5,"1339":2,"1350":1,"1359":3,"1380":1,"1394":1,"1395":2,"1396":4,"1402":1,"1415":1,"1433":1,"1526":2,"1548":1,"1557":1,"1575":1,"1576":1,"1577":4,"1591":1,"1805":1,"2153":1,"2195":1}}],["centralus",{"2":{"972":1},"3":{"972":1,"1436":3}}],["centrally",{"3":{"31":1,"665":1,"847":1,"1212":1,"1231":2,"1237":2,"1270":1,"1274":1,"1286":2,"1323":1,"1324":3,"1348":1,"1350":2,"1359":1,"1369":1,"1395":1,"1402":1,"1526":1,"1545":1,"1577":2,"1706":1,"1707":2,"1738":1,"1750":1,"1773":1,"1810":1,"2230":1}}],["central",{"3":{"0":2,"186":1,"201":1,"301":1,"465":1,"669":1,"715":1,"800":1,"938":1,"954":2,"956":1,"958":2,"959":2,"960":1,"972":1,"1213":1,"1214":1,"1229":1,"1247":1,"1260":1,"1286":1,"1300":1,"1311":1,"1323":3,"1324":2,"1339":1,"1350":1,"1359":1,"1369":1,"1395":2,"1402":1,"1415":1,"1416":2,"1430":1,"1436":7,"1449":1,"1460":1,"1465":1,"1467":2,"1489":1,"1490":1,"1526":1,"1535":1,"1552":1,"1569":2,"1577":1,"1591":1,"1649":1,"1663":1,"1685":1,"1686":1,"1706":1,"1707":1,"1852":1,"2043":2}}],["centers",{"3":{"2220":1}}],["centered",{"3":{"1480":1,"1669":1}}],["centerpiece",{"3":{"1324":1,"1396":1,"2072":1}}],["center",{"3":{"440":1,"1286":2,"1324":1,"1395":1,"1429":1,"1436":1,"1526":1,"1534":1,"1577":1,"1789":1,"2126":1,"2128":1}}],["ceil",{"2":{"435":1},"3":{"435":1}}],["ceilings",{"3":{"0":3,"591":3,"592":1,"593":2,"595":1,"859":1,"861":1,"862":1,"1125":2,"1126":1,"1212":1,"1323":1,"1359":2,"1416":2,"1431":1,"1436":19,"1438":1,"1492":1,"1534":1,"1535":1,"1577":3,"1588":1,"1591":1,"1597":1,"1599":2,"1668":1,"1673":1,"2047":1,"2048":1,"2232":1}}],["ceiling",{"3":{"0":15,"22":1,"48":1,"150":1,"177":1,"178":1,"233":1,"235":2,"237":3,"330":2,"337":1,"438":1,"442":1,"549":1,"575":1,"591":3,"593":1,"607":3,"609":6,"651":1,"733":3,"736":1,"741":4,"742":1,"743":1,"745":1,"760":1,"764":4,"765":1,"766":1,"768":1,"769":1,"792":1,"827":2,"829":1,"831":2,"832":4,"833":1,"860":1,"861":4,"862":2,"863":1,"997":1,"1016":3,"1018":5,"1019":2,"1020":1,"1042":2,"1067":1,"1074":2,"1075":1,"1076":1,"1090":2,"1092":2,"1094":2,"1095":1,"1096":1,"1099":1,"1100":1,"1122":1,"1124":5,"1125":1,"1126":2,"1128":1,"1129":1,"1186":1,"1212":2,"1228":1,"1229":4,"1238":1,"1243":3,"1244":1,"1247":15,"1270":1,"1271":4,"1275":1,"1286":5,"1289":2,"1297":1,"1300":6,"1301":6,"1306":1,"1309":4,"1310":1,"1311":9,"1312":1,"1323":6,"1324":30,"1334":1,"1339":12,"1350":3,"1359":15,"1366":2,"1368":1,"1369":2,"1371":1,"1380":7,"1395":4,"1396":11,"1415":7,"1416":6,"1417":1,"1418":2,"1420":1,"1422":1,"1427":4,"1436":68,"1438":1,"1447":1,"1455":1,"1463":1,"1465":5,"1467":12,"1469":1,"1470":1,"1489":5,"1492":3,"1496":4,"1526":6,"1534":3,"1577":6,"1582":2,"1583":1,"1584":1,"1586":1,"1591":2,"1597":1,"1599":1,"1664":1,"1666":2,"1668":1,"1670":1,"1671":1,"1707":4,"1708":2,"1817":1,"1923":1,"1929":1,"1987":1,"1988":2,"1991":2,"2000":6,"2001":2,"2002":2,"2027":1,"2047":1,"2048":1,"2126":2,"2145":1,"2154":1,"2172":1,"2174":1,"2180":3,"2182":1,"2188":2,"2190":1,"2232":1}}],["cero",{"3":{"1685":1,"1686":2}}],["ceremony",{"3":{"110":1,"111":1,"683":1,"938":1,"1109":1,"1220":1,"1237":1,"1259":1,"1286":1,"1309":1,"1323":2,"1324":1,"1340":1,"1342":1,"1350":2,"1359":4,"1392":1,"1395":1,"1396":7,"1415":5,"1417":3,"1436":1,"1637":1,"1806":1,"1808":1,"1811":1}}],["certification",{"3":{"2224":1}}],["certifications",{"0":{"2224":1},"3":{"2224":1}}],["certificates",{"3":{"1187":1,"1467":1}}],["certificate",{"3":{"0":1,"418":2,"420":1,"423":1,"424":1,"698":1,"1066":2,"1067":3,"1068":2,"1069":1,"1286":3,"1311":3,"1328":2,"1339":3,"1416":2,"1430":2,"1449":2,"1453":2,"1456":5,"1460":1,"1481":1,"1487":1,"1488":2,"1490":4,"1492":1}}],["certs",{"3":{"1067":1,"1069":1,"1430":1,"1456":1}}],["cert",{"2":{"418":1,"423":1,"424":1,"1481":1},"3":{"418":1,"423":1,"424":1,"1416":3,"1481":1}}],["certainly",{"3":{"1436":2,"1888":1}}],["certainty",{"3":{"1424":1,"1427":1}}],["certain",{"3":{"10":1,"1286":1,"1359":2,"1453":1,"1490":1,"2059":1}}],["cecil",{"3":{"0":1,"27":1,"39":1,"109":1,"1161":1,"1162":1,"1436":18}}],["cqrscontractinspectortests",{"3":{"1199":1,"1207":12,"1266":1,"1270":8,"1438":2}}],["cqrscontractinspector",{"2":{"1266":1,"1662":1},"3":{"1199":2,"1203":1,"1207":4,"1260":1,"1266":12,"1270":18,"1496":1,"1662":1}}],["cqrscontractmismatch",{"2":{"1266":1},"3":{"1199":3,"1203":1,"1207":1,"1260":1,"1266":1,"1270":6}}],["cqrscontractmismatchkind",{"2":{"1260":1,"1266":1},"3":{"1199":4,"1203":1,"1207":1,"1260":1,"1266":1,"1270":7}}],["cqrsmetricstests",{"3":{"1199":1,"1207":5,"1438":1}}],["cqrsmetricsprobequery",{"3":{"1199":2,"1207":1}}],["cqrsmetricsprobecommand",{"3":{"1199":2,"1207":1}}],["cqrsmetrics",{"2":{"126":1,"397":1,"405":1,"1268":1,"2159":1},"3":{"121":2,"126":2,"397":4,"399":1,"405":1,"1199":7,"1203":1,"1207":2,"1260":1,"1263":4,"1268":9,"1270":30,"1301":1,"1438":1,"1496":1,"2156":2,"2159":1}}],["cqrs",{"0":{"1507":1,"1543":1,"1937":1},"1":{"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"1260":1,"1261":1,"1262":1,"1263":1,"1264":1,"1265":1,"1266":1,"1267":1,"1268":1,"1269":1,"1270":1,"1818":1,"1819":1,"1820":1,"1821":1,"1822":1,"1823":1,"1824":1,"1825":1,"1826":1,"1827":1,"2134":1,"2135":1,"2136":1,"2137":1,"2138":1,"2139":1},"2":{"121":1,"124":1,"126":2,"400":1,"822":1,"823":1,"1268":3,"2006":1,"2013":1,"2156":1,"2160":1},"3":{"0":8,"17":2,"27":4,"77":1,"114":1,"117":1,"121":4,"124":1,"126":2,"127":2,"128":3,"135":3,"139":3,"142":2,"160":2,"186":1,"246":1,"258":1,"299":1,"300":2,"301":1,"306":1,"395":6,"396":1,"397":6,"398":2,"400":1,"404":1,"405":1,"406":1,"407":1,"408":1,"409":1,"545":4,"552":1,"572":2,"578":1,"608":1,"748":1,"819":1,"822":1,"823":1,"827":1,"897":2,"1003":1,"1004":1,"1006":2,"1042":1,"1058":1,"1059":1,"1075":1,"1132":1,"1133":3,"1191":1,"1192":2,"1194":1,"1200":1,"1202":3,"1203":3,"1207":101,"1211":1,"1212":4,"1213":1,"1216":1,"1218":1,"1223":1,"1229":2,"1231":1,"1237":4,"1238":1,"1245":1,"1246":1,"1247":5,"1249":1,"1259":23,"1260":3,"1262":1,"1268":3,"1270":37,"1271":4,"1286":15,"1297":1,"1300":12,"1301":5,"1302":1,"1303":1,"1304":1,"1309":22,"1311":20,"1315":1,"1316":3,"1323":19,"1324":6,"1333":1,"1339":2,"1345":1,"1350":32,"1351":1,"1352":1,"1355":1,"1359":53,"1370":2,"1371":1,"1380":8,"1390":1,"1395":2,"1396":33,"1402":32,"1403":1,"1409":1,"1413":1,"1415":30,"1417":1,"1431":17,"1436":255,"1437":2,"1438":1,"1443":1,"1455":1,"1487":1,"1488":1,"1489":2,"1496":6,"1499":1,"1505":1,"1526":2,"1534":1,"1535":2,"1536":1,"1543":1,"1577":9,"1582":2,"1583":2,"1584":1,"1586":2,"1590":1,"1591":4,"1597":1,"1646":1,"1659":1,"1660":1,"1662":1,"1666":1,"1670":1,"1675":1,"1692":1,"1717":1,"1720":1,"1779":2,"1780":2,"1781":1,"1784":1,"1786":1,"1796":1,"1803":1,"1817":1,"1818":2,"1827":3,"1828":1,"1840":1,"1879":1,"1888":1,"1914":1,"1932":1,"1941":1,"1947":1,"1962":1,"1965":1,"2006":1,"2010":1,"2013":1,"2052":1,"2098":1,"2111":1,"2115":1,"2133":2,"2134":1,"2137":1,"2139":1,"2146":1,"2154":2,"2156":10,"2160":2,"2162":1,"2181":1,"2182":1,"2199":1,"2204":1,"2206":2,"2213":2,"2215":1,"2217":1,"2218":1,"2219":1,"2221":1,"2227":3,"2230":1,"2232":3,"2239":2}}],["clutter",{"3":{"2010":1}}],["clustertraceheadername",{"3":{"1436":1}}],["clustertraceechoheader",{"3":{"1436":1}}],["clusterheader",{"3":{"1436":1}}],["clusterheadername",{"3":{"1339":1}}],["clusterconfig",{"3":{"1339":4}}],["clustered",{"3":{"1332":1,"1339":3,"1443":1,"1496":4,"1515":1,"1799":1}}],["clusterprofile",{"3":{"1199":2,"1207":1}}],["clusterid",{"3":{"838":1,"1338":1,"1339":5}}],["clustering",{"3":{"641":1,"1043":1,"1154":1,"1467":2}}],["clusterrequestoverrides",{"2":{"838":1,"1338":1,"1656":1},"3":{"838":2,"1338":1,"1339":3,"1447":1,"1656":1}}],["clusterrequestdefaults",{"2":{"836":1,"838":1,"1338":1,"1656":1},"3":{"0":1,"836":1,"838":3,"1338":1,"1339":5,"1438":1,"1447":1,"1656":1}}],["clusters",{"3":{"91":1,"827":1,"838":7,"839":1,"841":1,"1287":2,"1300":1,"1338":1,"1339":4,"1436":1,"1438":4,"1447":8,"1496":1,"1656":1,"1779":1}}],["cluster",{"0":{"1338":1},"2":{"234":1},"3":{"0":14,"57":1,"59":1,"91":2,"93":2,"98":4,"100":4,"102":1,"234":2,"235":3,"236":1,"245":1,"259":2,"520":1,"572":4,"578":3,"790":3,"827":10,"829":2,"833":2,"836":2,"838":21,"839":3,"840":2,"841":2,"842":1,"1152":1,"1212":1,"1237":2,"1247":1,"1259":1,"1267":1,"1270":3,"1286":1,"1290":1,"1298":2,"1301":4,"1312":1,"1323":3,"1325":2,"1332":1,"1338":10,"1339":61,"1347":1,"1350":1,"1356":2,"1359":1,"1436":12,"1438":11,"1442":1,"1443":1,"1446":1,"1447":17,"1455":1,"1488":1,"1496":3,"1656":7,"1660":1,"1663":2,"1765":1,"1917":1,"2024":1,"2055":1,"2220":1}}],["cleverness",{"3":{"1909":1}}],["clever",{"3":{"1790":1}}],["cleavestack",{"3":{"2226":1,"2234":2}}],["clearlinkedspeakerasync",{"2":{"1350":1},"3":{"1350":1}}],["clearlocalcacheasync",{"3":{"1324":3}}],["clearly",{"3":{"1259":1,"1280":1,"1286":1,"1324":1,"1339":1,"1417":1,"1436":1,"1727":1,"2128":1}}],["clearmobileitems",{"3":{"1324":1}}],["clearallpools",{"3":{"1490":1}}],["clearauthentication",{"3":{"1429":1,"1436":1,"1488":1}}],["clearasync",{"3":{"1324":9,"1417":9}}],["clearable",{"3":{"248":1,"1301":1}}],["cleardraft",{"3":{"1389":1,"1395":4}}],["cleardirty",{"3":{"1324":1}}],["cleardomainevents",{"2":{"1231":1},"3":{"1231":1,"1237":4,"1286":4,"1810":1}}],["clearest",{"3":{"799":1,"1231":1,"1270":3,"1278":1,"1309":1,"1310":1,"1311":1,"1324":4,"1329":1,"1339":2,"1348":1,"1350":1,"1359":5,"1373":1,"1389":1,"1395":9,"1396":3,"1402":1,"1410":1,"1417":2,"1431":1,"1455":1,"2043":1}}],["cleared",{"3":{"0":2,"21":1,"24":1,"26":1,"219":2,"512":1,"749":1,"751":1,"783":1,"989":1,"1014":1,"1066":1,"1124":1,"1127":1,"1185":1,"1259":1,"1263":1,"1274":2,"1286":4,"1298":1,"1300":1,"1311":3,"1318":1,"1323":4,"1324":9,"1338":1,"1339":2,"1350":3,"1355":1,"1359":4,"1389":1,"1390":1,"1395":20,"1396":3,"1402":2,"1415":7,"1417":1,"1427":1,"1433":1,"1438":1,"1635":1,"1638":2,"1639":2,"1641":1,"1673":1,"1748":2,"1749":1,"1754":1,"1765":1,"1840":1,"1923":1}}],["cleartokensasync",{"2":{"511":1},"3":{"511":1,"1324":6,"1417":2,"1436":2}}],["cleartextport",{"3":{"95":1,"1331":1,"1339":3,"1442":1}}],["cleartext",{"3":{"31":1,"33":1,"53":2,"55":1,"60":1,"61":1,"91":5,"92":3,"94":1,"96":1,"97":7,"98":6,"99":3,"100":3,"101":1,"102":1,"103":2,"235":2,"749":2,"1067":3,"1309":1,"1311":5,"1312":6,"1323":3,"1326":1,"1328":2,"1331":1,"1334":2,"1337":1,"1339":17,"1379":3,"1380":1,"1396":3,"1415":3,"1430":2,"1438":1,"1441":5,"1447":4,"1449":1,"1467":5,"1476":1,"1488":1,"1496":1,"1656":2,"1663":1,"1670":1,"1825":1,"1898":2,"1904":1,"1946":1,"2009":1,"2019":1,"2023":1,"2025":11}}],["clears→nuget",{"3":{"1526":1}}],["clears",{"3":{"0":1,"21":1,"39":1,"123":1,"175":1,"207":1,"220":1,"246":1,"350":1,"355":1,"370":1,"391":1,"397":1,"402":1,"404":1,"556":1,"790":1,"854":1,"857":1,"881":1,"905":1,"997":1,"1091":1,"1184":2,"1229":1,"1231":1,"1237":2,"1259":3,"1267":1,"1273":1,"1286":10,"1289":1,"1293":1,"1294":1,"1300":9,"1301":1,"1309":2,"1311":3,"1323":6,"1324":37,"1333":1,"1339":4,"1349":1,"1350":3,"1359":9,"1373":1,"1380":4,"1390":1,"1395":46,"1396":11,"1402":4,"1407":1,"1410":1,"1415":7,"1417":8,"1433":1,"1436":15,"1438":1,"1443":1,"1488":1,"1526":1,"1563":1,"1611":1,"1634":1,"1639":2,"1641":7,"1747":1,"1748":1,"1751":1,"1753":1,"1764":1,"1765":2,"1767":5,"1769":1,"1776":1,"1903":1,"1918":1,"1920":1,"1922":2,"1923":1,"1924":1,"2010":1,"2079":1,"2157":1,"2160":1,"2191":1,"2197":2}}],["clearing",{"3":{"0":1,"279":1,"500":1,"512":1,"861":1,"1026":1,"1233":1,"1237":1,"1252":1,"1259":1,"1270":1,"1274":2,"1275":1,"1286":3,"1300":2,"1311":3,"1323":1,"1324":7,"1338":1,"1339":4,"1343":1,"1345":1,"1359":3,"1395":3,"1396":2,"1399":1,"1402":1,"1415":3,"1417":1,"1436":3,"1443":1,"1488":1,"1748":2,"1764":1,"1767":1,"1769":1,"1776":1,"2157":1}}],["clear",{"2":{"1840":1},"3":{"0":1,"21":1,"170":1,"207":1,"212":1,"219":1,"243":3,"258":2,"259":1,"261":1,"395":1,"440":1,"499":1,"507":1,"618":1,"707":1,"715":1,"716":1,"733":1,"766":1,"861":1,"972":1,"988":1,"1027":1,"1028":1,"1237":6,"1247":1,"1282":1,"1286":9,"1300":8,"1301":2,"1309":3,"1311":1,"1318":2,"1323":11,"1324":29,"1333":1,"1339":4,"1343":1,"1350":1,"1355":1,"1359":6,"1380":5,"1383":1,"1390":1,"1395":26,"1396":4,"1413":1,"1415":3,"1417":7,"1436":19,"1438":2,"1475":1,"1480":1,"1488":1,"1496":1,"1541":1,"1545":1,"1546":1,"1556":1,"1572":1,"1577":3,"1638":1,"1641":1,"1667":1,"1668":1,"1746":3,"1748":1,"1749":2,"1750":3,"1765":1,"1768":2,"1769":1,"1773":1,"1775":1,"1840":1,"1841":1,"1918":1,"1924":1,"2057":1,"2079":1,"2085":1,"2126":1,"2128":1,"2132":1,"2140":1,"2146":1}}],["cleanest",{"3":{"1323":1,"1324":1,"1350":1,"1369":1,"1416":1,"1417":1,"1800":1,"2032":1,"2034":1,"2078":1}}],["cleaned",{"3":{"19":1,"707":1,"1274":1,"1323":1,"1359":2,"2065":1}}],["cleans",{"3":{"1082":1,"1323":1,"1415":1,"1460":1}}],["cleanly",{"3":{"187":1,"234":1,"266":1,"310":1,"414":1,"641":1,"799":1,"1247":1,"1270":2,"1273":1,"1285":1,"1286":2,"1309":2,"1311":1,"1323":4,"1324":4,"1350":1,"1359":1,"1369":1,"1395":1,"1396":1,"1402":2,"1415":1,"1417":6,"1436":5,"1441":1,"1460":1,"1467":1,"1481":1,"1526":1,"1555":1,"1831":1,"1886":1,"1929":1,"1960":1,"2014":1,"2061":1,"2212":1,"2214":1,"2221":1}}],["cleanuptestcontext",{"3":{"1199":2,"1207":1}}],["cleanupintervalhours",{"2":{"1256":1,"1290":1,"2188":1},"3":{"905":1,"1042":1,"1256":1,"1259":2,"1286":3,"1290":1,"1300":1,"1845":1,"2188":1}}],["cleanup",{"0":{"1357":1},"3":{"0":1,"21":1,"24":1,"39":1,"40":1,"546":1,"699":1,"790":1,"905":1,"1082":1,"1086":2,"1116":1,"1118":1,"1134":1,"1247":1,"1259":4,"1270":3,"1276":1,"1286":13,"1303":1,"1311":2,"1323":3,"1324":2,"1345":1,"1350":6,"1355":1,"1357":2,"1359":13,"1396":1,"1411":1,"1415":13,"1417":1,"1436":4,"1467":1,"1475":6,"1488":1,"1496":3,"1634":3,"1639":1}}],["clean",{"0":{"1504":1,"1540":1},"2":{"1360":1},"3":{"0":1,"54":1,"58":1,"131":1,"135":2,"136":1,"248":1,"282":1,"373":1,"507":1,"512":1,"529":1,"546":1,"757":1,"759":1,"988":1,"1211":3,"1212":1,"1216":1,"1217":1,"1221":1,"1229":3,"1230":1,"1237":3,"1241":1,"1243":1,"1245":1,"1247":4,"1249":1,"1259":3,"1270":5,"1271":1,"1272":1,"1286":20,"1289":1,"1300":6,"1301":8,"1303":2,"1309":10,"1310":5,"1311":13,"1312":1,"1313":1,"1314":1,"1323":9,"1324":11,"1339":2,"1341":2,"1342":1,"1345":1,"1346":1,"1349":1,"1350":7,"1352":2,"1354":1,"1359":41,"1360":2,"1369":7,"1380":6,"1382":1,"1395":4,"1396":21,"1402":1,"1404":2,"1415":15,"1416":3,"1417":9,"1427":1,"1436":55,"1438":3,"1445":4,"1455":5,"1459":1,"1467":2,"1476":1,"1488":1,"1489":3,"1493":1,"1496":24,"1499":1,"1522":1,"1523":1,"1525":1,"1526":4,"1535":1,"1536":1,"1554":1,"1562":1,"1576":1,"1577":4,"1586":1,"1587":1,"1588":1,"1590":1,"1591":1,"1594":1,"1600":1,"1611":1,"1638":1,"1639":1,"1646":1,"1659":1,"1692":1,"1710":1,"1763":1,"1780":2,"1781":1,"1782":1,"1784":1,"1794":2,"1796":1,"1797":1,"1799":1,"1805":1,"1815":1,"1831":1,"1882":1,"1902":1,"1915":1,"1923":1,"1931":1,"1960":1,"1966":1,"2002":1,"2008":1,"2039":1,"2040":2,"2044":2,"2049":1,"2052":1,"2055":1,"2071":1,"2076":1,"2099":1,"2108":1,"2109":1,"2116":1,"2126":3,"2204":1,"2213":2,"2216":1,"2217":1,"2218":1,"2219":1,"2220":1,"2221":1,"2225":1,"2227":1,"2230":1,"2239":3,"2243":1,"2245":1}}],["cldr",{"3":{"1324":2,"1577":1}}],["cl",{"2":{"609":1,"1465":1,"1476":2},"3":{"609":1,"1465":1,"1467":2,"1476":2}}],["clrtype",{"2":{"697":1},"3":{"697":1,"1286":3}}],["clr",{"0":{"1241":1},"3":{"0":1,"24":2,"330":1,"471":1,"633":1,"636":1,"798":1,"799":1,"803":2,"805":1,"848":1,"849":1,"963":2,"964":2,"965":2,"1049":1,"1233":1,"1235":2,"1237":7,"1241":2,"1247":5,"1250":2,"1259":9,"1269":1,"1270":1,"1276":1,"1277":1,"1278":1,"1281":2,"1282":1,"1286":33,"1300":3,"1310":5,"1318":1,"1323":5,"1339":1,"1350":1,"1369":4,"1380":1,"1395":1,"1396":1,"1415":2,"1417":2,"1433":1,"1436":8,"1586":1,"1815":1,"1849":1,"1858":1,"1988":1,"1991":1,"2187":1,"2193":1}}],["cls=",{"3":{"1436":1}}],["cls",{"3":{"0":3,"860":1,"861":6,"863":2,"1212":1,"1433":3,"1436":9,"1526":1,"1560":1,"1582":1,"1591":1,"1596":1,"1671":1,"2079":1}}],["cliff",{"3":{"1892":1}}],["clipped",{"3":{"1653":1}}],["clip",{"3":{"1417":1,"1427":1}}],["clips",{"3":{"1286":1,"1669":1}}],["clipboard",{"2":{"412":1,"2116":1},"3":{"412":2,"1192":1,"1202":1,"1203":1,"1395":1,"1417":22,"1496":1,"1669":1,"2116":2}}],["climbs",{"3":{"1436":1}}],["climb",{"3":{"801":1}}],["climbing",{"3":{"799":1,"801":1,"1049":1,"1465":1}}],["clickjacks",{"3":{"2148":1}}],["clickjacking",{"3":{"1324":1,"1339":1,"2148":1}}],["clickandverifyasync",{"2":{"1671":1},"3":{"1433":1,"1436":1,"1488":1,"1671":1}}],["clickandwaitforurlasync",{"2":{"1433":1},"3":{"1433":1,"1436":1,"1488":1}}],["clickablecard",{"3":{"1324":1,"1436":1}}],["clickablecardtests",{"3":{"1199":1,"1207":2}}],["clickable",{"3":{"1324":1,"1359":1,"1436":2}}],["clickbuttonbytext",{"3":{"1432":1,"1436":2}}],["clicked",{"3":{"608":1,"1290":1,"1395":1,"1396":1,"1415":1,"1436":1,"2034":1,"2158":1}}],["clicks",{"3":{"517":1,"519":1,"743":1,"954":1,"1311":1,"1383":1,"1395":2,"1417":1,"1436":22,"1488":4,"1973":1}}],["clicking",{"3":{"156":1,"905":1,"1300":1,"1324":1,"1389":1,"1402":1,"1436":3,"1463":1,"1488":1}}],["click",{"3":{"0":2,"413":1,"519":1,"520":1,"743":1,"766":1,"861":1,"862":1,"905":1,"907":1,"1020":1,"1300":2,"1324":13,"1339":1,"1359":1,"1392":1,"1395":7,"1396":1,"1402":2,"1415":2,"1417":11,"1433":2,"1436":18,"1456":1,"1474":1,"1488":3,"1554":1,"1558":2,"1565":1,"1627":1,"1629":1,"1966":1,"2117":1,"2121":1}}],["cli",{"3":{"0":1,"665":1,"764":1,"766":1,"790":1,"1335":1,"1339":2,"1441":1,"1455":1,"1457":1,"1458":1,"1464":1,"1465":1,"1472":2,"1474":1,"1475":1,"1682":1,"2034":1,"2166":1}}],["cliente",{"3":{"1686":2}}],["clienteventformatvalidationtests",{"3":{"1199":1,"1207":2}}],["clientwidth",{"3":{"1436":1}}],["clientverdict",{"3":{"1436":1}}],["clientpasswordcomplexity",{"3":{"1436":2}}],["clientmodel",{"3":{"1427":1}}],["clientoptions",{"2":{"1420":1},"3":{"1420":1,"1427":2}}],["clienttoken",{"3":{"1359":1}}],["clientname",{"3":{"1339":1}}],["clientnameprefix",{"3":{"1339":1}}],["clientuseragent",{"3":{"1311":2,"1415":1}}],["clienturlvalidationtests",{"3":{"1199":1,"1207":2,"1438":2}}],["clientfactory",{"3":{"1213":1,"1312":2,"1436":5}}],["clientinterceptorcontext",{"3":{"1312":1}}],["clientip",{"3":{"1338":1,"1339":6,"1436":1,"1447":1}}],["clientipaddress",{"3":{"1311":2,"1415":1}}],["clientippartition",{"3":{"827":1,"1324":1,"1337":1,"1339":2}}],["clientid",{"2":{"351":1,"352":1},"3":{"0":1,"350":2,"351":1,"352":1,"1311":6,"1324":3,"1472":2,"1667":1,"1975":4,"1978":1}}],["clientconfigpath",{"3":{"1324":2}}],["clientconfigendpointtests",{"3":{"1199":2,"1207":4,"1324":4,"1437":1,"1487":2}}],["clientconfigendpointextensions",{"2":{"1324":1},"3":{"674":1,"677":1,"1184":1,"1198":1,"1199":3,"1203":1,"1207":2,"1208":1,"1324":17,"1496":1}}],["clientconfigbuilder",{"3":{"1198":1,"1199":2,"1203":1,"1207":2,"1324":11,"1496":1}}],["clientconfig",{"3":{"674":1,"1184":1,"1203":2,"1207":6,"1208":1,"1324":14,"1487":1}}],["clientcascade",{"2":{"1083":1},"3":{"0":1,"1083":1}}],["clientkey",{"2":{"231":1},"3":{"225":1,"231":1,"1247":1,"1309":1}}],["client",{"0":{"1378":1,"2019":1,"2030":1,"2032":1},"1":{"154":1,"155":1,"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":1,"504":1,"505":1,"506":1,"507":1,"508":1,"509":1,"510":1,"511":1,"512":1,"513":1,"514":1,"878":1,"879":1,"880":1,"881":1,"882":1,"883":1,"884":1,"885":1},"2":{"407":1,"599":1,"601":1,"603":1,"667":1,"669":1,"1075":1,"1425":1,"1443":1,"1445":1,"1468":1,"1472":2,"1531":1,"1677":1,"2177":1},"3":{"0":40,"53":5,"59":2,"60":1,"66":1,"67":1,"68":1,"70":2,"71":2,"72":5,"73":4,"74":2,"86":1,"92":1,"95":1,"96":1,"97":3,"100":2,"103":1,"104":1,"109":8,"110":1,"111":3,"113":2,"122":1,"131":1,"134":1,"135":2,"136":1,"142":2,"154":1,"156":2,"157":8,"158":1,"159":1,"160":4,"166":2,"168":2,"175":4,"177":1,"179":2,"180":4,"182":1,"194":1,"206":2,"213":1,"225":2,"229":1,"230":1,"231":3,"233":1,"234":2,"235":3,"237":2,"241":2,"243":2,"245":4,"247":1,"258":3,"259":2,"261":3,"264":1,"265":5,"267":2,"272":1,"279":1,"280":3,"285":1,"332":1,"333":2,"335":1,"340":2,"341":6,"342":4,"343":3,"348":1,"350":1,"353":1,"379":2,"380":1,"381":2,"382":1,"383":1,"384":2,"387":1,"389":1,"398":1,"402":1,"404":1,"406":1,"407":3,"408":1,"418":1,"420":2,"423":1,"425":1,"430":1,"433":2,"434":4,"435":1,"436":1,"439":1,"440":1,"443":1,"447":2,"449":3,"455":1,"498":1,"499":2,"500":2,"501":2,"504":1,"506":1,"507":6,"508":1,"509":1,"510":1,"536":1,"545":1,"551":1,"554":1,"555":4,"556":7,"557":2,"558":1,"559":1,"560":1,"571":1,"572":5,"583":2,"591":1,"598":1,"599":5,"601":1,"603":1,"608":1,"612":1,"638":1,"640":2,"649":1,"650":1,"665":3,"667":1,"669":1,"674":2,"677":1,"684":2,"740":1,"741":1,"742":1,"743":2,"749":2,"750":1,"773":1,"774":1,"789":1,"792":1,"795":1,"817":1,"822":1,"826":3,"827":10,"829":1,"833":2,"837":1,"860":3,"861":1,"865":2,"876":5,"878":1,"879":1,"880":6,"881":13,"882":6,"883":2,"884":1,"885":4,"897":1,"904":1,"905":2,"907":2,"910":2,"914":1,"922":1,"954":1,"988":1,"996":2,"998":1,"1016":1,"1017":1,"1018":5,"1020":1,"1034":2,"1035":2,"1050":1,"1052":1,"1059":1,"1067":2,"1075":1,"1082":1,"1085":1,"1089":1,"1090":1,"1091":6,"1092":3,"1093":3,"1112":1,"1116":1,"1124":4,"1125":1,"1126":2,"1182":1,"1183":2,"1184":5,"1185":1,"1186":1,"1187":1,"1189":1,"1192":2,"1199":1,"1202":1,"1203":2,"1206":1,"1207":3,"1212":12,"1213":1,"1217":1,"1218":1,"1225":3,"1227":1,"1228":1,"1229":9,"1237":2,"1239":1,"1241":5,"1242":2,"1243":1,"1244":1,"1247":29,"1259":1,"1268":1,"1270":3,"1271":4,"1285":2,"1286":24,"1287":1,"1289":1,"1290":2,"1294":1,"1295":1,"1298":1,"1300":53,"1301":4,"1302":2,"1305":1,"1306":1,"1308":2,"1309":53,"1311":98,"1312":36,"1314":2,"1315":1,"1316":2,"1323":34,"1324":261,"1327":1,"1328":2,"1332":2,"1333":1,"1334":1,"1335":1,"1336":3,"1337":1,"1338":3,"1339":69,"1347":3,"1349":1,"1350":28,"1352":3,"1353":1,"1355":2,"1357":1,"1358":3,"1359":77,"1360":1,"1365":2,"1366":5,"1369":13,"1370":1,"1371":1,"1378":3,"1380":37,"1384":4,"1387":1,"1388":1,"1389":2,"1395":100,"1396":110,"1397":1,"1402":48,"1404":1,"1406":2,"1408":1,"1411":1,"1413":1,"1414":2,"1415":58,"1416":40,"1417":34,"1420":2,"1421":5,"1422":2,"1423":1,"1425":4,"1427":34,"1429":2,"1432":2,"1433":1,"1435":4,"1436":84,"1437":5,"1438":28,"1441":6,"1442":2,"1443":3,"1444":1,"1445":2,"1447":8,"1455":4,"1456":1,"1460":1,"1461":1,"1467":16,"1468":1,"1472":5,"1477":1,"1487":1,"1488":5,"1489":1,"1490":1,"1491":3,"1492":2,"1496":7,"1503":1,"1526":13,"1531":3,"1532":3,"1534":2,"1545":1,"1554":1,"1556":2,"1560":3,"1561":2,"1563":5,"1564":1,"1572":3,"1577":4,"1585":1,"1586":2,"1589":1,"1591":4,"1595":1,"1596":5,"1597":2,"1626":1,"1627":2,"1631":4,"1638":1,"1639":5,"1640":4,"1641":6,"1651":1,"1653":5,"1656":2,"1662":2,"1663":4,"1666":1,"1667":2,"1668":3,"1669":1,"1670":1,"1671":1,"1677":1,"1685":3,"1702":5,"1707":1,"1720":1,"1749":2,"1765":1,"1773":2,"1790":4,"1805":2,"1815":1,"1831":2,"1840":1,"1856":1,"1868":1,"1870":1,"1871":2,"1872":3,"1873":2,"1874":2,"1875":1,"1876":4,"1877":2,"1882":2,"1884":1,"1905":1,"1906":4,"1908":7,"1909":2,"1911":4,"1912":3,"1918":1,"1921":1,"1925":2,"1926":2,"1927":3,"1930":1,"1934":1,"1935":1,"1936":2,"1937":1,"1942":2,"1944":3,"1945":2,"1946":1,"1949":1,"1950":2,"1966":3,"1968":3,"1972":4,"1973":1,"1975":4,"1976":1,"1979":2,"1980":2,"1981":1,"1982":2,"1984":1,"1985":1,"1986":1,"1987":1,"1988":1,"1990":1,"1998":1,"2000":2,"2001":1,"2002":2,"2009":1,"2010":1,"2015":1,"2017":2,"2018":1,"2019":3,"2022":1,"2023":1,"2024":4,"2028":2,"2029":2,"2030":4,"2031":3,"2032":1,"2038":3,"2043":1,"2044":1,"2055":4,"2074":1,"2077":1,"2078":2,"2079":1,"2080":2,"2081":1,"2082":1,"2083":2,"2086":1,"2094":1,"2104":2,"2107":1,"2124":2,"2126":4,"2129":3,"2130":2,"2131":2,"2132":1,"2133":3,"2147":1,"2151":1,"2156":2,"2158":1,"2163":1,"2166":1,"2167":1,"2170":2,"2173":1,"2174":1,"2175":1,"2177":1,"2180":1,"2232":5,"2239":1}}],["clientstreamingserverhandler",{"3":{"1312":1}}],["clientstate",{"3":{"1311":4}}],["clientstateitemkey",{"3":{"1311":2}}],["clientstamped",{"3":{"1175":2,"1274":1,"1280":1,"1286":5}}],["clientsecret",{"3":{"350":1,"1311":1,"1975":1}}],["clientsetnull",{"2":{"1082":1,"1085":1},"3":{"0":1,"1082":1,"1085":1}}],["clients",{"0":{"100":1},"2":{"1330":1},"3":{"0":5,"53":2,"57":1,"59":2,"60":1,"63":1,"66":1,"74":1,"97":1,"98":3,"135":1,"157":1,"174":1,"225":2,"314":1,"380":1,"383":1,"387":1,"560":1,"583":1,"586":1,"587":1,"638":2,"640":1,"645":1,"657":1,"773":1,"823":1,"881":1,"882":1,"1077":1,"1091":2,"1184":1,"1192":2,"1202":1,"1203":1,"1212":3,"1213":1,"1247":1,"1286":4,"1289":1,"1296":1,"1300":7,"1301":1,"1302":1,"1307":5,"1309":13,"1311":13,"1312":1,"1316":1,"1320":1,"1323":14,"1324":8,"1326":1,"1329":3,"1330":1,"1339":9,"1350":1,"1353":1,"1359":4,"1379":1,"1380":4,"1395":4,"1396":15,"1399":1,"1402":4,"1406":1,"1410":1,"1414":1,"1415":9,"1418":1,"1427":1,"1436":8,"1438":2,"1441":4,"1443":1,"1447":4,"1450":1,"1467":1,"1490":1,"1496":1,"1509":1,"1538":1,"1555":1,"1591":1,"1630":2,"1631":2,"1638":1,"1639":4,"1640":3,"1641":11,"1660":2,"1668":1,"1669":2,"1671":1,"1772":1,"1790":2,"1906":1,"1907":1,"1911":1,"1912":2,"1932":1,"1935":3,"1944":1,"1946":1,"1950":1,"2009":1,"2019":1,"2023":2,"2025":2,"2028":1,"2031":1,"2037":1,"2038":1,"2083":1,"2111":1,"2170":1,"2214":1,"2221":2,"2227":1,"2232":1}}],["clobbering",{"3":{"1324":1,"1870":1}}],["clobbers",{"3":{"1324":1,"2072":1}}],["clobber",{"3":{"1323":2,"1359":1,"1415":1,"1429":1,"1430":1,"1436":2,"1490":1}}],["cloning",{"3":{"820":1,"1286":1}}],["cloned",{"3":{"1091":1,"1436":1}}],["clones",{"3":{"698":1,"1286":5,"1427":1,"1453":1,"1851":1}}],["clone",{"3":{"468":1,"657":1,"1286":4,"1359":1,"1422":1,"1464":1,"2003":1,"2004":1,"2174":1}}],["clothes",{"3":{"341":1}}],["cloud",{"0":{"1446":1,"2229":1},"3":{"0":1,"175":1,"177":1,"219":1,"397":1,"405":1,"641":1,"749":1,"972":1,"1011":1,"1043":1,"1124":1,"1213":1,"1309":1,"1311":2,"1338":1,"1339":2,"1350":1,"1364":3,"1369":4,"1439":1,"1442":1,"1450":1,"1457":1,"1467":2,"1554":1,"1568":1,"1570":1,"1575":1,"1577":1,"1670":1,"1707":3,"1936":1,"2010":2,"2013":1,"2027":1,"2128":1,"2154":2,"2156":1,"2160":1,"2185":2,"2193":1,"2212":1,"2213":3,"2214":1,"2216":1,"2217":1,"2218":2,"2219":1,"2220":2,"2221":1,"2228":1,"2238":1,"2239":2,"2240":2}}],["closures",{"3":{"1309":2,"1436":1}}],["closure",{"3":{"122":1,"135":2,"465":1,"466":1,"1067":1,"1222":1,"1229":2,"1247":3,"1259":1,"1270":1,"1286":2,"1301":1,"1311":1,"1323":2,"1324":1,"1339":2,"1359":1,"1395":1,"1417":1,"1436":8}}],["closing",{"3":{"0":3,"122":1,"217":1,"252":1,"254":1,"265":1,"390":1,"392":1,"458":1,"492":1,"523":1,"603":1,"607":1,"664":1,"699":1,"764":1,"856":1,"872":1,"897":1,"920":2,"1033":1,"1052":1,"1108":1,"1229":1,"1239":1,"1247":2,"1258":1,"1270":2,"1286":1,"1300":3,"1311":2,"1323":5,"1324":4,"1340":1,"1342":1,"1350":2,"1359":7,"1380":1,"1392":1,"1395":4,"1402":5,"1415":3,"1417":1,"1427":1,"1436":9,"1450":1,"1455":1,"1467":1,"1496":1,"1524":1,"1577":2,"1637":1,"1641":1,"1702":1,"1845":1,"1851":1,"1923":1,"1946":1,"2034":1,"2079":1,"2085":1,"2163":1}}],["closepollasync",{"3":{"1402":2}}],["closeasync",{"3":{"1396":2,"1402":1}}],["closely",{"3":{"1270":1,"1300":1,"1311":2,"1320":1,"1339":1,"1350":1,"1355":1,"1359":3,"1395":1,"1396":1,"1406":1,"1417":2,"1421":1,"1436":2,"1441":1,"1455":1,"1456":1}}],["closelivepollcommand",{"3":{"1199":6,"1203":1,"1207":2,"1402":11}}],["closelivepollhandlertests",{"3":{"1199":1,"1207":3}}],["closelivepollhandler",{"2":{"522":1,"1399":1},"3":{"522":2,"523":2,"1100":2,"1199":2,"1203":1,"1207":2,"1270":2,"1350":2,"1396":4,"1399":6,"1402":17}}],["closer",{"3":{"915":1,"1780":1}}],["close",{"3":{"0":5,"21":1,"26":1,"99":1,"122":1,"197":1,"265":1,"273":1,"320":1,"329":1,"335":1,"342":1,"350":1,"390":1,"491":1,"507":1,"522":1,"523":1,"558":1,"642":1,"832":1,"837":1,"840":1,"848":1,"916":1,"921":1,"926":1,"988":2,"996":1,"1061":1,"1075":1,"1100":1,"1108":1,"1123":1,"1124":2,"1125":1,"1128":1,"1203":2,"1207":4,"1247":1,"1259":1,"1262":1,"1265":1,"1270":9,"1271":1,"1277":1,"1284":1,"1286":3,"1292":1,"1300":5,"1301":1,"1309":1,"1311":1,"1312":2,"1323":3,"1324":17,"1338":1,"1339":1,"1350":1,"1355":1,"1359":9,"1379":1,"1380":1,"1383":1,"1395":7,"1396":9,"1398":1,"1399":1,"1401":1,"1402":38,"1415":4,"1416":1,"1427":1,"1436":12,"1438":1,"1441":1,"1448":1,"1449":1,"1459":2,"1467":1,"1488":2,"1489":1,"1490":1,"1496":1,"1526":1,"1534":2,"1576":1,"1582":1,"1607":1,"1632":2,"1741":1,"1872":1,"1902":1,"1934":1,"1977":1,"1978":1,"1987":1,"1991":1,"1998":1,"2000":3,"2055":1,"2085":1,"2202":1}}],["closedrawer",{"3":{"1591":1}}],["closedgenericarguments",{"3":{"1436":1}}],["closedhandlertype",{"3":{"1259":3}}],["closed",{"0":{"870":1,"1235":1},"1":{"1105":1,"1106":1,"1107":1,"1108":1,"1109":1,"1110":1,"1111":1,"1112":1},"2":{"384":1},"3":{"0":18,"24":1,"76":1,"80":2,"109":1,"122":1,"135":1,"195":1,"201":1,"212":1,"214":1,"215":1,"216":1,"224":1,"233":2,"235":2,"237":2,"267":1,"275":1,"298":1,"305":1,"316":1,"324":1,"325":2,"326":1,"341":1,"368":1,"373":1,"374":1,"384":1,"414":1,"421":1,"423":1,"424":1,"459":2,"461":1,"463":1,"501":1,"512":1,"528":1,"530":1,"531":1,"535":1,"545":1,"549":1,"562":1,"566":1,"567":1,"572":2,"574":2,"591":1,"599":1,"624":1,"626":1,"628":1,"629":1,"657":1,"659":1,"698":1,"699":1,"700":1,"743":1,"759":1,"768":1,"776":2,"784":1,"833":1,"834":1,"840":1,"867":3,"868":1,"871":1,"872":2,"873":1,"906":1,"912":1,"922":4,"926":1,"963":1,"964":3,"988":1,"1018":1,"1042":1,"1050":2,"1052":1,"1059":1,"1091":2,"1105":1,"1108":3,"1169":1,"1176":1,"1177":1,"1178":1,"1212":1,"1223":1,"1229":7,"1234":1,"1235":2,"1237":14,"1240":1,"1241":3,"1247":13,"1259":5,"1263":2,"1264":2,"1265":2,"1267":2,"1268":1,"1270":44,"1271":5,"1273":1,"1275":1,"1278":1,"1280":1,"1286":21,"1297":1,"1300":26,"1301":1,"1307":1,"1309":8,"1310":2,"1311":29,"1312":1,"1316":1,"1318":1,"1323":21,"1324":22,"1334":1,"1339":4,"1350":14,"1352":2,"1353":1,"1354":2,"1358":1,"1359":119,"1366":1,"1369":1,"1372":1,"1380":25,"1383":1,"1384":1,"1391":1,"1395":27,"1396":20,"1398":1,"1399":1,"1401":1,"1402":32,"1403":1,"1404":1,"1406":1,"1415":24,"1417":4,"1421":1,"1422":1,"1423":2,"1427":7,"1436":33,"1438":6,"1442":1,"1447":1,"1453":1,"1454":1,"1455":2,"1459":3,"1467":1,"1489":1,"1496":5,"1526":4,"1531":1,"1575":2,"1577":1,"1582":1,"1586":2,"1590":1,"1591":4,"1597":1,"1600":1,"1630":1,"1632":2,"1653":1,"1670":1,"1686":2,"1701":1,"1702":2,"1707":1,"1771":1,"1815":1,"1823":2,"1830":1,"1851":2,"1912":1,"1927":1,"1962":1,"1963":1,"1984":1,"1985":1,"1989":1,"1995":1,"1996":1,"1997":1,"2000":1,"2038":1,"2046":1,"2047":1,"2136":1,"2140":1,"2150":1,"2152":1,"2153":2,"2161":2,"2172":1,"2175":1,"2179":1,"2180":2,"2184":1,"2190":1,"2193":1,"2201":2,"2203":1,"2232":1}}],["closesentinel",{"3":{"1324":1}}],["closest",{"3":{"1263":1,"1270":3,"1311":1,"1323":1,"1821":1}}],["closes",{"3":{"0":6,"40":1,"42":1,"69":1,"110":1,"121":1,"197":1,"201":1,"208":1,"230":1,"265":1,"284":2,"305":1,"318":1,"331":1,"350":1,"360":1,"365":1,"381":1,"387":1,"418":1,"459":1,"474":1,"538":1,"539":1,"599":1,"609":2,"612":1,"702":2,"741":1,"755":1,"757":1,"798":1,"827":2,"829":2,"832":1,"839":1,"893":1,"916":1,"1018":1,"1028":1,"1053":1,"1124":2,"1125":1,"1128":1,"1229":2,"1237":2,"1241":1,"1247":7,"1253":1,"1259":8,"1267":1,"1270":5,"1271":1,"1278":1,"1281":1,"1286":10,"1300":10,"1301":1,"1307":1,"1309":1,"1311":5,"1316":2,"1323":9,"1324":6,"1327":1,"1334":1,"1337":1,"1339":9,"1350":3,"1357":1,"1359":23,"1380":3,"1389":1,"1395":7,"1396":7,"1399":1,"1402":7,"1415":7,"1416":2,"1417":4,"1420":1,"1430":2,"1435":1,"1436":31,"1438":4,"1445":1,"1446":1,"1453":1,"1456":1,"1459":1,"1465":1,"1467":4,"1474":1,"1476":1,"1488":1,"1492":2,"1582":1,"1600":1,"1632":1,"1641":1,"1651":1,"1790":1,"1843":1,"1844":1,"1871":1,"1886":1,"1897":1,"1899":1,"1909":1,"1920":1,"1922":1,"1929":1,"1930":1,"1945":1,"1950":1,"1968":1,"1972":2,"1979":1,"2000":1,"2002":2,"2024":1,"2027":1,"2036":1,"2056":1,"2065":1,"2069":1,"2143":1,"2146":1,"2178":1}}],["clockreadfixtures",{"3":{"1207":21,"1436":30}}],["clockreadtests",{"3":{"1161":3,"1199":2,"1207":5,"1431":1,"1436":29,"1577":1,"1591":1,"1599":1}}],["clockreadtestsbase",{"3":{"0":1,"1161":4,"1162":1,"1199":3,"1207":2,"1212":1,"1431":3,"1436":13}}],["clockreadsin",{"3":{"1436":1}}],["clockreads",{"3":{"1160":1,"1161":3,"1162":2,"1163":2,"1207":1,"1431":1,"1436":5}}],["clocks",{"3":{"1028":1,"1324":1,"1396":1}}],["clock",{"0":{"1948":1},"1":{"1158":1,"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1},"3":{"0":4,"19":1,"39":1,"62":1,"178":1,"255":1,"305":1,"386":2,"387":2,"390":1,"392":2,"396":1,"590":1,"640":1,"711":1,"724":1,"726":1,"727":1,"860":1,"905":1,"954":1,"1028":1,"1029":1,"1090":1,"1117":1,"1158":1,"1160":2,"1161":3,"1163":4,"1212":2,"1237":1,"1249":1,"1254":1,"1256":3,"1259":10,"1269":1,"1286":7,"1293":1,"1300":26,"1306":1,"1309":7,"1311":5,"1317":1,"1323":7,"1324":13,"1332":1,"1339":2,"1342":1,"1347":1,"1348":1,"1350":11,"1356":2,"1359":15,"1364":1,"1369":2,"1379":1,"1380":1,"1383":2,"1393":1,"1395":23,"1396":23,"1402":4,"1415":1,"1417":3,"1418":1,"1422":1,"1425":1,"1427":2,"1431":2,"1436":42,"1438":9,"1467":1,"1486":1,"1487":1,"1492":2,"1496":2,"1535":1,"1577":2,"1582":1,"1585":1,"1586":2,"1599":1,"1600":2,"1640":1,"1664":1,"1671":1,"1731":1,"1750":1,"1922":1,"1937":1,"1948":1,"1950":2,"2047":1,"2066":1,"2154":1,"2174":1,"2180":1,"2183":1,"2232":1}}],["clarify",{"3":{"1636":1,"1755":1,"1776":3}}],["clarification",{"3":{"1639":1,"1641":2}}],["clarifications",{"0":{"1639":1},"3":{"337":1,"1639":2}}],["clarifies",{"3":{"1639":18,"1640":1}}],["clarified",{"3":{"3":1,"45":1}}],["clarity",{"3":{"1369":1,"1417":1}}],["clash",{"3":{"1237":1,"1350":1}}],["class=",{"3":{"1416":1}}],["classname",{"3":{"1286":6}}],["classreference",{"2":{"1319":1,"1354":1},"3":{"1199":27,"1203":16,"1207":16,"1311":5,"1313":1,"1319":2,"1323":16,"1341":1,"1350":6,"1354":1,"1359":5,"1369":4,"1377":1,"1380":3,"1396":17,"1404":1,"1415":23,"1496":1}}],["classifiable",{"3":{"1229":1}}],["classifications",{"3":{"1243":1,"1247":2,"1662":1}}],["classification",{"0":{"1219":1},"3":{"688":1,"1091":1,"1217":1,"1219":2,"1221":1,"1225":1,"1229":4,"1230":1,"1247":7,"1270":2,"1271":4,"1286":6,"1310":7,"1350":1,"1359":8,"1369":1,"1395":1,"1396":2,"1433":1,"1436":2,"1488":1,"1517":1,"1630":3,"1637":3,"1669":1,"1764":1,"1769":1,"1805":2,"1867":1,"2062":1,"2063":1}}],["classifiers",{"3":{"1368":1}}],["classifier",{"3":{"593":1,"1019":1,"1243":1,"1286":3,"1323":2,"1339":1,"1402":1,"1423":1,"1436":7,"1453":2,"1455":5,"1488":1,"1492":1,"1496":18,"1531":1,"1630":1}}],["classifies",{"0":{"1222":1},"3":{"100":1,"564":1,"626":1,"893":1,"988":1,"1229":3,"1245":1,"1247":2,"1284":2,"1286":9,"1300":1,"1310":1,"1311":3,"1324":1,"1339":1,"1359":3,"1395":1,"1396":2,"1425":1,"1436":3,"1453":1,"1455":1,"1840":1,"1868":1}}],["classified",{"3":{"10":2,"109":1,"110":1,"539":1,"1006":1,"1091":1,"1184":1,"1229":1,"1260":1,"1266":1,"1270":1,"1286":1,"1289":1,"1300":2,"1304":1,"1309":1,"1310":1,"1324":1,"1359":3,"1391":1,"1395":1,"1443":1,"1567":1}}],["classifystatus",{"3":{"1359":11}}],["classifyfailure",{"3":{"1300":3}}],["classifyentries",{"3":{"1286":4}}],["classifynavigationproperty",{"3":{"1247":1,"1310":1}}],["classifying",{"3":{"109":1,"110":1,"1247":1,"1286":5,"1310":1,"1350":1,"1359":2,"1393":1,"1396":2,"1436":1,"1445":1,"2069":1}}],["classify",{"0":{"1865":1},"2":{"1495":1,"1501":1},"3":{"0":1,"107":1,"620":1,"692":1,"1191":1,"1222":2,"1229":1,"1247":1,"1286":5,"1300":1,"1324":1,"1339":1,"1350":2,"1359":1,"1395":1,"1433":1,"1436":4,"1467":1,"1488":1,"1495":1,"1496":24,"1498":1,"1501":1,"1524":1,"1526":1,"1807":1,"1865":1,"1940":1}}],["classic",{"3":{"0":3,"31":1,"208":1,"481":1,"801":1,"828":1,"963":1,"979":1,"980":7,"981":1,"982":1,"1212":2,"1229":1,"1237":2,"1247":1,"1270":1,"1300":3,"1311":4,"1323":1,"1324":5,"1339":1,"1350":1,"1359":1,"1380":1,"1395":2,"1396":1,"1415":1,"1416":1,"1417":5,"1427":1,"1436":7,"1441":1,"1467":2,"1488":1,"1585":1,"1652":1,"1664":1,"1796":1,"1897":1,"1993":1,"2007":1,"2045":1}}],["classes",{"0":{"1988":1},"1":{"1056":1,"1057":1,"1058":1,"1059":1,"1060":1,"1061":1,"1062":1,"1063":1},"3":{"0":10,"4":1,"7":1,"47":1,"48":1,"130":1,"132":1,"135":1,"136":1,"137":1,"140":1,"160":1,"314":1,"511":1,"513":1,"591":1,"616":5,"618":2,"657":1,"672":1,"674":4,"676":1,"677":1,"728":1,"794":1,"926":1,"954":2,"960":1,"980":1,"983":1,"1056":1,"1117":1,"1168":2,"1175":1,"1192":2,"1202":1,"1203":1,"1211":1,"1212":4,"1214":1,"1229":1,"1234":1,"1237":5,"1247":1,"1259":1,"1270":1,"1271":6,"1279":1,"1286":12,"1300":4,"1309":2,"1310":2,"1311":1,"1312":3,"1316":1,"1321":1,"1323":11,"1324":7,"1330":1,"1339":4,"1340":1,"1350":5,"1352":1,"1359":9,"1360":1,"1363":1,"1369":3,"1385":1,"1395":2,"1396":5,"1399":1,"1416":2,"1417":5,"1428":3,"1431":1,"1433":1,"1436":50,"1437":1,"1438":3,"1443":1,"1450":1,"1487":1,"1488":5,"1489":7,"1496":18,"1497":4,"1498":2,"1500":1,"1523":1,"1525":1,"1526":3,"1531":1,"1534":1,"1535":1,"1538":1,"1539":1,"1551":1,"1577":3,"1582":1,"1583":1,"1588":1,"1590":1,"1591":5,"1600":2,"1653":1,"1654":1,"1662":2,"1666":1,"1685":1,"1782":1,"1808":1,"1810":1,"1811":1,"1850":1,"1854":1,"1931":2,"1951":2,"1956":1,"1957":1,"1958":1,"1959":1,"1986":1,"1991":1,"2042":2,"2055":1,"2060":1,"2070":1,"2080":1,"2088":1,"2101":1,"2102":1,"2104":1,"2114":1,"2126":1,"2138":2,"2178":1,"2203":1,"2232":1}}],["class",{"0":{"1273":1,"1361":1,"1849":1},"1":{"1031":1,"1032":1,"1033":1,"1034":1,"1035":1,"1036":1,"1037":1,"1038":1},"2":{"1319":1,"1619":1,"1994":1},"3":{"0":11,"5":1,"6":1,"7":1,"11":1,"24":1,"45":2,"47":3,"53":1,"138":1,"150":1,"164":1,"167":1,"189":1,"214":1,"216":1,"230":1,"233":3,"235":3,"236":1,"237":1,"243":1,"253":1,"258":3,"264":1,"265":1,"283":2,"305":2,"318":3,"322":1,"326":1,"340":1,"343":1,"350":1,"364":1,"412":1,"428":1,"446":1,"448":2,"450":1,"455":1,"459":2,"463":3,"464":1,"492":1,"497":1,"511":1,"516":1,"523":1,"524":1,"534":1,"536":2,"537":2,"543":1,"545":2,"554":1,"555":1,"557":1,"573":1,"610":1,"616":1,"618":5,"619":1,"621":1,"633":2,"635":1,"639":1,"640":2,"657":2,"659":3,"660":1,"672":1,"674":5,"675":3,"676":1,"677":1,"681":1,"682":1,"715":1,"720":1,"724":2,"725":2,"726":2,"733":2,"741":1,"776":1,"793":2,"794":1,"797":1,"798":1,"801":1,"805":1,"811":1,"819":1,"821":1,"826":1,"827":1,"831":1,"832":2,"847":1,"855":1,"861":1,"862":1,"880":1,"882":1,"889":1,"893":1,"905":1,"910":1,"923":1,"926":1,"955":2,"963":2,"974":1,"979":1,"980":2,"989":2,"990":1,"1006":1,"1031":1,"1032":1,"1033":2,"1034":3,"1035":2,"1048":1,"1051":1,"1061":2,"1067":1,"1075":1,"1083":1,"1085":1,"1087":1,"1102":1,"1133":1,"1137":1,"1146":1,"1156":1,"1167":3,"1168":3,"1170":2,"1171":1,"1173":1,"1175":2,"1176":2,"1177":2,"1179":1,"1185":1,"1187":1,"1191":1,"1201":1,"1203":1589,"1204":1,"1205":1,"1207":4315,"1212":7,"1214":2,"1215":1,"1221":1,"1229":14,"1231":1,"1233":1,"1234":1,"1236":1,"1237":54,"1239":3,"1240":1,"1241":1,"1244":1,"1247":85,"1249":1,"1257":1,"1258":1,"1259":68,"1262":1,"1265":1,"1269":1,"1270":76,"1271":32,"1273":4,"1275":1,"1276":1,"1277":1,"1279":1,"1280":3,"1286":321,"1288":1,"1291":2,"1295":1,"1297":1,"1300":180,"1301":26,"1304":1,"1305":1,"1309":93,"1310":14,"1311":163,"1312":25,"1316":1,"1317":1,"1319":2,"1320":2,"1321":2,"1322":1,"1323":186,"1324":327,"1326":1,"1329":1,"1330":1,"1339":156,"1344":2,"1346":1,"1350":123,"1352":2,"1353":1,"1354":1,"1359":582,"1361":3,"1363":2,"1365":1,"1366":2,"1369":86,"1371":1,"1372":2,"1373":5,"1374":1,"1375":1,"1376":1,"1377":1,"1380":114,"1381":1,"1383":1,"1385":1,"1392":1,"1395":272,"1396":340,"1402":108,"1404":1,"1405":2,"1406":4,"1407":1,"1410":1,"1412":1,"1414":1,"1415":208,"1416":45,"1417":165,"1427":30,"1429":2,"1432":2,"1433":1,"1436":846,"1437":4,"1438":5,"1441":3,"1443":3,"1444":1,"1453":3,"1454":1,"1467":4,"1486":1,"1488":10,"1489":9,"1491":3,"1496":9,"1498":1,"1510":2,"1526":3,"1534":2,"1538":1,"1566":1,"1568":1,"1571":1,"1577":3,"1591":1,"1597":1,"1613":1,"1619":1,"1641":2,"1651":2,"1654":3,"1664":2,"1665":1,"1668":1,"1672":1,"1675":1,"1685":2,"1686":1,"1697":1,"1701":1,"1713":1,"1714":1,"1719":1,"1734":1,"1776":1,"1789":1,"1794":1,"1796":1,"1805":3,"1808":1,"1810":2,"1811":2,"1813":1,"1826":1,"1831":1,"1834":2,"1847":1,"1849":5,"1853":1,"1854":2,"1856":5,"1857":4,"1861":1,"1862":2,"1865":1,"1868":1,"1889":1,"1896":1,"1909":2,"1941":1,"1944":1,"1952":1,"1955":3,"1956":2,"1958":3,"1962":1,"1987":1,"1994":1,"1995":5,"1996":1,"1997":1,"2002":1,"2012":1,"2017":1,"2042":1,"2043":1,"2054":1,"2058":2,"2066":1,"2070":1,"2073":1,"2074":1,"2077":1,"2087":1,"2099":1,"2104":1,"2105":1,"2107":1,"2116":1,"2122":1,"2131":2,"2132":1,"2137":1,"2139":1,"2150":1,"2156":1,"2163":3,"2165":5,"2167":2,"2169":1,"2178":1,"2187":1,"2194":1,"2198":1,"2199":1,"2215":1,"2232":4}}],["clamppagesize",{"3":{"1324":1}}],["clamping",{"3":{"740":1,"1017":1,"1396":4,"1417":2,"1427":2,"2174":1}}],["clamp",{"2":{"1242":1},"3":{"330":1,"331":1,"337":1,"744":1,"1019":1,"1229":1,"1242":1,"1243":1,"1244":2,"1247":11,"1292":1,"1300":1,"1306":1,"1309":2,"1311":4,"1369":3,"1387":1,"1395":2,"1396":7,"1415":5,"1427":1,"1438":1,"1496":1,"1577":3,"1586":1,"1986":1,"1988":1,"1991":2,"2180":1}}],["clamped",{"3":{"279":1,"337":1,"682":1,"741":1,"1018":2,"1090":1,"1094":1,"1228":1,"1229":3,"1243":1,"1247":2,"1256":1,"1259":2,"1275":1,"1292":1,"1309":2,"1311":4,"1324":2,"1366":1,"1396":12,"1415":2,"1417":1,"1418":1,"1435":1,"1438":3,"1817":1,"2174":1}}],["clamps",{"3":{"0":1,"330":3,"337":1,"549":1,"741":1,"744":1,"1018":1,"1091":1,"1092":1,"1094":1,"1242":1,"1245":1,"1247":1,"1286":1,"1300":1,"1306":1,"1311":4,"1324":1,"1366":1,"1369":1,"1380":2,"1395":3,"1396":2,"1406":1,"1409":1,"1415":1,"1422":1,"1427":3,"1988":1,"2201":1}}],["claude",{"0":{"1459":1},"2":{"636":1,"1003":1,"1190":1,"1451":1,"1459":1,"1460":1,"1571":1,"1658":1,"2049":1,"2060":1},"3":{"1":1,"469":1,"550":1,"599":3,"626":2,"636":1,"766":1,"1003":1,"1004":2,"1018":1,"1190":1,"1192":1,"1211":1,"1270":2,"1286":3,"1300":6,"1311":1,"1323":1,"1339":3,"1366":1,"1369":1,"1380":1,"1415":1,"1436":15,"1440":1,"1451":2,"1452":1,"1453":2,"1454":1,"1459":32,"1460":4,"1461":2,"1467":2,"1470":1,"1496":10,"1526":1,"1571":1,"1576":1,"1577":5,"1582":1,"1591":3,"1617":1,"1649":1,"1658":2,"1838":1,"1895":1,"2041":1,"2049":1,"2060":1,"2213":1,"2219":1,"2220":1,"2225":1,"2239":4,"2243":1}}],["clauses",{"3":{"699":1,"1229":1,"1238":1,"1245":1,"1247":2,"1270":1,"1286":3,"1324":2,"1339":2,"1359":3,"1395":1,"1415":2,"1425":1,"1436":1,"1815":2}}],["clause",{"3":{"0":3,"109":1,"110":1,"145":1,"341":1,"342":1,"343":1,"697":1,"703":1,"887":1,"889":2,"890":3,"892":1,"988":2,"1073":1,"1075":1,"1132":1,"1220":1,"1229":1,"1237":2,"1241":2,"1247":5,"1263":1,"1271":3,"1274":1,"1281":1,"1286":14,"1300":1,"1309":1,"1311":2,"1323":2,"1324":2,"1339":2,"1350":2,"1359":11,"1369":1,"1396":1,"1402":1,"1412":1,"1415":7,"1416":5,"1427":1,"1436":4,"1456":1,"1662":1,"1813":2,"1817":1,"1844":1,"1859":1,"1869":1,"1872":1,"1877":1,"1987":1,"1991":1,"2232":2}}],["claimvalue",{"3":{"1415":1}}],["claimbaseduseridprovidertests",{"3":{"1199":1,"1207":4}}],["claimbaseduseridprovider",{"2":{"1296":1,"1935":1},"3":{"1199":3,"1203":1,"1207":2,"1287":1,"1296":3,"1300":9,"1309":1,"1935":1}}],["claimdueasync",{"2":{"2188":1},"3":{"1042":1,"2188":1}}],["claimwait",{"2":{"1099":1},"3":{"996":1,"1099":1,"1270":1,"1359":1,"1402":2}}],["claimtoken",{"3":{"1286":1}}],["claimtimetolive",{"2":{"1099":1},"3":{"996":1,"1099":1,"1270":1,"1359":1,"1402":2}}],["claimtype",{"3":{"318":1,"698":1,"1286":2,"1300":4,"1311":1,"1323":1,"1396":1,"1994":1}}],["claimtypes",{"2":{"157":1,"161":1,"246":1,"303":2,"324":1,"954":1,"1296":1,"1372":1,"1995":1,"1996":1,"2138":1},"3":{"157":1,"161":1,"186":1,"246":1,"303":2,"318":2,"324":2,"954":1,"1296":1,"1300":13,"1311":5,"1323":1,"1372":1,"1380":5,"1396":5,"1436":7,"1962":1,"1995":1,"1996":1,"2138":1}}],["claiming",{"0":{"1255":1},"3":{"862":1,"1018":1,"1049":1,"1247":1,"1259":2,"1270":1,"1286":1,"1311":1,"1323":3,"1324":1,"1359":1,"1402":1,"1436":2,"1801":1,"1841":1,"1891":1}}],["claimants",{"3":{"1436":1}}],["claimant",{"3":{"708":1,"1436":3,"2188":1,"2193":1}}],["claimable",{"3":{"353":1,"995":1,"1259":2,"1323":1,"1406":1,"1415":1,"1977":1}}],["claimeligibleasync",{"3":{"707":1,"1259":1}}],["claimeduntil",{"3":{"1286":4,"2186":1}}],["claimedby",{"3":{"1286":3,"2186":1}}],["claimed",{"1":{"2129":1,"2130":1,"2131":1,"2132":1,"2133":1},"3":{"82":1,"137":1,"164":1,"477":1,"499":1,"660":1,"690":1,"696":1,"707":2,"709":1,"876":1,"927":1,"995":1,"1237":1,"1247":1,"1259":5,"1279":1,"1286":6,"1290":1,"1300":1,"1311":1,"1323":3,"1324":1,"1339":3,"1359":1,"1380":1,"1415":1,"1436":3,"1489":1,"1496":3,"1779":1,"1948":1,"2118":1,"2123":1,"2128":1,"2129":1,"2139":1,"2181":1,"2210":1}}],["claimkey",{"2":{"524":1},"3":{"524":1,"996":1,"1359":1,"1402":1}}],["claimsidentity",{"3":{"1300":2,"1323":2,"1324":2,"1436":6}}],["claimsonlysessioncookieendpointstests",{"3":{"1199":1,"1207":3,"1300":2,"1438":1}}],["claimsonlybrowsertokens",{"2":{"1184":1},"3":{"1184":1,"1300":4,"1324":1}}],["claimsprincipal",{"2":{"1296":1,"2186":1},"3":{"507":1,"1042":1,"1286":2,"1296":1,"1300":19,"1309":2,"1311":1,"1323":3,"1324":1,"1396":1,"1415":1,"1432":1,"1436":8,"2186":1}}],["claimsprincipalextensionstests",{"3":{"906":1,"1199":1,"1207":2}}],["claimsprincipalextensions",{"2":{"126":1,"186":1,"246":1,"905":1,"1059":2,"1270":1,"1289":1,"1293":1,"1296":1,"1662":1},"3":{"0":1,"126":3,"157":1,"161":1,"186":2,"246":2,"303":1,"649":1,"905":4,"907":1,"1059":4,"1199":1,"1203":1,"1207":2,"1270":2,"1287":1,"1289":1,"1293":3,"1296":5,"1297":2,"1300":35,"1311":4,"1395":3,"1436":1,"1662":1,"2138":1}}],["claims",{"0":{"1296":1},"3":{"0":5,"15":1,"20":2,"24":1,"43":1,"93":1,"109":1,"181":1,"186":2,"191":1,"207":1,"208":1,"209":2,"259":1,"265":1,"303":1,"344":1,"350":2,"499":2,"507":1,"531":1,"538":1,"571":1,"592":1,"611":1,"649":1,"690":1,"691":1,"696":1,"697":1,"707":2,"720":1,"727":1,"749":1,"857":1,"905":1,"972":1,"973":1,"996":1,"1018":1,"1042":1,"1059":2,"1184":3,"1185":1,"1186":1,"1192":1,"1202":1,"1203":1,"1255":1,"1259":4,"1270":2,"1275":1,"1286":3,"1287":1,"1288":2,"1289":2,"1296":2,"1300":61,"1309":2,"1311":13,"1317":1,"1323":7,"1324":12,"1339":5,"1355":1,"1359":4,"1369":1,"1377":1,"1380":2,"1396":9,"1402":9,"1405":1,"1406":1,"1415":10,"1416":1,"1436":22,"1438":4,"1449":2,"1488":1,"1489":1,"1492":1,"1496":3,"1526":1,"1577":1,"1627":1,"1631":1,"1632":3,"1638":1,"1639":1,"1641":6,"1653":1,"1665":1,"1747":1,"1765":1,"1771":1,"1801":1,"1825":1,"1841":1,"1862":1,"1897":3,"1947":1,"1948":1,"1963":1,"1968":2,"1971":2,"1972":2,"1975":2,"1982":1,"2045":1,"2046":1,"2053":1,"2078":1,"2168":1,"2188":1,"2194":1}}],["claim",{"0":{"2056":1,"2188":1,"2190":1,"2197":1},"1":{"704":1,"705":1,"706":1,"707":1,"708":1,"709":1,"710":1,"711":1,"969":1,"970":1,"971":1,"972":1,"973":1,"974":1,"975":1,"976":1},"2":{"494":1,"495":1,"1997":1},"3":{"0":28,"15":1,"20":1,"22":2,"24":3,"26":1,"31":1,"46":1,"62":1,"72":1,"103":1,"115":1,"121":1,"126":4,"145":1,"157":1,"161":1,"173":3,"175":1,"186":7,"191":1,"197":1,"246":1,"250":1,"251":1,"252":1,"254":2,"256":1,"257":1,"258":1,"259":1,"279":2,"298":2,"303":3,"318":18,"320":6,"321":1,"322":2,"323":1,"324":3,"325":1,"326":4,"344":2,"349":1,"350":4,"351":1,"352":2,"365":1,"372":1,"373":1,"400":1,"403":1,"426":1,"447":1,"449":1,"459":1,"463":1,"464":1,"465":1,"477":1,"489":1,"490":2,"491":1,"492":1,"493":1,"494":1,"495":1,"497":3,"498":1,"499":2,"500":1,"518":1,"520":1,"524":4,"526":1,"538":1,"543":2,"550":1,"554":1,"574":1,"582":1,"592":1,"638":1,"650":1,"690":1,"696":1,"698":5,"700":1,"703":1,"704":1,"707":4,"708":1,"709":1,"710":1,"711":1,"743":1,"748":1,"749":1,"758":1,"764":2,"799":2,"800":2,"811":1,"833":1,"862":1,"903":3,"905":9,"906":3,"907":3,"909":1,"959":1,"969":1,"971":3,"972":4,"973":1,"976":1,"994":1,"995":5,"996":3,"999":1,"1000":2,"1018":3,"1019":1,"1021":1,"1022":1,"1041":1,"1042":2,"1043":1,"1046":1,"1057":1,"1058":1,"1059":6,"1060":1,"1061":1,"1063":1,"1066":1,"1067":1,"1074":1,"1075":1,"1085":1,"1099":3,"1100":3,"1103":2,"1104":1,"1108":1,"1116":1,"1118":1,"1212":4,"1213":1,"1232":1,"1233":1,"1237":5,"1247":1,"1255":3,"1256":1,"1259":18,"1263":1,"1269":1,"1270":17,"1275":2,"1276":2,"1281":1,"1286":27,"1288":3,"1289":2,"1290":3,"1293":1,"1296":6,"1297":5,"1300":135,"1304":1,"1309":2,"1311":27,"1317":2,"1318":1,"1323":29,"1324":10,"1339":3,"1348":2,"1349":1,"1350":3,"1357":1,"1358":2,"1359":35,"1367":2,"1369":1,"1372":4,"1373":2,"1375":1,"1376":1,"1380":27,"1388":2,"1389":2,"1395":20,"1396":21,"1402":28,"1405":1,"1406":4,"1409":2,"1410":1,"1413":1,"1414":1,"1415":36,"1416":1,"1430":1,"1432":1,"1436":31,"1438":16,"1441":1,"1449":2,"1450":1,"1473":1,"1474":3,"1488":1,"1491":2,"1496":6,"1525":1,"1526":1,"1534":1,"1577":2,"1582":1,"1583":1,"1621":3,"1626":1,"1627":3,"1631":2,"1632":2,"1638":1,"1639":3,"1640":1,"1641":12,"1660":1,"1664":2,"1665":1,"1667":2,"1668":1,"1719":2,"1723":2,"1724":2,"1757":1,"1761":1,"1771":1,"1778":1,"1797":2,"1821":1,"1825":1,"1841":1,"1848":1,"1849":1,"1851":4,"1896":1,"1908":1,"1933":1,"1947":1,"1948":2,"1950":2,"1962":4,"1965":2,"1974":1,"1977":2,"1978":1,"1979":1,"1982":2,"1983":1,"1984":1,"1985":1,"1994":7,"1995":8,"1996":10,"1997":6,"2000":1,"2002":1,"2043":3,"2048":1,"2049":1,"2053":1,"2060":1,"2077":1,"2085":1,"2109":1,"2110":1,"2122":1,"2125":1,"2129":1,"2138":2,"2143":1,"2168":1,"2183":1,"2186":3,"2189":1,"2190":1,"2193":3,"2194":1,"2197":7,"2202":2,"2203":2,"2215":1,"2220":1,"2232":3,"2236":1}}],["cuba",{"3":{"2220":1,"2222":1}}],["cu27",{"3":{"1453":1}}],["cumulative",{"3":{"1443":1,"1467":1}}],["cultural",{"3":{"1436":1}}],["culture+theme",{"3":{"1438":1}}],["cultureandtheme",{"3":{"1436":1}}],["cultureinvariant",{"3":{"1350":1,"1427":1,"1436":1}}],["cultureinfo",{"2":{"265":1,"1236":1,"1324":1},"3":{"265":3,"1050":1,"1236":1,"1237":3,"1241":1,"1247":5,"1270":1,"1271":6,"1286":3,"1300":11,"1309":15,"1311":4,"1312":3,"1323":6,"1324":38,"1339":2,"1350":5,"1359":13,"1380":2,"1395":31,"1396":14,"1402":4,"1415":5,"1416":2,"1417":16,"1427":1,"1436":3,"1591":1}}],["culture=",{"3":{"1311":1,"1436":1}}],["cultureendpointtests",{"3":{"1199":1,"1207":2}}],["culturedelegatinghandler",{"2":{"2083":1,"2086":1},"3":{"265":2,"881":1,"1199":2,"1203":1,"1207":2,"1324":11,"1496":1,"2083":2,"2086":1}}],["cultureswitch",{"3":{"1436":1}}],["cultureswitchertests",{"3":{"1199":1,"1207":3,"1438":2}}],["cultureswitcher",{"2":{"273":1,"276":1},"3":{"1324":5,"1577":1,"2083":2}}],["culturescope",{"3":{"1199":2,"1207":1}}],["cultures",{"3":{"265":1,"1108":1,"1300":1,"1311":3,"1324":4,"1417":1,"1436":4,"1487":1,"1564":1,"1591":2,"1666":1,"2083":1}}],["culture",{"3":{"0":6,"86":3,"87":1,"263":1,"264":1,"265":41,"267":1,"268":1,"269":1,"273":1,"415":3,"459":1,"485":1,"555":1,"556":1,"558":1,"560":2,"684":1,"686":1,"861":1,"1050":1,"1108":2,"1111":1,"1192":2,"1203":4,"1207":8,"1230":1,"1236":3,"1237":4,"1241":1,"1247":3,"1271":5,"1286":2,"1291":1,"1296":3,"1300":24,"1305":1,"1309":4,"1311":43,"1312":5,"1318":1,"1323":12,"1324":149,"1339":1,"1344":1,"1350":2,"1359":12,"1379":1,"1380":2,"1394":2,"1395":18,"1396":18,"1402":3,"1405":1,"1415":23,"1416":6,"1417":53,"1436":29,"1438":9,"1496":4,"1513":1,"1526":2,"1534":1,"1564":4,"1577":5,"1591":3,"1596":1,"1600":1,"1607":1,"1608":1,"1644":1,"1653":5,"1660":1,"1662":1,"1666":2,"1669":3,"1687":1,"1741":1,"1742":1,"1747":2,"1994":1,"2048":2,"2081":1,"2082":3,"2083":11,"2084":1,"2085":5,"2086":6,"2232":1}}],["culprit",{"3":{"1324":1,"1456":1}}],["cues",{"3":{"1417":1}}],["cue",{"3":{"353":1,"1324":1,"1417":3,"1641":2}}],["curriculum",{"3":{"1779":1,"1786":1,"2204":1,"2236":1}}],["currencies",{"3":{"1237":1,"1324":1}}],["currencymismatch",{"3":{"1234":1,"1237":2,"1311":1}}],["currencytests",{"3":{"1199":1,"1207":2}}],["currencyjsonconvertertests",{"3":{"1199":2,"1207":4}}],["currencyjsonconverter",{"2":{"659":1,"660":1,"964":1,"1230":1,"1235":1},"3":{"657":1,"659":1,"660":1,"964":1,"1198":1,"1199":4,"1203":2,"1207":3,"1230":1,"1234":1,"1235":1,"1237":9,"1311":11}}],["currency",{"2":{"655":1,"658":1,"659":1,"660":2},"3":{"0":2,"86":1,"124":1,"125":1,"536":1,"655":1,"656":1,"657":25,"658":5,"659":7,"660":8,"790":1,"1011":1,"1026":1,"1198":1,"1199":16,"1203":1,"1207":3,"1230":2,"1234":13,"1237":75,"1270":1,"1282":1,"1286":12,"1300":1,"1311":17,"1323":1,"1324":19,"1438":1,"1498":1,"1506":1,"1564":1,"1585":1,"1591":2,"1600":3,"1662":2,"1685":1,"1687":1,"1764":8,"1765":1,"1767":4,"1770":1,"1810":1}}],["currentisdirty",{"3":{"1577":1}}],["currentdevicesessionid",{"3":{"1436":1}}],["currentdomain",{"3":{"1286":1}}],["currentfixtimeout",{"3":{"1417":2}}],["currentformatversion",{"3":{"1300":1,"1323":1,"1415":1}}],["currentgeneration",{"3":{"1395":3}}],["currentcount",{"3":{"1395":2}}],["currentculture",{"3":{"265":5,"1300":1,"1324":11,"1395":4,"1396":5,"1402":1,"1417":1,"1591":2,"1600":1}}],["currenteditcontext",{"3":{"1324":1}}],["currenteventdefaultstests",{"3":{"1199":1,"1207":2}}],["currenteventdefaults",{"2":{"1348":1,"1391":1},"3":{"1199":5,"1203":1,"1207":2,"1348":2,"1350":7,"1391":1,"1395":6,"1496":1}}],["currenteventselectortests",{"3":{"1199":1,"1207":3,"1437":1}}],["currenteventselector",{"2":{"1348":1,"1383":1,"1392":1,"1393":2,"1401":1},"3":{"1199":16,"1203":1,"1207":2,"1348":6,"1350":28,"1355":1,"1356":1,"1359":7,"1383":1,"1392":2,"1393":2,"1395":28,"1396":4,"1401":1,"1496":1}}],["currenteventnotificationscopeprovidertests",{"2":{"1487":1},"3":{"1199":1,"1207":2,"1396":1,"1438":1,"1487":1}}],["currenteventnotificationscopeprovider",{"2":{"1305":1},"3":{"1199":3,"1203":1,"1207":2,"1305":2,"1309":2,"1324":2,"1396":7,"1438":1}}],["currentpasswordfield",{"3":{"1436":1}}],["currentpassword",{"3":{"1300":2,"1324":1,"1415":3,"1436":1,"1641":1}}],["currentpagestate",{"3":{"1324":2}}],["currentpage",{"3":{"1227":1,"1229":2,"1324":9,"1417":1,"1526":1,"1631":1,"1805":1}}],["currentmultifactormethod",{"3":{"1300":2}}],["currentsessionid",{"3":{"1300":7}}],["currentsaveuserid",{"3":{"1273":1,"1274":1,"1286":5}}],["currenttransaction",{"3":{"1286":3}}],["currenttype",{"3":{"1247":1}}],["currenttenantid",{"2":{"1851":1},"3":{"698":3,"1237":2,"1276":3,"1286":10,"1851":2}}],["currentvalues",{"3":{"1286":1}}],["currentvalue",{"3":{"698":1,"715":1,"1231":1,"1237":1,"1274":1,"1286":3}}],["currentuiculture",{"3":{"265":7,"1324":6,"1416":2,"1417":5}}],["currentuserrole",{"3":{"725":1,"1322":1,"1323":5,"1415":10}}],["currentuserid",{"2":{"727":1},"3":{"725":1,"727":1,"1311":1,"1322":1,"1323":3,"1324":2,"1415":6}}],["currentuserservicetests",{"3":{"1199":1,"1207":4}}],["currentuserserviceadditionaltests",{"3":{"1199":1,"1207":2}}],["currentuserserviceextensionstests",{"3":{"1199":1,"1207":2,"1271":2}}],["currentuserserviceextensions",{"2":{"1373":1},"3":{"388":2,"980":1,"1199":3,"1203":2,"1207":4,"1208":2,"1271":11,"1350":2,"1373":3,"1380":19,"1396":8,"1496":1}}],["currentuserservice",{"2":{"303":1,"1208":1,"1296":1,"1308":1,"1359":1,"1380":1},"3":{"303":1,"318":1,"1199":8,"1203":1,"1207":2,"1208":2,"1259":2,"1271":3,"1286":6,"1287":1,"1296":6,"1300":23,"1308":1,"1309":2,"1311":10,"1318":1,"1323":1,"1359":15,"1372":1,"1380":16,"1396":7,"1402":1,"1415":3}}],["currentuser",{"3":{"121":1,"126":1,"1270":6,"1415":2}}],["currentusertargetingcontextaccessortests",{"3":{"1199":1,"1207":2,"1438":2}}],["currentusertargetingcontextaccessor",{"2":{"303":1,"2138":1},"3":{"0":1,"303":2,"1199":3,"1203":1,"1207":2,"1300":2,"1311":7,"2138":3}}],["currently",{"3":{"54":1,"72":1,"85":1,"135":1,"273":1,"306":1,"370":1,"422":1,"547":1,"678":1,"751":2,"800":1,"811":1,"839":1,"996":1,"1018":1,"1229":1,"1247":1,"1259":1,"1270":2,"1271":1,"1286":7,"1300":4,"1301":1,"1305":1,"1309":4,"1311":2,"1323":3,"1324":9,"1339":1,"1350":1,"1359":5,"1369":2,"1378":1,"1395":1,"1396":4,"1415":4,"1417":2,"1436":7,"1480":1,"1576":1,"1632":1,"1634":1,"1639":2,"1733":1,"1764":1,"1896":1,"1929":1,"2036":1,"2085":1,"2132":1,"2218":1}}],["currentoutboxorigin",{"2":{"26":1,"1253":1},"3":{"26":1,"1253":1,"1259":3,"1286":4}}],["current",{"0":{"720":1,"1348":1},"2":{"452":1,"453":1,"682":1,"1246":1,"1416":1,"1425":1},"3":{"0":5,"25":1,"27":2,"29":1,"39":1,"57":1,"63":1,"74":1,"86":1,"87":1,"100":1,"112":1,"115":1,"137":2,"140":1,"142":1,"145":4,"152":2,"157":1,"164":1,"173":1,"181":1,"198":1,"202":1,"220":1,"227":1,"250":1,"251":1,"252":2,"254":1,"256":1,"257":2,"258":1,"259":1,"263":1,"273":1,"281":2,"285":3,"308":1,"309":1,"310":2,"311":1,"312":4,"328":1,"336":2,"337":1,"341":1,"342":1,"345":1,"353":2,"354":1,"359":5,"360":2,"361":1,"364":1,"365":5,"366":1,"375":1,"393":1,"395":8,"397":1,"407":1,"429":1,"434":1,"448":1,"451":1,"452":1,"453":1,"463":1,"464":2,"465":1,"466":1,"474":1,"476":1,"483":1,"497":4,"499":1,"502":1,"507":1,"512":1,"514":1,"520":1,"526":2,"534":1,"540":1,"552":2,"554":3,"559":1,"562":1,"567":1,"574":1,"583":1,"609":1,"613":1,"618":1,"621":1,"624":1,"629":1,"635":1,"649":1,"669":1,"682":1,"684":2,"696":2,"703":1,"707":2,"710":1,"714":1,"716":1,"720":1,"761":1,"777":1,"794":2,"810":1,"814":1,"825":4,"827":1,"833":2,"841":1,"849":1,"850":1,"873":1,"876":1,"877":1,"895":1,"905":3,"906":2,"907":1,"909":2,"910":1,"912":2,"914":1,"927":1,"945":1,"946":1,"949":1,"960":1,"994":1,"996":1,"1018":2,"1021":3,"1062":1,"1065":1,"1067":1,"1069":1,"1085":1,"1086":1,"1095":1,"1111":1,"1116":2,"1117":1,"1119":2,"1127":1,"1128":1,"1139":1,"1140":3,"1141":1,"1145":1,"1167":1,"1171":1,"1178":1,"1192":2,"1202":1,"1203":1,"1212":1,"1220":1,"1229":3,"1232":1,"1237":5,"1246":2,"1247":2,"1251":1,"1259":4,"1260":1,"1262":1,"1264":1,"1270":8,"1271":2,"1273":1,"1275":1,"1276":2,"1282":1,"1284":2,"1286":43,"1287":1,"1298":1,"1300":31,"1301":1,"1309":5,"1311":23,"1312":2,"1318":1,"1323":13,"1324":43,"1332":1,"1333":1,"1337":1,"1339":19,"1342":1,"1349":1,"1350":5,"1356":2,"1357":2,"1359":16,"1364":1,"1380":1,"1391":1,"1392":2,"1395":50,"1396":22,"1401":1,"1402":6,"1415":16,"1416":12,"1417":31,"1425":2,"1427":7,"1431":1,"1435":1,"1436":21,"1437":1,"1438":5,"1447":1,"1451":1,"1453":1,"1455":2,"1461":1,"1465":1,"1467":4,"1473":1,"1476":2,"1478":1,"1479":1,"1481":1,"1484":2,"1487":3,"1488":1,"1492":1,"1496":33,"1500":1,"1521":1,"1526":2,"1531":1,"1561":1,"1570":1,"1571":2,"1572":1,"1577":3,"1589":1,"1591":3,"1600":1,"1610":1,"1627":1,"1630":4,"1631":2,"1632":4,"1638":1,"1639":5,"1640":2,"1641":7,"1648":2,"1661":1,"1664":1,"1686":2,"1716":1,"1744":1,"1747":1,"1748":1,"1749":1,"1764":1,"1765":3,"1767":1,"1805":1,"1813":1,"1839":1,"1844":1,"1860":1,"1871":1,"1872":2,"1904":1,"1905":1,"1933":1,"1936":1,"1948":1,"1968":1,"1988":1,"2010":1,"2019":1,"2024":1,"2046":1,"2060":1,"2072":1,"2077":1,"2083":1,"2096":1,"2101":1,"2131":1,"2133":1,"2142":5,"2146":1,"2163":1,"2225":1}}],["curiously",{"3":{"1237":1,"1286":1,"1300":1,"1436":1}}],["curl",{"3":{"387":1,"426":1,"757":1,"1455":1,"1467":1,"1874":1}}],["curating",{"3":{"1395":1}}],["curation",{"3":{"184":1,"186":1,"1348":1,"1350":1,"1359":3,"1377":1,"1380":6,"1621":2,"1627":1}}],["curates",{"3":{"1340":1,"1380":1,"1405":1,"1415":2}}],["curated",{"3":{"265":1,"1324":1,"1350":1,"1630":1}}],["curate",{"3":{"185":1,"1347":1,"1415":1,"1960":1}}],["curve",{"3":{"22":1,"23":2,"27":1,"709":1,"1300":1,"1833":1,"1958":1}}],["cursor",{"3":{"0":1,"549":3,"1228":5,"1229":21,"1272":1,"1278":1,"1286":16,"1438":4,"1664":1}}],["custommetrics",{"3":{"1467":1}}],["customdomainexception",{"3":{"1436":2}}],["customdeleteorderhandler",{"3":{"1199":2,"1207":1}}],["customincreaseorderhandler",{"3":{"1199":2,"1207":1}}],["customize",{"3":{"1416":1}}],["customizes",{"3":{"1355":1,"1436":1,"1438":1}}],["customized",{"3":{"749":1,"1436":1,"1438":1,"1825":1}}],["customizing",{"3":{"1311":2}}],["customization",{"3":{"471":1,"749":1,"751":1,"1311":4,"1436":3,"1438":1}}],["customloggingintegrationeventhandler",{"3":{"1199":2,"1207":1}}],["customschemacontext",{"3":{"1199":2,"1207":1}}],["customexceptionthrowingfixture",{"3":{"1199":2,"1207":1,"1436":2}}],["customerinvariants",{"2":{"1810":1},"3":{"1767":2,"1810":1}}],["customeridentifiertype",{"3":{"1771":1,"1810":1}}],["customerid",{"2":{"42":1,"1995":1},"3":{"42":1,"96":1,"318":1,"782":1,"1198":2,"1199":10,"1207":2,"1600":1,"1747":1,"1749":2,"1764":5,"1765":2,"1769":2,"1810":2,"1995":4}}],["customername",{"2":{"1686":1},"3":{"1684":1,"1686":14,"1727":4}}],["customerdetail",{"3":{"1591":2,"1596":1,"1600":1}}],["customerbuilder",{"3":{"1436":1}}],["customerlookupservice",{"3":{"1324":1}}],["customerlist",{"3":{"1324":1,"1591":2}}],["customervalidationrules",{"3":{"1271":1}}],["customeremailrules",{"3":{"1271":1,"1596":1}}],["customererasedhandlertests",{"3":{"1591":1}}],["customererasedhandler",{"2":{"391":1,"1748":1,"1922":1},"3":{"391":3,"897":1,"1259":2,"1748":1,"1765":1,"1769":1,"1922":1}}],["customererased",{"2":{"76":1,"391":1,"1597":1,"1748":1,"1751":1,"1769":1},"3":{"76":1,"80":2,"195":2,"391":1,"1591":3,"1596":1,"1597":1,"1748":1,"1751":1,"1765":1,"1769":2,"1922":1}}],["customerrenamedv3",{"3":{"1199":4,"1207":1}}],["customerrenamedv2",{"3":{"1199":6,"1207":1}}],["customerrenamedv1",{"3":{"1199":7,"1207":1}}],["customercreate",{"3":{"1596":2}}],["customercreaterequestvalidator",{"3":{"1271":2}}],["customercreaterequest",{"3":{"1270":1}}],["customerchangeaddressrequestvalidator",{"2":{"1271":1},"3":{"1271":3}}],["customerchanged",{"2":{"1747":1},"3":{"782":1,"1747":5,"1769":1}}],["customerconfiguration",{"3":{"657":2,"660":2,"1237":5,"1286":2,"1767":1,"1810":1}}],["customercontactlookupguard",{"2":{"103":1,"1596":1},"3":{"103":1,"1596":1}}],["customerservice",{"3":{"545":1,"550":1,"881":1,"1324":1}}],["customerscontroller",{"2":{"318":2,"324":3,"326":1,"1874":1},"3":{"318":8,"324":4,"326":2,"1300":4,"1311":4,"1874":1,"1995":6}}],["customersmanage",{"2":{"318":1,"324":1,"326":1,"1995":1},"3":{"318":4,"324":1,"326":1,"1311":1,"1995":1}}],["customersgrpcservice",{"2":{"103":1,"1589":1,"1596":1},"3":{"103":2,"1589":1,"1591":1,"1596":1}}],["customers",{"2":{"1757":1},"3":{"80":1,"317":1,"318":1,"320":1,"324":1,"545":1,"583":1,"657":1,"782":1,"1237":2,"1271":5,"1312":1,"1436":1,"1591":1,"1742":2,"1746":5,"1747":13,"1749":1,"1750":6,"1753":1,"1757":1,"1761":3,"1763":1,"1764":2,"1765":1,"1768":2,"1770":1,"1773":1,"1776":2,"1994":1,"1996":1}}],["customer",{"0":{"1754":1,"1759":1,"1851":1},"2":{"320":1,"655":1,"660":1,"924":1,"1747":3,"1757":2,"1761":1,"1771":1,"1983":1,"1992":1,"1996":1,"2113":1},"3":{"0":3,"42":2,"103":1,"188":1,"230":1,"317":3,"318":10,"320":2,"324":1,"326":1,"459":1,"536":2,"539":1,"544":1,"545":1,"655":1,"657":5,"660":1,"697":2,"699":1,"743":2,"782":1,"793":1,"809":1,"897":2,"900":1,"924":1,"990":1,"1026":1,"1237":8,"1259":1,"1270":3,"1271":2,"1286":3,"1288":1,"1297":1,"1300":7,"1310":1,"1323":4,"1339":1,"1395":1,"1427":1,"1436":5,"1488":2,"1577":1,"1589":2,"1591":3,"1595":1,"1596":4,"1597":1,"1600":1,"1686":7,"1687":1,"1701":1,"1727":1,"1746":5,"1747":17,"1748":5,"1749":4,"1750":9,"1751":3,"1754":1,"1755":1,"1757":5,"1759":1,"1760":3,"1761":3,"1763":1,"1764":24,"1765":29,"1767":15,"1768":21,"1769":11,"1770":3,"1771":8,"1772":1,"1773":2,"1775":2,"1776":5,"1777":4,"1851":2,"1875":1,"1906":1,"1907":1,"1964":1,"1983":1,"1992":6,"1993":2,"1994":2,"1995":10,"1996":3,"1997":1,"2110":1,"2113":2,"2161":1,"2163":1,"2165":2,"2181":2,"2189":1,"2220":1}}],["custom",{"3":{"0":4,"135":1,"216":3,"220":1,"273":1,"275":1,"335":1,"350":1,"355":1,"396":1,"397":1,"398":1,"399":1,"418":3,"420":2,"422":3,"481":1,"640":1,"645":1,"672":3,"676":1,"698":1,"735":1,"905":1,"1075":1,"1076":1,"1077":1,"1185":1,"1212":2,"1241":3,"1247":4,"1269":1,"1270":1,"1286":2,"1288":1,"1296":1,"1298":1,"1300":2,"1309":2,"1310":1,"1311":7,"1323":6,"1324":11,"1336":1,"1339":7,"1350":4,"1359":4,"1380":2,"1415":1,"1416":4,"1417":4,"1436":21,"1488":1,"1526":1,"1557":1,"1558":1,"1641":1,"1965":1,"1976":2,"2075":2,"2078":1,"2152":1,"2156":1,"2232":1}}],["cut",{"0":{"1932":1},"3":{"396":1,"397":2,"530":1,"610":1,"881":1,"914":1,"1044":1,"1161":1,"1254":1,"1259":2,"1277":1,"1311":1,"1324":3,"1352":1,"1359":1,"1367":1,"1395":1,"1396":2,"1417":1,"1436":7,"1454":2,"1456":1,"1467":4,"1491":1,"1496":1,"1526":1,"1534":2,"1653":1,"1661":1,"1677":2,"1695":1,"1727":1,"1736":1,"1783":1,"1788":1,"1841":1,"1941":1,"2010":1,"2063":1,"2158":1,"2192":1,"2209":1}}],["cutoffs",{"3":{"1160":1}}],["cutoff",{"3":{"24":1,"536":2,"905":1,"1162":1,"1254":1,"1256":1,"1259":5,"1286":2,"1712":2,"1713":1,"2167":4}}],["cutover",{"0":{"1473":1,"1478":1},"3":{"0":3,"25":2,"27":1,"57":1,"193":1,"198":1,"422":1,"425":1,"426":1,"429":1,"1192":2,"1300":1,"1416":2,"1436":1,"1466":1,"1467":4,"1470":1,"1471":4,"1473":5,"1474":1,"1478":8,"1482":3,"1483":4,"1484":3,"1496":1,"1534":2,"1577":2}}],["cuts",{"3":{"18":1,"409":1,"1259":1,"1286":1,"1311":2,"1324":1,"1351":1,"1467":1,"1831":1,"2158":1}}],["cutting",{"0":{"1362":1,"1753":1,"1774":1,"2066":1,"2208":1},"3":{"0":5,"57":1,"116":2,"117":1,"119":1,"122":1,"265":1,"396":1,"826":1,"834":1,"906":1,"914":1,"1011":1,"1191":1,"1192":1,"1200":1,"1202":1,"1203":1,"1210":1,"1212":2,"1216":1,"1231":1,"1232":1,"1259":1,"1260":1,"1261":2,"1267":1,"1270":4,"1271":3,"1273":1,"1281":1,"1286":10,"1300":1,"1309":3,"1311":5,"1312":1,"1313":1,"1316":1,"1323":2,"1324":8,"1326":1,"1338":1,"1339":2,"1350":1,"1359":4,"1395":2,"1396":2,"1415":4,"1428":1,"1431":1,"1436":7,"1437":3,"1450":1,"1496":1,"1502":1,"1507":1,"1509":1,"1526":2,"1534":1,"1536":2,"1542":1,"1547":1,"1565":1,"1571":1,"1577":4,"1591":1,"1599":1,"1630":1,"1656":1,"1662":1,"1664":2,"1780":1,"1796":1,"1810":1,"1818":2,"1819":1,"1820":1,"1827":3,"1834":1,"1856":1,"1879":1,"1914":1,"1916":1,"1937":1,"1941":1,"2008":1,"2022":1,"2069":1,"2070":1,"2074":1,"2092":1,"2096":1,"2134":1,"2139":3,"2148":1,"2211":1,"2220":2,"2230":1,"2232":1}}],["ccpa",{"3":{"0":1,"38":1,"1212":2,"1230":1,"1237":1,"1299":1,"1311":1,"1323":2,"1436":1,"1489":1,"1499":1,"1567":1,"1747":1,"1765":1,"2061":1,"2062":1,"2069":1,"2221":1,"2230":1,"2232":1}}],["camps",{"3":{"2225":1}}],["camp",{"3":{"1788":1}}],["camel",{"3":{"1686":2,"1727":2}}],["camelcasing",{"3":{"1311":1}}],["camelcased",{"3":{"1311":1,"1324":1}}],["camelcasename",{"3":{"1247":3}}],["camelcase",{"2":{"741":1,"2088":1},"3":{"0":1,"741":2,"1214":1,"1242":2,"1244":1,"1247":6,"1300":1,"1311":6,"1324":3,"1396":1,"1416":1,"1436":1,"2088":1}}],["came",{"3":{"26":1,"284":1,"291":1,"610":1,"633":1,"732":1,"743":1,"905":1,"941":1,"1081":1,"1083":1,"1091":1,"1115":1,"1247":2,"1253":1,"1259":4,"1286":3,"1300":1,"1301":2,"1311":2,"1312":1,"1323":1,"1324":7,"1339":1,"1350":1,"1359":2,"1369":2,"1395":1,"1396":1,"1402":1,"1417":2,"1436":3,"1438":2,"1467":1,"1474":1,"1476":1,"1728":1,"1764":1,"1790":1,"1926":1,"2097":1,"2186":1,"2204":1}}],["camerabarcodereaderview",{"3":{"1417":2}}],["cameras",{"3":{"1396":1,"1417":1}}],["camera=",{"3":{"214":1,"2149":1}}],["cameradescription",{"2":{"684":1},"3":{"0":1,"682":1,"684":1,"1416":1,"1417":3}}],["camera",{"2":{"681":1},"3":{"0":2,"413":2,"426":1,"439":1,"681":4,"682":4,"683":3,"684":1,"689":1,"690":1,"1212":1,"1323":1,"1339":1,"1395":1,"1396":12,"1414":1,"1415":1,"1416":3,"1417":58,"1438":2,"1627":1,"2126":1,"2232":2}}],["ca5392",{"2":{"1524":1},"3":{"1524":1,"1526":2,"1531":1}}],["ca5394",{"3":{"1259":1,"1324":1}}],["ca5359",{"3":{"1416":1}}],["ca5404",{"3":{"1300":1}}],["ca1822",{"3":{"1416":1}}],["ca1859",{"3":{"1300":1}}],["ca1819",{"3":{"1237":2,"1300":1,"1311":1,"1350":2,"1415":1}}],["ca1721",{"3":{"1300":1}}],["ca1708",{"3":{"0":1,"258":1,"980":1,"981":1,"982":1,"983":1,"1311":3,"1312":1,"1324":4,"1339":11,"1436":2,"1488":1}}],["ca1068",{"3":{"1436":1}}],["ca1008",{"3":{"1350":1,"1369":1,"1396":1}}],["ca1000",{"3":{"1237":1}}],["ca1055",{"3":{"1324":1}}],["ca1056",{"3":{"1300":1,"1324":1}}],["ca1054",{"3":{"1237":1,"1324":2,"1359":1,"1415":1}}],["ca1032",{"3":{"1312":4}}],["ca1033",{"3":{"1270":1}}],["ca1031",{"3":{"692":1,"1247":1,"1270":1,"1309":3,"1311":1,"1324":2,"1339":2,"1395":1,"1396":2,"1416":1,"1417":5,"1427":1,"1934":1}}],["ca1308",{"3":{"972":1,"1237":1,"1300":3,"1323":1,"1359":1,"1395":1,"1436":1}}],["ca2100",{"3":{"1436":2,"1490":1}}],["ca2000",{"3":{"1311":1,"1323":1,"1427":2}}],["ca2007",{"1":{"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1},"2":{"481":1,"482":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1},"3":{"0":2,"479":1,"481":1,"482":3,"483":2,"486":3,"487":3,"488":2,"489":3,"490":7,"491":7,"492":7,"493":6,"494":1,"1212":1,"2232":1}}],["ca2227",{"3":{"674":1,"1323":1}}],["cautious",{"3":{"1359":1,"1415":1}}],["cautionary",{"3":{"2025":1}}],["caution",{"3":{"543":2,"550":1,"1496":1}}],["caught",{"3":{"21":1,"39":2,"110":1,"178":1,"235":3,"237":1,"345":1,"361":1,"427":1,"459":2,"558":1,"618":2,"675":2,"725":1,"759":1,"776":1,"819":1,"837":1,"854":1,"863":1,"883":1,"896":1,"901":1,"916":1,"941":2,"966":1,"1034":1,"1036":1,"1067":1,"1168":1,"1170":1,"1229":2,"1236":1,"1247":1,"1269":1,"1270":4,"1286":4,"1300":1,"1301":2,"1311":3,"1312":2,"1323":4,"1324":13,"1339":5,"1358":1,"1359":7,"1366":1,"1369":1,"1380":2,"1395":6,"1396":5,"1402":1,"1415":2,"1416":1,"1417":4,"1427":2,"1436":17,"1453":1,"1459":1,"1465":1,"1496":3,"1534":1,"1546":1,"1673":1,"1686":1,"1800":1,"1801":1,"1810":1,"1844":1,"1852":1,"1885":1,"1909":1,"1933":1,"1940":1,"2032":1,"2085":1}}],["causes",{"3":{"1222":1,"1324":1,"1339":1,"1359":1,"1415":1,"2002":1,"2014":1}}],["caused",{"3":{"451":1,"556":1,"789":1,"790":1,"981":1,"1006":1,"1066":1,"1300":1,"1311":2,"1323":1,"1324":1,"1359":4,"1396":3,"1402":1,"1425":1,"1427":1,"1436":1,"1473":1,"1534":1,"1665":1,"2177":1}}],["cause",{"3":{"0":1,"156":1,"343":2,"915":1,"948":1,"1065":1,"1286":2,"1300":1,"1309":1,"1311":2,"1323":2,"1339":1,"1395":2,"1415":1,"1417":1,"1436":2,"1438":4,"1467":2,"1476":1,"1490":1,"1686":1,"1876":1,"1913":1,"1934":1,"1969":1,"1989":1}}],["caveats",{"3":{"1191":1,"1193":1,"1229":7,"1237":18,"1247":14,"1259":13,"1270":39,"1271":6,"1286":51,"1300":49,"1301":8,"1309":7,"1310":5,"1311":33,"1312":4,"1323":49,"1324":58,"1339":53,"1350":35,"1359":177,"1369":7,"1380":9,"1395":44,"1396":90,"1402":16,"1415":41,"1416":7,"1417":27,"1427":3,"1436":93,"1577":1,"1591":1,"2133":1}}],["caveat",{"3":{"0":1,"135":1,"159":1,"188":1,"197":1,"245":3,"283":1,"320":1,"352":1,"361":1,"446":1,"450":2,"461":1,"558":1,"574":1,"601":1,"605":1,"607":1,"611":2,"642":1,"667":2,"751":1,"821":1,"829":1,"863":3,"865":1,"998":1,"1010":2,"1231":1,"1236":1,"1259":1,"1270":2,"1282":1,"1286":2,"1296":1,"1301":1,"1310":1,"1318":1,"1323":1,"1324":1,"1326":1,"1334":1,"1339":3,"1359":4,"1369":1,"1395":3,"1396":1,"1402":1,"1422":1,"1423":1,"1436":1,"1440":1,"1468":1,"1496":3,"1591":2,"1599":2,"1891":1,"1923":1,"1964":1,"1996":1,"2063":1,"2068":1,"2077":1,"2114":1,"2131":1,"2132":2,"2138":1}}],["cash",{"3":{"1765":1}}],["cashed",{"3":{"1436":1,"1474":1}}],["casting",{"3":{"1286":1,"1300":1,"1396":3,"1399":1,"1401":1,"1402":4,"1417":1}}],["cast",{"3":{"1237":3,"1247":3,"1259":1,"1268":1,"1270":1,"1272":1,"1286":3,"1300":1,"1301":1,"1309":1,"1312":1,"1313":1,"1323":1,"1324":5,"1339":1,"1380":1,"1395":1,"1396":4,"1397":1,"1401":1,"1402":13,"1415":2,"1436":4}}],["casts",{"3":{"1229":1,"1237":1,"1259":1,"1270":1,"1286":1,"1323":1,"1324":1,"1380":1,"1402":2,"1436":1,"1632":1}}],["castvoteasync",{"3":{"1396":4,"1402":1}}],["castvoterequest",{"3":{"1199":4,"1203":1,"1207":2,"1396":2,"1402":6}}],["castvotecommandvalidatortests",{"3":{"1199":1,"1207":2}}],["castvotecommandvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1402":5}}],["castvotecommand",{"3":{"1199":8,"1203":1,"1207":2,"1396":2,"1402":8}}],["castvote",{"3":{"1150":1,"1203":3,"1207":6,"1398":1,"1402":11,"1496":2}}],["castvotehandlertests",{"3":{"1199":1,"1207":3,"1436":2}}],["castvotehandler",{"2":{"383":1},"3":{"383":1,"1150":1,"1156":1,"1199":2,"1203":1,"1207":2,"1396":1,"1398":3,"1399":2,"1401":1,"1402":19,"1496":1}}],["casualty",{"3":{"751":1}}],["casings",{"3":{"1247":1}}],["casing",{"3":{"135":1,"572":1,"574":1,"585":1,"964":1,"1089":1,"1094":1,"1247":3,"1286":1,"1300":1,"1323":4,"1324":1,"1350":1,"1359":3,"1395":2,"1396":1,"1405":1,"1410":1,"1415":6,"1416":1,"1436":1,"1438":2,"1453":1,"1455":1,"1631":1}}],["cascadingforeignkeysareexplicitlyoptedin",{"3":{"1436":4}}],["cascadingparameterattribute",{"3":{"1436":1}}],["cascadingparameter",{"3":{"1324":2,"1396":2,"1436":1}}],["cascadingauthenticationstate",{"2":{"1641":1,"2078":1},"3":{"1324":1,"1396":2,"1436":1,"1641":1,"2078":1}}],["cascadingchild",{"3":{"1199":3,"1207":1}}],["cascadingdeletes",{"2":{"1083":1},"3":{"1083":1,"1436":3}}],["cascading",{"3":{"0":1,"39":1,"556":1,"954":1,"1081":1,"1116":1,"1168":1,"1281":1,"1286":2,"1301":1,"1324":2,"1359":1,"1395":6,"1396":2,"1402":3,"1432":1,"1436":12,"1488":2,"1491":2,"1556":1,"1639":1,"1662":1,"1776":1,"2064":1,"2232":1}}],["cascaded",{"3":{"1323":1,"1350":1,"1359":2,"1391":1,"1395":3,"1396":1,"1438":1,"1492":1}}],["cascadedelete",{"2":{"1116":1,"1346":1},"3":{"1116":1,"1346":1,"1350":4,"1359":2}}],["cascadefixtures",{"3":{"1207":21,"1436":43}}],["cascadechildfixture",{"3":{"1199":7,"1207":1,"1436":12}}],["cascadesoftdelete",{"3":{"1207":1,"1436":9,"1489":1,"1577":1}}],["cascadesoftdeleteconventiontests",{"3":{"1199":2,"1207":4,"1436":19,"1489":2,"1577":1}}],["cascadesoftdeleteconventiontestsbase",{"3":{"1199":3,"1207":2,"1436":11,"1586":2}}],["cascadesoftdeletefitnesstests",{"3":{"1199":1,"1207":3,"1436":31,"1489":1}}],["cascades",{"3":{"0":1,"1082":1,"1084":1,"1087":1,"1231":1,"1237":2,"1270":1,"1281":1,"1286":1,"1323":1,"1346":2,"1350":2,"1359":2,"1380":1,"1395":1,"1398":1,"1402":1,"1431":1,"1432":1,"1436":10,"1455":1,"1489":1,"1490":1,"1496":1,"1544":1,"1635":1,"1638":2,"2055":1,"2064":1}}],["cascade",{"0":{"1346":1},"2":{"1082":1,"1083":1,"1281":1,"2064":1},"3":{"0":7,"27":1,"37":1,"39":2,"43":3,"459":1,"926":1,"1082":4,"1083":6,"1084":3,"1085":3,"1117":1,"1120":2,"1170":1,"1212":1,"1237":2,"1265":1,"1270":3,"1281":3,"1286":9,"1340":1,"1342":1,"1343":2,"1346":3,"1350":31,"1352":2,"1354":1,"1359":31,"1362":2,"1369":4,"1402":5,"1415":2,"1431":1,"1436":43,"1438":3,"1496":1,"1566":1,"1577":4,"1586":2,"1630":1,"1631":1,"1632":2,"1635":5,"1638":23,"1639":21,"1664":1,"1671":1,"1686":1,"1700":1,"1727":1,"1755":1,"1776":1,"2064":3}}],["caseoptedindefaultsource",{"3":{"1199":2,"1207":1}}],["casenosettings",{"3":{"1199":2,"1207":1}}],["casenooptin",{"3":{"1199":2,"1207":1}}],["casenamedsource",{"3":{"1199":3,"1207":2}}],["casemappingshape",{"3":{"1199":3,"1207":2}}],["caseenableddefaultsource",{"3":{"1199":2,"1207":1}}],["casewrongsource",{"3":{"1199":2,"1207":1}}],["caseidentity",{"3":{"1199":2,"1207":1}}],["caseconference",{"3":{"1199":2,"1207":1}}],["casedefaultsettings",{"3":{"1199":2,"1207":1}}],["cased",{"3":{"1091":1,"1247":2,"1323":1,"1324":1,"1339":1,"1350":1,"1359":2,"1395":1,"1425":1,"1427":1,"1436":1,"1488":1}}],["case",{"0":{"1246":1,"1322":1,"1352":1,"1952":1,"2190":1},"2":{"1035":1},"3":{"0":10,"32":1,"42":1,"109":2,"116":2,"117":1,"121":1,"126":3,"133":1,"135":2,"136":1,"150":1,"156":1,"157":1,"158":1,"160":1,"175":1,"186":1,"189":1,"196":1,"197":1,"201":1,"225":1,"227":1,"245":2,"246":1,"249":1,"301":1,"318":2,"333":1,"340":1,"358":1,"379":1,"386":1,"389":1,"390":1,"391":1,"396":1,"402":1,"435":1,"460":1,"461":1,"473":1,"517":2,"519":1,"534":1,"539":1,"540":1,"544":1,"564":1,"582":1,"583":1,"585":4,"586":1,"601":1,"609":2,"633":3,"650":1,"667":1,"683":1,"690":2,"709":1,"737":1,"741":1,"749":1,"765":1,"766":1,"782":1,"789":1,"791":1,"799":1,"802":1,"810":1,"811":1,"820":1,"821":1,"827":1,"831":1,"861":1,"863":1,"864":2,"875":1,"881":2,"883":2,"889":1,"897":2,"898":1,"905":2,"907":1,"926":2,"933":1,"938":1,"939":1,"940":1,"964":1,"965":1,"972":1,"974":1,"980":1,"982":1,"988":1,"1003":1,"1004":1,"1018":11,"1019":2,"1020":6,"1034":1,"1035":1,"1045":1,"1049":1,"1050":1,"1060":1,"1091":4,"1099":1,"1101":1,"1108":2,"1109":2,"1112":1,"1116":1,"1123":1,"1155":1,"1177":1,"1212":1,"1220":1,"1221":1,"1223":2,"1229":4,"1234":2,"1235":1,"1237":10,"1241":1,"1242":1,"1246":1,"1247":22,"1250":1,"1259":11,"1260":3,"1261":1,"1263":5,"1264":4,"1269":1,"1270":16,"1271":9,"1273":1,"1276":1,"1278":1,"1281":2,"1286":44,"1290":1,"1293":1,"1295":1,"1296":1,"1297":2,"1300":46,"1301":7,"1306":1,"1309":7,"1310":2,"1311":20,"1312":7,"1313":1,"1315":2,"1318":1,"1323":25,"1324":45,"1331":1,"1332":2,"1334":1,"1337":1,"1339":28,"1342":1,"1344":1,"1350":16,"1352":1,"1353":1,"1355":1,"1358":1,"1359":85,"1362":1,"1365":1,"1369":5,"1372":1,"1378":1,"1380":6,"1383":2,"1392":1,"1395":29,"1396":28,"1398":1,"1402":16,"1403":1,"1404":1,"1405":1,"1415":33,"1416":6,"1417":10,"1420":1,"1427":18,"1431":2,"1432":1,"1433":1,"1435":10,"1436":87,"1438":18,"1443":1,"1453":2,"1455":8,"1456":1,"1458":1,"1459":1,"1467":2,"1470":1,"1474":1,"1480":1,"1486":1,"1487":1,"1488":1,"1489":2,"1492":14,"1496":7,"1512":1,"1526":6,"1531":1,"1534":1,"1535":1,"1540":1,"1542":1,"1568":1,"1577":4,"1582":1,"1583":1,"1600":1,"1617":1,"1630":2,"1631":6,"1632":2,"1635":2,"1638":1,"1639":2,"1640":2,"1641":5,"1649":1,"1651":3,"1667":1,"1678":1,"1686":3,"1697":1,"1708":1,"1727":4,"1730":1,"1731":4,"1749":1,"1755":1,"1768":3,"1776":1,"1779":1,"1805":1,"1810":1,"1815":1,"1817":1,"1818":2,"1820":1,"1823":2,"1825":1,"1827":1,"1830":1,"1840":1,"1849":1,"1853":3,"1856":1,"1858":1,"1867":2,"1874":1,"1881":1,"1903":1,"1909":3,"1914":3,"1922":1,"1923":2,"1941":1,"1962":1,"1964":1,"1970":1,"1977":1,"1988":1,"1993":1,"1994":2,"2000":1,"2002":1,"2025":1,"2030":1,"2034":1,"2043":3,"2070":1,"2083":1,"2087":1,"2092":1,"2096":1,"2105":1,"2106":1,"2108":2,"2109":1,"2117":1,"2118":1,"2123":1,"2134":2,"2135":1,"2136":1,"2139":1,"2141":2,"2149":1,"2154":1,"2158":1,"2160":1,"2163":1,"2165":1,"2167":2,"2183":1,"2189":1,"2190":1,"2193":1,"2197":1,"2232":1,"2234":1}}],["casesettingsonly",{"3":{"1199":2,"1207":1}}],["cases",{"0":{"1632":1,"1768":1},"1":{"1351":1,"1352":1,"1353":1,"1354":1,"1355":1,"1356":1,"1357":1,"1358":1,"1359":1},"3":{"0":1,"33":1,"126":1,"135":1,"136":1,"138":1,"142":1,"160":1,"314":1,"324":1,"335":1,"350":1,"365":1,"466":1,"539":1,"656":1,"790":1,"791":1,"794":1,"845":1,"972":1,"988":1,"998":1,"1018":3,"1020":1,"1050":1,"1091":1,"1116":1,"1192":2,"1201":1,"1202":3,"1203":3,"1217":1,"1219":1,"1229":4,"1237":1,"1247":3,"1260":2,"1263":1,"1270":1,"1271":1,"1286":9,"1300":8,"1303":1,"1306":1,"1309":3,"1311":3,"1322":1,"1323":4,"1324":4,"1339":10,"1350":3,"1351":2,"1354":1,"1359":18,"1365":1,"1369":4,"1380":1,"1395":4,"1396":7,"1402":3,"1403":2,"1410":1,"1415":9,"1416":1,"1417":2,"1427":3,"1428":1,"1431":2,"1435":2,"1436":22,"1438":8,"1444":1,"1454":1,"1487":1,"1492":1,"1496":6,"1500":1,"1526":1,"1553":1,"1577":1,"1611":3,"1632":2,"1641":1,"1646":1,"1649":1,"1650":1,"1660":1,"1667":2,"1729":1,"1749":1,"1821":1,"1856":1,"1909":1,"1932":1,"1941":1,"1955":1,"1962":1,"1982":1,"2114":1,"2136":1,"2138":1,"2143":1,"2167":1}}],["caracteres",{"3":{"1685":2,"1686":2}}],["car",{"3":{"1416":1}}],["carve",{"3":{"200":1,"265":2,"317":1,"322":1,"324":1,"326":1,"562":1,"783":1,"862":1,"1286":2,"1375":1,"1380":2,"1402":1,"1431":1,"1433":2,"1436":1,"1465":1,"1467":1,"1496":1,"1577":1,"1630":1,"1635":1}}],["carved",{"3":{"200":1,"1323":1,"1441":1}}],["career",{"3":{"1395":1,"2220":1}}],["careless",{"3":{"1107":1,"1135":1,"1905":1}}],["carelessly",{"3":{"829":1}}],["careful",{"3":{"839":1,"1259":1,"1300":1,"1323":1,"1324":1,"1359":1,"1396":2,"1402":1,"1425":1,"1431":1,"1436":2,"1942":1,"2000":1,"2072":1,"2167":1}}],["carefully",{"3":{"365":1,"1234":1,"1237":1,"1259":1,"1270":1,"1301":1,"1323":1,"1324":1,"1332":1,"1341":1,"1344":1,"1350":2,"1359":2,"1396":2,"1415":2,"1436":1,"1467":1,"1486":1,"1803":1}}],["cares",{"3":{"784":1,"827":1,"1041":1,"1296":1,"1339":4,"1350":1,"1359":2,"1395":1,"1415":1,"1417":1,"1427":1,"1429":1,"1436":1,"2091":1,"2183":1}}],["care",{"3":{"55":1,"740":1,"842":1,"1194":1,"1229":1,"1255":1,"1259":1,"1273":1,"1312":1,"1323":1,"1324":1,"1359":1,"1396":1,"1436":2,"1453":1,"1782":1,"1783":1,"1792":1,"1882":1,"1905":1,"2091":1,"2107":1}}],["carte",{"3":{"1436":1}}],["cartesian",{"3":{"1286":3,"1863":1,"1864":1}}],["cartdrawer",{"3":{"1324":1,"1591":7,"1596":3,"1597":1,"1600":2,"1750":3,"1773":1}}],["cartbutton",{"3":{"1324":1,"1591":1,"1596":1,"1597":1}}],["carts",{"3":{"1297":1,"1742":1,"1750":2,"1761":1,"1763":1,"1768":2,"1773":2,"2110":1}}],["cartstateservice",{"2":{"879":1,"883":1,"884":1,"1599":1},"3":{"0":1,"879":1,"881":2,"883":1,"884":2,"1324":1,"1591":5,"1599":1,"1600":3}}],["cartid",{"3":{"1237":1}}],["cart",{"3":{"0":1,"318":1,"320":1,"535":1,"881":1,"990":1,"1025":1,"1026":2,"1027":3,"1028":1,"1237":1,"1270":1,"1300":1,"1311":1,"1324":2,"1436":2,"1577":1,"1591":5,"1596":1,"1599":2,"1600":3,"1712":1,"1713":2,"1714":1,"1741":1,"1742":2,"1746":5,"1748":1,"1749":18,"1750":20,"1751":1,"1753":1,"1754":2,"1755":2,"1757":1,"1758":1,"1759":1,"1761":1,"1763":1,"1764":13,"1765":17,"1767":8,"1768":12,"1769":2,"1771":2,"1773":10,"1775":2,"1776":10,"1995":5,"1996":1,"2077":1,"2161":1}}],["cardinalities",{"3":{"1640":1}}],["cardinality",{"3":{"0":2,"407":1,"897":2,"898":1,"1150":1,"1152":1,"1212":1,"1247":3,"1301":1,"1311":2,"1396":3,"1402":3,"1919":1}}],["cardclass",{"3":{"1324":1}}],["cardcontent",{"3":{"1324":1}}],["cardelevation",{"3":{"1324":1}}],["cardelementid",{"3":{"1324":1}}],["cardformatting",{"3":{"1324":1,"1591":2}}],["cardtemplate",{"3":{"1324":1}}],["card",{"3":{"539":1,"684":1,"685":1,"690":1,"881":2,"953":1,"1264":1,"1270":1,"1324":12,"1383":1,"1385":1,"1395":33,"1396":9,"1402":13,"1415":3,"1416":3,"1436":3,"1438":2,"1490":1,"1524":2,"1526":2,"1531":1,"1591":2,"1599":2,"1627":2,"1643":1,"1669":1,"1712":1,"1713":2,"1750":4,"1773":4,"2079":1}}],["cardsperpage",{"3":{"1395":1}}],["cardstyle",{"3":{"1324":1}}],["cardselector",{"3":{"1324":2}}],["cards",{"3":{"0":1,"1324":2,"1383":2,"1395":11,"1396":1,"1402":3,"1414":1,"1415":1,"1577":1,"1714":1,"1742":1,"1758":1,"1773":1}}],["carriage",{"3":{"885":1,"947":1}}],["carriertrackingurls",{"3":{"1767":1}}],["carriers",{"3":{"1286":1,"1300":1,"1313":1}}],["carrier",{"0":{"1219":1},"3":{"0":1,"340":1,"342":1,"672":1,"905":1,"1042":1,"1124":1,"1219":1,"1229":1,"1247":3,"1286":8,"1288":1,"1300":7,"1309":1,"1312":1,"1318":2,"1323":1,"1324":2,"1339":1,"1350":3,"1359":3,"1402":2,"1417":3,"1749":3,"1750":1,"1763":1,"1764":3,"1765":7,"1766":1,"1767":2,"1768":2,"1769":2,"1770":1,"1776":2,"1805":1,"2186":1}}],["carried",{"3":{"0":3,"77":1,"94":1,"99":2,"135":1,"201":2,"258":1,"265":1,"318":1,"400":1,"407":1,"447":1,"448":1,"455":1,"463":1,"464":2,"465":2,"492":1,"529":1,"536":1,"607":1,"626":1,"702":2,"707":1,"719":1,"743":1,"747":1,"800":1,"827":1,"839":1,"853":1,"867":1,"872":1,"921":1,"973":1,"980":1,"1006":2,"1010":2,"1012":1,"1014":3,"1024":1,"1054":1,"1065":1,"1075":1,"1099":2,"1212":1,"1229":2,"1247":2,"1263":1,"1264":1,"1270":1,"1286":8,"1300":16,"1311":6,"1312":1,"1321":1,"1323":8,"1324":8,"1339":4,"1344":1,"1349":1,"1350":7,"1359":14,"1369":3,"1380":4,"1395":9,"1396":16,"1402":3,"1413":1,"1415":7,"1417":4,"1427":2,"1432":1,"1436":5,"1455":1,"1467":3,"1478":1,"1489":1,"1496":1,"1526":1,"1531":1,"1578":1,"1591":1,"1634":1,"1737":1,"1764":1,"1805":1,"1825":1,"1854":1,"1983":1,"1994":1,"2043":1,"2050":1,"2126":1,"2130":1,"2131":1,"2167":1,"2176":1,"2203":1}}],["carrieshardenedsecurityheaders",{"3":{"1436":1}}],["carriesanactivehealthcheckprobingalive",{"3":{"1436":1}}],["carriesaservicetag",{"3":{"1436":1}}],["carriesnoinlinestyles",{"3":{"1436":2}}],["carriesservicecontractattribute",{"3":{"1312":1,"1436":3}}],["carries",{"0":{"95":1},"3":{"0":35,"1":1,"23":1,"24":1,"26":2,"39":2,"54":1,"55":1,"57":1,"61":1,"68":1,"72":1,"73":1,"78":1,"91":2,"93":1,"95":2,"109":2,"111":1,"115":1,"122":1,"123":1,"125":1,"126":2,"132":1,"135":1,"140":2,"141":1,"142":1,"149":1,"157":1,"165":1,"166":1,"168":1,"171":1,"173":1,"175":1,"180":2,"184":1,"186":3,"188":1,"189":1,"195":3,"197":1,"200":1,"212":1,"214":2,"215":1,"216":1,"217":1,"219":1,"220":1,"225":1,"229":2,"243":1,"255":2,"258":1,"259":1,"265":2,"275":1,"282":1,"284":1,"293":1,"295":1,"300":1,"302":1,"305":1,"308":1,"318":3,"324":1,"325":2,"326":1,"333":1,"341":5,"343":1,"346":2,"348":1,"349":1,"350":4,"353":3,"359":1,"360":1,"365":1,"372":1,"373":1,"374":1,"380":1,"384":1,"388":1,"392":1,"395":2,"399":1,"400":1,"401":1,"402":2,"403":1,"404":2,"405":1,"406":1,"407":1,"408":1,"418":3,"422":1,"423":2,"426":2,"439":1,"448":2,"451":1,"452":1,"458":1,"459":1,"461":1,"462":1,"470":1,"471":1,"474":1,"475":1,"476":1,"477":1,"484":1,"487":1,"488":2,"489":2,"490":2,"491":1,"492":2,"493":3,"494":4,"495":2,"499":1,"528":2,"536":2,"539":1,"543":1,"545":4,"546":1,"547":2,"549":2,"551":1,"556":1,"558":1,"564":3,"565":1,"572":4,"575":1,"578":1,"591":1,"599":5,"601":1,"604":1,"605":1,"607":2,"609":4,"618":2,"624":1,"625":1,"626":4,"631":1,"633":4,"634":1,"638":1,"640":3,"642":2,"649":1,"651":2,"656":1,"657":4,"659":1,"664":1,"668":1,"676":1,"689":1,"690":3,"691":2,"692":3,"698":3,"700":1,"702":1,"707":2,"709":1,"710":1,"713":1,"714":2,"720":1,"725":4,"733":1,"737":2,"741":1,"749":1,"757":2,"764":1,"766":4,"781":1,"782":7,"783":1,"784":2,"788":1,"790":4,"792":1,"793":1,"794":1,"799":2,"803":1,"804":2,"805":1,"806":1,"815":1,"818":1,"819":1,"825":1,"826":1,"827":2,"830":1,"833":2,"838":1,"848":1,"849":2,"850":1,"852":1,"854":1,"857":1,"859":1,"861":2,"876":2,"881":3,"889":1,"899":1,"903":1,"905":6,"907":1,"916":1,"920":1,"922":3,"924":1,"926":2,"931":1,"939":2,"944":1,"946":1,"948":2,"954":2,"959":1,"960":1,"962":1,"964":2,"971":1,"972":3,"988":1,"996":1,"1004":6,"1008":1,"1011":1,"1012":2,"1014":1,"1017":1,"1018":7,"1019":1,"1021":1,"1026":1,"1029":1,"1034":1,"1041":2,"1055":1,"1058":1,"1059":4,"1062":2,"1065":1,"1067":4,"1068":1,"1069":1,"1073":1,"1074":1,"1083":2,"1091":1,"1094":1,"1096":1,"1116":3,"1118":1,"1123":1,"1124":2,"1125":1,"1133":1,"1135":1,"1140":2,"1150":1,"1157":1,"1162":1,"1168":1,"1173":1,"1177":1,"1184":1,"1211":1,"1212":7,"1213":1,"1217":1,"1220":2,"1225":1,"1228":2,"1229":12,"1231":1,"1233":1,"1237":18,"1238":1,"1240":1,"1241":2,"1242":1,"1247":7,"1249":1,"1253":4,"1259":15,"1262":1,"1263":1,"1264":2,"1265":3,"1266":1,"1270":22,"1271":7,"1272":1,"1273":2,"1275":3,"1276":3,"1277":1,"1278":3,"1279":1,"1281":1,"1284":1,"1285":3,"1286":60,"1288":1,"1289":2,"1290":2,"1291":1,"1292":1,"1294":1,"1296":1,"1297":3,"1299":1,"1300":68,"1301":5,"1303":1,"1304":2,"1305":2,"1307":1,"1308":1,"1309":20,"1310":2,"1311":56,"1312":7,"1316":1,"1320":3,"1322":1,"1323":49,"1324":78,"1325":1,"1328":2,"1330":1,"1333":2,"1337":1,"1338":1,"1339":43,"1342":5,"1343":1,"1345":2,"1347":3,"1348":1,"1349":1,"1350":73,"1352":4,"1353":2,"1354":1,"1357":2,"1358":1,"1359":157,"1366":4,"1367":1,"1369":11,"1371":1,"1373":4,"1374":1,"1376":2,"1377":1,"1379":1,"1380":52,"1384":1,"1386":1,"1389":3,"1391":2,"1392":1,"1393":1,"1394":1,"1395":55,"1396":133,"1397":2,"1398":1,"1399":3,"1400":1,"1402":45,"1404":1,"1405":2,"1406":4,"1407":4,"1408":4,"1410":2,"1411":2,"1413":1,"1414":2,"1415":52,"1416":8,"1417":21,"1421":1,"1422":1,"1423":1,"1425":2,"1427":7,"1428":1,"1430":1,"1431":2,"1432":1,"1436":122,"1438":19,"1439":1,"1441":5,"1442":1,"1443":1,"1444":2,"1445":1,"1447":4,"1449":3,"1453":2,"1454":1,"1455":9,"1456":3,"1458":1,"1459":3,"1460":2,"1465":2,"1467":20,"1470":1,"1473":1,"1474":3,"1475":2,"1476":1,"1482":1,"1488":3,"1489":3,"1490":2,"1491":1,"1492":5,"1496":3,"1504":2,"1508":1,"1512":1,"1513":1,"1517":1,"1522":1,"1525":1,"1526":4,"1531":1,"1534":2,"1535":1,"1547":1,"1548":1,"1577":12,"1582":2,"1585":1,"1589":2,"1591":10,"1596":5,"1597":1,"1599":4,"1600":1,"1627":1,"1631":5,"1634":1,"1638":1,"1640":1,"1641":3,"1643":1,"1651":1,"1653":2,"1654":1,"1656":2,"1660":1,"1665":1,"1666":1,"1670":1,"1673":1,"1677":1,"1683":1,"1684":1,"1685":1,"1686":2,"1693":1,"1701":1,"1702":1,"1703":2,"1712":1,"1719":1,"1722":1,"1727":1,"1728":1,"1748":5,"1749":2,"1750":1,"1751":1,"1755":1,"1758":2,"1760":3,"1764":2,"1767":1,"1769":7,"1771":2,"1772":1,"1773":2,"1776":1,"1799":3,"1805":3,"1810":1,"1815":3,"1821":3,"1825":2,"1831":1,"1839":1,"1840":2,"1849":2,"1851":1,"1854":1,"1856":1,"1870":1,"1871":1,"1874":1,"1876":1,"1877":1,"1882":1,"1888":1,"1889":1,"1902":1,"1908":2,"1909":1,"1916":1,"1918":1,"1922":1,"1925":1,"1927":2,"1933":2,"1934":1,"1939":1,"1940":1,"1943":1,"1945":1,"1947":1,"1950":1,"1962":2,"1964":1,"1965":1,"1966":1,"1968":2,"1973":1,"1975":3,"1977":1,"1982":1,"1992":1,"1994":1,"1995":1,"1997":1,"2013":1,"2032":1,"2034":1,"2046":1,"2055":1,"2056":1,"2057":2,"2059":1,"2063":2,"2064":1,"2073":1,"2074":1,"2079":2,"2082":1,"2087":1,"2089":1,"2097":1,"2105":1,"2107":2,"2110":2,"2124":1,"2126":1,"2130":1,"2131":4,"2132":1,"2137":1,"2138":2,"2150":1,"2151":1,"2152":1,"2156":4,"2158":1,"2164":1,"2165":1,"2166":1,"2173":1,"2177":2,"2180":1,"2183":2,"2186":1,"2194":1,"2197":2,"2227":1,"2230":1,"2232":7}}],["carrynomutablestaticstate",{"3":{"1436":3}}],["carrytheservicetagoftheowningapp",{"3":{"1436":1}}],["carrythetightratelimiterpolicy",{"2":{"180":1},"3":{"180":1}}],["carry",{"0":{"1235":1},"3":{"0":13,"1":2,"15":1,"24":1,"71":1,"81":1,"91":1,"98":1,"99":1,"109":1,"125":1,"126":1,"135":3,"136":1,"138":2,"139":1,"142":1,"147":1,"155":1,"161":1,"170":2,"176":1,"177":2,"179":1,"186":2,"195":1,"200":1,"207":2,"217":1,"225":1,"241":1,"259":1,"260":1,"261":1,"265":3,"279":1,"291":1,"300":1,"318":4,"324":2,"341":2,"343":2,"345":1,"350":1,"352":1,"355":1,"359":1,"361":1,"387":1,"390":1,"396":1,"401":2,"403":2,"404":1,"407":1,"419":1,"438":1,"443":1,"446":1,"450":1,"451":1,"461":1,"470":1,"490":1,"497":1,"505":1,"526":1,"530":1,"536":1,"543":1,"549":2,"558":1,"564":1,"572":1,"578":2,"583":1,"591":1,"594":1,"599":2,"603":1,"607":2,"609":3,"611":1,"618":2,"626":1,"629":1,"634":1,"635":1,"636":1,"640":1,"649":1,"657":1,"658":1,"659":1,"661":1,"668":1,"689":1,"690":2,"698":2,"718":1,"719":1,"724":1,"739":2,"741":1,"742":1,"743":1,"755":1,"764":1,"766":1,"774":1,"782":1,"783":1,"799":3,"801":1,"802":1,"826":1,"828":1,"831":1,"832":1,"838":3,"869":1,"873":1,"881":1,"884":1,"891":1,"905":1,"907":2,"926":1,"963":1,"964":1,"972":1,"982":1,"996":1,"1011":1,"1018":1,"1020":1,"1026":1,"1034":1,"1042":1,"1043":1,"1044":1,"1050":1,"1083":1,"1085":2,"1091":1,"1110":1,"1116":4,"1125":1,"1126":1,"1127":1,"1141":1,"1155":1,"1175":1,"1184":1,"1185":3,"1212":3,"1228":1,"1229":4,"1231":1,"1234":1,"1236":1,"1237":11,"1247":4,"1252":1,"1253":1,"1255":1,"1259":6,"1264":1,"1265":1,"1266":1,"1270":13,"1271":4,"1275":1,"1276":1,"1285":1,"1286":35,"1290":1,"1297":1,"1300":36,"1301":3,"1309":6,"1311":25,"1312":5,"1317":1,"1318":2,"1319":1,"1323":9,"1324":34,"1328":2,"1337":1,"1339":17,"1342":1,"1344":2,"1345":3,"1347":1,"1350":18,"1353":1,"1359":66,"1360":1,"1362":2,"1366":1,"1369":8,"1371":1,"1373":2,"1377":1,"1380":16,"1382":1,"1384":1,"1388":2,"1389":1,"1390":1,"1392":2,"1395":33,"1396":29,"1399":1,"1401":1,"1402":16,"1405":1,"1415":24,"1416":2,"1417":4,"1423":1,"1427":1,"1428":1,"1431":1,"1434":1,"1436":51,"1438":7,"1443":3,"1444":1,"1445":1,"1447":4,"1448":1,"1453":2,"1454":1,"1455":2,"1456":1,"1458":1,"1465":2,"1467":14,"1469":1,"1473":1,"1474":1,"1476":3,"1481":1,"1485":1,"1489":3,"1491":1,"1496":3,"1526":4,"1534":1,"1536":1,"1543":1,"1575":1,"1576":1,"1577":3,"1578":1,"1582":1,"1585":1,"1586":1,"1591":2,"1596":1,"1621":1,"1626":1,"1627":2,"1630":1,"1631":1,"1632":2,"1635":1,"1641":3,"1654":1,"1662":1,"1665":1,"1666":1,"1672":1,"1686":1,"1688":1,"1723":1,"1727":1,"1748":2,"1757":1,"1758":1,"1759":1,"1760":1,"1761":2,"1764":1,"1765":4,"1767":2,"1771":1,"1830":1,"1839":1,"1851":1,"1876":1,"1883":1,"1902":1,"1903":1,"1908":1,"1911":1,"1938":1,"1942":1,"1946":1,"1948":1,"1949":1,"1950":2,"1963":3,"1964":1,"1969":1,"1974":1,"1978":1,"1993":1,"1995":3,"1996":1,"2001":1,"2018":1,"2031":1,"2046":1,"2047":1,"2056":2,"2070":1,"2075":1,"2079":1,"2086":1,"2098":1,"2126":1,"2131":2,"2142":1,"2145":1,"2154":2,"2156":1,"2160":1,"2164":1,"2189":1,"2191":1,"2192":3,"2198":1,"2203":1,"2232":1}}],["carrying",{"3":{"0":4,"20":1,"53":1,"81":1,"109":2,"110":1,"111":1,"117":1,"122":1,"128":1,"147":1,"160":1,"180":1,"189":1,"193":1,"202":1,"212":1,"217":1,"225":2,"231":1,"243":2,"244":1,"247":1,"265":1,"305":1,"318":1,"328":1,"344":1,"349":1,"350":4,"365":1,"370":1,"387":1,"413":1,"420":1,"443":2,"448":1,"499":1,"538":1,"557":1,"609":1,"618":1,"626":1,"632":1,"688":1,"690":2,"715":2,"725":3,"740":1,"741":2,"782":1,"790":1,"804":1,"805":1,"810":1,"813":1,"827":1,"860":1,"863":1,"876":1,"881":1,"897":1,"914":1,"920":2,"921":1,"926":1,"945":1,"966":1,"971":1,"980":2,"987":1,"988":2,"996":1,"1004":1,"1026":2,"1034":1,"1042":1,"1049":1,"1050":1,"1051":1,"1054":1,"1067":1,"1119":1,"1168":1,"1175":1,"1212":2,"1219":1,"1223":1,"1224":1,"1225":1,"1229":9,"1237":8,"1239":1,"1240":1,"1241":1,"1243":1,"1245":1,"1247":4,"1249":1,"1256":2,"1259":6,"1263":3,"1265":1,"1266":1,"1270":16,"1271":3,"1273":1,"1275":1,"1277":1,"1280":1,"1284":1,"1286":26,"1294":1,"1297":2,"1300":24,"1301":2,"1304":1,"1305":1,"1309":11,"1310":2,"1311":21,"1312":5,"1317":1,"1318":1,"1320":1,"1323":26,"1324":30,"1332":1,"1335":1,"1336":1,"1339":11,"1347":1,"1349":1,"1350":8,"1352":1,"1353":1,"1358":1,"1359":37,"1361":1,"1364":1,"1369":3,"1373":1,"1374":2,"1378":1,"1379":1,"1380":13,"1384":2,"1389":1,"1391":1,"1395":27,"1396":48,"1398":1,"1402":21,"1405":1,"1406":1,"1409":1,"1410":1,"1415":27,"1416":6,"1417":10,"1423":2,"1426":1,"1427":1,"1430":2,"1434":1,"1436":55,"1438":8,"1446":1,"1452":1,"1453":1,"1458":1,"1465":1,"1467":3,"1488":2,"1489":2,"1492":1,"1534":1,"1577":2,"1627":1,"1631":1,"1641":1,"1651":1,"1666":2,"1667":1,"1685":2,"1702":1,"1723":1,"1749":2,"1750":1,"1765":1,"1769":3,"1790":1,"1792":1,"1805":2,"1806":1,"1815":1,"1821":1,"1840":1,"1865":1,"1871":1,"1908":1,"1909":1,"1922":2,"1924":1,"1927":3,"1929":1,"1933":2,"1937":1,"1974":1,"1975":1,"1976":2,"1977":2,"1978":1,"1988":1,"1994":1,"1995":1,"2018":1,"2036":2,"2055":1,"2057":1,"2083":1,"2110":1,"2126":1,"2136":1,"2149":1,"2158":1,"2175":1,"2186":1,"2230":1}}],["calcifies",{"3":{"1788":2}}],["calculation",{"3":{"1798":1,"2075":1}}],["calculations",{"3":{"1229":1}}],["calculated",{"3":{"1631":1,"1764":1}}],["calculateduration",{"2":{"1342":1},"3":{"1342":1,"1350":1}}],["calculatesimilarity",{"3":{"1359":2}}],["calculatejaccardindex",{"3":{"1359":1}}],["calmly",{"3":{"1396":1}}],["calm",{"3":{"1396":2}}],["calscale",{"3":{"1300":1}}],["calibrate",{"3":{"1229":1}}],["calibrated",{"3":{"0":1,"861":3,"1436":2,"1596":1}}],["calibration",{"3":{"862":1,"1263":1,"1339":1,"1369":1,"1577":2,"1578":1,"1592":1}}],["calibrating",{"3":{"862":1,"1237":1}}],["calendarexportmappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["calendarexportmapper",{"2":{"1356":1},"3":{"1199":6,"1203":1,"1207":2,"1300":5,"1350":3,"1356":4,"1359":16,"1396":1,"1526":1}}],["calendars",{"0":{"1375":1},"3":{"1043":2,"1203":2,"1207":6,"1300":10,"1359":4,"1496":1}}],["calendar",{"0":{"1356":1},"3":{"706":1,"1192":2,"1300":13,"1324":4,"1350":1,"1351":1,"1356":1,"1359":18,"1375":3,"1380":7,"1396":1,"1436":4,"1438":1,"1455":2,"1496":2,"1535":1,"1631":1,"1640":1,"1660":1,"1948":2}}],["callout",{"3":{"1496":1}}],["callvirt",{"3":{"1436":3}}],["callcount",{"3":{"1427":2}}],["calldurationhistogramname",{"3":{"1427":1}}],["calldeadline",{"3":{"1309":1,"1312":1,"1380":3,"1396":3,"1415":2}}],["callrefreshasync",{"3":{"1300":1}}],["callgraphindex",{"3":{"1199":2,"1207":2,"1436":12,"1489":1,"1671":1}}],["callable",{"3":{"265":1,"497":1,"1271":1,"1286":3,"1359":3,"1395":3,"1396":1,"1417":1,"1436":1,"1548":1}}],["callee",{"3":{"39":1,"1161":1,"1324":1,"1436":7}}],["callees",{"3":{"39":1,"1436":2}}],["called",{"3":{"13":1,"39":2,"81":1,"92":1,"109":2,"117":1,"122":1,"201":1,"203":1,"243":1,"259":1,"260":1,"265":1,"268":1,"284":1,"325":2,"326":2,"336":1,"341":1,"344":1,"350":1,"397":2,"400":1,"407":1,"413":1,"423":3,"426":2,"428":2,"497":1,"499":2,"591":1,"652":1,"674":1,"697":1,"698":2,"717":1,"741":1,"743":1,"822":1,"837":1,"875":1,"881":1,"889":2,"905":1,"908":1,"926":2,"931":2,"947":1,"1006":1,"1108":1,"1170":1,"1175":1,"1191":1,"1229":4,"1237":9,"1247":9,"1254":1,"1259":9,"1262":1,"1263":1,"1266":1,"1270":13,"1273":1,"1274":1,"1278":2,"1281":1,"1286":29,"1297":1,"1300":17,"1301":3,"1307":1,"1309":15,"1310":2,"1311":24,"1312":5,"1315":2,"1316":1,"1318":1,"1323":23,"1324":27,"1333":1,"1335":1,"1339":6,"1350":9,"1352":1,"1359":30,"1369":6,"1378":1,"1380":2,"1386":1,"1389":1,"1395":14,"1396":29,"1402":5,"1409":1,"1415":11,"1416":3,"1417":16,"1427":5,"1436":22,"1442":4,"1443":2,"1457":1,"1460":1,"1467":1,"1473":1,"1474":1,"1488":2,"1496":2,"1526":1,"1556":1,"1600":2,"1662":1,"1780":1,"1825":1,"1909":1,"1925":1,"1936":2,"1948":1,"1954":1,"1982":2,"1994":1,"1995":1,"2043":1,"2105":1,"2119":1,"2156":2,"2164":1,"2167":2}}],["callerfilepathattribute",{"3":{"1436":1}}],["callerfilepath",{"3":{"1432":1,"1436":3}}],["calleruserid",{"3":{"1402":4}}],["callerhasprivilegedrole",{"3":{"1323":2}}],["callermembername",{"3":{"1312":2,"1380":1}}],["callerisorganizer",{"2":{"1354":1},"3":{"1270":3,"1354":1,"1359":6,"1373":1,"1380":1,"1402":15}}],["callerspeakerid",{"3":{"1402":15}}],["callerscopedquerycachetests",{"3":{"1199":1,"1207":5,"1264":1,"1270":2}}],["callers",{"3":{"0":6,"33":1,"109":1,"157":1,"175":1,"230":1,"243":1,"244":1,"258":1,"265":1,"320":1,"335":1,"388":1,"435":1,"449":1,"481":1,"497":1,"502":1,"507":1,"513":1,"543":1,"545":1,"550":2,"552":1,"659":1,"674":1,"827":1,"889":1,"899":1,"980":1,"988":1,"995":1,"996":1,"998":1,"1153":1,"1155":2,"1176":1,"1212":2,"1220":1,"1229":1,"1236":1,"1237":2,"1239":1,"1241":1,"1242":1,"1243":1,"1247":10,"1259":2,"1263":1,"1267":1,"1270":12,"1271":2,"1278":1,"1286":22,"1300":18,"1301":9,"1302":1,"1309":7,"1311":15,"1312":2,"1316":1,"1323":7,"1324":31,"1337":1,"1339":4,"1350":13,"1359":23,"1369":2,"1373":1,"1375":1,"1380":4,"1395":7,"1396":14,"1402":2,"1415":8,"1416":1,"1417":20,"1430":1,"1436":4,"1438":3,"1441":1,"1442":1,"1443":1,"1467":1,"1496":1,"1596":1,"1630":1,"1631":2,"1635":3,"1639":1,"1640":2,"1701":1,"1735":1,"1749":1,"1790":1,"1807":1,"1815":2,"1908":1,"1912":1,"1915":1,"1922":1,"1937":1,"1987":1,"1997":1,"2024":1,"2126":1,"2133":1,"2232":2}}],["caller",{"0":{"1937":1,"2185":1},"2":{"1844":1},"3":{"0":25,"31":1,"39":2,"42":2,"43":1,"53":1,"72":1,"90":1,"95":1,"96":1,"103":2,"107":1,"108":2,"109":5,"110":3,"111":1,"115":1,"122":3,"123":2,"125":2,"126":2,"135":1,"147":1,"157":5,"158":1,"159":2,"173":2,"175":3,"177":2,"178":1,"179":2,"180":3,"184":1,"186":2,"189":1,"201":1,"225":3,"228":2,"230":2,"231":1,"235":2,"241":2,"243":3,"246":5,"259":1,"284":1,"317":2,"318":12,"324":2,"330":1,"333":3,"340":1,"341":2,"342":3,"344":2,"350":1,"359":1,"365":1,"383":1,"384":2,"387":2,"388":3,"389":1,"400":1,"435":1,"447":2,"448":2,"449":2,"450":1,"459":2,"461":1,"465":1,"481":1,"490":1,"507":2,"517":1,"518":2,"519":1,"538":1,"544":1,"549":7,"550":1,"551":2,"552":1,"572":1,"597":1,"598":1,"599":3,"600":1,"619":1,"649":1,"656":1,"657":1,"658":1,"660":1,"674":2,"682":1,"683":1,"684":3,"690":2,"715":1,"717":2,"725":2,"727":3,"733":4,"735":2,"740":3,"741":1,"743":1,"749":1,"751":1,"766":1,"769":1,"789":1,"790":2,"791":2,"792":2,"793":1,"825":1,"826":2,"827":12,"829":1,"833":1,"854":1,"861":3,"864":1,"881":5,"896":1,"897":12,"899":1,"905":12,"906":2,"908":1,"921":2,"922":2,"924":1,"926":3,"948":1,"980":1,"986":1,"987":1,"988":5,"989":1,"990":2,"992":2,"996":2,"997":2,"998":1,"1018":1,"1019":1,"1021":1,"1026":1,"1042":3,"1043":1,"1050":1,"1059":2,"1091":3,"1092":2,"1093":2,"1100":2,"1101":2,"1116":2,"1123":1,"1124":1,"1126":2,"1132":1,"1133":3,"1140":1,"1150":1,"1161":2,"1168":1,"1169":2,"1176":1,"1212":2,"1219":1,"1227":1,"1228":3,"1229":16,"1231":1,"1232":1,"1237":20,"1238":2,"1241":4,"1242":3,"1243":1,"1244":1,"1247":44,"1251":1,"1253":1,"1259":19,"1262":1,"1263":6,"1264":8,"1265":5,"1267":6,"1269":1,"1270":100,"1271":20,"1273":1,"1275":1,"1276":4,"1278":1,"1283":1,"1285":2,"1286":139,"1287":2,"1289":1,"1290":3,"1293":2,"1296":2,"1297":4,"1299":1,"1300":139,"1301":22,"1302":1,"1304":2,"1305":1,"1306":2,"1307":2,"1308":2,"1309":49,"1310":7,"1311":90,"1312":14,"1318":1,"1322":1,"1323":81,"1324":127,"1326":1,"1332":1,"1337":1,"1339":44,"1343":1,"1346":3,"1348":2,"1350":45,"1352":1,"1353":2,"1356":1,"1357":6,"1358":2,"1359":256,"1365":1,"1366":2,"1368":2,"1369":6,"1372":1,"1373":4,"1375":3,"1376":1,"1378":2,"1379":2,"1380":65,"1389":3,"1395":40,"1396":196,"1398":1,"1399":3,"1401":5,"1402":128,"1407":1,"1408":1,"1410":2,"1411":2,"1414":1,"1415":64,"1416":3,"1417":57,"1419":1,"1422":5,"1423":10,"1424":1,"1425":1,"1426":1,"1427":27,"1432":2,"1435":1,"1436":73,"1437":1,"1438":17,"1447":1,"1455":2,"1456":2,"1467":5,"1487":1,"1488":2,"1496":1,"1507":1,"1508":1,"1548":1,"1553":2,"1577":2,"1589":1,"1591":1,"1596":1,"1627":1,"1631":4,"1632":8,"1639":1,"1640":4,"1641":2,"1653":2,"1656":1,"1663":1,"1665":1,"1666":1,"1671":1,"1672":2,"1686":2,"1698":1,"1703":1,"1708":2,"1723":2,"1737":1,"1748":2,"1759":1,"1764":2,"1765":7,"1767":2,"1771":1,"1803":3,"1804":1,"1805":3,"1806":1,"1807":2,"1810":1,"1813":1,"1815":3,"1817":1,"1821":6,"1823":1,"1824":1,"1825":1,"1831":2,"1839":1,"1840":1,"1844":3,"1852":1,"1857":1,"1871":1,"1873":1,"1874":1,"1875":1,"1876":2,"1877":3,"1883":1,"1898":1,"1908":2,"1909":5,"1911":2,"1912":1,"1919":4,"1920":6,"1922":3,"1923":3,"1924":3,"1925":2,"1926":1,"1927":1,"1930":1,"1933":2,"1934":2,"1937":2,"1938":1,"1940":1,"1941":2,"1944":1,"1945":2,"1947":2,"1950":2,"1962":1,"1963":1,"1982":4,"1988":1,"1991":1,"1992":1,"1993":3,"1994":10,"1995":6,"1996":1,"1997":2,"2000":3,"2002":2,"2016":1,"2019":1,"2024":6,"2038":1,"2055":1,"2057":1,"2066":1,"2078":1,"2090":1,"2096":1,"2117":2,"2129":2,"2130":2,"2131":2,"2132":1,"2133":1,"2137":1,"2139":1,"2143":1,"2165":1,"2166":3,"2168":1,"2169":1,"2171":1,"2174":4,"2175":2,"2179":2,"2180":2,"2185":2,"2190":1,"2193":2,"2196":2,"2197":1}}],["callbackpath",{"3":{"1311":1}}],["callbackscheme",{"3":{"1416":2}}],["callbacks",{"3":{"180":1,"248":1,"413":1,"744":1,"1259":1,"1323":1,"1324":4,"1385":1,"1387":1,"1390":1,"1395":2,"1402":8,"1416":5,"1417":5,"1447":1,"1555":1,"1560":1,"1973":1}}],["callback",{"1":{"417":1,"418":1,"419":1,"420":1,"421":1,"422":1,"423":1,"424":1,"425":1,"426":1,"427":1,"428":1,"429":1,"430":1},"3":{"0":6,"243":1,"248":3,"265":1,"348":1,"350":4,"351":1,"355":1,"383":1,"397":1,"413":2,"417":1,"418":2,"420":3,"422":1,"427":2,"428":1,"463":1,"518":1,"556":3,"733":1,"831":2,"832":3,"1100":1,"1128":1,"1212":1,"1223":1,"1229":5,"1243":1,"1247":3,"1259":1,"1286":1,"1290":1,"1300":10,"1301":15,"1309":1,"1310":3,"1311":14,"1316":1,"1323":9,"1324":32,"1333":1,"1339":9,"1380":1,"1391":1,"1395":26,"1396":8,"1400":1,"1402":3,"1406":1,"1415":5,"1416":9,"1417":33,"1436":2,"1443":2,"1496":2,"1599":1,"1662":1,"1667":1,"1669":1,"1868":1,"1883":1,"1898":1,"1916":1,"1944":1,"1945":1,"1947":1,"1973":2,"1975":5,"1976":1,"1979":1,"2074":1,"2121":2,"2122":1,"2232":1}}],["calling",{"3":{"0":5,"91":1,"115":1,"214":1,"224":1,"237":2,"243":1,"265":2,"283":1,"310":1,"380":1,"409":1,"418":1,"459":1,"638":1,"657":1,"676":1,"696":1,"700":1,"733":2,"735":1,"741":1,"751":1,"766":2,"840":1,"880":1,"881":1,"906":1,"912":1,"922":1,"924":1,"959":1,"960":1,"979":1,"1012":1,"1016":1,"1017":1,"1018":1,"1020":1,"1042":1,"1090":2,"1134":1,"1184":1,"1212":1,"1229":2,"1232":1,"1234":1,"1237":5,"1241":1,"1251":1,"1259":4,"1263":1,"1270":13,"1271":3,"1275":1,"1286":23,"1291":1,"1300":11,"1301":2,"1304":1,"1309":9,"1311":13,"1312":2,"1315":1,"1316":1,"1317":1,"1323":11,"1324":21,"1336":1,"1339":12,"1350":7,"1353":1,"1359":32,"1365":1,"1366":1,"1369":4,"1376":1,"1378":1,"1380":8,"1395":11,"1396":12,"1402":11,"1415":5,"1416":2,"1417":13,"1425":1,"1427":5,"1432":1,"1436":20,"1438":2,"1467":1,"1476":1,"1488":2,"1526":2,"1540":1,"1553":1,"1577":1,"1578":1,"1641":1,"1687":1,"1790":1,"1805":1,"1821":1,"1844":1,"1882":1,"1914":1,"1944":1,"1983":1,"2019":1,"2027":1,"2074":1,"2085":1,"2113":1,"2150":2,"2170":1,"2171":1,"2185":2,"2232":1}}],["calls",{"1":{"50":1,"51":1,"52":1,"53":1,"54":1,"55":1},"3":{"0":17,"26":1,"27":2,"35":1,"39":2,"41":1,"50":1,"52":2,"57":1,"59":2,"64":1,"74":1,"96":1,"105":1,"120":1,"127":1,"135":1,"175":1,"179":1,"180":1,"185":1,"186":1,"195":2,"200":1,"201":1,"202":1,"206":1,"207":1,"209":1,"214":1,"215":1,"220":1,"225":1,"226":1,"230":1,"243":3,"245":1,"255":2,"256":3,"257":1,"258":2,"259":3,"260":5,"261":3,"279":1,"280":1,"281":2,"283":1,"284":1,"285":1,"303":1,"308":1,"310":1,"318":1,"326":1,"340":1,"341":2,"343":1,"350":4,"354":1,"359":1,"362":1,"370":2,"374":1,"387":1,"390":1,"391":1,"395":2,"397":1,"401":1,"402":3,"405":1,"413":1,"418":1,"420":2,"423":2,"425":1,"426":1,"428":2,"429":1,"430":1,"434":1,"435":1,"453":1,"459":2,"461":1,"464":1,"492":1,"493":1,"494":1,"497":2,"499":2,"502":1,"506":1,"507":1,"517":1,"518":1,"519":1,"522":2,"523":3,"524":1,"534":1,"536":2,"539":3,"545":1,"546":1,"550":2,"551":1,"552":1,"572":1,"583":4,"585":1,"599":2,"603":1,"609":1,"626":1,"640":2,"642":1,"644":1,"649":2,"651":1,"665":2,"667":1,"674":3,"677":2,"682":1,"684":1,"690":1,"696":1,"698":2,"705":1,"707":1,"708":1,"715":3,"724":1,"725":1,"733":4,"749":5,"750":1,"774":2,"819":3,"826":1,"827":2,"829":1,"832":1,"836":1,"837":2,"838":2,"839":2,"857":2,"861":1,"880":1,"881":1,"883":2,"884":1,"885":1,"905":1,"913":1,"922":2,"923":1,"926":1,"946":1,"954":2,"955":1,"956":1,"964":1,"972":1,"979":2,"987":2,"988":2,"996":1,"1011":1,"1012":3,"1013":1,"1017":2,"1018":5,"1020":1,"1022":1,"1034":1,"1042":2,"1050":2,"1052":1,"1055":1,"1059":3,"1062":1,"1090":3,"1091":1,"1093":1,"1094":2,"1095":1,"1100":1,"1101":1,"1108":1,"1133":2,"1161":2,"1162":1,"1168":2,"1179":1,"1183":2,"1185":1,"1202":2,"1203":2,"1212":6,"1213":1,"1222":1,"1229":5,"1231":1,"1233":2,"1235":2,"1236":1,"1237":18,"1240":1,"1244":1,"1245":1,"1247":20,"1249":1,"1251":1,"1256":1,"1257":1,"1258":1,"1259":31,"1262":2,"1263":2,"1265":4,"1270":34,"1271":15,"1274":2,"1275":2,"1276":1,"1281":1,"1282":1,"1283":1,"1286":99,"1287":1,"1289":1,"1292":2,"1297":2,"1300":61,"1301":13,"1308":1,"1309":38,"1310":4,"1311":72,"1312":16,"1315":1,"1316":3,"1317":1,"1323":52,"1324":135,"1326":2,"1329":1,"1330":1,"1332":1,"1333":4,"1336":2,"1339":48,"1340":1,"1344":1,"1346":1,"1347":1,"1349":2,"1350":42,"1352":2,"1353":1,"1354":2,"1355":1,"1359":153,"1360":1,"1362":1,"1365":2,"1366":1,"1368":1,"1369":15,"1372":2,"1376":1,"1377":2,"1378":3,"1380":21,"1382":1,"1383":1,"1384":1,"1385":1,"1388":1,"1395":89,"1396":92,"1399":1,"1400":1,"1401":2,"1402":42,"1405":1,"1409":1,"1414":1,"1415":38,"1416":12,"1417":72,"1421":2,"1423":2,"1424":1,"1426":1,"1427":20,"1429":1,"1431":1,"1432":1,"1436":119,"1438":5,"1441":6,"1442":2,"1443":7,"1444":3,"1447":3,"1450":1,"1454":1,"1455":3,"1456":1,"1457":1,"1466":1,"1467":9,"1475":1,"1476":1,"1488":4,"1489":2,"1490":2,"1491":5,"1492":4,"1496":1,"1508":1,"1526":8,"1527":1,"1534":1,"1537":1,"1544":1,"1548":1,"1549":1,"1553":4,"1568":1,"1572":2,"1577":2,"1582":2,"1591":1,"1592":1,"1599":1,"1600":1,"1605":1,"1632":2,"1639":1,"1640":1,"1641":1,"1647":1,"1651":2,"1653":6,"1656":2,"1663":1,"1677":1,"1685":1,"1701":2,"1719":1,"1730":2,"1739":1,"1781":1,"1789":1,"1790":1,"1793":1,"1799":1,"1810":1,"1817":1,"1825":1,"1829":1,"1830":1,"1831":2,"1839":1,"1840":2,"1865":1,"1869":1,"1871":1,"1874":1,"1881":1,"1882":1,"1883":1,"1884":2,"1885":1,"1908":1,"1910":3,"1913":1,"1916":1,"1918":1,"1922":1,"1927":3,"1929":1,"1933":4,"1935":2,"1938":2,"1940":2,"1944":1,"1946":1,"1960":1,"1963":1,"1968":2,"1970":2,"1971":1,"1975":2,"1978":1,"2000":2,"2001":2,"2006":2,"2010":1,"2014":1,"2015":2,"2016":2,"2017":1,"2018":2,"2020":1,"2022":3,"2024":2,"2028":1,"2029":1,"2030":2,"2037":1,"2048":1,"2055":2,"2063":2,"2074":1,"2078":1,"2083":1,"2091":1,"2092":1,"2096":1,"2097":1,"2117":1,"2118":2,"2119":3,"2126":1,"2127":2,"2142":2,"2143":1,"2149":1,"2152":1,"2153":1,"2156":4,"2160":1,"2164":1,"2171":3,"2172":2,"2178":1,"2179":2,"2186":1,"2189":1,"2199":1,"2202":2,"2232":2}}],["call",{"0":{"1422":1,"1423":1,"1425":1,"2156":1,"2166":1,"2172":1},"2":{"629":1,"766":1,"767":1,"1089":1,"1425":1,"1456":1,"1457":1,"1460":1,"2177":1},"3":{"0":39,"17":1,"24":1,"26":1,"27":1,"39":1,"41":1,"53":1,"68":1,"71":3,"73":1,"74":2,"93":1,"94":2,"95":5,"97":1,"98":2,"99":1,"100":3,"104":1,"109":5,"110":1,"111":5,"113":1,"117":1,"121":3,"122":1,"126":1,"127":2,"128":3,"135":3,"156":1,"180":1,"188":2,"200":1,"202":1,"207":1,"208":1,"209":2,"210":1,"216":1,"223":1,"230":7,"231":1,"237":1,"241":1,"243":5,"245":4,"246":1,"250":1,"253":1,"254":1,"255":2,"256":2,"257":1,"258":1,"259":3,"260":3,"261":2,"265":1,"273":1,"279":4,"281":1,"283":1,"285":1,"295":2,"303":1,"308":1,"310":5,"314":2,"320":1,"323":1,"325":2,"330":1,"336":1,"353":1,"361":1,"387":1,"390":2,"391":1,"392":1,"395":2,"397":1,"398":1,"401":3,"407":2,"408":2,"413":1,"418":2,"420":1,"424":1,"426":1,"427":1,"428":1,"429":1,"430":1,"434":3,"438":1,"444":2,"446":3,"448":5,"449":1,"453":1,"454":2,"459":5,"460":1,"463":1,"465":1,"466":2,"472":1,"481":2,"483":1,"489":1,"499":2,"502":1,"507":1,"508":1,"509":1,"511":1,"513":1,"514":1,"517":2,"518":1,"522":3,"523":2,"524":3,"536":2,"538":3,"539":1,"544":1,"545":3,"548":1,"549":4,"550":2,"552":2,"556":4,"559":1,"567":1,"583":1,"584":3,"585":1,"591":1,"592":2,"593":1,"594":1,"599":1,"603":2,"618":2,"626":1,"628":1,"629":2,"632":1,"633":2,"641":1,"642":1,"647":2,"649":3,"650":1,"655":1,"656":1,"657":1,"658":1,"661":1,"663":2,"665":6,"667":1,"668":1,"669":2,"672":2,"674":7,"676":1,"682":1,"690":3,"696":5,"698":2,"700":2,"703":1,"707":2,"715":2,"716":1,"724":2,"725":1,"731":1,"733":7,"735":1,"741":1,"748":3,"749":7,"750":1,"751":2,"752":2,"757":1,"759":1,"766":4,"767":1,"768":1,"774":4,"777":1,"782":1,"784":2,"789":1,"790":1,"791":1,"797":1,"798":1,"799":3,"800":1,"802":1,"803":2,"810":1,"814":2,"819":6,"821":2,"826":2,"827":5,"829":1,"831":1,"832":1,"837":1,"838":1,"846":2,"848":1,"850":2,"854":1,"861":4,"881":6,"882":2,"883":1,"889":2,"890":1,"896":1,"897":9,"899":2,"900":2,"905":1,"913":1,"920":1,"922":2,"924":2,"926":3,"930":1,"934":2,"946":3,"948":1,"949":1,"950":1,"952":1,"954":5,"955":2,"957":1,"964":2,"965":2,"966":1,"972":1,"980":1,"988":4,"989":1,"990":1,"994":2,"995":1,"996":3,"999":1,"1012":1,"1016":1,"1017":2,"1018":8,"1019":3,"1020":2,"1021":1,"1028":2,"1034":1,"1035":1,"1050":2,"1051":4,"1052":1,"1059":1,"1067":1,"1089":2,"1090":1,"1091":7,"1092":5,"1093":5,"1094":1,"1095":1,"1099":1,"1100":1,"1102":2,"1103":1,"1126":1,"1127":1,"1132":2,"1133":3,"1134":3,"1136":1,"1150":1,"1156":1,"1168":3,"1170":1,"1175":3,"1176":3,"1182":1,"1183":1,"1184":1,"1185":1,"1186":3,"1188":1,"1212":6,"1217":1,"1220":2,"1221":2,"1226":1,"1229":10,"1234":1,"1236":2,"1237":20,"1239":1,"1240":1,"1241":1,"1243":1,"1244":2,"1246":1,"1247":53,"1249":1,"1252":2,"1253":2,"1259":22,"1261":1,"1262":6,"1263":5,"1265":2,"1267":1,"1269":1,"1270":41,"1271":14,"1273":3,"1275":1,"1276":1,"1278":3,"1279":1,"1280":1,"1283":1,"1286":134,"1287":1,"1289":1,"1290":1,"1291":1,"1293":2,"1297":1,"1298":2,"1300":79,"1301":21,"1302":2,"1303":1,"1304":1,"1309":27,"1310":10,"1311":85,"1312":32,"1313":1,"1315":2,"1316":4,"1318":4,"1322":1,"1323":84,"1324":197,"1326":1,"1327":1,"1328":1,"1329":1,"1331":3,"1332":2,"1333":3,"1335":1,"1337":2,"1338":3,"1339":99,"1342":1,"1343":1,"1347":2,"1350":61,"1352":1,"1354":1,"1358":4,"1359":214,"1362":3,"1365":2,"1366":9,"1367":1,"1368":4,"1369":25,"1372":1,"1377":1,"1378":2,"1380":41,"1382":2,"1383":1,"1384":2,"1385":1,"1387":2,"1388":2,"1390":3,"1391":1,"1392":2,"1393":1,"1395":134,"1396":155,"1398":2,"1401":1,"1402":39,"1408":1,"1409":1,"1410":2,"1413":2,"1414":1,"1415":79,"1416":18,"1417":81,"1418":3,"1420":2,"1421":3,"1422":2,"1423":4,"1425":4,"1427":61,"1430":2,"1431":1,"1432":1,"1435":1,"1436":164,"1438":16,"1441":7,"1442":8,"1443":5,"1444":4,"1445":1,"1446":2,"1447":3,"1448":1,"1449":1,"1450":1,"1453":1,"1456":3,"1457":1,"1460":2,"1466":1,"1467":5,"1470":1,"1472":1,"1475":4,"1476":1,"1477":1,"1479":1,"1482":2,"1486":1,"1487":1,"1488":4,"1489":5,"1490":4,"1491":1,"1492":1,"1496":4,"1510":1,"1526":9,"1530":1,"1531":2,"1532":1,"1534":1,"1544":1,"1553":3,"1555":1,"1566":2,"1572":1,"1581":1,"1582":2,"1591":2,"1596":1,"1599":1,"1600":1,"1627":3,"1630":1,"1631":1,"1632":4,"1636":1,"1637":1,"1639":1,"1651":1,"1653":4,"1659":1,"1663":1,"1664":1,"1665":1,"1667":1,"1668":3,"1669":1,"1670":2,"1671":1,"1673":1,"1675":1,"1684":4,"1685":2,"1686":3,"1701":1,"1719":2,"1720":1,"1721":1,"1724":1,"1734":1,"1749":1,"1765":3,"1783":1,"1789":2,"1790":5,"1792":1,"1803":1,"1805":1,"1806":5,"1808":1,"1810":4,"1811":1,"1813":1,"1815":5,"1817":2,"1818":1,"1821":1,"1824":2,"1825":2,"1835":1,"1839":2,"1840":1,"1842":1,"1843":1,"1848":1,"1851":1,"1865":3,"1867":1,"1881":2,"1882":1,"1883":3,"1886":2,"1895":1,"1898":1,"1902":1,"1908":2,"1915":3,"1916":3,"1919":2,"1920":1,"1923":2,"1924":2,"1927":1,"1932":1,"1933":1,"1934":2,"1936":1,"1937":1,"1939":1,"1940":2,"1946":1,"1951":1,"1954":1,"1955":1,"1960":1,"1962":1,"1963":2,"1964":1,"1966":1,"1968":1,"1970":3,"1971":3,"1972":1,"1973":1,"1979":1,"1989":1,"1992":1,"1994":1,"1995":3,"2000":3,"2006":2,"2008":1,"2009":1,"2010":1,"2011":1,"2012":1,"2013":1,"2016":1,"2017":2,"2018":1,"2019":3,"2020":1,"2024":3,"2029":1,"2030":4,"2032":3,"2033":1,"2035":1,"2038":1,"2046":1,"2047":1,"2057":1,"2063":2,"2070":1,"2071":1,"2074":2,"2076":1,"2079":2,"2080":1,"2082":1,"2083":2,"2086":1,"2087":1,"2093":1,"2095":1,"2096":1,"2098":1,"2113":1,"2119":2,"2131":3,"2133":2,"2135":1,"2136":2,"2145":1,"2150":2,"2151":1,"2152":1,"2154":2,"2156":5,"2157":1,"2160":3,"2163":1,"2164":1,"2165":2,"2166":1,"2167":3,"2168":2,"2169":1,"2170":3,"2171":2,"2172":2,"2174":5,"2175":2,"2176":1,"2177":2,"2179":5,"2180":6,"2186":1,"2189":2,"2190":1,"2193":1,"2198":1,"2199":1,"2202":3,"2209":1,"2230":1,"2232":2}}],["cachingtestentity",{"3":{"1199":2,"1207":1}}],["cachingdecoratortenantscopingtests",{"3":{"1199":1,"1207":2,"1438":2}}],["cachingdecoratorconstructorselectiontests",{"3":{"1199":1,"1207":6,"1438":2}}],["cachingcommanddecoratortests",{"3":{"1199":1,"1207":6}}],["cachingcommanddecorator",{"2":{"1260":1,"1753":1,"1774":1,"1918":1},"3":{"698":1,"1199":6,"1203":1,"1207":2,"1260":1,"1263":9,"1267":2,"1270":30,"1301":8,"1323":1,"1359":11,"1436":1,"1753":1,"1774":1,"1918":1}}],["cachingquerydecoratortests",{"3":{"1199":1,"1207":13,"1270":1}}],["cachingquerydecorator",{"2":{"123":1,"246":1,"1223":1,"1267":1,"1917":1,"1923":1},"3":{"123":2,"246":2,"674":2,"698":1,"733":1,"1199":6,"1203":1,"1207":3,"1223":2,"1229":2,"1260":1,"1263":6,"1267":11,"1268":1,"1270":56,"1300":6,"1301":16,"1323":5,"1436":1,"1467":1,"1496":2,"1917":1,"1923":1}}],["caching",{"0":{"1379":1,"1668":1,"1708":1,"1922":1},"1":{"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"385":1,"386":1,"387":1,"388":1,"389":1,"390":1,"391":1,"392":1,"393":1,"1301":1,"1818":1,"1819":1,"1820":1,"1821":1,"1822":1,"1823":1,"1824":1,"1825":1,"1826":1,"1827":1},"2":{"253":1,"259":1,"732":1,"733":1,"736":1,"999":1,"1301":2,"1339":1,"1915":1,"1916":1},"3":{"0":13,"25":1,"115":1,"117":2,"118":1,"121":3,"122":5,"123":1,"124":1,"126":2,"157":1,"160":1,"162":1,"186":1,"190":1,"235":1,"239":1,"240":1,"242":3,"243":16,"244":1,"245":5,"246":2,"247":2,"252":1,"253":1,"255":4,"256":1,"258":2,"259":3,"260":3,"261":3,"285":2,"300":1,"343":1,"385":1,"387":1,"389":1,"390":2,"391":1,"392":1,"400":1,"460":1,"674":4,"677":1,"701":1,"702":1,"732":3,"733":8,"736":4,"737":1,"740":1,"789":1,"885":1,"897":4,"924":1,"980":2,"996":6,"999":2,"1011":1,"1149":1,"1150":2,"1151":1,"1157":1,"1192":3,"1202":3,"1203":19,"1207":69,"1208":4,"1212":7,"1223":1,"1229":1,"1237":2,"1241":1,"1247":8,"1259":6,"1261":2,"1263":2,"1264":1,"1267":1,"1268":1,"1270":36,"1271":1,"1278":1,"1286":14,"1296":1,"1300":8,"1301":105,"1309":2,"1310":1,"1311":34,"1313":1,"1316":7,"1320":5,"1323":23,"1324":25,"1332":2,"1339":9,"1352":2,"1359":15,"1375":2,"1379":1,"1380":4,"1395":8,"1396":5,"1409":1,"1415":6,"1417":2,"1421":2,"1427":2,"1432":1,"1436":4,"1437":1,"1438":6,"1441":1,"1442":1,"1445":1,"1487":1,"1496":11,"1507":4,"1526":3,"1549":2,"1556":1,"1560":1,"1577":5,"1600":1,"1602":1,"1651":5,"1654":2,"1660":1,"1662":3,"1668":2,"1685":2,"1686":1,"1700":2,"1708":1,"1720":1,"1721":2,"1727":1,"1730":1,"1748":1,"1786":1,"1817":1,"1818":3,"1820":1,"1821":3,"1823":1,"1824":1,"1827":1,"1851":2,"1879":1,"1914":1,"1915":1,"1916":1,"1918":1,"1919":1,"1922":1,"1923":2,"1924":2,"2031":1,"2092":1,"2095":1,"2096":3,"2097":1,"2111":2,"2134":1,"2135":1,"2136":2,"2139":1,"2156":1,"2190":1,"2206":1,"2208":1,"2227":2,"2228":1,"2230":1,"2232":2}}],["cacheexpireson",{"3":{"1396":1}}],["cacheexpirationhours",{"2":{"157":1},"3":{"157":1,"1311":3}}],["cachettl",{"3":{"1395":2}}],["cachetag",{"3":{"1311":1}}],["cachecontrol",{"3":{"1286":4,"1323":1,"1339":1}}],["cacheinvalidating",{"3":{"1270":4}}],["cacheinvalidatingtestcommand",{"3":{"1199":3,"1207":1}}],["cachereachable",{"3":{"1311":1}}],["cachereadfailurequery",{"3":{"1199":2,"1207":1}}],["cachereadfailuremetricquery",{"3":{"1199":2,"1207":1}}],["cachereadcanceledquery",{"3":{"1199":2,"1207":1}}],["cacherequestasync",{"2":{"261":1},"3":{"243":1,"261":1,"1311":1}}],["cachepipelinetestcommand",{"3":{"1199":2,"1207":1}}],["cacheprobeentity",{"3":{"1199":2,"1207":1}}],["cacheprefix",{"2":{"924":1,"925":1,"1918":1,"1920":1,"2092":1},"3":{"0":1,"117":1,"922":1,"924":1,"925":1,"926":1,"1264":1,"1265":1,"1270":15,"1301":1,"1311":1,"1323":1,"1359":51,"1380":1,"1415":6,"1651":1,"1685":1,"1686":1,"1918":2,"1920":1,"2092":1}}],["cachemissmetricquery",{"3":{"1199":2,"1207":1}}],["cachehitmetricquery",{"3":{"1199":2,"1207":1}}],["cacheability",{"3":{"389":1}}],["cacheabletestquery",{"3":{"1199":3,"1207":1}}],["cacheable",{"3":{"123":2,"243":1,"246":2,"633":1,"1270":5,"1301":4,"1311":3,"1700":1,"1726":1,"1727":1,"1730":1,"1920":2,"1923":1,"2097":1}}],["cachevarybyrules",{"2":{"243":1,"246":1,"247":1,"740":2,"1922":1},"3":{"243":1,"246":1,"247":1,"388":1,"740":2,"1311":2,"1324":1,"1922":1}}],["cacheoptionstests",{"3":{"1199":1,"1207":2,"1301":1}}],["cacheoptions",{"2":{"243":2,"252":1,"254":1,"736":1,"1708":2,"1916":1},"3":{"243":4,"252":2,"254":4,"256":2,"257":2,"259":1,"261":1,"736":1,"1199":7,"1203":1,"1207":2,"1301":26,"1708":2,"1916":1}}],["cachekeys",{"3":{"1701":1,"1727":1,"1730":1,"2097":1}}],["cachekeynamespace",{"2":{"996":1,"999":1},"3":{"733":2,"996":1,"999":1,"1199":8,"1203":1,"1207":1,"1301":20,"1323":6,"1496":2}}],["cachekeylocks",{"3":{"733":1,"1199":2,"1203":1,"1207":1,"1260":1,"1267":1,"1270":2,"1300":1,"1301":4,"1496":2}}],["cachekey",{"2":{"123":1,"248":1,"1730":1,"1920":1,"2097":1},"3":{"117":1,"123":2,"246":1,"248":1,"1264":1,"1270":12,"1286":2,"1324":6,"1359":1,"1496":1,"1651":1,"1685":1,"1701":1,"1730":1,"1920":2,"2096":1,"2097":1}}],["cachekeyprefixoptions",{"3":{"674":1,"1199":4,"1203":1,"1207":1,"1301":9,"1323":1,"1496":2}}],["cachekeyprefix",{"3":{"25":1,"246":1,"996":1,"998":1,"999":1,"1207":2,"1301":35,"1311":1,"1320":1,"1323":1,"1496":2}}],["cachesettingstests",{"3":{"1199":1,"1207":2,"1301":1,"1323":2}}],["cachesettings",{"2":{"731":2,"1708":1,"1916":1},"3":{"674":1,"731":1,"733":3,"1192":1,"1199":8,"1203":1,"1207":2,"1301":33,"1320":2,"1323":5,"1496":1,"1708":2,"1916":1}}],["cacheservicegetorcreatetests",{"3":{"1199":1,"1207":3,"1301":1}}],["cacheservice",{"3":{"459":1,"465":1,"1300":1,"1323":1,"1415":1}}],["cacheseconds",{"2":{"1061":1,"2199":1,"2202":1},"3":{"0":3,"235":1,"830":1,"833":1,"1059":1,"1061":2,"1286":3,"1297":1,"1300":1,"1332":1,"1339":2,"1447":1,"2199":1,"2202":2}}],["caches",{"3":{"33":1,"162":1,"235":1,"243":2,"245":1,"390":1,"391":1,"441":1,"459":1,"507":1,"545":2,"592":1,"733":1,"735":1,"827":1,"830":1,"868":1,"964":1,"1052":1,"1055":1,"1229":1,"1237":3,"1239":1,"1241":1,"1242":2,"1247":8,"1259":3,"1270":5,"1278":1,"1279":1,"1286":15,"1288":1,"1300":12,"1301":3,"1305":1,"1310":1,"1323":4,"1324":4,"1334":1,"1339":1,"1359":4,"1385":1,"1387":2,"1395":4,"1396":3,"1411":1,"1415":1,"1417":1,"1421":1,"1436":2,"1438":1,"1453":1,"1455":1,"1456":1,"1567":1,"1666":1,"1672":1,"1748":1,"1753":1,"1774":2,"1815":2,"1849":1,"1912":1,"1914":1,"1915":1,"1916":1,"1917":1,"1922":2,"1923":3,"1924":1,"1934":1,"2024":1,"2069":1,"2127":1,"2172":1}}],["cachedirectory",{"3":{"1417":1}}],["cacheduntil",{"3":{"1395":3}}],["cacheduration",{"2":{"463":1,"2096":1},"3":{"117":1,"463":1,"1264":1,"1270":8,"1301":2,"1359":2,"1396":1,"1496":1,"1651":1,"2096":1}}],["cachedresult",{"3":{"1311":1}}],["cachedroles",{"3":{"1286":2}}],["cachedkeyset",{"3":{"1300":1}}],["cachedsuccess",{"3":{"1229":1}}],["cachedoublecheckmetricquery",{"3":{"1199":2,"1207":1}}],["cachedpage",{"3":{"1199":2,"1203":1,"1207":1,"1324":6}}],["cachedcompile",{"2":{"591":1},"3":{"591":2}}],["cachedhealthreportprovidertests",{"3":{"1199":1,"1207":4,"1339":2}}],["cachedhealthreportprovider",{"2":{"233":1,"235":1,"830":1,"833":1,"1447":1},"3":{"0":1,"233":1,"235":3,"830":3,"833":1,"1199":3,"1203":1,"1207":3,"1332":3,"1339":20,"1447":1,"1496":2}}],["cached",{"3":{"0":9,"21":1,"24":1,"155":1,"157":3,"159":2,"160":2,"174":1,"176":1,"184":1,"201":1,"235":1,"243":2,"245":1,"248":1,"255":2,"330":1,"387":1,"388":2,"390":1,"391":3,"392":1,"459":5,"460":1,"461":1,"463":1,"545":1,"697":1,"698":2,"733":2,"741":2,"743":1,"825":1,"830":1,"905":1,"922":1,"924":1,"1028":2,"1061":1,"1091":3,"1116":1,"1134":1,"1212":2,"1221":1,"1229":2,"1230":1,"1236":1,"1237":6,"1238":1,"1242":3,"1243":1,"1244":1,"1247":15,"1249":1,"1250":2,"1252":1,"1259":8,"1263":1,"1270":18,"1278":4,"1286":24,"1294":1,"1295":1,"1298":1,"1300":21,"1301":17,"1307":1,"1309":3,"1310":5,"1311":24,"1322":1,"1323":3,"1324":23,"1332":1,"1339":8,"1350":3,"1352":1,"1359":31,"1369":1,"1373":2,"1376":2,"1379":2,"1380":10,"1391":4,"1395":28,"1396":11,"1402":1,"1406":1,"1407":1,"1415":6,"1416":3,"1417":6,"1426":2,"1427":2,"1436":6,"1438":4,"1447":1,"1456":1,"1458":3,"1507":1,"1535":1,"1556":2,"1589":1,"1591":2,"1596":1,"1631":3,"1638":1,"1640":4,"1651":1,"1662":2,"1668":1,"1748":3,"1758":1,"1765":3,"1774":1,"1815":1,"1821":1,"1823":1,"1851":1,"1865":1,"1867":2,"1895":2,"1908":3,"1909":2,"1911":2,"1913":1,"1914":1,"1915":1,"1916":1,"1917":2,"1918":1,"1920":1,"1922":4,"1923":2,"1924":1,"1945":1,"1972":1,"1988":1,"1999":1,"2000":1,"2047":1,"2066":1,"2096":1,"2136":1,"2149":1,"2150":1,"2156":1,"2176":2,"2202":1,"2232":2}}],["cache",{"0":{"1294":1,"1915":1,"1921":1},"1":{"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"851":1,"852":1,"853":1,"854":1,"855":1,"856":1,"857":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"1919":1,"1920":1,"1921":1,"1922":1,"1923":1,"1924":1},"2":{"255":1,"258":1,"400":1,"731":1,"897":1,"899":1,"1708":1,"1919":1,"1922":1},"3":{"0":47,"15":1,"25":4,"116":1,"117":2,"120":2,"122":1,"140":1,"155":1,"157":8,"158":1,"159":4,"161":3,"175":1,"176":1,"177":1,"181":1,"186":1,"190":1,"195":1,"212":1,"217":4,"233":1,"234":1,"235":7,"236":1,"237":3,"240":1,"241":6,"242":3,"243":17,"244":2,"245":3,"246":4,"247":1,"248":4,"249":2,"253":1,"255":6,"256":1,"258":3,"259":4,"282":1,"283":3,"285":1,"328":1,"330":1,"333":2,"337":2,"343":1,"350":1,"351":1,"373":2,"382":1,"386":3,"387":4,"388":3,"389":1,"390":4,"391":1,"392":1,"400":3,"441":1,"443":1,"444":1,"459":13,"460":2,"461":7,"463":6,"464":2,"465":3,"549":1,"550":1,"592":6,"593":1,"595":1,"657":1,"665":1,"666":2,"672":2,"674":3,"698":4,"699":3,"700":1,"731":5,"732":5,"733":5,"734":4,"735":3,"736":1,"737":3,"740":5,"742":2,"743":1,"744":1,"745":2,"749":1,"753":1,"757":1,"788":1,"792":2,"793":1,"794":1,"826":4,"828":1,"851":1,"852":1,"853":1,"854":3,"855":2,"856":2,"869":3,"871":1,"872":2,"879":1,"881":4,"885":1,"896":3,"897":7,"899":2,"922":1,"923":2,"924":1,"995":2,"996":6,"997":2,"998":4,"999":2,"1000":1,"1012":1,"1028":2,"1029":1,"1042":1,"1058":1,"1059":2,"1091":1,"1093":2,"1103":1,"1116":4,"1150":1,"1156":1,"1192":2,"1202":2,"1203":2,"1212":6,"1213":1,"1223":2,"1229":7,"1235":1,"1237":9,"1239":1,"1241":3,"1242":3,"1244":1,"1247":29,"1249":1,"1259":10,"1260":1,"1263":7,"1264":1,"1265":1,"1267":9,"1268":2,"1270":87,"1273":1,"1275":1,"1278":1,"1285":1,"1286":32,"1287":1,"1288":1,"1292":1,"1294":3,"1298":1,"1300":62,"1301":101,"1304":1,"1309":5,"1310":6,"1311":72,"1316":1,"1320":3,"1323":41,"1324":52,"1332":6,"1337":1,"1339":42,"1348":3,"1350":18,"1352":1,"1359":128,"1360":1,"1367":1,"1368":1,"1369":5,"1373":3,"1375":3,"1379":8,"1380":50,"1387":1,"1388":3,"1391":1,"1395":53,"1396":24,"1397":1,"1400":1,"1402":2,"1406":1,"1407":1,"1409":1,"1415":21,"1416":1,"1417":29,"1421":2,"1427":3,"1429":1,"1436":9,"1437":3,"1438":27,"1439":1,"1441":1,"1442":5,"1443":5,"1445":2,"1446":1,"1447":1,"1453":5,"1454":1,"1455":12,"1456":5,"1461":1,"1465":8,"1467":3,"1469":2,"1487":3,"1492":3,"1496":15,"1507":1,"1511":1,"1526":3,"1534":1,"1535":1,"1545":1,"1549":1,"1577":7,"1591":6,"1600":4,"1630":1,"1631":1,"1635":1,"1637":1,"1638":1,"1640":2,"1641":4,"1651":7,"1660":1,"1662":2,"1664":2,"1667":4,"1668":9,"1669":1,"1670":1,"1672":2,"1675":1,"1695":1,"1702":1,"1708":10,"1727":1,"1748":5,"1753":2,"1765":5,"1774":1,"1779":1,"1818":1,"1819":1,"1821":7,"1822":3,"1827":1,"1849":1,"1851":4,"1908":4,"1909":14,"1911":3,"1912":6,"1913":5,"1914":2,"1915":1,"1916":5,"1917":4,"1918":6,"1919":1,"1920":7,"1921":5,"1922":12,"1923":15,"1924":9,"1934":2,"1949":1,"1975":2,"1979":1,"1988":2,"1989":5,"2000":1,"2001":6,"2002":2,"2003":1,"2006":2,"2007":3,"2012":3,"2024":2,"2047":3,"2066":3,"2069":1,"2076":1,"2079":1,"2089":1,"2096":3,"2126":1,"2127":3,"2128":1,"2135":1,"2136":1,"2149":4,"2150":1,"2153":1,"2156":8,"2160":1,"2179":2,"2180":1,"2184":1,"2199":3,"2203":3,"2208":1,"2232":9}}],["cat",{"3":{"2220":1}}],["categorized",{"3":{"1631":1}}],["categorization",{"3":{"1395":1,"1764":1}}],["categoriessynced",{"3":{"1350":1,"1359":1}}],["categoriesmanage",{"3":{"1350":2,"1359":1,"1373":1,"1380":7}}],["categoriescontroller",{"2":{"1874":1,"1986":1},"3":{"897":1,"900":1,"1311":4,"1591":1,"1874":1,"1986":1}}],["categoriescache",{"2":{"392":1,"393":1},"3":{"175":1,"392":1,"393":1,"1350":1,"1379":1,"1380":2}}],["categories",{"0":{"1493":1,"1796":1},"1":{"1780":1,"1781":1,"1782":1,"1783":1,"1784":1,"1785":1,"1786":1,"1787":1},"2":{"1359":1,"1380":1},"3":{"0":2,"109":1,"110":1,"111":1,"186":1,"545":1,"556":1,"782":1,"881":2,"897":1,"1004":1,"1011":2,"1012":5,"1193":1,"1202":1,"1203":53,"1207":160,"1212":1,"1216":4,"1224":1,"1229":7,"1237":2,"1247":1,"1270":7,"1301":1,"1310":3,"1311":1,"1318":1,"1322":1,"1324":4,"1342":2,"1344":1,"1347":1,"1350":31,"1352":1,"1353":1,"1354":1,"1358":2,"1359":175,"1363":1,"1367":1,"1369":6,"1380":24,"1381":1,"1382":3,"1383":1,"1384":4,"1385":1,"1387":2,"1395":54,"1415":2,"1416":1,"1417":1,"1436":6,"1437":1,"1438":3,"1447":1,"1452":1,"1458":1,"1465":1,"1467":2,"1471":1,"1495":1,"1499":2,"1502":1,"1519":2,"1523":2,"1526":1,"1532":1,"1536":2,"1554":1,"1565":1,"1574":4,"1578":1,"1580":2,"1583":1,"1586":2,"1588":3,"1591":1,"1592":1,"1594":1,"1597":1,"1598":1,"1621":1,"1625":1,"1629":4,"1630":1,"1631":3,"1632":5,"1636":2,"1637":1,"1638":2,"1639":4,"1640":1,"1673":2,"1677":1,"1742":1,"1746":4,"1748":9,"1750":6,"1763":1,"1764":1,"1768":3,"1771":1,"1773":1,"1777":1,"1779":1,"1780":1,"1784":3,"1794":1,"1796":4,"1799":1,"1801":1,"1802":1,"1807":1,"2109":1,"2110":2,"2114":1,"2115":1,"2141":1,"2162":1,"2205":1}}],["categorydto",{"3":{"1748":1}}],["categorydetail",{"3":{"1591":1,"1600":1}}],["categorydistribution",{"3":{"1350":2,"1395":1}}],["categorydistributiondto",{"3":{"1199":10,"1203":1,"1207":4,"1347":1,"1350":10,"1359":4,"1380":1}}],["categorybuilder",{"3":{"1436":1}}],["categoryweight",{"3":{"1359":2}}],["categorygroups",{"3":{"1359":1}}],["categorygroupdistribution",{"2":{"1347":1},"3":{"1199":6,"1203":1,"1207":1,"1347":1,"1350":4,"1359":1}}],["categorytitlerequiredkey",{"3":{"1395":1}}],["categorytitles",{"3":{"1395":4}}],["categorytitle",{"3":{"1350":1,"1395":8}}],["categorytests",{"3":{"1199":1,"1207":2}}],["categorylisttests",{"3":{"1591":2,"1600":1}}],["categorylistpage",{"3":{"1436":1}}],["categorylist",{"3":{"1324":1,"1591":2}}],["categoryentityqueryservice",{"3":{"1247":2}}],["categoryname",{"2":{"1990":1},"3":{"1247":3,"1990":1}}],["categorycreated",{"3":{"1631":1,"1634":1}}],["categorycreate",{"3":{"1596":1}}],["categorycreaterequest",{"3":{"1270":1}}],["categoryconfiguration",{"3":{"1286":1,"1369":1,"1767":1}}],["categorycommandvalidatortests",{"3":{"1207":2,"1359":1}}],["categorychanged",{"2":{"1634":1},"3":{"782":2,"1199":4,"1203":1,"1207":2,"1259":2,"1345":1,"1350":10,"1359":4,"1385":1,"1395":1,"1631":1,"1634":1,"1748":1,"1769":1}}],["categoryscore",{"3":{"1359":1}}],["categorysyncstrategytests",{"3":{"1199":1,"1207":2,"1359":1}}],["categorysyncstrategy",{"3":{"1199":3,"1203":1,"1207":2,"1358":1,"1359":11}}],["categoryservice",{"3":{"881":1,"1324":1,"1395":1}}],["category=aieval",{"3":{"1018":1,"1435":1,"1438":1,"1455":1,"1492":1}}],["categoryinvariantstests",{"3":{"1199":1,"1207":2}}],["categoryinvariants",{"2":{"1344":1,"1350":1,"1359":1,"1369":1},"3":{"1198":1,"1199":14,"1203":1,"1207":2,"1344":5,"1350":16,"1359":25,"1369":5,"1767":2}}],["categoryid",{"2":{"891":1,"1776":1},"3":{"891":1,"1271":1,"1350":9,"1359":21,"1362":1,"1369":3,"1380":9,"1395":4,"1634":1,"1640":1,"1755":1,"1764":1,"1776":1}}],["categoryitemid",{"3":{"1350":13,"1359":24,"1369":6,"1380":10,"1395":8,"1631":2,"1635":2}}],["categoryitemidentifiertype",{"3":{"1350":9,"1359":14,"1380":4,"1395":12}}],["categoryiteminfo",{"3":{"1199":16,"1203":1,"1207":1,"1387":1,"1395":14}}],["categoryitemcount",{"2":{"1354":1},"3":{"1350":3,"1354":1,"1359":5}}],["categoryitemconfiguration",{"3":{"1199":2,"1203":1,"1207":2,"1350":1,"1359":2,"1362":2,"1369":10}}],["categoryitemchanged",{"2":{"1345":1,"1634":1},"3":{"1199":2,"1203":1,"1207":2,"1345":1,"1350":10,"1359":5,"1631":1,"1634":1}}],["categoryitemnamemaxlength",{"2":{"1369":1},"3":{"1350":3,"1359":5,"1369":2}}],["categoryitemnames",{"3":{"1350":2,"1395":1}}],["categoryitemname",{"3":{"1350":1,"1395":1}}],["categoryitemnamerules",{"3":{"1199":4,"1203":1,"1207":1,"1353":1,"1359":13}}],["categoryitemnavigationpopulatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["categoryitemnavigationpopulator",{"3":{"1199":3,"1203":1,"1207":2,"1310":3,"1359":4}}],["categoryitemlookupservice",{"2":{"1387":1},"3":{"1199":3,"1203":1,"1207":2,"1300":2,"1324":4,"1380":1,"1387":2,"1395":12}}],["categoryitemdtomappertests",{"3":{"1199":1,"1207":2}}],["categoryitemdtomapper",{"3":{"1199":9,"1203":1,"1207":2,"1350":4,"1353":2,"1359":11}}],["categoryitemdto",{"3":{"1199":13,"1203":1,"1207":2,"1347":1,"1350":15,"1359":9,"1380":1,"1384":1,"1395":13}}],["categoryitemdistribution",{"2":{"1347":1},"3":{"1199":6,"1203":1,"1207":1,"1347":1,"1350":7,"1359":3}}],["categoryitemsexcept",{"3":{"1395":1}}],["categoryitemservice",{"2":{"1382":1},"3":{"881":1,"1199":2,"1203":1,"1207":2,"1382":3,"1395":7}}],["categoryitemssynced",{"3":{"1350":1,"1359":1}}],["categoryitems",{"2":{"1354":1},"3":{"1310":2,"1350":12,"1354":1,"1359":25,"1363":1,"1369":2,"1380":3,"1395":8,"1447":1,"1630":1,"1632":4,"1636":1,"1639":8,"1640":1}}],["categoryitemscontrollertests",{"3":{"1199":1,"1207":2}}],["categoryitemscontroller",{"2":{"1371":1,"1372":1},"3":{"1199":2,"1203":1,"1207":4,"1311":4,"1359":24,"1371":2,"1372":2,"1373":1,"1374":1,"1380":26,"1436":1}}],["categoryitemsortrules",{"3":{"1199":4,"1203":1,"1207":1,"1359":12}}],["categoryitem",{"2":{"891":1},"3":{"891":1,"1198":1,"1199":16,"1203":1,"1207":2,"1237":1,"1340":1,"1342":2,"1343":1,"1344":1,"1350":43,"1359":41,"1369":9,"1380":6,"1395":1,"1630":6,"1631":2,"1632":2,"1634":2,"1635":3,"1638":5,"1639":6,"1640":3}}],["categoryassignparentupdatehandler",{"2":{"543":1,"551":1,"924":1,"927":1},"3":{"543":1,"545":1,"550":1,"551":1,"924":1,"927":1,"1270":2}}],["category",{"0":{"1216":1,"1450":1,"1461":1,"1469":1,"1516":1},"1":{"1009":1,"1010":1,"1011":1,"1012":1,"1013":1,"1014":1,"1794":1,"1795":1,"1796":1,"1797":1,"1798":1,"1799":1,"1800":1,"1801":1,"1802":1},"2":{"11":1,"804":1,"924":1,"1594":1,"1990":1,"2110":1},"3":{"0":7,"11":1,"109":4,"110":3,"111":1,"168":1,"188":1,"390":1,"403":1,"550":1,"804":1,"819":1,"860":1,"882":1,"924":2,"963":1,"972":1,"1009":1,"1010":1,"1011":5,"1012":4,"1013":2,"1014":1,"1017":1,"1022":1,"1028":1,"1090":2,"1190":1,"1192":2,"1193":2,"1194":1,"1198":1,"1199":52,"1201":1,"1202":1,"1203":2,"1207":3,"1216":3,"1222":1,"1229":4,"1237":6,"1241":1,"1247":10,"1259":1,"1270":2,"1286":3,"1301":1,"1310":5,"1311":1,"1312":1,"1315":1,"1317":1,"1320":1,"1323":2,"1324":7,"1339":4,"1340":1,"1342":3,"1343":4,"1344":1,"1347":2,"1348":1,"1350":124,"1351":2,"1352":1,"1353":1,"1354":1,"1359":264,"1362":3,"1369":14,"1371":2,"1375":1,"1376":1,"1380":17,"1382":1,"1385":1,"1386":1,"1387":2,"1390":1,"1395":98,"1396":1,"1416":1,"1417":3,"1418":1,"1427":2,"1431":2,"1436":13,"1437":1,"1438":5,"1440":1,"1450":1,"1456":1,"1457":1,"1458":1,"1459":1,"1461":1,"1467":5,"1469":1,"1487":1,"1492":1,"1493":1,"1496":5,"1497":1,"1498":1,"1499":2,"1518":2,"1519":2,"1521":1,"1523":1,"1526":7,"1527":1,"1529":2,"1530":1,"1531":1,"1532":3,"1533":1,"1535":3,"1536":2,"1537":10,"1553":1,"1575":2,"1577":3,"1578":1,"1580":1,"1581":1,"1582":1,"1583":3,"1584":3,"1585":1,"1586":1,"1588":1,"1591":5,"1592":2,"1594":1,"1595":1,"1597":2,"1598":2,"1600":2,"1611":1,"1629":1,"1630":11,"1631":3,"1632":31,"1634":5,"1635":2,"1636":3,"1637":4,"1638":5,"1639":16,"1640":7,"1673":2,"1674":1,"1702":1,"1742":1,"1746":6,"1748":8,"1750":6,"1755":3,"1764":9,"1767":5,"1768":1,"1769":4,"1773":2,"1776":4,"1777":1,"1779":1,"1780":2,"1784":8,"1787":1,"1793":1,"1794":2,"1796":5,"1797":4,"1798":2,"1799":6,"1800":3,"1801":1,"1802":5,"1827":1,"1845":1,"1903":1,"1925":1,"1929":1,"1930":1,"1957":1,"1990":1,"2040":2,"2042":1,"2043":2,"2048":3,"2050":1,"2051":1,"2053":1,"2055":1,"2059":2,"2060":1,"2062":4,"2069":1,"2085":1,"2110":1,"2114":1,"2115":1,"2133":1,"2153":1,"2155":2,"2160":1,"2162":1,"2169":1,"2171":1,"2180":1,"2182":1,"2193":1,"2195":1,"2203":1,"2204":1,"2205":1,"2211":1,"2214":1,"2221":1,"2231":2,"2232":2,"2245":1}}],["catalyst",{"3":{"682":1,"684":1,"1416":2,"1417":4,"1660":1,"1669":1}}],["catalogroutepaths",{"3":{"1591":1}}],["catalogrouteauthorizationtests",{"3":{"1436":1,"1591":1}}],["catalogintegrationtestfixture",{"3":{"1436":1}}],["catalogcrossservicefactory",{"3":{"1436":1}}],["catalogcache",{"2":{"392":1,"393":1},"3":{"392":1,"393":3}}],["catalogtestwebapplicationfactory",{"3":{"1436":1}}],["cataloged",{"3":{"1428":1,"1436":1}}],["catalogued",{"3":{"1301":1,"1347":1,"1350":1,"1403":1,"1496":1}}],["catalogue",{"3":{"974":1,"1237":2,"1311":2,"1324":2,"1344":2,"1348":1,"1369":1,"1394":1,"1395":4}}],["cataloguimodule",{"3":{"649":1,"1324":2,"1591":1}}],["cataloguserdataexportsection",{"2":{"583":1,"728":1},"3":{"725":1,"728":2}}],["catalogmoduletests",{"3":{"1436":2}}],["catalogmoduleseeder",{"3":{"1323":2}}],["catalogmoduledbseeder",{"3":{"1286":2}}],["catalogmodule",{"2":{"586":1},"3":{"583":2,"584":1,"586":2,"675":1,"676":1,"1323":1}}],["catalogbrowse",{"2":{"557":1,"558":1},"3":{"556":6,"557":1,"558":1,"1324":1,"1591":9,"1596":1,"1597":1,"1600":1}}],["catalogproductdetail",{"3":{"556":1,"1324":1,"1591":1,"1596":1,"1597":1}}],["catalogpermissiongrants",{"3":{"186":1}}],["catalogpermissions",{"2":{"1264":1},"3":{"186":1,"1026":1,"1264":1,"1767":1}}],["catalogs",{"3":{"387":1,"1436":1,"1755":1}}],["catalogfeatures",{"2":{"1748":1,"1765":1},"3":{"300":1,"1270":1,"1748":1,"1765":1}}],["catalog",{"0":{"1685":1,"1748":1},"1":{"1023":1,"1024":1,"1025":1,"1026":1,"1027":1,"1028":1,"1029":1,"1030":1,"1659":1,"1660":1,"1661":1,"1662":1,"1663":1,"1664":1,"1665":1,"1666":1,"1667":1,"1668":1,"1669":1,"1670":1,"1671":1,"1672":1,"1673":1,"1674":1,"1675":1},"2":{"62":1,"493":1,"1588":1,"1751":2,"1769":2,"2201":1},"3":{"0":3,"42":4,"62":1,"80":5,"91":4,"93":1,"94":2,"95":1,"97":2,"99":1,"101":2,"104":1,"109":2,"117":2,"128":4,"136":1,"142":1,"184":1,"185":1,"186":2,"195":5,"235":2,"238":1,"243":8,"245":2,"249":1,"250":2,"251":2,"252":2,"254":2,"257":2,"259":1,"260":6,"261":3,"291":1,"295":1,"325":1,"326":1,"341":1,"345":1,"387":2,"390":4,"391":8,"392":4,"393":1,"401":2,"403":1,"446":1,"448":6,"452":3,"453":1,"454":1,"459":1,"468":1,"470":4,"475":4,"476":7,"477":4,"493":1,"545":9,"552":2,"556":6,"564":1,"572":4,"583":13,"585":4,"586":4,"599":2,"602":1,"640":2,"643":1,"649":3,"650":1,"657":5,"658":1,"674":4,"675":2,"676":2,"715":1,"725":1,"728":3,"733":1,"743":1,"749":2,"752":1,"757":2,"759":1,"774":2,"780":1,"782":9,"790":1,"798":2,"804":4,"837":2,"838":2,"861":1,"864":1,"869":1,"876":1,"881":1,"889":2,"891":1,"897":10,"900":2,"914":1,"924":5,"927":3,"954":7,"990":1,"1023":1,"1024":1,"1025":7,"1026":24,"1028":2,"1029":3,"1030":1,"1054":1,"1059":7,"1082":4,"1085":1,"1086":2,"1168":6,"1207":1,"1212":2,"1237":7,"1247":4,"1259":2,"1262":1,"1265":1,"1270":14,"1271":5,"1286":14,"1297":2,"1300":25,"1301":6,"1307":1,"1311":34,"1312":4,"1323":18,"1324":31,"1339":15,"1348":2,"1350":12,"1359":1,"1369":2,"1380":14,"1393":1,"1395":10,"1396":30,"1401":1,"1402":2,"1405":1,"1414":1,"1415":6,"1431":1,"1436":54,"1438":1,"1467":1,"1486":1,"1488":1,"1489":1,"1496":2,"1500":1,"1541":1,"1588":2,"1591":24,"1596":6,"1597":1,"1599":1,"1600":10,"1602":1,"1621":2,"1627":1,"1659":1,"1671":1,"1681":1,"1683":1,"1685":5,"1686":1,"1687":1,"1727":1,"1728":1,"1742":3,"1746":26,"1748":9,"1749":4,"1750":6,"1751":15,"1755":1,"1757":2,"1758":1,"1760":1,"1761":1,"1763":4,"1764":15,"1765":32,"1767":5,"1768":3,"1769":12,"1771":3,"1772":6,"1773":7,"1775":2,"1777":1,"1785":1,"1875":1,"1893":1,"1918":2,"1922":4,"1923":2,"1957":1,"1960":1,"1963":2,"2055":1,"2087":1,"2110":2,"2111":1,"2113":1,"2131":6,"2138":1,"2156":1,"2200":3,"2201":3,"2203":1,"2228":1,"2232":1}}],["catastrophic",{"3":{"0":1,"791":1,"861":1,"1237":1,"1309":1,"1323":1,"1577":1,"1706":1,"1707":1,"1836":1,"1849":1,"2079":1,"2166":1}}],["catchable",{"3":{"1259":1,"1436":2}}],["catchesadomainreachinganothermodulesapplication",{"3":{"1436":1}}],["catches",{"3":{"18":1,"125":1,"127":1,"132":1,"133":1,"135":1,"148":1,"225":1,"255":1,"345":1,"465":1,"486":1,"490":1,"491":1,"492":1,"493":1,"494":1,"518":1,"566":1,"573":1,"593":1,"609":1,"698":1,"709":1,"718":1,"767":2,"863":1,"897":1,"956":1,"982":1,"988":1,"990":1,"1018":1,"1019":2,"1021":1,"1102":1,"1169":1,"1237":1,"1254":1,"1259":2,"1270":1,"1286":5,"1300":3,"1311":2,"1312":4,"1315":1,"1323":4,"1324":9,"1339":3,"1359":3,"1380":1,"1396":6,"1402":2,"1410":1,"1415":3,"1416":2,"1417":6,"1423":1,"1436":18,"1438":2,"1455":3,"1456":1,"1458":1,"1475":1,"1476":1,"1488":2,"1489":1,"1492":1,"1496":2,"1524":1,"1526":1,"1535":1,"1605":3,"1654":1,"1739":3,"1805":1,"1806":1,"1923":1,"1927":2,"1929":2,"1930":1,"1961":1,"1999":1,"2018":1,"2036":1,"2041":1,"2048":1,"2100":2,"2106":2,"2108":1,"2126":1,"2169":1,"2175":1}}],["catching",{"3":{"0":1,"590":1,"881":1,"1247":1,"1270":1,"1286":3,"1300":1,"1304":1,"1323":2,"1324":9,"1395":2,"1396":5,"1415":2,"1416":1,"1417":5,"1427":1,"1431":1,"1436":9,"1438":1,"1455":2,"1492":2,"1663":1,"1669":1,"1702":1,"2002":1,"2047":1,"2048":1,"2100":1,"2117":1,"2165":1}}],["catch",{"0":{"1919":1},"2":{"21":1,"111":1,"512":1,"537":1,"684":1,"896":1,"899":1,"1218":1,"1803":1,"1804":1,"1919":1,"2169":1},"3":{"0":7,"21":1,"107":1,"108":1,"109":6,"110":2,"111":2,"135":1,"180":3,"231":1,"258":1,"295":1,"303":1,"310":1,"344":1,"413":1,"426":1,"434":1,"435":1,"436":1,"466":1,"512":1,"517":1,"523":1,"529":1,"536":2,"537":1,"559":1,"565":1,"574":1,"619":1,"684":1,"692":2,"700":1,"707":1,"709":1,"724":1,"726":1,"727":1,"765":1,"790":1,"801":1,"810":1,"819":1,"827":2,"840":3,"842":1,"861":1,"896":1,"897":2,"899":1,"914":1,"972":1,"988":1,"1018":1,"1019":2,"1093":1,"1218":1,"1225":1,"1229":4,"1233":1,"1247":6,"1254":1,"1259":7,"1263":2,"1270":5,"1276":1,"1286":13,"1289":2,"1300":8,"1301":4,"1302":1,"1304":1,"1309":9,"1311":10,"1312":3,"1323":16,"1324":29,"1334":1,"1337":1,"1339":7,"1350":1,"1352":1,"1357":1,"1358":1,"1359":16,"1366":2,"1378":2,"1380":25,"1395":14,"1396":23,"1399":1,"1402":7,"1415":9,"1416":2,"1417":20,"1425":2,"1427":3,"1435":2,"1436":36,"1438":4,"1447":3,"1453":1,"1455":1,"1466":1,"1467":1,"1487":1,"1488":1,"1489":3,"1496":7,"1524":1,"1547":1,"1577":1,"1662":1,"1670":1,"1671":1,"1765":1,"1774":1,"1803":1,"1804":3,"1805":1,"1806":1,"1812":1,"1835":1,"1852":1,"1858":1,"1881":1,"1919":1,"1920":1,"1927":3,"1933":2,"1934":2,"1940":1,"1946":2,"1952":1,"1954":1,"1959":1,"1970":1,"1980":1,"1994":1,"1998":1,"2032":1,"2041":1,"2043":1,"2049":1,"2054":1,"2059":1,"2067":3,"2070":1,"2075":1,"2078":1,"2079":1,"2099":1,"2165":1,"2167":2,"2169":1,"2177":1,"2232":1}}],["cantidad",{"3":{"1686":1}}],["canvas",{"3":{"1480":3}}],["canevaluatepolicy",{"3":{"1417":1}}],["canmoderate",{"3":{"1402":7}}],["canmanage=",{"3":{"1395":2}}],["canmanage",{"3":{"1380":2,"1389":1,"1395":2}}],["canreview",{"3":{"1748":1,"1765":1}}],["canrendereventpicker",{"3":{"1395":2}}],["canreadsessionassetsasync",{"3":{"1359":6}}],["canreadtoken",{"3":{"1300":1,"1324":1}}],["canbookmark",{"3":{"1395":1}}],["cansubmitlink",{"3":{"1395":2}}],["canserve",{"3":{"1324":4,"1395":2}}],["canned",{"3":{"1359":1,"1432":2,"1434":1,"1436":14,"1671":1}}],["cannot",{"0":{"1234":1,"1936":1,"2025":1,"2113":1},"1":{"1869":1,"1870":1,"1871":1,"1872":1,"1873":1,"1874":1,"1875":1,"1876":1,"1877":1},"3":{"0":35,"17":1,"19":2,"24":2,"26":1,"31":3,"32":1,"33":1,"38":1,"39":1,"41":1,"68":2,"78":1,"81":1,"91":1,"92":2,"93":1,"94":1,"98":1,"100":1,"103":1,"109":1,"110":2,"119":1,"120":1,"122":1,"123":1,"130":1,"133":1,"134":1,"135":3,"136":1,"137":3,"147":1,"149":1,"150":1,"157":2,"158":1,"160":1,"168":1,"187":1,"189":1,"201":1,"203":1,"206":1,"207":1,"212":1,"213":2,"214":1,"215":3,"216":1,"224":1,"225":1,"227":1,"233":1,"234":1,"235":4,"236":1,"243":1,"248":2,"249":1,"253":1,"255":3,"265":4,"267":1,"279":1,"280":1,"284":1,"285":1,"309":2,"310":1,"317":2,"318":3,"319":1,"324":1,"326":1,"330":2,"331":2,"341":2,"342":1,"343":2,"350":3,"353":1,"359":2,"363":1,"365":1,"370":1,"371":1,"380":1,"384":1,"387":1,"390":1,"397":3,"399":1,"408":1,"412":2,"413":1,"420":1,"422":1,"423":1,"433":1,"435":1,"449":2,"451":1,"459":1,"461":1,"465":1,"498":1,"500":1,"506":1,"509":3,"511":1,"513":1,"517":3,"518":2,"519":2,"526":1,"528":1,"529":5,"530":3,"535":1,"536":2,"537":3,"545":2,"546":2,"547":2,"549":1,"551":1,"556":2,"557":1,"558":1,"564":1,"565":1,"568":1,"571":1,"574":1,"576":2,"584":1,"585":1,"591":1,"593":1,"601":2,"608":1,"609":2,"610":1,"617":1,"619":1,"620":2,"625":3,"628":1,"633":2,"635":2,"640":1,"649":1,"651":1,"658":1,"660":1,"664":1,"674":1,"676":1,"681":1,"689":2,"690":1,"691":2,"692":1,"698":4,"699":1,"709":1,"714":2,"717":1,"718":3,"725":1,"726":2,"733":3,"734":1,"741":3,"742":3,"743":1,"757":2,"758":1,"762":1,"767":1,"773":1,"775":1,"784":1,"789":1,"790":1,"792":1,"793":1,"794":1,"800":1,"810":2,"818":1,"819":1,"821":1,"827":6,"828":1,"832":1,"840":1,"848":1,"853":1,"854":5,"855":2,"857":1,"861":2,"862":1,"870":1,"871":1,"872":1,"881":3,"883":1,"888":1,"889":3,"896":1,"903":1,"904":2,"905":5,"906":1,"908":1,"914":1,"921":1,"922":3,"924":1,"926":4,"931":1,"939":1,"940":1,"955":1,"956":1,"957":1,"966":1,"972":1,"974":1,"988":2,"996":5,"997":2,"998":1,"1004":1,"1017":1,"1018":3,"1019":2,"1020":2,"1026":2,"1028":2,"1029":1,"1033":1,"1034":1,"1042":2,"1043":2,"1044":1,"1050":1,"1052":2,"1059":3,"1060":1,"1067":2,"1074":1,"1083":1,"1085":2,"1091":2,"1092":2,"1093":1,"1100":1,"1101":2,"1102":1,"1110":1,"1115":1,"1116":4,"1124":2,"1125":1,"1126":1,"1132":2,"1133":2,"1134":1,"1135":1,"1145":1,"1155":1,"1160":1,"1162":1,"1175":1,"1176":1,"1177":1,"1184":1,"1185":4,"1191":1,"1212":8,"1221":1,"1223":1,"1224":1,"1226":1,"1228":1,"1229":10,"1232":1,"1233":1,"1234":2,"1235":1,"1237":11,"1239":3,"1240":1,"1241":6,"1243":4,"1247":33,"1248":1,"1252":1,"1253":2,"1254":2,"1256":1,"1257":1,"1259":15,"1262":1,"1263":1,"1265":3,"1267":1,"1270":29,"1271":13,"1273":2,"1274":2,"1275":2,"1276":2,"1277":2,"1278":3,"1279":1,"1281":2,"1283":1,"1284":1,"1286":81,"1288":2,"1289":2,"1290":2,"1292":2,"1293":2,"1294":2,"1297":3,"1298":1,"1300":74,"1301":19,"1302":1,"1305":3,"1307":2,"1308":1,"1309":28,"1310":7,"1311":61,"1312":7,"1316":1,"1317":1,"1318":1,"1320":4,"1322":3,"1323":63,"1324":105,"1326":2,"1327":1,"1328":1,"1331":1,"1332":4,"1336":1,"1337":3,"1339":58,"1344":1,"1346":1,"1348":1,"1349":1,"1350":41,"1352":3,"1353":1,"1354":1,"1355":1,"1357":2,"1358":2,"1359":221,"1362":3,"1366":5,"1367":2,"1368":1,"1369":14,"1371":1,"1372":2,"1373":1,"1374":1,"1375":1,"1378":2,"1379":1,"1380":32,"1384":1,"1385":1,"1386":1,"1389":2,"1391":1,"1392":1,"1393":1,"1395":58,"1396":103,"1398":1,"1399":5,"1401":3,"1402":44,"1405":2,"1406":4,"1407":2,"1408":1,"1409":1,"1414":2,"1415":63,"1416":9,"1417":30,"1419":1,"1421":1,"1423":2,"1426":1,"1427":12,"1428":2,"1429":1,"1430":3,"1431":5,"1432":1,"1433":1,"1435":3,"1436":160,"1438":23,"1441":6,"1442":3,"1443":3,"1444":2,"1445":2,"1446":1,"1447":1,"1449":2,"1452":1,"1453":11,"1454":5,"1455":17,"1456":1,"1458":1,"1459":7,"1460":1,"1465":4,"1467":15,"1469":1,"1472":1,"1474":3,"1475":3,"1476":1,"1477":2,"1481":2,"1482":1,"1483":1,"1484":1,"1486":3,"1487":1,"1488":5,"1489":4,"1490":3,"1491":1,"1492":7,"1496":2,"1498":1,"1500":1,"1513":1,"1524":1,"1526":8,"1531":3,"1534":3,"1537":1,"1553":1,"1575":2,"1577":4,"1582":1,"1584":1,"1585":2,"1589":1,"1591":2,"1596":1,"1605":2,"1611":2,"1630":2,"1631":8,"1632":3,"1635":3,"1638":1,"1639":10,"1640":3,"1641":9,"1642":1,"1644":1,"1648":1,"1651":2,"1653":1,"1654":1,"1661":2,"1666":2,"1667":4,"1668":1,"1669":2,"1670":3,"1671":3,"1673":1,"1676":1,"1677":2,"1679":1,"1681":1,"1685":6,"1686":9,"1692":1,"1701":2,"1702":1,"1706":1,"1707":1,"1722":2,"1723":1,"1725":1,"1726":1,"1727":2,"1728":1,"1729":1,"1730":1,"1731":1,"1732":1,"1737":1,"1739":2,"1748":2,"1749":2,"1755":2,"1764":2,"1765":8,"1767":11,"1772":1,"1788":1,"1793":1,"1795":1,"1797":1,"1803":2,"1805":3,"1806":1,"1809":1,"1810":3,"1812":2,"1814":3,"1815":4,"1816":1,"1817":1,"1832":3,"1834":1,"1835":1,"1838":1,"1839":1,"1842":1,"1846":1,"1849":1,"1851":2,"1858":2,"1859":2,"1861":1,"1862":1,"1863":1,"1864":1,"1868":1,"1869":1,"1874":1,"1876":2,"1877":1,"1885":1,"1888":2,"1889":1,"1894":2,"1897":1,"1898":2,"1901":1,"1902":2,"1906":1,"1908":1,"1912":1,"1916":1,"1918":1,"1920":2,"1922":1,"1923":1,"1924":1,"1925":1,"1927":2,"1933":2,"1937":2,"1940":1,"1941":1,"1942":1,"1944":2,"1945":2,"1946":1,"1948":1,"1950":3,"1952":1,"1953":1,"1954":1,"1957":1,"1960":1,"1965":1,"1966":1,"1968":1,"1970":1,"1972":2,"1974":1,"1976":3,"1977":1,"1978":1,"1980":3,"1981":3,"1982":2,"1985":1,"1986":1,"1987":2,"1988":2,"1992":2,"1994":4,"1995":1,"1996":1,"1997":2,"1998":2,"1999":1,"2000":2,"2001":2,"2002":4,"2014":1,"2016":1,"2019":1,"2024":1,"2025":3,"2027":1,"2028":1,"2030":1,"2037":1,"2040":1,"2041":2,"2043":2,"2045":2,"2049":2,"2056":2,"2061":1,"2063":1,"2068":2,"2071":2,"2074":1,"2082":1,"2083":2,"2085":1,"2089":1,"2090":1,"2097":2,"2098":1,"2100":1,"2104":1,"2106":1,"2107":2,"2109":1,"2113":1,"2115":1,"2116":1,"2120":3,"2122":1,"2123":1,"2127":1,"2129":1,"2131":1,"2133":2,"2136":1,"2141":1,"2142":2,"2144":1,"2146":2,"2147":4,"2150":1,"2152":1,"2153":4,"2154":1,"2156":1,"2158":1,"2160":2,"2161":1,"2164":2,"2165":2,"2166":2,"2167":2,"2168":1,"2169":4,"2172":1,"2174":1,"2176":2,"2178":1,"2180":2,"2181":1,"2183":1,"2185":1,"2188":1,"2192":1,"2193":2,"2194":1,"2195":2,"2196":1,"2198":2,"2199":1,"2201":1,"2203":3,"2207":1,"2230":1,"2232":4}}],["cangobackasync",{"3":{"1324":1}}],["canaries",{"3":{"1453":1}}],["canary",{"3":{"0":4,"135":1,"265":1,"530":2,"564":4,"624":2,"626":2,"631":1,"633":5,"757":1,"1012":1,"1032":2,"1034":4,"1036":1,"1037":3,"1436":2,"1453":2,"1454":2,"1455":1,"1460":1,"1461":3,"1486":1,"1492":3,"1493":1,"1554":1,"1574":1,"1577":2,"1664":1,"1673":1,"2105":1}}],["canauthenticate",{"3":{"1417":1}}],["canacceptupvote",{"3":{"1398":1,"1402":2}}],["canacceptvote",{"3":{"1398":1,"1402":6}}],["canadminister",{"3":{"1324":1,"1415":1}}],["canjoinasync",{"3":{"1286":1,"1309":2}}],["candid",{"3":{"1270":1,"1369":1,"1436":1,"1443":1,"1792":1,"1891":1,"1978":1,"2059":1,"2132":1}}],["candidate",{"3":{"0":2,"24":1,"145":1,"150":2,"256":1,"325":1,"326":1,"907":1,"1075":2,"1076":1,"1077":1,"1196":1,"1237":3,"1259":3,"1270":2,"1275":1,"1286":2,"1289":2,"1300":7,"1301":2,"1303":1,"1309":1,"1311":1,"1324":5,"1339":2,"1350":2,"1359":4,"1395":2,"1415":2,"1436":1,"1438":1,"1496":1,"1638":1,"2049":1}}],["candidates",{"3":{"0":2,"145":2,"150":2,"153":1,"1074":1,"1075":1,"1077":1,"1079":2,"1259":1,"1311":1,"1324":1,"1339":2,"1355":1,"1396":1,"1402":1,"1415":1,"1436":4,"1673":1,"2188":1}}],["canproject",{"3":{"1244":1,"1247":2,"1270":1,"1309":2}}],["canparse",{"3":{"1241":1,"1247":12}}],["canparsevalues",{"3":{"1300":5}}],["canparsevalue",{"2":{"335":1},"3":{"335":1,"1241":2,"1247":15,"1496":1}}],["canwrite",{"3":{"1242":1,"1247":2}}],["canclose",{"3":{"1436":1}}],["cancheckin",{"3":{"1396":2}}],["canconvertto",{"3":{"1300":1}}],["canconvertfrom",{"3":{"1300":1}}],["canconvert",{"2":{"1223":1},"3":{"1223":1,"1229":1,"1237":2,"1300":2}}],["cancelordercommand",{"2":{"2163":1},"3":{"1591":1}}],["cancelorderhandler",{"2":{"534":1,"793":1,"1875":1,"2163":1},"3":{"534":3,"536":8,"540":2,"793":2,"1591":1,"1749":1,"1765":1,"1767":1,"1875":1,"2163":2}}],["cancelall",{"3":{"1417":1}}],["cancelallasync",{"3":{"1417":3}}],["cancelasync",{"3":{"1417":5}}],["cancelable",{"3":{"1359":1}}],["cancelanddisposecurrent",{"3":{"1324":2}}],["cancelafter",{"3":{"1263":1,"1324":1}}],["canceledoutcome",{"3":{"1427":2}}],["cancelediting",{"3":{"1395":11}}],["canceled",{"3":{"1089":1,"1311":1,"1324":1,"1425":1,"1436":2,"2177":1}}],["cancels",{"3":{"237":1,"518":1,"556":1,"592":1,"813":1,"926":1,"1100":1,"1212":1,"1247":1,"1263":1,"1270":2,"1300":1,"1316":1,"1323":2,"1324":12,"1339":2,"1380":1,"1395":7,"1396":5,"1402":9,"1415":3,"1417":8,"1436":2,"1456":1,"1492":1,"1668":1,"1765":1,"1821":1,"2047":1,"2161":1}}],["canceltext",{"2":{"684":1},"3":{"0":1,"682":1,"684":1,"1324":3,"1416":1,"1417":3}}],["canceller",{"3":{"1339":1}}],["cancelled",{"2":{"793":1,"1754":1},"3":{"0":4,"109":1,"135":1,"440":1,"534":1,"536":5,"538":2,"539":2,"682":3,"790":1,"793":4,"897":1,"1091":1,"1212":1,"1259":2,"1263":1,"1270":4,"1286":1,"1289":1,"1300":1,"1309":1,"1311":1,"1323":1,"1324":6,"1339":3,"1357":1,"1359":3,"1395":10,"1396":7,"1399":1,"1402":2,"1411":1,"1415":5,"1417":15,"1422":1,"1431":1,"1436":3,"1438":1,"1455":3,"1456":1,"1460":1,"1475":2,"1483":1,"1526":1,"1686":1,"1749":1,"1754":1,"1755":1,"1765":3,"1766":1,"1767":1,"1923":1,"2096":1,"2126":1,"2161":1,"2163":2,"2164":2,"2167":3,"2168":1,"2174":1,"2232":1}}],["cancelloading",{"3":{"1324":1}}],["cancellingsection",{"3":{"1199":2,"1207":1,"1323":1}}],["cancelling",{"3":{"0":1,"535":1,"788":1,"793":2,"813":1,"1259":1,"1270":1,"1324":6,"1339":1,"1395":3,"1396":7,"1427":1,"1456":1,"1475":1,"1492":1,"1767":1}}],["cancellable",{"3":{"0":1,"135":1,"683":1,"1270":1,"1300":1,"1395":1,"1396":2,"1415":1,"1417":1,"1436":2,"1455":1,"1765":1,"1766":2,"1767":1,"1768":1,"1918":1}}],["cancellations",{"3":{"1311":1}}],["cancellationfixtures",{"3":{"1207":12,"1436":10}}],["cancellationtestmap",{"3":{"1198":1,"1199":2,"1207":1,"1436":5,"1496":1}}],["cancellationtokenfixtures",{"3":{"1207":6,"1436":8}}],["cancellationtokenfitnesstests",{"3":{"1198":1,"1199":2,"1207":3,"1436":10,"1489":1,"1496":1}}],["cancellationtokenconventiontests",{"3":{"135":1,"139":1,"142":2,"1199":1,"1207":2,"1309":1,"1436":11,"1489":1}}],["cancellationtokenconventiontestsbase",{"2":{"1431":1},"3":{"135":2,"139":1,"1199":2,"1207":2,"1431":3,"1436":8,"1496":1}}],["cancellationtokenexemptmethods",{"3":{"135":1,"1436":4}}],["cancellationtokens",{"2":{"135":1},"3":{"135":3,"139":1,"1207":1,"1431":1,"1436":7,"1489":1}}],["cancellationtokensource",{"2":{"121":1,"743":1,"1384":1,"2070":1,"2072":1},"3":{"743":1,"1263":1,"1270":1,"1323":1,"1324":15,"1384":1,"1395":24,"1396":4,"1402":6,"1415":3,"1417":2,"1427":1,"1436":1,"2070":1,"2072":1}}],["cancellationtoken",{"2":{"130":1,"143":1,"225":1,"743":1,"879":1,"897":1,"996":1,"1261":2,"1289":1,"1324":1,"1918":1,"1919":1,"2092":1},"3":{"0":5,"130":1,"135":2,"143":1,"225":1,"235":1,"459":1,"682":3,"707":1,"725":1,"733":1,"743":1,"879":1,"881":2,"897":5,"922":1,"996":1,"1247":10,"1259":14,"1261":2,"1263":1,"1269":1,"1270":30,"1286":74,"1289":1,"1300":54,"1301":14,"1304":1,"1309":30,"1310":4,"1311":29,"1315":1,"1323":41,"1324":63,"1339":15,"1350":4,"1359":45,"1369":2,"1380":11,"1395":41,"1396":45,"1402":8,"1415":15,"1417":126,"1431":2,"1436":58,"1918":1,"1919":2,"2092":1,"2232":1}}],["cancellation",{"3":{"0":4,"21":2,"27":2,"109":2,"135":1,"178":1,"459":1,"465":1,"518":1,"534":1,"536":2,"538":1,"559":1,"683":1,"881":2,"882":2,"896":2,"897":5,"898":2,"988":1,"1100":1,"1212":1,"1247":4,"1255":1,"1259":6,"1263":1,"1270":14,"1286":10,"1301":2,"1309":3,"1311":4,"1323":7,"1324":23,"1334":1,"1337":1,"1339":3,"1357":1,"1358":1,"1359":5,"1366":1,"1369":2,"1380":2,"1383":1,"1391":1,"1395":23,"1396":17,"1399":2,"1402":4,"1411":1,"1415":2,"1417":16,"1422":1,"1423":1,"1427":2,"1431":2,"1436":8,"1438":8,"1475":1,"1496":2,"1526":1,"1535":1,"1577":2,"1591":1,"1640":1,"1653":1,"1665":1,"1666":1,"1671":1,"1702":1,"1749":3,"1755":4,"1765":2,"1767":2,"1775":1,"1776":2,"1806":1,"1917":2,"1919":3,"2067":1,"2070":1,"2072":2,"2080":1,"2096":1,"2113":1,"2117":1,"2163":3,"2165":1,"2168":1,"2180":1}}],["cancel",{"2":{"268":1},"3":{"0":3,"265":1,"268":1,"517":1,"519":1,"536":2,"556":1,"682":3,"684":2,"793":4,"809":1,"1101":1,"1212":1,"1270":1,"1324":9,"1357":1,"1359":1,"1395":18,"1396":6,"1411":1,"1415":2,"1417":17,"1430":1,"1436":2,"1445":1,"1453":2,"1455":5,"1456":2,"1459":1,"1460":3,"1475":1,"1591":1,"1627":1,"1742":1,"1746":2,"1749":2,"1754":1,"1755":1,"1765":1,"1768":4,"2076":1,"2079":1,"2163":1,"2167":1,"2232":1}}],["canonicalization",{"3":{"1324":1}}],["canonicalizing",{"3":{"1286":1}}],["canonicalizes",{"3":{"1300":1,"1324":1}}],["canonicalize",{"3":{"220":1,"1324":1}}],["canonicalized",{"3":{"219":1,"1324":1,"2150":1}}],["canonically",{"3":{"333":1}}],["canonical",{"3":{"0":1,"98":1,"160":1,"175":1,"202":1,"265":1,"309":1,"324":1,"325":1,"333":1,"366":1,"498":1,"529":1,"782":1,"872":1,"912":1,"944":1,"946":3,"950":1,"963":1,"964":1,"1018":2,"1019":1,"1020":1,"1116":2,"1192":1,"1212":2,"1221":1,"1227":1,"1229":2,"1234":1,"1237":1,"1247":3,"1270":1,"1271":2,"1278":1,"1279":2,"1286":6,"1300":6,"1309":2,"1311":3,"1323":1,"1324":3,"1339":2,"1350":6,"1352":1,"1359":4,"1380":2,"1396":2,"1411":1,"1415":6,"1435":2,"1436":9,"1438":1,"1443":1,"1492":1,"1496":1,"1502":1,"1515":1,"1522":1,"1526":3,"1573":1,"1577":3,"1587":1,"1591":1,"1630":1,"1631":1,"1641":4,"1799":1,"1805":1,"1849":1,"1905":1,"1955":1,"2042":1,"2112":1,"2232":1,"2233":1}}],["can",{"0":{"1235":1,"2044":1},"1":{"1794":1,"1795":1,"1796":1,"1797":1,"1798":1,"1799":1,"1800":1,"1801":1,"1802":1,"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1956":1,"1957":1,"1958":1,"1959":1},"3":{"0":25,"1":1,"5":1,"10":1,"24":1,"26":2,"27":1,"30":1,"31":1,"32":2,"39":1,"42":2,"48":1,"60":1,"68":1,"69":2,"70":1,"72":1,"77":1,"95":1,"97":1,"100":1,"101":1,"103":1,"109":3,"110":1,"111":2,"117":2,"119":1,"121":1,"122":2,"134":1,"135":2,"136":2,"137":1,"140":1,"145":1,"146":1,"150":1,"156":1,"157":2,"159":1,"166":1,"167":1,"170":1,"174":1,"175":1,"177":3,"178":2,"179":1,"184":1,"185":1,"189":2,"194":1,"199":1,"201":1,"202":1,"208":1,"210":1,"214":1,"215":1,"217":1,"231":1,"234":2,"235":1,"236":2,"237":4,"243":1,"245":3,"255":1,"256":1,"259":1,"264":1,"265":3,"266":1,"275":1,"280":1,"283":2,"286":2,"293":1,"299":1,"303":2,"305":2,"310":1,"317":1,"318":1,"319":1,"320":1,"333":1,"340":2,"341":4,"343":1,"344":1,"352":1,"353":1,"358":3,"359":1,"360":1,"365":1,"373":1,"378":1,"380":2,"384":1,"386":1,"390":3,"391":1,"396":1,"397":2,"399":1,"415":2,"420":1,"421":1,"422":1,"427":3,"428":1,"435":2,"441":1,"442":1,"447":1,"449":1,"459":1,"461":2,"474":1,"478":1,"502":1,"506":1,"508":1,"509":1,"511":1,"513":1,"518":1,"519":1,"520":2,"528":1,"529":1,"530":4,"536":1,"538":1,"539":3,"540":1,"544":1,"545":1,"546":1,"549":5,"556":1,"558":2,"564":1,"565":1,"571":1,"572":2,"573":1,"583":2,"592":1,"598":1,"601":1,"610":2,"611":1,"617":3,"619":1,"620":2,"626":4,"627":1,"628":1,"632":1,"633":2,"635":1,"638":1,"640":3,"642":2,"649":1,"651":1,"657":2,"658":3,"665":1,"667":1,"673":3,"675":2,"676":2,"681":1,"682":1,"684":1,"690":4,"691":1,"692":4,"697":3,"698":2,"707":1,"709":2,"714":1,"716":2,"717":1,"718":2,"721":1,"725":3,"726":2,"727":3,"733":2,"735":2,"740":2,"741":1,"742":1,"743":2,"749":2,"750":1,"751":3,"757":3,"758":1,"759":1,"767":1,"768":3,"774":2,"775":1,"783":1,"784":2,"790":1,"791":3,"792":2,"799":2,"800":1,"810":1,"811":1,"815":1,"819":2,"821":2,"826":2,"827":5,"828":2,"829":2,"832":1,"839":1,"840":1,"853":1,"855":1,"856":1,"862":2,"863":1,"876":1,"881":1,"882":1,"891":1,"896":1,"897":1,"898":1,"903":1,"904":2,"905":5,"906":2,"907":2,"909":1,"916":1,"922":2,"924":1,"926":1,"930":1,"933":1,"940":1,"941":1,"952":1,"953":1,"954":1,"956":3,"960":1,"964":1,"965":1,"966":1,"971":2,"972":1,"973":1,"974":1,"982":1,"987":1,"988":2,"989":2,"990":2,"995":2,"996":3,"998":1,"1005":1,"1006":3,"1013":1,"1017":1,"1018":4,"1019":3,"1020":1,"1026":1,"1028":2,"1033":1,"1034":2,"1042":2,"1044":1,"1050":1,"1051":2,"1052":3,"1058":2,"1059":6,"1066":1,"1067":1,"1068":1,"1069":1,"1074":1,"1083":2,"1084":1,"1091":1,"1092":1,"1093":1,"1100":2,"1101":1,"1102":1,"1115":1,"1116":5,"1117":1,"1118":2,"1126":1,"1134":2,"1147":1,"1160":2,"1162":2,"1169":1,"1174":1,"1175":1,"1176":1,"1178":1,"1183":2,"1185":2,"1186":1,"1190":1,"1191":1,"1200":1,"1210":1,"1212":6,"1216":1,"1217":2,"1218":1,"1219":1,"1220":1,"1222":1,"1225":2,"1229":18,"1231":2,"1236":1,"1237":38,"1239":1,"1240":2,"1241":2,"1242":2,"1243":1,"1244":1,"1247":57,"1248":1,"1253":1,"1254":3,"1255":1,"1256":2,"1259":30,"1262":3,"1263":3,"1265":1,"1267":1,"1269":1,"1270":68,"1271":13,"1273":2,"1274":1,"1276":2,"1278":6,"1279":1,"1280":1,"1281":3,"1283":1,"1284":1,"1285":3,"1286":177,"1288":3,"1289":1,"1290":1,"1292":2,"1293":4,"1294":1,"1296":1,"1297":3,"1299":1,"1300":118,"1301":27,"1306":1,"1307":3,"1308":2,"1309":45,"1310":14,"1311":116,"1312":12,"1313":1,"1315":2,"1316":1,"1317":4,"1318":1,"1320":1,"1322":1,"1323":107,"1324":193,"1326":1,"1328":2,"1330":2,"1331":1,"1333":2,"1334":1,"1336":2,"1338":1,"1339":78,"1341":2,"1342":4,"1343":3,"1344":2,"1345":1,"1347":2,"1348":1,"1349":1,"1350":98,"1352":3,"1353":4,"1354":1,"1355":2,"1356":1,"1357":2,"1359":245,"1362":2,"1363":1,"1366":4,"1368":3,"1369":19,"1371":2,"1372":1,"1373":4,"1374":1,"1375":4,"1376":1,"1378":1,"1379":2,"1380":36,"1382":1,"1383":2,"1384":1,"1386":1,"1388":1,"1389":4,"1390":2,"1391":1,"1395":123,"1396":163,"1398":3,"1399":1,"1400":2,"1401":1,"1402":56,"1404":1,"1406":1,"1407":2,"1408":1,"1409":3,"1411":2,"1413":1,"1415":87,"1416":20,"1417":105,"1418":1,"1420":1,"1422":4,"1423":1,"1425":1,"1427":18,"1429":4,"1430":4,"1431":3,"1433":1,"1434":1,"1435":3,"1436":218,"1438":18,"1441":4,"1442":1,"1443":5,"1445":1,"1446":2,"1447":2,"1449":1,"1451":1,"1452":2,"1453":5,"1454":5,"1455":28,"1456":6,"1458":3,"1459":4,"1461":1,"1463":1,"1464":1,"1465":2,"1467":25,"1474":1,"1475":3,"1476":1,"1478":1,"1479":2,"1481":1,"1484":2,"1486":1,"1488":8,"1489":1,"1490":5,"1492":9,"1498":2,"1500":2,"1504":1,"1507":1,"1513":1,"1526":2,"1531":1,"1534":3,"1537":2,"1541":1,"1544":1,"1547":1,"1550":2,"1553":1,"1562":2,"1564":1,"1567":1,"1570":1,"1572":4,"1577":1,"1589":2,"1591":3,"1596":1,"1599":1,"1607":1,"1610":1,"1613":1,"1615":1,"1626":3,"1627":2,"1630":3,"1631":19,"1632":7,"1635":5,"1638":4,"1639":5,"1641":18,"1645":1,"1650":1,"1651":1,"1652":1,"1653":2,"1661":1,"1663":1,"1664":1,"1665":1,"1667":1,"1668":2,"1669":1,"1670":1,"1671":1,"1673":1,"1674":1,"1675":1,"1676":1,"1677":1,"1679":1,"1684":1,"1685":2,"1686":4,"1687":1,"1689":1,"1693":1,"1699":1,"1701":2,"1702":2,"1706":1,"1708":1,"1720":1,"1727":3,"1728":2,"1729":2,"1731":2,"1741":1,"1744":1,"1749":1,"1754":1,"1755":1,"1758":1,"1761":2,"1764":1,"1765":7,"1767":12,"1769":1,"1770":1,"1773":1,"1776":2,"1786":1,"1788":1,"1794":1,"1796":1,"1797":3,"1799":1,"1800":1,"1801":2,"1802":1,"1803":2,"1804":2,"1805":3,"1806":1,"1807":2,"1808":2,"1809":2,"1810":1,"1811":1,"1812":2,"1814":1,"1815":4,"1817":5,"1819":1,"1821":1,"1824":1,"1825":3,"1826":2,"1832":1,"1833":1,"1836":1,"1837":1,"1838":1,"1839":1,"1840":2,"1841":2,"1844":2,"1845":2,"1847":1,"1848":2,"1852":2,"1855":2,"1856":1,"1861":1,"1863":1,"1864":2,"1865":2,"1868":1,"1871":2,"1872":1,"1873":1,"1874":1,"1875":1,"1877":2,"1882":2,"1885":1,"1890":2,"1892":4,"1893":4,"1894":1,"1897":1,"1898":1,"1899":1,"1900":1,"1902":3,"1904":1,"1905":1,"1908":3,"1909":4,"1910":1,"1911":4,"1912":1,"1916":2,"1918":2,"1919":1,"1920":1,"1922":2,"1923":3,"1924":1,"1926":1,"1927":1,"1929":1,"1933":1,"1934":1,"1938":1,"1940":1,"1942":1,"1944":2,"1945":1,"1946":4,"1948":4,"1949":2,"1950":3,"1951":1,"1952":1,"1954":3,"1955":1,"1957":1,"1960":5,"1961":1,"1962":2,"1963":2,"1964":1,"1965":2,"1966":2,"1967":4,"1968":1,"1969":1,"1970":1,"1971":1,"1972":2,"1975":1,"1977":1,"1978":1,"1979":2,"1980":4,"1982":1,"1993":2,"1994":1,"1995":3,"1996":1,"1997":1,"1998":1,"1999":1,"2001":7,"2002":3,"2004":1,"2005":2,"2008":1,"2009":1,"2010":3,"2011":1,"2012":3,"2013":2,"2021":1,"2024":4,"2025":1,"2026":2,"2027":1,"2028":1,"2029":2,"2030":1,"2032":1,"2033":1,"2034":2,"2035":1,"2037":2,"2038":1,"2041":1,"2043":3,"2044":2,"2045":1,"2047":1,"2048":1,"2049":1,"2050":1,"2052":1,"2055":1,"2056":4,"2057":1,"2061":1,"2063":1,"2065":1,"2066":1,"2067":2,"2068":2,"2069":1,"2076":1,"2082":1,"2083":1,"2086":2,"2087":2,"2091":1,"2094":1,"2095":2,"2098":1,"2104":1,"2105":1,"2106":1,"2107":2,"2109":3,"2113":2,"2114":1,"2119":1,"2121":1,"2122":2,"2124":1,"2126":2,"2127":3,"2128":1,"2130":2,"2131":1,"2132":1,"2133":2,"2135":2,"2137":2,"2140":3,"2141":4,"2146":3,"2147":1,"2149":1,"2150":1,"2153":3,"2156":3,"2158":1,"2159":2,"2161":1,"2163":2,"2164":2,"2166":1,"2167":2,"2168":2,"2169":2,"2170":3,"2171":1,"2178":1,"2180":3,"2184":1,"2187":1,"2188":2,"2191":1,"2192":2,"2193":2,"2194":1,"2195":1,"2196":1,"2197":1,"2198":1,"2199":3,"2200":2,"2201":1,"2202":2,"2203":4,"2205":1,"2206":1,"2207":1,"2208":1,"2230":1,"2232":4}}],["cadences",{"3":{"767":1,"1467":1,"1469":1,"1484":1,"1888":1}}],["cadence",{"3":{"0":3,"22":3,"62":2,"143":1,"607":2,"609":1,"626":1,"627":1,"634":1,"642":1,"706":1,"1018":1,"1036":1,"1259":4,"1300":1,"1301":1,"1323":4,"1339":2,"1350":2,"1390":2,"1395":4,"1443":1,"1450":1,"1455":2,"1459":1,"1467":8,"1469":2,"1474":3,"1475":1,"1476":3,"1483":1,"1492":1,"1521":1,"1589":2,"1591":1,"1592":1,"1595":1,"1596":1,"1598":1,"1661":1,"1724":1,"1841":2,"1845":1,"2037":1}}],["capgbpermonth",{"3":{"1467":1}}],["capgbpermonth=",{"3":{"1116":1,"1119":1}}],["capital",{"3":{"1379":1}}],["capitalized",{"3":{"1311":1,"1380":1}}],["capitalization",{"3":{"1300":1,"1311":1,"1667":1}}],["capitals",{"3":{"1286":1,"1324":1}}],["captioning",{"3":{"1630":1,"1631":1,"1637":1}}],["captions",{"3":{"1480":1}}],["caption",{"3":{"1324":9,"1396":3,"1436":3,"1480":5}}],["captive",{"3":{"1259":1,"1359":1,"1417":2}}],["capturingmessagebus",{"3":{"1199":2,"1207":1}}],["capturinghandler",{"3":{"1199":6,"1207":4}}],["capturinghttpmessagehandlertests",{"3":{"1199":1,"1207":2,"1436":3}}],["capturinghttpmessagehandler",{"2":{"1432":1},"3":{"954":1,"1199":27,"1207":4,"1428":1,"1432":8,"1436":12,"1488":1}}],["capturinglogger",{"3":{"1199":4,"1207":2}}],["capturing",{"0":{"1251":1},"3":{"481":1,"483":1,"716":2,"1237":1,"1251":1,"1259":1,"1274":1,"1286":6,"1300":1,"1310":1,"1311":1,"1323":1,"1324":1,"1338":1,"1339":2,"1359":1,"1417":4,"1436":4,"1456":1,"1577":1,"1660":1,"1671":1,"1764":1}}],["captureasync",{"3":{"1436":3}}],["captureavatarasync",{"3":{"1415":1}}],["capturetofileasync",{"3":{"1417":3}}],["capturephotoasync",{"3":{"1417":4}}],["capturejsruntime",{"3":{"1417":1}}],["captureunauthorized",{"3":{"1324":1}}],["captureexclusiontable",{"3":{"1286":1}}],["captureeventsandpersisttooutbox",{"3":{"1286":4}}],["captureentry",{"3":{"1286":4}}],["capturemodifiedproperties",{"3":{"1286":3}}],["capturechanges",{"3":{"1286":4}}],["capturecontext",{"2":{"1277":1},"3":{"1199":2,"1203":1,"1207":1,"1277":1,"1286":3}}],["captureheaders",{"3":{"1259":2,"1436":2}}],["captures",{"3":{"15":1,"142":1,"202":1,"261":1,"350":1,"373":1,"396":1,"420":1,"423":1,"481":1,"572":1,"676":1,"702":1,"707":1,"715":1,"717":1,"931":1,"1042":1,"1091":1,"1233":1,"1237":1,"1247":2,"1259":4,"1273":1,"1286":8,"1300":3,"1309":2,"1311":2,"1318":1,"1323":3,"1324":4,"1339":3,"1340":1,"1345":1,"1349":1,"1350":3,"1359":8,"1363":1,"1369":2,"1380":1,"1395":3,"1396":10,"1402":1,"1406":1,"1415":3,"1417":10,"1427":1,"1429":1,"1436":8,"1441":1,"1479":2,"1480":2,"1488":1,"1502":1,"1525":1,"1526":1,"1665":1,"1839":1,"1840":1,"1881":1,"1908":1,"1948":1,"1976":1,"2055":1,"2091":1}}],["capturedstate",{"3":{"1199":3,"1203":1,"1207":1,"1237":1,"1274":1,"1286":6}}],["capturedrequest",{"3":{"1199":4,"1207":2,"1432":1,"1436":5}}],["capturedmeasurement",{"3":{"1199":2,"1207":1}}],["capturedcounter",{"3":{"1199":2,"1207":1}}],["captured",{"0":{"1253":1},"3":{"0":1,"21":1,"26":2,"27":1,"109":1,"120":1,"202":1,"243":1,"330":1,"359":1,"397":1,"399":1,"403":1,"483":1,"498":1,"500":2,"501":1,"682":1,"698":1,"716":1,"720":2,"781":1,"786":1,"860":1,"1020":1,"1043":1,"1212":2,"1231":1,"1232":1,"1233":1,"1237":7,"1246":1,"1247":1,"1251":1,"1252":1,"1253":1,"1259":10,"1270":3,"1274":4,"1279":1,"1286":29,"1300":3,"1301":1,"1309":3,"1310":2,"1311":7,"1318":1,"1323":10,"1324":4,"1326":1,"1327":2,"1328":1,"1339":9,"1350":10,"1355":1,"1358":1,"1359":14,"1380":1,"1395":18,"1396":5,"1398":1,"1402":4,"1406":1,"1410":1,"1415":3,"1416":1,"1417":6,"1436":6,"1438":2,"1455":1,"1467":1,"1479":2,"1480":1,"1496":1,"1508":1,"1567":1,"1571":1,"1631":1,"1641":1,"1665":1,"1677":1,"1686":1,"1825":1,"1843":1,"1844":1,"1894":1,"1980":2,"1981":1,"2111":1,"2192":1}}],["capture",{"0":{"1479":2},"3":{"0":6,"21":8,"202":1,"439":1,"440":1,"481":1,"490":1,"698":1,"713":1,"714":2,"715":2,"716":1,"717":2,"720":1,"721":1,"749":1,"751":2,"905":1,"1036":1,"1212":1,"1213":1,"1218":1,"1229":2,"1233":1,"1237":5,"1249":2,"1251":4,"1253":3,"1255":1,"1259":14,"1270":1,"1272":1,"1274":4,"1275":2,"1277":1,"1280":1,"1286":39,"1300":2,"1309":2,"1311":3,"1312":1,"1318":2,"1323":1,"1324":3,"1339":1,"1350":1,"1359":1,"1395":2,"1396":1,"1402":1,"1415":2,"1417":19,"1433":2,"1436":16,"1438":1,"1455":1,"1471":1,"1479":15,"1480":4,"1482":1,"1483":1,"1488":3,"1537":2,"1552":1,"1575":1,"1577":1,"1584":1,"1664":1,"1672":1,"1767":1,"1797":1,"1804":1,"1825":2,"1838":1,"1839":1,"2053":1,"2126":1,"2232":2}}],["capacities",{"3":{"1359":1}}],["capacity",{"3":{"413":1,"519":1,"591":1,"628":1,"630":1,"768":2,"827":2,"1100":1,"1101":1,"1124":1,"1125":1,"1270":1,"1301":1,"1311":3,"1324":3,"1337":1,"1339":2,"1350":4,"1359":18,"1369":1,"1380":4,"1395":13,"1396":4,"1400":1,"1416":1,"1417":3,"1455":3,"1458":3,"1459":1,"1461":1,"1467":4,"1484":1,"1523":2,"1524":2,"1525":1,"1526":1,"1530":1,"1531":1,"1533":1,"1534":1,"1549":1,"1577":2,"1582":1,"1589":1,"1596":1,"1629":1,"1630":2,"1631":2,"1637":1,"1670":1,"1708":1,"1841":1,"1947":1,"2121":2}}],["capable",{"3":{"92":1,"96":1,"100":1,"810":1,"838":1,"841":1,"988":2,"1243":1,"1247":1,"1286":1,"1301":3,"1339":1,"1359":1,"1369":1,"1395":1,"1396":1,"1417":2,"1447":1,"2073":1}}],["capabilitiesjsmodule",{"2":{"2119":1},"3":{"1199":11,"1203":1,"1207":2,"1324":5,"1417":21,"2119":1}}],["capabilities",{"0":{"2201":1},"1":{"1960":1,"1961":1,"1962":1,"1963":1,"1964":1,"1965":1},"2":{"1175":1,"1416":3,"1417":9},"3":{"0":3,"185":1,"186":6,"187":2,"190":1,"245":1,"266":1,"283":1,"304":1,"324":1,"412":1,"413":7,"414":2,"415":2,"416":2,"418":1,"420":1,"423":1,"427":1,"428":2,"430":1,"434":1,"436":1,"461":1,"556":1,"682":5,"684":1,"689":1,"820":1,"980":1,"1034":1,"1059":1,"1060":1,"1107":1,"1175":3,"1176":1,"1200":1,"1203":89,"1207":204,"1208":1,"1238":1,"1259":3,"1270":1,"1280":1,"1286":34,"1297":4,"1300":7,"1309":1,"1311":1,"1317":1,"1323":1,"1324":9,"1350":3,"1377":1,"1380":1,"1395":1,"1396":8,"1409":2,"1415":8,"1416":5,"1417":426,"1436":1,"1438":1,"1496":7,"1500":1,"1510":1,"1577":1,"1599":1,"1621":1,"1626":1,"1627":1,"1629":1,"1630":1,"1632":1,"1638":1,"1639":1,"1662":1,"1667":1,"1960":2,"1961":1,"1963":1,"1965":2,"2117":1,"2118":3,"2119":1,"2121":3,"2122":1,"2123":2,"2194":1,"2195":1,"2201":1,"2203":1,"2208":1}}],["capabilityfallbacktests",{"3":{"1199":1,"1207":2,"1417":32,"1438":2}}],["capability",{"0":{"1231":1,"1409":1,"1810":1,"2117":1},"1":{"410":1,"411":1,"412":1,"413":1,"414":1,"415":1,"416":1,"679":1,"680":1,"681":1,"682":1,"683":1,"684":1,"685":1,"686":1,"1047":1,"1048":1,"1049":1,"1050":1,"1051":1,"1052":1,"1053":1,"1054":1,"1055":1,"1417":1,"1659":1,"1660":1,"1661":1,"1662":1,"1663":1,"1664":1,"1665":1,"1666":1,"1667":1,"1668":1,"1669":1,"1670":1,"1671":1,"1672":1,"1673":1,"1674":1,"1675":1,"2116":1,"2117":1,"2118":1,"2119":1,"2120":1,"2121":1,"2122":1,"2123":1},"2":{"1760":1},"3":{"0":14,"39":1,"115":1,"126":3,"184":2,"185":4,"186":4,"188":2,"191":1,"243":2,"258":1,"300":1,"301":1,"317":2,"318":1,"319":1,"324":2,"358":1,"410":1,"411":1,"413":5,"414":2,"415":2,"426":1,"434":1,"439":1,"440":1,"468":1,"482":1,"510":1,"549":1,"558":1,"649":1,"650":1,"653":1,"656":1,"661":1,"665":1,"679":1,"681":4,"682":2,"683":2,"686":2,"689":1,"691":1,"694":2,"696":1,"698":1,"705":1,"706":1,"708":1,"713":1,"717":1,"723":1,"725":1,"739":1,"741":1,"749":1,"797":1,"798":2,"802":1,"804":2,"806":1,"820":2,"954":1,"957":1,"964":1,"965":3,"966":2,"968":1,"979":1,"1003":1,"1004":1,"1034":1,"1047":1,"1048":1,"1049":2,"1050":1,"1051":1,"1052":3,"1053":1,"1054":1,"1055":1,"1060":1,"1115":1,"1116":2,"1118":1,"1120":1,"1132":1,"1176":1,"1178":1,"1191":1,"1192":4,"1194":2,"1195":1,"1200":1,"1201":2,"1202":3,"1203":3,"1212":5,"1217":1,"1228":1,"1229":2,"1230":1,"1231":1,"1232":1,"1237":5,"1247":2,"1259":1,"1263":4,"1264":1,"1270":12,"1271":1,"1281":1,"1286":19,"1287":1,"1297":3,"1300":23,"1301":4,"1303":2,"1304":2,"1308":1,"1309":19,"1310":3,"1311":7,"1315":1,"1322":1,"1323":11,"1324":14,"1339":1,"1347":1,"1348":8,"1350":20,"1357":2,"1359":11,"1367":1,"1372":3,"1373":8,"1377":2,"1380":32,"1381":1,"1388":1,"1391":1,"1395":10,"1396":44,"1402":6,"1404":1,"1405":1,"1406":1,"1409":5,"1414":5,"1415":22,"1416":10,"1417":104,"1422":1,"1427":2,"1431":1,"1436":11,"1438":4,"1481":2,"1491":2,"1496":14,"1505":1,"1513":1,"1514":1,"1517":1,"1526":4,"1531":1,"1534":1,"1541":1,"1542":1,"1575":1,"1577":2,"1582":2,"1583":1,"1585":1,"1599":3,"1602":1,"1621":2,"1626":3,"1627":4,"1631":1,"1632":1,"1640":3,"1653":1,"1659":2,"1660":2,"1669":1,"1673":1,"1675":1,"1733":1,"1760":2,"1761":1,"1770":1,"1771":1,"1779":2,"1810":3,"1821":4,"1823":2,"1860":1,"1868":1,"1903":1,"1904":1,"1921":1,"1932":1,"1948":1,"1959":1,"1960":3,"1961":4,"1962":6,"1963":1,"1964":4,"1965":3,"1978":1,"1995":3,"2063":2,"2083":1,"2115":2,"2116":3,"2117":4,"2118":2,"2120":1,"2122":1,"2123":6,"2126":2,"2127":1,"2137":1,"2138":2,"2139":1,"2143":1,"2198":1,"2199":1,"2202":1,"2203":1,"2210":2,"2232":6}}],["capping",{"3":{"176":1,"332":1,"1242":1,"1247":1,"1286":1,"1311":1,"1350":1,"1402":1,"1597":1}}],["capped",{"3":{"0":5,"19":1,"22":1,"23":1,"328":1,"330":1,"333":2,"335":1,"378":1,"384":1,"707":1,"854":1,"1026":1,"1042":2,"1095":1,"1118":1,"1212":1,"1237":1,"1238":1,"1243":2,"1247":3,"1256":1,"1259":6,"1275":2,"1278":2,"1286":7,"1291":1,"1292":1,"1294":1,"1300":6,"1309":1,"1311":1,"1317":1,"1323":2,"1324":2,"1339":1,"1344":1,"1357":1,"1359":2,"1369":2,"1371":1,"1395":15,"1396":3,"1402":2,"1415":1,"1427":1,"1436":2,"1443":1,"1467":1,"1578":1,"1589":1,"1631":2,"1632":1,"1640":1,"1641":3,"1665":1,"1667":1,"1668":1,"1713":1,"1748":3,"1765":3,"1784":1,"1800":1,"1815":2,"1829":2,"1841":1,"1923":1,"1937":1,"1948":1,"1988":2,"1998":1,"2000":1,"2048":1,"2178":1,"2188":1}}],["capseconds",{"3":{"1286":1}}],["caps",{"3":{"0":2,"27":1,"175":2,"280":2,"282":3,"330":1,"333":1,"334":1,"361":1,"552":1,"669":1,"691":1,"692":1,"740":1,"830":1,"832":1,"853":1,"907":1,"1042":1,"1118":1,"1212":2,"1237":1,"1241":2,"1247":3,"1259":2,"1286":5,"1294":1,"1300":2,"1305":1,"1307":1,"1309":3,"1310":1,"1311":1,"1323":3,"1324":3,"1344":2,"1350":20,"1359":5,"1384":2,"1388":1,"1395":9,"1396":1,"1398":2,"1401":1,"1402":4,"1411":1,"1415":1,"1417":1,"1436":7,"1442":1,"1447":1,"1457":3,"1467":3,"1526":1,"1534":1,"1577":2,"1591":1,"1599":3,"1600":1,"1671":1,"1945":1,"1988":1,"1990":1,"1999":1,"2000":1,"2002":3,"2145":1,"2170":1,"2232":1}}],["cap",{"0":{"2054":1},"3":{"0":16,"19":4,"23":3,"26":1,"27":1,"57":1,"59":2,"174":1,"175":2,"176":3,"177":2,"178":3,"179":1,"180":1,"182":1,"223":1,"225":1,"228":1,"280":1,"282":1,"283":1,"287":1,"335":2,"350":1,"395":2,"403":2,"434":1,"438":1,"442":1,"500":2,"501":2,"524":2,"607":2,"609":2,"611":1,"612":3,"710":1,"719":2,"741":8,"743":2,"744":1,"749":1,"767":1,"825":1,"826":2,"827":2,"828":1,"831":1,"855":1,"856":1,"905":6,"906":4,"907":2,"909":1,"996":3,"1005":1,"1006":2,"1059":1,"1116":3,"1119":2,"1124":1,"1212":2,"1237":2,"1242":2,"1243":2,"1247":11,"1254":1,"1256":1,"1259":9,"1273":1,"1275":2,"1283":1,"1285":1,"1286":3,"1290":1,"1294":1,"1295":1,"1300":25,"1307":1,"1309":7,"1311":10,"1323":15,"1324":13,"1326":1,"1339":1,"1344":1,"1347":2,"1350":17,"1357":4,"1359":12,"1371":1,"1373":1,"1380":1,"1383":1,"1384":1,"1389":4,"1390":2,"1392":1,"1395":31,"1396":12,"1399":2,"1401":1,"1402":18,"1406":2,"1409":1,"1414":1,"1415":9,"1416":1,"1417":1,"1427":1,"1436":14,"1438":3,"1447":2,"1456":3,"1460":2,"1465":7,"1467":21,"1469":1,"1473":1,"1478":2,"1488":1,"1489":1,"1496":1,"1525":1,"1526":4,"1531":3,"1532":2,"1534":2,"1575":1,"1581":1,"1583":1,"1584":1,"1586":1,"1591":6,"1596":2,"1597":2,"1599":1,"1631":1,"1632":33,"1635":1,"1640":4,"1662":1,"1667":1,"1767":1,"1817":1,"1825":1,"1829":1,"1977":1,"1982":4,"1983":2,"1984":4,"1985":1,"1988":1,"1991":1,"1998":2,"1999":2,"2000":2,"2001":3,"2002":5,"2014":1,"2024":2,"2060":1,"2073":1,"2079":1,"2126":1,"2166":1,"2169":1,"2198":1,"2232":1}}],["chronological",{"3":{"1309":1,"1383":1,"1395":2,"1396":1,"1632":2,"1640":4}}],["chronologically",{"3":{"741":1,"1359":1,"1380":1,"1392":1,"1395":2}}],["chrometextmuted",{"3":{"1324":2}}],["chrometext",{"3":{"1324":1}}],["chromebackground",{"3":{"1324":3}}],["chrome",{"3":{"265":4,"267":1,"275":1,"860":1,"861":1,"954":1,"1324":30,"1395":4,"1396":2,"1402":1,"1416":3,"1436":6,"1438":1,"1526":1,"1559":1,"1577":1,"1591":1,"1606":1,"1609":1,"1644":1,"1653":1,"1669":1,"1687":2,"1716":1,"1740":1,"1743":1,"2079":3,"2085":1}}],["chromium",{"3":{"0":4,"265":2,"558":1,"591":1,"618":2,"619":2,"625":3,"626":2,"756":1,"861":1,"863":3,"1212":3,"1324":2,"1414":1,"1433":3,"1436":7,"1438":2,"1455":1,"1456":7,"1460":1,"1461":2,"1463":2,"1486":1,"1488":4,"1490":2,"1492":5,"1524":1,"1526":8,"1531":3,"1532":1,"1534":3,"1535":1,"1577":6,"1586":1,"1591":10,"1596":5,"1599":3,"1600":1,"1643":1,"1716":2,"1739":1,"1775":1,"2057":2,"2073":1,"2079":2}}],["cheat",{"3":{"691":1,"1369":1}}],["cheaper",{"3":{"627":1,"675":1,"741":1,"947":1,"964":1,"965":1,"981":1,"1019":1,"1041":1,"1051":1,"1092":1,"1124":1,"1144":1,"1229":1,"1286":4,"1300":2,"1311":1,"1323":1,"1324":3,"1329":1,"1339":2,"1359":6,"1395":4,"1396":3,"1402":1,"1415":1,"1417":1,"1436":3,"1443":1,"1491":1,"1631":1,"1678":1,"1708":1,"1951":1,"2000":1,"2049":1,"2150":1}}],["cheapest",{"3":{"110":1,"150":1,"235":1,"242":1,"266":1,"319":1,"742":1,"915":1,"973":1,"1019":1,"1234":1,"1237":2,"1247":3,"1259":1,"1270":1,"1286":1,"1300":1,"1309":1,"1311":2,"1324":1,"1359":3,"1369":1,"1392":1,"1395":2,"1396":3,"1417":3,"1436":7,"1467":1,"1488":1,"1531":1,"1802":1,"1810":1,"2054":1,"2139":1}}],["cheaply",{"3":{"244":1,"460":1,"1052":1,"1142":1,"1277":1,"1286":1,"1289":1,"1300":2,"1309":1,"1311":1,"1359":3,"1395":1,"1396":1,"1402":1,"1415":1,"1436":5,"1605":1,"1739":1,"2024":1,"2093":1,"2126":1}}],["cheap",{"3":{"0":2,"18":1,"110":1,"111":1,"165":1,"174":1,"236":1,"237":1,"295":1,"309":1,"529":1,"546":1,"565":2,"619":1,"641":1,"684":1,"734":1,"751":1,"758":1,"767":1,"776":1,"783":1,"811":1,"813":1,"826":2,"855":1,"871":1,"932":1,"953":1,"962":1,"965":1,"989":1,"1005":2,"1049":1,"1075":1,"1099":1,"1123":1,"1154":1,"1212":1,"1229":1,"1237":1,"1242":1,"1247":3,"1259":2,"1270":1,"1271":1,"1286":9,"1292":1,"1300":3,"1301":2,"1309":1,"1311":5,"1323":1,"1324":6,"1339":2,"1350":1,"1359":12,"1369":3,"1376":1,"1380":5,"1387":1,"1395":9,"1396":12,"1402":3,"1415":1,"1417":4,"1427":4,"1436":5,"1438":2,"1449":1,"1455":4,"1456":2,"1467":1,"1475":1,"1492":1,"1531":1,"1534":1,"1589":1,"1641":1,"1677":2,"1678":1,"1789":1,"1792":1,"1810":1,"1832":2,"1902":1,"1934":1,"1958":1,"1999":1,"2000":2,"2098":1,"2144":1,"2148":1,"2158":1,"2179":1,"2180":1,"2184":1,"2197":1}}],["checkpoint",{"3":{"1429":2,"1649":1,"1654":1}}],["checkpreconditions",{"3":{"1396":4}}],["checknotlocked",{"3":{"1415":2}}],["checknameprefix",{"3":{"1339":1}}],["checkname",{"2":{"1220":1},"3":{"1220":1,"1339":1}}],["checkkey",{"3":{"1339":2,"1441":1}}],["checkhealthasync",{"3":{"1339":9}}],["checkboxes",{"3":{"1324":2,"1436":1}}],["checkbox",{"3":{"1324":6,"1396":1,"1436":4,"1496":1,"1626":1,"2140":1}}],["checkdate",{"2":{"1220":1},"3":{"1220":1}}],["checkownershipasync",{"3":{"1300":1}}],["checkownership",{"2":{"725":1,"1322":1,"1667":1},"3":{"725":1,"1322":1,"1323":4,"1415":2,"1667":1}}],["checkoutoutcome",{"3":{"1600":1}}],["checkoutandpayasync",{"3":{"1600":1}}],["checkoutcommand",{"3":{"988":1,"1270":2,"1749":2}}],["checkoutpreflight",{"2":{"1025":1,"1029":1},"3":{"897":1,"900":1,"1025":2,"1026":2,"1029":2,"1600":1}}],["checkouts",{"3":{"566":1,"567":1}}],["checkoutdomainservice",{"2":{"1025":1},"3":{"0":1,"1025":2,"1765":1,"1767":1}}],["checkoutdeadlinescheduler",{"2":{"534":1,"539":1,"540":1,"814":1},"3":{"0":1,"534":1,"539":5,"540":3,"674":2,"677":1,"814":2,"1600":1}}],["checkouthandler",{"2":{"535":1,"539":1,"677":1,"813":1,"814":1,"986":1,"990":1,"991":1,"1025":1,"1600":1},"3":{"0":2,"534":3,"535":2,"539":3,"540":1,"677":1,"813":2,"814":2,"986":1,"988":4,"990":2,"991":1,"1025":2,"1026":1,"1029":1,"1591":2,"1600":3,"1765":1,"1767":1,"2161":1}}],["checkout",{"1":{"1023":1,"1024":1,"1025":1,"1026":1,"1027":1,"1028":1,"1029":1,"1030":1},"2":{"790":2,"1765":1,"1770":2},"3":{"0":6,"534":3,"535":3,"536":2,"539":6,"562":1,"566":2,"567":1,"674":1,"782":1,"790":2,"793":3,"794":1,"811":1,"813":2,"814":1,"881":2,"897":5,"900":3,"988":2,"1023":1,"1025":3,"1026":2,"1027":3,"1028":2,"1029":1,"1212":1,"1426":2,"1436":2,"1453":1,"1454":4,"1455":2,"1459":3,"1475":1,"1483":1,"1500":1,"1588":1,"1591":3,"1600":5,"1742":1,"1746":4,"1749":6,"1750":4,"1751":1,"1752":1,"1753":1,"1755":3,"1757":1,"1759":1,"1763":2,"1765":14,"1767":4,"1768":3,"1769":2,"1770":3,"1773":2,"1775":2,"1776":3,"2161":3,"2163":1,"2167":3,"2232":1}}],["checklist",{"0":{"1572":1,"1657":1,"1690":1,"1704":1},"3":{"620":1,"622":1,"1396":1,"1402":1,"1436":1,"1472":4,"1481":1,"1496":1,"1577":1,"1585":1,"1644":1,"1875":1,"2038":1}}],["checklockoutasync",{"3":{"281":2,"1300":3,"1323":1,"2000":1}}],["checkregistrationratelimitasync",{"2":{"281":1,"2000":1},"3":{"281":1,"1300":4,"2000":1}}],["checkable",{"3":{"72":1,"620":1,"1084":1,"1270":3,"1286":1,"1300":3,"1324":1,"1359":2,"1415":1,"1436":1,"1488":1,"1883":1}}],["checkinbycredentialasync",{"3":{"1396":2}}],["checkinidentifiertype",{"3":{"1396":1}}],["checkininvariants",{"2":{"690":1},"3":{"690":1,"1199":2,"1203":1,"1207":2,"1396":8}}],["checkintests",{"3":{"1199":1,"1207":2,"1396":1,"1438":1}}],["checkinasync",{"3":{"1396":2}}],["checkinauthorizationtests",{"3":{"1199":1,"1207":2,"1438":2}}],["checkinattendee",{"3":{"1203":2,"1207":4,"1271":2,"1396":9}}],["checkinattendeehandlertests",{"3":{"1199":1,"1207":3,"1438":1}}],["checkinattendeehandler",{"3":{"1199":2,"1203":1,"1207":2,"1271":3,"1350":2,"1396":21,"1438":1}}],["checkinattendeerequestvalidatortests",{"3":{"1199":1,"1207":2}}],["checkinattendeerequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1396":7}}],["checkinattendeerequest",{"3":{"1199":11,"1203":1,"1207":2,"1396":12}}],["checkinandpointstests",{"3":{"1199":1,"1207":2,"1438":2}}],["checkindtomapper",{"3":{"1199":1,"1203":1,"1207":2,"1396":7}}],["checkindto",{"3":{"1199":2,"1203":1,"1207":2,"1396":11}}],["checkinerrorcodes",{"3":{"1199":5,"1203":1,"1207":2,"1396":16}}],["checkinresultdto",{"3":{"1199":10,"1203":1,"1207":2,"1396":20}}],["checkinrow",{"3":{"1199":2,"1207":1}}],["checkinconfiguration",{"3":{"690":1,"691":1,"1199":1,"1203":1,"1207":2,"1286":1,"1396":24}}],["checkinprocessor",{"2":{"690":1},"3":{"690":2,"1199":5,"1203":1,"1207":3,"1350":5,"1359":2,"1396":73,"1436":1}}],["checkinmanage",{"2":{"690":1},"3":{"690":1,"1396":12}}],["checkinservicetests",{"3":{"1199":1,"1207":3,"1396":1,"1438":1}}],["checkinservice",{"3":{"1199":8,"1203":1,"1207":2,"1396":35}}],["checkinsettingstests",{"3":{"1199":1,"1207":2,"1396":1}}],["checkinsettings",{"2":{"690":1},"3":{"674":1,"690":1,"1199":4,"1203":1,"1207":2,"1350":2,"1396":9}}],["checkinstate",{"3":{"1199":2,"1203":1,"1207":1,"1396":8}}],["checkinscontrollertests",{"3":{"1199":1,"1207":3,"1396":2,"1438":2}}],["checkinscontroller",{"2":{"693":1},"3":{"690":3,"693":1,"1199":2,"1203":1,"1207":2,"1396":82}}],["checkinscopenamestests",{"3":{"1199":1,"1207":2,"1396":1}}],["checkinscopenames",{"3":{"1199":11,"1203":1,"1207":2,"1396":11}}],["checkinscope",{"2":{"688":1,"799":1,"803":1,"1052":1,"1054":1},"3":{"688":1,"690":2,"799":1,"803":1,"1052":1,"1054":1,"1199":34,"1203":1,"1207":2,"1396":37,"1415":1}}],["checkinscanroundtriptests",{"3":{"1199":1,"1207":2,"1438":2}}],["checkinscantests",{"3":{"1199":1,"1207":2,"1396":1,"1438":2}}],["checkinscanpage",{"3":{"1199":3,"1207":2}}],["checkinscan",{"2":{"693":1},"3":{"684":3,"685":3,"690":5,"693":1,"1199":2,"1203":1,"1207":4,"1396":56,"1417":1}}],["checkins",{"2":{"554":1,"1207":1,"1396":5},"3":{"0":1,"554":1,"556":3,"674":1,"690":11,"693":3,"799":1,"837":1,"838":1,"881":1,"1052":1,"1055":1,"1203":51,"1207":178,"1237":2,"1271":10,"1286":4,"1324":2,"1350":1,"1359":3,"1396":178,"1415":3,"1436":3,"1438":6,"1447":1,"1487":1,"1496":1,"1526":1}}],["checking",{"3":{"0":1,"390":1,"427":1,"460":1,"507":2,"579":1,"675":1,"827":2,"973":1,"1133":1,"1168":1,"1229":2,"1259":1,"1263":1,"1270":1,"1286":5,"1300":3,"1309":1,"1324":9,"1339":5,"1350":1,"1359":4,"1380":2,"1395":3,"1396":3,"1415":1,"1416":1,"1417":3,"1431":1,"1436":9,"1438":2,"1455":1,"1489":1,"1496":1,"1630":1,"1641":1,"1669":1,"1812":1,"1908":1,"1947":1,"1952":1,"1969":1,"1993":1,"2045":1}}],["checkin",{"2":{"474":1,"797":1,"801":2,"803":1,"1048":1,"1054":1,"1055":1,"1627":1},"3":{"0":2,"186":1,"474":1,"690":7,"691":1,"694":1,"797":1,"799":3,"801":4,"803":2,"1048":1,"1052":2,"1054":1,"1055":2,"1199":16,"1203":1,"1207":2,"1212":1,"1237":2,"1396":84,"1438":5,"1487":1,"1526":1,"1627":2,"1631":2,"2232":1}}],["checkemailconfirmed",{"2":{"2196":1},"3":{"1300":3,"2196":2}}],["checker",{"3":{"0":1,"1496":1,"2047":3}}],["checkedout",{"3":{"1749":2,"1750":1,"1764":1,"1765":1}}],["checkedin",{"3":{"1396":2}}],["checkedinon",{"3":{"1396":17,"1415":2}}],["checkedinbyuserid",{"2":{"799":1},"3":{"690":1,"799":1,"1396":12,"1631":1}}],["checked",{"3":{"0":2,"109":2,"135":1,"139":1,"160":1,"186":1,"209":1,"243":2,"250":2,"252":2,"254":1,"256":2,"257":2,"258":1,"259":1,"260":1,"261":2,"284":1,"318":1,"323":1,"335":3,"342":1,"350":2,"390":1,"397":1,"418":2,"423":1,"424":1,"426":1,"438":1,"442":1,"463":1,"464":1,"465":1,"489":1,"490":1,"507":1,"572":1,"576":1,"584":1,"585":1,"591":1,"611":1,"617":1,"628":1,"633":1,"642":1,"657":1,"660":1,"674":1,"692":1,"715":1,"718":1,"759":1,"766":1,"798":1,"811":1,"827":1,"838":1,"846":1,"867":1,"945":1,"959":1,"975":1,"1034":1,"1037":1,"1059":1,"1067":1,"1074":1,"1091":1,"1118":1,"1124":1,"1161":1,"1168":1,"1212":1,"1229":1,"1237":1,"1247":3,"1259":2,"1263":1,"1270":8,"1273":1,"1277":2,"1281":1,"1286":10,"1297":1,"1298":1,"1300":13,"1301":2,"1306":1,"1309":2,"1311":8,"1317":1,"1323":7,"1324":7,"1339":3,"1344":1,"1350":7,"1359":26,"1369":1,"1373":1,"1380":5,"1384":1,"1389":1,"1390":2,"1395":4,"1396":12,"1402":6,"1415":11,"1417":2,"1419":1,"1427":4,"1431":2,"1436":24,"1445":1,"1453":2,"1455":1,"1457":1,"1459":1,"1466":1,"1467":1,"1475":1,"1481":1,"1487":1,"1496":4,"1563":1,"1571":1,"1575":1,"1577":1,"1600":1,"1627":1,"1631":1,"1662":1,"1699":1,"1721":1,"1722":1,"1727":3,"1729":1,"1748":2,"1749":1,"1750":1,"1754":1,"1755":1,"1759":1,"1765":1,"1767":1,"1773":2,"1776":1,"1823":1,"1929":1,"1951":1,"1955":1,"1957":1,"1958":1,"1962":1,"1971":1,"1980":1,"1982":1,"2041":1,"2055":1,"2089":1,"2096":1,"2232":1}}],["checkstatusasync",{"3":{"1417":1}}],["checks",{"0":{"1332":1},"1":{"1960":1,"1961":1,"1962":1,"1963":1,"1964":1,"1965":1},"3":{"0":6,"12":1,"70":1,"74":1,"79":1,"100":1,"126":1,"132":1,"134":1,"135":1,"158":1,"166":1,"170":1,"187":1,"191":1,"201":1,"207":1,"233":2,"235":3,"236":1,"237":2,"243":1,"259":1,"282":1,"283":1,"287":1,"300":1,"349":1,"359":1,"402":2,"435":1,"453":1,"507":1,"536":1,"545":1,"558":1,"564":1,"566":1,"571":1,"572":1,"574":2,"577":1,"583":2,"591":1,"599":3,"600":1,"611":2,"626":1,"629":1,"651":1,"657":2,"659":1,"690":1,"700":1,"736":1,"744":1,"749":1,"757":3,"784":1,"826":1,"827":2,"829":1,"833":2,"834":1,"910":1,"913":1,"924":1,"956":1,"960":1,"990":1,"996":1,"1004":1,"1005":1,"1050":1,"1059":1,"1066":2,"1068":1,"1077":1,"1078":1,"1108":1,"1109":1,"1110":1,"1160":1,"1168":1,"1220":2,"1228":1,"1229":8,"1234":5,"1237":12,"1239":1,"1241":6,"1242":1,"1247":19,"1259":1,"1261":1,"1263":1,"1264":1,"1267":1,"1270":9,"1271":1,"1276":2,"1286":21,"1288":1,"1289":2,"1298":2,"1300":30,"1301":4,"1305":1,"1309":6,"1310":2,"1311":22,"1312":3,"1314":1,"1315":1,"1323":13,"1324":26,"1325":1,"1328":2,"1330":1,"1331":1,"1332":4,"1333":1,"1337":1,"1338":3,"1339":39,"1343":1,"1344":2,"1347":1,"1348":3,"1349":1,"1350":25,"1352":2,"1355":1,"1357":1,"1359":72,"1365":1,"1369":6,"1379":2,"1380":5,"1395":18,"1396":22,"1398":1,"1399":1,"1402":23,"1415":12,"1416":2,"1417":7,"1427":5,"1430":3,"1431":1,"1434":1,"1436":53,"1438":5,"1441":1,"1442":1,"1443":9,"1447":2,"1450":1,"1453":2,"1454":3,"1455":3,"1459":1,"1466":1,"1467":3,"1472":2,"1486":2,"1488":1,"1489":1,"1490":1,"1492":4,"1496":15,"1497":1,"1526":1,"1531":2,"1548":1,"1550":2,"1551":2,"1558":1,"1563":1,"1565":1,"1571":1,"1572":1,"1574":1,"1577":10,"1582":1,"1591":1,"1596":2,"1608":1,"1611":1,"1627":2,"1632":1,"1641":4,"1660":1,"1661":1,"1668":1,"1670":2,"1673":1,"1677":1,"1684":1,"1742":1,"1759":1,"1761":1,"1764":1,"1765":2,"1800":1,"1802":1,"1805":2,"1811":1,"1815":2,"1821":1,"1824":1,"1832":2,"1834":1,"1845":1,"1865":1,"1882":1,"1897":1,"1902":1,"1909":1,"1917":1,"1923":1,"1933":1,"1960":3,"1965":1,"1968":1,"1969":1,"1974":3,"1996":1,"1997":1,"2004":1,"2007":2,"2010":1,"2012":1,"2030":1,"2040":1,"2042":2,"2047":1,"2055":1,"2056":2,"2057":1,"2093":1,"2098":1,"2099":1,"2107":1,"2122":1,"2134":1,"2135":1,"2142":1,"2155":1,"2164":1,"2167":1,"2175":1,"2200":1,"2203":1,"2208":1,"2227":1}}],["check",{"0":{"1697":1},"1":{"687":1,"688":1,"689":1,"690":1,"691":1,"692":1,"693":1,"694":1},"3":{"0":24,"11":1,"24":1,"59":1,"80":1,"93":2,"94":1,"99":3,"109":1,"110":1,"115":1,"121":1,"122":2,"126":3,"133":1,"135":3,"157":2,"164":1,"166":1,"171":2,"175":1,"186":1,"188":1,"189":1,"195":2,"196":1,"200":1,"201":3,"202":2,"209":1,"225":1,"231":1,"233":1,"234":3,"235":7,"237":3,"239":1,"241":1,"245":3,"246":1,"247":1,"257":1,"259":1,"265":2,"268":1,"279":2,"284":2,"285":1,"290":1,"295":1,"296":1,"302":1,"305":1,"313":1,"316":1,"317":2,"318":6,"320":1,"322":2,"326":2,"340":1,"341":3,"342":2,"350":1,"352":2,"360":1,"370":1,"371":1,"373":1,"384":2,"386":1,"388":1,"390":1,"391":2,"402":1,"406":1,"413":1,"423":1,"427":2,"429":1,"448":3,"453":1,"458":1,"459":4,"460":1,"461":1,"464":1,"490":1,"499":1,"505":1,"507":1,"513":2,"529":1,"536":3,"551":1,"556":1,"564":1,"565":2,"566":1,"572":5,"574":2,"583":1,"584":1,"585":2,"591":1,"592":2,"594":3,"611":2,"617":1,"618":2,"619":1,"625":1,"626":1,"633":2,"636":3,"638":1,"642":1,"681":2,"683":2,"684":1,"685":1,"687":1,"688":1,"689":4,"690":5,"691":6,"692":2,"694":2,"701":1,"709":1,"724":1,"725":1,"729":2,"733":2,"743":1,"749":3,"756":1,"757":1,"758":1,"764":1,"765":1,"766":2,"767":2,"768":2,"769":1,"790":1,"799":3,"801":2,"827":6,"829":2,"834":1,"838":2,"839":1,"840":1,"847":1,"869":1,"876":1,"891":1,"905":3,"923":1,"924":1,"946":2,"948":1,"950":1,"962":1,"971":1,"974":1,"997":1,"1018":2,"1033":1,"1034":3,"1036":1,"1037":2,"1042":1,"1050":1,"1067":1,"1074":1,"1077":1,"1092":1,"1093":1,"1100":1,"1110":2,"1111":1,"1117":2,"1118":1,"1155":1,"1163":2,"1170":1,"1175":1,"1190":1,"1192":2,"1211":1,"1212":4,"1213":1,"1229":3,"1231":1,"1237":20,"1241":1,"1244":1,"1247":15,"1255":1,"1259":6,"1263":4,"1264":2,"1265":1,"1267":1,"1270":46,"1271":12,"1275":1,"1280":1,"1281":2,"1286":63,"1288":1,"1289":6,"1290":1,"1293":2,"1295":1,"1296":1,"1297":3,"1300":69,"1301":8,"1304":1,"1307":2,"1308":1,"1309":12,"1310":3,"1311":31,"1312":2,"1316":1,"1317":1,"1322":1,"1323":33,"1324":50,"1325":1,"1326":1,"1327":1,"1328":3,"1329":1,"1332":9,"1333":1,"1337":4,"1339":109,"1343":1,"1344":2,"1347":1,"1348":1,"1349":2,"1350":52,"1352":1,"1353":3,"1355":1,"1357":2,"1358":3,"1359":187,"1364":2,"1366":1,"1369":18,"1372":4,"1373":1,"1375":1,"1380":21,"1384":1,"1387":1,"1389":3,"1391":1,"1395":38,"1396":223,"1399":1,"1400":1,"1402":31,"1405":1,"1406":4,"1410":1,"1411":1,"1412":1,"1414":1,"1415":39,"1416":13,"1417":20,"1421":1,"1422":1,"1427":8,"1430":2,"1431":1,"1433":2,"1436":95,"1437":4,"1438":30,"1441":6,"1442":2,"1443":11,"1444":1,"1446":1,"1447":1,"1449":3,"1453":3,"1454":2,"1455":10,"1457":6,"1460":2,"1467":9,"1475":5,"1476":4,"1479":1,"1484":2,"1485":1,"1487":7,"1488":2,"1489":2,"1490":1,"1491":1,"1492":4,"1496":27,"1500":3,"1514":1,"1524":3,"1525":1,"1526":7,"1530":1,"1531":3,"1533":1,"1534":5,"1536":1,"1547":1,"1576":1,"1577":8,"1582":1,"1583":1,"1586":5,"1590":1,"1591":9,"1595":1,"1596":4,"1598":1,"1599":1,"1600":8,"1614":1,"1625":1,"1627":8,"1629":2,"1630":1,"1631":13,"1632":1,"1638":1,"1639":6,"1644":1,"1651":2,"1652":1,"1660":1,"1662":2,"1663":1,"1666":1,"1668":2,"1670":2,"1677":1,"1679":1,"1687":1,"1719":1,"1731":1,"1747":2,"1749":1,"1755":2,"1765":7,"1767":1,"1772":1,"1776":4,"1777":1,"1782":1,"1800":3,"1801":1,"1802":1,"1805":1,"1808":1,"1809":2,"1811":1,"1818":1,"1821":6,"1823":2,"1825":1,"1826":2,"1832":4,"1833":1,"1842":1,"1871":1,"1872":1,"1875":1,"1877":1,"1881":1,"1886":1,"1888":1,"1889":1,"1893":1,"1899":1,"1902":1,"1909":2,"1912":2,"1915":1,"1917":1,"1922":1,"1923":2,"1929":1,"1930":2,"1933":1,"1934":2,"1940":2,"1941":2,"1945":1,"1954":2,"1959":1,"1968":1,"1972":1,"1977":1,"1978":2,"1982":1,"1984":1,"1985":1,"1992":5,"1993":1,"1994":1,"1995":3,"1996":3,"1997":3,"2007":1,"2008":1,"2010":1,"2024":3,"2034":2,"2039":2,"2041":1,"2042":1,"2043":1,"2048":2,"2049":2,"2055":4,"2056":1,"2057":1,"2059":1,"2066":2,"2079":1,"2099":1,"2100":1,"2106":1,"2108":2,"2116":1,"2119":1,"2122":1,"2123":1,"2126":2,"2128":3,"2131":2,"2134":2,"2135":1,"2136":2,"2138":2,"2139":2,"2142":2,"2158":1,"2159":1,"2160":2,"2164":1,"2167":1,"2169":5,"2172":1,"2173":1,"2174":1,"2177":1,"2180":1,"2184":1,"2193":1,"2197":1,"2200":1,"2203":2,"2228":1,"2232":2}}],["chips",{"3":{"1324":2,"1385":1,"1395":5,"1496":1,"1742":1,"1750":1}}],["chip",{"3":{"0":1,"618":1,"905":1,"1324":2,"1385":1,"1395":19,"1402":1,"1436":3,"1526":1,"1742":1,"1750":2,"1773":1}}],["childitem",{"3":{"1728":1}}],["childid",{"3":{"1237":1,"1395":2}}],["childrules",{"3":{"1359":2}}],["childresult",{"3":{"1350":4}}],["children",{"3":{"0":2,"39":4,"341":1,"397":1,"402":1,"922":1,"926":1,"1168":1,"1212":1,"1231":1,"1237":6,"1247":2,"1270":1,"1281":1,"1286":2,"1310":4,"1324":1,"1333":2,"1339":5,"1342":2,"1343":4,"1346":1,"1350":41,"1352":1,"1359":39,"1369":1,"1380":1,"1382":1,"1385":3,"1387":1,"1395":21,"1398":1,"1401":1,"1402":5,"1436":26,"1443":2,"1489":1,"1556":1,"1575":1,"1630":2,"1632":5,"1635":2,"1638":8,"1639":8,"1640":3,"1647":1,"1651":2,"1664":1,"1666":1,"1677":1,"1685":3,"1720":1,"1748":2,"1749":2,"2010":2,"2061":1,"2064":2,"2157":1}}],["childforeignkeyselector",{"3":{"1310":3,"1359":12,"1402":2}}],["childfk",{"3":{"1310":1,"1359":1,"1865":1}}],["childless",{"3":{"1237":1,"1350":4,"1354":1}}],["childlessfixture",{"3":{"1199":2,"1207":1,"1436":6}}],["childd",{"3":{"1199":3,"1207":1}}],["childcollectiontypenames",{"3":{"1436":1}}],["childcollection",{"3":{"1247":1,"1310":3}}],["childc",{"3":{"1199":2,"1207":1}}],["childb",{"3":{"1199":2,"1207":1}}],["childa",{"3":{"1199":2,"1207":1}}],["childmodel",{"3":{"1199":3,"1207":1}}],["childentityhandlerbase",{"3":{"1207":2,"1265":6,"1270":6,"1359":43}}],["childentityhandlerbasetests",{"3":{"1199":1,"1207":1,"1270":2}}],["childentitydeletepathtests",{"3":{"1199":1,"1207":1}}],["childentitydeletepath",{"2":{"1386":1},"3":{"1199":6,"1203":1,"1207":1,"1324":1,"1386":1,"1395":12}}],["childentityservices",{"3":{"881":1,"1207":5,"1324":2,"1386":5,"1395":39}}],["childentityservicebasetests",{"3":{"1199":1,"1207":5,"1324":1}}],["childentityservicebase",{"2":{"879":1,"883":2,"1386":1},"3":{"0":2,"879":2,"881":5,"883":3,"1199":6,"1203":1,"1207":2,"1300":2,"1324":12,"1386":1,"1395":14,"1496":1}}],["childentity",{"3":{"341":1,"1199":4,"1207":1,"1286":1}}],["childnavigationdescriptortests",{"3":{"1199":1,"1207":4}}],["childnavigationdescriptor",{"2":{"11":1,"1865":1},"3":{"11":1,"1199":7,"1203":1,"1207":2,"1310":17,"1359":22,"1402":3,"1865":2}}],["child",{"0":{"1386":1},"3":{"0":3,"10":1,"11":1,"39":3,"43":2,"164":1,"339":1,"341":5,"344":1,"397":1,"599":1,"633":2,"782":1,"921":2,"926":3,"1115":1,"1116":1,"1117":1,"1140":1,"1167":1,"1168":8,"1170":2,"1191":1,"1212":2,"1231":10,"1232":2,"1237":32,"1243":4,"1244":1,"1247":9,"1259":2,"1260":1,"1265":9,"1270":21,"1271":2,"1278":1,"1286":18,"1310":23,"1311":6,"1323":1,"1324":5,"1339":8,"1340":1,"1342":2,"1343":5,"1345":3,"1346":1,"1347":1,"1350":127,"1353":2,"1354":4,"1359":268,"1369":6,"1371":2,"1374":2,"1380":24,"1386":1,"1393":1,"1395":49,"1396":8,"1401":1,"1402":26,"1416":1,"1436":41,"1438":1,"1465":2,"1467":1,"1496":1,"1526":1,"1577":3,"1586":1,"1591":1,"1630":10,"1631":10,"1632":10,"1633":1,"1634":1,"1635":5,"1637":2,"1638":10,"1639":5,"1640":3,"1650":1,"1651":1,"1661":1,"1662":1,"1666":2,"1668":1,"1683":1,"1684":2,"1686":7,"1700":1,"1701":2,"1704":1,"1719":1,"1727":14,"1728":4,"1729":5,"1730":3,"1731":2,"1764":1,"1810":3,"1863":1,"1865":1,"1871":3,"1876":4,"1877":1,"1988":2,"2010":1,"2154":1,"2157":2}}],["chunking",{"3":{"1320":1,"1323":2}}],["chunks",{"3":{"1307":1,"1309":1,"1323":1}}],["chunk",{"3":{"435":1,"1286":1,"1323":5,"1383":2,"1395":1,"1479":1}}],["chunked",{"3":{"0":1,"434":1,"1323":1,"1935":1}}],["churns",{"3":{"1436":1,"1438":1,"1748":1,"1989":1}}],["churning",{"3":{"1402":1,"1436":1}}],["churn",{"3":{"0":1,"87":1,"785":1,"798":1,"800":1,"891":1,"1237":1,"1259":1,"1286":1,"1324":1,"1338":1,"1339":3,"1402":1,"1436":7,"1492":1,"1496":1,"1677":1}}],["chaos",{"3":{"1566":1,"1577":1}}],["chasing",{"3":{"1440":1,"1446":1}}],["chased",{"3":{"1551":1}}],["chases",{"3":{"1436":1,"2153":1}}],["chase",{"3":{"1277":1,"1286":1,"1350":1,"1415":1,"1672":1,"1839":1}}],["chapter",{"0":{"1450":1,"1461":1,"1493":1},"3":{"1191":1,"1192":5,"1193":1,"1194":1,"1200":2,"1201":2,"1202":1,"1203":1,"1210":1,"1212":3,"1214":1,"1217":4,"1223":2,"1225":1,"1227":1,"1229":20,"1238":1,"1240":1,"1248":2,"1251":1,"1271":2,"1272":1,"1286":2,"1287":1,"1300":2,"1301":1,"1302":1,"1309":3,"1310":4,"1311":1,"1312":3,"1313":4,"1316":4,"1320":1,"1321":1,"1322":1,"1323":3,"1324":10,"1325":1,"1339":6,"1340":3,"1345":1,"1346":1,"1347":1,"1350":7,"1351":2,"1359":8,"1360":1,"1361":2,"1367":1,"1369":11,"1370":2,"1380":1,"1381":1,"1395":4,"1396":14,"1397":3,"1401":1,"1402":3,"1403":3,"1415":7,"1416":6,"1417":7,"1418":2,"1428":1,"1436":9,"1438":1,"1439":1,"1451":3,"1452":1,"1455":4,"1460":1,"1462":3,"1463":1,"1465":1,"1470":1,"1471":2,"1473":1,"1474":2,"1475":1,"1476":1,"1482":2,"1485":4,"1494":3,"1496":80,"1497":1,"1498":2,"1499":1,"1500":1,"1503":1,"1505":1,"1517":7,"1674":1,"1812":2,"1815":1,"1817":2,"1834":1,"1862":1,"1912":1,"1924":1,"1959":1,"2014":1,"2030":2,"2038":1,"2080":1,"2123":1,"2146":1,"2230":2}}],["chapters",{"0":{"1192":1},"3":{"329":1,"751":1,"1011":1,"1012":1,"1014":1,"1191":1,"1192":2,"1194":1,"1200":1,"1201":1,"1210":2,"1212":1,"1216":1,"1271":1,"1320":1,"1339":1,"1452":1,"1471":1,"1485":2,"1496":26,"1498":1,"1499":2,"1502":2,"1514":1,"1517":2,"1674":2}}],["chatrole",{"3":{"1427":2}}],["chatresponseupdate",{"3":{"1427":2}}],["chatresponseformat",{"2":{"1018":1,"1366":1},"3":{"1018":1,"1366":1}}],["chatresponse",{"2":{"1016":1,"1019":1,"1092":1},"3":{"1016":1,"1018":2,"1019":1,"1091":1,"1092":1,"1369":2,"1427":7,"1435":1,"1492":1}}],["chatclientbuilder",{"2":{"1421":1,"1427":1},"3":{"1421":1,"1427":3}}],["chatclient",{"3":{"1369":2}}],["chatclientmetadata",{"2":{"1091":1,"1425":1},"3":{"1091":1,"1425":1,"1427":3}}],["chatoptions",{"2":{"1419":1,"1424":1,"2174":1},"3":{"1369":4,"1419":1,"1424":1,"1427":17,"2174":1}}],["chatmessage",{"3":{"1369":2,"1427":4}}],["chatfinishreason",{"2":{"1366":1},"3":{"1366":1,"1369":2}}],["chatty",{"3":{"1402":1,"1544":1,"1568":1}}],["chattoolpolicy",{"2":{"1095":1},"3":{"1091":1,"1092":1,"1095":2,"1199":4,"1203":1,"1207":2,"1422":2,"1427":14,"1496":2}}],["chatter",{"3":{"18":1,"1259":2,"1339":2,"1402":1,"1443":1,"1456":1,"1467":2,"1490":1,"1677":1,"2010":1,"2159":1}}],["chatguardrailexception",{"2":{"1021":1,"1089":1,"1366":1,"2175":1},"3":{"1018":1,"1021":1,"1089":1,"1091":1,"1199":5,"1203":1,"1207":2,"1366":1,"1369":2,"1423":4,"1427":8,"1496":1,"2175":3}}],["chat",{"1":{"2170":1,"2171":1,"2172":1,"2173":1,"2174":1,"2175":1,"2176":1,"2177":1,"2178":1,"2179":1,"2180":1},"3":{"404":1,"406":1,"408":1,"1018":1,"1089":1,"1091":6,"1112":1,"1118":1,"1192":2,"1202":1,"1203":9,"1207":16,"1324":1,"1359":3,"1360":1,"1366":3,"1369":5,"1396":1,"1422":2,"1423":5,"1425":2,"1427":31,"1437":3,"1442":1,"1496":1,"1526":3,"1577":1,"1585":1,"1779":1,"2169":2,"2170":2,"2174":1,"2193":1,"2209":1}}],["challengeprovider",{"3":{"1311":1}}],["challenges",{"3":{"1311":1,"1487":1,"1898":1}}],["challengesecondfactorcountingfailuresasync",{"3":{"1300":2}}],["challengesecondfactorasync",{"2":{"1059":1,"2196":1},"3":{"1059":1,"1300":2,"2196":2}}],["challengeasync",{"2":{"2196":1},"3":{"1300":4,"1323":1,"2196":1}}],["challenged",{"3":{"1300":1}}],["challenge",{"3":{"0":1,"189":1,"350":1,"352":1,"353":1,"420":1,"1059":2,"1188":1,"1212":1,"1289":1,"1293":2,"1298":1,"1300":18,"1311":4,"1323":9,"1324":5,"1396":1,"1406":1,"1415":1,"1417":1,"1436":3,"1438":1,"1489":1,"1490":1,"1975":2,"1976":2,"1978":1,"2194":2,"2197":2,"2202":1}}],["chartable",{"3":{"2156":1}}],["charting",{"3":{"1270":1}}],["chart",{"3":{"1247":1,"1402":1,"1961":1,"1965":1,"2159":1}}],["charters",{"3":{"1505":1,"1517":1}}],["charter",{"3":{"1202":1,"1324":1,"1339":1,"1496":1}}],["charset",{"3":{"1347":2,"1359":4,"1365":1,"1369":1,"1384":2}}],["charset=utf",{"3":{"1311":2}}],["chars",{"3":{"690":1,"1303":1,"1350":1,"1359":3,"1630":1,"1640":1,"1764":9}}],["charges",{"3":{"1027":1,"1821":1}}],["charge",{"3":{"201":1,"1026":2,"1027":1,"1029":1,"1243":1,"1247":1,"1263":1,"1417":1,"1436":1,"1460":1,"1764":1,"1907":1,"2080":1}}],["charged",{"3":{"0":1,"122":1,"1024":1,"1028":2,"1270":1,"1749":2,"1750":1,"1764":1,"1767":1,"1776":1,"1906":1}}],["characters",{"3":{"231":1,"397":1,"409":1,"674":1,"676":1,"698":1,"827":2,"1018":1,"1026":2,"1091":1,"1234":1,"1237":3,"1247":1,"1259":1,"1271":6,"1276":1,"1286":4,"1288":1,"1290":1,"1300":7,"1309":2,"1311":2,"1320":1,"1324":7,"1337":1,"1339":1,"1344":1,"1347":1,"1350":2,"1359":33,"1369":2,"1395":1,"1396":2,"1402":6,"1415":1,"1417":1,"1422":1,"1427":2,"1436":5,"1496":1,"1630":3,"1631":3,"1632":2,"1641":1,"1685":2,"1686":2,"1764":1,"1765":1,"1767":11,"1829":1,"1933":1,"1934":1,"1982":1,"2012":1,"2174":2,"2179":1}}],["character",{"3":{"26":1,"373":1,"427":1,"657":1,"698":1,"710":1,"741":1,"832":1,"905":1,"931":2,"972":1,"1018":1,"1228":1,"1229":1,"1232":1,"1237":2,"1241":2,"1259":1,"1270":1,"1271":2,"1282":1,"1286":1,"1289":2,"1300":7,"1309":4,"1311":2,"1312":3,"1323":1,"1324":12,"1339":4,"1344":2,"1347":1,"1350":5,"1359":13,"1362":3,"1395":7,"1396":4,"1415":2,"1416":1,"1417":7,"1426":1,"1427":1,"1433":2,"1436":9,"1438":2,"1496":1,"1641":1,"1829":1,"1842":2,"1851":1,"2127":1,"2150":1}}],["char",{"3":{"0":1,"905":1,"1212":1,"1247":1,"1286":1,"1300":1,"1324":4,"1350":4,"1488":1}}],["chain+cost",{"3":{"1526":1}}],["chainable",{"3":{"1271":1,"1324":1}}],["chaining",{"3":{"0":1,"749":1,"846":1,"1247":1,"1259":1,"1286":4,"1300":2,"1309":5,"1311":4,"1312":2,"1323":1,"1324":2,"1350":2,"1359":2,"1369":1,"1380":2,"1395":2,"1396":5,"1415":4,"1417":4,"1427":2,"1436":4,"1891":1}}],["chained",{"3":{"0":3,"258":1,"261":1,"827":2,"828":1,"831":1,"832":1,"905":1,"1124":1,"1128":1,"1212":1,"1300":2,"1324":3,"1337":1,"1339":3,"1359":2,"1369":1,"1436":2,"1438":1,"1467":2,"1488":1,"1489":1,"1670":1,"1684":1,"2024":1}}],["chains",{"1":{"1863":1,"1864":1,"1865":1,"1866":1,"1867":1,"1868":1},"3":{"0":2,"117":1,"121":2,"125":1,"195":1,"448":1,"672":4,"674":2,"752":1,"826":1,"827":1,"846":1,"872":1,"1212":1,"1224":1,"1247":2,"1260":1,"1270":5,"1271":1,"1286":4,"1300":5,"1311":4,"1323":1,"1324":3,"1339":3,"1359":16,"1377":1,"1380":1,"1396":2,"1402":2,"1416":1,"1419":1,"1436":3,"1441":1,"1443":1,"1444":1,"1445":1,"1543":1,"1545":1,"1786":1,"1821":1,"1829":2,"1833":1,"1862":1,"1863":1,"1864":1,"1868":1,"1889":1,"1891":1,"1892":1,"2008":1,"2022":1,"2207":1}}],["chain",{"0":{"1231":1,"1232":1,"1569":1,"1673":1,"1738":1},"1":{"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1},"3":{"0":10,"99":1,"107":1,"109":2,"110":2,"111":1,"115":4,"121":3,"122":2,"126":2,"127":1,"128":1,"259":1,"350":1,"367":1,"369":3,"370":1,"371":1,"373":2,"376":2,"388":1,"389":1,"395":1,"402":1,"404":2,"407":1,"408":1,"409":1,"499":1,"500":2,"501":2,"529":1,"532":1,"549":1,"574":1,"590":1,"591":1,"592":1,"595":1,"625":1,"626":1,"642":1,"665":1,"672":4,"674":6,"675":4,"676":7,"677":2,"692":2,"698":2,"701":1,"707":1,"711":1,"715":1,"721":1,"748":1,"749":2,"751":1,"756":1,"765":1,"819":1,"821":1,"823":1,"826":1,"852":1,"854":2,"870":1,"874":1,"905":1,"906":1,"908":1,"915":1,"923":1,"925":1,"964":1,"988":1,"1046":1,"1058":2,"1075":1,"1212":3,"1214":1,"1216":1,"1220":2,"1229":7,"1230":2,"1231":1,"1232":1,"1235":1,"1237":3,"1240":1,"1241":1,"1247":17,"1259":1,"1260":1,"1262":2,"1269":2,"1270":17,"1271":14,"1278":2,"1283":1,"1284":1,"1286":23,"1290":2,"1300":9,"1301":1,"1309":1,"1310":1,"1311":25,"1322":1,"1323":10,"1324":9,"1326":1,"1327":1,"1329":1,"1333":2,"1339":15,"1350":9,"1353":1,"1359":28,"1369":4,"1380":1,"1395":3,"1396":3,"1402":5,"1403":1,"1406":1,"1407":1,"1408":1,"1415":8,"1416":5,"1417":7,"1421":1,"1427":3,"1431":2,"1436":57,"1438":5,"1441":1,"1443":2,"1445":2,"1448":1,"1450":1,"1453":2,"1454":3,"1455":4,"1456":1,"1459":7,"1460":1,"1461":3,"1463":1,"1465":1,"1468":2,"1475":1,"1483":1,"1486":3,"1487":1,"1489":2,"1491":1,"1492":2,"1493":1,"1496":1,"1499":1,"1503":1,"1507":1,"1524":1,"1526":12,"1530":1,"1531":1,"1533":1,"1534":1,"1535":1,"1576":1,"1577":2,"1586":1,"1591":9,"1599":1,"1600":1,"1651":1,"1667":1,"1673":1,"1753":1,"1796":1,"1799":1,"1805":1,"1806":1,"1810":1,"1815":1,"1821":2,"1825":4,"1826":2,"1827":1,"1828":2,"1829":1,"1834":1,"1840":1,"1856":1,"1864":2,"1868":1,"1922":1,"1927":1,"1930":1,"1977":1,"1983":1,"1984":1,"2008":1,"2010":1,"2012":4,"2013":2,"2024":1,"2074":1,"2090":1,"2139":1,"2156":1,"2157":2,"2184":1,"2190":2,"2193":1,"2203":2,"2227":1,"2232":3}}],["chances",{"3":{"882":1,"938":1,"1359":1}}],["chance",{"3":{"234":1,"235":1,"411":1,"413":1,"673":1,"750":1,"1090":1,"1265":1,"1270":1,"1286":2,"1312":1,"1339":1,"1359":1,"1380":1,"1396":1,"1413":1,"1415":2,"1416":2,"1417":6,"1669":1,"2170":1}}],["channelreader",{"3":{"1396":2}}],["channelreferencecountertests",{"3":{"1199":1,"1207":1,"1324":1}}],["channelreferencecounter",{"3":{"1199":3,"1203":1,"1207":2,"1324":9,"1496":1}}],["channeljoinrefused",{"3":{"1309":1}}],["channelsync",{"3":{"1324":2}}],["channelsubscriptions",{"3":{"1324":2}}],["channelsubscription",{"3":{"1198":1,"1199":2,"1203":1,"1207":1,"1324":7,"1496":2}}],["channels",{"0":{"1512":1},"1":{"1942":1,"1943":1,"1944":1,"1945":1,"1946":1,"1947":1,"1948":1,"1949":1,"1950":1,"2181":1,"2182":1,"2183":1,"2184":1,"2185":1,"2186":1,"2187":1,"2188":1,"2189":1,"2190":1,"2191":1,"2192":1,"2193":1},"2":{"1400":1},"3":{"109":1,"110":1,"111":1,"225":3,"384":1,"433":1,"434":1,"1286":2,"1300":1,"1302":1,"1304":1,"1309":7,"1311":1,"1320":1,"1323":1,"1324":3,"1396":4,"1400":1,"1417":3,"1436":1,"1496":1,"1556":1,"1669":1,"1677":1,"1779":2,"1806":1,"1942":2,"1947":2,"1950":1,"2165":1,"2180":2,"2181":1,"2203":1,"2206":1,"2208":1}}],["channelkeyregexcache",{"3":{"1309":1}}],["channelkeymatchtimeout",{"3":{"1309":2}}],["channelkey",{"3":{"0":1,"380":1,"1286":4,"1309":17,"1324":8,"1396":10,"1402":3,"1944":1}}],["channelkeypattern",{"2":{"0":1,"380":1,"1305":1,"1309":1,"1402":1,"1945":1},"3":{"0":1,"380":1,"1305":1,"1307":1,"1309":2,"1323":2,"1402":1,"1945":1}}],["channel",{"0":{"1305":1,"1935":1,"1936":1,"1938":1,"1945":1},"1":{"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"377":1,"378":1,"379":1,"380":1,"381":1,"382":1,"383":1,"384":1,"431":1,"432":1,"433":1,"434":1,"435":1,"436":1,"1097":1,"1098":1,"1099":1,"1100":1,"1101":1,"1102":1,"1103":1,"1104":1},"2":{"1100":1,"1947":1,"2183":1},"3":{"0":18,"25":2,"27":1,"92":1,"95":1,"105":1,"110":1,"222":1,"223":2,"225":5,"226":1,"228":4,"229":1,"230":3,"255":1,"265":2,"273":1,"343":2,"377":1,"378":2,"380":3,"381":2,"382":2,"383":1,"384":6,"431":1,"434":1,"517":2,"518":2,"519":1,"521":1,"522":1,"608":1,"610":1,"640":1,"856":1,"857":1,"882":1,"896":1,"897":3,"914":2,"915":1,"916":1,"926":1,"930":1,"1066":1,"1097":1,"1099":2,"1100":5,"1101":2,"1102":1,"1104":1,"1112":1,"1150":1,"1157":1,"1192":6,"1202":2,"1203":2,"1212":5,"1226":1,"1229":1,"1259":1,"1260":1,"1265":1,"1270":6,"1285":1,"1286":9,"1292":1,"1300":3,"1302":3,"1307":5,"1308":2,"1309":40,"1312":1,"1320":6,"1323":21,"1324":40,"1328":1,"1339":1,"1359":8,"1380":7,"1395":1,"1396":52,"1397":2,"1399":8,"1400":4,"1401":3,"1402":84,"1415":6,"1417":11,"1429":1,"1436":7,"1437":1,"1438":4,"1441":1,"1445":1,"1448":1,"1460":1,"1466":1,"1467":2,"1488":1,"1490":1,"1496":6,"1512":1,"1599":2,"1644":1,"1677":1,"1733":1,"1902":1,"1922":1,"1935":2,"1936":2,"1937":1,"1938":2,"1940":1,"1941":4,"1943":1,"1944":5,"1945":6,"1947":5,"1948":1,"1949":2,"1950":4,"2025":1,"2079":1,"2083":2,"2158":1,"2183":5,"2190":3,"2192":1,"2193":2,"2232":6}}],["changequantity",{"3":{"1686":1}}],["changeorderitemquantityrequest",{"3":{"1686":1}}],["changeorderstatusrequest",{"2":{"1686":1,"1702":1},"3":{"1686":2,"1702":1}}],["changeoption",{"3":{"1402":4}}],["changeitemquantityasync",{"3":{"1686":1}}],["changeitemquantityhandler",{"3":{"1686":1}}],["changeitemquantitycommand",{"2":{"1686":1},"3":{"1686":2}}],["changeitemquantity",{"2":{"1684":1},"3":{"1684":1,"1686":4}}],["changename",{"2":{"1747":1},"3":{"1436":1,"1747":1,"1769":1}}],["changerole",{"3":{"1409":1,"1415":2}}],["changeroleasync",{"3":{"1324":1,"1415":1}}],["changeable",{"3":{"1359":1}}],["changeaddress",{"2":{"1747":1},"3":{"1271":2,"1436":1,"1747":1,"1769":1}}],["changetracking",{"3":{"1286":3}}],["changetracker",{"2":{"1231":1,"1233":1,"1278":1,"1840":1},"3":{"715":1,"988":1,"1231":1,"1233":1,"1237":2,"1273":1,"1278":1,"1286":10,"1840":1}}],["changevariantskuhandler",{"3":{"1286":1}}],["changevariantskucommand",{"3":{"1270":1}}],["changevariantprice",{"3":{"1286":1}}],["changevariantpricehandler",{"3":{"1286":2}}],["changevariantpricecommand",{"3":{"1270":1}}],["changeemail",{"2":{"1747":1},"3":{"1237":1,"1436":1,"1747":1,"1769":1}}],["changepreferencesasync",{"3":{"1311":1}}],["changepreferences",{"3":{"1203":4,"1207":10,"1291":2,"1300":4,"1322":1,"1323":9,"1415":9,"1436":1,"1496":2}}],["changepreferenceshandlertests",{"3":{"1199":1,"1207":2}}],["changepreferenceshandler",{"3":{"1199":4,"1203":1,"1207":2,"1323":3,"1406":2,"1415":9}}],["changepreferenceshandlerbasetests",{"3":{"1199":1,"1207":4,"1323":1}}],["changepreferenceshandlerbase",{"2":{"1291":1,"1322":1},"3":{"1199":3,"1203":1,"1207":2,"1291":3,"1300":6,"1322":2,"1323":8,"1415":6}}],["changepreferencesrequest",{"2":{"1291":1},"3":{"1199":12,"1203":1,"1207":2,"1291":2,"1300":6,"1311":1,"1323":3,"1415":4,"1496":1}}],["changepreferencescommandvalidator",{"3":{"1199":1,"1203":1,"1207":2,"1270":1,"1415":5}}],["changepreferencescommand",{"3":{"572":1,"1199":8,"1203":1,"1207":2,"1300":2,"1323":6,"1406":3,"1415":11,"1436":3,"1489":1}}],["changeprice",{"2":{"1028":1},"3":{"1028":1}}],["changepasswordfailed",{"3":{"1526":1}}],["changepasswordbutton",{"3":{"1436":1}}],["changepasswordasync",{"3":{"1311":1,"1324":3,"1436":1}}],["changepasswordcommand",{"3":{"1199":5,"1203":1,"1207":2,"1270":2,"1300":2,"1311":2,"1323":6,"1406":2,"1415":12}}],["changepasswordrequestvalidatortests",{"3":{"1199":1,"1207":2}}],["changepasswordrequestvalidator",{"2":{"1404":1},"3":{"1199":2,"1203":1,"1207":2,"1271":2,"1300":2,"1404":1,"1415":9,"1591":1}}],["changepasswordrequest",{"2":{"1289":1},"3":{"1199":15,"1203":1,"1207":2,"1289":1,"1300":4,"1311":1,"1323":1,"1324":2,"1415":5,"1591":1}}],["changepassword",{"2":{"314":1,"1291":1,"1500":1},"3":{"285":1,"310":3,"314":2,"353":1,"908":1,"926":1,"946":1,"1059":1,"1062":1,"1203":3,"1207":8,"1291":2,"1294":1,"1300":8,"1311":1,"1322":1,"1323":14,"1405":1,"1415":18,"1436":2,"1496":1,"1500":1,"1591":1,"1769":1}}],["changepasswordhandlertests",{"3":{"1199":1,"1207":2,"1436":1}}],["changepasswordhandler",{"2":{"310":1,"314":1},"3":{"281":1,"310":3,"314":4,"926":1,"1199":3,"1203":1,"1207":2,"1300":2,"1323":4,"1406":3,"1415":16}}],["changepasswordhandlerbasetests",{"3":{"1199":1,"1207":4,"1323":1,"1438":2}}],["changepasswordhandlerbase",{"2":{"281":1,"285":1,"310":1,"314":1,"353":1,"908":1,"946":1,"949":1,"1062":1,"1291":1,"1403":1},"3":{"281":2,"285":2,"310":4,"314":3,"353":2,"908":3,"909":1,"946":2,"949":1,"1059":2,"1062":2,"1199":3,"1203":1,"1207":2,"1291":2,"1300":8,"1322":5,"1323":13,"1403":1,"1415":14,"1496":1,"1577":1}}],["changelog",{"2":{"1674":1},"3":{"27":1,"135":2,"137":2,"138":2,"139":2,"140":2,"142":2,"286":1,"326":1,"365":2,"366":2,"449":1,"497":2,"502":1,"657":1,"660":1,"698":1,"825":1,"832":1,"857":1,"990":1,"991":2,"1003":2,"1004":3,"1007":2,"1091":1,"1095":3,"1119":1,"1124":2,"1127":1,"1128":2,"1132":2,"1136":2,"1160":2,"1173":1,"1324":1,"1577":7,"1585":2,"1586":2,"1673":3,"1674":1,"1675":1,"1734":1,"1735":1,"1737":1,"2065":1,"2131":1,"2232":1}}],["changedby",{"3":{"715":1,"1286":4,"1300":2,"1323":1}}],["changedon",{"2":{"715":1,"720":1,"1273":1},"3":{"715":3,"720":1,"1270":1,"1273":1,"1286":10,"1323":1}}],["changed",{"0":{"1277":1},"2":{"781":1,"923":1},"3":{"0":4,"1":1,"24":1,"25":1,"26":2,"27":1,"34":1,"43":1,"51":1,"82":1,"103":1,"104":1,"112":1,"115":1,"120":1,"123":1,"125":1,"126":1,"127":1,"130":1,"135":1,"136":1,"138":1,"139":4,"140":1,"141":1,"142":2,"149":1,"152":1,"164":1,"171":1,"178":1,"181":1,"189":1,"190":1,"200":1,"202":1,"203":1,"220":1,"238":1,"249":1,"250":1,"251":1,"252":1,"254":1,"256":1,"257":1,"258":2,"259":3,"260":1,"261":1,"265":1,"268":1,"276":1,"284":1,"296":1,"303":1,"314":1,"322":1,"323":1,"324":1,"336":1,"337":1,"339":1,"345":1,"354":1,"363":1,"366":1,"375":1,"393":1,"407":1,"416":1,"423":1,"424":1,"425":2,"426":1,"428":1,"429":1,"430":1,"451":1,"453":1,"454":2,"463":1,"465":1,"474":2,"475":1,"476":1,"477":1,"478":1,"495":1,"502":1,"514":1,"522":2,"523":1,"524":1,"531":1,"538":1,"545":1,"549":1,"550":1,"551":2,"552":1,"559":1,"564":1,"567":1,"573":1,"577":1,"578":1,"594":1,"602":1,"604":1,"607":7,"613":1,"616":4,"617":1,"621":1,"626":1,"629":1,"636":1,"652":1,"660":1,"669":1,"677":1,"685":1,"688":1,"691":1,"693":2,"710":1,"714":1,"715":2,"716":1,"717":3,"720":1,"728":1,"744":1,"752":1,"777":1,"781":1,"782":1,"783":1,"797":1,"800":1,"803":1,"804":1,"805":1,"806":1,"813":1,"814":1,"822":1,"832":1,"833":2,"836":1,"838":1,"840":2,"841":1,"849":1,"850":1,"857":1,"864":1,"877":1,"881":1,"891":2,"892":1,"900":1,"908":1,"909":1,"917":1,"921":1,"923":1,"927":1,"933":1,"934":1,"949":1,"960":1,"967":1,"980":1,"983":1,"1007":1,"1016":1,"1019":1,"1028":1,"1042":1,"1052":1,"1054":1,"1058":1,"1070":1,"1078":1,"1086":1,"1093":1,"1095":1,"1103":1,"1111":1,"1118":1,"1119":1,"1128":1,"1136":1,"1142":1,"1146":1,"1156":1,"1180":1,"1232":1,"1237":5,"1242":1,"1247":1,"1257":1,"1259":1,"1265":1,"1270":4,"1271":1,"1277":1,"1279":1,"1281":1,"1286":8,"1300":1,"1301":2,"1309":2,"1311":2,"1323":14,"1324":10,"1339":5,"1343":1,"1350":9,"1359":2,"1369":1,"1380":3,"1395":11,"1396":9,"1399":1,"1401":3,"1402":18,"1405":1,"1407":1,"1409":1,"1415":5,"1436":13,"1438":2,"1445":1,"1447":1,"1453":3,"1455":3,"1467":3,"1474":1,"1476":1,"1485":1,"1492":2,"1496":35,"1500":1,"1526":1,"1531":1,"1547":1,"1554":1,"1631":4,"1632":1,"1634":2,"1635":1,"1639":6,"1641":3,"1656":1,"1672":1,"1686":1,"1704":1,"1727":1,"1734":1,"1735":1,"1748":2,"1767":1,"1769":2,"1776":1,"1839":3,"1850":1,"1871":1,"1876":1,"1877":1,"1887":1,"1890":1,"1911":1,"1912":1,"1918":1,"2027":1,"2107":1,"2150":1,"2167":1,"2192":1,"2197":1,"2200":1,"2232":1}}],["changeshoppingcartitemquantity",{"2":{"1769":1},"3":{"1769":1}}],["changestatusasync",{"3":{"1702":2}}],["changestatus",{"2":{"1701":1},"3":{"1686":3,"1701":1,"1702":1,"1727":1}}],["changes+supply",{"3":{"1526":1}}],["changes",{"0":{"1735":1,"1769":1},"2":{"562":1,"564":1,"593":1,"604":1,"624":1,"626":1,"756":1,"1455":1,"1492":1,"1596":1},"3":{"0":4,"16":1,"17":1,"18":1,"20":1,"24":3,"71":1,"73":1,"74":1,"78":2,"79":1,"95":1,"136":1,"145":2,"147":3,"150":1,"160":1,"193":1,"201":1,"217":1,"219":1,"245":1,"246":2,"291":1,"305":1,"311":1,"312":1,"351":1,"353":1,"360":1,"390":2,"392":1,"413":1,"422":1,"434":1,"441":1,"499":1,"536":1,"539":1,"549":1,"562":1,"563":1,"564":4,"568":1,"572":1,"576":1,"593":1,"599":1,"600":1,"602":1,"604":2,"624":1,"626":3,"629":1,"698":1,"699":1,"717":1,"723":1,"726":1,"733":1,"740":1,"741":1,"750":1,"756":1,"767":1,"791":1,"793":1,"797":1,"799":1,"819":1,"825":6,"827":2,"830":1,"833":1,"838":1,"840":1,"844":1,"854":1,"903":1,"905":1,"907":1,"920":1,"921":1,"930":1,"954":2,"982":1,"1006":1,"1012":2,"1016":1,"1018":2,"1020":1,"1021":1,"1030":1,"1034":2,"1048":1,"1077":1,"1095":1,"1116":1,"1145":1,"1184":1,"1212":4,"1213":1,"1231":2,"1233":1,"1237":7,"1247":2,"1249":1,"1250":1,"1257":1,"1259":9,"1270":2,"1273":2,"1274":1,"1277":1,"1278":1,"1281":1,"1286":23,"1300":7,"1301":2,"1309":9,"1310":1,"1311":11,"1312":1,"1318":1,"1322":1,"1323":7,"1324":23,"1339":4,"1345":1,"1350":8,"1359":15,"1369":1,"1373":1,"1379":1,"1380":4,"1385":1,"1389":1,"1395":15,"1396":17,"1397":1,"1398":1,"1402":6,"1405":1,"1413":1,"1414":1,"1415":14,"1416":3,"1417":6,"1427":5,"1432":1,"1436":24,"1438":5,"1440":1,"1442":2,"1443":2,"1445":1,"1446":1,"1447":2,"1453":2,"1455":11,"1458":2,"1461":1,"1467":7,"1476":1,"1477":1,"1478":1,"1483":1,"1486":1,"1488":2,"1492":1,"1496":6,"1526":2,"1534":1,"1541":1,"1546":2,"1547":1,"1548":1,"1553":1,"1556":1,"1561":1,"1569":1,"1572":1,"1586":1,"1591":2,"1596":2,"1605":1,"1607":1,"1608":1,"1614":1,"1631":6,"1632":2,"1634":2,"1635":1,"1638":1,"1639":2,"1640":1,"1651":1,"1663":1,"1669":1,"1673":1,"1675":1,"1685":6,"1686":7,"1701":1,"1704":1,"1727":2,"1733":2,"1734":1,"1735":1,"1739":1,"1741":1,"1747":3,"1748":1,"1749":3,"1765":5,"1769":2,"1776":1,"1842":1,"1851":2,"1853":1,"1863":2,"1866":1,"1874":1,"1884":1,"1889":3,"1892":1,"1896":1,"1899":1,"1913":1,"1916":1,"1920":1,"1961":2,"1965":1,"1974":1,"1980":2,"2013":2,"2017":1,"2045":1,"2057":1,"2063":1,"2073":1,"2078":1,"2085":1,"2087":1,"2090":1,"2091":1,"2112":1,"2118":1,"2126":1,"2127":1,"2144":1,"2150":1,"2160":1,"2187":2,"2198":1,"2220":2,"2230":2,"2232":2}}],["change",{"0":{"1696":1,"1839":1,"2112":1},"1":{"712":1,"713":1,"714":1,"715":1,"716":1,"717":1,"718":1,"719":1,"720":1,"721":1,"1732":1,"1733":1,"1734":1,"1735":1,"1736":1,"1737":1,"1738":1},"2":{"1467":1},"3":{"0":28,"21":2,"26":1,"27":4,"30":1,"32":1,"41":1,"46":1,"54":1,"58":1,"59":2,"60":4,"63":1,"70":1,"71":1,"78":1,"79":1,"81":2,"94":1,"99":1,"111":1,"118":1,"119":1,"121":1,"131":1,"133":1,"134":1,"135":6,"136":3,"141":1,"142":1,"143":1,"147":3,"149":2,"150":1,"151":3,"158":1,"160":1,"164":1,"166":1,"167":1,"170":1,"186":2,"187":2,"200":1,"224":1,"241":1,"243":2,"253":1,"254":1,"255":2,"265":3,"273":1,"279":1,"285":1,"301":2,"303":2,"310":1,"311":1,"312":1,"314":1,"330":1,"332":2,"333":1,"340":1,"348":1,"353":2,"359":1,"364":1,"365":5,"370":1,"390":2,"391":3,"393":1,"397":2,"414":2,"422":1,"425":1,"429":1,"433":1,"447":1,"449":1,"451":1,"454":1,"465":1,"472":1,"474":1,"486":1,"490":1,"497":3,"499":1,"509":1,"526":1,"528":2,"547":1,"549":1,"550":1,"551":1,"563":1,"564":2,"566":1,"568":1,"583":1,"584":2,"591":2,"592":1,"609":1,"610":3,"618":1,"619":1,"620":2,"624":1,"625":1,"628":1,"629":1,"640":2,"641":1,"644":1,"650":1,"651":1,"657":1,"659":1,"665":1,"668":1,"691":1,"692":1,"703":1,"706":1,"712":1,"714":2,"715":4,"716":2,"719":1,"726":1,"727":1,"731":1,"733":1,"740":1,"742":1,"747":1,"749":1,"750":1,"751":2,"760":1,"765":1,"766":1,"767":1,"776":2,"784":1,"793":1,"799":3,"800":2,"803":2,"804":1,"818":1,"819":1,"825":1,"829":3,"832":1,"833":1,"836":1,"840":1,"845":1,"853":1,"854":2,"856":1,"857":1,"860":2,"861":1,"862":1,"863":1,"869":1,"870":1,"881":1,"883":3,"891":1,"903":1,"905":2,"907":1,"908":1,"916":1,"921":1,"924":1,"926":2,"931":2,"932":1,"939":1,"942":1,"946":1,"947":1,"948":1,"955":1,"958":1,"964":2,"965":1,"966":1,"972":1,"980":1,"981":2,"982":1,"986":1,"987":1,"988":4,"989":1,"990":1,"991":1,"1003":1,"1004":2,"1008":1,"1011":1,"1012":1,"1014":1,"1016":1,"1017":1,"1018":8,"1019":4,"1020":2,"1027":1,"1034":2,"1035":1,"1041":1,"1042":3,"1043":3,"1044":1,"1049":1,"1050":2,"1051":2,"1052":1,"1058":1,"1059":4,"1060":1,"1061":2,"1077":1,"1082":1,"1084":2,"1085":2,"1086":1,"1091":2,"1094":2,"1096":1,"1119":1,"1126":2,"1129":1,"1142":2,"1147":1,"1169":1,"1175":1,"1188":1,"1196":1,"1202":1,"1203":1,"1212":7,"1213":1,"1214":1,"1229":6,"1230":2,"1232":1,"1233":1,"1236":1,"1237":24,"1241":1,"1246":1,"1247":12,"1249":2,"1251":2,"1252":1,"1255":1,"1259":15,"1260":1,"1261":1,"1264":1,"1267":1,"1269":2,"1270":17,"1271":5,"1272":2,"1273":2,"1274":1,"1275":1,"1277":3,"1278":3,"1281":1,"1282":2,"1283":1,"1286":77,"1289":2,"1293":1,"1294":2,"1296":1,"1300":35,"1301":4,"1304":1,"1306":2,"1309":15,"1310":1,"1311":29,"1312":2,"1318":2,"1321":1,"1322":1,"1323":43,"1324":45,"1326":1,"1333":1,"1338":1,"1339":21,"1340":2,"1342":1,"1343":1,"1345":3,"1347":1,"1348":1,"1350":41,"1352":2,"1355":1,"1358":2,"1359":93,"1361":1,"1362":1,"1366":1,"1369":10,"1370":1,"1371":1,"1378":1,"1380":9,"1389":1,"1394":1,"1395":38,"1396":40,"1402":25,"1403":3,"1405":2,"1406":2,"1407":2,"1408":1,"1410":1,"1414":3,"1415":57,"1416":3,"1417":20,"1421":1,"1426":1,"1427":6,"1432":1,"1435":5,"1436":71,"1438":11,"1441":2,"1442":1,"1445":2,"1453":5,"1455":19,"1459":1,"1461":2,"1463":1,"1465":1,"1467":17,"1474":5,"1475":1,"1476":5,"1477":1,"1478":3,"1481":1,"1488":4,"1492":8,"1496":45,"1521":1,"1524":2,"1526":1,"1531":4,"1534":1,"1535":1,"1538":1,"1542":1,"1545":1,"1546":2,"1547":1,"1553":5,"1569":1,"1570":2,"1571":3,"1577":6,"1585":2,"1591":1,"1592":1,"1596":1,"1599":3,"1602":1,"1608":2,"1616":1,"1626":1,"1630":2,"1631":1,"1632":3,"1633":1,"1634":2,"1638":2,"1639":4,"1641":10,"1643":1,"1644":1,"1646":1,"1651":2,"1653":1,"1662":1,"1664":2,"1667":2,"1668":1,"1673":1,"1674":1,"1675":1,"1677":1,"1692":1,"1696":1,"1697":1,"1701":1,"1703":1,"1708":1,"1710":1,"1719":4,"1724":3,"1727":1,"1732":1,"1734":1,"1735":3,"1736":3,"1737":2,"1742":2,"1746":10,"1747":6,"1748":6,"1749":1,"1750":1,"1760":1,"1765":2,"1767":2,"1768":6,"1775":1,"1776":3,"1788":1,"1790":4,"1793":1,"1796":1,"1805":1,"1807":1,"1809":1,"1810":2,"1812":1,"1821":1,"1826":1,"1839":4,"1840":1,"1844":2,"1846":1,"1847":1,"1849":3,"1851":1,"1852":1,"1853":2,"1854":2,"1855":1,"1857":6,"1861":1,"1869":2,"1889":3,"1890":1,"1892":3,"1896":1,"1899":1,"1902":1,"1913":1,"1916":1,"1918":1,"1923":1,"1926":1,"1929":2,"1930":1,"1932":2,"1936":1,"1938":1,"1939":1,"1941":1,"1965":2,"1982":1,"1989":1,"1990":2,"1991":1,"1995":2,"2008":2,"2010":2,"2013":1,"2015":1,"2017":1,"2020":2,"2028":1,"2034":1,"2044":3,"2045":1,"2047":1,"2051":1,"2063":1,"2065":2,"2068":1,"2078":1,"2079":1,"2083":1,"2087":2,"2089":2,"2098":1,"2100":1,"2106":1,"2107":3,"2111":1,"2112":2,"2115":1,"2117":1,"2123":1,"2130":1,"2131":1,"2136":2,"2142":1,"2143":2,"2146":1,"2150":1,"2154":1,"2156":1,"2160":3,"2175":1,"2183":2,"2188":1,"2192":4,"2193":1,"2194":1,"2195":1,"2199":2,"2201":1,"2202":1,"2203":1,"2230":1,"2232":2}}],["changing",{"0":{"1889":1},"3":{"0":4,"40":1,"136":1,"160":1,"194":1,"208":1,"311":1,"365":1,"448":1,"476":1,"478":1,"497":1,"547":1,"692":1,"701":1,"732":1,"735":1,"741":1,"768":1,"819":1,"829":1,"905":1,"907":2,"948":1,"980":1,"1014":1,"1018":1,"1020":1,"1059":1,"1071":1,"1092":1,"1095":1,"1173":1,"1182":1,"1229":3,"1237":1,"1286":3,"1290":1,"1300":6,"1309":2,"1311":6,"1312":1,"1323":4,"1324":5,"1339":1,"1345":1,"1350":1,"1359":6,"1395":5,"1396":2,"1402":2,"1415":3,"1417":1,"1420":1,"1427":1,"1436":5,"1474":1,"1631":1,"1639":4,"1683":1,"1708":1,"1734":3,"1767":1,"1802":1,"1805":1,"1854":1,"1856":1,"1875":2,"1889":1,"1902":1,"1923":1,"1961":1,"1965":1,"1972":1,"2026":1,"2027":1,"2032":1,"2044":1,"2065":1,"2194":1,"2199":1,"2202":1}}],["chore",{"3":{"832":1,"1237":1,"1436":1,"1496":12,"1951":1}}],["choreography",{"3":{"537":1,"541":1,"809":4,"811":1,"815":1,"2168":1}}],["choreographed",{"1":{"533":1,"534":1,"535":1,"536":1,"537":1,"538":1,"539":1,"540":1,"541":1},"3":{"533":1,"536":1,"815":1,"1147":1,"1577":1,"2163":1,"2169":1}}],["chokepoint",{"3":{"1286":1,"1359":2,"2074":1}}],["choke",{"3":{"826":1,"829":1}}],["choosable",{"3":{"422":1}}],["choosing",{"3":{"70":1,"248":1,"295":1,"427":1,"520":1,"855":1,"896":1,"926":1,"964":1,"998":1,"1051":1,"1074":1,"1102":1,"1259":1,"1270":3,"1286":3,"1300":1,"1301":3,"1311":2,"1321":1,"1323":2,"1324":3,"1359":4,"1369":1,"1380":2,"1395":2,"1396":2,"1415":1,"1436":2,"1852":1,"1985":1,"2096":1,"2192":1}}],["chooses",{"3":{"234":1,"305":1,"1184":1,"1247":1,"1270":1,"1300":2,"1309":1,"1311":1,"1321":1,"1323":1,"1324":1,"1395":3,"1396":4,"1402":1,"1415":1,"1417":1,"1427":1,"1436":3,"1903":1,"2063":1}}],["choose",{"3":{"0":2,"157":1,"226":1,"481":1,"557":1,"640":1,"966":1,"996":1,"999":1,"1160":1,"1185":1,"1232":1,"1237":1,"1240":1,"1247":1,"1278":1,"1323":1,"1324":3,"1359":5,"1380":1,"1383":1,"1396":3,"1415":1,"1417":1,"1457":1,"1648":1,"1899":1,"1924":1,"1941":1,"1952":1,"2002":1,"2123":1,"2146":1,"2160":1,"2168":1,"2181":1}}],["chose",{"3":{"1":1,"91":1,"101":1,"305":1,"329":1,"469":1,"727":1,"743":1,"827":1,"853":1,"933":1,"963":1,"1004":1,"1049":1,"1082":1,"1085":2,"1093":1,"1109":1,"1213":1,"1286":2,"1311":3,"1323":4,"1324":3,"1338":1,"1339":3,"1347":1,"1359":2,"1380":1,"1395":2,"1396":5,"1415":1,"1417":2,"1423":1,"1427":1,"1436":2,"1898":1,"2025":1,"2043":2,"2064":2,"2175":1}}],["chosen",{"0":{"1361":1,"1935":1,"2117":1},"3":{"0":4,"1":1,"27":1,"102":1,"243":1,"255":1,"265":1,"353":1,"447":1,"450":1,"458":1,"461":1,"501":1,"546":1,"556":1,"584":1,"591":1,"657":1,"684":1,"732":1,"811":1,"821":1,"862":1,"889":1,"1013":1,"1084":1,"1092":1,"1144":1,"1212":2,"1229":1,"1235":1,"1244":1,"1247":1,"1269":2,"1270":2,"1286":10,"1300":6,"1301":2,"1302":1,"1309":1,"1311":7,"1323":3,"1324":11,"1326":1,"1338":1,"1339":5,"1350":2,"1359":11,"1369":3,"1373":1,"1380":1,"1395":14,"1396":6,"1402":5,"1415":4,"1417":1,"1422":1,"1429":1,"1435":1,"1436":5,"1438":1,"1441":1,"1455":1,"1460":1,"1474":2,"1475":1,"1492":1,"1496":1,"1513":1,"1545":1,"1556":1,"1567":1,"1577":2,"1630":1,"1653":1,"1666":1,"1715":1,"1842":1,"1889":1,"1915":1,"1944":1,"1984":1,"2024":1,"2064":1,"2078":1,"2083":2,"2115":1,"2116":1,"2130":1,"2131":1,"2132":1,"2160":1,"2177":1,"2232":3}}],["choices",{"3":{"0":2,"97":1,"449":1,"633":1,"880":2,"905":1,"953":1,"1212":1,"1229":1,"1257":1,"1259":1,"1266":1,"1270":1,"1271":1,"1286":4,"1300":4,"1309":3,"1310":1,"1311":2,"1312":1,"1323":1,"1324":4,"1337":1,"1339":1,"1350":3,"1369":3,"1373":1,"1375":1,"1380":1,"1395":3,"1396":2,"1415":1,"1416":1,"1417":1,"1436":7,"1467":1,"1492":1,"1630":1,"1675":1,"1783":1,"1789":1,"1829":1,"1967":1,"1984":1,"2016":1,"2028":1,"2043":1,"2052":1,"2075":1,"2127":1,"2130":1,"2131":1}}],["choice",{"3":{"0":7,"20":1,"31":1,"32":1,"54":1,"62":1,"68":1,"87":1,"97":1,"98":1,"101":1,"157":1,"165":2,"168":1,"170":1,"175":1,"178":1,"201":1,"236":1,"265":2,"273":1,"274":1,"291":1,"309":1,"469":1,"508":1,"551":1,"555":1,"558":1,"560":1,"633":1,"640":2,"642":1,"647":1,"666":1,"676":1,"686":1,"690":1,"792":1,"808":1,"810":1,"811":1,"833":1,"853":1,"874":1,"876":1,"913":1,"914":1,"947":1,"953":1,"954":1,"955":1,"963":1,"968":1,"980":1,"981":1,"1032":1,"1034":3,"1037":1,"1049":1,"1052":1,"1073":1,"1077":1,"1082":1,"1125":1,"1162":1,"1185":1,"1212":4,"1229":3,"1231":1,"1237":3,"1247":4,"1248":1,"1249":1,"1259":6,"1270":6,"1271":1,"1283":1,"1286":22,"1288":1,"1300":12,"1301":1,"1304":1,"1309":1,"1310":1,"1311":8,"1312":2,"1314":1,"1315":1,"1316":1,"1323":14,"1324":26,"1327":2,"1339":17,"1350":8,"1353":1,"1355":1,"1359":24,"1362":1,"1369":3,"1379":1,"1380":4,"1391":1,"1395":18,"1396":23,"1397":1,"1402":4,"1415":10,"1416":2,"1417":15,"1423":1,"1427":2,"1436":27,"1439":1,"1441":5,"1445":1,"1453":1,"1455":1,"1459":1,"1460":1,"1465":1,"1467":2,"1471":1,"1472":1,"1475":2,"1496":1,"1534":1,"1547":2,"1577":2,"1596":1,"1597":1,"1599":4,"1632":1,"1640":1,"1665":1,"1669":2,"1678":1,"1720":1,"1724":1,"1747":1,"1791":1,"1805":1,"1810":1,"1826":1,"1849":1,"1854":2,"1856":1,"1861":2,"1862":2,"1866":1,"1884":1,"1909":1,"1923":1,"1935":1,"1941":1,"1994":1,"1998":1,"2025":1,"2027":1,"2028":1,"2047":1,"2067":1,"2081":3,"2083":1,"2084":2,"2086":1,"2117":1,"2150":1,"2165":1,"2182":1,"2230":1,"2232":1}}],["cipher",{"3":{"2146":2}}],["ciphertext",{"2":{"365":1,"2146":1},"3":{"358":1,"359":8,"360":2,"361":4,"363":2,"365":2,"1284":2,"1286":11,"1324":2,"1675":1,"2139":1,"2140":2,"2142":7,"2143":2,"2144":2,"2145":1,"2146":5}}],["cil",{"3":{"1436":1}}],["circle",{"3":{"1395":1,"1417":2}}],["circularity",{"3":{"1436":2}}],["circular",{"3":{"0":1,"583":1,"768":1,"1286":1,"1311":1,"1415":1,"1436":2,"1441":1,"1540":1,"1577":1,"1641":1,"1881":1,"1885":1,"2009":1}}],["circuitbreakersamplingduration",{"3":{"1339":3}}],["circuitbreaker",{"3":{"819":1,"1359":1}}],["circuitopencounter",{"2":{"1256":1},"3":{"1256":1,"1259":2,"1323":2}}],["circuitopen",{"3":{"819":1}}],["circuitoptions",{"2":{"831":1,"1123":1,"1125":1},"3":{"0":1,"831":1,"832":1,"1123":2,"1125":1,"1324":6,"1416":2,"2000":1}}],["circuiting",{"3":{"284":1,"946":1,"1229":1,"1231":1,"1237":1,"1247":1,"1268":1,"1270":3,"1286":1,"1300":2,"1311":1,"1320":1,"1323":1,"1324":1,"1350":2,"1359":2,"1380":2,"1387":1,"1395":3,"1396":1,"1402":2,"1415":2,"1436":1,"1577":1,"1666":1,"1707":1}}],["circuited",{"3":{"71":1,"819":1,"820":1,"1270":1,"1311":1,"1339":1,"1402":1}}],["circuithandler",{"2":{"1124":1,"1125":1,"2000":1},"3":{"0":1,"1124":2,"1125":1,"1324":8,"1416":1,"2000":2}}],["circuits",{"3":{"0":1,"70":1,"109":1,"117":1,"121":1,"126":1,"175":1,"179":1,"300":1,"318":1,"459":1,"556":1,"640":1,"690":1,"790":2,"820":1,"821":1,"830":1,"832":1,"948":1,"964":1,"1123":3,"1124":2,"1125":1,"1126":1,"1128":3,"1212":1,"1224":1,"1229":2,"1237":3,"1239":1,"1245":1,"1247":2,"1259":2,"1268":1,"1270":8,"1271":1,"1286":5,"1300":7,"1309":7,"1311":9,"1323":2,"1324":21,"1339":3,"1346":1,"1347":1,"1350":3,"1359":27,"1380":1,"1389":1,"1391":1,"1395":9,"1396":9,"1402":7,"1410":1,"1415":6,"1416":4,"1417":4,"1427":1,"1436":2,"1441":1,"1455":1,"1461":1,"1467":1,"1534":1,"1577":1,"1599":1,"1612":1,"1805":1,"1821":1,"1831":1,"1933":1,"1962":1,"1994":1,"2000":2,"2001":1,"2008":1,"2032":1,"2096":2,"2137":1,"2203":1}}],["circuit",{"0":{"100":1,"1128":2},"2":{"819":1,"2032":1,"2156":1},"3":{"0":11,"27":2,"66":1,"67":2,"70":1,"71":1,"72":2,"73":1,"100":1,"109":1,"110":1,"113":1,"122":1,"124":1,"125":1,"175":1,"180":1,"189":1,"223":1,"241":1,"243":1,"258":1,"264":1,"265":1,"272":1,"359":1,"407":2,"413":1,"486":1,"506":3,"507":4,"549":1,"555":2,"557":2,"558":1,"575":1,"607":1,"609":3,"817":1,"819":6,"821":1,"822":1,"825":1,"828":1,"830":1,"831":3,"832":4,"833":1,"879":1,"881":3,"884":1,"920":1,"1020":1,"1074":1,"1079":1,"1122":3,"1123":2,"1124":15,"1125":4,"1126":1,"1128":5,"1129":1,"1168":1,"1184":3,"1192":2,"1212":2,"1213":1,"1220":2,"1229":2,"1237":1,"1256":2,"1259":7,"1263":2,"1265":1,"1268":3,"1270":17,"1271":1,"1286":7,"1300":1,"1301":1,"1304":1,"1307":1,"1309":2,"1310":1,"1311":5,"1312":5,"1317":1,"1323":5,"1324":131,"1330":2,"1339":18,"1350":2,"1359":17,"1365":1,"1380":2,"1395":12,"1396":17,"1401":1,"1402":7,"1415":4,"1416":9,"1417":32,"1433":1,"1436":20,"1437":2,"1438":7,"1441":3,"1443":2,"1447":1,"1453":1,"1455":1,"1456":2,"1465":1,"1467":10,"1489":1,"1490":1,"1496":1,"1525":1,"1526":5,"1534":1,"1544":1,"1560":2,"1566":2,"1577":6,"1585":1,"1599":1,"1653":1,"1665":1,"1668":1,"1698":1,"1701":1,"1707":1,"1708":1,"1805":1,"1874":1,"1921":1,"1933":1,"1946":1,"2000":7,"2002":2,"2006":3,"2010":1,"2019":1,"2029":1,"2030":4,"2032":2,"2037":1,"2038":2,"2070":1,"2074":2,"2076":2,"2081":2,"2082":1,"2118":2,"2136":1,"2142":1,"2156":4,"2158":1,"2160":1,"2232":1}}],["cicd",{"3":{"1192":1,"1212":16,"1462":1,"1494":1,"1496":9,"1499":3}}],["citizen",{"3":{"1300":1}}],["citing",{"3":{"0":1,"137":2,"428":1,"990":1,"1259":1,"1300":1,"1324":2,"1359":1}}],["citymaxlength",{"3":{"1237":1,"1271":1}}],["city",{"3":{"1237":1,"1271":2,"1286":1,"1324":4,"1436":2,"1764":1,"1829":1}}],["cityrules",{"3":{"1199":3,"1203":1,"1207":1,"1271":7}}],["citable",{"3":{"861":2,"1433":1,"1436":3,"1526":1,"1534":2}}],["citations",{"0":{"138":1,"139":1,"140":1,"142":1},"3":{"0":1,"27":1,"34":1,"43":1,"74":1,"104":1,"112":1,"115":2,"128":1,"130":2,"137":1,"138":2,"139":2,"142":2,"145":2,"152":1,"171":1,"184":1,"190":1,"203":1,"231":1,"238":1,"249":1,"268":1,"296":1,"322":1,"328":2,"337":2,"345":1,"354":1,"365":1,"366":1,"375":1,"393":1,"395":8,"409":3,"429":1,"446":2,"453":1,"468":3,"476":1,"478":1,"490":1,"493":1,"495":1,"497":1,"514":1,"534":3,"540":1,"551":1,"554":3,"559":1,"578":1,"586":1,"589":1,"594":1,"597":2,"621":1,"624":1,"636":1,"638":3,"644":1,"647":1,"652":1,"669":1,"672":4,"680":2,"685":1,"688":1,"696":2,"710":1,"713":1,"723":1,"728":1,"744":1,"752":1,"764":3,"769":1,"777":1,"780":2,"794":1,"797":1,"803":2,"822":1,"825":3,"841":1,"844":1,"849":1,"850":1,"864":1,"867":1,"875":1,"892":1,"900":1,"927":1,"929":1,"934":2,"949":1,"975":1,"983":1,"1003":1,"1006":1,"1007":1,"1029":1,"1037":1,"1045":1,"1055":1,"1062":1,"1078":1,"1086":1,"1095":1,"1103":1,"1111":1,"1128":1,"1136":1,"1146":1,"1156":1,"1396":2,"1452":1,"1496":17,"1500":1,"1536":1,"1796":1}}],["citation",{"0":{"137":1},"3":{"0":2,"82":2,"137":1,"138":1,"139":1,"141":1,"142":1,"145":2,"252":1,"256":1,"258":2,"336":1,"364":1,"378":1,"395":3,"409":1,"425":1,"426":1,"428":2,"429":1,"474":1,"478":1,"492":1,"534":4,"540":1,"543":1,"552":1,"559":1,"567":1,"597":1,"604":1,"607":5,"613":1,"624":2,"629":1,"677":1,"693":1,"755":1,"761":1,"780":1,"806":1,"825":1,"833":1,"867":1,"877":1,"892":1,"909":1,"912":1,"917":1,"958":1,"960":1,"1006":1,"1013":1,"1021":1,"1119":1,"1381":2,"1396":1,"1462":1,"1496":25,"1497":1,"1499":1,"1500":1,"2232":1}}],["cites",{"3":{"252":1,"392":1,"492":1,"534":1,"549":1,"594":1,"782":1,"865":1,"893":1,"968":1,"986":1,"987":1,"1006":1,"1062":1,"1070":1,"1193":1,"1237":2,"1270":1,"1300":2,"1312":1,"1324":1,"1339":2,"1359":6,"1369":1,"1396":5,"1415":1,"1436":6,"1455":1,"1471":1,"1496":14,"1518":1,"2000":1}}],["cited",{"3":{"29":1,"139":1,"140":2,"250":1,"258":1,"259":2,"261":1,"276":2,"423":1,"430":1,"463":1,"490":1,"493":1,"547":1,"551":1,"584":1,"586":1,"587":1,"607":1,"720":1,"780":1,"825":1,"867":1,"875":1,"877":1,"916":1,"1006":1,"1011":1,"1065":1,"1074":1,"1190":1,"1193":1,"1236":1,"1237":1,"1270":2,"1286":1,"1300":3,"1301":1,"1311":3,"1323":1,"1324":1,"1339":1,"1350":2,"1359":1,"1380":1,"1395":2,"1396":2,"1417":5,"1436":1,"1451":2,"1462":1,"1471":1,"1485":1,"1496":9,"1497":1,"1580":1,"1597":1,"1673":1,"2050":1}}],["cite",{"3":{"0":1,"95":1,"121":1,"136":1,"139":1,"286":1,"395":1,"407":1,"493":1,"556":1,"660":1,"748":1,"869":1,"1289":1,"1300":1,"1339":1,"1436":1,"1451":1,"1496":9,"1610":1,"1744":1}}],["ci",{"0":{"1364":1,"1453":1,"1616":1},"1":{"561":1,"562":1,"563":1,"564":1,"565":1,"566":1,"567":1,"568":1,"588":1,"589":1,"590":1,"591":1,"592":1,"593":1,"594":1,"595":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1,"1452":1,"1453":1,"1454":1,"1455":1,"1456":1,"1457":1,"1458":1,"1459":1,"1460":1,"1461":1},"2":{"374":1,"514":1,"589":1,"594":1,"604":1,"624":1,"1215":2,"1459":1,"1531":1,"1616":1,"1617":1,"1619":1},"3":{"0":17,"130":3,"132":3,"135":4,"136":1,"137":3,"138":1,"140":6,"142":4,"148":1,"218":3,"263":1,"265":1,"291":1,"368":1,"369":2,"370":7,"371":2,"373":10,"374":1,"375":1,"401":1,"412":1,"413":1,"414":1,"446":1,"450":2,"451":2,"483":1,"486":1,"509":4,"511":1,"514":1,"526":1,"527":1,"530":2,"531":2,"555":1,"556":1,"557":1,"558":1,"561":1,"562":1,"564":3,"572":1,"573":1,"574":1,"575":2,"576":1,"577":1,"588":1,"589":2,"590":2,"591":8,"592":1,"593":5,"594":1,"599":3,"601":1,"604":3,"609":4,"615":1,"618":1,"619":1,"621":1,"624":3,"625":1,"626":7,"630":1,"631":2,"633":5,"634":2,"635":3,"675":1,"700":1,"766":2,"767":1,"768":1,"862":1,"863":3,"864":1,"865":1,"868":1,"869":2,"871":2,"873":1,"876":1,"893":1,"906":1,"913":1,"914":3,"917":1,"941":1,"954":3,"960":1,"982":2,"983":1,"1012":2,"1017":2,"1018":1,"1020":1,"1034":8,"1037":2,"1066":2,"1067":3,"1069":1,"1070":1,"1074":1,"1091":1,"1192":1,"1212":2,"1214":1,"1215":6,"1216":1,"1237":1,"1273":1,"1286":2,"1311":2,"1324":1,"1326":3,"1339":8,"1359":2,"1364":2,"1369":4,"1380":3,"1415":2,"1426":1,"1427":4,"1428":2,"1429":2,"1431":2,"1433":4,"1434":4,"1435":1,"1436":82,"1438":17,"1440":1,"1441":4,"1442":1,"1444":1,"1445":2,"1450":1,"1452":2,"1453":56,"1454":8,"1455":12,"1456":5,"1457":1,"1459":6,"1460":2,"1461":6,"1462":2,"1463":2,"1464":1,"1465":1,"1467":3,"1468":1,"1471":1,"1474":1,"1475":1,"1476":1,"1481":2,"1482":1,"1485":2,"1486":42,"1487":8,"1488":3,"1489":10,"1490":15,"1491":1,"1492":44,"1493":2,"1494":3,"1496":6,"1503":1,"1521":1,"1523":1,"1524":5,"1525":4,"1526":60,"1530":1,"1531":10,"1532":2,"1534":8,"1535":7,"1537":2,"1545":1,"1548":1,"1551":2,"1552":1,"1553":1,"1554":2,"1558":2,"1565":1,"1569":1,"1570":2,"1572":1,"1574":1,"1576":4,"1577":65,"1582":7,"1583":2,"1584":1,"1585":3,"1586":9,"1589":1,"1590":1,"1591":40,"1592":3,"1595":1,"1596":6,"1597":1,"1599":1,"1600":2,"1605":2,"1611":6,"1614":1,"1616":1,"1617":3,"1619":2,"1642":1,"1643":1,"1654":1,"1659":1,"1661":1,"1664":1,"1669":1,"1670":1,"1671":1,"1673":1,"1674":1,"1675":1,"1696":1,"1706":1,"1707":2,"1716":4,"1731":2,"1738":1,"1739":2,"1757":2,"1761":1,"1781":1,"1784":1,"1785":1,"1793":1,"1797":1,"1800":2,"1923":2,"1929":1,"1930":1,"2003":1,"2047":2,"2051":1,"2058":1,"2059":3,"2060":1,"2079":1,"2097":1,"2101":1,"2105":3,"2108":1,"2109":1,"2120":2,"2122":1,"2123":2,"2132":2,"2133":1,"2171":1,"2176":1,"2179":1,"2213":1,"2218":1,"2219":1,"2220":2,"2232":2,"2239":2}}],["crtp",{"3":{"1436":2}}],["cry",{"3":{"1300":1}}],["cryptoprovidercache",{"3":{"1300":1,"1323":1}}],["crypto",{"0":{"2144":1},"3":{"311":1,"360":1,"602":1,"665":1,"667":1,"1213":1,"1300":2,"1336":1,"1339":3,"1436":2,"1442":1,"1467":3,"1496":1,"1905":1,"1970":1,"2142":1,"2146":1}}],["cryptographic",{"3":{"372":1,"1259":1,"1300":4,"1323":1,"1339":1,"1415":1,"1436":1,"1438":1,"1630":2,"1641":3}}],["cryptographicexception",{"2":{"359":1,"361":1,"2142":1},"3":{"359":4,"361":1,"1286":2,"1324":1,"2142":3}}],["cryptographically",{"3":{"209":2,"359":1,"1300":1,"1324":1,"1641":1,"1902":1,"1905":1,"1971":2,"2142":1}}],["cryptographicoperationstype",{"3":{"1436":1}}],["cryptographicoperations",{"2":{"179":1,"310":1,"827":1,"854":1,"946":2,"1292":1,"1293":1,"1294":1,"1337":1,"1902":1,"1905":1},"3":{"0":1,"179":1,"310":1,"827":1,"854":1,"946":2,"1292":1,"1293":1,"1294":1,"1300":8,"1337":1,"1339":3,"1436":3,"1902":1,"1905":1}}],["cryptography",{"2":{"665":1},"3":{"0":1,"664":1,"665":1,"1059":1,"1286":1,"1293":1,"1300":5,"1311":1,"1324":1,"1339":3,"1395":1,"1427":1,"1436":1,"1442":1,"1467":1,"1905":1,"2194":1,"2198":1}}],["cruiser",{"3":{"2049":1}}],["crumb",{"3":{"1324":2,"1395":5}}],["crucial",{"3":{"1310":1}}],["crucially",{"3":{"1223":1,"1251":1,"1259":1,"1270":1,"1281":1,"1300":1,"1323":1,"1339":2,"1359":1,"1402":1,"1415":1,"1417":1,"1865":1}}],["crux",{"3":{"1286":1,"1314":1,"1882":1,"1968":1}}],["crutch",{"3":{"1229":1}}],["crud",{"0":{"1388":1,"1389":1},"1":{"779":1,"780":1,"781":1,"782":1,"783":1,"784":1,"785":1,"786":1},"2":{"115":1,"1262":1,"1270":1},"3":{"0":1,"115":1,"122":2,"328":1,"341":1,"344":1,"444":1,"490":1,"523":1,"779":1,"782":2,"783":1,"784":1,"785":1,"881":4,"883":1,"921":1,"922":5,"924":1,"926":4,"927":1,"963":1,"980":1,"1100":1,"1203":14,"1207":87,"1208":1,"1212":1,"1233":1,"1249":1,"1259":3,"1262":2,"1263":1,"1265":8,"1270":45,"1271":3,"1286":1,"1300":1,"1311":5,"1323":5,"1324":14,"1350":10,"1352":1,"1354":1,"1359":80,"1371":3,"1373":1,"1380":14,"1382":2,"1386":1,"1389":1,"1392":1,"1395":68,"1396":3,"1402":4,"1415":6,"1436":1,"1438":2,"1526":1,"1540":1,"1577":5,"1591":1,"1611":2,"1612":1,"1616":1,"1617":1,"1621":1,"1625":1,"1626":1,"1627":1,"1629":1,"1631":1,"1632":12,"1638":2,"1639":3,"1651":1,"1666":1,"1742":1,"1747":1,"1750":1,"1757":1,"1760":1,"1824":1,"1874":1,"1985":1,"1991":3,"2074":1,"2232":1}}],["crudentitycontrollerbasetests",{"3":{"1199":1,"1207":5,"1311":2}}],["crudentitycontrollerbase",{"2":{"328":1,"925":1,"1666":1,"1874":1},"3":{"0":2,"328":1,"341":1,"922":2,"925":1,"1199":2,"1203":1,"1207":2,"1212":2,"1270":6,"1300":1,"1311":14,"1436":2,"1496":1,"1666":1,"1874":1}}],["crlf",{"3":{"741":1,"1300":4,"1311":2,"1436":1,"1438":1,"1479":1,"1496":1}}],["crisp",{"3":{"1816":1}}],["crios",{"3":{"1324":1}}],["cries",{"3":{"590":1,"1436":1}}],["criterion",{"3":{"265":1,"371":1,"1011":1,"1012":1,"1018":1,"1019":1,"1020":1,"1093":1,"1247":2,"1359":2,"1366":1,"1369":1,"1436":1,"1491":1,"1496":1,"1524":1,"1526":15,"1527":1,"1531":3,"1532":2,"1537":1,"1576":1,"1577":12,"1578":1,"1582":2,"1585":1,"1591":2,"1797":1,"2142":1}}],["criteria",{"1":{"1536":1,"1537":1,"1538":1,"1539":1,"1540":1,"1541":1,"1542":1,"1543":1,"1544":1,"1545":1,"1546":1,"1547":1,"1548":1,"1549":1,"1550":1,"1551":1,"1552":1,"1553":1,"1554":1,"1555":1,"1556":1,"1557":1,"1558":1,"1559":1,"1560":1,"1561":1,"1562":1,"1563":1,"1564":1,"1565":1,"1566":1,"1567":1,"1568":1,"1569":1,"1570":1,"1571":1,"1572":1},"2":{"319":1,"546":1,"547":1,"550":1},"3":{"0":4,"168":1,"318":1,"319":1,"376":1,"544":1,"545":4,"546":1,"547":1,"548":1,"549":3,"550":1,"591":1,"1010":1,"1011":2,"1012":9,"1013":3,"1014":3,"1017":3,"1018":1,"1019":1,"1090":1,"1212":1,"1216":2,"1239":11,"1240":2,"1243":3,"1245":1,"1247":49,"1278":1,"1286":5,"1310":1,"1311":2,"1342":1,"1350":3,"1353":1,"1359":43,"1366":1,"1369":2,"1372":1,"1380":2,"1431":1,"1436":11,"1438":4,"1467":1,"1519":2,"1526":5,"1531":2,"1534":1,"1536":5,"1537":6,"1538":1,"1539":1,"1540":1,"1541":1,"1542":1,"1543":1,"1544":1,"1545":1,"1546":1,"1547":1,"1548":1,"1549":1,"1550":1,"1551":1,"1552":1,"1553":2,"1554":1,"1555":1,"1556":1,"1557":1,"1558":1,"1559":1,"1560":1,"1561":1,"1562":1,"1563":1,"1564":1,"1565":1,"1566":1,"1567":1,"1568":1,"1569":1,"1570":1,"1571":1,"1575":1,"1577":9,"1581":1,"1582":2,"1584":1,"1585":2,"1591":2,"1637":1,"1662":1,"1796":1,"1797":1,"1802":1,"1815":9,"1817":1,"1859":1,"1994":2,"2040":1,"2051":1,"2171":2,"2179":1}}],["critically",{"3":{"235":1,"1237":1,"1270":1,"1300":1,"1342":1,"1436":3,"1452":1,"1805":1,"1895":1}}],["critical",{"0":{"1619":1},"2":{"791":1,"792":1,"794":1,"2166":1,"2168":1},"3":{"0":1,"767":1,"790":6,"791":1,"792":3,"794":1,"812":1,"870":1,"995":1,"1259":1,"1286":1,"1300":3,"1303":1,"1311":1,"1395":11,"1415":1,"1417":5,"1445":1,"1449":1,"1455":3,"1456":1,"1460":1,"1463":2,"1466":1,"1492":1,"1559":1,"1565":1,"1569":1,"1639":1,"1649":1,"1814":1,"2166":3,"2168":1}}],["crack",{"3":{"1900":1,"1902":1,"1905":1}}],["cracking",{"3":{"311":1,"945":1,"1300":2,"1436":1}}],["craft",{"3":{"1324":1,"1897":1,"2069":1}}],["craftsmanship",{"3":{"1301":1,"1552":1}}],["crafted",{"3":{"1270":1,"1324":1,"1359":4,"1416":1,"1436":3}}],["crawler",{"3":{"607":1,"609":1,"1467":2,"2158":3}}],["crashing",{"3":{"1237":1,"1259":1,"1286":1,"1300":1,"1380":1,"1396":1,"1401":1,"1402":2,"1416":1}}],["crashed",{"3":{"1125":1,"1323":2,"1324":1,"1475":1}}],["crashes",{"3":{"0":1,"16":1,"18":1,"146":1,"147":1,"150":1,"1074":1,"1213":1,"1286":1,"1324":1,"1436":1,"1491":1,"2128":1}}],["crash",{"3":{"0":4,"19":1,"24":1,"148":1,"195":1,"197":1,"199":1,"201":3,"226":1,"413":2,"520":1,"524":1,"537":1,"539":1,"601":1,"603":1,"676":1,"692":2,"714":1,"716":1,"756":1,"897":1,"931":2,"933":1,"996":1,"1016":1,"1018":1,"1022":1,"1041":1,"1074":1,"1076":1,"1102":1,"1116":1,"1254":1,"1257":1,"1258":1,"1259":12,"1269":1,"1270":1,"1286":3,"1318":1,"1323":5,"1324":2,"1339":4,"1349":1,"1357":1,"1359":6,"1367":1,"1368":1,"1369":2,"1396":4,"1408":1,"1415":6,"1416":1,"1417":16,"1436":1,"1455":1,"1491":2,"1576":1,"1577":1,"1631":1,"1660":1,"1669":1,"1721":1,"1724":1,"1839":1,"1842":1,"1845":1,"1947":1,"2013":1,"2126":1,"2164":1,"2190":1}}],["crowd",{"3":{"390":1,"1324":2,"1395":1,"1955":1}}],["cronformatexception",{"3":{"1323":1}}],["cronexpression",{"3":{"707":3,"1269":1,"1270":2,"1286":1,"1323":3,"1442":1}}],["cronschedule",{"3":{"1323":1}}],["crons",{"3":{"625":1,"626":2,"1438":1,"1456":1,"1490":1,"1492":2,"1591":1,"1599":1}}],["cronosnextoccurrencetests",{"3":{"1199":1,"1207":2,"1438":2}}],["cronos",{"3":{"0":1,"707":2,"708":1,"709":1,"1059":1,"1212":1,"1213":1,"1270":2,"1323":3,"1948":1}}],["cron",{"1":{"704":1,"705":1,"706":1,"707":1,"708":1,"709":1,"710":1,"711":1,"2181":1,"2182":1,"2183":1,"2184":1,"2185":1,"2186":1,"2187":1,"2188":1,"2189":1,"2190":1,"2191":1,"2192":1,"2193":1},"2":{"707":1},"3":{"0":5,"627":2,"628":1,"640":1,"704":1,"707":6,"708":1,"709":3,"766":1,"767":1,"768":1,"1000":1,"1041":1,"1043":1,"1046":1,"1212":1,"1213":1,"1260":1,"1269":2,"1270":5,"1323":16,"1367":1,"1438":2,"1456":1,"1457":1,"1459":1,"1460":1,"1465":1,"1474":1,"1475":1,"1482":1,"1492":2,"1496":1,"1524":1,"1526":5,"1531":1,"1577":2,"1582":1,"1589":1,"1590":1,"1591":4,"1596":1,"1664":3,"1779":1,"1947":2,"1948":3,"1950":3,"2034":1,"2037":1,"2165":1,"2180":2,"2181":1,"2183":1,"2192":1,"2203":1,"2206":1,"2232":1}}],["cropped",{"3":{"1480":1}}],["cropping",{"3":{"1480":1}}],["crops",{"3":{"1323":1,"2126":1}}],["crop",{"3":{"0":1,"440":1,"1212":1,"1286":1,"1323":1,"1415":1,"1496":1,"2128":1}}],["crossrepocomparison",{"3":{"1522":1,"1528":1,"1573":1,"1579":1,"1587":1,"1593":1}}],["crosslayerviolation",{"3":{"1436":2}}],["crossoriginrejection",{"3":{"1324":2}}],["crosstenantwritedetail",{"3":{"1311":1}}],["crosstenantwritetitle",{"3":{"1311":1}}],["crosstenantwriteexception",{"2":{"107":1,"109":1,"698":2,"1276":1,"1851":1},"3":{"0":1,"107":1,"109":2,"698":2,"1199":5,"1203":1,"1207":2,"1237":1,"1276":2,"1286":6,"1311":5,"1851":1}}],["crossservicespeakerlinktests",{"2":{"1535":1},"3":{"1199":1,"1207":2,"1438":1,"1535":1,"1611":1}}],["crossservicesmoketests",{"3":{"1199":1,"1207":2}}],["crossserviceuserregisteredtests",{"2":{"1535":1},"3":{"1199":1,"1207":2,"1438":1,"1535":1,"1611":1}}],["crossservicetestbase",{"3":{"1199":6,"1207":2,"1436":2}}],["crossservicecollection",{"3":{"1199":2,"1207":2}}],["crossservicedatasource",{"2":{"1429":1},"3":{"1199":4,"1207":1,"1429":1,"1436":2,"1488":1}}],["crossservice",{"2":{"1207":1,"1437":1,"1486":1,"1487":1,"1490":2,"1526":1,"1534":1,"1591":1,"1615":1},"3":{"914":3,"1199":13,"1203":1,"1206":1,"1207":53,"1436":11,"1437":2,"1438":3,"1467":1,"1486":1,"1487":1,"1488":1,"1490":2,"1496":1,"1526":3,"1534":1,"1591":3,"1611":3,"1615":1}}],["crossservicefixture",{"2":{"914":1},"3":{"914":3,"1199":8,"1207":2,"1436":4,"1437":2,"1488":2}}],["crossservicefixturebasetests",{"3":{"1199":1,"1207":3,"1436":1,"1438":1,"1487":1}}],["crossservicefixturebase",{"2":{"914":1,"1429":1,"1671":1},"3":{"640":1,"914":4,"916":1,"1066":1,"1199":5,"1207":3,"1212":1,"1428":1,"1429":7,"1436":21,"1438":2,"1488":2,"1496":1,"1671":1}}],["crosssourcespecificationtests",{"3":{"1199":1,"1207":4,"1496":1}}],["crosssourcespecification",{"2":{"168":1,"545":1,"549":1,"1239":1,"1500":1,"1577":1,"1662":1,"1859":2,"1861":1,"1862":1},"3":{"168":2,"545":2,"547":1,"549":1,"1199":4,"1203":1,"1207":2,"1212":1,"1239":11,"1247":9,"1353":2,"1359":11,"1436":2,"1438":1,"1496":3,"1500":1,"1577":4,"1662":1,"1859":2,"1861":1,"1862":1}}],["crossevent",{"3":{"1359":2}}],["crossentitynavigationfinder",{"3":{"1199":2,"1207":1,"1428":1,"1431":1,"1436":4}}],["crossed",{"3":{"255":1,"1323":1,"1396":1,"1415":1,"1436":1,"1467":1,"1973":1,"2010":1}}],["crosses",{"0":{"1225":1,"1858":1},"3":{"0":2,"109":2,"249":1,"265":1,"396":1,"551":1,"645":1,"656":1,"657":1,"658":2,"696":1,"786":1,"789":1,"930":1,"1018":1,"1212":1,"1237":2,"1243":1,"1259":2,"1300":2,"1307":1,"1309":1,"1311":3,"1324":2,"1332":1,"1350":4,"1353":1,"1357":1,"1359":4,"1379":1,"1380":3,"1395":2,"1396":9,"1400":1,"1402":2,"1415":2,"1416":2,"1417":2,"1427":1,"1436":1,"1438":1,"1634":1,"1638":2,"1840":1,"1862":1,"1887":1,"1892":1,"1916":1,"1919":1,"1922":1,"1927":1,"1944":1,"1953":1,"2073":1,"2126":1,"2155":1,"2230":1}}],["crossdatasourcedegradeconventiontests",{"2":{"164":1},"3":{"164":1,"1199":1,"1207":7,"1286":1,"1438":1}}],["crossdatasourcedegradeconvention",{"2":{"46":1,"47":1,"166":1,"1281":1,"1310":1,"1473":1,"1482":1,"1577":1,"1849":1,"1853":1,"1858":1,"1862":1,"1866":1},"3":{"46":1,"47":1,"166":1,"1198":1,"1199":2,"1203":1,"1207":2,"1247":1,"1281":3,"1286":30,"1310":4,"1396":1,"1436":1,"1473":1,"1482":1,"1577":2,"1849":1,"1853":1,"1858":1,"1862":1,"1866":1}}],["crossings",{"3":{"1324":1}}],["crossing",{"0":{"1349":1,"1413":1,"1946":1},"3":{"0":2,"255":1,"390":1,"427":1,"826":1,"1293":1,"1323":2,"1324":1,"1339":1,"1350":3,"1359":3,"1396":1,"1402":1,"1416":1,"1436":2,"1631":1,"1922":1,"2073":1}}],["cross",{"0":{"1346":1,"1362":1,"1400":1,"1402":1,"1405":1,"1460":1,"1469":1,"1494":1,"1528":1,"1559":1,"1579":1,"1593":1,"1751":1,"1753":1,"1772":1,"1774":1,"1859":1,"2190":1,"2208":1},"1":{"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"771":1,"772":1,"773":1,"774":1,"775":1,"776":1,"777":1,"778":1,"993":1,"994":1,"995":1,"996":1,"997":1,"998":1,"999":1,"1000":1,"1416":1,"1711":1,"1712":1,"1713":1,"1714":1,"1715":1,"1716":1,"1893":1,"1894":1,"1895":1,"1896":1,"1897":1,"1898":1,"1899":1},"2":{"1188":1},"3":{"0":28,"8":1,"10":3,"28":1,"31":1,"47":2,"49":1,"50":1,"52":1,"54":1,"57":1,"59":2,"61":3,"62":3,"63":1,"64":2,"68":1,"77":1,"81":1,"91":1,"97":1,"99":1,"105":2,"116":2,"117":1,"119":1,"122":2,"135":1,"136":1,"150":2,"151":1,"152":1,"157":2,"159":1,"162":1,"166":3,"168":2,"169":2,"171":1,"207":1,"214":2,"215":1,"216":1,"217":1,"245":2,"253":1,"255":1,"264":1,"265":3,"266":1,"273":1,"313":1,"331":1,"336":1,"343":1,"381":1,"386":2,"387":1,"391":1,"396":1,"398":1,"399":1,"400":1,"405":1,"446":1,"459":1,"470":1,"474":1,"506":2,"507":1,"509":1,"517":1,"521":2,"524":2,"528":1,"531":1,"535":1,"536":1,"541":1,"545":1,"547":1,"549":3,"554":1,"578":1,"583":2,"584":3,"585":1,"587":1,"607":1,"611":1,"618":1,"619":2,"624":2,"625":2,"626":11,"627":1,"628":4,"629":2,"640":5,"642":1,"659":1,"661":1,"665":1,"667":1,"692":1,"698":1,"699":1,"717":1,"731":1,"733":1,"747":1,"756":2,"764":1,"771":1,"774":4,"776":1,"777":1,"781":1,"782":1,"799":4,"801":1,"802":1,"809":2,"810":1,"826":1,"834":1,"861":1,"895":1,"896":1,"897":1,"900":1,"906":1,"907":1,"914":5,"915":2,"930":1,"931":1,"950":1,"964":1,"980":1,"987":1,"990":1,"992":1,"993":1,"996":1,"1011":1,"1018":1,"1022":1,"1024":1,"1026":1,"1027":1,"1028":1,"1030":1,"1043":1,"1049":1,"1050":1,"1053":1,"1061":1,"1066":2,"1067":1,"1068":1,"1069":1,"1070":1,"1075":3,"1083":1,"1086":1,"1104":1,"1108":1,"1140":1,"1147":1,"1150":1,"1183":1,"1184":1,"1185":1,"1187":1,"1188":1,"1190":1,"1191":2,"1192":10,"1193":2,"1200":3,"1201":3,"1202":6,"1203":6,"1210":2,"1212":20,"1213":1,"1216":3,"1231":1,"1232":2,"1237":3,"1239":3,"1243":1,"1244":2,"1245":2,"1247":11,"1252":1,"1257":1,"1258":1,"1259":15,"1260":1,"1261":2,"1265":1,"1267":1,"1270":13,"1271":3,"1273":1,"1276":1,"1278":1,"1281":3,"1286":38,"1287":1,"1288":1,"1298":1,"1300":16,"1301":6,"1308":2,"1309":21,"1310":15,"1311":23,"1312":6,"1313":2,"1314":1,"1316":2,"1320":1,"1323":19,"1324":36,"1326":4,"1328":3,"1338":1,"1339":21,"1340":4,"1341":2,"1342":1,"1343":1,"1345":3,"1349":1,"1350":37,"1352":1,"1353":1,"1354":2,"1355":4,"1359":80,"1363":2,"1367":1,"1369":4,"1375":1,"1378":1,"1379":1,"1380":16,"1381":1,"1387":1,"1391":1,"1395":29,"1396":72,"1398":1,"1401":1,"1402":34,"1403":1,"1404":3,"1405":2,"1406":1,"1410":2,"1413":2,"1414":1,"1415":39,"1416":11,"1417":27,"1427":3,"1428":2,"1429":1,"1430":1,"1431":2,"1433":2,"1436":154,"1437":4,"1438":26,"1439":1,"1440":1,"1441":2,"1442":1,"1443":1,"1444":1,"1446":2,"1449":4,"1452":3,"1453":1,"1454":1,"1455":12,"1456":4,"1459":1,"1460":15,"1461":1,"1462":1,"1463":4,"1465":2,"1467":5,"1471":1,"1473":2,"1474":1,"1475":4,"1476":2,"1482":4,"1485":2,"1486":4,"1487":2,"1488":5,"1489":4,"1490":16,"1492":13,"1493":1,"1496":32,"1497":1,"1498":4,"1499":1,"1500":3,"1502":1,"1507":1,"1509":1,"1510":2,"1522":1,"1523":1,"1524":4,"1525":1,"1526":23,"1528":1,"1530":1,"1531":6,"1532":1,"1533":2,"1534":11,"1535":5,"1536":2,"1542":1,"1545":1,"1547":1,"1554":2,"1556":1,"1565":1,"1570":2,"1571":1,"1572":2,"1573":1,"1574":1,"1576":1,"1577":15,"1579":1,"1585":1,"1586":1,"1587":1,"1591":19,"1594":1,"1595":1,"1596":1,"1597":1,"1599":4,"1600":4,"1602":1,"1610":1,"1611":6,"1612":2,"1617":1,"1618":3,"1627":1,"1630":2,"1631":2,"1634":3,"1635":4,"1638":9,"1639":6,"1641":1,"1651":1,"1653":1,"1654":1,"1656":4,"1660":1,"1661":1,"1662":4,"1663":3,"1664":5,"1665":2,"1667":1,"1668":1,"1670":1,"1671":1,"1674":1,"1675":1,"1682":1,"1699":1,"1711":1,"1722":1,"1729":1,"1732":1,"1744":1,"1748":1,"1749":1,"1751":1,"1752":1,"1764":1,"1765":5,"1769":2,"1775":1,"1779":1,"1780":1,"1783":1,"1786":1,"1790":1,"1792":3,"1793":1,"1796":2,"1810":1,"1818":2,"1819":1,"1820":1,"1823":1,"1825":1,"1827":3,"1833":1,"1834":1,"1845":1,"1849":4,"1851":1,"1852":1,"1853":3,"1856":1,"1858":1,"1860":2,"1861":2,"1862":3,"1863":1,"1865":3,"1866":2,"1867":2,"1868":2,"1876":1,"1879":1,"1882":1,"1884":1,"1885":1,"1886":1,"1892":1,"1893":1,"1896":1,"1897":1,"1899":1,"1911":1,"1914":1,"1916":1,"1919":1,"1921":1,"1923":1,"1937":2,"1941":1,"1946":1,"1950":1,"1968":1,"1969":3,"1974":1,"1975":1,"1988":1,"1999":1,"2008":1,"2009":1,"2016":1,"2020":1,"2022":1,"2027":3,"2029":1,"2035":1,"2053":2,"2056":1,"2067":1,"2070":1,"2074":1,"2082":1,"2083":2,"2086":3,"2092":1,"2094":1,"2096":1,"2098":1,"2107":1,"2113":2,"2134":1,"2139":3,"2146":2,"2148":1,"2149":1,"2150":2,"2151":1,"2152":1,"2156":1,"2160":1,"2162":1,"2168":1,"2169":1,"2185":1,"2194":1,"2202":1,"2208":1,"2211":1,"2213":1,"2218":1,"2219":1,"2220":2,"2227":1,"2228":1,"2230":5,"2232":10,"2243":1}}],["cref",{"3":{"1416":2,"1496":1,"1526":1}}],["creep",{"3":{"698":1,"2048":1}}],["creds",{"3":{"1526":2}}],["credible",{"3":{"1144":1,"1904":1,"2043":1}}],["credibilityexperience",{"3":{"1369":1}}],["credibilityexperiencescore",{"3":{"1350":1,"1359":1,"1369":1}}],["credibility",{"3":{"1018":1,"1019":1,"1020":1,"1350":1,"1359":2,"1366":2}}],["credit",{"3":{"1490":1}}],["crediting",{"3":{"1286":1}}],["credits",{"3":{"777":1,"1591":2,"1805":1,"1910":1}}],["credited",{"3":{"428":1,"703":1,"1910":1}}],["credentialroutes",{"2":{"180":1},"3":{"180":1}}],["credentials",{"0":{"1405":1},"3":{"0":2,"313":1,"349":1,"351":1,"362":1,"432":1,"433":1,"434":2,"436":1,"498":1,"507":1,"527":1,"598":2,"601":2,"643":1,"665":1,"774":3,"775":3,"776":1,"905":1,"926":1,"945":2,"947":1,"950":1,"972":1,"1284":1,"1286":2,"1288":1,"1300":16,"1309":2,"1311":8,"1312":1,"1323":6,"1324":12,"1336":2,"1339":2,"1396":3,"1406":2,"1410":1,"1412":1,"1415":10,"1417":23,"1429":1,"1433":1,"1436":6,"1441":1,"1443":1,"1454":2,"1455":1,"1459":2,"1464":1,"1465":1,"1467":3,"1469":1,"1472":4,"1475":1,"1481":1,"1482":1,"1488":3,"1490":1,"1526":1,"1554":1,"1577":1,"1582":1,"1589":1,"1596":2,"1639":1,"1641":8,"1648":1,"1667":1,"1669":1,"1671":1,"1673":1,"1682":1,"1693":1,"1764":2,"1769":1,"1777":1,"1896":1,"1898":1,"1901":1,"1936":1,"1940":1,"1981":1,"2063":1,"2067":1,"2088":1,"2122":1,"2224":1}}],["credentialed",{"3":{"0":1,"432":1,"436":1,"1187":1,"1339":2,"1416":1,"1417":12,"1898":1}}],["credential",{"0":{"1407":1},"3":{"0":8,"173":1,"174":1,"176":1,"177":1,"179":1,"180":2,"189":1,"212":1,"217":1,"279":1,"280":1,"281":2,"284":4,"286":1,"309":2,"313":2,"314":3,"348":1,"349":1,"350":1,"352":1,"353":2,"355":1,"358":1,"362":1,"403":1,"435":1,"458":1,"498":1,"499":2,"526":1,"528":1,"529":1,"530":2,"532":1,"572":1,"597":1,"598":1,"599":2,"600":1,"602":2,"605":1,"612":1,"632":1,"634":1,"640":1,"641":1,"642":2,"643":3,"667":1,"670":1,"684":1,"688":1,"690":6,"691":1,"692":1,"718":2,"766":1,"768":1,"792":1,"853":1,"855":1,"869":1,"871":1,"872":2,"874":1,"904":1,"906":2,"908":1,"938":1,"945":3,"946":1,"947":1,"948":4,"950":3,"1017":2,"1018":1,"1020":3,"1022":1,"1057":1,"1058":1,"1059":1,"1063":1,"1118":1,"1183":1,"1212":1,"1241":1,"1264":1,"1270":1,"1283":1,"1286":4,"1289":1,"1290":1,"1291":2,"1292":2,"1293":1,"1294":1,"1300":48,"1311":2,"1312":1,"1322":1,"1323":12,"1324":10,"1326":1,"1335":1,"1339":14,"1359":1,"1366":1,"1368":1,"1369":1,"1395":1,"1396":89,"1403":2,"1404":1,"1405":2,"1406":2,"1407":3,"1409":2,"1415":22,"1417":8,"1427":1,"1436":22,"1438":9,"1441":1,"1444":1,"1445":1,"1446":1,"1447":1,"1455":8,"1457":2,"1458":1,"1460":1,"1461":1,"1462":2,"1465":5,"1466":1,"1467":14,"1468":2,"1472":2,"1474":1,"1475":1,"1477":2,"1481":2,"1492":2,"1577":1,"1595":1,"1596":1,"1631":3,"1641":4,"1650":1,"1661":1,"1670":1,"1672":1,"1703":1,"1732":2,"1765":1,"1898":2,"1899":1,"1902":3,"1905":1,"1967":1,"1971":1,"1973":1,"1978":3,"1979":3,"1980":3,"1982":1,"1998":2,"1999":2,"2000":1,"2001":4,"2002":2,"2055":1,"2066":1,"2117":1,"2141":1,"2153":1,"2166":1,"2173":1}}],["credentialpathprefixes",{"2":{"0":1,"217":1,"1339":1,"2149":1},"3":{"0":1,"217":1,"1339":6,"2149":1}}],["cream",{"1":{"2050":1,"2051":1,"2052":1,"2053":1,"2054":1,"2055":1,"2056":1,"2057":1,"2058":1,"2059":1,"2060":1},"3":{"2050":2,"2060":1,"2210":1}}],["creada",{"3":{"265":1}}],["creado",{"3":{"265":2}}],["creator",{"3":{"1362":1,"1630":1}}],["creatable",{"3":{"1311":2}}],["creational",{"3":{"1526":1,"1539":1}}],["creations",{"3":{"27":1,"1436":1}}],["creation",{"3":{"17":1,"351":1,"352":1,"524":1,"698":3,"782":1,"784":2,"790":2,"792":1,"794":1,"906":1,"988":1,"1174":1,"1175":2,"1213":1,"1229":1,"1234":1,"1249":1,"1254":1,"1259":2,"1271":1,"1278":1,"1286":9,"1300":3,"1309":3,"1311":4,"1339":1,"1350":7,"1357":1,"1359":9,"1364":1,"1369":1,"1380":1,"1395":12,"1396":4,"1402":2,"1415":6,"1417":4,"1429":1,"1436":1,"1467":1,"1472":3,"1481":1,"1490":1,"1496":2,"1630":1,"1631":5,"1632":2,"1634":1,"1635":1,"1639":4,"1640":1,"1651":1,"1685":1,"1686":1,"1719":1,"1727":3,"1728":1,"1729":1,"1750":1,"1751":1,"1765":1,"1767":1,"1770":1,"1773":1,"1775":1,"1841":1,"1978":1,"1979":2,"2166":1}}],["creating",{"3":{"0":1,"7":1,"291":1,"632":1,"711":1,"715":1,"781":1,"1270":1,"1281":1,"1286":4,"1300":1,"1309":3,"1311":3,"1323":1,"1324":1,"1350":3,"1359":10,"1380":1,"1396":1,"1402":1,"1417":2,"1436":5,"1467":1,"1472":1,"1474":1,"1490":2,"1629":1,"1631":2,"1632":1,"1639":3,"1664":1,"1684":1,"1722":1,"1729":1,"1749":1,"1988":1,"1999":1}}],["create→",{"3":{"1577":1}}],["create→result",{"3":{"1526":1}}],["createwindow",{"3":{"1416":3,"1417":1}}],["createmodel",{"3":{"1496":2}}],["createmodule",{"3":{"1436":1}}],["createmauiapp",{"3":{"1416":15,"1417":2}}],["createmigrationprooftable",{"2":{"564":1,"1319":1},"3":{"564":2,"1199":3,"1203":1,"1207":2,"1319":3,"1323":5}}],["createorderhandler",{"3":{"1686":1}}],["createorreactivate",{"3":{"1396":5}}],["createorupdateinstallationasync",{"3":{"1323":1}}],["createroomasync",{"3":{"1395":2}}],["createrequest",{"3":{"1497":1}}],["createrequestclientasync",{"2":{"881":1},"3":{"881":2,"1324":1,"1395":1}}],["createresult",{"3":{"1395":4}}],["createresetpasswordcommand",{"3":{"1311":1,"1415":2}}],["createreadonly",{"3":{"1286":7}}],["createrefreshusermissingerror",{"2":{"497":1,"499":1},"3":{"497":1,"499":1,"1300":1}}],["createx",{"3":{"1359":1}}],["createxhandler",{"2":{"1354":1},"3":{"1354":1,"1359":1}}],["createnewcategory",{"3":{"1359":1}}],["createnewanswerasync",{"3":{"1350":1,"1359":2}}],["createbatchasync",{"2":{"1380":1},"3":{"1380":8}}],["createbuilder",{"3":{"1339":1,"1436":1}}],["createbookmarkasync",{"3":{"1396":2}}],["createbookmarkhandlertests",{"3":{"1199":1,"1207":3}}],["createbookmarkhandler",{"3":{"1199":2,"1203":1,"1207":2,"1286":3,"1350":1,"1359":3,"1380":1,"1396":16,"1436":1}}],["createbookmarkrequestvalidatortests",{"3":{"1199":1,"1207":2}}],["createbookmarkrequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1396":8}}],["createbookmarkrequest",{"3":{"1199":12,"1203":1,"1207":2,"1396":12}}],["createbootstraploggerfactory",{"2":{"401":1,"1333":1},"3":{"401":2,"1311":1,"1333":1,"1339":2}}],["createbounded",{"2":{"1100":1},"3":{"1100":1,"1396":1}}],["createifnotexists",{"3":{"1323":1}}],["createinheritedasync",{"3":{"1436":2}}],["createinventoryitemhandler",{"3":{"897":2}}],["createinstance",{"2":{"583":1,"585":1,"1315":1},"3":{"583":1,"585":1,"1229":1,"1237":1,"1247":1,"1286":4,"1300":2,"1315":1,"1323":1}}],["createindex",{"2":{"564":1},"3":{"564":1}}],["createloggerconfiguration",{"2":{"1333":1},"3":{"1333":1,"1339":2}}],["createlogger",{"3":{"1311":1,"1339":2,"1417":1}}],["createlinkedtimeout",{"2":{"1422":1},"3":{"1422":1,"1427":1}}],["createlinkedtokensource",{"2":{"121":1}}],["createlink",{"2":{"1357":1},"3":{"1343":1,"1350":3,"1357":1,"1359":2}}],["createlimitedpartition",{"3":{"1311":9,"2000":1}}],["createlivepollhandlertests",{"3":{"1199":1,"1207":3}}],["createlivepollhandler",{"3":{"1199":2,"1203":1,"1207":2,"1350":7,"1399":2,"1402":11,"1496":1}}],["createlivepollcommandvalidatortests",{"3":{"1199":1,"1207":2}}],["createlivepollcommandvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1402":6}}],["createlivepollcommand",{"3":{"1199":8,"1203":1,"1207":2,"1402":9}}],["createlivepollrequestvalidatortests",{"3":{"1199":1,"1207":2}}],["createlivepollrequestvalidator",{"3":{"1199":3,"1203":1,"1207":2,"1402":8}}],["createlivepollrequest",{"3":{"1199":14,"1203":1,"1207":2,"1396":2,"1402":17}}],["createhost",{"3":{"1436":2,"1488":1}}],["createhostasync",{"3":{"1300":1}}],["createhandler",{"3":{"1311":3,"1324":1,"1359":1,"1380":1,"1396":1}}],["createfile",{"3":{"1343":1,"1350":3,"1359":2}}],["createforwardedheadersoptions",{"2":{"1338":1},"3":{"1338":1,"1339":3}}],["createforgotpasswordcommand",{"3":{"1311":1,"1415":2}}],["createfactory",{"3":{"1286":2,"1436":2,"1488":1}}],["createfailure",{"3":{"1270":24,"2136":1}}],["createfetchcts",{"2":{"559":1},"3":{"556":1,"559":1,"881":1,"1324":3}}],["createquestionasync",{"3":{"1395":1}}],["createquestioncommand",{"3":{"1359":1}}],["createquestionhandlertests",{"3":{"1199":1,"1207":2,"1359":2}}],["createquestionhandler",{"2":{"1639":1},"3":{"1199":2,"1203":1,"1207":2,"1270":2,"1352":1,"1359":23,"1395":2,"1639":1}}],["createquery",{"3":{"725":3,"1311":3,"1415":2}}],["createproducthandlertests",{"3":{"1685":1}}],["createproducthandler",{"3":{"1685":1}}],["createproviderchatclient",{"2":{"1091":1,"1421":1,"2172":1},"3":{"1091":1,"1421":1,"1427":2,"2172":1}}],["createpage",{"3":{"1496":1}}],["createpartnerasync",{"3":{"1395":2}}],["createpartnerhandlertests",{"3":{"1199":1,"1207":2,"1359":4,"1496":1}}],["createpartnerhandler",{"3":{"1199":2,"1203":1,"1207":2,"1350":2,"1352":3,"1359":18}}],["createpostgresql",{"2":{"909":1,"1034":1},"3":{"905":1,"909":1,"1034":1,"1286":2}}],["createthingasync",{"3":{"1436":3}}],["createticketcommandvalidator",{"3":{"1199":1,"1207":1,"1436":6}}],["createticketcommand",{"3":{"1199":5,"1207":1,"1436":10}}],["createtickethandler",{"3":{"782":1,"1199":1,"1207":1,"1436":5}}],["createtenantscope",{"2":{"703":1},"3":{"698":1,"703":1,"1259":5,"1286":10,"1311":1}}],["createtable",{"2":{"564":1},"3":{"564":1,"1323":1}}],["createversion7",{"3":{"690":1,"1396":2}}],["createcategoryasync",{"3":{"1395":2}}],["createcouponcommand",{"2":{"2096":1},"3":{"2096":1}}],["createcore",{"3":{"1350":7}}],["createcoreasync",{"3":{"0":1,"926":1,"1265":1,"1270":3,"1359":15}}],["createcontainers",{"3":{"1436":1}}],["createcontext",{"3":{"1270":3}}],["createconferencecategorycommand",{"3":{"1359":1}}],["createconferencecategoryhandlertests",{"3":{"1199":1,"1207":2,"1359":2,"1436":1}}],["createconferencecategoryhandler",{"3":{"1199":2,"1203":1,"1207":2,"1270":2,"1352":1,"1359":23}}],["createconverter",{"2":{"1223":1,"1237":1},"3":{"1223":1,"1229":2,"1237":4,"1300":3}}],["createchangepasswordcommand",{"2":{"1406":1},"3":{"1311":2,"1406":1,"1415":2}}],["createchangepreferencescommand",{"2":{"1406":1},"3":{"1300":1,"1311":1,"1406":1,"1415":2}}],["createchained",{"2":{"827":1,"1124":1},"3":{"827":1,"1124":1,"1324":1,"1339":1}}],["createcheckoutsessionhandler",{"3":{"1765":1}}],["createcheckoutsessioncommand",{"2":{"1264":1},"3":{"1264":2}}],["createcheckoutsessioncommandvalidator",{"2":{"674":1},"3":{"674":2,"1591":1}}],["createcheckoutsession",{"3":{"674":1,"1264":1,"1765":1}}],["createclientwithtoken",{"3":{"881":1,"1324":4}}],["createclient",{"3":{"572":1,"1309":2,"1429":1,"1436":7,"1488":2,"1611":1}}],["createaccountlink",{"3":{"1436":1}}],["createaccesstokenforsession",{"2":{"905":1},"3":{"905":1,"1300":6}}],["createaccesstoken",{"2":{"907":1,"2197":1},"3":{"0":1,"905":1,"907":1,"1059":1,"1289":2,"1290":1,"1300":6,"1406":1,"1415":1,"2197":1}}],["createactivityasync",{"3":{"1395":2}}],["createactivityhandlertests",{"3":{"1199":1,"1207":2,"1359":2,"1438":1}}],["createactivityhandler",{"3":{"1199":3,"1203":1,"1207":2,"1270":2,"1352":2,"1359":15}}],["createauthenticatedclientasync",{"2":{"881":1},"3":{"881":1,"1324":6,"1395":6,"1396":3,"1415":1}}],["createasyncscope",{"3":{"1259":2,"1359":4,"1402":1}}],["createasync",{"2":{"318":1,"324":1,"913":1,"1067":1,"1069":1},"3":{"318":1,"324":1,"913":1,"1067":1,"1069":1,"1311":6,"1359":2,"1380":29,"1396":8,"1402":2,"1490":1,"1995":1}}],["createunsafe",{"3":{"1237":1}}],["createunderclaimasync",{"2":{"524":1,"1102":1},"3":{"0":1,"524":2,"1100":2,"1102":1,"1402":4}}],["createusingazureservicebus",{"2":{"640":1},"3":{"640":1}}],["createuser",{"2":{"314":1},"3":{"314":1,"1286":2,"1289":1,"1300":6,"1406":1,"1415":3}}],["createsinglekeyring",{"3":{"1286":1}}],["createsessionpollasync",{"3":{"1402":1}}],["createsessionasync",{"3":{"1395":3}}],["createsessionrequest",{"2":{"1830":1},"3":{"1271":1,"1830":1}}],["createsessioncommand",{"2":{"1830":1},"3":{"1271":1,"1359":1,"1830":1}}],["createsessionhandlertests",{"3":{"1199":1,"1207":2,"1359":2}}],["createsessionhandler",{"3":{"1199":2,"1203":1,"1207":2,"1286":3,"1352":8,"1359":23,"1395":3,"1436":2}}],["createsponsorasync",{"3":{"1395":3}}],["createsponsorhandlertests",{"3":{"1199":1,"1207":2,"1359":2,"1438":1}}],["createsponsorhandler",{"3":{"1199":2,"1203":1,"1207":2,"1270":2,"1350":1,"1352":1,"1359":13}}],["createspeakerasync",{"3":{"1395":3}}],["createspeakercommand",{"3":{"1359":1}}],["createspeakerhandlertests",{"3":{"1199":1,"1207":2,"1359":2}}],["createspeakerhandler",{"3":{"1199":2,"1203":1,"1207":2,"1270":2,"1352":1,"1359":20}}],["createsqlite",{"2":{"909":1},"3":{"905":1,"909":1,"1286":2}}],["createsqlserver",{"2":{"909":1},"3":{"905":1,"909":1,"1286":2,"1436":1}}],["creates",{"0":{"1314":1},"3":{"25":1,"27":1,"42":1,"157":1,"195":1,"197":1,"200":1,"225":1,"230":1,"350":1,"352":1,"524":1,"572":1,"599":1,"610":1,"665":1,"698":1,"705":1,"792":1,"881":1,"926":1,"1034":1,"1212":1,"1223":1,"1259":1,"1270":2,"1286":10,"1300":8,"1307":1,"1309":2,"1311":7,"1323":4,"1324":19,"1329":1,"1339":7,"1352":2,"1359":16,"1373":1,"1374":2,"1389":1,"1395":10,"1396":4,"1402":7,"1415":1,"1416":4,"1417":9,"1427":2,"1436":12,"1438":3,"1441":2,"1467":5,"1472":3,"1475":1,"1488":3,"1491":1,"1630":1,"1632":3,"1635":1,"1638":1,"1639":1,"1640":1,"1641":1,"1650":1,"1653":2,"1671":1,"1684":2,"1688":1,"1692":1,"1700":1,"1722":1,"1726":1,"1730":1,"1747":4,"1748":1,"1749":3,"1750":1,"1751":2,"1752":1,"1757":1,"1764":1,"1765":2,"1767":1,"1769":2,"1770":1,"1849":1,"1906":1,"1909":1,"1933":2,"1977":1,"1978":1,"2048":1,"2055":1,"2113":1,"2158":1,"2166":1}}],["createeventasync",{"3":{"1395":2}}],["createeventcommand",{"3":{"1359":1}}],["createeventhandlertests",{"3":{"1199":1,"1207":2,"1359":1,"1436":1}}],["createeventhandler",{"3":{"1199":2,"1203":1,"1207":2,"1270":2,"1352":1,"1359":10}}],["createexecutionstrategy",{"2":{"1273":1},"3":{"1273":1,"1286":2}}],["createexternal",{"2":{"354":1,"1977":1},"3":{"0":1,"350":2,"354":1,"1405":1,"1415":4,"1977":1}}],["createentityasync",{"2":{"1956":1},"3":{"1270":1,"1311":2,"1359":12,"1956":1}}],["createentityhandlerbasetests",{"3":{"1199":1,"1207":1,"1270":1}}],["createentityhandlerbase",{"2":{"922":1,"1265":1,"1269":1,"1666":1},"3":{"922":1,"926":1,"1199":13,"1203":1,"1207":2,"1260":1,"1265":4,"1269":2,"1270":8,"1311":7,"1350":1,"1352":1,"1359":74,"1666":1}}],["createentityhandler",{"2":{"922":1,"1265":1},"3":{"0":1,"922":2,"1199":3,"1203":1,"1207":2,"1260":1,"1265":3,"1270":7,"1311":1,"1323":2,"1577":1}}],["createdroom",{"3":{"1395":1}}],["createdactivity",{"3":{"1395":1}}],["createdat",{"3":{"905":3,"1286":1,"1300":3,"1436":2}}],["createdatabasesasync",{"3":{"1436":1}}],["createdataction",{"3":{"157":1}}],["createdataprotectionkeyvaultkey",{"2":{"602":1,"604":1,"668":1},"3":{"0":1,"602":1,"604":1,"668":1,"1467":1}}],["createdatroute",{"3":{"157":1,"330":1,"1311":2,"1380":10,"1988":1}}],["createdsession",{"3":{"1395":2}}],["createdcount",{"3":{"1359":1}}],["createdevent",{"3":{"1395":1}}],["createdelegate",{"3":{"1286":2,"1300":1}}],["createdefault",{"2":{"459":1,"464":1,"466":2,"698":1,"747":1,"749":1},"3":{"459":1,"464":1,"466":2,"698":1,"747":1,"749":1,"774":1,"1311":6,"1436":5}}],["createdbcontext",{"2":{"1278":1},"3":{"1278":1,"1286":7}}],["createdby",{"2":{"1635":1},"3":{"470":1,"545":1,"715":1,"1237":4,"1239":1,"1247":6,"1286":2,"1355":1,"1359":11,"1369":4,"1380":2,"1438":1,"1630":1,"1631":6,"1632":4,"1635":4,"1638":1,"1639":1,"1640":2,"1815":1}}],["createdtime",{"2":{"757":1},"3":{"757":1,"1455":1,"1467":1}}],["createdon",{"2":{"1140":1},"3":{"39":2,"539":1,"714":1,"1140":1,"1212":1,"1231":2,"1237":3,"1274":2,"1286":4,"1309":6,"1323":2,"1359":4,"1369":1,"1396":15,"1402":4,"1415":13,"1436":3,"1600":2,"1630":1,"1631":2,"1640":5,"1664":1,"1810":1,"2090":1,"2167":1,"2186":1}}],["created",{"2":{"781":1,"1683":1},"3":{"0":2,"157":1,"178":1,"265":2,"290":3,"296":2,"350":2,"353":1,"408":1,"440":1,"539":1,"599":2,"600":1,"610":1,"633":1,"640":1,"665":1,"668":1,"670":1,"690":1,"693":1,"707":1,"716":1,"721":1,"781":1,"782":1,"784":1,"789":1,"790":6,"791":2,"881":1,"905":1,"988":1,"991":1,"1033":1,"1034":1,"1096":1,"1116":1,"1212":1,"1229":2,"1247":3,"1249":1,"1259":4,"1270":3,"1274":1,"1275":1,"1278":3,"1280":1,"1281":1,"1286":19,"1290":1,"1300":5,"1301":1,"1309":10,"1311":9,"1316":1,"1323":6,"1324":14,"1339":7,"1342":2,"1344":1,"1350":30,"1352":1,"1359":37,"1364":1,"1369":5,"1371":1,"1380":4,"1395":25,"1396":22,"1399":1,"1402":14,"1415":6,"1416":4,"1417":4,"1425":2,"1427":1,"1429":1,"1436":11,"1438":3,"1453":1,"1455":2,"1465":2,"1467":6,"1472":1,"1474":2,"1475":1,"1479":1,"1490":1,"1496":4,"1538":1,"1545":1,"1577":1,"1596":1,"1614":1,"1630":5,"1631":5,"1632":2,"1633":2,"1634":8,"1635":1,"1636":1,"1637":1,"1638":1,"1639":5,"1641":1,"1646":1,"1652":2,"1653":2,"1683":1,"1684":1,"1689":1,"1690":1,"1719":2,"1727":1,"1728":1,"1731":1,"1747":2,"1748":2,"1764":2,"1765":2,"1767":2,"1875":1,"1895":1,"1906":1,"1908":1,"1933":1,"1954":1,"2074":1,"2126":1,"2166":2,"2167":2,"2177":1,"2232":2}}],["create",{"0":{"1649":1,"1688":1,"2102":1},"1":{"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":1},"2":{"220":1,"231":1,"354":1,"601":1,"661":1,"698":1,"700":1,"703":1,"741":1,"747":1,"749":1,"801":2,"965":1,"968":1,"1051":1,"1067":1,"1124":1,"1135":1,"1167":1,"1169":1,"1170":1,"1398":1,"1472":1,"1811":1,"1812":1,"1954":1,"2048":1,"2090":1,"2093":1,"2104":1},"3":{"0":8,"5":1,"73":1,"200":2,"220":1,"231":1,"290":1,"318":1,"328":1,"329":1,"330":3,"334":1,"348":1,"350":4,"354":1,"527":1,"564":1,"601":1,"609":1,"641":1,"642":1,"657":15,"659":1,"660":1,"661":1,"690":4,"691":1,"693":1,"698":1,"700":1,"703":1,"732":1,"734":2,"741":1,"747":1,"749":2,"782":1,"799":1,"801":2,"803":1,"839":1,"882":1,"888":2,"891":1,"897":4,"905":1,"907":1,"919":1,"920":1,"921":1,"922":4,"924":1,"925":2,"926":1,"965":1,"968":1,"1033":1,"1050":1,"1051":1,"1067":1,"1085":1,"1091":1,"1124":1,"1135":1,"1167":1,"1168":7,"1169":1,"1170":2,"1184":1,"1203":38,"1207":86,"1212":4,"1229":1,"1234":2,"1237":22,"1259":1,"1260":3,"1265":4,"1270":41,"1271":10,"1286":42,"1290":1,"1300":14,"1301":8,"1304":1,"1305":1,"1309":15,"1311":45,"1312":1,"1323":9,"1324":24,"1327":1,"1339":5,"1342":2,"1343":2,"1349":2,"1350":81,"1351":1,"1352":11,"1353":4,"1354":3,"1357":1,"1358":2,"1359":384,"1369":8,"1371":2,"1373":1,"1374":1,"1375":3,"1378":1,"1380":40,"1384":3,"1392":3,"1395":146,"1396":74,"1398":3,"1399":1,"1402":61,"1405":1,"1406":1,"1412":1,"1415":22,"1417":1,"1420":1,"1421":1,"1427":9,"1429":1,"1436":37,"1438":8,"1441":2,"1467":6,"1472":6,"1474":1,"1476":1,"1477":2,"1481":2,"1482":1,"1487":2,"1488":1,"1489":5,"1490":2,"1496":4,"1526":7,"1534":2,"1535":2,"1591":2,"1596":2,"1600":1,"1608":1,"1627":3,"1630":3,"1631":4,"1632":9,"1638":3,"1639":9,"1640":2,"1641":2,"1646":1,"1651":4,"1652":1,"1653":2,"1654":1,"1656":1,"1664":1,"1666":1,"1671":1,"1685":13,"1686":12,"1687":2,"1689":1,"1697":1,"1698":1,"1719":1,"1720":1,"1725":1,"1727":2,"1728":2,"1742":3,"1746":4,"1747":3,"1748":2,"1749":2,"1750":8,"1753":1,"1754":1,"1765":3,"1768":4,"1769":9,"1774":1,"1810":4,"1811":2,"1812":1,"1908":1,"1922":1,"1933":1,"1953":2,"1954":1,"1956":2,"1977":2,"1979":1,"1986":1,"1987":1,"1988":2,"1991":1,"2045":1,"2048":1,"2090":1,"2093":1,"2104":1,"2128":1,"2163":1,"2232":2}}],["cobertura",{"2":{"1455":1},"3":{"1455":2,"1492":1,"1591":1}}],["coffee",{"3":{"1340":1,"1342":1,"1350":3,"1359":1,"1364":1,"1369":2,"1392":1,"1395":1}}],["covariant",{"3":{"1269":1,"1270":1,"1311":2,"1323":1}}],["coverlet",{"3":{"1213":1,"1611":2,"1617":1}}],["covering",{"3":{"138":1,"160":1,"268":1,"494":1,"609":1,"618":1,"635":1,"790":1,"980":1,"996":1,"1083":1,"1247":1,"1280":1,"1286":9,"1309":1,"1311":1,"1312":1,"1323":1,"1324":6,"1339":1,"1350":3,"1358":1,"1359":12,"1380":1,"1395":2,"1396":4,"1416":2,"1417":1,"1433":1,"1436":13,"1437":2,"1438":2,"1449":1,"1453":1,"1455":1,"1456":1,"1467":1,"1489":1,"1491":1,"1496":2,"1526":2,"1577":1,"1591":1,"1654":1,"1671":1,"1684":1,"1686":1,"1748":1,"1923":1,"2034":1,"2037":1,"2038":1,"2043":1,"2079":1,"2158":1,"2190":1,"2232":1,"2240":1}}],["cover",{"0":{"1608":1,"1742":1,"1786":1},"1":{"1998":1,"1999":1,"2000":1,"2001":1,"2002":1},"3":{"23":1,"52":1,"72":1,"118":1,"135":2,"157":1,"170":1,"265":1,"333":1,"388":1,"398":1,"401":1,"461":1,"466":1,"528":1,"530":1,"531":1,"563":1,"578":1,"582":1,"618":1,"651":1,"682":1,"690":1,"700":1,"718":1,"719":1,"751":1,"768":1,"789":1,"810":1,"881":1,"954":1,"966":1,"1018":1,"1026":1,"1075":1,"1119":1,"1187":1,"1219":1,"1235":1,"1242":1,"1247":1,"1259":1,"1265":1,"1286":5,"1300":2,"1301":2,"1309":1,"1311":1,"1320":1,"1322":1,"1324":5,"1339":2,"1359":3,"1380":2,"1396":5,"1417":1,"1425":1,"1428":1,"1436":19,"1438":8,"1445":1,"1456":1,"1459":1,"1465":1,"1483":1,"1487":1,"1488":1,"1534":1,"1551":1,"1577":1,"1582":2,"1583":1,"1597":1,"1632":1,"1646":1,"1666":1,"1667":1,"1669":1,"1776":1,"1998":2,"1999":1,"2001":1,"2002":1,"2006":2,"2025":1,"2034":1,"2048":1,"2059":1,"2076":1,"2079":1,"2104":1,"2156":1,"2208":1,"2236":1}}],["covered",{"0":{"2115":1},"3":{"0":1,"100":1,"164":1,"177":1,"186":1,"215":1,"236":1,"249":1,"265":1,"295":1,"358":1,"419":1,"601":1,"611":1,"620":1,"632":1,"657":1,"702":1,"718":1,"743":1,"768":1,"790":1,"832":1,"889":1,"907":1,"998":1,"1011":1,"1017":1,"1050":2,"1091":1,"1104":1,"1124":1,"1212":1,"1214":1,"1237":7,"1247":4,"1259":1,"1263":1,"1270":4,"1271":6,"1284":1,"1286":33,"1290":1,"1300":9,"1301":3,"1309":6,"1310":1,"1311":10,"1312":1,"1317":1,"1323":18,"1324":33,"1332":1,"1339":38,"1350":2,"1359":92,"1380":3,"1395":7,"1396":43,"1402":2,"1415":10,"1417":8,"1436":29,"1438":6,"1441":1,"1443":1,"1444":3,"1449":1,"1452":1,"1453":1,"1454":1,"1455":3,"1460":1,"1462":1,"1467":2,"1482":1,"1488":2,"1489":1,"1490":1,"1496":4,"1497":1,"1526":3,"1534":1,"1561":1,"1577":3,"1585":2,"1591":3,"1596":1,"1611":1,"1627":1,"1645":1,"1664":1,"1666":1,"1699":1,"1700":1,"1707":2,"1715":1,"1728":1,"1755":1,"1793":1,"1802":1,"1807":1,"1810":1,"1812":1,"1817":1,"1827":1,"1828":1,"1831":1,"1834":1,"1846":1,"1853":1,"1862":1,"1868":1,"1877":1,"1886":1,"1890":1,"1892":1,"1899":1,"1905":1,"1912":1,"1914":1,"1924":1,"1930":1,"1941":1,"1950":1,"1959":1,"1965":1,"1972":1,"1979":1,"1985":1,"1991":1,"1992":1,"1997":1,"2000":1,"2001":1,"2002":2,"2006":1,"2014":1,"2028":1,"2030":1,"2038":1,"2041":1,"2049":1,"2060":1,"2069":1,"2080":1,"2086":1,"2097":1,"2098":1,"2108":1,"2115":1,"2123":1,"2128":1,"2133":1,"2139":1,"2146":1,"2153":1,"2160":1,"2167":1,"2169":1,"2180":1,"2193":1,"2194":1,"2199":1,"2203":1,"2239":1}}],["covers",{"0":{"141":1},"3":{"0":7,"35":1,"41":1,"130":1,"135":1,"142":1,"160":1,"173":1,"178":1,"179":1,"182":1,"189":1,"226":1,"233":1,"235":1,"241":1,"265":1,"318":2,"328":1,"343":1,"358":1,"359":2,"361":1,"365":1,"369":1,"373":1,"402":1,"418":1,"427":1,"434":1,"440":1,"459":1,"461":1,"482":1,"486":1,"506":1,"518":1,"528":2,"529":1,"535":1,"539":1,"555":1,"572":2,"590":1,"591":1,"607":1,"609":2,"618":1,"620":1,"625":1,"626":2,"648":1,"665":1,"674":1,"675":1,"690":1,"701":1,"762":1,"766":1,"794":1,"802":1,"809":1,"818":1,"832":3,"838":1,"844":1,"861":1,"880":1,"897":1,"926":1,"946":1,"964":4,"1016":1,"1018":1,"1019":1,"1020":1,"1074":1,"1116":3,"1123":1,"1132":1,"1135":1,"1161":1,"1163":1,"1170":1,"1175":1,"1185":1,"1195":1,"1212":1,"1217":1,"1229":3,"1230":1,"1238":1,"1247":6,"1248":1,"1258":1,"1259":4,"1260":1,"1263":1,"1270":5,"1271":1,"1272":1,"1281":1,"1284":1,"1286":21,"1287":1,"1300":12,"1301":2,"1302":2,"1309":3,"1311":26,"1313":1,"1316":1,"1320":1,"1323":10,"1324":35,"1325":1,"1333":1,"1339":8,"1340":1,"1350":3,"1351":2,"1359":23,"1360":1,"1365":1,"1369":4,"1370":1,"1380":1,"1381":1,"1395":10,"1396":56,"1397":1,"1402":10,"1403":1,"1411":1,"1415":17,"1416":3,"1417":8,"1418":1,"1422":1,"1428":1,"1435":1,"1436":98,"1437":1,"1438":65,"1447":1,"1449":1,"1450":1,"1453":1,"1454":1,"1455":5,"1465":1,"1467":8,"1471":1,"1474":1,"1475":1,"1476":2,"1481":1,"1485":1,"1487":1,"1489":1,"1490":2,"1492":3,"1496":1,"1524":1,"1526":12,"1532":1,"1533":1,"1535":1,"1577":4,"1583":1,"1585":2,"1591":5,"1596":1,"1612":1,"1626":1,"1627":1,"1632":1,"1639":4,"1645":1,"1653":1,"1664":1,"1670":1,"1685":1,"1686":2,"1764":1,"1810":1,"1821":1,"1825":1,"1843":1,"1855":1,"1891":1,"1910":1,"1916":1,"1923":1,"1929":1,"2001":2,"2002":1,"2034":1,"2091":1,"2098":1,"2118":1,"2127":1,"2141":1,"2142":1,"2146":1,"2158":1,"2167":1,"2168":1,"2174":1,"2183":2,"2189":1}}],["coverage",{"0":{"138":1,"1496":1,"1499":1,"1643":1,"2058":1},"1":{"1495":1,"1496":1,"1497":1,"1498":1,"1499":1,"1500":1,"1501":1},"2":{"1455":1,"1461":1},"3":{"0":7,"67":1,"71":1,"74":1,"115":1,"122":1,"127":2,"130":1,"132":1,"138":2,"265":5,"267":3,"269":1,"305":1,"312":1,"361":1,"365":1,"373":1,"547":1,"551":1,"566":1,"572":1,"574":1,"593":1,"607":4,"608":1,"609":1,"619":1,"620":1,"717":1,"729":1,"782":1,"837":1,"840":1,"863":2,"874":1,"891":1,"892":2,"914":2,"918":1,"982":1,"990":1,"1020":1,"1037":1,"1066":1,"1076":1,"1085":1,"1192":2,"1194":1,"1212":2,"1213":1,"1216":2,"1237":1,"1270":1,"1271":1,"1281":1,"1286":3,"1300":9,"1311":15,"1339":1,"1350":2,"1369":2,"1395":2,"1396":1,"1415":1,"1417":1,"1434":1,"1436":63,"1438":4,"1453":4,"1455":20,"1456":2,"1459":2,"1460":1,"1461":2,"1463":1,"1467":2,"1469":1,"1486":5,"1487":1,"1488":2,"1489":2,"1490":2,"1492":10,"1493":1,"1495":1,"1496":13,"1497":1,"1500":1,"1525":1,"1526":3,"1534":3,"1535":1,"1551":1,"1565":2,"1576":2,"1577":8,"1581":1,"1582":1,"1586":1,"1591":6,"1595":1,"1596":1,"1597":1,"1600":1,"1611":3,"1642":1,"1643":1,"1661":1,"1671":1,"1673":1,"1799":1,"1891":1,"1964":1,"2034":1,"2048":1,"2050":2,"2058":4,"2059":2,"2060":2,"2085":2,"2158":1,"2220":2}}],["coercing",{"3":{"1237":1}}],["coerced",{"3":{"1237":1,"1286":1,"1300":1,"1311":1}}],["coerces",{"3":{"1236":1,"1237":1,"1259":2}}],["coexisting",{"3":{"2079":1}}],["coexisted",{"3":{"1453":1}}],["coexists",{"3":{"1402":1}}],["coexist",{"3":{"0":1,"59":1,"111":1,"293":1,"448":2,"1052":1,"1229":1,"1300":1,"1304":1,"1323":1,"1359":1,"1396":1,"1416":1,"1436":1,"1545":1,"1806":1,"1816":1,"2129":1,"2131":2,"2133":1,"2139":1}}],["coined",{"3":{"1415":2}}],["coining",{"3":{"1409":1,"1415":1}}],["coincides",{"3":{"1380":1}}],["coincide",{"3":{"1324":1}}],["coincidentally",{"3":{"1300":1,"1311":1}}],["coin",{"3":{"1126":1,"1907":1,"2029":1}}],["cohesion",{"3":{"1191":1,"1200":1,"1314":1,"1323":1,"1359":3,"1396":2,"1415":1,"1436":12,"1497":1,"1517":1,"1525":1,"1526":1,"1534":1,"1535":1,"1571":1,"1577":4,"1582":1,"1586":1,"1591":1,"1671":1,"1932":1,"1941":1,"2048":1,"2094":1}}],["cohesive",{"3":{"1003":1,"1201":1,"1212":1,"1300":2,"1323":1,"1352":1,"1395":1,"1396":1,"1416":1,"1436":5,"1496":1,"1526":2,"1534":1,"1542":2,"1555":1,"1572":1,"1591":1,"1941":1,"2230":1}}],["coherence",{"3":{"302":1,"896":1,"1311":6,"1324":1,"1923":1,"2138":1,"2156":1}}],["coherently",{"3":{"1359":1,"1417":1}}],["coherent",{"0":{"2010":1},"3":{"0":1,"98":1,"369":1,"398":1,"1270":2,"1301":1,"1324":7,"1339":1,"1359":1,"1381":1,"1395":1,"1415":1,"1416":2,"1417":6,"1436":2,"1454":1,"1557":1,"1571":1,"1916":1,"1924":1,"2025":1,"2112":1,"2232":1}}],["codified",{"3":{"1247":1,"1339":1}}],["coding",{"3":{"243":1,"254":1,"1242":1,"1247":1,"1300":1,"1311":2,"1324":1,"1341":1,"1350":2,"1359":2,"1380":1,"1395":2,"1396":1,"1415":3,"1417":1,"1436":4,"1475":1,"1570":1,"1916":1}}],["codeowners",{"3":{"1673":1}}],["codebehinds",{"3":{"1436":3}}],["codebases",{"0":{"1503":1},"3":{"1211":1,"1212":1,"1300":1,"1359":1,"1500":1,"1782":1,"1878":1,"2039":1,"2042":1,"2055":1,"2170":1}}],["codebase",{"0":{"1212":1,"2230":1},"3":{"131":1,"151":1,"469":1,"725":1,"800":1,"801":1,"804":1,"805":1,"1052":1,"1124":1,"1140":1,"1190":1,"1210":1,"1212":1,"1214":3,"1216":1,"1217":1,"1218":1,"1221":1,"1229":7,"1231":1,"1236":1,"1237":1,"1247":3,"1248":1,"1259":1,"1270":6,"1271":3,"1272":1,"1281":1,"1286":7,"1300":13,"1301":3,"1302":1,"1309":2,"1310":2,"1311":2,"1312":1,"1323":4,"1324":5,"1329":1,"1339":8,"1340":1,"1350":2,"1351":1,"1359":18,"1363":1,"1368":1,"1369":6,"1380":7,"1395":3,"1396":7,"1402":4,"1410":1,"1415":2,"1416":4,"1417":4,"1427":1,"1428":1,"1431":2,"1436":14,"1485":1,"1489":1,"1491":1,"1492":1,"1536":1,"1552":1,"1661":1,"1674":1,"1786":1,"1794":1,"1805":1,"1828":1,"1830":1,"1831":1,"1848":1,"1854":1,"1927":1,"1960":1,"1971":1,"2016":1,"2049":1,"2050":1,"2075":1,"2087":1,"2099":1,"2139":1,"2146":1,"2230":1,"2233":1}}],["codereusedacrossbranchesofonetype",{"2":{"1436":1},"3":{"1436":2}}],["codepath",{"3":{"1395":1}}],["codecoverage",{"2":{"1611":1},"3":{"1611":1}}],["codec",{"3":{"1228":1,"1312":2,"1395":3,"1438":1}}],["code=true",{"3":{"1453":1}}],["code=false",{"3":{"1453":1}}],["code=",{"3":{"423":1,"1416":1,"1417":1,"1975":1}}],["codesignprovision",{"3":{"1481":1}}],["codesignentitlements",{"2":{"1481":1},"3":{"1481":1}}],["codes",{"3":{"0":4,"201":1,"265":1,"266":1,"341":1,"343":1,"419":2,"538":1,"576":1,"609":1,"759":1,"790":1,"794":1,"1028":1,"1058":1,"1059":1,"1212":1,"1217":1,"1229":2,"1235":1,"1237":3,"1259":1,"1263":1,"1270":2,"1271":9,"1286":2,"1293":6,"1300":24,"1309":1,"1311":10,"1312":1,"1323":9,"1324":6,"1337":1,"1339":2,"1344":1,"1350":4,"1359":31,"1375":1,"1380":4,"1395":3,"1396":16,"1402":1,"1404":1,"1415":6,"1436":28,"1438":1,"1472":1,"1489":1,"1496":1,"1546":1,"1577":2,"1582":2,"1583":1,"1591":1,"1596":1,"1639":1,"1641":6,"1666":1,"1683":1,"1685":1,"1686":3,"1727":1,"1748":1,"1753":1,"1925":1,"1930":1,"1977":1,"2076":1,"2118":1,"2158":1,"2164":1,"2166":1,"2167":1,"2198":3,"2202":1,"2232":1}}],["coded",{"1":{"787":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"794":1,"795":1},"3":{"0":1,"32":1,"88":1,"109":2,"117":1,"173":1,"265":3,"447":1,"787":1,"790":1,"794":1,"827":1,"861":1,"1270":1,"1271":2,"1286":3,"1300":6,"1301":6,"1309":2,"1311":6,"1312":3,"1323":2,"1324":9,"1339":4,"1350":2,"1359":21,"1369":2,"1395":2,"1396":3,"1402":3,"1427":1,"1436":9,"1438":1,"1465":1,"1480":1,"1488":1,"1489":2,"1526":2,"1547":1,"1564":3,"1577":2,"1591":2,"1596":1,"1597":2,"1653":3,"1654":1,"1666":1,"1702":1,"1821":1,"1886":1,"1927":1,"2083":1,"2130":1,"2169":1,"2203":1}}],["code",{"0":{"720":1,"1214":1,"1552":1,"1613":1,"1791":1,"1842":1,"1989":1,"2100":1},"1":{"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"613":1,"614":1,"1462":1,"1463":1,"1464":1,"1465":1,"1466":1,"1467":1,"1468":1,"1469":1,"1470":1,"2134":1,"2135":1,"2136":1,"2137":1,"2138":1,"2139":1},"2":{"107":1,"264":1,"266":1,"269":1,"276":1,"301":1,"562":1,"564":1,"567":1,"604":1,"626":1,"660":1,"1459":1,"1976":1,"2086":1},"3":{"0":32,"1":1,"6":1,"21":1,"24":1,"27":2,"32":1,"51":1,"52":1,"53":1,"57":2,"59":2,"60":1,"63":2,"74":1,"93":1,"107":2,"109":11,"110":1,"111":1,"118":1,"122":1,"125":1,"128":2,"135":4,"136":3,"145":1,"149":1,"151":1,"157":3,"160":1,"165":1,"167":2,"171":2,"177":1,"180":2,"186":1,"188":1,"190":1,"217":1,"220":1,"224":1,"225":1,"226":1,"230":1,"242":1,"243":3,"244":1,"248":1,"249":2,"258":2,"264":1,"265":6,"266":2,"267":1,"268":1,"269":1,"276":1,"285":1,"290":1,"292":1,"299":1,"300":1,"301":2,"305":1,"306":2,"310":3,"316":1,"317":1,"322":1,"325":1,"326":1,"328":1,"335":1,"341":2,"342":1,"343":2,"350":8,"351":3,"352":2,"353":1,"354":1,"359":2,"360":1,"365":1,"370":1,"373":1,"381":1,"383":2,"391":1,"397":1,"401":1,"409":1,"412":1,"415":1,"418":1,"419":1,"420":5,"421":2,"422":1,"423":2,"424":1,"425":1,"426":1,"428":2,"433":1,"434":1,"435":1,"448":1,"451":1,"452":1,"459":2,"465":1,"472":1,"481":1,"482":3,"483":2,"486":1,"488":1,"489":2,"490":5,"491":2,"492":2,"493":3,"494":1,"495":1,"497":3,"502":2,"506":1,"507":1,"508":1,"511":1,"517":1,"518":1,"530":1,"536":1,"537":1,"540":1,"543":2,"545":4,"546":2,"549":1,"550":1,"555":1,"557":1,"560":1,"562":1,"563":1,"564":2,"565":1,"566":1,"567":1,"573":1,"582":2,"583":2,"584":2,"585":1,"586":1,"590":1,"591":1,"592":2,"593":1,"599":2,"604":2,"606":1,"609":1,"617":2,"618":1,"626":5,"633":2,"635":1,"638":2,"639":1,"640":5,"642":2,"649":1,"657":8,"658":1,"659":1,"660":2,"673":1,"674":4,"676":1,"681":2,"682":1,"683":2,"684":1,"689":2,"691":3,"692":2,"698":1,"700":2,"708":2,"713":1,"716":1,"725":1,"732":1,"733":2,"735":1,"736":1,"741":4,"742":1,"744":1,"749":2,"751":1,"757":4,"758":1,"759":1,"765":1,"766":2,"789":3,"790":4,"791":1,"794":1,"799":1,"800":1,"811":1,"812":1,"819":1,"825":1,"827":2,"829":1,"831":1,"832":2,"833":2,"836":1,"837":2,"839":2,"840":3,"845":1,"846":1,"856":1,"873":2,"876":1,"877":2,"880":1,"882":1,"884":1,"897":2,"905":2,"909":1,"914":1,"916":1,"932":1,"933":1,"934":1,"939":2,"940":1,"946":2,"948":2,"953":1,"963":1,"964":4,"971":1,"973":1,"976":2,"979":1,"980":1,"988":3,"990":2,"999":1,"1003":1,"1004":5,"1005":2,"1014":1,"1018":3,"1019":6,"1021":1,"1029":1,"1033":1,"1040":1,"1043":1,"1045":1,"1051":1,"1058":2,"1059":4,"1060":3,"1066":1,"1068":1,"1074":1,"1075":1,"1082":1,"1091":3,"1092":2,"1093":1,"1095":1,"1100":1,"1108":1,"1124":1,"1126":1,"1132":1,"1133":1,"1134":1,"1135":1,"1140":1,"1150":1,"1161":4,"1163":1,"1186":1,"1190":5,"1192":1,"1193":2,"1212":25,"1214":2,"1216":3,"1217":1,"1219":2,"1220":1,"1221":2,"1225":1,"1229":21,"1231":1,"1234":3,"1235":1,"1237":45,"1241":1,"1247":19,"1248":1,"1257":2,"1258":1,"1259":23,"1263":4,"1265":2,"1270":30,"1271":53,"1275":1,"1282":1,"1286":82,"1289":3,"1293":7,"1296":1,"1300":165,"1301":24,"1302":1,"1303":1,"1305":2,"1308":1,"1309":26,"1310":10,"1311":126,"1312":26,"1313":2,"1314":1,"1315":1,"1320":1,"1322":4,"1323":97,"1324":93,"1325":3,"1329":1,"1333":1,"1338":2,"1339":36,"1342":2,"1343":1,"1344":3,"1345":1,"1347":4,"1348":1,"1349":1,"1350":41,"1352":2,"1353":5,"1355":2,"1358":3,"1359":306,"1364":2,"1365":7,"1369":19,"1370":2,"1371":2,"1375":1,"1377":2,"1379":1,"1380":38,"1382":3,"1384":2,"1385":2,"1388":2,"1389":1,"1394":1,"1395":192,"1396":169,"1397":1,"1399":2,"1402":70,"1403":1,"1406":1,"1407":1,"1409":1,"1412":1,"1413":1,"1414":1,"1415":87,"1416":13,"1417":64,"1424":1,"1427":7,"1429":1,"1431":7,"1436":223,"1437":1,"1438":7,"1441":3,"1442":1,"1443":1,"1445":2,"1446":2,"1447":1,"1449":2,"1450":1,"1451":1,"1452":2,"1453":10,"1455":30,"1459":20,"1460":2,"1461":3,"1462":2,"1463":4,"1467":21,"1474":3,"1475":4,"1476":1,"1477":1,"1481":1,"1482":1,"1486":3,"1487":1,"1488":2,"1489":9,"1491":2,"1492":17,"1496":34,"1497":1,"1499":2,"1500":1,"1509":3,"1515":1,"1516":1,"1518":1,"1521":1,"1524":3,"1525":1,"1526":10,"1530":2,"1531":5,"1532":3,"1533":1,"1534":3,"1535":5,"1537":1,"1538":2,"1539":1,"1542":1,"1547":1,"1548":1,"1552":2,"1553":1,"1554":1,"1555":1,"1560":1,"1571":3,"1572":1,"1574":1,"1577":11,"1581":1,"1582":1,"1586":2,"1589":1,"1591":11,"1595":1,"1596":3,"1597":2,"1598":1,"1600":4,"1602":1,"1626":2,"1627":1,"1630":2,"1631":3,"1640":1,"1641":2,"1646":1,"1651":2,"1653":3,"1656":3,"1658":1,"1661":2,"1662":1,"1663":2,"1666":3,"1669":1,"1671":3,"1673":2,"1676":1,"1681":2,"1683":1,"1685":4,"1686":5,"1688":1,"1700":1,"1702":1,"1703":1,"1705":1,"1708":1,"1720":1,"1724":3,"1725":1,"1726":1,"1727":2,"1755":1,"1764":1,"1770":1,"1777":1,"1781":1,"1782":1,"1783":2,"1784":2,"1789":1,"1790":5,"1793":2,"1794":1,"1796":1,"1800":1,"1802":1,"1805":5,"1806":1,"1810":2,"1811":1,"1815":4,"1817":2,"1819":2,"1822":1,"1826":1,"1827":1,"1831":3,"1842":3,"1847":2,"1849":3,"1850":1,"1853":4,"1858":1,"1864":1,"1865":1,"1866":1,"1868":2,"1871":1,"1875":1,"1877":1,"1878":2,"1881":1,"1884":1,"1888":1,"1893":1,"1896":1,"1898":1,"1899":2,"1900":1,"1902":1,"1904":1,"1908":2,"1909":3,"1911":1,"1915":2,"1916":2,"1920":1,"1923":2,"1924":1,"1927":2,"1938":1,"1944":3,"1948":1,"1950":1,"1952":2,"1955":3,"1956":1,"1957":1,"1958":1,"1959":2,"1962":1,"1964":1,"1972":1,"1973":1,"1975":8,"1976":6,"1977":1,"1978":2,"1979":4,"2000":2,"2001":2,"2002":1,"2003":1,"2010":2,"2013":3,"2014":1,"2015":2,"2016":2,"2017":1,"2020":2,"2024":1,"2026":2,"2028":1,"2034":1,"2036":3,"2038":2,"2040":1,"2041":1,"2043":6,"2044":2,"2045":3,"2046":1,"2047":1,"2051":1,"2055":1,"2058":2,"2063":1,"2070":1,"2075":1,"2078":2,"2083":8,"2086":3,"2087":2,"2088":1,"2096":1,"2097":3,"2098":1,"2099":2,"2100":1,"2108":2,"2111":2,"2112":2,"2116":1,"2121":2,"2123":1,"2124":1,"2129":1,"2133":3,"2134":2,"2135":2,"2136":1,"2137":1,"2142":2,"2146":3,"2149":1,"2154":1,"2156":1,"2158":2,"2160":2,"2166":2,"2169":4,"2171":1,"2178":1,"2179":1,"2180":3,"2184":2,"2196":3,"2197":2,"2199":2,"2200":2,"2202":2,"2203":2,"2206":1,"2213":1,"2219":2,"2220":4,"2221":1,"2225":3,"2227":1,"2230":2,"2231":1,"2232":6,"2234":2,"2239":2,"2243":1}}],["codeanalysistreatwarningsaserrors",{"2":{"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"981":1},"3":{"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"981":1}}],["codeanalysis",{"2":{"0":1,"135":1,"137":1,"138":1,"1229":1,"1270":1,"1324":1,"1415":1,"2100":1},"3":{"0":1,"135":2,"137":1,"138":1,"1229":1,"1270":2,"1300":3,"1324":4,"1396":1,"1415":1,"1436":1,"2100":1}}],["coached",{"3":{"2220":1}}],["coalesced",{"3":{"1286":1}}],["coalesces",{"3":{"1100":1,"1286":2,"1359":1,"1436":1}}],["coalesce",{"3":{"518":1,"1300":2,"1323":1,"1324":1,"1380":1,"1396":2,"1415":1}}],["coalescing",{"3":{"0":1,"519":1,"1229":1,"1237":1,"1286":1,"1311":1,"1323":2,"1324":3,"1350":1,"1415":2,"1436":1}}],["coarseness",{"3":{"2002":1}}],["coarselocationonly",{"3":{"1417":2}}],["coarse",{"2":{"426":1},"3":{"177":1,"178":2,"185":1,"283":1,"426":1,"572":1,"574":1,"872":1,"1177":1,"1300":1,"1350":2,"1396":1,"1402":1,"1415":1,"1417":7,"1431":1,"1436":3,"1537":1,"1591":1,"1596":1,"1597":1,"1876":1,"2001":3}}],["coarser",{"3":{"60":1,"784":1,"1311":1,"1417":1}}],["copilot",{"3":{"2213":1,"2219":1,"2220":2,"2224":1,"2225":1}}],["copied",{"3":{"0":1,"24":2,"27":1,"110":1,"216":1,"359":1,"450":1,"638":1,"640":1,"658":2,"698":1,"715":1,"750":1,"791":1,"836":1,"955":1,"972":3,"974":1,"1018":2,"1067":1,"1107":1,"1167":1,"1212":1,"1255":1,"1259":4,"1271":1,"1278":1,"1286":4,"1300":1,"1309":1,"1311":1,"1322":1,"1324":4,"1339":5,"1350":4,"1359":5,"1369":1,"1395":3,"1398":1,"1402":2,"1415":3,"1416":2,"1417":4,"1427":1,"1430":1,"1435":2,"1436":2,"1438":1,"1445":1,"1455":1,"1467":1,"1473":1,"1528":1,"1579":1,"1591":1,"1630":1,"1656":1,"1781":1,"1813":1,"1817":1,"1828":1,"1991":1,"2011":1,"2043":2,"2088":1,"2129":1,"2132":1,"2142":1,"2148":1}}],["copies",{"3":{"0":7,"94":2,"95":1,"145":1,"219":1,"325":1,"418":1,"497":1,"511":3,"600":1,"624":1,"633":1,"707":1,"708":1,"721":1,"729":1,"831":2,"832":2,"872":2,"880":1,"882":1,"884":1,"935":1,"954":1,"962":1,"1024":1,"1025":1,"1030":1,"1053":1,"1091":1,"1142":1,"1152":1,"1168":1,"1219":1,"1229":1,"1233":1,"1237":3,"1247":2,"1259":4,"1270":3,"1271":2,"1286":11,"1300":4,"1301":2,"1310":1,"1311":4,"1312":2,"1322":1,"1323":11,"1324":9,"1336":1,"1339":8,"1359":16,"1380":2,"1384":1,"1395":26,"1396":15,"1402":1,"1415":13,"1417":7,"1425":1,"1426":1,"1427":4,"1436":6,"1438":2,"1443":1,"1445":6,"1459":1,"1460":1,"1471":1,"1475":3,"1483":1,"1496":8,"1686":1,"1894":1,"1923":1,"1948":1,"2019":1,"2042":3,"2070":2,"2124":1,"2148":1,"2176":1,"2232":1}}],["cope",{"3":{"1359":3}}],["copes",{"3":{"1324":1,"1359":1}}],["copytext",{"3":{"1417":3}}],["copywifiasync",{"3":{"1395":1}}],["copyonly",{"2":{"635":1,"1729":1},"3":{"635":1,"1729":1}}],["copying",{"3":{"132":1,"698":1,"758":1,"906":1,"1170":1,"1229":2,"1251":1,"1286":3,"1300":4,"1311":1,"1323":2,"1324":1,"1339":2,"1350":2,"1359":5,"1395":1,"1396":1,"1399":1,"1402":1,"1413":1,"1415":2,"1435":1,"1436":3,"1445":2,"1476":1,"1577":1,"1781":1,"2032":1,"2190":1,"2203":1}}],["copy",{"1":{"1828":1,"1829":1,"1830":1,"1831":1,"1832":1,"1833":1,"1834":1},"2":{"563":1,"759":1,"868":1},"3":{"0":10,"122":1,"123":1,"215":1,"219":1,"220":1,"246":1,"290":1,"296":1,"318":1,"320":1,"325":1,"359":1,"365":1,"374":1,"390":1,"451":1,"460":1,"511":1,"556":1,"563":1,"566":1,"598":1,"601":2,"610":1,"611":1,"632":3,"633":2,"634":1,"640":1,"650":1,"674":2,"690":1,"707":1,"724":2,"725":1,"733":4,"735":2,"750":1,"757":1,"759":1,"782":1,"784":1,"790":1,"792":1,"813":1,"821":1,"826":1,"827":3,"829":2,"832":2,"834":1,"847":1,"854":1,"855":1,"856":1,"868":3,"869":1,"872":2,"926":1,"973":2,"1019":1,"1058":1,"1065":1,"1066":1,"1068":2,"1091":2,"1107":1,"1122":1,"1124":1,"1126":1,"1167":2,"1184":2,"1185":1,"1212":2,"1229":4,"1231":1,"1236":1,"1237":3,"1239":1,"1247":4,"1254":1,"1259":3,"1267":1,"1270":3,"1271":7,"1272":1,"1274":1,"1275":1,"1277":1,"1286":19,"1300":20,"1301":11,"1302":1,"1309":4,"1311":15,"1323":13,"1324":25,"1329":1,"1337":1,"1338":1,"1339":11,"1350":5,"1355":1,"1356":1,"1359":30,"1373":1,"1380":3,"1384":1,"1393":1,"1395":29,"1396":35,"1402":4,"1415":16,"1416":2,"1417":24,"1426":2,"1427":2,"1431":1,"1436":19,"1438":3,"1442":1,"1443":2,"1445":3,"1453":2,"1455":4,"1459":2,"1460":4,"1461":1,"1467":2,"1468":2,"1473":2,"1474":5,"1475":8,"1476":1,"1478":2,"1482":2,"1484":1,"1488":1,"1489":1,"1492":3,"1496":4,"1501":1,"1526":1,"1555":1,"1627":1,"1631":1,"1641":1,"1649":2,"1650":1,"1653":1,"1654":1,"1658":1,"1664":1,"1672":1,"1673":1,"1684":1,"1685":1,"1703":1,"1705":1,"1708":1,"1710":3,"1724":1,"1728":1,"1730":1,"1731":1,"1751":1,"1761":1,"1764":1,"1765":1,"1769":1,"1779":1,"1782":1,"1810":1,"1813":1,"1818":1,"1821":1,"1827":1,"1828":2,"1833":2,"1834":3,"1839":1,"1851":1,"1877":1,"1893":2,"1896":1,"1920":1,"1922":1,"1923":1,"1924":1,"1983":1,"2000":1,"2006":1,"2010":1,"2014":1,"2024":1,"2027":1,"2034":3,"2056":1,"2060":1,"2070":1,"2072":1,"2080":1,"2097":1,"2101":1,"2111":1,"2116":1,"2117":2,"2119":1,"2134":1,"2135":1,"2139":1,"2143":1,"2147":2,"2148":1,"2150":1,"2152":1,"2153":1,"2156":1,"2166":1,"2176":2,"2206":1,"2232":2,"2236":1}}],["co",{"3":{"0":1,"60":1,"265":1,"266":1,"1004":1,"1116":1,"1237":1,"1247":2,"1270":2,"1271":1,"1286":1,"1309":3,"1311":1,"1323":1,"1324":4,"1331":1,"1339":2,"1342":1,"1344":1,"1350":2,"1352":1,"1357":1,"1359":3,"1370":1,"1374":1,"1377":1,"1378":2,"1380":1,"1394":1,"1395":7,"1396":4,"1402":2,"1405":1,"1415":1,"1416":4,"1431":1,"1436":12,"1441":1,"1577":3,"1591":1,"1648":1,"1651":1,"1653":1,"1655":1,"1856":1,"1865":1,"1867":1,"2043":1,"2083":1,"2113":1}}],["cooperation",{"3":{"1286":1}}],["cooperative",{"3":{"1270":1}}],["cooperating",{"3":{"352":1,"1323":1,"1334":1,"1761":1,"1815":1,"1849":1,"1935":1,"1978":1}}],["cooperate",{"3":{"1238":1,"1259":1,"1350":1,"1415":1}}],["cooldown",{"3":{"344":1,"1639":2}}],["coordinating",{"3":{"1286":1,"2044":1}}],["coordination",{"3":{"0":1,"170":1,"810":1,"811":1,"1286":2,"1309":1,"1324":2,"1339":1,"1359":1,"1849":1}}],["coordinate",{"3":{"1259":1,"1359":1,"1417":4,"1436":2,"2052":1,"2107":1}}],["coordinates",{"3":{"255":1,"439":1,"809":1,"810":1,"883":1,"1286":5,"1323":2,"1324":1,"1340":1,"1350":1,"1417":8,"1459":1,"1467":1,"1472":1,"1923":1,"2124":2,"2125":1}}],["coordinated",{"3":{"30":1,"1011":1,"1272":1,"1300":1,"1301":1,"1309":1,"1323":1,"1324":2,"1436":2,"1526":1,"1569":1,"1572":1,"1576":1,"1577":1,"1894":1,"2238":1,"2240":1}}],["coordinator",{"3":{"0":3,"808":1,"809":3,"810":7,"811":1,"812":1,"813":1,"814":1,"815":2,"1147":1,"1212":1,"1278":2,"1280":1,"1286":2,"1346":1,"1396":11,"1438":1,"1849":1,"2168":2}}],["cookiename",{"3":{"1436":1}}],["cookieoptions",{"3":{"1300":1}}],["cookietokenreadertests",{"3":{"1199":1,"1207":2,"1300":1}}],["cookietokenreader",{"2":{"1298":1,"1968":1},"3":{"1199":9,"1203":1,"1207":2,"1298":5,"1300":9,"1311":3,"1324":5,"1968":1}}],["cookierequestcultureprovider",{"3":{"265":1,"1417":1}}],["cookiesessionrefreshmiddlewaretests",{"3":{"1199":1,"1207":3,"1300":2}}],["cookiesessionrefreshmiddlewareextensions",{"2":{"1298":1},"3":{"1199":2,"1203":1,"1207":1,"1298":1,"1300":2}}],["cookiesessionrefreshmiddleware",{"2":{"1298":1,"1968":1},"3":{"1199":3,"1203":1,"1207":3,"1208":1,"1298":4,"1300":8,"1582":1,"1968":1}}],["cookiesessionrefreshertests",{"3":{"1199":1,"1207":5,"1300":1}}],["cookiesessionrefresher",{"2":{"207":1,"1298":1,"1968":1},"3":{"207":1,"1183":1,"1184":1,"1185":1,"1199":4,"1203":1,"1207":5,"1287":1,"1298":17,"1300":26,"1311":3,"1582":1,"1968":1}}],["cookies",{"0":{"1298":1,"1968":1},"3":{"0":4,"207":3,"208":1,"209":1,"349":1,"351":1,"355":1,"507":1,"558":1,"664":1,"667":1,"670":1,"1108":1,"1109":1,"1183":1,"1184":5,"1185":1,"1212":2,"1298":2,"1300":31,"1311":1,"1324":35,"1336":2,"1339":4,"1436":2,"1438":3,"1442":1,"1467":1,"1496":1,"1511":1,"1526":1,"1577":1,"1660":1,"1968":4,"1969":2,"1970":1,"1971":1,"1972":2,"1974":1,"2232":2}}],["cookie",{"1":{"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"1966":1,"1967":1,"1968":1,"1969":1,"1970":1,"1971":1,"1972":1,"2081":1,"2082":1,"2083":1,"2084":1,"2085":1,"2086":1},"3":{"0":11,"204":1,"207":6,"208":3,"209":5,"221":1,"265":11,"266":2,"269":2,"272":1,"273":9,"274":1,"277":2,"287":1,"350":4,"351":1,"352":1,"388":1,"458":2,"462":1,"506":2,"507":11,"508":4,"509":1,"510":1,"514":3,"555":2,"556":2,"557":1,"558":1,"560":1,"616":1,"618":1,"664":3,"665":3,"668":1,"774":1,"827":1,"1107":1,"1108":2,"1111":1,"1182":1,"1183":4,"1184":9,"1185":3,"1186":1,"1187":4,"1188":2,"1189":1,"1192":1,"1202":1,"1203":1,"1212":3,"1287":2,"1298":6,"1300":66,"1311":19,"1323":1,"1324":114,"1336":1,"1339":3,"1395":3,"1406":1,"1415":4,"1416":4,"1417":3,"1433":1,"1434":1,"1436":25,"1438":6,"1442":2,"1467":3,"1487":1,"1488":1,"1496":4,"1513":2,"1525":1,"1526":2,"1531":1,"1534":4,"1535":1,"1577":3,"1582":1,"1586":1,"1590":1,"1591":3,"1639":1,"1641":11,"1643":1,"1660":1,"1667":3,"1668":1,"1669":3,"1759":1,"1761":2,"1779":1,"1922":1,"1965":1,"1966":2,"1967":2,"1968":7,"1969":2,"1971":5,"1972":7,"1975":6,"1977":1,"1979":1,"2080":1,"2081":3,"2082":3,"2083":9,"2084":1,"2085":4,"2086":5,"2208":1,"2210":1,"2232":4}}],["cosmetic",{"3":{"202":1,"311":1,"926":1,"1123":1,"1241":1,"1247":1,"1271":1,"1286":3,"1310":1,"1323":1,"1324":1,"1327":1,"1339":1,"1347":1,"1359":3,"1384":1,"1391":1,"1395":2,"1396":2,"1415":1,"1417":1,"1436":2,"1496":1,"1879":1,"1926":1,"2120":1}}],["cosmosindexedentity",{"3":{"1199":3,"1207":1}}],["cosmosintidvaluegeneratortests",{"3":{"1199":1,"1207":2,"1286":2}}],["cosmosintidvaluegenerator",{"2":{"166":1,"1664":1,"1856":1},"3":{"166":2,"1199":3,"1203":1,"1207":2,"1282":2,"1286":14,"1664":1,"1856":1}}],["cosmosdatasourceengine",{"2":{"1280":1,"1286":1},"3":{"1175":2,"1177":1,"1198":1,"1199":2,"1203":1,"1207":2,"1280":5,"1282":2,"1286":18,"1300":1}}],["cosmosdatabasenameof",{"3":{"1286":1}}],["cosmosdatabasename",{"3":{"166":1,"1286":12,"1339":1,"1441":1}}],["cosmosdb",{"2":{"170":1,"889":1,"1174":1,"1856":1,"1857":1},"3":{"166":1,"170":1,"889":1,"1034":1,"1174":1,"1213":1,"1286":12,"1323":1,"1436":1,"1856":1,"1857":1}}],["cosmosdbcontexttests",{"3":{"1199":1,"1207":2,"1286":2,"1438":2}}],["cosmosdbcontext",{"2":{"26":1,"47":1,"200":1,"343":1,"698":1,"701":1,"720":1,"1510":1,"1857":1,"1861":1},"3":{"26":1,"47":1,"166":3,"171":1,"200":2,"343":2,"345":1,"698":1,"701":1,"715":2,"720":1,"988":1,"1042":1,"1198":1,"1199":3,"1203":1,"1207":2,"1212":2,"1272":1,"1273":2,"1274":1,"1286":14,"1339":1,"1510":1,"1664":1,"1849":1,"1857":1,"1861":1}}],["cosmosconnectionstring",{"3":{"166":1,"1286":4,"1441":1}}],["cosmosconfigurationportabilitytests",{"2":{"164":1},"3":{"164":1,"1198":1,"1199":2,"1207":7,"1286":4,"1496":3}}],["cosmos",{"3":{"0":12,"10":3,"26":1,"45":1,"164":1,"166":7,"168":4,"169":1,"170":1,"171":2,"195":1,"200":2,"290":1,"296":1,"343":2,"345":1,"715":1,"717":1,"721":1,"889":1,"890":1,"891":2,"905":1,"931":1,"988":2,"990":2,"1004":1,"1033":2,"1036":1,"1042":1,"1045":1,"1050":1,"1083":2,"1085":1,"1133":1,"1134":1,"1135":1,"1144":1,"1175":3,"1176":1,"1177":2,"1179":1,"1212":9,"1213":2,"1237":1,"1239":1,"1247":6,"1252":1,"1259":4,"1273":1,"1274":1,"1276":1,"1279":3,"1280":2,"1281":5,"1282":4,"1286":97,"1300":1,"1310":1,"1311":4,"1317":1,"1320":1,"1321":1,"1323":4,"1326":1,"1339":2,"1359":1,"1361":1,"1369":2,"1380":1,"1396":2,"1415":1,"1436":5,"1438":3,"1441":4,"1489":1,"1496":1,"1500":3,"1510":1,"1526":2,"1577":1,"1585":2,"1752":1,"1763":1,"1774":1,"1815":1,"1840":1,"1849":1,"1853":1,"1854":4,"1855":1,"1856":3,"1857":1,"1858":5,"1859":3,"1860":4,"1861":5,"1862":1,"1864":1,"1876":1,"2064":1,"2213":1,"2219":2,"2220":1,"2230":1,"2232":1}}],["costcenter",{"3":{"1577":1,"1591":1}}],["costly",{"3":{"1436":1}}],["costtagconventiontests",{"3":{"1199":1,"1207":2,"1436":4,"1467":2,"1525":1,"1526":2,"1535":1,"1591":1}}],["costing",{"3":{"765":1,"856":1,"1300":1,"1323":1,"1324":1,"1396":1,"1438":1}}],["costs",{"0":{"1333":1},"3":{"0":23,"1":1,"24":2,"26":1,"41":1,"92":1,"95":1,"108":1,"111":1,"135":2,"136":1,"160":1,"195":1,"196":1,"233":1,"234":1,"237":2,"255":1,"267":2,"350":1,"360":2,"400":1,"401":1,"402":1,"435":2,"442":1,"448":1,"459":3,"461":1,"483":1,"529":1,"549":1,"551":1,"565":1,"619":1,"628":1,"635":1,"640":1,"659":1,"681":1,"683":1,"690":1,"691":1,"715":1,"726":2,"733":1,"735":1,"747":1,"751":2,"759":1,"767":2,"768":1,"775":1,"791":1,"792":1,"797":2,"827":2,"830":1,"853":1,"856":1,"872":1,"904":1,"906":2,"923":1,"931":1,"932":2,"946":1,"965":2,"982":1,"998":1,"1005":1,"1019":2,"1020":1,"1027":1,"1051":1,"1099":1,"1109":1,"1117":1,"1143":1,"1153":1,"1228":2,"1229":2,"1246":1,"1247":6,"1259":5,"1270":4,"1271":1,"1278":1,"1286":13,"1294":1,"1300":13,"1301":1,"1307":2,"1309":1,"1310":3,"1311":5,"1323":8,"1324":11,"1332":1,"1339":11,"1359":21,"1369":1,"1380":3,"1385":1,"1395":13,"1396":12,"1402":3,"1415":6,"1417":4,"1422":1,"1435":2,"1436":5,"1438":1,"1440":1,"1443":1,"1455":7,"1457":2,"1465":1,"1467":4,"1474":1,"1490":1,"1492":1,"1526":1,"1534":1,"1553":1,"1631":1,"1651":1,"1652":1,"1663":1,"1672":1,"1717":1,"1721":1,"1724":1,"1750":1,"1765":1,"1773":1,"1790":1,"1792":1,"1811":1,"1839":1,"1842":1,"1843":1,"1849":1,"1851":1,"1858":1,"1876":1,"1902":1,"1923":2,"1942":1,"1971":1,"1972":2,"1977":1,"1978":1,"1979":1,"1984":1,"1989":1,"1990":1,"2000":1,"2007":1,"2013":1,"2044":1,"2066":1,"2087":1,"2150":1,"2156":1,"2158":1,"2166":1,"2169":1,"2171":1,"2174":1,"2181":1,"2193":1,"2194":1,"2203":1,"2232":1,"2239":1}}],["cost",{"0":{"1228":1,"1425":1,"1457":1,"1568":1,"1677":1,"1679":1,"2047":1},"1":{"763":1,"764":1,"765":1,"766":1,"767":1,"768":1,"769":1,"770":1,"1676":1,"1677":1,"1678":1,"1679":1,"1680":1},"2":{"1467":1},"3":{"0":14,"1":1,"20":1,"26":1,"48":1,"58":1,"68":1,"86":1,"102":2,"111":1,"125":2,"137":2,"138":1,"139":1,"140":1,"150":1,"151":1,"160":1,"167":1,"168":2,"178":1,"200":1,"216":1,"235":1,"237":1,"245":2,"246":1,"267":2,"274":1,"279":1,"283":1,"284":1,"291":1,"305":1,"312":1,"331":1,"351":1,"353":1,"360":1,"372":1,"395":6,"396":2,"397":5,"398":2,"399":4,"400":1,"402":1,"403":2,"404":3,"405":1,"406":2,"407":1,"408":1,"409":2,"425":1,"426":1,"460":1,"469":1,"471":1,"472":1,"481":1,"511":1,"535":1,"541":1,"549":1,"551":1,"556":1,"566":1,"573":1,"590":1,"592":3,"593":2,"595":4,"601":1,"608":1,"609":1,"614":1,"619":1,"620":1,"625":3,"626":1,"627":2,"628":1,"635":1,"641":1,"650":1,"656":1,"658":1,"676":1,"684":1,"690":1,"691":1,"707":1,"708":2,"716":2,"725":1,"727":1,"732":1,"733":3,"742":1,"756":1,"763":1,"764":3,"765":2,"766":38,"768":11,"769":4,"798":1,"799":2,"800":1,"801":2,"811":1,"812":2,"820":2,"827":2,"828":1,"829":1,"834":1,"848":1,"855":1,"861":1,"862":1,"863":1,"865":2,"871":1,"882":1,"883":1,"891":1,"899":1,"907":1,"915":2,"917":1,"918":1,"926":1,"931":1,"933":1,"940":1,"948":2,"968":1,"971":1,"973":1,"974":1,"979":1,"981":1,"982":1,"989":1,"998":1,"1008":1,"1011":2,"1012":1,"1013":1,"1017":1,"1018":2,"1019":2,"1020":1,"1025":1,"1028":1,"1036":1,"1043":1,"1044":1,"1051":1,"1061":1,"1068":1,"1069":1,"1074":1,"1075":2,"1076":1,"1077":2,"1085":1,"1093":1,"1101":2,"1116":1,"1117":1,"1119":2,"1126":2,"1147":1,"1152":2,"1153":1,"1154":2,"1162":1,"1170":1,"1178":1,"1192":1,"1212":3,"1216":1,"1232":2,"1237":3,"1247":8,"1254":1,"1255":1,"1256":1,"1259":19,"1263":1,"1270":9,"1275":1,"1283":1,"1286":20,"1300":11,"1301":3,"1309":3,"1310":3,"1311":11,"1312":1,"1323":14,"1324":16,"1327":1,"1329":1,"1333":3,"1334":1,"1337":2,"1338":1,"1339":32,"1342":1,"1349":1,"1350":9,"1359":20,"1366":1,"1367":1,"1369":1,"1376":1,"1380":5,"1392":1,"1395":11,"1396":14,"1401":1,"1402":9,"1413":1,"1415":6,"1417":2,"1418":1,"1421":2,"1422":1,"1425":2,"1427":8,"1430":1,"1435":1,"1436":9,"1438":5,"1442":1,"1443":5,"1446":1,"1447":4,"1450":1,"1451":1,"1452":1,"1454":1,"1455":12,"1456":1,"1457":17,"1459":3,"1460":5,"1461":5,"1463":1,"1465":5,"1467":31,"1469":2,"1475":3,"1476":7,"1478":3,"1483":1,"1486":2,"1489":2,"1490":1,"1492":2,"1496":7,"1499":1,"1523":1,"1525":3,"1526":15,"1530":1,"1531":2,"1532":2,"1534":4,"1535":2,"1550":2,"1553":2,"1554":1,"1568":5,"1571":1,"1572":1,"1574":1,"1575":8,"1577":17,"1578":1,"1581":1,"1583":1,"1584":2,"1585":9,"1590":1,"1591":8,"1597":2,"1599":4,"1600":3,"1602":1,"1638":1,"1641":2,"1660":1,"1668":2,"1670":2,"1674":2,"1676":5,"1677":2,"1678":1,"1679":5,"1680":1,"1697":1,"1708":1,"1796":1,"1799":2,"1804":1,"1806":1,"1809":1,"1821":1,"1823":1,"1826":1,"1839":2,"1864":1,"1867":1,"1876":1,"1885":3,"1896":1,"1909":2,"1910":1,"1923":1,"1925":1,"1932":1,"1933":1,"1940":2,"1958":2,"1984":1,"1987":1,"1989":1,"2001":3,"2006":1,"2011":1,"2014":1,"2024":1,"2032":1,"2035":1,"2046":1,"2047":1,"2048":2,"2049":1,"2054":1,"2055":1,"2056":1,"2057":1,"2059":2,"2060":1,"2067":2,"2075":1,"2086":1,"2087":1,"2112":1,"2114":2,"2126":1,"2127":1,"2135":1,"2144":1,"2148":2,"2152":1,"2154":1,"2155":1,"2156":1,"2157":1,"2159":4,"2160":1,"2162":2,"2170":2,"2171":1,"2172":1,"2174":1,"2177":1,"2179":1,"2189":1,"2192":1,"2203":1,"2220":1,"2232":2,"2240":1}}],["col",{"3":{"1175":5,"1526":1}}],["colocating",{"3":{"1350":1}}],["colon",{"3":{"564":1,"1324":2,"1339":2,"1359":1,"1384":1,"1395":1,"1442":1}}],["coloured",{"3":{"1436":1}}],["colour",{"3":{"0":1,"756":1,"905":1,"910":1,"1324":1,"1396":1,"1436":1}}],["colored",{"3":{"2075":1}}],["colors",{"3":{"1324":6,"1385":1,"1395":2,"1416":1,"1480":2,"1577":1,"1582":1,"2075":2}}],["color",{"3":{"0":1,"273":2,"1311":1,"1324":16,"1385":3,"1395":11,"1436":1,"1489":1,"1558":2,"1591":1,"1600":1,"1644":1,"1669":1,"1671":1,"2075":3,"2079":1,"2081":1,"2083":1,"2086":1,"2107":1}}],["colder",{"3":{"1417":3}}],["cold",{"0":{"1334":1},"1":{"232":1,"233":1,"234":1,"235":1,"236":1,"237":1,"238":1,"239":1},"3":{"0":2,"25":1,"31":1,"33":1,"100":1,"232":1,"234":1,"236":4,"239":1,"246":1,"390":1,"413":1,"556":2,"559":1,"717":1,"733":1,"735":1,"762":1,"867":1,"869":1,"875":1,"881":1,"1059":1,"1067":1,"1069":1,"1270":1,"1286":1,"1287":1,"1288":1,"1298":2,"1300":2,"1301":1,"1304":1,"1309":1,"1324":6,"1339":8,"1359":1,"1379":1,"1380":3,"1393":1,"1395":2,"1396":3,"1415":3,"1416":8,"1417":11,"1430":1,"1436":2,"1438":1,"1441":1,"1443":3,"1445":1,"1447":1,"1449":2,"1450":1,"1456":2,"1467":4,"1490":3,"1534":1,"1577":1,"1668":1,"1669":1,"1707":1,"1800":1,"1934":1,"2007":3,"2121":1,"2199":1,"2203":2}}],["colleague",{"3":{"1116":1,"1342":1,"1350":1,"1357":1,"1359":1}}],["collectively",{"3":{"1461":1}}],["collecting",{"3":{"1247":1,"1253":1,"1271":1,"1324":1,"1339":2,"1359":1,"1435":1,"1436":8,"1455":1}}],["collectionincludecache",{"3":{"1286":1}}],["collectiondefinition",{"3":{"640":1,"1339":2,"1436":4,"1438":1,"1488":1}}],["collectionresulttests",{"3":{"1199":1,"1207":2}}],["collectionresult",{"2":{"1217":1,"1227":1,"1228":1,"1805":1},"3":{"549":1,"1199":34,"1203":1,"1207":1,"1217":1,"1227":1,"1228":1,"1229":10,"1311":4,"1324":3,"1371":1,"1380":3,"1382":1,"1395":2,"1805":1,"1988":1}}],["collections",{"2":{"1229":1},"3":{"0":1,"545":1,"551":1,"926":1,"1050":1,"1115":1,"1117":1,"1212":1,"1229":2,"1237":4,"1243":2,"1247":19,"1259":2,"1265":2,"1270":2,"1279":1,"1286":10,"1300":4,"1309":1,"1310":5,"1311":2,"1312":1,"1323":1,"1324":5,"1339":2,"1343":5,"1346":1,"1350":20,"1352":1,"1353":1,"1359":36,"1395":15,"1396":3,"1402":4,"1415":4,"1436":3,"1526":1,"1639":2,"1863":1,"1865":1,"2233":1}}],["collection",{"2":{"1953":1},"3":{"0":3,"10":1,"11":1,"81":1,"122":1,"265":1,"317":1,"318":4,"319":1,"320":1,"321":1,"324":1,"544":1,"545":1,"548":1,"551":1,"572":1,"583":2,"598":1,"651":1,"676":1,"741":1,"743":2,"921":1,"926":2,"1067":2,"1107":1,"1108":1,"1116":1,"1117":1,"1168":2,"1212":1,"1217":1,"1221":2,"1229":6,"1230":1,"1231":4,"1234":1,"1237":14,"1240":1,"1243":2,"1244":2,"1247":6,"1259":1,"1260":1,"1262":1,"1265":4,"1270":9,"1271":1,"1276":2,"1278":1,"1282":1,"1286":26,"1297":1,"1300":10,"1309":9,"1310":17,"1311":25,"1312":1,"1316":1,"1320":2,"1323":13,"1324":13,"1328":3,"1337":1,"1339":22,"1342":2,"1343":2,"1350":61,"1353":1,"1355":1,"1359":128,"1362":1,"1369":10,"1380":10,"1395":18,"1396":30,"1402":15,"1415":13,"1417":6,"1421":1,"1428":1,"1429":2,"1430":3,"1433":1,"1436":74,"1437":1,"1438":6,"1449":1,"1453":2,"1455":2,"1465":1,"1467":1,"1486":1,"1488":6,"1491":1,"1496":1,"1577":2,"1591":1,"1611":1,"1629":1,"1631":2,"1632":1,"1635":1,"1638":2,"1651":3,"1662":2,"1666":1,"1677":1,"1683":1,"1684":1,"1686":4,"1701":3,"1719":1,"1727":2,"1728":2,"1729":1,"1730":3,"1747":1,"1748":2,"1749":1,"1755":1,"1761":1,"1764":2,"1765":2,"1776":1,"1805":1,"1810":1,"1815":1,"1824":1,"1826":2,"1830":2,"1856":1,"1865":1,"1883":2,"1922":1,"1953":2,"1975":1,"1988":3,"1994":3,"1995":2,"1997":2,"2055":1,"2056":3,"2090":1,"2091":1,"2232":1,"2233":1}}],["collectasync",{"3":{"861":1,"1433":1,"1436":3}}],["collects",{"3":{"760":1,"861":1,"1091":1,"1161":1,"1229":1,"1247":1,"1259":3,"1286":4,"1300":2,"1301":1,"1310":2,"1311":1,"1323":1,"1324":1,"1339":1,"1350":1,"1359":5,"1369":1,"1395":6,"1396":2,"1402":1,"1415":1,"1427":1,"1431":1,"1435":1,"1436":9,"1438":1,"1454":1,"1455":1,"1456":1,"1488":2,"1492":2,"1639":2,"1844":1,"1865":1,"2043":1,"2058":1,"2168":1}}],["collect",{"3":{"539":1,"1270":1,"1310":1,"1339":2,"1359":1,"1397":1,"1415":1,"1431":1,"1436":4,"1455":1,"1456":2,"1489":1,"1490":1,"1770":1,"1868":1,"1975":1,"2149":1}}],["collected",{"3":{"352":1,"538":1,"725":1,"792":1,"972":1,"1218":1,"1270":1,"1271":1,"1286":3,"1300":2,"1315":1,"1323":3,"1324":1,"1339":3,"1350":2,"1359":2,"1395":1,"1396":1,"1436":8,"1456":1,"1567":1,"1769":1,"1804":1,"1978":1,"2141":1}}],["collector",{"3":{"0":1,"861":3,"1436":6,"1488":1,"1497":1,"1671":1}}],["colliding",{"3":{"312":1,"610":1,"1286":1,"1311":2,"1312":1,"1323":1,"1324":2,"1339":1,"1350":1,"1359":4,"1395":2,"1402":1,"1436":4}}],["collided",{"3":{"1401":1}}],["collides",{"3":{"295":1,"1339":1,"1396":2,"1436":2,"1441":1,"1496":1}}],["collide",{"3":{"99":1,"246":1,"996":1,"998":1,"1286":1,"1297":1,"1300":1,"1309":1,"1311":1,"1323":4,"1324":1,"1331":1,"1339":1,"1350":3,"1352":1,"1359":4,"1362":1,"1364":1,"1369":3,"1380":2,"1395":2,"1396":4,"1402":3,"1415":1,"1429":1,"1436":4,"1438":2,"1474":1,"1478":1,"1639":1,"1684":1,"1731":1,"1920":1,"1977":1,"2097":1}}],["collisions",{"3":{"1267":1,"1270":1,"1300":1,"1301":2,"1359":1,"1395":1,"1488":1,"1639":2}}],["collision",{"3":{"0":1,"157":1,"340":1,"342":1,"733":1,"891":1,"905":1,"999":1,"1191":1,"1270":2,"1283":1,"1286":5,"1300":2,"1323":1,"1350":1,"1359":10,"1369":1,"1395":2,"1396":1,"1402":1,"1416":1,"1417":1,"1436":16,"1475":1,"1478":1,"1496":2,"1869":1,"1876":1,"1908":1}}],["collateral",{"3":{"2024":1}}],["collation",{"3":{"1350":1,"1359":5}}],["collaborate",{"3":{"1359":1,"1396":1,"1415":1,"1436":1}}],["collaborates",{"3":{"1355":1}}],["collaborations",{"3":{"1378":1}}],["collaboration",{"3":{"1309":1,"1436":1,"2219":1}}],["collaborating",{"3":{"1286":1,"1523":1,"1588":1}}],["collaborators",{"0":{"1385":1},"3":{"1057":1,"1270":1,"1286":2,"1300":1,"1311":1,"1323":4,"1324":1,"1339":1,"1359":7,"1381":1,"1385":1,"1395":5,"1396":1,"1402":1,"1436":12,"1438":2,"1489":1}}],["collaborator",{"3":{"0":1,"534":1,"539":1,"1025":1,"1060":1,"1286":2,"1293":1,"1323":1,"1359":1,"1395":4,"1396":4,"1415":1,"1436":16,"2196":1,"2202":1,"2203":1}}],["collapsible",{"3":{"649":1,"1324":2,"1395":1}}],["collapsing",{"3":{"0":1,"63":1,"283":1,"386":1,"675":1,"783":1,"964":1,"1124":1,"1220":1,"1229":1,"1247":1,"1259":1,"1270":1,"1279":2,"1286":4,"1300":7,"1311":3,"1323":1,"1324":7,"1337":1,"1339":3,"1359":7,"1380":1,"1395":3,"1396":1,"1402":2,"1416":1,"1417":3,"1436":3,"1534":1,"1670":1,"1805":1,"2024":1,"2167":1}}],["collapsed",{"3":{"60":1,"791":1,"882":1,"1204":1,"1247":1,"1286":5,"1295":1,"1298":1,"1300":1,"1311":1,"1324":1,"1350":1,"1359":1,"1395":3,"1396":1,"1436":1,"1496":1,"1534":1,"2026":1}}],["collapse",{"3":{"0":2,"111":1,"137":1,"164":1,"166":3,"170":1,"179":1,"333":1,"507":1,"680":1,"693":1,"881":1,"945":1,"996":2,"1247":1,"1259":1,"1270":2,"1279":3,"1285":1,"1286":16,"1292":1,"1300":9,"1301":1,"1322":1,"1323":1,"1324":9,"1339":4,"1359":2,"1395":5,"1396":6,"1415":1,"1417":7,"1429":1,"1436":8,"1438":1,"1443":1,"1447":2,"1467":2,"1489":1,"1490":1,"1531":1,"1534":2,"1652":2,"1664":2,"1712":1,"1790":1,"1849":3,"1852":1,"1853":1,"1981":1,"2024":1,"2053":1}}],["collapses",{"3":{"0":2,"47":1,"459":1,"490":1,"513":1,"592":1,"690":1,"790":1,"827":1,"854":1,"905":1,"996":1,"1116":1,"1212":1,"1225":1,"1237":1,"1247":1,"1259":1,"1270":3,"1271":1,"1281":1,"1285":1,"1286":11,"1294":2,"1300":3,"1309":2,"1311":5,"1322":1,"1323":3,"1324":4,"1326":1,"1338":1,"1339":5,"1350":3,"1359":7,"1395":6,"1396":11,"1415":4,"1417":2,"1436":4,"1438":1,"1441":1,"1455":1,"1534":1,"1631":1,"1641":2,"1652":1,"1662":1,"1667":1,"1684":1,"1765":1,"1790":1,"1847":1,"1849":3,"1858":1,"1870":1,"1909":1,"1922":1,"2029":1,"2040":1,"2047":1,"2048":1,"2166":1}}],["columnprefix",{"3":{"1286":3}}],["columnname",{"3":{"1286":2}}],["columnwidth",{"3":{"1199":5,"1203":1,"1207":2,"1259":2,"1277":2,"1286":6,"1496":1}}],["column",{"0":{"2144":1},"3":{"0":11,"26":2,"275":1,"311":1,"330":1,"333":2,"337":2,"341":2,"343":1,"358":1,"359":4,"360":3,"361":4,"363":2,"364":1,"365":1,"499":1,"501":1,"549":3,"564":1,"566":2,"655":1,"656":1,"657":7,"659":1,"690":1,"691":1,"696":1,"697":1,"698":2,"703":4,"717":1,"721":1,"741":2,"743":1,"744":1,"766":1,"809":2,"811":1,"812":1,"881":2,"889":5,"890":1,"892":1,"903":1,"904":1,"905":1,"906":1,"907":1,"910":2,"964":4,"965":1,"966":1,"1018":3,"1020":2,"1033":1,"1035":1,"1050":5,"1051":2,"1052":3,"1053":1,"1058":1,"1085":1,"1135":1,"1175":4,"1228":1,"1229":3,"1234":1,"1237":8,"1239":1,"1241":2,"1242":4,"1243":1,"1244":3,"1247":25,"1259":3,"1260":1,"1270":1,"1271":3,"1276":3,"1277":1,"1278":1,"1280":2,"1281":4,"1282":1,"1283":1,"1284":2,"1286":121,"1290":2,"1291":1,"1297":1,"1300":8,"1309":8,"1310":1,"1311":13,"1318":1,"1323":7,"1324":10,"1342":3,"1344":1,"1350":25,"1354":1,"1359":66,"1362":7,"1369":34,"1375":1,"1380":16,"1383":2,"1392":1,"1395":28,"1396":27,"1398":1,"1402":2,"1405":1,"1408":1,"1414":1,"1415":29,"1436":15,"1438":4,"1445":1,"1455":2,"1460":1,"1489":1,"1492":1,"1496":3,"1526":1,"1577":2,"1591":3,"1600":1,"1630":2,"1631":1,"1639":4,"1640":3,"1641":1,"1663":1,"1672":1,"1675":1,"1683":1,"1686":1,"1713":1,"1723":1,"1727":4,"1749":1,"1750":2,"1767":1,"1769":1,"1810":1,"1815":1,"1849":1,"1851":2,"1856":1,"1858":1,"1862":1,"1875":1,"1876":1,"1877":1,"1903":1,"1933":1,"1934":1,"1940":1,"1986":1,"1990":1,"1991":1,"2070":2,"2081":2,"2083":1,"2084":1,"2085":2,"2086":1,"2140":2,"2141":3,"2142":3,"2143":3,"2144":4,"2145":4,"2146":6,"2186":1,"2194":1,"2232":2}}],["columns",{"1":{"2140":1,"2141":1,"2142":1,"2143":1,"2144":1,"2145":1,"2146":1},"3":{"0":6,"26":3,"41":1,"166":1,"313":1,"328":1,"330":1,"341":1,"348":1,"350":3,"352":1,"358":3,"359":1,"360":1,"361":1,"549":1,"564":3,"657":2,"658":1,"660":1,"715":1,"717":1,"741":3,"742":2,"799":1,"802":1,"853":2,"891":1,"905":1,"907":1,"950":1,"1024":2,"1026":3,"1030":1,"1043":1,"1060":1,"1061":1,"1074":1,"1075":1,"1116":1,"1133":1,"1175":1,"1212":2,"1234":1,"1237":3,"1239":1,"1241":2,"1242":1,"1243":1,"1244":1,"1245":1,"1247":7,"1251":1,"1253":2,"1259":6,"1269":1,"1270":2,"1277":1,"1280":1,"1281":2,"1286":26,"1300":4,"1309":5,"1311":7,"1312":2,"1323":3,"1324":2,"1350":7,"1359":8,"1362":1,"1363":1,"1369":14,"1380":1,"1395":7,"1396":16,"1401":1,"1402":1,"1406":1,"1407":1,"1412":1,"1415":20,"1436":2,"1438":2,"1467":1,"1496":1,"1524":1,"1526":1,"1531":1,"1591":1,"1607":1,"1641":1,"1656":1,"1664":2,"1666":1,"1671":1,"1675":1,"1685":2,"1686":1,"1741":1,"1810":1,"1815":1,"1856":1,"1866":1,"1903":1,"1977":1,"1978":2,"1988":1,"2072":1,"2080":1,"2085":1,"2139":1,"2140":2,"2141":1,"2143":1,"2145":4,"2146":2,"2153":1,"2186":1,"2192":1,"2198":1,"2208":2,"2232":1}}],["courtesy",{"3":{"1389":1,"1396":1}}],["courses",{"3":{"2225":1}}],["course",{"3":{"1323":1}}],["cousin",{"3":{"1230":1,"1270":1,"1359":1}}],["coupon",{"2":{"2087":1,"2090":1,"2093":1},"3":{"0":1,"1028":1,"2087":1,"2090":1,"2093":1}}],["couple",{"3":{"92":1,"1211":1,"1300":2,"1312":1,"1323":1,"1359":2,"1396":1,"1436":2,"1689":1,"1781":1,"1868":1,"1903":1,"1965":1,"2016":1}}],["couples",{"3":{"0":1,"116":1,"185":1,"544":1,"1300":1,"1436":1,"1540":1,"1546":1,"1863":1,"1894":1,"1960":1,"1991":1}}],["coupled",{"3":{"0":2,"265":1,"329":1,"545":1,"547":1,"585":1,"1069":1,"1077":1,"1271":1,"1289":1,"1300":1,"1324":1,"1339":1,"1359":2,"1436":7,"1489":1,"1815":1,"1863":1,"1932":1,"1961":1,"1990":1,"2027":1,"2028":1,"2079":1,"2232":1}}],["couplings",{"3":{"1789":1}}],["coupling",{"3":{"0":1,"33":1,"52":1,"102":1,"135":1,"159":1,"226":1,"255":1,"458":1,"547":1,"549":1,"628":1,"827":1,"924":1,"1011":1,"1012":1,"1202":1,"1203":1,"1229":1,"1236":1,"1237":2,"1259":3,"1271":1,"1300":1,"1309":1,"1311":3,"1313":1,"1323":2,"1336":1,"1339":2,"1350":4,"1359":3,"1391":1,"1396":3,"1415":1,"1416":4,"1431":1,"1436":17,"1442":1,"1455":1,"1496":1,"1526":1,"1534":1,"1542":2,"1545":1,"1571":3,"1591":1,"1638":1,"1661":1,"1727":1,"1792":1,"1800":1,"1816":1,"1829":1,"1847":1,"1848":1,"1854":1,"1864":1,"1951":1,"1952":2}}],["could",{"3":{"0":4,"19":1,"20":1,"21":2,"22":1,"72":1,"109":1,"111":1,"120":1,"135":1,"142":1,"170":1,"188":1,"213":1,"228":1,"235":1,"245":1,"246":1,"248":1,"254":1,"256":1,"265":2,"266":1,"318":1,"335":1,"391":1,"419":1,"448":1,"451":1,"490":1,"528":1,"529":1,"536":3,"537":1,"538":1,"539":1,"558":1,"612":1,"627":2,"664":1,"674":1,"696":1,"725":2,"749":1,"760":1,"800":1,"801":2,"826":2,"827":1,"833":1,"838":1,"853":1,"889":1,"897":1,"898":1,"905":3,"907":1,"915":1,"922":1,"926":1,"939":1,"945":2,"947":1,"956":1,"971":1,"979":1,"988":1,"1017":1,"1018":1,"1019":2,"1026":1,"1059":1,"1067":1,"1100":1,"1116":1,"1128":1,"1174":1,"1219":1,"1222":1,"1223":1,"1229":3,"1233":1,"1237":5,"1242":1,"1247":3,"1252":1,"1253":1,"1259":3,"1265":1,"1270":2,"1271":1,"1274":1,"1286":15,"1292":1,"1299":1,"1300":21,"1301":3,"1304":1,"1309":5,"1311":13,"1312":2,"1323":16,"1324":20,"1332":1,"1339":8,"1350":2,"1357":1,"1359":31,"1369":2,"1380":3,"1384":1,"1390":1,"1395":12,"1396":31,"1402":6,"1409":1,"1415":18,"1417":5,"1436":26,"1438":2,"1440":1,"1446":1,"1447":1,"1454":3,"1455":1,"1467":4,"1473":1,"1474":1,"1475":1,"1488":2,"1492":1,"1495":1,"1496":1,"1546":1,"1596":1,"1638":2,"1639":3,"1641":1,"1685":1,"1689":1,"1699":1,"1727":1,"1755":1,"1765":1,"1780":1,"1806":1,"1807":2,"1822":1,"1824":1,"1881":1,"1898":1,"1918":1,"1924":1,"1970":1,"1995":1,"2012":1,"2062":1,"2065":1,"2073":1,"2085":1,"2089":1,"2124":1,"2129":2,"2131":1,"2161":1,"2163":1,"2164":1,"2166":1,"2167":1,"2168":1,"2169":1,"2200":1}}],["county",{"3":{"2220":2}}],["countfollowedbyplural",{"3":{"1436":1}}],["countoccurrences",{"3":{"1436":1}}],["countinvalid",{"3":{"1402":1}}],["countingmessagebus",{"3":{"1199":2,"1207":3,"1436":1,"1487":1}}],["countingqueryableexecutor",{"3":{"1199":3,"1207":1}}],["countingsweep",{"3":{"1199":2,"1207":1,"1323":1}}],["countingallocator",{"3":{"1199":2,"1207":1}}],["countingfailurehandler",{"3":{"1199":2,"1207":1}}],["countingcheck",{"3":{"1199":2,"1207":1}}],["counting",{"3":{"0":3,"27":1,"125":1,"280":1,"284":1,"476":1,"477":1,"593":1,"631":1,"782":1,"799":2,"803":2,"804":1,"805":1,"1004":1,"1005":1,"1018":1,"1240":1,"1245":1,"1247":3,"1256":1,"1259":1,"1270":3,"1278":1,"1286":2,"1300":2,"1307":1,"1309":2,"1311":2,"1323":1,"1324":3,"1339":1,"1350":3,"1354":1,"1355":1,"1359":5,"1395":1,"1396":6,"1402":1,"1415":1,"1436":6,"1438":2,"1447":1,"2028":1,"2043":1,"2048":1,"2106":1}}],["countcategoryitems",{"3":{"1359":4}}],["countries",{"3":{"1324":1}}],["countrymaxlength",{"3":{"1237":1,"1271":1}}],["country",{"3":{"1237":1,"1271":4,"1286":1,"1324":1,"1427":1,"1764":1}}],["countryrules",{"3":{"1199":3,"1203":1,"1207":1,"1271":5,"1829":1}}],["countunpaginatedasync",{"2":{"1243":1},"3":{"1243":1,"1247":2}}],["countable",{"3":{"898":1,"1396":3,"1399":1}}],["countasync",{"2":{"546":1},"3":{"0":1,"545":1,"546":1,"549":1,"550":1,"552":1,"1247":1,"1286":16,"1309":3,"1396":5,"1402":2,"1415":1,"1436":3,"1815":5}}],["countdown",{"3":{"556":1,"1350":1,"1393":2,"1395":9,"1416":1,"1438":1,"1737":1}}],["countbyasync",{"3":{"543":1,"545":1,"551":1,"1286":10,"1359":2,"1396":3,"1815":1}}],["countpendingasync",{"2":{"24":1,"409":1,"2157":1,"2191":1},"3":{"24":1,"397":1,"409":1,"1259":3,"1286":4,"1323":1,"2157":1,"2191":1}}],["counterexample",{"3":{"1436":1}}],["countermeasure",{"3":{"1300":1}}],["counterweights",{"3":{"1118":1}}],["counterweight",{"3":{"530":1,"974":1,"1359":1,"1396":1,"1467":1,"2181":1}}],["counterparts",{"3":{"982":1,"1229":1,"1301":1,"1312":1,"1320":1,"1339":1,"1350":1,"1359":2,"1392":1,"1402":1,"1415":1,"1496":1}}],["counterpart",{"3":{"0":2,"143":1,"230":1,"265":1,"313":1,"362":2,"514":1,"543":1,"550":1,"591":1,"595":1,"707":1,"748":1,"749":1,"766":1,"842":1,"950":1,"980":1,"1212":1,"1229":2,"1237":2,"1259":3,"1269":1,"1270":3,"1271":1,"1275":1,"1286":13,"1300":3,"1306":1,"1309":5,"1311":4,"1312":2,"1323":3,"1324":9,"1339":3,"1342":1,"1350":7,"1352":1,"1359":14,"1380":1,"1395":8,"1396":5,"1402":5,"1415":2,"1416":1,"1417":6,"1431":1,"1433":1,"1436":24,"1444":1,"1455":1,"1488":2,"1489":1,"1554":1,"1910":1,"2048":1,"2077":1}}],["counters",{"0":{"2177":1},"3":{"0":3,"124":1,"173":1,"177":1,"178":1,"245":1,"248":1,"255":2,"279":1,"283":2,"285":1,"286":2,"287":1,"379":1,"400":3,"404":1,"408":1,"609":1,"698":1,"700":1,"707":1,"732":1,"734":1,"737":1,"855":1,"899":1,"1016":1,"1018":2,"1020":1,"1089":1,"1090":1,"1093":1,"1268":2,"1270":6,"1286":3,"1289":1,"1292":1,"1294":1,"1300":5,"1301":5,"1311":3,"1317":1,"1323":1,"1350":1,"1359":3,"1395":1,"1396":1,"1418":1,"1425":2,"1427":3,"1435":1,"1438":4,"1442":3,"1443":2,"1467":1,"1577":1,"1641":3,"1665":1,"1666":1,"1667":1,"1765":1,"1767":1,"1915":1,"1920":1,"1935":1,"1941":1,"2001":2,"2006":1,"2154":1,"2156":5,"2157":1,"2160":3,"2180":1,"2191":1}}],["counter",{"3":{"0":8,"121":1,"126":1,"157":1,"241":1,"242":1,"245":5,"247":1,"248":2,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":2,"257":1,"279":4,"283":1,"284":1,"285":1,"395":2,"397":2,"398":1,"399":2,"406":1,"407":1,"518":1,"608":1,"707":2,"731":1,"732":2,"733":2,"734":1,"735":1,"736":2,"818":1,"819":2,"823":1,"827":1,"849":1,"854":2,"896":1,"897":2,"898":1,"899":1,"996":1,"997":1,"1074":1,"1090":1,"1092":1,"1093":1,"1100":1,"1101":1,"1102":1,"1126":1,"1150":1,"1212":2,"1247":11,"1256":3,"1259":3,"1267":1,"1270":6,"1282":1,"1286":4,"1292":2,"1294":3,"1295":1,"1300":18,"1301":17,"1309":1,"1311":26,"1317":1,"1323":20,"1324":24,"1337":1,"1339":4,"1344":1,"1350":5,"1359":6,"1395":18,"1396":3,"1402":5,"1415":4,"1416":1,"1427":2,"1429":1,"1436":4,"1438":4,"1453":1,"1488":1,"1490":1,"1496":1,"1577":1,"1641":5,"1765":1,"1767":1,"1843":2,"1849":1,"1903":1,"1915":2,"1916":1,"1922":1,"1947":1,"1999":1,"2000":1,"2001":6,"2002":3,"2006":2,"2010":1,"2055":1,"2142":1,"2156":7,"2159":1,"2180":1}}],["counted",{"3":{"0":5,"121":1,"126":1,"130":1,"135":1,"138":2,"139":1,"175":1,"255":1,"279":1,"383":1,"408":1,"423":1,"474":1,"484":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"556":1,"575":1,"577":1,"655":1,"672":3,"798":1,"799":2,"801":1,"803":1,"805":1,"832":1,"916":1,"996":1,"1091":2,"1093":1,"1247":1,"1256":1,"1259":1,"1263":2,"1267":1,"1270":2,"1286":1,"1300":3,"1311":7,"1323":1,"1324":4,"1339":1,"1350":1,"1357":1,"1359":13,"1396":7,"1400":1,"1402":4,"1416":1,"1422":1,"1436":2,"1438":1,"1442":1,"1487":1,"1489":1,"1496":3,"1585":1,"1639":1,"1669":1,"1764":1,"1817":1,"1909":1,"1911":1,"1919":1,"1922":2,"1923":1,"1949":2,"1983":1,"2000":2,"2174":1,"2179":1}}],["countsthedatacarryingcommands",{"3":{"1436":3}}],["countstheliteralcatalog",{"3":{"1436":2}}],["countsbyquestion",{"3":{"1402":1}}],["countsbypolloption",{"3":{"1402":1}}],["countscoredsince",{"3":{"1395":5}}],["countsessionspercategoryitem",{"3":{"1359":4}}],["counts",{"0":{"137":1,"140":1,"1205":1,"1206":1,"1734":1},"3":{"0":6,"24":1,"73":2,"74":1,"125":1,"130":3,"135":4,"136":1,"137":2,"140":1,"157":1,"184":1,"228":1,"235":1,"255":2,"280":1,"281":1,"319":1,"386":1,"390":1,"395":1,"397":1,"399":1,"400":2,"474":2,"475":1,"477":2,"480":1,"483":1,"486":1,"487":2,"488":1,"489":1,"490":1,"491":3,"492":1,"493":1,"494":1,"495":3,"524":1,"526":1,"530":1,"538":2,"545":1,"577":1,"585":1,"597":1,"604":2,"607":2,"609":1,"616":3,"621":1,"629":1,"634":1,"649":1,"677":1,"706":1,"733":1,"741":1,"780":3,"819":1,"827":1,"832":1,"836":1,"883":1,"888":1,"889":1,"896":1,"972":1,"974":1,"978":1,"983":1,"986":1,"1004":3,"1006":1,"1091":1,"1093":1,"1124":1,"1150":1,"1152":1,"1168":1,"1186":1,"1212":1,"1237":1,"1247":2,"1256":1,"1259":5,"1270":1,"1271":2,"1273":1,"1275":1,"1286":9,"1289":2,"1300":4,"1301":3,"1304":1,"1309":3,"1311":7,"1323":6,"1324":15,"1333":1,"1334":1,"1339":8,"1347":4,"1349":1,"1350":18,"1355":1,"1359":34,"1366":1,"1379":1,"1380":6,"1388":2,"1390":3,"1391":1,"1395":12,"1396":17,"1399":1,"1401":1,"1402":22,"1415":5,"1416":2,"1417":2,"1423":1,"1427":1,"1430":1,"1435":1,"1436":37,"1438":2,"1453":1,"1455":3,"1467":2,"1474":1,"1476":1,"1484":1,"1485":1,"1487":3,"1490":1,"1492":1,"1494":1,"1495":1,"1496":18,"1498":1,"1535":1,"1573":1,"1577":1,"1582":2,"1591":1,"1599":1,"1632":3,"1637":1,"1639":1,"1641":3,"1654":1,"1659":1,"1665":2,"1668":1,"1669":1,"1673":2,"1674":1,"1675":1,"1815":1,"1904":1,"1917":1,"1922":1,"1923":1,"1937":1,"1949":1,"1997":1,"2000":3,"2002":2,"2024":1,"2034":1,"2159":1,"2170":1,"2172":1,"2174":1,"2175":1,"2179":1,"2192":1,"2232":2}}],["count",{"0":{"1128":1,"1797":1,"2051":1},"2":{"20":1,"80":1,"82":1,"121":1,"126":1,"397":1,"819":1,"821":1,"1256":1,"1268":2,"1310":1,"1354":1,"1442":1,"1665":1,"1843":1,"2032":1,"2156":2,"2159":1,"2191":2},"3":{"0":25,"3":1,"20":1,"24":1,"71":1,"80":1,"82":1,"100":1,"121":1,"125":1,"126":1,"130":2,"135":1,"136":2,"137":2,"138":1,"140":1,"141":1,"142":3,"146":1,"147":1,"152":1,"160":1,"178":1,"195":1,"203":1,"225":1,"254":1,"255":1,"258":1,"260":2,"310":1,"311":1,"335":1,"379":1,"390":2,"392":2,"393":1,"395":2,"397":3,"408":1,"409":1,"418":1,"423":1,"426":3,"452":2,"453":1,"468":1,"475":1,"476":1,"492":2,"493":2,"494":2,"495":1,"522":2,"523":2,"524":4,"526":1,"527":1,"528":1,"549":2,"550":2,"554":3,"572":2,"589":1,"592":1,"607":1,"608":1,"609":6,"610":1,"611":2,"616":3,"624":1,"631":3,"634":1,"635":3,"640":1,"655":1,"672":1,"696":1,"699":1,"700":2,"759":1,"768":1,"775":1,"797":3,"799":4,"800":1,"801":1,"803":1,"804":1,"805":2,"819":5,"820":1,"821":1,"860":1,"862":1,"883":2,"884":2,"896":1,"897":1,"899":1,"905":2,"906":1,"914":1,"937":1,"946":2,"948":1,"952":2,"959":1,"972":1,"975":1,"986":2,"991":1,"996":2,"999":1,"1004":2,"1005":1,"1018":1,"1020":2,"1042":1,"1048":1,"1049":1,"1054":1,"1055":1,"1069":1,"1073":1,"1078":1,"1100":2,"1116":1,"1118":1,"1122":1,"1124":4,"1125":3,"1126":1,"1136":1,"1178":1,"1192":2,"1196":1,"1202":1,"1205":1,"1211":1,"1212":2,"1221":1,"1228":3,"1229":11,"1237":4,"1240":2,"1243":4,"1247":13,"1253":1,"1256":3,"1259":10,"1264":1,"1268":2,"1270":10,"1271":1,"1275":1,"1278":1,"1286":30,"1300":13,"1301":3,"1303":1,"1306":3,"1309":30,"1310":3,"1311":11,"1315":1,"1317":1,"1318":1,"1323":15,"1324":63,"1330":1,"1337":2,"1339":9,"1347":1,"1350":13,"1354":1,"1355":1,"1357":1,"1358":1,"1359":62,"1369":1,"1371":1,"1375":1,"1380":4,"1389":1,"1395":55,"1396":83,"1399":4,"1401":4,"1402":78,"1406":1,"1415":6,"1416":2,"1422":1,"1425":1,"1427":4,"1431":2,"1435":1,"1436":98,"1438":6,"1442":2,"1443":1,"1446":1,"1453":8,"1454":2,"1455":2,"1456":1,"1458":2,"1461":1,"1467":2,"1473":1,"1474":2,"1475":2,"1476":2,"1478":1,"1486":1,"1487":1,"1488":1,"1489":4,"1496":20,"1500":1,"1503":1,"1515":1,"1521":1,"1524":1,"1525":1,"1526":5,"1531":3,"1534":2,"1535":1,"1547":1,"1577":6,"1582":1,"1591":2,"1595":1,"1596":2,"1597":1,"1600":1,"1607":1,"1611":1,"1612":1,"1617":1,"1632":8,"1641":3,"1646":1,"1649":1,"1665":3,"1673":1,"1675":2,"1692":1,"1709":1,"1729":1,"1732":1,"1741":1,"1750":3,"1764":1,"1765":1,"1767":2,"1773":2,"1780":1,"1796":1,"1818":1,"1841":1,"1843":1,"1874":1,"1879":1,"1881":1,"1885":1,"1902":3,"1904":1,"1905":1,"1912":1,"1919":2,"1937":1,"1940":1,"1942":1,"1946":1,"1950":1,"1982":1,"1986":1,"1988":1,"1998":1,"1999":1,"2000":5,"2002":1,"2027":2,"2032":3,"2042":1,"2043":3,"2045":1,"2046":2,"2047":1,"2051":1,"2052":1,"2055":1,"2060":1,"2070":1,"2082":1,"2106":1,"2112":1,"2113":1,"2116":1,"2156":8,"2157":1,"2158":1,"2159":1,"2174":1,"2177":1,"2180":2,"2182":1,"2191":4,"2193":1,"2232":3}}],["comfort",{"3":{"1800":1}}],["comfortable",{"3":{"1153":1,"1324":2,"1559":1,"1591":1,"1596":1,"1597":1}}],["comfortably",{"3":{"907":1,"996":1,"1270":1,"1275":1,"1323":1,"1324":1,"1396":1,"1402":1,"1436":1,"1467":1}}],["coming",{"3":{"0":1,"24":1,"1040":1,"1259":1,"1286":2,"1307":1,"1395":1,"1417":1,"1786":1,"2058":1}}],["com",{"2":{"1481":1},"3":{"0":2,"528":1,"640":1,"855":2,"868":2,"1292":2,"1300":7,"1324":3,"1339":1,"1347":1,"1351":1,"1358":1,"1359":6,"1365":1,"1369":2,"1395":6,"1415":1,"1417":2,"1436":7,"1441":1,"1445":2,"1465":1,"1472":1,"1481":2,"1631":2,"1787":1,"1793":1,"1802":1,"1807":1,"1812":1,"1817":1,"1827":1,"1834":1,"1846":1,"1853":1,"1862":1,"1868":1,"1877":1,"1886":1,"1892":1,"1899":1,"1905":1,"1912":1,"1924":1,"1930":1,"1941":1,"1950":1,"1959":1,"1965":1,"1972":1,"1979":1,"1985":1,"1991":1,"1997":1,"2002":1,"2014":1,"2028":1,"2038":1,"2049":1,"2060":1,"2069":1,"2080":1,"2086":1,"2098":1,"2108":1,"2115":1,"2123":1,"2128":1,"2133":1,"2139":1,"2146":1,"2153":1,"2160":1,"2169":1,"2180":1,"2193":1,"2203":1,"2211":1,"2220":2,"2221":1,"2240":2,"2244":1}}],["combobox",{"3":{"0":1,"618":2,"620":2,"651":1,"1436":4,"1488":3,"1591":1,"1741":1,"2057":1}}],["combinable",{"3":{"1286":1}}],["combinations",{"3":{"932":1,"946":1,"1286":1,"1324":1,"1641":1}}],["combination",{"3":{"0":1,"92":1,"148":1,"556":1,"684":1,"872":1,"931":1,"1091":1,"1092":1,"1141":1,"1212":1,"1237":1,"1247":2,"1286":1,"1300":1,"1311":1,"1324":1,"1343":1,"1350":1,"1359":3,"1395":1,"1396":3,"1415":1,"1417":1,"1436":2,"1438":1,"1491":1,"1529":1,"1631":1,"1842":1,"1844":1,"1947":1,"2125":1,"2176":1}}],["combinatorial",{"3":{"146":1}}],["combinators",{"3":{"0":1,"109":1,"110":1,"111":1,"547":2,"549":2,"550":1,"1219":1,"1220":1,"1229":8,"1239":1,"1247":10,"1805":1,"1807":1,"1815":1,"1817":1}}],["combinator",{"3":{"0":1,"107":1,"109":2,"545":1,"1217":1,"1220":2,"1229":5,"1247":8,"1662":1,"1805":1,"1807":1,"1815":1}}],["combiningacute",{"3":{"1324":1}}],["combining",{"3":{"1220":1,"1229":1,"1231":2,"1237":1,"1247":1,"1286":2,"1324":2,"1336":1,"1339":2,"1343":1,"1350":2,"1359":1,"1415":1,"1417":1,"1436":2,"1814":1}}],["combines",{"3":{"964":1,"1270":2,"1278":1,"1300":1,"1309":2,"1339":1,"1350":5,"1359":12,"1395":1,"1396":1,"1398":1,"1402":4,"1415":3,"1417":2,"1436":1,"1488":1}}],["combine",{"2":{"43":1,"110":1,"1169":1,"1170":1,"1220":1,"1222":1,"1224":1,"1343":1,"1701":1,"1807":1},"3":{"0":3,"39":3,"43":2,"109":1,"110":1,"545":1,"549":1,"657":1,"1168":6,"1169":2,"1170":2,"1220":2,"1222":1,"1224":1,"1229":5,"1234":1,"1237":8,"1239":1,"1244":1,"1247":7,"1271":1,"1309":4,"1311":2,"1312":2,"1324":2,"1342":1,"1343":3,"1344":1,"1350":35,"1359":4,"1395":8,"1396":10,"1402":5,"1405":1,"1415":4,"1427":1,"1436":5,"1526":1,"1651":1,"1662":2,"1685":3,"1701":1,"1805":1,"1806":1,"1807":2,"1810":1,"1815":1,"1817":1,"1927":1,"1962":1}}],["combined",{"3":{"0":1,"43":1,"57":1,"59":4,"60":1,"62":1,"63":1,"166":1,"195":1,"350":1,"483":1,"487":1,"488":1,"489":1,"490":1,"491":2,"492":2,"493":2,"494":2,"495":2,"547":1,"562":1,"582":1,"584":1,"743":1,"790":1,"889":1,"890":1,"1239":1,"1247":1,"1270":3,"1286":4,"1289":1,"1324":2,"1339":1,"1344":1,"1350":6,"1359":8,"1395":3,"1396":2,"1402":7,"1415":1,"1436":4,"1438":1,"1441":1,"1446":1,"1455":1,"1456":1,"1467":1,"1486":2,"1487":1,"1496":2,"1526":1,"1619":1,"1651":1,"1673":1,"1765":1,"1775":1,"1817":1,"1859":1,"1884":1,"2026":1}}],["computation",{"3":{"681":1,"1026":1,"1027":1,"1350":1,"1359":3,"1395":3,"1396":2,"1436":1,"1500":1,"1804":1}}],["computing",{"3":{"629":1,"1019":1,"1259":1,"1267":1,"1286":2,"1300":2,"1324":1,"1339":2,"1350":1,"1359":3,"1369":1,"1402":4,"1417":1,"1436":2}}],["computer",{"3":{"1913":1,"2222":1}}],["computerequestbodyhashasync",{"3":{"1311":2}}],["computeretrybackoffseconds",{"2":{"19":2,"1042":2,"1259":1,"1275":1,"2188":1},"3":{"19":2,"1042":2,"1259":3,"1275":1,"1286":2,"2188":1}}],["computeancestors",{"3":{"1436":1}}],["computeoptions",{"3":{"1395":3}}],["computelivewindowutc",{"3":{"1359":1}}],["computelegacyhash",{"2":{"945":1},"3":{"0":1,"310":1,"945":1,"946":1}}],["computecategorydistribution",{"3":{"1359":1}}],["computevirtualwindow",{"3":{"1324":1}}],["computewaittime",{"2":{"1042":1,"1254":1},"3":{"1042":1,"1254":1,"1259":3,"1275":1,"1286":7,"1323":1}}],["compute",{"3":{"707":1,"973":1,"1267":1,"1279":1,"1311":2,"1315":1,"1323":2,"1324":1,"1350":2,"1352":1,"1355":1,"1359":5,"1395":1,"1396":4,"1402":2,"1417":3,"1436":2,"1446":1,"1467":4,"1568":1,"1677":2,"1678":2,"1879":1,"1881":1,"1920":2,"2155":1,"2180":1}}],["computespeakerlocality",{"3":{"1359":1}}],["computespeakeroverlap",{"3":{"1359":2}}],["computes",{"3":{"583":1,"626":1,"1091":1,"1212":1,"1229":1,"1242":1,"1247":3,"1259":1,"1263":1,"1267":1,"1270":4,"1286":9,"1300":3,"1310":1,"1311":1,"1323":2,"1324":7,"1339":5,"1350":1,"1352":1,"1359":13,"1373":1,"1380":1,"1395":3,"1396":5,"1401":2,"1402":7,"1417":4,"1431":1,"1436":12,"1496":1,"1920":1,"2149":2,"2167":1}}],["computepbkdf2hash",{"3":{"310":1,"946":1,"1300":1}}],["computedhash",{"3":{"1300":1}}],["computed",{"0":{"1798":1},"2":{"1902":1},"3":{"0":3,"19":1,"157":1,"159":1,"219":1,"335":1,"633":1,"650":1,"905":1,"926":1,"990":1,"1018":1,"1026":2,"1091":1,"1191":1,"1192":1,"1193":1,"1200":1,"1227":1,"1229":2,"1237":2,"1247":5,"1254":1,"1259":3,"1267":1,"1269":1,"1270":8,"1286":12,"1300":9,"1309":1,"1310":4,"1311":4,"1323":3,"1324":14,"1331":1,"1332":1,"1339":4,"1342":3,"1350":12,"1352":1,"1354":2,"1359":23,"1362":1,"1369":8,"1383":2,"1391":1,"1395":22,"1396":18,"1402":11,"1409":1,"1412":1,"1415":11,"1417":1,"1426":1,"1427":1,"1436":7,"1438":1,"1467":1,"1480":1,"1496":1,"1577":1,"1585":1,"1592":1,"1630":6,"1631":1,"1639":2,"1640":3,"1641":3,"1686":3,"1749":2,"1764":5,"1765":1,"1767":2,"1805":1,"1840":1,"1867":1,"1902":1,"1920":1,"1948":1,"1988":1,"2176":1,"2180":1}}],["complains",{"3":{"1907":1,"1923":1}}],["complaint",{"3":{"1323":1}}],["comply",{"3":{"1436":1}}],["compliment",{"3":{"2200":1}}],["complication",{"3":{"1359":1}}],["compliance",{"0":{"1567":1,"1672":1},"3":{"716":1,"971":1,"972":1,"973":1,"976":1,"1168":1,"1207":2,"1216":1,"1232":1,"1236":1,"1237":6,"1253":1,"1259":2,"1269":1,"1270":3,"1276":1,"1283":1,"1286":14,"1299":1,"1300":4,"1308":1,"1309":5,"1311":2,"1317":1,"1323":8,"1324":2,"1350":1,"1353":1,"1355":1,"1359":4,"1380":2,"1395":2,"1396":32,"1402":3,"1403":1,"1405":1,"1410":2,"1415":25,"1417":5,"1436":24,"1438":2,"1454":1,"1461":1,"1479":1,"1480":3,"1483":1,"1489":1,"1493":1,"1499":1,"1526":1,"1534":1,"1535":1,"1569":1,"1575":1,"1577":2,"1581":1,"1582":1,"1583":1,"1584":1,"1591":1,"1597":1,"1672":1,"1678":1,"1784":1,"1796":1,"1799":1,"1801":1,"1845":2,"1846":1,"2043":1,"2062":1,"2067":1,"2141":1}}],["compliantstringfixtureid",{"3":{"1199":2,"1207":1,"1436":5}}],["compliantfixtureid",{"3":{"1199":2,"1207":1,"1436":8}}],["compliantfixtureservice",{"3":{"1199":2,"1207":1,"1436":3}}],["compliant",{"3":{"38":1,"41":1,"1050":1,"1168":1,"1300":1,"1403":1,"1436":17,"1480":1,"2061":1,"2068":1}}],["complexities",{"3":{"1639":1}}],["complexity",{"3":{"61":1,"68":1,"87":1,"1214":1,"1237":1,"1247":1,"1254":1,"1271":3,"1287":1,"1294":1,"1300":5,"1301":1,"1312":1,"1323":2,"1324":5,"1359":1,"1395":1,"1415":2,"1639":1,"1641":2,"1767":1,"1792":1,"1832":1,"1899":1,"1940":1,"2027":2,"2037":1}}],["complex",{"3":{"1052":1,"1055":1,"1286":1,"1300":1,"1359":2,"2079":1}}],["complementary",{"3":{"541":1,"624":1,"626":2,"1247":1,"1300":1,"1339":1,"1359":1,"1396":1,"1436":3,"1463":1,"1486":2,"1492":1,"1493":1,"1605":1,"1739":1,"1977":1,"1998":1,"2041":1,"2076":1,"2164":1}}],["complementing",{"3":{"503":1,"1311":1,"1402":1}}],["complements",{"0":{"1890":1},"3":{"122":1,"282":1,"321":1,"370":1,"579":1,"758":1,"766":1,"770":1,"1309":1,"1311":1,"1312":1,"1324":1,"1396":1,"1436":5,"1438":1,"1455":2,"1457":1,"1463":1,"1560":1,"1563":1,"1565":1,"1611":1,"1642":1,"1706":1,"1892":1,"2093":1}}],["complement",{"3":{"0":1,"626":1,"860":1,"1259":1,"1339":1,"1395":1,"1396":1,"1436":2,"1455":3,"1461":1,"1486":1,"1525":1,"1526":1,"1531":1,"1591":1,"1596":1,"1600":1,"1605":1,"1739":1,"1832":1}}],["completing",{"3":{"920":1,"1311":1,"1324":2,"1359":2,"1395":4,"1396":1,"1411":1,"1417":2,"1467":1,"1474":1,"2232":1}}],["completions",{"1":{"1056":1,"1057":1,"1058":1,"1059":1,"1060":1,"1061":1,"1062":1,"1063":1,"2170":1,"2171":1,"2172":1,"2173":1,"2174":1,"2175":1,"2176":1,"2177":1,"2178":1,"2179":1,"2180":1},"3":{"0":1,"1056":1,"1059":1,"1062":1,"1212":1,"1270":1,"1275":1,"1287":1,"1300":7,"1323":2,"1415":1,"1779":2,"2169":2,"2170":1,"2193":1,"2203":1,"2209":1,"2232":1}}],["completion",{"3":{"0":4,"189":1,"348":1,"350":1,"353":3,"419":2,"420":2,"422":1,"423":2,"426":1,"428":1,"430":1,"1091":1,"1107":1,"1108":1,"1112":1,"1270":6,"1286":1,"1300":3,"1311":2,"1323":3,"1324":12,"1339":5,"1380":1,"1390":1,"1395":4,"1415":2,"1416":2,"1417":16,"1421":1,"1427":1,"1436":2,"1667":2,"1669":1,"1975":1,"1976":2,"2170":1,"2172":1,"2232":1}}],["completable",{"3":{"681":1,"684":1}}],["completeenrollmentasync",{"2":{"1293":1},"3":{"1293":1,"1300":2,"1323":1}}],["completely",{"3":{"922":1,"1265":1,"1286":2,"1300":1,"1311":1,"1316":1,"1323":2,"1324":1,"1467":1,"1815":1,"1824":1,"1835":1,"1999":2,"2158":1}}],["complete",{"0":{"926":1},"2":{"161":1},"3":{"0":6,"39":1,"109":1,"160":1,"161":1,"164":1,"168":1,"181":1,"212":1,"214":1,"215":1,"216":1,"217":1,"265":1,"272":1,"273":1,"360":1,"361":1,"420":3,"423":1,"428":1,"434":1,"440":1,"537":1,"574":1,"577":1,"585":2,"597":1,"632":1,"649":1,"675":1,"682":1,"741":1,"743":1,"774":1,"811":1,"916":1,"920":1,"963":1,"965":1,"1049":1,"1108":1,"1212":1,"1219":1,"1229":1,"1247":1,"1259":2,"1265":1,"1286":2,"1300":9,"1309":2,"1311":8,"1322":1,"1323":8,"1324":10,"1326":1,"1330":1,"1336":2,"1339":7,"1340":1,"1350":3,"1352":1,"1357":1,"1359":10,"1369":6,"1395":6,"1396":4,"1406":1,"1409":1,"1410":1,"1411":1,"1415":9,"1416":2,"1417":9,"1427":1,"1432":1,"1436":8,"1442":1,"1443":1,"1444":1,"1453":1,"1456":1,"1468":1,"1472":1,"1477":1,"1485":1,"1488":1,"1489":1,"1496":1,"1497":1,"1526":1,"1531":1,"1532":2,"1575":1,"1577":3,"1582":1,"1591":1,"1599":2,"1611":1,"1632":1,"1653":1,"1654":1,"1658":1,"1661":1,"1670":1,"1687":1,"1705":1,"1750":1,"1765":1,"1849":1,"1891":1,"1898":1,"1931":1,"1932":1,"1936":1,"1941":1,"1964":1,"1976":2,"2001":1,"2034":1,"2083":2,"2085":1,"2126":1,"2143":1,"2149":2,"2152":1,"2153":1,"2165":1,"2200":1,"2201":1,"2208":1,"2231":1,"2233":1}}],["completes",{"3":{"0":2,"235":2,"539":1,"844":1,"897":1,"925":1,"1018":1,"1212":1,"1259":2,"1286":2,"1300":3,"1311":2,"1318":1,"1323":1,"1324":5,"1334":1,"1339":4,"1350":1,"1357":1,"1359":9,"1376":1,"1380":1,"1395":2,"1402":1,"1415":1,"1417":4,"1436":4,"1438":1,"1443":1,"1453":1,"1467":1,"1707":1,"1755":2,"1784":1,"2067":1,"2232":1}}],["completeness",{"3":{"0":2,"265":2,"399":1,"574":1,"725":1,"727":1,"838":2,"840":2,"1311":2,"1369":3,"1396":1,"1415":1,"1436":11,"1438":2,"1592":1,"1630":1,"1638":1,"1653":1,"1669":1,"1671":2,"2086":1,"2159":1}}],["completeasync",{"2":{"202":1,"350":1,"355":1,"419":2,"423":1,"1910":1,"1975":2,"1976":1},"3":{"0":2,"24":1,"195":1,"201":4,"202":1,"350":3,"355":1,"418":1,"419":2,"420":1,"423":1,"1258":2,"1259":9,"1286":1,"1311":2,"1323":1,"1415":1,"1416":1,"1910":1,"1975":2,"1976":1}}],["completedstable",{"3":{"1395":3}}],["completedall",{"3":{"1395":3}}],["completedtask",{"3":{"1259":3,"1270":1,"1286":3,"1309":2,"1310":3,"1311":3,"1323":5,"1324":2,"1339":1,"1395":1,"1417":16,"1436":6,"1865":1}}],["completed",{"2":{"719":1,"790":1,"1765":1,"1770":1,"1821":1},"3":{"0":2,"237":1,"352":1,"397":1,"539":1,"626":3,"628":2,"719":1,"790":2,"792":1,"794":1,"795":1,"809":1,"821":1,"823":1,"988":1,"1042":1,"1048":1,"1086":1,"1212":1,"1251":1,"1259":1,"1263":2,"1270":4,"1275":1,"1286":5,"1300":1,"1310":1,"1311":1,"1318":1,"1323":8,"1324":8,"1339":1,"1350":2,"1359":8,"1380":1,"1395":2,"1396":4,"1415":3,"1417":14,"1423":1,"1427":5,"1436":2,"1455":1,"1467":4,"1470":1,"1471":1,"1474":1,"1492":1,"1591":2,"1640":1,"1765":1,"1769":1,"1770":1,"1821":1,"1978":1,"2220":1}}],["comprehensive",{"3":{"2041":1,"2060":1}}],["compressible",{"3":{"442":1}}],["compressionlevel",{"3":{"1311":2}}],["compression",{"3":{"0":1,"749":1,"1311":7,"1379":1,"1436":1}}],["compressed",{"3":{"0":1,"438":1,"442":1,"591":1,"1323":3,"1560":1,"2126":1}}],["compromises",{"3":{"1311":2}}],["compromise",{"3":{"500":1,"904":2,"906":1,"1270":2,"1300":1,"1301":1,"1323":1,"1350":1,"1436":1,"1639":1}}],["compromised",{"3":{"32":1,"358":1,"602":1,"642":1,"904":1,"1212":1,"1288":1,"1300":2,"1406":1,"1415":1,"1453":1,"1467":2}}],["compilable",{"3":{"1417":1,"1436":1}}],["compilation",{"3":{"6":1,"576":1,"1213":1,"1247":1,"1310":1,"1324":1,"1359":4,"1396":1,"1417":1,"1673":1,"1955":1,"2041":1}}],["compiling",{"3":{"0":1,"908":1,"921":1,"979":1,"1059":1,"1091":1,"1134":1,"1247":1,"1268":1,"1270":2,"1290":1,"1301":1,"1305":1,"1309":2,"1311":1,"1324":3,"1353":1,"1359":2,"1417":1,"1427":1,"1436":6,"1453":1,"1727":1,"2094":1,"2126":1,"2196":1}}],["compiles",{"3":{"26":1,"53":1,"160":1,"373":1,"634":1,"697":1,"799":1,"801":1,"872":1,"920":1,"938":2,"980":1,"1066":1,"1132":2,"1237":1,"1239":1,"1247":5,"1259":3,"1270":5,"1301":1,"1310":1,"1312":1,"1324":1,"1350":1,"1359":19,"1369":1,"1395":4,"1396":1,"1415":2,"1416":4,"1417":5,"1427":3,"1430":1,"1431":1,"1436":15,"1611":4,"1656":1,"1663":1,"1685":1,"1730":1,"1736":1,"1737":1,"1790":1,"1800":1,"1810":1,"1815":1,"1825":2,"1830":1,"1863":1,"1952":1,"2017":1,"2044":1,"2056":1,"2060":1,"2097":1,"2200":1}}],["compiledpermission",{"3":{"1436":1}}],["compiledpermissions",{"3":{"1300":2}}],["compiledexpressioncache",{"3":{"1310":1}}],["compiled",{"0":{"2056":1},"3":{"0":6,"132":1,"184":2,"186":1,"330":1,"333":1,"359":1,"365":1,"422":1,"426":1,"454":1,"545":1,"546":1,"576":1,"591":1,"592":1,"595":1,"674":2,"699":1,"707":1,"848":1,"869":1,"946":1,"979":1,"980":1,"982":1,"983":1,"1057":1,"1058":1,"1059":6,"1060":1,"1061":1,"1063":1,"1067":1,"1161":2,"1213":1,"1214":1,"1237":1,"1238":1,"1241":1,"1242":3,"1247":18,"1252":1,"1259":2,"1276":1,"1278":3,"1283":1,"1286":18,"1297":3,"1300":37,"1304":1,"1305":1,"1309":5,"1310":7,"1311":5,"1319":1,"1323":8,"1324":18,"1341":1,"1348":1,"1350":1,"1353":1,"1359":12,"1380":3,"1395":2,"1396":6,"1409":2,"1414":1,"1415":4,"1416":2,"1417":2,"1427":1,"1428":1,"1431":1,"1432":1,"1436":68,"1438":2,"1445":1,"1455":1,"1466":1,"1486":2,"1489":2,"1491":1,"1504":1,"1531":1,"1577":4,"1626":2,"1665":1,"1670":1,"1671":1,"1675":1,"1782":1,"1850":1,"1851":2,"1865":1,"1902":1,"1923":1,"1945":1,"1956":1,"1962":1,"1964":1,"1988":1,"1989":1,"2028":1,"2041":2,"2042":1,"2047":1,"2054":1,"2100":1,"2142":1,"2194":1,"2199":4,"2200":3,"2203":3}}],["compilergeneratedattribute",{"3":{"1436":2}}],["compilerswitchexpressionthrow",{"3":{"1436":2}}],["compilerservices",{"3":{"980":1,"1312":1,"1436":3}}],["compiler",{"3":{"0":5,"81":1,"135":2,"160":2,"459":1,"465":1,"472":1,"547":1,"620":1,"633":1,"657":1,"784":1,"798":1,"799":1,"800":1,"821":1,"839":1,"840":2,"955":1,"956":1,"971":1,"980":3,"981":2,"982":1,"1004":1,"1005":1,"1036":2,"1050":1,"1052":1,"1161":1,"1162":1,"1174":1,"1212":1,"1218":1,"1229":1,"1234":1,"1237":1,"1247":1,"1259":1,"1270":8,"1286":7,"1300":7,"1310":1,"1311":5,"1312":1,"1323":2,"1324":6,"1339":5,"1359":16,"1369":1,"1395":1,"1396":5,"1402":2,"1415":3,"1416":1,"1417":2,"1436":58,"1449":1,"1450":1,"1488":1,"1500":1,"1737":1,"1803":1,"1804":1,"1810":2,"1833":1,"1888":1,"1892":1,"1919":1,"1951":2,"1955":1,"1957":1,"1959":1,"1996":1}}],["compile",{"0":{"576":1,"2041":1,"2106":1},"1":{"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1956":1,"1957":1,"1958":1,"1959":1},"3":{"0":7,"3":1,"5":1,"6":1,"130":1,"132":1,"133":1,"135":2,"136":1,"265":1,"310":1,"312":1,"412":1,"413":1,"422":1,"425":1,"461":1,"469":1,"472":2,"570":1,"590":1,"592":1,"599":1,"604":1,"609":1,"633":1,"650":1,"698":3,"798":1,"801":1,"838":1,"839":1,"846":1,"848":1,"869":1,"871":1,"882":1,"883":2,"923":1,"926":2,"933":1,"939":1,"948":1,"966":1,"1004":1,"1033":1,"1050":2,"1052":1,"1067":1,"1091":1,"1093":1,"1133":1,"1135":1,"1212":5,"1213":2,"1214":2,"1229":1,"1232":1,"1237":2,"1242":1,"1247":4,"1259":4,"1270":3,"1271":1,"1286":10,"1291":1,"1300":16,"1301":2,"1309":3,"1310":2,"1311":8,"1323":7,"1324":11,"1339":5,"1343":1,"1350":4,"1353":3,"1359":46,"1380":3,"1381":1,"1395":5,"1396":13,"1401":1,"1402":3,"1405":1,"1415":12,"1416":3,"1417":4,"1424":1,"1427":2,"1431":3,"1436":50,"1438":1,"1453":1,"1455":1,"1467":2,"1489":5,"1491":2,"1494":1,"1504":1,"1575":1,"1576":1,"1577":12,"1581":1,"1582":3,"1583":1,"1584":1,"1585":2,"1586":1,"1591":1,"1611":1,"1650":1,"1651":1,"1660":1,"1662":1,"1671":1,"1685":1,"1686":1,"1701":1,"1722":1,"1727":2,"1728":2,"1729":1,"1730":1,"1782":1,"1784":1,"1800":1,"1810":1,"1851":1,"1865":1,"1888":2,"1949":1,"1950":1,"1951":2,"1952":2,"1953":1,"1955":3,"1958":1,"1959":3,"2041":2,"2044":2,"2049":1,"2071":1,"2077":1,"2085":1,"2097":1,"2100":2,"2106":2,"2108":2,"2116":2,"2120":1,"2158":1,"2208":1,"2214":1,"2230":1,"2232":1}}],["company",{"3":{"1359":1,"2220":1}}],["companions",{"3":{"1247":1,"1286":1,"1324":1,"1436":1}}],["companion",{"0":{"1195":1},"3":{"39":1,"66":1,"72":1,"73":1,"78":1,"170":1,"207":1,"406":1,"424":1,"622":1,"659":1,"718":1,"782":1,"825":1,"1147":1,"1190":1,"1237":1,"1241":1,"1247":2,"1259":2,"1270":2,"1285":1,"1286":1,"1300":2,"1311":3,"1323":12,"1324":1,"1350":4,"1359":2,"1380":1,"1391":1,"1395":1,"1396":4,"1415":2,"1416":1,"1427":1,"1428":1,"1436":11,"1438":1,"1459":1,"1474":1,"1476":1,"1479":1,"1481":1,"1486":1,"1487":1,"1488":1,"1492":1,"1577":1,"1602":1,"1626":1,"1658":1,"1674":1,"1756":1,"1855":1,"1968":1,"2076":1,"2228":1,"2234":1}}],["compacthtml",{"3":{"1436":2}}],["compact",{"3":{"881":1,"1223":1,"1229":2,"1233":1,"1286":1,"1289":1,"1292":1,"1300":4,"1311":2,"1324":4,"1328":1,"1344":1,"1350":1,"1359":3,"1384":1,"1392":1,"1395":2,"1396":3,"1402":4,"1403":1,"1416":2,"1433":1,"1436":1,"1559":1,"1591":1,"1596":1,"1597":1}}],["compacted",{"3":{"618":1,"1488":1,"2057":1}}],["compatibility",{"1":{"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1},"3":{"79":1,"99":1,"146":1,"148":1,"151":1,"307":1,"365":1,"556":1,"558":1,"565":1,"566":1,"799":1,"950":1,"965":1,"1033":1,"1211":1,"1229":1,"1247":1,"1259":4,"1286":2,"1300":3,"1323":1,"1324":2,"1339":1,"1350":2,"1359":2,"1436":3,"1455":1,"1504":1,"1546":1,"1732":1,"1748":1,"1889":2,"1892":1,"2112":1}}],["compatible",{"3":{"0":1,"78":1,"136":1,"149":1,"215":1,"412":1,"435":1,"511":1,"568":1,"626":1,"680":1,"681":1,"689":1,"734":1,"757":1,"762":1,"954":1,"1061":1,"1091":1,"1213":2,"1259":1,"1286":3,"1300":1,"1311":1,"1324":1,"1339":1,"1359":1,"1395":1,"1419":1,"1427":1,"1432":1,"1455":1,"1464":1,"1467":1,"1488":1,"1534":1,"1544":1,"1577":2,"1733":1,"1889":1,"2004":1,"2120":1,"2202":2}}],["comparability",{"3":{"1802":1}}],["comparable",{"3":{"735":1,"766":1,"1012":1,"1014":1,"1286":1,"1350":2,"1359":2,"1396":1,"1417":1,"1436":1,"1536":2,"1537":1,"1592":1,"1794":1,"1795":1,"1862":1}}],["comparator",{"3":{"1402":1}}],["comparatively",{"3":{"108":1,"1804":1}}],["comparing",{"3":{"619":1,"964":1,"972":1,"1018":1,"1019":1,"1033":1,"1229":1,"1286":4,"1290":1,"1300":3,"1301":1,"1311":1,"1323":3,"1324":3,"1350":1,"1359":7,"1366":1,"1373":1,"1375":1,"1395":3,"1396":2,"1402":1,"1415":1,"1436":6,"1453":1,"1490":1,"1492":1,"1639":1,"1798":1,"1995":1,"2043":1,"2047":1,"2244":1}}],["comparisons",{"3":{"1241":2,"1247":7,"1273":1,"1286":4,"1359":10,"1396":2,"1496":1,"1630":1,"1631":1,"1635":1,"1637":1,"1639":1}}],["comparison",{"0":{"1528":1,"1579":1,"1593":1},"3":{"0":3,"150":1,"178":1,"179":1,"243":1,"261":1,"279":1,"309":2,"310":1,"311":1,"322":1,"342":1,"627":1,"766":1,"827":2,"838":1,"854":1,"889":1,"946":3,"954":1,"970":1,"972":3,"973":1,"975":1,"997":1,"1020":2,"1033":1,"1038":1,"1074":1,"1161":1,"1184":1,"1229":1,"1237":4,"1247":5,"1259":1,"1270":1,"1271":4,"1281":1,"1286":11,"1294":1,"1295":1,"1300":19,"1301":1,"1311":3,"1323":1,"1324":8,"1337":1,"1339":8,"1350":4,"1352":2,"1355":1,"1359":28,"1369":1,"1395":2,"1396":7,"1402":2,"1415":8,"1417":1,"1427":1,"1436":21,"1438":2,"1522":1,"1587":1,"1630":1,"1631":1,"1673":1,"1765":1,"1872":2,"1874":1,"1877":3,"1899":1,"1900":1,"1902":4,"1905":1,"1996":1,"2073":1,"2107":1,"2232":1}}],["comparemembers",{"3":{"1436":1}}],["comparebyscorethenindex",{"3":{"1359":1}}],["compareexchange",{"2":{"1337":1},"3":{"1337":1,"1339":2}}],["compareto",{"3":{"1286":2}}],["comparers",{"3":{"1300":1}}],["comparertype",{"3":{"1050":1,"1286":2}}],["comparer",{"3":{"585":1,"1050":1,"1212":1,"1222":1,"1229":1,"1237":2,"1247":1,"1286":8,"1300":7,"1324":3,"1339":1,"1359":6,"1395":1,"1396":2,"1431":1,"1436":4,"1438":2,"1496":1}}],["compared",{"0":{"1902":1},"3":{"0":1,"186":1,"499":1,"591":1,"592":1,"628":1,"649":1,"838":1,"946":2,"948":1,"974":1,"1247":3,"1270":2,"1279":1,"1286":3,"1300":8,"1301":1,"1323":2,"1324":2,"1339":1,"1350":1,"1359":4,"1369":1,"1395":1,"1396":4,"1398":1,"1415":1,"1417":1,"1436":7,"1438":1,"1492":1,"1496":1,"1631":1,"1641":1,"1699":1,"1767":1,"1962":2,"2047":1}}],["compares",{"3":{"0":2,"136":1,"318":1,"320":1,"341":1,"350":1,"363":1,"572":1,"608":1,"633":1,"715":1,"727":1,"827":1,"872":1,"889":1,"964":1,"1050":1,"1186":1,"1234":1,"1237":2,"1241":1,"1247":2,"1266":1,"1270":1,"1271":1,"1286":9,"1289":1,"1293":1,"1297":1,"1300":13,"1323":4,"1324":8,"1337":1,"1339":2,"1350":4,"1353":1,"1359":12,"1369":1,"1380":2,"1395":7,"1396":3,"1415":7,"1432":1,"1435":1,"1436":16,"1438":3,"1455":1,"1456":1,"1467":1,"1488":1,"1490":1,"1727":1,"1839":1,"1902":3,"1994":1,"1996":1,"2024":1,"2046":1,"2047":1,"2059":1,"2107":1,"2144":1}}],["compare",{"2":{"549":1},"3":{"0":3,"157":1,"310":1,"318":1,"319":1,"342":2,"343":1,"344":1,"484":1,"490":1,"491":1,"492":1,"493":1,"549":1,"633":1,"838":1,"857":1,"862":1,"973":1,"996":2,"1212":1,"1229":2,"1237":7,"1270":4,"1286":9,"1292":1,"1297":1,"1300":6,"1309":1,"1310":1,"1311":2,"1316":1,"1323":5,"1324":11,"1339":1,"1350":3,"1359":15,"1369":2,"1380":2,"1395":4,"1396":5,"1402":1,"1405":1,"1415":3,"1417":1,"1436":20,"1438":1,"1455":1,"1537":1,"1577":2,"1668":1,"1749":1,"1803":1,"1810":1,"1871":1,"1872":2,"1877":2,"1905":2,"1908":1,"1909":1,"1912":2,"1994":3,"2184":1}}],["compensated",{"3":{"1359":1}}],["compensate",{"3":{"536":1,"1324":1,"2167":1,"2169":1}}],["compensates",{"3":{"536":1,"1416":1,"1436":1,"1749":1}}],["compensating",{"3":{"0":4,"49":1,"166":1,"293":1,"534":2,"536":7,"538":2,"776":1,"809":3,"810":2,"1212":2,"1281":2,"1286":6,"1309":1,"1359":1,"1369":1,"1396":2,"1415":1,"1436":2,"1477":1,"1526":1,"1534":2,"1596":1,"1749":2,"1765":1,"1792":1,"1849":1,"1852":1,"1858":2,"1866":1,"2113":1,"2163":4,"2164":1,"2165":1,"2168":3,"2169":1,"2189":1,"2206":1,"2232":2}}],["compensations",{"3":{"541":1}}],["compensation",{"0":{"2163":1},"1":{"533":1,"534":1,"535":1,"536":1,"537":1,"538":1,"539":1,"540":1,"541":1,"2161":1,"2162":1,"2163":1,"2164":1,"2165":1,"2166":1,"2167":1,"2168":1,"2169":1},"3":{"0":4,"533":1,"534":2,"536":4,"537":1,"538":3,"539":1,"541":2,"793":1,"809":1,"810":1,"813":2,"815":1,"896":2,"901":1,"926":1,"987":2,"992":1,"1012":1,"1093":1,"1147":1,"1212":2,"1286":1,"1359":1,"1526":1,"1547":2,"1572":1,"1577":1,"1591":2,"1665":1,"1749":1,"1755":1,"1779":2,"2160":2,"2161":2,"2163":2,"2167":3,"2168":2,"2169":3,"2180":1,"2206":1,"2215":1,"2232":1}}],["competition",{"3":{"1396":2}}],["competitors",{"3":{"1286":1,"2144":1}}],["competing",{"3":{"0":1,"341":1,"342":2,"1286":2,"1323":2,"1417":1,"1436":2,"1453":1,"1455":1,"1651":1,"1875":1,"1877":1,"2164":1}}],["competencies",{"0":{"2219":1}}],["competent",{"3":{"708":1}}],["competes",{"3":{"905":1,"1323":1,"1369":1}}],["compete",{"3":{"517":1,"1258":2,"1259":2,"1270":1,"1317":1,"1323":1,"1359":3,"1459":1}}],["compound",{"3":{"1259":1,"1339":1,"1687":1}}],["compounds",{"3":{"1259":1,"1324":1}}],["compounding",{"3":{"872":1}}],["composability",{"3":{"546":1,"1154":1,"1359":1}}],["composable",{"1":{"1813":1,"1814":1,"1815":1,"1816":1,"1817":1},"3":{"0":1,"110":1,"544":1,"1202":1,"1203":1,"1229":2,"1247":2,"1265":1,"1270":1,"1271":1,"1286":1,"1309":1,"1350":1,"1359":4,"1396":1,"1416":1,"1427":1,"1662":1,"1812":1,"1813":2,"1814":1,"1817":1,"1832":1,"1997":2,"2206":1}}],["composing",{"3":{"43":1,"545":1,"550":1,"552":1,"749":1,"826":1,"1018":1,"1227":1,"1239":1,"1247":3,"1271":1,"1286":1,"1299":1,"1300":2,"1301":1,"1316":1,"1323":1,"1324":8,"1339":1,"1347":1,"1350":1,"1359":9,"1395":1,"1396":1,"1415":2,"1427":1,"1436":2,"1479":1,"1480":1,"1805":1,"1815":1,"1833":1,"1991":1}}],["compositor",{"0":{"1480":1}}],["compositeformat",{"3":{"1369":1}}],["compositekeything",{"3":{"1199":3,"1207":1}}],["composites",{"3":{"0":1,"545":1,"547":1,"549":1,"1234":1,"1247":6,"1395":1}}],["composite",{"3":{"0":2,"265":1,"268":1,"368":1,"370":2,"374":1,"375":1,"545":2,"546":1,"549":1,"550":2,"551":1,"564":1,"591":1,"594":1,"599":1,"624":1,"626":2,"629":1,"644":1,"1247":4,"1269":1,"1270":1,"1271":6,"1278":1,"1286":6,"1300":1,"1324":1,"1347":2,"1350":7,"1359":21,"1362":4,"1369":11,"1376":1,"1380":1,"1387":1,"1395":13,"1396":6,"1412":1,"1415":2,"1417":1,"1453":1,"1454":2,"1455":1,"1467":1,"1475":1,"1492":1,"1531":1,"1577":1,"1582":1,"1640":1,"1666":1,"1829":1,"2136":1,"2232":1}}],["compositional",{"3":{"1286":1}}],["compositiontestentity",{"3":{"1199":4,"1207":1}}],["composition",{"0":{"1316":1,"1322":1,"1354":1,"1449":1,"1486":1,"1935":1,"2056":1},"1":{"580":1,"581":1,"582":1,"583":1,"584":1,"585":1,"586":1,"587":1,"646":1,"647":1,"648":1,"649":1,"650":1,"651":1,"652":1,"653":1,"1313":1,"1314":1,"1315":1,"1316":1,"1317":1,"1318":1,"1319":1,"1320":1,"1321":1,"1322":1,"1323":1,"1416":1,"1485":1,"1486":1,"1487":1,"1488":1,"1489":1,"1490":1,"1491":1,"1492":1,"1493":1,"1494":1},"3":{"0":9,"115":2,"122":1,"123":1,"135":1,"265":1,"326":1,"543":4,"545":1,"547":1,"549":3,"550":3,"580":1,"582":2,"583":2,"584":2,"585":1,"587":1,"591":1,"646":1,"650":1,"651":1,"680":1,"682":1,"749":1,"825":1,"826":1,"847":1,"856":1,"881":1,"890":1,"913":1,"914":2,"980":1,"984":1,"1016":2,"1018":3,"1021":1,"1066":1,"1192":7,"1202":7,"1203":7,"1212":3,"1229":3,"1247":12,"1260":1,"1269":2,"1270":4,"1271":5,"1276":1,"1285":1,"1286":19,"1300":1,"1301":3,"1302":1,"1307":1,"1309":15,"1310":2,"1311":12,"1312":2,"1313":4,"1314":1,"1317":1,"1320":4,"1321":1,"1322":2,"1323":21,"1324":17,"1328":1,"1329":1,"1339":6,"1340":1,"1348":1,"1350":2,"1352":1,"1353":1,"1354":1,"1359":43,"1368":1,"1369":5,"1370":1,"1379":1,"1380":10,"1381":1,"1392":1,"1395":7,"1396":14,"1400":1,"1402":3,"1403":1,"1413":1,"1415":11,"1416":17,"1417":21,"1418":1,"1421":1,"1427":2,"1428":1,"1436":21,"1438":4,"1449":2,"1485":1,"1487":1,"1488":2,"1490":1,"1492":2,"1496":11,"1513":1,"1526":3,"1555":2,"1577":3,"1586":1,"1641":1,"1650":1,"1660":1,"1662":4,"1790":1,"1791":1,"1815":1,"1829":1,"1833":1,"1834":2,"1884":1,"1886":1,"1915":1,"1923":1,"1924":1,"1935":1,"1941":2,"1944":1,"1948":1,"1956":1,"2032":1,"2056":1,"2060":1,"2074":1,"2077":1,"2115":1,"2119":1,"2123":2,"2172":1,"2227":1,"2232":3}}],["composeconnectionstring",{"3":{"1436":4}}],["composeconfirmationlink",{"3":{"1323":1}}],["composemessage",{"3":{"1286":1}}],["composer",{"3":{"1247":2,"1380":2,"1389":1,"1395":14,"1436":2}}],["composers",{"3":{"1247":2,"1395":1,"1438":1}}],["composeresetlink",{"2":{"857":1},"3":{"854":1,"857":1,"1323":3}}],["composebody",{"3":{"854":1,"1323":2}}],["composeadminconnectionstring",{"2":{"640":1},"3":{"640":1,"1436":1}}],["composedpipeline",{"2":{"121":1,"127":1},"3":{"121":1,"127":1,"1436":2}}],["composed",{"0":{"1317":1,"1829":1},"3":{"0":5,"109":1,"117":1,"265":1,"319":1,"443":1,"544":1,"545":1,"546":1,"547":1,"549":3,"573":1,"599":1,"657":1,"698":1,"699":1,"854":1,"1091":1,"1094":1,"1150":1,"1168":1,"1237":1,"1239":3,"1247":8,"1262":1,"1269":1,"1270":4,"1271":3,"1272":1,"1276":1,"1286":3,"1294":1,"1300":2,"1306":1,"1309":2,"1311":1,"1323":3,"1324":7,"1325":1,"1339":3,"1350":3,"1353":2,"1359":24,"1369":2,"1380":5,"1381":1,"1394":1,"1395":11,"1396":4,"1402":2,"1416":3,"1417":3,"1425":1,"1427":1,"1435":1,"1436":5,"1438":2,"1455":2,"1467":2,"1479":1,"1480":2,"1486":1,"1496":1,"1509":1,"1526":1,"1555":1,"1577":1,"1631":1,"1651":1,"1669":1,"1685":1,"1701":1,"1737":1,"1814":1,"1815":4,"1816":1,"1817":1,"1818":1,"1821":1,"1827":1,"1828":1,"1851":1,"1883":1,"1915":1}}],["composesubject",{"3":{"854":1,"1323":2}}],["composes",{"3":{"0":5,"39":1,"103":1,"109":2,"115":1,"188":1,"246":1,"265":1,"317":1,"319":1,"331":2,"351":1,"545":2,"571":1,"648":1,"657":1,"701":2,"702":1,"827":2,"896":1,"913":1,"917":1,"1018":2,"1089":1,"1154":1,"1168":1,"1212":3,"1220":1,"1229":3,"1232":1,"1237":1,"1238":1,"1246":1,"1247":3,"1267":1,"1270":3,"1271":3,"1276":1,"1284":1,"1286":16,"1300":3,"1309":5,"1311":2,"1312":1,"1313":2,"1318":1,"1323":1,"1324":16,"1337":1,"1338":1,"1339":1,"1349":1,"1350":8,"1353":1,"1359":20,"1360":1,"1366":1,"1368":1,"1369":4,"1380":2,"1389":1,"1395":18,"1396":6,"1412":1,"1415":4,"1416":3,"1417":4,"1418":1,"1427":4,"1435":1,"1436":7,"1438":1,"1467":1,"1492":2,"1507":1,"1526":2,"1577":1,"1632":1,"1653":1,"1663":1,"1672":1,"1702":1,"1805":2,"1815":2,"1824":1,"1825":1,"1851":1,"1883":1,"1920":1,"1964":1,"1992":1,"2180":2,"2230":1,"2232":1}}],["compose",{"0":{"1480":1,"1506":1,"1653":1},"1":{"1828":1,"1829":1,"1830":1,"1831":1,"1832":1,"1833":1,"1834":1},"3":{"0":2,"109":1,"117":1,"187":1,"319":1,"545":1,"618":1,"649":1,"698":1,"749":2,"819":1,"1018":1,"1091":1,"1202":1,"1203":1,"1212":1,"1232":1,"1237":3,"1238":1,"1247":2,"1259":1,"1262":1,"1269":1,"1270":3,"1271":1,"1278":1,"1286":7,"1300":3,"1309":2,"1311":2,"1313":1,"1323":5,"1324":7,"1339":2,"1350":1,"1353":1,"1358":1,"1359":5,"1368":1,"1369":1,"1380":1,"1391":1,"1395":2,"1396":2,"1402":4,"1415":1,"1416":1,"1417":1,"1422":1,"1427":2,"1436":7,"1440":1,"1450":1,"1471":1,"1479":2,"1480":18,"1482":1,"1483":1,"1555":1,"1653":1,"1662":1,"1667":1,"1718":1,"1727":1,"1779":1,"1815":1,"1817":2,"1824":1,"1828":2,"1834":2,"1855":1,"1994":1,"1997":1,"2005":1,"2038":1,"2080":1,"2170":1,"2206":1,"2227":1}}],["componentparameters",{"3":{"1436":1}}],["componentization",{"3":{"1417":1}}],["componenttype",{"3":{"1324":1,"1395":1,"1416":4}}],["componentbase",{"3":{"1324":11,"1383":1,"1395":2,"1396":2,"1415":4}}],["componentmodel",{"3":{"1259":1,"1286":4,"1300":11,"1309":2,"1311":2,"1323":4,"1324":12,"1339":3,"1395":10,"1396":2,"1427":2,"1436":1}}],["componentspage",{"3":{"1643":1,"1714":1}}],["componentspagee2etests",{"3":{"618":1,"1199":1,"1207":2,"1436":2,"1577":2,"1643":1,"1714":1}}],["componentsgallery",{"3":{"1324":1,"1436":1}}],["componentssnapshottests",{"3":{"1199":3,"1207":6,"1417":1,"1436":3,"1438":4,"1525":1,"1526":2,"1531":1,"1535":1}}],["components",{"1":{"1324":1},"2":{"650":1,"1324":2,"1395":1,"1416":1},"3":{"0":3,"88":1,"109":2,"135":1,"265":1,"273":1,"275":1,"370":1,"412":1,"413":4,"415":1,"426":1,"490":1,"556":7,"560":1,"618":1,"648":1,"649":2,"650":2,"651":2,"653":1,"682":2,"861":2,"863":1,"864":1,"931":1,"954":1,"1004":1,"1018":1,"1059":5,"1062":1,"1119":1,"1184":1,"1202":1,"1203":9,"1207":94,"1212":1,"1213":1,"1229":2,"1279":1,"1286":2,"1300":1,"1311":3,"1323":1,"1324":99,"1339":1,"1381":1,"1389":2,"1395":32,"1396":15,"1402":2,"1414":1,"1415":5,"1416":16,"1417":61,"1426":1,"1428":1,"1432":3,"1433":1,"1434":2,"1436":42,"1437":4,"1438":16,"1453":1,"1454":1,"1486":1,"1487":2,"1488":3,"1491":1,"1496":1,"1525":1,"1526":4,"1530":1,"1531":2,"1532":1,"1535":1,"1555":7,"1556":2,"1557":1,"1564":1,"1572":2,"1577":10,"1586":4,"1591":1,"1597":1,"1641":2,"1643":2,"1644":3,"1653":2,"1669":2,"1687":3,"1760":1,"1898":1,"2043":1,"2054":1,"2073":1,"2075":2,"2077":2,"2078":1,"2079":1,"2080":1,"2116":1,"2118":1,"2119":1,"2121":2,"2122":1,"2176":1,"2202":1,"2227":1}}],["component",{"0":{"1432":1,"1555":1,"2078":1},"1":{"951":1,"952":1,"953":1,"954":1,"955":1,"956":1,"957":1,"958":1,"959":1,"960":1},"2":{"1381":1},"3":{"0":12,"88":1,"109":4,"135":4,"139":2,"165":1,"189":1,"201":1,"265":2,"266":2,"267":1,"273":5,"275":1,"374":1,"375":1,"397":1,"407":1,"412":1,"413":1,"423":1,"427":1,"482":3,"484":1,"511":1,"556":3,"577":1,"647":1,"649":7,"650":1,"651":1,"682":3,"683":3,"684":1,"689":1,"694":1,"827":2,"881":1,"910":1,"915":1,"931":1,"951":1,"952":1,"953":4,"954":6,"955":2,"956":3,"957":1,"960":2,"996":1,"999":1,"1004":2,"1057":1,"1059":2,"1201":1,"1202":1,"1203":1,"1212":4,"1213":2,"1216":1,"1229":1,"1237":1,"1280":1,"1286":3,"1300":2,"1309":1,"1310":1,"1311":9,"1323":3,"1324":180,"1333":1,"1339":4,"1350":2,"1359":3,"1381":2,"1383":1,"1384":1,"1385":1,"1387":1,"1389":3,"1390":1,"1391":1,"1393":1,"1395":118,"1396":42,"1402":16,"1409":1,"1414":2,"1415":7,"1416":22,"1417":102,"1426":1,"1427":1,"1428":2,"1429":1,"1431":1,"1432":3,"1434":1,"1436":79,"1437":5,"1438":9,"1443":1,"1447":1,"1450":1,"1455":3,"1461":1,"1465":1,"1467":4,"1474":2,"1476":1,"1487":1,"1488":4,"1491":5,"1496":3,"1497":1,"1499":1,"1513":1,"1526":5,"1530":1,"1531":2,"1532":1,"1536":1,"1544":1,"1555":2,"1556":2,"1557":3,"1565":2,"1572":2,"1577":3,"1586":1,"1591":1,"1627":1,"1643":1,"1645":1,"1653":2,"1660":2,"1669":6,"1671":2,"1702":2,"1711":1,"1714":1,"1750":1,"1759":2,"1773":1,"1796":1,"1865":1,"1868":1,"2043":2,"2054":1,"2055":1,"2059":1,"2072":2,"2075":1,"2077":2,"2078":2,"2079":2,"2080":3,"2083":4,"2085":1,"2086":1,"2116":4,"2117":2,"2118":2,"2119":2,"2121":2,"2123":3,"2147":1,"2156":2,"2202":1,"2230":1,"2232":2}}],["comes",{"3":{"0":3,"101":1,"195":2,"229":1,"318":1,"360":1,"402":1,"413":1,"446":1,"572":1,"599":1,"601":1,"635":1,"651":1,"665":1,"673":1,"678":1,"690":1,"692":1,"697":1,"716":1,"726":1,"741":2,"766":1,"768":1,"818":1,"905":1,"915":1,"939":1,"953":1,"972":1,"982":1,"988":1,"996":1,"1018":1,"1042":1,"1050":1,"1115":1,"1184":1,"1225":1,"1228":1,"1229":1,"1237":2,"1244":2,"1247":2,"1254":1,"1255":1,"1259":3,"1270":3,"1271":1,"1275":2,"1286":20,"1294":1,"1300":9,"1301":4,"1309":7,"1311":10,"1312":1,"1323":5,"1324":13,"1332":1,"1336":1,"1339":3,"1350":5,"1359":37,"1364":1,"1369":3,"1373":1,"1380":3,"1388":1,"1395":28,"1396":22,"1402":6,"1415":9,"1417":3,"1419":1,"1422":1,"1425":1,"1435":1,"1436":5,"1438":2,"1441":1,"1447":1,"1451":1,"1455":1,"1460":1,"1466":1,"1467":1,"1474":1,"1477":1,"1484":1,"1491":1,"1492":1,"1498":1,"1591":1,"1627":1,"1653":1,"1702":2,"1710":1,"1727":1,"1825":1,"1837":1,"1923":1,"1927":1,"1948":1,"1951":1,"1954":1,"1982":1,"1997":1,"2005":1,"2011":1,"2015":1,"2018":1,"2019":1,"2034":1,"2074":1,"2096":2,"2111":1,"2112":1,"2140":1,"2146":1,"2161":2,"2165":1,"2168":1,"2184":1}}],["come",{"0":{"140":1,"1442":1,"1787":1},"3":{"0":2,"95":1,"135":1,"219":1,"265":1,"273":1,"282":1,"329":1,"360":1,"372":1,"397":1,"400":1,"401":1,"402":1,"529":1,"544":1,"583":1,"617":1,"626":1,"633":1,"640":1,"649":1,"657":1,"703":1,"726":1,"741":2,"774":1,"818":1,"827":1,"889":1,"905":1,"907":1,"913":1,"914":1,"954":1,"1069":1,"1090":1,"1092":1,"1099":1,"1124":2,"1186":1,"1194":1,"1195":2,"1211":1,"1217":1,"1231":1,"1237":1,"1241":1,"1242":1,"1247":4,"1256":1,"1259":4,"1262":1,"1271":1,"1286":17,"1289":1,"1300":2,"1306":1,"1309":3,"1311":3,"1312":1,"1315":1,"1316":1,"1323":2,"1324":18,"1328":1,"1331":1,"1332":1,"1339":12,"1343":1,"1344":1,"1345":1,"1350":9,"1354":1,"1359":6,"1369":2,"1384":1,"1388":1,"1395":13,"1396":9,"1399":1,"1402":7,"1409":1,"1410":1,"1414":2,"1415":5,"1416":2,"1417":5,"1425":1,"1427":2,"1433":1,"1436":12,"1438":3,"1441":1,"1442":2,"1443":2,"1445":1,"1449":1,"1454":1,"1455":1,"1467":1,"1485":1,"1489":1,"1492":1,"1503":1,"1510":1,"1627":1,"1631":2,"1646":1,"1651":1,"1677":1,"1702":1,"1730":1,"1731":1,"1760":1,"1761":1,"1765":1,"1826":1,"1843":1,"1876":1,"1881":1,"1982":1,"1985":1,"1986":1,"1987":1,"2002":1,"2053":1,"2076":1,"2081":1,"2091":1,"2112":1,"2128":1,"2142":1}}],["commodity",{"3":{"1436":1,"1900":1}}],["commons",{"3":{"1436":2}}],["commontags",{"2":{"1469":1},"3":{"1436":1,"1465":1,"1467":2,"1469":1,"1526":1,"1535":1,"1591":1}}],["commonest",{"3":{"1270":1}}],["commonauditdeletioncolumnsandoutboxordering",{"3":{"1209":6}}],["commonarchitecturemap",{"2":{"80":1,"132":1,"1161":1,"1891":1,"2103":1},"3":{"80":2,"132":1,"1161":1,"1199":36,"1207":2,"1323":2,"1324":2,"1436":84,"1487":1,"1489":4,"1577":1,"1891":1,"2103":1}}],["commonv1141pushnotificationdedupindexsoftdeletefilter",{"3":{"1209":2,"1286":1}}],["commonv1120outboxleaseandsoftdeleteindexfilters",{"3":{"564":1,"891":4,"1209":8}}],["commonvalidationrules",{"3":{"1207":12,"1271":37,"1289":1,"1300":5,"1359":67,"1436":2,"1496":2,"1586":1,"1829":1}}],["commonvalidationrulestests",{"3":{"1199":1,"1207":8,"1271":4}}],["commoninvariantstests",{"3":{"1199":1,"1207":3,"1237":1}}],["commoninvariants",{"2":{"1271":1,"1350":2,"1359":1,"1402":1,"1405":1,"2085":1},"3":{"1199":26,"1203":1,"1207":2,"1230":1,"1234":3,"1237":28,"1271":9,"1309":6,"1311":2,"1344":1,"1350":42,"1359":15,"1396":11,"1402":18,"1405":1,"1415":7,"1436":1,"1662":1,"1685":1,"2085":2}}],["commonly",{"3":{"122":1,"1263":1,"1270":1,"1271":1,"1282":1,"1291":1,"1295":1,"2015":1}}],["commonforwardedheaderstests",{"3":{"1199":1,"1207":2}}],["commonforwardedheadersextensions",{"3":{"220":1,"749":2,"1124":1,"1186":1,"1199":1,"1203":1,"1207":2,"1208":1,"1311":7,"1496":1}}],["commonforwardedheaders",{"2":{"220":1,"747":1,"749":1,"1124":1},"3":{"0":1,"220":2,"747":1,"749":4,"751":2,"1124":3,"1199":4,"1203":1,"1207":2,"1311":16,"1496":1}}],["common",{"0":{"95":1,"465":1,"1442":1,"1443":1,"1444":1,"1453":1,"1454":1,"1602":1,"1799":1,"1838":1,"2022":1,"2227":1},"1":{"936":1,"937":1,"938":1,"939":1,"940":1,"941":1,"942":1,"1088":1,"1089":1,"1090":1,"1091":1,"1092":1,"1093":1,"1094":1,"1095":1,"1096":1,"1190":1,"1191":1,"1192":1,"1193":1,"1194":1,"1195":1,"1324":1,"1418":1,"1419":1,"1420":1,"1421":1,"1422":1,"1423":1,"1424":1,"1425":1,"1426":1,"1427":1,"1573":1,"1574":1,"1575":1,"1576":1,"1577":1,"1578":1,"1579":1,"1580":1,"1581":1,"1582":1,"1583":1,"1584":1,"1585":1,"1586":1,"1646":1,"1647":1,"1648":1,"1649":1,"1650":1,"1651":1,"1652":1,"1653":1,"1654":1,"1655":1,"1656":1,"1657":1,"1658":1,"1659":1,"1660":1,"1661":1,"1662":1,"1663":1,"1664":1,"1665":1,"1666":1,"1667":1,"1668":1,"1669":1,"1670":1,"1671":1,"1672":1,"1673":1,"1674":1,"1675":1,"1692":1,"1693":1,"1694":1,"1695":1,"1696":1,"1697":1,"1698":1,"1699":1,"1700":1,"1701":1,"1702":1,"1703":1,"1704":1,"1705":1,"1717":1,"1718":1,"1719":1,"1720":1,"1721":1,"1722":1,"1723":1,"1724":1,"1725":1,"1778":1,"1779":1},"2":{"24":1,"39":3,"53":1,"61":2,"67":1,"68":1,"70":1,"78":1,"85":1,"99":1,"100":1,"107":2,"109":1,"111":1,"117":1,"124":1,"126":1,"130":1,"132":2,"135":2,"137":1,"138":1,"139":3,"140":1,"141":6,"142":6,"145":2,"147":1,"150":1,"152":2,"160":1,"180":1,"186":1,"190":1,"207":2,"214":2,"216":1,"225":2,"241":2,"247":1,"250":1,"252":1,"255":2,"258":1,"259":2,"261":1,"265":1,"268":3,"273":1,"281":2,"310":1,"359":2,"370":1,"373":1,"388":1,"395":4,"400":7,"404":2,"406":1,"408":1,"412":1,"436":1,"460":1,"481":1,"482":3,"486":3,"487":3,"488":3,"489":3,"490":3,"491":3,"492":3,"493":3,"494":3,"495":3,"509":6,"511":3,"514":1,"526":1,"527":2,"528":3,"558":1,"572":2,"576":1,"577":1,"578":2,"591":1,"617":1,"618":1,"634":1,"635":1,"638":3,"648":1,"649":2,"681":1,"683":1,"684":1,"686":2,"731":1,"733":1,"789":1,"821":1,"822":3,"823":3,"825":2,"826":3,"832":1,"836":1,"838":1,"840":1,"861":1,"880":1,"897":2,"899":1,"906":1,"912":1,"914":1,"917":1,"936":1,"938":2,"939":6,"941":2,"942":1,"953":1,"954":1,"957":1,"963":1,"966":1,"982":1,"984":1,"1004":2,"1012":1,"1016":1,"1036":3,"1044":1,"1051":1,"1057":1,"1058":1,"1062":1,"1066":1,"1067":2,"1068":3,"1069":1,"1074":1,"1089":3,"1090":1,"1091":1,"1093":1,"1124":2,"1161":2,"1191":1,"1192":1,"1194":1,"1200":1,"1201":1,"1203":2,"1211":1,"1213":5,"1214":1,"1215":2,"1217":1,"1222":1,"1229":3,"1230":2,"1236":1,"1237":3,"1247":3,"1256":1,"1259":6,"1264":1,"1268":1,"1270":6,"1271":1,"1275":1,"1286":5,"1287":2,"1300":2,"1301":3,"1309":2,"1310":2,"1317":1,"1321":1,"1323":5,"1324":1,"1325":5,"1326":1,"1327":1,"1328":1,"1329":1,"1330":1,"1333":1,"1336":1,"1337":1,"1339":1,"1341":1,"1351":1,"1386":1,"1414":1,"1416":3,"1417":9,"1418":4,"1425":1,"1428":1,"1430":3,"1434":3,"1436":2,"1437":4,"1438":1,"1439":1,"1445":1,"1451":1,"1452":1,"1453":3,"1454":2,"1456":1,"1460":1,"1476":1,"1480":1,"1487":3,"1488":1,"1490":2,"1496":3,"1497":2,"1503":8,"1509":1,"1513":2,"1523":1,"1525":1,"1526":1,"1527":2,"1535":1,"1576":1,"1577":1,"1578":1,"1585":3,"1599":1,"1605":1,"1615":2,"1642":1,"1643":1,"1648":1,"1650":5,"1653":2,"1654":1,"1656":2,"1660":12,"1661":1,"1675":1,"1677":1,"1693":1,"1702":5,"1711":1,"1732":1,"1739":1,"1741":1,"1761":1,"1781":1,"1782":2,"1790":1,"1793":1,"1805":1,"1807":1,"1812":1,"1815":1,"1817":1,"1827":1,"1828":1,"1829":1,"1834":1,"1843":1,"1846":1,"1853":1,"1862":1,"1865":1,"1868":1,"1877":1,"1886":1,"1892":1,"1895":1,"1896":1,"1899":1,"1902":2,"1905":1,"1912":1,"1919":1,"1922":1,"1924":1,"1930":1,"1935":1,"1941":1,"1950":1,"1953":1,"1959":1,"1962":1,"1965":1,"1972":1,"1975":1,"1979":1,"1985":1,"1991":1,"1997":1,"2002":1,"2004":2,"2006":9,"2008":1,"2013":8,"2014":3,"2016":1,"2022":1,"2024":1,"2028":2,"2030":1,"2038":1,"2042":1,"2044":1,"2046":1,"2049":1,"2055":2,"2057":1,"2059":2,"2060":1,"2063":1,"2070":1,"2071":2,"2077":1,"2080":1,"2086":1,"2100":2,"2101":1,"2108":1,"2111":1,"2115":1,"2116":1,"2120":3,"2123":1,"2128":1,"2131":1,"2133":1,"2139":1,"2142":1,"2146":1,"2149":1,"2150":1,"2151":1,"2152":1,"2153":1,"2156":1,"2157":3,"2160":9,"2169":1,"2172":1,"2177":1,"2178":1,"2180":2,"2191":1,"2193":2,"2203":1,"2211":1},"3":{"0":96,"4":1,"5":1,"11":1,"15":4,"17":4,"18":1,"19":3,"22":2,"23":1,"24":11,"25":9,"26":18,"27":17,"31":5,"34":2,"39":9,"43":4,"46":1,"53":3,"54":2,"59":2,"61":4,"63":2,"67":1,"68":7,"69":1,"70":5,"71":4,"72":6,"74":14,"76":1,"78":2,"79":2,"80":6,"81":10,"82":4,"85":1,"95":3,"98":2,"99":3,"100":5,"103":5,"107":2,"108":1,"109":42,"110":1,"111":5,"115":1,"117":7,"121":10,"122":5,"123":10,"124":1,"125":10,"126":7,"128":4,"130":6,"132":4,"133":1,"134":1,"135":25,"136":7,"137":6,"138":5,"139":6,"140":4,"141":7,"142":14,"145":5,"146":3,"147":23,"149":2,"150":11,"152":5,"157":5,"160":8,"161":6,"164":2,"166":10,"168":1,"170":3,"171":3,"173":1,"175":5,"178":6,"179":11,"180":5,"181":2,"186":18,"189":11,"190":12,"193":2,"196":5,"197":1,"198":7,"200":4,"201":3,"202":14,"203":2,"207":2,"208":1,"214":4,"216":5,"217":2,"218":2,"219":6,"220":8,"225":9,"228":8,"230":8,"231":8,"235":12,"237":2,"238":1,"241":2,"243":28,"245":8,"246":17,"247":1,"250":2,"251":1,"252":3,"254":1,"255":11,"256":8,"257":2,"258":8,"259":13,"260":3,"261":5,"265":30,"268":5,"272":1,"273":3,"275":1,"281":3,"284":7,"285":6,"286":1,"290":2,"295":6,"296":2,"300":4,"301":1,"303":8,"305":14,"306":8,"310":6,"312":1,"314":6,"318":9,"325":3,"326":2,"328":1,"330":8,"331":1,"333":12,"336":1,"337":4,"341":29,"342":2,"343":6,"344":11,"345":2,"350":2,"352":2,"353":8,"359":6,"365":2,"366":1,"368":1,"369":2,"370":4,"373":10,"374":2,"375":2,"384":11,"388":1,"390":2,"391":6,"392":2,"395":6,"397":11,"400":16,"401":5,"402":3,"404":7,"406":1,"407":12,"408":8,"409":6,"412":2,"413":14,"414":1,"415":3,"416":2,"418":6,"419":1,"420":3,"423":4,"424":1,"426":4,"427":3,"428":7,"430":4,"434":3,"436":3,"442":3,"443":4,"444":4,"448":8,"450":3,"453":1,"454":2,"457":1,"459":16,"460":2,"463":6,"464":6,"465":4,"466":1,"468":3,"469":9,"470":12,"475":6,"476":8,"477":13,"481":2,"482":6,"484":2,"486":25,"487":14,"488":8,"489":15,"490":19,"491":15,"492":15,"493":15,"494":4,"495":9,"497":13,"498":1,"499":4,"502":3,"507":30,"509":12,"511":9,"512":2,"513":6,"514":5,"522":2,"523":4,"524":2,"526":3,"527":4,"528":6,"530":1,"531":3,"532":1,"534":1,"536":17,"538":2,"539":3,"540":4,"543":1,"544":2,"545":13,"547":1,"549":6,"550":2,"552":3,"556":16,"558":2,"562":1,"564":4,"566":1,"570":2,"572":13,"576":9,"577":8,"578":2,"579":1,"583":20,"585":2,"586":6,"587":2,"590":1,"591":13,"592":2,"593":3,"594":1,"597":1,"599":6,"601":3,"603":2,"604":1,"609":5,"617":2,"618":12,"620":1,"621":1,"622":1,"624":1,"626":18,"628":2,"629":5,"632":2,"633":2,"634":5,"635":2,"638":4,"640":15,"642":2,"644":2,"648":1,"649":27,"650":1,"652":2,"656":2,"657":9,"665":9,"668":2,"669":1,"674":68,"675":4,"676":18,"677":1,"681":2,"682":6,"683":2,"684":1,"685":1,"686":2,"688":1,"689":1,"690":1,"691":1,"692":2,"693":1,"696":2,"697":3,"698":30,"700":3,"702":18,"703":13,"705":1,"706":2,"707":8,"713":1,"715":10,"720":6,"723":1,"724":4,"725":8,"727":4,"731":1,"732":2,"733":11,"736":9,"739":1,"740":4,"741":9,"742":1,"744":1,"747":1,"749":6,"766":2,"774":6,"776":7,"782":14,"789":3,"790":1,"792":3,"798":12,"799":9,"803":4,"804":5,"805":3,"806":3,"809":3,"810":1,"813":2,"814":2,"818":2,"819":34,"821":1,"822":8,"823":3,"825":5,"826":6,"827":20,"830":5,"831":2,"832":9,"833":14,"836":1,"837":2,"838":5,"840":1,"846":5,"849":5,"850":2,"854":4,"857":7,"860":1,"861":10,"863":3,"864":1,"865":1,"880":3,"881":36,"883":5,"884":4,"888":4,"890":2,"892":2,"897":15,"899":1,"900":2,"904":2,"905":23,"906":14,"907":2,"908":7,"912":2,"913":14,"914":5,"915":2,"917":4,"920":1,"921":3,"922":9,"923":1,"926":5,"930":1,"931":7,"936":1,"938":3,"939":10,"940":1,"941":2,"942":1,"945":1,"946":18,"949":1,"950":1,"953":2,"954":25,"955":1,"956":5,"957":1,"958":4,"959":6,"960":6,"963":7,"964":14,"966":3,"971":2,"972":12,"975":7,"979":9,"980":11,"982":3,"983":1,"984":1,"987":4,"988":4,"990":2,"991":1,"995":6,"996":9,"999":3,"1003":5,"1004":19,"1006":5,"1007":3,"1010":2,"1012":7,"1014":1,"1016":3,"1018":6,"1034":21,"1036":3,"1037":2,"1041":8,"1042":38,"1043":2,"1044":7,"1045":4,"1049":7,"1050":38,"1051":1,"1052":4,"1054":4,"1055":4,"1057":2,"1058":8,"1059":58,"1062":4,"1066":9,"1067":20,"1068":5,"1069":6,"1070":3,"1073":2,"1074":19,"1075":4,"1077":1,"1078":2,"1082":4,"1083":6,"1085":3,"1086":2,"1088":1,"1089":10,"1090":1,"1091":38,"1093":3,"1094":2,"1095":2,"1100":4,"1103":4,"1108":15,"1116":6,"1117":1,"1119":4,"1122":2,"1123":7,"1124":27,"1125":7,"1126":6,"1127":3,"1128":4,"1132":4,"1133":12,"1135":1,"1136":1,"1137":1,"1140":14,"1150":16,"1160":7,"1161":7,"1163":1,"1164":1,"1168":22,"1170":1,"1171":1,"1173":1,"1174":4,"1175":54,"1176":1,"1180":1,"1182":3,"1183":8,"1184":40,"1185":3,"1186":4,"1187":2,"1189":1,"1190":1,"1191":5,"1192":9,"1194":1,"1195":4,"1199":3206,"1200":2,"1201":6,"1202":6,"1203":1243,"1204":3,"1206":45,"1207":10164,"1208":192,"1211":11,"1212":19,"1213":8,"1214":8,"1215":4,"1216":1,"1217":1,"1219":6,"1220":3,"1221":1,"1222":7,"1223":4,"1224":2,"1225":7,"1226":4,"1227":6,"1228":4,"1229":131,"1230":3,"1231":12,"1232":10,"1233":14,"1234":24,"1235":4,"1236":19,"1237":287,"1238":1,"1239":17,"1240":8,"1241":12,"1242":4,"1243":10,"1244":4,"1245":2,"1246":6,"1247":318,"1249":9,"1250":2,"1251":3,"1252":4,"1253":1,"1254":4,"1255":1,"1256":3,"1257":10,"1258":5,"1259":281,"1261":4,"1262":12,"1263":4,"1264":5,"1265":4,"1266":2,"1267":10,"1268":4,"1269":4,"1270":427,"1271":150,"1273":10,"1274":4,"1275":5,"1276":16,"1277":8,"1278":18,"1279":18,"1280":3,"1281":6,"1282":6,"1283":4,"1284":4,"1285":14,"1286":1513,"1287":2,"1288":16,"1289":19,"1290":22,"1291":24,"1292":12,"1293":18,"1294":18,"1295":12,"1296":10,"1297":60,"1298":12,"1299":4,"1300":2115,"1301":142,"1302":13,"1303":17,"1304":10,"1305":10,"1306":16,"1307":18,"1308":10,"1309":362,"1310":104,"1311":829,"1312":84,"1314":2,"1315":10,"1316":22,"1317":23,"1318":15,"1319":7,"1320":57,"1321":5,"1322":29,"1323":730,"1324":1580,"1325":14,"1326":5,"1327":5,"1328":5,"1329":3,"1330":11,"1331":2,"1332":15,"1333":22,"1334":14,"1335":2,"1336":7,"1337":15,"1338":16,"1339":483,"1341":4,"1342":1,"1348":1,"1350":79,"1351":1,"1352":1,"1353":2,"1354":1,"1359":505,"1361":2,"1362":4,"1363":4,"1366":2,"1368":1,"1369":23,"1371":2,"1372":6,"1376":1,"1378":3,"1379":2,"1380":62,"1381":1,"1382":1,"1383":5,"1384":7,"1386":7,"1387":3,"1388":2,"1389":1,"1392":1,"1395":163,"1396":152,"1399":1,"1400":1,"1402":39,"1404":2,"1414":5,"1415":184,"1416":39,"1417":792,"1418":6,"1419":4,"1420":12,"1421":2,"1422":6,"1423":11,"1424":10,"1425":8,"1426":2,"1427":165,"1428":11,"1429":9,"1430":18,"1431":37,"1432":9,"1433":21,"1434":13,"1435":14,"1436":3272,"1437":49,"1438":95,"1439":2,"1441":21,"1442":17,"1443":38,"1444":4,"1445":3,"1447":10,"1448":1,"1449":6,"1450":1,"1451":2,"1452":2,"1453":14,"1454":12,"1455":11,"1456":3,"1459":22,"1460":7,"1461":3,"1467":35,"1470":1,"1474":1,"1475":4,"1476":1,"1480":2,"1481":1,"1484":1,"1485":2,"1486":26,"1487":40,"1488":74,"1489":43,"1490":14,"1491":3,"1492":38,"1496":343,"1497":2,"1498":2,"1500":2,"1503":12,"1504":1,"1505":2,"1509":1,"1513":2,"1514":1,"1517":1,"1520":1,"1521":1,"1522":2,"1523":2,"1524":2,"1525":3,"1526":69,"1527":4,"1529":1,"1531":15,"1532":1,"1534":5,"1535":8,"1544":1,"1550":1,"1555":1,"1569":1,"1570":1,"1573":3,"1574":1,"1575":1,"1576":2,"1577":108,"1578":2,"1580":1,"1581":1,"1582":35,"1583":8,"1584":1,"1585":8,"1586":14,"1587":2,"1588":1,"1589":3,"1591":40,"1592":1,"1593":1,"1594":2,"1595":3,"1596":15,"1597":3,"1598":1,"1599":4,"1600":8,"1601":1,"1605":1,"1611":1,"1615":2,"1619":4,"1627":5,"1631":1,"1641":3,"1642":1,"1643":1,"1646":3,"1648":11,"1649":3,"1650":6,"1653":16,"1654":2,"1655":3,"1656":2,"1658":1,"1659":2,"1660":17,"1661":1,"1675":3,"1676":1,"1677":2,"1681":1,"1682":1,"1692":2,"1693":3,"1695":2,"1699":1,"1702":7,"1703":1,"1706":1,"1707":1,"1708":1,"1711":1,"1712":2,"1717":1,"1726":1,"1727":4,"1731":1,"1732":2,"1736":1,"1739":1,"1741":1,"1761":4,"1764":3,"1770":2,"1775":1,"1778":2,"1780":1,"1781":2,"1782":3,"1784":1,"1785":1,"1787":2,"1788":1,"1790":3,"1793":4,"1794":1,"1799":2,"1801":1,"1802":4,"1803":2,"1805":3,"1806":1,"1807":3,"1808":1,"1810":4,"1812":3,"1815":4,"1817":3,"1820":1,"1826":1,"1827":4,"1828":2,"1829":1,"1834":4,"1838":2,"1843":1,"1846":4,"1847":1,"1853":3,"1854":1,"1860":1,"1861":1,"1862":4,"1865":2,"1868":4,"1877":4,"1879":1,"1880":1,"1886":3,"1889":1,"1891":4,"1892":4,"1894":1,"1895":3,"1896":1,"1897":1,"1899":3,"1902":4,"1903":1,"1905":4,"1906":1,"1909":2,"1910":1,"1912":3,"1913":1,"1919":1,"1922":2,"1923":1,"1924":4,"1927":2,"1929":1,"1930":5,"1931":2,"1935":1,"1939":1,"1941":4,"1942":1,"1947":1,"1950":3,"1951":1,"1953":1,"1955":2,"1959":3,"1961":1,"1962":1,"1963":1,"1965":4,"1968":2,"1972":4,"1975":1,"1979":4,"1981":1,"1985":4,"1991":4,"1993":1,"1994":7,"1995":1,"1997":4,"1999":1,"2000":9,"2001":1,"2002":4,"2003":2,"2004":3,"2006":12,"2008":1,"2013":9,"2014":6,"2015":2,"2016":1,"2022":1,"2024":3,"2028":4,"2030":1,"2036":1,"2038":3,"2039":2,"2041":5,"2042":6,"2043":1,"2044":10,"2046":3,"2047":2,"2049":4,"2050":2,"2052":1,"2055":6,"2057":2,"2059":2,"2060":4,"2061":1,"2062":1,"2063":1,"2064":2,"2066":4,"2069":2,"2070":1,"2071":2,"2075":1,"2077":1,"2080":3,"2081":1,"2083":14,"2085":6,"2086":3,"2087":1,"2089":1,"2098":4,"2099":1,"2100":4,"2101":3,"2105":1,"2106":3,"2107":1,"2108":7,"2109":1,"2111":4,"2112":3,"2113":1,"2115":4,"2116":1,"2117":1,"2119":2,"2120":5,"2122":3,"2123":6,"2124":1,"2127":1,"2128":3,"2131":4,"2133":4,"2134":2,"2136":1,"2137":1,"2138":2,"2139":3,"2140":1,"2142":1,"2146":4,"2149":3,"2150":5,"2151":1,"2152":1,"2153":5,"2154":1,"2156":10,"2157":3,"2160":13,"2163":1,"2169":4,"2171":2,"2172":3,"2177":1,"2178":3,"2179":1,"2180":7,"2182":2,"2191":1,"2193":5,"2195":2,"2203":4,"2204":3,"2211":3,"2221":1,"2227":23,"2229":1,"2231":1,"2232":6,"2234":3}}],["communities",{"3":{"2238":1}}],["communitytoolkit",{"3":{"1416":2,"1417":2}}],["community",{"1":{"2238":1,"2239":1,"2240":1,"2241":1,"2242":1,"2243":1},"2":{"1364":1},"3":{"0":2,"150":2,"1035":1,"1075":1,"1077":1,"1079":1,"1340":1,"1342":3,"1350":11,"1364":2,"1369":7,"1384":1,"1392":1,"1395":4,"1417":1,"1629":1,"1631":5,"2215":1,"2216":2,"2225":1,"2238":2,"2239":1,"2240":3,"2241":1,"2245":1}}],["communicate",{"3":{"1359":1,"1772":1}}],["communicates",{"3":{"1237":1}}],["communication",{"0":{"1772":1},"3":{"59":1,"1350":1,"1359":2,"1436":1,"1489":1,"1544":1,"1556":1,"1770":1}}],["commas",{"3":{"1436":4}}],["comma",{"3":{"26":1,"219":1,"330":1,"633":1,"972":1,"974":1,"1241":1,"1247":7,"1253":1,"1259":1,"1300":3,"1311":1,"1312":2,"1318":1,"1323":2,"1324":2,"1380":2,"1436":6,"1496":1,"1988":1}}],["command+handler",{"3":{"1591":1}}],["command+handler+request+validator+mapper",{"3":{"1591":1}}],["command+validator+handler+dto",{"3":{"1526":1}}],["commandorrequestsuffix",{"3":{"1436":1}}],["commandwithitsownvalidator",{"3":{"1436":2}}],["commandwithnovalidation",{"3":{"1436":2}}],["commandcoveredthroughtherequestbridge",{"3":{"1436":3}}],["commandinventory",{"3":{"1436":5}}],["commandpipeline",{"3":{"1436":2}}],["commandflags",{"3":{"1323":1}}],["commandtype",{"3":{"1286":4,"1323":2,"2186":1}}],["commandtypecache",{"3":{"1286":2}}],["commandtimeout",{"3":{"1286":3}}],["commandtimeoutseconds",{"2":{"71":1,"2032":1},"3":{"71":1,"819":1,"1286":4,"1320":1,"1664":1,"2032":1}}],["commandhandlers",{"3":{"1436":1}}],["commandhandlersreturnresult",{"3":{"1436":1}}],["commandhandleraskingforthewriterepository",{"3":{"1436":2}}],["commandhandler",{"3":{"1270":1}}],["commandvalidators",{"3":{"1207":1,"1415":1,"1436":12,"1489":1}}],["commandvalidatorfixtures",{"3":{"1207":48,"1436":52}}],["commandvalidatortests",{"3":{"1207":4,"1359":7}}],["commandvalidatorcoveragefitnesstests",{"2":{"1489":1},"3":{"1199":1,"1207":3,"1436":14,"1489":1}}],["commandvalidatorcoveragetests",{"3":{"128":2,"1199":1,"1207":2,"1300":2,"1359":1,"1415":6,"1436":6,"1489":2}}],["commandvalidatorcoveragetestsbase",{"2":{"117":1,"128":1},"3":{"117":2,"128":2,"1199":2,"1207":2,"1436":11}}],["commanddecoratorpipelinetests",{"3":{"1199":1,"1207":6,"1270":1}}],["commandduration",{"2":{"397":1},"3":{"397":1,"1270":3}}],["commandname",{"3":{"405":1,"1270":5,"1311":1}}],["commandrequestvalidatortests",{"3":{"1199":1,"1207":7,"1271":1}}],["commandrequestvalidator",{"2":{"117":1,"128":1,"922":1,"1666":1,"1830":1,"1834":1},"3":{"0":2,"117":1,"128":1,"922":2,"1199":6,"1203":1,"1207":2,"1263":1,"1270":5,"1271":10,"1300":4,"1316":1,"1322":1,"1323":4,"1359":6,"1415":10,"1436":4,"1666":1,"1830":2,"1834":1}}],["commandsandqueries",{"3":{"1436":2}}],["commandshavevalidators",{"3":{"1436":2}}],["commands",{"1":{"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":1,"1039":1,"1040":1,"1041":1,"1042":1,"1043":1,"1044":1,"1045":1,"1046":1,"1260":1,"1261":1,"1262":1,"1263":1,"1264":1,"1265":1,"1266":1,"1267":1,"1268":1,"1269":1,"1270":1,"2134":1,"2135":1,"2136":1,"2137":1,"2138":1,"2139":1,"2181":1,"2182":1,"2183":1,"2184":1,"2185":1,"2186":1,"2187":1,"2188":1,"2189":1,"2190":1,"2191":1,"2192":1,"2193":1},"2":{"1442":1,"2191":4},"3":{"0":7,"115":1,"116":1,"117":1,"121":2,"122":2,"126":2,"223":1,"236":1,"388":1,"422":1,"426":1,"516":1,"518":2,"522":2,"523":1,"599":1,"672":1,"750":1,"753":1,"919":1,"926":1,"988":2,"991":1,"1012":1,"1014":1,"1028":1,"1039":1,"1043":1,"1044":1,"1082":1,"1085":1,"1100":1,"1192":2,"1193":1,"1202":2,"1203":2,"1212":4,"1229":1,"1259":1,"1260":1,"1261":1,"1263":2,"1264":2,"1265":1,"1267":1,"1270":25,"1271":7,"1286":14,"1301":1,"1309":1,"1311":4,"1322":1,"1323":4,"1324":1,"1339":6,"1350":5,"1352":3,"1357":1,"1359":16,"1369":1,"1371":1,"1378":1,"1380":4,"1399":1,"1402":5,"1415":5,"1436":30,"1438":1,"1442":1,"1446":1,"1465":1,"1467":1,"1470":3,"1489":1,"1496":2,"1497":1,"1506":1,"1507":1,"1526":1,"1543":2,"1570":2,"1577":1,"1651":1,"1660":1,"1662":2,"1666":2,"1668":1,"1671":1,"1682":1,"1686":1,"1700":1,"1721":1,"1727":1,"1730":1,"1753":1,"1774":1,"1779":2,"1820":1,"1821":1,"1828":1,"1830":2,"1918":1,"1946":1,"1947":1,"2012":1,"2036":1,"2060":1,"2088":1,"2089":1,"2096":3,"2097":1,"2111":1,"2133":2,"2134":2,"2136":1,"2138":1,"2139":1,"2146":1,"2165":1,"2180":2,"2181":1,"2187":1,"2191":4,"2192":2,"2193":1,"2203":1,"2206":2,"2230":1,"2232":2}}],["command",{"0":{"1275":1,"1357":1,"1440":1,"1730":1,"1830":1,"2005":1,"2092":1,"2163":1},"1":{"2003":1,"2004":1,"2005":1,"2006":1,"2007":1,"2008":1,"2009":1,"2010":1,"2011":1,"2012":1,"2013":1,"2014":1,"2087":1,"2088":1,"2089":1,"2090":1,"2091":1,"2092":1,"2093":1,"2094":1,"2095":1,"2096":1,"2097":1,"2098":1},"2":{"1370":1,"1823":1,"1871":1,"2185":1},"3":{"0":24,"24":1,"26":1,"27":2,"71":1,"92":1,"109":1,"113":1,"115":1,"117":3,"121":2,"122":7,"125":1,"126":1,"127":1,"128":1,"157":1,"225":1,"229":1,"230":2,"234":2,"235":3,"236":1,"245":1,"259":1,"299":2,"300":1,"341":1,"373":2,"383":2,"396":1,"397":4,"404":2,"405":4,"406":1,"408":1,"434":1,"438":1,"441":1,"444":1,"459":2,"466":1,"486":1,"490":2,"491":1,"492":1,"493":1,"516":1,"518":4,"522":3,"523":3,"528":1,"534":1,"536":4,"537":1,"539":2,"540":1,"541":2,"633":3,"690":1,"714":1,"735":1,"790":1,"794":2,"808":1,"809":1,"810":1,"813":1,"815":1,"854":1,"869":2,"876":2,"896":1,"897":2,"898":2,"900":1,"920":6,"921":2,"922":10,"923":5,"925":2,"926":20,"927":1,"986":1,"987":2,"988":2,"991":1,"994":1,"995":1,"1003":1,"1010":1,"1011":2,"1013":2,"1016":1,"1018":2,"1019":1,"1022":2,"1024":1,"1030":1,"1034":1,"1042":6,"1043":1,"1044":4,"1046":1,"1068":1,"1086":1,"1099":1,"1100":5,"1101":1,"1102":2,"1104":1,"1116":2,"1132":2,"1133":2,"1150":1,"1175":1,"1177":1,"1202":1,"1203":1,"1212":4,"1213":2,"1217":1,"1218":1,"1224":1,"1233":2,"1237":1,"1238":1,"1246":1,"1247":7,"1252":2,"1259":7,"1260":4,"1262":1,"1263":13,"1264":4,"1265":10,"1266":1,"1267":4,"1268":2,"1270":240,"1271":25,"1273":2,"1275":7,"1276":1,"1277":1,"1278":1,"1286":76,"1289":1,"1297":1,"1300":20,"1301":8,"1304":3,"1306":1,"1307":1,"1309":32,"1311":22,"1312":1,"1313":2,"1316":5,"1318":10,"1322":4,"1323":95,"1332":1,"1339":9,"1346":1,"1347":3,"1349":1,"1350":18,"1352":4,"1354":2,"1357":7,"1358":1,"1359":419,"1367":2,"1369":14,"1370":1,"1373":1,"1374":4,"1375":1,"1376":1,"1380":43,"1390":2,"1395":7,"1396":53,"1399":3,"1402":75,"1403":1,"1406":1,"1407":3,"1410":1,"1411":2,"1415":109,"1431":4,"1436":146,"1437":5,"1438":4,"1440":3,"1442":2,"1443":2,"1445":1,"1446":1,"1450":1,"1453":1,"1454":1,"1455":2,"1458":3,"1464":1,"1465":2,"1467":3,"1475":2,"1478":2,"1483":1,"1487":1,"1488":1,"1489":3,"1492":1,"1496":10,"1508":1,"1526":2,"1534":1,"1542":1,"1547":1,"1548":1,"1570":2,"1572":1,"1577":6,"1585":1,"1591":3,"1602":1,"1631":1,"1646":1,"1650":1,"1651":11,"1654":1,"1658":2,"1661":4,"1662":2,"1666":1,"1668":1,"1671":1,"1683":1,"1685":7,"1686":2,"1689":1,"1691":1,"1692":2,"1694":1,"1697":2,"1701":5,"1702":4,"1719":1,"1726":2,"1727":7,"1729":2,"1730":3,"1765":1,"1774":3,"1779":1,"1781":1,"1803":1,"1817":1,"1818":2,"1821":5,"1822":2,"1823":5,"1825":1,"1826":1,"1827":3,"1828":3,"1830":5,"1831":2,"1833":1,"1834":2,"1840":1,"1857":1,"1871":1,"1875":1,"1879":1,"1883":3,"1913":2,"1914":1,"1918":6,"1920":5,"1923":2,"1933":2,"1934":1,"1944":3,"1946":2,"1947":1,"1948":1,"1950":2,"1962":1,"2002":1,"2003":2,"2004":1,"2005":1,"2006":2,"2012":1,"2013":2,"2030":1,"2036":1,"2048":1,"2087":2,"2092":2,"2093":1,"2095":1,"2096":5,"2097":2,"2098":1,"2105":1,"2111":1,"2133":1,"2136":4,"2137":1,"2138":1,"2139":1,"2154":1,"2156":2,"2157":2,"2163":2,"2167":1,"2168":1,"2169":3,"2181":1,"2183":3,"2184":3,"2185":2,"2186":2,"2187":2,"2188":2,"2189":4,"2190":3,"2191":1,"2192":6,"2193":2,"2206":1,"2209":2,"2210":1,"2211":1,"2227":1,"2230":1,"2232":2}}],["commerce",{"0":{"1603":1},"3":{"1520":1,"1588":1,"1601":1,"1661":1,"1673":2,"1681":1,"1763":2,"1785":1,"2004":1,"2110":1,"2115":1,"2221":1,"2228":2,"2231":1}}],["commercially",{"3":{"1380":1,"1454":1}}],["commercial",{"3":{"0":5,"145":1,"146":1,"147":1,"150":1,"650":1,"683":1,"810":1,"1074":1,"1075":2,"1077":1,"1079":1,"1213":1,"1259":1,"1323":1,"1342":2,"1350":1,"1369":1,"1380":1,"1384":1,"1392":1,"1395":3,"1431":1,"1436":3,"1489":1,"1491":1,"1569":1,"1576":1,"1577":1,"1631":1,"1649":1,"1671":1,"1673":1,"1738":1,"2168":1,"2226":1,"2234":1}}],["commentid",{"3":{"1651":1}}],["commenting",{"3":{"627":1,"1459":1}}],["commentary",{"3":{"1270":1}}],["commentedoutgrid",{"3":{"1436":1}}],["commented",{"3":{"0":1,"142":1,"1212":2,"1259":3,"1286":1,"1300":2,"1309":1,"1323":1,"1324":1,"1339":2,"1359":1,"1369":2,"1396":1,"1417":2,"1436":11,"2230":1,"2232":1}}],["comment",{"2":{"429":1,"1459":3},"3":{"0":3,"93":1,"95":2,"104":2,"109":1,"137":1,"138":1,"140":1,"142":1,"147":2,"148":1,"149":1,"152":1,"245":1,"250":1,"251":1,"256":4,"257":1,"258":1,"259":1,"275":1,"276":1,"291":1,"322":1,"370":1,"371":1,"372":1,"373":2,"374":1,"390":1,"393":2,"422":1,"424":1,"425":2,"426":2,"428":3,"429":3,"448":3,"453":1,"454":1,"459":1,"464":1,"468":1,"470":1,"476":1,"478":1,"490":1,"491":1,"492":2,"493":1,"512":1,"528":1,"530":1,"531":1,"540":1,"543":1,"547":1,"556":1,"559":1,"564":1,"576":1,"593":1,"626":1,"627":1,"629":1,"636":1,"638":2,"640":1,"669":1,"674":2,"676":1,"682":1,"685":1,"703":1,"741":1,"743":1,"749":6,"750":1,"751":1,"757":1,"765":1,"766":1,"769":1,"774":1,"777":1,"819":1,"833":3,"837":4,"839":4,"841":2,"847":1,"870":1,"871":1,"876":4,"877":1,"954":1,"982":1,"1019":1,"1074":4,"1075":1,"1076":1,"1116":2,"1124":1,"1133":1,"1135":1,"1161":1,"1162":1,"1168":1,"1212":1,"1213":1,"1219":1,"1222":1,"1227":1,"1228":1,"1229":21,"1231":1,"1232":1,"1233":1,"1235":1,"1237":30,"1239":1,"1243":1,"1246":2,"1247":45,"1259":60,"1270":48,"1271":9,"1273":3,"1275":1,"1277":1,"1278":2,"1280":1,"1283":3,"1284":2,"1286":176,"1300":189,"1301":5,"1309":51,"1310":4,"1311":85,"1312":8,"1316":2,"1317":1,"1323":54,"1324":265,"1326":2,"1327":1,"1328":1,"1329":1,"1330":2,"1332":3,"1333":2,"1339":170,"1342":3,"1343":2,"1346":1,"1347":1,"1350":88,"1356":1,"1359":167,"1362":1,"1364":2,"1365":1,"1366":1,"1367":1,"1368":1,"1369":33,"1380":49,"1389":1,"1395":176,"1396":225,"1401":1,"1402":95,"1405":1,"1414":1,"1415":115,"1416":25,"1417":51,"1419":1,"1422":1,"1423":1,"1427":5,"1436":177,"1438":1,"1441":10,"1442":3,"1443":6,"1444":2,"1445":10,"1447":3,"1451":4,"1452":1,"1453":12,"1454":3,"1455":35,"1456":3,"1457":2,"1458":2,"1459":11,"1460":4,"1463":1,"1465":3,"1467":37,"1472":2,"1473":3,"1475":6,"1478":1,"1479":1,"1480":1,"1483":1,"1486":2,"1488":5,"1489":6,"1490":2,"1491":1,"1492":6,"1496":12,"1526":2,"1577":2,"1585":1,"1589":2,"1591":4,"1596":4,"1630":2,"1651":2,"1653":1,"1685":5,"1686":6,"1727":1,"1728":1,"1738":1,"1782":1,"1790":1,"1801":2,"1815":1,"1816":1,"1821":1,"1877":1,"1886":1,"1889":1,"1896":1,"1902":1,"1945":1,"1995":1,"2000":2,"2004":1,"2024":1,"2039":1,"2044":1,"2048":3,"2049":2,"2057":1,"2075":2,"2085":1,"2098":1,"2099":1,"2104":1,"2112":1,"2117":1,"2122":1,"2126":2,"2131":1,"2156":1,"2157":1,"2158":1,"2159":1,"2163":1,"2164":2,"2166":1,"2167":2,"2168":1,"2172":1,"2175":1,"2178":1,"2196":1,"2197":1}}],["comments",{"2":{"1730":1},"3":{"0":1,"119":1,"121":1,"147":1,"220":1,"256":1,"276":1,"286":1,"290":1,"296":1,"390":2,"393":1,"468":1,"526":1,"543":1,"545":1,"547":1,"556":1,"616":1,"626":4,"629":1,"642":1,"700":1,"750":1,"751":1,"833":1,"868":1,"869":1,"875":1,"982":1,"986":1,"989":1,"1129":1,"1219":1,"1226":1,"1229":1,"1237":2,"1259":2,"1262":1,"1270":1,"1286":9,"1300":10,"1301":2,"1309":3,"1311":5,"1324":9,"1338":1,"1339":9,"1344":1,"1350":6,"1359":9,"1380":6,"1395":5,"1396":11,"1402":6,"1415":3,"1416":2,"1417":1,"1427":1,"1436":10,"1438":1,"1443":1,"1451":2,"1467":1,"1470":3,"1475":1,"1476":1,"1486":1,"1496":3,"1507":1,"1552":1,"1577":2,"1585":1,"1629":1,"1651":2,"1653":1,"1676":1,"1686":1,"1701":3,"1730":1,"1816":1,"1826":2,"1827":1,"1896":1,"1995":1,"2013":1,"2049":1,"2156":1}}],["commitfailingdbcontext",{"3":{"1198":1,"1199":3,"1207":1,"1496":1}}],["commitments",{"3":{"1396":1}}],["commitment",{"3":{"168":1,"971":1,"1212":1,"1237":1,"1369":1,"1396":2,"2033":1,"2043":1}}],["committransaction",{"2":{"1822":1},"3":{"1286":4,"1822":1}}],["committable",{"3":{"1277":1}}],["committee",{"3":{"1017":1,"1366":1,"1369":1,"1395":1,"2240":1}}],["committedsources",{"2":{"1840":1,"1852":1},"3":{"988":1,"1286":1,"1840":1,"1852":1}}],["committed",{"0":{"451":1,"577":1,"1466":1},"1":{"588":1,"589":1,"590":1,"591":1,"592":1,"593":1,"594":1,"595":1},"3":{"0":8,"24":1,"120":2,"130":1,"135":2,"201":2,"225":1,"255":1,"369":1,"370":3,"371":1,"373":1,"390":1,"444":1,"446":1,"451":4,"452":2,"453":1,"454":2,"459":1,"461":1,"465":1,"535":1,"536":3,"537":1,"570":1,"572":2,"573":1,"577":2,"588":1,"591":4,"592":1,"692":1,"715":1,"765":1,"770":1,"782":1,"793":1,"809":1,"860":1,"865":1,"869":1,"876":2,"896":1,"897":3,"972":1,"973":1,"974":1,"976":1,"988":3,"989":1,"990":1,"1044":2,"1067":2,"1142":1,"1212":2,"1229":1,"1247":3,"1251":1,"1258":1,"1259":12,"1263":3,"1270":6,"1275":1,"1278":2,"1286":13,"1301":1,"1304":1,"1309":1,"1311":4,"1318":1,"1323":5,"1324":1,"1357":1,"1358":2,"1359":4,"1395":2,"1396":2,"1399":1,"1402":7,"1415":5,"1428":1,"1429":2,"1431":2,"1432":1,"1435":1,"1436":29,"1438":7,"1445":1,"1449":1,"1453":5,"1454":2,"1455":5,"1456":1,"1459":1,"1460":1,"1461":1,"1479":1,"1486":1,"1488":4,"1490":2,"1492":4,"1496":1,"1524":1,"1525":1,"1526":6,"1531":5,"1532":2,"1534":1,"1535":1,"1548":1,"1576":1,"1577":11,"1586":1,"1591":4,"1663":1,"1664":1,"1668":1,"1673":2,"1685":2,"1738":1,"1749":1,"1765":2,"1769":1,"1770":1,"1784":1,"1794":1,"1800":1,"1801":1,"1821":1,"1822":2,"1837":1,"1839":1,"1840":2,"1918":5,"1923":2,"1929":1,"1930":2,"1933":1,"1940":1,"1946":1,"1948":1,"2044":3,"2047":3,"2049":2,"2055":1,"2059":1,"2062":1,"2079":1,"2100":1,"2161":2,"2164":2,"2167":2,"2169":1,"2192":2,"2211":1,"2215":1,"2232":3}}],["committing",{"3":{"0":1,"986":1,"988":1,"1212":1,"1259":1,"1278":1,"1286":3,"1300":2,"1359":2,"1402":3,"1410":1,"1455":1,"1459":1,"1526":1,"1845":1,"1929":1,"2044":1,"2066":1}}],["commit",{"0":{"452":1,"1840":1},"1":{"985":1,"986":1,"987":1,"988":1,"989":1,"990":1,"991":1,"992":1},"3":{"0":23,"15":1,"20":2,"27":2,"91":1,"94":1,"115":1,"120":2,"147":1,"195":1,"226":1,"350":1,"368":1,"373":2,"374":1,"383":3,"424":2,"425":2,"426":1,"444":2,"459":2,"463":1,"465":2,"466":1,"516":1,"518":4,"521":3,"522":3,"523":2,"524":2,"530":1,"534":1,"535":1,"536":3,"537":1,"538":2,"539":1,"540":1,"541":1,"563":2,"577":1,"620":1,"628":1,"629":1,"633":1,"642":1,"692":1,"714":2,"715":1,"716":1,"758":1,"759":1,"781":1,"782":1,"809":1,"863":2,"868":1,"870":2,"875":1,"897":5,"898":1,"900":2,"931":1,"933":1,"985":1,"986":2,"987":2,"988":26,"989":7,"990":6,"991":4,"992":3,"1019":1,"1042":2,"1043":1,"1044":1,"1100":3,"1104":3,"1116":4,"1118":2,"1185":1,"1212":2,"1233":1,"1252":2,"1254":1,"1259":7,"1262":1,"1263":2,"1265":1,"1270":12,"1273":1,"1274":1,"1278":7,"1286":45,"1289":2,"1290":1,"1300":4,"1301":1,"1309":2,"1311":1,"1318":3,"1323":6,"1352":1,"1355":1,"1357":2,"1358":1,"1359":36,"1369":1,"1395":1,"1396":7,"1399":1,"1402":20,"1406":1,"1410":2,"1415":27,"1436":10,"1438":3,"1452":1,"1454":5,"1455":5,"1459":2,"1473":6,"1475":1,"1478":4,"1483":1,"1492":1,"1496":45,"1508":1,"1524":1,"1526":1,"1534":1,"1577":1,"1591":6,"1600":3,"1627":2,"1631":1,"1651":6,"1653":1,"1655":1,"1662":1,"1664":2,"1665":2,"1667":1,"1672":1,"1673":1,"1685":1,"1686":1,"1699":1,"1721":1,"1727":2,"1733":1,"1749":2,"1761":2,"1765":3,"1769":1,"1774":1,"1801":1,"1819":1,"1822":1,"1827":1,"1837":1,"1838":2,"1839":1,"1840":12,"1845":1,"1847":1,"1852":4,"1853":1,"1861":1,"1888":1,"1941":1,"1944":3,"1950":2,"1958":1,"1977":1,"1986":1,"2057":1,"2096":1,"2113":1,"2160":1,"2161":2,"2162":1,"2163":2,"2164":1,"2168":2,"2169":3,"2185":1,"2192":2,"2193":1,"2232":2}}],["commits",{"0":{"1212":1,"2230":1},"3":{"0":3,"24":1,"94":1,"193":1,"195":1,"201":1,"352":1,"424":1,"444":1,"446":1,"452":2,"466":1,"517":1,"535":1,"536":2,"538":1,"539":3,"562":1,"564":2,"744":1,"793":1,"897":1,"900":1,"988":2,"1041":2,"1116":1,"1142":1,"1174":1,"1182":1,"1210":1,"1214":1,"1252":1,"1258":1,"1259":4,"1263":1,"1270":1,"1272":1,"1275":1,"1278":2,"1286":9,"1300":3,"1311":1,"1318":1,"1323":5,"1324":2,"1350":1,"1352":1,"1358":1,"1359":11,"1396":2,"1402":6,"1405":1,"1410":2,"1415":8,"1431":1,"1436":2,"1438":2,"1453":1,"1473":1,"1478":1,"1490":1,"1492":1,"1496":11,"1506":1,"1526":1,"1651":1,"1655":1,"1673":1,"1765":1,"1800":1,"1819":1,"1822":1,"1835":1,"1838":1,"1839":1,"1840":2,"1852":1,"1910":1,"1924":1,"1933":2,"1940":1,"1950":1,"1978":1,"2063":1,"2091":1,"2161":1,"2163":2,"2164":1,"2168":1,"2169":2,"2181":2,"2183":1}}],["corner",{"3":{"1847":1}}],["cornerstone",{"3":{"1779":1}}],["corporate",{"3":{"1324":1}}],["corpus",{"0":{"1435":1},"3":{"309":1,"945":2,"1016":1,"1018":5,"1019":5,"1020":2,"1091":3,"1092":2,"1093":1,"1300":1,"1427":10,"1428":1,"1435":7,"1437":1,"1438":3,"1492":5,"1496":4,"1577":1}}],["corollary",{"3":{"1237":1,"1997":1}}],["corspolicyallowall",{"2":{"774":1,"1108":1},"3":{"774":1,"1108":1,"1311":1}}],["corspolicyallowspecificorigins",{"2":{"774":1,"1108":1},"3":{"774":1,"1108":1,"1311":1}}],["cors",{"0":{"1336":1},"2":{"774":1,"776":1,"777":1},"3":{"0":5,"59":1,"60":1,"572":1,"749":1,"773":2,"774":6,"775":1,"776":3,"777":1,"778":4,"826":3,"834":1,"1107":1,"1108":1,"1109":1,"1111":1,"1112":1,"1184":2,"1185":1,"1187":2,"1189":1,"1212":1,"1311":10,"1324":7,"1336":4,"1338":4,"1339":9,"1379":1,"1429":1,"1436":3,"1438":1,"1443":1,"1447":2,"1467":2,"1488":1,"1653":1,"1666":1,"1670":1,"1671":1,"1673":1,"1687":1,"1702":1,"1898":2,"1904":1,"2023":2,"2055":1,"2151":1,"2232":1}}],["corrupting",{"3":{"1309":1,"1479":1}}],["corruption",{"3":{"0":1,"51":1,"53":2,"68":1,"1012":1,"1312":3,"1358":1,"1359":1,"1467":1,"1474":2,"1526":1,"1532":1,"1544":1,"1577":1,"1586":1,"1591":1,"1630":1,"1639":1,"1663":1,"1709":1,"2033":1,"2164":1}}],["corrupted",{"3":{"360":1,"692":1,"1226":1,"1229":1,"1396":1,"1412":1,"1415":1,"1438":1,"1467":1,"2142":1}}],["corrupt",{"3":{"312":1,"743":1,"947":1,"1223":1,"1229":2,"1237":1,"1300":1,"1311":1,"1312":2,"1324":2,"1395":2,"1402":1,"1417":5}}],["correspond",{"3":{"1369":1,"1396":1}}],["correspondence",{"3":{"1359":1}}],["corresponds",{"3":{"1339":1,"1396":1,"1641":2}}],["corresponding",{"3":{"838":1,"1237":1,"1247":1,"1270":1,"1271":1,"1279":1,"1286":1,"1300":1,"1323":1,"1324":3,"1359":1,"1395":1,"1417":1,"1436":4,"1466":1,"1517":1,"1627":1,"1641":1,"1654":1,"1765":1}}],["correspondingly",{"3":{"0":1,"549":1,"551":1,"1324":1,"2041":1}}],["correctfollowing",{"3":{"1526":1}}],["correcting",{"3":{"1396":1,"1455":1,"1460":1,"1496":1,"1776":1}}],["correction",{"3":{"22":1,"115":1,"137":2,"251":1,"254":1,"256":1,"260":1,"261":1,"323":1,"364":1,"365":1,"423":1,"424":1,"428":2,"490":1,"492":1,"493":1,"567":1,"616":1,"682":1,"684":1,"876":1,"1156":1,"1270":1,"1271":1,"1300":1,"1324":2,"1339":1,"1359":1,"1396":1,"1438":1,"1455":1,"1496":2,"1534":1,"1631":1,"1639":1,"1749":1,"1765":2,"1767":2,"1769":2,"1770":1,"1776":1}}],["corrections",{"3":{"21":1,"248":1,"259":1,"335":1,"383":1,"497":2,"764":1,"833":1,"857":1,"1040":1,"1496":6,"2232":1}}],["correctable",{"3":{"1323":1,"1766":1}}],["correctamente",{"3":{"265":1}}],["corrects",{"3":{"137":1,"138":1,"141":1,"171":1,"275":1,"616":1,"909":1,"1324":2,"1359":1,"1396":1,"1415":1,"1436":1,"1765":1}}],["correct",{"0":{"2165":1},"3":{"0":1,"20":1,"110":1,"119":1,"134":1,"136":1,"137":1,"157":1,"159":1,"196":1,"224":1,"235":1,"242":1,"243":1,"244":1,"251":1,"252":2,"254":2,"266":2,"281":1,"319":1,"320":1,"343":1,"360":1,"363":1,"391":1,"395":2,"490":1,"492":1,"493":1,"509":1,"534":1,"537":1,"539":1,"611":1,"633":1,"664":1,"665":1,"692":1,"699":1,"716":1,"735":1,"742":2,"743":1,"748":1,"768":1,"801":1,"809":1,"811":1,"818":1,"820":1,"821":1,"826":1,"827":1,"828":2,"829":1,"830":1,"837":1,"876":1,"890":1,"924":1,"930":1,"932":1,"933":1,"946":2,"948":1,"955":1,"965":2,"972":1,"989":2,"996":1,"998":1,"1019":1,"1093":1,"1100":1,"1118":1,"1135":1,"1160":1,"1169":1,"1212":1,"1219":1,"1229":2,"1237":1,"1247":6,"1252":1,"1259":5,"1260":1,"1270":6,"1286":23,"1300":10,"1301":1,"1309":2,"1311":6,"1312":1,"1323":8,"1324":12,"1339":6,"1350":3,"1359":16,"1369":1,"1380":1,"1395":5,"1396":10,"1402":3,"1415":8,"1417":15,"1436":20,"1441":1,"1442":1,"1443":1,"1455":5,"1467":2,"1474":1,"1477":1,"1479":1,"1489":3,"1496":3,"1498":3,"1548":1,"1558":1,"1563":1,"1577":2,"1585":1,"1591":1,"1596":1,"1631":1,"1637":1,"1638":2,"1639":1,"1640":1,"1651":1,"1654":1,"1666":1,"1685":1,"1686":2,"1708":1,"1746":1,"1749":1,"1750":1,"1765":1,"1767":1,"1768":1,"1785":1,"1805":1,"1825":1,"1826":1,"1833":1,"1838":1,"1843":2,"1844":2,"1845":1,"1852":1,"1870":1,"1884":1,"1885":1,"1894":1,"1895":1,"1898":1,"1904":2,"1910":2,"1911":1,"1913":1,"1914":1,"1927":1,"1942":1,"1947":1,"1949":1,"1996":1,"2026":1,"2034":2,"2049":1,"2050":1,"2061":2,"2066":1,"2068":1,"2074":1,"2096":1,"2107":1,"2113":1,"2118":1,"2127":1,"2142":1,"2152":1,"2165":1,"2168":1,"2169":1,"2192":1}}],["correctly",{"3":{"0":2,"160":1,"235":1,"507":1,"550":1,"571":1,"573":2,"790":1,"849":1,"904":1,"1246":1,"1247":1,"1275":1,"1286":4,"1297":1,"1300":3,"1301":1,"1311":3,"1323":4,"1324":1,"1339":2,"1353":1,"1359":6,"1369":1,"1395":2,"1396":3,"1416":1,"1417":2,"1427":1,"1429":1,"1436":15,"1437":1,"1438":1,"1457":1,"1466":1,"1496":1,"1556":2,"1564":1,"1638":1,"1671":1,"1685":1,"1686":1,"1708":1,"1815":1,"1909":1,"1923":1,"1940":1,"2055":1,"2070":1,"2085":1}}],["correctness",{"0":{"1879":1},"3":{"0":2,"20":1,"227":2,"244":1,"291":1,"295":1,"312":1,"320":1,"483":1,"538":1,"549":2,"566":1,"633":1,"642":1,"666":1,"698":1,"708":1,"733":1,"743":1,"827":1,"855":1,"996":2,"997":1,"1154":1,"1247":2,"1259":2,"1263":1,"1270":5,"1286":5,"1300":4,"1301":5,"1309":1,"1310":1,"1311":1,"1323":2,"1324":6,"1339":3,"1350":1,"1359":8,"1380":2,"1395":4,"1396":6,"1402":2,"1410":1,"1415":4,"1417":2,"1427":1,"1436":2,"1437":1,"1476":1,"1492":1,"1534":1,"1556":2,"1707":1,"1708":2,"1819":1,"1821":1,"1826":1,"1841":1,"1876":1,"1878":1,"1881":1,"1886":2,"1915":1,"1916":1,"1921":2,"1923":1,"1924":1,"1940":1,"1947":1,"1970":1,"1996":1,"2141":1,"2168":1}}],["corrected",{"3":{"0":2,"27":1,"43":1,"57":1,"63":1,"74":1,"82":1,"94":1,"130":3,"137":1,"140":1,"145":2,"161":1,"173":1,"181":1,"203":1,"220":1,"231":1,"256":2,"258":1,"263":1,"268":1,"273":1,"279":2,"285":1,"298":1,"345":1,"348":2,"365":1,"375":1,"407":1,"418":4,"426":1,"444":1,"446":2,"464":1,"465":1,"466":1,"468":3,"492":1,"502":1,"514":1,"526":1,"531":2,"534":5,"540":1,"549":1,"554":1,"578":1,"586":1,"589":1,"604":1,"607":2,"624":2,"638":1,"660":1,"672":1,"680":1,"685":1,"688":1,"693":1,"696":2,"713":1,"723":2,"736":1,"744":1,"761":1,"764":1,"777":1,"780":1,"797":1,"803":1,"806":1,"822":1,"833":1,"841":1,"857":1,"864":1,"877":1,"892":1,"900":1,"909":1,"917":1,"927":1,"960":1,"962":1,"986":1,"1010":1,"1029":1,"1037":1,"1048":1,"1055":1,"1070":1,"1103":1,"1324":3,"1438":1,"1455":1,"1496":22,"1500":2,"1767":1,"1769":1,"2085":1,"2232":2}}],["correlatable",{"3":{"1350":1}}],["correlating",{"3":{"1339":2,"1345":1,"1641":1}}],["correlationheader",{"3":{"1436":1}}],["correlationcontexttests",{"3":{"1199":1,"1207":2}}],["correlationcontext",{"3":{"1199":7,"1203":1,"1207":2,"1259":1,"1270":1,"1286":3,"1311":10,"1323":1}}],["correlation",{"0":{"1337":1},"3":{"0":9,"26":3,"59":1,"125":1,"193":1,"202":3,"395":2,"397":3,"398":2,"400":2,"407":1,"409":1,"572":1,"608":1,"664":1,"707":1,"714":1,"716":1,"749":1,"808":1,"810":1,"813":1,"815":1,"825":1,"826":5,"827":3,"829":1,"834":1,"899":1,"916":1,"1042":1,"1202":1,"1203":1,"1212":2,"1251":1,"1253":3,"1259":5,"1263":1,"1270":5,"1275":1,"1277":2,"1286":12,"1300":4,"1311":24,"1318":1,"1323":6,"1325":1,"1337":1,"1338":1,"1339":9,"1350":1,"1396":1,"1402":3,"1436":6,"1438":3,"1447":1,"1487":1,"1488":1,"1544":1,"1550":2,"1572":1,"1577":1,"1591":1,"1660":1,"1670":3,"1671":1,"1821":1,"2010":1,"2024":2,"2028":1,"2055":1,"2155":1,"2168":1,"2193":1,"2215":1,"2232":2}}],["correlationidmiddlewaretests",{"3":{"1199":1,"1207":2}}],["correlationidmiddleware",{"2":{"400":1,"409":1,"826":1,"2010":1,"2014":1,"2024":1},"3":{"397":8,"400":1,"409":2,"698":1,"826":2,"1199":3,"1203":1,"1207":2,"1286":1,"1311":13,"1337":1,"1339":2,"1438":1,"2010":1,"2014":1,"2024":1}}],["correlationid",{"2":{"15":1,"26":1,"810":1,"2186":1},"3":{"0":1,"15":1,"26":1,"715":1,"810":1,"1259":6,"1263":1,"1270":7,"1286":8,"1300":1,"1311":8,"1323":3,"1436":1,"1666":1,"2186":1}}],["correlate",{"3":{"813":1,"1323":1,"1396":3,"1402":4,"2193":1}}],["correlates",{"3":{"0":1,"856":1,"1286":1,"1665":1}}],["correlated",{"3":{"0":1,"24":1,"1255":1,"1259":1,"1270":4,"1309":1,"1401":1,"1402":2}}],["corelayers",{"2":{"1489":1},"3":{"1436":2,"1489":1}}],["cores",{"3":{"875":1,"1467":2}}],["corepublicresources",{"2":{"574":1},"3":{"574":1,"1436":3,"1488":1}}],["core",{"0":{"1506":1,"1643":1,"1662":1,"1764":1,"2206":1,"2219":1},"1":{"858":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"865":1,"936":1,"937":1,"938":1,"939":1,"940":1,"941":1,"942":1,"1272":1,"1273":1,"1274":1,"1275":1,"1276":1,"1277":1,"1278":1,"1279":1,"1280":1,"1281":1,"1282":1,"1283":1,"1284":1,"1285":1,"1286":1,"1863":1,"1864":1,"1865":1,"1866":1,"1867":1,"1868":1,"2140":1,"2141":1,"2142":1,"2143":1,"2144":1,"2145":1,"2146":1},"2":{"145":1,"147":1,"149":1,"152":1,"810":1,"960":1,"1067":1,"1074":1,"1075":1,"1225":1,"1426":1,"2176":1},"3":{"0":8,"10":1,"15":3,"24":5,"25":4,"26":9,"27":4,"31":1,"38":1,"39":4,"43":2,"54":1,"59":2,"62":1,"63":1,"68":2,"70":1,"71":3,"72":2,"74":5,"79":1,"80":1,"81":2,"82":1,"100":1,"109":8,"110":1,"111":2,"117":1,"121":3,"122":2,"123":4,"125":3,"126":3,"142":1,"145":4,"147":3,"149":1,"150":3,"152":1,"157":1,"161":1,"164":1,"166":8,"170":3,"171":2,"174":1,"185":1,"186":3,"190":1,"193":1,"196":2,"198":3,"200":2,"201":1,"202":7,"203":1,"207":1,"228":4,"230":4,"231":4,"235":1,"243":1,"246":6,"255":2,"265":2,"284":2,"285":3,"290":1,"291":1,"292":1,"295":2,"303":2,"305":5,"306":1,"310":3,"312":1,"314":2,"318":2,"328":1,"330":7,"331":1,"333":5,"336":1,"337":3,"341":8,"343":2,"344":6,"352":1,"353":2,"358":1,"359":5,"365":1,"370":1,"384":5,"387":2,"391":2,"395":2,"396":1,"397":10,"398":1,"400":1,"404":2,"405":1,"407":2,"408":1,"409":2,"411":1,"415":1,"442":1,"443":2,"444":2,"448":1,"451":1,"459":5,"463":2,"465":2,"469":4,"470":6,"471":1,"475":2,"476":3,"477":4,"481":1,"482":1,"497":6,"498":1,"499":4,"502":2,"522":1,"523":2,"524":1,"536":4,"539":1,"544":3,"545":9,"549":3,"550":1,"551":1,"552":1,"556":1,"558":1,"562":1,"563":1,"564":2,"572":1,"576":1,"583":6,"586":3,"591":1,"592":1,"593":1,"640":4,"644":1,"656":1,"657":5,"664":1,"665":1,"674":16,"676":7,"692":1,"697":1,"698":13,"700":1,"702":9,"703":6,"706":1,"707":3,"715":5,"720":3,"724":2,"725":2,"727":1,"732":1,"733":4,"736":3,"740":1,"741":4,"748":1,"782":3,"798":5,"799":4,"800":1,"804":1,"809":1,"810":2,"813":1,"818":1,"819":12,"822":1,"826":1,"831":1,"833":1,"837":1,"840":1,"846":4,"849":1,"850":1,"853":1,"854":3,"857":3,"858":1,"860":2,"861":2,"862":1,"881":2,"888":2,"890":1,"892":1,"897":2,"904":1,"905":4,"906":4,"908":3,"914":1,"915":1,"916":1,"917":1,"921":1,"922":8,"923":1,"926":5,"930":1,"931":7,"936":1,"939":1,"946":7,"953":1,"960":1,"962":1,"963":4,"964":5,"979":2,"987":3,"988":1,"995":3,"996":2,"999":1,"1004":2,"1018":2,"1034":8,"1036":1,"1037":1,"1041":4,"1042":19,"1043":1,"1044":2,"1045":2,"1049":4,"1050":13,"1052":2,"1055":2,"1058":3,"1059":20,"1067":1,"1074":4,"1075":2,"1081":1,"1082":3,"1083":2,"1086":1,"1091":7,"1100":2,"1103":1,"1107":1,"1108":3,"1116":2,"1119":1,"1124":1,"1132":1,"1133":5,"1140":7,"1150":5,"1160":1,"1168":4,"1174":1,"1175":26,"1192":1,"1202":3,"1203":3,"1211":1,"1212":5,"1213":4,"1217":2,"1219":3,"1220":1,"1222":1,"1223":2,"1225":3,"1226":3,"1227":2,"1228":2,"1229":36,"1230":1,"1231":7,"1232":5,"1233":8,"1234":12,"1235":1,"1236":7,"1237":97,"1239":7,"1240":4,"1241":7,"1242":2,"1243":6,"1244":2,"1246":4,"1247":119,"1249":1,"1251":1,"1259":63,"1260":1,"1261":2,"1262":4,"1263":2,"1264":2,"1265":3,"1266":1,"1267":5,"1268":1,"1269":1,"1270":141,"1271":56,"1272":2,"1273":5,"1274":2,"1275":2,"1276":8,"1277":4,"1278":10,"1279":9,"1280":1,"1281":4,"1282":1,"1283":2,"1284":2,"1285":7,"1286":625,"1288":5,"1289":9,"1290":10,"1291":12,"1292":6,"1293":9,"1294":8,"1295":6,"1296":5,"1297":17,"1299":2,"1300":603,"1301":51,"1302":6,"1303":8,"1304":4,"1305":5,"1306":7,"1307":9,"1308":2,"1309":122,"1310":46,"1311":89,"1312":14,"1314":1,"1315":3,"1316":9,"1317":9,"1318":7,"1319":2,"1320":24,"1321":2,"1322":14,"1323":234,"1324":29,"1330":3,"1332":1,"1333":3,"1336":1,"1337":1,"1338":1,"1339":45,"1341":1,"1343":2,"1350":31,"1351":1,"1352":1,"1359":223,"1360":1,"1361":1,"1362":2,"1363":1,"1369":12,"1380":14,"1395":5,"1396":84,"1402":17,"1414":1,"1415":75,"1416":5,"1417":3,"1418":1,"1419":2,"1420":6,"1421":1,"1422":3,"1423":5,"1424":5,"1425":3,"1426":2,"1427":39,"1430":2,"1431":1,"1433":3,"1435":4,"1436":85,"1437":8,"1438":13,"1441":2,"1442":3,"1443":7,"1447":1,"1451":1,"1453":1,"1454":1,"1456":2,"1461":1,"1465":1,"1467":6,"1486":5,"1487":2,"1488":4,"1489":3,"1490":2,"1496":25,"1497":1,"1526":3,"1531":2,"1534":1,"1535":1,"1559":1,"1560":1,"1576":2,"1577":13,"1582":3,"1583":1,"1585":2,"1586":2,"1591":1,"1596":1,"1599":1,"1602":1,"1605":1,"1629":1,"1630":1,"1640":1,"1641":1,"1642":1,"1643":1,"1646":1,"1648":1,"1653":1,"1660":9,"1661":1,"1664":1,"1668":1,"1671":2,"1677":1,"1682":1,"1692":1,"1693":2,"1707":1,"1708":1,"1739":1,"1752":1,"1779":2,"1782":1,"1790":1,"1793":1,"1805":2,"1806":1,"1807":1,"1810":3,"1811":1,"1813":1,"1815":6,"1817":2,"1825":1,"1829":1,"1853":1,"1862":2,"1863":2,"1864":1,"1868":1,"1895":1,"1896":1,"1903":1,"1922":1,"1929":1,"1934":1,"1940":1,"1970":1,"1988":1,"1989":1,"1994":2,"1998":1,"2000":5,"2002":1,"2006":2,"2010":1,"2016":2,"2026":1,"2028":2,"2032":1,"2039":1,"2040":1,"2043":2,"2050":1,"2053":1,"2055":2,"2059":1,"2061":1,"2064":2,"2066":3,"2071":1,"2079":1,"2099":1,"2104":2,"2107":1,"2139":1,"2140":3,"2142":1,"2146":3,"2153":2,"2154":1,"2156":2,"2160":1,"2176":1,"2207":1,"2208":1,"2211":1,"2215":1,"2219":3,"2220":1,"2225":1,"2227":4,"2232":4,"2234":1,"2236":1}}],["cone",{"1":{"2050":1,"2051":1,"2052":1,"2053":1,"2054":1,"2055":1,"2056":1,"2057":1,"2058":1,"2059":1,"2060":1},"3":{"2050":2,"2060":1,"2210":1}}],["conviction",{"3":{"2039":1}}],["convey",{"3":{"1396":1}}],["conveyed",{"3":{"1359":1,"1558":1}}],["conveys",{"3":{"332":1,"1990":1}}],["convene",{"3":{"2240":1}}],["convenient",{"3":{"1051":1,"1286":1,"1324":1,"1339":1,"1380":2,"1395":1,"1396":1,"1415":1,"1417":1,"1436":3,"1801":1,"1955":1,"1984":1,"2039":1,"2040":1}}],["conveniences",{"3":{"1270":1,"1395":1,"1436":1,"1805":1}}],["convenience",{"3":{"0":1,"318":1,"501":1,"782":1,"826":1,"1144":1,"1229":1,"1237":1,"1244":2,"1247":1,"1270":2,"1278":1,"1286":4,"1300":1,"1301":1,"1309":1,"1311":2,"1315":1,"1323":1,"1324":7,"1350":1,"1359":1,"1369":1,"1395":1,"1396":3,"1402":3,"1415":1,"1416":1,"1417":2,"1436":9,"1627":1,"1640":2,"1641":1,"1885":1,"1915":1,"1952":1,"1956":1,"1959":2,"1989":1,"1994":1,"2013":1,"2178":1,"2179":1}}],["conventiontests",{"3":{"1436":1}}],["conventionforeignkeysrestrictdeletes",{"3":{"1436":4}}],["conventiondeletes",{"2":{"1083":1},"3":{"1083":1,"1436":3}}],["conventionally",{"3":{"1237":1}}],["conventional",{"3":{"318":1,"657":1,"853":1,"1226":1,"1270":2,"1286":1,"1300":2,"1311":1,"1323":4,"1324":1,"1339":2,"1341":1,"1350":1,"1359":2,"1362":1,"1369":2,"1395":1,"1396":3,"1415":1,"1423":1,"1436":3,"1442":1,"2074":1,"2232":1}}],["conventionsource",{"3":{"1286":2}}],["conventions",{"0":{"1214":1,"1281":1},"1":{"1210":1,"1211":1,"1212":1,"1213":1,"1214":1,"1215":1,"1216":1},"3":{"0":1,"40":1,"164":1,"169":1,"707":1,"711":1,"801":1,"888":1,"889":1,"890":1,"891":1,"1004":2,"1020":1,"1035":1,"1050":2,"1051":1,"1083":2,"1086":1,"1090":1,"1174":1,"1176":1,"1178":1,"1192":2,"1202":1,"1203":6,"1207":46,"1210":1,"1212":1,"1229":1,"1247":2,"1259":3,"1270":1,"1271":1,"1272":1,"1273":1,"1280":2,"1281":7,"1282":1,"1286":37,"1300":9,"1310":1,"1311":4,"1324":1,"1350":1,"1362":2,"1369":1,"1380":7,"1396":7,"1403":1,"1415":3,"1427":2,"1431":2,"1436":9,"1437":6,"1438":3,"1452":1,"1488":1,"1489":2,"1496":1,"1526":1,"1537":2,"1546":1,"1552":2,"1557":1,"1571":2,"1574":1,"1577":1,"1591":1,"1654":1,"1671":3,"1687":1,"1690":1,"1701":1,"1702":1,"1775":1,"1797":1,"1811":1,"1952":1,"1958":1,"2063":1,"2064":1,"2088":2,"2098":1,"2104":3,"2211":1}}],["convention",{"0":{"1883":1,"1952":1},"1":{"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"1001":1,"1002":1,"1003":1,"1004":1,"1005":1,"1006":1,"1007":1,"1008":1},"2":{"1083":1,"2064":1},"3":{"0":22,"3":1,"4":1,"5":1,"6":1,"47":1,"53":2,"76":2,"79":1,"80":2,"89":1,"107":1,"117":1,"122":1,"134":1,"139":1,"140":1,"141":1,"142":1,"147":1,"162":1,"167":1,"169":1,"175":1,"216":1,"279":1,"283":1,"299":1,"301":1,"302":1,"305":1,"342":1,"343":1,"360":1,"381":1,"382":1,"388":1,"455":1,"469":1,"472":1,"473":1,"482":1,"483":1,"550":1,"564":1,"565":2,"583":1,"585":1,"620":1,"676":1,"713":1,"718":1,"726":1,"741":1,"743":1,"782":1,"784":1,"785":2,"801":2,"802":1,"845":1,"887":1,"888":1,"889":11,"890":3,"891":2,"892":1,"893":2,"899":1,"916":1,"922":1,"924":2,"947":1,"948":1,"956":1,"989":1,"1001":1,"1003":1,"1004":2,"1005":1,"1008":1,"1018":1,"1019":2,"1034":4,"1035":1,"1050":3,"1051":4,"1052":1,"1083":8,"1084":2,"1085":1,"1087":1,"1091":1,"1134":1,"1137":1,"1160":2,"1162":1,"1164":1,"1168":2,"1171":1,"1192":2,"1210":1,"1212":1,"1214":1,"1229":1,"1237":4,"1239":1,"1247":8,"1249":2,"1255":1,"1259":7,"1270":14,"1271":9,"1281":14,"1286":68,"1300":38,"1301":1,"1309":3,"1310":1,"1311":23,"1312":2,"1315":1,"1316":1,"1323":19,"1324":18,"1335":1,"1339":2,"1350":12,"1353":1,"1354":1,"1359":83,"1362":4,"1369":12,"1380":5,"1395":11,"1396":45,"1400":1,"1402":14,"1415":31,"1416":3,"1417":3,"1418":1,"1425":1,"1427":1,"1431":3,"1436":90,"1437":1,"1438":3,"1455":2,"1461":1,"1467":3,"1473":1,"1488":1,"1489":2,"1492":1,"1493":1,"1496":3,"1497":1,"1500":1,"1526":3,"1539":1,"1541":1,"1545":1,"1575":2,"1577":6,"1584":1,"1585":1,"1586":2,"1591":2,"1596":1,"1630":1,"1631":1,"1632":1,"1649":2,"1651":4,"1656":3,"1661":1,"1662":1,"1664":1,"1672":1,"1673":1,"1685":1,"1686":1,"1701":1,"1703":1,"1720":1,"1730":1,"1736":1,"1790":1,"1792":1,"1793":1,"1794":1,"1800":1,"1802":2,"1810":1,"1811":1,"1830":3,"1849":2,"1856":1,"1858":3,"1860":1,"1875":1,"1877":1,"1882":1,"1883":1,"1886":1,"1889":1,"1891":1,"1902":1,"1949":1,"1951":2,"1952":3,"1954":1,"1956":1,"1958":2,"1959":2,"2000":2,"2013":1,"2031":1,"2039":2,"2043":3,"2045":1,"2049":1,"2053":1,"2063":1,"2064":2,"2093":1,"2095":1,"2097":1,"2100":1,"2107":1,"2137":1,"2138":1,"2163":1,"2167":1,"2168":1,"2177":1,"2232":3}}],["conversely",{"3":{"1396":1,"1550":1}}],["conversation",{"3":{"1359":1,"1423":1,"1427":1}}],["conversion",{"3":{"0":1,"109":1,"111":1,"360":1,"545":1,"547":1,"550":1,"657":1,"698":1,"1237":5,"1269":1,"1270":2,"1271":1,"1281":1,"1286":4,"1300":6,"1311":1,"1324":1,"1339":1,"1350":4,"1356":1,"1359":15,"1369":9,"1395":13,"1396":4,"1415":3,"1417":1,"1427":1,"1438":2,"1577":1,"1639":1,"2146":1}}],["conversions",{"3":{"0":1,"110":1,"657":1,"798":1,"806":1,"964":2,"1034":1,"1050":2,"1191":1,"1203":11,"1207":56,"1220":1,"1229":1,"1237":4,"1273":1,"1277":1,"1281":1,"1282":4,"1286":32,"1362":1,"1369":1,"1395":1,"1496":3,"1662":1}}],["converge",{"3":{"539":1,"838":1,"840":1,"881":1,"1311":1,"1324":3,"1369":1,"1396":2,"1402":2,"1411":1,"1415":2,"1441":1,"2166":1,"2167":1}}],["convergence",{"3":{"260":1,"840":1,"1415":1,"1465":1}}],["converges",{"3":{"109":1,"1417":1,"1436":1,"1765":3,"1806":1,"2061":1}}],["converged",{"0":{"91":1},"3":{"0":2,"97":1,"101":1,"148":1,"755":1,"1090":1,"1599":1,"2025":1}}],["converttimefromutc",{"2":{"1639":1},"3":{"1639":1}}],["converttimetoutc",{"2":{"1348":1},"3":{"1348":1,"1350":2,"1395":1}}],["convertto",{"3":{"1300":1}}],["convertfrom",{"3":{"1300":2}}],["convertfromrsasecuritykey",{"2":{"1300":1},"3":{"1300":1}}],["convertfrominvariantstring",{"3":{"1286":1}}],["convertname",{"3":{"1247":1}}],["convertible",{"3":{"1237":1}}],["converting",{"3":{"0":1,"110":1,"826":1,"964":1,"1237":2,"1270":3,"1311":3,"1323":1,"1339":1,"1350":2,"1359":1,"1378":1,"1396":3,"1427":1,"1436":1,"1770":1}}],["converted",{"3":{"881":1,"964":1,"1050":1,"1234":1,"1235":1,"1244":1,"1270":1,"1286":3,"1289":1,"1300":1,"1312":1,"1323":2,"1324":1,"1348":1,"1350":2,"1359":4,"1380":1,"1395":3,"1396":2,"1402":1,"1415":4,"1639":1,"2067":1,"2185":1}}],["convertertype",{"3":{"1050":1,"1286":2,"1300":1}}],["converters",{"2":{"964":1,"1235":1},"3":{"0":3,"472":1,"656":1,"658":1,"659":3,"800":1,"963":1,"964":4,"1050":2,"1051":1,"1192":1,"1202":1,"1203":1,"1212":1,"1223":1,"1229":7,"1235":1,"1237":2,"1272":1,"1282":1,"1286":2,"1311":6,"1431":1,"1436":1,"1496":1,"1662":3}}],["converter",{"0":{"2142":1},"1":{"356":1,"357":1,"358":1,"359":1,"360":1,"361":1,"362":1,"363":1,"364":1,"365":1,"366":1},"3":{"0":2,"356":1,"357":1,"358":2,"359":10,"361":4,"362":2,"363":2,"364":1,"365":8,"366":1,"470":1,"471":1,"605":1,"655":1,"656":1,"657":4,"659":1,"660":1,"798":2,"800":1,"806":1,"963":2,"964":7,"965":3,"967":1,"1034":1,"1035":1,"1050":4,"1051":2,"1052":2,"1055":2,"1192":1,"1212":1,"1223":3,"1229":7,"1237":10,"1241":1,"1247":1,"1270":1,"1272":1,"1281":1,"1284":2,"1286":45,"1300":10,"1309":3,"1311":10,"1350":1,"1369":7,"1396":1,"1415":6,"1436":5,"1496":1,"1498":1,"1577":1,"1903":2,"2063":2,"2140":2,"2142":8,"2143":4,"2144":2,"2145":1,"2232":1}}],["convert",{"3":{"461":1,"905":2,"1077":1,"1300":9,"1309":1,"1311":1,"1324":2,"1332":1,"1339":1,"1359":1,"1395":2,"1427":1,"1436":2,"1525":1,"1576":1,"1585":1,"1768":1,"1802":1}}],["converts",{"3":{"0":3,"87":1,"109":4,"122":1,"235":1,"295":1,"610":1,"627":1,"675":1,"726":1,"758":1,"767":1,"820":1,"881":1,"947":1,"964":1,"1034":1,"1050":2,"1052":1,"1055":1,"1143":1,"1225":1,"1226":1,"1229":1,"1237":1,"1244":1,"1247":6,"1270":3,"1271":2,"1300":3,"1309":2,"1311":4,"1315":1,"1323":1,"1324":7,"1332":1,"1339":4,"1350":3,"1358":1,"1359":8,"1369":2,"1380":1,"1395":10,"1396":8,"1415":7,"1417":1,"1436":2,"1443":1,"1475":1,"1489":2,"1702":2,"1765":1,"1831":1,"2012":1,"2032":1,"2038":2,"2203":1}}],["condensed",{"3":{"2000":1,"2008":1,"2084":1,"2156":1}}],["conduct",{"3":{"1673":1}}],["conditioned",{"3":{"631":1,"633":2,"1286":1,"1535":1,"1591":1,"1874":1}}],["conditions",{"3":{"140":1,"188":1,"341":1,"549":1,"626":1,"766":1,"1073":1,"1247":1,"1270":3,"1274":1,"1310":1,"1311":3,"1324":2,"1359":4,"1369":1,"1395":1,"1417":1,"1455":1,"1463":1,"1918":1,"1964":1,"2196":1,"2203":1}}],["condition",{"3":{"1":1,"135":1,"138":2,"141":1,"195":1,"200":1,"201":1,"319":1,"342":1,"343":1,"474":2,"529":1,"567":1,"624":1,"626":4,"628":1,"629":1,"633":2,"684":1,"757":1,"764":2,"766":2,"797":1,"798":1,"800":1,"808":1,"809":1,"813":1,"831":1,"863":1,"922":1,"931":1,"997":1,"998":1,"1067":1,"1139":1,"1149":1,"1220":1,"1247":3,"1270":1,"1286":4,"1300":1,"1309":1,"1311":3,"1323":1,"1324":3,"1328":1,"1339":1,"1358":1,"1359":10,"1395":4,"1396":4,"1415":1,"1416":1,"1417":2,"1429":1,"1430":1,"1433":1,"1436":9,"1441":1,"1443":1,"1444":2,"1449":1,"1453":1,"1454":1,"1455":7,"1459":1,"1467":1,"1475":1,"1486":1,"1492":5,"1524":1,"1525":1,"1526":3,"1531":1,"1591":5,"1596":1,"1599":1,"1600":1,"1640":1,"1653":1,"1687":1,"1876":1}}],["conditionality",{"3":{"1531":1}}],["conditionalweaktable",{"2":{"1274":1},"3":{"1274":1,"1286":9,"1323":1}}],["conditionalwrite",{"3":{"1270":1}}],["conditionalwriteroottouchtests",{"3":{"1199":1,"1207":2}}],["conditionalwriteconventiontests",{"3":{"1199":2,"1207":4,"1311":2,"1380":3,"1437":2,"1438":4}}],["conditionals",{"3":{"1247":1,"1286":1,"1324":1,"1350":1,"1396":1,"1761":1}}],["conditionally",{"3":{"245":1,"674":1,"996":1,"1176":1,"1180":1,"1259":1,"1278":1,"1286":3,"1311":2,"1324":3,"1339":1,"1359":2,"1364":1,"1395":1,"1396":2,"1416":1,"1455":1,"1466":1,"1467":1,"1526":1,"1577":1,"1773":1,"1814":1,"1958":1,"2012":1}}],["conditional",{"0":{"1375":1},"3":{"0":8,"6":2,"109":1,"259":1,"260":1,"261":1,"339":1,"340":1,"341":1,"342":2,"343":2,"344":1,"401":1,"413":1,"535":1,"556":1,"599":3,"609":1,"624":3,"626":1,"703":1,"749":1,"764":1,"809":1,"879":1,"905":2,"920":1,"921":1,"922":2,"995":1,"996":2,"998":1,"1108":1,"1110":1,"1212":2,"1237":3,"1255":1,"1259":1,"1265":1,"1270":7,"1275":1,"1278":1,"1286":13,"1290":1,"1300":11,"1306":1,"1309":3,"1310":1,"1311":14,"1316":1,"1323":4,"1324":8,"1333":1,"1339":3,"1350":2,"1359":48,"1373":1,"1375":1,"1380":12,"1389":1,"1395":15,"1396":12,"1402":6,"1415":2,"1416":2,"1417":3,"1419":1,"1421":1,"1427":2,"1436":4,"1437":2,"1438":2,"1443":1,"1455":3,"1467":8,"1469":1,"1526":2,"1531":2,"1532":1,"1565":1,"1577":2,"1590":1,"1591":1,"1600":1,"1631":1,"1640":1,"1651":1,"1685":1,"1702":1,"1727":1,"1748":2,"1749":1,"1765":3,"1825":1,"1856":1,"1871":2,"1874":2,"1876":2,"1916":1,"1923":1,"1952":2,"1955":1,"1958":1,"2123":1,"2158":1,"2161":1,"2185":1,"2232":1}}],["conn",{"3":{"1467":1,"1496":1,"1577":1}}],["connectasync",{"3":{"1339":1}}],["connecttimeout",{"3":{"1324":1,"1339":1}}],["connecting",{"3":{"1190":1,"1324":1,"1438":1,"1455":1}}],["connectivitychangedeventargs",{"3":{"1417":1}}],["connectivitychanged",{"3":{"1417":7}}],["connectivity",{"3":{"291":1,"412":1,"413":1,"1192":1,"1202":1,"1203":1,"1324":1,"1337":1,"1395":1,"1417":15,"1455":1,"1496":1,"1669":1,"2118":1}}],["connectionfactory",{"3":{"1324":2}}],["connectionid",{"3":{"1309":1}}],["connectionidentityincludesdatabasename",{"2":{"1279":1},"3":{"1279":1,"1286":3}}],["connectionmode",{"3":{"1286":2}}],["connectionmultiplexer",{"2":{"1301":1},"3":{"733":1,"1301":4,"1339":2}}],["connectionname",{"3":{"243":1,"1301":1,"1332":2,"1339":5}}],["connectionsperuser",{"3":{"1309":1,"1323":1}}],["connectionstringexpression",{"2":{"1327":1},"3":{"1327":1,"1339":2}}],["connectionstringfor",{"3":{"1286":7}}],["connectionstringrequired",{"2":{"1175":1,"1280":1},"3":{"1175":1,"1280":1,"1286":4}}],["connectionstringsettingstests",{"3":{"1199":1,"1207":1}}],["connectionstringsettings",{"2":{"1175":1,"1272":1,"1279":1,"1320":1},"3":{"674":1,"1175":3,"1177":1,"1199":27,"1203":1,"1207":2,"1272":1,"1279":2,"1286":29,"1320":4,"1323":3}}],["connectionstringsettingsvalidatortests",{"3":{"1199":1,"1207":2,"1286":1,"1438":2}}],["connectionstringsettingsvalidator",{"2":{"170":1,"676":1,"1279":1,"1320":1},"3":{"170":2,"676":2,"1199":3,"1203":1,"1207":2,"1279":2,"1286":31,"1320":4,"1323":2}}],["connectionstrings",{"2":{"640":1,"1332":1,"1441":1,"1446":1,"1652":1,"1722":1,"1729":1},"3":{"166":1,"640":3,"676":1,"1034":1,"1279":3,"1286":18,"1323":6,"1332":1,"1335":2,"1339":4,"1436":2,"1441":1,"1443":1,"1446":1,"1467":2,"1652":1,"1722":1,"1729":1}}],["connectionstring",{"2":{"440":1,"601":1,"604":1,"640":1,"644":1},"3":{"0":1,"170":1,"434":1,"440":1,"601":1,"604":1,"640":3,"644":1,"1067":1,"1286":10,"1323":13,"1339":3,"1429":1,"1436":2,"1441":1,"1467":2,"2126":1}}],["connections",{"0":{"2011":1},"2":{"1443":1,"1677":1},"3":{"0":3,"174":1,"223":1,"378":1,"382":1,"384":1,"608":1,"818":1,"1035":1,"1124":1,"1273":1,"1286":3,"1296":1,"1300":1,"1302":2,"1307":2,"1309":5,"1323":3,"1324":4,"1329":2,"1339":2,"1436":3,"1443":3,"1467":4,"1474":1,"1490":1,"1653":1,"1667":1,"1677":1,"1840":1,"1945":2,"1949":1,"2011":1,"2014":1,"2158":1}}],["connectionaborted",{"2":{"135":1},"3":{"0":1,"135":2,"1309":3,"1436":3}}],["connection",{"2":{"175":1,"397":1,"914":1,"1333":1,"1337":1,"1443":1,"1446":1,"1467":1,"2010":1,"2156":1,"2159":1},"3":{"0":11,"71":1,"72":1,"100":2,"109":1,"155":1,"159":1,"164":2,"166":2,"168":1,"170":4,"171":1,"175":1,"179":1,"225":1,"227":1,"228":3,"234":2,"235":4,"236":1,"237":2,"241":1,"243":2,"245":1,"259":2,"260":2,"261":1,"358":1,"379":2,"380":2,"381":2,"384":2,"390":1,"392":1,"397":2,"572":1,"598":3,"599":7,"601":2,"602":1,"604":1,"605":1,"608":2,"610":1,"633":1,"640":5,"642":1,"643":2,"644":1,"673":1,"698":3,"699":1,"700":2,"733":1,"736":1,"742":1,"749":1,"819":2,"820":1,"827":1,"830":1,"832":1,"881":1,"905":1,"914":5,"988":2,"996":2,"998":1,"1034":3,"1036":1,"1043":1,"1066":1,"1067":1,"1123":2,"1133":1,"1150":1,"1175":4,"1176":1,"1192":1,"1212":3,"1225":1,"1259":2,"1273":1,"1276":1,"1278":2,"1279":7,"1280":4,"1284":1,"1286":112,"1299":1,"1300":11,"1301":3,"1307":5,"1309":19,"1311":17,"1312":5,"1320":3,"1323":30,"1324":41,"1326":3,"1328":2,"1329":2,"1330":1,"1332":4,"1333":1,"1334":3,"1335":1,"1337":1,"1338":1,"1339":63,"1349":1,"1378":1,"1379":1,"1380":4,"1395":2,"1396":6,"1400":2,"1402":1,"1415":2,"1416":2,"1417":3,"1429":6,"1430":4,"1436":33,"1438":6,"1441":3,"1442":3,"1443":7,"1444":3,"1446":2,"1447":4,"1449":1,"1451":1,"1455":1,"1460":1,"1467":26,"1473":2,"1474":2,"1477":3,"1481":2,"1486":1,"1488":4,"1490":1,"1492":1,"1496":2,"1526":1,"1548":1,"1591":1,"1652":3,"1653":2,"1663":1,"1664":3,"1668":2,"1670":2,"1671":1,"1677":3,"1684":4,"1688":1,"1697":1,"1702":1,"1719":2,"1720":1,"1724":1,"1727":1,"1790":1,"1806":1,"1847":1,"1849":4,"1851":1,"1853":1,"1906":1,"1916":1,"1923":1,"1927":1,"1935":6,"1940":1,"1942":2,"1943":1,"1944":2,"1945":5,"1949":1,"1950":1,"2000":2,"2002":1,"2003":1,"2007":1,"2008":3,"2010":1,"2011":1,"2012":1,"2032":1,"2053":1,"2056":1,"2118":1,"2127":1,"2140":1,"2141":1,"2156":2,"2158":2,"2159":1,"2160":1,"2193":1,"2230":1,"2232":2}}],["connect",{"3":{"212":1,"213":1,"214":3,"215":1,"216":2,"219":4,"225":1,"1193":1,"1300":1,"1311":2,"1312":2,"1324":14,"1339":8,"1340":1,"1342":1,"1350":3,"1359":1,"1364":1,"1369":1,"1392":1,"1395":1,"1438":3,"1441":1,"1446":1,"1452":1,"1467":2,"1477":1,"1525":1,"1526":2,"1636":1,"2147":1,"2148":1,"2150":4,"2152":1,"2153":2,"2244":1}}],["connects",{"3":{"0":1,"272":1,"382":1,"1184":1,"1324":1,"1359":1,"1397":1,"1436":3,"1467":2,"1473":1,"1489":1,"1596":1,"1949":1,"2047":1}}],["connected",{"3":{"0":3,"135":2,"139":1,"193":1,"200":2,"224":1,"226":1,"227":1,"272":1,"433":1,"1123":1,"1237":1,"1257":1,"1286":1,"1302":1,"1304":1,"1307":1,"1309":7,"1311":1,"1324":2,"1395":2,"1396":1,"1402":2,"1415":1,"1436":9,"1438":2,"1932":1,"1936":1,"1940":1,"1946":1,"2039":1}}],["conjure",{"3":{"1415":1}}],["conjunction",{"3":{"1324":1}}],["conjunct",{"3":{"1237":1}}],["conjoined",{"3":{"1237":1}}],["concise",{"3":{"1311":1}}],["concretions",{"3":{"1309":1,"1538":1}}],["concretion",{"3":{"1309":2}}],["concretes",{"3":{"1436":1}}],["concreteenginebranching",{"3":{"1436":3}}],["concreteclasses",{"3":{"1436":11}}],["concretely",{"3":{"1271":1,"1286":1,"1312":1,"1324":1,"1359":5,"1396":1,"1417":1,"1436":1,"1790":1,"2016":1}}],["concretedomainexception",{"3":{"1199":2,"1207":1}}],["concrete",{"0":{"1957":1},"3":{"0":3,"5":1,"7":1,"47":1,"76":2,"78":1,"80":3,"81":1,"117":1,"136":1,"151":1,"160":1,"166":1,"185":1,"189":1,"243":1,"255":1,"318":1,"329":1,"331":1,"405":1,"449":1,"468":1,"469":1,"470":2,"474":1,"477":1,"518":1,"543":1,"545":1,"583":1,"657":1,"674":2,"675":1,"714":1,"725":3,"726":1,"782":1,"799":1,"848":1,"914":1,"921":1,"922":2,"926":1,"963":2,"964":3,"965":2,"966":1,"1058":1,"1060":2,"1100":2,"1168":4,"1169":1,"1170":1,"1212":9,"1217":1,"1223":1,"1226":1,"1229":6,"1230":1,"1231":2,"1234":1,"1235":1,"1236":1,"1237":11,"1239":2,"1240":1,"1244":1,"1247":12,"1249":1,"1257":1,"1259":14,"1261":1,"1262":1,"1265":1,"1266":1,"1270":7,"1271":1,"1278":1,"1282":2,"1286":40,"1287":1,"1288":1,"1289":2,"1300":20,"1301":1,"1302":1,"1303":1,"1309":11,"1310":9,"1311":21,"1312":2,"1315":2,"1316":1,"1320":1,"1322":1,"1323":27,"1324":9,"1331":1,"1332":1,"1333":1,"1334":1,"1339":3,"1350":8,"1352":1,"1354":1,"1359":86,"1360":1,"1363":2,"1366":1,"1369":8,"1370":1,"1371":1,"1380":7,"1381":1,"1383":1,"1395":28,"1396":20,"1402":1,"1412":1,"1415":17,"1417":6,"1421":1,"1427":3,"1428":2,"1429":1,"1436":81,"1438":1,"1455":2,"1465":1,"1488":2,"1489":2,"1490":1,"1491":1,"1496":2,"1498":1,"1526":1,"1536":1,"1538":1,"1577":2,"1585":2,"1634":1,"1646":1,"1651":3,"1656":1,"1666":1,"1697":1,"1700":2,"1719":1,"1797":1,"1804":1,"1806":1,"1810":1,"1815":1,"1820":1,"1824":1,"1829":1,"1848":1,"1849":1,"1856":1,"1871":1,"1879":1,"1881":1,"1883":1,"1889":1,"1891":3,"1895":1,"1915":1,"1922":1,"1929":3,"1930":3,"1931":2,"1941":1,"1952":1,"1953":1,"1987":1,"1988":1,"2070":1,"2072":1,"2074":1,"2078":1,"2079":1,"2080":2,"2171":1,"2230":1}}],["concat",{"3":{"1270":2,"1300":1,"1301":2,"1323":1,"1395":2,"1467":1,"1496":3}}],["concatenating",{"3":{"1132":1,"1324":1,"1350":1}}],["concatenation",{"3":{"86":1,"265":2,"1018":1,"1247":2,"1286":1,"1311":1,"1324":1,"1359":1,"1436":4,"1526":1,"1564":1}}],["concatenates",{"3":{"219":1,"359":1,"651":1,"1242":1,"1286":1,"1324":1,"1339":1,"1359":1,"1395":2,"1396":1,"1422":1,"1427":1}}],["concatenated",{"3":{"0":2,"230":1,"665":1,"1018":1,"1133":2,"1135":2,"1212":1,"1241":1,"1247":1,"1286":2,"1300":2,"1324":3,"1359":1,"1395":1,"1396":1,"1416":1,"1431":1,"1436":4,"1553":1,"1564":1,"1815":1,"1989":1}}],["concluding",{"3":{"486":1,"1467":1,"1476":1}}],["concluded",{"3":{"626":2,"640":1,"1075":1,"1438":1,"1455":2,"1475":1,"1492":1,"1526":2}}],["concludes",{"3":{"529":1,"1395":1,"1445":1,"1455":1,"1456":1,"1630":1}}],["conclude",{"3":{"230":1,"626":2,"820":1,"1286":1,"1455":2,"1492":1,"1526":1,"2032":1}}],["conclusions",{"3":{"624":1,"640":1}}],["conclusion",{"3":{"0":2,"122":1,"230":1,"241":1,"256":1,"624":3,"626":2,"627":1,"640":1,"803":1,"804":1,"1051":1,"1090":1,"1263":1,"1270":2,"1300":1,"1309":1,"1359":2,"1455":4,"1456":1,"1492":2,"1821":1,"1952":1,"2170":1,"2189":1}}],["concentrating",{"3":{"1286":1,"1300":1,"1323":1,"1369":1}}],["concentrate",{"3":{"1638":1}}],["concentrates",{"3":{"799":1,"802":1,"1053":1,"1110":1,"1416":2}}],["concentrated",{"3":{"799":1,"1286":1}}],["concert",{"3":{"1270":1}}],["concerned",{"3":{"1300":2,"1940":1}}],["concern",{"0":{"1879":1},"3":{"40":1,"49":1,"70":1,"73":1,"117":1,"119":1,"134":1,"139":1,"156":1,"162":2,"176":1,"177":1,"188":1,"223":1,"302":1,"317":1,"340":1,"342":1,"346":1,"351":1,"413":1,"416":1,"447":1,"648":1,"673":1,"683":1,"692":2,"698":1,"699":1,"714":1,"717":1,"827":2,"846":1,"1091":1,"1191":1,"1192":1,"1194":1,"1200":1,"1201":1,"1229":1,"1259":2,"1260":1,"1264":1,"1267":1,"1270":8,"1271":1,"1282":1,"1286":7,"1300":7,"1309":3,"1311":9,"1312":2,"1316":1,"1323":7,"1324":8,"1339":3,"1353":1,"1359":18,"1360":1,"1369":2,"1380":9,"1387":1,"1395":12,"1396":7,"1402":5,"1415":7,"1417":6,"1422":1,"1423":1,"1427":1,"1436":16,"1490":2,"1496":3,"1507":2,"1511":1,"1515":1,"1554":1,"1577":3,"1601":1,"1638":3,"1640":1,"1641":1,"1753":1,"1815":1,"1819":1,"1821":1,"1823":1,"1826":2,"1827":4,"1831":1,"1834":1,"1852":1,"1871":1,"1886":1,"1914":1,"1915":1,"1927":1,"1928":1,"1964":1,"1969":1,"1974":1,"1992":3,"2001":1,"2070":1,"2072":1,"2107":1,"2130":1,"2134":2,"2138":1,"2139":2,"2148":1,"2175":1,"2180":2}}],["concerns",{"0":{"1753":1,"2063":1},"3":{"0":1,"39":1,"61":1,"116":3,"117":2,"194":1,"255":1,"611":1,"673":1,"826":2,"1011":1,"1013":1,"1076":1,"1191":1,"1195":1,"1200":1,"1212":1,"1231":1,"1232":1,"1237":2,"1259":1,"1260":1,"1261":1,"1270":3,"1286":6,"1300":2,"1301":1,"1311":11,"1312":2,"1313":1,"1323":1,"1324":6,"1325":1,"1339":2,"1347":1,"1359":8,"1360":1,"1380":2,"1395":2,"1396":8,"1415":2,"1416":1,"1417":8,"1436":3,"1490":1,"1505":1,"1526":1,"1534":1,"1536":2,"1538":1,"1540":1,"1542":1,"1547":1,"1551":1,"1555":1,"1565":1,"1575":1,"1599":1,"1638":2,"1641":1,"1664":1,"1680":1,"1780":1,"1796":3,"1807":1,"1810":1,"1818":2,"1819":1,"1820":1,"1826":1,"1827":2,"1916":1,"1933":1,"2023":1,"2063":1,"2069":1,"2072":1,"2074":1,"2096":1,"2139":1,"2208":1,"2230":1}}],["concession",{"3":{"557":1,"1436":1}}],["conceptual",{"3":{"1259":1,"1339":1,"1638":1}}],["conceptually",{"3":{"1201":1,"1259":1,"1300":1,"1323":1,"1339":2,"1436":1}}],["concepts",{"1":{"1210":1,"1211":1,"1212":1,"1213":1,"1214":1,"1215":1,"1216":1},"3":{"1192":1,"1210":1,"1212":1,"1213":1,"1230":1,"1234":1,"1247":1,"1286":2,"1300":1,"1309":1,"1359":1,"1369":1,"1395":1,"1502":1,"1541":1,"1867":1,"1958":1,"2230":1}}],["concept",{"1":{"1502":1,"1503":1,"1504":1,"1505":1,"1506":1,"1507":1,"1508":1,"1509":1,"1510":1,"1511":1,"1512":1,"1513":1,"1514":1,"1515":1,"1516":1,"1517":1},"3":{"0":1,"319":1,"690":1,"1004":1,"1074":1,"1190":1,"1193":1,"1217":1,"1229":18,"1237":40,"1247":43,"1259":45,"1270":61,"1271":11,"1286":191,"1300":176,"1301":13,"1309":61,"1310":12,"1311":104,"1312":7,"1323":104,"1324":184,"1339":75,"1350":118,"1359":398,"1369":43,"1380":65,"1395":171,"1396":240,"1402":107,"1415":134,"1416":21,"1417":104,"1427":26,"1436":442,"1496":12,"1502":1,"1718":1,"1727":1,"1776":1,"1814":1}}],["concurrencyconflictdetector",{"2":{"1359":1},"3":{"1359":2}}],["concurrencyconventiontests",{"3":{"341":2,"1199":2,"1207":4,"1436":38,"1489":2,"1526":1,"1577":1,"1591":1}}],["concurrencyconventiontestsbase",{"2":{"341":1,"1651":1,"1654":1,"1875":1},"3":{"341":2,"1199":3,"1207":2,"1311":1,"1436":10,"1651":1,"1654":1,"1875":1}}],["concurrencylimiter",{"3":{"1324":1}}],["concurrencylimiteroptions",{"3":{"1324":1,"1339":1}}],["concurrencytokenrequest",{"3":{"1496":2}}],["concurrencytrackingtokenstorage",{"3":{"1199":2,"1207":1}}],["concurrencytagof",{"3":{"341":1,"881":1,"1311":1,"1324":2}}],["concurrencypartitionkey",{"3":{"1324":1}}],["concurrencypartition",{"3":{"827":1,"1324":1,"1337":1,"1339":2}}],["concurrencyetagtests",{"3":{"1199":1,"1207":2,"1300":2,"1438":1}}],["concurrencyetag",{"2":{"341":1,"881":1},"3":{"341":5,"881":1,"1199":17,"1203":1,"1207":2,"1300":20,"1311":8,"1324":2,"1350":2,"1382":1,"1389":1,"1395":7,"1396":5,"1438":1,"1496":3,"1662":1}}],["concurrency",{"0":{"1909":1},"1":{"338":1,"339":1,"340":1,"341":1,"342":1,"343":1,"344":1,"345":1,"346":1,"1869":1,"1870":1,"1871":1,"1872":1,"1873":1,"1874":1,"1875":1,"1876":1,"1877":1},"2":{"341":3},"3":{"0":10,"109":1,"136":1,"195":1,"201":1,"338":1,"339":1,"340":2,"341":5,"342":1,"343":5,"345":2,"346":1,"536":2,"538":1,"539":1,"544":1,"548":1,"792":1,"827":4,"828":2,"830":1,"831":1,"832":1,"833":1,"856":1,"881":1,"885":1,"905":1,"920":1,"921":2,"923":1,"926":1,"995":1,"996":2,"998":1,"1030":1,"1035":2,"1122":1,"1124":6,"1128":3,"1140":1,"1150":1,"1151":1,"1152":1,"1153":1,"1154":1,"1155":2,"1186":1,"1188":1,"1192":1,"1203":7,"1207":22,"1212":4,"1230":1,"1231":3,"1237":6,"1265":3,"1270":12,"1273":1,"1275":2,"1278":1,"1280":1,"1281":1,"1286":38,"1290":1,"1300":22,"1301":4,"1311":28,"1316":2,"1317":1,"1323":14,"1324":15,"1339":5,"1350":22,"1352":1,"1358":2,"1359":59,"1361":1,"1362":1,"1368":1,"1369":5,"1380":4,"1395":33,"1396":10,"1399":1,"1401":1,"1402":18,"1416":1,"1417":1,"1431":1,"1436":8,"1438":8,"1447":1,"1453":1,"1455":2,"1456":1,"1459":1,"1460":1,"1461":2,"1475":2,"1489":1,"1492":1,"1496":5,"1525":1,"1526":3,"1534":1,"1535":1,"1545":2,"1577":3,"1586":1,"1591":5,"1596":1,"1614":1,"1618":1,"1631":1,"1635":2,"1638":2,"1639":2,"1651":2,"1664":3,"1670":1,"1671":1,"1685":2,"1707":1,"1720":1,"1765":1,"1779":1,"1805":1,"1810":1,"1823":1,"1861":2,"1868":1,"1869":3,"1870":2,"1871":2,"1873":1,"1876":2,"1877":3,"1927":1,"2000":2,"2002":2,"2024":2,"2059":1,"2104":1,"2164":1,"2167":1,"2168":1,"2169":1,"2186":2,"2193":1,"2207":1,"2232":1}}],["concurrentrequests",{"3":{"1467":1}}],["concurrentmessagelimit",{"2":{"1582":1,"1707":1},"3":{"1323":5,"1577":1,"1582":1,"1591":1,"1707":1}}],["concurrentdictionary",{"2":{"996":1,"1236":1,"1909":1,"1916":1},"3":{"243":1,"996":1,"1236":1,"1237":1,"1241":1,"1247":8,"1259":7,"1270":2,"1286":11,"1300":4,"1301":5,"1309":3,"1310":3,"1316":1,"1323":5,"1324":1,"1417":3,"1496":1,"1909":1,"1916":1}}],["concurrently",{"3":{"0":1,"380":1,"832":1,"868":1,"1124":1,"1270":4,"1286":1,"1311":3,"1324":2,"1339":1,"1359":3,"1369":1,"1395":1,"1417":2,"1436":2,"1455":3,"1909":2,"1945":1}}],["concurrent",{"3":{"0":3,"58":1,"62":1,"178":1,"195":1,"201":1,"223":1,"225":1,"245":1,"286":1,"340":1,"344":1,"390":2,"436":1,"501":1,"507":2,"508":1,"513":1,"517":1,"536":2,"540":1,"541":1,"690":1,"721":1,"830":1,"854":1,"857":1,"996":1,"1125":1,"1155":1,"1237":1,"1247":4,"1258":1,"1259":6,"1270":5,"1274":1,"1286":14,"1289":1,"1298":1,"1300":17,"1301":4,"1304":1,"1307":1,"1309":3,"1310":2,"1311":3,"1323":4,"1324":14,"1326":1,"1339":2,"1350":2,"1352":4,"1358":1,"1359":23,"1369":2,"1382":1,"1395":8,"1396":14,"1399":1,"1402":6,"1415":1,"1416":1,"1417":3,"1427":1,"1436":3,"1438":2,"1443":1,"1458":1,"1467":2,"1474":1,"1492":1,"1529":1,"1534":1,"1577":2,"1630":1,"1638":2,"1639":2,"1651":1,"1708":1,"1748":1,"1749":1,"1765":2,"1774":1,"1868":1,"1877":1,"1909":1,"1934":2,"2001":1,"2164":2,"2167":1,"2169":2}}],["confuse",{"3":{"1300":1,"1301":1,"1350":1}}],["confused",{"3":{"1286":1,"1436":3,"1561":1,"1950":1}}],["confusing",{"3":{"692":1,"933":1,"1300":1,"1415":2,"1427":1,"1436":2,"1489":1,"1492":1}}],["confusion",{"3":{"370":1,"1300":1,"1311":1,"1537":1,"1576":1,"1577":1,"1640":1,"1667":1,"1673":1,"1897":1,"1899":1,"2125":1,"2128":1,"2202":1}}],["conforminggrid",{"3":{"1436":3}}],["conformingmarkup",{"3":{"1436":1}}],["conforming",{"3":{"1436":3,"1664":1}}],["conform",{"3":{"1436":1,"1639":1}}],["conformanttests",{"3":{"1198":1,"1199":4,"1207":2,"1436":19,"1496":1}}],["conformant",{"3":{"674":1,"785":1,"1436":2}}],["conformance",{"1":{"569":1,"570":1,"571":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"578":1,"579":1},"2":{"572":1,"579":1},"3":{"0":2,"115":1,"121":1,"124":1,"126":1,"143":1,"217":1,"218":2,"448":1,"450":1,"459":1,"464":1,"569":1,"571":1,"572":8,"573":1,"577":1,"579":2,"617":2,"618":1,"619":2,"622":1,"749":1,"773":1,"776":1,"778":1,"842":1,"953":2,"955":1,"957":1,"1207":34,"1212":1,"1262":2,"1311":5,"1324":1,"1428":2,"1436":75,"1438":1,"1485":1,"1487":1,"1488":5,"1489":2,"1492":3,"1494":1,"1524":1,"1531":1,"1558":1,"1571":1,"1591":1,"1660":1,"1671":2,"1825":1,"1826":1,"1827":1,"2040":1,"2041":1,"2055":2,"2060":1,"2131":1,"2132":1,"2232":2}}],["confounds",{"3":{"610":1}}],["confound",{"3":{"609":1,"1436":1,"1467":1,"1474":1}}],["confers",{"3":{"1300":1,"1963":2,"1965":2}}],["confer",{"3":{"186":1,"1270":1,"1300":1,"1961":1}}],["conferencedbcontext",{"2":{"1849":1},"3":{"1849":1}}],["conference→engagement",{"3":{"1534":1,"1611":1,"1612":1}}],["conference→engagement→notification→conference",{"3":{"1526":1}}],["conference↔engagement",{"3":{"1526":1}}],["conferenceimage",{"3":{"1467":1}}],["conferenceintegrationtestbase",{"3":{"1199":32,"1207":2,"1300":1}}],["conferenceintegrationtestcollection",{"3":{"1199":5,"1207":2}}],["conferenceintegrationtestfixture",{"3":{"1199":37,"1207":2,"1436":1}}],["conferenceevent",{"3":{"1359":2}}],["conferenceentityconfigurationtests",{"3":{"1199":1,"1207":4,"1437":1,"1438":1}}],["conferenceerrorresourcestests",{"3":{"1199":1,"1207":2,"1380":2,"1437":1,"1438":1}}],["conferenceerrorresources",{"2":{"1377":1},"3":{"1199":2,"1203":1,"1207":2,"1311":1,"1377":3,"1380":7,"1496":1}}],["conferencecachetag",{"3":{"1380":1}}],["conferencecache",{"2":{"1376":1},"3":{"1359":1,"1376":1,"1379":1,"1380":3}}],["conferencecategories",{"3":{"1359":4,"1380":3,"1395":9,"1447":1,"1627":1,"1632":2,"1640":2}}],["conferencecategoriescontrollertests",{"3":{"1199":1,"1207":2}}],["conferencecategoriescontroller",{"2":{"1371":1,"1372":1},"3":{"1199":3,"1203":1,"1207":2,"1311":2,"1350":3,"1359":21,"1371":2,"1372":2,"1373":1,"1375":1,"1380":8}}],["conferencecategoryformfields",{"3":{"1395":4}}],["conferencecategoryformmodel",{"2":{"1384":1},"3":{"1199":3,"1203":1,"1207":2,"1384":2,"1395":8}}],["conferencecategory",{"3":{"1380":2,"1395":40,"1496":1}}],["conferencecategoryidentifiertype",{"3":{"1350":6,"1359":17,"1380":2,"1395":7}}],["conferencecategoryitemspanel",{"2":{"1385":1},"3":{"1199":1,"1203":1,"1207":2,"1385":2,"1395":20}}],["conferencecategoryitemeditmodel",{"2":{"1384":1},"3":{"1199":2,"1203":1,"1207":2,"1384":2,"1395":7}}],["conferencecategoryvalidationrules",{"3":{"1207":3,"1350":2,"1359":17}}],["conferencecategoryvalidationrulestests",{"3":{"1199":1,"1207":6}}],["conferencecategoryconfiguration",{"2":{"1362":1},"3":{"1199":2,"1203":1,"1207":2,"1350":4,"1362":2,"1369":3}}],["conferencecategorycreaterequestvalidatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["conferencecategorycreaterequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":12}}],["conferencecategorycreaterequestmapper",{"3":{"1199":1,"1203":1,"1207":2,"1359":11}}],["conferencecategorycreaterequest",{"3":{"1199":9,"1203":1,"1207":2,"1270":1,"1359":18,"1380":2}}],["conferencecategorycreate",{"3":{"1199":1,"1203":1,"1207":2,"1395":20}}],["conferencecategorycreatemodel",{"3":{"1199":2,"1203":1,"1207":2,"1395":7}}],["conferencecategorycreatepage",{"3":{"1199":5,"1207":2}}],["conferencecategorynavigationpopulatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["conferencecategorynavigationpopulator",{"3":{"1199":3,"1203":1,"1207":2,"1310":1,"1354":1,"1359":8}}],["conferencecategoryentityqueryservicetests",{"3":{"1199":1,"1207":2,"1359":2}}],["conferencecategoryentityqueryservice",{"3":{"1199":3,"1203":1,"1207":2,"1350":2,"1354":2,"1359":11}}],["conferencecategoryeditmodel",{"3":{"1199":2,"1203":1,"1207":2,"1395":5}}],["conferencecategoryupdateappliertests",{"3":{"1199":1,"1207":2,"1359":2}}],["conferencecategoryupdateapplier",{"3":{"1199":2,"1203":1,"1207":2,"1270":1,"1354":1,"1359":5}}],["conferencecategoryupdaterequestvalidatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["conferencecategoryupdaterequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":6}}],["conferencecategoryupdaterequest",{"3":{"1199":9,"1203":1,"1207":2,"1359":12,"1380":1}}],["conferencecategorytitlerules",{"3":{"1199":4,"1203":1,"1207":1,"1359":9}}],["conferencecategorylist",{"2":{"1383":1},"3":{"1199":1,"1203":1,"1207":2,"1324":2,"1350":1,"1383":2,"1395":16}}],["conferencecategorylistpage",{"3":{"1199":3,"1207":2}}],["conferencecategorydetails",{"2":{"1395":1},"3":{"1395":1}}],["conferencecategorydetail",{"2":{"1384":1},"3":{"1199":1,"1203":1,"1207":2,"1384":2,"1395":22}}],["conferencecategorydetailpage",{"3":{"1199":4,"1207":2}}],["conferencecategorydtomappertests",{"3":{"1199":1,"1207":2}}],["conferencecategorydtomapper",{"3":{"1199":7,"1203":1,"1207":2,"1350":2,"1359":8}}],["conferencecategorydtotests",{"3":{"1199":1,"1207":2}}],["conferencecategorydto",{"3":{"1199":21,"1203":1,"1207":2,"1347":2,"1350":11,"1359":13,"1380":1,"1395":19}}],["conferencecategoryservice",{"2":{"1382":1},"3":{"881":1,"1199":1,"1203":1,"1207":2,"1382":3,"1395":6}}],["conferencecrudregistrationtests",{"3":{"1199":1,"1207":2,"1270":2,"1359":2,"1438":2}}],["conferencecrossservicefactory",{"3":{"1199":2,"1207":2,"1436":2}}],["conferencetestwebapplicationfactory",{"3":{"1199":2,"1207":2,"1436":2}}],["conferencetestdbcontext",{"3":{"1199":2,"1207":1}}],["conferencetrackinfo",{"2":{"1393":1},"3":{"1199":2,"1203":1,"1207":1,"1393":1,"1395":4,"1496":2}}],["conferenceaiguardrailsregistrationtests",{"2":{"1435":1,"1487":1,"1526":1},"3":{"1199":1,"1207":3,"1369":1,"1435":2,"1437":1,"1487":1,"1526":2,"1535":1}}],["conferenceroutepaths",{"2":{"1394":1,"1395":2},"3":{"1199":39,"1203":1,"1207":2,"1324":1,"1394":4,"1395":71,"1396":5,"1416":1}}],["conferencereadaudience",{"2":{"243":1,"388":1,"1307":1,"1348":1,"1373":1,"1379":1,"1391":1,"1922":1},"3":{"243":1,"388":2,"1199":6,"1203":1,"1207":2,"1307":1,"1309":2,"1348":4,"1350":7,"1373":2,"1379":1,"1380":7,"1391":1,"1395":6,"1496":2,"1922":1}}],["conferences",{"0":{"2240":1},"3":{"683":1,"1395":2,"2110":1,"2212":1,"2216":2,"2240":1,"2241":1,"2243":1,"2245":2}}],["conferenceuimodule",{"3":{"649":1,"1199":2,"1203":1,"1207":2,"1324":2,"1395":18,"1526":3}}],["conferenceuihostapplicationfactory",{"2":{"218":1},"3":{"218":2,"572":1,"575":1,"1199":7,"1207":2,"1437":2,"1487":1}}],["conferencepubliccache",{"2":{"386":1,"392":1},"3":{"386":1,"392":1,"1350":1,"1379":1,"1380":1,"1496":1}}],["conferencepermissiongrantstests",{"3":{"1199":1,"1207":2,"1437":1,"1487":1,"1496":1}}],["conferencepermissiongrants",{"2":{"1348":1,"1373":1,"1377":2},"3":{"186":1,"1116":2,"1119":1,"1199":3,"1203":1,"1207":2,"1348":5,"1350":6,"1373":1,"1377":5,"1380":5,"1415":1,"1496":2,"1526":1}}],["conferencepermissions",{"2":{"188":1,"1018":1,"1192":1,"1264":1,"1348":1,"1372":1,"1373":2,"1376":1,"1377":1,"1380":1,"1964":1},"3":{"186":1,"188":1,"1018":1,"1116":1,"1192":1,"1199":30,"1203":1,"1207":2,"1264":1,"1347":2,"1348":7,"1350":16,"1359":8,"1372":1,"1373":6,"1376":1,"1377":2,"1380":46,"1395":1,"1496":3,"1964":1}}],["conferencefeatures",{"2":{"300":1,"1018":1,"1021":1,"1099":1,"1103":1,"2136":1},"3":{"300":1,"1018":1,"1021":1,"1099":1,"1103":1,"1199":5,"1203":1,"1207":2,"1270":1,"1300":1,"1347":7,"1350":10,"1359":5,"1380":2,"1396":1,"1496":2,"1535":1,"2136":2}}],["conferencemodule",{"2":{"1314":1,"1349":1,"1370":1,"1880":1,"1884":1},"3":{"583":3,"585":1,"1199":3,"1203":1,"1207":2,"1314":4,"1323":3,"1349":2,"1350":7,"1359":1,"1369":1,"1370":1,"1377":4,"1380":11,"1436":2,"1880":1,"1884":1}}],["conferencemoduleseeder",{"2":{"1364":1,"1370":1,"1377":1},"3":{"295":1,"1199":1,"1203":1,"1207":2,"1323":2,"1364":3,"1369":4,"1370":1,"1377":3,"1380":8}}],["conferencemoduledbseedertests",{"3":{"1199":1,"1207":3,"1369":6,"1438":1}}],["conferencemoduledbseeder",{"2":{"295":1,"1364":1,"1377":1},"3":{"295":2,"1199":3,"1203":1,"1207":2,"1286":2,"1350":4,"1359":1,"1364":12,"1369":9,"1377":1,"1380":3,"1496":1}}],["conference",{"0":{"1377":1,"1378":1,"1402":1,"1604":1},"1":{"1340":1,"1341":1,"1342":1,"1343":1,"1344":1,"1345":1,"1346":1,"1347":1,"1348":1,"1349":1,"1350":1,"1351":1,"1352":1,"1353":1,"1354":1,"1355":1,"1356":1,"1357":1,"1358":1,"1359":1,"1360":1,"1361":1,"1362":1,"1363":1,"1364":1,"1365":1,"1366":1,"1367":1,"1368":1,"1369":1,"1370":1,"1371":1,"1372":1,"1373":1,"1374":1,"1375":1,"1376":1,"1377":1,"1378":1,"1379":1,"1380":1,"1381":1,"1382":1,"1383":1,"1384":1,"1385":1,"1386":1,"1387":1,"1388":1,"1389":1,"1390":1,"1391":1,"1392":1,"1393":1,"1394":1,"1395":1,"1628":1,"1629":1,"1630":1,"1631":1,"1632":1,"1633":1,"1634":1,"1635":1,"1636":1,"1637":1,"1638":1,"1639":1,"1640":1,"1641":1,"2109":1,"2110":1,"2111":1,"2112":1,"2113":1,"2114":1,"2115":1},"2":{"47":1,"59":1,"536":1,"564":1,"1116":1,"1203":1,"1207":8,"1271":1,"1340":1,"1341":3,"1344":1,"1347":1,"1349":1,"1350":6,"1359":4,"1363":1,"1367":1,"1369":2,"1370":3,"1378":1,"1379":2,"1380":7,"1381":1,"1395":6,"1427":1,"1435":1,"1437":2,"1438":1,"1442":1,"1445":1,"1464":1,"1473":1,"1474":1,"1486":1,"1487":2,"1496":1,"1525":1,"1613":1,"1615":1,"1631":1,"2030":1,"2034":1,"2035":1,"2036":1,"2038":1,"2111":1},"3":{"0":11,"31":1,"47":1,"52":2,"55":1,"58":4,"59":2,"60":1,"61":1,"62":2,"63":1,"68":1,"77":2,"80":1,"85":1,"86":1,"93":4,"95":1,"97":1,"99":1,"104":1,"117":2,"128":3,"164":1,"165":1,"175":2,"181":2,"184":1,"186":6,"187":1,"195":4,"203":2,"235":2,"238":1,"241":1,"243":10,"245":2,"249":1,"250":2,"251":2,"252":2,"254":2,"257":2,"259":2,"260":6,"261":3,"291":1,"295":5,"325":6,"341":1,"344":2,"350":2,"353":3,"379":1,"387":2,"388":5,"390":6,"392":3,"393":1,"401":2,"433":1,"434":1,"435":1,"446":1,"448":6,"452":1,"453":1,"454":1,"468":3,"470":6,"472":1,"475":8,"476":4,"477":6,"478":6,"487":1,"491":2,"492":3,"493":3,"494":2,"495":2,"520":1,"536":3,"545":13,"550":3,"551":1,"552":1,"554":1,"556":4,"559":2,"564":1,"572":6,"578":1,"583":13,"585":4,"599":2,"602":1,"640":2,"643":1,"649":3,"657":10,"665":1,"674":2,"681":1,"689":1,"690":5,"691":2,"692":1,"715":1,"733":1,"743":3,"744":2,"749":2,"752":1,"757":2,"765":1,"766":1,"774":2,"780":3,"782":8,"798":5,"803":5,"805":5,"827":1,"831":2,"832":1,"837":4,"838":2,"839":1,"841":1,"868":2,"869":7,"870":2,"872":1,"875":3,"876":1,"877":2,"881":5,"891":1,"914":2,"920":1,"924":3,"926":3,"927":1,"954":7,"956":3,"958":3,"960":1,"980":2,"988":1,"991":1,"995":3,"998":2,"999":1,"1004":7,"1017":5,"1018":16,"1021":2,"1022":1,"1049":4,"1054":5,"1082":4,"1085":1,"1090":5,"1093":2,"1094":5,"1095":2,"1099":4,"1102":1,"1103":2,"1115":1,"1116":33,"1117":1,"1118":2,"1119":1,"1124":2,"1125":1,"1140":1,"1150":2,"1168":2,"1192":10,"1194":2,"1199":1121,"1201":2,"1202":15,"1203":736,"1206":16,"1207":3461,"1208":13,"1209":48,"1211":3,"1212":8,"1237":26,"1239":10,"1242":2,"1247":25,"1259":2,"1262":1,"1264":4,"1270":47,"1271":29,"1284":1,"1286":49,"1300":28,"1301":14,"1304":1,"1305":1,"1307":2,"1309":2,"1310":31,"1311":57,"1312":27,"1314":7,"1318":2,"1323":30,"1324":50,"1325":1,"1326":2,"1328":3,"1331":1,"1332":4,"1333":1,"1334":2,"1335":1,"1339":21,"1340":5,"1341":17,"1342":25,"1344":14,"1345":12,"1346":2,"1347":36,"1348":18,"1349":35,"1350":865,"1351":7,"1352":19,"1353":21,"1354":11,"1355":11,"1356":5,"1357":4,"1358":5,"1359":2879,"1360":5,"1361":3,"1362":2,"1363":5,"1364":9,"1365":2,"1366":5,"1367":6,"1368":4,"1369":234,"1370":9,"1371":14,"1372":2,"1373":11,"1374":2,"1375":4,"1376":4,"1377":16,"1378":19,"1379":9,"1380":522,"1381":8,"1382":2,"1383":2,"1384":1,"1386":1,"1389":2,"1390":4,"1391":2,"1392":1,"1393":2,"1394":2,"1395":1049,"1396":252,"1397":1,"1401":4,"1402":76,"1405":1,"1406":4,"1413":2,"1415":39,"1416":28,"1417":10,"1426":2,"1427":23,"1435":12,"1436":73,"1437":49,"1438":59,"1441":9,"1442":17,"1443":1,"1445":2,"1446":3,"1447":8,"1448":1,"1449":2,"1455":5,"1456":3,"1457":5,"1458":10,"1460":1,"1462":1,"1464":3,"1465":2,"1467":40,"1473":3,"1474":7,"1476":2,"1486":4,"1487":15,"1488":3,"1489":4,"1490":3,"1492":6,"1496":87,"1500":2,"1514":2,"1517":1,"1520":1,"1523":3,"1525":4,"1526":58,"1529":1,"1530":1,"1531":4,"1532":2,"1534":5,"1535":7,"1582":1,"1596":1,"1601":1,"1611":11,"1612":1,"1613":2,"1615":1,"1617":1,"1618":1,"1619":1,"1621":2,"1622":1,"1625":2,"1626":3,"1627":12,"1628":1,"1629":8,"1630":10,"1631":10,"1632":6,"1634":22,"1635":1,"1636":1,"1637":5,"1638":51,"1639":3,"1640":4,"1641":4,"1650":1,"1656":1,"1673":1,"1678":2,"1785":1,"1855":1,"1859":1,"1860":1,"1865":1,"1869":1,"1874":2,"1880":2,"1882":1,"1884":1,"1922":6,"1936":1,"1942":2,"1961":1,"1962":1,"1963":2,"1995":3,"2004":1,"2006":1,"2008":2,"2009":1,"2016":1,"2019":1,"2021":1,"2022":2,"2024":1,"2030":3,"2033":1,"2034":2,"2035":1,"2036":2,"2038":1,"2055":1,"2087":1,"2109":1,"2110":3,"2111":1,"2113":2,"2115":1,"2123":1,"2127":2,"2131":7,"2136":1,"2138":1,"2156":1,"2179":4,"2210":1,"2214":3,"2216":2,"2221":4,"2228":6,"2231":1,"2239":4,"2240":5,"2244":1}}],["conflate",{"3":{"1218":1,"1641":1,"1896":1}}],["conflated",{"3":{"486":1,"1013":1}}],["conflates",{"3":{"108":1,"176":1,"829":1,"1229":1,"1311":1,"1804":1,"1999":1}}],["conflating",{"3":{"40":1,"1380":1,"1396":1,"1436":1,"1815":1,"1817":1,"1860":1,"2014":1,"2068":1,"2130":1}}],["conflictkindinflight",{"3":{"1311":1}}],["conflictkindbodymismatch",{"3":{"1311":1}}],["conflictkindtag",{"3":{"1311":1}}],["conflicts",{"3":{"38":1,"1286":4,"1639":1,"2069":1}}],["conflicting",{"3":{"0":1,"340":1,"633":1,"888":1,"1279":1,"1286":6,"1311":1,"1611":1,"1651":1,"1684":1,"1876":1,"2097":1}}],["conflict",{"0":{"1872":1},"1":{"2061":1,"2062":1,"2063":1,"2064":1,"2065":1,"2066":1,"2067":1,"2068":1,"2069":1},"2":{"1806":1,"1873":1},"3":{"0":2,"108":1,"109":4,"157":1,"339":1,"342":3,"343":3,"344":1,"348":1,"350":1,"539":2,"996":1,"998":1,"1019":1,"1147":1,"1219":1,"1222":1,"1229":4,"1237":2,"1286":11,"1289":2,"1300":4,"1311":19,"1312":1,"1323":1,"1347":1,"1350":3,"1358":1,"1359":12,"1368":1,"1380":1,"1395":3,"1396":11,"1399":1,"1402":3,"1406":1,"1415":3,"1427":1,"1436":6,"1438":2,"1443":1,"1455":1,"1467":1,"1487":1,"1488":1,"1567":1,"1632":1,"1639":1,"1640":2,"1641":2,"1651":2,"1662":1,"1664":1,"1747":1,"1774":1,"1784":1,"1799":1,"1805":2,"1806":2,"1873":4,"1874":2,"1876":3,"1877":2,"1909":1,"1926":2,"1934":1,"1954":1,"2006":1,"2060":1,"2061":3,"2062":1,"2156":1,"2163":1,"2210":1}}],["confining",{"3":{"1369":1}}],["confines",{"3":{"1431":1}}],["confine",{"3":{"1311":1}}],["confined",{"3":{"0":1,"493":1,"495":1,"557":1,"799":1,"979":1,"980":1,"1126":1,"1324":1,"1339":1,"1369":1,"1396":1,"1417":1,"1436":4,"1724":1,"2232":1}}],["confident",{"3":{"1496":2,"1794":1}}],["confidential",{"3":{"360":1,"1323":1,"2142":1}}],["confidentiality",{"3":{"358":1,"359":1,"360":2,"363":1,"1286":1,"1903":1,"2141":1,"2142":2,"2146":1}}],["confidence",{"3":{"593":1,"2029":1,"2043":1,"2050":1}}],["confirmnewpasswordfield",{"3":{"1436":1}}],["confirmdeleteasync",{"3":{"1433":1,"1436":1,"1488":1}}],["confirmpasswordfield",{"3":{"1436":1}}],["confirmpassword",{"3":{"1324":6}}],["confirmtext",{"3":{"1324":2}}],["confirmtwofactorenrollmenthandlerbase",{"2":{"1300":1,"1322":1,"2198":1},"3":{"1199":2,"1203":1,"1207":2,"1300":4,"1322":3,"1323":5,"1496":1,"2198":1}}],["confirmsonceandreportssuccess",{"3":{"1436":1}}],["confirms",{"3":{"790":1,"1300":1,"1324":3,"1359":4,"1369":1,"1395":4,"1396":2,"1401":1,"1402":2,"1415":1,"1417":1,"1436":6,"1455":1,"1457":1,"1496":2,"1499":1,"1765":1}}],["confirming",{"3":{"676":1,"1259":1,"1295":1,"1300":1,"1323":1,"1324":2,"1380":1,"1396":1,"1415":2}}],["confirmableauthenticationservice",{"3":{"1199":2,"1207":1}}],["confirmableauthuser",{"3":{"1199":3,"1207":1}}],["confirmableuser",{"3":{"1199":4,"1207":1}}],["confirmable",{"3":{"907":1,"1092":1,"1553":1,"2179":1}}],["confirmasync",{"3":{"649":1,"1324":5,"1415":1}}],["confirmationalert",{"3":{"1436":2}}],["confirmations",{"3":{"1436":1,"1742":1}}],["confirmationservice",{"2":{"1324":1},"3":{"1324":3}}],["confirmationstate",{"3":{"1199":2,"1203":1,"1207":1,"1324":4,"1496":1}}],["confirmationthrottled",{"3":{"1300":1}}],["confirmationurl",{"3":{"1300":1,"1761":1}}],["confirmation",{"0":{"1295":1,"1408":1},"1":{"2194":1,"2195":1,"2196":1,"2197":1,"2198":1,"2199":1,"2200":1,"2201":1,"2202":1,"2203":1},"2":{"1761":1},"3":{"0":5,"173":1,"175":2,"176":1,"177":1,"230":1,"348":1,"350":2,"535":2,"618":1,"650":2,"672":1,"733":1,"735":1,"907":1,"1057":1,"1058":2,"1059":6,"1060":1,"1062":1,"1063":1,"1092":1,"1192":1,"1212":1,"1287":2,"1289":1,"1295":2,"1300":26,"1301":5,"1322":1,"1323":7,"1324":25,"1350":3,"1395":10,"1396":3,"1402":2,"1403":1,"1405":1,"1414":1,"1415":24,"1417":1,"1422":1,"1427":7,"1433":1,"1436":12,"1438":1,"1467":1,"1487":1,"1496":7,"1553":1,"1570":1,"1577":1,"1627":3,"1633":1,"1641":1,"1643":1,"1653":1,"1669":1,"1749":1,"1755":1,"1761":3,"1763":1,"1764":1,"1765":1,"1767":1,"1769":1,"1771":1,"1776":2,"1779":1,"1835":1,"1964":1,"1977":1,"2001":1,"2012":1,"2161":3,"2167":1,"2169":1,"2193":1,"2194":3,"2198":2,"2202":3,"2203":1,"2208":2,"2211":1}}],["confirmemailasync",{"3":{"1324":3,"1415":1,"1436":1}}],["confirmemailhandlertests",{"3":{"1199":1,"1207":2,"1300":1,"1415":2}}],["confirmemailhandler",{"2":{"1408":1},"3":{"1199":2,"1203":1,"1207":2,"1300":1,"1323":1,"1324":1,"1408":2,"1415":5,"1496":1}}],["confirmemailhandlerbase",{"2":{"2198":1},"3":{"1199":3,"1203":1,"1207":2,"1300":6,"1322":4,"1323":5,"1415":3,"1496":1,"2198":1}}],["confirmemailpagetests",{"3":{"1199":1,"1207":2,"1436":1}}],["confirmemailpagetestsbase",{"2":{"577":1,"960":1,"1432":1},"3":{"0":1,"577":2,"960":1,"1199":3,"1207":2,"1324":2,"1432":3,"1436":2}}],["confirmemailcommand",{"2":{"1408":1},"3":{"1199":5,"1203":1,"1207":2,"1300":2,"1324":1,"1408":2,"1415":8,"1436":1}}],["confirmemailrequestvalidator",{"2":{"1295":1},"3":{"1199":1,"1203":1,"1207":1,"1295":1,"1300":3}}],["confirmemailrequest",{"3":{"1199":10,"1203":1,"1207":1,"1295":1,"1300":2,"1323":1,"1324":1,"1415":3}}],["confirmemail",{"2":{"1062":1},"3":{"577":1,"1059":1,"1062":2,"1199":2,"1203":3,"1207":9,"1295":1,"1300":3,"1323":2,"1324":12,"1408":2,"1414":1,"1415":8,"1436":2,"1496":2,"1526":2,"1591":1,"1627":1,"1761":1}}],["confirmemailtests",{"3":{"577":2,"578":2,"1199":1,"1207":2,"1436":1}}],["confirmedtoolspropertykey",{"3":{"1427":1}}],["confirmed",{"2":{"1422":1},"3":{"193":1,"254":1,"350":2,"353":1,"490":1,"799":1,"905":1,"909":1,"947":1,"1012":1,"1059":1,"1091":1,"1196":1,"1295":1,"1300":6,"1322":1,"1323":7,"1324":9,"1395":2,"1396":4,"1405":1,"1406":1,"1408":1,"1415":10,"1422":2,"1427":6,"1436":2,"1477":1,"1496":17,"1526":1,"1561":1,"1630":2,"1631":1,"1633":1,"1667":1,"1675":1,"1755":1,"1764":1,"1772":1,"1777":1,"1846":1,"1973":1,"1977":1,"2169":1,"2198":2}}],["confirm",{"3":{"0":1,"140":1,"175":1,"570":1,"577":1,"794":1,"907":1,"1059":1,"1062":1,"1116":1,"1235":1,"1286":1,"1300":2,"1311":1,"1322":1,"1323":7,"1324":14,"1350":3,"1357":1,"1359":3,"1372":1,"1380":5,"1383":1,"1395":15,"1396":4,"1402":1,"1414":2,"1415":8,"1417":2,"1432":2,"1436":10,"1467":1,"1474":1,"1478":2,"1488":1,"1489":1,"1526":2,"1532":1,"1586":1,"1591":2,"1596":1,"1600":1,"1607":1,"1608":1,"1627":1,"1631":1,"1653":1,"1657":1,"1697":1,"1698":1,"1710":1,"1741":1,"1742":2,"1755":1,"1761":1,"1768":1,"1770":1,"1776":2,"1995":1,"2169":1,"2196":1}}],["configfilter",{"3":{"1496":1}}],["configkey",{"3":{"1339":4,"1415":3}}],["configs",{"3":{"1192":1,"1361":1,"1362":1,"1496":1,"1500":1,"1853":1}}],["config",{"0":{"1361":1,"1362":1},"1":{"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1},"2":{"369":1,"370":1,"372":1,"527":1,"632":1,"764":1,"869":1,"938":1,"1649":1},"3":{"0":14,"34":1,"60":1,"93":1,"95":1,"117":1,"164":1,"189":1,"225":1,"297":1,"300":2,"348":1,"350":1,"369":1,"370":5,"372":2,"418":2,"419":1,"420":1,"422":1,"428":1,"429":1,"484":1,"490":1,"491":1,"492":1,"493":1,"527":1,"556":1,"557":1,"619":1,"632":1,"633":5,"635":1,"674":1,"677":1,"749":1,"764":1,"766":1,"826":1,"827":1,"829":2,"840":2,"869":2,"914":1,"938":1,"1012":1,"1034":1,"1037":1,"1059":3,"1075":1,"1184":1,"1192":5,"1212":7,"1241":2,"1247":5,"1270":2,"1300":12,"1307":1,"1309":1,"1311":7,"1314":1,"1315":1,"1320":2,"1323":2,"1324":17,"1336":2,"1338":2,"1339":15,"1349":1,"1350":1,"1362":2,"1369":1,"1380":2,"1415":1,"1416":8,"1427":1,"1429":1,"1431":1,"1436":11,"1437":1,"1438":8,"1441":1,"1447":3,"1451":1,"1455":3,"1467":1,"1487":2,"1488":2,"1496":5,"1500":1,"1510":1,"1521":1,"1526":5,"1534":1,"1548":2,"1553":1,"1554":3,"1563":1,"1569":1,"1572":1,"1576":1,"1577":4,"1583":1,"1590":1,"1591":4,"1611":1,"1614":1,"1619":1,"1649":1,"1653":2,"1661":1,"1665":1,"1666":1,"1790":1,"1821":1,"1842":1,"1849":1,"1850":1,"1853":1,"1854":1,"1857":1,"1882":2,"1893":1,"1894":1,"1896":1,"1898":1,"1899":2,"1904":2,"1958":1,"1965":1,"1975":1,"1976":2,"1979":1,"1989":2,"2001":1,"2002":1,"2008":1,"2011":2,"2023":1,"2094":1,"2098":1,"2136":1,"2138":1,"2139":2,"2142":1,"2220":1,"2232":2}}],["configuring",{"3":{"402":1,"1286":1,"1300":1,"1301":1,"1311":1,"1320":1,"1324":1,"1339":1,"1467":1}}],["configurability",{"3":{"776":1}}],["configurablewarmuptask",{"3":{"1199":2,"1207":1}}],["configurable",{"0":{"1708":1},"3":{"0":4,"157":1,"189":1,"279":1,"312":1,"318":1,"381":1,"425":1,"461":1,"834":1,"883":1,"905":1,"1286":3,"1293":1,"1297":1,"1300":4,"1301":1,"1311":3,"1323":1,"1324":1,"1339":4,"1350":2,"1359":1,"1424":1,"1427":1,"1436":1,"1496":1,"1577":1,"1669":1,"1670":1,"1671":1,"1708":1,"1752":1,"1767":2,"1945":1,"1950":1,"1994":1,"2198":1}}],["configurator",{"3":{"572":1,"1259":1,"1311":1,"1323":2,"1339":5}}],["configurationchanges",{"3":{"1416":3}}],["configurationkey",{"3":{"1323":2}}],["configurationassemblies",{"3":{"1286":2}}],["configurationbuilder",{"3":{"1050":1,"1286":2,"1436":1}}],["configurationoauthuisettings",{"2":{"350":1},"3":{"350":1,"1199":2,"1203":1,"1207":2,"1311":1,"1324":8,"1416":2,"1496":1}}],["configurationmanager",{"2":{"237":1,"1335":1},"3":{"237":1,"665":1,"1335":1,"1339":2,"1429":1,"1436":1,"1438":1,"1442":1,"1443":1,"1611":1,"1613":1}}],["configurationsource",{"3":{"1286":3}}],["configurations",{"0":{"1363":1},"3":{"10":1,"97":1,"135":1,"633":1,"657":1,"889":1,"891":1,"1034":1,"1192":1,"1202":1,"1203":1,"1213":1,"1234":1,"1237":5,"1247":1,"1271":2,"1273":1,"1279":1,"1281":1,"1282":2,"1286":34,"1308":1,"1310":1,"1316":1,"1319":1,"1323":2,"1350":1,"1360":1,"1363":2,"1369":8,"1396":6,"1401":1,"1409":1,"1415":1,"1436":4,"1438":2,"1467":1,"1496":1,"1641":1,"1650":1,"1651":2,"1652":1,"1722":1,"1727":2,"1728":1,"1774":1,"1849":1,"1932":1,"2053":1}}],["configuration",{"0":{"1282":1,"1320":1,"1335":2,"1419":1,"1850":1,"1856":1,"2012":1},"1":{"671":1,"672":1,"673":1,"674":1,"675":1,"676":1,"677":1,"678":1,"835":1,"836":1,"837":1,"838":1,"839":1,"840":1,"841":1,"842":1,"1313":1,"1314":1,"1315":1,"1316":1,"1317":1,"1318":1,"1319":1,"1320":1,"1321":1,"1322":1,"1323":1},"2":{"261":1,"440":1,"696":1,"705":1,"713":1,"776":1,"832":1,"914":1,"979":1,"1061":1,"1311":1,"1324":1,"1335":1,"1339":1,"1417":1,"1773":1,"1839":1,"1936":1,"2094":1,"2127":1,"2151":1},"3":{"0":19,"25":1,"30":1,"31":7,"32":1,"46":1,"47":2,"57":3,"59":3,"60":1,"63":1,"72":1,"73":1,"95":4,"96":1,"98":1,"140":1,"150":1,"164":2,"166":6,"167":3,"170":1,"182":1,"186":1,"198":1,"200":2,"213":1,"214":2,"216":1,"219":1,"225":2,"228":1,"231":1,"235":1,"243":3,"261":1,"280":1,"290":1,"295":1,"300":1,"301":1,"302":1,"318":1,"330":2,"358":1,"359":3,"361":2,"365":2,"373":1,"384":1,"395":2,"401":1,"407":1,"409":1,"413":1,"415":1,"421":1,"422":1,"425":1,"432":1,"434":2,"440":1,"451":1,"470":1,"501":1,"529":1,"530":1,"536":2,"539":1,"556":1,"583":5,"584":1,"585":3,"586":1,"597":1,"598":1,"599":7,"601":3,"603":1,"633":1,"640":1,"641":1,"642":1,"644":1,"650":1,"651":1,"657":2,"658":1,"659":1,"663":1,"665":3,"666":1,"667":1,"671":1,"673":2,"674":6,"676":3,"678":1,"690":1,"691":1,"696":1,"698":3,"700":1,"705":1,"707":3,"708":2,"713":1,"715":1,"733":1,"750":1,"765":1,"767":1,"770":1,"774":2,"776":2,"778":1,"790":1,"791":1,"792":2,"795":2,"810":1,"819":1,"823":1,"827":9,"829":5,"831":1,"832":7,"833":2,"835":1,"836":2,"838":9,"839":4,"840":4,"842":3,"846":1,"854":1,"863":1,"876":1,"883":1,"889":3,"890":4,"891":3,"905":1,"914":2,"916":2,"929":2,"931":2,"933":1,"934":1,"945":1,"947":1,"948":1,"954":1,"973":1,"976":1,"979":5,"998":1,"999":1,"1004":1,"1018":4,"1033":2,"1034":4,"1040":1,"1043":1,"1059":1,"1060":1,"1061":2,"1068":1,"1075":1,"1078":1,"1083":2,"1084":1,"1085":1,"1089":1,"1091":7,"1092":2,"1094":3,"1108":1,"1109":1,"1124":2,"1126":1,"1127":1,"1149":1,"1175":4,"1178":1,"1184":1,"1192":1,"1202":1,"1203":19,"1207":129,"1208":2,"1212":11,"1232":3,"1237":14,"1243":1,"1247":5,"1257":1,"1259":13,"1264":1,"1270":8,"1271":4,"1272":2,"1273":3,"1276":2,"1279":6,"1280":1,"1281":3,"1282":5,"1283":1,"1284":1,"1286":214,"1288":2,"1294":1,"1297":1,"1300":28,"1301":15,"1302":1,"1304":2,"1307":2,"1309":21,"1310":2,"1311":47,"1312":1,"1313":2,"1314":1,"1315":4,"1316":1,"1317":3,"1320":7,"1321":2,"1323":81,"1324":84,"1325":1,"1326":2,"1331":1,"1333":2,"1334":1,"1335":4,"1337":1,"1338":6,"1339":123,"1344":1,"1350":16,"1359":23,"1361":2,"1362":2,"1363":2,"1366":2,"1369":33,"1379":2,"1380":4,"1395":3,"1396":54,"1402":4,"1403":1,"1404":1,"1406":2,"1407":1,"1412":1,"1415":30,"1416":16,"1417":18,"1419":1,"1420":3,"1421":1,"1423":1,"1424":2,"1427":10,"1429":3,"1431":1,"1433":1,"1436":41,"1437":3,"1438":17,"1441":2,"1442":9,"1443":2,"1444":1,"1446":1,"1447":5,"1450":1,"1455":1,"1457":1,"1467":15,"1468":1,"1469":1,"1470":1,"1472":1,"1477":1,"1481":1,"1484":1,"1487":3,"1488":4,"1489":2,"1492":1,"1496":5,"1509":1,"1526":5,"1547":1,"1554":2,"1577":7,"1626":1,"1629":1,"1631":3,"1639":3,"1641":1,"1651":1,"1652":2,"1656":2,"1660":1,"1661":1,"1663":1,"1664":3,"1667":3,"1668":1,"1670":3,"1671":1,"1675":1,"1720":1,"1721":1,"1724":3,"1727":4,"1728":1,"1734":1,"1764":1,"1770":2,"1773":1,"1783":1,"1788":1,"1790":1,"1825":1,"1830":1,"1839":1,"1847":1,"1849":5,"1850":1,"1851":1,"1854":2,"1856":3,"1857":2,"1858":1,"1860":1,"1862":2,"1872":1,"1881":1,"1882":3,"1902":1,"1903":1,"1916":1,"1922":1,"1935":1,"1936":3,"1941":1,"1944":1,"1952":2,"1970":1,"1997":1,"2000":3,"2001":1,"2008":1,"2010":1,"2012":1,"2013":1,"2014":2,"2020":1,"2024":4,"2026":1,"2027":2,"2028":2,"2048":1,"2053":1,"2064":2,"2094":1,"2126":2,"2127":1,"2136":1,"2142":2,"2143":1,"2145":1,"2149":2,"2150":1,"2151":2,"2152":1,"2160":1,"2166":1,"2167":2,"2172":1,"2173":1,"2174":1,"2180":1,"2196":1,"2199":1,"2203":1,"2230":2,"2232":4}}],["configuretestservices",{"3":{"1436":1}}],["configuretestenvironment",{"2":{"1429":1},"3":{"1429":1,"1436":2,"1488":1,"1490":1}}],["configuretestfeatureflags",{"2":{"1429":1,"1671":1},"3":{"1429":1,"1436":2,"1488":1,"1671":1}}],["configurerouteasync",{"3":{"1339":2}}],["configurerefreshsessions",{"2":{"1283":1},"3":{"1283":1,"1286":3}}],["configurereceiveendpoint",{"3":{"640":1,"1436":1}}],["configureclusterasync",{"3":{"1339":2}}],["configureconnection",{"3":{"1324":3}}],["configureconsumers",{"3":{"1259":1}}],["configureconcurrencytokens",{"2":{"341":1,"343":1,"1872":1,"2164":1},"3":{"341":1,"343":1,"1286":1,"1526":1,"1577":1,"1872":1,"2164":1}}],["configureconventions",{"2":{"0":1,"798":1,"806":1,"889":1,"1034":1,"1050":1,"1052":1,"1083":1,"1086":1,"1212":1},"3":{"0":2,"798":1,"806":1,"889":1,"1034":1,"1050":1,"1052":1,"1083":1,"1086":1,"1212":1,"1281":2,"1286":11,"1810":1}}],["configurekestrel",{"3":{"1339":3}}],["configureprimaryhttpmessagehandler",{"3":{"1339":2}}],["configurepermissiongrants",{"2":{"1286":1},"3":{"1286":4}}],["configurefallback",{"3":{"1300":3}}],["configurewarnings",{"3":{"1286":2}}],["configureinprocesstokenvalidation",{"2":{"1429":1,"1488":1},"3":{"1429":1,"1436":3,"1438":1,"1488":1}}],["configureinternalcommands",{"2":{"1042":1,"1045":1},"3":{"1042":1,"1045":1,"1286":1}}],["configureinbox",{"3":{"200":1,"1259":1,"1286":1}}],["configureoptions",{"3":{"1300":1}}],["configureopentelemetry",{"2":{"401":1,"1089":1,"1329":1,"1677":1,"2160":1},"3":{"397":1,"401":1,"1089":1,"1259":1,"1311":1,"1323":1,"1329":1,"1333":1,"1339":6,"1438":1,"1443":2,"1467":1,"1577":1,"1677":3,"2156":2,"2160":1}}],["configureoutbox",{"2":{"931":1,"934":1},"3":{"931":1,"934":1,"1286":1}}],["configureessentials",{"3":{"1416":2}}],["configureemulatorhost",{"3":{"640":1,"1323":3}}],["configureendpoints",{"2":{"642":1},"3":{"640":2,"642":1,"1323":2}}],["configureendpointswithhealthprobe",{"2":{"98":1,"1379":1,"1413":1,"1441":1,"1670":1},"3":{"0":1,"95":1,"96":1,"98":2,"1331":1,"1339":4,"1379":1,"1396":1,"1413":1,"1441":1,"1442":1,"1670":1}}],["configureendpointdefaults",{"2":{"95":1,"98":1},"3":{"95":1,"98":2,"1339":1}}],["configureapplicationpartmanager",{"3":{"1311":1}}],["configureappconfiguration",{"2":{"914":1},"3":{"914":1,"1436":1,"1490":1}}],["configureall",{"3":{"1311":5,"1324":2}}],["configureaudittrail",{"2":{"720":1},"3":{"715":2,"720":1,"1286":4}}],["configureaspnetcoremetrics",{"2":{"397":1,"409":1},"3":{"397":1,"409":1,"1443":1}}],["configureawait",{"1":{"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1},"2":{"481":1,"482":1,"483":1,"484":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1},"3":{"0":3,"479":1,"481":3,"482":2,"483":1,"484":2,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":2,"493":2,"494":2,"495":1,"1212":1,"1229":1,"1247":1,"1259":1,"1286":1,"1300":1,"1309":1,"1310":1,"1312":1,"1323":4,"1324":2,"1339":1,"1359":6,"1369":1,"1380":3,"1402":1,"1415":1,"1417":1,"1436":4,"2232":2}}],["configuremetrics",{"2":{"395":1,"407":1,"409":1},"3":{"395":1,"407":1,"409":1,"1333":1,"1339":3,"2156":1}}],["configurehttp2withhealthprobe",{"3":{"93":1,"94":1}}],["configurehttpclientdefaults",{"2":{"67":1,"100":1,"883":1,"1329":1,"1707":1},"3":{"67":1,"100":1,"883":1,"1312":2,"1329":1,"1339":7,"1441":1,"1443":1,"1707":1}}],["configuresharedenvironment",{"3":{"1436":1}}],["configuresensitivedatalogging",{"3":{"1286":4}}],["configureservices",{"2":{"1488":1},"3":{"572":1,"1436":5,"1488":1,"1490":1}}],["configurescheduler",{"2":{"710":1,"1036":1},"3":{"707":1,"710":1,"1036":1,"1286":1,"1323":1}}],["configures",{"3":{"70":1,"93":1,"164":1,"170":8,"186":1,"214":2,"318":1,"324":1,"341":1,"352":1,"446":1,"448":1,"454":1,"640":2,"674":1,"766":1,"819":1,"832":1,"918":1,"1034":1,"1036":1,"1273":1,"1286":16,"1300":7,"1301":3,"1309":3,"1311":6,"1323":6,"1324":6,"1339":2,"1369":1,"1396":2,"1415":1,"1417":2,"1427":1,"1436":6,"1443":2,"1490":1,"1526":1,"1577":1,"1582":1,"1670":1,"1671":1,"1708":1,"1721":1,"1851":1,"1995":1,"2006":1,"2014":1,"2030":1,"2055":1,"2122":1,"2150":1}}],["configure",{"2":{"1824":1},"3":{"0":2,"164":1,"170":1,"214":2,"215":1,"318":1,"401":1,"459":1,"464":2,"640":1,"674":1,"698":1,"733":3,"747":1,"749":4,"751":3,"914":1,"916":1,"997":1,"1188":1,"1279":1,"1286":29,"1300":7,"1301":2,"1309":2,"1311":15,"1316":1,"1323":4,"1324":5,"1333":1,"1339":16,"1362":2,"1369":12,"1395":1,"1396":15,"1415":1,"1416":1,"1417":1,"1424":1,"1429":2,"1436":9,"1438":1,"1443":2,"1488":2,"1490":1,"1496":1,"1685":1,"1724":1,"1824":1,"1825":1,"1845":1,"1856":1,"1978":1,"1995":1,"2011":1,"2113":1,"2149":2,"2151":1,"2152":1}}],["configuredasyncdisposable",{"3":{"1436":1}}],["configuredatagridlistpagehost",{"2":{"954":1,"959":1,"960":1,"1432":1},"3":{"0":1,"954":1,"959":1,"960":1,"1432":1,"1436":3,"1488":1}}],["configuredpatternoptions",{"2":{"1427":1},"3":{"1427":2}}],["configuredprovider",{"2":{"1094":1},"3":{"1094":1,"1427":1}}],["configuredvalue",{"3":{"1415":1}}],["configuredengines",{"3":{"1286":3}}],["configured",{"0":{"2006":1},"3":{"0":10,"31":2,"73":1,"95":1,"100":1,"101":1,"135":1,"139":1,"157":1,"158":1,"159":1,"170":3,"175":2,"177":1,"178":1,"179":2,"186":1,"200":1,"214":1,"225":2,"235":1,"241":1,"243":2,"245":1,"249":1,"261":1,"265":1,"279":1,"280":1,"283":1,"285":1,"300":1,"303":1,"320":3,"330":1,"337":1,"343":2,"346":1,"349":1,"350":2,"351":1,"355":1,"381":1,"398":1,"406":1,"413":1,"448":1,"464":1,"499":1,"501":3,"524":1,"530":1,"536":2,"538":1,"575":1,"601":1,"640":1,"641":1,"665":2,"668":1,"674":1,"675":1,"676":3,"690":1,"698":1,"740":1,"741":2,"742":1,"776":1,"789":2,"790":5,"792":2,"794":1,"818":1,"819":1,"821":1,"827":6,"829":1,"838":1,"841":1,"849":1,"869":1,"906":1,"915":1,"930":1,"931":1,"996":1,"1017":1,"1018":2,"1034":1,"1042":1,"1059":1,"1083":3,"1089":2,"1091":4,"1092":2,"1108":2,"1116":2,"1126":1,"1150":1,"1184":1,"1188":1,"1212":1,"1237":2,"1247":1,"1251":1,"1258":1,"1259":7,"1269":1,"1270":4,"1271":2,"1276":1,"1279":2,"1280":1,"1281":2,"1283":1,"1285":1,"1286":56,"1288":3,"1293":1,"1294":1,"1297":1,"1300":34,"1301":13,"1302":2,"1307":1,"1309":10,"1310":1,"1311":34,"1313":1,"1320":4,"1323":19,"1324":26,"1333":1,"1336":1,"1337":4,"1339":21,"1350":4,"1357":1,"1358":1,"1359":11,"1365":1,"1366":1,"1368":1,"1369":7,"1379":2,"1380":2,"1395":4,"1396":36,"1400":1,"1402":2,"1406":1,"1413":1,"1415":9,"1417":7,"1418":1,"1424":1,"1425":2,"1427":10,"1433":1,"1436":15,"1438":8,"1441":1,"1445":1,"1447":1,"1455":2,"1456":1,"1458":1,"1459":1,"1465":1,"1467":7,"1488":4,"1489":1,"1492":1,"1526":1,"1531":1,"1548":1,"1563":1,"1577":3,"1591":1,"1631":3,"1632":1,"1635":1,"1637":1,"1639":1,"1641":3,"1653":1,"1663":1,"1664":3,"1667":1,"1670":2,"1672":1,"1675":3,"1684":1,"1700":1,"1708":1,"1719":1,"1721":1,"1723":1,"1727":1,"1728":1,"1765":1,"1770":1,"1801":1,"1829":1,"1842":1,"1847":1,"1853":1,"1872":1,"1896":1,"1921":1,"1923":1,"1928":1,"1933":1,"1944":2,"1974":2,"1975":1,"1976":1,"1979":1,"1982":1,"1984":1,"1994":1,"1996":3,"2001":1,"2012":2,"2024":1,"2027":2,"2028":1,"2030":1,"2032":1,"2055":1,"2058":1,"2064":2,"2129":1,"2132":1,"2138":1,"2164":1,"2166":4,"2167":1,"2168":1,"2172":1,"2174":1,"2199":1,"2232":1}}],["configurebrokertransport",{"2":{"150":1,"638":1,"819":1,"822":1,"1075":1,"1707":1},"3":{"0":2,"150":1,"638":1,"640":2,"819":1,"822":1,"1075":1,"1323":6,"1707":2}}],["conspicuously",{"3":{"1396":1}}],["conspicuous",{"3":{"1286":1}}],["consolidating",{"3":{"1415":1,"2072":1}}],["consolidation",{"3":{"1286":1,"1311":1,"1395":1,"1496":4,"1600":1}}],["consolidated",{"3":{"1259":1,"1271":1,"1311":1,"1486":1,"1487":1,"1496":3,"1526":1}}],["consolidates",{"3":{"782":1,"1311":1,"1350":2,"1676":1}}],["consolidate",{"3":{"435":1,"782":1}}],["consoles",{"3":{"1481":1}}],["console",{"2":{"1550":1},"3":{"214":1,"401":1,"481":1,"776":1,"914":2,"1041":1,"1044":1,"1323":2,"1324":2,"1333":1,"1339":2,"1395":7,"1446":1,"1447":1,"1451":1,"1467":1,"1475":1,"1480":4,"1550":1,"2005":2,"2013":1,"2147":1,"2150":1}}],["consciously",{"3":{"1436":2,"1521":1}}],["conscious",{"3":{"87":1,"1252":1,"1300":1,"1526":1,"1566":1,"1571":1,"1709":1}}],["conserving",{"3":{"1417":2}}],["conserve",{"3":{"1417":1}}],["conservative",{"3":{"529":1,"1237":1,"1286":3,"1301":2,"1350":1,"1417":3,"1455":1,"1916":1}}],["consented",{"3":{"1396":1}}],["consent",{"3":{"1396":2,"1417":1,"1567":1,"1574":1,"1575":3,"1577":2,"1581":1,"1582":2,"1584":1,"1591":1,"1597":1}}],["consensus",{"3":{"0":1,"996":1,"1270":1,"1909":1}}],["consequently",{"3":{"1301":1,"1369":1,"1396":1}}],["consequentialpropertykey",{"3":{"1427":1}}],["consequentially",{"3":{"1229":1}}],["consequential",{"2":{"1422":1},"3":{"1012":1,"1091":1,"1092":1,"1095":2,"1396":1,"1422":2,"1427":6,"1496":1,"1526":1,"1553":1,"1577":1}}],["consequences",{"0":{"435":1,"441":1,"1094":1,"1179":1,"1188":1},"3":{"0":2,"101":1,"123":1,"178":1,"436":1,"444":1,"527":1,"555":1,"629":1,"891":1,"1034":1,"1089":2,"1259":1,"1286":2,"1309":1,"1323":2,"1350":1,"1359":3,"1372":1,"1380":1,"1395":1,"1415":2,"1417":1,"1436":1,"1482":1,"1486":1,"1571":1,"1673":1,"1810":1,"1918":1,"1948":1,"1949":1,"2127":1}}],["consequence",{"3":{"0":3,"23":1,"24":1,"27":1,"96":1,"122":1,"200":1,"201":1,"353":1,"359":1,"390":1,"415":1,"543":3,"549":1,"611":2,"643":1,"659":1,"706":1,"790":1,"793":1,"829":2,"875":1,"914":1,"931":1,"941":1,"988":1,"1050":1,"1059":1,"1082":1,"1229":1,"1231":1,"1247":1,"1252":1,"1259":3,"1270":2,"1271":1,"1286":6,"1297":1,"1300":8,"1301":1,"1309":2,"1311":6,"1323":5,"1324":4,"1339":4,"1350":4,"1355":1,"1358":1,"1359":8,"1369":3,"1380":3,"1395":6,"1396":12,"1415":7,"1416":1,"1417":1,"1436":9,"1438":1,"1459":1,"1467":3,"1472":1,"1475":2,"1651":1,"1686":2,"1849":1,"1861":1,"1886":1,"1910":1,"1947":1,"1982":1,"2035":1,"2042":1,"2158":1,"2163":1,"2164":1,"2165":1,"2166":1}}],["consecutivefailures",{"2":{"1338":1},"3":{"827":1,"1338":1,"1339":1,"1395":1}}],["consecutive",{"3":{"281":1,"459":1,"609":1,"799":1,"803":1,"1003":1,"1006":1,"1007":1,"1048":1,"1054":2,"1242":1,"1247":1,"1285":1,"1286":1,"1292":1,"1307":1,"1324":1,"1390":2,"1395":5,"1415":1,"1438":1,"1456":1,"1474":1,"1492":1,"1641":1,"1716":1,"2000":1}}],["consultant",{"3":{"1395":1}}],["consulted",{"3":{"443":1,"1058":1,"1116":1,"1184":1,"1247":1,"1285":1,"1286":2,"1300":2,"1311":2,"1323":1,"1324":2,"1331":1,"1339":2,"1359":3,"1391":1,"1395":2,"1415":1,"1427":1,"1432":1,"1994":1,"2199":1}}],["consults",{"3":{"249":1,"295":1,"365":1,"384":1,"420":1,"819":1,"827":1,"885":1,"1117":1,"1189":1,"1237":1,"1242":1,"1247":1,"1286":3,"1307":1,"1311":4,"1323":1,"1324":2,"1359":2,"1406":1,"1436":1,"1670":1,"1843":1,"1945":1,"1976":1,"2142":1}}],["consult",{"3":{"0":1,"245":1,"318":1,"819":1,"846":1,"1025":1,"1212":1,"1236":1,"1286":2,"1301":1,"1309":1,"1350":1,"1359":1,"1417":1,"1427":1,"1474":2,"1476":1,"1478":1,"1997":1}}],["consulting",{"3":{"0":1,"1686":1}}],["consumable",{"3":{"955":1,"1350":1,"1438":1}}],["consumption",{"3":{"31":1,"195":1,"234":1,"373":1,"530":1,"543":2,"576":1,"674":1,"692":1,"941":1,"954":1,"1300":3,"1301":2,"1323":1,"1339":3,"1396":2,"1443":2,"1450":1,"1453":1,"1454":1,"1467":3,"1488":1,"1489":1,"1577":1,"1665":1,"1675":1,"1677":1,"1678":1,"2011":1,"2012":1}}],["consuming",{"0":{"1258":1},"3":{"0":2,"26":1,"53":2,"68":1,"72":1,"81":1,"195":2,"197":1,"200":1,"201":1,"202":1,"203":1,"273":1,"309":1,"370":1,"382":1,"390":1,"470":1,"498":1,"518":1,"557":1,"571":1,"572":1,"585":1,"617":1,"702":1,"921":1,"945":1,"956":2,"958":1,"960":1,"1024":1,"1067":1,"1100":1,"1229":1,"1231":1,"1270":5,"1286":2,"1300":8,"1304":2,"1308":1,"1309":10,"1311":2,"1312":3,"1323":5,"1324":9,"1326":2,"1327":1,"1339":7,"1350":1,"1359":1,"1395":4,"1396":3,"1415":3,"1417":4,"1427":1,"1430":1,"1432":1,"1436":3,"1444":1,"1474":1,"1500":1,"1526":1,"1574":1,"1577":2,"1588":1,"1651":1,"1663":1,"1736":1,"1810":1,"1898":1,"1933":1,"1949":1,"1953":1,"1958":1,"1981":1,"2009":1,"2012":1,"2033":1,"2034":1,"2055":1,"2083":1,"2111":1,"2156":1,"2158":1,"2188":1}}],["consumecontext",{"3":{"150":1,"1259":1,"1323":1}}],["consumesthetokenbeforesaving",{"3":{"1323":1}}],["consumes",{"3":{"0":1,"59":1,"124":1,"195":6,"203":1,"375":1,"391":1,"483":1,"507":1,"508":1,"543":1,"585":2,"587":1,"665":1,"694":1,"751":1,"880":1,"990":1,"1200":1,"1236":1,"1247":1,"1259":5,"1266":1,"1270":1,"1286":3,"1294":1,"1300":4,"1309":2,"1310":2,"1311":4,"1312":1,"1322":1,"1323":1,"1324":5,"1332":1,"1339":3,"1341":1,"1349":1,"1350":1,"1359":10,"1369":1,"1378":1,"1396":13,"1402":1,"1415":2,"1416":1,"1417":8,"1427":1,"1436":4,"1438":3,"1441":1,"1451":1,"1455":2,"1460":1,"1467":2,"1472":1,"1475":1,"1488":2,"1489":2,"1496":1,"1526":2,"1531":1,"1599":1,"1641":1,"1748":1,"1765":1,"1843":1,"1874":1,"1922":1,"1963":1,"2004":1,"2121":1}}],["consumed",{"3":{"0":3,"146":1,"177":1,"202":2,"223":1,"265":1,"368":1,"374":1,"383":1,"481":1,"545":1,"549":1,"692":1,"733":1,"829":1,"856":1,"1124":1,"1144":1,"1212":1,"1237":5,"1240":1,"1247":6,"1249":1,"1259":10,"1260":1,"1270":7,"1286":24,"1291":1,"1300":36,"1301":6,"1309":9,"1310":3,"1311":9,"1320":1,"1323":11,"1324":31,"1334":1,"1339":17,"1344":1,"1345":1,"1350":22,"1359":22,"1380":27,"1395":14,"1396":39,"1402":14,"1415":12,"1416":4,"1417":38,"1427":4,"1432":1,"1436":14,"1437":1,"1438":1,"1443":1,"1453":1,"1455":2,"1456":1,"1467":1,"1488":2,"1492":1,"1496":1,"1525":1,"1526":3,"1527":1,"1535":1,"1555":1,"1591":2,"1638":2,"1641":2,"1748":1,"2055":1,"2066":1,"2101":1,"2221":1,"2228":1}}],["consume",{"3":{"0":5,"21":1,"109":1,"145":1,"150":2,"194":2,"195":2,"196":1,"199":1,"201":1,"202":1,"247":1,"369":1,"391":1,"535":1,"548":1,"599":1,"626":1,"656":1,"815":1,"818":2,"819":1,"823":1,"832":1,"1042":1,"1044":1,"1074":1,"1076":1,"1091":1,"1122":1,"1140":1,"1147":1,"1225":1,"1229":1,"1237":1,"1247":1,"1259":6,"1269":1,"1270":2,"1271":3,"1286":1,"1300":9,"1309":1,"1312":1,"1318":1,"1323":7,"1324":6,"1325":1,"1326":1,"1339":2,"1350":3,"1359":4,"1389":1,"1395":2,"1396":2,"1402":1,"1408":1,"1413":1,"1415":2,"1417":4,"1428":1,"1431":1,"1433":1,"1435":1,"1436":5,"1438":3,"1444":1,"1467":1,"1488":1,"1503":1,"1577":1,"1582":1,"1591":1,"1638":1,"1648":1,"1649":1,"1669":1,"1724":1,"1765":1,"1784":1,"1785":1,"1843":2,"1887":1,"1910":1,"2042":1,"2109":1,"2156":1,"2162":1,"2188":1,"2192":1}}],["consumermodule",{"3":{"1323":1}}],["consumerecoverycodeasync",{"3":{"1300":2}}],["consumeroriginrestore",{"2":{"150":1,"202":1,"1074":1,"1253":1},"3":{"145":1,"150":3,"202":4,"702":1,"1074":1,"1199":3,"1203":1,"1207":2,"1253":1,"1259":2,"1300":2,"1313":1,"1318":4,"1323":9,"1496":2}}],["consumers",{"0":{"452":1,"1709":1,"1882":1,"2055":1},"2":{"1259":1,"1323":1},"3":{"0":23,"27":1,"32":1,"41":2,"62":1,"68":1,"69":1,"71":1,"76":1,"77":1,"78":4,"79":1,"91":1,"109":1,"110":1,"118":1,"119":1,"122":1,"127":1,"133":1,"135":2,"136":1,"143":1,"145":2,"146":1,"147":1,"148":1,"150":8,"151":1,"156":1,"160":1,"162":1,"166":1,"201":1,"202":6,"255":4,"256":1,"259":1,"264":1,"312":1,"341":1,"342":1,"359":1,"369":1,"370":1,"375":1,"390":1,"391":1,"435":1,"446":1,"447":1,"451":1,"452":1,"470":1,"490":1,"491":1,"527":1,"530":1,"543":1,"549":1,"550":1,"552":1,"570":1,"572":1,"573":1,"574":2,"576":1,"577":2,"579":1,"591":1,"593":1,"598":1,"600":1,"607":2,"609":3,"638":4,"640":2,"665":2,"668":1,"682":1,"692":1,"698":2,"700":1,"702":2,"715":1,"723":1,"724":1,"725":1,"731":1,"733":1,"736":1,"739":2,"742":1,"743":2,"799":1,"800":1,"819":2,"820":1,"821":1,"825":3,"827":3,"829":1,"832":2,"833":1,"836":1,"845":1,"846":1,"849":1,"854":1,"856":1,"867":2,"870":1,"873":1,"876":1,"891":2,"912":1,"914":1,"918":1,"922":1,"948":1,"956":1,"958":1,"963":1,"980":1,"981":1,"998":1,"1004":3,"1007":1,"1008":1,"1044":1,"1058":1,"1059":4,"1061":1,"1074":3,"1085":1,"1092":1,"1140":1,"1176":1,"1177":1,"1178":1,"1192":1,"1193":1,"1203":6,"1207":58,"1208":1,"1212":3,"1229":1,"1234":1,"1237":5,"1247":4,"1257":1,"1258":4,"1259":27,"1270":6,"1271":2,"1280":1,"1284":1,"1285":1,"1286":17,"1299":1,"1300":8,"1301":1,"1309":3,"1310":3,"1311":8,"1312":2,"1313":1,"1317":4,"1318":3,"1320":1,"1323":29,"1324":15,"1339":6,"1350":7,"1359":4,"1369":2,"1380":6,"1395":2,"1396":17,"1402":5,"1413":1,"1415":8,"1417":4,"1427":1,"1431":1,"1436":32,"1438":6,"1441":1,"1443":1,"1447":1,"1453":2,"1454":1,"1467":2,"1469":1,"1488":1,"1489":2,"1491":2,"1492":1,"1496":2,"1498":1,"1508":1,"1526":1,"1528":1,"1543":2,"1546":1,"1547":1,"1551":1,"1569":3,"1570":1,"1572":1,"1575":2,"1577":5,"1579":1,"1581":1,"1582":2,"1583":1,"1585":7,"1589":1,"1591":1,"1596":1,"1599":2,"1631":1,"1632":2,"1639":1,"1641":1,"1660":1,"1673":2,"1674":1,"1676":1,"1677":1,"1686":1,"1699":1,"1706":1,"1711":1,"1736":1,"1769":2,"1770":1,"1805":1,"1846":1,"1875":1,"1886":1,"1887":2,"1889":3,"1890":2,"1891":1,"1892":3,"1911":1,"1912":2,"1920":1,"1974":1,"2004":1,"2027":1,"2042":1,"2047":1,"2055":2,"2060":1,"2065":1,"2068":1,"2112":1,"2113":1,"2114":1,"2115":1,"2130":1,"2156":1,"2162":2,"2182":2,"2202":4,"2203":1,"2232":1}}],["consumer",{"0":{"451":1,"1258":1,"1678":1,"1736":1,"1843":1},"1":{"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"202":1,"203":1},"3":{"0":48,"15":2,"17":1,"24":2,"25":2,"26":1,"27":2,"38":1,"39":2,"41":3,"59":1,"61":1,"62":2,"66":1,"67":1,"68":1,"70":1,"72":2,"73":1,"77":1,"78":1,"80":4,"81":1,"91":2,"95":1,"97":1,"98":1,"100":1,"101":1,"109":1,"111":2,"116":1,"117":1,"124":1,"127":1,"132":1,"134":1,"135":4,"136":5,"137":2,"145":2,"147":1,"149":1,"150":1,"151":2,"152":1,"160":2,"175":1,"189":1,"192":1,"193":2,"194":3,"195":4,"196":1,"197":1,"198":4,"199":2,"201":1,"202":3,"203":3,"225":1,"226":1,"241":1,"247":1,"255":8,"256":1,"258":1,"265":1,"273":1,"279":1,"283":1,"305":1,"311":1,"340":1,"344":1,"346":1,"359":1,"361":1,"369":1,"373":1,"374":2,"376":1,"391":1,"401":1,"412":1,"418":1,"432":1,"438":1,"439":1,"440":1,"441":1,"443":1,"448":2,"450":1,"451":3,"455":1,"457":1,"465":1,"474":1,"480":1,"481":1,"483":2,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":2,"495":1,"527":1,"528":1,"530":1,"543":2,"545":2,"549":1,"550":1,"551":3,"564":4,"572":3,"573":1,"574":1,"576":1,"577":2,"578":1,"583":1,"594":2,"598":1,"599":2,"605":1,"607":3,"609":6,"610":2,"611":2,"614":1,"616":2,"618":2,"619":1,"620":1,"624":1,"626":2,"629":1,"640":1,"641":1,"645":1,"659":1,"660":1,"672":1,"674":4,"675":1,"676":1,"684":2,"689":1,"690":2,"691":3,"696":2,"697":1,"698":2,"700":1,"707":2,"708":1,"714":2,"715":2,"716":2,"717":2,"721":1,"723":1,"724":1,"725":3,"727":3,"729":1,"733":1,"737":1,"740":1,"741":3,"742":2,"743":2,"747":1,"749":1,"751":2,"759":1,"780":2,"782":2,"783":1,"786":1,"789":1,"799":1,"802":1,"818":1,"819":7,"820":2,"821":2,"825":2,"827":6,"829":2,"832":1,"833":3,"836":3,"839":1,"840":1,"844":1,"845":2,"846":2,"847":1,"848":4,"849":1,"853":3,"854":2,"855":1,"861":1,"862":1,"865":1,"881":1,"889":2,"891":2,"903":1,"905":5,"907":6,"908":1,"910":2,"913":1,"914":2,"920":1,"923":1,"924":1,"926":3,"927":1,"930":1,"931":1,"935":1,"937":1,"939":1,"940":1,"941":3,"942":1,"954":2,"957":1,"958":1,"959":1,"963":1,"964":1,"965":1,"966":1,"972":1,"973":1,"974":1,"976":1,"979":1,"980":1,"982":1,"984":1,"986":1,"988":2,"994":1,"996":3,"999":1,"1000":1,"1003":1,"1004":2,"1006":1,"1008":1,"1012":2,"1016":1,"1033":2,"1034":2,"1035":1,"1036":1,"1037":1,"1043":1,"1044":1,"1049":1,"1050":6,"1051":2,"1052":1,"1058":2,"1059":6,"1060":1,"1061":4,"1065":2,"1067":3,"1068":4,"1069":3,"1070":2,"1074":3,"1075":5,"1076":1,"1077":3,"1078":1,"1089":2,"1091":1,"1093":3,"1096":1,"1117":2,"1160":1,"1162":1,"1177":2,"1178":1,"1179":1,"1185":1,"1188":1,"1195":1,"1202":1,"1203":1,"1211":1,"1212":10,"1228":1,"1229":3,"1233":1,"1237":5,"1241":1,"1247":10,"1248":1,"1249":2,"1256":1,"1258":6,"1259":81,"1261":1,"1262":1,"1269":3,"1270":15,"1271":8,"1273":2,"1274":1,"1280":1,"1286":43,"1290":1,"1291":1,"1300":25,"1301":1,"1309":10,"1310":1,"1311":30,"1312":10,"1315":1,"1317":3,"1318":2,"1320":1,"1323":60,"1324":56,"1326":1,"1339":31,"1345":1,"1348":1,"1349":1,"1350":28,"1359":19,"1369":1,"1378":1,"1379":1,"1380":9,"1381":2,"1386":1,"1395":6,"1396":48,"1398":1,"1402":10,"1406":1,"1412":1,"1413":1,"1415":17,"1416":1,"1417":14,"1418":1,"1421":1,"1427":6,"1428":2,"1429":2,"1430":1,"1431":4,"1432":1,"1433":1,"1436":178,"1437":4,"1438":12,"1441":3,"1442":1,"1443":5,"1451":1,"1453":3,"1454":4,"1455":2,"1460":1,"1461":1,"1465":1,"1467":3,"1476":3,"1487":2,"1488":4,"1489":2,"1490":1,"1492":7,"1493":1,"1496":8,"1503":1,"1526":2,"1528":1,"1543":1,"1546":2,"1547":5,"1551":1,"1572":1,"1574":3,"1575":10,"1576":2,"1577":28,"1578":1,"1579":1,"1581":3,"1582":7,"1583":1,"1584":2,"1585":10,"1586":2,"1589":2,"1591":4,"1593":1,"1596":3,"1597":1,"1599":1,"1611":2,"1631":1,"1632":11,"1645":2,"1656":1,"1659":1,"1660":1,"1662":1,"1664":2,"1665":4,"1666":2,"1671":2,"1673":4,"1674":1,"1675":1,"1676":1,"1677":1,"1678":1,"1679":2,"1680":1,"1685":1,"1686":2,"1706":1,"1707":5,"1708":1,"1721":1,"1727":2,"1732":1,"1734":1,"1735":1,"1749":1,"1751":3,"1764":1,"1765":1,"1769":7,"1772":1,"1782":1,"1784":1,"1799":1,"1800":1,"1810":3,"1815":2,"1826":1,"1829":1,"1843":5,"1845":2,"1851":1,"1856":2,"1865":1,"1870":1,"1886":1,"1887":2,"1888":4,"1889":7,"1890":3,"1891":6,"1892":1,"1896":1,"1899":1,"1903":1,"1906":1,"1910":5,"1911":2,"1912":1,"1919":1,"1921":1,"1922":2,"1923":3,"1926":1,"1927":1,"1929":2,"1930":1,"1948":1,"1949":1,"1970":1,"2005":1,"2006":3,"2009":1,"2017":1,"2025":2,"2042":1,"2044":2,"2046":2,"2056":1,"2057":1,"2059":1,"2060":1,"2063":2,"2067":1,"2068":3,"2069":1,"2072":1,"2074":2,"2077":1,"2083":1,"2085":2,"2087":1,"2107":3,"2109":1,"2112":3,"2114":1,"2124":1,"2126":2,"2127":2,"2131":1,"2133":1,"2150":1,"2156":2,"2166":1,"2173":1,"2179":2,"2182":1,"2194":1,"2196":1,"2197":1,"2198":2,"2201":2,"2202":1,"2203":1,"2232":5}}],["consts",{"3":{"1395":2,"1396":2}}],["const",{"2":{"2075":1},"3":{"256":1,"258":1,"305":1,"310":1,"897":1,"946":1,"1229":1,"1237":1,"1242":1,"1243":1,"1247":4,"1270":6,"1271":1,"1286":8,"1300":30,"1301":3,"1304":1,"1309":12,"1311":9,"1312":2,"1323":3,"1324":13,"1339":22,"1344":2,"1348":1,"1350":16,"1359":11,"1369":1,"1384":1,"1395":3,"1396":16,"1402":12,"1405":1,"1415":14,"1416":1,"1417":2,"1427":2,"1436":12,"1577":1,"1653":1,"2075":1}}],["constantexpression",{"3":{"1241":1,"1247":1,"1286":1,"1989":1}}],["constantly",{"3":{"656":1,"661":1,"1324":1,"1570":1,"2050":1,"2060":2}}],["constants",{"3":{"0":1,"186":2,"188":1,"202":1,"300":1,"310":1,"318":1,"359":1,"657":1,"731":1,"749":1,"859":1,"861":2,"883":1,"905":1,"946":2,"1067":1,"1068":1,"1184":1,"1212":1,"1214":1,"1229":4,"1234":2,"1237":10,"1247":2,"1270":1,"1271":6,"1286":13,"1290":1,"1300":20,"1309":10,"1311":14,"1323":7,"1324":36,"1325":1,"1326":2,"1330":1,"1332":2,"1333":1,"1339":22,"1341":1,"1344":2,"1350":66,"1359":14,"1362":1,"1369":7,"1373":1,"1380":2,"1384":1,"1390":1,"1395":18,"1396":23,"1402":12,"1404":1,"1405":1,"1412":1,"1414":1,"1415":22,"1416":7,"1417":4,"1427":1,"1430":1,"1436":40,"1438":2,"1444":1,"1496":1,"1526":2,"1577":1,"1653":1,"1677":1,"1685":1,"1810":2,"1829":1,"1833":1,"1834":1,"1902":1,"1944":2,"1964":1,"1968":1,"1989":1,"2056":1,"2136":1,"2138":1,"2139":1,"2142":1}}],["constant",{"0":{"1902":1},"3":{"0":3,"24":1,"100":1,"179":1,"186":3,"213":1,"214":1,"217":1,"280":1,"305":3,"310":1,"312":1,"318":1,"391":1,"413":1,"418":1,"422":1,"423":2,"425":1,"457":1,"459":1,"463":1,"609":1,"619":2,"620":1,"697":1,"698":3,"699":1,"702":1,"740":1,"751":1,"790":1,"793":1,"827":4,"856":1,"880":1,"881":2,"885":1,"897":2,"905":2,"945":1,"946":3,"948":2,"980":1,"1017":1,"1018":4,"1067":1,"1090":1,"1094":1,"1095":1,"1100":1,"1134":1,"1161":1,"1175":1,"1212":2,"1232":1,"1233":1,"1237":6,"1247":5,"1255":1,"1259":4,"1267":1,"1270":1,"1271":15,"1276":2,"1286":18,"1288":1,"1290":1,"1292":2,"1294":1,"1295":2,"1297":1,"1300":28,"1303":1,"1305":1,"1309":11,"1311":19,"1312":2,"1323":17,"1324":16,"1326":2,"1328":1,"1330":1,"1333":3,"1336":1,"1337":2,"1339":14,"1344":4,"1348":1,"1350":27,"1353":1,"1359":73,"1366":3,"1367":1,"1369":7,"1380":1,"1384":1,"1389":1,"1393":1,"1395":28,"1396":23,"1398":1,"1399":1,"1402":19,"1405":1,"1415":9,"1416":5,"1417":29,"1423":1,"1427":1,"1431":1,"1436":35,"1441":1,"1443":2,"1488":1,"1526":1,"1641":2,"1651":1,"1667":1,"1668":1,"1670":1,"1683":1,"1712":1,"1727":2,"1765":2,"1767":1,"1771":1,"1833":1,"1851":2,"1902":3,"1905":2,"1916":2,"1919":1,"1935":1,"1958":1,"1982":1,"2024":1,"2056":1,"2057":1,"2073":1,"2075":1,"2118":1,"2123":1,"2138":4,"2147":1,"2148":1,"2149":1,"2153":1,"2193":1,"2239":1}}],["constrain",{"3":{"95":1,"725":1,"774":1,"1025":1,"1286":1,"1311":1,"1339":1,"1350":1,"1359":6,"1415":1,"2141":1}}],["constrains",{"3":{"71":1,"95":1,"216":1,"372":1,"427":1,"469":1,"470":1,"568":1,"630":1,"675":1,"732":1,"801":1,"804":1,"819":1,"889":1,"1049":1,"1232":1,"1237":2,"1270":1,"1271":1,"1281":1,"1286":2,"1291":1,"1300":2,"1309":3,"1311":1,"1312":1,"1323":1,"1339":1,"1359":11,"1375":1,"1395":1,"1396":3,"1415":5,"1436":1,"1475":1,"1810":1,"2032":1,"2152":1}}],["constrained",{"3":{"0":1,"782":1,"1018":2,"1050":1,"1090":1,"1212":1,"1231":2,"1237":3,"1247":4,"1259":7,"1270":9,"1271":5,"1286":11,"1297":1,"1300":4,"1310":1,"1311":5,"1323":10,"1324":4,"1350":2,"1353":2,"1359":22,"1366":1,"1369":1,"1395":3,"1402":1,"1417":1,"1436":5,"1496":1,"1526":1,"1953":1}}],["constraining",{"3":{"0":1,"1093":1,"1237":1,"1270":2,"1286":1,"1323":1,"1359":1,"2179":1}}],["constraints",{"0":{"1635":1,"1675":1},"3":{"0":1,"47":1,"61":1,"62":1,"92":1,"166":1,"168":1,"412":1,"657":1,"681":1,"725":1,"732":1,"848":1,"921":1,"1074":1,"1083":1,"1085":1,"1196":1,"1237":1,"1247":4,"1259":1,"1270":7,"1281":1,"1286":12,"1309":1,"1310":1,"1311":9,"1323":11,"1324":2,"1339":1,"1350":1,"1359":15,"1369":2,"1396":2,"1402":1,"1415":1,"1416":2,"1417":6,"1431":1,"1436":4,"1473":1,"1569":1,"1602":1,"1632":8,"1635":2,"1639":1,"1640":2,"1641":1,"1652":1,"1953":1,"1967":1,"2064":1}}],["constraint",{"3":{"0":4,"62":1,"92":1,"101":1,"109":1,"119":1,"145":1,"150":1,"159":1,"345":1,"363":1,"364":1,"411":1,"415":1,"464":1,"476":1,"641":1,"657":1,"691":1,"692":1,"723":1,"759":1,"792":1,"808":1,"810":1,"811":1,"814":1,"818":1,"825":1,"826":2,"827":1,"869":1,"915":1,"955":1,"1036":1,"1082":2,"1137":1,"1237":5,"1239":1,"1247":16,"1259":7,"1260":1,"1269":1,"1270":24,"1271":1,"1284":1,"1286":52,"1291":2,"1300":23,"1309":2,"1310":6,"1311":17,"1319":1,"1322":1,"1323":22,"1324":13,"1339":6,"1344":1,"1350":5,"1352":1,"1353":1,"1357":1,"1359":69,"1368":1,"1369":3,"1395":3,"1396":22,"1402":4,"1415":9,"1417":4,"1436":13,"1438":1,"1465":1,"1467":5,"1478":1,"1488":1,"1489":1,"1534":1,"1585":3,"1591":1,"1631":2,"1635":3,"1638":2,"1639":2,"1641":1,"1663":2,"1675":1,"1724":1,"1748":1,"1760":1,"1765":1,"1792":1,"1810":1,"1811":1,"1815":1,"1824":2,"1826":1,"1830":1,"1849":1,"1853":3,"1858":2,"1862":1,"1866":1,"1873":1,"1876":2,"1911":1,"1916":1,"1919":1,"1927":1,"1949":1,"1958":1,"1988":1,"1989":1,"2024":1,"2025":1,"2069":1,"2071":2,"2095":1,"2112":1,"2116":1,"2150":1,"2192":1}}],["constructevent",{"2":{"1765":1,"1770":1},"3":{"1765":1,"1770":1}}],["constructedexceptiontype",{"3":{"1436":2}}],["constructed",{"3":{"0":2,"72":1,"73":1,"109":1,"359":1,"365":1,"549":1,"572":1,"585":1,"657":1,"665":1,"674":1,"698":1,"733":1,"741":1,"784":1,"861":1,"922":2,"926":1,"1016":1,"1107":1,"1110":1,"1212":1,"1229":2,"1234":1,"1237":4,"1244":1,"1246":1,"1247":7,"1259":2,"1262":1,"1270":3,"1271":1,"1273":1,"1274":1,"1286":27,"1300":14,"1301":2,"1309":5,"1310":6,"1311":7,"1323":11,"1324":12,"1339":9,"1343":1,"1350":5,"1359":77,"1364":1,"1368":2,"1380":1,"1395":8,"1396":15,"1402":10,"1415":12,"1416":1,"1417":7,"1429":1,"1432":1,"1436":42,"1438":1,"1488":2,"1541":1,"1810":1,"1812":1,"1826":1,"1865":1,"2055":1,"2230":1}}],["construct",{"3":{"725":1,"726":1,"1018":1,"1060":1,"1229":1,"1237":1,"1247":1,"1270":1,"1271":2,"1286":5,"1300":2,"1309":2,"1311":1,"1323":1,"1324":3,"1339":2,"1350":6,"1359":6,"1396":2,"1415":1,"1427":1,"1436":13,"1441":1,"1631":1,"1651":1,"1809":1,"2170":1}}],["constructible",{"3":{"1286":2,"1323":1}}],["constructing",{"3":{"361":1,"435":1,"782":1,"1247":1,"1259":3,"1270":1,"1286":3,"1309":2,"1311":6,"1343":1,"1359":2,"1405":1,"1415":1,"1427":1,"1436":4,"2142":1}}],["constructions",{"3":{"837":1,"1359":1}}],["construction",{"0":{"1221":1},"3":{"0":9,"20":1,"24":1,"60":1,"71":1,"79":1,"121":1,"123":1,"219":1,"234":1,"248":1,"255":1,"291":1,"295":1,"359":4,"361":1,"545":1,"546":1,"547":1,"549":2,"552":1,"574":2,"640":1,"655":1,"657":1,"667":1,"683":1,"690":1,"698":2,"715":1,"743":1,"750":1,"829":2,"834":1,"846":2,"881":1,"891":1,"926":1,"1018":1,"1020":1,"1034":1,"1051":1,"1085":1,"1090":1,"1091":2,"1124":1,"1160":1,"1163":1,"1168":3,"1169":1,"1212":2,"1220":1,"1221":1,"1223":1,"1228":1,"1229":5,"1231":1,"1233":1,"1237":10,"1247":5,"1249":1,"1253":1,"1255":1,"1258":1,"1259":10,"1267":1,"1270":5,"1271":1,"1274":1,"1278":1,"1279":1,"1284":1,"1286":32,"1300":10,"1301":6,"1302":1,"1309":3,"1310":1,"1311":17,"1320":1,"1323":15,"1324":11,"1339":2,"1347":1,"1350":8,"1359":22,"1369":1,"1380":3,"1395":7,"1396":17,"1402":5,"1415":5,"1417":9,"1420":1,"1421":1,"1423":1,"1427":2,"1436":17,"1455":1,"1474":1,"1488":1,"1489":1,"1496":1,"1498":1,"1539":1,"1548":1,"1577":1,"1591":1,"1665":1,"1685":1,"1764":1,"1765":1,"1767":1,"1809":1,"1810":1,"1811":1,"1812":1,"1825":1,"1829":1,"1833":1,"1839":1,"1889":1,"1920":1,"1923":1,"1924":1,"2000":1,"2024":1,"2052":1,"2073":1,"2090":1,"2126":1,"2142":2,"2143":1,"2145":1,"2150":2,"2173":1,"2175":1,"2199":1}}],["constructs",{"3":{"166":1,"230":1,"556":1,"703":1,"861":1,"885":1,"922":1,"1016":1,"1018":1,"1035":1,"1090":1,"1229":1,"1247":1,"1259":3,"1265":1,"1270":4,"1271":3,"1286":10,"1297":1,"1300":1,"1301":1,"1309":2,"1311":10,"1315":2,"1323":3,"1324":3,"1339":9,"1350":7,"1359":13,"1369":3,"1377":1,"1380":4,"1395":2,"1396":2,"1402":7,"1415":5,"1416":1,"1417":4,"1427":2,"1436":20,"1438":1,"1491":1,"1591":1,"1685":1,"1938":1,"2172":1}}],["constructorarity",{"3":{"1436":1}}],["constructorinfo",{"3":{"1436":1}}],["constructordependencies",{"3":{"1207":2,"1436":3,"1577":1,"1582":1,"1583":1,"1584":1,"1586":1}}],["constructordependencyfixtures",{"3":{"1207":18,"1436":28}}],["constructordependencycounttests",{"2":{"1591":1},"3":{"1199":1,"1207":2,"1359":1,"1371":1,"1380":3,"1415":1,"1436":10,"1489":1,"1496":2,"1526":1,"1534":2,"1535":1,"1591":2,"1597":1,"1599":1}}],["constructordependencycounttestsbasetests",{"2":{"1431":1},"3":{"1199":1,"1207":7,"1431":3,"1436":38,"1577":1}}],["constructordependencycounttestsbase",{"2":{"1431":1,"1489":1,"1654":1},"3":{"1199":6,"1207":2,"1431":3,"1436":32,"1489":1,"1496":1,"1654":1}}],["constructors",{"3":{"497":1,"499":1,"674":1,"964":1,"1221":1,"1223":1,"1226":2,"1229":13,"1247":2,"1271":2,"1286":3,"1309":5,"1311":1,"1312":6,"1339":1,"1350":10,"1359":1,"1396":4,"1402":2,"1415":1,"1423":1,"1427":3,"1436":15,"1438":1,"1526":1,"1538":1,"1586":1,"1651":1,"1805":1,"1811":1,"1812":1,"2104":1,"2142":1}}],["constructor",{"0":{"2090":1},"3":{"0":4,"122":1,"135":1,"160":1,"168":1,"230":1,"243":1,"245":1,"258":1,"281":2,"310":1,"314":1,"318":1,"323":1,"330":1,"359":3,"365":1,"388":1,"389":1,"435":1,"459":3,"465":2,"466":1,"474":1,"497":1,"499":1,"524":1,"545":2,"549":1,"578":1,"585":1,"633":3,"640":1,"642":1,"657":4,"673":1,"674":4,"676":1,"680":1,"692":1,"731":2,"733":2,"799":1,"801":2,"803":2,"827":1,"837":1,"838":1,"846":1,"854":1,"857":1,"881":1,"908":1,"909":1,"954":1,"964":1,"972":1,"994":1,"996":3,"999":1,"1054":1,"1059":3,"1061":1,"1089":1,"1090":1,"1091":1,"1094":1,"1167":1,"1168":4,"1169":1,"1193":1,"1212":1,"1221":1,"1227":3,"1228":1,"1229":17,"1231":1,"1234":2,"1237":12,"1240":1,"1244":2,"1247":24,"1252":1,"1259":19,"1261":1,"1267":1,"1268":1,"1269":2,"1270":24,"1271":13,"1273":1,"1278":1,"1286":104,"1288":1,"1289":2,"1293":1,"1300":76,"1301":12,"1307":1,"1309":36,"1310":8,"1311":27,"1312":6,"1316":1,"1317":1,"1320":1,"1323":47,"1324":59,"1336":2,"1339":28,"1342":1,"1343":2,"1350":34,"1353":1,"1359":219,"1363":1,"1369":9,"1371":2,"1378":1,"1380":16,"1395":26,"1396":44,"1399":1,"1402":25,"1405":2,"1406":1,"1407":1,"1415":48,"1416":8,"1417":37,"1423":1,"1426":1,"1427":15,"1436":110,"1438":5,"1488":3,"1489":1,"1496":4,"1525":1,"1526":1,"1534":1,"1535":1,"1577":2,"1582":1,"1583":1,"1584":1,"1586":1,"1588":1,"1591":2,"1597":1,"1599":1,"1600":1,"1668":1,"1671":1,"1673":1,"1685":2,"1689":1,"1699":1,"1702":1,"1727":1,"1810":3,"1811":4,"1812":1,"1820":1,"1829":1,"1830":1,"1945":1,"1983":1,"1994":1,"2000":3,"2024":1,"2087":1,"2089":3,"2090":2,"2098":1,"2142":1,"2149":2,"2176":1,"2194":1,"2196":1,"2202":3,"2203":1,"2232":1}}],["consists",{"3":{"1359":1}}],["consistency",{"0":{"1557":1},"3":{"0":1,"47":1,"49":1,"60":1,"61":1,"68":1,"166":1,"168":1,"169":1,"171":1,"273":1,"350":1,"535":1,"536":1,"784":1,"809":1,"971":1,"981":1,"1147":1,"1212":1,"1216":1,"1231":1,"1237":3,"1256":1,"1259":1,"1270":1,"1278":1,"1286":3,"1300":1,"1301":1,"1309":2,"1323":1,"1324":5,"1350":9,"1359":4,"1395":1,"1396":3,"1402":3,"1413":1,"1415":3,"1431":2,"1436":3,"1473":1,"1499":1,"1510":1,"1526":1,"1535":1,"1537":1,"1543":1,"1544":1,"1545":2,"1557":1,"1571":1,"1577":2,"1581":1,"1582":1,"1583":1,"1591":1,"1595":1,"1597":1,"1637":1,"1638":6,"1639":2,"1656":1,"1664":1,"1792":1,"1796":1,"1798":1,"1810":1,"1845":1,"1846":1,"1847":1,"1849":1,"1852":2,"1853":2,"1861":1,"1866":1,"1921":1,"1933":1,"2027":1,"2035":1,"2075":1,"2079":1,"2098":1,"2113":1,"2162":1,"2168":1,"2169":1,"2230":1,"2232":1}}],["consistently",{"3":{"102":1,"264":1,"578":1,"1216":1,"1270":2,"1271":1,"1300":2,"1311":1,"1323":2,"1324":3,"1359":7,"1395":2,"1486":1,"1526":2,"1537":1,"1539":1,"1545":1,"1552":1,"1557":1,"1572":1,"1577":1,"1591":1,"1631":1,"1797":1,"1802":1}}],["consistent",{"3":{"0":1,"7":1,"121":1,"136":1,"159":1,"195":1,"200":1,"244":1,"251":1,"252":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"298":1,"302":1,"303":3,"332":1,"471":1,"484":1,"491":1,"492":1,"493":1,"509":1,"564":1,"644":1,"1118":1,"1167":1,"1218":1,"1226":1,"1229":5,"1237":4,"1247":2,"1259":1,"1271":1,"1286":2,"1300":6,"1309":3,"1311":7,"1312":2,"1323":3,"1324":5,"1339":1,"1340":1,"1349":1,"1350":5,"1355":1,"1359":15,"1369":1,"1370":1,"1380":1,"1395":5,"1396":4,"1402":4,"1403":1,"1413":1,"1415":3,"1417":3,"1429":1,"1433":1,"1436":10,"1441":1,"1488":1,"1489":1,"1492":1,"1526":3,"1537":1,"1546":2,"1552":1,"1561":2,"1562":1,"1564":1,"1570":1,"1577":2,"1591":1,"1630":1,"1635":1,"1639":2,"1641":1,"1671":1,"1679":1,"1797":1,"1805":1,"1831":1,"1832":1,"1926":1,"1939":1,"1990":1,"2055":1,"2081":1,"2138":1}}],["consideration",{"3":{"1417":1,"1630":1,"1631":1,"1639":1,"1640":1}}],["considerations",{"3":{"209":1}}],["consider",{"3":{"1359":1,"1435":1,"1755":1,"1776":1,"2098":1}}],["considers",{"3":{"675":1,"1259":1,"1286":1,"1311":1,"1324":1,"1339":1,"1639":1}}],["considered",{"3":{"0":1,"1":2,"387":1,"469":1,"470":1,"656":1,"733":1,"797":1,"800":1,"819":1,"1051":1,"1060":1,"1068":1,"1226":1,"1286":1,"1339":1,"1359":1,"1380":2,"1395":1,"1396":2,"1415":1,"1568":1,"1631":1}}],["contorted",{"3":{"1359":1}}],["contoso",{"2":{"1646":1,"1649":1,"1650":5,"1657":1,"1697":2,"1699":1,"1727":2,"1728":2,"2089":1},"3":{"556":1,"633":1,"1646":1,"1649":1,"1650":5,"1653":3,"1654":2,"1656":3,"1657":2,"1697":3,"1699":1,"1719":1,"1727":4,"1728":2,"2089":1}}],["contactfragments",{"3":{"1436":1}}],["contacts",{"3":{"1359":1,"1395":2}}],["contact",{"1":{"2244":1,"2245":1},"2":{"1237":1,"1271":1},"3":{"103":1,"390":1,"657":1,"1016":1,"1018":3,"1019":1,"1091":1,"1093":1,"1203":6,"1207":20,"1229":2,"1234":6,"1237":12,"1271":8,"1286":2,"1311":1,"1323":1,"1342":1,"1350":3,"1359":8,"1366":1,"1369":1,"1380":1,"1395":1,"1417":1,"1423":1,"1427":1,"1435":2,"1436":1,"1453":1,"1492":1,"1496":2,"1526":2,"1577":1,"1639":2,"1751":1,"1770":1,"1772":1,"1829":1,"1873":1,"2109":1,"2158":1,"2217":1,"2244":1}}],["contain",{"2":{"1730":1},"3":{"38":1,"258":1,"359":1,"401":1,"523":1,"568":1,"584":1,"1215":1,"1228":1,"1229":2,"1256":1,"1259":3,"1275":1,"1286":3,"1300":1,"1323":2,"1324":4,"1339":2,"1359":6,"1380":1,"1395":1,"1396":1,"1402":1,"1415":2,"1436":21,"1438":1,"1442":1,"1455":2,"1479":1,"1489":2,"1639":1,"1701":1,"1730":1,"1765":1,"1767":2,"1771":1,"1845":1,"2058":1,"2065":1}}],["containing",{"3":{"24":1,"177":1,"609":1,"633":1,"725":1,"980":1,"1228":1,"1237":2,"1255":1,"1270":1,"1298":1,"1300":2,"1309":2,"1311":1,"1324":4,"1339":2,"1359":6,"1395":1,"1396":1,"1415":1,"1417":1,"1436":16,"1458":1,"1488":1,"1639":2,"1641":3}}],["containment",{"3":{"0":1,"970":1,"975":1,"1018":1,"1020":1,"1036":1,"1247":1,"1324":1,"1359":4,"1369":1,"1396":1,"1671":1,"2232":1}}],["containsingle",{"3":{"1436":1}}],["containsanyexcept",{"3":{"1309":1}}],["containspredicate",{"3":{"1286":4,"1415":1}}],["containsregionclaim",{"2":{"972":1,"975":1},"3":{"972":2,"975":1,"1436":7}}],["contains",{"2":{"1239":1,"1859":1},"3":{"0":1,"94":1,"126":1,"135":1,"293":1,"459":1,"524":1,"583":1,"609":1,"741":1,"827":1,"926":1,"980":1,"981":1,"1018":1,"1085":1,"1234":2,"1237":4,"1239":2,"1241":3,"1247":20,"1259":2,"1265":1,"1270":3,"1286":11,"1300":5,"1310":2,"1311":3,"1323":4,"1324":3,"1339":3,"1350":3,"1359":44,"1369":2,"1380":1,"1395":18,"1396":7,"1402":3,"1415":5,"1417":1,"1436":50,"1438":1,"1442":1,"1447":1,"1454":2,"1455":1,"1459":1,"1466":1,"1467":2,"1471":1,"1486":1,"1526":1,"1596":1,"1598":1,"1599":1,"1600":1,"1640":3,"1641":1,"1651":1,"1735":1,"1736":1,"1749":1,"1755":1,"1761":1,"1764":4,"1829":1,"1849":1,"1859":2}}],["contained",{"3":{"0":1,"165":1,"196":1,"341":1,"389":1,"826":1,"837":1,"853":1,"945":1,"1033":1,"1145":1,"1155":1,"1237":2,"1271":1,"1300":1,"1301":1,"1309":2,"1310":2,"1311":1,"1323":1,"1324":2,"1339":1,"1350":5,"1359":5,"1366":1,"1380":1,"1395":2,"1396":2,"1402":5,"1407":1,"1415":1,"1416":1,"1436":3,"1486":1,"1496":1}}],["containerization",{"3":{"1554":1}}],["containerized",{"3":{"1311":1,"1339":1}}],["containerregistry",{"3":{"1465":1}}],["containerregistryloginevents",{"2":{"1465":1},"3":{"1465":1}}],["containerregistryrepositoryevents",{"2":{"1465":1},"3":{"1465":1}}],["containerresource",{"3":{"1339":1}}],["containerlifetime",{"2":{"1441":1},"3":{"1339":1,"1441":1}}],["containername",{"2":{"440":1},"3":{"440":1,"1323":2,"1467":1}}],["containerstarttimeout",{"3":{"640":1,"1436":2}}],["containers",{"1":{"1439":1,"1440":1,"1441":1,"1442":1,"1443":1,"1444":1,"1445":1,"1446":1,"1447":1,"1448":1,"1449":1,"1450":1,"1451":1},"3":{"0":2,"10":1,"62":1,"599":1,"869":1,"914":1,"915":1,"1069":1,"1325":1,"1332":1,"1359":1,"1436":2,"1439":2,"1441":2,"1445":1,"1449":1,"1450":1,"1462":1,"1467":5,"1468":1,"1487":1,"1490":2,"1861":1,"2004":1,"2008":1,"2013":1,"2213":1}}],["containerappconsolelogs",{"2":{"1476":1},"3":{"1467":1,"1476":1,"1591":1}}],["containerapps",{"3":{"1436":1,"1467":1}}],["containerappsystemlogs",{"2":{"609":1,"1465":1,"1476":1},"3":{"609":1,"1465":1,"1467":1,"1476":1}}],["containerappdeclaration",{"3":{"1436":1}}],["containerapp",{"2":{"563":1,"757":1,"1464":1},"3":{"0":1,"563":1,"757":1,"1212":1,"1464":7,"1474":1,"1476":1}}],["container",{"0":{"1385":1},"1":{"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"866":1,"867":1,"868":1,"869":1,"870":1,"871":1,"872":1,"873":1,"874":1,"875":1,"876":1,"877":1},"3":{"0":19,"8":1,"10":2,"31":1,"47":1,"61":1,"63":1,"91":2,"92":2,"93":1,"94":1,"95":1,"97":1,"98":2,"100":1,"102":1,"137":1,"159":1,"166":3,"168":1,"175":1,"202":1,"217":1,"234":2,"235":1,"242":1,"245":1,"291":3,"292":1,"374":1,"401":4,"402":1,"405":1,"413":1,"422":1,"440":2,"441":1,"443":1,"444":1,"451":1,"517":1,"527":1,"545":2,"550":1,"563":1,"564":1,"582":1,"583":1,"584":1,"585":1,"598":1,"599":2,"603":1,"626":1,"633":2,"639":1,"640":8,"641":1,"642":2,"643":1,"665":5,"666":2,"667":1,"669":2,"670":1,"733":2,"751":1,"756":2,"757":1,"758":1,"759":1,"764":1,"765":1,"766":3,"774":2,"783":1,"784":1,"790":1,"791":1,"792":1,"818":1,"820":1,"826":1,"827":5,"833":1,"837":1,"838":1,"866":1,"867":1,"868":1,"869":2,"870":1,"871":1,"872":1,"875":3,"913":2,"914":1,"915":1,"916":1,"924":1,"931":1,"971":1,"980":2,"995":1,"1004":1,"1017":3,"1022":1,"1034":1,"1037":1,"1052":1,"1067":3,"1069":1,"1101":1,"1107":1,"1116":6,"1117":1,"1118":3,"1123":2,"1124":2,"1125":4,"1154":1,"1156":1,"1175":1,"1176":2,"1178":2,"1192":1,"1202":1,"1203":1,"1212":5,"1244":1,"1247":1,"1259":4,"1261":1,"1269":1,"1270":2,"1271":3,"1280":2,"1282":1,"1284":1,"1285":1,"1286":34,"1300":3,"1301":9,"1307":1,"1309":10,"1310":1,"1311":11,"1312":2,"1315":2,"1316":1,"1322":2,"1323":22,"1324":19,"1325":2,"1326":2,"1327":2,"1331":1,"1332":2,"1333":1,"1337":1,"1339":39,"1340":1,"1342":1,"1350":4,"1357":3,"1359":8,"1369":1,"1378":1,"1380":1,"1385":1,"1395":14,"1396":6,"1401":1,"1402":15,"1415":5,"1416":4,"1417":11,"1421":1,"1427":3,"1429":1,"1430":1,"1436":38,"1438":8,"1440":2,"1441":6,"1442":2,"1443":5,"1444":4,"1445":3,"1446":7,"1447":15,"1449":1,"1450":1,"1455":13,"1457":4,"1458":1,"1463":1,"1464":1,"1465":6,"1467":55,"1469":2,"1472":2,"1473":3,"1474":3,"1476":2,"1477":2,"1478":1,"1481":1,"1484":1,"1486":1,"1487":2,"1488":2,"1489":2,"1490":1,"1496":2,"1524":1,"1525":1,"1526":4,"1534":2,"1535":1,"1555":1,"1577":2,"1589":2,"1591":4,"1595":1,"1597":1,"1611":2,"1612":1,"1616":1,"1617":1,"1631":2,"1639":1,"1641":1,"1648":2,"1653":1,"1654":1,"1670":4,"1677":2,"1682":1,"1689":2,"1692":1,"1693":1,"1718":4,"1724":1,"1752":1,"1763":1,"1774":1,"1792":1,"1810":1,"1820":1,"1827":1,"1843":1,"1854":1,"1856":2,"1864":1,"1868":1,"1879":1,"1882":1,"1883":1,"1886":1,"1916":1,"1923":1,"1938":1,"1956":1,"1970":3,"2000":3,"2004":1,"2006":1,"2008":1,"2010":1,"2011":1,"2013":3,"2019":1,"2024":1,"2025":3,"2033":1,"2037":1,"2043":1,"2053":2,"2056":1,"2060":2,"2110":2,"2113":1,"2126":5,"2127":1,"2128":2,"2157":1,"2173":1,"2175":1,"2180":1,"2184":1,"2190":1,"2193":1,"2213":1,"2219":1,"2221":1,"2229":1,"2232":5,"2239":1,"2243":1}}],["contrived",{"3":{"2113":1}}],["contributions",{"3":{"1324":2,"1672":1}}],["contribution",{"3":{"650":1,"1270":1,"1297":1,"1300":1,"1309":1,"1324":1,"1359":3,"1369":1,"1380":1,"1415":5,"1416":1,"1436":9,"2077":1}}],["contributing",{"3":{"135":1,"483":1,"563":3,"564":7,"591":3,"593":1,"594":1,"618":1,"621":1,"626":5,"724":1,"756":3,"766":3,"1091":2,"1300":2,"1323":3,"1339":1,"1350":1,"1357":1,"1380":1,"1395":1,"1416":1,"1436":2,"1459":2,"1486":3,"1492":4,"1496":1,"1513":1,"1526":6,"1577":7,"1582":2,"1586":1,"1591":3,"1600":1}}],["contributed",{"3":{"186":1,"1300":3,"1311":1,"1324":3,"1396":3,"1442":1,"1962":1,"2077":1}}],["contribute",{"3":{"166":1,"648":1,"650":1,"1178":1,"1286":2,"1300":1,"1323":1,"1324":1,"1339":2,"1359":1,"1380":1,"1396":4,"1415":1,"1416":1,"1436":1,"1443":2,"1467":1,"1487":1,"1627":1,"1884":1}}],["contributes",{"3":{"166":2,"171":1,"187":1,"552":1,"585":1,"649":2,"651":1,"725":1,"728":1,"846":1,"1212":1,"1254":1,"1259":2,"1271":3,"1275":1,"1286":5,"1297":1,"1300":1,"1311":1,"1312":6,"1314":1,"1315":1,"1316":1,"1317":1,"1323":4,"1324":9,"1332":1,"1339":1,"1359":15,"1369":1,"1379":2,"1395":6,"1396":4,"1402":1,"1404":1,"1410":1,"1412":1,"1414":1,"1415":9,"1416":3,"1436":9,"1438":2,"1442":1,"1443":1,"1467":1,"1761":1,"1881":1,"1882":1,"1935":1,"2044":1,"2077":1,"2163":1,"2232":1}}],["contributors",{"3":{"756":1,"1299":1,"1300":2,"1317":1,"1323":1,"1415":1,"1577":1,"1582":1,"2040":1,"2067":1}}],["contributor",{"2":{"2127":1},"3":{"0":1,"441":1,"599":1,"628":1,"665":2,"1116":1,"1119":1,"1299":2,"1300":4,"1323":4,"1339":1,"1415":2,"1416":1,"1467":4,"1472":2,"1474":1,"1475":1,"1477":1,"1571":1,"2041":1,"2048":1,"2049":1,"2060":1,"2127":1,"2197":1,"2238":1}}],["contravariance",{"3":{"1259":1,"1270":2,"1310":2}}],["contravariant",{"3":{"1259":2,"1261":1,"1270":4,"1310":1}}],["contradict",{"3":{"1395":1,"1571":1,"1585":1,"1765":1}}],["contradicts",{"3":{"1270":1}}],["contradictory",{"3":{"790":1,"1436":1}}],["contradicted",{"3":{"761":1,"972":1,"1436":1,"1489":1}}],["contradicting",{"3":{"364":1,"972":1}}],["contradiction",{"3":{"256":1,"828":1,"888":1,"1417":1,"1427":1,"1436":1}}],["contrasted",{"3":{"1395":1}}],["contrasting",{"3":{"1324":1,"1395":2,"1396":2}}],["contrasts",{"3":{"455":1,"967":1,"1247":1,"1259":1,"1427":1}}],["contrast",{"3":{"0":1,"24":1,"93":1,"473":1,"617":1,"618":1,"619":1,"621":1,"622":1,"1237":3,"1259":1,"1270":1,"1286":2,"1300":2,"1309":5,"1312":1,"1323":2,"1324":13,"1339":1,"1350":4,"1359":14,"1369":3,"1374":1,"1380":1,"1395":4,"1396":15,"1402":1,"1415":4,"1416":1,"1417":2,"1427":1,"1434":1,"1436":8,"1526":2,"1558":2,"1577":3,"1586":1,"1591":1,"1605":1,"1644":1,"1645":2,"1739":1,"2075":1,"2079":1,"2202":1}}],["contracted",{"3":{"1324":1}}],["contracttype",{"3":{"1247":1}}],["contractnames",{"3":{"1247":2}}],["contractually",{"3":{"1324":1,"1417":1,"1436":1}}],["contractual",{"3":{"1237":1,"1338":1,"1359":1,"1380":1,"1567":1,"1929":1}}],["contractimplementationtests",{"3":{"1199":2,"1207":4,"1436":17,"1489":3}}],["contractimplementationtestsbase",{"2":{"1663":1},"3":{"1199":3,"1207":2,"1312":3,"1436":10,"1663":1}}],["contract",{"0":{"451":1,"1266":1,"1270":1,"1314":1,"1419":1,"1436":1,"1546":1,"1640":1,"1916":1,"1928":1,"1948":1,"1988":1,"2044":1,"2045":1,"2057":1,"2117":1,"2131":1,"2166":1,"2176":1},"1":{"327":1,"328":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"542":1,"543":1,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"550":1,"551":1,"552":1,"561":1,"562":1,"563":1,"564":1,"565":1,"566":1,"567":1,"568":1,"580":1,"581":1,"582":1,"583":1,"584":1,"585":1,"586":1,"587":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1,"671":1,"672":1,"673":1,"674":1,"675":1,"676":1,"677":1,"678":1,"722":1,"723":1,"724":1,"725":1,"726":1,"727":1,"728":1,"729":1,"858":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"865":1,"878":1,"879":1,"880":1,"881":1,"882":1,"883":1,"884":1,"885":1,"894":1,"895":1,"896":1,"897":1,"898":1,"899":1,"900":1,"901":1,"985":1,"986":1,"987":1,"988":1,"989":1,"990":1,"991":1,"992":1,"1165":1,"1166":1,"1167":1,"1168":1,"1169":1,"1170":1,"1171":1,"1311":1,"1986":1,"1987":1,"1988":1,"1989":1,"1990":1,"1991":1},"2":{"633":1,"636":1,"1266":1,"1370":1},"3":{"0":57,"24":5,"26":1,"37":1,"53":3,"54":3,"67":1,"76":1,"79":1,"81":6,"91":1,"107":1,"109":1,"110":1,"113":1,"122":1,"130":1,"135":3,"136":6,"143":1,"160":1,"178":1,"182":1,"193":1,"201":2,"202":3,"226":1,"230":1,"247":1,"255":4,"256":2,"265":1,"293":2,"296":1,"327":1,"328":1,"329":2,"330":1,"331":3,"332":2,"333":3,"335":1,"342":1,"376":1,"381":1,"384":1,"388":1,"411":1,"413":5,"415":1,"416":1,"420":2,"440":1,"443":1,"448":5,"449":1,"450":4,"452":1,"454":1,"469":1,"470":2,"473":1,"477":1,"542":1,"544":3,"545":1,"548":3,"549":4,"550":1,"551":1,"561":1,"564":7,"566":1,"568":1,"571":2,"572":22,"573":1,"574":3,"577":2,"579":2,"580":1,"582":1,"583":2,"584":2,"586":1,"595":1,"608":1,"615":1,"617":1,"618":1,"619":2,"620":1,"624":1,"626":1,"629":1,"631":3,"633":6,"634":1,"635":1,"636":3,"640":2,"648":2,"649":3,"650":2,"651":1,"653":1,"657":2,"658":1,"659":1,"671":1,"674":3,"675":1,"678":3,"682":3,"683":1,"684":1,"686":1,"699":1,"701":1,"707":2,"722":1,"725":4,"726":3,"729":1,"733":1,"735":1,"739":1,"741":3,"742":2,"743":2,"744":1,"745":3,"751":2,"756":2,"759":1,"761":1,"766":1,"776":1,"778":1,"780":1,"781":1,"782":3,"783":1,"784":1,"789":1,"790":2,"792":1,"793":1,"794":1,"795":1,"798":1,"800":1,"817":1,"823":1,"827":3,"834":1,"845":1,"846":4,"847":1,"849":1,"853":1,"854":1,"855":1,"856":1,"858":1,"862":1,"878":1,"879":1,"880":3,"881":3,"884":1,"885":1,"891":3,"892":1,"893":2,"894":1,"896":1,"897":5,"901":1,"904":1,"905":5,"907":3,"914":1,"924":1,"926":1,"931":1,"932":2,"935":1,"939":1,"963":1,"964":2,"965":1,"966":1,"973":1,"980":2,"984":1,"985":1,"987":2,"988":2,"990":2,"992":1,"996":4,"997":1,"998":2,"999":1,"1003":1,"1008":1,"1012":6,"1016":1,"1017":1,"1018":10,"1019":2,"1020":2,"1022":2,"1030":3,"1042":2,"1044":1,"1050":3,"1051":1,"1053":2,"1058":1,"1059":2,"1060":2,"1063":1,"1077":2,"1079":1,"1089":1,"1090":2,"1091":3,"1092":1,"1093":1,"1095":1,"1096":1,"1120":1,"1124":1,"1126":1,"1132":1,"1133":1,"1134":2,"1135":1,"1145":1,"1150":1,"1152":1,"1154":1,"1155":1,"1165":1,"1167":2,"1168":1,"1169":1,"1170":1,"1171":3,"1174":1,"1175":1,"1177":1,"1192":6,"1202":2,"1203":2,"1207":18,"1212":17,"1216":1,"1218":1,"1222":1,"1225":1,"1226":1,"1228":1,"1229":20,"1231":2,"1233":2,"1235":2,"1236":1,"1237":41,"1238":1,"1241":8,"1242":7,"1243":2,"1244":3,"1245":2,"1247":53,"1249":6,"1252":2,"1254":1,"1258":2,"1259":38,"1260":1,"1266":1,"1269":2,"1270":56,"1271":13,"1272":1,"1274":1,"1275":1,"1276":2,"1278":3,"1280":1,"1285":1,"1286":79,"1290":1,"1291":2,"1293":1,"1295":1,"1300":112,"1301":7,"1304":2,"1305":1,"1307":1,"1309":52,"1310":4,"1311":113,"1312":24,"1313":2,"1314":1,"1316":1,"1317":3,"1318":3,"1322":1,"1323":83,"1324":175,"1326":1,"1332":1,"1339":32,"1347":2,"1348":2,"1349":1,"1350":94,"1353":2,"1359":238,"1362":1,"1366":7,"1369":10,"1370":4,"1371":1,"1374":1,"1375":2,"1376":1,"1378":3,"1380":73,"1382":5,"1389":1,"1392":1,"1393":1,"1395":117,"1396":205,"1399":1,"1401":2,"1402":59,"1403":1,"1404":2,"1405":1,"1406":1,"1409":2,"1415":66,"1416":13,"1417":139,"1418":3,"1419":1,"1420":1,"1425":1,"1427":12,"1428":1,"1429":1,"1431":10,"1433":1,"1435":4,"1436":337,"1437":3,"1438":30,"1441":1,"1449":2,"1450":1,"1451":1,"1455":10,"1459":2,"1461":3,"1463":1,"1467":1,"1487":3,"1488":11,"1489":2,"1492":4,"1493":1,"1494":1,"1496":13,"1497":2,"1499":1,"1500":1,"1503":1,"1513":1,"1524":4,"1525":1,"1526":15,"1530":2,"1531":6,"1532":2,"1534":1,"1535":3,"1542":1,"1544":1,"1545":3,"1546":2,"1547":2,"1551":2,"1577":15,"1582":1,"1585":1,"1586":3,"1591":8,"1596":1,"1599":1,"1600":4,"1632":1,"1638":1,"1639":1,"1640":1,"1641":1,"1651":1,"1654":3,"1657":1,"1661":1,"1662":2,"1663":1,"1664":2,"1665":2,"1666":1,"1668":1,"1669":2,"1670":1,"1671":3,"1675":1,"1686":1,"1689":1,"1690":1,"1699":1,"1701":1,"1704":1,"1711":1,"1720":1,"1727":1,"1729":1,"1734":1,"1749":1,"1765":1,"1766":1,"1769":3,"1779":1,"1796":1,"1805":2,"1806":1,"1810":2,"1815":3,"1817":1,"1829":2,"1834":1,"1840":2,"1871":2,"1875":1,"1880":1,"1883":1,"1885":1,"1887":2,"1888":2,"1889":5,"1890":1,"1891":1,"1892":1,"1906":2,"1908":2,"1909":1,"1911":2,"1915":1,"1916":1,"1920":1,"1922":1,"1923":1,"1924":1,"1925":2,"1926":2,"1929":7,"1930":5,"1943":1,"1944":2,"1947":2,"1949":2,"1950":3,"1953":1,"1955":1,"1982":1,"1986":2,"1987":1,"1988":2,"1990":3,"1991":3,"2000":2,"2012":1,"2014":1,"2015":1,"2017":1,"2028":1,"2044":6,"2048":1,"2049":1,"2055":4,"2057":3,"2063":1,"2071":1,"2074":1,"2077":1,"2080":1,"2085":1,"2089":1,"2098":1,"2101":1,"2107":2,"2112":1,"2114":1,"2117":2,"2118":2,"2122":2,"2123":6,"2126":4,"2128":2,"2129":1,"2131":4,"2132":3,"2139":1,"2166":2,"2167":1,"2183":1,"2184":1,"2185":1,"2189":1,"2192":1,"2193":1,"2199":1,"2202":1,"2203":1,"2208":1,"2220":1,"2230":1,"2232":20}}],["contractshapefixtures",{"3":{"1207":24,"1436":35}}],["contracts",{"0":{"1269":1,"1285":1,"1349":1,"2017":1},"1":{"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"1312":1,"1340":1,"1341":1,"1342":1,"1343":1,"1344":1,"1345":1,"1346":1,"1347":1,"1348":1,"1349":1,"1350":1,"1370":1,"1371":1,"1372":1,"1373":1,"1374":1,"1375":1,"1376":1,"1377":1,"1378":1,"1379":1,"1380":1,"1417":1},"2":{"53":1,"95":1,"1270":1,"1370":1,"1378":1,"1404":1,"1500":1,"1649":1,"1703":1,"1792":1,"1793":1,"2017":1,"2028":1},"3":{"0":9,"50":1,"51":1,"53":2,"54":1,"59":1,"80":2,"81":3,"82":1,"95":2,"96":1,"109":6,"136":4,"139":3,"142":1,"150":1,"339":1,"411":1,"413":2,"414":1,"434":1,"493":1,"571":1,"583":2,"587":1,"614":1,"617":1,"649":2,"657":2,"782":3,"846":1,"849":1,"914":1,"953":2,"955":2,"1006":2,"1024":2,"1026":4,"1027":1,"1059":2,"1067":1,"1074":1,"1091":3,"1192":11,"1199":11,"1202":12,"1203":28,"1206":4,"1207":102,"1208":8,"1212":5,"1227":1,"1229":2,"1230":1,"1247":2,"1248":1,"1259":4,"1260":3,"1261":2,"1269":2,"1270":20,"1271":5,"1272":1,"1285":1,"1286":5,"1287":3,"1291":2,"1293":2,"1300":3,"1303":1,"1304":1,"1307":2,"1309":33,"1311":8,"1312":38,"1320":1,"1322":2,"1323":4,"1324":5,"1339":1,"1340":2,"1341":1,"1347":3,"1350":22,"1352":1,"1353":1,"1355":1,"1359":23,"1369":3,"1370":3,"1378":6,"1380":23,"1395":11,"1396":51,"1400":1,"1402":9,"1404":1,"1409":1,"1413":4,"1415":19,"1416":3,"1417":18,"1418":1,"1424":1,"1427":7,"1431":11,"1436":201,"1437":2,"1438":4,"1441":1,"1446":1,"1450":1,"1455":5,"1476":1,"1487":1,"1488":1,"1489":6,"1492":2,"1493":1,"1496":17,"1497":1,"1498":1,"1500":3,"1524":1,"1526":4,"1531":1,"1544":3,"1546":3,"1555":1,"1576":2,"1577":7,"1585":2,"1586":1,"1591":3,"1599":1,"1649":1,"1656":5,"1659":1,"1660":2,"1663":2,"1665":1,"1669":1,"1671":1,"1685":2,"1686":1,"1687":1,"1703":1,"1769":1,"1772":1,"1783":1,"1790":3,"1792":1,"1793":1,"1888":1,"1929":1,"1930":1,"1943":1,"1953":1,"1956":1,"1959":1,"1963":1,"2017":2,"2028":1,"2030":1,"2041":1,"2044":8,"2055":1,"2056":1,"2060":1,"2067":1,"2111":1,"2115":1,"2116":2,"2117":1,"2118":3,"2122":1,"2208":1,"2214":1,"2221":1,"2227":3,"2232":3}}],["controlling",{"3":{"1300":4,"1359":1}}],["controllable",{"3":{"1259":1,"1286":1}}],["controlled",{"3":{"439":1,"1107":1,"1212":1,"1247":3,"1286":2,"1311":2,"1324":1,"1359":5,"1395":1,"1402":2,"1417":3,"1436":4,"1438":1,"1443":1,"1522":1,"1553":1,"1560":1,"1569":1,"1573":1,"1577":1,"1587":1,"1637":1,"1799":1,"1897":1,"2034":1,"2124":2}}],["controllerparameterdescriptor",{"3":{"1311":1}}],["controllerbase",{"3":{"1311":1,"1436":21}}],["controllerfeature",{"3":{"1311":1}}],["controllerconventiontests",{"3":{"1199":1,"1207":2,"1436":5,"1489":1}}],["controllerconventiontestsbase",{"2":{"1654":1},"3":{"1199":2,"1207":2,"1436":5,"1654":1}}],["controllermocks",{"3":{"1199":7,"1207":6}}],["controller",{"0":{"1371":1,"1372":1},"2":{"450":1,"455":1,"727":1},"3":{"0":7,"42":1,"121":1,"124":1,"160":1,"173":1,"186":1,"189":1,"258":1,"299":1,"300":1,"301":1,"302":1,"318":5,"320":3,"321":1,"325":3,"326":1,"329":2,"330":4,"331":1,"332":1,"341":1,"346":1,"350":1,"351":1,"352":2,"391":2,"448":1,"450":1,"454":1,"455":3,"549":1,"571":2,"572":1,"583":1,"585":2,"690":2,"715":1,"723":2,"725":8,"726":1,"727":1,"729":1,"739":2,"740":1,"741":4,"743":5,"744":2,"751":1,"790":1,"838":1,"854":2,"880":1,"900":1,"920":2,"921":2,"922":3,"924":1,"938":1,"1018":1,"1049":1,"1059":2,"1060":1,"1116":2,"1117":1,"1118":2,"1192":1,"1202":1,"1203":1,"1212":1,"1217":1,"1218":1,"1224":2,"1227":1,"1229":4,"1237":1,"1238":1,"1239":1,"1245":2,"1247":6,"1265":1,"1270":6,"1271":2,"1275":1,"1286":1,"1289":1,"1292":1,"1297":2,"1300":24,"1301":1,"1304":1,"1306":1,"1309":18,"1311":110,"1323":4,"1324":2,"1339":1,"1347":2,"1350":12,"1352":1,"1353":1,"1357":1,"1359":121,"1369":1,"1370":1,"1371":5,"1372":3,"1373":3,"1374":3,"1375":2,"1376":3,"1379":1,"1380":122,"1388":1,"1389":1,"1395":8,"1396":42,"1402":19,"1407":2,"1408":1,"1409":2,"1414":1,"1415":47,"1431":1,"1436":87,"1437":3,"1438":11,"1443":1,"1447":1,"1487":3,"1488":2,"1496":6,"1526":3,"1534":1,"1576":1,"1577":2,"1591":2,"1627":1,"1631":3,"1632":3,"1639":2,"1640":2,"1647":2,"1650":3,"1651":4,"1654":1,"1660":1,"1666":1,"1667":2,"1671":1,"1698":1,"1700":1,"1702":3,"1703":1,"1721":1,"1724":1,"1727":4,"1730":1,"1747":2,"1748":1,"1749":3,"1765":2,"1771":1,"1803":1,"1805":2,"1807":1,"1814":2,"1815":1,"1908":1,"1927":3,"1928":1,"1934":1,"1936":1,"1937":1,"1960":1,"1963":1,"1965":1,"1975":1,"1978":2,"1985":1,"1986":1,"1987":1,"1988":2,"1990":1,"1991":1,"1994":2,"1995":2,"1996":2,"1997":1,"2000":1,"2055":1,"2068":1,"2069":1,"2087":1,"2104":1,"2124":2,"2125":1,"2131":1,"2137":2,"2138":1,"2167":1,"2202":1,"2203":1,"2232":1}}],["controllersinheritapicontrollerbase",{"3":{"1436":1}}],["controllersaresealed",{"3":{"1436":1}}],["controllersdonotdependonentityframeworkcore",{"3":{"1436":1}}],["controllersdonotdependoninfrastructure",{"3":{"1436":1}}],["controllersexemptfromapicontrollerbase",{"3":{"1436":2}}],["controllers",{"1":{"327":1,"328":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"1986":1,"1987":1,"1988":1,"1989":1,"1990":1,"1991":1},"2":{"751":1,"1207":1,"1380":7,"1436":1},"3":{"0":5,"42":1,"59":1,"109":1,"132":1,"136":3,"137":1,"155":1,"160":3,"161":2,"186":1,"187":1,"243":2,"300":2,"306":1,"318":7,"320":1,"324":1,"325":5,"326":1,"327":1,"330":2,"334":1,"337":1,"341":2,"384":1,"391":1,"419":1,"423":1,"426":1,"428":1,"447":1,"448":5,"473":1,"545":3,"550":1,"585":2,"674":1,"690":2,"692":1,"725":4,"733":1,"740":1,"741":3,"743":9,"749":3,"751":4,"773":1,"775":1,"789":1,"790":1,"793":1,"826":2,"837":1,"839":1,"841":1,"854":1,"897":2,"900":1,"905":1,"906":1,"909":1,"921":1,"922":1,"923":2,"1004":3,"1018":1,"1026":2,"1028":1,"1049":1,"1059":4,"1060":1,"1099":1,"1103":1,"1116":1,"1192":1,"1202":1,"1203":74,"1207":376,"1212":3,"1213":2,"1224":1,"1227":1,"1229":5,"1236":1,"1239":2,"1244":1,"1245":1,"1247":11,"1270":6,"1286":1,"1290":1,"1294":1,"1297":1,"1300":63,"1301":2,"1302":1,"1303":1,"1304":1,"1306":1,"1308":3,"1309":28,"1311":127,"1323":15,"1339":2,"1347":2,"1348":1,"1350":11,"1351":1,"1359":173,"1367":1,"1369":1,"1370":2,"1371":10,"1372":13,"1373":4,"1374":3,"1375":1,"1376":1,"1380":141,"1386":1,"1390":1,"1395":10,"1396":52,"1402":31,"1403":1,"1404":1,"1406":1,"1408":1,"1410":1,"1415":55,"1416":1,"1431":3,"1436":69,"1437":2,"1438":21,"1447":1,"1467":2,"1487":2,"1489":2,"1496":11,"1526":3,"1535":3,"1540":1,"1577":3,"1582":2,"1586":1,"1591":5,"1597":1,"1599":2,"1600":1,"1635":1,"1656":1,"1666":4,"1673":1,"1685":1,"1686":1,"1753":1,"1765":4,"1779":1,"1812":1,"1813":2,"1815":2,"1825":1,"1874":3,"1898":1,"1922":1,"1928":1,"1929":2,"1932":2,"1938":2,"1941":1,"1961":1,"1985":1,"1986":2,"1991":1,"1995":11,"1997":1,"2000":3,"2001":1,"2023":1,"2024":1,"2110":1,"2131":2,"2132":1,"2137":1,"2208":1,"2227":1,"2232":1}}],["controls",{"0":{"2000":1},"1":{"1998":1,"1999":1,"2000":1,"2001":1,"2002":1},"2":{"682":1,"2120":1},"3":{"0":1,"227":1,"273":1,"369":1,"370":2,"373":1,"413":1,"592":1,"682":1,"685":1,"825":1,"830":1,"1126":1,"1229":1,"1286":1,"1300":1,"1311":4,"1323":2,"1324":3,"1339":1,"1359":4,"1389":1,"1395":4,"1396":1,"1402":2,"1415":2,"1417":3,"1436":8,"1438":1,"1467":2,"1477":1,"1526":1,"1534":2,"1557":1,"1572":1,"1577":1,"1607":1,"1626":1,"1631":3,"1637":1,"1677":1,"1714":1,"1741":1,"1750":1,"1768":1,"1773":1,"1998":2,"1999":1,"2000":1,"2001":1,"2002":2,"2043":1,"2083":1,"2109":1,"2120":1,"2196":1,"2208":1}}],["control",{"0":{"1804":1},"1":{"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"1803":1,"1804":1,"1805":1,"1806":1,"1807":1},"3":{"0":4,"106":1,"174":1,"175":1,"176":1,"177":3,"178":1,"179":1,"185":1,"212":1,"217":1,"221":1,"293":1,"296":1,"343":1,"358":2,"362":1,"376":1,"403":1,"427":2,"443":1,"595":1,"627":1,"699":1,"734":1,"743":1,"745":1,"756":1,"758":2,"765":1,"767":2,"768":1,"770":1,"776":2,"789":1,"876":2,"947":1,"1019":1,"1067":1,"1116":3,"1185":1,"1186":1,"1187":1,"1218":1,"1220":1,"1226":1,"1229":4,"1237":6,"1247":1,"1259":2,"1270":2,"1271":1,"1275":1,"1284":1,"1285":1,"1286":2,"1300":5,"1301":1,"1308":1,"1309":1,"1311":3,"1322":1,"1323":4,"1324":13,"1326":1,"1339":9,"1347":2,"1350":1,"1359":11,"1369":1,"1384":1,"1389":1,"1395":16,"1396":8,"1402":1,"1415":3,"1416":5,"1417":13,"1423":1,"1436":38,"1440":1,"1443":1,"1444":1,"1455":2,"1462":1,"1467":5,"1475":1,"1488":1,"1490":1,"1496":1,"1539":1,"1548":1,"1550":1,"1555":1,"1568":1,"1591":1,"1596":1,"1607":1,"1629":1,"1631":2,"1641":1,"1644":1,"1653":2,"1662":1,"1664":1,"1665":1,"1672":1,"1689":1,"1698":1,"1714":1,"1741":1,"1786":1,"1802":1,"1803":2,"1805":1,"1807":1,"1816":1,"1870":1,"1903":1,"1969":1,"1973":1,"1999":5,"2000":1,"2001":4,"2002":3,"2005":3,"2013":1,"2073":2,"2084":1,"2126":2,"2140":1,"2141":3,"2143":1,"2144":1,"2145":1,"2149":1,"2155":1,"2166":1,"2186":1,"2203":1,"2206":1,"2228":1}}],["contested",{"3":{"714":1,"1436":3}}],["contending",{"3":{"1948":1}}],["contends",{"3":{"1415":1}}],["contenders",{"3":{"1247":1}}],["contended",{"3":{"857":1,"1300":2,"1436":1,"1488":2}}],["contend",{"3":{"519":1,"708":1,"1359":1,"1402":2,"1630":1,"1638":1}}],["contentful",{"3":{"1395":1}}],["contentfilter",{"2":{"1366":1},"3":{"1018":1,"1366":1,"1369":1}}],["contentpage",{"3":{"1324":2,"1417":5}}],["contentpolicyregistrationtests",{"3":{"1199":1,"1207":2,"1577":1}}],["contentpolicyinjectionmode",{"3":{"1091":2,"1199":5,"1203":1,"1207":2,"1424":2,"1427":8}}],["contentpolicy",{"3":{"1021":1,"1089":1,"1091":1,"1093":1,"1366":1,"1424":1,"1427":3,"1526":2,"1577":1}}],["contentpolicyguardrailtests",{"2":{"1435":1},"3":{"1093":1,"1199":1,"1207":2,"1427":1,"1435":2,"1437":1,"1577":1}}],["contentpolicyguardrail",{"2":{"1021":1,"1089":1,"1094":1,"1095":1,"1366":1,"1368":1,"1427":1,"1586":1},"3":{"1018":2,"1021":1,"1089":1,"1091":6,"1093":2,"1094":1,"1095":1,"1198":1,"1199":6,"1203":1,"1207":2,"1366":1,"1368":1,"1424":3,"1427":24,"1496":1,"1526":2,"1577":2,"1585":2,"1586":1}}],["contentpolicysettings",{"2":{"676":1,"677":1,"1424":1,"1427":1},"3":{"674":1,"676":2,"677":1,"1091":5,"1093":1,"1198":1,"1199":5,"1203":1,"1207":2,"1424":3,"1427":17,"1526":1,"1577":1,"1585":1}}],["contentresult",{"3":{"1311":1}}],["contenttypemaxlength",{"2":{"1369":1},"3":{"1350":2,"1369":1}}],["contenttype=",{"3":{"1324":1}}],["contenttype",{"3":{"1286":2,"1323":6,"1324":2,"1350":3,"1369":2,"1415":1,"1417":6,"1436":1}}],["contentdisposition",{"3":{"1286":1,"1323":1}}],["contentsimilaritydto",{"3":{"1199":4,"1203":1,"1207":3,"1347":2,"1350":6,"1359":2,"1380":1}}],["contents",{"2":{"626":1},"3":{"626":1,"715":1,"766":2,"874":1,"1003":1,"1019":1,"1192":3,"1237":2,"1279":1,"1300":1,"1324":4,"1359":1,"1415":1,"1436":1,"1454":2,"1459":1,"1471":1,"1473":1,"1475":2,"1492":1,"1496":1,"1768":1}}],["contentsecuritypolicyreportonly",{"3":{"1339":1}}],["contentsecuritypolicy",{"2":{"214":1,"216":1,"1577":1,"2149":1},"3":{"214":1,"216":1,"1339":3,"1577":2,"2149":1}}],["contention",{"3":{"558":1,"863":2,"996":1,"1150":1,"1153":1,"1278":1,"1286":2,"1359":2,"1402":2,"1436":1,"1456":1,"1545":1,"1630":1,"1635":1,"1638":7,"1688":1,"1909":1}}],["contentmanagement",{"2":{"184":1,"1963":1},"3":{"184":1,"186":1,"1116":1,"1348":2,"1350":4,"1377":1,"1380":7,"1631":2,"1963":1}}],["contenteditors",{"3":{"1359":2,"1627":1}}],["contenteditor",{"2":{"187":1,"386":1,"388":1,"1348":1,"1621":1,"1626":1,"1630":1,"1633":1,"1635":1,"1637":1,"1638":1,"1960":1},"3":{"0":1,"186":1,"187":1,"386":1,"388":1,"1116":1,"1300":1,"1307":1,"1348":2,"1350":4,"1359":5,"1373":2,"1377":1,"1380":7,"1395":2,"1396":2,"1405":1,"1409":1,"1415":9,"1496":2,"1526":1,"1621":4,"1626":1,"1627":2,"1630":4,"1631":6,"1632":1,"1633":1,"1635":2,"1637":2,"1638":5,"1640":2,"1922":1,"1960":2,"1963":1}}],["content",{"0":{"1359":1,"1424":1},"1":{"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1},"2":{"443":1,"1285":1},"3":{"0":7,"90":1,"103":2,"139":1,"142":1,"157":1,"173":1,"175":1,"179":1,"185":1,"213":3,"214":3,"219":1,"384":1,"440":2,"443":3,"454":1,"478":1,"497":1,"529":1,"572":1,"574":1,"575":1,"633":1,"651":1,"664":1,"688":1,"693":1,"720":1,"725":3,"738":1,"740":2,"741":3,"747":1,"749":2,"757":1,"764":1,"774":1,"809":1,"813":1,"832":1,"869":1,"909":1,"1010":1,"1011":1,"1012":1,"1016":1,"1089":3,"1091":3,"1093":3,"1095":2,"1114":1,"1115":1,"1116":6,"1118":2,"1186":2,"1192":1,"1212":1,"1237":2,"1259":1,"1270":1,"1283":1,"1285":5,"1286":28,"1300":3,"1301":1,"1306":1,"1309":9,"1310":1,"1311":19,"1323":12,"1324":28,"1336":3,"1339":9,"1347":1,"1348":1,"1350":19,"1357":1,"1359":40,"1366":1,"1369":1,"1376":2,"1380":14,"1390":1,"1393":1,"1394":1,"1395":26,"1396":9,"1399":1,"1402":17,"1411":2,"1415":28,"1416":11,"1417":6,"1418":2,"1423":2,"1424":4,"1427":18,"1432":2,"1436":35,"1437":1,"1438":4,"1443":2,"1455":2,"1458":1,"1467":1,"1487":1,"1488":1,"1489":1,"1496":5,"1526":2,"1531":1,"1532":1,"1553":3,"1559":2,"1563":3,"1572":1,"1577":2,"1586":1,"1600":1,"1607":1,"1630":2,"1631":4,"1632":1,"1637":2,"1638":4,"1639":2,"1640":3,"1641":2,"1644":1,"1646":1,"1702":1,"1705":1,"1713":2,"1731":1,"1741":1,"1749":1,"1764":1,"1765":1,"1781":1,"1825":1,"1871":1,"1909":1,"1922":1,"1960":1,"1961":1,"1964":1,"1965":1,"2000":3,"2011":3,"2055":1,"2075":2,"2125":3,"2126":5,"2128":2,"2147":2,"2148":2,"2149":3,"2150":1,"2153":1,"2175":1,"2179":1,"2180":1,"2232":3,"2240":1}}],["contextless",{"3":{"2074":1}}],["contextual",{"3":{"1395":1}}],["contextkey",{"3":{"1286":1}}],["contexts",{"0":{"1514":1},"3":{"0":1,"166":1,"591":2,"593":1,"618":1,"703":1,"988":1,"1035":2,"1175":1,"1226":1,"1237":1,"1259":1,"1278":1,"1283":1,"1286":15,"1324":1,"1359":2,"1396":1,"1415":2,"1417":1,"1436":2,"1443":1,"1453":1,"1486":1,"1487":1,"1490":1,"1492":1,"1496":1,"1526":1,"1541":1,"1544":1,"1545":1,"1577":6,"1582":2,"1583":1,"1584":1,"1638":2,"1639":1,"1660":1,"1664":1,"1697":1,"1700":1,"1719":1,"1800":1,"1811":1,"1849":1,"2010":1,"2110":1,"2113":1,"2115":1,"2239":1}}],["context",{"0":{"4":1,"10":1,"16":1,"30":1,"38":1,"46":1,"52":1,"58":1,"67":1,"77":1,"85":1,"97":1,"108":1,"116":1,"131":1,"146":1,"156":1,"165":1,"174":1,"185":1,"194":1,"206":1,"213":1,"224":1,"234":1,"242":1,"264":1,"272":1,"280":1,"290":1,"299":1,"309":1,"317":1,"329":1,"340":1,"349":1,"358":1,"369":1,"379":1,"387":1,"396":1,"412":1,"419":1,"433":1,"439":1,"447":1,"458":1,"469":1,"481":1,"498":1,"506":1,"517":1,"527":1,"535":1,"544":1,"555":1,"563":1,"571":1,"582":1,"590":1,"598":1,"608":1,"617":1,"625":1,"632":1,"639":1,"648":1,"656":1,"664":1,"673":1,"681":1,"689":1,"697":1,"706":1,"714":1,"724":1,"732":1,"740":1,"748":1,"756":1,"765":1,"773":1,"781":1,"789":1,"798":1,"809":1,"818":1,"826":1,"837":1,"845":1,"853":1,"860":1,"868":1,"880":1,"888":1,"896":1,"904":1,"913":1,"921":1,"930":1,"938":1,"945":1,"953":1,"963":1,"971":1,"979":1,"987":1,"995":1,"1003":1,"1011":1,"1017":1,"1025":1,"1033":1,"1041":1,"1049":1,"1058":1,"1066":1,"1074":1,"1082":1,"1090":1,"1099":1,"1107":1,"1115":1,"1123":1,"1132":1,"1140":1,"1150":1,"1160":1,"1167":1,"1174":1,"1183":1,"1195":1,"1273":1,"1318":1,"1341":1,"1363":1,"1404":1,"1405":1,"1482":1,"1503":1,"1849":1},"2":{"135":1,"459":1,"740":1,"1175":1,"1233":1,"1300":1,"1464":1},"3":{"0":24,"1":1,"15":2,"26":2,"27":3,"45":3,"47":2,"62":1,"135":2,"145":1,"150":1,"160":1,"164":1,"165":1,"166":2,"167":1,"193":1,"200":1,"201":1,"202":5,"229":1,"233":1,"265":1,"279":1,"296":1,"298":1,"302":2,"303":4,"340":1,"346":1,"359":3,"365":2,"366":1,"375":1,"392":1,"393":1,"395":1,"397":1,"400":1,"423":1,"459":1,"468":1,"470":1,"477":1,"481":5,"482":2,"483":3,"485":1,"490":2,"526":1,"539":1,"545":1,"555":1,"564":1,"578":1,"582":1,"587":1,"591":1,"593":1,"647":1,"660":1,"669":1,"696":1,"697":1,"698":12,"699":2,"700":2,"702":7,"707":2,"715":1,"716":2,"720":1,"731":1,"740":1,"748":1,"761":2,"794":1,"797":1,"804":1,"806":1,"825":1,"826":1,"827":1,"833":1,"836":1,"875":1,"877":2,"889":3,"893":1,"898":1,"905":5,"906":1,"910":2,"920":1,"926":11,"931":1,"962":1,"967":3,"988":9,"990":2,"991":1,"1007":1,"1019":1,"1021":1,"1032":1,"1033":2,"1034":4,"1035":1,"1036":3,"1038":2,"1040":1,"1042":6,"1050":4,"1053":1,"1054":1,"1059":2,"1061":1,"1062":1,"1083":3,"1084":2,"1086":1,"1087":1,"1089":1,"1093":1,"1103":1,"1107":1,"1110":1,"1128":1,"1133":1,"1137":2,"1150":1,"1173":1,"1174":3,"1175":5,"1177":1,"1180":1,"1192":2,"1201":1,"1202":4,"1203":11,"1207":32,"1212":4,"1219":1,"1229":5,"1233":1,"1237":4,"1247":1,"1249":1,"1252":2,"1253":3,"1254":1,"1256":1,"1257":2,"1258":1,"1259":50,"1270":33,"1271":1,"1273":9,"1274":8,"1275":2,"1276":4,"1277":1,"1278":12,"1280":1,"1281":2,"1283":1,"1284":1,"1286":275,"1296":2,"1297":1,"1300":49,"1309":17,"1310":2,"1311":33,"1312":8,"1313":1,"1316":1,"1317":1,"1318":5,"1319":1,"1323":35,"1324":23,"1326":1,"1333":1,"1336":1,"1339":31,"1340":1,"1341":1,"1343":1,"1345":2,"1350":14,"1357":1,"1359":64,"1363":4,"1369":11,"1370":1,"1378":1,"1380":11,"1395":3,"1396":24,"1397":1,"1402":5,"1403":1,"1404":2,"1405":1,"1406":2,"1410":1,"1412":1,"1415":31,"1417":7,"1427":1,"1433":1,"1436":38,"1437":1,"1438":7,"1441":1,"1453":2,"1455":1,"1456":1,"1457":1,"1464":2,"1471":1,"1488":1,"1489":1,"1496":3,"1510":1,"1526":2,"1534":2,"1541":1,"1543":1,"1556":1,"1561":1,"1571":1,"1575":1,"1577":6,"1581":1,"1586":1,"1607":1,"1629":1,"1630":8,"1631":3,"1632":2,"1634":7,"1635":2,"1638":11,"1639":9,"1641":1,"1651":4,"1652":3,"1664":2,"1665":2,"1666":1,"1670":1,"1673":1,"1697":3,"1700":1,"1719":2,"1720":1,"1727":1,"1728":2,"1741":1,"1751":1,"1790":1,"1800":1,"1801":1,"1805":1,"1810":2,"1832":1,"1840":2,"1849":7,"1851":6,"1853":1,"1869":1,"1923":1,"1930":1,"1931":2,"1941":1,"2051":2,"2053":1,"2113":1,"2119":1,"2138":1,"2142":3,"2157":1,"2165":1,"2169":1,"2179":1,"2185":2,"2186":1,"2193":1,"2199":2,"2232":5,"2239":1}}],["contiguous",{"3":{"1312":2}}],["contiguously",{"3":{"0":1}}],["continuing",{"3":{"1324":1,"1339":2,"1396":1,"1447":1}}],["continuity",{"0":{"1566":1},"1":{"1706":1,"1707":1,"1708":1,"1709":1,"1710":1},"2":{"1330":1,"1367":1},"3":{"399":1,"1216":1,"1233":1,"1237":1,"1247":2,"1258":1,"1259":15,"1263":1,"1270":7,"1286":18,"1300":5,"1301":1,"1304":1,"1307":1,"1309":10,"1311":10,"1312":7,"1323":15,"1324":24,"1330":2,"1334":1,"1338":1,"1339":25,"1350":2,"1352":1,"1357":1,"1359":17,"1365":1,"1367":1,"1369":2,"1380":7,"1395":25,"1396":35,"1402":8,"1415":15,"1416":2,"1417":20,"1427":1,"1435":1,"1436":11,"1441":2,"1450":1,"1455":4,"1458":1,"1461":1,"1467":2,"1469":1,"1474":1,"1475":1,"1483":1,"1499":1,"1526":1,"1535":1,"1575":1,"1577":1,"1581":1,"1582":1,"1583":1,"1591":1,"1600":1,"1602":1,"1674":1,"1706":1,"1796":1,"2029":1,"2162":1}}],["continuation",{"3":{"1300":1,"1312":6,"1417":1,"1436":1,"2186":1}}],["continuations",{"3":{"482":1,"1805":1}}],["continuous",{"3":{"68":1,"1300":1,"1417":1,"1452":1,"1453":1,"1455":1,"1709":1}}],["continuously",{"3":{"0":1,"62":1,"390":1,"501":1,"1153":1,"1286":1,"1324":1,"1436":1,"1475":1,"1984":1,"2225":1}}],["continued",{"3":{"1417":1,"1455":1}}],["continueuseractivity",{"3":{"1416":2}}],["continue",{"2":{"889":1},"3":{"0":2,"375":1,"491":1,"583":1,"618":1,"624":1,"626":3,"633":1,"638":1,"640":1,"642":1,"757":1,"873":1,"876":2,"877":2,"889":1,"913":1,"914":1,"917":1,"1034":1,"1037":1,"1069":2,"1075":1,"1259":3,"1270":1,"1286":3,"1300":1,"1311":2,"1328":1,"1334":1,"1339":6,"1359":1,"1369":4,"1390":1,"1395":5,"1396":1,"1438":1,"1441":1,"1445":2,"1446":1,"1449":1,"1450":1,"1453":1,"1455":5,"1456":1,"1459":1,"1460":1,"1465":1,"1467":1,"1490":4,"1492":4,"1526":5,"1534":1,"1577":7,"1591":1,"1599":1,"1600":1,"1750":1,"1773":1,"2194":1}}],["continues",{"3":{"0":1,"47":1,"141":1,"516":1,"897":1,"1259":2,"1286":1,"1300":4,"1311":2,"1323":4,"1339":1,"1359":1,"1396":1,"1445":1}}],["dhl",{"3":{"1749":1,"1765":1}}],["d1cae3ed",{"3":{"1591":1}}],["d5297706",{"3":{"1496":1}}],["d5fd0e9",{"2":{"424":1},"3":{"424":1}}],["d4824b36",{"3":{"1496":1}}],["d4",{"3":{"1436":1}}],["dwarf",{"3":{"1467":1}}],["dwarfs",{"3":{"1292":1}}],["dwelling",{"3":{"1436":1}}],["dp",{"3":{"2224":1}}],["dpi",{"3":{"1416":1}}],["dpapi",{"3":{"1416":1,"1417":2}}],["dcp",{"3":{"1311":3,"1490":1}}],["d841f798",{"3":{"1496":1}}],["d8",{"3":{"1286":1,"2126":1}}],["dst",{"3":{"1300":1,"1350":2,"1356":1,"1359":3,"1369":1,"1396":2}}],["dsl",{"3":{"1241":1,"1660":1,"1670":1,"1989":2}}],["dsar",{"1":{"722":1,"723":1,"724":1,"725":1,"726":1,"727":1,"728":1,"729":1},"3":{"0":1,"696":1,"722":1,"727":1,"1212":2,"1300":1,"1311":2,"1438":2,"1575":1,"1577":2,"1582":1,"1672":1,"2232":1}}],["dtend",{"3":{"1300":1}}],["dtstart",{"3":{"1300":1}}],["dtstamp",{"2":{"1356":1},"3":{"1300":4,"1356":1}}],["dt",{"3":{"1247":2}}],["dtu",{"3":{"767":1,"1446":1,"1457":1,"1467":1,"1473":1,"1478":1,"1483":1,"1484":1}}],["dtoorlookupsuffix",{"3":{"1436":1}}],["dtoprojector",{"3":{"1247":1,"1270":1}}],["dtomapper",{"2":{"331":1},"3":{"331":1,"1193":1,"1244":1,"1247":2,"1270":1,"1309":1,"1311":1,"1359":16,"1396":1,"1402":4,"1497":1,"1651":1}}],["dtotoentitypropertymap",{"2":{"331":1,"332":1,"333":1,"335":1,"1244":1,"1988":1,"1990":1},"3":{"331":1,"332":1,"333":1,"335":1,"1244":1,"1247":14,"1359":7,"1988":1,"1990":1}}],["dtosandrequests",{"3":{"1436":1}}],["dtos",{"2":{"1207":1,"1359":2,"1396":1,"1402":1},"3":{"4":1,"331":1,"340":1,"341":2,"549":1,"558":1,"657":2,"674":1,"799":1,"1026":1,"1049":1,"1168":1,"1192":2,"1202":2,"1203":30,"1207":98,"1244":1,"1245":1,"1247":3,"1270":5,"1271":1,"1286":2,"1289":1,"1300":8,"1309":13,"1311":15,"1312":2,"1323":1,"1324":2,"1341":2,"1347":1,"1350":35,"1353":4,"1359":67,"1374":2,"1380":3,"1395":4,"1396":18,"1401":1,"1402":13,"1404":2,"1415":6,"1431":1,"1436":15,"1438":3,"1455":1,"1489":2,"1496":2,"1526":2,"1532":1,"1542":1,"1546":1,"1630":2,"1631":1,"1639":1,"1650":1,"1671":1,"1857":1,"1871":1,"1929":1,"1988":1,"2071":1,"2078":1,"2142":1,"2227":1,"2232":1}}],["dto",{"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"1311":1,"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1956":1,"1957":1,"1958":1,"1959":1},"2":{"1955":1},"3":{"0":8,"2":1,"3":3,"5":1,"7":1,"42":1,"330":1,"331":3,"332":1,"333":2,"334":1,"335":1,"341":2,"342":1,"343":1,"360":1,"473":1,"543":1,"545":1,"549":1,"657":1,"690":1,"725":1,"741":1,"742":1,"799":1,"881":5,"882":1,"883":3,"922":1,"923":1,"926":9,"927":1,"1026":1,"1028":1,"1049":1,"1050":3,"1059":2,"1060":1,"1133":1,"1168":4,"1170":1,"1192":1,"1202":2,"1203":2,"1212":3,"1213":1,"1227":1,"1229":2,"1237":1,"1238":1,"1241":4,"1242":2,"1243":1,"1244":4,"1247":25,"1260":3,"1262":2,"1263":1,"1265":5,"1266":1,"1269":1,"1270":35,"1271":6,"1286":7,"1297":1,"1300":20,"1304":1,"1309":20,"1310":1,"1311":50,"1312":2,"1316":1,"1323":12,"1324":28,"1340":1,"1344":3,"1347":1,"1348":1,"1350":91,"1352":1,"1353":1,"1354":2,"1356":1,"1359":168,"1370":1,"1375":1,"1380":4,"1382":3,"1384":2,"1389":1,"1395":70,"1396":49,"1398":2,"1401":2,"1402":33,"1409":1,"1410":1,"1415":36,"1416":3,"1436":13,"1437":4,"1438":6,"1487":2,"1496":7,"1526":3,"1542":1,"1577":3,"1591":1,"1639":1,"1651":1,"1662":2,"1666":1,"1683":1,"1684":1,"1686":1,"1702":2,"1720":1,"1727":4,"1728":1,"1749":1,"1750":1,"1779":1,"1810":2,"1830":1,"1868":1,"1874":2,"1883":2,"1933":2,"1950":1,"1951":2,"1952":1,"1953":6,"1954":1,"1955":3,"1956":2,"1957":2,"1959":1,"1988":2,"1990":2,"1991":4,"2052":1,"2080":1,"2095":1,"2208":2,"2230":1,"2232":1}}],["dml",{"0":{"719":1},"3":{"719":1,"1436":1,"1467":1,"1496":1}}],["dd0b6a9",{"3":{"1496":1}}],["ddl",{"3":{"1467":1,"1477":1,"1719":1,"1727":1}}],["dd",{"3":{"305":1,"1018":1,"1300":2,"1350":2,"1359":1,"1369":2,"1436":6,"1492":1,"1609":1,"1710":1,"1743":1,"2138":1}}],["ddd",{"0":{"1638":1},"3":{"0":1,"469":1,"781":1,"1049":1,"1117":1,"1201":1,"1202":1,"1203":1,"1211":1,"1212":1,"1230":1,"1231":2,"1237":10,"1247":3,"1259":1,"1270":4,"1271":1,"1286":4,"1300":5,"1309":5,"1310":1,"1311":2,"1323":3,"1340":1,"1350":9,"1359":28,"1369":6,"1380":3,"1396":9,"1402":13,"1415":5,"1431":1,"1436":29,"1489":3,"1506":1,"1523":1,"1536":1,"1577":2,"1581":1,"1582":1,"1583":1,"1588":1,"1590":1,"1637":1,"1638":1,"1639":2,"1640":1,"1646":1,"1659":1,"1662":2,"1692":1,"1763":1,"1780":1,"1781":1,"1810":1,"1811":2,"2048":1,"2090":1,"2114":1,"2115":1,"2204":1,"2213":1,"2216":1,"2221":1,"2227":1,"2243":1,"2245":1}}],["d32",{"3":{"91":1}}],["dlls",{"3":{"1436":1}}],["dll",{"2":{"1445":6},"3":{"0":1,"869":1,"939":1,"1436":1,"1445":7}}],["d",{"3":{"0":1,"67":1,"91":1,"373":1,"585":1,"1126":1,"1237":1,"1300":3,"1307":1,"1323":1,"1324":4,"1350":1,"1359":30,"1375":1,"1377":1,"1380":1,"1396":1,"1417":1,"1427":1,"1436":9,"1454":1,"1526":1,"1566":1,"1577":1,"1591":1,"1611":1,"1632":1,"1715":1,"1765":1,"1935":1}}],["dynamiccode",{"3":{"1436":2}}],["dynamiccomponent",{"2":{"1324":1},"3":{"649":1,"1324":1}}],["dynamicerrors",{"3":{"1199":2,"1207":1,"1436":7}}],["dynamicqueryconfig",{"2":{"1247":1,"1989":1},"3":{"1199":9,"1203":1,"1207":2,"1241":4,"1247":19,"1496":2,"1989":1}}],["dynamically",{"3":{"329":1,"545":1,"1018":1,"1247":2,"1324":2,"1436":1,"1441":1,"1455":1,"1458":1,"1486":1,"1489":1,"1750":1,"1773":1,"1990":1}}],["dynamic",{"0":{"1241":1},"1":{"327":1,"328":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"1986":1,"1987":1,"1988":1,"1989":1,"1990":1,"1991":1},"3":{"0":1,"95":1,"215":1,"235":1,"327":1,"329":1,"330":2,"331":2,"332":1,"335":1,"545":1,"548":1,"549":1,"591":1,"593":1,"740":1,"766":1,"880":1,"881":1,"1192":1,"1202":1,"1203":1,"1212":1,"1213":2,"1238":3,"1241":4,"1242":1,"1243":2,"1245":1,"1247":39,"1259":1,"1286":1,"1310":1,"1311":3,"1324":3,"1331":1,"1336":1,"1339":10,"1342":1,"1350":1,"1359":3,"1362":1,"1369":1,"1371":1,"1380":1,"1395":3,"1396":8,"1402":1,"1407":1,"1416":1,"1436":6,"1437":1,"1438":4,"1441":3,"1444":1,"1496":3,"1585":1,"1666":1,"1720":1,"1779":1,"1815":3,"1816":2,"1817":1,"1928":1,"1986":2,"1988":2,"1989":1,"1990":1,"1991":2,"2011":1,"2153":3,"2208":1,"2220":1}}],["dade",{"3":{"2220":1}}],["dast",{"3":{"2219":1}}],["dashed",{"3":{"1758":1}}],["dashes",{"3":{"1286":1}}],["dash",{"3":{"1335":1,"1339":1,"1395":2,"1438":1,"1467":2}}],["dashboard",{"2":{"1449":1,"1460":1},"3":{"0":3,"126":1,"390":1,"397":2,"407":1,"556":1,"618":1,"707":1,"709":1,"792":1,"861":1,"898":1,"913":3,"914":2,"915":2,"916":1,"917":1,"918":1,"1017":2,"1018":2,"1020":1,"1043":2,"1067":1,"1091":1,"1092":2,"1116":1,"1212":1,"1213":1,"1259":1,"1270":3,"1311":1,"1312":1,"1323":1,"1333":1,"1339":3,"1340":1,"1347":4,"1350":20,"1359":22,"1366":1,"1376":1,"1380":9,"1385":3,"1388":1,"1389":1,"1395":49,"1396":13,"1402":1,"1425":2,"1427":3,"1435":1,"1436":1,"1438":5,"1439":1,"1440":2,"1441":1,"1443":2,"1446":1,"1449":1,"1460":1,"1476":6,"1483":1,"1488":1,"1490":2,"1524":1,"1526":1,"1532":1,"1608":1,"1621":1,"1624":1,"1625":1,"1626":2,"1627":4,"1632":3,"1640":2,"1653":4,"1657":2,"1689":1,"1698":2,"1700":2,"1704":1,"1724":1,"1755":1,"1911":1,"1948":1,"2003":3,"2005":3,"2010":6,"2014":2,"2047":1,"2154":2,"2156":2,"2157":1,"2158":1,"2160":1,"2177":2,"2229":1}}],["dashboards",{"1":{"911":1,"912":1,"913":1,"914":1,"915":1,"916":1,"917":1,"918":1},"3":{"0":1,"402":1,"409":1,"911":1,"1212":1,"1301":1,"1317":1,"1323":1,"1324":1,"1332":1,"1333":1,"1339":1,"1436":3,"1438":2,"1443":2,"1467":1,"1482":1,"1487":1,"1550":1,"1570":1,"1574":1,"1577":2,"1578":1,"1582":1,"1583":1,"1677":1,"2007":1,"2010":1,"2232":1}}],["damaging",{"3":{"1900":1}}],["damage",{"3":{"237":1,"293":1,"818":1,"1324":2,"1339":1,"1359":1,"1396":1,"1980":1}}],["dangling",{"3":{"1323":1,"1359":2,"1383":1,"1395":3,"1415":1,"1639":1,"1852":1}}],["danger",{"3":{"1286":1}}],["dangerously",{"3":{"1301":1}}],["dangerousacceptanyservercertificatevalidator",{"3":{"1286":1}}],["dangerous",{"3":{"932":1,"1107":1,"1132":1,"1133":1,"1300":1,"1359":3,"1465":1,"1467":1,"1473":1,"1489":1,"1840":1,"1919":1,"2044":1,"2194":1}}],["dance",{"3":{"1109":1,"1286":2,"1311":1,"1324":1,"1343":1,"1352":1,"1396":3,"1398":1,"1402":3,"1415":1,"1973":1,"1979":1,"2127":1}}],["daemon",{"3":{"625":1,"642":1,"1339":1,"1430":1,"1436":5,"1438":1,"1449":1,"1455":1,"1460":1,"1486":2,"1490":2}}],["dailyquotagb",{"2":{"719":1,"1465":1,"1469":1},"3":{"719":1,"1465":3,"1467":2,"1469":1}}],["daily",{"3":{"0":1,"395":1,"401":1,"403":2,"709":1,"719":2,"1270":1,"1286":2,"1333":1,"1339":1,"1442":1,"1443":1,"1445":1,"1451":1,"1455":3,"1461":1,"1465":6,"1467":6,"1469":1,"1496":1,"1591":1,"1860":1,"1929":1}}],["dateless",{"3":{"1436":1}}],["dateformat",{"3":{"1395":1}}],["dateonly",{"3":{"1234":1,"1237":6,"1300":3,"1350":4,"1359":8,"1369":1,"1395":4,"1436":11,"1630":3,"1631":1,"1640":4}}],["dateoccurred",{"2":{"77":1,"1160":1,"1162":1,"1163":1,"1585":1,"1888":1,"1889":1},"3":{"0":2,"77":1,"782":1,"846":1,"1160":1,"1161":1,"1162":1,"1163":1,"1212":2,"1247":3,"1249":2,"1259":8,"1269":1,"1270":2,"1350":2,"1396":2,"1436":6,"1438":1,"1496":1,"1577":1,"1585":1,"1888":1,"1889":1}}],["dates",{"3":{"86":2,"265":1,"490":1,"493":1,"656":1,"1073":1,"1074":2,"1237":1,"1308":1,"1309":3,"1350":1,"1359":5,"1369":3,"1387":1,"1395":6,"1396":5,"1415":1,"1438":1,"1564":1,"1591":1,"1630":1,"1631":1,"1764":1,"1776":1}}],["datetimetoday",{"3":{"1436":2}}],["datetimestyles",{"3":{"1247":2,"1300":1,"1309":3,"1312":1,"1396":2}}],["datetimekind",{"3":{"1237":1,"1247":1,"1286":6,"1309":2,"1312":3,"1359":1,"1369":2,"1396":4,"1415":2,"1436":1,"1438":4}}],["datetimefilterstrategytests",{"3":{"1199":1,"1207":3}}],["datetimefilterstrategy",{"2":{"1241":1,"1815":1},"3":{"1199":3,"1203":1,"1207":2,"1241":5,"1247":9,"1815":1}}],["datetimeoffset",{"2":{"1161":1},"3":{"1161":2,"1212":1,"1286":3,"1300":6,"1311":1,"1323":4,"1324":2,"1339":3,"1350":4,"1359":4,"1380":2,"1395":2,"1396":18,"1415":3,"1417":4,"1431":1,"1436":12,"1631":1,"1639":1}}],["datetime",{"2":{"708":1,"1033":1,"1160":2,"2052":1},"3":{"0":1,"330":1,"708":1,"1033":1,"1034":2,"1160":3,"1161":5,"1212":1,"1237":6,"1247":7,"1259":6,"1273":1,"1286":17,"1300":11,"1309":8,"1311":1,"1312":6,"1323":12,"1324":4,"1342":2,"1350":21,"1359":12,"1362":1,"1369":1,"1378":1,"1380":4,"1395":11,"1396":21,"1402":3,"1415":13,"1416":1,"1431":2,"1436":42,"1438":1,"1453":1,"1490":1,"1496":4,"1526":1,"1577":2,"1591":1,"1631":2,"1635":2,"1639":2,"1640":4,"1641":1,"1937":1,"1988":1,"2052":1}}],["datetimerangetests",{"3":{"1199":1,"1207":2,"1237":1}}],["datetimerange",{"2":{"659":1,"660":1},"3":{"0":1,"657":9,"659":3,"660":1,"1199":3,"1203":1,"1207":2,"1230":1,"1234":4,"1237":10,"1630":1,"1631":1,"1635":1,"1662":1}}],["datediff",{"3":{"1362":1,"1369":2}}],["dated",{"3":{"0":1,"104":1,"138":2,"139":3,"140":1,"141":1,"142":1,"371":1,"409":1,"429":1,"486":1,"767":1,"869":1,"1018":1,"1021":1,"1042":1,"1045":1,"1075":1,"1077":1,"1090":1,"1212":1,"1324":1,"1339":1,"1350":1,"1359":1,"1366":1,"1369":1,"1417":2,"1436":2,"1438":1,"1477":1,"1492":1,"1496":1,"1526":2,"1530":1,"1531":1,"1533":1,"1535":1,"1577":1,"1589":1,"1591":3,"1595":1,"1596":2,"1597":1,"1598":1,"1605":1,"1610":1,"1672":1,"1739":1,"1744":1,"2185":1}}],["daterangetests",{"3":{"1199":1,"1207":2}}],["daterange",{"2":{"659":1,"660":1},"3":{"0":1,"657":9,"659":3,"660":1,"1199":3,"1203":1,"1207":2,"1230":1,"1234":7,"1237":15,"1311":1,"1350":1,"1359":1,"1438":1,"1496":1,"1577":1,"1630":1,"1631":2,"1635":2,"1662":1,"1810":1}}],["date",{"3":{"0":2,"1":3,"136":2,"138":1,"139":1,"252":1,"254":1,"259":1,"298":2,"305":7,"349":1,"492":1,"540":2,"624":1,"627":1,"717":1,"825":1,"867":1,"1018":1,"1220":1,"1237":1,"1247":1,"1286":2,"1300":12,"1309":3,"1311":1,"1323":1,"1347":1,"1350":7,"1352":3,"1359":20,"1362":1,"1364":1,"1369":4,"1380":1,"1393":3,"1395":33,"1396":9,"1415":3,"1431":2,"1436":24,"1453":1,"1455":2,"1467":1,"1474":1,"1475":1,"1477":1,"1496":1,"1526":1,"1564":1,"1591":1,"1609":1,"1630":1,"1631":8,"1635":3,"1639":1,"1710":1,"1743":1,"1764":2,"1765":1,"1767":1,"1769":2,"1814":1,"2003":1,"2085":1,"2138":4,"2232":1}}],["datacimex",{"3":{"2220":1}}],["datacontractattribute",{"3":{"1300":1}}],["datacontractserializer",{"2":{"657":1},"3":{"657":1}}],["datacontract",{"2":{"659":1,"963":1},"3":{"0":2,"657":1,"659":1,"725":1,"963":1,"964":2,"1227":1,"1229":7,"1234":1,"1237":5,"1300":1,"1311":1,"1805":1}}],["dataresidency",{"3":{"1489":1}}],["dataresidencytests",{"2":{"972":1,"1525":1},"3":{"971":1,"972":5,"974":2,"1199":1,"1207":2,"1436":9,"1489":1,"1493":1,"1525":1,"1526":2,"1535":1,"1591":1}}],["dataresidencytestsbasetests",{"3":{"972":2,"975":1,"1199":1,"1207":3,"1436":9,"1577":1,"1582":1}}],["dataresidencytestsbase",{"2":{"972":1,"975":1,"1575":1,"2042":1,"2043":1},"3":{"0":1,"972":2,"973":1,"974":2,"975":2,"1199":3,"1207":2,"1212":1,"1431":1,"1436":16,"1496":2,"1575":1,"1577":1,"1582":1,"1654":1,"2042":1,"2043":1}}],["dataannotation",{"3":{"1395":1}}],["dataannotationsmodelvalidator",{"2":{"1384":1},"3":{"1199":27,"1203":1,"1207":2,"1324":24,"1384":1,"1395":19,"1396":4}}],["dataannotations",{"3":{"117":1,"128":2,"819":1,"1259":1,"1271":1,"1286":3,"1300":9,"1309":3,"1311":2,"1320":1,"1323":6,"1324":24,"1339":3,"1384":1,"1395":29,"1396":3,"1427":2,"1436":2,"1591":2,"1596":2,"1597":1,"1600":1}}],["datagrid",{"3":{"1324":3,"1395":1,"1396":2,"1524":2,"1526":1,"1530":1,"1531":2}}],["datagridlistpagebasetests",{"2":{"2079":1},"3":{"1199":1,"1207":5,"1324":1,"1436":1,"2079":1}}],["datagridlistpagebase",{"0":{"2072":1},"2":{"151":1,"556":1,"558":1,"559":1,"879":1,"884":1,"885":1,"1383":1,"1586":1,"1597":1,"1669":1,"1715":1,"2072":1,"2073":1,"2076":1,"2079":1,"2080":1},"3":{"0":2,"151":1,"556":14,"558":2,"559":4,"879":1,"881":4,"883":1,"884":2,"885":1,"1199":12,"1203":1,"1207":3,"1212":1,"1324":50,"1383":1,"1395":18,"1396":2,"1415":2,"1436":4,"1524":1,"1526":7,"1531":1,"1532":1,"1577":6,"1586":3,"1591":1,"1596":1,"1597":1,"1669":1,"1715":1,"2072":1,"2073":1,"2076":1,"2079":2,"2080":1}}],["dataintegritytests",{"3":{"1199":1,"1207":2,"1438":1}}],["datapoints",{"3":{"914":1,"1443":1,"1467":2}}],["dataprotectionkek",{"3":{"1467":1}}],["dataprotectionkeyscontainer",{"3":{"1467":1}}],["dataprotectionkeyvaultkeyuri",{"2":{"602":1,"604":1,"668":1},"3":{"0":1,"602":1,"604":1,"668":1,"1467":1}}],["dataprotectionstorage",{"3":{"665":1}}],["dataprotectionstorageready",{"2":{"604":1,"663":1,"665":1,"668":1,"1970":1},"3":{"0":1,"604":1,"663":1,"665":2,"668":1,"1970":1}}],["dataprotectionextensionstests",{"3":{"665":1,"1199":1,"1207":2,"1339":1,"1438":2}}],["dataprotectionextensions",{"3":{"665":4,"668":1,"1199":1,"1203":1,"1207":2,"1336":2,"1339":5,"1442":3,"1467":2}}],["dataprotection",{"1":{"662":1,"663":1,"664":1,"665":1,"666":1,"667":1,"668":1,"669":1,"670":1},"2":{"665":2,"668":1,"1339":1},"3":{"0":3,"425":1,"662":1,"664":2,"665":14,"667":2,"668":3,"669":1,"1207":3,"1212":1,"1324":1,"1325":1,"1336":3,"1339":8,"1438":2,"1442":5,"1445":1,"1467":21,"1469":1,"1496":2,"1970":4,"1972":1,"2232":2}}],["datamatrix",{"3":{"682":1,"685":1,"1417":1}}],["datamemberattribute",{"3":{"1300":1}}],["datamember",{"2":{"659":1},"3":{"0":1,"657":1,"659":1,"964":2,"1227":1,"1229":7,"1234":1,"1237":7,"1300":2,"1805":1}}],["datahost",{"3":{"423":1}}],["datasets",{"3":{"1560":1}}],["datasetrowcount",{"3":{"1436":1}}],["datasubject",{"2":{"1436":1},"3":{"1436":1}}],["datasubjectsample",{"3":{"1199":2,"1207":1,"1436":3,"1496":1,"1577":1}}],["datastorageregion",{"3":{"972":1,"1436":3,"2043":1}}],["datascheme",{"3":{"423":1,"1416":1}}],["datasource=",{"3":{"1436":2}}],["datasource=name",{"3":{"1286":1}}],["datasourcemodelcachekeyfactory",{"2":{"1201":1,"1273":1,"1849":1,"1853":1},"3":{"1198":1,"1199":3,"1201":1,"1203":1,"1207":2,"1273":2,"1286":6,"1396":1,"1498":1,"1849":1,"1853":1}}],["datasourcebranchingfitnesstests",{"2":{"1177":1,"1179":1,"1212":1},"3":{"1175":1,"1177":1,"1179":1,"1199":1,"1207":3,"1212":1,"1286":11,"1436":6,"1496":1}}],["datasourceenginecapabilities",{"2":{"1175":1,"1274":1,"1280":1},"3":{"1175":2,"1176":1,"1177":1,"1178":2,"1199":7,"1203":1,"1207":2,"1274":1,"1280":4,"1286":18,"1496":1}}],["datasourceengines",{"2":{"1179":1,"1510":1,"1586":1},"3":{"0":1,"1175":3,"1176":2,"1177":1,"1178":1,"1179":2,"1192":1,"1198":1,"1199":13,"1203":1,"1207":2,"1212":1,"1272":1,"1273":1,"1280":2,"1286":62,"1436":1,"1496":1,"1510":1,"1577":1,"1586":1}}],["datasourceentrysettings",{"2":{"1279":1,"1323":1},"3":{"166":2,"171":1,"1175":2,"1199":22,"1203":1,"1207":2,"1279":2,"1286":21,"1320":2,"1323":4,"1436":1}}],["datasourcessettings",{"2":{"1272":1},"3":{"674":1,"1199":17,"1203":1,"1207":2,"1272":1,"1279":2,"1286":19,"1320":2,"1323":3}}],["datasourceservicetests",{"3":{"1199":1,"1207":3,"1286":1}}],["datasourceserviceadditionaltests",{"3":{"1199":1,"1207":4,"1286":1}}],["datasourceservice",{"3":{"166":1,"1175":1,"1199":4,"1203":1,"1207":2,"1247":1,"1279":3,"1280":1,"1286":15,"1323":3}}],["datasources",{"2":{"170":1,"1441":1,"1473":1,"1490":1,"1614":1,"1652":1,"1701":1,"1722":1,"1729":1,"1731":1,"2097":1},"3":{"47":1,"166":6,"170":5,"633":1,"676":2,"698":4,"703":1,"1004":1,"1034":2,"1067":1,"1175":13,"1203":26,"1207":148,"1276":2,"1279":12,"1280":1,"1286":127,"1300":2,"1311":2,"1320":6,"1323":5,"1326":1,"1328":1,"1332":1,"1339":7,"1359":1,"1429":1,"1436":8,"1438":2,"1441":5,"1443":1,"1446":1,"1473":1,"1490":2,"1496":1,"1577":1,"1586":1,"1614":1,"1652":3,"1684":2,"1701":1,"1719":1,"1722":1,"1727":1,"1728":1,"1729":1,"1731":1,"1790":1,"1849":2,"2008":1,"2097":1}}],["datasourceresolvertests",{"2":{"164":1},"3":{"164":1,"170":2,"1199":1,"1207":2,"1286":12}}],["datasourceresolver",{"2":{"46":1,"47":1,"991":1,"1033":1,"1321":1,"1790":1,"1849":1,"1853":1},"3":{"46":1,"47":1,"166":4,"170":2,"171":1,"991":1,"1033":1,"1175":2,"1199":14,"1203":1,"1207":3,"1279":3,"1284":1,"1286":121,"1321":1,"1323":2,"1326":1,"1339":1,"1436":3,"1438":1,"1534":1,"1790":1,"1849":2,"1853":1}}],["datasourcename",{"2":{"910":1,"2199":1},"3":{"0":1,"905":4,"910":1,"1059":1,"1061":1,"1273":1,"1283":2,"1286":11,"1290":1,"1297":1,"1300":3,"1323":1,"1436":1,"2199":1}}],["datasourcekey",{"2":{"165":1,"169":1,"697":1,"699":1,"701":1},"3":{"0":1,"47":1,"165":1,"166":2,"169":1,"697":1,"698":1,"699":1,"701":1,"1199":95,"1203":1,"1207":2,"1212":1,"1259":2,"1278":2,"1279":3,"1286":77,"1311":1,"1323":1,"1436":6,"1664":1,"1790":1,"1849":3,"1851":1}}],["datasource",{"2":{"889":1,"1174":1,"1179":1,"1321":1,"1361":1,"1510":1,"1856":2,"1857":1},"3":{"0":4,"24":3,"166":3,"170":3,"195":1,"201":1,"889":1,"905":1,"1034":2,"1036":1,"1174":1,"1175":3,"1179":1,"1199":104,"1203":1,"1207":1,"1212":3,"1259":11,"1270":1,"1277":1,"1279":1,"1280":3,"1282":1,"1284":1,"1286":91,"1311":1,"1317":1,"1321":1,"1323":17,"1339":2,"1361":1,"1369":3,"1396":2,"1436":14,"1441":1,"1510":1,"1664":1,"1774":1,"1856":3,"1857":1}}],["dataexport",{"2":{"723":1,"725":1,"727":1,"1299":1,"1410":1,"1672":1},"3":{"0":1,"723":1,"725":1,"727":1,"1203":8,"1207":16,"1299":1,"1300":4,"1311":4,"1410":2,"1415":24,"1577":1,"1672":1}}],["dataexportcontrollerbasetests",{"3":{"1199":1,"1207":6,"1311":2,"1438":2}}],["dataexportcontrollerbase",{"2":{"723":1,"725":1,"728":1,"1060":1,"1299":1,"1672":1},"3":{"0":1,"723":2,"725":4,"728":1,"1060":1,"1199":4,"1203":1,"1207":2,"1299":1,"1300":7,"1311":9,"1323":4,"1410":1,"1415":13,"1496":1,"1577":1,"1672":1}}],["data",{"0":{"1299":1,"1357":1,"1364":1,"1545":1,"1556":1,"1567":1,"1664":1,"1777":1,"2074":1,"2207":1},"1":{"542":1,"543":1,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"550":1,"551":1,"552":1,"722":1,"723":1,"724":1,"725":1,"726":1,"727":1,"728":1,"729":1,"878":1,"879":1,"880":1,"881":1,"882":1,"883":1,"884":1,"885":1,"969":1,"970":1,"971":1,"972":1,"973":1,"974":1,"975":1,"976":1,"1172":1,"1173":1,"1174":1,"1175":1,"1176":1,"1177":1,"1178":1,"1179":1,"1180":1},"2":{"1477":1,"1492":1},"3":{"0":25,"12":1,"24":2,"38":7,"39":9,"40":1,"41":5,"42":1,"46":2,"47":1,"48":1,"68":1,"69":1,"80":1,"95":2,"96":2,"117":1,"120":1,"122":1,"128":1,"135":1,"165":1,"167":2,"184":1,"188":1,"195":1,"208":1,"214":1,"219":1,"235":1,"245":1,"248":1,"267":1,"273":1,"275":1,"290":1,"295":4,"310":1,"314":1,"317":2,"318":1,"358":5,"359":2,"360":2,"362":1,"365":2,"388":1,"398":1,"399":1,"402":1,"403":2,"409":1,"428":1,"435":1,"440":1,"441":2,"459":1,"464":1,"537":1,"539":1,"542":1,"545":2,"549":2,"550":1,"555":1,"556":1,"557":1,"572":1,"583":1,"585":1,"587":1,"591":1,"597":1,"598":1,"602":1,"604":1,"605":1,"609":2,"610":1,"612":1,"618":1,"650":1,"659":1,"664":1,"665":3,"666":2,"670":1,"674":1,"676":2,"682":1,"684":1,"689":1,"690":2,"697":3,"698":1,"699":2,"700":3,"707":1,"714":3,"715":3,"716":2,"722":1,"724":6,"725":10,"726":2,"727":4,"728":1,"742":1,"743":1,"745":1,"747":1,"749":1,"757":1,"758":1,"759":1,"798":1,"810":1,"827":2,"838":1,"839":2,"853":1,"855":1,"878":1,"880":1,"881":2,"884":1,"885":1,"896":2,"905":2,"906":1,"907":1,"920":1,"945":1,"947":1,"948":1,"963":1,"964":2,"966":1,"969":1,"971":2,"972":1,"974":1,"987":2,"988":1,"992":1,"1004":1,"1011":1,"1012":1,"1018":1,"1019":1,"1020":1,"1026":1,"1028":1,"1044":2,"1059":2,"1060":1,"1069":1,"1082":2,"1107":1,"1108":1,"1110":1,"1116":3,"1118":1,"1132":1,"1142":2,"1143":1,"1172":1,"1184":2,"1185":2,"1192":4,"1201":1,"1202":3,"1203":3,"1207":8,"1212":10,"1216":3,"1218":1,"1229":8,"1231":1,"1232":2,"1233":2,"1236":8,"1237":45,"1238":1,"1239":2,"1240":1,"1242":1,"1243":3,"1247":18,"1251":2,"1256":2,"1257":1,"1259":30,"1263":2,"1264":1,"1267":1,"1269":1,"1270":28,"1271":3,"1272":4,"1273":1,"1275":1,"1276":1,"1277":4,"1283":4,"1284":3,"1285":1,"1286":201,"1290":2,"1293":1,"1297":1,"1299":2,"1300":81,"1301":10,"1304":1,"1306":1,"1307":2,"1308":3,"1309":43,"1310":15,"1311":46,"1312":2,"1313":1,"1315":1,"1316":1,"1317":2,"1318":1,"1320":2,"1322":1,"1323":77,"1324":90,"1326":2,"1328":2,"1339":28,"1343":2,"1344":2,"1347":1,"1350":59,"1352":1,"1353":5,"1355":2,"1356":1,"1357":2,"1358":1,"1359":157,"1361":1,"1363":1,"1364":1,"1366":1,"1369":36,"1372":1,"1373":1,"1375":1,"1378":1,"1380":24,"1381":1,"1383":1,"1385":2,"1390":1,"1391":1,"1392":1,"1393":1,"1395":95,"1396":153,"1399":1,"1400":2,"1401":1,"1402":50,"1403":2,"1410":5,"1412":1,"1415":105,"1416":4,"1417":13,"1420":1,"1423":2,"1427":3,"1429":2,"1431":2,"1433":4,"1436":161,"1437":1,"1438":21,"1441":3,"1443":1,"1444":1,"1449":3,"1454":1,"1455":4,"1456":2,"1461":1,"1462":1,"1465":2,"1467":26,"1469":1,"1473":5,"1474":4,"1475":1,"1476":2,"1477":4,"1478":8,"1479":1,"1481":1,"1482":2,"1483":1,"1484":1,"1487":3,"1488":6,"1489":7,"1490":1,"1492":2,"1493":1,"1496":6,"1497":1,"1499":3,"1508":1,"1524":2,"1525":2,"1526":6,"1530":1,"1531":1,"1534":3,"1535":2,"1540":1,"1544":2,"1545":1,"1548":2,"1549":2,"1553":1,"1555":4,"1556":2,"1559":2,"1560":1,"1561":2,"1563":1,"1567":5,"1568":1,"1572":4,"1575":1,"1577":6,"1581":1,"1582":2,"1584":1,"1585":1,"1586":3,"1590":1,"1591":5,"1597":2,"1600":2,"1602":1,"1607":2,"1621":1,"1629":5,"1630":8,"1631":8,"1632":12,"1634":1,"1635":1,"1636":3,"1637":2,"1638":4,"1639":12,"1640":2,"1641":4,"1649":1,"1654":1,"1660":2,"1662":1,"1663":1,"1664":1,"1665":2,"1666":1,"1667":1,"1670":1,"1671":1,"1672":3,"1677":1,"1685":1,"1686":1,"1702":1,"1707":3,"1709":1,"1713":1,"1714":1,"1718":1,"1722":1,"1727":1,"1729":1,"1734":1,"1741":2,"1746":1,"1747":4,"1748":1,"1751":2,"1753":1,"1757":1,"1759":1,"1764":2,"1765":6,"1772":1,"1774":2,"1776":1,"1777":2,"1779":1,"1783":1,"1784":1,"1790":4,"1792":1,"1793":2,"1795":2,"1796":3,"1799":1,"1804":1,"1805":1,"1807":1,"1808":1,"1810":1,"1812":1,"1813":1,"1815":1,"1817":1,"1825":1,"1832":2,"1836":1,"1838":2,"1839":3,"1848":1,"1849":1,"1852":1,"1853":1,"1855":2,"1857":1,"1859":1,"1861":1,"1862":1,"1863":2,"1865":1,"1868":2,"1870":1,"1873":1,"1902":1,"1903":1,"1920":2,"1922":2,"1923":3,"1924":1,"1942":1,"1948":1,"1950":1,"1951":1,"1953":2,"1954":1,"1957":1,"1959":1,"1988":1,"1993":1,"1994":1,"1997":2,"2010":1,"2012":2,"2013":1,"2022":1,"2029":1,"2033":1,"2034":2,"2036":1,"2038":1,"2040":1,"2043":1,"2047":1,"2053":3,"2055":1,"2057":1,"2059":1,"2061":4,"2062":2,"2063":8,"2064":1,"2065":4,"2067":4,"2068":6,"2069":4,"2070":1,"2073":2,"2076":1,"2080":1,"2085":1,"2091":2,"2098":1,"2111":1,"2114":1,"2125":2,"2126":4,"2127":2,"2128":2,"2140":4,"2141":6,"2142":3,"2143":1,"2146":3,"2150":1,"2154":1,"2156":1,"2158":1,"2159":2,"2160":3,"2164":1,"2171":1,"2175":1,"2179":1,"2191":1,"2192":2,"2199":1,"2200":2,"2203":1,"2207":1,"2214":1,"2219":3,"2220":4,"2224":1,"2230":1,"2232":9,"2236":1,"2241":1}}],["databasecreated",{"3":{"1436":1}}],["databaseauditingpolicy",{"3":{"1436":1}}],["databasefacade",{"3":{"1311":1}}],["databaserestoredrilltests",{"2":{"1707":1},"3":{"1199":1,"1207":3,"1438":1,"1577":2,"1586":1,"1707":3}}],["databaseinitializationextensionstests",{"2":{"1496":1},"3":{"1198":1,"1199":2,"1207":7,"1286":1,"1311":2,"1323":3,"1496":2}}],["databaseinitializationextensions",{"2":{"290":1,"1034":1},"3":{"290":2,"295":1,"296":1,"453":1,"583":1,"1034":2,"1199":1,"1203":1,"1207":2,"1208":2,"1286":15,"1311":5,"1323":8,"1369":2,"1415":1,"1577":1}}],["databaseinitstrategy",{"2":{"290":1,"291":2,"295":1,"296":1,"563":1,"1467":1,"1614":1,"1652":1,"1664":1,"1719":1},"3":{"290":1,"291":2,"295":1,"296":1,"563":1,"698":1,"1311":1,"1320":1,"1323":3,"1467":1,"1490":1,"1614":1,"1652":1,"1664":1,"1719":1}}],["databaseinitstrategy=migrate",{"3":{"0":1,"572":1,"1212":1,"1455":1,"1476":1}}],["databasenameprefix",{"3":{"1436":1,"1488":1,"1490":1}}],["databasename",{"2":{"1446":1},"3":{"195":1,"201":1,"1259":8,"1286":4,"1436":2,"1441":1,"1446":1,"1684":1,"1728":1}}],["databases",{"0":{"1614":1,"2053":1},"1":{"1854":1,"1855":1,"1856":1,"1857":1,"1858":1,"1859":1,"1860":1,"1861":1,"1862":1},"3":{"0":3,"10":1,"47":2,"49":1,"61":1,"67":1,"165":1,"166":2,"295":1,"390":1,"439":1,"628":1,"676":1,"717":1,"719":1,"762":1,"766":2,"913":1,"971":1,"1025":1,"1042":1,"1059":1,"1061":1,"1212":1,"1259":4,"1273":1,"1275":1,"1276":1,"1278":1,"1279":2,"1286":33,"1310":1,"1311":1,"1320":1,"1323":3,"1325":1,"1326":1,"1332":1,"1350":1,"1359":7,"1369":2,"1380":2,"1396":4,"1402":1,"1415":2,"1429":1,"1430":1,"1436":12,"1439":1,"1440":1,"1441":2,"1446":2,"1449":1,"1455":2,"1460":3,"1461":1,"1467":11,"1469":5,"1471":3,"1473":4,"1474":4,"1475":6,"1477":2,"1478":3,"1482":3,"1496":1,"1525":2,"1526":3,"1535":1,"1589":1,"1591":2,"1596":1,"1600":1,"1652":1,"1664":1,"1670":1,"1678":1,"1684":1,"1688":1,"1689":2,"1698":1,"1710":1,"1724":1,"1783":1,"1792":1,"1847":4,"1849":3,"1852":1,"1853":2,"1854":1,"1855":1,"1858":1,"1860":1,"1862":1,"1864":1,"2003":1,"2004":1,"2005":1,"2008":1,"2014":1,"2027":1,"2034":3,"2036":1,"2037":2,"2038":2,"2053":2,"2060":1,"2067":1,"2109":1,"2192":1,"2199":1,"2207":1,"2229":1}}],["database",{"0":{"1273":1,"1279":1,"1283":1,"1429":1,"1473":1,"1510":1,"1849":1,"1871":1,"2035":1,"2164":1},"1":{"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"1847":1,"1848":1,"1849":1,"1850":1,"1851":1,"1852":1,"1853":1,"1869":1,"1870":1,"1871":1,"1872":1,"1873":1,"1874":1,"1875":1,"1876":1,"1877":1},"2":{"291":1,"1133":1,"1273":1,"1461":1,"1467":3,"1475":3},"3":{"0":27,"10":3,"17":1,"24":1,"38":1,"41":1,"44":1,"45":4,"46":2,"47":7,"48":1,"49":1,"58":1,"59":1,"61":1,"64":1,"66":2,"67":1,"71":3,"73":1,"77":1,"94":1,"109":1,"135":1,"153":1,"158":1,"165":2,"166":10,"167":1,"169":1,"170":2,"171":1,"174":1,"176":1,"195":3,"196":2,"197":1,"199":1,"201":2,"202":2,"218":1,"255":1,"290":2,"291":3,"292":2,"293":2,"294":2,"295":2,"296":1,"330":1,"331":1,"341":3,"342":2,"343":2,"350":2,"358":4,"359":1,"390":1,"391":1,"403":1,"451":1,"458":2,"459":4,"460":1,"461":2,"471":1,"473":1,"500":1,"501":1,"535":3,"536":1,"537":4,"538":1,"541":1,"544":1,"545":1,"546":2,"548":1,"549":1,"551":2,"563":1,"565":1,"568":2,"572":3,"573":1,"574":1,"575":1,"582":1,"583":1,"587":1,"598":1,"599":3,"600":1,"601":1,"605":1,"625":1,"628":1,"631":2,"632":1,"633":6,"645":1,"676":1,"688":1,"690":2,"691":1,"692":1,"697":2,"698":4,"700":1,"702":5,"703":1,"707":3,"708":1,"709":2,"711":1,"713":1,"714":3,"715":3,"716":1,"717":1,"718":2,"719":4,"735":2,"742":1,"743":1,"756":1,"758":1,"759":1,"765":1,"766":2,"767":1,"769":1,"782":1,"793":1,"799":1,"805":1,"809":1,"810":1,"815":1,"817":1,"819":5,"820":2,"821":2,"823":1,"853":1,"856":1,"888":1,"889":1,"890":1,"891":2,"893":1,"897":1,"904":1,"905":3,"906":2,"907":1,"913":1,"918":2,"922":1,"930":1,"932":1,"933":1,"972":1,"974":1,"987":3,"988":1,"990":1,"992":2,"995":2,"996":1,"1000":2,"1018":1,"1030":1,"1032":1,"1033":3,"1034":5,"1036":1,"1037":1,"1038":1,"1043":2,"1050":1,"1052":1,"1059":1,"1061":1,"1066":1,"1067":2,"1068":1,"1074":1,"1082":2,"1083":3,"1085":3,"1116":1,"1120":1,"1133":1,"1135":1,"1137":1,"1140":1,"1145":1,"1149":1,"1150":5,"1151":1,"1152":1,"1153":1,"1173":1,"1192":1,"1202":3,"1203":3,"1212":6,"1213":2,"1228":1,"1229":2,"1230":1,"1231":2,"1236":2,"1237":11,"1238":2,"1239":2,"1242":1,"1243":2,"1244":1,"1247":16,"1248":1,"1251":2,"1253":3,"1254":4,"1256":1,"1259":33,"1263":2,"1269":1,"1270":17,"1271":3,"1272":3,"1273":5,"1274":1,"1275":2,"1276":4,"1277":2,"1278":5,"1279":10,"1280":1,"1281":5,"1282":3,"1283":5,"1284":2,"1286":292,"1290":3,"1292":1,"1297":2,"1300":29,"1301":2,"1303":1,"1309":15,"1310":9,"1311":32,"1313":1,"1316":1,"1320":7,"1321":2,"1323":47,"1324":1,"1325":1,"1326":3,"1328":1,"1332":5,"1333":1,"1339":27,"1342":7,"1343":2,"1344":1,"1350":52,"1354":2,"1355":3,"1357":2,"1359":112,"1360":1,"1361":2,"1362":2,"1363":3,"1364":1,"1365":1,"1367":1,"1369":31,"1379":1,"1380":4,"1395":8,"1396":89,"1399":1,"1401":2,"1402":22,"1404":1,"1405":1,"1406":1,"1409":1,"1410":1,"1412":1,"1413":2,"1415":46,"1417":1,"1428":1,"1429":10,"1431":1,"1436":70,"1437":2,"1438":16,"1441":13,"1443":5,"1446":3,"1449":3,"1451":1,"1453":4,"1455":4,"1457":1,"1460":6,"1461":1,"1462":1,"1463":1,"1467":45,"1469":2,"1471":3,"1473":10,"1474":12,"1475":18,"1476":4,"1477":4,"1478":11,"1482":7,"1483":3,"1484":1,"1486":1,"1487":1,"1488":7,"1490":8,"1491":2,"1492":5,"1510":1,"1523":1,"1524":1,"1534":5,"1541":1,"1544":2,"1545":2,"1547":1,"1568":1,"1572":1,"1576":1,"1577":1,"1588":1,"1590":1,"1591":4,"1596":2,"1597":1,"1600":1,"1602":1,"1630":3,"1631":6,"1637":2,"1638":3,"1639":6,"1640":1,"1641":4,"1650":1,"1651":4,"1652":4,"1653":7,"1654":2,"1656":2,"1661":5,"1662":4,"1663":3,"1664":5,"1667":3,"1668":1,"1670":2,"1671":3,"1674":1,"1675":5,"1678":1,"1683":1,"1684":10,"1685":3,"1686":3,"1688":2,"1689":1,"1692":2,"1695":1,"1696":1,"1697":5,"1698":1,"1700":2,"1701":2,"1704":2,"1705":1,"1706":1,"1707":1,"1708":1,"1717":1,"1718":4,"1719":2,"1721":3,"1722":3,"1724":3,"1726":2,"1727":12,"1728":6,"1729":5,"1731":2,"1748":2,"1749":1,"1764":1,"1765":1,"1767":1,"1774":2,"1778":1,"1779":1,"1780":1,"1781":1,"1783":2,"1785":1,"1786":1,"1789":1,"1790":4,"1792":1,"1793":3,"1796":1,"1800":1,"1806":1,"1808":1,"1810":1,"1814":1,"1815":3,"1817":2,"1821":3,"1831":1,"1832":2,"1835":2,"1837":1,"1839":1,"1840":2,"1841":2,"1846":1,"1847":6,"1848":3,"1849":11,"1851":3,"1852":1,"1853":11,"1854":1,"1855":5,"1858":3,"1860":1,"1862":1,"1863":2,"1864":3,"1866":1,"1867":1,"1868":4,"1869":2,"1871":2,"1872":1,"1873":1,"1875":2,"1876":2,"1877":3,"1886":1,"1887":1,"1898":1,"1900":1,"1901":1,"1903":2,"1913":1,"1920":1,"1921":1,"1922":2,"1923":2,"1933":2,"1934":1,"1937":1,"1940":1,"1941":1,"1946":2,"1948":3,"1951":1,"1954":2,"1965":1,"1980":2,"1982":1,"1984":1,"1985":1,"1987":1,"1988":2,"1991":1,"1999":1,"2008":4,"2027":1,"2032":3,"2034":5,"2035":6,"2036":3,"2037":4,"2038":2,"2047":1,"2049":1,"2050":2,"2052":1,"2053":3,"2054":1,"2055":4,"2056":1,"2060":2,"2061":1,"2064":2,"2071":1,"2089":1,"2097":3,"2111":2,"2113":2,"2115":1,"2128":1,"2135":1,"2140":6,"2141":4,"2144":2,"2146":4,"2161":3,"2162":2,"2164":2,"2168":1,"2169":4,"2170":1,"2180":1,"2185":1,"2191":1,"2193":3,"2207":3,"2214":1,"2220":3,"2221":1,"2230":3,"2232":4,"2243":1}}],["darkened",{"3":{"2075":1}}],["darkens",{"3":{"1324":2}}],["darkerror",{"3":{"1324":3}}],["darkactiondefault",{"3":{"1324":1}}],["darkbackground",{"3":{"1324":2}}],["darkwarning",{"3":{"1324":1}}],["darksurface",{"3":{"1324":2}}],["darksuccess",{"3":{"1324":1}}],["darksecondarylighten",{"3":{"1324":1}}],["darksecondarydarken",{"3":{"1324":1}}],["darkinfo",{"3":{"1324":2}}],["darktextsecondary",{"3":{"1324":1}}],["darktertiary",{"3":{"1324":1}}],["darktheme",{"3":{"1237":1,"1415":2}}],["darkprimarylighten",{"3":{"1324":1}}],["darkmodee2etests",{"2":{"1643":1,"1645":1},"3":{"618":1,"1199":1,"1207":2,"1324":2,"1436":1,"1577":4,"1586":2,"1643":1,"1645":1}}],["dark",{"1":{"270":1,"271":1,"272":1,"273":1,"274":1,"275":1,"276":1,"277":1,"2081":1,"2082":1,"2083":1,"2084":1,"2085":1,"2086":1},"3":{"0":3,"270":1,"272":1,"273":2,"274":1,"275":1,"299":1,"396":1,"555":2,"556":1,"558":2,"618":4,"622":3,"1192":1,"1212":1,"1234":1,"1237":2,"1300":1,"1311":1,"1324":27,"1333":1,"1339":3,"1402":2,"1405":1,"1415":5,"1416":2,"1436":6,"1438":2,"1480":1,"1487":1,"1496":2,"1499":1,"1513":1,"1526":2,"1557":1,"1577":12,"1586":2,"1591":2,"1596":2,"1608":1,"1643":5,"1645":6,"1653":1,"1669":1,"1742":1,"2075":2,"2079":4,"2080":1,"2081":4,"2083":2,"2086":3,"2134":2,"2160":1,"2210":1,"2232":2}}],["dayoffset",{"3":{"1369":2}}],["daylight",{"3":{"709":1,"1269":1,"1270":1,"1438":1}}],["days",{"2":{"629":1},"3":{"0":5,"38":1,"41":1,"93":1,"489":1,"499":2,"501":2,"502":1,"513":1,"591":2,"626":2,"627":1,"628":1,"629":2,"642":1,"706":1,"767":1,"805":2,"905":1,"1020":2,"1150":1,"1212":1,"1259":1,"1288":1,"1300":5,"1323":2,"1324":1,"1410":1,"1417":1,"1427":2,"1436":1,"1445":1,"1453":1,"1455":6,"1459":1,"1460":1,"1461":2,"1465":5,"1467":7,"1474":3,"1475":3,"1476":4,"1478":1,"1490":1,"1525":1,"1526":2,"1534":1,"1589":1,"1591":2,"1596":2,"1599":2,"1631":1,"1637":1,"1638":1,"1641":3,"1747":1,"1765":1,"1767":1,"1845":1,"1982":1,"2061":1,"2063":1,"2065":1}}],["day",{"0":{"1476":1},"1":{"270":1,"271":1,"272":1,"273":1,"274":1,"275":1,"276":1,"277":1},"3":{"0":5,"41":1,"130":1,"186":1,"243":2,"265":1,"270":1,"273":1,"275":1,"311":1,"379":1,"387":1,"390":1,"423":1,"424":1,"491":2,"492":1,"501":1,"520":1,"529":1,"566":1,"594":1,"609":2,"626":1,"628":2,"689":1,"690":1,"706":2,"707":1,"708":1,"717":1,"726":1,"757":1,"765":1,"766":2,"767":1,"781":1,"785":1,"792":1,"831":1,"832":1,"848":1,"907":2,"916":1,"1003":1,"1013":2,"1018":1,"1020":1,"1082":1,"1085":1,"1102":1,"1124":1,"1125":1,"1134":1,"1143":1,"1150":1,"1154":1,"1162":1,"1183":1,"1192":1,"1212":1,"1237":4,"1247":1,"1270":2,"1288":1,"1295":1,"1298":1,"1300":5,"1301":1,"1309":2,"1323":1,"1324":3,"1339":1,"1348":1,"1349":1,"1350":3,"1356":1,"1359":5,"1369":2,"1378":1,"1379":1,"1380":2,"1393":1,"1395":12,"1396":23,"1397":1,"1401":1,"1402":9,"1416":3,"1435":1,"1436":5,"1438":6,"1455":6,"1456":1,"1457":3,"1458":3,"1459":1,"1462":1,"1465":12,"1467":15,"1469":1,"1471":1,"1474":2,"1475":1,"1476":2,"1482":2,"1487":1,"1490":1,"1492":3,"1496":14,"1499":1,"1513":1,"1514":1,"1525":3,"1526":6,"1529":2,"1530":1,"1531":2,"1532":1,"1534":1,"1552":2,"1577":1,"1585":1,"1589":1,"1591":5,"1626":2,"1627":1,"1629":3,"1630":5,"1631":1,"1641":1,"1663":1,"1675":1,"1678":1,"1695":1,"1698":1,"1764":1,"1765":1,"1767":2,"1783":1,"1788":2,"1789":1,"1790":1,"1795":1,"1800":1,"1826":1,"1847":2,"1853":1,"1854":1,"1862":1,"1863":1,"1864":1,"1870":1,"1894":1,"1900":2,"1905":1,"1922":1,"1925":1,"1942":1,"1948":2,"1951":1,"1958":2,"1960":1,"1963":1,"1980":1,"1982":1,"1984":2,"1986":1,"2003":1,"2015":2,"2016":1,"2028":1,"2034":1,"2056":1,"2068":1,"2075":1,"2080":1,"2081":1,"2086":1,"2087":1,"2097":1,"2098":1,"2099":1,"2110":1,"2133":3,"2138":1,"2146":1,"2180":2,"2193":1,"2206":1,"2220":1,"2228":1,"2232":1,"2238":1,"2239":2,"2240":2}}],["dns",{"3":{"0":1,"100":1,"109":1,"234":1,"235":1,"881":1,"1187":1,"1225":1,"1312":2,"1324":1,"1329":1,"1334":1,"1339":7,"1395":2,"1396":2,"1415":1,"1443":2,"1447":1,"1467":4,"1632":1,"1640":1,"1653":1,"1702":1}}],["duties",{"3":{"1366":2}}],["duty",{"3":{"757":1,"1270":1,"1300":1,"1402":1,"2063":1}}],["duplexstreamingserverhandler",{"3":{"1312":1}}],["duplex",{"3":{"1312":3}}],["duplicating",{"3":{"186":1,"273":1,"282":1,"351":1,"423":1,"767":1,"914":1,"1229":1,"1259":2,"1270":2,"1286":3,"1309":1,"1311":3,"1323":2,"1324":3,"1337":1,"1350":1,"1359":4,"1380":1,"1395":4,"1396":2,"1402":2,"1415":1,"1416":1,"1436":3,"1557":1,"1828":1,"2083":1}}],["duplication",{"3":{"133":1,"135":1,"255":1,"325":1,"405":1,"651":2,"681":1,"724":1,"819":1,"837":1,"1011":1,"1043":1,"1061":1,"1220":1,"1247":1,"1259":1,"1270":1,"1286":1,"1300":3,"1301":1,"1309":1,"1311":3,"1323":1,"1324":6,"1339":6,"1359":11,"1369":1,"1395":5,"1396":2,"1402":1,"1415":4,"1427":1,"1436":2,"1496":1,"1526":2,"1917":1,"2042":1,"2075":1,"2077":2,"2080":1,"2098":1,"2132":1,"2192":1,"2198":1}}],["duplicate→409",{"3":{"1611":1}}],["duplicatecode",{"3":{"1436":3}}],["duplicateticketerrors",{"3":{"1199":2,"1207":1,"1436":11}}],["duplicated",{"3":{"0":1,"61":1,"219":1,"255":1,"399":1,"400":1,"404":1,"463":1,"490":1,"534":1,"538":1,"558":1,"609":1,"819":1,"829":1,"834":1,"837":1,"839":1,"848":1,"899":1,"996":1,"1011":1,"1043":1,"1059":1,"1118":1,"1224":1,"1229":1,"1247":2,"1259":2,"1268":1,"1270":6,"1271":2,"1300":2,"1301":1,"1309":1,"1311":2,"1312":1,"1323":2,"1324":6,"1339":5,"1350":4,"1359":15,"1380":1,"1389":1,"1395":6,"1396":5,"1402":3,"1415":4,"1436":3,"1443":1,"1446":1,"1453":1,"1467":1,"1496":4,"1542":1,"1551":1,"1565":2,"1582":1,"1632":1,"1830":1,"1929":1,"2013":1,"2055":1,"2073":2,"2150":1,"2157":1,"2159":2,"2168":1}}],["duplicates",{"3":{"0":2,"159":3,"162":1,"549":1,"649":1,"811":1,"846":1,"891":2,"915":2,"988":1,"989":1,"995":1,"1140":1,"1237":1,"1240":1,"1258":1,"1259":2,"1270":1,"1271":2,"1286":2,"1300":3,"1311":5,"1323":3,"1324":2,"1338":1,"1339":2,"1350":3,"1359":3,"1369":1,"1394":1,"1395":5,"1396":1,"1402":2,"1415":1,"1417":1,"1436":1,"1454":1,"1496":6,"1526":1,"1577":1,"1631":5,"1639":1,"1765":1,"1840":1,"1845":1,"1870":1,"1909":6,"1910":1,"1911":2,"1912":4}}],["duplicate",{"3":{"0":8,"18":1,"24":3,"156":1,"157":2,"159":1,"195":3,"197":1,"198":1,"201":5,"295":1,"330":1,"465":2,"508":1,"518":1,"528":1,"529":1,"557":1,"558":1,"610":1,"688":1,"691":1,"692":2,"749":1,"790":1,"821":1,"834":1,"871":1,"890":1,"897":1,"905":1,"966":1,"988":1,"996":5,"998":1,"1018":1,"1020":1,"1022":1,"1043":1,"1099":1,"1100":1,"1142":1,"1147":1,"1212":2,"1229":1,"1231":1,"1237":1,"1247":6,"1251":1,"1254":1,"1258":2,"1259":14,"1265":1,"1269":1,"1270":8,"1271":1,"1284":1,"1286":19,"1288":1,"1289":1,"1290":1,"1297":1,"1300":11,"1309":5,"1310":1,"1311":14,"1312":2,"1317":1,"1323":10,"1324":14,"1328":1,"1339":8,"1343":2,"1347":1,"1350":15,"1359":47,"1367":1,"1369":2,"1376":1,"1380":7,"1389":1,"1395":7,"1396":26,"1402":6,"1415":2,"1417":2,"1431":1,"1436":17,"1438":5,"1441":1,"1454":1,"1467":2,"1472":1,"1473":1,"1488":1,"1496":16,"1535":1,"1547":2,"1566":1,"1577":1,"1631":3,"1632":2,"1640":1,"1661":1,"1665":1,"1666":1,"1749":1,"1765":2,"1767":1,"1769":1,"1774":2,"1832":1,"1840":2,"1845":1,"1846":1,"1889":1,"1890":1,"1905":1,"1907":1,"1909":4,"1910":1,"1911":2,"1912":3,"1947":1,"1988":1,"1991":1,"2000":1,"2162":1,"2165":1,"2166":1,"2182":1}}],["dumb",{"3":{"1350":1,"1395":1,"1555":1,"1577":1,"1586":1}}],["dumber",{"3":{"1324":1}}],["dummybearerauthority",{"3":{"1436":1}}],["dummy",{"3":{"946":1,"949":1,"1436":1,"1490":1}}],["dumped",{"3":{"1894":1}}],["dumping",{"3":{"1311":1,"1324":1,"1416":1,"1540":1}}],["dump",{"3":{"854":1,"904":1,"1244":1,"1294":1,"1300":2,"1324":1,"1396":1,"1577":1,"1985":1}}],["dueon",{"3":{"1323":1}}],["due",{"2":{"2191":1},"3":{"0":2,"539":2,"707":3,"709":1,"813":1,"1040":2,"1042":3,"1045":2,"1275":4,"1286":13,"1317":1,"1323":15,"1396":1,"1436":1,"1467":1,"1631":1,"1639":1,"1948":1,"2156":2,"2185":1,"2188":2,"2191":2,"2193":1}}],["durably",{"3":{"1251":1,"1402":3,"1415":1,"1436":1}}],["durable",{"0":{"1357":1,"1367":1},"1":{"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"2181":1,"2182":1,"2183":1,"2184":1,"2185":1,"2186":1,"2187":1,"2188":1,"2189":1,"2190":1,"2191":1,"2192":1,"2193":1},"3":{"0":12,"222":1,"223":1,"225":4,"229":1,"230":3,"379":1,"380":1,"382":1,"404":1,"406":1,"422":1,"433":1,"438":1,"440":1,"459":1,"466":1,"516":1,"517":1,"518":1,"521":1,"522":1,"523":1,"524":1,"536":1,"541":1,"706":2,"711":1,"809":1,"810":2,"813":1,"815":1,"856":1,"897":2,"898":1,"901":1,"933":1,"987":1,"988":3,"989":2,"990":1,"995":2,"996":2,"1000":1,"1018":1,"1022":1,"1024":1,"1030":1,"1044":2,"1074":1,"1075":2,"1076":1,"1099":1,"1100":2,"1102":1,"1104":1,"1116":1,"1120":1,"1142":1,"1152":1,"1154":1,"1192":1,"1212":4,"1247":1,"1259":1,"1272":1,"1274":1,"1278":1,"1286":13,"1300":2,"1302":1,"1304":1,"1309":10,"1323":7,"1324":5,"1350":1,"1352":1,"1357":2,"1359":7,"1360":1,"1369":1,"1376":1,"1380":8,"1390":1,"1396":1,"1397":2,"1398":1,"1400":1,"1402":3,"1408":1,"1410":1,"1411":2,"1415":11,"1417":2,"1438":2,"1455":1,"1476":1,"1496":2,"1512":2,"1631":1,"1665":1,"1675":1,"1735":1,"1779":2,"1789":1,"1790":1,"1800":1,"1837":1,"1840":5,"1842":1,"1843":1,"1861":2,"1910":2,"1912":1,"1932":1,"1933":3,"1935":2,"1937":1,"1940":2,"1941":2,"1942":3,"1943":3,"1944":1,"1947":3,"1948":2,"1949":4,"1950":7,"1981":1,"2006":1,"2020":1,"2081":1,"2091":1,"2127":1,"2156":1,"2165":3,"2168":1,"2169":1,"2180":2,"2181":2,"2183":1,"2190":1,"2192":1,"2193":2,"2203":1,"2206":2,"2232":3}}],["durability",{"3":{"0":1,"230":2,"444":1,"711":1,"933":1,"987":1,"1018":1,"1140":1,"1259":2,"1270":1,"1286":1,"1302":1,"1359":4,"1367":2,"1369":1,"1380":1,"1396":1,"1417":1,"1474":2,"1845":1,"1933":1,"2091":1}}],["durationmeasurement",{"3":{"1199":2,"1207":1,"1435":1}}],["durationms",{"3":{"609":1,"1467":1}}],["durationthreshold",{"3":{"861":1}}],["durations",{"3":{"731":1,"733":1,"1259":1,"1359":1}}],["durationhistogram",{"3":{"707":1,"1286":1,"1323":1}}],["duration",{"2":{"402":1,"407":3,"409":1,"1089":1,"1425":2,"1640":1,"2159":1,"2177":2,"2191":1},"3":{"0":6,"72":2,"100":1,"115":1,"125":2,"243":1,"395":4,"397":4,"398":1,"402":1,"404":1,"405":1,"407":5,"408":2,"409":1,"608":2,"609":1,"707":1,"709":2,"743":1,"856":1,"996":1,"1089":1,"1091":1,"1234":2,"1237":1,"1259":3,"1263":2,"1267":1,"1268":1,"1270":18,"1275":1,"1286":4,"1290":1,"1300":2,"1301":2,"1311":3,"1317":1,"1323":7,"1324":2,"1330":1,"1333":1,"1339":10,"1342":2,"1344":2,"1350":5,"1359":3,"1362":1,"1369":5,"1395":3,"1415":1,"1417":9,"1425":4,"1427":10,"1436":1,"1441":1,"1443":2,"1460":1,"1466":1,"1467":5,"1474":2,"1475":1,"1526":1,"1577":1,"1630":1,"1631":3,"1632":1,"1635":2,"1638":1,"1640":1,"1641":1,"1651":1,"1664":1,"1677":1,"1709":1,"1821":1,"1841":1,"1909":1,"1917":1,"1920":1,"1948":1,"2006":2,"2010":1,"2066":1,"2096":1,"2156":8,"2158":2,"2159":1,"2160":1,"2177":4,"2191":1,"2215":1,"2232":1}}],["during",{"3":{"0":2,"17":1,"19":1,"21":1,"71":1,"120":1,"159":1,"207":2,"235":1,"261":1,"267":1,"273":1,"293":1,"332":1,"383":1,"506":1,"507":1,"555":1,"556":1,"558":1,"560":1,"599":1,"649":1,"664":1,"733":2,"743":1,"749":1,"762":1,"768":1,"811":1,"819":1,"820":1,"827":1,"848":1,"881":1,"915":1,"954":1,"1152":1,"1154":1,"1233":1,"1237":5,"1259":3,"1265":1,"1270":2,"1271":1,"1274":1,"1286":12,"1288":2,"1298":1,"1300":8,"1309":1,"1311":2,"1312":2,"1323":4,"1324":32,"1338":1,"1339":8,"1347":1,"1350":7,"1359":8,"1367":1,"1380":1,"1391":1,"1393":1,"1395":7,"1396":10,"1402":9,"1408":1,"1415":5,"1416":4,"1417":13,"1427":2,"1432":1,"1433":1,"1436":9,"1438":2,"1441":2,"1443":1,"1455":1,"1456":1,"1467":1,"1468":1,"1475":2,"1482":1,"1488":2,"1534":1,"1582":1,"1630":6,"1631":6,"1632":3,"1633":1,"1634":1,"1636":1,"1637":1,"1638":7,"1639":7,"1641":1,"1700":1,"1708":1,"1755":1,"1912":1,"1968":1,"1972":1,"2009":1,"2016":1,"2030":1,"2076":1,"2085":1,"2119":1,"2135":1,"2165":1,"2232":1}}],["duality",{"3":{"1359":1}}],["dual",{"0":{"1508":1,"1896":1},"1":{"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1,"525":1,"526":1,"527":1,"528":1,"529":1,"530":1,"531":1,"532":1,"1248":1,"1249":1,"1250":1,"1251":1,"1252":1,"1253":1,"1254":1,"1255":1,"1256":1,"1257":1,"1258":1,"1259":1,"1893":1,"1894":1,"1895":1,"1896":1,"1897":1,"1898":1,"1899":1},"3":{"0":3,"14":1,"17":1,"20":1,"21":1,"22":1,"24":1,"26":1,"27":1,"64":1,"143":1,"209":1,"229":1,"297":1,"397":1,"498":1,"525":1,"532":1,"680":1,"874":1,"935":1,"942":1,"945":2,"984":1,"1004":1,"1008":1,"1043":1,"1192":2,"1202":2,"1203":2,"1212":3,"1213":1,"1237":3,"1247":3,"1248":1,"1259":5,"1270":3,"1286":1,"1287":1,"1289":1,"1300":3,"1311":2,"1312":1,"1324":1,"1345":1,"1350":1,"1359":1,"1369":1,"1395":1,"1396":1,"1402":1,"1415":2,"1436":4,"1443":2,"1450":1,"1455":1,"1467":2,"1496":2,"1508":1,"1543":1,"1548":1,"1571":2,"1574":1,"1576":1,"1577":2,"1585":1,"1586":1,"1591":1,"1835":2,"1838":1,"1842":1,"1846":2,"1892":1,"1893":1,"1896":4,"1898":1,"1899":2,"1972":1,"2014":1,"2181":1,"2208":1,"2221":1,"2230":1,"2232":2}}],["dbs",{"3":{"1473":4,"1496":1,"1526":1,"1535":1,"1566":1,"1570":1,"1590":1,"1591":3,"1596":1,"1599":1,"1678":1}}],["dbseedertests",{"3":{"1199":1,"1207":3,"1286":2}}],["dbseeder",{"2":{"295":1,"1364":1},"3":{"295":2,"1199":4,"1203":1,"1207":2,"1284":2,"1286":9,"1364":1,"1369":4,"1415":2}}],["dbsets",{"0":{"1363":1}}],["dbsetremovingfixture",{"3":{"1199":2,"1207":1,"1436":10}}],["dbset",{"2":{"544":1,"1360":1,"1700":1,"1719":1},"3":{"39":1,"544":1,"545":1,"1259":1,"1278":1,"1286":10,"1360":1,"1363":4,"1369":16,"1396":6,"1415":1,"1436":17,"1496":1,"1651":1,"1685":1,"1686":2,"1697":1,"1700":1,"1719":1,"1844":1}}],["dbname",{"3":{"1436":1}}],["dbconnectionstringbuilder",{"3":{"1286":1}}],["dbcontextattribute",{"3":{"1323":1}}],["dbcontextarg",{"3":{"1286":2}}],["dbcontextoptionsbuilder",{"3":{"1436":3}}],["dbcontextoptions",{"2":{"1369":1},"3":{"1286":3,"1369":4,"1396":2,"1415":1}}],["dbcontexts",{"2":{"1286":1,"1500":1},"3":{"26":2,"71":1,"166":2,"171":1,"200":2,"203":1,"295":2,"310":3,"314":1,"341":1,"343":1,"470":1,"536":2,"540":1,"674":1,"697":1,"698":5,"700":1,"702":2,"703":4,"707":2,"710":1,"715":2,"798":1,"819":2,"888":1,"889":1,"905":2,"931":1,"946":1,"987":2,"988":2,"1034":6,"1042":4,"1050":1,"1059":1,"1061":1,"1083":1,"1133":1,"1140":3,"1146":1,"1150":1,"1175":4,"1203":26,"1207":164,"1208":1,"1212":1,"1232":1,"1237":3,"1251":1,"1259":2,"1263":1,"1273":6,"1278":2,"1282":1,"1284":2,"1286":112,"1300":6,"1311":1,"1318":1,"1323":1,"1350":1,"1359":2,"1363":2,"1364":1,"1369":11,"1396":8,"1404":1,"1412":1,"1415":7,"1438":5,"1496":3,"1500":1,"1577":2,"2064":1}}],["dbcontextfactorytests",{"3":{"1199":1,"1207":2}}],["dbcontextfactorytenanttests",{"3":{"1199":1,"1207":3,"1323":1}}],["dbcontextfactorytransactiontests",{"3":{"988":1,"1199":1,"1207":6,"1286":1,"1438":1}}],["dbcontextfactorysaveintegritytests",{"3":{"1199":1,"1207":6,"1286":2,"1438":2}}],["dbcontextfactorymigrationtargettests",{"3":{"1199":1,"1207":4,"1286":2,"1323":2,"1438":2}}],["dbcontextfactoryadditionaltests",{"3":{"1199":1,"1207":4}}],["dbcontextfactorycommitambiguitytests",{"3":{"988":1,"1199":1,"1207":8,"1286":4,"1438":2,"1496":1}}],["dbcontextfactory",{"2":{"46":1,"71":1,"120":1,"170":1,"700":1,"987":1,"991":1,"1133":1,"1135":1,"1253":1,"1321":1,"1840":1,"1851":1,"1852":1},"3":{"0":1,"26":1,"46":1,"71":1,"120":1,"170":1,"536":1,"538":1,"540":2,"698":3,"700":2,"702":1,"703":1,"819":2,"822":1,"987":2,"988":7,"990":2,"991":2,"1133":2,"1135":1,"1136":1,"1175":3,"1199":13,"1203":1,"1207":2,"1252":1,"1253":2,"1259":2,"1263":6,"1270":9,"1274":2,"1278":6,"1280":2,"1286":125,"1300":4,"1318":1,"1321":1,"1323":6,"1359":4,"1436":4,"1437":1,"1438":3,"1453":1,"1486":1,"1487":1,"1490":1,"1496":3,"1577":2,"1840":2,"1849":1,"1851":1,"1852":1}}],["dbcontext",{"0":{"1652":1},"2":{"21":1,"39":1,"365":1,"875":1,"1033":1,"1083":1,"1251":1,"1319":1,"1360":1,"1540":1,"1847":1,"1857":1},"3":{"0":1,"21":1,"39":1,"47":1,"48":1,"59":1,"122":1,"359":1,"365":1,"574":1,"707":1,"875":1,"1033":1,"1083":1,"1192":1,"1201":1,"1202":1,"1203":1,"1212":1,"1213":1,"1237":1,"1251":1,"1259":1,"1263":1,"1265":1,"1270":3,"1271":1,"1273":1,"1278":1,"1286":42,"1290":1,"1300":1,"1310":1,"1319":1,"1322":1,"1323":6,"1337":1,"1339":1,"1350":1,"1352":1,"1359":5,"1360":1,"1363":1,"1369":1,"1396":6,"1415":3,"1436":11,"1437":1,"1438":1,"1447":1,"1467":2,"1497":1,"1540":1,"1650":1,"1651":1,"1653":1,"1656":1,"1658":1,"1700":1,"1847":1,"1857":1,"2023":1,"2099":1,"2142":1}}],["dba",{"3":{"0":1,"1082":1,"1246":1,"2141":1,"2220":1}}],["dbo",{"2":{"719":1,"1446":1,"1469":1,"1473":1},"3":{"0":2,"719":3,"1259":2,"1286":16,"1300":1,"1323":1,"1369":1,"1415":1,"1436":4,"1438":2,"1446":1,"1467":3,"1469":1,"1473":2,"1577":1,"1684":1}}],["dbupdateconcurrencyexception",{"2":{"341":1,"343":1,"344":1,"345":1,"388":1,"393":1,"536":1,"1379":1,"1872":1,"1873":1,"1874":1,"2164":1,"2167":1},"3":{"341":2,"343":1,"344":1,"345":1,"388":1,"393":1,"536":2,"1237":2,"1286":7,"1311":3,"1359":2,"1379":1,"1872":1,"1873":1,"1874":1,"2164":1,"2167":1}}],["dbupdateexception",{"2":{"201":1,"342":1,"343":1,"345":1,"1311":1,"1873":1,"1876":1,"1934":1},"3":{"109":1,"195":1,"201":1,"342":1,"343":1,"345":1,"1259":3,"1286":4,"1289":1,"1300":1,"1309":1,"1311":5,"1359":2,"1369":2,"1396":1,"1873":2,"1876":1,"1934":1}}],["dbupdateexceptionhandler",{"2":{"125":1,"342":1,"343":1,"345":1,"1873":1,"1927":1},"3":{"0":1,"109":2,"125":2,"342":2,"343":2,"345":1,"407":1,"1199":4,"1203":1,"1207":2,"1311":13,"1774":1,"1873":1,"1927":1}}],["dbupdate",{"2":{"1806":1},"3":{"0":1,"1311":2,"1753":1,"1806":1}}],["db",{"1":{"695":1,"696":1,"697":1,"698":1,"699":1,"700":1,"701":1,"702":1,"703":1},"2":{"1477":1,"1589":1,"1597":1,"1719":1},"3":{"0":9,"10":2,"12":1,"18":1,"48":1,"68":1,"93":1,"94":1,"109":1,"117":1,"164":1,"265":2,"273":1,"318":1,"350":1,"545":1,"590":1,"593":1,"695":1,"698":1,"699":1,"700":1,"1033":1,"1133":1,"1134":1,"1175":1,"1212":8,"1237":1,"1247":3,"1274":1,"1279":1,"1286":8,"1323":2,"1326":1,"1339":1,"1350":1,"1359":1,"1380":2,"1415":2,"1436":1,"1438":4,"1441":1,"1446":1,"1455":1,"1456":1,"1467":6,"1469":1,"1471":1,"1473":1,"1474":6,"1475":3,"1476":1,"1477":3,"1478":5,"1482":1,"1490":2,"1491":1,"1494":1,"1525":1,"1526":3,"1534":3,"1543":1,"1544":1,"1549":1,"1577":1,"1589":1,"1591":1,"1596":1,"1597":1,"1599":2,"1600":2,"1611":2,"1614":1,"1618":1,"1651":1,"1652":1,"1653":2,"1654":1,"1657":2,"1666":1,"1677":1,"1700":1,"1707":1,"1709":1,"1710":1,"1719":1,"1752":1,"1753":1,"1763":1,"1774":1,"1775":1,"1815":1,"1854":2,"1855":1,"1856":1,"2008":1,"2033":1,"2034":3,"2036":1,"2096":1,"2213":1,"2219":2,"2220":1,"2230":1,"2232":2}}],["diluted",{"3":{"2058":1}}],["dilutes",{"3":{"1492":1}}],["dichotomy",{"3":{"1955":1}}],["dictating",{"3":{"1417":1}}],["dictations",{"3":{"1417":1}}],["dictation",{"3":{"1402":10,"1417":5}}],["dictated",{"3":{"1323":2,"1416":1}}],["dictates",{"3":{"1300":1,"1339":1}}],["dictionaries",{"3":{"1286":1,"1300":1,"1311":1,"1324":1,"1385":1,"1395":5,"1415":1,"1436":2}}],["dictionary",{"2":{"1882":1},"3":{"0":2,"109":2,"111":1,"157":1,"201":2,"243":1,"248":2,"330":1,"341":1,"359":1,"365":1,"583":2,"585":1,"674":1,"741":1,"881":1,"990":1,"1050":4,"1175":1,"1178":2,"1229":1,"1231":1,"1237":4,"1241":3,"1242":1,"1243":1,"1247":9,"1259":2,"1270":11,"1279":2,"1280":1,"1286":30,"1300":14,"1307":1,"1309":6,"1310":2,"1311":10,"1315":1,"1320":3,"1323":12,"1324":30,"1339":6,"1350":1,"1359":33,"1380":6,"1387":1,"1395":58,"1396":23,"1402":4,"1415":4,"1417":4,"1436":11,"1438":1,"1632":2,"1640":1,"1651":1,"1805":1,"1810":1,"1874":1,"1882":1,"1912":1,"1927":1,"1988":2,"1991":1,"2076":1,"2142":1,"2143":1}}],["dip",{"3":{"1311":3,"1323":3,"1396":1,"1436":2,"1526":1,"1538":2,"1577":2,"1582":1,"1584":1}}],["dirties",{"3":{"1455":2,"1651":1}}],["dirtied",{"3":{"1286":1}}],["dirtying",{"3":{"1455":1}}],["dirty",{"3":{"1265":1,"1270":1,"1286":1,"1324":5,"1384":2,"1395":13,"1396":1,"1436":1,"1445":1,"1450":1,"1455":4,"1461":1,"1489":1,"1496":1,"1526":1,"1561":3,"1572":1,"1573":1,"1577":1,"1586":1,"1591":2,"1596":1,"1871":1,"2045":1}}],["dir",{"2":{"861":1,"863":1,"1456":1,"1492":1},"3":{"861":2,"863":1,"1433":1,"1436":2,"1456":1,"1492":1,"1591":1}}],["directreadsofeitherclocktype",{"3":{"1436":2}}],["directed",{"3":{"1431":1,"1436":3,"1441":1,"1489":1,"1769":1,"2009":1}}],["directsave",{"3":{"1436":1}}],["directsavinghandler",{"3":{"1199":2,"1207":1,"1436":5}}],["directs",{"3":{"31":1,"359":1,"545":1,"605":1,"782":1,"1300":1}}],["directories",{"3":{"0":2,"141":1,"1005":1,"1133":1,"1135":1,"1352":1,"1436":4}}],["directory",{"2":{"53":1,"141":1,"145":1,"146":1,"147":1,"149":1,"152":1,"369":1,"370":2,"371":1,"373":1,"452":1,"468":1,"470":1,"478":1,"526":1,"528":1,"631":1,"632":3,"707":1,"733":1,"869":1,"939":1,"979":1,"980":1,"981":1,"983":1,"984":1,"1069":1,"1074":1,"1076":1,"1214":1,"1445":1,"1453":1,"1454":2,"1455":1,"1459":1,"1460":1,"1464":1,"1477":1,"1491":1,"1648":1,"1649":2,"1655":1,"1656":1,"1684":1,"1685":1,"1700":1,"1703":1,"1728":1,"1738":1,"2017":1,"2041":1,"2042":1,"2087":1,"2097":1,"2112":1},"3":{"0":6,"53":1,"135":5,"138":2,"139":1,"140":1,"141":1,"142":3,"145":2,"146":1,"147":7,"149":1,"150":2,"152":5,"268":1,"369":1,"370":8,"371":2,"373":1,"375":1,"413":1,"451":1,"452":7,"468":2,"470":4,"478":3,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"526":2,"528":1,"545":1,"564":1,"578":3,"591":1,"599":2,"618":1,"621":1,"631":1,"632":5,"665":3,"669":1,"682":1,"685":1,"707":1,"733":1,"810":1,"814":1,"825":4,"861":3,"864":1,"869":1,"881":1,"913":3,"939":1,"954":3,"956":4,"958":4,"959":3,"972":3,"979":5,"980":7,"981":3,"982":1,"983":1,"984":1,"990":1,"1004":1,"1069":2,"1070":1,"1074":4,"1075":1,"1076":1,"1078":4,"1091":3,"1212":1,"1213":4,"1214":2,"1270":1,"1286":1,"1309":1,"1311":1,"1312":3,"1324":2,"1350":2,"1359":2,"1380":1,"1395":2,"1396":1,"1417":11,"1427":2,"1431":1,"1433":1,"1436":43,"1445":1,"1453":3,"1454":7,"1455":4,"1456":4,"1458":1,"1459":3,"1460":1,"1464":3,"1466":1,"1467":2,"1477":2,"1479":2,"1486":1,"1488":1,"1489":2,"1490":2,"1491":1,"1496":9,"1515":1,"1523":1,"1526":5,"1527":1,"1535":3,"1576":2,"1577":6,"1586":3,"1591":8,"1596":1,"1600":3,"1648":1,"1649":3,"1655":1,"1656":3,"1684":1,"1685":1,"1686":1,"1700":1,"1703":1,"1726":1,"1728":1,"1738":1,"1810":1,"2017":1,"2041":1,"2042":1,"2047":1,"2053":1,"2087":1,"2097":1,"2112":1,"2220":1}}],["directionalprefixes",{"3":{"1436":1}}],["directional",{"3":{"91":1,"97":1,"98":1,"100":1,"972":1,"974":1,"975":3,"1436":5,"1620":1,"1756":1,"2025":2}}],["direction",{"0":{"1322":1},"3":{"0":2,"141":1,"193":2,"335":1,"401":1,"402":1,"404":1,"486":1,"520":1,"566":1,"691":2,"743":1,"776":2,"813":1,"931":1,"932":1,"1004":1,"1059":1,"1091":2,"1093":1,"1123":1,"1124":1,"1212":1,"1225":1,"1229":1,"1243":1,"1244":1,"1247":3,"1250":1,"1265":1,"1270":2,"1283":1,"1286":8,"1300":2,"1301":4,"1309":1,"1310":2,"1311":2,"1312":1,"1323":1,"1324":9,"1339":1,"1341":2,"1350":2,"1355":2,"1359":34,"1369":1,"1384":1,"1395":5,"1396":7,"1402":2,"1415":5,"1416":3,"1417":2,"1422":1,"1436":17,"1443":1,"1448":1,"1467":1,"1476":3,"1489":1,"1505":1,"1517":1,"1526":1,"1534":1,"1592":1,"1842":1,"1933":1,"2000":1,"2001":1,"2022":1,"2043":1,"2046":1,"2148":2,"2181":1,"2192":1,"2199":1,"2203":1}}],["directions",{"3":{"0":2,"24":1,"170":1,"180":1,"201":1,"235":1,"359":2,"608":1,"627":1,"718":1,"766":1,"838":1,"861":1,"890":1,"931":1,"946":1,"972":1,"997":1,"1091":1,"1134":1,"1211":1,"1212":1,"1233":1,"1257":1,"1286":2,"1300":1,"1311":1,"1312":1,"1323":2,"1324":4,"1350":1,"1359":3,"1391":1,"1392":1,"1395":4,"1396":3,"1402":1,"1415":2,"1417":2,"1421":1,"1431":2,"1435":1,"1436":10,"1438":2,"1453":1,"1455":4,"1465":1,"1467":1,"1476":1,"1481":1,"1489":1,"1492":2,"1577":1,"1663":1,"1670":1,"1799":1,"1854":1,"1910":1,"1957":2,"1981":1,"2000":1,"2024":1,"2044":2,"2045":2,"2046":1,"2049":1,"2142":2,"2182":1}}],["directives",{"3":{"212":1,"214":2,"219":1,"1059":1,"1062":1,"1286":5,"1311":1,"1323":1,"1324":4,"1336":1,"1339":2,"1350":1,"1359":1,"1396":2,"1415":3,"1416":1,"1443":1,"1577":1,"1591":1,"1653":1,"1689":1,"2149":2,"2150":2}}],["directive",{"3":{"0":1,"214":2,"215":1,"219":2,"676":1,"938":1,"1057":1,"1059":1,"1324":13,"1339":2,"1395":5,"1396":1,"1402":1,"1415":2,"1577":1,"1699":1,"1727":1,"2150":3,"2153":2,"2232":1}}],["directapitokenrefreshertests",{"3":{"1199":1,"1207":3,"1324":4}}],["directapitokenrefresher",{"2":{"507":1,"510":1,"511":1,"513":1,"514":1},"3":{"0":1,"507":8,"510":1,"511":1,"513":3,"514":3,"1199":4,"1203":1,"1207":2,"1300":1,"1324":13,"1416":3}}],["directly",{"3":{"0":6,"15":1,"31":2,"59":2,"63":1,"81":1,"94":1,"96":1,"97":1,"98":1,"100":1,"117":1,"166":1,"186":1,"206":1,"230":1,"235":1,"237":2,"241":1,"247":1,"280":1,"281":1,"304":1,"326":1,"341":1,"370":1,"390":1,"418":1,"428":1,"439":1,"497":1,"507":1,"523":1,"535":1,"536":1,"556":1,"566":1,"572":1,"576":1,"583":1,"599":1,"618":1,"649":1,"651":1,"672":1,"674":4,"698":1,"700":1,"703":1,"707":1,"733":1,"751":2,"758":1,"767":1,"782":2,"831":1,"861":1,"881":5,"905":1,"912":1,"921":1,"924":1,"953":1,"954":3,"956":1,"960":1,"964":1,"979":1,"987":1,"988":1,"1004":2,"1019":1,"1054":1,"1066":1,"1068":1,"1100":1,"1107":1,"1110":1,"1116":1,"1129":1,"1134":1,"1168":1,"1170":1,"1184":1,"1211":1,"1212":1,"1214":2,"1221":1,"1229":4,"1237":5,"1246":1,"1247":13,"1248":1,"1259":17,"1263":1,"1269":1,"1270":11,"1271":5,"1273":1,"1274":1,"1278":1,"1279":2,"1286":68,"1293":1,"1297":1,"1300":39,"1301":6,"1309":10,"1310":2,"1311":22,"1312":4,"1320":2,"1323":26,"1324":37,"1325":1,"1330":1,"1339":22,"1350":27,"1351":1,"1353":1,"1355":1,"1356":1,"1359":87,"1362":1,"1369":11,"1374":1,"1380":12,"1383":1,"1384":1,"1395":23,"1396":26,"1399":1,"1400":1,"1402":6,"1408":1,"1415":20,"1416":5,"1417":20,"1427":2,"1430":1,"1432":1,"1434":1,"1436":112,"1437":1,"1438":7,"1441":3,"1443":1,"1445":2,"1446":2,"1447":1,"1449":1,"1453":1,"1454":2,"1455":3,"1456":1,"1457":3,"1460":3,"1464":1,"1465":1,"1466":1,"1467":3,"1472":1,"1473":1,"1475":1,"1479":1,"1480":1,"1486":2,"1488":1,"1490":1,"1491":2,"1492":1,"1496":4,"1501":1,"1526":1,"1527":1,"1534":1,"1540":1,"1541":1,"1546":1,"1547":1,"1578":1,"1592":1,"1596":1,"1631":2,"1641":1,"1648":1,"1651":1,"1653":1,"1656":1,"1666":1,"1671":1,"1685":1,"1686":1,"1698":1,"1701":1,"1702":1,"1730":1,"1749":2,"1765":1,"1766":1,"1772":1,"1783":1,"1789":1,"1790":2,"1804":1,"1808":1,"1815":1,"1816":1,"1821":1,"1842":1,"1844":1,"1857":1,"1863":1,"1874":1,"1890":1,"1915":1,"1920":1,"1923":1,"1946":1,"1954":1,"1962":1,"1992":1,"1995":1,"2000":1,"2001":1,"2023":1,"2025":1,"2030":1,"2041":1,"2043":1,"2056":1,"2069":1,"2071":1,"2074":1,"2076":1,"2087":1,"2091":1,"2126":1,"2155":1,"2156":1,"2165":1,"2167":1,"2232":1,"2239":1}}],["direct",{"3":{"0":9,"27":1,"33":1,"39":1,"41":1,"91":2,"93":3,"98":2,"100":1,"104":1,"137":1,"140":1,"150":1,"230":2,"245":1,"260":1,"330":1,"370":1,"506":1,"507":1,"509":1,"665":1,"698":1,"700":1,"884":1,"913":1,"931":1,"954":1,"956":1,"958":2,"981":1,"986":1,"988":2,"1004":2,"1005":1,"1036":1,"1125":1,"1161":1,"1212":1,"1229":3,"1237":1,"1243":1,"1247":1,"1259":3,"1268":1,"1271":3,"1273":1,"1286":9,"1300":2,"1301":2,"1309":4,"1311":2,"1323":3,"1324":9,"1339":3,"1344":1,"1349":1,"1350":3,"1353":1,"1355":1,"1359":16,"1364":1,"1369":3,"1380":1,"1396":3,"1415":2,"1417":1,"1431":1,"1436":38,"1438":1,"1441":1,"1453":1,"1467":1,"1488":1,"1489":2,"1491":1,"1496":1,"1504":1,"1544":1,"1555":1,"1567":1,"1577":1,"1611":1,"1632":1,"1634":2,"1638":1,"1639":1,"1662":1,"1671":2,"1750":1,"1773":1,"1789":1,"1790":1,"1910":1,"1920":1,"1988":1,"1993":1,"2015":1,"2032":1,"2035":1,"2041":2,"2048":1,"2061":1,"2064":1,"2079":1,"2136":1,"2240":1}}],["dim",{"3":{"691":1}}],["dimensional",{"3":{"1417":2,"1795":1}}],["dimensions",{"3":{"442":1,"766":1,"768":1,"1270":1,"1323":3,"1359":2,"1369":1,"1425":2,"1427":4,"1474":1,"1599":1,"1795":2,"2048":1,"2128":1,"2177":3,"2180":1}}],["dimension",{"3":{"438":1,"442":1,"740":1,"1093":1,"1270":3,"1286":1,"1323":1,"1350":1,"1359":2,"1396":1,"1436":1,"1467":2,"1479":1,"1637":1,"1638":1,"1987":1}}],["dietary",{"3":{"1350":3}}],["die",{"3":{"1270":1,"1311":1,"1323":1,"1455":1,"2003":1,"2070":1}}],["died",{"3":{"565":1,"1300":1,"1323":2,"1402":1,"1410":1,"1415":1,"1436":2,"1441":1,"1729":1,"1909":1}}],["dies",{"3":{"20":1,"707":1,"855":1,"996":2,"1044":1,"1115":1,"1255":1,"1259":1,"1270":2,"1275":1,"1301":1,"1318":1,"1323":5,"1359":4,"1369":1,"1396":1,"1417":1,"1670":1,"1765":1,"1841":1,"2045":1,"2181":1,"2189":1,"2192":1}}],["div",{"2":{"1558":1,"1643":1},"3":{"1324":1,"1396":1,"1417":1,"1558":2}}],["dives",{"0":{"2215":1},"3":{"2204":1,"2226":1,"2236":1,"2245":1}}],["diverted",{"3":{"1438":1,"1496":1}}],["diversity3",{"3":{"1395":1}}],["diverging",{"3":{"785":1,"1311":1,"1395":1}}],["diverged",{"3":{"837":1,"1324":1,"1339":1,"1459":1,"2070":1,"2080":1}}],["divergent",{"3":{"511":1,"642":1,"1286":1,"1301":1,"1402":1,"1416":1,"1569":2}}],["divergence",{"3":{"0":1,"216":1,"290":1,"342":1,"484":1,"549":1,"585":1,"831":1,"840":2,"1042":2,"1044":1,"1270":2,"1286":1,"1323":3,"1324":1,"1327":1,"1339":2,"1359":1,"1396":1,"1415":1,"1436":1,"1438":1,"2152":1,"2188":1,"2192":1}}],["divergences",{"3":{"0":1,"912":1,"1415":1}}],["diverges",{"3":{"325":1,"665":1,"707":1,"766":1,"1116":1,"1323":1,"1324":1,"1436":2,"1455":2,"1528":1,"1570":1,"1579":1}}],["diverge",{"3":{"0":1,"290":1,"609":1,"640":1,"698":1,"766":1,"1034":1,"1058":1,"1270":2,"1271":1,"1286":1,"1324":3,"1350":1,"1359":7,"1379":1,"1395":2,"1396":2,"1415":1,"1436":1,"1440":1,"1454":1,"1467":1,"1838":1,"1923":1,"2043":1,"2113":1,"2193":1}}],["dive",{"0":{"2235":1,"2237":1},"3":{"1194":1,"1359":1,"1779":45,"1783":1,"1790":1,"1821":1,"1828":1,"1914":1,"1920":1,"1935":1,"2030":2,"2160":1,"2232":1}}],["diving",{"3":{"1463":1}}],["dividing",{"3":{"1350":1,"1359":1,"1800":2}}],["divide",{"3":{"1396":1,"1436":1,"1467":1}}],["dividers",{"3":{"1324":1}}],["divider",{"3":{"1324":5}}],["divided",{"3":{"1300":1,"1311":1,"1359":1,"1798":1}}],["divides",{"3":{"591":1,"1311":2,"1359":1,"2047":1}}],["division",{"3":{"423":1,"426":1,"628":1,"1090":1,"1229":1,"1257":1,"1259":2,"1286":3,"1300":2,"1323":1,"1324":1,"1339":1,"1345":1,"1359":1,"1369":1,"1380":1,"1395":4,"1396":1,"1402":2,"1406":1,"1415":2,"1436":1,"1934":1,"2068":1,"2113":1}}],["diamond",{"3":{"1247":1,"1270":1}}],["dialling",{"3":{"1402":1}}],["dialing",{"3":{"1400":1}}],["dialed",{"3":{"1309":1}}],["dialects",{"3":{"1176":1,"1396":1,"1925":1}}],["dialect",{"3":{"1175":4,"1176":2,"1178":1,"1280":3,"1286":9,"1359":1,"1928":2,"1986":1}}],["dials",{"3":{"1301":1,"1339":1,"1444":1}}],["dial",{"3":{"1286":1,"1301":1}}],["dialogs",{"3":{"649":1,"650":1,"1213":1,"1324":5,"1415":1,"1559":1,"1607":2,"1669":1,"1741":2}}],["dialog",{"2":{"1687":1},"3":{"265":1,"650":1,"907":1,"954":1,"955":1,"1324":15,"1395":9,"1396":1,"1402":2,"1417":2,"1432":2,"1436":9,"1488":1,"1496":1,"1558":1,"1607":1,"1608":1,"1669":2,"1671":1,"1687":2,"1741":1,"1742":2,"1750":1,"1760":2}}],["diagram",{"0":{"2040":1},"3":{"122":1,"1262":1,"1270":1,"1324":1,"1496":3,"1502":1,"1526":1,"1591":2,"1620":1,"1627":1,"1756":1,"1761":1,"1793":2,"1821":1,"2039":2,"2049":1,"2099":5,"2105":1,"2108":1,"2172":1}}],["diagrams",{"3":{"121":1,"1502":2,"1517":2,"1562":1,"1571":1,"1626":2,"1860":1,"2109":1}}],["diagnosability",{"3":{"1436":1}}],["diagnosable",{"3":{"0":1,"862":1,"1085":1,"1297":1,"1311":1,"1436":1,"1456":2}}],["diagnosing",{"3":{"1339":1}}],["diagnosis",{"3":{"20":1,"1259":1,"1286":1,"1324":1,"1339":1,"1415":1}}],["diagnosed",{"3":{"401":1,"1324":1,"1339":1,"1436":2}}],["diagnose",{"3":{"24":1,"390":1,"1324":1,"1467":1,"1665":1,"2056":1}}],["diagnostically",{"3":{"1311":1}}],["diagnostics",{"2":{"1229":1,"1270":1,"1324":1,"1339":1,"1415":1},"3":{"39":1,"135":2,"341":1,"395":1,"403":1,"483":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"633":1,"861":1,"863":1,"1229":1,"1247":1,"1259":6,"1270":7,"1286":4,"1300":4,"1311":6,"1323":4,"1324":4,"1333":1,"1339":11,"1359":2,"1396":2,"1402":1,"1415":1,"1417":2,"1427":5,"1436":5,"1456":2,"1490":1,"1640":1,"1670":1,"1958":1}}],["diagnostic",{"2":{"135":1,"490":1,"491":1,"492":1,"493":1,"1526":1},"3":{"0":1,"109":1,"135":2,"265":1,"403":2,"405":1,"406":1,"490":2,"491":2,"492":2,"493":2,"574":1,"633":1,"719":2,"1126":1,"1247":1,"1270":1,"1286":3,"1300":1,"1311":3,"1324":2,"1339":1,"1359":6,"1396":2,"1402":1,"1415":4,"1436":5,"1459":1,"1465":1,"1467":6,"1489":1,"1591":1,"1955":1,"2102":1}}],["digits",{"3":{"972":1,"1018":1,"1237":1,"1286":1,"1293":1,"1300":3,"1305":1,"1309":1,"1311":1,"1324":1,"1347":1,"1350":1,"1353":1,"1359":2,"1369":1,"1395":3,"1396":3,"1417":1,"1631":1,"2198":1}}],["digital",{"3":{"424":1,"426":1,"1311":4}}],["digit",{"3":{"235":1,"972":1,"974":1,"975":1,"1020":1,"1271":2,"1289":1,"1300":7,"1323":1,"1324":7,"1339":1,"1359":2,"1417":1,"1427":2,"1436":9,"1438":2,"1443":1,"1465":1,"1641":1,"1829":1}}],["digests",{"3":{"0":1,"877":1,"906":1,"1300":6,"1982":1,"2235":1,"2237":1}}],["digest",{"3":{"0":5,"373":1,"867":1,"868":1,"870":2,"872":1,"873":2,"876":1,"877":1,"905":4,"906":1,"907":1,"945":1,"946":6,"948":1,"1212":3,"1283":1,"1286":4,"1290":1,"1300":15,"1436":4,"1438":2,"1445":8,"1450":1,"1455":1,"1458":2,"1667":2,"1672":1,"1900":1,"1902":4,"1980":1,"1982":4,"1985":1}}],["didactic",{"3":{"635":1}}],["didn",{"3":{"60":1,"61":1,"1556":2}}],["did",{"3":{"0":1,"21":1,"24":2,"42":1,"96":1,"115":1,"126":1,"141":1,"149":1,"157":1,"158":1,"160":1,"175":1,"201":1,"202":1,"203":1,"230":1,"242":1,"243":1,"245":1,"249":2,"256":2,"258":1,"259":1,"260":1,"283":2,"322":1,"333":1,"335":1,"341":1,"342":1,"343":1,"350":1,"353":2,"363":1,"365":2,"374":1,"390":1,"402":1,"433":1,"475":1,"476":1,"477":1,"478":1,"486":2,"487":1,"488":2,"489":1,"490":2,"491":1,"492":1,"511":1,"517":1,"524":1,"536":1,"539":1,"549":1,"550":1,"551":1,"583":1,"586":1,"626":1,"628":1,"635":1,"638":1,"642":1,"648":1,"675":1,"681":1,"689":1,"700":1,"702":1,"709":2,"724":1,"725":1,"726":1,"733":1,"735":1,"740":1,"743":1,"789":1,"798":1,"812":1,"832":1,"867":1,"877":1,"889":1,"891":1,"905":1,"907":1,"908":1,"926":3,"938":1,"988":3,"1006":1,"1051":3,"1066":1,"1067":1,"1069":1,"1091":1,"1092":1,"1124":1,"1142":1,"1212":1,"1232":1,"1237":1,"1241":1,"1244":1,"1247":3,"1250":1,"1258":1,"1259":6,"1265":1,"1266":1,"1270":4,"1275":1,"1277":1,"1286":18,"1293":1,"1300":4,"1301":3,"1309":5,"1311":7,"1312":1,"1315":1,"1318":2,"1323":7,"1324":22,"1328":2,"1339":7,"1344":1,"1350":4,"1358":1,"1359":6,"1366":1,"1367":1,"1369":2,"1391":1,"1395":11,"1396":12,"1402":2,"1408":1,"1415":9,"1417":12,"1418":2,"1425":1,"1427":3,"1430":1,"1436":5,"1438":2,"1442":1,"1443":2,"1449":2,"1451":1,"1455":6,"1467":4,"1474":1,"1475":1,"1476":1,"1478":1,"1490":1,"1492":2,"1496":3,"1526":1,"1684":1,"1686":1,"1697":1,"1728":1,"1730":1,"1780":2,"1801":1,"1809":1,"1840":1,"1845":1,"1863":1,"1869":1,"1876":1,"1892":1,"1899":1,"1900":1,"1906":1,"1910":1,"1918":2,"1922":1,"1933":1,"1940":1,"1956":1,"1959":1,"1965":1,"1997":1,"2001":1,"2012":1,"2037":1,"2062":1,"2081":1,"2095":1,"2098":1,"2124":2,"2148":1,"2156":1,"2160":1,"2166":1,"2170":1,"2177":1,"2180":2,"2186":1,"2188":1,"2197":2,"2199":1}}],["di",{"0":{"1368":1,"1824":1,"2095":1},"1":{"977":1,"978":1,"979":1,"980":1,"981":1,"982":1,"983":1,"984":1},"3":{"0":6,"27":1,"119":1,"155":1,"157":2,"200":1,"241":1,"258":1,"341":1,"343":1,"359":1,"395":1,"401":3,"435":1,"483":1,"536":1,"550":1,"583":1,"632":1,"649":1,"651":1,"725":1,"797":1,"798":1,"802":1,"827":1,"920":1,"926":1,"977":1,"979":1,"980":3,"983":2,"997":1,"1042":1,"1051":1,"1059":2,"1175":1,"1176":1,"1178":2,"1192":3,"1202":2,"1203":2,"1212":2,"1213":1,"1214":1,"1237":1,"1244":1,"1247":3,"1254":1,"1257":1,"1259":10,"1265":2,"1269":1,"1270":16,"1271":1,"1273":1,"1274":1,"1275":2,"1280":2,"1283":1,"1284":1,"1286":36,"1294":1,"1300":13,"1301":3,"1302":1,"1309":21,"1310":4,"1311":28,"1312":2,"1313":1,"1314":1,"1315":1,"1316":1,"1323":13,"1324":31,"1332":1,"1333":1,"1339":9,"1350":5,"1352":1,"1355":2,"1357":1,"1359":29,"1360":1,"1368":1,"1369":4,"1370":1,"1380":8,"1395":7,"1396":22,"1399":1,"1402":9,"1411":1,"1413":1,"1415":21,"1416":7,"1417":19,"1418":1,"1421":1,"1422":1,"1427":6,"1429":1,"1431":1,"1436":24,"1437":1,"1438":7,"1488":1,"1489":1,"1496":2,"1513":1,"1526":1,"1538":1,"1540":1,"1577":1,"1582":1,"1585":2,"1591":1,"1638":1,"1650":3,"1651":3,"1653":2,"1656":1,"1658":1,"1661":1,"1665":1,"1668":1,"1701":1,"1730":1,"1748":1,"1765":1,"1791":1,"1826":2,"1827":2,"1830":1,"1874":1,"1881":1,"1886":1,"1908":1,"1909":1,"1915":1,"1948":1,"1956":1,"2016":1,"2074":1,"2085":1,"2095":1,"2098":3,"2115":1,"2142":1,"2163":2,"2169":1,"2180":1,"2188":1,"2198":1,"2202":2,"2232":2}}],["diffing",{"3":{"1436":1,"2079":1}}],["diffed",{"3":{"721":1,"767":1,"1311":1,"1415":1,"1930":1}}],["differed",{"3":{"724":1,"1438":1}}],["differences",{"3":{"0":2,"219":1,"454":1,"624":1,"629":1,"636":1,"769":1,"868":1,"1034":1,"1126":1,"1270":1,"1286":3,"1309":1,"1310":1,"1323":1,"1324":1,"1350":1,"1373":1,"1380":1,"1395":5,"1396":1,"1399":1,"1417":1,"1436":2,"1438":1,"1467":2}}],["difference",{"3":{"0":2,"24":1,"175":1,"218":1,"245":1,"266":1,"388":1,"425":1,"497":1,"499":1,"522":1,"539":1,"573":1,"577":1,"584":1,"592":1,"599":1,"603":1,"626":1,"633":2,"639":1,"641":2,"716":1,"723":1,"726":1,"800":1,"820":2,"825":1,"827":1,"831":1,"838":1,"839":1,"840":1,"996":1,"1034":1,"1040":1,"1051":1,"1052":1,"1099":1,"1132":1,"1150":1,"1212":1,"1229":1,"1237":2,"1247":3,"1257":1,"1259":1,"1263":1,"1270":3,"1271":1,"1286":6,"1300":4,"1301":1,"1307":1,"1309":1,"1311":2,"1323":2,"1324":8,"1339":3,"1342":1,"1350":7,"1359":31,"1362":1,"1369":2,"1380":4,"1383":1,"1395":6,"1396":12,"1402":3,"1415":6,"1416":2,"1417":4,"1436":19,"1455":1,"1459":1,"1467":1,"1489":1,"1497":1,"1537":1,"1631":1,"1685":1,"1727":1,"1728":1,"1782":1,"1817":1,"1824":1,"1861":1,"1879":1,"1926":1,"1930":1,"1943":2,"2007":1,"2039":1,"2080":1,"2105":1,"2110":1,"2119":1,"2133":1,"2174":1,"2184":1,"2187":1,"2196":1,"2200":2}}],["differentcurrencies",{"2":{"1585":1},"3":{"1585":2}}],["differentiation",{"3":{"1396":1}}],["differently",{"3":{"153":1,"160":1,"303":1,"341":1,"447":1,"520":1,"574":1,"603":1,"651":1,"819":1,"828":1,"829":1,"840":1,"854":1,"906":1,"924":1,"933":1,"996":1,"1060":1,"1117":1,"1124":1,"1174":1,"1176":1,"1247":1,"1259":1,"1286":4,"1300":8,"1301":3,"1311":1,"1323":4,"1324":6,"1339":2,"1343":1,"1350":2,"1359":5,"1369":1,"1380":1,"1396":1,"1402":1,"1415":1,"1435":1,"1436":7,"1455":1,"1727":1,"1730":1,"1748":1,"1819":1,"1874":1,"1909":1,"2068":1,"2130":1,"2198":1,"2228":1}}],["different",{"0":{"719":1,"1228":1,"1295":1,"1782":1},"3":{"0":11,"10":1,"24":1,"26":1,"68":1,"77":1,"91":1,"95":1,"97":1,"135":2,"136":1,"137":1,"147":1,"156":1,"157":1,"159":3,"161":1,"166":2,"177":1,"186":1,"195":1,"201":1,"202":1,"216":1,"217":1,"225":1,"227":1,"236":1,"242":3,"244":3,"248":1,"255":3,"256":1,"266":1,"274":1,"283":1,"299":1,"301":1,"317":2,"318":2,"320":1,"340":1,"350":1,"353":1,"359":2,"388":1,"390":1,"401":1,"447":2,"457":1,"465":1,"474":1,"483":1,"500":1,"506":2,"509":1,"528":1,"530":1,"537":1,"556":1,"574":1,"577":1,"608":1,"609":2,"617":2,"619":1,"626":1,"634":2,"639":1,"640":1,"650":1,"651":1,"666":2,"684":1,"689":1,"690":1,"692":1,"697":1,"698":1,"699":1,"702":1,"707":1,"713":1,"714":1,"715":1,"718":1,"726":2,"732":2,"733":1,"740":1,"741":2,"749":1,"758":1,"773":1,"774":1,"790":1,"791":1,"799":1,"809":1,"820":3,"821":1,"827":4,"829":4,"830":1,"832":2,"856":1,"869":1,"888":1,"890":1,"891":1,"899":1,"956":1,"957":1,"974":1,"980":2,"989":1,"995":2,"997":1,"1011":1,"1014":1,"1018":3,"1021":1,"1028":1,"1033":1,"1035":1,"1043":4,"1049":1,"1067":1,"1079":1,"1091":2,"1092":1,"1099":1,"1116":1,"1124":1,"1125":1,"1126":2,"1134":1,"1144":1,"1183":1,"1212":1,"1229":1,"1232":1,"1236":1,"1237":3,"1239":1,"1240":1,"1242":1,"1247":9,"1259":9,"1261":1,"1267":3,"1270":9,"1271":2,"1273":1,"1276":1,"1279":1,"1281":1,"1284":1,"1286":35,"1289":1,"1290":1,"1297":1,"1300":17,"1301":7,"1302":1,"1306":1,"1307":1,"1309":4,"1310":7,"1311":13,"1312":1,"1323":22,"1324":33,"1327":2,"1339":20,"1343":2,"1345":1,"1350":11,"1351":1,"1353":1,"1355":1,"1359":73,"1362":1,"1368":1,"1369":5,"1372":1,"1375":1,"1379":1,"1380":12,"1389":2,"1391":1,"1395":22,"1396":41,"1402":5,"1406":1,"1409":1,"1415":21,"1416":4,"1417":14,"1419":1,"1423":2,"1427":4,"1430":1,"1431":1,"1435":3,"1436":64,"1438":2,"1441":1,"1442":1,"1443":1,"1446":1,"1447":1,"1455":4,"1458":1,"1459":1,"1460":1,"1462":1,"1467":2,"1471":1,"1472":1,"1475":2,"1485":1,"1486":1,"1488":3,"1489":2,"1492":3,"1496":6,"1498":2,"1536":1,"1537":1,"1570":1,"1627":1,"1630":3,"1638":1,"1639":5,"1641":4,"1701":1,"1719":1,"1781":1,"1794":1,"1797":1,"1804":2,"1816":2,"1820":1,"1822":1,"1825":1,"1828":1,"1832":1,"1839":1,"1849":4,"1851":1,"1853":1,"1858":1,"1860":1,"1862":2,"1863":1,"1864":1,"1865":1,"1866":1,"1870":1,"1887":1,"1888":3,"1890":2,"1896":1,"1902":1,"1908":4,"1909":2,"1911":3,"1912":1,"1916":1,"1922":2,"1923":2,"1925":2,"1934":2,"1950":1,"1952":1,"1953":2,"1959":2,"1960":1,"1962":1,"1963":1,"1964":1,"1977":1,"1982":1,"1986":2,"1992":2,"1994":2,"1995":2,"1997":1,"1999":3,"2000":2,"2001":2,"2024":1,"2033":1,"2036":1,"2037":1,"2041":2,"2042":1,"2043":2,"2047":1,"2063":1,"2069":2,"2070":1,"2073":1,"2077":1,"2082":2,"2086":1,"2109":3,"2110":1,"2113":4,"2114":2,"2130":2,"2133":1,"2134":1,"2142":2,"2144":1,"2152":1,"2156":1,"2164":1,"2167":1,"2192":4,"2193":3,"2199":1}}],["differ",{"3":{"0":2,"32":1,"97":1,"202":1,"244":1,"282":1,"318":1,"359":1,"491":1,"558":2,"626":1,"633":1,"640":1,"641":1,"642":1,"667":1,"689":1,"691":1,"764":1,"766":1,"827":1,"828":1,"829":1,"831":1,"877":1,"889":1,"973":1,"980":1,"1035":1,"1042":1,"1058":1,"1116":1,"1124":1,"1127":1,"1132":1,"1175":1,"1212":1,"1229":1,"1247":3,"1249":1,"1263":1,"1270":2,"1271":1,"1280":1,"1286":5,"1300":1,"1301":1,"1309":2,"1311":4,"1323":6,"1324":4,"1339":5,"1350":1,"1359":6,"1369":1,"1392":1,"1395":7,"1396":5,"1402":1,"1406":1,"1415":2,"1416":1,"1417":5,"1436":20,"1447":1,"1466":1,"1467":3,"1489":1,"1496":2,"1667":1,"1686":1,"1712":1,"1861":1,"1947":1,"1999":1,"2078":1,"2188":1,"2230":1}}],["differs",{"3":{"0":1,"27":1,"30":1,"62":1,"91":1,"93":1,"126":1,"195":1,"452":1,"472":1,"585":1,"618":1,"640":1,"668":2,"698":1,"766":1,"783":1,"819":1,"828":2,"831":1,"916":1,"982":1,"1035":1,"1037":1,"1212":1,"1247":2,"1249":1,"1259":1,"1262":1,"1270":1,"1271":1,"1280":1,"1286":9,"1295":1,"1300":2,"1309":1,"1310":2,"1311":4,"1320":1,"1323":2,"1324":9,"1338":1,"1339":2,"1350":2,"1359":7,"1369":1,"1372":1,"1380":3,"1395":9,"1396":19,"1399":1,"1402":1,"1415":7,"1416":2,"1417":2,"1427":2,"1429":1,"1436":16,"1441":1,"1442":1,"1447":1,"1455":1,"1456":1,"1459":1,"1467":1,"1475":1,"1485":1,"1486":1,"1490":1,"1641":1,"1656":1,"1769":3,"1791":1,"1826":1,"1861":1,"1922":1,"1934":1,"1976":1,"1977":1,"1996":1,"2032":1,"2057":1,"2076":1,"2078":2,"2126":1}}],["differing",{"3":{"0":1,"1034":1,"1212":1,"1237":1,"1300":1,"1311":1,"1323":3,"1324":2,"1350":2,"1359":1,"1395":2,"1396":1,"1415":1,"1436":5,"1902":1}}],["diffable",{"3":{"610":1,"708":1}}],["diffs",{"3":{"0":1,"1212":2,"1237":1,"1274":1,"1286":2,"1300":1,"1431":1,"1436":1,"1438":2,"1455":1,"1492":1,"1534":1,"1577":1,"1663":1,"1929":2,"1930":2,"2044":1,"2045":1,"2059":1,"2079":1,"2232":1}}],["diff",{"2":{"452":1,"566":1},"3":{"0":6,"135":1,"160":1,"451":2,"452":1,"562":1,"564":2,"565":1,"566":7,"567":1,"572":1,"573":1,"592":1,"608":1,"619":1,"714":2,"715":2,"716":1,"750":1,"766":2,"838":1,"840":2,"863":1,"964":1,"972":1,"981":2,"982":2,"1005":1,"1019":2,"1020":1,"1177":1,"1178":1,"1270":1,"1286":5,"1300":2,"1323":1,"1359":1,"1380":1,"1396":1,"1427":1,"1436":16,"1445":1,"1453":2,"1455":12,"1459":1,"1463":3,"1486":2,"1492":3,"1496":5,"1524":3,"1526":1,"1530":1,"1531":4,"1532":1,"1546":1,"1577":2,"1586":1,"1591":1,"1661":1,"1673":1,"1684":1,"1729":1,"1825":1,"1839":1,"1876":1,"2043":1,"2047":1,"2158":1,"2195":1,"2200":1}}],["disguise",{"3":{"2128":1}}],["disguised",{"3":{"1395":1}}],["dissolves",{"3":{"1955":1}}],["dissolved",{"3":{"130":1,"135":1,"139":1,"1004":1,"1436":1,"1496":1}}],["dismissquestionasync",{"3":{"1402":1}}],["dismissasync",{"3":{"1396":2,"1402":1}}],["dismissals",{"3":{"1417":2}}],["dismissal",{"3":{"1324":1,"1399":1,"1402":3,"1417":1}}],["dismiss",{"3":{"1396":2,"1397":1,"1398":1,"1402":15,"1415":1,"1526":1}}],["dismisses",{"3":{"1324":1,"1632":1}}],["dismissed",{"3":{"1324":4,"1395":1,"1396":1,"1398":1,"1399":1,"1401":1,"1402":17,"1417":2,"1630":1,"1632":1}}],["dismissing",{"3":{"649":1,"1324":2,"1402":1,"1632":1}}],["disjunction",{"3":{"1324":1}}],["disjunctive",{"3":{"1247":1}}],["disjoint",{"3":{"0":2,"241":1,"247":1,"253":1,"731":1,"733":3,"734":1,"736":1,"737":1,"827":1,"1212":1,"1286":1,"1300":1,"1301":3,"1311":1,"1324":1,"1359":1,"1379":1,"1436":1,"1438":1,"1668":1,"1916":1,"2232":1}}],["disqualifies",{"3":{"1244":1}}],["disqualify",{"3":{"335":1,"336":1,"1244":2,"1247":3,"1270":1,"1309":1,"1310":1}}],["disqualifying",{"3":{"335":1,"1244":1,"1247":1}}],["disregard",{"3":{"1091":1,"1427":1}}],["disincentive",{"3":{"692":1}}],["disk",{"3":{"401":1,"451":1,"1124":1,"1163":1,"1300":1,"1324":1,"1339":1,"1369":1,"1416":2,"1417":1,"1427":1,"1435":1,"1436":12,"1453":1,"1459":1,"1468":1,"1486":1,"1496":2,"2140":2,"2144":1,"2146":1}}],["disabilities",{"3":{"1629":1}}],["disabling",{"0":{"1882":1},"3":{"0":1,"557":1,"1259":1,"1286":1,"1300":5,"1311":2,"1323":2,"1339":2,"1396":1,"1433":1,"1436":1,"1465":1,"1467":1,"1490":1,"1724":1}}],["disableforunsafehttpmethods",{"3":{"1339":2}}],["disablefor",{"3":{"1339":3}}],["disablement",{"3":{"1323":1,"2166":1}}],["disableantiforgery",{"3":{"1300":1,"1324":2}}],["disableasync",{"3":{"1293":1,"1300":1,"1323":2}}],["disableaspnetcoremetrics=true",{"3":{"1443":1,"1446":1}}],["disableaspnetcoremetrics",{"2":{"397":1},"3":{"0":1,"395":1,"397":2,"409":1,"1443":1,"1467":1,"1496":1}}],["disabletwofactorhandlerbase",{"2":{"1322":1,"2198":1},"3":{"1199":2,"1203":1,"1207":2,"1300":2,"1322":3,"1323":4,"1496":1,"2198":1}}],["disablelocalcacheread",{"3":{"733":2,"1301":1}}],["disablelocalcachewrite",{"2":{"733":1},"3":{"733":2,"1301":1}}],["disableunderlyingdata",{"2":{"733":1,"734":1,"1301":1},"3":{"733":1,"734":1,"1301":1}}],["disablehealthchecks",{"2":{"245":1,"1332":1},"3":{"245":1,"1332":1,"1339":4,"1442":1}}],["disablehttpclientmetrics=true",{"3":{"1443":1,"1446":1,"1677":1}}],["disablehttpclientmetrics",{"2":{"1476":1,"1668":1},"3":{"0":1,"395":1,"397":1,"407":1,"1333":1,"1339":1,"1443":1,"1467":1,"1476":1,"1577":1,"1668":1,"2010":1,"2156":1,"2160":1}}],["disable",{"2":{"1552":1,"1845":1},"3":{"0":2,"19":1,"39":1,"207":1,"259":1,"388":1,"600":1,"774":1,"789":1,"907":1,"1059":1,"1060":1,"1212":1,"1237":4,"1286":3,"1300":11,"1301":1,"1309":3,"1311":6,"1323":4,"1324":2,"1339":7,"1359":1,"1379":1,"1402":1,"1415":1,"1417":3,"1436":2,"1455":1,"1466":1,"1467":1,"1496":1,"1524":1,"1552":1,"1596":1,"1845":1,"1882":1,"1886":1,"1969":1,"2065":1,"2094":1,"2108":1,"2166":1,"2169":1,"2199":1,"2232":1}}],["disablescrolltracking",{"3":{"1324":1}}],["disables",{"3":{"0":1,"60":1,"236":1,"481":1,"583":1,"618":1,"620":1,"690":1,"827":1,"905":1,"917":1,"1109":1,"1211":1,"1256":1,"1259":1,"1300":1,"1301":1,"1309":1,"1311":1,"1314":1,"1323":3,"1324":4,"1339":3,"1395":1,"1402":4,"1415":1,"1436":1,"1454":1,"1455":1,"1467":3,"1488":1,"1591":1,"1631":1,"1639":1,"1878":1,"1885":1,"2057":1,"2203":1}}],["disableruntimemetrics=true",{"3":{"1443":1,"1446":1,"1677":1}}],["disableruntimemetrics",{"2":{"1476":1,"1668":1},"3":{"0":1,"395":1,"397":1,"1333":1,"1339":1,"1443":1,"1467":1,"1476":1,"1577":1,"1668":1,"2010":1,"2156":1,"2160":1}}],["disabledstubhook",{"3":{"1436":1}}],["disabledsessionbookmarkvalidationservice",{"2":{"583":1,"1314":1,"1349":1,"1377":1},"3":{"583":2,"585":1,"1199":2,"1203":1,"1207":2,"1314":1,"1349":3,"1350":11,"1377":1,"1380":3,"1415":1}}],["disabled=",{"3":{"1324":1}}],["disabledmodulenames",{"2":{"1315":1,"1882":1},"3":{"1315":1,"1323":2,"1882":1}}],["disabledfakeexportservice",{"3":{"1199":3,"1207":1,"1436":6}}],["disabledfeaturehandlertests",{"3":{"1199":1,"1207":2}}],["disabledfeaturehandler",{"2":{"306":1,"1928":1,"2137":1,"2139":1},"3":{"0":1,"300":2,"306":2,"1199":4,"1203":1,"1207":2,"1311":14,"1396":2,"1928":1,"2137":3,"2139":1}}],["disabledusernotificationexportservice",{"2":{"1308":1},"3":{"585":1,"1199":3,"1203":1,"1207":2,"1308":1,"1309":9,"1415":1,"1438":1}}],["disableduserengagementexportservice",{"3":{"585":1,"1199":2,"1203":1,"1207":2,"1396":9}}],["disabledusersalesexportservice",{"2":{"583":1},"3":{"583":2,"585":1}}],["disabledattendeequeryservicetests",{"3":{"1199":1,"1207":2,"1487":1}}],["disabledattendeequeryservice",{"2":{"586":1,"1412":1},"3":{"585":1,"586":1,"1199":3,"1203":1,"1207":2,"1350":1,"1412":2,"1415":9}}],["disabledbookmarkcountservicetests",{"3":{"1199":1,"1207":2,"1487":1}}],["disabledbookmarkcountservice",{"3":{"585":1,"1199":3,"1203":1,"1207":2,"1323":1,"1350":1,"1359":3,"1396":11,"1415":1}}],["disabledcustomerservice",{"3":{"583":2}}],["disabledproductvariantservice",{"2":{"583":1,"1751":1,"1772":1},"3":{"583":2,"1751":1,"1772":1}}],["disabledeventlivevalidationservicetests",{"3":{"1199":1,"1207":2,"1437":1}}],["disabledeventlivevalidationservice",{"2":{"583":1,"1314":1,"1349":1,"1377":1},"3":{"583":2,"585":1,"1199":3,"1203":1,"1207":2,"1314":1,"1349":3,"1350":19,"1359":1,"1377":1,"1380":3,"1496":1}}],["disabled",{"0":{"1412":1,"2137":1,"2196":1},"2":{"300":1,"306":1},"3":{"0":5,"15":1,"31":1,"53":3,"59":2,"63":2,"124":1,"299":1,"300":3,"301":1,"302":1,"304":2,"306":3,"397":1,"482":1,"556":1,"565":1,"582":2,"583":10,"584":1,"585":11,"587":2,"607":1,"725":1,"729":1,"789":1,"790":1,"792":1,"827":1,"914":1,"931":2,"932":1,"1018":2,"1060":1,"1093":1,"1212":2,"1257":1,"1258":1,"1259":3,"1263":3,"1270":11,"1284":1,"1286":8,"1288":1,"1300":2,"1308":1,"1309":11,"1311":22,"1312":2,"1313":1,"1314":3,"1315":3,"1318":1,"1320":2,"1323":20,"1324":6,"1339":5,"1341":2,"1349":2,"1350":12,"1359":3,"1366":1,"1369":3,"1378":1,"1380":5,"1391":1,"1395":10,"1396":23,"1398":1,"1402":5,"1412":1,"1413":1,"1415":5,"1417":1,"1420":1,"1421":1,"1427":2,"1431":1,"1436":13,"1437":1,"1438":1,"1455":1,"1459":1,"1465":1,"1467":2,"1469":1,"1470":1,"1472":1,"1474":1,"1487":3,"1488":1,"1489":1,"1504":1,"1508":1,"1526":2,"1535":1,"1551":1,"1552":1,"1561":2,"1577":1,"1626":2,"1653":1,"1661":1,"1662":2,"1666":3,"1671":1,"1720":1,"1751":1,"1770":1,"1772":1,"1790":2,"1821":1,"1842":1,"1882":6,"1884":1,"1886":1,"1896":1,"1928":2,"2019":2,"2051":1,"2094":1,"2113":1,"2134":1,"2135":1,"2136":3,"2137":2,"2138":1,"2139":4,"2156":1,"2166":1,"2173":1,"2180":2,"2196":1,"2203":1,"2232":2}}],["disallowed",{"3":{"1359":2,"1423":1,"2175":1}}],["disambiguated",{"3":{"1416":1}}],["disambiguates",{"3":{"1396":1}}],["disambiguate",{"3":{"1339":1,"1415":3,"1436":1}}],["disambiguation",{"3":{"1339":2,"1436":2,"1496":1}}],["disarmed",{"3":{"1300":1}}],["disarm",{"3":{"1300":2}}],["disarms",{"3":{"819":1,"905":1,"1300":2,"1843":1}}],["disappearance",{"3":{"1417":1}}],["disappears",{"3":{"818":1,"840":1,"1247":1,"1286":1,"1324":1,"1339":1,"1350":1,"1395":1,"1436":4,"1442":1,"1467":1,"1727":1,"1858":1,"1902":1,"1994":1,"2076":1}}],["disappear",{"3":{"303":1,"1247":1,"1309":1,"1367":1,"1433":1,"1436":1,"1438":1,"2193":1}}],["disappearing",{"3":{"137":1,"1417":1,"1436":1}}],["disappeared",{"3":{"135":1,"454":1,"1436":1,"1474":1,"1673":1}}],["disaster",{"0":{"1474":1},"3":{"68":1,"601":1,"602":1,"608":1,"609":1,"614":1,"971":1,"972":1,"1192":1,"1436":1,"1438":1,"1466":1,"1467":4,"1470":1,"1471":3,"1472":3,"1474":35,"1475":1,"1476":2,"1478":1,"1482":3,"1483":3,"1484":2,"1496":1,"1525":2,"1526":1,"1534":2,"1535":1,"1566":2,"1590":1,"1591":2,"1599":1,"1706":1,"1707":1,"1709":1,"1852":1,"2033":1,"2034":1,"2043":1}}],["disagreeing",{"3":{"940":1,"1270":1,"1309":1,"1324":2,"1348":1,"1916":1,"2011":1}}],["disagrees",{"3":{"890":1,"905":1,"1093":1,"1269":1,"1286":2,"1300":1,"1309":1,"1396":1,"1436":1,"1453":1,"1496":1,"1561":1,"2046":1}}],["disagree",{"3":{"0":1,"136":1,"530":1,"556":1,"617":1,"742":1,"811":1,"827":1,"889":1,"905":1,"926":1,"1026":1,"1034":1,"1079":1,"1142":1,"1178":1,"1190":1,"1241":1,"1247":2,"1251":1,"1270":2,"1271":3,"1281":1,"1286":7,"1288":1,"1300":10,"1309":1,"1311":2,"1312":1,"1322":1,"1323":2,"1324":4,"1350":2,"1352":1,"1359":13,"1366":1,"1369":1,"1372":1,"1395":3,"1396":5,"1402":6,"1409":1,"1415":5,"1417":1,"1436":7,"1438":1,"1488":1,"1648":1,"1695":1,"1722":1,"1729":1,"1767":1,"1924":1,"1962":1,"2024":1,"2073":1}}],["disagreed",{"3":{"0":1,"335":1,"837":1,"1323":1,"1339":1,"1359":1,"1415":1}}],["disagreement",{"3":{"0":1,"691":1,"1266":1,"1270":4,"1300":1,"1436":1,"1722":1,"1729":1}}],["disclaims",{"3":{"1591":1}}],["discloses",{"3":{"1247":1,"1641":1,"1765":1}}],["disclose",{"3":{"856":1,"1300":1}}],["disclosed",{"3":{"854":1,"1396":1}}],["disclosure",{"3":{"388":1,"1191":1,"1200":1,"1270":1,"1311":1,"1359":2,"1396":5,"1922":1}}],["discharges",{"3":{"1395":1}}],["discharge",{"3":{"1323":1}}],["discharged",{"3":{"0":1,"1010":2,"1395":1}}],["discussion",{"3":{"1350":1,"1359":1,"1467":1}}],["discuss",{"3":{"1311":1}}],["discussed",{"3":{"256":1,"1395":1}}],["discrete",{"3":{"1380":1}}],["discrepancy",{"3":{"1190":1}}],["discriminating",{"3":{"1436":2}}],["discrimination",{"3":{"100":1,"1436":13,"1631":1}}],["discriminate",{"3":{"1359":1}}],["discriminates",{"3":{"1270":2,"1436":3}}],["discriminated",{"3":{"920":1,"926":1,"1265":1,"1270":4,"1323":1,"1396":1,"1415":1,"1959":1}}],["discriminators",{"3":{"1350":1,"1369":1}}],["discriminator",{"1":{"779":1,"780":1,"781":1,"782":1,"783":1,"784":1,"785":1,"786":1},"3":{"0":3,"665":4,"667":2,"669":1,"697":1,"733":1,"779":1,"780":1,"782":10,"783":1,"784":1,"786":1,"923":1,"926":3,"963":1,"964":2,"968":1,"1212":2,"1233":1,"1237":2,"1270":1,"1286":2,"1301":1,"1309":1,"1336":1,"1339":1,"1350":7,"1355":1,"1359":5,"1369":1,"1395":1,"1396":16,"1398":1,"1402":2,"1769":1,"1970":1,"1972":1,"2232":2}}],["disciplines",{"3":{"1396":1}}],["disciplined",{"3":{"537":1,"1286":1,"1417":1,"1526":1,"2161":1}}],["discipline",{"0":{"1221":1,"1919":1},"1":{"2070":1,"2071":1,"2072":1,"2073":1,"2074":1,"2075":1,"2076":1,"2077":1,"2078":1,"2079":1,"2080":1},"3":{"0":1,"41":1,"69":1,"79":1,"80":1,"133":1,"135":1,"136":1,"148":1,"162":1,"196":1,"342":1,"346":1,"370":1,"376":1,"398":2,"414":1,"415":1,"449":1,"472":1,"537":1,"549":1,"565":1,"568":1,"592":1,"610":1,"620":1,"622":1,"658":1,"676":1,"700":1,"702":1,"729":1,"750":1,"801":1,"839":1,"842":1,"844":1,"845":2,"847":1,"863":1,"865":1,"882":1,"890":1,"955":1,"990":1,"1012":1,"1044":1,"1076":1,"1223":1,"1229":4,"1237":2,"1254":1,"1259":1,"1270":1,"1286":6,"1300":4,"1303":1,"1311":7,"1317":1,"1320":2,"1323":3,"1324":3,"1339":1,"1346":1,"1350":2,"1352":1,"1359":13,"1369":5,"1374":1,"1384":1,"1386":1,"1395":4,"1396":12,"1398":1,"1402":2,"1415":4,"1417":5,"1436":40,"1455":2,"1467":2,"1526":1,"1538":1,"1555":1,"1575":1,"1576":1,"1577":2,"1671":1,"1795":1,"1805":1,"1833":1,"1834":1,"1851":1,"1853":1,"1859":1,"1875":1,"1885":1,"1889":2,"1891":3,"1910":1,"1924":2,"1935":1,"1936":1,"1941":1,"1944":1,"1949":1,"1954":1,"1972":1,"2034":1,"2038":1,"2044":1,"2069":1,"2070":2,"2098":1,"2107":1,"2120":1,"2131":1,"2156":1,"2159":1,"2164":1,"2190":1,"2192":1,"2210":1,"2212":1}}],["discourage",{"3":{"1570":1}}],["discouraging",{"3":{"530":1}}],["discounted",{"3":{"1028":1,"1742":1,"1748":1,"1749":1,"1750":2,"1764":2,"1765":1,"1767":1,"1768":1,"1773":1,"1776":1}}],["discount",{"3":{"0":2,"387":1,"390":2,"392":2,"1026":8,"1027":2,"1028":5,"1029":1,"1030":3,"1160":1,"1212":1,"1746":6,"1748":11,"1750":5,"1764":4,"1765":1,"1767":14,"1768":1,"1769":2,"1773":1,"1832":1}}],["discounting",{"3":{"0":1,"1026":1,"1767":1}}],["discounts",{"3":{"0":1,"1768":1}}],["disconnection",{"3":{"1640":1}}],["disconnects",{"3":{"1324":2}}],["disconnect",{"3":{"109":1,"612":1,"1311":1,"1324":3,"1438":1,"1669":1,"1927":1}}],["disconnectedcircuit",{"3":{"1416":1}}],["disconnectedcircuitretentionperiod",{"2":{"1123":1,"2000":1},"3":{"1123":1,"1324":1,"2000":1}}],["disconnectedcircuitretentionseconds",{"2":{"830":1,"831":1,"832":1},"3":{"830":1,"831":1,"832":1,"1324":2}}],["disconnectedcircuitmaxretained",{"2":{"830":1,"831":1,"832":1,"1123":1,"1124":1,"2000":1},"3":{"830":1,"831":1,"832":1,"1123":1,"1124":1,"1324":4,"2000":1}}],["disconnected",{"3":{"0":2,"507":1,"608":1,"831":1,"1124":1,"1247":1,"1286":1,"1311":3,"1324":13,"1416":1,"1417":1,"1438":1,"1640":1,"2158":1}}],["discoverrunbookalertheadings",{"3":{"1436":1}}],["discoverroutedpages",{"3":{"1436":1}}],["discoverdocumentedroutes",{"3":{"1436":1}}],["discovermembers",{"3":{"964":1,"1237":2}}],["discoveralertspecs",{"3":{"1436":1}}],["discoverability",{"3":{"227":1,"1270":1}}],["discoverable",{"3":{"86":1,"450":1,"555":1,"609":1,"1259":1,"1286":4,"1300":1,"1311":1,"1323":2,"1324":1,"1339":1,"1350":1,"1359":2,"1396":1,"1415":3,"1436":2,"1460":1,"1539":1,"1564":1,"1570":1,"1571":1,"2132":1}}],["discoverandregister",{"2":{"117":1,"633":1,"636":1,"1315":1,"1378":1,"1413":1,"1881":1,"1883":1},"3":{"117":2,"583":2,"633":1,"636":1,"1309":1,"1311":3,"1315":1,"1323":4,"1378":1,"1380":2,"1396":2,"1413":1,"1415":1,"1881":3,"1883":1}}],["discovering",{"3":{"69":1,"908":1,"965":1,"1051":1,"1270":1,"1323":1,"1324":1,"1330":1,"1359":2,"1436":1,"1440":1,"2046":1,"2203":1}}],["discovers",{"3":{"63":1,"135":1,"295":1,"584":1,"586":1,"609":1,"649":1,"905":1,"1212":1,"1259":1,"1286":3,"1300":1,"1309":1,"1311":3,"1313":1,"1323":2,"1324":1,"1339":1,"1359":2,"1377":1,"1380":1,"1396":3,"1415":5,"1416":1,"1434":1,"1436":7,"1453":1,"1458":1,"1476":1,"1486":1,"1492":1,"1662":1,"1671":1,"1684":2,"1728":1,"1729":1,"1810":1,"1878":1,"1886":1,"1896":1,"1934":1,"2094":1,"2097":1,"2105":1}}],["discovered",{"1":{"1878":1,"1879":1,"1880":1,"1881":1,"1882":1,"1883":1,"1884":1,"1885":1,"1886":1},"3":{"0":2,"53":1,"59":1,"63":1,"446":1,"454":1,"583":2,"609":1,"619":1,"648":1,"673":2,"792":1,"840":1,"964":1,"1051":1,"1082":1,"1084":1,"1135":1,"1212":1,"1235":1,"1237":2,"1259":3,"1270":3,"1286":7,"1309":4,"1311":2,"1315":1,"1323":6,"1324":2,"1339":1,"1359":16,"1369":2,"1380":1,"1396":8,"1402":5,"1415":9,"1416":1,"1417":1,"1427":1,"1431":1,"1436":30,"1438":1,"1441":2,"1467":2,"1476":2,"1486":1,"1509":1,"1544":1,"1550":1,"1651":2,"1653":1,"1790":1,"1877":1,"1878":1,"1883":1,"1951":1,"2045":2,"2046":1,"2058":1,"2077":1,"2093":1,"2132":1,"2203":1,"2207":1,"2214":1,"2232":1}}],["discover",{"3":{"0":1,"57":1,"62":1,"401":1,"536":1,"583":1,"610":1,"1052":1,"1067":1,"1092":1,"1237":1,"1259":1,"1275":1,"1286":1,"1309":1,"1310":1,"1311":1,"1313":1,"1323":3,"1324":2,"1339":1,"1354":1,"1369":2,"1380":1,"1395":3,"1438":1,"1458":1,"1467":1,"1626":1,"1789":1,"1830":1,"1896":1,"1899":1,"2027":1,"2107":1,"2129":1,"2135":1,"2158":1,"2163":1,"2168":1}}],["discovery",{"0":{"1315":1,"1956":1},"1":{"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1},"3":{"0":9,"28":1,"30":1,"31":8,"32":3,"33":5,"35":2,"53":1,"55":1,"61":1,"91":1,"92":3,"93":1,"95":1,"96":1,"97":1,"98":5,"102":1,"105":1,"132":1,"175":1,"182":1,"234":1,"235":3,"237":1,"239":1,"401":1,"448":1,"527":1,"583":3,"584":2,"585":1,"609":1,"628":1,"650":1,"749":2,"751":1,"758":1,"827":5,"834":1,"837":1,"838":2,"868":1,"913":2,"963":1,"966":1,"967":1,"1018":1,"1052":1,"1066":1,"1184":1,"1202":1,"1203":1,"1212":7,"1215":1,"1281":1,"1282":1,"1286":17,"1288":2,"1300":1,"1309":3,"1310":2,"1311":35,"1312":7,"1315":4,"1316":1,"1323":9,"1324":12,"1325":1,"1328":1,"1329":1,"1333":1,"1334":2,"1337":1,"1339":20,"1350":2,"1359":6,"1369":3,"1378":1,"1379":1,"1380":10,"1396":3,"1415":5,"1416":1,"1436":17,"1437":1,"1438":4,"1439":1,"1441":11,"1442":1,"1444":1,"1446":2,"1447":3,"1450":2,"1454":1,"1455":2,"1460":1,"1467":7,"1469":1,"1475":1,"1486":2,"1488":1,"1489":4,"1492":1,"1526":1,"1547":1,"1576":1,"1577":3,"1641":1,"1647":1,"1653":1,"1656":1,"1660":2,"1663":3,"1667":2,"1670":2,"1671":1,"1677":1,"1687":1,"1702":1,"1707":1,"1718":1,"1724":2,"1727":1,"1772":2,"1773":1,"1785":1,"1790":1,"1792":1,"1825":1,"1881":3,"1885":1,"1895":1,"1896":2,"1897":1,"1898":2,"1899":5,"1904":1,"1956":1,"1959":1,"2000":1,"2002":1,"2004":2,"2006":1,"2007":1,"2009":2,"2014":3,"2019":2,"2021":1,"2022":2,"2023":2,"2024":2,"2025":1,"2027":1,"2030":1,"2046":1,"2056":1,"2058":1,"2077":1,"2108":1,"2111":1,"2131":1,"2132":3,"2133":2,"2230":1,"2232":1}}],["discardunstartedconnectionasync",{"3":{"1324":1}}],["discardabandonedcapture",{"2":{"715":1,"1274":1},"3":{"715":1,"1274":1,"1286":3}}],["discarding",{"3":{"518":1,"707":1,"1270":1,"1278":1,"1286":1,"1300":1,"1311":1,"1324":3,"1417":4,"1436":2,"1947":1}}],["discards",{"3":{"21":1,"201":1,"255":1,"265":1,"520":1,"538":1,"540":1,"690":1,"1259":2,"1271":1,"1286":3,"1309":1,"1323":3,"1324":9,"1346":1,"1359":1,"1390":1,"1396":4,"1402":3,"1415":1,"1417":1,"1438":1,"1476":1,"1481":1,"1667":1}}],["discarded",{"3":{"0":2,"21":1,"534":1,"539":1,"640":1,"716":1,"854":1,"863":1,"991":1,"1100":1,"1229":1,"1259":1,"1286":2,"1294":1,"1300":4,"1309":1,"1311":2,"1323":1,"1324":7,"1350":1,"1359":7,"1395":1,"1396":3,"1402":1,"1415":1,"1416":1,"1417":3,"1436":1,"1492":1,"1641":2,"1767":1,"1822":1,"1947":1,"1949":1,"2183":1}}],["discard",{"3":{"0":1,"715":1,"721":1,"988":1,"1101":1,"1233":1,"1237":1,"1259":1,"1270":1,"1278":1,"1311":1,"1324":4,"1359":2,"1369":1,"1395":2,"1396":6,"1400":1,"1402":2,"1416":1,"1417":1,"1436":6,"1438":1,"1526":1,"1531":1,"1547":1,"1589":1,"1595":1,"1596":2,"1598":1,"1686":1,"1851":1}}],["distant",{"3":{"1311":1,"1359":1}}],["distancekmto",{"3":{"1395":1,"1417":2}}],["distance",{"3":{"632":1,"1379":1,"1395":4,"1417":6,"1436":1,"1438":1,"1556":1,"1922":1}}],["distorts",{"3":{"1286":1}}],["disturbs",{"3":{"1380":3,"1765":1}}],["disturbed",{"3":{"1323":1}}],["disturbing",{"3":{"1311":2,"1359":2,"1395":1,"1402":1,"1436":1}}],["disturb",{"3":{"1079":1,"1311":1}}],["distilled",{"0":{"1679":1},"3":{"601":1,"1470":1,"1502":1,"1679":1}}],["distinguishable",{"3":{"790":1,"907":1,"926":1,"1093":1,"1259":1,"1270":4,"1309":1,"1311":2,"1323":2,"1324":4,"1359":5,"1395":2,"1396":7,"1415":1,"1436":1,"1496":1,"2179":1}}],["distinguishing",{"3":{"309":1,"1259":1,"1310":1,"1311":1,"1324":1,"1339":1,"1350":2,"1359":4,"1380":1,"1395":2,"1396":4,"1436":2}}],["distinguish",{"3":{"158":1,"343":1,"612":1,"1286":1,"1300":4,"1301":1,"1311":2,"1320":1,"1323":3,"1324":3,"1359":5,"1395":4,"1396":4,"1402":1,"1415":1,"1417":1,"1436":8,"1438":1,"1498":1,"1630":1,"1982":1}}],["distinguished",{"3":{"111":1,"1270":1,"1342":1,"1350":1,"1359":1,"1396":3,"1556":1,"1637":1}}],["distinguishes",{"3":{"10":1,"536":1,"549":1,"676":1,"700":1,"758":1,"803":1,"805":1,"881":1,"922":1,"1237":1,"1259":1,"1265":1,"1286":2,"1300":2,"1323":1,"1324":2,"1359":3,"1380":1,"1383":1,"1395":9,"1396":4,"1402":1,"1415":2,"1436":5,"1672":1,"1821":1}}],["distincterrorcodecount",{"3":{"1436":3}}],["distinctcodecount",{"3":{"1436":2}}],["distincts",{"3":{"1359":1}}],["distinctness",{"3":{"1286":1}}],["distinctly",{"3":{"1286":1,"1323":3,"1324":1,"1369":1,"1395":1,"1396":1,"1939":1}}],["distinctby",{"3":{"1271":1,"1395":2,"1830":1}}],["distinctive",{"3":{"1247":1,"1350":2,"1395":1,"1396":1,"1436":2}}],["distinctions",{"3":{"1396":4}}],["distinction",{"3":{"0":2,"136":1,"187":1,"691":1,"837":1,"855":1,"882":1,"906":1,"1225":1,"1247":1,"1249":1,"1259":3,"1270":1,"1286":5,"1300":4,"1309":3,"1323":1,"1324":2,"1339":2,"1348":1,"1350":4,"1359":3,"1380":2,"1395":2,"1396":4,"1402":1,"1415":2,"1417":4,"1422":1,"1428":1,"1430":1,"1436":8,"1456":2,"1460":1,"1476":1,"1489":1,"1577":1,"1651":1,"1956":1,"1982":1,"2044":1}}],["distinct",{"0":{"1206":1},"2":{"647":1},"3":{"0":7,"19":1,"92":1,"135":1,"157":1,"162":2,"166":2,"174":2,"225":1,"229":1,"242":1,"248":1,"284":1,"312":1,"340":1,"346":2,"358":1,"359":1,"470":1,"472":1,"587":1,"607":1,"610":1,"612":1,"618":1,"619":1,"647":1,"651":1,"690":1,"699":1,"741":1,"828":1,"1132":1,"1134":1,"1191":2,"1192":1,"1196":1,"1197":1,"1200":1,"1202":1,"1204":1,"1206":1,"1231":1,"1237":3,"1241":2,"1242":1,"1247":3,"1259":2,"1261":1,"1271":2,"1279":1,"1286":16,"1300":6,"1301":2,"1302":1,"1309":5,"1310":5,"1311":6,"1323":6,"1324":12,"1325":1,"1332":1,"1339":3,"1347":1,"1350":5,"1351":1,"1359":29,"1369":2,"1380":3,"1395":9,"1396":24,"1397":1,"1402":4,"1406":1,"1415":3,"1416":2,"1417":9,"1431":1,"1436":29,"1438":2,"1443":1,"1467":2,"1487":1,"1496":32,"1499":1,"1531":1,"1543":1,"1631":2,"1652":1,"1665":1,"1670":1,"1685":1,"1702":1,"1707":1,"1747":1,"1765":1,"1865":1,"1870":1,"1900":1,"1933":1,"1989":2,"2046":1,"2141":1,"2196":1}}],["distrust",{"3":{"940":1}}],["distro",{"3":{"395":1,"397":1,"402":1,"1333":2,"1339":5,"1438":1,"1443":4,"1446":1,"1467":3,"1668":1,"2010":2,"2154":1,"2156":1,"2157":1,"2160":2}}],["distributing",{"3":{"2028":1}}],["distributions",{"3":{"1350":2}}],["distribution",{"0":{"1197":1},"3":{"33":1,"530":1,"598":1,"1300":1,"1311":1,"1350":4,"1359":12,"1376":1,"1380":1,"1390":1,"1395":2,"1416":1,"1425":1,"1427":2,"1535":1,"1585":1,"1632":1,"1640":1,"1894":1}}],["distributedapplicationbuilder",{"3":{"1438":1}}],["distributedapplication",{"2":{"1430":1,"2056":1},"3":{"1339":1,"1430":1,"1489":1,"2056":1}}],["distributedapplicationtestingbuilder",{"2":{"912":1,"913":2,"914":1,"1066":1,"1067":1,"1069":1,"1212":1,"1612":1},"3":{"0":2,"912":1,"913":2,"914":1,"1066":1,"1067":1,"1069":1,"1212":1,"1612":1}}],["distributedcontextpropagator",{"3":{"1324":1}}],["distributedcacheentryoptions",{"2":{"243":1,"254":1},"3":{"243":1,"254":1,"1301":5}}],["distributedcache",{"3":{"0":1,"1091":1}}],["distributedcacheservicetests",{"3":{"1199":1,"1207":3,"1301":2,"1496":1}}],["distributedcacheserviceredistests",{"2":{"1301":1},"3":{"1199":1,"1207":2,"1301":3,"1438":2,"1496":1}}],["distributedcacheservice",{"2":{"245":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"256":1,"257":1,"259":1,"261":1,"285":1,"286":1,"731":1,"733":1,"736":1,"1442":1,"1453":1,"1486":1,"1916":1,"1923":1},"3":{"0":1,"243":2,"245":4,"248":2,"249":1,"250":1,"251":3,"252":2,"253":1,"254":3,"256":4,"257":2,"259":2,"261":1,"285":1,"286":1,"731":1,"732":1,"733":3,"736":1,"1199":8,"1203":1,"1207":2,"1229":4,"1300":1,"1301":63,"1323":2,"1339":2,"1438":2,"1442":1,"1453":1,"1467":1,"1486":1,"1487":1,"1496":1,"1577":2,"1916":2,"1923":1}}],["distributedlock",{"3":{"1300":1,"1577":1}}],["distributed",{"0":{"2008":1},"1":{"2003":1,"2004":1,"2005":1,"2006":1,"2007":1,"2008":1,"2009":1,"2010":1,"2011":1,"2012":1,"2013":1,"2014":1},"2":{"182":1,"2001":1},"3":{"0":5,"25":1,"61":1,"135":1,"157":2,"158":1,"159":1,"162":1,"173":1,"177":1,"178":5,"182":2,"235":2,"241":1,"243":5,"244":2,"245":4,"246":1,"253":1,"259":1,"261":1,"282":1,"283":3,"398":2,"461":1,"516":1,"517":1,"520":1,"535":1,"538":1,"732":1,"788":1,"792":1,"794":1,"852":1,"995":1,"1000":1,"1011":1,"1012":1,"1091":1,"1202":1,"1203":1,"1212":1,"1213":2,"1223":1,"1229":3,"1257":1,"1259":4,"1270":2,"1286":1,"1294":1,"1300":8,"1301":26,"1311":20,"1312":2,"1320":1,"1323":4,"1325":1,"1332":2,"1339":6,"1358":1,"1359":4,"1369":2,"1379":1,"1421":1,"1427":3,"1438":2,"1440":1,"1441":1,"1442":2,"1443":1,"1454":1,"1465":1,"1467":3,"1496":2,"1526":1,"1534":2,"1544":2,"1547":1,"1550":1,"1577":2,"1586":1,"1639":1,"1656":1,"1666":2,"1668":2,"1675":1,"1789":1,"1792":1,"1845":1,"1846":1,"1847":1,"1849":2,"1852":1,"1853":1,"1894":1,"1909":1,"1910":1,"1912":2,"1915":1,"1916":6,"1917":1,"1920":2,"1923":3,"1934":1,"1947":1,"2001":5,"2002":1,"2003":3,"2005":1,"2007":1,"2010":1,"2014":1,"2019":1,"2027":1,"2067":1,"2155":1,"2160":1,"2168":1,"2169":1,"2193":1,"2209":1}}],["disprove",{"3":{"2239":1}}],["dispensation",{"3":{"1534":1}}],["disputed",{"3":{"1396":1}}],["displacing",{"3":{"1311":1,"1323":1,"1975":1}}],["displace",{"3":{"1359":1}}],["displaces",{"3":{"1311":1,"1417":1}}],["displaced",{"3":{"624":2,"1184":1,"1396":1,"1475":1,"1922":1}}],["displaying",{"3":{"1324":1,"1436":1}}],["displaynameunavailable",{"3":{"1396":1}}],["displaynamemaxlength",{"3":{"1396":5}}],["displayname",{"3":{"690":1,"1300":1,"1339":1,"1359":1,"1395":1,"1396":25,"1410":1,"1415":1,"1436":1}}],["displaystatus",{"3":{"1324":1}}],["displays",{"3":{"690":1,"1350":2,"1437":1,"1631":1,"1639":1,"1666":1}}],["displayed",{"3":{"135":1,"265":1,"1324":3,"1350":1,"1359":2,"1395":5,"1402":1,"1629":1,"1630":7,"1631":5,"1637":1}}],["display",{"0":{"1387":1},"1":{"679":1,"680":1,"681":1,"682":1,"683":1,"684":1,"685":1,"686":1},"3":{"0":2,"135":1,"265":2,"402":1,"679":1,"682":2,"683":1,"688":1,"690":2,"691":1,"897":1,"963":1,"964":1,"990":1,"1027":1,"1028":1,"1212":1,"1235":1,"1237":2,"1247":1,"1278":2,"1286":3,"1293":1,"1295":1,"1300":3,"1311":6,"1314":1,"1323":2,"1324":12,"1333":1,"1339":7,"1342":1,"1344":2,"1350":36,"1353":1,"1359":30,"1369":2,"1380":1,"1387":1,"1395":52,"1396":35,"1402":11,"1415":3,"1416":1,"1417":2,"1427":1,"1436":3,"1438":2,"1443":1,"1488":1,"1577":1,"1591":1,"1630":11,"1631":6,"1633":1,"1637":2,"1639":3,"1640":4,"1641":3,"1656":1,"1669":1,"1748":2,"1750":3,"1764":2,"1765":2,"1776":1,"2075":1,"2094":1,"2150":2,"2232":1}}],["disposables",{"3":{"1324":1,"1396":1}}],["disposable",{"3":{"1247":2,"1273":1,"1286":1,"1300":2,"1323":2,"1324":3,"1339":2,"1396":8,"1400":1,"1415":2,"1417":2,"1436":2}}],["disposal",{"3":{"572":1,"881":1,"916":1,"996":1,"998":1,"1270":2,"1286":7,"1323":2,"1324":22,"1389":1,"1395":32,"1396":10,"1402":11,"1415":1,"1417":3,"1436":4,"1438":2,"1488":2,"1490":2,"1849":1,"1897":1,"2055":1,"2072":1}}],["disposing",{"3":{"996":1,"1270":2,"1286":1,"1300":1,"1323":3,"1324":9,"1339":1,"1395":4,"1396":5,"1417":2,"1425":1,"1427":2,"1436":1,"1668":1,"2177":1}}],["dispositiontype",{"3":{"1286":1}}],["disposition",{"3":{"0":1,"443":1,"725":3,"741":2,"1116":2,"1285":1,"1286":7,"1311":2,"1350":1,"1357":1,"1417":1,"1631":1,"2126":1}}],["disposehostsasync",{"3":{"1436":1}}],["disposehandler",{"3":{"1324":1,"1339":2,"1436":3}}],["disposetrackingresponse",{"3":{"1199":2,"1207":1}}],["disposes",{"3":{"401":1,"1259":2,"1286":3,"1300":1,"1302":1,"1311":1,"1323":1,"1324":18,"1339":3,"1395":6,"1396":4,"1402":10,"1415":4,"1417":8,"1427":2,"1429":1,"1436":8,"1438":1,"1488":3,"1491":1,"1938":1,"2056":1,"2070":1}}],["disposed",{"3":{"109":1,"524":1,"1259":2,"1270":4,"1273":1,"1274":1,"1286":4,"1288":1,"1300":2,"1309":1,"1323":3,"1324":42,"1339":3,"1359":1,"1395":16,"1396":9,"1415":1,"1417":1,"1425":1,"1427":1,"1432":1,"1436":3,"1526":1,"1577":3,"1702":1,"2072":2,"2079":1,"2177":1}}],["disposeasync",{"2":{"1491":2},"3":{"0":1,"135":1,"1067":1,"1286":3,"1323":2,"1324":8,"1339":1,"1396":4,"1402":5,"1417":2,"1429":2,"1436":9,"1488":3,"1491":2}}],["dispose",{"3":{"0":1,"135":1,"401":1,"996":1,"1246":1,"1247":2,"1259":3,"1286":8,"1300":5,"1311":1,"1323":2,"1324":41,"1339":5,"1384":1,"1395":24,"1396":15,"1415":1,"1417":14,"1427":2,"1432":1,"1436":6,"1442":1,"1577":2,"1591":2,"1611":1,"2070":1}}],["dispatchchanneleventasync",{"3":{"1324":3}}],["dispatchcache",{"3":{"1259":1,"1323":1}}],["dispatchable",{"3":{"1359":4}}],["dispatchandfinalizeasync",{"2":{"1274":1},"3":{"1274":1,"1286":3}}],["dispatchasync",{"3":{"1259":6,"1286":2,"1436":2}}],["dispatchtohandlersasync",{"3":{"1259":1}}],["dispatchmessagesasync",{"2":{"2165":1},"3":{"1259":2,"2165":1}}],["dispatchfailed",{"2":{"897":1},"3":{"897":1,"1247":5}}],["dispatchlaghistogram",{"3":{"707":1,"1259":3}}],["dispatching",{"3":{"18":1,"20":1,"58":1,"230":1,"767":1,"881":1,"1252":1,"1255":1,"1257":1,"1259":7,"1274":1,"1278":1,"1286":2,"1323":1,"1345":1,"1350":1,"1359":1,"1375":1,"1380":4,"1396":1,"1402":1,"1436":1,"1438":1,"1489":1,"1577":1,"1841":2}}],["dispatched",{"3":{"15":1,"16":1,"17":1,"18":3,"19":1,"20":1,"21":1,"26":1,"230":1,"291":1,"642":1,"692":1,"702":1,"781":1,"786":1,"1140":1,"1237":2,"1249":1,"1251":1,"1252":3,"1256":1,"1259":16,"1271":1,"1286":5,"1289":1,"1300":1,"1309":4,"1350":15,"1352":1,"1359":13,"1395":1,"1396":7,"1402":21,"1415":9,"1508":2,"1577":1,"1631":1,"1634":1,"1637":1,"1638":1,"1639":1,"1651":1,"1677":1,"1719":1,"1721":1,"1789":1,"1838":1,"1861":1}}],["dispatches",{"0":{"1842":1},"2":{"1370":1},"3":{"0":1,"15":1,"24":1,"166":1,"225":2,"230":1,"265":1,"536":1,"538":1,"846":1,"930":1,"931":1,"1011":1,"1042":1,"1233":1,"1237":2,"1247":1,"1252":1,"1257":2,"1259":20,"1286":7,"1311":8,"1312":1,"1317":1,"1323":1,"1324":3,"1344":1,"1350":1,"1359":6,"1370":1,"1375":1,"1380":33,"1395":4,"1396":9,"1402":2,"1408":1,"1415":5,"1416":1,"1431":1,"1436":4,"1508":1,"1783":1,"1815":1,"1856":1,"2091":1,"2137":1,"2156":1,"2163":1,"2165":3,"2188":1}}],["dispatcher",{"3":{"0":1,"81":1,"135":1,"418":1,"420":1,"428":1,"538":1,"784":1,"1042":1,"1140":1,"1192":1,"1202":1,"1203":1,"1237":1,"1241":1,"1247":2,"1248":1,"1252":1,"1256":1,"1257":1,"1259":19,"1262":1,"1270":1,"1274":1,"1286":6,"1309":1,"1311":3,"1396":3,"1402":2,"1415":1,"1416":9,"1417":11,"1436":3,"1487":2,"1526":1,"1539":1,"1543":1,"1577":1,"1665":1,"1669":1,"1889":1,"2121":1,"2165":1,"2168":1,"2182":1,"2186":1}}],["dispatch",{"0":{"1247":1,"1252":1,"1508":1},"1":{"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"1248":1,"1249":1,"1250":1,"1251":1,"1252":1,"1253":1,"1254":1,"1255":1,"1256":1,"1257":1,"1258":1,"1259":1},"2":{"24":1,"400":1,"626":1,"766":1,"768":1,"897":1,"899":1,"901":1,"1399":1,"1456":1,"1457":1,"1458":1,"1474":1,"1475":2,"1589":1,"1599":1,"1919":1,"1946":1,"2034":1,"2156":1},"3":{"0":14,"14":1,"15":2,"16":2,"17":3,"18":3,"19":1,"20":6,"21":4,"22":1,"24":3,"25":1,"26":2,"27":3,"64":1,"71":1,"113":1,"115":1,"120":3,"168":1,"171":1,"196":1,"200":1,"229":1,"314":1,"383":1,"400":1,"518":1,"626":5,"639":1,"692":1,"707":1,"766":1,"768":1,"819":1,"845":1,"846":1,"863":1,"881":5,"897":2,"899":1,"901":1,"931":2,"933":2,"935":1,"987":1,"988":3,"989":1,"992":1,"1010":1,"1011":1,"1013":2,"1075":1,"1076":1,"1192":2,"1202":1,"1203":1,"1212":3,"1230":1,"1233":3,"1237":7,"1241":2,"1247":6,"1248":2,"1249":1,"1251":2,"1254":1,"1255":1,"1257":2,"1259":44,"1263":1,"1270":7,"1274":5,"1278":1,"1286":24,"1300":3,"1311":5,"1323":6,"1324":6,"1345":1,"1350":3,"1359":4,"1369":3,"1375":1,"1380":4,"1395":5,"1396":18,"1399":2,"1402":7,"1406":1,"1412":1,"1415":8,"1417":5,"1436":9,"1438":2,"1443":1,"1446":1,"1452":1,"1455":8,"1456":6,"1457":1,"1458":1,"1460":10,"1473":1,"1474":1,"1475":10,"1483":1,"1490":2,"1492":3,"1496":2,"1498":1,"1508":1,"1524":1,"1526":4,"1531":1,"1534":1,"1538":1,"1543":1,"1571":1,"1577":2,"1582":1,"1583":1,"1589":1,"1591":4,"1596":2,"1599":1,"1600":2,"1611":2,"1634":1,"1638":1,"1662":1,"1665":3,"1721":1,"1749":1,"1838":3,"1840":2,"1842":1,"1846":3,"1919":1,"1944":1,"1946":1,"1950":1,"2006":1,"2026":1,"2032":1,"2034":1,"2074":1,"2156":3,"2159":1,"2165":1,"2221":1,"2232":2}}],["douglasville",{"3":{"2244":1}}],["douglas",{"3":{"2220":1}}],["doubly",{"3":{"1161":1,"1417":1,"1455":1,"1526":1,"1591":1}}],["doubling",{"3":{"178":1,"390":1,"741":1,"1270":1,"1311":1,"1324":3,"1350":1,"1396":1,"1417":1,"1496":1,"1985":1}}],["doublebooked",{"3":{"1359":1,"1436":1}}],["doublebookederror",{"3":{"1359":2}}],["doubled",{"0":{"141":1},"3":{"0":1,"125":1,"551":1,"556":1,"559":2,"982":1,"1214":1,"1311":1,"1359":1,"1489":1,"1494":1,"2043":1}}],["doubles",{"3":{"0":1,"195":1,"282":1,"782":2,"838":1,"848":1,"875":1,"954":1,"955":1,"1060":1,"1237":1,"1269":2,"1270":3,"1286":1,"1300":3,"1311":2,"1318":1,"1323":2,"1324":3,"1339":1,"1350":1,"1359":3,"1369":1,"1395":2,"1396":1,"1400":1,"1402":1,"1403":1,"1436":5,"1437":2,"1459":1,"1467":1,"1488":2,"1496":2,"1651":1,"1654":1,"1660":1,"1671":1,"1673":1,"1932":1,"1942":1,"1965":1,"2055":1}}],["double",{"0":{"2076":1},"3":{"0":8,"20":1,"122":1,"156":2,"157":2,"160":1,"195":1,"201":1,"379":1,"493":1,"494":1,"495":1,"497":2,"501":1,"502":1,"517":1,"536":2,"538":1,"556":2,"557":2,"558":1,"647":1,"690":1,"692":1,"733":1,"743":2,"827":1,"829":1,"905":1,"953":1,"954":3,"955":1,"956":1,"960":1,"997":1,"1042":1,"1174":1,"1175":1,"1212":1,"1231":1,"1237":2,"1247":1,"1255":1,"1259":2,"1265":1,"1267":1,"1270":11,"1271":1,"1286":14,"1288":1,"1296":1,"1298":1,"1300":12,"1301":4,"1309":1,"1311":13,"1312":2,"1323":10,"1324":14,"1335":1,"1339":5,"1350":4,"1352":1,"1359":16,"1369":3,"1380":2,"1395":1,"1396":5,"1402":3,"1412":1,"1415":2,"1417":8,"1427":1,"1429":1,"1432":2,"1436":20,"1438":3,"1467":1,"1488":2,"1494":1,"1496":1,"1526":1,"1534":3,"1561":2,"1591":1,"1667":1,"1668":1,"1671":1,"1749":1,"1810":2,"1841":1,"1906":1,"1909":1,"1911":1,"1912":1,"1915":1,"1917":1,"1984":1,"2061":1,"2165":1,"2167":1,"2232":1}}],["dodge",{"3":{"1801":1,"2186":1}}],["dollar",{"3":{"1534":1}}],["dollars",{"3":{"1324":1,"1457":1}}],["dogfooding",{"3":{"1487":1,"1488":1}}],["dogfoods",{"3":{"572":1,"707":1,"715":1}}],["doasync",{"3":{"1436":1}}],["doomed",{"3":{"1286":1,"1324":2,"1396":1,"1417":1,"1438":1}}],["doors",{"3":{"1350":1,"1359":1,"2066":1}}],["door",{"3":{"0":1,"443":1,"544":1,"689":4,"690":1,"691":2,"827":1,"1115":1,"1123":1,"1125":1,"1132":1,"1133":1,"1134":1,"1212":1,"1237":1,"1247":1,"1300":1,"1311":1,"1339":1,"1350":1,"1359":16,"1393":1,"1395":1,"1396":27,"1402":1,"1415":1,"1416":1,"1467":1,"1627":2,"1629":1,"1631":2,"1701":1,"1780":1,"1783":1,"2000":1,"2026":1,"2066":1,"2069":1,"2090":1,"2139":1}}],["dormant",{"3":{"691":1,"1087":1,"1264":1,"1359":1,"1396":6,"1401":1,"1402":1,"1417":2,"1524":1,"1526":2,"1534":1,"1823":1,"1860":1}}],["dozens",{"3":{"1005":1,"1124":1,"1286":1,"1313":1,"1352":1,"1359":1,"1395":2,"1396":1,"1436":1,"1958":1,"1986":1}}],["dozen",{"3":{"527":1,"673":1,"1035":1,"1314":1,"1324":1,"1339":1,"1353":1,"1395":3,"1396":3,"1401":2,"1402":2,"1436":2,"1828":1,"1880":1,"2059":1,"2202":1}}],["dominant",{"3":{"1229":1,"1361":1,"1456":1,"1490":1,"1496":3,"1505":1,"1517":1}}],["dominates",{"3":{"1247":1,"1496":1,"1677":1}}],["dominated",{"3":{"1067":1,"1287":1,"1395":1,"1455":2,"1492":2}}],["dominate",{"3":{"396":1,"1259":1,"1286":1,"1339":1,"1443":1,"1467":1,"1677":1,"1841":1,"2010":1,"2052":1,"2157":1}}],["dom",{"3":{"506":2,"507":1,"508":1,"1187":1,"1324":8,"1395":1,"1416":1,"1417":1,"1432":1,"1436":6,"1456":1,"1488":1,"1531":1,"2073":1,"2079":1}}],["domainpurity",{"3":{"1576":1,"1577":1}}],["domainpuritytests",{"2":{"1525":1,"2049":1},"3":{"1199":2,"1207":4,"1436":13,"1489":5,"1493":1,"1525":1,"1526":1,"1576":1,"1577":1,"1591":1,"1600":1,"2043":1,"2049":1}}],["domainpuritytestsbase",{"2":{"2042":1,"2104":1,"2108":1},"3":{"1199":3,"1207":2,"1431":1,"1436":9,"1489":1,"1654":1,"2042":1,"2104":1,"2108":1}}],["domainorinfrastructure",{"3":{"1436":1}}],["domainfactories",{"3":{"1436":2,"1489":1}}],["domainfactoriesreturnresult",{"2":{"657":1,"1586":1},"3":{"657":1,"1431":1,"1436":1,"1577":1,"1586":1}}],["domainassemblylocations",{"3":{"1436":1}}],["domainaggregaterootshavenopublicconstructors",{"2":{"1577":1},"3":{"1436":1,"1577":1}}],["domainandapplicationdonotreadtheclock",{"2":{"1161":1},"3":{"1161":1,"1436":6}}],["domainandapplication",{"2":{"1161":1,"1436":1},"3":{"1161":1,"1436":2}}],["domaindoesnotdependonapplication",{"3":{"1436":1}}],["domainindex",{"3":{"1300":1}}],["domaininvariantviolationexception",{"2":{"109":1,"881":1,"1217":1,"1226":1,"1229":1,"1806":1},"3":{"0":2,"109":1,"881":1,"1199":4,"1203":1,"1207":2,"1217":1,"1226":3,"1229":7,"1300":1,"1324":1,"1806":1}}],["domainhelpertests",{"3":{"1199":1,"1207":2,"1237":2}}],["domainhelper",{"3":{"980":1,"982":1,"1199":1,"1203":1,"1207":2,"1208":1,"1214":1,"1230":2,"1236":7,"1237":7,"1395":11,"1396":3}}],["domainthrowfixtures",{"3":{"1207":24,"1436":27}}],["domainthrowfitnesstests",{"3":{"1199":1,"1207":3,"1436":27,"1489":1}}],["domainthrowtests",{"3":{"1199":1,"1207":2,"1436":6,"1489":1}}],["domainthrowtestsbase",{"3":{"1199":2,"1207":2,"1436":7}}],["domainthrows",{"3":{"980":1,"982":1,"1207":1,"1436":10,"1489":1}}],["domainthrowsonlyargumentguards",{"2":{"980":1,"983":1},"3":{"980":1,"983":1,"1436":7}}],["domaintypes",{"3":{"81":1,"1436":2}}],["domains",{"3":{"418":1,"420":1,"422":1,"1168":3,"1416":1,"1436":4,"1481":2,"1599":1,"1629":1,"2109":2,"2110":1,"2114":1}}],["domainentityproperties",{"3":{"1436":1}}],["domainentitystate",{"2":{"963":1,"968":1,"1233":1,"1249":1,"1340":1,"1355":1,"1398":1,"1685":1},"3":{"0":2,"690":1,"782":6,"963":2,"964":2,"968":1,"1199":75,"1203":1,"1207":2,"1212":1,"1230":1,"1233":2,"1237":3,"1249":1,"1259":6,"1300":1,"1340":1,"1345":1,"1350":38,"1355":1,"1359":23,"1396":18,"1398":1,"1402":15,"1631":3,"1633":1,"1634":15,"1639":1,"1665":1,"1685":1,"1769":1}}],["domainentities",{"3":{"1436":2}}],["domainexposesaggregateroots",{"3":{"1431":1,"1577":1}}],["domainexceptiontests",{"3":{"1199":1,"1207":3,"1229":1}}],["domainexception",{"2":{"1217":1,"1226":1,"1640":1},"3":{"109":1,"1199":6,"1203":1,"1207":2,"1217":1,"1226":6,"1229":12,"1311":4,"1436":1,"1640":2}}],["domainexceptionhandler",{"2":{"1226":1,"1927":1},"3":{"109":2,"1199":4,"1203":1,"1207":2,"1226":1,"1229":6,"1311":9,"1774":1,"1927":1}}],["domaineventcaptureexclusiontests",{"3":{"1199":1,"1207":6,"1286":2,"1438":2}}],["domaineventoccurrencestamp",{"2":{"1161":1},"3":{"1161":1}}],["domaineventsavefixtures",{"3":{"1207":27,"1436":34}}],["domaineventsavechangesinterceptoroutboxdisabledtests",{"3":{"1199":1,"1207":2,"1286":2}}],["domaineventsavechangesinterceptoroutboxroutingtests",{"3":{"1199":2,"1207":9,"1237":1,"1286":2}}],["domaineventsavechangesinterceptortests",{"3":{"1199":1,"1207":6,"1286":2}}],["domaineventsavechangesinterceptor",{"2":{"20":1,"120":1,"540":1,"715":1,"931":1,"1201":1,"1233":1,"1251":1,"1274":1,"1286":1},"3":{"0":1,"20":1,"26":1,"120":1,"166":1,"536":1,"538":1,"540":1,"715":3,"931":2,"988":2,"1175":1,"1198":1,"1199":59,"1201":1,"1203":1,"1207":5,"1233":6,"1237":6,"1251":4,"1252":3,"1253":1,"1254":1,"1259":17,"1270":1,"1274":3,"1280":1,"1286":32,"1323":1,"1350":2,"1436":7,"1496":4,"1498":1,"2165":1,"2168":1}}],["domainevents",{"2":{"1161":1,"1207":2,"1350":6,"1396":1,"1402":1,"1415":1},"3":{"81":1,"255":1,"536":2,"782":19,"784":2,"1026":1,"1160":1,"1161":1,"1203":33,"1207":98,"1231":1,"1237":5,"1247":1,"1249":4,"1252":2,"1259":20,"1270":1,"1282":1,"1286":6,"1309":3,"1342":1,"1345":5,"1350":45,"1359":2,"1369":1,"1396":10,"1402":9,"1415":5,"1436":8,"1438":2,"1496":1,"1577":2,"1686":1,"1769":1,"1810":1,"1856":1}}],["domainevent",{"3":{"26":2,"782":1,"1259":2,"1286":1,"1396":3,"2189":1}}],["domaineventhandlers",{"3":{"230":1,"390":1,"522":2,"545":2,"690":1,"782":5,"897":3,"1026":1,"1100":2,"1203":5,"1207":28,"1237":2,"1247":4,"1259":1,"1309":1,"1350":2,"1355":1,"1359":2,"1396":8,"1399":2,"1402":5,"1436":3,"1438":2,"1496":2,"1526":1,"1651":1,"1765":3}}],["domaineventhandlersavefitnesstests",{"3":{"1199":1,"1207":3,"1436":20,"1489":1}}],["domaineventhandlersavetests",{"3":{"27":2,"1199":1,"1207":2,"1436":6,"1489":1}}],["domaineventhandlersavetestsbase",{"3":{"17":2,"27":1,"1199":2,"1207":2,"1436":9}}],["domaineventhandlersaves",{"3":{"17":1,"27":1,"1207":1,"1436":13,"1489":1}}],["domaineventhandlersdonotsave",{"2":{"17":1,"27":1},"3":{"17":1,"27":1,"1436":7}}],["domaineventdispatchertests",{"3":{"1199":1,"1207":7}}],["domaineventdispatcheradditionaltests",{"3":{"1199":1,"1207":13}}],["domaineventdispatcher",{"2":{"17":1,"846":1,"848":1,"1252":1,"1269":1,"1651":1},"3":{"0":1,"17":1,"538":1,"846":1,"848":1,"1140":1,"1199":9,"1203":1,"1207":2,"1247":2,"1252":4,"1259":36,"1269":1,"1270":3,"1323":3,"1350":4,"1359":1,"1396":1,"1436":2,"1438":1,"1577":1,"1651":1,"2168":1}}],["domain",{"0":{"1233":1,"1345":1,"1346":1,"1355":1,"1541":1,"1630":1,"1687":1,"1769":1,"1832":1,"2091":1},"1":{"654":1,"655":1,"656":1,"657":1,"658":1,"659":1,"660":1,"661":1,"1158":1,"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1,"1230":1,"1231":1,"1232":1,"1233":1,"1234":1,"1235":1,"1236":1,"1237":1,"1248":1,"1249":1,"1250":1,"1251":1,"1252":1,"1253":1,"1254":1,"1255":1,"1256":1,"1257":1,"1258":1,"1259":1,"1340":1,"1341":1,"1342":1,"1343":1,"1344":1,"1345":1,"1346":1,"1347":1,"1348":1,"1349":1,"1350":1,"1808":1,"1809":1,"1810":1,"1811":1,"1812":1},"2":{"39":3,"146":1,"1006":1,"1161":1,"1207":2,"1230":1,"1236":1,"1237":1,"1321":1,"1341":3,"1350":6,"1396":2,"1402":2,"1404":1,"1415":1,"1436":1,"1650":2,"1660":1,"1781":1,"1931":1,"2063":1},"3":{"0":23,"4":1,"15":1,"16":1,"17":2,"18":1,"19":1,"20":1,"24":2,"26":1,"27":2,"39":11,"40":1,"43":3,"52":1,"53":1,"54":2,"58":2,"59":2,"60":2,"62":1,"76":1,"80":3,"81":7,"108":1,"109":4,"110":2,"115":1,"117":1,"120":1,"124":1,"128":1,"131":2,"139":1,"146":1,"150":1,"156":2,"165":1,"167":1,"168":1,"185":1,"194":1,"224":1,"225":3,"226":1,"230":1,"255":1,"265":2,"318":1,"332":1,"341":5,"342":2,"350":1,"353":1,"359":1,"360":1,"370":1,"383":1,"391":1,"422":2,"469":2,"470":4,"473":1,"475":2,"476":3,"477":2,"497":5,"499":3,"502":2,"518":2,"522":2,"536":7,"537":1,"545":3,"546":1,"549":5,"556":1,"558":1,"572":4,"576":1,"584":1,"591":1,"592":1,"593":1,"634":1,"640":1,"654":1,"655":1,"656":1,"657":11,"658":1,"659":1,"690":5,"692":1,"698":3,"707":1,"715":2,"718":1,"781":1,"782":24,"783":1,"784":2,"785":1,"791":1,"798":2,"799":2,"802":1,"809":1,"810":1,"846":2,"881":1,"882":1,"883":1,"888":1,"897":1,"900":1,"904":1,"905":1,"906":1,"921":1,"922":1,"926":1,"930":1,"933":1,"939":1,"954":1,"963":3,"966":1,"971":1,"980":4,"982":2,"1004":8,"1006":1,"1018":1,"1024":1,"1025":2,"1026":4,"1027":2,"1029":1,"1033":1,"1034":1,"1037":1,"1041":1,"1049":1,"1050":5,"1051":1,"1052":1,"1054":1,"1055":1,"1058":1,"1059":4,"1074":2,"1078":1,"1082":1,"1083":4,"1085":1,"1091":3,"1093":1,"1100":1,"1104":1,"1116":4,"1140":4,"1141":2,"1142":1,"1147":1,"1150":1,"1158":1,"1160":3,"1161":14,"1162":1,"1168":26,"1169":1,"1170":2,"1171":1,"1183":1,"1185":1,"1187":2,"1191":1,"1192":5,"1194":2,"1198":18,"1199":252,"1200":1,"1201":4,"1202":8,"1203":151,"1206":8,"1207":883,"1208":2,"1211":5,"1212":15,"1213":1,"1214":2,"1216":1,"1217":1,"1220":1,"1224":1,"1226":1,"1229":11,"1230":6,"1231":10,"1232":4,"1233":5,"1234":3,"1235":1,"1236":6,"1237":160,"1238":2,"1239":9,"1240":1,"1247":69,"1248":2,"1249":14,"1252":2,"1257":2,"1259":63,"1262":2,"1263":1,"1265":3,"1270":19,"1271":25,"1272":2,"1274":2,"1275":1,"1278":1,"1280":1,"1281":1,"1285":1,"1286":97,"1290":1,"1291":5,"1293":1,"1295":1,"1297":1,"1300":71,"1302":1,"1303":6,"1304":1,"1305":2,"1306":2,"1309":63,"1310":25,"1311":41,"1312":8,"1313":1,"1316":1,"1319":2,"1321":1,"1323":38,"1324":12,"1339":1,"1340":6,"1341":13,"1342":12,"1343":3,"1344":16,"1345":9,"1346":4,"1347":1,"1349":2,"1350":365,"1351":3,"1352":3,"1353":2,"1354":1,"1355":4,"1356":1,"1358":2,"1359":504,"1360":4,"1361":3,"1362":1,"1363":1,"1369":34,"1370":1,"1375":1,"1377":1,"1378":1,"1379":1,"1380":28,"1395":18,"1396":176,"1397":2,"1398":3,"1399":3,"1402":113,"1403":1,"1404":7,"1405":6,"1409":1,"1410":1,"1412":1,"1413":1,"1415":119,"1416":1,"1417":7,"1427":1,"1429":2,"1431":14,"1436":459,"1437":9,"1438":17,"1455":2,"1486":1,"1487":7,"1488":1,"1489":28,"1492":1,"1493":1,"1496":39,"1498":1,"1499":1,"1503":1,"1504":2,"1505":1,"1506":1,"1508":2,"1526":17,"1535":4,"1538":1,"1539":2,"1540":5,"1541":2,"1544":1,"1546":2,"1551":2,"1553":1,"1572":1,"1575":1,"1576":2,"1577":25,"1581":1,"1582":5,"1583":1,"1585":3,"1586":2,"1591":5,"1600":1,"1631":8,"1632":9,"1633":1,"1634":6,"1637":2,"1638":11,"1639":9,"1640":1,"1641":3,"1647":1,"1650":5,"1651":5,"1653":2,"1654":4,"1656":1,"1660":3,"1661":1,"1662":5,"1663":2,"1665":2,"1666":1,"1671":3,"1681":2,"1683":1,"1685":8,"1686":8,"1687":2,"1689":1,"1693":1,"1700":1,"1701":3,"1719":1,"1724":1,"1727":4,"1730":2,"1747":4,"1748":2,"1749":2,"1751":1,"1753":1,"1755":1,"1763":1,"1764":13,"1765":12,"1769":4,"1770":1,"1772":1,"1775":2,"1776":2,"1779":1,"1781":2,"1782":1,"1783":1,"1789":1,"1790":2,"1796":1,"1800":1,"1803":1,"1805":4,"1806":2,"1807":1,"1808":4,"1809":1,"1810":4,"1812":5,"1815":3,"1822":2,"1829":1,"1831":3,"1832":5,"1833":4,"1834":3,"1838":5,"1839":1,"1842":1,"1844":1,"1851":1,"1853":1,"1854":3,"1856":1,"1861":1,"1862":1,"1864":1,"1865":2,"1871":2,"1877":1,"1883":1,"1884":1,"1891":1,"1922":1,"1929":1,"1931":2,"1932":2,"1933":1,"1934":1,"1937":2,"1941":1,"1944":2,"1946":1,"1950":2,"1951":1,"1953":2,"1954":2,"1990":1,"1994":1,"2016":2,"2020":1,"2028":1,"2039":2,"2040":2,"2042":1,"2043":7,"2051":1,"2052":2,"2054":1,"2063":3,"2064":2,"2071":2,"2074":1,"2083":3,"2085":3,"2086":1,"2087":1,"2088":1,"2090":3,"2091":3,"2093":1,"2095":1,"2097":1,"2098":3,"2099":2,"2100":1,"2101":1,"2104":6,"2105":2,"2109":1,"2110":4,"2111":2,"2113":2,"2114":2,"2125":1,"2139":1,"2142":1,"2163":3,"2164":2,"2165":2,"2169":1,"2170":1,"2171":1,"2178":2,"2180":1,"2183":1,"2186":1,"2189":1,"2206":2,"2213":1,"2214":1,"2217":1,"2218":1,"2219":1,"2227":6,"2230":5,"2232":4,"2239":2}}],["dosomething",{"3":{"1415":1}}],["dossier",{"3":{"1300":1}}],["dos",{"3":{"283":3,"1339":1,"2002":1}}],["dots",{"3":{"1116":1,"1285":1,"1286":1,"1311":2}}],["dot",{"3":{"564":1,"1241":1,"1247":1,"1286":1,"1300":1,"1350":1,"1436":2}}],["dotted",{"3":{"265":1,"333":1,"1126":1,"1241":3,"1247":11,"1270":1,"1300":1,"1311":1,"1324":6,"1359":4,"1436":1,"1666":1}}],["dotnetref",{"3":{"1324":2}}],["dotnetobjectreference",{"3":{"1324":7,"1417":3}}],["dotnet",{"2":{"132":1,"135":1,"291":1,"371":1,"372":1,"373":1,"374":1,"451":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"495":1,"527":1,"563":1,"634":1,"635":1,"675":1,"869":1,"906":1,"930":1,"932":1,"938":1,"1004":1,"1044":1,"1066":1,"1190":1,"1325":1,"1439":1,"1526":1,"1606":1,"1646":1,"1648":1,"1652":1,"1655":1,"1657":1,"1661":1,"1681":1,"1682":1,"1688":1,"1690":1,"1693":1,"1704":1,"1717":1,"1718":1,"1719":1,"1726":1,"1729":1,"1730":1,"1740":1,"1781":1,"1787":1,"1793":1,"1807":1,"1812":1,"1827":1,"1846":1,"1853":1,"1862":1,"1868":1,"1877":1,"1886":1,"1892":1,"1899":1,"1905":1,"1912":1,"1924":1,"1930":1,"1941":1,"1950":1,"1959":1,"1965":1,"1972":1,"1979":1,"1985":1,"1997":1,"2002":1,"2003":1,"2004":1,"2028":1,"2038":1,"2060":1,"2080":1,"2087":1,"2089":1,"2098":1,"2101":1,"2107":1,"2108":1,"2115":1,"2123":1,"2128":1,"2133":1,"2139":1,"2146":1,"2153":1,"2169":1,"2192":1,"2193":1,"2203":1,"2210":1,"2211":1},"3":{"0":7,"132":1,"135":2,"140":1,"291":2,"370":2,"371":1,"372":1,"373":4,"374":1,"397":1,"451":1,"483":1,"486":1,"487":1,"488":1,"489":1,"490":3,"491":3,"492":3,"493":4,"495":1,"527":1,"528":2,"563":1,"564":1,"599":1,"626":1,"632":1,"633":6,"634":1,"635":2,"675":1,"696":1,"698":1,"707":1,"715":1,"782":1,"861":1,"868":2,"869":2,"906":1,"914":2,"930":1,"932":1,"938":1,"982":1,"1004":1,"1044":1,"1066":1,"1067":1,"1069":1,"1190":1,"1212":2,"1214":1,"1273":1,"1284":3,"1286":18,"1300":1,"1311":1,"1323":3,"1325":1,"1326":1,"1328":1,"1339":1,"1430":1,"1436":5,"1439":1,"1441":1,"1445":12,"1449":1,"1453":7,"1454":5,"1455":6,"1456":1,"1459":4,"1461":1,"1464":2,"1467":1,"1486":4,"1487":1,"1490":3,"1492":3,"1526":2,"1577":1,"1591":1,"1606":1,"1646":1,"1648":3,"1649":2,"1650":2,"1651":2,"1652":2,"1654":2,"1655":2,"1657":4,"1661":3,"1664":1,"1677":1,"1681":1,"1682":3,"1684":1,"1686":1,"1688":1,"1690":2,"1693":2,"1697":1,"1701":2,"1704":4,"1717":1,"1718":4,"1719":3,"1726":2,"1727":3,"1728":2,"1729":2,"1730":1,"1740":1,"1781":1,"1787":2,"1793":1,"1807":1,"1812":1,"1817":1,"1827":1,"1834":1,"1846":1,"1853":1,"1862":1,"1868":1,"1877":1,"1886":1,"1892":1,"1899":1,"1905":1,"1912":1,"1924":1,"1930":1,"1941":1,"1950":1,"1959":1,"1965":1,"1972":1,"1979":1,"1985":1,"1991":1,"1997":1,"2002":1,"2003":1,"2004":2,"2014":2,"2028":1,"2038":1,"2058":1,"2060":1,"2080":1,"2086":1,"2087":1,"2089":1,"2097":2,"2098":2,"2101":3,"2107":1,"2108":1,"2115":1,"2123":1,"2128":1,"2133":1,"2139":1,"2146":1,"2153":1,"2156":1,"2160":1,"2169":1,"2180":1,"2192":1,"2193":1,"2203":1,"2210":1,"2211":1,"2232":1}}],["doing",{"3":{"72":1,"225":1,"236":1,"237":1,"373":1,"539":2,"549":1,"592":1,"633":1,"698":2,"757":1,"831":1,"867":1,"898":2,"1067":1,"1233":1,"1259":2,"1262":1,"1270":1,"1286":7,"1290":1,"1300":3,"1301":1,"1309":2,"1311":2,"1312":1,"1323":4,"1324":6,"1339":4,"1348":1,"1350":3,"1352":1,"1356":1,"1359":7,"1369":1,"1395":3,"1396":6,"1402":1,"1415":1,"1417":7,"1427":1,"1436":5,"1441":1,"1442":1,"1444":1,"1455":1,"1470":1,"1832":1,"2072":1,"2081":1,"2097":1,"2130":1,"2209":1}}],["donor",{"3":{"1496":1}}],["donotcoverthatpair",{"3":{"1436":1}}],["donotexceedconstructordependencyceiling",{"3":{"1436":21}}],["done",{"1":{"1900":1,"1901":1,"1902":1,"1903":1,"1904":1,"1905":1},"3":{"401":1,"435":1,"526":1,"709":1,"856":1,"857":1,"1124":1,"1237":1,"1239":1,"1270":3,"1286":2,"1304":1,"1309":1,"1310":1,"1311":1,"1318":1,"1324":6,"1339":1,"1359":1,"1395":3,"1402":1,"1417":1,"1436":1,"1496":1,"1529":1,"1531":1,"1575":2,"1589":1,"1596":1,"1611":1,"1641":1,"1651":1,"1664":1,"1701":1,"1728":1,"1779":1,"1840":1,"1879":1,"1899":1,"1900":1,"1935":1,"1937":1,"2000":1,"2097":1,"2101":1,"2129":1,"2194":1,"2208":1}}],["don",{"1":{"1828":1,"1829":1,"1830":1,"1831":1,"1832":1,"1833":1,"1834":1,"2124":1,"2125":1,"2126":1,"2127":1,"2128":1},"3":{"47":1,"1311":1,"1467":1,"1474":1,"1561":1,"1569":1,"1591":1,"1638":1,"1651":1,"1654":1,"1779":2,"1828":1,"1972":1,"2080":1,"2123":1,"2124":1,"2133":1,"2206":1,"2210":1}}],["docresource",{"3":{"1436":1}}],["doc",{"3":{"33":1,"68":2,"98":1,"135":1,"138":1,"139":3,"142":1,"251":1,"256":3,"257":1,"258":1,"322":1,"359":1,"364":1,"448":1,"453":1,"468":2,"476":1,"492":1,"543":1,"625":1,"682":1,"700":1,"751":1,"782":4,"784":1,"801":1,"819":1,"827":1,"837":1,"971":1,"976":1,"988":1,"990":1,"1003":1,"1074":1,"1190":1,"1219":2,"1226":1,"1228":1,"1229":15,"1231":1,"1232":1,"1233":1,"1235":1,"1237":30,"1239":1,"1247":47,"1259":70,"1262":1,"1263":1,"1264":1,"1269":1,"1270":59,"1271":12,"1273":1,"1274":1,"1275":1,"1277":1,"1278":3,"1280":1,"1283":3,"1284":2,"1286":152,"1300":127,"1301":5,"1309":52,"1310":3,"1311":95,"1312":8,"1315":1,"1316":1,"1317":1,"1323":69,"1324":184,"1326":1,"1327":1,"1330":2,"1332":2,"1333":1,"1339":148,"1342":2,"1347":1,"1350":100,"1359":101,"1369":3,"1380":63,"1391":1,"1395":159,"1396":171,"1402":74,"1415":103,"1416":3,"1417":55,"1419":1,"1422":1,"1423":1,"1427":6,"1431":1,"1436":311,"1443":1,"1451":1,"1488":3,"1489":3,"1490":1,"1496":8,"1526":4,"1534":2,"1585":1,"1586":2,"1591":2,"1596":1,"1597":1,"1600":1,"1685":1,"1686":5,"1815":1,"1821":1,"1896":2,"1994":1,"1995":1,"2000":1,"2004":1,"2039":1,"2041":1,"2043":2,"2044":1,"2045":5,"2048":1,"2066":1,"2085":1,"2104":1,"2112":1,"2117":1,"2122":1,"2129":1,"2149":1,"2159":1}}],["docs",{"0":{"1481":1},"3":{"1":2,"70":1,"99":1,"135":1,"140":1,"142":1,"147":2,"324":1,"358":2,"361":1,"362":1,"366":1,"370":1,"422":1,"423":1,"424":1,"425":1,"426":2,"490":1,"491":1,"492":1,"493":1,"495":1,"564":1,"582":1,"590":2,"599":1,"626":2,"756":2,"765":1,"766":1,"773":2,"860":1,"914":1,"1003":1,"1011":1,"1012":3,"1017":1,"1090":2,"1094":1,"1095":1,"1190":1,"1212":2,"1216":2,"1237":2,"1270":3,"1300":9,"1309":1,"1311":3,"1323":3,"1324":23,"1350":5,"1359":13,"1380":7,"1395":9,"1396":9,"1402":3,"1416":1,"1417":5,"1428":1,"1430":2,"1436":10,"1453":6,"1455":4,"1459":1,"1460":1,"1461":1,"1470":1,"1481":2,"1482":1,"1483":1,"1496":2,"1501":1,"1502":1,"1515":1,"1522":1,"1525":1,"1526":8,"1528":1,"1531":1,"1534":1,"1535":1,"1571":3,"1572":1,"1573":1,"1575":1,"1576":2,"1577":15,"1579":1,"1581":1,"1582":3,"1583":1,"1586":2,"1587":1,"1591":2,"1593":1,"1594":1,"1596":1,"1600":1,"1663":1,"1793":2,"1802":1,"1807":1,"1815":1,"1827":2,"1846":1,"1853":1,"1868":1,"1877":1,"1886":1,"1892":2,"1899":1,"1905":1,"1909":2,"1923":1,"1930":1,"1950":1,"1965":1,"1972":1,"1979":1,"1985":1,"1991":1,"1997":1,"2000":2,"2001":2,"2002":2,"2069":1,"2086":2,"2098":2,"2108":1,"2112":1,"2115":1,"2117":1,"2118":1,"2120":1,"2128":1,"2133":1,"2151":1,"2153":1,"2158":1,"2160":1,"2169":1,"2172":1,"2180":1,"2193":1,"2203":1,"2211":1,"2234":1}}],["docx",{"3":{"0":1,"443":1,"1116":2,"1285":1,"1347":1,"1350":1,"1395":1,"1631":1}}],["documentlanguagetests",{"3":{"1199":1,"1207":2,"1438":2}}],["documentformats",{"2":{"1285":1},"3":{"1199":5,"1203":1,"1207":1,"1285":1,"1286":5,"1359":2}}],["documentname",{"3":{"448":1,"1311":2,"2131":1}}],["documentingly",{"3":{"1350":1}}],["documenting",{"3":{"101":1,"251":1,"254":1,"257":1,"332":1,"557":1,"699":1,"805":1,"1247":1,"1286":2,"1300":1,"1311":2,"1323":2,"1324":1,"1339":3,"1380":1,"1396":1,"1496":1,"1552":1,"1591":1,"1659":1,"1990":1}}],["documentation",{"0":{"1571":1,"1674":1,"2045":1},"3":{"69":1,"135":1,"200":3,"230":1,"359":1,"364":2,"365":2,"425":1,"426":2,"459":1,"465":1,"466":1,"472":1,"529":2,"545":1,"547":1,"549":1,"593":1,"627":1,"862":1,"982":1,"986":1,"1006":1,"1011":1,"1012":1,"1067":1,"1070":1,"1092":1,"1108":2,"1124":2,"1133":1,"1161":1,"1216":1,"1221":1,"1229":1,"1237":3,"1247":1,"1270":3,"1271":1,"1286":1,"1300":4,"1309":3,"1311":6,"1312":2,"1322":1,"1323":1,"1324":3,"1339":5,"1350":3,"1352":1,"1359":9,"1369":2,"1395":2,"1396":5,"1415":2,"1428":1,"1436":49,"1447":1,"1453":1,"1457":1,"1459":1,"1486":1,"1489":1,"1492":1,"1493":1,"1496":1,"1499":1,"1571":1,"1582":1,"1585":1,"1591":1,"1592":1,"1601":1,"1686":1,"1796":1,"1941":1,"2014":1,"2045":1,"2047":1,"2056":1,"2142":1,"2144":1,"2163":1,"2165":3,"2167":2,"2174":1,"2175":1,"2177":1,"2178":1,"2180":1,"2189":2,"2196":1,"2202":1,"2233":1}}],["documentcontentsniffertests",{"3":{"1199":1,"1207":2,"1286":1}}],["documentcontentsniffer",{"2":{"443":1,"1116":1,"1285":1,"1357":1},"3":{"0":1,"443":2,"1116":2,"1199":4,"1203":1,"1207":3,"1212":1,"1285":2,"1286":20,"1347":1,"1350":1,"1357":1,"1359":5,"1496":2}}],["documents",{"0":{"452":1,"577":1},"2":{"452":1,"453":1},"3":{"0":4,"68":1,"121":1,"135":1,"189":1,"256":1,"290":1,"365":1,"418":1,"443":1,"446":1,"448":1,"451":2,"452":2,"453":1,"454":3,"570":1,"572":1,"573":1,"631":1,"635":1,"651":1,"744":1,"749":1,"756":1,"827":1,"946":1,"973":1,"979":1,"990":1,"996":1,"1016":1,"1050":1,"1114":1,"1126":1,"1133":1,"1229":3,"1247":2,"1259":2,"1270":3,"1271":1,"1278":1,"1286":9,"1300":9,"1310":1,"1311":13,"1323":6,"1324":9,"1339":6,"1352":1,"1359":14,"1369":1,"1380":2,"1395":6,"1396":12,"1399":1,"1402":2,"1406":1,"1410":1,"1415":4,"1416":2,"1417":8,"1427":2,"1436":11,"1453":1,"1455":4,"1458":1,"1467":2,"1473":1,"1474":2,"1496":2,"1500":1,"1524":1,"1526":2,"1531":2,"1575":1,"1577":2,"1586":1,"1596":1,"1640":1,"1651":1,"1653":1,"1670":1,"1679":1,"1684":1,"1686":1,"1698":1,"1701":1,"1861":1,"1883":1,"2095":1,"2132":1,"2133":1,"2232":1,"2233":1}}],["document",{"0":{"454":1,"1895":1},"1":{"1762":1,"1763":1,"1764":1,"1765":1,"1766":1,"1767":1,"1768":1,"1769":1,"1770":1,"1771":1,"1772":1,"1773":1,"1774":1,"1775":1,"1776":1,"1777":1},"2":{"450":1},"3":{"0":2,"31":3,"32":1,"102":1,"165":1,"166":2,"234":1,"239":1,"371":1,"395":2,"415":1,"418":1,"423":1,"424":1,"438":1,"443":2,"446":5,"448":4,"450":4,"451":4,"452":2,"453":1,"454":5,"472":1,"487":1,"490":1,"564":1,"570":1,"571":2,"572":2,"573":2,"577":3,"585":1,"625":1,"626":1,"724":1,"725":3,"726":2,"727":1,"743":1,"882":1,"905":1,"910":1,"974":1,"976":1,"1010":1,"1011":1,"1013":1,"1021":1,"1050":3,"1114":1,"1115":1,"1116":1,"1117":1,"1120":1,"1212":1,"1213":1,"1270":1,"1273":1,"1285":3,"1286":14,"1288":3,"1299":1,"1300":16,"1309":2,"1311":47,"1322":1,"1323":12,"1324":20,"1339":2,"1356":3,"1359":16,"1369":1,"1380":2,"1396":20,"1399":1,"1404":1,"1406":1,"1410":2,"1415":20,"1417":7,"1433":2,"1436":25,"1438":3,"1439":1,"1441":1,"1447":1,"1455":1,"1467":2,"1470":1,"1474":1,"1475":1,"1478":1,"1481":2,"1485":1,"1488":4,"1496":1,"1521":1,"1524":4,"1526":2,"1530":1,"1531":5,"1532":1,"1545":1,"1576":1,"1577":2,"1585":1,"1599":1,"1620":1,"1631":2,"1640":1,"1666":2,"1669":1,"1672":1,"1676":1,"1711":1,"1717":1,"1755":1,"1756":1,"1762":1,"1765":1,"1772":2,"1825":1,"1845":1,"1854":1,"1858":1,"1862":1,"1896":2,"1899":2,"1929":3,"1930":1,"2007":1,"2033":1,"2055":1,"2099":1,"2122":1,"2131":1,"2132":3,"2220":1,"2232":1,"2233":1}}],["documented",{"3":{"0":10,"37":1,"53":1,"107":1,"118":1,"122":1,"136":1,"178":1,"189":1,"200":2,"216":2,"237":1,"245":1,"248":1,"253":1,"291":1,"329":1,"333":1,"348":2,"359":1,"363":1,"415":1,"441":1,"450":1,"465":1,"484":1,"526":1,"527":1,"528":1,"545":1,"564":1,"571":1,"583":1,"599":1,"601":1,"602":1,"617":1,"620":1,"631":3,"635":1,"640":2,"657":1,"659":1,"674":1,"682":1,"690":1,"698":1,"732":1,"748":1,"749":1,"750":1,"808":1,"861":1,"897":2,"901":1,"907":2,"926":1,"930":1,"931":1,"932":1,"964":2,"966":2,"972":1,"973":1,"980":2,"981":1,"986":1,"988":1,"991":1,"1004":1,"1005":1,"1006":1,"1018":1,"1050":1,"1091":1,"1108":1,"1125":1,"1134":1,"1139":1,"1140":1,"1149":1,"1161":1,"1162":1,"1169":1,"1175":1,"1211":1,"1212":2,"1229":2,"1231":1,"1235":1,"1237":9,"1242":1,"1244":2,"1247":2,"1254":1,"1255":1,"1259":10,"1269":1,"1270":18,"1271":3,"1276":1,"1284":1,"1285":1,"1286":37,"1292":1,"1296":1,"1300":27,"1301":2,"1309":8,"1311":10,"1312":5,"1313":2,"1316":1,"1317":1,"1321":2,"1323":23,"1324":32,"1329":1,"1331":1,"1332":1,"1339":11,"1343":1,"1348":1,"1350":9,"1355":1,"1357":1,"1359":44,"1364":1,"1366":1,"1369":1,"1380":3,"1384":1,"1395":16,"1396":23,"1402":12,"1412":1,"1415":27,"1416":4,"1417":22,"1419":1,"1431":1,"1433":2,"1436":34,"1438":1,"1441":1,"1442":2,"1443":1,"1445":1,"1450":1,"1453":2,"1454":1,"1455":1,"1467":4,"1470":1,"1472":1,"1473":1,"1474":2,"1475":1,"1481":1,"1483":1,"1488":3,"1489":1,"1491":1,"1496":12,"1500":1,"1524":1,"1526":13,"1531":1,"1532":1,"1534":3,"1535":1,"1537":1,"1543":1,"1545":1,"1546":2,"1547":1,"1548":1,"1562":2,"1566":4,"1570":2,"1571":3,"1575":1,"1576":1,"1577":21,"1581":1,"1582":1,"1583":1,"1584":1,"1585":8,"1591":5,"1599":1,"1600":1,"1632":1,"1638":1,"1639":1,"1640":1,"1641":1,"1642":1,"1647":1,"1656":1,"1665":1,"1670":1,"1671":1,"1673":2,"1675":1,"1686":1,"1709":1,"1797":1,"1801":1,"1815":1,"1821":1,"1826":1,"1842":1,"1910":1,"2001":1,"2030":1,"2034":2,"2036":1,"2045":1,"2055":1,"2061":1,"2074":1,"2088":1,"2098":1,"2119":1,"2127":1,"2149":1,"2159":1,"2162":1,"2164":1,"2172":1,"2174":1,"2182":1,"2195":1,"2199":1,"2216":1,"2221":1,"2229":1,"2232":4,"2242":1}}],["dockeravailabilitytests",{"3":{"1199":1,"1207":2,"1487":1}}],["dockeravailability",{"3":{"1067":1,"1199":3,"1207":2,"1428":1,"1430":4,"1488":2}}],["dockerfile",{"3":{"867":1,"868":6,"869":19,"870":4,"872":3,"873":6,"876":14,"877":6,"1445":37,"1450":6,"1455":2,"1464":8,"1496":2}}],["dockerfiles",{"0":{"1445":1},"3":{"0":1,"868":1,"869":1,"871":1,"877":3,"1212":1,"1445":3,"1450":2,"1455":1,"1464":1}}],["docker",{"0":{"2053":1},"1":{"2050":1,"2051":1,"2052":1,"2053":1,"2054":1,"2055":1,"2056":1,"2057":1,"2058":1,"2059":1,"2060":1},"2":{"373":1,"869":1,"871":1,"1069":1},"3":{"0":3,"149":1,"152":1,"373":1,"625":1,"627":1,"642":1,"868":1,"869":1,"871":1,"873":1,"914":1,"915":1,"935":1,"1034":1,"1067":1,"1069":3,"1074":1,"1078":1,"1328":2,"1339":5,"1430":5,"1436":6,"1437":1,"1438":6,"1439":1,"1440":1,"1445":2,"1449":2,"1453":1,"1455":6,"1458":1,"1460":1,"1464":2,"1465":1,"1486":3,"1487":2,"1488":1,"1490":5,"1492":5,"1591":1,"1599":1,"1602":1,"1611":3,"1614":1,"1616":1,"1648":1,"1661":1,"1682":1,"1689":1,"1692":1,"1693":1,"1717":1,"1718":3,"1785":1,"2004":1,"2005":1,"2013":1,"2049":1,"2050":4,"2053":1,"2059":1,"2060":2,"2210":1,"2213":1,"2218":1,"2219":1}}],["downscale",{"3":{"1457":1}}],["downside",{"3":{"1441":1}}],["downstreamcheckprefix",{"3":{"1436":2}}],["downstreamreadinesscache",{"2":{"833":1},"3":{"830":1,"833":1}}],["downstreamservices",{"3":{"1436":1}}],["downstreamservicehealthcheck",{"2":{"402":1,"1443":1},"3":{"402":1,"827":1,"1199":3,"1203":1,"1207":2,"1333":1,"1337":2,"1339":12,"1443":1,"1496":2}}],["downstreams",{"3":{"99":2,"827":1,"1339":3,"1436":2,"2024":1}}],["downstreamprobeversion",{"2":{"99":2,"1447":1},"3":{"99":2,"1199":4,"1203":1,"1207":1,"1337":1,"1339":7,"1447":1}}],["downstream",{"0":{"99":1,"1337":1,"1678":1},"3":{"0":5,"25":1,"35":1,"53":1,"59":1,"97":1,"99":5,"100":1,"101":1,"146":1,"174":1,"349":1,"351":1,"369":1,"402":1,"459":1,"529":1,"572":2,"757":2,"761":2,"783":1,"826":2,"827":10,"828":2,"829":3,"830":1,"833":1,"834":1,"1066":1,"1068":1,"1212":2,"1247":2,"1252":1,"1259":1,"1263":1,"1270":1,"1271":2,"1283":1,"1284":1,"1286":6,"1296":1,"1300":4,"1301":1,"1309":4,"1311":19,"1312":6,"1323":8,"1324":6,"1325":1,"1328":3,"1329":1,"1332":2,"1337":8,"1338":2,"1339":47,"1344":1,"1350":6,"1359":14,"1395":1,"1396":7,"1402":8,"1409":1,"1415":4,"1416":1,"1417":3,"1427":4,"1429":1,"1430":1,"1433":2,"1436":21,"1438":4,"1441":2,"1442":1,"1443":1,"1447":12,"1450":1,"1453":2,"1455":1,"1467":6,"1472":1,"1476":1,"1487":1,"1488":8,"1544":1,"1575":3,"1577":2,"1578":1,"1582":1,"1583":1,"1585":1,"1670":1,"1671":1,"1677":1,"1784":1,"1811":1,"1812":1,"1821":1,"1836":1,"1852":1,"1895":1,"1954":1,"1974":2,"1977":1,"1979":2,"2007":1,"2010":1,"2019":1,"2024":2,"2028":1,"2055":1,"2056":1,"2066":1,"2114":2,"2115":2,"2127":1,"2136":1,"2172":1}}],["downward",{"3":{"1311":1,"1436":1}}],["downcasts",{"3":{"1270":1}}],["downgrading",{"3":{"641":1}}],["downgrades",{"3":{"1447":1}}],["downgraded",{"3":{"342":1,"1229":1,"1271":1,"1311":1,"1312":2,"1334":1,"1438":1,"1473":1,"1478":2,"1927":1}}],["downgrade",{"0":{"1478":2},"3":{"0":1,"98":1,"109":1,"235":1,"768":1,"790":1,"1067":1,"1192":1,"1222":1,"1229":1,"1300":1,"1327":1,"1339":3,"1380":1,"1436":2,"1443":1,"1444":1,"1466":1,"1467":3,"1470":1,"1473":2,"1478":7,"1482":3,"1483":2,"1484":2,"1591":1}}],["down",{"0":{"2010":1},"2":{"565":1},"3":{"0":7,"1":1,"58":1,"81":1,"100":1,"159":1,"234":1,"235":1,"256":1,"257":1,"293":1,"310":2,"351":1,"364":1,"413":1,"424":1,"475":1,"476":1,"490":4,"492":1,"494":1,"517":1,"543":1,"545":1,"546":1,"556":1,"563":1,"564":4,"565":1,"633":1,"640":1,"666":1,"684":1,"692":1,"700":1,"702":1,"707":1,"726":1,"749":1,"756":2,"757":1,"765":1,"766":1,"767":1,"821":1,"827":1,"853":1,"854":1,"859":1,"861":2,"868":1,"871":1,"881":1,"884":1,"912":1,"953":1,"963":1,"1003":1,"1004":1,"1018":2,"1019":1,"1050":1,"1082":1,"1084":1,"1091":1,"1101":1,"1118":1,"1133":1,"1152":1,"1186":1,"1229":3,"1235":1,"1238":1,"1247":5,"1259":3,"1270":5,"1286":7,"1300":5,"1307":1,"1309":5,"1310":1,"1311":2,"1321":1,"1323":6,"1324":25,"1333":1,"1334":1,"1339":12,"1350":5,"1352":1,"1358":1,"1359":16,"1369":4,"1373":2,"1380":1,"1395":22,"1396":15,"1402":6,"1415":3,"1416":5,"1417":12,"1422":1,"1427":2,"1436":27,"1438":3,"1441":1,"1443":1,"1445":1,"1447":4,"1455":6,"1467":4,"1476":2,"1478":1,"1480":1,"1524":1,"1531":1,"1537":1,"1556":1,"1566":1,"1686":1,"1726":1,"1731":1,"1748":1,"1749":1,"1765":1,"1784":1,"1797":1,"1799":3,"1801":1,"1810":1,"1825":2,"1827":2,"1837":1,"1864":2,"1909":1,"1911":1,"1912":3,"1944":1,"1946":2,"1948":1,"1972":1,"2000":1,"2007":1,"2028":1,"2032":1,"2034":1,"2037":1,"2038":2,"2040":1,"2043":1,"2044":1,"2056":1,"2057":1,"2062":1,"2064":1,"2067":1,"2069":1,"2070":1,"2089":1,"2118":1,"2165":1,"2169":2,"2174":1,"2189":1,"2192":1,"2198":1}}],["downloading",{"3":{"1359":1}}],["downloadable",{"3":{"1309":1}}],["downloaded",{"3":{"0":1,"555":1,"556":1,"743":1,"1116":1,"1118":1,"1342":1,"1350":1,"1416":1,"1454":1,"1456":1,"1467":1,"2067":1}}],["downloads",{"3":{"0":2,"527":1,"557":1,"1116":1,"1117":1,"1182":1,"1184":1,"1286":2,"1359":1,"1389":1,"1416":1,"1631":1,"2082":1,"2150":1}}],["download",{"3":{"0":1,"527":1,"530":1,"556":1,"725":2,"1116":1,"1117":1,"1184":1,"1285":1,"1286":3,"1300":1,"1311":3,"1323":1,"1324":10,"1344":1,"1350":2,"1357":1,"1359":2,"1380":1,"1395":2,"1410":1,"1415":3,"1438":2,"1455":1,"1467":1,"1669":1,"1672":1,"2217":1}}],["downtime",{"3":{"0":1,"361":1,"365":1,"1284":1,"1545":1,"1664":1,"1672":1,"2145":1,"2146":1}}],["do",{"0":{"1303":1,"1422":1,"1956":1,"2055":1},"1":{"2181":1,"2182":1,"2183":1,"2184":1,"2185":1,"2186":1,"2187":1,"2188":1,"2189":1,"2190":1,"2191":1,"2192":1,"2193":1},"3":{"0":3,"15":1,"17":1,"18":1,"24":1,"27":1,"47":1,"62":1,"63":1,"91":1,"97":1,"100":2,"102":1,"108":1,"109":2,"110":1,"115":1,"122":1,"123":1,"133":2,"146":1,"147":2,"156":1,"158":1,"170":1,"175":1,"176":1,"185":1,"187":1,"224":1,"228":1,"234":1,"235":1,"236":1,"243":1,"245":2,"255":1,"256":1,"265":2,"283":3,"306":1,"317":1,"319":1,"335":1,"345":1,"351":1,"353":1,"401":1,"408":1,"449":1,"450":1,"451":2,"459":3,"461":1,"466":1,"473":1,"481":2,"482":1,"497":1,"502":1,"518":2,"539":1,"541":1,"549":1,"557":1,"566":1,"573":1,"592":1,"611":1,"622":1,"625":2,"626":1,"642":1,"658":1,"665":2,"676":1,"681":1,"683":1,"684":1,"689":2,"692":1,"698":1,"725":2,"735":1,"743":2,"748":1,"749":1,"751":2,"757":1,"782":2,"783":1,"789":1,"790":1,"800":1,"802":1,"803":1,"811":1,"819":1,"821":1,"827":2,"829":1,"838":1,"861":1,"868":1,"869":2,"873":1,"875":1,"877":1,"889":1,"896":1,"897":2,"905":2,"907":1,"912":1,"914":1,"923":1,"926":2,"966":1,"971":1,"982":1,"987":1,"988":1,"989":1,"995":1,"996":1,"1019":1,"1020":1,"1026":1,"1034":1,"1041":2,"1049":1,"1053":1,"1090":1,"1091":2,"1116":1,"1117":1,"1120":1,"1141":1,"1151":2,"1168":1,"1170":1,"1174":1,"1184":1,"1229":2,"1235":1,"1237":4,"1239":2,"1240":1,"1241":1,"1244":2,"1247":9,"1248":2,"1249":1,"1253":2,"1256":1,"1258":1,"1259":8,"1269":1,"1270":14,"1271":3,"1276":1,"1278":2,"1286":38,"1287":1,"1290":1,"1297":1,"1300":15,"1301":8,"1303":1,"1309":6,"1310":5,"1311":23,"1312":1,"1313":1,"1317":1,"1318":1,"1323":20,"1324":22,"1332":2,"1339":15,"1342":1,"1345":1,"1348":1,"1350":21,"1352":2,"1353":1,"1354":1,"1357":1,"1358":1,"1359":37,"1369":3,"1373":1,"1377":1,"1380":10,"1385":1,"1387":1,"1395":15,"1396":31,"1399":1,"1401":2,"1402":8,"1403":1,"1415":10,"1416":4,"1417":34,"1418":2,"1423":1,"1427":3,"1431":1,"1432":1,"1435":1,"1436":63,"1438":3,"1442":2,"1443":2,"1444":1,"1445":1,"1453":2,"1454":1,"1455":2,"1467":3,"1470":1,"1471":1,"1472":2,"1473":1,"1474":1,"1475":3,"1476":2,"1488":2,"1489":2,"1490":3,"1491":2,"1492":1,"1496":1,"1503":1,"1513":1,"1526":1,"1532":1,"1534":3,"1539":1,"1553":2,"1572":5,"1586":1,"1596":2,"1600":1,"1630":1,"1631":1,"1632":1,"1635":1,"1638":2,"1641":2,"1646":1,"1649":1,"1651":1,"1675":1,"1676":1,"1682":1,"1683":1,"1684":1,"1685":1,"1692":1,"1693":1,"1701":1,"1706":1,"1723":1,"1724":1,"1727":1,"1728":2,"1729":1,"1730":1,"1735":1,"1741":1,"1748":1,"1749":1,"1759":1,"1767":2,"1769":1,"1779":1,"1782":1,"1788":1,"1793":2,"1794":1,"1797":1,"1799":1,"1800":1,"1802":2,"1804":1,"1805":1,"1807":2,"1810":1,"1812":1,"1815":2,"1817":1,"1819":2,"1825":1,"1826":2,"1836":2,"1845":1,"1846":2,"1847":1,"1849":1,"1850":1,"1851":1,"1857":3,"1860":1,"1862":1,"1867":2,"1868":1,"1871":1,"1876":2,"1877":2,"1881":1,"1883":1,"1888":1,"1891":1,"1898":3,"1899":3,"1902":1,"1904":1,"1909":1,"1912":1,"1915":1,"1920":1,"1923":1,"1924":1,"1927":1,"1930":1,"1932":1,"1939":1,"1946":2,"1947":1,"1950":3,"1952":1,"1955":1,"1956":1,"1959":2,"1960":3,"1961":1,"1965":1,"1966":1,"1970":1,"1973":1,"1975":1,"1981":2,"1982":1,"1986":1,"1991":1,"1992":1,"1993":2,"1994":2,"1996":1,"1997":2,"1998":2,"2001":2,"2002":2,"2011":1,"2024":2,"2032":1,"2040":2,"2042":2,"2043":1,"2047":2,"2048":1,"2060":1,"2063":2,"2064":1,"2069":2,"2077":1,"2080":1,"2085":1,"2086":1,"2091":1,"2093":1,"2094":1,"2097":2,"2100":2,"2101":1,"2107":3,"2109":1,"2116":1,"2118":2,"2119":1,"2128":1,"2131":1,"2134":1,"2135":1,"2136":1,"2139":1,"2142":1,"2153":1,"2154":1,"2155":2,"2156":1,"2161":4,"2165":2,"2166":1,"2167":1,"2170":1,"2171":2,"2180":4,"2181":3,"2182":1,"2183":3,"2195":2,"2196":1,"2199":1,"2202":1,"2203":3,"2206":1}}],["doesn",{"3":{"1557":1,"1563":1,"1566":1,"1749":1,"1755":1,"1776":1}}],["doesnotcalltheservice",{"3":{"1436":1}}],["doesnotcalltheserviceandshowstheform",{"3":{"1436":1}}],["doesnotleakpseudosentinel",{"3":{"1436":1}}],["doesnotflag",{"3":{"1436":1}}],["doesnotreport",{"3":{"1436":6}}],["doesnotshareitsduplicateguardacrossbuilders",{"3":{"1339":1}}],["doesnotthrowandcommitsonce",{"3":{"988":1}}],["doesnotuserawqueryablesurfaces",{"2":{"0":1,"700":1,"1815":1},"3":{"0":1,"545":1,"700":1,"1436":2,"1815":1}}],["does",{"0":{"1265":1,"1424":1,"1677":1,"1797":1,"1838":1,"2187":1},"3":{"0":27,"15":1,"17":1,"19":1,"20":1,"21":1,"23":1,"24":1,"26":2,"27":1,"31":1,"32":2,"39":4,"41":1,"49":1,"62":1,"68":1,"71":1,"72":1,"80":1,"81":2,"91":1,"95":1,"96":1,"109":7,"111":2,"117":1,"121":1,"122":2,"124":1,"126":2,"128":1,"131":1,"135":3,"136":2,"137":1,"147":1,"148":1,"150":1,"158":1,"160":2,"161":1,"164":1,"170":1,"175":1,"178":1,"180":1,"181":1,"185":1,"186":1,"187":1,"188":1,"193":1,"195":2,"197":1,"200":2,"202":2,"206":1,"207":1,"208":1,"209":1,"216":2,"225":1,"234":1,"236":1,"237":4,"242":1,"243":2,"245":3,"253":1,"255":2,"256":2,"260":1,"265":6,"266":1,"273":1,"275":1,"280":1,"282":1,"283":3,"291":2,"299":1,"300":1,"304":1,"305":1,"306":2,"310":2,"311":1,"312":1,"318":6,"320":1,"325":1,"330":1,"333":1,"341":4,"342":1,"343":4,"344":1,"350":4,"353":1,"365":2,"366":1,"369":2,"370":1,"371":1,"372":1,"380":3,"384":1,"388":3,"389":1,"391":1,"396":1,"397":3,"400":1,"404":2,"405":1,"416":1,"420":1,"422":1,"428":1,"442":2,"443":1,"444":1,"448":3,"450":1,"459":1,"460":1,"463":1,"470":1,"490":2,"491":1,"492":1,"493":1,"499":2,"509":1,"517":2,"520":2,"523":1,"526":1,"527":1,"528":1,"535":1,"536":2,"538":1,"539":2,"543":1,"544":1,"547":1,"549":1,"550":1,"551":1,"552":1,"556":2,"558":3,"563":1,"564":4,"572":1,"573":2,"574":1,"582":1,"583":2,"585":3,"591":1,"592":2,"593":4,"598":1,"599":2,"600":2,"601":1,"602":1,"607":3,"608":1,"609":6,"610":1,"611":3,"618":1,"620":2,"624":1,"626":4,"628":2,"633":2,"635":3,"640":2,"642":2,"649":3,"651":1,"657":2,"660":1,"664":1,"665":1,"666":1,"668":2,"673":1,"674":3,"676":2,"678":2,"682":3,"684":1,"685":1,"689":2,"691":1,"692":1,"693":1,"697":2,"698":3,"699":1,"700":1,"705":1,"707":2,"708":2,"709":1,"711":1,"714":2,"715":2,"716":1,"717":1,"718":1,"723":1,"724":1,"725":5,"726":3,"733":2,"735":1,"736":1,"740":2,"741":1,"742":1,"743":3,"748":2,"749":3,"751":1,"757":1,"759":1,"764":2,"765":2,"766":4,"767":1,"768":2,"770":1,"774":1,"775":1,"776":1,"781":1,"782":2,"784":1,"789":4,"790":3,"792":1,"793":2,"794":1,"795":2,"799":1,"800":2,"809":1,"810":3,"811":1,"812":1,"813":1,"815":1,"818":1,"819":3,"820":1,"821":1,"825":2,"826":1,"827":8,"829":2,"830":1,"831":1,"833":1,"834":1,"836":2,"837":1,"838":1,"840":1,"842":1,"849":2,"853":2,"854":1,"856":2,"860":1,"863":2,"869":2,"870":1,"873":2,"875":1,"876":2,"881":2,"883":2,"885":1,"888":2,"889":1,"890":2,"891":2,"896":1,"897":1,"899":2,"905":5,"907":1,"910":1,"913":1,"914":1,"915":1,"923":2,"924":1,"926":4,"931":1,"932":1,"937":1,"946":2,"947":1,"953":1,"954":1,"956":2,"958":1,"960":1,"963":2,"965":2,"966":1,"971":2,"972":4,"973":1,"979":1,"980":1,"982":3,"990":2,"992":2,"995":5,"996":3,"1006":1,"1013":1,"1018":3,"1020":2,"1025":1,"1026":1,"1028":1,"1034":2,"1035":2,"1036":1,"1041":1,"1042":2,"1050":4,"1052":4,"1053":1,"1059":1,"1061":1,"1062":1,"1066":1,"1067":1,"1069":2,"1070":1,"1074":2,"1075":1,"1076":1,"1077":1,"1079":2,"1082":1,"1084":1,"1090":4,"1091":6,"1092":1,"1093":1,"1100":2,"1102":2,"1107":1,"1108":2,"1110":1,"1115":1,"1116":1,"1117":1,"1119":1,"1123":1,"1124":4,"1125":1,"1132":1,"1133":2,"1134":2,"1135":2,"1142":1,"1152":1,"1157":1,"1160":1,"1161":2,"1163":1,"1168":3,"1182":1,"1183":2,"1184":1,"1186":1,"1188":1,"1193":1,"1212":4,"1216":1,"1217":1,"1218":1,"1220":1,"1223":1,"1225":1,"1226":1,"1228":2,"1229":16,"1231":1,"1232":1,"1233":1,"1235":6,"1237":26,"1240":1,"1241":5,"1242":2,"1243":1,"1244":1,"1247":32,"1248":2,"1251":1,"1252":2,"1256":1,"1258":1,"1259":23,"1260":1,"1261":2,"1263":3,"1264":4,"1265":2,"1266":1,"1267":2,"1270":49,"1271":12,"1273":3,"1274":1,"1275":3,"1278":2,"1279":2,"1281":1,"1283":1,"1286":123,"1287":1,"1288":1,"1289":4,"1290":3,"1291":1,"1293":3,"1294":2,"1295":2,"1296":1,"1297":1,"1300":86,"1301":13,"1304":2,"1307":4,"1308":2,"1309":23,"1310":8,"1311":67,"1312":9,"1313":2,"1315":4,"1317":2,"1318":3,"1320":6,"1322":1,"1323":69,"1324":125,"1327":1,"1328":2,"1330":1,"1332":1,"1333":1,"1335":1,"1336":1,"1337":1,"1338":1,"1339":54,"1340":1,"1341":1,"1342":1,"1343":1,"1344":3,"1345":1,"1346":1,"1348":2,"1349":2,"1350":50,"1352":4,"1353":2,"1355":2,"1357":1,"1358":3,"1359":220,"1362":3,"1363":2,"1365":2,"1366":2,"1369":27,"1372":1,"1373":1,"1375":1,"1376":1,"1378":2,"1380":27,"1389":3,"1390":2,"1395":107,"1396":122,"1398":1,"1400":7,"1402":41,"1405":5,"1406":2,"1408":2,"1409":2,"1410":3,"1413":1,"1415":70,"1416":12,"1417":47,"1418":2,"1423":2,"1424":2,"1425":1,"1426":1,"1427":17,"1428":1,"1429":1,"1431":4,"1432":1,"1433":3,"1435":5,"1436":206,"1438":13,"1441":5,"1442":2,"1443":3,"1445":3,"1446":2,"1447":4,"1449":1,"1453":5,"1454":2,"1455":26,"1456":4,"1457":2,"1458":1,"1459":2,"1460":5,"1461":1,"1465":2,"1467":29,"1471":1,"1473":1,"1475":9,"1476":5,"1478":2,"1480":2,"1481":4,"1483":2,"1488":6,"1489":10,"1490":8,"1491":1,"1492":10,"1496":3,"1524":1,"1525":1,"1526":5,"1528":1,"1531":2,"1532":1,"1534":5,"1553":1,"1572":3,"1577":2,"1579":1,"1582":1,"1585":2,"1591":2,"1596":1,"1599":4,"1608":1,"1627":1,"1630":1,"1631":6,"1632":1,"1635":2,"1636":1,"1638":10,"1639":13,"1640":3,"1641":3,"1646":1,"1649":1,"1651":4,"1653":5,"1655":1,"1664":1,"1668":1,"1670":1,"1675":1,"1677":4,"1683":1,"1684":4,"1685":2,"1686":2,"1688":1,"1691":1,"1699":1,"1700":1,"1701":2,"1702":1,"1703":1,"1709":1,"1717":1,"1723":3,"1724":1,"1725":1,"1726":1,"1727":6,"1728":2,"1729":1,"1730":1,"1742":1,"1748":1,"1749":1,"1750":1,"1751":1,"1760":1,"1761":1,"1764":1,"1765":5,"1769":1,"1776":1,"1783":1,"1790":4,"1792":1,"1793":2,"1799":1,"1801":1,"1802":1,"1803":4,"1804":1,"1805":3,"1810":4,"1813":1,"1815":1,"1820":2,"1821":1,"1823":1,"1824":2,"1825":2,"1828":1,"1832":4,"1833":1,"1836":1,"1837":2,"1838":1,"1839":1,"1841":2,"1842":1,"1843":2,"1844":2,"1845":1,"1847":1,"1849":3,"1851":1,"1852":2,"1854":1,"1856":1,"1857":2,"1859":4,"1861":1,"1864":1,"1865":1,"1866":1,"1867":1,"1868":1,"1869":1,"1870":2,"1871":1,"1874":1,"1875":1,"1876":2,"1879":2,"1880":1,"1881":2,"1882":2,"1883":3,"1887":1,"1890":1,"1891":2,"1896":2,"1900":1,"1901":1,"1905":1,"1907":2,"1908":2,"1911":1,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":2,"1919":2,"1922":6,"1923":3,"1926":1,"1927":2,"1928":1,"1930":1,"1931":1,"1933":3,"1935":2,"1936":1,"1938":1,"1940":2,"1941":1,"1943":1,"1945":1,"1946":2,"1952":1,"1955":1,"1958":2,"1960":1,"1961":1,"1962":2,"1964":1,"1965":2,"1966":1,"1968":1,"1969":1,"1971":1,"1976":2,"1977":1,"1978":1,"1979":1,"1982":1,"1984":2,"1988":2,"1994":1,"1995":4,"1996":3,"1998":1,"1999":1,"2000":4,"2001":3,"2002":1,"2003":1,"2007":2,"2008":2,"2010":1,"2011":1,"2016":2,"2020":2,"2021":1,"2024":3,"2025":1,"2028":1,"2030":1,"2032":3,"2035":1,"2036":1,"2037":1,"2038":1,"2041":2,"2043":1,"2044":3,"2046":2,"2047":3,"2048":1,"2053":1,"2055":1,"2057":1,"2061":2,"2063":1,"2066":2,"2068":1,"2070":4,"2072":4,"2073":1,"2076":1,"2077":1,"2079":1,"2080":1,"2081":1,"2082":1,"2083":1,"2085":3,"2092":3,"2093":1,"2098":2,"2099":2,"2100":1,"2105":1,"2106":1,"2108":1,"2109":1,"2111":1,"2113":1,"2114":2,"2118":1,"2122":2,"2126":5,"2127":1,"2131":1,"2132":3,"2134":1,"2136":1,"2139":1,"2142":1,"2143":1,"2148":2,"2150":3,"2152":1,"2154":2,"2155":1,"2156":2,"2160":1,"2162":1,"2163":3,"2164":1,"2166":2,"2167":1,"2168":2,"2171":1,"2172":1,"2174":1,"2179":1,"2180":1,"2181":2,"2183":3,"2185":1,"2186":1,"2192":2,"2193":1,"2195":1,"2197":1,"2232":1}}],["drudgery",{"3":{"1359":1}}],["dry",{"3":{"1229":1,"1237":1,"1271":1,"1300":1,"1323":1,"1350":1,"1436":1,"1496":2,"2070":1}}],["drown",{"3":{"1527":1}}],["drove",{"3":{"1021":1,"1347":1,"1350":1,"1368":1,"1369":1,"1492":1}}],["droplink",{"3":{"1359":1}}],["dropdatabaseasync",{"3":{"1436":1}}],["dropdeferred",{"2":{"1286":1},"3":{"1274":1,"1286":4,"1840":1}}],["dropdowns",{"3":{"1244":1,"1247":2,"1286":1,"1311":1,"1324":2,"1344":1,"1350":1,"1371":1,"1395":1,"1640":1,"1748":2,"2074":1}}],["dropdown",{"3":{"329":1,"330":1,"1311":4,"1380":1,"1395":5,"1632":1,"1773":1,"1987":1,"1988":1}}],["dropforeignkey",{"2":{"566":1},"3":{"566":1}}],["dropindex",{"2":{"293":1},"3":{"0":2,"293":1,"564":4,"1455":2}}],["droptable",{"2":{"293":1},"3":{"0":1,"293":1,"564":2,"1455":2}}],["dropcolumn",{"2":{"293":1,"563":1},"3":{"0":1,"293":1,"563":1,"564":2,"1455":2}}],["dropschema",{"2":{"566":1},"3":{"566":1}}],["drops",{"3":{"0":5,"20":1,"120":1,"132":1,"150":1,"243":2,"261":1,"383":2,"395":1,"397":3,"398":1,"399":1,"409":1,"505":1,"511":2,"512":1,"543":2,"549":1,"564":1,"565":1,"572":1,"583":1,"586":1,"591":1,"609":1,"633":2,"640":1,"649":1,"674":1,"675":1,"698":1,"700":1,"709":1,"775":1,"831":1,"867":1,"870":1,"881":1,"891":2,"897":1,"917":1,"930":1,"988":2,"1042":1,"1102":1,"1124":2,"1184":1,"1191":1,"1212":1,"1215":1,"1229":1,"1240":1,"1247":4,"1265":1,"1271":1,"1276":1,"1278":1,"1281":2,"1286":10,"1300":1,"1309":1,"1310":1,"1311":5,"1312":3,"1315":1,"1323":4,"1324":15,"1333":1,"1339":1,"1350":5,"1359":16,"1362":1,"1369":1,"1375":1,"1380":5,"1395":8,"1396":10,"1415":3,"1416":1,"1417":5,"1429":1,"1436":22,"1438":3,"1443":3,"1445":1,"1454":1,"1455":1,"1460":1,"1466":1,"1467":5,"1474":1,"1478":1,"1488":1,"1491":1,"1492":1,"1496":1,"1545":1,"1591":1,"1600":1,"1666":1,"1683":3,"1685":1,"1727":3,"1748":1,"1767":1,"1785":1,"1841":1,"1851":1,"1859":1,"1866":1,"1876":1,"1918":1,"1922":2,"1944":1,"1948":1,"1950":1,"2047":1,"2055":1,"2058":1,"2075":1,"2086":1,"2121":1,"2156":1,"2157":1,"2160":1,"2188":1}}],["dropoldest",{"2":{"383":1,"518":1,"520":1,"1099":1,"1100":1,"1101":1,"1102":1,"1947":1,"2183":1},"3":{"0":4,"383":1,"518":2,"520":1,"1099":1,"1100":3,"1101":1,"1102":1,"1212":2,"1396":7,"1400":2,"1944":1,"1947":2,"2183":2}}],["drop",{"0":{"1478":1},"2":{"1333":1,"1443":1},"3":{"0":5,"383":1,"395":1,"397":1,"551":1,"564":1,"565":2,"566":3,"573":1,"617":1,"698":1,"732":1,"741":1,"869":1,"871":1,"890":1,"893":1,"897":1,"905":1,"907":2,"910":1,"916":1,"932":1,"1019":1,"1085":1,"1100":1,"1101":1,"1124":1,"1247":2,"1257":1,"1259":2,"1270":2,"1274":1,"1286":8,"1290":1,"1300":2,"1301":2,"1311":3,"1312":1,"1323":1,"1324":10,"1333":3,"1337":1,"1339":7,"1359":3,"1369":1,"1380":2,"1386":1,"1395":9,"1396":5,"1400":1,"1402":2,"1415":1,"1417":4,"1428":1,"1436":10,"1438":1,"1443":3,"1445":1,"1455":1,"1456":1,"1463":1,"1467":7,"1470":1,"1471":1,"1473":1,"1478":4,"1480":1,"1482":2,"1483":2,"1484":1,"1490":2,"1496":5,"1524":1,"1534":2,"1545":1,"1577":1,"1591":1,"1596":2,"1611":1,"1617":1,"1653":2,"1668":1,"1669":1,"1677":1,"1684":1,"1687":1,"1688":1,"1689":1,"1702":1,"1727":1,"1765":1,"1812":1,"1853":1,"1862":1,"1922":1,"1924":1,"1940":1,"1944":2,"1947":1,"1950":2,"1958":1,"1959":1,"1973":1,"2010":2,"2024":1,"2026":1,"2045":1,"2142":1,"2156":4,"2160":4,"2193":1,"2197":1,"2232":1}}],["droppable",{"3":{"2002":1}}],["dropprimarykey",{"2":{"566":1},"3":{"566":1}}],["dropping",{"3":{"0":3,"24":1,"26":1,"175":1,"196":1,"402":1,"512":1,"545":1,"549":1,"607":1,"633":1,"698":1,"749":1,"838":1,"869":1,"988":1,"989":1,"1012":1,"1028":1,"1241":2,"1247":2,"1257":1,"1259":2,"1270":1,"1286":3,"1300":1,"1311":3,"1323":1,"1324":2,"1339":2,"1355":1,"1359":7,"1380":1,"1395":1,"1396":4,"1416":2,"1417":2,"1427":2,"1438":1,"1443":1,"1467":3,"1473":1,"1489":2,"1490":1,"1526":1,"1705":1,"1727":1,"1815":1,"1947":1,"2001":1,"2187":1}}],["droppedcount",{"2":{"383":1,"1949":1},"3":{"383":1,"1100":1,"1396":4,"1944":1,"1949":1}}],["dropped",{"3":{"0":5,"1":2,"17":1,"19":1,"26":1,"45":1,"47":1,"72":1,"109":1,"110":1,"175":1,"265":1,"279":1,"312":1,"324":1,"335":1,"353":1,"383":1,"386":1,"397":2,"398":1,"399":1,"407":2,"409":1,"427":1,"428":1,"468":1,"518":2,"526":1,"534":1,"535":1,"538":1,"592":1,"607":1,"633":1,"638":1,"664":1,"703":1,"764":2,"766":2,"856":1,"881":1,"914":1,"916":1,"931":1,"988":2,"991":1,"1116":1,"1117":1,"1119":1,"1123":1,"1139":1,"1144":1,"1149":1,"1163":1,"1191":1,"1196":2,"1202":1,"1212":1,"1241":2,"1247":2,"1252":1,"1263":2,"1270":2,"1286":6,"1300":2,"1301":3,"1309":1,"1311":7,"1323":2,"1324":11,"1339":5,"1359":11,"1379":1,"1380":1,"1395":7,"1396":11,"1399":1,"1402":2,"1415":4,"1416":4,"1417":4,"1427":2,"1436":6,"1438":4,"1441":1,"1443":1,"1459":1,"1467":4,"1469":1,"1473":1,"1475":1,"1478":1,"1488":2,"1492":1,"1496":26,"1500":1,"1547":1,"1639":1,"1664":1,"1677":2,"1697":1,"1702":1,"1806":1,"1813":1,"1814":1,"1840":3,"1922":1,"1929":1,"1944":1,"1988":1,"2000":2,"2002":1,"2010":1,"2089":1,"2156":2,"2164":1,"2168":1,"2182":1}}],["dressed",{"3":{"1019":1}}],["drew",{"3":{"571":1}}],["drama",{"3":{"2161":1,"2166":1}}],["dragging",{"3":{"1286":1,"1301":1,"1324":1,"1359":1,"1395":1,"1396":1,"1404":1,"1436":1,"1455":1,"1805":1,"2165":1}}],["dragged",{"3":{"608":1,"1217":1,"1467":1,"2158":1}}],["drags",{"3":{"673":1,"1067":1,"1286":2,"1311":1,"1325":1,"1350":1,"1436":1,"1438":1,"1459":1,"1585":1,"1863":1,"2004":1,"2073":1,"2172":1}}],["drag",{"3":{"640":1,"1061":1,"1286":1,"1300":1,"1306":1,"1309":1,"1436":3,"1459":1,"2071":1}}],["drafts",{"3":{"464":1}}],["draft",{"2":{"384":1},"3":{"384":1,"1350":1,"1380":2,"1384":1,"1389":2,"1395":5,"1396":3,"1398":1,"1399":1,"1402":20,"1436":1,"1630":1,"1632":2}}],["draw",{"3":{"799":1,"1286":2,"1300":3,"1301":1,"1309":1,"1324":1,"1350":2,"1395":2,"1396":2,"1402":1,"1417":3,"1572":1,"1788":1,"1793":1,"2002":1,"2146":1,"2203":1,"2241":1}}],["drawing",{"2":{"681":1,"1480":2},"3":{"681":1,"1415":1,"1436":1,"1480":3}}],["drawericon",{"3":{"1324":1}}],["drawertext",{"3":{"1324":1}}],["drawerbackground",{"3":{"1324":1}}],["drawers",{"3":{"650":1,"1324":1}}],["drawer",{"3":{"648":1,"649":1,"1324":3,"1577":1,"1591":1,"1600":2,"1669":1,"1712":1,"1713":2,"1714":1,"1741":1,"1742":2,"1750":2,"1759":1,"1768":1,"1773":1,"2077":1}}],["draws",{"3":{"310":1,"359":1,"499":1,"946":1,"1059":2,"1259":3,"1262":1,"1270":1,"1286":6,"1300":3,"1309":1,"1311":2,"1323":2,"1324":3,"1339":2,"1350":1,"1359":3,"1369":2,"1380":1,"1395":1,"1396":2,"1415":2,"1417":2,"1433":1,"1436":1,"1455":1,"1982":1,"2055":1,"2142":1,"2201":1}}],["drawn",{"3":{"24":1,"136":1,"1262":1,"1286":2,"1300":1,"1311":1,"1323":1,"1324":1,"1359":1,"1369":1,"1396":1,"1417":1,"1487":1,"1494":1,"1517":1,"1631":1,"1793":1,"1999":1,"2044":1,"2099":1,"2136":1,"2239":1}}],["drainallasync",{"3":{"1259":2,"1275":1,"1286":2}}],["drainable",{"3":{"1237":1}}],["drainers",{"3":{"1436":1}}],["drainer",{"3":{"1248":1}}],["drained",{"3":{"0":1,"78":1,"702":1,"845":1,"848":1,"849":1,"1068":1,"1237":1,"1254":1,"1259":4,"1286":2,"1323":2,"1380":1,"1396":1,"1402":1,"1415":1,"1436":1,"1478":1,"1808":1,"1842":1,"1889":1,"1890":1,"1891":1,"1947":1,"2020":1}}],["draining",{"3":{"256":1,"573":1,"847":2,"1257":2,"1259":2,"1275":1,"1286":1,"1323":1,"1367":1,"1417":1,"1438":1,"1665":1,"1891":1,"1945":1}}],["drain",{"0":{"2188":1},"1":{"515":1,"516":1,"517":1,"518":1,"519":1,"520":1,"521":1,"522":1,"523":1,"524":1,"1097":1,"1098":1,"1099":1,"1100":1,"1101":1,"1102":1,"1103":1,"1104":1},"3":{"0":6,"15":1,"20":1,"24":1,"78":1,"383":1,"515":1,"516":1,"517":1,"518":6,"520":1,"541":1,"573":1,"706":2,"709":1,"897":1,"1016":1,"1018":1,"1022":1,"1043":1,"1068":1,"1097":1,"1100":4,"1101":1,"1102":1,"1150":1,"1152":1,"1157":1,"1212":2,"1233":1,"1237":1,"1259":7,"1275":4,"1286":4,"1307":2,"1309":4,"1318":1,"1323":1,"1339":2,"1367":1,"1368":1,"1369":1,"1396":20,"1400":1,"1402":9,"1417":1,"1436":4,"1438":1,"1467":2,"1492":3,"1496":1,"1525":1,"1577":1,"1665":1,"1675":1,"1839":1,"1846":1,"1889":1,"1892":1,"1944":2,"1946":1,"1947":2,"1949":2,"1950":2,"2154":1,"2156":2,"2160":2,"2183":1,"2187":1,"2193":1,"2232":2}}],["drains10000messages",{"3":{"1492":1}}],["drainsource",{"3":{"1286":1}}],["drains",{"3":{"0":2,"25":1,"27":1,"47":1,"124":1,"193":1,"198":1,"255":1,"413":1,"518":1,"571":1,"583":1,"673":1,"698":1,"701":1,"703":1,"1034":1,"1037":1,"1041":1,"1100":1,"1140":1,"1212":1,"1237":1,"1254":2,"1257":1,"1258":1,"1259":8,"1273":1,"1275":3,"1286":8,"1318":1,"1323":4,"1324":1,"1396":2,"1399":1,"1402":1,"1415":1,"1416":1,"1417":6,"1436":2,"1438":2,"1526":1,"1577":1,"1665":1,"1790":1,"1812":1,"1837":1,"1841":2,"1851":2,"2012":1,"2121":1,"2157":1,"2160":1,"2183":1}}],["dr",{"0":{"1474":1,"1475":2,"2036":1},"3":{"0":3,"68":2,"69":1,"70":1,"87":1,"625":4,"626":5,"628":4,"756":1,"971":1,"972":1,"973":1,"974":1,"1212":3,"1452":1,"1455":2,"1460":15,"1461":2,"1463":1,"1467":1,"1471":3,"1473":1,"1474":7,"1475":63,"1476":1,"1482":4,"1483":8,"1484":2,"1486":2,"1496":6,"1525":3,"1526":10,"1534":1,"1535":2,"1588":1,"1590":3,"1591":9,"1596":1,"1600":3,"1706":2,"1710":2,"2034":3,"2037":1,"2038":1,"2232":1}}],["drilling",{"3":{"1526":1,"1555":1}}],["drills",{"3":{"1474":1,"1707":1,"2038":1}}],["drillresult",{"3":{"1199":2,"1207":1}}],["drill",{"0":{"1475":3,"1710":1},"2":{"1475":3},"3":{"0":2,"68":1,"69":1,"70":1,"625":7,"626":3,"627":1,"628":3,"630":1,"1212":1,"1438":1,"1452":1,"1455":1,"1460":23,"1461":2,"1467":1,"1471":4,"1474":16,"1475":91,"1482":6,"1483":11,"1484":4,"1496":7,"1525":3,"1526":8,"1535":2,"1575":1,"1577":3,"1582":1,"1586":1,"1590":2,"1591":7,"1600":2,"1670":1,"1674":1,"1706":4,"1707":5,"1709":4,"1710":5,"1800":1,"2029":1,"2034":10,"2035":1,"2037":4,"2038":4,"2146":1,"2232":1}}],["drilled",{"0":{"2034":1},"1":{"2029":1,"2030":1,"2031":1,"2032":1,"2033":1,"2034":1,"2035":1,"2036":1,"2037":1,"2038":1},"3":{"0":1,"68":2,"69":1,"71":1,"294":1,"568":1,"608":1,"614":1,"625":1,"630":1,"758":1,"762":1,"1212":1,"1467":1,"1474":1,"1475":1,"1525":1,"1526":1,"1535":1,"1588":1,"1590":1,"1591":1,"1600":1,"1784":1,"2028":1,"2029":3,"2034":2,"2037":2,"2038":1,"2209":1,"2232":1}}],["driving",{"3":{"0":2,"39":1,"572":1,"650":1,"1018":1,"1229":1,"1259":1,"1286":2,"1300":1,"1311":1,"1324":3,"1339":1,"1402":1,"1417":2,"1431":1,"1436":9,"1437":1,"1438":1,"1577":1,"1999":1,"2054":1}}],["drive",{"3":{"864":1,"953":1,"1162":1,"1229":3,"1230":1,"1248":1,"1256":1,"1259":4,"1286":4,"1317":1,"1320":1,"1323":1,"1324":7,"1335":1,"1339":1,"1342":1,"1350":1,"1359":4,"1369":1,"1396":3,"1402":1,"1415":1,"1417":1,"1428":1,"1436":7,"1438":1,"1487":1,"1489":2,"1513":1,"1526":1,"1566":1,"1591":1,"1868":1,"1948":1,"2000":1,"2079":1,"2169":1,"2239":1}}],["driven",{"0":{"1355":1,"1508":1,"1541":1,"1543":1},"1":{"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1},"3":{"0":5,"96":1,"117":2,"126":1,"136":1,"142":1,"157":1,"165":1,"200":1,"297":1,"359":1,"365":1,"402":1,"507":1,"549":1,"564":1,"572":1,"574":1,"599":1,"690":1,"706":2,"759":1,"838":1,"856":1,"881":2,"916":1,"923":1,"927":1,"947":1,"1012":1,"1050":1,"1124":2,"1194":1,"1202":1,"1203":1,"1212":3,"1213":1,"1216":2,"1225":1,"1230":1,"1231":2,"1234":1,"1236":1,"1237":11,"1238":1,"1239":1,"1245":1,"1247":5,"1249":1,"1259":28,"1260":1,"1269":2,"1270":10,"1271":2,"1281":1,"1286":23,"1300":2,"1304":1,"1309":17,"1311":7,"1312":3,"1316":1,"1317":1,"1323":12,"1324":21,"1326":1,"1333":1,"1339":2,"1340":1,"1343":1,"1345":1,"1346":1,"1350":52,"1352":1,"1355":1,"1359":85,"1369":1,"1370":1,"1380":9,"1383":1,"1384":1,"1390":1,"1395":7,"1396":38,"1402":25,"1403":1,"1405":1,"1413":1,"1415":26,"1416":1,"1417":10,"1421":1,"1427":1,"1435":1,"1436":63,"1437":1,"1438":8,"1441":2,"1443":2,"1446":2,"1450":2,"1454":1,"1455":1,"1463":1,"1467":1,"1476":1,"1487":1,"1488":3,"1489":3,"1493":1,"1496":5,"1499":2,"1512":1,"1525":1,"1526":3,"1535":2,"1546":1,"1547":1,"1551":1,"1557":1,"1568":1,"1577":6,"1581":1,"1582":1,"1583":1,"1585":1,"1586":1,"1591":3,"1597":1,"1600":1,"1621":1,"1627":1,"1638":1,"1652":1,"1664":1,"1668":1,"1752":1,"1796":2,"1800":1,"1812":1,"1815":2,"1821":1,"1862":1,"1888":1,"1892":2,"1929":3,"1933":1,"1948":1,"1956":1,"2013":1,"2045":1,"2072":1,"2079":1,"2096":1,"2098":1,"2114":1,"2142":1,"2162":1,"2167":1,"2182":1,"2212":1,"2213":3,"2216":1,"2217":1,"2218":2,"2219":2,"2230":2,"2238":1,"2239":2,"2240":2}}],["drives",{"3":{"0":1,"70":1,"142":1,"166":1,"176":1,"239":1,"330":1,"536":2,"572":2,"625":1,"627":1,"657":1,"832":1,"838":1,"859":1,"861":3,"863":1,"864":1,"907":2,"925":1,"954":1,"1217":1,"1229":3,"1274":1,"1286":7,"1300":2,"1310":2,"1311":7,"1315":1,"1323":4,"1324":12,"1337":1,"1339":6,"1342":1,"1350":8,"1359":9,"1369":2,"1380":5,"1395":4,"1396":9,"1402":1,"1406":2,"1415":2,"1416":2,"1417":4,"1425":1,"1427":1,"1428":1,"1433":2,"1435":1,"1436":28,"1438":12,"1456":1,"1487":1,"1488":2,"1489":1,"1490":1,"1492":1,"1513":1,"1611":2,"1650":1,"1664":1,"1726":1,"1732":1,"1765":1,"1805":1,"1865":1,"1881":1,"1988":1,"2024":1,"2044":1,"2055":2,"2075":1,"2177":1}}],["driver",{"3":{"0":1,"96":1,"388":1,"1436":4,"1455":2,"1496":1}}],["drifting",{"3":{"148":1,"841":1,"1247":1,"1259":1,"1271":1,"1300":1,"1301":1,"1309":2,"1311":2,"1324":2,"1332":1,"1339":2,"1359":5,"1369":1,"1380":1,"1395":1,"1402":2,"1415":1,"1417":1,"1431":1,"1436":9,"1441":1,"1443":1,"1475":1,"2042":1,"2080":1,"2097":1}}],["drift",{"3":{"0":5,"26":1,"57":1,"61":1,"70":1,"94":1,"100":1,"126":1,"130":2,"136":1,"137":1,"138":1,"215":1,"242":1,"256":1,"265":1,"291":1,"293":1,"296":2,"331":1,"341":1,"372":1,"373":1,"426":1,"449":1,"484":1,"493":1,"511":1,"526":1,"529":1,"530":1,"545":1,"558":1,"567":1,"608":1,"619":1,"634":2,"658":1,"691":1,"734":2,"764":2,"766":8,"767":3,"768":2,"783":1,"784":1,"821":1,"831":1,"832":1,"836":1,"838":2,"839":1,"872":1,"883":1,"940":1,"973":1,"1006":1,"1014":1,"1018":3,"1019":2,"1020":1,"1101":1,"1124":1,"1212":2,"1224":1,"1227":1,"1229":3,"1237":1,"1240":1,"1253":1,"1262":1,"1270":3,"1271":2,"1278":1,"1286":6,"1300":12,"1301":2,"1305":1,"1309":4,"1311":9,"1312":1,"1320":1,"1323":3,"1324":12,"1330":2,"1336":1,"1339":9,"1350":9,"1356":1,"1358":1,"1359":39,"1366":1,"1369":2,"1372":1,"1380":2,"1384":1,"1395":10,"1396":17,"1398":1,"1402":9,"1405":1,"1409":1,"1415":4,"1416":2,"1427":2,"1431":2,"1436":38,"1438":2,"1441":1,"1442":1,"1443":1,"1449":1,"1453":2,"1454":3,"1455":6,"1457":4,"1461":2,"1467":3,"1469":2,"1476":2,"1479":1,"1489":3,"1490":1,"1492":1,"1496":31,"1500":1,"1524":1,"1525":1,"1526":12,"1528":1,"1531":1,"1535":1,"1545":1,"1546":1,"1553":1,"1554":2,"1562":1,"1576":1,"1577":8,"1579":1,"1582":1,"1585":1,"1586":1,"1591":7,"1592":1,"1600":1,"1614":1,"1654":1,"1666":1,"1671":2,"1673":1,"1677":1,"1686":1,"1731":1,"1805":1,"1809":1,"1818":1,"1819":1,"1827":1,"1828":1,"1830":1,"1834":1,"1862":1,"1928":1,"1929":1,"1962":1,"1987":2,"1991":1,"2006":1,"2011":1,"2014":1,"2024":1,"2042":2,"2043":1,"2049":1,"2073":1,"2075":2,"2083":1,"2130":1,"2131":1,"2135":1,"2153":1,"2158":1,"2159":1,"2176":1,"2193":1}}],["driftedmarkedcommandhandler",{"3":{"1199":2,"1207":1}}],["driftedmarkedcommand",{"3":{"1199":3,"1207":1,"1270":1}}],["driftedtests",{"3":{"1198":1,"1199":4,"1207":2,"1436":24,"1496":2}}],["drifted",{"3":{"0":2,"136":2,"137":1,"140":1,"142":1,"161":1,"213":1,"251":1,"252":2,"254":2,"257":1,"258":1,"259":1,"291":1,"373":1,"466":1,"609":1,"644":1,"648":1,"744":1,"857":1,"876":2,"952":1,"959":1,"1020":1,"1322":1,"1323":1,"1324":3,"1330":1,"1339":1,"1350":1,"1380":1,"1384":1,"1396":1,"1431":1,"1436":20,"1460":1,"1474":1,"1476":1,"1487":1,"1489":2,"1490":1,"1496":9,"1500":1,"2044":2,"2046":1,"2148":1}}],["drifts",{"3":{"0":1,"185":1,"329":1,"517":1,"634":1,"706":1,"791":1,"973":1,"1006":1,"1237":1,"1396":1,"1415":1,"1436":6,"1453":1,"1662":1,"1673":1,"1701":1,"1730":1,"1834":1,"1948":1,"1960":2,"1986":1,"1991":1,"2050":1,"2097":1,"2147":1,"2155":1}}],["degenerate",{"3":{"1247":1,"1324":1}}],["degrees",{"3":{"1315":1,"1417":2}}],["degree",{"3":{"583":2,"1315":2,"1323":2,"1417":1,"1881":3}}],["degradable",{"3":{"1311":2,"1670":1}}],["degradationwarned",{"3":{"1323":2}}],["degradation",{"3":{"68":1,"71":1,"182":1,"235":2,"413":1,"682":1,"725":1,"727":1,"898":1,"901":1,"996":2,"1259":1,"1270":1,"1286":1,"1300":4,"1301":1,"1309":3,"1311":3,"1316":1,"1323":6,"1324":5,"1332":2,"1339":3,"1349":1,"1350":4,"1358":1,"1359":4,"1369":2,"1395":2,"1396":5,"1415":1,"1416":1,"1417":17,"1438":4,"1443":3,"1450":1,"1467":1,"1524":2,"1526":2,"1544":1,"1559":1,"1566":1,"1577":1,"1638":1,"1707":2,"1910":1,"1912":1,"2007":1,"2067":1,"2162":1}}],["degrading",{"3":{"212":1,"601":1,"684":1,"700":1,"1237":1,"1284":1,"1286":1,"1300":2,"1311":1,"1324":2,"1339":1,"1350":1,"1359":2,"1380":2,"1391":1,"1396":1,"1401":1,"1402":1,"1415":1,"1417":1,"1455":1,"1467":1,"1851":1,"1859":1,"1927":1,"1933":1,"2197":1}}],["degradeforeignkey",{"3":{"1286":2}}],["degradetestcontext",{"3":{"1199":2,"1207":1}}],["degradecustomer",{"3":{"1198":1,"1199":4,"1207":1}}],["degradeorder",{"3":{"1198":1,"1199":4,"1207":1}}],["degraded",{"2":{"157":1,"159":1,"161":1,"1909":1,"1911":1},"3":{"157":2,"159":1,"161":1,"440":1,"583":2,"585":1,"603":1,"676":1,"726":1,"821":1,"932":1,"997":1,"1247":1,"1270":1,"1286":1,"1300":1,"1301":2,"1304":1,"1309":2,"1311":9,"1323":7,"1337":3,"1339":5,"1396":1,"1415":1,"1417":10,"1436":2,"1443":1,"1577":1,"1627":1,"1666":1,"1858":1,"1859":1,"1909":2,"1911":1,"1934":1,"2006":1,"2013":1,"2126":1,"2156":1}}],["degrade",{"3":{"49":1,"166":1,"167":1,"168":1,"169":1,"413":1,"585":1,"665":1,"724":1,"997":1,"1083":1,"1086":1,"1212":2,"1228":1,"1247":1,"1270":3,"1286":4,"1301":1,"1309":1,"1311":1,"1323":3,"1324":3,"1339":1,"1356":1,"1359":6,"1377":1,"1380":1,"1395":3,"1396":7,"1415":3,"1417":6,"1436":1,"1438":4,"1467":2,"1500":1,"1510":1,"1531":1,"1663":1,"1708":1,"1849":1,"1860":1,"1862":1,"1864":1,"1868":1,"1970":1,"2053":1,"2079":1,"2119":1,"2126":1,"2230":1}}],["degradesgracefully",{"3":{"1707":1}}],["degradestotheplaininbox",{"3":{"1436":1}}],["degrades",{"0":{"2067":1},"3":{"0":2,"178":1,"235":1,"255":1,"266":1,"350":1,"391":1,"461":2,"507":1,"511":1,"584":1,"792":1,"854":1,"896":1,"905":1,"995":1,"1212":1,"1229":1,"1236":1,"1237":1,"1247":2,"1250":1,"1259":2,"1264":1,"1266":1,"1270":2,"1283":1,"1285":1,"1286":5,"1290":1,"1299":1,"1300":9,"1301":5,"1309":1,"1311":4,"1312":2,"1322":1,"1323":8,"1324":5,"1328":1,"1332":1,"1339":5,"1350":1,"1359":10,"1378":1,"1380":4,"1395":14,"1396":7,"1401":1,"1402":3,"1410":1,"1415":6,"1416":2,"1417":14,"1438":2,"1443":2,"1444":1,"1467":1,"1476":1,"1534":1,"1641":1,"1666":1,"1668":1,"1685":1,"1708":1,"1729":1,"1751":1,"1772":1,"1858":1,"1917":1,"1922":1,"1923":1,"1924":1,"1952":1,"1977":1,"1982":1,"1991":1,"2001":1,"2007":1,"2067":1,"2083":1,"2086":1,"2118":1,"2119":1,"2123":1,"2232":1}}],["dequeued",{"3":{"1323":1}}],["deque",{"2":{"1453":1},"3":{"1213":1,"1436":2,"1488":1}}],["dereferenced",{"3":{"1359":1}}],["dereference",{"3":{"1300":1,"1324":1,"1372":1,"1396":1,"1467":1}}],["dereferences",{"3":{"448":1,"1311":1,"1359":3,"1436":2,"2131":1}}],["dereferencing",{"3":{"1300":1,"1436":1}}],["deregistration",{"3":{"1247":1}}],["derivable",{"3":{"1396":1,"1436":1,"1638":1}}],["derivatives",{"3":{"1599":1}}],["derivative",{"3":{"741":1,"743":1,"1050":1,"1051":1,"1235":2,"1237":2,"1395":2}}],["derivations",{"3":{"0":1,"963":1,"964":1,"1227":1,"1286":1,"1359":1,"1805":1}}],["derivation",{"3":{"0":2,"279":1,"309":2,"539":1,"946":1,"963":1,"1004":1,"1006":1,"1018":1,"1282":1,"1289":1,"1300":10,"1311":1,"1395":2,"1396":3,"1436":5,"1453":1,"1454":1,"1856":1,"1902":2}}],["deriving",{"3":{"0":1,"32":1,"202":1,"218":1,"634":1,"723":1,"725":1,"739":1,"742":1,"782":2,"854":1,"883":1,"932":1,"946":1,"963":3,"966":1,"1026":1,"1042":1,"1092":1,"1237":1,"1239":1,"1259":1,"1270":2,"1279":1,"1286":13,"1300":4,"1309":3,"1311":2,"1323":1,"1324":2,"1350":3,"1359":11,"1369":2,"1380":1,"1382":1,"1395":5,"1396":2,"1402":2,"1415":3,"1416":1,"1436":20,"1441":2,"1467":1,"2055":1,"2080":1,"2176":1,"2184":1}}],["derivequestionentity",{"3":{"1359":1}}],["derive",{"3":{"0":1,"111":1,"305":1,"459":1,"465":1,"540":1,"651":1,"657":1,"780":2,"782":1,"784":1,"881":3,"954":1,"956":1,"960":1,"963":1,"1034":1,"1058":1,"1212":3,"1229":2,"1235":1,"1237":2,"1247":2,"1252":1,"1259":5,"1270":1,"1271":1,"1282":1,"1286":2,"1300":6,"1301":1,"1309":2,"1311":2,"1313":1,"1317":1,"1323":6,"1324":5,"1339":2,"1342":1,"1345":2,"1350":5,"1353":1,"1359":4,"1361":1,"1369":1,"1371":2,"1380":2,"1383":1,"1395":6,"1396":7,"1399":1,"1402":4,"1415":1,"1417":1,"1436":6,"1454":2,"1585":1,"1663":1,"1769":2,"1829":1,"1856":1,"1857":1,"1886":1,"1925":1,"2030":1,"2198":1}}],["derivedoverride",{"3":{"2000":1}}],["derivedatasourcekey",{"3":{"1286":2}}],["derivedupdatecommandtests",{"2":{"926":1},"3":{"926":1,"1199":1,"1207":1}}],["derived",{"1":{"631":1,"632":1,"633":1,"634":1,"635":1,"636":1},"3":{"0":5,"135":1,"147":1,"175":1,"186":1,"208":1,"235":1,"273":1,"328":1,"350":1,"507":1,"539":1,"585":1,"609":2,"631":1,"633":1,"780":2,"922":1,"923":1,"926":2,"927":1,"946":2,"954":1,"964":1,"1004":1,"1017":1,"1018":1,"1026":1,"1034":1,"1037":1,"1116":1,"1125":1,"1161":1,"1212":1,"1221":1,"1229":5,"1235":1,"1237":13,"1240":1,"1242":1,"1244":1,"1247":3,"1256":1,"1259":5,"1263":1,"1265":5,"1270":17,"1271":1,"1286":12,"1291":1,"1300":21,"1309":1,"1310":3,"1311":12,"1312":1,"1317":1,"1321":1,"1323":9,"1324":13,"1326":1,"1339":9,"1342":1,"1347":1,"1348":1,"1350":5,"1354":2,"1359":21,"1362":1,"1369":6,"1372":1,"1380":1,"1383":1,"1385":1,"1395":28,"1396":15,"1402":6,"1415":5,"1416":1,"1417":3,"1427":3,"1431":2,"1436":44,"1438":4,"1441":2,"1443":1,"1454":1,"1455":1,"1465":1,"1467":2,"1470":1,"1476":1,"1488":1,"1492":1,"1496":5,"1529":1,"1538":1,"1571":1,"1580":1,"1594":1,"1630":4,"1631":2,"1635":1,"1640":1,"1651":1,"1658":1,"1666":2,"1667":1,"1684":1,"1695":1,"1705":1,"1715":1,"1727":2,"1755":1,"1764":5,"1765":1,"1767":2,"1777":1,"1805":1,"1810":1,"1849":2,"1856":1,"1880":1,"1962":1,"1965":2,"1982":1,"2000":3,"2043":1,"2046":1,"2075":1,"2083":1,"2089":1,"2110":1,"2232":1}}],["derivesfrombaseentity",{"3":{"1436":2}}],["derives",{"3":{"0":6,"25":1,"81":1,"109":1,"166":1,"231":1,"310":1,"370":1,"459":1,"499":1,"501":1,"534":1,"536":2,"545":1,"549":1,"575":1,"585":1,"618":1,"741":1,"751":1,"879":1,"884":1,"905":1,"909":1,"922":1,"925":1,"926":2,"944":1,"946":1,"954":1,"964":1,"972":1,"974":1,"1004":1,"1036":1,"1050":1,"1140":1,"1212":1,"1213":1,"1229":1,"1237":3,"1259":4,"1270":2,"1271":2,"1276":1,"1286":17,"1288":2,"1292":1,"1297":1,"1300":9,"1309":4,"1310":1,"1311":10,"1318":1,"1323":5,"1324":6,"1328":1,"1339":2,"1342":1,"1350":6,"1352":2,"1355":2,"1357":2,"1359":29,"1364":1,"1369":2,"1371":1,"1379":1,"1380":5,"1388":1,"1389":1,"1395":8,"1396":4,"1402":4,"1415":2,"1416":1,"1417":1,"1427":1,"1431":2,"1436":28,"1449":1,"1454":2,"1488":2,"1492":1,"1810":1,"1902":2,"1908":1,"1927":1,"2043":1,"2072":1,"2074":1,"2163":1,"2165":1,"2167":1}}],["deal",{"3":{"1350":1,"1931":1}}],["deactivation",{"3":{"497":2,"499":1,"1755":2,"1776":1}}],["deactivating",{"3":{"458":1}}],["deactivate",{"2":{"497":1,"1755":1,"1776":1},"3":{"497":1,"499":1,"1324":1,"1436":2,"1755":1,"1769":1,"1776":1}}],["deactivated",{"3":{"284":1,"460":1,"499":1,"1300":2,"1417":1,"1455":1,"1461":1,"1747":2,"1983":1,"2066":2}}],["death",{"3":{"444":1}}],["deadletterasync",{"3":{"1286":1}}],["deadletteredon",{"2":{"2186":1},"3":{"1286":5,"1323":2,"2186":1}}],["deadlettered",{"2":{"1273":1},"3":{"1273":1}}],["deadlettercounter",{"3":{"707":1,"1259":2,"1286":1}}],["deadletterretentiondays",{"2":{"818":1,"1256":1},"3":{"0":2,"20":1,"24":1,"818":1,"1256":1,"1259":1,"1286":1,"1467":1,"1496":1,"1577":1,"1845":1}}],["deadlocking",{"3":{"1493":1}}],["deadlock",{"0":{"1328":1},"3":{"55":1,"481":1,"1066":1,"1068":1,"1286":1,"1301":1,"1312":1,"1328":2,"1339":1,"1378":1,"1441":3,"1492":1,"1549":1,"1670":1,"1684":1,"1792":1,"2009":1,"2030":1,"2056":1}}],["deadlocks",{"3":{"0":1,"483":1,"1212":1,"1300":1,"1430":1,"1653":1,"1700":1,"2022":1}}],["deadlineexceeded",{"3":{"100":1,"1396":1}}],["deadlinescheduler",{"2":{"814":1},"3":{"814":1}}],["deadlines",{"3":{"0":1,"810":1,"1160":1,"1212":1,"1380":1,"2168":1,"2169":1}}],["deadline",{"0":{"539":1,"813":1},"3":{"0":5,"237":1,"534":2,"536":2,"538":2,"539":8,"541":2,"724":1,"725":1,"808":1,"809":2,"810":3,"812":1,"813":3,"815":2,"1067":1,"1153":1,"1212":2,"1286":1,"1300":2,"1307":1,"1309":2,"1312":3,"1323":2,"1359":1,"1378":2,"1380":10,"1396":8,"1413":1,"1415":4,"1430":1,"1433":1,"1436":4,"1438":1,"1449":1,"1467":1,"1476":1,"1481":1,"1496":1,"1600":1,"1780":1,"1927":1,"1946":1,"2161":1,"2165":1,"2167":4,"2168":3,"2169":1,"2232":1}}],["dead",{"0":{"1256":1},"2":{"20":1,"397":1,"1256":1,"1442":1,"2191":1},"3":{"0":11,"15":4,"17":1,"19":2,"20":3,"21":1,"22":2,"23":1,"24":7,"26":1,"27":3,"71":1,"122":1,"125":1,"195":1,"223":1,"229":1,"230":3,"305":1,"310":1,"395":4,"396":1,"397":3,"398":1,"399":2,"404":2,"406":1,"409":1,"413":2,"444":1,"464":2,"465":1,"497":1,"536":1,"537":1,"539":1,"607":1,"608":1,"609":4,"611":2,"627":1,"708":1,"709":1,"751":1,"756":1,"791":1,"810":2,"815":1,"817":1,"818":2,"819":1,"820":1,"823":1,"848":1,"849":2,"896":1,"907":1,"935":1,"963":1,"1011":1,"1012":1,"1041":1,"1042":3,"1044":1,"1046":1,"1075":1,"1076":1,"1099":1,"1100":1,"1144":1,"1212":2,"1233":2,"1237":4,"1247":1,"1255":1,"1256":6,"1258":1,"1259":36,"1270":1,"1271":3,"1275":3,"1286":16,"1300":6,"1301":2,"1309":2,"1311":7,"1317":1,"1318":2,"1323":15,"1324":10,"1330":1,"1339":2,"1355":1,"1359":7,"1391":2,"1392":1,"1395":9,"1396":9,"1402":1,"1415":3,"1417":10,"1436":11,"1438":5,"1442":1,"1443":1,"1456":1,"1465":1,"1467":4,"1469":1,"1476":3,"1482":1,"1489":1,"1496":5,"1524":1,"1526":5,"1531":2,"1547":3,"1552":1,"1572":1,"1577":2,"1589":1,"1591":4,"1596":3,"1599":1,"1615":1,"1617":1,"1661":1,"1665":4,"1677":1,"1841":1,"1843":1,"1845":1,"1910":1,"1922":1,"1923":2,"1944":1,"1950":1,"1984":1,"2006":1,"2007":1,"2032":2,"2121":1,"2154":1,"2156":4,"2158":1,"2159":1,"2165":2,"2167":1,"2169":1,"2182":4,"2183":1,"2187":1,"2190":1,"2191":3,"2193":4}}],["de",{"3":{"219":1,"649":1,"651":1,"1059":1,"1140":1,"1270":1,"1271":2,"1286":2,"1300":3,"1311":3,"1323":2,"1324":4,"1339":2,"1359":5,"1369":1,"1395":4,"1415":2,"1433":1,"1436":3,"1496":1,"1526":1,"1686":4,"1765":1,"1830":1,"2150":1}}],["detour",{"3":{"1323":2}}],["determinable",{"0":{"1451":1,"1470":1,"1484":1,"1500":1},"3":{"530":1,"599":1,"629":1,"665":1,"1190":1,"1237":1,"1247":1,"1259":2,"1286":8,"1300":2,"1311":5,"1312":1,"1323":10,"1324":5,"1339":8,"1359":14,"1369":2,"1380":4,"1395":7,"1396":7,"1402":2,"1415":9,"1416":5,"1417":9,"1436":3,"1458":1,"1467":1,"1470":2,"1496":1}}],["determinism",{"3":{"360":1,"364":1,"1286":3,"1300":2,"1359":1,"1436":1,"1438":1,"1465":1,"2144":1}}],["deterministically",{"3":{"543":1,"549":1,"905":1,"954":1,"1256":1,"1259":3,"1263":1,"1270":1,"1300":1,"1301":1,"1306":1,"1312":1,"1323":1,"1324":1,"1364":1,"1383":1,"1395":1,"1396":2,"1417":2,"1427":1,"1436":3,"1438":1,"1454":1,"1488":1,"1592":1}}],["deterministic",{"3":{"0":1,"23":1,"157":1,"295":1,"359":2,"360":1,"361":2,"363":2,"545":1,"549":1,"551":1,"591":1,"592":2,"721":1,"742":1,"905":1,"907":1,"1019":2,"1163":1,"1227":1,"1229":2,"1284":2,"1286":10,"1290":1,"1300":6,"1309":1,"1311":3,"1323":1,"1324":2,"1350":2,"1355":1,"1359":6,"1369":1,"1380":1,"1392":2,"1395":6,"1396":3,"1402":2,"1415":1,"1417":1,"1427":2,"1428":1,"1432":1,"1435":3,"1436":13,"1438":3,"1455":4,"1465":1,"1479":2,"1488":1,"1492":3,"1496":1,"1526":1,"1551":1,"1577":2,"1590":1,"1591":1,"1675":1,"1805":1,"1982":1,"2052":1,"2060":1,"2142":2,"2144":1,"2145":1,"2146":1,"2170":1}}],["determine",{"3":{"1395":1,"1415":1,"1454":1,"1631":1,"1776":1}}],["determined",{"3":{"283":1,"990":1,"1286":1,"1324":1,"1492":1,"1495":1,"1631":1,"1641":1,"2001":1}}],["determines",{"3":{"20":1,"162":1,"389":1,"1286":2,"1395":1,"1630":4,"1639":1,"2002":1,"2051":1}}],["detectability",{"3":{"1981":1}}],["detectable",{"3":{"498":1,"906":1,"907":1,"1270":1,"1286":1,"1300":1,"1359":1,"1366":1,"1369":2,"1436":1,"1500":1}}],["detectchanges",{"3":{"1273":1,"1286":2,"1585":1}}],["detectchangesscope",{"3":{"1199":2,"1203":1,"1207":1,"1273":1,"1286":3,"1496":1}}],["detectchangesonce",{"3":{"715":1,"1273":1,"1286":3}}],["detect",{"2":{"443":1},"3":{"443":1,"1116":1,"1259":1,"1270":2,"1273":1,"1286":7,"1300":1,"1324":1,"1339":1,"1350":1,"1359":5,"1396":1,"1417":1,"1436":1,"1467":1,"1877":1}}],["detector",{"3":{"305":1,"339":1,"344":1,"1020":1,"1283":1,"1286":3,"1309":1,"1323":1,"1359":1,"1368":2,"1396":5,"1402":1,"1424":1,"1436":21,"1438":1,"1467":2,"1526":1,"1531":1,"1532":1,"1577":1,"1707":1,"1985":2}}],["detects",{"3":{"291":1,"948":1,"974":1,"1237":1,"1274":1,"1286":3,"1300":2,"1324":2,"1332":1,"1339":4,"1352":1,"1359":1,"1380":1,"1395":1,"1396":1,"1417":1,"1430":2,"1431":1,"1436":5,"1457":2,"1661":1,"1728":1,"1729":1,"1876":1,"1903":1}}],["detected",{"3":{"0":1,"259":1,"382":1,"741":1,"792":1,"1067":1,"1168":1,"1286":2,"1311":2,"1324":1,"1339":3,"1350":1,"1366":1,"1417":1,"1436":2,"1443":1,"1455":1,"1571":1,"1729":1}}],["detecting",{"3":{"0":1,"593":2,"733":1,"1068":1,"1284":1,"1359":1,"1436":1,"1591":1,"1729":1}}],["detectiontestdbcontext",{"3":{"1199":2,"1207":1}}],["detection",{"1":{"496":1,"497":1,"498":1,"499":1,"500":1,"501":1,"502":1,"503":1,"1980":1,"1981":1,"1982":1,"1983":1,"1984":1,"1985":1},"3":{"0":3,"403":1,"496":1,"497":1,"498":1,"499":1,"500":2,"501":2,"506":1,"510":1,"608":1,"609":1,"612":1,"614":1,"692":1,"715":2,"733":2,"759":1,"762":1,"801":1,"804":1,"903":1,"904":1,"905":3,"907":3,"910":1,"1058":1,"1192":1,"1212":1,"1237":1,"1247":1,"1259":2,"1270":2,"1273":1,"1283":1,"1286":15,"1287":1,"1290":2,"1300":17,"1323":4,"1324":6,"1338":1,"1339":3,"1359":1,"1396":1,"1406":1,"1415":3,"1417":13,"1433":1,"1436":9,"1437":1,"1438":3,"1455":1,"1461":1,"1467":3,"1469":1,"1476":1,"1486":1,"1496":2,"1526":1,"1531":1,"1532":1,"1585":1,"1639":1,"1641":3,"1660":1,"1712":1,"1722":1,"1729":1,"1765":1,"1779":1,"1979":1,"1980":1,"1981":1,"1982":1,"1983":1,"1984":1,"1985":1,"2146":1,"2194":1,"2208":1,"2220":1,"2232":1}}],["detachobserverasync",{"3":{"1324":1}}],["detaching",{"3":{"1324":1,"1359":1,"1395":1,"1436":1}}],["detached",{"3":{"235":1,"237":1,"898":1,"1251":1,"1259":1,"1286":4,"1339":2,"1350":1,"1359":1,"1454":1}}],["detaches",{"3":{"0":1,"201":2,"1259":1,"1274":1,"1286":1,"1324":1,"1359":3}}],["detach",{"3":{"24":1,"1286":1,"1324":3,"1359":3}}],["detailpage",{"3":{"1496":1}}],["detailpagebasetests",{"3":{"1199":1,"1207":3,"1324":1}}],["detailpagebase",{"3":{"1192":1,"1199":2,"1203":1,"1207":2,"1324":4,"1384":3,"1395":22,"1496":4}}],["detailhref",{"3":{"1324":1}}],["detailed",{"3":{"1312":2,"1313":1,"1324":1,"1340":1,"1441":1,"1630":1,"1641":1,"1663":1,"1764":1}}],["detail",{"0":{"1384":1,"1822":1,"1872":1,"1909":1},"2":{"1926":1},"3":{"0":1,"1":1,"62":1,"72":1,"109":4,"261":1,"342":1,"556":2,"557":1,"559":1,"699":1,"725":1,"748":1,"806":1,"861":2,"905":1,"988":1,"1016":1,"1018":2,"1026":1,"1082":1,"1093":1,"1116":1,"1190":1,"1229":2,"1237":3,"1246":1,"1247":9,"1252":1,"1259":4,"1270":5,"1271":1,"1275":1,"1286":15,"1290":1,"1300":10,"1301":1,"1309":5,"1311":27,"1312":9,"1314":1,"1323":6,"1324":30,"1333":1,"1339":7,"1345":1,"1350":8,"1359":21,"1363":1,"1366":1,"1369":3,"1380":7,"1384":4,"1385":3,"1386":1,"1387":2,"1388":5,"1389":2,"1391":1,"1392":2,"1395":89,"1396":18,"1399":1,"1402":6,"1410":2,"1415":14,"1416":1,"1417":7,"1436":18,"1438":2,"1443":1,"1453":1,"1455":1,"1467":1,"1476":2,"1479":1,"1481":1,"1487":1,"1496":3,"1524":1,"1526":2,"1531":1,"1535":2,"1591":2,"1600":2,"1627":12,"1631":1,"1632":2,"1635":2,"1636":2,"1639":2,"1640":2,"1641":1,"1686":2,"1700":1,"1713":1,"1723":1,"1748":1,"1750":7,"1758":2,"1759":1,"1760":2,"1768":2,"1773":2,"1806":1,"1830":1,"1851":1,"1873":1,"1905":1,"1909":1,"1926":1,"1939":1,"1988":1,"2031":1,"2042":1,"2043":1,"2045":1,"2055":1,"2058":1,"2094":1,"2126":1,"2136":1,"2150":1,"2174":1,"2193":1}}],["detailsurl",{"3":{"1395":4}}],["details",{"1":{"1925":1,"1926":1,"1927":1,"1928":1,"1929":1,"1930":1},"3":{"0":2,"175":1,"341":2,"343":1,"409":1,"453":1,"497":1,"572":4,"574":4,"578":2,"657":1,"741":1,"819":1,"1018":1,"1019":1,"1091":1,"1212":1,"1221":1,"1224":1,"1226":1,"1227":1,"1229":6,"1247":1,"1251":1,"1259":2,"1263":1,"1270":1,"1271":1,"1276":1,"1286":5,"1300":3,"1301":1,"1311":16,"1312":1,"1323":1,"1324":6,"1328":1,"1339":2,"1340":1,"1347":1,"1349":1,"1350":2,"1355":1,"1359":9,"1369":1,"1380":2,"1383":1,"1395":12,"1396":8,"1402":8,"1406":1,"1415":2,"1421":1,"1423":1,"1427":1,"1435":2,"1436":4,"1438":2,"1442":1,"1443":1,"1449":1,"1454":1,"1455":2,"1459":1,"1487":1,"1488":1,"1489":2,"1492":1,"1526":2,"1546":1,"1551":1,"1591":2,"1630":3,"1631":3,"1640":1,"1651":1,"1653":1,"1685":1,"1751":1,"1765":1,"1768":4,"1770":2,"1772":1,"1773":1,"1779":1,"1839":1,"1841":1,"1859":1,"1873":1,"1908":1,"1919":1,"1924":1,"1925":1,"1926":1,"1927":3,"1930":1,"1988":1,"2019":1,"2055":1,"2067":1,"2072":1,"2074":1,"2075":1,"2131":1,"2175":1,"2187":1,"2197":1,"2208":1}}],["deeply",{"3":{"1395":1}}],["deeplinkroute",{"3":{"1396":2,"1417":5}}],["deeplinkrouteshapetests",{"3":{"1199":1,"1207":2,"1417":1}}],["deeplinkrouteeventargs",{"3":{"1199":4,"1203":1,"1207":2,"1417":12}}],["deeplinkrouteguard",{"2":{"418":1,"428":1},"3":{"418":1,"428":2}}],["deeplinkdispatchertests",{"3":{"1199":1,"1207":2,"1417":1}}],["deeplinkdispatcher",{"2":{"418":1,"427":1,"428":1,"430":1,"1416":1,"2118":1,"2121":1},"3":{"0":1,"418":1,"427":2,"428":2,"430":2,"1199":7,"1203":1,"1207":2,"1416":8,"1417":17,"1496":2,"2118":1,"2121":2}}],["deeplinklistenertests",{"3":{"1199":1,"1207":2,"1417":1}}],["deeplinklistener",{"2":{"2121":1},"3":{"0":1,"413":1,"1416":5,"1417":10,"1599":2,"2121":1}}],["deepens",{"3":{"2114":1}}],["deepen",{"3":{"1436":1}}],["deepest",{"3":{"1247":1,"1359":1,"2135":1}}],["deeper",{"3":{"237":1,"1247":1,"1311":1,"1334":1,"1359":3,"1381":1,"1402":1,"1416":1,"1427":1,"1436":4,"1475":1,"1572":1,"1577":1,"1821":1,"1864":1,"1960":1,"2034":1}}],["deep",{"0":{"2121":1,"2215":1,"2235":1,"2237":1},"1":{"417":1,"418":1,"419":1,"420":1,"421":1,"422":1,"423":1,"424":1,"425":1,"426":1,"427":1,"428":1,"429":1,"430":1},"3":{"0":3,"1":1,"121":1,"122":1,"206":1,"208":1,"353":1,"399":1,"413":1,"417":1,"418":1,"424":1,"549":1,"616":1,"618":1,"649":1,"690":1,"854":1,"872":1,"883":1,"1184":1,"1185":1,"1187":1,"1192":2,"1194":1,"1202":1,"1203":1,"1212":1,"1228":1,"1229":4,"1247":1,"1286":3,"1294":1,"1298":1,"1300":2,"1309":1,"1311":2,"1323":3,"1324":19,"1350":4,"1359":1,"1391":1,"1395":3,"1396":14,"1402":1,"1416":14,"1417":22,"1436":4,"1445":1,"1492":1,"1496":3,"1526":1,"1555":2,"1562":1,"1577":2,"1585":1,"1591":1,"1599":2,"1626":1,"1627":1,"1641":2,"1645":1,"1664":1,"1666":1,"1669":3,"1759":1,"1760":1,"1761":1,"1765":1,"1779":45,"1783":1,"1786":1,"1790":1,"1821":2,"1826":1,"1828":1,"1914":1,"1920":1,"1935":1,"1966":1,"1975":1,"1976":1,"1978":1,"2030":2,"2041":1,"2059":2,"2060":2,"2076":1,"2080":1,"2121":2,"2159":1,"2160":1,"2204":1,"2218":1,"2226":1,"2232":2,"2236":1,"2245":1}}],["debe",{"3":{"1685":1,"1686":2}}],["debounce",{"3":{"1591":1}}],["debounceinterval=",{"3":{"1396":1}}],["debounces",{"3":{"1395":1}}],["debounced",{"3":{"881":1,"1324":2,"1385":1,"1395":2,"1526":1,"1560":1,"2072":1}}],["debuggable",{"3":{"1286":1,"1417":1}}],["debuggability",{"3":{"6":1,"1952":1}}],["debugger",{"3":{"1259":1,"1339":1,"1415":1}}],["debugging",{"3":{"399":1,"402":1,"407":1,"641":1,"1259":1,"1311":1,"1333":1,"1339":2,"1415":1,"1430":1,"1436":1,"1438":1,"1443":1,"1488":1,"1641":1,"1913":1,"2159":2}}],["debug",{"3":{"0":1,"401":1,"1109":1,"1256":1,"1259":4,"1263":1,"1270":6,"1271":1,"1286":2,"1311":4,"1323":4,"1324":2,"1333":1,"1339":1,"1396":7,"1402":2,"1416":9,"1436":1,"1444":1,"1481":1,"1575":1,"1577":3,"1582":1,"1585":1,"1648":3,"1655":1,"1677":2,"1894":1,"1917":1,"1952":1}}],["debt",{"3":{"0":2,"298":1,"302":2,"607":1,"674":1,"1011":1,"1012":1,"1014":1,"1300":4,"1350":1,"1396":1,"1436":6,"1496":1,"1522":1,"1526":1,"1529":1,"1534":1,"1571":1,"1591":1,"2138":2}}],["density",{"0":{"1715":1},"3":{"881":1,"1324":13,"1416":2,"1524":4,"1526":3,"1530":1,"1531":3,"1532":1,"1533":1,"1557":1,"1559":1,"1577":1,"1591":1,"1596":3,"1597":2,"1669":1,"1715":1,"2079":1}}],["dense=",{"3":{"1524":1,"1526":2,"1531":1,"1532":1,"1591":1,"1596":1,"1597":1,"1715":1}}],["densegrid",{"2":{"1524":1,"1531":1,"1532":1,"1595":1,"1597":1,"1715":1},"3":{"1324":4,"1524":2,"1526":2,"1531":1,"1532":1,"1577":3,"1595":1,"1596":1,"1597":1,"1715":2}}],["densest",{"3":{"1286":1,"1324":1}}],["denser",{"3":{"691":1,"1324":1}}],["dense",{"2":{"1524":1},"3":{"650":1,"1237":1,"1256":1,"1324":4,"1380":2,"1396":1,"1524":1,"1559":1}}],["denormalize",{"3":{"1396":1,"1769":1}}],["denormalized",{"3":{"1030":1,"1117":1,"1342":1,"1346":1,"1350":2,"1359":2,"1380":1,"1395":5,"1398":1,"1402":3,"1415":2,"1630":2,"1750":1,"1751":2,"1769":2,"1773":1}}],["denormalization",{"3":{"1395":1,"1396":1,"1635":1,"1686":1}}],["denormalizationbackfillservice",{"3":{"674":1}}],["denormalizing",{"3":{"1350":1,"1395":1,"1402":1,"1638":1}}],["denominators",{"3":{"1012":4,"1527":3,"1537":1,"1553":1,"1578":3,"1591":1,"1592":4,"1594":1,"1599":1,"2171":1}}],["denominator",{"3":{"0":1,"1014":1,"1324":1,"1436":1,"1536":1}}],["denies",{"3":{"126":2,"188":1,"318":2,"1059":1,"1264":2,"1270":5,"1297":1,"1300":6,"1339":1,"1359":3,"1417":3,"1667":2,"1821":1,"1964":1,"1994":2,"1997":1,"2197":2}}],["denied",{"2":{"121":1,"126":1,"1268":1,"1422":1,"2156":1},"3":{"0":3,"121":1,"126":1,"317":1,"318":2,"440":1,"682":2,"729":1,"960":1,"1091":1,"1212":1,"1263":1,"1268":1,"1270":7,"1271":5,"1275":1,"1283":1,"1297":2,"1300":4,"1316":1,"1323":1,"1359":1,"1380":1,"1395":1,"1396":6,"1417":12,"1422":2,"1427":1,"1436":2,"1507":1,"1535":1,"1570":1,"1611":1,"1662":1,"1721":1,"1821":3,"1994":2,"2096":1,"2126":1,"2156":1}}],["denials",{"3":{"121":1,"126":3,"1263":1,"1270":1,"1997":1}}],["denial",{"3":{"0":1,"121":1,"126":2,"318":1,"793":1,"952":1,"954":1,"956":1,"960":1,"1263":1,"1270":7,"1300":4,"1323":1,"1359":1,"1396":1,"1402":1,"1417":10,"1436":2,"1577":1,"1821":1,"1995":1,"2001":1,"2096":1,"2117":1}}],["denying",{"3":{"1268":1,"1270":3,"1299":1,"1300":3,"1323":1,"1339":1,"1599":1,"2156":1}}],["denylist",{"3":{"0":1,"972":3,"973":2,"974":1,"975":1,"1212":1,"1324":2}}],["deny",{"0":{"2199":1},"2":{"2147":1},"3":{"0":3,"126":1,"184":1,"214":1,"318":3,"322":1,"324":1,"326":1,"458":1,"954":1,"956":1,"960":1,"1059":2,"1060":2,"1263":1,"1270":1,"1271":1,"1297":1,"1300":7,"1311":1,"1323":1,"1336":1,"1339":1,"1344":1,"1348":1,"1357":1,"1359":2,"1379":1,"1380":1,"1409":1,"1415":1,"1432":1,"1436":4,"1443":1,"1467":1,"1526":1,"1631":1,"1994":1,"1995":1,"1996":1,"2147":1,"2149":1,"2199":1,"2203":1,"2239":1}}],["demos",{"3":{"2109":1}}],["demonstrably",{"3":{"1765":1}}],["demonstrable",{"3":{"1286":1}}],["demonstrating",{"3":{"2221":1}}],["demonstration",{"3":{"1270":1,"1271":1,"1339":1,"1352":1,"1359":1}}],["demonstrator",{"3":{"1534":1}}],["demonstrates",{"3":{"551":1,"620":1,"698":1,"1058":1,"1300":1,"1311":1,"1324":1,"1359":4,"1376":1,"1436":3,"1487":1,"1721":1,"2057":1,"2226":1}}],["demonstrated",{"3":{"0":2,"941":1,"966":1,"1090":1,"1402":1,"1577":1,"1591":2,"1706":1,"1707":1,"2109":1}}],["demonstrate",{"3":{"0":1,"62":1,"449":1,"651":1,"1339":1,"1488":1,"1575":1,"1576":1,"1884":1,"2113":2,"2129":1,"2133":1,"2214":1}}],["demote",{"3":{"1300":1,"1311":1,"1339":1}}],["demoted",{"3":{"619":1,"743":1,"1289":1,"1324":2,"2057":1}}],["demotion",{"3":{"1270":1}}],["demoting",{"3":{"1270":1,"1414":1}}],["demo",{"3":{"698":1,"1437":1,"1698":1,"1777":1,"1789":1,"1796":1,"1958":1,"1966":1,"1973":1}}],["demanded",{"0":{"1871":1},"3":{"1237":1,"1300":1,"1415":1}}],["demands",{"3":{"147":2,"150":1,"265":1,"626":1,"674":2,"709":1,"1229":1,"1259":1,"1300":3,"1301":1,"1311":1,"1322":1,"1324":2,"1327":1,"1350":1,"1359":2,"1415":2,"1416":1,"1426":1,"1436":5,"1454":1,"1455":2,"1459":1,"1526":1,"1675":1,"1794":1,"2012":2,"2035":1}}],["demand",{"0":{"1327":1},"3":{"0":2,"86":1,"126":1,"186":1,"471":1,"499":1,"507":1,"591":1,"1060":1,"1125":1,"1229":1,"1237":1,"1247":2,"1263":1,"1270":1,"1286":3,"1297":3,"1300":5,"1311":3,"1318":1,"1323":1,"1324":6,"1327":1,"1342":1,"1350":1,"1359":1,"1395":2,"1396":1,"1415":1,"1436":4,"1438":1,"1440":1,"1455":2,"1459":2,"1460":1,"1475":1,"1482":1,"1492":1,"1577":1,"1589":1,"1802":1,"1821":1,"1877":1,"1962":1,"1965":2,"2013":1,"2034":1,"2047":1,"2141":1,"2162":1,"2180":2,"2199":1,"2232":1}}],["deflated",{"3":{"1492":1}}],["deflate",{"3":{"1455":1}}],["deflating",{"3":{"1455":1}}],["defining",{"3":{"1300":8,"1309":2,"1324":1,"1339":2,"1359":2,"1396":1,"1415":1,"1436":18,"1577":1,"1639":1,"1916":1,"1949":1,"2028":1,"2159":1}}],["definingprojectname",{"3":{"1067":1}}],["definitive",{"3":{"1359":1}}],["definitions",{"3":{"53":1,"54":1,"471":1,"881":1,"1266":1,"1281":1,"1286":2,"1301":1,"1312":1,"1324":1,"1350":1,"1359":6,"1380":1,"1396":2,"1436":4,"1447":1,"1494":1,"1632":1,"1858":1,"1962":1,"1994":1}}],["definition",{"0":{"1464":1},"2":{"1730":1},"3":{"33":1,"428":1,"619":1,"767":1,"810":1,"1102":1,"1117":1,"1160":1,"1229":1,"1231":1,"1237":1,"1239":1,"1247":1,"1259":1,"1270":3,"1271":1,"1286":3,"1300":5,"1309":1,"1311":2,"1312":1,"1324":10,"1339":4,"1347":1,"1350":8,"1359":27,"1369":4,"1380":1,"1396":4,"1415":5,"1417":1,"1433":1,"1436":15,"1467":2,"1586":1,"1631":1,"1637":1,"1638":1,"1641":1,"1701":1,"1730":1,"1802":1,"1962":2,"1980":1}}],["definite",{"3":{"1350":2,"1427":1}}],["definitely",{"3":{"1270":1,"1350":2,"1888":1}}],["definelayers",{"2":{"2103":1},"3":{"1431":1,"1436":24,"2103":1}}],["define",{"0":{"2017":1,"2090":1},"3":{"342":1,"449":1,"988":1,"1229":3,"1237":1,"1247":1,"1286":1,"1300":1,"1311":2,"1323":1,"1324":1,"1333":1,"1350":2,"1359":1,"1369":1,"1436":2,"1443":1,"1576":1,"1638":1,"1639":2,"1656":1,"1709":1,"1827":1,"1955":1,"1997":1,"2013":1,"2015":1,"2049":1,"2123":1,"2156":1}}],["defined",{"0":{"2042":1},"3":{"0":2,"11":1,"54":1,"215":1,"272":1,"331":1,"350":1,"352":1,"395":2,"404":1,"426":1,"428":1,"608":1,"749":1,"790":1,"850":1,"860":1,"861":2,"862":1,"881":1,"991":1,"1124":1,"1237":1,"1240":1,"1257":1,"1259":2,"1271":2,"1276":1,"1286":5,"1289":1,"1300":5,"1301":2,"1309":4,"1311":5,"1312":1,"1320":1,"1323":1,"1324":5,"1336":1,"1339":5,"1350":1,"1352":1,"1359":23,"1395":7,"1396":2,"1402":3,"1409":1,"1415":3,"1417":3,"1436":2,"1457":1,"1458":2,"1479":1,"1480":1,"1488":1,"1526":2,"1542":1,"1547":1,"1556":1,"1559":1,"1566":3,"1567":1,"1572":1,"1577":1,"1582":1,"1591":2,"1631":3,"1634":1,"1706":1,"1714":1,"1764":1,"1790":1,"1915":1,"1929":2,"2016":1,"2055":1,"2073":1,"2111":1,"2147":1,"2153":1,"2182":1,"2220":1}}],["definescope",{"3":{"1270":2}}],["defines",{"3":{"0":1,"125":1,"175":1,"184":3,"186":5,"256":1,"342":1,"350":1,"406":1,"407":1,"452":1,"536":1,"558":1,"564":1,"571":1,"614":1,"707":1,"870":1,"897":1,"1016":1,"1018":1,"1212":1,"1234":1,"1236":1,"1237":2,"1286":2,"1300":5,"1301":1,"1303":1,"1309":3,"1312":1,"1323":1,"1324":5,"1359":2,"1369":1,"1380":1,"1395":2,"1396":2,"1409":1,"1415":5,"1416":1,"1417":1,"1436":6,"1443":1,"1474":1,"1489":1,"1536":1,"1540":1,"1577":1,"1638":1,"1639":2,"1641":1,"1810":1,"1932":1,"1963":4,"1978":1,"2039":1,"2042":1,"2075":1,"2083":1,"2117":1,"2156":1,"2165":1,"2230":1}}],["defeated",{"3":{"716":1,"1359":1,"1436":1}}],["defeating",{"0":{"1334":1},"3":{"157":1,"591":1,"593":1,"1270":1,"1415":1,"1492":1}}],["defeat",{"3":{"151":1,"528":1,"741":1,"941":1,"1093":1,"1300":1,"1311":2,"1312":1,"1323":1,"1324":1,"1417":1,"1436":1,"1441":1,"1667":1,"1975":1,"2019":1}}],["defeats",{"3":{"100":1,"235":1,"360":1,"998":1,"1300":1,"1311":1,"1312":1,"1339":1,"1423":1,"1427":1,"1431":1,"1436":1,"1576":1,"1909":1,"2030":1,"2128":1,"2175":1,"2179":1}}],["defer",{"3":{"459":1,"614":1,"810":1,"1286":1,"1323":1,"1339":2,"1402":1,"1416":1,"1434":1,"1436":1,"1498":1,"2193":1}}],["defersessionpersist",{"3":{"1324":1}}],["defers",{"3":{"20":1,"609":1,"675":1,"815":1,"821":1,"918":1,"1116":1,"1271":2,"1286":1,"1300":2,"1311":2,"1339":1,"1356":1,"1359":1,"1395":1,"1408":1,"1415":6,"1416":1,"1417":1,"1422":1,"1436":1,"1476":1,"1582":1,"1722":1,"1950":1,"1959":1,"2012":1}}],["deferring",{"3":{"735":1,"801":1,"989":1,"1286":1,"1311":2,"1323":1,"1324":3,"1339":1,"1415":1,"1416":1,"1427":1}}],["deferrals",{"3":{"1286":1,"1571":1,"1594":1}}],["deferral",{"3":{"0":7,"468":1,"469":1,"473":1,"474":2,"518":1,"521":1,"522":1,"726":1,"797":3,"798":2,"799":2,"800":1,"808":2,"810":1,"811":1,"812":2,"813":1,"827":1,"914":1,"917":1,"1048":1,"1051":1,"1053":1,"1054":1,"1100":1,"1104":1,"1212":1,"1324":2,"1396":2,"1577":1,"2168":2,"2232":1}}],["deferredtable",{"3":{"1286":2}}],["deferreddispatch",{"2":{"1233":1,"1498":1},"3":{"1198":1,"1199":2,"1203":1,"1207":1,"1233":1,"1274":1,"1286":5,"1496":2,"1498":2}}],["deferred",{"0":{"1275":1,"1318":1,"2184":1},"1":{"796":1,"797":1,"798":1,"799":1,"800":1,"801":1,"802":1,"803":1,"804":1,"805":1,"806":1,"807":1,"808":1,"809":1,"810":1,"811":1,"812":1,"813":1,"814":1,"815":1},"3":{"0":16,"20":1,"26":1,"68":1,"100":1,"111":1,"120":2,"125":1,"383":1,"468":2,"470":1,"474":1,"518":1,"541":1,"601":1,"680":2,"692":1,"698":1,"725":1,"727":1,"729":1,"733":1,"741":1,"796":1,"799":1,"804":1,"807":1,"827":1,"881":1,"914":1,"988":5,"992":1,"1042":2,"1044":1,"1046":1,"1048":1,"1049":1,"1051":1,"1117":3,"1192":1,"1212":3,"1217":1,"1229":1,"1233":1,"1237":1,"1252":1,"1263":2,"1264":2,"1270":5,"1272":1,"1275":3,"1278":2,"1286":20,"1297":1,"1300":2,"1311":1,"1313":1,"1318":3,"1323":7,"1324":2,"1339":1,"1350":1,"1357":1,"1359":7,"1395":1,"1396":3,"1399":1,"1402":2,"1415":1,"1416":3,"1417":2,"1433":1,"1436":2,"1467":1,"1508":1,"1524":2,"1526":3,"1529":1,"1530":1,"1532":1,"1534":2,"1577":3,"1578":1,"1582":2,"1585":7,"1599":3,"1611":3,"1612":1,"1631":1,"1640":2,"1651":1,"1688":1,"1822":1,"1840":2,"1944":1,"2015":1,"2184":2,"2186":1,"2193":4,"2232":2}}],["defensiveness",{"3":{"1396":1}}],["defensive",{"3":{"359":1,"365":1,"1247":1,"1286":6,"1297":1,"1300":3,"1301":1,"1311":6,"1324":3,"1339":1,"1350":2,"1359":5,"1415":1,"1417":1,"1443":1,"1881":1,"2126":1,"2143":1}}],["defensively",{"3":{"359":1,"1286":1,"1324":1,"1395":2,"1396":1,"1416":2,"1427":1,"1436":1,"1911":1,"1925":1,"1986":1}}],["defensible",{"3":{"0":1,"691":1,"699":1,"821":1,"862":1,"898":1,"1220":1,"1396":1,"1436":1,"1526":1,"1531":1,"1912":1,"1972":1}}],["defenses",{"3":{"1300":1,"1324":1,"1436":1,"1553":1,"1576":1,"1825":1}}],["defense",{"0":{"1903":1},"3":{"207":1,"370":1,"390":1,"973":1,"1185":1,"1247":4,"1263":1,"1270":2,"1285":1,"1286":1,"1300":5,"1309":1,"1311":4,"1324":6,"1336":1,"1369":1,"1396":1,"1402":1,"1415":3,"1427":1,"1436":1,"1548":1,"1577":1,"1627":1,"1667":1,"1673":1,"1757":1,"1823":1,"1969":1,"2040":1,"2073":1,"2126":1,"2201":1}}],["defences",{"3":{"280":1,"1339":1}}],["defence",{"2":{"1365":1},"3":{"0":1,"128":1,"443":1,"725":1,"757":1,"758":1,"1019":1,"1020":1,"1115":1,"1116":1,"1118":1,"1124":2,"1300":1,"1311":1,"1324":1,"1339":3,"1365":1,"1369":1,"1395":1,"1415":2,"1455":1,"1467":2,"1475":1,"1492":1,"2001":1,"2148":1}}],["defending",{"1":{"1998":1,"1999":1,"2000":1,"2001":1,"2002":1},"3":{"1229":1,"1339":1,"1415":1,"1779":1,"1997":1,"1998":1,"2208":2}}],["defend",{"3":{"1125":1,"1286":1,"1309":1,"1396":1,"1436":1,"1438":3,"1900":1}}],["defended",{"3":{"659":1,"868":1,"1224":1,"1300":1,"1395":1,"1402":1,"1415":1,"1436":6,"1526":1,"1826":1}}],["defenderforstoragesettings",{"2":{"1470":1},"3":{"1116":1,"1119":1,"1467":1,"1470":1}}],["defender",{"3":{"0":1,"403":1,"1116":2,"1118":1,"1467":1}}],["defends",{"3":{"0":1,"1124":1,"1249":1,"1339":1,"1359":1,"1436":3,"1567":1,"2141":1}}],["defect",{"3":{"0":1,"46":1,"135":1,"249":1,"390":2,"415":1,"474":1,"549":2,"619":1,"799":1,"800":2,"801":2,"803":1,"856":1,"890":1,"955":1,"966":1,"1004":1,"1049":1,"1050":1,"1247":1,"1270":2,"1286":3,"1300":1,"1301":1,"1311":2,"1324":6,"1339":1,"1350":1,"1356":1,"1359":8,"1395":3,"1396":1,"1402":1,"1417":1,"1436":25,"1438":2,"1467":1,"1473":1,"1535":1,"1586":1,"1591":1,"1597":1,"1599":3,"1610":1,"1643":2,"1671":1,"1675":1,"1744":1,"1799":1,"1841":1,"1909":1,"2063":1,"2183":1}}],["defects",{"3":{"0":1,"157":1,"517":1,"1300":2,"1311":1,"1324":1,"1402":1,"1909":1,"2051":2}}],["defaultkeyid",{"3":{"1436":1,"1488":1}}],["defaultkeyversion",{"3":{"1286":1}}],["defaultinterval",{"3":{"1436":1}}],["defaulting",{"3":{"0":5,"178":1,"226":1,"229":1,"243":1,"255":1,"274":1,"333":1,"351":1,"421":1,"539":1,"549":2,"640":1,"819":1,"820":1,"922":1,"973":1,"1116":1,"1184":1,"1229":1,"1237":1,"1241":1,"1243":1,"1247":4,"1249":1,"1257":1,"1259":4,"1267":1,"1270":2,"1271":3,"1273":1,"1277":2,"1279":1,"1286":14,"1300":11,"1301":3,"1309":5,"1311":5,"1317":1,"1323":14,"1324":17,"1326":1,"1332":1,"1336":1,"1338":1,"1339":6,"1350":10,"1359":10,"1366":1,"1376":1,"1380":2,"1387":1,"1392":1,"1395":8,"1396":9,"1402":1,"1412":1,"1415":2,"1419":3,"1423":1,"1424":1,"1427":1,"1433":1,"1436":19,"1441":1,"1455":1,"1465":1,"1467":3,"1470":1,"1474":1,"1476":1,"1484":1,"1488":1,"1684":1,"1695":1,"1922":1,"1970":1,"2173":2,"2232":1}}],["defaultissuer",{"3":{"1436":1,"1488":1}}],["defaultleadminutes",{"3":{"1396":2}}],["defaultlocalizationinterceptor",{"3":{"265":1,"1324":2}}],["defaultversionpolicy",{"3":{"1339":1}}],["defaultrouteheadername",{"3":{"1339":1}}],["defaultredactionplaceholder",{"3":{"1427":1}}],["defaultrequestversion",{"3":{"1339":1}}],["defaultrequestheaders",{"3":{"1324":4}}],["defaultretryafter",{"3":{"1324":1}}],["defaultretrydelay",{"3":{"1324":1}}],["defaultresolutionorder",{"3":{"1286":1}}],["defaultculture",{"3":{"1436":1}}],["defaultclusterheadername",{"3":{"1339":1}}],["defaultcleartextport",{"3":{"95":2,"1339":2}}],["defaultconnectionname",{"3":{"1339":3}}],["defaultbaseaddress",{"3":{"1436":3}}],["defaultbaseurl",{"3":{"1436":1,"1488":1}}],["defaultbackoff",{"3":{"1324":1,"1396":1}}],["defaultbrokerresourcename",{"2":{"1326":1},"3":{"1326":1,"1339":1,"1441":1}}],["defaultborderradius",{"3":{"1324":1}}],["defaultjwkspath",{"3":{"1311":2}}],["defaulthttpcontext",{"3":{"1311":1}}],["defaultheaders",{"3":{"1311":3}}],["defaultmaxoutputtokens",{"3":{"1427":1}}],["defaultmaxexportrows",{"3":{"741":1,"1311":1,"1323":1}}],["defaultmaildevresourcename",{"3":{"1339":1}}],["defaultmessagetimetolive",{"3":{"1323":1,"1436":1}}],["defaultmessage",{"3":{"1286":2}}],["defaultpassword",{"3":{"1436":3}}],["defaultprivatekeypem",{"3":{"1429":1,"1436":1,"1488":1}}],["defaultprobepath",{"2":{"99":1},"3":{"99":1,"1339":3,"1441":1}}],["defaultprotocols",{"3":{"95":1,"1331":1,"1339":4}}],["defaultpublickeypem",{"3":{"1429":1,"1436":1,"1488":1}}],["defaultport",{"3":{"1339":2}}],["defaultpopulatelocktimeout",{"3":{"1270":1,"1323":3}}],["defaultwidth",{"3":{"1270":1,"1300":2}}],["defaultname",{"3":{"1259":2,"1286":8,"1323":1}}],["defaultdocumentname",{"3":{"1311":1}}],["defaultdatasourceresolver",{"3":{"1199":12,"1207":1}}],["defaultduration",{"2":{"243":1,"254":1,"257":1,"736":1,"1708":1,"1916":2},"3":{"243":2,"254":3,"257":2,"733":1,"736":1,"1301":20,"1496":1,"1708":2,"1916":2}}],["defaultoidcdiscoverypath",{"3":{"1311":1}}],["defaultoauthuisettings",{"3":{"1199":2,"1203":1,"1207":2,"1324":7,"1416":1}}],["defaultoptions",{"2":{"1091":1},"3":{"1091":1,"1427":1}}],["default=warning",{"3":{"790":1,"1442":1}}],["defaulttitlefor",{"3":{"1395":1}}],["defaulttimeout",{"3":{"1324":3,"1427":1,"1436":4,"1488":1}}],["defaulttooauthauthentication",{"3":{"1467":1}}],["defaulttoautonegotiation",{"3":{"1339":2}}],["defaulttokenissuingpaths",{"3":{"1324":1}}],["defaultthreadcurrentuiculture",{"3":{"1324":1,"1417":1}}],["defaultthreadcurrentculture",{"3":{"1324":1,"1417":1}}],["defaultthreadcurrent",{"2":{"265":1},"3":{"265":2,"1324":1}}],["defaultttl",{"3":{"243":1,"1324":4}}],["defaultemail",{"3":{"1436":3}}],["defaultemulatorimage",{"3":{"640":1,"1436":1}}],["defaultendpointname",{"3":{"1339":2}}],["defaultenginedbcontextfactories",{"3":{"1496":1}}],["defaultengine",{"3":{"1286":2}}],["defaultentityconfigurationassemblyprovider",{"2":{"1203":1,"1282":1,"1323":1},"3":{"1199":3,"1203":1,"1207":2,"1282":3,"1286":11,"1323":1,"1436":1}}],["defaultentityconfigurationassemblyprovidertests",{"2":{"1199":1},"3":{"1199":1,"1207":2,"1286":1}}],["defaultexcludedpathprefixes",{"3":{"1286":1}}],["defaultexporttestcontroller",{"3":{"1199":2,"1207":1}}],["defaultexpiration",{"2":{"243":1,"254":1,"257":1},"3":{"243":1,"254":3,"257":1,"1301":4,"1311":3}}],["defaultexemptpathprefixes",{"2":{"189":1},"3":{"189":1,"1300":3}}],["defaulted",{"3":{"0":1,"583":1,"649":1,"650":1,"768":1,"827":1,"837":1,"861":1,"862":1,"1018":1,"1034":1,"1212":1,"1247":1,"1253":1,"1258":1,"1259":7,"1265":2,"1270":4,"1284":1,"1286":7,"1300":1,"1301":1,"1307":1,"1309":4,"1311":3,"1323":1,"1324":9,"1339":1,"1344":1,"1349":1,"1350":7,"1359":12,"1395":5,"1396":19,"1402":2,"1415":3,"1417":2,"1436":6,"1918":1,"1945":1,"2196":1,"2203":1}}],["defaultaction",{"3":{"1467":1}}],["defaultauthorizationservice",{"2":{"954":1,"956":1,"960":1,"1432":1},"3":{"954":1,"956":1,"960":1,"1432":1,"1436":6}}],["defaultauthorizationpolicyprovider",{"2":{"186":1,"1962":1},"3":{"186":1,"1300":2,"1962":1}}],["defaultapiversion",{"2":{"446":1},"3":{"446":1,"448":1,"1311":1,"2131":1}}],["defaultazurecredential",{"2":{"441":1,"598":1,"599":1,"664":1,"665":1,"670":1,"1335":1,"1336":1,"1442":1,"1970":1,"2126":1,"2127":1},"3":{"0":2,"440":1,"441":1,"598":1,"599":1,"664":1,"665":1,"670":1,"1212":1,"1323":4,"1335":1,"1336":1,"1339":6,"1442":1,"1467":6,"1577":1,"1970":1,"2126":1,"2127":1}}],["defaultstothederivedtypesassembly",{"3":{"1436":1}}],["defaultsettings",{"3":{"1577":1}}],["defaultservicebusemulatorresourcename",{"3":{"1339":1}}],["defaultseed",{"3":{"1199":2,"1203":1,"1207":1,"1279":1,"1286":3}}],["defaultsmtpport",{"3":{"1323":2}}],["defaultsortcolumn",{"3":{"1380":1}}],["defaultsort",{"3":{"1247":1}}],["defaultsspecification",{"3":{"1199":2,"1207":1}}],["defaultsqlserverdbcontextfactory",{"2":{"703":1},"3":{"703":1}}],["defaults",{"0":{"1442":1,"1443":1,"1678":1,"2119":1},"1":{"1325":1,"1326":1,"1327":1,"1328":1,"1329":1,"1330":1,"1331":1,"1332":1,"1333":1,"1334":1,"1335":1,"1336":1,"1337":1,"1338":1,"1339":1},"2":{"150":1},"3":{"0":15,"19":2,"22":1,"23":1,"25":1,"27":1,"31":3,"66":1,"68":1,"72":1,"73":1,"74":2,"95":3,"98":2,"100":3,"102":1,"145":1,"146":1,"147":1,"150":1,"168":1,"177":1,"189":1,"193":1,"198":1,"202":1,"217":1,"219":1,"225":2,"228":1,"230":1,"235":1,"243":2,"246":1,"255":1,"258":1,"263":1,"265":4,"314":1,"318":2,"325":1,"333":1,"335":1,"350":1,"384":1,"395":4,"397":3,"400":1,"402":1,"404":1,"406":2,"413":2,"414":1,"416":1,"434":2,"482":1,"536":1,"538":1,"539":1,"583":3,"585":2,"599":1,"600":1,"609":2,"622":1,"635":1,"640":2,"657":1,"668":1,"674":3,"690":1,"699":1,"720":1,"733":2,"736":1,"749":1,"809":1,"819":3,"821":1,"827":5,"832":2,"833":1,"837":1,"861":5,"862":1,"863":1,"897":1,"905":2,"913":2,"931":1,"954":1,"956":1,"957":1,"994":1,"998":1,"1004":1,"1018":3,"1026":1,"1042":1,"1045":1,"1050":1,"1059":1,"1067":1,"1082":1,"1089":1,"1091":1,"1092":1,"1093":1,"1094":1,"1119":1,"1124":3,"1135":1,"1160":1,"1175":1,"1192":1,"1202":1,"1203":1,"1212":3,"1237":1,"1241":2,"1244":3,"1247":7,"1249":3,"1257":1,"1258":1,"1259":11,"1270":4,"1271":1,"1275":1,"1276":2,"1277":1,"1284":1,"1285":1,"1286":24,"1288":1,"1293":1,"1297":2,"1300":38,"1301":11,"1302":1,"1309":5,"1311":26,"1312":3,"1320":2,"1323":22,"1324":42,"1325":2,"1326":1,"1330":2,"1333":1,"1335":1,"1337":1,"1338":3,"1339":82,"1350":8,"1355":1,"1359":28,"1364":1,"1368":1,"1369":4,"1372":1,"1380":2,"1384":1,"1393":1,"1395":17,"1396":13,"1402":2,"1415":10,"1416":5,"1417":24,"1420":1,"1427":6,"1429":1,"1433":1,"1435":1,"1436":50,"1437":1,"1438":10,"1439":2,"1441":1,"1442":1,"1443":6,"1444":1,"1446":1,"1447":5,"1455":2,"1458":1,"1466":1,"1467":6,"1470":3,"1475":1,"1477":1,"1481":3,"1487":1,"1488":2,"1490":1,"1491":1,"1496":5,"1537":1,"1555":1,"1557":1,"1561":1,"1577":3,"1582":1,"1591":1,"1596":1,"1631":2,"1640":1,"1656":1,"1660":4,"1662":1,"1663":3,"1670":3,"1674":1,"1676":1,"1707":1,"1734":1,"1798":1,"1801":1,"1825":1,"1842":1,"1843":1,"1895":1,"1908":1,"1916":2,"1921":1,"1923":1,"1936":1,"1970":1,"1989":1,"1994":2,"1995":1,"2000":1,"2001":2,"2011":1,"2014":3,"2018":1,"2030":2,"2031":1,"2038":1,"2043":1,"2046":1,"2062":1,"2075":1,"2083":1,"2119":1,"2122":3,"2123":2,"2131":1,"2149":1,"2155":1,"2156":1,"2159":1,"2160":1,"2167":1,"2168":1,"2188":1,"2198":2,"2199":1,"2227":1}}],["default",{"0":{"1327":1,"2064":1,"2118":1},"1":{"961":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1,"1047":1,"1048":1,"1049":1,"1050":1,"1051":1,"1052":1,"1053":1,"1054":1,"1055":1,"1080":1,"1081":1,"1082":1,"1083":1,"1084":1,"1085":1,"1086":1,"1087":1,"2154":1,"2155":1,"2156":1,"2157":1,"2158":1,"2159":1,"2160":1},"2":{"511":1,"513":1,"916":1,"1041":1,"1261":1,"1386":1,"1423":1,"1467":1,"1652":1,"2175":1},"3":{"0":76,"5":1,"7":2,"15":2,"17":3,"19":3,"20":1,"24":1,"25":1,"26":1,"27":1,"29":1,"31":4,"32":2,"38":1,"39":3,"41":1,"47":2,"55":1,"62":1,"67":1,"68":1,"71":1,"72":2,"73":2,"78":4,"79":2,"91":2,"92":4,"93":3,"94":1,"95":1,"96":5,"97":1,"98":7,"99":2,"100":1,"101":2,"102":2,"109":1,"121":1,"135":1,"147":1,"150":1,"152":1,"157":1,"158":1,"159":1,"165":1,"166":6,"170":2,"173":1,"175":7,"177":1,"178":5,"179":3,"184":1,"185":1,"186":2,"189":2,"193":1,"195":3,"200":4,"201":3,"203":1,"212":1,"214":6,"215":3,"216":4,"219":5,"220":2,"225":3,"226":1,"227":2,"228":2,"229":1,"230":2,"231":1,"233":1,"235":2,"236":1,"241":2,"243":5,"244":1,"245":2,"248":1,"249":1,"252":1,"254":2,"255":3,"258":1,"265":4,"273":2,"279":2,"280":3,"281":2,"283":1,"290":1,"302":1,"310":1,"318":8,"320":1,"322":1,"324":1,"326":1,"329":1,"330":1,"332":1,"335":2,"340":1,"344":1,"350":7,"351":1,"352":1,"353":1,"360":1,"369":1,"380":2,"381":1,"384":1,"386":2,"387":4,"388":3,"389":1,"395":2,"397":3,"398":1,"402":2,"407":1,"413":1,"414":1,"415":1,"420":2,"422":1,"432":1,"434":2,"436":2,"440":2,"443":1,"444":1,"446":1,"447":1,"448":3,"449":2,"458":1,"468":1,"499":4,"501":3,"502":1,"507":1,"511":1,"513":1,"520":1,"527":1,"549":1,"556":2,"572":1,"573":1,"578":1,"583":3,"584":1,"599":4,"602":1,"609":3,"626":2,"633":2,"635":1,"640":2,"642":1,"644":1,"649":1,"650":1,"656":1,"657":2,"660":1,"661":1,"664":1,"665":6,"666":1,"667":4,"668":6,"674":3,"682":4,"690":1,"691":1,"698":5,"699":2,"700":1,"707":6,"708":1,"709":4,"711":1,"713":1,"715":1,"731":2,"733":7,"734":1,"736":1,"737":1,"740":1,"741":4,"743":4,"749":2,"774":3,"775":2,"781":1,"782":1,"784":1,"790":1,"791":1,"793":1,"798":1,"804":1,"819":2,"820":2,"821":1,"826":2,"827":8,"829":1,"830":2,"831":1,"832":1,"837":1,"838":2,"841":1,"846":2,"854":2,"857":2,"861":2,"868":1,"881":3,"890":1,"897":2,"900":1,"905":8,"907":1,"912":1,"913":1,"914":1,"915":2,"916":1,"922":1,"924":1,"926":2,"932":1,"933":1,"935":2,"946":1,"953":1,"954":5,"956":2,"960":1,"961":1,"962":1,"964":4,"965":3,"966":1,"968":1,"971":1,"972":3,"974":1,"988":3,"991":1,"998":1,"999":2,"1004":1,"1006":1,"1012":2,"1018":3,"1020":1,"1033":1,"1034":1,"1035":1,"1036":1,"1040":1,"1041":1,"1044":1,"1047":1,"1049":3,"1050":5,"1052":1,"1053":1,"1054":1,"1055":1,"1059":2,"1061":1,"1067":1,"1069":1,"1080":1,"1081":1,"1082":2,"1083":2,"1084":1,"1089":3,"1090":1,"1091":5,"1092":1,"1094":1,"1108":1,"1109":1,"1114":1,"1116":4,"1117":1,"1118":1,"1119":2,"1122":1,"1124":7,"1127":1,"1133":2,"1134":1,"1135":4,"1161":1,"1168":1,"1175":5,"1177":1,"1179":1,"1184":2,"1188":1,"1212":9,"1223":1,"1229":7,"1231":2,"1232":1,"1235":1,"1236":2,"1237":24,"1241":2,"1242":1,"1244":2,"1247":21,"1249":1,"1253":1,"1254":2,"1255":1,"1256":4,"1257":1,"1258":2,"1259":56,"1261":1,"1263":1,"1264":1,"1267":2,"1269":2,"1270":50,"1271":10,"1273":2,"1274":1,"1275":1,"1276":3,"1277":1,"1279":9,"1280":1,"1281":3,"1285":1,"1286":210,"1287":1,"1288":7,"1289":2,"1290":4,"1292":3,"1294":3,"1295":1,"1296":1,"1297":4,"1300":118,"1301":83,"1302":4,"1304":2,"1305":1,"1307":3,"1308":1,"1309":64,"1310":2,"1311":105,"1312":2,"1313":1,"1314":1,"1317":1,"1318":2,"1320":15,"1321":1,"1322":1,"1323":102,"1324":153,"1326":4,"1328":3,"1331":3,"1333":3,"1334":2,"1335":2,"1336":4,"1338":5,"1339":89,"1342":1,"1343":2,"1344":2,"1349":3,"1350":37,"1353":1,"1354":1,"1355":1,"1359":149,"1365":1,"1369":18,"1372":1,"1373":1,"1378":2,"1379":5,"1380":18,"1383":2,"1386":1,"1389":2,"1392":3,"1393":1,"1395":89,"1396":54,"1398":1,"1399":1,"1400":2,"1402":40,"1405":2,"1406":1,"1407":1,"1408":1,"1415":27,"1416":14,"1417":270,"1421":2,"1423":3,"1424":1,"1427":14,"1430":2,"1431":3,"1432":2,"1433":3,"1436":221,"1438":13,"1440":1,"1441":12,"1442":4,"1443":9,"1444":3,"1446":5,"1447":3,"1449":1,"1450":1,"1453":5,"1454":1,"1455":10,"1456":2,"1458":1,"1465":2,"1466":3,"1467":33,"1470":1,"1472":1,"1474":2,"1475":6,"1476":1,"1477":3,"1481":2,"1484":1,"1488":8,"1489":2,"1492":1,"1496":8,"1526":7,"1527":1,"1534":1,"1537":1,"1538":1,"1539":1,"1540":1,"1541":1,"1542":1,"1543":1,"1544":1,"1545":1,"1546":1,"1547":1,"1548":1,"1549":1,"1550":1,"1551":1,"1552":1,"1553":1,"1554":1,"1555":1,"1556":1,"1557":1,"1558":1,"1559":1,"1560":1,"1561":1,"1562":1,"1563":2,"1564":1,"1565":1,"1566":1,"1567":2,"1568":1,"1569":1,"1570":1,"1571":1,"1574":1,"1575":1,"1577":22,"1578":1,"1581":1,"1582":1,"1583":3,"1585":3,"1586":2,"1591":1,"1592":2,"1596":1,"1600":1,"1621":2,"1627":1,"1630":8,"1631":4,"1632":1,"1633":1,"1637":2,"1638":1,"1639":3,"1640":6,"1641":4,"1652":2,"1653":1,"1662":1,"1663":1,"1664":1,"1667":2,"1668":3,"1669":1,"1670":2,"1677":7,"1684":4,"1685":1,"1697":1,"1704":1,"1707":1,"1708":3,"1718":2,"1719":1,"1721":1,"1727":2,"1728":1,"1731":2,"1734":2,"1757":1,"1767":3,"1770":2,"1774":1,"1779":1,"1790":1,"1810":3,"1811":1,"1826":1,"1841":4,"1842":1,"1843":3,"1844":1,"1845":3,"1849":3,"1851":1,"1853":1,"1856":2,"1862":1,"1869":2,"1880":1,"1881":1,"1882":1,"1889":6,"1892":1,"1896":1,"1898":1,"1904":1,"1905":1,"1906":1,"1908":1,"1910":2,"1911":1,"1912":1,"1915":2,"1916":2,"1917":1,"1920":2,"1921":1,"1922":7,"1925":1,"1933":2,"1934":1,"1935":1,"1938":1,"1941":1,"1942":1,"1944":1,"1945":3,"1946":1,"1948":2,"1950":1,"1952":1,"1953":2,"1962":1,"1965":2,"1970":2,"1971":1,"1975":2,"1976":1,"1977":2,"1978":2,"1979":2,"1982":5,"1984":2,"1987":1,"1989":1,"1990":2,"1994":5,"1995":1,"1996":3,"1997":1,"2000":8,"2001":2,"2002":1,"2006":1,"2008":1,"2009":1,"2010":2,"2011":1,"2012":1,"2013":1,"2024":1,"2025":2,"2030":1,"2031":1,"2043":1,"2046":2,"2056":1,"2061":1,"2063":3,"2064":3,"2065":1,"2068":1,"2069":1,"2075":2,"2076":1,"2077":1,"2082":1,"2083":4,"2086":1,"2094":1,"2098":1,"2118":6,"2119":2,"2121":1,"2123":3,"2126":4,"2127":1,"2128":2,"2129":2,"2130":2,"2131":3,"2133":3,"2138":1,"2142":1,"2149":6,"2150":4,"2151":1,"2152":3,"2153":4,"2154":2,"2155":1,"2156":2,"2157":1,"2158":1,"2160":1,"2166":1,"2169":2,"2175":1,"2180":2,"2187":1,"2192":1,"2196":1,"2197":1,"2199":2,"2202":1,"2203":1,"2209":1,"2215":1,"2232":6}}],["deducted",{"3":{"1526":1,"1577":1}}],["deduction",{"3":{"1524":1,"1526":2,"1591":2,"1599":1,"1610":1,"1744":1}}],["deductions",{"3":{"1524":1,"1526":1}}],["dedupable",{"3":{"881":1}}],["dedupkeyindex",{"3":{"1286":1}}],["dedupkeymaxlength",{"3":{"1286":2,"1309":1}}],["dedupkey",{"2":{"231":1,"890":1,"892":1,"1934":1,"1941":1},"3":{"225":2,"231":1,"889":2,"890":1,"892":1,"1175":1,"1286":8,"1304":4,"1309":16,"1933":3,"1934":2,"1941":1}}],["dedupes",{"3":{"1237":1,"1324":1}}],["dedupe",{"3":{"220":1,"1237":1,"1396":1}}],["deduped",{"3":{"197":1,"789":1,"1396":2}}],["deduping",{"3":{"194":2,"1259":1,"1438":1}}],["deduplicate",{"3":{"538":1,"1311":2,"1396":1,"1721":1,"1933":1,"1941":1,"2168":1}}],["deduplicates",{"3":{"199":1,"517":1,"518":1,"645":1,"1286":1,"1300":2,"1301":1,"1311":1,"1324":1,"1339":1,"1376":1,"1415":1}}],["deduplicated",{"3":{"0":1,"109":1,"157":1,"160":1,"166":1,"225":1,"827":1,"1100":1,"1276":1,"1286":1,"1300":2,"1311":3,"1380":1,"1395":1,"1416":1,"1496":2,"1910":1}}],["deduplication",{"3":{"157":1,"158":1,"231":1,"846":1,"1018":1,"1247":2,"1249":2,"1259":7,"1269":1,"1270":3,"1303":1,"1309":5,"1311":6,"1317":1,"1324":3,"1339":1,"1350":1,"1380":1,"1436":1,"1443":1,"1496":1,"1889":1,"1909":1,"1933":1,"1940":1,"1941":1}}],["deduplicating",{"3":{"0":2,"109":1,"156":1,"1100":1,"1324":1,"1332":1,"1380":1}}],["dedup",{"0":{"1934":1},"3":{"0":8,"24":1,"194":1,"195":2,"196":2,"197":4,"200":1,"201":4,"202":2,"223":2,"516":1,"518":2,"519":1,"520":1,"524":2,"541":1,"694":1,"702":1,"786":1,"795":1,"815":1,"817":1,"823":1,"847":1,"889":2,"892":1,"930":1,"1074":1,"1099":1,"1104":1,"1212":1,"1237":1,"1247":1,"1249":1,"1258":2,"1259":14,"1286":3,"1304":4,"1309":12,"1323":6,"1324":1,"1350":1,"1359":1,"1380":1,"1396":1,"1438":1,"1496":1,"1508":1,"1526":1,"1577":2,"1586":1,"1665":1,"1910":2,"1911":1,"1933":4,"1934":1,"1940":1,"2166":1}}],["dedups",{"3":{"0":3,"195":2,"255":1,"340":2,"346":2,"538":1,"541":1,"846":1,"882":1,"1212":2,"1259":2,"1270":1,"1395":1,"1496":1,"1526":1,"1665":1,"1845":1,"1870":2,"1910":1,"1922":1,"2164":2,"2232":2}}],["dedicated",{"1":{"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1},"3":{"0":9,"51":1,"91":3,"92":2,"93":3,"94":3,"96":1,"98":1,"99":1,"100":1,"186":1,"195":1,"229":2,"343":1,"350":1,"395":1,"403":1,"407":1,"413":2,"536":1,"591":1,"593":1,"612":1,"618":1,"638":1,"640":2,"649":1,"663":1,"665":1,"666":1,"669":1,"698":1,"738":1,"741":1,"825":1,"846":1,"847":1,"939":1,"1069":1,"1212":4,"1215":1,"1241":1,"1247":2,"1258":1,"1270":1,"1271":2,"1275":1,"1286":8,"1307":1,"1309":6,"1311":3,"1312":1,"1323":3,"1324":4,"1328":1,"1331":1,"1339":8,"1350":3,"1359":6,"1376":1,"1379":1,"1380":4,"1395":5,"1396":4,"1400":1,"1402":2,"1415":5,"1417":4,"1427":1,"1431":1,"1436":3,"1438":2,"1441":1,"1442":1,"1446":1,"1449":1,"1467":4,"1486":1,"1487":1,"1492":1,"1503":1,"1509":1,"1526":3,"1534":2,"1577":1,"1585":2,"1599":1,"1639":1,"1641":2,"1660":1,"1661":1,"1666":1,"1670":1,"1732":1,"1750":1,"1773":1,"1842":1,"1851":1,"1929":2,"1930":2,"1946":1,"1963":1,"1975":1,"2025":2,"2047":1,"2083":1,"2102":1,"2120":1,"2156":1,"2167":1,"2232":2}}],["deprovisioned",{"3":{"1568":1}}],["deprecation",{"0":{"1737":1},"3":{"447":1,"448":1,"1006":1,"1017":1,"1019":1,"1020":1,"1311":1,"1376":1,"1435":1,"1438":1,"1453":1,"1455":1,"1492":1,"2129":1,"2130":1,"2131":1,"2133":2}}],["deprecate",{"3":{"447":1,"449":1,"940":1,"2130":1,"2133":1}}],["deprecatedversions",{"3":{"1311":1}}],["deprecated",{"3":{"0":4,"109":1,"448":5,"449":2,"528":1,"572":1,"881":1,"1212":1,"1300":1,"1311":11,"1376":3,"1380":4,"1436":5,"1459":2,"1488":2,"1526":2,"1535":1,"1591":1,"2055":1,"2131":5,"2133":3,"2232":1}}],["depersonalizes",{"3":{"1402":1}}],["dependable",{"3":{"1311":1}}],["dependabot",{"2":{"149":1,"152":1,"1078":1},"3":{"0":2,"145":1,"147":2,"148":1,"149":6,"150":1,"152":4,"373":2,"870":1,"873":1,"1074":5,"1075":1,"1078":3,"1459":7,"1576":2,"1577":2,"1586":2,"1673":1}}],["dependants",{"3":{"1237":1}}],["depended",{"3":{"1034":1,"1191":1,"1200":1,"1323":2,"1415":1,"1505":1,"1881":1}}],["dependence",{"3":{"1324":1,"1359":1,"1396":1,"1402":1,"2002":1}}],["dependencies",{"2":{"584":1,"585":1,"1314":1,"1880":1,"1881":1,"2094":1,"2098":1},"3":{"0":1,"59":1,"122":1,"145":1,"146":1,"168":1,"237":1,"265":1,"371":1,"376":1,"583":5,"584":1,"585":6,"608":1,"609":1,"665":1,"708":1,"733":1,"742":1,"939":2,"940":2,"990":1,"1191":2,"1196":2,"1199":1,"1211":1,"1214":1,"1229":1,"1237":1,"1247":1,"1259":2,"1270":1,"1271":2,"1286":5,"1300":4,"1301":1,"1308":1,"1309":2,"1310":2,"1311":5,"1312":1,"1314":2,"1315":2,"1323":11,"1324":2,"1325":1,"1339":2,"1359":10,"1360":1,"1371":1,"1380":4,"1393":1,"1395":1,"1396":20,"1402":3,"1406":1,"1415":17,"1417":4,"1431":1,"1432":1,"1436":36,"1445":1,"1454":2,"1467":1,"1475":1,"1489":2,"1496":2,"1504":1,"1538":1,"1540":1,"1551":2,"1552":2,"1569":3,"1570":1,"1577":1,"1591":1,"1597":1,"1600":1,"1638":1,"1653":1,"1671":2,"1693":1,"1709":1,"1775":1,"1878":1,"1879":1,"1880":2,"1881":3,"1886":2,"1948":1,"1964":1,"2041":1,"2087":1,"2094":4,"2095":1,"2098":2,"2158":1,"2164":1,"2230":1}}],["dependencyversion",{"3":{"1576":1,"1577":1}}],["dependencyversiontests",{"2":{"1214":1,"1454":1,"1801":1,"2042":1,"2048":1},"3":{"147":1,"1074":1,"1199":1,"1207":2,"1214":1,"1436":10,"1454":1,"1489":3,"1491":2,"1493":1,"1577":1,"1801":1,"2042":1,"2048":1}}],["dependencyversiontestsbase",{"2":{"147":1,"1075":1,"1671":1},"3":{"0":1,"147":2,"150":1,"1074":1,"1075":1,"1199":2,"1207":2,"1212":1,"1431":5,"1436":7,"1489":2,"1491":1,"1576":1,"1577":1,"1586":1,"1671":1}}],["dependencycycles",{"3":{"1436":1}}],["dependencymodule",{"3":{"1323":2}}],["dependencyinjectionoutboxgatetests",{"3":{"1199":1,"1207":2,"1438":2}}],["dependencyinjectionbrokermessagingtests",{"2":{"1496":1},"3":{"1199":1,"1207":4,"1496":1,"1577":1}}],["dependencyinjectionadditionaltests",{"3":{"1199":1,"1207":2}}],["dependencyinjectionasserttests",{"3":{"1199":1,"1207":4,"1436":1,"1438":1,"1487":1}}],["dependencyinjectionassert",{"2":{"1497":1},"3":{"1199":4,"1207":2,"1428":1,"1436":7,"1438":1,"1488":2,"1496":1,"1497":1}}],["dependencyinjectionpushnotificationstests",{"3":{"1199":1,"1207":2}}],["dependencyinjectioninfrastructuretests",{"3":{"1175":1,"1199":1,"1207":2,"1286":3}}],["dependencyinjectiontests",{"2":{"1262":1},"3":{"996":1,"1199":6,"1207":13,"1262":2,"1270":1,"1323":1,"1436":6,"1438":1,"1487":1}}],["dependencyinjection",{"2":{"115":4,"145":1,"152":1,"203":1,"220":1,"354":1,"378":1,"514":1,"543":2,"552":1,"644":1,"652":1,"677":1,"696":1,"703":1,"736":1,"794":1,"822":1,"884":1,"917":1,"929":1,"991":1,"999":1,"1062":1,"1074":1,"1078":2,"1214":1,"1247":1,"1262":2,"1270":1,"1312":1,"1365":1,"1368":1,"1369":1,"1414":1,"1427":1,"1500":2,"1685":1,"1771":1},"3":{"24":1,"25":2,"27":4,"53":1,"68":3,"74":2,"96":1,"100":1,"109":1,"111":1,"112":1,"115":4,"121":1,"122":9,"126":1,"145":2,"150":4,"152":2,"180":1,"186":5,"193":1,"196":1,"198":1,"200":1,"201":1,"203":3,"216":2,"219":1,"220":2,"225":2,"228":1,"230":1,"231":2,"243":5,"245":1,"250":1,"251":1,"252":1,"254":1,"256":1,"257":1,"258":2,"259":3,"260":3,"261":4,"285":1,"300":1,"303":1,"306":1,"310":2,"318":7,"324":2,"326":1,"343":1,"352":1,"354":1,"378":1,"384":1,"413":6,"415":1,"434":2,"436":2,"459":2,"463":2,"464":2,"465":2,"466":2,"507":8,"511":3,"513":2,"514":1,"536":2,"543":3,"545":1,"549":2,"552":2,"583":2,"585":1,"640":7,"642":2,"644":2,"649":4,"652":1,"656":1,"657":1,"660":2,"674":23,"675":1,"676":5,"677":2,"682":1,"696":1,"698":1,"703":1,"707":1,"710":1,"715":2,"720":3,"725":1,"733":3,"736":3,"740":1,"790":1,"792":1,"794":1,"798":1,"804":1,"806":1,"819":3,"821":1,"822":3,"827":1,"846":1,"850":2,"881":1,"884":1,"905":2,"915":1,"917":1,"922":3,"924":4,"926":4,"927":3,"929":1,"931":4,"934":2,"946":1,"949":1,"954":2,"955":1,"960":1,"964":2,"965":1,"967":1,"979":6,"980":29,"982":5,"983":4,"988":1,"991":1,"996":5,"999":1,"1018":8,"1021":2,"1042":1,"1050":2,"1055":1,"1059":6,"1062":1,"1074":1,"1075":1,"1078":2,"1090":1,"1091":10,"1092":1,"1093":2,"1094":1,"1095":1,"1100":2,"1103":2,"1108":1,"1111":1,"1116":1,"1133":1,"1136":1,"1175":1,"1176":1,"1177":1,"1184":3,"1199":30,"1203":29,"1207":79,"1208":40,"1212":1,"1214":1,"1229":1,"1232":2,"1237":9,"1247":6,"1257":5,"1258":1,"1259":38,"1262":28,"1263":12,"1265":7,"1269":3,"1270":90,"1271":9,"1286":105,"1290":2,"1294":1,"1297":6,"1300":90,"1301":56,"1302":3,"1304":3,"1306":1,"1307":4,"1308":3,"1309":73,"1310":8,"1311":70,"1312":26,"1313":1,"1316":43,"1317":11,"1318":5,"1319":2,"1320":14,"1322":1,"1323":162,"1324":142,"1339":14,"1350":9,"1352":1,"1354":8,"1359":234,"1365":2,"1366":2,"1367":2,"1368":7,"1369":10,"1377":4,"1378":3,"1380":26,"1395":60,"1396":136,"1400":1,"1402":13,"1404":3,"1406":1,"1410":1,"1413":2,"1414":3,"1415":97,"1417":253,"1419":1,"1420":2,"1421":4,"1425":3,"1427":41,"1436":13,"1438":5,"1441":6,"1442":2,"1496":26,"1500":2,"1526":7,"1531":1,"1576":1,"1577":11,"1582":1,"1583":1,"1585":1,"1586":2,"1591":3,"1600":1,"1651":1,"1685":1,"1686":1,"1707":2,"1771":1,"1994":2,"1995":1,"2000":2,"2085":1,"2118":2,"2119":2,"2122":3,"2126":5,"2136":2,"2138":1,"2150":1,"2163":1,"2166":1,"2167":1,"2172":2,"2173":1,"2175":1,"2179":3,"2198":1,"2199":2,"2202":1}}],["dependency",{"0":{"1402":1,"1435":1,"1504":1,"1505":1,"1569":1},"1":{"1196":1,"1197":1,"1198":1,"1199":1,"2170":1,"2171":1,"2172":1,"2173":1,"2174":1,"2175":1,"2176":1,"2177":1,"2178":1,"2179":1,"2180":1},"3":{"0":6,"23":2,"33":1,"68":1,"71":1,"72":1,"73":1,"111":1,"122":1,"130":1,"135":2,"145":4,"147":1,"220":1,"227":1,"230":3,"234":2,"235":9,"236":1,"237":2,"263":1,"265":1,"281":1,"310":1,"312":1,"343":1,"369":3,"370":2,"372":1,"376":2,"381":1,"397":1,"403":1,"405":1,"408":1,"415":1,"440":1,"441":1,"454":1,"459":2,"465":1,"509":1,"545":2,"546":1,"547":1,"583":7,"584":1,"585":1,"591":1,"599":1,"601":1,"603":1,"607":1,"609":7,"611":1,"612":1,"665":1,"666":1,"682":1,"684":2,"707":3,"708":1,"734":1,"741":2,"745":1,"801":1,"811":1,"818":1,"821":1,"827":2,"828":1,"830":1,"861":1,"914":1,"939":1,"941":1,"954":2,"980":1,"994":1,"996":4,"999":1,"1018":1,"1036":1,"1043":1,"1050":1,"1051":3,"1059":1,"1066":1,"1067":2,"1068":2,"1069":1,"1075":2,"1077":1,"1090":1,"1091":1,"1092":3,"1093":1,"1117":2,"1124":1,"1135":1,"1162":1,"1179":1,"1185":1,"1191":4,"1192":1,"1194":1,"1195":1,"1196":1,"1200":2,"1201":1,"1210":1,"1211":3,"1212":2,"1214":1,"1216":1,"1229":1,"1230":2,"1237":2,"1244":1,"1247":6,"1250":1,"1256":2,"1259":10,"1270":14,"1271":2,"1275":1,"1285":2,"1286":23,"1287":1,"1289":2,"1293":1,"1297":1,"1300":27,"1301":7,"1303":1,"1307":1,"1308":1,"1309":20,"1310":4,"1311":18,"1313":1,"1315":6,"1320":2,"1323":38,"1324":35,"1328":2,"1331":1,"1332":3,"1333":2,"1335":2,"1336":1,"1337":2,"1339":38,"1347":1,"1349":1,"1350":12,"1358":1,"1359":44,"1369":11,"1377":1,"1380":17,"1391":2,"1395":11,"1396":35,"1400":1,"1402":8,"1403":1,"1406":1,"1407":1,"1415":15,"1416":5,"1417":22,"1418":2,"1419":1,"1422":1,"1427":15,"1428":1,"1429":1,"1430":1,"1431":3,"1432":2,"1435":2,"1436":100,"1438":4,"1441":1,"1442":1,"1443":6,"1445":1,"1446":1,"1449":1,"1450":2,"1452":1,"1453":5,"1454":3,"1455":4,"1459":3,"1461":1,"1465":2,"1467":10,"1469":1,"1474":1,"1475":1,"1476":6,"1483":1,"1488":1,"1489":3,"1490":1,"1491":1,"1492":1,"1493":1,"1496":6,"1498":1,"1499":1,"1500":1,"1501":1,"1502":2,"1517":1,"1525":1,"1526":3,"1534":2,"1535":1,"1540":1,"1544":1,"1548":1,"1550":1,"1551":1,"1553":1,"1563":1,"1566":2,"1569":2,"1571":2,"1572":1,"1576":1,"1577":9,"1582":1,"1585":1,"1586":2,"1591":3,"1599":1,"1600":1,"1611":1,"1653":1,"1654":1,"1660":1,"1662":1,"1663":1,"1670":3,"1671":1,"1673":2,"1677":2,"1709":1,"1738":1,"1751":2,"1772":2,"1779":1,"1782":1,"1785":1,"1796":1,"1805":1,"1807":1,"1815":4,"1831":1,"1833":2,"1841":2,"1843":1,"1865":1,"1877":1,"1878":2,"1881":4,"1882":3,"1883":1,"1885":1,"1886":1,"1934":1,"1935":1,"1940":1,"1945":1,"1948":1,"1970":1,"1971":1,"2000":1,"2007":2,"2008":1,"2010":3,"2014":2,"2024":1,"2030":1,"2037":1,"2039":2,"2040":2,"2041":3,"2043":2,"2047":1,"2048":1,"2049":3,"2053":1,"2054":1,"2056":1,"2071":1,"2079":2,"2098":1,"2099":1,"2104":1,"2126":2,"2127":2,"2135":1,"2157":2,"2158":2,"2169":3,"2170":4,"2171":1,"2172":1,"2173":1,"2174":2,"2178":1,"2179":1,"2180":4,"2193":1,"2209":1,"2230":1,"2232":2}}],["dependentforeignkey",{"3":{"1247":1,"1359":2}}],["dependents",{"3":{"0":1,"543":2,"547":1,"549":1,"1286":2,"1315":2,"1323":1,"1339":1}}],["dependent",{"2":{"1239":1,"1859":1},"3":{"0":2,"386":1,"387":1,"388":1,"392":1,"461":1,"462":1,"487":1,"550":1,"551":1,"582":1,"583":2,"584":1,"585":1,"692":1,"1029":1,"1066":1,"1162":1,"1191":1,"1196":1,"1199":2,"1207":1,"1237":1,"1239":3,"1247":6,"1271":1,"1315":1,"1323":4,"1324":3,"1328":1,"1339":3,"1350":1,"1359":9,"1375":1,"1380":1,"1392":1,"1395":5,"1396":2,"1402":1,"1417":2,"1436":5,"1438":5,"1441":1,"1444":1,"1486":1,"1490":1,"1492":1,"1689":1,"1859":1,"1881":2,"1922":1,"2050":1,"2052":1,"2060":1,"2232":1}}],["depend",{"0":{"2071":1},"2":{"1504":1},"3":{"54":1,"69":1,"185":1,"226":1,"265":1,"310":1,"389":1,"415":1,"509":1,"536":1,"555":1,"585":1,"592":1,"651":1,"698":2,"716":1,"862":1,"987":1,"1060":1,"1187":1,"1211":1,"1214":1,"1222":1,"1229":1,"1247":4,"1259":2,"1269":2,"1270":7,"1275":1,"1278":1,"1286":9,"1300":9,"1301":1,"1309":3,"1311":5,"1312":1,"1316":1,"1317":1,"1323":5,"1324":8,"1330":1,"1339":4,"1350":5,"1359":3,"1369":2,"1377":1,"1395":7,"1396":6,"1415":3,"1416":1,"1417":7,"1427":1,"1431":1,"1433":1,"1436":22,"1438":4,"1441":1,"1443":1,"1453":1,"1489":4,"1492":1,"1504":1,"1538":2,"1585":1,"1638":1,"1660":1,"1781":1,"1832":1,"1841":1,"1861":1,"1880":2,"1881":1,"1882":1,"1894":1,"1908":1,"1946":1,"1961":1,"2039":1,"2042":1,"2043":1,"2047":1,"2069":1,"2104":2}}],["depending",{"3":{"0":1,"244":1,"397":1,"507":1,"513":1,"547":1,"1035":1,"1126":1,"1237":1,"1259":1,"1286":5,"1300":4,"1303":1,"1309":1,"1311":1,"1324":1,"1339":2,"1350":1,"1359":3,"1369":2,"1380":2,"1395":3,"1396":5,"1402":2,"1415":1,"1436":3,"1456":1,"1596":1,"1727":1,"1781":1,"1850":1,"1898":1,"2043":1,"2156":2}}],["dependson",{"3":{"1467":1}}],["dependsonconstanttimecomparison",{"3":{"1436":1}}],["dependsonaslowkeyderivationfunction",{"3":{"1436":1}}],["depends",{"3":{"0":3,"24":1,"54":1,"123":1,"131":1,"159":1,"166":1,"177":1,"236":1,"243":1,"259":1,"303":1,"320":1,"342":1,"349":1,"372":1,"399":1,"460":1,"461":1,"494":1,"507":3,"509":1,"511":2,"513":2,"543":1,"544":1,"549":1,"556":1,"566":1,"574":1,"584":1,"599":1,"642":1,"667":1,"676":1,"682":1,"707":1,"709":1,"720":1,"727":1,"742":1,"748":1,"749":1,"753":3,"756":1,"801":1,"809":2,"827":3,"829":1,"890":1,"905":1,"926":1,"946":2,"988":1,"1020":1,"1059":1,"1091":1,"1093":1,"1170":1,"1191":1,"1193":1,"1200":1,"1211":3,"1212":1,"1229":16,"1237":36,"1241":1,"1247":46,"1257":1,"1259":41,"1269":1,"1270":64,"1271":11,"1273":1,"1285":1,"1286":188,"1292":1,"1300":176,"1301":17,"1307":1,"1309":68,"1310":14,"1311":95,"1312":11,"1320":1,"1323":96,"1324":186,"1339":69,"1341":1,"1346":1,"1349":1,"1350":114,"1351":1,"1359":385,"1369":32,"1380":55,"1382":1,"1383":1,"1395":170,"1396":214,"1402":89,"1404":1,"1413":1,"1415":113,"1416":20,"1417":116,"1423":1,"1427":31,"1436":437,"1456":2,"1460":1,"1465":2,"1467":1,"1489":1,"1490":1,"1498":1,"1503":1,"1553":1,"1577":1,"1660":1,"1666":1,"1684":1,"1781":1,"1791":1,"1793":1,"1844":1,"1846":1,"1849":1,"1863":1,"1878":1,"1883":1,"1915":2,"1924":1,"1935":1,"2000":1,"2001":2,"2078":1,"2094":2,"2098":1,"2099":2,"2100":1,"2117":1,"2122":1,"2123":1,"2175":1,"2178":1,"2191":1,"2199":1,"2232":1}}],["deps",{"3":{"1192":1,"1199":1,"1456":2,"1496":9}}],["departure",{"3":{"725":1}}],["departs",{"3":{"698":1,"1300":1,"1416":1}}],["depthbound",{"3":{"1436":2}}],["depthorinsightquality",{"3":{"1369":1}}],["depthorinsightqualityscore",{"3":{"1350":1,"1359":1,"1369":1}}],["depth",{"0":{"1903":1},"2":{"24":1,"1365":1,"2191":1},"3":{"0":1,"24":1,"27":2,"119":1,"207":1,"328":1,"333":1,"562":1,"566":2,"567":1,"650":1,"707":2,"725":1,"883":1,"1116":1,"1124":1,"1185":1,"1228":2,"1229":1,"1241":1,"1242":1,"1247":4,"1256":1,"1259":11,"1263":1,"1270":2,"1275":1,"1286":6,"1300":2,"1311":5,"1324":4,"1336":1,"1339":3,"1350":1,"1359":1,"1365":1,"1366":1,"1369":1,"1395":1,"1396":1,"1402":1,"1415":4,"1417":1,"1436":17,"1453":2,"1454":1,"1455":2,"1467":2,"1475":1,"1476":1,"1480":1,"1548":1,"1590":1,"1627":1,"1639":2,"1640":1,"1658":1,"1665":1,"1692":1,"1757":1,"1821":1,"1823":1,"1826":1,"1827":1,"1969":1,"2006":1,"2122":1,"2126":1,"2148":1,"2156":3,"2157":2,"2159":1,"2191":2,"2193":2}}],["deploynotificationhub=false",{"3":{"1481":1}}],["deploynotificationhub",{"2":{"1470":1,"1481":1,"1484":1},"3":{"1467":4,"1470":1,"1481":1,"1484":1}}],["deployability",{"3":{"1323":1,"1544":1,"1577":1,"1589":1,"1596":1,"1597":1}}],["deployable",{"3":{"46":1,"597":1,"599":2,"603":1,"610":1,"838":1,"868":1,"1237":1,"1396":1,"1436":2,"1439":1,"1445":1,"1450":1,"1455":1,"1464":1,"1467":2,"1477":2,"1544":1,"1788":2,"1793":1,"2110":1}}],["deployables",{"3":{"0":1,"61":1,"62":1,"599":1,"1339":2,"1436":1,"1442":1,"1467":3,"1792":1,"2027":1}}],["deploying",{"3":{"626":1,"1044":1,"1427":1,"1455":1,"1467":1,"1577":1,"2192":1}}],["deployers",{"3":{"1577":1,"1582":1}}],["deployer",{"3":{"69":1,"1578":1,"1583":1,"1680":1,"1904":1}}],["deployed",{"2":{"1331":1},"3":{"0":10,"18":1,"26":1,"58":1,"62":1,"79":1,"91":1,"95":1,"96":1,"136":2,"155":1,"159":1,"195":1,"259":1,"361":1,"390":1,"395":1,"396":1,"397":2,"459":1,"509":1,"550":1,"564":1,"591":2,"598":1,"599":1,"607":2,"609":2,"611":5,"618":1,"620":1,"625":1,"626":2,"629":1,"665":1,"667":3,"676":1,"690":1,"713":1,"725":1,"732":1,"757":1,"758":1,"765":1,"766":1,"773":1,"776":1,"827":2,"860":1,"861":2,"863":1,"913":1,"914":1,"915":1,"918":1,"933":1,"971":1,"972":2,"995":1,"1017":1,"1018":2,"1021":1,"1040":1,"1058":1,"1060":1,"1066":1,"1082":1,"1085":1,"1107":1,"1108":1,"1109":1,"1118":2,"1119":1,"1124":1,"1135":1,"1143":1,"1147":1,"1254":2,"1259":5,"1270":10,"1286":6,"1293":1,"1300":2,"1301":6,"1309":2,"1311":3,"1313":1,"1323":3,"1324":2,"1331":1,"1333":1,"1335":1,"1339":14,"1350":3,"1359":3,"1368":1,"1369":4,"1396":3,"1401":1,"1402":3,"1415":2,"1427":1,"1434":1,"1435":1,"1436":13,"1437":1,"1438":2,"1441":2,"1442":2,"1443":2,"1445":2,"1455":1,"1465":4,"1467":4,"1474":1,"1477":2,"1478":2,"1481":1,"1484":1,"1486":1,"1489":1,"1492":2,"1496":2,"1500":2,"1526":4,"1531":1,"1577":1,"1596":2,"1641":1,"1671":1,"1672":1,"1673":1,"1677":1,"1679":1,"1718":1,"1723":1,"1785":2,"1841":1,"1848":1,"1855":1,"1861":1,"1886":1,"1887":2,"1888":2,"1892":3,"1909":1,"1916":1,"1923":2,"1924":1,"1970":1,"2010":1,"2043":2,"2044":2,"2047":2,"2056":1,"2057":1,"2110":1,"2143":1,"2154":1,"2156":1,"2194":3,"2198":1,"2214":1,"2221":2,"2228":1,"2229":1}}],["deploymentmode",{"2":{"1470":1},"3":{"1470":1}}],["deploymentparameters",{"2":{"1466":1},"3":{"1466":1}}],["deployment",{"0":{"1466":1,"1468":1,"1554":1},"1":{"1462":1,"1463":1,"1464":1,"1465":1,"1466":1,"1467":1,"1468":1,"1469":1,"1470":1},"2":{"1331":1,"1335":1,"1575":1,"1674":1},"3":{"0":3,"31":1,"32":1,"46":1,"47":1,"55":1,"158":1,"159":1,"168":2,"174":1,"177":2,"193":1,"196":1,"216":1,"227":1,"234":1,"242":1,"243":1,"244":1,"245":1,"255":1,"283":1,"312":1,"343":1,"360":1,"361":1,"386":1,"397":1,"398":1,"403":1,"526":1,"598":1,"599":6,"600":1,"601":2,"608":1,"609":2,"611":3,"612":1,"640":1,"641":2,"650":1,"664":1,"665":4,"666":1,"667":1,"675":1,"700":2,"756":1,"790":1,"792":1,"820":1,"821":1,"827":6,"837":1,"838":1,"839":1,"870":1,"871":1,"915":1,"930":1,"933":1,"948":1,"972":2,"1042":1,"1044":1,"1059":1,"1076":1,"1092":1,"1109":1,"1192":1,"1216":1,"1237":1,"1255":2,"1257":1,"1259":8,"1286":9,"1300":10,"1301":3,"1309":1,"1311":13,"1320":3,"1323":21,"1324":14,"1331":2,"1332":2,"1333":1,"1334":1,"1335":1,"1336":1,"1337":1,"1338":2,"1339":22,"1350":2,"1357":1,"1358":1,"1380":2,"1391":1,"1395":3,"1396":10,"1400":1,"1402":1,"1415":2,"1416":1,"1417":1,"1424":1,"1427":3,"1429":1,"1431":1,"1436":17,"1438":1,"1441":2,"1442":1,"1443":1,"1445":1,"1446":1,"1450":1,"1453":3,"1454":2,"1455":8,"1461":2,"1462":2,"1463":2,"1466":1,"1467":22,"1468":1,"1469":1,"1470":2,"1472":3,"1474":1,"1475":1,"1476":2,"1481":1,"1483":1,"1486":1,"1488":1,"1489":2,"1492":1,"1493":1,"1496":4,"1499":1,"1525":1,"1526":2,"1534":1,"1535":1,"1554":1,"1574":1,"1575":4,"1577":21,"1578":1,"1581":2,"1582":4,"1583":2,"1584":1,"1586":3,"1591":1,"1599":1,"1600":1,"1630":1,"1670":2,"1674":2,"1677":2,"1678":1,"1706":1,"1723":2,"1724":1,"1784":1,"1796":1,"1800":3,"1842":1,"1843":1,"1849":2,"1852":1,"1893":1,"1898":1,"1904":2,"1911":1,"1915":1,"1917":1,"1936":1,"1940":1,"1970":1,"1999":1,"2001":3,"2010":1,"2022":1,"2036":1,"2046":1,"2109":1,"2113":2,"2141":1,"2150":2,"2152":1,"2156":1,"2157":1,"2158":4,"2160":1,"2192":2,"2232":1}}],["deployments",{"3":{"0":1,"224":1,"246":1,"382":1,"395":1,"397":1,"409":1,"434":1,"584":1,"698":1,"811":1,"973":1,"990":1,"1152":1,"1154":1,"1259":1,"1300":1,"1301":1,"1311":1,"1323":2,"1443":1,"1453":1,"1454":1,"1475":1,"1554":1,"1898":1,"1923":1,"1949":1,"2109":2,"2114":1,"2115":1}}],["deploys",{"3":{"0":2,"67":1,"403":2,"564":2,"590":1,"627":1,"766":1,"768":1,"863":1,"865":1,"869":1,"916":1,"1091":1,"1212":1,"1436":1,"1445":1,"1455":4,"1465":2,"1467":2,"1470":1,"1472":1,"1475":1,"1525":1,"1526":3,"1531":1,"1534":2,"1535":1,"1554":1,"1588":1,"1596":1,"1889":1}}],["deploy",{"0":{"1455":1,"1466":1,"2036":1,"2189":1},"1":{"623":1,"624":1,"625":1,"626":1,"627":1,"628":1,"629":1,"630":1,"763":1,"764":1,"765":1,"766":1,"767":1,"768":1,"769":1,"770":1,"858":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"865":1},"2":{"63":1,"291":1,"296":1,"375":1,"452":1,"567":1,"589":1,"594":1,"597":1,"604":1,"616":1,"620":1,"621":1,"624":2,"625":1,"626":1,"628":1,"629":2,"642":1,"668":1,"755":1,"756":2,"761":2,"764":2,"766":1,"767":2,"768":3,"769":1,"770":1,"863":1,"864":1,"867":1,"877":1,"975":1,"1075":1,"1457":1,"1458":1,"1460":2,"1461":2,"1462":1,"1463":2,"1470":1,"1475":1,"1478":1,"1482":1,"1524":1,"1525":1,"1531":1,"1532":1,"1598":1},"3":{"0":35,"25":1,"58":2,"60":1,"62":5,"63":2,"145":2,"150":2,"228":1,"234":1,"246":1,"290":1,"291":14,"292":1,"293":3,"295":1,"296":1,"299":1,"300":1,"301":1,"310":1,"360":1,"365":1,"374":1,"375":4,"405":1,"451":1,"452":3,"453":1,"517":1,"558":1,"563":9,"564":18,"565":1,"566":7,"567":3,"573":2,"589":2,"591":13,"594":3,"595":1,"597":1,"599":8,"600":2,"601":3,"602":1,"604":1,"609":1,"616":4,"618":5,"619":1,"620":6,"621":1,"623":1,"624":10,"625":11,"626":56,"627":10,"628":11,"629":12,"630":2,"638":1,"639":1,"640":6,"641":1,"642":5,"644":1,"665":3,"668":3,"669":3,"698":1,"706":1,"708":1,"718":1,"732":1,"733":1,"755":2,"756":10,"757":36,"758":6,"759":8,"760":5,"761":5,"762":1,"763":1,"764":5,"765":2,"766":23,"767":5,"768":9,"769":2,"770":2,"774":1,"776":1,"827":2,"840":1,"858":1,"860":1,"861":6,"862":1,"863":6,"864":2,"865":2,"867":1,"868":3,"869":4,"870":7,"871":1,"872":1,"873":3,"874":1,"875":2,"876":1,"877":4,"907":1,"914":1,"915":2,"917":1,"953":1,"971":3,"972":4,"973":2,"974":2,"975":1,"976":1,"1017":1,"1018":6,"1019":1,"1020":2,"1058":1,"1075":3,"1101":1,"1116":1,"1119":1,"1192":1,"1212":10,"1215":1,"1247":1,"1286":1,"1300":1,"1301":2,"1309":3,"1311":2,"1312":2,"1318":1,"1323":2,"1324":1,"1328":1,"1339":2,"1357":1,"1359":4,"1366":1,"1380":1,"1396":6,"1409":1,"1414":1,"1415":2,"1436":19,"1438":6,"1445":20,"1446":1,"1449":2,"1450":2,"1452":2,"1453":1,"1454":1,"1455":249,"1456":14,"1457":13,"1458":2,"1459":6,"1460":12,"1461":19,"1462":2,"1463":16,"1464":4,"1465":21,"1466":15,"1467":52,"1468":3,"1469":3,"1470":8,"1472":10,"1474":15,"1475":29,"1476":9,"1477":7,"1478":3,"1481":1,"1482":7,"1484":3,"1485":1,"1486":31,"1489":1,"1490":11,"1491":2,"1492":70,"1493":1,"1494":1,"1496":16,"1509":1,"1523":1,"1524":9,"1525":7,"1526":75,"1530":1,"1531":14,"1532":1,"1533":3,"1534":12,"1535":14,"1544":3,"1545":1,"1547":1,"1554":3,"1570":2,"1575":3,"1577":6,"1581":1,"1582":3,"1583":1,"1584":1,"1588":2,"1589":10,"1590":4,"1591":80,"1595":2,"1596":24,"1597":3,"1598":2,"1599":10,"1600":16,"1611":6,"1631":1,"1670":2,"1724":1,"1739":2,"1775":1,"1884":1,"1887":1,"1888":1,"1889":2,"1916":1,"1947":1,"1948":1,"1964":1,"2003":1,"2034":3,"2036":3,"2037":2,"2043":1,"2057":2,"2105":1,"2110":1,"2112":1,"2134":1,"2142":1,"2146":1,"2147":1,"2154":1,"2181":1,"2190":1,"2194":1,"2199":1,"2232":11}}],["devops",{"0":{"1554":1},"2":{"1335":1},"3":{"1192":6,"1194":2,"1212":25,"1216":2,"1259":1,"1286":3,"1300":3,"1309":1,"1311":7,"1323":7,"1324":3,"1331":1,"1332":1,"1334":1,"1335":1,"1339":13,"1357":1,"1358":1,"1369":1,"1380":1,"1396":4,"1415":1,"1416":1,"1417":1,"1427":1,"1436":6,"1441":1,"1445":1,"1446":1,"1450":1,"1453":1,"1454":1,"1455":4,"1461":1,"1462":1,"1463":1,"1467":1,"1469":1,"1472":1,"1475":1,"1477":1,"1481":1,"1483":1,"1486":1,"1489":1,"1492":1,"1493":1,"1494":2,"1496":67,"1497":1,"1499":11,"1526":1,"1535":1,"1577":1,"1581":1,"1582":1,"1583":1,"1584":1,"1590":1,"1591":1,"1600":1,"1674":1,"1796":1,"1800":1,"2014":1,"2038":1,"2213":2,"2217":1,"2218":1,"2219":2,"2220":2}}],["develop",{"3":{"1570":1,"1648":1,"1661":1}}],["developing",{"3":{"1537":1,"1797":1,"2220":1}}],["developed",{"3":{"1499":22,"1572":1,"2220":2}}],["developercertificate",{"2":{"1328":1,"1449":1},"3":{"1328":1,"1339":1,"1430":1,"1449":1}}],["developercertificateavailabilitytests",{"3":{"1199":1,"1207":2,"1487":1}}],["developercertificateavailability",{"2":{"1067":1,"1428":1,"1430":1,"1488":1},"3":{"1067":3,"1199":3,"1207":2,"1428":1,"1430":2,"1488":2}}],["developers",{"1":{"1628":1,"1629":1,"1630":1,"1631":1,"1632":1,"1633":1,"1634":1,"1635":1,"1636":1,"1637":1,"1638":1,"1639":1,"1640":1,"1641":1},"3":{"86":1,"527":1,"566":1,"1211":1,"1311":1,"1340":1,"1364":3,"1369":4,"1395":2,"1416":2,"1455":1,"1523":1,"1570":1,"1628":1,"1629":1,"1637":1,"1638":1,"1785":1,"2004":1,"2050":1,"2095":1,"2110":1,"2214":1,"2216":1,"2221":1,"2239":2,"2240":3,"2242":1}}],["developer",{"0":{"1570":1},"2":{"1327":1},"3":{"0":1,"265":1,"350":1,"486":1,"576":1,"640":2,"641":2,"642":1,"650":1,"665":2,"819":1,"820":1,"914":2,"916":1,"930":1,"932":1,"982":1,"1012":1,"1067":1,"1069":1,"1091":1,"1109":1,"1161":1,"1216":1,"1237":1,"1259":1,"1270":1,"1271":1,"1286":3,"1311":4,"1323":8,"1324":4,"1326":1,"1327":1,"1328":1,"1335":2,"1336":1,"1339":12,"1354":1,"1359":1,"1396":5,"1415":1,"1416":2,"1417":4,"1427":1,"1436":23,"1440":2,"1441":2,"1442":1,"1446":1,"1449":1,"1450":1,"1453":1,"1455":1,"1456":1,"1461":1,"1464":5,"1481":1,"1482":2,"1486":1,"1488":1,"1489":1,"1490":1,"1492":1,"1493":1,"1499":1,"1526":1,"1535":1,"1553":1,"1554":1,"1577":1,"1581":1,"1582":1,"1583":1,"1591":1,"1597":1,"1796":1,"1843":1,"1885":1,"1894":1,"1956":1,"1970":1,"2030":1,"2106":1,"2220":2,"2225":1,"2238":1}}],["development",{"0":{"2225":1},"2":{"92":1,"95":1,"96":1,"102":1,"573":1,"1429":1,"1490":1},"3":{"0":4,"31":2,"92":1,"93":1,"95":3,"96":1,"102":1,"104":1,"212":1,"214":2,"218":1,"219":2,"265":4,"290":1,"296":1,"397":1,"401":1,"451":1,"452":1,"573":1,"638":1,"639":1,"640":1,"666":1,"667":1,"774":3,"775":1,"790":1,"914":1,"915":1,"1066":1,"1067":1,"1068":1,"1091":1,"1108":7,"1110":1,"1112":1,"1183":1,"1212":1,"1259":1,"1273":2,"1284":1,"1286":13,"1298":1,"1300":2,"1309":2,"1311":22,"1320":4,"1323":13,"1324":8,"1333":1,"1336":2,"1339":10,"1380":1,"1395":1,"1396":1,"1412":1,"1415":4,"1416":1,"1417":1,"1421":2,"1427":3,"1429":2,"1430":1,"1434":1,"1436":6,"1438":3,"1441":3,"1443":3,"1453":1,"1460":1,"1467":1,"1486":1,"1487":1,"1488":2,"1489":1,"1490":3,"1591":1,"1631":1,"1640":1,"1653":1,"1655":1,"1661":1,"1663":1,"1664":1,"1666":1,"1667":2,"1719":1,"1723":1,"1842":1,"1843":1,"1898":3,"1904":2,"1925":1,"2016":1,"2028":1,"2083":1,"2126":1,"2132":1,"2149":1,"2150":2,"2156":1,"2172":2,"2213":2,"2218":1,"2219":1,"2221":1,"2225":1,"2240":1,"2243":1}}],["deviates",{"3":{"1370":1}}],["deviate",{"3":{"1359":1}}],["deviations",{"0":{"1376":1},"3":{"470":1,"1169":1,"1311":1,"1396":1}}],["deviation",{"3":{"0":1,"107":1,"109":1,"111":2,"1237":1,"1300":1,"1309":2,"1311":3,"1324":3,"1350":1,"1417":1,"1436":1,"1638":1}}],["devicetestchecklist",{"3":{"1481":1}}],["devicetype",{"3":{"1300":1,"1415":2,"1630":1,"1641":1}}],["deviceownerauthentication",{"3":{"1417":1}}],["devicecredential",{"3":{"1417":1}}],["devicecapabilitiesinitializer",{"2":{"413":1},"3":{"413":1,"1199":2,"1203":1,"1207":2,"1417":22}}],["devicefieldmaxlength",{"2":{"1405":1},"3":{"1405":1,"1415":3}}],["deviceformfactor",{"3":{"1300":1,"1415":2,"1630":1,"1641":1}}],["devicename",{"3":{"1300":1,"1415":2,"1630":1,"1641":1}}],["devicemanufacturer",{"3":{"1300":1,"1415":3,"1630":1,"1641":1}}],["devicemodel",{"3":{"1300":1,"1415":3,"1630":1,"1641":1}}],["deviceprefs",{"3":{"1417":6}}],["devicepreferencekeys",{"3":{"1199":3,"1203":1,"1207":2,"1417":13}}],["deviceplatform",{"3":{"1300":1,"1415":2,"1417":4,"1630":1,"1641":1}}],["deviceid",{"3":{"1300":1,"1415":3,"1630":1,"1641":6}}],["deviceinstallationrequest",{"2":{"1303":1,"1308":1},"3":{"1199":6,"1203":1,"1207":2,"1286":2,"1303":1,"1308":2,"1309":9,"1323":3,"1496":2}}],["deviceinfo",{"2":{"682":1},"3":{"682":1,"1417":11,"1641":1}}],["deviceuimodule",{"2":{"1626":1},"3":{"649":2,"652":1,"1199":2,"1203":1,"1207":2,"1324":6,"1416":18,"1496":1,"1599":2,"1626":1,"1627":1}}],["devicesettings",{"3":{"1396":1,"1416":1}}],["devicestorage",{"2":{"1417":1},"3":{"416":1,"1203":9,"1207":18,"1417":34,"2118":1}}],["devicestatus",{"2":{"1417":2},"3":{"416":1,"1203":13,"1207":26,"1417":39,"2118":2}}],["devices",{"0":{"1713":1,"1936":1},"3":{"0":2,"186":1,"225":1,"274":1,"434":1,"616":1,"618":1,"903":1,"905":2,"906":2,"907":1,"910":1,"1212":1,"1286":1,"1300":5,"1302":1,"1309":4,"1311":2,"1323":3,"1324":15,"1395":1,"1415":2,"1416":1,"1417":10,"1436":3,"1438":1,"1467":1,"1559":1,"1641":1,"1666":1,"1747":1,"1932":1,"1933":1,"1936":2,"1938":1,"1982":2,"1984":1,"2081":1,"2220":1}}],["devicescontrollertests",{"3":{"1199":1,"1207":2,"1309":2}}],["devicescontroller",{"2":{"1302":1,"1936":1,"1938":1,"1941":1},"3":{"0":1,"188":1,"434":1,"1199":2,"1203":1,"1207":2,"1286":4,"1302":1,"1303":1,"1308":3,"1309":10,"1311":1,"1323":4,"1496":3,"1936":1,"1938":1,"1941":1,"2137":1}}],["device",{"0":{"1290":1,"1308":1,"1559":1,"1982":1},"1":{"410":1,"411":1,"412":1,"413":1,"414":1,"415":1,"416":1,"679":1,"680":1,"681":1,"682":1,"683":1,"684":1,"685":1,"686":1,"902":2,"903":2,"904":2,"905":2,"906":2,"907":2,"908":2,"909":2,"910":2,"1417":1,"1980":1,"1981":1,"1982":1,"1983":1,"1984":1,"1985":1,"2116":1,"2117":1,"2118":1,"2119":1,"2120":1,"2121":1,"2122":1,"2123":1},"3":{"0":12,"188":1,"265":4,"266":1,"267":1,"273":1,"350":1,"353":1,"410":1,"411":1,"412":1,"413":1,"422":1,"426":1,"427":1,"433":2,"434":1,"435":3,"497":2,"499":1,"500":1,"501":5,"510":1,"556":1,"618":2,"649":1,"650":1,"653":1,"679":1,"681":2,"683":1,"686":1,"689":1,"691":2,"736":1,"902":2,"903":3,"904":3,"905":12,"906":7,"907":3,"910":1,"954":1,"1192":3,"1195":1,"1202":2,"1203":2,"1212":5,"1216":1,"1283":2,"1285":1,"1286":9,"1287":2,"1289":2,"1290":5,"1291":1,"1296":1,"1300":55,"1302":1,"1308":2,"1309":8,"1311":15,"1322":1,"1323":12,"1324":59,"1350":2,"1359":2,"1381":2,"1391":3,"1395":16,"1396":19,"1402":1,"1405":2,"1409":1,"1412":1,"1415":20,"1416":25,"1417":131,"1427":1,"1436":11,"1438":8,"1479":3,"1481":2,"1482":1,"1489":1,"1490":1,"1491":1,"1496":11,"1499":1,"1505":1,"1511":1,"1517":1,"1577":3,"1585":2,"1599":1,"1626":2,"1627":1,"1629":1,"1630":5,"1631":2,"1632":1,"1641":29,"1659":1,"1660":1,"1667":3,"1668":1,"1669":6,"1672":1,"1711":1,"1779":3,"1796":1,"1936":3,"1938":1,"1940":1,"1976":1,"1977":1,"1979":1,"1980":2,"1982":6,"1984":2,"1985":6,"2073":1,"2082":1,"2083":1,"2086":1,"2115":1,"2116":2,"2117":2,"2118":1,"2120":1,"2123":3,"2137":1,"2208":1,"2210":2,"2232":4}}],["dev",{"0":{"1364":1},"1":{"637":1,"638":1,"639":1,"640":1,"641":1,"642":1,"643":1,"644":1,"645":1,"1105":1,"1106":1,"1107":1,"1108":1,"1109":1,"1110":1,"1111":1,"1112":1},"3":{"0":6,"92":1,"95":2,"96":1,"102":1,"104":1,"290":1,"349":1,"351":1,"450":2,"451":1,"556":1,"557":1,"637":1,"643":1,"818":1,"820":1,"838":1,"1067":1,"1069":1,"1105":1,"1116":1,"1212":2,"1257":1,"1286":1,"1300":1,"1311":2,"1323":2,"1339":2,"1364":2,"1369":3,"1416":3,"1421":1,"1430":1,"1436":2,"1441":3,"1442":1,"1449":1,"1455":1,"1456":2,"1488":1,"1490":1,"1492":1,"1554":1,"1568":1,"1570":3,"1577":1,"1611":1,"1718":1,"1727":1,"1898":1,"1904":1,"1974":1,"2055":1,"2132":1,"2133":1,"2232":2}}],["december",{"3":{"2220":2}}],["decaying",{"3":{"1436":1}}],["decays",{"3":{"1005":1,"1019":1,"1436":1}}],["decade",{"3":{"1436":1}}],["deck",{"3":{"1115":2,"1117":1,"1118":1,"1340":1,"1342":1,"1350":2,"1357":1,"1389":2,"1395":2,"2239":1}}],["decks",{"3":{"0":1,"443":1,"1373":1,"1380":1,"1389":1,"1467":2,"1640":1}}],["decreasing",{"3":{"1767":1}}],["decreaseinventory",{"3":{"1746":1,"1749":2,"1769":1}}],["decreaseinventoryhandler",{"3":{"1270":1}}],["decreaseinventoryapplier",{"3":{"1270":1}}],["decrease",{"3":{"1270":1,"1496":1,"1742":2,"1746":1,"1749":1,"1767":1,"1768":1}}],["decreaseorderapplier",{"3":{"1199":3,"1207":1}}],["decreased",{"3":{"926":1,"1270":1}}],["decrementasync",{"2":{"1765":1},"3":{"1765":1}}],["decrementing",{"3":{"1323":1}}],["decremented",{"3":{"1125":1,"1324":1,"1835":1,"2161":1}}],["decrements",{"3":{"535":1,"1309":1,"1324":2,"1591":2,"1749":2,"1765":1,"2161":1}}],["decrement",{"3":{"201":1,"535":1,"1286":2,"1309":2,"1315":1,"1324":4,"1600":2,"1749":1,"1881":1,"2161":2}}],["decryptable",{"3":{"667":1}}],["decrypted",{"3":{"664":2,"1336":1,"1339":2,"1442":1,"1970":2}}],["decryption",{"3":{"359":1,"365":1,"665":1,"667":1,"670":1,"1284":1,"1286":1,"1339":1,"1442":1,"2142":1}}],["decrypting",{"3":{"359":2,"2142":2,"2146":1}}],["decrypts",{"3":{"358":2,"359":1,"361":1,"1286":4,"1903":1,"2140":2,"2142":1}}],["decrypt",{"2":{"359":1,"360":1,"2142":1},"3":{"0":1,"359":4,"360":2,"361":1,"1212":1,"1286":4,"1970":1,"2142":4,"2143":1,"2232":1}}],["declining",{"3":{"649":1,"827":1,"828":1,"1324":1,"1339":1,"1350":1,"1396":1,"1415":2,"1417":1}}],["declinequeue",{"3":{"1350":1,"1359":4,"1395":1}}],["decline",{"2":{"1633":1},"3":{"0":1,"742":1,"827":3,"840":1,"915":1,"979":1,"1311":1,"1324":1,"1344":1,"1350":1,"1417":1,"1455":1,"1492":1,"1630":2,"1631":3,"1632":1,"1633":1,"1635":2,"1640":1,"2135":1,"2139":1}}],["declinedsessions",{"3":{"1350":1}}],["declined",{"2":{"1633":1},"3":{"0":2,"151":1,"245":1,"286":1,"405":1,"539":1,"543":1,"659":1,"785":1,"800":1,"827":1,"832":1,"947":1,"1035":1,"1051":3,"1141":1,"1212":1,"1311":1,"1339":1,"1344":1,"1347":1,"1350":3,"1359":27,"1375":1,"1380":2,"1395":1,"1396":3,"1630":1,"1631":2,"1633":1,"1635":2,"1639":2,"2032":1}}],["declines",{"1":{"824":1,"825":1,"826":1,"827":1,"828":1,"829":1,"830":1,"831":1,"832":1,"833":1,"834":1},"3":{"0":2,"692":1,"706":1,"742":1,"745":1,"824":1,"825":1,"827":1,"834":1,"840":1,"948":1,"964":1,"968":1,"1017":1,"1212":1,"1301":1,"1311":1,"1324":1,"1337":1,"1339":3,"1395":1,"1422":1,"1948":1,"2028":1,"2232":1}}],["declarable",{"3":{"1286":1}}],["declaratively",{"3":{"1237":1,"1321":1,"1350":1,"1359":3,"1396":1,"1411":1,"1465":1,"1662":1}}],["declarative",{"3":{"12":1,"838":1,"1237":1,"1247":1,"1264":1,"1270":1,"1286":4,"1297":1,"1309":1,"1310":2,"1323":5,"1324":3,"1359":11,"1369":1,"1380":5,"1396":3,"1402":3,"1415":2,"1416":1,"1436":2,"1662":1,"1668":1,"1865":1,"1867":1,"1868":1,"1952":1,"1955":1,"2066":1,"2229":1}}],["declarativenavigationpopulatortests",{"3":{"1199":1,"1207":3}}],["declarativenavigationpopulator",{"2":{"11":1,"12":1,"1865":1},"3":{"11":1,"12":1,"1199":19,"1203":1,"1207":2,"1310":16,"1359":29,"1402":3,"1865":1}}],["declarationfailure",{"3":{"1436":2}}],["declarationrule",{"2":{"1436":2},"3":{"1436":6}}],["declaration",{"0":{"1384":1},"3":{"0":3,"102":1,"126":1,"130":4,"135":1,"138":1,"139":1,"141":1,"142":2,"160":2,"166":1,"184":1,"251":2,"256":2,"257":1,"336":1,"364":1,"388":1,"413":1,"428":1,"454":1,"463":1,"464":1,"471":1,"492":1,"543":1,"550":1,"585":4,"609":1,"618":1,"633":1,"682":1,"683":1,"726":1,"741":1,"819":1,"821":1,"827":1,"832":1,"834":1,"838":1,"848":1,"889":1,"906":1,"923":1,"954":1,"966":1,"967":1,"980":1,"981":3,"982":1,"1050":1,"1051":1,"1052":1,"1124":1,"1146":1,"1156":1,"1184":1,"1204":1,"1212":1,"1229":3,"1237":6,"1247":4,"1270":15,"1286":20,"1300":7,"1301":1,"1309":1,"1310":3,"1311":10,"1312":1,"1323":18,"1324":15,"1326":1,"1331":1,"1339":1,"1350":7,"1353":1,"1357":1,"1359":38,"1366":1,"1369":8,"1375":1,"1376":1,"1380":2,"1395":11,"1396":15,"1402":1,"1415":17,"1416":1,"1417":6,"1431":1,"1436":50,"1441":3,"1443":1,"1451":1,"1455":1,"1457":1,"1473":1,"1488":1,"1496":10,"1500":3,"1600":1,"1962":1,"2008":1,"2042":1,"2057":1,"2089":1,"2232":1}}],["declarations",{"2":{"1214":1},"3":{"0":4,"11":1,"130":2,"135":2,"136":1,"138":2,"139":1,"141":4,"142":1,"395":1,"531":1,"543":2,"550":2,"551":1,"572":1,"583":1,"607":1,"610":1,"621":1,"681":1,"966":1,"967":1,"980":1,"999":1,"1052":1,"1055":1,"1205":1,"1214":1,"1233":1,"1237":1,"1270":2,"1286":2,"1311":1,"1323":1,"1324":1,"1350":1,"1359":2,"1369":2,"1396":1,"1415":3,"1417":1,"1436":11,"1441":1,"1483":1,"1488":1,"1489":1,"1577":2,"1582":1,"1881":1,"2044":1,"2055":1,"2100":1}}],["declaringentitytype",{"3":{"1247":1,"1310":2}}],["declaringtype",{"2":{"10":1},"3":{"10":1,"1310":1,"1436":3,"1865":1}}],["declaring",{"0":{"1266":1,"1326":1},"3":{"0":2,"24":1,"39":2,"109":1,"131":1,"132":1,"330":1,"471":1,"584":1,"611":1,"642":1,"650":1,"676":1,"782":1,"829":1,"889":1,"1019":1,"1051":1,"1055":1,"1116":1,"1161":3,"1196":1,"1236":1,"1237":1,"1241":1,"1247":3,"1249":1,"1256":1,"1259":4,"1264":1,"1270":4,"1271":1,"1276":1,"1282":1,"1285":1,"1286":13,"1297":1,"1300":7,"1309":1,"1310":5,"1311":3,"1323":6,"1324":6,"1339":1,"1350":3,"1359":27,"1369":2,"1373":1,"1380":3,"1389":1,"1395":2,"1396":4,"1402":2,"1412":1,"1415":6,"1417":1,"1431":1,"1436":29,"1441":1,"1447":1,"1451":1,"1467":4,"1478":1,"1489":1,"1698":1,"1810":1,"1821":1,"1834":1,"1884":1,"1994":1,"2033":1,"2063":1,"2126":1}}],["declareatleastonehandler",{"3":{"1436":1}}],["declareanauthorizationdecision",{"2":{"189":1},"3":{"189":1,"1300":1,"1436":3}}],["declare",{"3":{"0":5,"5":1,"24":1,"59":1,"68":1,"71":1,"91":1,"95":1,"117":2,"136":1,"145":2,"147":2,"149":1,"155":1,"160":2,"162":1,"166":2,"184":2,"186":2,"189":1,"243":2,"265":2,"373":1,"448":1,"530":1,"602":1,"607":1,"609":2,"651":1,"674":2,"782":1,"784":1,"825":1,"827":2,"838":2,"846":1,"881":1,"889":1,"922":1,"923":1,"946":1,"963":1,"964":1,"976":1,"1054":1,"1059":1,"1074":1,"1085":1,"1116":1,"1117":1,"1237":4,"1242":1,"1247":3,"1255":1,"1259":4,"1266":1,"1270":8,"1279":2,"1286":18,"1300":9,"1301":1,"1309":2,"1310":1,"1320":1,"1323":2,"1324":10,"1338":1,"1339":2,"1345":1,"1349":1,"1350":1,"1359":14,"1362":2,"1363":1,"1369":3,"1374":3,"1380":3,"1384":1,"1395":2,"1396":4,"1402":2,"1406":1,"1409":1,"1415":7,"1416":1,"1417":3,"1431":2,"1436":29,"1455":1,"1474":1,"1489":3,"1491":1,"1600":1,"1627":1,"1653":1,"1654":1,"1667":2,"1697":1,"1719":1,"1721":1,"1753":1,"1827":2,"1879":1,"1886":1,"1953":1,"1955":1,"1961":1,"1962":1,"1965":1,"1994":1,"1997":1,"2014":1,"2022":1,"2033":1,"2035":1,"2037":1,"2038":2,"2046":1,"2080":1,"2085":1,"2098":2,"2103":1,"2114":1,"2126":1,"2132":1,"2136":1,"2158":1}}],["declaredpublicproperties",{"3":{"1436":1}}],["declaredengines",{"3":{"1286":1}}],["declaredresulttype",{"3":{"1270":3}}],["declarednamecache",{"3":{"1259":1,"1286":1}}],["declaredonly",{"2":{"966":1},"3":{"0":1,"135":1,"964":1,"966":1,"1212":1,"1237":2,"1324":1,"1436":8}}],["declared",{"0":{"2033":1},"3":{"0":12,"24":1,"31":1,"57":1,"76":1,"78":1,"81":3,"92":1,"93":1,"95":1,"96":1,"102":1,"135":6,"136":1,"138":1,"139":1,"155":1,"160":1,"166":1,"184":1,"185":1,"188":1,"225":1,"258":1,"260":1,"284":1,"290":1,"326":1,"330":1,"341":1,"346":1,"386":1,"388":1,"397":2,"409":1,"418":1,"423":2,"428":1,"430":1,"440":1,"443":1,"448":1,"470":1,"472":1,"473":1,"545":2,"549":1,"583":4,"607":2,"609":2,"612":2,"635":1,"649":1,"651":1,"657":2,"749":1,"764":1,"765":2,"766":2,"782":1,"790":1,"801":1,"827":2,"831":1,"836":1,"838":1,"846":1,"847":2,"848":2,"849":1,"875":1,"889":1,"891":1,"964":1,"966":3,"971":1,"979":1,"980":1,"990":1,"995":2,"1018":2,"1019":1,"1034":2,"1035":1,"1052":1,"1067":3,"1075":1,"1083":1,"1116":3,"1119":1,"1161":1,"1170":1,"1191":1,"1212":2,"1214":1,"1229":2,"1233":1,"1235":2,"1237":16,"1239":1,"1240":1,"1241":1,"1247":17,"1250":2,"1259":5,"1260":1,"1263":2,"1264":1,"1266":1,"1269":2,"1270":18,"1271":4,"1276":1,"1277":1,"1281":4,"1285":2,"1286":88,"1297":1,"1300":20,"1303":1,"1307":1,"1309":12,"1310":4,"1311":24,"1312":2,"1315":2,"1323":23,"1324":25,"1339":9,"1344":3,"1345":1,"1347":3,"1350":33,"1353":1,"1358":2,"1359":115,"1362":1,"1369":5,"1373":3,"1380":15,"1395":25,"1396":31,"1398":1,"1402":11,"1405":1,"1406":1,"1411":1,"1415":21,"1416":7,"1417":4,"1427":2,"1428":1,"1430":1,"1431":3,"1435":1,"1436":89,"1438":3,"1441":5,"1442":1,"1443":1,"1444":1,"1446":1,"1450":1,"1458":1,"1459":1,"1463":2,"1464":1,"1467":15,"1474":1,"1476":3,"1481":1,"1488":1,"1489":5,"1500":1,"1513":1,"1526":1,"1534":1,"1547":1,"1577":1,"1591":3,"1597":1,"1599":1,"1631":1,"1662":1,"1670":1,"1671":1,"1673":1,"1686":1,"1731":1,"1815":1,"1819":1,"1849":1,"1856":1,"1880":1,"1881":1,"1886":2,"1889":1,"1891":2,"1922":1,"1939":1,"1953":1,"1964":1,"1994":1,"1996":1,"2000":2,"2003":1,"2009":1,"2029":2,"2033":2,"2034":6,"2037":3,"2038":2,"2044":1,"2046":1,"2075":2,"2080":1,"2094":1,"2125":1,"2126":3,"2128":2,"2131":1,"2138":1,"2156":1,"2160":1,"2174":1,"2232":3}}],["declaresauthorizationanywhere",{"3":{"1436":1}}],["declareseveryexpectedlayer",{"3":{"1436":2,"1489":1}}],["declarespii",{"2":{"1436":1},"3":{"1436":1}}],["declares",{"0":{"1880":1},"3":{"0":12,"5":1,"7":1,"37":1,"42":1,"47":1,"59":1,"78":1,"80":1,"81":2,"94":1,"95":2,"98":1,"115":1,"121":2,"122":1,"128":1,"146":1,"147":1,"155":1,"157":1,"160":1,"180":2,"185":1,"186":4,"187":1,"189":2,"190":1,"298":1,"305":1,"310":2,"325":1,"341":1,"370":1,"408":1,"426":1,"442":1,"448":2,"468":4,"470":2,"475":2,"476":1,"477":1,"478":1,"486":1,"497":1,"523":3,"545":2,"549":2,"551":2,"552":1,"556":3,"576":1,"582":1,"583":7,"585":1,"599":2,"609":3,"611":1,"626":1,"631":2,"633":2,"640":2,"643":2,"650":1,"676":1,"698":2,"707":1,"725":2,"733":1,"764":1,"766":1,"767":1,"768":1,"783":1,"798":5,"804":2,"825":1,"827":6,"838":4,"842":2,"881":2,"889":1,"891":1,"914":1,"922":1,"954":1,"956":1,"959":1,"963":2,"964":1,"966":1,"972":2,"973":1,"980":3,"983":1,"1018":2,"1033":2,"1050":7,"1052":1,"1054":1,"1067":2,"1100":1,"1116":1,"1133":5,"1155":1,"1156":1,"1161":1,"1168":1,"1227":1,"1229":3,"1230":1,"1231":2,"1232":1,"1237":5,"1241":6,"1244":2,"1249":1,"1250":1,"1259":6,"1269":1,"1270":51,"1271":7,"1274":1,"1275":1,"1276":2,"1279":2,"1281":1,"1286":31,"1300":15,"1301":3,"1304":1,"1308":1,"1309":4,"1310":5,"1311":13,"1312":1,"1318":1,"1320":1,"1321":1,"1322":1,"1323":11,"1324":13,"1325":1,"1326":2,"1327":2,"1328":1,"1331":1,"1332":1,"1338":2,"1339":15,"1350":3,"1353":1,"1359":85,"1360":2,"1362":3,"1363":1,"1366":1,"1369":9,"1371":1,"1372":1,"1373":1,"1374":2,"1376":1,"1380":6,"1384":2,"1389":1,"1391":1,"1393":1,"1395":23,"1396":24,"1401":1,"1402":7,"1406":1,"1407":1,"1409":2,"1415":22,"1416":6,"1417":7,"1427":2,"1430":1,"1431":1,"1436":100,"1438":7,"1441":3,"1445":1,"1447":3,"1449":1,"1451":1,"1454":3,"1455":2,"1460":1,"1464":1,"1467":9,"1470":1,"1472":1,"1473":1,"1475":2,"1476":1,"1484":1,"1489":6,"1490":1,"1492":1,"1496":2,"1526":1,"1577":2,"1591":1,"1596":1,"1627":2,"1649":2,"1651":1,"1653":2,"1662":1,"1667":1,"1673":1,"1685":1,"1703":2,"1718":1,"1727":1,"1751":1,"1765":1,"1772":1,"1810":5,"1815":2,"1823":1,"1826":1,"1828":1,"1829":1,"1865":1,"1878":1,"1880":2,"1889":1,"1891":1,"1898":1,"1916":1,"1922":1,"1933":1,"1944":1,"1953":1,"1960":1,"1962":1,"1963":2,"1988":1,"1994":1,"2000":2,"2008":1,"2024":1,"2042":2,"2046":1,"2070":1,"2072":1,"2083":1,"2087":1,"2104":3,"2131":2,"2139":1,"2150":1,"2157":1,"2158":1,"2190":1,"2203":1,"2232":1}}],["decommission",{"3":{"1463":1,"1467":1}}],["decomposition",{"3":{"1395":4,"1402":3,"1600":1}}],["decomposed",{"3":{"1311":1,"1395":1,"1638":1}}],["decompression",{"3":{"1323":2,"1324":3,"2126":1}}],["decoupling",{"3":{"1270":1,"1300":1,"1359":1,"1402":1,"1416":1,"1526":1,"1539":1,"1577":1,"1591":1,"1831":1,"2134":1}}],["decouples",{"3":{"332":1,"1311":1,"1323":2,"1350":1,"1396":1,"1438":1,"1665":1,"1837":1,"1964":1,"1965":1,"1990":1}}],["decouple",{"1":{"1863":1,"1864":1,"1865":1,"1866":1,"1867":1,"1868":1},"3":{"187":1,"299":1,"1347":1,"1863":1,"2207":1}}],["decoupled",{"1":{"1310":1},"3":{"186":1,"301":1,"399":1,"404":1,"1192":1,"1202":1,"1203":1,"1259":1,"1309":1,"1310":2,"1311":2,"1323":2,"1324":3,"1339":1,"1350":3,"1359":1,"1374":1,"1380":1,"1395":1,"1396":1,"1402":1,"1415":1,"1417":1,"1441":1,"1538":1,"1546":1,"1554":1,"1670":1,"1992":1,"2157":1,"2159":1}}],["deconstructs",{"3":{"1436":1}}],["deconstruction",{"3":{"1300":2,"1324":1}}],["deconstruct",{"3":{"1050":1,"1234":1,"1237":1,"1286":1,"1300":1,"1436":1}}],["decodable",{"3":{"1874":1}}],["decoding",{"3":{"442":1,"1186":1,"1228":1,"1300":3,"1323":2,"1359":1,"1380":2,"1417":1}}],["decoderoptions",{"3":{"1323":1}}],["decoder",{"3":{"683":1,"1229":1,"1311":1,"1312":7,"1378":2,"1380":3,"1396":2}}],["decoded",{"3":{"341":1,"346":1,"438":1,"442":1,"682":1,"684":1,"922":1,"1229":2,"1300":1,"1311":2,"1312":1,"1323":2,"1324":1,"1359":6,"1380":1,"1396":1,"1417":6,"1651":1,"1877":1,"2126":4,"2128":1}}],["decode",{"3":{"0":1,"359":1,"360":2,"365":1,"440":1,"442":1,"681":1,"682":1,"1115":1,"1116":1,"1229":1,"1247":2,"1286":6,"1300":2,"1311":1,"1312":2,"1323":5,"1380":2,"1417":4,"1438":2,"1496":1,"2126":3,"2128":3,"2143":1}}],["decodes",{"3":{"0":1,"341":1,"682":1,"683":1,"684":1,"922":1,"1241":1,"1247":2,"1271":1,"1300":3,"1311":4,"1312":2,"1323":2,"1380":1,"1396":2,"1417":1,"1874":1,"2126":1,"2142":1}}],["decoratable",{"3":{"1924":1}}],["decorate",{"3":{"1311":1,"1323":1,"1324":5,"1380":1,"1396":2,"1436":1}}],["decoratedentity",{"3":{"1199":2,"1207":1}}],["decorated",{"3":{"330":1,"1286":3,"1311":1,"1323":1,"1339":1,"1342":1,"1343":1,"1350":2,"1359":5,"1379":1,"1380":1,"1395":1,"1396":2,"1436":3,"1488":1,"1489":1,"1540":1,"1966":1,"1988":1,"2055":1,"2095":1,"2098":1}}],["decorates",{"3":{"0":1,"122":1,"175":2,"1042":1,"1059":1,"1091":1,"1286":1,"1297":1,"1300":1,"1318":1,"1323":2,"1324":1,"1380":1,"1396":1,"1421":1,"1488":1,"2186":1,"2199":1}}],["decorating",{"3":{"1286":2,"1324":2}}],["decoration",{"3":{"117":1,"122":2,"175":1,"415":1,"592":1,"681":1,"1045":1,"1270":1,"1286":3,"1290":1,"1300":1,"1316":1,"1323":3,"1339":1,"1359":4,"1380":1,"1395":5,"1396":4,"1415":1,"1417":3,"1436":6,"1489":1,"1686":1,"1698":1,"1701":1,"1827":2,"1911":1,"2117":1,"2122":1,"2172":1}}],["decoratively",{"3":{"1270":1,"1286":1}}],["decorative",{"3":{"0":1,"195":1,"305":1,"342":1,"684":1,"774":1,"1229":1,"1259":1,"1324":3,"1359":1,"1417":1,"2030":1}}],["decoratorpipelineseal",{"3":{"1199":2,"1203":1,"1207":1,"1313":1,"1316":1,"1323":7,"1496":1}}],["decoratorpipelineordertests",{"2":{"127":1,"1600":1},"3":{"121":4,"127":3,"572":4,"1199":3,"1207":8,"1262":3,"1316":1,"1323":4,"1415":2,"1436":11,"1438":2,"1487":1,"1488":3,"1489":3,"1600":1}}],["decoratorpipelineordertestsbase",{"2":{"121":1,"122":1,"126":1,"572":1,"579":1,"749":1,"1262":1,"1428":1,"1507":1,"2055":1},"3":{"0":1,"122":1,"126":1,"572":6,"574":1,"579":1,"749":1,"1199":3,"1207":2,"1262":5,"1428":1,"1436":17,"1438":1,"1488":2,"1489":1,"1496":1,"1507":1,"2055":2}}],["decorators",{"2":{"1270":1},"3":{"0":8,"115":4,"117":4,"119":1,"121":5,"122":5,"123":3,"125":3,"126":7,"127":1,"186":1,"242":1,"243":1,"246":3,"247":1,"300":2,"306":1,"395":2,"397":4,"406":1,"407":3,"522":1,"523":1,"571":1,"572":1,"674":1,"698":2,"701":1,"702":1,"732":1,"733":2,"735":1,"737":1,"827":1,"923":1,"987":1,"1004":2,"1058":1,"1059":3,"1100":1,"1192":1,"1203":21,"1207":208,"1212":2,"1223":1,"1229":1,"1246":2,"1260":2,"1261":1,"1262":5,"1263":16,"1264":3,"1265":1,"1266":1,"1267":4,"1268":3,"1270":97,"1271":11,"1275":1,"1284":1,"1286":5,"1297":1,"1300":12,"1301":12,"1309":2,"1311":6,"1313":1,"1316":2,"1318":1,"1323":18,"1324":1,"1339":1,"1359":16,"1396":1,"1402":1,"1415":3,"1427":1,"1436":8,"1437":1,"1438":10,"1496":2,"1526":1,"1538":1,"1542":1,"1566":1,"1577":3,"1651":1,"1653":1,"1700":1,"1717":1,"1774":1,"1818":1,"1821":3,"1823":1,"1824":2,"1825":1,"1826":2,"1827":1,"1851":1,"1879":2,"1883":3,"1886":1,"1914":1,"1915":2,"1919":1,"1920":3,"1922":1,"1923":1,"1924":2,"2010":1,"2136":2,"2156":2,"2199":1}}],["decorator",{"0":{"1507":1,"2096":1,"2136":1},"1":{"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"1260":1,"1261":1,"1262":1,"1263":1,"1264":1,"1265":1,"1266":1,"1267":1,"1268":1,"1269":1,"1270":1,"1818":1,"1819":1,"1820":1,"1821":1,"1822":1,"1823":1,"1824":1,"1825":1,"1826":1,"1827":1},"3":{"0":15,"113":1,"114":1,"115":6,"117":3,"119":1,"120":1,"122":4,"123":2,"124":4,"125":3,"126":2,"128":3,"135":2,"143":1,"184":1,"242":1,"265":2,"299":2,"300":1,"303":1,"304":1,"383":1,"395":3,"397":1,"398":2,"406":1,"407":2,"409":1,"518":1,"521":1,"550":1,"571":1,"572":6,"573":2,"574":5,"578":1,"579":1,"692":1,"699":1,"700":1,"714":1,"716":1,"733":3,"735":2,"748":1,"749":1,"750":1,"753":1,"790":1,"905":1,"907":1,"909":1,"922":1,"923":1,"924":1,"925":1,"987":1,"992":1,"1042":1,"1043":2,"1046":1,"1104":1,"1192":4,"1202":3,"1203":3,"1212":7,"1213":3,"1223":1,"1229":2,"1237":1,"1246":2,"1247":1,"1259":1,"1260":5,"1261":4,"1262":1,"1263":2,"1264":3,"1266":1,"1267":4,"1268":2,"1269":1,"1270":98,"1271":9,"1278":1,"1286":22,"1300":7,"1301":4,"1309":11,"1311":7,"1313":1,"1315":1,"1316":2,"1318":2,"1320":2,"1323":27,"1324":10,"1339":1,"1347":1,"1350":2,"1352":1,"1359":68,"1380":2,"1395":1,"1396":9,"1402":13,"1406":1,"1415":26,"1418":1,"1427":3,"1431":1,"1436":36,"1437":1,"1438":2,"1487":2,"1488":3,"1496":3,"1506":1,"1507":1,"1526":2,"1534":1,"1539":2,"1543":1,"1577":7,"1585":2,"1591":1,"1651":5,"1654":1,"1660":1,"1662":2,"1671":1,"1720":1,"1730":1,"1774":1,"1779":1,"1786":1,"1817":1,"1818":3,"1819":1,"1820":3,"1821":4,"1822":1,"1823":3,"1825":3,"1826":2,"1827":4,"1828":1,"1831":2,"1881":1,"1883":1,"1886":1,"1914":1,"1915":2,"1916":1,"1917":1,"1918":5,"1920":2,"1924":2,"1944":1,"1962":1,"2087":1,"2097":1,"2098":1,"2111":1,"2134":3,"2136":4,"2137":1,"2139":1,"2156":2,"2160":1,"2166":1,"2180":2,"2181":1,"2182":1,"2184":1,"2186":1,"2190":1,"2193":1,"2194":1,"2206":1,"2227":3,"2230":1,"2232":3,"2239":1}}],["decisively",{"3":{"1350":1}}],["decisive",{"3":{"827":1,"1350":1}}],["decisionsupport",{"3":{"493":1,"494":1,"495":1,"995":1,"1018":2,"1082":1,"1099":1,"1203":34,"1207":86,"1264":1,"1270":2,"1286":1,"1347":5,"1350":27,"1359":71,"1367":1,"1369":2,"1390":1,"1395":1,"1438":4,"1442":1,"1496":3,"1526":1}}],["decisions",{"0":{"1201":1,"1648":1},"3":{"0":3,"64":1,"175":1,"242":1,"265":1,"387":1,"555":1,"618":1,"664":1,"724":1,"726":1,"736":1,"775":1,"825":1,"827":1,"867":1,"868":1,"905":1,"912":1,"975":1,"1016":1,"1021":1,"1051":1,"1093":1,"1109":1,"1162":1,"1270":1,"1271":1,"1286":5,"1287":1,"1300":7,"1302":1,"1311":10,"1312":2,"1323":3,"1324":4,"1330":1,"1339":2,"1350":1,"1359":6,"1369":1,"1380":1,"1389":1,"1393":1,"1395":3,"1396":8,"1409":1,"1415":5,"1417":4,"1427":1,"1429":1,"1436":7,"1438":1,"1455":4,"1457":1,"1467":2,"1471":2,"1476":1,"1488":1,"1489":2,"1492":1,"1521":1,"1534":1,"1552":1,"1571":3,"1572":1,"1585":3,"1638":1,"1639":1,"1640":1,"1686":1,"1708":1,"1727":2,"1755":1,"1778":1,"1863":1,"1874":1,"1900":1,"1947":2,"2000":1,"2029":1,"2038":1,"2150":1,"2172":1,"2179":1,"2191":1,"2199":1,"2215":1,"2220":1,"2221":1,"2232":1,"2236":1}}],["decision",{"0":{"5":1,"11":1,"17":1,"31":1,"39":1,"47":1,"53":1,"59":1,"68":1,"78":1,"86":1,"98":1,"109":1,"117":1,"132":1,"147":1,"157":1,"166":1,"175":1,"186":1,"195":1,"207":1,"214":1,"225":1,"235":1,"243":1,"265":1,"273":1,"281":1,"291":1,"300":1,"310":1,"318":1,"330":1,"341":1,"350":1,"359":1,"370":1,"380":1,"388":1,"397":1,"413":1,"420":1,"434":1,"440":1,"448":1,"459":1,"470":1,"482":1,"499":1,"507":1,"518":1,"528":1,"536":1,"545":1,"556":1,"564":1,"572":1,"583":1,"591":1,"599":1,"609":1,"618":1,"626":1,"633":1,"640":1,"649":1,"657":1,"665":1,"674":1,"682":1,"690":1,"698":1,"707":1,"715":1,"725":1,"733":1,"741":1,"749":1,"757":1,"766":1,"774":1,"782":1,"790":1,"799":1,"810":1,"819":1,"827":1,"838":1,"846":1,"854":1,"861":1,"869":1,"881":1,"889":1,"897":1,"905":1,"914":1,"922":1,"931":1,"939":1,"946":1,"954":1,"964":1,"972":1,"980":1,"988":1,"996":1,"1004":1,"1012":1,"1018":1,"1026":1,"1034":1,"1042":1,"1050":1,"1059":1,"1067":1,"1075":1,"1083":1,"1091":1,"1100":1,"1108":1,"1116":1,"1124":1,"1133":1,"1141":1,"1151":1,"1161":1,"1168":1,"1175":1,"1184":1,"1347":1,"1359":1,"1376":1,"1390":1,"2232":1},"1":{"0":1,"1":1},"3":{"0":18,"1":3,"3":1,"21":1,"22":2,"23":2,"24":2,"27":2,"34":1,"43":2,"57":2,"67":1,"71":3,"72":2,"73":2,"74":2,"81":1,"82":1,"85":1,"87":1,"104":1,"109":1,"112":1,"115":1,"121":1,"125":1,"128":2,"130":2,"135":3,"136":1,"137":2,"138":1,"139":1,"140":2,"141":1,"142":1,"145":1,"147":1,"149":1,"150":2,"151":1,"152":1,"155":2,"160":2,"161":1,"164":4,"165":1,"167":1,"170":1,"171":2,"173":1,"174":1,"175":1,"178":1,"181":2,"187":1,"190":1,"200":4,"201":1,"203":2,"219":2,"220":2,"230":1,"231":1,"233":5,"238":1,"245":2,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":3,"257":1,"258":3,"259":3,"260":2,"261":1,"264":1,"265":5,"267":2,"268":6,"269":1,"272":1,"275":1,"276":1,"279":1,"295":2,"296":2,"303":1,"306":4,"308":1,"310":1,"314":1,"317":1,"326":1,"329":1,"336":1,"337":2,"345":1,"354":2,"358":2,"364":2,"365":2,"366":1,"369":1,"375":3,"382":1,"383":1,"386":1,"390":1,"392":1,"393":2,"396":1,"399":1,"400":2,"409":3,"416":2,"419":1,"423":4,"424":1,"425":1,"426":2,"428":2,"429":1,"430":2,"436":1,"444":1,"447":1,"453":3,"454":1,"455":1,"463":3,"464":2,"465":1,"466":4,"468":4,"469":1,"472":1,"473":1,"474":3,"475":2,"476":3,"477":4,"478":3,"483":1,"486":2,"490":1,"495":1,"497":1,"502":1,"508":1,"511":1,"514":2,"516":1,"519":1,"520":1,"522":2,"523":1,"524":1,"526":2,"528":1,"530":1,"531":1,"534":1,"535":1,"536":1,"537":1,"540":1,"543":6,"549":3,"551":2,"552":2,"555":1,"557":1,"559":1,"560":2,"562":1,"567":1,"571":1,"574":1,"578":2,"582":1,"586":1,"591":1,"594":2,"601":1,"604":1,"607":7,"608":1,"611":1,"613":1,"616":4,"621":1,"627":1,"629":3,"632":1,"636":2,"638":1,"642":1,"644":1,"652":1,"656":1,"660":2,"667":1,"669":2,"677":1,"685":1,"688":3,"693":2,"696":1,"703":1,"706":1,"709":1,"710":1,"715":1,"716":1,"719":1,"720":1,"728":1,"731":1,"733":1,"734":1,"737":1,"744":1,"748":2,"751":1,"752":1,"758":1,"761":1,"769":2,"773":1,"775":1,"777":1,"790":2,"794":2,"795":1,"798":1,"800":2,"801":1,"802":2,"803":1,"804":1,"805":1,"806":1,"810":1,"814":1,"819":2,"820":1,"822":2,"825":6,"827":4,"828":1,"829":2,"831":3,"832":1,"833":1,"836":3,"839":2,"841":1,"849":2,"850":2,"853":1,"856":1,"857":2,"864":2,"865":1,"867":2,"869":1,"871":2,"874":1,"875":2,"877":3,"884":1,"892":2,"896":1,"900":1,"905":1,"907":1,"909":1,"912":1,"913":1,"914":1,"915":1,"916":1,"917":1,"924":1,"926":2,"927":2,"929":1,"932":1,"934":4,"944":2,"949":2,"955":1,"958":1,"959":1,"960":2,"963":1,"964":2,"966":1,"967":2,"968":2,"979":1,"980":1,"983":1,"987":1,"988":1,"991":1,"997":1,"1003":1,"1004":1,"1006":1,"1007":1,"1012":1,"1013":1,"1016":1,"1018":1,"1027":1,"1029":1,"1032":1,"1033":1,"1037":2,"1042":1,"1044":3,"1045":2,"1046":1,"1048":1,"1052":1,"1053":1,"1054":3,"1055":1,"1057":1,"1059":2,"1067":1,"1068":1,"1070":3,"1073":2,"1074":1,"1075":3,"1076":1,"1077":1,"1078":2,"1079":2,"1081":1,"1082":1,"1083":2,"1085":1,"1086":1,"1095":1,"1101":1,"1103":1,"1111":1,"1116":1,"1119":1,"1128":3,"1134":1,"1136":1,"1140":1,"1146":1,"1155":1,"1156":1,"1173":1,"1175":1,"1182":1,"1192":1,"1202":1,"1203":1,"1212":3,"1217":1,"1218":1,"1229":3,"1231":1,"1232":2,"1235":1,"1236":1,"1237":13,"1239":1,"1240":1,"1244":2,"1247":1,"1259":12,"1260":4,"1263":2,"1269":1,"1270":12,"1271":1,"1273":3,"1281":2,"1285":2,"1286":38,"1287":1,"1300":26,"1301":5,"1303":1,"1309":6,"1310":3,"1311":22,"1312":2,"1315":1,"1320":1,"1322":2,"1323":30,"1324":38,"1329":1,"1334":1,"1337":1,"1339":29,"1340":1,"1342":1,"1343":1,"1350":14,"1351":1,"1352":2,"1355":1,"1357":1,"1359":54,"1369":2,"1373":1,"1376":1,"1380":7,"1390":1,"1395":30,"1396":42,"1397":1,"1402":19,"1407":1,"1413":1,"1415":17,"1416":3,"1417":5,"1418":1,"1422":1,"1424":1,"1427":1,"1430":1,"1436":41,"1440":1,"1452":1,"1455":3,"1462":1,"1465":1,"1467":6,"1472":1,"1473":1,"1475":1,"1476":1,"1482":1,"1483":1,"1485":1,"1488":2,"1489":1,"1496":3,"1521":1,"1524":1,"1526":6,"1530":1,"1532":1,"1534":3,"1536":1,"1545":2,"1571":1,"1575":2,"1577":6,"1582":1,"1583":1,"1585":2,"1589":1,"1591":1,"1599":3,"1604":1,"1632":2,"1639":2,"1640":2,"1641":1,"1656":1,"1673":1,"1674":1,"1686":2,"1687":1,"1706":1,"1722":1,"1727":1,"1747":4,"1749":2,"1765":1,"1787":1,"1788":1,"1792":1,"1799":2,"1801":1,"1802":1,"1822":2,"1823":1,"1825":1,"1827":1,"1841":2,"1842":1,"1845":1,"1848":1,"1854":1,"1856":1,"1862":2,"1876":1,"1877":1,"1889":1,"1890":1,"1903":1,"1904":1,"1910":1,"1921":1,"1927":2,"1930":1,"1935":2,"1941":1,"1943":1,"1947":2,"1949":1,"1951":1,"1963":1,"1971":1,"1979":1,"1999":1,"2000":1,"2001":1,"2002":1,"2024":1,"2028":1,"2032":1,"2035":1,"2038":1,"2043":1,"2047":1,"2048":1,"2053":1,"2064":2,"2067":1,"2069":1,"2081":1,"2085":2,"2108":1,"2128":1,"2130":1,"2131":1,"2133":1,"2145":1,"2151":1,"2153":1,"2156":1,"2158":2,"2160":1,"2161":1,"2164":1,"2166":1,"2169":1,"2175":1,"2180":1,"2181":1,"2184":2,"2192":4,"2193":1,"2196":1,"2203":2,"2212":1,"2226":1,"2231":1,"2232":5,"2233":2,"2239":1,"2242":1,"2245":1}}],["decimals",{"3":{"1324":1,"1359":1,"1436":1,"1767":1}}],["decimalfilterstrategytests",{"3":{"1199":1,"1207":3}}],["decimalfilterstrategy",{"2":{"1241":1},"3":{"1199":2,"1203":1,"1207":2,"1241":4,"1247":9}}],["decimal",{"2":{"656":1,"1541":1,"1764":1},"3":{"330":1,"656":1,"657":2,"692":1,"717":1,"1192":1,"1234":1,"1237":3,"1247":11,"1271":1,"1286":6,"1300":2,"1312":7,"1323":1,"1324":10,"1342":1,"1350":3,"1359":2,"1362":1,"1366":1,"1369":9,"1395":4,"1396":2,"1417":1,"1436":5,"1438":1,"1496":3,"1541":1,"1600":2,"1685":5,"1686":1,"1764":3,"1810":2,"1988":1}}],["decidable",{"3":{"1416":1}}],["decide",{"0":{"1257":1},"3":{"0":1,"69":1,"150":1,"244":1,"299":1,"305":1,"536":1,"539":1,"681":1,"765":1,"827":1,"898":1,"987":1,"1018":1,"1033":1,"1035":1,"1100":1,"1107":1,"1115":1,"1187":1,"1236":1,"1237":1,"1244":1,"1247":2,"1249":1,"1259":3,"1278":1,"1286":9,"1296":1,"1300":6,"1309":2,"1311":2,"1323":6,"1324":7,"1339":2,"1350":5,"1351":1,"1359":7,"1361":1,"1368":1,"1369":2,"1380":3,"1395":7,"1396":4,"1402":2,"1415":2,"1417":4,"1423":1,"1426":1,"1427":3,"1436":5,"1467":1,"1485":1,"1639":1,"1648":1,"1670":1,"1686":1,"1717":1,"1727":2,"1853":1,"1873":1,"1876":1,"1877":1,"1912":1,"1950":1,"1959":1,"2068":1,"2143":1,"2169":2,"2190":1,"2193":2}}],["decides",{"3":{"0":2,"179":1,"201":1,"225":1,"243":1,"253":1,"258":1,"299":1,"318":1,"336":1,"343":1,"407":1,"535":1,"539":1,"540":1,"544":1,"563":1,"568":1,"571":1,"582":1,"583":1,"598":2,"605":1,"630":1,"639":3,"648":1,"653":1,"664":3,"673":2,"678":2,"689":1,"691":1,"734":1,"741":2,"748":1,"765":1,"770":1,"774":1,"781":3,"783":1,"784":1,"785":1,"786":1,"789":5,"791":1,"813":1,"888":1,"893":1,"896":1,"899":1,"924":1,"945":1,"953":1,"987":1,"1085":1,"1092":1,"1101":1,"1127":1,"1212":1,"1237":3,"1238":1,"1243":1,"1244":1,"1247":5,"1250":1,"1252":1,"1259":7,"1270":2,"1273":1,"1277":1,"1280":3,"1286":19,"1287":1,"1289":1,"1299":1,"1300":14,"1301":2,"1304":1,"1309":2,"1310":6,"1311":6,"1312":1,"1318":1,"1323":8,"1324":10,"1336":1,"1339":4,"1350":4,"1357":1,"1359":19,"1369":2,"1372":1,"1373":1,"1380":2,"1389":1,"1391":2,"1395":12,"1396":9,"1401":1,"1402":4,"1406":1,"1409":1,"1414":1,"1415":4,"1417":3,"1419":1,"1431":1,"1436":7,"1438":4,"1455":1,"1462":1,"1467":2,"1470":1,"1492":1,"1508":1,"1640":1,"1728":1,"1750":1,"1810":1,"1826":1,"1838":1,"1840":2,"1845":1,"1854":1,"1865":1,"1874":1,"1897":1,"1902":1,"1920":1,"1921":1,"1933":1,"1947":1,"1977":1,"1981":1,"1982":1,"1989":1,"1991":1,"2010":1,"2156":2,"2158":1,"2162":1,"2191":1,"2195":1,"2196":1}}],["decided",{"3":{"0":12,"125":1,"145":1,"200":1,"225":1,"255":1,"309":1,"360":1,"380":1,"443":1,"497":1,"498":1,"517":1,"538":1,"541":1,"598":1,"599":1,"608":1,"625":1,"648":1,"664":1,"673":1,"681":1,"683":1,"717":1,"724":2,"728":1,"731":1,"744":1,"790":1,"798":1,"809":1,"852":1,"870":1,"876":1,"880":2,"903":1,"926":1,"953":1,"992":1,"1012":1,"1028":1,"1075":1,"1116":1,"1117":2,"1229":1,"1237":1,"1241":1,"1243":1,"1259":2,"1265":2,"1270":4,"1281":1,"1286":5,"1300":7,"1301":2,"1309":1,"1324":8,"1336":1,"1339":2,"1342":1,"1347":1,"1348":1,"1350":7,"1357":1,"1359":17,"1361":1,"1369":2,"1395":6,"1396":9,"1399":1,"1401":1,"1402":3,"1415":2,"1417":4,"1421":1,"1422":1,"1425":1,"1436":5,"1475":1,"1526":1,"1545":1,"1547":1,"1666":1,"1727":1,"1748":1,"1822":1,"1933":2,"1960":1,"2033":1,"2126":1,"2135":1,"2168":1,"2177":1,"2181":1,"2232":1}}],["deciding",{"3":{"0":1,"109":1,"544":1,"555":1,"582":1,"598":1,"764":1,"775":1,"783":1,"805":1,"987":1,"1229":1,"1237":2,"1285":1,"1286":4,"1311":1,"1339":1,"1359":3,"1395":1,"1396":1,"1402":1,"1417":3,"1418":1,"1436":1,"1811":1,"1956":1,"1972":1,"2183":1}}],["del",{"3":{"1301":2,"1323":2,"1685":6,"1686":6}}],["delaying",{"3":{"1324":2}}],["delays",{"3":{"27":1,"520":1,"709":1,"883":1,"916":1,"1102":1,"1259":1,"1270":1,"1323":1,"1324":2,"1436":1,"1942":1,"2052":1}}],["delay",{"2":{"1162":1,"2185":1},"3":{"18":3,"71":1,"72":1,"293":1,"536":1,"819":1,"1042":2,"1162":1,"1254":2,"1259":8,"1270":3,"1275":2,"1286":7,"1317":1,"1323":14,"1324":2,"1330":1,"1339":1,"1395":2,"1430":1,"1436":7,"1438":1,"1488":1,"1664":1,"1840":1,"1845":1,"1852":1,"2032":1,"2167":2,"2185":1,"2188":2}}],["delayed",{"2":{"818":1,"1843":1},"3":{"0":3,"150":1,"627":1,"640":1,"642":1,"735":1,"818":1,"819":1,"820":1,"821":2,"1075":1,"1076":1,"1263":1,"1270":5,"1323":3,"1339":1,"1467":1,"1641":1,"1665":1,"1749":1,"1843":1,"1922":1,"1923":1}}],["deltas",{"3":{"0":1,"914":1,"1213":1,"1436":1}}],["delta",{"2":{"1689":1,"1699":1},"3":{"0":1,"480":1,"482":1,"484":2,"490":1,"491":1,"492":1,"493":2,"494":2,"495":1,"631":2,"633":2,"635":1,"665":1,"666":1,"832":1,"1212":1,"1300":1,"1353":1,"1359":34,"1402":2,"1488":2,"1490":2,"1496":13,"1575":5,"1576":5,"1689":1,"1699":1,"1727":2}}],["delegatingchatclient",{"2":{"1418":1,"1422":1,"1423":1,"1427":1,"2174":1,"2180":1},"3":{"1418":1,"1422":1,"1423":1,"1427":8,"2174":1,"2180":1}}],["delegatinghandler",{"3":{"1311":1,"1312":1,"1324":9}}],["delegating",{"3":{"0":1,"507":1,"508":1,"513":1,"926":1,"1034":1,"1042":2,"1091":2,"1192":1,"1212":1,"1229":5,"1231":1,"1237":1,"1241":1,"1244":1,"1247":1,"1256":1,"1259":1,"1262":1,"1269":1,"1270":1,"1271":2,"1286":3,"1290":2,"1300":5,"1309":2,"1310":3,"1311":2,"1324":13,"1339":3,"1343":1,"1350":7,"1355":1,"1359":14,"1376":1,"1380":3,"1395":8,"1396":6,"1399":1,"1402":3,"1405":1,"1410":1,"1413":1,"1415":2,"1417":3,"1418":1,"1427":2,"1431":1,"1436":45,"1496":1,"1957":1,"2074":1,"2170":1,"2180":1}}],["delegation",{"3":{"0":1,"267":1,"640":1,"777":1,"825":2,"827":1,"833":2,"922":1,"1237":3,"1240":1,"1259":1,"1270":1,"1286":5,"1300":2,"1310":1,"1339":4,"1350":3,"1352":1,"1359":5,"1372":1,"1380":2,"1395":2,"1396":2,"1402":2,"1467":1}}],["delegations",{"3":{"0":1,"825":1,"829":1,"1286":1,"1395":1,"1396":2}}],["delegatescheduledjob",{"3":{"1199":2,"1207":1}}],["delegates",{"3":{"0":2,"19":1,"27":1,"53":1,"109":1,"318":2,"326":1,"331":1,"459":1,"513":1,"536":1,"545":1,"549":1,"640":1,"680":1,"682":1,"686":1,"774":1,"814":1,"827":2,"1050":1,"1220":1,"1229":4,"1237":9,"1243":1,"1244":1,"1247":17,"1259":5,"1261":1,"1270":1,"1271":1,"1273":1,"1278":1,"1286":13,"1290":1,"1298":1,"1300":8,"1301":1,"1307":1,"1309":4,"1310":3,"1311":8,"1312":2,"1323":4,"1324":10,"1339":4,"1348":2,"1350":17,"1355":1,"1359":27,"1369":1,"1380":11,"1395":19,"1396":7,"1402":5,"1415":7,"1416":7,"1417":13,"1421":1,"1427":3,"1431":1,"1436":28,"1438":2,"1488":1,"1653":1,"1820":1,"1946":1,"2000":1,"2167":1,"2196":1}}],["delegated",{"3":{"0":1,"295":1,"320":1,"827":3,"829":1,"1286":3,"1323":3,"1339":1,"1350":1,"1353":1,"1354":1,"1359":3,"1369":1,"1383":1,"1395":3,"1396":3,"1402":1,"1415":1,"1417":1,"1575":1,"1904":1,"1963":1,"1996":1}}],["delegate",{"3":{"0":2,"11":1,"15":1,"21":1,"27":2,"109":4,"115":1,"135":1,"214":1,"326":1,"459":2,"534":1,"536":2,"539":2,"540":1,"545":1,"591":1,"592":1,"595":1,"675":1,"676":1,"677":1,"684":1,"749":1,"751":1,"819":1,"881":2,"987":2,"988":4,"989":1,"990":3,"1203":2,"1205":1,"1207":2,"1212":1,"1223":1,"1229":9,"1234":1,"1239":2,"1247":11,"1252":1,"1259":3,"1268":2,"1270":16,"1286":19,"1300":9,"1301":1,"1310":8,"1311":17,"1324":45,"1327":2,"1339":16,"1350":5,"1353":1,"1359":19,"1372":1,"1380":4,"1383":1,"1395":58,"1396":16,"1402":4,"1415":2,"1416":11,"1417":3,"1430":1,"1432":1,"1436":50,"1438":1,"1441":2,"1488":1,"1496":1,"1664":1,"1665":1,"1670":1,"1685":1,"1805":1,"1815":1,"1821":1,"1824":1,"1825":1,"1840":2,"1881":2,"2047":1,"2136":2,"2149":1,"2151":1}}],["deletable",{"3":{"312":1,"889":3,"890":1,"891":2,"1237":2,"1270":1,"1276":1,"1281":1,"1286":8,"1362":1,"1369":1,"1396":2,"1415":1,"1851":1}}],["deleting",{"3":{"0":4,"39":1,"40":1,"59":1,"248":1,"434":1,"440":1,"444":1,"459":1,"461":1,"462":1,"528":1,"781":1,"847":1,"907":1,"965":1,"997":1,"1059":1,"1116":2,"1231":1,"1237":2,"1281":2,"1286":3,"1300":4,"1301":1,"1308":1,"1311":2,"1318":1,"1323":4,"1324":2,"1346":1,"1350":4,"1352":1,"1359":13,"1362":1,"1369":1,"1380":1,"1396":1,"1402":4,"1410":1,"1415":3,"1436":8,"1467":3,"1473":1,"1489":1,"1631":6,"1635":3,"1638":1,"1639":10,"1641":1,"1727":1,"1755":1,"1776":1,"1889":1,"1950":1,"2000":1,"2066":1,"2069":1,"2107":1,"2127":1,"2200":1}}],["deletions",{"3":{"461":1,"1120":1,"1359":1,"1396":1,"1402":1,"1415":1,"1496":1}}],["deletion",{"3":{"0":3,"24":1,"38":3,"39":1,"438":1,"444":2,"458":2,"459":1,"462":1,"530":1,"618":1,"724":2,"725":1,"790":1,"791":2,"794":1,"832":1,"888":1,"947":1,"948":1,"1140":1,"1231":1,"1232":1,"1237":4,"1275":1,"1286":2,"1300":4,"1311":1,"1323":4,"1350":1,"1354":1,"1359":12,"1395":2,"1396":5,"1402":4,"1410":1,"1411":4,"1415":17,"1436":5,"1453":1,"1469":1,"1483":1,"1488":1,"1496":4,"1567":2,"1577":1,"1631":2,"1632":4,"1634":2,"1637":1,"1638":9,"1641":1,"1755":1,"1776":2,"1810":1,"1923":1,"2061":2,"2097":1,"2127":1,"2167":1,"2203":1}}],["delete+anonymize",{"3":{"1591":1}}],["deleteoverridethatonlydeletesitself",{"3":{"1436":1}}],["deletewhileopen",{"3":{"1402":1}}],["deletewithconfirmationasync",{"2":{"649":1,"1395":1},"3":{"649":1,"1324":3,"1395":6}}],["deleteroomasync",{"3":{"1395":2}}],["deletequestionasync",{"3":{"1395":2}}],["deleteproduct",{"3":{"1436":1}}],["deleteproducthandlertests",{"3":{"1685":1}}],["deleteproducthandler",{"2":{"924":1,"927":1},"3":{"924":1,"927":1}}],["deletepollasync",{"3":{"1402":1}}],["deletepartnerasync",{"3":{"1395":2}}],["deleteitemasync",{"3":{"1395":1}}],["deletefailed",{"3":{"1323":3,"1324":2}}],["deleteforbidden",{"3":{"1323":2}}],["deletehandler",{"3":{"1311":3,"1359":1}}],["deletelivepollhandlertests",{"3":{"1199":1,"1207":2,"1438":1}}],["deletelivepollhandler",{"3":{"1199":3,"1203":1,"1207":2,"1270":2,"1396":3,"1402":4}}],["deletebookmarkasync",{"3":{"1396":2}}],["deleteblobifexistsasync",{"3":{"1323":1}}],["deleteblobinternalcommandhandlerbasetests",{"3":{"1199":1,"1207":4}}],["deleteblobinternalcommandhandlerbase",{"2":{"1313":1,"1318":1,"1411":1},"3":{"1199":4,"1203":1,"1207":2,"1286":3,"1313":1,"1318":4,"1323":6,"1357":1,"1359":6,"1411":1,"1415":6,"1496":1}}],["deletebatchsize",{"3":{"1301":3}}],["deletebyidasync",{"3":{"881":1,"1324":3,"1395":5}}],["deletebehaviortestdbcontext",{"3":{"1199":2,"1207":1}}],["deletebehaviorconventiontests",{"3":{"1083":3,"1085":1,"1199":2,"1207":10,"1286":1,"1436":31,"1489":1,"1526":1}}],["deletebehaviorconventiontestsbase",{"2":{"1083":1,"1281":1,"1431":1,"2064":1},"3":{"0":1,"1083":2,"1199":3,"1207":2,"1281":1,"1286":1,"1431":3,"1436":8,"2064":2}}],["deletebehavior",{"2":{"1083":2,"1281":1,"2064":2},"3":{"1083":3,"1207":2,"1281":2,"1286":5,"1362":1,"1369":3,"1436":8,"1489":1,"2064":2}}],["deletebehaviorsourceannotation",{"3":{"1286":1}}],["deletebehaviorsource",{"3":{"0":1,"1083":1,"1281":1,"1286":1,"1431":1,"1436":3,"2064":1}}],["deletecategoryasync",{"3":{"1395":1}}],["deletecategoryhandler",{"2":{"924":1},"3":{"924":1,"1270":2}}],["deleteconfirm",{"3":{"1324":1,"1395":5,"1402":1}}],["deleteconfirmationtests",{"3":{"1199":1,"1207":2}}],["deleteconfirmation",{"3":{"649":1,"1324":5,"1395":21,"1402":2,"1577":1}}],["deleteconferencecategoryhandlertests",{"3":{"1199":1,"1207":2,"1438":1}}],["deleteconferencecategoryhandler",{"3":{"1199":3,"1203":1,"1207":2,"1270":2,"1359":9}}],["deletechildren",{"2":{"37":1,"39":1,"43":1,"1168":1,"1343":1},"3":{"37":1,"39":2,"43":1,"1168":1,"1231":1,"1237":2,"1343":1,"1350":8,"1359":2,"1402":3,"1436":7,"1577":1,"1586":1,"1662":1,"1810":1}}],["deleteuserasync",{"3":{"1324":1}}],["deleteusercommand",{"3":{"988":1,"1199":5,"1203":1,"1207":2,"1323":6,"1410":2,"1415":6}}],["deleteuserhandlertests",{"3":{"1199":1,"1207":2}}],["deleteuserhandler",{"2":{"463":1},"3":{"444":1,"459":3,"463":3,"464":2,"465":2,"466":2,"1199":2,"1203":1,"1207":2,"1286":1,"1323":7,"1410":2,"1415":19,"1496":4,"1526":1,"1535":2,"1591":1,"1600":1,"2127":1}}],["deleteuserhandlerbasetests",{"3":{"497":1,"1199":1,"1207":4,"1323":1,"1438":2}}],["deleteuserhandlerbase",{"2":{"457":1,"459":1,"461":1,"465":1,"466":1,"724":1,"728":1,"1291":1,"1403":1,"1672":1},"3":{"0":1,"457":1,"459":6,"461":3,"465":6,"466":1,"724":3,"725":3,"728":1,"910":1,"1199":3,"1203":1,"1207":2,"1286":2,"1291":2,"1300":7,"1322":2,"1323":8,"1403":1,"1410":1,"1415":11,"1496":4,"1577":1,"1672":1,"2066":1}}],["deleteuser",{"2":{"1323":1},"3":{"444":1,"459":3,"463":2,"465":3,"466":1,"724":1,"910":1,"988":1,"1203":3,"1207":8,"1286":1,"1291":1,"1300":5,"1322":1,"1323":12,"1410":1,"1415":7,"1496":1,"1500":1,"1526":1,"1577":1,"2066":1}}],["deleteaccountasync",{"3":{"1415":1}}],["deleteactivityasync",{"3":{"1395":2}}],["deleteanswerasync",{"3":{"1395":6,"1396":8}}],["deleteall",{"2":{"1346":1},"3":{"1346":1,"1350":4}}],["deleteavatarblob",{"2":{"444":1,"1411":1},"3":{"444":2,"1203":3,"1207":8,"1318":1,"1323":2,"1410":1,"1411":1,"1415":6}}],["deleteavatarblobinternalcommandvalidator",{"2":{"1411":1},"3":{"1199":1,"1203":1,"1207":2,"1411":2,"1415":4}}],["deleteavatarblobinternalcommandhandlertests",{"3":{"1199":1,"1207":2}}],["deleteavatarblobinternalcommandhandler",{"2":{"1411":1,"2127":1},"3":{"1199":2,"1203":1,"1207":2,"1286":2,"1318":1,"1323":3,"1411":2,"1415":7,"2127":1}}],["deleteavatarblobinternalcommand",{"2":{"440":1,"444":1,"1410":1,"1411":1,"2127":1},"3":{"440":1,"444":2,"1199":10,"1203":1,"1207":2,"1323":2,"1410":2,"1411":2,"1415":20,"1496":1,"2127":1}}],["deleteasync",{"2":{"318":1,"326":1,"434":1,"1386":1},"3":{"318":1,"326":1,"434":1,"881":2,"1286":4,"1301":2,"1309":2,"1311":4,"1323":6,"1324":4,"1359":7,"1380":18,"1382":2,"1386":1,"1389":1,"1395":29,"1396":5,"1402":2,"1415":7,"1429":1,"1436":1,"1488":1,"1496":1,"2055":1,"2074":1,"2126":1}}],["deleteeventasync",{"3":{"1395":2}}],["deleteeventhandlertests",{"3":{"1199":1,"1207":2,"1350":2,"1359":2}}],["deleteeventhandler",{"3":{"1116":1,"1199":2,"1203":1,"1207":2,"1323":1,"1350":4,"1352":9,"1359":11,"1496":2}}],["deleteentitycommand",{"2":{"1265":1},"3":{"1199":45,"1203":1,"1207":2,"1260":1,"1265":6,"1270":6,"1311":3,"1359":5,"1380":8,"1396":6,"1402":3,"1436":1,"1922":1}}],["deleteentityhandlertests",{"3":{"1199":1,"1207":3,"1270":1}}],["deleteentityhandlerextensiontests",{"2":{"926":1},"3":{"926":1,"1199":1,"1207":1}}],["deleteentityhandler",{"2":{"920":1,"1265":1},"3":{"0":1,"920":1,"926":3,"1199":11,"1203":1,"1207":2,"1260":1,"1265":8,"1270":7,"1286":2,"1323":2,"1352":1,"1359":29,"1396":2,"1402":8,"1577":2}}],["deleteerror",{"3":{"265":1,"1324":2}}],["deletesponsorasync",{"3":{"1395":2}}],["deletespeakerasync",{"3":{"1395":2}}],["deletespeakercommand",{"3":{"1270":1}}],["deletesessionasync",{"3":{"1395":1}}],["deletesessionassetcommandvalidator",{"3":{"1199":1,"1203":1,"1207":2,"1359":3}}],["deletesessionassetcommand",{"3":{"1199":6,"1203":1,"1207":2,"1359":7,"1380":1}}],["deletesessionassethandlertests",{"3":{"1199":1,"1207":2}}],["deletesessionassethandler",{"3":{"1116":1,"1199":2,"1203":1,"1207":2,"1323":1,"1350":1,"1357":2,"1359":9,"1496":1}}],["deletesessionassetblobinternalcommandhandler",{"2":{"1203":1,"1323":1,"1415":1},"3":{"1199":2,"1203":1,"1207":2,"1286":2,"1318":1,"1323":3,"1357":2,"1359":6,"1415":1}}],["deletesessionassetblobinternalcommandhandlertests",{"2":{"1199":1,"1207":1},"3":{"1199":1,"1207":2}}],["deletesessionassetblobinternalcommandvalidator",{"2":{"1199":1,"1203":1},"3":{"1199":2,"1203":1,"1207":2,"1359":5}}],["deletesessionassetblobinternalcommand",{"2":{"1496":1},"3":{"536":1,"1116":1,"1199":10,"1203":1,"1207":2,"1323":2,"1357":3,"1359":15,"1496":1}}],["deletesessionassetblob",{"2":{"536":1,"1116":1,"1631":1},"3":{"0":1,"536":2,"1116":2,"1203":3,"1207":6,"1286":1,"1318":1,"1323":2,"1357":1,"1359":6,"1631":1}}],["deletesessioncommand",{"3":{"1270":1}}],["deletesessionhandlertests",{"3":{"1199":1,"1207":2,"1350":1,"1359":2}}],["deletesessionhandler",{"3":{"1116":1,"1199":3,"1203":1,"1207":2,"1270":2,"1323":1,"1359":10,"1496":1}}],["deletes",{"3":{"0":1,"39":2,"435":1,"458":1,"459":1,"490":1,"592":1,"690":1,"698":1,"733":1,"790":1,"792":2,"831":1,"881":2,"905":1,"996":1,"1061":1,"1082":2,"1086":1,"1116":1,"1168":1,"1229":1,"1270":4,"1275":1,"1281":1,"1283":1,"1285":1,"1286":6,"1294":1,"1300":7,"1301":9,"1323":7,"1324":4,"1343":1,"1346":1,"1350":7,"1357":1,"1359":13,"1369":4,"1380":1,"1395":13,"1396":17,"1402":9,"1415":7,"1417":2,"1422":1,"1436":13,"1438":1,"1445":1,"1455":2,"1460":4,"1463":1,"1465":3,"1467":3,"1472":1,"1475":3,"1489":1,"1496":1,"1545":1,"1577":1,"1630":1,"1631":5,"1632":6,"1635":4,"1639":9,"1640":1,"1664":1,"1682":1,"1707":1,"1747":1,"1749":2,"1765":1,"1845":1,"1936":1,"1968":1,"2034":1,"2063":1,"2126":2,"2127":1,"2202":1}}],["deletedvote",{"3":{"1402":1}}],["deletedbookmark",{"3":{"1396":2}}],["deletedbynamespecification",{"3":{"1199":2,"1207":1}}],["deletedby",{"2":{"37":1,"41":1},"3":{"37":1,"39":1,"41":1,"1231":1,"1237":4,"1286":1}}],["deletedon",{"2":{"37":1,"41":1},"3":{"37":1,"39":1,"41":1,"1231":2,"1237":5,"1274":1,"1286":2,"1415":1,"1664":1}}],["deleted",{"1":{"456":1,"457":1,"458":1,"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1},"2":{"781":1,"785":1,"1082":1,"1355":1},"3":{"0":15,"39":3,"41":2,"62":1,"109":1,"135":1,"264":1,"308":1,"441":2,"456":1,"457":1,"458":1,"459":11,"461":4,"463":2,"465":3,"468":1,"503":1,"529":1,"538":1,"545":1,"551":1,"562":1,"607":1,"690":1,"698":2,"707":1,"715":1,"716":2,"717":1,"721":1,"748":1,"749":2,"781":1,"782":6,"784":1,"785":1,"790":1,"832":1,"833":1,"838":1,"848":1,"881":1,"888":1,"889":3,"890":4,"891":3,"905":2,"910":1,"926":1,"945":1,"966":1,"972":1,"1033":1,"1034":1,"1082":1,"1116":1,"1168":2,"1192":1,"1212":5,"1229":1,"1231":7,"1232":1,"1233":1,"1237":17,"1240":1,"1247":4,"1249":1,"1259":4,"1270":1,"1274":1,"1276":1,"1277":1,"1281":1,"1283":2,"1286":43,"1287":1,"1289":3,"1300":15,"1301":1,"1304":1,"1309":1,"1311":10,"1323":14,"1342":1,"1343":3,"1345":2,"1346":3,"1347":1,"1350":58,"1352":2,"1355":1,"1357":1,"1358":1,"1359":87,"1362":1,"1369":9,"1380":1,"1395":1,"1396":54,"1398":3,"1402":33,"1406":1,"1409":1,"1410":1,"1415":23,"1417":1,"1436":19,"1438":3,"1442":1,"1451":1,"1456":2,"1467":1,"1471":1,"1473":3,"1475":2,"1479":1,"1486":1,"1490":1,"1496":19,"1611":1,"1630":3,"1631":12,"1632":9,"1633":4,"1634":25,"1635":4,"1636":1,"1637":1,"1638":15,"1639":34,"1640":6,"1641":2,"1653":1,"1664":1,"1667":3,"1672":2,"1675":2,"1684":1,"1685":2,"1698":1,"1704":1,"1719":1,"1728":1,"1747":1,"1748":6,"1749":1,"1755":1,"1764":2,"1765":3,"1767":1,"1769":12,"1776":2,"1810":1,"1825":1,"1839":1,"1851":2,"1891":1,"1898":1,"1923":1,"1984":1,"2045":1,"2061":4,"2066":1,"2098":1,"2126":1,"2127":1,"2158":1,"2164":1,"2230":1,"2232":3}}],["delete",{"0":{"1386":1,"2064":1},"1":{"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"886":1,"887":1,"888":1,"889":1,"890":1,"891":1,"892":1,"893":1,"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":1,"1080":1,"1081":1,"1082":1,"1083":1,"1084":1,"1085":1,"1086":1,"1087":1,"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1956":1,"1957":1,"1958":1,"1959":1,"2061":1,"2062":1,"2063":1,"2064":1,"2065":1,"2066":1,"2067":1,"2068":1,"2069":1},"2":{"38":1,"40":1,"43":1,"207":1,"458":1,"718":1,"719":1,"1082":1,"1140":1,"1478":1,"1687":1,"1746":1,"1936":1,"2034":1,"2061":1,"2064":1,"2203":1},"3":{"0":26,"36":1,"37":1,"38":5,"39":5,"40":2,"41":2,"43":2,"59":1,"157":1,"207":2,"243":1,"245":1,"257":1,"265":1,"291":1,"305":1,"313":1,"318":2,"326":1,"328":1,"329":1,"341":1,"346":1,"358":1,"361":1,"362":2,"366":1,"434":4,"435":2,"440":2,"458":3,"459":4,"461":1,"462":2,"463":1,"464":1,"466":1,"497":1,"499":1,"534":1,"549":1,"550":1,"609":1,"610":1,"611":1,"633":1,"640":1,"642":1,"690":1,"698":3,"699":2,"700":1,"707":1,"710":1,"713":1,"714":1,"715":1,"716":2,"718":1,"719":1,"721":1,"723":1,"725":1,"733":3,"774":1,"782":2,"790":1,"791":1,"853":1,"886":1,"888":3,"889":3,"890":2,"891":1,"893":1,"905":1,"907":1,"910":1,"919":1,"920":1,"921":1,"922":3,"924":2,"925":1,"926":5,"950":1,"996":1,"1033":1,"1059":1,"1061":1,"1063":1,"1069":1,"1080":1,"1081":1,"1082":6,"1083":3,"1084":3,"1085":2,"1086":2,"1087":1,"1116":8,"1117":1,"1118":2,"1120":2,"1140":1,"1141":1,"1142":1,"1146":1,"1147":1,"1168":4,"1170":1,"1174":2,"1175":5,"1180":1,"1192":1,"1201":2,"1202":1,"1203":8,"1207":18,"1212":9,"1213":1,"1230":2,"1231":9,"1232":2,"1236":2,"1237":37,"1240":1,"1244":1,"1247":7,"1259":2,"1260":2,"1265":5,"1270":27,"1272":1,"1273":1,"1274":2,"1275":1,"1276":1,"1277":1,"1278":2,"1280":2,"1281":5,"1286":93,"1290":1,"1291":3,"1300":35,"1301":13,"1306":1,"1308":3,"1309":8,"1311":18,"1316":1,"1318":2,"1323":44,"1324":20,"1339":4,"1340":1,"1342":5,"1343":6,"1344":1,"1345":2,"1346":4,"1350":97,"1352":2,"1353":1,"1354":3,"1355":3,"1357":4,"1359":192,"1361":1,"1362":3,"1363":1,"1369":25,"1371":4,"1373":1,"1375":1,"1380":25,"1383":1,"1386":1,"1388":2,"1392":1,"1395":95,"1396":101,"1398":3,"1402":63,"1405":7,"1406":2,"1410":2,"1411":1,"1412":2,"1414":1,"1415":69,"1417":6,"1431":3,"1436":149,"1438":20,"1446":1,"1453":2,"1455":1,"1465":3,"1467":3,"1469":1,"1473":1,"1474":2,"1475":1,"1478":4,"1487":2,"1488":1,"1489":2,"1490":3,"1496":4,"1526":4,"1535":1,"1545":2,"1567":4,"1570":1,"1572":1,"1577":7,"1586":2,"1591":1,"1607":1,"1608":1,"1611":1,"1612":1,"1614":1,"1618":2,"1630":3,"1631":8,"1632":40,"1633":2,"1635":9,"1637":1,"1638":6,"1639":14,"1640":3,"1641":1,"1643":1,"1644":1,"1651":5,"1657":1,"1662":1,"1664":1,"1666":2,"1667":1,"1668":1,"1669":1,"1671":3,"1672":2,"1684":1,"1685":5,"1686":7,"1687":2,"1689":1,"1699":1,"1700":1,"1701":1,"1710":1,"1717":1,"1720":3,"1727":4,"1729":1,"1741":1,"1742":4,"1746":13,"1747":6,"1748":17,"1749":1,"1750":2,"1751":1,"1765":4,"1768":2,"1769":16,"1779":2,"1784":1,"1795":2,"1796":1,"1799":1,"1810":6,"1812":1,"1815":1,"1839":1,"1851":2,"1909":1,"1912":1,"1915":1,"1916":1,"1922":2,"1923":1,"1936":1,"1951":1,"1964":1,"1986":1,"1987":1,"1991":1,"2034":1,"2047":1,"2060":1,"2061":9,"2062":1,"2063":7,"2064":6,"2066":2,"2068":1,"2069":7,"2089":1,"2090":1,"2098":1,"2126":1,"2138":1,"2164":1,"2166":1,"2167":1,"2168":1,"2186":1,"2202":2,"2203":1,"2208":1,"2210":1,"2221":1,"2230":2,"2232":7}}],["delimiting",{"3":{"1089":1,"1093":1,"2179":1}}],["delimiters",{"3":{"1019":1,"1324":1}}],["delimiter",{"3":{"1018":1,"1019":1,"1020":1,"1301":1,"1324":1,"1366":1,"1455":1}}],["delimited",{"3":{"0":1,"1017":1,"1018":2,"1090":1,"1212":1,"1339":1,"1366":2,"1369":1,"1435":1,"1438":1,"1492":1,"1496":1,"1526":1}}],["delimit",{"3":{"1018":1}}],["deliberateness",{"3":{"1436":1}}],["deliberate",{"0":{"1497":1,"1534":1,"1585":1,"1599":1},"3":{"0":5,"42":1,"53":1,"61":1,"81":1,"85":1,"122":2,"126":1,"135":1,"136":1,"149":1,"157":1,"175":2,"178":1,"189":1,"201":1,"230":1,"237":1,"255":1,"264":1,"265":1,"267":1,"302":1,"359":1,"361":1,"365":1,"372":1,"374":1,"382":1,"388":1,"391":1,"408":1,"446":1,"461":1,"469":1,"473":1,"536":1,"545":1,"566":1,"585":1,"607":1,"609":1,"628":1,"629":1,"661":1,"715":1,"725":1,"735":1,"743":1,"751":1,"764":1,"766":2,"767":1,"776":1,"785":1,"790":1,"792":2,"793":1,"802":1,"821":1,"825":1,"827":1,"831":1,"832":1,"840":1,"872":1,"897":1,"906":1,"913":1,"922":1,"931":1,"932":1,"941":1,"988":1,"996":1,"998":1,"1018":1,"1042":1,"1043":1,"1044":1,"1052":1,"1061":1,"1077":1,"1082":1,"1116":1,"1126":1,"1135":1,"1162":1,"1211":1,"1212":2,"1229":3,"1230":1,"1236":1,"1237":11,"1239":1,"1242":1,"1244":1,"1247":8,"1254":1,"1257":2,"1259":13,"1263":3,"1264":1,"1265":1,"1267":1,"1270":8,"1271":4,"1276":1,"1286":46,"1298":1,"1300":19,"1301":3,"1304":1,"1307":1,"1309":4,"1310":1,"1311":19,"1312":6,"1316":1,"1322":1,"1323":21,"1324":28,"1327":1,"1332":1,"1333":1,"1337":1,"1339":28,"1341":1,"1344":1,"1347":1,"1350":6,"1352":2,"1353":1,"1358":1,"1359":47,"1361":1,"1369":4,"1372":1,"1378":1,"1380":7,"1383":1,"1387":1,"1394":1,"1395":26,"1396":31,"1399":1,"1402":9,"1414":1,"1415":13,"1416":3,"1417":15,"1421":1,"1427":1,"1431":1,"1434":1,"1436":51,"1438":2,"1441":3,"1443":1,"1447":1,"1453":2,"1455":3,"1456":1,"1457":1,"1467":6,"1473":1,"1474":1,"1483":1,"1487":2,"1489":2,"1491":1,"1492":1,"1495":1,"1496":2,"1500":1,"1504":2,"1526":3,"1530":1,"1531":4,"1532":2,"1534":3,"1545":1,"1547":1,"1555":1,"1569":1,"1575":1,"1577":4,"1581":1,"1582":2,"1583":1,"1584":1,"1585":1,"1586":1,"1589":1,"1591":5,"1596":3,"1597":3,"1599":2,"1638":2,"1640":1,"1641":1,"1653":1,"1654":2,"1708":1,"1722":1,"1735":1,"1805":1,"1815":1,"1821":3,"1827":1,"1833":1,"1840":1,"1861":1,"1867":1,"1876":1,"1898":1,"1902":1,"1909":1,"1915":1,"1918":1,"1920":1,"1923":2,"1933":1,"1940":1,"1948":1,"1949":1,"1953":1,"1963":1,"1977":1,"1984":1,"1989":1,"1994":1,"2000":2,"2001":2,"2009":1,"2012":1,"2013":1,"2019":2,"2024":1,"2027":1,"2030":1,"2032":1,"2041":1,"2043":1,"2064":3,"2065":1,"2071":1,"2075":1,"2081":1,"2098":1,"2111":1,"2117":1,"2127":1,"2132":1,"2137":1,"2142":1,"2143":1,"2155":1,"2159":1,"2166":1,"2167":1,"2177":1,"2192":2,"2198":1,"2232":2}}],["deliberately",{"0":{"1368":1,"1389":1,"1721":1,"1902":1},"3":{"0":35,"23":1,"24":2,"26":1,"31":1,"45":1,"55":1,"62":1,"66":1,"68":1,"92":1,"97":1,"100":1,"109":2,"122":1,"124":1,"125":1,"135":3,"136":2,"142":1,"143":1,"147":1,"149":1,"164":1,"173":1,"178":1,"188":1,"200":1,"207":1,"219":1,"230":2,"235":1,"237":1,"243":1,"245":1,"248":2,"256":1,"265":5,"267":1,"273":1,"283":1,"290":1,"291":1,"309":1,"312":1,"314":1,"318":1,"322":1,"328":1,"353":1,"355":1,"358":1,"359":1,"365":1,"369":1,"372":1,"373":1,"379":1,"401":1,"402":1,"403":1,"413":2,"435":1,"448":3,"455":1,"459":2,"470":1,"474":1,"482":1,"494":1,"500":1,"501":2,"509":1,"517":1,"530":1,"535":1,"545":2,"546":1,"547":1,"549":5,"550":2,"556":1,"558":2,"564":1,"572":2,"576":1,"583":1,"591":2,"592":1,"593":1,"599":1,"600":2,"602":1,"603":1,"607":1,"609":1,"618":2,"620":1,"625":1,"626":1,"632":1,"633":1,"641":1,"649":1,"657":1,"665":6,"672":3,"682":1,"690":2,"692":1,"698":2,"700":1,"703":1,"707":1,"715":1,"725":1,"733":1,"741":2,"749":1,"751":1,"753":1,"757":1,"765":1,"766":2,"774":1,"778":1,"782":2,"786":1,"790":3,"795":1,"800":1,"819":2,"820":1,"825":1,"826":1,"827":4,"834":1,"836":1,"837":1,"848":1,"854":1,"869":2,"873":1,"881":1,"883":1,"889":1,"897":2,"904":1,"905":4,"907":3,"914":1,"926":2,"933":1,"939":1,"947":1,"963":1,"964":1,"971":1,"972":1,"988":5,"995":1,"998":1,"999":1,"1005":1,"1012":1,"1018":1,"1020":1,"1034":1,"1041":1,"1042":2,"1046":1,"1050":2,"1051":1,"1053":1,"1059":1,"1066":1,"1067":1,"1069":1,"1083":1,"1093":1,"1099":1,"1118":1,"1124":3,"1133":1,"1212":8,"1213":1,"1215":1,"1217":1,"1222":1,"1228":2,"1229":4,"1231":2,"1232":1,"1233":1,"1234":1,"1235":1,"1237":10,"1239":1,"1240":1,"1242":1,"1244":1,"1247":13,"1252":2,"1253":1,"1254":1,"1259":14,"1261":1,"1263":1,"1265":1,"1267":2,"1269":1,"1270":25,"1271":1,"1273":4,"1275":1,"1276":1,"1278":2,"1279":2,"1281":1,"1285":1,"1286":78,"1289":3,"1290":3,"1291":2,"1292":1,"1293":1,"1294":2,"1298":1,"1300":42,"1301":11,"1304":3,"1305":1,"1306":1,"1308":1,"1309":18,"1310":3,"1311":53,"1312":3,"1314":1,"1315":2,"1317":2,"1318":3,"1319":1,"1320":1,"1322":1,"1323":37,"1324":58,"1325":1,"1328":2,"1330":2,"1332":1,"1335":1,"1336":2,"1337":1,"1338":1,"1339":28,"1340":1,"1342":3,"1343":3,"1349":1,"1350":21,"1353":2,"1355":2,"1357":1,"1359":87,"1362":2,"1363":1,"1364":1,"1365":1,"1366":1,"1369":17,"1372":1,"1374":1,"1375":1,"1377":2,"1378":1,"1380":10,"1383":1,"1389":1,"1391":1,"1394":1,"1395":29,"1396":69,"1397":1,"1398":1,"1399":2,"1400":1,"1402":27,"1404":1,"1405":2,"1406":2,"1408":1,"1409":1,"1410":2,"1412":2,"1413":1,"1414":1,"1415":33,"1416":8,"1417":36,"1421":1,"1422":1,"1423":1,"1424":1,"1425":1,"1427":4,"1429":1,"1430":3,"1431":3,"1433":3,"1434":1,"1435":2,"1436":142,"1438":16,"1441":3,"1442":1,"1443":4,"1445":1,"1446":1,"1447":2,"1448":1,"1453":3,"1454":1,"1455":7,"1458":1,"1459":1,"1460":2,"1465":3,"1467":16,"1472":1,"1473":1,"1474":2,"1475":2,"1476":1,"1477":2,"1478":1,"1481":1,"1486":3,"1487":1,"1488":2,"1489":8,"1490":1,"1491":1,"1492":7,"1496":3,"1507":2,"1512":1,"1526":7,"1530":1,"1531":1,"1532":1,"1534":1,"1537":1,"1550":1,"1556":1,"1577":6,"1585":1,"1586":1,"1589":1,"1591":2,"1596":1,"1602":1,"1630":1,"1631":1,"1632":1,"1639":1,"1640":1,"1641":2,"1652":1,"1653":1,"1654":1,"1655":1,"1661":2,"1665":1,"1670":2,"1684":1,"1686":2,"1689":1,"1692":1,"1699":1,"1701":1,"1707":1,"1723":1,"1727":2,"1729":1,"1731":1,"1735":1,"1748":1,"1749":2,"1761":1,"1764":2,"1765":4,"1766":1,"1771":1,"1792":1,"1795":1,"1797":1,"1799":1,"1806":1,"1810":1,"1815":3,"1823":1,"1833":1,"1838":1,"1839":1,"1841":1,"1843":1,"1845":1,"1849":1,"1852":1,"1855":1,"1856":1,"1858":1,"1860":1,"1873":1,"1876":1,"1880":1,"1891":1,"1897":1,"1898":1,"1902":1,"1909":1,"1911":1,"1916":1,"1917":1,"1918":1,"1922":1,"1923":2,"1924":1,"1927":2,"1929":1,"1933":1,"1934":1,"1935":1,"1942":1,"1952":1,"1968":1,"1969":1,"1970":1,"1982":2,"1984":1,"1990":1,"1994":2,"1995":2,"1998":1,"2001":3,"2002":1,"2004":1,"2007":1,"2010":1,"2024":1,"2029":1,"2030":1,"2034":1,"2044":3,"2047":1,"2050":1,"2054":1,"2057":1,"2059":1,"2063":1,"2064":1,"2067":3,"2068":1,"2075":1,"2077":1,"2082":1,"2085":2,"2089":1,"2098":1,"2107":1,"2113":1,"2119":1,"2120":1,"2126":1,"2138":1,"2141":1,"2142":1,"2145":1,"2151":1,"2156":2,"2157":1,"2158":1,"2163":1,"2164":1,"2167":2,"2171":1,"2177":1,"2180":1,"2183":1,"2184":1,"2186":1,"2188":1,"2191":1,"2192":1,"2198":1,"2200":1,"2228":1,"2232":1}}],["deliverorderhandler",{"2":{"1875":1},"3":{"1765":1,"1875":1}}],["deliverat",{"3":{"1396":6,"1417":2}}],["deliverable",{"3":{"0":1,"24":1,"528":1,"800":1,"811":1,"1259":1,"1766":1}}],["deliveries",{"3":{"536":1,"702":1,"789":2,"1258":1,"1259":1,"1309":1,"1577":1,"1748":2,"1749":1,"1765":1,"1776":1,"2164":2,"2166":2,"2169":1}}],["delivering",{"3":{"391":1,"1300":1,"1339":1,"1396":1,"2162":1,"2213":1,"2217":1,"2218":1,"2220":2}}],["delivers",{"3":{"96":1,"896":1,"926":1,"988":1,"1091":1,"1212":1,"1247":1,"1270":1,"1286":3,"1309":1,"1324":1,"1345":1,"1350":1,"1359":1,"1415":1,"1416":1,"1467":1,"1665":1,"2177":1}}],["deliver",{"2":{"1771":1},"3":{"18":1,"91":1,"224":1,"225":1,"1101":1,"1212":1,"1229":1,"1254":1,"1257":1,"1259":1,"1286":1,"1300":1,"1302":1,"1309":1,"1323":1,"1324":1,"1396":1,"1425":1,"1746":2,"1749":2,"1765":3,"1771":1,"1775":1,"1837":1,"1846":1,"1933":2,"1941":1,"2025":1,"2214":1,"2220":1}}],["deliveredstate",{"3":{"1767":1}}],["deliveredon",{"3":{"1764":1,"1769":1}}],["delivered",{"3":{"0":2,"26":2,"27":2,"91":1,"120":1,"193":1,"202":1,"370":1,"725":1,"726":1,"854":1,"955":1,"1116":1,"1140":1,"1237":1,"1249":1,"1253":1,"1254":1,"1255":1,"1259":9,"1270":1,"1285":1,"1286":6,"1304":1,"1309":2,"1317":1,"1323":5,"1324":1,"1359":1,"1396":2,"1417":1,"1436":2,"1438":1,"1467":2,"1631":1,"1637":1,"1651":1,"1657":1,"1686":1,"1748":2,"1749":4,"1751":1,"1755":1,"1759":1,"1764":3,"1765":6,"1766":2,"1767":2,"1768":3,"1769":1,"1776":2,"1840":1,"1842":1,"1845":1,"1890":1,"1933":1,"1940":1,"1941":1,"2091":1,"2156":1,"2167":1,"2195":1,"2203":1,"2220":1,"2230":1}}],["delivery",{"0":{"1253":1,"1255":1,"1837":1,"1841":1,"2166":1},"1":{"431":1,"432":1,"433":1,"434":1,"435":1,"436":1},"3":{"0":9,"18":1,"20":1,"24":3,"26":1,"40":1,"67":1,"68":1,"80":1,"135":1,"156":1,"194":1,"195":1,"199":1,"201":2,"224":1,"225":5,"226":1,"228":1,"230":5,"255":3,"380":1,"383":1,"431":1,"433":1,"434":1,"435":2,"436":1,"518":1,"536":2,"540":2,"541":1,"605":1,"611":1,"640":1,"694":1,"696":1,"698":1,"702":3,"726":1,"757":1,"759":1,"761":1,"789":1,"790":4,"791":1,"792":3,"795":1,"815":1,"818":2,"820":2,"845":1,"846":2,"847":1,"849":1,"856":1,"896":1,"901":1,"930":1,"931":1,"933":1,"957":1,"988":1,"989":1,"1011":2,"1012":2,"1100":1,"1140":1,"1142":1,"1143":1,"1144":1,"1147":1,"1212":2,"1237":5,"1247":1,"1252":3,"1253":2,"1254":1,"1255":1,"1256":2,"1257":2,"1258":1,"1259":51,"1269":1,"1270":3,"1274":1,"1285":2,"1286":10,"1302":1,"1304":3,"1307":1,"1309":33,"1311":3,"1313":1,"1316":1,"1320":1,"1323":14,"1324":2,"1350":4,"1355":3,"1359":10,"1380":1,"1396":19,"1397":1,"1402":5,"1413":2,"1415":10,"1417":10,"1436":5,"1437":1,"1438":5,"1455":1,"1460":1,"1467":1,"1492":1,"1508":1,"1526":1,"1547":1,"1554":1,"1566":1,"1572":1,"1577":1,"1641":3,"1660":1,"1665":1,"1669":1,"1749":1,"1750":1,"1755":1,"1759":1,"1763":2,"1764":2,"1765":2,"1767":4,"1768":1,"1769":1,"1770":1,"1771":1,"1776":3,"1790":3,"1837":1,"1838":1,"1841":1,"1842":3,"1843":1,"1845":1,"1846":1,"1889":1,"1890":1,"1892":3,"1910":1,"1912":3,"1922":1,"1923":1,"1932":2,"1933":8,"1934":1,"1936":1,"1940":5,"1941":3,"1943":2,"1944":1,"1949":2,"1950":1,"2020":1,"2027":1,"2032":1,"2065":1,"2091":1,"2164":1,"2165":1,"2166":3,"2167":1,"2168":1,"2169":3,"2182":1,"2189":1,"2212":1,"2213":1,"2220":2,"2225":1,"2232":2}}],["desde",{"3":{"1686":1}}],["desk",{"3":{"1396":4,"1630":1}}],["desktops",{"3":{"741":1}}],["desktop",{"0":{"1669":1},"3":{"618":1,"1324":13,"1385":1,"1395":12,"1396":1,"1416":2,"1417":7,"1436":3,"1438":1,"1480":1,"1559":2,"1648":1,"1669":1,"1675":1,"1682":1,"1693":1,"1712":2,"1713":2,"1718":2,"2072":2,"2073":3,"2079":1,"2119":1}}],["desired",{"3":{"1300":3,"1323":1,"1324":1,"1402":2,"1417":1,"1764":2,"1776":1}}],["desire",{"3":{"1145":1}}],["designs",{"3":{"1800":1,"1802":1}}],["designsqliteentityconfiguration",{"3":{"1199":1,"1207":1}}],["designsqliteentity",{"3":{"1199":3,"1207":1}}],["designated",{"3":{"1664":1}}],["designation",{"3":{"1629":2}}],["designalphaentityconfiguration",{"3":{"1199":1,"1207":1}}],["designalphaentity",{"3":{"1199":3,"1207":1}}],["designing",{"3":{"1396":2,"1811":1,"2213":1,"2217":1,"2218":1}}],["designtimesqlitedbcontextfactory",{"2":{"1722":1,"1727":1,"1728":1,"1731":1},"3":{"1722":1,"1727":1,"1728":1,"1731":1}}],["designtimesqlserverdbcontextfactory",{"3":{"1209":4,"1286":6,"1359":1,"1369":1,"1396":2,"1415":3,"1496":1}}],["designtimeconnection",{"3":{"1436":1}}],["designtime",{"3":{"1286":3}}],["designtimedatabaseinitializationtests",{"3":{"1199":1,"1207":2,"1438":2}}],["designtimedbcontexthelpertests",{"3":{"1199":1,"1207":10,"1286":2}}],["designtimedbcontexthelper",{"2":{"696":1,"698":1,"703":1,"707":1,"715":1,"1034":1,"1284":1},"3":{"696":2,"698":2,"703":3,"707":2,"710":1,"715":1,"905":2,"909":1,"1034":2,"1199":4,"1203":1,"1207":4,"1284":2,"1286":44,"1300":2,"1323":2,"1436":3}}],["designtimedbcontextoptions",{"2":{"0":1,"707":1,"905":1,"1284":1},"3":{"0":1,"707":2,"905":3,"907":1,"1199":3,"1203":1,"1207":2,"1284":2,"1286":14,"1496":1}}],["designpostgresqlentityconfiguration",{"3":{"1199":1,"1207":1}}],["designpostgresqlentity",{"3":{"1199":3,"1207":1}}],["designbetaentityconfiguration",{"3":{"1199":1,"1207":1}}],["designbetaentity",{"3":{"1199":3,"1207":1}}],["designed",{"3":{"139":1,"272":1,"319":1,"550":1,"611":1,"692":1,"1229":1,"1270":1,"1286":3,"1300":3,"1311":1,"1323":3,"1324":1,"1369":2,"1395":1,"1396":2,"1417":4,"1436":1,"1561":1,"1591":1,"1632":1,"1641":1,"1900":1,"1993":1,"2062":1,"2140":1,"2143":1,"2145":1,"2220":1,"2221":1}}],["designer",{"3":{"0":1,"564":1,"567":1,"1004":1,"1209":65,"1323":1,"1436":2,"1455":1,"1497":1}}],["design",{"0":{"1201":1,"1284":1,"1539":1,"1541":1,"1543":1,"1546":1,"1555":1,"1557":1,"1559":1,"1680":1},"1":{"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"1711":1,"1712":1,"1713":1,"1714":1,"1715":1,"1716":1,"1942":1,"1943":1,"1944":1,"1945":1,"1946":1,"1947":1,"1948":1,"1949":1,"1950":1},"2":{"1261":1,"1346":1,"1381":1,"1418":1},"3":{"0":10,"24":1,"27":1,"41":1,"59":1,"83":1,"99":1,"135":1,"141":1,"145":1,"159":1,"201":1,"209":1,"225":1,"230":1,"235":1,"244":1,"263":1,"267":1,"274":1,"282":1,"308":1,"311":1,"312":1,"318":1,"340":1,"350":1,"359":2,"365":1,"387":2,"399":2,"419":1,"435":1,"441":1,"451":2,"452":2,"453":1,"464":1,"465":1,"468":1,"470":1,"472":1,"490":1,"501":1,"585":1,"590":1,"607":1,"611":1,"618":1,"632":1,"633":1,"634":1,"640":1,"649":1,"650":1,"667":1,"698":2,"700":1,"703":2,"706":1,"707":5,"710":1,"727":1,"732":1,"733":1,"766":1,"792":1,"803":1,"809":1,"810":3,"811":2,"812":2,"818":1,"825":1,"827":2,"830":1,"840":1,"855":1,"867":1,"876":2,"882":1,"905":4,"907":4,"909":1,"914":1,"916":2,"926":1,"945":1,"950":1,"964":1,"966":1,"1000":1,"1020":1,"1033":2,"1034":2,"1036":1,"1043":1,"1053":1,"1059":2,"1063":1,"1074":1,"1084":1,"1107":1,"1110":1,"1175":1,"1177":1,"1182":1,"1183":1,"1193":1,"1202":1,"1203":5,"1207":8,"1212":1,"1213":1,"1214":1,"1216":6,"1218":2,"1222":1,"1225":1,"1226":1,"1228":1,"1229":19,"1230":1,"1231":1,"1233":1,"1234":1,"1235":1,"1236":1,"1237":20,"1239":2,"1240":1,"1241":1,"1245":1,"1247":15,"1248":1,"1249":1,"1252":2,"1253":1,"1259":14,"1261":1,"1263":1,"1264":1,"1266":2,"1270":27,"1271":11,"1272":1,"1273":4,"1278":1,"1282":1,"1284":4,"1286":92,"1288":1,"1300":46,"1301":5,"1302":1,"1309":20,"1310":12,"1311":62,"1312":9,"1314":1,"1317":1,"1320":1,"1322":1,"1323":27,"1324":95,"1328":1,"1333":1,"1335":1,"1337":2,"1339":22,"1340":1,"1343":1,"1346":1,"1347":1,"1350":59,"1353":1,"1356":1,"1358":1,"1359":156,"1369":2,"1370":1,"1376":1,"1377":1,"1380":36,"1381":1,"1382":1,"1389":3,"1395":51,"1396":103,"1397":1,"1398":1,"1402":31,"1403":1,"1405":1,"1406":3,"1407":1,"1408":1,"1415":39,"1416":6,"1417":29,"1418":1,"1427":3,"1429":2,"1431":2,"1436":97,"1438":1,"1447":1,"1453":1,"1455":6,"1460":2,"1467":1,"1471":1,"1473":1,"1474":1,"1478":1,"1481":1,"1488":3,"1489":1,"1491":1,"1492":1,"1493":3,"1496":5,"1499":5,"1500":1,"1524":1,"1526":8,"1530":1,"1531":1,"1532":2,"1534":3,"1535":4,"1537":1,"1538":1,"1546":1,"1551":1,"1557":1,"1559":1,"1562":2,"1564":1,"1568":1,"1572":1,"1574":1,"1576":1,"1577":9,"1581":2,"1582":5,"1583":2,"1585":5,"1586":2,"1591":6,"1595":1,"1596":1,"1597":2,"1599":3,"1600":3,"1602":1,"1630":2,"1638":2,"1639":1,"1640":1,"1641":1,"1651":1,"1652":2,"1653":1,"1664":1,"1667":1,"1674":1,"1675":1,"1684":1,"1689":2,"1697":2,"1698":1,"1711":1,"1714":1,"1719":3,"1727":2,"1749":1,"1779":1,"1784":1,"1789":1,"1796":7,"1797":1,"1800":5,"1812":1,"1816":1,"1827":2,"1829":1,"1842":1,"1846":1,"1851":1,"1852":1,"1853":2,"1854":1,"1885":2,"1896":1,"1903":1,"1911":2,"1920":2,"1923":4,"1924":1,"1929":2,"1930":1,"1933":1,"1935":1,"1942":1,"1943":1,"1947":1,"1950":1,"1953":2,"1959":1,"1962":1,"1967":1,"1968":1,"1969":1,"1970":1,"1971":1,"1972":1,"1978":1,"1981":1,"1984":1,"2000":1,"2024":1,"2034":1,"2037":1,"2048":2,"2049":1,"2052":2,"2056":1,"2066":1,"2068":1,"2071":1,"2079":3,"2080":2,"2085":1,"2086":1,"2096":1,"2098":2,"2101":1,"2106":1,"2114":2,"2116":1,"2117":1,"2127":2,"2129":1,"2131":2,"2133":1,"2142":1,"2146":1,"2150":1,"2159":1,"2162":1,"2164":1,"2165":1,"2171":1,"2172":1,"2182":1,"2185":1,"2193":1,"2195":1,"2198":1,"2203":2,"2208":1,"2212":1,"2213":2,"2217":1,"2218":1,"2219":3,"2220":2,"2226":1,"2230":1,"2232":2,"2239":3}}],["desynchronize",{"3":{"609":1,"1350":1,"1359":3,"1417":1}}],["deserve",{"3":{"842":1,"1300":1,"1348":1,"1489":1,"1804":1,"1953":1,"2140":1}}],["deserves",{"3":{"290":1,"784":1,"898":1,"1286":1,"1300":1,"1359":3,"1406":1,"1817":1,"1834":1}}],["deserializable",{"3":{"1311":1}}],["deserialization",{"3":{"255":1,"1229":2,"1237":1,"1259":1,"1286":1,"1311":1,"1324":1,"1342":1,"1344":1,"1350":1,"1358":1,"1359":2,"1396":2,"1436":1}}],["deserializing",{"3":{"1237":1,"1324":1,"1395":1,"1396":1,"1438":1}}],["deserializecommand",{"3":{"1286":1}}],["deserializer",{"3":{"1223":1,"1229":1,"1343":1,"1350":1}}],["deserializeevent",{"2":{"848":1,"849":1,"850":1},"3":{"848":1,"849":1,"850":1,"1259":2}}],["deserializes",{"3":{"109":1,"1042":1,"1227":1,"1229":2,"1237":1,"1249":1,"1259":3,"1286":1,"1300":3,"1309":1,"1311":1,"1324":2,"1350":1,"1359":5,"1365":1,"1366":1,"1369":4,"1396":3,"1415":1,"1416":1,"1417":5,"1436":13,"1887":1,"1946":1,"2186":1}}],["deserialize",{"2":{"1366":1},"3":{"78":1,"382":1,"732":1,"845":1,"1229":1,"1237":1,"1259":3,"1300":1,"1301":5,"1324":2,"1366":2,"1369":1,"1396":6,"1415":1,"1416":3,"1417":2,"1427":3,"1438":1,"1889":1,"1949":1}}],["deserialized",{"3":{"26":1,"784":1,"1033":1,"1229":1,"1237":1,"1249":1,"1252":1,"1253":1,"1270":1,"1286":1,"1301":1,"1324":3,"1359":1,"1369":1,"1395":1,"1396":6,"1415":2,"1416":2,"1436":1}}],["despiteframeworkevents",{"3":{"1436":1}}],["despite",{"3":{"135":1,"208":1,"1247":1,"1259":1,"1323":3,"1350":1,"1359":1,"1396":1,"1436":3,"1443":1,"1488":1,"1496":2,"1638":1}}],["descent",{"3":{"1436":1}}],["descended",{"3":{"2010":1}}],["descendant",{"3":{"1333":1,"1380":1}}],["descendants",{"3":{"402":3,"1333":1,"1339":4,"1436":1,"1443":3,"2010":1}}],["descend",{"3":{"1309":1}}],["descends",{"3":{"373":1,"1436":1}}],["descending",{"3":{"27":1,"330":1,"549":3,"1228":1,"1229":2,"1240":1,"1247":5,"1270":2,"1286":8,"1309":5,"1311":1,"1324":2,"1350":1,"1359":5,"1396":2,"1402":4,"1415":1,"1436":3,"1532":1,"1640":1,"1988":1}}],["desc",{"3":{"1242":1,"1247":4,"1286":1,"1324":3,"1415":3,"1597":2,"1598":2,"1640":1}}],["descripción",{"3":{"1685":2}}],["descriptive",{"3":{"1175":1,"1214":1,"1280":1,"1286":6,"1320":1,"1359":1,"1369":1,"1402":2,"1417":1,"1630":1,"1639":1,"1764":1,"1782":1,"2041":1,"2100":1,"2106":1}}],["descriptionquality",{"3":{"1369":1}}],["descriptionqualityscore",{"3":{"1350":1,"1359":1,"1369":1}}],["descriptionmaxlength",{"2":{"1344":1,"1353":1},"3":{"1344":1,"1350":9,"1353":1,"1359":10,"1369":2,"1384":1,"1395":2}}],["descriptions",{"3":{"448":2,"677":1,"839":1,"1311":2,"1417":1,"1637":1}}],["description",{"2":{"528":1,"1017":1,"1685":2},"3":{"0":1,"43":1,"57":1,"96":1,"115":1,"244":1,"245":1,"360":3,"425":1,"428":1,"466":1,"512":1,"528":1,"609":1,"626":1,"633":1,"684":1,"790":1,"792":1,"837":1,"839":2,"921":1,"1017":2,"1184":1,"1247":1,"1270":1,"1286":1,"1300":5,"1311":5,"1324":4,"1339":5,"1350":16,"1359":54,"1366":1,"1369":7,"1393":1,"1395":13,"1396":1,"1417":11,"1427":3,"1435":1,"1436":4,"1467":6,"1474":1,"1476":1,"1488":1,"1496":3,"1500":1,"1630":7,"1631":1,"1635":3,"1641":6,"1661":1,"1682":1,"1685":6,"1687":2,"1697":1,"1727":4,"1728":1,"1729":1,"1746":2,"1748":2,"1750":1,"1764":26,"1767":6,"1768":3,"1769":1,"1771":1,"1773":1,"1775":1,"2089":1,"2097":1,"2146":1,"2158":1,"2166":1}}],["descriptors",{"3":{"12":1,"448":1,"583":1,"651":1,"1018":1,"1236":1,"1310":12,"1315":1,"1323":4,"1324":1,"1339":3,"1350":4,"1359":10,"1368":1,"1369":1,"1417":1,"1421":1,"1424":1,"1427":2,"1436":2,"1437":1,"1526":1,"2175":1}}],["descriptor",{"3":{"11":1,"122":2,"448":1,"649":3,"650":1,"1230":1,"1236":1,"1247":1,"1262":1,"1286":9,"1300":2,"1309":3,"1310":26,"1311":2,"1316":1,"1323":8,"1324":11,"1350":7,"1359":45,"1378":1,"1380":1,"1395":6,"1396":8,"1402":8,"1404":1,"1412":1,"1414":2,"1415":8,"1416":2,"1417":1,"1421":2,"1427":4,"1436":4,"1666":1,"1669":1,"1865":1,"2131":1,"2133":1}}],["describable",{"3":{"1417":1}}],["describing",{"3":{"359":1,"360":1,"497":1,"518":1,"534":1,"545":1,"551":1,"638":1,"684":1,"691":1,"944":1,"1100":1,"1229":1,"1237":1,"1247":1,"1277":1,"1283":1,"1286":8,"1300":3,"1309":4,"1310":1,"1311":4,"1323":4,"1324":1,"1339":2,"1350":4,"1359":3,"1380":1,"1395":2,"1396":3,"1402":1,"1415":1,"1417":3,"1427":2,"1436":4,"1462":1,"1631":2,"1949":1,"2048":1,"2142":1,"2146":3}}],["describeprotofile",{"3":{"1436":2}}],["describemember",{"3":{"1436":3}}],["describemismatch",{"3":{"1427":5}}],["describefailure",{"3":{"1395":2,"1427":1}}],["describeseverycorepublicresource",{"3":{"1436":1}}],["describesize",{"3":{"1395":2}}],["describes",{"3":{"0":1,"15":1,"93":1,"135":2,"139":1,"170":1,"171":1,"178":1,"201":1,"252":1,"256":1,"257":1,"258":1,"296":1,"305":1,"325":2,"335":1,"373":1,"375":1,"395":1,"400":1,"422":1,"424":1,"513":1,"522":1,"539":1,"549":1,"572":1,"578":1,"642":1,"714":1,"715":1,"736":1,"769":1,"794":1,"813":1,"833":1,"836":1,"837":1,"839":2,"870":1,"874":1,"876":1,"939":1,"980":1,"999":1,"1006":1,"1018":1,"1021":1,"1050":1,"1085":1,"1119":1,"1176":1,"1178":1,"1229":2,"1237":3,"1247":3,"1259":2,"1270":2,"1271":1,"1273":1,"1286":14,"1300":2,"1309":2,"1310":2,"1311":3,"1323":3,"1324":2,"1339":6,"1350":3,"1359":5,"1395":3,"1396":3,"1402":6,"1415":6,"1431":1,"1436":11,"1458":1,"1467":1,"1474":1,"1476":1,"1477":1,"1481":1,"1488":1,"1496":1,"1526":2,"1591":1,"1639":1,"1652":1,"1692":1,"1727":1,"1839":2,"1844":1,"1896":1,"2024":1,"2043":1,"2051":1,"2055":1,"2101":1,"2232":1}}],["describedevice",{"3":{"1324":3}}],["described",{"3":{"0":1,"20":1,"22":1,"29":1,"66":1,"95":1,"135":1,"138":2,"141":1,"142":1,"161":1,"249":1,"254":1,"258":1,"268":1,"322":1,"336":1,"340":1,"368":1,"423":1,"451":1,"463":2,"474":1,"497":1,"512":1,"534":2,"543":1,"549":1,"562":1,"566":1,"572":1,"607":1,"624":1,"638":1,"764":1,"825":1,"837":2,"864":1,"867":1,"874":1,"881":1,"980":1,"986":1,"1174":1,"1191":1,"1229":1,"1230":1,"1237":2,"1238":1,"1247":2,"1259":2,"1269":1,"1270":9,"1271":2,"1278":1,"1284":1,"1286":10,"1297":1,"1300":3,"1301":1,"1308":1,"1309":3,"1310":1,"1311":5,"1315":1,"1316":1,"1322":1,"1323":4,"1324":8,"1339":4,"1342":1,"1350":3,"1352":2,"1359":18,"1369":6,"1380":8,"1395":13,"1396":8,"1402":2,"1415":3,"1416":3,"1417":2,"1436":13,"1443":1,"1447":1,"1455":2,"1458":1,"1459":1,"1465":1,"1467":6,"1475":1,"1476":1,"1487":1,"1492":1,"1496":3,"1500":1,"1526":1,"1591":1,"1639":1,"1653":1,"1688":1,"1689":1,"1702":1,"1706":1,"1707":1,"1755":1,"1769":1,"1777":1,"1865":1,"1883":1,"2048":1,"2106":1,"2232":1}}],["describe",{"2":{"1266":1},"3":{"0":1,"27":1,"93":1,"130":1,"138":1,"257":1,"279":1,"306":1,"326":1,"360":1,"375":1,"395":1,"421":1,"497":1,"506":1,"552":1,"685":1,"688":1,"751":1,"820":1,"825":1,"861":1,"863":1,"876":1,"912":1,"1089":1,"1091":1,"1123":1,"1230":1,"1237":1,"1244":1,"1247":1,"1259":1,"1260":1,"1266":1,"1270":7,"1274":1,"1275":1,"1277":1,"1285":1,"1286":9,"1300":11,"1301":2,"1309":1,"1311":1,"1339":2,"1359":4,"1380":1,"1395":1,"1396":1,"1415":1,"1417":6,"1426":1,"1427":1,"1436":5,"1489":1,"1571":1,"1601":1,"1639":1,"1697":2,"1701":1,"1723":1,"1729":1,"1815":1,"1868":1,"2176":1,"2182":1}}],["destruction",{"3":{"1416":1,"1810":1}}],["destructive",{"3":{"0":1,"293":1,"565":1,"566":3,"759":1,"907":1,"1237":1,"1286":1,"1300":1,"1324":6,"1415":1,"1436":1,"1455":1,"1526":1,"1561":1,"1570":1,"1590":1,"1591":1,"2064":1}}],["destructured",{"3":{"1324":1}}],["destructures",{"3":{"1300":1,"1359":1,"1395":3}}],["destructuring",{"3":{"1237":1,"1395":1,"2063":1}}],["destroyed",{"3":{"1359":1,"1436":4}}],["destroying",{"3":{"1300":1,"1416":1}}],["destroys",{"3":{"853":1,"1236":1,"1275":1,"1286":1,"1359":1,"1395":1,"1415":1,"1416":1,"1456":1,"2064":1}}],["destroy",{"3":{"790":1,"1259":1,"1300":1,"1323":2,"1467":1,"2166":1}}],["destinationheader",{"3":{"1436":1}}],["destinationtype",{"3":{"1300":1}}],["destinations",{"3":{"420":1,"810":1,"837":1,"838":1,"1144":1,"1339":2,"1395":1,"1417":2,"1436":1}}],["destination",{"3":{"0":7,"57":1,"825":1,"827":9,"829":4,"833":2,"837":2,"838":2,"839":3,"842":1,"1212":1,"1324":4,"1325":1,"1338":3,"1339":15,"1395":1,"1416":1,"1436":5,"1438":3,"1441":1,"1447":6,"1465":1,"1607":1,"1741":1,"1976":1,"2024":1}}],["a641126d",{"3":{"1475":1}}],["a85d00",{"3":{"1324":4}}],["a1b2c3d4",{"3":{"1286":1}}],["a11y",{"0":{"1558":1},"3":{"618":1,"619":1,"1216":1,"1436":7,"1438":1,"1488":1,"1490":1,"1491":1,"1493":1,"1499":1,"1526":2,"1530":1,"1532":1,"1533":1,"1534":1,"1558":1,"1565":1,"1577":2,"1586":1,"1591":1,"1595":2,"1596":1,"1597":1,"1598":1,"1605":1,"1739":1}}],["akka",{"2":{"1150":1},"3":{"1150":1}}],["aot",{"3":{"869":1,"1417":4}}],["awesomeassertions",{"2":{"960":1},"3":{"960":1,"1213":1,"1436":50,"1654":1,"2058":1}}],["awk",{"3":{"564":1,"1455":2}}],["awkwardly",{"3":{"1816":1,"1952":1}}],["awkward",{"3":{"6":1,"506":1,"1270":1,"1395":1,"1396":1,"1436":1,"1491":1,"1641":1,"1844":1,"1955":1,"2194":1}}],["aws",{"3":{"175":1}}],["awayfromzero",{"3":{"1600":1}}],["away",{"3":{"0":1,"24":1,"160":1,"499":1,"501":1,"558":1,"683":1,"691":1,"773":1,"812":1,"863":1,"881":1,"882":1,"897":2,"903":1,"905":1,"907":1,"948":1,"965":1,"1020":1,"1107":1,"1142":1,"1162":1,"1185":1,"1237":3,"1247":1,"1259":1,"1270":2,"1286":2,"1297":1,"1300":1,"1311":2,"1312":1,"1323":3,"1324":14,"1339":1,"1355":1,"1359":9,"1362":1,"1369":3,"1390":1,"1395":5,"1396":13,"1402":2,"1409":1,"1415":2,"1417":6,"1424":1,"1431":1,"1436":21,"1444":1,"1453":1,"1455":1,"1486":1,"1488":2,"1561":1,"1651":1,"1654":1,"1663":1,"1727":1,"1737":1,"1767":1,"1819":1,"1918":1,"1974":1,"1982":1,"1987":1,"2146":1,"2213":1}}],["awardable",{"3":{"1438":1,"1527":1,"1578":1,"1592":1}}],["awardasync",{"3":{"690":1,"1396":3,"1436":3}}],["awardcount",{"3":{"1396":1}}],["awardcall",{"3":{"1199":2,"1207":1}}],["awarded",{"3":{"1396":13,"1415":2,"1438":2,"1631":4,"1639":2}}],["awarder",{"3":{"1350":1,"1396":17,"1436":3,"1487":1}}],["awardermocks",{"3":{"1199":2,"1207":1}}],["awarding",{"3":{"691":1,"1415":1,"1436":1}}],["awards",{"3":{"0":1,"1350":2,"1359":1,"1396":13,"1438":1,"1490":1,"1631":5}}],["award",{"3":{"0":1,"688":1,"690":2,"691":3,"692":5,"693":1,"782":1,"1349":1,"1350":2,"1359":6,"1396":75,"1415":2,"1436":1,"1438":2,"1487":1,"1631":6,"1639":4}}],["awareness",{"3":{"27":1,"698":1,"1309":2,"1311":1,"1416":2,"1417":3,"1554":1,"1577":1,"1635":1,"2104":1,"2189":1}}],["aware",{"3":{"0":8,"86":2,"93":1,"94":1,"100":1,"136":1,"160":1,"164":1,"166":1,"265":1,"709":1,"819":1,"883":1,"920":1,"926":3,"1034":1,"1046":1,"1191":1,"1192":2,"1196":1,"1202":1,"1203":1,"1212":2,"1241":1,"1242":2,"1247":1,"1267":1,"1270":11,"1271":1,"1282":1,"1286":18,"1289":2,"1297":1,"1300":5,"1309":1,"1311":3,"1315":1,"1323":4,"1324":8,"1331":1,"1339":3,"1350":6,"1354":1,"1356":1,"1359":6,"1380":3,"1394":1,"1395":6,"1396":8,"1416":1,"1417":3,"1436":1,"1438":4,"1444":1,"1446":1,"1461":1,"1467":2,"1496":2,"1500":2,"1526":2,"1534":2,"1562":1,"1564":1,"1577":1,"1586":1,"1591":3,"1596":1,"1600":2,"1660":2,"1666":1,"1670":1,"1671":1,"1673":1,"1815":1,"1856":1,"1857":1,"1862":1,"1882":1,"1883":1,"2028":1,"2055":1}}],["awaiter",{"3":{"1324":1}}],["awaited",{"3":{"0":2,"235":1,"383":1,"435":1,"436":1,"854":1,"896":1,"897":1,"901":1,"1067":1,"1229":2,"1247":1,"1259":2,"1270":3,"1286":1,"1310":2,"1311":1,"1323":1,"1324":6,"1372":1,"1380":3,"1383":1,"1395":8,"1396":2,"1402":2,"1415":1,"1417":3,"1430":2,"1436":1,"1449":1,"1770":1,"1947":1,"2056":2}}],["awaitable",{"3":{"135":2,"1417":1,"1436":4}}],["awaiting",{"3":{"24":1,"514":1,"707":1,"809":1,"898":1,"1220":1,"1229":2,"1270":1,"1286":3,"1300":2,"1301":3,"1311":1,"1323":2,"1324":6,"1334":1,"1395":1,"1396":3,"1402":3,"1416":1,"1417":4,"1425":1,"1436":2,"1805":1,"1946":1}}],["await",{"2":{"488":1,"494":1,"495":1,"1954":1},"3":{"0":3,"109":1,"481":1,"483":1,"484":1,"486":4,"487":1,"488":1,"489":2,"490":4,"491":5,"492":5,"493":6,"494":6,"495":3,"519":1,"743":1,"996":2,"1101":1,"1212":1,"1220":1,"1229":4,"1247":3,"1259":5,"1263":1,"1270":5,"1274":1,"1286":1,"1300":3,"1301":1,"1309":2,"1311":10,"1312":1,"1323":5,"1324":21,"1328":1,"1339":3,"1359":15,"1369":1,"1380":2,"1383":1,"1395":29,"1396":13,"1400":1,"1402":4,"1415":7,"1417":5,"1425":1,"1427":1,"1436":17,"1438":1,"1805":1,"1946":1,"1954":1,"2134":1,"2177":1,"2232":2}}],["awaits",{"3":{"0":1,"109":1,"230":1,"295":1,"481":1,"482":1,"486":1,"490":1,"491":2,"492":2,"493":1,"494":1,"522":3,"523":4,"524":2,"897":1,"926":1,"988":1,"1100":2,"1212":2,"1220":1,"1229":2,"1246":1,"1247":2,"1259":6,"1263":1,"1270":9,"1286":2,"1300":5,"1301":1,"1309":11,"1310":2,"1311":6,"1323":3,"1324":14,"1339":2,"1359":6,"1369":1,"1378":1,"1380":4,"1391":1,"1395":24,"1396":10,"1399":1,"1402":3,"1415":5,"1416":2,"1417":10,"1427":1,"1436":6,"1805":1,"1836":1,"1919":1,"1946":1,"2056":1}}],["afraid",{"3":{"1853":1}}],["afford",{"3":{"1058":1,"1300":1,"1323":1,"1324":1,"1455":1,"1950":2}}],["affordances",{"3":{"1324":4,"1369":1,"1395":3,"1415":1,"1417":6,"1436":2,"1559":1,"1761":2,"2126":1}}],["affordance",{"3":{"109":1,"413":1,"439":1,"440":1,"681":1,"682":1,"685":1,"1286":1,"1300":1,"1323":1,"1324":9,"1350":1,"1359":2,"1369":1,"1375":1,"1380":3,"1384":1,"1391":1,"1392":1,"1395":14,"1402":2,"1415":1,"1416":1,"1417":32,"1436":6,"1438":1,"1577":1,"1714":1,"1742":1,"1765":1,"1898":1,"1904":1,"2118":1,"2126":1}}],["affordable",{"3":{"0":1,"365":1,"608":1,"627":1,"1286":1,"1311":1,"1359":1,"1396":2,"1436":1}}],["affecting",{"3":{"1455":1,"1481":1,"1531":1,"1534":1}}],["affects",{"3":{"905":2,"1267":1,"1270":1,"1286":3,"1300":1,"1311":1,"1339":2,"1350":1,"1427":1,"1675":1,"1872":1}}],["affect",{"3":{"682":1,"1264":1,"1359":1,"1395":1,"1415":1,"1417":1,"1455":1,"1476":1}}],["affected",{"3":{"185":1,"387":1,"448":1,"990":1,"1021":1,"1249":1,"1259":1,"1270":1,"1286":5,"1324":1,"1339":1,"1395":1,"1401":1,"1402":6,"1436":1,"1496":3,"1631":1,"1638":1,"1735":1,"2195":1}}],["affinity",{"3":{"664":3,"996":1,"1339":1,"1467":2}}],["afternoon",{"3":{"1973":1,"2049":1,"2067":1,"2171":1}}],["aftersimulateddataloss",{"3":{"1707":1}}],["afterthought",{"3":{"528":1,"1090":1,"1324":1,"1359":1,"1396":1,"1415":1,"1417":1,"1937":1,"2141":1,"2160":1}}],["aftercommit",{"2":{"465":1,"466":1},"3":{"459":2,"465":1,"466":2,"1323":6,"1415":1}}],["afterward",{"3":{"159":1,"1259":1,"1286":1,"1323":2,"1359":1,"1402":1,"1966":1}}],["afterwards",{"3":{"0":1,"24":1,"25":1,"122":1,"198":1,"216":1,"360":1,"538":1,"549":1,"689":1,"702":2,"765":1,"954":1,"988":1,"1237":3,"1243":1,"1259":2,"1270":3,"1275":1,"1286":7,"1290":1,"1300":4,"1309":1,"1311":2,"1316":1,"1323":6,"1324":9,"1339":1,"1346":1,"1350":2,"1359":6,"1369":1,"1380":1,"1392":1,"1395":7,"1396":5,"1402":3,"1417":2,"1429":1,"1436":6,"1463":1,"1478":1,"1488":1,"1662":1,"1686":1,"1689":1,"1727":2,"1824":1,"1840":1,"2142":1,"2163":1,"2167":1,"2198":1}}],["after",{"0":{"1610":1,"1744":1,"2119":1},"2":{"1704":1},"3":{"0":22,"16":1,"17":3,"18":2,"20":2,"21":2,"24":1,"25":1,"27":2,"33":1,"68":1,"78":1,"99":1,"112":1,"115":1,"117":1,"119":1,"120":2,"122":1,"124":1,"135":2,"145":1,"157":1,"159":1,"160":1,"175":1,"182":2,"186":2,"188":1,"194":1,"195":2,"196":2,"197":1,"199":1,"201":6,"202":2,"220":1,"225":1,"229":1,"235":1,"248":1,"255":1,"258":1,"265":2,"273":2,"279":2,"284":1,"295":2,"330":1,"341":2,"355":1,"365":1,"371":1,"374":1,"382":1,"383":2,"384":1,"388":1,"391":1,"392":1,"412":1,"413":2,"418":1,"424":1,"433":1,"434":2,"442":1,"444":1,"451":1,"452":2,"459":4,"463":2,"464":2,"465":1,"468":2,"494":1,"499":2,"507":1,"514":1,"517":1,"518":2,"522":1,"524":1,"528":1,"530":1,"536":3,"537":2,"538":2,"539":3,"541":1,"543":1,"547":1,"549":1,"550":2,"556":1,"558":1,"565":1,"566":1,"572":1,"583":1,"584":1,"587":1,"590":1,"595":1,"609":2,"612":1,"624":1,"626":2,"628":1,"638":2,"639":1,"640":1,"649":1,"665":2,"672":2,"674":1,"675":1,"681":1,"682":1,"686":1,"692":1,"693":1,"696":1,"698":2,"703":1,"707":2,"714":1,"715":1,"716":1,"741":3,"748":1,"749":5,"751":2,"753":2,"756":1,"757":3,"758":1,"767":1,"774":1,"781":1,"782":1,"785":1,"791":1,"793":1,"794":1,"812":1,"813":1,"818":1,"821":1,"827":1,"828":1,"844":1,"846":1,"849":1,"857":2,"860":1,"861":2,"865":1,"874":1,"881":3,"889":1,"891":1,"897":2,"900":1,"904":2,"908":2,"909":1,"916":1,"922":1,"924":1,"953":1,"954":2,"956":1,"960":1,"966":1,"988":8,"989":1,"990":1,"991":2,"998":2,"1006":1,"1018":1,"1028":1,"1029":1,"1034":1,"1041":1,"1042":1,"1044":2,"1050":1,"1051":1,"1052":1,"1059":1,"1069":1,"1083":1,"1086":1,"1091":1,"1093":1,"1100":1,"1116":4,"1118":1,"1124":2,"1125":1,"1129":1,"1133":1,"1134":1,"1140":1,"1184":1,"1185":1,"1186":1,"1187":1,"1188":4,"1191":1,"1195":1,"1200":1,"1212":4,"1215":1,"1228":1,"1229":8,"1232":1,"1233":2,"1237":9,"1239":1,"1241":2,"1244":1,"1247":16,"1249":1,"1251":1,"1252":2,"1254":4,"1258":2,"1259":39,"1262":2,"1263":3,"1264":2,"1265":1,"1269":3,"1270":31,"1271":3,"1274":2,"1275":1,"1278":2,"1279":1,"1281":3,"1284":1,"1286":76,"1288":1,"1289":1,"1292":1,"1293":2,"1294":1,"1297":1,"1298":1,"1300":51,"1301":8,"1308":1,"1309":16,"1310":5,"1311":39,"1312":3,"1315":2,"1316":2,"1317":1,"1318":1,"1320":1,"1323":57,"1324":98,"1332":1,"1334":1,"1335":1,"1338":1,"1339":31,"1342":1,"1343":1,"1347":1,"1350":21,"1352":1,"1354":1,"1355":2,"1357":1,"1358":1,"1359":122,"1364":3,"1369":11,"1375":1,"1378":1,"1379":1,"1380":17,"1392":1,"1395":46,"1396":36,"1399":3,"1402":27,"1405":1,"1406":3,"1407":1,"1408":1,"1410":1,"1413":1,"1415":40,"1416":18,"1417":41,"1422":1,"1423":1,"1425":3,"1427":5,"1429":1,"1430":1,"1432":2,"1433":1,"1436":60,"1438":11,"1441":2,"1445":2,"1447":1,"1451":1,"1454":3,"1455":10,"1456":2,"1457":3,"1460":1,"1465":3,"1466":1,"1467":10,"1472":1,"1473":1,"1474":2,"1475":2,"1478":2,"1480":1,"1481":1,"1482":1,"1486":1,"1488":8,"1489":1,"1490":2,"1491":1,"1492":3,"1496":15,"1508":2,"1526":1,"1534":1,"1547":1,"1554":1,"1558":1,"1566":1,"1568":2,"1572":1,"1630":2,"1631":7,"1632":2,"1634":1,"1635":4,"1637":1,"1638":2,"1639":11,"1641":4,"1643":1,"1644":1,"1648":1,"1651":6,"1654":1,"1655":1,"1657":1,"1662":1,"1665":4,"1667":2,"1668":1,"1673":1,"1675":1,"1677":1,"1679":1,"1685":3,"1686":2,"1690":4,"1692":1,"1701":1,"1702":1,"1704":1,"1705":1,"1707":2,"1710":1,"1716":1,"1727":5,"1729":1,"1730":1,"1749":1,"1750":1,"1755":1,"1765":2,"1767":6,"1769":1,"1773":1,"1806":1,"1814":1,"1818":1,"1819":2,"1821":1,"1822":1,"1824":1,"1826":1,"1827":1,"1839":3,"1840":3,"1841":1,"1843":2,"1845":1,"1846":1,"1851":2,"1852":1,"1866":1,"1871":1,"1873":1,"1874":1,"1881":1,"1883":1,"1886":1,"1889":2,"1892":1,"1900":1,"1903":1,"1909":3,"1911":2,"1912":1,"1918":2,"1923":1,"1924":1,"1933":1,"1936":1,"1944":2,"1945":2,"1946":1,"1948":2,"1949":1,"1950":1,"1962":1,"1964":1,"1966":1,"1968":2,"1982":2,"1998":1,"2000":3,"2001":1,"2012":1,"2019":3,"2038":1,"2051":2,"2058":1,"2063":1,"2065":1,"2066":2,"2072":2,"2073":1,"2078":1,"2085":1,"2086":1,"2087":1,"2090":1,"2094":1,"2095":2,"2098":1,"2113":1,"2119":2,"2121":1,"2123":2,"2128":1,"2131":1,"2143":1,"2161":1,"2163":4,"2164":1,"2166":1,"2168":2,"2169":3,"2174":1,"2177":1,"2179":1,"2181":1,"2185":1,"2189":1,"2191":1,"2192":2,"2193":1,"2196":1,"2199":2,"2200":2,"2203":1,"2232":1}}],["avg",{"3":{"1467":1,"1764":1,"1767":1}}],["averse",{"3":{"1237":1}}],["averaged",{"3":{"1350":1,"1467":1}}],["averagerating",{"3":{"1350":1,"1359":1,"1764":1}}],["averages",{"3":{"875":1,"1350":2,"1395":1}}],["average",{"3":{"608":1,"609":1,"1324":1,"1350":3,"1359":1,"1395":2,"1455":1,"1467":4,"1474":2,"1492":1,"1764":1,"1765":2,"2158":1}}],["averaging",{"3":{"608":1,"609":1,"1467":1,"2158":2}}],["av0030",{"3":{"454":1,"1311":1}}],["av0024",{"3":{"448":1,"1311":1,"2131":1}}],["av0011",{"3":{"448":1,"1311":1,"2131":1}}],["avoidance",{"0":{"1328":1},"3":{"1310":1,"1359":2,"1396":2,"1635":1}}],["avoidable",{"3":{"1247":1,"1300":1,"1323":2,"1324":4,"1359":2,"1395":2,"1417":1}}],["avoiding",{"3":{"1041":1,"1309":1,"1311":2,"1339":1,"1359":3,"1395":1,"1396":1,"1402":1,"1417":1,"1436":1,"1441":1,"1447":1,"1453":1,"1630":1,"2183":1}}],["avoids",{"3":{"182":1,"209":1,"226":1,"266":1,"360":1,"508":1,"529":1,"547":1,"666":1,"741":1,"935":1,"1069":1,"1212":1,"1220":1,"1237":5,"1247":1,"1252":1,"1259":3,"1270":7,"1286":4,"1300":4,"1301":2,"1309":1,"1311":4,"1323":1,"1324":8,"1329":1,"1339":5,"1350":5,"1359":15,"1369":1,"1395":6,"1396":3,"1402":6,"1415":3,"1416":1,"1417":7,"1427":1,"1436":5,"1443":2,"1450":1,"1454":1,"1488":1,"1490":1,"1492":1,"1526":2,"1639":2,"1677":1,"1684":1,"1805":1,"2009":1}}],["avoid",{"3":{"3":1,"11":1,"55":1,"151":1,"272":1,"381":1,"415":1,"458":1,"460":1,"549":1,"556":1,"558":1,"559":1,"592":1,"792":1,"848":1,"924":1,"1005":1,"1229":1,"1244":1,"1247":3,"1248":1,"1270":2,"1286":9,"1300":8,"1307":1,"1309":1,"1311":1,"1323":1,"1324":2,"1339":1,"1350":1,"1359":2,"1380":1,"1396":3,"1402":6,"1415":1,"1416":1,"1417":1,"1427":1,"1456":1,"1467":1,"1476":1,"1526":1,"1556":1,"1560":1,"1565":1,"1611":1,"1639":2,"1640":1,"1761":1,"1792":1,"1864":1,"1954":1,"1958":1,"1959":1,"1981":1,"1989":1,"2013":1,"2035":1,"2050":1}}],["avoided",{"3":{"0":1,"472":1,"549":1,"691":1,"800":2,"941":1,"1237":2,"1270":1,"1286":1,"1324":3,"1359":1,"1369":1,"1395":1,"1396":2,"1402":1,"1416":1,"1417":1,"1815":1}}],["avaluethatisnotafixedpluralsentence",{"3":{"1436":2}}],["avatarblobname",{"3":{"1415":1}}],["avatarurl",{"2":{"2063":1},"3":{"1237":2,"1415":15,"1631":1,"2063":1}}],["avatar",{"2":{"1411":1},"3":{"0":3,"403":1,"438":3,"439":1,"440":3,"441":2,"443":2,"444":3,"459":1,"465":1,"466":2,"599":1,"665":1,"666":1,"725":1,"926":3,"1114":1,"1115":2,"1118":1,"1120":1,"1192":1,"1265":1,"1270":3,"1286":7,"1323":6,"1395":2,"1403":1,"1405":1,"1406":1,"1410":1,"1411":4,"1414":2,"1415":76,"1417":10,"1436":2,"1438":1,"1467":7,"1472":1,"1474":1,"1481":3,"1491":1,"1496":2,"1631":4,"1640":4,"1748":1,"2063":1,"2116":1,"2124":2,"2125":1,"2126":7,"2127":5,"2128":2}}],["avatarsize",{"3":{"1415":2}}],["avatars",{"0":{"1411":1},"1":{"437":1,"438":1,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1},"3":{"0":2,"437":1,"440":2,"441":1,"443":3,"598":1,"665":1,"1116":2,"1118":1,"1212":1,"1286":2,"1318":1,"1395":2,"1415":2,"1417":3,"1467":7,"1496":2,"1631":2,"1636":1,"1640":1,"1765":1,"2126":4,"2127":2,"2128":1,"2232":2}}],["availability",{"3":{"0":3,"92":1,"236":2,"237":1,"283":1,"353":1,"402":1,"461":1,"530":1,"607":1,"609":6,"611":2,"681":1,"768":1,"793":1,"798":1,"914":1,"1187":1,"1300":2,"1324":5,"1332":1,"1334":1,"1339":6,"1395":1,"1402":1,"1416":2,"1417":5,"1436":1,"1443":1,"1447":2,"1455":1,"1467":13,"1469":1,"1474":2,"1476":1,"1630":1,"1639":1,"1672":1,"1677":1,"1707":1,"1708":1,"1709":1,"1776":1,"1911":1,"2001":1,"2010":1,"2067":1,"2122":1,"2158":1}}],["availabledestinationspolicy",{"3":{"1339":1}}],["available=false",{"3":{"1323":1}}],["availablequantity",{"2":{"1591":1,"1749":1},"3":{"1286":1,"1591":1,"1749":1,"1764":2}}],["available",{"2":{"727":1,"1299":1,"2067":1},"3":{"0":4,"7":1,"62":1,"111":1,"137":1,"159":1,"265":2,"280":1,"300":3,"303":1,"306":2,"361":1,"506":1,"527":1,"528":2,"537":1,"549":1,"556":1,"681":1,"691":1,"706":1,"725":3,"727":1,"741":1,"800":1,"818":1,"827":1,"840":2,"853":1,"914":1,"972":1,"1074":1,"1116":1,"1187":1,"1212":1,"1229":3,"1237":1,"1271":1,"1286":10,"1299":1,"1300":11,"1301":5,"1309":3,"1311":6,"1316":1,"1322":1,"1323":7,"1324":15,"1327":1,"1339":3,"1350":2,"1359":4,"1369":3,"1380":1,"1392":1,"1395":5,"1396":10,"1410":1,"1415":5,"1417":15,"1427":1,"1436":5,"1440":1,"1441":1,"1456":1,"1459":1,"1467":1,"1474":1,"1480":1,"1486":1,"1488":1,"1490":1,"1570":1,"1575":1,"1577":2,"1626":1,"1630":4,"1631":4,"1632":1,"1639":3,"1640":1,"1662":1,"1764":1,"1765":1,"1767":2,"1769":4,"1776":2,"1799":1,"1854":1,"1905":1,"1912":1,"1916":1,"2067":1,"2137":1,"2143":1,"2234":1}}],["azd",{"0":{"1464":1},"3":{"1464":8}}],["az",{"3":{"0":2,"563":1,"757":2,"759":1,"764":1,"766":3,"767":1,"768":2,"1116":1,"1119":1,"1212":1,"1441":1,"1445":1,"1455":2,"1465":2,"1467":5,"1470":1,"1472":5,"1473":1,"1474":7,"1475":6,"1476":1,"1478":5,"1481":2,"1482":1,"1484":2,"1577":2,"1582":1,"1583":1,"2034":3,"2036":1,"2224":4}}],["azurite",{"3":{"0":1,"440":1,"1323":3,"2126":1}}],["azuremessaging",{"3":{"1585":1}}],["azuremonitor",{"2":{"914":1},"3":{"914":1,"1438":1,"1443":1,"1446":1,"1467":3}}],["azureadtokenexchange",{"3":{"1472":1}}],["azureadonlyauthentication",{"2":{"599":1,"1477":1,"1534":1},"3":{"0":1,"599":1,"1467":1,"1477":1,"1526":2,"1534":1}}],["azurecontainerapps",{"3":{"1436":2}}],["azurecosmosdbdatabaseresource",{"2":{"1441":1},"3":{"1339":1,"1441":1}}],["azureclientidenv",{"2":{"603":1},"3":{"603":1}}],["azurekeyvaultconfigurationoptions",{"3":{"1339":2}}],["azurenotificationhubnativepushsender",{"2":{"1313":1,"1320":1,"1932":1,"1936":1},"3":{"1199":2,"1203":1,"1207":2,"1286":1,"1313":1,"1320":1,"1323":10,"1496":2,"1932":1,"1936":1}}],["azurenotificationhubdeviceregistrartests",{"3":{"1199":1,"1207":2,"1323":1,"1438":1}}],["azurenotificationhubdeviceregistrar",{"2":{"1313":1,"1320":1,"1932":1,"1936":1},"3":{"435":1,"1199":3,"1203":1,"1207":2,"1286":1,"1313":1,"1320":1,"1323":17,"1438":1,"1932":1,"1936":1}}],["azureservicebus",{"2":{"1842":1},"3":{"640":1,"1320":1,"1323":1,"1446":1,"1467":2,"1842":1}}],["azureservicebustransport",{"2":{"150":1},"3":{"150":1}}],["azureblobfilestorageservice",{"2":{"443":1,"1119":1,"1313":1,"1320":1,"2126":1},"3":{"443":2,"1116":2,"1119":2,"1199":2,"1203":1,"1207":2,"1286":2,"1313":1,"1320":1,"1323":13,"1496":1,"2126":2}}],["azure",{"0":{"1464":1,"1472":2},"1":{"1462":1,"1463":1,"1464":1,"1465":1,"1466":1,"1467":1,"1468":1,"1469":1,"1470":1,"2154":1,"2155":1,"2156":1,"2157":1,"2158":1,"2159":1,"2160":1},"2":{"145":1,"147":1,"149":1,"150":1,"152":1,"599":1,"601":1,"603":1,"665":1,"667":1,"669":1,"766":1,"810":1,"1074":1,"1075":2,"1077":1,"1078":1,"1339":2,"1462":1,"1463":1,"1464":1,"1468":3,"1470":2,"1472":2,"1475":1,"1477":1,"2178":1},"3":{"0":15,"31":1,"47":1,"59":1,"61":1,"62":1,"91":1,"97":1,"98":1,"145":4,"147":2,"149":1,"150":3,"152":1,"159":1,"175":1,"201":1,"234":2,"245":1,"259":1,"291":1,"359":1,"390":1,"395":1,"397":2,"401":1,"402":1,"422":1,"434":2,"439":1,"440":1,"517":1,"599":4,"601":1,"603":1,"609":1,"611":2,"624":1,"625":1,"626":2,"627":1,"638":1,"639":1,"640":5,"641":2,"642":1,"665":9,"666":2,"667":2,"669":1,"756":2,"757":1,"765":1,"766":2,"768":2,"790":1,"810":2,"818":1,"819":1,"821":1,"823":1,"826":1,"827":1,"838":1,"868":1,"913":1,"914":1,"972":3,"973":1,"974":2,"975":1,"976":1,"1020":1,"1033":1,"1043":1,"1068":1,"1074":1,"1075":4,"1077":1,"1078":1,"1091":1,"1101":1,"1192":1,"1202":1,"1203":1,"1211":1,"1212":6,"1213":5,"1257":1,"1259":3,"1285":1,"1286":5,"1302":1,"1309":1,"1311":4,"1313":1,"1318":1,"1320":1,"1323":33,"1325":1,"1327":1,"1332":1,"1333":4,"1335":4,"1336":1,"1339":48,"1359":1,"1369":1,"1379":1,"1415":1,"1436":13,"1437":1,"1438":4,"1440":1,"1441":4,"1442":8,"1443":7,"1444":2,"1446":8,"1447":2,"1450":2,"1451":1,"1455":20,"1457":3,"1458":2,"1460":6,"1461":1,"1462":4,"1463":3,"1464":10,"1465":5,"1467":38,"1468":3,"1470":3,"1471":2,"1472":29,"1473":3,"1474":6,"1475":12,"1476":2,"1477":1,"1482":1,"1483":3,"1484":3,"1487":1,"1488":1,"1489":2,"1490":1,"1496":1,"1526":2,"1534":1,"1570":1,"1575":1,"1577":3,"1582":1,"1585":1,"1589":1,"1591":1,"1596":1,"1597":1,"1663":2,"1665":1,"1668":2,"1669":1,"1670":3,"1673":1,"1677":1,"1679":1,"1707":2,"1721":1,"1752":1,"1779":1,"1785":1,"1790":1,"1792":1,"1842":2,"1843":1,"1936":2,"1970":2,"2006":1,"2008":2,"2010":3,"2011":1,"2013":2,"2014":1,"2020":1,"2025":2,"2033":1,"2034":1,"2109":1,"2110":1,"2113":1,"2123":1,"2124":1,"2126":1,"2128":1,"2142":1,"2153":2,"2154":3,"2156":2,"2157":1,"2158":3,"2160":3,"2169":1,"2178":1,"2209":1,"2212":1,"2213":2,"2214":1,"2215":1,"2217":1,"2218":1,"2219":2,"2220":4,"2221":2,"2224":6,"2228":1,"2229":1,"2232":5,"2239":1,"2240":1,"2241":2,"2243":1,"2244":1}}],["a+aa",{"3":{"0":1}}],["aab",{"3":{"1481":1}}],["aad",{"2":{"1470":2,"1477":2},"3":{"1455":2,"1470":2,"1472":1,"1477":6,"1591":1}}],["aadsts700213",{"3":{"1455":1,"1467":1}}],["aasa",{"3":{"1212":1,"1481":1}}],["aa8297fb",{"3":{"1174":1}}],["aaaaaaaab9e=",{"3":{"1300":1,"1395":1}}],["aaa",{"3":{"620":1,"1714":1}}],["aa",{"0":{"1643":1},"1":{"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1},"3":{"0":1,"615":1,"617":1,"618":3,"619":1,"651":1,"865":1,"906":1,"953":1,"1212":1,"1213":1,"1324":7,"1396":1,"1414":1,"1433":2,"1436":4,"1438":2,"1461":1,"1487":1,"1488":4,"1490":1,"1494":1,"1526":1,"1531":1,"1535":1,"1558":2,"1577":8,"1591":2,"1596":1,"1605":1,"1642":1,"1644":1,"1645":1,"1669":1,"1671":1,"1674":1,"1714":1,"1716":1,"1739":1,"2055":1,"2057":4,"2060":1,"2075":1,"2079":2,"2213":1,"2221":1,"2232":1}}],["aieval",{"3":{"1492":1}}],["aiapikey",{"3":{"1455":1,"1466":1,"1467":3,"1470":1}}],["aitool",{"3":{"1427":5}}],["aitelemetryexporttests",{"3":{"1199":1,"1207":2,"1435":3}}],["aitelemetryname",{"2":{"408":1},"3":{"408":1,"1333":1,"1339":4}}],["aireadydotnet",{"3":{"1395":1}}],["airtight",{"3":{"1221":1,"1292":1,"1359":1}}],["aijsonutilities",{"2":{"1091":1,"1427":1},"3":{"1091":1,"1427":2}}],["aiproviderselectiontests",{"3":{"1199":1,"1207":3,"1427":1,"1487":1}}],["aiprovider",{"3":{"1089":1,"1094":1,"1427":1,"1496":2}}],["aiprovidervalidator",{"2":{"676":1},"3":{"676":2,"677":1,"1091":4,"1093":1,"1199":2,"1203":1,"1207":2,"1420":2,"1421":1,"1427":22}}],["aiservicecollectionextensions",{"2":{"1427":1},"3":{"1199":1,"1203":1,"1207":1,"1421":1,"1427":12,"1496":2}}],["aiservicecollectionextensionstests",{"3":{"1199":1,"1207":2,"1427":1,"1487":1}}],["aisettingstests",{"3":{"1199":1,"1207":2,"1487":1}}],["aisettings",{"2":{"1095":1,"1096":1,"1419":1,"2173":1},"3":{"674":1,"676":3,"1091":5,"1095":2,"1096":1,"1199":15,"1203":1,"1207":2,"1419":8,"1420":1,"1427":46,"1496":3,"1526":2,"1577":1,"1585":1,"2173":2}}],["aiscoring",{"3":{"1359":1}}],["aiscoringservice",{"3":{"1350":2,"1359":1}}],["aiscoringtokenceiling",{"2":{"609":1,"1469":1},"3":{"609":1,"1018":1,"1467":3,"1469":1}}],["aiscorelookup",{"3":{"1395":4}}],["aiscores",{"3":{"1350":3,"1395":4}}],["aiscoreresponse",{"3":{"1018":1,"1021":1,"1199":3,"1203":1,"1207":2,"1366":5,"1369":10,"1526":2}}],["aids",{"3":{"1630":1}}],["aidependencyisolationtests",{"3":{"1199":2,"1207":4,"1427":3,"1436":13,"1526":2,"1577":2}}],["aidependencyisolationtestsbase",{"2":{"1091":1,"1096":1,"1435":1,"2178":1,"2180":1},"3":{"0":1,"1091":2,"1096":1,"1199":3,"1207":2,"1339":1,"1431":3,"1435":1,"1436":9,"2178":2,"2180":1}}],["aid",{"3":{"265":1,"1109":1,"1110":1,"1864":1}}],["aiming",{"3":{"1474":1}}],["aimed",{"0":{"2046":1},"3":{"997":1,"1093":1,"1369":2,"1396":1,"1424":1,"1436":1,"1450":1,"1467":1,"2044":1,"2162":1}}],["aim",{"3":{"91":1,"1134":1,"1981":1,"2048":1}}],["aiusagemeter",{"2":{"408":1,"2177":1,"2180":1},"3":{"0":1,"404":1,"408":3,"1089":1,"1091":2,"1199":7,"1203":1,"1207":2,"1418":1,"1425":3,"1427":26,"1442":1,"1496":3,"1526":1,"1577":1,"2177":3,"2180":1}}],["ai",{"0":{"408":1,"1347":1,"1359":1,"1366":1,"1435":1,"1553":1},"1":{"1015":1,"1016":1,"1017":1,"1018":1,"1019":1,"1020":1,"1021":1,"1022":1,"1088":1,"1089":1,"1090":1,"1091":1,"1092":1,"1093":1,"1094":1,"1095":1,"1096":1,"1418":1,"1419":1,"1420":1,"1421":1,"1422":1,"1423":1,"1424":1,"1425":1,"1426":1,"1427":1},"2":{"141":1,"142":3,"395":1,"404":1,"406":1,"408":1,"1012":1,"1016":1,"1017":1,"1020":1,"1089":4,"1090":2,"1091":2,"1093":1,"1211":2,"1213":3,"1366":1,"1418":4,"1425":5,"1427":3,"1503":4,"1527":1,"1578":1,"2006":1,"2172":1,"2177":6,"2178":3,"2180":2},"3":{"0":22,"74":4,"135":1,"141":1,"142":4,"395":3,"404":3,"406":1,"408":5,"517":1,"607":3,"609":8,"624":2,"626":3,"672":1,"674":2,"676":5,"755":1,"756":2,"764":1,"766":1,"980":7,"983":2,"994":1,"995":1,"996":1,"1011":1,"1012":5,"1013":1,"1015":1,"1016":3,"1017":7,"1018":16,"1019":1,"1020":2,"1021":1,"1022":1,"1088":1,"1089":12,"1090":6,"1091":46,"1092":1,"1093":6,"1094":3,"1095":1,"1096":1,"1099":1,"1108":2,"1111":1,"1112":1,"1192":3,"1195":1,"1198":2,"1199":69,"1202":3,"1203":36,"1206":5,"1207":208,"1208":8,"1211":6,"1212":4,"1213":5,"1216":1,"1270":3,"1286":1,"1333":5,"1339":9,"1340":1,"1342":1,"1347":2,"1350":14,"1351":1,"1354":1,"1359":29,"1360":3,"1362":1,"1364":3,"1365":1,"1366":11,"1367":1,"1368":5,"1369":26,"1376":1,"1380":1,"1390":2,"1395":18,"1417":1,"1418":7,"1419":5,"1420":6,"1421":3,"1422":5,"1423":5,"1424":6,"1425":13,"1426":1,"1427":177,"1428":2,"1431":3,"1435":11,"1436":18,"1437":9,"1438":5,"1442":6,"1455":14,"1459":1,"1461":2,"1463":4,"1466":3,"1467":22,"1469":2,"1470":1,"1485":1,"1486":8,"1487":7,"1488":1,"1489":1,"1492":9,"1493":1,"1496":26,"1499":1,"1503":5,"1505":1,"1517":1,"1519":1,"1526":26,"1527":4,"1534":1,"1535":1,"1536":1,"1553":2,"1570":1,"1577":10,"1578":3,"1585":2,"1586":2,"1591":1,"1592":1,"1599":1,"1625":1,"1632":2,"1640":1,"1673":1,"1781":3,"1784":1,"1796":1,"1799":2,"1947":1,"2006":4,"2013":1,"2111":2,"2156":1,"2160":1,"2170":1,"2171":1,"2172":2,"2173":2,"2174":3,"2177":6,"2178":3,"2179":2,"2180":5,"2190":1,"2213":3,"2214":1,"2216":1,"2218":2,"2219":1,"2220":4,"2221":2,"2224":4,"2225":1,"2227":5,"2228":1,"2232":3,"2238":1,"2239":6,"2240":2,"2243":1}}],["aesthetic",{"3":{"839":1}}],["aesgcm",{"2":{"359":1,"360":1,"2142":2},"3":{"359":3,"360":1,"1286":2,"2142":4}}],["aes",{"1":{"356":1,"357":1,"358":1,"359":1,"360":1,"361":1,"362":1,"363":1,"364":1,"365":1,"366":1,"2140":1,"2141":1,"2142":1,"2143":1,"2144":1,"2145":1,"2146":1},"3":{"0":3,"39":1,"356":1,"359":2,"360":1,"361":2,"365":1,"1212":1,"1236":1,"1237":1,"1284":2,"1286":3,"1575":1,"1577":2,"1664":1,"1672":1,"1903":2,"1905":2,"2063":1,"2139":1,"2140":2,"2142":2,"2143":1,"2145":1,"2146":2,"2153":1,"2208":1,"2232":1}}],["axecore",{"2":{"1453":1},"3":{"1213":1,"1436":2,"1488":1}}],["axerunoptions",{"2":{"618":1},"3":{"618":1,"1436":2}}],["axe",{"0":{"1643":1},"3":{"0":2,"617":2,"618":3,"620":3,"1212":1,"1213":1,"1324":1,"1414":1,"1415":1,"1433":2,"1434":3,"1436":14,"1438":5,"1461":1,"1486":1,"1487":1,"1488":5,"1490":1,"1492":2,"1524":1,"1526":6,"1531":3,"1532":1,"1535":2,"1558":1,"1565":1,"1577":11,"1585":1,"1586":1,"1589":2,"1591":3,"1596":5,"1600":2,"1605":2,"1608":1,"1642":1,"1643":2,"1644":1,"1645":2,"1660":1,"1669":1,"1671":1,"1674":1,"1716":1,"1739":2,"1742":1,"2055":1,"2057":4,"2060":1,"2079":2,"2213":1,"2221":1,"2232":1}}],["axeoptions",{"2":{"618":2,"1488":1,"2057":1},"3":{"0":1,"618":5,"620":2,"1199":17,"1207":2,"1212":1,"1428":1,"1433":6,"1436":18,"1488":7,"1493":1,"1577":1,"1591":2,"2057":2}}],["axes",{"0":{"1191":1,"1517":1,"1784":1,"1797":1,"1799":1,"1855":1},"3":{"0":1,"635":1,"697":1,"776":1,"1191":1,"1200":1,"1216":1,"1286":3,"1323":2,"1447":1,"1467":1,"1516":1,"1517":1,"1529":2,"1537":2,"1577":1,"1580":1,"1592":1,"1594":1,"1661":1,"1684":1,"1686":1,"1699":1,"1731":1,"1784":2,"1794":2,"1797":1,"1799":1,"1801":1,"1802":1,"1855":1,"2231":1}}],["axis",{"0":{"1851":1,"2231":1},"3":{"0":5,"45":2,"81":1,"164":2,"165":2,"166":2,"169":2,"317":1,"318":1,"447":3,"455":1,"582":1,"587":1,"633":1,"683":1,"697":1,"701":2,"721":1,"729":1,"743":1,"774":1,"775":1,"924":1,"1034":2,"1038":1,"1079":1,"1087":1,"1191":2,"1192":2,"1200":1,"1219":1,"1229":1,"1286":10,"1300":2,"1310":1,"1323":1,"1324":1,"1339":1,"1396":3,"1427":1,"1436":5,"1452":1,"1489":1,"1505":1,"1523":2,"1526":3,"1529":1,"1537":1,"1568":1,"1574":2,"1575":1,"1577":4,"1578":1,"1580":1,"1584":1,"1588":2,"1591":3,"1592":5,"1594":1,"1683":4,"1684":1,"1687":1,"1701":1,"1727":8,"1728":1,"1729":1,"1731":1,"1784":1,"1798":2,"1802":1,"1805":1,"1851":2,"1853":2,"1855":4,"1860":1,"1902":1,"1903":1,"1991":1,"1992":1,"1993":1,"1995":1,"1996":1,"1997":2,"2062":2,"2069":2,"2089":1,"2114":2,"2130":4,"2132":1,"2133":3,"2232":1}}],["augments",{"3":{"1339":1}}],["augment",{"3":{"1286":1}}],["augmented",{"3":{"1229":1,"2220":1}}],["august",{"3":{"804":1,"1049":1,"1051":1,"1054":1,"1074":1,"1467":1,"1474":1,"2220":1}}],["audible",{"3":{"1259":1}}],["audio",{"3":{"426":1,"1417":1}}],["audiences",{"3":{"227":1,"1309":1,"1348":1,"1380":1,"1395":4,"1396":2,"1402":1,"1935":1}}],["audience",{"2":{"2012":1},"3":{"0":2,"31":1,"86":2,"225":1,"226":1,"227":1,"303":1,"325":1,"378":1,"384":1,"386":4,"388":3,"391":2,"392":1,"434":1,"435":1,"499":2,"674":1,"820":1,"1124":1,"1202":1,"1203":1,"1300":4,"1307":1,"1309":11,"1311":6,"1323":4,"1324":10,"1348":1,"1350":7,"1359":4,"1372":2,"1373":1,"1379":1,"1380":28,"1391":1,"1393":1,"1395":36,"1396":2,"1397":1,"1399":1,"1402":2,"1406":3,"1415":13,"1416":1,"1436":3,"1438":2,"1472":1,"1488":2,"1496":2,"1576":1,"1630":1,"1637":1,"1922":3,"1933":1,"1940":1,"1982":2,"1985":1,"2012":1,"2136":1,"2138":1}}],["auditor",{"3":{"1844":1}}],["audit+coverage",{"3":{"1577":1}}],["audit+sbom+licence",{"3":{"1526":1}}],["auditactionsandgroups",{"3":{"1467":1}}],["auditableaggregaterootentity<",{"3":{"1286":1,"1369":1}}],["auditableaggregaterootentitytests",{"3":{"1199":1,"1207":4,"1237":1}}],["auditableaggregaterootentityadditionaltests",{"2":{"1237":1},"3":{"1199":1,"1207":7,"1237":3}}],["auditableaggregaterootentity",{"2":{"39":1,"43":1,"459":1,"470":1,"725":1,"1168":1,"1230":1,"1231":1,"1251":1,"1340":1,"1342":1,"1398":1,"1403":1,"1651":1,"1662":1,"1810":1,"1812":1,"1838":1,"2090":1,"2091":1,"2111":1},"3":{"0":1,"39":2,"43":2,"459":1,"470":2,"725":1,"1168":4,"1199":114,"1203":1,"1207":2,"1212":1,"1230":1,"1231":9,"1237":24,"1251":1,"1259":1,"1270":8,"1286":12,"1300":5,"1309":3,"1311":4,"1323":12,"1340":1,"1342":1,"1350":21,"1359":6,"1369":1,"1396":6,"1398":1,"1402":5,"1403":1,"1415":2,"1436":23,"1438":1,"1496":3,"1577":2,"1586":1,"1651":1,"1662":1,"1810":1,"1812":1,"1838":1,"2090":2,"2091":1,"2111":1}}],["auditablebaseentity<",{"3":{"1237":1}}],["auditablebaseentitytests",{"3":{"1199":1,"1207":3,"1237":1}}],["auditablebaseentityadditionaltests",{"3":{"1199":1,"1207":3,"1237":1}}],["auditablebaseentity",{"2":{"38":1,"346":1,"458":1,"470":1,"714":1,"1035":1,"1140":1,"1168":1,"1230":1,"1231":1,"1232":1,"1291":1,"1342":1,"1812":1,"1871":1,"1953":1,"2061":1,"2090":1},"3":{"0":1,"38":1,"39":3,"341":2,"346":1,"458":1,"470":2,"536":1,"714":1,"1035":1,"1140":2,"1168":2,"1199":152,"1203":1,"1207":2,"1212":1,"1230":1,"1231":9,"1232":1,"1237":34,"1239":1,"1247":11,"1270":3,"1286":30,"1291":1,"1300":2,"1310":4,"1311":6,"1323":3,"1342":1,"1350":15,"1359":2,"1402":2,"1415":1,"1436":18,"1438":1,"1577":1,"1651":2,"1662":1,"1810":1,"1812":1,"1815":1,"1871":1,"1953":1,"2061":1,"2090":1,"2164":1}}],["auditable",{"3":{"0":2,"41":1,"230":1,"341":4,"343":1,"345":1,"370":1,"470":1,"536":2,"628":1,"675":1,"715":1,"862":1,"1034":1,"1084":1,"1150":1,"1237":4,"1270":4,"1286":4,"1300":1,"1301":1,"1317":1,"1323":1,"1324":1,"1350":2,"1358":1,"1359":5,"1363":1,"1369":1,"1396":4,"1402":1,"1415":1,"1436":7,"1567":1,"1569":1,"1577":1,"1630":1,"1631":1,"1664":1,"1877":1,"1898":1,"2164":2,"2186":1}}],["auditevent",{"3":{"1465":1,"1467":1}}],["auditedthing",{"3":{"1199":4,"1207":1}}],["audited",{"3":{"230":1,"373":1,"441":1,"667":1,"713":1,"715":2,"716":1,"717":2,"1083":1,"1214":1,"1281":1,"1286":5,"1300":1,"1396":1,"1415":2,"1446":1,"1453":1,"1467":2,"1489":2,"1552":1,"1563":1,"1572":1,"1738":1,"1764":1,"1839":1,"1971":1,"2127":1}}],["audittrailtableenabled",{"3":{"1286":1}}],["audittrailtestharness",{"3":{"1199":4,"1207":10}}],["audittrailtestcontext",{"3":{"1198":1,"1199":5,"1207":1}}],["audittrailreadertests",{"3":{"1199":1,"1207":2,"1286":1,"1438":1}}],["audittrailreader",{"2":{"1277":1},"3":{"1199":4,"1203":1,"1207":2,"1269":1,"1270":6,"1277":2,"1286":21,"1317":1,"1323":3,"1438":1}}],["audittrailmodelgatetests",{"3":{"1191":1,"1199":1,"1207":4,"1286":4,"1496":1}}],["audittraildatabases",{"3":{"1436":2}}],["audittraildatabasenames",{"2":{"719":1},"3":{"719":1,"1436":2,"1467":1}}],["audittraildmlauditing",{"2":{"719":1},"3":{"719":1,"1467":1}}],["audittraildiagnostics",{"2":{"719":1},"3":{"719":1,"1467":1}}],["audittrailentrydtotests",{"3":{"1199":1,"1207":2}}],["audittrailentrydto",{"3":{"1199":4,"1203":1,"1207":2,"1270":1,"1286":3,"1317":1,"1323":4}}],["audittrailentry",{"2":{"720":1,"1232":1,"1277":1,"1839":1},"3":{"715":2,"720":1,"905":1,"1199":12,"1203":1,"1207":2,"1232":1,"1237":1,"1270":1,"1273":1,"1277":2,"1286":22,"1290":1,"1300":1,"1311":1,"1323":1,"1496":1,"1839":2}}],["audittrailentries",{"2":{"715":2,"719":1,"720":1,"1273":2,"1277":1,"1446":1,"1469":1},"3":{"0":3,"715":3,"719":3,"720":1,"1212":2,"1273":2,"1277":1,"1286":8,"1436":4,"1446":1,"1467":3,"1469":1}}],["audittrailsavechangesinterceptortests",{"3":{"1199":1,"1207":2,"1237":2,"1286":1,"1438":2}}],["audittrailsavechangesinterceptor",{"2":{"715":1,"1232":1,"1236":1,"1269":1,"1277":1,"1317":1,"1839":1},"3":{"715":2,"720":3,"1198":1,"1199":8,"1203":1,"1207":4,"1232":1,"1236":2,"1237":11,"1269":1,"1277":3,"1286":40,"1317":1,"1323":2,"1496":2,"1577":1,"1839":1}}],["audittrailsettings",{"2":{"721":1,"1272":1,"1277":1},"3":{"674":1,"715":1,"720":1,"721":1,"1199":11,"1203":1,"1207":2,"1237":5,"1272":1,"1277":2,"1286":20,"1317":1,"1320":4,"1323":2,"1577":1}}],["audittrailcleanupjobtests",{"3":{"1199":1,"1207":2,"1286":2,"1438":2}}],["audittrailcleanupjob",{"2":{"720":1,"1277":1},"3":{"707":1,"715":2,"720":1,"1082":1,"1086":1,"1199":4,"1203":1,"1207":2,"1270":3,"1277":2,"1286":32,"1323":2,"1436":3,"1442":3}}],["audittrail",{"2":{"1286":1},"3":{"170":1,"713":1,"715":3,"720":3,"1082":1,"1191":1,"1203":7,"1207":46,"1232":1,"1236":1,"1237":6,"1270":5,"1273":1,"1277":6,"1286":31,"1311":1,"1320":1,"1323":4,"1438":3,"1442":1,"1487":1,"1496":2,"1585":1}}],["audit=all",{"3":{"147":1,"1576":1,"1577":2,"1586":1}}],["auditsources",{"2":{"1649":1},"3":{"1526":1,"1591":1,"1649":1}}],["auditstampfidelitytests",{"3":{"1199":1,"1207":2}}],["audits",{"3":{"130":1,"139":1,"1459":1,"1467":1,"1531":1}}],["auditsavechangesinterceptortests",{"3":{"1199":1,"1207":6,"1286":2,"1436":1}}],["auditsavechangesinterceptor",{"2":{"39":1,"43":1,"343":1,"714":1,"715":1,"1201":1,"1231":1,"1274":1},"3":{"39":3,"43":1,"343":2,"345":1,"714":1,"715":2,"1082":1,"1086":1,"1175":1,"1198":1,"1199":55,"1201":1,"1203":1,"1207":2,"1231":4,"1237":5,"1274":2,"1286":14,"1323":1,"1436":3,"1498":1,"1577":1,"1810":1}}],["auditingsettings",{"3":{"1436":1,"1467":1}}],["auditing",{"3":{"0":3,"395":1,"403":1,"642":1,"713":2,"714":1,"718":2,"719":3,"720":1,"1203":1,"1207":4,"1286":1,"1323":2,"1350":1,"1359":1,"1396":1,"1436":2,"1467":6,"1469":1,"1496":1,"1569":1,"1591":1,"1978":1}}],["audit",{"0":{"1277":1,"1459":1,"1501":1},"1":{"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1,"712":1,"713":1,"714":1,"715":1,"716":1,"717":1,"718":1,"719":1,"720":1,"721":1,"1495":1,"1496":1,"1497":1,"1498":1,"1499":1,"1500":1,"1501":1},"3":{"0":8,"26":1,"38":1,"39":4,"40":3,"137":1,"139":1,"140":1,"159":1,"166":1,"170":1,"188":1,"195":1,"197":1,"200":1,"225":2,"230":1,"245":2,"249":1,"265":1,"283":1,"302":1,"304":1,"318":2,"320":1,"322":1,"336":1,"337":1,"341":2,"346":1,"352":1,"361":1,"367":1,"368":1,"369":1,"370":4,"371":5,"372":4,"373":1,"374":3,"375":3,"390":1,"403":1,"423":1,"424":1,"425":1,"426":1,"428":1,"430":1,"434":1,"450":1,"458":1,"461":1,"470":1,"486":1,"530":2,"531":2,"532":1,"545":1,"573":1,"574":1,"590":1,"591":1,"600":1,"601":1,"611":1,"625":1,"667":1,"692":1,"696":1,"698":2,"711":1,"712":1,"715":3,"716":4,"717":1,"718":1,"719":1,"727":1,"737":1,"782":1,"785":1,"820":1,"825":1,"829":1,"874":1,"905":1,"1006":1,"1033":1,"1034":3,"1041":1,"1082":2,"1083":1,"1085":2,"1086":1,"1140":2,"1141":1,"1142":1,"1145":2,"1163":1,"1168":2,"1174":1,"1192":3,"1194":1,"1201":3,"1202":1,"1203":1,"1212":9,"1213":1,"1216":1,"1230":2,"1231":3,"1236":2,"1237":22,"1239":2,"1241":1,"1247":6,"1253":2,"1259":6,"1270":2,"1272":1,"1273":2,"1274":2,"1275":3,"1276":1,"1278":1,"1280":1,"1281":1,"1284":1,"1286":61,"1290":1,"1300":13,"1303":1,"1304":4,"1306":1,"1309":11,"1311":4,"1322":1,"1323":12,"1342":2,"1350":9,"1359":11,"1361":1,"1363":1,"1369":4,"1379":1,"1380":3,"1395":1,"1396":21,"1402":2,"1405":1,"1410":2,"1412":1,"1415":15,"1423":1,"1427":1,"1433":1,"1436":28,"1438":5,"1446":2,"1452":1,"1453":7,"1454":3,"1455":2,"1459":20,"1460":2,"1461":4,"1465":6,"1467":10,"1495":2,"1496":13,"1512":1,"1525":1,"1526":13,"1531":5,"1532":1,"1534":1,"1535":2,"1545":2,"1548":2,"1554":1,"1567":2,"1569":2,"1577":11,"1582":2,"1585":3,"1586":2,"1591":14,"1596":3,"1597":1,"1600":4,"1634":1,"1641":1,"1649":1,"1651":2,"1653":1,"1657":1,"1660":1,"1662":1,"1664":3,"1672":4,"1673":1,"1675":1,"1677":1,"1685":1,"1686":1,"1698":1,"1704":1,"1717":1,"1719":1,"1720":2,"1748":1,"1749":1,"1780":1,"1794":1,"1810":2,"1812":1,"1815":2,"1838":1,"1839":4,"1844":2,"1851":1,"1923":1,"1933":7,"1934":1,"1935":1,"1940":2,"1941":1,"1964":1,"1995":1,"1996":1,"2012":1,"2049":1,"2052":1,"2061":2,"2063":3,"2068":2,"2069":4,"2090":1,"2091":1,"2132":1,"2138":1,"2140":1,"2145":2,"2183":1,"2186":1,"2221":1,"2227":1,"2230":3,"2232":2}}],["autonomously",{"3":{"1632":1}}],["autonomous",{"3":{"1632":1}}],["autonomy",{"3":{"46":1,"48":1,"1436":1,"1467":3,"1852":1}}],["autorotate",{"3":{"1417":1}}],["autoreplenishment",{"3":{"1339":2}}],["autoawesome",{"3":{"1395":1}}],["autoinclude",{"3":{"1359":1}}],["autoincrement",{"3":{"1323":1}}],["autoincrementing",{"3":{"1323":1}}],["autoorient",{"3":{"1323":1}}],["autodeleteonidle",{"3":{"1323":1,"1436":1}}],["autodetectchangesenabled",{"3":{"1286":2}}],["autocompletes",{"3":{"1324":2}}],["autocomplete",{"3":{"1311":2,"1395":1,"1640":1}}],["autocrlf",{"2":{"1426":1,"2176":1},"3":{"1091":1,"1426":1,"1427":1,"2176":1}}],["automitigate",{"3":{"609":2,"1018":1,"1467":4}}],["automatable",{"3":{"1436":1,"1657":1,"1704":1}}],["automates",{"3":{"1577":1,"1846":1}}],["automate",{"3":{"758":1,"762":1,"1481":1,"1530":1,"1531":1,"1532":1,"1576":1}}],["automated",{"0":{"1608":1,"1643":1,"1742":1},"3":{"132":1,"282":1,"293":1,"361":1,"372":1,"528":1,"641":1,"696":1,"700":1,"756":1,"759":1,"791":1,"792":1,"821":1,"1192":1,"1359":1,"1395":1,"1436":3,"1438":2,"1453":2,"1454":1,"1455":1,"1457":1,"1459":3,"1461":1,"1467":1,"1471":1,"1472":1,"1486":1,"1488":1,"1491":1,"1496":1,"1524":2,"1525":1,"1526":4,"1530":1,"1531":4,"1533":1,"1554":2,"1558":1,"1565":1,"1566":1,"1568":1,"1572":2,"1577":3,"1581":1,"1582":1,"1584":1,"1585":1,"1591":4,"1605":1,"1631":1,"1642":1,"1645":1,"1678":1,"1739":1,"1741":1,"1800":1,"1843":1,"2002":1,"2034":1,"2099":1,"2145":1,"2166":1,"2220":2,"2221":1}}],["automating",{"3":{"1526":1,"1576":1}}],["automation",{"0":{"1459":1},"3":{"483":1,"490":1,"620":1,"1452":2,"1475":1,"1487":1,"1548":1,"1570":1,"1576":1,"1605":2,"1642":1,"1644":1,"1680":1,"1739":2,"2036":1,"2060":1}}],["automatically",{"3":{"12":1,"122":1,"141":1,"235":1,"265":1,"283":1,"547":1,"698":1,"739":1,"883":1,"889":1,"1216":1,"1229":1,"1237":2,"1259":1,"1263":1,"1264":1,"1270":1,"1271":1,"1274":1,"1286":4,"1301":1,"1309":1,"1310":1,"1311":5,"1312":1,"1316":1,"1323":1,"1324":3,"1339":2,"1350":1,"1359":4,"1362":1,"1368":1,"1369":1,"1395":2,"1396":4,"1402":2,"1415":1,"1417":1,"1427":1,"1431":1,"1436":6,"1440":1,"1443":2,"1454":1,"1457":2,"1465":1,"1467":2,"1489":1,"1490":1,"1526":7,"1537":1,"1551":1,"1571":1,"1575":1,"1577":7,"1582":1,"1584":3,"1591":1,"1633":1,"1635":2,"1639":3,"1653":1,"1663":1,"1666":1,"1707":2,"1724":1,"1767":1,"1784":1,"1797":1,"1799":1,"1849":1,"1862":1,"1866":1,"1868":1,"1913":1,"1924":1,"1945":1,"2000":1,"2005":1,"2011":1,"2019":1,"2035":1,"2041":1,"2090":1,"2093":1,"2096":1,"2098":1,"2164":1}}],["automatic",{"1":{"754":1,"755":1,"756":1,"757":1,"758":1,"759":1,"760":1,"761":1,"762":1},"3":{"0":4,"135":1,"175":1,"312":1,"320":1,"361":1,"380":1,"659":1,"715":1,"734":1,"741":1,"754":1,"757":1,"819":1,"874":1,"889":1,"1034":1,"1212":1,"1236":1,"1237":3,"1247":1,"1259":1,"1270":3,"1281":1,"1286":8,"1301":2,"1309":1,"1311":3,"1322":1,"1323":4,"1324":7,"1339":1,"1349":1,"1350":1,"1359":2,"1400":1,"1415":5,"1436":4,"1438":1,"1455":3,"1459":1,"1525":1,"1526":1,"1577":2,"1592":2,"1630":1,"1641":7,"1664":1,"1665":1,"1668":1,"1670":1,"1765":1,"1838":1,"1843":1,"1845":1,"1907":1,"1945":1,"1996":1,"2048":1,"2142":1,"2145":1,"2221":1,"2232":1}}],["automapper",{"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1956":1,"1957":1,"1958":1,"1959":1},"3":{"0":1,"2":1,"3":1,"4":1,"1212":1,"1213":1,"1347":1,"1353":1,"1359":1,"1489":1,"1577":1,"1779":1,"1950":1,"1951":3,"1955":1,"1956":1,"1958":4,"1959":2,"2043":1,"2208":1,"2232":1}}],["autoverify",{"3":{"0":1,"418":1,"420":1,"423":1,"1416":1}}],["auto",{"0":{"1956":1,"2036":1},"2":{"99":1,"1447":1},"3":{"0":9,"53":1,"91":1,"99":1,"117":1,"166":1,"241":1,"243":1,"244":1,"253":1,"259":2,"290":1,"291":1,"293":1,"295":1,"342":1,"348":1,"350":1,"352":1,"353":1,"396":3,"398":2,"423":1,"440":1,"549":1,"640":1,"757":2,"759":1,"766":1,"767":1,"788":1,"790":3,"791":1,"793":1,"820":1,"1004":1,"1123":1,"1125":1,"1129":1,"1212":3,"1244":1,"1247":2,"1259":3,"1269":1,"1270":7,"1271":3,"1273":1,"1281":1,"1286":8,"1300":2,"1301":1,"1309":1,"1311":2,"1312":1,"1323":3,"1324":6,"1333":1,"1337":3,"1338":1,"1339":9,"1350":1,"1355":4,"1356":1,"1359":9,"1369":1,"1379":1,"1380":2,"1395":3,"1396":6,"1399":1,"1402":7,"1406":3,"1413":1,"1415":19,"1416":4,"1417":12,"1433":1,"1436":21,"1438":4,"1443":1,"1447":1,"1455":1,"1467":5,"1490":1,"1496":1,"1510":1,"1526":4,"1535":1,"1566":1,"1572":1,"1577":4,"1588":1,"1590":1,"1591":2,"1611":2,"1612":1,"1627":1,"1639":5,"1641":2,"1651":2,"1656":1,"1662":1,"1663":1,"1671":1,"1747":1,"1749":1,"1751":1,"1754":1,"1767":1,"1769":1,"1790":1,"1811":1,"1830":1,"1858":1,"1871":1,"1883":1,"1916":1,"1959":2,"1977":1,"2000":1,"2017":1,"2028":1,"2063":1,"2093":1,"2095":1,"2113":2,"2128":2,"2154":3,"2156":2,"2160":3,"2166":1,"2230":1,"2232":1}}],["authfailurespikealert",{"2":{"2158":1},"3":{"2158":1}}],["authresult",{"3":{"1641":1}}],["authresponse",{"3":{"1199":3,"1207":1}}],["authz",{"3":{"1526":3,"1535":1,"1548":1,"1577":2,"1591":1,"1611":2,"1616":1,"1617":1}}],["authn",{"3":{"1526":1,"1548":1,"1577":1}}],["authpagepath",{"3":{"1488":1}}],["authprovider",{"3":{"1436":3}}],["authpreferencestests",{"3":{"1199":1,"1207":3}}],["authunavailable",{"3":{"1436":1}}],["authuiservicetests",{"3":{"1199":1,"1207":2,"1324":6}}],["authuiservice",{"2":{"418":1,"2078":1},"3":{"243":2,"258":2,"259":1,"261":1,"418":1,"420":1,"423":1,"426":1,"428":1,"430":1,"434":2,"436":1,"905":2,"909":1,"1199":3,"1203":1,"1207":2,"1300":7,"1324":47,"1436":3,"1496":1,"2078":1}}],["auth=1",{"3":{"1434":1,"1436":1}}],["authgracetimeout",{"3":{"1433":1,"1436":2}}],["authtimeout",{"3":{"1433":1,"1436":2}}],["authtightpolicyname",{"3":{"1326":1,"1339":1,"1444":1}}],["authsucceededwithingraceasync",{"2":{"1433":1},"3":{"1433":1,"1436":1,"1488":1}}],["authservice",{"3":{"1415":1}}],["authsessionissuer",{"3":{"1192":1,"1199":6,"1203":1,"1207":4,"1287":1,"1290":23,"1300":32,"1496":4}}],["authstateprovider",{"2":{"1415":1},"3":{"1415":2,"1641":1}}],["authstate",{"3":{"1395":1,"1396":1,"1402":2}}],["authipratelimitpartition",{"3":{"1311":4}}],["authippermitlimit",{"2":{"178":1,"1599":1,"2001":1},"3":{"175":1,"178":1,"1311":5,"1599":1,"2001":1}}],["authmodelvalidationtests",{"3":{"1199":1,"1207":2,"1324":2}}],["authoutcomerulestests",{"3":{"1199":1,"1207":2,"1436":4,"1438":2}}],["authoutcomerules",{"3":{"1199":3,"1207":3,"1428":1,"1433":4,"1436":9,"1488":6}}],["authoutcome",{"3":{"1199":4,"1207":1,"1433":1,"1436":4,"1488":1}}],["authoruserid",{"3":{"1686":3}}],["authorname",{"3":{"1427":1}}],["authorship",{"3":{"1359":3,"1402":1}}],["authors",{"3":{"123":1,"557":1,"748":1,"750":1,"846":1,"990":1,"1270":1,"1271":2,"1286":1,"1369":1,"1396":1,"1402":1,"1417":1,"1436":1,"1496":1,"1737":1,"1830":1}}],["authored",{"3":{"0":1,"122":1,"333":1,"881":1,"887":1,"889":1,"890":2,"891":1,"972":1,"973":1,"976":1,"1006":1,"1081":1,"1085":1,"1117":1,"1212":2,"1238":2,"1241":4,"1242":4,"1245":1,"1247":10,"1263":1,"1270":1,"1271":2,"1281":3,"1286":10,"1310":1,"1311":1,"1324":1,"1339":2,"1342":1,"1350":2,"1359":3,"1362":1,"1395":4,"1396":7,"1398":1,"1402":8,"1415":3,"1416":3,"1433":1,"1436":13,"1496":39,"1498":1,"1513":1,"1576":1,"1577":1,"1630":1,"1664":1,"1815":1,"1816":2,"1817":1,"2220":1,"2221":1,"2230":1,"2232":1}}],["author",{"3":{"0":2,"135":1,"136":1,"194":1,"196":1,"295":1,"333":1,"342":1,"472":1,"538":1,"676":1,"716":1,"732":1,"799":1,"846":1,"847":2,"880":1,"889":1,"890":1,"912":1,"1004":1,"1005":1,"1006":1,"1135":1,"1152":1,"1237":1,"1247":6,"1258":1,"1259":1,"1267":1,"1270":3,"1271":1,"1286":3,"1310":1,"1311":1,"1313":1,"1323":2,"1339":1,"1350":1,"1359":6,"1369":1,"1380":1,"1396":2,"1398":1,"1402":17,"1417":1,"1436":12,"1438":1,"1455":1,"1474":1,"1488":1,"1491":1,"1496":19,"1632":3,"1889":1,"1987":1,"2040":1,"2043":1,"2077":1,"2109":2,"2168":1}}],["authoring",{"3":{"384":1,"1270":1,"1402":8,"1436":1,"1496":24,"1526":1,"1534":1,"1631":1}}],["authoritative",{"3":{"0":2,"145":1,"146":1,"147":1,"150":1,"395":1,"397":1,"400":1,"404":1,"407":1,"408":1,"509":1,"536":2,"537":1,"638":1,"640":1,"642":1,"937":1,"1073":1,"1075":1,"1093":1,"1155":1,"1271":1,"1300":2,"1311":1,"1324":8,"1333":2,"1339":2,"1350":1,"1395":5,"1396":8,"1402":3,"1415":1,"1436":3,"1438":2,"1443":2,"1453":1,"1454":1,"1455":2,"1460":1,"1474":1,"1490":1,"1492":1,"1526":1,"1531":1,"1535":1,"1561":1,"1600":1,"1639":1,"1646":1,"1654":1,"1675":1,"1692":1,"1732":1,"2010":1,"2112":1,"2156":1,"2160":2,"2167":1,"2169":1,"2179":1}}],["authority",{"2":{"1326":1,"1441":1,"1444":1,"1467":1,"1613":1,"2009":1},"3":{"0":2,"31":6,"59":1,"91":3,"93":4,"98":2,"100":1,"101":1,"104":1,"235":3,"236":1,"237":1,"451":1,"825":1,"827":3,"828":1,"834":1,"1018":1,"1044":1,"1118":2,"1152":1,"1212":1,"1286":3,"1300":2,"1311":20,"1312":1,"1323":1,"1324":12,"1326":1,"1334":2,"1339":5,"1347":1,"1350":3,"1359":3,"1395":2,"1396":6,"1402":1,"1415":1,"1427":1,"1429":2,"1436":6,"1438":2,"1441":1,"1443":3,"1444":1,"1467":5,"1611":1,"1613":3,"1626":1,"1650":1,"1663":1,"1667":1,"1703":1,"1724":1,"1898":1,"1904":1,"2009":1,"2024":1,"2078":1,"2192":1,"2203":1}}],["authorizable",{"3":{"1396":1}}],["authorizationpolicies",{"3":{"1496":1}}],["authorizationpolicy",{"3":{"189":1,"827":1,"1300":3,"1447":3,"1703":1}}],["authorizationheader",{"3":{"1312":1}}],["authorizationhandlercontext",{"3":{"1300":1}}],["authorizationhandler",{"3":{"1300":3}}],["authorizationmultifactordecoratortests",{"2":{"1270":1},"3":{"1199":1,"1207":5,"1264":1,"1270":1}}],["authorizationtests",{"3":{"1199":1,"1207":2,"1436":3,"1438":2}}],["authorizationtestsbase",{"3":{"1199":2,"1207":2,"1428":1,"1433":3,"1436":8,"1438":1,"1488":1,"1496":2}}],["authorizationoptions",{"2":{"189":1},"3":{"189":1,"1300":4}}],["authorizationextensionstests",{"3":{"1199":1,"1207":2}}],["authorizationextensions",{"2":{"1300":1},"3":{"186":1,"189":2,"190":1,"707":1,"710":1,"980":1,"1059":1,"1199":1,"1203":1,"1207":2,"1208":1,"1287":1,"1297":10,"1300":40,"1496":1,"1577":1}}],["authorizationquerydecoratortests",{"3":{"1199":1,"1207":4,"1270":3}}],["authorizationquerydecorator",{"2":{"126":1,"1260":1,"1263":1,"1297":1},"3":{"121":2,"126":2,"1199":4,"1203":1,"1207":2,"1260":1,"1263":4,"1270":16,"1297":1,"1323":1,"1436":1,"1496":1}}],["authorizationdenied",{"2":{"121":1},"3":{"121":1,"1270":1}}],["authorizationcommanddecoratortests",{"3":{"1199":1,"1207":5,"1270":3,"1438":2}}],["authorizationcommanddecorator",{"2":{"121":1,"126":1,"1260":1,"1263":1,"1297":1,"1316":1},"3":{"121":3,"126":3,"1199":4,"1203":1,"1207":2,"1260":1,"1263":4,"1268":1,"1270":22,"1297":1,"1300":1,"1316":1,"1323":1,"1436":1,"1496":1}}],["authorizationgate",{"2":{"115":1,"126":1,"1821":1,"1962":1,"1965":1},"3":{"0":1,"115":1,"126":8,"186":2,"923":1,"927":1,"1059":4,"1199":3,"1203":1,"1207":2,"1260":1,"1263":10,"1270":20,"1496":2,"1821":1,"1962":1,"1965":1}}],["authorization",{"0":{"1297":1,"1348":1,"1353":1,"1357":1,"1373":1,"1402":1,"1511":1,"1667":1,"1761":1,"1771":1},"1":{"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"326":1,"1287":1,"1288":1,"1289":1,"1290":1,"1291":1,"1292":1,"1293":1,"1294":1,"1295":1,"1296":1,"1297":1,"1298":1,"1299":1,"1300":1,"1960":1,"1961":1,"1962":1,"1963":1,"1964":1,"1965":1,"1992":1,"1993":1,"1994":1,"1995":1,"1996":1,"1997":1},"2":{"121":1,"126":1,"206":1,"227":1,"387":1,"388":1,"389":1,"826":1,"1004":1,"1263":2,"1268":1,"1271":1,"1309":1,"1395":1,"1472":1,"1966":1,"1972":1,"2019":1,"2156":1},"3":{"0":24,"31":1,"57":1,"59":3,"95":1,"115":2,"117":1,"121":5,"122":3,"124":2,"126":6,"183":1,"186":8,"189":5,"190":1,"206":1,"217":1,"227":1,"243":1,"304":1,"315":1,"317":1,"318":7,"321":1,"324":1,"325":2,"326":1,"387":1,"388":3,"389":1,"443":1,"459":2,"464":3,"466":1,"507":1,"544":1,"546":2,"612":1,"640":1,"643":2,"651":1,"674":1,"690":1,"707":1,"715":1,"725":1,"739":1,"743":1,"748":1,"749":3,"753":1,"757":1,"774":1,"825":3,"826":1,"827":6,"906":1,"907":1,"952":1,"954":1,"956":1,"960":2,"980":3,"1004":1,"1012":1,"1026":1,"1042":1,"1043":1,"1044":1,"1058":3,"1059":4,"1061":1,"1115":1,"1116":3,"1117":2,"1118":1,"1184":2,"1192":2,"1202":2,"1203":27,"1207":78,"1208":3,"1212":5,"1213":1,"1238":1,"1239":1,"1245":1,"1247":5,"1253":1,"1259":1,"1260":2,"1263":5,"1264":1,"1268":2,"1270":25,"1271":4,"1275":2,"1283":2,"1286":8,"1287":5,"1296":1,"1297":16,"1298":1,"1300":215,"1301":3,"1304":3,"1309":18,"1311":22,"1312":9,"1316":3,"1318":1,"1323":15,"1324":28,"1339":2,"1342":1,"1348":4,"1350":16,"1353":3,"1354":1,"1357":2,"1359":53,"1372":1,"1373":4,"1375":1,"1377":1,"1379":1,"1380":39,"1395":12,"1396":24,"1402":23,"1403":1,"1404":2,"1405":1,"1406":1,"1409":1,"1410":2,"1414":1,"1415":37,"1417":3,"1427":3,"1436":50,"1437":7,"1438":11,"1447":1,"1455":1,"1467":8,"1472":2,"1481":1,"1487":2,"1488":2,"1496":12,"1497":1,"1507":3,"1511":1,"1526":4,"1534":1,"1535":2,"1548":3,"1562":1,"1563":2,"1572":2,"1575":2,"1577":5,"1582":1,"1589":1,"1591":2,"1595":1,"1596":2,"1600":2,"1621":1,"1626":1,"1627":1,"1629":1,"1630":1,"1632":1,"1638":4,"1639":3,"1640":1,"1641":4,"1660":1,"1662":2,"1666":1,"1667":4,"1671":2,"1672":1,"1698":2,"1720":1,"1747":2,"1753":1,"1757":1,"1759":1,"1775":1,"1779":2,"1813":2,"1814":1,"1815":2,"1816":1,"1817":2,"1821":3,"1825":1,"1826":1,"1827":1,"1902":1,"1903":1,"1904":1,"1922":2,"1938":1,"1940":1,"1959":1,"1960":1,"1961":2,"1963":1,"1965":5,"1966":1,"1972":1,"1991":1,"1992":2,"1993":2,"1994":4,"1997":3,"2019":2,"2036":1,"2055":1,"2066":1,"2096":1,"2111":2,"2113":1,"2136":2,"2149":1,"2156":2,"2179":1,"2184":1,"2186":1,"2192":1,"2193":2,"2194":1,"2195":3,"2199":2,"2202":1,"2208":3,"2220":1,"2227":1,"2230":1,"2232":2}}],["authorizing",{"3":{"209":1,"1359":1}}],["authorizeview",{"2":{"509":1,"650":1,"953":1,"960":1,"1758":1,"1761":1,"2078":1},"3":{"507":1,"509":1,"650":1,"1324":3,"1396":1,"1436":1,"1591":1,"1641":1,"1671":1,"1758":2,"1761":1,"2078":1}}],["authorizer",{"3":{"378":1,"1309":3,"1945":1}}],["authorizerouteview",{"2":{"189":1,"649":1,"651":1,"652":1},"3":{"189":1,"649":1,"651":1,"652":1,"1300":1,"1436":3}}],["authorizeattribute",{"3":{"186":1,"1297":1,"1300":3,"1431":1,"1436":2,"1962":1}}],["authorizesessionwriteasync",{"3":{"1359":9}}],["authorizes",{"3":{"0":1,"191":1,"530":1,"749":1,"1059":1,"1300":6,"1311":1,"1322":1,"1323":1,"1324":1,"1357":1,"1359":6,"1402":4,"1415":1,"1627":2,"1962":1,"1993":1,"2202":1}}],["authorize",{"2":{"185":1,"188":1,"206":1,"207":1,"208":1,"555":1,"557":1,"906":1,"910":1,"1626":1,"1703":1,"1724":1,"1757":1,"1758":1,"1759":1,"1760":1,"1761":1,"1823":1,"1898":1,"1960":1,"1964":1,"1965":1,"1966":1,"1967":1,"1972":1,"2045":1},"3":{"0":2,"185":2,"186":1,"188":1,"206":2,"207":1,"208":1,"225":1,"235":1,"434":1,"529":1,"530":1,"555":1,"557":1,"618":1,"690":1,"707":1,"724":1,"725":2,"905":2,"906":1,"907":1,"910":1,"1116":1,"1212":1,"1247":1,"1263":1,"1270":4,"1298":1,"1300":11,"1306":1,"1307":1,"1309":6,"1311":10,"1323":4,"1324":7,"1334":1,"1339":1,"1350":4,"1357":1,"1359":5,"1373":6,"1375":1,"1377":1,"1380":14,"1388":2,"1391":1,"1395":16,"1396":18,"1402":6,"1414":1,"1415":14,"1416":1,"1417":3,"1427":3,"1431":2,"1432":1,"1434":1,"1436":30,"1438":2,"1488":1,"1526":1,"1534":1,"1577":2,"1591":4,"1596":1,"1599":1,"1600":1,"1626":1,"1627":9,"1640":1,"1641":1,"1650":1,"1651":1,"1703":1,"1724":1,"1747":3,"1749":1,"1757":1,"1758":1,"1759":1,"1760":2,"1761":3,"1765":1,"1823":1,"1825":1,"1898":1,"1935":1,"1948":1,"1960":4,"1964":2,"1965":2,"1966":3,"1967":1,"1968":1,"1971":1,"1972":2,"2045":2,"2232":1}}],["authorizedsessionids",{"3":{"1359":1}}],["authorized",{"3":{"0":3,"95":1,"96":1,"98":1,"384":1,"528":1,"599":1,"960":1,"1092":1,"1286":2,"1300":3,"1309":1,"1324":1,"1359":2,"1396":2,"1415":1,"1436":4,"1467":1,"1474":1,"1548":1,"1553":1,"1672":1,"1821":1,"1993":1,"2179":1}}],["autherrorcodes",{"3":{"1199":3,"1203":1,"1207":2,"1295":3,"1300":5,"1496":1}}],["authentic",{"3":{"1489":1}}],["authenticity",{"3":{"790":1,"1300":1}}],["authenticators",{"3":{"1417":2}}],["authenticator",{"3":{"1059":2,"1293":2,"1300":7,"1311":1,"1322":1,"1323":4,"1417":2,"2196":1,"2198":2,"2203":1}}],["authenticating",{"3":{"0":1,"348":1,"353":1,"1300":1,"1312":1,"1324":1,"1339":1,"1436":1,"1902":1}}],["authenticationcallback",{"3":{"1417":1}}],["authenticationtype",{"3":{"1323":4,"1436":1}}],["authenticationticket",{"3":{"1300":1,"1436":1}}],["authenticationproperties",{"2":{"1312":1},"3":{"1311":2,"1312":1}}],["authenticationheadervalue",{"2":{"1311":1,"1324":1},"3":{"1311":2,"1324":3}}],["authenticationhandler",{"3":{"1300":2,"1436":1}}],["authenticationbuilder",{"2":{"1208":1},"3":{"1208":1,"1300":3}}],["authenticationvalidatorstests",{"3":{"1199":1,"1207":2}}],["authenticationvalidators",{"2":{"1289":1},"3":{"1199":12,"1203":1,"1207":2,"1287":1,"1289":3,"1300":9,"1406":1,"1415":5,"1496":2}}],["authenticationrequest",{"2":{"1289":1},"3":{"1199":1,"1203":1,"1207":2,"1289":1,"1300":8}}],["authenticationresponse",{"2":{"420":1,"426":1,"1289":1,"1977":1},"3":{"350":1,"1199":31,"1203":1,"1207":2,"1289":1,"1300":18,"1311":3,"1324":4,"1415":2,"1436":1,"1977":1}}],["authenticationservicesettings",{"3":{"1300":1,"1415":2,"1436":1,"1496":2}}],["authenticationservicetests",{"3":{"1199":1,"1207":3,"1300":1,"1436":1}}],["authenticationserviceidentitycompletionstests",{"2":{"1199":1,"1300":1},"3":{"1199":1,"1207":7,"1300":2,"1436":1}}],["authenticationservice",{"2":{"283":1,"310":1,"314":1,"354":1,"502":1,"672":1,"949":1,"988":1,"1192":1,"1289":1,"1407":1,"1408":1,"1534":1,"1597":1,"1599":1,"1978":1,"1983":1},"3":{"281":1,"283":1,"310":5,"314":1,"350":17,"352":2,"353":1,"354":1,"497":2,"499":13,"502":2,"545":1,"552":1,"672":1,"674":4,"946":2,"949":1,"988":2,"1192":1,"1199":5,"1203":1,"1207":2,"1289":1,"1300":14,"1311":1,"1405":1,"1406":7,"1407":1,"1408":1,"1413":2,"1415":36,"1436":4,"1489":1,"1496":6,"1526":2,"1534":2,"1591":3,"1597":2,"1599":2,"1765":2,"1896":1,"1978":1,"1983":4,"2000":2}}],["authenticationservicebasetests",{"3":{"906":1,"1199":1,"1207":6,"1300":2,"1436":1}}],["authenticationservicebase",{"2":{"279":1,"281":1,"283":1,"284":1,"285":1,"310":1,"353":1,"470":1,"476":1,"498":1,"502":1,"503":1,"725":1,"949":1,"1058":1,"1060":1,"1061":1,"1192":1,"1289":1,"1293":1,"1403":1,"1667":1,"1896":1,"1982":1,"2196":1,"2203":1},"3":{"0":3,"279":1,"283":1,"284":2,"285":1,"310":4,"353":2,"470":2,"476":2,"497":2,"498":2,"499":21,"500":1,"501":2,"502":3,"503":1,"674":2,"725":1,"905":10,"906":1,"907":4,"909":1,"910":1,"946":1,"949":1,"1058":2,"1059":3,"1060":1,"1061":1,"1192":1,"1199":5,"1203":1,"1207":2,"1270":1,"1271":2,"1286":2,"1287":1,"1289":34,"1290":5,"1293":1,"1300":66,"1403":1,"1406":1,"1415":2,"1436":3,"1489":1,"1496":5,"1577":2,"1582":1,"1583":1,"1586":1,"1667":1,"1896":1,"1982":9,"1984":2,"2000":1,"2196":2,"2197":2,"2203":1}}],["authenticationstatetask",{"3":{"1395":1}}],["authenticationstate",{"3":{"0":1,"954":1,"1324":2,"1395":1,"1396":1,"1402":2,"1432":1,"1436":6,"1488":1,"1491":2}}],["authenticationstateprovider",{"2":{"508":1,"953":1,"954":1,"1432":1,"1491":1,"1641":1},"3":{"0":1,"508":1,"953":1,"954":2,"1324":8,"1395":2,"1415":2,"1432":1,"1436":9,"1488":1,"1491":1,"1641":1}}],["authentication=active",{"3":{"0":1,"599":1,"1467":1,"1477":1}}],["authentication",{"0":{"1289":1,"1406":1,"1511":1,"1641":1},"1":{"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"286":1,"287":1,"504":1,"505":1,"506":1,"507":1,"508":1,"509":1,"510":1,"511":1,"512":1,"513":1,"514":1,"1287":1,"1288":1,"1289":1,"1290":1,"1291":1,"1292":1,"1293":1,"1294":1,"1295":1,"1296":1,"1297":1,"1298":1,"1299":1,"1300":1},"2":{"776":1,"833":1,"1293":2,"1295":2,"1311":1,"1312":1,"1322":1,"1326":1,"1441":1,"1444":1,"1467":4,"2009":1},"3":{"0":7,"26":1,"31":4,"34":1,"59":1,"160":1,"173":1,"175":1,"177":1,"178":1,"182":1,"186":1,"202":1,"204":1,"206":1,"207":1,"235":2,"278":1,"280":1,"313":2,"350":1,"352":1,"359":1,"363":1,"364":1,"365":1,"403":1,"422":1,"457":1,"458":1,"459":2,"462":2,"464":3,"466":1,"500":1,"504":1,"506":1,"528":1,"555":1,"599":2,"602":1,"612":1,"618":1,"665":1,"666":1,"674":1,"698":1,"719":2,"748":2,"749":6,"753":3,"774":1,"776":1,"778":1,"792":1,"827":4,"833":1,"852":1,"950":2,"980":2,"1011":1,"1012":1,"1058":1,"1059":3,"1061":1,"1108":1,"1111":1,"1184":1,"1192":1,"1202":1,"1203":3,"1207":7,"1208":2,"1212":1,"1213":2,"1253":1,"1259":1,"1270":3,"1271":1,"1273":1,"1283":1,"1284":1,"1286":5,"1287":2,"1290":1,"1293":4,"1295":4,"1298":2,"1300":49,"1301":2,"1311":50,"1312":4,"1320":2,"1322":1,"1323":3,"1324":13,"1326":1,"1334":2,"1335":1,"1336":1,"1339":7,"1380":2,"1391":1,"1395":7,"1396":7,"1402":1,"1406":1,"1408":1,"1415":14,"1416":3,"1417":3,"1432":1,"1434":1,"1436":33,"1437":1,"1441":1,"1442":1,"1443":2,"1444":1,"1465":1,"1467":8,"1488":2,"1496":5,"1526":1,"1548":2,"1575":1,"1622":1,"1626":2,"1627":2,"1629":4,"1630":1,"1631":5,"1632":3,"1635":1,"1638":2,"1639":1,"1640":2,"1641":9,"1647":1,"1650":2,"1666":1,"1669":1,"1671":1,"1703":2,"1721":1,"1724":1,"1747":1,"1758":1,"1763":2,"1764":1,"1765":2,"1767":1,"1825":5,"1898":1,"1899":2,"1902":1,"1904":1,"1970":1,"1972":3,"1975":1,"1982":1,"1985":1,"1999":1,"2000":3,"2001":2,"2002":2,"2009":1,"2066":2,"2142":2,"2144":1,"2166":1,"2168":1,"2186":1,"2194":2,"2195":1,"2203":2,"2208":1,"2220":2,"2221":1,"2232":2}}],["authenticateasspeaker",{"3":{"1488":1}}],["authenticateasattendee",{"3":{"1488":1,"1491":1}}],["authenticateasorganizer",{"3":{"1488":1}}],["authenticateasync",{"2":{"420":1,"430":1,"2117":1},"3":{"420":1,"426":1,"428":1,"430":1,"1324":3,"1415":1,"1416":1,"1417":6,"2117":1}}],["authenticateresult",{"3":{"1300":1,"1312":1,"1415":1,"1436":2}}],["authenticateresultfeaturestub",{"3":{"1199":2,"1207":1}}],["authenticate",{"3":{"30":1,"279":1,"284":1,"527":1,"601":1,"789":1,"905":1,"946":1,"947":1,"1300":3,"1309":1,"1324":3,"1415":1,"1417":1,"1455":2,"1467":2,"1591":1,"1632":1,"1641":3,"1768":1,"1982":1,"2127":1,"2146":1,"2166":1}}],["authenticateduser",{"3":{"1436":2}}],["authenticateduserpath",{"3":{"1433":1,"1436":1}}],["authenticatedpage",{"3":{"1436":1}}],["authenticatedservicebaseretrytests",{"3":{"1199":1,"1207":3}}],["authenticatedservicebase",{"2":{"879":1,"881":1,"883":1,"884":1,"1388":1,"1389":1,"1395":1,"1414":1,"1668":1,"2074":1,"2080":1},"3":{"0":3,"827":2,"879":1,"881":6,"883":2,"884":2,"1199":25,"1203":1,"1207":2,"1212":1,"1324":64,"1339":2,"1388":1,"1389":1,"1395":19,"1396":20,"1402":1,"1414":1,"1415":1,"1496":2,"1600":1,"1668":1,"2074":1,"2080":1}}],["authenticated",{"0":{"1298":1,"1391":1,"1623":1,"1759":1,"1922":1,"2000":1},"1":{"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1,"181":1,"182":1,"385":1,"386":1,"387":1,"388":1,"389":1,"390":1,"391":1,"392":1,"393":1},"3":{"0":8,"26":1,"31":1,"172":1,"175":5,"176":1,"177":2,"178":1,"179":1,"181":2,"182":1,"184":1,"188":1,"189":1,"191":1,"228":1,"234":1,"237":1,"243":2,"244":1,"247":1,"259":1,"265":1,"273":1,"280":2,"282":1,"334":1,"359":3,"360":2,"384":1,"385":1,"387":2,"388":1,"390":1,"434":1,"458":2,"459":2,"460":1,"461":1,"462":1,"507":1,"556":1,"649":1,"690":1,"725":1,"727":1,"749":1,"759":1,"825":1,"853":1,"945":1,"960":1,"1192":1,"1212":4,"1253":1,"1271":2,"1284":1,"1286":7,"1287":1,"1288":1,"1296":1,"1297":1,"1300":16,"1304":1,"1306":1,"1308":1,"1309":15,"1311":23,"1312":3,"1323":7,"1324":23,"1336":1,"1339":4,"1350":3,"1357":1,"1359":12,"1373":1,"1380":4,"1391":1,"1395":16,"1396":27,"1401":1,"1402":5,"1406":1,"1407":1,"1414":1,"1415":15,"1417":9,"1431":1,"1432":2,"1436":17,"1438":6,"1443":1,"1455":1,"1465":1,"1488":1,"1496":2,"1526":4,"1534":3,"1535":1,"1548":1,"1572":1,"1577":1,"1591":1,"1611":1,"1621":5,"1625":1,"1626":1,"1627":3,"1629":1,"1631":7,"1632":18,"1638":2,"1639":6,"1640":3,"1641":6,"1672":1,"1698":1,"1747":3,"1748":2,"1749":10,"1750":2,"1757":3,"1765":3,"1768":3,"1771":1,"1773":1,"1825":1,"1903":1,"1905":1,"1922":3,"1923":2,"1924":1,"1936":1,"1937":1,"1938":1,"1945":1,"1963":1,"1968":1,"1992":1,"1997":1,"1998":1,"1999":2,"2000":4,"2001":2,"2002":3,"2007":1,"2066":1,"2083":1,"2142":2,"2146":5,"2166":1,"2169":1,"2232":5}}],["authenticates",{"3":{"0":5,"59":1,"207":1,"227":1,"350":1,"598":1,"599":1,"601":1,"665":1,"825":1,"905":1,"972":1,"1183":1,"1185":1,"1290":1,"1300":5,"1309":1,"1311":3,"1323":1,"1324":4,"1339":3,"1406":1,"1415":2,"1434":1,"1436":2,"1447":1,"1455":1,"1459":1,"1465":1,"1467":3,"1472":1,"1547":1,"1641":1,"1667":1,"1732":1,"1902":1,"1905":1,"1966":1,"1968":1,"1975":1,"1982":1,"1993":1,"2000":1,"2126":1}}],["authclaimtypes",{"2":{"186":1,"303":1,"649":1,"1296":1,"2138":1,"2197":1},"3":{"126":1,"186":3,"303":2,"649":1,"905":4,"907":1,"1059":3,"1199":34,"1203":1,"1207":2,"1270":3,"1287":1,"1293":4,"1296":5,"1300":30,"1323":1,"1436":3,"1496":1,"2138":2,"2197":3}}],["authcontrollertests",{"3":{"1199":1,"1207":2}}],["authcontroller",{"2":{"1747":2},"3":{"0":1,"854":1,"1199":2,"1203":1,"1207":2,"1300":1,"1311":8,"1323":5,"1406":3,"1407":2,"1408":1,"1415":31,"1436":1,"1496":3,"1747":2,"2000":2}}],["authcontrollerbaseratelimittests",{"2":{"2000":1,"2001":1},"3":{"1199":1,"1207":3,"1311":1,"1438":2,"1496":2,"2000":2,"2001":2}}],["authcontrollerbasetests",{"3":{"906":1,"909":1,"1199":1,"1207":3,"1311":1}}],["authcontrollerbase",{"2":{"160":1,"161":1,"280":1,"1599":1,"1600":1,"2000":1,"2002":1},"3":{"0":4,"160":2,"161":2,"175":1,"280":1,"854":1,"905":6,"1199":6,"1203":1,"1207":2,"1290":4,"1300":15,"1311":30,"1406":1,"1415":2,"1436":3,"1496":3,"1599":1,"1600":1,"2002":1}}],["authdelegatinghandlertests",{"3":{"1199":1,"1207":2,"1324":2}}],["authdelegatinghandler",{"2":{"387":1,"514":1,"1183":1},"3":{"0":1,"387":1,"507":6,"514":3,"881":1,"1183":2,"1199":6,"1203":1,"1207":2,"1324":20,"1436":3}}],["auth",{"0":{"1667":1,"2208":1},"1":{"1893":1,"1894":1,"1895":1,"1896":1,"1897":1,"1898":1,"1899":1,"1966":1,"1967":1,"1968":1,"1969":1,"1970":1,"1971":1,"1972":1},"2":{"186":1,"190":1,"207":2,"281":2,"284":1,"350":5,"352":3,"353":2,"354":3,"511":2,"854":1,"1062":1,"1295":1,"1300":2,"1406":2,"1582":1,"1583":1,"1641":1,"1761":1,"1962":1,"1977":4,"1978":1,"1982":1},"3":{"0":31,"29":1,"31":2,"53":1,"59":1,"60":1,"121":1,"126":2,"136":1,"155":1,"157":1,"160":1,"161":2,"162":1,"173":5,"175":4,"176":1,"177":2,"178":3,"179":5,"180":8,"181":1,"182":2,"186":4,"190":2,"207":7,"209":3,"210":1,"217":1,"221":1,"227":1,"229":2,"236":1,"239":1,"243":2,"246":1,"279":2,"280":3,"281":3,"282":2,"284":3,"287":2,"303":2,"310":1,"318":1,"349":1,"350":7,"352":5,"353":4,"354":3,"379":1,"389":1,"403":1,"415":2,"416":1,"418":1,"420":6,"423":3,"426":3,"428":5,"430":2,"433":1,"434":1,"440":1,"459":2,"463":1,"470":1,"476":1,"497":4,"498":1,"499":4,"502":1,"506":1,"507":17,"508":3,"509":2,"510":2,"511":2,"513":2,"514":2,"536":2,"555":3,"556":2,"557":1,"599":1,"600":1,"608":1,"609":2,"611":1,"612":1,"616":1,"643":1,"649":5,"664":1,"666":1,"668":1,"670":1,"674":9,"676":1,"736":1,"757":1,"758":1,"775":1,"809":2,"827":2,"833":1,"834":1,"853":1,"854":6,"856":1,"857":1,"904":1,"905":30,"906":11,"907":2,"908":1,"909":4,"926":1,"946":4,"963":1,"980":1,"988":1,"996":1,"999":1,"1006":2,"1058":3,"1059":36,"1062":2,"1082":2,"1183":1,"1184":9,"1185":1,"1186":1,"1192":4,"1194":1,"1201":1,"1202":2,"1203":152,"1207":547,"1208":2,"1212":9,"1213":1,"1237":4,"1270":3,"1271":5,"1273":1,"1283":8,"1286":36,"1287":1,"1288":6,"1289":8,"1290":8,"1291":6,"1292":7,"1293":9,"1294":5,"1295":7,"1296":3,"1297":20,"1298":4,"1300":519,"1301":10,"1304":1,"1311":49,"1312":4,"1313":1,"1316":1,"1320":3,"1322":2,"1323":19,"1324":301,"1326":1,"1336":1,"1338":1,"1339":16,"1350":4,"1359":2,"1380":1,"1391":1,"1395":9,"1396":10,"1402":2,"1403":1,"1406":3,"1407":4,"1408":3,"1415":45,"1416":5,"1417":43,"1428":1,"1429":2,"1430":1,"1432":2,"1433":2,"1434":2,"1436":78,"1437":2,"1438":33,"1440":1,"1441":1,"1442":2,"1444":2,"1447":10,"1453":1,"1454":1,"1455":4,"1456":3,"1458":1,"1467":11,"1477":6,"1481":1,"1482":1,"1484":1,"1487":2,"1488":7,"1496":24,"1511":1,"1524":1,"1526":7,"1534":3,"1535":1,"1562":1,"1563":2,"1571":1,"1577":13,"1582":8,"1583":2,"1586":3,"1591":5,"1611":3,"1612":1,"1617":2,"1618":1,"1619":2,"1627":2,"1632":10,"1638":1,"1639":1,"1640":3,"1641":26,"1642":1,"1644":1,"1647":2,"1650":1,"1653":1,"1656":1,"1658":1,"1660":3,"1663":1,"1666":1,"1667":2,"1669":3,"1689":1,"1698":2,"1712":1,"1746":6,"1747":10,"1748":5,"1749":3,"1750":1,"1757":1,"1759":1,"1761":3,"1765":7,"1767":1,"1771":3,"1778":1,"1779":3,"1780":1,"1783":1,"1786":1,"1790":2,"1793":1,"1892":1,"1893":1,"1899":1,"1923":1,"1942":1,"1962":1,"1965":1,"1966":2,"1967":1,"1968":6,"1969":1,"1971":3,"1972":5,"1974":1,"1975":4,"1976":1,"1977":4,"1978":2,"1982":1,"1994":1,"1997":1,"1999":1,"2000":7,"2001":4,"2002":1,"2009":1,"2015":1,"2023":1,"2025":1,"2028":1,"2036":2,"2045":1,"2055":2,"2066":3,"2074":1,"2078":3,"2080":1,"2085":1,"2110":2,"2118":1,"2122":1,"2149":1,"2158":1,"2208":3,"2227":1,"2228":1,"2230":1,"2232":3,"2243":1}}],["abbreviates",{"3":{"1681":1}}],["abbreviated",{"3":{"1496":1}}],["abbreviating",{"3":{"1339":1}}],["abi",{"3":{"1417":1}}],["ability",{"3":{"58":1,"726":1,"1237":1,"1311":1,"1323":1,"1339":1,"1369":1,"1396":1,"1415":1,"1443":1,"1985":1}}],["able",{"3":{"380":1,"447":1,"549":1,"691":1,"760":1,"811":1,"829":1,"989":1,"1042":1,"1237":1,"1238":1,"1259":1,"1279":1,"1286":3,"1300":4,"1301":1,"1311":1,"1323":1,"1324":3,"1339":3,"1359":1,"1366":1,"1395":3,"1396":6,"1410":1,"1415":4,"1430":1,"1435":1,"1436":1,"1438":3,"1439":1,"1441":1,"1467":1,"1487":1,"1677":1,"1840":1,"1942":1,"1943":1,"1967":1,"1981":1,"1984":1,"2130":1,"2134":1,"2192":1}}],["abcdefghijklmnopqrstuvwxyz0123456789",{"3":{"1309":1}}],["abc",{"3":{"335":1,"1237":1,"1241":2,"1247":2}}],["abuse",{"3":{"175":1,"381":1,"827":1,"1125":1,"1126":1,"1324":3,"1326":1,"1339":3,"1396":3,"1402":1,"1416":1,"1444":1,"1534":1,"1599":1,"1640":1,"1641":1,"1945":1}}],["abuser",{"3":{"174":1,"1998":1,"1999":1}}],["abusive",{"3":{"174":1,"1402":1,"1998":1}}],["abac",{"3":{"0":1,"188":1,"320":1,"1577":1,"1583":1,"1964":1,"1996":2,"1997":1}}],["abandonaftercommitfailure",{"2":{"988":1},"3":{"988":2,"1286":2}}],["abandoning",{"3":{"332":1,"751":1,"923":1,"1324":1,"1390":1,"1417":1,"1990":1}}],["abandons",{"3":{"24":1,"237":1,"538":1,"1293":1,"1339":2,"1395":2}}],["abandoned",{"3":{"21":1,"24":1,"109":2,"235":1,"352":1,"793":1,"897":1,"1247":1,"1259":2,"1285":1,"1286":5,"1300":2,"1324":4,"1339":1,"1395":2,"1399":1,"1402":3,"1436":4,"1467":1,"1591":1,"1759":1,"1910":1,"1919":1,"1927":1,"1978":1}}],["abandon",{"3":{"0":1,"24":1,"27":1,"201":4,"255":1,"757":1,"1247":1,"1258":2,"1259":6,"1311":1,"1323":1,"1359":1,"1438":1,"1455":1,"1922":1}}],["aborterror",{"3":{"1417":1}}],["aborted",{"3":{"109":1,"1263":1,"1270":1,"1278":1,"1286":2,"1300":2,"1304":1,"1307":1,"1309":1,"1312":1,"1323":1,"1346":1,"1359":1,"1436":2,"1945":1}}],["aborting",{"3":{"757":1,"1301":1,"1324":1,"1358":1,"1359":2,"1369":1,"1396":1,"1438":1,"1804":1,"1881":1}}],["abort",{"3":{"72":1,"109":1,"1286":2,"1311":2,"1324":1,"1350":1,"1359":5,"1366":1,"1369":1,"1396":1,"1415":1,"1417":2,"1438":1,"1447":1,"1671":1,"1806":1,"1941":1}}],["aborts",{"3":{"43":2,"790":1,"881":1,"1042":1,"1259":1,"1315":1,"1323":4,"1339":1,"1350":1,"1359":3,"1396":2,"1415":2,"1684":1,"2185":1}}],["about",{"0":{"2056":1},"3":{"0":9,"19":3,"23":1,"32":1,"58":1,"60":1,"71":1,"72":1,"73":1,"74":2,"100":1,"104":1,"110":1,"125":1,"140":1,"142":1,"145":1,"150":1,"156":2,"160":2,"175":1,"193":1,"200":1,"254":1,"255":2,"284":1,"317":1,"358":1,"360":1,"365":1,"383":1,"390":3,"414":1,"423":1,"425":1,"428":1,"460":1,"477":1,"486":1,"491":1,"527":1,"536":1,"539":1,"543":2,"555":1,"563":1,"564":1,"566":1,"567":1,"585":1,"587":1,"589":1,"590":2,"617":1,"625":1,"628":1,"629":1,"632":1,"633":1,"676":2,"681":1,"683":1,"689":1,"698":1,"699":1,"702":1,"707":2,"708":1,"716":3,"724":1,"740":2,"742":1,"750":1,"751":1,"757":1,"759":2,"760":1,"764":1,"768":2,"784":1,"793":2,"798":2,"804":1,"805":1,"819":1,"820":1,"827":4,"838":3,"848":1,"854":1,"862":2,"869":1,"871":1,"880":1,"889":2,"890":1,"893":1,"897":2,"898":1,"900":1,"906":1,"914":1,"926":2,"930":1,"933":1,"938":1,"940":1,"953":1,"956":1,"963":1,"964":2,"971":1,"972":1,"976":1,"980":1,"981":2,"984":1,"998":1,"1007":1,"1018":1,"1027":1,"1033":3,"1035":1,"1049":2,"1050":1,"1051":2,"1066":1,"1067":2,"1068":1,"1077":1,"1085":1,"1089":1,"1093":1,"1116":1,"1118":1,"1125":1,"1142":1,"1154":1,"1155":1,"1176":2,"1194":1,"1212":1,"1229":3,"1237":3,"1239":1,"1241":1,"1247":3,"1252":2,"1254":2,"1259":6,"1264":1,"1265":1,"1267":1,"1269":1,"1270":10,"1273":1,"1276":1,"1277":1,"1280":1,"1286":29,"1289":1,"1295":1,"1296":1,"1300":31,"1301":4,"1309":4,"1310":1,"1311":10,"1312":2,"1318":2,"1322":2,"1323":20,"1324":42,"1337":2,"1338":1,"1339":13,"1340":1,"1341":1,"1347":1,"1348":2,"1350":9,"1355":1,"1359":53,"1366":2,"1369":6,"1371":1,"1372":1,"1380":5,"1395":16,"1396":42,"1397":1,"1399":1,"1402":13,"1415":28,"1416":3,"1417":10,"1427":2,"1429":1,"1430":1,"1433":1,"1436":70,"1438":1,"1440":1,"1443":1,"1445":2,"1446":1,"1447":2,"1449":1,"1451":1,"1453":4,"1454":2,"1455":6,"1456":2,"1459":1,"1460":1,"1465":5,"1467":13,"1472":1,"1473":1,"1474":7,"1475":1,"1476":3,"1478":1,"1484":1,"1488":1,"1489":2,"1490":3,"1492":5,"1496":2,"1526":1,"1529":1,"1553":1,"1586":1,"1630":1,"1638":1,"1641":1,"1649":1,"1650":1,"1651":1,"1654":1,"1685":1,"1686":3,"1692":1,"1699":1,"1700":1,"1708":1,"1725":1,"1726":1,"1727":1,"1729":2,"1732":1,"1765":1,"1782":1,"1792":1,"1794":1,"1801":1,"1803":3,"1808":1,"1824":1,"1828":1,"1835":1,"1843":1,"1855":1,"1856":1,"1863":1,"1870":1,"1874":1,"1886":1,"1890":1,"1902":2,"1903":1,"1907":1,"1909":1,"1916":1,"1919":1,"1922":1,"1932":1,"1944":1,"1948":2,"1950":1,"1952":1,"1953":1,"1954":1,"1962":1,"1964":1,"1971":1,"1973":1,"1978":1,"1982":2,"1992":2,"1994":1,"1996":1,"1998":1,"2000":3,"2001":1,"2002":1,"2029":1,"2030":1,"2031":1,"2033":4,"2036":1,"2037":1,"2041":1,"2042":1,"2043":2,"2045":1,"2047":2,"2050":1,"2053":1,"2058":2,"2059":3,"2060":1,"2066":1,"2067":1,"2075":1,"2086":1,"2087":3,"2091":1,"2096":1,"2099":1,"2100":1,"2101":1,"2109":1,"2114":1,"2116":1,"2118":1,"2123":1,"2127":1,"2132":1,"2135":1,"2138":1,"2142":1,"2151":1,"2156":2,"2157":1,"2158":1,"2165":2,"2166":1,"2167":3,"2174":1,"2180":1,"2181":1,"2183":1,"2184":1,"2185":1,"2191":1,"2193":1,"2194":2,"2197":1,"2198":2,"2200":1,"2212":1,"2232":1,"2239":1}}],["abovethroughputfloor",{"3":{"1492":1}}],["above",{"3":{"0":3,"1":1,"20":1,"22":2,"27":1,"62":1,"71":1,"93":3,"94":2,"95":2,"97":1,"98":2,"99":1,"100":2,"101":1,"104":1,"121":2,"122":1,"128":1,"131":1,"135":6,"136":3,"137":3,"138":3,"139":1,"142":1,"151":1,"160":2,"166":1,"175":2,"178":2,"179":1,"180":1,"181":1,"200":6,"218":1,"219":2,"230":1,"231":1,"237":1,"243":2,"245":3,"247":1,"248":1,"249":1,"250":1,"251":1,"253":1,"256":1,"257":1,"258":2,"265":1,"276":1,"291":1,"295":2,"303":2,"325":2,"330":2,"336":2,"337":1,"359":1,"364":1,"365":2,"374":1,"391":1,"392":2,"395":3,"400":1,"401":1,"403":1,"407":1,"415":1,"418":1,"423":1,"424":1,"425":2,"426":3,"428":1,"429":1,"441":1,"443":1,"444":1,"448":3,"450":1,"451":1,"471":1,"474":1,"475":2,"476":1,"477":3,"493":1,"497":2,"507":1,"511":1,"512":2,"523":3,"524":1,"528":1,"536":1,"540":1,"548":1,"549":3,"550":1,"551":4,"555":1,"556":1,"560":1,"566":2,"567":1,"572":2,"574":1,"575":2,"576":1,"577":1,"578":1,"584":1,"591":1,"592":1,"603":1,"604":1,"607":1,"609":3,"612":1,"613":2,"616":1,"626":2,"633":1,"635":1,"638":1,"642":2,"660":1,"665":1,"668":1,"669":1,"674":2,"675":1,"676":1,"688":1,"691":1,"702":1,"716":1,"719":1,"731":1,"733":1,"750":1,"751":1,"766":1,"767":1,"774":1,"790":1,"799":1,"801":1,"811":1,"812":1,"814":1,"819":2,"825":2,"826":1,"827":6,"829":1,"831":2,"833":1,"837":1,"839":1,"849":1,"860":1,"870":1,"874":1,"876":1,"891":1,"899":1,"906":1,"909":1,"914":1,"915":1,"926":2,"931":1,"954":1,"957":1,"975":1,"996":1,"1003":1,"1008":1,"1018":1,"1020":2,"1026":1,"1036":1,"1059":1,"1060":1,"1074":1,"1076":1,"1077":1,"1094":1,"1102":1,"1117":1,"1124":2,"1125":1,"1127":1,"1128":1,"1178":1,"1184":1,"1188":1,"1211":1,"1212":1,"1223":1,"1229":3,"1236":1,"1237":9,"1240":1,"1243":1,"1247":5,"1259":7,"1262":2,"1266":1,"1269":1,"1270":15,"1271":1,"1275":1,"1281":1,"1286":14,"1300":14,"1301":5,"1309":13,"1310":1,"1311":11,"1312":2,"1314":1,"1315":1,"1323":26,"1324":42,"1326":1,"1329":1,"1333":1,"1337":1,"1339":30,"1346":1,"1350":14,"1353":1,"1358":1,"1359":76,"1362":1,"1364":1,"1365":1,"1369":20,"1372":1,"1380":18,"1387":1,"1392":1,"1395":30,"1396":53,"1402":7,"1414":1,"1415":34,"1416":2,"1417":10,"1427":2,"1430":1,"1431":1,"1435":1,"1436":44,"1438":4,"1440":1,"1441":1,"1442":1,"1443":2,"1444":4,"1445":4,"1446":1,"1447":5,"1449":2,"1453":1,"1454":1,"1455":6,"1456":1,"1458":2,"1459":1,"1460":2,"1465":5,"1467":26,"1474":3,"1475":3,"1476":1,"1478":1,"1479":1,"1487":3,"1488":5,"1489":3,"1490":2,"1491":1,"1492":4,"1496":15,"1504":1,"1517":1,"1532":1,"1534":2,"1577":1,"1582":1,"1591":3,"1599":1,"1610":1,"1611":2,"1619":1,"1627":2,"1636":1,"1640":1,"1644":1,"1645":2,"1653":1,"1658":1,"1660":1,"1673":1,"1675":1,"1678":1,"1685":1,"1686":2,"1687":1,"1689":1,"1699":1,"1701":1,"1708":1,"1720":1,"1723":1,"1724":1,"1725":1,"1727":4,"1728":1,"1744":1,"1748":1,"1749":1,"1750":1,"1755":1,"1760":1,"1761":1,"1769":1,"1777":1,"1785":1,"1791":1,"1814":1,"1840":1,"1842":1,"1844":1,"1849":1,"1851":1,"1854":1,"1856":1,"1859":1,"1860":1,"1861":1,"1868":1,"1898":2,"1911":1,"1914":1,"1916":1,"1919":1,"1920":2,"1923":1,"1929":1,"1930":1,"1948":1,"1970":1,"1976":1,"2000":2,"2024":1,"2044":1,"2045":1,"2047":2,"2048":1,"2053":2,"2055":1,"2056":1,"2058":1,"2064":1,"2068":1,"2073":1,"2074":1,"2078":2,"2084":1,"2089":1,"2094":1,"2099":1,"2100":2,"2122":1,"2131":1,"2142":1,"2146":1,"2158":1,"2166":2,"2167":2,"2168":3,"2174":1,"2195":1,"2198":1,"2201":1,"2232":1}}],["abs",{"3":{"1300":2,"1324":1}}],["abstain",{"3":{"1300":1}}],["abstains",{"3":{"1300":1}}],["abstaining",{"3":{"1300":1}}],["abstractlocalizationinterceptor",{"3":{"1324":3}}],["abstracted",{"3":{"1324":2,"1641":1}}],["abstractvalidator",{"2":{"1353":1,"1829":1,"1830":1},"3":{"1271":13,"1300":9,"1309":1,"1353":1,"1359":102,"1396":2,"1402":8,"1415":4,"1436":7,"1829":2,"1830":1}}],["abstracting",{"3":{"1247":1,"1324":1}}],["abstraction",{"0":{"1915":1},"1":{"410":1,"411":1,"412":1,"413":1,"414":1,"415":1,"416":1,"1417":1},"3":{"0":5,"13":1,"39":1,"150":1,"225":1,"226":1,"230":1,"243":1,"248":1,"319":1,"359":1,"361":1,"380":1,"381":1,"410":1,"439":1,"459":1,"460":1,"507":1,"510":1,"513":1,"640":2,"707":1,"732":1,"799":1,"810":1,"815":1,"827":1,"846":2,"1033":1,"1059":1,"1075":1,"1090":1,"1091":1,"1092":1,"1120":1,"1133":1,"1192":3,"1202":3,"1203":3,"1212":1,"1213":2,"1243":1,"1247":3,"1259":2,"1270":4,"1271":1,"1286":18,"1300":13,"1301":5,"1303":1,"1309":5,"1310":2,"1311":9,"1316":1,"1323":3,"1324":10,"1339":4,"1350":2,"1355":1,"1359":15,"1369":1,"1395":5,"1396":16,"1402":1,"1414":1,"1415":3,"1416":2,"1417":12,"1427":5,"1429":1,"1436":27,"1438":1,"1490":1,"1491":1,"1496":2,"1526":1,"1599":1,"1641":1,"1669":1,"1790":1,"1815":3,"1817":1,"1842":1,"1867":1,"1936":1,"1946":1,"1948":1,"1950":1,"1994":1,"2001":1,"2028":1,"2078":1,"2116":2,"2117":1,"2118":1,"2120":1,"2123":1,"2126":1,"2142":1,"2145":1,"2153":1,"2180":1,"2193":1,"2232":3}}],["abstractions",{"2":{"109":1,"1229":1,"1653":1,"1702":1},"3":{"0":2,"39":1,"43":1,"109":6,"166":1,"225":1,"226":1,"230":1,"434":1,"506":1,"507":1,"508":1,"549":1,"725":1,"1050":1,"1074":1,"1090":1,"1168":1,"1203":12,"1207":40,"1212":1,"1219":3,"1220":1,"1222":1,"1227":1,"1228":1,"1229":25,"1237":2,"1270":4,"1271":6,"1278":1,"1286":9,"1300":9,"1301":1,"1302":2,"1309":6,"1310":1,"1311":2,"1312":8,"1323":2,"1324":8,"1339":1,"1350":5,"1351":1,"1359":21,"1369":1,"1381":1,"1395":5,"1396":10,"1402":3,"1415":5,"1436":21,"1438":2,"1489":2,"1496":1,"1509":1,"1538":1,"1577":3,"1653":1,"1656":1,"1660":1,"1702":1,"1789":1,"1793":1,"2016":1,"2026":1,"2028":2,"2043":1,"2111":1,"2227":1,"2230":1}}],["abstractfitnesscontrollerbase",{"3":{"1199":3,"1207":1,"1436":6}}],["abstractanonymousfixturecontrollerbase",{"3":{"1199":4,"1207":1,"1436":5}}],["abstracts",{"3":{"434":1,"507":2,"1324":1,"1416":1,"1417":2,"1496":1}}],["abstract",{"2":{"1051":1},"3":{"0":13,"47":1,"130":1,"132":1,"135":1,"136":1,"137":1,"140":1,"160":1,"166":1,"255":1,"314":1,"443":1,"536":1,"545":1,"549":2,"572":3,"583":1,"657":2,"723":1,"725":3,"726":2,"800":1,"881":1,"905":1,"907":1,"926":2,"953":1,"972":3,"973":1,"975":2,"1033":1,"1050":3,"1051":1,"1052":1,"1059":1,"1083":1,"1087":1,"1114":1,"1116":1,"1117":1,"1119":1,"1161":1,"1168":2,"1169":1,"1170":1,"1192":1,"1202":1,"1203":1,"1212":4,"1214":1,"1226":1,"1229":4,"1234":1,"1237":10,"1239":2,"1247":8,"1259":19,"1265":4,"1270":21,"1272":1,"1273":2,"1284":1,"1286":30,"1287":1,"1289":2,"1294":1,"1300":15,"1301":1,"1311":24,"1322":1,"1323":38,"1324":11,"1334":1,"1339":6,"1359":30,"1360":1,"1363":2,"1369":5,"1380":1,"1384":1,"1395":23,"1396":6,"1412":1,"1415":14,"1417":2,"1427":2,"1428":1,"1429":1,"1431":4,"1433":1,"1436":193,"1488":8,"1489":1,"1496":1,"1510":1,"1526":2,"1539":1,"1565":1,"1576":1,"1577":4,"1650":1,"1651":2,"1658":1,"1664":1,"1671":1,"1697":1,"1700":1,"1719":1,"1734":1,"1782":1,"1810":2,"1815":2,"1833":1,"1849":1,"1857":1,"1869":1,"1931":1,"2042":1,"2055":2,"2072":1,"2074":1,"2101":2,"2102":1,"2111":1,"2114":2,"2178":2,"2232":1}}],["absexp",{"3":{"245":1,"1301":1,"1438":1}}],["absent",{"1":{"807":1,"808":1,"809":1,"810":1,"811":1,"812":1,"813":1,"814":1,"815":1},"3":{"0":7,"66":1,"74":1,"135":1,"157":1,"158":1,"160":2,"177":1,"178":1,"259":1,"265":1,"303":1,"318":1,"343":1,"397":3,"402":1,"404":1,"409":1,"413":1,"415":1,"468":1,"469":1,"486":1,"490":1,"491":1,"492":1,"493":1,"501":1,"545":1,"583":1,"585":2,"599":2,"608":2,"610":1,"632":1,"658":1,"665":2,"673":1,"674":4,"684":1,"702":1,"703":1,"713":1,"726":1,"727":1,"741":1,"789":1,"798":1,"799":1,"807":1,"808":1,"809":3,"813":2,"827":3,"829":1,"904":1,"905":2,"915":1,"926":2,"946":1,"964":1,"972":1,"974":1,"997":1,"999":1,"1018":1,"1020":1,"1033":1,"1091":1,"1093":1,"1108":1,"1109":1,"1212":2,"1253":1,"1259":4,"1264":1,"1270":5,"1271":1,"1275":1,"1281":1,"1286":22,"1291":1,"1300":19,"1301":2,"1304":1,"1309":8,"1311":13,"1312":2,"1315":1,"1320":1,"1323":15,"1324":19,"1326":1,"1328":1,"1332":2,"1333":1,"1335":1,"1336":1,"1339":19,"1342":1,"1343":1,"1344":1,"1350":15,"1353":1,"1359":38,"1368":2,"1369":4,"1377":1,"1380":5,"1391":2,"1395":13,"1396":22,"1402":6,"1406":3,"1415":16,"1416":1,"1417":17,"1425":1,"1427":3,"1430":1,"1431":1,"1432":1,"1435":2,"1436":52,"1438":2,"1441":2,"1442":4,"1443":1,"1450":1,"1451":1,"1455":2,"1463":1,"1467":5,"1472":2,"1486":2,"1488":2,"1489":1,"1490":1,"1492":1,"1496":3,"1526":1,"1534":1,"1537":1,"1571":1,"1575":1,"1577":4,"1582":2,"1583":1,"1584":2,"1591":2,"1596":1,"1600":1,"1612":1,"1631":1,"1635":1,"1639":3,"1670":1,"1684":1,"1749":1,"1797":1,"1823":1,"1856":1,"1881":1,"1923":1,"1927":1,"1934":1,"1941":1,"1948":1,"1970":1,"1975":1,"1982":1,"1984":1,"1994":2,"2008":1,"2010":1,"2047":1,"2067":1,"2118":1,"2120":1,"2156":2,"2158":2,"2171":1,"2175":1,"2177":1,"2179":2,"2180":1,"2196":1,"2203":1,"2232":2}}],["absences",{"3":{"915":1,"1359":1,"1436":1,"2177":1}}],["absence",{"0":{"2173":1},"3":{"0":6,"109":1,"126":1,"136":1,"160":1,"189":1,"233":1,"401":1,"404":1,"468":1,"487":1,"583":3,"585":2,"592":1,"626":2,"627":1,"629":1,"643":1,"674":1,"690":1,"696":1,"698":1,"768":1,"800":1,"811":1,"813":1,"814":1,"838":1,"861":1,"876":1,"912":1,"913":1,"916":1,"931":1,"972":1,"994":1,"1033":1,"1050":1,"1052":1,"1059":2,"1092":1,"1093":1,"1141":1,"1150":1,"1212":1,"1225":1,"1247":1,"1259":2,"1264":1,"1270":1,"1274":1,"1277":1,"1286":6,"1296":1,"1300":3,"1301":1,"1323":3,"1324":5,"1339":3,"1350":9,"1359":11,"1380":1,"1395":5,"1396":9,"1415":3,"1417":7,"1421":1,"1427":1,"1436":10,"1447":1,"1467":1,"1476":1,"1585":1,"1674":1,"1685":1,"1702":1,"1708":1,"1731":1,"1794":1,"1795":1,"1821":1,"2001":1,"2179":1,"2180":1,"2193":1,"2197":1,"2199":1,"2203":1,"2232":1}}],["absorbing",{"3":{"1339":1,"1577":1}}],["absorbed",{"3":{"235":1,"743":1,"800":1,"883":1,"1150":1,"1258":1,"1259":3,"1323":1,"1324":2,"1350":1,"1359":2,"1380":1,"1396":4,"1402":1,"1436":1,"1450":1,"1496":1,"2112":1}}],["absorb",{"3":{"33":1,"111":1,"390":1,"609":1,"642":1,"799":1,"1157":1,"1259":1,"1270":1,"1300":1,"1301":1,"1311":2,"1402":1,"1417":1,"1467":1,"1534":1,"1947":1,"2027":1,"2165":1}}],["absorbs",{"3":{"18":1,"141":1,"162":1,"201":1,"239":1,"244":2,"735":1,"863":1,"897":1,"1254":1,"1300":1,"1327":1,"1339":2,"1395":1,"1444":1,"1456":1,"1475":1,"1571":1,"1671":1,"1806":1,"1922":1}}],["absorption",{"3":{"0":1,"201":1}}],["absolutepath",{"3":{"1339":1,"1436":5}}],["absolutes",{"3":{"1324":1}}],["absoluteuri",{"3":{"1324":1,"1415":1}}],["absoluteurl",{"3":{"1324":2,"1384":1,"1395":12}}],["absoluteurlrules<",{"3":{"1271":2}}],["absoluteurlrules",{"2":{"1829":1},"3":{"1199":12,"1203":1,"1207":1,"1271":5,"1324":2,"1353":1,"1359":28,"1829":1}}],["absoluteurlattributetests",{"3":{"1199":1,"1207":5,"1438":2}}],["absoluteurlattribute",{"2":{"1669":1},"3":{"1199":1,"1203":1,"1207":2,"1271":3,"1324":8,"1395":7,"1669":1}}],["absoluteexpirationrelativetonow",{"2":{"243":1,"254":1,"257":1,"1301":1},"3":{"243":1,"254":1,"257":1,"1301":3}}],["absolutely",{"3":{"0":1,"591":1,"1492":1,"2047":1,"2049":1,"2232":1}}],["absolute",{"3":{"0":4,"219":1,"243":1,"350":1,"420":1,"500":2,"501":2,"590":1,"591":2,"592":3,"631":1,"860":3,"862":2,"1116":1,"1184":1,"1212":2,"1237":3,"1271":3,"1286":1,"1300":2,"1301":2,"1311":1,"1323":7,"1324":34,"1334":1,"1339":6,"1344":1,"1350":4,"1359":29,"1369":1,"1388":1,"1395":6,"1396":1,"1417":5,"1427":2,"1436":4,"1438":1,"1443":1,"1467":1,"1492":5,"1496":1,"1526":1,"1631":4,"1640":1,"1666":1,"1708":1,"1749":1,"1764":1,"1765":1,"1767":1,"1976":1,"1984":2,"1985":1,"2047":4,"2126":1}}],["apm",{"3":{"1894":1}}],["aps",{"3":{"1323":3,"1417":1}}],["apache",{"3":{"0":1,"440":1,"1075":1,"1577":1,"1673":1,"1780":1,"1787":1,"1793":1,"1802":1,"1807":1,"1812":1,"1817":1,"1827":1,"1834":1,"1846":1,"1853":1,"1862":1,"1868":1,"1877":1,"1886":1,"1892":1,"1899":1,"1905":1,"1912":1,"1924":1,"1930":1,"1941":1,"1950":1,"1959":1,"1965":1,"1972":1,"1979":1,"1985":1,"1991":1,"1997":1,"2002":1,"2014":1,"2028":1,"2038":1,"2049":1,"2060":1,"2069":1,"2080":1,"2086":1,"2098":1,"2108":1,"2115":1,"2123":1,"2127":1,"2139":1,"2146":1,"2153":1,"2204":1,"2211":1,"2216":1,"2229":1,"2234":1,"2242":1}}],["apart",{"3":{"0":2,"23":1,"62":1,"109":1,"235":1,"397":1,"449":1,"626":2,"629":1,"648":1,"691":1,"767":1,"783":1,"784":1,"799":1,"881":1,"974":1,"1059":1,"1068":1,"1083":1,"1124":1,"1126":1,"1191":1,"1211":1,"1237":3,"1238":1,"1240":1,"1247":2,"1259":1,"1270":3,"1271":2,"1280":1,"1281":1,"1286":5,"1290":1,"1299":1,"1300":8,"1301":3,"1305":1,"1309":4,"1311":3,"1323":3,"1324":10,"1325":1,"1332":1,"1339":5,"1350":5,"1358":2,"1359":25,"1369":1,"1371":1,"1380":2,"1395":10,"1396":18,"1398":1,"1402":6,"1405":1,"1410":1,"1415":7,"1416":1,"1417":3,"1436":6,"1438":2,"1441":1,"1443":2,"1458":1,"1459":2,"1487":1,"1488":1,"1496":1,"1503":1,"1653":1,"1677":1,"1748":1,"1805":1,"1834":1,"1948":1,"1982":1,"2055":1,"2083":1,"2130":1,"2131":1,"2167":1}}],["april",{"3":{"0":1,"1074":1}}],["apnsplatform",{"3":{"1309":1}}],["apnspushdevicetokenprovider",{"2":{"434":1,"436":1},"3":{"434":2,"436":2,"1416":1,"1417":4}}],["apnstokenbridge",{"2":{"436":1},"3":{"436":1,"1416":3,"1417":1}}],["apns",{"3":{"0":2,"413":1,"432":1,"433":2,"434":1,"435":1,"436":1,"1286":1,"1308":1,"1309":3,"1323":7,"1416":6,"1417":15,"1467":1,"1481":1,"1496":1,"1669":2,"1932":1,"1936":1,"1940":1,"2122":1,"2232":1}}],["api1",{"3":{"1993":1}}],["apibase",{"3":{"1417":1}}],["apibaseaddress",{"3":{"1311":1}}],["api=1",{"3":{"1417":1}}],["apiuri",{"3":{"1324":1}}],["apiuserpreferencereader",{"3":{"1199":2,"1203":1,"1207":2,"1300":2,"1324":11,"1496":1}}],["apiuserpreferencewritertests",{"3":{"1199":1,"1207":2,"1324":1,"1438":2}}],["apiuserpreferencewriter",{"3":{"1199":3,"1203":1,"1207":3,"1300":2,"1324":31}}],["apioptions",{"3":{"1324":2}}],["apiece",{"3":{"1396":1}}],["apiexplorer",{"3":{"1311":1}}],["apiexplorersettings",{"3":{"1311":1}}],["apiendpoint",{"2":{"1188":1},"3":{"1184":2,"1188":1,"1324":30,"1416":2,"1436":3,"1441":1,"1489":1,"2150":1}}],["apidesign",{"3":{"1286":1,"1324":1}}],["apidescription",{"2":{"451":1,"452":1},"3":{"451":1,"452":1,"1311":1}}],["apifiledownloadbuttontests",{"3":{"1199":1,"1207":2,"1324":1,"1438":2}}],["apifiledownloadbutton",{"3":{"1184":2,"1199":2,"1203":1,"1207":2,"1324":12,"1436":3}}],["apikeycredential",{"2":{"1420":1},"3":{"1420":1,"1427":2}}],["apikey",{"2":{"1017":1,"2173":1},"3":{"1017":2,"1091":2,"1096":1,"1419":3,"1427":7,"1467":2,"1492":1,"2173":2}}],["apiparameterdescription",{"2":{"448":1,"2131":1},"3":{"448":1,"2131":1}}],["apiparameterdescriptorbackfillprovidertests",{"3":{"1199":1,"1207":4}}],["apiparameterdescriptorbackfillprovider",{"2":{"448":1,"2131":1},"3":{"0":1,"448":2,"1199":3,"1203":1,"1207":2,"1311":11,"2131":2}}],["apiversioningtests",{"3":{"448":3,"572":3,"1199":1,"1207":2,"1436":2,"1488":1,"1526":1,"1535":1,"1591":1,"2131":2}}],["apiversion",{"2":{"450":1,"455":1,"1753":1,"1978":1,"2132":1},"3":{"330":1,"350":1,"448":4,"450":1,"455":2,"1309":2,"1311":7,"1376":3,"1380":5,"1415":5,"1436":3,"1489":1,"1496":1,"1526":1,"1591":2,"1753":1,"1978":1,"1988":1,"2131":3,"2132":2}}],["apicontrollerattribute",{"3":{"1436":1}}],["apicontroller",{"2":{"455":1,"1978":1},"3":{"330":1,"350":1,"455":1,"1309":1,"1311":7,"1380":2,"1415":4,"1436":2,"1978":1,"1988":1}}],["apicontrollerbasetests",{"3":{"1199":2,"1207":3,"1311":2}}],["apicontrollerbase",{"2":{"109":1,"111":1,"265":1,"300":1,"1224":1,"1498":1,"1805":1,"1930":1,"2018":1},"3":{"109":6,"111":1,"265":1,"300":2,"306":1,"1199":31,"1203":1,"1207":2,"1224":5,"1229":4,"1270":1,"1300":1,"1309":4,"1311":38,"1312":3,"1323":1,"1371":2,"1380":8,"1396":6,"1402":3,"1415":4,"1436":11,"1438":1,"1487":1,"1489":1,"1496":2,"1498":1,"1805":1,"1927":1,"1930":1,"2018":1}}],["apiclientname",{"3":{"1324":4}}],["apiclientregistrationtests",{"3":{"1199":1,"1207":2,"1324":1}}],["apiclient",{"3":{"0":2,"265":1,"507":1,"514":1,"881":1,"883":1,"1183":1,"1184":2,"1324":38,"1395":2,"1396":7,"1416":3,"1417":3,"1436":4,"1438":1,"2074":1}}],["apisectionname",{"2":{"1324":1},"3":{"1324":3}}],["apisettings",{"2":{"216":1,"219":1,"1184":1,"2152":1},"3":{"214":1,"216":2,"219":1,"649":1,"674":1,"881":1,"1184":2,"1188":1,"1199":24,"1203":1,"1207":2,"1324":29,"1417":1,"1436":1,"1496":1,"1653":1,"2150":2,"2152":2}}],["apis",{"1":{"1906":1,"1907":1,"1908":1,"1909":1,"1910":1,"1911":1,"1912":1},"3":{"0":1,"412":1,"447":1,"774":1,"1050":1,"1311":1,"1324":1,"1339":2,"1350":1,"1369":1,"1380":1,"1396":1,"1415":2,"1417":4,"1436":4,"1546":1,"1548":1,"1627":1,"1735":1,"1906":1,"1926":1,"1993":1,"2116":1,"2129":1,"2130":1,"2133":1,"2208":1}}],["api",{"0":{"138":1,"1546":1,"1640":1,"1666":1,"2166":1,"2201":1,"2208":1},"1":{"445":1,"446":1,"447":1,"448":1,"449":1,"450":1,"451":1,"452":1,"453":1,"454":1,"455":1,"1181":1,"1182":1,"1183":1,"1184":1,"1185":1,"1186":1,"1187":1,"1188":1,"1189":1,"1311":1,"1370":1,"1371":1,"1372":1,"1373":1,"1374":1,"1375":1,"1376":1,"1377":1,"1378":1,"1379":1,"1380":1,"1998":1,"1999":1,"2000":1,"2001":1,"2002":1,"2129":1,"2130":1,"2131":1,"2132":1,"2133":1},"2":{"61":1,"160":1,"207":1,"250":1,"252":1,"388":1,"460":1,"509":1,"527":1,"789":1,"826":1,"938":1,"1020":2,"1207":1,"1271":1,"1336":1,"1370":1,"1380":7,"1455":1,"1466":1,"1470":1,"1472":1,"1489":1,"1504":1,"1615":1,"1648":1,"1650":2,"1653":1,"1702":1,"1793":1,"1807":1,"1812":1,"1817":1,"1827":1,"1846":1,"1853":1,"1868":1,"1877":1,"1886":1,"1892":1,"1899":1,"1912":1,"1924":1,"1930":1,"1941":1,"1965":1,"1972":1,"1975":1,"1979":1,"1991":1,"1997":1,"2002":1,"2014":1,"2115":1,"2133":1,"2169":1,"2180":1,"2193":1,"2203":1,"2211":1},"3":{"0":26,"4":1,"31":1,"34":1,"42":1,"58":1,"59":1,"61":1,"81":2,"99":1,"103":2,"109":15,"110":1,"111":2,"113":1,"125":2,"130":4,"135":7,"138":1,"139":1,"140":1,"141":1,"142":2,"143":1,"147":1,"150":1,"157":2,"160":5,"161":2,"166":1,"175":3,"178":3,"179":3,"181":1,"186":11,"189":4,"190":2,"206":2,"207":5,"208":2,"209":4,"210":1,"212":1,"213":2,"214":2,"215":1,"216":2,"220":2,"225":1,"235":1,"238":1,"241":1,"243":17,"245":1,"246":1,"250":1,"252":1,"255":4,"256":4,"258":4,"259":3,"265":6,"290":1,"295":2,"296":1,"300":3,"301":1,"303":2,"306":3,"318":13,"325":3,"330":4,"332":1,"337":1,"341":6,"342":1,"343":1,"345":1,"350":1,"352":3,"354":1,"384":2,"386":1,"387":1,"388":3,"391":2,"397":1,"400":1,"407":2,"409":1,"418":2,"419":2,"423":2,"424":1,"426":1,"428":1,"434":3,"445":1,"446":1,"448":20,"449":1,"450":1,"453":1,"454":2,"458":1,"459":4,"460":1,"463":1,"464":2,"470":1,"483":1,"506":3,"507":3,"509":3,"511":2,"517":2,"527":2,"528":6,"539":1,"540":1,"545":3,"549":1,"550":1,"551":1,"556":2,"558":2,"571":2,"572":1,"576":1,"579":1,"583":13,"585":1,"586":2,"591":1,"626":3,"627":2,"628":1,"629":1,"635":1,"656":1,"657":4,"660":1,"674":11,"675":2,"676":2,"690":1,"691":1,"692":1,"698":3,"707":1,"723":1,"725":6,"727":1,"728":1,"733":2,"734":1,"740":3,"741":6,"743":3,"744":1,"749":4,"751":1,"773":2,"774":4,"775":1,"776":2,"789":3,"790":2,"793":1,"799":1,"803":1,"826":1,"827":4,"829":1,"833":1,"854":1,"880":2,"881":6,"882":1,"883":1,"897":3,"905":1,"906":1,"921":1,"922":1,"938":2,"939":1,"940":1,"942":1,"956":1,"960":1,"963":1,"964":3,"965":1,"966":1,"968":1,"972":1,"975":1,"976":1,"979":2,"980":20,"981":1,"982":1,"983":1,"984":1,"995":1,"996":3,"999":1,"1003":1,"1004":7,"1006":3,"1007":1,"1008":2,"1011":1,"1012":1,"1017":2,"1018":3,"1020":2,"1026":2,"1034":2,"1035":1,"1049":1,"1050":5,"1052":2,"1053":1,"1055":2,"1058":1,"1059":3,"1061":2,"1067":2,"1076":1,"1078":1,"1091":1,"1099":2,"1103":1,"1108":2,"1116":3,"1117":1,"1119":1,"1124":4,"1150":2,"1161":1,"1163":1,"1170":1,"1174":1,"1175":1,"1176":1,"1181":1,"1182":1,"1183":5,"1184":9,"1185":3,"1186":6,"1187":5,"1188":2,"1192":5,"1198":6,"1199":408,"1201":2,"1202":6,"1203":206,"1206":10,"1207":1344,"1208":60,"1211":3,"1212":11,"1213":4,"1216":1,"1218":1,"1222":2,"1224":1,"1225":1,"1226":1,"1227":2,"1229":30,"1234":1,"1235":1,"1237":21,"1239":1,"1241":2,"1245":2,"1247":26,"1249":2,"1259":13,"1266":1,"1269":2,"1270":23,"1271":11,"1281":1,"1285":1,"1286":36,"1287":2,"1288":3,"1289":1,"1290":1,"1294":1,"1297":14,"1298":9,"1300":422,"1301":14,"1303":1,"1304":4,"1306":1,"1308":6,"1309":59,"1310":1,"1311":540,"1312":9,"1314":1,"1315":3,"1320":2,"1323":63,"1324":214,"1336":2,"1337":2,"1338":1,"1339":23,"1341":2,"1347":6,"1348":1,"1349":1,"1350":59,"1351":1,"1353":1,"1358":6,"1359":299,"1364":3,"1365":1,"1367":1,"1369":9,"1370":5,"1371":7,"1372":2,"1373":2,"1374":1,"1376":5,"1377":8,"1379":2,"1380":254,"1382":5,"1384":1,"1387":4,"1389":6,"1390":2,"1391":2,"1395":84,"1396":229,"1401":1,"1402":77,"1403":1,"1404":1,"1406":4,"1408":1,"1409":1,"1410":1,"1411":1,"1412":1,"1414":2,"1415":182,"1416":8,"1417":32,"1420":1,"1421":1,"1425":1,"1427":3,"1431":3,"1435":2,"1436":290,"1437":19,"1438":27,"1441":5,"1443":2,"1444":1,"1447":2,"1454":3,"1455":9,"1466":2,"1467":9,"1470":1,"1472":3,"1475":1,"1481":4,"1486":4,"1487":6,"1488":3,"1489":10,"1492":6,"1493":1,"1496":52,"1499":1,"1503":1,"1504":1,"1509":1,"1513":2,"1524":1,"1526":13,"1530":1,"1531":2,"1532":1,"1534":1,"1535":3,"1540":1,"1546":2,"1547":1,"1551":1,"1563":1,"1577":22,"1582":5,"1583":1,"1585":3,"1586":2,"1591":8,"1596":1,"1597":1,"1600":1,"1602":1,"1611":1,"1615":1,"1619":1,"1627":4,"1630":2,"1631":7,"1632":76,"1635":1,"1636":2,"1638":1,"1639":21,"1640":27,"1641":10,"1647":2,"1648":1,"1650":2,"1651":3,"1653":10,"1656":1,"1660":3,"1661":1,"1662":1,"1663":1,"1665":1,"1666":1,"1669":3,"1670":1,"1673":3,"1675":1,"1681":1,"1685":3,"1686":2,"1687":1,"1689":1,"1693":1,"1698":3,"1702":4,"1707":1,"1718":3,"1719":9,"1722":1,"1724":2,"1727":4,"1728":2,"1729":2,"1732":1,"1736":2,"1737":1,"1749":1,"1750":1,"1753":3,"1755":1,"1761":2,"1765":5,"1770":2,"1771":1,"1773":1,"1776":1,"1779":4,"1781":1,"1793":1,"1796":1,"1805":2,"1807":1,"1810":1,"1812":1,"1817":1,"1821":1,"1827":1,"1831":1,"1834":1,"1844":1,"1846":1,"1853":1,"1868":1,"1871":1,"1877":1,"1883":1,"1886":1,"1892":1,"1895":1,"1898":2,"1899":1,"1912":3,"1913":1,"1919":1,"1921":1,"1922":3,"1924":1,"1927":1,"1928":2,"1929":3,"1930":3,"1931":1,"1932":2,"1941":1,"1951":1,"1959":2,"1965":1,"1966":2,"1967":2,"1968":4,"1971":5,"1972":4,"1975":1,"1979":1,"1985":1,"1988":2,"1990":2,"1991":4,"1993":1,"1994":4,"1995":7,"1997":4,"1998":1,"2000":6,"2001":1,"2002":2,"2004":1,"2012":1,"2014":1,"2021":1,"2024":1,"2043":2,"2055":1,"2066":1,"2070":1,"2071":1,"2074":1,"2080":1,"2081":1,"2083":4,"2088":1,"2089":1,"2097":1,"2101":1,"2104":2,"2105":1,"2106":1,"2107":1,"2111":1,"2115":1,"2128":1,"2129":2,"2130":1,"2131":9,"2132":1,"2133":5,"2136":1,"2137":1,"2138":1,"2139":1,"2147":2,"2149":1,"2150":2,"2152":2,"2153":3,"2156":1,"2169":1,"2172":1,"2180":1,"2193":1,"2194":1,"2200":1,"2203":1,"2208":1,"2210":2,"2211":1,"2213":1,"2219":2,"2220":4,"2225":1,"2227":4,"2232":2,"2236":1,"2239":1}}],["app→db",{"3":{"1526":1}}],["apptraces",{"3":{"1467":3,"1476":1}}],["appthemebinding",{"3":{"1416":1}}],["apptheme",{"3":{"1416":2}}],["appxmanifest",{"3":{"1416":2}}],["appwidgetmanager",{"3":{"1416":1}}],["appwidgetprovider",{"3":{"1416":1}}],["appicon",{"3":{"1416":1}}],["appcontext",{"2":{"1035":1},"3":{"1034":1,"1035":1,"1427":2,"1436":1,"1489":1}}],["apparent",{"3":{"1214":1}}],["appaction",{"3":{"1416":3}}],["appactions",{"3":{"1416":5}}],["appactionsinitializer",{"2":{"428":1},"3":{"428":1,"1199":2,"1203":1,"1207":2,"1416":17}}],["appactionroutemaptests",{"3":{"1199":1,"1207":2,"1324":2,"1416":2,"1438":1}}],["appactionroutemap",{"2":{"428":1},"3":{"428":1,"1199":4,"1203":1,"1207":2,"1416":18}}],["appassociationendpointtests",{"3":{"1199":1,"1207":2,"1311":2}}],["appassociationendpointextensions",{"3":{"418":2,"423":1,"424":1,"1199":2,"1203":1,"1207":2,"1208":1,"1311":7,"1496":1}}],["appassociation",{"2":{"429":1},"3":{"418":2,"423":1,"424":1,"425":1,"426":1,"428":2,"429":2,"1311":2,"1481":1}}],["appassociationoptions",{"2":{"418":1,"425":1,"426":1,"428":1},"3":{"418":1,"425":1,"426":1,"428":1,"429":1,"1199":3,"1203":1,"1207":2,"1311":12,"1496":1}}],["appassembly",{"3":{"0":1,"649":1,"905":1,"1416":1}}],["appdatadirectory",{"3":{"1417":1}}],["appdelegate",{"3":{"1199":2,"1203":1,"1207":4,"1212":1,"1416":24,"1417":3,"1496":4}}],["appdependencies",{"2":{"1476":1},"3":{"402":1,"1333":1,"1339":2,"1443":1,"1446":1,"1447":1,"1467":4,"1476":1,"1677":2}}],["appdomainsource",{"3":{"1417":1}}],["appdomain",{"2":{"413":1},"3":{"413":1,"1212":1,"1286":5,"1311":1,"1315":2,"1323":1,"1416":2,"1417":5,"1881":1}}],["appraisal",{"3":{"2220":1}}],["appraiser",{"3":{"2220":1}}],["appresumedeventargs",{"3":{"1199":4,"1203":1,"1207":2,"1417":10,"1496":1}}],["apprendermode",{"3":{"556":1}}],["apprequests",{"2":{"612":1,"1450":1,"1451":1},"3":{"402":1,"612":1,"1333":1,"1339":2,"1443":3,"1446":1,"1447":1,"1450":1,"1451":1,"1467":7,"1476":1,"1677":1,"2010":1}}],["approvals",{"3":{"1455":1}}],["approval",{"3":{"1402":2,"1436":3,"1457":1,"1461":1,"1467":1,"1641":1,"1765":1}}],["approving",{"3":{"1350":1,"1396":1,"1399":1,"1402":1,"1426":1,"1459":1,"1632":1}}],["approvequestionasync",{"3":{"1402":1}}],["approveasync",{"3":{"1396":2,"1402":1}}],["approve",{"3":{"1396":2,"1397":1,"1398":1,"1402":17,"1436":1,"1526":1}}],["approves",{"3":{"1349":1,"1350":1,"1402":1,"1632":1}}],["approver",{"3":{"628":1}}],["approvedquestions",{"3":{"1402":2}}],["approved",{"3":{"522":1,"523":1,"524":1,"1100":1,"1286":1,"1311":1,"1349":1,"1350":4,"1396":4,"1398":2,"1399":1,"1401":3,"1402":46,"1436":1,"1496":16,"1630":2,"1632":8,"2043":1}}],["approximation",{"3":{"1286":1,"1427":1,"1500":2,"2059":1}}],["approximates",{"3":{"1436":1}}],["approximated",{"3":{"1436":1}}],["approximate",{"3":{"827":1,"1339":1,"1417":4,"1427":1,"1591":1}}],["approlename",{"3":{"609":1,"1467":1}}],["appropriately",{"3":{"1237":1,"1562":1}}],["appropriate",{"3":{"86":1,"1286":1,"1324":1,"1350":1,"1416":1,"1417":1,"1539":1,"1549":1,"1568":1,"1632":2,"1639":2,"1765":1}}],["approachingquota",{"2":{"403":1,"612":1},"3":{"403":1,"612":1}}],["approach",{"3":{"69":1,"79":1,"131":1,"455":1,"1060":1,"1259":1,"1286":1,"1395":1,"1436":7,"1445":1,"1638":1,"1639":1,"1819":1,"1830":1,"1889":1}}],["approaches",{"3":{"4":1,"1153":1,"1323":1,"1324":1,"1396":1,"1943":1}}],["appbarbackground",{"3":{"1324":1}}],["appbarcomponenttypes",{"2":{"649":1,"650":1},"3":{"649":2,"650":1,"1324":3,"1395":1}}],["appbar",{"3":{"273":1,"1436":2,"2083":1}}],["appmetrics",{"3":{"0":1,"914":1,"1443":2,"1451":1,"1467":9,"1476":1,"1677":2}}],["appetite",{"3":{"2032":1}}],["appearance",{"3":{"1212":1,"1324":1,"2230":1}}],["appearing",{"3":{"629":1,"827":1,"840":1,"1369":2,"1396":1,"1417":1,"1436":7,"1468":1,"1488":2}}],["appeared",{"3":{"254":1,"454":1,"1324":2,"1492":1,"2119":1}}],["appear",{"3":{"37":1,"303":1,"502":1,"564":1,"799":1,"812":1,"964":1,"1116":1,"1247":2,"1270":1,"1285":1,"1286":5,"1300":3,"1309":1,"1311":1,"1323":3,"1324":4,"1339":3,"1350":2,"1359":6,"1395":7,"1396":6,"1402":2,"1404":1,"1415":2,"1416":3,"1417":4,"1433":1,"1436":28,"1438":4,"1441":1,"1467":3,"1470":1,"1489":1,"1496":1,"1499":1,"1625":1,"1626":2,"1627":1,"1631":1,"1700":1,"1760":1,"1764":1,"2016":1}}],["appears",{"3":{"0":5,"95":1,"265":1,"349":1,"390":1,"420":1,"450":1,"470":1,"490":1,"491":1,"492":2,"493":1,"545":1,"547":1,"549":1,"550":1,"556":1,"599":1,"634":1,"639":1,"649":1,"676":2,"700":1,"773":1,"782":1,"810":1,"827":3,"832":1,"833":1,"838":1,"881":1,"891":1,"963":1,"980":1,"1004":1,"1026":1,"1079":1,"1082":1,"1085":1,"1109":1,"1116":1,"1155":1,"1190":1,"1191":1,"1193":1,"1200":1,"1202":1,"1229":2,"1242":2,"1247":2,"1270":2,"1273":1,"1286":5,"1289":1,"1300":7,"1309":1,"1311":4,"1312":1,"1323":3,"1324":5,"1339":4,"1350":3,"1358":1,"1359":15,"1369":1,"1380":2,"1395":4,"1396":7,"1402":1,"1413":1,"1415":5,"1417":4,"1425":1,"1433":2,"1436":22,"1438":2,"1443":1,"1456":1,"1467":2,"1469":1,"1489":1,"1496":3,"1526":1,"1577":2,"1582":1,"1583":1,"1626":1,"1627":1,"1630":1,"1631":2,"1632":1,"1639":1,"1651":1,"1653":2,"1654":1,"1663":1,"1698":1,"1749":1,"1815":1,"1881":1,"1913":1,"1970":1,"1993":1,"2180":1}}],["appendix",{"0":{"1572":1}}],["appending",{"3":{"749":1,"889":1,"890":2,"1267":1,"1270":1,"1281":1,"1286":4,"1300":1,"1322":1,"1324":1,"1339":2,"1359":1,"1369":1,"1395":1,"1396":1,"1411":1,"1415":1,"1436":2,"1826":1,"2232":1}}],["appendquery",{"3":{"1311":2}}],["appendevent",{"3":{"1300":1}}],["appended",{"3":{"0":4,"21":1,"122":1,"166":1,"545":1,"566":1,"583":1,"601":1,"665":1,"889":1,"890":2,"1034":1,"1140":1,"1174":1,"1195":1,"1212":1,"1242":1,"1247":2,"1270":1,"1279":1,"1286":2,"1300":3,"1311":3,"1312":1,"1323":2,"1324":5,"1339":2,"1359":1,"1369":1,"1395":1,"1415":1,"1417":1,"1436":4,"1438":2,"1455":3,"1466":4,"1661":1,"1664":1,"1701":1,"1729":1,"1749":1,"1766":1,"1779":3,"1920":1,"2089":1}}],["appendline",{"3":{"1300":2,"1496":1}}],["appendable",{"3":{"1237":1}}],["appends",{"3":{"0":1,"123":1,"177":1,"219":1,"246":1,"350":1,"549":1,"633":1,"887":1,"891":1,"905":1,"1133":1,"1237":1,"1247":3,"1267":1,"1269":1,"1270":1,"1282":1,"1286":6,"1300":10,"1311":6,"1323":2,"1324":10,"1339":2,"1359":6,"1380":5,"1383":1,"1386":1,"1388":1,"1389":1,"1395":4,"1396":1,"1402":2,"1412":1,"1415":6,"1416":5,"1417":3,"1436":6,"1489":1,"1666":1,"1727":1,"1840":1,"1852":1,"1920":1,"2197":1,"2232":1}}],["append",{"2":{"1968":1},"3":{"0":1,"137":1,"138":1,"139":1,"140":1,"265":1,"420":1,"633":1,"690":1,"692":1,"719":1,"784":1,"889":1,"891":1,"1140":1,"1142":2,"1144":1,"1179":1,"1192":1,"1212":1,"1242":1,"1281":1,"1286":6,"1300":5,"1311":1,"1323":1,"1324":6,"1359":1,"1395":1,"1396":8,"1436":1,"1467":1,"1496":4,"1629":1,"1631":1,"1638":1,"1839":1,"1968":1,"1975":1,"2232":1}}],["apphostbicepparitytests",{"3":{"1199":1,"1207":2,"1437":2,"1438":2,"1487":1,"1489":2,"1493":1}}],["apphostenvironmentrequirement",{"2":{"1069":1,"1428":1,"1430":1},"3":{"1069":1,"1199":6,"1207":2,"1339":3,"1428":1,"1430":2,"1488":2}}],["apphostenvironmentgatetests",{"3":{"1199":1,"1207":2,"1487":1}}],["apphostenvironmentgate",{"2":{"1067":1,"1430":1,"1449":1,"2056":1},"3":{"1067":3,"1199":3,"1207":2,"1428":1,"1430":4,"1449":1,"1488":2,"2056":1}}],["apphostprobepathstests",{"3":{"1199":1,"1207":2,"1487":1}}],["apphostprobepaths",{"3":{"1067":1,"1199":5,"1207":2,"1428":1,"1430":2,"1488":2}}],["apphostreadinessbudgettests",{"3":{"1199":1,"1207":2,"1487":1}}],["apphostreadinessbudget",{"2":{"1430":1},"3":{"1067":1,"1199":5,"1207":2,"1339":2,"1428":1,"1430":2,"1449":2,"1488":2}}],["apphostcompositionsmoketests",{"3":{"914":1,"1067":1,"1069":1,"1487":1,"1496":1}}],["apphosttestbase",{"2":{"2056":1},"3":{"914":1,"1067":3,"1069":1,"1199":3,"1207":2,"1328":1,"1339":1,"1428":1,"1430":2,"1449":4,"1488":2,"2055":1,"2056":1}}],["apphosttests",{"2":{"1430":1,"1437":1,"1487":1,"1488":1,"1496":1},"3":{"913":2,"917":1,"1067":2,"1069":1,"1199":3,"1203":1,"1206":1,"1207":9,"1430":2,"1437":1,"1486":1,"1487":1,"1488":1,"1496":1}}],["apphostfixturebase",{"2":{"912":1,"1069":1,"1328":1,"1460":1,"2056":1},"3":{"912":1,"913":1,"914":2,"1067":5,"1069":1,"1070":1,"1199":5,"1207":4,"1212":1,"1328":1,"1339":5,"1428":1,"1430":8,"1436":3,"1449":5,"1460":1,"1488":4,"1490":1,"1496":1,"2055":1,"2056":1}}],["apphosts",{"3":{"99":1,"555":1,"556":1,"559":1,"1339":1,"1444":1,"1487":1}}],["apphost",{"0":{"1430":1,"1441":1,"1444":1,"1449":1,"2008":1,"2022":1,"2056":1},"1":{"1064":1,"1065":1,"1066":1,"1067":1,"1068":1,"1069":1,"1070":1,"1071":1},"2":{"913":1,"914":1,"1069":2,"1325":1,"1328":1,"1449":1,"1492":1,"1657":1,"2056":1},"3":{"0":13,"31":2,"55":1,"59":2,"63":2,"92":1,"93":2,"95":2,"96":2,"98":2,"99":1,"104":2,"164":1,"166":1,"350":2,"373":1,"554":3,"556":2,"557":1,"624":1,"626":1,"629":1,"632":3,"633":4,"638":3,"640":13,"641":1,"642":4,"644":5,"837":3,"838":2,"839":2,"841":1,"854":2,"857":2,"912":2,"913":12,"914":8,"915":1,"916":2,"917":5,"918":1,"939":1,"980":1,"1033":1,"1034":1,"1037":1,"1038":1,"1064":1,"1065":1,"1066":5,"1067":14,"1068":1,"1069":7,"1070":1,"1150":2,"1192":2,"1199":4,"1202":1,"1203":5,"1206":2,"1207":12,"1208":2,"1212":5,"1213":1,"1309":3,"1311":5,"1312":2,"1323":3,"1325":3,"1326":10,"1327":2,"1328":5,"1334":1,"1339":86,"1363":1,"1364":2,"1369":3,"1377":2,"1378":2,"1380":5,"1396":4,"1407":2,"1412":1,"1415":5,"1428":1,"1430":8,"1436":7,"1437":6,"1438":5,"1439":1,"1440":3,"1441":26,"1442":2,"1444":11,"1445":1,"1446":5,"1448":1,"1449":7,"1450":1,"1451":3,"1453":7,"1455":4,"1456":6,"1460":3,"1461":2,"1464":1,"1467":2,"1486":4,"1487":5,"1488":5,"1489":5,"1490":13,"1492":6,"1493":1,"1496":6,"1503":1,"1526":9,"1535":1,"1570":1,"1577":4,"1582":1,"1596":2,"1606":1,"1627":2,"1641":1,"1653":8,"1656":1,"1657":1,"1660":1,"1661":1,"1663":1,"1670":2,"1683":1,"1684":2,"1689":1,"1692":1,"1698":1,"1700":2,"1718":5,"1720":1,"1724":1,"1727":7,"1728":1,"1729":2,"1740":1,"1792":1,"1842":1,"1978":1,"2004":2,"2005":2,"2008":4,"2009":1,"2013":1,"2014":5,"2022":1,"2028":1,"2030":1,"2055":2,"2056":3,"2060":1,"2089":1,"2097":1,"2227":1,"2232":4}}],["app",{"0":{"1291":1,"1727":1,"1937":1,"2008":1,"2113":1},"1":{"417":1,"418":1,"419":1,"420":1,"421":1,"422":1,"423":1,"424":1,"425":1,"426":1,"427":1,"428":1,"429":1,"430":1,"631":1,"632":1,"633":1,"634":1,"635":1,"636":1,"1302":1,"1303":1,"1304":1,"1305":1,"1306":1,"1307":1,"1308":1,"1309":1,"1692":1,"1693":1,"1694":1,"1695":1,"1696":1,"1697":1,"1698":1,"1699":1,"1700":1,"1701":1,"1702":1,"1703":1,"1704":1,"1705":1,"1726":1,"1727":1,"1728":1,"1729":1,"1730":1,"1731":1,"1931":1,"1932":1,"1933":1,"1934":1,"1935":1,"1936":1,"1937":1,"1938":1,"1939":1,"1940":1,"1941":1,"2003":1,"2004":1,"2005":1,"2006":1,"2007":1,"2008":1,"2009":1,"2010":1,"2011":1,"2012":1,"2013":1,"2014":1},"2":{"220":1,"254":1,"256":1,"258":1,"418":1,"425":1,"426":1,"428":1,"454":1,"464":2,"466":1,"554":1,"555":1,"559":1,"648":1,"674":1,"760":1,"774":1,"776":1,"1091":1,"1613":1,"1699":1,"1727":1,"1787":1,"1921":1,"2004":1,"2075":1,"2079":1,"2089":1,"2151":1},"3":{"0":40,"38":1,"39":1,"46":1,"60":1,"68":2,"72":1,"85":1,"92":1,"93":1,"94":2,"95":2,"96":1,"98":1,"101":1,"102":3,"145":2,"147":3,"175":3,"180":1,"186":3,"208":2,"213":2,"215":1,"216":3,"217":1,"219":3,"220":1,"223":2,"224":1,"225":2,"226":1,"230":2,"235":3,"237":1,"241":1,"242":1,"243":3,"254":1,"256":1,"258":2,"259":1,"261":1,"264":1,"265":4,"267":1,"272":1,"273":3,"276":1,"281":1,"284":1,"293":1,"309":1,"310":4,"311":1,"314":3,"349":1,"350":6,"351":3,"352":1,"355":1,"360":1,"378":1,"381":1,"382":1,"405":1,"413":7,"414":1,"417":1,"418":6,"419":8,"420":4,"422":4,"423":3,"424":1,"425":1,"426":2,"427":5,"428":4,"429":1,"433":1,"435":1,"440":1,"441":1,"454":1,"457":1,"459":10,"460":2,"461":2,"463":5,"464":4,"465":5,"466":1,"470":1,"497":3,"498":3,"499":6,"500":1,"511":4,"512":1,"545":1,"551":2,"554":1,"555":2,"556":17,"559":2,"562":1,"563":1,"564":1,"566":1,"576":1,"598":8,"599":10,"600":1,"601":6,"603":1,"617":1,"618":2,"619":1,"620":1,"626":2,"631":5,"632":1,"633":13,"634":1,"635":7,"638":2,"640":5,"641":1,"643":4,"648":2,"649":2,"650":4,"659":1,"664":2,"667":1,"672":1,"674":1,"681":2,"682":1,"683":3,"723":2,"724":8,"725":11,"726":3,"727":3,"749":6,"757":9,"758":1,"759":6,"760":1,"764":1,"765":2,"766":1,"767":1,"768":1,"774":5,"776":1,"782":1,"790":1,"793":1,"827":1,"828":1,"832":3,"833":2,"837":1,"854":3,"857":1,"861":1,"862":1,"863":2,"873":1,"904":1,"905":1,"912":1,"913":2,"914":7,"915":3,"917":1,"918":2,"932":2,"938":1,"941":1,"946":1,"954":1,"959":1,"971":1,"995":1,"998":1,"1017":2,"1018":1,"1022":1,"1034":1,"1036":1,"1037":1,"1058":4,"1059":10,"1060":2,"1063":1,"1067":1,"1083":1,"1091":1,"1092":1,"1093":1,"1117":2,"1125":1,"1126":1,"1150":1,"1154":1,"1156":1,"1163":1,"1178":1,"1184":2,"1186":1,"1190":2,"1192":4,"1194":1,"1199":3,"1202":4,"1203":6,"1207":4,"1208":13,"1211":1,"1212":8,"1237":1,"1270":9,"1271":1,"1283":1,"1284":3,"1286":20,"1287":1,"1288":1,"1289":11,"1290":1,"1291":4,"1292":1,"1293":8,"1295":1,"1296":1,"1297":3,"1298":1,"1299":2,"1300":123,"1301":3,"1302":4,"1304":1,"1308":1,"1309":24,"1310":1,"1311":92,"1312":1,"1320":2,"1322":10,"1323":88,"1324":152,"1325":1,"1326":1,"1332":1,"1333":1,"1338":1,"1339":36,"1350":5,"1352":1,"1359":5,"1364":1,"1369":3,"1380":3,"1395":16,"1396":5,"1409":1,"1415":46,"1416":142,"1417":161,"1421":1,"1425":1,"1427":1,"1428":1,"1433":3,"1434":1,"1436":64,"1438":7,"1441":1,"1442":1,"1443":5,"1445":7,"1446":1,"1447":3,"1455":14,"1456":1,"1457":4,"1459":2,"1463":1,"1464":1,"1465":2,"1467":62,"1468":1,"1469":1,"1470":1,"1472":2,"1473":4,"1474":7,"1476":3,"1477":4,"1478":1,"1479":1,"1480":1,"1481":6,"1487":1,"1488":7,"1489":5,"1490":2,"1492":3,"1496":15,"1500":1,"1512":1,"1524":1,"1526":9,"1531":2,"1534":1,"1550":2,"1562":1,"1565":1,"1577":7,"1582":1,"1583":1,"1585":2,"1586":1,"1589":4,"1590":1,"1591":9,"1595":1,"1596":6,"1597":2,"1599":2,"1600":1,"1601":2,"1602":1,"1606":1,"1611":2,"1613":1,"1641":6,"1646":5,"1647":1,"1648":5,"1649":1,"1650":2,"1651":8,"1653":2,"1654":5,"1655":4,"1656":1,"1657":1,"1658":2,"1661":8,"1666":1,"1667":4,"1669":4,"1670":4,"1671":1,"1673":1,"1674":1,"1677":1,"1681":1,"1684":1,"1685":1,"1686":1,"1687":1,"1688":1,"1689":1,"1690":1,"1691":1,"1692":3,"1694":1,"1695":1,"1696":1,"1698":1,"1699":1,"1701":1,"1702":1,"1704":1,"1705":2,"1706":1,"1707":1,"1709":4,"1714":1,"1717":3,"1718":3,"1719":1,"1720":1,"1721":1,"1722":2,"1723":2,"1725":1,"1726":5,"1727":7,"1728":3,"1729":4,"1730":2,"1731":2,"1740":1,"1750":2,"1773":2,"1781":2,"1784":1,"1785":2,"1787":2,"1810":1,"1825":1,"1884":1,"1896":2,"1901":1,"1921":2,"1922":1,"1930":1,"1931":1,"1932":1,"1933":4,"1936":1,"1945":1,"1949":1,"1964":1,"1966":4,"1970":1,"1972":1,"1973":3,"1974":2,"1975":2,"1976":3,"1977":1,"1978":3,"1979":2,"1981":1,"1983":2,"2000":1,"2001":3,"2002":3,"2003":2,"2004":5,"2006":2,"2007":1,"2012":1,"2014":1,"2025":1,"2033":3,"2034":2,"2036":2,"2042":1,"2043":2,"2055":1,"2057":2,"2060":1,"2061":2,"2063":1,"2067":2,"2070":1,"2072":1,"2073":1,"2075":6,"2077":3,"2079":1,"2081":1,"2082":1,"2083":4,"2085":1,"2086":1,"2087":1,"2089":3,"2097":1,"2098":3,"2101":2,"2107":2,"2111":5,"2113":1,"2114":1,"2115":3,"2116":2,"2121":10,"2124":1,"2126":1,"2127":3,"2128":1,"2137":1,"2147":4,"2150":2,"2151":2,"2152":2,"2153":1,"2155":1,"2156":1,"2157":1,"2158":1,"2160":3,"2178":2,"2194":1,"2195":1,"2196":1,"2197":2,"2198":4,"2201":4,"2202":2,"2203":1,"2208":1,"2209":1,"2210":2,"2213":1,"2219":1,"2220":2,"2221":4,"2227":1,"2228":2,"2231":2,"2232":11,"2234":3,"2239":5}}],["applogsconfiguration",{"2":{"1465":1},"3":{"1465":1,"1467":1}}],["applockkeymigration",{"3":{"1496":1}}],["applock",{"3":{"1417":1}}],["applockenabled",{"3":{"1324":1,"1417":3}}],["appleoauthprivatekeypem",{"3":{"1467":1}}],["applenotification",{"3":{"1323":1}}],["applelogin",{"3":{"1311":1}}],["appleappsiteassociationpath",{"3":{"1311":1}}],["appleappid",{"2":{"429":1},"3":{"428":1,"429":1,"1311":1}}],["appleapplinkcomponents",{"2":{"428":1,"429":1},"3":{"428":1,"429":1,"1311":1}}],["appleenabled",{"3":{"0":1,"350":1,"1324":1}}],["apple",{"1":{"347":1,"348":1,"349":1,"350":1,"351":1,"352":1,"353":1,"354":1,"355":1,"1973":1,"1974":1,"1975":1,"1976":1,"1977":1,"1978":1,"1979":1},"2":{"1468":1},"3":{"0":3,"347":1,"348":1,"349":1,"350":8,"419":1,"420":1,"426":1,"1212":1,"1300":1,"1311":22,"1406":2,"1415":2,"1416":1,"1417":1,"1455":1,"1459":2,"1466":2,"1467":3,"1468":1,"1481":2,"1526":1,"1591":1,"1666":1,"1667":2,"1779":1,"1973":3,"1974":1,"1975":9,"1979":1,"2121":1,"2208":1}}],["applyupvoteasync",{"3":{"1402":2}}],["applyvoteasync",{"3":{"1402":2}}],["applydeeplinktarget",{"3":{"1324":1}}],["applyfreshdashboard",{"3":{"1395":5}}],["applyfragment",{"3":{"1324":1}}],["applyfiltertouniqueindexes",{"3":{"1286":1}}],["applyfilters",{"2":{"330":1,"335":1,"591":1,"593":1,"1243":1,"1988":1},"3":{"330":1,"335":1,"591":1,"593":1,"1241":1,"1243":1,"1247":7,"1395":16,"1415":4,"1815":1,"1988":1}}],["applyfieldselection",{"2":{"330":1,"1242":1,"1988":1},"3":{"330":1,"1242":2,"1247":3,"1988":1}}],["applyrestoredstate",{"3":{"1324":1}}],["applyrefreshsessionconfiguration",{"2":{"905":1,"1290":1},"3":{"905":1,"1286":2,"1290":1,"1300":2}}],["applycurrentpagefromurl",{"3":{"1324":1}}],["applyconfiguration",{"3":{"1286":7}}],["applyconfigurationsforentitiesincontext",{"2":{"1034":1},"3":{"1034":1,"1286":11,"1396":1}}],["applyeventdatedefaults",{"3":{"1395":1}}],["applyeventfilter",{"2":{"1392":1},"3":{"1383":1,"1392":1,"1395":9}}],["applyemulatorentityquotas",{"3":{"1323":1}}],["applyengineconventions",{"2":{"1176":1,"1280":1,"1286":1,"1856":1},"3":{"1176":1,"1280":1,"1282":1,"1286":6,"1369":1,"1856":1}}],["applybackpressure",{"3":{"1323":5,"1577":1}}],["applybetween",{"3":{"1247":5}}],["applynonestrategytotenantasync",{"3":{"1311":2}}],["applyall",{"3":{"1396":2,"1415":2}}],["applyallconfigurations",{"3":{"1282":1,"1286":4}}],["applyadditionalfilters",{"3":{"1395":2}}],["applyaiscorefilters",{"3":{"1395":2}}],["applyasync",{"3":{"0":1,"922":1,"1212":1,"1270":5,"1324":3,"1359":5,"1417":1}}],["applykeyandtablemapping",{"2":{"1286":1},"3":{"1282":1,"1286":10}}],["applyorderingstep",{"3":{"1286":3}}],["applyordering",{"3":{"1247":1,"1286":4}}],["applyincludes",{"2":{"1278":1},"3":{"1278":1,"1286":4}}],["applyincludescriteriaandfilters",{"2":{"1243":1},"3":{"1243":1,"1247":2,"1310":1}}],["applyin",{"3":{"1247":10}}],["applyinorrange",{"3":{"1247":4}}],["applying",{"3":{"0":1,"41":1,"135":1,"178":1,"248":1,"265":1,"291":1,"295":1,"318":1,"363":1,"388":1,"499":1,"633":1,"918":1,"1233":1,"1245":1,"1247":1,"1259":1,"1270":1,"1286":2,"1300":2,"1301":2,"1311":1,"1324":2,"1347":1,"1355":1,"1359":4,"1374":1,"1380":4,"1395":2,"1396":5,"1402":2,"1409":1,"1415":1,"1436":1,"1447":1,"1455":2,"1459":1,"1492":1,"1664":1,"1729":1,"1767":1,"1769":1,"1830":1,"1871":1,"2000":2,"2187":1,"2240":1}}],["applysettingsasync",{"3":{"1396":2}}],["applysearchterm",{"3":{"1396":1}}],["applyspeakerfilters",{"3":{"1395":1}}],["applystoredpreferencesandnavigateasync",{"3":{"1324":2}}],["applyshape",{"3":{"1240":1,"1247":1,"1286":7}}],["applysoftdeletefilters",{"2":{"697":1,"1146":1},"3":{"697":1,"698":1,"1146":1,"1286":2,"1526":1,"1577":1}}],["applysorting",{"2":{"330":1,"549":1,"552":1,"1243":1,"1988":1},"3":{"330":1,"549":1,"552":1,"1242":1,"1243":1,"1247":7,"1359":1,"1415":4,"1988":1}}],["applytenant",{"3":{"1286":2}}],["applytenantfilters",{"2":{"1232":1,"1851":1},"3":{"698":2,"1232":1,"1237":1,"1286":4,"1851":1}}],["applytoprocess",{"3":{"1417":8}}],["applyto",{"2":{"1026":1},"3":{"1026":1,"1767":1}}],["applypermissiongrantconfiguration",{"3":{"1286":2}}],["applypresenceorset",{"3":{"1247":2}}],["applypipeline",{"2":{"466":1,"703":1,"752":1},"3":{"459":1,"464":1,"466":1,"698":1,"703":1,"752":1,"1311":5}}],["applypaging",{"2":{"337":1},"3":{"330":1,"337":1,"549":1,"740":1,"1240":1,"1243":1,"1247":5,"1436":1}}],["apply",{"0":{"1793":1,"1802":1,"1807":1,"1812":1,"1817":1,"1827":1,"1834":1,"1846":1,"1853":1,"1862":1,"1868":1,"1877":1,"1886":1,"1892":1,"1899":1,"1905":1,"1912":1,"1924":1,"1930":1,"1941":1,"1950":1,"1959":1,"1965":1,"1972":1,"1979":1,"1985":1,"1991":1,"1997":1,"2002":1,"2014":1,"2028":1,"2038":1,"2049":1,"2060":1,"2069":1,"2080":1,"2086":1,"2108":1,"2123":1,"2128":1,"2133":1,"2139":1,"2146":1,"2153":1,"2160":1,"2169":1,"2180":1,"2193":1,"2203":1},"2":{"202":1,"1050":1,"1304":1,"1377":1,"1406":1,"1810":1,"2176":1},"3":{"0":3,"100":1,"175":2,"201":1,"202":2,"230":1,"255":1,"265":1,"290":3,"291":3,"292":1,"318":1,"390":1,"538":1,"572":1,"574":1,"740":1,"770":1,"789":1,"827":1,"845":1,"914":1,"922":1,"923":1,"1005":1,"1013":1,"1027":1,"1034":1,"1050":1,"1091":1,"1124":1,"1170":1,"1212":2,"1237":1,"1241":3,"1243":2,"1244":1,"1247":22,"1259":1,"1261":1,"1265":1,"1270":9,"1271":2,"1279":1,"1280":1,"1281":1,"1286":30,"1300":7,"1301":2,"1304":3,"1309":7,"1310":1,"1311":5,"1312":1,"1320":1,"1323":20,"1324":9,"1339":9,"1344":1,"1348":2,"1350":4,"1351":1,"1353":2,"1359":32,"1366":1,"1369":3,"1377":3,"1380":8,"1390":1,"1395":8,"1396":25,"1402":9,"1406":1,"1415":11,"1417":2,"1426":1,"1427":4,"1436":26,"1438":1,"1447":2,"1453":1,"1455":2,"1478":1,"1488":3,"1496":3,"1577":2,"1584":1,"1586":1,"1632":1,"1635":1,"1639":1,"1640":3,"1646":1,"1661":1,"1689":1,"1719":1,"1765":1,"1768":1,"1799":1,"1806":1,"1810":1,"1814":1,"1820":1,"1844":2,"1879":1,"1902":1,"1922":2,"1924":1,"1962":1,"1995":1,"2000":1,"2055":1,"2168":1,"2176":1,"2193":1,"2204":1}}],["applifecycle",{"3":{"1324":4}}],["applifecyclenotifier",{"2":{"2118":1},"3":{"1199":3,"1203":1,"1207":2,"1417":14,"1496":2,"2118":1}}],["appliable",{"3":{"1311":2}}],["applinks",{"3":{"426":1,"1311":3,"1416":1,"1436":3}}],["applicable",{"3":{"1311":2,"1323":1,"1436":2,"1554":1,"1640":1,"1641":1,"1771":1,"2101":1}}],["applicability",{"0":{"62":1},"3":{"1526":1,"1527":1,"1553":1,"1577":1,"1578":1,"2171":1}}],["application+infrastructure+api",{"3":{"1653":1}}],["applicationmodel",{"2":{"1416":1},"3":{"1339":2,"1416":2}}],["applicationpart",{"3":{"1311":1}}],["applicationpipelinecompositiontests",{"3":{"1199":1,"1207":7,"1270":1,"1316":1,"1323":5,"1438":2}}],["applicationnamekey",{"3":{"1323":1}}],["applicationname=",{"3":{"665":1}}],["applicationname",{"2":{"998":1,"999":1},"3":{"665":1,"667":1,"998":1,"999":1,"1323":3,"1336":1,"1339":3,"1467":2}}],["applicationnamespacetests",{"3":{"1199":1,"1207":2,"1323":1}}],["applicationnamespace",{"2":{"25":1,"198":1},"3":{"25":2,"198":2,"228":1,"384":1,"998":1,"999":1,"1199":3,"1203":1,"1207":2,"1301":12,"1313":1,"1320":4,"1323":5,"1496":2}}],["applicationid",{"2":{"424":1},"3":{"424":1,"1311":1}}],["applicationinsights",{"2":{"397":1,"914":1,"1333":1,"1443":1,"1446":1,"1467":1,"2010":1,"2156":1,"2159":1},"3":{"397":1,"914":1,"1333":1,"1339":1,"1443":1,"1446":1,"1467":2,"2010":1,"2156":1,"2159":1}}],["applicationurl",{"3":{"95":2}}],["applicationsourcedirectories",{"3":{"1436":4,"1489":1}}],["applicationservices",{"3":{"1436":5}}],["applicationsettingstests",{"3":{"1199":1,"1207":2}}],["applicationsettings",{"2":{"290":1,"291":1,"330":1,"741":1,"1245":1,"1314":1,"1315":1,"1467":1,"1652":1,"1880":1,"2012":1,"2094":1},"3":{"0":1,"290":1,"291":1,"330":1,"583":1,"674":1,"741":4,"1199":46,"1203":1,"1207":2,"1245":1,"1286":5,"1309":8,"1311":17,"1313":1,"1314":2,"1315":1,"1320":3,"1323":15,"1324":1,"1359":4,"1380":8,"1395":1,"1396":11,"1415":11,"1436":2,"1455":1,"1467":1,"1577":1,"1652":1,"1880":1,"2012":1,"2094":1}}],["applicationstate",{"3":{"1324":1}}],["applicationstarted",{"3":{"235":1,"1334":1,"1339":2,"1436":1}}],["applicationstopped",{"3":{"572":1,"1436":3,"1438":1,"1488":1,"1526":1,"2055":1}}],["applicationstopping",{"3":{"572":1,"1436":3,"1438":1,"1488":1,"1526":1,"2055":1}}],["applications",{"0":{"2228":1},"3":{"0":1,"25":1,"85":1,"228":1,"246":1,"257":1,"259":1,"481":2,"482":1,"543":1,"545":1,"550":2,"551":1,"555":1,"665":1,"698":1,"699":1,"742":1,"773":1,"774":1,"868":1,"869":1,"872":1,"880":1,"920":1,"926":1,"945":1,"1081":1,"1082":2,"1083":1,"1091":1,"1229":1,"1237":1,"1259":2,"1286":2,"1300":4,"1301":4,"1323":2,"1324":1,"1332":1,"1339":1,"1415":5,"1416":1,"1424":1,"1436":2,"1478":1,"1673":1,"1717":1,"1815":2,"1825":1,"1920":1,"2109":2,"2115":1,"2220":2,"2224":1,"2226":2,"2227":1,"2234":1,"2239":1}}],["application",{"0":{"1269":1,"1467":1,"1553":1},"1":{"646":1,"647":1,"648":1,"649":1,"650":1,"651":1,"652":1,"653":1,"1158":1,"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1,"1351":1,"1352":1,"1353":1,"1354":1,"1355":1,"1356":1,"1357":1,"1358":1,"1359":1,"1416":1},"2":{"117":1,"225":1,"281":1,"310":1,"576":1,"1207":4,"1211":1,"1247":3,"1259":2,"1264":1,"1270":6,"1300":1,"1301":1,"1310":2,"1323":3,"1349":1,"1351":1,"1359":4,"1396":3,"1402":1,"1404":1,"1415":1,"1418":1,"1436":1,"1437":1,"1453":1,"1454":1,"1487":1,"1650":2,"1660":1,"1781":1,"1815":1,"1828":1,"1834":1,"1865":1,"1896":1,"1902":1,"1920":1,"1931":1,"1953":1,"1959":1,"1985":1,"2016":1,"2139":1},"3":{"0":33,"10":1,"15":1,"18":1,"24":1,"25":3,"27":2,"39":1,"47":1,"49":1,"52":2,"53":1,"54":2,"58":1,"59":3,"62":1,"63":1,"71":1,"81":1,"90":1,"103":1,"109":2,"110":1,"117":2,"121":2,"122":3,"123":4,"125":2,"126":2,"128":1,"131":1,"135":1,"150":3,"165":1,"166":1,"167":1,"175":1,"179":1,"186":1,"193":1,"198":4,"203":1,"223":1,"225":4,"226":1,"228":2,"230":7,"231":1,"241":1,"242":2,"243":4,"244":1,"245":2,"246":6,"255":1,"256":1,"281":2,"284":1,"285":1,"295":1,"300":1,"306":1,"310":5,"314":1,"318":4,"326":1,"328":1,"330":5,"331":1,"333":4,"335":1,"336":1,"337":3,"341":4,"343":1,"344":6,"350":1,"352":3,"353":4,"358":3,"359":3,"360":2,"365":1,"378":1,"380":1,"381":2,"384":4,"390":1,"391":3,"395":1,"396":1,"397":5,"399":1,"400":1,"401":3,"407":2,"408":1,"434":2,"440":2,"443":1,"444":2,"448":1,"459":11,"461":1,"463":7,"464":2,"465":6,"466":3,"470":1,"476":1,"481":2,"482":2,"483":1,"490":1,"493":3,"494":2,"495":2,"497":8,"498":1,"499":3,"502":2,"506":1,"508":1,"522":2,"523":3,"524":2,"535":1,"536":3,"539":3,"544":4,"545":26,"547":1,"549":6,"550":2,"551":5,"552":5,"555":1,"556":2,"558":1,"566":1,"572":2,"576":1,"582":1,"583":6,"584":1,"585":1,"586":3,"591":1,"593":2,"601":3,"602":1,"604":1,"633":2,"640":2,"646":1,"648":1,"649":1,"657":2,"665":2,"674":16,"676":1,"677":1,"690":3,"692":2,"698":1,"707":2,"708":1,"714":2,"715":1,"718":2,"723":1,"724":4,"725":6,"726":1,"727":1,"728":1,"729":1,"733":1,"736":1,"740":1,"741":4,"749":2,"782":6,"789":2,"790":4,"791":1,"793":2,"794":1,"795":1,"799":2,"813":2,"819":1,"827":4,"828":1,"845":1,"846":6,"848":2,"849":1,"850":1,"854":2,"857":2,"870":1,"875":1,"881":1,"888":1,"890":1,"897":6,"899":1,"900":1,"905":9,"906":2,"907":1,"908":3,"910":1,"914":1,"921":3,"922":8,"923":1,"924":4,"926":12,"927":1,"930":2,"932":1,"933":1,"938":2,"939":2,"940":1,"941":1,"946":5,"954":1,"956":1,"960":1,"979":1,"980":12,"982":2,"983":1,"987":3,"988":4,"994":1,"995":1,"996":4,"998":2,"999":1,"1004":8,"1006":1,"1012":1,"1017":2,"1018":3,"1020":1,"1022":1,"1025":2,"1026":2,"1033":1,"1034":1,"1035":1,"1036":1,"1037":1,"1038":1,"1041":1,"1042":3,"1049":1,"1050":3,"1051":1,"1058":1,"1059":7,"1067":1,"1068":1,"1069":1,"1074":5,"1078":1,"1082":2,"1090":2,"1091":7,"1093":2,"1099":1,"1100":5,"1116":3,"1119":1,"1133":6,"1140":1,"1142":1,"1150":3,"1158":1,"1161":5,"1168":4,"1170":1,"1174":1,"1175":1,"1192":2,"1194":1,"1199":1475,"1201":2,"1202":4,"1203":779,"1206":10,"1207":4571,"1208":22,"1211":4,"1212":12,"1213":2,"1214":1,"1216":2,"1223":1,"1224":1,"1229":12,"1230":1,"1236":1,"1237":14,"1238":3,"1239":6,"1240":1,"1241":5,"1242":3,"1243":6,"1244":2,"1246":4,"1247":161,"1248":2,"1249":1,"1252":3,"1256":1,"1257":6,"1258":1,"1259":63,"1260":2,"1261":3,"1262":3,"1263":1,"1264":11,"1265":3,"1266":1,"1267":5,"1268":2,"1269":4,"1270":311,"1271":101,"1272":1,"1276":1,"1278":5,"1279":3,"1282":1,"1285":9,"1286":234,"1288":1,"1289":7,"1290":3,"1291":6,"1292":3,"1293":5,"1294":6,"1295":3,"1296":1,"1297":8,"1300":356,"1301":48,"1302":4,"1303":4,"1304":5,"1305":1,"1306":6,"1307":1,"1308":5,"1309":161,"1310":87,"1311":71,"1312":8,"1313":3,"1314":2,"1315":4,"1316":11,"1317":1,"1318":6,"1319":3,"1320":14,"1322":14,"1323":290,"1324":22,"1325":1,"1333":2,"1336":1,"1337":2,"1339":13,"1340":1,"1341":2,"1346":1,"1347":4,"1348":1,"1349":2,"1350":83,"1351":4,"1352":20,"1353":21,"1354":10,"1355":9,"1356":4,"1357":4,"1358":3,"1359":1975,"1360":1,"1361":1,"1365":2,"1366":1,"1367":5,"1369":29,"1370":1,"1374":2,"1377":1,"1379":1,"1380":22,"1389":1,"1390":1,"1395":9,"1396":309,"1398":1,"1399":1,"1400":3,"1401":1,"1402":195,"1404":3,"1405":2,"1406":3,"1407":1,"1409":2,"1410":3,"1411":1,"1413":2,"1415":301,"1416":23,"1417":7,"1418":1,"1421":1,"1423":3,"1424":2,"1427":10,"1429":2,"1430":2,"1431":3,"1435":1,"1436":247,"1437":6,"1438":23,"1440":1,"1441":1,"1442":3,"1443":4,"1446":1,"1452":1,"1453":1,"1454":2,"1455":7,"1460":1,"1461":1,"1462":1,"1465":3,"1467":20,"1469":1,"1471":1,"1473":1,"1486":1,"1487":6,"1488":1,"1489":22,"1490":1,"1492":2,"1496":62,"1499":1,"1503":1,"1504":1,"1509":1,"1519":2,"1526":15,"1527":2,"1534":2,"1535":1,"1536":3,"1538":1,"1540":4,"1551":1,"1553":2,"1555":2,"1572":2,"1575":1,"1576":2,"1577":30,"1578":2,"1582":3,"1586":2,"1591":14,"1592":1,"1599":1,"1600":3,"1602":1,"1620":1,"1639":1,"1646":1,"1650":4,"1651":5,"1653":1,"1654":3,"1656":3,"1660":2,"1661":1,"1662":2,"1663":2,"1666":1,"1669":1,"1670":3,"1671":2,"1673":1,"1679":1,"1681":1,"1685":11,"1686":8,"1687":1,"1693":2,"1718":1,"1719":1,"1720":1,"1724":1,"1731":1,"1748":1,"1756":1,"1765":21,"1781":5,"1783":1,"1784":1,"1789":1,"1790":3,"1792":1,"1793":2,"1796":2,"1799":2,"1805":1,"1810":1,"1813":1,"1815":9,"1817":2,"1820":1,"1824":2,"1828":1,"1830":1,"1831":1,"1833":1,"1834":1,"1840":1,"1842":2,"1852":1,"1854":2,"1861":2,"1864":1,"1865":4,"1866":1,"1872":1,"1875":1,"1876":1,"1877":1,"1883":1,"1884":1,"1896":1,"1902":2,"1915":2,"1916":1,"1919":1,"1920":2,"1922":1,"1926":1,"1929":1,"1931":2,"1932":2,"1933":1,"1934":2,"1935":1,"1936":1,"1940":1,"1941":1,"1944":1,"1948":1,"1953":1,"1956":1,"1959":1,"1961":1,"1962":1,"1963":1,"1970":1,"1972":1,"1985":1,"1994":1,"1995":1,"1997":1,"1998":1,"2000":4,"2003":1,"2005":1,"2006":1,"2010":1,"2014":1,"2015":2,"2016":4,"2017":1,"2024":1,"2028":1,"2034":1,"2036":1,"2042":1,"2043":7,"2051":1,"2052":1,"2055":1,"2056":2,"2061":1,"2063":1,"2066":3,"2071":1,"2077":1,"2080":1,"2088":1,"2095":1,"2099":2,"2101":1,"2104":5,"2110":2,"2111":2,"2126":1,"2132":1,"2139":1,"2140":2,"2141":3,"2142":2,"2144":3,"2154":1,"2156":1,"2157":1,"2163":1,"2166":2,"2169":1,"2170":1,"2171":2,"2175":4,"2177":1,"2180":1,"2193":1,"2214":1,"2219":1,"2220":3,"2221":1,"2227":5,"2230":3,"2232":4,"2240":2}}],["applicationdbcontexteffactory",{"3":{"1496":1}}],["applicationdbcontexttests",{"3":{"1199":1,"1207":4}}],["applicationdbcontexttenantfiltertests",{"3":{"1199":1,"1207":2,"1286":3,"1438":2}}],["applicationdbcontext",{"2":{"0":1,"26":1,"47":1,"200":1,"201":1,"345":1,"696":1,"703":1,"713":1,"715":2,"720":1,"798":1,"806":1,"889":1,"892":1,"893":1,"1033":1,"1036":1,"1042":1,"1050":1,"1083":1,"1086":1,"1174":1,"1175":2,"1192":1,"1201":1,"1212":1,"1259":1,"1272":1,"1276":1,"1286":2,"1363":1,"1412":1,"1510":1,"1517":1,"1664":1,"1849":1,"1857":1,"2064":1,"2199":1},"3":{"0":3,"26":3,"47":1,"166":1,"200":4,"201":1,"203":1,"341":1,"345":1,"536":1,"540":1,"696":2,"697":1,"698":6,"702":1,"703":2,"707":1,"710":2,"713":1,"715":4,"720":3,"798":2,"806":2,"888":1,"889":3,"892":1,"893":1,"905":3,"907":1,"931":1,"934":1,"1033":1,"1034":3,"1036":1,"1037":1,"1042":4,"1050":2,"1055":1,"1059":2,"1061":1,"1062":1,"1083":2,"1086":2,"1140":3,"1146":1,"1150":1,"1156":1,"1174":1,"1175":4,"1192":1,"1198":1,"1199":109,"1201":1,"1202":1,"1203":2,"1207":3,"1212":3,"1232":4,"1233":1,"1237":10,"1251":2,"1253":2,"1258":2,"1259":16,"1272":1,"1273":10,"1274":1,"1276":2,"1278":1,"1281":6,"1282":1,"1283":1,"1286":170,"1300":7,"1323":13,"1359":1,"1363":2,"1369":9,"1396":9,"1412":1,"1415":2,"1436":8,"1437":2,"1496":5,"1498":1,"1510":1,"1517":1,"1526":1,"1577":3,"1651":1,"1664":1,"1810":1,"1849":1,"1857":1,"2064":2,"2164":1,"2199":2}}],["applicationlayers",{"3":{"1436":1}}],["applicationlayersdeclarehandlers",{"3":{"1436":1}}],["applicationlayer",{"2":{"0":1,"700":1,"1815":1},"3":{"0":1,"545":1,"700":1,"1436":5,"1815":1}}],["appliedid",{"3":{"1324":2}}],["applied",{"0":{"2142":1},"2":{"1140":1},"3":{"0":1,"23":3,"24":2,"27":1,"67":1,"72":1,"80":1,"98":1,"103":1,"116":1,"135":1,"136":1,"156":1,"179":2,"186":2,"200":1,"212":1,"231":1,"235":1,"237":1,"246":1,"248":1,"265":1,"292":1,"293":1,"318":1,"335":3,"343":1,"359":2,"361":1,"371":1,"376":1,"384":1,"400":1,"401":2,"403":1,"427":1,"430":1,"440":1,"459":1,"461":1,"464":1,"478":1,"483":2,"485":1,"535":1,"539":1,"548":1,"552":1,"557":1,"595":1,"640":1,"657":3,"658":1,"659":1,"666":1,"690":1,"697":1,"698":1,"707":2,"715":1,"740":1,"741":1,"751":1,"759":1,"766":1,"769":1,"798":1,"806":1,"827":2,"829":1,"830":1,"831":1,"832":1,"837":1,"838":1,"865":2,"872":2,"876":1,"883":1,"890":1,"905":1,"907":1,"988":1,"996":1,"1018":1,"1028":1,"1042":1,"1059":1,"1100":1,"1116":1,"1119":1,"1124":1,"1137":1,"1140":1,"1191":1,"1229":1,"1232":1,"1237":8,"1239":1,"1240":1,"1241":2,"1242":1,"1243":3,"1244":1,"1247":10,"1259":4,"1261":1,"1265":1,"1267":1,"1270":7,"1271":6,"1273":3,"1275":1,"1277":1,"1279":1,"1286":42,"1297":1,"1299":1,"1300":19,"1301":4,"1309":7,"1310":2,"1311":20,"1312":5,"1318":1,"1320":1,"1323":13,"1324":20,"1325":1,"1326":1,"1327":1,"1328":1,"1330":1,"1334":1,"1336":1,"1337":1,"1339":18,"1340":1,"1343":1,"1347":1,"1350":12,"1352":2,"1353":1,"1359":67,"1362":2,"1363":1,"1369":7,"1373":1,"1374":1,"1380":8,"1389":1,"1395":13,"1396":33,"1399":1,"1401":1,"1402":11,"1410":1,"1415":8,"1417":8,"1423":1,"1427":3,"1435":1,"1436":36,"1438":6,"1440":1,"1441":1,"1443":2,"1447":1,"1453":1,"1455":1,"1457":1,"1461":1,"1463":1,"1465":1,"1467":6,"1469":1,"1472":1,"1473":1,"1474":1,"1478":1,"1481":1,"1488":2,"1489":1,"1492":2,"1496":4,"1525":1,"1526":5,"1531":2,"1534":1,"1537":4,"1539":1,"1545":2,"1552":1,"1566":1,"1577":6,"1591":2,"1637":2,"1647":1,"1665":1,"1666":1,"1675":1,"1689":1,"1707":1,"1764":1,"1765":4,"1767":1,"1771":1,"1774":1,"1797":1,"1814":1,"1820":1,"1839":1,"1840":1,"1844":1,"1851":1,"1852":1,"1869":1,"1874":1,"1920":3,"1946":1,"1954":1,"1994":1,"2001":1,"2030":1,"2031":1,"2038":1,"2063":1,"2070":1,"2074":1,"2080":2,"2111":1,"2134":1,"2147":1,"2162":1,"2174":1,"2177":1,"2185":1,"2192":1,"2232":1}}],["appliertype",{"3":{"1270":1}}],["appliers",{"3":{"1262":1,"1265":1,"1270":1,"1316":1,"1323":2,"1359":1,"1662":1,"1875":1,"1883":1}}],["applier",{"3":{"0":3,"263":1,"265":2,"291":1,"293":1,"328":1,"920":2,"922":2,"923":1,"924":2,"925":1,"926":8,"1260":1,"1265":3,"1270":28,"1286":2,"1301":2,"1323":1,"1324":4,"1354":1,"1359":37,"1417":3,"1436":1,"1455":2,"1496":2,"1871":1,"1956":1}}],["appliesto",{"3":{"1369":2}}],["applies",{"0":{"1920":1},"1":{"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1},"3":{"0":8,"80":1,"95":1,"100":2,"117":1,"130":1,"152":1,"162":1,"166":1,"173":2,"175":1,"193":1,"195":1,"243":1,"280":1,"288":1,"291":2,"292":1,"295":1,"318":3,"333":1,"340":1,"341":1,"345":1,"359":1,"370":1,"392":1,"397":1,"404":1,"458":1,"501":1,"511":1,"536":2,"549":1,"550":1,"551":2,"556":2,"562":1,"563":2,"564":2,"568":2,"572":1,"592":3,"607":1,"611":1,"618":1,"622":1,"628":1,"631":1,"634":2,"635":1,"640":1,"651":2,"674":1,"676":1,"684":1,"691":1,"698":1,"701":2,"711":1,"728":1,"733":1,"741":1,"743":1,"744":1,"749":4,"757":1,"768":1,"774":2,"817":1,"818":1,"838":1,"842":1,"846":1,"847":2,"875":1,"876":1,"883":1,"889":1,"891":1,"917":1,"926":1,"963":1,"965":1,"972":2,"973":1,"1000":1,"1017":1,"1018":1,"1034":1,"1037":1,"1044":1,"1049":1,"1050":1,"1052":2,"1059":1,"1074":1,"1108":1,"1116":2,"1124":1,"1127":1,"1128":1,"1134":1,"1162":1,"1193":1,"1212":3,"1229":3,"1237":4,"1240":1,"1243":1,"1244":2,"1247":13,"1253":1,"1259":29,"1261":1,"1262":1,"1270":9,"1271":6,"1273":3,"1275":2,"1276":1,"1282":1,"1286":49,"1292":1,"1300":33,"1301":3,"1304":2,"1306":1,"1309":2,"1310":2,"1311":33,"1312":4,"1314":1,"1318":2,"1323":28,"1324":59,"1328":1,"1329":1,"1331":1,"1333":1,"1338":1,"1339":17,"1348":2,"1350":17,"1353":1,"1357":1,"1359":61,"1363":1,"1366":1,"1369":6,"1373":1,"1378":1,"1380":8,"1395":27,"1396":40,"1401":3,"1402":22,"1406":1,"1409":1,"1414":1,"1415":14,"1416":14,"1417":14,"1418":1,"1421":1,"1422":1,"1427":4,"1433":1,"1436":67,"1438":5,"1441":2,"1442":1,"1443":2,"1447":1,"1453":1,"1454":1,"1455":2,"1457":1,"1467":4,"1470":1,"1477":1,"1479":1,"1488":1,"1489":1,"1490":1,"1492":2,"1496":2,"1510":1,"1577":2,"1627":1,"1631":1,"1639":3,"1640":2,"1641":1,"1650":1,"1652":1,"1664":1,"1666":1,"1667":1,"1673":1,"1701":1,"1719":1,"1728":1,"1730":1,"1750":1,"1755":1,"1776":1,"1815":2,"1821":2,"1843":2,"1856":1,"1869":1,"1892":1,"1903":1,"1910":1,"1928":1,"1935":1,"1953":1,"1994":3,"1995":1,"1997":1,"2000":1,"2012":1,"2025":1,"2045":1,"2057":1,"2068":1,"2097":1,"2098":1,"2111":1,"2126":3,"2132":1,"2134":1,"2136":1,"2156":1,"2160":1,"2164":1,"2167":1,"2192":1,"2193":2,"2199":1,"2232":2}}],["appsidentity",{"3":{"1467":3}}],["appsec",{"3":{"1339":1}}],["appsetting",{"3":{"312":1,"948":1}}],["appsettingsalt",{"3":{"1416":1}}],["appsettings",{"2":{"92":1,"95":1,"96":1,"102":2,"418":1,"422":1,"534":1,"584":1,"794":1,"836":1,"837":1,"838":1,"840":1,"841":1,"857":1,"933":1,"1066":1,"1107":1,"1128":1,"1178":1,"1429":1,"1481":1,"1490":1,"1656":1,"1684":1,"1701":1,"1719":1,"1720":1,"1722":1,"1723":1,"1729":1,"1850":1,"2097":1},"3":{"0":1,"59":1,"63":1,"92":3,"95":4,"96":2,"98":1,"102":2,"104":1,"179":1,"180":3,"195":7,"418":3,"422":2,"423":1,"424":1,"425":1,"426":4,"428":2,"429":3,"534":2,"536":1,"539":1,"540":1,"583":6,"584":1,"585":3,"633":1,"639":1,"641":1,"690":1,"691":1,"725":2,"727":1,"774":4,"776":1,"790":2,"792":1,"794":1,"827":9,"831":1,"832":13,"833":4,"836":1,"837":1,"838":11,"839":1,"840":2,"841":1,"854":4,"857":1,"933":1,"998":1,"999":1,"1017":1,"1018":4,"1021":1,"1066":1,"1091":1,"1107":1,"1116":1,"1124":9,"1125":1,"1126":1,"1128":1,"1178":1,"1184":1,"1286":7,"1300":5,"1301":3,"1309":1,"1311":2,"1312":2,"1313":1,"1320":1,"1323":3,"1324":3,"1337":1,"1338":2,"1339":22,"1380":18,"1395":1,"1396":6,"1407":1,"1415":3,"1416":14,"1417":1,"1419":1,"1427":1,"1429":1,"1430":1,"1436":10,"1438":1,"1441":5,"1446":1,"1447":26,"1450":2,"1467":4,"1481":2,"1488":2,"1490":1,"1496":4,"1526":10,"1531":1,"1532":1,"1535":1,"1548":1,"1591":4,"1627":3,"1656":1,"1684":2,"1701":1,"1719":1,"1720":1,"1722":1,"1723":1,"1728":1,"1729":1,"1761":1,"1849":1,"1850":1,"2097":1,"2150":1,"2167":1,"2173":1}}],["apps",{"0":{"94":1,"719":1,"1785":1,"1983":1,"2110":1,"2151":1},"1":{"1717":1,"1718":1,"1719":1,"1720":1,"1721":1,"1722":1,"1723":1,"1724":1,"1725":1,"2109":1,"2110":1,"2111":1,"2112":1,"2113":1,"2114":1,"2115":1},"2":{"759":1},"3":{"0":25,"31":1,"61":1,"62":1,"63":1,"91":1,"93":1,"94":2,"96":1,"97":2,"98":2,"104":1,"146":2,"147":1,"148":1,"175":2,"184":1,"206":2,"207":1,"208":1,"213":1,"214":2,"216":1,"233":1,"234":2,"235":1,"243":1,"245":1,"265":1,"283":2,"290":1,"291":1,"293":1,"299":1,"310":3,"314":2,"369":1,"390":2,"392":1,"395":1,"402":1,"412":1,"422":2,"457":2,"459":2,"463":1,"465":1,"483":1,"490":2,"491":1,"492":1,"493":1,"494":1,"497":3,"499":3,"500":1,"511":1,"517":1,"551":1,"552":1,"555":1,"556":2,"597":1,"599":9,"600":2,"602":1,"603":3,"618":1,"620":1,"625":1,"626":2,"629":3,"640":1,"648":1,"649":1,"650":1,"656":1,"665":3,"713":1,"718":1,"719":1,"724":2,"725":3,"726":2,"727":1,"748":1,"749":1,"756":2,"757":5,"759":2,"760":3,"764":1,"765":1,"766":2,"780":3,"784":1,"791":1,"826":1,"827":3,"832":1,"833":1,"838":1,"853":1,"854":1,"855":1,"857":1,"860":1,"861":3,"862":1,"863":3,"865":1,"867":2,"869":3,"875":2,"882":1,"913":1,"971":2,"972":2,"995":1,"996":1,"1058":3,"1060":2,"1101":1,"1123":1,"1124":1,"1154":1,"1156":1,"1202":1,"1203":1,"1212":5,"1237":4,"1247":4,"1259":2,"1264":1,"1270":7,"1271":2,"1286":12,"1295":1,"1300":13,"1309":4,"1311":12,"1313":1,"1322":2,"1323":21,"1324":14,"1325":1,"1339":26,"1359":1,"1415":2,"1416":1,"1417":8,"1433":1,"1436":21,"1438":4,"1442":1,"1443":5,"1447":8,"1455":9,"1465":2,"1467":46,"1469":2,"1472":1,"1473":1,"1474":6,"1477":5,"1478":1,"1486":2,"1488":1,"1492":3,"1496":2,"1524":1,"1525":1,"1526":4,"1534":2,"1535":1,"1555":1,"1565":1,"1574":1,"1575":2,"1577":3,"1582":1,"1589":2,"1591":1,"1596":1,"1602":1,"1645":1,"1646":1,"1650":1,"1658":1,"1661":2,"1670":1,"1673":1,"1674":1,"1676":1,"1677":3,"1692":1,"1705":2,"1706":1,"1717":1,"1718":1,"1726":1,"1727":1,"1779":1,"1782":1,"1784":1,"1785":1,"1792":1,"1799":1,"1811":1,"1839":1,"1875":2,"1900":1,"1903":1,"1904":1,"1909":1,"1953":1,"1958":1,"1963":1,"1968":1,"1972":1,"1982":1,"2000":2,"2001":1,"2006":2,"2010":1,"2011":1,"2025":2,"2033":1,"2037":1,"2043":2,"2047":1,"2055":1,"2059":1,"2077":1,"2083":1,"2087":1,"2108":1,"2109":3,"2110":1,"2111":2,"2112":1,"2113":2,"2114":3,"2123":1,"2138":1,"2147":1,"2150":1,"2152":1,"2153":1,"2158":2,"2194":3,"2198":2,"2202":1,"2203":1,"2210":2,"2213":1,"2214":1,"2219":1,"2221":1,"2228":1,"2229":1,"2232":1,"2239":1,"2243":1,"2245":1}}],["agile",{"3":{"2219":1,"2220":1}}],["aggregator",{"3":{"1308":1,"1309":4}}],["aggregating",{"3":{"1259":2,"1309":1,"1332":1,"1350":3,"1359":1,"1396":2}}],["aggregation",{"3":{"692":1,"1229":1,"1278":1,"1286":3,"1309":5,"1312":1,"1350":1,"1359":5,"1369":1,"1395":2,"1396":3,"1415":1,"1438":1,"1441":1,"1448":1,"2067":1}}],["aggregations",{"3":{"545":1,"547":1,"1396":1,"1436":1}}],["aggregatewithoutdeleteoverride",{"3":{"1436":1}}],["aggregatewithnochildentities",{"3":{"1436":2}}],["aggregateroots",{"2":{"1489":1},"3":{"1436":6,"1489":3}}],["aggregaterootshaveresultfactory",{"2":{"1577":1},"3":{"1431":1,"1577":1}}],["aggregaterootentity",{"3":{"1286":1}}],["aggregaterootentitycontrollerbasetests",{"3":{"1199":1,"1207":6,"1311":2}}],["aggregaterootentitycontrollerbase",{"2":{"318":1,"328":1,"921":1,"922":1,"925":1,"1666":1,"1991":1},"3":{"0":2,"318":1,"328":1,"330":5,"332":1,"334":1,"921":3,"922":1,"925":1,"1199":11,"1203":1,"1207":2,"1270":4,"1311":15,"1359":5,"1371":1,"1380":10,"1436":2,"1666":1,"1988":1,"1991":1}}],["aggregateconvention",{"3":{"1576":1,"1577":1}}],["aggregateconventiontests",{"2":{"1811":1,"2048":1},"3":{"1168":1,"1199":1,"1207":2,"1436":9,"1489":3,"1493":1,"1577":2,"1811":1,"2048":1}}],["aggregateconventiontestsbase",{"2":{"1168":1},"3":{"1168":2,"1199":2,"1207":2,"1431":4,"1436":28,"1489":1,"1496":1,"1577":1,"1586":1}}],["aggregatecapture",{"3":{"1199":3,"1203":1,"1207":1,"1274":1,"1286":5,"1496":2}}],["aggregated",{"3":{"107":1,"1017":1,"1220":1,"1286":2,"1350":2,"1359":2,"1380":2,"1395":2,"1396":3,"1415":1,"1427":1,"1535":1,"1641":2,"1765":1}}],["aggregate",{"0":{"1233":1,"1291":1,"1343":1,"1346":1,"1405":1,"2090":1},"1":{"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":1,"1165":1,"1166":1,"1167":1,"1168":1,"1169":1,"1170":1,"1171":1},"2":{"1381":1},"3":{"0":27,"16":1,"17":1,"18":1,"21":4,"24":3,"39":4,"41":1,"42":1,"107":1,"109":1,"110":2,"164":1,"165":3,"166":1,"167":2,"168":1,"171":1,"175":1,"181":1,"225":1,"227":1,"230":1,"283":1,"314":1,"339":1,"340":1,"341":5,"342":1,"344":1,"350":2,"353":2,"402":1,"413":1,"443":1,"444":1,"459":2,"460":1,"466":1,"468":1,"470":2,"476":1,"497":2,"499":3,"536":2,"537":2,"541":1,"545":1,"551":1,"572":1,"609":1,"633":4,"636":1,"639":1,"656":1,"657":2,"658":1,"661":1,"688":1,"690":3,"691":1,"707":1,"724":1,"725":3,"726":1,"781":1,"782":2,"785":1,"799":1,"809":4,"810":3,"813":3,"815":2,"856":1,"881":1,"904":1,"905":1,"907":1,"919":1,"920":1,"921":7,"922":8,"923":4,"924":7,"925":1,"926":14,"930":1,"1004":10,"1006":1,"1025":1,"1026":1,"1027":1,"1028":1,"1041":2,"1042":1,"1043":1,"1052":1,"1058":1,"1082":2,"1114":1,"1116":3,"1117":2,"1120":1,"1140":5,"1141":1,"1142":5,"1143":2,"1144":2,"1145":1,"1147":1,"1150":1,"1160":1,"1161":1,"1165":1,"1167":1,"1168":6,"1169":1,"1170":2,"1171":1,"1191":1,"1192":2,"1201":1,"1202":3,"1203":3,"1212":11,"1220":1,"1222":1,"1224":1,"1226":1,"1229":5,"1230":1,"1231":4,"1233":9,"1237":44,"1240":1,"1247":4,"1248":2,"1249":2,"1251":3,"1255":1,"1259":16,"1260":1,"1265":12,"1270":85,"1272":1,"1274":4,"1275":1,"1278":2,"1281":1,"1283":1,"1286":57,"1287":1,"1289":1,"1290":1,"1291":1,"1293":1,"1294":1,"1295":1,"1300":30,"1301":1,"1304":3,"1309":28,"1311":22,"1312":2,"1318":1,"1322":2,"1323":47,"1324":5,"1328":1,"1339":2,"1340":3,"1341":1,"1342":6,"1343":2,"1344":2,"1345":2,"1346":3,"1347":1,"1349":1,"1350":156,"1352":4,"1353":5,"1354":6,"1355":3,"1357":2,"1359":430,"1366":1,"1369":26,"1371":3,"1374":1,"1380":45,"1385":1,"1386":2,"1395":30,"1396":107,"1398":3,"1399":1,"1402":56,"1403":2,"1404":1,"1405":5,"1406":1,"1407":1,"1408":2,"1409":1,"1410":2,"1411":1,"1413":1,"1415":65,"1431":3,"1436":76,"1437":2,"1438":8,"1441":2,"1442":1,"1443":1,"1447":4,"1450":1,"1453":1,"1467":4,"1487":5,"1488":1,"1489":6,"1490":2,"1496":6,"1498":1,"1517":1,"1526":5,"1541":1,"1545":1,"1547":1,"1577":5,"1582":1,"1583":1,"1585":3,"1586":2,"1591":3,"1630":18,"1631":9,"1632":17,"1634":1,"1635":8,"1637":2,"1638":27,"1639":5,"1640":6,"1641":1,"1646":1,"1647":1,"1650":1,"1651":6,"1654":1,"1660":1,"1661":1,"1662":2,"1665":2,"1666":1,"1671":1,"1677":1,"1683":1,"1685":6,"1686":6,"1689":1,"1695":2,"1697":2,"1699":1,"1700":1,"1701":5,"1704":1,"1719":2,"1720":1,"1727":16,"1728":5,"1729":4,"1730":8,"1747":1,"1748":1,"1749":3,"1750":1,"1764":2,"1765":2,"1769":1,"1773":1,"1805":1,"1807":1,"1810":3,"1811":3,"1812":1,"1836":1,"1838":3,"1842":1,"1856":1,"1861":1,"1869":1,"1871":3,"1875":1,"1876":4,"1922":1,"1927":1,"1933":3,"1934":1,"1937":2,"1948":1,"1953":1,"1977":2,"1982":1,"1985":1,"2001":1,"2010":1,"2020":1,"2043":1,"2063":2,"2064":1,"2065":1,"2066":1,"2068":1,"2083":1,"2085":1,"2087":3,"2089":3,"2090":4,"2091":4,"2092":1,"2097":1,"2098":2,"2104":1,"2110":3,"2117":1,"2123":1,"2164":2,"2167":1,"2168":1,"2169":1,"2181":1,"2183":3,"2192":2,"2193":1,"2198":2,"2227":1,"2232":3}}],["aggregatescascadesoftdeletetochildren",{"3":{"1436":14}}],["aggregateswithchildcollections",{"3":{"1436":2}}],["aggregates",{"0":{"1342":1,"1398":1},"1":{"1230":1,"1231":1,"1232":1,"1233":1,"1234":1,"1235":1,"1236":1,"1237":1,"1808":1,"1809":1,"1810":1,"1811":1,"1812":1},"3":{"0":2,"39":2,"95":1,"109":1,"383":1,"497":3,"691":1,"698":1,"781":1,"921":1,"922":1,"924":1,"1058":1,"1066":1,"1068":1,"1140":2,"1141":1,"1168":2,"1169":1,"1192":1,"1202":2,"1203":2,"1212":3,"1222":1,"1229":2,"1230":1,"1237":12,"1247":1,"1251":1,"1254":1,"1259":4,"1270":2,"1274":1,"1275":1,"1286":12,"1291":1,"1300":4,"1302":1,"1303":2,"1309":2,"1311":2,"1323":4,"1324":1,"1328":1,"1339":1,"1340":1,"1341":1,"1342":3,"1345":1,"1346":4,"1350":10,"1351":1,"1352":6,"1354":1,"1359":46,"1371":1,"1380":3,"1388":1,"1396":19,"1398":2,"1399":1,"1401":1,"1402":7,"1430":1,"1436":13,"1438":3,"1441":2,"1443":1,"1467":2,"1476":1,"1487":1,"1496":4,"1526":2,"1534":1,"1541":5,"1547":2,"1577":1,"1585":1,"1600":1,"1630":1,"1635":2,"1638":2,"1639":1,"1651":1,"1671":1,"1681":1,"1689":1,"1720":1,"1765":1,"1808":1,"1811":1,"1812":1,"1815":1,"1838":1,"1932":1,"1937":1,"2056":1,"2104":1,"2110":1,"2186":1,"2206":1,"2227":1,"2230":1,"2239":1}}],["aggressive",{"3":{"501":1,"907":1,"1984":1,"1985":1,"2037":1}}],["agreeing",{"3":{"1270":2,"1286":2,"1300":1,"1323":1,"1324":1,"1380":2,"1415":1,"1436":1}}],["agreeingmarkedqueryhandler",{"3":{"1199":2,"1207":1}}],["agreeingmarkedquery",{"3":{"1199":2,"1207":1}}],["agreeingmarkedcommandhandler",{"3":{"1199":2,"1207":1}}],["agreeingmarkedcommand",{"3":{"1199":2,"1207":1,"1270":1}}],["agrees",{"3":{"650":1,"703":1,"839":1,"974":1,"1229":1,"1324":1,"1402":1,"2039":2}}],["agreement",{"3":{"265":1,"301":1,"560":1,"781":1,"1005":1,"1270":1,"1286":1,"1300":1,"1301":1,"1324":2,"1339":1,"1359":2,"1395":2,"1396":1,"1436":2,"1653":1,"2086":1,"2138":1}}],["agreed",{"3":{"77":1,"648":1,"1270":1,"1300":1,"1324":1,"1359":3,"1395":1,"1396":3}}],["agree",{"3":{"0":2,"109":1,"217":1,"220":1,"243":1,"265":1,"272":1,"302":1,"443":1,"539":1,"540":1,"558":1,"611":1,"889":1,"890":1,"905":1,"907":1,"954":1,"956":1,"959":1,"1018":1,"1116":1,"1176":1,"1229":1,"1237":1,"1247":3,"1259":1,"1267":1,"1270":2,"1271":1,"1279":1,"1285":1,"1286":10,"1300":12,"1301":2,"1309":3,"1311":5,"1312":1,"1323":3,"1324":12,"1339":2,"1347":1,"1359":12,"1369":1,"1380":2,"1395":2,"1402":7,"1415":3,"1417":3,"1436":5,"1467":1,"1597":1,"1631":1,"1640":1,"1697":1,"1829":1,"1833":1,"1927":1,"1937":1,"1953":1,"2024":1,"2046":1,"2082":1,"2083":1,"2135":1,"2137":1,"2167":1}}],["ago",{"2":{"1475":1},"3":{"0":2,"535":1,"539":1,"905":3,"1247":1,"1286":2,"1359":2,"1436":2,"1455":1,"1465":2,"1475":2,"1844":1,"1887":1,"2161":2}}],["again",{"1":{"796":1,"797":1,"798":1,"799":1,"800":1,"801":1,"802":1,"803":1,"804":1,"805":1,"806":1,"1835":1,"1836":1,"1837":1,"1838":1,"1839":1,"1840":1,"1841":1,"1842":1,"1843":1,"1844":1,"1845":1,"1846":1},"3":{"0":3,"21":1,"130":2,"178":1,"251":2,"252":1,"254":1,"295":1,"335":1,"390":1,"395":2,"418":1,"425":1,"426":1,"443":1,"468":2,"488":1,"489":1,"508":1,"520":1,"524":1,"534":1,"539":1,"543":1,"551":1,"552":1,"607":1,"624":1,"696":1,"758":1,"776":1,"792":1,"796":1,"797":1,"799":1,"800":1,"819":1,"825":1,"827":1,"861":1,"869":1,"876":1,"905":1,"907":1,"934":1,"996":1,"1014":1,"1018":1,"1024":1,"1043":1,"1044":1,"1049":1,"1090":1,"1094":1,"1117":1,"1144":1,"1212":1,"1227":1,"1229":1,"1237":1,"1239":1,"1242":1,"1247":2,"1251":1,"1253":1,"1259":5,"1269":1,"1270":6,"1271":1,"1275":1,"1283":1,"1286":15,"1300":6,"1301":1,"1304":2,"1306":1,"1309":3,"1311":10,"1320":1,"1323":8,"1324":19,"1332":1,"1333":1,"1338":1,"1339":3,"1350":2,"1359":16,"1362":1,"1366":1,"1369":5,"1380":4,"1390":1,"1391":1,"1395":15,"1396":20,"1402":10,"1410":1,"1415":9,"1416":2,"1417":5,"1426":1,"1436":11,"1438":2,"1453":1,"1454":2,"1465":1,"1467":1,"1481":1,"1488":1,"1492":1,"1496":2,"1591":1,"1632":2,"1640":1,"1684":1,"1685":1,"1686":1,"1749":2,"1765":2,"1769":1,"1815":1,"1835":1,"1908":1,"1924":1,"1950":1,"1975":1,"1992":1,"2026":1,"2070":2,"2075":1,"2082":1,"2083":1,"2147":1,"2165":1,"2171":1,"2190":2,"2192":1,"2206":1,"2232":1}}],["against",{"0":{"1952":1,"2167":1},"1":{"1780":1,"1781":1,"1782":1,"1783":1,"1784":1,"1785":1,"1786":1,"1787":1,"1794":1,"1795":1,"1796":1,"1797":1,"1798":1,"1799":1,"1800":1,"1801":1,"1802":1},"3":{"0":37,"21":1,"31":2,"42":1,"53":1,"57":2,"62":1,"63":1,"80":1,"82":1,"90":1,"92":1,"98":1,"99":2,"100":1,"109":3,"121":1,"125":1,"128":1,"130":1,"135":3,"136":3,"137":3,"139":1,"143":1,"147":1,"150":2,"151":1,"159":1,"179":1,"182":1,"185":1,"186":1,"189":1,"196":1,"201":1,"206":1,"217":1,"220":1,"225":1,"234":1,"235":2,"245":2,"249":1,"250":1,"251":1,"252":1,"255":1,"257":1,"265":6,"280":1,"282":1,"284":2,"286":2,"295":1,"312":1,"314":1,"320":2,"322":1,"328":1,"333":1,"341":1,"342":1,"344":1,"350":1,"363":1,"365":1,"370":1,"371":1,"380":1,"405":1,"409":1,"427":1,"439":1,"446":1,"447":1,"451":1,"458":1,"459":1,"463":1,"464":1,"465":1,"466":1,"468":1,"472":2,"478":1,"486":1,"489":1,"497":3,"499":3,"502":1,"507":1,"510":1,"511":1,"536":2,"537":1,"538":2,"539":1,"543":1,"556":2,"563":1,"564":2,"566":1,"572":7,"573":1,"576":2,"577":1,"583":1,"585":3,"586":1,"591":3,"592":2,"593":1,"599":1,"608":1,"609":5,"610":1,"611":3,"618":1,"620":1,"625":1,"626":6,"628":1,"631":2,"632":1,"633":5,"640":3,"649":1,"657":1,"665":1,"682":1,"696":1,"698":2,"713":1,"715":2,"717":1,"718":1,"727":1,"733":2,"740":1,"743":1,"756":1,"759":2,"760":1,"765":3,"767":1,"768":2,"797":1,"798":1,"799":1,"804":1,"805":1,"810":2,"811":1,"812":1,"813":1,"818":1,"820":1,"821":1,"825":3,"827":3,"828":1,"832":1,"833":1,"837":1,"838":2,"842":2,"845":1,"859":1,"860":2,"861":4,"862":3,"863":2,"875":1,"876":1,"881":1,"890":1,"897":1,"905":3,"906":1,"910":1,"912":1,"914":1,"917":1,"918":1,"926":3,"930":1,"933":1,"941":1,"946":2,"948":1,"953":1,"954":1,"955":1,"966":1,"971":1,"973":1,"974":1,"976":1,"982":2,"983":1,"988":1,"989":1,"998":2,"1004":1,"1011":1,"1012":4,"1014":2,"1016":1,"1018":6,"1020":1,"1026":3,"1028":1,"1034":2,"1036":1,"1044":1,"1050":2,"1052":1,"1054":2,"1055":1,"1059":3,"1061":1,"1066":1,"1067":6,"1069":1,"1075":1,"1076":2,"1082":1,"1089":1,"1091":2,"1092":1,"1108":2,"1116":1,"1124":1,"1125":1,"1126":1,"1135":1,"1140":1,"1161":1,"1184":1,"1186":2,"1196":1,"1210":1,"1212":4,"1213":3,"1214":1,"1216":3,"1224":1,"1229":1,"1237":5,"1238":1,"1240":1,"1241":1,"1243":1,"1244":4,"1247":19,"1249":1,"1252":1,"1254":2,"1256":2,"1258":2,"1259":10,"1262":1,"1263":1,"1265":1,"1266":1,"1267":2,"1269":1,"1270":32,"1271":3,"1273":1,"1275":1,"1276":1,"1278":2,"1281":2,"1283":1,"1284":1,"1285":1,"1286":76,"1288":1,"1289":2,"1290":1,"1293":2,"1297":2,"1298":1,"1300":76,"1301":14,"1304":1,"1306":1,"1307":1,"1309":13,"1310":6,"1311":30,"1312":2,"1315":1,"1317":3,"1323":41,"1324":77,"1326":2,"1328":3,"1330":1,"1332":2,"1334":1,"1337":2,"1339":42,"1340":1,"1342":2,"1344":2,"1346":1,"1347":3,"1350":27,"1352":1,"1353":2,"1357":2,"1358":2,"1359":138,"1365":2,"1366":2,"1369":10,"1372":1,"1373":5,"1375":1,"1377":1,"1380":13,"1382":1,"1383":2,"1384":1,"1385":1,"1388":1,"1390":1,"1391":1,"1394":1,"1395":61,"1396":46,"1398":1,"1399":1,"1402":19,"1405":1,"1413":1,"1414":2,"1415":31,"1416":6,"1417":21,"1418":1,"1419":1,"1420":1,"1421":1,"1427":10,"1428":2,"1429":1,"1430":1,"1431":7,"1432":2,"1434":1,"1435":4,"1436":241,"1437":6,"1438":30,"1441":1,"1442":3,"1443":3,"1445":4,"1446":3,"1447":1,"1448":1,"1449":2,"1450":1,"1453":10,"1455":8,"1456":3,"1458":4,"1460":3,"1461":1,"1462":1,"1465":4,"1467":20,"1469":1,"1471":1,"1474":3,"1475":3,"1476":4,"1477":1,"1480":1,"1481":1,"1484":2,"1486":4,"1487":9,"1488":7,"1489":7,"1490":10,"1492":11,"1495":1,"1496":52,"1499":1,"1504":1,"1516":1,"1519":1,"1522":1,"1524":1,"1525":1,"1526":8,"1527":2,"1531":3,"1534":2,"1536":2,"1537":1,"1545":1,"1548":1,"1549":1,"1551":1,"1567":1,"1572":2,"1573":1,"1574":1,"1575":1,"1577":14,"1578":1,"1582":2,"1587":1,"1589":1,"1591":4,"1592":1,"1596":3,"1599":2,"1600":1,"1606":1,"1611":2,"1631":4,"1632":2,"1639":2,"1640":2,"1641":5,"1643":1,"1648":1,"1649":1,"1653":5,"1654":2,"1656":1,"1659":1,"1661":2,"1663":1,"1666":1,"1667":3,"1668":1,"1669":1,"1671":4,"1672":2,"1673":2,"1675":1,"1683":1,"1684":1,"1685":1,"1695":2,"1696":1,"1698":1,"1706":1,"1707":3,"1716":2,"1719":2,"1720":1,"1722":2,"1727":6,"1728":2,"1729":2,"1731":3,"1736":1,"1740":1,"1747":1,"1748":2,"1749":2,"1750":2,"1765":6,"1767":2,"1779":1,"1780":3,"1782":1,"1783":1,"1784":1,"1790":2,"1793":1,"1794":2,"1795":1,"1797":1,"1800":1,"1801":1,"1802":2,"1810":2,"1812":1,"1815":4,"1816":1,"1817":2,"1822":1,"1826":1,"1839":1,"1840":1,"1847":1,"1852":1,"1859":1,"1861":1,"1863":1,"1871":1,"1889":1,"1891":2,"1895":1,"1897":2,"1898":1,"1899":2,"1900":1,"1901":1,"1902":1,"1909":1,"1911":1,"1915":1,"1918":2,"1919":2,"1920":1,"1923":1,"1925":1,"1927":1,"1929":1,"1930":1,"1934":1,"1944":1,"1945":1,"1948":1,"1950":1,"1962":1,"1966":1,"1974":1,"1982":2,"1983":1,"1990":1,"1996":2,"1999":2,"2000":1,"2001":2,"2002":1,"2009":1,"2021":1,"2024":1,"2030":1,"2034":4,"2040":1,"2041":2,"2044":4,"2045":4,"2046":2,"2047":6,"2048":1,"2053":3,"2055":3,"2056":1,"2057":2,"2059":3,"2062":1,"2066":1,"2067":1,"2072":1,"2074":1,"2079":3,"2082":1,"2083":2,"2085":1,"2086":1,"2087":1,"2089":2,"2096":1,"2097":1,"2100":2,"2104":1,"2108":1,"2114":1,"2117":1,"2123":1,"2126":3,"2127":1,"2129":1,"2130":1,"2141":1,"2144":2,"2145":1,"2149":1,"2152":1,"2155":1,"2157":1,"2158":3,"2164":1,"2167":2,"2168":1,"2180":1,"2186":1,"2192":2,"2198":1,"2204":1,"2205":2,"2214":1,"2220":1,"2231":1,"2232":3,"2234":1,"2245":1}}],["agnostic",{"0":{"1361":1},"3":{"0":1,"59":1,"109":1,"110":1,"118":1,"164":1,"166":1,"167":1,"177":1,"265":2,"507":1,"690":1,"774":1,"1068":1,"1192":1,"1212":1,"1217":1,"1229":1,"1247":1,"1248":1,"1259":3,"1271":1,"1278":1,"1286":7,"1300":2,"1301":2,"1309":1,"1311":4,"1312":2,"1323":1,"1324":6,"1332":1,"1339":1,"1350":1,"1351":1,"1359":6,"1360":1,"1395":1,"1396":5,"1402":2,"1412":1,"1415":5,"1416":2,"1417":7,"1427":1,"1436":5,"1438":1,"1445":1,"1496":2,"1510":1,"1576":1,"1651":1,"1653":1,"1663":1,"1720":1,"1765":1,"1783":1,"1790":1,"1793":2,"1805":1,"1926":1,"1933":1,"1935":1,"1937":1,"2001":1,"2016":1,"2079":1,"2083":1,"2085":1,"2086":1,"2104":1,"2179":1,"2227":1,"2230":1}}],["aged",{"3":{"1465":1}}],["agerangespec",{"3":{"1199":2,"1207":1}}],["agegreaterthanspecification",{"3":{"1199":2,"1207":1}}],["agegreaterthanspec",{"3":{"1199":2,"1207":1}}],["agenda",{"3":{"387":1,"1309":5,"1350":1,"1351":1,"1358":1,"1359":4,"1369":2,"1436":3,"1438":1,"1489":1,"1631":1,"1922":2}}],["agents",{"2":{"636":1},"3":{"633":1,"636":2,"914":1,"917":1,"1004":1,"1007":1,"1167":1,"1212":1,"1496":1,"1526":3,"1531":1,"1570":1,"1577":2,"1591":1,"2239":2}}],["agentic",{"3":{"0":1,"1570":1,"1591":1,"2239":1}}],["agent",{"3":{"0":2,"1":1,"774":2,"905":1,"1013":1,"1067":1,"1069":1,"1090":2,"1169":1,"1283":1,"1286":2,"1300":3,"1311":1,"1324":2,"1339":1,"1395":1,"1406":1,"1415":2,"1430":1,"1436":5,"1438":1,"1449":1,"1465":1,"1553":3,"1577":2,"1582":1,"2171":1,"2221":1,"2239":5}}],["age=",{"3":{"1436":1}}],["age=0",{"3":{"217":1,"1324":1,"1339":1,"2149":1}}],["age=31536000",{"3":{"214":1,"1339":1,"1359":1,"2149":1}}],["ages",{"3":{"0":1,"903":1,"905":2,"907":1,"930":1,"1259":1,"1311":1,"1339":1,"1455":1,"1591":1,"1801":1,"1984":1}}],["age",{"2":{"24":1,"2156":1,"2191":1},"3":{"0":2,"15":1,"24":3,"200":1,"501":1,"536":2,"538":1,"540":1,"572":1,"591":1,"594":1,"625":1,"626":3,"627":1,"628":1,"629":1,"707":2,"733":1,"735":1,"809":1,"1256":1,"1259":5,"1286":3,"1298":1,"1300":1,"1301":2,"1324":5,"1395":2,"1445":1,"1455":1,"1460":1,"1465":1,"1467":1,"1475":2,"1476":1,"1488":1,"1665":1,"1982":1,"1984":2,"1985":1,"2055":1,"2156":3,"2159":1,"2167":2,"2168":1,"2191":3}}],["ahead",{"3":{"0":3,"62":1,"107":1,"109":1,"111":1,"170":1,"202":2,"214":1,"217":1,"265":1,"284":1,"290":1,"296":1,"348":1,"350":1,"353":1,"401":1,"459":1,"462":1,"464":1,"465":1,"534":1,"749":1,"751":1,"790":2,"848":1,"988":2,"1012":1,"1076":1,"1117":1,"1259":2,"1264":1,"1265":1,"1267":1,"1270":2,"1286":9,"1300":1,"1311":5,"1323":2,"1324":3,"1333":1,"1339":3,"1344":1,"1359":21,"1369":2,"1383":1,"1395":3,"1396":6,"1402":2,"1415":2,"1416":1,"1417":1,"1436":4,"1455":2,"1489":1,"1496":2,"1686":1,"1799":1,"1821":1,"1825":1,"1852":1,"1888":1,"1891":1,"1920":1,"1977":1,"2122":1,"2126":1,"2157":1}}],["amd64",{"3":{"1465":1}}],["am",{"0":{"2062":1},"3":{"1396":1,"1415":1,"1416":1,"1417":4,"1436":1,"2078":1,"2116":2,"2136":1,"2213":2}}],["amber",{"3":{"1324":2}}],["ambiguities",{"3":{"1639":1}}],["ambiguity",{"1":{"985":1,"986":1,"987":1,"988":1,"989":1,"990":1,"991":1,"992":1},"3":{"0":1,"109":1,"361":1,"592":1,"629":1,"985":1,"987":1,"988":5,"989":1,"990":1,"991":1,"1270":1,"1286":5,"1293":1,"1300":1,"1359":1,"1369":1,"1380":1,"1395":1,"1436":1,"1454":1,"1577":1,"1664":1,"1840":1,"2232":1}}],["ambiguousmatchexception",{"3":{"1324":2}}],["ambiguoussource",{"2":{"1840":1,"1852":1},"3":{"988":1,"1286":1,"1840":1,"1852":1}}],["ambiguous",{"0":{"1840":1},"3":{"0":1,"109":1,"318":1,"320":1,"324":1,"325":1,"326":1,"617":1,"709":1,"861":1,"988":3,"992":1,"1191":1,"1196":1,"1270":3,"1278":1,"1286":5,"1323":1,"1324":2,"1350":1,"1359":3,"1380":1,"1395":1,"1415":4,"1436":5,"1496":16,"1500":1,"1611":1,"1661":1,"1664":1,"1729":1,"1840":2,"1852":1}}],["ambiently",{"3":{"1286":1}}],["ambienthandler",{"3":{"1247":2}}],["ambientscope",{"2":{"1246":1},"3":{"1199":2,"1203":1,"1207":1,"1246":1,"1247":3,"1496":1}}],["ambientorigin",{"2":{"26":1,"202":1,"702":1,"1040":1,"1042":1,"1253":1,"1318":1,"2186":1,"2193":1},"3":{"0":1,"26":4,"202":3,"702":2,"1040":1,"1042":3,"1199":6,"1203":1,"1207":2,"1253":1,"1259":5,"1286":6,"1313":1,"1318":6,"1323":14,"1496":2,"2186":1,"2193":1}}],["ambient",{"1":{"1158":1,"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1},"3":{"0":3,"15":1,"202":1,"359":1,"365":1,"372":1,"583":1,"585":1,"899":1,"905":1,"926":1,"988":1,"1158":1,"1161":1,"1212":2,"1229":1,"1237":2,"1246":2,"1247":4,"1251":1,"1253":2,"1259":10,"1263":2,"1265":1,"1270":10,"1271":2,"1274":1,"1277":1,"1278":1,"1286":20,"1296":1,"1300":5,"1306":1,"1309":7,"1311":5,"1313":1,"1318":2,"1323":5,"1324":11,"1350":3,"1352":1,"1359":23,"1395":1,"1396":8,"1402":2,"1412":1,"1415":2,"1417":1,"1436":12,"1496":1,"1526":1,"1577":1,"1585":1,"1591":2,"1664":1,"1840":1,"2060":1,"2135":1,"2142":1,"2232":1}}],["america",{"3":{"1350":1,"1359":2,"1364":1,"1369":1,"1384":1,"1395":3,"1438":1,"1630":1,"1631":1,"1637":1,"2220":1}}],["american",{"3":{"1020":1,"1091":1,"1424":1}}],["amends",{"1":{"730":1,"731":1,"732":1,"733":1,"734":1,"735":1,"736":1,"737":1},"3":{"0":5,"247":2,"432":1,"730":1,"731":1,"817":1,"836":1,"929":1,"1212":5,"2032":1,"2232":2}}],["amendments",{"3":{"66":1,"72":1,"827":1,"1339":1}}],["amendment",{"0":{"81":1},"3":{"0":1,"76":1,"81":2,"82":1,"230":1,"241":1,"243":1,"249":1,"258":1,"395":1,"409":1,"411":2,"438":1,"825":2,"827":2,"1079":1,"1339":1,"1455":1,"1458":1,"1467":1,"1600":1,"1748":1,"1755":1,"1765":1,"2025":1}}],["amended",{"0":{"401":1,"402":1,"407":1},"3":{"0":16,"15":1,"57":1,"66":1,"76":1,"145":7,"184":1,"223":1,"241":3,"243":3,"244":1,"253":1,"263":1,"265":2,"328":2,"386":6,"395":14,"397":1,"408":1,"409":1,"411":1,"439":1,"446":1,"526":2,"534":3,"680":2,"688":2,"691":1,"737":1,"817":1,"842":1,"1073":1,"1212":1,"1496":1,"1577":1,"1631":1}}],["amqpendpoint",{"3":{"1339":1}}],["amqpendpointname",{"3":{"1339":1}}],["amqptargetport",{"3":{"1339":1}}],["amqp",{"3":{"626":1,"640":1,"1075":1,"1323":2,"1327":1,"1339":5,"1436":3,"1438":2,"1444":1,"1455":1}}],["amplify",{"3":{"2037":1}}],["amplifies",{"3":{"2007":1}}],["amplified",{"3":{"1339":1}}],["amplifier",{"3":{"369":1,"1311":1,"1324":1}}],["amplification",{"3":{"227":1,"717":1,"792":1,"1259":1,"1324":1,"1332":1,"1339":1,"1940":1}}],["ample",{"3":{"361":1,"1286":1,"1300":1,"2145":1}}],["amortized",{"3":{"1534":1}}],["amortizes",{"3":{"459":1}}],["amortises",{"3":{"1247":1}}],["amounts",{"3":{"1229":1,"1237":1,"1324":4,"1767":1}}],["amount",{"2":{"660":1},"3":{"284":1,"536":1,"592":1,"657":5,"658":1,"660":1,"683":1,"1026":2,"1027":1,"1234":1,"1237":6,"1247":1,"1282":1,"1286":3,"1312":2,"1324":6,"1389":1,"1395":3,"1396":3,"1402":1,"1415":1,"1436":5,"1467":1,"1749":2,"1764":3,"1765":2,"1767":3,"1770":1,"1776":1,"1810":1,"1909":1,"1941":1,"2047":1,"2073":1}}],["among",{"3":{"0":2,"111":1,"132":1,"175":1,"386":1,"549":1,"551":1,"577":1,"591":1,"628":1,"633":1,"655":1,"743":1,"765":1,"766":1,"891":1,"1116":1,"1124":1,"1196":1,"1213":1,"1229":1,"1237":1,"1239":1,"1243":1,"1247":1,"1270":1,"1286":2,"1309":1,"1323":2,"1324":2,"1339":1,"1350":2,"1359":5,"1369":3,"1395":1,"1404":1,"1406":1,"1415":2,"1417":2,"1427":1,"1436":3,"1467":1,"1469":1,"1496":8,"1526":1,"1582":1,"1583":1,"1631":1,"1635":1,"1722":1,"1824":1,"1839":1,"1963":1,"2000":1,"2043":1,"2087":1}}],["amr",{"2":{"2197":1},"3":{"0":1,"1059":1,"1300":1,"2197":1}}],["ac5b175",{"3":{"1496":1}}],["acompiledpermission",{"3":{"1436":1}}],["acontrollerthatinheritsitsdecisionfromanabstractbase",{"3":{"1436":3}}],["acountinafixedpluralsentence",{"3":{"1436":2}}],["achieved",{"3":{"1339":1,"1395":1}}],["achieves",{"3":{"809":1}}],["acute",{"3":{"1324":1}}],["acme",{"2":{"1718":1,"1723":1},"3":{"1270":1,"1718":1,"1719":2,"1723":1,"1851":1,"1920":3}}],["acyclicfixtures",{"3":{"1207":1,"1436":2}}],["acyclicconsumer",{"3":{"1199":1,"1207":1,"1436":3}}],["acyclicity",{"3":{"846":1,"1247":1,"1270":1,"1436":4,"1671":1}}],["acyclic",{"3":{"507":1,"513":1,"1207":2,"1286":1,"1324":2,"1417":3,"1431":1,"1436":7,"1572":1}}],["acquiring",{"3":{"707":1,"1270":1,"1298":1,"1300":3,"1324":1,"1339":1,"1395":1,"1909":1,"1912":1}}],["acquireasynccore",{"3":{"1311":2}}],["acquireasync",{"3":{"1270":3,"1300":3,"1301":1}}],["acquireaccesstokenasync",{"2":{"507":1},"3":{"507":1,"1324":7,"1417":1,"1436":1}}],["acquires",{"3":{"0":1,"510":1,"524":1,"549":1,"996":1,"1145":1,"1300":1,"1301":2,"1311":1,"1324":3,"1396":1}}],["acquire",{"3":{"0":1,"157":2,"827":1,"863":1,"996":2,"998":1,"1270":2,"1286":1,"1300":2,"1301":1,"1311":1,"1316":1,"1323":7,"1324":3,"1402":1,"1417":1,"1436":1,"1438":1,"1577":2,"1909":1,"2174":1}}],["acquired",{"3":{"0":1,"688":1,"1300":1,"1311":6,"1323":1,"1324":4,"1436":1}}],["acquisitions",{"3":{"507":1}}],["acquisition",{"3":{"506":1,"507":1,"513":2,"550":1,"551":1,"996":3,"997":1,"1269":1,"1300":1,"1311":1,"1316":1,"1323":9,"1324":8,"1417":2,"1669":1,"1909":2}}],["acknowledging",{"3":{"1306":1,"1396":1,"1933":1}}],["acknowledge",{"3":{"1417":1}}],["acknowledges",{"3":{"1396":1,"2169":1}}],["acknowledgement",{"3":{"988":1,"1286":1,"1339":1,"1380":1,"1438":1,"1840":1}}],["acknowledged",{"3":{"790":1,"794":1,"1323":1,"1359":1,"1402":1,"1415":1}}],["acks",{"3":{"1259":2,"1323":1}}],["acked",{"3":{"1258":1,"1259":1,"1311":2,"1355":2,"1359":1,"1396":1,"1402":1,"1413":1,"1415":1,"1910":1}}],["acking",{"3":{"195":1,"1259":1,"1396":2}}],["ack",{"3":{"194":1,"201":2,"1259":2,"1323":2}}],["acl",{"3":{"0":1,"1576":1,"1577":1}}],["acted",{"3":{"1237":1,"1286":1,"1324":1,"1350":1,"1395":1,"1402":2}}],["acts",{"3":{"435":1,"538":1,"601":1,"741":1,"793":1,"813":1,"821":1,"1228":1,"1233":1,"1286":1,"1311":1,"1318":1,"1323":1,"1324":1,"1359":2,"1402":1,"1415":2,"1436":2,"1438":1,"1455":1,"1473":1,"1478":1,"1651":1,"1822":1,"1840":1,"1843":1,"2133":1}}],["actual",{"2":{"1457":1,"1458":1},"3":{"93":1,"235":1,"265":1,"368":1,"529":1,"666":1,"707":1,"765":1,"767":1,"800":1,"839":1,"1237":1,"1241":1,"1247":2,"1251":1,"1259":1,"1270":1,"1271":1,"1281":1,"1285":1,"1286":7,"1300":6,"1307":1,"1310":1,"1311":1,"1323":7,"1324":5,"1339":2,"1350":1,"1359":5,"1369":3,"1380":1,"1395":5,"1396":7,"1402":2,"1415":5,"1416":1,"1417":3,"1427":1,"1429":1,"1436":10,"1438":1,"1441":1,"1455":1,"1457":2,"1458":2,"1466":1,"1467":1,"1488":1,"1496":3,"1498":1,"1567":1,"1591":2,"1653":1,"1686":1,"1764":1,"1815":1,"1817":1,"1818":1,"1865":1,"1927":1,"2042":1,"2053":1,"2126":1,"2194":1}}],["actually",{"0":{"1363":1,"1399":1,"1425":1,"1872":1,"1883":1,"1909":1,"2111":1,"2144":1},"1":{"1794":1,"1795":1,"1796":1,"1797":1,"1798":1,"1799":1,"1800":1,"1801":1,"1802":1,"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1956":1,"1957":1,"1958":1,"1959":1,"2029":1,"2030":1,"2031":1,"2032":1,"2033":1,"2034":1,"2035":1,"2036":1,"2037":1,"2038":1},"3":{"0":2,"10":1,"21":1,"38":1,"70":1,"103":1,"109":1,"115":1,"125":1,"126":1,"130":1,"136":1,"150":1,"157":2,"177":1,"200":1,"215":1,"259":1,"286":1,"318":1,"335":2,"342":1,"343":1,"359":1,"369":1,"371":1,"373":1,"395":1,"401":1,"407":1,"428":1,"447":1,"461":2,"463":1,"506":1,"526":2,"543":2,"549":1,"564":1,"572":1,"585":1,"592":2,"601":1,"607":1,"626":1,"627":1,"630":1,"638":1,"639":1,"642":1,"650":1,"674":1,"682":1,"689":2,"690":1,"691":1,"714":1,"716":1,"718":1,"741":1,"758":1,"767":1,"773":1,"774":1,"789":1,"791":1,"797":1,"832":1,"836":1,"838":1,"861":1,"873":1,"876":1,"881":1,"905":1,"906":1,"914":1,"946":1,"962":1,"963":1,"971":1,"972":2,"1033":1,"1041":1,"1074":1,"1084":1,"1123":1,"1142":1,"1147":1,"1162":1,"1176":1,"1190":1,"1212":1,"1220":1,"1229":2,"1231":2,"1237":1,"1244":2,"1247":6,"1253":1,"1259":5,"1263":1,"1267":1,"1270":9,"1271":1,"1276":1,"1277":1,"1286":42,"1300":16,"1301":3,"1302":1,"1309":5,"1310":4,"1311":17,"1312":3,"1317":1,"1323":23,"1324":28,"1339":18,"1344":1,"1350":14,"1351":1,"1352":1,"1359":45,"1363":1,"1369":7,"1379":1,"1380":7,"1381":1,"1389":2,"1392":1,"1395":28,"1396":33,"1397":1,"1398":1,"1402":13,"1405":1,"1414":1,"1415":24,"1416":8,"1417":12,"1421":1,"1424":1,"1425":1,"1427":4,"1431":3,"1432":2,"1435":2,"1436":77,"1438":8,"1443":1,"1448":1,"1449":1,"1451":1,"1453":1,"1454":1,"1455":5,"1458":1,"1461":1,"1467":3,"1470":3,"1471":1,"1476":1,"1484":1,"1486":1,"1488":2,"1489":5,"1490":3,"1491":1,"1492":1,"1496":2,"1500":1,"1537":1,"1566":1,"1572":1,"1605":1,"1651":1,"1665":1,"1684":1,"1685":2,"1686":1,"1701":1,"1710":1,"1721":1,"1726":1,"1730":1,"1739":1,"1749":1,"1764":1,"1767":1,"1769":5,"1783":1,"1784":1,"1788":1,"1793":2,"1794":1,"1796":2,"1810":1,"1813":1,"1818":1,"1821":1,"1825":1,"1852":1,"1860":1,"1865":1,"1867":1,"1876":2,"1877":1,"1895":1,"1908":1,"1909":1,"1916":1,"1920":1,"1929":1,"1930":1,"1931":1,"1950":1,"1951":1,"1953":2,"1955":1,"1960":1,"1965":1,"1968":1,"1973":1,"1980":1,"1994":1,"1998":1,"2000":1,"2002":1,"2010":1,"2012":1,"2013":1,"2027":1,"2029":3,"2033":1,"2038":1,"2041":1,"2042":1,"2043":1,"2044":1,"2045":1,"2048":1,"2053":1,"2055":2,"2059":1,"2060":1,"2070":1,"2077":1,"2082":1,"2087":1,"2098":1,"2104":1,"2105":1,"2109":1,"2114":1,"2119":1,"2126":1,"2128":2,"2129":1,"2141":1,"2142":1,"2145":1,"2147":1,"2150":1,"2151":1,"2153":1,"2154":1,"2156":1,"2160":3,"2169":2,"2177":1,"2183":1,"2191":1,"2203":1,"2205":1,"2208":1,"2209":1,"2232":1}}],["act",{"0":{"1236":1},"3":{"39":1,"81":1,"120":1,"202":1,"215":1,"225":1,"231":1,"830":1,"888":1,"898":1,"905":2,"989":2,"1005":1,"1051":1,"1067":2,"1091":1,"1175":1,"1186":1,"1252":1,"1259":2,"1265":1,"1270":2,"1280":1,"1286":8,"1289":1,"1300":2,"1304":1,"1309":2,"1311":1,"1313":1,"1318":1,"1323":1,"1324":4,"1327":1,"1339":2,"1342":1,"1350":2,"1357":1,"1358":1,"1359":11,"1376":1,"1380":1,"1396":5,"1402":5,"1415":4,"1427":2,"1430":1,"1436":7,"1438":2,"1441":1,"1478":5,"1485":1,"1639":1,"1654":1,"1771":1,"1824":1,"1873":1,"1877":1,"1934":1,"1940":1,"1941":1,"2033":1,"2056":1,"2152":1,"2170":1,"2174":1,"2190":1}}],["actors",{"0":{"1621":1,"1757":1},"3":{"1152":1,"1154":1,"1350":1,"1438":1,"1632":21,"1638":1,"1641":6}}],["actor",{"1":{"1148":1,"1149":1,"1150":1,"1151":1,"1152":1,"1153":1,"1154":1,"1155":1,"1156":1,"1157":1},"2":{"1150":1},"3":{"0":1,"340":1,"718":1,"1148":1,"1149":1,"1150":7,"1151":2,"1152":2,"1153":1,"1154":2,"1155":1,"1212":2,"1300":4,"1359":5,"1395":1,"1396":2,"1436":1,"1438":1,"1459":1,"1496":1,"1526":1,"1562":2,"1591":1,"1620":2,"1621":1,"1626":1,"1632":5,"1639":1,"1756":3,"1757":1,"1761":2,"1768":2,"1844":1,"1869":1,"2232":1}}],["actingspeakerid",{"2":{"1357":1},"3":{"1357":1,"1359":14,"1373":1,"1380":5}}],["acting",{"3":{"290":1,"797":1,"802":1,"1274":1,"1286":1,"1300":2,"1324":1,"1359":7,"1377":1,"1396":1,"1402":1,"1415":4,"1417":2,"1438":1,"1765":1}}],["activitiescontrollertests",{"3":{"1199":1,"1207":2,"1438":2}}],["activitiescontroller",{"3":{"1199":4,"1203":1,"1207":2,"1350":4,"1359":21,"1371":2,"1372":3,"1373":3,"1375":2,"1380":11,"1436":1}}],["activitiescache",{"2":{"386":1},"3":{"386":1,"1350":1,"1379":1,"1380":2}}],["activitiesmanage",{"2":{"184":1},"3":{"184":1,"1350":2,"1359":2,"1373":1,"1380":2}}],["activities",{"0":{"1392":1},"2":{"1359":1,"1380":1,"1395":1},"3":{"15":1,"186":1,"418":1,"836":1,"881":1,"1004":1,"1043":1,"1203":36,"1207":96,"1270":2,"1271":1,"1342":4,"1346":2,"1347":1,"1348":2,"1350":30,"1351":2,"1352":3,"1353":2,"1359":114,"1361":1,"1362":1,"1363":1,"1364":1,"1369":11,"1375":1,"1380":8,"1381":1,"1382":3,"1383":5,"1384":3,"1391":1,"1392":5,"1395":48,"1415":1,"1436":1,"1437":1,"1438":5,"1447":1,"1526":4,"1621":1,"1625":1,"1626":3,"1627":7,"1639":1,"2110":1,"2232":1}}],["activitylabel",{"3":{"1396":2}}],["activitylistener",{"3":{"1339":2}}],["activitylist",{"2":{"1627":1},"3":{"1199":1,"1203":1,"1207":2,"1324":2,"1350":2,"1383":4,"1392":2,"1395":12,"1627":1}}],["activitykind",{"3":{"1339":4}}],["activityvalidationrules",{"3":{"1207":9,"1271":1,"1350":1,"1353":1,"1359":44}}],["activityvenueurlrules",{"3":{"1199":2,"1203":1,"1207":1,"1271":1,"1359":4}}],["activityvenuenamerules",{"3":{"1199":2,"1203":1,"1207":1,"1359":2}}],["activityvenueaddressrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":2}}],["activitynavigationpopulatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["activitynavigationpopulator",{"3":{"1199":3,"1203":1,"1207":2,"1350":1,"1354":1,"1359":10}}],["activitynamerules",{"3":{"1199":2,"1203":1,"1207":1,"1350":1,"1359":5}}],["activitybuilder",{"3":{"1199":3,"1207":2,"1436":1,"1438":1}}],["activityupdateappliertests",{"3":{"1199":1,"1207":2}}],["activityupdateapplier",{"3":{"1199":2,"1203":1,"1207":2,"1270":2,"1354":1,"1359":7}}],["activityupdaterequestvalidatortests",{"3":{"1199":1,"1207":2}}],["activityupdaterequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":11}}],["activityupdaterequest",{"3":{"1199":9,"1203":1,"1207":2,"1350":1,"1359":15,"1380":1}}],["activityformfields",{"3":{"1350":1,"1395":2}}],["activityformmodel",{"3":{"1199":3,"1203":1,"1207":2,"1350":1,"1384":2,"1395":9}}],["activityfieldrules",{"3":{"1199":3,"1203":1,"1207":1,"1353":1,"1359":18}}],["activitydetails",{"2":{"1394":1},"3":{"1394":1,"1395":1}}],["activitydetailtests",{"3":{"1199":1,"1207":2}}],["activitydetail",{"2":{"1392":1,"1627":1},"3":{"1199":2,"1203":1,"1207":2,"1350":1,"1384":2,"1392":2,"1395":20,"1627":1}}],["activitydescriptionrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":7}}],["activitydtomappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["activitydtomapper",{"3":{"1199":5,"1203":1,"1207":2,"1350":3,"1353":1,"1359":10}}],["activitydto",{"3":{"1199":20,"1203":1,"1207":2,"1347":2,"1350":16,"1359":14,"1380":1,"1382":1,"1395":14}}],["activityid",{"3":{"1350":2}}],["activityidentifiertype",{"2":{"468":1,"475":1,"803":1},"3":{"468":1,"475":1,"803":1,"1350":3,"1359":5,"1395":4}}],["activityinvariantstests",{"3":{"1199":1,"1207":2,"1438":1}}],["activityinvariants",{"2":{"1344":1,"1362":1},"3":{"1199":12,"1203":1,"1207":2,"1344":4,"1350":10,"1359":29,"1362":1,"1369":5}}],["activityevent",{"3":{"1369":1}}],["activityeventidrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":12}}],["activityeditmodel",{"3":{"1199":3,"1203":1,"1207":2,"1395":6}}],["activitycontext",{"3":{"1259":1}}],["activityconfiguration",{"2":{"1361":1},"3":{"1199":1,"1203":1,"1207":2,"1350":3,"1361":2,"1362":5,"1369":4}}],["activitycreatetests",{"3":{"1199":1,"1207":2,"1436":1}}],["activitycreate",{"2":{"1392":1,"1627":1},"3":{"1199":2,"1203":1,"1207":2,"1350":3,"1392":2,"1395":19,"1526":1,"1627":1}}],["activitycreaterequestvalidatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["activitycreaterequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":18}}],["activitycreaterequestmapper",{"3":{"1199":1,"1203":1,"1207":2,"1359":9}}],["activitycreaterequest",{"3":{"1199":10,"1203":1,"1207":2,"1270":1,"1350":1,"1359":23,"1380":1}}],["activitycreatemodel",{"3":{"1199":4,"1203":1,"1207":2,"1395":5}}],["activitychanged",{"2":{"780":1},"3":{"780":1,"782":1,"1199":3,"1203":1,"1207":2,"1345":1,"1350":10,"1359":2}}],["activitysortorderrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":4}}],["activitysource",{"2":{"405":1,"1096":1},"3":{"405":1,"1096":1,"1286":1,"1427":1,"1442":1}}],["activityservice",{"3":{"881":1,"1199":5,"1203":1,"1207":2,"1382":3,"1395":19}}],["activitytraceflags",{"2":{"1333":1},"3":{"1333":2,"1339":4,"1443":1}}],["activitytests",{"3":{"1199":1,"1207":2,"1438":1}}],["activitytimerangerules",{"3":{"1199":2,"1203":1,"1207":1,"1353":2,"1359":7}}],["activitytimeoutheader",{"3":{"1436":1}}],["activitytimeout",{"2":{"837":1,"838":1},"3":{"837":1,"838":2,"1339":1,"1447":2}}],["activitytype",{"3":{"0":1,"690":1,"1212":1,"1396":25,"1415":3,"1631":1}}],["activity",{"2":{"692":1,"924":1,"1346":1,"1425":1},"3":{"0":1,"18":1,"395":2,"397":1,"399":2,"404":2,"406":1,"427":2,"428":1,"690":1,"692":3,"725":1,"827":1,"836":1,"837":1,"838":2,"842":1,"924":1,"1091":2,"1184":1,"1192":1,"1199":44,"1203":1,"1207":2,"1253":1,"1256":2,"1259":9,"1270":2,"1275":1,"1277":1,"1286":8,"1311":5,"1324":1,"1333":4,"1337":1,"1338":2,"1339":31,"1340":1,"1342":12,"1343":4,"1346":3,"1350":57,"1351":1,"1352":3,"1354":1,"1359":115,"1361":1,"1369":9,"1375":1,"1380":7,"1387":1,"1391":1,"1392":2,"1395":28,"1396":48,"1415":4,"1416":17,"1417":3,"1421":1,"1425":4,"1427":10,"1435":1,"1436":2,"1438":12,"1442":1,"1443":2,"1447":1,"1496":3,"1526":5,"1535":1,"1626":2,"1627":2,"1629":1,"1631":5,"1638":2,"1639":1,"1656":1,"1677":1,"1841":1,"2006":1,"2010":1,"2024":1,"2156":2,"2157":4,"2159":2,"2160":1}}],["activatable",{"3":{"1324":3}}],["activating",{"3":{"1286":1,"1293":1,"1300":1,"1322":1,"1417":1,"1436":1}}],["activationfailed",{"3":{"1455":1}}],["activations",{"3":{"1286":1}}],["activation",{"3":{"0":2,"558":1,"607":2,"609":4,"611":2,"755":1,"757":3,"758":1,"759":4,"760":3,"1150":1,"1270":1,"1286":4,"1300":1,"1323":1,"1396":4,"1416":8,"1417":2,"1436":2,"1442":1,"1455":6,"1461":4,"1465":2,"1467":7,"1469":3,"1474":2,"1476":3,"1477":1,"1482":1,"1496":1,"1591":1,"1764":1,"2036":2,"2038":1,"2158":1}}],["activatorutilities",{"3":{"1286":10}}],["activator",{"2":{"583":1,"585":1,"1315":1},"3":{"583":1,"585":1,"1229":2,"1237":1,"1247":1,"1286":3,"1300":2,"1315":1,"1323":1,"1436":1}}],["activate",{"3":{"1270":1,"1297":1,"1300":1,"1323":2,"1416":1,"1417":1,"1467":1}}],["activates",{"3":{"99":1,"234":1,"1278":1,"1286":1,"1293":1,"1300":1,"1311":1,"1322":1,"1417":3,"1431":3,"1436":3,"1441":1,"1443":1,"1455":2,"1591":1}}],["activated",{"3":{"0":1,"757":1,"760":1,"1432":1,"1436":3}}],["activeprobepath",{"3":{"1436":2}}],["activeprobetimeout",{"3":{"1436":1}}],["activeprobeinterval",{"3":{"1436":1}}],["activeutterance",{"3":{"1417":2}}],["activevote",{"3":{"1402":1}}],["activehealthcheckconfig",{"3":{"1339":3}}],["activehealthchecksexpected",{"2":{"578":1},"3":{"572":2,"578":1,"1436":5}}],["activecircuits",{"3":{"1324":4}}],["activespec",{"3":{"1199":2,"1207":1,"1496":1}}],["activerevisionsmode",{"2":{"757":1},"3":{"757":1,"1467":1}}],["actively",{"3":{"162":1,"174":1,"500":1,"1270":2,"1311":1,"1417":1,"1436":1,"1465":1,"1467":2,"1476":1,"1478":1,"1537":1,"1599":1,"2045":1}}],["active",{"1":{"456":1,"457":1,"458":1,"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1},"2":{"759":1},"3":{"0":7,"39":1,"40":1,"100":1,"120":1,"175":1,"195":1,"236":1,"265":4,"371":1,"372":1,"381":1,"390":1,"397":1,"402":2,"456":1,"458":1,"501":1,"545":1,"551":1,"572":5,"575":1,"578":2,"690":1,"715":1,"757":1,"759":1,"825":1,"827":5,"829":1,"831":1,"832":2,"833":6,"1026":3,"1042":2,"1124":2,"1125":1,"1168":2,"1231":1,"1237":1,"1247":2,"1274":1,"1286":14,"1293":1,"1294":1,"1300":15,"1309":1,"1311":2,"1312":2,"1318":2,"1323":3,"1324":28,"1329":1,"1330":1,"1333":2,"1338":2,"1339":24,"1350":7,"1355":2,"1359":13,"1385":1,"1395":17,"1396":38,"1398":2,"1400":1,"1401":1,"1402":30,"1413":1,"1415":6,"1417":8,"1424":1,"1436":21,"1438":1,"1443":6,"1447":4,"1450":1,"1451":1,"1455":2,"1467":4,"1477":1,"1488":1,"1526":5,"1534":1,"1562":1,"1590":1,"1591":1,"1600":1,"1627":1,"1630":3,"1631":3,"1632":2,"1633":1,"1635":2,"1639":7,"1640":1,"1641":2,"1643":1,"1653":1,"1663":1,"1667":1,"1671":1,"1677":2,"1747":2,"1749":3,"1750":3,"1761":1,"1764":2,"1765":6,"1767":5,"1768":1,"1769":1,"1773":2,"1810":1,"1861":1,"1984":1,"2010":1,"2030":1,"2055":1,"2063":1,"2069":1,"2083":1,"2085":1,"2086":1,"2156":1,"2158":1,"2185":2,"2220":1,"2238":2,"2241":1}}],["actiongroups",{"3":{"2158":1}}],["actiongroup",{"3":{"1577":1,"2158":1}}],["actionability",{"3":{"1436":1}}],["actionabletakeaways",{"3":{"1369":1}}],["actionabletakeawaysscore",{"3":{"1350":1,"1359":1,"1369":1}}],["actionable",{"3":{"1067":1,"1286":1,"1301":1,"1309":1,"1311":1,"1323":1,"1324":3,"1350":2,"1359":5,"1402":2,"1436":6,"1453":1,"1455":2,"1466":1,"1467":1,"1472":1,"1479":1,"1802":1,"2196":2,"2203":1}}],["actionview",{"3":{"1416":3}}],["actionid",{"3":{"1416":1}}],["actioned",{"3":{"1396":1}}],["action<",{"3":{"1395":1}}],["actioncolor",{"3":{"1324":1}}],["actiontext",{"3":{"1324":2}}],["actiondescriptor",{"2":{"1300":1},"3":{"1300":1}}],["actionresult",{"2":{"1227":1},"3":{"1227":1,"1311":1,"1380":1,"1415":2}}],["actions",{"1":{"1992":1,"1993":1,"1994":1,"1995":1,"1996":1,"1997":1},"2":{"626":1},"3":{"0":6,"149":1,"161":1,"175":2,"189":1,"273":1,"318":1,"324":1,"340":1,"343":1,"368":1,"370":2,"371":2,"372":2,"373":2,"374":5,"375":3,"413":1,"419":1,"448":1,"459":1,"591":2,"594":1,"626":17,"627":2,"628":2,"629":4,"692":1,"719":2,"725":1,"743":2,"854":1,"1012":1,"1074":1,"1116":1,"1247":1,"1270":1,"1286":4,"1294":1,"1300":6,"1309":5,"1311":25,"1323":5,"1324":16,"1350":3,"1359":11,"1369":1,"1371":2,"1372":1,"1373":1,"1375":1,"1380":19,"1395":4,"1396":5,"1402":9,"1406":2,"1407":2,"1408":1,"1409":1,"1414":2,"1415":18,"1416":7,"1417":4,"1432":1,"1436":14,"1438":1,"1452":1,"1453":5,"1454":5,"1455":4,"1456":2,"1457":1,"1459":2,"1461":2,"1465":1,"1466":1,"1467":6,"1468":1,"1472":2,"1474":1,"1475":8,"1482":1,"1483":1,"1484":3,"1488":2,"1491":1,"1492":2,"1496":11,"1526":3,"1531":2,"1534":1,"1553":1,"1559":2,"1561":1,"1577":4,"1582":2,"1583":1,"1585":1,"1586":1,"1591":2,"1599":2,"1626":2,"1627":1,"1630":1,"1631":4,"1632":13,"1633":1,"1641":2,"1747":1,"1749":1,"1750":3,"1760":2,"1870":1,"1874":1,"1898":1,"1925":1,"1930":1,"1991":1,"1992":1,"2000":1,"2001":2,"2083":1,"2131":1,"2208":1,"2219":1}}],["action",{"0":{"1350":1,"1372":1},"1":{"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"326":1},"2":{"1370":1,"1919":1},"3":{"0":11,"24":1,"77":1,"136":1,"155":2,"157":8,"159":1,"160":8,"175":2,"197":1,"209":1,"214":1,"219":1,"226":1,"265":2,"299":1,"300":1,"315":1,"318":14,"319":1,"325":1,"326":1,"330":2,"332":1,"334":1,"340":1,"341":5,"343":2,"345":1,"368":1,"370":12,"371":2,"372":3,"374":3,"375":7,"428":1,"444":1,"448":1,"450":1,"523":1,"528":1,"530":1,"534":1,"536":3,"538":2,"591":4,"594":3,"609":2,"611":1,"624":1,"626":22,"628":2,"629":5,"643":1,"644":1,"674":1,"690":1,"694":1,"723":1,"725":4,"726":1,"729":1,"733":1,"741":2,"744":1,"749":1,"788":1,"793":1,"809":1,"868":1,"869":1,"873":1,"881":1,"883":1,"897":4,"903":1,"905":2,"907":2,"914":1,"921":1,"922":3,"923":1,"995":1,"996":1,"1019":1,"1116":1,"1117":1,"1118":1,"1212":4,"1217":1,"1218":1,"1220":2,"1229":4,"1237":2,"1244":1,"1247":10,"1249":1,"1259":2,"1264":1,"1270":2,"1286":6,"1297":4,"1300":33,"1301":2,"1304":1,"1306":1,"1309":13,"1310":2,"1311":82,"1316":1,"1323":9,"1324":28,"1339":6,"1350":6,"1359":68,"1369":1,"1370":1,"1371":2,"1372":5,"1373":6,"1374":3,"1375":5,"1376":2,"1380":61,"1385":1,"1391":2,"1392":2,"1395":29,"1396":37,"1399":2,"1402":42,"1408":1,"1409":2,"1410":2,"1415":34,"1416":15,"1417":6,"1431":2,"1436":51,"1438":4,"1452":2,"1453":8,"1454":4,"1455":2,"1459":8,"1467":9,"1470":2,"1474":1,"1475":11,"1476":3,"1484":1,"1488":1,"1489":1,"1490":1,"1492":5,"1496":5,"1526":5,"1530":1,"1531":1,"1534":1,"1553":1,"1556":1,"1577":4,"1581":2,"1582":4,"1583":1,"1586":1,"1589":1,"1591":3,"1595":1,"1596":1,"1627":1,"1631":3,"1632":23,"1633":1,"1634":1,"1638":1,"1639":2,"1651":2,"1653":1,"1666":1,"1667":1,"1685":5,"1686":6,"1727":2,"1730":1,"1748":1,"1764":1,"1776":1,"1803":1,"1805":3,"1814":1,"1870":1,"1871":1,"1873":2,"1874":6,"1876":1,"1888":1,"1908":6,"1909":4,"1911":1,"1912":1,"1919":3,"1946":1,"1971":1,"1988":2,"1990":1,"1991":1,"1992":1,"1993":1,"1994":9,"1995":2,"1997":3,"2121":1,"2131":1,"2137":2,"2149":1,"2150":1,"2158":1,"2163":3,"2166":1,"2168":2,"2169":1,"2232":1}}],["acrname",{"2":{"1465":1},"3":{"1455":1,"1465":4,"1466":2,"1467":1}}],["acrpurgetask",{"3":{"1465":1}}],["acrpush",{"3":{"1455":1,"1465":2,"1472":2}}],["acrpull",{"3":{"601":1,"1455":1,"1465":1,"1467":1,"1470":1}}],["acrloginserver",{"2":{"1455":1,"1465":1},"3":{"1455":1,"1465":1,"1467":1}}],["acr",{"2":{"1463":1},"3":{"0":1,"599":2,"600":1,"756":1,"757":1,"868":1,"1445":3,"1455":11,"1461":2,"1465":10,"1466":1,"1467":8,"1469":1,"1472":1,"1474":2,"1496":1,"1526":1,"1535":1,"1577":1,"1591":1,"2033":1,"2037":1}}],["acrosstwotypes",{"3":{"1436":3}}],["across",{"1":{"504":1,"505":1,"506":1,"507":1,"508":1,"509":1,"510":1,"511":1,"512":1,"513":1,"514":1,"1925":1,"1926":1,"1927":1,"1928":1,"1929":1,"1930":1},"3":{"0":33,"3":3,"7":1,"19":1,"23":1,"24":3,"26":1,"39":1,"49":2,"80":3,"92":1,"109":2,"126":1,"128":1,"130":1,"135":4,"136":2,"137":3,"138":2,"139":2,"141":3,"142":3,"145":2,"146":1,"147":1,"148":1,"150":2,"157":3,"158":2,"168":3,"169":1,"177":1,"178":1,"184":1,"186":1,"187":1,"199":2,"227":1,"265":1,"272":1,"274":1,"280":1,"298":1,"302":1,"303":1,"311":1,"312":1,"313":1,"320":1,"349":1,"352":1,"358":1,"359":1,"360":1,"391":1,"397":1,"400":1,"418":2,"421":1,"448":1,"451":1,"454":1,"457":1,"461":3,"468":2,"474":1,"475":2,"476":1,"477":1,"483":1,"484":2,"486":1,"487":5,"488":6,"489":7,"490":11,"491":9,"492":8,"493":10,"494":11,"495":9,"497":1,"499":1,"504":1,"506":1,"509":1,"511":1,"524":1,"528":1,"543":1,"545":1,"547":1,"550":2,"551":2,"552":1,"556":2,"557":1,"574":1,"583":1,"593":1,"610":1,"616":4,"617":1,"618":3,"628":1,"633":2,"650":1,"674":2,"675":1,"677":1,"690":1,"696":2,"698":1,"699":1,"700":1,"702":2,"707":2,"709":1,"717":1,"724":1,"727":1,"729":1,"733":3,"735":1,"757":2,"764":2,"780":4,"782":1,"783":1,"784":1,"790":1,"793":1,"798":3,"799":2,"800":1,"803":3,"804":3,"805":3,"806":1,"810":1,"819":1,"821":3,"823":2,"827":5,"837":1,"846":1,"867":1,"880":2,"881":1,"882":1,"883":1,"885":1,"889":1,"891":1,"905":2,"931":1,"946":1,"948":1,"950":1,"954":1,"955":1,"958":1,"963":1,"964":2,"965":1,"966":1,"973":1,"980":7,"981":2,"982":1,"983":1,"988":1,"996":2,"998":1,"1004":2,"1006":1,"1011":1,"1014":1,"1020":3,"1025":1,"1027":1,"1036":1,"1049":2,"1050":3,"1051":2,"1052":1,"1054":2,"1059":1,"1060":1,"1062":1,"1067":1,"1074":1,"1076":1,"1082":1,"1092":2,"1094":1,"1099":1,"1100":2,"1133":2,"1134":1,"1136":1,"1150":1,"1154":1,"1157":1,"1189":1,"1194":1,"1200":1,"1201":1,"1202":1,"1212":6,"1229":8,"1230":1,"1231":1,"1233":2,"1234":1,"1237":15,"1239":1,"1243":2,"1247":15,"1248":1,"1253":2,"1256":1,"1257":2,"1259":19,"1260":1,"1267":2,"1269":4,"1270":17,"1271":8,"1276":3,"1278":1,"1279":1,"1281":1,"1283":1,"1284":1,"1286":54,"1287":1,"1289":1,"1296":1,"1298":2,"1300":27,"1301":12,"1302":1,"1304":1,"1308":1,"1309":8,"1310":4,"1311":39,"1312":8,"1316":1,"1317":1,"1318":1,"1323":30,"1324":43,"1333":1,"1336":1,"1339":12,"1340":2,"1342":2,"1347":1,"1348":1,"1350":24,"1351":1,"1352":1,"1353":1,"1359":41,"1364":1,"1369":9,"1375":1,"1378":1,"1380":8,"1381":1,"1395":17,"1396":46,"1401":1,"1402":20,"1403":2,"1406":2,"1410":1,"1415":23,"1416":6,"1417":33,"1424":1,"1427":1,"1428":1,"1431":2,"1436":87,"1438":13,"1441":2,"1442":2,"1447":1,"1454":1,"1455":4,"1456":1,"1459":1,"1460":1,"1461":3,"1463":1,"1464":1,"1465":3,"1467":6,"1474":2,"1475":1,"1486":1,"1487":6,"1488":2,"1489":5,"1492":1,"1496":41,"1498":2,"1499":1,"1513":1,"1514":1,"1519":1,"1525":3,"1526":14,"1532":1,"1533":1,"1534":3,"1535":2,"1536":1,"1542":1,"1544":2,"1550":2,"1551":1,"1556":1,"1557":1,"1559":1,"1565":1,"1567":1,"1569":2,"1571":1,"1576":2,"1577":11,"1582":1,"1583":1,"1584":1,"1591":4,"1592":1,"1600":3,"1629":1,"1630":3,"1631":2,"1638":4,"1640":3,"1641":3,"1648":1,"1649":1,"1650":1,"1660":1,"1661":1,"1664":2,"1665":1,"1666":1,"1667":1,"1669":1,"1671":3,"1672":1,"1673":3,"1675":1,"1677":1,"1683":1,"1694":1,"1701":1,"1714":1,"1723":1,"1726":1,"1736":1,"1747":2,"1750":1,"1767":2,"1768":2,"1769":1,"1772":1,"1779":1,"1782":2,"1784":1,"1788":1,"1790":1,"1792":1,"1793":1,"1795":3,"1796":1,"1799":1,"1813":1,"1815":3,"1823":1,"1829":2,"1832":1,"1839":1,"1842":1,"1843":3,"1845":1,"1849":1,"1850":1,"1851":1,"1852":3,"1853":2,"1859":3,"1860":1,"1861":4,"1865":1,"1866":1,"1868":1,"1874":3,"1875":1,"1893":1,"1894":1,"1895":1,"1896":1,"1898":1,"1899":1,"1908":3,"1912":3,"1913":1,"1920":1,"1923":1,"1924":3,"1925":2,"1927":1,"1930":3,"1931":1,"1935":1,"1940":2,"1948":1,"1950":1,"1953":1,"1958":1,"1960":2,"1961":1,"1963":1,"1965":1,"1976":1,"1978":1,"1979":1,"1987":1,"1990":1,"1993":1,"1995":1,"1996":1,"1998":1,"2001":2,"2006":1,"2010":1,"2011":1,"2013":1,"2018":1,"2024":1,"2025":1,"2031":1,"2034":1,"2037":2,"2039":1,"2042":2,"2043":1,"2048":1,"2049":1,"2055":2,"2057":2,"2065":1,"2067":1,"2073":1,"2075":1,"2079":1,"2080":1,"2081":4,"2097":1,"2100":2,"2101":2,"2104":1,"2110":1,"2111":1,"2114":1,"2131":1,"2138":2,"2143":1,"2155":1,"2156":1,"2157":1,"2159":1,"2161":1,"2168":1,"2172":1,"2174":1,"2177":2,"2178":1,"2180":1,"2187":1,"2202":1,"2208":2,"2220":7,"2230":1,"2232":2,"2238":1,"2240":1,"2244":1}}],["acc",{"3":{"1455":1,"1463":1,"1467":1,"1470":1,"1471":1,"1472":2,"1473":1,"1474":1,"1475":1}}],["accrete",{"3":{"1475":1}}],["accreted",{"3":{"1436":1,"1792":1}}],["accrue",{"3":{"1396":1}}],["accrues",{"3":{"800":1}}],["accruing",{"3":{"692":1}}],["according",{"3":{"1089":1,"1282":1,"1300":1,"1311":1,"1324":1}}],["accordingly",{"3":{"298":2,"511":1,"512":1,"744":1,"892":1,"967":1,"1304":1,"1359":2,"1446":1,"1496":3,"2037":1}}],["accomplish",{"3":{"1626":1}}],["accompany",{"3":{"1323":1}}],["accompanying",{"3":{"372":1,"1417":1}}],["accommodates",{"3":{"1631":1}}],["accommodate",{"3":{"1237":1,"1436":2}}],["accommodations",{"3":{"1300":1,"1630":1,"1631":1}}],["accommodation",{"3":{"988":1}}],["accountlocked",{"3":{"1415":1}}],["accountname",{"3":{"1300":1}}],["accounterased",{"3":{"1396":2}}],["accountendpoint",{"3":{"1286":1}}],["accountentity",{"3":{"1199":3,"1207":1}}],["accounted",{"3":{"178":1,"402":1,"1333":1,"1339":1,"1436":1,"1443":1}}],["accountdeletiontests",{"3":{"1199":1,"1207":2}}],["accountdto",{"3":{"1199":3,"1207":1}}],["accounting",{"3":{"1101":1,"1270":2,"1396":1,"1436":5}}],["accounts",{"0":{"1409":1},"2":{"314":1},"3":{"314":1,"350":2,"352":1,"355":1,"487":1,"488":1,"489":1,"490":1,"1286":6,"1289":1,"1293":2,"1300":5,"1311":2,"1322":2,"1324":1,"1326":1,"1396":3,"1408":1,"1410":1,"1412":1,"1415":23,"1417":1,"1436":2,"1441":3,"1444":1,"1456":1,"1490":1,"1529":1,"1595":1,"1596":2,"1638":1,"1641":3,"1664":1,"1667":1,"1769":1,"1977":1,"1978":1,"1999":1}}],["accountability",{"3":{"40":1,"1237":1,"1567":1,"2063":1}}],["account",{"3":{"0":12,"126":1,"160":1,"174":1,"175":1,"176":1,"230":1,"243":1,"279":2,"280":2,"282":1,"283":1,"284":7,"286":1,"310":2,"348":4,"349":1,"350":11,"351":3,"352":5,"353":11,"403":2,"433":1,"435":1,"438":1,"441":1,"458":4,"459":8,"460":2,"465":1,"493":1,"497":4,"498":1,"499":4,"500":1,"524":1,"527":2,"528":1,"530":3,"602":1,"618":1,"649":1,"663":1,"665":7,"666":6,"667":1,"669":2,"670":2,"690":1,"724":1,"725":1,"727":1,"734":1,"749":1,"790":1,"792":2,"853":3,"854":4,"855":1,"857":1,"904":2,"905":5,"906":1,"908":2,"946":2,"948":1,"950":1,"1059":2,"1116":3,"1119":1,"1212":1,"1237":2,"1264":1,"1270":1,"1271":1,"1279":1,"1283":1,"1284":2,"1286":20,"1287":1,"1289":3,"1290":3,"1291":2,"1293":4,"1294":3,"1295":2,"1300":105,"1307":1,"1309":2,"1311":24,"1322":6,"1323":76,"1324":35,"1332":1,"1339":1,"1350":1,"1355":2,"1359":9,"1382":1,"1395":3,"1396":17,"1402":6,"1403":1,"1405":5,"1406":12,"1407":1,"1408":3,"1409":5,"1410":3,"1411":2,"1412":1,"1414":5,"1415":142,"1417":7,"1432":1,"1436":22,"1437":1,"1438":5,"1455":1,"1467":16,"1470":2,"1473":1,"1478":1,"1481":2,"1484":1,"1488":2,"1496":1,"1596":4,"1597":1,"1600":1,"1608":1,"1621":2,"1626":1,"1627":3,"1631":1,"1632":9,"1634":2,"1639":2,"1641":24,"1667":5,"1672":1,"1675":1,"1746":1,"1747":4,"1755":1,"1764":3,"1765":7,"1767":1,"1768":2,"1771":1,"1777":2,"1821":1,"1825":1,"1900":1,"1902":1,"1940":1,"1945":1,"1970":3,"1973":3,"1975":1,"1977":10,"1978":6,"1979":5,"1980":1,"1982":3,"1983":1,"1984":1,"1998":2,"1999":2,"2000":1,"2001":3,"2002":4,"2010":1,"2036":2,"2038":1,"2063":2,"2066":5,"2067":1,"2127":2,"2196":1,"2197":2,"2198":2,"2203":1,"2220":1,"2232":1}}],["accumulation",{"3":{"1020":1,"1300":2,"1395":2,"1415":1,"1427":1,"1685":1}}],["accumulating",{"3":{"861":1,"1270":1,"1271":2,"1286":1,"1300":1,"1323":5,"1383":1,"1396":2,"1423":1,"1427":1,"1436":3,"2190":1}}],["accumulators",{"3":{"1359":2}}],["accumulator",{"3":{"658":1,"1234":1,"1237":2,"1300":1,"1324":1}}],["accumulated",{"3":{"657":1,"826":1,"1259":1,"1286":2,"1301":1,"1310":1,"1324":4,"1395":10,"1396":1,"1433":1,"1436":2,"1473":1,"1552":1}}],["accumulate",{"3":{"657":1,"707":1,"717":1,"750":1,"757":1,"846":1,"1093":1,"1237":1,"1247":1,"1256":1,"1271":1,"1286":2,"1300":1,"1301":1,"1316":1,"1323":1,"1324":2,"1359":1,"1396":1,"1402":1,"1409":1,"1415":3,"1427":1,"1436":1,"1845":1}}],["accumulates",{"3":{"26":1,"186":1,"329":1,"1005":1,"1123":3,"1237":2,"1286":1,"1309":3,"1311":1,"1317":1,"1324":1,"1358":1,"1359":1,"1395":1,"1402":1,"1416":1,"1423":1,"1425":1,"1436":1,"1465":1,"1685":1,"1687":1,"1962":1,"1986":1,"2000":1}}],["accuracy",{"3":{"250":1,"1019":1,"1191":1,"1196":1,"1341":1,"1359":1,"1417":2,"1500":1}}],["accurately",{"3":{"190":1}}],["accurate",{"3":{"71":1,"245":1,"632":1,"768":1,"1324":2,"1417":1,"1427":2,"1500":1,"2098":1}}],["accidents",{"3":{"1949":1}}],["accidentally",{"3":{"386":1,"619":1,"1219":1,"1221":1,"1229":1,"1247":1,"1259":1,"1271":3,"1286":3,"1300":1,"1301":1,"1311":3,"1323":1,"1324":4,"1350":3,"1359":5,"1369":1,"1380":1,"1395":3,"1396":1,"1415":3,"1417":1,"1427":1,"1436":4,"1455":1,"1488":1,"1489":1,"1638":1,"1805":1,"1953":1,"2016":1,"2085":1}}],["accidental",{"3":{"68":1,"265":1,"768":1,"1286":3,"1309":1,"1310":1,"1350":2,"1359":2,"1369":1,"1395":1,"1396":3,"1415":1,"1436":3,"1454":1,"1474":1,"1489":1,"1526":1,"1552":1,"1556":1,"1569":1,"1638":1,"1686":1,"1709":1,"2033":1,"2188":1}}],["accident",{"3":{"0":1,"22":1,"25":1,"131":1,"236":1,"255":1,"558":1,"642":1,"700":1,"827":1,"832":1,"855":1,"907":1,"913":1,"1085":1,"1109":1,"1124":1,"1135":1,"1163":1,"1237":1,"1259":2,"1270":1,"1286":7,"1300":4,"1301":1,"1309":1,"1320":1,"1323":4,"1324":5,"1330":1,"1339":5,"1350":1,"1359":1,"1395":2,"1396":3,"1415":1,"1417":1,"1421":1,"1427":1,"1438":1,"1444":1,"1474":1,"1489":1,"1819":1,"1827":1,"1841":1,"1851":1,"1923":1,"1995":2,"2033":1,"2100":1,"2157":1,"2196":1}}],["accelerate",{"3":{"2225":1}}],["accelerated",{"3":{"461":1}}],["accent",{"3":{"1324":5,"1395":2,"1436":2,"1526":1,"1591":1,"1595":1,"1596":2,"1597":1}}],["accented",{"3":{"741":1,"1271":1,"1289":1,"1300":1,"1311":1,"1312":2,"1324":5,"1436":4,"1438":1,"1577":1,"1591":1,"1596":1}}],["accents",{"3":{"265":1,"1311":1,"1324":3,"1395":1}}],["accessing",{"3":{"1627":1}}],["accessiblelabel",{"3":{"1324":1}}],["accessible",{"3":{"617":1,"618":1,"619":1,"682":1,"954":1,"1026":1,"1324":7,"1415":1,"1432":1,"1436":9,"1438":1,"1455":1,"1488":1,"1491":1,"1607":1,"1620":1,"1622":1,"1630":1,"1631":2,"1632":3,"1640":1,"1641":1,"1643":1,"1644":1,"1741":2,"1750":2,"1756":1,"1758":1,"1773":2,"2057":1,"2228":1}}],["accessibilityinfomaxlength",{"3":{"1350":3,"1359":2,"1395":1}}],["accessibilityinfo",{"2":{"1631":1},"3":{"1350":4,"1359":11,"1369":3,"1380":2,"1395":5,"1496":1,"1630":2,"1631":2}}],["accessibilitytests",{"0":{"1608":1,"1742":1},"2":{"620":1,"621":1,"1596":1},"3":{"618":2,"620":1,"621":1,"1199":1,"1207":2,"1414":1,"1436":2,"1438":2,"1487":2,"1490":4,"1526":2,"1531":1,"1532":1,"1535":1,"1591":2,"1596":2,"1600":1,"1605":1,"1739":1}}],["accessibility",{"0":{"1433":1,"1558":1,"2057":1},"1":{"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1,"1605":1,"1606":1,"1607":1,"1608":1,"1609":1,"1610":1,"1642":1,"1643":1,"1644":1,"1645":1,"1739":1,"1740":1,"1741":1,"1742":1,"1743":1,"1744":1},"2":{"1417":1},"3":{"0":1,"276":1,"416":1,"615":1,"617":4,"618":1,"619":1,"620":2,"622":2,"860":1,"861":1,"862":1,"863":2,"955":1,"1170":1,"1202":1,"1203":5,"1207":8,"1213":1,"1214":1,"1216":1,"1324":14,"1350":4,"1359":14,"1369":3,"1380":5,"1395":7,"1396":6,"1402":1,"1414":1,"1415":3,"1417":35,"1428":2,"1433":3,"1436":26,"1438":3,"1453":1,"1461":1,"1488":4,"1490":1,"1491":1,"1492":1,"1493":1,"1496":1,"1499":1,"1524":1,"1526":3,"1530":1,"1531":2,"1532":1,"1533":2,"1535":1,"1558":1,"1561":1,"1565":1,"1574":1,"1577":4,"1585":1,"1586":1,"1588":1,"1589":3,"1591":3,"1595":2,"1596":2,"1597":1,"1598":2,"1602":1,"1605":1,"1629":1,"1630":2,"1631":2,"1637":2,"1642":2,"1669":3,"1671":2,"1673":1,"1674":1,"1739":1,"1796":1,"2075":1,"2107":1,"2213":1,"2221":1,"2232":1}}],["accessibilityviolationexception",{"2":{"618":1,"1428":1,"1433":1,"2057":1},"3":{"0":1,"618":2,"1199":2,"1207":2,"1428":1,"1433":2,"1436":6,"1488":3,"2057":1}}],["accessed",{"3":{"1436":1}}],["accesses",{"3":{"1324":1}}],["accesscoarselocation",{"3":{"1417":2}}],["accessservice",{"3":{"1359":5}}],["accessdenied",{"3":{"1300":1}}],["accessdeniedmessage",{"3":{"1271":3}}],["accesstokenkey",{"3":{"1417":1}}],["accesstokenname",{"3":{"1312":1}}],["accesstokenlifetime",{"3":{"1300":5}}],["accesstokencookiename",{"3":{"1300":1}}],["accesstokenexpiry",{"2":{"1968":1},"3":{"1300":4,"1968":1}}],["accesstokenexpirationminutes",{"2":{"499":1,"1982":1},"3":{"499":1,"1300":3,"1982":1}}],["accesstoken",{"3":{"1184":1,"1300":9,"1311":1,"1324":18,"1417":1,"1436":7,"1641":2,"1968":1}}],["accesstokenprovider",{"2":{"1183":1},"3":{"1183":1,"1324":1,"1436":3}}],["accessorcache",{"3":{"1247":2}}],["accessors",{"3":{"135":2,"547":2,"657":1,"660":1,"674":1,"741":1,"1247":2,"1259":2,"1270":1,"1278":1,"1286":1,"1300":1,"1311":1,"1324":3,"1350":4,"1359":2,"1395":4,"1417":2,"1431":1,"1436":8}}],["accessor",{"3":{"26":1,"298":1,"303":2,"304":1,"549":1,"699":1,"1163":1,"1227":1,"1228":1,"1229":3,"1231":1,"1234":1,"1237":1,"1242":1,"1247":3,"1253":1,"1271":1,"1277":1,"1286":11,"1300":2,"1311":8,"1324":2,"1339":3,"1348":1,"1350":4,"1359":24,"1395":5,"1396":1,"1417":4,"1436":3,"1526":1,"1535":1,"1586":1,"1591":1,"1611":1,"1810":1,"2138":2}}],["access",{"0":{"2074":1},"1":{"496":1,"497":1,"498":1,"499":1,"500":1,"501":1,"502":1,"503":1,"542":1,"543":1,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"550":1,"551":1,"552":1,"878":1,"879":1,"880":1,"881":1,"882":1,"883":1,"884":1,"885":1},"2":{"207":1,"227":1,"229":1,"426":3,"511":1,"1761":1},"3":{"0":9,"31":2,"39":1,"41":1,"165":1,"166":1,"167":1,"171":1,"185":1,"186":1,"206":2,"207":6,"227":1,"229":1,"320":1,"350":2,"359":1,"403":2,"426":3,"458":2,"459":1,"461":1,"496":1,"498":3,"499":6,"500":3,"501":1,"503":2,"505":1,"506":3,"507":9,"508":1,"511":1,"512":2,"514":1,"527":1,"542":1,"545":2,"549":1,"605":1,"632":1,"718":1,"724":2,"727":1,"776":1,"798":1,"878":1,"880":1,"881":2,"884":1,"903":1,"904":1,"905":4,"906":1,"910":2,"973":1,"1059":1,"1117":1,"1133":1,"1168":3,"1170":1,"1183":2,"1184":3,"1187":1,"1196":1,"1212":3,"1228":1,"1229":1,"1239":1,"1241":1,"1247":8,"1271":4,"1272":1,"1276":1,"1279":1,"1286":14,"1288":2,"1289":2,"1290":2,"1297":2,"1298":5,"1300":86,"1301":1,"1304":1,"1306":1,"1309":6,"1311":18,"1312":5,"1322":2,"1323":12,"1324":68,"1339":1,"1347":1,"1348":1,"1350":3,"1359":7,"1362":2,"1369":5,"1380":4,"1381":1,"1395":10,"1396":19,"1406":1,"1408":1,"1409":1,"1410":1,"1415":19,"1417":14,"1427":1,"1436":15,"1438":4,"1445":1,"1454":1,"1455":1,"1457":1,"1459":1,"1460":1,"1467":6,"1477":1,"1487":1,"1496":1,"1524":3,"1526":4,"1534":1,"1535":2,"1544":1,"1548":1,"1555":1,"1562":1,"1567":3,"1577":2,"1582":2,"1590":1,"1591":2,"1599":1,"1611":2,"1621":2,"1623":1,"1624":1,"1627":1,"1630":2,"1631":1,"1632":2,"1635":1,"1637":3,"1638":1,"1639":2,"1640":1,"1641":14,"1648":1,"1653":1,"1667":2,"1747":3,"1753":1,"1757":2,"1761":1,"1764":1,"1765":2,"1767":2,"1769":1,"1771":2,"1772":1,"1815":3,"1849":1,"1923":1,"1965":1,"1966":3,"1968":11,"1972":2,"1973":2,"1975":3,"1980":3,"1981":1,"1982":5,"1984":1,"1985":4,"1989":1,"1996":1,"2063":2,"2066":3,"2068":1,"2069":1,"2074":1,"2126":1,"2128":1,"2141":1,"2200":1,"2203":1,"2228":1,"2232":2,"2240":1}}],["acceptverbs",{"3":{"1436":2}}],["accepturl",{"3":{"1359":1}}],["acceptqueuesessions",{"3":{"1350":1}}],["acceptqueuesessioncount",{"3":{"1350":1}}],["acceptqueuecount",{"3":{"1350":1}}],["acceptqueue",{"3":{"1350":1,"1359":17,"1395":1}}],["acceptlanguage",{"3":{"1324":1}}],["accepttimesteponceasync",{"3":{"1300":2}}],["acceptattribute",{"3":{"1350":1,"1359":2}}],["acceptable",{"3":{"149":1,"435":1,"507":1,"530":1,"791":1,"990":1,"1116":1,"1229":1,"1237":1,"1286":1,"1300":3,"1301":1,"1309":1,"1324":4,"1359":3,"1396":2,"1436":2,"1455":1,"1467":1,"1630":1,"1638":3,"1639":1,"1898":1,"1947":1,"1971":1,"2166":1}}],["acceptances",{"3":{"1359":1}}],["acceptance",{"1":{"787":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"794":1,"795":1},"3":{"0":2,"68":1,"87":1,"305":1,"390":1,"454":1,"562":1,"621":1,"787":1,"790":3,"791":1,"792":2,"794":1,"857":3,"946":1,"976":1,"1020":1,"1212":1,"1300":2,"1359":6,"1369":1,"1376":1,"1380":1,"1402":1,"1477":1,"1526":1,"1566":2,"1585":1,"1599":1,"1630":2,"1631":1,"1709":1,"2127":1,"2166":2,"2168":1,"2169":2,"2190":1}}],["accepting",{"3":{"0":1,"291":1,"690":1,"767":1,"1247":2,"1267":1,"1270":3,"1300":2,"1301":1,"1311":3,"1324":4,"1350":2,"1359":4,"1395":2,"1396":3,"1400":1,"1413":1,"1427":1,"1436":2,"1455":1,"1953":1,"1957":1,"2033":1,"2038":1,"2125":1}}],["acceptsdirectandinheritedandoptedoutdeclarations",{"3":{"1436":2}}],["accepts",{"3":{"0":3,"68":1,"72":1,"81":1,"93":1,"136":1,"170":1,"198":1,"237":1,"303":1,"312":1,"335":1,"341":1,"350":1,"374":1,"402":1,"427":1,"443":1,"469":1,"535":1,"536":1,"540":1,"541":1,"620":1,"674":1,"690":1,"740":1,"741":1,"761":1,"764":1,"766":2,"769":1,"773":1,"785":1,"863":1,"975":1,"1017":1,"1033":1,"1044":1,"1100":1,"1116":1,"1133":1,"1135":1,"1176":1,"1184":2,"1229":1,"1237":1,"1242":1,"1247":3,"1264":1,"1270":2,"1271":2,"1286":14,"1297":1,"1300":7,"1309":5,"1310":1,"1311":7,"1312":1,"1323":3,"1324":10,"1327":1,"1339":3,"1350":3,"1359":10,"1369":1,"1384":2,"1395":16,"1396":6,"1402":3,"1414":1,"1415":5,"1416":1,"1417":3,"1427":1,"1430":1,"1436":32,"1438":2,"1441":1,"1455":1,"1467":2,"1492":1,"1526":2,"1531":1,"1577":1,"1591":2,"1596":2,"1600":1,"1631":1,"1640":1,"1653":1,"1685":1,"1765":1,"1843":1,"1912":1,"1950":1,"1958":1,"1962":1,"1982":1,"2033":1,"2036":1,"2037":1,"2044":1,"2126":2,"2162":1,"2192":1}}],["accept",{"2":{"742":1,"745":1,"1633":1},"3":{"0":3,"98":1,"103":1,"135":1,"265":4,"293":1,"309":1,"370":2,"371":3,"372":1,"375":1,"404":1,"440":1,"517":1,"520":1,"618":1,"733":1,"740":4,"742":2,"743":1,"745":1,"773":1,"775":1,"790":1,"826":1,"881":1,"1018":1,"1059":1,"1160":1,"1212":2,"1231":1,"1247":1,"1270":2,"1271":1,"1286":7,"1298":1,"1300":10,"1306":1,"1309":1,"1311":6,"1323":3,"1324":7,"1339":1,"1343":1,"1344":1,"1347":2,"1348":1,"1350":12,"1351":1,"1358":1,"1359":11,"1366":1,"1369":2,"1380":2,"1396":3,"1402":1,"1415":1,"1417":3,"1436":16,"1438":1,"1444":1,"1453":1,"1454":1,"1455":2,"1459":1,"1472":1,"1474":1,"1492":1,"1534":1,"1577":1,"1589":1,"1591":1,"1600":1,"1630":2,"1631":4,"1632":1,"1633":1,"1635":2,"1640":1,"1666":1,"1765":1,"1912":1,"1924":1,"1937":1,"1954":1,"1965":2,"1968":1,"2083":1,"2086":2,"2126":1,"2128":1,"2167":1,"2169":1,"2232":1}}],["acceptedsessions",{"3":{"1350":1}}],["acceptedsessioncount",{"3":{"1350":1}}],["acceptedcount",{"3":{"1350":1}}],["accepted",{"0":{"139":1,"1534":1,"1585":1,"1599":1},"2":{"1099":1,"1103":1,"1367":1,"1633":1,"2190":1},"3":{"0":10,"1":1,"3":1,"9":1,"15":1,"17":1,"27":1,"29":1,"37":1,"45":1,"51":1,"57":1,"66":1,"76":1,"80":1,"84":1,"88":1,"90":1,"107":1,"115":1,"130":2,"135":5,"136":1,"139":3,"145":1,"155":1,"164":1,"173":1,"177":1,"178":1,"184":1,"193":1,"205":1,"212":1,"223":1,"230":1,"233":1,"241":1,"245":2,"248":1,"249":1,"263":1,"267":2,"271":1,"279":2,"283":1,"286":1,"289":1,"295":1,"298":1,"308":1,"316":1,"328":1,"339":1,"344":1,"348":1,"357":1,"368":1,"370":2,"371":2,"372":1,"373":1,"378":1,"386":2,"390":1,"395":1,"411":1,"415":3,"418":1,"422":1,"432":1,"438":1,"441":1,"446":1,"457":1,"461":1,"468":1,"480":1,"497":1,"505":1,"516":1,"520":1,"526":1,"530":1,"534":1,"543":2,"544":1,"545":1,"547":2,"554":1,"555":1,"562":1,"566":1,"570":1,"581":1,"585":1,"589":1,"597":1,"607":1,"616":1,"620":1,"624":1,"631":1,"638":1,"647":1,"651":1,"655":1,"663":1,"672":1,"674":1,"680":1,"688":1,"690":1,"696":1,"705":1,"713":1,"723":1,"731":1,"733":1,"739":1,"747":1,"748":1,"751":3,"755":1,"756":1,"758":1,"764":1,"766":2,"772":1,"775":1,"776":1,"780":1,"788":1,"790":2,"797":2,"808":2,"815":1,"817":1,"825":1,"827":2,"836":1,"844":1,"848":1,"852":1,"856":1,"859":1,"867":1,"879":1,"887":1,"895":1,"903":1,"907":1,"912":1,"920":1,"929":1,"933":1,"937":1,"944":1,"952":1,"962":1,"970":1,"978":1,"986":1,"994":1,"996":1,"1002":1,"1010":1,"1012":1,"1016":1,"1024":1,"1028":1,"1032":1,"1036":1,"1040":1,"1048":1,"1052":1,"1057":1,"1065":1,"1073":1,"1081":1,"1089":1,"1098":1,"1099":1,"1102":1,"1103":2,"1106":1,"1108":1,"1114":1,"1116":1,"1118":2,"1122":1,"1126":1,"1131":1,"1139":2,"1149":1,"1159":1,"1166":1,"1173":1,"1182":1,"1212":4,"1247":2,"1270":1,"1285":2,"1286":3,"1293":1,"1300":19,"1301":6,"1309":2,"1311":5,"1322":1,"1323":9,"1324":10,"1328":1,"1339":7,"1344":2,"1347":1,"1350":12,"1351":1,"1352":1,"1353":2,"1357":1,"1359":74,"1367":1,"1369":2,"1375":1,"1376":1,"1380":7,"1390":1,"1395":10,"1396":9,"1399":1,"1402":4,"1415":13,"1417":4,"1430":2,"1436":15,"1438":2,"1453":1,"1455":1,"1459":1,"1474":2,"1476":1,"1477":1,"1483":1,"1496":1,"1515":1,"1521":1,"1524":2,"1526":6,"1530":1,"1531":4,"1532":3,"1534":8,"1554":1,"1572":1,"1575":3,"1576":1,"1577":3,"1581":3,"1582":1,"1583":2,"1584":2,"1585":6,"1586":1,"1589":3,"1591":10,"1595":3,"1596":6,"1597":4,"1598":1,"1599":3,"1600":1,"1630":3,"1631":10,"1632":5,"1633":2,"1635":2,"1638":3,"1640":4,"1641":3,"1741":2,"1764":1,"1765":1,"1767":2,"1768":1,"1815":2,"2001":2,"2032":1,"2038":1,"2122":2,"2126":1,"2127":1,"2158":1,"2166":2,"2190":1,"2191":1,"2198":1,"2232":48}}],["aca",{"0":{"1334":1},"3":{"0":3,"91":3,"92":2,"93":2,"95":1,"96":2,"98":2,"99":1,"100":2,"102":3,"293":1,"757":2,"827":1,"829":1,"913":2,"914":2,"1312":1,"1325":1,"1329":1,"1331":1,"1334":1,"1339":8,"1379":1,"1441":2,"1443":5,"1446":2,"1450":2,"1467":16,"1476":1,"1534":1,"1577":1,"1707":1}}],["alquimia",{"3":{"2220":1}}],["aloud",{"3":{"1395":1,"1417":7}}],["along",{"0":{"2234":1},"3":{"58":1,"81":1,"165":1,"186":1,"573":1,"616":1,"657":1,"697":1,"700":1,"711":1,"744":2,"778":1,"798":1,"826":1,"981":1,"991":1,"1175":1,"1178":1,"1217":1,"1251":1,"1259":3,"1271":2,"1280":1,"1286":5,"1293":1,"1297":1,"1300":2,"1301":2,"1304":1,"1312":2,"1323":1,"1324":2,"1343":1,"1350":7,"1359":7,"1395":4,"1396":8,"1402":4,"1404":1,"1409":1,"1415":2,"1436":4,"1441":1,"1443":1,"1455":1,"1465":1,"1467":2,"1486":1,"1492":1,"1805":1,"1843":1,"1891":1,"1938":1,"1977":1,"1983":1,"1999":1,"2019":2,"2071":1,"2096":1,"2166":1,"2183":1}}],["alongside",{"3":{"0":4,"31":1,"71":1,"78":1,"91":1,"95":1,"173":1,"195":1,"219":1,"225":1,"272":1,"312":1,"319":1,"341":1,"350":1,"363":1,"406":1,"418":1,"449":1,"470":1,"499":1,"534":1,"545":1,"549":1,"563":1,"572":1,"599":1,"609":2,"611":1,"617":1,"642":1,"643":1,"647":1,"657":1,"665":1,"696":1,"728":1,"785":1,"790":2,"804":1,"832":1,"892":1,"905":1,"926":1,"932":1,"960":1,"982":1,"1027":1,"1042":1,"1059":1,"1069":1,"1075":1,"1104":1,"1116":1,"1232":1,"1237":2,"1247":2,"1259":4,"1262":1,"1270":2,"1271":2,"1286":19,"1288":1,"1290":1,"1300":20,"1301":6,"1309":3,"1311":13,"1312":2,"1316":1,"1323":10,"1324":17,"1332":1,"1333":1,"1336":1,"1339":9,"1342":1,"1347":1,"1350":10,"1353":1,"1359":25,"1366":1,"1369":6,"1374":3,"1380":5,"1395":23,"1396":10,"1398":1,"1400":1,"1402":2,"1403":1,"1409":1,"1415":9,"1416":1,"1417":10,"1427":3,"1428":1,"1432":1,"1434":1,"1436":18,"1438":5,"1441":1,"1442":2,"1443":2,"1445":1,"1455":1,"1467":8,"1475":1,"1487":1,"1488":2,"1489":1,"1496":3,"1526":1,"1531":1,"1537":1,"1546":1,"1570":1,"1577":2,"1585":1,"1627":1,"1630":3,"1631":5,"1639":1,"1640":1,"1655":1,"1663":1,"1686":1,"1699":1,"1715":1,"1737":1,"1755":1,"1761":1,"1764":1,"1769":1,"1770":1,"1771":1,"1815":1,"1927":1,"1929":1,"1933":1,"1944":1,"1946":1,"1956":1,"1981":1,"1982":1,"2000":1,"2006":1,"2024":1,"2100":1,"2126":1,"2133":1,"2150":1,"2166":1,"2232":1}}],["alone",{"3":{"0":12,"23":1,"24":2,"38":1,"54":1,"57":1,"63":1,"69":1,"73":1,"74":1,"81":1,"95":1,"135":2,"180":1,"186":2,"203":1,"207":1,"255":1,"265":1,"268":1,"285":1,"312":1,"314":1,"318":1,"324":1,"325":1,"341":1,"386":1,"390":1,"391":1,"399":1,"409":1,"426":1,"434":1,"449":1,"452":1,"465":1,"497":1,"523":1,"536":2,"539":2,"547":1,"549":3,"589":1,"593":1,"601":1,"607":1,"616":1,"624":1,"635":1,"638":1,"655":1,"674":1,"675":1,"707":1,"733":1,"758":1,"766":1,"767":1,"789":1,"794":1,"799":1,"806":1,"826":1,"827":1,"828":1,"830":1,"849":1,"854":1,"883":1,"889":1,"891":1,"897":1,"905":2,"906":2,"907":1,"926":1,"938":1,"939":1,"972":1,"988":1,"994":1,"1018":1,"1026":2,"1059":2,"1061":1,"1065":1,"1067":1,"1074":1,"1083":1,"1091":3,"1094":1,"1116":1,"1124":1,"1127":1,"1128":1,"1134":1,"1212":1,"1225":1,"1229":4,"1237":6,"1242":1,"1247":1,"1259":3,"1263":1,"1270":5,"1271":1,"1281":2,"1286":28,"1290":3,"1300":10,"1301":6,"1309":5,"1310":1,"1311":11,"1312":1,"1320":1,"1322":1,"1323":13,"1324":18,"1332":1,"1339":12,"1349":1,"1350":9,"1359":28,"1362":1,"1369":2,"1377":1,"1379":1,"1380":2,"1395":4,"1396":15,"1402":6,"1406":1,"1415":6,"1416":1,"1417":7,"1424":1,"1427":4,"1433":1,"1436":33,"1438":5,"1447":2,"1455":1,"1458":1,"1467":4,"1470":1,"1474":1,"1477":1,"1481":1,"1492":2,"1496":3,"1507":1,"1526":1,"1548":1,"1558":1,"1577":3,"1591":2,"1638":1,"1641":1,"1651":1,"1670":1,"1685":1,"1688":1,"1727":1,"1730":1,"1742":1,"1749":1,"1765":1,"1773":1,"1786":1,"1794":1,"1805":1,"1815":1,"1832":1,"1849":1,"1871":2,"1876":1,"1933":3,"1936":1,"1969":1,"1982":2,"1985":3,"1989":1,"2001":1,"2008":1,"2038":1,"2044":1,"2058":1,"2064":1,"2141":1,"2160":1}}],["alarm",{"3":{"1417":1,"1467":1,"1476":2,"1525":1,"1526":1}}],["alarms",{"3":{"1417":1}}],["alarming",{"3":{"1324":1,"1436":1,"1968":1}}],["alan",{"3":{"1364":1,"1369":2}}],["alb",{"3":{"175":1}}],["alpine",{"3":{"1438":1}}],["alpha",{"3":{"1324":1,"1417":2,"1480":1}}],["alphanumeric",{"3":{"1271":1,"1300":1,"1324":2,"1436":2}}],["alphabetical",{"3":{"1436":1,"1639":1,"1640":1}}],["alphabetically",{"3":{"166":1,"1034":1,"1279":1,"1286":5,"1395":2,"1436":1,"1654":1}}],["alphabet",{"3":{"1059":1,"1286":2,"1293":1,"1300":1,"1436":1,"1631":1}}],["alpn",{"1":{"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1},"3":{"0":1,"31":1,"53":1,"89":1,"91":2,"97":2,"98":8,"99":1,"100":1,"1067":1,"1326":1,"1337":1,"1339":5,"1379":1,"1430":1,"1441":1,"1444":1,"1447":1,"1467":1,"1656":1,"2009":1,"2025":3}}],["almost",{"0":{"1371":1,"2071":1},"3":{"58":1,"265":1,"331":1,"386":1,"396":1,"740":1,"805":1,"881":1,"965":1,"1006":2,"1132":1,"1217":1,"1259":1,"1261":1,"1287":1,"1310":1,"1311":1,"1323":2,"1324":3,"1339":1,"1340":1,"1370":1,"1371":1,"1379":1,"1380":3,"1396":2,"1403":1,"1415":2,"1423":1,"1436":3,"1447":1,"1453":1,"1455":1,"1465":1,"1467":1,"1491":1,"1527":1,"1537":1,"1578":1,"1592":1,"1682":1,"1686":1,"1788":1,"1797":1,"1800":1,"1802":1,"1810":1,"1820":1,"1854":2,"1900":2,"1909":1,"1913":1,"1951":2,"1987":2,"2000":1,"2029":1,"2039":1,"2050":1,"2061":1,"2070":1,"2129":1,"2134":1,"2154":2}}],["algebra",{"3":{"1359":2}}],["alg=rs256",{"3":{"1300":1}}],["alg",{"2":{"31":1,"1897":1,"1899":1},"3":{"0":1,"31":1,"1184":1,"1300":4,"1576":2,"1577":1,"1897":4,"1899":1}}],["algorithms",{"3":{"178":1,"1895":1,"1899":1}}],["algorithm",{"0":{"1881":1,"1897":1},"3":{"0":4,"31":2,"32":1,"173":1,"178":1,"279":1,"280":1,"309":1,"310":1,"311":2,"312":1,"360":1,"499":2,"503":1,"674":1,"945":1,"946":2,"947":2,"963":2,"1212":1,"1237":1,"1247":1,"1287":1,"1288":2,"1291":1,"1292":3,"1300":22,"1301":3,"1311":18,"1315":1,"1323":3,"1350":2,"1359":4,"1395":4,"1436":3,"1438":1,"1467":1,"1488":2,"1496":2,"1526":1,"1577":2,"1596":1,"1653":1,"1667":3,"1772":1,"1878":1,"1881":1,"1886":1,"1897":4,"1899":3,"1902":6,"1903":1,"1904":1,"1905":1,"1982":3,"1985":2,"2012":1,"2094":1,"2143":1}}],["altitudes",{"3":{"1832":1,"1833":1,"1834":1}}],["altitude",{"0":{"1832":1},"3":{"1832":1,"1833":1,"2098":1}}],["alt",{"2":{"1606":1,"1740":1},"3":{"1324":1,"1395":1,"1415":1,"1438":1,"1491":1,"1558":1,"1606":1,"1740":1}}],["alt=",{"3":{"1324":1,"1395":1}}],["altogether",{"3":{"740":1,"1247":1,"1311":1,"1359":2,"1373":1,"1478":1}}],["alters",{"3":{"1427":1,"1734":1}}],["altered",{"3":{"1286":1,"1324":1,"1391":1,"1436":1}}],["alter",{"3":{"620":1,"1286":1,"1427":1,"1477":1,"1639":1}}],["altercolumn",{"2":{"566":1},"3":{"566":1}}],["alternation",{"3":{"626":1,"1309":1}}],["alternating",{"3":{"625":1,"626":2,"1456":3,"1461":1,"1492":1,"1493":1,"1534":1,"1599":1}}],["alternatives",{"0":{"151":1,"286":1,"405":1,"785":1,"1144":1,"1154":1,"1178":1,"1187":1},"3":{"1":2,"255":1,"256":1,"989":1,"1035":1,"1043":1,"1051":1,"1117":1,"1133":1,"1324":1,"1436":2,"1559":1,"1729":1,"2067":1}}],["alternative",{"3":{"0":4,"1":1,"99":1,"137":1,"255":1,"283":1,"343":1,"401":1,"461":1,"468":1,"469":1,"470":1,"474":1,"541":1,"551":1,"557":1,"627":1,"635":1,"676":1,"683":1,"699":1,"733":1,"792":1,"797":1,"799":3,"803":1,"804":1,"805":1,"809":1,"815":2,"828":1,"829":1,"855":1,"856":1,"871":1,"889":1,"901":1,"907":1,"924":1,"930":1,"947":1,"965":1,"981":2,"989":1,"1000":1,"1051":1,"1090":1,"1139":1,"1140":1,"1149":1,"1212":1,"1229":2,"1237":2,"1247":3,"1259":1,"1270":2,"1271":1,"1286":9,"1300":6,"1301":1,"1309":1,"1311":2,"1323":7,"1324":5,"1339":5,"1359":10,"1369":2,"1380":1,"1395":5,"1396":8,"1417":4,"1436":7,"1441":1,"1455":1,"1477":1,"1524":1,"1526":1,"1531":1,"1534":1,"1545":1,"1559":1,"1577":1,"1638":1,"1752":1,"1754":1,"1763":1,"1774":2,"1810":1,"1812":1,"1815":1,"1911":1,"1951":1,"2024":1,"2075":1,"2150":1,"2166":1,"2169":1}}],["alternates",{"3":{"109":1,"1526":1}}],["alternate",{"3":{"109":1,"1220":1,"1229":1,"1286":1,"1436":2,"1438":1,"1492":1,"1632":13,"1641":5}}],["although",{"3":{"540":1,"1259":1,"1324":1,"1350":1,"1359":1,"1396":2,"1524":1,"1536":1,"1577":2,"1596":2}}],["alttext",{"3":{"0":1,"682":1,"1395":1,"1396":1}}],["alertkeyregex",{"3":{"1436":1}}],["alertable",{"3":{"1311":1,"1359":1}}],["alertemailaddress",{"2":{"1466":1,"1472":1,"1474":1,"2158":1},"3":{"609":1,"1455":1,"1466":1,"1467":2,"1472":1,"1474":1,"1600":1,"2158":1}}],["alerted",{"3":{"403":2,"612":1,"1017":1,"1018":1,"1212":1}}],["alerting",{"1":{"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"613":1,"614":1},"3":{"0":2,"125":1,"606":1,"765":1,"770":1,"1212":1,"1259":1,"1324":1,"1436":1,"1467":4,"1474":1,"1476":1,"1482":1,"1550":1,"1575":1,"1577":2,"1583":1,"1586":1,"1706":1,"2046":1,"2158":1,"2220":1,"2232":1}}],["alertseverityregex",{"3":{"1436":1}}],["alerts",{"3":{"0":6,"395":1,"403":1,"409":1,"607":3,"608":2,"609":10,"610":1,"611":5,"614":1,"759":1,"770":1,"791":1,"899":1,"914":1,"971":1,"1259":1,"1323":1,"1396":2,"1431":1,"1436":11,"1455":3,"1456":1,"1457":1,"1458":1,"1462":1,"1467":8,"1469":2,"1472":1,"1474":3,"1476":8,"1482":1,"1483":1,"1525":1,"1526":3,"1550":1,"1553":1,"1568":1,"1577":1,"1582":2,"1583":1,"1591":3,"1670":2,"1676":1,"1678":1,"1679":1,"1706":1,"1709":1,"2046":1,"2158":5,"2160":2,"2232":1}}],["alert",{"0":{"1476":1,"2046":1},"1":{"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"613":1,"614":1},"2":{"607":1,"1474":1},"3":{"0":10,"24":1,"109":1,"125":1,"224":1,"255":1,"395":1,"400":1,"403":1,"407":1,"409":1,"606":1,"607":7,"608":6,"609":26,"610":5,"611":5,"612":3,"613":2,"649":1,"759":1,"765":1,"821":1,"823":1,"896":1,"901":1,"914":4,"916":1,"918":1,"971":1,"976":1,"1016":3,"1018":3,"1019":4,"1020":2,"1090":1,"1093":1,"1096":1,"1102":1,"1199":2,"1207":1,"1212":1,"1256":1,"1259":1,"1270":1,"1286":1,"1311":3,"1323":5,"1324":6,"1359":1,"1389":1,"1395":3,"1396":4,"1402":3,"1431":2,"1433":1,"1436":54,"1442":2,"1443":3,"1447":1,"1455":1,"1462":1,"1463":1,"1465":2,"1466":3,"1467":32,"1469":2,"1470":1,"1471":1,"1472":3,"1474":11,"1476":23,"1482":3,"1483":3,"1484":1,"1488":4,"1489":2,"1493":1,"1496":2,"1523":1,"1524":7,"1526":10,"1530":1,"1531":4,"1532":1,"1533":1,"1535":2,"1547":1,"1577":4,"1589":3,"1591":7,"1595":1,"1596":5,"1597":1,"1598":1,"1600":2,"1607":1,"1627":1,"1641":1,"1643":1,"1645":1,"1670":1,"1671":1,"1678":1,"1709":3,"1741":1,"1843":1,"1909":1,"1911":1,"1919":1,"1946":1,"2043":1,"2046":8,"2049":1,"2079":1,"2156":3,"2158":11,"2232":2}}],["align",{"3":{"1526":1,"1544":1,"2035":1}}],["aligns",{"3":{"1286":1}}],["alignment",{"3":{"147":1,"1300":1,"1323":1,"1359":1,"1496":3,"1526":1,"1639":1}}],["aligned",{"3":{"32":1,"86":1,"642":1,"650":1,"1286":1,"1298":1,"1300":2,"1306":1,"1311":2,"1324":1,"1350":1,"1359":2,"1396":2,"1416":1,"1417":1,"1534":1,"1535":1,"1564":1,"1712":1}}],["aliased",{"3":{"186":1,"1052":1,"1054":1,"1286":1,"1311":1,"1323":1,"1359":2,"1396":1,"1398":1,"1415":4,"1416":3,"1436":1}}],["aliases",{"0":{"1939":1},"1":{"467":1,"468":1,"469":1,"470":1,"471":1,"472":1,"473":1,"474":1,"475":1,"476":1,"477":1,"478":1,"796":1,"797":1,"798":1,"799":1,"800":1,"801":1,"802":1,"803":1,"804":1,"805":1,"806":1,"1047":1,"1048":1,"1049":1,"1050":1,"1051":1,"1052":1,"1053":1,"1054":1,"1055":1},"3":{"0":11,"467":1,"468":8,"470":3,"471":1,"472":3,"473":1,"474":1,"475":3,"476":3,"477":3,"478":3,"548":1,"633":1,"656":1,"660":1,"661":2,"796":1,"797":2,"798":3,"799":4,"805":1,"1047":1,"1049":4,"1050":3,"1051":2,"1054":2,"1055":1,"1192":1,"1196":1,"1202":1,"1203":1,"1212":7,"1231":2,"1281":1,"1286":3,"1300":2,"1309":7,"1311":2,"1344":1,"1350":42,"1359":38,"1369":1,"1380":10,"1394":1,"1395":31,"1396":32,"1402":23,"1409":2,"1415":4,"1416":1,"1431":1,"1436":4,"1455":1,"1489":1,"1496":1,"1541":1,"1577":1,"1591":1,"1650":1,"1651":1,"1662":2,"1685":1,"1686":1,"1689":1,"1727":1,"1810":4,"1812":1,"1939":2,"1941":1,"2089":1,"2230":1,"2232":4}}],["aliasing",{"3":{"0":1,"844":1,"848":1,"1415":1,"1891":1}}],["alias",{"3":{"0":2,"295":1,"342":1,"468":7,"469":2,"470":7,"471":1,"472":5,"474":1,"475":3,"476":3,"477":3,"478":3,"547":1,"633":2,"656":1,"675":1,"676":1,"698":1,"701":1,"797":4,"798":2,"799":3,"800":1,"801":1,"802":1,"803":6,"804":4,"805":4,"905":1,"910":1,"1048":2,"1049":1,"1051":1,"1053":1,"1054":2,"1175":1,"1177":1,"1196":1,"1212":3,"1231":2,"1237":11,"1247":3,"1259":2,"1271":1,"1286":13,"1296":1,"1300":27,"1301":1,"1309":12,"1311":4,"1323":9,"1324":5,"1338":1,"1339":1,"1344":1,"1350":36,"1359":64,"1369":2,"1380":10,"1382":1,"1395":28,"1396":40,"1398":1,"1402":11,"1404":1,"1415":22,"1416":1,"1436":7,"1447":1,"1465":1,"1480":1,"1496":1,"1526":1,"1611":1,"1649":5,"1650":1,"1651":1,"1661":1,"1684":2,"1685":1,"1695":1,"1699":2,"1700":2,"1701":1,"1727":5,"1728":3,"1810":4,"1816":1,"1963":1,"2089":2,"2097":2,"2230":1,"2232":2}}],["alike",{"3":{"0":2,"201":1,"243":1,"460":1,"490":1,"491":1,"492":1,"640":1,"827":1,"972":1,"1050":1,"1237":1,"1247":2,"1259":1,"1271":1,"1281":1,"1286":4,"1294":1,"1300":2,"1307":1,"1324":1,"1329":1,"1339":2,"1344":1,"1350":1,"1380":1,"1395":2,"1396":1,"1402":1,"1415":1,"1436":4,"1447":1,"1456":1,"1475":1,"1577":1,"1631":1,"1637":1,"1662":1,"1666":1,"1761":1,"1922":1,"2135":1,"2156":1}}],["aliveresponse",{"3":{"1436":1}}],["alive",{"2":{"1337":1},"3":{"0":7,"94":1,"99":4,"100":1,"175":1,"233":1,"235":1,"238":1,"239":1,"399":1,"402":2,"404":1,"572":1,"698":1,"757":1,"761":1,"827":6,"829":3,"830":1,"832":1,"833":1,"848":1,"849":1,"913":1,"1066":1,"1068":1,"1144":1,"1186":1,"1276":1,"1286":2,"1300":3,"1301":3,"1311":1,"1312":2,"1324":5,"1328":5,"1329":1,"1330":1,"1332":5,"1333":2,"1337":3,"1338":1,"1339":36,"1343":1,"1359":1,"1395":1,"1396":1,"1415":1,"1416":3,"1417":3,"1430":3,"1436":4,"1438":1,"1441":6,"1443":4,"1445":1,"1446":2,"1447":4,"1450":2,"1455":1,"1467":8,"1488":2,"1490":1,"1550":1,"1591":1,"1668":1,"1669":1,"1670":2,"1677":3,"1719":1,"1720":1,"1727":1,"1891":1,"2000":1,"2007":1,"2010":1,"2014":1,"2024":3,"2038":2,"2055":1,"2056":1,"2159":1}}],["alsoanalyzesqueryspecifications",{"3":{"1436":2}}],["alsoliftwhen",{"3":{"1326":2,"1339":3,"1441":1,"1444":4}}],["also",{"0":{"576":1,"1247":1},"3":{"0":24,"5":1,"19":1,"21":2,"24":2,"30":2,"46":1,"57":1,"62":1,"71":1,"72":1,"73":1,"74":1,"98":3,"100":1,"103":1,"109":1,"110":1,"122":2,"125":1,"126":1,"127":1,"136":1,"145":1,"147":1,"150":1,"152":2,"157":2,"161":1,"164":1,"166":1,"168":1,"175":2,"182":1,"188":1,"189":1,"193":1,"197":1,"200":1,"201":1,"212":2,"214":1,"225":2,"229":1,"234":2,"235":1,"241":1,"242":1,"248":2,"250":1,"255":2,"256":1,"258":1,"265":1,"279":1,"280":1,"283":1,"284":1,"295":1,"318":1,"320":1,"326":1,"328":1,"349":1,"350":1,"352":1,"364":1,"370":1,"374":2,"375":1,"390":1,"395":1,"397":1,"399":1,"402":1,"426":1,"433":1,"436":1,"446":1,"448":2,"452":1,"453":1,"458":2,"459":1,"462":1,"468":1,"475":1,"497":1,"499":2,"502":1,"505":1,"514":1,"526":1,"528":1,"529":1,"530":2,"531":1,"536":1,"538":2,"539":1,"540":1,"545":3,"547":2,"549":1,"550":2,"551":2,"552":1,"554":1,"556":1,"564":1,"570":1,"575":1,"576":1,"583":1,"598":1,"599":1,"607":2,"609":2,"612":1,"624":2,"626":1,"628":2,"633":2,"634":1,"649":1,"651":2,"652":1,"655":1,"657":3,"664":1,"665":1,"676":1,"690":1,"691":1,"692":1,"702":1,"708":1,"715":1,"717":1,"720":1,"732":1,"733":2,"735":1,"736":1,"743":1,"744":1,"759":1,"764":1,"765":1,"766":2,"774":1,"775":1,"781":1,"782":2,"790":1,"792":1,"798":1,"799":1,"809":1,"812":1,"817":1,"818":2,"821":2,"822":1,"825":1,"826":1,"827":1,"829":1,"833":3,"840":1,"846":1,"848":1,"854":1,"857":1,"863":2,"864":1,"868":2,"871":1,"877":1,"891":1,"907":1,"909":1,"913":1,"917":2,"920":1,"922":1,"926":1,"927":1,"934":1,"938":1,"940":1,"946":1,"954":2,"960":2,"963":1,"967":1,"971":1,"988":1,"1004":3,"1011":1,"1018":2,"1020":1,"1021":1,"1029":1,"1043":1,"1045":1,"1066":1,"1068":1,"1074":1,"1078":2,"1086":1,"1089":1,"1093":2,"1095":1,"1115":1,"1118":1,"1124":3,"1128":1,"1132":1,"1133":1,"1136":1,"1140":1,"1152":1,"1160":1,"1168":1,"1169":1,"1170":1,"1174":2,"1216":1,"1220":1,"1227":1,"1229":7,"1231":2,"1233":1,"1234":2,"1235":1,"1236":2,"1237":15,"1239":1,"1240":1,"1242":1,"1247":13,"1252":1,"1255":1,"1256":2,"1258":3,"1259":15,"1263":3,"1264":1,"1265":1,"1267":1,"1270":33,"1271":6,"1272":1,"1273":3,"1274":3,"1275":1,"1276":1,"1277":2,"1278":5,"1279":2,"1285":1,"1286":62,"1287":1,"1289":2,"1294":1,"1300":51,"1301":11,"1304":1,"1305":1,"1307":2,"1309":19,"1310":4,"1311":44,"1312":8,"1313":1,"1315":2,"1316":3,"1317":2,"1318":1,"1320":1,"1322":2,"1323":53,"1324":82,"1326":1,"1328":1,"1333":2,"1336":1,"1337":2,"1339":40,"1342":4,"1343":2,"1344":1,"1345":1,"1346":1,"1347":4,"1349":2,"1350":42,"1352":1,"1355":4,"1359":110,"1362":2,"1365":1,"1366":1,"1368":1,"1369":8,"1371":1,"1373":2,"1375":1,"1376":3,"1378":1,"1379":1,"1380":16,"1387":1,"1391":1,"1395":56,"1396":65,"1397":1,"1398":1,"1399":2,"1400":1,"1401":1,"1402":24,"1405":1,"1408":1,"1411":2,"1415":33,"1416":9,"1417":26,"1418":1,"1422":1,"1424":1,"1425":1,"1427":5,"1429":1,"1431":2,"1434":3,"1435":1,"1436":85,"1438":7,"1441":3,"1442":2,"1443":6,"1444":1,"1446":2,"1447":1,"1449":2,"1453":1,"1454":1,"1455":5,"1456":1,"1457":3,"1458":1,"1459":1,"1460":3,"1462":1,"1463":1,"1465":3,"1466":2,"1467":27,"1472":2,"1474":3,"1476":2,"1477":1,"1480":1,"1481":1,"1486":1,"1487":2,"1488":1,"1489":3,"1490":4,"1492":4,"1496":12,"1499":5,"1508":1,"1509":1,"1512":1,"1526":4,"1531":1,"1532":1,"1534":1,"1536":1,"1554":1,"1577":5,"1582":1,"1583":3,"1585":1,"1591":2,"1596":2,"1597":2,"1599":1,"1611":1,"1626":1,"1631":2,"1632":2,"1639":1,"1640":1,"1641":5,"1646":1,"1651":3,"1653":3,"1656":1,"1668":1,"1671":1,"1673":1,"1677":1,"1680":1,"1684":2,"1687":1,"1692":1,"1695":1,"1714":1,"1720":1,"1724":1,"1726":1,"1727":3,"1729":3,"1731":1,"1749":1,"1750":1,"1765":2,"1795":1,"1799":1,"1810":2,"1815":1,"1821":2,"1822":1,"1829":1,"1832":1,"1837":1,"1841":1,"1842":1,"1843":1,"1845":1,"1864":1,"1881":2,"1882":1,"1883":1,"1884":1,"1885":1,"1886":1,"1890":1,"1893":2,"1897":2,"1899":1,"1902":1,"1908":1,"1910":1,"1915":2,"1920":1,"1922":1,"1927":1,"1933":1,"1935":1,"1944":1,"1946":1,"1948":2,"1953":1,"1962":1,"1963":1,"1964":1,"1970":1,"1971":1,"1972":1,"1975":1,"1977":1,"1987":1,"2000":1,"2006":2,"2008":2,"2013":2,"2017":1,"2024":1,"2029":1,"2032":1,"2034":1,"2037":1,"2042":2,"2043":1,"2045":1,"2053":1,"2055":1,"2056":2,"2061":1,"2063":1,"2066":1,"2089":1,"2096":1,"2098":1,"2106":1,"2107":1,"2109":1,"2113":1,"2121":1,"2131":1,"2135":1,"2137":1,"2138":1,"2142":2,"2143":1,"2144":1,"2156":1,"2165":1,"2166":2,"2167":1,"2168":3,"2181":1,"2185":1,"2189":1,"2193":1,"2202":1,"2204":1,"2214":1,"2216":1,"2221":1,"2236":1}}],["allcarrytypeconstraints",{"3":{"1436":1}}],["allmetrics",{"3":{"1465":1,"1467":1}}],["allmmcacommonpackages",{"3":{"1436":2}}],["allmarkedread",{"3":{"1324":1}}],["allbyvalue",{"3":{"1415":1}}],["allfailed",{"3":{"1359":1}}],["allknownstatuses",{"3":{"1350":1}}],["allerrors",{"3":{"1229":1}}],["allspecification",{"3":{"1199":2,"1207":1}}],["allocator",{"3":{"1438":1}}],["allocate",{"3":{"1222":1,"1229":1,"1286":2,"1323":2,"1324":1,"1339":1,"1359":4,"2166":1}}],["allocates",{"3":{"1220":1,"1221":1,"1237":2,"1246":1,"1247":5,"1259":2,"1270":2,"1279":1,"1286":1,"1300":2,"1301":1,"1310":1,"1311":3,"1328":1,"1339":1,"1350":1,"1359":10,"1380":1,"1395":3,"1639":1}}],["allocated",{"3":{"438":1,"1221":1,"1229":3,"1237":1,"1247":3,"1270":5,"1271":1,"1286":1,"1300":1,"1301":1,"1311":2,"1323":2,"1339":5,"1359":3,"1395":4,"1396":1,"1436":2,"1438":1,"1441":1,"1639":2,"2126":1}}],["allocationceilingsbytes",{"2":{"591":1},"3":{"591":1}}],["allocation",{"3":{"0":1,"442":1,"471":1,"591":3,"592":1,"593":1,"595":1,"1212":1,"1213":1,"1220":1,"1229":5,"1237":3,"1244":1,"1247":9,"1259":3,"1263":1,"1270":4,"1286":5,"1300":13,"1301":2,"1309":1,"1311":5,"1312":1,"1323":5,"1324":2,"1328":1,"1339":6,"1350":1,"1359":19,"1380":1,"1395":3,"1396":2,"1402":2,"1415":2,"1416":1,"1417":3,"1423":1,"1427":1,"1436":4,"1438":1,"1441":1,"1467":1,"1492":1,"1577":4,"1639":1,"1668":1,"1800":1,"1805":1,"1821":1,"1923":1,"1955":2,"1958":1,"2047":1,"2196":1}}],["allocations",{"3":{"0":2,"589":1,"591":1,"592":1,"593":1,"860":1,"1237":1,"1492":1,"2047":1,"2048":1,"2049":1,"2232":1}}],["allocating",{"3":{"0":1,"1219":1,"1286":2,"1300":1,"1311":1,"1323":1,"1350":1,"1359":2}}],["allowinsecure",{"3":{"1467":3}}],["allowing",{"3":{"1286":1,"1309":1,"1323":1,"1336":1,"1339":2,"1359":1,"1369":1,"1396":1,"1415":1,"1417":1,"1455":1,"1467":1,"1776":1}}],["allowreadingfromstring",{"3":{"1359":1}}],["allowresponsebuffering",{"2":{"838":1},"3":{"838":1,"1339":1}}],["allowunscopedexport",{"3":{"1300":1,"1311":3,"1372":1,"1380":24,"1496":2}}],["allowwriteablefields",{"3":{"1247":7}}],["allowmultiple",{"3":{"1237":3,"1300":2,"1310":3,"1323":3,"1324":2}}],["allowmissingownerattribute",{"2":{"1297":1},"3":{"318":1,"1199":3,"1203":1,"1207":2,"1297":4,"1300":9,"1496":2,"1994":2}}],["allowmissingowner",{"2":{"322":1,"326":1,"1996":1,"1997":1},"3":{"318":4,"322":1,"324":1,"326":1,"1300":1,"1667":1,"1994":1,"1995":1,"1996":1,"1997":1}}],["allowazureservices",{"3":{"1467":1,"1477":1,"1524":1,"1526":2,"1534":1,"1591":1}}],["allowautoredirect",{"3":{"1324":1}}],["allowall",{"3":{"774":2}}],["allowanyorigin",{"2":{"775":1},"3":{"774":1,"775":1,"1339":1}}],["allowanymethod",{"2":{"774":1},"3":{"774":2,"1339":1}}],["allowanyheader",{"2":{"774":1},"3":{"774":2,"1339":1}}],["allowanonymousattribute",{"3":{"1436":3}}],["allowanonymous",{"2":{"387":1,"388":1,"453":1,"454":1,"1062":1,"1376":1,"1532":1,"1589":1,"1632":1,"1647":1,"1650":1,"1689":1,"1698":1,"1703":1,"1721":1,"1758":1,"1761":1,"1898":1,"1923":1,"1963":1},"3":{"0":2,"189":3,"243":1,"387":1,"388":1,"448":2,"453":1,"454":1,"790":1,"854":1,"1062":1,"1116":1,"1212":1,"1294":1,"1300":7,"1307":1,"1309":1,"1311":15,"1323":1,"1324":5,"1339":2,"1350":1,"1359":15,"1371":1,"1373":3,"1375":1,"1376":1,"1379":1,"1380":24,"1396":4,"1408":1,"1415":5,"1416":1,"1436":26,"1438":1,"1489":1,"1526":1,"1532":1,"1534":1,"1589":1,"1591":1,"1596":1,"1627":1,"1631":2,"1632":3,"1641":4,"1647":1,"1650":1,"1651":1,"1689":1,"1698":3,"1703":1,"1721":1,"1747":3,"1748":9,"1749":1,"1758":1,"1761":1,"1898":3,"1922":3,"1923":1,"1963":1,"2131":1}}],["allowances",{"3":{"1436":1}}],["allowance",{"3":{"0":2,"135":2,"136":1,"139":3,"216":1,"219":1,"1067":1,"1126":1,"1263":1,"1298":1,"1311":5,"1324":3,"1337":1,"1339":1,"1416":1,"1430":1,"1436":15,"1438":1,"1449":1,"1465":2,"1488":1,"1492":1,"1675":1,"2075":1,"2150":1,"2152":1}}],["allowcredentials",{"2":{"774":1,"775":1},"3":{"774":2,"775":1,"1311":1,"1339":2}}],["allowcachelookup",{"2":{"740":1},"3":{"740":1,"1311":1}}],["allowcachestorage",{"2":{"740":1},"3":{"740":1,"1311":1,"1380":2}}],["allowblobpublicaccess",{"3":{"665":1}}],["allowdistributed",{"2":{"178":1},"3":{"178":1,"1311":6,"2000":1}}],["allowtools",{"2":{"1419":1,"2173":1},"3":{"0":1,"1089":1,"1091":2,"1093":1,"1419":1,"1421":1,"1422":2,"1427":7,"1526":1,"1577":1,"2173":1,"2174":1,"2179":1}}],["allowsharedkeyaccess",{"3":{"1467":1}}],["allowspecificorigins",{"2":{"774":1},"3":{"774":1}}],["allowsclientkey",{"2":{"333":1},"3":{"333":1,"1241":1,"1247":3}}],["allows",{"3":{"0":1,"11":1,"110":1,"126":1,"360":1,"412":1,"530":1,"626":1,"742":1,"774":2,"775":1,"776":1,"853":1,"926":1,"1026":1,"1029":1,"1091":1,"1150":1,"1196":1,"1239":1,"1263":1,"1270":1,"1271":1,"1286":2,"1300":2,"1311":3,"1324":5,"1339":5,"1348":1,"1350":1,"1359":3,"1369":2,"1380":3,"1409":1,"1415":1,"1423":1,"1424":2,"1427":2,"1436":4,"1447":1,"1457":1,"1458":1,"1467":2,"1517":1,"1591":1,"1630":1,"1640":1,"1678":1,"1687":1,"1749":1,"1765":1,"2142":1}}],["allowlisting",{"3":{"1436":4}}],["allowlistedcollaborator",{"3":{"1436":3}}],["allowlistedcommand",{"3":{"1436":2}}],["allowlistedhandler",{"3":{"1436":2}}],["allowlistednamespace",{"3":{"1436":5}}],["allowlistedtype",{"3":{"1436":7}}],["allowlisted",{"3":{"547":1,"1311":1,"1416":1,"1417":1,"1436":14,"1816":1}}],["allowlists",{"3":{"27":2,"1161":1,"1311":4,"1436":9}}],["allowlist",{"3":{"0":4,"17":1,"27":1,"39":2,"41":1,"109":1,"265":4,"350":2,"418":2,"420":4,"421":1,"426":1,"552":1,"1061":1,"1063":1,"1161":4,"1162":2,"1164":1,"1311":8,"1324":4,"1405":1,"1415":4,"1416":3,"1417":2,"1436":103,"1438":1,"1526":1,"1534":1,"1577":1,"1591":1,"1599":1,"1600":1,"1653":1,"1976":1,"2083":2,"2085":1,"2086":1,"2202":2}}],["allow",{"1":{"771":1,"772":1,"773":1,"774":1,"775":1,"776":1,"777":1,"778":1},"3":{"0":3,"128":1,"175":1,"177":1,"189":3,"219":3,"265":1,"350":1,"355":1,"418":1,"423":1,"427":1,"428":2,"626":1,"749":1,"766":1,"771":1,"773":1,"774":4,"775":2,"776":4,"778":1,"1107":1,"1108":1,"1111":1,"1116":2,"1124":1,"1127":1,"1175":2,"1179":1,"1212":2,"1241":2,"1243":1,"1247":5,"1270":1,"1271":1,"1285":1,"1286":5,"1300":1,"1309":1,"1311":1,"1323":1,"1324":2,"1336":3,"1338":2,"1339":8,"1342":1,"1344":2,"1347":1,"1350":4,"1351":1,"1353":5,"1356":1,"1359":22,"1366":1,"1369":3,"1380":2,"1391":1,"1394":1,"1395":6,"1396":4,"1402":2,"1416":2,"1417":2,"1423":1,"1427":9,"1436":46,"1438":1,"1443":2,"1455":1,"1467":3,"1488":1,"1496":1,"1526":2,"1534":1,"1577":1,"1591":1,"1600":1,"1631":2,"1635":1,"1637":1,"1640":1,"1653":1,"1666":1,"1671":4,"1673":1,"1727":1,"1815":1,"1817":1,"1898":5,"1989":1,"2148":1,"2151":1,"2175":1,"2203":1,"2232":2}}],["allowedpurgetypes",{"3":{"1436":3}}],["allowedpublicimplementations",{"3":{"1436":2}}],["allowedhandlers",{"3":{"1436":4}}],["allowedharddeletetypes",{"2":{"1061":1},"3":{"39":1,"1061":1,"1436":4}}],["allowedthrowingtypes",{"3":{"1436":2}}],["allowedsharedcodes",{"3":{"1436":3}}],["allowedsavingtypes",{"3":{"1436":2}}],["allowedstaticmembers",{"2":{"884":1},"3":{"881":1,"884":1,"1436":4}}],["allowedunvalidatedcommands",{"3":{"1436":3}}],["allowedanonymousendpoints",{"3":{"1436":10}}],["allowedauthenticators",{"3":{"1417":1}}],["allowedfileextensions",{"3":{"1350":4,"1359":2}}],["allowedfiles",{"2":{"546":1,"1134":1,"1135":1,"1136":1},"3":{"0":3,"545":2,"546":1,"1133":1,"1134":1,"1135":2,"1136":1,"1436":12,"1489":1,"1815":2}}],["allowedcodeprefixes",{"3":{"1436":2}}],["allowedcascadeexempttypes",{"3":{"1436":2}}],["allowedchars",{"3":{"1309":2}}],["allowedclockreaders",{"2":{"1161":1},"3":{"1161":2,"1431":1,"1436":1}}],["allowedcyclenamespaces",{"3":{"0":1,"135":2,"1436":6}}],["allowedorigins",{"2":{"774":1},"3":{"0":2,"774":5,"775":1,"776":2,"778":1,"1311":1,"1336":1,"1339":3,"1443":1}}],["allowedreturnurlschemes",{"3":{"0":1,"350":1,"420":1,"428":1,"429":1,"1311":1,"1416":1,"1417":1,"1976":1}}],["allowed",{"0":{"1422":1,"2071":1},"3":{"0":2,"81":1,"135":1,"333":1,"384":1,"390":1,"540":1,"766":1,"773":1,"774":1,"791":1,"896":1,"897":1,"914":1,"926":1,"1067":1,"1091":1,"1168":1,"1178":1,"1184":2,"1191":1,"1200":1,"1229":1,"1237":2,"1239":1,"1246":1,"1257":1,"1259":1,"1270":2,"1285":1,"1286":11,"1297":1,"1300":6,"1311":5,"1323":3,"1324":4,"1339":5,"1350":7,"1359":10,"1380":3,"1395":3,"1396":8,"1398":2,"1399":2,"1402":7,"1415":2,"1417":3,"1418":1,"1422":1,"1427":2,"1431":1,"1436":17,"1438":1,"1467":1,"1489":1,"1498":1,"1561":1,"1640":1,"1721":1,"1749":1,"1755":1,"1765":1,"1767":3,"1813":1,"1815":2,"1817":1,"1821":1,"1851":1,"1892":1,"1899":1,"1932":1,"1934":1,"1960":1,"1992":2,"2043":2,"2071":1,"2137":1,"2147":1,"2150":1}}],["all",{"0":{"1339":1,"1395":1,"1790":1,"1938":1,"2118":1,"2178":1},"2":{"184":1,"659":1,"1373":1,"2083":1},"3":{"0":68,"12":2,"23":2,"24":2,"26":1,"31":2,"46":1,"51":1,"54":1,"58":1,"59":1,"62":2,"73":1,"76":1,"78":2,"93":3,"95":1,"99":2,"107":1,"109":6,"111":3,"115":1,"118":1,"122":3,"125":1,"126":1,"133":1,"135":2,"138":1,"140":1,"142":1,"146":1,"147":3,"148":2,"149":1,"150":2,"152":2,"156":1,"157":1,"164":1,"165":1,"166":2,"168":1,"170":4,"174":1,"175":2,"176":1,"177":1,"179":3,"180":5,"184":2,"186":9,"189":1,"195":3,"201":2,"203":1,"207":1,"214":1,"215":1,"217":1,"219":2,"224":1,"225":1,"234":1,"237":1,"241":3,"242":1,"243":1,"245":3,"251":1,"253":1,"254":3,"255":1,"256":4,"257":2,"258":1,"259":4,"260":1,"261":1,"263":1,"265":6,"267":1,"279":1,"280":1,"283":2,"284":1,"291":1,"314":1,"319":1,"328":1,"330":1,"332":1,"335":1,"341":2,"343":2,"346":1,"350":1,"359":2,"373":1,"390":1,"396":1,"397":4,"398":1,"399":1,"400":1,"401":2,"402":1,"409":1,"412":1,"413":1,"414":1,"415":1,"419":1,"420":1,"425":1,"426":1,"427":1,"440":1,"454":1,"459":1,"464":2,"465":1,"471":1,"472":1,"477":1,"486":2,"487":1,"488":4,"489":4,"490":4,"491":3,"492":4,"493":1,"494":2,"499":1,"505":1,"506":2,"507":1,"508":1,"509":1,"511":1,"512":1,"513":1,"514":1,"522":1,"523":1,"531":1,"536":1,"537":1,"538":2,"539":1,"540":1,"544":1,"545":3,"546":1,"547":1,"549":5,"551":1,"555":2,"556":1,"566":1,"572":8,"574":1,"576":1,"577":1,"578":3,"582":1,"583":1,"585":2,"590":1,"591":2,"592":1,"593":1,"599":4,"600":2,"602":2,"603":2,"607":1,"609":6,"611":5,"612":1,"616":1,"618":3,"619":1,"620":1,"624":1,"626":5,"627":1,"628":1,"633":2,"635":4,"638":1,"640":2,"643":1,"644":1,"645":1,"649":1,"655":1,"657":3,"659":1,"660":1,"665":5,"666":1,"672":3,"674":6,"682":2,"683":2,"690":5,"692":1,"693":1,"696":1,"697":1,"698":2,"699":3,"700":1,"702":1,"707":1,"709":1,"714":1,"715":1,"716":1,"717":2,"720":1,"725":1,"733":1,"739":1,"740":2,"743":4,"747":1,"748":1,"749":2,"751":3,"759":1,"764":1,"766":3,"767":1,"768":1,"773":1,"774":1,"776":1,"781":1,"782":2,"784":1,"790":3,"793":1,"794":1,"798":2,"799":4,"800":2,"803":1,"809":2,"810":3,"814":1,"820":1,"821":1,"825":1,"826":2,"827":6,"829":2,"832":2,"837":2,"838":3,"840":3,"842":1,"853":3,"856":1,"859":1,"860":2,"861":3,"863":2,"867":1,"868":1,"869":1,"870":3,"872":1,"875":1,"877":1,"881":5,"889":1,"891":1,"892":1,"896":1,"905":6,"906":3,"914":1,"915":1,"920":1,"923":2,"924":1,"926":1,"930":1,"932":1,"933":1,"935":1,"940":1,"941":1,"946":1,"954":1,"955":1,"956":1,"958":1,"959":2,"963":1,"964":4,"972":1,"979":2,"980":2,"986":1,"987":2,"988":1,"995":1,"996":1,"998":2,"1004":3,"1005":1,"1006":2,"1010":1,"1012":1,"1013":1,"1014":1,"1016":1,"1018":3,"1021":1,"1026":2,"1033":1,"1036":2,"1041":1,"1043":1,"1044":1,"1050":2,"1051":1,"1052":1,"1054":2,"1055":2,"1059":1,"1060":1,"1070":1,"1074":3,"1075":2,"1078":1,"1081":2,"1083":1,"1084":1,"1085":1,"1091":1,"1092":2,"1107":1,"1109":1,"1115":2,"1116":1,"1124":1,"1132":1,"1133":1,"1134":1,"1135":1,"1136":1,"1137":1,"1150":1,"1152":1,"1168":2,"1169":1,"1171":1,"1175":2,"1184":1,"1191":1,"1192":1,"1196":1,"1200":1,"1201":1,"1202":1,"1203":1,"1211":1,"1212":9,"1213":1,"1214":4,"1220":3,"1222":1,"1224":2,"1225":1,"1227":1,"1229":11,"1230":1,"1231":1,"1232":4,"1234":3,"1235":1,"1237":21,"1239":1,"1241":2,"1242":1,"1243":3,"1246":1,"1247":36,"1248":1,"1249":1,"1252":5,"1257":3,"1258":2,"1259":40,"1263":4,"1264":1,"1265":3,"1267":1,"1268":1,"1270":44,"1271":15,"1273":1,"1274":1,"1275":3,"1277":2,"1279":1,"1281":2,"1282":2,"1283":1,"1285":4,"1286":144,"1287":2,"1289":2,"1290":1,"1292":1,"1294":2,"1297":2,"1300":72,"1301":20,"1302":1,"1306":1,"1307":1,"1309":26,"1310":12,"1311":89,"1312":16,"1314":1,"1315":1,"1318":2,"1320":3,"1323":57,"1324":132,"1325":3,"1326":4,"1330":1,"1332":2,"1333":6,"1334":1,"1335":2,"1338":4,"1339":89,"1341":1,"1342":3,"1343":2,"1344":1,"1347":2,"1348":3,"1349":4,"1350":91,"1352":4,"1353":1,"1354":1,"1357":1,"1358":2,"1359":219,"1360":1,"1361":1,"1362":4,"1364":1,"1365":1,"1366":1,"1368":1,"1369":35,"1371":1,"1373":2,"1374":1,"1375":1,"1376":1,"1377":2,"1378":1,"1379":3,"1380":53,"1382":1,"1383":3,"1384":2,"1385":3,"1388":1,"1389":1,"1390":2,"1391":4,"1392":1,"1394":1,"1395":114,"1396":145,"1399":3,"1402":41,"1406":3,"1408":1,"1409":3,"1411":1,"1414":3,"1415":73,"1416":18,"1417":57,"1418":1,"1419":1,"1421":1,"1422":2,"1423":1,"1425":1,"1427":7,"1428":1,"1429":2,"1430":1,"1431":2,"1432":2,"1433":1,"1436":242,"1438":17,"1440":1,"1441":12,"1442":3,"1443":9,"1444":3,"1445":7,"1446":3,"1447":10,"1448":1,"1449":1,"1450":2,"1453":5,"1454":6,"1455":17,"1456":3,"1460":3,"1461":2,"1463":1,"1465":4,"1466":1,"1467":53,"1473":2,"1474":6,"1475":2,"1476":5,"1477":6,"1478":1,"1480":2,"1486":6,"1487":3,"1488":15,"1489":7,"1490":10,"1491":4,"1492":11,"1495":2,"1496":46,"1498":2,"1499":1,"1500":1,"1503":1,"1504":1,"1509":1,"1514":1,"1519":1,"1525":3,"1526":21,"1528":1,"1531":2,"1534":4,"1535":6,"1537":2,"1541":1,"1561":1,"1563":1,"1569":3,"1576":2,"1577":12,"1578":1,"1579":1,"1582":1,"1585":2,"1586":1,"1587":1,"1589":2,"1591":21,"1593":1,"1594":1,"1596":6,"1597":1,"1599":1,"1600":3,"1611":1,"1622":1,"1623":1,"1624":1,"1625":1,"1626":1,"1627":4,"1629":2,"1630":11,"1631":16,"1632":16,"1633":4,"1634":2,"1635":8,"1636":1,"1637":3,"1638":7,"1639":10,"1640":11,"1641":12,"1644":1,"1646":2,"1651":2,"1652":2,"1653":2,"1654":3,"1657":1,"1661":2,"1663":1,"1665":1,"1666":2,"1667":1,"1670":1,"1671":2,"1673":2,"1675":1,"1681":1,"1682":1,"1683":1,"1684":1,"1685":4,"1686":7,"1687":1,"1691":1,"1693":1,"1694":1,"1696":1,"1701":1,"1704":1,"1705":1,"1707":1,"1708":1,"1716":1,"1718":1,"1719":2,"1720":3,"1721":1,"1725":1,"1726":2,"1727":6,"1728":3,"1729":2,"1736":1,"1738":1,"1746":1,"1747":1,"1748":3,"1749":7,"1750":3,"1753":6,"1754":1,"1755":1,"1759":2,"1760":2,"1764":2,"1765":10,"1767":4,"1768":6,"1769":4,"1771":1,"1773":1,"1774":3,"1775":1,"1776":2,"1777":3,"1779":5,"1780":1,"1781":1,"1782":1,"1784":5,"1788":1,"1789":1,"1794":1,"1796":1,"1799":2,"1800":1,"1801":1,"1802":1,"1805":4,"1806":1,"1807":1,"1808":2,"1811":1,"1815":4,"1821":2,"1829":1,"1833":1,"1840":1,"1841":1,"1842":1,"1849":2,"1851":3,"1852":1,"1854":1,"1856":2,"1857":1,"1859":3,"1860":3,"1861":1,"1864":1,"1865":2,"1869":1,"1874":1,"1875":1,"1876":3,"1881":2,"1883":1,"1884":3,"1888":1,"1894":1,"1895":1,"1900":1,"1903":1,"1908":1,"1909":2,"1916":1,"1920":1,"1922":1,"1923":2,"1927":2,"1931":1,"1932":3,"1933":1,"1935":2,"1938":1,"1940":1,"1941":1,"1942":1,"1944":1,"1945":1,"1946":3,"1947":2,"1948":1,"1949":1,"1952":1,"1953":1,"1954":1,"1956":1,"1960":2,"1962":1,"1963":2,"1970":2,"1971":1,"1975":2,"1977":2,"1978":1,"1979":1,"1982":2,"1985":2,"1987":1,"1988":2,"1989":1,"1990":1,"1992":1,"1995":2,"1997":1,"1998":2,"1999":3,"2000":2,"2001":2,"2002":1,"2003":1,"2007":1,"2010":1,"2018":1,"2024":2,"2029":1,"2030":1,"2032":1,"2033":1,"2034":2,"2036":2,"2037":1,"2038":1,"2042":2,"2043":3,"2046":1,"2047":1,"2053":1,"2054":1,"2055":2,"2057":2,"2063":3,"2067":1,"2069":1,"2070":1,"2071":1,"2072":1,"2073":2,"2077":1,"2079":1,"2083":3,"2086":1,"2087":1,"2089":2,"2090":1,"2094":1,"2097":3,"2098":1,"2108":1,"2111":1,"2112":1,"2117":3,"2118":3,"2120":1,"2121":3,"2124":1,"2127":1,"2128":1,"2131":1,"2138":1,"2142":1,"2143":1,"2147":1,"2148":2,"2149":1,"2150":2,"2154":2,"2156":7,"2158":4,"2159":1,"2160":1,"2161":1,"2167":4,"2168":1,"2169":1,"2170":1,"2172":1,"2173":1,"2174":1,"2176":1,"2177":1,"2178":1,"2180":2,"2185":1,"2189":1,"2192":1,"2194":1,"2196":2,"2197":1,"2204":1,"2210":1,"2215":1,"2220":2,"2228":1,"2230":1,"2232":2,"2234":2,"2242":1}}],["alreadyhaveaccountlink",{"3":{"1436":1}}],["alreadyanswered",{"3":{"1402":1}}],["alreadyvisited",{"3":{"1396":7}}],["alreadyreviewed",{"3":{"1765":1,"1767":1}}],["alreadyrevoked",{"3":{"1300":1}}],["alreadyrecorded",{"3":{"1396":9}}],["alreadyunpublished",{"3":{"1350":1,"1359":2}}],["alreadylinked",{"3":{"1350":1,"1359":1}}],["alreadypublished",{"3":{"1343":1,"1344":1,"1350":1,"1359":2,"1380":1}}],["alreadyprocessedasync",{"2":{"195":1,"201":1,"1258":1},"3":{"195":2,"201":1,"1258":1,"1259":6}}],["alreadyclosed",{"3":{"1300":1,"1436":6}}],["alreadyclaimed",{"3":{"1300":1}}],["alreadycheckedin",{"3":{"690":1,"1396":17}}],["alreadysoftdeletefilteredentity",{"3":{"1199":3,"1207":1}}],["alreadydeleted",{"2":{"1219":1},"3":{"39":1,"1219":1,"1229":1,"1237":1,"1323":1,"1359":1,"1810":1}}],["already",{"3":{"0":30,"18":1,"24":4,"26":3,"27":2,"39":3,"46":1,"53":1,"54":1,"58":1,"60":3,"67":1,"69":1,"71":4,"72":3,"73":1,"81":2,"95":2,"99":1,"100":2,"102":1,"109":2,"110":1,"113":1,"115":1,"120":2,"122":3,"123":2,"127":1,"130":1,"131":1,"135":4,"136":1,"140":1,"142":1,"147":1,"148":1,"150":2,"158":1,"160":1,"164":1,"165":1,"166":1,"167":1,"175":1,"176":1,"178":3,"179":2,"180":1,"184":1,"186":1,"189":2,"194":2,"195":1,"198":1,"200":4,"201":2,"202":2,"207":1,"214":1,"225":3,"228":1,"230":1,"237":1,"246":1,"255":2,"256":1,"259":1,"260":1,"264":1,"265":3,"266":2,"273":1,"274":2,"292":1,"295":1,"299":1,"309":1,"310":1,"314":1,"317":1,"318":2,"340":2,"341":1,"342":1,"349":1,"350":3,"351":1,"352":1,"353":2,"358":2,"362":1,"369":1,"370":1,"382":1,"383":2,"390":1,"391":1,"392":1,"398":1,"400":2,"401":2,"402":1,"404":2,"405":3,"407":1,"408":1,"412":1,"413":1,"415":1,"420":1,"423":1,"424":1,"448":1,"458":2,"459":5,"461":2,"465":2,"471":1,"483":1,"499":1,"500":1,"508":1,"517":2,"519":1,"527":2,"528":1,"534":2,"535":1,"536":6,"537":4,"538":1,"539":2,"544":2,"549":2,"555":1,"556":1,"558":1,"563":1,"564":1,"565":1,"566":1,"573":1,"578":1,"583":1,"599":3,"600":1,"601":1,"603":1,"609":3,"618":1,"627":1,"633":2,"640":1,"641":1,"647":1,"648":1,"650":2,"657":1,"658":1,"665":3,"666":1,"673":1,"675":1,"681":1,"682":1,"683":1,"689":1,"691":2,"692":1,"697":1,"698":4,"702":3,"706":1,"707":4,"708":2,"710":1,"714":1,"715":1,"716":1,"718":1,"724":1,"725":3,"726":1,"733":2,"734":1,"735":1,"740":1,"741":4,"742":1,"743":1,"748":1,"750":1,"756":1,"757":1,"765":2,"767":1,"773":1,"789":1,"790":4,"792":1,"793":1,"794":1,"800":1,"801":1,"803":1,"809":1,"810":4,"811":2,"813":1,"818":1,"819":3,"820":2,"826":1,"827":7,"828":1,"829":1,"832":2,"833":1,"837":1,"838":1,"839":2,"846":1,"847":2,"848":1,"849":1,"853":2,"854":1,"856":1,"860":2,"862":1,"864":1,"865":1,"870":1,"872":1,"877":1,"882":2,"883":1,"884":1,"889":2,"890":2,"891":1,"896":2,"897":2,"905":8,"906":2,"912":1,"914":4,"921":2,"922":3,"926":3,"930":1,"931":1,"932":2,"933":1,"934":1,"940":1,"945":1,"947":1,"964":1,"965":1,"971":2,"973":1,"980":1,"981":1,"982":2,"988":5,"989":3,"995":1,"996":5,"997":2,"1003":1,"1004":1,"1011":2,"1013":1,"1017":1,"1018":2,"1019":1,"1025":1,"1033":1,"1034":1,"1035":1,"1040":1,"1041":1,"1042":2,"1043":3,"1044":2,"1049":1,"1055":1,"1058":3,"1059":5,"1060":2,"1061":1,"1066":2,"1067":2,"1068":2,"1073":1,"1074":1,"1075":2,"1077":1,"1082":2,"1083":1,"1084":1,"1085":1,"1090":1,"1093":1,"1115":2,"1116":4,"1117":2,"1123":1,"1125":3,"1135":1,"1140":1,"1142":2,"1143":1,"1145":2,"1150":1,"1152":1,"1154":1,"1155":1,"1157":1,"1160":1,"1162":1,"1178":1,"1183":1,"1185":1,"1187":1,"1190":1,"1196":1,"1212":1,"1218":1,"1220":2,"1227":1,"1228":1,"1229":11,"1231":2,"1233":1,"1237":10,"1239":2,"1241":1,"1242":2,"1247":21,"1249":1,"1250":1,"1253":1,"1255":1,"1256":2,"1257":1,"1258":2,"1259":34,"1262":2,"1263":3,"1265":3,"1267":2,"1270":40,"1271":4,"1274":3,"1275":3,"1276":1,"1278":2,"1281":7,"1286":105,"1288":1,"1289":1,"1290":2,"1292":1,"1300":52,"1301":10,"1304":1,"1307":1,"1309":19,"1310":4,"1311":58,"1312":9,"1315":2,"1316":1,"1318":1,"1320":1,"1322":2,"1323":58,"1324":89,"1328":1,"1330":2,"1335":1,"1337":2,"1338":1,"1339":42,"1343":2,"1345":1,"1346":1,"1347":1,"1350":23,"1353":2,"1354":1,"1355":3,"1357":1,"1358":2,"1359":122,"1362":1,"1363":1,"1365":1,"1366":1,"1369":13,"1371":2,"1372":2,"1376":2,"1378":2,"1380":21,"1385":1,"1389":1,"1390":1,"1395":49,"1396":92,"1399":1,"1400":2,"1401":1,"1402":33,"1406":2,"1407":3,"1408":5,"1409":2,"1410":1,"1411":1,"1413":2,"1414":1,"1415":66,"1416":9,"1417":37,"1420":1,"1421":1,"1422":1,"1423":1,"1425":1,"1426":1,"1427":13,"1429":2,"1436":64,"1438":6,"1441":2,"1442":2,"1443":2,"1445":2,"1446":1,"1447":3,"1448":1,"1453":2,"1454":3,"1455":10,"1456":2,"1459":4,"1465":2,"1467":17,"1472":2,"1473":1,"1474":1,"1475":1,"1477":1,"1479":1,"1486":1,"1488":2,"1492":2,"1496":14,"1507":1,"1531":1,"1577":2,"1596":2,"1627":1,"1631":5,"1632":8,"1638":1,"1640":1,"1641":8,"1646":1,"1648":1,"1649":2,"1651":1,"1653":1,"1656":1,"1661":1,"1664":1,"1672":1,"1684":2,"1685":5,"1686":12,"1687":1,"1689":1,"1692":1,"1697":1,"1700":1,"1701":5,"1702":2,"1703":1,"1708":1,"1719":1,"1720":1,"1723":1,"1724":2,"1728":1,"1729":2,"1739":1,"1747":2,"1748":3,"1749":4,"1755":1,"1764":2,"1765":7,"1766":1,"1767":2,"1768":1,"1770":1,"1776":1,"1781":1,"1788":1,"1790":1,"1800":1,"1804":1,"1805":2,"1809":1,"1821":2,"1823":1,"1824":1,"1832":1,"1840":3,"1843":1,"1844":1,"1847":1,"1849":1,"1851":3,"1870":1,"1873":2,"1874":1,"1879":1,"1881":1,"1883":1,"1887":2,"1890":1,"1891":1,"1892":1,"1897":1,"1908":2,"1909":1,"1910":1,"1916":1,"1918":1,"1920":1,"1922":1,"1923":3,"1924":1,"1933":2,"1941":1,"1944":1,"1946":1,"1948":3,"1950":2,"1953":1,"1954":1,"1962":1,"1967":1,"1968":2,"1970":1,"1976":1,"1977":5,"1978":2,"1979":5,"1982":2,"1989":1,"1994":1,"1995":1,"1997":2,"2000":3,"2001":1,"2012":1,"2016":1,"2017":1,"2019":1,"2024":1,"2028":1,"2030":1,"2032":3,"2046":1,"2063":1,"2064":1,"2066":3,"2067":1,"2069":1,"2076":1,"2081":1,"2083":3,"2087":1,"2092":1,"2095":2,"2096":1,"2097":1,"2098":1,"2101":1,"2117":1,"2118":2,"2131":1,"2132":1,"2134":1,"2135":1,"2136":1,"2139":1,"2140":1,"2141":1,"2143":1,"2150":1,"2154":1,"2156":2,"2160":1,"2161":1,"2163":3,"2164":1,"2165":4,"2167":2,"2168":5,"2169":3,"2177":1,"2180":1,"2182":1,"2184":1,"2185":1,"2187":2,"2190":1,"2191":1,"2192":1,"2193":2,"2194":3,"2198":1,"2199":1,"2215":1,"2232":1,"2234":1}}],["alwaysonline",{"3":{"1417":1}}],["alwaysonlineconnectivitystatusservice",{"2":{"2118":1},"3":{"1199":5,"1203":1,"1207":2,"1417":14,"2118":2}}],["alwaysbypassedprefixes",{"3":{"1339":1}}],["alwaysfailsvalidator",{"3":{"1199":2,"1207":1}}],["alwaysretryexecutionstrategy",{"3":{"1199":2,"1207":1}}],["always",{"0":{"1364":1},"1":{"928":1,"929":1,"930":1,"931":1,"932":1,"933":1,"934":1,"935":1},"2":{"1483":1},"3":{"0":9,"24":1,"53":1,"58":1,"78":1,"123":1,"140":1,"160":1,"175":2,"202":1,"221":1,"230":2,"231":1,"243":2,"245":1,"255":1,"256":1,"258":1,"267":1,"272":1,"280":1,"310":2,"334":1,"339":1,"344":1,"349":1,"353":1,"359":1,"363":1,"383":1,"388":1,"401":1,"404":1,"407":1,"413":1,"420":1,"440":1,"501":1,"511":1,"513":1,"518":1,"536":1,"549":1,"564":1,"565":1,"583":2,"585":1,"593":1,"599":1,"609":1,"620":1,"626":2,"657":1,"684":1,"690":2,"698":2,"749":2,"766":1,"784":1,"818":1,"819":1,"827":1,"848":1,"856":1,"863":1,"881":1,"905":1,"924":1,"926":2,"928":1,"946":1,"1033":1,"1034":2,"1042":1,"1046":1,"1061":1,"1067":1,"1099":1,"1100":1,"1108":1,"1117":1,"1123":1,"1175":1,"1176":1,"1211":1,"1212":3,"1214":1,"1215":1,"1221":1,"1227":1,"1229":3,"1237":5,"1240":1,"1247":4,"1253":1,"1255":1,"1259":9,"1261":1,"1263":1,"1269":1,"1270":8,"1271":3,"1276":1,"1278":1,"1279":1,"1280":1,"1286":43,"1291":1,"1300":20,"1301":10,"1302":1,"1309":11,"1310":4,"1311":35,"1312":5,"1315":1,"1320":2,"1323":22,"1324":21,"1332":1,"1333":1,"1337":1,"1339":19,"1348":1,"1349":1,"1350":16,"1359":27,"1364":1,"1366":1,"1369":3,"1380":3,"1383":1,"1384":1,"1386":1,"1387":1,"1388":1,"1391":2,"1395":27,"1396":23,"1402":11,"1406":1,"1408":1,"1415":15,"1416":2,"1417":21,"1423":1,"1427":4,"1430":1,"1431":2,"1433":1,"1435":1,"1436":30,"1438":5,"1440":1,"1441":1,"1444":1,"1447":2,"1454":1,"1455":4,"1456":3,"1460":2,"1466":1,"1467":2,"1470":1,"1475":3,"1478":1,"1483":1,"1486":3,"1488":3,"1489":1,"1490":1,"1492":2,"1496":1,"1503":1,"1526":3,"1531":1,"1534":1,"1577":1,"1607":2,"1627":1,"1630":1,"1631":3,"1639":1,"1640":1,"1641":2,"1649":1,"1652":1,"1653":2,"1670":1,"1684":1,"1686":1,"1697":1,"1700":1,"1701":1,"1730":1,"1737":1,"1741":2,"1761":1,"1768":1,"1769":1,"1781":1,"1805":1,"1815":1,"1820":1,"1825":1,"1843":2,"1849":1,"1865":1,"1867":1,"1871":1,"1876":2,"1877":2,"1878":1,"1881":1,"1889":1,"1900":1,"1902":2,"1922":2,"1927":1,"1933":1,"1938":1,"1940":1,"1944":1,"1947":1,"1949":1,"1963":1,"1974":1,"1976":1,"1984":1,"1991":1,"1993":1,"2000":1,"2003":1,"2006":1,"2010":1,"2019":1,"2024":1,"2044":1,"2046":1,"2049":1,"2057":1,"2064":1,"2091":1,"2094":1,"2118":2,"2119":1,"2123":2,"2126":1,"2129":1,"2134":1,"2142":1,"2156":1,"2183":1,"2184":1,"2202":1,"2232":2}}],["asleep",{"3":{"1479":1}}],["aswellformedopenapidescribingtheapisurface",{"3":{"1436":1}}],["asreadonly",{"2":{"1343":1},"3":{"1343":1,"1350":3,"1369":1,"1396":1,"1402":1}}],["asreadonlylist",{"3":{"1324":1}}],["astronomically",{"3":{"1902":1}}],["astracking",{"3":{"0":1,"549":1,"551":1,"926":1,"1240":1,"1244":1,"1247":3,"1270":6,"1286":16,"1310":3,"1311":1,"1350":1,"1359":48,"1369":3,"1396":10,"1402":5,"1415":5,"1577":1,"1591":1}}],["asterisk",{"3":{"1324":2,"1395":1}}],["asnotracking",{"3":{"1259":1,"1286":6,"1306":1,"1526":1,"1577":2,"1591":1}}],["ascends",{"3":{"1286":1}}],["ascending",{"3":{"330":1,"549":3,"1175":1,"1191":1,"1200":1,"1211":1,"1242":1,"1247":2,"1286":7,"1311":1,"1324":2,"1339":1,"1344":1,"1350":3,"1359":4,"1392":1,"1395":17,"1396":1,"1402":1,"1438":1,"1498":2,"1532":1,"1631":4,"1639":2,"1640":15,"1988":1}}],["ascii",{"3":{"1286":7,"1300":1,"1305":1,"1309":1,"1312":5,"1324":3,"1347":1,"1350":1,"1396":3,"1415":1,"1417":1,"1436":9,"1438":2,"1496":1,"1821":1}}],["asc",{"3":{"1242":1,"1247":4,"1286":1,"1395":5,"1396":1,"1597":1,"1598":1,"1640":1}}],["asitsfallback",{"3":{"1436":2}}],["asimplementedinterfaces",{"3":{"1395":4,"1415":1}}],["asia",{"3":{"1350":1}}],["aside",{"3":{"556":1,"1311":1,"1655":1}}],["asichatclient",{"2":{"1420":1,"2172":1},"3":{"0":1,"1091":2,"1420":2,"1427":5,"2172":1}}],["asker",{"3":{"1396":3,"1402":1}}],["asked",{"3":{"0":2,"24":1,"73":1,"108":1,"350":1,"365":1,"402":1,"529":1,"537":1,"549":1,"691":1,"714":1,"727":1,"733":1,"740":1,"924":1,"939":1,"1020":1,"1026":1,"1027":1,"1028":1,"1043":1,"1058":1,"1066":1,"1091":1,"1092":1,"1093":1,"1116":1,"1142":1,"1229":1,"1238":1,"1241":1,"1243":1,"1244":1,"1245":1,"1246":1,"1247":5,"1254":1,"1259":5,"1270":3,"1271":1,"1272":1,"1275":1,"1286":8,"1295":1,"1300":1,"1306":1,"1309":1,"1310":2,"1311":2,"1323":2,"1324":11,"1328":1,"1339":1,"1350":4,"1359":13,"1369":1,"1389":1,"1395":3,"1396":6,"1405":1,"1415":6,"1416":1,"1417":4,"1424":1,"1427":2,"1436":3,"1438":1,"1443":1,"1450":1,"1459":1,"1467":1,"1630":1,"1639":2,"1682":1,"1727":2,"1804":1,"1814":1,"1815":1,"1863":1,"1947":1,"1962":1,"1975":1,"1977":1,"2177":1,"2194":1}}],["ask",{"3":{"527":1,"536":1,"549":1,"649":1,"675":1,"684":1,"716":1,"725":2,"741":1,"798":1,"1019":1,"1237":2,"1244":1,"1247":3,"1259":1,"1270":2,"1273":2,"1277":1,"1278":1,"1283":1,"1286":10,"1300":7,"1301":2,"1309":3,"1311":1,"1323":2,"1324":9,"1328":1,"1339":4,"1359":6,"1369":1,"1373":1,"1380":2,"1391":1,"1395":5,"1396":9,"1403":1,"1415":4,"1416":2,"1417":4,"1427":1,"1436":9,"1455":1,"1632":1,"1686":2,"1697":1,"1768":1,"1794":1,"1796":1,"1802":1,"1815":1,"1840":1,"1844":1,"1916":1,"1950":1,"1973":1,"2056":1,"2067":1,"2098":2,"2110":1,"2116":1,"2124":1,"2170":1}}],["asking",{"3":{"24":1,"123":1,"254":1,"389":1,"508":1,"557":1,"690":1,"740":1,"741":1,"757":1,"758":1,"782":1,"819":1,"881":1,"890":1,"899":1,"932":1,"1024":1,"1229":1,"1232":1,"1237":2,"1240":1,"1247":2,"1259":2,"1267":1,"1276":1,"1277":1,"1286":15,"1300":1,"1301":1,"1323":2,"1324":1,"1350":1,"1359":15,"1380":1,"1386":1,"1395":6,"1402":1,"1415":1,"1417":2,"1422":1,"1436":1,"1438":1,"1455":1,"1534":1,"1585":1,"1631":1,"1639":1,"1664":1,"1749":1,"1765":1,"1920":1,"1945":1,"2032":1,"2048":1,"2075":1,"2169":1,"2174":1,"2195":1}}],["asksforafreshlinkandsayssowithoutconfirmingtheaccountexists",{"3":{"1436":1}}],["asks",{"3":{"0":1,"10":1,"24":1,"73":1,"81":1,"126":1,"200":1,"265":1,"350":2,"369":1,"407":1,"427":1,"428":1,"458":1,"459":1,"465":1,"536":1,"545":1,"546":1,"573":1,"577":2,"590":1,"592":1,"626":2,"650":1,"682":1,"690":1,"692":2,"698":1,"724":1,"725":1,"793":2,"860":1,"871":1,"996":1,"1003":1,"1027":1,"1042":1,"1067":1,"1090":1,"1091":2,"1092":1,"1116":1,"1142":1,"1161":1,"1228":2,"1234":1,"1237":1,"1243":2,"1245":1,"1247":3,"1259":2,"1264":1,"1270":4,"1271":1,"1274":1,"1281":1,"1286":26,"1300":6,"1301":1,"1304":1,"1307":1,"1309":2,"1310":2,"1311":6,"1312":1,"1313":1,"1318":2,"1322":1,"1323":6,"1324":23,"1332":1,"1333":1,"1337":1,"1339":5,"1349":1,"1350":3,"1352":1,"1357":1,"1359":23,"1369":2,"1380":3,"1395":11,"1396":12,"1402":6,"1408":1,"1411":1,"1416":5,"1417":6,"1418":1,"1431":1,"1432":1,"1433":1,"1435":1,"1436":16,"1438":2,"1455":1,"1475":1,"1476":1,"1492":2,"1496":1,"1524":1,"1526":1,"1686":2,"1727":1,"1748":1,"1765":2,"1769":1,"1776":1,"1788":1,"1795":1,"1810":1,"1815":1,"1823":1,"1844":1,"1851":1,"1865":1,"1866":1,"1868":1,"1882":1,"1896":1,"1933":1,"1972":1,"1977":1,"2047":1,"2063":1,"2078":2,"2083":1,"2098":1,"2109":1,"2116":1,"2117":1,"2123":2,"2141":2,"2149":1,"2154":1,"2162":2,"2163":2,"2167":2,"2169":1,"2171":1,"2174":1,"2177":1,"2179":1,"2182":1,"2191":1,"2194":1}}],["asymmetries",{"3":{"1324":1,"1359":1}}],["asymmetricsignatureprovider",{"3":{"1300":1}}],["asymmetrically",{"3":{"1212":1,"1323":1}}],["asymmetric",{"3":{"31":3,"32":1,"186":1,"401":1,"1034":1,"1288":1,"1300":6,"1324":1,"1395":1,"1396":1,"1436":1,"1799":1,"1893":1,"1894":1,"1895":1,"1897":1,"1898":1,"1899":3}}],["asymmetry",{"3":{"0":2,"71":1,"230":1,"260":1,"343":1,"392":1,"401":1,"457":1,"463":1,"464":1,"465":1,"609":1,"624":2,"656":1,"658":1,"766":1,"819":2,"820":1,"823":1,"876":1,"1229":2,"1234":1,"1267":1,"1270":2,"1276":1,"1286":6,"1309":1,"1311":1,"1323":4,"1332":1,"1339":1,"1350":5,"1359":14,"1395":3,"1396":4,"1402":1,"1415":1,"1417":1,"1436":1,"1438":1,"1441":1,"1443":1,"1486":1,"1492":1,"1543":1,"1639":1,"1876":1,"1920":1,"1938":1,"1964":1,"1989":1,"2009":1,"2032":1,"2085":1,"2232":1}}],["asyncapi",{"3":{"1524":2,"1526":1,"1530":1,"1531":2,"1532":1,"1546":1}}],["asyncmethods",{"3":{"1436":1}}],["asyncmethodsdeclaretrailingcancellationtoken",{"2":{"0":1,"135":1},"3":{"0":1,"135":1,"1436":2}}],["asyncretrypolicy",{"3":{"1324":2}}],["asyncduplexstreamingcall",{"3":{"1312":1}}],["asyncclientstreamingcall",{"3":{"1312":1}}],["asyncclockreadingfixture",{"3":{"1199":2,"1207":1,"1436":5}}],["asyncunarycall",{"3":{"1312":1}}],["asyncstatemachineattribute",{"3":{"1436":1}}],["asyncserverstreamingcall",{"3":{"1312":1}}],["asyncservicescope",{"2":{"1252":1},"3":{"1252":1}}],["asyncscopedreadcontroller",{"3":{"1199":2,"1207":1}}],["asynchrony",{"3":{"743":1,"1436":1}}],["asynchronously",{"3":{"248":1,"350":1,"1342":1,"1395":5,"1413":1,"1415":1,"1438":1,"1467":1,"1634":1,"1638":1,"1751":1,"1770":1,"1887":1,"2111":1}}],["asynchronous",{"0":{"1390":1},"3":{"52":1,"59":1,"109":1,"255":1,"447":1,"455":1,"727":1,"1220":2,"1229":1,"1253":1,"1259":8,"1286":7,"1311":3,"1312":1,"1323":4,"1324":4,"1349":1,"1350":1,"1359":4,"1372":1,"1380":5,"1390":1,"1395":6,"1415":1,"1436":6,"1765":1,"1805":1,"1923":1,"2016":1,"2020":1,"2130":1}}],["asynclocal",{"2":{"1246":1},"3":{"265":3,"1246":2,"1247":4,"1318":1,"1324":2,"1417":2}}],["async",{"3":{"27":1,"77":1,"135":1,"483":1,"743":2,"1012":1,"1161":7,"1192":1,"1220":1,"1229":6,"1247":2,"1259":1,"1270":3,"1284":1,"1286":9,"1300":4,"1301":4,"1309":2,"1310":1,"1311":3,"1312":1,"1323":2,"1324":15,"1339":1,"1350":3,"1359":15,"1372":1,"1380":2,"1395":4,"1396":7,"1402":7,"1415":8,"1416":1,"1417":9,"1431":2,"1436":32,"1489":1,"1491":1,"1496":3,"1524":2,"1526":4,"1531":1,"1544":1,"1546":1,"1549":3,"1556":1,"1558":1,"1577":3,"1591":2,"1805":1,"1887":1}}],["aspiration",{"3":{"1669":1,"2059":1}}],["aspirational",{"3":{"1237":1,"1270":1,"1300":1,"1324":1,"1325":1,"1395":1,"1436":4,"1489":1,"1558":1,"1788":1,"2037":1,"2060":1}}],["aspire010",{"3":{"1441":1,"1526":1}}],["aspire",{"0":{"99":1,"1442":1,"1443":1,"1444":1,"2022":1},"1":{"911":1,"912":1,"913":1,"914":1,"915":1,"916":1,"917":1,"918":1,"1325":1,"1326":1,"1327":1,"1328":1,"1329":1,"1330":1,"1331":1,"1332":1,"1333":1,"1334":1,"1335":1,"1336":1,"1337":1,"1338":1,"1339":1,"1439":1,"1440":1,"1441":1,"1442":1,"1443":1,"1444":1,"1445":1,"1446":1,"1447":1,"1448":1,"1449":1,"1450":1,"1451":1,"2003":1,"2004":1,"2005":1,"2006":1,"2007":1,"2008":1,"2009":1,"2010":1,"2011":1,"2012":1,"2013":1,"2014":1},"2":{"61":1,"67":1,"99":1,"100":1,"135":1,"141":1,"142":1,"214":2,"241":1,"247":1,"259":1,"638":1,"821":1,"825":1,"826":1,"899":1,"912":2,"913":1,"914":1,"916":1,"917":1,"939":1,"1004":1,"1034":1,"1035":1,"1036":3,"1067":2,"1068":4,"1069":2,"1211":2,"1213":1,"1325":4,"1326":1,"1328":1,"1329":1,"1337":1,"1339":1,"1430":3,"1437":1,"1439":1,"1445":1,"1449":1,"1460":1,"1486":1,"1487":1,"1488":1,"1496":1,"1503":1,"1504":1,"1656":1,"1660":2,"1677":1,"1781":2,"1790":1,"2004":3,"2008":1,"2014":2,"2022":1,"2028":1,"2030":1,"2038":1,"2055":1,"2111":2,"2149":1,"2151":1,"2153":1,"2160":1},"3":{"0":28,"18":1,"31":2,"47":1,"53":1,"61":3,"66":1,"67":1,"72":1,"91":1,"92":1,"93":2,"95":4,"98":2,"99":6,"100":1,"135":1,"141":1,"142":1,"150":1,"166":3,"171":1,"179":2,"180":1,"189":1,"214":3,"216":1,"217":1,"219":1,"220":1,"221":1,"233":1,"234":1,"235":14,"237":3,"238":1,"241":2,"243":2,"245":2,"247":2,"255":2,"256":1,"258":2,"259":5,"260":1,"261":1,"390":1,"392":1,"395":3,"397":9,"399":1,"400":2,"401":2,"402":3,"404":1,"406":1,"407":1,"408":2,"409":1,"599":1,"601":1,"603":1,"618":1,"619":1,"632":1,"633":2,"638":1,"640":3,"642":1,"665":6,"668":1,"669":2,"674":5,"774":2,"776":1,"792":1,"818":1,"819":5,"821":1,"822":3,"825":1,"826":4,"827":7,"829":3,"830":2,"833":2,"837":2,"838":1,"854":1,"862":1,"883":1,"884":1,"897":2,"899":1,"900":1,"911":1,"912":3,"913":12,"914":4,"915":1,"916":1,"917":2,"918":1,"932":1,"938":1,"939":3,"941":1,"980":8,"996":1,"1004":2,"1034":5,"1035":3,"1036":3,"1037":1,"1044":2,"1065":2,"1066":2,"1067":13,"1068":6,"1069":6,"1070":3,"1089":1,"1103":1,"1108":3,"1150":1,"1154":2,"1157":1,"1184":1,"1191":1,"1192":3,"1199":121,"1200":1,"1202":3,"1203":52,"1206":7,"1207":372,"1208":30,"1211":4,"1212":9,"1213":3,"1247":3,"1259":4,"1268":1,"1270":3,"1286":5,"1288":1,"1301":2,"1309":2,"1311":9,"1312":7,"1323":15,"1324":4,"1325":9,"1326":5,"1327":2,"1328":8,"1329":2,"1330":2,"1331":2,"1332":9,"1333":7,"1334":7,"1335":1,"1336":3,"1337":8,"1339":242,"1350":1,"1364":1,"1365":1,"1368":1,"1369":1,"1378":1,"1380":2,"1396":2,"1407":1,"1415":3,"1428":2,"1430":16,"1435":3,"1436":6,"1437":13,"1438":11,"1439":4,"1440":1,"1441":39,"1442":10,"1443":21,"1444":5,"1445":1,"1446":1,"1447":3,"1448":1,"1449":5,"1450":1,"1451":1,"1453":1,"1454":1,"1455":3,"1456":7,"1460":2,"1464":1,"1467":10,"1473":1,"1476":2,"1482":1,"1486":7,"1487":9,"1488":9,"1489":2,"1490":8,"1492":3,"1496":37,"1499":2,"1503":3,"1504":2,"1505":1,"1526":3,"1531":1,"1535":1,"1551":1,"1554":1,"1570":2,"1575":1,"1577":19,"1582":1,"1583":1,"1585":2,"1586":1,"1591":1,"1596":1,"1600":1,"1602":1,"1606":1,"1612":1,"1641":1,"1647":2,"1648":2,"1653":3,"1654":1,"1656":2,"1660":2,"1661":2,"1668":1,"1670":2,"1674":2,"1677":2,"1681":1,"1682":1,"1683":1,"1684":3,"1687":1,"1689":1,"1692":1,"1693":3,"1695":1,"1698":1,"1701":1,"1702":1,"1705":1,"1707":2,"1717":1,"1718":5,"1720":1,"1724":1,"1725":1,"1726":1,"1727":10,"1729":1,"1731":1,"1735":1,"1740":1,"1752":1,"1763":2,"1774":1,"1779":1,"1781":2,"1783":1,"1790":2,"1792":1,"1793":1,"1841":1,"1842":1,"1843":1,"1916":1,"1923":1,"1938":1,"2002":1,"2003":4,"2004":4,"2005":1,"2008":1,"2010":2,"2013":4,"2014":5,"2015":1,"2019":1,"2022":2,"2024":1,"2027":1,"2028":1,"2030":3,"2038":1,"2055":1,"2057":1,"2089":1,"2111":3,"2149":2,"2151":1,"2153":1,"2154":1,"2156":5,"2157":1,"2159":1,"2160":3,"2192":1,"2209":2,"2219":1,"2221":1,"2227":6,"2229":2,"2232":1,"2239":3,"2243":1}}],["aspect",{"3":{"881":1,"885":1,"1480":3,"1636":2}}],["aspnet",{"2":{"877":1,"1450":1},"3":{"868":1,"877":1,"1445":4,"1450":1}}],["aspnetcore",{"2":{"95":1,"99":1,"234":1,"401":1,"409":1,"633":1,"665":1,"1036":1,"1091":1,"1110":1,"1300":1,"1311":2,"1312":2,"1324":4,"1331":1,"1332":1,"1334":1,"1339":3,"1395":1,"1443":1,"2043":1,"2099":1},"3":{"95":2,"99":1,"234":1,"235":1,"397":2,"401":1,"409":1,"572":1,"633":1,"665":2,"776":1,"869":1,"1036":1,"1091":1,"1110":1,"1213":6,"1300":9,"1309":5,"1311":23,"1312":2,"1323":1,"1324":28,"1331":1,"1332":1,"1334":1,"1339":21,"1369":1,"1380":1,"1395":4,"1396":1,"1416":1,"1417":1,"1429":1,"1436":26,"1441":1,"1442":1,"1443":3,"1445":1,"1467":3,"1489":3,"1490":1,"1577":2,"1677":2,"2000":1,"2043":1,"2099":1}}],["asp",{"2":{"446":1,"447":1,"448":1,"454":1,"2129":1,"2131":1},"3":{"0":2,"109":3,"111":1,"174":1,"185":1,"207":1,"243":1,"265":2,"387":2,"395":2,"396":1,"397":5,"398":1,"405":1,"409":1,"411":1,"415":1,"446":1,"447":1,"448":4,"451":1,"454":1,"481":3,"482":1,"572":1,"664":1,"665":1,"748":1,"826":1,"831":1,"840":1,"853":1,"914":1,"916":1,"917":1,"1124":1,"1191":1,"1200":1,"1202":1,"1203":1,"1212":2,"1213":2,"1217":1,"1229":2,"1230":1,"1249":1,"1259":1,"1270":1,"1286":1,"1300":25,"1301":2,"1307":1,"1308":1,"1309":11,"1311":56,"1312":2,"1323":1,"1324":22,"1332":1,"1333":2,"1336":1,"1337":1,"1338":1,"1339":30,"1341":1,"1351":1,"1359":9,"1367":1,"1369":1,"1380":11,"1396":10,"1402":2,"1404":1,"1415":15,"1416":4,"1417":2,"1430":1,"1431":1,"1436":21,"1438":3,"1442":1,"1443":4,"1451":1,"1453":1,"1460":1,"1465":1,"1467":4,"1488":1,"1490":1,"1496":3,"1505":1,"1540":1,"1577":1,"1640":1,"1671":1,"1677":1,"1782":1,"1805":2,"1825":1,"1895":1,"1922":1,"1929":1,"1970":1,"1998":1,"2002":1,"2006":2,"2010":1,"2039":1,"2043":1,"2055":1,"2104":1,"2129":1,"2131":2,"2153":1,"2154":1,"2156":2,"2160":1,"2219":1,"2220":2,"2224":1,"2225":1,"2232":1}}],["assurant",{"3":{"2220":1}}],["assumeuniversal",{"3":{"1247":1,"1309":2,"1312":3,"1396":3}}],["assumes",{"3":{"320":1,"352":1,"405":1,"448":1,"735":1,"837":1,"1229":1,"1270":1,"1286":1,"1293":1,"1300":1,"1311":2,"1324":3,"1359":4,"1395":1,"1396":1,"1415":1,"1435":1,"1436":3,"1585":1,"1640":1,"1718":2,"1789":1,"1815":1,"1847":1,"1885":1,"1978":1,"2016":1,"2198":1}}],["assume",{"3":{"266":1,"389":1,"449":1,"709":1,"756":1,"827":1,"1247":1,"1270":2,"1286":3,"1300":1,"1312":1,"1323":2,"1324":3,"1359":2,"1369":1,"1396":3,"1402":1,"1415":2,"1436":1,"1626":1,"1737":1,"1881":1,"1901":1,"1905":1,"1909":1,"2015":1,"2125":1,"2133":2}}],["assumedefaultversionwhenunspecified",{"2":{"448":1,"449":1,"2131":1,"2133":1},"3":{"448":2,"449":1,"1311":1,"2131":1,"2133":1}}],["assumed",{"0":{"2034":1},"3":{"0":1,"69":1,"97":1,"265":1,"590":1,"813":1,"860":1,"871":1,"1229":1,"1247":1,"1279":1,"1286":1,"1311":1,"1318":1,"1323":1,"1324":2,"1339":2,"1359":2,"1395":2,"1416":1,"1436":7,"1438":2,"1492":2,"1549":1,"1560":1,"1577":1,"1854":1,"1863":1,"1864":1,"1878":1,"2037":1,"2038":1,"2203":1}}],["assuming",{"3":{"170":1,"603":1,"810":1,"1270":1,"1286":1,"1300":1,"1311":1,"1323":2,"1324":3,"1369":1,"1395":1,"1417":1,"1467":2,"1868":1}}],["assumption",{"3":{"97":1,"101":1,"254":1,"461":1,"481":1,"751":1,"831":1,"840":1,"972":1,"1134":1,"1286":3,"1324":1,"1359":3,"1396":3,"1415":1,"1436":2,"1467":1,"1585":1,"1692":1,"1844":1,"1863":1,"2027":1}}],["assumptions",{"3":{"55":1,"1402":1,"1717":1,"1718":2}}],["assplitquery",{"2":{"1864":1},"3":{"1243":1,"1244":1,"1247":3,"1278":1,"1286":8,"1310":1,"1436":1,"1815":1,"1864":1}}],["assinglequery",{"3":{"1286":1}}],["assistive",{"3":{"1395":1,"1396":1,"1417":6,"1526":1,"1532":1,"1558":1,"1750":1}}],["assistant",{"3":{"1091":1,"1424":1,"1459":2,"1460":1,"2220":1}}],["assisted",{"3":{"1012":1,"1351":1,"1570":1,"1625":1,"2213":2,"2218":1,"2219":1,"2225":1,"2243":1}}],["assignaction",{"3":{"1310":4,"1359":18,"1402":3}}],["assignableroles",{"3":{"1324":1,"1415":2,"1436":1}}],["assignable",{"3":{"707":1,"889":1,"1237":1,"1286":2,"1324":1,"1402":1,"1414":2,"1436":1}}],["assign",{"3":{"1236":1,"1237":3,"1286":4,"1310":3,"1359":10,"1395":1,"1472":1,"1630":1,"1632":2,"1689":1,"1746":2,"1748":2,"1768":1,"1868":2}}],["assignparentcategory",{"3":{"545":1,"1270":1}}],["assignparentcategoryhandler",{"2":{"543":1,"551":1},"3":{"543":1,"551":1}}],["assigning",{"3":{"265":3,"924":1,"1229":1,"1286":1,"1310":1,"1324":3,"1343":1,"1350":6,"1359":6,"1395":1,"1396":4,"1402":1,"1417":2,"1436":1}}],["assigns",{"3":{"263":1,"265":1,"303":1,"470":1,"551":1,"633":1,"690":1,"698":1,"700":1,"703":1,"1229":3,"1231":2,"1237":4,"1246":1,"1247":1,"1270":1,"1286":7,"1303":1,"1310":3,"1323":3,"1324":11,"1339":4,"1342":1,"1350":15,"1359":24,"1395":2,"1396":6,"1402":2,"1405":1,"1415":5,"1417":4,"1436":5,"1498":1,"1631":1,"1632":1,"1639":1,"1727":1,"1810":1,"1865":1,"2089":1}}],["assignees",{"3":{"224":1}}],["assignedproperties",{"3":{"1286":1}}],["assigned",{"2":{"1844":1},"3":{"0":1,"238":1,"545":3,"550":1,"599":3,"600":1,"657":2,"667":1,"830":1,"1018":1,"1196":1,"1200":1,"1212":1,"1231":1,"1237":5,"1259":1,"1270":3,"1277":1,"1278":1,"1286":13,"1300":4,"1309":3,"1310":1,"1311":1,"1324":2,"1339":2,"1342":3,"1349":2,"1350":29,"1352":1,"1355":1,"1359":36,"1364":1,"1369":1,"1380":1,"1395":23,"1396":7,"1402":17,"1415":2,"1417":1,"1438":1,"1459":1,"1467":2,"1472":1,"1488":1,"1496":1,"1498":2,"1526":1,"1624":1,"1627":1,"1630":2,"1631":2,"1632":4,"1635":1,"1637":1,"1638":1,"1639":8,"1727":1,"1755":1,"1776":1,"1844":1,"1929":1,"2232":1}}],["assignments",{"3":{"26":1,"599":1,"600":1,"923":1,"1286":3,"1300":1,"1339":1,"1350":3,"1359":16,"1395":3,"1402":1,"1467":3,"1472":2,"1632":2,"1636":2,"1844":2,"1955":2,"1956":1,"1959":1}}],["assignment",{"3":{"0":3,"265":1,"302":1,"424":1,"545":1,"549":1,"599":1,"600":1,"602":1,"665":5,"666":1,"668":2,"669":1,"692":1,"698":1,"714":1,"801":2,"804":1,"926":1,"1050":1,"1116":1,"1191":1,"1192":1,"1229":1,"1270":1,"1286":5,"1297":1,"1300":1,"1309":1,"1323":3,"1324":5,"1339":5,"1350":3,"1359":27,"1380":3,"1388":1,"1395":9,"1396":4,"1402":6,"1415":2,"1417":1,"1436":2,"1438":1,"1442":1,"1465":1,"1467":5,"1470":1,"1472":3,"1474":1,"1481":2,"1631":2,"1670":1,"1865":1,"1870":1,"1955":1,"1970":2,"1972":1,"2127":1,"2138":1}}],["associating",{"3":{"1359":1}}],["associations",{"3":{"1311":1,"1350":3,"1359":2,"1436":1,"1611":1,"1636":1,"1639":1}}],["association",{"1":{"417":1,"418":1,"419":1,"420":1,"421":1,"422":1,"423":1,"424":1,"425":1,"426":1,"427":1,"428":1,"429":1,"430":1},"3":{"0":5,"417":1,"418":4,"419":1,"420":2,"421":1,"425":1,"426":1,"428":1,"429":1,"1192":1,"1212":1,"1300":1,"1311":9,"1339":1,"1350":17,"1359":17,"1369":1,"1380":7,"1383":1,"1395":7,"1416":4,"1436":4,"1441":1,"1496":2,"1577":1,"1599":1,"1630":2,"1631":3,"1637":2,"1639":1,"1640":1,"1666":1,"2121":3,"2232":1}}],["associates",{"3":{"1328":1,"1339":2,"1359":1,"2220":1}}],["associate",{"3":{"1324":1,"1350":1,"1639":1,"2224":2}}],["associated",{"3":{"0":1,"359":1,"360":1,"365":1,"418":1,"420":1,"422":1,"1284":1,"1286":3,"1324":1,"1359":4,"1416":1,"1436":1,"1481":2,"1558":1,"1561":1,"1599":1,"1627":1,"1630":4,"1631":2,"1632":2,"1639":3,"1767":1,"2142":1,"2146":1}}],["asselfwithinterfaces",{"3":{"1311":2,"1323":1,"1359":3}}],["assessments",{"3":{"2234":1}}],["assessed",{"3":{"1300":1,"1536":1,"1585":2}}],["assesses",{"3":{"1216":1,"1218":2,"1229":14,"1237":37,"1247":38,"1259":36,"1270":68,"1271":17,"1286":182,"1300":147,"1301":22,"1309":66,"1310":6,"1311":87,"1312":9,"1313":1,"1323":116,"1324":198,"1339":20,"1350":54,"1352":2,"1353":2,"1354":1,"1357":1,"1359":390,"1360":1,"1369":38,"1380":32,"1381":1,"1394":1,"1395":156,"1396":192,"1402":86,"1415":98,"1416":12,"1417":140,"1427":18,"1436":215,"1438":2,"1440":1,"1441":5,"1442":1,"1443":4,"1445":1,"1449":1,"1453":2,"1454":2,"1455":5,"1456":1,"1457":2,"1458":1,"1460":1,"1463":1,"1464":1,"1465":4,"1467":9,"1472":2,"1473":2,"1474":3,"1475":3,"1476":2,"1477":1,"1478":2,"1479":1,"1480":1,"1481":1,"1486":3,"1487":1,"1488":4,"1489":6,"1490":1,"1492":5}}],["assess",{"3":{"1270":1,"1286":1,"1300":3,"1324":1,"1339":1,"1359":1,"1369":3,"1380":2,"1395":4,"1396":6,"1417":4,"1436":19,"1554":1}}],["assertmessagesuffix",{"3":{"1436":1}}],["assertnoviolations",{"3":{"1436":1}}],["assertnodependency",{"3":{"1436":3}}],["assertnoaccessibilityviolationsasync",{"2":{"618":1,"1433":1,"1488":1,"1490":1,"2057":1},"3":{"618":1,"1433":1,"1436":5,"1488":3,"1490":1,"1493":1,"2057":1}}],["assertdarkpaletteasync",{"3":{"1436":2}}],["assertdatasourceasync",{"2":{"1069":1},"3":{"1067":2,"1069":1,"1339":2}}],["assertdisabledstubs",{"3":{"1436":8,"1438":1}}],["assertprobepresentunderdefaultculture",{"3":{"1436":2}}],["assertproblemdetailsshapeasync",{"2":{"572":1,"2055":1},"3":{"572":1,"1436":3,"2055":1}}],["assertprotocontract",{"3":{"1436":2}}],["assertpipeline",{"3":{"1436":3}}],["assertcaseasync",{"3":{"1427":2}}],["asserth2casync",{"2":{"2056":1},"3":{"1067":2,"1069":1,"1339":3,"2056":1}}],["asserthealthyasync",{"2":{"2056":1},"3":{"1067":1,"1069":1,"1339":2,"2056":1}}],["assertjwksasync",{"2":{"2056":1},"3":{"1067":1,"1069":1,"1339":2,"2056":1}}],["assertreadyasync",{"2":{"2056":1},"3":{"1067":1,"2056":1}}],["assertaliveasync",{"2":{"2056":1},"3":{"1067":1,"2056":1}}],["assertable",{"3":{"860":1,"1109":1,"1300":1,"1309":1,"1311":1,"1339":1,"1436":6}}],["assertwithinbudget",{"2":{"861":1},"3":{"861":2,"1436":3}}],["asserted",{"3":{"0":6,"71":1,"73":1,"160":2,"252":1,"350":1,"352":1,"353":1,"371":1,"448":1,"455":1,"463":1,"546":1,"590":1,"591":1,"609":1,"640":1,"690":1,"707":1,"741":1,"757":3,"766":1,"838":2,"863":1,"876":1,"883":1,"941":1,"966":1,"972":1,"996":1,"1067":1,"1069":1,"1083":1,"1212":2,"1237":2,"1262":1,"1270":3,"1286":6,"1300":6,"1309":1,"1311":7,"1323":3,"1324":2,"1339":7,"1359":8,"1380":2,"1395":3,"1396":4,"1415":5,"1416":3,"1417":3,"1427":1,"1428":1,"1431":3,"1433":1,"1435":2,"1436":42,"1438":8,"1451":1,"1455":3,"1467":1,"1488":2,"1492":1,"1500":1,"1526":1,"1535":1,"1577":3,"1596":1,"1600":1,"1641":1,"1701":1,"1707":1,"1898":1,"1977":2,"2000":1,"2131":1,"2132":1,"2232":1}}],["asserting",{"3":{"0":2,"54":1,"70":1,"250":1,"265":1,"558":1,"573":1,"616":1,"618":1,"627":1,"633":1,"676":1,"691":1,"717":1,"797":1,"827":1,"838":1,"972":1,"1068":1,"1084":2,"1163":1,"1212":1,"1262":1,"1270":1,"1286":2,"1300":4,"1312":1,"1323":2,"1324":2,"1339":2,"1350":1,"1359":7,"1396":1,"1415":2,"1427":1,"1428":1,"1430":1,"1432":1,"1435":1,"1436":51,"1438":4,"1455":1,"1461":1,"1488":1,"1492":4,"1577":1,"1585":1,"1686":1,"2055":1,"2056":1,"2057":1,"2107":1,"2122":1,"2129":1,"2151":1,"2232":2}}],["assertions",{"3":{"0":3,"147":1,"237":1,"531":1,"572":1,"573":1,"574":1,"616":5,"618":2,"621":1,"640":1,"832":1,"861":2,"863":1,"963":1,"967":1,"972":1,"1018":1,"1050":1,"1067":2,"1093":1,"1212":1,"1213":1,"1229":1,"1234":1,"1259":1,"1286":1,"1311":1,"1324":1,"1339":3,"1427":1,"1428":1,"1433":1,"1436":48,"1437":1,"1438":3,"1449":2,"1453":1,"1461":1,"1488":2,"1526":4,"1531":1,"1534":1,"1586":1,"1591":1,"1618":1,"1651":1,"1668":1,"1671":2,"1731":1,"2001":1,"2042":1,"2055":1,"2056":1}}],["assertion",{"0":{"2197":1},"3":{"0":5,"157":1,"218":1,"277":1,"318":1,"348":1,"350":3,"368":1,"526":1,"530":1,"572":2,"590":1,"592":1,"611":1,"618":1,"619":1,"718":1,"861":1,"862":2,"863":1,"914":2,"972":3,"973":1,"974":1,"975":1,"1059":1,"1066":1,"1067":2,"1068":1,"1069":2,"1262":1,"1270":3,"1278":1,"1286":3,"1300":5,"1328":2,"1339":7,"1359":1,"1369":1,"1380":1,"1396":3,"1402":1,"1406":4,"1415":8,"1427":4,"1429":1,"1430":1,"1432":1,"1433":1,"1436":109,"1437":1,"1438":6,"1449":1,"1453":3,"1454":2,"1467":1,"1488":3,"1489":1,"1490":3,"1491":3,"1492":5,"1526":3,"1531":2,"1534":1,"1535":1,"1577":1,"1591":2,"1645":1,"1654":1,"1671":1,"1685":1,"1707":2,"1714":1,"1883":1,"1973":1,"1975":1,"1977":4,"1978":1,"1996":1,"2043":1,"2045":1,"2055":1,"2059":1,"2180":1,"2197":1,"2203":1}}],["assertsomethingwasmeasured",{"2":{"861":1,"863":1},"3":{"861":1,"863":1}}],["asserts",{"3":{"0":3,"70":1,"72":1,"73":1,"74":1,"78":1,"122":2,"127":1,"136":1,"175":2,"180":1,"189":1,"265":2,"302":1,"312":2,"350":2,"352":1,"448":1,"451":1,"459":1,"563":1,"571":1,"572":8,"574":1,"576":1,"577":1,"578":1,"583":3,"585":1,"609":1,"618":3,"633":2,"665":1,"725":2,"749":1,"776":1,"831":2,"861":3,"890":1,"946":2,"955":1,"962":1,"963":1,"972":1,"1018":3,"1020":1,"1034":2,"1037":1,"1067":4,"1068":1,"1091":1,"1212":1,"1214":1,"1236":1,"1237":4,"1247":2,"1270":2,"1271":2,"1286":7,"1300":3,"1301":2,"1309":1,"1311":3,"1312":1,"1323":3,"1324":7,"1326":1,"1339":15,"1359":15,"1365":1,"1369":1,"1380":4,"1395":1,"1396":7,"1402":3,"1405":1,"1408":1,"1415":6,"1416":2,"1417":6,"1427":3,"1430":1,"1431":1,"1433":1,"1435":3,"1436":325,"1438":16,"1444":1,"1449":2,"1451":1,"1455":1,"1463":1,"1467":2,"1476":1,"1484":1,"1487":1,"1488":8,"1489":3,"1490":1,"1491":2,"1492":2,"1524":1,"1526":10,"1531":2,"1577":1,"1591":5,"1671":1,"1672":1,"1707":2,"1731":1,"1817":1,"1825":1,"1826":1,"1842":1,"1889":1,"1902":1,"1929":1,"1930":1,"1977":1,"1978":1,"1979":1,"1993":1,"2000":1,"2001":1,"2013":1,"2031":1,"2036":1,"2041":1,"2043":2,"2045":3,"2055":5,"2057":2,"2063":1,"2075":1,"2079":1,"2098":1,"2104":2,"2131":1,"2133":1,"2138":1,"2178":2,"2197":1,"2232":1}}],["assert",{"2":{"1070":1},"3":{"0":7,"122":1,"134":1,"150":2,"188":1,"353":1,"373":1,"415":1,"449":1,"590":1,"592":1,"614":1,"618":3,"619":1,"626":1,"757":1,"759":1,"776":1,"842":1,"860":1,"861":2,"862":1,"863":1,"891":1,"915":1,"945":1,"952":1,"953":1,"954":1,"955":1,"956":1,"960":1,"972":1,"973":1,"1018":2,"1051":1,"1067":3,"1070":1,"1074":1,"1085":1,"1213":1,"1237":1,"1247":1,"1270":6,"1271":1,"1281":1,"1286":7,"1300":1,"1309":1,"1311":2,"1323":2,"1324":3,"1328":1,"1339":7,"1359":2,"1369":1,"1380":2,"1395":1,"1396":4,"1415":5,"1417":1,"1428":2,"1429":1,"1430":2,"1432":1,"1433":1,"1436":69,"1438":7,"1449":1,"1489":6,"1491":1,"1492":1,"1504":1,"1551":1,"1600":1,"1611":1,"1651":1,"1671":1,"1782":1,"1902":1,"1951":1,"2041":1,"2043":1,"2047":2,"2054":1,"2055":2,"2064":1,"2100":1,"2103":1,"2104":1,"2107":1,"2122":1,"2133":1,"2165":1,"2167":1,"2180":1,"2232":1}}],["assembling",{"3":{"1247":1,"1300":1,"1356":1,"1396":1,"1436":2,"1438":1}}],["assemblies",{"3":{"0":4,"27":1,"41":1,"60":1,"80":2,"109":1,"132":2,"135":2,"265":2,"269":1,"341":1,"413":1,"573":1,"576":1,"583":2,"584":3,"649":3,"651":3,"726":1,"881":2,"884":1,"982":1,"1005":1,"1050":2,"1052":1,"1161":1,"1163":2,"1170":1,"1203":1,"1212":1,"1213":1,"1214":1,"1237":2,"1250":1,"1259":2,"1266":1,"1270":5,"1276":1,"1279":3,"1282":2,"1286":27,"1300":8,"1311":4,"1313":1,"1315":2,"1323":7,"1324":4,"1325":1,"1333":1,"1339":2,"1363":1,"1369":1,"1380":2,"1396":2,"1409":1,"1415":5,"1416":2,"1431":1,"1436":111,"1437":1,"1442":1,"1443":1,"1445":1,"1455":3,"1460":2,"1489":5,"1492":4,"1496":3,"1504":1,"1526":2,"1585":1,"1591":4,"1653":1,"1664":1,"1669":1,"1671":1,"1782":1,"1810":1,"1849":2,"1857":1,"1875":1,"1881":4,"1885":1,"1886":1,"1891":1,"2004":1,"2013":2,"2042":2,"2048":1,"2054":1,"2100":1,"2101":1,"2102":1,"2108":1,"2120":1,"2156":1,"2159":1}}],["assembler",{"3":{"1247":1}}],["assemble",{"3":{"660":1,"724":1,"1276":1,"1300":1,"1309":1,"1313":1,"1324":1,"1402":3,"1640":1,"2077":1,"2087":1}}],["assembled",{"0":{"1262":1,"1466":1,"1821":1},"3":{"0":1,"256":1,"545":1,"585":1,"599":2,"649":1,"727":1,"745":1,"846":1,"861":1,"1017":1,"1021":1,"1107":1,"1240":1,"1247":2,"1271":1,"1284":1,"1286":1,"1300":3,"1309":1,"1311":1,"1323":4,"1339":1,"1350":8,"1353":1,"1359":10,"1366":2,"1368":1,"1369":1,"1395":1,"1396":1,"1407":1,"1410":1,"1415":4,"1416":1,"1423":1,"1427":1,"1436":1,"1445":1,"1466":1,"1467":4,"1492":1,"1496":4,"1577":1,"1585":1,"1987":1}}],["assembles",{"3":{"0":1,"725":1,"1212":1,"1247":2,"1270":1,"1271":2,"1309":1,"1311":1,"1323":2,"1324":3,"1359":3,"1381":1,"1396":2,"1402":1,"1415":1,"1427":1,"1436":4,"2067":1,"2150":1}}],["assemblyfilters",{"3":{"1455":1}}],["assemblyname",{"2":{"1319":1},"3":{"1311":1,"1319":1,"1323":3,"1350":2,"1359":1,"1369":1,"1380":2,"1396":4,"1415":7,"1436":1}}],["assemblyprovider",{"3":{"1286":1,"1369":2,"1396":1}}],["assemblyqualifiedname",{"3":{"1259":1,"1286":1}}],["assemblyinfo",{"2":{"1497":1},"3":{"1209":1,"1497":1}}],["assemblyreference",{"2":{"1319":1},"3":{"1199":16,"1203":16,"1207":48,"1311":14,"1313":1,"1319":4,"1323":46,"1341":3,"1350":12,"1354":2,"1359":7,"1369":11,"1377":2,"1380":8,"1396":36,"1404":2,"1415":46,"1436":1,"1496":3}}],["assembly",{"0":{"1199":1,"1206":1,"1319":1},"2":{"1266":1,"1319":1,"1773":1,"2077":2},"3":{"0":8,"5":1,"24":4,"41":1,"54":1,"59":2,"63":1,"76":2,"80":2,"81":3,"128":1,"133":1,"135":2,"166":1,"290":1,"305":1,"408":1,"451":1,"454":1,"549":1,"564":3,"571":1,"583":9,"585":6,"586":1,"607":1,"609":4,"633":2,"640":1,"648":1,"649":3,"651":2,"684":1,"698":1,"699":1,"725":2,"726":1,"782":1,"844":1,"848":2,"849":4,"922":1,"939":2,"940":1,"954":1,"962":1,"963":1,"971":1,"972":1,"974":1,"980":2,"982":1,"1004":1,"1018":1,"1034":3,"1042":1,"1050":1,"1052":1,"1067":1,"1074":1,"1091":1,"1118":1,"1161":3,"1162":1,"1168":1,"1170":1,"1175":1,"1193":1,"1196":1,"1199":1,"1202":1,"1203":2,"1206":1,"1207":1,"1208":3,"1212":2,"1213":1,"1229":1,"1233":2,"1237":5,"1247":2,"1250":2,"1256":1,"1259":13,"1262":2,"1263":1,"1266":1,"1270":8,"1271":7,"1273":2,"1275":1,"1276":1,"1279":5,"1280":4,"1286":86,"1300":32,"1301":1,"1304":1,"1308":1,"1309":15,"1310":1,"1311":42,"1312":2,"1313":1,"1314":1,"1315":3,"1316":4,"1318":1,"1319":6,"1323":94,"1324":37,"1326":1,"1339":15,"1341":4,"1348":1,"1350":20,"1351":1,"1352":1,"1354":1,"1359":60,"1367":1,"1369":22,"1380":28,"1395":28,"1396":69,"1402":5,"1404":1,"1415":86,"1416":9,"1417":1,"1427":1,"1431":8,"1434":1,"1435":3,"1436":409,"1437":3,"1438":10,"1441":1,"1444":1,"1447":1,"1465":1,"1476":1,"1480":1,"1487":2,"1488":1,"1489":11,"1490":1,"1491":1,"1492":2,"1494":1,"1496":5,"1503":1,"1526":3,"1553":1,"1577":3,"1582":1,"1591":4,"1600":1,"1614":1,"1627":1,"1648":1,"1651":3,"1653":1,"1654":2,"1671":1,"1684":3,"1693":1,"1701":1,"1719":2,"1727":1,"1728":2,"1729":1,"1761":1,"1773":1,"1781":1,"1810":1,"1830":2,"1851":1,"1881":2,"1883":2,"1885":3,"1891":1,"1929":1,"1956":1,"2016":1,"2041":2,"2043":1,"2046":1,"2048":2,"2049":1,"2077":2,"2095":1,"2103":1,"2104":2,"2106":1,"2159":1,"2178":1,"2187":2,"2188":1}}],["assetcachecontrol",{"3":{"1359":1}}],["assetid",{"3":{"0":1,"1116":1,"1357":1,"1467":2,"1631":2}}],["assets",{"3":{"0":5,"186":1,"1116":6,"1117":2,"1300":1,"1311":2,"1318":1,"1324":5,"1342":1,"1346":2,"1347":1,"1348":2,"1350":14,"1357":2,"1359":14,"1362":1,"1369":2,"1380":1,"1389":1,"1393":1,"1395":2,"1416":4,"1434":1,"1436":2,"1437":1,"1438":1,"1459":1,"1467":4,"1479":4,"1480":5,"1482":1,"1599":1,"1631":3,"1640":2,"1666":1,"2110":1,"2127":1,"2150":1}}],["assetlinkspath",{"3":{"1311":1}}],["assetlinks",{"2":{"418":1,"419":1,"424":1,"2121":1},"3":{"0":1,"418":1,"419":1,"420":1,"424":1,"1212":1,"1311":2,"1416":2,"1481":1,"2121":1}}],["asset",{"3":{"0":3,"57":1,"59":1,"189":1,"217":1,"424":1,"426":1,"534":1,"536":1,"681":1,"683":1,"861":1,"945":1,"954":1,"1006":1,"1116":7,"1117":1,"1120":2,"1124":1,"1126":1,"1285":1,"1286":1,"1300":3,"1311":4,"1324":4,"1342":2,"1344":1,"1346":1,"1348":1,"1350":16,"1352":1,"1354":1,"1357":1,"1359":60,"1362":1,"1369":3,"1380":3,"1389":2,"1395":23,"1417":2,"1436":1,"1438":1,"1467":2,"1471":1,"1496":4,"1560":1,"1586":1,"1591":1,"1631":1,"1640":4,"1666":1,"1698":1}}],["as",{"0":{"576":1,"1250":1,"1253":1,"1274":1,"1335":1,"1344":1,"1357":2,"1378":1,"1389":1,"1433":1,"1734":1,"1871":2,"1895":1,"2045":1,"2057":1,"2100":1,"2164":1},"1":{"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"542":1,"543":1,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"550":1,"551":1,"552":1,"561":1,"562":1,"563":1,"564":1,"565":1,"566":1,"567":1,"568":1,"569":1,"570":1,"571":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"578":1,"579":1,"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"613":1,"614":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1,"623":1,"624":1,"625":1,"626":1,"627":1,"628":1,"629":1,"630":1,"654":1,"655":1,"656":1,"657":1,"658":1,"659":1,"660":1,"661":1,"722":1,"723":1,"724":1,"725":1,"726":1,"727":1,"728":1,"729":1,"730":1,"731":1,"732":1,"733":1,"734":1,"735":1,"736":1,"737":1,"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1,"763":1,"764":1,"765":1,"766":1,"767":1,"768":1,"769":1,"770":1,"858":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"865":1,"951":1,"952":1,"953":1,"954":1,"955":1,"956":1,"957":1,"958":1,"959":1,"960":1,"961":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1,"969":1,"970":1,"971":1,"972":1,"973":1,"974":1,"975":1,"976":1,"977":1,"978":1,"979":1,"980":1,"981":1,"982":1,"983":1,"984":1,"1001":1,"1002":1,"1003":1,"1004":1,"1005":1,"1006":1,"1007":1,"1008":1,"1031":1,"1032":1,"1033":1,"1034":1,"1035":1,"1036":1,"1037":1,"1038":1,"1047":1,"1048":1,"1049":1,"1050":1,"1051":1,"1052":1,"1053":1,"1054":1,"1055":1,"1056":2,"1057":2,"1058":2,"1059":2,"1060":2,"1061":2,"1062":2,"1063":2,"1064":1,"1065":1,"1066":1,"1067":1,"1068":1,"1069":1,"1070":1,"1071":1,"1158":1,"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1,"1462":1,"1463":1,"1464":1,"1465":1,"1466":1,"1467":1,"1468":1,"1469":1,"1470":1,"1931":1,"1932":1,"1933":1,"1934":1,"1935":1,"1936":1,"1937":1,"1938":1,"1939":1,"1940":1,"1941":1,"2070":1,"2071":1,"2072":1,"2073":1,"2074":1,"2075":1,"2076":1,"2077":1,"2078":1,"2079":1,"2080":1},"3":{"0":165,"5":1,"11":1,"12":1,"15":1,"17":1,"18":2,"19":1,"24":6,"26":3,"27":1,"31":2,"39":2,"41":1,"47":1,"53":1,"57":3,"58":2,"59":1,"66":2,"68":1,"71":2,"72":2,"73":2,"74":2,"76":1,"77":1,"79":1,"81":2,"86":1,"87":1,"91":1,"92":1,"93":2,"94":1,"95":5,"96":3,"97":1,"98":3,"99":1,"100":2,"101":2,"103":1,"104":1,"107":2,"109":15,"111":1,"115":3,"120":1,"121":3,"122":2,"123":1,"126":3,"127":1,"128":2,"129":1,"130":1,"132":1,"135":11,"136":5,"137":4,"138":4,"139":5,"140":3,"141":1,"142":3,"145":7,"147":2,"155":3,"157":6,"159":1,"160":5,"161":2,"164":1,"167":1,"168":1,"169":1,"170":1,"171":2,"173":1,"174":1,"175":1,"177":1,"178":1,"180":2,"181":2,"186":8,"188":4,"189":1,"195":2,"197":1,"198":1,"200":4,"201":2,"202":6,"203":1,"206":1,"207":1,"209":1,"214":6,"215":1,"216":1,"219":1,"223":1,"225":2,"226":2,"230":6,"231":3,"233":4,"234":3,"235":6,"237":3,"243":8,"244":4,"245":8,"247":1,"248":2,"249":3,"250":1,"252":1,"253":1,"254":2,"255":2,"256":1,"257":2,"258":4,"259":4,"260":2,"264":1,"265":15,"267":2,"268":3,"273":4,"275":1,"279":1,"281":2,"282":1,"283":2,"285":2,"286":1,"290":3,"291":1,"295":1,"296":2,"299":1,"303":8,"304":1,"305":4,"306":1,"308":1,"309":1,"310":2,"313":1,"314":2,"318":12,"319":1,"320":2,"321":3,"322":2,"325":3,"326":2,"329":2,"335":2,"336":1,"337":1,"341":10,"344":1,"345":3,"348":1,"349":1,"350":6,"351":2,"352":1,"353":5,"354":1,"358":3,"359":7,"360":3,"361":2,"362":2,"363":1,"365":3,"366":2,"369":4,"370":2,"371":1,"373":2,"374":2,"375":2,"376":1,"379":1,"381":1,"382":2,"383":1,"384":1,"388":2,"390":4,"392":2,"395":5,"397":5,"399":1,"401":4,"403":1,"404":3,"405":1,"406":2,"407":1,"408":1,"409":5,"411":2,"413":1,"415":3,"418":4,"420":1,"422":2,"423":3,"424":1,"425":2,"426":1,"427":2,"428":2,"434":2,"438":2,"440":2,"442":1,"443":2,"444":1,"447":1,"448":2,"451":1,"453":1,"454":2,"459":6,"461":1,"463":2,"464":1,"466":1,"469":2,"470":2,"471":1,"474":2,"476":1,"477":2,"478":1,"481":2,"484":1,"485":1,"486":3,"487":2,"488":3,"489":3,"490":7,"491":5,"492":5,"493":4,"494":3,"495":2,"497":4,"499":2,"500":1,"501":1,"502":1,"507":3,"512":1,"513":1,"514":2,"516":2,"518":4,"522":2,"523":2,"524":3,"526":2,"528":2,"530":1,"531":1,"534":3,"535":2,"536":8,"537":2,"538":2,"539":3,"540":3,"541":1,"542":1,"543":2,"544":1,"545":4,"547":4,"548":2,"549":10,"550":5,"551":3,"552":1,"555":1,"556":3,"561":1,"562":1,"563":1,"564":6,"565":1,"566":1,"569":1,"570":1,"572":2,"573":4,"575":2,"578":2,"579":1,"582":4,"583":7,"584":2,"585":7,"586":1,"587":1,"591":3,"592":3,"593":1,"597":1,"598":2,"599":9,"600":4,"601":4,"602":3,"604":1,"606":1,"607":6,"608":2,"609":9,"610":2,"611":1,"612":3,"613":1,"615":1,"617":2,"618":3,"619":3,"620":3,"622":1,"623":1,"624":3,"625":1,"626":7,"627":2,"629":1,"631":1,"632":1,"633":6,"634":2,"635":2,"638":2,"640":1,"642":1,"648":1,"649":3,"653":1,"654":1,"655":1,"656":2,"657":9,"658":1,"660":1,"661":1,"665":2,"667":1,"669":1,"670":1,"674":2,"676":4,"682":5,"683":3,"684":2,"688":2,"689":1,"690":3,"691":3,"692":7,"693":1,"694":1,"698":8,"699":2,"702":5,"703":1,"706":1,"707":7,"709":1,"711":1,"715":3,"717":1,"720":3,"722":1,"724":2,"725":10,"727":2,"728":2,"729":1,"730":1,"732":3,"733":3,"734":1,"735":3,"736":1,"737":1,"738":1,"740":1,"741":7,"742":3,"743":6,"744":1,"747":4,"748":4,"749":4,"750":1,"751":1,"755":1,"757":7,"758":2,"761":1,"762":1,"763":1,"764":2,"765":2,"766":2,"768":1,"769":1,"773":3,"774":4,"776":1,"778":1,"782":3,"783":1,"784":4,"785":1,"789":3,"790":10,"791":2,"794":1,"798":1,"799":1,"801":2,"803":2,"804":2,"808":1,"809":2,"810":4,"813":2,"814":1,"815":2,"817":1,"819":5,"820":1,"825":5,"826":1,"827":16,"828":1,"829":4,"831":2,"832":3,"833":1,"834":1,"836":1,"837":7,"838":7,"839":4,"840":2,"842":3,"844":1,"845":3,"846":5,"849":1,"850":1,"854":3,"857":2,"858":1,"859":1,"860":2,"861":7,"863":3,"864":3,"867":1,"868":2,"869":2,"870":5,"871":1,"872":3,"873":3,"875":1,"876":1,"877":1,"879":2,"880":3,"881":10,"882":1,"883":1,"884":2,"888":3,"889":6,"890":2,"892":1,"893":2,"896":1,"897":3,"903":1,"904":4,"905":11,"906":2,"907":5,"908":1,"909":1,"912":3,"914":2,"915":1,"920":1,"922":3,"923":3,"926":10,"927":1,"930":1,"931":1,"933":2,"937":1,"938":2,"939":1,"946":2,"948":3,"951":1,"953":5,"954":2,"955":4,"956":1,"961":1,"964":2,"965":1,"966":3,"968":3,"969":1,"971":1,"972":2,"973":2,"974":2,"975":2,"976":1,"977":1,"979":4,"980":8,"981":2,"982":1,"983":1,"986":1,"987":2,"988":4,"989":1,"990":1,"992":1,"994":2,"995":1,"996":8,"999":1,"1000":1,"1001":1,"1003":1,"1004":4,"1005":1,"1006":1,"1010":1,"1012":6,"1013":1,"1014":4,"1016":1,"1017":3,"1018":8,"1019":2,"1020":1,"1021":1,"1022":1,"1026":2,"1028":1,"1031":1,"1032":2,"1033":2,"1034":3,"1035":1,"1036":3,"1037":1,"1041":2,"1042":4,"1044":1,"1046":1,"1047":1,"1050":10,"1051":6,"1052":4,"1055":1,"1056":2,"1057":1,"1058":1,"1059":7,"1061":2,"1062":1,"1064":1,"1065":4,"1066":2,"1067":8,"1068":3,"1069":2,"1070":1,"1071":1,"1073":2,"1074":2,"1075":2,"1076":2,"1082":1,"1083":2,"1084":1,"1089":2,"1090":1,"1091":11,"1092":2,"1095":1,"1099":1,"1100":4,"1101":1,"1102":2,"1108":4,"1109":1,"1110":1,"1115":2,"1116":11,"1117":2,"1118":2,"1119":2,"1123":2,"1124":6,"1125":1,"1126":1,"1127":1,"1132":2,"1133":4,"1139":1,"1140":3,"1142":4,"1143":1,"1149":1,"1151":1,"1153":1,"1155":2,"1158":1,"1160":1,"1161":7,"1163":1,"1164":1,"1168":6,"1169":1,"1173":1,"1175":3,"1176":1,"1178":2,"1179":1,"1184":6,"1185":2,"1186":2,"1187":1,"1188":2,"1189":1,"1190":3,"1191":1,"1192":1,"1193":1,"1196":2,"1201":1,"1209":1,"1211":1,"1212":50,"1216":2,"1217":1,"1218":1,"1219":1,"1220":2,"1225":2,"1228":1,"1229":38,"1231":6,"1232":3,"1233":4,"1234":4,"1235":1,"1236":2,"1237":76,"1239":7,"1240":1,"1241":4,"1242":2,"1243":5,"1244":3,"1245":1,"1247":112,"1248":1,"1249":2,"1251":1,"1252":1,"1253":4,"1254":1,"1255":3,"1256":3,"1257":1,"1258":1,"1259":95,"1260":1,"1262":1,"1263":9,"1264":1,"1265":5,"1266":2,"1267":2,"1268":3,"1269":4,"1270":175,"1271":31,"1272":2,"1273":8,"1274":4,"1275":4,"1276":9,"1277":3,"1278":6,"1279":1,"1281":6,"1282":3,"1283":4,"1284":2,"1286":453,"1287":5,"1288":2,"1289":4,"1290":8,"1291":1,"1293":5,"1294":1,"1295":1,"1296":2,"1297":6,"1298":1,"1299":2,"1300":362,"1301":59,"1302":1,"1304":6,"1305":2,"1306":1,"1307":2,"1308":3,"1309":131,"1310":29,"1311":254,"1312":41,"1313":3,"1315":5,"1316":4,"1317":2,"1318":12,"1320":6,"1322":1,"1323":264,"1324":502,"1325":2,"1326":4,"1327":1,"1328":5,"1329":1,"1332":7,"1333":6,"1334":4,"1335":2,"1336":2,"1337":7,"1338":4,"1339":212,"1342":8,"1343":8,"1344":3,"1347":6,"1348":1,"1349":6,"1350":230,"1351":2,"1352":7,"1353":7,"1354":3,"1355":3,"1356":2,"1357":7,"1358":10,"1359":811,"1362":4,"1363":1,"1364":2,"1365":3,"1366":5,"1368":5,"1369":57,"1370":1,"1371":1,"1372":1,"1373":2,"1374":1,"1375":3,"1377":2,"1378":3,"1379":6,"1380":103,"1381":1,"1382":3,"1383":2,"1384":2,"1387":1,"1389":5,"1390":3,"1391":6,"1392":2,"1393":2,"1394":1,"1395":434,"1396":484,"1397":2,"1398":2,"1399":4,"1400":5,"1401":1,"1402":145,"1403":1,"1404":1,"1405":2,"1406":3,"1407":4,"1408":4,"1410":1,"1411":3,"1412":3,"1413":2,"1414":3,"1415":248,"1416":49,"1417":203,"1419":1,"1420":1,"1421":6,"1423":2,"1424":2,"1425":4,"1426":1,"1427":56,"1428":1,"1429":1,"1430":6,"1431":12,"1432":5,"1433":10,"1434":1,"1435":4,"1436":650,"1437":3,"1438":34,"1441":13,"1442":7,"1443":4,"1444":5,"1445":3,"1446":1,"1447":3,"1449":1,"1450":4,"1452":1,"1453":7,"1454":5,"1455":30,"1456":6,"1457":4,"1458":8,"1459":10,"1460":4,"1461":8,"1462":4,"1463":1,"1465":12,"1466":2,"1467":77,"1468":1,"1469":2,"1470":5,"1472":4,"1473":6,"1474":12,"1475":1,"1476":13,"1477":3,"1478":4,"1479":3,"1480":2,"1481":2,"1482":2,"1484":1,"1485":3,"1486":3,"1487":3,"1488":19,"1489":10,"1490":5,"1491":1,"1492":23,"1494":2,"1496":33,"1498":1,"1500":6,"1503":2,"1508":2,"1509":3,"1513":1,"1517":2,"1521":1,"1522":1,"1523":1,"1524":5,"1525":1,"1526":24,"1527":2,"1529":1,"1531":3,"1533":1,"1534":6,"1535":1,"1537":1,"1538":1,"1543":1,"1545":1,"1547":2,"1551":2,"1552":1,"1553":3,"1554":2,"1558":2,"1563":1,"1565":1,"1567":1,"1569":1,"1570":2,"1571":4,"1572":1,"1573":1,"1574":1,"1575":3,"1576":2,"1577":33,"1580":1,"1582":2,"1583":2,"1584":1,"1585":7,"1586":3,"1587":1,"1588":1,"1589":3,"1591":11,"1594":2,"1595":3,"1596":8,"1597":1,"1598":3,"1599":5,"1600":2,"1601":1,"1605":1,"1610":1,"1611":6,"1615":1,"1620":1,"1626":2,"1627":4,"1628":1,"1630":5,"1631":25,"1632":5,"1633":1,"1634":2,"1635":1,"1637":4,"1638":5,"1639":20,"1640":8,"1641":21,"1642":1,"1646":2,"1648":3,"1651":8,"1653":2,"1654":3,"1656":6,"1659":1,"1660":1,"1661":1,"1662":3,"1663":1,"1664":10,"1665":3,"1666":3,"1667":3,"1668":4,"1669":1,"1670":5,"1673":5,"1674":2,"1675":3,"1676":1,"1677":2,"1681":1,"1682":1,"1684":1,"1685":8,"1686":10,"1687":1,"1689":2,"1692":2,"1693":2,"1699":2,"1700":1,"1701":2,"1702":5,"1706":1,"1707":2,"1709":1,"1710":1,"1711":1,"1717":1,"1718":1,"1720":2,"1722":1,"1723":3,"1724":1,"1726":1,"1727":5,"1728":4,"1730":1,"1732":2,"1735":1,"1737":1,"1739":1,"1742":1,"1744":1,"1745":1,"1748":5,"1749":7,"1750":1,"1755":1,"1756":1,"1760":2,"1761":1,"1762":1,"1763":1,"1764":4,"1765":9,"1767":8,"1768":2,"1770":1,"1771":1,"1774":1,"1776":1,"1779":1,"1780":1,"1781":1,"1782":1,"1784":5,"1786":1,"1790":1,"1797":1,"1799":3,"1802":3,"1803":1,"1804":2,"1805":4,"1806":2,"1807":3,"1810":5,"1811":1,"1812":1,"1813":2,"1814":2,"1815":7,"1816":1,"1821":2,"1822":1,"1824":1,"1825":3,"1826":2,"1827":2,"1828":1,"1831":1,"1832":1,"1833":2,"1834":3,"1836":2,"1839":1,"1840":1,"1844":1,"1846":1,"1851":6,"1853":2,"1860":2,"1861":1,"1865":2,"1866":1,"1868":4,"1869":1,"1871":3,"1872":1,"1873":2,"1875":1,"1876":1,"1877":6,"1878":2,"1879":1,"1881":1,"1882":1,"1883":5,"1884":2,"1885":1,"1889":2,"1892":1,"1894":1,"1897":1,"1898":3,"1899":1,"1902":4,"1903":2,"1904":1,"1905":1,"1907":1,"1908":8,"1909":3,"1910":5,"1911":3,"1915":1,"1916":3,"1919":4,"1920":1,"1921":1,"1922":2,"1923":5,"1924":2,"1926":1,"1927":4,"1928":1,"1930":3,"1931":3,"1932":1,"1933":2,"1934":1,"1936":1,"1937":2,"1939":1,"1940":3,"1941":5,"1942":1,"1943":1,"1944":2,"1947":2,"1948":2,"1949":2,"1950":3,"1952":1,"1954":3,"1955":2,"1956":1,"1958":1,"1962":1,"1963":1,"1964":5,"1965":1,"1966":1,"1968":2,"1970":2,"1971":3,"1972":2,"1974":1,"1975":1,"1976":1,"1977":2,"1978":2,"1979":3,"1980":2,"1982":3,"1983":1,"1984":2,"1985":2,"1986":1,"1988":1,"1989":3,"1993":1,"1994":5,"1995":2,"1996":4,"1997":8,"1998":1,"1999":4,"2000":8,"2001":2,"2002":1,"2003":1,"2004":1,"2007":1,"2008":2,"2009":1,"2010":2,"2011":3,"2012":2,"2013":1,"2014":1,"2015":1,"2016":1,"2018":1,"2019":1,"2022":1,"2024":3,"2025":1,"2028":1,"2032":3,"2033":1,"2034":7,"2036":1,"2037":3,"2040":1,"2041":2,"2043":3,"2044":3,"2046":3,"2047":5,"2048":4,"2049":2,"2051":3,"2053":1,"2055":2,"2056":1,"2057":4,"2058":1,"2059":3,"2060":1,"2063":1,"2064":5,"2065":2,"2066":1,"2067":2,"2068":1,"2069":1,"2070":2,"2074":1,"2075":3,"2077":1,"2078":2,"2079":1,"2080":2,"2081":2,"2083":3,"2085":4,"2086":3,"2089":1,"2090":1,"2091":1,"2096":2,"2098":1,"2100":2,"2101":1,"2104":1,"2105":2,"2106":1,"2107":3,"2108":3,"2111":1,"2112":1,"2115":1,"2119":1,"2121":1,"2122":2,"2124":2,"2125":1,"2126":6,"2128":3,"2129":1,"2130":1,"2135":4,"2136":1,"2138":7,"2139":1,"2140":1,"2141":1,"2142":3,"2143":1,"2145":2,"2146":2,"2147":1,"2148":1,"2149":2,"2150":4,"2151":1,"2152":1,"2153":2,"2154":1,"2156":6,"2157":2,"2158":5,"2159":1,"2160":3,"2161":6,"2162":3,"2163":1,"2164":1,"2165":1,"2166":5,"2167":2,"2168":5,"2169":4,"2170":1,"2171":2,"2172":4,"2174":1,"2175":2,"2177":2,"2178":3,"2179":4,"2180":4,"2182":1,"2183":4,"2185":3,"2186":1,"2189":4,"2190":4,"2192":5,"2193":1,"2194":1,"2195":1,"2196":1,"2198":1,"2199":4,"2202":2,"2203":5,"2204":1,"2208":1,"2210":1,"2214":3,"2215":2,"2219":1,"2220":2,"2226":2,"2229":1,"2230":3,"2232":53,"2233":2,"2234":1,"2239":3}}],["atroot",{"3":{"1324":3,"1417":2}}],["atom",{"3":{"1311":1}}],["atomicity",{"3":{"120":1,"201":1,"245":1,"248":1,"249":1,"279":1,"990":1,"1042":1,"1043":1,"1044":1,"1251":1,"1259":3,"1270":3,"1275":1,"1301":2,"1309":2,"1318":1,"1324":1,"1350":1,"1359":3,"1380":3,"1406":1,"1415":1,"1572":1,"1822":1,"1835":1,"1852":1,"1915":1,"2092":1,"2096":1,"2185":1}}],["atomically",{"3":{"18":1,"193":1,"341":1,"342":1,"499":1,"1043":1,"1259":3,"1286":1,"1290":1,"1300":1,"1309":1,"1323":2,"1339":1,"1349":1,"1350":1,"1359":1,"1374":1,"1380":2,"1396":7,"1415":2,"1417":2,"1438":1,"1455":1,"1467":1,"1837":1,"1872":1,"1877":1,"1890":1,"2214":1}}],["atomic",{"3":{"0":1,"20":1,"39":1,"43":1,"245":1,"253":1,"279":1,"285":1,"286":3,"497":1,"524":1,"534":1,"535":1,"536":1,"540":1,"708":1,"905":1,"996":1,"1251":1,"1259":1,"1270":3,"1274":1,"1286":3,"1290":1,"1292":1,"1300":4,"1301":6,"1309":1,"1323":5,"1339":1,"1352":1,"1359":7,"1380":4,"1396":4,"1399":1,"1402":1,"1415":4,"1436":1,"1438":1,"1496":1,"1526":1,"1543":1,"1577":2,"1590":1,"1591":2,"1597":1,"1600":2,"1667":2,"1668":1,"1749":2,"1765":3,"1823":1,"1836":1,"1841":1,"1846":1,"2001":3,"2161":1,"2182":1}}],["atop",{"3":{"1212":1}}],["atl",{"3":{"2241":1}}],["atlcloudconf",{"3":{"2240":1}}],["atlanta",{"0":{"2240":1},"1":{"1628":1,"1629":1,"1630":1,"1631":1,"1632":1,"1633":1,"1634":1,"1635":1,"1636":1,"1637":1,"1638":1,"1639":1,"1640":1,"1641":1},"3":{"86":1,"1211":1,"1238":1,"1340":1,"1347":1,"1350":2,"1359":3,"1364":2,"1369":2,"1395":3,"1416":2,"1436":1,"1455":1,"1523":1,"1628":1,"1629":1,"1637":1,"1785":1,"2004":1,"2110":1,"2212":1,"2214":2,"2216":4,"2221":2,"2228":1,"2238":3,"2239":4,"2240":4,"2241":4,"2244":1,"2245":1}}],["atldevcon",{"0":{"1478":1},"2":{"45":1,"1451":1,"1463":1,"1471":1,"1478":2,"1481":1,"1482":1,"2034":1,"2036":1},"3":{"0":4,"45":1,"47":2,"418":1,"420":1,"426":1,"428":1,"429":1,"1286":1,"1300":2,"1311":1,"1359":2,"1395":2,"1416":4,"1441":2,"1446":1,"1451":1,"1463":1,"1466":1,"1467":7,"1469":2,"1470":2,"1471":1,"1473":11,"1474":5,"1475":2,"1478":12,"1481":3,"1482":4,"1483":2,"1484":2,"1976":1,"2034":1,"2036":2,"2240":1}}],["attheceiling",{"3":{"1436":8}}],["attractive",{"3":{"1998":1}}],["attr",{"3":{"1286":1}}],["attributing",{"3":{"1438":1,"1489":1}}],["attributions",{"3":{"1496":2}}],["attributiontags",{"2":{"2177":1},"3":{"1427":1,"2177":1}}],["attribution",{"0":{"1679":1},"3":{"348":2,"418":1,"963":1,"1012":1,"1017":1,"1339":1,"1396":1,"1425":1,"1427":1,"1436":3,"1465":1,"1467":1,"1476":1,"1496":1,"1526":1,"1568":1,"1575":3,"1577":2,"1585":2,"1676":1,"1679":1,"1680":1,"1799":1,"2171":1,"2177":1}}],["attributable",{"3":{"26":1,"175":1,"176":1,"178":1,"827":1,"829":1,"898":1,"1019":1,"1237":1,"1311":1,"1380":1,"1436":1,"1455":1,"1465":1,"1467":3,"1553":1,"1568":1,"1591":1,"1678":1,"1999":1,"2000":1,"2001":1,"2002":2,"2024":1,"2177":1,"2180":1}}],["attributed",{"3":{"175":1,"423":1,"741":1,"799":1,"1010":1,"1161":2,"1279":1,"1286":3,"1309":1,"1337":1,"1339":2,"1359":7,"1396":1,"1415":1,"1425":2,"1427":1,"1436":2,"1496":1,"2177":1}}],["attributeusageattribute",{"3":{"1300":1}}],["attributeusage",{"2":{"160":1,"175":1},"3":{"160":1,"175":1,"1237":3,"1300":2,"1310":2,"1311":3,"1312":1,"1323":2,"1324":2,"2000":1}}],["attributetargets",{"2":{"160":1,"1994":2},"3":{"160":1,"1237":3,"1300":2,"1310":2,"1311":4,"1312":3,"1323":2,"1324":2,"1994":2}}],["attributes",{"0":{"1321":1},"2":{"39":1},"3":{"24":1,"39":1,"135":1,"189":1,"320":1,"350":1,"418":1,"446":1,"448":2,"450":3,"554":1,"556":1,"651":1,"726":1,"814":1,"841":1,"964":1,"965":1,"980":1,"992":1,"1018":1,"1118":2,"1133":1,"1175":1,"1192":2,"1196":1,"1202":2,"1203":6,"1207":18,"1212":1,"1214":1,"1230":2,"1233":1,"1236":3,"1237":7,"1247":1,"1259":3,"1270":1,"1271":1,"1279":1,"1286":9,"1298":1,"1300":11,"1309":3,"1310":4,"1311":18,"1313":1,"1321":2,"1322":1,"1323":1,"1324":10,"1339":2,"1350":7,"1358":1,"1359":5,"1369":2,"1372":1,"1376":1,"1380":9,"1395":8,"1396":3,"1402":2,"1406":1,"1415":7,"1416":2,"1433":1,"1436":32,"1438":2,"1496":1,"1526":1,"1540":1,"1577":2,"1600":1,"1630":3,"1632":1,"1641":1,"1662":1,"1667":1,"1679":1,"1685":1,"1761":1,"1764":1,"1850":1,"1957":1,"1960":1,"1961":1,"1978":1,"1996":3,"2002":1,"2131":3,"2132":3,"2133":1}}],["attribute",{"0":{"1908":1,"1962":1},"1":{"1854":1,"1855":1,"1856":1,"1857":1,"1858":1,"1859":1,"1860":1,"1861":1,"1862":1,"1906":1,"1907":1,"1908":1,"1909":1,"1910":1,"1911":1,"1912":1},"3":{"0":3,"10":2,"24":2,"39":1,"54":2,"121":1,"124":1,"135":1,"136":1,"155":1,"160":2,"166":2,"167":2,"175":2,"185":1,"188":1,"189":4,"257":1,"273":1,"305":1,"318":1,"341":2,"343":1,"418":1,"422":2,"423":1,"556":1,"659":1,"718":1,"725":1,"789":1,"819":1,"849":1,"906":1,"964":2,"965":1,"966":1,"982":1,"1050":4,"1052":1,"1083":1,"1103":1,"1116":2,"1118":1,"1126":1,"1212":3,"1229":3,"1233":1,"1235":1,"1236":2,"1237":31,"1247":3,"1250":1,"1259":9,"1270":3,"1271":1,"1280":1,"1281":2,"1282":3,"1286":24,"1289":1,"1292":1,"1297":1,"1300":36,"1309":10,"1310":7,"1311":28,"1312":10,"1318":1,"1321":1,"1323":27,"1324":21,"1333":1,"1339":5,"1343":1,"1347":1,"1350":20,"1357":2,"1359":42,"1360":1,"1361":1,"1369":2,"1372":2,"1373":2,"1380":25,"1388":1,"1391":1,"1395":14,"1396":28,"1402":4,"1415":19,"1416":5,"1417":1,"1427":1,"1431":1,"1433":1,"1436":77,"1438":6,"1447":2,"1467":2,"1496":1,"1510":1,"1575":2,"1577":4,"1582":1,"1585":2,"1591":1,"1596":1,"1626":1,"1627":3,"1630":17,"1641":2,"1643":1,"1651":1,"1665":1,"1671":1,"1678":1,"1686":1,"1698":1,"1747":1,"1753":1,"1758":1,"1774":2,"1779":1,"1805":1,"1844":1,"1849":1,"1854":3,"1856":5,"1857":1,"1861":1,"1862":3,"1865":1,"1874":2,"1898":1,"1904":1,"1905":1,"1906":3,"1908":2,"1909":1,"1910":2,"1912":1,"1929":5,"1959":1,"1960":2,"1964":2,"1965":1,"1994":2,"1996":1,"2000":8,"2001":5,"2002":3,"2030":1,"2039":1,"2045":1,"2075":1,"2085":1,"2138":1,"2139":1,"2187":2,"2190":1,"2193":1,"2207":1,"2208":1,"2230":1,"2232":2}}],["attacked",{"3":{"1998":1,"2002":1}}],["attackers",{"3":{"1567":1}}],["attacker",{"3":{"31":1,"280":1,"283":5,"353":1,"373":1,"422":1,"427":1,"439":1,"853":1,"906":1,"1124":1,"1212":1,"1286":1,"1288":1,"1292":2,"1300":14,"1311":1,"1323":1,"1324":4,"1339":2,"1347":1,"1359":2,"1396":1,"1402":2,"1408":1,"1415":2,"1416":3,"1417":3,"1435":1,"1436":1,"1438":1,"1467":1,"1897":4,"1900":2,"1901":1,"1902":3,"1981":1,"1999":2,"2001":5,"2124":2,"2141":1}}],["attacks",{"3":{"1324":1,"1436":1}}],["attack",{"0":{"1897":1},"3":{"280":1,"332":1,"508":1,"528":1,"612":1,"1300":1,"1324":1,"1339":1,"1366":1,"1369":1,"1396":2,"1415":1,"1438":1,"1445":1,"1465":1,"1577":1,"1897":2,"1899":2,"1990":1}}],["attachable",{"3":{"1369":1}}],["attachobserverasync",{"3":{"1324":3}}],["attachtenantaccessor",{"3":{"1286":1}}],["attachscopeaccessors",{"3":{"1259":1,"1286":1}}],["attaching",{"3":{"0":1,"180":1,"351":1,"507":1,"827":1,"1184":1,"1212":1,"1259":1,"1278":1,"1286":1,"1300":1,"1311":1,"1324":2,"1339":1,"1359":4,"1395":1,"1415":1,"1438":1}}],["attachments",{"3":{"1117":1}}],["attachment",{"2":{"443":1},"3":{"0":2,"443":1,"725":2,"741":1,"881":1,"1116":2,"1286":3,"1300":1,"1311":2,"1339":1,"1359":1,"1395":1,"1436":1,"1438":1,"1441":1,"1631":1}}],["attachmmcaapplifecycle",{"3":{"0":1,"413":1,"1416":2,"1417":4}}],["attached",{"3":{"0":2,"81":1,"179":1,"180":1,"383":1,"397":1,"598":1,"619":1,"657":1,"797":1,"827":1,"871":1,"896":1,"897":1,"907":1,"915":1,"1050":1,"1051":1,"1092":1,"1184":1,"1223":1,"1229":3,"1259":1,"1281":1,"1286":5,"1297":1,"1300":6,"1311":4,"1323":4,"1324":12,"1339":4,"1350":3,"1359":6,"1369":6,"1380":1,"1395":2,"1396":3,"1400":1,"1402":3,"1415":4,"1416":2,"1417":6,"1436":4,"1438":1,"1465":1,"1467":1,"1479":1,"1488":2,"1944":1,"2002":1,"2064":1,"2121":1,"2180":1,"2193":1}}],["attaches",{"3":{"0":1,"26":1,"42":1,"243":1,"387":1,"402":1,"454":1,"506":1,"507":1,"521":1,"599":1,"640":2,"767":1,"833":1,"885":1,"1104":1,"1183":1,"1184":1,"1253":1,"1271":2,"1286":3,"1297":1,"1300":3,"1307":1,"1311":11,"1312":1,"1323":3,"1324":12,"1326":1,"1328":1,"1337":1,"1338":1,"1339":3,"1350":1,"1359":11,"1369":1,"1378":1,"1379":1,"1383":1,"1395":5,"1396":3,"1402":1,"1406":1,"1414":1,"1415":2,"1416":1,"1417":1,"1436":2,"1467":2,"1589":1,"1596":1,"1906":1,"1922":1,"1933":1,"1977":1,"2000":1,"2154":1}}],["attach",{"3":{"0":1,"166":1,"175":1,"352":1,"599":1,"644":1,"832":2,"883":1,"1271":3,"1286":1,"1300":1,"1311":5,"1324":6,"1326":1,"1327":1,"1339":6,"1350":1,"1359":3,"1380":3,"1395":1,"1402":1,"1414":1,"1415":2,"1416":1,"1417":1,"1765":1,"1950":1,"1978":1,"1979":1,"2142":1}}],["attention",{"3":{"757":1,"1270":1,"1324":2,"1350":1,"1417":1,"1455":1,"2175":1}}],["attend",{"3":{"1359":1,"1630":1,"1637":1,"1638":1,"1641":1}}],["attended",{"3":{"689":1,"691":1,"1117":1}}],["attendee+speaker",{"3":{"1641":1}}],["attendee→403",{"3":{"1611":1}}],["attendeelookup",{"3":{"1396":1}}],["attendeelookupservicetests",{"3":{"1199":1,"1207":4,"1396":3}}],["attendeelookupservice",{"3":{"1199":3,"1203":1,"1207":3,"1396":19}}],["attendeename",{"3":{"1396":1}}],["attendeenotificationrecipientprovidertests",{"2":{"1487":1},"3":{"1199":1,"1207":2,"1438":1,"1487":1}}],["attendeenotificationrecipientprovider",{"2":{"1304":1,"1933":1},"3":{"1199":4,"1203":1,"1207":2,"1304":2,"1309":9,"1415":2,"1438":1,"1933":1}}],["attendeeprofiletests",{"3":{"1199":1,"1207":2,"1491":1}}],["attendeeclaims",{"2":{"1617":1},"3":{"1617":1}}],["attendeeclaimstests",{"3":{"1199":1,"1207":2,"1611":1}}],["attendeecheckedinpointshandlertests",{"3":{"1199":1,"1207":2,"1396":1}}],["attendeecheckedinpointshandler",{"3":{"1199":2,"1203":1,"1207":2,"1259":1,"1396":16}}],["attendeecheckedin",{"2":{"692":1,"694":1},"3":{"195":2,"692":1,"694":1,"1199":13,"1203":1,"1207":2,"1237":2,"1396":15,"1436":5,"1438":3,"1467":1,"1631":2,"1639":2}}],["attendeeauthtests",{"3":{"1199":1,"1207":3,"1491":1}}],["attendeeaccessdeniedtests",{"3":{"1199":2,"1207":4}}],["attendeequestionanswertests",{"3":{"1199":1,"1207":2}}],["attendeequeryservicebase",{"2":{"1415":1},"3":{"1415":2}}],["attendeequeryserviceclient",{"2":{"1415":1},"3":{"1415":2}}],["attendeequeryservicetests",{"3":{"1199":1,"1207":2}}],["attendeequeryservicegrpcadapter",{"2":{"1413":1},"3":{"1199":2,"1203":1,"1207":2,"1413":2,"1415":10}}],["attendeequeryservice",{"2":{"1309":1,"1415":2},"3":{"1199":7,"1203":1,"1207":2,"1309":1,"1413":2,"1415":13}}],["attendeefeedbacktests",{"3":{"1199":1,"1207":2}}],["attendeebookmarkedgecasetests",{"3":{"1496":1}}],["attendeebookmarktests",{"2":{"1611":1},"3":{"1199":2,"1207":4,"1611":1}}],["attendeebadges",{"3":{"1396":1}}],["attendeebadgetests",{"3":{"1199":1,"1207":2,"1396":2,"1438":1}}],["attendeebadgeinvariants",{"3":{"1199":2,"1203":1,"1207":2,"1396":5}}],["attendeebadgeconfiguration",{"3":{"690":1,"1199":1,"1203":1,"1207":2,"1396":11}}],["attendeebadge",{"3":{"690":3,"1199":11,"1203":1,"1207":2,"1396":24,"1438":1}}],["attendeerow",{"3":{"1199":2,"1203":1,"1207":1,"1396":4}}],["attendee",{"0":{"1356":1,"1623":1,"1626":1},"2":{"1621":1,"1626":1},"3":{"0":1,"243":1,"325":1,"350":1,"387":1,"545":1,"585":1,"586":1,"681":2,"683":1,"684":1,"688":1,"689":3,"690":5,"691":2,"692":4,"725":1,"799":1,"831":1,"853":1,"1115":1,"1117":1,"1124":1,"1192":2,"1207":20,"1247":2,"1300":3,"1302":1,"1304":2,"1305":1,"1308":1,"1309":8,"1312":2,"1324":1,"1340":1,"1349":1,"1350":13,"1351":1,"1359":20,"1369":5,"1373":1,"1377":1,"1380":9,"1381":1,"1391":1,"1392":1,"1395":20,"1396":234,"1401":2,"1402":26,"1405":2,"1406":1,"1412":1,"1413":3,"1415":34,"1416":1,"1436":4,"1438":13,"1441":1,"1487":3,"1496":2,"1608":1,"1611":5,"1621":6,"1624":1,"1625":1,"1626":2,"1627":7,"1629":7,"1630":7,"1631":8,"1632":44,"1637":5,"1638":8,"1639":3,"1641":8,"1814":1,"1922":1,"1933":1,"1977":1,"1995":1,"2240":1}}],["attendeesgrpcservicetests",{"3":{"1199":1,"1207":2,"1438":1}}],["attendeesgrpcservice",{"3":{"1199":2,"1203":1,"1207":2,"1413":2,"1415":6}}],["attendeesummary",{"3":{"1199":8,"1203":1,"1207":1,"1396":10}}],["attendeeshareandexporttests",{"3":{"1199":1,"1207":2,"1438":1}}],["attendeesearchfield",{"3":{"1199":2,"1203":1,"1207":1,"1396":4}}],["attendeesearchpanel",{"3":{"556":2,"881":2,"1199":3,"1203":1,"1207":2,"1324":3,"1396":21}}],["attendees",{"3":{"0":1,"224":1,"688":1,"689":1,"690":1,"692":1,"831":1,"832":1,"1116":2,"1124":1,"1207":2,"1309":3,"1350":5,"1359":6,"1367":1,"1377":1,"1380":2,"1392":2,"1395":7,"1396":25,"1397":1,"1402":3,"1415":2,"1438":2,"1626":1,"1627":1,"1629":2,"1630":7,"1631":11,"1632":1,"1635":1,"1636":1,"1637":2,"1638":4,"1639":8,"1640":2,"1641":3,"2110":1,"2216":1,"2232":1,"2238":1,"2239":2,"2240":1,"2241":1}}],["attendancestatsdto",{"3":{"1199":9,"1203":1,"1207":2,"1396":16}}],["attendance",{"2":{"1396":1},"3":{"0":1,"186":1,"689":1,"1150":1,"1192":1,"1203":2,"1207":4,"1343":1,"1350":2,"1359":1,"1396":54,"1415":3,"1438":3,"1487":1,"1496":1,"1625":1,"1627":2,"1629":1,"1631":1}}],["attests",{"3":{"1396":2,"1415":1,"1454":1}}],["attest",{"3":{"374":1,"530":1,"1454":1,"1484":1}}],["attestation",{"2":{"374":1,"1454":1},"3":{"372":1,"374":3,"1454":2,"1577":2}}],["attestations",{"0":{"374":1},"2":{"374":1,"1454":1},"3":{"368":1,"374":1,"1454":1,"1576":1}}],["attested",{"3":{"372":1,"374":1,"1359":1}}],["attempting",{"3":{"1467":1,"1631":1,"1632":3,"1941":1}}],["attempttimeout",{"3":{"1339":4}}],["attemptlifetime",{"3":{"1324":1}}],["attemptacquirecore",{"3":{"1311":2}}],["attemptoutputcaching",{"3":{"1311":1}}],["attempted",{"3":{"21":1,"201":1,"397":1,"409":1,"757":1,"758":1,"1259":2,"1270":2,"1300":1,"1301":2,"1309":1,"1311":1,"1323":2,"1324":6,"1415":1,"1417":2,"1632":3,"2192":1}}],["attemptskey",{"3":{"1300":1,"2000":1}}],["attempts",{"3":{"19":1,"22":1,"23":2,"72":1,"73":1,"282":2,"757":1,"759":1,"827":1,"854":1,"880":1,"881":1,"883":1,"987":1,"988":1,"998":1,"1042":1,"1212":1,"1259":5,"1270":1,"1273":1,"1275":2,"1286":8,"1292":1,"1300":12,"1301":2,"1309":1,"1311":2,"1318":2,"1323":7,"1324":5,"1330":1,"1339":10,"1359":4,"1396":1,"1438":1,"1442":1,"1447":1,"1455":2,"1459":1,"1537":1,"1631":2,"1632":1,"1639":2,"1641":5,"1665":1,"1666":1,"1840":1,"1896":1,"1911":2,"2000":1,"2001":1,"2002":1,"2032":1,"2074":1,"2186":1,"2188":1,"2191":1}}],["attemptunitofworkkey",{"3":{"1359":1}}],["attemptunitofwork",{"2":{"523":1},"3":{"0":1,"523":1,"926":1,"1270":1,"1359":2}}],["attempt",{"2":{"407":1,"1330":1},"3":{"0":7,"19":2,"21":2,"22":1,"24":3,"70":1,"73":3,"100":1,"120":1,"159":1,"199":1,"201":1,"279":1,"281":1,"282":1,"284":1,"286":1,"343":1,"353":2,"397":1,"407":1,"409":1,"434":1,"539":1,"715":1,"727":1,"736":1,"760":1,"813":1,"818":1,"819":1,"821":1,"827":1,"833":2,"849":1,"854":2,"855":1,"881":6,"882":2,"883":1,"920":1,"926":3,"988":6,"990":1,"991":1,"992":1,"996":1,"1018":1,"1019":1,"1042":4,"1043":1,"1045":1,"1059":1,"1099":2,"1212":1,"1229":1,"1256":2,"1258":1,"1259":6,"1265":1,"1270":10,"1274":1,"1278":1,"1286":16,"1289":1,"1292":1,"1294":2,"1295":1,"1300":32,"1304":2,"1309":3,"1311":2,"1312":5,"1317":1,"1323":10,"1324":35,"1330":3,"1339":13,"1352":1,"1355":1,"1359":20,"1366":1,"1369":1,"1378":1,"1380":1,"1389":2,"1395":14,"1396":9,"1402":2,"1408":1,"1413":1,"1415":8,"1417":7,"1427":1,"1435":1,"1436":3,"1438":6,"1443":1,"1455":1,"1457":1,"1492":2,"1496":1,"1547":1,"1577":1,"1600":1,"1631":1,"1638":1,"1641":4,"1664":1,"1668":1,"1765":1,"1767":1,"1840":4,"1841":1,"1843":2,"1933":1,"1976":2,"1998":1,"2001":1,"2006":1,"2030":2,"2032":1,"2165":1,"2167":1,"2182":2,"2188":2,"2190":1,"2192":1,"2198":1}}],["at",{"0":{"1336":1,"1339":1,"1369":1,"1373":1,"1466":1,"1523":1,"1530":1,"1574":1,"1581":1,"1588":1,"1595":1,"1687":1,"1702":1,"1873":1,"1903":1,"1935":2,"2046":1,"2150":1,"2151":1,"2178":1},"1":{"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"356":1,"357":1,"358":1,"359":1,"360":1,"361":1,"362":1,"363":1,"364":1,"365":1,"366":1,"1009":1,"1010":1,"1011":1,"1012":1,"1013":1,"1014":1,"1023":1,"1024":1,"1025":1,"1026":1,"1027":1,"1028":1,"1029":1,"1030":1},"2":{"626":1},"3":{"0":116,"5":1,"6":2,"10":1,"15":2,"17":1,"19":10,"20":1,"21":1,"22":4,"23":2,"24":30,"25":2,"26":4,"27":21,"29":1,"31":5,"32":1,"34":4,"39":8,"41":1,"43":1,"46":2,"53":1,"54":1,"57":3,"58":1,"59":8,"60":1,"61":1,"62":3,"63":1,"66":2,"67":1,"68":1,"69":1,"70":1,"71":4,"72":7,"73":2,"74":1,"76":2,"80":2,"81":5,"85":1,"91":2,"92":1,"93":4,"94":2,"95":6,"96":1,"99":3,"100":3,"102":1,"103":2,"104":1,"107":1,"108":1,"109":31,"110":5,"111":6,"115":7,"117":1,"118":1,"119":1,"121":4,"122":21,"125":2,"126":4,"127":1,"128":1,"130":7,"131":1,"132":2,"133":2,"135":19,"136":3,"137":5,"138":5,"139":7,"140":2,"141":3,"142":6,"145":2,"146":1,"147":3,"148":2,"149":3,"150":10,"155":1,"156":2,"157":2,"158":1,"159":1,"160":6,"161":4,"162":1,"164":1,"166":8,"168":1,"170":10,"173":1,"175":3,"176":1,"177":2,"178":8,"179":8,"180":8,"184":1,"186":10,"189":6,"190":1,"191":1,"193":5,"194":3,"195":2,"198":2,"199":2,"200":8,"201":7,"202":7,"203":2,"206":1,"207":4,"208":1,"209":2,"212":1,"213":1,"214":2,"215":1,"216":1,"218":1,"219":4,"220":2,"224":2,"225":4,"226":2,"228":2,"230":10,"231":3,"234":1,"235":10,"237":3,"238":2,"241":5,"242":2,"243":11,"244":1,"245":3,"246":4,"250":2,"251":3,"252":2,"253":1,"254":4,"255":3,"256":11,"257":11,"258":8,"259":10,"260":7,"261":16,"265":10,"266":1,"273":1,"276":2,"279":1,"280":2,"282":1,"283":2,"284":3,"288":1,"290":4,"291":1,"295":2,"298":2,"299":1,"300":3,"303":2,"305":9,"306":1,"309":1,"310":3,"311":1,"312":3,"313":1,"314":6,"318":8,"319":1,"321":1,"325":4,"326":5,"328":1,"330":8,"331":2,"333":4,"334":1,"335":3,"336":1,"337":1,"341":5,"343":2,"346":1,"349":1,"350":7,"351":2,"352":5,"353":6,"354":2,"356":1,"358":1,"359":9,"360":3,"361":4,"362":1,"364":1,"365":2,"366":2,"368":1,"369":1,"371":1,"373":9,"375":1,"379":1,"380":2,"384":3,"386":1,"387":1,"388":1,"389":1,"390":13,"391":6,"392":1,"393":9,"395":9,"397":26,"398":1,"399":4,"400":6,"401":10,"402":4,"403":8,"405":2,"407":7,"408":3,"409":2,"412":2,"413":2,"414":1,"415":1,"416":1,"418":8,"420":3,"422":1,"423":10,"424":3,"425":5,"426":16,"427":4,"428":27,"429":16,"430":7,"433":1,"434":1,"435":2,"436":1,"441":1,"442":1,"443":1,"444":2,"448":7,"451":1,"453":1,"454":1,"457":1,"459":11,"460":1,"461":3,"463":16,"464":11,"465":5,"466":4,"468":4,"469":1,"470":1,"471":2,"472":1,"475":1,"476":3,"477":1,"478":2,"483":3,"484":1,"486":6,"487":6,"488":4,"489":6,"490":20,"491":16,"492":17,"493":12,"494":1,"495":4,"497":4,"499":11,"500":1,"501":2,"502":1,"506":1,"508":1,"511":1,"512":1,"513":1,"514":1,"516":1,"520":2,"522":15,"523":20,"524":10,"528":2,"529":1,"532":1,"534":1,"535":4,"536":9,"537":2,"538":6,"539":9,"540":4,"543":5,"545":17,"546":1,"547":1,"549":17,"550":1,"551":1,"552":13,"555":2,"556":7,"557":2,"559":1,"563":1,"564":8,"565":1,"568":1,"570":1,"571":1,"572":2,"574":1,"575":1,"576":1,"577":1,"579":1,"583":6,"585":5,"586":2,"587":1,"590":1,"591":8,"594":3,"595":1,"598":2,"599":10,"600":1,"601":5,"602":8,"603":6,"604":6,"605":1,"607":1,"608":4,"609":48,"611":2,"612":8,"613":2,"617":1,"618":17,"619":1,"620":1,"622":1,"625":1,"626":11,"627":2,"628":4,"629":1,"631":4,"633":8,"635":3,"636":2,"638":1,"640":26,"641":2,"642":2,"643":1,"644":1,"645":1,"648":1,"649":10,"651":1,"652":1,"656":2,"657":15,"658":3,"664":1,"665":13,"666":2,"667":1,"668":7,"673":3,"674":21,"675":3,"676":8,"678":1,"682":4,"683":1,"684":5,"689":1,"690":13,"691":3,"692":5,"693":1,"694":1,"696":3,"697":3,"698":14,"699":2,"700":3,"702":3,"703":2,"706":1,"707":2,"708":2,"709":4,"711":1,"713":1,"714":1,"715":6,"716":2,"717":4,"719":4,"720":1,"721":1,"724":1,"725":3,"728":1,"729":2,"732":4,"733":9,"735":1,"740":6,"741":16,"743":9,"744":3,"745":1,"749":10,"751":2,"752":2,"753":2,"757":8,"758":1,"760":5,"765":3,"766":7,"767":3,"768":2,"769":1,"773":1,"774":5,"776":1,"782":6,"789":5,"790":10,"791":2,"792":3,"793":6,"794":1,"795":1,"797":3,"798":1,"799":4,"800":3,"801":1,"803":2,"804":2,"805":1,"809":2,"810":5,"812":3,"814":1,"815":2,"818":2,"819":10,"820":1,"821":5,"822":2,"823":1,"825":2,"826":5,"827":43,"828":2,"829":4,"830":9,"831":5,"832":13,"833":3,"837":3,"838":12,"840":2,"844":1,"846":4,"847":2,"848":2,"849":3,"850":6,"853":4,"854":3,"855":1,"857":2,"860":2,"861":15,"862":1,"863":3,"865":1,"867":3,"869":1,"870":3,"871":2,"872":2,"873":2,"874":1,"875":3,"876":2,"881":18,"883":4,"884":2,"888":1,"889":6,"891":4,"893":1,"896":2,"897":17,"898":2,"900":1,"904":1,"905":61,"906":33,"907":2,"908":1,"913":8,"914":17,"915":5,"916":3,"917":1,"918":1,"920":1,"921":1,"922":1,"923":2,"924":2,"925":1,"926":11,"930":2,"931":14,"933":2,"937":1,"938":1,"940":3,"942":1,"945":2,"946":10,"947":1,"948":4,"949":2,"950":1,"952":2,"954":1,"956":1,"958":1,"959":2,"960":1,"963":1,"964":10,"965":1,"966":3,"971":3,"972":11,"974":1,"979":4,"980":14,"981":1,"982":2,"984":1,"987":2,"988":1,"990":2,"991":1,"995":5,"996":8,"997":1,"998":3,"1000":1,"1004":9,"1005":3,"1006":2,"1008":1,"1009":1,"1012":9,"1014":3,"1016":1,"1017":4,"1018":44,"1019":5,"1020":5,"1023":1,"1026":6,"1027":2,"1028":4,"1033":3,"1034":3,"1037":1,"1042":6,"1044":4,"1045":2,"1048":2,"1049":1,"1050":2,"1051":1,"1052":3,"1054":2,"1058":1,"1059":7,"1060":1,"1062":2,"1066":1,"1067":6,"1068":1,"1069":3,"1074":6,"1075":12,"1077":1,"1078":2,"1082":6,"1083":2,"1084":2,"1086":2,"1087":1,"1089":2,"1090":6,"1091":37,"1092":3,"1093":4,"1094":1,"1095":4,"1099":2,"1100":27,"1101":2,"1102":3,"1103":4,"1107":2,"1108":6,"1109":1,"1110":1,"1112":1,"1115":1,"1116":19,"1118":1,"1123":1,"1124":13,"1125":3,"1126":4,"1129":1,"1132":3,"1133":7,"1134":3,"1135":5,"1136":1,"1140":7,"1142":1,"1146":3,"1147":1,"1150":5,"1156":2,"1160":4,"1161":1,"1162":1,"1163":1,"1168":9,"1169":2,"1173":2,"1174":1,"1175":4,"1176":2,"1177":1,"1182":2,"1184":4,"1185":1,"1186":1,"1187":1,"1192":1,"1194":1,"1202":1,"1203":1,"1212":28,"1213":2,"1214":3,"1215":1,"1216":2,"1220":3,"1221":1,"1222":2,"1225":2,"1227":1,"1228":3,"1229":31,"1231":8,"1232":6,"1233":6,"1234":6,"1236":5,"1237":72,"1238":2,"1239":7,"1240":13,"1241":27,"1242":16,"1243":8,"1244":7,"1246":4,"1247":114,"1248":2,"1249":1,"1251":1,"1252":2,"1253":2,"1254":3,"1255":2,"1256":4,"1257":7,"1258":2,"1259":126,"1260":1,"1261":2,"1262":6,"1263":10,"1264":15,"1265":6,"1266":1,"1267":4,"1268":3,"1269":4,"1270":178,"1271":48,"1273":26,"1274":10,"1275":10,"1276":3,"1277":12,"1278":12,"1279":10,"1280":1,"1281":10,"1282":9,"1283":2,"1284":7,"1285":4,"1286":465,"1288":2,"1289":2,"1290":2,"1291":3,"1292":3,"1293":1,"1294":2,"1297":8,"1298":3,"1300":302,"1301":62,"1302":5,"1304":2,"1305":1,"1306":1,"1307":2,"1309":86,"1310":34,"1311":383,"1312":31,"1313":1,"1314":5,"1315":3,"1316":6,"1317":4,"1318":7,"1320":7,"1322":1,"1323":244,"1324":375,"1325":2,"1326":10,"1327":5,"1328":3,"1329":1,"1330":8,"1331":3,"1332":8,"1333":15,"1334":6,"1335":4,"1336":5,"1337":4,"1338":12,"1339":215,"1341":1,"1342":9,"1343":12,"1344":13,"1345":4,"1346":1,"1347":5,"1348":7,"1349":4,"1350":214,"1351":1,"1352":9,"1353":7,"1354":7,"1355":6,"1356":2,"1357":6,"1358":10,"1359":670,"1360":1,"1362":11,"1363":3,"1364":2,"1365":1,"1366":4,"1368":1,"1369":79,"1371":3,"1372":1,"1373":8,"1374":5,"1375":2,"1376":2,"1377":2,"1378":1,"1379":5,"1380":138,"1382":6,"1383":12,"1384":5,"1385":4,"1386":2,"1387":13,"1388":6,"1389":17,"1390":8,"1391":15,"1392":10,"1393":9,"1394":2,"1395":321,"1396":436,"1397":1,"1398":7,"1399":5,"1400":7,"1401":3,"1402":173,"1404":6,"1405":4,"1406":11,"1407":1,"1408":1,"1409":9,"1410":6,"1411":3,"1412":1,"1413":6,"1414":2,"1415":221,"1416":63,"1417":146,"1419":7,"1420":4,"1421":5,"1422":1,"1423":1,"1424":3,"1425":3,"1427":33,"1429":17,"1430":5,"1431":20,"1432":4,"1433":13,"1434":5,"1435":4,"1436":545,"1437":2,"1438":54,"1439":2,"1440":2,"1441":22,"1442":8,"1443":19,"1444":6,"1445":3,"1446":3,"1447":20,"1448":1,"1449":4,"1450":2,"1451":1,"1452":2,"1453":8,"1454":8,"1455":28,"1456":5,"1457":5,"1458":4,"1459":2,"1460":11,"1461":2,"1463":2,"1464":2,"1465":4,"1466":4,"1467":92,"1468":3,"1469":2,"1470":1,"1472":2,"1473":6,"1474":8,"1475":10,"1476":12,"1477":4,"1478":4,"1479":2,"1480":5,"1481":2,"1482":2,"1483":1,"1484":1,"1486":13,"1487":1,"1488":29,"1489":15,"1490":17,"1491":7,"1492":30,"1494":1,"1496":64,"1497":2,"1498":1,"1499":1,"1500":6,"1503":1,"1504":1,"1508":1,"1509":1,"1510":1,"1513":1,"1517":1,"1522":2,"1523":1,"1524":6,"1525":5,"1526":90,"1527":5,"1529":1,"1530":4,"1531":14,"1532":4,"1534":19,"1535":5,"1537":2,"1540":1,"1544":2,"1546":2,"1547":1,"1548":2,"1549":1,"1550":1,"1551":2,"1552":1,"1553":1,"1554":1,"1556":1,"1565":1,"1566":1,"1568":1,"1570":1,"1572":1,"1573":2,"1574":5,"1575":3,"1576":2,"1577":71,"1578":7,"1580":1,"1581":1,"1582":15,"1583":7,"1584":3,"1585":12,"1586":22,"1587":2,"1588":2,"1589":3,"1590":2,"1591":102,"1592":2,"1594":1,"1596":15,"1597":15,"1598":4,"1599":12,"1600":12,"1611":1,"1614":1,"1621":1,"1626":2,"1627":9,"1630":5,"1631":12,"1632":5,"1635":1,"1637":2,"1638":5,"1639":4,"1640":1,"1641":12,"1646":4,"1649":2,"1651":4,"1652":2,"1653":7,"1654":1,"1655":1,"1656":2,"1659":1,"1660":2,"1661":4,"1662":1,"1663":1,"1664":2,"1665":4,"1666":1,"1668":4,"1669":3,"1670":5,"1671":1,"1672":3,"1673":4,"1675":1,"1677":1,"1678":1,"1683":1,"1684":3,"1685":7,"1686":10,"1687":1,"1689":3,"1690":2,"1693":2,"1696":1,"1698":1,"1699":1,"1700":3,"1701":1,"1702":1,"1705":1,"1707":1,"1708":1,"1719":2,"1720":1,"1721":2,"1722":1,"1724":1,"1727":7,"1728":3,"1729":4,"1731":2,"1738":1,"1740":1,"1747":1,"1748":5,"1749":3,"1750":1,"1755":1,"1757":1,"1758":1,"1760":3,"1761":3,"1764":4,"1765":10,"1767":6,"1769":3,"1776":8,"1777":1,"1780":1,"1781":1,"1782":2,"1783":1,"1784":3,"1788":1,"1789":1,"1790":2,"1791":1,"1793":1,"1794":3,"1795":1,"1796":4,"1797":3,"1799":3,"1800":1,"1803":1,"1804":2,"1805":4,"1806":1,"1807":2,"1810":7,"1811":1,"1813":1,"1814":1,"1815":9,"1817":1,"1818":2,"1820":1,"1821":4,"1824":1,"1825":2,"1826":4,"1827":2,"1829":3,"1830":1,"1831":1,"1832":2,"1833":2,"1834":2,"1835":1,"1837":1,"1839":2,"1840":1,"1841":2,"1842":4,"1843":2,"1845":1,"1846":1,"1848":3,"1849":3,"1851":3,"1852":2,"1854":3,"1856":2,"1857":1,"1858":1,"1862":1,"1864":1,"1865":3,"1866":1,"1867":1,"1868":1,"1869":2,"1874":1,"1876":1,"1877":2,"1879":1,"1882":1,"1884":4,"1885":2,"1886":3,"1888":1,"1890":2,"1891":2,"1892":2,"1893":1,"1894":1,"1895":3,"1896":1,"1899":2,"1900":1,"1902":4,"1903":2,"1905":4,"1908":4,"1909":3,"1910":2,"1912":4,"1914":1,"1915":2,"1917":2,"1918":1,"1919":1,"1920":2,"1922":2,"1923":3,"1924":2,"1928":1,"1929":3,"1933":1,"1934":2,"1935":2,"1936":1,"1937":1,"1938":1,"1939":1,"1940":1,"1941":2,"1942":2,"1943":1,"1944":3,"1946":1,"1947":2,"1948":5,"1949":1,"1950":4,"1951":2,"1952":2,"1953":1,"1954":2,"1955":2,"1956":4,"1959":2,"1960":1,"1962":2,"1963":2,"1964":1,"1966":1,"1967":1,"1968":2,"1970":4,"1971":3,"1972":1,"1973":2,"1975":5,"1977":2,"1978":2,"1979":2,"1982":10,"1983":1,"1984":1,"1988":4,"1990":1,"1992":3,"1994":6,"1995":10,"1997":1,"1998":3,"1999":1,"2000":13,"2001":4,"2002":2,"2003":1,"2004":1,"2005":1,"2007":2,"2008":1,"2010":3,"2011":1,"2012":6,"2013":1,"2014":4,"2016":1,"2019":1,"2024":6,"2026":1,"2027":1,"2029":3,"2030":2,"2031":1,"2032":5,"2033":2,"2034":3,"2036":1,"2040":1,"2041":1,"2042":1,"2043":4,"2044":4,"2046":4,"2047":2,"2048":3,"2049":2,"2050":3,"2051":2,"2054":1,"2055":2,"2057":2,"2058":3,"2059":3,"2062":1,"2063":5,"2064":1,"2066":8,"2067":1,"2069":1,"2070":2,"2071":1,"2072":1,"2073":1,"2075":1,"2077":2,"2080":2,"2082":2,"2083":2,"2085":3,"2086":7,"2089":1,"2090":1,"2091":1,"2093":1,"2095":2,"2097":2,"2098":1,"2099":2,"2100":2,"2102":1,"2106":1,"2108":1,"2109":1,"2111":3,"2112":2,"2114":3,"2115":3,"2116":1,"2118":5,"2120":2,"2121":1,"2123":2,"2126":2,"2127":1,"2128":3,"2131":1,"2134":3,"2135":2,"2137":2,"2138":4,"2139":6,"2140":1,"2141":2,"2142":5,"2143":1,"2144":1,"2145":3,"2147":3,"2148":1,"2149":2,"2150":6,"2151":2,"2153":2,"2155":1,"2156":12,"2157":6,"2158":23,"2159":3,"2160":1,"2161":1,"2162":5,"2163":2,"2164":5,"2165":1,"2166":11,"2167":3,"2168":7,"2169":2,"2171":4,"2172":6,"2173":3,"2174":2,"2175":5,"2177":1,"2178":2,"2182":3,"2188":1,"2189":3,"2192":5,"2193":1,"2194":1,"2195":3,"2196":4,"2197":3,"2199":3,"2200":2,"2201":3,"2202":2,"2204":2,"2208":1,"2211":1,"2212":1,"2214":2,"2216":1,"2220":1,"2221":2,"2227":2,"2228":1,"2230":4,"2232":22,"2234":1,"2242":1,"2244":1}}],["angular",{"3":{"2219":1,"2220":5}}],["angles",{"3":{"1359":1,"1436":1}}],["anglesharp",{"2":{"952":1,"956":1,"958":1,"959":1},"3":{"0":1,"952":1,"954":1,"956":1,"958":2,"959":1,"1436":2,"2232":1}}],["angle",{"3":{"1018":2,"1020":1,"1161":1,"1237":1,"1249":1,"1300":1,"1311":2,"1312":1,"1366":1,"1395":1,"1436":8,"1526":1,"2121":1}}],["anemic",{"1":{"1808":1,"1809":1,"1810":1,"1811":1,"1812":1},"3":{"1539":1,"1541":1,"1577":1,"1779":1,"1807":1,"1808":2,"1810":1,"1811":1,"1812":2,"1828":1,"1834":1,"2206":1}}],["anupcasterwhosesourceisanotherupcasterstarget",{"3":{"1436":1}}],["anundecoratedendpointthatisallowlisted",{"3":{"1436":3}}],["aninheritedattributeonthederivedcontroller",{"3":{"1436":3}}],["animates",{"3":{"1417":1}}],["animated",{"3":{"1323":1,"1438":1}}],["animation",{"3":{"1359":1,"1433":1,"1436":1}}],["anr",{"3":{"1416":1,"1417":1}}],["anabstracthandlerbesideitscontract",{"3":{"1436":3}}],["anabstracthandleroveragenericcontract",{"3":{"1436":3}}],["anabstracthandlerstrandedfromitscontract",{"3":{"1436":3}}],["anaemic",{"3":{"1359":1}}],["anatomy",{"0":{"1352":1}}],["analogous",{"3":{"1323":1}}],["analogue",{"3":{"265":2,"1324":2,"1339":1,"1395":1,"1402":1,"1417":3,"1436":2,"1938":1}}],["analog",{"3":{"135":1,"1707":1,"2220":1}}],["analyser",{"3":{"1436":1}}],["analyses",{"3":{"1350":3,"1601":1}}],["analysismode=all",{"3":{"869":1,"1445":1,"1577":1}}],["analysis",{"1":{"1745":1,"1746":1,"1747":1,"1748":1,"1749":1,"1750":1,"1751":1,"1752":1,"1753":1,"1754":1,"1755":1},"3":{"0":2,"160":1,"360":1,"546":1,"1033":1,"1049":1,"1350":11,"1380":1,"1395":3,"1396":2,"1417":1,"1436":3,"1453":1,"1467":1,"1496":1,"1566":1,"1577":1,"1586":1,"1603":1,"1639":1,"1679":1,"1745":1,"1755":1,"1815":1,"2219":1}}],["analyze",{"3":{"1359":3}}],["analyzed",{"3":{"1247":1,"1627":1}}],["analyzes",{"3":{"1239":1,"1247":1,"1347":1,"1436":1}}],["analyzers",{"2":{"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"495":1,"2089":1},"3":{"0":1,"138":1,"481":1,"483":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":2,"495":1,"633":1,"982":2,"1170":1,"1213":4,"1214":1,"1229":1,"1237":2,"1247":2,"1286":1,"1309":1,"1359":2,"1395":1,"1396":1,"1453":2,"1524":1,"1526":2,"1531":1,"1537":1,"1552":2,"1554":1,"1570":1,"1572":1,"1577":2,"1586":1,"1591":4,"1596":2,"1597":1,"1649":1,"1654":1,"1657":1,"1661":1,"1673":1,"1683":1,"1685":1,"1696":1,"1704":1,"1719":1,"1726":1,"1781":1,"1797":1,"1804":1,"1903":1,"1905":1,"2089":1,"2131":1}}],["analyzer",{"2":{"135":1,"138":1,"1526":1},"3":{"0":3,"135":5,"138":1,"139":1,"140":1,"142":2,"265":1,"454":1,"482":2,"484":2,"486":1,"490":2,"491":2,"492":2,"493":2,"494":1,"497":2,"502":1,"558":1,"591":1,"631":2,"633":4,"776":1,"801":1,"869":1,"899":1,"980":3,"981":1,"1004":1,"1102":1,"1108":1,"1213":1,"1229":1,"1237":2,"1247":1,"1270":1,"1286":2,"1300":6,"1309":1,"1311":4,"1312":3,"1323":4,"1324":5,"1339":7,"1359":3,"1369":1,"1373":1,"1395":2,"1396":2,"1402":1,"1416":3,"1417":3,"1436":6,"1441":1,"1445":1,"1453":2,"1455":1,"1488":1,"1492":1,"1526":1,"1577":3,"1582":1,"1595":1,"1596":1,"1673":3,"1688":1,"1689":1,"1727":1,"1731":1,"1825":2,"1897":1,"2001":1,"2086":1,"2089":2,"2232":1}}],["analytical",{"3":{"0":1,"1012":1,"1359":2,"1395":2,"1526":2,"1545":1,"1577":1}}],["analytics",{"0":{"1359":1},"2":{"1465":1},"3":{"0":2,"395":1,"601":1,"604":1,"609":4,"718":1,"768":1,"914":1,"974":1,"1192":1,"1202":1,"1203":1,"1339":1,"1350":1,"1351":1,"1359":4,"1436":1,"1447":1,"1455":1,"1465":6,"1467":7,"1474":1,"1476":1,"1525":1,"1526":1,"1534":2,"1545":1,"1591":1,"1611":2,"1621":1,"1625":1,"1630":1,"1634":2,"1638":1,"1641":3,"1670":1,"1677":2,"1678":1,"1685":1,"1835":1,"2158":1,"2160":1,"2219":1,"2220":1,"2221":1,"2232":1}}],["ansi",{"3":{"741":1,"1311":2}}],["answerid",{"3":{"1359":2,"1395":6,"1396":1}}],["answering",{"3":{"0":4,"72":1,"99":1,"157":1,"234":1,"237":1,"284":1,"342":1,"353":3,"698":1,"735":1,"758":1,"790":1,"826":1,"827":1,"879":1,"881":1,"906":1,"1075":1,"1099":1,"1237":2,"1270":1,"1286":4,"1293":1,"1300":3,"1309":1,"1311":4,"1323":2,"1324":3,"1328":1,"1339":3,"1350":2,"1359":4,"1373":1,"1378":1,"1380":4,"1395":2,"1396":4,"1415":2,"1417":2,"1418":1,"1436":1,"1441":1,"1474":1,"1476":1,"1526":1,"1600":1,"1670":1,"1795":1,"1909":1,"2170":1,"2175":1}}],["answervaluemaxlength",{"3":{"1350":4,"1359":2,"1369":3,"1396":5}}],["answervalue",{"3":{"1350":23,"1359":39,"1369":3,"1380":16,"1396":5,"1630":3,"1631":2,"1632":2,"1635":3,"1639":1,"1640":2}}],["answerable",{"3":{"39":1,"402":1,"498":1,"1237":1,"1286":2,"1415":1,"1417":1,"1764":1}}],["answered",{"3":{"0":3,"109":1,"126":1,"176":1,"243":1,"286":1,"341":1,"399":1,"639":1,"690":1,"698":1,"741":1,"743":2,"757":1,"759":1,"809":1,"818":1,"854":1,"857":1,"882":1,"896":1,"901":1,"903":1,"905":1,"907":1,"922":1,"930":1,"996":2,"1049":1,"1052":1,"1055":1,"1066":1,"1093":1,"1142":1,"1145":1,"1153":1,"1184":4,"1263":1,"1270":1,"1286":2,"1290":1,"1300":12,"1301":4,"1311":9,"1313":1,"1320":1,"1324":18,"1328":1,"1337":1,"1339":2,"1350":6,"1359":33,"1380":6,"1387":1,"1395":10,"1396":21,"1397":1,"1401":1,"1402":21,"1408":1,"1415":3,"1417":2,"1427":1,"1430":1,"1436":3,"1441":1,"1455":1,"1526":1,"1534":1,"1630":1,"1632":3,"1638":1,"1641":1,"1748":1,"1765":1,"1810":1,"1815":1,"1821":1,"1851":1,"1857":1,"1912":1,"1916":1,"1933":1,"1984":1,"1992":1}}],["answer",{"0":{"93":1,"1423":1,"1790":1,"1805":1,"1810":1,"1815":1,"1849":1,"1865":1,"1871":1,"1889":1,"1895":1,"1902":1,"1927":1,"1944":1,"1962":1,"1968":1,"1975":1,"1982":1,"1988":1,"1994":1,"2000":1,"2063":1,"2083":1,"2117":1,"2126":1,"2131":1,"2136":1,"2142":1,"2149":1,"2156":1,"2163":1,"2172":1,"2184":1,"2196":1},"2":{"1335":1},"3":{"0":6,"26":1,"52":1,"81":1,"93":2,"94":2,"101":1,"126":1,"146":1,"166":2,"185":1,"186":1,"194":1,"202":1,"212":1,"235":2,"245":1,"265":2,"283":1,"284":1,"301":1,"325":1,"340":1,"342":2,"343":1,"344":1,"365":2,"390":1,"391":1,"392":1,"396":1,"434":1,"435":1,"497":1,"535":1,"536":1,"537":1,"539":1,"544":1,"573":2,"574":1,"577":1,"582":1,"583":1,"625":2,"673":1,"688":1,"689":1,"690":5,"693":2,"697":1,"706":1,"714":3,"717":3,"724":1,"725":1,"726":3,"740":1,"741":2,"742":1,"743":1,"756":1,"767":1,"773":1,"781":1,"783":2,"809":2,"813":1,"818":1,"821":1,"827":4,"829":1,"832":1,"833":1,"837":1,"896":2,"898":2,"905":1,"921":1,"926":2,"942":1,"946":1,"947":1,"953":1,"955":1,"963":1,"965":1,"995":1,"996":1,"1016":1,"1018":3,"1019":2,"1021":2,"1025":1,"1026":1,"1028":1,"1035":1,"1041":1,"1043":2,"1049":1,"1066":3,"1074":1,"1089":1,"1091":2,"1092":1,"1093":4,"1115":1,"1117":2,"1123":1,"1124":1,"1126":1,"1132":1,"1153":1,"1154":1,"1175":2,"1177":1,"1178":1,"1220":1,"1222":1,"1228":1,"1229":1,"1232":1,"1235":1,"1237":4,"1239":1,"1247":5,"1248":3,"1250":1,"1253":2,"1259":5,"1263":2,"1265":1,"1267":1,"1270":18,"1271":6,"1273":1,"1276":1,"1280":1,"1286":33,"1296":1,"1300":25,"1301":2,"1307":1,"1308":1,"1309":5,"1310":1,"1311":14,"1312":6,"1313":1,"1318":2,"1320":1,"1323":14,"1324":49,"1328":1,"1331":1,"1332":1,"1335":1,"1337":2,"1338":1,"1339":25,"1340":1,"1344":1,"1346":1,"1348":1,"1349":3,"1350":57,"1351":1,"1352":5,"1353":1,"1355":5,"1357":2,"1359":241,"1360":1,"1362":1,"1366":5,"1369":12,"1372":8,"1373":4,"1374":3,"1380":42,"1382":1,"1388":1,"1395":36,"1396":59,"1402":12,"1405":1,"1406":2,"1408":2,"1409":2,"1414":1,"1415":18,"1417":23,"1418":3,"1422":1,"1423":7,"1424":2,"1426":1,"1427":18,"1431":1,"1435":4,"1436":22,"1438":10,"1441":1,"1447":2,"1448":1,"1449":3,"1455":4,"1456":1,"1465":1,"1467":1,"1476":1,"1482":1,"1487":2,"1492":3,"1496":1,"1526":3,"1577":1,"1585":1,"1629":1,"1630":3,"1631":12,"1632":14,"1635":7,"1638":4,"1639":7,"1640":4,"1653":1,"1656":1,"1667":1,"1670":1,"1672":1,"1673":1,"1681":1,"1702":1,"1708":1,"1718":1,"1720":1,"1722":1,"1727":1,"1728":1,"1729":1,"1790":2,"1815":1,"1819":1,"1821":1,"1839":1,"1847":1,"1854":1,"1859":1,"1870":1,"1874":1,"1877":1,"1888":1,"1891":1,"1892":1,"1893":2,"1902":2,"1905":1,"1908":1,"1909":1,"1910":1,"1911":1,"1912":2,"1926":1,"1933":1,"1934":1,"1940":1,"1941":1,"1947":2,"1948":2,"1954":2,"1963":1,"1967":1,"1970":1,"1972":1,"1980":1,"1981":1,"1982":2,"1985":1,"1992":1,"1996":1,"1997":2,"2000":1,"2001":1,"2002":1,"2024":1,"2035":1,"2036":1,"2055":1,"2063":1,"2067":1,"2069":1,"2078":1,"2143":1,"2144":1,"2154":1,"2159":2,"2160":1,"2163":1,"2167":1,"2168":1,"2170":2,"2175":2,"2177":1,"2179":2,"2181":1,"2183":1,"2185":1,"2191":1,"2194":1}}],["answers",{"0":{"1280":1},"3":{"0":13,"24":1,"40":2,"41":1,"81":2,"92":1,"94":1,"96":1,"97":1,"109":1,"110":1,"111":1,"235":2,"236":3,"317":1,"318":1,"320":1,"324":1,"326":1,"333":2,"340":1,"343":1,"344":1,"353":1,"369":1,"499":1,"507":1,"524":1,"545":1,"549":1,"571":2,"583":1,"585":3,"590":1,"650":1,"652":1,"714":1,"725":1,"727":1,"732":1,"741":1,"743":1,"749":1,"767":1,"818":1,"827":5,"828":1,"853":1,"860":1,"876":1,"881":3,"905":3,"907":1,"922":1,"925":1,"926":2,"932":1,"938":1,"946":1,"948":1,"953":1,"956":2,"963":1,"966":1,"998":1,"1016":1,"1018":5,"1020":2,"1021":1,"1022":2,"1024":1,"1028":1,"1034":2,"1041":1,"1059":3,"1066":1,"1067":3,"1082":1,"1091":2,"1092":1,"1099":1,"1103":2,"1116":1,"1132":1,"1142":3,"1175":1,"1176":1,"1178":1,"1183":1,"1184":2,"1185":1,"1228":1,"1229":5,"1231":1,"1237":3,"1238":1,"1247":2,"1250":1,"1256":1,"1259":3,"1265":1,"1270":10,"1271":7,"1272":1,"1279":1,"1283":1,"1286":27,"1290":1,"1294":1,"1297":1,"1300":31,"1301":5,"1305":1,"1308":1,"1309":5,"1311":17,"1312":4,"1313":1,"1322":1,"1323":11,"1324":42,"1328":3,"1332":2,"1337":1,"1339":14,"1342":4,"1343":2,"1344":1,"1346":1,"1347":1,"1349":1,"1350":29,"1352":3,"1355":3,"1357":1,"1359":104,"1366":2,"1369":3,"1372":2,"1373":1,"1375":2,"1380":30,"1384":1,"1386":1,"1388":1,"1390":2,"1391":2,"1395":38,"1396":79,"1398":1,"1401":1,"1402":11,"1408":1,"1411":1,"1414":1,"1415":19,"1416":1,"1417":9,"1421":1,"1423":2,"1426":1,"1427":2,"1430":3,"1432":1,"1435":1,"1436":17,"1438":8,"1441":1,"1447":1,"1453":2,"1454":1,"1467":1,"1488":2,"1490":1,"1492":2,"1496":1,"1534":2,"1535":1,"1567":1,"1577":2,"1627":1,"1630":3,"1631":7,"1632":10,"1635":3,"1638":2,"1639":14,"1640":4,"1641":2,"1651":1,"1666":1,"1670":1,"1708":1,"1720":1,"1748":1,"1767":2,"1769":1,"1770":1,"1794":1,"1806":1,"1819":1,"1821":1,"1839":1,"1863":1,"1870":1,"1892":2,"1896":1,"1902":1,"1909":1,"1920":1,"1922":1,"1923":1,"1927":1,"1931":1,"1934":1,"1947":1,"1962":1,"1991":1,"1992":2,"1995":1,"2024":2,"2029":1,"2036":1,"2056":1,"2063":2,"2073":1,"2109":1,"2110":1,"2141":2,"2149":1,"2156":1,"2167":1,"2176":1,"2180":2,"2183":2,"2190":1,"2199":1,"2200":1}}],["annual",{"3":{"361":1,"1286":1,"1467":1,"1481":1,"2145":1}}],["annoying",{"3":{"2070":1}}],["announcing",{"3":{"1212":1,"1259":1,"1417":3,"2139":1}}],["announceasync",{"3":{"1417":4}}],["announceable",{"3":{"1309":1}}],["announcer",{"3":{"1396":1,"1417":2,"1669":1}}],["announcement",{"3":{"619":1,"620":1,"1324":2,"1359":2,"1396":5,"1410":1,"1415":4,"1417":8,"1526":1,"1532":1,"1642":1,"1644":1,"2116":1}}],["announcements",{"3":{"384":1,"433":1,"1402":2,"1417":7,"1605":1,"1739":1,"1936":1}}],["announce",{"3":{"573":1,"1212":1,"1324":1,"1350":1,"1396":1,"1402":2,"1415":1,"1417":5,"1436":1,"1607":4,"1608":1,"1741":4,"1742":2,"1835":1,"2230":1}}],["announces",{"3":{"0":1,"109":1,"1323":2,"1350":4,"1395":1,"1396":2,"1402":1,"1415":1,"1417":3,"1607":1,"1608":2,"1741":1,"1742":3,"1870":1,"1988":1}}],["announced",{"3":{"0":2,"170":1,"790":2,"1074":1,"1118":1,"1231":1,"1259":1,"1309":1,"1311":1,"1316":1,"1324":1,"1359":2,"1380":3,"1392":1,"1396":1,"1402":1,"1417":1,"1436":1,"1558":1,"1561":1,"1607":3,"1608":6,"1631":1,"1643":1,"1644":2,"1741":3,"1742":13,"2091":1,"2166":1}}],["annotates",{"3":{"166":1,"305":1}}],["annotate",{"3":{"135":2,"1286":1,"1311":1,"1436":2}}],["annotated",{"3":{"0":1,"135":1,"250":1,"251":1,"252":1,"254":1,"256":1,"257":1,"258":2,"259":1,"305":1,"324":1,"343":1,"725":1,"1243":1,"1259":1,"1270":1,"1282":1,"1286":4,"1300":1,"1309":1,"1324":1,"1350":1,"1359":5,"1395":2,"1396":3,"1436":2,"1458":1,"1459":1,"1577":1,"1733":1,"2138":1}}],["annotations",{"3":{"318":1,"655":1,"657":1,"674":2,"675":1,"676":1,"1270":1,"1286":5,"1300":1,"1323":4,"1324":2,"1339":5,"1384":1,"1395":4,"1396":1,"1415":1,"1420":1,"1427":1,"1436":6,"1585":1,"1805":1,"2012":2}}],["annotation",{"3":{"0":2,"158":1,"160":1,"170":1,"318":1,"626":1,"627":1,"659":1,"674":1,"676":2,"1083":1,"1084":1,"1279":1,"1281":2,"1286":21,"1300":2,"1310":1,"1311":5,"1320":1,"1323":2,"1324":1,"1339":2,"1350":2,"1395":3,"1396":2,"1416":1,"1417":1,"1427":1,"1436":5,"1438":1,"1455":1,"1641":1,"1670":1,"1994":1,"2064":2,"2232":1}}],["annotating",{"3":{"0":1,"160":1,"1286":1,"1323":1}}],["ancestry",{"3":{"526":1,"530":1,"531":1,"1454":1}}],["ancestorfullname",{"3":{"1436":1}}],["ancestor",{"3":{"402":1,"530":1,"1196":1,"1333":2,"1339":3,"1417":1,"1436":5,"1438":2,"1443":1,"1454":1,"2157":1}}],["ancestors",{"3":{"214":1,"219":2,"572":1,"1324":2,"1339":2,"1436":5,"1438":2,"1488":1,"1525":1,"1577":1,"1591":2,"1600":1,"2055":1,"2147":1,"2148":1,"2149":1,"2150":2}}],["anchortype",{"3":{"1436":1}}],["anchoring",{"3":{"1359":1,"1380":1,"1415":1,"1436":4}}],["anchor",{"0":{"2103":1},"3":{"34":1,"57":1,"139":2,"203":1,"250":1,"251":2,"252":4,"254":2,"256":2,"257":2,"258":2,"259":2,"260":1,"261":1,"276":1,"306":1,"323":2,"324":1,"354":1,"366":2,"392":1,"413":1,"415":1,"418":1,"420":1,"423":1,"424":2,"425":1,"426":2,"428":1,"429":1,"430":1,"464":2,"465":2,"492":2,"493":1,"495":1,"543":2,"547":1,"609":1,"631":2,"644":1,"747":1,"752":1,"761":1,"833":1,"876":1,"917":1,"949":1,"991":1,"994":1,"1122":1,"1127":1,"1184":1,"1263":1,"1309":3,"1311":17,"1312":1,"1319":2,"1323":21,"1324":11,"1341":1,"1350":2,"1354":1,"1359":9,"1369":1,"1377":2,"1380":6,"1396":9,"1402":1,"1404":2,"1415":6,"1417":19,"1431":1,"1436":37,"1449":1,"1467":1,"1489":2,"1496":9,"1498":1,"1500":1,"1599":2,"1641":1,"1684":1,"1686":1,"1729":1,"1750":1,"1758":1,"1759":1,"1773":1,"1976":1,"2103":2,"2108":2,"2111":1,"2121":2,"2122":1}}],["anchored",{"0":{"137":1,"138":1,"139":1},"3":{"0":2,"34":1,"112":1,"130":2,"137":3,"138":1,"139":4,"140":1,"141":1,"142":1,"171":1,"249":1,"254":1,"324":1,"354":2,"375":1,"378":1,"393":1,"446":2,"453":1,"468":2,"475":1,"476":1,"477":1,"478":1,"480":1,"486":1,"501":1,"514":1,"534":5,"540":2,"543":2,"550":1,"552":1,"554":3,"559":1,"567":1,"586":1,"589":1,"594":1,"597":3,"604":1,"607":5,"613":2,"621":1,"624":3,"629":1,"631":1,"636":1,"638":3,"647":1,"652":1,"669":1,"672":4,"677":1,"680":2,"685":1,"696":4,"703":1,"723":1,"744":1,"764":3,"769":1,"777":1,"780":5,"794":1,"806":1,"841":1,"844":1,"849":1,"867":1,"877":1,"895":1,"909":1,"917":1,"927":1,"929":1,"934":1,"949":1,"1007":1,"1021":1,"1045":1,"1055":2,"1078":1,"1111":1,"1119":1,"1146":1,"1324":1,"1347":1,"1350":1,"1364":1,"1369":1,"1424":1,"1436":6,"1496":29,"1661":1,"1684":1,"1729":2,"1984":1,"2001":1,"2232":1}}],["anchors",{"0":{"1319":1},"3":{"0":2,"43":1,"63":1,"94":1,"98":1,"104":3,"128":1,"137":1,"138":2,"139":2,"140":2,"142":3,"181":1,"203":1,"220":2,"231":1,"241":2,"249":1,"250":3,"251":3,"252":5,"254":4,"256":4,"257":4,"258":3,"259":7,"260":1,"261":1,"268":1,"285":1,"322":1,"324":1,"326":3,"336":1,"337":1,"345":2,"354":1,"364":1,"375":1,"386":1,"393":1,"395":1,"409":1,"418":4,"424":1,"425":2,"426":1,"428":2,"429":1,"463":1,"464":1,"465":1,"466":2,"490":3,"491":1,"492":1,"493":2,"497":3,"502":2,"522":1,"526":1,"543":3,"551":1,"552":2,"589":1,"604":1,"609":2,"611":1,"613":1,"616":3,"644":2,"655":2,"660":2,"669":1,"696":2,"703":5,"713":1,"720":2,"731":1,"736":1,"747":1,"749":1,"755":2,"761":1,"814":1,"825":1,"850":1,"875":1,"877":1,"879":1,"884":1,"912":1,"927":2,"958":1,"960":1,"967":1,"983":1,"986":1,"991":1,"994":1,"999":1,"1021":1,"1029":1,"1062":1,"1065":1,"1070":1,"1136":1,"1193":1,"1309":1,"1311":2,"1313":1,"1324":2,"1350":1,"1359":2,"1377":1,"1417":2,"1436":7,"1467":3,"1476":1,"1488":1,"1496":7,"1591":1,"2046":2,"2086":1}}],["antes",{"3":{"1436":1}}],["anthropiccontentblock",{"3":{"1496":1}}],["anthropicclient",{"2":{"1420":1,"2172":1},"3":{"1420":1,"1427":2,"2172":1}}],["anthropicmessage",{"3":{"1496":1}}],["anthropicresponse",{"3":{"1496":1}}],["anthropicrequest",{"3":{"1496":1}}],["anthropicusage",{"3":{"1496":2}}],["anthropicjsonschemaformat",{"3":{"1496":2}}],["anthropicoutputconfig",{"3":{"1496":2}}],["anthropics",{"3":{"1459":1,"1496":2}}],["anthropicscoringservice",{"3":{"0":1,"1369":2,"1427":4,"1496":5,"2179":1}}],["anthropicaiservicecollectionextensions",{"3":{"1199":1,"1203":1,"1207":1,"1420":1,"1427":4}}],["anthropicaiproviderfactory",{"3":{"74":1,"1091":2,"1092":1,"1199":3,"1203":1,"1207":2,"1420":2,"1427":16}}],["anthropic",{"2":{"142":1,"1020":1,"1089":1,"1091":1,"1093":2,"1211":1,"1213":1,"1418":1,"1455":1,"1466":1,"1470":1,"1472":1,"1503":1,"2178":1},"3":{"0":2,"74":1,"142":1,"598":1,"599":1,"980":2,"983":1,"995":1,"1012":1,"1017":4,"1020":2,"1089":1,"1090":1,"1091":4,"1093":2,"1094":1,"1095":1,"1192":1,"1199":2,"1203":2,"1206":1,"1207":6,"1208":2,"1211":1,"1213":2,"1350":1,"1359":5,"1376":1,"1380":1,"1418":1,"1420":3,"1427":16,"1436":1,"1438":4,"1455":2,"1466":2,"1467":6,"1470":1,"1472":1,"1474":1,"1486":2,"1492":3,"1496":3,"1503":1,"2178":1,"2179":1,"2190":1,"2227":1}}],["anticipated",{"3":{"827":1,"1359":2,"1436":1,"1804":1,"1946":1}}],["anticipate",{"3":{"812":1,"1270":1,"1417":1}}],["anticipates",{"3":{"241":1,"245":1,"974":1,"1359":1,"1400":1}}],["antiforgery",{"3":{"0":1,"207":2,"664":3,"665":2,"670":1,"1184":1,"1187":1,"1212":1,"1300":3,"1311":2,"1336":2,"1339":4,"1442":1,"1467":2,"1526":1,"1969":2,"1970":2,"2232":1}}],["anti",{"3":{"0":3,"51":1,"53":2,"557":1,"591":1,"592":1,"688":1,"690":2,"691":1,"692":1,"854":1,"855":1,"859":1,"871":1,"1012":1,"1018":1,"1019":1,"1020":1,"1212":1,"1294":1,"1300":6,"1311":1,"1312":3,"1323":1,"1324":8,"1326":2,"1339":4,"1358":1,"1359":3,"1369":1,"1395":3,"1396":12,"1402":1,"1415":1,"1417":1,"1433":2,"1436":8,"1438":5,"1444":2,"1457":1,"1489":4,"1492":3,"1493":1,"1526":1,"1532":1,"1544":1,"1546":1,"1548":1,"1576":1,"1577":1,"1586":1,"1591":1,"1599":1,"1631":1,"1639":1,"1641":2,"1654":1,"1663":1,"1767":1,"1832":1,"2047":1,"2232":1}}],["anomalies",{"3":{"1359":1}}],["anomalous",{"3":{"1301":1}}],["anomaly",{"3":{"790":1,"1311":1,"1436":1}}],["anon",{"3":{"157":2,"161":1,"1311":1,"1908":1}}],["anonymizability",{"3":{"1671":1}}],["anonymizable",{"3":{"718":2,"1764":1}}],["anonymization",{"3":{"0":1,"37":1,"41":1,"42":4,"1201":1,"1237":2,"1323":4,"1415":2,"1438":2,"1567":1,"1640":1,"1672":1,"1765":1,"1784":1,"1903":2,"2062":1,"2063":1,"2064":1,"2068":1,"2221":1,"2232":1}}],["anonymizing",{"3":{"318":1,"326":1,"1142":1,"1300":1,"1764":1,"1767":1,"2066":1}}],["anonymizes",{"3":{"358":1,"716":1,"897":1,"1396":1,"1577":1,"1747":1,"1748":1,"1751":1,"1765":2,"1769":1,"2141":1}}],["anonymized",{"3":{"38":1,"42":1,"444":1,"1237":1,"1300":2,"1402":2,"1410":3,"1415":5,"1436":2,"1765":2,"2065":1,"2069":1}}],["anonymize",{"2":{"42":1,"355":1,"497":1,"718":1,"2063":1,"2064":1},"3":{"0":2,"39":1,"40":1,"42":1,"350":1,"355":1,"440":1,"497":2,"499":2,"690":1,"694":1,"718":1,"724":1,"725":1,"897":1,"1212":2,"1236":2,"1237":7,"1300":10,"1323":6,"1396":1,"1406":1,"1410":3,"1415":11,"1436":5,"1438":1,"1526":2,"1535":1,"1567":1,"1572":1,"1577":2,"1590":1,"1631":1,"1672":1,"1767":1,"1769":2,"2063":6,"2064":1,"2069":2,"2126":1,"2230":1}}],["anonymity",{"3":{"0":1,"184":1,"189":1,"446":1,"448":1,"1300":1,"1339":1,"1380":1,"1402":2,"1436":1,"2131":1}}],["anonymoususer",{"3":{"1436":2}}],["anonymousendpointsfortest",{"3":{"1436":3}}],["anonymousendpointsof",{"3":{"1436":3}}],["anonymousendpoints",{"3":{"1436":6}}],["anonymousendpointtests",{"3":{"1199":2,"1207":4,"1311":3,"1324":2,"1380":2,"1436":18,"1489":3,"1526":1,"1534":1,"1535":1,"1591":2}}],["anonymousendpointtestsbasetests",{"3":{"1198":1,"1199":7,"1207":14,"1436":44,"1489":1,"1496":1}}],["anonymousendpointtestsbase",{"2":{"189":1,"1586":1,"1898":1},"3":{"0":1,"189":2,"1199":10,"1207":2,"1300":2,"1436":38,"1586":1,"1898":1}}],["anonymousstate",{"3":{"1324":1}}],["anonymoussessionassettests",{"3":{"1199":1,"1207":2}}],["anonymously",{"3":{"1259":1,"1288":1,"1298":1,"1300":3,"1311":2,"1324":1,"1402":5,"1408":1,"1432":1,"1467":1,"1626":1,"1629":1,"1630":1,"1758":1}}],["anonymousauthenticationstateprovider",{"3":{"1496":2}}],["anonymousauthedgecasetests",{"3":{"1199":1,"1207":2}}],["anonymousauthtests",{"3":{"1199":1,"1207":2,"1611":1}}],["anonymousaccessdeniedtests",{"3":{"1199":2,"1207":4}}],["anonymousbookmarkaccessdeniedtests",{"3":{"1199":1,"1207":2}}],["anonymousconferencereadtests",{"2":{"1611":1},"3":{"1199":1,"1207":2,"1611":1}}],["anonymouscurrentuserservice",{"3":{"1199":2,"1207":1}}],["anonymousfixturecontroller",{"3":{"1199":3,"1207":1,"1436":9}}],["anonymouspartition",{"2":{"178":1},"3":{"178":1,"1311":5,"2000":1}}],["anonymoushubpermitlimit",{"2":{"175":1,"179":1},"3":{"0":1,"175":1,"179":1,"1311":5,"2000":1}}],["anonymous",{"0":{"1407":1,"1622":1,"1758":1},"2":{"57":1,"825":1},"3":{"0":15,"31":1,"33":1,"37":1,"42":3,"57":1,"59":2,"159":1,"173":5,"174":2,"175":9,"176":3,"177":4,"178":3,"179":3,"181":4,"189":1,"233":1,"242":1,"243":2,"244":3,"247":2,"265":2,"273":1,"279":1,"280":2,"287":2,"303":1,"306":1,"333":1,"349":1,"387":2,"390":1,"391":2,"403":1,"420":2,"441":1,"459":2,"464":1,"507":1,"527":1,"577":1,"618":1,"649":1,"748":1,"749":2,"757":3,"759":1,"789":1,"790":1,"792":1,"793":2,"794":1,"825":1,"826":4,"827":4,"828":1,"830":1,"834":1,"853":1,"954":2,"956":1,"960":1,"1059":1,"1115":1,"1116":2,"1118":2,"1184":1,"1207":12,"1212":4,"1246":1,"1253":1,"1259":1,"1264":1,"1270":2,"1275":1,"1278":1,"1286":2,"1294":1,"1300":18,"1311":46,"1323":8,"1324":38,"1332":2,"1337":1,"1339":10,"1343":1,"1344":1,"1350":12,"1359":24,"1372":1,"1375":2,"1380":23,"1381":2,"1389":1,"1391":1,"1395":19,"1396":15,"1402":4,"1407":3,"1408":1,"1414":1,"1415":19,"1416":2,"1417":1,"1432":2,"1433":1,"1434":1,"1436":59,"1438":13,"1447":5,"1455":1,"1456":1,"1467":6,"1488":1,"1489":1,"1491":2,"1496":1,"1526":2,"1591":3,"1596":3,"1597":1,"1608":1,"1611":2,"1621":1,"1623":1,"1627":1,"1631":4,"1640":7,"1641":2,"1643":1,"1666":1,"1671":1,"1673":1,"1703":1,"1742":2,"1748":4,"1749":1,"1750":1,"1757":2,"1758":1,"1759":1,"1761":2,"1765":3,"1768":7,"1771":1,"1773":1,"1775":1,"1825":3,"1898":1,"1911":1,"1922":4,"1963":1,"1966":1,"1997":1,"1998":5,"1999":4,"2000":6,"2001":6,"2002":5,"2007":1,"2024":3,"2028":1,"2036":1,"2066":1,"2083":2,"2125":1,"2127":1,"2166":2,"2168":1,"2193":1,"2196":1,"2232":2}}],["another",{"3":{"0":3,"21":1,"24":1,"47":1,"126":1,"131":1,"136":2,"137":1,"157":1,"159":1,"164":1,"168":1,"180":1,"187":1,"188":1,"225":1,"241":1,"247":1,"255":1,"318":1,"376":1,"386":1,"387":1,"434":1,"459":1,"566":1,"571":1,"634":1,"640":1,"650":2,"658":1,"699":1,"702":1,"709":1,"725":1,"727":1,"733":2,"735":1,"768":1,"792":1,"799":1,"827":1,"840":1,"862":2,"881":2,"905":4,"906":2,"907":1,"948":1,"972":1,"974":2,"1019":1,"1051":1,"1055":1,"1061":2,"1124":1,"1128":1,"1170":1,"1184":1,"1185":1,"1212":1,"1229":2,"1231":1,"1232":1,"1233":1,"1237":6,"1240":1,"1241":1,"1242":2,"1246":1,"1247":8,"1249":1,"1253":3,"1259":6,"1263":2,"1264":1,"1268":1,"1270":17,"1276":2,"1281":1,"1283":2,"1286":27,"1290":2,"1293":2,"1300":22,"1301":2,"1303":1,"1308":1,"1309":4,"1310":2,"1311":12,"1312":1,"1317":1,"1318":1,"1323":9,"1324":8,"1339":4,"1350":6,"1359":27,"1362":1,"1369":2,"1379":1,"1380":10,"1389":1,"1395":8,"1396":21,"1402":12,"1408":1,"1409":1,"1412":1,"1415":20,"1417":3,"1427":2,"1436":44,"1438":5,"1441":2,"1455":1,"1465":1,"1467":3,"1473":2,"1475":1,"1487":1,"1489":6,"1492":2,"1496":1,"1534":1,"1541":1,"1631":2,"1650":1,"1651":2,"1669":1,"1686":1,"1702":1,"1727":1,"1748":1,"1749":1,"1765":1,"1789":1,"1821":2,"1823":1,"1841":1,"1849":2,"1851":1,"1852":1,"1872":1,"1880":1,"1908":1,"1911":1,"1920":2,"1922":1,"1923":1,"1924":1,"1925":1,"1932":1,"1937":1,"1948":2,"1961":1,"1970":1,"1982":2,"1986":1,"1995":2,"1997":1,"2002":1,"2021":1,"2044":2,"2074":1,"2082":1,"2098":1,"2111":1,"2118":1,"2163":2,"2198":1,"2199":1,"2202":1}}],["anybody",{"3":{"1083":1,"1092":1,"1281":1,"1323":2,"1359":1,"2002":1,"2043":1,"2180":1}}],["anyone",{"3":{"0":3,"24":1,"224":1,"281":1,"284":1,"358":1,"441":1,"528":1,"530":1,"539":1,"633":1,"634":1,"689":1,"691":2,"692":1,"727":1,"735":1,"743":1,"805":1,"825":1,"905":1,"907":1,"914":1,"924":1,"926":1,"933":1,"938":1,"939":1,"971":1,"1042":1,"1044":1,"1116":1,"1118":2,"1232":1,"1237":1,"1270":1,"1286":3,"1290":1,"1300":4,"1301":1,"1323":3,"1342":1,"1350":1,"1359":7,"1380":1,"1389":1,"1396":5,"1402":2,"1406":1,"1416":2,"1436":6,"1454":1,"1467":5,"1481":1,"1484":1,"1638":1,"1640":1,"1641":1,"1765":1,"1808":2,"1874":1,"1893":1,"1931":1,"1938":1,"1950":1,"1982":1,"1995":2,"2045":1,"2099":1,"2124":1,"2127":1,"2140":1,"2191":1,"2192":1,"2216":1}}],["anything",{"0":{"1696":1},"3":{"0":2,"21":1,"54":1,"59":1,"109":1,"125":1,"136":1,"170":1,"201":1,"218":1,"225":1,"235":1,"265":1,"284":1,"291":1,"333":1,"335":1,"340":1,"350":1,"353":1,"370":1,"373":1,"380":2,"384":1,"402":1,"407":1,"415":1,"434":1,"439":1,"442":1,"518":1,"524":1,"546":1,"558":2,"566":1,"583":1,"585":1,"592":2,"611":1,"620":1,"626":1,"633":1,"642":1,"651":1,"659":1,"665":1,"676":1,"681":1,"696":1,"715":1,"717":1,"725":1,"731":1,"749":1,"751":1,"756":2,"766":1,"768":1,"774":1,"776":1,"790":1,"793":1,"821":1,"826":2,"827":1,"876":2,"897":1,"904":1,"907":1,"922":1,"926":1,"931":1,"938":1,"982":1,"988":1,"990":2,"995":1,"1018":1,"1026":1,"1048":1,"1052":1,"1066":1,"1075":1,"1091":2,"1093":1,"1100":2,"1101":1,"1118":1,"1124":1,"1126":2,"1129":1,"1133":1,"1134":1,"1175":2,"1184":1,"1193":1,"1212":1,"1228":2,"1229":5,"1233":1,"1237":5,"1243":1,"1244":1,"1247":3,"1251":1,"1259":8,"1268":1,"1270":9,"1271":1,"1278":1,"1285":1,"1286":32,"1289":1,"1290":1,"1293":1,"1300":23,"1301":5,"1304":2,"1307":1,"1308":1,"1309":2,"1311":23,"1312":4,"1323":31,"1324":30,"1326":1,"1327":2,"1332":2,"1339":20,"1343":2,"1350":9,"1352":1,"1359":42,"1362":1,"1369":4,"1379":3,"1380":2,"1385":1,"1391":1,"1395":20,"1396":19,"1402":5,"1405":1,"1406":1,"1408":1,"1415":13,"1416":7,"1417":8,"1418":1,"1421":1,"1423":1,"1424":1,"1427":6,"1428":1,"1433":1,"1435":1,"1436":22,"1438":5,"1442":1,"1443":1,"1445":1,"1447":1,"1455":4,"1456":2,"1457":1,"1459":2,"1460":2,"1466":1,"1467":2,"1472":1,"1473":1,"1475":1,"1482":1,"1490":1,"1492":1,"1513":1,"1591":1,"1631":2,"1632":1,"1652":1,"1653":2,"1662":1,"1666":1,"1668":1,"1676":1,"1677":1,"1683":1,"1685":1,"1702":1,"1704":1,"1719":2,"1729":1,"1769":1,"1776":1,"1805":1,"1824":2,"1840":1,"1847":1,"1856":1,"1859":1,"1869":1,"1874":1,"1886":1,"1892":1,"1894":1,"1908":1,"1924":1,"1933":2,"1934":1,"1940":1,"1941":1,"1945":1,"1959":1,"1966":1,"1972":1,"1974":1,"1980":1,"1982":1,"2000":1,"2006":1,"2008":1,"2010":1,"2024":1,"2034":1,"2039":1,"2049":1,"2061":1,"2089":1,"2109":1,"2121":1,"2126":2,"2142":1,"2145":1,"2149":1,"2156":1,"2158":1,"2165":1,"2172":1,"2179":1,"2180":1,"2183":2,"2185":1,"2192":1,"2193":1,"2194":1,"2203":1}}],["anyway",{"0":{"1226":1,"1720":1},"3":{"0":2,"135":1,"148":1,"201":1,"538":1,"539":1,"648":1,"691":1,"733":1,"743":1,"766":2,"826":1,"827":1,"839":1,"853":1,"869":1,"883":1,"941":1,"1027":1,"1178":1,"1214":1,"1252":1,"1254":1,"1259":3,"1270":1,"1286":4,"1300":1,"1309":2,"1311":5,"1323":1,"1324":2,"1339":1,"1359":4,"1384":1,"1395":3,"1396":4,"1406":1,"1415":2,"1416":1,"1417":5,"1427":1,"1436":7,"1455":1,"1459":1,"1467":1,"1582":1,"1654":1,"1684":1,"1729":1,"1821":1,"1840":2,"1901":1,"1905":1,"1909":1,"1922":1,"1943":1,"1946":1,"1947":2,"1952":1,"1954":1,"1966":1,"2000":1,"2024":1,"2077":1,"2101":1,"2192":1,"2194":1}}],["anywhere",{"0":{"94":1},"3":{"0":5,"81":1,"127":1,"170":2,"237":2,"324":1,"343":2,"373":1,"413":1,"422":1,"471":1,"477":1,"483":1,"490":1,"493":1,"529":1,"556":2,"564":1,"566":1,"591":1,"633":1,"635":1,"638":1,"642":1,"665":1,"676":1,"751":1,"757":1,"790":1,"797":1,"804":2,"827":1,"837":2,"868":1,"963":1,"974":1,"1050":2,"1075":1,"1082":1,"1134":1,"1141":1,"1183":1,"1229":3,"1237":1,"1244":1,"1247":1,"1270":1,"1271":1,"1286":8,"1300":3,"1306":1,"1309":3,"1323":2,"1324":8,"1339":2,"1357":1,"1359":13,"1369":3,"1380":3,"1395":4,"1396":10,"1402":2,"1414":1,"1415":8,"1417":1,"1423":1,"1431":1,"1436":13,"1441":1,"1455":1,"1465":2,"1474":1,"1476":2,"1492":1,"1496":3,"1526":2,"1577":1,"1584":1,"1626":1,"1654":1,"1684":1,"1726":1,"1729":1,"1804":1,"1810":1,"1842":1,"1935":1,"2046":1,"2121":1,"2129":1,"2184":1,"2197":1,"2199":1,"2201":1}}],["anyasync",{"3":{"0":1,"549":1,"550":1,"552":1,"1259":1,"1286":6,"1815":1}}],["any",{"1":{"771":1,"772":1,"773":1,"774":1,"775":1,"776":1,"777":1,"778":1},"3":{"0":32,"21":1,"30":1,"38":1,"39":3,"42":1,"53":1,"54":1,"59":1,"71":2,"72":1,"95":2,"96":1,"98":1,"100":1,"102":1,"109":1,"122":1,"125":1,"126":2,"132":1,"135":1,"137":1,"150":2,"155":1,"159":1,"160":1,"170":1,"171":1,"175":3,"177":2,"178":2,"180":2,"186":2,"193":1,"196":1,"200":1,"201":2,"217":1,"219":1,"243":3,"248":1,"259":2,"265":5,"284":1,"290":2,"300":1,"303":1,"305":1,"310":1,"318":4,"330":2,"333":1,"341":2,"342":1,"343":1,"358":1,"359":4,"361":2,"365":3,"370":3,"372":1,"374":1,"380":1,"384":1,"386":1,"387":2,"388":1,"397":1,"402":1,"405":1,"412":1,"415":1,"418":1,"427":1,"428":1,"434":1,"438":1,"448":2,"449":1,"459":2,"460":1,"461":1,"463":1,"465":2,"468":1,"469":1,"470":2,"477":1,"481":1,"486":1,"487":1,"497":1,"500":1,"507":1,"527":2,"536":1,"538":1,"540":1,"543":1,"545":2,"549":1,"550":2,"556":1,"564":1,"566":1,"573":1,"576":1,"583":4,"586":1,"597":1,"599":2,"601":1,"602":1,"609":1,"611":1,"618":2,"626":3,"627":1,"633":1,"648":1,"657":1,"672":1,"698":2,"700":1,"702":1,"707":2,"708":1,"709":1,"715":1,"723":1,"725":2,"733":1,"740":2,"741":3,"749":5,"750":1,"751":3,"757":2,"758":1,"766":2,"768":2,"771":1,"773":2,"774":1,"775":1,"776":3,"782":1,"790":3,"798":1,"799":1,"800":2,"801":1,"802":1,"803":2,"804":1,"809":1,"813":1,"818":1,"819":2,"826":2,"827":3,"833":1,"838":2,"845":1,"853":1,"869":1,"872":2,"881":2,"883":1,"891":2,"897":1,"904":1,"905":2,"906":1,"912":1,"921":1,"931":2,"939":1,"944":1,"945":1,"946":1,"948":1,"954":1,"963":1,"964":2,"971":1,"972":2,"979":1,"980":2,"981":1,"982":2,"986":1,"987":1,"988":1,"991":1,"1004":1,"1011":1,"1014":2,"1018":7,"1025":1,"1026":2,"1033":2,"1050":3,"1051":2,"1052":1,"1055":1,"1059":1,"1061":1,"1066":2,"1067":2,"1068":1,"1075":1,"1083":2,"1089":1,"1090":1,"1091":1,"1093":4,"1107":2,"1108":1,"1111":1,"1116":3,"1117":1,"1124":1,"1133":1,"1135":1,"1160":1,"1163":1,"1168":3,"1169":1,"1175":2,"1179":1,"1184":6,"1191":1,"1196":1,"1212":3,"1214":1,"1217":1,"1218":1,"1223":1,"1224":1,"1227":1,"1229":4,"1231":2,"1236":1,"1237":15,"1240":2,"1241":5,"1243":1,"1244":1,"1245":1,"1247":20,"1249":1,"1252":1,"1255":1,"1259":14,"1270":20,"1271":11,"1275":1,"1276":1,"1278":5,"1280":1,"1281":3,"1284":1,"1286":78,"1291":1,"1294":1,"1296":1,"1297":1,"1300":69,"1301":9,"1302":1,"1304":1,"1306":1,"1307":1,"1308":1,"1309":25,"1310":2,"1311":53,"1312":4,"1315":4,"1318":1,"1320":1,"1323":50,"1324":90,"1332":1,"1333":1,"1335":1,"1336":4,"1338":3,"1339":42,"1343":2,"1345":1,"1347":1,"1350":19,"1352":2,"1353":1,"1357":1,"1358":2,"1359":113,"1362":1,"1364":1,"1366":2,"1369":11,"1371":1,"1372":1,"1373":3,"1376":1,"1380":14,"1383":1,"1389":1,"1392":2,"1395":52,"1396":67,"1398":1,"1401":1,"1402":26,"1405":1,"1406":2,"1408":1,"1411":1,"1414":1,"1415":26,"1416":10,"1417":62,"1419":1,"1422":3,"1423":2,"1424":1,"1426":1,"1427":14,"1429":1,"1430":1,"1431":7,"1436":145,"1438":9,"1439":1,"1441":2,"1442":3,"1443":7,"1444":1,"1445":3,"1447":1,"1448":1,"1451":1,"1453":1,"1454":3,"1455":10,"1456":3,"1457":1,"1459":2,"1460":1,"1463":1,"1465":1,"1466":1,"1467":18,"1468":1,"1471":1,"1472":1,"1473":2,"1474":2,"1475":1,"1476":1,"1478":2,"1481":2,"1484":1,"1488":7,"1489":3,"1490":2,"1491":1,"1492":1,"1496":1,"1508":1,"1521":1,"1525":1,"1526":7,"1534":1,"1535":1,"1536":1,"1544":1,"1545":1,"1548":1,"1553":2,"1572":1,"1575":1,"1576":1,"1577":4,"1585":2,"1589":2,"1591":7,"1596":3,"1599":1,"1609":1,"1610":1,"1611":2,"1626":1,"1627":1,"1631":3,"1632":6,"1634":1,"1635":2,"1636":1,"1638":1,"1639":2,"1640":1,"1641":13,"1644":1,"1648":2,"1649":1,"1653":2,"1661":1,"1662":1,"1663":2,"1664":1,"1666":1,"1667":2,"1668":1,"1678":1,"1682":1,"1686":2,"1688":1,"1690":1,"1698":1,"1710":1,"1714":1,"1723":1,"1727":3,"1731":1,"1734":1,"1743":1,"1744":1,"1748":1,"1750":1,"1760":1,"1761":1,"1765":4,"1767":1,"1768":3,"1769":1,"1771":1,"1773":1,"1776":1,"1781":1,"1790":1,"1793":1,"1794":1,"1799":1,"1802":2,"1807":2,"1815":2,"1817":2,"1822":1,"1825":1,"1827":1,"1828":1,"1831":1,"1834":2,"1836":1,"1838":1,"1840":2,"1843":1,"1846":1,"1849":2,"1851":1,"1853":1,"1857":1,"1862":1,"1868":1,"1871":1,"1873":1,"1875":1,"1877":1,"1881":2,"1883":1,"1886":1,"1889":1,"1892":1,"1898":2,"1899":1,"1902":3,"1903":1,"1905":2,"1910":2,"1912":2,"1916":1,"1918":1,"1919":1,"1922":2,"1923":1,"1924":2,"1929":1,"1930":2,"1933":4,"1936":1,"1937":1,"1941":2,"1945":2,"1950":1,"1959":1,"1962":1,"1963":1,"1965":2,"1972":1,"1973":1,"1975":1,"1978":1,"1979":1,"1985":1,"1988":2,"1990":1,"1991":2,"1994":3,"1997":2,"2000":2,"2002":1,"2006":1,"2009":1,"2014":1,"2016":1,"2017":1,"2021":1,"2025":3,"2028":1,"2032":1,"2038":1,"2039":1,"2043":1,"2045":2,"2049":1,"2057":1,"2060":1,"2063":1,"2064":2,"2067":1,"2070":1,"2074":2,"2080":1,"2082":1,"2083":1,"2085":1,"2086":1,"2091":1,"2097":1,"2101":1,"2107":2,"2108":1,"2123":1,"2128":2,"2131":2,"2132":2,"2133":1,"2134":1,"2139":1,"2140":1,"2142":3,"2143":2,"2146":2,"2150":1,"2153":2,"2160":1,"2164":1,"2166":1,"2167":1,"2169":3,"2171":2,"2179":1,"2180":1,"2200":1,"2201":1,"2203":2,"2232":1,"2239":1}}],["an",{"0":{"1218":1,"1224":1,"1233":1,"1250":1,"1274":1,"1279":1,"1305":1,"1686":1,"1858":1,"1871":1,"1935":1,"1962":1,"1968":1,"1988":1,"2000":1,"2054":1,"2074":1,"2136":1,"2166":1,"2189":1},"1":{"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1,"181":1,"182":1,"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"613":1,"614":1,"730":1,"731":1,"732":1,"733":1,"734":1,"735":1,"736":1,"737":1,"771":1,"772":1,"773":1,"774":1,"775":1,"776":1,"777":1,"778":1,"936":1,"937":1,"938":1,"939":1,"940":1,"941":1,"942":1,"1001":1,"1002":1,"1003":1,"1004":1,"1005":1,"1006":1,"1007":1,"1008":1,"1047":1,"1048":1,"1049":1,"1050":1,"1051":1,"1052":1,"1053":1,"1054":1,"1055":1,"1080":1,"1081":1,"1082":1,"1083":1,"1084":1,"1085":1,"1086":1,"1087":1,"1158":1,"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1,"1726":1,"1727":1,"1728":1,"1729":1,"1730":1,"1731":1,"1835":1,"1836":1,"1837":1,"1838":1,"1839":1,"1840":1,"1841":1,"1842":1,"1843":1,"1844":1,"1845":1,"1846":1,"1887":1,"1888":1,"1889":1,"1890":1,"1891":1,"1892":1},"3":{"0":231,"1":1,"10":1,"15":3,"17":1,"18":1,"19":1,"20":4,"21":3,"22":2,"23":1,"24":15,"26":4,"27":6,"31":7,"33":1,"37":1,"39":8,"41":5,"42":2,"46":1,"47":1,"48":1,"53":2,"57":1,"62":5,"66":1,"67":1,"68":1,"71":2,"72":8,"73":3,"74":3,"76":1,"77":1,"78":5,"79":1,"81":7,"85":2,"86":1,"87":1,"92":2,"93":2,"94":2,"95":5,"96":4,"97":1,"99":3,"100":7,"101":1,"102":2,"103":2,"107":1,"108":2,"109":30,"110":5,"111":6,"113":1,"115":3,"116":1,"117":2,"120":1,"121":1,"122":6,"125":1,"126":1,"128":1,"130":1,"131":1,"132":2,"135":14,"136":4,"137":1,"139":1,"141":1,"145":1,"147":2,"150":3,"155":3,"156":1,"157":13,"158":1,"159":2,"160":8,"164":3,"165":3,"166":4,"167":3,"168":2,"170":2,"171":1,"172":1,"173":1,"174":1,"175":7,"176":4,"177":2,"178":3,"179":2,"181":2,"184":1,"185":2,"186":6,"187":1,"188":1,"189":5,"194":1,"195":4,"196":1,"197":1,"199":1,"200":4,"201":8,"202":4,"203":2,"206":5,"207":3,"208":1,"209":2,"212":2,"213":1,"214":4,"215":2,"216":2,"217":1,"219":2,"223":2,"224":2,"225":5,"227":1,"228":1,"229":1,"230":5,"233":2,"235":4,"236":1,"237":3,"240":1,"241":3,"242":1,"243":12,"245":6,"246":3,"248":3,"249":2,"250":1,"251":1,"252":1,"254":2,"255":10,"256":3,"258":4,"259":1,"260":1,"261":2,"265":15,"266":2,"267":2,"273":2,"274":1,"280":4,"281":1,"282":1,"283":5,"284":4,"285":1,"290":1,"291":1,"292":1,"293":3,"295":2,"296":1,"298":1,"299":1,"300":2,"301":1,"303":3,"305":4,"309":2,"312":2,"314":1,"317":1,"318":12,"319":3,"320":2,"321":1,"322":1,"324":3,"325":8,"326":1,"328":3,"329":1,"330":2,"331":1,"332":3,"333":2,"335":5,"336":1,"337":2,"340":2,"341":6,"342":2,"343":6,"344":1,"345":1,"348":3,"349":2,"350":15,"351":2,"352":4,"353":13,"358":3,"359":8,"360":1,"361":5,"363":1,"364":1,"365":1,"369":1,"370":4,"371":3,"372":3,"373":4,"375":1,"376":1,"378":1,"379":1,"380":2,"381":1,"382":1,"384":2,"386":1,"387":2,"388":4,"390":7,"391":5,"397":2,"398":4,"400":3,"402":2,"403":2,"404":3,"405":2,"407":3,"408":1,"409":1,"413":3,"415":1,"418":2,"420":4,"422":3,"423":2,"424":1,"425":1,"426":3,"427":4,"428":3,"430":1,"433":1,"434":1,"435":5,"438":1,"440":6,"443":2,"444":5,"446":1,"448":5,"450":1,"451":1,"452":1,"454":1,"458":2,"459":8,"461":4,"463":1,"465":4,"466":1,"468":1,"469":1,"470":1,"471":1,"472":2,"474":1,"475":1,"476":1,"481":1,"483":1,"484":1,"486":4,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"497":2,"499":4,"500":2,"501":2,"506":4,"507":8,"508":2,"509":2,"513":2,"514":1,"517":4,"518":4,"519":1,"520":1,"522":2,"523":1,"528":2,"529":1,"530":6,"534":6,"535":3,"536":8,"537":4,"538":5,"539":7,"540":1,"543":4,"544":4,"545":11,"546":3,"547":1,"548":1,"549":13,"551":3,"555":2,"556":8,"558":1,"559":1,"564":9,"565":1,"566":5,"571":2,"572":5,"573":1,"574":1,"577":2,"578":2,"582":1,"583":14,"584":1,"585":6,"586":5,"590":1,"591":3,"592":1,"598":2,"599":6,"601":4,"602":2,"606":1,"607":1,"608":7,"609":12,"610":1,"611":2,"612":4,"618":1,"619":1,"624":2,"626":6,"627":5,"628":4,"631":1,"632":1,"633":8,"634":2,"635":2,"639":1,"640":5,"642":2,"648":2,"649":5,"651":2,"656":3,"657":10,"658":4,"660":3,"661":1,"664":3,"665":6,"666":3,"672":2,"673":2,"674":12,"676":2,"677":1,"681":4,"682":6,"683":3,"689":9,"690":5,"691":3,"692":11,"696":4,"697":2,"698":8,"699":2,"700":3,"701":2,"702":3,"706":5,"707":5,"708":5,"709":1,"713":1,"714":3,"715":6,"716":2,"717":7,"718":2,"723":4,"724":3,"725":15,"726":3,"727":8,"729":1,"730":1,"731":1,"732":2,"733":5,"734":3,"735":2,"740":3,"741":7,"742":7,"743":6,"745":1,"748":2,"749":4,"756":1,"757":4,"758":1,"759":1,"760":1,"761":2,"764":1,"765":1,"766":5,"767":5,"768":8,"769":2,"771":1,"773":1,"774":2,"776":4,"781":2,"782":6,"783":4,"784":2,"789":5,"790":14,"791":3,"792":4,"793":5,"794":2,"795":1,"797":1,"798":2,"799":9,"802":1,"803":1,"804":1,"805":1,"806":1,"809":4,"810":3,"811":3,"813":5,"815":1,"817":3,"818":2,"819":9,"820":3,"821":4,"823":2,"825":3,"826":3,"827":23,"828":2,"829":10,"830":1,"831":2,"832":1,"833":4,"838":5,"839":3,"840":1,"841":1,"845":3,"846":2,"847":2,"848":5,"849":3,"852":1,"853":6,"854":6,"855":2,"856":4,"857":3,"859":3,"860":5,"861":6,"862":3,"863":1,"864":1,"868":2,"869":2,"870":2,"871":4,"874":1,"876":1,"880":2,"881":7,"882":2,"883":2,"888":2,"889":6,"890":2,"891":2,"896":2,"897":12,"898":2,"899":1,"901":1,"903":2,"904":3,"905":23,"906":4,"907":4,"908":2,"909":1,"912":2,"913":4,"914":7,"915":4,"916":3,"917":1,"918":1,"920":2,"921":3,"922":5,"923":1,"924":3,"926":11,"930":1,"931":2,"932":4,"933":7,"936":1,"938":4,"939":3,"941":1,"945":4,"946":6,"947":6,"948":9,"953":1,"954":4,"959":1,"960":1,"963":3,"964":7,"965":3,"966":1,"971":1,"972":5,"973":1,"974":2,"975":1,"979":1,"980":8,"981":3,"982":3,"988":13,"989":3,"990":1,"992":1,"995":1,"996":9,"997":1,"998":1,"999":2,"1001":1,"1003":1,"1004":3,"1005":2,"1006":2,"1012":4,"1013":3,"1016":1,"1017":6,"1018":14,"1019":6,"1020":8,"1022":1,"1024":2,"1025":1,"1026":9,"1027":3,"1028":5,"1029":1,"1032":1,"1033":5,"1034":9,"1035":2,"1037":3,"1041":3,"1042":10,"1043":4,"1044":4,"1045":2,"1046":2,"1047":1,"1049":3,"1050":13,"1051":4,"1052":5,"1053":1,"1055":2,"1058":5,"1059":13,"1060":2,"1061":3,"1066":3,"1067":16,"1068":2,"1069":1,"1074":1,"1075":2,"1077":2,"1078":1,"1079":1,"1080":1,"1082":3,"1083":3,"1084":3,"1085":2,"1089":5,"1090":4,"1091":18,"1092":5,"1093":5,"1095":1,"1096":1,"1099":2,"1100":6,"1101":2,"1102":2,"1107":4,"1108":4,"1109":3,"1115":5,"1116":17,"1117":4,"1118":4,"1119":1,"1123":1,"1124":6,"1125":1,"1126":5,"1133":8,"1134":2,"1135":4,"1140":7,"1141":1,"1142":7,"1143":3,"1144":1,"1145":2,"1147":1,"1150":5,"1151":1,"1152":4,"1153":1,"1154":1,"1155":5,"1157":1,"1158":1,"1161":10,"1162":4,"1163":3,"1164":2,"1167":1,"1168":11,"1169":1,"1170":8,"1171":1,"1174":2,"1175":5,"1176":4,"1177":5,"1178":2,"1179":1,"1183":2,"1184":8,"1185":2,"1186":1,"1187":2,"1188":2,"1190":2,"1191":1,"1196":1,"1210":2,"1212":56,"1214":3,"1215":1,"1217":3,"1219":3,"1220":7,"1221":3,"1222":3,"1223":1,"1224":3,"1225":3,"1228":6,"1229":70,"1230":1,"1231":10,"1232":4,"1233":9,"1234":5,"1235":1,"1236":11,"1237":137,"1238":2,"1239":13,"1240":3,"1241":14,"1242":8,"1243":10,"1244":7,"1245":4,"1246":4,"1247":179,"1248":3,"1249":9,"1250":4,"1251":1,"1252":9,"1253":4,"1254":3,"1255":2,"1256":11,"1257":5,"1258":5,"1259":160,"1260":3,"1261":2,"1262":5,"1263":10,"1264":8,"1265":10,"1266":2,"1267":2,"1268":4,"1269":11,"1270":236,"1271":56,"1272":3,"1273":7,"1274":13,"1275":12,"1276":9,"1277":3,"1278":13,"1279":8,"1280":9,"1281":9,"1282":5,"1283":7,"1284":1,"1285":8,"1286":642,"1287":2,"1288":9,"1289":10,"1290":13,"1291":4,"1292":5,"1293":13,"1294":5,"1295":3,"1296":2,"1297":13,"1298":6,"1299":4,"1300":540,"1301":79,"1302":3,"1303":4,"1304":7,"1305":4,"1306":3,"1307":6,"1308":8,"1309":146,"1310":34,"1311":382,"1312":66,"1314":3,"1315":8,"1316":11,"1317":9,"1318":14,"1319":1,"1320":8,"1321":1,"1322":8,"1323":417,"1324":641,"1325":1,"1326":3,"1328":5,"1329":1,"1330":2,"1331":3,"1332":6,"1333":8,"1334":5,"1335":2,"1336":5,"1337":5,"1338":9,"1339":245,"1340":4,"1342":18,"1343":9,"1344":10,"1345":2,"1346":1,"1347":3,"1348":3,"1349":6,"1350":318,"1351":3,"1352":11,"1353":11,"1354":1,"1355":9,"1356":2,"1357":6,"1358":15,"1359":1082,"1361":1,"1362":4,"1363":1,"1364":2,"1365":3,"1366":11,"1367":5,"1368":1,"1369":114,"1371":3,"1372":5,"1373":6,"1374":1,"1375":5,"1376":3,"1377":1,"1378":4,"1379":7,"1380":176,"1381":2,"1382":6,"1383":3,"1384":3,"1387":3,"1389":12,"1390":5,"1391":11,"1392":5,"1393":3,"1394":2,"1395":478,"1396":692,"1397":3,"1398":8,"1399":9,"1400":2,"1401":7,"1402":202,"1403":3,"1404":1,"1405":4,"1406":17,"1408":6,"1409":2,"1410":3,"1411":5,"1412":1,"1413":2,"1414":7,"1415":362,"1416":64,"1417":230,"1418":5,"1419":2,"1420":4,"1421":8,"1422":3,"1423":11,"1424":2,"1425":3,"1427":77,"1429":2,"1430":9,"1431":8,"1432":6,"1433":7,"1435":6,"1436":944,"1438":115,"1440":2,"1441":11,"1442":6,"1443":16,"1444":3,"1445":2,"1446":2,"1447":11,"1449":4,"1451":2,"1453":14,"1454":9,"1455":39,"1456":6,"1457":2,"1458":5,"1459":16,"1460":6,"1463":2,"1464":1,"1465":6,"1466":3,"1467":69,"1469":1,"1470":2,"1471":2,"1472":7,"1473":4,"1474":7,"1475":15,"1476":14,"1477":2,"1478":6,"1479":3,"1481":1,"1482":2,"1484":3,"1487":1,"1488":22,"1489":25,"1490":8,"1491":3,"1492":13,"1493":1,"1496":36,"1498":1,"1500":2,"1503":1,"1504":1,"1508":3,"1512":2,"1524":9,"1525":2,"1526":28,"1527":1,"1530":3,"1531":7,"1532":4,"1533":2,"1534":9,"1536":1,"1537":1,"1540":1,"1541":1,"1543":1,"1544":1,"1545":2,"1546":1,"1547":5,"1553":7,"1554":1,"1561":2,"1567":1,"1568":1,"1569":1,"1571":1,"1572":3,"1574":1,"1575":5,"1576":3,"1577":44,"1578":1,"1580":1,"1581":1,"1582":5,"1583":1,"1585":5,"1588":1,"1589":5,"1590":1,"1591":17,"1592":2,"1595":1,"1596":8,"1597":1,"1598":3,"1599":3,"1600":5,"1602":2,"1608":1,"1611":3,"1613":1,"1621":1,"1626":2,"1627":16,"1629":5,"1630":6,"1631":38,"1632":16,"1633":1,"1634":3,"1635":2,"1636":1,"1637":14,"1638":12,"1639":15,"1640":15,"1641":28,"1642":1,"1643":2,"1646":1,"1647":1,"1649":3,"1650":2,"1651":9,"1653":6,"1654":6,"1655":1,"1656":2,"1657":1,"1658":1,"1659":1,"1661":3,"1662":6,"1663":1,"1664":8,"1665":3,"1666":7,"1667":5,"1668":3,"1669":7,"1670":3,"1671":3,"1672":2,"1673":6,"1674":2,"1675":6,"1677":5,"1678":1,"1681":1,"1683":2,"1684":6,"1685":7,"1686":9,"1687":3,"1688":1,"1689":5,"1690":2,"1692":1,"1697":1,"1698":3,"1699":1,"1700":1,"1701":3,"1702":4,"1703":1,"1704":1,"1705":1,"1706":1,"1707":2,"1708":6,"1718":5,"1719":2,"1720":3,"1721":1,"1723":2,"1724":5,"1726":1,"1727":18,"1728":3,"1729":2,"1730":2,"1731":1,"1734":2,"1735":1,"1736":1,"1747":1,"1748":3,"1749":6,"1750":4,"1751":1,"1755":4,"1758":3,"1759":1,"1763":1,"1764":10,"1765":18,"1767":6,"1768":4,"1769":2,"1770":1,"1771":3,"1772":1,"1773":2,"1774":1,"1776":8,"1778":1,"1781":1,"1782":1,"1783":1,"1784":1,"1785":1,"1787":1,"1790":5,"1794":2,"1795":2,"1797":1,"1799":3,"1800":1,"1801":2,"1802":2,"1803":5,"1804":5,"1805":11,"1806":2,"1807":2,"1808":1,"1809":4,"1810":13,"1811":2,"1812":3,"1813":1,"1815":23,"1816":2,"1817":6,"1820":1,"1821":3,"1822":3,"1823":4,"1824":1,"1825":7,"1826":1,"1827":1,"1829":2,"1830":7,"1831":3,"1832":1,"1834":1,"1835":2,"1837":2,"1838":2,"1839":3,"1840":4,"1841":4,"1842":4,"1843":6,"1844":2,"1845":4,"1846":1,"1848":1,"1849":3,"1851":7,"1853":3,"1854":2,"1855":4,"1856":6,"1858":1,"1859":5,"1860":1,"1861":1,"1862":3,"1864":1,"1865":4,"1867":2,"1868":1,"1869":2,"1871":2,"1873":1,"1874":2,"1876":2,"1877":4,"1878":2,"1880":2,"1881":3,"1882":1,"1883":5,"1885":1,"1886":4,"1887":3,"1888":4,"1889":9,"1890":1,"1891":1,"1892":5,"1894":1,"1896":3,"1897":4,"1898":9,"1899":3,"1900":2,"1901":1,"1902":10,"1903":1,"1904":5,"1905":3,"1906":1,"1907":1,"1908":9,"1909":9,"1910":4,"1911":2,"1912":5,"1916":3,"1917":1,"1918":2,"1919":2,"1920":3,"1921":2,"1922":9,"1923":10,"1924":3,"1925":2,"1926":3,"1927":17,"1928":3,"1929":7,"1930":2,"1931":2,"1932":2,"1933":8,"1934":2,"1935":3,"1937":1,"1938":2,"1939":1,"1940":5,"1941":4,"1942":1,"1943":2,"1944":2,"1945":5,"1946":4,"1947":3,"1948":7,"1949":1,"1950":9,"1951":1,"1952":3,"1953":4,"1954":5,"1955":2,"1956":2,"1958":1,"1959":5,"1960":4,"1961":3,"1962":4,"1963":3,"1964":4,"1965":9,"1966":5,"1967":1,"1968":2,"1970":2,"1971":2,"1972":6,"1973":3,"1974":1,"1975":2,"1976":7,"1977":13,"1978":8,"1979":7,"1981":1,"1982":11,"1983":1,"1984":3,"1985":5,"1987":1,"1988":9,"1990":4,"1991":3,"1992":2,"1993":2,"1994":14,"1995":12,"1996":6,"1997":5,"1998":3,"1999":5,"2000":8,"2001":11,"2002":5,"2003":1,"2004":3,"2005":2,"2007":2,"2010":3,"2011":1,"2012":3,"2013":2,"2016":1,"2017":1,"2018":1,"2019":1,"2020":2,"2022":1,"2024":2,"2025":3,"2027":1,"2028":3,"2030":2,"2031":1,"2032":3,"2033":3,"2034":3,"2035":1,"2036":1,"2038":7,"2041":1,"2043":5,"2044":3,"2045":4,"2046":8,"2047":7,"2048":1,"2049":1,"2051":1,"2055":6,"2056":6,"2057":2,"2058":1,"2059":2,"2060":1,"2062":1,"2063":11,"2064":4,"2065":2,"2066":2,"2067":1,"2068":1,"2069":3,"2070":3,"2072":5,"2073":2,"2074":4,"2075":5,"2076":1,"2077":4,"2078":2,"2079":1,"2080":1,"2082":1,"2083":11,"2085":1,"2086":5,"2087":1,"2089":3,"2090":4,"2092":2,"2094":2,"2096":2,"2097":1,"2098":2,"2099":4,"2100":2,"2101":1,"2104":2,"2105":2,"2106":1,"2107":2,"2110":3,"2111":1,"2112":1,"2113":1,"2114":1,"2115":1,"2116":1,"2117":3,"2119":1,"2121":2,"2122":1,"2123":4,"2124":4,"2125":4,"2126":8,"2127":1,"2128":8,"2131":2,"2133":1,"2134":1,"2135":2,"2136":2,"2137":2,"2138":2,"2139":2,"2140":2,"2141":1,"2142":4,"2143":2,"2144":4,"2145":4,"2146":6,"2147":4,"2148":3,"2149":5,"2150":3,"2151":2,"2152":3,"2153":2,"2154":1,"2155":1,"2156":11,"2157":4,"2158":10,"2160":4,"2161":2,"2162":3,"2163":4,"2165":4,"2166":9,"2167":7,"2168":4,"2169":8,"2170":2,"2171":2,"2172":3,"2174":2,"2175":8,"2176":1,"2177":5,"2178":2,"2179":4,"2180":7,"2181":3,"2182":5,"2183":3,"2185":4,"2186":5,"2188":6,"2189":1,"2190":2,"2191":7,"2192":7,"2193":11,"2194":2,"2195":2,"2196":6,"2197":6,"2198":4,"2199":7,"2200":2,"2201":4,"2202":3,"2203":5,"2204":1,"2206":2,"2207":1,"2214":1,"2220":5,"2221":2,"2226":1,"2228":2,"2230":5,"2232":39,"2238":1,"2239":7,"2241":1}}],["andhasnowcag21aaviolations",{"3":{"1436":3}}],["andkeepstheformwitharesend",{"3":{"1436":1}}],["andaneditableoneisnot",{"3":{"1436":1}}],["andallowedsharedcodes",{"3":{"1436":3}}],["andalso",{"2":{"1859":1},"3":{"545":1,"549":1,"1239":1,"1247":5,"1815":1,"1859":1}}],["anddoesnotoverflowhorizontally",{"3":{"1436":1}}],["andbesealed",{"3":{"1436":1}}],["andisreportedsupported",{"3":{"1436":1}}],["andisreporteddeprecated",{"3":{"1436":1}}],["anding",{"3":{"546":1,"1247":1,"1359":1,"1395":1}}],["andcatchesawrappedregistration",{"3":{"1436":1}}],["andpassesthroughnonpii",{"3":{"1436":1}}],["andpinsanintermediatebase",{"3":{"1436":3}}],["andeverydocumentedroute",{"3":{"1436":1}}],["anded",{"3":{"545":1,"1239":2,"1247":3,"1353":2,"1359":7,"1375":1,"1380":1,"1396":1,"1438":1,"1666":1,"1815":1}}],["andtheapisharestheirenvironment",{"3":{"1436":1}}],["andneveranadministrativecommand",{"3":{"1339":1}}],["andsignaturestherepodoesnotown",{"3":{"1436":1}}],["ands",{"3":{"545":1,"1247":3,"1286":1,"1311":1,"1359":5,"1380":3,"1385":1,"1395":2,"1396":5,"1815":4}}],["andspecification",{"2":{"319":1,"550":1},"3":{"319":1,"545":2,"549":3,"550":1,"552":1,"1199":7,"1203":1,"1207":1,"1239":1,"1247":13,"1359":2,"1380":2,"1815":2,"1994":1}}],["androidsigningkeypass",{"2":{"1481":1},"3":{"1481":1}}],["androidsigningstorepass",{"2":{"1481":1},"3":{"1481":1}}],["androidpublicwebhost",{"3":{"1436":1}}],["androidpackagename",{"2":{"424":1,"425":1,"426":1,"428":1,"429":1},"3":{"424":1,"425":1,"426":1,"428":1,"429":1,"1311":1}}],["androidx",{"3":{"1417":3}}],["androidcertfingerprints",{"2":{"423":1,"424":1,"425":1,"426":1,"428":1,"429":1},"3":{"418":1,"423":2,"424":2,"425":1,"426":1,"428":2,"429":2,"1311":1}}],["androidmanifest",{"3":{"418":1,"423":1,"426":1,"1416":1,"1436":1}}],["android",{"0":{"1479":1},"2":{"1481":1},"3":{"0":3,"265":1,"412":1,"413":2,"418":11,"419":1,"420":1,"422":2,"423":5,"424":1,"425":1,"426":5,"427":3,"428":2,"429":2,"433":1,"434":2,"436":2,"681":1,"682":1,"1207":6,"1212":1,"1311":7,"1323":1,"1324":4,"1347":1,"1359":1,"1381":1,"1396":3,"1416":69,"1417":41,"1436":6,"1438":1,"1454":1,"1455":1,"1456":1,"1459":4,"1479":3,"1481":7,"1513":1,"1526":3,"1531":3,"1532":1,"1591":1,"1599":1,"1630":1,"1660":1,"1666":1,"1669":2,"1773":1,"1936":1,"2078":1,"2120":1,"2230":1}}],["and",{"0":{"93":1,"95":1,"99":1,"137":1,"138":1,"141":1,"374":1,"452":1,"539":1,"577":1,"720":1,"813":1,"1128":1,"1214":1,"1221":1,"1225":1,"1226":1,"1242":1,"1247":1,"1251":1,"1255":1,"1256":2,"1257":1,"1258":1,"1263":1,"1267":1,"1270":1,"1278":1,"1281":1,"1282":1,"1283":1,"1284":1,"1285":1,"1292":1,"1297":1,"1300":1,"1303":1,"1305":1,"1307":1,"1308":1,"1314":1,"1315":1,"1316":1,"1318":1,"1328":1,"1331":1,"1332":1,"1333":1,"1336":1,"1342":1,"1345":1,"1347":1,"1348":1,"1349":1,"1353":1,"1354":1,"1355":1,"1356":1,"1359":1,"1363":1,"1364":1,"1366":1,"1367":1,"1368":1,"1375":1,"1376":1,"1377":1,"1378":1,"1379":1,"1384":1,"1385":2,"1386":1,"1391":1,"1392":1,"1394":1,"1398":1,"1399":1,"1400":1,"1401":1,"1402":1,"1405":1,"1409":1,"1410":1,"1412":1,"1413":1,"1423":1,"1427":1,"1433":1,"1436":1,"1459":1,"1473":1,"1475":1,"1478":1,"1486":1,"1490":1,"1492":1,"1520":1,"1534":1,"1585":1,"1599":1,"1648":1,"1649":1,"1652":1,"1653":1,"1654":1,"1661":1,"1664":1,"1665":1,"1667":1,"1668":1,"1669":1,"1670":1,"1671":1,"1672":1,"1673":1,"1696":1,"1707":1,"1730":1,"1769":1,"1797":1,"1805":1,"1821":1,"1831":1,"1842":1,"1870":1,"1881":1,"1889":1,"1896":1,"1910":1,"1921":1,"1934":1,"1938":1,"1945":1,"1955":1,"1962":1,"1969":1,"1988":1,"2009":1,"2010":1,"2011":1,"2013":1,"2033":1,"2036":1,"2041":1,"2054":1,"2058":2,"2062":1,"2067":1,"2090":1,"2092":1,"2097":1,"2098":1,"2102":1,"2107":1,"2120":1,"2126":1,"2137":1,"2172":1,"2186":1,"2190":1,"2197":1,"2199":1,"2207":1,"2208":1,"2209":1,"2210":1,"2239":1},"1":{"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1,"151":1,"152":1,"153":1,"232":1,"233":1,"234":1,"235":1,"236":1,"237":1,"238":1,"239":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"286":1,"287":1,"394":1,"395":1,"396":1,"397":1,"398":1,"399":1,"400":1,"401":1,"402":1,"403":1,"404":1,"405":1,"406":1,"407":1,"408":1,"409":1,"417":1,"418":1,"419":1,"420":1,"421":1,"422":1,"423":1,"424":1,"425":1,"426":1,"427":1,"428":1,"429":1,"430":1,"437":1,"438":1,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1,"496":1,"497":1,"498":1,"499":1,"500":1,"501":1,"502":1,"503":1,"580":1,"581":1,"582":1,"583":1,"584":1,"585":1,"586":1,"587":1,"596":1,"597":1,"598":1,"599":1,"600":1,"601":1,"602":1,"603":1,"604":1,"605":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1,"637":1,"638":1,"639":1,"640":1,"641":1,"642":1,"643":1,"644":1,"645":1,"646":1,"647":1,"648":1,"649":1,"650":1,"651":1,"652":1,"653":1,"679":1,"680":1,"681":1,"682":1,"683":1,"684":1,"685":1,"686":1,"687":1,"688":1,"689":1,"690":1,"691":1,"692":1,"693":1,"694":1,"787":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"794":1,"795":1,"816":1,"817":1,"818":1,"819":1,"820":1,"821":1,"822":1,"823":1,"824":1,"825":1,"826":1,"827":1,"828":1,"829":1,"830":1,"831":1,"832":1,"833":1,"834":1,"858":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"865":1,"866":1,"867":1,"868":1,"869":1,"870":1,"871":1,"872":1,"873":1,"874":1,"875":1,"876":1,"877":1,"985":1,"986":1,"987":1,"988":1,"989":1,"990":1,"991":1,"992":1,"1072":1,"1073":1,"1074":1,"1075":1,"1076":1,"1077":1,"1078":1,"1079":1,"1105":1,"1106":1,"1107":1,"1108":1,"1109":1,"1110":1,"1111":1,"1112":1,"1158":1,"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1,"1210":1,"1211":1,"1212":1,"1213":1,"1214":1,"1215":1,"1216":1,"1439":1,"1440":1,"1441":1,"1442":1,"1443":1,"1444":1,"1445":1,"1446":1,"1447":1,"1448":1,"1449":1,"1450":1,"1451":1,"1452":1,"1453":1,"1454":1,"1455":1,"1456":1,"1457":1,"1458":1,"1459":1,"1460":1,"1461":1,"1780":1,"1781":1,"1782":1,"1783":1,"1784":1,"1785":1,"1786":1,"1787":1,"1818":1,"1819":1,"1820":1,"1821":1,"1822":1,"1823":1,"1824":1,"1825":1,"1826":1,"1827":1,"1847":1,"1848":1,"1849":1,"1850":1,"1851":1,"1852":1,"1853":1,"1878":1,"1879":1,"1880":1,"1881":1,"1882":1,"1883":1,"1884":1,"1885":1,"1886":1,"1925":1,"1926":1,"1927":1,"1928":1,"1929":1,"1930":1,"1931":1,"1932":1,"1933":1,"1934":1,"1935":1,"1936":1,"1937":1,"1938":1,"1939":1,"1940":1,"1941":1,"1973":1,"1974":1,"1975":1,"1976":1,"1977":1,"1978":1,"1979":1,"1980":1,"1981":1,"1982":1,"1983":1,"1984":1,"1985":1,"1986":1,"1987":1,"1988":1,"1989":1,"1990":1,"1991":1,"2029":1,"2030":1,"2031":1,"2032":1,"2033":1,"2034":1,"2035":1,"2036":1,"2037":1,"2038":1,"2061":1,"2062":1,"2063":1,"2064":1,"2065":1,"2066":1,"2067":1,"2068":1,"2069":1,"2081":2,"2082":2,"2083":2,"2084":2,"2085":2,"2086":2,"2109":1,"2110":1,"2111":1,"2112":1,"2113":1,"2114":1,"2115":1,"2147":1,"2148":1,"2149":1,"2150":1,"2151":1,"2152":1,"2153":1,"2154":1,"2155":1,"2156":1,"2157":1,"2158":1,"2159":1,"2160":1,"2161":1,"2162":1,"2163":1,"2164":1,"2165":1,"2166":1,"2167":1,"2168":1,"2169":1,"2181":1,"2182":1,"2183":1,"2184":1,"2185":1,"2186":1,"2187":1,"2188":1,"2189":1,"2190":1,"2191":1,"2192":1,"2193":1,"2194":1,"2195":1,"2196":1,"2197":1,"2198":1,"2199":1,"2200":1,"2201":1,"2202":1,"2203":1},"2":{"260":1,"319":1,"545":1,"1082":1,"1504":1,"1814":1,"2105":1},"3":{"0":938,"1":12,"3":1,"5":1,"10":2,"15":13,"16":1,"17":1,"18":2,"19":6,"20":9,"21":7,"22":3,"23":6,"24":29,"25":6,"26":15,"27":23,"29":2,"30":3,"31":15,"32":6,"33":6,"34":1,"35":1,"37":2,"38":4,"39":17,"40":4,"41":4,"42":10,"43":4,"47":6,"48":2,"49":2,"52":2,"53":8,"54":5,"55":2,"57":6,"58":4,"59":13,"60":5,"61":3,"62":8,"63":4,"64":1,"66":3,"67":3,"68":8,"69":3,"70":6,"71":17,"72":14,"73":4,"74":5,"76":3,"77":5,"78":5,"79":4,"80":11,"81":10,"82":2,"85":2,"86":3,"90":2,"91":11,"92":9,"93":14,"94":12,"95":14,"96":6,"97":6,"98":7,"99":7,"100":9,"101":4,"102":5,"103":2,"104":6,"105":1,"107":3,"108":2,"109":61,"110":8,"111":10,"112":4,"113":3,"115":14,"116":4,"117":11,"118":3,"120":5,"121":12,"122":17,"123":3,"124":2,"125":15,"126":18,"127":4,"128":11,"130":15,"131":2,"132":5,"133":1,"134":2,"135":63,"136":28,"137":12,"138":15,"139":23,"140":15,"141":8,"142":23,"143":4,"144":1,"145":22,"146":6,"147":11,"148":3,"149":4,"150":22,"151":3,"152":6,"153":3,"155":7,"156":2,"157":20,"158":3,"159":10,"160":20,"161":10,"162":1,"164":9,"165":3,"166":21,"167":2,"168":8,"169":2,"170":12,"171":8,"173":11,"174":5,"175":25,"176":4,"177":8,"178":19,"179":9,"180":11,"181":3,"182":7,"184":9,"185":3,"186":23,"187":5,"188":4,"189":14,"190":5,"191":1,"193":6,"194":4,"195":29,"196":2,"197":4,"198":3,"199":2,"200":11,"201":27,"202":12,"203":6,"206":5,"207":10,"208":1,"209":5,"210":1,"212":9,"213":9,"214":15,"215":5,"216":4,"217":10,"218":4,"219":18,"220":12,"221":1,"223":3,"224":2,"225":19,"226":1,"227":1,"228":3,"229":3,"230":24,"231":5,"232":1,"233":5,"234":9,"235":30,"236":2,"237":10,"238":3,"239":3,"241":10,"242":8,"243":36,"244":2,"245":20,"246":2,"247":6,"248":8,"249":4,"250":5,"251":3,"252":10,"253":5,"254":13,"255":26,"256":22,"257":20,"258":25,"259":32,"260":20,"261":18,"263":2,"264":3,"265":57,"266":5,"267":4,"268":5,"269":2,"272":2,"273":8,"274":3,"275":4,"276":5,"277":2,"278":1,"279":8,"280":6,"281":8,"282":7,"283":7,"284":5,"285":5,"286":7,"287":1,"290":6,"291":6,"292":4,"293":2,"294":1,"295":8,"296":7,"298":3,"299":1,"300":4,"301":3,"303":9,"304":2,"305":12,"306":5,"308":2,"309":4,"310":12,"311":3,"312":4,"313":1,"314":5,"316":1,"317":4,"318":29,"319":7,"320":3,"321":2,"322":4,"323":5,"324":12,"325":9,"326":11,"328":5,"329":5,"330":13,"331":5,"332":7,"333":10,"335":8,"336":3,"337":4,"339":1,"340":8,"341":27,"342":7,"343":13,"344":4,"345":6,"346":5,"348":6,"349":6,"350":35,"351":9,"352":6,"353":9,"354":4,"355":1,"358":4,"359":27,"360":10,"361":16,"363":2,"364":2,"365":16,"366":3,"368":6,"369":13,"370":14,"371":5,"372":4,"373":16,"374":8,"375":7,"376":3,"378":2,"379":5,"380":5,"381":3,"382":1,"383":4,"384":8,"386":11,"387":7,"388":10,"389":1,"390":14,"391":14,"392":10,"393":5,"394":1,"395":33,"396":6,"397":34,"398":7,"399":13,"400":9,"401":16,"402":19,"403":11,"404":9,"405":8,"406":6,"407":16,"408":9,"409":13,"411":3,"412":4,"413":23,"414":5,"415":10,"417":1,"418":17,"419":9,"420":9,"421":2,"422":7,"423":14,"424":6,"425":5,"426":11,"427":4,"428":17,"429":6,"430":4,"432":3,"433":5,"434":15,"435":6,"436":8,"437":1,"438":2,"439":4,"440":2,"441":2,"442":3,"443":15,"444":7,"446":4,"447":5,"448":24,"449":5,"450":5,"451":7,"452":5,"453":4,"454":10,"455":1,"457":3,"458":6,"459":27,"460":4,"461":7,"462":2,"463":12,"464":17,"465":15,"466":7,"468":13,"469":5,"470":10,"471":4,"472":6,"473":2,"474":6,"475":7,"476":7,"477":15,"478":5,"480":4,"481":4,"482":6,"483":4,"484":2,"486":11,"487":9,"488":8,"489":11,"490":26,"491":19,"492":23,"493":24,"494":17,"495":10,"496":1,"497":23,"498":8,"499":26,"500":7,"501":7,"502":6,"503":1,"505":2,"506":8,"507":28,"508":7,"509":6,"510":4,"511":8,"512":4,"513":8,"514":4,"516":3,"517":12,"518":13,"519":5,"520":5,"521":2,"522":12,"523":10,"524":11,"526":7,"527":8,"528":19,"529":5,"530":11,"531":5,"532":1,"534":19,"535":4,"536":53,"537":11,"538":17,"539":26,"540":10,"541":5,"543":21,"544":6,"545":43,"546":5,"547":14,"548":5,"549":46,"550":17,"551":17,"552":13,"554":12,"555":8,"556":32,"557":7,"558":8,"559":6,"560":4,"562":4,"563":4,"564":20,"565":5,"566":14,"567":3,"570":3,"571":6,"572":45,"573":2,"574":8,"575":6,"576":8,"577":10,"578":10,"579":2,"580":1,"582":7,"583":49,"584":8,"585":21,"586":5,"589":2,"590":4,"591":33,"592":9,"593":8,"594":4,"595":2,"596":1,"597":6,"598":7,"599":36,"600":6,"601":10,"602":11,"603":7,"604":7,"605":1,"607":37,"608":13,"609":60,"610":4,"611":16,"612":4,"613":4,"614":5,"615":1,"616":10,"617":6,"618":35,"619":6,"620":7,"621":7,"622":3,"624":11,"625":9,"626":62,"627":9,"628":11,"629":11,"630":5,"631":18,"632":14,"633":36,"634":7,"635":10,"636":11,"637":1,"638":12,"639":7,"640":33,"641":9,"642":15,"643":6,"644":6,"646":1,"647":4,"648":4,"649":39,"650":11,"651":6,"652":2,"655":5,"656":8,"657":51,"658":8,"659":11,"660":11,"661":1,"663":3,"664":8,"665":23,"666":8,"667":7,"668":9,"669":11,"670":1,"672":10,"673":4,"674":56,"675":4,"676":12,"677":8,"678":1,"679":1,"680":3,"681":7,"682":22,"683":10,"684":12,"685":3,"686":4,"687":1,"688":7,"689":10,"690":40,"691":19,"692":20,"693":6,"694":7,"696":17,"697":7,"698":51,"699":5,"700":10,"701":6,"702":14,"703":13,"705":3,"706":7,"707":40,"708":13,"709":11,"710":5,"711":6,"713":9,"714":4,"715":28,"716":10,"717":7,"718":2,"719":5,"720":6,"721":6,"723":5,"724":12,"725":38,"726":12,"727":13,"728":4,"729":2,"731":8,"732":5,"733":30,"734":4,"735":8,"736":6,"737":8,"739":2,"740":14,"741":30,"742":11,"743":22,"744":10,"745":8,"747":3,"748":5,"749":42,"750":7,"751":16,"752":2,"753":3,"755":4,"756":10,"757":34,"758":7,"759":11,"760":4,"761":7,"764":11,"765":12,"766":34,"767":11,"768":10,"769":4,"770":1,"773":11,"774":15,"775":8,"776":9,"777":6,"778":5,"780":9,"781":7,"782":27,"783":6,"784":7,"785":6,"786":1,"787":1,"788":1,"789":8,"790":32,"791":7,"792":15,"793":6,"794":6,"795":1,"797":11,"798":16,"799":23,"800":11,"801":8,"802":5,"803":14,"804":11,"805":7,"806":2,"808":1,"809":13,"810":13,"811":6,"812":5,"813":14,"814":1,"815":6,"816":1,"817":2,"818":12,"819":34,"820":9,"821":15,"822":5,"823":8,"824":1,"825":9,"826":20,"827":98,"828":6,"829":18,"830":11,"831":13,"832":37,"833":11,"834":7,"836":6,"837":22,"838":30,"839":12,"840":11,"841":5,"842":1,"844":3,"845":6,"846":12,"847":3,"848":6,"849":9,"850":2,"852":2,"853":7,"854":24,"855":8,"856":10,"857":12,"858":1,"859":3,"860":5,"861":27,"862":12,"863":18,"864":5,"865":2,"866":1,"867":4,"868":12,"869":20,"870":10,"871":6,"872":10,"873":8,"874":3,"875":13,"876":12,"877":11,"879":6,"880":8,"881":59,"882":8,"883":11,"884":9,"885":4,"888":4,"889":24,"890":8,"891":10,"892":6,"893":4,"896":12,"897":32,"898":6,"899":8,"900":5,"901":5,"903":7,"904":6,"905":73,"906":22,"907":24,"908":5,"909":5,"910":13,"912":4,"913":12,"914":36,"915":5,"916":11,"917":6,"918":5,"920":6,"921":12,"922":23,"923":11,"924":14,"925":4,"926":52,"927":8,"929":3,"930":10,"931":17,"932":6,"933":8,"934":1,"935":2,"937":3,"938":5,"939":11,"940":6,"941":6,"942":3,"944":2,"945":5,"946":30,"947":6,"948":4,"949":5,"950":2,"952":1,"953":11,"954":34,"955":9,"956":8,"957":5,"958":1,"959":5,"960":8,"962":2,"963":10,"964":28,"965":9,"966":7,"967":7,"968":4,"971":9,"972":28,"973":9,"974":7,"975":6,"976":2,"979":13,"980":37,"981":6,"982":13,"983":11,"984":3,"985":1,"986":5,"987":8,"988":47,"989":6,"990":8,"991":9,"992":5,"994":6,"995":8,"996":37,"997":10,"998":17,"999":9,"1000":3,"1002":1,"1003":7,"1004":40,"1005":5,"1006":9,"1007":5,"1008":2,"1010":2,"1011":12,"1012":36,"1013":4,"1014":7,"1016":18,"1017":14,"1018":90,"1019":23,"1020":19,"1021":10,"1022":3,"1024":3,"1025":8,"1026":26,"1027":10,"1028":6,"1029":5,"1030":3,"1032":2,"1033":11,"1034":39,"1035":10,"1036":8,"1037":8,"1040":2,"1041":12,"1042":26,"1043":17,"1044":16,"1045":7,"1046":1,"1048":4,"1049":17,"1050":53,"1051":22,"1052":15,"1053":4,"1054":10,"1055":9,"1057":3,"1058":13,"1059":48,"1060":8,"1061":9,"1062":7,"1063":1,"1065":1,"1066":16,"1067":34,"1068":10,"1069":11,"1070":3,"1071":1,"1072":1,"1073":6,"1074":32,"1075":25,"1076":5,"1077":5,"1078":4,"1079":6,"1081":4,"1082":15,"1083":11,"1084":4,"1085":7,"1086":3,"1087":2,"1089":17,"1090":16,"1091":75,"1092":17,"1093":22,"1094":12,"1095":9,"1096":8,"1099":11,"1100":28,"1101":6,"1102":6,"1103":5,"1104":3,"1105":1,"1107":7,"1108":13,"1109":3,"1110":3,"1111":4,"1112":3,"1114":3,"1115":14,"1116":43,"1117":18,"1118":8,"1119":7,"1120":1,"1122":2,"1123":11,"1124":42,"1125":10,"1126":8,"1127":10,"1128":6,"1129":5,"1132":12,"1133":27,"1134":5,"1135":8,"1136":2,"1137":3,"1139":3,"1140":13,"1141":3,"1142":6,"1143":2,"1144":10,"1145":2,"1146":1,"1147":2,"1149":3,"1150":10,"1151":2,"1152":5,"1153":3,"1154":9,"1155":2,"1156":2,"1157":6,"1158":1,"1160":5,"1161":25,"1162":5,"1163":4,"1164":3,"1167":6,"1168":30,"1169":6,"1170":6,"1171":3,"1173":1,"1174":5,"1175":28,"1176":7,"1177":5,"1178":5,"1179":2,"1180":2,"1182":3,"1183":8,"1184":30,"1185":10,"1186":8,"1187":10,"1188":5,"1189":3,"1190":5,"1191":12,"1192":14,"1193":3,"1194":1,"1195":3,"1196":2,"1200":4,"1201":7,"1202":29,"1203":29,"1210":1,"1211":14,"1212":168,"1213":20,"1214":9,"1215":4,"1216":4,"1217":8,"1218":9,"1219":8,"1220":17,"1221":4,"1222":7,"1223":11,"1224":3,"1225":8,"1226":3,"1227":4,"1228":11,"1229":235,"1230":21,"1231":27,"1232":13,"1233":13,"1234":30,"1235":7,"1236":16,"1237":398,"1238":16,"1239":22,"1240":15,"1241":45,"1242":24,"1243":27,"1244":29,"1245":7,"1246":11,"1247":525,"1248":9,"1249":14,"1250":4,"1251":10,"1252":20,"1253":15,"1254":8,"1255":7,"1256":18,"1257":14,"1258":8,"1259":635,"1260":22,"1261":8,"1262":14,"1263":51,"1264":19,"1265":42,"1266":11,"1267":21,"1268":6,"1269":25,"1270":881,"1271":241,"1272":11,"1273":31,"1274":24,"1275":39,"1276":31,"1277":16,"1278":32,"1279":18,"1280":25,"1281":33,"1282":16,"1283":17,"1284":22,"1285":22,"1286":2531,"1287":23,"1288":12,"1289":27,"1290":33,"1291":12,"1292":11,"1293":28,"1294":21,"1295":15,"1296":10,"1297":36,"1298":10,"1299":3,"1300":1781,"1301":336,"1302":17,"1303":12,"1304":26,"1305":10,"1306":12,"1307":21,"1308":11,"1309":597,"1310":141,"1311":1585,"1312":202,"1313":20,"1314":5,"1315":20,"1316":35,"1317":27,"1318":30,"1319":4,"1320":40,"1321":1,"1322":29,"1323":1381,"1324":2667,"1325":13,"1326":26,"1327":8,"1328":39,"1329":6,"1330":13,"1331":8,"1332":36,"1333":40,"1334":18,"1335":15,"1336":29,"1337":29,"1338":33,"1339":1199,"1340":15,"1341":14,"1342":53,"1343":19,"1344":28,"1345":11,"1346":15,"1347":43,"1348":16,"1349":19,"1350":1268,"1351":10,"1352":52,"1353":41,"1354":20,"1355":38,"1356":11,"1357":23,"1358":21,"1359":4203,"1360":9,"1361":2,"1362":33,"1363":10,"1364":21,"1365":7,"1366":47,"1367":11,"1368":14,"1369":384,"1370":7,"1371":22,"1372":17,"1373":29,"1374":12,"1375":27,"1376":11,"1377":14,"1378":19,"1379":22,"1380":720,"1381":8,"1382":20,"1383":23,"1384":26,"1385":21,"1386":6,"1387":13,"1388":16,"1389":28,"1390":16,"1391":23,"1392":16,"1393":14,"1394":7,"1395":2486,"1396":2605,"1397":10,"1398":22,"1399":34,"1400":21,"1401":22,"1402":1114,"1403":11,"1404":18,"1405":20,"1406":42,"1407":11,"1408":19,"1409":26,"1410":24,"1411":10,"1412":11,"1413":18,"1414":30,"1415":1412,"1416":349,"1417":1142,"1418":15,"1419":9,"1420":13,"1421":22,"1422":24,"1423":21,"1424":19,"1425":19,"1426":10,"1427":250,"1428":20,"1429":23,"1430":32,"1431":66,"1432":29,"1433":48,"1434":11,"1435":41,"1436":4208,"1437":56,"1438":553,"1439":9,"1440":6,"1441":106,"1442":56,"1443":89,"1444":27,"1445":47,"1446":22,"1447":70,"1448":3,"1449":27,"1450":15,"1451":7,"1452":12,"1453":68,"1454":48,"1455":254,"1456":36,"1457":11,"1458":17,"1459":43,"1460":37,"1461":19,"1462":3,"1463":18,"1464":8,"1465":35,"1466":10,"1467":418,"1468":2,"1469":8,"1470":18,"1471":12,"1472":21,"1473":19,"1474":47,"1475":63,"1476":55,"1477":21,"1478":28,"1479":4,"1480":13,"1481":19,"1482":22,"1483":7,"1484":10,"1485":6,"1486":36,"1487":74,"1488":129,"1489":99,"1490":67,"1491":14,"1492":121,"1493":9,"1494":5,"1495":1,"1496":460,"1497":9,"1498":10,"1499":1,"1500":10,"1501":1,"1502":2,"1503":11,"1504":8,"1505":1,"1506":2,"1507":3,"1508":3,"1509":7,"1511":2,"1512":2,"1513":4,"1514":1,"1515":3,"1516":1,"1517":3,"1518":3,"1519":4,"1521":3,"1522":1,"1523":6,"1524":21,"1525":19,"1526":224,"1527":3,"1528":2,"1529":2,"1530":8,"1531":34,"1532":13,"1533":1,"1534":40,"1535":21,"1536":11,"1537":5,"1538":2,"1539":3,"1540":2,"1541":3,"1542":1,"1543":6,"1544":5,"1545":6,"1546":4,"1547":13,"1548":9,"1549":1,"1550":5,"1551":3,"1552":1,"1553":14,"1554":6,"1555":4,"1556":2,"1557":1,"1558":3,"1559":3,"1560":1,"1561":3,"1562":4,"1563":4,"1564":3,"1565":5,"1566":7,"1567":5,"1568":2,"1569":2,"1570":9,"1571":10,"1572":16,"1574":11,"1575":26,"1576":15,"1577":213,"1578":8,"1579":2,"1580":1,"1581":8,"1582":62,"1583":17,"1584":6,"1585":32,"1586":23,"1588":6,"1589":14,"1590":1,"1591":129,"1592":4,"1593":1,"1594":3,"1595":8,"1596":54,"1597":16,"1598":2,"1599":16,"1600":24,"1601":1,"1602":2,"1604":1,"1605":2,"1607":8,"1608":2,"1611":12,"1614":1,"1620":1,"1621":3,"1622":1,"1623":1,"1624":1,"1625":3,"1626":12,"1627":38,"1629":24,"1630":32,"1631":130,"1632":43,"1633":5,"1634":4,"1635":14,"1636":9,"1637":9,"1638":33,"1639":61,"1640":30,"1641":84,"1642":2,"1643":3,"1644":4,"1645":1,"1646":10,"1647":8,"1648":7,"1649":5,"1650":7,"1651":40,"1652":7,"1653":37,"1654":19,"1655":5,"1656":14,"1657":4,"1658":5,"1659":2,"1660":20,"1661":16,"1662":32,"1663":17,"1664":24,"1665":19,"1666":41,"1667":35,"1668":26,"1669":41,"1670":39,"1671":40,"1672":10,"1673":27,"1674":15,"1675":13,"1676":3,"1677":18,"1678":4,"1679":2,"1680":2,"1681":7,"1682":3,"1683":8,"1684":25,"1685":43,"1686":66,"1687":16,"1688":2,"1689":12,"1690":3,"1691":4,"1692":9,"1693":5,"1694":1,"1695":4,"1696":3,"1697":8,"1698":10,"1699":5,"1700":11,"1701":19,"1702":11,"1703":7,"1704":4,"1705":2,"1706":7,"1707":10,"1708":4,"1709":1,"1710":2,"1711":3,"1712":2,"1713":2,"1714":1,"1715":5,"1716":1,"1717":6,"1718":10,"1719":17,"1720":14,"1721":11,"1722":4,"1723":4,"1724":11,"1725":2,"1726":6,"1727":59,"1728":18,"1729":18,"1730":5,"1731":10,"1732":4,"1733":3,"1735":8,"1737":1,"1739":2,"1741":8,"1742":7,"1747":7,"1748":20,"1749":24,"1750":15,"1751":4,"1752":3,"1755":10,"1756":1,"1757":2,"1758":7,"1759":2,"1760":9,"1761":9,"1763":6,"1764":21,"1765":69,"1766":2,"1767":21,"1768":14,"1769":32,"1770":10,"1771":8,"1772":1,"1773":8,"1775":1,"1776":15,"1777":4,"1778":1,"1779":14,"1780":8,"1781":10,"1782":4,"1783":7,"1784":14,"1785":4,"1786":2,"1787":4,"1788":8,"1789":3,"1790":18,"1792":8,"1793":8,"1794":5,"1795":4,"1796":31,"1797":5,"1798":1,"1799":11,"1800":10,"1801":6,"1802":10,"1803":5,"1804":6,"1805":26,"1806":9,"1807":7,"1808":4,"1809":4,"1810":40,"1811":9,"1812":8,"1813":2,"1814":6,"1815":61,"1816":6,"1817":16,"1818":9,"1819":3,"1820":5,"1821":20,"1822":5,"1823":6,"1824":9,"1825":22,"1826":11,"1827":8,"1828":8,"1829":9,"1830":7,"1831":5,"1832":6,"1833":7,"1834":10,"1835":2,"1836":3,"1837":3,"1838":4,"1839":11,"1840":19,"1841":10,"1842":13,"1843":18,"1844":11,"1845":9,"1846":7,"1847":8,"1848":2,"1849":18,"1850":2,"1851":27,"1852":10,"1853":12,"1854":8,"1855":5,"1856":13,"1857":5,"1858":7,"1859":6,"1860":10,"1861":10,"1862":12,"1863":7,"1864":3,"1865":9,"1866":7,"1867":2,"1868":8,"1869":10,"1870":2,"1871":10,"1872":3,"1873":4,"1874":12,"1875":8,"1876":14,"1877":10,"1878":5,"1879":5,"1880":3,"1881":9,"1882":5,"1883":9,"1884":5,"1885":4,"1886":9,"1887":9,"1888":11,"1889":18,"1890":2,"1891":9,"1892":14,"1893":5,"1894":3,"1895":6,"1896":4,"1897":5,"1898":19,"1899":11,"1900":3,"1901":2,"1902":21,"1903":7,"1904":6,"1905":12,"1906":5,"1907":4,"1908":12,"1909":30,"1910":10,"1911":13,"1912":17,"1913":1,"1914":3,"1915":8,"1916":15,"1917":9,"1918":11,"1919":5,"1920":20,"1921":6,"1922":38,"1923":43,"1924":19,"1925":8,"1926":2,"1927":16,"1928":5,"1929":12,"1930":9,"1931":10,"1932":11,"1933":26,"1934":8,"1935":6,"1936":13,"1937":8,"1938":9,"1939":4,"1940":14,"1941":14,"1942":11,"1943":4,"1944":14,"1945":9,"1946":14,"1947":15,"1948":27,"1949":9,"1950":18,"1951":8,"1952":6,"1953":10,"1954":5,"1955":5,"1956":8,"1957":2,"1958":8,"1959":9,"1960":4,"1961":4,"1962":8,"1963":10,"1964":8,"1965":13,"1966":11,"1967":5,"1968":13,"1969":1,"1970":18,"1971":9,"1972":12,"1973":15,"1974":4,"1975":17,"1976":9,"1977":21,"1978":12,"1979":20,"1980":10,"1981":3,"1982":23,"1983":5,"1984":10,"1985":17,"1986":8,"1987":6,"1988":23,"1989":7,"1990":9,"1991":15,"1992":6,"1993":4,"1994":21,"1995":29,"1996":13,"1997":20,"1998":8,"1999":9,"2000":57,"2001":28,"2002":24,"2003":9,"2004":7,"2005":6,"2006":20,"2007":7,"2008":8,"2009":4,"2010":23,"2011":8,"2012":12,"2013":9,"2014":13,"2015":6,"2016":4,"2017":7,"2018":4,"2019":5,"2020":7,"2021":3,"2022":3,"2023":7,"2024":22,"2025":15,"2026":4,"2027":9,"2028":17,"2029":8,"2030":12,"2031":2,"2032":16,"2033":6,"2034":18,"2035":9,"2036":14,"2037":9,"2038":18,"2039":7,"2040":5,"2041":7,"2042":8,"2043":31,"2044":21,"2045":7,"2046":13,"2047":14,"2048":18,"2049":11,"2050":8,"2051":2,"2052":6,"2053":7,"2054":4,"2055":38,"2056":15,"2057":25,"2058":6,"2059":7,"2060":12,"2061":9,"2062":3,"2063":20,"2064":8,"2065":3,"2066":12,"2067":15,"2068":7,"2069":13,"2070":14,"2071":3,"2072":9,"2073":8,"2074":3,"2075":18,"2076":10,"2077":14,"2078":7,"2079":19,"2080":19,"2081":16,"2082":3,"2083":22,"2084":2,"2085":15,"2086":19,"2087":8,"2088":4,"2089":12,"2090":5,"2091":7,"2092":2,"2093":2,"2094":4,"2095":6,"2096":13,"2097":17,"2098":16,"2099":6,"2100":5,"2101":5,"2102":3,"2103":4,"2104":10,"2105":5,"2106":2,"2107":9,"2108":6,"2109":6,"2110":17,"2111":11,"2112":7,"2113":9,"2114":12,"2115":8,"2116":11,"2117":7,"2118":9,"2119":9,"2120":9,"2121":10,"2122":12,"2123":10,"2124":11,"2125":3,"2126":29,"2127":13,"2128":12,"2129":9,"2130":6,"2131":32,"2132":12,"2133":14,"2134":10,"2135":7,"2136":10,"2137":1,"2138":20,"2139":10,"2140":4,"2141":4,"2142":31,"2143":7,"2144":9,"2145":10,"2146":17,"2147":12,"2148":10,"2149":18,"2150":23,"2151":8,"2152":6,"2153":20,"2154":20,"2155":6,"2156":47,"2157":17,"2158":30,"2159":17,"2160":26,"2161":14,"2162":9,"2163":13,"2164":13,"2165":17,"2166":20,"2167":39,"2168":24,"2169":27,"2170":10,"2171":7,"2172":10,"2173":7,"2174":11,"2175":10,"2176":11,"2177":14,"2178":5,"2179":13,"2180":32,"2181":9,"2182":16,"2183":12,"2184":2,"2185":9,"2186":14,"2187":3,"2188":10,"2189":6,"2190":18,"2191":10,"2192":19,"2193":26,"2194":12,"2195":6,"2196":10,"2197":7,"2198":12,"2199":11,"2200":12,"2201":5,"2202":23,"2203":16,"2204":4,"2205":2,"2206":4,"2207":4,"2208":10,"2209":4,"2210":10,"2211":6,"2212":2,"2213":11,"2214":8,"2215":3,"2216":6,"2217":3,"2218":5,"2219":1,"2220":36,"2221":12,"2224":2,"2225":5,"2227":10,"2228":5,"2229":1,"2230":18,"2231":2,"2232":105,"2233":5,"2234":3,"2235":1,"2236":3,"2237":1,"2238":3,"2239":14,"2240":4,"2241":1,"2242":4,"2243":2,"2244":1,"2245":5}}],["ar",{"3":{"2220":2}}],["arbiter",{"3":{"691":1,"1304":1,"1309":2,"1311":1,"1396":2}}],["arbitrating",{"3":{"1436":1}}],["arbitration",{"3":{"1286":2,"1359":1}}],["arbitrated",{"3":{"1395":1,"1985":1}}],["arbitrate",{"3":{"1278":1,"1286":2,"1309":1,"1941":1}}],["arbitrates",{"3":{"0":1,"903":1,"905":2,"1286":3,"1290":1,"1300":1,"1324":1,"1934":1,"1982":1}}],["arbitrarily",{"3":{"1261":1,"1300":1,"1395":1,"1820":1}}],["arbitrary",{"3":{"0":1,"110":1,"219":1,"320":1,"332":1,"380":1,"774":1,"940":1,"1212":1,"1237":1,"1270":1,"1286":3,"1300":2,"1301":1,"1309":3,"1312":1,"1323":3,"1324":11,"1336":1,"1339":1,"1350":3,"1356":1,"1359":3,"1369":1,"1395":2,"1396":1,"1402":1,"1415":2,"1416":1,"1431":1,"1436":4,"1443":1,"1458":1,"1467":1,"1640":1,"1989":1,"1990":1,"1991":1,"1996":1,"2037":1,"2232":1}}],["archunit",{"3":{"2049":1}}],["archunitnet",{"3":{"1540":1,"2049":1}}],["archetype",{"3":{"1380":1}}],["arch",{"3":{"1214":1,"1487":1,"1489":1,"1526":6,"1530":1,"1531":1,"1532":1,"1535":2,"1577":2,"1586":1,"1591":5,"1595":1,"1597":1,"1600":1,"2042":1,"2107":1}}],["archaeology",{"3":{"838":1,"1019":1,"1300":1,"1840":1}}],["archaeological",{"3":{"88":1}}],["architected",{"3":{"2220":5,"2238":1}}],["architecting",{"3":{"2213":1,"2218":1}}],["architect",{"1":{"2212":1,"2213":1,"2214":1,"2215":1,"2216":1},"3":{"2212":1,"2213":1,"2217":1,"2218":1,"2220":3,"2224":1}}],["architecturally",{"3":{"1815":1}}],["architectural",{"0":{"1212":1,"1662":1,"2230":1},"3":{"132":1,"643":1,"1004":1,"1210":1,"1239":1,"1259":1,"1270":1,"1286":2,"1310":2,"1396":1,"1428":1,"1436":8,"1439":1,"1447":1,"1467":1,"1471":1,"1489":1,"1523":1,"1602":1,"1795":1,"1800":1,"1802":1,"2099":1,"2213":1,"2218":1,"2220":1}}],["architecturalanalysis",{"3":{"1":1,"46":1,"1190":1,"1525":1,"1526":2,"1577":2,"1582":1,"1586":1}}],["architecturemap",{"3":{"1728":1,"2097":1}}],["architecturemapbase",{"2":{"975":1,"2103":1},"3":{"972":1,"974":1,"975":1,"1199":47,"1207":2,"1428":1,"1431":5,"1436":92,"1654":1,"2042":1,"2103":1}}],["architectureremediation",{"3":{"1594":1}}],["architecturerules",{"2":{"39":1,"135":2,"136":1,"142":1,"305":1,"576":1,"657":1,"846":1,"849":1,"1431":1,"1489":1,"2043":1,"2044":2,"2102":1,"2103":1,"2138":1},"3":{"0":1,"17":1,"27":1,"39":5,"54":1,"78":1,"80":2,"81":2,"82":1,"109":1,"132":1,"135":5,"136":3,"139":3,"142":1,"147":1,"160":3,"161":1,"168":1,"171":1,"305":2,"341":2,"576":1,"657":3,"782":4,"798":1,"801":1,"804":1,"846":1,"849":1,"963":1,"966":1,"980":1,"982":1,"1004":2,"1005":1,"1006":2,"1050":1,"1074":1,"1078":1,"1083":1,"1091":1,"1160":1,"1161":3,"1162":2,"1163":2,"1168":12,"1169":1,"1170":3,"1199":68,"1207":79,"1235":1,"1236":1,"1237":5,"1239":3,"1247":3,"1259":1,"1270":1,"1286":2,"1300":5,"1311":7,"1312":6,"1324":1,"1359":1,"1415":1,"1428":1,"1431":17,"1436":369,"1489":8,"1496":4,"1524":1,"1526":3,"1531":1,"1535":1,"1576":1,"1577":9,"1582":1,"1583":1,"1586":2,"1591":1,"1596":1,"1660":1,"1671":1,"1875":1,"2042":1,"2043":1,"2044":3,"2085":1,"2102":1,"2103":1,"2138":2}}],["architecturetesthelper",{"2":{"2042":1},"3":{"1436":1,"2042":1}}],["architecturetests",{"2":{"1689":1},"3":{"80":2,"128":1,"633":1,"635":1,"636":1,"1133":2,"1136":1,"1168":1,"1436":23,"1489":1,"1689":1}}],["architectureassert",{"3":{"1199":10,"1207":2,"1428":1,"1431":4,"1436":25,"1489":1}}],["architectureevaluation",{"3":{"1193":1}}],["architectureevaluationcriteria",{"2":{"375":1,"1522":1,"1573":1,"1577":1,"1587":1},"3":{"369":2,"371":1,"375":1,"376":1,"590":1,"594":1,"860":1,"864":1,"1003":1,"1007":1,"1011":1,"1090":1,"1092":1,"1093":1,"1216":1,"1522":1,"1526":14,"1527":1,"1531":1,"1573":1,"1577":9,"1578":1,"1587":1,"1591":3,"1596":2,"1598":1,"2155":1,"2162":1,"2171":1,"2179":1,"2182":1,"2195":1}}],["architecturescorecard",{"2":{"1529":1,"1594":1},"3":{"1006":1,"1007":1,"1012":3,"1017":1,"1090":1,"1094":1,"1095":1,"1216":3,"1496":1,"1526":1,"1529":1,"1577":2,"1591":1,"1594":1,"2171":1,"2179":2,"2182":1,"2195":1}}],["architecture",{"0":{"1216":1,"1431":1,"1489":1,"1504":1,"1540":1,"1542":1,"1545":1,"1547":1,"1553":1,"1555":1,"1562":1,"1571":1,"1641":1,"1654":1,"1795":1,"2213":1,"2231":1,"2232":1},"1":{"0":1,"1":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"1485":1,"1486":1,"1487":1,"1488":1,"1489":1,"1490":1,"1491":1,"1492":1,"1493":1,"1494":1,"1518":1,"1519":1,"1520":1,"1521":1,"1522":1,"1523":1,"1524":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1531":1,"1532":1,"1533":1,"1534":1,"1535":1,"1536":1,"1537":1,"1538":1,"1539":1,"1540":1,"1541":1,"1542":1,"1543":1,"1544":1,"1545":1,"1546":1,"1547":1,"1548":1,"1549":1,"1550":1,"1551":1,"1552":1,"1553":1,"1554":1,"1555":1,"1556":1,"1557":1,"1558":1,"1559":1,"1560":1,"1561":1,"1562":1,"1563":1,"1564":1,"1565":1,"1566":1,"1567":1,"1568":1,"1569":1,"1570":1,"1571":1,"1572":1,"1573":1,"1574":1,"1575":1,"1576":1,"1577":1,"1578":1,"1579":1,"1580":1,"1581":1,"1582":1,"1583":1,"1584":1,"1585":1,"1586":1,"1587":1,"1588":1,"1589":1,"1590":1,"1591":1,"1592":1,"1593":1,"1594":1,"1595":1,"1596":1,"1597":1,"1598":1,"1599":1,"1600":1,"1794":1,"1795":1,"1796":1,"1797":1,"1798":1,"1799":1,"1800":1,"1801":1,"1802":1,"2039":1,"2040":1,"2041":1,"2042":1,"2043":1,"2044":1,"2045":1,"2046":1,"2047":1,"2048":1,"2049":1,"2099":1,"2100":1,"2101":1,"2102":1,"2103":1,"2104":1,"2105":1,"2106":1,"2107":1,"2108":1},"2":{"78":1,"80":3,"132":1,"265":1,"572":1,"1161":1,"1211":1,"1214":1,"1251":1,"1360":1,"1381":1,"1394":1,"1418":1,"1428":1,"1436":2,"1476":1,"1486":1,"1497":1,"1523":1,"1525":1,"1526":1,"1576":1,"1577":1,"1654":1,"1660":1,"1728":1,"1782":1,"2042":1,"2044":1,"2046":1,"2049":1,"2055":1,"2101":1,"2108":1,"2111":2},"3":{"0":7,"1":1,"17":2,"27":6,"39":1,"41":2,"54":2,"58":1,"59":1,"62":2,"78":1,"80":10,"81":3,"82":1,"85":1,"107":1,"109":7,"117":2,"121":6,"127":4,"128":7,"129":1,"131":1,"132":1,"135":5,"136":3,"137":2,"139":1,"140":2,"142":1,"147":4,"150":1,"160":1,"168":1,"189":1,"265":2,"305":3,"341":6,"370":1,"376":1,"381":1,"477":3,"545":7,"552":2,"565":1,"571":2,"572":16,"576":1,"585":1,"587":1,"590":1,"594":1,"609":13,"613":3,"618":1,"622":1,"631":1,"632":1,"633":1,"635":2,"657":1,"676":1,"678":1,"700":1,"718":2,"719":2,"749":6,"782":7,"798":1,"846":1,"849":1,"868":1,"881":9,"884":1,"899":1,"938":1,"939":1,"946":3,"954":1,"966":1,"971":7,"972":16,"974":4,"975":4,"980":2,"982":2,"1003":1,"1004":12,"1006":1,"1007":1,"1011":1,"1012":2,"1017":1,"1018":3,"1022":1,"1033":1,"1050":10,"1052":1,"1054":1,"1055":1,"1067":2,"1074":4,"1083":7,"1085":2,"1090":1,"1091":1,"1118":1,"1132":1,"1133":10,"1136":2,"1160":1,"1161":11,"1168":14,"1175":2,"1190":2,"1192":2,"1194":1,"1199":379,"1201":1,"1202":1,"1203":4,"1206":3,"1207":1254,"1208":6,"1210":1,"1211":5,"1212":6,"1213":1,"1214":5,"1216":7,"1217":1,"1229":2,"1230":1,"1231":1,"1232":1,"1235":1,"1236":4,"1237":35,"1239":2,"1243":1,"1247":12,"1249":1,"1251":1,"1257":2,"1259":46,"1262":4,"1263":1,"1270":16,"1271":11,"1272":2,"1286":113,"1290":1,"1300":35,"1301":5,"1303":2,"1306":1,"1309":17,"1310":8,"1311":40,"1312":12,"1313":2,"1316":3,"1322":1,"1323":48,"1324":70,"1326":1,"1339":7,"1341":5,"1343":1,"1344":1,"1345":1,"1346":1,"1349":1,"1350":35,"1352":2,"1359":83,"1360":2,"1361":1,"1369":21,"1371":3,"1377":1,"1380":15,"1381":1,"1382":1,"1389":2,"1394":1,"1395":97,"1396":72,"1402":15,"1404":3,"1409":1,"1412":1,"1415":51,"1416":7,"1417":25,"1418":1,"1427":14,"1428":6,"1431":34,"1432":1,"1436":2481,"1437":2,"1441":1,"1446":1,"1447":1,"1450":1,"1452":1,"1453":1,"1455":8,"1457":1,"1459":1,"1461":3,"1467":14,"1469":1,"1471":1,"1473":2,"1476":4,"1478":1,"1483":2,"1485":2,"1486":3,"1487":6,"1488":7,"1489":39,"1491":1,"1492":4,"1493":2,"1494":1,"1496":27,"1497":2,"1499":8,"1518":1,"1519":3,"1521":1,"1522":3,"1523":3,"1525":9,"1526":58,"1527":3,"1528":1,"1529":1,"1530":3,"1531":7,"1532":3,"1533":1,"1534":8,"1535":12,"1536":7,"1537":1,"1540":1,"1551":1,"1553":1,"1554":1,"1571":4,"1572":2,"1573":3,"1575":1,"1576":4,"1577":59,"1578":3,"1579":1,"1580":1,"1581":2,"1582":14,"1583":7,"1584":2,"1585":2,"1586":10,"1587":3,"1588":3,"1590":1,"1591":42,"1592":2,"1593":1,"1594":2,"1595":1,"1596":3,"1597":3,"1598":1,"1599":1,"1600":7,"1604":1,"1631":2,"1638":1,"1641":1,"1646":1,"1647":1,"1650":1,"1653":1,"1654":5,"1657":1,"1659":2,"1660":2,"1661":3,"1671":1,"1673":3,"1675":2,"1681":1,"1683":1,"1684":1,"1686":3,"1690":1,"1692":1,"1696":1,"1701":2,"1719":1,"1720":1,"1726":1,"1728":2,"1729":3,"1763":1,"1769":1,"1775":1,"1778":1,"1779":1,"1780":3,"1781":2,"1782":3,"1784":4,"1786":1,"1787":1,"1793":3,"1794":3,"1796":12,"1797":1,"1798":1,"1799":4,"1802":4,"1807":1,"1812":1,"1817":1,"1827":1,"1831":1,"1834":2,"1846":1,"1852":1,"1853":1,"1860":1,"1862":1,"1868":1,"1877":1,"1886":1,"1892":2,"1899":1,"1902":2,"1905":3,"1915":1,"1916":1,"1924":1,"1929":1,"1930":3,"1931":1,"1941":1,"1950":1,"1959":1,"1965":1,"1979":1,"1985":1,"1991":1,"1997":1,"2002":1,"2015":1,"2016":1,"2028":2,"2031":1,"2033":1,"2038":2,"2039":2,"2040":5,"2041":3,"2042":1,"2043":2,"2044":12,"2046":7,"2049":6,"2050":1,"2051":1,"2052":1,"2053":2,"2054":1,"2055":3,"2059":1,"2060":2,"2062":1,"2063":1,"2064":1,"2069":2,"2071":1,"2080":1,"2085":1,"2086":1,"2097":2,"2098":4,"2099":2,"2100":1,"2101":3,"2102":3,"2107":1,"2108":7,"2109":1,"2111":5,"2114":1,"2115":3,"2120":1,"2123":1,"2126":1,"2128":1,"2133":2,"2139":1,"2153":1,"2160":1,"2169":2,"2171":2,"2178":2,"2179":1,"2180":2,"2182":1,"2193":2,"2203":2,"2204":2,"2205":1,"2210":2,"2211":1,"2212":3,"2213":5,"2214":2,"2216":1,"2217":2,"2218":2,"2219":4,"2220":4,"2221":4,"2224":1,"2225":1,"2226":3,"2227":3,"2230":2,"2232":1,"2233":3,"2236":1,"2239":6,"2242":1,"2243":2,"2244":1,"2245":3}}],["archival",{"3":{"1467":1,"1568":1,"1631":1,"1678":1}}],["archivetickethandler",{"3":{"1199":1,"1207":1,"1436":5}}],["archiveticketcommand",{"3":{"1199":3,"1207":1,"1436":9}}],["archived",{"3":{"372":1,"1469":1,"1591":1,"1600":1,"1678":1}}],["archives",{"3":{"0":1,"443":1,"1467":1}}],["archive",{"0":{"1478":1},"3":{"0":1,"45":1,"47":1,"195":1,"562":1,"717":1,"764":1,"766":3,"947":1,"1116":1,"1285":1,"1286":2,"1323":1,"1342":1,"1350":1,"1389":1,"1441":1,"1455":1,"1467":6,"1469":1,"1471":1,"1473":6,"1474":7,"1475":2,"1478":4,"1482":2,"1483":3,"1484":1,"1486":1,"1534":1,"1730":1,"2034":1,"2036":3,"2124":1}}],["arthur",{"3":{"2220":1}}],["art",{"3":{"38":1}}],["articulo",{"3":{"1591":1}}],["article",{"1":{"1778":1,"1779":1},"3":{"365":1,"527":1,"1074":2,"1271":1,"1359":4,"1778":1,"1779":3,"1780":1,"1786":2,"1790":2,"1794":1,"1803":1,"1810":1,"1815":1,"1828":1,"1831":1,"1839":1,"1840":1,"1844":1,"1849":1,"1851":2,"1855":4,"1860":1,"1898":1,"1931":1,"1935":1,"1942":1,"1947":2,"1948":1,"1951":1,"1953":1,"1957":1,"1964":1,"1968":1,"1992":3,"1994":1,"1997":1,"2011":1,"2015":1,"2029":4,"2030":3,"2032":1,"2033":1,"2037":1,"2041":1,"2046":1,"2047":1,"2049":1,"2055":1,"2061":1,"2062":1,"2085":1,"2089":1,"2091":1,"2098":2,"2100":1,"2109":1,"2122":1,"2126":1,"2133":3,"2139":2,"2146":3,"2153":3,"2156":1,"2158":1,"2160":3,"2165":1,"2168":1,"2169":3,"2180":3,"2183":2,"2184":1,"2189":1,"2193":2,"2194":5,"2199":1,"2202":1,"2203":3,"2204":1,"2211":2,"2215":3,"2235":1,"2236":1,"2237":1}}],["articles",{"0":{"1779":1},"3":{"0":1,"1011":1,"1012":1,"1014":1,"1860":1,"2029":1,"2031":1,"2204":1,"2215":1,"2234":1}}],["artificial",{"3":{"1436":1,"1489":1}}],["artifacts",{"0":{"1209":1,"1482":1},"3":{"150":1,"529":1,"591":3,"837":1,"861":1,"862":1,"1191":1,"1309":2,"1359":1,"1396":1,"1427":1,"1436":1,"1454":1,"1456":3,"1461":1,"1473":2,"1482":1,"1489":2,"1490":1,"1492":2,"1496":1,"1518":1,"1553":1,"1577":1,"1591":1,"1671":1,"2047":1,"2233":1}}],["artifact",{"0":{"451":1,"1426":1},"3":{"0":2,"371":1,"373":1,"450":1,"451":2,"483":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"591":1,"609":1,"627":1,"690":1,"700":1,"709":1,"861":2,"862":1,"863":2,"873":1,"973":1,"974":1,"1019":1,"1090":1,"1216":1,"1259":1,"1270":1,"1309":4,"1311":2,"1323":2,"1339":2,"1359":2,"1396":1,"1415":1,"1416":1,"1431":2,"1433":2,"1436":13,"1445":1,"1454":2,"1455":3,"1456":3,"1465":1,"1466":1,"1471":1,"1482":1,"1483":1,"1492":2,"1496":4,"1526":1,"1577":2,"1948":1,"2045":1,"2047":1,"2132":1,"2180":1}}],["argon2id",{"3":{"1902":1,"1904":1,"1905":1}}],["argv",{"3":{"1323":1}}],["args",{"3":{"869":1,"1247":1,"1286":5,"1309":1,"1312":2,"1324":9,"1402":1,"1416":2,"1417":10,"1436":1,"1577":1}}],["arguing",{"3":{"1018":1,"1436":1}}],["argues",{"3":{"813":1,"945":1,"1017":1,"1051":1,"1259":1,"1270":1,"1286":2,"1300":1,"1323":1,"1324":1,"1339":2,"1396":5,"1436":1,"1459":1,"1952":1,"2163":1}}],["argue",{"0":{"1787":1},"3":{"465":1,"820":1,"871":1,"1436":2,"1816":2,"1833":2,"1852":2,"1946":1,"1964":1,"1996":1,"2001":1,"2048":2,"2059":1,"2079":2,"2085":2,"2122":2,"2152":2}}],["argued",{"3":{"109":2,"463":1,"716":1,"799":1,"905":5,"1270":5,"1311":1,"1323":1,"1324":1,"1332":1,"1339":1,"1395":1,"1436":2,"1447":1}}],["argumentguards",{"3":{"1436":1}}],["argumentguardfixture",{"3":{"1199":2,"1207":1,"1436":2}}],["argumenttypes",{"3":{"1286":3}}],["argumentoutofrangeexception",{"2":{"1229":1,"1399":1},"3":{"1229":2,"1300":1,"1399":1,"1402":1,"1436":4}}],["argumentexception",{"2":{"359":1,"1221":1,"1237":1,"1247":1,"1312":1,"1427":1,"2142":1},"3":{"359":1,"897":1,"1221":1,"1229":3,"1237":2,"1247":2,"1270":1,"1286":4,"1300":9,"1309":2,"1311":3,"1312":1,"1323":4,"1324":5,"1339":1,"1396":1,"1416":1,"1417":11,"1427":2,"1436":3,"2142":1}}],["argumentnullexception",{"2":{"359":1,"897":1,"1070":1,"1229":1,"1328":1,"2142":1},"3":{"359":1,"897":1,"1067":1,"1070":1,"1229":2,"1237":2,"1247":3,"1259":1,"1270":1,"1271":4,"1286":2,"1309":6,"1310":1,"1311":1,"1312":1,"1323":2,"1324":4,"1328":1,"1339":3,"1350":2,"1359":12,"1380":2,"1395":5,"1396":10,"1402":3,"1415":2,"1417":2,"1436":8,"2142":1}}],["arguments",{"3":{"0":1,"39":1,"43":1,"81":1,"95":1,"126":1,"135":1,"388":1,"474":1,"640":1,"799":1,"837":1,"861":1,"946":1,"1059":2,"1091":1,"1095":1,"1168":1,"1229":1,"1240":1,"1247":9,"1259":2,"1270":1,"1271":3,"1286":13,"1297":1,"1300":13,"1309":3,"1311":10,"1323":6,"1324":23,"1339":6,"1353":1,"1359":27,"1369":1,"1389":1,"1395":3,"1396":18,"1406":1,"1415":5,"1416":1,"1417":4,"1436":15,"1438":1,"1442":1,"1475":1,"1496":1,"1524":1,"1526":1,"1531":1,"1535":1,"1667":1,"1701":1,"1727":1,"2024":1,"2194":1,"2196":1,"2203":1}}],["argument",{"0":{"1825":1},"2":{"1989":1},"3":{"0":4,"26":1,"31":2,"93":1,"98":1,"109":1,"122":1,"135":2,"150":1,"160":1,"175":1,"186":2,"209":1,"259":1,"265":1,"266":1,"303":1,"318":4,"320":1,"341":1,"350":2,"359":1,"422":1,"460":1,"539":1,"545":2,"551":1,"556":2,"559":1,"565":1,"691":1,"707":1,"716":1,"724":1,"733":1,"749":2,"799":3,"801":2,"809":1,"811":1,"813":1,"827":4,"837":1,"838":1,"839":3,"855":1,"867":2,"875":1,"897":1,"905":1,"917":1,"946":2,"964":2,"1049":1,"1059":1,"1062":1,"1092":1,"1093":1,"1108":1,"1116":1,"1119":1,"1156":1,"1157":1,"1162":1,"1168":1,"1170":1,"1220":1,"1229":1,"1237":6,"1244":1,"1247":33,"1253":1,"1259":5,"1263":1,"1266":1,"1270":11,"1271":4,"1286":34,"1292":1,"1297":1,"1300":22,"1301":4,"1309":10,"1310":6,"1311":11,"1312":1,"1323":9,"1324":23,"1328":1,"1339":9,"1350":5,"1359":44,"1369":5,"1380":5,"1382":1,"1395":19,"1396":38,"1402":3,"1415":24,"1417":5,"1427":6,"1432":1,"1436":71,"1442":1,"1445":1,"1453":1,"1455":4,"1459":1,"1465":1,"1475":1,"1489":1,"1490":1,"1577":1,"1638":1,"1656":2,"1667":1,"1685":2,"1701":2,"1730":1,"1788":1,"1806":1,"1807":1,"1821":1,"1826":1,"1827":1,"1859":1,"1874":1,"1898":1,"1904":1,"1946":1,"1952":1,"1971":1,"1975":1,"1977":1,"1989":2,"1994":2,"1995":1,"1996":1,"2024":1,"2025":2,"2072":1,"2126":1,"2135":1,"2142":1,"2170":1,"2180":1,"2195":1}}],["arg",{"2":{"871":1},"3":{"0":1,"91":1,"869":2,"871":1,"1212":1,"1286":3,"1311":1,"1402":1,"1445":2,"1455":3,"1466":2}}],["arise",{"3":{"1286":1}}],["arithmetically",{"3":{"1436":1}}],["arithmetic",{"0":{"1242":1},"3":{"335":1,"628":1,"658":1,"760":1,"799":1,"803":1,"804":1,"805":1,"1019":1,"1051":1,"1054":1,"1237":4,"1242":2,"1243":1,"1247":4,"1254":1,"1259":1,"1309":1,"1323":1,"1324":1,"1339":2,"1350":1,"1359":3,"1366":1,"1369":1,"1396":3,"1436":5,"1438":2,"1474":2,"1475":2,"1496":1,"1815":1}}],["arity",{"3":{"0":2,"328":1,"921":1,"924":1,"926":1,"1270":4,"1289":1,"1300":3,"1311":3,"1436":23,"1496":4,"1671":1}}],["ariarole",{"3":{"1436":4}}],["arial",{"3":{"1324":1}}],["arialabel",{"3":{"1324":6}}],["aria",{"3":{"0":1,"412":1,"618":2,"620":1,"1324":15,"1389":1,"1395":5,"1396":1,"1402":1,"1415":1,"1417":5,"1433":1,"1436":7,"1488":2,"1526":3,"1558":1,"1577":2,"1591":2,"1596":1,"1605":1,"1607":2,"1643":3,"1644":1,"1739":1,"1741":2,"2057":1}}],["arrows",{"3":{"1339":1,"1505":1,"1517":1,"2039":2}}],["arrow",{"3":{"1195":1,"1259":1,"1309":1,"1310":1,"1311":1,"1417":1,"1436":3,"1503":1}}],["arriving",{"3":{"1":1,"159":1,"202":2,"352":1,"428":1,"702":1,"809":1,"845":1,"1049":1,"1067":1,"1109":1,"1184":1,"1249":1,"1311":1,"1324":4,"1359":1,"1366":2,"1396":1,"1415":1,"1417":1,"1436":1,"1438":1,"1467":1,"1639":1,"1909":1,"1911":1,"2166":1,"2181":1}}],["arrive",{"3":{"21":1,"24":1,"110":1,"235":1,"402":1,"548":1,"549":1,"585":1,"601":1,"674":1,"678":1,"684":1,"717":1,"774":1,"789":1,"829":1,"870":1,"880":1,"965":1,"979":1,"1020":1,"1033":1,"1093":1,"1123":1,"1153":1,"1229":1,"1237":1,"1241":1,"1247":1,"1259":3,"1270":1,"1273":1,"1281":1,"1300":4,"1309":2,"1311":3,"1317":1,"1318":1,"1324":6,"1339":3,"1350":2,"1359":6,"1364":1,"1369":1,"1380":1,"1382":1,"1395":5,"1396":10,"1402":2,"1415":2,"1417":2,"1436":1,"1438":2,"1443":1,"1453":1,"1467":2,"1468":1,"1641":1,"1664":1,"1673":1,"1682":1,"1685":1,"1686":1,"1694":1,"1727":1,"1792":1,"1890":1,"1909":1,"1934":1,"1944":1,"2000":1,"2179":1,"2194":1}}],["arrived",{"3":{"0":1,"423":1,"563":1,"696":1,"728":1,"790":1,"809":2,"813":1,"1259":1,"1270":3,"1287":1,"1293":2,"1300":3,"1309":2,"1312":1,"1324":2,"1359":2,"1395":4,"1396":1,"1402":2,"1415":1,"1436":3,"1489":1,"1496":1,"1686":1,"1727":1,"1759":1,"1765":2,"1806":1,"1875":1,"1890":1,"2093":1,"2158":1,"2167":1}}],["arrives",{"3":{"0":3,"113":1,"148":1,"255":1,"265":1,"350":1,"353":1,"390":1,"403":1,"415":1,"423":1,"535":2,"539":1,"573":1,"583":1,"631":1,"633":1,"673":1,"674":1,"689":1,"692":1,"698":2,"714":1,"741":1,"827":1,"829":1,"831":1,"869":1,"881":1,"897":1,"914":1,"1018":1,"1050":1,"1091":1,"1123":1,"1232":1,"1237":1,"1247":1,"1259":1,"1261":1,"1271":1,"1286":5,"1300":4,"1301":1,"1305":1,"1309":1,"1311":2,"1320":1,"1323":4,"1324":11,"1326":1,"1335":1,"1339":6,"1350":1,"1358":2,"1359":18,"1366":1,"1369":2,"1380":3,"1395":20,"1396":20,"1401":1,"1402":6,"1415":6,"1417":3,"1433":1,"1436":8,"1442":1,"1443":1,"1444":1,"1447":3,"1452":1,"1455":1,"1476":1,"1488":1,"1626":1,"1661":1,"1685":2,"1686":2,"1700":1,"1724":1,"1727":3,"1728":1,"1749":1,"1815":1,"1883":1,"1890":1,"1909":1,"1911":1,"1922":1,"1960":1,"1992":1,"2016":1,"2027":1,"2041":1,"2067":1,"2089":1,"2101":1,"2149":1,"2150":1,"2154":1,"2161":2,"2167":2,"2169":1}}],["arrivals",{"3":{"1396":1}}],["arrival",{"3":{"0":2,"635":1,"689":1,"691":1,"726":1,"1286":1,"1379":1,"1395":2,"1396":19,"1416":1,"1432":1,"1436":1,"1467":1,"1631":1,"1661":1,"1686":1,"1699":1,"1727":2,"1915":2,"2000":1,"2002":1}}],["arranging",{"3":{"1671":1}}],["arranges",{"3":{"1441":1}}],["arrange",{"3":{"1436":8,"1488":2,"1824":1}}],["arranged",{"3":{"1344":1}}],["arrangement",{"3":{"0":2,"93":1,"96":1,"109":1,"837":1,"881":1,"930":1,"1247":1,"1286":1,"1309":1,"1311":1,"1350":1,"1359":2,"1380":1,"1395":1,"1436":3,"1438":1,"1490":1}}],["arrays",{"3":{"81":1,"696":1,"698":1,"1247":1,"1286":1,"1300":1,"1311":6,"1350":3,"1405":1,"1415":2,"1423":1,"1427":1,"1436":2,"1639":1}}],["array",{"3":{"0":3,"109":2,"111":3,"122":2,"135":1,"243":1,"260":1,"265":1,"359":1,"388":1,"393":1,"418":1,"420":1,"422":1,"423":1,"424":1,"591":1,"603":1,"609":6,"610":1,"881":1,"1175":2,"1225":1,"1229":9,"1237":1,"1239":1,"1242":2,"1247":8,"1259":3,"1263":1,"1270":2,"1271":4,"1286":13,"1300":10,"1311":10,"1323":3,"1324":4,"1339":3,"1350":6,"1359":19,"1380":2,"1391":1,"1395":7,"1396":5,"1402":1,"1415":5,"1427":2,"1436":18,"1467":10,"1473":2,"1577":1,"1586":1,"1632":1,"1640":1,"1805":4,"1851":1,"1859":1,"1922":1,"1927":1,"1929":1,"1976":1,"2158":2}}],["armphasetimerforeventend",{"3":{"1395":1}}],["arming",{"3":{"539":1,"1300":4,"1600":1,"2197":1}}],["armasync",{"2":{"814":1},"3":{"539":1,"540":1,"814":1}}],["armed",{"3":{"0":1,"534":2,"536":2,"537":1,"539":2,"905":1,"909":1,"1300":4,"1383":1,"1416":2,"1427":1}}],["arm",{"3":{"0":4,"62":1,"63":1,"164":1,"166":2,"171":1,"609":1,"610":1,"611":1,"626":1,"756":3,"758":1,"766":1,"814":1,"1034":2,"1075":4,"1100":1,"1247":13,"1270":4,"1286":1,"1311":4,"1323":1,"1339":1,"1395":4,"1396":4,"1402":6,"1415":1,"1416":2,"1417":3,"1436":10,"1455":5,"1459":1,"1464":1,"1466":2,"1467":11,"1470":1,"1472":3,"1475":1,"1481":1,"1589":1,"1591":1,"1596":1,"1597":1,"1686":1,"2000":1,"2034":1,"2158":1,"2197":1,"2219":1,"2220":1}}],["arms",{"3":{"0":3,"539":3,"794":1,"809":1,"813":2,"905":1,"1042":1,"1045":1,"1247":2,"1270":1,"1286":1,"1290":1,"1300":5,"1324":2,"1337":1,"1359":1,"1393":1,"1395":3,"1396":1,"1416":1,"1417":2,"1436":1,"1917":1,"2161":1,"2165":1,"2167":2,"2197":1}}],["around",{"0":{"1387":1},"3":{"0":2,"24":1,"58":1,"62":1,"71":1,"109":1,"113":1,"118":1,"126":1,"138":1,"150":1,"155":1,"260":1,"265":1,"281":1,"285":1,"396":1,"463":1,"534":1,"555":1,"607":5,"627":1,"638":2,"642":1,"650":1,"655":1,"684":1,"733":1,"764":1,"819":3,"826":1,"827":1,"836":1,"921":1,"926":1,"971":1,"987":1,"1019":1,"1020":1,"1043":1,"1049":1,"1051":1,"1066":1,"1090":1,"1133":1,"1169":1,"1229":1,"1237":2,"1246":1,"1247":3,"1256":1,"1259":4,"1260":1,"1262":1,"1267":1,"1270":6,"1286":5,"1290":1,"1291":1,"1294":2,"1300":11,"1309":4,"1310":2,"1311":4,"1313":1,"1322":1,"1323":4,"1324":9,"1339":3,"1350":5,"1352":1,"1353":1,"1355":1,"1357":1,"1359":19,"1369":2,"1375":1,"1380":3,"1395":5,"1396":11,"1402":7,"1403":1,"1415":5,"1416":1,"1417":4,"1435":1,"1436":9,"1438":6,"1467":2,"1481":1,"1488":1,"1496":6,"1537":1,"1557":1,"1585":1,"1635":1,"1640":1,"1641":1,"1643":1,"1651":2,"1675":1,"1700":1,"1712":1,"1720":1,"1749":1,"1790":1,"1797":1,"1811":1,"1818":1,"1827":1,"1851":1,"1904":1,"1958":1,"1966":1,"2032":1,"2038":1,"2062":1,"2072":1,"2075":2,"2079":2,"2110":1,"2154":1,"2156":1,"2174":1,"2178":1,"2180":1,"2209":1}}],["areflagged",{"3":{"1436":10}}],["areflaggedundertheirsourcemember",{"3":{"1436":4}}],["arepinnedtooneversion",{"3":{"1436":2}}],["arecomplete",{"3":{"1436":3}}],["areidentical",{"3":{"1436":1}}],["arestserviceanswersoverh2c",{"2":{"1449":1},"3":{"1339":1,"1449":1}}],["arerestricted",{"2":{"1083":1},"3":{"1083":1,"1436":3}}],["areexplicitlyoptedin",{"2":{"1083":1},"3":{"1083":1,"1436":3}}],["arediscovered",{"2":{"609":1},"3":{"609":1,"1436":6}}],["areaccepted",{"3":{"1436":1}}],["areallowlisted",{"3":{"1436":2}}],["areas",{"0":{"1388":1,"1392":1},"3":{"1350":1,"1395":1,"1431":1,"1763":1}}],["areaof",{"3":{"1324":2}}],["area",{"3":{"442":1,"801":1,"1058":1,"1300":1,"1311":1,"1323":1,"1324":6,"1381":2,"1389":1,"1392":2,"1394":2,"1395":3,"1396":1,"1414":1,"1455":1,"1480":1,"1489":2,"1714":1,"2126":2}}],["are",{"0":{"93":1,"1317":1,"1363":1,"1473":1,"1521":1,"1804":1,"2144":1,"2200":1},"1":{"1105":1,"1106":1,"1107":1,"1108":1,"1109":1,"1110":1,"1111":1,"1112":1,"1863":1,"1864":1,"1865":1,"1866":1,"1867":1,"1868":1,"2029":1,"2030":1,"2031":1,"2032":1,"2033":1,"2034":1,"2035":1,"2036":1,"2037":1,"2038":1},"2":{"453":1},"3":{"0":102,"3":1,"4":1,"10":1,"12":1,"13":1,"15":1,"16":1,"17":4,"19":3,"21":2,"22":1,"23":3,"24":2,"26":2,"27":3,"30":1,"31":1,"33":1,"34":1,"39":7,"41":3,"43":1,"46":1,"47":2,"54":1,"59":2,"61":1,"62":1,"63":4,"64":1,"71":2,"73":2,"74":2,"77":1,"79":1,"80":1,"81":4,"82":1,"86":1,"88":1,"93":1,"94":1,"95":3,"99":1,"100":4,"101":1,"102":1,"103":1,"108":1,"109":5,"110":2,"115":1,"117":3,"120":1,"121":3,"122":2,"123":1,"125":2,"126":3,"127":1,"128":2,"130":6,"131":1,"134":2,"135":20,"136":10,"137":5,"138":3,"139":7,"140":3,"141":3,"142":12,"145":9,"147":3,"150":7,"152":1,"153":1,"155":2,"156":1,"157":2,"159":3,"160":3,"161":2,"166":4,"168":3,"171":1,"174":2,"175":6,"177":3,"178":5,"179":1,"181":2,"184":1,"186":4,"188":3,"189":1,"193":1,"194":1,"195":2,"198":2,"199":1,"201":2,"202":4,"203":1,"206":2,"207":1,"212":1,"214":2,"216":1,"218":1,"219":5,"220":1,"221":2,"224":2,"226":1,"229":1,"230":4,"231":3,"233":2,"235":4,"241":3,"242":2,"243":5,"244":2,"245":3,"246":3,"249":1,"250":2,"252":1,"253":2,"254":4,"255":4,"256":2,"257":1,"258":1,"259":4,"260":3,"265":11,"266":1,"267":1,"272":1,"274":1,"276":2,"281":1,"283":1,"285":2,"293":1,"295":1,"300":1,"302":1,"305":2,"306":1,"308":1,"309":1,"310":2,"312":1,"316":1,"317":2,"318":2,"319":1,"323":1,"324":3,"326":2,"328":1,"329":1,"330":1,"331":3,"332":3,"334":1,"335":1,"337":2,"341":4,"343":1,"344":1,"345":2,"349":1,"350":4,"351":2,"353":2,"354":2,"358":1,"359":1,"360":1,"361":3,"365":2,"368":1,"369":1,"370":4,"371":1,"372":1,"373":3,"374":2,"375":3,"378":1,"379":1,"380":2,"382":1,"383":2,"384":3,"387":1,"388":2,"391":2,"392":1,"393":2,"395":6,"396":1,"397":6,"398":2,"399":3,"400":2,"402":4,"405":1,"406":1,"407":3,"408":1,"409":5,"413":4,"414":1,"418":1,"419":1,"420":3,"422":1,"425":2,"429":1,"433":1,"434":3,"435":1,"436":1,"438":2,"439":2,"440":1,"444":2,"446":1,"448":2,"449":1,"450":1,"451":2,"452":1,"453":2,"459":1,"463":2,"464":2,"465":3,"466":2,"468":1,"470":4,"471":2,"472":2,"473":2,"475":1,"477":2,"480":2,"482":2,"484":1,"486":3,"487":1,"488":2,"489":2,"490":4,"491":5,"492":4,"493":6,"494":5,"495":2,"497":6,"498":1,"500":1,"501":2,"507":1,"508":1,"509":1,"511":3,"512":1,"513":1,"514":2,"517":1,"518":1,"519":1,"522":2,"523":2,"524":2,"526":2,"527":4,"528":4,"529":1,"530":4,"531":1,"534":9,"536":5,"537":2,"538":2,"539":3,"540":3,"543":3,"544":2,"545":5,"546":2,"547":3,"549":3,"550":2,"551":4,"552":2,"555":1,"556":8,"562":2,"564":3,"565":1,"567":1,"570":1,"571":1,"572":5,"573":1,"574":3,"575":3,"577":3,"578":5,"583":7,"584":2,"585":5,"586":3,"589":2,"590":1,"591":6,"592":4,"593":4,"594":1,"599":10,"600":2,"601":3,"602":1,"604":2,"607":10,"609":3,"610":1,"611":6,"612":3,"616":4,"617":1,"618":3,"620":4,"621":2,"624":5,"626":8,"627":1,"628":1,"629":4,"632":3,"633":4,"635":2,"638":6,"639":2,"640":6,"641":4,"642":3,"643":1,"644":1,"649":2,"650":3,"651":2,"656":1,"657":7,"658":3,"659":3,"660":1,"664":1,"665":5,"666":1,"669":1,"670":1,"672":2,"673":1,"674":5,"675":1,"676":2,"677":2,"680":1,"681":2,"682":4,"683":1,"684":3,"685":1,"688":1,"689":1,"690":10,"691":5,"692":3,"693":1,"698":7,"699":2,"700":5,"702":1,"703":2,"707":5,"708":3,"713":1,"714":1,"715":5,"717":2,"720":2,"721":1,"724":1,"725":4,"726":2,"727":1,"729":1,"731":1,"732":1,"733":2,"735":1,"736":2,"740":1,"741":5,"743":3,"744":2,"747":2,"749":7,"751":7,"755":1,"756":2,"758":1,"759":1,"760":3,"761":1,"764":5,"766":6,"767":1,"768":2,"769":1,"774":3,"775":1,"776":3,"780":2,"782":3,"784":2,"785":1,"786":1,"789":1,"790":3,"794":1,"797":1,"798":2,"799":5,"800":1,"801":1,"802":1,"803":6,"804":2,"805":4,"809":3,"810":3,"813":1,"814":1,"818":3,"819":5,"821":3,"822":1,"825":5,"826":5,"827":16,"828":1,"829":6,"830":3,"831":2,"832":6,"833":4,"836":1,"837":2,"838":4,"840":5,"844":1,"846":1,"848":2,"849":3,"850":2,"853":1,"854":2,"855":1,"857":1,"860":3,"861":6,"862":1,"863":2,"864":1,"867":2,"868":4,"869":1,"871":3,"872":3,"873":2,"874":2,"875":4,"876":3,"877":1,"879":2,"880":1,"881":5,"882":1,"883":4,"884":3,"889":2,"891":1,"892":2,"897":3,"900":2,"903":1,"904":2,"905":10,"906":2,"907":2,"910":2,"912":1,"913":1,"914":4,"916":2,"917":1,"918":1,"922":1,"923":2,"924":1,"926":4,"927":2,"930":2,"931":3,"932":2,"938":1,"941":1,"944":1,"946":5,"949":1,"953":1,"954":1,"958":1,"959":1,"960":1,"963":3,"964":8,"966":3,"967":1,"968":1,"971":1,"972":4,"973":3,"974":2,"975":1,"979":1,"980":6,"981":3,"982":3,"983":2,"986":1,"987":1,"988":6,"989":1,"991":2,"995":1,"996":3,"998":1,"999":1,"1003":1,"1004":6,"1005":1,"1006":2,"1011":1,"1012":3,"1014":1,"1016":3,"1017":1,"1018":15,"1019":1,"1020":2,"1021":3,"1024":2,"1025":1,"1026":3,"1027":1,"1028":1,"1029":1,"1030":2,"1032":1,"1033":2,"1034":8,"1036":1,"1037":2,"1042":2,"1043":1,"1044":1,"1049":2,"1050":9,"1051":3,"1052":8,"1054":5,"1055":4,"1058":2,"1059":8,"1061":2,"1065":1,"1067":6,"1069":3,"1073":1,"1074":8,"1075":5,"1077":1,"1078":2,"1079":1,"1082":3,"1083":1,"1084":1,"1085":1,"1089":1,"1090":1,"1091":12,"1092":4,"1093":7,"1095":1,"1096":1,"1099":1,"1100":2,"1101":1,"1102":1,"1103":1,"1105":1,"1107":1,"1108":4,"1115":1,"1116":7,"1117":4,"1118":3,"1119":2,"1123":2,"1124":6,"1125":1,"1126":3,"1127":1,"1128":1,"1133":2,"1135":1,"1140":3,"1142":1,"1143":1,"1150":2,"1152":1,"1160":1,"1161":4,"1163":3,"1168":10,"1169":1,"1174":1,"1175":4,"1176":1,"1178":1,"1182":1,"1184":4,"1186":1,"1188":1,"1190":1,"1191":10,"1193":2,"1196":4,"1200":1,"1201":4,"1202":1,"1203":2,"1211":2,"1212":21,"1213":3,"1214":3,"1215":2,"1216":1,"1217":2,"1218":5,"1220":1,"1221":2,"1222":1,"1223":3,"1225":1,"1226":3,"1227":6,"1228":1,"1229":24,"1230":2,"1231":8,"1232":4,"1233":1,"1234":6,"1235":1,"1236":5,"1237":72,"1238":4,"1239":4,"1240":2,"1241":3,"1242":1,"1243":4,"1244":3,"1246":1,"1247":73,"1248":1,"1249":4,"1251":2,"1252":4,"1253":2,"1254":2,"1256":4,"1257":1,"1258":1,"1259":54,"1260":2,"1261":3,"1262":2,"1263":6,"1264":5,"1265":3,"1266":3,"1267":4,"1269":5,"1270":113,"1271":36,"1272":1,"1273":4,"1274":2,"1275":2,"1276":6,"1277":5,"1278":4,"1279":4,"1280":4,"1281":3,"1283":7,"1284":2,"1285":5,"1286":301,"1287":3,"1288":2,"1289":4,"1290":7,"1291":3,"1292":2,"1293":4,"1294":4,"1295":2,"1296":1,"1297":7,"1298":1,"1299":1,"1300":207,"1301":40,"1302":2,"1303":1,"1304":3,"1307":4,"1309":81,"1310":38,"1311":174,"1312":27,"1313":3,"1314":2,"1315":1,"1316":6,"1317":4,"1318":6,"1319":2,"1320":5,"1321":2,"1322":3,"1323":128,"1324":280,"1325":2,"1326":4,"1328":1,"1330":3,"1332":8,"1333":5,"1334":1,"1335":1,"1336":2,"1337":3,"1338":4,"1339":178,"1341":1,"1342":13,"1343":4,"1344":6,"1345":2,"1346":3,"1347":6,"1349":6,"1350":183,"1352":3,"1353":5,"1354":2,"1355":5,"1357":3,"1358":1,"1359":503,"1362":6,"1363":2,"1364":4,"1366":6,"1367":1,"1368":4,"1369":60,"1370":3,"1371":1,"1372":1,"1373":5,"1374":2,"1375":3,"1376":1,"1377":3,"1378":2,"1379":5,"1380":98,"1382":2,"1383":6,"1384":2,"1385":1,"1389":3,"1390":2,"1391":2,"1392":4,"1393":2,"1394":3,"1395":234,"1396":360,"1397":1,"1398":9,"1399":6,"1401":4,"1402":106,"1403":3,"1405":3,"1406":7,"1407":1,"1408":2,"1409":4,"1410":2,"1411":1,"1412":1,"1413":1,"1414":5,"1415":158,"1416":47,"1417":139,"1418":2,"1421":1,"1422":3,"1423":3,"1424":6,"1425":1,"1426":1,"1427":19,"1428":4,"1429":7,"1430":3,"1431":11,"1432":1,"1433":4,"1434":3,"1435":6,"1436":566,"1437":1,"1438":57,"1441":24,"1442":12,"1443":22,"1444":5,"1445":4,"1446":2,"1447":12,"1448":1,"1449":4,"1451":1,"1452":4,"1453":16,"1454":6,"1455":50,"1456":7,"1457":5,"1458":6,"1459":2,"1460":6,"1462":3,"1463":5,"1465":7,"1466":7,"1467":62,"1468":1,"1470":4,"1471":2,"1472":7,"1473":2,"1474":11,"1475":5,"1476":5,"1477":4,"1478":2,"1479":3,"1480":2,"1481":7,"1482":1,"1484":3,"1485":5,"1486":11,"1487":4,"1488":21,"1489":19,"1490":9,"1491":2,"1492":11,"1494":1,"1495":2,"1496":61,"1497":5,"1498":4,"1499":1,"1500":5,"1502":1,"1503":2,"1507":1,"1508":3,"1509":1,"1512":1,"1515":1,"1517":3,"1519":1,"1521":2,"1523":1,"1524":4,"1525":1,"1526":35,"1527":1,"1531":16,"1532":5,"1533":1,"1534":7,"1536":4,"1537":2,"1538":2,"1539":1,"1540":1,"1541":1,"1543":3,"1544":4,"1545":3,"1546":3,"1547":6,"1548":3,"1550":1,"1551":1,"1552":1,"1553":4,"1554":3,"1555":1,"1558":1,"1562":1,"1563":2,"1565":1,"1566":1,"1568":1,"1569":1,"1570":2,"1571":3,"1572":12,"1574":2,"1575":5,"1577":41,"1578":4,"1580":2,"1581":2,"1582":7,"1583":2,"1584":2,"1585":13,"1586":2,"1588":1,"1591":20,"1592":2,"1594":2,"1596":6,"1597":3,"1599":1,"1601":1,"1605":1,"1607":3,"1611":3,"1614":1,"1621":1,"1623":1,"1626":4,"1627":6,"1630":27,"1631":74,"1632":16,"1633":6,"1634":4,"1635":17,"1636":6,"1637":3,"1638":17,"1639":48,"1640":17,"1641":30,"1644":1,"1645":3,"1646":2,"1648":1,"1649":2,"1650":1,"1651":6,"1652":3,"1653":10,"1654":2,"1656":1,"1658":1,"1661":3,"1662":4,"1664":1,"1665":1,"1666":4,"1667":2,"1668":5,"1669":1,"1670":3,"1671":3,"1672":1,"1673":2,"1675":2,"1677":9,"1679":1,"1680":3,"1682":1,"1683":2,"1684":4,"1685":7,"1686":13,"1689":2,"1691":1,"1693":2,"1695":2,"1697":2,"1698":3,"1699":1,"1700":4,"1701":4,"1702":2,"1703":1,"1706":1,"1707":1,"1708":1,"1710":1,"1712":1,"1717":1,"1718":3,"1719":2,"1720":3,"1721":3,"1727":13,"1728":3,"1729":2,"1730":1,"1731":1,"1733":1,"1734":1,"1735":1,"1736":4,"1738":3,"1739":1,"1741":3,"1742":1,"1748":6,"1749":3,"1750":4,"1751":1,"1755":4,"1758":2,"1759":2,"1760":1,"1761":4,"1764":1,"1765":19,"1766":2,"1767":4,"1769":3,"1771":1,"1772":2,"1774":1,"1776":9,"1777":2,"1779":1,"1781":2,"1782":3,"1783":2,"1784":1,"1787":1,"1788":1,"1789":3,"1790":2,"1792":2,"1794":2,"1795":1,"1796":1,"1798":1,"1799":1,"1801":3,"1802":2,"1804":4,"1805":2,"1806":3,"1807":1,"1808":2,"1809":2,"1810":9,"1811":7,"1812":4,"1814":2,"1815":10,"1816":3,"1818":3,"1819":1,"1820":1,"1821":1,"1822":2,"1823":1,"1824":1,"1825":5,"1826":3,"1828":1,"1830":1,"1832":2,"1837":1,"1838":1,"1839":1,"1840":8,"1841":3,"1842":3,"1843":2,"1844":5,"1845":3,"1848":1,"1849":1,"1850":1,"1851":2,"1852":1,"1853":2,"1854":2,"1855":1,"1856":1,"1860":1,"1861":6,"1862":1,"1863":1,"1864":1,"1865":2,"1872":1,"1875":1,"1876":2,"1879":2,"1881":1,"1883":2,"1884":1,"1885":3,"1887":1,"1888":3,"1889":1,"1890":1,"1891":3,"1892":1,"1893":1,"1896":1,"1898":2,"1899":1,"1900":2,"1901":4,"1902":3,"1903":3,"1904":2,"1905":1,"1907":2,"1909":7,"1910":1,"1911":5,"1913":1,"1915":1,"1916":2,"1917":2,"1918":1,"1919":1,"1920":6,"1921":1,"1922":4,"1923":7,"1924":1,"1927":1,"1929":1,"1931":1,"1933":2,"1934":1,"1935":3,"1936":4,"1939":1,"1940":1,"1941":1,"1942":2,"1943":1,"1944":1,"1947":1,"1948":1,"1949":5,"1950":1,"1951":2,"1952":3,"1953":4,"1954":2,"1955":1,"1956":1,"1957":1,"1958":1,"1959":2,"1960":3,"1961":3,"1962":3,"1964":8,"1966":2,"1967":1,"1968":2,"1969":3,"1971":2,"1973":3,"1977":4,"1978":1,"1979":3,"1980":1,"1981":1,"1982":1,"1983":1,"1984":3,"1986":1,"1987":2,"1988":2,"1990":4,"1992":1,"1994":2,"1995":8,"1996":2,"1997":1,"1998":2,"1999":1,"2000":8,"2001":4,"2002":2,"2004":1,"2007":1,"2009":1,"2010":5,"2011":2,"2012":1,"2013":6,"2015":1,"2020":1,"2022":1,"2024":4,"2025":2,"2027":5,"2028":1,"2029":3,"2030":4,"2033":3,"2034":2,"2035":2,"2036":2,"2037":3,"2038":2,"2040":1,"2041":2,"2042":2,"2043":6,"2044":4,"2047":2,"2048":3,"2049":1,"2051":1,"2052":1,"2053":1,"2054":3,"2055":4,"2056":3,"2057":4,"2059":1,"2060":2,"2061":2,"2062":1,"2063":2,"2064":1,"2067":2,"2068":3,"2069":2,"2070":1,"2072":2,"2074":1,"2075":1,"2077":2,"2079":3,"2080":1,"2081":4,"2083":3,"2086":2,"2087":4,"2088":4,"2090":1,"2091":1,"2095":2,"2096":2,"2097":4,"2098":7,"2100":1,"2101":5,"2103":1,"2104":3,"2105":2,"2107":3,"2108":1,"2109":5,"2110":2,"2111":4,"2112":2,"2114":1,"2115":1,"2116":1,"2117":2,"2118":1,"2121":2,"2124":4,"2125":6,"2126":3,"2127":2,"2128":2,"2130":1,"2131":3,"2132":4,"2133":2,"2134":1,"2135":1,"2136":2,"2138":5,"2139":2,"2140":3,"2142":5,"2143":2,"2144":2,"2145":3,"2146":1,"2147":1,"2148":3,"2149":3,"2150":5,"2151":1,"2152":1,"2154":4,"2156":5,"2157":4,"2158":2,"2159":6,"2160":2,"2162":1,"2163":2,"2164":3,"2165":2,"2167":4,"2168":1,"2171":3,"2172":2,"2173":1,"2174":4,"2176":2,"2177":2,"2178":1,"2179":5,"2181":1,"2182":1,"2183":1,"2185":1,"2188":2,"2189":2,"2190":2,"2191":3,"2192":1,"2195":1,"2198":2,"2199":1,"2200":2,"2201":1,"2202":4,"2203":2,"2207":1,"2209":1,"2211":5,"2214":1,"2216":1,"2227":1,"2230":5,"2232":5,"2234":2,"2242":1,"2244":1}}],["arenotthrottledevenafterthewindowisexhausted",{"3":{"1436":1}}],["arenotflagged",{"3":{"1436":10}}],["arenotificationsenabled",{"3":{"1417":1}}],["aren",{"3":{"0":1,"1538":1,"1543":1,"2162":1,"2182":1}}],["a",{"0":{"1":1,"91":1,"92":1,"93":1,"95":1,"137":1,"170":1,"451":1,"813":1,"1193":1,"1218":1,"1222":1,"1223":2,"1224":1,"1225":1,"1228":1,"1233":1,"1235":1,"1240":1,"1246":1,"1250":1,"1265":1,"1294":1,"1295":1,"1305":2,"1346":1,"1352":1,"1357":1,"1382":1,"1386":1,"1389":1,"1400":1,"1406":1,"1420":2,"1422":1,"1426":1,"1429":3,"1430":1,"1433":1,"1435":1,"1442":1,"1523":1,"1530":1,"1574":1,"1581":1,"1588":1,"1595":1,"1610":1,"1656":1,"1685":1,"1722":1,"1744":1,"1795":1,"1804":1,"1805":1,"1810":1,"1831":2,"1837":1,"1842":1,"1858":1,"1859":1,"1865":1,"1871":2,"1872":1,"1873":1,"1874":2,"1879":2,"1880":1,"1882":1,"1883":1,"1889":2,"1895":1,"1902":1,"1919":3,"1933":1,"1945":1,"1946":1,"1948":1,"1954":1,"1955":1,"1957":1,"1962":2,"1975":1,"2025":1,"2040":1,"2045":1,"2046":1,"2047":1,"2056":1,"2057":1,"2058":1,"2063":1,"2066":1,"2073":2,"2075":1,"2090":2,"2091":1,"2093":1,"2102":1,"2112":1,"2126":2,"2136":1,"2149":1,"2158":1,"2163":2,"2164":1,"2166":2,"2167":1,"2172":1,"2176":1,"2184":1,"2187":1,"2189":1,"2190":1,"2197":1,"2231":1},"1":{"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"327":1,"328":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"496":1,"497":1,"498":1,"499":1,"500":1,"501":1,"502":1,"503":1,"533":1,"534":1,"535":1,"536":1,"537":1,"538":1,"539":1,"540":1,"541":1,"561":1,"562":1,"563":1,"564":1,"565":1,"566":1,"567":1,"568":1,"569":1,"570":1,"571":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"578":1,"579":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1,"722":1,"723":1,"724":1,"725":1,"726":1,"727":1,"728":1,"729":1,"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1,"763":1,"764":1,"765":1,"766":1,"767":1,"768":1,"769":1,"770":1,"779":1,"780":1,"781":1,"782":1,"783":1,"784":1,"785":1,"786":1,"807":1,"808":1,"809":1,"810":1,"811":1,"812":1,"813":1,"814":1,"815":1,"858":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"865":1,"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":1,"951":1,"952":1,"953":1,"954":1,"955":1,"956":1,"957":1,"958":1,"959":1,"960":1,"969":1,"970":1,"971":1,"972":1,"973":1,"974":1,"975":1,"976":1,"1031":1,"1032":1,"1033":1,"1034":1,"1035":1,"1036":1,"1037":1,"1038":1,"1039":1,"1040":1,"1041":1,"1042":1,"1043":1,"1044":1,"1045":1,"1046":1,"1064":1,"1065":1,"1066":1,"1067":1,"1068":1,"1069":1,"1070":1,"1071":1,"1130":1,"1131":1,"1132":1,"1133":1,"1134":1,"1135":1,"1136":1,"1137":1,"1181":1,"1182":1,"1183":1,"1184":1,"1185":1,"1186":1,"1187":1,"1188":1,"1189":1,"1397":1,"1398":1,"1399":1,"1400":1,"1401":1,"1402":1,"1681":1,"1682":1,"1683":1,"1684":1,"1685":1,"1686":1,"1687":1,"1688":1,"1689":1,"1690":1,"1691":1,"1692":1,"1693":1,"1694":1,"1695":1,"1696":1,"1697":1,"1698":1,"1699":1,"1700":1,"1701":1,"1702":1,"1703":1,"1704":1,"1705":1,"1794":1,"1795":1,"1796":1,"1797":1,"1798":1,"1799":1,"1800":1,"1801":1,"1802":1,"1818":1,"1819":1,"1820":1,"1821":1,"1822":1,"1823":1,"1824":1,"1825":1,"1826":1,"1827":1,"1828":1,"1829":1,"1830":1,"1831":1,"1832":1,"1833":1,"1834":1,"1847":1,"1848":1,"1849":1,"1850":1,"1851":1,"1852":1,"1853":1,"1854":1,"1855":1,"1856":1,"1857":1,"1858":1,"1859":1,"1860":1,"1861":1,"1862":1,"1863":1,"1864":1,"1865":1,"1866":1,"1867":1,"1868":1,"1869":1,"1870":1,"1871":1,"1872":1,"1873":1,"1874":1,"1875":1,"1876":1,"1877":1,"1893":1,"1894":1,"1895":1,"1896":1,"1897":1,"1898":1,"1899":1,"1931":1,"1932":1,"1933":1,"1934":1,"1935":1,"1936":1,"1937":1,"1938":1,"1939":1,"1940":1,"1941":1,"2015":2,"2016":2,"2017":2,"2018":2,"2019":2,"2020":2,"2021":2,"2022":2,"2023":2,"2024":2,"2025":2,"2026":2,"2027":2,"2028":2,"2029":2,"2030":2,"2031":2,"2032":2,"2033":2,"2034":2,"2035":2,"2036":2,"2037":2,"2038":2,"2039":1,"2040":1,"2041":1,"2042":1,"2043":1,"2044":1,"2045":1,"2046":1,"2047":1,"2048":1,"2049":1,"2070":3,"2071":3,"2072":3,"2073":3,"2074":3,"2075":3,"2076":3,"2077":3,"2078":3,"2079":3,"2080":3,"2081":1,"2082":1,"2083":1,"2084":1,"2085":1,"2086":1,"2087":1,"2088":1,"2089":1,"2090":1,"2091":1,"2092":1,"2093":1,"2094":1,"2095":1,"2096":1,"2097":1,"2098":1,"2109":2,"2110":2,"2111":2,"2112":2,"2113":2,"2114":2,"2115":2,"2116":1,"2117":1,"2118":1,"2119":1,"2120":1,"2121":1,"2122":1,"2123":1,"2161":1,"2162":1,"2163":1,"2164":1,"2165":1,"2166":1,"2167":1,"2168":1,"2169":1,"2170":2,"2171":2,"2172":2,"2173":2,"2174":2,"2175":2,"2176":2,"2177":2,"2178":2,"2179":2,"2180":2},"3":{"0":949,"1":4,"5":6,"6":4,"7":2,"10":4,"11":4,"12":1,"13":1,"15":12,"17":9,"18":1,"19":14,"20":8,"21":7,"22":9,"23":7,"24":56,"25":7,"26":10,"27":21,"30":6,"31":9,"32":5,"33":5,"37":3,"38":4,"39":25,"41":8,"42":4,"43":2,"45":2,"46":5,"47":4,"48":1,"51":2,"52":4,"53":15,"54":5,"55":4,"57":5,"58":4,"59":11,"60":10,"61":4,"62":13,"63":3,"66":2,"67":6,"68":12,"69":4,"70":6,"71":20,"72":17,"73":7,"74":5,"76":4,"77":3,"78":15,"79":4,"80":11,"81":29,"82":1,"85":2,"86":1,"87":1,"88":3,"90":1,"91":11,"92":9,"93":8,"94":9,"95":7,"96":4,"97":7,"98":4,"99":12,"100":19,"101":3,"102":10,"103":8,"104":2,"107":5,"108":3,"109":98,"110":9,"111":24,"113":5,"114":1,"115":10,"116":1,"117":7,"118":1,"119":4,"120":7,"121":9,"122":40,"123":5,"124":2,"125":8,"126":21,"127":3,"128":3,"130":5,"131":3,"132":12,"133":3,"134":4,"135":65,"136":34,"137":15,"138":8,"139":16,"140":3,"141":4,"142":7,"143":1,"145":7,"146":4,"147":17,"148":7,"149":7,"150":21,"151":7,"152":1,"155":5,"156":6,"157":43,"158":8,"159":19,"160":19,"161":8,"162":2,"164":5,"165":8,"166":24,"167":6,"168":11,"170":24,"171":3,"173":6,"174":9,"175":18,"176":7,"177":20,"178":25,"179":5,"180":5,"181":3,"184":8,"185":8,"186":30,"187":6,"188":13,"189":9,"190":2,"193":9,"194":6,"195":15,"196":5,"197":6,"198":5,"199":2,"200":12,"201":31,"202":14,"203":1,"206":5,"207":4,"208":6,"209":8,"211":1,"212":5,"213":8,"214":16,"215":13,"216":12,"217":11,"218":6,"219":10,"220":3,"223":1,"224":9,"225":23,"226":5,"227":13,"228":8,"229":3,"230":20,"231":1,"233":6,"234":20,"235":47,"236":16,"237":23,"239":1,"240":1,"241":9,"242":6,"243":48,"244":3,"245":23,"246":7,"247":1,"248":7,"249":3,"250":1,"251":1,"252":1,"253":8,"254":8,"255":46,"256":10,"257":3,"258":11,"259":10,"260":3,"261":6,"263":1,"264":7,"265":78,"266":6,"267":10,"269":1,"272":4,"273":12,"275":3,"276":1,"279":6,"280":8,"281":12,"282":7,"283":12,"284":9,"285":2,"286":6,"287":1,"290":6,"291":10,"292":4,"293":9,"294":2,"295":8,"296":3,"298":5,"299":8,"300":6,"301":7,"302":10,"303":12,"304":1,"305":18,"306":2,"309":9,"310":14,"311":12,"312":14,"313":1,"314":5,"317":12,"318":50,"319":15,"320":17,"321":1,"323":1,"324":4,"325":5,"326":6,"327":1,"328":3,"329":10,"330":19,"331":4,"332":3,"333":14,"335":17,"336":2,"337":3,"339":2,"340":15,"341":50,"342":28,"343":30,"344":11,"345":3,"348":4,"349":7,"350":35,"351":9,"352":14,"353":18,"358":12,"359":36,"360":16,"361":26,"363":7,"364":1,"365":11,"366":1,"368":2,"369":7,"370":17,"371":8,"372":8,"373":18,"374":11,"375":4,"376":1,"379":6,"380":8,"381":2,"382":2,"383":7,"384":14,"386":9,"387":8,"388":11,"389":2,"390":22,"391":12,"392":7,"393":1,"395":12,"396":4,"397":27,"398":13,"399":10,"400":10,"401":14,"402":10,"403":8,"404":9,"405":7,"406":1,"407":14,"408":9,"409":5,"411":3,"412":3,"413":15,"414":4,"415":15,"416":2,"418":4,"419":6,"420":2,"421":1,"422":10,"423":2,"424":4,"425":5,"426":3,"427":10,"428":4,"429":1,"432":1,"433":8,"434":4,"435":9,"436":4,"438":2,"439":3,"440":4,"441":4,"442":7,"443":12,"444":6,"446":4,"447":11,"448":16,"449":12,"450":14,"451":10,"452":3,"454":6,"457":2,"458":12,"459":48,"460":6,"461":17,"462":4,"463":3,"464":6,"465":10,"466":2,"468":1,"469":6,"470":18,"471":2,"472":9,"473":1,"474":5,"477":4,"478":1,"481":5,"482":5,"483":7,"484":2,"485":1,"486":5,"487":3,"488":2,"489":3,"490":8,"491":8,"492":8,"493":6,"494":5,"495":3,"496":1,"497":7,"498":10,"499":23,"500":15,"501":17,"502":1,"503":2,"505":3,"506":7,"507":19,"508":4,"509":9,"511":7,"512":7,"513":7,"514":1,"516":3,"517":11,"518":22,"519":3,"520":17,"522":3,"523":4,"524":9,"526":5,"527":11,"528":18,"529":8,"530":18,"531":2,"533":1,"534":5,"535":9,"536":50,"537":18,"538":25,"539":29,"540":12,"541":5,"543":7,"544":7,"545":27,"546":13,"547":13,"548":2,"549":59,"550":8,"551":13,"552":1,"555":6,"556":16,"557":10,"558":11,"559":1,"560":1,"561":1,"562":3,"563":6,"564":28,"565":12,"566":18,"568":5,"569":1,"571":6,"572":32,"573":20,"574":16,"576":9,"577":8,"578":2,"579":3,"582":7,"583":41,"584":12,"585":36,"586":5,"587":5,"589":1,"590":10,"591":34,"592":25,"593":15,"594":1,"598":15,"599":22,"600":6,"601":12,"602":5,"603":5,"605":3,"607":9,"608":8,"609":43,"610":28,"611":12,"612":9,"613":1,"614":1,"615":1,"616":4,"617":12,"618":28,"619":12,"620":15,"622":1,"624":5,"625":19,"626":46,"627":21,"628":14,"629":5,"630":4,"631":4,"632":8,"633":43,"634":12,"635":12,"638":5,"639":7,"640":37,"641":16,"642":17,"643":4,"645":1,"648":12,"649":23,"650":23,"651":11,"652":1,"655":1,"656":14,"657":36,"658":18,"659":15,"660":5,"664":10,"665":24,"666":10,"667":12,"668":2,"669":1,"670":2,"672":2,"673":14,"674":26,"675":19,"676":29,"677":2,"678":2,"680":1,"681":16,"682":25,"683":24,"684":20,"685":2,"688":7,"689":18,"690":32,"691":41,"692":27,"693":1,"694":1,"696":4,"697":15,"698":72,"699":16,"700":17,"701":4,"702":14,"703":1,"705":1,"706":15,"707":61,"708":18,"709":28,"710":2,"711":3,"713":2,"714":15,"715":19,"716":25,"717":22,"718":6,"719":3,"720":8,"721":3,"722":1,"723":3,"724":12,"725":58,"726":24,"727":20,"728":3,"729":5,"731":5,"732":17,"733":49,"734":17,"735":19,"736":2,"737":3,"738":1,"740":24,"741":63,"742":20,"743":41,"744":3,"745":6,"747":2,"748":8,"749":25,"750":9,"751":24,"755":2,"756":7,"757":31,"758":16,"759":28,"760":6,"761":5,"762":1,"763":1,"764":4,"765":12,"766":24,"767":24,"768":17,"769":2,"770":3,"773":8,"774":7,"775":7,"776":19,"778":2,"779":1,"781":8,"782":27,"783":12,"784":23,"785":5,"786":2,"788":1,"789":14,"790":37,"791":14,"792":28,"793":11,"794":7,"795":4,"797":3,"798":16,"799":29,"800":12,"801":13,"802":4,"803":8,"804":4,"807":1,"808":2,"809":23,"810":24,"811":21,"812":10,"813":10,"814":3,"815":7,"817":1,"818":12,"819":42,"820":25,"821":20,"822":1,"823":3,"825":14,"826":21,"827":101,"828":18,"829":38,"830":12,"831":10,"832":18,"833":4,"834":2,"836":5,"837":13,"838":32,"839":18,"840":19,"842":3,"844":2,"845":8,"846":13,"847":8,"848":5,"849":5,"852":6,"853":18,"854":18,"855":13,"856":19,"857":6,"858":1,"859":2,"860":18,"861":36,"862":20,"863":18,"865":2,"867":2,"868":10,"869":12,"870":10,"871":9,"872":8,"873":8,"874":4,"875":7,"876":6,"877":1,"879":4,"880":5,"881":56,"882":20,"883":15,"884":2,"887":1,"888":9,"889":20,"890":15,"891":20,"892":1,"893":2,"896":8,"897":41,"898":18,"899":13,"900":2,"901":2,"903":13,"904":17,"905":95,"906":27,"907":36,"908":7,"909":5,"910":6,"912":4,"913":7,"914":22,"915":7,"916":14,"917":3,"918":3,"919":1,"920":14,"921":15,"922":33,"923":16,"924":11,"926":91,"927":1,"929":2,"930":16,"931":14,"932":12,"933":12,"935":1,"937":1,"938":4,"939":14,"940":9,"941":12,"942":1,"944":1,"945":10,"946":19,"947":10,"948":17,"951":1,"952":2,"953":15,"954":27,"955":16,"956":19,"957":5,"958":3,"959":2,"960":10,"963":26,"964":43,"965":20,"966":32,"967":1,"968":5,"969":1,"970":1,"971":18,"972":24,"973":20,"974":26,"975":7,"976":3,"979":16,"980":23,"981":15,"982":17,"983":1,"984":2,"986":1,"987":8,"988":45,"989":12,"990":15,"991":3,"992":1,"994":3,"995":14,"996":72,"997":14,"998":17,"999":2,"1000":3,"1003":13,"1004":28,"1005":14,"1006":14,"1007":1,"1008":3,"1010":1,"1011":9,"1012":19,"1013":9,"1014":1,"1016":6,"1017":24,"1018":101,"1019":52,"1020":39,"1021":4,"1022":4,"1024":1,"1025":11,"1026":20,"1027":13,"1028":21,"1029":7,"1030":4,"1031":1,"1032":2,"1033":24,"1034":31,"1035":13,"1036":13,"1037":4,"1038":1,"1039":1,"1040":4,"1041":10,"1042":40,"1043":22,"1044":17,"1045":4,"1046":2,"1048":6,"1049":12,"1050":59,"1051":31,"1052":29,"1053":3,"1054":1,"1055":7,"1058":16,"1059":42,"1060":19,"1061":14,"1064":1,"1065":2,"1066":25,"1067":59,"1068":19,"1069":15,"1070":2,"1071":3,"1073":1,"1074":19,"1075":19,"1076":15,"1077":11,"1078":1,"1079":4,"1082":13,"1083":15,"1084":7,"1085":19,"1086":1,"1087":1,"1089":12,"1090":29,"1091":75,"1092":39,"1093":37,"1094":6,"1095":4,"1099":13,"1100":23,"1101":11,"1102":16,"1103":2,"1107":14,"1108":13,"1109":11,"1110":7,"1112":1,"1114":3,"1115":22,"1116":58,"1117":30,"1118":17,"1119":3,"1122":3,"1123":8,"1124":45,"1125":15,"1126":27,"1128":4,"1129":6,"1130":1,"1132":18,"1133":25,"1134":17,"1135":21,"1137":5,"1139":1,"1140":12,"1141":6,"1142":8,"1143":7,"1144":3,"1145":6,"1147":3,"1149":1,"1150":21,"1151":1,"1152":5,"1153":4,"1154":7,"1155":6,"1156":1,"1157":2,"1160":9,"1161":18,"1162":16,"1163":9,"1164":1,"1167":10,"1168":22,"1169":13,"1170":8,"1171":2,"1173":1,"1174":3,"1175":13,"1176":11,"1177":9,"1178":5,"1179":4,"1181":1,"1182":2,"1183":13,"1184":25,"1185":19,"1186":5,"1187":11,"1188":3,"1190":7,"1191":8,"1192":2,"1193":7,"1194":1,"1196":8,"1200":5,"1201":3,"1202":2,"1203":2,"1204":1,"1210":1,"1211":7,"1212":205,"1213":10,"1214":13,"1215":6,"1216":7,"1217":13,"1218":5,"1219":10,"1220":18,"1221":8,"1222":13,"1223":10,"1224":5,"1225":7,"1226":4,"1227":6,"1228":19,"1229":271,"1230":6,"1231":24,"1232":17,"1233":17,"1234":19,"1235":11,"1236":20,"1237":440,"1238":1,"1239":22,"1240":13,"1241":56,"1242":26,"1243":18,"1244":29,"1245":7,"1246":22,"1247":697,"1248":7,"1249":32,"1250":8,"1251":6,"1252":12,"1253":16,"1254":19,"1255":13,"1256":20,"1257":16,"1258":18,"1259":626,"1260":12,"1261":8,"1262":12,"1263":72,"1264":33,"1265":50,"1266":18,"1267":27,"1268":14,"1269":38,"1270":1080,"1271":245,"1272":18,"1273":37,"1274":27,"1275":48,"1276":28,"1277":22,"1278":38,"1279":27,"1280":25,"1281":38,"1282":15,"1283":27,"1284":27,"1285":22,"1286":2691,"1287":12,"1288":18,"1289":28,"1290":41,"1291":7,"1292":17,"1293":33,"1294":37,"1295":11,"1296":6,"1297":37,"1298":19,"1299":6,"1300":2030,"1301":393,"1302":11,"1303":5,"1304":28,"1305":13,"1306":11,"1307":29,"1308":10,"1309":659,"1310":175,"1311":1740,"1312":201,"1313":10,"1314":12,"1315":31,"1316":21,"1317":30,"1318":54,"1319":10,"1320":47,"1321":4,"1322":21,"1323":1507,"1324":3020,"1325":5,"1326":15,"1327":11,"1328":34,"1329":4,"1330":22,"1331":9,"1332":39,"1333":38,"1334":22,"1335":11,"1336":22,"1337":41,"1338":34,"1339":1358,"1340":8,"1341":4,"1342":48,"1343":23,"1344":22,"1345":6,"1346":6,"1347":41,"1348":19,"1349":25,"1350":1293,"1351":8,"1352":44,"1353":38,"1354":8,"1355":27,"1356":6,"1357":36,"1358":35,"1359":4088,"1360":1,"1361":3,"1362":21,"1363":7,"1364":8,"1365":11,"1366":61,"1367":11,"1368":15,"1369":387,"1370":6,"1371":14,"1372":26,"1373":24,"1374":6,"1375":18,"1376":17,"1377":6,"1378":25,"1379":24,"1380":654,"1381":6,"1382":15,"1383":24,"1384":25,"1385":5,"1386":9,"1387":15,"1388":9,"1389":39,"1390":17,"1391":26,"1392":15,"1393":10,"1394":8,"1395":2089,"1396":2756,"1397":16,"1398":26,"1399":29,"1400":16,"1401":20,"1402":1020,"1403":9,"1404":4,"1405":19,"1406":31,"1407":12,"1408":11,"1409":24,"1410":18,"1411":21,"1412":8,"1413":9,"1414":11,"1415":1296,"1416":280,"1417":1296,"1418":17,"1419":9,"1420":11,"1421":14,"1422":25,"1423":37,"1424":21,"1425":24,"1426":15,"1427":376,"1428":11,"1429":36,"1430":48,"1431":98,"1432":40,"1433":32,"1434":9,"1435":56,"1436":4562,"1437":18,"1438":498,"1439":7,"1440":11,"1441":73,"1442":32,"1443":84,"1444":18,"1445":28,"1446":13,"1447":60,"1448":4,"1449":23,"1450":2,"1451":4,"1452":9,"1453":83,"1454":46,"1455":264,"1456":55,"1457":18,"1458":16,"1459":52,"1460":36,"1461":11,"1462":5,"1463":6,"1464":4,"1465":48,"1466":9,"1467":344,"1468":3,"1469":7,"1470":6,"1471":1,"1472":19,"1473":16,"1474":49,"1475":81,"1476":44,"1477":8,"1478":20,"1479":11,"1480":16,"1481":11,"1482":11,"1483":4,"1484":4,"1485":4,"1486":45,"1487":20,"1488":158,"1489":97,"1490":81,"1491":28,"1492":151,"1493":2,"1494":1,"1496":165,"1497":2,"1498":9,"1499":2,"1500":14,"1502":1,"1503":3,"1504":3,"1507":6,"1508":12,"1509":4,"1510":1,"1511":2,"1512":6,"1513":6,"1514":1,"1517":2,"1518":1,"1521":1,"1523":3,"1524":17,"1525":15,"1526":160,"1527":5,"1528":2,"1529":1,"1530":1,"1531":36,"1532":7,"1534":54,"1535":7,"1536":7,"1537":19,"1538":2,"1539":3,"1540":1,"1541":2,"1542":5,"1543":2,"1544":8,"1545":7,"1546":3,"1547":14,"1548":4,"1549":2,"1550":1,"1551":2,"1552":1,"1553":22,"1554":8,"1555":2,"1556":5,"1557":4,"1558":1,"1559":1,"1561":1,"1565":2,"1566":4,"1567":1,"1568":2,"1569":5,"1570":6,"1571":2,"1572":14,"1574":3,"1575":18,"1576":14,"1577":208,"1578":6,"1579":2,"1581":5,"1582":29,"1583":7,"1584":2,"1585":36,"1586":10,"1588":5,"1589":18,"1590":2,"1591":91,"1592":8,"1595":4,"1596":36,"1597":4,"1598":5,"1599":27,"1600":6,"1602":2,"1605":6,"1607":6,"1608":1,"1609":3,"1610":2,"1611":9,"1612":1,"1613":1,"1614":2,"1615":1,"1616":1,"1617":1,"1621":5,"1626":5,"1627":24,"1629":5,"1630":41,"1631":115,"1632":53,"1633":2,"1634":10,"1635":17,"1636":2,"1637":39,"1638":40,"1639":75,"1640":32,"1641":113,"1642":1,"1643":7,"1644":1,"1645":1,"1646":13,"1647":11,"1648":5,"1649":6,"1650":5,"1651":50,"1652":10,"1653":29,"1654":22,"1655":2,"1656":20,"1657":1,"1658":3,"1659":4,"1660":1,"1661":19,"1662":31,"1663":16,"1664":40,"1665":21,"1666":23,"1667":30,"1668":33,"1669":22,"1670":41,"1671":27,"1672":13,"1673":23,"1674":4,"1675":23,"1676":1,"1677":16,"1678":5,"1679":4,"1681":5,"1682":3,"1683":4,"1684":13,"1685":54,"1686":43,"1687":7,"1688":2,"1689":7,"1692":12,"1693":4,"1694":3,"1695":2,"1696":5,"1697":5,"1698":4,"1699":5,"1700":11,"1701":16,"1702":35,"1703":3,"1704":3,"1705":2,"1706":6,"1707":15,"1708":20,"1709":4,"1710":5,"1714":4,"1715":3,"1716":2,"1717":1,"1718":12,"1719":10,"1720":10,"1721":11,"1722":10,"1723":7,"1724":19,"1725":1,"1726":8,"1727":50,"1728":17,"1729":21,"1730":8,"1731":13,"1732":5,"1733":1,"1734":10,"1735":6,"1736":3,"1737":4,"1738":4,"1739":6,"1741":6,"1742":3,"1743":3,"1744":2,"1747":1,"1748":28,"1749":25,"1750":18,"1751":6,"1755":8,"1757":1,"1758":3,"1759":5,"1760":7,"1761":10,"1763":2,"1764":50,"1765":77,"1766":1,"1767":42,"1768":25,"1769":28,"1770":2,"1771":6,"1772":3,"1773":9,"1774":2,"1775":1,"1776":19,"1778":2,"1779":10,"1780":10,"1781":16,"1782":9,"1783":11,"1784":12,"1785":5,"1786":4,"1787":3,"1788":14,"1789":10,"1790":34,"1792":12,"1793":9,"1794":9,"1795":7,"1796":8,"1797":9,"1798":3,"1799":19,"1800":20,"1801":20,"1802":11,"1803":6,"1804":6,"1805":51,"1806":18,"1807":14,"1808":7,"1809":5,"1810":45,"1811":10,"1812":3,"1813":6,"1814":7,"1815":46,"1816":12,"1817":20,"1818":14,"1820":6,"1821":35,"1822":8,"1823":17,"1824":3,"1825":19,"1826":17,"1827":10,"1828":13,"1829":21,"1830":9,"1831":13,"1832":9,"1833":21,"1834":16,"1835":8,"1836":1,"1837":1,"1838":3,"1839":21,"1840":23,"1841":14,"1842":16,"1843":16,"1844":9,"1845":4,"1846":8,"1847":10,"1848":6,"1849":25,"1850":2,"1851":29,"1852":9,"1853":16,"1854":18,"1855":2,"1856":14,"1857":1,"1858":8,"1859":5,"1860":3,"1861":8,"1862":15,"1863":10,"1864":8,"1865":14,"1866":4,"1867":9,"1868":15,"1869":14,"1870":6,"1871":12,"1872":2,"1873":7,"1874":18,"1875":10,"1876":32,"1877":25,"1878":9,"1879":7,"1880":6,"1881":23,"1882":15,"1883":9,"1884":7,"1885":15,"1886":13,"1887":10,"1888":8,"1889":28,"1890":4,"1891":18,"1892":16,"1893":11,"1894":9,"1895":6,"1896":8,"1897":6,"1898":19,"1899":14,"1900":13,"1901":4,"1902":35,"1903":5,"1904":13,"1905":16,"1906":8,"1907":6,"1908":27,"1909":49,"1910":17,"1911":38,"1912":26,"1913":8,"1914":4,"1915":14,"1916":35,"1917":14,"1918":16,"1919":17,"1920":20,"1921":10,"1922":52,"1923":48,"1924":16,"1925":9,"1926":15,"1927":30,"1928":7,"1929":16,"1930":20,"1931":8,"1932":5,"1933":40,"1934":12,"1935":12,"1936":8,"1937":8,"1938":1,"1939":8,"1940":30,"1941":18,"1942":11,"1943":6,"1944":27,"1945":16,"1946":27,"1947":28,"1948":50,"1949":15,"1950":37,"1951":12,"1952":14,"1953":6,"1954":18,"1955":12,"1956":8,"1957":8,"1958":14,"1959":20,"1960":5,"1961":10,"1962":23,"1963":7,"1964":13,"1965":18,"1966":14,"1967":8,"1968":12,"1969":4,"1970":21,"1971":17,"1972":24,"1973":13,"1974":6,"1975":18,"1976":10,"1977":27,"1978":16,"1979":27,"1980":26,"1981":4,"1982":27,"1983":6,"1984":20,"1985":24,"1986":15,"1987":12,"1988":26,"1989":20,"1990":7,"1991":31,"1992":15,"1993":8,"1994":37,"1995":37,"1996":18,"1997":16,"1998":17,"1999":13,"2000":59,"2001":46,"2002":32,"2003":19,"2004":9,"2005":5,"2006":17,"2007":18,"2008":5,"2009":4,"2010":20,"2011":11,"2012":15,"2013":16,"2014":8,"2015":14,"2016":6,"2017":3,"2018":3,"2019":6,"2020":4,"2021":2,"2022":2,"2023":2,"2024":36,"2025":15,"2026":4,"2027":8,"2028":13,"2029":13,"2030":17,"2031":3,"2032":23,"2033":9,"2034":31,"2035":8,"2036":10,"2037":14,"2038":15,"2039":15,"2040":4,"2041":15,"2042":9,"2043":48,"2044":34,"2045":15,"2046":15,"2047":37,"2048":30,"2049":23,"2050":9,"2051":6,"2052":2,"2053":12,"2054":5,"2055":25,"2056":28,"2057":24,"2058":9,"2059":11,"2060":12,"2061":8,"2062":3,"2063":26,"2064":18,"2065":5,"2066":14,"2067":30,"2068":4,"2069":10,"2070":23,"2071":6,"2072":11,"2073":15,"2074":19,"2075":22,"2076":13,"2077":15,"2078":6,"2079":19,"2080":17,"2081":20,"2082":9,"2083":19,"2084":6,"2085":19,"2086":11,"2087":21,"2088":2,"2089":11,"2090":4,"2091":1,"2092":11,"2093":1,"2094":11,"2095":1,"2096":15,"2097":8,"2098":15,"2099":16,"2100":15,"2101":3,"2102":1,"2103":3,"2104":8,"2105":13,"2106":7,"2107":24,"2108":12,"2109":9,"2110":15,"2111":5,"2112":11,"2113":21,"2114":10,"2115":8,"2116":23,"2117":15,"2118":9,"2119":5,"2120":1,"2121":13,"2122":9,"2123":24,"2124":17,"2125":5,"2126":48,"2127":15,"2128":8,"2129":19,"2130":13,"2131":26,"2132":18,"2133":19,"2134":14,"2135":14,"2136":17,"2137":8,"2138":26,"2139":23,"2140":14,"2141":15,"2142":37,"2143":14,"2144":10,"2145":17,"2146":20,"2147":15,"2148":6,"2149":22,"2150":26,"2151":7,"2152":10,"2153":20,"2154":6,"2155":9,"2156":55,"2157":11,"2158":41,"2159":9,"2160":29,"2161":15,"2162":6,"2163":15,"2164":20,"2165":21,"2166":31,"2167":30,"2168":25,"2169":30,"2170":20,"2171":8,"2172":11,"2173":8,"2174":20,"2175":16,"2176":8,"2177":19,"2178":14,"2179":16,"2180":39,"2181":10,"2182":9,"2183":20,"2184":7,"2185":14,"2186":11,"2187":5,"2188":22,"2189":9,"2190":14,"2191":6,"2192":32,"2193":41,"2194":14,"2195":14,"2196":10,"2197":20,"2198":8,"2199":13,"2200":12,"2201":8,"2202":24,"2203":30,"2204":8,"2205":1,"2206":4,"2207":6,"2208":2,"2209":7,"2210":11,"2211":1,"2212":1,"2213":2,"2214":8,"2215":6,"2220":15,"2221":7,"2225":1,"2226":3,"2227":11,"2228":7,"2230":26,"2231":2,"2232":160,"2234":1,"2236":2,"2239":12,"2240":3,"2245":4}}],["adb",{"2":{"1479":1},"3":{"1479":6}}],["ada",{"3":{"1364":1,"1369":2,"1436":1}}],["adaptation",{"3":{"1359":1,"1417":1,"1461":1,"1492":2}}],["adapted",{"3":{"1312":1,"1611":1}}],["adapterfactorytests",{"3":{"1199":1,"1207":2,"1427":3,"1437":1,"1487":1}}],["adapters",{"1":{"1417":1},"3":{"53":2,"74":1,"482":1,"1004":2,"1091":3,"1096":1,"1192":2,"1202":1,"1203":1,"1212":1,"1237":1,"1259":1,"1301":12,"1309":1,"1311":1,"1312":3,"1359":1,"1360":2,"1366":1,"1368":1,"1370":1,"1377":1,"1380":5,"1396":13,"1402":1,"1416":9,"1417":15,"1420":1,"1427":2,"1436":3,"1437":1,"1438":3,"1487":1,"1496":3,"1500":1,"1503":1,"1513":1,"1526":2,"1540":2,"1577":1,"1660":1,"1931":1,"1932":2,"1941":2,"2067":1,"2071":2,"2116":2,"2119":1,"2120":1,"2123":1,"2230":1}}],["adapter",{"0":{"1365":1,"1366":1,"1367":1,"1935":1},"3":{"0":4,"51":1,"53":5,"54":2,"117":1,"380":1,"584":1,"660":1,"725":1,"1016":1,"1020":1,"1022":1,"1075":1,"1076":1,"1077":2,"1089":1,"1091":7,"1092":3,"1093":1,"1094":2,"1150":1,"1192":2,"1202":2,"1203":2,"1212":1,"1213":1,"1258":1,"1259":3,"1271":2,"1286":2,"1296":2,"1300":10,"1301":18,"1307":2,"1309":28,"1311":1,"1312":19,"1323":3,"1324":6,"1339":2,"1349":2,"1350":9,"1359":23,"1360":2,"1365":2,"1366":1,"1368":2,"1369":13,"1378":5,"1380":16,"1395":1,"1396":30,"1400":3,"1402":3,"1404":1,"1415":11,"1416":4,"1417":79,"1418":1,"1419":1,"1420":3,"1422":1,"1425":1,"1427":18,"1435":1,"1436":1,"1437":1,"1438":3,"1455":1,"1496":7,"1526":2,"1539":1,"1553":1,"1577":3,"1591":1,"1663":1,"1735":1,"1790":3,"1915":2,"1916":4,"1920":1,"1923":1,"1927":1,"1932":1,"1938":1,"1946":2,"1948":1,"1949":2,"2017":3,"2018":1,"2019":2,"2026":1,"2028":2,"2119":2,"2123":1,"2170":1,"2172":2,"2180":1,"2227":1}}],["adapting",{"3":{"1286":1,"1324":2,"1395":1}}],["adapts",{"3":{"690":1,"1230":1,"1247":1,"1309":1,"1311":1,"1324":3,"1395":1,"1417":6,"1420":1,"1436":1,"1627":1}}],["adapt",{"3":{"413":1,"1417":3,"1559":1,"1649":1,"2121":1}}],["adherence",{"3":{"1359":3,"1417":4}}],["adequate",{"3":{"1324":1,"1537":1,"1559":1,"2171":1,"2179":1}}],["adee5058",{"2":{"563":1},"3":{"563":1,"1496":2}}],["adjudicated",{"3":{"1526":1,"1531":1,"1578":1}}],["adjustable",{"3":{"1798":1}}],["adjusting",{"3":{"1638":1,"1765":1}}],["adjustinventorycommand",{"3":{"1270":1}}],["adjustinventoryhandler",{"3":{"897":2,"900":1,"1767":1}}],["adjusted",{"3":{"1359":1,"1767":1,"2195":1}}],["adjustment",{"3":{"1323":1,"1742":1,"1749":1,"1767":1}}],["adjustments",{"3":{"1237":1}}],["adjusttouniversal",{"3":{"1247":1,"1309":1,"1312":3,"1396":2}}],["adjust",{"3":{"343":1,"1270":1,"1311":2,"1339":1,"1359":1,"1396":1,"1537":1,"1639":1,"1742":1}}],["adjacency",{"3":{"583":1,"749":1,"751":1,"1311":4,"1315":1,"1323":1,"1436":3,"1488":1,"1666":1,"1825":1}}],["adjacencies",{"3":{"0":2,"464":1,"749":1,"750":1,"751":1,"1212":2,"1311":5,"1436":4,"1488":1,"1825":2,"2230":1,"2232":1}}],["adjacent",{"0":{"1300":1},"3":{"325":1,"371":1,"464":1,"535":1,"608":1,"974":1,"1052":1,"1270":2,"1285":1,"1300":1,"1395":3,"1416":1,"1825":1,"1870":1}}],["ad",{"3":{"158":1,"709":1,"809":1,"1216":1,"1237":1,"1286":1,"1300":1,"1323":2,"1324":4,"1350":3,"1359":3,"1396":4,"1402":1,"1436":1,"1467":2,"1475":1,"1489":1,"1537":2,"1545":1,"1813":1,"1930":1,"1991":1}}],["admissibility",{"3":{"1241":1}}],["admission",{"3":{"689":1,"691":1,"1286":1,"1309":1,"1324":1,"1416":1,"1629":1,"1631":1}}],["admit",{"3":{"1118":1,"1286":1,"1339":1,"1350":1,"1359":1,"1653":1}}],["admits",{"3":{"235":1,"237":1,"707":1,"827":1,"916":1,"948":1,"1049":1,"1091":1,"1241":1,"1242":1,"1301":1,"1307":1,"1324":1,"1339":2,"1372":1,"1395":1,"1396":1,"1591":1}}],["admitting",{"3":{"178":1,"682":1,"946":1,"1242":1,"1247":2,"1286":2,"1323":1,"1359":2,"1369":2,"1417":1,"1423":1,"1436":1,"2175":1}}],["admitted",{"3":{"0":1,"111":1,"237":1,"1116":1,"1122":1,"1124":1,"1128":1,"1212":1,"1247":1,"1309":2,"1324":7,"1339":1,"1436":3,"1640":1,"2065":1}}],["adminuserscontroller",{"3":{"2202":1}}],["adminuserenabled",{"2":{"1465":1,"1469":1},"3":{"1465":1,"1469":1}}],["admincreateforms",{"3":{"1436":1}}],["admincredentials",{"3":{"1199":1,"1207":1,"1433":1,"1436":5}}],["adminclient",{"3":{"1436":1}}],["adminpages",{"2":{"1627":1},"3":{"1436":1,"1627":1}}],["adminpaths",{"3":{"1433":1,"1436":2}}],["adminpanelsettings",{"3":{"1415":1}}],["adminplaneport",{"3":{"640":1,"1436":1}}],["admin123",{"3":{"1415":2,"1436":1,"1488":1}}],["admins",{"3":{"1396":2,"1402":7,"1749":1,"1771":1,"1869":1}}],["admintoken",{"3":{"1436":1}}],["admintargetport",{"3":{"1339":1}}],["admintestcontext",{"3":{"1199":2,"1207":1}}],["adminendpoint",{"3":{"1339":2}}],["adminendpointname",{"3":{"1339":1}}],["adminendpointexpression",{"2":{"1327":1},"3":{"1327":1,"1339":1}}],["administer",{"3":{"1415":1,"2200":1}}],["administered",{"3":{"1286":1}}],["administers",{"3":{"1285":1,"1415":2}}],["administrative",{"3":{"461":1,"497":1,"1300":4,"1339":2,"1395":1,"1414":1,"1415":2,"1630":1}}],["administrationrequests",{"3":{"1207":2,"1300":8}}],["administrationrequestvalidators",{"3":{"1207":2,"1300":9}}],["administrationcontrollerbasetests",{"3":{"1199":1,"1207":5,"1311":2}}],["administrationpermissions",{"2":{"1059":2,"1963":1,"2200":1,"2201":2},"3":{"1059":3,"1199":14,"1203":1,"1207":2,"1297":4,"1300":13,"1311":2,"1324":3,"1415":8,"1496":1,"1963":1,"2200":1,"2201":2}}],["administration",{"0":{"1409":1,"2201":1},"2":{"1300":1},"3":{"0":3,"19":1,"27":1,"186":1,"305":1,"444":1,"497":3,"499":1,"536":2,"552":1,"640":1,"649":1,"698":1,"809":2,"881":2,"931":1,"1042":1,"1044":2,"1057":1,"1058":1,"1059":19,"1060":1,"1061":1,"1082":3,"1086":2,"1203":28,"1207":110,"1212":2,"1256":1,"1257":1,"1259":12,"1275":6,"1286":17,"1287":2,"1297":5,"1300":61,"1311":23,"1318":1,"1320":1,"1323":11,"1324":58,"1327":1,"1339":1,"1403":3,"1409":4,"1414":3,"1415":34,"1436":11,"1438":1,"1441":1,"1467":1,"1496":4,"1526":2,"1535":1,"1621":3,"1625":1,"1626":1,"1627":1,"1760":2,"1962":1,"1963":1,"2193":1,"2194":1,"2200":1,"2201":1,"2202":1,"2203":1}}],["administrators",{"3":{"1286":1,"1300":1,"1311":1,"1324":1,"1763":1,"1764":1,"1776":1}}],["administrator",{"3":{"458":1,"714":1,"1300":1,"1304":1,"1311":2,"1324":1,"1339":1,"1406":2,"1415":3,"1467":1,"1637":1,"1638":1,"1765":4,"1768":1,"1777":1,"2224":1}}],["adminrolescontrollertests",{"3":{"1199":1,"1207":2}}],["adminrolescontroller",{"2":{"1409":1},"3":{"1199":2,"1203":1,"1207":2,"1300":1,"1311":2,"1409":2,"1415":6,"1496":2,"2202":2}}],["adminbypassroles",{"2":{"260":1,"261":1,"392":1,"393":1},"3":{"243":1,"260":2,"261":1,"392":1,"393":1,"1350":1,"1380":1}}],["admin",{"0":{"1760":1},"2":{"1466":1,"1468":1,"1470":2,"1472":1,"1477":2,"1637":1,"1757":1,"1760":1},"3":{"0":5,"24":1,"186":3,"233":1,"234":1,"235":2,"236":1,"245":1,"259":1,"317":1,"318":6,"320":3,"324":2,"340":1,"388":1,"390":1,"570":1,"578":1,"599":3,"600":2,"601":1,"618":1,"640":3,"642":1,"698":1,"719":1,"743":1,"897":1,"905":1,"1028":2,"1058":1,"1059":3,"1075":1,"1212":1,"1237":1,"1247":1,"1248":1,"1256":1,"1259":2,"1270":2,"1286":9,"1297":2,"1300":14,"1309":6,"1311":6,"1318":1,"1323":5,"1324":42,"1332":1,"1339":9,"1359":1,"1379":1,"1380":2,"1395":11,"1396":6,"1402":9,"1409":6,"1414":4,"1415":15,"1431":1,"1433":1,"1436":31,"1437":2,"1438":6,"1440":1,"1441":2,"1442":1,"1443":1,"1444":1,"1446":3,"1447":2,"1455":4,"1456":1,"1465":3,"1466":1,"1467":11,"1468":1,"1469":1,"1470":2,"1472":3,"1474":1,"1477":9,"1488":4,"1490":1,"1524":1,"1526":4,"1535":1,"1548":1,"1577":1,"1591":11,"1596":3,"1600":4,"1608":1,"1625":1,"1626":2,"1627":5,"1630":1,"1637":1,"1638":1,"1641":1,"1653":1,"1668":1,"1742":3,"1746":1,"1747":11,"1748":17,"1749":18,"1750":5,"1754":2,"1755":1,"1757":6,"1759":1,"1760":7,"1761":5,"1764":2,"1765":7,"1767":4,"1768":13,"1769":1,"1771":4,"1773":1,"1775":2,"1776":1,"1777":2,"1828":1,"1869":2,"1881":1,"1945":1,"1963":1,"1994":1,"1995":1,"2008":2,"2034":1,"2045":1,"2195":1,"2201":3,"2232":1}}],["adornments",{"3":{"1324":1}}],["adojobstore",{"2":{"1043":1},"3":{"1043":1}}],["ado",{"3":{"0":1,"1067":1,"1068":1,"1135":1,"1273":1,"1286":3}}],["adoptable",{"3":{"136":1,"923":1,"1417":1,"1492":1,"1929":1}}],["adopting",{"3":{"0":2,"24":1,"25":1,"41":1,"60":1,"62":1,"91":1,"160":1,"189":1,"228":1,"245":1,"305":1,"333":1,"352":2,"359":1,"472":1,"620":1,"657":1,"665":1,"667":1,"668":1,"670":1,"732":1,"733":1,"734":1,"854":1,"891":1,"1043":1,"1061":2,"1075":1,"1144":1,"1154":1,"1161":1,"1232":1,"1233":1,"1237":2,"1241":1,"1270":1,"1271":1,"1277":1,"1281":1,"1286":10,"1300":3,"1323":4,"1369":1,"1425":1,"1436":2,"1489":1,"1492":2,"1599":1,"1602":1,"1653":1,"1659":1,"1661":1,"1810":1,"1923":1,"1978":1,"2055":1,"2142":1,"2192":1,"2202":3}}],["adoption",{"0":{"1860":1},"3":{"0":17,"27":1,"128":1,"160":1,"186":1,"193":1,"195":1,"223":1,"230":2,"279":1,"298":1,"305":1,"308":1,"318":1,"320":1,"322":1,"324":1,"325":1,"326":1,"343":1,"350":2,"357":1,"358":1,"359":1,"360":1,"365":2,"401":1,"450":1,"468":2,"470":1,"477":1,"484":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":2,"527":1,"529":1,"530":1,"534":2,"536":1,"543":1,"545":2,"546":1,"550":3,"556":1,"564":1,"566":1,"572":1,"573":1,"574":1,"575":2,"578":1,"599":2,"603":1,"609":1,"611":1,"618":1,"626":1,"629":1,"632":1,"640":1,"649":1,"655":1,"657":2,"663":1,"667":1,"669":1,"696":1,"698":1,"702":1,"713":1,"715":1,"723":1,"725":1,"728":1,"733":2,"734":1,"741":1,"766":1,"769":1,"774":1,"790":1,"792":1,"825":2,"829":1,"832":1,"861":2,"863":1,"864":1,"879":1,"881":1,"891":2,"897":1,"900":2,"913":1,"920":1,"924":1,"926":1,"942":1,"954":1,"956":1,"963":2,"964":2,"968":1,"972":1,"981":1,"986":1,"988":1,"994":2,"996":2,"999":1,"1050":3,"1051":1,"1053":1,"1054":1,"1055":1,"1084":1,"1133":1,"1143":1,"1147":1,"1153":1,"1161":1,"1164":1,"1168":1,"1184":2,"1188":1,"1190":1,"1212":3,"1250":1,"1259":1,"1264":2,"1266":2,"1270":8,"1286":3,"1300":2,"1301":3,"1311":1,"1323":1,"1324":1,"1339":2,"1350":1,"1415":1,"1417":2,"1436":18,"1488":1,"1489":2,"1496":5,"1500":2,"1524":2,"1532":1,"1574":1,"1581":2,"1582":3,"1583":1,"1585":2,"1591":2,"1596":1,"1597":1,"1599":4,"1600":1,"1601":1,"1737":1,"1815":2,"1862":1,"1876":1,"1948":1,"1963":1,"1970":1,"1971":1,"1975":1,"1978":2,"1979":1,"2044":1,"2046":1,"2055":1,"2060":1,"2132":1,"2133":1,"2143":2,"2168":1,"2179":1,"2203":1,"2232":1}}],["adopt",{"3":{"0":6,"47":1,"149":1,"258":1,"265":1,"350":1,"395":1,"413":1,"448":1,"449":1,"599":1,"619":1,"649":1,"698":1,"706":1,"723":1,"725":1,"747":1,"749":1,"833":1,"838":1,"853":1,"913":1,"974":1,"1052":1,"1093":1,"1094":1,"1122":1,"1127":1,"1134":1,"1141":1,"1145":1,"1151":1,"1161":1,"1162":1,"1186":1,"1241":1,"1247":1,"1270":1,"1286":1,"1311":3,"1323":1,"1324":3,"1339":1,"1395":3,"1417":1,"1436":5,"1467":1,"1473":1,"1482":1,"1488":2,"1496":4,"1524":1,"1530":1,"1532":1,"1595":1,"1599":2,"1675":1,"1709":1,"1765":1,"1807":1,"1851":1,"1959":1,"2000":1,"2026":1,"2063":1,"2079":1,"2133":1,"2143":1,"2153":1,"2197":1,"2239":1}}],["adopts",{"3":{"0":4,"246":1,"305":1,"325":1,"400":1,"408":1,"446":1,"448":1,"572":2,"618":1,"619":1,"657":1,"665":1,"715":2,"790":1,"792":1,"794":1,"827":1,"1034":1,"1059":1,"1061":1,"1161":3,"1212":1,"1247":1,"1270":1,"1286":3,"1300":2,"1301":1,"1311":2,"1324":1,"1337":1,"1339":3,"1395":3,"1396":1,"1417":1,"1421":1,"1424":1,"1427":2,"1436":4,"1447":1,"1488":2,"1492":1,"1526":1,"1531":1,"1670":1,"2024":1,"2057":1,"2131":2,"2175":1,"2179":1,"2194":1}}],["adopter",{"3":{"0":3,"243":1,"245":1,"325":1,"360":1,"361":1,"551":1,"633":4,"634":2,"635":1,"651":2,"702":1,"726":1,"780":2,"782":2,"938":1,"939":1,"966":1,"1133":1,"1163":1,"1212":2,"1270":3,"1436":1,"1675":1,"1727":1,"1851":1,"1922":1,"1978":1,"2077":1,"2167":1,"2202":1}}],["adopters",{"3":{"0":3,"243":4,"244":1,"247":1,"249":1,"256":2,"324":1,"353":1,"415":1,"634":1,"635":1,"649":1,"782":1,"786":1,"1052":1,"1237":1,"1270":4,"1301":1,"1436":3,"1671":1,"1673":1,"1923":1}}],["adopted",{"0":{"1963":1,"2151":1},"1":{"1138":1,"1139":1,"1140":1,"1141":1,"1142":1,"1143":1,"1144":1,"1145":1,"1146":1,"1147":1,"1148":1,"1149":1,"1150":1,"1151":1,"1152":1,"1153":1,"1154":1,"1155":1,"1156":1,"1157":1},"3":{"0":23,"150":1,"153":1,"214":1,"218":1,"243":1,"259":1,"261":1,"302":1,"310":1,"350":1,"358":1,"359":1,"360":1,"365":1,"418":1,"454":1,"536":1,"545":1,"556":1,"572":1,"609":2,"642":1,"650":1,"655":1,"657":1,"664":1,"665":1,"667":1,"725":1,"726":1,"747":1,"790":1,"827":1,"854":1,"857":1,"954":1,"962":1,"973":1,"976":1,"1043":1,"1049":1,"1061":1,"1075":1,"1081":2,"1089":1,"1095":1,"1138":1,"1148":1,"1212":5,"1237":1,"1259":1,"1264":1,"1265":1,"1270":3,"1271":1,"1286":3,"1293":1,"1295":1,"1300":2,"1311":1,"1312":1,"1323":1,"1324":1,"1395":1,"1436":7,"1447":1,"1488":1,"1489":1,"1496":3,"1531":1,"1534":1,"1545":1,"1582":1,"1583":1,"1706":1,"1748":1,"1815":1,"1875":1,"1972":1,"2127":1,"2128":1,"2138":1,"2143":2,"2145":1,"2146":1,"2168":1,"2181":1,"2220":2,"2232":2}}],["advantage",{"3":{"2220":1}}],["advancing",{"3":{"1477":1}}],["advanceable",{"3":{"1396":1}}],["advanceabletimeprovider",{"3":{"1199":2,"1207":1}}],["advanced",{"3":{"1300":1,"1350":1,"1358":1,"1359":2,"2220":1}}],["advances",{"3":{"707":2,"848":1,"1229":2,"1247":3,"1270":2,"1323":2,"1324":1,"1339":1,"1395":2,"1427":1,"1438":1,"1876":1,"1948":1,"2232":1}}],["advance",{"3":{"0":1,"539":1,"690":1,"709":1,"810":1,"1075":1,"1212":1,"1323":1,"1324":2,"1395":1,"1482":1,"1912":1}}],["advice",{"3":{"1278":1,"1369":1,"1847":1,"2085":1}}],["advised",{"3":{"698":1}}],["advisories",{"3":{"0":1,"370":1,"618":1,"1436":1,"1453":1,"1455":1,"1459":1}}],["advisory",{"3":{"0":5,"135":1,"145":1,"150":1,"226":1,"265":1,"370":4,"371":3,"372":1,"373":1,"397":1,"440":1,"509":1,"584":1,"591":1,"617":1,"619":2,"624":3,"626":4,"640":1,"952":1,"956":1,"958":1,"1032":1,"1034":1,"1036":1,"1037":1,"1067":1,"1069":1,"1073":1,"1075":2,"1077":2,"1212":1,"1312":1,"1323":1,"1333":1,"1359":11,"1417":1,"1433":1,"1436":1,"1438":2,"1443":1,"1453":5,"1454":1,"1455":2,"1456":2,"1459":4,"1460":4,"1488":2,"1490":2,"1492":1,"1526":4,"1534":2,"1577":4,"1582":1,"1585":1,"1591":7,"1599":1,"1600":2,"1630":1,"1631":1,"1638":1,"1643":1,"1648":1,"1673":1,"1716":2,"2010":1,"2057":1,"2126":1,"2156":1,"2232":2,"2234":1}}],["adversarially",{"3":{"1496":2}}],["adversarial",{"3":{"1185":1,"1436":11,"1487":1,"1489":3,"1496":11,"1500":1,"1578":1,"1896":1,"1898":1}}],["advertised",{"3":{"741":1,"1380":1,"1396":1,"1489":1,"2063":1}}],["advertise",{"3":{"447":1,"1244":1,"1247":1,"1309":1,"1324":1,"2130":1}}],["advertises",{"3":{"31":1,"33":1,"448":1,"1218":1,"1229":1,"1270":1,"1288":1,"1311":2,"1324":1,"1350":1,"1376":1,"1380":1,"1436":2,"2131":1}}],["advertising",{"3":{"300":1,"1265":1,"1300":1,"1320":1,"1359":1,"2137":1}}],["adcpartnercollectionresult",{"3":{"1496":1}}],["adcpartnerinfo",{"3":{"1496":1}}],["adcprodstpys4way4uzb3g",{"2":{"1473":1,"1478":1},"3":{"1467":1,"1473":1,"1478":1}}],["adccollectionresult",{"3":{"1496":1}}],["adceventinfo",{"3":{"1496":1}}],["adcoauthuisettings",{"3":{"1496":1}}],["adckv",{"3":{"1474":1}}],["adc2026",{"3":{"1347":1,"1350":1}}],["adcapphostcollection",{"2":{"1449":1},"3":{"1199":2,"1203":1,"1207":1,"1328":1,"1339":5,"1449":1,"1496":1}}],["adcapphostsmoketests",{"2":{"1069":1,"1450":1},"3":{"914":1,"1067":2,"1069":2,"1070":1,"1199":1,"1203":1,"1207":2,"1328":2,"1339":11,"1449":10,"1450":2,"1496":2}}],["adcapphostfixture",{"2":{"1450":1},"3":{"914":1,"1069":2,"1070":1,"1199":3,"1203":1,"1207":3,"1328":2,"1339":6,"1449":7,"1450":1,"1496":2}}],["adcarchitecturemap",{"2":{"132":1,"1161":1,"2103":1},"3":{"132":1,"1161":1,"1199":42,"1207":2,"1323":1,"1341":1,"1396":1,"1436":60,"1487":1,"1489":5,"1526":5,"1535":1,"2042":1,"2103":1}}],["adchometicketingtests",{"3":{"1199":1,"1207":1}}],["adchometests",{"3":{"1199":1,"1207":5,"1350":1,"1395":1,"1438":1}}],["adchomepartnerstests",{"3":{"1199":1,"1207":1}}],["adchomepagecontent",{"3":{"1199":3,"1203":2,"1207":4,"1324":3,"1395":3,"1416":21}}],["adchomeservicedoubles",{"3":{"1199":3,"1207":1}}],["adchomecontent",{"2":{"1393":1},"3":{"1199":2,"1203":1,"1207":5,"1385":2,"1393":3,"1394":1,"1395":18,"1496":1}}],["adchome",{"2":{"554":1},"3":{"554":1,"556":1,"559":2,"1199":5,"1203":1,"1207":3,"1350":7,"1359":4,"1392":5,"1393":9,"1394":1,"1395":36,"1396":1,"1416":8,"1436":3,"1489":2,"1496":8,"1526":7,"1531":1,"1535":2}}],["adc",{"0":{"92":1,"93":1,"1441":1,"1455":1,"1456":1,"1457":1,"1458":1,"1514":1,"1604":1,"1679":1},"1":{"687":1,"688":1,"689":1,"690":1,"691":1,"692":1,"693":1,"694":1,"1190":1,"1191":1,"1192":1,"1193":1,"1194":1,"1195":1,"1340":1,"1341":1,"1342":1,"1343":1,"1344":1,"1345":1,"1346":1,"1347":1,"1348":1,"1349":1,"1350":1,"1351":1,"1352":1,"1353":1,"1354":1,"1355":1,"1356":1,"1357":1,"1358":1,"1359":1,"1360":1,"1361":1,"1362":1,"1363":1,"1364":1,"1365":1,"1366":1,"1367":1,"1368":1,"1369":1,"1370":1,"1371":1,"1372":1,"1373":1,"1374":1,"1375":1,"1376":1,"1377":1,"1378":1,"1379":1,"1380":1,"1381":1,"1382":1,"1383":1,"1384":1,"1385":1,"1386":1,"1387":1,"1388":1,"1389":1,"1390":1,"1391":1,"1392":1,"1393":1,"1394":1,"1395":1,"1396":1,"1397":1,"1398":1,"1399":1,"1400":1,"1401":1,"1402":1,"1403":1,"1404":1,"1405":1,"1406":1,"1407":1,"1408":1,"1409":1,"1410":1,"1411":1,"1412":1,"1413":1,"1414":1,"1415":1,"1416":1,"1462":1,"1463":1,"1464":1,"1465":1,"1466":1,"1467":1,"1468":1,"1469":1,"1470":1,"1522":1,"1523":1,"1524":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1531":1,"1532":1,"1533":1,"1534":1,"1535":1,"1628":1,"1629":1,"1630":1,"1631":1,"1632":1,"1633":1,"1634":1,"1635":1,"1636":1,"1637":1,"1638":1,"1639":1,"1640":1,"1641":1},"2":{"47":3,"58":1,"59":2,"80":1,"95":1,"229":1,"395":1,"401":1,"564":1,"642":1,"644":1,"667":1,"998":1,"999":1,"1069":2,"1191":1,"1194":1,"1200":1,"1201":1,"1203":2,"1207":10,"1215":1,"1271":1,"1309":2,"1325":1,"1328":1,"1340":1,"1341":2,"1350":6,"1359":5,"1363":1,"1369":2,"1370":3,"1378":1,"1379":2,"1380":7,"1381":1,"1395":6,"1396":11,"1402":6,"1404":6,"1415":4,"1427":1,"1435":1,"1437":8,"1438":2,"1440":1,"1442":2,"1445":7,"1446":1,"1449":1,"1455":2,"1457":1,"1458":1,"1459":1,"1471":1,"1473":4,"1474":3,"1475":1,"1481":1,"1486":9,"1487":6,"1490":2,"1492":1,"1494":1,"1496":1,"1500":1,"1503":1,"1509":1,"1512":1,"1524":1,"1525":1,"1526":1,"1531":2,"1534":1,"1611":2,"1615":2,"1619":2,"1639":1,"2034":4,"2035":4,"2036":4,"2037":1,"2038":1,"2105":1,"2111":1,"2202":1},"3":{"0":118,"3":6,"7":2,"17":1,"27":3,"31":3,"39":1,"47":5,"57":2,"58":2,"59":13,"60":2,"62":13,"63":5,"68":2,"76":1,"80":3,"85":1,"91":2,"92":2,"93":12,"94":2,"95":13,"96":4,"97":1,"98":8,"99":2,"100":1,"101":2,"102":1,"104":4,"109":3,"115":1,"117":3,"121":3,"127":3,"128":7,"132":1,"135":1,"145":6,"146":1,"147":3,"149":3,"150":1,"151":1,"152":3,"159":1,"164":1,"173":1,"175":5,"179":4,"180":7,"181":3,"184":3,"186":12,"189":1,"195":19,"200":1,"203":4,"214":1,"217":4,"218":7,"219":2,"220":3,"229":2,"230":2,"235":7,"238":1,"241":2,"243":16,"245":9,"249":1,"250":5,"251":2,"252":2,"254":2,"257":2,"258":1,"259":5,"260":9,"261":6,"279":1,"281":2,"283":3,"285":1,"291":4,"293":1,"295":13,"300":1,"310":4,"314":2,"318":7,"324":2,"325":7,"326":2,"333":1,"341":4,"344":3,"348":2,"350":11,"352":10,"353":10,"354":1,"359":2,"368":1,"373":2,"374":3,"375":1,"378":2,"384":7,"386":5,"387":3,"388":9,"390":11,"391":1,"392":6,"393":2,"395":2,"397":1,"401":10,"403":8,"405":1,"409":1,"412":2,"413":5,"414":1,"418":24,"422":5,"423":8,"424":7,"425":8,"426":18,"427":4,"428":16,"429":13,"430":3,"438":1,"439":1,"443":1,"444":2,"446":2,"448":14,"450":1,"451":3,"452":8,"453":3,"454":5,"455":1,"459":4,"463":6,"464":2,"465":5,"466":5,"468":2,"470":22,"472":1,"474":1,"475":13,"476":18,"477":14,"478":6,"480":1,"481":1,"482":1,"483":2,"486":1,"487":2,"488":2,"489":2,"490":3,"491":6,"492":5,"493":7,"494":9,"495":7,"497":12,"499":12,"502":4,"507":6,"511":4,"513":2,"514":1,"522":2,"523":2,"524":2,"527":1,"534":1,"536":4,"543":7,"545":22,"547":2,"550":4,"551":1,"552":5,"554":3,"556":33,"558":4,"559":2,"563":5,"564":17,"566":4,"567":7,"572":38,"574":2,"575":6,"576":1,"577":4,"578":7,"582":1,"583":31,"585":14,"586":1,"589":1,"591":7,"593":1,"594":3,"597":2,"598":1,"599":36,"600":5,"601":6,"602":7,"603":7,"604":3,"607":13,"608":2,"609":59,"611":10,"613":2,"616":5,"618":8,"619":1,"620":3,"621":4,"624":8,"625":7,"626":41,"627":2,"628":6,"629":7,"632":2,"638":5,"640":25,"641":1,"642":10,"643":4,"644":7,"647":1,"649":12,"651":2,"655":4,"657":9,"663":1,"664":3,"665":12,"666":1,"667":4,"668":8,"669":8,"674":16,"677":1,"681":2,"683":4,"684":1,"685":1,"686":1,"687":1,"688":2,"689":3,"690":6,"691":4,"692":1,"698":2,"702":1,"707":1,"715":1,"717":1,"719":5,"720":2,"723":2,"724":3,"725":22,"726":1,"727":3,"728":1,"733":3,"737":1,"739":1,"741":2,"743":4,"744":6,"745":1,"749":17,"751":4,"752":2,"755":2,"756":5,"757":19,"758":2,"759":4,"760":4,"761":3,"764":4,"765":2,"766":33,"767":1,"768":3,"769":4,"774":16,"780":4,"782":15,"784":4,"785":1,"790":1,"798":5,"799":4,"803":7,"804":2,"805":6,"806":1,"825":4,"826":8,"827":25,"829":1,"830":5,"831":14,"832":11,"833":14,"836":2,"837":11,"838":20,"839":4,"840":2,"841":3,"853":1,"854":6,"855":1,"857":3,"859":1,"861":15,"862":1,"863":10,"864":3,"867":2,"868":10,"869":23,"870":10,"872":1,"873":11,"875":5,"876":26,"877":10,"881":15,"884":1,"891":4,"892":1,"893":1,"897":6,"900":1,"912":1,"913":8,"914":14,"915":2,"916":2,"917":6,"920":1,"924":3,"926":8,"927":1,"939":1,"946":3,"949":1,"954":19,"956":4,"958":4,"959":3,"960":6,"963":3,"964":1,"971":10,"972":6,"973":2,"974":4,"979":1,"980":6,"981":1,"983":2,"986":2,"988":7,"991":3,"994":2,"995":5,"996":4,"998":10,"999":7,"1004":13,"1006":1,"1007":2,"1010":2,"1012":6,"1013":1,"1014":1,"1016":2,"1017":9,"1018":17,"1021":4,"1022":1,"1036":1,"1044":2,"1045":2,"1049":4,"1050":4,"1052":2,"1054":9,"1055":2,"1058":2,"1065":2,"1066":6,"1067":2,"1068":1,"1069":6,"1070":3,"1073":2,"1074":3,"1075":3,"1078":3,"1081":1,"1082":7,"1083":3,"1085":3,"1089":2,"1090":9,"1093":4,"1094":9,"1095":6,"1096":1,"1099":4,"1100":9,"1103":2,"1114":1,"1115":2,"1116":35,"1117":2,"1119":1,"1123":2,"1124":14,"1125":3,"1126":3,"1127":3,"1129":1,"1133":4,"1135":1,"1140":6,"1142":3,"1150":13,"1154":1,"1156":1,"1161":3,"1168":7,"1183":2,"1184":3,"1190":1,"1191":4,"1192":14,"1194":2,"1195":2,"1199":2028,"1200":3,"1201":4,"1202":12,"1203":1184,"1204":3,"1206":65,"1207":6153,"1208":44,"1209":138,"1211":4,"1212":31,"1213":3,"1214":1,"1215":3,"1216":1,"1229":2,"1230":1,"1237":62,"1238":1,"1239":13,"1242":3,"1244":2,"1247":67,"1259":15,"1262":2,"1264":10,"1266":1,"1270":94,"1271":70,"1286":146,"1300":200,"1301":24,"1302":2,"1304":13,"1305":3,"1307":16,"1308":9,"1309":182,"1310":32,"1311":161,"1312":89,"1313":1,"1314":5,"1315":1,"1318":5,"1322":2,"1323":138,"1324":210,"1325":14,"1326":18,"1327":6,"1328":9,"1329":1,"1331":9,"1332":23,"1333":1,"1334":7,"1335":11,"1336":11,"1338":5,"1339":194,"1340":3,"1341":17,"1342":24,"1344":15,"1345":10,"1346":2,"1347":32,"1348":10,"1349":20,"1350":770,"1351":1,"1352":19,"1353":21,"1354":10,"1355":8,"1356":4,"1357":3,"1358":3,"1359":2783,"1360":1,"1361":2,"1363":5,"1364":5,"1365":2,"1366":3,"1367":3,"1368":3,"1369":201,"1370":5,"1371":15,"1373":8,"1374":2,"1375":1,"1376":2,"1377":14,"1378":15,"1379":7,"1380":440,"1381":4,"1383":1,"1384":1,"1389":2,"1390":4,"1395":952,"1396":1398,"1397":4,"1398":3,"1399":2,"1400":5,"1401":5,"1402":443,"1403":8,"1404":22,"1405":4,"1406":18,"1407":5,"1408":3,"1409":9,"1410":10,"1411":1,"1412":7,"1413":8,"1414":13,"1415":866,"1416":258,"1417":98,"1426":3,"1427":39,"1428":2,"1431":6,"1433":1,"1435":13,"1436":873,"1437":94,"1438":127,"1439":2,"1440":5,"1441":11,"1442":18,"1443":11,"1444":4,"1445":19,"1446":11,"1447":5,"1449":5,"1450":1,"1451":2,"1452":3,"1453":2,"1454":1,"1455":26,"1456":1,"1457":6,"1458":2,"1459":19,"1460":15,"1461":4,"1462":3,"1464":14,"1465":2,"1466":1,"1467":52,"1470":4,"1471":4,"1472":7,"1473":9,"1474":25,"1475":10,"1476":14,"1477":6,"1478":5,"1479":1,"1480":1,"1481":10,"1482":2,"1485":2,"1486":35,"1487":46,"1488":23,"1489":24,"1490":18,"1491":2,"1492":31,"1494":1,"1496":214,"1498":4,"1500":3,"1503":1,"1505":1,"1509":2,"1512":1,"1514":1,"1520":1,"1522":2,"1523":1,"1524":8,"1525":5,"1526":119,"1529":1,"1530":1,"1531":21,"1532":6,"1533":1,"1534":15,"1535":10,"1573":1,"1577":8,"1582":10,"1583":1,"1585":3,"1588":2,"1589":4,"1591":23,"1593":1,"1596":8,"1598":2,"1599":4,"1601":1,"1605":1,"1606":1,"1611":17,"1615":2,"1619":6,"1620":1,"1627":10,"1628":1,"1629":1,"1630":1,"1631":4,"1637":1,"1638":1,"1639":1,"1641":1,"1645":1,"1646":1,"1649":1,"1650":2,"1653":2,"1654":1,"1656":2,"1658":2,"1659":1,"1673":1,"1675":1,"1676":1,"1677":1,"1678":3,"1679":2,"1703":1,"1705":2,"1706":1,"1709":3,"1710":1,"1724":1,"1736":1,"1748":1,"1756":1,"1765":1,"1784":1,"1785":1,"1810":2,"1815":3,"1828":1,"1839":1,"1851":1,"1859":1,"1860":3,"1861":1,"1862":1,"1865":1,"1874":1,"1875":2,"1880":1,"1884":2,"1891":1,"1896":2,"1898":1,"1916":1,"1922":6,"1923":1,"1927":1,"1933":2,"1937":1,"1946":2,"1947":2,"1948":1,"1963":2,"1970":1,"1978":5,"1979":2,"1983":6,"1995":5,"1996":1,"2000":13,"2001":1,"2004":2,"2008":1,"2013":2,"2024":3,"2025":2,"2030":1,"2033":2,"2034":7,"2035":4,"2036":4,"2037":3,"2038":2,"2042":1,"2043":2,"2044":3,"2046":6,"2047":1,"2055":3,"2057":1,"2063":2,"2067":3,"2068":1,"2083":2,"2085":1,"2101":1,"2103":1,"2105":2,"2110":1,"2111":5,"2112":2,"2113":6,"2114":1,"2127":3,"2131":9,"2132":1,"2136":1,"2137":1,"2138":2,"2150":2,"2151":5,"2156":2,"2157":1,"2158":8,"2168":1,"2179":4,"2190":1,"2192":1,"2202":4,"2228":1,"2231":1,"2232":4}}],["addview",{"3":{"1339":2}}],["addvalidationerror",{"3":{"1300":1}}],["addvalidatorsfromassemblycontaining",{"2":{"1271":1,"1319":1},"3":{"1271":1,"1300":1,"1309":3,"1319":1,"1323":5,"1415":1}}],["addvalidatorsfromassembly",{"2":{"1830":1},"3":{"1270":3,"1271":2,"1323":3,"1359":5,"1415":3,"1436":3,"1830":1}}],["addvariantcommand",{"2":{"991":1},"3":{"897":1,"988":1,"991":2}}],["addvariant",{"3":{"897":1}}],["addvarianthandler",{"2":{"898":1,"900":1,"901":1},"3":{"0":1,"897":3,"898":1,"900":3,"901":1,"1591":1,"1597":1,"1767":1,"1769":1}}],["addxdevicecapabilities",{"3":{"1417":1}}],["addx",{"3":{"1415":1}}],["addxxxui",{"3":{"1395":1}}],["addxui",{"3":{"1324":2,"1396":1}}],["addxmodule",{"3":{"1316":1}}],["addxmldatacontractserializerformatters",{"2":{"964":1},"3":{"964":1}}],["addwasmformfactor",{"3":{"1324":3,"1416":1,"1417":5}}],["addwarmuptask",{"2":{"238":1},"3":{"235":1,"238":1,"1334":1,"1339":4,"1379":1,"1380":1,"1396":1,"1415":1,"1443":1}}],["addwarmupreadiness",{"2":{"1329":1,"1334":1},"3":{"235":1,"1329":1,"1334":2,"1339":9,"1396":1,"1415":1,"1443":2,"1577":1}}],["addjsonstream",{"3":{"1324":3,"1416":1}}],["addjsonoptions",{"3":{"1311":1}}],["addjwtbearer",{"3":{"0":1,"827":2}}],["addgrpcclient",{"3":{"1312":1}}],["addgrpcreflection",{"3":{"1312":1}}],["addgrpc",{"3":{"1312":1,"1441":1}}],["addgrpcservicedefaults",{"0":{"2018":1},"2":{"1656":1,"1663":1,"1927":1,"2018":1,"2028":1},"3":{"1312":7,"1380":1,"1396":2,"1415":1,"1441":1,"1656":1,"1663":1,"1927":1,"2018":1,"2028":1}}],["addgithubprovider",{"3":{"1311":1}}],["addgithub",{"3":{"1311":1}}],["addgoogleprovider",{"3":{"1311":1}}],["addgoogle",{"3":{"1311":1}}],["addgatewayroutepolicies",{"2":{"1338":1},"3":{"1338":1,"1339":5}}],["addgatewayratelimiting",{"2":{"1337":1,"1339":1,"1447":1,"2024":1},"3":{"0":1,"674":1,"827":1,"1337":1,"1339":7,"1447":1,"2024":1}}],["addgatewaydownstreamhealthchecks",{"2":{"99":1,"827":1,"829":1,"1339":1,"1670":1,"2024":1},"3":{"0":1,"99":1,"827":1,"829":1,"1337":1,"1339":9,"1447":1,"1467":1,"1670":1,"2024":1}}],["addquestionansweruniqueupsertindexes",{"3":{"1209":2}}],["addlinerequest",{"3":{"1727":1}}],["addline",{"3":{"1727":1}}],["addlinkasync",{"3":{"1380":2,"1389":1,"1395":10}}],["addlink",{"3":{"1203":4,"1207":8,"1357":1,"1359":9,"1395":1}}],["addlivepollsessionidstatusindex",{"3":{"1209":2}}],["addlivepolls",{"3":{"1209":2}}],["addlogging",{"3":{"954":1,"1436":2}}],["addlocalization",{"2":{"954":1},"3":{"265":1,"954":1,"1311":2,"1324":3,"1432":1,"1436":1}}],["addlocalizationinterceptor",{"2":{"265":1},"3":{"265":1,"1324":2}}],["addrazorcomponents",{"3":{"1436":1}}],["addrabbitmq",{"2":{"2008":1},"3":{"1339":2,"1441":1,"1444":1,"2008":1}}],["addratelimiter",{"3":{"1324":1,"1339":5,"1436":1}}],["addrangeasync",{"3":{"1286":5,"1359":1}}],["addrange",{"3":{"1237":2,"1259":4,"1271":2,"1309":1,"1380":2,"1395":1,"1396":3,"1415":1}}],["addrawsqlqueryexecutor",{"3":{"1175":1,"1286":1}}],["addrow",{"3":{"1286":1}}],["addroleadministrationui",{"3":{"1059":1,"1324":3,"1415":2}}],["addroomnameuniqueindex",{"3":{"1209":2}}],["addroomcommandvalidatortests",{"3":{"1199":1,"1207":1,"1359":2}}],["addroomcommandvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":20}}],["addroomcommand",{"3":{"1199":7,"1203":1,"1207":2,"1359":8,"1374":1,"1380":3,"1395":1}}],["addroomrequest",{"3":{"1199":3,"1203":1,"1207":1,"1359":1,"1374":1,"1380":5,"1382":1,"1395":2}}],["addroomhandlertests",{"3":{"1199":1,"1207":2,"1359":1}}],["addroomhandler",{"3":{"926":1,"1199":2,"1203":1,"1207":2,"1270":3,"1350":2,"1359":13,"1395":3}}],["addroom",{"3":{"926":1,"1203":3,"1207":8,"1270":1,"1343":1,"1350":3,"1359":11,"1395":1}}],["addrequesttransform",{"3":{"1339":2}}],["addref",{"3":{"1324":2}}],["addreverseproxy",{"2":{"837":1},"3":{"837":1,"838":1,"1338":1,"1447":1,"2024":1}}],["address~~",{"3":{"1631":1}}],["addresssavedmessage",{"3":{"1436":2}}],["addressstate",{"3":{"1237":1,"1286":1}}],["addressaddressline2",{"3":{"1286":1}}],["addressaddressline1",{"3":{"1286":1}}],["addressable",{"3":{"572":1,"1150":1,"1270":1,"1286":1,"1311":1,"1350":2,"1359":5,"1402":1}}],["addresspropertyprefix",{"3":{"1286":1}}],["addresscolumn",{"3":{"1286":1}}],["addresscountry",{"3":{"1237":1,"1286":1}}],["addresscity",{"3":{"657":1,"1237":1,"1286":1}}],["addresszipcode",{"3":{"1237":1,"1286":1}}],["addresstestdbcontext",{"3":{"1199":2,"1207":1}}],["addresstests",{"3":{"1199":1,"1207":2}}],["addressvalidationrules",{"2":{"1829":1},"3":{"1207":7,"1271":28,"1810":1,"1829":1}}],["addressvalidationrulestests",{"3":{"1199":1,"1207":3,"1271":8}}],["addressvalidator",{"2":{"1834":1},"3":{"1199":3,"1203":1,"1207":1,"1237":1,"1271":11,"1300":1,"1415":2,"1829":1,"1834":1}}],["addressline2maxlength",{"2":{"1271":1},"3":{"1237":1,"1271":1}}],["addressline2",{"3":{"1237":2,"1286":2,"1324":1,"1764":1}}],["addressline2rules",{"3":{"1199":3,"1203":1,"1207":1,"1271":5}}],["addressline1maxlength",{"2":{"1237":1,"1271":1},"3":{"1237":2,"1271":1}}],["addressline1rules",{"2":{"1829":1},"3":{"1199":3,"1203":1,"1207":1,"1237":2,"1271":7,"1829":1}}],["addressline1",{"3":{"657":2,"1234":1,"1237":5,"1271":1,"1286":3,"1324":1,"1764":2,"1767":1}}],["addressing",{"3":{"1152":1,"1286":2,"1324":2,"2019":1}}],["addressinvariantstests",{"3":{"1199":1,"1207":2}}],["addressinvariants",{"2":{"657":1,"658":1,"1237":3,"1271":4,"1829":1,"1833":1},"3":{"657":4,"658":1,"1198":1,"1199":13,"1203":1,"1207":2,"1229":2,"1230":1,"1234":4,"1237":16,"1271":24,"1286":2,"1767":1,"1810":2,"1829":1,"1833":1}}],["addressee",{"3":{"1309":1}}],["addressed",{"3":{"0":1,"751":1,"1264":1,"1270":3,"1285":1,"1300":1,"1323":1,"1350":1,"1359":5,"1395":1,"1402":1,"1415":1,"1810":1}}],["addresses",{"3":{"0":2,"100":1,"160":1,"175":1,"219":1,"280":1,"282":1,"284":1,"395":1,"403":1,"574":1,"658":1,"749":1,"828":1,"831":1,"832":1,"853":1,"888":1,"1017":1,"1091":1,"1093":1,"1124":1,"1237":2,"1270":2,"1286":1,"1300":4,"1309":7,"1311":4,"1312":2,"1322":2,"1323":3,"1324":1,"1334":1,"1339":1,"1359":7,"1369":1,"1395":4,"1406":2,"1407":1,"1408":2,"1415":6,"1417":3,"1436":5,"1441":1,"1447":1,"1455":1,"1467":1,"1473":1,"1474":1,"1639":1,"1641":1,"1890":2,"1935":1,"2002":1,"2196":1}}],["address",{"0":{"1408":1},"2":{"655":2,"660":1,"1908":1},"3":{"0":11,"59":1,"157":2,"159":1,"161":1,"175":1,"177":1,"179":1,"180":1,"225":1,"235":1,"280":2,"284":3,"348":1,"350":4,"352":2,"353":8,"363":1,"390":1,"403":1,"450":1,"655":2,"657":15,"658":1,"659":1,"660":2,"717":1,"733":1,"749":1,"827":5,"828":1,"829":1,"831":1,"833":1,"837":1,"838":2,"839":1,"841":1,"853":3,"854":5,"855":1,"856":2,"857":1,"881":1,"1018":1,"1020":1,"1059":1,"1124":2,"1126":1,"1184":2,"1188":1,"1198":1,"1199":15,"1203":1,"1207":2,"1212":3,"1229":2,"1230":1,"1234":7,"1237":39,"1241":1,"1247":2,"1270":1,"1271":43,"1286":13,"1289":3,"1292":1,"1293":1,"1294":6,"1295":3,"1300":73,"1309":4,"1311":11,"1312":1,"1322":1,"1323":31,"1324":56,"1327":1,"1330":1,"1337":1,"1339":19,"1344":1,"1347":1,"1350":6,"1355":4,"1359":28,"1364":1,"1365":2,"1368":1,"1369":3,"1380":1,"1389":2,"1391":2,"1394":1,"1395":16,"1396":3,"1402":1,"1405":1,"1406":6,"1407":4,"1408":6,"1413":1,"1415":60,"1416":3,"1417":35,"1424":1,"1427":1,"1432":2,"1433":1,"1436":40,"1438":5,"1441":5,"1444":1,"1447":3,"1467":3,"1476":1,"1492":1,"1496":1,"1498":1,"1526":1,"1541":1,"1577":1,"1596":1,"1629":1,"1630":4,"1631":1,"1639":8,"1641":34,"1653":1,"1662":2,"1666":1,"1667":1,"1719":1,"1727":1,"1742":1,"1746":2,"1747":3,"1750":2,"1764":6,"1765":8,"1767":8,"1768":2,"1769":1,"1790":1,"1810":3,"1825":1,"1828":1,"1829":2,"1833":1,"1834":1,"1896":1,"1908":1,"1911":1,"1973":4,"1977":5,"1978":1,"1979":3,"1998":1,"2006":1,"2023":1,"2024":1,"2076":1,"2132":1,"2140":1,"2144":1,"2196":1,"2198":1,"2235":1,"2237":1}}],["addredisdistributedcache",{"2":{"234":1,"245":1,"254":1,"257":1,"259":1,"260":1},"3":{"0":1,"234":1,"245":1,"254":1,"257":1,"259":1,"260":1,"1339":2,"1467":1}}],["addredisoutputcaching",{"2":{"241":1,"243":1,"247":1,"259":1,"260":1,"261":1,"390":1,"392":1,"393":1,"1332":1,"1668":1},"3":{"0":3,"241":1,"243":1,"247":1,"259":1,"260":2,"261":2,"390":1,"392":1,"393":1,"1332":2,"1339":6,"1442":1,"1526":1,"1600":1,"1668":1}}],["addredisclient",{"2":{"234":1,"257":1,"260":1},"3":{"0":2,"234":1,"245":1,"254":1,"257":1,"259":1,"260":1,"1301":2,"1323":1,"1339":2}}],["addrediscaching",{"2":{"237":1,"241":1,"245":2,"247":1,"260":1,"261":1,"1923":1},"3":{"0":3,"235":1,"237":1,"241":1,"245":2,"247":1,"259":1,"260":2,"261":2,"996":1,"1301":2,"1332":2,"1339":6,"1442":1,"1668":1,"1923":1}}],["addbunitpersistentcomponentstate",{"3":{"1436":2}}],["addbookmarkasync",{"3":{"1395":2}}],["addboundedblazorcircuits",{"2":{"831":1,"832":1,"1124":1},"3":{"831":1,"832":3,"1124":1,"1324":6,"1416":1}}],["addbrokermessaging",{"2":{"195":1,"196":1,"200":1,"201":1,"915":1,"917":1,"931":1,"934":1,"979":1,"1257":1,"1446":1,"1451":1,"1612":1,"2008":1,"2022":1},"3":{"195":1,"196":1,"200":1,"201":1,"640":3,"690":1,"915":1,"917":1,"931":1,"934":1,"979":1,"1257":1,"1259":10,"1311":1,"1316":1,"1317":1,"1320":2,"1323":12,"1326":1,"1339":3,"1380":1,"1441":3,"1444":2,"1446":1,"1451":1,"1467":1,"1534":1,"1591":2,"1612":1,"2008":1,"2022":1}}],["addbrowserdevicecapabilities",{"2":{"413":1,"1599":1,"2119":1},"3":{"0":1,"413":1,"1416":2,"1417":20,"1599":1,"2119":1}}],["addhours",{"3":{"1436":1}}],["addhostedservice",{"3":{"1100":1,"1259":1,"1286":1,"1317":1,"1323":5,"1396":4,"1442":1}}],["addhandler",{"3":{"1359":1}}],["addhybridcache",{"3":{"733":1,"1301":3,"1323":2,"1438":1}}],["addhttpforwarder",{"3":{"1324":2}}],["addhttpforwarderwithservicediscovery",{"2":{"837":1,"1467":1},"3":{"837":1,"1467":1}}],["addhttpmessagehandler",{"3":{"507":1,"1311":1,"1324":2}}],["addhttpclient",{"3":{"1359":1,"1369":2,"1416":2,"1653":1,"1702":1}}],["addhttpclientinstrumentation",{"2":{"402":1,"1443":1},"3":{"402":1,"1443":1}}],["addhttpcontextaccessor",{"2":{"303":1},"3":{"303":1,"1311":3,"1312":1,"1324":2,"1415":2,"1436":2}}],["addunsupportedrange",{"3":{"1310":2}}],["addunsupported",{"3":{"1310":2}}],["addunchecked",{"3":{"1237":2}}],["adduseremailconfirmation",{"3":{"1209":2}}],["adduserlockedon",{"3":{"1209":2}}],["adduseravatar",{"3":{"1209":2}}],["adduseradministrationui",{"3":{"1059":1,"1324":4,"1415":3}}],["adduserpreferences",{"3":{"1209":2,"1496":2,"1591":1}}],["addusersessionbookmarksessionidindex",{"3":{"1209":2}}],["adduserdataexportsection",{"2":{"846":1,"1317":1,"1672":1},"3":{"583":2,"846":1,"1317":1,"1323":5,"1415":5,"1672":1}}],["adduiratelimiting",{"3":{"832":2,"1124":1,"1324":4}}],["adduimodule",{"2":{"652":1},"3":{"649":1,"652":1,"1324":6,"1395":14,"1415":5,"1669":1}}],["adduishared",{"2":{"412":1,"414":1,"415":1,"558":1,"647":1,"681":1,"686":1,"2122":1,"2123":1},"3":{"0":2,"243":1,"245":1,"258":2,"265":4,"273":1,"412":1,"413":2,"414":1,"415":1,"556":1,"558":1,"647":1,"649":2,"681":1,"686":1,"881":1,"954":1,"979":2,"1212":1,"1324":33,"1395":2,"1416":11,"1417":19,"1434":2,"1436":13,"1653":2,"2085":1,"2118":1,"2119":2,"2122":1,"2123":1}}],["adddays",{"3":{"1369":1}}],["adddataprotection",{"3":{"1324":2,"1339":1}}],["adddatabasehealthchecks",{"2":{"1332":1},"3":{"1332":1,"1339":2,"1443":1}}],["adddatabase",{"2":{"2097":1},"3":{"633":1,"1684":1,"2097":1}}],["adddevicecapabilities",{"3":{"1417":2}}],["adddevicecapabilitydefaults",{"2":{"413":1,"681":1,"682":1,"1491":1,"2118":1,"2123":1},"3":{"413":2,"681":1,"682":1,"1324":2,"1417":35,"1491":1,"2118":1,"2123":1}}],["adddebug",{"3":{"1416":1}}],["adddefaulthealthchecks",{"2":{"1329":1,"1332":1},"3":{"1329":1,"1332":1,"1339":4,"1443":1,"1577":1}}],["adddefaultpolicy",{"2":{"774":1},"3":{"774":1}}],["adddsarcontrollers",{"3":{"725":1}}],["adddomainevent",{"0":{"2091":1},"2":{"20":1,"1233":1,"1251":1,"1701":1,"1838":1,"2020":1,"2091":1,"2098":1,"2111":1},"3":{"20":2,"1231":1,"1233":1,"1237":4,"1251":1,"1252":1,"1259":1,"1286":1,"1345":1,"1349":1,"1350":8,"1359":3,"1396":3,"1415":6,"1665":1,"1701":1,"1810":1,"1838":1,"2020":1,"2091":2,"2098":1,"2111":1}}],["addfeaturemanagement",{"2":{"300":1,"2138":1},"3":{"300":1,"303":1,"1311":3,"1436":3,"2136":1,"2138":1}}],["addforwardedjwtbearercore",{"3":{"827":1,"1300":1,"1311":2}}],["addforwardedjwtbearer",{"2":{"31":1,"34":1,"1586":1,"1611":1,"1613":1,"1619":1,"1667":1,"1897":1,"1898":1,"1904":1},"3":{"31":3,"34":1,"827":1,"1212":1,"1300":2,"1311":16,"1415":1,"1436":2,"1438":1,"1490":1,"1526":1,"1586":1,"1611":1,"1613":1,"1619":1,"1667":1,"1897":1,"1898":1,"1904":1}}],["addtokenpermissiongrants",{"3":{"1415":2}}],["addtokenifnotstopword",{"3":{"1359":1}}],["addtocalendarbutton",{"3":{"1324":1}}],["addtocalendarbuttontests",{"3":{"1199":1,"1207":2}}],["addtogroupasync",{"3":{"1309":1,"1323":1}}],["addtransforms",{"3":{"1339":3}}],["addtransient",{"3":{"1309":1,"1323":1,"1324":2}}],["addtrustedcallerheader",{"2":{"180":1},"3":{"0":1,"180":1,"827":1,"1324":5}}],["addtwofactorauthentication",{"2":{"674":1,"1059":1,"1316":1,"1322":1,"2202":1},"3":{"674":1,"1059":1,"1270":1,"1300":3,"1316":1,"1322":1,"1323":1,"2202":1}}],["addtypedserviceclient",{"2":{"67":1,"68":1,"70":1,"74":1},"3":{"67":1,"68":2,"70":1,"74":1,"1311":2,"1316":1,"1323":2,"1339":1,"1438":1}}],["addtypedgrpcclient",{"0":{"2019":1}}],["addtypedgrpcclient",{"2":{"53":1,"67":1,"68":1,"70":1,"100":1,"585":1,"1328":1,"1656":1,"1663":1,"2009":1,"2019":1,"2028":1,"2030":1,"2031":1,"2038":1},"3":{"53":1,"67":1,"68":2,"70":1,"100":1,"585":1,"1309":3,"1311":1,"1312":7,"1323":1,"1328":1,"1339":3,"1378":1,"1380":4,"1396":2,"1415":2,"1441":3,"1467":1,"1577":1,"1656":1,"1663":1,"2009":1,"2019":1,"2028":1,"2030":1,"2031":1,"2038":1}}],["addnotificationui",{"3":{"1324":13,"1396":2}}],["addnotificationuserexportclient",{"3":{"1309":4,"1415":1}}],["addnotificationlivechannelclient",{"2":{"1946":1},"3":{"1309":4,"1946":1}}],["addnotificationmodule",{"2":{"1308":1},"3":{"1308":1,"1309":5}}],["addnotificationapplicationservices",{"2":{"1304":1,"1309":1},"3":{"1304":1,"1309":8}}],["addnotificationinfrastructure",{"2":{"1316":1},"3":{"1286":3,"1309":2,"1316":1,"1323":1}}],["addnotificationcontrollers",{"2":{"434":1,"725":1,"1666":1},"3":{"434":1,"725":1,"1309":10,"1666":1}}],["addnpgsql",{"3":{"0":1,"1034":1,"1339":1}}],["addnativepushnotifications",{"2":{"434":1,"1316":1,"1936":1},"3":{"0":1,"434":1,"1309":2,"1316":1,"1323":9,"1936":1}}],["addidentityui",{"3":{"1415":8}}],["addidentitymodule",{"3":{"1415":7}}],["addidentityattendeeclient",{"2":{"1413":1},"3":{"1413":1,"1415":6}}],["additemhandler",{"3":{"1686":1,"1765":1,"1767":2}}],["additemrequest",{"3":{"1686":1}}],["additem",{"3":{"1684":1,"1686":4,"1728":1,"1765":1}}],["additemasync",{"3":{"1395":1}}],["additemcommand",{"2":{"91":1},"3":{"91":1,"1270":1,"1686":1}}],["additively",{"3":{"0":2,"186":1,"265":1,"1270":1,"1311":5,"1338":1,"1415":1,"1667":1,"1962":1}}],["additive",{"3":{"0":7,"39":1,"41":1,"78":1,"93":1,"95":1,"150":1,"158":1,"255":1,"305":1,"546":1,"564":2,"565":1,"568":1,"599":1,"600":1,"698":1,"699":1,"784":1,"827":1,"852":1,"854":1,"903":1,"905":1,"907":2,"920":2,"922":1,"926":1,"1024":1,"1026":1,"1027":1,"1034":1,"1075":1,"1084":1,"1229":1,"1234":1,"1237":1,"1247":1,"1249":1,"1259":2,"1266":1,"1270":7,"1286":5,"1290":1,"1300":11,"1309":2,"1311":10,"1323":2,"1324":2,"1338":1,"1339":6,"1350":1,"1369":1,"1395":1,"1396":3,"1409":1,"1415":7,"1417":1,"1420":1,"1427":1,"1436":3,"1442":1,"1455":1,"1467":3,"1477":1,"1547":1,"1611":1,"1631":1,"1632":1,"1639":1,"1667":1,"1720":1,"1724":1,"1727":1,"1734":1,"1889":1,"1892":1,"1965":1,"2063":1,"2123":1,"2198":1}}],["additions",{"3":{"0":2,"99":1,"111":1,"135":1,"141":1,"344":1,"413":1,"718":1,"906":1,"1093":1,"1116":1,"1132":1,"1262":1,"1286":1,"1324":1,"1350":1,"1369":1,"1415":1,"1422":1,"1436":5,"1443":1,"1489":1,"1496":5,"1631":1,"1638":1,"1685":1,"1779":2,"2174":1,"2210":1}}],["additionalhandlers",{"3":{"1324":1}}],["additionaltoken",{"3":{"1324":4}}],["additionaltokenissuingpaths",{"2":{"1184":1},"3":{"1184":1,"1324":2}}],["additionalclaims",{"2":{"1288":1},"3":{"1288":1,"1300":4,"1488":1}}],["additionalrequestpatterns",{"2":{"1091":1,"1424":1},"3":{"1091":1,"1093":1,"1424":1,"1427":3}}],["additionalproperties",{"3":{"1018":1,"1366":1,"1369":1,"1427":9}}],["additionalportmappings",{"2":{"92":1,"95":1,"96":1,"102":1},"3":{"92":1,"95":2,"96":1,"102":1,"790":1,"1467":1}}],["additionalfiles",{"3":{"135":1}}],["additionalfilters",{"3":{"1324":3}}],["additionalfilter",{"2":{"889":1},"3":{"0":1,"889":2,"1286":6,"1396":2}}],["additionally",{"3":{"18":1,"126":1,"132":1,"135":1,"140":1,"207":1,"212":1,"214":1,"235":1,"383":1,"556":1,"562":1,"618":1,"626":1,"633":1,"666":1,"691":1,"692":1,"698":1,"725":1,"827":1,"832":1,"881":1,"1229":1,"1256":1,"1259":2,"1263":1,"1270":2,"1286":3,"1301":1,"1309":3,"1311":3,"1323":3,"1324":2,"1332":1,"1334":1,"1339":3,"1350":4,"1352":1,"1353":1,"1359":2,"1369":1,"1373":1,"1380":4,"1396":3,"1398":1,"1402":5,"1415":1,"1416":1,"1417":3,"1427":3,"1428":1,"1431":1,"1436":8,"1443":1,"1445":1,"1455":2,"1488":1,"1591":1,"1627":1,"1635":1,"1639":1,"1640":1,"1641":2,"1643":1,"1757":1,"1821":1,"1969":1,"2000":1}}],["additionalassemblies=",{"3":{"1324":1}}],["additionalassemblies",{"2":{"649":1,"651":1,"2077":1},"3":{"0":1,"649":1,"651":2,"905":1,"1212":1,"1286":2,"1324":1,"1416":1,"2077":1}}],["additional",{"2":{"1459":1},"3":{"0":1,"92":1,"395":1,"401":1,"1281":1,"1286":4,"1311":1,"1323":1,"1324":1,"1339":1,"1359":1,"1395":2,"1415":1,"1417":1,"1436":1,"1459":1,"1630":1,"1641":2,"1776":1}}],["addition",{"3":{"0":1,"71":1,"135":1,"145":1,"197":1,"265":1,"564":1,"566":1,"649":1,"657":1,"686":1,"903":1,"915":1,"1034":1,"1237":1,"1286":2,"1300":2,"1311":2,"1350":1,"1380":1,"1395":4,"1415":4,"1436":3,"1438":2,"1455":1,"1459":1,"1585":1,"1638":1,"1639":1,"1641":2,"1654":1,"1779":1}}],["addinitscript",{"3":{"1436":1}}],["addinitscriptasync",{"3":{"1436":1}}],["addinterceptor",{"3":{"1312":1}}],["addinterceptors",{"2":{"715":1},"3":{"715":1}}],["addinternalcommands",{"2":{"1044":1,"2192":1},"3":{"674":1,"1044":1,"1209":8,"1316":1,"1318":1,"1323":2,"2192":1}}],["addinteractiveserverrendermode",{"2":{"556":1},"3":{"556":1,"1436":1}}],["addinteractiveservercomponents",{"2":{"556":1,"831":1,"832":1,"1124":1},"3":{"556":1,"831":1,"832":1,"1124":1,"1324":2,"1416":1,"1436":1}}],["addinteractivewebassemblyrendermode",{"2":{"556":1},"3":{"556":1}}],["addinteractivewebassemblycomponents",{"2":{"556":1},"3":{"556":1}}],["addinclude",{"3":{"549":1,"1240":1,"1247":1,"1436":1}}],["addinboxmessages",{"2":{"200":1},"3":{"195":1,"200":1,"1209":8,"1591":1}}],["adding",{"0":{"1722":1},"2":{"983":1},"3":{"0":2,"7":1,"78":2,"88":1,"96":1,"100":1,"135":2,"158":1,"166":1,"168":1,"187":1,"255":1,"265":3,"293":1,"318":1,"361":1,"365":1,"372":1,"390":1,"391":2,"397":3,"415":1,"443":1,"448":1,"465":1,"470":1,"490":1,"552":1,"564":2,"574":1,"585":1,"642":1,"648":1,"698":1,"707":1,"708":1,"725":2,"740":1,"741":2,"743":1,"759":1,"781":1,"783":2,"784":1,"819":1,"827":2,"838":2,"839":1,"855":1,"862":1,"913":1,"921":1,"923":1,"948":1,"983":1,"986":1,"1011":1,"1012":1,"1016":1,"1048":1,"1052":1,"1068":1,"1109":1,"1144":1,"1147":1,"1174":1,"1179":1,"1212":3,"1229":2,"1237":5,"1243":1,"1247":5,"1249":1,"1259":6,"1262":1,"1270":3,"1271":1,"1278":1,"1280":1,"1286":18,"1300":7,"1309":2,"1310":3,"1311":18,"1312":1,"1323":5,"1324":13,"1339":8,"1343":1,"1344":1,"1350":7,"1352":2,"1359":42,"1362":1,"1369":6,"1380":6,"1386":1,"1389":1,"1395":16,"1396":7,"1401":1,"1402":1,"1415":14,"1416":1,"1417":2,"1427":1,"1436":18,"1438":2,"1441":1,"1447":1,"1453":1,"1467":2,"1473":2,"1488":1,"1489":2,"1496":3,"1526":2,"1542":2,"1576":1,"1638":1,"1643":1,"1646":1,"1653":2,"1658":1,"1677":1,"1686":1,"1689":2,"1692":1,"1698":1,"1720":1,"1722":1,"1727":2,"1729":2,"1755":1,"1767":3,"1769":1,"1776":1,"1781":1,"1826":1,"1835":1,"1841":1,"1858":1,"1865":1,"1868":1,"1889":1,"1911":1,"1913":1,"1932":1,"1945":1,"1958":2,"1961":1,"1972":1,"2028":1,"2030":1,"2077":1,"2078":1,"2079":1,"2080":1,"2083":2,"2085":1,"2100":2,"2104":1,"2106":1,"2108":1,"2131":1,"2142":1,"2147":1,"2172":1,"2194":1,"2195":1,"2220":1,"2230":2}}],["addinfrastructurehealthchecks",{"2":{"166":1,"1034":1,"1332":1,"1442":1,"1443":1,"1670":1,"1727":1},"3":{"166":1,"1034":1,"1332":1,"1339":6,"1438":1,"1442":1,"1443":1,"1670":1,"1727":1}}],["addinfrastructure",{"2":{"157":1,"230":1,"257":1,"260":1,"344":1,"672":1,"931":1,"949":1,"979":1,"996":1,"1286":1,"1319":1,"1368":1,"1824":1,"1842":1,"1851":1,"1909":1,"1935":1,"1938":1,"2095":1},"3":{"0":1,"117":2,"157":1,"230":1,"243":1,"257":1,"259":2,"260":1,"281":1,"310":1,"344":1,"434":1,"672":1,"674":3,"733":1,"931":2,"946":1,"949":1,"979":2,"996":2,"1059":1,"1212":1,"1259":7,"1270":1,"1279":1,"1286":14,"1300":2,"1301":3,"1309":4,"1311":1,"1316":1,"1317":2,"1318":3,"1319":1,"1320":2,"1323":20,"1324":2,"1368":1,"1369":1,"1395":1,"1396":2,"1406":1,"1415":1,"1436":2,"1438":1,"1492":1,"1824":1,"1842":1,"1851":1,"1909":1,"1935":1,"1938":1,"2000":1,"2095":1,"2098":1}}],["addorupdate",{"3":{"1309":1}}],["addorderitemrequest",{"3":{"1686":1}}],["addordersmodule",{"3":{"1651":1,"1653":1}}],["addorderstatusandcreatedonindexes",{"3":{"564":1}}],["addorderlinecount",{"3":{"1600":1}}],["addorderlinecommand",{"3":{"1199":3,"1207":1}}],["addorderlinelistprice",{"3":{"1026":1}}],["addorderby",{"3":{"549":1,"1240":1,"1247":2,"1436":1}}],["addoutcome",{"3":{"1396":2}}],["addoutboxorigin",{"3":{"1209":8}}],["addoutboxinboxretentionindexes",{"3":{"564":2,"1209":8,"1591":1}}],["addoutputcache",{"2":{"245":1,"390":1,"393":1,"1923":1},"3":{"243":3,"245":1,"390":2,"393":1,"1301":1,"1311":2,"1339":1,"1923":1}}],["addoutputcacheevictionhandler",{"2":{"255":1,"258":1,"390":1,"391":1,"393":1,"1379":1},"3":{"0":1,"255":1,"258":1,"390":1,"391":1,"393":1,"1259":2,"1311":5,"1379":1,"1526":1}}],["addoption",{"3":{"1402":5}}],["addoptions",{"3":{"0":1,"674":3,"676":1,"707":1,"733":1,"827":1,"832":1,"1212":1,"1286":1,"1300":2,"1301":1,"1309":1,"1320":1,"1323":4,"1324":3,"1339":3,"1396":2,"2013":1}}],["addoperationtransformer",{"3":{"1311":1}}],["addopenaiprovider",{"2":{"1420":1},"3":{"1091":1,"1420":1,"1427":5}}],["addopenapi",{"2":{"454":1,"1929":1},"3":{"448":1,"454":5,"1050":1,"1311":9,"1438":2,"1929":1}}],["addopentelemetryexporters",{"2":{"397":1,"1333":1,"2156":1,"2157":1},"3":{"397":1,"1333":1,"1339":4,"1443":1,"1467":1,"2156":1,"2157":1}}],["addmaildev",{"3":{"1326":2,"1339":1,"1441":1,"1444":1,"1670":1}}],["addmasstransit",{"3":{"1323":2}}],["addmauiformfactor",{"3":{"1324":1,"1416":3,"1417":5}}],["addmauiblazorwebview",{"3":{"1212":1,"1416":1}}],["addmauipushdevicetokenprovider",{"2":{"413":1,"434":1,"436":1,"1669":1},"3":{"0":1,"413":1,"434":1,"436":1,"1416":3,"1417":5,"1669":1}}],["addmauidevicecapabilities",{"2":{"411":1,"413":1,"415":1,"1417":1,"2118":1,"2119":1,"2122":1},"3":{"0":1,"411":2,"413":3,"415":1,"1417":30,"2118":1,"2119":1,"2122":1}}],["addminiprofiler",{"3":{"1311":1}}],["addminiprofilerifenabled",{"2":{"1666":1},"3":{"1311":1,"1666":1}}],["addmultitenancytests",{"3":{"1199":1,"1207":2,"1286":2,"1438":2}}],["addmultitenancy",{"2":{"696":1,"979":1,"1232":1,"1851":1},"3":{"674":1,"696":1,"698":1,"979":1,"1232":1,"1237":2,"1270":2,"1286":6,"1311":1,"1316":1,"1317":1,"1323":4,"1526":1,"1851":1}}],["addmudservices",{"2":{"954":1},"3":{"265":1,"954":1,"1324":5,"1416":1,"1436":6}}],["addmetrics",{"3":{"1421":1,"1427":1}}],["addmeter",{"2":{"404":1,"407":1,"408":1},"3":{"258":1,"261":1,"404":1,"407":1,"408":1,"1247":1,"1270":1,"1339":2,"2159":1}}],["addmemorycache",{"3":{"1301":2}}],["addmessagebroker",{"2":{"644":1,"2008":1},"3":{"640":1,"644":1,"1326":2,"1339":3,"1441":1,"1444":1,"1670":1,"2008":1}}],["addmvc",{"3":{"448":1}}],["addmoduleordersinfrastructure",{"2":{"1651":1},"3":{"1651":1}}],["addmodule",{"3":{"1415":1}}],["addmoduleidentityinfrastructure",{"3":{"1415":4}}],["addmoduleidentityapplication",{"3":{"1415":6}}],["addmoduleidentityapi",{"3":{"1406":1,"1415":6}}],["addmoduleengagementinfrastructure",{"3":{"1396":6}}],["addmoduleengagementapplication",{"3":{"1396":4}}],["addmoduleengagementapi",{"3":{"318":1,"1380":1,"1396":12,"1995":1}}],["addmoduleconferenceinfrastructure",{"2":{"1368":1},"3":{"1368":1,"1369":2,"1380":2}}],["addmoduleconferenceapplication",{"3":{"1359":2,"1380":2}}],["addmoduleconferenceapi",{"2":{"1348":1,"1377":1},"3":{"1348":1,"1377":1,"1380":3}}],["addmodulenotificationapplication",{"3":{"1309":4,"1438":1}}],["addmodulesalesinfrastructure",{"2":{"790":1},"3":{"790":1}}],["addmodulehealthchecks",{"2":{"1700":1},"3":{"583":1,"1311":6,"1666":1,"1700":1}}],["addmodulehost",{"2":{"59":1,"63":1,"672":1,"675":1,"984":1,"1881":1},"3":{"0":1,"59":1,"63":1,"583":1,"672":1,"674":1,"675":1,"980":1,"984":1,"1311":8,"1315":2,"1323":4,"1663":1,"1670":1,"1881":1}}],["addmmcachatclient",{"2":{"1094":1,"1368":1,"1421":1,"1424":1,"1427":1,"2172":1,"2175":1},"3":{"1018":2,"1091":1,"1094":1,"1368":2,"1369":4,"1421":1,"1424":1,"1427":18,"1492":2,"1526":1,"2172":1,"2175":1}}],["addmmcaapplicationpipeline",{"2":{"115":1,"117":1,"122":1,"126":1,"127":1,"128":1,"1262":1,"1316":1,"1662":1,"1824":1,"1883":1},"3":{"0":3,"115":1,"117":1,"122":2,"126":1,"127":1,"128":1,"1262":2,"1311":1,"1312":1,"1316":2,"1323":11,"1396":1,"1415":2,"1436":2,"1438":1,"1662":1,"1824":2,"1883":1}}],["addmmcagatewaytests",{"3":{"1199":1,"1207":2,"1339":9,"1438":2}}],["addmmcagateway",{"2":{"825":1,"829":1,"1509":1},"3":{"0":3,"674":1,"825":1,"827":1,"829":1,"1338":2,"1339":11,"1447":4,"1509":1,"1663":1,"2024":1}}],["addenda",{"0":{"1639":1}}],["addengagementui",{"3":{"1396":6,"1416":1}}],["addengagementuserexportclient",{"3":{"1396":4,"1415":1}}],["addengagementmodule",{"3":{"1396":11}}],["addengagementbookmarkcountclient",{"2":{"1378":1},"3":{"1323":1,"1359":1,"1378":1,"1396":5}}],["addentityframework",{"3":{"1311":1}}],["addentityconfigurationassembly",{"2":{"1316":1},"3":{"1286":1,"1316":1,"1323":1}}],["addentitycrudtests",{"3":{"1199":1,"1207":1}}],["addentitycrud",{"2":{"328":1,"920":1,"924":1,"925":1,"1352":1,"1354":1},"3":{"0":3,"122":1,"328":1,"572":1,"920":2,"922":2,"924":1,"925":1,"926":2,"1262":1,"1265":2,"1270":8,"1316":1,"1323":4,"1350":3,"1352":1,"1354":1,"1359":21,"1666":1,"1883":1}}],["addentityupdate",{"2":{"122":1,"1883":1},"3":{"0":1,"122":1,"926":2,"1262":1,"1265":1,"1270":2,"1316":1,"1323":4,"1359":5,"1666":1,"1883":1}}],["addentityupdateverb",{"2":{"122":1,"1265":1},"3":{"0":1,"122":1,"926":1,"1262":1,"1265":1,"1270":2,"1316":1,"1323":4,"1666":1}}],["adder",{"3":{"1286":1}}],["adderrorlocalization",{"3":{"1311":8,"1415":1}}],["adderrors",{"3":{"1229":1}}],["adderrorresources",{"2":{"636":1,"979":1,"1650":1,"1653":1,"1684":1,"1701":1,"1728":1,"2097":1},"3":{"979":1,"1311":9,"1379":1,"1380":1,"1396":3,"1415":2,"1591":1,"1650":1,"1653":1,"1666":1,"1684":1,"1701":1,"1728":1,"2097":1}}],["adderrorresources<",{"3":{"633":1,"636":1}}],["addexternallogincookie",{"3":{"1311":1}}],["addexternalauthproviders",{"2":{"350":1,"1667":1,"1975":1,"1978":1,"1979":1},"3":{"0":1,"350":2,"1311":1,"1415":1,"1667":1,"1975":1,"1978":1,"1979":1}}],["addexplicitmigrationsassemblies",{"3":{"1286":1}}],["addeventlistener",{"3":{"1417":1}}],["addeventticketingurl",{"3":{"1209":2}}],["addeventsponsorshippacketurl",{"3":{"1209":2}}],["addeventspeaker",{"3":{"1203":3,"1207":8,"1270":1,"1350":3,"1359":9,"1369":1}}],["addeventspeakerhandlertests",{"3":{"1199":1,"1207":2,"1359":1}}],["addeventspeakerhandler",{"3":{"1199":2,"1203":1,"1207":2,"1270":2,"1359":11}}],["addeventspeakercommandvalidatortests",{"3":{"1199":1,"1207":1,"1359":1}}],["addeventspeakercommandvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":5}}],["addeventspeakercommand",{"3":{"1199":7,"1203":1,"1207":2,"1359":8,"1380":4}}],["addeventspeakerrequest",{"3":{"1199":3,"1203":1,"1207":1,"1359":1,"1374":1,"1380":5}}],["addeventorganizercontactemail",{"3":{"1209":2}}],["addeventquestionmoderationdefault",{"3":{"1209":2}}],["addeventquestionanswer",{"3":{"1203":3,"1207":8,"1350":4,"1352":1,"1359":14,"1526":1}}],["addeventquestionanswercommandvalidatortests",{"3":{"1199":1,"1207":1,"1359":1}}],["addeventquestionanswercommandvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":11}}],["addeventquestionanswercommand",{"3":{"1199":7,"1203":1,"1207":2,"1359":12,"1380":4}}],["addeventquestionanswerrequest",{"2":{"1374":1},"3":{"1199":3,"1203":1,"1207":1,"1359":1,"1374":1,"1380":6}}],["addeventquestionanswerhandlertests",{"3":{"1199":1,"1207":2,"1359":1}}],["addeventquestionanswerhandler",{"3":{"690":1,"1199":2,"1203":1,"1207":2,"1350":7,"1352":2,"1359":20}}],["addeventupcaster",{"2":{"846":1,"848":1,"850":1,"1249":1,"1269":1,"1891":1},"3":{"0":1,"80":1,"846":1,"848":1,"850":1,"1247":3,"1249":1,"1259":3,"1269":1,"1270":3,"1316":1,"1323":3,"1891":1}}],["addemailconfirmation",{"2":{"2202":1},"3":{"674":1,"1059":1,"1300":2,"1316":1,"1322":1,"1323":1,"2202":1}}],["addedroomkey",{"3":{"1359":1}}],["added",{"2":{"784":1,"1755":1},"3":{"0":7,"3":1,"11":1,"21":1,"22":1,"27":1,"45":1,"47":1,"57":1,"93":2,"94":1,"109":1,"111":1,"121":1,"135":2,"138":1,"139":1,"140":1,"145":2,"149":1,"177":1,"184":1,"195":1,"201":3,"216":2,"219":1,"228":1,"248":1,"252":1,"254":1,"256":4,"258":1,"259":1,"317":1,"323":1,"342":1,"348":2,"364":1,"374":1,"383":1,"395":1,"397":3,"401":1,"408":1,"448":1,"450":1,"468":4,"475":1,"477":1,"489":1,"511":1,"526":1,"550":1,"558":1,"564":6,"565":1,"566":2,"575":1,"601":1,"611":1,"616":3,"618":2,"624":3,"626":1,"629":1,"633":1,"640":1,"655":1,"656":1,"665":1,"676":1,"690":3,"697":1,"698":3,"703":1,"715":3,"725":2,"741":1,"744":1,"745":1,"750":1,"759":1,"766":1,"780":2,"782":7,"784":2,"805":1,"812":1,"819":1,"825":1,"826":1,"827":1,"829":3,"838":2,"862":1,"869":1,"871":1,"889":1,"915":1,"921":1,"960":1,"988":3,"1004":2,"1018":2,"1026":1,"1034":2,"1051":1,"1062":1,"1108":1,"1110":1,"1117":1,"1185":1,"1195":1,"1212":2,"1222":1,"1229":3,"1233":1,"1237":4,"1247":2,"1249":1,"1251":1,"1259":8,"1270":13,"1271":2,"1274":2,"1277":1,"1278":1,"1280":1,"1281":3,"1283":1,"1286":34,"1300":6,"1301":2,"1309":5,"1311":13,"1315":1,"1316":1,"1323":15,"1324":14,"1326":1,"1332":1,"1333":1,"1335":2,"1339":18,"1343":2,"1345":1,"1349":1,"1350":50,"1359":24,"1369":5,"1380":1,"1386":1,"1395":15,"1396":33,"1402":12,"1409":1,"1415":6,"1416":2,"1417":1,"1425":1,"1436":26,"1438":9,"1441":1,"1442":2,"1443":3,"1447":1,"1455":8,"1465":2,"1467":3,"1476":2,"1478":1,"1486":1,"1489":1,"1492":2,"1496":92,"1497":4,"1498":2,"1500":1,"1505":1,"1519":1,"1534":1,"1572":1,"1591":1,"1597":1,"1611":2,"1631":8,"1632":2,"1633":1,"1634":11,"1641":4,"1651":1,"1652":1,"1653":1,"1656":1,"1661":1,"1666":1,"1680":1,"1684":3,"1685":1,"1686":2,"1693":1,"1697":1,"1701":1,"1703":1,"1727":1,"1728":1,"1729":1,"1731":1,"1742":1,"1747":1,"1749":2,"1755":1,"1764":1,"1767":1,"1769":13,"1776":2,"1826":1,"1840":1,"1851":1,"1856":1,"1858":1,"1876":1,"1897":1,"1915":1,"1932":1,"1933":1,"2001":1,"2013":1,"2031":1,"2063":1,"2081":2,"2085":1,"2092":1,"2096":1,"2097":1,"2131":1,"2132":1,"2156":1,"2158":1,"2203":2,"2232":1}}],["addchatclient",{"3":{"1421":1,"1427":2}}],["addcheckinsandattendeebadges",{"3":{"1209":2}}],["addchildentityhandlerbase",{"2":{"1260":1,"1265":1},"3":{"1199":7,"1203":1,"1207":1,"1260":1,"1265":1,"1270":2,"1359":8}}],["addcategoryitemasync",{"3":{"1395":1}}],["addcategoryitem",{"3":{"1203":3,"1207":6,"1270":1,"1350":4,"1359":13}}],["addcategoryitemhandlertests",{"3":{"1199":1,"1207":2}}],["addcategoryitemhandler",{"3":{"1199":2,"1203":1,"1207":2,"1270":5,"1350":1,"1359":8}}],["addcategoryitemcommandvalidatortests",{"3":{"1199":1,"1207":1}}],["addcategoryitemcommandvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":13}}],["addcategoryitemcommand",{"3":{"1199":7,"1203":1,"1207":2,"1359":13,"1380":4}}],["addcategoryitemrequest",{"3":{"1199":3,"1203":1,"1207":1,"1359":1,"1374":1,"1380":7}}],["addcaching",{"2":{"249":1,"250":1,"251":1,"252":1,"253":1,"260":1,"672":1,"677":1,"999":1,"1909":1},"3":{"0":3,"157":1,"243":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"256":1,"257":1,"259":1,"260":1,"672":1,"674":3,"677":1,"733":1,"996":1,"999":1,"1270":3,"1301":9,"1316":1,"1320":1,"1323":7,"1438":1,"1577":1,"1668":1,"1909":1,"1916":1}}],["addcors",{"3":{"1339":1}}],["addcompensatingindex",{"3":{"1286":1}}],["addcommentrequest",{"3":{"1651":1}}],["addcomment",{"3":{"1651":1,"1701":1}}],["addcommandrequestvalidator",{"2":{"926":1,"1263":1},"3":{"0":1,"926":1,"1263":1,"1270":1,"1271":2,"1323":4,"1359":1}}],["addcommonui",{"3":{"1577":1}}],["addcommonuifacades",{"2":{"647":1,"649":1,"652":1,"954":1,"955":1,"957":1},"3":{"0":2,"647":1,"649":1,"652":1,"954":1,"955":1,"957":1,"1324":10,"1436":3}}],["addcommonmauipubliclinkbuilder",{"3":{"1324":2,"1395":1,"1416":4,"1417":3}}],["addcommonmauitokenstorage",{"2":{"412":1,"507":1,"511":1,"513":1},"3":{"0":1,"412":1,"507":2,"511":1,"513":1,"1416":3,"1417":5}}],["addcommonwebformfactor",{"3":{"1324":3,"1416":1,"1417":2}}],["addcommonresponsecompression",{"3":{"1311":3}}],["addcommonratelimiting",{"2":{"175":1,"826":1,"1599":1,"2002":1,"2024":1},"3":{"175":3,"826":1,"1311":11,"1339":1,"1438":1,"1535":1,"1599":1,"1666":1,"2000":1,"2002":1,"2024":1}}],["addcommongatewaycors",{"2":{"774":1,"1336":1,"1670":1},"3":{"774":2,"1336":1,"1339":3,"1443":1,"1670":1}}],["addcommonkeyvaultconfiguration",{"2":{"599":1,"603":2,"665":1,"1442":1,"1450":1,"1575":1,"1586":1,"1670":1},"3":{"599":1,"603":2,"665":1,"1335":1,"1339":3,"1427":2,"1442":1,"1450":1,"1467":1,"1496":1,"1575":1,"1577":1,"1586":1,"1670":1}}],["addcommonopenapihostregistrationtests",{"2":{"454":1},"3":{"454":1,"1199":1,"1207":4,"1438":2}}],["addcommonopenapi",{"2":{"446":1,"453":1,"454":2,"1929":1},"3":{"446":2,"448":2,"453":1,"454":3,"1050":2,"1311":10,"1577":3,"1666":1,"1929":2}}],["addcommonexceptionhandlers",{"2":{"109":1,"112":1},"3":{"109":1,"112":1,"1311":9}}],["addcommonauthentication",{"2":{"31":1,"350":1,"1613":1,"1619":1,"1975":1},"3":{"31":2,"350":1,"674":1,"1300":1,"1311":8,"1320":1,"1488":1,"1526":1,"1613":1,"1619":1,"1975":1}}],["addcommonapiversioning",{"2":{"446":1,"448":1,"449":1,"450":1,"453":1,"1929":1,"2131":1,"2132":1,"2133":1},"3":{"0":1,"446":1,"448":3,"449":1,"450":1,"453":1,"1212":1,"1311":8,"1380":1,"1666":1,"1929":1,"2131":2,"2132":1,"2133":1}}],["addcommonsameoriginapiproxy",{"2":{"1182":1,"1184":1,"1186":1},"3":{"0":1,"1182":1,"1184":1,"1186":1,"1212":1,"1324":7}}],["addcommonservertokenstorage",{"2":{"507":1},"3":{"507":1,"1324":3,"1416":1,"1417":1}}],["addcommonserilog",{"2":{"395":1,"401":1},"3":{"0":1,"395":4,"401":2,"1333":2,"1339":3,"1442":1,"1670":1}}],["addcommonsecurityheaders",{"2":{"214":1,"216":1,"220":1,"1336":1,"2011":1,"2014":1,"2149":1,"2150":1,"2151":1,"2152":1},"3":{"0":1,"214":4,"216":2,"220":2,"1324":3,"1336":2,"1339":10,"1416":1,"1436":1,"1443":1,"1577":1,"2011":1,"2014":1,"2149":1,"2150":2,"2151":2,"2152":2}}],["addcommoncors",{"2":{"775":1,"776":1,"777":1,"1336":1},"3":{"0":1,"774":2,"775":1,"776":1,"777":1,"1212":1,"1311":2,"1336":1,"1339":1}}],["addcommondataprotection",{"2":{"665":1,"667":1,"668":1,"1335":1,"1336":1,"1442":1,"1450":1,"1670":1,"1970":1},"3":{"0":1,"665":3,"667":1,"668":1,"1212":1,"1335":1,"1336":1,"1339":3,"1442":1,"1450":1,"1467":1,"1496":1,"1670":1,"1970":2}}],["addcommonhybridcachetests",{"3":{"1199":1,"1207":2}}],["addcommonhybridcache",{"2":{"241":1,"245":1,"253":1,"259":1,"260":1,"261":1,"731":1,"735":1,"736":1,"1916":1},"3":{"0":2,"241":1,"243":1,"245":1,"253":1,"259":1,"260":3,"261":1,"731":1,"733":2,"735":1,"736":1,"1212":1,"1301":5,"1316":1,"1323":5,"1442":1,"1916":2}}],["addcommonhybridcachewhenredisconfigured",{"2":{"0":1,"241":1,"243":1,"245":1,"261":1,"279":1,"281":1,"283":1,"285":1,"733":1,"736":1,"1301":1},"3":{"0":1,"241":1,"243":1,"245":1,"261":1,"279":1,"283":1,"285":1,"733":1,"736":1,"1301":2}}],["addcommonblazorcsp",{"2":{"214":1,"216":1,"219":1,"220":1,"1336":1,"1525":1,"2150":1,"2151":1},"3":{"0":1,"214":1,"216":2,"219":1,"220":2,"1324":7,"1336":1,"1339":2,"1416":1,"1525":1,"1526":1,"2150":2,"2151":1}}],["addcontainer",{"3":{"1339":2}}],["addcontrollers",{"3":{"1309":3,"1311":1}}],["addcontentpolicyguardrail",{"2":{"1089":1,"1091":1,"1094":1,"1424":1},"3":{"1089":1,"1091":1,"1094":1,"1369":1,"1424":1,"1427":5,"1526":1,"1577":1}}],["addconfigfilter",{"3":{"1339":4}}],["addconfigurationassembly",{"3":{"1286":1,"1359":1,"1396":1,"1415":1}}],["addconferenceui",{"3":{"1395":4}}],["addconferenceeventlivevalidationclient",{"2":{"1378":1},"3":{"1350":2,"1378":1,"1380":2}}],["addconferencemodule",{"2":{"1314":1,"1880":1},"3":{"1314":1,"1377":1,"1380":5,"1880":1}}],["addconferencesessionvalidationclient",{"2":{"1312":1,"1378":1},"3":{"1312":2,"1350":1,"1378":1,"1380":2}}],["addconferenceaiguardrails",{"2":{"1018":1,"1021":1,"1094":1,"1095":1,"1368":1,"1435":1},"3":{"1018":3,"1021":1,"1094":3,"1095":1,"1368":1,"1369":5,"1427":2,"1435":1,"1496":1,"1526":2}}],["addconsumer",{"3":{"1259":2}}],["addclientauthsessioncookiesync",{"2":{"507":1},"3":{"507":1,"1324":4}}],["addpolicy",{"3":{"1311":1,"1339":3}}],["addpooleddbcontextfactory",{"3":{"1286":1}}],["addpoints",{"3":{"1209":2}}],["addpermissiongrants",{"3":{"1209":2}}],["addpermissions",{"2":{"188":1,"190":1,"349":1,"710":1,"1377":1,"1963":1,"1964":1,"1965":1},"3":{"0":1,"186":4,"188":1,"190":1,"349":1,"707":1,"710":1,"1059":1,"1270":1,"1297":1,"1300":8,"1304":1,"1309":3,"1311":1,"1323":1,"1377":1,"1380":2,"1396":4,"1415":4,"1496":1,"1526":1,"1653":2,"1667":1,"1962":1,"1963":2,"1964":1,"1965":1}}],["addpartners",{"3":{"1209":2}}],["addpiiredactionguardrail",{"2":{"1091":1,"1094":1,"1421":1,"1424":1},"3":{"1091":1,"1094":1,"1369":1,"1421":1,"1424":1,"1427":5,"1526":1}}],["addproductimage",{"3":{"1769":1}}],["addproductvariantdiscounts",{"3":{"1026":1}}],["addproject",{"3":{"1489":1,"1727":1}}],["addprocessor",{"3":{"1333":1,"1339":4}}],["addproblemdetails",{"3":{"109":1,"1311":1}}],["addpushnotificationdedupkey",{"3":{"1209":2}}],["addpushnotificationscopekey",{"3":{"1209":2}}],["addpushnotifications",{"2":{"227":1,"231":1,"380":1,"1935":1,"1944":1,"1949":1},"3":{"0":2,"225":3,"227":1,"231":1,"380":1,"674":1,"1307":1,"1309":11,"1316":1,"1320":2,"1323":4,"1467":1,"1935":2,"1944":2,"1949":1}}],["addpublicendpointpolicy",{"2":{"243":1,"259":1,"390":1,"1668":1,"1922":1},"3":{"0":2,"243":3,"259":1,"388":2,"390":1,"1301":1,"1311":2,"1379":1,"1668":1,"1922":2}}],["addazurekeyvault",{"3":{"1339":2}}],["addazureblobfilestorage",{"2":{"440":1,"1116":1,"1670":1,"2126":1,"2127":1,"2128":1},"3":{"0":1,"440":1,"1116":1,"1286":1,"1316":1,"1323":9,"1670":1,"2126":1,"2127":1,"2128":1}}],["addable",{"3":{"1309":1,"1396":1}}],["addactivity",{"3":{"1209":2}}],["addanthropicaiprovider",{"2":{"1094":1,"1095":1,"1420":1},"3":{"1018":1,"1091":1,"1094":1,"1095":1,"1420":1,"1427":6}}],["addadditionalassemblies",{"2":{"558":1,"651":1},"3":{"558":1,"651":1,"1416":1,"1436":1}}],["addassociationrequest",{"3":{"1380":1}}],["addaspnetcoreinstrumentation",{"2":{"402":1,"409":1},"3":{"402":1,"409":1}}],["addasync",{"2":{"883":1,"1386":1},"3":{"0":1,"881":2,"883":1,"1270":1,"1286":7,"1300":2,"1324":5,"1359":8,"1382":2,"1386":1,"1395":24,"1396":2,"1402":2,"1436":4,"2074":1}}],["addattributes",{"2":{"1052":1},"3":{"0":1,"1050":1,"1052":1,"1300":2}}],["addappleprovider",{"3":{"1311":1}}],["addapple",{"3":{"1311":1}}],["addapplicationpart",{"3":{"1309":1}}],["addapplicationprofiling",{"2":{"117":1,"1262":1,"1662":1,"1821":1},"3":{"117":1,"1262":1,"1270":8,"1316":1,"1323":4,"1438":1,"1662":1,"1821":1}}],["addapplicationdecorators",{"2":{"117":1,"119":1,"121":1,"122":1,"127":1,"587":1,"632":1,"922":1,"979":1,"1262":1,"1507":1,"1651":1,"1653":1,"1700":1,"1824":1,"1827":1,"1883":1,"2095":1,"2098":1,"2136":1},"3":{"0":3,"117":4,"119":1,"121":2,"122":2,"127":1,"572":2,"587":1,"632":1,"922":1,"979":1,"1212":1,"1262":3,"1263":1,"1270":15,"1300":2,"1309":1,"1311":6,"1316":5,"1323":17,"1359":2,"1415":1,"1436":6,"1438":1,"1507":1,"1651":1,"1653":1,"1700":1,"1824":4,"1827":1,"1883":2,"2095":2,"2098":2,"2136":1}}],["addapplication",{"2":{"127":1,"979":1,"980":1,"982":1,"1319":1,"1881":1},"3":{"0":1,"117":1,"121":1,"122":1,"127":1,"572":1,"979":3,"980":4,"982":1,"1214":1,"1247":1,"1259":1,"1262":2,"1270":2,"1271":1,"1300":1,"1311":3,"1315":1,"1316":2,"1319":1,"1323":8,"1415":1,"1436":4,"1438":2,"1881":1,"1883":1,"2098":1}}],["addapiparameterdescriptorbackfill",{"2":{"2131":1},"3":{"1311":2,"2131":1}}],["addapiversioning",{"2":{"454":1},"3":{"454":1}}],["addapiexplorer",{"3":{"448":1,"1311":1}}],["addapi",{"2":{"306":1,"656":1,"965":1,"966":1,"1824":1,"2095":1},"3":{"0":3,"117":2,"265":1,"300":1,"303":2,"306":1,"318":1,"326":1,"583":1,"656":1,"657":1,"740":1,"744":1,"964":4,"965":1,"966":1,"979":2,"1050":2,"1237":5,"1300":1,"1311":24,"1323":2,"1396":1,"1436":1,"1824":1,"1994":3,"2095":1,"2098":1,"2136":1,"2138":1}}],["addautomapper",{"2":{"1958":1},"3":{"1958":1}}],["addauthentication",{"2":{"1975":1},"3":{"350":1,"827":1,"1300":2,"1311":1,"1436":1,"1975":1}}],["addauthorizationcore",{"2":{"960":1,"1432":1},"3":{"954":2,"960":2,"1416":1,"1432":1,"1436":3,"1488":1,"1491":1}}],["addauthorization",{"2":{"59":1,"833":1,"1447":1},"3":{"0":1,"59":1,"827":2,"833":1,"1300":1,"1436":2,"1447":1}}],["addauthorizationpolicies",{"2":{"186":1,"189":1,"1300":1,"1698":1,"1963":1},"3":{"0":1,"186":1,"189":2,"1270":1,"1297":3,"1300":15,"1311":2,"1323":2,"1698":2,"1963":1}}],["addaudittrailandscheduler",{"3":{"1209":6}}],["addaudittrailtests",{"3":{"1199":1,"1207":2,"1286":2}}],["addaudittrail",{"2":{"713":1,"717":1,"979":1,"1232":1,"1277":1,"1839":1},"3":{"0":1,"674":1,"713":1,"715":3,"717":1,"720":3,"979":1,"1212":2,"1232":1,"1237":2,"1269":1,"1270":3,"1274":1,"1277":1,"1286":10,"1316":1,"1317":1,"1323":4,"1442":1,"1664":1,"1839":1}}],["addshoppingcartitem",{"3":{"1765":1,"1769":1}}],["addsomething",{"3":{"1380":1}}],["addsource",{"3":{"1339":5}}],["addsqlite",{"3":{"1339":1}}],["addsqlserver",{"3":{"1339":1,"1467":1}}],["addsupportedrange",{"3":{"1310":2}}],["addsupported",{"3":{"1310":2}}],["addschematransformer",{"3":{"1311":1}}],["addscheme",{"3":{"1300":1,"1436":1}}],["addscheduledjob",{"2":{"710":1},"3":{"707":1,"710":1,"846":1,"1270":1,"1286":1,"1317":1,"1323":3}}],["addscheduledjobstests",{"3":{"1199":1,"1207":4,"1323":2,"1438":2}}],["addscheduledjobs",{"2":{"705":1,"708":1,"720":1,"979":1,"1948":1},"3":{"0":1,"674":1,"705":1,"707":2,"708":1,"715":1,"720":1,"979":1,"1270":3,"1286":5,"1316":1,"1317":1,"1323":8,"1442":2,"1446":1,"1496":1,"1948":1}}],["addscoped",{"3":{"1286":1,"1304":1,"1309":1,"1311":1,"1323":2,"1324":9,"1359":2,"1395":6,"1396":5,"1415":3,"1417":4,"1653":1}}],["addspeakerquestionanswer",{"2":{"1639":1},"3":{"1350":2,"1496":1,"1639":1}}],["addspeakercategoryitem",{"3":{"1203":3,"1207":8,"1270":1,"1350":2,"1359":8}}],["addspeakercategoryitemhandlertests",{"3":{"1199":1,"1207":2,"1359":2}}],["addspeakercategoryitemhandler",{"3":{"1199":2,"1203":1,"1207":2,"1270":2,"1359":19}}],["addspeakercategoryitemcommandvalidatortests",{"3":{"1199":1,"1207":1,"1359":1}}],["addspeakercategoryitemcommandvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":6}}],["addspeakercategoryitemcommand",{"3":{"1199":7,"1203":1,"1207":2,"1359":11,"1380":4}}],["addspeakercategoryitemrequest",{"2":{"1374":1},"3":{"1199":3,"1203":1,"1207":1,"1359":1,"1374":1,"1380":3}}],["addsponsorvisitcheckins",{"3":{"1209":2}}],["addsponsors",{"3":{"1209":2,"1369":6,"1496":1}}],["addsessionscoreresponseguardrail",{"2":{"1368":1,"1369":1,"1526":1},"3":{"1368":1,"1369":3,"1526":1}}],["addsessionspeakerasync",{"3":{"1395":1}}],["addsessionspeaker",{"3":{"1203":3,"1207":8,"1270":1,"1350":6,"1359":10,"1369":1}}],["addsessionspeakerhandlertests",{"3":{"1199":1,"1207":2,"1359":2}}],["addsessionspeakerhandler",{"3":{"1199":2,"1203":1,"1207":2,"1270":2,"1350":1,"1359":10}}],["addsessionspeakercommandvalidatortests",{"3":{"1199":1,"1207":1,"1359":1}}],["addsessionspeakercommandvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":5}}],["addsessionspeakercommand",{"3":{"1199":7,"1203":1,"1207":2,"1359":9,"1380":4}}],["addsessionspeakerrequest",{"3":{"1199":3,"1203":1,"1207":1,"1359":1,"1374":1,"1380":3}}],["addsessioncookieauthentication",{"2":{"1525":1},"3":{"1300":2,"1525":1,"1526":1}}],["addsessioncategoryitemasync",{"3":{"1395":1}}],["addsessioncategoryitem",{"3":{"1203":3,"1207":8,"1350":3,"1359":15}}],["addsessioncategoryitemhandlertests",{"3":{"1199":1,"1207":2,"1359":2}}],["addsessioncategoryitemhandler",{"3":{"1199":2,"1203":1,"1207":2,"1350":1,"1359":13}}],["addsessioncategoryitemcommandvalidatortests",{"3":{"1199":1,"1207":1,"1359":1}}],["addsessioncategoryitemcommandvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":7}}],["addsessioncategoryitemcommand",{"3":{"1199":7,"1203":1,"1207":2,"1359":13,"1380":4}}],["addsessioncategoryitemrequest",{"2":{"1374":1},"3":{"1199":3,"1203":1,"1207":1,"1359":1,"1374":1,"1380":3}}],["addsessionquestions",{"3":{"1209":2}}],["addsessionquestionanswer",{"3":{"1203":3,"1207":8,"1349":1,"1350":4,"1359":15}}],["addsessionquestionanswercommandvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":6}}],["addsessionquestionanswercommandvalidatortests",{"2":{"1199":1},"3":{"1199":1,"1207":1,"1359":1}}],["addsessionquestionanswercommand",{"3":{"1199":7,"1203":1,"1207":2,"1359":10,"1380":3}}],["addsessionquestionanswerrequest",{"2":{"1374":1},"3":{"1199":3,"1203":1,"1207":1,"1359":1,"1374":1,"1380":3}}],["addsessionquestionanswerhandlertests",{"3":{"1199":1,"1207":2,"1359":2}}],["addsessionquestionanswerhandler",{"3":{"690":1,"1199":2,"1203":1,"1207":2,"1349":1,"1350":3,"1359":14}}],["addsessiondurationcomputedcolumn",{"3":{"1209":2}}],["addsessionasset",{"3":{"1209":2}}],["addsessionassetlinkhandlertests",{"3":{"1199":1,"1207":2}}],["addsessionassetlinkhandler",{"3":{"1199":2,"1203":1,"1207":2,"1350":2,"1357":2,"1359":9,"1496":1}}],["addsessionassetlinkcommand",{"3":{"1199":5,"1203":1,"1207":2,"1359":7,"1380":1}}],["addsessionaiscorepromptversion",{"3":{"1018":1,"1209":2,"1350":1,"1369":1}}],["addserverauthsessioncookie",{"3":{"1300":4,"1311":5,"1324":1}}],["addservicediscovery",{"2":{"1329":1},"3":{"1329":1,"1337":1,"1339":2,"1443":1}}],["addservicediscoverydestinationresolver",{"2":{"827":1,"837":1,"1447":1},"3":{"827":1,"837":1,"1338":1,"1339":1,"1447":2}}],["addservicedefaults",{"0":{"1329":1,"2006":1},"2":{"61":1,"72":1,"235":1,"236":1,"401":1,"404":1,"406":1,"407":1,"408":1,"663":1,"668":1,"833":1,"883":1,"913":1,"917":1,"918":1,"938":1,"1325":1,"1329":1,"1334":1,"1335":1,"1677":1,"1720":1,"1724":1,"1727":1,"2006":1,"2010":1,"2011":1,"2014":1,"2030":1,"2031":1,"2038":1,"2157":1,"2160":1},"3":{"0":5,"61":1,"72":1,"235":1,"236":1,"397":1,"401":6,"404":1,"406":1,"407":1,"408":1,"663":1,"665":2,"668":1,"833":1,"883":1,"913":1,"917":1,"918":1,"938":1,"1212":1,"1324":1,"1325":1,"1329":2,"1333":2,"1334":2,"1335":2,"1337":1,"1338":1,"1339":18,"1380":1,"1396":1,"1442":4,"1443":3,"1447":1,"1467":1,"1487":1,"1496":1,"1577":2,"1653":2,"1670":1,"1677":1,"1707":1,"1720":1,"1724":1,"1727":1,"2006":2,"2010":1,"2011":1,"2014":1,"2030":2,"2031":1,"2038":1,"2156":1,"2157":1,"2160":1}}],["addservicebusemulatorbroker",{"2":{"638":1,"640":1,"644":1,"1326":1,"1327":1,"1444":1,"1670":1,"2008":1,"2013":1},"3":{"638":1,"640":1,"644":1,"1326":1,"1327":1,"1339":6,"1441":1,"1444":1,"1526":1,"1670":1,"2008":1,"2013":1}}],["addservices",{"2":{"949":1,"1938":1},"3":{"230":1,"310":1,"946":1,"949":2,"1259":3,"1270":1,"1300":1,"1311":1,"1316":2,"1317":1,"1318":1,"1320":1,"1323":5,"1935":1,"1938":1}}],["addserilog",{"2":{"401":1,"1333":1,"1442":1},"3":{"0":1,"401":1,"1333":2,"1339":4,"1442":1}}],["addsignalr",{"2":{"231":1},"3":{"225":1,"231":1,"1935":1}}],["addsingleton",{"2":{"216":1},"3":{"216":1,"220":2,"300":1,"649":1,"682":1,"733":2,"832":1,"1301":1,"1311":1,"1323":1,"1324":9,"1339":3,"1396":1,"1415":3,"1417":4,"1427":1,"1436":4,"2150":1}}],["addstandardresiliencehandler",{"2":{"1707":1,"2019":1,"2030":1},"3":{"1312":2,"1339":3,"1707":1,"2019":1,"2030":1}}],["addstackexchangeredisoutputcache",{"2":{"243":1,"250":1,"251":1,"252":1,"254":1,"256":1,"257":1,"259":1,"260":1,"390":1},"3":{"243":1,"250":1,"251":1,"252":1,"254":1,"256":2,"257":1,"259":2,"260":1,"390":1,"1339":2}}],["addstackexchangeredis",{"3":{"225":1}}],["addstoredpermissiongrants",{"2":{"674":1,"1061":1,"1283":1,"1409":1,"2199":1,"2201":1,"2202":1},"3":{"674":1,"1059":3,"1061":1,"1273":1,"1283":1,"1286":8,"1297":1,"1300":2,"1316":1,"1323":1,"1409":1,"2199":1,"2201":1,"2202":1}}],["addstronglytypedids",{"2":{"798":1,"804":1,"806":1,"1051":1,"1052":1,"1810":1},"3":{"0":2,"798":1,"804":1,"806":1,"1050":2,"1051":1,"1052":1,"1247":1,"1281":1,"1286":3,"1311":1,"1316":1,"1323":1,"1810":2}}],["addsalesuserexportclient",{"2":{"96":1,"104":1},"3":{"96":1,"104":1}}],["adds",{"0":{"92":1,"1362":1},"2":{"450":1},"3":{"0":10,"15":1,"55":1,"87":1,"93":1,"94":1,"121":1,"130":1,"150":1,"157":1,"214":1,"219":1,"225":1,"233":1,"235":2,"246":1,"255":1,"264":1,"265":1,"275":1,"326":1,"330":1,"350":1,"352":1,"355":1,"370":1,"379":1,"390":1,"393":1,"395":1,"397":1,"400":1,"401":1,"402":2,"411":1,"450":1,"508":1,"524":1,"530":1,"540":1,"564":1,"565":1,"566":1,"572":1,"583":2,"586":1,"599":1,"616":1,"642":1,"649":1,"651":1,"665":1,"674":3,"691":1,"700":1,"707":1,"715":2,"718":1,"719":1,"740":1,"755":1,"756":1,"757":1,"759":1,"774":1,"800":1,"810":2,"819":1,"820":1,"827":5,"828":1,"834":1,"846":1,"853":1,"854":1,"861":1,"869":1,"881":2,"916":1,"922":1,"923":1,"926":2,"931":1,"933":1,"937":1,"954":4,"957":1,"964":1,"1018":1,"1035":1,"1038":1,"1042":1,"1043":1,"1050":1,"1052":1,"1059":1,"1065":1,"1083":4,"1089":1,"1093":1,"1129":1,"1135":1,"1152":1,"1168":2,"1175":1,"1184":2,"1212":2,"1214":1,"1219":1,"1228":1,"1229":1,"1230":1,"1231":3,"1237":10,"1244":1,"1247":1,"1249":3,"1252":1,"1258":1,"1259":8,"1262":1,"1270":9,"1271":3,"1273":2,"1276":2,"1277":1,"1278":2,"1281":2,"1286":28,"1288":1,"1292":1,"1300":17,"1301":3,"1308":1,"1309":5,"1311":27,"1312":4,"1315":1,"1316":2,"1317":1,"1318":1,"1320":4,"1322":2,"1323":17,"1324":25,"1325":1,"1326":1,"1329":1,"1332":2,"1333":6,"1336":1,"1338":2,"1339":29,"1350":9,"1352":2,"1355":1,"1359":61,"1362":1,"1369":6,"1375":4,"1378":1,"1379":2,"1380":8,"1382":2,"1394":1,"1395":39,"1396":25,"1402":4,"1406":1,"1414":1,"1415":6,"1416":3,"1417":3,"1421":1,"1427":6,"1429":1,"1430":1,"1432":1,"1436":42,"1438":3,"1441":5,"1442":3,"1443":3,"1444":2,"1447":2,"1448":1,"1455":2,"1459":1,"1463":2,"1467":3,"1481":1,"1486":1,"1488":3,"1489":4,"1491":1,"1496":5,"1526":1,"1536":1,"1575":1,"1576":1,"1577":1,"1591":2,"1625":1,"1631":1,"1632":1,"1640":1,"1641":1,"1650":1,"1651":2,"1663":1,"1666":2,"1669":2,"1670":1,"1714":1,"1722":1,"1749":1,"1750":2,"1765":1,"1776":2,"1809":1,"1810":3,"1829":1,"1839":2,"1842":1,"1843":1,"1851":1,"1878":1,"1880":1,"1882":1,"1920":1,"1922":1,"1935":1,"1936":1,"1942":1,"1971":1,"1976":1,"1978":2,"1988":1,"2001":1,"2002":1,"2006":1,"2010":1,"2012":1,"2024":2,"2032":1,"2039":1,"2053":1,"2066":1,"2067":1,"2085":1,"2090":2,"2099":1,"2103":1,"2121":1,"2126":2,"2149":1,"2156":3,"2160":1,"2175":1,"2177":1,"2232":1,"2240":1}}],["add",{"0":{"1684":1,"1701":1,"1729":1,"2093":1,"2106":1},"2":{"527":1,"659":1,"721":1,"938":1,"1044":1,"1585":1,"1652":1,"1688":1,"1793":1,"1827":1,"1846":1,"1853":1,"1862":1,"1868":1,"1886":1,"1892":1,"1899":1,"1905":1,"1912":1,"1924":1,"1930":1,"1941":1,"1950":1,"1959":1,"1972":1,"1979":1,"1985":1,"2002":1,"2038":1,"2060":1,"2108":1,"2115":1,"2122":1,"2123":1,"2128":1,"2133":1,"2139":1,"2146":1,"2153":1,"2169":1,"2192":1,"2203":1,"2211":1},"3":{"0":8,"1":1,"5":1,"69":1,"100":1,"195":1,"207":1,"230":1,"235":1,"236":1,"264":1,"265":2,"312":1,"333":1,"341":1,"350":1,"360":1,"365":1,"372":1,"397":1,"404":1,"413":2,"415":1,"459":1,"472":1,"494":1,"495":1,"517":1,"527":1,"528":1,"537":1,"627":1,"631":1,"633":3,"635":3,"636":1,"649":1,"650":1,"657":1,"659":1,"665":1,"674":1,"675":1,"691":1,"698":1,"707":1,"715":2,"721":1,"733":1,"734":1,"759":1,"809":1,"811":2,"820":1,"821":1,"827":1,"829":1,"834":1,"881":1,"882":1,"883":1,"905":1,"922":2,"938":1,"939":1,"964":1,"979":3,"981":2,"984":1,"997":1,"1004":1,"1018":1,"1026":2,"1027":2,"1030":1,"1035":1,"1044":1,"1052":1,"1058":1,"1059":1,"1060":1,"1061":1,"1062":1,"1068":1,"1085":2,"1089":1,"1093":1,"1157":1,"1176":1,"1177":1,"1179":3,"1186":1,"1193":1,"1196":1,"1212":3,"1214":1,"1229":2,"1234":3,"1237":10,"1238":1,"1241":1,"1243":1,"1247":4,"1251":1,"1259":6,"1265":1,"1270":12,"1280":1,"1284":1,"1286":19,"1287":2,"1290":2,"1291":2,"1297":1,"1300":8,"1301":2,"1309":4,"1310":2,"1311":10,"1312":2,"1316":1,"1320":1,"1323":10,"1324":29,"1333":1,"1339":9,"1343":1,"1344":1,"1350":12,"1351":1,"1357":1,"1359":86,"1366":1,"1369":6,"1371":2,"1374":1,"1375":1,"1380":27,"1382":2,"1385":1,"1386":1,"1389":2,"1391":1,"1395":45,"1396":10,"1399":3,"1401":1,"1402":9,"1415":11,"1416":9,"1417":17,"1418":1,"1427":3,"1429":1,"1433":1,"1436":16,"1438":4,"1445":1,"1453":1,"1455":1,"1467":3,"1472":1,"1477":2,"1487":1,"1490":2,"1492":1,"1496":4,"1497":1,"1524":1,"1526":1,"1530":2,"1531":1,"1576":1,"1581":1,"1582":1,"1585":2,"1589":1,"1595":3,"1596":2,"1598":1,"1599":1,"1600":1,"1616":1,"1617":1,"1619":1,"1630":1,"1631":2,"1632":11,"1638":1,"1639":1,"1641":1,"1647":2,"1648":1,"1649":1,"1650":2,"1651":6,"1652":2,"1653":1,"1654":4,"1656":1,"1657":1,"1661":1,"1663":1,"1666":1,"1668":1,"1671":1,"1674":1,"1678":1,"1679":1,"1681":1,"1682":1,"1683":2,"1684":1,"1685":1,"1686":3,"1687":2,"1688":1,"1689":2,"1690":1,"1691":1,"1692":1,"1697":2,"1701":2,"1702":2,"1703":1,"1704":1,"1719":3,"1720":1,"1722":1,"1724":1,"1726":1,"1727":5,"1728":4,"1729":2,"1730":2,"1731":2,"1737":1,"1742":1,"1746":2,"1748":1,"1749":1,"1750":4,"1754":1,"1755":3,"1758":1,"1761":1,"1764":1,"1765":4,"1767":1,"1768":4,"1769":1,"1773":2,"1775":2,"1776":3,"1786":1,"1793":1,"1805":2,"1807":1,"1812":2,"1815":1,"1817":1,"1823":1,"1824":1,"1827":1,"1834":1,"1844":1,"1846":1,"1849":1,"1853":1,"1862":1,"1865":1,"1868":1,"1877":1,"1883":1,"1885":1,"1886":1,"1890":1,"1892":3,"1899":2,"1905":1,"1907":1,"1912":1,"1924":1,"1925":1,"1930":2,"1941":1,"1946":1,"1950":1,"1959":1,"1960":2,"1963":1,"1965":1,"1970":1,"1972":1,"1973":4,"1979":1,"1985":1,"1991":1,"1997":1,"1999":1,"2002":1,"2014":1,"2023":1,"2024":1,"2028":1,"2029":2,"2030":1,"2032":1,"2038":1,"2041":2,"2048":2,"2049":2,"2060":1,"2069":1,"2075":1,"2077":1,"2080":1,"2081":1,"2086":1,"2087":1,"2091":1,"2097":5,"2098":1,"2099":2,"2102":1,"2104":1,"2105":1,"2106":1,"2108":2,"2115":1,"2119":1,"2122":1,"2123":2,"2128":1,"2129":1,"2133":1,"2138":1,"2139":1,"2142":1,"2146":2,"2147":1,"2153":1,"2156":1,"2160":4,"2169":2,"2170":1,"2180":1,"2192":1,"2193":1,"2194":2,"2202":1,"2203":1,"2211":1,"2234":1}}],["adr",{"0":{"1":1,"1475":1,"1507":1,"1508":1,"1509":1,"1510":1,"1512":1,"2025":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1,"151":1,"152":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"202":1,"203":1,"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"232":1,"233":1,"234":1,"235":1,"236":1,"237":1,"238":1,"239":1,"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"262":2,"263":2,"264":2,"265":2,"266":2,"267":2,"268":2,"269":2,"270":1,"271":1,"272":1,"273":1,"274":1,"275":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"286":1,"287":1,"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"326":1,"327":1,"328":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"338":1,"339":1,"340":1,"341":1,"342":1,"343":1,"344":1,"345":1,"346":1,"347":1,"348":1,"349":1,"350":1,"351":1,"352":1,"353":1,"354":1,"355":1,"356":1,"357":1,"358":1,"359":1,"360":1,"361":1,"362":1,"363":1,"364":1,"365":1,"366":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1,"377":1,"378":1,"379":1,"380":1,"381":1,"382":1,"383":1,"384":1,"385":1,"386":1,"387":1,"388":1,"389":1,"390":1,"391":1,"392":1,"393":1,"394":1,"395":1,"396":1,"397":1,"398":1,"399":1,"400":1,"401":1,"402":1,"403":1,"404":1,"405":1,"406":1,"407":1,"408":1,"409":1,"410":1,"411":1,"412":1,"413":1,"414":1,"415":1,"416":1,"417":1,"418":1,"419":1,"420":1,"421":1,"422":1,"423":1,"424":1,"425":1,"426":1,"427":1,"428":1,"429":1,"430":1,"431":1,"432":1,"433":1,"434":1,"435":1,"436":1,"437":1,"438":1,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1,"445":1,"446":1,"447":1,"448":1,"449":1,"450":1,"451":1,"452":1,"453":1,"454":1,"455":1,"456":1,"457":1,"458":1,"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1,"467":1,"468":1,"469":1,"470":1,"471":1,"472":1,"473":1,"474":1,"475":1,"476":1,"477":1,"478":1,"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1,"496":1,"497":1,"498":1,"499":1,"500":1,"501":1,"502":1,"503":1,"504":1,"505":1,"506":1,"507":1,"508":1,"509":1,"510":1,"511":1,"512":1,"513":1,"514":1,"515":1,"516":1,"517":1,"518":1,"519":1,"520":1,"521":1,"522":1,"523":1,"524":1,"525":1,"526":1,"527":1,"528":1,"529":1,"530":1,"531":1,"532":1,"533":1,"534":1,"535":1,"536":1,"537":1,"538":1,"539":1,"540":1,"541":1,"542":1,"543":1,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"550":1,"551":1,"552":1,"553":1,"554":1,"555":1,"556":1,"557":1,"558":1,"559":1,"560":1,"561":1,"562":1,"563":1,"564":1,"565":1,"566":1,"567":1,"568":1,"569":1,"570":1,"571":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"578":1,"579":1,"580":1,"581":1,"582":1,"583":1,"584":1,"585":1,"586":1,"587":1,"588":1,"589":1,"590":1,"591":1,"592":1,"593":1,"594":1,"595":1,"596":1,"597":1,"598":1,"599":1,"600":1,"601":1,"602":1,"603":1,"604":1,"605":1,"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"613":1,"614":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1,"623":1,"624":1,"625":1,"626":1,"627":1,"628":1,"629":1,"630":1,"631":1,"632":1,"633":1,"634":1,"635":1,"636":1,"637":1,"638":1,"639":1,"640":1,"641":1,"642":1,"643":1,"644":1,"645":1,"646":1,"647":1,"648":1,"649":1,"650":1,"651":1,"652":1,"653":1,"654":1,"655":1,"656":1,"657":1,"658":1,"659":1,"660":1,"661":1,"662":1,"663":1,"664":1,"665":1,"666":1,"667":1,"668":1,"669":1,"670":1,"671":1,"672":1,"673":1,"674":1,"675":1,"676":1,"677":1,"678":1,"679":1,"680":1,"681":1,"682":1,"683":1,"684":1,"685":1,"686":1,"687":1,"688":1,"689":1,"690":1,"691":1,"692":1,"693":1,"694":1,"695":1,"696":1,"697":1,"698":1,"699":1,"700":1,"701":1,"702":1,"703":1,"704":1,"705":1,"706":1,"707":1,"708":1,"709":1,"710":1,"711":1,"712":1,"713":1,"714":1,"715":1,"716":1,"717":1,"718":1,"719":1,"720":1,"721":1,"722":1,"723":1,"724":1,"725":1,"726":1,"727":1,"728":1,"729":1,"730":2,"731":2,"732":2,"733":2,"734":2,"735":2,"736":2,"737":2,"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1,"746":1,"747":1,"748":1,"749":1,"750":1,"751":1,"752":1,"753":1,"754":1,"755":1,"756":1,"757":1,"758":1,"759":1,"760":1,"761":1,"762":1,"763":1,"764":1,"765":1,"766":1,"767":1,"768":1,"769":1,"770":1,"771":1,"772":1,"773":1,"774":1,"775":1,"776":1,"777":1,"778":1,"779":1,"780":1,"781":1,"782":1,"783":1,"784":1,"785":1,"786":1,"787":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"794":1,"795":1,"796":1,"797":1,"798":1,"799":1,"800":1,"801":1,"802":1,"803":1,"804":1,"805":1,"806":1,"807":2,"808":2,"809":2,"810":2,"811":2,"812":2,"813":2,"814":2,"815":2,"816":1,"817":1,"818":1,"819":1,"820":1,"821":1,"822":1,"823":1,"824":1,"825":1,"826":1,"827":1,"828":1,"829":1,"830":1,"831":1,"832":1,"833":1,"834":1,"835":1,"836":1,"837":1,"838":1,"839":1,"840":1,"841":1,"842":1,"843":1,"844":1,"845":1,"846":1,"847":1,"848":1,"849":1,"850":1,"851":1,"852":1,"853":1,"854":1,"855":1,"856":1,"857":1,"858":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"865":1,"866":1,"867":1,"868":1,"869":1,"870":1,"871":1,"872":1,"873":1,"874":1,"875":1,"876":1,"877":1,"878":1,"879":1,"880":1,"881":1,"882":1,"883":1,"884":1,"885":1,"886":1,"887":1,"888":1,"889":1,"890":1,"891":1,"892":1,"893":1,"894":1,"895":1,"896":1,"897":1,"898":1,"899":1,"900":1,"901":1,"902":1,"903":1,"904":1,"905":1,"906":1,"907":1,"908":1,"909":1,"910":1,"911":1,"912":1,"913":1,"914":1,"915":1,"916":1,"917":1,"918":1,"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":1,"928":1,"929":1,"930":1,"931":1,"932":1,"933":1,"934":1,"935":1,"936":1,"937":1,"938":1,"939":1,"940":1,"941":1,"942":1,"943":1,"944":1,"945":1,"946":1,"947":1,"948":1,"949":1,"950":1,"951":1,"952":1,"953":1,"954":1,"955":1,"956":1,"957":1,"958":1,"959":1,"960":1,"961":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1,"969":1,"970":1,"971":1,"972":1,"973":1,"974":1,"975":1,"976":1,"977":1,"978":1,"979":1,"980":1,"981":1,"982":1,"983":1,"984":1,"985":1,"986":1,"987":1,"988":1,"989":1,"990":1,"991":1,"992":1,"993":1,"994":1,"995":1,"996":1,"997":1,"998":1,"999":1,"1000":1,"1001":1,"1002":1,"1003":1,"1004":1,"1005":1,"1006":1,"1007":1,"1008":1,"1009":1,"1010":1,"1011":1,"1012":1,"1013":1,"1014":1,"1015":1,"1016":1,"1017":1,"1018":1,"1019":1,"1020":1,"1021":1,"1022":1,"1023":1,"1024":1,"1025":1,"1026":1,"1027":1,"1028":1,"1029":1,"1030":1,"1031":1,"1032":1,"1033":1,"1034":1,"1035":1,"1036":1,"1037":1,"1038":1,"1039":1,"1040":1,"1041":1,"1042":1,"1043":1,"1044":1,"1045":1,"1046":1,"1047":1,"1048":1,"1049":1,"1050":1,"1051":1,"1052":1,"1053":1,"1054":1,"1055":1,"1056":1,"1057":1,"1058":1,"1059":1,"1060":1,"1061":1,"1062":1,"1063":1,"1064":1,"1065":1,"1066":1,"1067":1,"1068":1,"1069":1,"1070":1,"1071":1,"1072":1,"1073":1,"1074":1,"1075":1,"1076":1,"1077":1,"1078":1,"1079":1,"1080":1,"1081":1,"1082":1,"1083":1,"1084":1,"1085":1,"1086":1,"1087":1,"1088":1,"1089":1,"1090":1,"1091":1,"1092":1,"1093":1,"1094":1,"1095":1,"1096":1,"1097":1,"1098":1,"1099":1,"1100":1,"1101":1,"1102":1,"1103":1,"1104":1,"1105":1,"1106":1,"1107":1,"1108":1,"1109":1,"1110":1,"1111":1,"1112":1,"1113":1,"1114":1,"1115":1,"1116":1,"1117":1,"1118":1,"1119":1,"1120":1,"1121":1,"1122":1,"1123":1,"1124":1,"1125":1,"1126":1,"1127":1,"1128":1,"1129":1,"1130":1,"1131":1,"1132":1,"1133":1,"1134":1,"1135":1,"1136":1,"1137":1,"1138":1,"1139":1,"1140":1,"1141":1,"1142":1,"1143":1,"1144":1,"1145":1,"1146":1,"1147":1,"1148":1,"1149":1,"1150":1,"1151":1,"1152":1,"1153":1,"1154":1,"1155":1,"1156":1,"1157":1,"1158":1,"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1,"1165":1,"1166":1,"1167":1,"1168":1,"1169":1,"1170":1,"1171":1,"1172":1,"1173":1,"1174":1,"1175":1,"1176":1,"1177":1,"1178":1,"1179":1,"1180":1,"1181":1,"1182":1,"1183":1,"1184":1,"1185":1,"1186":1,"1187":1,"1188":1,"1189":1,"1986":1,"1987":1,"1988":1,"1989":1,"1990":1,"1991":1},"3":{"0":211,"1":5,"2":1,"8":1,"14":1,"15":2,"19":1,"20":3,"24":4,"26":4,"28":1,"30":1,"31":1,"33":2,"35":4,"36":1,"38":1,"39":2,"40":1,"41":2,"44":1,"45":2,"46":1,"47":3,"50":1,"52":1,"53":2,"55":1,"56":1,"57":2,"59":9,"61":2,"62":2,"64":4,"65":1,"66":2,"67":2,"68":1,"71":1,"72":2,"75":1,"76":1,"77":2,"79":1,"80":1,"81":1,"83":1,"84":2,"85":1,"87":1,"89":1,"92":1,"96":1,"97":2,"98":2,"105":4,"106":1,"109":5,"113":4,"114":1,"117":3,"120":1,"121":3,"124":7,"125":1,"126":1,"128":2,"129":1,"130":1,"131":5,"133":3,"134":1,"135":3,"136":3,"140":1,"143":8,"144":1,"145":1,"147":1,"148":1,"149":1,"150":3,"153":4,"154":1,"156":3,"157":1,"158":4,"159":1,"160":4,"162":8,"163":1,"164":3,"165":2,"166":6,"168":2,"169":5,"172":1,"174":1,"177":1,"178":2,"182":7,"183":1,"184":1,"186":2,"188":2,"191":4,"192":1,"193":1,"194":4,"195":2,"196":2,"197":3,"199":6,"202":3,"204":1,"206":1,"207":1,"208":1,"210":4,"211":1,"221":3,"222":1,"223":1,"225":4,"227":1,"229":8,"230":10,"232":1,"235":1,"236":1,"239":4,"240":1,"241":4,"242":6,"243":9,"244":3,"245":5,"247":11,"248":1,"249":3,"253":2,"254":1,"255":12,"256":5,"258":2,"259":4,"262":2,"263":1,"264":5,"265":2,"266":2,"267":1,"269":7,"270":1,"272":2,"273":2,"275":1,"277":3,"278":1,"279":3,"280":2,"281":1,"282":3,"283":2,"284":1,"287":4,"288":1,"290":1,"291":1,"293":3,"294":3,"295":1,"297":1,"299":2,"300":1,"301":1,"304":7,"305":1,"307":1,"308":2,"313":5,"314":1,"315":1,"317":3,"318":3,"319":1,"320":4,"321":5,"322":2,"324":4,"326":2,"327":1,"328":1,"330":3,"331":2,"334":5,"336":1,"337":2,"338":1,"340":3,"341":1,"342":1,"343":1,"346":8,"347":1,"348":1,"349":12,"350":5,"351":1,"352":1,"355":7,"356":1,"358":6,"360":2,"361":4,"362":5,"365":1,"366":2,"367":1,"369":5,"370":1,"371":2,"373":1,"376":3,"377":1,"379":2,"380":1,"382":1,"383":2,"385":1,"386":1,"390":1,"391":1,"394":1,"396":4,"398":3,"400":5,"401":1,"402":1,"404":2,"406":6,"407":2,"408":1,"410":1,"412":1,"413":2,"414":2,"417":1,"419":2,"420":2,"423":2,"424":1,"425":1,"426":4,"428":3,"429":1,"430":1,"431":1,"432":1,"433":1,"434":2,"437":1,"438":1,"439":1,"440":2,"443":2,"444":1,"445":1,"446":1,"447":1,"449":1,"450":1,"454":1,"455":4,"456":1,"457":2,"458":3,"459":4,"460":1,"461":1,"462":6,"463":2,"464":3,"466":1,"467":1,"468":2,"469":2,"470":1,"471":3,"472":1,"473":6,"474":3,"475":1,"476":1,"477":2,"479":1,"481":1,"485":3,"490":1,"491":1,"492":1,"493":2,"496":1,"497":4,"498":3,"499":1,"500":1,"503":5,"504":1,"506":4,"508":2,"509":2,"510":3,"511":1,"515":1,"516":3,"517":4,"518":3,"520":1,"521":5,"522":2,"524":1,"525":1,"526":1,"528":1,"529":1,"531":1,"532":3,"533":1,"534":1,"535":3,"536":4,"537":4,"538":2,"539":1,"541":9,"542":1,"543":1,"544":6,"546":1,"548":12,"549":7,"551":1,"553":1,"554":5,"555":7,"556":6,"557":2,"558":1,"560":5,"561":1,"563":2,"565":3,"568":6,"569":1,"571":5,"572":6,"573":3,"574":2,"575":1,"576":1,"577":3,"578":2,"579":7,"580":1,"582":5,"586":1,"587":5,"588":1,"590":5,"591":1,"592":2,"594":1,"595":5,"596":1,"598":4,"599":5,"601":2,"605":4,"606":1,"608":2,"610":2,"611":1,"612":1,"614":4,"615":1,"616":1,"617":2,"618":2,"619":3,"622":3,"623":1,"624":1,"625":3,"626":2,"627":1,"630":2,"631":2,"632":2,"633":2,"634":1,"635":1,"637":1,"639":2,"642":1,"645":6,"646":1,"647":1,"648":4,"649":1,"650":1,"651":1,"653":4,"654":1,"656":3,"657":3,"658":2,"659":2,"660":1,"661":4,"662":1,"664":4,"665":1,"666":1,"667":3,"670":4,"671":1,"673":3,"676":2,"678":4,"679":1,"681":3,"682":3,"683":4,"684":4,"686":5,"687":1,"689":2,"690":3,"691":1,"694":6,"695":1,"697":2,"698":2,"700":1,"701":9,"702":1,"704":1,"706":2,"707":6,"708":1,"709":2,"711":7,"712":1,"714":2,"715":5,"716":2,"717":1,"721":8,"722":1,"724":1,"725":5,"726":1,"727":2,"729":7,"730":2,"731":4,"732":4,"733":6,"734":2,"735":1,"737":7,"738":1,"740":2,"741":5,"742":1,"743":4,"745":8,"746":1,"748":4,"749":7,"750":6,"751":2,"753":9,"754":1,"756":6,"757":2,"758":1,"759":3,"761":1,"762":7,"763":1,"764":1,"765":5,"766":1,"768":2,"769":2,"770":4,"771":1,"773":8,"774":1,"775":1,"776":3,"777":2,"778":7,"779":1,"781":2,"782":2,"783":2,"784":2,"785":1,"786":7,"787":1,"789":6,"790":4,"792":2,"795":7,"796":1,"797":4,"798":3,"799":5,"800":2,"801":3,"802":8,"803":1,"804":1,"807":2,"808":2,"809":5,"810":9,"811":2,"812":2,"813":2,"815":9,"816":1,"817":3,"818":2,"819":2,"821":4,"823":8,"824":1,"825":4,"826":4,"827":18,"828":2,"829":3,"834":10,"835":1,"836":2,"837":1,"838":2,"839":1,"840":2,"842":8,"843":1,"844":2,"845":3,"847":3,"848":1,"849":1,"851":1,"852":2,"853":2,"854":3,"856":3,"857":3,"858":1,"860":3,"861":1,"862":2,"863":2,"865":5,"866":1,"868":1,"869":1,"870":1,"872":1,"873":1,"874":5,"878":1,"880":5,"881":7,"882":4,"885":7,"886":1,"888":3,"889":1,"891":3,"892":1,"893":4,"894":1,"895":1,"896":6,"897":2,"899":2,"900":3,"901":7,"902":1,"903":1,"904":2,"905":3,"907":3,"910":12,"911":1,"912":1,"913":2,"914":3,"916":4,"918":9,"919":1,"920":1,"921":2,"922":6,"923":3,"924":2,"925":8,"926":1,"927":1,"928":1,"929":2,"930":2,"931":1,"932":2,"933":2,"935":6,"936":1,"937":2,"938":1,"939":3,"940":1,"941":1,"942":5,"943":1,"944":1,"945":1,"946":1,"947":2,"948":1,"950":6,"951":1,"953":6,"954":3,"955":7,"956":2,"957":9,"960":1,"961":1,"962":1,"963":3,"964":4,"965":4,"966":2,"968":7,"969":1,"971":3,"972":1,"973":2,"976":7,"977":1,"979":2,"980":2,"981":1,"984":6,"985":1,"987":6,"988":2,"989":1,"992":8,"993":1,"994":1,"995":4,"1000":6,"1001":1,"1003":2,"1004":1,"1005":1,"1006":2,"1008":5,"1009":1,"1010":1,"1012":4,"1013":1,"1015":1,"1016":2,"1017":1,"1018":3,"1020":1,"1022":7,"1023":1,"1024":1,"1025":3,"1026":6,"1027":2,"1030":8,"1031":1,"1032":2,"1033":2,"1034":1,"1035":2,"1036":1,"1038":7,"1039":1,"1040":1,"1041":4,"1042":2,"1044":3,"1046":6,"1047":1,"1048":4,"1049":5,"1050":4,"1051":7,"1052":4,"1053":8,"1054":1,"1056":1,"1057":2,"1058":2,"1060":1,"1061":1,"1063":5,"1064":1,"1065":1,"1069":2,"1071":5,"1072":1,"1073":4,"1074":4,"1075":1,"1076":1,"1077":1,"1078":1,"1079":10,"1080":1,"1082":1,"1083":1,"1084":2,"1087":6,"1088":1,"1089":1,"1090":2,"1092":1,"1093":1,"1096":8,"1097":1,"1098":1,"1099":2,"1100":4,"1101":2,"1102":3,"1103":1,"1104":7,"1105":1,"1107":1,"1108":2,"1112":6,"1113":1,"1114":2,"1115":1,"1116":2,"1118":1,"1120":7,"1121":1,"1123":3,"1126":1,"1129":5,"1130":1,"1132":2,"1134":3,"1137":5,"1138":1,"1139":3,"1142":2,"1144":4,"1145":2,"1147":8,"1148":1,"1150":1,"1152":3,"1154":2,"1155":2,"1157":9,"1158":1,"1160":1,"1162":2,"1164":2,"1165":1,"1167":4,"1169":3,"1171":5,"1172":1,"1173":3,"1174":1,"1176":1,"1180":7,"1181":1,"1182":3,"1183":1,"1186":2,"1189":8,"1192":20,"1193":1,"1202":4,"1203":4,"1211":2,"1212":40,"1213":7,"1214":1,"1217":1,"1219":1,"1222":1,"1225":1,"1227":2,"1228":2,"1229":11,"1231":4,"1232":2,"1233":3,"1234":1,"1235":1,"1236":1,"1237":28,"1238":5,"1239":2,"1241":1,"1243":1,"1244":1,"1247":23,"1248":4,"1249":2,"1251":1,"1254":1,"1256":1,"1257":2,"1258":2,"1259":70,"1260":2,"1261":1,"1262":1,"1263":4,"1264":1,"1265":1,"1267":1,"1269":6,"1270":61,"1271":8,"1273":2,"1274":1,"1275":1,"1276":1,"1277":2,"1278":3,"1279":1,"1281":2,"1282":1,"1283":2,"1284":2,"1285":3,"1286":193,"1287":15,"1289":1,"1290":1,"1292":2,"1293":1,"1294":1,"1297":2,"1298":2,"1299":1,"1300":165,"1301":23,"1302":5,"1303":2,"1304":2,"1307":2,"1308":1,"1309":38,"1310":14,"1311":123,"1312":21,"1313":4,"1314":1,"1316":4,"1317":6,"1318":1,"1320":4,"1321":1,"1322":4,"1323":114,"1324":204,"1325":4,"1326":7,"1328":4,"1330":1,"1331":1,"1332":2,"1333":2,"1334":2,"1336":3,"1337":3,"1338":2,"1339":100,"1343":1,"1345":1,"1347":3,"1348":1,"1349":3,"1350":70,"1352":2,"1353":4,"1354":2,"1355":4,"1357":1,"1358":1,"1359":237,"1361":2,"1363":1,"1364":1,"1365":1,"1366":1,"1367":3,"1368":1,"1369":13,"1371":2,"1372":2,"1373":2,"1374":1,"1375":2,"1376":1,"1378":3,"1379":8,"1380":38,"1384":1,"1387":1,"1389":3,"1391":1,"1394":2,"1395":82,"1396":183,"1397":2,"1398":1,"1399":1,"1400":3,"1401":3,"1402":70,"1404":3,"1405":4,"1406":7,"1407":1,"1408":1,"1409":1,"1410":2,"1411":2,"1412":2,"1413":6,"1414":1,"1415":144,"1416":27,"1417":106,"1418":2,"1419":1,"1421":2,"1423":1,"1427":30,"1428":4,"1429":2,"1430":4,"1431":10,"1432":3,"1433":1,"1435":2,"1436":244,"1438":76,"1441":6,"1442":1,"1446":3,"1447":3,"1449":3,"1450":1,"1453":3,"1454":8,"1455":5,"1458":1,"1460":4,"1461":3,"1462":3,"1467":20,"1468":1,"1469":5,"1471":2,"1473":4,"1474":1,"1475":1,"1476":1,"1477":1,"1481":1,"1482":6,"1483":1,"1486":2,"1487":2,"1488":7,"1489":10,"1490":1,"1491":1,"1492":4,"1493":3,"1494":10,"1496":111,"1499":2,"1500":4,"1502":1,"1503":6,"1504":1,"1508":1,"1509":3,"1510":3,"1512":1,"1513":6,"1514":1,"1515":2,"1519":1,"1521":1,"1524":2,"1525":3,"1526":28,"1527":3,"1531":2,"1534":5,"1535":5,"1536":2,"1541":1,"1543":1,"1545":2,"1546":1,"1547":1,"1548":2,"1554":1,"1573":2,"1575":2,"1576":8,"1577":83,"1578":3,"1582":8,"1583":1,"1585":9,"1586":4,"1591":20,"1592":3,"1596":1,"1599":7,"1600":2,"1626":1,"1627":2,"1629":1,"1630":2,"1631":10,"1632":1,"1636":2,"1640":4,"1641":2,"1642":2,"1646":1,"1648":2,"1649":1,"1650":1,"1651":6,"1652":1,"1653":4,"1654":5,"1655":1,"1656":5,"1658":1,"1660":4,"1661":1,"1662":3,"1663":3,"1664":4,"1665":2,"1666":2,"1667":4,"1668":4,"1669":1,"1670":4,"1671":2,"1672":1,"1673":5,"1674":1,"1675":5,"1680":1,"1682":1,"1684":2,"1685":2,"1686":1,"1693":3,"1695":1,"1697":1,"1699":1,"1703":1,"1705":1,"1706":1,"1707":1,"1708":2,"1719":1,"1720":12,"1721":3,"1723":2,"1724":8,"1726":1,"1727":2,"1728":1,"1732":1,"1735":1,"1737":1,"1747":3,"1748":5,"1749":5,"1751":1,"1755":1,"1759":1,"1760":1,"1761":2,"1764":1,"1765":9,"1769":4,"1772":1,"1778":1,"1779":4,"1781":4,"1783":1,"1784":4,"1790":4,"1792":1,"1793":4,"1796":2,"1799":3,"1801":1,"1802":1,"1804":1,"1805":1,"1806":1,"1807":3,"1810":1,"1820":1,"1824":1,"1826":1,"1827":6,"1839":1,"1840":1,"1841":2,"1842":3,"1843":2,"1845":1,"1846":3,"1848":1,"1851":1,"1852":1,"1853":4,"1855":3,"1856":2,"1858":1,"1861":2,"1864":1,"1867":1,"1868":3,"1869":2,"1870":2,"1875":2,"1877":2,"1884":1,"1886":3,"1888":1,"1889":2,"1890":1,"1891":2,"1892":5,"1896":2,"1899":4,"1902":1,"1903":4,"1906":2,"1910":1,"1915":1,"1916":1,"1920":1,"1921":3,"1922":1,"1923":2,"1924":1,"1929":1,"1932":1,"1933":3,"1935":1,"1936":1,"1941":1,"1942":1,"1943":1,"1946":2,"1947":1,"1948":1,"1949":1,"1950":6,"1951":1,"1952":1,"1953":1,"1955":1,"1958":1,"1959":1,"1965":3,"1970":2,"1971":1,"1972":5,"1974":1,"1976":1,"1978":1,"1979":2,"1983":1,"1984":1,"1985":3,"1986":1,"1987":1,"1988":4,"1990":1,"1991":7,"1994":2,"1995":1,"1996":1,"1997":4,"2000":7,"2001":4,"2002":4,"2006":1,"2008":2,"2009":2,"2012":1,"2020":1,"2021":1,"2022":1,"2023":1,"2024":4,"2025":1,"2027":2,"2028":6,"2029":2,"2030":1,"2032":3,"2033":1,"2034":2,"2035":2,"2037":1,"2038":2,"2043":2,"2044":1,"2046":1,"2047":1,"2055":2,"2056":1,"2057":1,"2059":1,"2060":3,"2062":2,"2063":2,"2064":1,"2065":4,"2066":3,"2068":2,"2069":6,"2081":4,"2083":3,"2085":5,"2086":3,"2087":2,"2098":1,"2099":1,"2100":1,"2106":2,"2107":1,"2108":4,"2112":1,"2116":1,"2117":1,"2118":1,"2120":1,"2121":2,"2123":1,"2126":5,"2127":2,"2128":2,"2130":2,"2131":4,"2132":2,"2133":2,"2136":1,"2137":1,"2138":3,"2139":2,"2140":1,"2141":3,"2143":2,"2146":1,"2147":1,"2149":3,"2150":3,"2151":3,"2152":2,"2153":3,"2155":1,"2156":2,"2158":3,"2160":2,"2161":1,"2162":6,"2163":1,"2164":4,"2165":1,"2166":6,"2168":7,"2169":4,"2170":1,"2179":5,"2180":3,"2181":2,"2182":1,"2183":10,"2184":3,"2185":3,"2186":1,"2188":2,"2190":1,"2192":9,"2193":5,"2194":1,"2195":1,"2198":3,"2199":1,"2202":3,"2203":2,"2204":1,"2208":1,"2232":27}}],["adrs",{"0":{"1515":1},"3":{"0":4,"1":1,"131":1,"324":2,"555":1,"789":1,"1011":1,"1013":1,"1190":1,"1212":3,"1270":1,"1286":5,"1309":1,"1311":1,"1313":1,"1317":1,"1350":1,"1359":3,"1396":1,"1417":2,"1428":1,"1471":2,"1494":1,"1496":8,"1502":1,"1517":1,"1534":1,"1537":1,"1552":1,"1571":4,"1572":2,"1577":4,"1591":2,"1658":1,"1659":1,"1663":1,"1673":1,"1674":1,"1705":1,"1725":1,"1783":1,"1787":1,"1792":1,"1793":1,"1797":1,"2002":1,"2028":1,"2086":1,"2211":1,"2219":1,"2221":1,"2232":2}}]],"serializationVersion":2}} \ No newline at end of file +{"v":2,"n":2248,"o":{"fields":["t","d","i","b"],"storeFields":["u","d","k","t","x","e"],"idField":"id"},"i":{"documentCount":2248,"nextId":2248,"documentIds":{"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9,"10":10,"11":11,"12":12,"13":13,"14":14,"15":15,"16":16,"17":17,"18":18,"19":19,"20":20,"21":21,"22":22,"23":23,"24":24,"25":25,"26":26,"27":27,"28":28,"29":29,"30":30,"31":31,"32":32,"33":33,"34":34,"35":35,"36":36,"37":37,"38":38,"39":39,"40":40,"41":41,"42":42,"43":43,"44":44,"45":45,"46":46,"47":47,"48":48,"49":49,"50":50,"51":51,"52":52,"53":53,"54":54,"55":55,"56":56,"57":57,"58":58,"59":59,"60":60,"61":61,"62":62,"63":63,"64":64,"65":65,"66":66,"67":67,"68":68,"69":69,"70":70,"71":71,"72":72,"73":73,"74":74,"75":75,"76":76,"77":77,"78":78,"79":79,"80":80,"81":81,"82":82,"83":83,"84":84,"85":85,"86":86,"87":87,"88":88,"89":89,"90":90,"91":91,"92":92,"93":93,"94":94,"95":95,"96":96,"97":97,"98":98,"99":99,"100":100,"101":101,"102":102,"103":103,"104":104,"105":105,"106":106,"107":107,"108":108,"109":109,"110":110,"111":111,"112":112,"113":113,"114":114,"115":115,"116":116,"117":117,"118":118,"119":119,"120":120,"121":121,"122":122,"123":123,"124":124,"125":125,"126":126,"127":127,"128":128,"129":129,"130":130,"131":131,"132":132,"133":133,"134":134,"135":135,"136":136,"137":137,"138":138,"139":139,"140":140,"141":141,"142":142,"143":143,"144":144,"145":145,"146":146,"147":147,"148":148,"149":149,"150":150,"151":151,"152":152,"153":153,"154":154,"155":155,"156":156,"157":157,"158":158,"159":159,"160":160,"161":161,"162":162,"163":163,"164":164,"165":165,"166":166,"167":167,"168":168,"169":169,"170":170,"171":171,"172":172,"173":173,"174":174,"175":175,"176":176,"177":177,"178":178,"179":179,"180":180,"181":181,"182":182,"183":183,"184":184,"185":185,"186":186,"187":187,"188":188,"189":189,"190":190,"191":191,"192":192,"193":193,"194":194,"195":195,"196":196,"197":197,"198":198,"199":199,"200":200,"201":201,"202":202,"203":203,"204":204,"205":205,"206":206,"207":207,"208":208,"209":209,"210":210,"211":211,"212":212,"213":213,"214":214,"215":215,"216":216,"217":217,"218":218,"219":219,"220":220,"221":221,"222":222,"223":223,"224":224,"225":225,"226":226,"227":227,"228":228,"229":229,"230":230,"231":231,"232":232,"233":233,"234":234,"235":235,"236":236,"237":237,"238":238,"239":239,"240":240,"241":241,"242":242,"243":243,"244":244,"245":245,"246":246,"247":247,"248":248,"249":249,"250":250,"251":251,"252":252,"253":253,"254":254,"255":255,"256":256,"257":257,"258":258,"259":259,"260":260,"261":261,"262":262,"263":263,"264":264,"265":265,"266":266,"267":267,"268":268,"269":269,"270":270,"271":271,"272":272,"273":273,"274":274,"275":275,"276":276,"277":277,"278":278,"279":279,"280":280,"281":281,"282":282,"283":283,"284":284,"285":285,"286":286,"287":287,"288":288,"289":289,"290":290,"291":291,"292":292,"293":293,"294":294,"295":295,"296":296,"297":297,"298":298,"299":299,"300":300,"301":301,"302":302,"303":303,"304":304,"305":305,"306":306,"307":307,"308":308,"309":309,"310":310,"311":311,"312":312,"313":313,"314":314,"315":315,"316":316,"317":317,"318":318,"319":319,"320":320,"321":321,"322":322,"323":323,"324":324,"325":325,"326":326,"327":327,"328":328,"329":329,"330":330,"331":331,"332":332,"333":333,"334":334,"335":335,"336":336,"337":337,"338":338,"339":339,"340":340,"341":341,"342":342,"343":343,"344":344,"345":345,"346":346,"347":347,"348":348,"349":349,"350":350,"351":351,"352":352,"353":353,"354":354,"355":355,"356":356,"357":357,"358":358,"359":359,"360":360,"361":361,"362":362,"363":363,"364":364,"365":365,"366":366,"367":367,"368":368,"369":369,"370":370,"371":371,"372":372,"373":373,"374":374,"375":375,"376":376,"377":377,"378":378,"379":379,"380":380,"381":381,"382":382,"383":383,"384":384,"385":385,"386":386,"387":387,"388":388,"389":389,"390":390,"391":391,"392":392,"393":393,"394":394,"395":395,"396":396,"397":397,"398":398,"399":399,"400":400,"401":401,"402":402,"403":403,"404":404,"405":405,"406":406,"407":407,"408":408,"409":409,"410":410,"411":411,"412":412,"413":413,"414":414,"415":415,"416":416,"417":417,"418":418,"419":419,"420":420,"421":421,"422":422,"423":423,"424":424,"425":425,"426":426,"427":427,"428":428,"429":429,"430":430,"431":431,"432":432,"433":433,"434":434,"435":435,"436":436,"437":437,"438":438,"439":439,"440":440,"441":441,"442":442,"443":443,"444":444,"445":445,"446":446,"447":447,"448":448,"449":449,"450":450,"451":451,"452":452,"453":453,"454":454,"455":455,"456":456,"457":457,"458":458,"459":459,"460":460,"461":461,"462":462,"463":463,"464":464,"465":465,"466":466,"467":467,"468":468,"469":469,"470":470,"471":471,"472":472,"473":473,"474":474,"475":475,"476":476,"477":477,"478":478,"479":479,"480":480,"481":481,"482":482,"483":483,"484":484,"485":485,"486":486,"487":487,"488":488,"489":489,"490":490,"491":491,"492":492,"493":493,"494":494,"495":495,"496":496,"497":497,"498":498,"499":499,"500":500,"501":501,"502":502,"503":503,"504":504,"505":505,"506":506,"507":507,"508":508,"509":509,"510":510,"511":511,"512":512,"513":513,"514":514,"515":515,"516":516,"517":517,"518":518,"519":519,"520":520,"521":521,"522":522,"523":523,"524":524,"525":525,"526":526,"527":527,"528":528,"529":529,"530":530,"531":531,"532":532,"533":533,"534":534,"535":535,"536":536,"537":537,"538":538,"539":539,"540":540,"541":541,"542":542,"543":543,"544":544,"545":545,"546":546,"547":547,"548":548,"549":549,"550":550,"551":551,"552":552,"553":553,"554":554,"555":555,"556":556,"557":557,"558":558,"559":559,"560":560,"561":561,"562":562,"563":563,"564":564,"565":565,"566":566,"567":567,"568":568,"569":569,"570":570,"571":571,"572":572,"573":573,"574":574,"575":575,"576":576,"577":577,"578":578,"579":579,"580":580,"581":581,"582":582,"583":583,"584":584,"585":585,"586":586,"587":587,"588":588,"589":589,"590":590,"591":591,"592":592,"593":593,"594":594,"595":595,"596":596,"597":597,"598":598,"599":599,"600":600,"601":601,"602":602,"603":603,"604":604,"605":605,"606":606,"607":607,"608":608,"609":609,"610":610,"611":611,"612":612,"613":613,"614":614,"615":615,"616":616,"617":617,"618":618,"619":619,"620":620,"621":621,"622":622,"623":623,"624":624,"625":625,"626":626,"627":627,"628":628,"629":629,"630":630,"631":631,"632":632,"633":633,"634":634,"635":635,"636":636,"637":637,"638":638,"639":639,"640":640,"641":641,"642":642,"643":643,"644":644,"645":645,"646":646,"647":647,"648":648,"649":649,"650":650,"651":651,"652":652,"653":653,"654":654,"655":655,"656":656,"657":657,"658":658,"659":659,"660":660,"661":661,"662":662,"663":663,"664":664,"665":665,"666":666,"667":667,"668":668,"669":669,"670":670,"671":671,"672":672,"673":673,"674":674,"675":675,"676":676,"677":677,"678":678,"679":679,"680":680,"681":681,"682":682,"683":683,"684":684,"685":685,"686":686,"687":687,"688":688,"689":689,"690":690,"691":691,"692":692,"693":693,"694":694,"695":695,"696":696,"697":697,"698":698,"699":699,"700":700,"701":701,"702":702,"703":703,"704":704,"705":705,"706":706,"707":707,"708":708,"709":709,"710":710,"711":711,"712":712,"713":713,"714":714,"715":715,"716":716,"717":717,"718":718,"719":719,"720":720,"721":721,"722":722,"723":723,"724":724,"725":725,"726":726,"727":727,"728":728,"729":729,"730":730,"731":731,"732":732,"733":733,"734":734,"735":735,"736":736,"737":737,"738":738,"739":739,"740":740,"741":741,"742":742,"743":743,"744":744,"745":745,"746":746,"747":747,"748":748,"749":749,"750":750,"751":751,"752":752,"753":753,"754":754,"755":755,"756":756,"757":757,"758":758,"759":759,"760":760,"761":761,"762":762,"763":763,"764":764,"765":765,"766":766,"767":767,"768":768,"769":769,"770":770,"771":771,"772":772,"773":773,"774":774,"775":775,"776":776,"777":777,"778":778,"779":779,"780":780,"781":781,"782":782,"783":783,"784":784,"785":785,"786":786,"787":787,"788":788,"789":789,"790":790,"791":791,"792":792,"793":793,"794":794,"795":795,"796":796,"797":797,"798":798,"799":799,"800":800,"801":801,"802":802,"803":803,"804":804,"805":805,"806":806,"807":807,"808":808,"809":809,"810":810,"811":811,"812":812,"813":813,"814":814,"815":815,"816":816,"817":817,"818":818,"819":819,"820":820,"821":821,"822":822,"823":823,"824":824,"825":825,"826":826,"827":827,"828":828,"829":829,"830":830,"831":831,"832":832,"833":833,"834":834,"835":835,"836":836,"837":837,"838":838,"839":839,"840":840,"841":841,"842":842,"843":843,"844":844,"845":845,"846":846,"847":847,"848":848,"849":849,"850":850,"851":851,"852":852,"853":853,"854":854,"855":855,"856":856,"857":857,"858":858,"859":859,"860":860,"861":861,"862":862,"863":863,"864":864,"865":865,"866":866,"867":867,"868":868,"869":869,"870":870,"871":871,"872":872,"873":873,"874":874,"875":875,"876":876,"877":877,"878":878,"879":879,"880":880,"881":881,"882":882,"883":883,"884":884,"885":885,"886":886,"887":887,"888":888,"889":889,"890":890,"891":891,"892":892,"893":893,"894":894,"895":895,"896":896,"897":897,"898":898,"899":899,"900":900,"901":901,"902":902,"903":903,"904":904,"905":905,"906":906,"907":907,"908":908,"909":909,"910":910,"911":911,"912":912,"913":913,"914":914,"915":915,"916":916,"917":917,"918":918,"919":919,"920":920,"921":921,"922":922,"923":923,"924":924,"925":925,"926":926,"927":927,"928":928,"929":929,"930":930,"931":931,"932":932,"933":933,"934":934,"935":935,"936":936,"937":937,"938":938,"939":939,"940":940,"941":941,"942":942,"943":943,"944":944,"945":945,"946":946,"947":947,"948":948,"949":949,"950":950,"951":951,"952":952,"953":953,"954":954,"955":955,"956":956,"957":957,"958":958,"959":959,"960":960,"961":961,"962":962,"963":963,"964":964,"965":965,"966":966,"967":967,"968":968,"969":969,"970":970,"971":971,"972":972,"973":973,"974":974,"975":975,"976":976,"977":977,"978":978,"979":979,"980":980,"981":981,"982":982,"983":983,"984":984,"985":985,"986":986,"987":987,"988":988,"989":989,"990":990,"991":991,"992":992,"993":993,"994":994,"995":995,"996":996,"997":997,"998":998,"999":999,"1000":1000,"1001":1001,"1002":1002,"1003":1003,"1004":1004,"1005":1005,"1006":1006,"1007":1007,"1008":1008,"1009":1009,"1010":1010,"1011":1011,"1012":1012,"1013":1013,"1014":1014,"1015":1015,"1016":1016,"1017":1017,"1018":1018,"1019":1019,"1020":1020,"1021":1021,"1022":1022,"1023":1023,"1024":1024,"1025":1025,"1026":1026,"1027":1027,"1028":1028,"1029":1029,"1030":1030,"1031":1031,"1032":1032,"1033":1033,"1034":1034,"1035":1035,"1036":1036,"1037":1037,"1038":1038,"1039":1039,"1040":1040,"1041":1041,"1042":1042,"1043":1043,"1044":1044,"1045":1045,"1046":1046,"1047":1047,"1048":1048,"1049":1049,"1050":1050,"1051":1051,"1052":1052,"1053":1053,"1054":1054,"1055":1055,"1056":1056,"1057":1057,"1058":1058,"1059":1059,"1060":1060,"1061":1061,"1062":1062,"1063":1063,"1064":1064,"1065":1065,"1066":1066,"1067":1067,"1068":1068,"1069":1069,"1070":1070,"1071":1071,"1072":1072,"1073":1073,"1074":1074,"1075":1075,"1076":1076,"1077":1077,"1078":1078,"1079":1079,"1080":1080,"1081":1081,"1082":1082,"1083":1083,"1084":1084,"1085":1085,"1086":1086,"1087":1087,"1088":1088,"1089":1089,"1090":1090,"1091":1091,"1092":1092,"1093":1093,"1094":1094,"1095":1095,"1096":1096,"1097":1097,"1098":1098,"1099":1099,"1100":1100,"1101":1101,"1102":1102,"1103":1103,"1104":1104,"1105":1105,"1106":1106,"1107":1107,"1108":1108,"1109":1109,"1110":1110,"1111":1111,"1112":1112,"1113":1113,"1114":1114,"1115":1115,"1116":1116,"1117":1117,"1118":1118,"1119":1119,"1120":1120,"1121":1121,"1122":1122,"1123":1123,"1124":1124,"1125":1125,"1126":1126,"1127":1127,"1128":1128,"1129":1129,"1130":1130,"1131":1131,"1132":1132,"1133":1133,"1134":1134,"1135":1135,"1136":1136,"1137":1137,"1138":1138,"1139":1139,"1140":1140,"1141":1141,"1142":1142,"1143":1143,"1144":1144,"1145":1145,"1146":1146,"1147":1147,"1148":1148,"1149":1149,"1150":1150,"1151":1151,"1152":1152,"1153":1153,"1154":1154,"1155":1155,"1156":1156,"1157":1157,"1158":1158,"1159":1159,"1160":1160,"1161":1161,"1162":1162,"1163":1163,"1164":1164,"1165":1165,"1166":1166,"1167":1167,"1168":1168,"1169":1169,"1170":1170,"1171":1171,"1172":1172,"1173":1173,"1174":1174,"1175":1175,"1176":1176,"1177":1177,"1178":1178,"1179":1179,"1180":1180,"1181":1181,"1182":1182,"1183":1183,"1184":1184,"1185":1185,"1186":1186,"1187":1187,"1188":1188,"1189":1189,"1190":1190,"1191":1191,"1192":1192,"1193":1193,"1194":1194,"1195":1195,"1196":1196,"1197":1197,"1198":1198,"1199":1199,"1200":1200,"1201":1201,"1202":1202,"1203":1203,"1204":1204,"1205":1205,"1206":1206,"1207":1207,"1208":1208,"1209":1209,"1210":1210,"1211":1211,"1212":1212,"1213":1213,"1214":1214,"1215":1215,"1216":1216,"1217":1217,"1218":1218,"1219":1219,"1220":1220,"1221":1221,"1222":1222,"1223":1223,"1224":1224,"1225":1225,"1226":1226,"1227":1227,"1228":1228,"1229":1229,"1230":1230,"1231":1231,"1232":1232,"1233":1233,"1234":1234,"1235":1235,"1236":1236,"1237":1237,"1238":1238,"1239":1239,"1240":1240,"1241":1241,"1242":1242,"1243":1243,"1244":1244,"1245":1245,"1246":1246,"1247":1247,"1248":1248,"1249":1249,"1250":1250,"1251":1251,"1252":1252,"1253":1253,"1254":1254,"1255":1255,"1256":1256,"1257":1257,"1258":1258,"1259":1259,"1260":1260,"1261":1261,"1262":1262,"1263":1263,"1264":1264,"1265":1265,"1266":1266,"1267":1267,"1268":1268,"1269":1269,"1270":1270,"1271":1271,"1272":1272,"1273":1273,"1274":1274,"1275":1275,"1276":1276,"1277":1277,"1278":1278,"1279":1279,"1280":1280,"1281":1281,"1282":1282,"1283":1283,"1284":1284,"1285":1285,"1286":1286,"1287":1287,"1288":1288,"1289":1289,"1290":1290,"1291":1291,"1292":1292,"1293":1293,"1294":1294,"1295":1295,"1296":1296,"1297":1297,"1298":1298,"1299":1299,"1300":1300,"1301":1301,"1302":1302,"1303":1303,"1304":1304,"1305":1305,"1306":1306,"1307":1307,"1308":1308,"1309":1309,"1310":1310,"1311":1311,"1312":1312,"1313":1313,"1314":1314,"1315":1315,"1316":1316,"1317":1317,"1318":1318,"1319":1319,"1320":1320,"1321":1321,"1322":1322,"1323":1323,"1324":1324,"1325":1325,"1326":1326,"1327":1327,"1328":1328,"1329":1329,"1330":1330,"1331":1331,"1332":1332,"1333":1333,"1334":1334,"1335":1335,"1336":1336,"1337":1337,"1338":1338,"1339":1339,"1340":1340,"1341":1341,"1342":1342,"1343":1343,"1344":1344,"1345":1345,"1346":1346,"1347":1347,"1348":1348,"1349":1349,"1350":1350,"1351":1351,"1352":1352,"1353":1353,"1354":1354,"1355":1355,"1356":1356,"1357":1357,"1358":1358,"1359":1359,"1360":1360,"1361":1361,"1362":1362,"1363":1363,"1364":1364,"1365":1365,"1366":1366,"1367":1367,"1368":1368,"1369":1369,"1370":1370,"1371":1371,"1372":1372,"1373":1373,"1374":1374,"1375":1375,"1376":1376,"1377":1377,"1378":1378,"1379":1379,"1380":1380,"1381":1381,"1382":1382,"1383":1383,"1384":1384,"1385":1385,"1386":1386,"1387":1387,"1388":1388,"1389":1389,"1390":1390,"1391":1391,"1392":1392,"1393":1393,"1394":1394,"1395":1395,"1396":1396,"1397":1397,"1398":1398,"1399":1399,"1400":1400,"1401":1401,"1402":1402,"1403":1403,"1404":1404,"1405":1405,"1406":1406,"1407":1407,"1408":1408,"1409":1409,"1410":1410,"1411":1411,"1412":1412,"1413":1413,"1414":1414,"1415":1415,"1416":1416,"1417":1417,"1418":1418,"1419":1419,"1420":1420,"1421":1421,"1422":1422,"1423":1423,"1424":1424,"1425":1425,"1426":1426,"1427":1427,"1428":1428,"1429":1429,"1430":1430,"1431":1431,"1432":1432,"1433":1433,"1434":1434,"1435":1435,"1436":1436,"1437":1437,"1438":1438,"1439":1439,"1440":1440,"1441":1441,"1442":1442,"1443":1443,"1444":1444,"1445":1445,"1446":1446,"1447":1447,"1448":1448,"1449":1449,"1450":1450,"1451":1451,"1452":1452,"1453":1453,"1454":1454,"1455":1455,"1456":1456,"1457":1457,"1458":1458,"1459":1459,"1460":1460,"1461":1461,"1462":1462,"1463":1463,"1464":1464,"1465":1465,"1466":1466,"1467":1467,"1468":1468,"1469":1469,"1470":1470,"1471":1471,"1472":1472,"1473":1473,"1474":1474,"1475":1475,"1476":1476,"1477":1477,"1478":1478,"1479":1479,"1480":1480,"1481":1481,"1482":1482,"1483":1483,"1484":1484,"1485":1485,"1486":1486,"1487":1487,"1488":1488,"1489":1489,"1490":1490,"1491":1491,"1492":1492,"1493":1493,"1494":1494,"1495":1495,"1496":1496,"1497":1497,"1498":1498,"1499":1499,"1500":1500,"1501":1501,"1502":1502,"1503":1503,"1504":1504,"1505":1505,"1506":1506,"1507":1507,"1508":1508,"1509":1509,"1510":1510,"1511":1511,"1512":1512,"1513":1513,"1514":1514,"1515":1515,"1516":1516,"1517":1517,"1518":1518,"1519":1519,"1520":1520,"1521":1521,"1522":1522,"1523":1523,"1524":1524,"1525":1525,"1526":1526,"1527":1527,"1528":1528,"1529":1529,"1530":1530,"1531":1531,"1532":1532,"1533":1533,"1534":1534,"1535":1535,"1536":1536,"1537":1537,"1538":1538,"1539":1539,"1540":1540,"1541":1541,"1542":1542,"1543":1543,"1544":1544,"1545":1545,"1546":1546,"1547":1547,"1548":1548,"1549":1549,"1550":1550,"1551":1551,"1552":1552,"1553":1553,"1554":1554,"1555":1555,"1556":1556,"1557":1557,"1558":1558,"1559":1559,"1560":1560,"1561":1561,"1562":1562,"1563":1563,"1564":1564,"1565":1565,"1566":1566,"1567":1567,"1568":1568,"1569":1569,"1570":1570,"1571":1571,"1572":1572,"1573":1573,"1574":1574,"1575":1575,"1576":1576,"1577":1577,"1578":1578,"1579":1579,"1580":1580,"1581":1581,"1582":1582,"1583":1583,"1584":1584,"1585":1585,"1586":1586,"1587":1587,"1588":1588,"1589":1589,"1590":1590,"1591":1591,"1592":1592,"1593":1593,"1594":1594,"1595":1595,"1596":1596,"1597":1597,"1598":1598,"1599":1599,"1600":1600,"1601":1601,"1602":1602,"1603":1603,"1604":1604,"1605":1605,"1606":1606,"1607":1607,"1608":1608,"1609":1609,"1610":1610,"1611":1611,"1612":1612,"1613":1613,"1614":1614,"1615":1615,"1616":1616,"1617":1617,"1618":1618,"1619":1619,"1620":1620,"1621":1621,"1622":1622,"1623":1623,"1624":1624,"1625":1625,"1626":1626,"1627":1627,"1628":1628,"1629":1629,"1630":1630,"1631":1631,"1632":1632,"1633":1633,"1634":1634,"1635":1635,"1636":1636,"1637":1637,"1638":1638,"1639":1639,"1640":1640,"1641":1641,"1642":1642,"1643":1643,"1644":1644,"1645":1645,"1646":1646,"1647":1647,"1648":1648,"1649":1649,"1650":1650,"1651":1651,"1652":1652,"1653":1653,"1654":1654,"1655":1655,"1656":1656,"1657":1657,"1658":1658,"1659":1659,"1660":1660,"1661":1661,"1662":1662,"1663":1663,"1664":1664,"1665":1665,"1666":1666,"1667":1667,"1668":1668,"1669":1669,"1670":1670,"1671":1671,"1672":1672,"1673":1673,"1674":1674,"1675":1675,"1676":1676,"1677":1677,"1678":1678,"1679":1679,"1680":1680,"1681":1681,"1682":1682,"1683":1683,"1684":1684,"1685":1685,"1686":1686,"1687":1687,"1688":1688,"1689":1689,"1690":1690,"1691":1691,"1692":1692,"1693":1693,"1694":1694,"1695":1695,"1696":1696,"1697":1697,"1698":1698,"1699":1699,"1700":1700,"1701":1701,"1702":1702,"1703":1703,"1704":1704,"1705":1705,"1706":1706,"1707":1707,"1708":1708,"1709":1709,"1710":1710,"1711":1711,"1712":1712,"1713":1713,"1714":1714,"1715":1715,"1716":1716,"1717":1717,"1718":1718,"1719":1719,"1720":1720,"1721":1721,"1722":1722,"1723":1723,"1724":1724,"1725":1725,"1726":1726,"1727":1727,"1728":1728,"1729":1729,"1730":1730,"1731":1731,"1732":1732,"1733":1733,"1734":1734,"1735":1735,"1736":1736,"1737":1737,"1738":1738,"1739":1739,"1740":1740,"1741":1741,"1742":1742,"1743":1743,"1744":1744,"1745":1745,"1746":1746,"1747":1747,"1748":1748,"1749":1749,"1750":1750,"1751":1751,"1752":1752,"1753":1753,"1754":1754,"1755":1755,"1756":1756,"1757":1757,"1758":1758,"1759":1759,"1760":1760,"1761":1761,"1762":1762,"1763":1763,"1764":1764,"1765":1765,"1766":1766,"1767":1767,"1768":1768,"1769":1769,"1770":1770,"1771":1771,"1772":1772,"1773":1773,"1774":1774,"1775":1775,"1776":1776,"1777":1777,"1778":1778,"1779":1779,"1780":1780,"1781":1781,"1782":1782,"1783":1783,"1784":1784,"1785":1785,"1786":1786,"1787":1787,"1788":1788,"1789":1789,"1790":1790,"1791":1791,"1792":1792,"1793":1793,"1794":1794,"1795":1795,"1796":1796,"1797":1797,"1798":1798,"1799":1799,"1800":1800,"1801":1801,"1802":1802,"1803":1803,"1804":1804,"1805":1805,"1806":1806,"1807":1807,"1808":1808,"1809":1809,"1810":1810,"1811":1811,"1812":1812,"1813":1813,"1814":1814,"1815":1815,"1816":1816,"1817":1817,"1818":1818,"1819":1819,"1820":1820,"1821":1821,"1822":1822,"1823":1823,"1824":1824,"1825":1825,"1826":1826,"1827":1827,"1828":1828,"1829":1829,"1830":1830,"1831":1831,"1832":1832,"1833":1833,"1834":1834,"1835":1835,"1836":1836,"1837":1837,"1838":1838,"1839":1839,"1840":1840,"1841":1841,"1842":1842,"1843":1843,"1844":1844,"1845":1845,"1846":1846,"1847":1847,"1848":1848,"1849":1849,"1850":1850,"1851":1851,"1852":1852,"1853":1853,"1854":1854,"1855":1855,"1856":1856,"1857":1857,"1858":1858,"1859":1859,"1860":1860,"1861":1861,"1862":1862,"1863":1863,"1864":1864,"1865":1865,"1866":1866,"1867":1867,"1868":1868,"1869":1869,"1870":1870,"1871":1871,"1872":1872,"1873":1873,"1874":1874,"1875":1875,"1876":1876,"1877":1877,"1878":1878,"1879":1879,"1880":1880,"1881":1881,"1882":1882,"1883":1883,"1884":1884,"1885":1885,"1886":1886,"1887":1887,"1888":1888,"1889":1889,"1890":1890,"1891":1891,"1892":1892,"1893":1893,"1894":1894,"1895":1895,"1896":1896,"1897":1897,"1898":1898,"1899":1899,"1900":1900,"1901":1901,"1902":1902,"1903":1903,"1904":1904,"1905":1905,"1906":1906,"1907":1907,"1908":1908,"1909":1909,"1910":1910,"1911":1911,"1912":1912,"1913":1913,"1914":1914,"1915":1915,"1916":1916,"1917":1917,"1918":1918,"1919":1919,"1920":1920,"1921":1921,"1922":1922,"1923":1923,"1924":1924,"1925":1925,"1926":1926,"1927":1927,"1928":1928,"1929":1929,"1930":1930,"1931":1931,"1932":1932,"1933":1933,"1934":1934,"1935":1935,"1936":1936,"1937":1937,"1938":1938,"1939":1939,"1940":1940,"1941":1941,"1942":1942,"1943":1943,"1944":1944,"1945":1945,"1946":1946,"1947":1947,"1948":1948,"1949":1949,"1950":1950,"1951":1951,"1952":1952,"1953":1953,"1954":1954,"1955":1955,"1956":1956,"1957":1957,"1958":1958,"1959":1959,"1960":1960,"1961":1961,"1962":1962,"1963":1963,"1964":1964,"1965":1965,"1966":1966,"1967":1967,"1968":1968,"1969":1969,"1970":1970,"1971":1971,"1972":1972,"1973":1973,"1974":1974,"1975":1975,"1976":1976,"1977":1977,"1978":1978,"1979":1979,"1980":1980,"1981":1981,"1982":1982,"1983":1983,"1984":1984,"1985":1985,"1986":1986,"1987":1987,"1988":1988,"1989":1989,"1990":1990,"1991":1991,"1992":1992,"1993":1993,"1994":1994,"1995":1995,"1996":1996,"1997":1997,"1998":1998,"1999":1999,"2000":2000,"2001":2001,"2002":2002,"2003":2003,"2004":2004,"2005":2005,"2006":2006,"2007":2007,"2008":2008,"2009":2009,"2010":2010,"2011":2011,"2012":2012,"2013":2013,"2014":2014,"2015":2015,"2016":2016,"2017":2017,"2018":2018,"2019":2019,"2020":2020,"2021":2021,"2022":2022,"2023":2023,"2024":2024,"2025":2025,"2026":2026,"2027":2027,"2028":2028,"2029":2029,"2030":2030,"2031":2031,"2032":2032,"2033":2033,"2034":2034,"2035":2035,"2036":2036,"2037":2037,"2038":2038,"2039":2039,"2040":2040,"2041":2041,"2042":2042,"2043":2043,"2044":2044,"2045":2045,"2046":2046,"2047":2047,"2048":2048,"2049":2049,"2050":2050,"2051":2051,"2052":2052,"2053":2053,"2054":2054,"2055":2055,"2056":2056,"2057":2057,"2058":2058,"2059":2059,"2060":2060,"2061":2061,"2062":2062,"2063":2063,"2064":2064,"2065":2065,"2066":2066,"2067":2067,"2068":2068,"2069":2069,"2070":2070,"2071":2071,"2072":2072,"2073":2073,"2074":2074,"2075":2075,"2076":2076,"2077":2077,"2078":2078,"2079":2079,"2080":2080,"2081":2081,"2082":2082,"2083":2083,"2084":2084,"2085":2085,"2086":2086,"2087":2087,"2088":2088,"2089":2089,"2090":2090,"2091":2091,"2092":2092,"2093":2093,"2094":2094,"2095":2095,"2096":2096,"2097":2097,"2098":2098,"2099":2099,"2100":2100,"2101":2101,"2102":2102,"2103":2103,"2104":2104,"2105":2105,"2106":2106,"2107":2107,"2108":2108,"2109":2109,"2110":2110,"2111":2111,"2112":2112,"2113":2113,"2114":2114,"2115":2115,"2116":2116,"2117":2117,"2118":2118,"2119":2119,"2120":2120,"2121":2121,"2122":2122,"2123":2123,"2124":2124,"2125":2125,"2126":2126,"2127":2127,"2128":2128,"2129":2129,"2130":2130,"2131":2131,"2132":2132,"2133":2133,"2134":2134,"2135":2135,"2136":2136,"2137":2137,"2138":2138,"2139":2139,"2140":2140,"2141":2141,"2142":2142,"2143":2143,"2144":2144,"2145":2145,"2146":2146,"2147":2147,"2148":2148,"2149":2149,"2150":2150,"2151":2151,"2152":2152,"2153":2153,"2154":2154,"2155":2155,"2156":2156,"2157":2157,"2158":2158,"2159":2159,"2160":2160,"2161":2161,"2162":2162,"2163":2163,"2164":2164,"2165":2165,"2166":2166,"2167":2167,"2168":2168,"2169":2169,"2170":2170,"2171":2171,"2172":2172,"2173":2173,"2174":2174,"2175":2175,"2176":2176,"2177":2177,"2178":2178,"2179":2179,"2180":2180,"2181":2181,"2182":2182,"2183":2183,"2184":2184,"2185":2185,"2186":2186,"2187":2187,"2188":2188,"2189":2189,"2190":2190,"2191":2191,"2192":2192,"2193":2193,"2194":2194,"2195":2195,"2196":2196,"2197":2197,"2198":2198,"2199":2199,"2200":2200,"2201":2201,"2202":2202,"2203":2203,"2204":2204,"2205":2205,"2206":2206,"2207":2207,"2208":2208,"2209":2209,"2210":2210,"2211":2211,"2212":2212,"2213":2213,"2214":2214,"2215":2215,"2216":2216,"2217":2217,"2218":2218,"2219":2219,"2220":2220,"2221":2221,"2222":2222,"2223":2223,"2224":2224,"2225":2225,"2226":2226,"2227":2227,"2228":2228,"2229":2229,"2230":2230,"2231":2231,"2232":2232,"2233":2233,"2234":2234,"2235":2235,"2236":2236,"2237":2237,"2238":2238,"2239":2239,"2240":2240,"2241":2241,"2242":2242,"2243":2243,"2244":2244,"2245":2245,"2246":2246,"2247":2247},"fieldIds":{"t":0,"d":1,"i":2,"b":3},"fieldLength":{"0":[null,3,21,5392],"1":[4,3,null,152],"2":[null,7,null,7],"3":[1,7,2,61],"4":[1,7,4,27],"5":[1,7,12,95],"6":[1,7,3,80],"7":[2,7,2,61],"8":[null,7,null,7],"9":[1,7,null,1],"10":[1,7,8,91],"11":[1,7,12,67],"12":[1,7,1,57],"13":[2,7,1,39],"14":[null,7,null,7],"15":[1,7,11,237],"16":[1,7,null,41],"17":[1,7,9,181],"18":[1,7,7,139],"19":[2,7,7,265],"20":[5,7,16,230],"21":[5,7,8,171],"22":[5,7,1,157],"23":[5,7,null,125],"24":[5,7,18,649],"25":[5,7,2,138],"26":[5,7,14,319],"27":[5,7,12,486],"28":[null,10,null,10],"29":[1,10,3,28],"30":[1,10,null,87],"31":[1,10,20,356],"32":[1,10,null,120],"33":[2,10,null,98],"34":[5,10,3,48],"35":[1,10,1,36],"36":[null,8,null,8],"37":[1,8,6,54],"38":[1,8,5,119],"39":[1,8,19,438],"40":[1,8,1,78],"41":[2,8,4,185],"42":[5,8,5,142],"43":[5,8,12,111],"44":[null,5,null,5],"45":[1,5,2,63],"46":[1,5,6,88],"47":[1,5,13,173],"48":[1,5,1,52],"49":[2,5,null,53],"50":[null,9,null,9],"51":[1,9,2,46],"52":[1,9,3,61],"53":[1,9,16,217],"54":[1,9,5,118],"55":[2,9,4,73],"56":[null,13,null,13],"57":[1,13,3,149],"58":[1,13,4,123],"59":[1,13,14,339],"60":[1,13,1,133],"61":[2,13,8,124],"62":[1,13,10,229],"63":[5,13,8,124],"64":[1,13,null,29],"65":[null,6,null,6],"66":[1,6,3,96],"67":[1,6,6,98],"68":[1,6,10,216],"69":[1,6,null,76],"70":[2,6,10,122],"71":[5,6,9,275],"72":[5,6,19,282],"73":[5,6,12,196],"74":[5,6,4,172],"75":[null,8,null,8],"76":[1,8,5,109],"77":[1,8,5,96],"78":[1,8,12,168],"79":[1,8,1,110],"80":[2,8,17,219],"81":[8,8,14,289],"82":[5,8,7,95],"83":[null,9,null,9],"84":[1,9,null,28],"85":[1,9,3,50],"86":[1,9,1,94],"87":[1,9,null,41],"88":[2,9,null,40],"89":[null,14,null,14],"90":[1,14,null,36],"91":[9,14,15,226],"92":[14,14,18,216],"93":[22,14,15,274],"94":[18,14,7,213],"95":[20,14,24,351],"96":[20,14,18,234],"97":[1,14,6,173],"98":[1,14,15,258],"99":[19,14,19,245],"100":[17,14,16,300],"101":[1,14,4,109],"102":[2,14,7,123],"103":[5,14,7,154],"104":[5,14,8,157],"105":[1,14,null,38],"106":[null,9,null,9],"107":[1,9,9,109],"108":[1,9,null,77],"109":[1,9,17,968],"110":[1,9,8,231],"111":[2,9,14,279],"112":[5,9,9,67],"113":[1,9,2,73],"114":[null,8,null,8],"115":[1,8,9,202],"116":[1,8,null,60],"117":[1,8,16,297],"118":[1,8,null,61],"119":[2,8,1,56],"120":[5,8,7,127],"121":[5,8,18,296],"122":[5,8,13,493],"123":[5,8,5,118],"124":[1,8,7,94],"125":[5,8,5,212],"126":[5,8,22,323],"127":[5,8,8,102],"128":[5,8,11,207],"129":[null,8,null,8],"130":[1,8,11,234],"131":[1,8,1,84],"132":[1,8,14,189],"133":[1,8,1,83],"134":[2,8,2,77],"135":[5,8,25,855],"136":[8,8,16,421],"137":[15,8,13,299],"138":[15,8,19,265],"139":[16,8,17,366],"140":[12,8,7,240],"141":[14,8,19,215],"142":[14,8,21,411],"143":[1,8,1,72],"144":[null,10,null,10],"145":[1,10,21,244],"146":[1,10,10,107],"147":[1,10,23,312],"148":[1,10,3,116],"149":[2,10,9,134],"150":[3,10,18,377],"151":[2,10,5,102],"152":[5,10,20,134],"153":[1,10,null,39],"154":[null,9,null,9],"155":[1,9,10,126],"156":[1,9,1,93],"157":[1,9,15,422],"158":[1,9,1,99],"159":[2,9,10,228],"160":[5,9,17,391],"161":[5,9,15,188],"162":[1,9,2,98],"163":[null,11,null,11],"164":[1,11,10,192],"165":[1,11,3,121],"166":[1,11,12,415],"167":[1,11,null,87],"168":[2,11,4,188],"169":[1,11,1,48],"170":[10,11,12,262],"171":[5,11,7,146],"172":[null,11,null,11],"173":[1,11,2,161],"174":[1,11,null,124],"175":[1,11,15,426],"176":[1,11,null,101],"177":[2,11,1,208],"178":[5,11,14,362],"179":[5,11,13,251],"180":[5,11,13,216],"181":[5,11,4,103],"182":[1,11,5,95],"183":[null,8,null,8],"184":[1,8,11,141],"185":[1,8,3,133],"186":[1,8,22,471],"187":[1,8,1,94],"188":[2,8,7,145],"189":[5,8,15,217],"190":[5,8,12,87],"191":[1,8,1,36],"192":[null,9,null,9],"193":[1,9,6,201],"194":[1,9,null,101],"195":[1,9,14,375],"196":[1,9,3,134],"197":[2,9,3,115],"198":[5,9,2,108],"199":[1,9,2,81],"200":[5,9,17,305],"201":[5,9,16,435],"202":[5,9,14,303],"203":[5,9,13,149],"204":[null,9,null,9],"205":[1,9,null,2],"206":[1,9,3,96],"207":[1,9,16,170],"208":[1,9,1,120],"209":[2,9,2,116],"210":[1,9,null,41],"211":[null,11,null,11],"212":[1,11,4,110],"213":[1,11,null,106],"214":[1,11,15,280],"215":[1,11,1,139],"216":[2,11,15,198],"217":[5,11,11,210],"218":[5,11,4,121],"219":[5,11,13,338],"220":[5,11,15,191],"221":[1,11,null,36],"222":[null,13,null,13],"223":[1,13,2,95],"224":[1,13,null,103],"225":[1,13,16,375],"226":[1,13,3,111],"227":[2,13,9,136],"228":[5,13,1,130],"229":[1,13,10,116],"230":[5,13,12,372],"231":[5,13,10,144],"232":[null,12,null,12],"233":[1,12,5,124],"234":[1,12,10,185],"235":[1,12,12,544],"236":[1,12,1,177],"237":[2,12,9,287],"238":[5,12,3,71],"239":[1,12,2,60],"240":[null,15,1,15],"241":[1,15,14,229],"242":[1,15,2,124],"243":[1,15,18,673],"244":[1,15,3,140],"245":[2,15,14,399],"246":[5,15,15,198],"247":[1,15,15,121],"248":[5,15,13,203],"249":[5,15,5,138],"250":[5,15,7,120],"251":[5,15,8,155],"252":[5,15,12,186],"253":[5,15,15,150],"254":[5,15,16,254],"255":[5,15,16,459],"256":[5,15,15,305],"257":[5,15,12,252],"258":[5,15,19,326],"259":[5,15,17,392],"260":[5,15,12,196],"261":[5,15,16,273],"262":[null,8,null,8],"263":[1,8,null,52],"264":[1,8,3,120],"265":[1,8,23,923],"266":[1,8,4,141],"267":[2,8,5,147],"268":[5,8,11,138],"269":[1,8,5,69],"270":[null,6,null,6],"271":[1,6,null,10],"272":[1,6,7,95],"273":[1,6,18,272],"274":[1,6,1,81],"275":[2,6,4,110],"276":[5,6,8,58],"277":[1,6,1,33],"278":[null,9,null,9],"279":[1,9,7,160],"280":[1,9,2,153],"281":[1,9,16,156],"282":[1,9,1,132],"283":[2,9,7,208],"284":[5,9,11,184],"285":[5,9,10,136],"286":[2,9,7,125],"287":[1,9,3,59],"288":[null,13,null,13],"289":[1,13,null,5],"290":[1,13,4,146],"291":[1,13,13,212],"292":[1,13,2,73],"293":[2,13,4,131],"294":[1,13,null,36],"295":[5,13,14,296],"296":[5,13,7,139],"297":[null,10,null,10],"298":[1,10,7,95],"299":[1,10,1,80],"300":[1,10,19,177],"301":[1,10,3,111],"302":[2,10,3,124],"303":[5,10,16,212],"304":[1,10,4,57],"305":[5,10,13,253],"306":[5,10,7,106],"307":[null,12,null,12],"308":[1,12,null,58],"309":[1,12,null,120],"310":[1,12,20,310],"311":[1,12,1,122],"312":[2,12,2,176],"313":[1,12,1,78],"314":[5,12,12,192],"315":[null,11,null,11],"316":[1,11,1,31],"317":[1,11,2,140],"318":[1,11,17,617],"319":[1,11,7,140],"320":[2,11,7,186],"321":[1,11,4,71],"322":[5,11,8,96],"323":[5,11,7,71],"324":[5,11,16,226],"325":[5,11,13,207],"326":[5,11,13,188],"327":[null,10,null,10],"328":[1,10,9,122],"329":[1,10,null,115],"330":[1,10,13,366],"331":[1,10,11,141],"332":[2,10,7,152],"333":[5,10,15,220],"334":[1,10,5,56],"335":[5,10,17,231],"336":[5,10,2,94],"337":[5,10,13,149],"338":[null,8,null,8],"339":[1,8,null,33],"340":[1,8,2,178],"341":[1,8,18,530],"342":[1,8,6,235],"343":[2,8,13,286],"344":[5,8,12,165],"345":[5,8,8,139],"346":[1,8,6,96],"347":[null,13,null,13],"348":[1,13,null,109],"349":[1,13,2,161],"350":[1,13,16,589],"351":[1,13,5,170],"352":[2,13,15,230],"353":[5,13,15,306],"354":[5,13,16,93],"355":[1,13,3,70],"356":[null,13,null,13],"357":[1,13,null,29],"358":[1,13,null,180],"359":[1,13,18,498],"360":[1,13,3,274],"361":[2,13,4,318],"362":[1,13,null,71],"363":[5,13,2,96],"364":[5,13,7,89],"365":[5,13,8,317],"366":[5,13,1,81],"367":[null,14,null,14],"368":[1,14,1,76],"369":[1,14,5,159],"370":[1,14,22,329],"371":[1,14,6,158],"372":[2,14,5,138],"373":[5,14,16,325],"374":[11,14,13,148],"375":[5,14,8,170],"376":[1,14,null,72],"377":[null,12,null,12],"378":[1,12,3,51],"379":[1,12,null,108],"380":[1,12,13,180],"381":[1,12,1,87],"382":[2,12,1,100],"383":[5,12,9,166],"384":[5,12,7,195],"385":[null,8,null,8],"386":[1,8,10,190],"387":[1,8,6,220],"388":[1,8,15,255],"389":[1,8,1,80],"390":[2,8,12,407],"391":[5,8,9,253],"392":[5,8,11,180],"393":[5,8,12,117],"394":[null,6,null,6],"395":[1,6,17,305],"396":[1,6,1,139],"397":[1,6,26,552],"398":[1,6,3,163],"399":[2,6,2,171],"400":[5,6,16,223],"401":[5,6,18,344],"402":[6,6,16,299],"403":[5,6,2,226],"404":[5,6,11,175],"405":[2,6,3,115],"406":[1,6,4,89],"407":[7,6,19,286],"408":[9,6,14,172],"409":[5,6,18,255],"410":[null,9,null,9],"411":[1,9,3,66],"412":[1,9,12,134],"413":[1,9,15,464],"414":[1,9,2,96],"415":[2,9,12,234],"416":[5,9,null,53],"417":[null,12,null,12],"418":[1,12,23,308],"419":[1,12,6,133],"420":[1,12,14,258],"421":[1,12,null,56],"422":[2,12,4,184],"423":[5,12,16,309],"424":[5,12,12,168],"425":[5,12,10,175],"426":[5,12,19,293],"427":[5,12,3,151],"428":[5,12,16,278],"429":[5,12,12,155],"430":[5,12,9,91],"431":[null,10,null,10],"432":[1,10,1,51],"433":[1,10,2,106],"434":[1,10,16,299],"435":[1,10,6,192],"436":[5,10,15,150],"437":[null,8,null,8],"438":[1,8,null,87],"439":[1,8,null,83],"440":[1,8,12,210],"441":[1,8,2,118],"442":[5,8,6,115],"443":[5,8,14,222],"444":[5,8,5,178],"445":[null,6,null,6],"446":[1,6,8,141],"447":[1,6,5,122],"448":[1,6,15,423],"449":[1,6,5,137],"450":[2,6,12,158],"451":[11,6,11,155],"452":[12,6,19,138],"453":[5,6,11,117],"454":[12,6,16,212],"455":[1,6,7,79],"456":[null,10,null,10],"457":[1,10,3,72],"458":[1,10,6,148],"459":[1,10,19,570],"460":[1,10,7,143],"461":[2,10,7,259],"462":[1,10,1,86],"463":[5,10,12,285],"464":[5,10,14,282],"465":[10,10,11,287],"466":[5,10,13,191],"467":[null,11,null,11],"468":[1,11,14,183],"469":[1,11,12,143],"470":[1,11,14,281],"471":[1,11,14,120],"472":[2,11,7,160],"473":[1,11,5,80],"474":[5,11,5,134],"475":[5,11,5,116],"476":[5,11,13,147],"477":[5,11,11,196],"478":[5,11,7,98],"479":[null,9,null,9],"480":[1,9,null,47],"481":[1,9,12,117],"482":[1,9,14,128],"483":[1,9,10,153],"484":[2,9,3,116],"485":[1,9,null,37],"486":[5,9,14,211],"487":[5,9,14,193],"488":[5,9,14,185],"489":[5,9,14,214],"490":[5,9,17,406],"491":[5,9,17,354],"492":[5,9,17,368],"493":[5,9,19,367],"494":[5,9,13,218],"495":[5,9,14,195],"496":[null,14,null,14],"497":[1,14,12,306],"498":[1,14,2,120],"499":[1,14,17,432],"500":[1,14,1,171],"501":[2,14,6,213],"502":[5,14,9,152],"503":[1,14,3,54],"504":[null,10,null,10],"505":[1,10,2,51],"506":[1,10,1,148],"507":[1,10,14,451],"508":[1,10,3,151],"509":[2,10,14,185],"510":[1,10,3,52],"511":[5,10,17,251],"512":[5,10,3,106],"513":[5,10,8,193],"514":[5,10,14,150],"515":[null,11,null,11],"516":[1,11,1,89],"517":[1,11,3,196],"518":[1,11,14,281],"519":[1,11,2,94],"520":[2,11,2,138],"521":[1,11,null,47],"522":[5,11,14,229],"523":[5,11,14,238],"524":[5,11,12,222],"525":[null,12,null,12],"526":[1,12,7,166],"527":[1,12,11,180],"528":[1,12,19,320],"529":[1,12,1,164],"530":[2,12,6,315],"531":[5,12,2,133],"532":[1,12,null,71],"533":[null,9,null,9],"534":[1,9,14,231],"535":[1,9,3,154],"536":[1,9,16,712],"537":[1,9,6,236],"538":[2,9,10,332],"539":[15,9,12,402],"540":[5,9,14,250],"541":[1,9,2,120],"542":[null,10,null,10],"543":[1,10,12,278],"544":[1,10,3,180],"545":[1,10,18,643],"546":[1,10,9,179],"547":[2,10,10,245],"548":[1,10,2,106],"549":[5,10,16,770],"550":[5,10,12,298],"551":[5,10,13,329],"552":[5,10,15,212],"553":[null,10,null,10],"554":[1,10,9,111],"555":[1,10,4,172],"556":[1,10,14,618],"557":[1,10,4,196],"558":[2,10,16,265],"559":[5,10,14,118],"560":[1,10,1,85],"561":[null,11,null,11],"562":[1,11,5,92],"563":[1,11,10,170],"564":[1,11,19,435],"565":[1,11,1,146],"566":[2,11,12,238],"567":[5,11,5,104],"568":[1,11,null,68],"569":[null,9,null,9],"570":[1,9,null,61],"571":[1,9,null,138],"572":[1,9,16,610],"573":[1,9,2,193],"574":[2,9,4,224],"575":[5,9,2,127],"576":[13,9,15,156],"577":[14,9,11,179],"578":[5,9,8,157],"579":[1,9,3,87],"580":[null,10,null,10],"581":[1,10,null,8],"582":[1,10,1,124],"583":[1,10,13,612],"584":[1,10,8,219],"585":[2,10,13,419],"586":[5,10,7,135],"587":[1,10,2,90],"588":[null,11,null,11],"589":[1,11,4,71],"590":[1,11,1,173],"591":[1,11,18,480],"592":[1,11,4,286],"593":[2,11,6,250],"594":[5,11,4,95],"595":[1,11,null,67],"596":[null,12,null,12],"597":[1,12,6,84],"598":[1,12,2,160],"599":[1,12,19,629],"600":[1,12,null,189],"601":[2,12,16,271],"602":[5,12,4,200],"603":[5,12,10,134],"604":[5,12,19,125],"605":[1,12,null,85],"606":[null,13,null,13],"607":[1,13,11,296],"608":[1,13,null,206],"609":[1,13,21,771],"610":[1,13,null,213],"611":[2,13,6,300],"612":[5,13,7,206],"613":[5,13,4,75],"614":[1,13,null,76],"615":[null,15,null,15],"616":[1,15,8,123],"617":[1,15,3,174],"618":[1,15,17,525],"619":[1,15,4,206],"620":[2,15,6,206],"621":[5,15,8,102],"622":[1,15,null,74],"623":[null,9,null,9],"624":[1,9,6,205],"625":[1,9,2,224],"626":[1,9,22,648],"627":[1,9,null,273],"628":[2,9,1,240],"629":[5,9,10,212],"630":[1,9,null,46],"631":[null,9,7,178],"632":[1,9,17,214],"633":[1,9,22,617],"634":[1,9,10,157],"635":[2,9,9,263],"636":[5,9,18,145],"637":[null,9,null,9],"638":[1,9,13,199],"639":[1,9,2,100],"640":[1,9,16,701],"641":[1,9,2,176],"642":[2,9,16,326],"643":[5,9,null,121],"644":[5,9,13,172],"645":[1,9,2,52],"646":[null,9,null,9],"647":[1,9,10,77],"648":[1,9,6,133],"649":[1,9,19,490],"650":[1,9,9,245],"651":[2,9,13,226],"652":[5,9,10,83],"653":[1,9,2,49],"654":[null,8,null,8],"655":[1,8,12,101],"656":[1,8,3,159],"657":[1,8,18,640],"658":[1,8,15,227],"659":[2,8,14,208],"660":[5,8,16,183],"661":[1,8,2,56],"662":[null,10,null,10],"663":[1,10,2,37],"664":[1,10,2,184],"665":[1,10,20,491],"666":[1,10,null,165],"667":[2,10,6,187],"668":[5,10,11,190],"669":[5,10,4,152],"670":[1,10,1,63],"671":[null,6,null,6],"672":[1,6,7,125],"673":[1,6,1,149],"674":[1,6,14,687],"675":[1,6,12,204],"676":[2,6,14,328],"677":[5,6,12,156],"678":[1,6,null,52],"679":[null,11,null,11],"680":[1,11,3,59],"681":[1,11,9,172],"682":[1,11,18,368],"683":[1,11,9,209],"684":[2,11,14,246],"685":[5,11,3,98],"686":[1,11,5,57],"687":[null,11,null,11],"688":[1,11,2,124],"689":[1,11,null,203],"690":[1,11,21,674],"691":[1,11,3,362],"692":[2,11,14,400],"693":[5,11,9,98],"694":[1,11,2,87],"695":[null,14,null,14],"696":[1,14,12,222],"697":[1,14,13,174],"698":[1,14,17,687],"699":[1,14,5,198],"700":[2,14,13,248],"701":[1,14,7,97],"702":[5,14,7,249],"703":[5,14,15,171],"704":[null,15,null,15],"705":[1,15,2,40],"706":[1,15,2,157],"707":[1,15,17,553],"708":[1,15,5,196],"709":[2,15,1,252],"710":[5,15,9,85],"711":[1,15,3,110],"712":[null,11,null,11],"713":[1,11,5,108],"714":[1,11,4,185],"715":[1,11,17,424],"716":[1,11,6,230],"717":[2,11,4,205],"718":[5,11,5,149],"719":[12,11,16,155],"720":[15,11,15,177],"721":[1,11,5,91],"722":[null,10,null,10],"723":[1,10,8,99],"724":[1,10,4,223],"725":[1,10,14,559],"726":[1,10,6,214],"727":[2,10,12,269],"728":[5,10,7,104],"729":[1,10,6,96],"730":[null,12,1,12],"731":[1,12,13,146],"732":[1,12,12,174],"733":[1,12,21,598],"734":[1,12,4,178],"735":[2,12,8,224],"736":[5,12,15,146],"737":[1,12,2,115],"738":[null,11,null,11],"739":[1,11,1,73],"740":[1,11,15,280],"741":[1,11,18,633],"742":[1,11,2,215],"743":[2,11,12,476],"744":[5,11,13,172],"745":[1,11,3,98],"746":[null,12,null,12],"747":[1,12,11,116],"748":[1,12,5,153],"749":[1,12,13,603],"750":[1,12,2,167],"751":[2,12,13,343],"752":[5,12,4,70],"753":[1,12,null,60],"754":[null,9,null,9],"755":[1,9,2,84],"756":[1,9,5,204],"757":[1,9,14,525],"758":[1,9,null,237],"759":[2,9,8,302],"760":[5,9,5,136],"761":[5,9,7,158],"762":[1,9,null,74],"763":[null,10,null,10],"764":[1,10,7,175],"765":[1,10,2,216],"766":[1,10,24,497],"767":[1,10,9,224],"768":[2,10,15,268],"769":[5,10,8,116],"770":[1,10,2,62],"771":[null,16,null,16],"772":[1,16,null,5],"773":[1,16,null,150],"774":[1,16,16,346],"775":[1,16,6,140],"776":[2,16,14,237],"777":[5,16,4,79],"778":[1,16,null,88],"779":[null,12,null,12],"780":[1,12,13,107],"781":[1,12,9,127],"782":[1,12,12,474],"783":[1,12,4,138],"784":[2,12,9,228],"785":[2,12,6,97],"786":[1,12,1,61],"787":[null,13,null,13],"788":[1,13,null,40],"789":[1,13,6,219],"790":[1,13,18,649],"791":[1,13,2,185],"792":[2,13,9,336],"793":[5,13,9,256],"794":[5,13,15,206],"795":[1,13,null,76],"796":[null,13,null,13],"797":[1,13,3,125],"798":[1,13,14,298],"799":[1,13,12,421],"800":[1,13,5,188],"801":[2,13,4,185],"802":[1,13,null,102],"803":[5,13,13,241],"804":[5,13,13,210],"805":[5,13,11,179],"806":[5,13,4,104],"807":[null,13,null,13],"808":[1,13,null,81],"809":[1,13,11,284],"810":[1,13,10,279],"811":[1,13,1,143],"812":[2,13,1,164],"813":[17,13,13,219],"814":[5,13,7,113],"815":[1,13,null,119],"816":[null,12,null,12],"817":[1,12,null,60],"818":[1,12,5,216],"819":[1,12,17,600],"820":[1,12,2,215],"821":[2,12,10,307],"822":[5,12,11,91],"823":[1,12,7,117],"824":[null,11,null,11],"825":[1,11,6,271],"826":[1,11,9,354],"827":[1,11,17,1237],"828":[1,11,2,184],"829":[2,11,7,360],"830":[5,11,8,202],"831":[5,11,9,278],"832":[5,11,19,412],"833":[5,11,15,329],"834":[1,11,null,134],"835":[null,7,null,7],"836":[1,7,11,135],"837":[1,7,15,328],"838":[1,7,16,481],"839":[1,7,2,223],"840":[2,7,8,260],"841":[5,7,7,100],"842":[1,7,2,108],"843":[null,7,null,7],"844":[1,7,1,82],"845":[1,7,2,133],"846":[1,7,15,277],"847":[1,7,2,126],"848":[2,7,6,192],"849":[5,7,18,194],"850":[5,7,11,76],"851":[null,6,null,6],"852":[1,6,null,65],"853":[1,6,4,190],"854":[1,6,15,372],"855":[1,6,2,167],"856":[2,6,2,208],"857":[5,6,13,206],"858":[null,14,null,14],"859":[1,14,3,74],"860":[1,14,null,202],"861":[1,14,18,571],"862":[1,14,null,241],"863":[2,14,9,312],"864":[5,14,6,104],"865":[1,14,null,84],"866":[null,8,null,8],"867":[1,8,3,147],"868":[1,8,8,223],"869":[1,8,16,348],"870":[7,8,3,213],"871":[1,8,5,173],"872":[2,8,2,173],"873":[5,8,3,201],"874":[1,8,null,85],"875":[5,8,6,203],"876":[5,8,3,239],"877":[5,8,7,176],"878":[null,8,null,8],"879":[1,8,12,89],"880":[1,8,8,154],"881":[1,8,17,938],"882":[1,8,1,205],"883":[2,8,13,261],"884":[5,8,13,137],"885":[1,8,2,76],"886":[null,10,null,10],"887":[1,10,null,21],"888":[1,10,4,137],"889":[1,10,15,353],"890":[1,10,4,201],"891":[2,10,16,281],"892":[5,10,11,128],"893":[1,10,1,67],"894":[null,7,null,7],"895":[1,7,null,27],"896":[1,7,3,196],"897":[1,7,20,552],"898":[1,7,1,156],"899":[2,7,12,184],"900":[5,7,4,136],"901":[1,7,5,88],"902":[null,10,null,10],"903":[1,10,1,133],"904":[1,10,4,168],"905":[1,10,19,1139],"906":[1,10,8,406],"907":[2,10,12,450],"908":[5,10,7,124],"909":[5,10,13,173],"910":[1,10,7,189],"911":[null,10,null,10],"912":[1,10,7,115],"913":[1,10,11,254],"914":[1,10,21,551],"915":[1,10,4,177],"916":[2,10,17,263],"917":[5,10,13,144],"918":[1,10,1,113],"919":[null,16,null,16],"920":[1,16,4,156],"921":[1,16,5,194],"922":[1,16,13,394],"923":[1,16,12,198],"924":[2,16,12,238],"925":[1,16,8,74],"926":[11,16,13,705],"927":[5,16,7,143],"928":[null,13,null,13],"929":[1,13,5,75],"930":[1,13,9,170],"931":[1,13,14,282],"932":[1,13,3,175],"933":[2,13,6,162],"934":[5,13,2,49],"935":[1,13,1,76],"936":[null,10,2,10],"937":[1,10,null,58],"938":[1,10,12,146],"939":[1,10,17,225],"940":[1,10,null,134],"941":[2,10,4,147],"942":[1,10,6,74],"943":[null,6,null,6],"944":[1,6,2,59],"945":[1,6,2,166],"946":[1,6,16,445],"947":[1,6,null,156],"948":[2,6,4,209],"949":[5,6,9,66],"950":[1,6,1,91],"951":[null,10,null,10],"952":[1,10,3,57],"953":[1,10,7,189],"954":[1,10,17,490],"955":[1,10,6,180],"956":[2,10,5,197],"957":[1,10,6,83],"958":[5,10,2,100],"959":[5,10,9,125],"960":[5,10,17,201],"961":[null,14,null,14],"962":[1,14,2,63],"963":[1,14,15,293],"964":[1,14,15,501],"965":[1,14,8,184],"966":[2,14,16,267],"967":[5,14,8,102],"968":[1,14,8,95],"969":[null,11,null,11],"970":[1,11,null,21],"971":[1,11,5,240],"972":[1,11,13,420],"973":[1,11,4,236],"974":[2,11,8,241],"975":[5,11,9,136],"976":[1,11,1,97],"977":[null,11,null,11],"978":[1,11,null,9],"979":[1,11,16,215],"980":[1,11,18,553],"981":[1,11,11,188],"982":[2,11,14,297],"983":[5,11,16,135],"984":[1,11,11,88],"985":[null,8,null,8],"986":[1,8,4,88],"987":[1,8,12,184],"988":[1,8,13,626],"989":[1,8,2,169],"990":[2,8,3,215],"991":[5,8,16,147],"992":[1,8,2,97],"993":[null,8,null,8],"994":[1,8,1,94],"995":[1,8,10,211],"996":[1,8,13,606],"997":[1,8,5,159],"998":[2,8,7,270],"999":[5,8,11,157],"1000":[1,8,1,78],"1001":[null,10,null,10],"1002":[1,10,null,13],"1003":[1,10,4,163],"1004":[1,10,21,506],"1005":[1,10,1,150],"1006":[2,10,8,282],"1007":[5,10,null,96],"1008":[1,10,1,67],"1009":[null,9,null,9],"1010":[1,9,null,57],"1011":[1,9,null,188],"1012":[1,9,3,393],"1013":[1,9,null,113],"1014":[2,9,null,149],"1015":[null,6,null,6],"1016":[1,6,12,203],"1017":[1,6,5,309],"1018":[1,6,17,1026],"1019":[1,6,2,359],"1020":[2,6,5,408],"1021":[5,6,10,162],"1022":[1,6,2,104],"1023":[null,11,null,11],"1024":[1,11,1,75],"1025":[1,11,5,144],"1026":[1,11,18,457],"1027":[1,11,null,159],"1028":[2,11,5,208],"1029":[5,11,9,115],"1030":[1,11,3,80],"1031":[null,8,null,8],"1032":[1,8,1,40],"1033":[1,8,13,256],"1034":[1,8,19,556],"1035":[1,8,16,174],"1036":[2,8,17,198],"1037":[5,8,7,153],"1038":[1,8,4,61],"1039":[null,13,null,13],"1040":[1,13,1,66],"1041":[1,13,6,197],"1042":[1,13,14,491],"1043":[1,13,5,262],"1044":[2,13,10,257],"1045":[5,13,11,134],"1046":[1,13,null,51],"1047":[null,14,null,14],"1048":[1,14,5,95],"1049":[1,14,13,259],"1050":[1,14,17,658],"1051":[1,14,14,319],"1052":[2,14,16,329],"1053":[1,14,2,100],"1054":[5,14,10,180],"1055":[5,14,14,189],"1056":[null,13,null,13],"1057":[1,13,6,68],"1058":[1,13,14,249],"1059":[1,13,16,703],"1060":[1,13,7,185],"1061":[2,13,12,202],"1062":[5,13,13,110],"1063":[1,13,1,49],"1064":[null,9,null,9],"1065":[1,9,null,68],"1066":[1,9,19,306],"1067":[1,9,22,596],"1068":[1,9,8,205],"1069":[2,9,21,285],"1070":[5,9,5,108],"1071":[1,9,null,41],"1072":[null,13,null,13],"1073":[1,13,2,106],"1074":[1,13,22,411],"1075":[1,13,16,354],"1076":[1,13,3,153],"1077":[2,13,7,147],"1078":[5,13,11,122],"1079":[1,13,null,113],"1080":[null,13,null,13],"1081":[1,13,null,69],"1082":[1,13,8,255],"1083":[1,13,17,264],"1084":[1,13,1,141],"1085":[2,13,4,231],"1086":[5,13,3,104],"1087":[1,13,null,55],"1088":[null,10,null,10],"1089":[1,10,19,278],"1090":[1,10,10,309],"1091":[1,10,20,839],"1092":[1,10,5,288],"1093":[2,10,11,405],"1094":[1,10,12,182],"1095":[5,10,9,153],"1096":[1,10,3,92],"1097":[null,13,null,13],"1098":[1,13,null,8],"1099":[1,13,16,205],"1100":[1,13,15,439],"1101":[1,13,3,147],"1102":[2,13,4,162],"1103":[5,13,10,108],"1104":[1,13,null,69],"1105":[null,11,null,11],"1106":[1,11,null,5],"1107":[1,11,3,127],"1108":[1,11,16,292],"1109":[1,11,1,108],"1110":[2,11,2,83],"1111":[5,11,2,64],"1112":[1,11,null,59],"1113":[null,6,null,6],"1114":[1,6,1,63],"1115":[1,6,8,208],"1116":[1,6,20,772],"1117":[1,6,4,283],"1118":[2,6,3,236],"1119":[5,6,5,175],"1120":[1,6,null,65],"1121":[null,12,null,12],"1122":[1,12,1,68],"1123":[1,12,3,192],"1124":[1,12,18,595],"1125":[1,12,6,233],"1126":[2,12,1,241],"1127":[10,12,1,105],"1128":[9,12,9,129],"1129":[1,12,null,78],"1130":[null,10,null,10],"1131":[1,10,null,5],"1132":[1,10,12,202],"1133":[1,10,16,380],"1134":[1,10,1,191],"1135":[2,10,9,215],"1136":[5,10,5,73],"1137":[1,10,null,78],"1138":[null,7,null,7],"1139":[1,7,null,56],"1140":[1,7,12,223],"1141":[1,7,null,71],"1142":[1,7,1,148],"1143":[2,7,null,80],"1144":[2,7,null,117],"1145":[3,7,null,92],"1146":[5,7,1,36],"1147":[1,7,null,82],"1148":[null,8,null,8],"1149":[1,8,null,59],"1150":[1,8,8,268],"1151":[1,8,null,38],"1152":[1,8,null,115],"1153":[2,8,null,80],"1154":[2,8,2,133],"1155":[3,8,null,98],"1156":[5,8,3,75],"1157":[1,8,null,65],"1158":[null,15,null,15],"1159":[1,15,null,5],"1160":[1,15,6,158],"1161":[1,15,21,326],"1162":[1,15,5,165],"1163":[2,15,8,145],"1164":[1,15,null,40],"1165":[null,6,null,6],"1166":[1,6,null,5],"1167":[1,6,2,105],"1168":[1,6,14,453],"1169":[1,6,3,150],"1170":[2,6,5,156],"1171":[1,6,1,61],"1172":[null,15,null,15],"1173":[1,15,null,47],"1174":[1,15,7,160],"1175":[1,15,18,464],"1176":[1,15,7,185],"1177":[2,15,5,147],"1178":[2,15,6,164],"1179":[1,15,8,72],"1180":[1,15,2,54],"1181":[null,18,null,18],"1182":[1,18,1,84],"1183":[1,18,8,161],"1184":[1,18,15,556],"1185":[1,18,4,203],"1186":[2,18,4,191],"1187":[2,18,2,177],"1188":[1,18,9,103],"1189":[1,18,null,53],"1190":[null,6,4,139],"1191":[7,6,6,264],"1192":[1,6,14,780],"1193":[7,6,4,169],"1194":[3,6,4,121],"1195":[5,6,2,48],"1196":[null,5,7,171],"1197":[2,5,null,42],"1198":[6,5,null,145],"1199":[6,5,12,5067],"1200":[null,5,4,149],"1201":[9,5,15,205],"1202":[4,5,null,590],"1203":[2,5,20,3087],"1204":[null,4,2,50],"1205":[3,4,null,15],"1206":[6,4,null,108],"1207":[2,4,27,5872],"1208":[3,4,12,247],"1209":[8,4,null,128],"1210":[null,9,null,62],"1211":[4,9,14,216],"1212":[7,9,13,2598],"1213":[9,9,22,482],"1214":[7,9,22,331],"1215":[5,9,12,111],"1216":[7,9,2,269],"1217":[null,4,14,197],"1218":[8,4,3,130],"1219":[5,4,13,176],"1220":[5,4,14,279],"1221":[7,4,9,142],"1222":[6,4,16,187],"1223":[6,4,12,206],"1224":[7,4,12,123],"1225":[12,4,16,209],"1226":[8,4,6,124],"1227":[6,4,12,186],"1228":[10,4,13,294],"1229":[3,4,24,1938],"1230":[null,9,14,245],"1231":[7,9,13,484],"1232":[7,9,14,283],"1233":[7,9,14,363],"1234":[6,9,12,440],"1235":[9,9,14,270],"1236":[8,9,16,377],"1237":[4,9,24,3028],"1238":[null,8,12,234],"1239":[6,8,17,465],"1240":[7,8,12,288],"1241":[7,8,16,689],"1242":[6,8,16,452],"1243":[8,8,14,436],"1244":[6,8,13,484],"1245":[6,8,13,170],"1246":[9,8,12,221],"1247":[10,8,26,3371],"1248":[null,8,null,165],"1249":[5,8,13,360],"1250":[9,8,5,123],"1251":[8,8,12,226],"1252":[13,8,12,364],"1253":[7,8,12,296],"1254":[8,8,12,290],"1255":[6,8,10,222],"1256":[9,8,18,487],"1257":[10,8,12,319],"1258":[8,8,13,321],"1259":[7,8,25,3330],"1260":[null,7,12,312],"1261":[6,7,12,164],"1262":[11,7,14,394],"1263":[9,7,15,744],"1264":[11,7,18,401],"1265":[12,7,12,599],"1266":[7,7,13,215],"1267":[7,7,14,370],"1268":[3,7,18,212],"1269":[8,7,13,526],"1270":[8,7,24,3956],"1271":[null,2,24,1849],"1272":[null,4,12,195],"1273":[9,4,18,584],"1274":[5,4,13,470],"1275":[6,4,14,605],"1276":[8,4,12,520],"1277":[6,4,12,358],"1278":[7,4,15,733],"1279":[6,4,12,394],"1280":[6,4,13,391],"1281":[8,4,14,486],"1282":[5,4,12,306],"1283":[10,4,12,336],"1284":[8,4,12,405],"1285":[6,4,13,324],"1286":[4,4,22,7012],"1287":[null,3,15,335],"1288":[7,3,12,377],"1289":[4,3,13,514],"1290":[6,3,12,555],"1291":[8,3,12,231],"1292":[5,3,13,284],"1293":[10,3,14,398],"1294":[8,3,14,402],"1295":[9,3,14,237],"1296":[4,3,13,228],"1297":[4,3,12,591],"1298":[5,3,12,315],"1299":[6,3,13,144],"1300":[5,3,29,5991],"1301":[null,2,25,2164],"1302":[null,9,13,331],"1303":[10,9,14,209],"1304":[6,9,16,508],"1305":[13,9,13,224],"1306":[3,9,14,280],"1307":[8,9,17,471],"1308":[10,9,13,281],"1309":[4,9,25,3270],"1310":[null,9,23,1316],"1311":[null,8,28,5805],"1312":[null,5,19,1800],"1313":[null,5,12,336],"1314":[8,5,12,178],"1315":[5,5,15,432],"1316":[10,5,12,607],"1317":[9,5,14,497],"1318":[9,5,14,579],"1319":[2,5,12,124],"1320":[5,5,12,703],"1321":[4,5,12,120],"1322":[10,5,14,472],"1323":[7,5,25,5426],"1324":[null,10,35,7561],"1325":[null,5,11,225],"1326":[6,5,24,572],"1327":[11,5,14,255],"1328":[11,5,19,524],"1329":[5,5,16,173],"1330":[7,5,14,266],"1331":[9,5,16,209],"1332":[8,5,15,588],"1333":[7,5,23,645],"1334":[6,5,14,394],"1335":[9,5,13,229],"1336":[11,5,15,468],"1337":[9,5,21,555],"1338":[11,5,12,537],"1339":[6,5,32,5033],"1340":[null,7,15,251],"1341":[5,7,16,205],"1342":[6,7,13,636],"1343":[5,7,17,483],"1344":[6,7,17,470],"1345":[6,7,12,230],"1346":[8,7,12,238],"1347":[8,7,14,634],"1348":[6,7,15,382],"1349":[9,7,14,395],"1350":[6,7,22,4712],"1351":[null,6,5,205],"1352":[8,6,14,751],"1353":[8,6,19,634],"1354":[8,6,14,349],"1355":[7,6,15,556],"1356":[9,6,14,238],"1357":[10,6,14,457],"1358":[6,6,12,458],"1359":[7,6,26,7039],"1360":[null,5,9,142],"1361":[10,5,13,140],"1362":[11,5,15,484],"1363":[10,5,15,197],"1364":[12,5,12,301],"1365":[3,5,14,192],"1366":[8,5,18,628],"1367":[14,5,12,232],"1368":[9,5,12,293],"1369":[6,5,30,2856],"1370":[null,8,15,160],"1371":[7,8,12,295],"1372":[9,8,15,357],"1373":[8,8,14,440],"1374":[7,8,12,214],"1375":[12,8,13,445],"1376":[7,8,13,278],"1377":[10,8,13,251],"1378":[9,8,16,386],"1379":[10,8,18,524],"1380":[7,8,21,3438],"1381":[null,4,10,194],"1382":[10,4,12,286],"1383":[7,4,12,380],"1384":[10,4,17,402],"1385":[7,4,12,275],"1386":[9,4,14,151],"1387":[13,4,12,262],"1388":[7,4,12,241],"1389":[9,4,14,539],"1390":[7,4,12,326],"1391":[9,4,13,477],"1392":[9,4,12,314],"1393":[3,4,12,260],"1394":[5,4,12,180],"1395":[7,4,26,5766],"1396":[null,7,23,6280],"1397":[null,12,5,208],"1398":[6,12,13,393],"1399":[10,12,16,489],"1400":[10,12,15,353],"1401":[8,12,12,489],"1402":[10,12,28,3772],"1403":[null,10,12,258],"1404":[4,10,15,255],"1405":[12,10,12,453],"1406":[8,10,16,699],"1407":[8,10,13,243],"1408":[7,10,14,285],"1409":[7,10,12,408],"1410":[6,10,13,485],"1411":[5,10,15,326],"1412":[6,10,12,261],"1413":[8,10,15,383],"1414":[3,10,16,411],"1415":[5,10,29,4992],"1416":[null,9,26,2414],"1417":[null,12,22,4142],"1418":[null,4,14,255],"1419":[6,4,13,207],"1420":[11,4,12,202],"1421":[7,4,12,365],"1422":[10,4,16,358],"1423":[11,4,12,369],"1424":[8,4,13,296],"1425":[8,4,24,366],"1426":[6,4,15,181],"1427":[8,4,27,2039],"1428":[null,4,15,384],"1429":[10,4,14,555],"1430":[7,4,19,551],"1431":[8,4,13,1023],"1432":[6,4,12,505],"1433":[12,4,12,749],"1434":[3,4,16,231],"1435":[9,4,17,563],"1436":[5,4,31,9519],"1437":[4,4,21,564],"1438":[4,4,20,3654],"1439":[null,4,7,124],"1440":[5,4,2,234],"1441":[6,4,24,1310],"1442":[12,4,22,726],"1443":[8,4,21,1339],"1444":[8,4,16,538],"1445":[3,4,24,657],"1446":[4,4,20,519],"1447":[5,4,23,991],"1448":[3,4,3,102],"1449":[5,4,18,495],"1450":[6,4,12,350],"1451":[4,4,11,199],"1452":[null,4,3,175],"1453":[4,4,24,966],"1454":[4,4,21,776],"1455":[4,4,34,2297],"1456":[4,4,26,871],"1457":[5,4,15,329],"1458":[5,4,26,388],"1459":[9,4,26,680],"1460":[3,4,21,601],"1461":[6,4,13,403],"1462":[null,6,4,153],"1463":[5,6,13,279],"1464":[6,6,16,154],"1465":[7,6,22,774],"1466":[8,6,19,312],"1467":[7,6,31,3542],"1468":[3,6,17,100],"1469":[4,6,16,315],"1470":[4,6,24,283],"1471":[null,3,7,203],"1472":[7,3,28,485],"1473":[11,3,14,415],"1474":[6,3,16,889],"1475":[9,3,26,824],"1476":[8,3,20,806],"1477":[8,3,20,352],"1478":[10,3,14,410],"1479":[6,3,8,251],"1480":[8,3,12,297],"1481":[6,3,22,466],"1482":[6,3,6,263],"1483":[3,3,4,194],"1484":[4,3,13,226],"1485":[null,4,1,152],"1486":[7,4,20,647],"1487":[4,4,22,819],"1488":[5,4,19,1811],"1489":[6,4,22,1451],"1490":[5,4,21,1031],"1491":[3,4,18,435],"1492":[9,4,23,1397],"1493":[8,4,null,179],"1494":[2,4,6,128],"1495":[null,4,4,48],"1496":[3,4,22,4093],"1497":[9,4,17,224],"1498":[4,4,13,279],"1499":[4,4,4,207],"1500":[7,4,16,343],"1501":[6,4,2,24],"1502":[null,4,null,56],"1503":[9,4,14,143],"1504":[7,4,11,104],"1505":[8,4,null,60],"1506":[9,4,1,42],"1507":[10,4,6,109],"1508":[13,4,10,142],"1509":[12,4,13,113],"1510":[13,4,11,86],"1511":[4,4,null,40],"1512":[12,4,7,96],"1513":[9,4,9,119],"1514":[8,4,null,53],"1515":[6,4,2,59],"1516":[6,4,1,24],"1517":[9,4,4,141],"1518":[null,2,null,38],"1519":[2,2,null,48],"1520":[3,2,null,13],"1521":[4,2,null,69],"1522":[null,4,3,69],"1523":[3,4,4,165],"1524":[3,4,13,431],"1525":[3,4,17,410],"1526":[1,4,24,2766],"1527":[2,4,4,151],"1528":[3,4,null,53],"1529":[null,5,6,101],"1530":[5,5,null,182],"1531":[2,5,17,804],"1532":[2,5,11,400],"1533":[2,5,1,99],"1534":[3,5,18,991],"1535":[1,5,18,724],"1536":[null,3,null,154],"1537":[5,3,null,260],"1538":[3,3,3,107],"1539":[3,3,null,116],"1540":[3,3,3,109],"1541":[4,3,4,145],"1542":[4,3,null,104],"1543":[5,3,null,114],"1544":[3,3,null,165],"1545":[3,3,1,202],"1546":[4,3,null,131],"1547":[4,3,null,222],"1548":[2,3,null,176],"1549":[3,3,2,112],"1550":[3,3,2,107],"1551":[4,3,null,122],"1552":[5,3,3,106],"1553":[5,3,null,229],"1554":[3,3,null,204],"1555":[5,3,4,142],"1556":[5,3,2,143],"1557":[6,3,null,126],"1558":[4,3,2,139],"1559":[6,3,null,104],"1560":[5,3,2,123],"1561":[5,3,null,126],"1562":[5,3,null,111],"1563":[4,3,2,117],"1564":[3,3,null,90],"1565":[5,3,null,148],"1566":[5,3,null,166],"1567":[5,3,null,130],"1568":[4,3,null,143],"1569":[5,3,null,140],"1570":[5,3,3,187],"1571":[4,3,2,183],"1572":[4,3,null,282],"1573":[null,4,4,72],"1574":[3,4,2,167],"1575":[3,4,12,372],"1576":[3,4,17,419],"1577":[1,4,20,2968],"1578":[2,4,3,177],"1579":[3,4,null,53],"1580":[null,5,null,76],"1581":[5,5,null,182],"1582":[2,5,15,769],"1583":[2,5,14,375],"1584":[2,5,null,132],"1585":[3,5,17,685],"1586":[1,5,14,722],"1587":[null,4,3,62],"1588":[3,4,4,163],"1589":[3,4,15,329],"1590":[3,4,2,188],"1591":[1,4,20,2212],"1592":[2,4,null,144],"1593":[3,4,null,29],"1594":[null,5,10,106],"1595":[5,5,4,205],"1596":[2,5,18,874],"1597":[2,5,17,445],"1598":[2,5,3,129],"1599":[3,5,20,533],"1600":[1,5,16,920],"1601":[null,2,null,42],"1602":[4,2,3,123],"1603":[5,2,null,12],"1604":[4,2,null,24],"1605":[null,8,6,120],"1606":[1,8,6,60],"1607":[6,8,10,147],"1608":[11,8,null,93],"1609":[2,8,null,32],"1610":[3,8,null,37],"1611":[null,8,18,430],"1612":[4,8,7,81],"1613":[9,8,14,77],"1614":[1,8,7,70],"1615":[2,8,15,57],"1616":[1,8,2,36],"1617":[6,8,13,94],"1618":[2,8,1,63],"1619":[2,8,14,65],"1620":[null,2,null,35],"1621":[1,2,8,108],"1622":[3,2,null,17],"1623":[5,2,null,19],"1624":[2,2,null,23],"1625":[2,2,1,59],"1626":[6,2,12,233],"1627":[2,2,17,538],"1628":[null,6,null,12],"1629":[3,6,null,255],"1630":[3,6,16,937],"1631":[3,6,17,1411],"1632":[5,6,14,975],"1633":[4,6,13,147],"1634":[4,6,13,204],"1635":[4,6,15,436],"1636":[6,6,12,175],"1637":[2,6,11,323],"1638":[3,6,14,756],"1639":[4,6,16,1103],"1640":[4,6,14,866],"1641":[4,6,16,1192],"1642":[null,4,3,63],"1643":[9,4,13,160],"1644":[4,4,6,119],"1645":[4,4,7,106],"1646":[null,6,7,213],"1647":[4,6,6,114],"1648":[5,6,17,209],"1649":[8,6,20,220],"1650":[7,6,12,192],"1651":[12,6,14,683],"1652":[6,6,13,179],"1653":[9,6,21,693],"1654":[8,6,15,412],"1655":[6,6,14,102],"1656":[12,6,18,352],"1657":[2,6,14,120],"1658":[4,6,6,132],"1659":[null,4,null,106],"1660":[2,4,14,318],"1661":[4,4,12,334],"1662":[2,4,16,516],"1663":[4,4,12,316],"1664":[3,4,12,487],"1665":[3,4,15,358],"1666":[3,4,12,517],"1667":[4,4,13,465],"1668":[4,4,12,447],"1669":[6,4,12,459],"1670":[4,4,12,489],"1671":[4,4,13,560],"1672":[3,4,13,219],"1673":[5,4,8,406],"1674":[2,4,7,178],"1675":[3,4,11,319],"1676":[null,6,null,73],"1677":[6,6,17,373],"1678":[7,6,null,133],"1679":[9,6,null,88],"1680":[9,6,null,33],"1681":[null,10,4,141],"1682":[3,10,11,105],"1683":[7,10,6,167],"1684":[5,10,19,371],"1685":[7,10,19,647],"1686":[9,10,18,798],"1687":[7,10,21,203],"1688":[4,10,5,70],"1689":[9,10,13,232],"1690":[2,10,8,85],"1691":[4,10,null,51],"1692":[null,9,1,183],"1693":[3,9,12,137],"1694":[5,9,null,21],"1695":[4,9,5,110],"1696":[8,9,1,71],"1697":[5,9,17,160],"1698":[3,9,12,168],"1699":[5,9,13,162],"1700":[4,9,14,192],"1701":[4,9,15,314],"1702":[5,9,18,296],"1703":[2,9,7,109],"1704":[2,9,12,107],"1705":[4,9,1,128],"1706":[null,6,null,118],"1707":[9,6,13,312],"1708":[9,6,5,251],"1709":[9,6,1,121],"1710":[5,6,null,85],"1711":[null,8,3,52],"1712":[1,8,5,79],"1713":[2,8,null,48],"1714":[2,8,null,85],"1715":[2,8,7,50],"1716":[2,8,1,92],"1717":[null,8,3,107],"1718":[4,8,6,160],"1719":[4,8,14,269],"1720":[4,8,8,256],"1721":[4,8,4,157],"1722":[4,8,14,138],"1723":[7,8,7,129],"1724":[5,8,4,205],"1725":[4,8,null,66],"1726":[null,5,6,162],"1727":[2,5,18,731],"1728":[2,5,20,353],"1729":[4,5,13,349],"1730":[4,5,13,189],"1731":[5,5,10,192],"1732":[null,4,6,118],"1733":[2,4,7,66],"1734":[4,4,1,81],"1735":[5,4,10,140],"1736":[2,4,null,59],"1737":[1,4,1,80],"1738":[2,4,4,45],"1739":[null,8,4,126],"1740":[1,8,6,63],"1741":[6,8,14,175],"1742":[11,8,null,164],"1743":[2,8,null,32],"1744":[3,8,null,37],"1745":[null,4,null,10],"1746":[3,4,8,195],"1747":[4,4,15,272],"1748":[4,4,15,549],"1749":[4,4,16,654],"1750":[3,4,6,350],"1751":[4,4,16,168],"1752":[3,4,6,67],"1753":[7,4,10,98],"1754":[5,4,3,50],"1755":[6,4,12,235],"1756":[null,2,2,43],"1757":[1,2,8,99],"1758":[3,2,4,86],"1759":[5,2,5,116],"1760":[2,2,12,160],"1761":[2,2,18,263],"1762":[null,4,null,10],"1763":[3,4,null,148],"1764":[4,4,11,574],"1765":[3,4,21,1079],"1766":[5,4,6,78],"1767":[3,4,15,571],"1768":[3,4,null,236],"1769":[6,4,19,424],"1770":[3,4,18,210],"1771":[3,4,13,168],"1772":[4,4,7,129],"1773":[3,4,11,268],"1774":[4,4,12,140],"1775":[2,4,10,134],"1776":[6,4,13,340],"1777":[7,4,1,105],"1778":[null,5,null,45],"1779":[5,5,null,487],"1780":[null,17,null,124],"1781":[3,17,15,240],"1782":[7,17,6,142],"1783":[7,17,3,143],"1784":[10,17,null,238],"1785":[8,17,null,82],"1786":[5,17,2,80],"1787":[7,17,7,87],"1788":[null,7,null,128],"1789":[3,7,null,119],"1790":[11,7,15,365],"1791":[7,7,null,32],"1792":[3,7,3,163],"1793":[5,7,9,205],"1794":[null,14,null,135],"1795":[6,14,null,89],"1796":[6,14,null,200],"1797":[12,14,null,160],"1798":[5,14,null,56],"1799":[9,14,null,235],"1800":[7,14,null,199],"1801":[3,14,2,169],"1802":[5,14,null,220],"1803":[null,11,5,129],"1804":[8,11,3,137],"1805":[9,11,16,537],"1806":[3,11,12,213],"1807":[5,11,14,219],"1808":[null,13,4,128],"1809":[3,13,5,98],"1810":[10,13,19,695],"1811":[3,13,6,163],"1812":[5,13,15,211],"1813":[null,8,4,120],"1814":[3,8,3,121],"1815":[9,8,16,689],"1816":[3,8,1,161],"1817":[5,8,15,304],"1818":[null,12,null,111],"1819":[3,12,null,96],"1820":[6,12,4,105],"1821":[10,12,16,362],"1822":[4,12,6,134],"1823":[11,12,7,167],"1824":[7,12,7,153],"1825":[9,12,7,350],"1826":[3,12,3,219],"1827":[5,12,13,218],"1828":[null,10,10,155],"1829":[6,10,15,229],"1830":[7,10,12,201],"1831":[13,10,13,180],"1832":[8,10,1,165],"1833":[3,10,13,190],"1834":[5,10,16,202],"1835":[null,11,null,111],"1836":[3,11,null,71],"1837":[8,11,1,99],"1838":[9,11,8,132],"1839":[9,11,13,272],"1840":[6,11,14,348],"1841":[4,11,9,237],"1842":[10,11,12,268],"1843":[7,11,15,248],"1844":[7,11,13,202],"1845":[3,11,12,248],"1846":[5,11,8,163],"1847":[null,9,1,114],"1848":[3,9,3,112],"1849":[9,9,12,332],"1850":[6,9,3,44],"1851":[8,9,13,410],"1852":[3,9,6,209],"1853":[5,9,11,241],"1854":[null,11,3,176],"1855":[4,11,null,91],"1856":[7,11,14,319],"1857":[6,11,13,155],"1858":[7,11,3,154],"1859":[6,11,16,188],"1860":[4,11,7,159],"1861":[3,11,9,218],"1862":[5,11,12,239],"1863":[null,12,2,137],"1864":[3,12,2,128],"1865":[10,12,16,243],"1866":[5,12,3,118],"1867":[3,12,7,133],"1868":[5,12,9,219],"1869":[null,13,5,151],"1870":[8,13,null,111],"1871":[14,13,13,200],"1872":[8,13,12,142],"1873":[8,13,6,112],"1874":[10,13,13,260],"1875":[7,13,12,183],"1876":[3,13,14,297],"1877":[5,13,14,268],"1878":[null,8,2,98],"1879":[9,8,1,100],"1880":[6,8,11,84],"1881":[7,8,12,273],"1882":[7,8,13,191],"1883":[9,8,12,201],"1884":[7,8,6,145],"1885":[3,8,4,151],"1886":[5,8,9,215],"1887":[null,8,2,132],"1888":[3,8,3,135],"1889":[13,8,8,282],"1890":[5,8,null,92],"1891":[3,8,8,226],"1892":[5,8,7,217],"1893":[null,9,null,117],"1894":[3,9,null,121],"1895":[11,9,15,159],"1896":[6,9,13,232],"1897":[9,9,8,153],"1898":[3,9,14,439],"1899":[5,9,8,271],"1900":[null,10,1,134],"1901":[3,10,null,88],"1902":[12,10,13,364],"1903":[9,10,2,179],"1904":[3,10,3,192],"1905":[5,10,9,250],"1906":[null,9,2,132],"1907":[3,9,1,91],"1908":[5,9,12,312],"1909":[6,9,13,395],"1910":[13,9,13,254],"1911":[3,9,6,290],"1912":[5,9,10,290],"1913":[null,12,1,116],"1914":[8,12,null,82],"1915":[3,12,16,258],"1916":[4,12,17,349],"1917":[8,12,5,134],"1918":[9,12,7,197],"1919":[7,12,18,184],"1920":[7,12,14,350],"1921":[6,12,4,132],"1922":[9,12,20,513],"1923":[3,12,13,546],"1924":[5,12,13,279],"1925":[null,9,2,121],"1926":[3,9,4,99],"1927":[10,9,13,351],"1928":[6,9,4,106],"1929":[3,9,9,282],"1930":[5,9,14,233],"1931":[null,14,3,109],"1932":[6,14,12,164],"1933":[6,14,14,438],"1934":[11,14,7,225],"1935":[11,14,15,202],"1936":[9,14,12,172],"1937":[12,14,12,164],"1938":[11,14,13,123],"1939":[6,14,9,79],"1940":[3,14,5,283],"1941":[5,14,14,291],"1942":[null,11,null,188],"1943":[6,11,2,102],"1944":[8,11,12,293],"1945":[9,11,12,198],"1946":[7,11,15,286],"1947":[10,11,9,250],"1948":[7,11,7,375],"1949":[3,11,5,207],"1950":[5,11,7,368],"1951":[null,12,8,195],"1952":[6,12,4,182],"1953":[4,12,14,197],"1954":[7,12,6,161],"1955":[10,12,4,193],"1956":[10,12,5,158],"1957":[3,12,5,98],"1958":[3,12,2,188],"1959":[5,12,11,237],"1960":[null,7,9,164],"1961":[3,7,null,126],"1962":[14,7,19,268],"1963":[3,7,12,184],"1964":[3,7,7,207],"1965":[5,7,14,259],"1966":[null,10,3,160],"1967":[3,10,1,108],"1968":[10,10,19,329],"1969":[8,10,5,125],"1970":[9,10,3,237],"1971":[3,10,2,229],"1972":[5,10,12,305],"1973":[null,14,1,214],"1974":[3,14,1,137],"1975":[10,14,17,301],"1976":[7,14,11,175],"1977":[6,14,14,319],"1978":[3,14,15,264],"1979":[5,14,13,304],"1980":[null,13,1,164],"1981":[3,13,null,117],"1982":[12,13,18,612],"1983":[10,13,11,138],"1984":[3,13,7,284],"1985":[5,13,7,276],"1986":[null,11,7,151],"1987":[3,11,1,147],"1988":[11,11,16,450],"1989":[10,11,12,185],"1990":[7,11,13,202],"1991":[3,11,8,171],"1992":[5,11,14,302],"1993":[null,11,3,137],"1994":[3,11,null,129],"1995":[8,11,16,480],"1996":[5,11,15,511],"1997":[3,11,11,246],"1998":[5,11,14,308],"1999":[null,10,null,201],"2000":[3,10,null,173],"2001":[16,10,17,857],"2002":[3,10,12,517],"2003":[5,10,10,410],"2004":[null,9,2,146],"2005":[1,9,11,156],"2006":[9,9,null,121],"2007":[6,9,14,248],"2008":[9,9,6,181],"2009":[9,9,16,225],"2010":[10,9,13,147],"2011":[10,9,20,411],"2012":[9,9,12,167],"2013":[8,9,14,303],"2014":[5,9,15,242],"2015":[5,9,14,238],"2016":[null,7,null,112],"2017":[5,7,7,135],"2018":[6,7,9,97],"2019":[6,7,15,128],"2020":[7,7,13,175],"2021":[11,7,10,115],"2022":[9,7,3,85],"2023":[12,7,12,121],"2024":[7,7,null,78],"2025":[8,7,17,436],"2026":[12,7,15,252],"2027":[6,7,5,79],"2028":[3,7,1,181],"2029":[5,7,15,267],"2030":[null,15,null,167],"2031":[10,15,15,298],"2032":[5,15,12,131],"2033":[11,15,17,297],"2034":[8,15,1,219],"2035":[8,15,15,356],"2036":[7,15,5,115],"2037":[9,15,9,199],"2038":[3,15,4,254],"2039":[5,15,12,280],"2040":[null,12,1,110],"2041":[6,12,1,120],"2042":[6,12,5,187],"2043":[4,12,17,246],"2044":[5,12,16,568],"2045":[11,12,17,349],"2046":[10,12,8,203],"2047":[11,12,15,310],"2048":[8,12,5,346],"2049":[3,12,5,254],"2050":[5,12,12,264],"2051":[null,14,2,141],"2052":[7,14,null,99],"2053":[6,14,5,102],"2054":[9,14,4,156],"2055":[6,14,null,72],"2056":[10,14,15,535],"2057":[9,14,15,310],"2058":[6,14,16,298],"2059":[9,14,2,127],"2060":[3,14,6,224],"2061":[5,14,10,266],"2062":[null,11,6,173],"2063":[10,11,null,130],"2064":[11,11,15,343],"2065":[9,11,13,206],"2066":[10,11,12,199],"2067":[6,11,1,119],"2068":[9,11,14,309],"2069":[11,11,7,262],"2070":[3,11,5,144],"2071":[5,11,3,271],"2072":[null,17,4,209],"2073":[10,17,4,93],"2074":[6,17,12,218],"2075":[8,17,5,207],"2076":[10,17,13,247],"2077":[10,17,13,335],"2078":[8,17,12,173],"2079":[11,17,16,209],"2080":[9,17,10,172],"2081":[3,17,13,339],"2082":[5,17,14,258],"2083":[null,15,null,196],"2084":[3,15,1,137],"2085":[8,15,19,480],"2086":[5,15,1,46],"2087":[3,15,16,375],"2088":[5,15,17,299],"2089":[null,13,8,203],"2090":[1,13,7,88],"2091":[5,13,14,246],"2092":[12,13,12,124],"2093":[8,13,5,109],"2094":[8,13,13,90],"2095":[6,13,3,74],"2096":[4,13,12,109],"2097":[8,13,10,174],"2098":[10,13,14,208],"2099":[6,13,17,300],"2100":[5,13,13,308],"2101":[null,6,4,168],"2102":[6,6,13,199],"2103":[1,6,10,172],"2104":[10,6,1,44],"2105":[9,6,9,80],"2106":[10,6,11,178],"2107":[9,6,8,137],"2108":[10,6,1,121],"2109":[5,6,7,254],"2110":[5,6,10,183],"2111":[null,11,null,122],"2112":[3,11,12,185],"2113":[4,11,16,227],"2114":[5,11,5,163],"2115":[8,11,6,190],"2116":[3,11,1,196],"2117":[4,11,6,156],"2118":[null,13,9,194],"2119":[10,13,12,178],"2120":[8,13,12,239],"2121":[8,13,14,173],"2122":[10,13,9,121],"2123":[7,13,15,217],"2124":[3,13,10,199],"2125":[5,13,11,247],"2126":[null,10,1,153],"2127":[3,10,null,117],"2128":[13,10,14,558],"2129":[3,10,13,346],"2130":[5,10,12,288],"2131":[null,7,2,154],"2132":[3,7,1,138],"2133":[8,7,16,406],"2134":[3,7,14,271],"2135":[5,7,14,266],"2136":[null,10,4,163],"2137":[3,10,null,144],"2138":[10,10,19,320],"2139":[8,10,16,153],"2140":[3,10,16,336],"2141":[5,10,11,241],"2142":[null,11,1,150],"2143":[3,11,null,155],"2144":[9,11,19,417],"2145":[6,11,4,213],"2146":[11,11,1,165],"2147":[3,11,3,208],"2148":[5,11,14,282],"2149":[null,10,1,182],"2150":[3,10,3,153],"2151":[8,10,20,359],"2152":[6,10,13,532],"2153":[6,10,13,174],"2154":[3,10,13,190],"2155":[5,10,10,269],"2156":[null,9,1,201],"2157":[3,9,null,156],"2158":[9,9,35,767],"2159":[10,9,14,326],"2160":[8,9,15,562],"2161":[3,9,23,286],"2162":[5,9,14,400],"2163":[null,10,4,211],"2164":[3,10,null,164],"2165":[12,10,14,269],"2166":[7,10,15,384],"2167":[10,10,13,451],"2168":[12,10,12,427],"2169":[8,10,18,617],"2170":[3,10,10,435],"2171":[5,10,12,432],"2172":[null,13,null,164],"2173":[3,13,null,184],"2174":[12,13,15,260],"2175":[6,13,12,154],"2176":[7,13,9,308],"2177":[10,13,12,314],"2178":[9,13,18,213],"2179":[6,13,22,242],"2180":[11,13,17,151],"2181":[3,13,8,412],"2182":[5,13,15,421],"2183":[null,14,4,175],"2184":[3,14,null,181],"2185":[4,14,5,211],"2186":[9,14,9,129],"2187":[8,14,10,225],"2188":[6,14,15,235],"2189":[8,14,2,125],"2190":[5,14,14,265],"2191":[10,14,4,153],"2192":[10,14,13,276],"2193":[2,14,22,176],"2194":[3,14,7,353],"2195":[5,14,15,395],"2196":[null,10,null,192],"2197":[3,10,2,152],"2198":[11,10,14,229],"2199":[12,10,13,194],"2200":[8,10,11,238],"2201":[9,10,10,226],"2202":[9,10,7,188],"2203":[9,10,13,132],"2204":[3,10,14,311],"2205":[5,10,10,365],"2206":[null,7,null,124],"2207":[2,7,null,47],"2208":[2,7,null,117],"2209":[3,7,null,80],"2210":[7,7,null,212],"2211":[4,7,null,91],"2212":[6,7,2,144],"2213":[4,7,6,119],"2214":[null,6,null,67],"2215":[5,6,null,130],"2216":[3,6,null,129],"2217":[5,6,null,89],"2218":[3,6,null,74],"2219":[null,1,null,36],"2220":[2,1,null,80],"2221":[2,1,null,114],"2222":[2,1,null,435],"2223":[4,1,null,168],"2224":[1,1,null,13],"2225":[1,1,null,4],"2226":[1,1,null,56],"2227":[2,1,null,45],"2228":[null,3,null,79],"2229":[2,3,null,214],"2230":[3,3,null,116],"2231":[6,3,null,42],"2232":[6,3,null,369],"2233":[5,3,null,60],"2234":[3,3,null,1754],"2235":[3,3,null,57],"2236":[6,3,null,103],"2237":[6,3,null,12],"2238":[null,1,null,75],"2239":[6,1,null,12],"2240":[null,2,null,61],"2241":[3,2,null,205],"2242":[4,2,null,95],"2243":[2,2,null,32],"2244":[3,2,null,49],"2245":[4,2,null,42],"2246":[null,1,null,65],"2247":[4,1,null,56]},"averageFieldLength":[3.974697338126915,9.092971530249116,10.094921032732303,286.4519572953739],"storedFields":{"0":{"u":"/docs/adr/index.html","d":"Architecture Decision Records","k":"Architecture Decision Records","x":"Accepted ADRs explaining why the core cross-cutting patterns exist. Read these before changing a pattern they describe: they capture context and trade-offs that aren't obvious…"},"1":{"u":"/docs/adr/index.html#writing-a-new-adr","d":"Architecture Decision Records","k":"Architecture Decision Records","t":"Writing a new ADR","x":"Start from docs-src/adr/template.md in this repo (it is not rendered; the generator only picks up NNN-.md), which carries the structure every record uses: Status (Proposed /…"},"2":{"u":"/docs/adr/001-manual-dto-mapping.html","d":"ADR-001: Manual DTO Mapping over AutoMapper","k":"Architecture Decision Records"},"3":{"u":"/docs/adr/001-manual-dto-mapping.html#status","d":"ADR-001: Manual DTO Mapping over AutoMapper","k":"Architecture Decision Records","t":"Status","x":"Accepted. Mechanism clarified 2026-06-26: the per-entity mappers are Riok.Mapperly source-generated (compile-time), not hand-written line by line. The decision to avoid runtime…"},"4":{"u":"/docs/adr/001-manual-dto-mapping.html#context","d":"ADR-001: Manual DTO Mapping over AutoMapper","k":"Architecture Decision Records","t":"Context","x":"Domain entities must be mapped to DTOs for API responses. The two common approaches are: 1. Manual mapping classes (IEntityDTOMapper ) 2. Convention-based reflection mapping…"},"5":{"u":"/docs/adr/001-manual-dto-mapping.html#decision","d":"ADR-001: Manual DTO Mapping over AutoMapper","k":"Architecture Decision Records","t":"Decision","x":"Use explicit, per-entity DTO mappers (each a Riok.Mapperly [Mapper] partial class whose MapToDTO body is source-generated at compile time) registered via Scrutor assembly…"},"6":{"u":"/docs/adr/001-manual-dto-mapping.html#rationale","d":"ADR-001: Manual DTO Mapping over AutoMapper","k":"Architecture Decision Records","t":"Rationale","x":"- Compile-time safety: Mapping errors surface at build time, not runtime. Property renames break the build rather than silently mapping null. - Testability: Each mapper is a…"},"7":{"u":"/docs/adr/001-manual-dto-mapping.html#trade-offs","d":"ADR-001: Manual DTO Mapping over AutoMapper","k":"Architecture Decision Records","t":"Trade-offs","x":"- More files (35 DTO mappers across Store + ADC: 22 in ADC, 13 in Store, plus the parallel IEntityRequestMapper classes). The interface's default MapToDTOs implementation is…"},"8":{"u":"/docs/adr/002-navigation-populators.html","d":"ADR-002: NavigationPopulators for Cross-Container Loading","k":"Architecture Decision Records"},"9":{"u":"/docs/adr/002-navigation-populators.html#status","d":"ADR-002: NavigationPopulators for Cross-Container Loading","k":"Architecture Decision Records","t":"Status","x":"Accepted"},"10":{"u":"/docs/adr/002-navigation-populators.html#context","d":"ADR-002: NavigationPopulators for Cross-Container Loading","k":"Architecture Decision Records","t":"Context","x":"The application supports multiple database backends (SQL Server, Cosmos DB, SQLite). EF Core's .Include() works for SQL Server but fails for Cosmos DB cross-container…"},"11":{"u":"/docs/adr/002-navigation-populators.html#decision","d":"ADR-002: NavigationPopulators for Cross-Container Loading","k":"Architecture Decision Records","t":"Decision","x":"Each entity that has unsupported navigations gets a INavigationPopulator implementation. A DeclarativeNavigationPopulator base class (added in MMCA.Common) allows populators to…"},"12":{"u":"/docs/adr/002-navigation-populators.html#rationale","d":"ADR-002: NavigationPopulators for Cross-Container Loading","k":"Architecture Decision Records","t":"Rationale","x":"- Multi-DB support: The query pipeline automatically falls back from Include to NavigationPopulator when the data source reports navigations as unsupported. - Batch efficiency:…"},"13":{"u":"/docs/adr/002-navigation-populators.html#trade-offs","d":"ADR-002: NavigationPopulators for Cross-Container Loading","k":"Architecture Decision Records","t":"Trade-offs","x":"- Extra abstraction layer for SQL Server (where Include works fine). Mitigated: the populator is only called when the query pipeline's metadata says navigations are unsupported.…"},"14":{"u":"/docs/adr/003-outbox-dual-dispatch.html","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records"},"15":{"u":"/docs/adr/003-outbox-dual-dispatch.html#status","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Status","x":"Accepted. Revised 2026-07-19 (integration-event routing via IMessageBus, lease-based claims for safe scale-out, dead-letter visibility, post-commit dispatch; see Revision below).…"},"16":{"u":"/docs/adr/003-outbox-dual-dispatch.html#context","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Context","x":"Domain events must be reliably published after aggregate changes are persisted. Two failure modes exist: 1. In-process dispatch fails (e.g., handler throws): the event is lost if…"},"17":{"u":"/docs/adr/003-outbox-dual-dispatch.html#decision","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Decision","x":"Use a dual-dispatch strategy: 1. Outbox persistence: Domain events are serialized into OutboxMessage rows within the same database transaction as the aggregate changes. This…"},"18":{"u":"/docs/adr/003-outbox-dual-dispatch.html#rationale","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Rationale","x":"- Guaranteed delivery: The outbox table is written atomically with the aggregate changes. Even if the process crashes after persistence, the background processor catches up. -…"},"19":{"u":"/docs/adr/003-outbox-dual-dispatch.html#trade-offs","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Trade-offs","x":"- Domain event handlers must be idempotent (this is a good practice regardless). - The outbox table grows until processed entries are cleaned up: OutboxCleanupService purges rows…"},"20":{"u":"/docs/adr/003-outbox-dual-dispatch.html#revision-2026-07-19","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Revision (2026-07-19)","x":"Four changes from the 2026-07-19 full review: 1. Integration events route through the outbox to IMessageBus, never local dispatch. An IIntegrationEvent raised via AddDomainEvent…"},"21":{"u":"/docs/adr/003-outbox-dual-dispatch.html#revision-2026-07-24","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Revision (2026-07-24)","x":"Three capture-side corrections found in a code review. None change the dual-dispatch decision; they close gaps between what it promised and what the interceptor did. 1. Capture…"},"22":{"u":"/docs/adr/003-outbox-dual-dispatch.html#revision-2026-08-01","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Revision (2026-08-01)","x":"One retry-pacing correction. The dual-dispatch decision is unchanged; the Trade-offs above described a cadence the processor no longer has. 1. Retry backoff is explicit, and it…"},"23":{"u":"/docs/adr/003-outbox-dual-dispatch.html#revision-2026-08-07","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Revision (2026-08-07)","x":"One retry-pacing refinement. The decision and the curve are unchanged; the waits are no longer identical across a batch. 1. The retry backoff carries random jitter. The…"},"24":{"u":"/docs/adr/003-outbox-dual-dispatch.html#revision-2026-08-26","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Revision (2026-08-26)","x":"Five changes. The dual-dispatch decision is unchanged; what changes is what happens to a message that must not overtake its predecessor, to one that never made it out, and to the…"},"25":{"u":"/docs/adr/003-outbox-dual-dispatch.html#revision-2026-09-07","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The dispatch model is unchanged. What changed is the name the outbox's downstream resources take by default, from the 2026-09-07 security review (SEC-Common-53).…"},"26":{"u":"/docs/adr/003-outbox-dual-dispatch.html#revision-2026-09-11","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Revision (2026-09-11)","x":"The dispatch model is unchanged: same table, same claim lease, same dual dispatch, same retry and dead-letter policy. What changed is what a row carries, because the hop was…"},"27":{"u":"/docs/adr/003-outbox-dual-dispatch.html#revision-2026-10-01","d":"ADR-003: Outbox Pattern with Dual Dispatch","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The dual-dispatch decision is unchanged. One rule is added to it (Decision item 4), and several statements made by earlier revisions no longer describe the code. The…"},"28":{"u":"/docs/adr/004-authentication-dual-fetch.html","d":"ADR-004: Cross-Service Token Validation via JWKS / OIDC Discovery","k":"Architecture Decision Records"},"29":{"u":"/docs/adr/004-authentication-dual-fetch.html#status","d":"ADR-004: Cross-Service Token Validation via JWKS / OIDC Discovery","k":"Architecture Decision Records","t":"Status","x":"Accepted. Updated 2026-09-03 (JwtSettings / JwtSigningAlgorithm cited at their real Auth/ paths, and the validator registration described with its current signature and…"},"30":{"u":"/docs/adr/004-authentication-dual-fetch.html#context","d":"ADR-004: Cross-Service Token Validation via JWKS / OIDC Discovery","k":"Architecture Decision Records","t":"Context","x":"When the modular monolith is extracted into per-module service hosts behind a gateway (ADR-008), every service must authenticate the same end-user JWT, but only one service…"},"31":{"u":"/docs/adr/004-authentication-dual-fetch.html#decision","d":"ADR-004: Cross-Service Token Validation via JWKS / OIDC Discovery","k":"Architecture Decision Records","t":"Decision","x":"Validate cross-service tokens with asymmetric (RS256) signatures plus JWKS / OIDC discovery, keeping the symmetric (HS256) shared-secret path as the in-process monolith option.…"},"32":{"u":"/docs/adr/004-authentication-dual-fetch.html#rationale","d":"ADR-004: Cross-Service Token Validation via JWKS / OIDC Discovery","k":"Architecture Decision Records","t":"Rationale","x":"- No shared signing key. Only Identity can mint tokens; every other service holds only the public key it fetched, so a compromised non-Identity service cannot forge tokens, and…"},"33":{"u":"/docs/adr/004-authentication-dual-fetch.html#trade-offs","d":"ADR-004: Cross-Service Token Validation via JWKS / OIDC Discovery","k":"Architecture Decision Records","t":"Trade-offs","x":"- More moving parts than a shared secret. RS256 needs key generation, distribution of the public half, a JWKS endpoint, and discovery wiring, versus one symmetric string. -…"},"34":{"u":"/docs/adr/004-authentication-dual-fetch.html#revision-2026-10-01","d":"ADR-004: Cross-Service Token Validation via JWKS / OIDC Discovery","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Anchor-only refresh; no decision or rationale changed. The AddForwardedJwtBearer registration lives in the partial file…"},"35":{"u":"/docs/adr/004-authentication-dual-fetch.html#related","d":"ADR-004: Cross-Service Token Validation via JWKS / OIDC Discovery","k":"Architecture Decision Records","t":"Related","x":"ADR-007 (gRPC calls forward the validated JWT downstream via JwtForwardingClientInterceptor), ADR-008 (the extraction that split issuer and validator into separate processes),…"},"36":{"u":"/docs/adr/005-soft-delete-vs-erasure.html","d":"ADR-005: Soft-Delete vs. Right-to-Erasure","k":"Architecture Decision Records"},"37":{"u":"/docs/adr/005-soft-delete-vs-erasure.html#status","d":"ADR-005: Soft-Delete vs. Right-to-Erasure","k":"Architecture Decision Records","t":"Status","x":"Accepted. Updated 2026-06-27 (documented the [Pii] → IAnonymizable build-time guard and PiiRedactor). Updated 2026-08-26 (DeletedOn/DeletedBy stamps, the DeleteChildren cascade…"},"38":{"u":"/docs/adr/005-soft-delete-vs-erasure.html#context","d":"ADR-005: Soft-Delete vs. Right-to-Erasure","k":"Architecture Decision Records","t":"Context","x":"The framework's default deletion model is soft-delete: AuditableBaseEntity.Delete() sets IsDeleted = true and EF Core global query filters exclude the row from normal queries.…"},"39":{"u":"/docs/adr/005-soft-delete-vs-erasure.html#decision","d":"ADR-005: Soft-Delete vs. Right-to-Erasure","k":"Architecture Decision Records","t":"Decision","x":"Separate the two concerns and provide an extension point for each, rather than overloading soft-delete: 1. Soft-delete stays the default for lifecycle/state management (hide +…"},"40":{"u":"/docs/adr/005-soft-delete-vs-erasure.html#rationale","d":"ADR-005: Soft-Delete vs. Right-to-Erasure","k":"Architecture Decision Records","t":"Rationale","x":"- Right tool per concern: soft-delete answers \"is this record active?\"; erasure answers \"has this person's data been removed?\". Conflating them (e.g. hard-deleting inside…"},"41":{"u":"/docs/adr/005-soft-delete-vs-erasure.html#trade-offs","d":"ADR-005: Soft-Delete vs. Right-to-Erasure","k":"Architecture Decision Records","t":"Trade-offs","x":"- Erasure is opt-in per entity, but the opt-in is guarded: an aggregate exposing a [Pii]-marked property that does not implement IAnonymizable fails the architecture fitness…"},"42":{"u":"/docs/adr/005-soft-delete-vs-erasure.html#revision-2026-09-07","d":"ADR-005: Soft-Delete vs. Right-to-Erasure","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Anonymization keeps the row and its foreign keys: Anonymize() overwrites the personal fields and leaves the entity's relationships intact, because the aggregate still has to hang…"},"43":{"u":"/docs/adr/005-soft-delete-vs-erasure.html#revision-2026-10-01","d":"ADR-005: Soft-Delete vs. Right-to-Erasure","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision changed. One description in Decision 1 was corrected: it said composing Result.Combine(DeleteChildren (lines), base.Delete()) aborts the cascade \"before the root is…"},"44":{"u":"/docs/adr/006-database-per-service.html","d":"ADR-006: Database per Service","k":"Architecture Decision Records"},"45":{"u":"/docs/adr/006-database-per-service.html#status","d":"ADR-006: Database per Service","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-07). Supersedes the earlier \"deliberately one shared database\" stance. Clarified 2026-06-27: the single context class became one sealed context class per engine…"},"46":{"u":"/docs/adr/006-database-per-service.html#context","d":"ADR-006: Database per Service","k":"Architecture Decision Records","t":"Context","x":"When the modules were first extracted into independently-deployable services, all services in an app still pointed at a single shared SQL database with a single OutboxMessages…"},"47":{"u":"/docs/adr/006-database-per-service.html#decision","d":"ADR-006: Database per Service","k":"Architecture Decision Records","t":"Decision","x":"Adopt database-per-service: each service owns its own physical database with its own OutboxMessages table. - One sealed concrete context class per engine, one instance per…"},"48":{"u":"/docs/adr/006-database-per-service.html#rationale","d":"ADR-006: Database per Service","k":"Architecture Decision Records","t":"Rationale","x":"- Removes the shared-outbox race (the sharpest cost of the shared DB) without an OriginService filter: physical isolation is simpler and stronger than a logical filter. - Real…"},"49":{"u":"/docs/adr/006-database-per-service.html#trade-offs","d":"ADR-006: Database per Service","k":"Architecture Decision Records","t":"Trade-offs","x":"- No cross-database FKs or transactions. Relationships that span services degrade to scalar IDs; consistency across services is eventual (outbox + broker), not transactional. -…"},"50":{"u":"/docs/adr/007-grpc-extraction.html","d":"ADR-007: Synchronous Cross-Service Calls via gRPC Contracts","k":"Architecture Decision Records"},"51":{"u":"/docs/adr/007-grpc-extraction.html#status","d":"ADR-007: Synchronous Cross-Service Calls via gRPC Contracts","k":"Architecture Decision Records","t":"Status","x":"Accepted. Revised 2026-08-23 (the [ServiceContract] marker now has a dedicated fitness rule behind it, ServiceContractPurityTestsBase, subclassed in all four repos; it is a…"},"52":{"u":"/docs/adr/007-grpc-extraction.html#context","d":"ADR-007: Synchronous Cross-Service Calls via gRPC Contracts","k":"Architecture Decision Records","t":"Context","x":"Once modules became separate service processes, the in-process interface calls between them (e.g. Conference → Engagement's IBookmarkCountService, Engagement → Conference's…"},"53":{"u":"/docs/adr/007-grpc-extraction.html#decision","d":"ADR-007: Synchronous Cross-Service Calls via gRPC Contracts","k":"Architecture Decision Records","t":"Decision","x":"Use gRPC, exposed through MMCA.Common.Grpc, with a contract-package convention: - .Contracts projects hold the .proto definitions plus a gRPC adapter that implements the same…"},"54":{"u":"/docs/adr/007-grpc-extraction.html#rationale","d":"ADR-007: Synchronous Cross-Service Calls via gRPC Contracts","k":"Architecture Decision Records","t":"Rationale","x":"- No business-logic rewrite: the gRPC adapter implements the interface modules already depend on; swapping in-process for cross-process is a registration change. - Transport…"},"55":{"u":"/docs/adr/007-grpc-extraction.html#trade-offs","d":"ADR-007: Synchronous Cross-Service Calls via gRPC Contracts","k":"Architecture Decision Records","t":"Trade-offs","x":"- Bidirectional pairs need care. Conference ↔ Engagement is a mutual gRPC pair; the AppHost deliberately omits a reciprocal WaitFor to avoid a startup deadlock: transient \"peer…"},"56":{"u":"/docs/adr/008-service-extraction-topology.html","d":"ADR-008: Extraction of the Modular Monolith into Per-Module Services + Gateway","k":"Architecture Decision Records"},"57":{"u":"/docs/adr/008-service-extraction-topology.html#status","d":"ADR-008: Extraction of the Modular Monolith into Per-Module Services + Gateway","k":"Architecture Decision Records","t":"Status","x":"Accepted. Amended by ADR-089 (2026-08-18): the Gateway keeps the route-to-service map this record gave it, but stops expressing it as MapForwarder calls in code. YARP…"},"58":{"u":"/docs/adr/008-service-extraction-topology.html#context","d":"ADR-008: Extraction of the Modular Monolith into Per-Module Services + Gateway","k":"Architecture Decision Records","t":"Context","x":"ADC began as a modular monolith: one MMCA.ADC.WebAPI host loaded every module (Identity, Conference, Engagement, Notification) in-process via the ModuleLoader, sharing one…"},"59":{"u":"/docs/adr/008-service-extraction-topology.html#decision","d":"ADR-008: Extraction of the Modular Monolith into Per-Module Services + Gateway","k":"Architecture Decision Records","t":"Decision","x":"Extract one service host per module: MMCA.ADC.{Identity,Conference,Engagement,Notification}.Service and front them with a single YARP reverse-proxy Gateway (MMCA.ADC.Gateway,…"},"60":{"u":"/docs/adr/008-service-extraction-topology.html#rationale","d":"ADR-008: Extraction of the Modular Monolith into Per-Module Services + Gateway","k":"Architecture Decision Records","t":"Rationale","x":"- No business-logic rewrite. Because a service is just the monolith with one module enabled, extraction was a hosting/wiring change, not a domain change, and the module-isolation…"},"61":{"u":"/docs/adr/008-service-extraction-topology.html#trade-offs","d":"ADR-008: Extraction of the Modular Monolith into Per-Module Services + Gateway","k":"Architecture Decision Records","t":"Trade-offs","x":"- Operational complexity. Four deployables plus a Gateway, service discovery, a broker, and per-service databases, versus one process. Mitigated locally by Aspire orchestration…"},"62":{"u":"/docs/adr/008-service-extraction-topology.html#applicability","d":"ADR-008: Extraction of the Modular Monolith into Per-Module Services + Gateway","k":"Architecture Decision Records","t":"Applicability","x":"This ADR is framed around ADC (the first repo extracted), but the same topology is now the framework's standard extraction shape, not an ADC-only choice. MMCA.Store followed it:…"},"63":{"u":"/docs/adr/008-service-extraction-topology.html#revision-2026-10-01","d":"ADR-008: Extraction of the Modular Monolith into Per-Module Services + Gateway","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Three statements are corrected against the code; the topology itself is unchanged. The extracted service hosts do not rely on Disabled stubs for their peers: each passes only its…"},"64":{"u":"/docs/adr/008-service-extraction-topology.html#related","d":"ADR-008: Extraction of the Modular Monolith into Per-Module Services + Gateway","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (outbox dual dispatch), ADR-004 (cross-service token validation via JWKS), ADR-006 (database per service), and ADR-007 (gRPC cross-service calls) are the facet decisions…"},"65":{"u":"/docs/adr/009-resilience-and-recovery-objectives.html","d":"ADR-009: Resilience Policies & Recovery Objectives","k":"Architecture Decision Records"},"66":{"u":"/docs/adr/009-resilience-and-recovery-objectives.html#status","d":"ADR-009: Resilience Policies & Recovery Objectives","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-14). Amended by ADR-087 (2026-08-18): the resilience objective extends past outbound HTTP and gRPC clients for the first time, to the outbox's broker publish,…"},"67":{"u":"/docs/adr/009-resilience-and-recovery-objectives.html#context","d":"ADR-009: Resilience Policies & Recovery Objectives","k":"Architecture Decision Records","t":"Context","x":"The framework already supplies the mechanisms for surviving partial failure: a standard Polly resilience handler (timeout / retry / circuit breaker), the outbox for at-least-once…"},"68":{"u":"/docs/adr/009-resilience-and-recovery-objectives.html#decision","d":"ADR-009: Resilience Policies & Recovery Objectives","k":"Architecture Decision Records","t":"Decision","x":"1. Resilience is a framework invariant, not a per-call choice. Every outbound HttpClient and gRPC client registered through the framework's extension methods (AddTypedGrpcClient,…"},"69":{"u":"/docs/adr/009-resilience-and-recovery-objectives.html#rationale","d":"ADR-009: Resilience Policies & Recovery Objectives","k":"Architecture Decision Records","t":"Rationale","x":"- Invariant over discipline. A fitness function turns \"remember to add resilience\" into a build gate: the same approach the framework already uses for the layer rules and the…"},"70":{"u":"/docs/adr/009-resilience-and-recovery-objectives.html#trade-offs","d":"ADR-009: Resilience Policies & Recovery Objectives","k":"Architecture Decision Records","t":"Trade-offs","x":"- The named gate (ResilienceHandlerTests, MMCA.Common.Grpc.Tests) asserts every option the gRPC client path (AddTypedGrpcClient) configures…"},"71":{"u":"/docs/adr/009-resilience-and-recovery-objectives.html#revision-2026-08-18","d":"ADR-009: Resilience Policies & Recovery Objectives","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"This record's first Decision point scoped resilience to \"every outbound HttpClient and gRPC client registered through the framework's extension methods\". That scope was accurate…"},"72":{"u":"/docs/adr/009-resilience-and-recovery-objectives.html#revision-2026-09-11","d":"ADR-009: Resilience Policies & Recovery Objectives","k":"Architecture Decision Records","t":"Revision (2026-09-11)","x":"Two amendments, both about parts of this posture the record could not previously see or reach. (a) The standard handler is now observable. Decision point 1 makes the resilience…"},"73":{"u":"/docs/adr/009-resilience-and-recovery-objectives.html#revision-2026-09-19","d":"ADR-009: Resilience Policies & Recovery Objectives","k":"Architecture Decision Records","t":"Revision (2026-09-19)","x":"That consumer-side companion is now in MMCA.Store's main. StripeClientFactory builds the SDK client over an explicitly bounded HTTP stack instead of Stripe.net's defaults, and…"},"74":{"u":"/docs/adr/009-resilience-and-recovery-objectives.html#revision-2026-10-01","d":"ADR-009: Resilience Policies & Recovery Objectives","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changes; the current-state sections are brought back in line with the code. Decision point 1 no longer says the gRPC client matches the global HTTP…"},"75":{"u":"/docs/adr/010-integration-event-schema-versioning.html","d":"ADR-010: Integration-Event Schema Versioning & Upcaster Policy","k":"Architecture Decision Records"},"76":{"u":"/docs/adr/010-integration-event-schema-versioning.html#status","d":"ADR-010: Integration-Event Schema Versioning & Upcaster Policy","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-19). Updated 2026-06-27 (Helpdesk enforcement gap closed; all three consumers now gate the convention). Updated 2026-08-14 (ADC now gates seven events, and a…"},"77":{"u":"/docs/adr/010-integration-event-schema-versioning.html#context","d":"ADR-010: Integration-Event Schema Versioning & Upcaster Policy","k":"Architecture Decision Records","t":"Context","x":"Integration events cross service boundaries (Identity → Conference, Conference ↔ Engagement, …) and are resolved by consumers solely by their type string: the outbox serializes…"},"78":{"u":"/docs/adr/010-integration-event-schema-versioning.html#decision","d":"ADR-010: Integration-Event Schema Versioning & Upcaster Policy","k":"Architecture Decision Records","t":"Decision","x":"1. Every integration event carries an explicit SchemaVersion. BaseIntegrationEvent exposes public virtual int SchemaVersion = 1;. It is serialized with the payload…"},"79":{"u":"/docs/adr/010-integration-event-schema-versioning.html#rationale","d":"ADR-010: Integration-Event Schema Versioning & Upcaster Policy","k":"Architecture Decision Records","t":"Rationale","x":"- A signal, enforced. A version field plus a build-gating convention test turns \"remember the contract\" into something the tooling checks: the same invariant-over-discipline…"},"80":{"u":"/docs/adr/010-integration-event-schema-versioning.html#trade-offs","d":"ADR-010: Integration-Event Schema Versioning & Upcaster Policy","k":"Architecture Decision Records","t":"Trade-offs","x":"- SchemaVersion is a signal, not a mechanism: by itself it does not stop a consumer breaking on a real reshape. The load-bearing half is the discipline (new type + upcaster). At…"},"81":{"u":"/docs/adr/010-integration-event-schema-versioning.html#amendment-2026-09-11-integration-event-payload-purity","d":"ADR-010: Integration-Event Schema Versioning & Upcaster Policy","k":"Architecture Decision Records","t":"Amendment (2026-09-11): integration-event payload purity","x":"Versioning answers \"how may this contract change\". It does not answer \"what may be in it in the first place\", and that gap is where the more expensive failure lives. An event…"},"82":{"u":"/docs/adr/010-integration-event-schema-versioning.html#revision-2026-10-01","d":"ADR-010: Integration-Event Schema Versioning & Upcaster Policy","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; two statements and one citation were corrected against source. The amendment claimed both purity rules are vacuous for a module-less map; only…"},"83":{"u":"/docs/adr/011-single-locale-i18n.html","d":"ADR-011: Single-Locale by Design (No Internationalization)","k":"Architecture Decision Records"},"84":{"u":"/docs/adr/011-single-locale-i18n.html#status","d":"ADR-011: Single-Locale by Design (No Internationalization)","k":"Architecture Decision Records","t":"Status","x":"Superseded by ADR-027 (2026-06-27). Originally Accepted (2026-06-19). The \"if multi-locale is ever required\" scope below is the blueprint ADR-027 implements; this record is…"},"85":{"u":"/docs/adr/011-single-locale-i18n.html#context","d":"ADR-011: Single-Locale by Design (No Internationalization)","k":"Architecture Decision Records","t":"Context","x":"The MMCA applications (the ADC conference app, the Store) and the MMCA.Common.UI library currently ship a single locale (en-US). The architecture rubric scores…"},"86":{"u":"/docs/adr/011-single-locale-i18n.html#decision","d":"ADR-011: Single-Locale by Design (No Internationalization)","k":"Architecture Decision Records","t":"Decision","x":"1. Single-locale (en-US) is an explicit non-goal for now. User-facing strings are inline in markup; dates/numbers use invariant or fixed formatting where appropriate. 2. The…"},"87":{"u":"/docs/adr/011-single-locale-i18n.html#rationale","d":"ADR-011: Single-Locale by Design (No Internationalization)","k":"Architecture Decision Records","t":"Rationale","x":"- Recording the decision converts an implicit rubric-zero into a conscious, revisitable choice: the same posture as the single-region DR acceptance in ADR-009. - Premature i18n…"},"88":{"u":"/docs/adr/011-single-locale-i18n.html#trade-offs","d":"ADR-011: Single-Locale by Design (No Internationalization)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Adding a locale later touches every view plus the formatting paths: a real but bounded effort, accepted. - Hard-coded strings make a future extraction larger; mitigated by the…"},"89":{"u":"/docs/adr/012-grpc-host-transport.html","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records"},"90":{"u":"/docs/adr/012-grpc-host-transport.html#status","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Status","x":"Accepted (re-verified against source 2026-09-03). Revised 2026-09-07 (the rate-limit and HTTPS-redirect exemptions that used to key on a caller-set Content-Type: application/grpc…"},"91":{"u":"/docs/adr/012-grpc-host-transport.html#update-2026-06-22-store-converged-to-profile-a","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Update (2026-06-22): Store converged to Profile A","x":"Store originally chose Profile B, but its cross-service gRPC failed in Azure Container Apps. With Http1AndHttp2 Kestrel + transport: 'auto' ingress on a cleartext endpoint there…"},"92":{"u":"/docs/adr/012-grpc-host-transport.html#update-2026-07-09-adc-notification-adds-a-mixed-endpoint-profile-per-endpoint-protocols","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Update (2026-07-09): ADC Notification adds a mixed-endpoint profile (per-endpoint protocols)","x":"The live-channel push pipeline (ADR-039) gave ADC's Notification service an inbound cleartext gRPC server (LiveChannelPushService.PushToChannel, called best-effort by Engagement…"},"93":{"u":"/docs/adr/012-grpc-host-transport.html#update-2026-07-25-probe-listeners-are-adcs-answer-not-tcp-probes-and-gateway-routed-jwks-is-a-local-only-rule","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Update (2026-07-25): probe listeners are ADC's answer, not TCP probes; and gateway-routed JWKS is a local-only rule","x":"Two claims above were written from an earlier state of the code and no longer describe either app. 1. ADC probes never touch the traffic endpoint; TCP probes were then…"},"94":{"u":"/docs/adr/012-grpc-host-transport.html#update-2026-07-28-the-probe-listener-is-the-single-pattern-in-both-apps-no-tcp-probes-anywhere","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Update (2026-07-28): the probe listener is the single pattern in both apps (no TCP probes anywhere)","x":"Store PR 55 (commit 297064bb, merged 2026-07-27) ported ADC's dedicated probe listener to Store, so the Store-only tcpSocket exception recorded in the 2026-07-25 update above is…"},"95":{"u":"/docs/adr/012-grpc-host-transport.html#update-2026-08-07-the-probe-listener-moved-into-mmcacommon-and-notifications-grpc-endpoint-carries-a-second-service","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Update (2026-08-07): the probe listener moved into MMCA.Common, and Notification's gRPC endpoint carries a second service","x":"1. One shared framework method, not a per-service file. The KestrelConfiguration.cs copies the two updates above cite no longer exist in either app. The pattern was extracted…"},"96":{"u":"/docs/adr/012-grpc-host-transport.html#update-2026-08-14-stores-sales-runs-the-mixed-endpoint-profile-too-so-no-pure-profile-b-host-remains","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Update (2026-08-14): Store's Sales runs the mixed-endpoint profile too, so no pure Profile B host remains","x":"Sales gained an inbound gRPC edge of its own (IUserSalesExportService, the Identity-driven data-subject export), and it resolved that the same way ADC's Notification did: not by…"},"97":{"u":"/docs/adr/012-grpc-host-transport.html#context","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Context","x":"Once modules were extracted into separate service hosts (ADR-008) that call each other synchronously over gRPC (ADR-007), each service's Kestrel had to serve both REST traffic…"},"98":{"u":"/docs/adr/012-grpc-host-transport.html#decision","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Decision","x":"Pick one of two coherent transport profiles per app, and wire the gateway forwarder and JWKS discovery to match. Use when services must serve gRPC on cleartext (any bidirectional…"},"99":{"u":"/docs/adr/012-grpc-host-transport.html#update-2026-08-29-aspire-local-health-gating-for-http2-only-endpoints-and-the-downstream-probe-negotiates-its-version","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Update (2026-08-29): Aspire-local health gating for Http2-only endpoints, and the downstream probe negotiates its version","x":"Two v1.167.0 framework additions close the last two operational gaps this profile family carried. 1. Profile A resources are now health-gated locally. Aspire's stock…"},"100":{"u":"/docs/adr/012-grpc-host-transport.html#update-2026-08-29-east-west-grpc-clients-state-their-own-circuit-breaker-v11680","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Update (2026-08-29): east-west gRPC clients state their own circuit breaker (v1.168.0)","x":"The health checks above are the gateway's view of a downstream. An east-west call (AddTypedGrpcClient, MMCA.Common/Source/Presentation/MMCA.Common.Grpc/DependencyInjection.cs)…"},"101":{"u":"/docs/adr/012-grpc-host-transport.html#rationale","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Rationale","x":"- The Kestrel protocol choice is the root constraint; the gateway-forward mode and the JWKS authority are downstream consequences, not independent knobs. Documenting them as a…"},"102":{"u":"/docs/adr/012-grpc-host-transport.html#trade-offs","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Two profiles to keep straight. A service that gains an inbound gRPC edge must migrate from Profile B to Profile A and move its gateway cluster onto the HTTP/2 exact version…"},"103":{"u":"/docs/adr/012-grpc-host-transport.html#revision-2026-09-07","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The transport profiles are unchanged. What changed is how the rest of the pipeline recognises an h2c gRPC request, from the 2026-09-07 security review (SEC-Common-44). Two…"},"104":{"u":"/docs/adr/012-grpc-host-transport.html#revision-2026-10-01","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed: both apps still run Profile A on their gRPC-serving hosts and the mixed-endpoint profile on ADC Notification and Store Sales. This pass…"},"105":{"u":"/docs/adr/012-grpc-host-transport.html#related","d":"ADR-012: gRPC-Host Transport Convention (Http2-only h2c vs. Http1AndHttp2 + ALPN)","k":"Architecture Decision Records","t":"Related","x":"- ADR-004 (cross-service token validation via JWKS / OIDC discovery), ADR-007 (gRPC cross-service calls), ADR-008 (monolith → services + gateway topology), ADR-039 (live-channel…"},"106":{"u":"/docs/adr/013-result-pattern.html","d":"ADR-013: Result Pattern over Exceptions for Flow Control","k":"Architecture Decision Records"},"107":{"u":"/docs/adr/013-result-pattern.html#status","d":"ADR-013: Result Pattern over Exceptions for Flow Control","k":"Architecture Decision Records","t":"Status","x":"Accepted. Revised 2026-07-21 (exception-handler chain / ProblemDetails edge contract documented). Revised 2026-08-26 (ErrorType.Unexpected, severity-ranked status selection for…"},"108":{"u":"/docs/adr/013-result-pattern.html#context","d":"ADR-013: Result Pattern over Exceptions for Flow Control","k":"Architecture Decision Records","t":"Context","x":"Operations at every layer fail in expected ways: input is invalid, a domain invariant is broken, a requested entity is missing, a uniqueness conflict occurs, the caller lacks…"},"109":{"u":"/docs/adr/013-result-pattern.html#decision","d":"ADR-013: Result Pattern over Exceptions for Flow Control","k":"Architecture Decision Records","t":"Decision","x":"Model expected failures as values using Result / Result (MMCA.Common.Shared.Abstractions), not exceptions. - A Result is either success or failure; a failure carries one or more…"},"110":{"u":"/docs/adr/013-result-pattern.html#rationale","d":"ADR-013: Result Pattern over Exceptions for Flow Control","k":"Architecture Decision Records","t":"Rationale","x":"- Failures are in the signature. A method that can fail returns Result , so the caller cannot silently ignore the failure path the way an uncaught exception allows. - Category,…"},"111":{"u":"/docs/adr/013-result-pattern.html#trade-offs","d":"ADR-013: Result Pattern over Exceptions for Flow Control","k":"Architecture Decision Records","t":"Trade-offs","x":"- More ceremony at call sites than letting an exception bubble; the combinators absorb most of it. - Two error channels coexist (Result for expected, exceptions for exceptional).…"},"112":{"u":"/docs/adr/013-result-pattern.html#revision-2026-10-01","d":"ADR-013: Result Pattern over Exceptions for Flow Control","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Citations were re-anchored to the current source after line shifts: the gRPC status table, ToRpcException ranking and trailer writes in…"},"113":{"u":"/docs/adr/013-result-pattern.html#related","d":"ADR-013: Result Pattern over Exceptions for Flow Control","k":"Architecture Decision Records","t":"Related","x":"ADR-007 (Result over the wire via gRPC, the second edge the shared severity ranking now serves), ADR-014 (the decorator pipeline returns Result.Failure to short-circuit a command…"},"114":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records"},"115":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#status","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Status","x":"Accepted. Revised 2026-07-19 (Transactional semantics: rollback on business failure + post-commit event dispatch; see Revision below). Revised 2026-08-18 (the pipeline order…"},"116":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#context","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Context","x":"Commands and queries share cross-cutting concerns: validation, transactions, cache invalidation, logging / timing, and feature gating. Putting that logic inside each handler…"},"117":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#decision","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Decision","x":"Use single-responsibility handlers behind a Scrutor-composed decorator pipeline. - ICommandHandler and IQueryHandler (MMCA.Common.Application) are one handler per use case, each…"},"118":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#rationale","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Rationale","x":"- Thin, testable handlers. A handler has no transaction, logging, or caching plumbing, so it is unit-tested in isolation. - One place to read and change the pipeline. The order…"},"119":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#trade-offs","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Trade-offs","x":"- Registration order is the reverse of execution order (a Scrutor foot-gun), mitigated by the inline ordering comments in AddApplicationDecorators(). - Decorators must be…"},"120":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#revision-2026-07-19","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Revision (2026-07-19)","x":"Two Transactional-decorator semantics changed with the 2026-07-19 full review: - A returned business failure now rolls the transaction back. Previously a handler returning…"},"121":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#revision-2026-08-18","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"Two decorators were added to both chains, so the order recorded in the Decision above is no longer the shipped one. The registration site is unchanged in kind:…"},"122":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#revision-2026-08-26","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Revision (2026-08-26)","x":"One decorator joins the query chain, and the registration sequence stops being a rule consumers have to remember. The query line in the Revision (2026-08-18) above is superseded;…"},"123":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#revision-2026-09-07","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"One decorator's key composition changed (SEC-Common-19 / SEC-Common-37). CachingQueryDecorator builds its entry key as TenantCacheKey.Scope(tenantContext,…"},"124":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#related","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Related","x":"ADR-013 (Result, the short-circuit currency of the pipeline, and the Failure error type the timeout decorator reuses because the taxonomy has no timeout member), ADR-003…"},"125":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#revision-2026-09-11","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Revision (2026-09-11)","x":"One decorator behaviour changed on both chains, and it is a logging decision rather than a pipeline one: the order, the markers, the sealing rule and the short-circuit currency…"},"126":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#revision-2026-09-19","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Revision (2026-09-19)","x":"One decorator pair changed inside, and the pipeline around it did not: the order is still FeatureGate - Authorization - Logging - Caching - Validating - Timeout - Transactional -…"},"127":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#revision-2026-09-25","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Revision (2026-09-25)","x":"The consumer fitness tests changed, not the pipeline. ADC's DecoratorPipelineOrderTests now builds its registration sequence through AddMmcaApplicationPipeline, the helper its…"},"128":{"u":"/docs/adr/014-cqrs-decorator-pipeline.html#revision-2026-10-01","d":"ADR-014: CQRS Handlers with a Decorator Pipeline","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The Decision gains one bullet stating where each kind of validation lives, so the Validating decorator's role is read against its neighbours rather than in isolation. The chain…"},"129":{"u":"/docs/adr/015-architecture-fitness-functions.html","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records"},"130":{"u":"/docs/adr/015-architecture-fitness-functions.html#status","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Status","x":"Accepted. Revised 2026-08-18 (two new rule families, namespace dependency cycles and trailing CancellationToken declarations, plus a third enforcement layer: a compile-time…"},"131":{"u":"/docs/adr/015-architecture-fitness-functions.html#context","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Context","x":"The codebase rests on invariants that are easy to state and easy to erode by accident: clean- architecture layer flow (Domain depends on nothing above it), module isolation (no…"},"132":{"u":"/docs/adr/015-architecture-fitness-functions.html#decision","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Decision","x":"Enforce architectural invariants as automated checks that gate the build, in two layers (a third joined them on 2026-08-18: see the Revision at the end). 1. Compile-time guard.…"},"133":{"u":"/docs/adr/015-architecture-fitness-functions.html#rationale","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Rationale","x":"- Invariant over discipline. Turning \"do not do X\" into a red build is the only enforcement that scales. It is the same lever used by the layer rules, the resilience gate…"},"134":{"u":"/docs/adr/015-architecture-fitness-functions.html#trade-offs","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Trade-offs","x":"- The tests assert structure / registration, not runtime behavior. ADR-009's test proves a client wires resilience, not that its policy values are correct; parameter tuning stays…"},"135":{"u":"/docs/adr/015-architecture-fitness-functions.html#revision-2026-08-18","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"Two new rule families joined the shared library, and a third enforcement layer joined the two the Decision above describes. The counts in MMCA.Common/FACTS.md move with them: 102…"},"136":{"u":"/docs/adr/015-architecture-fitness-functions.html#revision-2026-08-18-section-b-rule-families","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Revision (2026-08-18): Section B rule families","x":"A second entry on the same date, kept separate rather than folded into the one above because it lands with a different wave and changes a number that revision states. Two rule…"},"137":{"u":"/docs/adr/015-architecture-fitness-functions.html#revision-2026-08-23-superseded-counts-a-re-anchored-citation-and-the-real-test-floor","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Revision (2026-08-23): superseded counts, a re-anchored citation, and the real test floor","x":"No rule family joined or left the library in this entry. It corrects three things the two 2026-08-18 revisions above state, and it is kept as its own entry rather than edited…"},"138":{"u":"/docs/adr/015-architecture-fitness-functions.html#revision-2026-09-01-the-public-api-gates-real-coverage-and-re-anchored-citations","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Revision (2026-09-01): the public API gate's real coverage, and re-anchored citations","x":"No rule family joined or left the library in this entry and no decision changed. It corrects the public-API figures the first 2026-08-18 revision recorded, which had gone stale…"},"139":{"u":"/docs/adr/015-architecture-fitness-functions.html#revision-2026-09-03-the-accepted-cycles-middle-node-the-feature-folder-move-re-anchored-citations","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Revision (2026-09-03): the accepted cycle's middle node, the feature-folder move, re-anchored citations","x":"No rule family joined or left the library in this entry and no decision changed. One accepted allowance changed shape, the files that hold the rules and the tests moved, and the…"},"140":{"u":"/docs/adr/015-architecture-fitness-functions.html#revision-2026-09-11-the-restated-counts-come-out-six-citations-move","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Revision (2026-09-11): the restated counts come out, six citations move","x":"No rule family joined or left the library in this entry and no decision changed. It removes the one kind of number this record keeps failing to keep current and re-anchors the…"},"141":{"u":"/docs/adr/015-architecture-fitness-functions.html#revision-2026-09-19-the-gate-covers-eighteen-projects-and-the-unshipped-side-nearly-doubled","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Revision (2026-09-19): the gate covers eighteen projects, and the unshipped side nearly doubled","x":"No rule family joined or left the library in this entry and no decision changed. It corrects the public-API gate's file and declaration figures, which had gone stale in the…"},"142":{"u":"/docs/adr/015-architecture-fitness-functions.html#revision-2026-10-01-rs0026--rs0027-become-errors-the-baselines-roll-over-citations-move","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Revision (2026-10-01): RS0026 / RS0027 become errors, the baselines roll over, citations move","x":"No rule family joined or left the library in this entry. One public API gate setting changed, the baseline figures moved with the v1.216.0 release (MMCA.Common/FACTS.md:14), and…"},"143":{"u":"/docs/adr/015-architecture-fitness-functions.html#related","d":"ADR-015: Architecture Invariants Enforced as Fitness Functions","k":"Architecture Decision Records","t":"Related","x":"ADR-009 (resilience gate), ADR-010 (event-version gate), ADR-016 (MassTransit pin gate, and the lockstep release cadence the public API baseline is pinned to), ADR-006/007/008…"},"144":{"u":"/docs/adr/016-lockstep-versioning-masstransit-pin.html","d":"ADR-016: Lockstep Package Versioning and the MassTransit-v8 Pin","k":"Architecture Decision Records"},"145":{"u":"/docs/adr/016-lockstep-versioning-masstransit-pin.html#status","d":"ADR-016: Lockstep Package Versioning and the MassTransit-v8 Pin","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-15). Amended (2026-07-28): the fitness function now gates two commercial-license majors (MassTransit and SixLabors.ImageSharp), so the decision is restated as…"},"146":{"u":"/docs/adr/016-lockstep-versioning-masstransit-pin.html#context","d":"ADR-016: Lockstep Package Versioning and the MassTransit-v8 Pin","k":"Architecture Decision Records","t":"Context","x":"MMCA.Common publishes its MMCA.Common. NuGet package set (see FACTS.md for the authoritative list and count) consumed by three downstream repos: the two production apps (Store,…"},"147":{"u":"/docs/adr/016-lockstep-versioning-masstransit-pin.html#decision","d":"ADR-016: Lockstep Package Versioning and the MassTransit-v8 Pin","k":"Architecture Decision Records","t":"Decision","x":"1. Version the whole MMCA.Common. package set in lockstep. All packages share one version (MinVer, derived from a single vX.Y.Z git tag); a release tags every package (see…"},"148":{"u":"/docs/adr/016-lockstep-versioning-masstransit-pin.html#rationale","d":"ADR-016: Lockstep Package Versioning and the MassTransit-v8 Pin","k":"Architecture Decision Records","t":"Rationale","x":"- One version, one compatibility story. Lockstep removes the N-package matrix: \"everything on vX.Y.Z\" is the only supported combination, which is the right trade for a small…"},"149":{"u":"/docs/adr/016-lockstep-versioning-masstransit-pin.html#trade-offs","d":"ADR-016: Lockstep Package Versioning and the MassTransit-v8 Pin","k":"Architecture Decision Records","t":"Trade-offs","x":"- A consumer cannot adopt a single package in isolation: it takes the whole set at the new version. - Lockstep will bump a package whose code did not change (acceptable: the…"},"150":{"u":"/docs/adr/016-lockstep-versioning-masstransit-pin.html#transport-exit-options","d":"ADR-016: Lockstep Package Versioning and the MassTransit-v8 Pin","k":"Architecture Decision Records","t":"Transport exit options","x":"The pin has a horizon. MassTransit v8 is the free major and its community support ends at the end of 2026 (a maintainer statement about the package, not something this repository…"},"151":{"u":"/docs/adr/016-lockstep-versioning-masstransit-pin.html#alternatives-rejected","d":"ADR-016: Lockstep Package Versioning and the MassTransit-v8 Pin","k":"Architecture Decision Records","t":"Alternatives rejected","x":"- Opt-in flags and compatibility shims for a framework change, with consumers upgraded per page or per PR. Declined outright: no virtual opt-in properties, no parallel old and…"},"152":{"u":"/docs/adr/016-lockstep-versioning-masstransit-pin.html#revision-2026-10-01","d":"ADR-016: Lockstep Package Versioning and the MassTransit-v8 Pin","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision, pin, gate or rationale changed: MassTransit stays below major 9 and ImageSharp below major 4, and every repo still sits on one MassTransit patch. The current-state…"},"153":{"u":"/docs/adr/016-lockstep-versioning-masstransit-pin.html#related","d":"ADR-016: Lockstep Package Versioning and the MassTransit-v8 Pin","k":"Architecture Decision Records","t":"Related","x":"ADR-015 (the fitness function that enforces the pins), ADR-003 / ADR-006 (MassTransit is the broker transport behind the outbox and database-per-service flows). ADR-118 revisits…"},"154":{"u":"/docs/adr/017-request-idempotency.html","d":"ADR-017: HTTP Request Idempotency via Client-Supplied Keys","k":"Architecture Decision Records"},"155":{"u":"/docs/adr/017-request-idempotency.html#status","d":"ADR-017: HTTP Request Idempotency via Client-Supplied Keys","k":"Architecture Decision Records","t":"Status","x":"Accepted. Revised 2026-08-01: the guard around execute-and-store is now an IDistributedLock resolved from DI (Redis-backed wherever a connection multiplexer is registered, which…"},"156":{"u":"/docs/adr/017-request-idempotency.html#context","d":"ADR-017: HTTP Request Idempotency via Client-Supplied Keys","k":"Architecture Decision Records","t":"Context","x":"Write endpoints (POST / PUT / PATCH) are exposed to client retries and double-submits: a flaky network, an impatient user double-clicking, or a resilience pipeline re-issuing a…"},"157":{"u":"/docs/adr/017-request-idempotency.html#decision","d":"ADR-017: HTTP Request Idempotency via Client-Supplied Keys","k":"Architecture Decision Records","t":"Decision","x":"Provide opt-in, client-driven request idempotency as an MVC action filter in MMCA.Common.API. - Opt-in per action. [Idempotent] (IdempotentAttribute, a ServiceFilterAttribute…"},"158":{"u":"/docs/adr/017-request-idempotency.html#rationale","d":"ADR-017: HTTP Request Idempotency via Client-Supplied Keys","k":"Architecture Decision Records","t":"Rationale","x":"- Safety at the edge, not in every handler. Deduplication lives in one filter, so a handler stays a thin use case (ADR-014) and does not grow ad-hoc \"did I already do this?\"…"},"159":{"u":"/docs/adr/017-request-idempotency.html#trade-offs","d":"ADR-017: HTTP Request Idempotency via Client-Supplied Keys","k":"Architecture Decision Records","t":"Trade-offs","x":"- Cross-instance mutual exclusion follows Redis, so it is a deployment property, not a guarantee. Every ADC and Store service host registers a Redis IConnectionMultiplexer when a…"},"160":{"u":"/docs/adr/017-request-idempotency.html#revision-2026-08-18","d":"ADR-017: HTTP Request Idempotency via Client-Supplied Keys","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"The last Trade-off above is the one this revision addresses, and it does so by changing what is required. Nothing here makes an endpoint idempotent. What it requires is that…"},"161":{"u":"/docs/adr/017-request-idempotency.html#revision-2026-10-01","d":"ADR-017: HTTP Request Idempotency via Client-Supplied Keys","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The Decision and Trade-offs are corrected to the filter as it runs today. Four statements had drifted. The cache-key subject is FindUserIdValue() (sub, then…"},"162":{"u":"/docs/adr/017-request-idempotency.html#related","d":"ADR-017: HTTP Request Idempotency via Client-Supplied Keys","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (handler idempotency for outbox/event consumers, a distinct concern), ADR-013 (Result is the response the filter caches/replays), ADR-014 (the filter keeps the handler…"},"163":{"u":"/docs/adr/018-polyglot-persistence.html","d":"ADR-018: Polyglot Persistence (Multiple Storage Engines Behind One Model)","k":"Architecture Decision Records"},"164":{"u":"/docs/adr/018-polyglot-persistence.html#status","d":"ADR-018: Polyglot Persistence (Multiple Storage Engines Behind One Model)","k":"Architecture Decision Records","t":"Status","x":"Accepted. The framework plumbing is complete, covered by unit and integration tests (DataSourceResolverTests, CrossDataSourceDegradeConventionTests, EntityTypeConfigurationTests,…"},"165":{"u":"/docs/adr/018-polyglot-persistence.html#context","d":"ADR-018: Polyglot Persistence (Multiple Storage Engines Behind One Model)","k":"Architecture Decision Records","t":"Context","x":"ADR-006 (database-per-service) splits storage along the Name axis: several physically separate databases, all on the same engine (SQL Server), one per service. A second,…"},"166":{"u":"/docs/adr/018-polyglot-persistence.html#decision","d":"ADR-018: Polyglot Persistence (Multiple Storage Engines Behind One Model)","k":"Architecture Decision Records","t":"Decision","x":"Support four storage engines behind one entity model and one set of repository abstractions, selected per entity configuration. 1. DataSource engine enum: SQLServer (full…"},"167":{"u":"/docs/adr/018-polyglot-persistence.html#rationale","d":"ADR-018: Polyglot Persistence (Multiple Storage Engines Behind One Model)","k":"Architecture Decision Records","t":"Rationale","x":"- Right store per access pattern, as a configuration decision. The engine becomes an attribute on a configuration class, not a rewrite. The same domain entity, application…"},"168":{"u":"/docs/adr/018-polyglot-persistence.html#trade-offs","d":"ADR-018: Polyglot Persistence (Multiple Storage Engines Behind One Model)","k":"Architecture Decision Records","t":"Trade-offs","x":"- No cross-engine JOINs, FKs, or transactions. This is the ADR-006 cost made sharper: across engines it is a hard limit, not a deployment choice. A query spanning engines (for…"},"169":{"u":"/docs/adr/018-polyglot-persistence.html#related","d":"ADR-018: Polyglot Persistence (Multiple Storage Engines Behind One Model)","k":"Architecture Decision Records","t":"Related","x":"ADR-006 (database-per-service: the Name axis this ADR's Engine axis is orthogonal to; they share DataSourceKey), ADR-002 (navigation populators bridge the relationships the…"},"170":{"u":"/docs/adr/018-polyglot-persistence.html#revision-2026-08-29-engine-substitution-for-a-single-engine-host","d":"ADR-018: Polyglot Persistence (Multiple Storage Engines Behind One Model)","k":"Architecture Decision Records","t":"Revision (2026-08-29): engine substitution for a single-engine host","x":"Decision item 4 says engines never collapse into each other, and that held while every host in this workspace configured SQL Server. A host that configures only SQLite (or only…"},"171":{"u":"/docs/adr/018-polyglot-persistence.html#revision-2026-10-01","d":"ADR-018: Polyglot Persistence (Multiple Storage Engines Behind One Model)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision changed; this pass corrects statements that overreached the code and refreshes stale citations. Decision items 5 and 6, the Trade-offs and Related now say that the…"},"172":{"u":"/docs/adr/019-rate-limiting.html","d":"ADR-019: Layered Rate Limiting with an Authenticated-Only Global Limiter","k":"Architecture Decision Records"},"173":{"u":"/docs/adr/019-rate-limiting.html#status","d":"ADR-019: Layered Rate Limiting with an Authenticated-Only Global Limiter","k":"Architecture Decision Records","t":"Status","x":"Accepted. Revised 2026-08-01 (the auth-ip per-IP anonymous-authentication limiter, which the shared auth controller applies to login and register by default, is recorded as the…"},"174":{"u":"/docs/adr/019-rate-limiting.html#context","d":"ADR-019: Layered Rate Limiting with an Authenticated-Only Global Limiter","k":"Architecture Decision Records","t":"Context","x":"Every service exposes read and write endpoints to the public internet through the gateway (ADR-008). Abusive or runaway clients (scrapers, credential stuffing, retry storms, a…"},"175":{"u":"/docs/adr/019-rate-limiting.html#decision","d":"ADR-019: Layered Rate Limiting with an Authenticated-Only Global Limiter","k":"Architecture Decision Records","t":"Decision","x":"Rate limiting is layered, and the always-on global limiter is authenticated-only. 1. A global limiter that only caps authenticated callers. AddCommonRateLimiting…"},"176":{"u":"/docs/adr/019-rate-limiting.html#rationale","d":"ADR-019: Layered Rate Limiting with an Authenticated-Only Global Limiter","k":"Architecture Decision Records","t":"Rationale","x":"- Limit the traffic that is both attributable and expensive. An authenticated request is tied to a principal and usually drives the database; capping per-principal stops a single…"},"177":{"u":"/docs/adr/019-rate-limiting.html#trade-offs","d":"ADR-019: Layered Rate Limiting with an Authenticated-Only Global Limiter","k":"Architecture Decision Records","t":"Trade-offs","x":"- The global limiter only protects the authenticated surface. The anonymous surface is covered endpoint by endpoint instead: the anonymous credential endpoints (login, register,…"},"178":{"u":"/docs/adr/019-rate-limiting.html#revision-2026-08-18","d":"ADR-019: Layered Rate Limiting with an Authenticated-Only Global Limiter","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"The layering above is unchanged: the global limiter is still authenticated-only, infrastructure and anonymous traffic are still exempt, auth-ip still covers login and register by…"},"179":{"u":"/docs/adr/019-rate-limiting.html#revision-2026-09-07","d":"ADR-019: Layered Rate Limiting with an Authenticated-Only Global Limiter","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The layering is unchanged: the global limiter is still authenticated-only, login and register still carry auth-ip, and infrastructure paths are still exempt. Four things below it…"},"180":{"u":"/docs/adr/019-rate-limiting.html#revision-2026-09-10","d":"ADR-019: Layered Rate Limiting with an Authenticated-Only Global Limiter","k":"Architecture Decision Records","t":"Revision (2026-09-10)","x":"Both gateways now scope auth-tight the same way, and the trusted-caller exemption's client half ships in the framework. Two items, both landed. 1. Store's gateway splits the…"},"181":{"u":"/docs/adr/019-rate-limiting.html#revision-2026-10-01","d":"ADR-019: Layered Rate Limiting with an Authenticated-Only Global Limiter","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Two current-state statements in the Decision were corrected. The ADC Conference output-cache list now reads as a sample of a larger…"},"182":{"u":"/docs/adr/019-rate-limiting.html#related","d":"ADR-019: Layered Rate Limiting with an Authenticated-Only Global Limiter","k":"Architecture Decision Records","t":"Related","x":"ADR-004 (the JWKS/discovery traffic the limiter exempts, and the authenticated principal it keys on), ADR-008 (the gateway edge this protects), ADR-017 (request idempotency, the…"},"183":{"u":"/docs/adr/020-permission-based-authorization.html","d":"ADR-020: Permission-Based Authorization Layered over Roles","k":"Architecture Decision Records"},"184":{"u":"/docs/adr/020-permission-based-authorization.html#status","d":"ADR-020: Permission-Based Authorization Layered over Roles","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-25, amended 2026-07-10 and 2026-08-23). Revised 2026-09-07 (a fallback policy requiring an authenticated caller is on by default, so anonymity has to be…"},"185":{"u":"/docs/adr/020-permission-based-authorization.html#context","d":"ADR-020: Permission-Based Authorization Layered over Roles","k":"Architecture Decision Records","t":"Context","x":"The default answer in ASP.NET Core is pure role-based access control (RBAC): an endpoint declares [Authorize(Policy = \"RequireOrganizer\")] against a named policy that calls…"},"186":{"u":"/docs/adr/020-permission-based-authorization.html#decision","d":"ADR-020: Permission-Based Authorization Layered over Roles","k":"Architecture Decision Records","t":"Decision","x":"Authorize on capabilities resolved from roles: a permission layer over RBAC, and the framework's one authorization model. Nothing is pre-registered per role name. - A central…"},"187":{"u":"/docs/adr/020-permission-based-authorization.html#rationale","d":"ADR-020: Permission-Based Authorization Layered over Roles","k":"Architecture Decision Records","t":"Rationale","x":"- Capabilities decouple endpoints from roles. A route says what it does (conference:sessions:manage), and who may do it is a registry decision, so adding ContentEditor with a…"},"188":{"u":"/docs/adr/020-permission-based-authorization.html#trade-offs","d":"ADR-020: Permission-Based Authorization Layered over Roles","k":"Architecture Decision Records","t":"Trade-offs","x":"- It is still RBAC, not ABAC. The model resolves role to permission; it does not evaluate resource or attribute conditions. Per-resource ownership (\"a customer may read only…"},"189":{"u":"/docs/adr/020-permission-based-authorization.html#revision-2026-09-07","d":"ADR-020: Permission-Based Authorization Layered over Roles","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Permission-based authorization is unchanged. What changed is the default for an endpoint that declares nothing (SEC-Common-16 / SEC-ADC-03). 1. An undecorated endpoint now…"},"190":{"u":"/docs/adr/020-permission-based-authorization.html#revision-2026-10-01","d":"ADR-020: Permission-Based Authorization Layered over Roles","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed: the framework still declares no role names and still gates its own endpoints and navigation on capabilities. The role-vocabulary paragraph now…"},"191":{"u":"/docs/adr/020-permission-based-authorization.html#related","d":"ADR-020: Permission-Based Authorization Layered over Roles","k":"Architecture Decision Records","t":"Related","x":"ADR-004 (the authenticated principal and claims this keys on, including the optional permission claim), ADR-008 (each extracted service authorizes independently, so the registry…"},"192":{"u":"/docs/adr/021-consumer-inbox-idempotency.html","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records"},"193":{"u":"/docs/adr/021-consumer-inbox-idempotency.html#status","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-09; adoption reviewed 2026-07-15, inventory refreshed 2026-10-01). Revised 2026-08-18 (the inbox stays opt-in, but being off is no longer silent: a…"},"194":{"u":"/docs/adr/021-consumer-inbox-idempotency.html#context","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records","t":"Context","x":"ADR-003 makes integration-event delivery at-least-once: the outbox guarantees a published event is not lost, and the MassTransit broker redelivers on consumer failure.…"},"195":{"u":"/docs/adr/021-consumer-inbox-idempotency.html#decision","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records","t":"Decision","x":"Add an opt-in inbox that records each successfully-processed integration event by its MessageId and skips redeliveries. - Every event carries a MessageId. BaseDomainEvent stamps…"},"196":{"u":"/docs/adr/021-consumer-inbox-idempotency.html#rationale","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records","t":"Rationale","x":"- Dedup once, not in every handler. A single consume-edge check turns \"every handler author must remember to be idempotent against redelivery\" into a framework guarantee for the…"},"197":{"u":"/docs/adr/021-consumer-inbox-idempotency.html#trade-offs","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records","t":"Trade-offs","x":"- Not exactly-once. The crash-after-handler-before-inbox window reprocesses once, so handlers must stay idempotent for it; the inbox narrows the duplicate window, it does not…"},"198":{"u":"/docs/adr/021-consumer-inbox-idempotency.html#revision-2026-09-07","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Inbox idempotency is unchanged. The names the consumer endpoints take are not (SEC-Common-53). MessageBus:EndpointPrefix left unset used to mean \"no prefix\"; it now defaults to…"},"199":{"u":"/docs/adr/021-consumer-inbox-idempotency.html#related","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (the outbox and at-least-once delivery whose consumer side this deduplicates; handler idempotency is still required for the crash window), ADR-006 (the inbox lives in the…"},"200":{"u":"/docs/adr/021-consumer-inbox-idempotency.html#revision-2026-08-18","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"The decision is unchanged: the inbox is still opt-in and NoOpInboxStore is still the default. What changed is that the default is now loud. 1. A broker-connected host with no…"},"201":{"u":"/docs/adr/021-consumer-inbox-idempotency.html#revision-2026-08-26","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records","t":"Revision (2026-08-26)","x":"Two changes, and the first one reverses this record's central choice. The inbox is no longer opt-in where redelivery is possible, and its row is no longer a separate write. 1.…"},"202":{"u":"/docs/adr/021-consumer-inbox-idempotency.html#revision-2026-09-11","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records","t":"Revision (2026-09-11)","x":"Dedup semantics are unchanged: same MessageId key, same TryBeginAsync to handlers to CompleteAsync path, same staged row, same unique index as the race guard. What changed is…"},"203":{"u":"/docs/adr/021-consumer-inbox-idempotency.html#revision-2026-10-01","d":"ADR-021: Consumer-Side Inbox for Integration-Event Idempotency","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision changed. The consumer inventory did: ADC Conference now consumes UserDeleted beside UserRegistered…"},"204":{"u":"/docs/adr/022-browser-session-cookie-auth.html","d":"ADR-022: Browser Session-Cookie Authentication for Blazor SSR","k":"Architecture Decision Records"},"205":{"u":"/docs/adr/022-browser-session-cookie-auth.html#status","d":"ADR-022: Browser Session-Cookie Authentication for Blazor SSR","k":"Architecture Decision Records","t":"Status","x":"Accepted."},"206":{"u":"/docs/adr/022-browser-session-cookie-auth.html#context","d":"ADR-022: Browser Session-Cookie Authentication for Blazor SSR","k":"Architecture Decision Records","t":"Context","x":"The apps are Blazor Web Apps: a server-rendered (SSR) prerender pass runs on the first request, then an interactive phase (Blazor Server or WebAssembly) takes over.…"},"207":{"u":"/docs/adr/022-browser-session-cookie-auth.html#decision","d":"ADR-022: Browser Session-Cookie Authentication for Blazor SSR","k":"Architecture Decision Records","t":"Decision","x":"Carry the session in HttpOnly cookies and add an authentication scheme that reads them during SSR prerender. The mechanism ships in MMCA.Common.API (SessionCookies/) with a…"},"208":{"u":"/docs/adr/022-browser-session-cookie-auth.html#rationale","d":"ADR-022: Browser Session-Cookie Authentication for Blazor SSR","k":"Architecture Decision Records","t":"Rationale","x":"- Fixes the fresh-GET prerender gap. Without a server-readable session, every deep-link or F5 to an [Authorize] page would redirect to /login despite a valid session; the cookie…"},"209":{"u":"/docs/adr/022-browser-session-cookie-auth.html#trade-offs","d":"ADR-022: Browser Session-Cookie Authentication for Blazor SSR","k":"Architecture Decision Records","t":"Trade-offs","x":"- A non-validating auth scheme exists. SessionCookieAuthenticationHandler trusts a cookie it does not cryptographically verify. This is sound only because (a) the cookie is…"},"210":{"u":"/docs/adr/022-browser-session-cookie-auth.html#related","d":"ADR-022: Browser Session-Cookie Authentication for Blazor SSR","k":"Architecture Decision Records","t":"Related","x":"ADR-004 (the JWT/JWKS validation the API performs on every call, which is why the SSR handler can skip signature validation), ADR-008 (the gateway and topology the UI talks to),…"},"211":{"u":"/docs/adr/023-security-response-headers.html","d":"ADR-023: Centralized Security-Response-Headers Middleware with a Pluggable CSP","k":"Architecture Decision Records"},"212":{"u":"/docs/adr/023-security-response-headers.html#status","d":"ADR-023: Centralized Security-Response-Headers Middleware with a Pluggable CSP","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-02). Revised 2026-09-01 (the static default is now a complete hardened baseline: it ships script-src 'self' 'wasm-unsafe-eval' and style-src 'self'…"},"213":{"u":"/docs/adr/023-security-response-headers.html#context","d":"ADR-023: Centralized Security-Response-Headers Middleware with a Pluggable CSP","k":"Architecture Decision Records","t":"Context","x":"Every client-facing host (the YARP Gateway and the Blazor UI web host in each app) must stamp the same hardened HTTP response headers: X-Content-Type-Options, X-Frame-Options,…"},"214":{"u":"/docs/adr/023-security-response-headers.html#decision","d":"ADR-023: Centralized Security-Response-Headers Middleware with a Pluggable CSP","k":"Architecture Decision Records","t":"Decision","x":"Ship one security-headers middleware in MMCA.Common.Aspire (MMCA.Common.Aspire.Security), registered with AddCommonSecurityHeaders(configuration?, configure?) and inserted early…"},"215":{"u":"/docs/adr/023-security-response-headers.html#rationale","d":"ADR-023: Centralized Security-Response-Headers Middleware with a Pluggable CSP","k":"Architecture Decision Records","t":"Rationale","x":"- One hardened default, defined once. Centralizing the header set removes per-host drift and makes a new edge host secure by default rather than by remembering to copy headers. -…"},"216":{"u":"/docs/adr/023-security-response-headers.html#trade-offs","d":"ADR-023: Centralized Security-Response-Headers Middleware with a Pluggable CSP","k":"Architecture Decision Records","t":"Trade-offs","x":"- The baseline is complete, not maximal. Shipping a policy that works for a Blazor/MudBlazor host means the default carries style-src 'unsafe-inline' (MudBlazor injects styles at…"},"217":{"u":"/docs/adr/023-security-response-headers.html#revision-2026-09-07","d":"ADR-023: Centralized Security-Response-Headers Middleware with a Pluggable CSP","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Two changes from the 2026-09-07 security review. 1. Credential-carrying paths get a stricter referrer and cache posture. SecurityHeadersSettings.CredentialPathPrefixes…"},"218":{"u":"/docs/adr/023-security-response-headers.html#revision-2026-09-10","d":"ADR-023: Centralized Security-Response-Headers Middleware with a Pluggable CSP","k":"Architecture Decision Records","t":"Revision (2026-09-10)","x":"Both UI origins are now pinned by a test, not just Store's. ADC has MMCA.ADC/Tests/Hosts/MMCA.ADC.UI.Web.Tests/SecurityHeadersTests.cs:17-18, a one-line subclass of the…"},"219":{"u":"/docs/adr/023-security-response-headers.html#revision-2026-09-19","d":"ADR-023: Centralized Security-Response-Headers Middleware with a Pluggable CSP","k":"Architecture Decision Records","t":"Revision (2026-09-19)","x":"The Blazor policy is wider than the Decision above recorded, and the UI host's forwarded-headers options clear their allow-lists on purpose. The provider is no longer the copy…"},"220":{"u":"/docs/adr/023-security-response-headers.html#revision-2026-10-01","d":"ADR-023: Centralized Security-Response-Headers Middleware with a Pluggable CSP","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; one Trade-offs statement was corrected and the current homes of the forwarded-headers posture are recorded. 1. The registration-order trade-off…"},"221":{"u":"/docs/adr/023-security-response-headers.html#related","d":"ADR-023: Centralized Security-Response-Headers Middleware with a Pluggable CSP","k":"Architecture Decision Records","t":"Related","x":"ADR-019 (rate limiting, the other always-on edge protection living in the same Aspire layer), ADR-022 (browser session-cookie auth, the other browser-edge security control),…"},"222":{"u":"/docs/adr/024-push-notifications.html","d":"ADR-024: Two-Channel User Notifications (Transient SignalR Push + Durable Inbox)","k":"Architecture Decision Records"},"223":{"u":"/docs/adr/024-push-notifications.html#status","d":"ADR-024: Two-Channel User Notifications (Transient SignalR Push + Durable Inbox)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-27, amended 2026-07-15). Revised 2026-08-07 (transactional email recorded as an app-level concern outside the channel model; see Revision below). Revised…"},"224":{"u":"/docs/adr/024-push-notifications.html#context","d":"ADR-024: Two-Channel User Notifications (Transient SignalR Push + Durable Inbox)","k":"Architecture Decision Records","t":"Context","x":"The framework needs to deliver user-facing notifications (an organizer broadcasting a schedule change, a per-user alert). Two delivery models each fail on their own. A pure…"},"225":{"u":"/docs/adr/024-push-notifications.html#decision","d":"ADR-024: Two-Channel User Notifications (Transient SignalR Push + Durable Inbox)","k":"Architecture Decision Records","t":"Decision","x":"Deliver notifications over two channels from one application use case, with the transport and the recipient policy both behind abstractions. - A durable per-user inbox plus a…"},"226":{"u":"/docs/adr/024-push-notifications.html#rationale","d":"ADR-024: Two-Channel User Notifications (Transient SignalR Push + Durable Inbox)","k":"Architecture Decision Records","t":"Rationale","x":"- Each channel covers the other's failure mode. The inbox guarantees eventual delivery to offline users; the push gives connected users immediacy. Persisting the inbox before…"},"227":{"u":"/docs/adr/024-push-notifications.html#trade-offs","d":"ADR-024: Two-Channel User Notifications (Transient SignalR Push + Durable Inbox)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Fan-out write amplification. One UserNotification row is written per recipient, so a broadcast to a large audience is a large insert. This is fine for the current per-event /…"},"228":{"u":"/docs/adr/024-push-notifications.html#revision-2026-09-07","d":"ADR-024: Two-Channel User Notifications (Transient SignalR Push + Durable Inbox)","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Two bounds were added under the delivery model, from the 2026-09-07 security review. 1. A connection cap per user. NotificationHub refuses a connection once the caller already…"},"229":{"u":"/docs/adr/024-push-notifications.html#related","d":"ADR-024: Two-Channel User Notifications (Transient SignalR Push + Durable Inbox)","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (the outbox dual-dispatch path, which is distinct: that carries service-to-service integration events, this carries user-facing notifications), ADR-004 (the /hubs…"},"230":{"u":"/docs/adr/024-push-notifications.html#revision-2026-08-07","d":"ADR-024: Two-Channel User Notifications (Transient SignalR Push + Durable Inbox)","k":"Architecture Decision Records","t":"Revision (2026-08-07)","x":"Records transactional email, a delivery path the channel model above never mentions. The decision is unchanged: this closes a documentation gap so the asymmetry reads as…"},"231":{"u":"/docs/adr/024-push-notifications.html#revision-2026-10-01","d":"ADR-024: Two-Channel User Notifications (Transient SignalR Push + Durable Inbox)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The opt-in deduplication key is now scoped to the sender. SendPushNotificationHandler no longer stores or looks up the client-supplied DedupKey as-is: it derives the persisted…"},"232":{"u":"/docs/adr/025-startup-warmup-readiness.html","d":"ADR-025: Startup Warm-Up and Readiness Gating for Cold-Start Mitigation","k":"Architecture Decision Records"},"233":{"u":"/docs/adr/025-startup-warmup-readiness.html#status","d":"ADR-025: Startup Warm-Up and Readiness Gating for Cold-Start Mitigation","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-27). Revised 2026-07-28: /health/ready now excludes optional-tagged checks as well as live-tagged ones (see Decision), and the absence of a warm-up timeout was…"},"234":{"u":"/docs/adr/025-startup-warmup-readiness.html#context","d":"ADR-025: Startup Warm-Up and Readiness Gating for Cold-Start Mitigation","k":"Architecture Decision Records","t":"Context","x":"On the Azure Container Apps Consumption plan a replica that has been idle is CPU-throttled, and a scale-from-zero or scaled-out replica starts cold. The first authenticated…"},"235":{"u":"/docs/adr/025-startup-warmup-readiness.html#decision","d":"ADR-025: Startup Warm-Up and Readiness Gating for Cold-Start Mitigation","k":"Architecture Decision Records","t":"Decision","x":"Ship a small warm-up subsystem in MMCA.Common.Aspire, wired into AddServiceDefaults() so every host gets it. - A readiness gate that starts closed. WarmupReadinessGate…"},"236":{"u":"/docs/adr/025-startup-warmup-readiness.html#rationale","d":"ADR-025: Startup Warm-Up and Readiness Gating for Cold-Start Mitigation","k":"Architecture Decision Records","t":"Rationale","x":"- Keep cold replicas out of rotation, briefly. Gating readiness on warm-up means the platform does not send a user request to a replica that is still doing its first handshakes,…"},"237":{"u":"/docs/adr/025-startup-warmup-readiness.html#trade-offs","d":"ADR-025: Startup Warm-Up and Readiness Gating for Cold-Start Mitigation","k":"Architecture Decision Records","t":"Trade-offs","x":"- A replica can enter rotation not fully warm. The gate is opened in a finally once the Task.WhenAll over every registered task returns, that is, once each task has completed,…"},"238":{"u":"/docs/adr/025-startup-warmup-readiness.html#revision-2026-10-01","d":"ADR-025: Startup Warm-Up and Readiness Gating for Cold-Start Mitigation","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Citations were refreshed: the /health/ready predicate, the MapCachedHealthChecks helper and the uncached /alive mapping now live in…"},"239":{"u":"/docs/adr/025-startup-warmup-readiness.html#related","d":"ADR-025: Startup Warm-Up and Readiness Gating for Cold-Start Mitigation","k":"Architecture Decision Records","t":"Related","x":"ADR-004 (the OIDC discovery document the built-in task pre-fetches, and the auth-side view of the same cold-start), ADR-009 (the Polly resilience pipeline that absorbs the lazy…"},"240":{"u":"/docs/adr/026-caching-strategy.html","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records"},"241":{"u":"/docs/adr/026-caching-strategy.html#status","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-27, amended 2026-07-10, 2026-07-23, 2026-07-25, 2026-08-14). Amended by ADR-077 (2026-08-13): Tier 1's substrate gains a third, opt-in implementation…"},"242":{"u":"/docs/adr/026-caching-strategy.html#context","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Context","x":"The framework needs caching in two distinct places. Inside the application pipeline, query results are memoized and invalidated on mutation (the Caching decorators of ADR-014,…"},"243":{"u":"/docs/adr/026-caching-strategy.html#decision","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Decision","x":"Cache in two tiers, each with its own substrate. - One abstraction. ICacheService (MMCA.Common.Application/Interfaces/ICacheService.cs) exposes GetAsync / SetAsync / RemoveAsync…"},"244":{"u":"/docs/adr/026-caching-strategy.html#rationale","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Rationale","x":"- One substrate, swapped by environment. Keeping ICacheService as the only thing application code sees lets the deployment decide memory vs distributed. The auto-swap (presence…"},"245":{"u":"/docs/adr/026-caching-strategy.html#trade-offs","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Trade-offs","x":"- Memory mode is per-replica. In the in-process store each replica caches independently; a scaled-out deployment that did not wire Redis would see cross-replica staleness bounded…"},"246":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-09-07","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Four changes from the 2026-09-07 security review. The tiers themselves are unchanged. 1. Tier-1 keys are caller-scoped where the result is caller-scoped (SEC-Common-19 /…"},"247":{"u":"/docs/adr/026-caching-strategy.html#related","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Related","x":"ADR-014 (the Caching decorators and IQueryCacheable / ICacheInvalidating markers that consume this substrate), ADR-019 (output caching as the anonymous-traffic lever, and…"},"248":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-07-24","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-07-24)","x":"Three substrate corrections from a code review. 1. An optional key namespace (Cache:KeyPrefix). Services sharing one cache instance also share one keyspace, and nothing stopped…"},"249":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-07-25","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-07-25)","x":"An audit against the code. No behavior changed; the ADR text did. 1. The IncrementAsync entry above was wrong. It described a Redis INCR override. There is no such override, and…"},"250":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-07-28","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-07-28)","x":"Line anchors only, re-verified against the current source. No decision, no behavior, and no substantive prose changed. 1. Tier 2. Store Catalog's…"},"251":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-08-01","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-08-01)","x":"Line anchors only, re-verified against the current source. No decision, no behavior, and no substantive prose changed. 1. AddCaching. Now at…"},"252":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-08-07","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-08-07)","x":"Line anchors only, re-verified against the current source. No decision, no behavior, and no substantive prose changed. 1. AddCaching. Now at…"},"253":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-08-13","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-08-13)","x":"Tier 1 is amended by ADR-077, which is where the decision and its trade-offs are recorded. The three points that change the reading of this record: 1. A third substrate, opted…"},"254":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-08-14","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-08-14)","x":"One substrate correction plus a line-anchor re-verification. No decision and no behavior changed. 1. The 30-second default now has a named home, CacheOptions.DefaultDuration.…"},"255":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-08-18","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"Every previous revision moved Tier 1. This one moves Tier 2, and it is the first change to the output-cache edge since ADR-040. Tier 2 as decided here is per-process by…"},"256":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-08-23","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-08-23)","x":"One correction of substance plus a line-anchor re-verification. No decision and no behavior changed. 1. The counter trade-off now names the contradiction a reader will hit.…"},"257":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-08-31","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-08-31)","x":"Line anchors only, re-verified against the current source. No decision, no behavior, and no substantive prose changed. 1. AddCaching. Now at…"},"258":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-09-01","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-09-01)","x":"One amendment of substance (an optional third tier is recorded) plus line anchors for the files the 2026-08-31 entry did not re-read. No behavior changed, and neither server tier…"},"259":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-09-03","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-09-03)","x":"Two substrate corrections plus a line-anchor and file-path re-verification. No decision changed; what changed is where the wiring lives and which substrate the applications…"},"260":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-09-25","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-09-25)","x":"One wiring convergence, one count correction, and a line-anchor re-verification of the service call sites and the substrate registrations. No decision changed, and the ADC-only…"},"261":{"u":"/docs/adr/026-caching-strategy.html#revision-2026-10-01","d":"ADR-026: Two-Tier Caching: a Swappable ICacheService Substrate plus an HTTP Output-Cache Edge","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"One wiring correction, one recorded client-tier detail, and a line-anchor re-verification. No decision and no rationale changed. 1. The hybrid opt-in is a framework helper now,…"},"262":{"u":"/docs/adr/027-multi-locale-i18n.html","d":"ADR-027: Multi-Locale Internationalization (Supersedes ADR-011)","k":"Architecture Decision Records"},"263":{"u":"/docs/adr/027-multi-locale-i18n.html#status","d":"ADR-027: Multi-Locale Internationalization (Supersedes ADR-011)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-27, amended 2026-07-02, 2026-07-03, 2026-07-09, 2026-07-29, and 2026-09-15: the MudBlazor localization interceptor is replaced so no dependency assigns the…"},"264":{"u":"/docs/adr/027-multi-locale-i18n.html#context","d":"ADR-027: Multi-Locale Internationalization (Supersedes ADR-011)","k":"Architecture Decision Records","t":"Context","x":"ADR-011 recorded single-locale (en-US) as a deliberate, revisitable non-goal and sketched what re-introducing i18n would entail. That revisit has now happened: the framework adds…"},"265":{"u":"/docs/adr/027-multi-locale-i18n.html#decision","d":"ADR-027: Multi-Locale Internationalization (Supersedes ADR-011)","k":"Architecture Decision Records","t":"Decision","x":"1. Supported cultures are an explicit allowlist: en-US (default) + es. Adding a locale is adding a .es.resx sibling set and one allowlist entry, not new infrastructure. 2.…"},"266":{"u":"/docs/adr/027-multi-locale-i18n.html#rationale","d":"ADR-027: Multi-Locale Internationalization (Supersedes ADR-011)","k":"Architecture Decision Records","t":"Rationale","x":"- Keying error localization on the existing Error.Code is the cheapest correct extension point. The codes are already stable and already cross the wire; localizing at the edge…"},"267":{"u":"/docs/adr/027-multi-locale-i18n.html#trade-offs","d":"ADR-027: Multi-Locale Internationalization (Supersedes ADR-011)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Every view and every user-facing message is touched: a large, mostly mechanical sweep, accepted as the cost ADR-011 always named. - WASM Spanish formatting needs ICU…"},"268":{"u":"/docs/adr/027-multi-locale-i18n.html#revision-2026-10-01","d":"ADR-027: Multi-Locale Internationalization (Supersedes ADR-011)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; four statements were corrected to match the code and several citations were refreshed. Decision 2: the composite-key example now matches the…"},"269":{"u":"/docs/adr/027-multi-locale-i18n.html#related","d":"ADR-027: Multi-Locale Internationalization (Supersedes ADR-011)","k":"Architecture Decision Records","t":"Related","x":"ADR-011 (superseded), ADR-013 (the Error.Code this localizes on), ADR-015 (the i18n gates now live here: the MA0076 culture-less formatting build gate and the…"},"270":{"u":"/docs/adr/028-dark-theme-mode.html","d":"ADR-028: Day/Dark Theme Mode","k":"Architecture Decision Records"},"271":{"u":"/docs/adr/028-dark-theme-mode.html#status","d":"ADR-028: Day/Dark Theme Mode","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-27; revised 2026-07-15; revised 2026-08-31)."},"272":{"u":"/docs/adr/028-dark-theme-mode.html#context","d":"ADR-028: Day/Dark Theme Mode","k":"Architecture Decision Records","t":"Context","x":"MMCATheme (MMCA.Common.UI/Theme/MMCATheme.cs) has always defined a complete, brand-tuned PaletteDark alongside PaletteLight, but MudThemeProvider was hard-wired to light: no…"},"273":{"u":"/docs/adr/028-dark-theme-mode.html#decision","d":"ADR-028: Day/Dark Theme Mode","k":"Architecture Decision Records","t":"Decision","x":"1. Bind the existing theme. The shared MainLayout renders a single component (MMCA.Common.UI/Layout/MainLayout.razor:14), which owns the four Mud providers plus the Day/Dark…"},"274":{"u":"/docs/adr/028-dark-theme-mode.html#rationale","d":"ADR-028: Day/Dark Theme Mode","k":"Architecture Decision Records","t":"Rationale","x":"- Reusing the i18n cookie/profile machinery means one persistence model for both user preferences, instead of two subtly different ones. Theme and locale are the same shape of…"},"275":{"u":"/docs/adr/028-dark-theme-mode.html#trade-offs","d":"ADR-028: Day/Dark Theme Mode","k":"Architecture Decision Records","t":"Trade-offs","x":"- The same FOUC hazard as locale is not yet closed for theme. The SSR data-theme/inline-script read is unimplemented (Decision 3), so the first paint can briefly flash the wrong…"},"276":{"u":"/docs/adr/028-dark-theme-mode.html#revision-2026-10-01","d":"ADR-028: Day/Dark Theme Mode","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Anchor refresh only: no decision or rationale changed. The snackbar live-region wrapper above the @code block moved the MmcaThemeProviders members, so the Theme parameter, the…"},"277":{"u":"/docs/adr/028-dark-theme-mode.html#related","d":"ADR-028: Day/Dark Theme Mode","k":"Architecture Decision Records","t":"Related","x":"ADR-027 (shares the cookie source-of-truth and the User preference migration, and is the model for the theme no-flash SSR bootstrap that is not yet wired), ADR-022 (the SSR…"},"278":{"u":"/docs/adr/029-authentication-brute-force-protection.html","d":"ADR-029: Authentication Brute-Force Protection and Registration Throttling","k":"Architecture Decision Records"},"279":{"u":"/docs/adr/029-authentication-brute-force-protection.html#status","d":"ADR-029: Authentication Brute-Force Protection and Registration Throttling","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-27). Updated 2026-07-02 (the check/increment/reset call sequence was hoisted into AuthenticationServiceBase ; the adoption note and the \"convention the consumer…"},"280":{"u":"/docs/adr/029-authentication-brute-force-protection.html#context","d":"ADR-029: Authentication Brute-Force Protection and Registration Throttling","k":"Architecture Decision Records","t":"Context","x":"ADR-019's global rate limiter is principal-keyed: it caps requests per authenticated principal, and anonymous traffic is exempt with one metered exception, the configured…"},"281":{"u":"/docs/adr/029-authentication-brute-force-protection.html#decision","d":"ADR-029: Authentication Brute-Force Protection and Registration Throttling","k":"Architecture Decision Records","t":"Decision","x":"Provide a framework ILoginProtectionService (MMCA.Common.Application.Auth) with a single implementation LoginProtectionService (MMCA.Common.Infrastructure.Auth), registered…"},"282":{"u":"/docs/adr/029-authentication-brute-force-protection.html#rationale","d":"ADR-029: Authentication Brute-Force Protection and Registration Throttling","k":"Architecture Decision Records","t":"Rationale","x":"- Complements ADR-019 rather than duplicating it. ADR-019 carries two limiter layers and this is the third on top of them: its global limiter caps authenticated throughput per…"},"283":{"u":"/docs/adr/029-authentication-brute-force-protection.html#trade-offs","d":"ADR-029: Authentication Brute-Force Protection and Registration Throttling","k":"Architecture Decision Records","t":"Trade-offs","x":"- Cache-scoped state weakens under scale-out without Redis. In memory mode the counters are per-replica and evaporate on restart, so a multi-replica deployment that did not wire…"},"284":{"u":"/docs/adr/029-authentication-brute-force-protection.html#revision-2026-09-07","d":"ADR-029: Authentication Brute-Force Protection and Registration Throttling","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The lockout model is unchanged. Three things about the order and cost of the login path changed, all from the 2026-09-07 security review. 1. The account-state gate runs after the…"},"285":{"u":"/docs/adr/029-authentication-brute-force-protection.html#revision-2026-10-01","d":"ADR-029: Authentication Brute-Force Protection and Registration Throttling","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The login lockout and registration throttle are unchanged. Two current-state statements were corrected. First, ResetPasswordHandlerBase is no longer the only framework call site…"},"286":{"u":"/docs/adr/029-authentication-brute-force-protection.html#alternatives-rejected","d":"ADR-029: Authentication Brute-Force Protection and Registration Throttling","k":"Architecture Decision Records","t":"Alternatives rejected","x":"- Making the failed-attempt and registration counters atomic. The increment in DistributedCacheService.IncrementAsync is a read-modify-write through IDistributedCache and is…"},"287":{"u":"/docs/adr/029-authentication-brute-force-protection.html#related","d":"ADR-029: Authentication Brute-Force Protection and Registration Throttling","k":"Architecture Decision Records","t":"Related","x":"ADR-019 (the layered limiter: a principal-keyed global cap that exempts this anonymous surface, its one metered anonymous exception being the real-time hub paths, plus the per-IP…"},"288":{"u":"/docs/adr/030-startup-sole-migrator.html","d":"ADR-030: Each Service Self-Applies Its Migrations at Startup (Sole Migrator)","k":"Architecture Decision Records"},"289":{"u":"/docs/adr/030-startup-sole-migrator.html#status","d":"ADR-030: Each Service Self-Applies Its Migrations at Startup (Sole Migrator)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-27)."},"290":{"u":"/docs/adr/030-startup-sole-migrator.html#context","d":"ADR-030: Each Service Self-Applies Its Migrations at Startup (Sole Migrator)","k":"Architecture Decision Records","t":"Context","x":"Under database-per-service (ADR-006), each service owns its own database and its own migrations project, so something must apply pending migrations on every deploy. The…"},"291":{"u":"/docs/adr/030-startup-sole-migrator.html#decision","d":"ADR-030: Each Service Self-Applies Its Migrations at Startup (Sole Migrator)","k":"Architecture Decision Records","t":"Decision","x":"In Azure Container Apps, every service host runs ApplicationSettingsDatabaseInitStrategy = Migrate in production and is the sole migrator of its own database: it applies its…"},"292":{"u":"/docs/adr/030-startup-sole-migrator.html#rationale","d":"ADR-030: Each Service Self-Applies Its Migrations at Startup (Sole Migrator)","k":"Architecture Decision Records","t":"Rationale","x":"- One migrator, one mechanism. The code that owns the schema applies the schema; there is no second tool to keep in lockstep and no ordering race between a deploy step and…"},"293":{"u":"/docs/adr/030-startup-sole-migrator.html#trade-offs","d":"ADR-030: Each Service Self-Applies Its Migrations at Startup (Sole Migrator)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Auto-migrate-in-production is what \"None\" exists to prevent. An unintended or destructive migration would ship itself on the next deploy. The apps accept this; the build-time…"},"294":{"u":"/docs/adr/030-startup-sole-migrator.html#related","d":"ADR-030: Each Service Self-Applies Its Migrations at Startup (Sole Migrator)","k":"Architecture Decision Records","t":"Related","x":"ADR-006 (database-per-service: why each service owns and migrates its own database), ADR-025 (readiness gating keeps traffic off a still-migrating replica), ADR-009 (RTO/RPO +…"},"295":{"u":"/docs/adr/030-startup-sole-migrator.html#revision-2026-08-07","d":"ADR-030: Each Service Self-Applies Its Migrations at Startup (Sole Migrator)","k":"Architecture Decision Records","t":"Revision (2026-08-07)","x":"The sole-migrator decision extends to seed data: the same startup owner that applies the schema also runs the module seeders, in the same call, on the same boot. The Decision…"},"296":{"u":"/docs/adr/030-startup-sole-migrator.html#revision-2026-10-01","d":"ADR-030: Each Service Self-Applies Its Migrations at Startup (Sole Migrator)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed: every service host still sets DatabaseInitStrategy = 'Migrate' in production and remains the sole migrator of its database. The Context now…"},"297":{"u":"/docs/adr/031-feature-flag-management.html","d":"ADR-031: Config-Driven Feature Flags with Dual-Surface Enforcement","k":"Architecture Decision Records"},"298":{"u":"/docs/adr/031-feature-flag-management.html#status","d":"ADR-031: Config-Driven Feature Flags with Dual-Surface Enforcement","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-27). Revised 2026-08-18 (a targeting-context accessor is now registered, so the built-in Targeting and Percentage filters give consistent per-user bucketing…"},"299":{"u":"/docs/adr/031-feature-flag-management.html#context","d":"ADR-031: Config-Driven Feature Flags with Dual-Surface Enforcement","k":"Architecture Decision Records","t":"Context","x":"The apps need to decouple release from deploy: ship code dark, flip a kill switch, or roll a feature out to a percentage of users without a redeploy. A flag has to be enforceable…"},"300":{"u":"/docs/adr/031-feature-flag-management.html#decision","d":"ADR-031: Config-Driven Feature Flags with Dual-Surface Enforcement","k":"Architecture Decision Records","t":"Decision","x":"Standardize on Microsoft.FeatureManagement, configured from the \"FeatureManagement\" configuration section and registered once in AddAPI (services.AddFeatureManagement() +…"},"301":{"u":"/docs/adr/031-feature-flag-management.html#rationale","d":"ADR-031: Config-Driven Feature Flags with Dual-Surface Enforcement","k":"Architecture Decision Records","t":"Rationale","x":"- Release decoupled from deploy. A kill switch or a percentage rollout becomes a configuration change, not a code change: the central reason feature management exists. - Two…"},"302":{"u":"/docs/adr/031-feature-flag-management.html#trade-offs","d":"ADR-031: Config-Driven Feature Flags with Dual-Surface Enforcement","k":"Architecture Decision Records","t":"Trade-offs","x":"- The two enforcement points must agree. A flag gated on the controller but not the handler (or vice versa) is a half-protected feature; no fitness rule asserts both are wired,…"},"303":{"u":"/docs/adr/031-feature-flag-management.html#revision-2026-08-18","d":"ADR-031: Config-Driven Feature Flags with Dual-Surface Enforcement","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"Progressive rollout is now usable, because the targeting context exists. The Decision above listed the Percentage / TimeWindow / Targeting filters as \"available\", and the last…"},"304":{"u":"/docs/adr/031-feature-flag-management.html#related","d":"ADR-031: Config-Driven Feature Flags with Dual-Surface Enforcement","k":"Architecture Decision Records","t":"Related","x":"ADR-014 (the decorator pipeline whose outermost slot FeatureGate fills, and the ordering that puts it first, now with Authorization registered directly inside it so a disabled…"},"305":{"u":"/docs/adr/031-feature-flag-management.html#revision-2026-09-11","d":"ADR-031: Config-Driven Feature Flags with Dual-Surface Enforcement","k":"Architecture Decision Records","t":"Revision (2026-09-11)","x":"The expiry gap the Trade-offs recorded is closed. \"The framework provides no expiry or staleness check\" was true from this record's acceptance until now. What it cost was never…"},"306":{"u":"/docs/adr/031-feature-flag-management.html#revision-2026-10-01","d":"ADR-031: Config-Driven Feature Flags with Dual-Surface Enforcement","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The disabled response is not-found, but not anonymous. The Decision and Rationale said both surfaces emit the HandleFailure not-found shape, so a disabled feature is…"},"307":{"u":"/docs/adr/032-password-hashing.html","d":"ADR-032: Password Hashing (PBKDF2-HMAC-SHA512) with Legacy-Hash Backward Compatibility","k":"Architecture Decision Records"},"308":{"u":"/docs/adr/032-password-hashing.html#status","d":"ADR-032: Password Hashing (PBKDF2-HMAC-SHA512) with Legacy-Hash Backward Compatibility","k":"Architecture Decision Records","t":"Status","x":"Superseded by ADR-102 (2026-08-31). Originally Accepted (2026-06-29, adoption note revised 2026-07-06, registration note revised 2026-08-01, call-site hoist recorded 2026-08-23).…"},"309":{"u":"/docs/adr/032-password-hashing.html#context","d":"ADR-032: Password Hashing (PBKDF2-HMAC-SHA512) with Legacy-Hash Backward Compatibility","k":"Architecture Decision Records","t":"Context","x":"Identity stores a credential as a (salt, hash) pair, never plaintext. The framework needs one canonical hasher that every consuming Identity flow shares, so the key-derivation…"},"310":{"u":"/docs/adr/032-password-hashing.html#decision","d":"ADR-032: Password Hashing (PBKDF2-HMAC-SHA512) with Legacy-Hash Backward Compatibility","k":"Architecture Decision Records","t":"Decision","x":"Provide a single IPasswordHasher (MMCA.Common.Application.Interfaces.Infrastructure, IPasswordHasher.cs:6) with one implementation PasswordHasher…"},"311":{"u":"/docs/adr/032-password-hashing.html#rationale","d":"ADR-032: Password Hashing (PBKDF2-HMAC-SHA512) with Legacy-Hash Backward Compatibility","k":"Architecture Decision Records","t":"Rationale","x":"- One framework-owned primitive, not per-app crypto. Putting the algorithm, work factor, salt size, and comparison in a single shared type means a future hardening (raising…"},"312":{"u":"/docs/adr/032-password-hashing.html#trade-offs","d":"ADR-032: Password Hashing (PBKDF2-HMAC-SHA512) with Legacy-Hash Backward Compatibility","k":"Architecture Decision Records","t":"Trade-offs","x":"- The legacy branch is a permanent correctness dependency that looks deletable. Its load-bearing role is invisible from the method body alone, so it is the single most…"},"313":{"u":"/docs/adr/032-password-hashing.html#related","d":"ADR-032: Password Hashing (PBKDF2-HMAC-SHA512) with Legacy-Hash Backward Compatibility","k":"Architecture Decision Records","t":"Related","x":"ADR-004 (cross-service JWT / JWKS authentication: the hasher gates credential verification that issues the tokens that ADR-004 then validates across services), ADR-005…"},"314":{"u":"/docs/adr/032-password-hashing.html#revision-2026-08-23","d":"ADR-032: Password Hashing (PBKDF2-HMAC-SHA512) with Legacy-Hash Backward Compatibility","k":"Architecture Decision Records","t":"Revision (2026-08-23)","x":"The decision is unchanged: one framework-owned IPasswordHasher, PBKDF2-HMAC-SHA512 for new passwords, salt-length dispatch on verification. What changed is where the last two…"},"315":{"u":"/docs/adr/033-resource-ownership-authorization.html","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records"},"316":{"u":"/docs/adr/033-resource-ownership-authorization.html#status","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-02, revised 2026-07-25, 2026-08-01, 2026-08-31). Revised 2026-10-01 (the fail-closed owner gate and the per-record ownership check are now framework code in…"},"317":{"u":"/docs/adr/033-resource-ownership-authorization.html#context","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records","t":"Context","x":"ADR-020 added a permission (capability) layer over RBAC: it answers \"what may this role do\", resolving a role to a permission so an endpoint can require a capability instead of a…"},"318":{"u":"/docs/adr/033-resource-ownership-authorization.html#decision","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records","t":"Decision","x":"Provide a row/resource-level ownership axis in MMCA.Common.API (the Authorization folder), with two enforcement points keyed on the caller's owner claim (customerid by default)…"},"319":{"u":"/docs/adr/033-resource-ownership-authorization.html#rationale","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records","t":"Rationale","x":"- Reject-one and filter-many are genuinely two mechanisms. A single-resource route has an id to compare, so a short action filter that 403s on a mismatch is the cheapest correct…"},"320":{"u":"/docs/adr/033-resource-ownership-authorization.html#trade-offs","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Opt-in per controller/handler. Neither point is automatic: a controller that forgets the [ServiceFilter] or omits the ownership spec from a query leaks across customers, the…"},"321":{"u":"/docs/adr/033-resource-ownership-authorization.html#related","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records","t":"Related","x":"ADR-020 (the role/permission RBAC layer this complements, and whose explicit 020-permission-based-authorization.md:159-160 scope-out this fills), ADR-034 (the generic entity…"},"322":{"u":"/docs/adr/033-resource-ownership-authorization.html#revision-2026-07-25","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records","t":"Revision (2026-07-25)","x":"An audit against the code. No behavior changed; the ADR text did. 1. The per-mutation check's failure shape was described as one branch, and it is two. ValidateOwnershipAsync was…"},"323":{"u":"/docs/adr/033-resource-ownership-authorization.html#revision-2026-08-01","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records","t":"Revision (2026-08-01)","x":"Anchor-only correction. No behavior changed; OrdersController was refactored (a constructor parameter added, GetOwnershipSpecification() and the IsAdmin property extracted,…"},"324":{"u":"/docs/adr/033-resource-ownership-authorization.html#revision-2026-08-31","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records","t":"Revision (2026-08-31)","x":"Behavior changed on both adopters since the 2026-08-01 pass, so this is not an anchor refresh. 1. The ambiguous null specification is now gated.…"},"325":{"u":"/docs/adr/033-resource-ownership-authorization.html#revision-2026-09-10","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records","t":"Revision (2026-09-10)","x":"ADC adopts both enforcement points, so the \"Engagement Bookmarks only\" framing above is no longer the whole inventory. The Adoption text describes ADC through the action-filter…"},"326":{"u":"/docs/adr/033-resource-ownership-authorization.html#revision-2026-10-01","d":"ADR-033: Resource-Ownership Authorization (Row-Level + Action Filter)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The fail-closed gate this record named as a candidate for extraction (Revision 2026-09-10, item 3) is now framework code. MMCA.Common v1.216.0 (MMCA.Common/CHANGELOG.md:26) adds…"},"327":{"u":"/docs/adr/034-generic-entity-query-layer.html","d":"ADR-034: Generic Entity Controllers with a Dynamic Query Contract","k":"Architecture Decision Records"},"328":{"u":"/docs/adr/034-generic-entity-query-layer.html#status","d":"ADR-034: Generic Entity Controllers with a Dynamic Query Contract","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-06-30). Amended (2026-07-23): the filter strategy registry now also covers long/long? via LongFilterStrategy. Amended (2026-07-25): the keyed by-id fast path is…"},"329":{"u":"/docs/adr/034-generic-entity-query-layer.html#context","d":"ADR-034: Generic Entity Controllers with a Dynamic Query Contract","k":"Architecture Decision Records","t":"Context","x":"Every module exposes many entities, and most of them need the same read and write surface: list, page, look up for a dropdown, fetch by id, create, delete. Hand writing a…"},"330":{"u":"/docs/adr/034-generic-entity-query-layer.html#decision","d":"ADR-034: Generic Entity Controllers with a Dynamic Query Contract","k":"Architecture Decision Records","t":"Decision","x":"Give every entity a generic REST resource surface and a bounded dynamic query contract, supplied by two controller bases over a shared query pipeline. 1. Generic read controller.…"},"331":{"u":"/docs/adr/034-generic-entity-query-layer.html#rationale","d":"ADR-034: Generic Entity Controllers with a Dynamic Query Contract","k":"Architecture Decision Records","t":"Rationale","x":"- Write the resource surface once, inherit it everywhere. The verbs, routes, filter contract, pagination, and header are defined once on the two bases; a concrete controller…"},"332":{"u":"/docs/adr/034-generic-entity-query-layer.html#trade-offs","d":"ADR-034: Generic Entity Controllers with a Dynamic Query Contract","k":"Architecture Decision Records","t":"Trade-offs","x":"- The wire contract tracks the entity model. Filterable, sortable, and projectable surface is the entity's property set. A model change is an API change unless mediated by the…"},"333":{"u":"/docs/adr/034-generic-entity-query-layer.html#revision-2026-09-07","d":"ADR-034: Generic Entity Controllers with a Dynamic Query Contract","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The query layer's shape is unchanged. What a caller is allowed to name is not, from the 2026-09-07 security review. 1. Client keys resolve against the DTO contract (SEC-Common-25…"},"334":{"u":"/docs/adr/034-generic-entity-query-layer.html#related","d":"ADR-034: Generic Entity Controllers with a Dynamic Query Contract","k":"Architecture Decision Records","t":"Related","x":"ADR-001 (manual DTO mapping: the generic controllers project through IEntityDTOMapper), ADR-002 (navigation populators: the unsupported-include path), ADR-013 (Result pattern at…"},"335":{"u":"/docs/adr/034-generic-entity-query-layer.html#revision-2026-07-24","d":"ADR-034: Generic Entity Controllers with a Dynamic Query Contract","k":"Architecture Decision Records","t":"Revision (2026-07-24)","x":"Filter and pagination corrections from a code review. The contract shape is unchanged; these close cases where the engine widened a result set instead of narrowing it, or…"},"336":{"u":"/docs/adr/034-generic-entity-query-layer.html#revision-2026-07-25","d":"ADR-034: Generic Entity Controllers with a Dynamic Query Contract","k":"Architecture Decision Records","t":"Revision (2026-07-25)","x":"Citation maintenance from an ADR audit. No decision or behavior changed; the source anchors above were rebased to their current declaration and call-site lines. 1. The fast-path…"},"337":{"u":"/docs/adr/034-generic-entity-query-layer.html#revision-2026-10-01","d":"ADR-034: Generic Entity Controllers with a Dynamic Query Contract","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; this records clarifications and refreshed citations from an ADR audit. 1. MaxPageSize is clamped to the pipeline ceiling. The resolved setting…"},"338":{"u":"/docs/adr/035-optimistic-concurrency.html","d":"ADR-035: Optimistic Concurrency via RowVersion Round-Trip","k":"Architecture Decision Records"},"339":{"u":"/docs/adr/035-optimistic-concurrency.html#status","d":"ADR-035: Optimistic Concurrency via RowVersion Round-Trip","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-02). Revised 2026-09-07 (a conditional write always stamps the aggregate root, so If-Match is enforced even when only child rows changed, and a…"},"340":{"u":"/docs/adr/035-optimistic-concurrency.html#context","d":"ADR-035: Optimistic Concurrency via RowVersion Round-Trip","k":"Architecture Decision Records","t":"Context","x":"Every mutable aggregate in the framework is edited through a load-modify-save handler: the update use case fetches the tracked entity, applies the request, and calls…"},"341":{"u":"/docs/adr/035-optimistic-concurrency.html#decision","d":"ADR-035: Optimistic Concurrency via RowVersion Round-Trip","k":"Architecture Decision Records","t":"Decision","x":"Give every auditable entity a database-managed RowVersion concurrency token, round-trip it through the client as an HTTP entity tag, and stamp the client's last-seen value as…"},"342":{"u":"/docs/adr/035-optimistic-concurrency.html#rationale","d":"ADR-035: Optimistic Concurrency via RowVersion Round-Trip","k":"Architecture Decision Records","t":"Rationale","x":"- Database-managed token over a hand-maintained version field. A SQL Server rowversion auto-increments on the server on every write; no domain code sets or reads it (the setter…"},"343":{"u":"/docs/adr/035-optimistic-concurrency.html#trade-offs","d":"ADR-035: Optimistic Concurrency via RowVersion Round-Trip","k":"Architecture Decision Records","t":"Trade-offs","x":"- The rewrite keys on the conflict outcome, not on its cause. The filter turns any 409 result the action returns under an If-Match request into a 412…"},"344":{"u":"/docs/adr/035-optimistic-concurrency.html#revision-2026-09-07","d":"ADR-035: Optimistic Concurrency via RowVersion Round-Trip","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Two additions from the 2026-09-07 security review. 1. If-Match is enforced even when the root row is otherwise unchanged (SEC-Common-77). IWriteRepository.TouchConcurrencyToken…"},"345":{"u":"/docs/adr/035-optimistic-concurrency.html#revision-2026-10-01","d":"ADR-035: Optimistic Concurrency via RowVersion Round-Trip","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision changed; three current-state statements were corrected and stale citations refreshed. (1) Only tables mapped from an auditable entity carry RowVersion; the…"},"346":{"u":"/docs/adr/035-optimistic-concurrency.html#related","d":"ADR-035: Optimistic Concurrency via RowVersion Round-Trip","k":"Architecture Decision Records","t":"Related","x":"ADR-017 (HTTP request idempotency, which dedups retries of the same request, the mirror-image concern to two distinct edits racing here, and whose declared-intent gate sits at…"},"347":{"u":"/docs/adr/036-external-oauth-login.html","d":"ADR-036: External OAuth Login (Federated Google/GitHub/Apple) with Local-JWT Exchange","k":"Architecture Decision Records"},"348":{"u":"/docs/adr/036-external-oauth-login.html#status","d":"ADR-036: External OAuth Login (Federated Google/GitHub/Apple) with Local-JWT Exchange","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-02, migration attribution corrected 2026-07-06, native-callback redirect branch added 2026-07-17 per ADR-043, email-verified account-takeover guard before…"},"349":{"u":"/docs/adr/036-external-oauth-login.html#context","d":"ADR-036: External OAuth Login (Federated Google/GitHub/Apple) with Local-JWT Exchange","k":"Architecture Decision Records","t":"Context","x":"The framework's Identity story so far is entirely first-party: a user registers with an email and password, the credentials are hashed (ADR-032), and Identity mints its own RS256…"},"350":{"u":"/docs/adr/036-external-oauth-login.html#decision","d":"ADR-036: External OAuth Login (Federated Google/GitHub/Apple) with Local-JWT Exchange","k":"Architecture Decision Records","t":"Decision","x":"Add an opt-in external-login path that federates Google, GitHub and Apple sign-in at the edge and immediately exchanges the external identity for the app's own local JWT pair,…"},"351":{"u":"/docs/adr/036-external-oauth-login.html#rationale","d":"ADR-036: External OAuth Login (Federated Google/GitHub/Apple) with Local-JWT Exchange","k":"Architecture Decision Records","t":"Rationale","x":"- Terminate federation at the edge, keep one internal identity. Exchanging the external principal for a local JWT the moment the callback returns means every downstream concern…"},"352":{"u":"/docs/adr/036-external-oauth-login.html#trade-offs","d":"ADR-036: External OAuth Login (Federated Google/GitHub/Apple) with Local-JWT Exchange","k":"Architecture Decision Records","t":"Trade-offs","x":"- Opt-in per app, and easy to half-wire. The flow needs four cooperating pieces (scheme registration, the controller subclass, the service override, and the OAuthUIBaseUrl…"},"353":{"u":"/docs/adr/036-external-oauth-login.html#revision-2026-09-07","d":"ADR-036: External OAuth Login (Federated Google/GitHub/Apple) with Local-JWT Exchange","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Four changes from the 2026-09-07 security review. 1. The empty credential an external account carries is explicitly non-authenticating (SEC-Common-01). This record already said…"},"354":{"u":"/docs/adr/036-external-oauth-login.html#revision-2026-10-01","d":"ADR-036: External OAuth Login (Federated Google/GitHub/Apple) with Local-JWT Exchange","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Anchor refresh only: no decision or rationale changed. The Decision and Trade-offs citations into ADC's AuthenticationService.cs are re-anchored to the current file…"},"355":{"u":"/docs/adr/036-external-oauth-login.html#related","d":"ADR-036: External OAuth Login (Federated Google/GitHub/Apple) with Local-JWT Exchange","k":"Architecture Decision Records","t":"Related","x":"ADR-004 (the RS256/JWKS token this flow exchanges the external identity for, and validates everywhere after), ADR-022 (the browser cookies that carry the resulting session),…"},"356":{"u":"/docs/adr/037-field-level-encryption-at-rest.html","d":"ADR-037: Field-Level Encryption at Rest (AES-256-GCM EF Converter)","k":"Architecture Decision Records"},"357":{"u":"/docs/adr/037-field-level-encryption-at-rest.html#status","d":"ADR-037: Field-Level Encryption at Rest (AES-256-GCM EF Converter)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-06; revised 2026-07-24, 2026-07-25, 2026-08-15, 2026-08-18). Revised 2026-08-18: the versioned-envelope converter is no longer unpublished, it is included in…"},"358":{"u":"/docs/adr/037-field-level-encryption-at-rest.html#context","d":"ADR-037: Field-Level Encryption at Rest (AES-256-GCM EF Converter)","k":"Architecture Decision Records","t":"Context","x":"Transparent database encryption (TDE) protects the data files as a whole, but it decrypts transparently for anyone who can query the database, so a leaked backup restored on a…"},"359":{"u":"/docs/adr/037-field-level-encryption-at-rest.html#decision","d":"ADR-037: Field-Level Encryption at Rest (AES-256-GCM EF Converter)","k":"Architecture Decision Records","t":"Decision","x":"Provide a single framework-owned EF Core value converter that transparently encrypts string columns at rest with authenticated encryption, applied per property in an entity…"},"360":{"u":"/docs/adr/037-field-level-encryption-at-rest.html#rationale","d":"ADR-037: Field-Level Encryption at Rest (AES-256-GCM EF Converter)","k":"Architecture Decision Records","t":"Rationale","x":"- Authenticated, not merely confidential. AES-GCM binds a 128-bit tag to the ciphertext (EncryptedStringConverter.cs:81, :201), so a tampered or truncated value fails to decrypt…"},"361":{"u":"/docs/adr/037-field-level-encryption-at-rest.html#trade-offs","d":"ADR-037: Field-Level Encryption at Rest (AES-256-GCM EF Converter)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Latent today, proven by tests rather than production. The plumbing is complete and unit-tested, but no entity configuration wires it, so the encrypt/decrypt round-trip, the…"},"362":{"u":"/docs/adr/037-field-level-encryption-at-rest.html#related","d":"ADR-037: Field-Level Encryption at Rest (AES-256-GCM EF Converter)","k":"Architecture Decision Records","t":"Related","x":"ADR-005 (soft-delete vs erasure: the other sensitive-data control, which names this converter as the mechanism for erasure fields that must stay retrievable,…"},"363":{"u":"/docs/adr/037-field-level-encryption-at-rest.html#revision-2026-07-24","d":"ADR-037: Field-Level Encryption at Rest (AES-256-GCM EF Converter)","k":"Architecture Decision Records","t":"Revision (2026-07-24)","x":"Documented a constraint the converter always had but did not state: the ciphertext is non-deterministic. Every write uses a fresh random nonce, which is the correct property for…"},"364":{"u":"/docs/adr/037-field-level-encryption-at-rest.html#revision-2026-07-25","d":"ADR-037: Field-Level Encryption at Rest (AES-256-GCM EF Converter)","k":"Architecture Decision Records","t":"Revision (2026-07-25)","x":"Documentation-only correction, no behavior change. Item 1 of the Decision still illustrated the converter with builder.Property(e = e.Email), contradicting the 2026-07-24…"},"365":{"u":"/docs/adr/037-field-level-encryption-at-rest.html#revision-2026-08-15","d":"ADR-037: Field-Level Encryption at Rest (AES-256-GCM EF Converter)","k":"Architecture Decision Records","t":"Revision (2026-08-15)","x":"Behavior change, not a documentation correction. The stored layout is now a versioned envelope: Base64 of [key version (1)] [nonce (12)] [ciphertext (N)] [tag (16)] rather than…"},"366":{"u":"/docs/adr/037-field-level-encryption-at-rest.html#revision-2026-10-01","d":"ADR-037: Field-Level Encryption at Rest (AES-256-GCM EF Converter)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Anchor-only refresh; no decision, rationale or trade-off changed. The three citations of ADR-005 in Context, Trade-offs and Related now point at the record's canonical home and…"},"367":{"u":"/docs/adr/038-supply-chain-provenance.html","d":"ADR-038: Supply-Chain Provenance (SBOM Release Gate + Lock Files + Vulnerability Audit)","k":"Architecture Decision Records"},"368":{"u":"/docs/adr/038-supply-chain-provenance.html#status","d":"ADR-038: Supply-Chain Provenance (SBOM Release Gate + Lock Files + Vulnerability Audit)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-06; revised 2026-07-21). Revised 2026-09-07 (MMCA.Common pins every action by commit SHA and every global tool by version, restores in locked mode, fails the…"},"369":{"u":"/docs/adr/038-supply-chain-provenance.html#context","d":"ADR-038: Supply-Chain Provenance (SBOM Release Gate + Lock Files + Vulnerability Audit)","k":"Architecture Decision Records","t":"Context","x":"MMCA.Common is a published framework: on every v tag (release.yml:3-5) it packs its NuGet packages and pushes them to both GitHub Packages (release.yml:117-118) and nuget.org…"},"370":{"u":"/docs/adr/038-supply-chain-provenance.html#decision","d":"ADR-038: Supply-Chain Provenance (SBOM Release Gate + Lock Files + Vulnerability Audit)","k":"Architecture Decision Records","t":"Decision","x":"Treat supply-chain integrity as a set of build-gating controls, the same invariant-over-discipline posture ADR-015 applies to architecture rules. Four controls, each a hard gate:…"},"371":{"u":"/docs/adr/038-supply-chain-provenance.html#rationale","d":"ADR-038: Supply-Chain Provenance (SBOM Release Gate + Lock Files + Vulnerability Audit)","k":"Architecture Decision Records","t":"Rationale","x":"- Provenance is a gate, not a document. A hard-failing SBOM step means the bill of materials cannot silently go missing on a release: the artifact is produced or the release…"},"372":{"u":"/docs/adr/038-supply-chain-provenance.html#trade-offs","d":"ADR-038: Supply-Chain Provenance (SBOM Release Gate + Lock Files + Vulnerability Audit)","k":"Architecture Decision Records","t":"Trade-offs","x":"- The SBOM is generated and archived, not yet signed or attested (superseded 2026-09-22; see the Revision below). The gate proves a bill of materials exists for each release…"},"373":{"u":"/docs/adr/038-supply-chain-provenance.html#revision-2026-09-07","d":"ADR-038: Supply-Chain Provenance (SBOM Release Gate + Lock Files + Vulnerability Audit)","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The provenance chain gained the controls that make it reproducible under an attacker, from the 2026-09-07 security review. 1. Actions are pinned by commit SHA, not by a mutable…"},"374":{"u":"/docs/adr/038-supply-chain-provenance.html#revision-2026-09-22-attestations-and-one-implementation-of-each-gate","d":"ADR-038: Supply-Chain Provenance (SBOM Release Gate + Lock Files + Vulnerability Audit)","k":"Architecture Decision Records","t":"Revision (2026-09-22): attestations, and one implementation of each gate","x":"Two of the trade-offs above have moved. First, every .nupkg a release packs now carries a signed SLSA build-provenance attestation: release.yml calls…"},"375":{"u":"/docs/adr/038-supply-chain-provenance.html#revision-2026-10-01","d":"ADR-038: Supply-Chain Provenance (SBOM Release Gate + Lock Files + Vulnerability Audit)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; the current-state sections now describe the gates where they live today. Context names both registries a tag publishes to: GitHub Packages…"},"376":{"u":"/docs/adr/038-supply-chain-provenance.html#related","d":"ADR-038: Supply-Chain Provenance (SBOM Release Gate + Lock Files + Vulnerability Audit)","k":"Architecture Decision Records","t":"Related","x":"ADR-016 (lockstep versioning + the MassTransit-v8 license pin; this record extends dependency governance from versioning and licensing into supply-chain provenance and…"},"377":{"u":"/docs/adr/039-live-channel-push.html","d":"ADR-039: Live channel push (ephemeral events over the notification hub)","k":"Architecture Decision Records"},"378":{"u":"/docs/adr/039-live-channel-push.html#status","d":"ADR-039: Live channel push (ephemeral events over the notification hub)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-09). Revised 2026-09-07 (channel subscription can be gated by an app-supplied authorizer, connections are capped per user, the backplane channel is namespaced…"},"379":{"u":"/docs/adr/039-live-channel-push.html#context","d":"ADR-039: Live channel push (ephemeral events over the notification hub)","k":"Architecture Decision Records","t":"Context","x":"Conference-day features (live polls, session Q&A, live result counters) need sub-second fan-out of small events to whoever is looking at a page right now. The existing…"},"380":{"u":"/docs/adr/039-live-channel-push.html#decision","d":"ADR-039: Live channel push (ephemeral events over the notification hub)","k":"Architecture Decision Records","t":"Decision","x":"One realtime transport, two publisher boundaries: - NotificationHub stays the single hub and gains its first client-invokable methods: JoinChannel / LeaveChannel map the calling…"},"381":{"u":"/docs/adr/039-live-channel-push.html#rationale","d":"ADR-039: Live channel push (ephemeral events over the notification hub)","k":"Architecture Decision Records","t":"Rationale","x":"- One WebSocket per client keeps connection management, token refresh, reconnect, and backplane behavior in one place; channel membership is a property of the existing…"},"382":{"u":"/docs/adr/039-live-channel-push.html#trade-offs","d":"ADR-039: Live channel push (ephemeral events over the notification hub)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Ephemeral means lossy: a client that connects after an event was published never sees it. Features must treat channel events as cache-invalidation hints over fetchable state,…"},"383":{"u":"/docs/adr/039-live-channel-push.html#revision-2026-07-24","d":"ADR-039: Live channel push (ephemeral events over the notification hub)","k":"Architecture Decision Records","t":"Revision (2026-07-24)","x":"Two corrections from a code review; the best-effort, per-session-ordered decision is unchanged. 1. Broadcasts are enqueued after commit, not during the command. CastVoteHandler…"},"384":{"u":"/docs/adr/039-live-channel-push.html#revision-2026-09-07","d":"ADR-039: Live channel push (ephemeral events over the notification hub)","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The channel model is unchanged: a client subscribes to a channel key and the server pushes to it. What a signed-in client is allowed to subscribe to, and how much it may hold…"},"385":{"u":"/docs/adr/040-authenticated-output-caching-for-public-reads.html","d":"ADR-040: Authenticated output caching for public reads","k":"Architecture Decision Records"},"386":{"u":"/docs/adr/040-authenticated-output-caching-for-public-reads.html#status","d":"ADR-040: Authenticated output caching for public reads","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-10). Amended (2026-07-10): explicit query-string variance parity with the built-in default policy (the initial release accidentally dropped it, collapsing every…"},"387":{"u":"/docs/adr/040-authenticated-output-caching-for-public-reads.html#context","d":"ADR-040: Authenticated output caching for public reads","k":"Architecture Decision Records","t":"Context","x":"The framework's read-scaling design leans on ASP.NET Core output caching: anonymous-readable endpoints ([AllowAnonymous] GETs like event/session/speaker catalogs) carry named…"},"388":{"u":"/docs/adr/040-authenticated-output-caching-for-public-reads.html#decision","d":"ADR-040: Authenticated output caching for public reads","k":"Architecture Decision Records","t":"Decision","x":"MMCA.Common.API ships PublicEndpointOutputCachePolicy, an IOutputCachePolicy that mirrors the built-in default policy with one deliberate difference: it does not disable cache…"},"389":{"u":"/docs/adr/040-authenticated-output-caching-for-public-reads.html#rationale","d":"ADR-040: Authenticated output caching for public reads","k":"Architecture Decision Records","t":"Rationale","x":"- The response payload, not the request's auth state, is what determines cacheability. For a user-independent payload, Authorization is noise; refusing to cache on it turns the…"},"390":{"u":"/docs/adr/040-authenticated-output-caching-for-public-reads.html#trade-offs","d":"ADR-040: Authenticated output caching for public reads","k":"Architecture Decision Records","t":"Trade-offs","x":"- Consumers must audit which named policies move to AddPublicEndpointPolicy. Policies on permission-gated endpoints (e.g. an organizer dashboard) must NOT move; if such an…"},"391":{"u":"/docs/adr/040-authenticated-output-caching-for-public-reads.html#revision-2026-09-10","d":"ADR-040: Authenticated output caching for public reads","k":"Architecture Decision Records","t":"Revision (2026-09-10)","x":"Store now uses the cross-service eviction path too, and the first case is an Application-layer handler rather than a controller. The trade-off above says to check which process…"},"392":{"u":"/docs/adr/040-authenticated-output-caching-for-public-reads.html#revision-2026-09-25","d":"ADR-040: Authenticated output caching for public reads","k":"Architecture Decision Records","t":"Revision (2026-09-25)","x":"Store's ProductsCache TTL is 60 seconds, because its payload moves on the clock. A product payload carries each variant's effective price, and a discount window opening or…"},"393":{"u":"/docs/adr/040-authenticated-output-caching-for-public-reads.html#revision-2026-10-01","d":"ADR-040: Authenticated output caching for public reads","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Citations in Context, Decision and Trade-offs are re-anchored to the current hosts: ADC Conference Program.cs (the adminBypassRoles array at…"},"394":{"u":"/docs/adr/041-observability-and-telemetry.html","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records"},"395":{"u":"/docs/adr/041-observability-and-telemetry.html#status","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-10). Amended (2026-07-23) to document the Telemetry:DisableHttpClientMetrics and Telemetry:DisableRuntimeMetrics cost knobs and to correct the…"},"396":{"u":"/docs/adr/041-observability-and-telemetry.html#context","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Context","x":"The framework is a modular monolith whose modules extract into standalone services (ADR-008), so the same telemetry has to make sense whether a request stays in one process or…"},"397":{"u":"/docs/adr/041-observability-and-telemetry.html#decision","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Decision","x":"Standardize telemetry in the shared Aspire service defaults, add framework-specific instrumentation for the CQRS and outbox paths, and expose cost knobs with fail-safe defaults.…"},"398":{"u":"/docs/adr/041-observability-and-telemetry.html#rationale","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Rationale","x":"- Instrument only where auto-instrumentation is blind. The CQRS RED histograms and the outbox dead-letter counter cover the two framework-owned hot paths; everything else (HTTP,…"},"399":{"u":"/docs/adr/041-observability-and-telemetry.html#trade-offs","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Trade-offs","x":"- Custom instrumentation carries a maintenance cost. The Aspire package has no reference to Application or Infrastructure by design, so the meter and activity-source names are…"},"400":{"u":"/docs/adr/041-observability-and-telemetry.html#revision-2026-08-18","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"Two meters and one hop. Two new failure counters, each on its own meter. cache.eviction.failed, tagged cachetag, on MMCA.Common.OutputCache…"},"401":{"u":"/docs/adr/041-observability-and-telemetry.html#amended-2026-08-31","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Amended (2026-08-31)","x":"The log side of this record. Until now it named only the OpenTelemetry logging call inside ConfigureOpenTelemetry (Extensions.cs:132); what a host actually WRITES its application…"},"402":{"u":"/docs/adr/041-observability-and-telemetry.html#amended-2026-09-03-probe-telemetry","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Amended (2026-09-03): probe telemetry","x":"Health probes were the trace bill. Container Apps liveness and readiness probes, the gateway's downstream aggregate probes, YARP active health checks and the availability web…"},"403":{"u":"/docs/adr/041-observability-and-telemetry.html#revision-2026-09-07","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Telemetry gained the properties that make it usable as evidence, from the 2026-09-07 security review. 1. The daily ingestion cap is alerted on (SEC-ADC-47 / SEC-Store-55). A…"},"404":{"u":"/docs/adr/041-observability-and-telemetry.html#revision-2026-09-11","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Revision (2026-09-11)","x":"An eighth meter, a second trace source, a second poll loop kept off the bill, and one meter this pipeline does not carry. The durable internal-command queue exports through this…"},"405":{"u":"/docs/adr/041-observability-and-telemetry.html#alternatives-rejected","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Alternatives rejected","x":"- An ActivitySource span per command and query in the CQRS pipeline, tagged by module. Evaluated 2026-09-16 against a modular-monolith template that ships one, and declined. The…"},"406":{"u":"/docs/adr/041-observability-and-telemetry.html#related","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (the outbox whose dead-letter counter and poll-span filtering this defines), ADR-014 (the CQRS decorator pipeline that emits the RED histograms as a byproduct of its…"},"407":{"u":"/docs/adr/041-observability-and-telemetry.html#amended-2026-09-11-the-polly-meter","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Amended (2026-09-11): the Polly meter","x":"A ninth meter, one cost knob, and one log level. Polly's meter is subscribed. AddServiceDefaults puts the standard resilience handler on every HttpClient and every gRPC typed…"},"408":{"u":"/docs/adr/041-observability-and-telemetry.html#revision-2026-09-19-the-ai-meter-is-subscribed","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Revision (2026-09-19): the AI meter is subscribed","x":"A tenth meter, and a fourth trace source. MMCA.Common.AI is in the chain now. The subscription block ends with .AddMeter(AiTelemetryName)…"},"409":{"u":"/docs/adr/041-observability-and-telemetry.html#revision-2026-10-01","d":"ADR-041: Observability and Telemetry Strategy","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"A third metrics cost knob, and the citations follow the telemetry code into its own file. ASP.NET Core metrics are no longer unconditional. ConfigureMetrics now starts by calling…"},"410":{"u":"/docs/adr/042-device-capability-abstraction.html","d":"ADR-042: Device Capability Abstraction (MAUI Blazor Hybrid)","k":"Architecture Decision Records"},"411":{"u":"/docs/adr/042-device-capability-abstraction.html#status","d":"ADR-042: Device Capability Abstraction (MAUI Blazor Hybrid)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-10, amended 2026-07-17, 2026-07-23, 2026-08-14, 2026-08-29 and 2026-09-03). The 2026-08-29 amendment adds the UseMmcaMauiErrorHandling last-chance handlers and…"},"412":{"u":"/docs/adr/042-device-capability-abstraction.html#context","d":"ADR-042: Device Capability Abstraction (MAUI Blazor Hybrid)","k":"Architecture Decision Records","t":"Context","x":"The consumer apps ship the same Blazor component set through three heads: MAUI Blazor Hybrid (Android/iOS/MacCatalyst/Windows), Blazor Server SSR, and WebAssembly. Native device…"},"413":{"u":"/docs/adr/042-device-capability-abstraction.html#decision","d":"ADR-042: Device Capability Abstraction (MAUI Blazor Hybrid)","k":"Architecture Decision Records","t":"Decision","x":"Add a per-capability contract layer to MMCA.Common.UI and a dedicated package, MMCA.Common.UI.Maui, carrying the native implementations. - One small interface per capability, no…"},"414":{"u":"/docs/adr/042-device-capability-abstraction.html#rationale","d":"ADR-042: Device Capability Abstraction (MAUI Blazor Hybrid)","k":"Architecture Decision Records","t":"Rationale","x":"- A god IDeviceCapabilities interface would force every head to implement everything and turn each new capability into a breaking change; per-capability contracts are open/closed…"},"415":{"u":"/docs/adr/042-device-capability-abstraction.html#trade-offs","d":"ADR-042: Device Capability Abstraction (MAUI Blazor Hybrid)","k":"Architecture Decision Records","t":"Trade-offs","x":"- A second build runner raises release surface: ubuntu and windows must both succeed for a whole release. Accepted; the publish-maui job is gated by the same tag and SBOM…"},"416":{"u":"/docs/adr/042-device-capability-abstraction.html#revision-2026-10-01","d":"ADR-042: Device Capability Abstraction (MAUI Blazor Hybrid)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. The Decision bullet on safe defaults no longer points at a Fallbacks/ folder, which does not exist: each null fallback sits beside its contract…"},"417":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records"},"418":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#status","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-15). Revised 2026-07-28 (the Android https App Links leg is recorded as shipped, the outstanding Android item is restated as the served certificate fingerprint,…"},"419":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#context","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Context","x":"Three mobile flows all need a URL to leave the web world and land inside the MAUI app: 1. Shared links and QR codes. The share sheet and QR codes carry ordinary https web URLs.…"},"420":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#decision","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Decision","x":"- Custom-scheme returnUrl allowlist in the framework. CompleteAsync consults OAuth:AllowedReturnUrlSchemes (a config array, default empty). When the challenge's stashed returnUrl…"},"421":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#rationale","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Rationale","x":"- Reusing the single-use-code exchange keeps the token-never-in-URL invariant identical across web and native; the only new surface is WHERE the code lands. - A scheme allowlist…"},"422":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#trade-offs","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Trade-offs","x":"- The app-facing hostname is baked into store binaries (intent filters, entitlements). The apps currently ride the Azure Container Apps default domain, which changes if the…"},"423":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#revision-2026-07-28","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Revision (2026-07-28)","x":"Correction pass from an ADR audit. No decision or behavior changed; the Status section had the Android leg backwards and the Decision section attributed the token exchange to the…"},"424":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#revision-2026-08-01","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Revision (2026-08-01)","x":"Status pass from an ADR audit. No decision and no behavior changed; the one item the previous revision left open is closed, and the anchor that revision itself introduced had…"},"425":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#revision-2026-08-07","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Revision (2026-08-07)","x":"Anchor and precision pass from an ADR audit. No decision and no behavior changed. 1. The two Program.cs anchors moved one line. MMCA.ADC commit 886fa189 (PR 100, merged…"},"426":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#revision-2026-08-31","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Revision (2026-08-31)","x":"Anchor and count pass from an ADR audit. No decision and no behavior changed. 1. The ADC Program.cs association block moved again. MMCA.ADC commit 6323a7b9 (PR 155) shifted it…"},"427":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#revision-2026-09-07","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The callback routing is unchanged. The boundary where a platform-supplied URI enters the app is now validated (SEC-Common-88 / SEC-ADC-65). DeepLinkDispatcher.Publish…"},"428":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#revision-2026-09-11","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Revision (2026-09-11)","x":"Anchor and correction pass from an ADR audit. No decision and no behavior changed. One citation pointed at a file that does not exist. 1. There is no DeepLinkRouteGuard in ADC.…"},"429":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#revision-2026-09-25","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Revision (2026-09-25)","x":"Anchor pass over the MMCA.ADC citations. No decision and no behavior changed. 1. The ADC association block moved up six lines. In…"},"430":{"u":"/docs/adr/043-mobile-deep-links-and-native-oauth-callback.html#revision-2026-10-01","d":"ADR-043: Mobile Deep Links, App Association, and the Native OAuth Callback","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Anchor pass from an ADR audit. No decision and no rationale changed. In the Decision's client-flow bullet the completion page now calls the service at…"},"431":{"u":"/docs/adr/044-native-push-delivery.html","d":"ADR-044: Native Push Delivery (the Third Notification Channel)","k":"Architecture Decision Records"},"432":{"u":"/docs/adr/044-native-push-delivery.html#status","d":"ADR-044: Native Push Delivery (the Third Notification Channel)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-11). Amends ADR-024. The framework pipeline is implemented and inert by default; each consumer switches it on by provisioning a notification hub with platform…"},"433":{"u":"/docs/adr/044-native-push-delivery.html#context","d":"ADR-044: Native Push Delivery (the Third Notification Channel)","k":"Architecture Decision Records","t":"Context","x":"ADR-024 established two notification channels: a durable per-user UserNotification inbox (the source of truth) and a transient SignalR push behind IPushNotificationSender. Both…"},"434":{"u":"/docs/adr/044-native-push-delivery.html#decision","d":"ADR-044: Native Push Delivery (the Third Notification Channel)","k":"Architecture Decision Records","t":"Decision","x":"- Azure Notification Hubs as the delivery fan-out. One hub abstracts both platforms behind one API, holds the platform credentials outside our code, and its installation model…"},"435":{"u":"/docs/adr/044-native-push-delivery.html#consequences","d":"ADR-044: Native Push Delivery (the Third Notification Channel)","k":"Architecture Decision Records","t":"Consequences","x":"- Sends fan out per 20-user chunk and per platform: an audience of N users costs ceil(N/20) 2 hub calls. Acceptable at conference scale; a template-based send can consolidate…"},"436":{"u":"/docs/adr/044-native-push-delivery.html#revision-2026-10-01","d":"ADR-044: Native Push Delivery (the Third Notification Channel)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The client half of the pipeline is no longer Null-only. MMCA.Common.UI.Maui ships credentialed token providers behind the opt-in AddMauiPushDeviceTokenProvider()…"},"437":{"u":"/docs/adr/045-managed-file-storage-and-avatars.html","d":"ADR-045: Managed File Storage and User Avatars","k":"Architecture Decision Records"},"438":{"u":"/docs/adr/045-managed-file-storage-and-avatars.html#status","d":"ADR-045: Managed File Storage and User Avatars","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-11). Records the BR-116 amendment (ADC): avatar photos are IN scope, powered by two new framework extension points. The framework legs are implemented; each…"},"439":{"u":"/docs/adr/045-managed-file-storage-and-avatars.html#context","d":"ADR-045: Managed File Storage and User Avatars","k":"Architecture Decision Records","t":"Context","x":"The MAUI capability program (ADR-042) brought MediaPicker/camera within reach, and ADC amended BR-116 to include user avatar photos. That needs binary blob storage (the databases…"},"440":{"u":"/docs/adr/045-managed-file-storage-and-avatars.html#decision","d":"ADR-045: Managed File Storage and User Avatars","k":"Architecture Decision Records","t":"Decision","x":"- IFileStorageService (Application): upload-by-blob-name returning the public URI, plus idempotent delete. Default is an unconfigured Null implementation whose uploads fail with…"},"441":{"u":"/docs/adr/045-managed-file-storage-and-avatars.html#consequences","d":"ADR-045: Managed File Storage and User Avatars","k":"Architecture Decision Records","t":"Consequences","x":"- The avatars container is public-read by design: avatar URLs render in tags on anonymous-visible surfaces without SAS plumbing. The random blob suffix prevents enumeration; the…"},"442":{"u":"/docs/adr/045-managed-file-storage-and-avatars.html#revision-2026-09-07","d":"ADR-045: Managed File Storage and User Avatars","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The 2 MB compressed upload cap bounds the bytes on the wire; it does not bound what those bytes decode to. A highly compressible image declares its dimensions in a header that…"},"443":{"u":"/docs/adr/045-managed-file-storage-and-avatars.html#revision-2026-09-12","d":"ADR-045: Managed File Storage and User Avatars","k":"Architecture Decision Records","t":"Revision (2026-09-12)","x":"This record scoped managed uploads to avatars and said so: \"no other managed uploads exist\". That statement is superseded by ADR-123, which publishes speaker session materials…"},"444":{"u":"/docs/adr/045-managed-file-storage-and-avatars.html#revision-2026-10-01","d":"ADR-045: Managed File Storage and User Avatars","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Avatar blob deletion no longer happens as an inline storage call. Every path that retires an avatar schedules a DeleteAvatarBlobInternalCommand…"},"445":{"u":"/docs/adr/046-http-api-versioning.html","d":"ADR-046: HTTP API Versioning Strategy","k":"Architecture Decision Records"},"446":{"u":"/docs/adr/046-http-api-versioning.html#status","d":"ADR-046: HTTP API Versioning Strategy","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-15). Revised 2026-08-01 (anonymity is granted by each per-service subclass, not by ServiceInfoControllerBase; corrected the ADR-034 cross-reference, which puts…"},"447":{"u":"/docs/adr/046-http-api-versioning.html#context","d":"ADR-046: HTTP API Versioning Strategy","k":"Architecture Decision Records","t":"Context","x":"The framework's REST surface is served by controllers hosted in extracted service processes behind a YARP gateway. As those services evolve, a response shape has to be able to…"},"448":{"u":"/docs/adr/046-http-api-versioning.html#decision","d":"ADR-046: HTTP API Versioning Strategy","k":"Architecture Decision Records","t":"Decision","x":"Standardize one header-based API-versioning setup in MMCA.Common.API, adopt it in every service host through a single registration call, and keep it exercised by a shared fitness…"},"449":{"u":"/docs/adr/046-http-api-versioning.html#rationale","d":"ADR-046: HTTP API Versioning Strategy","k":"Architecture Decision Records","t":"Rationale","x":"- Header selection keeps URLs stable. Routing stays version-free, so gateway route maps, client URL builders, and OpenAPI paths do not fork per version; a caller opts into a…"},"450":{"u":"/docs/adr/046-http-api-versioning.html#trade-offs","d":"ADR-046: HTTP API Versioning Strategy","k":"Architecture Decision Records","t":"Trade-offs","x":"- The class-level version attributes are not inherited. Each per-service subclass must repeat the [ApiVersion(...)] and routing attributes (the same inheritance caveat ADR-036…"},"451":{"u":"/docs/adr/046-http-api-versioning.html#revision-2026-09-22-the-consumer-contract-is-a-committed-artifact","d":"ADR-046: HTTP API Versioning Strategy","k":"Architecture Decision Records","t":"Revision (2026-09-22): the consumer contract is a committed artifact","x":"The trade-off above described the OpenAPI document as a dev/CI artifact that nothing outside a running host could diff. MMCA.ADC now writes it to disk at build time.…"},"452":{"u":"/docs/adr/046-http-api-versioning.html#revision-2026-09-25-both-consumers-commit-and-gate-their-openapi-documents","d":"ADR-046: HTTP API Versioning Strategy","k":"Architecture Decision Records","t":"Revision (2026-09-25): both consumers commit and gate their OpenAPI documents","x":"MMCA.Store now carries the same gate, so the committed contract is a property of both consumers rather than of MMCA.ADC alone. Each repo's Directory.Build.props references…"},"453":{"u":"/docs/adr/046-http-api-versioning.html#revision-2026-10-01","d":"ADR-046: HTTP API Versioning Strategy","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Re-anchored the citations in Decision, Trade-offs and Related, which had moved: AddCommonApiVersioning and its options…"},"454":{"u":"/docs/adr/046-http-api-versioning.html#revision-2026-10-01-v12170-the-host-registers-the-openapi-document","d":"ADR-046: HTTP API Versioning Strategy","k":"Architecture Decision Records","t":"Revision (2026-10-01, v1.217.0): the host registers the OpenAPI document","x":"What changed. AddCommonOpenApi used to register the documents itself through the versioning builder (AddApiVersioning().AddOpenApi(), one document per discovered API version),…"},"455":{"u":"/docs/adr/046-http-api-versioning.html#related","d":"ADR-046: HTTP API Versioning Strategy","k":"Architecture Decision Records","t":"Related","x":"ADR-010 (integration-event schema versioning: the asynchronous, SchemaVersion-carried, consumer-resolved axis this deliberately contrasts with; HTTP versioning here is…"},"456":{"u":"/docs/adr/047-soft-deleted-user-session-revocation.html","d":"ADR-047: Runtime Revocation of Soft-Deleted Users' Active Sessions","k":"Architecture Decision Records"},"457":{"u":"/docs/adr/047-soft-deleted-user-session-revocation.html#status","d":"ADR-047: Runtime Revocation of Soft-Deleted Users' Active Sessions","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-15). Revised 2026-08-07 (validator hoisted into a shared generic, the 30-second constant moved, the two apps revoke at different speeds). Revised 2026-08-23:…"},"458":{"u":"/docs/adr/047-soft-deleted-user-session-revocation.html#context","d":"ADR-047: Runtime Revocation of Soft-Deleted Users' Active Sessions","k":"Architecture Decision Records","t":"Context","x":"Soft-delete is the framework's default deletion model (ADR-005): AuditableBaseEntity.Delete() sets IsDeleted = true and EF global query filters hide the row, but the record…"},"459":{"u":"/docs/adr/047-soft-deleted-user-session-revocation.html#decision","d":"ADR-047: Runtime Revocation of Soft-Deleted Users' Active Sessions","k":"Architecture Decision Records","t":"Decision","x":"Add a shared-pipeline middleware, SoftDeletedUserMiddleware (Source/Presentation/MMCA.Common.API/Middleware/SoftDeletedUserMiddleware.cs:31, BR-133), that rejects an…"},"460":{"u":"/docs/adr/047-soft-deleted-user-session-revocation.html#rationale","d":"ADR-047: Runtime Revocation of Soft-Deleted Users' Active Sessions","k":"Architecture Decision Records","t":"Rationale","x":"- Bounds the stateless-JWT revocation gap cheaply. Stateless JWT (ADR-004) has no built-in revocation, so a deactivated account would otherwise stay usable for the full remaining…"},"461":{"u":"/docs/adr/047-soft-deleted-user-session-revocation.html#trade-offs","d":"ADR-047: Runtime Revocation of Soft-Deleted Users' Active Sessions","k":"Architecture Decision Records","t":"Trade-offs","x":"- Revocation is bounded, not immediate. A soft-deleted user whose status is cached as not-deleted keeps passing until that cache entry expires (up to 30 seconds), unless the…"},"462":{"u":"/docs/adr/047-soft-deleted-user-session-revocation.html#related","d":"ADR-047: Runtime Revocation of Soft-Deleted Users' Active Sessions","k":"Architecture Decision Records","t":"Related","x":"ADR-005 (soft-delete is the deletion model whose still-authenticated tokens this middleware revokes; deleting a user is a soft-delete, not a row removal), ADR-004 (the stateless…"},"463":{"u":"/docs/adr/047-soft-deleted-user-session-revocation.html#revision-2026-08-07","d":"ADR-047: Runtime Revocation of Soft-Deleted Users' Active Sessions","k":"Architecture Decision Records","t":"Revision (2026-08-07)","x":"Re-verified against current source. The decision is unchanged, but three things it described have moved: the validator implementation, the home of the 30-second constant, and the…"},"464":{"u":"/docs/adr/047-soft-deleted-user-session-revocation.html#revision-2026-08-23","d":"ADR-047: Runtime Revocation of Soft-Deleted Users' Active Sessions","k":"Architecture Decision Records","t":"Revision (2026-08-23)","x":"Re-verified against current source. The decision, the cache design, the fail-open policy and the per-app asymmetry are all unchanged; what moved is where the middleware's…"},"465":{"u":"/docs/adr/047-soft-deleted-user-session-revocation.html#revision-2026-09-03-mmcacommon-11850","d":"ADR-047: Runtime Revocation of Soft-Deleted Users' Active Sessions","k":"Architecture Decision Records","t":"Revision (2026-09-03, MMCA.Common 1.185.0)","x":"Re-verified against current source. The middleware, the cache design, the 30-second window and the fail-open policy are all unchanged. What changed is who writes the deleted…"},"466":{"u":"/docs/adr/047-soft-deleted-user-session-revocation.html#revision-2026-10-01","d":"ADR-047: Runtime Revocation of Soft-Deleted Users' Active Sessions","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Re-verified against current source (MMCA.Common v1.216.0). The decision, the middleware, the 30-second window, the fail-open policy and the shared marker write are unchanged. One…"},"467":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records"},"468":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html#status","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-15). Revised 2026-07-21 (corrected the empty-placeholder-folder inventory and the Directory.Build.props and ADC User source citations). Revised 2026-07-28…"},"469":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html#context","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records","t":"Context","x":"Every entity needs an identity type. The framework's base entity is generic over that type: BaseEntity constrains it to notnull and exposes a single required init Id…"},"470":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html#decision","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records","t":"Decision","x":"Model every identifier as a primitive named through a global-using alias, declared per module, not as a wrapper struct. - Identity is a primitive behind an alias. Each module…"},"471":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html#rationale","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records","t":"Rationale","x":"- Readable signatures at zero runtime cost. GetRepository () reads as intent while the CLR sees a plain int. There is no allocation, boxing, or wrapper indirection per…"},"472":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html#trade-offs","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records","t":"Trade-offs","x":"- No compile-time protection against swapping same-typed identifiers. An alias is a type synonym, not a distinct type. Because most aliases resolve to int, the compiler will not…"},"473":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html#related","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records","t":"Related","x":"ADR-001 (the per-entity DTO mappers are parameterized by this identifier type, IEntityDTOMapper ), ADR-034 (the generic entity controllers and query contract ride on the same…"},"474":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html#revision-2026-08-18","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"No decision, no behavior and no citation in this record changed. What changed is the standing of the deferral it records. The last Trade-offs entry above (\"Revisiting the trade…"},"475":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html#revision-2026-08-23","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records","t":"Revision (2026-08-23)","x":"No decision and no rationale changed. Two counts did, both because Conference gained an alias. The workspace census below is superseded by the Revision (2026-09-11), and…"},"476":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html#revision-2026-09-11","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records","t":"Revision (2026-09-11)","x":"No decision and no rationale changed. The workspace alias count did, because Store Catalog gained the Reviews aggregate's two identifiers. The census in this revision is itself…"},"477":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html#revision-2026-09-19","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records","t":"Revision (2026-09-19)","x":"No decision and no rationale changed. Three facts stated above did, two of them counts and one of them a claim about what exists. Conference's alias file declares nineteen…"},"478":{"u":"/docs/adr/048-primitive-identifier-type-aliases.html#revision-2026-10-01","d":"ADR-048: Primitive Identifier Type Aliases over Strongly-Typed ID Structs","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision and no rationale changed. One Trade-offs statement and three Decision citations did. The Trade-offs entry on identifier swapping still treated SpeakerIdentifierType…"},"479":{"u":"/docs/adr/049-library-configureawait-policy.html","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records"},"480":{"u":"/docs/adr/049-library-configureawait-policy.html#status","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-20; measurements re-anchored 2026-08-07, 2026-08-14, 2026-08-18, 2026-08-23, 2026-08-31, 2026-09-01, 2026-09-03, 2026-09-11 and 2026-09-19). Revised 2026-09-19:…"},"481":{"u":"/docs/adr/049-library-configureawait-policy.html#context","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Context","x":"MMCA.Common ships as NuGet packages consumed by host applications, not as an application itself. Library code that awaits without ConfigureAwait(false) captures the caller's…"},"482":{"u":"/docs/adr/049-library-configureawait-policy.html#decision","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Decision","x":"Packaged non-UI framework code awaits with ConfigureAwait(false); UI component packages and application code do not. - Enforcement is a build gate, not a convention. The…"},"483":{"u":"/docs/adr/049-library-configureawait-policy.html#rationale","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Rationale","x":"- Correctness for the one consumer that already has a context. The MAUI head consumes Infrastructure/Application/API packages through DI; a sync-over-async call anywhere in that…"},"484":{"u":"/docs/adr/049-library-configureawait-policy.html#trade-offs","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Visual noise in framework source. Every await in Source/ (except UI packages) carries .ConfigureAwait(false) (324 sites at adoption; 1,115 gated sites as of the 2026-10-01…"},"485":{"u":"/docs/adr/049-library-configureawait-policy.html#related","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Related","x":"ADR-042 (the MAUI package whose synchronization context motivates the policy), ADR-027 (the same \"machine-boundary hygiene as a build gate\" posture applied to culture-explicit…"},"486":{"u":"/docs/adr/049-library-configureawait-policy.html#revision-2026-08-07","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Revision (2026-08-07)","x":"An audit against the code. The policy did not change; three statements about it did. 1. The exemption covers three packages, not the two the Decision named. The glob is…"},"487":{"u":"/docs/adr/049-library-configureawait-policy.html#revision-2026-08-14","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Revision (2026-08-14)","x":"A re-measurement only. The policy, the gate and the exemption are unchanged; the counts the document quotes were a week old and had moved by roughly 9%. 1. Framework site counts,…"},"488":{"u":"/docs/adr/049-library-configureawait-policy.html#revision-2026-08-18","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"A re-measurement only, in the same terms as the 2026-08-14 pass. The policy, the gate and the exemption are unchanged; two of the three counted figures moved. 1. Framework site…"},"489":{"u":"/docs/adr/049-library-configureawait-policy.html#revision-2026-08-23","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Revision (2026-08-23)","x":"A re-measurement only, in the same terms as the 2026-08-18 pass. The policy, the gate and the exemption are unchanged; both counted figures moved. 1. Framework site counts,…"},"490":{"u":"/docs/adr/049-library-configureawait-policy.html#revision-2026-08-31","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Revision (2026-08-31)","x":"A re-measurement plus a correction to two file anchors. The policy, the gate and the exemption are unchanged. Every counted figure moved, two of the surrounding narratives did…"},"491":{"u":"/docs/adr/049-library-configureawait-policy.html#revision-2026-09-01","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Revision (2026-09-01)","x":"A re-measurement only, in the same terms as the 2026-08-31 pass. The policy, the gate and the exemption are unchanged, the .editorconfig anchors that shifted last pass are still…"},"492":{"u":"/docs/adr/049-library-configureawait-policy.html#revision-2026-09-03","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Revision (2026-09-03)","x":"A re-measurement plus one anchor correction, in the same terms as the 2026-09-01 pass. The policy, the gate and the exemption are unchanged, the .editorconfig anchors are still…"},"493":{"u":"/docs/adr/049-library-configureawait-policy.html#revision-2026-09-11","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Revision (2026-09-11)","x":"A re-measurement plus one anchor correction, in the same terms as the 2026-09-03 pass. The policy, the gate and the exemption are unchanged and the .editorconfig anchors are…"},"494":{"u":"/docs/adr/049-library-configureawait-policy.html#revision-2026-09-19","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Revision (2026-09-19)","x":"A re-measurement in the same terms as the 2026-09-11 pass, covering the two counted figures that move (framework sites and the consumer-scale upper bound) and the…"},"495":{"u":"/docs/adr/049-library-configureawait-policy.html#revision-2026-10-01","d":"ADR-049: Library-Scoped ConfigureAwait(false) Policy (CA2007)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"A count and anchor refresh only. No decision or rationale changed: the policy, the gate (MMCA.Common/.editorconfig:833) and the UI exemption (:836) stand as written. The…"},"496":{"u":"/docs/adr/050-jwt-refresh-token-rotation.html","d":"ADR-050: JWT Access Tokens with a Single Rotating Refresh Token and Reuse Detection","k":"Architecture Decision Records"},"497":{"u":"/docs/adr/050-jwt-refresh-token-rotation.html#status","d":"ADR-050: JWT Access Tokens with a Single Rotating Refresh Token and Reuse Detection","k":"Architecture Decision Records","t":"Status","x":"Superseded by ADR-097 (2026-09-01). Originally Accepted (2026-07-21, storage model recorded as superseded 2026-08-26). The body below is retained as the historical record (its…"},"498":{"u":"/docs/adr/050-jwt-refresh-token-rotation.html#context","d":"ADR-050: JWT Access Tokens with a Single Rotating Refresh Token and Reuse Detection","k":"Architecture Decision Records","t":"Context","x":"Identity issues two credentials on every successful sign-in: a short-lived, stateless JWT access token that every service validates by signature and expiry (ADR-004), and a…"},"499":{"u":"/docs/adr/050-jwt-refresh-token-rotation.html#decision","d":"ADR-050: JWT Access Tokens with a Single Rotating Refresh Token and Reuse Detection","k":"Architecture Decision Records","t":"Decision","x":"Mint a stateless JWT access token plus a single, server-stored refresh token that rotates on every use, with a token mismatch triggering revocation. - Access token is stateless;…"},"500":{"u":"/docs/adr/050-jwt-refresh-token-rotation.html#rationale","d":"ADR-050: JWT Access Tokens with a Single Rotating Refresh Token and Reuse Detection","k":"Architecture Decision Records","t":"Rationale","x":"- Short access token plus refresh keeps the hot path stateless. Every service validates the access token with no store lookup (ADR-004); the short exp bounds the revocation gap,…"},"501":{"u":"/docs/adr/050-jwt-refresh-token-rotation.html#trade-offs","d":"ADR-050: JWT Access Tokens with a Single Rotating Refresh Token and Reuse Detection","k":"Architecture Decision Records","t":"Trade-offs","x":"- One refresh token per user means one live session. A new login overwrites the single stored token, so signing in on a second device invalidates the first device's refresh…"},"502":{"u":"/docs/adr/050-jwt-refresh-token-rotation.html#revision-2026-10-01","d":"ADR-050: JWT Access Tokens with a Single Rotating Refresh Token and Reuse Detection","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Three statements were corrected against current source. The removed UpdateRefreshToken and RevokeRefreshToken no longer appear in either Domain…"},"503":{"u":"/docs/adr/050-jwt-refresh-token-rotation.html#related","d":"ADR-050: JWT Access Tokens with a Single Rotating Refresh Token and Reuse Detection","k":"Architecture Decision Records","t":"Related","x":"ADR-004 (the stateless RS256/JWKS access token this refresh flow reissues, and the algorithm pinning GetPrincipalFromExpiredToken relies on), ADR-032 (the password hashing that…"},"504":{"u":"/docs/adr/051-client-auth-token-lifecycle.html","d":"ADR-051: Client-Side Authentication Token Lifecycle Across Render Modes","k":"Architecture Decision Records"},"505":{"u":"/docs/adr/051-client-auth-token-lifecycle.html#status","d":"ADR-051: Client-Side Authentication Token Lifecycle Across Render Modes","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-23). Revised 2026-08-14 (SetTokensAsync writes the refresh token and the access token under one shared guard, so a failed refresh-token write also drops both…"},"506":{"u":"/docs/adr/051-client-auth-token-lifecycle.html#context","d":"ADR-051: Client-Side Authentication Token Lifecycle Across Render Modes","k":"Architecture Decision Records","t":"Context","x":"ADR-022 and ADR-050 describe the two server halves of authentication: the Blazor host's HttpOnly session cookie that survives SSR prerender (ADR-022), and the Identity service's…"},"507":{"u":"/docs/adr/051-client-auth-token-lifecycle.html#decision","d":"ADR-051: Client-Side Authentication Token Lifecycle Across Render Modes","k":"Architecture Decision Records","t":"Decision","x":"Model the client token lifecycle as three small abstractions (ITokenStorageService, the freshness-checked persistence every caller consumes; ISecureTokenStore, raw persistence…"},"508":{"u":"/docs/adr/051-client-auth-token-lifecycle.html#rationale","d":"ADR-051: Client-Side Authentication Token Lifecycle Across Render Modes","k":"Architecture Decision Records","t":"Rationale","x":"- One application surface, three storage stories. Pages, services, and the HTTP pipeline talk to ITokenStorageService and AuthenticationStateProvider only; the head-specific…"},"509":{"u":"/docs/adr/051-client-auth-token-lifecycle.html#trade-offs","d":"ADR-051: Client-Side Authentication Token Lifecycle Across Render Modes","k":"Architecture Decision Records","t":"Trade-offs","x":"- The browser heads depend on the same-origin UI host. SameOriginProxyTokenRefresher only works where the UI host serves the /auth/session/ endpoints; a browser head deployed…"},"510":{"u":"/docs/adr/051-client-auth-token-lifecycle.html#related","d":"ADR-051: Client-Side Authentication Token Lifecycle Across Render Modes","k":"Architecture Decision Records","t":"Related","x":"ADR-022 (the Blazor host's HttpOnly session cookie and the /auth/session/ endpoints the browser refresher proxies through), ADR-050 (the single rotating refresh token with reuse…"},"511":{"u":"/docs/adr/051-client-auth-token-lifecycle.html#revision-2026-08-07","d":"ADR-051: Client-Side Authentication Token Lifecycle Across Render Modes","k":"Architecture Decision Records","t":"Revision (2026-08-07)","x":"The MAUI half of ITokenStorageService is no longer app-local. The original Decision left the SecureStorage-backed implementation in each app because it depends on the MAUI…"},"512":{"u":"/docs/adr/051-client-auth-token-lifecycle.html#revision-2026-08-14","d":"ADR-051: Client-Side Authentication Token Lifecycle Across Render Modes","k":"Architecture Decision Records","t":"Revision (2026-08-14)","x":"SetTokensAsync closed a gap the original hoist left open. Point 3 above previously described the method as writing the refresh token first and dropping both tokens only when the…"},"513":{"u":"/docs/adr/051-client-auth-token-lifecycle.html#revision-2026-08-31","d":"ADR-051: Client-Side Authentication Token Lifecycle Across Render Modes","k":"Architecture Decision Records","t":"Revision (2026-08-31)","x":"MAUI storage is two classes, and the freshness check the browser heads always had is now on every head. 1. A raw store beneath the storage service. ISecureTokenStore is the third…"},"514":{"u":"/docs/adr/051-client-auth-token-lifecycle.html#revision-2026-10-01","d":"ADR-051: Client-Side Authentication Token Lifecycle Across Render Modes","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Citations in Decision and Trade-offs are re-anchored to the current source (DirectApiTokenRefresher, JsFetchSessionCookieSync,…"},"515":{"u":"/docs/adr/052-background-job-execution.html","d":"ADR-052: Background Job Execution (Bounded Queue plus Hosted Drain)","k":"Architecture Decision Records"},"516":{"u":"/docs/adr/052-background-job-execution.html#status","d":"ADR-052: Background Job Execution (Bounded Queue plus Hosted Drain)","k":"Architecture Decision Records","t":"Status","x":"Superseded by ADR-121 (2026-09-11). The expensive half of this decision (Wait full mode, in-queue dedup, a 409 refusal, the session-scoring queue and drain) moved to durable…"},"517":{"u":"/docs/adr/052-background-job-execution.html#context","d":"ADR-052: Background Job Execution (Bounded Queue plus Hosted Drain)","k":"Architecture Decision Records","t":"Context","x":"Some requests trigger work that cannot run inside the request: an AI scoring pass over an event's sessions takes minutes and issues one paid API call per session, and a…"},"518":{"u":"/docs/adr/052-background-job-execution.html#decision","d":"ADR-052: Background Job Execution (Bounded Queue plus Hosted Drain)","k":"Architecture Decision Records","t":"Decision","x":"In-process background work runs as a bounded queue plus a single-reader hosted drain. Nothing starts an untracked Task from a request. - A bounded Channel per job kind,…"},"519":{"u":"/docs/adr/052-background-job-execution.html#rationale","d":"ADR-052: Background Job Execution (Bounded Queue plus Hosted Drain)","k":"Architecture Decision Records","t":"Rationale","x":"- The host lifetime is the point. A BackgroundService is the only in-process shape the host can cancel and await. Everything else in the decision follows from wanting that. - The…"},"520":{"u":"/docs/adr/052-background-job-execution.html#trade-offs","d":"ADR-052: Background Job Execution (Bounded Queue plus Hosted Drain)","k":"Architecture Decision Records","t":"Trade-offs","x":"- In-process only. The queue does not survive a restart and does not span replicas. Accepted because every current job is either ephemeral (a lost broadcast is a missed UI…"},"521":{"u":"/docs/adr/052-background-job-execution.html#related","d":"ADR-052: Background Job Execution (Bounded Queue plus Hosted Drain)","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (the outbox, for work that must be durable and cross-process, and the post-commit deferral this relies on), ADR-008 (the broker, for cross-service work), ADR-014 (the…"},"522":{"u":"/docs/adr/052-background-job-execution.html#revision-2026-08-23","d":"ADR-052: Background Job Execution (Bounded Queue plus Hosted Drain)","k":"Architecture Decision Records","t":"Revision (2026-08-23)","x":"The decision is unchanged: post-commit work is still enqueued only once the write is durable. What changed is the record of how. This ADR stated the domain-event handler as the…"},"523":{"u":"/docs/adr/052-background-job-execution.html#revision-2026-08-31","d":"ADR-052: Background Job Execution (Bounded Queue plus Hosted Drain)","k":"Architecture Decision Records","t":"Revision (2026-08-31)","x":"The decision and the safety property are unchanged: post-commit work is still enqueued only once the write is durable. What changed is who keeps the ordering for shape 2. Three…"},"524":{"u":"/docs/adr/052-background-job-execution.html#revision-2026-09-19","d":"ADR-052: Background Job Execution (Bounded Queue plus Hosted Drain)","k":"Architecture Decision Records","t":"Revision (2026-09-19)","x":"The decision and the safety property are unchanged: post-commit work is still enqueued only once the write is durable. What changed is where the save sits in the one remaining…"},"525":{"u":"/docs/adr/053-dual-registry-package-publishing.html","d":"ADR-053: Dual-Registry Package Publishing (nuget.org plus GitHub Packages)","k":"Architecture Decision Records"},"526":{"u":"/docs/adr/053-dual-registry-package-publishing.html#status","d":"ADR-053: Dual-Registry Package Publishing (nuget.org plus GitHub Packages)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-25). Amended (2026-07-25) to put the pre-decision Context statements in the past tense, to record the MMCA. ID prefix reservation as then-pending, to scope the…"},"527":{"u":"/docs/adr/053-dual-registry-package-publishing.html#context","d":"ADR-053: Dual-Registry Package Publishing (nuget.org plus GitHub Packages)","k":"Architecture Decision Records","t":"Context","x":"The MMCA.Common. packages have shipped to GitHub Packages since the first release (the package list and its count are generated and CI-gated in MMCA.Common/FACTS.md:19-43, so…"},"528":{"u":"/docs/adr/053-dual-registry-package-publishing.html#decision","d":"ADR-053: Dual-Registry Package Publishing (nuget.org plus GitHub Packages)","k":"Architecture Decision Records","t":"Decision","x":"Every release publishes to both registries, from the same tag, in the same workflow run. - release.yml keeps its existing dotnet nuget push to…"},"529":{"u":"/docs/adr/053-dual-registry-package-publishing.html#rationale","d":"ADR-053: Dual-Registry Package Publishing (nuget.org plus GitHub Packages)","k":"Architecture Decision Records","t":"Rationale","x":"- The install line has to be true. Documentation that cannot be followed is worse than no documentation, because the reader concludes the project is broken rather than that the…"},"530":{"u":"/docs/adr/053-dual-registry-package-publishing.html#trade-offs","d":"ADR-053: Dual-Registry Package Publishing (nuget.org plus GitHub Packages)","k":"Architecture Decision Records","t":"Trade-offs","x":"- A published version can never be withdrawn. nuget.org allows unlisting, not deletion. A bad release is now permanent public history, which raises the stakes on the release…"},"531":{"u":"/docs/adr/053-dual-registry-package-publishing.html#revision-2026-10-01","d":"ADR-053: Dual-Registry Package Publishing (nuget.org plus GitHub Packages)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision changed; the record is re-pinned to release.yml as of MMCA.Common v1.216.0 and two statements are corrected. Re-pinned: the GitHub Packages pushes (release.yml:118,…"},"532":{"u":"/docs/adr/053-dual-registry-package-publishing.html#related","d":"ADR-053: Dual-Registry Package Publishing (nuget.org plus GitHub Packages)","k":"Architecture Decision Records","t":"Related","x":"ADR-016 (lockstep versioning: every package ships at one version, so both registries receive the same set of ids per release, enumerated in MMCA.Common/FACTS.md:19-43), ADR-038…"},"533":{"u":"/docs/adr/054-saga-compensation-and-reconciliation.html","d":"ADR-054: Choreographed Saga Compensation with a Reconciliation Backstop","k":"Architecture Decision Records"},"534":{"u":"/docs/adr/054-saga-compensation-and-reconciliation.html#status","d":"ADR-054: Choreographed Saga Compensation with a Reconciliation Backstop","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-25). Amended (2026-07-28): Store's reconciliation sweep now derives from PeriodicBackgroundService, so the shared-loop and adoption paragraphs are rewritten and…"},"535":{"u":"/docs/adr/054-saga-compensation-and-reconciliation.html#context","d":"ADR-054: Choreographed Saga Compensation with a Reconciliation Backstop","k":"Architecture Decision Records","t":"Context","x":"Checkout spans a boundary no transaction covers. CheckOutHandler commits the order insert, the cart transition and the atomic conditional stock decrements in one local…"},"536":{"u":"/docs/adr/054-saga-compensation-and-reconciliation.html#decision","d":"ADR-054: Choreographed Saga Compensation with a Reconciliation Backstop","k":"Architecture Decision Records","t":"Decision","x":"Multi-step workflows are choreographed sagas: each step raises a domain event, and the follow-up or compensating action lives in its own handler. A periodic reconciliation sweep…"},"537":{"u":"/docs/adr/054-saga-compensation-and-reconciliation.html#rationale","d":"ADR-054: Choreographed Saga Compensation with a Reconciliation Backstop","k":"Architecture Decision Records","t":"Rationale","x":"- No two-phase commit is available, and none is wanted. Transactions are per data source and best-effort sequential (ADR-006), and an external payment provider cannot enlist in a…"},"538":{"u":"/docs/adr/054-saga-compensation-and-reconciliation.html#trade-offs","d":"ADR-054: Choreographed Saga Compensation with a Reconciliation Backstop","k":"Architecture Decision Records","t":"Trade-offs","x":"- Inconsistency is bounded, not eliminated. Between the cancellation commit and the compensation commit, stock is held against a cancelled order. Between a dropped webhook and…"},"539":{"u":"/docs/adr/054-saga-compensation-and-reconciliation.html#revision-2026-09-11-the-unpaid-order-deadline-moves-onto-the-order-and-the-sweep-becomes-its-backstop","d":"ADR-054: Choreographed Saga Compensation with a Reconciliation Backstop","k":"Architecture Decision Records","t":"Revision (2026-09-11): the unpaid-order deadline moves onto the order, and the sweep becomes its backstop","x":"Expiring an unpaid order is no longer something a scan notices. Every order now arms its own deadline, and the sweep's expiry pass stays exactly where it was, underneath.…"},"540":{"u":"/docs/adr/054-saga-compensation-and-reconciliation.html#revision-2026-10-01","d":"ADR-054: Choreographed Saga Compensation with a Reconciliation Backstop","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The idempotency guarantee is now one transaction rather than one SaveChanges. OrderCancelledSagaHandler runs the whole restoration as a single ExecuteInTransactionAsync delegate…"},"541":{"u":"/docs/adr/054-saga-compensation-and-reconciliation.html#related","d":"ADR-054: Choreographed Saga Compensation with a Reconciliation Backstop","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (the outbox delivery and retry this leans on for compensation redelivery; this record says what the redelivered handler must do), ADR-006 (which accepts \"no…"},"542":{"u":"/docs/adr/055-repository-and-specification-contract.html","d":"ADR-055: Repository plus Specification as the Data-Access Contract","k":"Architecture Decision Records"},"543":{"u":"/docs/adr/055-repository-and-specification-contract.html#status","d":"ADR-055: Repository plus Specification as the Data-Access Contract","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-25). Revised 2026-08-01 (qualified the \"referenced nowhere\" claim about IEntityReader / IEntityQuerier: an ADC doc comment now names IEntityQuerier, though no…"},"544":{"u":"/docs/adr/055-repository-and-specification-contract.html#context","d":"ADR-055: Repository plus Specification as the Data-Access Contract","k":"Architecture Decision Records","t":"Context","x":"Every read an application handler performs has to come from somewhere, and the shape of that contract decides whether the module can still be lifted into its own service later…"},"545":{"u":"/docs/adr/055-repository-and-specification-contract.html#decision","d":"ADR-055: Repository plus Specification as the Data-Access Contract","k":"Architecture Decision Records","t":"Decision","x":"Data access is repository plus specification: interface-segregated read interfaces for the operations, expression-tree specifications for the predicates, and a build-failing…"},"546":{"u":"/docs/adr/055-repository-and-specification-contract.html#rationale","d":"ADR-055: Repository plus Specification as the Data-Access Contract","k":"Architecture Decision Records","t":"Rationale","x":"- A narrow interface is the enforcement, not a style preference. A handler that asks for IEntityReader cannot reach TableNoTracking, because the member is not on the interface.…"},"547":{"u":"/docs/adr/055-repository-and-specification-contract.html#trade-offs","d":"ADR-055: Repository plus Specification as the Data-Access Contract","k":"Architecture Decision Records","t":"Trade-offs","x":"- The ISP split is guidance, not yet a wired dependency. (Superseded by the Revision (2026-08-21) below: the split has real dependents shipped in both MMCA.ADC and MMCA.Store,…"},"548":{"u":"/docs/adr/055-repository-and-specification-contract.html#related","d":"ADR-055: Repository plus Specification as the Data-Access Contract","k":"Architecture Decision Records","t":"Related","x":"ADR-007 and ADR-008 (the extraction promise the queryable ban exists to protect), ADR-015 (the fitness-function machinery that runs this rule and its per-repo maps), ADR-014 (the…"},"549":{"u":"/docs/adr/055-repository-and-specification-contract.html#revision-2026-08-18","d":"ADR-055: Repository plus Specification as the Data-Access Contract","k":"Architecture Decision Records","t":"Revision (2026-08-18)","x":"Five changes, four of them widening the contract and one of them fixing a correctness defect. The decision this record states is unchanged: data access is still repository plus…"},"550":{"u":"/docs/adr/055-repository-and-specification-contract.html#revision-2026-08-21","d":"ADR-055: Repository plus Specification as the Data-Access Contract","k":"Architecture Decision Records","t":"Revision (2026-08-21)","x":"Nothing in the contract changed; its consumers did. This revision records the first real adoption of the two surfaces this record had honestly flagged as unconsumed: the narrow…"},"551":{"u":"/docs/adr/055-repository-and-specification-contract.html#revision-2026-08-31","d":"ADR-055: Repository plus Specification as the Data-Access Contract","k":"Architecture Decision Records","t":"Revision (2026-08-31)","x":"Again nothing in the decision changed. Two things did: the querier grew a second time, and the reference application joined the two production apps as a consumer of the narrow…"},"552":{"u":"/docs/adr/055-repository-and-specification-contract.html#revision-2026-10-01","d":"ADR-055: Repository plus Specification as the Data-Access Contract","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; the consumers grew again and the anchors moved. MMCA.ADC now declares IEntityReader / IEntityQuerier at forty read-only sites across…"},"553":{"u":"/docs/adr/056-blazor-render-mode-strategy.html","d":"ADR-056: Blazor Render-Mode Strategy for the Web Heads","k":"Architecture Decision Records"},"554":{"u":"/docs/adr/056-blazor-render-mode-strategy.html#status","d":"ADR-056: Blazor Render-Mode Strategy for the Web Heads","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-28). Revised 2026-08-14: re-anchored the host, base-class and AppHost citations to their current lines; scoped the \"only @rendermode attributes\" enumeration to…"},"555":{"u":"/docs/adr/056-blazor-render-mode-strategy.html#context","d":"ADR-056: Blazor Render-Mode Strategy for the Web Heads","k":"Architecture Decision Records","t":"Context","x":"Both web applications are Blazor Web Apps: a static server-rendered (SSR) prerender pass produces the first HTML, then an interactive runtime takes over, either a Blazor Server…"},"556":{"u":"/docs/adr/056-blazor-render-mode-strategy.html#decision","d":"ADR-056: Blazor Render-Mode Strategy for the Web Heads","k":"Architecture Decision Records","t":"Decision","x":"Run one render mode for the entire routable component tree, chosen at the application root, default InteractiveAuto, with prerendering left on and the resulting double fetch…"},"557":{"u":"/docs/adr/056-blazor-render-mode-strategy.html#rationale","d":"ADR-056: Blazor Render-Mode Strategy for the Web Heads","k":"Architecture Decision Records","t":"Rationale","x":"- InteractiveAuto gets both halves without asking page authors to choose. The first visit gets the Server circuit's immediate interactivity while the WASM bundle downloads in the…"},"558":{"u":"/docs/adr/056-blazor-render-mode-strategy.html#trade-offs","d":"ADR-056: Blazor Render-Mode Strategy for the Web Heads","k":"Architecture Decision Records","t":"Trade-offs","x":"- Everything shared has to run in both runtimes. The WASM-compatibility layer rule (MMCA.Common.LayerEnforcement.targets:102-115) forbids the shared UI package from touching…"},"559":{"u":"/docs/adr/056-blazor-render-mode-strategy.html#revision-2026-10-01","d":"ADR-056: Blazor Render-Mode Strategy for the Web Heads","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. The prerender-skip guard bullet now lists four stated reasons rather than three: ADCHome skips its prerender fetch because an un-timed call to a…"},"560":{"u":"/docs/adr/056-blazor-render-mode-strategy.html#related","d":"ADR-056: Blazor Render-Mode Strategy for the Web Heads","k":"Architecture Decision Records","t":"Related","x":"ADR-022 (reads the HttpOnly session cookie during the SSR prerender pass this decision keeps enabled), ADR-027 (flows one culture through the SSR to Server to WASM sequence this…"},"561":{"u":"/docs/adr/057-expand-contract-schema-evolution-gate.html","d":"ADR-057: Expand/Contract Schema Evolution Enforced as a CI Gate","k":"Architecture Decision Records"},"562":{"u":"/docs/adr/057-expand-contract-schema-evolution-gate.html#status","d":"ADR-057: Expand/Contract Schema Evolution Enforced as a CI Gate","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-28). Revised 2026-08-01: the diff now fails closed in both repos (the true is gone and MMCA.Store's build-and-test checkout sets fetch-depth: 0), so the…"},"563":{"u":"/docs/adr/057-expand-contract-schema-evolution-gate.html#context","d":"ADR-057: Expand/Contract Schema Evolution Enforced as a CI Gate","k":"Architecture Decision Records","t":"Context","x":"ADR-030 decides who applies a migration: every service host runs DatabaseInitStrategy = Migrate and self-applies its pending EF Core migrations at startup as the sole migrator,…"},"564":{"u":"/docs/adr/057-expand-contract-schema-evolution-gate.html#decision","d":"ADR-057: Expand/Contract Schema Evolution Enforced as a CI Gate","k":"Architecture Decision Records","t":"Decision","x":"Schema changes follow expand/contract, and a CI step enforces the contract half. - Expand now, contract later, as a written rule. Adding nullable columns, new tables and new…"},"565":{"u":"/docs/adr/057-expand-contract-schema-evolution-gate.html#rationale","d":"ADR-057: Expand/Contract Schema Evolution Enforced as a CI Gate","k":"Architecture Decision Records","t":"Rationale","x":"- Rollback is one-way for schema, so the check belongs where the drop is still cheap. The only moment a destructive migration can be reconsidered for free is the PR that adds it;…"},"566":{"u":"/docs/adr/057-expand-contract-schema-evolution-gate.html#trade-offs","d":"ADR-057: Expand/Contract Schema Evolution Enforced as a CI Gate","k":"Architecture Decision Records","t":"Trade-offs","x":"- Three operations, not a model of compatibility. AlterColumn narrowing a type or flipping a column to NOT NULL, DropForeignKey, DropPrimaryKey, DropSchema, RenameColumn and a…"},"567":{"u":"/docs/adr/057-expand-contract-schema-evolution-gate.html#revision-2026-10-01","d":"ADR-057: Expand/Contract Schema Evolution Enforced as a CI Gate","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Both deploy.yml files grew, so every workflow citation is re-anchored to the current lines: the startup-migrate note…"},"568":{"u":"/docs/adr/057-expand-contract-schema-evolution-gate.html#related","d":"ADR-057: Expand/Contract Schema Evolution Enforced as a CI Gate","k":"Architecture Decision Records","t":"Related","x":"ADR-030 (decides that each service self-applies its migrations at startup, which is precisely why a rolled-back revision meets the new schema; this ADR constrains what those…"},"569":{"u":"/docs/adr/058-runtime-conformance-suites-as-a-package.html","d":"ADR-058: Runtime Conformance Suites Shipped as a Package","k":"Architecture Decision Records"},"570":{"u":"/docs/adr/058-runtime-conformance-suites-as-a-package.html#status","d":"ADR-058: Runtime Conformance Suites Shipped as a Package","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-28; revised 2026-08-14, 2026-08-18, 2026-08-23, and 2026-09-03). Revised 2026-09-22 (the layer rules also ship as compile-time MSBuild targets inside…"},"571":{"u":"/docs/adr/058-runtime-conformance-suites-as-a-package.html#context","d":"ADR-058: Runtime Conformance Suites Shipped as a Package","k":"Architecture Decision Records","t":"Context","x":"ADR-015 turned the architecture invariants into build-gating tests, and drew its own boundary explicitly: the fitness suite asserts \"structure / registration, not runtime…"},"572":{"u":"/docs/adr/058-runtime-conformance-suites-as-a-package.html#decision","d":"ADR-058: Runtime Conformance Suites Shipped as a Package","k":"Architecture Decision Records","t":"Decision","x":"Ship the runtime conformance suites in the MMCA.Common.Testing package as abstract behavioral bases that each consuming host subclasses, and run every one of them against a host…"},"573":{"u":"/docs/adr/058-runtime-conformance-suites-as-a-package.html#rationale","d":"ADR-058: Runtime Conformance Suites Shipped as a Package","k":"Architecture Decision Records","t":"Rationale","x":"- Runtime conformance is the half ADR-015 excluded. Structural rules answer \"is the code shaped correctly\"; these suites answer \"does the composed host behave correctly\". A host…"},"574":{"u":"/docs/adr/058-runtime-conformance-suites-as-a-package.html#trade-offs","d":"ADR-058: Runtime Conformance Suites Shipped as a Package","k":"Architecture Decision Records","t":"Trade-offs","x":"- Opt-in per host, exactly like ADR-015. The framework ships the suites; a host gets the gate only once someone writes the subclass. That is the same audit-the-inventory caveat,…"},"575":{"u":"/docs/adr/058-runtime-conformance-suites-as-a-package.html#revision-2026-09-10","d":"ADR-058: Runtime Conformance Suites Shipped as a Package","k":"Architecture Decision Records","t":"Revision (2026-09-10)","x":"The security-headers suite reaches both UI web hosts, so the adoption inventory above is no longer Gateway-only for it. ADC added MMCA.ADC/Tests/Hosts/MMCA.ADC.UI.Web.Tests,…"},"576":{"u":"/docs/adr/058-runtime-conformance-suites-as-a-package.html#revision-2026-09-22-the-layer-rules-also-ship-as-compile-time-targets","d":"ADR-058: Runtime Conformance Suites Shipped as a Package","k":"Architecture Decision Records","t":"Revision (2026-09-22): the layer rules also ship as compile-time targets","x":"The runtime suites above judge compiled assemblies, which places the first failure in the architecture test tier. MMCA.Common.Shared now also packs…"},"577":{"u":"/docs/adr/058-runtime-conformance-suites-as-a-package.html#revision-2026-09-25-committed-openapi-documents-and-page-test-bases-in-testingui","d":"ADR-058: Runtime Conformance Suites Shipped as a Package","k":"Architecture Decision Records","t":"Revision (2026-09-25): committed OpenAPI documents, and page-test bases in Testing.UI","x":"The live-document guard now sits beside a committed document in both consumers. MMCA.ADC and MMCA.Store each write Source/Services/ /openapi/ .json at build time, commit it, and…"},"578":{"u":"/docs/adr/058-runtime-conformance-suites-as-a-package.html#revision-2026-10-01","d":"ADR-058: Runtime Conformance Suites Shipped as a Package","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; the seven bases still ship in MMCA.Common.Testing and are subclassed as inventoried above. Three statements are corrected. The gateway probe…"},"579":{"u":"/docs/adr/058-runtime-conformance-suites-as-a-package.html#related","d":"ADR-058: Runtime Conformance Suites Shipped as a Package","k":"Architecture Decision Records","t":"Related","x":"ADR-015 (the structural / registration fitness layer this complements; its stated non-goal, \"not runtime behavior\", is exactly this ADR's scope, and the two tiers ship as two…"},"580":{"u":"/docs/adr/059-module-contract-and-composition.html","d":"ADR-059: The IModule Contract and Reflection-Based Module Composition","k":"Architecture Decision Records"},"581":{"u":"/docs/adr/059-module-contract-and-composition.html#status","d":"ADR-059: The IModule Contract and Reflection-Based Module Composition","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-28; revised 2026-08-14)."},"582":{"u":"/docs/adr/059-module-contract-and-composition.html#context","d":"ADR-059: The IModule Contract and Reflection-Based Module Composition","k":"Architecture Decision Records","t":"Context","x":"The framework's headline claim is that an application is built as a modular monolith and later extracted into services without rewriting business logic. ADR-008 states the…"},"583":{"u":"/docs/adr/059-module-contract-and-composition.html#decision","d":"ADR-059: The IModule Contract and Reflection-Based Module Composition","k":"Architecture Decision Records","t":"Decision","x":"Make IModule the single composition contract, discover implementations by reflection, register them in topological dependency order, and represent a disabled module by stub…"},"584":{"u":"/docs/adr/059-module-contract-and-composition.html#rationale","d":"ADR-059: The IModule Contract and Reflection-Based Module Composition","k":"Architecture Decision Records","t":"Rationale","x":"- Reflection discovery keeps hosts out of the module registration business. A host names the assemblies and gets whatever IModule types they contain: no per-module registration…"},"585":{"u":"/docs/adr/059-module-contract-and-composition.html#trade-offs","d":"ADR-059: The IModule Contract and Reflection-Based Module Composition","k":"Architecture Decision Records","t":"Trade-offs","x":"- The composition root has to name every module assembly. Discovery scans exactly the list it is handed (ModuleLoader.cs:59-65), so adding a module to a host is a third edit…"},"586":{"u":"/docs/adr/059-module-contract-and-composition.html#revision-2026-10-01","d":"ADR-059: The IModule Contract and Reflection-Based Module Composition","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The decision is unchanged; four statements are corrected against the code and the citations are re-anchored. A GetTypes() failure is no longer a skip: a…"},"587":{"u":"/docs/adr/059-module-contract-and-composition.html#related","d":"ADR-059: The IModule Contract and Reflection-Based Module Composition","k":"Architecture Decision Records","t":"Related","x":"ADR-008 (the extraction topology that consumes this model: \"a service is the monolith with one module enabled\" is a statement about ModuleLoader plus the Disabled stubs, cited…"},"588":{"u":"/docs/adr/060-performance-regression-gate.html","d":"ADR-060: Performance-Regression Gate (Committed Benchmark Baseline in CI)","k":"Architecture Decision Records"},"589":{"u":"/docs/adr/060-performance-regression-gate.html#status","d":"ADR-060: Performance-Regression Gate (Committed Benchmark Baseline in CI)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-07-28). Revised 2026-08-01 (corrected the count in Trade-offs: the single ratio floor names two of the eight benchmarks, so six, not seven, are gated on…"},"590":{"u":"/docs/adr/060-performance-regression-gate.html#context","d":"ADR-060: Performance-Regression Gate (Committed Benchmark Baseline in CI)","k":"Architecture Decision Records","t":"Context","x":"Rubric section 12 asks for hot-path efficiency that is measured, not assumed (Website/docs-src/governance/ArchitectureEvaluationCriteria.md:386). MMCA.Common has a…"},"591":{"u":"/docs/adr/060-performance-regression-gate.html#decision","d":"ADR-060: Performance-Regression Gate (Committed Benchmark Baseline in CI)","k":"Architecture Decision Records","t":"Decision","x":"Measure the hot-path suite on every code PR and verify the results against a committed baseline that carries two rule kinds: absolute allocation ceilings where the measurement is…"},"592":{"u":"/docs/adr/060-performance-regression-gate.html#rationale","d":"ADR-060: Performance-Regression Gate (Committed Benchmark Baseline in CI)","k":"Architecture Decision Records","t":"Rationale","x":"- A ratio is a property of the code; an absolute nanosecond count is a property of the runner. Both benchmarks in a floor run in the same process, on the same machine, in the…"},"593":{"u":"/docs/adr/060-performance-regression-gate.html#trade-offs","d":"ADR-060: Performance-Regression Gate (Committed Benchmark Baseline in CI)","k":"Architecture Decision Records","t":"Trade-offs","x":"- The Short job cannot see small latency regressions. Three warmup and three iterations (ci.yml:386) give wide confidence intervals: enough for a 1000x floor and for counting…"},"594":{"u":"/docs/adr/060-performance-regression-gate.html#revision-2026-10-01","d":"ADR-060: Performance-Regression Gate (Committed Benchmark Baseline in CI)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. The consumer load-freshness jobs no longer carry the recency query and the break-glass check inline: both MMCA.ADC and MMCA.Store now call the…"},"595":{"u":"/docs/adr/060-performance-regression-gate.html#related","d":"ADR-060: Performance-Regression Gate (Committed Benchmark Baseline in CI)","k":"Architecture Decision Records","t":"Related","x":"ADR-015 (structural fitness functions, which explicitly stop at structure and registration; this is their runtime-cost counterpart), ADR-038 (the other build-gating control set,…"},"596":{"u":"/docs/adr/061-runtime-secret-management.html","d":"ADR-061: Runtime Secret Management via Key Vault References and Managed Identity","k":"Architecture Decision Records"},"597":{"u":"/docs/adr/061-runtime-secret-management.html#status","d":"ADR-061: Runtime Secret Management via Key Vault References and Managed Identity","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-01; vault-backed configuration source recorded and citations re-anchored 2026-08-23; gateway synthetic-traffic secret recorded and citations re-anchored…"},"598":{"u":"/docs/adr/061-runtime-secret-management.html#context","d":"ADR-061: Runtime Secret Management via Key Vault References and Managed Identity","k":"Architecture Decision Records","t":"Context","x":"A Container App can hold a credential two ways: as a literal value in the app's own secrets collection, or as a reference to a Key Vault secret that the platform resolves at…"},"599":{"u":"/docs/adr/061-runtime-secret-management.html#decision","d":"ADR-061: Runtime Secret Management via Key Vault References and Managed Identity","k":"Architecture Decision Records","t":"Decision","x":"Every production secret lives in Azure Key Vault and reaches the app as a keyVaultUrl secret reference resolved by a user-assigned managed identity; the same identity also lets a…"},"600":{"u":"/docs/adr/061-runtime-secret-management.html#rationale","d":"ADR-061: Runtime Secret Management via Key Vault References and Managed Identity","k":"Architecture Decision Records","t":"Rationale","x":"- A reference has one home; a literal has as many homes as it has consumers. Three vault secrets in each repo are referenced by more than one app: Redis by all four ADC services…"},"601":{"u":"/docs/adr/061-runtime-secret-management.html#trade-offs","d":"ADR-061: Runtime Secret Management via Key Vault References and Managed Identity","k":"Architecture Decision Records","t":"Trade-offs","x":"- One identity means vault-wide read for every app that carries it. A Key Vault Secrets User grant is scoped to the vault, so any app running as the shared identity can read…"},"602":{"u":"/docs/adr/061-runtime-secret-management.html#revision-2026-09-07","d":"ADR-061: Runtime Secret Management via Key Vault References and Managed Identity","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Two changes from the 2026-09-07 security review. 1. Per-service Service Bus SAS rules (SEC-ADC-26 / SEC-Store-38). One namespace-wide rule shared by every service means any one…"},"603":{"u":"/docs/adr/061-runtime-secret-management.html#revision-2026-09-10","d":"ADR-061: Runtime Secret Management via Key Vault References and Managed Identity","k":"Architecture Decision Records","t":"Revision (2026-09-10)","x":"ADC's Gateway now reads the vault like every other deployable, closing the one adoption difference above. MMCA.ADC/Source/Hosts/MMCA.ADC.Gateway/Program.cs:66 calls…"},"604":{"u":"/docs/adr/061-runtime-secret-management.html#revision-2026-10-01","d":"ADR-061: Runtime Secret Management via Key Vault References and Managed Identity","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Every main.bicep, deploy.yml, Program.cs, sample and CI citation in the sections above is re-anchored, and the secret counts (nineteen in ADC,…"},"605":{"u":"/docs/adr/061-runtime-secret-management.html#related","d":"ADR-061: Runtime Secret Management via Key Vault References and Managed Identity","k":"Architecture Decision Records","t":"Related","x":"ADR-037 (037-field-level-encryption-at-rest.md:108-110 directs a consumer to keep the field-encryption key in Key Vault but decides no delivery mechanism, and nothing wires that…"},"606":{"u":"/docs/adr/062-slo-alerting-as-code.html","d":"ADR-062: SLO Alerting as Code with an Alert-to-Runbook Build Gate","k":"Architecture Decision Records"},"607":{"u":"/docs/adr/062-slo-alerting-as-code.html#status","d":"ADR-062: SLO Alerting as Code with an Alert-to-Runbook Build Gate","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-01). Revised 2026-08-18: Store's two operational extras (the outbox-dead-letter scheduled query rule and the outside-in Gateway availability web test with its…"},"608":{"u":"/docs/adr/062-slo-alerting-as-code.html#context","d":"ADR-062: SLO Alerting as Code with an Alert-to-Runbook Build Gate","k":"Architecture Decision Records","t":"Context","x":"ADR-041 standardized what the fleet emits: RED histograms off the CQRS pipeline, an outbox dead-letter counter, correlation ids, exporters, and the cost knobs that keep ingestion…"},"609":{"u":"/docs/adr/062-slo-alerting-as-code.html#decision","d":"ADR-062: SLO Alerting as Code with an Alert-to-Runbook Build Gate","k":"Architecture Decision Records","t":"Decision","x":"Declare each consumer's SLO alerts as data in its Bicep template, materialize them as Log Analytics scheduled query rules, and make the alert-to-runbook pairing a build gate…"},"610":{"u":"/docs/adr/062-slo-alerting-as-code.html#rationale","d":"ADR-062: SLO Alerting as Code with an Alert-to-Runbook Build Gate","k":"Architecture Decision Records","t":"Rationale","x":"- Alerts as data, not as portal state. One array is reviewable in a PR, diffable across environments, and re-deployable; the rules, the workbook, and the notification channel are…"},"611":{"u":"/docs/adr/062-slo-alerting-as-code.html#trade-offs","d":"ADR-062: SLO Alerting as Code with an Alert-to-Runbook Build Gate","k":"Architecture Decision Records","t":"Trade-offs","x":"- It is a text gate over IaC, not a check against deployed state. The base matches literal anchors and regexes in the template and headings in markdown. It proves the two files…"},"612":{"u":"/docs/adr/062-slo-alerting-as-code.html#revision-2026-09-07","d":"ADR-062: SLO Alerting as Code with an Alert-to-Runbook Build Gate","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The alert-to-runbook model is unchanged. Store's rule set grew by three, in one block from the 2026-09-07 security review (MMCA.Store/infra/main.bicep:458-459). 1. A security…"},"613":{"u":"/docs/adr/062-slo-alerting-as-code.html#revision-2026-10-01","d":"ADR-062: SLO Alerting as Code with an Alert-to-Runbook Build Gate","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Both templates grew by 19 lines above the alert block, so every main.bicep citation in the current-state sections is re-anchored: sloAlertSpecs…"},"614":{"u":"/docs/adr/062-slo-alerting-as-code.html#related","d":"ADR-062: SLO Alerting as Code with an Alert-to-Runbook Build Gate","k":"Architecture Decision Records","t":"Related","x":"ADR-041 (the telemetry this alerts on top of: it defines emission, instrumentation and cost knobs and stops before thresholds, severities and runbooks), ADR-009 (recovery…"},"615":{"u":"/docs/adr/063-accessibility-conformance-gate.html","d":"ADR-063: WCAG 2.1 AA Accessibility as a Shipped Test Contract and CI Gate","k":"Architecture Decision Records"},"616":{"u":"/docs/adr/063-accessibility-conformance-gate.html#status","d":"ADR-063: WCAG 2.1 AA Accessibility as a Shipped Test Contract and CI Gate","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-01). Revised 2026-08-14: refreshed the E2ETestBase helper line anchors (explanatory comments were added above ScanGridAsync), the two consumer suite scan counts…"},"617":{"u":"/docs/adr/063-accessibility-conformance-gate.html#context","d":"ADR-063: WCAG 2.1 AA Accessibility as a Shipped Test Contract and CI Gate","k":"Architecture Decision Records","t":"Context","x":"Accessibility was documented before it was enforced. The narrative guide (common-ACCESSIBILITY.md, rubric section 21) named WCAG 2.1 AA as the target for the shared…"},"618":{"u":"/docs/adr/063-accessibility-conformance-gate.html#decision","d":"ADR-063: WCAG 2.1 AA Accessibility as a Shipped Test Contract and CI Gate","k":"Architecture Decision Records","t":"Decision","x":"Ship WCAG 2.1 AA as a named, versioned test contract in MMCA.Common.Testing.E2E, assert it from the package's own workflow bases, and wire it as a required merge check and a…"},"619":{"u":"/docs/adr/063-accessibility-conformance-gate.html#rationale","d":"ADR-063: WCAG 2.1 AA Accessibility as a Shipped Test Contract and CI Gate","k":"Architecture Decision Records","t":"Rationale","x":"- A named constant is the contract. Putting the rule set in a shipped, referenced symbol rather than in each repo's test setup means \"what WCAG 2.1 AA means here\" has exactly one…"},"620":{"u":"/docs/adr/063-accessibility-conformance-gate.html#trade-offs","d":"ADR-063: WCAG 2.1 AA Accessibility as a Shipped Test Contract and CI Gate","k":"Architecture Decision Records","t":"Trade-offs","x":"- Best-practice rules are out of scope, deliberately. Findings axe would classify as best practice (and anything WCAG AAA) are not measured at all, so the gate can be green on a…"},"621":{"u":"/docs/adr/063-accessibility-conformance-gate.html#revision-2026-10-01","d":"ADR-063: WCAG 2.1 AA Accessibility as a Shipped Test Contract and CI Gate","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Citations are re-anchored to current source: the Identity base assertions (UserLoginTestsBase.cs:82, UserRegistrationTestsBase.cs:95,…"},"622":{"u":"/docs/adr/063-accessibility-conformance-gate.html#related","d":"ADR-063: WCAG 2.1 AA Accessibility as a Shipped Test Contract and CI Gate","k":"Architecture Decision Records","t":"Related","x":"ADR-015 (architecture fitness functions: the structural tier this parallels at the browser tier, and the same invariant-over-discipline posture), ADR-058 (runtime conformance…"},"623":{"u":"/docs/adr/064-deploy-recency-gates.html","d":"ADR-064: Deploy Preconditions as Proof-of-Recency Gates","k":"Architecture Decision Records"},"624":{"u":"/docs/adr/064-deploy-recency-gates.html#status","d":"ADR-064: Deploy Preconditions as Proof-of-Recency Gates","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-01). Revised 2026-08-07: the MMCA.Helpdesk workflow inventory below was corrected (it also carries release-templates.yml, and its ci.yml runs two jobs, not…"},"625":{"u":"/docs/adr/064-deploy-recency-gates.html#context","d":"ADR-064: Deploy Preconditions as Proof-of-Recency Gates","k":"Architecture Decision Records","t":"Context","x":"A production rollout in both deployed apps waits on a list of jobs in deploy.needs (MMCA.ADC/.github/workflows/deploy.yml:1185, MMCA.Store/.github/workflows/deploy.yml:1136).…"},"626":{"u":"/docs/adr/064-deploy-recency-gates.html#decision","d":"ADR-064: Deploy Preconditions as Proof-of-Recency Gates","k":"Architecture Decision Records","t":"Decision","x":"A production deploy is blocked not only on green tests but on proof of recency for out-of-band verification: four gates assert that a real drill, a real load run, a real broker…"},"627":{"u":"/docs/adr/064-deploy-recency-gates.html#rationale","d":"ADR-064: Deploy Preconditions as Proof-of-Recency Gates","k":"Architecture Decision Records","t":"Rationale","x":"- A proof with no expiry date is documentation, not a control. ADR-009 already required the drill to be recorded, and recording it was the honest half of the problem; a record…"},"628":{"u":"/docs/adr/064-deploy-recency-gates.html#trade-offs","d":"ADR-064: Deploy Preconditions as Proof-of-Recency Gates","k":"Architecture Decision Records","t":"Trade-offs","x":"- An unrelated stale proof blocks an unrelated deploy. A one-line hotfix does not ship when the monthly k6 cron did not fire, and the failure surfaces after merge: the gate job…"},"629":{"u":"/docs/adr/064-deploy-recency-gates.html#revision-2026-10-01","d":"ADR-064: Deploy Preconditions as Proof-of-Recency Gates","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The four gate bodies no longer live in each repo's deploy.yml. MMCA.Common v1.216.0 (463) added the composite action MMCA.Common/.github/actions/freshness-gate/action.yml, and…"},"630":{"u":"/docs/adr/064-deploy-recency-gates.html#related","d":"ADR-064: Deploy Preconditions as Proof-of-Recency Gates","k":"Architecture Decision Records","t":"Related","x":"ADR-009 (states the recovery objectives and requires that a restore be drilled and recorded; this record decides that a deploy is blocked on how recently that drill, and the…"},"631":{"u":"/docs/adr/065-scaffolding-templates.html","d":"ADR-065: Scaffolding templates derived from the reference app","k":"Architecture Decision Records","x":"Status: Accepted (2026-08-02). Revised 2026-08-07: the staged analyzer delta relaxes three rules rather than one; mmca-module prints seven wire-ups rather than five, and a…"},"632":{"u":"/docs/adr/065-scaffolding-templates.html#context","d":"ADR-065: Scaffolding templates derived from the reference app","k":"Architecture Decision Records","t":"Context","x":"Build by hand is accurate and complete, and phases 1 through 6 of it are transcription work (common-BUILD-BY-HAND.md:98 through :1255). Its own instruction for the load-bearing…"},"633":{"u":"/docs/adr/065-scaffolding-templates.html#decision","d":"ADR-065: Scaffolding templates derived from the reference app","k":"Architecture Decision Records","t":"Decision","x":"Ship a dotnet new template pack, MMCA.Templates, containing four templates: The template content is the MMCA.Helpdesk reference application itself, staged at pack time.…"},"634":{"u":"/docs/adr/065-scaffolding-templates.html#rationale","d":"ADR-065: Scaffolding templates derived from the reference app","k":"Architecture Decision Records","t":"Rationale","x":"Deriving from the seed rather than maintaining a template tree is the whole design. A hand-maintained copy of a 12-project solution drifts within one release, and drift in a…"},"635":{"u":"/docs/adr/065-scaffolding-templates.html#trade-offs","d":"ADR-065: Scaffolding templates derived from the reference app","k":"Architecture Decision Records","t":"Trade-offs","x":"- One documented one-time fixup in every generated app, above, covering all three relaxed rules. The alternative to the SA1210 half of the delta was moving every app-local using…"},"636":{"u":"/docs/adr/065-scaffolding-templates.html#revision-2026-10-01","d":"ADR-065: Scaffolding templates derived from the reference app","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. The frozen wire contract is now keyed by each event's [EventName] value rather than its CLR type name…"},"637":{"u":"/docs/adr/066-broker-transport-selection.html","d":"ADR-066: Broker Transport Selection and Dev/Prod Parity","k":"Architecture Decision Records"},"638":{"u":"/docs/adr/066-broker-transport-selection.html#status","d":"ADR-066: Broker Transport Selection and Dev/Prod Parity","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-07). Revised 2026-08-14 (source citations re-anchored; the ADC AppHost comment that used to say no WithBroker() was wired has been corrected in code, so the…"},"639":{"u":"/docs/adr/066-broker-transport-selection.html#context","d":"ADR-066: Broker Transport Selection and Dev/Prod Parity","k":"Architecture Decision Records","t":"Context","x":"ADR-003 decides that integration events leave an aggregate through the outbox and are published by OutboxProcessor via IMessageBus, and it settles the dispatch question…"},"640":{"u":"/docs/adr/066-broker-transport-selection.html#decision","d":"ADR-066: Broker Transport Selection and Dev/Prod Parity","k":"Architecture Decision Records","t":"Decision","x":"Keep one IMessageBus abstraction with a three-value transport selector, choose the value at the deployment edge (never in application code), configure both broker transports…"},"641":{"u":"/docs/adr/066-broker-transport-selection.html#rationale","d":"ADR-066: Broker Transport Selection and Dev/Prod Parity","k":"Architecture Decision Records","t":"Rationale","x":"- The transport is a deployment fact, so it lives at the deployment edge. The only difference between a laptop and production is two environment variables set by the AppHost or…"},"642":{"u":"/docs/adr/066-broker-transport-selection.html#trade-offs","d":"ADR-066: Broker Transport Selection and Dev/Prod Parity","k":"Architecture Decision Records","t":"Trade-offs","x":"- Two brokers means two behaviors to keep aligned. Configuration parity is enforced by one code path, but the products still differ (Service Bus supports delayed redelivery…"},"643":{"u":"/docs/adr/066-broker-transport-selection.html#revision-2026-09-07","d":"ADR-066: Broker Transport Selection and Dev/Prod Parity","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The transport selection is unchanged. The credential topology under it is (SEC-ADC-26 / SEC-Store-38). Both repos previously sourced their Service Bus connection strings from one…"},"644":{"u":"/docs/adr/066-broker-transport-selection.html#revision-2026-10-01","d":"ADR-066: Broker Transport Selection and Dev/Prod Parity","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The local Service Bus emulator path is no longer ADC-only. Store's AppHost selects its broker once on STOREBROKER=servicebus: set, it calls AddServiceBusEmulatorBroker over the…"},"645":{"u":"/docs/adr/066-broker-transport-selection.html#related","d":"ADR-066: Broker Transport Selection and Dev/Prod Parity","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (the outbox that feeds IMessageBus; this ADR picks the transport underneath it), ADR-016 (the MassTransit v8 pin the emulator tier must work within, which is why the…"},"646":{"u":"/docs/adr/067-ui-module-shell-composition.html","d":"ADR-067: Shared Blazor Application Shell and IUIModule Composition","k":"Architecture Decision Records"},"647":{"u":"/docs/adr/067-ui-module-shell-composition.html#status","d":"ADR-067: Shared Blazor Application Shell and IUIModule Composition","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-07). Revised 2026-08-29: records the component-vendor choice (MudBlazor) that the Context already scoped to this ADR, and the IToastService / IAppDialogService…"},"648":{"u":"/docs/adr/067-ui-module-shell-composition.html#context","d":"ADR-067: Shared Blazor Application Shell and IUIModule Composition","k":"Architecture Decision Records","t":"Context","x":"ADR-059 decided how a module plugs into the server: an IModule implementation is discovered by reflection, registered in topological order, and a host composes an application out…"},"649":{"u":"/docs/adr/067-ui-module-shell-composition.html#decision","d":"ADR-067: Shared Blazor Application Shell and IUIModule Composition","k":"Architecture Decision Records","t":"Decision","x":"Ship the application shell in the framework package and let each module plug into it by implementing IUIModule, resolved from DI as IEnumerable . - The contract is four members,…"},"650":{"u":"/docs/adr/067-ui-module-shell-composition.html#rationale","d":"ADR-067: Shared Blazor Application Shell and IUIModule Composition","k":"Architecture Decision Records","t":"Rationale","x":"- One composition model across both tiers. A module already declares its server-side surface through IModule (ADR-059); declaring its UI surface through IUIModule means \"add a…"},"651":{"u":"/docs/adr/067-ui-module-shell-composition.html#trade-offs","d":"ADR-067: Shared Blazor Application Shell and IUIModule Composition","k":"Architecture Decision Records","t":"Trade-offs","x":"- Assembly is required even when it carries no route. A host-only module that contributes only a layout component still has to return an assembly, which then joins…"},"652":{"u":"/docs/adr/067-ui-module-shell-composition.html#revision-2026-10-01","d":"ADR-067: Shared Blazor Application Shell and IUIModule Composition","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Re-anchored the citations that moved: Routes.razor (inject :7, router :12-14, AuthorizeRouteView :27-50), NavMenu.razor (inject :9, filters…"},"653":{"u":"/docs/adr/067-ui-module-shell-composition.html#related","d":"ADR-067: Shared Blazor Application Shell and IUIModule Composition","k":"Architecture Decision Records","t":"Related","x":"ADR-059 (the server-side IModule contract this mirrors in the presentation layer), ADR-056 (the render-mode strategy for the web heads, which decides how these components render…"},"654":{"u":"/docs/adr/068-value-objects-as-validated-primitives.html","d":"ADR-068: Value Objects as Validated Domain Primitives","k":"Architecture Decision Records"},"655":{"u":"/docs/adr/068-value-objects-as-validated-primitives.html#status","d":"ADR-068: Value Objects as Validated Domain Primitives","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-07). Revised 2026-08-31 (Money's non-validating construction paths named, Currency's converter counted among the serialization annotations, Address added to the…"},"656":{"u":"/docs/adr/068-value-objects-as-validated-primitives.html#context","d":"ADR-068: Value Objects as Validated Domain Primitives","k":"Architecture Decision Records","t":"Context","x":"A domain model has two kinds of small type: the identity of a thing, and a value the thing carries. ADR-048 recorded the identity half: identifiers stay primitives named through…"},"657":{"u":"/docs/adr/068-value-objects-as-validated-primitives.html#decision","d":"ADR-068: Value Objects as Validated Domain Primitives","k":"Architecture Decision Records","t":"Decision","x":"Model a domain value that carries an invariant as an immutable record value object with a Result-returning factory; keep identifiers primitive (ADR-048). - One abstract record…"},"658":{"u":"/docs/adr/068-value-objects-as-validated-primitives.html#rationale","d":"ADR-068: Value Objects as Validated Domain Primitives","k":"Architecture Decision Records","t":"Rationale","x":"- The invariant belongs to the type, not to every caller. A string email can be validated in one handler and not the next; an Email cannot exist unvalidated, because the only…"},"659":{"u":"/docs/adr/068-value-objects-as-validated-primitives.html#trade-offs","d":"ADR-068: Value Objects as Validated Domain Primitives","k":"Architecture Decision Records","t":"Trade-offs","x":"- The pattern is not uniformly applied. Only three of the seven types have a companion Invariants class; the rest inline their checks. Only two of the four multi-field values…"},"660":{"u":"/docs/adr/068-value-objects-as-validated-primitives.html#revision-2026-10-01","d":"ADR-068: Value Objects as Validated Domain Primitives","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision changed; four statements were corrected and anchors refreshed. (1) The Money sugar paragraph claimed an external caller cannot assemble a Money whose currency was…"},"661":{"u":"/docs/adr/068-value-objects-as-validated-primitives.html#related","d":"ADR-068: Value Objects as Validated Domain Primitives","k":"Architecture Decision Records","t":"Related","x":"ADR-048 (the deliberate opposite call for identifiers: primitives behind aliases, wrapper structs rejected, because identifiers cross process boundaries constantly and carry no…"},"662":{"u":"/docs/adr/069-shared-data-protection-key-ring.html","d":"ADR-069: Shared DataProtection Key Ring for Scaled-Out Hosts","k":"Architecture Decision Records"},"663":{"u":"/docs/adr/069-shared-data-protection-key-ring.html#status","d":"ADR-069: Shared DataProtection Key Ring for Scaled-Out Hosts","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-07). Updated 2026-08-14: Store's adoption has landed and is live (its own dedicated storage account, gated on dataProtectionStorageReady), and the ADC call-site…"},"664":{"u":"/docs/adr/069-shared-data-protection-key-ring.html#context","d":"ADR-069: Shared DataProtection Key Ring for Scaled-Out Hosts","k":"Architecture Decision Records","t":"Context","x":"ASP.NET Core's DataProtection default keeps the key ring in memory, per process. That is correct for a single-process host and wrong for a scaled-out one: every replica generates…"},"665":{"u":"/docs/adr/069-shared-data-protection-key-ring.html#decision","d":"ADR-069: Shared DataProtection Key Ring for Scaled-Out Hosts","k":"Architecture Decision Records","t":"Decision","x":"Add one opt-in registration call, AddCommonDataProtection, that persists the key ring to a single Azure blob so every replica of a host shares one ring…"},"666":{"u":"/docs/adr/069-shared-data-protection-key-ring.html#rationale","d":"ADR-069: Shared DataProtection Key Ring for Scaled-Out Hosts","k":"Architecture Decision Records","t":"Rationale","x":"- The key ring is the smallest thing that has to be shared. Sticky sessions would paper over the symptom while making a replica restart a mass sign-out, and a shared cache would…"},"667":{"u":"/docs/adr/069-shared-data-protection-key-ring.html#trade-offs","d":"ADR-069: Shared DataProtection Key Ring for Scaled-Out Hosts","k":"Architecture Decision Records","t":"Trade-offs","x":"- The key ring is encrypted at rest only where gate 2 was switched on. Both templates ship the path and both default it off (2026-09-10 revision), so on default parameters the…"},"668":{"u":"/docs/adr/069-shared-data-protection-key-ring.html#revision-2026-09-10","d":"ADR-069: Shared DataProtection Key Ring for Scaled-Out Hosts","k":"Architecture Decision Records","t":"Revision (2026-09-10)","x":"Gate 2 ships in both templates, default off, so \"configured nowhere\" is retired. The framework side is unchanged: AddCommonDataProtection…"},"669":{"u":"/docs/adr/069-shared-data-protection-key-ring.html#revision-2026-10-01","d":"ADR-069: Shared DataProtection Key Ring for Scaled-Out Hosts","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; this revision refreshes citations only. Re-anchored in Context, Decision and the Store adoption notes: the ADC replica caps, sticky UI ingress,…"},"670":{"u":"/docs/adr/069-shared-data-protection-key-ring.html#related","d":"ADR-069: Shared DataProtection Key Ring for Scaled-Out Hosts","k":"Architecture Decision Records","t":"Related","x":"ADR-022 (the browser session cookies whose decryption this makes replica-independent, together with the antiforgery tokens the SSR pages mint), ADR-008 (the multi-host topology…"},"671":{"u":"/docs/adr/070-fail-fast-configuration-contract.html","d":"ADR-070: Fail-Fast Configuration Contract","k":"Architecture Decision Records"},"672":{"u":"/docs/adr/070-fail-fast-configuration-contract.html#status","d":"ADR-070: Fail-Fast Configuration Contract","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-07). Revised 2026-08-14 (source citations re-anchored). Revised 2026-08-23 (inventory re-counted after the password-reset vertical and the opt-in feature waves:…"},"673":{"u":"/docs/adr/070-fail-fast-configuration-contract.html#context","d":"ADR-070: Fail-Fast Configuration Contract","k":"Architecture Decision Records","t":"Context","x":"Every host in the workspace reads a dozen or more configuration sections: connection strings, SMTP, JWT key material, outbox tuning, message-bus provider, module enablement,…"},"674":{"u":"/docs/adr/070-fail-fast-configuration-contract.html#decision","d":"ADR-070: Fail-Fast Configuration Contract","k":"Architecture Decision Records","t":"Decision","x":"Bind every settings section through a validating chain that runs at startup, and read the bound value through IOptions of the concrete settings class. - One binding shape, used…"},"675":{"u":"/docs/adr/070-fail-fast-configuration-contract.html#rationale","d":"ADR-070: Fail-Fast Configuration Contract","k":"Architecture Decision Records","t":"Rationale","x":"- A boot failure is cheaper than a first-use failure. A host that will not start is caught by the deployment, by a local dotnet run, or by CI. A host that starts and fails on the…"},"676":{"u":"/docs/adr/070-fail-fast-configuration-contract.html#trade-offs","d":"ADR-070: Fail-Fast Configuration Contract","k":"Architecture Decision Records","t":"Trade-offs","x":"- Nothing enforces it. There is no architecture fitness test asserting that a new AddOptions call carries ValidateDataAnnotations().ValidateOnStart(). The uniformity above is…"},"677":{"u":"/docs/adr/070-fail-fast-configuration-contract.html#revision-2026-10-01","d":"ADR-070: Fail-Fast Configuration Contract","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; the inventory and several descriptions were brought back in line with source. The framework now has thirty-one registrations on the chain rather…"},"678":{"u":"/docs/adr/070-fail-fast-configuration-contract.html#related","d":"ADR-070: Fail-Fast Configuration Contract","k":"Architecture Decision Records","t":"Related","x":"ADR-025 (startup warm-up and readiness gating: this contract decides what happens before a host reaches that machinery), ADR-031 (feature flags read from configuration, whose…"},"679":{"u":"/docs/adr/071-barcode-scanning-and-qr-display.html","d":"ADR-071: Device Capability Pattern for Barcode Scanning and QR Display","k":"Architecture Decision Records"},"680":{"u":"/docs/adr/071-barcode-scanning-and-qr-display.html#status","d":"ADR-071: Device Capability Pattern for Barcode Scanning and QR Display","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-12). Amended 2026-08-13: the composition-time string trade-off below was resolved in v1.147.0 by a deferred-resolution overload; see the updated trade-off…"},"681":{"u":"/docs/adr/071-barcode-scanning-and-qr-display.html#context","d":"ADR-071: Device Capability Pattern for Barcode Scanning and QR Display","k":"Architecture Decision Records","t":"Context","x":"ADC's badge check-in feature (ADR-072) needs two things that look like one thing: an attendee's device has to show a QR code, and an organizer's device has to read one. They are…"},"682":{"u":"/docs/adr/071-barcode-scanning-and-qr-display.html#decision","d":"ADR-071: Device Capability Pattern for Barcode Scanning and QR Display","k":"Architecture Decision Records","t":"Decision","x":"Split the feature by what it actually depends on: QR display ships as a shared component, barcode scanning ships as an ADR-042 capability whose native half is opt-in per head. -…"},"683":{"u":"/docs/adr/071-barcode-scanning-and-qr-display.html#rationale","d":"ADR-071: Device Capability Pattern for Barcode Scanning and QR Display","k":"Architecture Decision Records","t":"Rationale","x":"- Rendering a QR is not a device concern, so making it one would have been ceremony. As a capability it would have needed an interface, a null fallback and a native override for…"},"684":{"u":"/docs/adr/071-barcode-scanning-and-qr-display.html#trade-offs","d":"ADR-071: Device Capability Pattern for Barcode Scanning and QR Display","k":"Architecture Decision Records","t":"Trade-offs","x":"- The scan page's text is the caller's delegate, not a string (resolved in v1.147.0). cancelText and cameraDescription arrive as Func and are invoked once per scan, when the…"},"685":{"u":"/docs/adr/071-barcode-scanning-and-qr-display.html#revision-2026-10-01","d":"ADR-071: Device Capability Pattern for Barcode Scanning and QR Display","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. The package pin citations are re-anchored to MMCA.Common/Directory.Packages.props:191 (QRCoder 1.8.0) and :225 (ZXing.Net.Maui.Controls 0.10.4).…"},"686":{"u":"/docs/adr/071-barcode-scanning-and-qr-display.html#related","d":"ADR-071: Device Capability Pattern for Barcode Scanning and QR Display","k":"Architecture Decision Records","t":"Related","x":"ADR-042 (the capability pattern this extends: contract in MMCA.Common.UI, native implementation in MMCA.Common.UI.Maui, override after AddUIShared), ADR-072 (the ADC feature that…"},"687":{"u":"/docs/adr/072-qr-badge-check-in-and-points.html","d":"ADR-072: QR Badge Check-In and Points Gamification in ADC","k":"Architecture Decision Records"},"688":{"u":"/docs/adr/072-qr-badge-check-in-and-points.html#status","d":"ADR-072: QR Badge Check-In and Points Gamification in ADC","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-13). Amended (2026-08-14): ADC shipped two attendee-self-recorded scan surfaces (sponsor booth visits and room self check-in), a third CheckInScope, a sixth…"},"689":{"u":"/docs/adr/072-qr-badge-check-in-and-points.html#context","d":"ADR-072: QR Badge Check-In and Points Gamification in ADC","k":"Architecture Decision Records","t":"Context","x":"ADC wanted two conference-day capabilities that turn out to be one mechanism. Organizers want to know who actually attended which session, which the schedule cannot tell them: a…"},"690":{"u":"/docs/adr/072-qr-badge-check-in-and-points.html#decision","d":"ADR-072: QR Badge Check-In and Points Gamification in ADC","k":"Architecture Decision Records","t":"Decision","x":"AttendeeBadge (MMCA.ADC/Source/Modules/Engagement/MMCA.ADC.Engagement.Domain/Badges/AttendeeBadge.cs:17-24) is one row per user holding a single Guid Credential, minted on first…"},"691":{"u":"/docs/adr/072-qr-badge-check-in-and-points.html#rationale","d":"ADR-072: QR Badge Check-In and Points Gamification in ADC","k":"Architecture Decision Records","t":"Rationale","x":"- An opaque credential makes the server the only interpreter. A JWT or HMAC badge would verify offline, but the scanning device is online by necessity (it has to write a check-in…"},"692":{"u":"/docs/adr/072-qr-badge-check-in-and-points.html#trade-offs","d":"ADR-072: QR Badge Check-In and Points Gamification in ADC","k":"Architecture Decision Records","t":"Trade-offs","x":"- The badge credential is a bearer value. Anyone who photographs an attendee's screen can be checked in as that attendee. The mitigations are that a badge scan is organizer-side,…"},"693":{"u":"/docs/adr/072-qr-badge-check-in-and-points.html#revision-2026-10-01","d":"ADR-072: QR Badge Check-In and Points Gamification in ADC","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"One content fact changed and is corrected in place in the Decision: a fourth handler raises the feedback events. The event-side batch path,…"},"694":{"u":"/docs/adr/072-qr-badge-check-in-and-points.html#related","d":"ADR-072: QR Badge Check-In and Points Gamification in ADC","k":"Architecture Decision Records","t":"Related","x":"ADR-071 (the framework halves this consumes: the QR component on /my-badge and the scanner capability behind /check-in), ADR-003 (the outbox path AttendeeCheckedIn and the two…"},"695":{"u":"/docs/adr/073-multi-tenancy-model.html","d":"ADR-073: Multi-Tenancy (Shared-Schema Query Filter plus DB-per-Tenant Routing)","k":"Architecture Decision Records"},"696":{"u":"/docs/adr/073-multi-tenancy-model.html#status","d":"ADR-073: Multi-Tenancy (Shared-Schema Query Filter plus DB-per-Tenant Routing)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-13). The implementation lands in the MMCA.Common enterprise capability wave release, alongside the scheduler, audit trail, DSAR export, and CSV export work. It…"},"697":{"u":"/docs/adr/073-multi-tenancy-model.html#context","d":"ADR-073: Multi-Tenancy (Shared-Schema Query Filter plus DB-per-Tenant Routing)","k":"Architecture Decision Records","t":"Context","x":"MMCA.Common already partitions data along two axes and neither of them is a tenant. ADR-006 partitions by source name (every entity resolves to a DataSourceKey(Engine, Name),…"},"698":{"u":"/docs/adr/073-multi-tenancy-model.html#decision","d":"ADR-073: Multi-Tenancy (Shared-Schema Query Filter plus DB-per-Tenant Routing)","k":"Architecture Decision Records","t":"Decision","x":"Ship shared-schema tenancy as a second named query filter, with per-tenant database routing as a configuration override on the same source key, both opt-in and both inert until a…"},"699":{"u":"/docs/adr/073-multi-tenancy-model.html#rationale","d":"ADR-073: Multi-Tenancy (Shared-Schema Query Filter plus DB-per-Tenant Routing)","k":"Architecture Decision Records","t":"Rationale","x":"- A query filter is the only place the rule cannot be forgotten. Per-handler Where clauses are correct until the tenth handler, and the tenth handler is a data leak rather than a…"},"700":{"u":"/docs/adr/073-multi-tenancy-model.html#trade-offs","d":"ADR-073: Multi-Tenancy (Shared-Schema Query Filter plus DB-per-Tenant Routing)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Reads are on discipline where writes are on an invariant. A consumer calling EF's own parameterless IgnoreQueryFilters() on a raw Table surface drops the tenant filter along…"},"701":{"u":"/docs/adr/073-multi-tenancy-model.html#related","d":"ADR-073: Multi-Tenancy (Shared-Schema Query Filter plus DB-per-Tenant Routing)","k":"Architecture Decision Records","t":"Related","x":"ADR-006 (the source-name axis this composes with: an override re-points a DataSourceKey without changing it, and the per-source outbox this record drains once per tenant),…"},"702":{"u":"/docs/adr/073-multi-tenancy-model.html#revision-2026-09-11","d":"ADR-073: Multi-Tenancy (Shared-Schema Query Filter plus DB-per-Tenant Routing)","k":"Architecture Decision Records","t":"Revision (2026-09-11)","x":"The gap this closes was never written down here. Everything above is about the tenant inside a request: the middleware resolves it, the named filter composes on it, the write…"},"703":{"u":"/docs/adr/073-multi-tenancy-model.html#revision-2026-10-01","d":"ADR-073: Multi-Tenancy (Shared-Schema Query Filter plus DB-per-Tenant Routing)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The body now agrees with the column the 2026-09-11 Revision added. \"Background work drains and migrates per tenant\" still stated that there was deliberately no OutboxMessage…"},"704":{"u":"/docs/adr/074-recurring-job-scheduler.html","d":"ADR-074: Recurring Job Scheduler (Persistent Cron Jobs on the Outbox Claim-Lease Pattern)","k":"Architecture Decision Records"},"705":{"u":"/docs/adr/074-recurring-job-scheduler.html#status","d":"ADR-074: Recurring Job Scheduler (Persistent Cron Jobs on the Outbox Claim-Lease Pattern)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-13; revised 2026-08-14, 2026-08-18, 2026-08-31). The implementation lands in the MMCA.Common \"enterprise capability wave\" release and is opt-in: a host calls…"},"706":{"u":"/docs/adr/074-recurring-job-scheduler.html#context","d":"ADR-074: Recurring Job Scheduler (Persistent Cron Jobs on the Outbox Claim-Lease Pattern)","k":"Architecture Decision Records","t":"Context","x":"The framework had two kinds of background work and neither of them is a schedule. OutboxProcessor…"},"707":{"u":"/docs/adr/074-recurring-job-scheduler.html#decision","d":"ADR-074: Recurring Job Scheduler (Persistent Cron Jobs on the Outbox Claim-Lease Pattern)","k":"Architecture Decision Records","t":"Decision","x":"A persistent job store plus a single-runner claim lease, reusing the exact idiom the outbox proved. The outbox claims a batch with an ExecuteUpdateAsync that sets LockedUntil and…"},"708":{"u":"/docs/adr/074-recurring-job-scheduler.html#rationale","d":"ADR-074: Recurring Job Scheduler (Persistent Cron Jobs on the Outbox Claim-Lease Pattern)","k":"Architecture Decision Records","t":"Rationale","x":"- The lease is already proven under production load. Multi-replica correctness for recurring work is the hard part, and it was solved once for the outbox: an atomic claim update,…"},"709":{"u":"/docs/adr/074-recurring-job-scheduler.html#trade-offs","d":"ADR-074: Recurring Job Scheduler (Persistent Cron Jobs on the Outbox Claim-Lease Pattern)","k":"Architecture Decision Records","t":"Trade-offs","x":"- A polling loop is not a real-time scheduler. Worst-case start lag is one polling interval, 30 seconds at the default, so sub-minute precision is not on offer. A job that must…"},"710":{"u":"/docs/adr/074-recurring-job-scheduler.html#revision-2026-10-01","d":"ADR-074: Recurring Job Scheduler (Persistent Cron Jobs on the Outbox Claim-Lease Pattern)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. The job-store field list now names LastError, a nullable string the entry already carries…"},"711":{"u":"/docs/adr/074-recurring-job-scheduler.html#related","d":"ADR-074: Recurring Job Scheduler (Persistent Cron Jobs on the Outbox Claim-Lease Pattern)","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (the outbox whose claim-lease idiom and smart wait this reuses verbatim, and whose at-least-once posture it inherits along with the idempotency obligation on job bodies),…"},"712":{"u":"/docs/adr/075-audit-trail.html","d":"ADR-075: Audit Trail (Same-Transaction Field-Level Change History)","k":"Architecture Decision Records"},"713":{"u":"/docs/adr/075-audit-trail.html#status","d":"ADR-075: Audit Trail (Same-Transaction Field-Level Change History)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-13; corrected 2026-08-14: the adoption sweep and the ApplicationDbContext line citations). The implementation lands in the MMCA.Common \"enterprise capability…"},"714":{"u":"/docs/adr/075-audit-trail.html#context","d":"ADR-075: Audit Trail (Same-Transaction Field-Level Change History)","k":"Architecture Decision Records","t":"Context","x":"The framework already answers \"who touched this row last\". Every AuditableBaseEntity carries CreatedOn/By and LastModifiedOn/By, stamped by AuditSaveChangesInterceptor on the way…"},"715":{"u":"/docs/adr/075-audit-trail.html#decision","d":"ADR-075: Audit Trail (Same-Transaction Field-Level Change History)","k":"Architecture Decision Records","t":"Decision","x":"AuditTrailSaveChangesInterceptor (Infrastructure Persistence/AuditTrail/) joins the interceptors ApplicationDbContext.OnConfiguring already passes to…"},"716":{"u":"/docs/adr/075-audit-trail.html#rationale","d":"ADR-075: Audit Trail (Same-Transaction Field-Level Change History)","k":"Architecture Decision Records","t":"Rationale","x":"- IAuditableEntity is a statement about a business row, and an audit row is not one. The interface means \"this row stamps who created and last modified it and participates in…"},"717":{"u":"/docs/adr/075-audit-trail.html#trade-offs","d":"ADR-075: Audit Trail (Same-Transaction Field-Level Change History)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Write amplification is real and it is on the caller's latency path. An entity with twenty changed properties writes twenty rows inside the caller's transaction, so an audited…"},"718":{"u":"/docs/adr/075-audit-trail.html#revision-2026-09-07","d":"ADR-075: Audit Trail (Same-Transaction Field-Level Change History)","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Two additions from the 2026-09-07 security review. 1. The [Pii] convention is now checked in both directions (SEC-Store-19 / SEC-Store-24). The shared base already obliged a…"},"719":{"u":"/docs/adr/075-audit-trail.html#revision-2026-09-25-both-apps-record-trail-dml-by-different-means","d":"ADR-075: Audit Trail (Same-Transaction Field-Level Change History)","k":"Architecture Decision Records","t":"Revision (2026-09-25): both apps record trail DML, by different means","x":"Revision item 2 above previously held for Store only: ADC's server-level audit carried no statement auditing, so a rewrite of dbo.AuditTrailEntries by the shared admin login left…"},"720":{"u":"/docs/adr/075-audit-trail.html#revision-2026-10-01-retention-has-no-fallback-and-the-current-state-text-matches-the-code","d":"ADR-075: Audit Trail (Same-Transaction Field-Level Change History)","k":"Architecture Decision Records","t":"Revision (2026-10-01): retention has no fallback, and the current-state text matches the code","x":"- Retention runs on the scheduler or not at all. The Decision previously named a PeriodicBackgroundService subclass as the fallback for a host without the scheduler. No such…"},"721":{"u":"/docs/adr/075-audit-trail.html#related","d":"ADR-075: Audit Trail (Same-Transaction Field-Level Change History)","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (the same-transaction write this copies wholesale, including the retry-discard and the Add-only mutation rule), ADR-005 (soft-delete, [Pii] and erasure: why the trail…"},"722":{"u":"/docs/adr/076-data-subject-export.html","d":"ADR-076: Data-Subject Export (DSAR) as a Framework Contract","k":"Architecture Decision Records"},"723":{"u":"/docs/adr/076-data-subject-export.html#status","d":"ADR-076: Data-Subject Export (DSAR) as a Framework Contract","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-13). Revised 2026-08-14 (the API-surface section corrected to the shipped mechanism, an abstract DataExportControllerBase a subclass mounts, not an…"},"724":{"u":"/docs/adr/076-data-subject-export.html#context","d":"ADR-076: Data-Subject Export (DSAR) as a Framework Contract","k":"Architecture Decision Records","t":"Context","x":"A data-subject access request is a legal obligation with a clock on it: the person asks for a copy of the personal data held about them, and the operator has a deadline to hand…"},"725":{"u":"/docs/adr/076-data-subject-export.html#decision","d":"ADR-076: Data-Subject Export (DSAR) as a Framework Contract","k":"Architecture Decision Records","t":"Decision","x":"The framework takes the part that is the same in both apps; the app keeps the part that is not. A consumer's export handler becomes a subclass that supplies a role test and a set…"},"726":{"u":"/docs/adr/076-data-subject-export.html#rationale","d":"ADR-076: Data-Subject Export (DSAR) as a Framework Contract","k":"Architecture Decision Records","t":"Rationale","x":"- The two halves of a handler have different owners. The ownership gate, the aggregate load, the fan-out, the per-section catch and the envelope are the same decisions in both…"},"727":{"u":"/docs/adr/076-data-subject-export.html#trade-offs","d":"ADR-076: Data-Subject Export (DSAR) as a Framework Contract","k":"Architecture Decision Records","t":"Trade-offs","x":"- Best-effort degradation can return a quietly incomplete package. Available = false is the only signal, and nothing forces a caller, a UI, or the subject to read it. A section…"},"728":{"u":"/docs/adr/076-data-subject-export.html#revision-2026-10-01","d":"ADR-076: Data-Subject Export (DSAR) as a Framework Contract","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Store now registers a second export section: alongside Sales it contributes CatalogUserDataExportSection (SectionName \"Catalog\",…"},"729":{"u":"/docs/adr/076-data-subject-export.html#related","d":"ADR-076: Data-Subject Export (DSAR) as a Framework Contract","k":"Architecture Decision Records","t":"Related","x":"ADR-005 (the erasure half of the same privacy obligation, whose IAnonymizable opt-in and [Pii] guard are this contract's mirror: one erases what the other copies), ADR-033 (the…"},"730":{"u":"/docs/adr/077-hybridcache-substrate.html","d":"ADR-077: HybridCache as an Opt-In ICacheService Substrate (Amends ADR-026)","k":"Architecture Decision Records"},"731":{"u":"/docs/adr/077-hybridcache-substrate.html#status","d":"ADR-077: HybridCache as an Opt-In ICacheService Substrate (Amends ADR-026)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-13). Amends ADR-026: Tier 1's substrate gains a third implementation beside MemoryCacheService and DistributedCacheService. It is opt-in through…"},"732":{"u":"/docs/adr/077-hybridcache-substrate.html#context","d":"ADR-077: HybridCache as an Opt-In ICacheService Substrate (Amends ADR-026)","k":"Architecture Decision Records","t":"Context","x":"ADR-026 settled Tier 1 as one abstraction (ICacheService) over two implementations chosen at startup: in-process memory when no real IDistributedCache is present, Redis…"},"733":{"u":"/docs/adr/077-hybridcache-substrate.html#decision","d":"ADR-077: HybridCache as an Opt-In ICacheService Substrate (Amends ADR-026)","k":"Architecture Decision Records","t":"Decision","x":"Ship HybridCacheService as a third ICacheService implementation, opt-in per host, under a disjoint keyspace. This is the structural rule the design is built around, and…"},"734":{"u":"/docs/adr/077-hybridcache-substrate.html#rationale","d":"ADR-077: HybridCache as an Opt-In ICacheService Substrate (Amends ADR-026)","k":"Architecture Decision Records","t":"Rationale","x":"- The disjoint keyspace is the decision; everything else is implementation. Rather than trusting a second implementation to write a shape compatible with the first, this record…"},"735":{"u":"/docs/adr/077-hybridcache-substrate.html#trade-offs","d":"ADR-077: HybridCache as an Opt-In ICacheService Substrate (Amends ADR-026)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Invalidation does not reach other replicas' L1 immediately. A remove evicts the L2 entry and the calling replica's L1; every other replica keeps its copy for up to…"},"736":{"u":"/docs/adr/077-hybridcache-substrate.html#revision-2026-10-01","d":"ADR-077: HybridCache as an Opt-In ICacheService Substrate (Amends ADR-026)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Two decisions joined the record. First, ICacheService gained GetFromSharedStoreAsync (MMCA.Common/Source/Core/MMCA.Common.Application/Interfaces/ICacheService.cs:62), which…"},"737":{"u":"/docs/adr/077-hybridcache-substrate.html#related","d":"ADR-077: HybridCache as an Opt-In ICacheService Substrate (Amends ADR-026)","k":"Architecture Decision Records","t":"Related","x":"ADR-026 (amended by this record: its Tier 1 substrate gains a third implementation, its 30-second default TTL becomes the local-cache bound as well, its prefix-invalidation model…"},"738":{"u":"/docs/adr/078-csv-export-endpoint.html","d":"ADR-078: CSV Export as a Dedicated Endpoint, Not Content Negotiation","k":"Architecture Decision Records"},"739":{"u":"/docs/adr/078-csv-export-endpoint.html#status","d":"ADR-078: CSV Export as a Dedicated Endpoint, Not Content Negotiation","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-13; revised 2026-08-18, 2026-08-31, 2026-09-19). The endpoint ships in the MMCA.Common \"enterprise capability wave\" release (v1.150.0), its scoping hook in…"},"740":{"u":"/docs/adr/078-csv-export-endpoint.html#context","d":"ADR-078: CSV Export as a Dedicated Endpoint, Not Content Negotiation","k":"Architecture Decision Records","t":"Context","x":"The request is \"export what you filtered\". The generic entity surface of ADR-034 already accepts a full query vocabulary on the paged route…"},"741":{"u":"/docs/adr/078-csv-export-endpoint.html#decision","d":"ADR-078: CSV Export as a Dedicated Endpoint, Not Content Negotiation","k":"Architecture Decision Records","t":"Decision","x":"EntityControllerBase gains a virtual [HttpGet(\"export\")] ExportAsync(...) action (Source/Presentation/MMCA.Common.API/Controllers/EntityControllerBase.cs:248, method at…"},"742":{"u":"/docs/adr/078-csv-export-endpoint.html#rationale","d":"ADR-078: CSV Export as a Dedicated Endpoint, Not Content Negotiation","k":"Architecture Decision Records","t":"Rationale","x":"- A route is an unambiguous request; an Accept header is a preference. Given a cache policy that ignores Accept and a pipeline configured to never return 406, a client that…"},"743":{"u":"/docs/adr/078-csv-export-endpoint.html#trade-offs","d":"ADR-078: CSV Export as a Dedicated Endpoint, Not Content Negotiation","k":"Architecture Decision Records","t":"Trade-offs","x":"- Every derivative gains a bulk read whether its owner wanted one or not. The only gate is the controller's existing authorization posture. A resource that was safe to page 20…"},"744":{"u":"/docs/adr/078-csv-export-endpoint.html#revision-2026-10-01","d":"ADR-078: CSV Export as a Dedicated Endpoint, Not Content Negotiation","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. The CSV machinery now lives outside the controller, in the internal static EntityCsvExporter…"},"745":{"u":"/docs/adr/078-csv-export-endpoint.html#related","d":"ADR-078: CSV Export as a Dedicated Endpoint, Not Content Negotiation","k":"Architecture Decision Records","t":"Related","x":"ADR-034 (the generic entity surface and query contract this extends, and the MaxUnboundedResultLimit ceiling that forced the page loop), ADR-040 (the output-cache policy whose…"},"746":{"u":"/docs/adr/079-shared-http-middleware-pipeline.html","d":"ADR-079: One Shared, Ordered HTTP Middleware Pipeline for Every Service Host","k":"Architecture Decision Records"},"747":{"u":"/docs/adr/079-shared-http-middleware-pipeline.html#status","d":"ADR-079: One Shared, Ordered HTTP Middleware Pipeline for Every Service Host","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-14). Revised 2026-08-19 (refreshed the WebApplicationBuilderExtensions.cs cross-reference anchor, which moved to :555). Revised 2026-08-21: the order became…"},"748":{"u":"/docs/adr/079-shared-http-middleware-pipeline.html#context","d":"ADR-079: One Shared, Ordered HTTP Middleware Pipeline for Every Service Host","k":"Architecture Decision Records","t":"Context","x":"In ASP.NET Core, middleware order is behavior, not style: a rate limiter placed before authentication partitions every request as anonymous, an HTTPS redirect placed in front of…"},"749":{"u":"/docs/adr/079-shared-http-middleware-pipeline.html#decision","d":"ADR-079: One Shared, Ordered HTTP Middleware Pipeline for Every Service Host","k":"Architecture Decision Records","t":"Decision","x":"Ship the edge as one ordered pipeline in the framework, UseCommonMiddlewarePipeline (MMCA.Common/Source/Presentation/MMCA.Common.API/Startup/WebApplicationExtensions.cs:48), and…"},"750":{"u":"/docs/adr/079-shared-http-middleware-pipeline.html#rationale","d":"ADR-079: One Shared, Ordered HTTP Middleware Pipeline for Every Service Host","k":"Architecture Decision Records","t":"Rationale","x":"- Order is behavior, so it belongs to the framework, not to each host. Four of the adjacencies above fail silently when reversed: the limiter stops limiting, the tenant resolver…"},"751":{"u":"/docs/adr/079-shared-http-middleware-pipeline.html#trade-offs","d":"ADR-079: One Shared, Ordered HTTP Middleware Pipeline for Every Service Host","k":"Architecture Decision Records","t":"Trade-offs","x":"- Two of this record's original costs are retired (2026-08-21). As accepted, nothing froze the order (no test referenced the method; the adjacencies were protected by comments…"},"752":{"u":"/docs/adr/079-shared-http-middleware-pipeline.html#revision-2026-10-01","d":"ADR-079: One Shared, Ordered HTTP Middleware Pipeline for Every Service Host","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Anchor refresh only; no decision or rationale changed. Refreshed citations: the private ApplyPipeline helper (WebApplicationExtensions.cs:163-179), the lazy validator resolution…"},"753":{"u":"/docs/adr/079-shared-http-middleware-pipeline.html#related","d":"ADR-079: One Shared, Ordered HTTP Middleware Pipeline for Every Service Host","k":"Architecture Decision Records","t":"Related","x":"ADR-014 (the in-process sibling: one fixed decorator order for commands and queries), ADR-019 (depends on forwarded headers before the limiter and on the limiter after…"},"754":{"u":"/docs/adr/080-deploy-rollout-revision-rollback.html","d":"ADR-080: Production Rollout with Automatic Revision-Only Rollback","k":"Architecture Decision Records"},"755":{"u":"/docs/adr/080-deploy-rollout-revision-rollback.html#status","d":"ADR-080: Production Rollout with Automatic Revision-Only Rollback","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-14). Revised 2026-09-03 (the smoke gate is now two tiers: a revision activation gate runs before the HTTP probes, and the rollback selector filters on…"},"756":{"u":"/docs/adr/080-deploy-rollout-revision-rollback.html#context","d":"ADR-080: Production Rollout with Automatic Revision-Only Rollback","k":"Architecture Decision Records","t":"Context","x":"Both production apps deploy to Azure Container Apps from a single deploy.yml job on push to main, and every gate runs before anything rolls out. The deploy job waits on eleven…"},"757":{"u":"/docs/adr/080-deploy-rollout-revision-rollback.html#decision","d":"ADR-080: Production Rollout with Automatic Revision-Only Rollback","k":"Architecture Decision Records","t":"Decision","x":"Roll out one revision at a time, verify it from outside, and auto-revert the image only when the verification fails. - Single-revision rollout. Every container app runs…"},"758":{"u":"/docs/adr/080-deploy-rollout-revision-rollback.html#rationale","d":"ADR-080: Production Rollout with Automatic Revision-Only Rollback","k":"Architecture Decision Records","t":"Rationale","x":"- ARM success is the wrong success signal. The smoke gate converts \"the control plane accepted the template\" into \"the fleet is serving the revision this run built\", which is the…"},"759":{"u":"/docs/adr/080-deploy-rollout-revision-rollback.html#trade-offs","d":"ADR-080: Production Rollout with Automatic Revision-Only Rollback","k":"Architecture Decision Records","t":"Trade-offs","x":"- Schema is never rolled back, so a bad migration is fix-forward only. The image reverts and the database does not, so the previous release resumes against the new schema. This…"},"760":{"u":"/docs/adr/080-deploy-rollout-revision-rollback.html#revision-2026-09-10","d":"ADR-080: Production Rollout with Automatic Revision-Only Rollback","k":"Architecture Decision Records","t":"Revision (2026-09-10)","x":"ADC's activation tier is now one shared budget over the whole fleet, matching Store. The attempt loop is the outer loop and the apps are iterated inside it: for i in $(seq 1 30)…"},"761":{"u":"/docs/adr/080-deploy-rollout-revision-rollback.html#revision-2026-10-01","d":"ADR-080: Production Rollout with Automatic Revision-Only Rollback","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Three current-state statements are corrected; the rollout and revision-only rollback model is unchanged. First, the Gateway is not readiness-gated on /health/ready: in both repos…"},"762":{"u":"/docs/adr/080-deploy-rollout-revision-rollback.html#related","d":"ADR-080: Production Rollout with Automatic Revision-Only Rollback","k":"Architecture Decision Records","t":"Related","x":"ADR-057 (built on this model: revision-only rollback is why every migration must be backward compatible one release back), ADR-030 (startup migration as sole migrator, the reason…"},"763":{"u":"/docs/adr/081-cost-baseline-deploy-gate.html","d":"ADR-081: The Cost Baseline as a Hard Deploy Gate","k":"Architecture Decision Records"},"764":{"u":"/docs/adr/081-cost-baseline-deploy-gate.html#status","d":"ADR-081: The Cost Baseline as a Hard Deploy Gate","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-14). Revised 2026-08-31 (the read-only claim is qualified: one az config set on the runner's own CLI precedes the queries; citations re-anchored). Revised…"},"765":{"u":"/docs/adr/081-cost-baseline-deploy-gate.html#context","d":"ADR-081: The Cost Baseline as a Hard Deploy Gate","k":"Architecture Decision Records","t":"Context","x":"Both deployed apps run a deliberately small production footprint: every Container App is declared with maxReplicas: 2 and every SQL database with the Basic tier…"},"766":{"u":"/docs/adr/081-cost-baseline-deploy-gate.html#decision","d":"ADR-081: The Cost Baseline as a Hard Deploy Gate","k":"Architecture Decision Records","t":"Decision","x":"The cost baseline is asserted by a read-only reusable workflow that both runs weekly and sits in deploy.needs, so an un-reverted scale-up blocks the next production deploy. - One…"},"767":{"u":"/docs/adr/081-cost-baseline-deploy-gate.html#rationale","d":"ADR-081: The Cost Baseline as a Hard Deploy Gate","k":"Architecture Decision Records","t":"Rationale","x":"- Configuration drift is the leading indicator; spend is the lagging one. The budget notification fires at 80% of actual spend, after the money is gone, and names a number rather…"},"768":{"u":"/docs/adr/081-cost-baseline-deploy-gate.html#trade-offs","d":"ADR-081: The Cost Baseline as a Hard Deploy Gate","k":"Architecture Decision Records","t":"Trade-offs","x":"- A legitimate scale-up blocks deploys until the baseline is edited. Standing up extra capacity for a real event and then shipping a fix during it requires a pull request against…"},"769":{"u":"/docs/adr/081-cost-baseline-deploy-gate.html#revision-2026-10-01","d":"ADR-081: The Cost Baseline as a Hard Deploy Gate","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Store's SQL check now matches its own stated window. It reads [sku.tier, sku.name] (MMCA.Store/.github/workflows/cost-guard.yml:96-97) and passes a database only through…"},"770":{"u":"/docs/adr/081-cost-baseline-deploy-gate.html#related","d":"ADR-081: The Cost Baseline as a Hard Deploy Gate","k":"Architecture Decision Records","t":"Related","x":"ADR-064 (the sibling deploy-precondition record, which decides the four proof-of-recency gates and enumerates this one only in passing; its break-glass input does not apply…"},"771":{"u":"/docs/adr/082-two-tier-cors-posture.html","d":"ADR-082: Two-Tier Cross-Origin Posture: Allow-Listed Service Policies, an Any-Header Gateway Policy","k":"Architecture Decision Records"},"772":{"u":"/docs/adr/082-two-tier-cors-posture.html#status","d":"ADR-082: Two-Tier Cross-Origin Posture: Allow-Listed Service Policies, an Any-Header Gateway Policy","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-14)."},"773":{"u":"/docs/adr/082-two-tier-cors-posture.html#context","d":"ADR-082: Two-Tier Cross-Origin Posture: Allow-Listed Service Policies, an Any-Header Gateway Policy","k":"Architecture Decision Records","t":"Context","x":"Both deployed applications put a YARP gateway in front of per-module service hosts (ADR-008), and the browser and MAUI clients talk to the gateway origin while the services…"},"774":{"u":"/docs/adr/082-two-tier-cors-posture.html#decision","d":"ADR-082: Two-Tier Cross-Origin Posture: Allow-Listed Service Policies, an Any-Header Gateway Policy","k":"Architecture Decision Records","t":"Decision","x":"Ship two cross-origin policies from the framework: an allow-listed one for service hosts and a deliberately broader one for gateways. - Service hosts register two named policies…"},"775":{"u":"/docs/adr/082-two-tier-cors-posture.html#rationale","d":"ADR-082: Two-Tier Cross-Origin Posture: Allow-Listed Service Policies, an Any-Header Gateway Policy","k":"Architecture Decision Records","t":"Rationale","x":"- A proxy cannot allow-list what it does not own. The gateway has no controllers and no knowledge of which headers the fronted services accept, so a header allow-list there would…"},"776":{"u":"/docs/adr/082-two-tier-cors-posture.html#trade-offs","d":"ADR-082: Two-Tier Cross-Origin Posture: Allow-Listed Service Policies, an Any-Header Gateway Policy","k":"Architecture Decision Records","t":"Trade-offs","x":"- The gateway policy is broad on two of three axes. Any header and any method are accepted for an allow-listed origin. The origin list is the only lever there, so a mistake in…"},"777":{"u":"/docs/adr/082-two-tier-cors-posture.html#revision-2026-10-01","d":"ADR-082: Two-Tier Cross-Origin Posture: Allow-Listed Service Policies, an Any-Header Gateway Policy","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision changed. Citations were re-anchored to the current source: AddCommonCors and its policy lines (WebApplicationBuilderExtensions.cs:124-141), the pipeline Cors step…"},"778":{"u":"/docs/adr/082-two-tier-cors-posture.html#related","d":"ADR-082: Two-Tier Cross-Origin Posture: Allow-Listed Service Policies, an Any-Header Gateway Policy","k":"Architecture Decision Records","t":"Related","x":"ADR-079 (the shared middleware pipeline whose fixed order places the environment-selected CORS policy between routing and authentication), ADR-008 (the gateway plus per-module…"},"779":{"u":"/docs/adr/083-crud-lifecycle-event-taxonomy.html","d":"ADR-083: One CRUD Lifecycle Event per Entity with a State Discriminator","k":"Architecture Decision Records"},"780":{"u":"/docs/adr/083-crud-lifecycle-event-taxonomy.html#status","d":"ADR-083: One CRUD Lifecycle Event per Entity with a State Discriminator","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-14). Revised 2026-08-23: the adopter counts were refreshed (ADC Conference's ActivityChanged joined the base-derived set) and three source citations were…"},"781":{"u":"/docs/adr/083-crud-lifecycle-event-taxonomy.html#context","d":"ADR-083: One CRUD Lifecycle Event per Entity with a State Discriminator","k":"Architecture Decision Records","t":"Context","x":"ADR-003 decides how a domain event moves: captured into the outbox inside SaveChangesAsync, dispatched in-process after commit, or published to the broker when it is an…"},"782":{"u":"/docs/adr/083-crud-lifecycle-event-taxonomy.html#decision","d":"ADR-083: One CRUD Lifecycle Event per Entity with a State Discriminator","k":"Architecture Decision Records","t":"Decision","x":"Every generic CRUD lifecycle transition of an entity raises one event type for that entity, carrying a DomainEntityState discriminator; handlers filter on State. - One base…"},"783":{"u":"/docs/adr/083-crud-lifecycle-event-taxonomy.html#rationale","d":"ADR-083: One CRUD Lifecycle Event per Entity with a State Discriminator","k":"Architecture Decision Records","t":"Rationale","x":"- One type per entity is one subscription surface. A subscriber declares interest in the entity, then decides which transitions matter, instead of the container deciding for it…"},"784":{"u":"/docs/adr/083-crud-lifecycle-event-taxonomy.html#trade-offs","d":"ADR-083: One CRUD Lifecycle Event per Entity with a State Discriminator","k":"Architecture Decision Records","t":"Trade-offs","x":"- Every selective handler pays a filter. A handler that cares about one transition has to open with a State guard and return (SpeakerDeletedHandler.cs:29-30 is the shape to…"},"785":{"u":"/docs/adr/083-crud-lifecycle-event-taxonomy.html#alternatives-rejected","d":"ADR-083: One CRUD Lifecycle Event per Entity with a State Discriminator","k":"Architecture Decision Records","t":"Alternatives rejected","x":"- Splitting each XChanged event into per-fact past-tense events (SpeakerRenamed, SessionCancelled, and so on) with every handler and bridge updated to match. Proposed 2026-08-26,…"},"786":{"u":"/docs/adr/083-crud-lifecycle-event-taxonomy.html#related","d":"ADR-083: One CRUD Lifecycle Event per Entity with a State Discriminator","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (how these events are captured and dispatched; this ADR decides only their shape), ADR-010 (schema versioning for the discriminator once it crosses a service boundary),…"},"787":{"u":"/docs/adr/084-stripe-webhook-ingress.html","d":"ADR-084: Stripe Webhook Ingress (Acceptance-Coded Responses and Startup Self-Registration)","k":"Architecture Decision Records"},"788":{"u":"/docs/adr/084-stripe-webhook-ingress.html#status","d":"ADR-084: Stripe Webhook Ingress (Acceptance-Coded Responses and Startup Self-Registration)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-14). Revised 2026-09-03. Revised 2026-09-07 (the webhook action carries its own request size limit, the auto-minted signing secret is shared through the…"},"789":{"u":"/docs/adr/084-stripe-webhook-ingress.html#context","d":"ADR-084: Stripe Webhook Ingress (Acceptance-Coded Responses and Startup Self-Registration)","k":"Architecture Decision Records","t":"Context","x":"Four ADRs already cover how a message crosses a boundary in this workspace. ADR-003 decides how an event leaves a service (outbox, at-least-once). ADR-021 decides how a…"},"790":{"u":"/docs/adr/084-stripe-webhook-ingress.html#decision","d":"ADR-084: Stripe Webhook Ingress (Acceptance-Coded Responses and Startup Self-Registration)","k":"Architecture Decision Records","t":"Decision","x":"Treat third-party webhook ingress as its own contract with two halves: an acceptance-coded endpoint and a self-registering, self-provisioning endpoint registration at startup. -…"},"791":{"u":"/docs/adr/084-stripe-webhook-ingress.html#rationale","d":"ADR-084: Stripe Webhook Ingress (Acceptance-Coded Responses and Startup Self-Registration)","k":"Architecture Decision Records","t":"Rationale","x":"- The caller's protocol decides the response vocabulary. Stripe reads a status code as \"keep retrying\" or \"stop\", not as \"this succeeded\" or \"this failed\". Mapping every…"},"792":{"u":"/docs/adr/084-stripe-webhook-ingress.html#trade-offs","d":"ADR-084: Stripe Webhook Ingress (Acceptance-Coded Responses and Startup Self-Registration)","k":"Architecture Decision Records","t":"Trade-offs","x":"- A startup service that writes to a live third-party account. Booting a Sales replica creates and deletes webhook endpoints in the real Stripe account…"},"793":{"u":"/docs/adr/084-stripe-webhook-ingress.html#revision-2026-09-07","d":"ADR-084: Stripe Webhook Ingress (Acceptance-Coded Responses and Startup Self-Registration)","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Four changes from the 2026-09-07 security review. The ingress contract (raw body, signature verified before parsing, anonymous endpoint) is unchanged. 1. The webhook action…"},"794":{"u":"/docs/adr/084-stripe-webhook-ingress.html#revision-2026-10-01","d":"ADR-084: Stripe Webhook Ingress (Acceptance-Coded Responses and Startup Self-Registration)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The ingress contract (acceptance-coded status codes, anonymous raw-body endpoint, startup self-registration with marker-scoped deletion) is unchanged. This revision brings the…"},"795":{"u":"/docs/adr/084-stripe-webhook-ingress.html#related","d":"ADR-084: Stripe Webhook Ingress (Acceptance-Coded Responses and Startup Self-Registration)","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (outbound at-least-once delivery, the other end of the same family), ADR-021 (broker-side inbound dedup, which never sees a webhook), ADR-017 (client-supplied idempotency…"},"796":{"u":"/docs/adr/085-identifier-type-aliases-revisited.html","d":"ADR-085: Identifier Type Aliases Revisited (Wrapper Structs Deferred Again, With Triggers)","k":"Architecture Decision Records"},"797":{"u":"/docs/adr/085-identifier-type-aliases-revisited.html#status","d":"ADR-085: Identifier Type Aliases Revisited (Wrapper Structs Deferred Again, With Triggers)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-18). Revised 2026-08-23 (the alias count and the migration-surface census were recounted, the census gained a stated methodology, and the CheckIn and…"},"798":{"u":"/docs/adr/085-identifier-type-aliases-revisited.html#context","d":"ADR-085: Identifier Type Aliases Revisited (Wrapper Structs Deferred Again, With Triggers)","k":"Architecture Decision Records","t":"Context","x":"ADR-048 decided that every entity identity is a primitive named through a per-module global using {Entity}IdentifierType = ... alias, and recorded the cost in one line of…"},"799":{"u":"/docs/adr/085-identifier-type-aliases-revisited.html#decision","d":"ADR-085: Identifier Type Aliases Revisited (Wrapper Structs Deferred Again, With Triggers)","k":"Architecture Decision Records","t":"Decision","x":"Keep the aliases. The wrapper-struct alternative is evaluated in this record, priced, and deferred again, this time against explicit triggers. Inside a module an identifier is…"},"800":{"u":"/docs/adr/085-identifier-type-aliases-revisited.html#rationale","d":"ADR-085: Identifier Type Aliases Revisited (Wrapper Structs Deferred Again, With Triggers)","k":"Architecture Decision Records","t":"Rationale","x":"- The cost is paid once and the benefit accrues per defect avoided, and the defect count is currently zero. No production incident in any of the four repos has been traced to a…"},"801":{"u":"/docs/adr/085-identifier-type-aliases-revisited.html#trade-offs","d":"ADR-085: Identifier Type Aliases Revisited (Wrapper Structs Deferred Again, With Triggers)","k":"Architecture Decision Records","t":"Trade-offs","x":"- The exposure is unmitigated, not reduced. This record buys no safety whatsoever. Every transposition ADR-048 could not catch is still uncatchable today, and the CheckIn…"},"802":{"u":"/docs/adr/085-identifier-type-aliases-revisited.html#related","d":"ADR-085: Identifier Type Aliases Revisited (Wrapper Structs Deferred Again, With Triggers)","k":"Architecture Decision Records","t":"Related","x":"ADR-048 (the decision this record revisits and upholds; its Status now points here), ADR-068 (the deliberate opposite case: domain values carry invariants and therefore do get…"},"803":{"u":"/docs/adr/085-identifier-type-aliases-revisited.html#revision-2026-08-23","d":"ADR-085: Identifier Type Aliases Revisited (Wrapper Structs Deferred Again, With Triggers)","k":"Architecture Decision Records","t":"Revision (2026-08-23)","x":"The decision, the priced alternative, the three triggers and the trade-offs are unchanged. What changed is arithmetic and three citations. The alias count is 44 across 10 files,…"},"804":{"u":"/docs/adr/085-identifier-type-aliases-revisited.html#revision-2026-09-11","d":"ADR-085: Identifier Type Aliases Revisited (Wrapper Structs Deferred Again, With Triggers)","k":"Architecture Decision Records","t":"Revision (2026-09-11)","x":"The decision, the priced alternative, the three triggers and the trade-offs are unchanged. What changed is arithmetic and one Context fact. The alias count is 46 across the same…"},"805":{"u":"/docs/adr/085-identifier-type-aliases-revisited.html#revision-2026-09-19","d":"ADR-085: Identifier Type Aliases Revisited (Wrapper Structs Deferred Again, With Triggers)","k":"Architecture Decision Records","t":"Revision (2026-09-19)","x":"The decision, the priced alternative, the three triggers and the trade-offs are unchanged. What changed is arithmetic and the non-int bullet. The alias count is 48 across the…"},"806":{"u":"/docs/adr/085-identifier-type-aliases-revisited.html#revision-2026-10-01","d":"ADR-085: Identifier Type Aliases Revisited (Wrapper Structs Deferred Again, With Triggers)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision, trigger, rationale or trade-off changed. The migration-surface census is re-measured on the same rule: 3,869 lines across 1,209 files (Common 296/117, ADC 2,282/694,…"},"807":{"u":"/docs/adr/086-process-manager-deferred.html","d":"ADR-086: A Process Manager Is Deferred, Not Absent (Relates to ADR-054)","k":"Architecture Decision Records"},"808":{"u":"/docs/adr/086-process-manager-deferred.html#status","d":"ADR-086: A Process Manager Is Deferred, Not Absent (Relates to ADR-054)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-18) as a documented deferral. Nothing ships with this record: no state machine, no correlation store, no new package. What ships is the shape the coordinator…"},"809":{"u":"/docs/adr/086-process-manager-deferred.html#context","d":"ADR-086: A Process Manager Is Deferred, Not Absent (Relates to ADR-054)","k":"Architecture Decision Records","t":"Context","x":"ADR-054 decided how this workspace achieves cross-boundary consistency without two-phase commit: choreography. Each step of a workflow raises a domain event, each compensating…"},"810":{"u":"/docs/adr/086-process-manager-deferred.html#decision","d":"ADR-086: A Process Manager Is Deferred, Not Absent (Relates to ADR-054)","k":"Architecture Decision Records","t":"Decision","x":"Defer the process manager, and record its shape so the deferral is a design decision rather than an omission. A durable multi-step workflow coordinator in this workspace is a…"},"811":{"u":"/docs/adr/086-process-manager-deferred.html#rationale","d":"ADR-086: A Process Manager Is Deferred, Not Absent (Relates to ADR-054)","k":"Architecture Decision Records","t":"Rationale","x":"- Choreography is genuinely correct for the workflow that exists. This is not a case of the simpler option being tolerated. Checkout's saga state is two fields on Order, and an…"},"812":{"u":"/docs/adr/086-process-manager-deferred.html#trade-offs","d":"ADR-086: A Process Manager Is Deferred, Not Absent (Relates to ADR-054)","k":"Architecture Decision Records","t":"Trade-offs","x":"- The first workflow to hit the trigger pays the full cost at once, under whatever deadline made it appear. Deferral moves the work onto the critical path of the feature that…"},"813":{"u":"/docs/adr/086-process-manager-deferred.html#revision-2026-09-11-the-first-per-instance-deadline-exists-and-it-is-not-a-state-machine","d":"ADR-086: A Process Manager Is Deferred, Not Absent (Relates to ADR-054)","k":"Architecture Decision Records","t":"Revision (2026-09-11): the first per-instance deadline exists, and it is not a state machine","x":"One of the three properties this record listed as absent has arrived, from an unexpected direction. MMCA.Store now gives every unpaid order its own scheduled deadline:…"},"814":{"u":"/docs/adr/086-process-manager-deferred.html#revision-2026-10-01","d":"ADR-086: A Process Manager Is Deferred, Not Absent (Relates to ADR-054)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Two current-state statements are refreshed. The MassTransit pin is 8.5.11 for all three packages, still v8…"},"815":{"u":"/docs/adr/086-process-manager-deferred.html#related","d":"ADR-086: A Process Manager Is Deferred, Not Absent (Relates to ADR-054)","k":"Architecture Decision Records","t":"Related","x":"ADR-054 (the accepted mechanism this record defers an alternative to: choreographed compensation, the persisted aggregate marker, and the reconciliation sweep that would remain…"},"816":{"u":"/docs/adr/087-broker-poison-message-handling.html","d":"ADR-087: Broker Poison-Message Handling: Second-Level Redelivery and Fault Observability","k":"Architecture Decision Records"},"817":{"u":"/docs/adr/087-broker-poison-message-handling.html#status","d":"ADR-087: Broker Poison-Message Handling: Second-Level Redelivery and Fault Observability","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-18). Amends ADR-009: the outbox's broker publish gains a circuit breaker, which is the first resilience policy this workspace applies to something other than an…"},"818":{"u":"/docs/adr/087-broker-poison-message-handling.html#context","d":"ADR-087: Broker Poison-Message Handling: Second-Level Redelivery and Fault Observability","k":"Architecture Decision Records","t":"Context","x":"Delivery in this workspace has always been at-least-once with retries on both legs: the outbox retries a failed publish with jittered exponential backoff and eventually…"},"819":{"u":"/docs/adr/087-broker-poison-message-handling.html#decision","d":"ADR-087: Broker Poison-Message Handling: Second-Level Redelivery and Fault Observability","k":"Architecture Decision Records","t":"Decision","x":"Three changes, each scoped to one failure: second-level redelivery configured per transport, a fault consumer with its own meter, and a circuit breaker around the outbox's broker…"},"820":{"u":"/docs/adr/087-broker-poison-message-handling.html#rationale","d":"ADR-087: Broker Poison-Message Handling: Second-Level Redelivery and Fault Observability","k":"Architecture Decision Records","t":"Rationale","x":"- The transport asymmetry follows a real capability difference, not a preference. RabbitMQ needs a plugin the dev container lacks; Service Bus does not. A single default would be…"},"821":{"u":"/docs/adr/087-broker-poison-message-handling.html#trade-offs","d":"ADR-087: Broker Poison-Message Handling: Second-Level Redelivery and Fault Observability","k":"Architecture Decision Records","t":"Trade-offs","x":"- Delayed redelivery is off where the plugin problem lives. RabbitMQ is the local transport and also a plausible self-hosted production transport; both get default-off, so the…"},"822":{"u":"/docs/adr/087-broker-poison-message-handling.html#revision-2026-10-01","d":"ADR-087: Broker Poison-Message Handling: Second-Level Redelivery and Fault Observability","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. The broker transport wiring now lives in MMCA.Common/Source/Core/MMCA.Common.Infrastructure/DependencyInjection.Messaging.cs…"},"823":{"u":"/docs/adr/087-broker-poison-message-handling.html#related","d":"ADR-087: Broker Poison-Message Handling: Second-Level Redelivery and Fault Observability","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (the outbox publish leg this breaker wraps, and the retry, jittered backoff and dead-lettering that BrokenCircuitException reuses unchanged), ADR-066 (the transport…"},"824":{"u":"/docs/adr/088-gateway-edge-responsibilities.html","d":"ADR-088: Gateway Edge Responsibilities (and the Three It Declines)","k":"Architecture Decision Records"},"825":{"u":"/docs/adr/088-gateway-edge-responsibilities.html#status","d":"ADR-088: Gateway Edge Responsibilities (and the Three It Declines)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-18). Extends ADR-019 with a fourth, edge-tier layer whose posture is the deliberate opposite of the service tier's authenticated-only global limiter; nothing in…"},"826":{"u":"/docs/adr/088-gateway-edge-responsibilities.html#context","d":"ADR-088: Gateway Edge Responsibilities (and the Three It Declines)","k":"Architecture Decision Records","t":"Context","x":"ADR-008 made the Gateway the only client entry point and gave it three jobs: the route-to-service map, CORS, and forwarding the caller's Authorization header. Nothing was added…"},"827":{"u":"/docs/adr/088-gateway-edge-responsibilities.html#decision","d":"ADR-088: Gateway Edge Responsibilities (and the Three It Declines)","k":"Architecture Decision Records","t":"Decision","x":"Ship a gateway edge kit in a Gateway namespace inside MMCA.Common.Aspire, owning exactly three responsibilities, and record three more as deliberately declined. A fourth section,…"},"828":{"u":"/docs/adr/088-gateway-edge-responsibilities.html#rationale","d":"ADR-088: Gateway Edge Responsibilities (and the Three It Declines)","k":"Architecture Decision Records","t":"Rationale","x":"- The edge is the only place that sees a request exactly once. That is what makes ensure-at-the-edge correct and mint-per-service wrong: not that the service version is broken,…"},"829":{"u":"/docs/adr/088-gateway-edge-responsibilities.html#trade-offs","d":"ADR-088: Gateway Edge Responsibilities (and the Three It Declines)","k":"Architecture Decision Records","t":"Trade-offs","x":"- The limiter closes over an eagerly-bound copy of the settings (GatewayRateLimitingExtensions.cs:278-279, consumed at :308 and :310), so an IOptionsMonitor reload never reaches…"},"830":{"u":"/docs/adr/088-gateway-edge-responsibilities.html#revision-2026-09-07","d":"ADR-088: Gateway Edge Responsibilities (and the Three It Declines)","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Two changes from the 2026-09-07 security review. 1. Health endpoints are cached server-side, and the bypass stays (SEC-Common-71 / SEC-ADC-17 / SEC-ADC-56). /health and…"},"831":{"u":"/docs/adr/088-gateway-edge-responsibilities.html#revision-2026-09-10","d":"ADR-088: Gateway Edge Responsibilities (and the Three It Declines)","k":"Architecture Decision Records","t":"Revision (2026-09-10)","x":"Both public UI hosts now carry the own-host hardening, so item 2 above is no longer a Store-only remediation. ADC's conference UI is externally reachable on its own FQDN, which…"},"832":{"u":"/docs/adr/088-gateway-edge-responsibilities.html#revision-2026-09-20","d":"ADR-088: Gateway Edge Responsibilities (and the Three It Declines)","k":"Architecture Decision Records","t":"Revision (2026-09-20)","x":"The decision the last revision declined to take is taken here: the own-host UI hardening is framework code. Two near-identical copies in two consumers is the shape that says a…"},"833":{"u":"/docs/adr/088-gateway-edge-responsibilities.html#revision-2026-10-01","d":"ADR-088: Gateway Edge Responsibilities (and the Three It Declines)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Both consumers now turn active destination probing off. The framework half of the delegation is unchanged: active checks stay opt-in…"},"834":{"u":"/docs/adr/088-gateway-edge-responsibilities.html#related","d":"ADR-088: Gateway Edge Responsibilities (and the Three It Declines)","k":"Architecture Decision Records","t":"Related","x":"ADR-008 (the record that made the Gateway the only entry point and gave it routing, CORS and auth forwarding; this is the first record to add cross-cutting behavior to it),…"},"835":{"u":"/docs/adr/089-gateway-topology-owned-by-configuration.html","d":"ADR-089: Gateway Topology Owned by Configuration","k":"Architecture Decision Records"},"836":{"u":"/docs/adr/089-gateway-topology-owned-by-configuration.html#status","d":"ADR-089: Gateway Topology Owned by Configuration","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-18; revised 2026-08-23: ADC's table gained a 27th route, /Activities, on 2026-08-19; revised 2026-08-31: section 5 now states the activity timeout where it…"},"837":{"u":"/docs/adr/089-gateway-topology-owned-by-configuration.html#context","d":"ADR-089: Gateway Topology Owned by Configuration","k":"Architecture Decision Records","t":"Context","x":"Before this record, both gateways built their route table by hand, in code. ADC made 26 MapForwarder calls and Store made 10. Neither host called AddReverseProxy or…"},"838":{"u":"/docs/adr/089-gateway-topology-owned-by-configuration.html#decision","d":"ADR-089: Gateway Topology Owned by Configuration","k":"Architecture Decision Records","t":"Decision","x":"Make configuration the single source of the gateway route table, and pin it with a test. Each gateway calls…"},"839":{"u":"/docs/adr/089-gateway-topology-owned-by-configuration.html#rationale","d":"ADR-089: Gateway Topology Owned by Configuration","k":"Architecture Decision Records","t":"Rationale","x":"- The drift already happened, in the repository that has the most gateway tests. ADC is the careful consumer, and it still carried three unpinned routes, an off-by-one comment…"},"840":{"u":"/docs/adr/089-gateway-topology-owned-by-configuration.html#trade-offs","d":"ADR-089: Gateway Topology Owned by Configuration","k":"Architecture Decision Records","t":"Trade-offs","x":"- The compiler stopped helping. A misspelled cluster reference, a malformed path pattern or a route that shadows another is a runtime failure, discovered as a 404 or a 502, where…"},"841":{"u":"/docs/adr/089-gateway-topology-owned-by-configuration.html#revision-2026-10-01","d":"ADR-089: Gateway Topology Owned by Configuration","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision changed. Two current-state statements were corrected. The Rationale example of an ungated comment drifting no longer holds for ADC, whose conference label now reads…"},"842":{"u":"/docs/adr/089-gateway-topology-owned-by-configuration.html#related","d":"ADR-089: Gateway Topology Owned by Configuration","k":"Architecture Decision Records","t":"Related","x":"ADR-008 (amended: the Gateway keeps the route-to-service map it was given, now expressed as configuration rather than as forwarder registrations), ADR-088 (the other half of this…"},"843":{"u":"/docs/adr/090-event-upcaster-registration.html","d":"ADR-090: Event Upcaster Registration Extension Point","k":"Architecture Decision Records"},"844":{"u":"/docs/adr/090-event-upcaster-registration.html#status","d":"ADR-090: Event Upcaster Registration Extension Point","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-21). Completes the follow-up named in ADR-010: that record established the versioning policy (a SchemaVersion signal plus a new-type-and-upcaster discipline for…"},"845":{"u":"/docs/adr/090-event-upcaster-registration.html#context","d":"ADR-090: Event Upcaster Registration Extension Point","k":"Architecture Decision Records","t":"Context","x":"ADR-010 splits event evolution into a signal and a discipline. The signal (SchemaVersion, a fitness-function-gated property on every integration event) shipped with ADR-010…"},"846":{"u":"/docs/adr/090-event-upcaster-registration.html#decision","d":"ADR-090: Event Upcaster Registration Extension Point","k":"Architecture Decision Records","t":"Decision","x":"1. A typed upcaster abstraction, in the Application layer. IEventUpcaster (Source/Core/MMCA.Common.Application/Interfaces/Events/IEventUpcaster.cs) is a pure payload mapping from…"},"847":{"u":"/docs/adr/090-event-upcaster-registration.html#rationale","d":"ADR-090: Event Upcaster Registration Extension Point","k":"Architecture Decision Records","t":"Rationale","x":"- The discipline becomes a mechanism. ADR-010's own framing (a thing that matters is a check, not a comment) now applies to the upcaster half: the transform has a first-class…"},"848":{"u":"/docs/adr/090-event-upcaster-registration.html#trade-offs","d":"ADR-090: Event Upcaster Registration Extension Point","k":"Architecture Decision Records","t":"Trade-offs","x":"- The upcast walk advances by declared target type, not runtime type. A misbehaving upcaster that returns an instance of some other type cannot send the walk into an unvalidated…"},"849":{"u":"/docs/adr/090-event-upcaster-registration.html#revision-2026-09-03","d":"ADR-090: Event Upcaster Registration Extension Point","k":"Architecture Decision Records","t":"Revision (2026-09-03)","x":"The decision, the mechanism, and both delivery paths are unchanged. What changed is one trade-off's premise and three file locations. 1. Outbox type resolution is no longer…"},"850":{"u":"/docs/adr/090-event-upcaster-registration.html#revision-2026-10-01","d":"ADR-090: Event Upcaster Registration Extension Point","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision, mechanism, or rationale changed; this revision refreshes citations only. AddEventUpcaster is defined in…"},"851":{"u":"/docs/adr/091-cache-backed-password-reset.html","d":"ADR-091: Cache-Backed Password Reset","k":"Architecture Decision Records"},"852":{"u":"/docs/adr/091-cache-backed-password-reset.html#status","d":"ADR-091: Cache-Backed Password Reset","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-22). Extends ADR-029 (the cache-backed login-protection idiom this record reuses) and ADR-032 (which decided how a password is stored, never how a user who has…"},"853":{"u":"/docs/adr/091-cache-backed-password-reset.html#context","d":"ADR-091: Cache-Backed Password Reset","k":"Architecture Decision Records","t":"Context","x":"Both consumer apps shipped authenticated password change (PUT /Auth/password) and nothing for a user who cannot sign in at all. The recorded fallback in MMCA.ADC's specification…"},"854":{"u":"/docs/adr/091-cache-backed-password-reset.html#decision","d":"ADR-091: Cache-Backed Password Reset","k":"Architecture Decision Records","t":"Decision","x":"1. The reset token is a cache record, not a schema change. IPasswordResetTokenService (Source/Core/MMCA.Common.Application/Auth/IPasswordResetTokenService.cs) is two methods,…"},"855":{"u":"/docs/adr/091-cache-backed-password-reset.html#rationale","d":"ADR-091: Cache-Backed Password Reset","k":"Architecture Decision Records","t":"Rationale","x":"- No migration is the whole point. A reset credential is short-lived by nature, and the expiry semantics a reset needs (a TTL, a single use, an attempt cap) are native to a cache…"},"856":{"u":"/docs/adr/091-cache-backed-password-reset.html#trade-offs","d":"ADR-091: Cache-Backed Password Reset","k":"Architecture Decision Records","t":"Trade-offs","x":"- Cache eviction invalidates outstanding tokens. A Redis restart, an eviction under memory pressure, or a fall back to the in-memory store on a different replica all silently…"},"857":{"u":"/docs/adr/091-cache-backed-password-reset.html#revision-2026-10-01","d":"ADR-091: Cache-Backed Password Reset","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Three behaviors changed after acceptance, and four statements are corrected: one was omitted at acceptance, two were wrong as written, and one had drifted from a later revision…"},"858":{"u":"/docs/adr/092-web-vitals-budget-gate.html","d":"ADR-092: Core Web Vitals Budget as a Shipped Test Contract and Deploy Gate","k":"Architecture Decision Records"},"859":{"u":"/docs/adr/092-web-vitals-budget-gate.html#status","d":"ADR-092: Core Web Vitals Budget as a Shipped Test Contract and Deploy Gate","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-23). Revised 2026-09-01: the measurement flow itself now ships as an IPage extension that every suite routes through, and the framework gallery measures three…"},"860":{"u":"/docs/adr/092-web-vitals-budget-gate.html#context","d":"ADR-092: Core Web Vitals Budget as a Shipped Test Contract and Deploy Gate","k":"Architecture Decision Records","t":"Context","x":"Rubric section 23 asks for client-side performance that is measured rather than assumed, naming Core Web Vitals (LCP, INP, CLS) or an equivalent as the evidence…"},"861":{"u":"/docs/adr/092-web-vitals-budget-gate.html#decision","d":"ADR-092: Core Web Vitals Budget as a Shipped Test Contract and Deploy Gate","k":"Architecture Decision Records","t":"Decision","x":"Ship the measurement infrastructure, the measurement flow and the assert mechanics in MMCA.Common.Testing.E2E, default the budget to the Core Web Vitals good band, and let the…"},"862":{"u":"/docs/adr/092-web-vitals-budget-gate.html#rationale","d":"ADR-092: Core Web Vitals Budget as a Shipped Test Contract and Deploy Gate","k":"Architecture Decision Records","t":"Rationale","x":"- The good band is an external contract, which is what makes an absolute ceiling defensible here. ADR-060 refused absolute latency because a nanosecond count is a property of the…"},"863":{"u":"/docs/adr/092-web-vitals-budget-gate.html#trade-offs","d":"ADR-092: Core Web Vitals Budget as a Shipped Test Contract and Deploy Gate","k":"Architecture Decision Records","t":"Trade-offs","x":"- The gate is ui-scoped and may legitimately skip. Both apps gate e2e-gate on a ui change filter (ADC deploy.yml:838, Store :810) and deploy accepts skipped for it (ADC :1230,…"},"864":{"u":"/docs/adr/092-web-vitals-budget-gate.html#revision-2026-10-01","d":"ADR-092: Core Web Vitals Budget as a Shipped Test Contract and Deploy Gate","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. One sentence is corrected: the gallery's components test was described as the only case in the whole adoption set that drives an interaction,…"},"865":{"u":"/docs/adr/092-web-vitals-budget-gate.html#related","d":"ADR-092: Core Web Vitals Budget as a Shipped Test Contract and Deploy Gate","k":"Architecture Decision Records","t":"Related","x":"ADR-063 (the structural sibling: the same package, the same Playwright suite and the same deploy gate, applied to WCAG 2.1 AA instead of load performance), ADR-060 (the backend…"},"866":{"u":"/docs/adr/093-container-image-posture.html","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records"},"867":{"u":"/docs/adr/093-container-image-posture.html#status","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-23) for the three build decisions below. The two runtime postures below were recorded as undecided at that date: they described what the images did and the…"},"868":{"u":"/docs/adr/093-container-image-posture.html#context","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records","t":"Context","x":"Eleven Dockerfiles produce every deployable container in the two Azure-hosted applications: six in MMCA.ADC (four services, the Gateway, the Blazor web host) and five in…"},"869":{"u":"/docs/adr/093-container-image-posture.html#decision","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records","t":"Decision","x":"1. The GitHub Packages credential is a BuildKit secret, never an ARG or ENV. Both applications' nuget.config source-maps MMCA. to GitHub Packages, so every restore inside an…"},"870":{"u":"/docs/adr/093-container-image-posture.html#runtime-postures-closed-2026-09-07","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records","t":"Runtime postures (closed 2026-09-07)","x":"The base image is pinned by digest. All eleven images name the runtime and the SDK image by sha256, with the 10.0 tag left in place as a readable suffix (ADC…"},"871":{"u":"/docs/adr/093-container-image-posture.html#rationale","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records","t":"Rationale","x":"- A secret that is never a layer cannot leak from a layer. BuildKit secret mounts are the only mechanism that keeps the credential out of the image, the build cache and docker…"},"872":{"u":"/docs/adr/093-container-image-posture.html#trade-offs","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records","t":"Trade-offs","x":"- Eleven copies drift independently. There is no shared base Dockerfile and no test that compares them, so a fix applied to one image is applied to one image. The ReadyToRun…"},"873":{"u":"/docs/adr/093-container-image-posture.html#revision-2026-09-07","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"The open postures this record listed are closed in both consumers, from the 2026-09-07 security review. 1. Base images are pinned by digest (SEC-ADC-32 / SEC-ADC-54 /…"},"874":{"u":"/docs/adr/093-container-image-posture.html#related","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records","t":"Related","x":"ADR-038 (supply-chain provenance: it gates the package graph with lock files, a vulnerability audit and an SBOM, and stops at the repository boundary, so the image layers this…"},"875":{"u":"/docs/adr/093-container-image-posture.html#revision-2026-09-03","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records","t":"Revision (2026-09-03)","x":"Container sizing is uniform, so the ReadyToRun argument applies evenly. Decision 3 justified ReadyToRun by the CPU the replicas land on and cited a split: four ADC apps at 0.25…"},"876":{"u":"/docs/adr/093-container-image-posture.html#revision-2026-09-10","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records","t":"Revision (2026-09-10)","x":"Locked mode is back on Store's four non-UI images, and the inventory is stated per image rather than by one example. The anchor in Revision (2026-09-07) item 3 pointed at a line…"},"877":{"u":"/docs/adr/093-container-image-posture.html#revision-2026-10-01","d":"ADR-093: Container Image Build and Runtime Posture","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Three statements in Context and decision 4 no longer matched the files and are corrected in place. The digest pair is shared, not per…"},"878":{"u":"/docs/adr/094-client-entity-data-access.html","d":"ADR-094: Client-Side Entity Data-Access Contract","k":"Architecture Decision Records"},"879":{"u":"/docs/adr/094-client-entity-data-access.html#status","d":"ADR-094: Client-Side Entity Data-Access Contract","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-23). Revised 2026-08-31: GetByIdAsync is recorded with its real signature (id, includeChildren, CancellationToken; a missing entity is a NotFound failure, there…"},"880":{"u":"/docs/adr/094-client-entity-data-access.html#context","d":"ADR-094: Client-Side Entity Data-Access Contract","k":"Architecture Decision Records","t":"Context","x":"ADR-034 decided the server half of entity data access: a generic controller base with a dynamic query contract, where filters arrive as filters[Property].operator /…"},"881":{"u":"/docs/adr/094-client-entity-data-access.html#decision","d":"ADR-094: Client-Side Entity Data-Access Contract","k":"Architecture Decision Records","t":"Decision","x":"Client-side entity data access goes through one hand-written base hierarchy in MMCA.Common.UI. - One HTTP root: AuthenticatedServiceBase…"},"882":{"u":"/docs/adr/094-client-entity-data-access.html#rationale","d":"ADR-094: Client-Side Entity Data-Access Contract","k":"Architecture Decision Records","t":"Rationale","x":"- A hand-written typed base beats a generated client here because the surface is already generic. ADR-034 collapsed N entity endpoints into one shape, so there is exactly one…"},"883":{"u":"/docs/adr/094-client-entity-data-access.html#trade-offs","d":"ADR-094: Client-Side Entity Data-Access Contract","k":"Architecture Decision Records","t":"Trade-offs","x":"- No generated client means drift is caught at runtime, not at build time. A server-side rename of a query parameter or a DTO property does not fail the UI build; it fails the…"},"884":{"u":"/docs/adr/094-client-entity-data-access.html#revision-2026-10-01","d":"ADR-094: Client-Side Entity Data-Access Contract","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The Blazor Server per-circuit state rule is recorded as a Decision bullet. It was already enforced but not written down: UI assemblies carry no mutable static members outside a…"},"885":{"u":"/docs/adr/094-client-entity-data-access.html#related","d":"ADR-094: Client-Side Entity Data-Access Contract","k":"Architecture Decision Records","t":"Related","x":"ADR-034 (the server surface this contract calls, and the filter grammar the client constructs), ADR-017 (the server-side filter whose client half is specified here: who mints the…"},"886":{"u":"/docs/adr/095-soft-delete-unique-indexes.html","d":"ADR-095: Uniqueness Under Soft Delete (Filtered Unique Indexes)","k":"Architecture Decision Records"},"887":{"u":"/docs/adr/095-soft-delete-unique-indexes.html#status","d":"ADR-095: Uniqueness Under Soft Delete (Filtered Unique Indexes)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-23). Revised 2026-08-26 (the convention appends its clause to a hand-authored filter instead of skipping the index)."},"888":{"u":"/docs/adr/095-soft-delete-unique-indexes.html#context","d":"ADR-095: Uniqueness Under Soft Delete (Filtered Unique Indexes)","k":"Architecture Decision Records","t":"Context","x":"ADR-005 makes deletion soft: an IAuditableEntity sets IsDeleted = true (MMCA.Common/Source/Core/MMCA.Common.Domain/Interfaces/IAuditableEntity.cs:11) and a named global query…"},"889":{"u":"/docs/adr/095-soft-delete-unique-indexes.html#decision","d":"ADR-095: Uniqueness Under Soft Delete (Filtered Unique Indexes)","k":"Architecture Decision Records","t":"Decision","x":"Make the filter a convention: every unique index on a soft-deletable entity excludes deleted rows, automatically, in every context of every consumer. - A model-finalizing…"},"890":{"u":"/docs/adr/095-soft-delete-unique-indexes.html#rationale","d":"ADR-095: Uniqueness Under Soft Delete (Filtered Unique Indexes)","k":"Architecture Decision Records","t":"Rationale","x":"- The database should agree with what the application shows. The query filter already says a soft-deleted row does not exist; a unique index that disagrees is the one place the…"},"891":{"u":"/docs/adr/095-soft-delete-unique-indexes.html#trade-offs","d":"ADR-095: Uniqueness Under Soft Delete (Filtered Unique Indexes)","k":"Architecture Decision Records","t":"Trade-offs","x":"- It moves schema in consumers, invisibly from the entity configuration. Adopting the convention is a database-contract change: nothing in an entity configuration changed, but…"},"892":{"u":"/docs/adr/095-soft-delete-unique-indexes.html#revision-2026-10-01","d":"ADR-095: Uniqueness Under Soft Delete (Filtered Unique Indexes)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Engine coverage now includes PostgreSQL: SoftDeleteFilterSql.Build emits \"IsDeleted\" = false there, because the flag is a real boolean column,…"},"893":{"u":"/docs/adr/095-soft-delete-unique-indexes.html#related","d":"ADR-095: Uniqueness Under Soft Delete (Filtered Unique Indexes)","k":"Architecture Decision Records","t":"Related","x":"ADR-005 (decides soft-delete over erasure and owns the query filter that hides the row, but says nothing about uniqueness: this ADR closes that gap), ADR-057 (the expand/contract…"},"894":{"u":"/docs/adr/096-best-effort-side-effects.html","d":"ADR-096: Best-Effort Side-Effect Contract","k":"Architecture Decision Records"},"895":{"u":"/docs/adr/096-best-effort-side-effects.html#status","d":"ADR-096: Best-Effort Side-Effect Contract","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-23). Revised 2026-08-31. Revised 2026-09-19. Revised 2026-09-25 (the ADR-054 cross-reference is re-anchored onto that record's current best-effort trade-off)."},"896":{"u":"/docs/adr/096-best-effort-side-effects.html#context","d":"ADR-096: Best-Effort Side-Effect Contract","k":"Architecture Decision Records","t":"Context","x":"A command that has already committed often has follow-up work attached to it: evict the output-cache entries the write invalidated, broadcast the new state to a live channel,…"},"897":{"u":"/docs/adr/096-best-effort-side-effects.html#decision","d":"ADR-096: Best-Effort Side-Effect Contract","k":"Architecture Decision Records","t":"Decision","x":"One framework helper defines the contract, and a swallow that does not go through it is a deliberate, documented exception. - BestEffort.ExecuteAsync(operation, logger, action,…"},"898":{"u":"/docs/adr/096-best-effort-side-effects.html#rationale","d":"ADR-096: Best-Effort Side-Effect Contract","k":"Architecture Decision Records","t":"Rationale","x":"- One policy beats five local leniencies. Each feature record is still right about its own degradation; what they could not each decide is the shape of the swallow. A single…"},"899":{"u":"/docs/adr/096-best-effort-side-effects.html#trade-offs","d":"ADR-096: Best-Effort Side-Effect Contract","k":"Architecture Decision Records","t":"Trade-offs","x":"- Nothing gates use of the helper. There is no fitness rule, analyzer or architecture test that fails a build for a hand-rolled catch (Exception) that should have been a…"},"900":{"u":"/docs/adr/096-best-effort-side-effects.html#revision-2026-10-01","d":"ADR-096: Best-Effort Side-Effect Contract","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; the adoption inventory and several statements about it are corrected. Adoption is twelve call sites, not eleven: Store's inventory set path is a…"},"901":{"u":"/docs/adr/096-best-effort-side-effects.html#related","d":"ADR-096: Best-Effort Side-Effect Contract","k":"Architecture Decision Records","t":"Related","x":"ADR-024 (push delivery failure is non-fatal and recorded rather than raised, one of the local leniencies this policy generalizes), ADR-026 (eviction is best-effort, and its…"},"902":{"u":"/docs/adr/097-multi-device-refresh-sessions.html","d":"ADR-097: Multi-Device Refresh Sessions (Hashed, Rotating, Per Device)","k":"Architecture Decision Records"},"903":{"u":"/docs/adr/097-multi-device-refresh-sessions.html#status","d":"ADR-097: Multi-Device Refresh Sessions (Hashed, Rotating, Per Device)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-26). Supersedes the storage model of ADR-050 (one plaintext refresh-token column on the user row); the rotation and reuse-detection policy that record decided…"},"904":{"u":"/docs/adr/097-multi-device-refresh-sessions.html#context","d":"ADR-097: Multi-Device Refresh Sessions (Hashed, Rotating, Per Device)","k":"Architecture Decision Records","t":"Context","x":"ADR-050 stores a user's refresh token as a single nullable RefreshToken string plus its RefreshTokenExpiry on the app's User aggregate. That model settles rotation and reuse…"},"905":{"u":"/docs/adr/097-multi-device-refresh-sessions.html#decision","d":"ADR-097: Multi-Device Refresh Sessions (Hashed, Rotating, Per Device)","k":"Architecture Decision Records","t":"Decision","x":"Refresh tokens become rows in their own table: one row per signed-in device, hashed at rest, chained on rotation. - RefreshSession is a flat framework record, not an aggregate.…"},"906":{"u":"/docs/adr/097-multi-device-refresh-sessions.html#rationale","d":"ADR-097: Multi-Device Refresh Sessions (Hashed, Rotating, Per Device)","k":"Architecture Decision Records","t":"Rationale","x":"- A credential at rest is a credential. Hashing is what turns a database read from \"mint tokens for every signed-in user\" into \"hold a list of digests\". The unsalted digest is…"},"907":{"u":"/docs/adr/097-multi-device-refresh-sessions.html#trade-offs","d":"ADR-097: Multi-Device Refresh Sessions (Hashed, Rotating, Per Device)","k":"Architecture Decision Records","t":"Trade-offs","x":"- This is a breaking change with a data migration attached. IAuthUser loses RefreshToken, RefreshTokenExpiry, UpdateRefreshToken and RevokeRefreshToken (IAuthUser.cs:9-14, the…"},"908":{"u":"/docs/adr/097-multi-device-refresh-sessions.html#revision-2026-09-07","d":"ADR-097: Multi-Device Refresh Sessions (Hashed, Rotating, Per Device)","k":"Architecture Decision Records","t":"Revision (2026-09-07)","x":"Credential rotation now ends the session family (SEC-Common-02). A stolen refresh chain otherwise survived the exact remediation a user performs on discovering it: the rotation…"},"909":{"u":"/docs/adr/097-multi-device-refresh-sessions.html#revision-2026-10-01","d":"ADR-097: Multi-Device Refresh Sessions (Hashed, Rotating, Per Device)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; the current-state sections now match the code. Content corrected in place: the session cap is read through a protected virtual…"},"910":{"u":"/docs/adr/097-multi-device-refresh-sessions.html#related","d":"ADR-097: Multi-Device Refresh Sessions (Hashed, Rotating, Per Device)","k":"Architecture Decision Records","t":"Related","x":"ADR-050 (the single-column model this record replaces, and the source of the rotation and reuse-detection policy it keeps), ADR-004 (the stateless RS256 access token this flow…"},"911":{"u":"/docs/adr/098-aspire-orchestration-not-testing-or-dashboards.html","d":"ADR-098: Aspire for Orchestration, Not for Testing or Production Dashboards","k":"Architecture Decision Records"},"912":{"u":"/docs/adr/098-aspire-orchestration-not-testing-or-dashboards.html#status","d":"ADR-098: Aspire for Orchestration, Not for Testing or Production Dashboards","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-28). Revised 2026-08-31: the sanctioned nightly AppHost smoke test is implemented, and every citation below is re-verified against current source. Revised…"},"913":{"u":"/docs/adr/098-aspire-orchestration-not-testing-or-dashboards.html#context","d":"ADR-098: Aspire for Orchestration, Not for Testing or Production Dashboards","k":"Architecture Decision Records","t":"Context","x":"Aspire is used on exactly two surfaces here. Orchestration. Each app has an AppHost that composes the local stack from one file: ADC's provisions a persistent SQL Server…"},"914":{"u":"/docs/adr/098-aspire-orchestration-not-testing-or-dashboards.html#decision","d":"ADR-098: Aspire for Orchestration, Not for Testing or Production Dashboards","k":"Architecture Decision Records","t":"Decision","x":"The tiers that exist keep their shape, and DistributedApplicationTestingBuilder stays out of them. - Per-service tier: one in-process host, real SQL, mocked cross-service edges.…"},"915":{"u":"/docs/adr/098-aspire-orchestration-not-testing-or-dashboards.html#rationale","d":"ADR-098: Aspire for Orchestration, Not for Testing or Production Dashboards","k":"Architecture Decision Records","t":"Rationale","x":"- Test at the boundary that ships. A service is deployed as its own container app (MMCA.ADC/infra/main.bicep:1624, :1851, :2002, :2135), configured entirely through environment…"},"916":{"u":"/docs/adr/098-aspire-orchestration-not-testing-or-dashboards.html#trade-offs","d":"ADR-098: Aspire for Orchestration, Not for Testing or Production Dashboards","k":"Architecture Decision Records","t":"Trade-offs","x":"- Nothing below the E2E lane tests the AppHost's own wiring. A bad reference or a missing environment injection in Program.cs is caught by the E2E gate or by a developer, and the…"},"917":{"u":"/docs/adr/098-aspire-orchestration-not-testing-or-dashboards.html#revision-2026-10-01","d":"ADR-098: Aspire for Orchestration, Not for Testing or Production Dashboards","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Two statements were incomplete and are corrected in place. First, the framework's AppHost testing package is also exercised per PR in…"},"918":{"u":"/docs/adr/098-aspire-orchestration-not-testing-or-dashboards.html#related","d":"ADR-098: Aspire for Orchestration, Not for Testing or Production Dashboards","k":"Architecture Decision Records","t":"Related","x":"ADR-041 (the shared Aspire OpenTelemetry baseline and the sampling / metric-toggle knobs this record's production half configures), ADR-062 (the alert rules and the workbook that…"},"919":{"u":"/docs/adr/099-generic-write-side-entity-commands.html","d":"ADR-099: Generic Write-Side Entity Commands (Create, Update, Delete Without a Handler per Aggregate)","k":"Architecture Decision Records"},"920":{"u":"/docs/adr/099-generic-write-side-entity-commands.html#status","d":"ADR-099: Generic Write-Side Entity Commands (Create, Update, Delete Without a Handler per Aggregate)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-29, framework v1.170.0). Extends ADR-034, which gave every entity a generic read surface plus create and delete, by completing the write half: a generic update…"},"921":{"u":"/docs/adr/099-generic-write-side-entity-commands.html#context","d":"ADR-099: Generic Write-Side Entity Commands (Create, Update, Delete Without a Handler per Aggregate)","k":"Architecture Decision Records","t":"Context","x":"ADR-034 records the read side of the generic resource layer and stops one verb short. Its AggregateRootEntityControllerBase ships [HttpPost] create and [HttpDelete(\"{id}\")]…"},"922":{"u":"/docs/adr/099-generic-write-side-entity-commands.html#decision","d":"ADR-099: Generic Write-Side Entity Commands (Create, Update, Delete Without a Handler per Aggregate)","k":"Architecture Decision Records","t":"Decision","x":"Ship the generic write side as four additive pieces plus a registration helper. 1. The aggregate keeps the mutation, behind one interface. IEntityUpdateApplier…"},"923":{"u":"/docs/adr/099-generic-write-side-entity-commands.html#rationale","d":"ADR-099: Generic Write-Side Entity Commands (Create, Update, Delete Without a Handler per Aggregate)","k":"Architecture Decision Records","t":"Rationale","x":"- The one thing that varies per aggregate is the one thing the module writes. Load, concurrency stamping, NotFound, save, DTO projection, cache invalidation and validation are…"},"924":{"u":"/docs/adr/099-generic-write-side-entity-commands.html#trade-offs","d":"ADR-099: Generic Write-Side Entity Commands (Create, Update, Delete Without a Handler per Aggregate)","k":"Architecture Decision Records","t":"Trade-offs","x":"- The update request is the write contract, so it tracks the aggregate. Exactly the coupling ADR-034 records for the read side, on the other axis: what a caller may change is…"},"925":{"u":"/docs/adr/099-generic-write-side-entity-commands.html#related","d":"ADR-099: Generic Write-Side Entity Commands (Create, Update, Delete Without a Handler per Aggregate)","k":"Architecture Decision Records","t":"Related","x":"ADR-034 (the read side plus create and delete this record completes; its AggregateRootEntityControllerBase is what CrudEntityControllerBase derives from), ADR-083 (the events the…"},"926":{"u":"/docs/adr/099-generic-write-side-entity-commands.html#revision-2026-08-30-the-five-surfaces-that-complete-the-write-side","d":"ADR-099: Generic Write-Side Entity Commands (Create, Update, Delete Without a Handler per Aggregate)","k":"Architecture Decision Records","t":"Revision (2026-08-30): the five surfaces that complete the write side","x":"The decision above shipped the generic update and left the bases where it found them. Reading real write handlers against those bases surfaced five shapes that still forced a…"},"927":{"u":"/docs/adr/099-generic-write-side-entity-commands.html#revision-2026-10-01","d":"ADR-099: Generic Write-Side Entity Commands (Create, Update, Delete Without a Handler per Aggregate)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision changed; two statements in the current-state sections were corrected and stale citations re-anchored. The Rationale claimed the generic update inherits every ADR-014…"},"928":{"u":"/docs/adr/100-outbox-opt-in-resolved-from-messaging-mode.html","d":"ADR-100: The Outbox Is Resolved from the Messaging Mode, Not Always On","k":"Architecture Decision Records"},"929":{"u":"/docs/adr/100-outbox-opt-in-resolved-from-messaging-mode.html#status","d":"ADR-100: The Outbox Is Resolved from the Messaging Mode, Not Always On","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-29, framework v1.170.0). Amends ADR-003 (the outbox runs when the transport needs it, rather than in every host unconditionally) and follows the three-valued…"},"930":{"u":"/docs/adr/100-outbox-opt-in-resolved-from-messaging-mode.html#context","d":"ADR-100: The Outbox Is Resolved from the Messaging Mode, Not Always On","k":"Architecture Decision Records","t":"Context","x":"ADR-003 gives every host a transactional outbox: domain and integration events are written to OutboxMessages in the same transaction as the aggregate changes, OutboxProcessor…"},"931":{"u":"/docs/adr/100-outbox-opt-in-resolved-from-messaging-mode.html#decision","d":"ADR-100: The Outbox Is Resolved from the Messaging Mode, Not Always On","k":"Architecture Decision Records","t":"Decision","x":"Make the outbox a three-valued setting resolved from the transport, gate the components that cost something, keep the schema, and refuse the one combination that cannot work. 1.…"},"932":{"u":"/docs/adr/100-outbox-opt-in-resolved-from-messaging-mode.html#rationale","d":"ADR-100: The Outbox Is Resolved from the Messaging Mode, Not Always On","k":"Architecture Decision Records","t":"Rationale","x":"- The outbox is a transport decision, not a persistence one. Whether an event must survive a process boundary is exactly the question MessageBus:Provider already answers, so…"},"933":{"u":"/docs/adr/100-outbox-opt-in-resolved-from-messaging-mode.html#trade-offs","d":"ADR-100: The Outbox Is Resolved from the Messaging Mode, Not Always On","k":"Architecture Decision Records","t":"Trade-offs","x":"- The default for an in-process host changed. A host on InProcess messaging (or with no MessageBus section at all, which resolves to the same provider) no longer runs the durable…"},"934":{"u":"/docs/adr/100-outbox-opt-in-resolved-from-messaging-mode.html#revision-2026-10-01","d":"ADR-100: The Outbox Is Resolved from the Messaging Mode, Not Always On","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Re-anchored the startup-guard citations in Decision 4 (DependencyInjection.Messaging.cs:196, guard :198, throw :200-201) and the…"},"935":{"u":"/docs/adr/100-outbox-opt-in-resolved-from-messaging-mode.html#related","d":"ADR-100: The Outbox Is Resolved from the Messaging Mode, Not Always On","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (the outbox itself: the dual-dispatch contract, the processor, the retry and dead-letter policy, all unchanged for a host that runs it), ADR-021 (the consumer-side…"},"936":{"u":"/docs/adr/101-common-metapackage.html","d":"ADR-101: An MMCA.Common Metapackage for the Core Six","k":"Architecture Decision Records"},"937":{"u":"/docs/adr/101-common-metapackage.html#status","d":"ADR-101: An MMCA.Common Metapackage for the Core Six","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-29, framework v1.170.0). Extends ADR-053 (the metapackage ships to both registries from the same tag, through the same workflow) and inherits ADR-016 unchanged…"},"938":{"u":"/docs/adr/101-common-metapackage.html#context","d":"ADR-101: An MMCA.Common Metapackage for the Core Six","k":"Architecture Decision Records","t":"Context","x":"ADR-053 made the install path credential-free: dotnet add package MMCA.Common.API works for anyone, from nuget.org, with no token and no hand-written nuget.config. What it did…"},"939":{"u":"/docs/adr/101-common-metapackage.html#decision","d":"ADR-101: An MMCA.Common Metapackage for the Core Six","k":"Architecture Decision Records","t":"Decision","x":"Publish a metapackage named MMCA.Common that carries dependencies and no code. 1. It bundles the Core 6, in layer order. Source/MMCA.Common/MMCA.Common.csproj:26-31 references…"},"940":{"u":"/docs/adr/101-common-metapackage.html#rationale","d":"ADR-101: An MMCA.Common Metapackage for the Core Six","k":"Architecture Decision Records","t":"Rationale","x":"- The common case should cost one line. Six references is not hard, it is repetitive and order-independent noise that a reader has to verify rather than read, and getting it…"},"941":{"u":"/docs/adr/101-common-metapackage.html#trade-offs","d":"ADR-101: An MMCA.Common Metapackage for the Core Six","k":"Architecture Decision Records","t":"Trade-offs","x":"- A consumer mixing both forms has more pins to keep in step, not fewer. An app taking MMCA.Common plus MMCA.Common.UI and the Testing. set still has to sweep every entry to the…"},"942":{"u":"/docs/adr/101-common-metapackage.html#related","d":"ADR-101: An MMCA.Common Metapackage for the Core Six","k":"Architecture Decision Records","t":"Related","x":"ADR-053 (dual-registry publishing, which the metapackage joins with no workflow change), ADR-016 (one version for every package, one sweep per consumer: the property that makes…"},"943":{"u":"/docs/adr/102-pbkdf2-only-password-hashing.html","d":"ADR-102: PBKDF2-Only Password Hashing","k":"Architecture Decision Records"},"944":{"u":"/docs/adr/102-pbkdf2-only-password-hashing.html#status","d":"ADR-102: PBKDF2-Only Password Hashing","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-31). Supersedes ADR-032. Revised 2026-09-11: verification now carries a canonical-material length guard (it rejects any stored hash or salt that is not exactly…"},"945":{"u":"/docs/adr/102-pbkdf2-only-password-hashing.html#context","d":"ADR-102: PBKDF2-Only Password Hashing","k":"Architecture Decision Records","t":"Context","x":"ADR-032 recorded a hasher with two verification paths: PBKDF2-HMAC-SHA512 for new credentials, and an HMAC-SHA512 recompute for rows written under an older scheme, selected at…"},"946":{"u":"/docs/adr/102-pbkdf2-only-password-hashing.html#decision","d":"ADR-102: PBKDF2-Only Password Hashing","k":"Architecture Decision Records","t":"Decision","x":"Hashing and verification are PBKDF2-only. There is one framework IPasswordHasher and one code path through it, in both directions. - One interface, one implementation, one…"},"947":{"u":"/docs/adr/102-pbkdf2-only-password-hashing.html#rationale","d":"ADR-102: PBKDF2-Only Password Hashing","k":"Architecture Decision Records","t":"Rationale","x":"- A verification path that serves no rows is pure risk. With the production stores confirmed free of legacy-format credentials, the branch could only ever be reached by a…"},"948":{"u":"/docs/adr/102-pbkdf2-only-password-hashing.html#trade-offs","d":"ADR-102: PBKDF2-Only Password Hashing","k":"Architecture Decision Records","t":"Trade-offs","x":"- A legacy-format row that reaches production now fails verification. Restoring an old backup, importing a credential from an external system in the legacy shape, or missing a…"},"949":{"u":"/docs/adr/102-pbkdf2-only-password-hashing.html#revision-2026-10-01","d":"ADR-102: PBKDF2-Only Password Hashing","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Anchor refresh only; no decision or rationale changed. The Decision's citations are re-anchored to current source: the TryAddSingleton registration (DependencyInjection.cs:304),…"},"950":{"u":"/docs/adr/102-pbkdf2-only-password-hashing.html#related","d":"ADR-102: PBKDF2-Only Password Hashing","k":"Architecture Decision Records","t":"Related","x":"ADR-032 (the superseded record: the same hasher, its parameters and its call-site hoisting, plus the legacy-compatibility design this reverses), ADR-004 (cross-service JWT / JWKS…"},"951":{"u":"/docs/adr/103-bunit-component-test-tier.html","d":"ADR-103: bUnit Component-Test Tier as a Shipped Package","k":"Architecture Decision Records"},"952":{"u":"/docs/adr/103-bunit-component-test-tier.html#status","d":"ADR-103: bUnit Component-Test Tier as a Shipped Package","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-31). Revised 2026-09-03: one trade-off overstated how far the AngleSharp advisory pin travels. See Revision (2026-09-03) at the end. Revised 2026-09-19: four…"},"953":{"u":"/docs/adr/103-bunit-component-test-tier.html#context","d":"ADR-103: bUnit Component-Test Tier as a Shipped Package","k":"Architecture Decision Records","t":"Context","x":"Three test tiers in this workspace are decided in writing and one is not. ADR-015 gates structure with NetArchTest. ADR-058 ships the runtime conformance suites as abstract bases…"},"954":{"u":"/docs/adr/103-bunit-component-test-tier.html#decision","d":"ADR-103: bUnit Component-Test Tier as a Shipped Package","k":"Architecture Decision Records","t":"Decision","x":"Ship the component-test tier as a package. MMCA.Common.Testing.UI (MMCA.Common/Source/Hosting/MMCA.Common.Testing.UI/MMCA.Common.Testing.UI.csproj:3-4) is one of the MMCA.Common.…"},"955":{"u":"/docs/adr/103-bunit-component-test-tier.html#rationale","d":"ADR-103: bUnit Component-Test Tier as a Shipped Package","k":"Architecture Decision Records","t":"Rationale","x":"- The setup is what a component test gets wrong, so the setup is what the framework should own. Every item in the Decision is a choice with one correct answer per repo and a…"},"956":{"u":"/docs/adr/103-bunit-component-test-tier.html#trade-offs","d":"ADR-103: bUnit Component-Test Tier as a Shipped Package","k":"Architecture Decision Records","t":"Trade-offs","x":"- Loose JSInterop proves nothing about JS. A component test can render a component that calls a JS module which does not exist, because the loose mode answers with defaults…"},"957":{"u":"/docs/adr/103-bunit-component-test-tier.html#related","d":"ADR-103: bUnit Component-Test Tier as a Shipped Package","k":"Architecture Decision Records","t":"Related","x":"ADR-058 (the runtime conformance tier this sits below: same delivery shape, different question, and its bases need a booted host where these need only a renderer), ADR-063 and…"},"958":{"u":"/docs/adr/103-bunit-component-test-tier.html#revision-2026-09-03","d":"ADR-103: bUnit Component-Test Tier as a Shipped Package","k":"Architecture Decision Records","t":"Revision (2026-09-03)","x":"The decision and the mechanism are unchanged. One trade-off's premise was wrong. \"The bUnit version is pinned per repo\" said the AngleSharp advisory pin has to be repeated across…"},"959":{"u":"/docs/adr/103-bunit-component-test-tier.html#revision-2026-09-19","d":"ADR-103: bUnit Component-Test Tier as a Shipped Package","k":"Architecture Decision Records","t":"Revision (2026-09-19)","x":"The decision and the mechanism are unchanged. Four facts had drifted since the record was written. The bunit line is now pinned at 2.11.3, not 2.9.0, and all three central…"},"960":{"u":"/docs/adr/103-bunit-component-test-tier.html#revision-2026-10-01","d":"ADR-103: bUnit Component-Test Tier as a Shipped Package","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The authorization mechanism changed; the rest of the decision is unchanged. The base no longer registers a permissive IsAuthenticatedAuthorizationService. After…"},"961":{"u":"/docs/adr/104-smart-enums-as-opt-in-capability.html","d":"ADR-104: Plain Enums by Default, Enumeration as the Opt-In Smart-Enum Base","k":"Architecture Decision Records"},"962":{"u":"/docs/adr/104-smart-enums-as-opt-in-capability.html#status","d":"ADR-104: Plain Enums by Default, Enumeration as the Opt-In Smart-Enum Base","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-08-31). Revised 2026-09-09: ADR-115 copies this record's posture verbatim for strongly typed identifiers: shipped, tested, wired into JSON, EF Core, MVC binding…"},"963":{"u":"/docs/adr/104-smart-enums-as-opt-in-capability.html#context","d":"ADR-104: Plain Enums by Default, Enumeration as the Opt-In Smart-Enum Base","k":"Architecture Decision Records","t":"Context","x":"A bounded set of named values shows up everywhere in this workspace: the state that triggered a domain event, an error category, a rate-limiting algorithm, a message-bus…"},"964":{"u":"/docs/adr/104-smart-enums-as-opt-in-capability.html#decision","d":"ADR-104: Plain Enums by Default, Enumeration as the Opt-In Smart-Enum Base","k":"Architecture Decision Records","t":"Decision","x":"A plain C enum is the default for a bounded set. Enumeration is the opt-in base for a set whose members need behavior or data, and nothing in the framework pushes a consumer…"},"965":{"u":"/docs/adr/104-smart-enums-as-opt-in-capability.html#rationale","d":"ADR-104: Plain Enums by Default, Enumeration as the Opt-In Smart-Enum Base","k":"Architecture Decision Records","t":"Rationale","x":"- The default should be the cheap type. A CLR enum costs nothing at a call boundary, needs no serializer or EF registration, and is what a .NET reader expects for a set of names.…"},"966":{"u":"/docs/adr/104-smart-enums-as-opt-in-capability.html#trade-offs","d":"ADR-104: Plain Enums by Default, Enumeration as the Opt-In Smart-Enum Base","k":"Architecture Decision Records","t":"Trade-offs","x":"- A capability nobody uses is a capability nobody has stress-tested. The contract is pinned by 33 test methods against private fixtures, not by a production set with real…"},"967":{"u":"/docs/adr/104-smart-enums-as-opt-in-capability.html#revision-2026-10-01","d":"ADR-104: Plain Enums by Default, Enumeration as the Opt-In Smart-Enum Base","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. The remark on Enumeration now states the same three assertions the Context lists and says the fitness rule names no record and inspects no…"},"968":{"u":"/docs/adr/104-smart-enums-as-opt-in-capability.html#related","d":"ADR-104: Plain Enums by Default, Enumeration as the Opt-In Smart-Enum Base","k":"Architecture Decision Records","t":"Related","x":"ADR-037 (the precedent for recording a shipped, tested and unadopted framework capability as a decision rather than leaving it to read as unfinished adoption), ADR-068 (the seven…"},"969":{"u":"/docs/adr/105-data-residency-build-gate.html","d":"ADR-105: The Published Data-Residency Claim as a Build Gate","k":"Architecture Decision Records"},"970":{"u":"/docs/adr/105-data-residency-build-gate.html#status","d":"ADR-105: The Published Data-Residency Claim as a Build Gate","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-01). Revised 2026-10-01 (region matching is a whole-token comparison rather than plain containment; see Revision below)."},"971":{"u":"/docs/adr/105-data-residency-build-gate.html#context","d":"ADR-105: The Published Data-Residency Claim as a Build Gate","k":"Architecture Decision Records","t":"Context","x":"Both deployed apps publish a privacy policy at their repo root, and each has a section that tells a user where their personal data is stored (MMCA.ADC/PRIVACY.md:61,…"},"972":{"u":"/docs/adr/105-data-residency-build-gate.html#decision","d":"ADR-105: The Published Data-Residency Claim as a Build Gate","k":"Architecture Decision Records","t":"Decision","x":"The published data-residency claim is a build-gated assertion. A shared fitness base parses the region where a repo actually provisions its PII-bearing storage from that repo's…"},"973":{"u":"/docs/adr/105-data-residency-build-gate.html#rationale","d":"ADR-105: The Published Data-Residency Claim as a Build Gate","k":"Architecture Decision Records","t":"Rationale","x":"- The statement with the most legal weight had the least enforcement. Every other compliance claim in these repos is backed by code a rule can inspect: erasure by IAnonymizable,…"},"974":{"u":"/docs/adr/105-data-residency-build-gate.html#trade-offs","d":"ADR-105: The Published Data-Residency Claim as a Build Gate","k":"Architecture Decision Records","t":"Trade-offs","x":"- It proves the policy agrees with a file, not with Azure. Both extractors read committed text. A database provisioned by hand into another region, a restore into a different…"},"975":{"u":"/docs/adr/105-data-residency-build-gate.html#revision-2026-10-01","d":"ADR-105: The Published Data-Residency Claim as a Build Gate","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Region matching moved from plain containment to a whole-token comparison. The protected static ContainsRegionClaim…"},"976":{"u":"/docs/adr/105-data-residency-build-gate.html#related","d":"ADR-105: The Published Data-Residency Claim as a Build Gate","k":"Architecture Decision Records","t":"Related","x":"ADR-009 (the single-region acceptance a consumer must declare: this record is what keeps the published claim honest about which region that is), ADR-005 (the erasure path guarded…"},"977":{"u":"/docs/adr/106-extension-members-as-public-di-surface.html","d":"ADR-106: C# Extension Members as the Public DI Registration Surface","k":"Architecture Decision Records"},"978":{"u":"/docs/adr/106-extension-members-as-public-di-surface.html#status","d":"ADR-106: C# Extension Members as the Public DI Registration Surface","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-01; counts re-measured 2026-10-01)."},"979":{"u":"/docs/adr/106-extension-members-as-public-di-surface.html#context","d":"ADR-106: C# Extension Members as the Public DI Registration Surface","k":"Architecture Decision Records","t":"Context","x":"Every host in this workspace boots the same way: a Program.cs calls a short list of Add methods on IServiceCollection, one per layer, and all of the framework's wiring sits…"},"980":{"u":"/docs/adr/106-extension-members-as-public-di-surface.html#decision","d":"ADR-106: C# Extension Members as the Public DI Registration Surface","k":"Architecture Decision Records","t":"Decision","x":"The framework's public dependency-injection surface is written as C extension members: extension(T) blocks inside public static class types, compiled under LangVersion preview in…"},"981":{"u":"/docs/adr/106-extension-members-as-public-di-surface.html#rationale","d":"ADR-106: C# Extension Members as the Public DI Registration Surface","k":"Architecture Decision Records","t":"Rationale","x":"- One Add name per layer is the point of the surface. A host reads as a list of layers (Program.cs:78, :79, :101, :132), and grouping the registrations by receiver in a single…"},"982":{"u":"/docs/adr/106-extension-members-as-public-di-surface.html#trade-offs","d":"ADR-106: C# Extension Members as the Public DI Registration Surface","k":"Architecture Decision Records","t":"Trade-offs","x":"- A preview language feature under a floating SDK is a moving target. No global.json pins an SDK version and CI installs dotnet-version: '10.0.x'…"},"983":{"u":"/docs/adr/106-extension-members-as-public-di-surface.html#revision-2026-10-01","d":"ADR-106: C# Extension Members as the Public DI Registration Surface","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed: the framework's DI surface is still written as extension(T) blocks compiled under LangVersion preview, and both emitted shapes are still…"},"984":{"u":"/docs/adr/106-extension-members-as-public-di-surface.html#related","d":"ADR-106: C# Extension Members as the Public DI Registration Surface","k":"Architecture Decision Records","t":"Related","x":"ADR-015 (the RS0016/RS0017 baseline that freezes both emitted shapes of every extension member, and the fitness-rule tier that had to learn about ExtensionMarkerAttribute),…"},"985":{"u":"/docs/adr/107-transaction-execution-contract.html","d":"ADR-107: Transaction Execution and Commit-Ambiguity Contract","k":"Architecture Decision Records"},"986":{"u":"/docs/adr/107-transaction-execution-contract.html#status","d":"ADR-107: Transaction Execution and Commit-Ambiguity Contract","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-03; adoption counts and consumer state re-measured 2026-09-19). Revised 2026-09-25 (MMCA.ADC's ITransactional count corrected to six, adding…"},"987":{"u":"/docs/adr/107-transaction-execution-contract.html#context","d":"ADR-107: Transaction Execution and Commit-Ambiguity Contract","k":"Architecture Decision Records","t":"Context","x":"Every transactional write in this workspace funnels through one method. IUnitOfWork.ExecuteInTransactionAsync…"},"988":{"u":"/docs/adr/107-transaction-execution-contract.html#decision","d":"ADR-107: Transaction Execution and Commit-Ambiguity Contract","k":"Architecture Decision Records","t":"Decision","x":"ExecuteInTransactionAsync is a re-entrant, retriable, commit-once unit: the whole delegate is the retriable work, the commit phase is deliberately outside the retry, and a commit…"},"989":{"u":"/docs/adr/107-transaction-execution-contract.html#rationale","d":"ADR-107: Transaction Execution and Commit-Ambiguity Contract","k":"Architecture Decision Records","t":"Rationale","x":"- Retrying the operation is safe; retrying the commit is not. A transient failure before the commit leaves nothing durable, so re-running the delegate against a cleared change…"},"990":{"u":"/docs/adr/107-transaction-execution-contract.html#trade-offs","d":"ADR-107: Transaction Execution and Commit-Ambiguity Contract","k":"Architecture Decision Records","t":"Trade-offs","x":"- The ambiguity is a hard failure the caller must handle, and today nobody catches it. A host with no [Idempotent] coverage on the affected endpoint surfaces it as an unhandled…"},"991":{"u":"/docs/adr/107-transaction-execution-contract.html#revision-2026-10-01","d":"ADR-107: Transaction Execution and Commit-Ambiguity Contract","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The commit phase gained a pre-commit step. Since v1.215.0 (MMCA.Common/CHANGELOG.md:53), a successful attempt runs FlushEnrolledCommandsBeforeCommitAsync before TryCommit…"},"992":{"u":"/docs/adr/107-transaction-execution-contract.html#related","d":"ADR-107: Transaction Execution and Commit-Ambiguity Contract","k":"Architecture Decision Records","t":"Related","x":"ADR-014 (the Transactional decorator that is the main caller, and whose 2026-07-19 revision decided the failed-Result rollback this record implements), ADR-006…"},"993":{"u":"/docs/adr/108-distributed-lock-primitive.html","d":"ADR-108: Cross-Replica Mutual Exclusion via IDistributedLock","k":"Architecture Decision Records"},"994":{"u":"/docs/adr/108-distributed-lock-primitive.html#status","d":"ADR-108: Cross-Replica Mutual Exclusion via IDistributedLock","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-03). Revised 2026-09-19 (the second consumer moved: ADC's AI scoring pass now runs as the internal command ScoreEventSessionsInternalCommandHandler under…"},"995":{"u":"/docs/adr/108-distributed-lock-primitive.html#context","d":"ADR-108: Cross-Replica Mutual Exclusion via IDistributedLock","k":"Architecture Decision Records","t":"Context","x":"Both deployed apps run more than one replica of every service. ADC's Conference container app is declared with minReplicas: 1, maxReplicas: 2 (MMCA.ADC/infra/main.bicep:1851,…"},"996":{"u":"/docs/adr/108-distributed-lock-primitive.html#decision","d":"ADR-108: Cross-Replica Mutual Exclusion via IDistributedLock","k":"Architecture Decision Records","t":"Decision","x":"The framework ships one cross-replica mutual-exclusion primitive, IDistributedLock: a non-reentrant, TTL-bounded, explicitly best-effort lock with an owner-scoped idempotent…"},"997":{"u":"/docs/adr/108-distributed-lock-primitive.html#rationale","d":"ADR-108: Cross-Replica Mutual Exclusion via IDistributedLock","k":"Architecture Decision Records","t":"Rationale","x":"- The degraded mode had to be visible, not silent. Registering nothing when Redis is absent would push a null check onto every caller, and registering a no-op lock would make a…"},"998":{"u":"/docs/adr/108-distributed-lock-primitive.html#trade-offs","d":"ADR-108: Cross-Replica Mutual Exclusion via IDistributedLock","k":"Architecture Decision Records","t":"Trade-offs","x":"- Failover can hand the same key to two holders. The lock inherits Redis's failover behavior (RedisDistributedLock.cs:19-23), so a primary loss between acquire and replicate is a…"},"999":{"u":"/docs/adr/108-distributed-lock-primitive.html#revision-2026-10-01","d":"ADR-108: Cross-Replica Mutual Exclusion via IDistributedLock","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Two statements no longer matched the code. First, adoption grew to four call sites: the framework's own PasswordResetTokenService takes IDistributedLock as a constructor…"},"1000":{"u":"/docs/adr/108-distributed-lock-primitive.html#related","d":"ADR-108: Cross-Replica Mutual Exclusion via IDistributedLock","k":"Architecture Decision Records","t":"Related","x":"ADR-017 (the HTTP idempotency filter, the first consumer, whose 409-on-lock-miss this record explains), ADR-026 (the cache registration this lock is registered beside, and the…"},"1001":{"u":"/docs/adr/109-feature-by-folder-convention.html","d":"ADR-109: Feature-by-Folder Layout as an Enforced Convention","k":"Architecture Decision Records"},"1002":{"u":"/docs/adr/109-feature-by-folder-convention.html#status","d":"ADR-109: Feature-by-Folder Layout as an Enforced Convention","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-03; folder inventory and IDE0130 exception list refreshed 2026-09-19)."},"1003":{"u":"/docs/adr/109-feature-by-folder-convention.html#context","d":"ADR-109: Feature-by-Folder Layout as an Enforced Convention","k":"Architecture Decision Records","t":"Context","x":"The rubric's section 5 asks that \"code is organized by feature/capability, so a change touches one cohesive slice\", with features \"grouped by use case ..., not by horizontal…"},"1004":{"u":"/docs/adr/109-feature-by-folder-convention.html#decision","d":"ADR-109: Feature-by-Folder Layout as an Enforced Convention","k":"Architecture Decision Records","t":"Decision","x":"Folder structure is a governed architectural property, not a matter of taste: an aggregate or feature names a folder, a folder holds at most twelve direct code files, namespaces…"},"1005":{"u":"/docs/adr/109-feature-by-folder-convention.html#rationale","d":"ADR-109: Feature-by-Folder Layout as an Enforced Convention","k":"Architecture Decision Records","t":"Rationale","x":"- A wide folder has stopped naming a feature. The rule's own statement of intent is that a folder \"that accumulates dozens of direct code files has stopped naming a feature and…"},"1006":{"u":"/docs/adr/109-feature-by-folder-convention.html#trade-offs","d":"ADR-109: Feature-by-Folder Layout as an Enforced Convention","k":"Architecture Decision Records","t":"Trade-offs","x":"- Layout changes are public API breaks on a lockstep package family. Because the namespace is the folder, a reorganization is a breaking release for every consumer (ADR-016),…"},"1007":{"u":"/docs/adr/109-feature-by-folder-convention.html#revision-2026-10-01","d":"ADR-109: Feature-by-Folder Layout as an Enforced Convention","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Citations were re-anchored: the rubric section 5 text (ArchitectureEvaluationCriteria.md:211, :214), the v1.183.0 and v1.184.0 changelog entries…"},"1008":{"u":"/docs/adr/109-feature-by-folder-convention.html#related","d":"ADR-109: Feature-by-Folder Layout as an Enforced Convention","k":"Architecture Decision Records","t":"Related","x":"ADR-015 (the fitness-function tier this rule joins, and the public-API baseline that records FolderWidthTestsBase), ADR-016 (lockstep versioning: a layout change lands in every…"},"1009":{"u":"/docs/adr/110-rubric-v2-category-realignment.html","d":"ADR-110: Rubric Version 2, Category Realignment at 34","k":"Architecture Decision Records"},"1010":{"u":"/docs/adr/110-rubric-v2-category-realignment.html#status","d":"ADR-110: Rubric Version 2, Category Realignment at 34","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-04; section 16 scope corrected 2026-09-04: MMCA.ADC scores the category, recorded in ADR-111; content refreshed 2026-09-19: MMCA.Common now scores section 16,…"},"1011":{"u":"/docs/adr/110-rubric-v2-category-realignment.html#context","d":"ADR-110: Rubric Version 2, Category Realignment at 34","k":"Architecture Decision Records","t":"Context","x":"The 34-category Architecture Evaluation Criteria (Website/docs-src/governance/ArchitectureEvaluationCriteria.md) is the only basis on which the three scorecards are scored, and…"},"1012":{"u":"/docs/adr/110-rubric-v2-category-realignment.html#decision","d":"ADR-110: Rubric Version 2, Category Realignment at 34","k":"Architecture Decision Records","t":"Decision","x":"The rubric is versioned, and version 2 keeps 34 categories with stable numbering by replacing the two overlap-heavy categories in place and adding criteria to eleven others. 1.…"},"1013":{"u":"/docs/adr/110-rubric-v2-category-realignment.html#rationale","d":"ADR-110: Rubric Version 2, Category Realignment at 34","k":"Architecture Decision Records","t":"Rationale","x":"Replacing in place preserves every NN citation in the backlogs, every §NN in the ADRs and the scorecard history, the command document's Part A/B/C dispatch split, and the literal…"},"1014":{"u":"/docs/adr/110-rubric-v2-category-realignment.html#trade-offs","d":"ADR-110: Rubric Version 2, Category Realignment at 34","k":"Architecture Decision Records","t":"Trade-offs","x":"- The index trend line carries a denominator change. The scorecard headers and the backlog headers record both the old and the new fractions for the cycle where it happened. -…"},"1015":{"u":"/docs/adr/111-ai-session-scoring-governance.html","d":"ADR-111: AI Session Scoring Governance","k":"Architecture Decision Records"},"1016":{"u":"/docs/adr/111-ai-session-scoring-governance.html#status","d":"ADR-111: AI Session Scoring Governance","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-04). Extended by ADR-120 (2026-09-11): the rules here that belong to calling a model rather than to scoring a session (a bounded call, a versioned and hashed…"},"1017":{"u":"/docs/adr/111-ai-session-scoring-governance.html#context","d":"ADR-111: AI Session Scoring Governance","k":"Architecture Decision Records","t":"Context","x":"MMCA.ADC ships one product feature that calls a language model. An organizer, looking at the session selection dashboard for an event, can trigger an AI scoring pass that rates…"},"1018":{"u":"/docs/adr/111-ai-session-scoring-governance.html#decision","d":"ADR-111: AI Session Scoring Governance","k":"Architecture Decision Records","t":"Decision","x":"A product feature that calls a model is governed like any other production dependency: the call sits behind a port, the model and the prompt are versioned and persisted with…"},"1019":{"u":"/docs/adr/111-ai-session-scoring-governance.html#rationale","d":"ADR-111: AI Session Scoring Governance","k":"Architecture Decision Records","t":"Rationale","x":"- A version you do not persist is not a version. The prompt version is worth something only because it is on the row next to the score. An organizer looking at a number two…"},"1020":{"u":"/docs/adr/111-ai-session-scoring-governance.html#trade-offs","d":"ADR-111: AI Session Scoring Governance","k":"Architecture Decision Records","t":"Trade-offs","x":"- Recorded-response replay cannot see model drift. Every free-tier case answers from a response captured at a point in time, so the tier that runs on every deploy is blind to…"},"1021":{"u":"/docs/adr/111-ai-session-scoring-governance.html#revision-2026-10-01","d":"ADR-111: AI Session Scoring Governance","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The guardrails are now one module-owned composition rather than a single framework registration. AddConferenceAiGuardrails registers the framework's PiiRedactionGuardrail and…"},"1022":{"u":"/docs/adr/111-ai-session-scoring-governance.html#related","d":"ADR-111: AI Session Scoring Governance","k":"Architecture Decision Records","t":"Related","x":"ADR-110 (the rubric category this record answers: section 16, AI-Native Application Architecture, scored for MMCA.ADC because of this feature), ADR-061 (the Key Vault reference…"},"1023":{"u":"/docs/adr/112-catalog-owned-effective-pricing.html","d":"ADR-112: Catalog Owns Effective Pricing; Sales Snapshots It at Checkout","k":"Architecture Decision Records"},"1024":{"u":"/docs/adr/112-catalog-owned-effective-pricing.html#status","d":"ADR-112: Catalog Owns Effective Pricing; Sales Snapshots It at Checkout","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-07). Revised 2026-09-07: an order line freezes the list price and the promotion label beside the charged unit price, so an order answers what it saved without…"},"1025":{"u":"/docs/adr/112-catalog-owned-effective-pricing.html#context","d":"ADR-112: Catalog Owns Effective Pricing; Sales Snapshots It at Checkout","k":"Architecture Decision Records","t":"Context","x":"MMCA.Store sells product variants, and a variant's price is one Money on the variant row…"},"1026":{"u":"/docs/adr/112-catalog-owned-effective-pricing.html#decision","d":"ADR-112: Catalog Owns Effective Pricing; Sales Snapshots It at Checkout","k":"Architecture Decision Records","t":"Decision","x":"Promotional pricing is a variant-level owned value object, not an aggregate. VariantDiscount…"},"1027":{"u":"/docs/adr/112-catalog-owned-effective-pricing.html#rationale","d":"ADR-112: Catalog Owns Effective Pricing; Sales Snapshots It at Checkout","k":"Architecture Decision Records","t":"Rationale","x":"A discount that belongs to exactly one variant, is replaced rather than edited, and has no life of its own once the variant is gone is a value object by every test we apply…"},"1028":{"u":"/docs/adr/112-catalog-owned-effective-pricing.html#trade-offs","d":"ADR-112: Catalog Owns Effective Pricing; Sales Snapshots It at Checkout","k":"Architecture Decision Records","t":"Trade-offs","x":"- Cached reads lag a window boundary by up to 60 seconds. The three write commands implement ICacheInvalidating and their controllers evict the catalog:products output-cache tag,…"},"1029":{"u":"/docs/adr/112-catalog-owned-effective-pricing.html#revision-2026-10-01","d":"ADR-112: Catalog Owns Effective Pricing; Sales Snapshots It at Checkout","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Two statements no longer matched the code and are corrected in place; the decision itself is unchanged. The products output-cache policy now expires after 60 seconds rather than…"},"1030":{"u":"/docs/adr/112-catalog-owned-effective-pricing.html#related","d":"ADR-112: Catalog Owns Effective Pricing; Sales Snapshots It at Checkout","k":"Architecture Decision Records","t":"Related","x":"- ADR-005, ADR-006: each service owns its database, and cross-service copies are denormalized rather than joined. - ADR-007: [ServiceContract] purity, the rule that keeps the…"},"1031":{"u":"/docs/adr/113-postgresql-as-a-first-class-engine.html","d":"ADR-113: PostgreSQL as a First-Class Engine","k":"Architecture Decision Records"},"1032":{"u":"/docs/adr/113-postgresql-as-a-first-class-engine.html#status","d":"ADR-113: PostgreSQL as a First-Class Engine","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-09). Extends ADR-006 (one sealed context class per engine) and ADR-018 (engine as a routing decision) with a fourth engine. Revised 2026-10-01 (the Helpdesk…"},"1033":{"u":"/docs/adr/113-postgresql-as-a-first-class-engine.html#context","d":"ADR-113: PostgreSQL as a First-Class Engine","k":"Architecture Decision Records","t":"Context","x":"The framework has shipped three database engines since its first release: SQL Server, Azure Cosmos DB and SQLite. Every one of them is reached the same way, because ADR-006 fixed…"},"1034":{"u":"/docs/adr/113-postgresql-as-a-first-class-engine.html#decision","d":"ADR-113: PostgreSQL as a First-Class Engine","k":"Architecture Decision Records","t":"Decision","x":"PostgreSQL is added as a fourth first-class engine, mirroring the SQL Server footprint one for one, and differing from it only where the server forces a difference. 1. The engine…"},"1035":{"u":"/docs/adr/113-postgresql-as-a-first-class-engine.html#rationale","d":"ADR-113: PostgreSQL as a First-Class Engine","k":"Architecture Decision Records","t":"Rationale","x":"The shape follows from the alternatives that were weighed and declined: - A snakecase naming convention by default. Rejected. It is the PostgreSQL community norm, but it would…"},"1036":{"u":"/docs/adr/113-postgresql-as-a-first-class-engine.html#trade-offs","d":"ADR-113: PostgreSQL as a First-Class Engine","k":"Architecture Decision Records","t":"Trade-offs","x":"- Every consumer's package graph gains Npgsql.EntityFrameworkCore.PostgreSQL. It is referenced unconditionally from MMCA.Common.Infrastructure, exactly as the Cosmos, SQLite and…"},"1037":{"u":"/docs/adr/113-postgresql-as-a-first-class-engine.html#revision-2026-10-01","d":"ADR-113: PostgreSQL as a First-Class Engine","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The two rollout follow-ups are no longer plans. The Helpdesk canary ships as the advisory postgresql-canary job (MMCA.Helpdesk/.github/workflows/ci.yml:146-155,…"},"1038":{"u":"/docs/adr/113-postgresql-as-a-first-class-engine.html#related","d":"ADR-113: PostgreSQL as a First-Class Engine","k":"Architecture Decision Records","t":"Related","x":"ADR-006 (one sealed context per engine, one instance per database), ADR-018 (the engine axis this record adds a member to), ADR-035 (the application-managed RowVersion token…"},"1039":{"u":"/docs/adr/114-internal-commands-durable-job-queue.html","d":"ADR-114: Internal Commands, a Job Queue Built on the Outbox's Machinery","k":"Architecture Decision Records"},"1040":{"u":"/docs/adr/114-internal-commands-durable-job-queue.html#status","d":"ADR-114: Internal Commands, a Job Queue Built on the Outbox's Machinery","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-09). Rides the outbox machinery of ADR-003 without extending it. Revised 2026-09-19 (three corrections to match the code: a schedule outside a transaction…"},"1041":{"u":"/docs/adr/114-internal-commands-durable-job-queue.html#context","d":"ADR-114: Internal Commands, a Job Queue Built on the Outbox's Machinery","k":"Architecture Decision Records","t":"Context","x":"The framework has had two ways to move work off the request thread and neither of them is a job queue. The transactional outbox (ADR-003) carries events. OutboxMessage…"},"1042":{"u":"/docs/adr/114-internal-commands-durable-job-queue.html#decision","d":"ADR-114: Internal Commands, a Job Queue Built on the Outbox's Machinery","k":"Architecture Decision Records","t":"Decision","x":"Deferred work is an ordinary CQRS command, scheduled into a per-source InternalCommands table and executed later through the normal decorator pipeline. Five parts carry that. 1.…"},"1043":{"u":"/docs/adr/114-internal-commands-durable-job-queue.html#rationale","d":"ADR-114: Internal Commands, a Job Queue Built on the Outbox's Machinery","k":"Architecture Decision Records","t":"Rationale","x":"Four alternatives were weighed, and each one gave up the atomicity guarantee or duplicated a vocabulary the framework already owns: Hangfire. It is the obvious answer and it…"},"1044":{"u":"/docs/adr/114-internal-commands-durable-job-queue.html#trade-offs","d":"ADR-114: Internal Commands, a Job Queue Built on the Outbox's Machinery","k":"Architecture Decision Records","t":"Trade-offs","x":"Consumers take one migration per relational data source. The table is in the model of every relational source (SQL Server, PostgreSQL and SQLite after ADR-113), so a consumer…"},"1045":{"u":"/docs/adr/114-internal-commands-durable-job-queue.html#revision-2026-10-01","d":"ADR-114: Internal Commands, a Job Queue Built on the Outbox's Machinery","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Two statements no longer matched the code. First, a schedule made outside a transaction now saves…"},"1046":{"u":"/docs/adr/114-internal-commands-durable-job-queue.html#related","d":"ADR-114: Internal Commands, a Job Queue Built on the Outbox's Machinery","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (the claim-lease, backoff and dead-letter machinery this record borrows as an idiom), ADR-014 (the decorator chain a deferred command runs through unchanged), ADR-074…"},"1047":{"u":"/docs/adr/115-strongly-typed-identifiers-opt-in.html","d":"ADR-115: Strongly Typed Identifiers as an Opt-In Capability, Aliases Still the Default","k":"Architecture Decision Records"},"1048":{"u":"/docs/adr/115-strongly-typed-identifiers-opt-in.html#status","d":"ADR-115: Strongly Typed Identifiers as an Opt-In Capability, Aliases Still the Default","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-09). Revised 2026-09-19 (the alias count and the migration-surface census this record quotes were re-measured, the CheckIn parameter run was corrected from…"},"1049":{"u":"/docs/adr/115-strongly-typed-identifiers-opt-in.html#context","d":"ADR-115: Strongly Typed Identifiers as an Opt-In Capability, Aliases Still the Default","k":"Architecture Decision Records","t":"Context","x":"ADR-048 chose primitive identifier aliases over wrapper structs. ADR-085 re-opened that choice on 2026-08-18, priced the migration in numbers (44 aliases, 43 of them int, 3,192…"},"1050":{"u":"/docs/adr/115-strongly-typed-identifiers-opt-in.html#decision","d":"ADR-115: Strongly Typed Identifiers as an Opt-In Capability, Aliases Still the Default","k":"Architecture Decision Records","t":"Decision","x":"The framework ships strongly typed identifiers as an opt-in capability. The primitive aliases remain the default identifier model, no existing entity, consumer or test migrates,…"},"1051":{"u":"/docs/adr/115-strongly-typed-identifiers-opt-in.html#rationale","d":"ADR-115: Strongly Typed Identifiers as an Opt-In Capability, Aliases Still the Default","k":"Architecture Decision Records","t":"Rationale","x":"- The gap was the plumbing, not the type. A readonly record struct wrapping an int is four lines any team can write. What stops teams is the six boundaries around it: EF mapping…"},"1052":{"u":"/docs/adr/115-strongly-typed-identifiers-opt-in.html#trade-offs","d":"ADR-115: Strongly Typed Identifiers as an Opt-In Capability, Aliases Still the Default","k":"Architecture Decision Records","t":"Trade-offs","x":"- Two identifier styles can now coexist in one codebase, and nothing prevents that. A repo can wrap some identifiers and leave others primitive, and the reader cannot tell from…"},"1053":{"u":"/docs/adr/115-strongly-typed-identifiers-opt-in.html#related","d":"ADR-115: Strongly Typed Identifiers as an Opt-In Capability, Aliases Still the Default","k":"Architecture Decision Records","t":"Related","x":"ADR-048 (the primitive alias decision this record leaves in force), ADR-085 (the priced deferral and its three revisit triggers, none of which is the trigger here), ADR-104 (the…"},"1054":{"u":"/docs/adr/115-strongly-typed-identifiers-opt-in.html#revision-2026-09-19","d":"ADR-115: Strongly Typed Identifiers as an Opt-In Capability, Aliases Still the Default","k":"Architecture Decision Records","t":"Revision (2026-09-19)","x":"The decision is unchanged: the framework still ships the capability, the aliases are still the default, and adoption is still zero. Four facts this record borrowed were…"},"1055":{"u":"/docs/adr/115-strongly-typed-identifiers-opt-in.html#revision-2026-10-01","d":"ADR-115: Strongly Typed Identifiers as an Opt-In Capability, Aliases Still the Default","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"The decision is unchanged: the framework still ships the capability, the aliases are still the default, and adoption is still zero. Three statements were corrected against source…"},"1056":{"u":"/docs/adr/116-identity-completions-opt-in.html","d":"ADR-116: Identity Completions Ship as Opt-In Base Classes, Not as Framework Features","k":"Architecture Decision Records"},"1057":{"u":"/docs/adr/116-identity-completions-opt-in.html#status","d":"ADR-116: Identity Completions Ship as Opt-In Base Classes, Not as Framework Features","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-09; revised 2026-09-19: item 10 now scopes the \"no @page directive\" claim to what this decision ships, because MMCA.Common.UI itself ships 13 of them in the…"},"1058":{"u":"/docs/adr/116-identity-completions-opt-in.html#context","d":"ADR-116: Identity Completions Ship as Opt-In Base Classes, Not as Framework Features","k":"Architecture Decision Records","t":"Context","x":"The framework already owns the hard, uniform parts of identity. AuthenticationServiceBase carries login, registration, refresh-token rotation with reuse detection and revocation…"},"1059":{"u":"/docs/adr/116-identity-completions-opt-in.html#decision","d":"ADR-116: Identity Completions Ship as Opt-In Base Classes, Not as Framework Features","k":"Architecture Decision Records","t":"Decision","x":"The four identity completions ship as opt-in extension points: contracts and abstract bases in Application, implementations in Infrastructure behind their own Add calls, and…"},"1060":{"u":"/docs/adr/116-identity-completions-opt-in.html#rationale","d":"ADR-116: Identity Completions Ship as Opt-In Base Classes, Not as Framework Features","k":"Architecture Decision Records","t":"Rationale","x":"Six shapes were considered for these four capabilities, and each rejection is what produced the opt-in posture above: - Ship a framework User entity with two-factor and…"},"1061":{"u":"/docs/adr/116-identity-completions-opt-in.html#trade-offs","d":"ADR-116: Identity Completions Ship as Opt-In Base Classes, Not as Framework Features","k":"Architecture Decision Records","t":"Trade-offs","x":"- A consumer that adopts nothing sees no behaviour change and no new configuration. The only edit that reaches an unadopted consumer is the widened AuthenticationServiceBase…"},"1062":{"u":"/docs/adr/116-identity-completions-opt-in.html#revision-2026-10-01","d":"ADR-116: Identity Completions Ship as Opt-In Base Classes, Not as Framework Features","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Item 10 said no confirmation page ships in MMCA.Common.UI. One now does: ConfirmEmail.razor carries @page \"/confirm-email\" and [AllowAnonymous]…"},"1063":{"u":"/docs/adr/116-identity-completions-opt-in.html#related","d":"ADR-116: Identity Completions Ship as Opt-In Base Classes, Not as Framework Features","k":"Architecture Decision Records","t":"Related","x":"ADR-020 (the compiled role-to-permission registry stored grants layer over), ADR-091 (the token-service design email confirmation mirrors), ADR-032 (the narrow-contract precedent…"},"1064":{"u":"/docs/adr/117-apphost-integration-test-base.html","d":"ADR-117: AppHost Integration Testing as a Shipped Package","k":"Architecture Decision Records"},"1065":{"u":"/docs/adr/117-apphost-integration-test-base.html#status","d":"ADR-117: AppHost Integration Testing as a Shipped Package","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-09). Adds the AppHost test tier ADR-098 left out, as a package rather than a per-repo copy. Revised 2026-09-11: both consumer tiers now subclass the package…"},"1066":{"u":"/docs/adr/117-apphost-integration-test-base.html#context","d":"ADR-117: AppHost Integration Testing as a Shipped Package","k":"Architecture Decision Records","t":"Context","x":"The AppHost is the only file that states how a whole stack fits together: which project resources exist, which database each one owns, which broker they share, where JWKS…"},"1067":{"u":"/docs/adr/117-apphost-integration-test-base.html#decision","d":"ADR-117: AppHost Integration Testing as a Shipped Package","k":"Architecture Decision Records","t":"Decision","x":"Ship the AppHost test tier as a package, MMCA.Common.Testing.Aspire, so a consumer's smoke tier is a subclass and a set of assertions rather than a copied fixture. Make the…"},"1068":{"u":"/docs/adr/117-apphost-integration-test-base.html#rationale","d":"ADR-117: AppHost Integration Testing as a Shipped Package","k":"Architecture Decision Records","t":"Rationale","x":"Six shapes were weighed, and each rejection is a property the package keeps: - Leave it as a per-repo copy. Rejected: that is what produced roughly a hundred lines of budget and…"},"1069":{"u":"/docs/adr/117-apphost-integration-test-base.html#trade-offs","d":"ADR-117: AppHost Integration Testing as a Shipped Package","k":"Architecture Decision Records","t":"Trade-offs","x":"- A consumer's smoke tier is a subclass. MMCA.ADC.AppHost.SmokeTests is two files. The fixture is AdcAppHostFixture : AppHostFixtureBase…"},"1070":{"u":"/docs/adr/117-apphost-integration-test-base.html#revision-2026-10-01","d":"ADR-117: AppHost Integration Testing as a Shipped Package","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Decision 9 is corrected: it showed Assert.SkipWhen(!Fixture.IsAvailable, Fixture.SkipReason!) as the consumer's skip, a form that throws…"},"1071":{"u":"/docs/adr/117-apphost-integration-test-base.html#related","d":"ADR-117: AppHost Integration Testing as a Shipped Package","k":"Architecture Decision Records","t":"Related","x":"ADR-098 (the orchestration posture this tier tests without changing), ADR-058 (the shipped-test-tier-as-a-package pattern this record follows), ADR-016 (the lockstep release this…"},"1072":{"u":"/docs/adr/118-message-transport-library-policy.html","d":"ADR-118: Message Transport Library Policy (MassTransit v8 Pin and Exit Strategy)","k":"Architecture Decision Records"},"1073":{"u":"/docs/adr/118-message-transport-library-policy.html#status","d":"ADR-118: Message Transport Library Policy (MassTransit v8 Pin and Exit Strategy)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-11). Promotes the MassTransit clause inside ADR-016 into a decision of its own: ADR-016 owns the release policy that the pin is enforced under, this record owns…"},"1074":{"u":"/docs/adr/118-message-transport-library-policy.html#context","d":"ADR-118: Message Transport Library Policy (MassTransit v8 Pin and Exit Strategy)","k":"Architecture Decision Records","t":"Context","x":"MassTransit is the only message-broker library in this workspace, and it is pinned to 8.5.11 across all three of its packages (MMCA.Common/Directory.Packages.props:128-130, the…"},"1075":{"u":"/docs/adr/118-message-transport-library-policy.html#decision","d":"ADR-118: Message Transport Library Policy (MassTransit v8 Pin and Exit Strategy)","k":"Architecture Decision Records","t":"Decision","x":"Stay on MassTransit v8 behind IMessageBus, and keep the outbox and inbox custom precisely because that is what keeps a transport swap cheap. Record the exit triggers now, and the…"},"1076":{"u":"/docs/adr/118-message-transport-library-policy.html#rationale","d":"ADR-118: Message Transport Library Policy (MassTransit v8 Pin and Exit Strategy)","k":"Architecture Decision Records","t":"Rationale","x":"- The pin is enforceable, so it is honest. A comment beside a version number is a hope; a fitness function that parses Directory.Packages.props is the reason the v9 crash was…"},"1077":{"u":"/docs/adr/118-message-transport-library-policy.html#trade-offs","d":"ADR-118: Message Transport Library Policy (MassTransit v8 Pin and Exit Strategy)","k":"Architecture Decision Records","t":"Trade-offs","x":"- The workspace sits on a library version with a finite support horizon. Nothing forces a move today, and the exit triggers above are what convert \"we should look at this…"},"1078":{"u":"/docs/adr/118-message-transport-library-policy.html#revision-2026-10-01","d":"ADR-118: Message Transport Library Policy (MassTransit v8 Pin and Exit Strategy)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision, trigger, replacement order or rationale changed. Facts restated from source: all five pinned MassTransit entries are at the v8 patch 8.5.11…"},"1079":{"u":"/docs/adr/118-message-transport-library-policy.html#related","d":"ADR-118: Message Transport Library Policy (MassTransit v8 Pin and Exit Strategy)","k":"Architecture Decision Records","t":"Related","x":"ADR-016 (the lockstep release policy this pin is enforced under; its 2026-08-28 amendment first sketched exit options, and this record takes ownership of that list. ADR-016's…"},"1080":{"u":"/docs/adr/119-restrict-delete-by-default.html","d":"ADR-119: Delete Behavior Is an Explicit Business Rule (Restrict by Default)","k":"Architecture Decision Records"},"1081":{"u":"/docs/adr/119-restrict-delete-by-default.html#status","d":"ADR-119: Delete Behavior Is an Explicit Business Rule (Restrict by Default)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-11). Inverts EF Core's cascading default for every relationship in every repo built on this framework, and stamps each foreign key with where its delete…"},"1082":{"u":"/docs/adr/119-restrict-delete-by-default.html#context","d":"ADR-119: Delete Behavior Is an Explicit Business Rule (Restrict by Default)","k":"Architecture Decision Records","t":"Context","x":"EF Core picks a delete behavior for you. A required relationship gets Cascade, an optional one gets ClientSetNull, and neither choice appears anywhere a reviewer reads. The…"},"1083":{"u":"/docs/adr/119-restrict-delete-by-default.html#decision","d":"ADR-119: Delete Behavior Is an Explicit Business Rule (Restrict by Default)","k":"Architecture Decision Records","t":"Decision","x":"Restrict is the default delete behavior for every relationship nobody configured, a cascade is an opt-in with a stated reason, and the finished model records which of the two…"},"1084":{"u":"/docs/adr/119-restrict-delete-by-default.html#rationale","d":"ADR-119: Delete Behavior Is an Explicit Business Rule (Restrict by Default)","k":"Architecture Decision Records","t":"Rationale","x":"- The safe default is the one that fails loudly. Restrict turns an unintended parent delete into an error at the point of the delete, where it can be read and fixed. Cascade…"},"1085":{"u":"/docs/adr/119-restrict-delete-by-default.html#trade-offs","d":"ADR-119: Delete Behavior Is an Explicit Business Rule (Restrict by Default)","k":"Architecture Decision Records","t":"Trade-offs","x":"- One migration per service database, authored and merged on 2026-09-11. The FK constraints change, so each database needed a migration: four in ADC (Conference, Identity,…"},"1086":{"u":"/docs/adr/119-restrict-delete-by-default.html#revision-2026-10-01","d":"ADR-119: Delete Behavior Is an Explicit Business Rule (Restrict by Default)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. The Context list of genuine hard deletes is completed: it now also names the framework's outbox cleanup…"},"1087":{"u":"/docs/adr/119-restrict-delete-by-default.html#related","d":"ADR-119: Delete Behavior Is an Explicit Business Rule (Restrict by Default)","k":"Architecture Decision Records","t":"Related","x":"ADR-006 (one context class per engine over one abstract base, which is what makes this a single registration), ADR-005 (the soft-delete posture that keeps cascades dormant at…"},"1088":{"u":"/docs/adr/120-governed-chat-client-boundary.html","d":"ADR-120: Governed Language-Model Boundary (MMCA.Common.AI)","k":"Architecture Decision Records"},"1089":{"u":"/docs/adr/120-governed-chat-client-boundary.html#status","d":"ADR-120: Governed Language-Model Boundary (MMCA.Common.AI)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-11). Extends ADR-111, which keeps every scoring-specific rule it states: this record moves the parts that are not about session scoring into the framework, as…"},"1090":{"u":"/docs/adr/120-governed-chat-client-boundary.html#context","d":"ADR-120: Governed Language-Model Boundary (MMCA.Common.AI)","k":"Architecture Decision Records","t":"Context","x":"Rubric section 16, AI-Native Application Architecture, asks one question of a product feature that calls a language model: is that dependency governed like any other external…"},"1091":{"u":"/docs/adr/120-governed-chat-client-boundary.html#decision","d":"ADR-120: Governed Language-Model Boundary (MMCA.Common.AI)","k":"Architecture Decision Records","t":"Decision","x":"The framework owns the language-model boundary as one optional package, MMCA.Common.AI, that names no vendor. A provider arrives as an adapter package contributing one factory,…"},"1092":{"u":"/docs/adr/120-governed-chat-client-boundary.html#rationale","d":"ADR-120: Governed Language-Model Boundary (MMCA.Common.AI)","k":"Architecture Decision Records","t":"Rationale","x":"- These rules belong to the call, not to the feature. An output ceiling, a timeout, a tool gate and a token counter are true of every model call anybody will ever write here.…"},"1093":{"u":"/docs/adr/120-governed-chat-client-boundary.html#trade-offs","d":"ADR-120: Governed Language-Model Boundary (MMCA.Common.AI)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Off by absence puts a null on the consumer. Because nothing is registered when Ai:Enabled is false, a feature resolves the client with GetService and holds a nullable…"},"1094":{"u":"/docs/adr/120-governed-chat-client-boundary.html#consequences","d":"ADR-120: Governed Language-Model Boundary (MMCA.Common.AI)","k":"Architecture Decision Records","t":"Consequences","x":"- ADC's SessionScoringService runs on IChatClient (SessionScoringService.cs:46-49). The port IAiScoringService stays, PromptVersion stays and keeps being persisted with every…"},"1095":{"u":"/docs/adr/120-governed-chat-client-boundary.html#revision-2026-10-01","d":"ADR-120: Governed Language-Model Boundary (MMCA.Common.AI)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed; the current-state sections now match the code. ADC adopted the package fully: the host calls AddAnthropicAiProvider()…"},"1096":{"u":"/docs/adr/120-governed-chat-client-boundary.html#related","d":"ADR-120: Governed Language-Model Boundary (MMCA.Common.AI)","k":"Architecture Decision Records","t":"Related","x":"ADR-111 (the record this one extends: every scoring-specific rule, the prompt-change protocol, the golden and live evaluation tiers, the input and output guardrails and the…"},"1097":{"u":"/docs/adr/121-ephemeral-in-process-work-queue.html","d":"ADR-121: Ephemeral In-Process Work Queue (Bounded Channel plus Hosted Drain)","k":"Architecture Decision Records"},"1098":{"u":"/docs/adr/121-ephemeral-in-process-work-queue.html#status","d":"ADR-121: Ephemeral In-Process Work Queue (Bounded Channel plus Hosted Drain)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-11). Supersedes ADR-052."},"1099":{"u":"/docs/adr/121-ephemeral-in-process-work-queue.html#context","d":"ADR-121: Ephemeral In-Process Work Queue (Bounded Channel plus Hosted Drain)","k":"Architecture Decision Records","t":"Context","x":"ADR-052 ran two different kinds of work through one mechanism: ephemeral broadcasts that must not put a gRPC round trip on the hot path of a vote, and an AI scoring pass that…"},"1100":{"u":"/docs/adr/121-ephemeral-in-process-work-queue.html#decision","d":"ADR-121: Ephemeral In-Process Work Queue (Bounded Channel plus Hosted Drain)","k":"Architecture Decision Records","t":"Decision","x":"Ephemeral in-process work runs as a bounded channel plus a single-reader hosted drain. Nothing starts an untracked Task from a request, and nothing that must run lands here. - A…"},"1101":{"u":"/docs/adr/121-ephemeral-in-process-work-queue.html#rationale","d":"ADR-121: Ephemeral In-Process Work Queue (Bounded Channel plus Hosted Drain)","k":"Architecture Decision Records","t":"Rationale","x":"- The host lifetime is the point. A BackgroundService is the only in-process shape the host can cancel and await. Everything else in the decision follows from wanting that, and a…"},"1102":{"u":"/docs/adr/121-ephemeral-in-process-work-queue.html#trade-offs","d":"ADR-121: Ephemeral In-Process Work Queue (Bounded Channel plus Hosted Drain)","k":"Architecture Decision Records","t":"Trade-offs","x":"- In-process only. The queue does not survive a restart and does not span replicas. Accepted because every job left here is ephemeral by definition. Work that must survive a…"},"1103":{"u":"/docs/adr/121-ephemeral-in-process-work-queue.html#revision-2026-10-01","d":"ADR-121: Ephemeral In-Process Work Queue (Bounded Channel plus Hosted Drain)","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Two Context and Related statements are corrected: the scoring trigger no longer answers 202 Accepted unconditionally, because a…"},"1104":{"u":"/docs/adr/121-ephemeral-in-process-work-queue.html#related","d":"ADR-121: Ephemeral In-Process Work Queue (Bounded Channel plus Hosted Drain)","k":"Architecture Decision Records","t":"Related","x":"ADR-114 (the durable, leased, retrying queue that owns expensive and must-run work), ADR-108 (the cross-replica claim that replaced this record's per-replica dedup), ADR-039…"},"1105":{"u":"/docs/adr/122-dev-only-relaxations-fail-closed.html","d":"ADR-122: Dev-Only Relaxations Are Environment-Gated and Fail Closed","k":"Architecture Decision Records"},"1106":{"u":"/docs/adr/122-dev-only-relaxations-fail-closed.html#status","d":"ADR-122: Dev-Only Relaxations Are Environment-Gated and Fail Closed","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-11)."},"1107":{"u":"/docs/adr/122-dev-only-relaxations-fail-closed.html#context","d":"ADR-122: Dev-Only Relaxations Are Environment-Gated and Fail Closed","k":"Architecture Decision Records","t":"Context","x":"Several capabilities are useful locally and dangerous in a deployed environment: EF Core rendering parameter values into logs and exception messages, an SMTP session that skips…"},"1108":{"u":"/docs/adr/122-dev-only-relaxations-fail-closed.html#decision","d":"ADR-122: Dev-Only Relaxations Are Environment-Gated and Fail Closed","k":"Architecture Decision Records","t":"Decision","x":"A relaxation applies only when the environment is positively identified as Development. An unknown, absent, or unparseable environment yields the production posture. Three…"},"1109":{"u":"/docs/adr/122-dev-only-relaxations-fail-closed.html#rationale","d":"ADR-122: Dev-Only Relaxations Are Environment-Gated and Fail Closed","k":"Architecture Decision Records","t":"Rationale","x":"- Unknown is not safe. The failure this prevents is not a developer flipping a flag on purpose, it is a flag arriving somewhere nobody looked. Treating an absent environment as…"},"1110":{"u":"/docs/adr/122-dev-only-relaxations-fail-closed.html#trade-offs","d":"ADR-122: Dev-Only Relaxations Are Environment-Gated and Fail Closed","k":"Architecture Decision Records","t":"Trade-offs","x":"- ASPNETCOREENVIRONMENT is the trust root. A host that misreports itself as Development gets every relaxation at once. The rule concentrates the risk on one value instead of…"},"1111":{"u":"/docs/adr/122-dev-only-relaxations-fail-closed.html#revision-2026-10-01","d":"ADR-122: Dev-Only Relaxations Are Environment-Gated and Fail Closed","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Citations were re-anchored to the current source: the AI gate (DependencyInjection.cs:262-266, remarks :257-260), the RequireHttpsMetadata…"},"1112":{"u":"/docs/adr/122-dev-only-relaxations-fail-closed.html#related","d":"ADR-122: Dev-Only Relaxations Are Environment-Gated and Fail Closed","k":"Architecture Decision Records","t":"Related","x":"ADR-070 (binds and validates settings at startup; this record governs when a validated setting may be honored), ADR-023 (the HSTS and CSP posture relaxed here), ADR-082 (the two…"},"1113":{"u":"/docs/adr/123-speaker-session-assets.html","d":"ADR-123: Speaker-Published Session Materials","k":"Architecture Decision Records"},"1114":{"u":"/docs/adr/123-speaker-session-assets.html#status","d":"ADR-123: Speaker-Published Session Materials","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-12). Extends ADR-045 from images to documents: the framework gains a document content sniffer, a blob-name sanitizer and stored response headers, and ADC gains…"},"1115":{"u":"/docs/adr/123-speaker-session-assets.html#context","d":"ADR-123: Speaker-Published Session Materials","k":"Architecture Decision Records","t":"Context","x":"A speaker finishes a talk and forty people want the deck. Until now ADC's only answer was Session.ResourceLinks, a free-text field imported from Sessionize: the speaker types…"},"1116":{"u":"/docs/adr/123-speaker-session-assets.html#decision","d":"ADR-123: Speaker-Published Session Materials","k":"Architecture Decision Records","t":"Decision","x":"Session materials are a separate Conference aggregate, written by the session's own speakers or by an organizer, stored in a public-read container under an unguessable blob name,…"},"1117":{"u":"/docs/adr/123-speaker-session-assets.html#rationale","d":"ADR-123: Speaker-Published Session Materials","k":"Architecture Decision Records","t":"Rationale","x":"Four alternatives were weighed. A child collection on Session. The obvious DDD answer, and wrong for this entity. Session is imported from Sessionize and re-imported on every…"},"1118":{"u":"/docs/adr/123-speaker-session-assets.html#trade-offs","d":"ADR-123: Speaker-Published Session Materials","k":"Architecture Decision Records","t":"Trade-offs","x":"- The container is public-read, so a URL is a credential. Anyone holding a blob URL can fetch it, forever, with no session and no referrer check. That is accepted for the same…"},"1119":{"u":"/docs/adr/123-speaker-session-assets.html#revision-2026-10-01","d":"ADR-123: Speaker-Published Session Materials","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"Two parts of the decision changed and the rest of the record was re-anchored. The options-carrying IFileStorageService.UploadAsync overload is no longer a default interface…"},"1120":{"u":"/docs/adr/123-speaker-session-assets.html#related","d":"ADR-123: Speaker-Published Session Materials","k":"Architecture Decision Records","t":"Related","x":"ADR-045 (the storage abstraction, the image path this record is the document sibling of, and the avatar-only scope statement this supersedes), ADR-114 (the durable queue the blob…"},"1121":{"u":"/docs/adr/124-blazor-circuit-ceiling-ui-edge.html","d":"ADR-124: The Server-Rendered UI Host Is Its Own Hardened Edge","k":"Architecture Decision Records"},"1122":{"u":"/docs/adr/124-blazor-circuit-ceiling-ui-edge.html#status","d":"ADR-124: The Server-Rendered UI Host Is Its Own Hardened Edge","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-19). Revised 2026-09-25 (the hardening kit is one framework copy in MMCA.Common.UI.Web/Hardening/, first shipped in v1.206.0, which both UI hosts consume; the…"},"1123":{"u":"/docs/adr/124-blazor-circuit-ceiling-ui-edge.html#context","d":"ADR-124: The Server-Rendered UI Host Is Its Own Hardened Edge","k":"Architecture Decision Records","t":"Context","x":"ADR-019 layers rate limiting, and ADR-088 makes the Gateway the layer that carries the outermost one. Both records describe traffic that arrives through the Gateway. The…"},"1124":{"u":"/docs/adr/124-blazor-circuit-ceiling-ui-edge.html#decision","d":"ADR-124: The Server-Rendered UI Host Is Its Own Hardened Edge","k":"Architecture Decision Records","t":"Decision","x":"The server-rendered UI host defends itself, in three layers bound from two configuration sections the host owns, in both ADC and Store, using one framework kit. - A ceiling on…"},"1125":{"u":"/docs/adr/124-blazor-circuit-ceiling-ui-edge.html#rationale","d":"ADR-124: The Server-Rendered UI Host Is Its Own Hardened Edge","k":"Architecture Decision Records","t":"Rationale","x":"- A separate origin is a separate edge. The Gateway cannot defend a hostname it never receives a request for, so the choice was between routing the UI through the Gateway and…"},"1126":{"u":"/docs/adr/124-blazor-circuit-ceiling-ui-edge.html#trade-offs","d":"ADR-124: The Server-Rendered UI Host Is Its Own Hardened Edge","k":"Architecture Decision Records","t":"Trade-offs","x":"- Both ceilings are per replica, in memory. The effective allowance is the configured number multiplied by the replica count (two at most for ADC's UI today), so two replicas…"},"1127":{"u":"/docs/adr/124-blazor-circuit-ceiling-ui-edge.html#revision-2026-09-25-one-framework-kit-one-forwarded-header-posture","d":"ADR-124: The Server-Rendered UI Host Is Its Own Hardened Edge","k":"Architecture Decision Records","t":"Revision (2026-09-25): one framework kit, one forwarded-header posture","x":"The hardening kit this record decides now lives once, in MMCA.Common.UI.Web/Hardening/, first shipped in v1.206.0 (MMCA.Common/CHANGELOG.md:270-282). ADC and Store each import it…"},"1128":{"u":"/docs/adr/124-blazor-circuit-ceiling-ui-edge.html#revision-2026-10-01-the-circuit-transport-and-the-circuit-count","d":"ADR-124: The Server-Rendered UI Host Is Its Own Hardened Edge","k":"Architecture Decision Records","t":"Revision (2026-10-01): the circuit transport and the circuit count","x":"Two behaviours of the kit changed in v1.213.0 (MMCA.Common/CHANGELOG.md:82,145,148), and the Decision above now states both. First, the chained limiter no longer applies the…"},"1129":{"u":"/docs/adr/124-blazor-circuit-ceiling-ui-edge.html#related","d":"ADR-124: The Server-Rendered UI Host Is Its Own Hardened Edge","k":"Architecture Decision Records","t":"Related","x":"ADR-019 (the layered rate-limiting posture this adds a layer to), ADR-088 (the Gateway edge whose limiter this host is outside of, and which the registration comments name…"},"1130":{"u":"/docs/adr/125-parameterized-sql-only.html","d":"ADR-125: Parameterized SQL Only, Enforced by a Fitness Gate","k":"Architecture Decision Records"},"1131":{"u":"/docs/adr/125-parameterized-sql-only.html#status","d":"ADR-125: Parameterized SQL Only, Enforced by a Fitness Gate","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-19)."},"1132":{"u":"/docs/adr/125-parameterized-sql-only.html#context","d":"ADR-125: Parameterized SQL Only, Enforced by a Fitness Gate","k":"Architecture Decision Records","t":"Context","x":"The supported way to read data is the repository plus specification contract (ADR-055), and LINQ answers almost everything. It does not answer a window function, a recursive CTE…"},"1133":{"u":"/docs/adr/125-parameterized-sql-only.html#decision","d":"ADR-125: Parameterized SQL Only, Enforced by a Fitness Gate","k":"Architecture Decision Records","t":"Decision","x":"Give raw SQL exactly one door whose signature makes the unsafe call uncompilable, and ban the four raw EF members in module code with a fitness test rather than a guideline. -…"},"1134":{"u":"/docs/adr/125-parameterized-sql-only.html#rationale","d":"ADR-125: Parameterized SQL Only, Enforced by a Fitness Gate","k":"Architecture Decision Records","t":"Rationale","x":"- A signature outranks a guideline. Both halves of this decision aim at the same thing from different directions: the contract removes the unsafe call from the type system, and…"},"1135":{"u":"/docs/adr/125-parameterized-sql-only.html#trade-offs","d":"ADR-125: Parameterized SQL Only, Enforced by a Fitness Gate","k":"Architecture Decision Records","t":"Trade-offs","x":"- FormattableString blocks the accident, not the intent. FormattableStringFactory.Create builds a FormattableString out of an already-concatenated string with no interpolation…"},"1136":{"u":"/docs/adr/125-parameterized-sql-only.html#revision-2026-10-01","d":"ADR-125: Parameterized SQL Only, Enforced by a Fitness Gate","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Citations refreshed: the CHANGELOG anchors (MMCA.Common/CHANGELOG.md:1038, :1108-1117, :1118-1121, :1153-1159), the executor registration…"},"1137":{"u":"/docs/adr/125-parameterized-sql-only.html#related","d":"ADR-125: Parameterized SQL Only, Enforced by a Fitness Gate","k":"Architecture Decision Records","t":"Related","x":"ADR-055 (the repository plus specification path this escape hatch sits beside, and the reason the hatch stays narrow), ADR-015 (the fitness-function style this rule is written…"},"1138":{"u":"/docs/adr/126-event-sourcing-not-adopted.html","d":"ADR-126: Event Sourcing Is Not Adopted","k":"Architecture Decision Records"},"1139":{"u":"/docs/adr/126-event-sourcing-not-adopted.html#status","d":"ADR-126: Event Sourcing Is Not Adopted","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-22) as a documented rejection. Nothing ships with this record: no event store, no stream table, no projection host, no new package. What ships is the reason…"},"1140":{"u":"/docs/adr/126-event-sourcing-not-adopted.html#context","d":"ADR-126: Event Sourcing Is Not Adopted","k":"Architecture Decision Records","t":"Context","x":"Event sourcing keeps an append-only log of the facts that happened to an aggregate and treats that log as the system of record. Current state becomes a fold over the log, a…"},"1141":{"u":"/docs/adr/126-event-sourcing-not-adopted.html#decision","d":"ADR-126: Event Sourcing Is Not Adopted","k":"Architecture Decision Records","t":"Decision","x":"Do not adopt event sourcing. Aggregates stay current-state EF rows that raise domain events for notification, carry audit fields, and soft-delete. No repository gains an event…"},"1142":{"u":"/docs/adr/126-event-sourcing-not-adopted.html#rationale","d":"ADR-126: Event Sourcing Is Not Adopted","k":"Architecture Decision Records","t":"Rationale","x":"- No workload asks the question event sourcing answers. Neither ADC nor MMCA.Store has an aggregate that needs replayable per-aggregate history or a \"state as of\" query.…"},"1143":{"u":"/docs/adr/126-event-sourcing-not-adopted.html#trade-offs","d":"ADR-126: Event Sourcing Is Not Adopted","k":"Architecture Decision Records","t":"Trade-offs","x":"- A late adoption costs more than an early one. The module that eventually needs a stream converts an aggregate that already has production data, deployed migrations and reads…"},"1144":{"u":"/docs/adr/126-event-sourcing-not-adopted.html#alternatives-rejected","d":"ADR-126: Event Sourcing Is Not Adopted","k":"Architecture Decision Records","t":"Alternatives rejected","x":"- Marten on PostgreSQL, weighed 2026-09-22 and rejected. Marten is the credible .NET event store and the specific option this record weighed. It was dropped on two grounds rather…"},"1145":{"u":"/docs/adr/126-event-sourcing-not-adopted.html#when-to-revisit","d":"ADR-126: Event Sourcing Is Not Adopted","k":"Architecture Decision Records","t":"When to revisit","x":"Revisit when an aggregate acquires a business requirement for full replayable history or temporal queries: a financial ledger whose every movement must be reconstructible, or a…"},"1146":{"u":"/docs/adr/126-event-sourcing-not-adopted.html#revision-2026-10-01","d":"ADR-126: Event Sourcing Is Not Adopted","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Two citations were re-anchored: the soft-delete global query filter now points at ApplySoftDeleteFilters…"},"1147":{"u":"/docs/adr/126-event-sourcing-not-adopted.html#related","d":"ADR-126: Event Sourcing Is Not Adopted","k":"Architecture Decision Records","t":"Related","x":"ADR-003 (at-least-once delivery of domain events, the mechanism a per-aggregate event log would duplicate rather than replace), ADR-021 (the consume-edge inbox that makes…"},"1148":{"u":"/docs/adr/127-actor-model-not-adopted.html","d":"ADR-127: The Actor Model Is Not Adopted","k":"Architecture Decision Records"},"1149":{"u":"/docs/adr/127-actor-model-not-adopted.html#status","d":"ADR-127: The Actor Model Is Not Adopted","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-09-22) as a documented rejection. Nothing ships with this record: no grain interface, no silo, no placement configuration, no new package. What ships is the reason…"},"1150":{"u":"/docs/adr/127-actor-model-not-adopted.html#context","d":"ADR-127: The Actor Model Is Not Adopted","k":"Architecture Decision Records","t":"Context","x":"The actor model gives every logical entity its own single-threaded unit of execution holding its state in memory and serializes all messages to that entity through it; a…"},"1151":{"u":"/docs/adr/127-actor-model-not-adopted.html#decision","d":"ADR-127: The Actor Model Is Not Adopted","k":"Architecture Decision Records","t":"Decision","x":"Do not adopt the actor model, and do not introduce an actor runtime as a hosting layer. Per-entity state stays in the owning module's database behind optimistic concurrency, read…"},"1152":{"u":"/docs/adr/127-actor-model-not-adopted.html#rationale","d":"ADR-127: The Actor Model Is Not Adopted","k":"Architecture Decision Records","t":"Rationale","x":"- No workload has the shape. Actors earn their cost on high-cardinality per-entity in-memory state with single-writer semantics, and nothing here has all three: entity counts are…"},"1153":{"u":"/docs/adr/127-actor-model-not-adopted.html#trade-offs","d":"ADR-127: The Actor Model Is Not Adopted","k":"Architecture Decision Records","t":"Trade-offs","x":"- A genuinely actor-shaped workload will arrive without groundwork, and the first adoption pays the learning cost under whatever deadline produced the requirement. - Some…"},"1154":{"u":"/docs/adr/127-actor-model-not-adopted.html#alternatives-rejected","d":"ADR-127: The Actor Model Is Not Adopted","k":"Architecture Decision Records","t":"Alternatives rejected","x":"- Microsoft Orleans hosted under Aspire, weighed 2026-09-22 and rejected. Orleans is the .NET virtual-actor runtime and the option this record weighed. Aspire already composes…"},"1155":{"u":"/docs/adr/127-actor-model-not-adopted.html#when-to-revisit","d":"ADR-127: The Actor Model Is Not Adopted","k":"Architecture Decision Records","t":"When to revisit","x":"Revisit when a real-time per-entity state workload appears that optimistic concurrency plus Redis cannot carry: an entity mutated by enough concurrent callers that the…"},"1156":{"u":"/docs/adr/127-actor-model-not-adopted.html#revision-2026-10-01","d":"ADR-127: The Actor Model Is Not Adopted","k":"Architecture Decision Records","t":"Revision (2026-10-01)","x":"No decision or rationale changed. Citations refreshed: the vote handler's class declaration (CastVoteHandler.cs:20) and its poll repository call (:33), OnModelCreating…"},"1157":{"u":"/docs/adr/127-actor-model-not-adopted.html#related","d":"ADR-127: The Actor Model Is Not Adopted","k":"Architecture Decision Records","t":"Related","x":"ADR-007, ADR-008 and ADR-059 (the boundary a future silo would live behind), ADR-026 and ADR-077 (the caching tiers that absorb the read pressure, and the in-process residency…"},"1158":{"u":"/docs/adr/128-time-as-an-input.html","d":"ADR-128: Time as an Input (No Ambient Clock Reads in Domain and Application)","k":"Architecture Decision Records"},"1159":{"u":"/docs/adr/128-time-as-an-input.html#status","d":"ADR-128: Time as an Input (No Ambient Clock Reads in Domain and Application)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-10-01)."},"1160":{"u":"/docs/adr/128-time-as-an-input.html#context","d":"ADR-128: Time as an Input (No Ambient Clock Reads in Domain and Application)","k":"Architecture Decision Records","t":"Context","x":"Expiry windows, payment deadlines, discount windows, overdue checks and cutoffs are business rules, and every one of them branches on \"now\". When the rule reads DateTime.UtcNow…"},"1161":{"u":"/docs/adr/128-time-as-an-input.html#decision","d":"ADR-128: Time as an Input (No Ambient Clock Reads in Domain and Application)","k":"Architecture Decision Records","t":"Decision","x":"Domain and Application code takes time as an input and never reads the ambient clock. A handler injects TimeProvider and passes the instant into the domain method; an aggregate…"},"1162":{"u":"/docs/adr/128-time-as-an-input.html#rationale","d":"ADR-128: Time as an Input (No Ambient Clock Reads in Domain and Application)","k":"Architecture Decision Records","t":"Rationale","x":"- A test can only drive what it can supply. Passing the instant in makes every time-dependent branch a plain input, so an expiry, a cutoff or an overdue state is one argument…"},"1163":{"u":"/docs/adr/128-time-as-an-input.html#trade-offs","d":"ADR-128: Time as an Input (No Ambient Clock Reads in Domain and Application)","k":"Architecture Decision Records","t":"Trade-offs","x":"- The rule bans five getters, not the idea of a clock. A read through any other path (a static TimeProvider.System.GetUtcNow(), Environment.TickCount, Stopwatch) is not matched…"},"1164":{"u":"/docs/adr/128-time-as-an-input.html#related","d":"ADR-128: Time as an Input (No Ambient Clock Reads in Domain and Application)","k":"Architecture Decision Records","t":"Related","x":"ADR-015 (the fitness-function style and the shared TestsBase package this rule is shipped in), ADR-125 (the precedent for a fitness-gated convention with its own record and an…"},"1165":{"u":"/docs/adr/129-tactical-aggregate-contract.html","d":"ADR-129: The Tactical Aggregate Contract","k":"Architecture Decision Records"},"1166":{"u":"/docs/adr/129-tactical-aggregate-contract.html#status","d":"ADR-129: The Tactical Aggregate Contract","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-10-01)."},"1167":{"u":"/docs/adr/129-tactical-aggregate-contract.html#context","d":"ADR-129: The Tactical Aggregate Contract","k":"Architecture Decision Records","t":"Context","x":"Every entity in the four repos is written the same way: a sealed class over a framework base, a private constructor, a static Create(...) returning Result , private setters,…"},"1168":{"u":"/docs/adr/129-tactical-aggregate-contract.html#decision","d":"ADR-129: The Tactical Aggregate Contract","k":"Architecture Decision Records","t":"Decision","x":"Entities follow one tactical contract. The construction, encapsulation and placement parts are fitness-gated by EntityConventionTestsBase; the child-access part and the use of…"},"1169":{"u":"/docs/adr/129-tactical-aggregate-contract.html#rationale","d":"ADR-129: The Tactical Aggregate Contract","k":"Architecture Decision Records","t":"Rationale","x":"- One contract, one record. The pieces were each correct in their own ADR, but an agent writing a new entity needs the whole shape at once, and a reviewer needs to know which…"},"1170":{"u":"/docs/adr/129-tactical-aggregate-contract.html#trade-offs","d":"ADR-129: The Tactical Aggregate Contract","k":"Architecture Decision Records","t":"Trade-offs","x":"- Part of the contract is not enforced. Child access through GetChildOrNotFound, SetItems and the remove, restore and cascade-delete helpers, the existence of an Invariants class…"},"1171":{"u":"/docs/adr/129-tactical-aggregate-contract.html#related","d":"ADR-129: The Tactical Aggregate Contract","k":"Architecture Decision Records","t":"Related","x":"ADR-013 (the Result factories this contract requires), ADR-068 (value-object factories and the static Invariants class this contract reuses for entities), ADR-126 (an aggregate…"},"1172":{"u":"/docs/adr/130-per-engine-data-source-strategy.html","d":"ADR-130: Per-Engine Data Source Strategy (Engine Facts Instead of Branching on the Enum)","k":"Architecture Decision Records"},"1173":{"u":"/docs/adr/130-per-engine-data-source-strategy.html#status","d":"ADR-130: Per-Engine Data Source Strategy (Engine Facts Instead of Branching on the Enum)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-10-01). Targeted at MMCA.Common v1.218.0, which is unreleased at the time of writing (the CHANGELOG carries no entry for it yet). Refines ADR-018 (engine as a…"},"1174":{"u":"/docs/adr/130-per-engine-data-source-strategy.html#context","d":"ADR-130: Per-Engine Data Source Strategy (Engine Facts Instead of Branching on the Enum)","k":"Architecture Decision Records","t":"Context","x":"MMCA.Common persists through four engines named by one shipped public enum, DataSource…"},"1175":{"u":"/docs/adr/130-per-engine-data-source-strategy.html#decision","d":"ADR-130: Per-Engine Data Source Strategy (Engine Facts Instead of Branching on the Enum)","k":"Architecture Decision Records","t":"Decision","x":"One internal strategy object per engine answers every engine question, looked up through a static registry keyed by the shipped enum. Call sites read engine facts; they no longer…"},"1176":{"u":"/docs/adr/130-per-engine-data-source-strategy.html#rationale","d":"ADR-130: Per-Engine Data Source Strategy (Engine Facts Instead of Branching on the Enum)","k":"Architecture Decision Records","t":"Rationale","x":"- One place per engine. An engine's behavior is now one class, and a fifth engine is one class plus one registry line (DataSourceEngines.cs:15-16); a missed branch can no longer…"},"1177":{"u":"/docs/adr/130-per-engine-data-source-strategy.html#trade-offs","d":"ADR-130: Per-Engine Data Source Strategy (Engine Facts Instead of Branching on the Enum)","k":"Architecture Decision Records","t":"Trade-offs","x":"- Breaking for consumers. The RequestIdentityInsert rename has no alias (IUnitOfWork.cs:45); a Cosmos-default host that injects IRawSqlQueryExecutor now fails at startup…"},"1178":{"u":"/docs/adr/130-per-engine-data-source-strategy.html#alternatives-rejected","d":"ADR-130: Per-Engine Data Source Strategy (Engine Facts Instead of Branching on the Enum)","k":"Architecture Decision Records","t":"Alternatives rejected","x":"- Engines registered in DI (weighed 2026-10-01). Engines as IDataSourceEngine services resolved from the container. Rejected because the conventions, EntityTypeConfiguration and…"},"1179":{"u":"/docs/adr/130-per-engine-data-source-strategy.html#consequences","d":"ADR-130: Per-Engine Data Source Strategy (Engine Facts Instead of Branching on the Enum)","k":"Architecture Decision Records","t":"Consequences","x":"- Consumer upgrade. Rename RequestIdentityInsert calls to RequestExplicitKeyInsert; on a Cosmos-default host, remove any IRawSqlQueryExecutor dependency; on SQLite with…"},"1180":{"u":"/docs/adr/130-per-engine-data-source-strategy.html#related","d":"ADR-130: Per-Engine Data Source Strategy (Engine Facts Instead of Branching on the Enum)","k":"Architecture Decision Records","t":"Related","x":"ADR-006 (one sealed context per engine), ADR-018 (engines behind one model and the resolver), ADR-113 (the fourth engine), ADR-030 (the startup migrator that reads Migrations),…"},"1181":{"u":"/docs/adr/131-same-origin-api-proxy.html","d":"ADR-131: Same-Origin API Proxy (a Backend-for-Frontend That Keeps Tokens Out of Browser Script)","k":"Architecture Decision Records"},"1182":{"u":"/docs/adr/131-same-origin-api-proxy.html#status","d":"ADR-131: Same-Origin API Proxy (a Backend-for-Frontend That Keeps Tokens Out of Browser Script)","k":"Architecture Decision Records","t":"Status","x":"Accepted (2026-10-01). Targeted at MMCA.Common v1.218.0, which is unreleased at the time of writing. Records the owner's TD-08 decision for Option A of the token-storage design…"},"1183":{"u":"/docs/adr/131-same-origin-api-proxy.html#context","d":"ADR-131: Same-Origin API Proxy (a Backend-for-Frontend That Keeps Tokens Out of Browser Script)","k":"Architecture Decision Records","t":"Context","x":"A Blazor WebAssembly client calls the API through the gateway, which is a different origin from the UI host, so the HttpOnly session cookies the UI host writes (ADR-022) never…"},"1184":{"u":"/docs/adr/131-same-origin-api-proxy.html#decision","d":"ADR-131: Same-Origin API Proxy (a Backend-for-Frontend That Keeps Tokens Out of Browser Script)","k":"Architecture Decision Records","t":"Decision","x":"The UI host serves the API on its own origin and forwards to the gateway server-side, attaching the bearer it reads from the HttpOnly cookie. The browser never holds a token that…"},"1185":{"u":"/docs/adr/131-same-origin-api-proxy.html#rationale","d":"ADR-131: Same-Origin API Proxy (a Backend-for-Frontend That Keeps Tokens Out of Browser Script)","k":"Architecture Decision Records","t":"Rationale","x":"- Tokens out of script, with no infrastructure prerequisite. An injected script can still call the API as the user while the page is open, but it cannot carry a token away: the…"},"1186":{"u":"/docs/adr/131-same-origin-api-proxy.html#trade-offs","d":"ADR-131: Same-Origin API Proxy (a Backend-for-Frontend That Keeps Tokens Out of Browser Script)","k":"Architecture Decision Records","t":"Trade-offs","x":"- One extra hop. Every browser API call and every hub frame passes through the UI host before the gateway (SameOriginApiProxyEndpoint.cs:315-319). - The UI host becomes a…"},"1187":{"u":"/docs/adr/131-same-origin-api-proxy.html#alternatives-rejected","d":"ADR-131: Same-Origin API Proxy (a Backend-for-Frontend That Keeps Tokens Out of Browser Script)","k":"Architecture Decision Records","t":"Alternatives rejected","x":"- Option B: a same-site cookie sent straight to the API (weighed 2026-10-01). Rejected because it needs UI and gateway under one registrable domain in every environment (DNS,…"},"1188":{"u":"/docs/adr/131-same-origin-api-proxy.html#consequences","d":"ADR-131: Same-Origin API Proxy (a Backend-for-Frontend That Keeps Tokens Out of Browser Script)","k":"Architecture Decision Records","t":"Consequences","x":"- Adoption, per Blazor Web host. Register after the session-cookie and token registrations, map next to the session-cookie endpoints after UseAuthorization, configure the section…"},"1189":{"u":"/docs/adr/131-same-origin-api-proxy.html#related","d":"ADR-131: Same-Origin API Proxy (a Backend-for-Frontend That Keeps Tokens Out of Browser Script)","k":"Architecture Decision Records","t":"Related","x":"ADR-022 (the HttpOnly session cookie the proxy reads), ADR-051 (client token lifecycle across render modes), ADR-023 (security headers and the CSP), ADR-082 (the gateway CORS…"},"1190":{"u":"/docs/onboarding/index.html","d":"MMCA.Common + MMCA.ADC, Onboarding Guide","k":"Onboarding Guide","x":"A teaching guide for an experienced .NET engineer who is new to this codebase. It walks every first-party type, explaining not just what each type is but how it works and why it…"},"1191":{"u":"/docs/onboarding/index.html#how-the-guide-is-organized-two-axes","d":"MMCA.Common + MMCA.ADC, Onboarding Guide","k":"Onboarding Guide","t":"How the guide is organized, two axes","x":"The guide has two organizing axes that work together. 1. Primary axis, functional grouping. Every type lives in exactly one functional group: the capability or cross-cutting…"},"1192":{"u":"/docs/onboarding/index.html#chapters","d":"MMCA.Common + MMCA.ADC, Onboarding Guide","k":"Onboarding Guide","t":"Chapters","x":"---"},"1193":{"u":"/docs/onboarding/index.html#legend-how-to-read-a-type-section","d":"MMCA.Common + MMCA.ADC, Onboarding Guide","k":"Onboarding Guide","t":"Legend, how to read a type section","x":"Every type gets one section using this template: {TypeName} {Assembly} · {namespace} · {file:line} · Level {n} · {kind} - What it is: one or two plain-language sentences. -…"},"1194":{"u":"/docs/onboarding/index.html#suggested-reading-paths","d":"MMCA.Common + MMCA.ADC, Onboarding Guide","k":"Onboarding Guide","t":"Suggested reading paths","x":"- Framework-first (recommended). Primer → group-01 → upward. You meet the MMCA.Common foundations before the MMCA.ADC features that build on them; this matches dependency order…"},"1195":{"u":"/docs/onboarding/index.html#the-companion-projects-context","d":"MMCA.Common + MMCA.ADC, Onboarding Guide","k":"Onboarding Guide","t":"The companion projects (context)","x":"This guide covers MMCA.Common (the framework) and MMCA.ADC (one consumer). MMCA.Store is out of scope. The dependency arrow is why the Common framework groups (1–16) come before…"},"1196":{"u":"/docs/onboarding/00-dependency-manifest.html","d":"Phase 1: Dependency Manifest & Leveling","k":"Onboarding Guide","x":"Each distinct type node is assigned a Level by longest-path layering over its first-party dependencies (base/interface, generic constraints, field/property/param/return types,…"},"1197":{"u":"/docs/onboarding/00-dependency-manifest.html#level-distribution","d":"Phase 1: Dependency Manifest & Leveling","k":"Onboarding Guide","t":"Level distribution"},"1198":{"u":"/docs/onboarding/00-dependency-manifest.html#cycles-scc-size--1-47","d":"Phase 1: Dependency Manifest & Leveling","k":"Onboarding Guide","t":"Cycles (SCC size > 1): 47"},"1199":{"u":"/docs/onboarding/00-dependency-manifest.html#manifest-by-level-then-assembly","d":"Phase 1: Dependency Manifest & Leveling","k":"Onboarding Guide","t":"Manifest (by level, then assembly)"},"1200":{"u":"/docs/onboarding/00-group-taxonomy.html","d":"Phase 1b - Functional Group Taxonomy","k":"Onboarding Guide","x":"This is the primary axis of the guide. Every one of the 5,234 distinct first-party type nodes from 00-inventory.md is assigned to exactly one functional group - its primary home:…"},"1201":{"u":"/docs/onboarding/00-group-taxonomy.html#design-notes-boundary-decisions-worth-stating-up-front","d":"Phase 1b - Functional Group Taxonomy","k":"Onboarding Guide","t":"Design notes (boundary decisions worth stating up front)","x":"- Cycles are kept whole. The 13 dependency cycles (SCCs) from the manifest are never split across groups. Notably the ApplicationDbContext AuditSaveChangesInterceptor…"},"1202":{"u":"/docs/onboarding/00-group-taxonomy.html#the-groups-ordered","d":"Phase 1b - Functional Group Taxonomy","k":"Onboarding Guide","t":"The groups (ordered)","x":"Reconciliation: 2311 production types across 27 groups + 2923 test/testing types in G25 = 5234 (matches the inventory's distinct-node count). No type appears twice; none dropped.…"},"1203":{"u":"/docs/onboarding/00-group-taxonomy.html#group-membership","d":"Phase 1b - Functional Group Taxonomy","k":"Onboarding Guide","t":"Group membership","x":"group-01-result-error-handling.md 16 types The Result/Error railway that every operation returns instead of throwing; pagination result shapes. group-02-domain-building-blocks.md…"},"1204":{"u":"/docs/onboarding/00-inventory.html","d":"Phase 0: Type Inventory","k":"Onboarding Guide","x":"Generated mechanically by a Roslyn syntactic parse of every in-scope .cs file under MMCA.Common/Source, MMCA.Common/Tests, MMCA.ADC/Source, MMCA.ADC/Tests. - Files scanned: 4000…"},"1205":{"u":"/docs/onboarding/00-inventory.html#counts-by-kind","d":"Phase 0: Type Inventory","k":"Onboarding Guide","t":"Counts by kind"},"1206":{"u":"/docs/onboarding/00-inventory.html#counts-by-assembly-distinct-nodes","d":"Phase 0: Type Inventory","k":"Onboarding Guide","t":"Counts by assembly (distinct nodes)"},"1207":{"u":"/docs/onboarding/00-inventory.html#full-inventory","d":"Phase 0: Type Inventory","k":"Onboarding Guide","t":"Full inventory"},"1208":{"u":"/docs/onboarding/00-inventory.html#extensiont-blocks","d":"Phase 0: Type Inventory","k":"Onboarding Guide","t":"extension(T) blocks"},"1209":{"u":"/docs/onboarding/00-inventory.html#generated--excluded-artifacts-no-type-sections-written","d":"Phase 0: Type Inventory","k":"Onboarding Guide","t":"Generated / excluded artifacts (no type sections written)","x":"138 files excluded as generated (EF migrations, snapshots, .g.cs, AssemblyInfo)."},"1210":{"u":"/docs/onboarding/00-primer.html","d":"Primer, the concepts, stack, and conventions you need first","k":"Onboarding Guide","x":"This chapter teaches the cross-cutting things once, so the per-type chapters can stay focused. Read it before the group chapters (start with group-01). Everything here is either…"},"1211":{"u":"/docs/onboarding/00-primer.html#1-the-big-picture","d":"Primer, the concepts, stack, and conventions you need first","k":"Onboarding Guide","t":"1. The big picture","x":"Two codebases are in scope: - MMCA.Common: a framework, published as twenty-two NuGet packages (the count and list are owned by MMCA.Common/FACTS.md) to nuget.org (the documented…"},"1212":{"u":"/docs/onboarding/00-primer.html#2-architectural-styles-this-codebase-commits-to","d":"Primer, the concepts, stack, and conventions you need first","k":"Onboarding Guide","t":"2. Architectural styles this codebase commits to","x":"These are the recurring ideas. Each is taught fully at its first concrete appearance in a group chapter; here is the orientation so the vocabulary is familiar. - Domain-Driven…"},"1213":{"u":"/docs/onboarding/00-primer.html#3-the-external-stack-bcl--nuget-external-level-0","d":"Primer, the concepts, stack, and conventions you need first","k":"Onboarding Guide","t":"3. The external stack (BCL / NuGet, \"external Level 0\")","x":"These are not first-party and get no per-type sections. Versions are from MMCA.Common/Directory.Packages.props and MMCA.ADC/Directory.Packages.props (Central Package Management,…"},"1214":{"u":"/docs/onboarding/00-primer.html#4-c-build-and-code-style-conventions","d":"Primer, the concepts, stack, and conventions you need first","k":"Onboarding Guide","t":"4. C#, build, and code-style conventions","x":"- .NET 10.0, LangVersion: preview: required because the codebase uses C extension types (extension(T) syntax, see below). - Central Package Management (CPM). All NuGet versions…"},"1215":{"u":"/docs/onboarding/00-primer.html#5-the-solution--test-layout","d":"Primer, the concepts, stack, and conventions you need first","k":"Onboarding Guide","t":"5. The solution / test layout","x":"- .slnx: the human solution (XML format). .slnf, a solution filter used in CI to build a subset fast (MMCA.Store.CI.slnf, MMCA.ADC.CI.slnf). - Microsoft Testing Platform, not…"},"1216":{"u":"/docs/onboarding/00-primer.html#6-the-34-category-architecture-evaluation-lens","d":"Primer, the concepts, stack, and conventions you need first","k":"Onboarding Guide","t":"6. The 34-category architecture-evaluation lens","x":"This codebase is also scored against a 34-category rubric (Website/docs-src/governance/ArchitectureEvaluationCriteria.md, published at ). This guide weaves the rubric in so you…"},"1217":{"u":"/docs/onboarding/group-01-result-error-handling.html","d":"1. Result & Error Handling","k":"Onboarding Guide","x":"What this group covers. This is the first capability chapter, and it is deliberately first because the pattern it teaches underpins almost every other one in the guide. Before…"},"1218":{"u":"/docs/onboarding/group-01-result-error-handling.html#why-a-return-value-instead-of-an-exception","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"Why a return value instead of an exception","x":"Exceptions are expensive (stack capture and unwinding), they are invisible in a method's signature, and they conflate programmer errors with business outcomes. \"This order ID…"},"1219":{"u":"/docs/onboarding/group-01-result-error-handling.html#three-pieces-classification-carrier-envelope","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"Three pieces: classification, carrier, envelope","x":"ErrorType (MMCA.Common/Source/Core/MMCA.Common.Shared/Abstractions/ErrorType.cs:10) is the classification axis, a nine-member enum whose per-member doc comments name the HTTP…"},"1220":{"u":"/docs/onboarding/group-01-result-error-handling.html#the-railway-in-one-picture","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"The railway, in one picture","x":"\"Railway-oriented programming\" is the mental model: imagine two parallel tracks, a success track and a failure track. An operation that takes the current result as input is…"},"1221":{"u":"/docs/onboarding/group-01-result-error-handling.html#construction-discipline-and-the-invariant-it-buys","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"Construction discipline, and the invariant it buys","x":"You cannot new a Result directly: its constructors are internal (Result.cs:211, Result.cs:217), so the only way to produce one is through the static factory methods on the base…"},"1222":{"u":"/docs/onboarding/group-01-result-error-handling.html#severity-not-position-classifies-a-failure","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"Severity, not position, classifies a failure","x":"Result.Combine aggregates errors in evaluation order, so if a transport picked the first error to classify the whole failure, an incidental validation failure evaluated early…"},"1223":{"u":"/docs/onboarding/group-01-result-error-handling.html#making-a-result-survive-a-round-trip","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"Making a result survive a round trip","x":"The construction discipline above creates a problem the moment a result must be serialized: because Result 's constructors are internal and its properties are get-only,…"},"1224":{"u":"/docs/onboarding/group-01-result-error-handling.html#how-a-failure-becomes-an-http-response","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"How a failure becomes an HTTP response","x":"Follow a typical write through the layers. A domain factory or aggregate method validates its inputs and returns Result.Combine(...); a command handler in the application layer…"},"1225":{"u":"/docs/onboarding/group-01-result-error-handling.html#and-how-the-same-failure-crosses-a-service-boundary-or-reaches-the-browser","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"And how the same failure crosses a service boundary, or reaches the browser","x":"On the gRPC side, ResultGrpcExtensions carries a mirror of that table, ErrorType to Grpc.Core.StatusCode, in its own FrozenDictionary…"},"1226":{"u":"/docs/onboarding/group-01-result-error-handling.html#the-two-exceptions-and-why-they-exist-anyway","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"The two exceptions, and why they exist anyway","x":"A return-value pattern still needs a fallback for the places where you genuinely cannot return one. DomainException…"},"1227":{"u":"/docs/onboarding/group-01-result-error-handling.html#offset-paging-the-read-side-envelopes","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"Offset paging: the read-side envelopes","x":"The read side needs shapes of its own. A query that returns a list wraps it in CollectionResult , a thin [DataContract] record…"},"1228":{"u":"/docs/onboarding/group-01-result-error-handling.html#keyset-paging-the-same-envelope-family-a-different-cost-model","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"Keyset paging: the same envelope family, a different cost model","x":"Offset paging answers \"give me page 37\" and costs the database a scan of the 36 pages before it. KeysetPageRequest…"},"1229":{"u":"/docs/onboarding/group-01-result-error-handling.html#where-this-leads","d":"1. Result & Error Handling","k":"Onboarding Guide","t":"Where this leads","x":"With these sixteen types you have the full error-and-result vocabulary the rest of the guide assumes. You will see Result returned by the domain building blocks of Chapter 2…"},"1230":{"u":"/docs/onboarding/group-02-domain-building-blocks.html","d":"2. Domain Building Blocks (Entities, Value Objects, Aggregates)","k":"Onboarding Guide","x":"What this group covers. This is the DDD heart of the framework, the small, dependency-light primitives every business model in MMCA.Common and MMCA.ADC is built from. There are…"},"1231":{"u":"/docs/onboarding/group-02-domain-building-blocks.html#the-entity-chain-one-capability-per-rung","d":"2. Domain Building Blocks (Entities, Value Objects, Aggregates)","k":"Onboarding Guide","t":"The entity chain, one capability per rung","x":"Read the chain bottom-up. BaseEntity (MMCA.Common/Source/Core/MMCA.Common.Domain/Entities/BaseEntity.cs:34) carries a single required init identifier of the per-entity alias…"},"1232":{"u":"/docs/onboarding/group-02-domain-building-blocks.html#three-opt-in-markers-beside-the-chain","d":"2. Domain Building Blocks (Entities, Value Objects, Aggregates)","k":"Onboarding Guide","t":"Three opt-in markers beside the chain","x":"Not every cross-cutting capability belongs on the inheritance chain, because not every entity should pay for it. ITenantEntity…"},"1233":{"u":"/docs/onboarding/group-02-domain-building-blocks.html#how-a-domain-event-leaves-an-aggregate","d":"2. Domain Building Blocks (Entities, Value Objects, Aggregates)","k":"Onboarding Guide","t":"How a domain event leaves an aggregate","x":"The runtime flow ties this group to the events/outbox group. A command handler loads an aggregate, calls a business method, and that method calls AddDomainEvent(...); the event…"},"1234":{"u":"/docs/onboarding/group-02-domain-building-blocks.html#value-objects-invalid-instances-cannot-exist","d":"2. Domain Building Blocks (Entities, Value Objects, Aggregates)","k":"Onboarding Guide","t":"Value objects, invalid instances cannot exist","x":"The second family models concepts with no identity: two Money(10, USD) are equal because their values match, not because they are the same row. ValueObject is the cheapest…"},"1235":{"u":"/docs/onboarding/group-02-domain-building-blocks.html#smart-enumerations-a-closed-set-that-can-carry-behavior","d":"2. Domain Building Blocks (Entities, Value Objects, Aggregates)","k":"Onboarding Guide","t":"Smart enumerations, a closed set that can carry behavior","x":"Enumeration (MMCA.Common/Source/Core/MMCA.Common.Shared/ValueObjects/Enumeration.cs:77) is the answer to a recurring shape a CLR enum handles badly: a closed set of named members…"},"1236":{"u":"/docs/onboarding/group-02-domain-building-blocks.html#governance-markers-metadata-that-other-layers-act-on","d":"2. Domain Building Blocks (Entities, Value Objects, Aggregates)","k":"Onboarding Guide","t":"Governance markers, metadata that other layers act on","x":"The last family is tiny attributes and helpers that carry intent the rest of the stack reads reflectively. PiiAttribute…"},"1237":{"u":"/docs/onboarding/group-02-domain-building-blocks.html#where-this-group-sits","d":"2. Domain Building Blocks (Entities, Value Objects, Aggregates)","k":"Onboarding Guide","t":"Where this group sits","x":"Everything above is consumed by the layers that follow: every module entity (for example the Conference domain, Engagement, and Identity modules) derives from one of the three…"},"1238":{"u":"/docs/onboarding/group-03-querying-specifications.html","d":"3. Querying: Specifications, Filtering & the Entity Query Service","k":"Onboarding Guide","x":"What this group covers. Every read in MMCA.Common and ADC (\"list the published events\", \"get session 42\", \"the speakers in Atlanta, page 3, sorted by name, with only the name and…"},"1239":{"u":"/docs/onboarding/group-03-querying-specifications.html#the-specification-pattern-the-trusted-predicate","d":"3. Querying: Specifications, Filtering & the Entity Query Service","k":"Onboarding Guide","t":"The Specification pattern, the trusted predicate","x":"ISpecification (MMCA.Common/Source/Core/MMCA.Common.Domain/Interfaces/ISpecification.cs:12) exposes two faces of one rule: a Criteria expression tree that EF Core translates to…"},"1240":{"u":"/docs/onboarding/group-03-querying-specifications.html#queryspecification-a-whole-read-in-one-object","d":"3. Querying: Specifications, Filtering & the Entity Query Service","k":"Onboarding Guide","t":"QuerySpecification, a whole read in one object","x":"A plain specification is only a predicate, which leaves includes, ordering, paging, and tracking to be threaded through every layer as loose arguments. QuerySpecification…"},"1241":{"u":"/docs/onboarding/group-03-querying-specifications.html#dynamic-filtering-one-strategy-per-clr-type","d":"3. Querying: Specifications, Filtering & the Entity Query Service","k":"Onboarding Guide","t":"Dynamic filtering, one Strategy per CLR type","x":"User filters arrive as a Dictionary , property name to operator key plus raw string value, parsed from the query string by QueryFilterModelBinder at the API edge, which caps a…"},"1242":{"u":"/docs/onboarding/group-03-querying-specifications.html#sorting-sparse-fieldsets-and-paging-arithmetic","d":"3. Querying: Specifications, Filtering & the Entity Query Service","k":"Onboarding Guide","t":"Sorting, sparse fieldsets, and paging arithmetic","x":"QueryFieldService (MMCA.Common/Source/Core/MMCA.Common.Application/Services/QueryFieldService.cs:16) owns the rest of read shaping. ApplySorting (QueryFieldService.cs:184, with a…"},"1243":{"u":"/docs/onboarding/group-03-querying-specifications.html#the-pipeline-two-entity-paths-plus-projection-pushdown","d":"3. Querying: Specifications, Filtering & the Entity Query Service","k":"Onboarding Guide","t":"The pipeline: two entity paths plus projection pushdown","x":"IEntityQueryPipeline (MMCA.Common/Source/Core/MMCA.Common.Application/Services/Query/IEntityQueryPipeline.cs:10) is the execution contract, implemented by the sealed…"},"1244":{"u":"/docs/onboarding/group-03-querying-specifications.html#the-query-service-the-public-face","d":"3. Querying: Specifications, Filtering & the Entity Query Service","k":"Onboarding Guide","t":"The query service, the public face","x":"IEntityQueryService (MMCA.Common/Source/Core/MMCA.Common.Application/Interfaces/Mapping/IEntityQueryService.cs:19) and its concrete EntityQueryService…"},"1245":{"u":"/docs/onboarding/group-03-querying-specifications.html#end-to-end-one-list-request","d":"3. Querying: Specifications, Filtering & the Entity Query Service","k":"Onboarding Guide","t":"End to end, one list request","x":"The request reaches a read controller, EntityControllerBase (Group 12), which resolves MaxPageSize per request from ApplicationSettings, falling back to 500 when unset…"},"1246":{"u":"/docs/onboarding/group-03-querying-specifications.html#query-tags-naming-the-use-case-behind-a-statement","d":"3. Querying: Specifications, Filtering & the Entity Query Service","k":"Onboarding Guide","t":"Query tags, naming the use case behind a statement","x":"Two types in the Services/Query folder serve the operator reading a query store rather than the read path itself. QueryTagScope…"},"1247":{"u":"/docs/onboarding/group-03-querying-specifications.html#also-filed-here-best-effort-dispatch-and-the-upcaster-registry","d":"3. Querying: Specifications, Filtering & the Entity Query Service","k":"Onboarding Guide","t":"Also filed here: best-effort dispatch and the upcaster registry","x":"Four types in this group are not part of the read path at all; they are co-located in MMCA.Common.Application/Services and are grouped by that folder. BestEffort…"},"1248":{"u":"/docs/onboarding/group-04-events-outbox.html","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","x":"What this chapter covers. This group is the codebase's event spine: how an aggregate says \"something happened\", how that fact is persisted so it cannot be lost, and how it…"},"1249":{"u":"/docs/onboarding/group-04-events-outbox.html#the-two-kinds-of-event","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","t":"The two kinds of event","x":"Everything starts with two marker interfaces in the Domain layer. IDomainEvent is the base contract: a DateOccurred timestamp (when the business action happened, not when it was…"},"1250":{"u":"/docs/onboarding/group-04-events-outbox.html#stored-identity-what-a-row-remembers-an-event-as","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","t":"Stored identity: what a row remembers an event as","x":"An event in memory is a CLR type; an event in a table is a string. Which string it is decides whether a row survives a refactoring, and EventNameResolver is the single cached…"},"1251":{"u":"/docs/onboarding/group-04-events-outbox.html#raising-and-capturing-where-the-outbox-is-written","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","t":"Raising and capturing: where the outbox is written","x":"Aggregates raise events by calling AddDomainEvent() (see AuditableAggregateRootEntity in G02), which simply buffers them on the entity. Nothing is dispatched yet; the events ride…"},"1252":{"u":"/docs/onboarding/group-04-events-outbox.html#the-routing-split-local-events-dispatch-in-process-integration-events-wait-for-the-bus","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","t":"The routing split: local events dispatch in-process, integration events wait for the bus","x":"Here is the detail that most people get wrong, and it is the heart of the design. After the transaction commits (SavedChanges), the interceptor does not treat all captured events…"},"1253":{"u":"/docs/onboarding/group-04-events-outbox.html#who-the-delivery-runs-as-the-captured-origin","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","t":"Who the delivery runs as: the captured origin","x":"A delivered event runs a poll cycle later, on another thread and possibly in another process, so without help it would run as an anonymous, tenant-less system call: a handler…"},"1254":{"u":"/docs/onboarding/group-04-events-outbox.html#the-safety-net-how-the-processor-schedules-itself","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","t":"The safety net: how the processor schedules itself","x":"The OutboxProcessor is a BackgroundService and the most intricate type in the group; most of its complexity is about not wasting work. It exists because the steps between commit…"},"1255":{"u":"/docs/onboarding/group-04-events-outbox.html#claiming-scale-out-and-ordered-delivery","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","t":"Claiming, scale-out, and ordered delivery","x":"Because a deployment may run more than one replica, each cycle claims its eligible prefix with a lease (LockedUntil plus LockToken,…"},"1256":{"u":"/docs/onboarding/group-04-events-outbox.html#failures-dead-letters-and-keeping-the-table-and-telemetry-bounded","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","t":"Failures, dead-letters, and keeping the table (and telemetry) bounded","x":"Delivery failures split into outcomes worth keeping straight. A transient failure (a handler or broker publish throwing) increments the row's RetryCount, records LastError, and…"},"1257":{"u":"/docs/onboarding/group-04-events-outbox.html#the-pluggable-transport-and-the-posture-flags-that-decide-it","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","t":"The pluggable transport, and the posture flags that decide it","x":"Here is the boundary that makes a module extractable without rewriting its handlers. Application code that wants to publish an integration event depends on IEventBus (or on the…"},"1258":{"u":"/docs/onboarding/group-04-events-outbox.html#consuming-from-the-broker-the-inbox-and-the-generic-consumer","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","t":"Consuming from the broker: the inbox and the generic consumer","x":"On the receiving side of a broker hop, application code keeps writing plain IIntegrationEventHandler implementations; there is no MassTransit-specific consumer class to author…"},"1259":{"u":"/docs/onboarding/group-04-events-outbox.html#putting-it-together-one-events-life","d":"4. Domain & Integration Events + Outbox Dual-Dispatch","k":"Onboarding Guide","t":"Putting it together, one event's life","x":"To see the whole spine at once, follow a single integration event from a producer service to a consumer service in broker mode. (1) A command mutates an aggregate, which raises…"},"1260":{"u":"/docs/onboarding/group-05-cqrs-pipeline.html","d":"5. CQRS: Commands, Queries & the Decorator Pipeline","k":"Onboarding Guide","x":"What this group covers. Every write and every read in an MMCA application is a use case: a small, single-purpose object (a command or a query) handed to a handler that does…"},"1261":{"u":"/docs/onboarding/group-05-cqrs-pipeline.html#the-shape-thin-handlers-fat-pipeline","d":"5. CQRS: Commands, Queries & the Decorator Pipeline","k":"Onboarding Guide","t":"The shape: thin handlers, fat pipeline","x":"A handler is deliberately tiny. ICommandHandler (MMCA.Common/Source/Core/MMCA.Common.Application/UseCases/Contracts/ICommandHandler.cs:9) and IQueryHandler…"},"1262":{"u":"/docs/onboarding/group-05-cqrs-pipeline.html#how-the-pipeline-is-assembled-scrutor-registration-versus-execution-order","d":"5. CQRS: Commands, Queries & the Decorator Pipeline","k":"Onboarding Guide","t":"How the pipeline is assembled (Scrutor, registration versus execution order)","x":"The wiring lives in the partial DependencyInjection class (MMCA.Common/Source/Core/MMCA.Common.Application/DependencyInjection.cs:24, with the module scan in…"},"1263":{"u":"/docs/onboarding/group-05-cqrs-pipeline.html#why-this-exact-order-and-what-each-layer-guards","d":"5. CQRS: Commands, Queries & the Decorator Pipeline","k":"Onboarding Guide","t":"Why this exact order, and what each layer guards","x":"The nesting order is a deliberate cost-and-correctness argument, spelled out in the registration XML-doc (DependencyInjection.cs:87-109): - Feature-gating is outermost so a…"},"1264":{"u":"/docs/onboarding/group-05-cqrs-pipeline.html#opt-in-by-marker-interface-pay-only-for-what-you-use","d":"5. CQRS: Commands, Queries & the Decorator Pipeline","k":"Onboarding Guide","t":"Opt-in by marker interface, pay only for what you use","x":"The pipeline is registered for every handler, but most decorators are dormant unless the use case asks for them. The switch is a set of tiny marker / role interfaces in…"},"1265":{"u":"/docs/onboarding/group-05-cqrs-pipeline.html#the-generic-write-side-three-verbs-a-module-does-not-have-to-write","d":"5. CQRS: Commands, Queries & the Decorator Pipeline","k":"Onboarding Guide","t":"The generic write side: three verbs a module does not have to write","x":"Below the pipeline sits a second body of shared code: the workflows every aggregate write repeats. They are ordinary handlers, so the decorators wrap them exactly as they wrap a…"},"1266":{"u":"/docs/onboarding/group-05-cqrs-pipeline.html#declaring-the-contract-the-opt-in-request-markers","d":"5. CQRS: Commands, Queries & the Decorator Pipeline","k":"Onboarding Guide","t":"Declaring the contract: the opt-in request markers","x":"ICommand (.../UseCases/ICommand.cs:31) and IQuery (.../UseCases/IQuery.cs:26) let a request DTO declare the result type its handler produces. Both are body-less interfaces whose…"},"1267":{"u":"/docs/onboarding/group-05-cqrs-pipeline.html#tenant-scoping-and-the-two-lock-tables","d":"5. CQRS: Commands, Queries & the Decorator Pipeline","k":"Onboarding Guide","t":"Tenant scoping and the two lock tables","x":"Both caching decorators are multi-tenant aware, and the reason is a nice illustration of where a cross-cutting concern has to live. ICacheService is a singleton and therefore…"},"1268":{"u":"/docs/onboarding/group-05-cqrs-pipeline.html#two-supporting-pieces","d":"5. CQRS: Commands, Queries & the Decorator Pipeline","k":"Onboarding Guide","t":"Two supporting pieces","x":"Two small helpers make the short-circuit decorators possible. ResultFailureFactory…"},"1269":{"u":"/docs/onboarding/group-05-cqrs-pipeline.html#the-other-application-layer-contracts-in-this-group","d":"5. CQRS: Commands, Queries & the Decorator Pipeline","k":"Onboarding Guide","t":"The other Application-layer contracts in this group","x":"Several contracts sit beside the pipeline rather than inside it. They are declared here, in the Application layer, and implemented in Infrastructure or the composition root,…"},"1270":{"u":"/docs/onboarding/group-05-cqrs-pipeline.html#where-this-fits-and-the-failure-mode-contract","d":"5. CQRS: Commands, Queries & the Decorator Pipeline","k":"Onboarding Guide","t":"Where this fits, and the failure-mode contract","x":"These contracts sit in the Application layer of Clean Architecture (primer §1), above Domain and below Infrastructure and the API. The API layer (G12) resolves a closed handler…"},"1271":{"u":"/docs/onboarding/group-06-validation.html","d":"6. Validation","k":"Onboarding Guide","x":"What this group covers. This is the framework-level validation kit that MMCA.Common.Application ships so every module validates input the same way. It has four parts: (1) a set…"},"1272":{"u":"/docs/onboarding/group-07-persistence-ef-core.html","d":"7. Persistence & EF Core","k":"Onboarding Guide","x":"What this group covers. This is the framework's data-access engine: everything between a domain aggregate and a row in a database. It is the single largest group in the guide…"},"1273":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#one-base-context-one-class-per-engine-one-instance-per-database","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"One base context, one class per engine, one instance per database","x":"ApplicationDbContext (MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/ApplicationDbContext.cs:46) is an abstract primary-constructor class over EF's…"},"1274":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#savechanges-as-an-interceptor-pipeline","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"SaveChanges as an interceptor pipeline","x":"The base context resolves its interceptors from DI in OnConfiguring (ApplicationDbContext.cs:290-322), and registration order is execution order. The audit interceptor runs…"},"1275":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#deferred-work-the-internal-command-queue","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"Deferred work, the internal-command queue","x":"The same \"write it in the transaction, run it afterwards\" reasoning the outbox applies to events is applied to work by the internal-command queue (ADR-114).…"},"1276":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#the-tenant-boundary-read-filter-plus-write-guard","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"The tenant boundary, read filter plus write guard","x":"Multi-tenancy (ADR-073) is two independent halves that meet in this group. The read half is the named Tenant query filter the base context applies to every non-owned…"},"1277":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#recording-what-changed-the-audit-trail","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"Recording what changed, the audit trail","x":"AuditTrailSaveChangesInterceptor (MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/AuditTrail/AuditTrailSaveChangesInterceptor.cs:63) is the fourth interceptor…"},"1278":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#repositories-specifications-and-the-unit-of-work","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"Repositories, specifications, and the unit of work","x":"Handlers do not touch a DbContext directly. They ask a UnitOfWork (MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/UnitOfWork.cs:13) for a repository. The…"},"1279":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#routing-an-entity-to-its-database","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"Routing an entity to its database","x":"The heart of ADR-006 is that every entity resolves to a DataSourceKey (MMCA.Common/Source/Core/MMCA.Common.Application/Interfaces/Infrastructure/Persistence/DataSourceKey.cs:15),…"},"1280":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#one-registry-answers-every-engine-question","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"One registry answers every engine question","x":"Four engines would otherwise mean a four-way switch in every component that maps a key, quotes a column, picks a migrations assembly or decides whether a source has an outbox.…"},"1281":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#three-model-finalizing-conventions-and-the-identifier-mapping","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"Three model-finalizing conventions and the identifier mapping","x":"The base context adds all three of its conventions in ConfigureConventions (ApplicationDbContext.cs:378-399), and each exists because a cross-cutting policy above would otherwise…"},"1282":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#entity-configuration-and-engine-portability","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"Entity configuration and engine portability","x":"Concrete entity configurations derive from the engine-aware EntityTypeConfiguration…"},"1283":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#two-tables-one-database-owns-refresh-sessions-and-permission-grants","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"Two tables one database owns, refresh sessions and permission grants","x":"Most of the framework's own tables are infrastructure every relational source needs. Two are not: both are Identity-module data that exactly one database owns, so both are mapped…"},"1284":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#encryption-seeding-design-time-and-the-shared-helpers","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"Encryption, seeding, design time, and the shared helpers","x":"A handful of supporting pieces round out the EF side. EncryptedStringConverter…"},"1285":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#the-storage-image-and-push-contracts","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"The storage, image, and push contracts","x":"The group also carries the Application-layer contracts for the storage-adjacent services that are not EF at all. Each has a null default in the container so a host that has not…"},"1286":{"u":"/docs/onboarding/group-07-persistence-ef-core.html#where-this-group-sits","d":"7. Persistence & EF Core","k":"Onboarding Guide","t":"Where this group sits","x":"Persistence is the concrete floor the abstract domain stands on. The entity bases and audit contracts from Group 02 are what the interceptors stamp and the query filters hide;…"},"1287":{"u":"/docs/onboarding/group-08-auth.html","d":"8. Authentication & Authorization","k":"Onboarding Guide","x":"What this group covers. This is the security spine of the framework: how a caller proves who they are (authentication), how the system decides what they may do (authorization),…"},"1288":{"u":"/docs/onboarding/group-08-auth.html#tokens-one-signing-switch-two-validation-worlds","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"Tokens: one signing switch, two validation worlds","x":"The framework mints two credentials on every successful sign-in: a short-lived access token (a JWT, 15 minutes by default,…"},"1289":{"u":"/docs/onboarding/group-08-auth.html#the-shared-authentication-workflow","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"The shared authentication workflow","x":"Login, registration, refresh, revocation, and device listing are not re-implemented per app. They live once in AuthenticationServiceBase…"},"1290":{"u":"/docs/onboarding/group-08-auth.html#refresh-sessions-one-row-per-device","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"Refresh sessions: one row per device","x":"A refresh token is no longer a column on the user row. Every issue opens its own RefreshSession (MMCA.Common/Source/Core/MMCA.Common.Domain/Auth/RefreshSession.cs:31), so signing…"},"1291":{"u":"/docs/onboarding/group-08-auth.html#what-the-apps-user-aggregate-must-expose","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"What the app's User aggregate must expose","x":"The shared workflows never see an app's User class. They see four small Domain-layer contracts, each sized to one workflow, which is the [Rubric §1, SOLID] interface-segregation…"},"1292":{"u":"/docs/onboarding/group-08-auth.html#passwords-and-brute-force-protection","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"Passwords and brute-force protection","x":"Password material is handled by PasswordHasher (MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Auth/PasswordHasher.cs:12), which hashes with PBKDF2-HMAC-SHA512 at 600,000…"},"1293":{"u":"/docs/onboarding/group-08-auth.html#the-second-factor-one-optional-step-in-the-same-sign-in","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"The second factor: one optional step in the same sign-in","x":"Two-factor authentication ships as contracts plus a stateless implementation, never as a feature that turns itself on: the account row belongs to the app, and making a second…"},"1294":{"u":"/docs/onboarding/group-08-auth.html#forgot-password-a-cache-backed-single-use-token","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"Forgot password: a cache-backed single-use token","x":"A user who has lost the password cannot present one, so this flow is anonymous by necessity, which makes every one of its responses a potential account-enumeration oracle. It is…"},"1295":{"u":"/docs/onboarding/group-08-auth.html#email-confirmation-the-same-token-shape-a-different-prefix","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"Email confirmation: the same token shape, a different prefix","x":"Confirming an address is the forgot-password flow's twin, and it is built that way on purpose: member for member, IEmailConfirmationTokenService…"},"1296":{"u":"/docs/onboarding/group-08-auth.html#reading-identity-from-claims","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"Reading identity from claims","x":"Once a request is authenticated, downstream code needs the caller's identity without re-parsing the JWT, and it needs one answer no matter which pipeline produced the principal.…"},"1297":{"u":"/docs/onboarding/group-08-auth.html#authorization-permissions-and-ownership","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"Authorization: permissions and ownership","x":"There is one authorization model here, and it is capabilities, not role names. The single AddAuthorizationPolicies() extension in AuthorizationExtensions…"},"1298":{"u":"/docs/onboarding/group-08-auth.html#session-cookies-keeping-ssr-authenticated","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"Session cookies: keeping SSR authenticated","x":"The final cluster solves a Blazor-specific problem: an interactive Blazor app keeps its access token in browser memory, but a cold server-side render (a new tab, an F5, an…"},"1299":{"u":"/docs/onboarding/group-08-auth.html#privacy-the-data-subject-export-package","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"Privacy: the data-subject export package","x":"Three members of this group belong to the privacy surface that sits beside erasure. UserDataExportDTO (MMCA.Common/Source/Core/MMCA.Common.Shared/Privacy/UserDataExportDTO.cs:15)…"},"1300":{"u":"/docs/onboarding/group-08-auth.html#shared-primitives-and-adjacent-members","d":"8. Authentication & Authorization","k":"Onboarding Guide","t":"Shared primitives and adjacent members","x":"Several group members are general-purpose primitives that landed in this chapter because of how the dependency grouping fell, though one of them is now load-bearing for auth.…"},"1301":{"u":"/docs/onboarding/group-09-caching.html","d":"9. Caching","k":"Onboarding Guide","x":"What this group covers. Caching in this codebase is small, deliberate, and woven into the CQRS pipeline rather than scattered across handlers. The group is nine types: one port…"},"1302":{"u":"/docs/onboarding/group-10-notifications.html","d":"10. Notifications (Push + In-App Inbox + Email)","k":"Onboarding Guide","x":"What this group covers. This is the notification subsystem, the machinery that turns \"an organizer wants to tell every attendee something\" into messages that actually reach…"},"1303":{"u":"/docs/onboarding/group-10-notifications.html#the-layering-and-why-the-pieces-sit-where-they-do","d":"10. Notifications (Push + In-App Inbox + Email)","k":"Onboarding Guide","t":"The layering, and why the pieces sit where they do","x":"The dependency flow of the group mirrors the framework's Clean Architecture story ([Rubric §3, Clean Architecture]). The Domain layer holds the two aggregates, PushNotification…"},"1304":{"u":"/docs/onboarding/group-10-notifications.html#the-broadcast-send-flow-end-to-end","d":"10. Notifications (Push + In-App Inbox + Email)","k":"Onboarding Guide","t":"The broadcast send flow, end to end","x":"Sending a notification is a command-side vertical slice ([Rubric §5, Vertical Slice], [Rubric §6, CQRS & Event-Driven]). An organizer POSTs to NotificationsController, which is…"},"1305":{"u":"/docs/onboarding/group-10-notifications.html#scope-keys-one-string-that-narrows-a-broadcast-an-inbox-and-a-live-channel","d":"10. Notifications (Push + In-App Inbox + Email)","k":"Onboarding Guide","t":"Scope keys: one string that narrows a broadcast, an inbox, and a live channel","x":"NotificationScopeKey is the small type that ties three otherwise unrelated paths together. It owns the format (event:{id} via ForEvent, session:{id} via ForSession, both rendered…"},"1306":{"u":"/docs/onboarding/group-10-notifications.html#the-inbox-side","d":"10. Notifications (Push + In-App Inbox + Email)","k":"Onboarding Guide","t":"The inbox side","x":"Reading and acknowledging notifications is the query/command counterpart, served by InboxController under the same feature gate and a plain [Authorize], so any authenticated user…"},"1307":{"u":"/docs/onboarding/group-10-notifications.html#the-signalr-transport-and-how-it-survives-extraction","d":"10. Notifications (Push + In-App Inbox + Email)","k":"Onboarding Guide","t":"The SignalR transport, and how it survives extraction","x":"NotificationHub is intentionally thin (MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Notifications/NotificationHub.cs:24-27): it is [Authorize]d, and beyond ASP.NET's…"},"1308":{"u":"/docs/onboarding/group-10-notifications.html#the-module-host-native-device-registration-and-the-privacy-export","d":"10. Notifications (Push + In-App Inbox + Email)","k":"Onboarding Guide","t":"The module host, native-device registration, and the privacy export","x":"On the ADC side the whole capability is packaged by NotificationModule (MMCA.ADC/Source/Modules/Notification/MMCA.ADC.Notification.API/NotificationModule.cs:15), an IModule that…"},"1309":{"u":"/docs/onboarding/group-10-notifications.html#where-this-group-sits","d":"10. Notifications (Push + In-App Inbox + Email)","k":"Onboarding Guide","t":"Where this group sits","x":"Upstream, this group depends on the domain building blocks of Group 02 (both aggregates derive from AuditableAggregateRootEntity ), the Result pattern of Group 01, the CQRS…"},"1310":{"u":"/docs/onboarding/group-11-navigation-populators.html","d":"11. Navigation Metadata & Populators (EF-decoupled eager loading)","k":"Onboarding Guide","x":"EF Core gives you .Include() for eager loading, and for a single SQL Server database that is the right tool. But this codebase is a database-per-service modular monolith…"},"1311":{"u":"/docs/onboarding/group-12-api-hosting-mapping.html","d":"12. API Hosting, Middleware, Idempotency & DTO/Contract Mapping","k":"Onboarding Guide","x":"What this group covers. This is the ASP.NET Core edge of the framework: the layer that turns an HTTP request into a domain call and turns a Result back into an HTTP response.…"},"1312":{"u":"/docs/onboarding/group-13-grpc-contracts.html","d":"13. gRPC & Inter-Service Contracts","k":"Onboarding Guide","x":"What this chapter is about. Once the ADC modules stopped sharing a process and became four separate service hosts (Identity, Conference, Engagement, Notification), the in-process…"},"1313":{"u":"/docs/onboarding/group-14-module-system-composition.html","d":"14. Module System, Composition & Configuration","k":"Onboarding Guide","x":"What this chapter covers. This is the wiring layer, the code that turns a pile of layered assemblies into a running host. It answers three questions a new host author asks: how…"},"1314":{"u":"/docs/onboarding/group-14-module-system-composition.html#the-module-contract-and-the-boundary-it-creates","d":"14. Module System, Composition & Configuration","k":"Onboarding Guide","t":"The module contract and the boundary it creates","x":"A module is the unit of cohesion above a feature slice: Conference, Engagement, Identity, Notification. Each one implements IModule…"},"1315":{"u":"/docs/onboarding/group-14-module-system-composition.html#discovery-and-kahn-ordered-registration","d":"14. Module System, Composition & Configuration","k":"Onboarding Guide","t":"Discovery and Kahn-ordered registration","x":"ModuleLoader (MMCA.Common/Source/Core/MMCA.Common.Application/Modules/ModuleLoader.cs:16) is the engine. Its one DiscoverAndRegister overload (ModuleLoader.cs:59-65) takes the…"},"1316":{"u":"/docs/onboarding/group-14-module-system-composition.html#the-two-composition-roots-and-the-pipeline-that-seals-them","d":"14. Module System, Composition & Configuration","k":"Onboarding Guide","t":"The two composition roots, and the pipeline that seals them","x":"Service registration itself lives in two static DependencyInjection classes, each using a C extension(IServiceCollection services) block (see primer §4 for the extension(T)…"},"1317":{"u":"/docs/onboarding/group-14-module-system-composition.html#opt-in-platform-features-are-composed-the-same-way","d":"14. Module System, Composition & Configuration","k":"Onboarding Guide","t":"Opt-in platform features are composed the same way","x":"Four capabilities are registered beside the roots rather than inside them, and they share one discipline: registering a feature is not the same as turning it on.…"},"1318":{"u":"/docs/onboarding/group-14-module-system-composition.html#deferred-work-and-the-context-that-travels-with-it","d":"14. Module System, Composition & Configuration","k":"Onboarding Guide","t":"Deferred work, and the context that travels with it","x":"The last two things AddInfrastructure composes are a queue for work a request wants done later, and the machinery that lets whatever drains a queue act as the identity that…"},"1319":{"u":"/docs/onboarding/group-14-module-system-composition.html#assembly-anchors","d":"14. Module System, Composition & Configuration","k":"Onboarding Guide","t":"Assembly anchors","x":"Several pieces of machinery need a Type whose Assembly identifies a layer: Scrutor's FromAssemblyOf () scans, FluentValidation's AddValidatorsFromAssemblyContaining (), and…"},"1320":{"u":"/docs/onboarding/group-14-module-system-composition.html#configuration-binding-the-settings-family","d":"14. Module System, Composition & Configuration","k":"Onboarding Guide","t":"Configuration binding, the Settings family","x":"Everything a host operator tunes arrives as a strongly-typed settings object bound from an appsettings.json section, each carrying a static readonly string SectionName so the…"},"1321":{"u":"/docs/onboarding/group-14-module-system-composition.html#the-two-routing-attributes","d":"14. Module System, Composition & Configuration","k":"Onboarding Guide","t":"The two routing attributes","x":"Two attributes, both in MMCA.Common.Infrastructure, both Inherited = true so they ride down a configuration class hierarchy, encode where an entity is stored declaratively: the…"},"1322":{"u":"/docs/onboarding/group-14-module-system-composition.html#shared-user-use-case-bases-composition-in-the-other-direction","d":"14. Module System, Composition & Configuration","k":"Onboarding Guide","t":"Shared user use-case bases: composition in the other direction","x":"The chapter's last family is composition at the handler level rather than the container level. ADC and Store each own an Identity module, and thirteen of their account use cases…"},"1323":{"u":"/docs/onboarding/group-14-module-system-composition.html#end-to-end-one-hosts-boot","d":"14. Module System, Composition & Configuration","k":"Onboarding Guide","t":"End-to-end: one host's boot","x":"Reading MMCA.ADC/Source/Services/MMCA.ADC.Conference.Service/Program.cs top to bottom shows the whole chapter cooperating. The host calls AddInfrastructure(builder.Configuration)…"},"1324":{"u":"/docs/onboarding/group-15-common-ui-framework.html","d":"15. Common UI Framework (MudBlazor components, theme, base pages)","k":"Onboarding Guide","x":"What this chapter covers. MMCA.Common.UI is the Blazor presentation package, and it is one of the two layers (with Grpc) allowed to reference Shared only: its single…"},"1325":{"u":"/docs/onboarding/group-16-aspire-orchestration.html","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","x":"This chapter covers the hosting boundary: how the distributed MMCA system is composed and run, locally as a single dotnet run, and in Azure Container Apps (ACA) as a set of…"},"1326":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#the-orchestrator-declaring-the-resource-graph","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"The orchestrator: declaring the resource graph","x":"When you run dotnet run --project Source/Hosting/MMCA.ADC.AppHost, Aspire executes Program.cs top to bottom, building a resource model rather than starting anything immediately.…"},"1327":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#broker-parity-rabbitmq-by-default-the-service-bus-emulator-on-demand","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"Broker parity: RabbitMQ by default, the Service Bus emulator on demand","x":"RabbitMQ is a different broker from the one production runs, so anything that only misbehaves on Azure Service Bus (entity-name limits, topic and subscription provisioning,…"},"1328":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#startup-ordering-health-gated-waits-and-the-grpc-deadlock-avoidance-trick","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"Startup ordering, health-gated waits, and the gRPC deadlock-avoidance trick","x":"Aspire's WaitFor builds a startup dependency graph from the resource model: a service does not start until the resources it waits on report healthy. What \"healthy\" means for a…"},"1329":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#the-service-baseline-addservicedefaults","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"The service baseline: AddServiceDefaults()","x":"Every running host calls one method early in Program.cs: AddServiceDefaults() from the single framework-grade Extensions in MMCA.Common.Aspire (Level 11,…"},"1330":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#one-source-of-truth-for-resilience-numbers","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"One source of truth for resilience numbers","x":"The numbers that pipeline uses are not literals in the Aspire package. They live in HttpResilienceDefaults (Level 0,…"},"1331":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#listeners-and-probes-one-kestrel-profile-per-host-shape","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"Listeners and probes: one Kestrel profile per host shape","x":"Before a service can answer a health probe it has to be listening on a protocol the prober speaks, and that is not free when the same port serves inbound gRPC.…"},"1332":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#health-checks-liveness-readiness-and-the-optional-tag","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"Health checks: liveness, readiness, and the \"optional\" tag","x":"MapDefaultEndpoints() (MMCA.Common/Source/Hosting/MMCA.Common.Aspire/Extensions.Health.cs:123) exposes the three-probe surface the platform reads: /health (every check, for…"},"1333":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#telemetry-what-gets-exported-and-what-it-costs","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"Telemetry: what gets exported, and what it costs","x":"ConfigureOpenTelemetry() (MMCA.Common/Source/Hosting/MMCA.Common.Aspire/Extensions.Telemetry.cs:71) wires logging with formatted messages and scopes (:73-77), metrics, and…"},"1334":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#warm-up-defeating-aca-cold-start","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"Warm-up: defeating ACA cold-start","x":"The warm-up subsystem exists for one concrete failure mode: the \"first request fails, second succeeds\" pattern on a CPU-throttled idle ACA replica, where lazy initialization…"},"1335":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#configuration-secrets-the-vault-as-one-more-configuration-source","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"Configuration secrets: the vault as one more configuration source","x":"Connection strings, RSA signing keys and OAuth client secrets have to reach the process somehow, and KeyVaultConfigurationExtensions (Level 0,…"},"1336":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#security-headers-cors-and-the-shared-key-ring-at-the-host-edge","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"Security headers, CORS, and the shared key ring at the host edge","x":"The next boundary in this group hardens the request and response edge. The shared response-header middleware is defined entirely in…"},"1337":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#the-gateway-edge-kit-correlation-rate-limiting-downstream-readiness","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"The gateway edge kit: correlation, rate limiting, downstream readiness","x":"A YARP gateway is the one process every client request passes through, and it is also the one host that has no application container: no DbContext, no module loader, no…"},"1338":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#the-yarp-building-blocks-cluster-profiles-ejection-trace-headers-route-policies","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"The YARP building blocks: cluster profiles, ejection, trace headers, route policies","x":"The route table itself is configuration, not code (ADR-089), and MMCA.Common.Gateway deliberately does not load it: LoadFromConfig (or any other IProxyConfigProvider) stays the…"},"1339":{"u":"/docs/onboarding/group-16-aspire-orchestration.html#how-it-all-fits-at-runtime","d":"16. Aspire Orchestration & Service Defaults","k":"Onboarding Guide","t":"How it all fits at runtime","x":"Putting the pieces in sequence: the AppHost declares the graph, picks a broker once, and injects per-service env vars (WithSQLServerDataSource, WithSelectedBroker,…"},"1340":{"u":"/docs/onboarding/group-17-conference-domain.html","d":"17. ADC Conference - Domain Model & Module Contracts","k":"Onboarding Guide","x":"What this chapter covers. This is the heart of the Atlanta Developers Conference application, the Conference bounded context, the largest and richest domain in MMCA.ADC. It…"},"1341":{"u":"/docs/onboarding/group-17-conference-domain.html#two-packages-one-bounded-context","d":"17. ADC Conference - Domain Model & Module Contracts","k":"Onboarding Guide","t":"Two packages, one bounded context","x":"The Conference context spans two of the module's projects, and the split is deliberate Clean Architecture ([Rubric §3, Clean Architecture]). MMCA.ADC.Conference.Domain holds the…"},"1342":{"u":"/docs/onboarding/group-17-conference-domain.html#ten-aggregates-and-their-ownership-boundaries","d":"17. ADC Conference - Domain Model & Module Contracts","k":"Onboarding Guide","t":"Ten aggregates and their ownership boundaries","x":"An aggregate is a root entity plus the children it exclusively owns; invariants are enforced inside the boundary, and references across aggregates are by ID, never by object…"},"1343":{"u":"/docs/onboarding/group-17-conference-domain.html#the-aggregate-shape-taught-once","d":"17. ADC Conference - Domain Model & Module Contracts","k":"Onboarding Guide","t":"The aggregate shape, taught once","x":"Open any of the roots and you will see the same skeleton; this repetition is the point, and it is what makes the per-type sections that follow read quickly. The shape, using…"},"1344":{"u":"/docs/onboarding/group-17-conference-domain.html#invariants-business-rules-as-testable-units","d":"17. ADC Conference - Domain Model & Module Contracts","k":"Onboarding Guide","t":"Invariants, business rules as testable units","x":"Each aggregate has a co-located static invariant class, EventInvariants (MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Domain/Events/EventInvariants.cs:14),…"},"1345":{"u":"/docs/onboarding/group-17-conference-domain.html#domain-events-and-the-outbox-spine","d":"17. ADC Conference - Domain Model & Module Contracts","k":"Onboarding Guide","t":"Domain events and the outbox spine","x":"Every state-changing method raises a domain event through the inherited AddDomainEvent(...), and the eighteen events come in two shapes with two different base types. The nine…"},"1346":{"u":"/docs/onboarding/group-17-conference-domain.html#the-cross-aggregate-cascade-a-pure-domain-service","d":"17. ADC Conference - Domain Model & Module Contracts","k":"Onboarding Guide","t":"The cross-aggregate cascade: a pure domain service","x":"One business rule cannot live inside a single aggregate: deleting an Event must also delete every Session belonging to it (BR-127), every Sponsor sold against it, every Partner…"},"1347":{"u":"/docs/onboarding/group-17-conference-domain.html#read-models-and-the-ai-decision-support-feature","d":"17. ADC Conference - Domain Model & Module Contracts","k":"Onboarding Guide","t":"Read models and the AI decision-support feature","x":"The largest cluster in Conference.Shared is the DTO layer, the wire contracts that decouple the API from the domain entities ([Rubric §9, API & Contract Design]; ADR-001 chose…"},"1348":{"u":"/docs/onboarding/group-17-conference-domain.html#authorization-vocabulary-and-current-event-selection","d":"17. ADC Conference - Domain Model & Module Contracts","k":"Onboarding Guide","t":"Authorization vocabulary and current-event selection","x":"Two more Shared helpers deserve a mention because they encode policy the whole module relies on. ConferencePermissions…"},"1349":{"u":"/docs/onboarding/group-17-conference-domain.html#crossing-the-module-boundary-contracts-stubs-and-integration-events","d":"17. ADC Conference - Domain Model & Module Contracts","k":"Onboarding Guide","t":"Crossing the module boundary: contracts, stubs, and integration events","x":"Conference does not live alone. Three kinds of connection point join it to other modules, and all live in Conference.Shared so neither side reaches into the other's domain…"},"1350":{"u":"/docs/onboarding/group-17-conference-domain.html#end-to-end-one-organizer-action","d":"17. ADC Conference - Domain Model & Module Contracts","k":"Onboarding Guide","t":"End-to-end: one organizer action","x":"To see the chapter cooperate, follow an organizer renaming a room on an event. The application handler loads the Event aggregate (with its Rooms hydrated by the navigation…"},"1351":{"u":"/docs/onboarding/group-18-conference-application.html","d":"18. ADC Conference - Application & Use Cases","k":"Onboarding Guide","x":"What this chapter covers. This is the application layer of the Conference module, the largest single application assembly in the codebase (this group covers 358 entries in the…"},"1352":{"u":"/docs/onboarding/group-18-conference-application.html#the-vertical-slice-anatomy-of-a-use-case","d":"18. ADC Conference - Application & Use Cases","k":"Onboarding Guide","t":"The vertical-slice anatomy of a use case","x":"Open any feature folder under Sessions/UseCases/, Events/UseCases/, Speakers/UseCases/, Sponsors/UseCases/, Partners/UseCases/, Activities/UseCases/, Categories/UseCases/, or…"},"1353":{"u":"/docs/onboarding/group-18-conference-application.html#manual-mapping-validation-rule-fragments-and-authorization-specifications","d":"18. ADC Conference - Application & Use Cases","k":"Onboarding Guide","t":"Manual mapping, validation rule fragments, and authorization specifications","x":"Three sibling families recur across every aggregate. DTO mappers (SessionDTOMapper, EventDTOMapper, SpeakerDTOMapper, SponsorDTOMapper, PartnerDTOMapper…"},"1354":{"u":"/docs/onboarding/group-18-conference-application.html#query-services-navigation-populators-and-the-composition-root","d":"18. ADC Conference - Application & Use Cases","k":"Onboarding Guide","t":"Query services, navigation populators, and the composition root","x":"Read paths do not get bespoke handlers for the common cases; they go through the framework's generic IEntityQueryService , which supplies filtering, sorting, paging, and field…"},"1355":{"u":"/docs/onboarding/group-18-conference-application.html#event-driven-reactions-domain-and-integration-handlers","d":"18. ADC Conference - Application & Use Cases","k":"Onboarding Guide","t":"Event-driven reactions: domain and integration handlers","x":"The application layer is also where the module reacts to events. The module keeps exactly one domain event handler, and it is the one with a real side effect.…"},"1356":{"u":"/docs/onboarding/group-18-conference-application.html#attendee-facing-read-models-calendar-export-and-nownext","d":"18. ADC Conference - Application & Use Cases","k":"Onboarding Guide","t":"Attendee-facing read models: calendar export and Now/Next","x":"A small cluster of queries serves the public schedule surfaces without going through the generic query service, because their output is not a DTO list. ExportEventCalendarHandler…"},"1357":{"u":"/docs/onboarding/group-18-conference-application.html#session-materials-authorization-as-data-blob-cleanup-as-a-durable-command","d":"18. ADC Conference - Application & Use Cases","k":"Onboarding Guide","t":"Session materials: authorization as data, blob cleanup as a durable command","x":"Speakers publish their slides and links against their own sessions, which makes the SessionAssets slice the one write surface in this module where the right to act is data rather…"},"1358":{"u":"/docs/onboarding/group-18-conference-application.html#the-sessionize-import-strategy-pattern-orchestration","d":"18. ADC Conference - Application & Use Cases","k":"Onboarding Guide","t":"The Sessionize import: Strategy-pattern orchestration","x":"The single most involved use case is importing a conference agenda from Sessionize.com. Sessionize returns one JSON payload covering five interdependent entity families…"},"1359":{"u":"/docs/onboarding/group-18-conference-application.html#decision-support-ai-scoring-and-content-analytics","d":"18. ADC Conference - Application & Use Cases","k":"Onboarding Guide","t":"Decision support: AI scoring and content analytics","x":"The last cluster is session-selection decision support, analytics that help organizers triage proposals. GetSessionSelectionDashboardHandler is a composite query: it validates…"},"1360":{"u":"/docs/onboarding/group-19-conference-infrastructure.html","d":"19. ADC Conference - Infrastructure & Persistence","k":"Onboarding Guide","x":"What this chapter covers. This is the adapter layer of the Conference module, the place where the engine-agnostic domain meets concrete technology. Three concerns live here: (1)…"},"1361":{"u":"/docs/onboarding/group-19-conference-infrastructure.html#engine-agnostic-entities-engine-chosen-by-the-config-base-class","d":"19. ADC Conference - Infrastructure & Persistence","k":"Onboarding Guide","t":"Engine-agnostic entities, engine chosen by the config base class","x":"The most important idea in this chapter is one the entities themselves never express: what storage engine each entity uses is decided here, not in the domain. A Conference domain…"},"1362":{"u":"/docs/onboarding/group-19-conference-infrastructure.html#each-config-inherits-the-cross-cutting-behavior-then-adds-entity-specifics","d":"19. ADC Conference - Infrastructure & Persistence","k":"Onboarding Guide","t":"Each config inherits the cross-cutting behavior, then adds entity specifics","x":"Every configuration's Configure method begins with base.Configure(builder) (for example SessionConfiguration.cs:18, ActivityConfiguration.cs:17) and then adds its own mappings.…"},"1363":{"u":"/docs/onboarding/group-19-conference-infrastructure.html#dbsets-the-context-shape-and-how-the-configurations-are-actually-found","d":"19. ADC Conference - Infrastructure & Persistence","k":"Onboarding Guide","t":"DbSets, the context shape, and how the configurations are actually found","x":"ModuleApplicationDbContext (MMCA.ADC.Conference.Infrastructure/Persistence/DbContexts/ModuleApplicationDbContext.cs:22) is the Conference module's abstract DbContext. It does one…"},"1364":{"u":"/docs/onboarding/group-19-conference-infrastructure.html#seeding-two-real-events-always-sample-data-only-in-dev-and-ci","d":"19. ADC Conference - Infrastructure & Persistence","k":"Onboarding Guide","t":"Seeding: two real events always, sample data only in dev and CI","x":"ConferenceModuleDbSeeder (MMCA.ADC.Conference.Infrastructure/Persistence/DbContexts/Seeding/ConferenceModuleDbSeeder.cs:27) derives from the framework's DbSeeder and runs after…"},"1365":{"u":"/docs/onboarding/group-19-conference-infrastructure.html#the-sessionize-adapter","d":"19. ADC Conference - Infrastructure & Persistence","k":"Onboarding Guide","t":"The Sessionize adapter","x":"SessionizeService (MMCA.ADC.Conference.Infrastructure/Events/Sessionize/SessionizeService.cs:12) is a deliberately thin HTTP client: the whole class is one method…"},"1366":{"u":"/docs/onboarding/group-19-conference-infrastructure.html#the-ai-scoring-adapter-and-its-response-guardrail","d":"19. ADC Conference - Infrastructure & Persistence","k":"Onboarding Guide","t":"The AI scoring adapter and its response guardrail","x":"SessionScoringService (MMCA.ADC.Conference.Infrastructure/Sessions/Scoring/SessionScoringService.cs:46) is the richer of the two adapters: it scores one session proposal against…"},"1367":{"u":"/docs/onboarding/group-19-conference-infrastructure.html#the-scoring-run-is-durable-now-and-this-layer-keeps-one-adapter-inside-it","d":"19. ADC Conference - Infrastructure & Persistence","k":"Onboarding Guide","t":"The scoring run is durable now, and this layer keeps one adapter inside it","x":"A multi-minute paid AI pass triggered from an HTTP POST used to be this chapter's biggest piece of machinery: a hosted BackgroundService draining an in-memory queue, plus a…"},"1368":{"u":"/docs/onboarding/group-19-conference-infrastructure.html#di-wiring-and-what-it-deliberately-no-longer-registers","d":"19. ADC Conference - Infrastructure & Persistence","k":"Onboarding Guide","t":"DI wiring, and what it deliberately no longer registers","x":"DependencyInjection (MMCA.ADC.Conference.Infrastructure/DependencyInjection.cs:18) is a single extension(IServiceCollection) block (the codebase's standard DI-registration idiom,…"},"1369":{"u":"/docs/onboarding/group-19-conference-infrastructure.html#how-it-fits-together-at-runtime","d":"19. ADC Conference - Infrastructure & Persistence","k":"Onboarding Guide","t":"How it fits together at runtime","x":"Three flows tie the chapter together. Persistence flow: a Conference command handler mutates an aggregate and the unit of work saves; that resolves the concrete…"},"1370":{"u":"/docs/onboarding/group-20-conference-api-grpc.html","d":"20. ADC Conference - API, gRPC Contracts & Service Host","k":"Onboarding Guide","x":"What this chapter covers. This is the edge of the Conference bounded context: the layer that turns the Conference domain (G17) and its CQRS slices (G18) into a running HTTP +…"},"1371":{"u":"/docs/onboarding/group-20-conference-api-grpc.html#the-controller-hierarchy-almost-everything-is-inherited","d":"20. ADC Conference - API, gRPC Contracts & Service Host","k":"Onboarding Guide","t":"The controller hierarchy, almost everything is inherited","x":"The Conference API exposes twenty-three controllers, and the striking thing about them is how little code each carries. They split into three structural families, all built on…"},"1372":{"u":"/docs/onboarding/group-20-conference-api-grpc.html#one-read-hook-per-controller-not-one-filter-per-action","d":"20. ADC Conference - API, gRPC Contracts & Service Host","k":"Onboarding Guide","t":"One read hook per controller, not one filter per action","x":"The single most important thing to learn before editing any file here is where row scoping lives. It is not threaded through each action: the framework base declares one hook,…"},"1373":{"u":"/docs/onboarding/group-20-conference-api-grpc.html#authorization-at-the-edge-three-shapes-not-one","d":"20. ADC Conference - API, gRPC Contracts & Service Host","k":"Onboarding Guide","t":"Authorization at the edge, three shapes not one","x":"Authorization is capability-based by default but not uniform, and the differences are the interesting part. Most write-bearing controllers carry a class-level…"},"1374":{"u":"/docs/onboarding/group-20-conference-api-grpc.html#the-request-records-the-inbound-write-shapes","d":"20. ADC Conference - API, gRPC Contracts & Service Host","k":"Onboarding Guide","t":"The request records, the inbound write shapes","x":"Several controllers declare small record class request types alongside themselves, co-located in the same file: AddRoomRequest and UpdateRoomRequest…"},"1375":{"u":"/docs/onboarding/group-20-conference-api-grpc.html#where-the-generic-shape-gives-way-filters-warnings-calendars-and-conditional-writes","d":"20. ADC Conference - API, gRPC Contracts & Service Host","k":"Onboarding Guide","t":"Where the generic shape gives way: filters, warnings, calendars and conditional writes","x":"SessionsController shows best how a controller earns its overrides. Every read action is [AllowAnonymous] and [OutputCache(PolicyName = \"SessionsCache\")]…"},"1376":{"u":"/docs/onboarding/group-20-conference-api-grpc.html#two-more-deviations-versioning-and-decision-support","d":"20. ADC Conference - API, gRPC Contracts & Service Host","k":"Onboarding Guide","t":"Two more deviations, versioning and decision support","x":"ServiceInfoController exists to prove the API-versioning machinery works beyond a single version ([Rubric §9, API & Contract Design]). It is a one-member shell over Common's…"},"1377":{"u":"/docs/onboarding/group-20-conference-api-grpc.html#the-module-entry-point-and-seeder-how-conference-plugs-in","d":"20. ADC Conference - API, gRPC Contracts & Service Host","k":"Onboarding Guide","t":"The module entry point and seeder, how Conference plugs in","x":"ConferenceModule is the Conference implementation of IModule. It is tiny by design: Register(...) calls the DependencyInjection extension's AddConferenceModule(...)…"},"1378":{"u":"/docs/onboarding/group-20-conference-api-grpc.html#the-grpc-edge-conference-as-both-server-and-client","d":"20. ADC Conference - API, gRPC Contracts & Service Host","k":"Onboarding Guide","t":"The gRPC edge, Conference as both server and client","x":"When Conference runs in its own process, two of its in-process collaborations must cross a network boundary, and both are handled by the G13 transport boundary (Result over the…"},"1379":{"u":"/docs/onboarding/group-20-conference-api-grpc.html#the-service-host-kestrel-first-then-caching-and-warm-up","d":"20. ADC Conference - API, gRPC Contracts & Service Host","k":"Onboarding Guide","t":"The service host: Kestrel first, then caching and warm-up","x":"The MMCA.ADC.Conference.Service Program.cs boots only the Conference module. Kestrel is configured before anything else, and the whole of it is one line:…"},"1380":{"u":"/docs/onboarding/group-20-conference-api-grpc.html#the-runtime-picture-one-host-two-transports","d":"20. ADC Conference - API, gRPC Contracts & Service Host","k":"Onboarding Guide","t":"The runtime picture, one host, two transports","x":"After module discovery (Program.cs:367-371) the host wires the Engagement gRPC client (:349), the broker (AddBrokerMessaging registering the UserRegistered integration-event…"},"1381":{"u":"/docs/onboarding/group-21-conference-ui.html","d":"21. ADC Conference - UI","k":"Onboarding Guide","x":"What this chapter covers. This is the consumer half of the \"write-once UI, render everywhere\" story (primer §2): the Blazor pages, page-local collaborators, and per-entity HTTP…"},"1382":{"u":"/docs/onboarding/group-21-conference-ui.html#the-layering-inside-the-ui-a-page-never-touches-httpclient","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"The layering inside the UI: a page never touches HttpClient","x":"Each page is a .razor + .razor.cs code-behind pair that depends on a UI service interface, never on HttpClient and never on the API's internals. The ten CRUD-shaped entities…"},"1383":{"u":"/docs/onboarding/group-21-conference-ui.html#the-list-pages-two-bases-one-recipe","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"The list pages: two bases, one recipe","x":"Twelve list screens hang off DataGridListPageBase , which supplies server-side paging against MudDataGrid , cancellation lifecycle, loading and load-failed state, filter and sort…"},"1384":{"u":"/docs/onboarding/group-21-conference-ui.html#detail-pages-form-models-and-one-declaration-of-the-rules","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"Detail pages, form models, and one declaration of the rules","x":"The organizer detail pages have no ADC-local base: all nine inherit Common's DetailPageBase (MMCA.Common/Source/Presentation/MMCA.Common.UI/Pages/Common/DetailPageBase.cs:26)…"},"1385":{"u":"/docs/onboarding/group-21-conference-ui.html#container-and-presentational-split-and-page-local-collaborators","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"Container and presentational split, and page-local collaborators","x":"The behaviour-heavy screens do not keep everything in one code-behind: the page stays the container (data fetching, filter and paging state, service calls) and hands rendering to…"},"1386":{"u":"/docs/onboarding/group-21-conference-ui.html#child-and-join-entities-a-thin-postdelete-base","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"Child-and-join entities: a thin POST/DELETE base","x":"Sessions, speakers, and events own join relationships (a speaker added to a session, a category item to a speaker) that the generic CRUD base cannot model, because the write…"},"1387":{"u":"/docs/onboarding/group-21-conference-ui.html#display-enrichment-lookups-the-getall-vs-getbyid-populator-gap-worked-around-in-the-ui","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"Display-enrichment lookups: the GetAll-vs-GetById populator gap, worked around in the UI","x":"Because the API's list endpoints do not always populate every cross-entity navigation, several pages need a cheap id-to-name map to render speaker names beside a session or an…"},"1388":{"u":"/docs/onboarding/group-21-conference-ui.html#three-feature-areas-that-go-beyond-crud","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"Three feature areas that go beyond CRUD","x":"First, the speaker self-service dashboard. SpeakerDashboard sits behind a plain [Authorize] attribute and is gated on the speakerid JWT claim, showing the linked speaker's…"},"1389":{"u":"/docs/onboarding/group-21-conference-ui.html#session-materials-a-resource-deliberately-not-shaped-as-crud","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"Session materials, a resource deliberately not shaped as CRUD","x":"Speakers publish the decks, handouts, and links that go with their own sessions, and anyone downloads them from the public session page (ADR-123, speaker session assets). This is…"},"1390":{"u":"/docs/onboarding/group-21-conference-ui.html#session-selection-decision-support-the-asynchronous-edge","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"Session-selection decision support, the asynchronous edge","x":"The most behaviour-rich page is the organizer-only SessionSelectionDashboard (Pages/Sessions/Selection/SessionSelectionDashboard.razor.cs:16), which renders category…"},"1391":{"u":"/docs/onboarding/group-21-conference-ui.html#public-versus-authenticated-rendering-and-the-offline-first-path","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"Public versus authenticated rendering, and the offline-first path","x":"A recurring [Rubric §11, Security] pattern: the same conference entity is exposed through two page families. No page under Pages/Public/ carries an @attribute [Authorize] at all,…"},"1392":{"u":"/docs/onboarding/group-21-conference-ui.html#sponsors-partners-and-activities-three-feature-areas-in-miniature","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"Sponsors, partners, and activities, three feature areas in miniature","x":"The sponsor surface is a compact tour of every pattern above. Organizers manage the roster through SponsorList / SponsorCreate / SponsorDetail: the list is an…"},"1393":{"u":"/docs/onboarding/group-21-conference-ui.html#the-landing-page","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"The landing page","x":"ADCHome is the conference front door, shared by the web and MAUI heads; both keep their own copy of the editorial assets under wwwroot/images, so the default serves both and…"},"1394":{"u":"/docs/onboarding/group-21-conference-ui.html#routes-navigation-and-localized-strings","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"Routes, navigation, and localized strings","x":"All paths are centralized in ConferenceRoutePaths, a static catalogue of literal routes and id-parameterized builder methods (EventDetails(id), PublicSessionDetails(id),…"},"1395":{"u":"/docs/onboarding/group-21-conference-ui.html#how-it-all-plugs-into-the-shell","d":"21. ADC Conference - UI","k":"Onboarding Guide","t":"How it all plugs into the shell","x":"Two registration types wire the area in. ConferenceUIModule implements Common's IUIModule (the front-end counterpart of the IModule back-end contract): it declares the module's…"},"1396":{"u":"/docs/onboarding/group-22-engagement-module.html","d":"22. ADC Engagement Module (Session Bookmarks)","k":"Onboarding Guide","x":"What this group covers. Engagement is the ADC bounded context that holds everything an attendee does at the conference beyond browsing the catalog. Four capability families live…"},"1397":{"u":"/docs/onboarding/group-23-engagement-live-layer.html","d":"23. ADC Engagement Live Layer (Real-Time Polls & Session Q&A)","k":"Onboarding Guide","x":"What this chapter covers. This is the conference-day layer of the Engagement bounded context: the features that only matter while an event is actually happening in the room.…"},"1398":{"u":"/docs/onboarding/group-23-engagement-live-layer.html#the-two-aggregates-and-their-invariants","d":"23. ADC Engagement Live Layer (Real-Time Polls & Session Q&A)","k":"Onboarding Guide","t":"The two aggregates and their invariants","x":"Both aggregates are sealed AuditableAggregateRootEntity subclasses that follow the framework's factory-plus-Result discipline (primer §2). LivePoll holds an EventId, an optional…"},"1399":{"u":"/docs/onboarding/group-23-engagement-live-layer.html#the-write-path-and-where-the-realtime-broadcast-actually-happens","d":"23. ADC Engagement Live Layer (Real-Time Polls & Session Q&A)","k":"Onboarding Guide","t":"The write path, and where the realtime broadcast actually happens","x":"Each operation is a vertical slice under Application/{LivePollsSessionQuestions}/UseCases/{Op}/. The three lifecycle commands do not hand-roll their load-mutate-save sequence at…"},"1400":{"u":"/docs/onboarding/group-23-engagement-live-layer.html#one-websocket-one-publisher-port-and-a-cross-service-ingress","d":"23. ADC Engagement Live Layer (Real-Time Polls & Session Q&A)","k":"Onboarding Guide","t":"One WebSocket, one publisher port, and a cross-service ingress","x":"The transport itself is framework-owned (ADR-039, Group 10). The single NotificationHub carries both durable notifications and channel events on one connection, and the…"},"1401":{"u":"/docs/onboarding/group-23-engagement-live-layer.html#the-read-path-and-how-the-ui-reacts","d":"23. ADC Engagement Live Layer (Real-Time Polls & Session Q&A)","k":"Onboarding Guide","t":"The read path and how the UI reacts","x":"Reads do not go through the generic entity-query machinery; the live views need shaped projections. LivePollResultsBuilder…"},"1402":{"u":"/docs/onboarding/group-23-engagement-live-layer.html#authorization-feature-gating-and-the-cross-service-dependency-on-conference","d":"23. ADC Engagement Live Layer (Real-Time Polls & Session Q&A)","k":"Onboarding Guide","t":"Authorization, feature gating, and the cross-service dependency on Conference","x":"Both controllers, LivePollsController (MMCA.ADC.Engagement.API/Controllers/LivePollsController.cs:42) and SessionQuestionsController…"},"1403":{"u":"/docs/onboarding/group-24-identity-module.html","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","x":"What this chapter covers. This is the Identity bounded context of MMCA.ADC, the module that owns who a person is across every ADC surface: web, WebAssembly, and MAUI. It is a…"},"1404":{"u":"/docs/onboarding/group-24-identity-module.html#projects-one-bounded-context","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"Projects, one bounded context","x":"The module is split along the standard Clean Architecture layering ([Rubric §3, Clean Architecture]), each project pinned by a trivial AssemblyReference / ClassReference anchor…"},"1405":{"u":"/docs/onboarding/group-24-identity-module.html#the-user-aggregate-credentials-profile-and-cross-context-links-in-one-root","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"The User aggregate: credentials, profile, and cross-context links in one root","x":"User (MMCA.ADC/Source/Modules/Identity/MMCA.ADC.Identity.Domain/Users/User.cs:34) is the only aggregate root in the module, and it carries more responsibility than most: it is…"},"1406":{"u":"/docs/onboarding/group-24-identity-module.html#authentication-a-thin-subclass-over-the-shared-engine","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"Authentication: a thin subclass over the shared engine","x":"The login / registration / refresh / revocation workflow is not re-implemented here. It lives in AuthenticationServiceBase (G08), which owns the validate-first flow, the lockout…"},"1407":{"u":"/docs/onboarding/group-24-identity-module.html#password-recovery-the-anonymous-half-of-the-credential-lifecycle","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"Password recovery: the anonymous half of the credential lifecycle","x":"PUT /Auth/password only serves a user who can already sign in. The recovery pair that serves one who cannot is a second, anonymous vertical, and it is assembled the same way: two…"},"1408":{"u":"/docs/onboarding/group-24-identity-module.html#email-confirmation-proving-the-address-is-reachable","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"Email confirmation: proving the address is reachable","x":"ADC asks a new account to prove its address, and deliberately does not gate sign-in on the answer: Authentication:EmailConfirmation:RequireConfirmedEmail is false…"},"1409":{"u":"/docs/onboarding/group-24-identity-module.html#administration-accounts-roles-and-the-capability-map","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"Administration: accounts, roles, and the capability map","x":"The organizer-facing administration surface is a framework surface with ADC vocabulary plugged into it. UsersAdminController (UsersAdminController.cs:25) subclasses the framework…"},"1410":{"u":"/docs/onboarding/group-24-identity-module.html#the-privacy-pair-export-and-erasure","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"The privacy pair: export and erasure","x":"Two use cases make this module the codebase's clearest [Rubric §30, Compliance / Privacy / Data Governance] story, and both are thin ADC specializations of a G14 base. The…"},"1411":{"u":"/docs/onboarding/group-24-identity-module.html#avatars-the-third-mutating-slice","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"Avatars: the third mutating slice","x":"The avatar trio is a small but complete example of a file-handling slice ([Rubric §11, Security] at the content boundary, ADR-045). UsersController caps the upload in two places:…"},"1412":{"u":"/docs/onboarding/group-24-identity-module.html#persistence-seeding-and-the-disabled-stub","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"Persistence, seeding, and the disabled stub","x":"ModuleApplicationDbContext (ModuleApplicationDbContext.cs:15) is the abstract, engine-agnostic context declaring the single Users set (:22); the concrete per-engine class…"},"1413":{"u":"/docs/onboarding/group-24-identity-module.html#crossing-the-service-boundary-grpc-and-integration-events","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"Crossing the service boundary: gRPC and integration events","x":"Identity talks to its peers two ways, and both live in Shared and Contracts so neither side reaches into the other's domain ([Rubric §7, Microservices Readiness]). Synchronously,…"},"1414":{"u":"/docs/onboarding/group-24-identity-module.html#the-ui-edge","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"The UI edge","x":"The Blazor surface is registered as an IdentityUIModule (MMCA.ADC.Identity.UI/IdentityUIModule.cs:15), an IUIModule descriptor that contributes three NavItems as resource keys,…"},"1415":{"u":"/docs/onboarding/group-24-identity-module.html#end-to-end-one-registration","d":"24. ADC Identity Module (Users, Profiles, GDPR Export/Erasure)","k":"Onboarding Guide","t":"End-to-end: one registration","x":"To see the chapter cooperate, follow a new attendee signing up. AuthController receives the register POST, captures the client IP for BR-213 rate limiting and the user-agent for…"},"1416":{"u":"/docs/onboarding/group-25-adc-host-composition.html","d":"25. ADC Application Host, UI Shell & Cross-Module Composition","k":"Onboarding Guide","x":"What this chapter covers. Every ADC module described so far (Conference, Engagement, Identity, Notification) is consumed somewhere. This chapter is that somewhere: the client…"},"1417":{"u":"/docs/onboarding/group-26-device-capability-layer.html","d":"26. Device Capability Abstraction Layer (Native Contracts, MAUI, Browser & Fallback Adapters)","k":"Onboarding Guide","x":"What this chapter covers. One Blazor component library in MMCA.Common.UI renders on three very different heads: Blazor Server (server-side prerender plus interactive Server…"},"1418":{"u":"/docs/onboarding/group-27-common-ai-integration.html","d":"27. Common AI Integration","k":"Onboarding Guide","x":"What this chapter covers. This group is the framework's language-model boundary: the optional MMCA.Common.AI package that turns a call to an LLM provider into an ordinary,…"},"1419":{"u":"/docs/onboarding/group-27-common-ai-integration.html#the-configuration-surface-is-the-contract","d":"27. Common AI Integration","k":"Onboarding Guide","t":"The configuration surface is the contract","x":"AiSettings (MMCA.Common/Source/Core/MMCA.Common.AI/AiSettings.cs:22) binds from the Ai section (AiSettings.cs:25) and holds every knob the package has: Enabled (:39), Provider…"},"1420":{"u":"/docs/onboarding/group-27-common-ai-integration.html#the-provider-is-a-registered-factory-not-a-type-the-package-names","d":"27. Common AI Integration","k":"Onboarding Guide","t":"The provider is a registered factory, not a type the package names","x":"IAiProviderFactory (MMCA.Common/Source/Core/MMCA.Common.AI/Providers/IAiProviderFactory.cs:20) is the whole provider boundary: a Name a configuration file selects it by (:26) and…"},"1421":{"u":"/docs/onboarding/group-27-common-ai-integration.html#one-entry-point-one-pipeline-outermost-first","d":"27. Common AI Integration","k":"Onboarding Guide","t":"One entry point, one pipeline, outermost first","x":"AiServiceCollectionExtensions (MMCA.Common/Source/Core/MMCA.Common.AI/DependencyInjection.cs:77) is the only composition surface. It exposes two AddMmcaChatClient overloads…"},"1422":{"u":"/docs/onboarding/group-27-common-ai-integration.html#the-outer-layer-what-a-call-is-allowed-to-do","d":"27. Common AI Integration","k":"Onboarding Guide","t":"The outer layer: what a call is allowed to do","x":"BoundedChatClient (MMCA.Common/Source/Core/MMCA.Common.AI/Chat/BoundedChatClient.cs:65) is a DelegatingChatClient that applies five bounds (output tokens, wall clock, tool use,…"},"1423":{"u":"/docs/onboarding/group-27-common-ai-integration.html#the-middle-layer-what-the-call-may-say-and-what-it-may-answer","d":"27. Common AI Integration","k":"Onboarding Guide","t":"The middle layer: what the call may say, and what it may answer","x":"Bounds are configuration, so the framework can decide them. Content is not, so it does not. IChatGuardrail (MMCA.Common/Source/Core/MMCA.Common.AI/Chat/IChatGuardrail.cs:21) is…"},"1424":{"u":"/docs/onboarding/group-27-common-ai-integration.html#the-two-content-policies-the-framework-does-ship","d":"27. Common AI Integration","k":"Onboarding Guide","t":"The two content policies the framework does ship","x":"PiiRedactionGuardrail (MMCA.Common/Source/Core/MMCA.Common.AI/Guardrails/PiiRedactionGuardrail.cs:39) is the stated exception to \"extension points and no policy\": an email…"},"1425":{"u":"/docs/onboarding/group-27-common-ai-integration.html#the-inner-layer-what-the-call-actually-cost","d":"27. Common AI Integration","k":"Onboarding Guide","t":"The inner layer: what the call actually cost","x":"UsageRecordingChatClient (MMCA.Common/Source/Core/MMCA.Common.AI/Chat/UsageRecordingChatClient.cs:38) sits inside the guardrails and reports the provider's own numbers. On the…"},"1426":{"u":"/docs/onboarding/group-27-common-ai-integration.html#the-prompt-is-a-versioned-artifact","d":"27. Common AI Integration","k":"Onboarding Guide","t":"The prompt is a versioned artifact","x":"PromptContract (MMCA.Common/Source/Core/MMCA.Common.AI/PromptContract.cs:23) is a sealed record of the four things that decide what a model will answer: Name, Version, Model and…"},"1427":{"u":"/docs/onboarding/group-27-common-ai-integration.html#where-it-runs-today-and-how-it-is-tested","d":"27. Common AI Integration","k":"Onboarding Guide","t":"Where it runs today, and how it is tested","x":"Exactly one feature in the workspace calls a model: ADC's organizer-facing session scoring. The Conference service host reads one secret, Ai:ApiKey, and derives Ai:Enabled from…"},"1428":{"u":"/docs/onboarding/group-28-testing-infrastructure.html","d":"28. Testing & Quality Infrastructure","k":"Onboarding Guide","x":"What this group covers. Everything the codebase uses to prove itself: the five reusable test-support packages that ship out of MMCA.Common/Source/Hosting (MMCA.Common.Testing,…"},"1429":{"u":"/docs/onboarding/group-28-testing-infrastructure.html#integration-tests-a-real-host-a-throwaway-database-a-per-test-reset","d":"28. Testing & Quality Infrastructure","k":"Onboarding Guide","t":"Integration tests: a real host, a throwaway database, a per-test reset","x":"The integration tier boots the actual application, not a mock of it. The abstraction at its center is IIntegrationTestFixture…"},"1430":{"u":"/docs/onboarding/group-28-testing-infrastructure.html#orchestration-smoke-tests-booting-a-real-apphost","d":"28. Testing & Quality Infrastructure","k":"Onboarding Guide","t":"Orchestration smoke tests: booting a real AppHost","x":"Every tier above boots hosts directly, which means none of them ever runs the file that states how a whole stack fits together. The AppHost declares the project resources, the…"},"1431":{"u":"/docs/onboarding/group-28-testing-infrastructure.html#architecture-fitness-functions-rules-that-gate-the-build","d":"28. Testing & Quality Infrastructure","k":"Onboarding Guide","t":"Architecture fitness functions: rules that gate the build","x":"The layering and DDD conventions this codebase commits to are not left to code review, they are executed as tests. The reusable rule library lives in…"},"1432":{"u":"/docs/onboarding/group-28-testing-infrastructure.html#component-tests-real-mudblazor-faked-edges","d":"28. Testing & Quality Infrastructure","k":"Onboarding Guide","t":"Component tests: real MudBlazor, faked edges","x":"The bUnit tier renders a single Blazor component in-process with its real dependencies but stubbed network and auth. BunitComponentTestBase…"},"1433":{"u":"/docs/onboarding/group-28-testing-infrastructure.html#end-to-end-tests-a-real-browser-accessibility-and-performance-as-gates","d":"28. Testing & Quality Infrastructure","k":"Onboarding Guide","t":"End-to-end tests: a real browser, accessibility and performance as gates","x":"The E2E tier drives a real browser through Playwright. PlaywrightFixture (MMCA.Common.Testing.E2E/Infrastructure/PlaywrightFixture.cs:6) is an xUnit collection fixture (its…"},"1434":{"u":"/docs/onboarding/group-28-testing-infrastructure.html#the-gallery-harness","d":"28. Testing & Quality Infrastructure","k":"Onboarding Guide","t":"The Gallery harness","x":"Component and E2E coverage of MMCA.Common's own UI needs a page to render, but the framework is not a runnable app. MMCA.Common.UI.Gallery is a deliberately backend-less Blazor…"},"1435":{"u":"/docs/onboarding/group-28-testing-infrastructure.html#evaluating-a-nondeterministic-dependency-the-ai-scoring-golden-corpus","d":"28. Testing & Quality Infrastructure","k":"Onboarding Guide","t":"Evaluating a nondeterministic dependency: the AI-scoring golden corpus","x":"Every tier above assumes a deterministic system under test. ADC's session-scoring judge is not one: it asks a hosted model for a structured score, and the same prompt can return…"},"1436":{"u":"/docs/onboarding/group-28-testing-infrastructure.html#contract-pipeline-and-benchmark-bases","d":"28. Testing & Quality Infrastructure","k":"Onboarding Guide","t":"Contract, pipeline, and benchmark bases","x":"The last family pins guarantees that live in the composition of the stack rather than in any one type, and it is the subject of ADR-058: these suites ship in MMCA.Common.Testing…"},"1437":{"u":"/docs/onboarding/group-28-testing-infrastructure.html#per-project-test-rollup","d":"28. Testing & Quality Infrastructure","k":"Onboarding Guide","t":"Per-project test rollup","x":"The remaining test types in G25 are logged here by project rather than as individual sections (per the TESTS note): each project below is a Microsoft Testing Platform / xUnit v3…"},"1438":{"u":"/docs/onboarding/group-28-testing-infrastructure.html#test-suites-by-module","d":"28. Testing & Quality Infrastructure","k":"Onboarding Guide","t":"Test suites by module","x":"--- ⬅ Common AI Integration • Index • Coverage audit ➡"},"1439":{"u":"/docs/onboarding/devops-aspire.html","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","x":"This chapter teaches how the MMCA.ADC system goes from a single dotnet run on your workstation to a running stack of six .NET processes plus four containers: databases, a broker,…"},"1440":{"u":"/docs/onboarding/devops-aspire.html#the-one-command-local-run","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"The one-command local run","x":"That command brings up everything the application needs locally: four SQL Server databases, Redis, RabbitMQ with management UI, a MailDev SMTP interceptor, four extracted…"},"1441":{"u":"/docs/onboarding/devops-aspire.html#mmcaadcapphost-the-orchestration-project","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"MMCA.ADC.AppHost, the orchestration project","x":"Source file: MMCA.ADC/Source/Hosting/MMCA.ADC.AppHost/Program.cs AppHost-local helper: MMCA.ADC/Source/Hosting/MMCA.ADC.AppHost/BrokerSelection.cs Framework extension helpers:…"},"1442":{"u":"/docs/onboarding/devops-aspire.html#where-service-defaults-come-from-mmcacommonaspire-not-a-local-project","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"Where service defaults come from, MMCA.Common.Aspire, not a local project","x":"There is no MMCA.ADC.ServiceDefaults project. Source/Hosting/ contains the AppHost and the four per-service migrations assemblies, nothing else. The conventional Aspire…"},"1443":{"u":"/docs/onboarding/devops-aspire.html#mmcacommonaspire-the-framework-service-defaults-package","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"MMCA.Common.Aspire, the framework service-defaults package","x":"Source: MMCA.Common/Source/Hosting/MMCA.Common.Aspire/Extensions.cs Tags: .../HealthCheckTags.cs Telemetry: .../Telemetry/OutboxPollFilterProcessor.cs Security:…"},"1444":{"u":"/docs/onboarding/devops-aspire.html#mmcacommonaspirehosting-the-apphost-extensions-package","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"MMCA.Common.Aspire.Hosting, the AppHost extensions package","x":"Source: MMCA.Common/Source/Hosting/MMCA.Common.Aspire.Hosting/ Files: Extensions.cs, H2cHealthCheckExtensions.cs, H2cEndpointHealthCheck.cs, ServiceBusEmulatorResource.cs This…"},"1445":{"u":"/docs/onboarding/devops-aspire.html#the-six-dockerfiles","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"The six Dockerfiles","x":"All six Dockerfiles share the same multi-stage structure (base, build, publish, final) and the same base images. None build the AppHost: it is a local-only orchestration…"},"1446":{"u":"/docs/onboarding/devops-aspire.html#local-to-cloud-parity","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"Local-to-cloud parity","x":"The AppHost topology maps directly to the Azure infrastructure provisioned by infra/main.bicep. The table below cross-references the local resource with its Azure equivalent: The…"},"1447":{"u":"/docs/onboarding/devops-aspire.html#the-yarp-gateways-role","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"The YARP Gateway's role","x":"The gateway (Source/Hosts/MMCA.ADC.Gateway) is a pure YARP reverse proxy. It has no DbContext, no ModuleLoader, no REST controllers, and no broker connection. Its Program.cs is…"},"1448":{"u":"/docs/onboarding/devops-aspire.html#startup-ordering-summary","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"Startup ordering summary","x":"The health-based WaitFor chain imposes this ordering. Two things shape it that are not visible at the call site: three of the four services wait on Identity without any explicit…"},"1449":{"u":"/docs/onboarding/devops-aspire.html#the-apphost-composition-smoke-test","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"The AppHost composition smoke test","x":"MMCA.ADC/Tests/Integration/MMCA.ADC.AppHost.SmokeTests/AdcAppHostFixture.cs, MMCA.ADC/Tests/Integration/MMCA.ADC.AppHost.SmokeTests/AdcAppHostSmokeTests.cs Everything above is…"},"1450":{"u":"/docs/onboarding/devops-aspire.html#rubric-category-index-for-this-chapter","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"Rubric category index for this chapter","x":"---"},"1451":{"u":"/docs/onboarding/devops-aspire.html#not-determinable-from-source","d":"Aspire Orchestration and Containers","k":"Onboarding Guide","t":"Not determinable from source","x":"- The specific integration events that flow over the broker (UserRegistered, SpeakerLinkedToUser, SpeakerUnlinkedFromUser) are cited from AppHost inline comments…"},"1452":{"u":"/docs/onboarding/devops-cicd.html","d":"CI/CD and Operations","k":"Onboarding Guide","x":"This chapter walks the GitHub Actions workflows that govern MMCA, from the framework's continuous integration and lockstep NuGet release in MMCA.Common, through the ADC…"},"1453":{"u":"/docs/onboarding/devops-cicd.html#mmcacommon-ciyml","d":"CI/CD and Operations","k":"Onboarding Guide","t":"MMCA.Common, ci.yml","x":"File: MMCA.Common/.github/workflows/ci.yml The continuous-integration workflow for the MMCA.Common framework. Because the published packages (the authoritative id list and count…"},"1454":{"u":"/docs/onboarding/devops-cicd.html#mmcacommon-releaseyml","d":"CI/CD and Operations","k":"Onboarding Guide","t":"MMCA.Common, release.yml","x":"File: MMCA.Common/.github/workflows/release.yml The lockstep NuGet release workflow. When a maintainer pushes a vX.Y.Z git tag, this workflow deterministically derives the…"},"1455":{"u":"/docs/onboarding/devops-cicd.html#mmcaadc-deployyml","d":"CI/CD and Operations","k":"Onboarding Guide","t":"MMCA.ADC, deploy.yml","x":"File: MMCA.ADC/.github/workflows/deploy.yml The primary CI/CD pipeline for the Atlanta Developers Conference application. It runs on every push to main, on every pull request…"},"1456":{"u":"/docs/onboarding/devops-cicd.html#mmcaadc-e2eyml","d":"CI/CD and Operations","k":"Onboarding Guide","t":"MMCA.ADC, e2e.yml","x":"File: MMCA.ADC/.github/workflows/e2e.yml The full-stack Playwright E2E test workflow. It brings up the complete Aspire stack (SQL Server + Redis + RabbitMQ + four services +…"},"1457":{"u":"/docs/onboarding/devops-cicd.html#mmcaadc-cost-guardyml","d":"CI/CD and Operations","k":"Onboarding Guide","t":"MMCA.ADC, cost-guard.yml","x":"File: MMCA.ADC/.github/workflows/cost-guard.yml A read-only FinOps check that confirms the production Azure footprint is at its cost baseline. It detects a specific operational…"},"1458":{"u":"/docs/onboarding/devops-cicd.html#mmcaadc-load-testyml","d":"CI/CD and Operations","k":"Onboarding Guide","t":"MMCA.ADC, load-test.yml","x":"File: MMCA.ADC/.github/workflows/load-test.yml A k6 load test targeting the output-cached Conference read endpoints through the production Gateway. It establishes a repeatable…"},"1459":{"u":"/docs/onboarding/devops-cicd.html#repository-automation-the-claude-review-pair-and-the-maui-audit","d":"CI/CD and Operations","k":"Onboarding Guide","t":"Repository automation: the Claude review pair and the MAUI audit","x":"Files: MMCA.Common/.github/workflows/claude.yml, MMCA.Common/.github/workflows/claude-code-review.yml, MMCA.ADC/.github/workflows/claude.yml,…"},"1460":{"u":"/docs/onboarding/devops-cicd.html#cross-workflow-summary","d":"CI/CD and Operations","k":"Onboarding Guide","t":"Cross-workflow summary","x":"(dr-drill.yml is the ADR-009 §29 restore drill: it PITR-restores a copy of a chosen database, times the restore for the RTO record, verifies it comes back Online, then deletes…"},"1461":{"u":"/docs/onboarding/devops-cicd.html#rubric-category-index-for-this-chapter","d":"CI/CD and Operations","k":"Onboarding Guide","t":"Rubric category index for this chapter"},"1462":{"u":"/docs/onboarding/devops-iac.html","d":"Infrastructure as Code, ADC Azure Deployment","k":"Onboarding Guide","x":"This chapter teaches the Azure Infrastructure-as-Code layer for the MMCA.ADC application: what resources are provisioned, why they are shaped the way they are, how secrets reach…"},"1463":{"u":"/docs/onboarding/devops-iac.html#how-the-pieces-fit-together","d":"Infrastructure as Code, ADC Azure Deployment","k":"Onboarding Guide","t":"How the pieces fit together","x":"Before diving into individual files, here is the end-to-end picture: Phases 1 and 2 are their own jobs (deploy.yml:1089, deploy.yml:1143) rather than steps inside deploy, so they…"},"1464":{"u":"/docs/onboarding/devops-iac.html#azureyaml-the-azd-project-definition","d":"Infrastructure as Code, ADC Azure Deployment","k":"Onboarding Guide","t":"azure.yaml, the azd project definition","x":"File: MMCA.ADC/azure.yaml azure.yaml is the Azure Developer CLI (azd) manifest for the project. It declares six deployable services and points azd at the Bicep infrastructure…"},"1465":{"u":"/docs/onboarding/devops-iac.html#infrafoundationbicep-long-lived-shared-infrastructure","d":"Infrastructure as Code, ADC Azure Deployment","k":"Onboarding Guide","t":"infra/foundation.bicep, long-lived shared infrastructure","x":"File: MMCA.ADC/infra/foundation.bicep Foundation is deployed first (CI/CD chapter: deploy.yml:1115-1121) on every run. It provisions three resources: the Azure Container…"},"1466":{"u":"/docs/onboarding/devops-iac.html#deployment-parameters-assembled-at-deploy-time-not-committed","d":"Infrastructure as Code, ADC Azure Deployment","k":"Onboarding Guide","t":"Deployment parameters, assembled at deploy time, not committed","x":"There is no infra/main.parameters.json file in the repository, the tracked infra/ directory holds only foundation.bicep, main.bicep, DISASTER-RECOVERY.md, OPERATIONS.md,…"},"1467":{"u":"/docs/onboarding/devops-iac.html#inframainbicep-the-full-application-infrastructure","d":"Infrastructure as Code, ADC Azure Deployment","k":"Onboarding Guide","t":"infra/main.bicep, the full application infrastructure","x":"File: MMCA.ADC/infra/main.bicep main.bicep declares every application-layer Azure resource: Application Insights, five SLO scheduled query rules (one of them the AI-scoring token…"},"1468":{"u":"/docs/onboarding/devops-iac.html#deployment-model-summary","d":"Infrastructure as Code, ADC Azure Deployment","k":"Onboarding Guide","t":"Deployment model summary","x":"The complete credential chain: No static credential exists at any link in this chain. The GitHub secrets AZURECLIENTID, AZURETENANTID, AZURESUBSCRIPTIONID are the OIDC…"},"1469":{"u":"/docs/onboarding/devops-iac.html#rubric-category-cross-reference","d":"Infrastructure as Code, ADC Azure Deployment","k":"Onboarding Guide","t":"Rubric category cross-reference","x":"---"},"1470":{"u":"/docs/onboarding/devops-iac.html#not-determinable-from-source","d":"Infrastructure as Code, ADC Azure Deployment","k":"Onboarding Guide","t":"Not determinable from source","x":"- The exact AcrPull and Key Vault Secrets User role-assignment commands used in the out-of- band bootstrap are referenced in comments (main.bicep:1045-1049, main.bicep:1063-1066)…"},"1471":{"u":"/docs/onboarding/devops-runbooks.html","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","x":"This chapter covers every operational script and runbook in MMCA.ADC: the one-time Azure bootstrap, the database-per-service cutover story (how the legacy AtlDevCon monolith DB…"},"1472":{"u":"/docs/onboarding/devops-runbooks.html#azure-setupsh-one-time-azure-bootstrap","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"azure-setup.sh, One-time Azure bootstrap","x":"File: MMCA.ADC/scripts/azure-setup.sh (175 lines) What it is. A bash script that creates every Azure identity and OIDC credential the GitHub Actions deploy pipeline needs. It is…"},"1473":{"u":"/docs/onboarding/devops-runbooks.html#the-database-per-service-cutover-and-why-its-scripts-are-gone","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"The database-per-service cutover, and why its scripts are gone","x":"Before the surviving artifacts make sense, the story behind them does. Before ADR-006. All four modules (Identity, Conference, Engagement, Notification) pointed at a single…"},"1474":{"u":"/docs/onboarding/devops-runbooks.html#infradisaster-recoverymd-dr-runbook","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"infra/DISASTER-RECOVERY.md, DR runbook","x":"File: MMCA.ADC/infra/DISASTER-RECOVERY.md (234 lines; not the Store file of the same name) What it is. The authoritative disaster-recovery runbook for the ADC production…"},"1475":{"u":"/docs/onboarding/devops-runbooks.html#dr-drillyml-and-dr-restore-drillps1-the-adr-009-restore-drill","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"dr-drill.yml and dr-restore-drill.ps1, the ADR-009 restore drill","x":"Files: MMCA.ADC/.github/workflows/dr-drill.yml (120 lines), MMCA.ADC/scripts/dr-restore-drill.ps1 (101 lines) What it is. The automation behind the drill requirement above: the…"},"1476":{"u":"/docs/onboarding/devops-runbooks.html#infraoperationsmd-day-2-alert-triage-runbook","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"infra/OPERATIONS.md, day-2 alert triage runbook","x":"File: MMCA.ADC/infra/OPERATIONS.md (207 lines) What it is. The alert-to-action companion to the provisioned observability: what to do when each alert fires, how to read the SLO…"},"1477":{"u":"/docs/onboarding/devops-runbooks.html#infrasql-managed-identitymd-staged-passwordless-sql-runbook","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"infra/SQL-MANAGED-IDENTITY.md, staged passwordless-SQL runbook","x":"File: MMCA.ADC/infra/SQL-MANAGED-IDENTITY.md (100 lines) What it is. The runbook for moving the four service apps from SQL-login (password) auth to Entra managed-identity auth…"},"1478":{"u":"/docs/onboarding/devops-runbooks.html#infrapost-cutover-atldevcon-downgrademd-archive-downgrade-and-drop-runbook","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"infra/POST-CUTOVER-atldevcon-downgrade.md, archive downgrade and drop runbook","x":"File: MMCA.ADC/infra/POST-CUTOVER-atldevcon-downgrade.md (128 lines) What it is. The record of what happened to the legacy AtlDevCon database after the database-per-service…"},"1479":{"u":"/docs/onboarding/devops-runbooks.html#play-store-captureps1-android-screenshot-capture","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"play-store-capture.ps1, Android screenshot capture","x":"File: MMCA.ADC/scripts/play-store-capture.ps1 (147 lines) What it is. A PowerShell 7 script (play-store-capture.ps1:1) that captures a screenshot from an attached Android device…"},"1480":{"u":"/docs/onboarding/devops-runbooks.html#play-store-composeps1-play-store-screenshot-compositor","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"play-store-compose.ps1, Play Store screenshot compositor","x":"File: MMCA.ADC/scripts/play-store-compose.ps1 (187 lines) What it is. A PowerShell 7 script that reads raw captures from store-assets/play-store/raw/, wraps each into a 1080x1920…"},"1481":{"u":"/docs/onboarding/devops-runbooks.html#docsmobilereleaserunbookmd-store-submission-runbook","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"Docs/MobileReleaseRunbook.md, store-submission runbook","x":"File: MMCA.ADC/Docs/MobileReleaseRunbook.md (205 lines) What it is. The manual, credential-holding steps around a store submission that code and CI cannot perform, each tagged…"},"1482":{"u":"/docs/onboarding/devops-runbooks.html#the-operational-artifacts-in-full-context","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"The operational artifacts in full context","x":"The surviving artifacts form one story that starts at bootstrap and ends at day-2 triage: The AtlDevCon database is the thread that runs through the database half of that table,…"},"1483":{"u":"/docs/onboarding/devops-runbooks.html#rubric-tag-summary","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"Rubric tag summary","x":"---"},"1484":{"u":"/docs/onboarding/devops-runbooks.html#not-determinable-from-source","d":"Operational Scripts & Runbooks","k":"Onboarding Guide","t":"Not determinable from source","x":"- Whether the newest weekly drill is green: the drill ledger is maintained through 2026-08-10 (DISASTER-RECOVERY.md:210-217), but dr-drill.yml runs every Monday and a run reaches…"},"1485":{"u":"/docs/onboarding/devops-testing.html","d":"Testing Architecture & Solution Composition","k":"Onboarding Guide","x":"Chapter scope note. The tier chapters (tier-00 through the sweep) document every type in the production codebase one by one. Test types are the logged exception: this chapter…"},"1486":{"u":"/docs/onboarding/devops-testing.html#1-solution-composition-and-the-test-runner","d":"Testing Architecture & Solution Composition","k":"Onboarding Guide","t":"1. Solution composition and the test runner","x":"The two deployed apps use the same two-file pattern; MMCA.Common and MMCA.Helpdesk ship a .slnx only, because their solutions are already fast enough not to need a CI subset:…"},"1487":{"u":"/docs/onboarding/devops-testing.html#2-test-project-layout","d":"Testing Architecture & Solution Composition","k":"Onboarding Guide","t":"2. Test project layout","x":"The inventory below is drawn from 00-inventory.md:25-135 (test-assembly counts) and the solution files above. Counts are distinct types per project as reported by the Roslyn…"},"1488":{"u":"/docs/onboarding/devops-testing.html#3-shipped-testing-infrastructure-packages","d":"Testing Architecture & Solution Composition","k":"Onboarding Guide","t":"3. Shipped testing-infrastructure packages","x":"MMCA.Common ships five of its twenty-two packages as general testing infrastructure that downstream apps consume as NuGet references rather than writing their own harness…"},"1489":{"u":"/docs/onboarding/devops-testing.html#4-architecture-fitness-tests-executable-governance","d":"Testing Architecture & Solution Composition","k":"Onboarding Guide","t":"4. Architecture fitness tests, executable governance","x":"[Rubric §34, Architecture Governance & Documentation]: §34 assesses whether architectural decisions are documented, enforced, and kept honest over time; fitness functions are the…"},"1490":{"u":"/docs/onboarding/devops-testing.html#5-integration-and-e2e-strategy","d":"Testing Architecture & Solution Composition","k":"Onboarding Guide","t":"5. Integration and E2E strategy","x":"The four integration test projects (Identity, Conference, Engagement, Notification) each boot their service in-process with WebApplicationFactory . The lifecycle is not written…"},"1491":{"u":"/docs/onboarding/devops-testing.html#6-worked-examples","d":"Testing Architecture & Solution Composition","k":"Onboarding Guide","t":"6. Worked examples","x":"Three examples tie the infrastructure above to real test code. The per-repo class is a bare subclass; the facts, the package lists and the parsing live once in the shared base:…"},"1492":{"u":"/docs/onboarding/devops-testing.html#7-the-tiers-and-the-gates-that-run-them","d":"Testing Architecture & Solution Composition","k":"Onboarding Guide","t":"7. The tiers and the gates that run them","x":"A test tier only means something once you know what it blocks. This is the map. MMCA.Common's ui-e2e job (MMCA.Common/.github/workflows/ci.yml:248) builds the out-of-slnx gallery…"},"1493":{"u":"/docs/onboarding/devops-testing.html#quick-reference-rubric-categories-touched-in-this-chapter","d":"Testing Architecture & Solution Composition","k":"Onboarding Guide","t":"Quick reference: rubric categories touched in this chapter","x":"---"},"1494":{"u":"/docs/onboarding/devops-testing.html#cross-links","d":"Testing Architecture & Solution Composition","k":"Onboarding Guide","t":"Cross-links","x":"- Primer: 00-primer.md5-the-solution--test-layout , solution files, MTP runner, slnx-excluded UI projects - Primer:…"},"1495":{"u":"/docs/onboarding/99-coverage-audit.html","d":"Phase 4, Coverage Audit","k":"Onboarding Guide","x":"This audit reconciles the written guide against the mechanically-extracted inventory, logs every deliberate exception, verifies the grouping/ordering rules, proves all 34 rubric…"},"1496":{"u":"/docs/onboarding/99-coverage-audit.html#1-coverage-reconciliation","d":"Phase 4, Coverage Audit","k":"Onboarding Guide","t":"1. Coverage reconciliation","x":"Cross-check result: verify.ps1 confirms 0 of the 2,624 individually-sectioned types are missing from their group chapter, every one appears as a heading or in a sibling-family…"},"1497":{"u":"/docs/onboarding/99-coverage-audit.html#2-exceptions-log-every-deliberate-omission-with-reason","d":"Phase 4, Coverage Audit","k":"Onboarding Guide","t":"2. Exceptions log (every deliberate omission, with reason)","x":"EF Core migrations (/Migrations/, .Migrations.SqlServer), ModelSnapshot, .Designer.cs, .g.cs, GlobalUsings.g.cs, and AssemblyInfo.cs are excluded by rule (Tools/invtool…"},"1498":{"u":"/docs/onboarding/99-coverage-audit.html#3-grouping--ordering-verification","d":"Phase 4, Coverage Audit","k":"Onboarding Guide","t":"3. Grouping & ordering verification","x":"- Every type in exactly one group. classify.ps1 assigns all 3,668 nodes via name-level overrides (for the grab-bag MMCA.Common.Interfaces/Services namespaces) + ordered…"},"1499":{"u":"/docs/onboarding/99-coverage-audit.html#4-rubric-coverage-matrix","d":"Phase 4, Coverage Audit","k":"Onboarding Guide","t":"4. Rubric coverage matrix","x":"Every one of the 34 categories is explained at least once against real code. \"First explained in\" is the earliest group chapter (by order) that tags it; many recur and several…"},"1500":{"u":"/docs/onboarding/99-coverage-audit.html#5-open-questions--not-determinable-from-source","d":"Phase 4, Coverage Audit","k":"Onboarding Guide","t":"5. Open questions / not determinable from source","x":"1. IDbSeeder host invocation (group-07). The seeding contract and implementations are in MMCA.Common, but the IHostedService/startup invoker that actually runs seeding at boot…"},"1501":{"u":"/docs/onboarding/99-coverage-audit.html#6-how-to-regenerate-this-audit","d":"Phase 4, Coverage Audit","k":"Onboarding Guide","t":"6. How to regenerate this audit","x":"Then copy the refreshed out/00-inventory.md and out/00-dependency-manifest.md into Docs/Onboarding/ (the 00-group-taxonomy.md is written there directly by classify.ps1)."},"1502":{"u":"/docs/onboarding/CONCEPT-MAPS.html","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","x":"Mermaid diagrams distilled from the Onboarding guide (primer, group taxonomy, dependency manifest, and the 28 group chapters). Each diagram captures a relationship between the…"},"1503":{"u":"/docs/onboarding/CONCEPT-MAPS.html#1-system-context-two-codebases--the-22-packages","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"1. System context, two codebases + the 22 packages","x":"MMCA.Common is a framework published as twenty-two NuGet packages in lockstep, to nuget.org and GitHub Packages from one tag (ADR-053); MMCA.ADC and MMCA.Store consume them.…"},"1504":{"u":"/docs/onboarding/CONCEPT-MAPS.html#2-clean-architecture-the-layered-dependency-rule","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"2. Clean Architecture, the layered dependency rule","x":"Source dependencies point inward toward the Domain; each layer references only layers below it. Deliberate exceptions: UI and Grpc depend on Shared only (UI for Blazor WASM…"},"1505":{"u":"/docs/onboarding/CONCEPT-MAPS.html#3-the-28-functional-groups-dependency--build-order","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"3. The 28 functional groups, dependency / build order","x":"The primary axis of the guide: every type lives in exactly one of 28 chapter groups, ordered roughly topologically. Foundational, widely-depended-on concerns first (Result →…"},"1506":{"u":"/docs/onboarding/CONCEPT-MAPS.html#4-core-framework-patterns-how-the-building-blocks-compose","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"4. Core framework patterns, how the building blocks compose","x":"The pattern-level view of the same backbone: the ideas the primer commits to and how they feed each other. Result is the pervasive currency; DDD blocks produce domain events;…"},"1507":{"u":"/docs/onboarding/CONCEPT-MAPS.html#5-request-lifecycle-the-cqrs-decorator-pipeline-adr-014","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"5. Request lifecycle, the CQRS decorator pipeline (ADR-014)","x":"Handlers are thin (one method); every cross-cutting concern is a decorator wrapping the next. Scrutor TryDecorate composes them in reverse registration order (last registered =…"},"1508":{"u":"/docs/onboarding/CONCEPT-MAPS.html#6-event-driven-integration-outbox-dual-dispatch-adr-003--010--021--100","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"6. Event-driven integration, outbox dual-dispatch (ADR-003 / 010 / 021 / 100)","x":"Domain events are captured into an OutboxMessage row in the same transaction as the data (no dual-write bug). The two event kinds then part ways: local domain events are…"},"1509":{"u":"/docs/onboarding/CONCEPT-MAPS.html#7-modular-monolith--extractable-services-adr-006--007--008--012","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"7. Modular monolith → extractable services (ADR-006 / 007 / 008 / 012)","x":"Modules implement IModule and are discovered + Kahn-ordered by ModuleLoader (ADR-059). The same module code runs as a single monolith host or as N service processes behind a YARP…"},"1510":{"u":"/docs/onboarding/CONCEPT-MAPS.html#8-persistence-database-per-service--polyglot-engines-adr-006--018--030","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"8. Persistence, database-per-service + polyglot engines (ADR-006 / 018 / 030)","x":"One sealed context class per engine (SQLServerDbContext, PostgreSQLDbContext, SqliteDbContext, CosmosDbContext) over the abstract ApplicationDbContext, one instance per database.…"},"1511":{"u":"/docs/onboarding/CONCEPT-MAPS.html#9-authentication--authorization-stack","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"9. Authentication & Authorization stack","x":"The auth concern (G08) spans token validation, session cookies, federated sign-in, password hashing, brute-force protection, per-device refresh-session rotation and revocation, a…"},"1512":{"u":"/docs/onboarding/CONCEPT-MAPS.html#10-notifications-three-channels-behind-one-send-pipeline-adr-024--044","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"10. Notifications, three channels behind one send pipeline (ADR-024 / 044)","x":"One use case (SendPushNotificationHandler) writes a durable per-user inbox (optionally scoped to an event via ScopeKey), fires a transient SignalR push, and then an OS-level…"},"1513":{"u":"/docs/onboarding/CONCEPT-MAPS.html#11-ui-write-once-render-everywhere--i18n--theming","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"11. UI, write-once render everywhere + i18n + theming","x":"A page is authored once as a Razor component in a per-module UI library; both the Blazor web host (Server + WASM) and the .NET MAUI host reference the same libraries, so it…"},"1514":{"u":"/docs/onboarding/CONCEPT-MAPS.html#12-adc-business-modules-bounded-contexts-end-to-end","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"12. ADC business modules, bounded contexts end-to-end","x":"Each ADC module is a vertical slice through all layers. Conference is large enough to split across five chapters (G17-G21); Engagement takes two (G22 the bookmark, QR badge…"},"1515":{"u":"/docs/onboarding/CONCEPT-MAPS.html#13-the-adrs-grouped-by-theme","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"13. The ADRs, grouped by theme","x":"Every accepted ADR in Website/docs-src/adr/, clustered by the concern it governs. That directory's README.md is the canonical index and owns the count and range; this map only…"},"1516":{"u":"/docs/onboarding/CONCEPT-MAPS.html#14-the-34-category-evaluation-rubric","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"14. The 34-category evaluation rubric","x":"The lens the guide tags code against ([Rubric §N]). Scored on two axes: Maturity (0-4, process) and Implementation (0-10, substance). Three parts. ---"},"1517":{"u":"/docs/onboarding/CONCEPT-MAPS.html#15-how-the-axes-fit-together-reading-map","d":"MMCA Concept & Pattern Maps","k":"Onboarding Guide","t":"15. How the axes fit together (reading map)","x":"The guide is organized on two axes at once. This ties the diagrams above back to the guide's navigation. --- - Group-to-group arrows in §3 show the dominant \"builds on\" direction…"},"1518":{"u":"/docs/governance/index.html","d":"Architecture Governance","k":"Architecture Governance","x":"The governance artifacts behind the MMCA platform: the shared 34-category evaluation rubric, and each repo's evidence-based scorecard plus its remediation backlog. Every score…"},"1519":{"u":"/docs/governance/index.html#the-rubric","d":"Architecture Governance","k":"Architecture Governance","t":"The rubric","x":"- Architecture Evaluation Criteria: the 34-category rubric (Maturity 0-4 and Implementation 0-10 per category) that all three application repos are scored against. - Rubric…"},"1520":{"u":"/docs/governance/index.html#scorecards-and-backlogs","d":"Architecture Governance","k":"Architecture Governance","t":"Scorecards and backlogs"},"1521":{"u":"/docs/governance/index.html#how-these-are-maintained","d":"Architecture Governance","k":"Architecture Governance","t":"How these are maintained","x":"Scores are re-verified from source on a cadence: each category is scored by reading the current code, config, and CI (never rolled forward), and any change lands with the…"},"1522":{"u":"/docs/governance/adc-ArchitectureScorecard.html","d":"MMCA.ADC: Architecture Scorecard","k":"Architecture Governance","x":"Canonical, version-controlled scorecard for this repo: the single source of truth for MMCA.ADC's architecture scores, scored against the rubric at…"},"1523":{"u":"/docs/governance/adc-ArchitectureScorecard.html#at-a-glance","d":"MMCA.ADC: Architecture Scorecard","k":"Architecture Governance","t":"At a glance","x":"- Maturity index = Σ(maturity×weight) ÷ Σ(weight×4) = 314 ÷ 324 = 96.9% - Implementation index = Σ(impl×weight) ÷ Σ(weight×10) = 697 ÷ 810 = 86.0% - Weaker axis: Implementation,…"},"1524":{"u":"/docs/governance/adc-ArchitectureScorecard.html#top-5-risks","d":"MMCA.ADC: Architecture Scorecard","k":"Architecture Governance","t":"Top 5 risks","x":"1. Responsive behavior holds the lowest implementation score and sits in both bands: §22 (mat 3 / impl 7, weight 2; the top row of the implementation band at implPriority 4, and…"},"1525":{"u":"/docs/governance/adc-ArchitectureScorecard.html#top-5-strengths","d":"MMCA.ADC: Architecture Scorecard","k":"Architecture Governance","t":"Top 5 strengths","x":"1. Architecture intent is executable, not prose (§34 Governance, mat 4 / impl 9, and §3 Clean Architecture, mat 4 / impl 9): 54 architecture-test classes in…"},"1526":{"u":"/docs/governance/adc-ArchitectureScorecard.html#scorecard","d":"MMCA.ADC: Architecture Scorecard","k":"Architecture Governance","t":"Scorecard","x":"Weighted column = Maturity·weight / Implementation·weight per row. The maturity gap is four categories at maturity 3 (§10, §12, §21, §22); every other category is at maturity 4,…"},"1527":{"u":"/docs/governance/adc-ArchitectureScorecard.html#scoring-notes","d":"MMCA.ADC: Architecture Scorecard","k":"Architecture Governance","t":"Scoring notes","x":"- N/A (excluded from denominators): none. §16 AI-Native Application Architecture is scored because the AI session-scoring feature calls a model in production (the rubric's…"},"1528":{"u":"/docs/governance/adc-ArchitectureScorecard.html#cross-repo-comparison","d":"MMCA.ADC: Architecture Scorecard","k":"Architecture Governance","t":"Cross-repo comparison","x":"How this repo's quality relates to the other consumers (where the framework's quality propagates, where a repo diverges or under-uses it, and where a consumer does better than…"},"1529":{"u":"/docs/governance/adc-RemediationBacklog.html","d":"MMCA.ADC: Architecture Remediation Backlog","k":"Architecture Governance","x":"Derived from ArchitectureScorecard.md (evidence as of 2026-10-01 at MMCA.Common. v1.217.0): Maturity 96.9% (314/324) / Implementation 86.0% (697/810), weight total 81, no N/A…"},"1530":{"u":"/docs/governance/adc-RemediationBacklog.html#open-work-at-a-glance","d":"MMCA.ADC: Architecture Remediation Backlog","k":"Architecture Governance","t":"Open work at a glance"},"1531":{"u":"/docs/governance/adc-RemediationBacklog.html#open-items","d":"MMCA.ADC: Architecture Remediation Backlog","k":"Architecture Governance","t":"Open items","x":"Most criteria are CI-enforced (a frozen contract snapshot that spells out generic arguments and is keyed by the [EventName] wire identity, Common…"},"1532":{"u":"/docs/governance/adc-RemediationBacklog.html#implementation-band","d":"MMCA.ADC: Architecture Remediation Backlog","k":"Architecture Governance","t":"Implementation band","x":"Categories scoring implementation <= 8, ranked by implPriority (target 9). §10, §21 and §22 also hold a maturity-band row; their items are under Open items. Σ implPriority = 34…"},"1533":{"u":"/docs/governance/adc-RemediationBacklog.html#maturity-band","d":"MMCA.ADC: Architecture Remediation Backlog","k":"Architecture Governance","t":"Maturity band","x":"Σ maturity priority = 10 across the 4 rows (3+3+2+2)."},"1534":{"u":"/docs/governance/adc-RemediationBacklog.html#deliberate-and-accepted","d":"MMCA.ADC: Architecture Remediation Backlog","k":"Architecture Governance","t":"Deliberate and accepted","x":"Recorded decisions, not scheduled work. - Single-region deployment (no multi-region failover): accepted in infra/DISASTER-RECOVERY.md, with the single SQL server and single…"},"1535":{"u":"/docs/governance/adc-RemediationBacklog.html#resolved","d":"MMCA.ADC: Architecture Remediation Backlog","k":"Architecture Governance","t":"Resolved"},"1536":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html","d":"Architecture Evaluation Criteria","k":"Architecture Governance","x":"A structured rubric for evaluating the architecture of an enterprise application. Each category defines what is being assessed, concrete criteria to check, red flags that signal…"},"1537":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#how-to-use-this-rubric","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"How to Use This Rubric","x":"Score each category 0–4. Use the same scale everywhere so totals are comparable. Alongside the maturity level, rate how well each category is actually implemented on a finer 0–10…"},"1538":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#1-solid-principles","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"1. SOLID Principles","x":"Intent: Object/module-level design discipline that keeps code flexible and decoupled. Criteria - SRP: each class/handler has one reason to change; no \"god\" services orchestrating…"},"1539":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#2-design-patterns","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"2. Design Patterns","x":"Intent: Appropriate, idiomatic use of patterns, solving real problems, not pattern theater. Criteria - Creational (Factory methods on entities, Builder, Options) used where…"},"1540":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#3-clean-architecture","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"3. Clean Architecture","x":"Intent: Dependencies point inward; business rules are independent of frameworks, UI, and data stores. Criteria - Dependency rule enforced: Domain → (nothing); Application →…"},"1541":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#4-domain-driven-design","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"4. Domain-Driven Design","x":"Intent: The model reflects the business; boundaries follow capability boundaries, not technical layers. Criteria - Ubiquitous language: type/method names match business terms…"},"1542":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#5-vertical-slice-architecture","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"5. Vertical Slice Architecture","x":"Intent: Code is organized by feature/capability, so a change touches one cohesive slice. Criteria - Features grouped by use case (command/query + handler + validator + DTO…"},"1543":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#6-cqrs--event-driven-design","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"6. CQRS & Event-Driven Design","x":"Intent: Reads and writes are separated where it pays off; integration via events is reliable. Criteria - Commands (mutate, return Result) and queries (read, side-effect-free) are…"},"1544":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#7-microservices-readiness","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"7. Microservices Readiness","x":"Intent: Whether services (or future-extractable modules) are independently deployable and own their data. Criteria - Service boundaries align with bounded contexts; one team can…"},"1545":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#8-data-architecture","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"8. Data Architecture","x":"Intent: Persistence, consistency, and migrations are deliberate and safe. Criteria - Transaction boundaries match aggregate boundaries; unit-of-work scope is clear. - Migrations…"},"1546":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#9-api--contract-design","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"9. API & Contract Design","x":"Intent: External and inter-service contracts are clear, stable, and evolvable. Criteria - Consistent resource/endpoint design (REST/minimal APIs/gRPC) with predictable shapes. -…"},"1547":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#10-messaging--integration-architecture","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"10. Messaging & Integration Architecture","x":"Intent: Integration over a broker or an edge gateway is reliable, observable and evolvable: the transport, the failure paths and the long-running processes are deliberate. (§6…"},"1548":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#11-security","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"11. Security","x":"Intent: AuthN/AuthZ, secrets, and data protection are correct by construction. Criteria - Authentication centralized; tokens validated; identity flows documented (e.g.,…"},"1549":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#12-performance--scalability","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"12. Performance & Scalability","x":"Intent: The system meets latency/throughput goals and scales horizontally. Criteria - Async I/O throughout; no sync-over-async; no blocking the request thread. - Hot-path query…"},"1550":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#13-observability--operability","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"13. Observability & Operability","x":"Intent: You can understand and operate the system in production. Criteria - Structured logging with correlation/trace IDs flowing across module/service boundaries. - Distributed…"},"1551":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#14-testability--test-strategy","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"14. Testability & Test Strategy","x":"Intent: The design supports fast, reliable, meaningful tests at the right levels. Criteria - Healthy test pyramid: many fast unit tests on domain/application, fewer integration,…"},"1552":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#15-best-practices--code-quality","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"15. Best Practices & Code Quality","x":"Intent: Day-to-day craftsmanship that keeps the codebase healthy. Criteria - Analyzers at error severity (style, security, threading, maintainability) enforced in CI;…"},"1553":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#16-ai-native-application-architecture","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"16. AI-Native Application Architecture","x":"Intent: Where a product feature calls a language model or an agent, that dependency is governed like any other external system: isolated, versioned, evaluated, observed and…"},"1554":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#17-devops--deployment","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"17. DevOps & Deployment","x":"Intent: Building, releasing, and provisioning are automated, repeatable, and safe. (The local developer experience / inner loop behind this (local orchestration, cross-repo dev,…"},"1555":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#18-ui-architecture--component-design","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"18. UI Architecture & Component Design","x":"Intent: Components are cohesive, reusable, and composed cleanly, the UI has a deliberate structure, not page-sized blobs. Criteria - Container/presentational split: smart…"},"1556":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#19-state-management--data-flow","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"19. State Management & Data Flow","x":"Intent: Client state has a clear owner and predictable flow; server state is cached and invalidated deliberately. Criteria - Single source of truth per piece of state; ownership…"},"1557":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#20-design-system-theming--ui-consistency","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"20. Design System, Theming & UI Consistency","x":"Intent: A coherent visual language enforced by a component library, not re-implemented per screen. Criteria - Component library used consistently (e.g., MudBlazor): teams build…"},"1558":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#21-accessibility-a11y","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"21. Accessibility (a11y)","x":"Intent: The UI is usable by everyone, including assistive-technology users, and ideally enforced, not aspirational. Criteria - Semantic structure: correct…"},"1559":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#22-responsive-design--cross-browserdevice","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"22. Responsive Design & Cross-Browser/Device","x":"Intent: The UI works across viewport sizes, input modes, and supported browsers. Criteria - Fluid/responsive layouts via the design system's grid/breakpoints; no fixed-width…"},"1560":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#23-front-end-performance--rendering","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"23. Front-End Performance & Rendering","x":"Intent: The UI loads and responds fast; rendering work is bounded. (Complements §12: this is the client side.) Criteria - Initial load: bundle/payload size controlled;…"},"1561":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#24-forms-validation--ux-safety","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"24. Forms, Validation & UX Safety","x":"Intent: Data entry is safe, forgiving, and consistent, users don't lose work or get confused by errors. Criteria - Validation parity: client-side validation for fast feedback…"},"1562":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#25-navigation-routing--information-architecture","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"25. Navigation, Routing & Information Architecture","x":"Intent: Users can find their way; routes are meaningful, guarded, and role-aware. Criteria - Route design: clean, bookmarkable, deep-linkable URLs; parameters typed and…"},"1563":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#26-front-end-security","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"26. Front-End Security","x":"Intent: The client doesn't become the weak link, XSS, token handling, and trust boundaries are correct. (Complements §11.) Criteria - Output encoding / XSS: no unsanitized HTML…"},"1564":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#27-internationalization--localization","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"27. Internationalization & Localization","x":"Intent: The UI can be translated and respects culture, if in scope. (Score weight 0–1 if single-locale by design.) Criteria - Externalized strings: UI text in resource files, not…"},"1565":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#28-front-end-testing--quality","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"28. Front-End Testing & Quality","x":"Intent: The UI is verified at the right levels with stable, meaningful tests. (Complements §14.) Criteria - Component tests (e.g., bUnit) for rendering logic, parameters, events,…"},"1566":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#29-resilience-reliability--business-continuity","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"29. Resilience, Reliability & Business Continuity","x":"Intent: The system survives partial failure and recovers from disaster within defined objectives. (Extends the resilience facets of §7/§12 into a first-class recovery story.)…"},"1567":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#30-compliance-privacy--data-governance","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"30. Compliance, Privacy & Data Governance","x":"Intent: Personal and regulated data is classified, governed, and handled lawfully across its lifecycle. (§11 defends against attackers; this answers to regulators.) Criteria -…"},"1568":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#31-cost-efficiency--finops","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"31. Cost Efficiency / FinOps","x":"Intent: Cloud spend is proportional to value and driven by data, not guesswork. (§17 mentions cost; this makes it a first-class axis.) Criteria - Right-sizing: compute/database…"},"1569":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#32-dependency--supply-chain-management","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"32. Dependency & Supply-Chain Management","x":"Intent: Third-party and inter-package dependencies are controlled, auditable, and evolve safely, especially critical for a framework that publishes packages. (Elevates §15's…"},"1570":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#33-developer-experience--inner-loop","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"33. Developer Experience & Inner Loop","x":"Intent: Developers build, run, test, and iterate locally with fast, low-friction feedback. (Promoted out of §17: that scores release/ops automation; this scores the inner loop.)…"},"1571":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#34-architecture-governance--documentation","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"34. Architecture Governance & Documentation","x":"Intent: Decisions are recorded, conformance is enforced, and the system is documented so it stays coherent as it evolves. (Absorbs the former §16 Maintainability & Evolvability…"},"1572":{"u":"/docs/governance/ArchitectureEvaluationCriteria.html#appendix-quick-scan-checklist","d":"Architecture Evaluation Criteria","k":"Architecture Governance","t":"Appendix: Quick-Scan Checklist","x":"A 2-minute triage before the full evaluation: any \"no\" warrants a deeper look. - [ ] Can you draw the dependency graph and is it acyclic and inward-pointing? - [ ] Is the domain…"},"1573":{"u":"/docs/governance/common-ArchitectureScorecard.html","d":"MMCA.Common: Architecture Scorecard","k":"Architecture Governance","x":"Canonical, version-controlled scorecard for this repo: the single source of truth for MMCA.Common's architecture scores. Scored against the rubric at…"},"1574":{"u":"/docs/governance/common-ArchitectureScorecard.html#at-a-glance","d":"MMCA.Common: Architecture Scorecard","k":"Architecture Governance","t":"At a glance","x":"- Maturity index = Σ(maturity×weight) ÷ Σ(weight×4) = 317 ÷ 328 = 96.6% - Implementation index = Σ(impl×weight) ÷ Σ(weight×10) = 705 ÷ 820 = 86.0% - Weaker axis: Implementation…"},"1575":{"u":"/docs/governance/common-ArchitectureScorecard.html#top-5-risks","d":"MMCA.Common: Architecture Scorecard","k":"Architecture Governance","t":"Top 5 risks","x":"1. FinOps execution and governance live downstream, §31 (impl 8, maturity 2, the lowest maturity on the board; a documented accepted cap per the backlog's Deliberate and accepted…"},"1576":{"u":"/docs/governance/common-ArchitectureScorecard.html#top-5-strengths","d":"MMCA.Common: Architecture Scorecard","k":"Architecture Governance","t":"Top 5 strengths","x":"1. Dual-enforced Clean Architecture dependency rule (compile-time + fitness functions), §3 (impl 9): Source/Build/MMCA.Common.LayerEnforcement.targets:1-90 fails the build on…"},"1577":{"u":"/docs/governance/common-ArchitectureScorecard.html#scorecard","d":"MMCA.Common: Architecture Scorecard","k":"Architecture Governance","t":"Scorecard","x":"Weighted column = Maturity·weight / Implementation·weight per row."},"1578":{"u":"/docs/governance/common-ArchitectureScorecard.html#scoring-notes","d":"MMCA.Common: Architecture Scorecard","k":"Architecture Governance","t":"Scoring notes","x":"- N/A (excluded from denominators): none. All 34 rows carry numeric Maturity and Implementation, so Σweight is 82. §16 AI-Native Application Architecture is scored because…"},"1579":{"u":"/docs/governance/common-ArchitectureScorecard.html#cross-repo-comparison","d":"MMCA.Common: Architecture Scorecard","k":"Architecture Governance","t":"Cross-repo comparison","x":"How this repo's quality relates to the other consumers (where the framework's quality propagates, where a repo diverges or under-uses it, and where a consumer does better than…"},"1580":{"u":"/docs/governance/common-RemediationBacklog.html","d":"MMCA.Common: Architecture Remediation Backlog","k":"Architecture Governance","x":"Derived from the scorecard: Maturity 96.6% (317/328) and Implementation 86.0% (705/820), framework v1.218.0, evidence as of 2026-10-01. Tasks are ranked on both scorecard axes,…"},"1581":{"u":"/docs/governance/common-RemediationBacklog.html#open-work-at-a-glance","d":"MMCA.Common: Architecture Remediation Backlog","k":"Architecture Governance","t":"Open work at a glance"},"1582":{"u":"/docs/governance/common-RemediationBacklog.html#open-items","d":"MMCA.Common: Architecture Remediation Backlog","k":"Architecture Governance","t":"Open items","x":"- Gap (maturity): SRP and DIP are enforced automatically: a ratcheted constructor-dependency ceiling is subclassed in Common…"},"1583":{"u":"/docs/governance/common-RemediationBacklog.html#implementation-band","d":"MMCA.Common: Architecture Remediation Backlog","k":"Architecture Governance","t":"Implementation band","x":"Every category at implementation <= 8, ranked by implPriority = max(0, 9 − implementation) × weight. Four of these categories (1, 17, 30, 31) also sit in the maturity band; this…"},"1584":{"u":"/docs/governance/common-RemediationBacklog.html#maturity-band","d":"MMCA.Common: Architecture Remediation Backlog","k":"Architecture Governance","t":"Maturity band","x":"Every category at maturity < 4, ranked by priority = (4 − maturity) × weight. Σ priority = 11 across the 4 maturity-band rows (4 + 3 + 2 + 2)."},"1585":{"u":"/docs/governance/common-RemediationBacklog.html#deliberate-and-accepted","d":"MMCA.Common: Architecture Remediation Backlog","k":"Architecture Governance","t":"Deliberate and accepted","x":"Recorded decisions and deferred findings: each is real, none is scheduled work. The computed maturity priority = (4 − 2) × 2 = 4 is the highest weighted gap of any open category,…"},"1586":{"u":"/docs/governance/common-RemediationBacklog.html#resolved","d":"MMCA.Common: Architecture Remediation Backlog","k":"Architecture Governance","t":"Resolved","x":"Categories at maturity 4 AND implementation = 9 (protect them, do not regress), then the closed items inside categories that are still open."},"1587":{"u":"/docs/governance/store-ArchitectureScorecard.html","d":"MMCA.Store: Architecture Scorecard","k":"Architecture Governance","x":"Canonical, version-controlled scorecard for this repo: the single source of truth for MMCA.Store's architecture scores. Scored against the rubric at…"},"1588":{"u":"/docs/governance/store-ArchitectureScorecard.html#at-a-glance","d":"MMCA.Store: Architecture Scorecard","k":"Architecture Governance","t":"At a glance","x":"- Maturity index = Σ(maturity×weight) ÷ Σ(weight×4) = 308 ÷ 316 = 97.5% - Implementation index = Σ(impl×weight) ÷ Σ(weight×10) = 659 ÷ 790 = 83.4% - Weaker axis: Implementation…"},"1589":{"u":"/docs/governance/store-ArchitectureScorecard.html#top-5-risks","d":"MMCA.Store: Architecture Scorecard","k":"Architecture Governance","t":"Top 5 risks","x":"1. An internal gRPC edge returns customer PII to any caller: §11 (impl 7, weight 3): Identity maps CustomersGrpcService with .AllowAnonymous(), and it returns email and full name…"},"1590":{"u":"/docs/governance/store-ArchitectureScorecard.html#top-5-strengths","d":"MMCA.Store: Architecture Scorecard","k":"Architecture Governance","t":"Top 5 strengths","x":"1. Clean Architecture + DDD + CQRS depth, fitness-enforced: §3/§4 (impl 9): inherited framework substance, guarded by the shared NetArchTest suite (53 test classes,…"},"1591":{"u":"/docs/governance/store-ArchitectureScorecard.html#scorecard","d":"MMCA.Store: Architecture Scorecard","k":"Architecture Governance","t":"Scorecard","x":"Weighted = Maturity·weight / Implementation·weight."},"1592":{"u":"/docs/governance/store-ArchitectureScorecard.html#scoring-notes","d":"MMCA.Store: Architecture Scorecard","k":"Architecture Governance","t":"Scoring notes","x":"- Two axes per category: Maturity (0-4, process/governance) and Implementation (0-10, substance/execution). The indices are computed deterministically from the table: every…"},"1593":{"u":"/docs/governance/store-ArchitectureScorecard.html#cross-repo-comparison","d":"MMCA.Store: Architecture Scorecard","k":"Architecture Governance","t":"Cross-repo comparison","x":"How Store relates to MMCA.Common (the framework) and MMCA.ADC (the sibling consumer) is maintained once, for all three repos, in the workspace-internal…"},"1594":{"u":"/docs/governance/store-RemediationBacklog.html","d":"MMCA.Store: Architecture Remediation Backlog","k":"Architecture Governance","x":"Derived from ArchitectureScorecard.md: Maturity 97.5% (308/316) / Implementation 83.4% (659/790), evidence as of 2026-10-01 at MMCA.Common. v1.217.0 (all 17 packages lockstep,…"},"1595":{"u":"/docs/governance/store-RemediationBacklog.html#open-work-at-a-glance","d":"MMCA.Store: Architecture Remediation Backlog","k":"Architecture Governance","t":"Open work at a glance"},"1596":{"u":"/docs/governance/store-RemediationBacklog.html#open-items","d":"MMCA.Store: Architecture Remediation Backlog","k":"Architecture Governance","t":"Open items","x":"- [ ] 11 Security, implementation 7: internal trust and secret handling. Four red flags hold the row at 7. The Identity customer gRPC edge is anonymous and returns email and full…"},"1597":{"u":"/docs/governance/store-RemediationBacklog.html#implementation-band","d":"MMCA.Store: Architecture Remediation Backlog","k":"Architecture Governance","t":"Implementation band","x":"21 categories, 52 gap points, the largest of the three repos. Levers are cited only where this ledger or the scorecard records one; an unnamed lever is named at the next…"},"1598":{"u":"/docs/governance/store-RemediationBacklog.html#maturity-band","d":"MMCA.Store: Architecture Remediation Backlog","k":"Architecture Governance","t":"Maturity band","x":"3 categories, 8 gap points. Ties break by priority desc, then weight desc, then category asc."},"1599":{"u":"/docs/governance/store-RemediationBacklog.html#deliberate-and-accepted","d":"MMCA.Store: Architecture Remediation Backlog","k":"Architecture Governance","t":"Deliberate and accepted","x":"- §16 AI-Native Application Architecture is N/A (rubric v2, ADR-110): no product feature calls a language model, so its weight 2 leaves both denominators until one does. - 5…"},"1600":{"u":"/docs/governance/store-RemediationBacklog.html#resolved","d":"MMCA.Store: Architecture Remediation Backlog","k":"Architecture Governance","t":"Resolved"},"1601":{"u":"/docs/guides/index.html","d":"Guides & Specifications","k":"Guides & Specifications","x":"As of: 2026-09-06. The narrative documentation for the MMCA platform: adoption guides, business specifications, workflow analyses, and per-concern reference notes. Files are…"},"1602":{"u":"/docs/guides/index.html#framework-mmcacommon","d":"Guides & Specifications","k":"Guides & Specifications","t":"Framework (MMCA.Common)","x":"- Capability Catalog: everything an adopting team gets, section by section (packages, scaffolding, the architectural core, the extraction path, data, messaging, API, identity,…"},"1603":{"u":"/docs/guides/index.html#mmcastore-e-commerce","d":"Guides & Specifications","k":"Guides & Specifications","t":"MMCA.Store (e-commerce)","x":"- Business Specification - Business Workflow Analysis - Navigation Flow - Manual Screen-Reader Pass Runbook"},"1604":{"u":"/docs/guides/index.html#mmcaadc-conference","d":"Guides & Specifications","k":"Guides & Specifications","t":"MMCA.ADC (conference)","x":"- Business Specifications - Navigation Flow - Manual Screen-Reader Pass Runbook - Integration-Test Tier Rework Plan Related reading: the Architecture Decision Records and the…"},"1605":{"u":"/docs/guides/adc-ACCESSIBILITY-SCREENREADER-PASS.html","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","x":"As of: 2026-07-20. The automated layer (axe-core WCAG 2.1 AA scans in Tests/E2E/MMCA.ADC.E2E.Tests/AccessibilityTests.cs plus the shared Login/Register/Profile bases in…"},"1606":{"u":"/docs/guides/adc-ACCESSIBILITY-SCREENREADER-PASS.html#tools","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","t":"Tools","x":"Run against the app started via Aspire (dotnet run --project Source/Hosting/MMCA.ADC.AppHost), reaching the UI through the Gateway. Test with the keyboard only (no mouse) for the…"},"1607":{"u":"/docs/guides/adc-ACCESSIBILITY-SCREENREADER-PASS.html#what-to-verify-on-every-flow","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","t":"What to verify on every flow","x":"1. Landmarks and headings. The SR's landmark/heading list (NVDA Insert+F7) exposes a logical banner / navigation / main structure and a sensible h1...hN outline (one h1 per…"},"1608":{"u":"/docs/guides/adc-ACCESSIBILITY-SCREENREADER-PASS.html#flows-to-cover-mirror-the-automated-accessibilitytests-plus-the-role-journeys","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","t":"Flows to cover (mirror the automated AccessibilityTests plus the role journeys)"},"1609":{"u":"/docs/guides/adc-ACCESSIBILITY-SCREENREADER-PASS.html#results-log","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","t":"Results log","x":"Record one row per pass. A flow with any unresolved blocker is a FAIL (open a backlog item for it)."},"1610":{"u":"/docs/guides/adc-ACCESSIBILITY-SCREENREADER-PASS.html#after-a-pass","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","t":"After a pass","x":"- File any defect as a remediation item; cross-link it from the §21 row's evidence. - Update the dated row above so the scorecard can cite a real, current manual pass (this is…"},"1611":{"u":"/docs/guides/adc-IntegrationTestReworkPlan.html","d":"Integration-Test Tier Rework Plan (RemediationBacklog #14)","k":"Guides & Specifications","x":"As of: 2026-08-30. Status: complete (Phase 4 broker-transport tier landed 2026-07-06; Phase 5 residual = coverlet only). - Phase 0 ✅: Tests/WebAPI revived as MMCA.Common.API…"},"1612":{"u":"/docs/guides/adc-IntegrationTestReworkPlan.html#recommended-strategy-two-tiers","d":"Integration-Test Tier Rework Plan (RemediationBacklog #14)","k":"Guides & Specifications","t":"Recommended strategy: two tiers","x":"1. Primary: per-service WebApplicationFactory : one in-process host per service (Identity / Conference / Engagement), cross-service edges mocked. AddBrokerMessaging…"},"1613":{"u":"/docs/guides/adc-IntegrationTestReworkPlan.html#three-code-facts-that-shape-the-rework-verified","d":"Integration-Test Tier Rework Plan (RemediationBacklog #14)","k":"Guides & Specifications","t":"Three code facts that shape the rework (verified)","x":"- Only Conference.Service is WAF-incompatible: it ends with StartAsync() + self-HTTP/2 WarmupViaHttpAsync + WaitForShutdownAsync(). Identity/Engagement/Notification use…"},"1614":{"u":"/docs/guides/adc-IntegrationTestReworkPlan.html#databases","d":"Integration-Test Tier Rework Plan (RemediationBacklog #14)","k":"Guides & Specifications","t":"Databases","x":"- SQLite in-memory for the fast bulk tier (no Docker, CI-friendly). A SQLite source with no migrations assembly has its schema created at startup by InitializeDatabasesAsync,…"},"1615":{"u":"/docs/guides/adc-IntegrationTestReworkPlan.html#project-structure","d":"Integration-Test Tier Rework Plan (RemediationBacklog #14)","k":"Guides & Specifications","t":"Project structure","x":"- One WAF test project per service (MMCA.ADC.{Identity,Conference,Engagement}.IntegrationTests): can't reference two Program-bearing hosts in one project. - One…"},"1616":{"u":"/docs/guides/adc-IntegrationTestReworkPlan.html#ci","d":"Integration-Test Tier Rework Plan (RemediationBacklog #14)","k":"Guides & Specifications","t":"CI","x":"- Add the SQLite per-service tier to CI.slnf (seconds, no Docker) → restores the authz/CRUD merge gate (11) with no workflow change. - Keep the container-based MsSql + RabbitMQ…"},"1617":{"u":"/docs/guides/adc-IntegrationTestReworkPlan.html#phased-sequencing-fastest-win-first","d":"Integration-Test Tier Rework Plan (RemediationBacklog #14)","k":"Guides & Specifications","t":"Phased sequencing (fastest win first)","x":"- Phase 0: re-home WebAPI.Tests middleware unit tests; drop the dead WebAPI reference; re-add to slnx+CI.slnf. ~16 tests green; removes a non-building project (16). - Phase 1:…"},"1618":{"u":"/docs/guides/adc-IntegrationTestReworkPlan.html#key-risks","d":"Integration-Test Tier Rework Plan (RemediationBacklog #14)","k":"Guides & Specifications","t":"Key risks","x":"- The non-Identity JwtBearerOptions in-process override is the trickiest piece: prove it on one Conference auth test before fanning out. - SQLite vs SQL-Server fidelity (owned…"},"1619":{"u":"/docs/guides/adc-IntegrationTestReworkPlan.html#critical-files","d":"Integration-Test Tier Rework Plan (RemediationBacklog #14)","k":"Guides & Specifications","t":"Critical files","x":"- Tests/Integration/MMCA.ADC.IntegrationTests/Infrastructure/TestWebApplicationFactory.cs (combined-host factory → split into per-service fixtures; its JWT config block is the…"},"1620":{"u":"/docs/guides/adc-NavigationFlow.html","d":"Navigation Flow","k":"Guides & Specifications","x":"As of: 2026-09-17. This document maps the site navigation flow for each actor in the MMCA.ADC application. Each mermaid diagram shows the pages accessible to that actor and the…"},"1621":{"u":"/docs/guides/adc-NavigationFlow.html#actors","d":"Navigation Flow","k":"Guides & Specifications","t":"Actors","x":"Roles & menu: the role vocabulary is Organizer, ContentEditor and Attendee (the default, RoleNames). Organizer holds every capability; ContentEditor holds the catalog-curation…"},"1622":{"u":"/docs/guides/adc-NavigationFlow.html#1-anonymous-user","d":"Navigation Flow","k":"Guides & Specifications","t":"1. Anonymous User","x":"Pages accessible without authentication: home, login, register, the two password-reset pages, and all public conference pages. ---"},"1623":{"u":"/docs/guides/adc-NavigationFlow.html#2-attendee-authenticated-user","d":"Navigation Flow","k":"Guides & Specifications","t":"2. Attendee (Authenticated User)","x":"Inherits all anonymous pages. Gains access to profile, feedback submission, and session bookmarking. Unauthenticated visitors are redirected to login. ---"},"1624":{"u":"/docs/guides/adc-NavigationFlow.html#3-speaker","d":"Navigation Flow","k":"Guides & Specifications","t":"3. Speaker","x":"Inherits all attendee pages. Gains access to the speaker dashboard for managing their own profile, viewing assigned sessions, and reviewing feedback ratings. ---"},"1625":{"u":"/docs/guides/adc-NavigationFlow.html#4-organizer","d":"Navigation Flow","k":"Guides & Specifications","t":"4. Organizer","x":"Authenticated users with the Organizer role. Inherits all attendee and public pages. Adds CRUD management for every conference entity (events, sessions, speakers, categories,…"},"1626":{"u":"/docs/guides/adc-NavigationFlow.html#5-functionality-flows-attendee--speaker","d":"Navigation Flow","k":"Guides & Specifications","t":"5. Functionality Flows (Attendee & Speaker)","x":"The diagrams in sections 1-4 map which pages each actor can reach. The diagrams below map how attendees and speakers accomplish each functionality, including inline actions…"},"1627":{"u":"/docs/guides/adc-NavigationFlow.html#navigation-patterns","d":"Navigation Flow","k":"Guides & Specifications","t":"Navigation Patterns","x":"- Unauthenticated users accessing protected pages are redirected to /login via the RedirectToLogin component. - Successful login/register redirects to Home (/) with a full page…"},"1628":{"u":"/docs/guides/adc-specifications.html","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","x":"As of: 2026-09-17. ---"},"1629":{"u":"/docs/guides/adc-specifications.html#1-system-overview","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"1. System Overview","x":"ADC is a conference management system for the Atlanta Developers Conference. It provides backend services to manage multi-day conference events, sessions, speakers, rooms,…"},"1630":{"u":"/docs/guides/adc-specifications.html#2-domain-model","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"2. Domain Model","x":"Relationships: - Owns many Rooms (child entities) - Owns many EventSpeakers (child join entities linking Event ↔ Speaker) - Owns many EventQuestionAnswers (child feedback…"},"1631":{"u":"/docs/guides/adc-specifications.html#3-business-rules","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"3. Business Rules","x":"Reading guide: Some rules reference other rules defined later in the document (e.g., BR-63, BR-80 are defined in Section 10). Forward references use the BR- numbering…"},"1632":{"u":"/docs/guides/adc-specifications.html#4-use-cases--business-processes","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"4. Use Cases / Business Processes","x":"See UC-30 (Registration) and UC-31 (Login) in Section 12.2 for the current email + password authentication flows. UC-34 (Request password reset) and UC-35 (Reset password) in the…"},"1633":{"u":"/docs/guides/adc-specifications.html#5-workflows--state-transitions","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"5. Workflows & State Transitions","x":"The Session.Status field is a free-text string imported from Sessionize. Default: null (for manually created sessions). Known Sessionize values: Accepted, Waitlisted, Accept…"},"1634":{"u":"/docs/guides/adc-specifications.html#6-events--side-effects","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"6. Events & Side Effects","x":"Domain events are raised for entity mutations. Not all events have registered handlers: events without handlers serve as extension points for future requirements. Note: Only…"},"1635":{"u":"/docs/guides/adc-specifications.html#7-business-constraints--invariants","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"7. Business Constraints & Invariants","x":"---"},"1636":{"u":"/docs/guides/adc-specifications.html#8-external-integrations-business-perspective","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"8. External Integrations (Business Perspective)","x":"---"},"1637":{"u":"/docs/guides/adc-specifications.html#9-glossary","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"9. Glossary","x":"---"},"1638":{"u":"/docs/guides/adc-specifications.html#ddd-structural-summary","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"DDD Structural Summary","x":"Why three bounded contexts instead of two: The original Events + Identity split grouped all conference-related entities together regardless of write profile. Separating…"},"1639":{"u":"/docs/guides/adc-specifications.html#10-specification-clarifications--addenda","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"10. Specification Clarifications & Addenda","x":"This section addresses gaps, ambiguities, and implicit design decisions identified during implementation review. New business rules are numbered BR-61+. API contract…"},"1640":{"u":"/docs/guides/adc-specifications.html#11-api-contract-specifications","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"11. API Contract Specifications","x":"This section documents API design decisions that apply across all endpoints. --- All error responses use the RFC 9457 ProblemDetails format (the successor to RFC 7807, same…"},"1641":{"u":"/docs/guides/adc-specifications.html#12-authentication--identity-architecture","d":"ADC (Atlanta Developers Conference) - Business Specifications","k":"Guides & Specifications","t":"12. Authentication & Identity Architecture","x":"This section defines the authentication mechanism for both the Web UI (Blazor) and MAUI (mobile) clients, which share a common Razor class library. It replaces the device-based…"},"1642":{"u":"/docs/guides/common-ACCESSIBILITY.html","d":"Accessibility (rubric §21)","k":"Guides & Specifications","x":"As of: 2026-07-20. The shared MMCA.Common.UI surface targets WCAG 2.1 AA. Accessibility is enforced two ways: an automated axe-core gate in CI (the bulk of coverage) and a…"},"1643":{"u":"/docs/guides/common-ACCESSIBILITY.html#automated-coverage-axe-core-wcag-21-aa","d":"Accessibility (rubric §21)","k":"Guides & Specifications","t":"Automated coverage (axe-core, WCAG 2.1 AA)","x":"The ui-e2e CI job runs Playwright + axe-core against the backend-less gallery; chromium is the blocking merge gate (firefox/webkit advisory). Scanned states: Component render is…"},"1644":{"u":"/docs/guides/common-ACCESSIBILITY.html#manual-screen-reader-pass","d":"Accessibility (rubric §21)","k":"Guides & Specifications","t":"Manual screen-reader pass","x":"Automation cannot judge reading order, focus management, or announcement quality, so the shared surface is walked manually. Checklist (re-run on any change to MainLayout, the…"},"1645":{"u":"/docs/guides/common-ACCESSIBILITY.html#known-limitations-tracked","d":"Accessibility (rubric §21)","k":"Guides & Specifications","t":"Known limitations (tracked)","x":"- ~~Dark-mode contrast (§20, not §21).~~ RESOLVED (2026-07-11). The two dark-palette WCAG AA contrast failures the prototype scan flagged (filled-primary button label ~2.65:1 on…"},"1646":{"u":"/docs/guides/common-BUILD-BY-HAND.html","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","x":"As of: 2026-09-13. This is the long-form walkthrough: every project, every file, and every load-bearing line that goes into an application on the MMCA.Common framework, in the…"},"1647":{"u":"/docs/guides/common-BUILD-BY-HAND.html#what-you-will-build","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"What you will build","x":"A modular monolith with one business module and two hosts: - Orders (your business module): an Order aggregate with OrderComment children, opened through a Result-returning…"},"1648":{"u":"/docs/guides/common-BUILD-BY-HAND.html#phase-0-prerequisites-and-decisions","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"Phase 0: Prerequisites and decisions","x":"Install: - .NET 10 SDK (the framework targets net10.0 with LangVersion: preview for C extension types). - SQL Server reachable locally (LocalDB, a container, or the one Aspire…"},"1649":{"u":"/docs/guides/common-BUILD-BY-HAND.html#phase-1-create-the-solution-and-the-build-plumbing","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"Phase 1: Create the solution and the build plumbing","x":"Scaffolded. dotnet new mmca-app writes every file in this phase. Read it to know what each one does; you do not need to type any of it. The plumbing files are the load-bearing,…"},"1650":{"u":"/docs/guides/common-BUILD-BY-HAND.html#phase-2-scaffold-the-module-project-set","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"Phase 2: Scaffold the module project set","x":"Scaffolded. dotnet new mmca-app creates this project set for your first module, and pwsh build/add-module.ps1 adds another one later: it drives dotnet new mmca-module and then…"},"1651":{"u":"/docs/guides/common-BUILD-BY-HAND.html#phase-3-the-vertical-slice-end-to-end-the-heart-of-it","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"Phase 3: The vertical slice end-to-end (the heart of it)","x":"Scaffolded. The generated module already contains this slice and six more, worked end to end. dotnet new mmca-command and dotnet new mmca-query add another one. This phase is the…"},"1652":{"u":"/docs/guides/common-BUILD-BY-HAND.html#phase-4-dbcontext-model-and-migrations","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"Phase 4: DbContext model and migrations","x":"Partly scaffolded. The migrations project and its design-time factory are generated. Running dotnet ef migrations add InitialCreate is still yours, and for a module added later…"},"1653":{"u":"/docs/guides/common-BUILD-BY-HAND.html#phase-5-compose-the-monolith-host-and-run-it","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"Phase 5: Compose the monolith host and run it","x":"Scaffolded. Both hosts, the AppHost, and the .resx pairs are generated. Read this phase before you touch any of them: the DI sequence, WaitFor(sql) rather than the database…"},"1654":{"u":"/docs/guides/common-BUILD-BY-HAND.html#phase-6-tests-and-the-architecture-fitness-map","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"Phase 6: Tests and the architecture-fitness map","x":"Scaffolded, with one deliberate gap. All three test projects and the map are generated. The IntegrationEventContractTests subclass is NOT: its frozen literal lists members…"},"1655":{"u":"/docs/guides/common-BUILD-BY-HAND.html#phase-7-upgrading-the-framework-version","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"Phase 7: Upgrading the framework version","x":"Not scaffolded. dotnet new mmca-app --framework-version picks the version you START on; moving to a later one is this phase. When a new MMCA.Common release ships, upgrade in one…"},"1656":{"u":"/docs/guides/common-BUILD-BY-HAND.html#phase-8-extract-a-module-into-its-own-service-the-payoff","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"Phase 8: Extract a module into its own service (the payoff)","x":"Not scaffolded. The generated solution carries the plumbing (the .Contracts proto convention and the .Service OpenAPI block in Directory.Build.props), but the extraction itself…"},"1657":{"u":"/docs/guides/common-BUILD-BY-HAND.html#verification-checklist","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"Verification checklist","x":"1. Build green: dotnet build Contoso.Support.slnx with no warnings (TreatWarningsAsErrors + five analyzers). This is the primary automatable gate. 2. Unit + architecture tests…"},"1658":{"u":"/docs/guides/common-BUILD-BY-HAND.html#where-to-look-next","d":"Building on MMCA.Common by Hand","k":"Guides & Specifications","t":"Where to look next","x":"- Getting Started: the one-command path that writes phases 1 through 6 for you. If you are starting a new solution rather than adding the framework to an existing one, that is…"},"1659":{"u":"/docs/guides/common-CAPABILITIES.html","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","x":"As of: 2026-09-10 (framework v1.187.0). Everything an adopting team gets from the MMCA.Common framework: a .NET 10 package set for building a modular monolith on DDD, Clean…"},"1660":{"u":"/docs/guides/common-CAPABILITIES.html#package-map","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Package map","x":"Seventeen packages, one version number. The layer rule is enforced at compile time inside the framework and at test time in every consumer: API/Grpc depend on Infrastructure,…"},"1661":{"u":"/docs/guides/common-CAPABILITIES.html#getting-started-and-scaffolding","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Getting started and scaffolding","x":"From zero to a green, warning-free, tested solution before writing any business logic. - One-command solution scaffold. dotnet new install MMCA.Templates then dotnet new mmca-app…"},"1662":{"u":"/docs/guides/common-CAPABILITIES.html#architectural-core","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Architectural core","x":"The opinionated backbone: errors as values, one sealed pipeline, DDD building blocks, and module composition. - Result pattern end to end. Result / Result with nine ErrorType…"},"1663":{"u":"/docs/guides/common-CAPABILITIES.html#monolith-now-services-later","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Monolith now, services later","x":"The framework's central promise, and it is a tested property, not a slogan. - Host-only extraction. Turning a module into its own service changes hosting code only; Domain,…"},"1664":{"u":"/docs/guides/common-CAPABILITIES.html#data-and-persistence","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Data and persistence","x":"EF Core with the cross-cutting concerns every production system eventually rebuilds, already built. - Multi-database routing. Every entity resolves to a DataSourceKey (engine,…"},"1665":{"u":"/docs/guides/common-CAPABILITIES.html#messaging-and-eventing","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Messaging and eventing","x":"Reliable events with two deliberately distinct paths: in-process domain events and durable integration events. - Transactional outbox. The save interceptor writes every captured…"},"1666":{"u":"/docs/guides/common-CAPABILITIES.html#http-api-surface","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"HTTP API surface","x":"Controllers and middleware that erase most CRUD endpoint code and keep the pipeline order under test. - Five generic read endpoints for free. EntityControllerBase gives list,…"},"1667":{"u":"/docs/guides/common-CAPABILITIES.html#identity-auth-and-authorization","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Identity, auth, and authorization","x":"A full identity building-block set you compose when you want it; a fresh app runs issuer-less until then. - RS256 + JWKS + OIDC discovery across services. TokenService signs with…"},"1668":{"u":"/docs/guides/common-CAPABILITIES.html#caching-resilience-and-performance","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Caching, resilience, and performance","x":"- Declarative handler caching. A query implements IQueryCacheable, its invalidating commands implement ICacheInvalidating, and the pipeline does the rest; tenant-scoped keys are…"},"1669":{"u":"/docs/guides/common-CAPABILITIES.html#ui-blazor-web-desktop-and-mobile","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"UI: Blazor web, desktop, and mobile","x":"One shared component layer serving Blazor Server, WASM, and MAUI hybrid heads on Android, iOS, Mac Catalyst, and Windows. - Module-composed application shell. AddUIModule() scans…"},"1670":{"u":"/docs/guides/common-CAPABILITIES.html#hosting-orchestration-and-operations","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Hosting, orchestration, and operations","x":"Aspire-first local orchestration and one-line production plumbing. - AppHost DSL. Thirteen extensions: WithSQLServerDataSource, WithCosmosDataSource, WithSqliteDataSource…"},"1671":{"u":"/docs/guides/common-CAPABILITIES.html#testing-and-quality-gates","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Testing and quality gates","x":"The framework ships its own enforcement: adopters subclass, and drift fails the build. - 124 test methods across 47 abstract bases. Thirty-seven are parameterized by your…"},"1672":{"u":"/docs/guides/common-CAPABILITIES.html#compliance-and-privacy","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Compliance and privacy","x":"- PII handling. [Pii] marks personal data; the audit trail redacts marked values at capture so it never becomes a second copy erasure has to chase; PiiRedactor (Redact,…"},"1673":{"u":"/docs/guides/common-CAPABILITIES.html#governance-versioning-and-supply-chain","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Governance, versioning, and supply chain","x":"- 117 ADRs. Every framework pattern is documented as an architecture decision record with context and consequences, published publicly and indexed in one place; adopters inherit…"},"1674":{"u":"/docs/guides/common-CAPABILITIES.html#documentation-library","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Documentation library","x":"This library holds ten framework guides, the ADR index, the governance rubric with scorecards, and a chapter-per-subsystem onboarding walkthrough. - Getting Started. Nothing to a…"},"1675":{"u":"/docs/guides/common-CAPABILITIES.html#constraints-worth-knowing","d":"MMCA.Common Capability Catalog","k":"Guides & Specifications","t":"Constraints worth knowing","x":"Design choices an adopter should read before sizing a plan around them. None is a defect; each is documented in source or an ADR. - The outbox is off in in-process mode. With…"},"1676":{"u":"/docs/guides/common-COST.html","d":"Cost & FinOps Notes (rubric §31)","k":"Guides & Specifications","x":"As of: 2026-09-02. MMCA.Common is a library, so it cannot provision anything: right-sizing, scale rules, budgets, and per-service cost attribution live in the consumer apps' IaC…"},"1677":{"u":"/docs/guides/common-COST.html#what-the-framework-does-for-cost","d":"Cost & FinOps Notes (rubric §31)","k":"Guides & Specifications","t":"What the framework does for cost","x":"- Telemetry ingestion is the real line item, so high-volume / low-value spans are dropped. OutboxPollFilterProcessor (MMCA.Common.Aspire) suppresses the recurring OutboxPoll…"},"1678":{"u":"/docs/guides/common-COST.html#recommended-consumer-defaults-set-these-downstream","d":"Cost & FinOps Notes (rubric §31)","k":"Guides & Specifications","t":"Recommended consumer defaults (set these downstream)","x":"- Telemetry retention & sampling. Tune Log Analytics retention to the minimum the consumer's compliance window allows, and set Telemetry:TracesSampleRatio (the built-in…"},"1679":{"u":"/docs/guides/common-COST.html#cost-attribution--guardrail-samples-distilled-from-mmcaadc","d":"Cost & FinOps Notes (rubric §31)","k":"Guides & Specifications","t":"Cost-attribution & guardrail samples (distilled from MMCA.ADC)","x":"These belong in the consumer's IaC, not the library, but the framework documents the shape so every consumer attributes spend and guards surges the same way. The worked, deployed…"},"1680":{"u":"/docs/guides/common-COST.html#out-of-scope-for-the-framework-by-design","d":"Cost & FinOps Notes (rubric §31)","k":"Guides & Specifications","t":"Out of scope for the framework (by design)","x":"Provisioning, scale rules, budgets, per-service cost attribution, and surge/revert automation are consumer/IaC concerns and are not added to the library: see also ADR-009…"},"1681":{"u":"/docs/guides/common-ECOMMERCE-SAMPLE.html","d":"Build MMCA.ECommerce: a Two-Module Store from the Templates","k":"Guides & Specifications","x":"As of: 2026-08-06. MMCA.ECommerce is the simplest e-commerce application on the MMCA.Common framework: a Products catalog module and an Orders module with line items, behind a…"},"1682":{"u":"/docs/guides/common-ECOMMERCE-SAMPLE.html#before-you-start","d":"Build MMCA.ECommerce: a Two-Module Store from the Templates","k":"Guides & Specifications","t":"Before you start","x":"- .NET 10 SDK (the framework targets net10.0 with LangVersion: preview). - Docker Desktop (Aspire provisions SQL Server as a container). - EF Core tools: dotnet tool install…"},"1683":{"u":"/docs/guides/common-ECOMMERCE-SAMPLE.html#2-generate-the-solution-with-the-products-module","d":"Build MMCA.ECommerce: a Two-Module Store from the Templates","k":"Guides & Specifications","t":"2. Generate the solution with the Products module","x":"Five options do most of this guide's old work. Three remove an axis a catalog product does not have, and the code for an axis you turn off is never generated: --flat drops the…"},"1684":{"u":"/docs/guides/common-ECOMMERCE-SAMPLE.html#3-add-the-orders-module","d":"Build MMCA.ECommerce: a Two-Module Store from the Templates","k":"Guides & Specifications","t":"3. Add the Orders module","x":"build/add-module.ps1 ships inside the solution you just generated. It runs dotnet new mmca-module with the shape options passed through, then performs every wire-up the template…"},"1685":{"u":"/docs/guides/common-ECOMMERCE-SAMPLE.html#4-reshape-products-into-a-catalog-product","d":"Build MMCA.ECommerce: a Two-Module Store from the Templates","k":"Guides & Specifications","t":"4. Reshape Products into a catalog product","x":"The scaffolded module arrives as the template's worked example in your namespaces, already shaped by the flags in step 2: no children, no status, no requester, Name instead of…"},"1686":{"u":"/docs/guides/common-ECOMMERCE-SAMPLE.html#5-reshape-orders-into-an-order-with-line-items","d":"Build MMCA.ECommerce: a Two-Module Store from the Templates","k":"Guides & Specifications","t":"5. Reshape Orders into an order with line items","x":"Orders keeps the child-collection pattern the template scaffolded, retargeted. -Child Item already did the naming (the entity is OrderItem, the slices are AddItem / EditItem /…"},"1687":{"u":"/docs/guides/common-ECOMMERCE-SAMPLE.html#6-point-the-ui-at-the-new-domain","d":"Build MMCA.ECommerce: a Two-Module Store from the Templates","k":"Guides & Specifications","t":"6. Point the UI at the new domain","x":"The scaffolded Blazor host already has the load-bearing parts: the typed ECommerceApiClient calling the API server-side through Aspire service discovery (no CORS, no token), the…"},"1688":{"u":"/docs/guides/common-ECOMMERCE-SAMPLE.html#7-create-the-migrations","d":"Build MMCA.ECommerce: a Two-Module Store from the Templates","k":"Guides & Specifications","t":"7. Create the migrations","x":"Neither module has a migration yet: any shape flag makes mmca-app drop the template's sample one (it described the sample shape), and -SkipMigration deferred the Orders one to…"},"1689":{"u":"/docs/guides/common-ECOMMERCE-SAMPLE.html#8-the-two-one-time-fixups-then-run-it","d":"Build MMCA.ECommerce: a Two-Module Store from the Templates","k":"Guides & Specifications","t":"8. The two one-time fixups, then run it","x":"Apply the two fixups the scaffold deliberately leaves to you (they are name-dependent, so no generated value could be right). First, sort the using directives and the identifier…"},"1690":{"u":"/docs/guides/common-ECOMMERCE-SAMPLE.html#verification-checklist","d":"Build MMCA.ECommerce: a Two-Module Store from the Templates","k":"Guides & Specifications","t":"Verification checklist","x":"1. Baseline green immediately after mmca-app, before any edit: 81 tests. 2. After build/add-module.ps1: still green at 99 tests, both modules' scaffolded suites running. 3. After…"},"1691":{"u":"/docs/guides/common-ECOMMERCE-SAMPLE.html#where-to-look-next","d":"Build MMCA.ECommerce: a Two-Module Store from the Templates","k":"Guides & Specifications","t":"Where to look next","x":"- MMCA.ECommerce: the finished result of this guide, build- and test-verified. - Getting started: the single-module path, the vertical-slice templates (mmca-command /…"},"1692":{"u":"/docs/guides/common-GETTING-STARTED.html","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","x":"As of: 2026-10-01 (MMCA.Templates 1.12.0, framework v1.218.0). MMCA.Common is a .NET 10 framework for DDD, Clean Architecture, and CQRS, shipped as a set of lockstep-versioned…"},"1693":{"u":"/docs/guides/common-GETTING-STARTED.html#before-you-start","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"Before you start","x":"- .NET 10 SDK. The framework targets net10.0 with LangVersion: preview for C extension types. - Docker Desktop. Aspire provisions SQL Server as a container, so you do not install…"},"1694":{"u":"/docs/guides/common-GETTING-STARTED.html#1-install-the-template-pack","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"1. Install the template pack","x":"Four templates arrive: mmca-app (a whole solution), mmca-module (a business module across all five layers), and mmca-command / mmca-query (a single vertical slice)."},"1695":{"u":"/docs/guides/common-GETTING-STARTED.html#2-generate-the-solution","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"2. Generate the solution","x":"Three names, and they are independent: the solution (also your root namespace), the first module in plural PascalCase, and that module's aggregate root in singular PascalCase.…"},"1696":{"u":"/docs/guides/common-GETTING-STARTED.html#3-build-and-test-before-you-change-anything","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"3. Build and test before you change anything","x":"That is a warning-free build with TreatWarningsAsErrors and all five analyzers at error severity, and a passing test run including the architecture-fitness rules, with no…"},"1697":{"u":"/docs/guides/common-GETTING-STARTED.html#4-check-the-first-migration","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"4. Check the first migration","x":"The scaffold ships the migrations project, its design-time factory, and (in the default shape) the sample's migrations already renamed for your aggregate. Look inside…"},"1698":{"u":"/docs/guides/common-GETTING-STARTED.html#5-run-it","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"5. Run it","x":"Run this from a real, interactive terminal. Launched from a headless or background shell the Aspire AppHost stalls at control-plane init and no dashboard appears. The dashboard…"},"1699":{"u":"/docs/guides/common-GETTING-STARTED.html#6-the-one-time-fixup","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"6. The one-time fixup","x":"The scaffold deliberately does not hand this one over, because renaming invalidates it and no fixed value is right for every name you could pick. It is covered in full in the…"},"1700":{"u":"/docs/guides/common-GETTING-STARTED.html#what-you-were-handed","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"What you were handed","x":"The Order aggregate arrives fully worked: a Result-returning factory, invariants, guarded mutations raising domain events, a child entity, soft-delete cascade, the caching pair,…"},"1701":{"u":"/docs/guides/common-GETTING-STARTED.html#add-your-next-feature","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"Add your next feature","x":"A vertical slice (the path every feature follows) is one command, run from the module's UseCases folder: Handlers, validators, and mappers are convention-scanned, so there is no…"},"1702":{"u":"/docs/guides/common-GETTING-STARTED.html#surface-the-slice-at-the-edge","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"Surface the slice at the edge","x":"The scaffold stops at the handler, and the template's closing instructions tell you to map the command in your module's controller. Every write in the generated app follows the…"},"1703":{"u":"/docs/guides/common-GETTING-STARTED.html#then-what","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"Then what","x":"- Upgrade the framework. Bump every MMCA.Common. entry in Directory.Packages.props together, in one pass. See Phase 7 and the versioning policy. - Add real authentication. Copy…"},"1704":{"u":"/docs/guides/common-GETTING-STARTED.html#verification-checklist","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"Verification checklist","x":"1. dotnet new mmca-app -n produced a solution that builds and tests green before you changed anything. 2. dotnet build .slnx is warning-free (TreatWarningsAsErrors + five…"},"1705":{"u":"/docs/guides/common-GETTING-STARTED.html#where-to-look-next","d":"Getting Started: Build a New App on MMCA.Common","k":"Guides & Specifications","t":"Where to look next","x":"- Templates: every parameter of all four templates, dropping the Blazor UI host, and how the pack is built. ADR-065 explains why it is derived from the reference app rather than…"},"1706":{"u":"/docs/guides/common-RESILIENCE.html","d":"Resilience & Business Continuity (rubric §29)","k":"Guides & Specifications","x":"As of: 2026-09-15. MMCA.Common is a library, so it cannot operate a deployment: restores, RTO/RPO, and SLO alerting are executed in the consumer apps' IaC (e.g. MMCA.ADC's…"},"1707":{"u":"/docs/guides/common-RESILIENCE.html#what-the-framework-provides-and-verifies-in-repo","d":"Resilience & Business Continuity (rubric §29)","k":"Guides & Specifications","t":"What the framework provides (and verifies in-repo)","x":"Failure isolation, graceful degradation, graceful startup, and the restore procedure itself are therefore demonstrated and tested centrally: the framework drills backup→restore…"},"1708":{"u":"/docs/guides/common-RESILIENCE.html#caching-is-fail-open-configurable-never-load-bearing","d":"Resilience & Business Continuity (rubric §29)","k":"Guides & Specifications","t":"Caching is fail-open (configurable, never load-bearing)","x":"The cache is an optimization, never the system of record, so nothing about it can turn a cache problem into a failed request. A miss, an unreachable cache, or a populate that…"},"1709":{"u":"/docs/guides/common-RESILIENCE.html#baseline-slo--error-budget-template-consumers-fill-in","d":"Resilience & Business Continuity (rubric §29)","k":"Guides & Specifications","t":"Baseline SLO / error-budget template (consumers fill in)","x":"Adopt and tune per app; ADC's filled-in version lives in infra/DISASTER-RECOVERY.md + the SLO metric-alerts in infra/main.bicep. Define RTO/RPO per service (ADC's worked…"},"1710":{"u":"/docs/guides/common-RESILIENCE.html#restore-drill-runbook-reference","d":"Resilience & Business Continuity (rubric §29)","k":"Guides & Specifications","t":"Restore-drill runbook (reference)","x":"The only evidence backups actually restore is a periodic drill: restore a throwaway copy, confirm it comes back Online, record the measured restore time, then delete the copy.…"},"1711":{"u":"/docs/guides/common-RESPONSIVE.html","d":"Responsive Design & Cross-Browser Support (rubric §22)","k":"Guides & Specifications","x":"As of: 2026-07-20. This document is the supported-device and browser matrix for the shared MMCA.Common.UI component library. It makes the responsive contract explicit (the rubric…"},"1712":{"u":"/docs/guides/common-RESPONSIVE.html#breakpoints","d":"Responsive Design & Cross-Browser Support (rubric §22)","k":"Guides & Specifications","t":"Breakpoints","x":"The framework keeps C viewport detection and CSS media queries aligned around one mobile threshold. The C 960px mobile cutoff and the CSS 1023.98px cutoff intentionally differ:…"},"1713":{"u":"/docs/guides/common-RESPONSIVE.html#supported-devices","d":"Responsive Design & Cross-Browser Support (rubric §22)","k":"Guides & Specifications","t":"Supported devices"},"1714":{"u":"/docs/guides/common-RESPONSIVE.html#touch-targets","d":"Responsive Design & Cross-Browser Support (rubric §22)","k":"Guides & Specifications","t":"Touch targets","x":"Interactive controls on mobile surfaces meet a 48px minimum hit area (Material Design), exceeding both WCAG 2.5.8 Target Size (Minimum, AA, 24px) and WCAG 2.5.5 Target Size…"},"1715":{"u":"/docs/guides/common-RESPONSIVE.html#grid-density","d":"Responsive Design & Cross-Browser Support (rubric §22)","k":"Guides & Specifications","t":"Grid density","x":"DataGridListPageBase exposes a DenseGrid property and a ToggleDensity() method. Derived list pages bind Dense=\"@DenseGrid\" on their MudDataGrid and surface a toggle. The chosen…"},"1716":{"u":"/docs/guides/common-RESPONSIVE.html#browser-matrix","d":"Responsive Design & Cross-Browser Support (rubric §22)","k":"Guides & Specifications","t":"Browser matrix","x":"The shared UI is tested against three Playwright engines in CI (.github/workflows/ci.yml, ui-e2e job): a real-browser axe (WCAG 2.1 AA) + render smoke against the backend-less…"},"1717":{"u":"/docs/guides/common-SMALL-APPS.html","d":"Small Apps: the lowest floor MMCA.Common has","k":"Guides & Specifications","x":"As of: 2026-08-30. Two mmca-app options decide the shape of the solution rather than the shape of the sample module, and together they are the smallest thing the framework…"},"1718":{"u":"/docs/guides/common-SMALL-APPS.html#why-this-shape-exists","d":"Small Apps: the lowest floor MMCA.Common has","k":"Guides & Specifications","t":"Why this shape exists","x":"The default mmca-app output is a twelve-project solution: five module layers, a REST API host, a Blazor UI host, an Aspire AppHost, a migrations project, and three test projects.…"},"1719":{"u":"/docs/guides/common-SMALL-APPS.html#the-five-minute-path","d":"Small Apps: the lowest floor MMCA.Common has","k":"Guides & Specifications","t":"The five-minute path","x":"Add --flat if the aggregate owns no child collection; the four module-shape flags all still apply (see the templates guide). Warning-free under all five analyzers with…"},"1720":{"u":"/docs/guides/common-SMALL-APPS.html#what-you-get-anyway","d":"Small Apps: the lowest floor MMCA.Common has","k":"Guides & Specifications","t":"What you get anyway","x":"Nothing in the framework is disabled by this shape. The application code is identical to the SQL-Server-plus-Aspire output: the engine is a configuration-base choice plus a…"},"1721":{"u":"/docs/guides/common-SMALL-APPS.html#what-is-deliberately-off","d":"Small Apps: the lowest floor MMCA.Common has","k":"Guides & Specifications","t":"What is deliberately off","x":"- The transactional outbox. With in-process messaging (the default, since no MessageBus:Provider is configured) the outbox resolves off: events are dispatched inside the process…"},"1722":{"u":"/docs/guides/common-SMALL-APPS.html#adding-a-second-module","d":"Small Apps: the lowest floor MMCA.Common has","k":"Guides & Specifications","t":"Adding a second module","x":"mmca-module takes --database sqlserversqlite, and a solution generated by mmca-app adds its modules through build/add-module.ps1, which reads the engine off the API host's own…"},"1723":{"u":"/docs/guides/common-SMALL-APPS.html#two-limitations-worth-knowing-before-you-start","d":"Small Apps: the lowest floor MMCA.Common has","k":"Guides & Specifications","t":"Two limitations worth knowing before you start","x":"1. Writes need the X-Tenant-Id header. The generated app enables tenancy with RequireTenant: false, so an unresolved caller reads across tenants, but a write with no tenant…"},"1724":{"u":"/docs/guides/common-SMALL-APPS.html#when-to-flip-each-switch","d":"Small Apps: the lowest floor MMCA.Common has","k":"Guides & Specifications","t":"When to flip each switch","x":"Each of these is additive: the code you have written does not change, and the change is confined to configuration or to a host project. ---"},"1725":{"u":"/docs/guides/common-SMALL-APPS.html#where-to-look-next","d":"Small Apps: the lowest floor MMCA.Common has","k":"Guides & Specifications","t":"Where to look next","x":"- Getting started: the full-shape path, in six steps, with Aspire and SQL Server. - Templates: every parameter of all four templates, including the two solution-shape options…"},"1726":{"u":"/docs/guides/common-TEMPLATES.html","d":"Templates: scaffolding an MMCA app","k":"Guides & Specifications","x":"As of: 2026-09-20 (MMCA.Templates 1.11.0, framework v1.206.0). MMCA.Templates is a dotnet new pack that scaffolds solutions, modules, and vertical slices on the MMCA.Common…"},"1727":{"u":"/docs/guides/common-TEMPLATES.html#mmca-app","d":"Templates: scaffolding an MMCA app","k":"Guides & Specifications","t":"mmca-app","x":"The module and aggregate names are independent, so --module Billing --aggregate Invoice is fine. Everything derived from them follows: routes, the Aspire database resource, the…"},"1728":{"u":"/docs/guides/common-TEMPLATES.html#mmca-module","d":"Templates: scaffolding an MMCA app","k":"Guides & Specifications","t":"mmca-module","x":"The six shape options behave exactly as they do for mmca-app, and they are per module: a solution can hold a flat, status-less catalog module beside one whose aggregate owns a…"},"1729":{"u":"/docs/guides/common-TEMPLATES.html#buildadd-moduleps1","d":"Templates: scaffolding an MMCA app","k":"Guides & Specifications","t":"build/add-module.ps1","x":"Since 1.4.0 every solution mmca-app generates ships this script, and it is the supported way to add a second module. It runs mmca-module with your shape options passed through,…"},"1730":{"u":"/docs/guides/common-TEMPLATES.html#mmca-command-and-mmca-query","d":"Templates: scaffolding an MMCA app","k":"Guides & Specifications","t":"mmca-command and mmca-query","x":"Run these from the module's UseCases folder. Each creates a folder named after the slice holding its two files. --child-collection exists because both handlers load through…"},"1731":{"u":"/docs/guides/common-TEMPLATES.html#how-the-pack-is-built","d":"Templates: scaffolding an MMCA app","k":"Guides & Specifications","t":"How the pack is built","x":"The template content is the MMCA.Helpdesk reference application itself, staged at pack time. There is no second copy of the solution, so the template cannot drift from the app…"},"1732":{"u":"/docs/guides/common-VERSIONING.html","d":"Versioning & Breaking-Change Policy","k":"Guides & Specifications","x":"As of: 2026-09-03. MMCA.Common publishes its NuGet packages (the authoritative list and count live in FACTS.md) versioned and released together as a single unit. They share one…"},"1733":{"u":"/docs/guides/common-VERSIONING.html#semantic-versioning","d":"Versioning & Breaking-Change Policy","k":"Guides & Specifications","t":"Semantic Versioning","x":"Versions follow SemVer 2.0: MAJOR.MINOR.PATCH: - MAJOR: reserved (see \"Breaking changes within 1.x\" below). - MINOR: new capability, and the channel breaking changes currently…"},"1734":{"u":"/docs/guides/common-VERSIONING.html#what-counts-as-breaking","d":"Versioning & Breaking-Change Policy","k":"Guides & Specifications","t":"What counts as breaking","x":"A change is breaking if it is any of: - Removing or renaming a public type/member, or changing a signature. - Changing the meaning of an existing configuration key, or changing a…"},"1735":{"u":"/docs/guides/common-VERSIONING.html#breaking-changes-within-1x","d":"Versioning & Breaking-Change Policy","k":"Guides & Specifications","t":"Breaking changes within 1.x","x":"Breaking changes ship as MINOR bumps, not MAJOR ones, and the version number is therefore not a reliable breakage signal on its own. This is deliberate and follows from the…"},"1736":{"u":"/docs/guides/common-VERSIONING.html#consumer-rollout","d":"Versioning & Breaking-Change Policy","k":"Guides & Specifications","t":"Consumer rollout","x":"Per project convention, framework upgrades are swept across all consumers in one pass: there are no opt-in flags or phased rollouts for a MMCA.Common change. When a release…"},"1737":{"u":"/docs/guides/common-VERSIONING.html#deprecation","d":"Versioning & Breaking-Change Policy","k":"Guides & Specifications","t":"Deprecation","x":"There is no [Obsolete] grace period today. Because the lockstep sweep updates every first-party caller in the same change set, a superseded API is removed in the release that…"},"1738":{"u":"/docs/guides/common-VERSIONING.html#supply-chain","d":"Versioning & Breaking-Change Policy","k":"Guides & Specifications","t":"Supply chain","x":"- All package versions are centrally pinned (Directory.Packages.props). - NuGet lock files are committed for reproducible restores. - MassTransit is pinned to v8 by policy (v9…"},"1739":{"u":"/docs/guides/store-ACCESSIBILITY-SCREENREADER-PASS.html","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","x":"As of: 2026-09-07. The automated layer (axe-core WCAG 2.1 AA scans in Tests/E2E/MMCA.Store.E2E.Tests/Workflows/AccessibilityTests.cs plus the shared Login/Register/Profile bases…"},"1740":{"u":"/docs/guides/store-ACCESSIBILITY-SCREENREADER-PASS.html#tools","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","t":"Tools","x":"Run against the app started via Aspire (dotnet run --project Source/Hosting/MMCA.Store.AppHost), reaching the Web UI at https://localhost:6002. Test with the keyboard only (no…"},"1741":{"u":"/docs/guides/store-ACCESSIBILITY-SCREENREADER-PASS.html#what-to-verify-on-every-flow","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","t":"What to verify on every flow","x":"1. Landmarks and headings. The SR's landmark/heading list (NVDA Insert+F7) exposes a logical banner / navigation / main structure and a sensible h1...hN outline (one h1 per…"},"1742":{"u":"/docs/guides/store-ACCESSIBILITY-SCREENREADER-PASS.html#flows-to-cover-mirror-the-automated-accessibilitytests-plus-the-role-journeys","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","t":"Flows to cover (mirror the automated AccessibilityTests plus the role journeys)"},"1743":{"u":"/docs/guides/store-ACCESSIBILITY-SCREENREADER-PASS.html#results-log","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","t":"Results log","x":"Record one row per pass. A flow with any unresolved blocker is a FAIL (open a backlog item for it)."},"1744":{"u":"/docs/guides/store-ACCESSIBILITY-SCREENREADER-PASS.html#after-a-pass","d":"Manual Screen-Reader Pass: Runbook (§21 Accessibility)","k":"Guides & Specifications","t":"After a pass","x":"- File any defect as a remediation item; cross-link it from the §21 row's evidence. - Update the dated row above so the scorecard can cite a real, current manual pass (this is…"},"1745":{"u":"/docs/guides/store-BusinessWorkflows.html","d":"MMCA Business Workflow Analysis","k":"Guides & Specifications","x":"As of: 2026-09-07."},"1746":{"u":"/docs/guides/store-BusinessWorkflows.html#workflow-list-summary","d":"MMCA Business Workflow Analysis","k":"Guides & Specifications","t":"Workflow List Summary","x":"---"},"1747":{"u":"/docs/guides/store-BusinessWorkflows.html#1-identity-module-workflows","d":"MMCA Business Workflow Analysis","k":"Guides & Specifications","t":"1. Identity Module Workflows","x":"Entry Point: POST /auth/register, AuthController.RegisterAsync(), AllowAnonymous Execution Path: Business Steps: 1. Validate registration input (email, password, first name, last…"},"1748":{"u":"/docs/guides/store-BusinessWorkflows.html#2-catalog-module-workflows","d":"MMCA Business Workflow Analysis","k":"Guides & Specifications","t":"2. Catalog Module Workflows","x":"Entry Point: POST /categories, Admin only, [Idempotent] Response: 201 Created with CategoryDTO Entry Point: PUT /categories/{id}/name, Admin only Entry Point: PUT…"},"1749":{"u":"/docs/guides/store-BusinessWorkflows.html#3-sales-module-workflows","d":"MMCA Business Workflow Analysis","k":"Guides & Specifications","t":"3. Sales Module Workflows","x":"Entry Point: POST /shoppingcarts/{customerId}/shoppingcartitems, Authenticated (owner or admin via OwnerOrAdminFilter) Decision Points: - Product variant doesn't exist - NotFound…"},"1750":{"u":"/docs/guides/store-BusinessWorkflows.html#4-ui-workflows","d":"MMCA Business Workflow Analysis","k":"Guides & Specifications","t":"4. UI Workflows","x":"The UI provides a complete shopping experience through the CartDrawer component and Blazor pages. The CartDrawer is the only cart UI: there is no dedicated cart page. It is a…"},"1751":{"u":"/docs/guides/store-BusinessWorkflows.html#5-cross-module-interactions","d":"MMCA Business Workflow Analysis","k":"Guides & Specifications","t":"5. Cross-Module Interactions","x":"Both export edges are best-effort: an unreachable peer degrades that one section rather than failing the export, so neither carries a startup wait. Asynchronously, four…"},"1752":{"u":"/docs/guides/store-BusinessWorkflows.html#6-external-interactions","d":"MMCA Business Workflow Analysis","k":"Guides & Specifications","t":"6. External Interactions","x":"---"},"1753":{"u":"/docs/guides/store-BusinessWorkflows.html#7-cross-cutting-concerns-participating-in-workflows","d":"MMCA Business Workflow Analysis","k":"Guides & Specifications","t":"7. Cross-Cutting Concerns Participating in Workflows","x":"---"},"1754":{"u":"/docs/guides/store-BusinessWorkflows.html#8-end-to-end-customer-journey","d":"MMCA Business Workflow Analysis","k":"Guides & Specifications","t":"8. End-to-End Customer Journey","x":"Alternative Flows: - Payment fails - Order status PaymentFailed - customer can retry (create new Stripe session) - Cancel order - Status Cancelled (from PendingPayment,…"},"1755":{"u":"/docs/guides/store-BusinessWorkflows.html#9-potentially-missing-or-incomplete-workflows","d":"MMCA Business Workflow Analysis","k":"Guides & Specifications","t":"9. Potentially Missing or Incomplete Workflows","x":"--- This document is derived from source code analysis. All workflows, decisions, and behaviors described above are confirmed implementations traceable to the referenced source…"},"1756":{"u":"/docs/guides/store-NavigationFlow.html","d":"Navigation Flow","k":"Guides & Specifications","x":"As of: 2026-09-25. This document maps the site navigation flow for each actor in the MMCA.Store application. Each mermaid diagram shows the pages accessible to that actor and the…"},"1757":{"u":"/docs/guides/store-NavigationFlow.html#actors","d":"Navigation Flow","k":"Guides & Specifications","t":"Actors","x":"Roles and enforcement: Admin is the only elevated role (registration creates a Customer). The 19 admin pages carry page-level [Authorize(Roles = \"Admin\")]. The three per-module…"},"1758":{"u":"/docs/guides/store-NavigationFlow.html#1-anonymous-user","d":"Navigation Flow","k":"Guides & Specifications","t":"1. Anonymous User","x":"Pages accessible without authentication: home, login, register, the two password-reset pages, and the public catalog. Add-to-cart on the product detail page sits inside an…"},"1759":{"u":"/docs/guides/store-NavigationFlow.html#2-customer-authenticated-user","d":"Navigation Flow","k":"Guides & Specifications","t":"2. Customer (Authenticated User)","x":"Inherits all anonymous pages. Gains the profile page, the cart drawer (a layout component, not a route), checkout, and their own orders. Unauthenticated visitors deep-linking to…"},"1760":{"u":"/docs/guides/store-NavigationFlow.html#3-admin","d":"Navigation Flow","k":"Guides & Specifications","t":"3. Admin","x":"Inherits all customer pages, plus the admin CRUD surfaces for all three modules and the user and role administration pages. Every page below except the shared /orders pair (see…"},"1761":{"u":"/docs/guides/store-NavigationFlow.html#authorization-model","d":"Navigation Flow","k":"Guides & Specifications","t":"Authorization Model","x":"Three cooperating layers; the API is always the boundary: 1. Page-level route guards. The 19 admin pages carry [Authorize(Roles = \"Admin\")] and /profile / /orders carry…"},"1762":{"u":"/docs/guides/store-Specification.html","d":"MMCA Business Specification Document","k":"Guides & Specifications","x":"As of: 2026-09-07."},"1763":{"u":"/docs/guides/store-Specification.html#1-system-overview","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"1. System Overview","x":"MMCA is an e-commerce platform built with .NET 10.0 using DDD and Clean Architecture. The business logic is organized as modules (Catalog, Sales, Identity) that have been…"},"1764":{"u":"/docs/guides/store-Specification.html#2-core-business-entities","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"2. Core Business Entities","x":"Description: A classification grouping for products. Supports hierarchical (parent-child) structures for nested categorization (e.g., \"Jewelry\" \"Rings\"). Key Properties:…"},"1765":{"u":"/docs/guides/store-Specification.html#3-business-workflows","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"3. Business Workflows","x":"Trigger: A new user submits registration with first name, last name, email, and password. Steps: 1. Validate registration request (email format, password requirements) 2. Verify…"},"1766":{"u":"/docs/guides/store-Specification.html#4-order-status-state-machine","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"4. Order Status State Machine","x":"Cancellable States: PendingPayment, PaymentInitiated, PaymentFailed. Shipped is deliberately NOT cancellable, for the same reason Paid is not: the goods and the money have both…"},"1767":{"u":"/docs/guides/store-Specification.html#5-business-rules","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"5. Business Rules","x":"---"},"1768":{"u":"/docs/guides/store-Specification.html#6-use-cases","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"6. Use Cases","x":"---"},"1769":{"u":"/docs/guides/store-Specification.html#7-domain-events-and-state-changes","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"7. Domain Events and State Changes","x":"Most mutations raise a single {Entity}Changed lifecycle event carrying a DomainEntityState discriminator (Added, Updated, Deleted) rather than one event per verb (ADR-083). Those…"},"1770":{"u":"/docs/guides/store-Specification.html#8-external-integrations","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"8. External Integrations","x":"Purpose: Processes online customer payments for orders. Business Impact: Enables the system to collect payments from customers and confirm payment success or failure…"},"1771":{"u":"/docs/guides/store-Specification.html#9-authorization-model","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"9. Authorization Model","x":"Permission-based endpoints: an endpoint states the capability it needs with [HasPermission(...)] over a constant from the owning module's {Module}Permissions, and each module…"},"1772":{"u":"/docs/guides/store-Specification.html#10-cross-module-communication","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"10. Cross-Module Communication","x":"The system enforces strict module boundaries. Modules communicate only through shared interface contracts: Across process boundaries these interfaces are satisfied by gRPC…"},"1773":{"u":"/docs/guides/store-Specification.html#11-user-interface","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"11. User Interface","x":"The UI is a Blazor Server + WebAssembly hybrid (InteractiveAuto render mode) using MudBlazor component library. It supports multiple hosting targets: - Web (Server + WASM):…"},"1774":{"u":"/docs/guides/store-Specification.html#12-cross-cutting-infrastructure","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"12. Cross-Cutting Infrastructure","x":"The IdempotencyFilter (applied via [Idempotent] attribute on Create endpoints) caches the first response for a given Idempotency-Key header value for 24 hours. Duplicate requests…"},"1775":{"u":"/docs/guides/store-Specification.html#13-testing","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"13. Testing","x":"- Full customer journey: Register - Browse - Add to Cart - Checkout - Admin Pay - Deliver - Order lifecycle: all state transitions including cancellation with inventory…"},"1776":{"u":"/docs/guides/store-Specification.html#14-missing-or-unclear-business-logic","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"14. Missing or Unclear Business Logic","x":"Observation: Four handlers send email today: the password-reset request (Section 3.12), OrderPaidHandler (payment receipt, which prints a struck \"Was\" amount and the promotion…"},"1777":{"u":"/docs/guides/store-Specification.html#15-seed-data-initial-system-state","d":"MMCA Business Specification Document","k":"Guides & Specifications","t":"15. Seed Data (Initial System State)","x":"The system seeds the following data at startup: Users: - Admin: one seeded administrator account (Admin role, no Customer record; credentials are environment-specific and not…"},"1778":{"u":"/articles/index.html","d":"The MMCA.Common article series","k":"The MMCA.Common series","x":"A long-form series that turns the MMCA.Common framework's architecture decisions into teachable patterns: the Result railway, the transactional outbox, database-per-service, JWKS…"},"1779":{"u":"/articles/index.html#the-series-53-articles","d":"The MMCA.Common article series","k":"The MMCA.Common series","t":"The series (53 articles)","x":"★ = cornerstone pillar (publish first; everything links up to these). The numbering is the reading order. Each article builds on the ones before it, so reading 1 through 53 in…"},"1780":{"u":"/articles/open-sourced-enterprise-dotnet-34-categories.html","d":"I open-sourced the enterprise .NET plumbing I never want to rewrite, and graded it against 34 categories","k":"The MMCA.Common series","x":"Subtitle: A .NET 10 framework for DDD, Clean Architecture, and CQRS, built as a modular monolith that extracts to microservices without a rewrite, and scored in the open against…"},"1781":{"u":"/articles/open-sourced-enterprise-dotnet-34-categories.html#what-it-is","d":"I open-sourced the enterprise .NET plumbing I never want to rewrite, and graded it against 34 categories","k":"The MMCA.Common series","t":"What it is","x":"MMCA.Common is a set of twenty-two NuGet packages that give you a DDD + Clean Architecture + CQRS foundation as a modular monolith, plus the extraction boundaries to pull a…"},"1782":{"u":"/articles/open-sourced-enterprise-dotnet-34-categories.html#the-one-thing-that-makes-it-different","d":"I open-sourced the enterprise .NET plumbing I never want to rewrite, and graded it against 34 categories","k":"The MMCA.Common series","t":"The one thing that makes it different","x":"Plenty of repositories will sell you Clean Architecture. The difference here is that the rules are not prose in a README. They are executable, and they fail the build. The…"},"1783":{"u":"/articles/open-sourced-enterprise-dotnet-34-categories.html#modular-monolith-now-microservices-later-no-rewrite","d":"I open-sourced the enterprise .NET plumbing I never want to rewrite, and graded it against 34 categories","k":"The MMCA.Common series","t":"Modular monolith now, microservices later, no rewrite","x":"The other thesis baked into the framework is that \"monolith vs microservices\" is a false binary. You build the extraction point now and cut the service when (if) you actually…"},"1784":{"u":"/articles/open-sourced-enterprise-dotnet-34-categories.html#i-scored-it-on-two-axes-then-published-every-gap","d":"I open-sourced the enterprise .NET plumbing I never want to rewrite, and graded it against 34 categories","k":"The MMCA.Common series","t":"I scored it on two axes, then published every gap","x":"Here is the part that usually gets left out of \"look at my framework\" posts. I graded MMCA.Common against a 34-category architecture rubric (backend, front-end, and…"},"1785":{"u":"/articles/open-sourced-enterprise-dotnet-34-categories.html#it-runs-in-production-on-two-real-apps","d":"I open-sourced the enterprise .NET plumbing I never want to rewrite, and graded it against 34 categories","k":"The MMCA.Common series","t":"It runs in production, on two real apps","x":"MMCA.Common is not a toy. Two deployed apps are built on it: - MMCA.ADC, the Atlanta Developers Conference app, deployed to Azure and used to run a live event. - MMCA.Store, an…"},"1786":{"u":"/articles/open-sourced-enterprise-dotnet-34-categories.html#what-this-series-will-cover","d":"I open-sourced the enterprise .NET plumbing I never want to rewrite, and graded it against 34 categories","k":"The MMCA.Common series","t":"What this series will cover","x":"Over the coming weeks I will take one pattern per article and go deep: - The Result railway that retired exceptions-as-control-flow. - The transactional outbox, in full. -…"},"1787":{"u":"/articles/open-sourced-enterprise-dotnet-34-categories.html#try-it-or-come-argue-with-me","d":"I open-sourced the enterprise .NET plumbing I never want to rewrite, and graded it against 34 categories","k":"The MMCA.Common series","t":"Try it, or come argue with me","x":"MMCA.Common is Apache-2.0 licensed and open source. The fastest way to form an opinion is to read the scorecard (the gaps are the honest part) and skim the ADRs (the \"why\" behind…"},"1788":{"u":"/articles/modular-monolith-to-microservices.html","d":"Modular monolith to microservices, without the rewrite","k":"The MMCA.Common series","x":"Subtitle: \"Monolith or microservices\" is the wrong question. Build the extraction point now, keep it tested, and cut the service later, on a boundary you have already proven. ---…"},"1789":{"u":"/articles/modular-monolith-to-microservices.html#why-it-matters","d":"Modular monolith to microservices, without the rewrite","k":"The MMCA.Common series","t":"Why it matters","x":"The reason the \"we will split it later\" plan usually fails is that the monolith quietly grows couplings that the eventual split has to unwind. Two modules share a database, so a…"},"1790":{"u":"/articles/modular-monolith-to-microservices.html#the-mmca-answer-four-extraction-points-all-enforced-in-the-monolith","d":"Modular monolith to microservices, without the rewrite","k":"The MMCA.Common series","t":"The MMCA answer: four extraction points, all enforced in the monolith","x":"There are four places a \"split it later\" plan leaks, and the framework closes each one with a real mechanism, not a guideline. The first leak is the shared database. In…"},"1791":{"u":"/articles/modular-monolith-to-microservices.html#what-the-boundary-looks-like-in-code","d":"Modular monolith to microservices, without the rewrite","k":"The MMCA.Common series","t":"What the boundary looks like in code","x":"The whole thesis fits in one DI swap. The same handler depends on the same interface; only the registration line differs between the two topologies. The transport choice is one…"},"1792":{"u":"/articles/modular-monolith-to-microservices.html#trade-offs-honestly","d":"Modular monolith to microservices, without the rewrite","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"Reversibility is not free, and the ADRs are candid about the bill. - Distributed-systems semantics arrive the moment you split. Cross-service consistency is eventual (outbox plus…"},"1793":{"u":"/articles/modular-monolith-to-microservices.html#apply-this-even-without-mmca","d":"Modular monolith to microservices, without the rewrite","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"You do not need this framework to keep the extraction point open. You need three habits. 1. Give each module its own logical data ownership now, even in one database. No…"},"1794":{"u":"/articles/34-category-architecture-rubric.html","d":"What good architecture actually means: a 34-category rubric you can score yourself against","k":"The MMCA.Common series","x":"Subtitle: \"Clean architecture\" is not a vibe. Here is a 34-category rubric that scores any system on two axes, demands evidence for every score, and exposes the one line that…"},"1795":{"u":"/articles/34-category-architecture-rubric.html#why-good-architecture-needs-a-rubric","d":"What good architecture actually means: a 34-category rubric you can score yourself against","k":"The MMCA.Common series","t":"Why \"good architecture\" needs a rubric","x":"The problem with architectural quality is that it is multi-dimensional and most of the dimensions are invisible until they bite you. SOLID discipline is invisible until a feature…"},"1796":{"u":"/articles/34-category-architecture-rubric.html#the-structure-three-parts-34-categories","d":"What good architecture actually means: a 34-category rubric you can score yourself against","k":"The MMCA.Common series","t":"The structure: three parts, 34 categories","x":"The rubric (Architecture Evaluation Criteria) is organized into three parts that match how a real system is actually built and operated. It stands at version 2 (ADR-110), which…"},"1797":{"u":"/articles/34-category-architecture-rubric.html#the-two-axes-maturity-and-implementation-evidence-or-it-does-not-count","d":"What good architecture actually means: a 34-category rubric you can score yourself against","k":"The MMCA.Common series","t":"The two axes: maturity and implementation, evidence or it does not count","x":"Here is the part that makes the rubric honest. Each category gets two scores, not one. - Maturity (0 to 4) measures process: how consistently and how well-governed the pattern…"},"1798":{"u":"/articles/34-category-architecture-rubric.html#how-the-index-is-computed","d":"What good architecture actually means: a 34-category rubric you can score yourself against","k":"The MMCA.Common series","t":"How the index is computed","x":"The scores roll up into two indices using per-category weights (defaults provided, adjustable per engagement). The maturity index is the sum of (category maturity × weight)…"},"1799":{"u":"/articles/34-category-architecture-rubric.html#the-worked-example-mmcacommon-scored-on-both-axes","d":"What good architecture actually means: a 34-category rubric you can score yourself against","k":"The MMCA.Common series","t":"The worked example: MMCA.Common, scored on both axes","x":"When I ran MMCA.Common through the rubric (the canonical, version-controlled scorecard lives in MMCA.Common: Architecture Scorecard), it landed at a maturity index of 96.6% and…"},"1800":{"u":"/articles/34-category-architecture-rubric.html#the-one-insight-worth-the-whole-exercise","d":"What good architecture actually means: a 34-category rubric you can score yourself against","k":"The MMCA.Common series","t":"The one insight worth the whole exercise","x":"When I lined the scores up, a single pattern explained almost all of the variance between the top tier and the middle tier, and it is the pattern that has driven every re-score…"},"1801":{"u":"/articles/34-category-architecture-rubric.html#trade-offs-honestly","d":"What good architecture actually means: a 34-category rubric you can score yourself against","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"A rubric is a tool, not an oracle, and it has sharp edges worth naming. - It can be gamed. If you score yourself, you can rationalize a 3 into a 4. The evidence requirement is…"},"1802":{"u":"/articles/34-category-architecture-rubric.html#apply-this-even-without-mmca","d":"What good architecture actually means: a 34-category rubric you can score yourself against","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"You do not need this framework, or even this exact rubric, to get the benefit: 1. Pick a fixed set of categories and score every system against the same set. Comparability is…"},"1803":{"u":"/articles/result-railway-csharp.html","d":"Stop throwing exceptions for control flow: the Result railway in C","k":"The MMCA.Common series","x":"Subtitle: \"This order ID does not exist\" is not an exceptional event, it is a routine branch of normal control flow. Here is the Result railway that models it as a value, and why…"},"1804":{"u":"/articles/result-railway-csharp.html#why-exceptions-are-not-a-control-flow-mechanism","d":"Stop throwing exceptions for control flow: the Result railway in C","k":"The MMCA.Common series","t":"Why exceptions are not a control-flow mechanism","x":"Exceptions are excellent at one job: aborting a computation that has gone genuinely wrong and unwinding the stack to someone who can recover. They are a poor fit for expected…"},"1805":{"u":"/articles/result-railway-csharp.html#the-mmca-answer-three-small-types-and-a-railway","d":"Stop throwing exceptions for control flow: the Result railway in C","k":"The MMCA.Common series","t":"The MMCA answer: three small types and a railway","x":"The pattern is factored into three dependency-free pieces, all living in MMCA.Common.Shared, the innermost layer (the Blazor WebAssembly UI can reference it without dragging in…"},"1806":{"u":"/articles/result-railway-csharp.html#trade-offs-honestly","d":"Stop throwing exceptions for control flow: the Result railway in C","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The Result pattern is not free, and ADR-013 names the rough edges rather than hiding them: - More ceremony at the call site than letting an exception bubble. Combine absorbs most…"},"1807":{"u":"/articles/result-railway-csharp.html#apply-this-even-without-mmca","d":"Stop throwing exceptions for control flow: the Result railway in C","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"You do not need this framework to adopt the railway. The ideas port to any stack: 1. Make failure visible in the signature. Return a result type (Result , OneOf, ErrorOr, your…"},"1808":{"u":"/articles/kill-anemic-domain-model.html","d":"Kill the anemic domain model: rich aggregates with factory methods that return Result","k":"The MMCA.Common series","x":"Subtitle: Public setters plus logic-in-services is not a domain model, it is a database row with extra steps. Here is the three-rung entity hierarchy in MMCA.Common that makes…"},"1809":{"u":"/articles/kill-anemic-domain-model.html#why-it-matters","d":"Kill the anemic domain model: rich aggregates with factory methods that return Result","k":"The MMCA.Common series","t":"Why it matters","x":"The cost is not theoretical. When the rules live outside the object: - Invalid state is representable. You can construct an Order with a negative total and no lines, because the…"},"1810":{"u":"/articles/kill-anemic-domain-model.html#the-mmca-answer-a-three-rung-hierarchy-one-capability-per-rung","d":"Kill the anemic domain model: rich aggregates with factory methods that return Result","k":"The MMCA.Common series","t":"The MMCA answer: a three-rung hierarchy, one capability per rung","x":"MMCA.Common builds every entity on a three-class inheritance chain. Read it bottom-up; each rung adds exactly one capability. BaseEntity is almost nothing: a single required init…"},"1811":{"u":"/articles/kill-anemic-domain-model.html#trade-offs-honestly","d":"Kill the anemic domain model: rich aggregates with factory methods that return Result","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"Rich aggregates are the right default, but they are not free, and the scorecard's §4 review names the gaps: - More boilerplate per entity. A private constructor, a static…"},"1812":{"u":"/articles/kill-anemic-domain-model.html#apply-this-even-without-mmca","d":"Kill the anemic domain model: rich aggregates with factory methods that return Result","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"You do not need this framework to drop the anemic model. The moves are portable: 1. Make constructors private and add a static factory that validates and returns a result type.…"},"1813":{"u":"/articles/specification-pattern.html","d":"Specifications over LINQ spaghetti: composable, reusable query intent","k":"The MMCA.Common series","x":"Subtitle: A .Where(s = s.SpeakerId == id && !s.IsDeleted && s.IsPublished) copied into nine controllers is nine places to forget the authorization clause. Here is the…"},"1814":{"u":"/articles/specification-pattern.html#why-it-matters","d":"Specifications over LINQ spaghetti: composable, reusable query intent","k":"The MMCA.Common series","t":"Why it matters","x":"Query predicates are not throwaway plumbing. Some of them encode business rules (\"a published event is one whose status is Published and whose start date has not passed\") and…"},"1815":{"u":"/articles/specification-pattern.html#the-mmca-answer-trusted-specifications-untrusted-filters-one-pipeline","d":"Specifications over LINQ spaghetti: composable, reusable query intent","k":"The MMCA.Common series","t":"The MMCA answer: trusted specifications, untrusted filters, one pipeline","x":"MMCA.Common splits the read side into three cooperating sub-systems, and the split is the point. ISpecification exposes two faces of the same rule: - a Criteria expression tree…"},"1816":{"u":"/articles/specification-pattern.html#trade-offs-honestly","d":"Specifications over LINQ spaghetti: composable, reusable query intent","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The pattern earns its keep, but a few real, specific gaps are worth stating plainly rather than glossing: - Two query vocabularies coexist. Specifications (typed,…"},"1817":{"u":"/articles/specification-pattern.html#apply-this-even-without-mmca","d":"Specifications over LINQ spaghetti: composable, reusable query intent","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The core ideas port to any stack and any ORM: 1. Give predicates a type and a name. A PublishedEvent specification object beats a copied .Where() lambda. Named intent is…"},"1818":{"u":"/articles/cqrs-decorator-pipeline.html","d":"The CQRS decorator pipeline: logging, caching, and transactions without touching a handler","k":"The MMCA.Common series","x":"Subtitle: Cross-cutting concerns belong around a handler, not inside it. Here is a Scrutor-composed decorator pipeline where logging, caching, and transactions wrap every command…"},"1819":{"u":"/articles/cqrs-decorator-pipeline.html#why-it-matters","d":"The CQRS decorator pipeline: logging, caching, and transactions without touching a handler","k":"The MMCA.Common series","t":"Why it matters","x":"The scattered approach fails in two specific ways. First, drift. When the transaction boilerplate lives in every handler, one handler eventually forgets it, or wraps the wrong…"},"1820":{"u":"/articles/cqrs-decorator-pipeline.html#the-shape-thin-handlers-fat-pipeline","d":"The CQRS decorator pipeline: logging, caching, and transactions without touching a handler","k":"The MMCA.Common series","t":"The shape: thin handlers, fat pipeline","x":"Every write and every read in MMCA.Common is a use case behind one of two interfaces: One method each. TResult is almost always a Result or Result (the railway error type from…"},"1821":{"u":"/articles/cqrs-decorator-pipeline.html#how-the-pipeline-is-assembled-and-why-order-is-the-whole-game","d":"The CQRS decorator pipeline: logging, caching, and transactions without touching a handler","k":"The MMCA.Common series","t":"How the pipeline is assembled, and why order is the whole game","x":"The wiring uses Scrutor's TryDecorate, and there is one rule you have to internalize: TryDecorate applies decorators in reverse registration order. The last one registered…"},"1822":{"u":"/articles/cqrs-decorator-pipeline.html#transactional-behavior-in-detail","d":"The CQRS decorator pipeline: logging, caching, and transactions without touching a handler","k":"The MMCA.Common series","t":"Transactional behavior, in detail","x":"The transactional decorator wraps the handler in IUnitOfWork.ExecuteInTransactionAsync only when the command implements ITransactional. Three outcomes, three behaviors: - An…"},"1823":{"u":"/articles/cqrs-decorator-pipeline.html#opt-in-by-marker-interface-pay-only-for-what-you-use","d":"The CQRS decorator pipeline: logging, caching, and transactions without touching a handler","k":"The MMCA.Common series","t":"Opt in by marker interface: pay only for what you use","x":"The pipeline is registered for every handler, but most decorators are dormant unless the use case asks for them, through a set of tiny marker interfaces: Each decorator does an…"},"1824":{"u":"/articles/cqrs-decorator-pipeline.html#the-di-sequence-that-makes-it-work","d":"The CQRS decorator pipeline: logging, caching, and transactions without touching a handler","k":"The MMCA.Common series","t":"The DI sequence that makes it work","x":"Because TryDecorate can only wrap registrations that already exist, the decorators must be registered after every module's concrete handlers. One step of this sequence is…"},"1825":{"u":"/articles/cqrs-decorator-pipeline.html#the-same-argument-one-layer-out-the-http-pipeline","d":"The CQRS decorator pipeline: logging, caching, and transactions without touching a handler","k":"The MMCA.Common series","t":"The same argument, one layer out: the HTTP pipeline","x":"The decorator chain covers everything that happens once a command or query reaches a handler. But the request had to cross an edge to get there, and that edge is an ordered chain…"},"1826":{"u":"/articles/cqrs-decorator-pipeline.html#trade-offs-honestly","d":"The CQRS decorator pipeline: logging, caching, and transactions without touching a handler","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The pipeline is not free, and ADR-014 names the rough edges: - Registration order is the reverse of execution order. This is a genuine Scrutor foot-gun. The framework mitigates…"},"1827":{"u":"/articles/cqrs-decorator-pipeline.html#apply-this-even-without-mmca","d":"The CQRS decorator pipeline: logging, caching, and transactions without touching a handler","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The idea ports to any DI container that supports decoration (Scrutor for Microsoft.Extensions.DI, or the equivalent in your stack): 1. Define a single handler interface per…"},"1828":{"u":"/articles/validation-kit.html","d":"Compose validators, don't copy them: a reusable FluentValidation kit","k":"The MMCA.Common series","x":"Subtitle: \"Email must be valid, password must be strong, name is required.\" Every command re-declares those rules, and then they drift. Here is a validation kit where the rules…"},"1829":{"u":"/articles/validation-kit.html#reusable-rule-fragments-composed-with-include","d":"Compose validators, don't copy them: a reusable FluentValidation kit","k":"The MMCA.Common series","t":"Reusable rule fragments, composed with Include","x":"The core idea is a rule fragment: a tiny AbstractValidator that owns exactly one field's contract, generic over the parent type T and configured with a selector expression.…"},"1830":{"u":"/articles/validation-kit.html#one-validator-for-the-request-free-for-the-command","d":"Compose validators, don't copy them: a reusable FluentValidation kit","k":"The MMCA.Common series","t":"One validator for the request, free for the command","x":"Some commands carry a request DTO rather than being one. The generic update command, UpdateEntityCommand (Id, Request, RowVersion), wraps the request body together with the route…"},"1831":{"u":"/articles/validation-kit.html#a-validation-failure-is-a-result-and-the-edge-maps-it-to-400","d":"Compose validators, don't copy them: a reusable FluentValidation kit","k":"The MMCA.Common series","t":"A validation failure is a Result, and the edge maps it to 400","x":"A validator that runs is useless unless its output flows into the rest of the system cleanly. FluentValidation speaks in ValidationResult and ValidationFailure. The rest of the…"},"1832":{"u":"/articles/validation-kit.html#the-two-altitude-rule-validator-versus-domain-factory","d":"Compose validators, don't copy them: a reusable FluentValidation kit","k":"The MMCA.Common series","t":"The two-altitude rule: validator versus domain factory","x":"A reasonable objection: if the validator checks the input, why does the domain factory also return a Result and re-check things? Because they check at two different altitudes,…"},"1833":{"u":"/articles/validation-kit.html#trade-offs-honestly","d":"Compose validators, don't copy them: a reusable FluentValidation kit","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- It is a FluentValidation dependency. The kit is a thin composition layer over FluentValidation 12, not a hand-rolled engine. That is a deliberate trade (a mature, well-known…"},"1834":{"u":"/articles/validation-kit.html#apply-this-even-without-mmca","d":"Compose validators, don't copy them: a reusable FluentValidation kit","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any stack with a validation library that supports composition: 1. Write each field contract once as a fragment: a small validator generic over the parent…"},"1835":{"u":"/articles/transactional-outbox-dotnet.html","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","x":"Subtitle: \"Save to the database, then publish to the broker\" is a dual write with no atomicity. Here is the at-least-once pattern that fixes it, in one SaveChanges call. ---…"},"1836":{"u":"/articles/transactional-outbox-dotnet.html#why-it-matters","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","t":"Why it matters","x":"The failure is rare per request and catastrophic in aggregate. It does not show up in tests, because tests do not kill the broker between two awaits. It shows up in production as…"},"1837":{"u":"/articles/transactional-outbox-dotnet.html#the-pattern-one-transaction-then-a-separate-delivery","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","t":"The pattern: one transaction, then a separate delivery","x":"The transactional outbox splits the problem into two phases that are each individually safe: 1. Record intent atomically. When you save the order, you also write the event to an…"},"1838":{"u":"/articles/transactional-outbox-dotnet.html#how-mmcacommon-does-it-you-just-record-intent","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","t":"How MMCA.Common does it: you just record intent","x":"The reason this pattern is often skipped is that wiring it by hand is tedious. In MMCA.Common it is automatic. Your aggregate records a domain event, and the framework does the…"},"1839":{"u":"/articles/transactional-outbox-dotnet.html#the-third-participant-in-that-sequence-the-change-trail","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","t":"The third participant in that sequence: the change trail","x":"The first step of that sequence, \"stamp audit fields\", answers who touched a row last. It cannot answer what changed, because the stamp is a single overwrite: a row edited nine…"},"1840":{"u":"/articles/transactional-outbox-dotnet.html#when-the-commit-itself-is-ambiguous","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","t":"When the commit itself is ambiguous","x":"Everything above rests on one commit, which makes it fair to ask what happens when the commit is the thing that fails. A commit can fail after the database has applied it but…"},"1841":{"u":"/articles/transactional-outbox-dotnet.html#the-delivery-side-outboxprocessor","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","t":"The delivery side: OutboxProcessor","x":"A background service, OutboxProcessor, drains the outbox. The details that make it production-grade: - It only touches its own outbox. Under database-per-service, every…"},"1842":{"u":"/articles/transactional-outbox-dotnet.html#the-same-code-dispatches-in-process-and-over-a-broker","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","t":"The same code dispatches in-process and over a broker","x":"Here is where the outbox earns its place in a framework whose whole thesis is \"monolith now, microservices later.\" The event you raised does not know how it will be delivered.…"},"1843":{"u":"/articles/transactional-outbox-dotnet.html#when-the-consumer-runs-out-of-retries","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","t":"When the consumer runs out of retries","x":"The outbox makes the publish durable. It says nothing about what happens after the broker accepts the message, and that is the other half of delivery. MassTransit applies its own…"},"1844":{"u":"/articles/transactional-outbox-dotnet.html#the-write-that-skips-the-whole-pipeline","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","t":"The write that skips the whole pipeline","x":"Everything above depends on one assumption: that writes go through SaveChangesAsync. There is a write that does not, and it is worth knowing before you reach for it, because the…"},"1845":{"u":"/articles/transactional-outbox-dotnet.html#trade-offs-honestly","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The outbox is not free, and the rubric review of this framework names the rough edges: - At-least-once means duplicates are possible. A consumer can receive the same event twice…"},"1846":{"u":"/articles/transactional-outbox-dotnet.html#apply-this-even-without-mmca","d":"The transactional outbox in .NET 10: never lose an event again","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The idea ports to any stack: 1. Write the event row in the same transaction as the state change. If your ORM cannot do that, you do not have an outbox, you have a hopeful second…"},"1847":{"u":"/articles/database-per-service.html","d":"Database-per-service inside a monolith (and why)","k":"The MMCA.Common series","x":"Subtitle: One DbContext class. Many databases. A host with no extra configuration behaves exactly like a single-database monolith, and the same code runs against per-service…"},"1848":{"u":"/articles/database-per-service.html#why-it-matters","d":"Database-per-service inside a monolith (and why)","k":"The MMCA.Common series","t":"Why it matters","x":"Two failures hide in the shared-database monolith, and both surface at the worst possible time. The first is the coupling itself. Once a foreign key spans two modules, those…"},"1849":{"u":"/articles/database-per-service.html#the-mmca-answer-one-context-class-one-instance-per-database","d":"Database-per-service inside a monolith (and why)","k":"The MMCA.Common series","t":"The MMCA answer: one context class, one instance per database","x":"The single most counter-intuitive fact, and the one every other choice flows from: there is exactly one concrete context class per engine (SQLServerDbContext,…"},"1850":{"u":"/articles/database-per-service.html#what-it-looks-like-in-configuration","d":"Database-per-service inside a monolith (and why)","k":"The MMCA.Common series","t":"What it looks like in configuration","x":"You do not write routing code. You write configuration, and the same compiled binary becomes a monolith or a set of isolated services depending on what is in appsettings.json.…"},"1851":{"u":"/articles/database-per-service.html#the-third-axis-which-customer-owns-the-row","d":"Database-per-service inside a monolith (and why)","k":"The MMCA.Common series","t":"The third axis: which customer owns the row","x":"Source name is one axis of partitioning, and the engine is another (that is the next article). Neither of them is a tenant. ADR-073 adds the third axis, \"which customer does this…"},"1852":{"u":"/articles/database-per-service.html#trade-offs-honestly","d":"Database-per-service inside a monolith (and why)","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"ADR-006 lists the bill in plain terms, and it is a real bill. - No distributed transactions. When a save spans sources, DbContextFactory.ExecuteInTransactionAsync opens a…"},"1853":{"u":"/articles/database-per-service.html#apply-this-even-without-mmca","d":"Database-per-service inside a monolith (and why)","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The mechanism is EF-specific, but the discipline ports to any stack. 1. Decide an entity's home logically, not physically. Route by module or bounded context, with a default that…"},"1854":{"u":"/articles/polyglot-persistence.html","d":"One entity model, four databases: polyglot persistence behind a single attribute","k":"The MMCA.Common series","x":"Subtitle: A domain entity should not know which database engine stores it. Here is a design where the same entity moves between SQL Server, PostgreSQL, Cosmos DB, and SQLite by…"},"1855":{"u":"/articles/polyglot-persistence.html#two-axes-not-one","d":"One entity model, four databases: polyglot persistence behind a single attribute","k":"The MMCA.Common series","t":"Two axes, not one","x":"This is the companion to the database-per-service article (Article 10), and the two are deliberately orthogonal. It helps to name the axes. Database-per-service (ADR-006) is the…"},"1856":{"u":"/articles/polyglot-persistence.html#the-configuration-hierarchy-where-the-engine-lives","d":"One entity model, four databases: polyglot persistence behind a single attribute","k":"The MMCA.Common series","t":"The configuration hierarchy: where the engine lives","x":"Every entity in the framework gets an EntityConfiguration class. The relevant inheritance chain is short and worth holding in your head. At the bottom is…"},"1857":{"u":"/articles/polyglot-persistence.html#the-entity-move-is-one-token","d":"One entity model, four databases: polyglot persistence behind a single attribute","k":"The MMCA.Common series","t":"The entity move is one token","x":"So what does it take to move Session from SQL Server to Cosmos? You change its configuration's base class from EntityTypeConfigurationSQLServer to EntityTypeConfigurationCosmos .…"},"1858":{"u":"/articles/polyglot-persistence.html#when-a-relationship-crosses-an-engine-boundary","d":"One entity model, four databases: polyglot persistence behind a single attribute","k":"The MMCA.Common series","t":"When a relationship crosses an engine boundary","x":"A document store cannot enforce a foreign key into a SQL table. So the moment Session moves to Cosmos while the Event it references stays in SQL Server, the relationship between…"},"1859":{"u":"/articles/polyglot-persistence.html#keeping-a-cross-source-predicate-translatable","d":"One entity model, four databases: polyglot persistence behind a single attribute","k":"The MMCA.Common series","t":"Keeping a cross-source predicate translatable","x":"Degrading the relationship solves the schema. It does not solve the query. Suppose you want all sessions whose event is published. Written the obvious way, that is a navigation:…"},"1860":{"u":"/articles/polyglot-persistence.html#the-honest-adoption-note","d":"One entity model, four databases: polyglot persistence behind a single attribute","k":"The MMCA.Common series","t":"The honest adoption note","x":"Here is the part most articles would quietly omit. All of the above is shipped and tested. None of it is running in production yet. Today, every current production entity…"},"1861":{"u":"/articles/polyglot-persistence.html#trade-offs-honestly","d":"One entity model, four databases: polyglot persistence behind a single attribute","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Cosmos has no JOINs, and the framework does not pretend otherwise. The whole resolve-then-filter-by-FK machinery exists because you cannot join across containers or across…"},"1862":{"u":"/articles/polyglot-persistence.html#apply-this-even-without-mmca","d":"One entity model, four databases: polyglot persistence behind a single attribute","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any stack with EF Core or a comparable configuration-driven ORM: 1. Keep the entity engine-free. The domain class is a plain object. The persistence engine…"},"1863":{"u":"/articles/navigation-populators.html","d":"EF Core Include chains are a trap: navigation populators decouple eager loading","k":"The MMCA.Common series","x":"Subtitle: Include(x).Include(y).ThenInclude(z) couples your read model to one physical database. Here is the eager-loading boundary that batch-loads related data and survives…"},"1864":{"u":"/articles/navigation-populators.html#why-it-matters","d":"EF Core Include chains are a trap: navigation populators decouple eager loading","k":"The MMCA.Common series","t":"Why it matters","x":"The cartesian explosion is the famous failure, and EF Core has a fix for it (AsSplitQuery), but split query is a band-aid on the deeper problem: Include is a JOIN, and a JOIN…"},"1865":{"u":"/articles/navigation-populators.html#the-mmca-answer-classify-then-batch-load-through-a-populator","d":"EF Core Include chains are a trap: navigation populators decouple eager loading","k":"The MMCA.Common series","t":"The MMCA answer: classify, then batch-load through a populator","x":"MMCA.Common splits the question into three responsibilities that live in three different layers, and no EF knowledge leaks upward. The Domain layer declares only what…"},"1866":{"u":"/articles/navigation-populators.html#the-boundary-that-survives-extraction","d":"EF Core Include chains are a trap: navigation populators decouple eager loading","k":"The MMCA.Common series","t":"The boundary that survives extraction","x":"Here is why this is not over-engineering. When you split a module out and a relationship's two ends move to different physical sources, the EF model's…"},"1867":{"u":"/articles/navigation-populators.html#trade-offs-honestly","d":"EF Core Include chains are a trap: navigation populators decouple eager loading","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"ADR-002 names the rough edges rather than hiding them. - Extra abstraction for the single-database case. For a pure single-SQL-Server host where Include always works, the…"},"1868":{"u":"/articles/navigation-populators.html#apply-this-even-without-mmca","d":"EF Core Include chains are a trap: navigation populators decouple eager loading","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any stack that might outgrow one database: 1. Stop assuming a relationship is a JOIN. Treat \"can these two be loaded together in one query?\" as a runtime…"},"1869":{"u":"/articles/optimistic-concurrency-rowversion.html","d":"Optimistic concurrency with a required If-Match: RowVersion from the database to a 412","k":"The MMCA.Common series","x":"Subtitle: Two admins open the same session, both edit it, both hit Save. Without a precondition the second write silently wins and the first admin's change is gone, with no…"},"1870":{"u":"/articles/optimistic-concurrency-rowversion.html#why-it-matters-and-why-it-is-not-idempotency","d":"Optimistic concurrency with a required If-Match: RowVersion from the database to a 412","k":"The MMCA.Common series","t":"Why it matters, and why it is not idempotency","x":"The lost update is a data-integrity bug that never announces itself. It does not throw. It does not log. It leaves a perfectly valid-looking row. You find out when the organizer…"},"1871":{"u":"/articles/optimistic-concurrency-rowversion.html#the-mmca-answer-a-database-token-handed-out-as-an-etag-demanded-back-as-a-precondition","d":"Optimistic concurrency with a required If-Match: RowVersion from the database to a 412","k":"The MMCA.Common series","t":"The MMCA answer: a database token, handed out as an ETag, demanded back as a precondition","x":"The mechanism is a concurrency token that the database manages, the read model exposes, the client states back in the If-Match header, and the persistence layer plants as EF's…"},"1872":{"u":"/articles/optimistic-concurrency-rowversion.html#the-detail-that-actually-makes-it-a-conflict","d":"Optimistic concurrency with a required If-Match: RowVersion from the database to a 412","k":"The MMCA.Common series","t":"The detail that actually makes it a conflict","x":"The interesting part is not \"store a version number.\" It is where the comparison happens. A hand-rolled \"read the current token, compare it to the client's, then save if they…"},"1873":{"u":"/articles/optimistic-concurrency-rowversion.html#from-exception-to-a-status-at-the-edge","d":"Optimistic concurrency with a required If-Match: RowVersion from the database to a 412","k":"The MMCA.Common series","t":"From exception to a status at the edge","x":"DbUpdateConcurrencyException is a DbUpdateException, and the framework already has one handler for that whole family. DbUpdateExceptionHandler translates any DbUpdateException…"},"1874":{"u":"/articles/optimistic-concurrency-rowversion.html#the-transport-a-weak-etag-out-a-required-if-match-back","d":"Optimistic concurrency with a required If-Match: RowVersion from the database to a 412","k":"The MMCA.Common series","t":"The transport: a weak ETag out, a required If-Match back","x":"The same RowVersion, the same SetOriginalRowVersion extension point, the same comparison inside the UPDATE. The header is where the token lives on the wire, which means anything…"},"1875":{"u":"/articles/optimistic-concurrency-rowversion.html#the-invariant-one-source-for-the-precondition","d":"Optimistic concurrency with a required If-Match: RowVersion from the database to a 412","k":"The MMCA.Common series","t":"The invariant: one source for the precondition","x":"A convention that lives only in a code-review checklist rots. So the one-transport rule is enforced mechanically. ArchitectureRules.UpdateRequestsAreNotConcurrencyAware scans…"},"1876":{"u":"/articles/optimistic-concurrency-rowversion.html#trade-offs-honestly","d":"Optimistic concurrency with a required If-Match: RowVersion from the database to a 412","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- On a guarded action the precondition is mandatory, and that is a real constraint. A caller that has not read the resource cannot write it. There is no null token, no wildcard…"},"1877":{"u":"/articles/optimistic-concurrency-rowversion.html#apply-this-even-without-mmca","d":"Optimistic concurrency with a required If-Match: RowVersion from the database to a 412","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any load-modify-save stack: 1. Put a database-managed concurrency token on your rows (SQL Server rowversion, a Postgres xmin, or an application-managed…"},"1878":{"u":"/articles/self-ordering-modules.html","d":"Self-ordering modules: discovered, Kahn-ordered, and extractable","k":"The MMCA.Common series","x":"Subtitle: A module declares its name and its dependencies. The framework discovers every module, sorts them with Kahn's algorithm, and registers them in an order where a…"},"1879":{"u":"/articles/self-ordering-modules.html#why-ordering-is-a-correctness-concern-not-a-style-one","d":"Self-ordering modules: discovered, Kahn-ordered, and extractable","k":"The MMCA.Common series","t":"Why ordering is a correctness concern, not a style one","x":"In MMCA.Common the registration order is not cosmetic. The CQRS pipeline wraps command and query handlers with decorators (logging, caching, validation, transactions) using…"},"1880":{"u":"/articles/self-ordering-modules.html#a-module-declares-intent-not-position","d":"Self-ordering modules: discovered, Kahn-ordered, and extractable","k":"The MMCA.Common series","t":"A module declares intent, not position","x":"A module in MMCA.Common is an IModule. The contract is deliberately small: Three of the five members ship with default implementations, so a minimal module implements only Name…"},"1881":{"u":"/articles/self-ordering-modules.html#the-engine-moduleloader-and-kahns-algorithm","d":"Self-ordering modules: discovered, Kahn-ordered, and extractable","k":"The MMCA.Common series","t":"The engine: ModuleLoader and Kahn's algorithm","x":"ModuleLoader is the piece that turns those declarations into an order. Its DiscoverAndRegister method scans the assemblies the host names in a required moduleAssemblies…"},"1882":{"u":"/articles/self-ordering-modules.html#disabling-a-module-without-breaking-its-consumers","d":"Self-ordering modules: discovered, Kahn-ordered, and extractable","k":"The MMCA.Common series","t":"Disabling a module without breaking its consumers","x":"Here is the part that turns this from a tidy registration trick into an extraction mechanism. A host can disable a module through configuration. ModulesSettings binds the…"},"1883":{"u":"/articles/self-ordering-modules.html#convention-scanning-what-a-modules-register-actually-wires","d":"Self-ordering modules: discovered, Kahn-ordered, and extractable","k":"The MMCA.Common series","t":"Convention scanning: what a module's Register actually wires","x":"Modules do not hand-register every handler. ScanModuleApplicationServices () is the Scrutor-based convention scan that a module's Add{X}Module calls to register, by assembly,…"},"1884":{"u":"/articles/self-ordering-modules.html#each-module-is-the-unit-of-extraction","d":"Self-ordering modules: discovered, Kahn-ordered, and extractable","k":"The MMCA.Common series","t":"Each module is the unit of extraction","x":"The reason all of this is worth the machinery is that the module is also the deploy and scale boundary, and the same self-ordering ModuleLoader registration runs at both ends of…"},"1885":{"u":"/articles/self-ordering-modules.html#trade-offs-honestly","d":"Self-ordering modules: discovered, Kahn-ordered, and extractable","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Reflection at startup. Discovery calls GetTypes() on every assembly the host named. This is a startup cost, paid once, and the per-GetTypes() guard means a load-time exception…"},"1886":{"u":"/articles/self-ordering-modules.html#apply-this-even-without-mmca","d":"Self-ordering modules: discovered, Kahn-ordered, and extractable","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports cleanly to any DI container: 1. Give each module a name and a declared dependency list, not a hard-coded registration position. 2. Topologically sort before you…"},"1887":{"u":"/articles/event-schema-versioning.html","d":"Event-schema versioning: never silently reshape an event","k":"The MMCA.Common series","x":"Subtitle: An integration event is a wire contract the moment it crosses a service boundary. Reshape it in place and you break consumers that are already deployed. Here is the…"},"1888":{"u":"/articles/event-schema-versioning.html#why-it-matters","d":"Event-schema versioning: never silently reshape an event","k":"The MMCA.Common series","t":"Why it matters","x":"In a monolith, an event handler and the code that raises the event compile together. Reshape the event and the consumer fails to compile; you fix it in the same commit. The type…"},"1889":{"u":"/articles/event-schema-versioning.html#the-mmca-answer-a-version-on-every-event-and-a-rule-for-changing-it","d":"Event-schema versioning: never silently reshape an event","k":"The MMCA.Common series","t":"The MMCA answer: a version on every event, and a rule for changing it","x":"The decision has two halves: a signal that is enforced, and a discipline for breaking changes. Half one: every integration event carries an explicit SchemaVersion. The base…"},"1890":{"u":"/articles/event-schema-versioning.html#how-it-complements-the-outbox","d":"Event-schema versioning: never silently reshape an event","k":"The MMCA.Common series","t":"How it complements the outbox","x":"This sits directly on top of the transactional outbox (ADR-003). The outbox guarantees an event is delivered at least once: persisted atomically with the state change, then…"},"1891":{"u":"/articles/event-schema-versioning.html#trade-offs-honestly","d":"Event-schema versioning: never silently reshape an event","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"ADR-010 is candid that the field is a signal, not a complete mechanism. - SchemaVersion by itself does not stop a consumer breaking on a real reshape. It is a value on the wire,…"},"1892":{"u":"/articles/event-schema-versioning.html#apply-this-even-without-mmca","d":"Event-schema versioning: never silently reshape an event","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The policy ports to any event-driven system with independently deployed consumers: 1. Put an explicit version on every event, and make it un-skippable. A test that fails the…"},"1893":{"u":"/articles/jwks-cross-service-auth.html","d":"Cross-service auth without a shared secret: JWKS discovery","k":"The MMCA.Common series","x":"Subtitle: When you split a monolith into services, the easy answer is to copy the JWT signing secret into every validator. That is also the answer that turns one leaked key into…"},"1894":{"u":"/articles/jwks-cross-service-auth.html#why-it-matters","d":"Cross-service auth without a shared secret: JWKS discovery","k":"The MMCA.Common series","t":"Why it matters","x":"Symmetric signing couples trust to secret distribution. The more services you have, the more copies of the forge-anything key exist, and the more places it can leak: a…"},"1895":{"u":"/articles/jwks-cross-service-auth.html#the-mmca-answer-publish-the-public-half-as-a-jwks-document","d":"Cross-service auth without a shared secret: JWKS discovery","k":"The MMCA.Common series","t":"The MMCA answer: publish the public half as a JWKS document","x":"The framework's token service supports two signing algorithms, selected by the concrete JwtSettings.SigningAlgorithm, which defaults to RS256: - Monolith mode: HS256 (symmetric…"},"1896":{"u":"/articles/jwks-cross-service-auth.html#discovery-and-the-graceful-empty-set","d":"Cross-service auth without a shared secret: JWKS discovery","k":"The MMCA.Common series","t":"Discovery, and the graceful empty set","x":"Discovery has two halves, and ADR-004 names both. On the issuer, when JWKS publishing is disabled (the default for a monolith) or no key is configured, RsaJwksProvider returns an…"},"1897":{"u":"/articles/jwks-cross-service-auth.html#jwt-algorithm-pinning-the-attack-you-would-otherwise-ship","d":"Cross-service auth without a shared secret: JWKS discovery","k":"The MMCA.Common series","t":"JWT algorithm pinning: the attack you would otherwise ship","x":"Switching to asymmetric keys opens a specific, classic attack, and the framework closes it explicitly. Once the RSA public key is published (which is the entire point of JWKS),…"},"1898":{"u":"/articles/jwks-cross-service-auth.html#trade-offs-honestly","d":"Cross-service auth without a shared secret: JWKS discovery","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The JWKS layer is the right model, but it is not free, and the §11 review of the framework names the rough edges. - Two round trips on successful login. The Identity service's…"},"1899":{"u":"/articles/jwks-cross-service-auth.html#apply-this-even-without-mmca","d":"Cross-service auth without a shared secret: JWKS discovery","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any stack with a JWT story: 1. In a single process, symmetric (HS256) is fine. Do not add asymmetric complexity you do not need. The signer and validator are…"},"1900":{"u":"/articles/password-hashing.html","d":"Password hashing done right: PBKDF2-SHA512, 600k iterations, timing-safe","k":"The MMCA.Common series","x":"Subtitle: Storing a password is a solved problem, and almost every breach headline is someone who solved it the wrong way. Here are the four decisions that separate a hash you…"},"1901":{"u":"/articles/password-hashing.html#why-it-matters","d":"Password hashing done right: PBKDF2-SHA512, 600k iterations, timing-safe","k":"The MMCA.Common series","t":"Why it matters","x":"A leaked password table is not just a breach of your app. People reuse passwords. The credentials you fail to protect become the keys an attacker tries against their bank, their…"},"1902":{"u":"/articles/password-hashing.html#the-mmca-answer-a-deliberately-slow-kdf-salted-compared-in-constant-time","d":"Password hashing done right: PBKDF2-SHA512, 600k iterations, timing-safe","k":"The MMCA.Common series","t":"The MMCA answer: a deliberately slow KDF, salted, compared in constant time","x":"MMCA.Common ships one production password hasher, split the Clean-Architecture way: the IPasswordHasher port sits in MMCA.Common.Application and its single PasswordHasher…"},"1903":{"u":"/articles/password-hashing.html#defense-in-depth-pii-at-rest-not-just-passwords","d":"Password hashing done right: PBKDF2-SHA512, 600k iterations, timing-safe","k":"The MMCA.Common series","t":"Defense in depth: PII at rest, not just passwords","x":"Passwords are the famous case, but they are not the only personal data sitting in your database. MMCA.Common ships field-level PII encryption as a separate control, recorded in…"},"1904":{"u":"/articles/password-hashing.html#trade-offs-honestly","d":"Password hashing done right: PBKDF2-SHA512, 600k iterations, timing-safe","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"A credible security post owns its rough edges, and a few sit around this hash rather than in it. - Plain-HTTP metadata discovery is an opt-out, not a default.…"},"1905":{"u":"/articles/password-hashing.html#apply-this-even-without-mmca","d":"Password hashing done right: PBKDF2-SHA512, 600k iterations, timing-safe","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The rules port to any stack, and they are short enough to memorize: 1. Never store plaintext, and never use a fast hash (MD5, SHA-1, plain SHA-256/512) for passwords. Use a…"},"1906":{"u":"/articles/idempotency-attribute.html","d":"Idempotency in one attribute: safe retries for HTTP APIs","k":"The MMCA.Common series","x":"Subtitle: Clients retry. Resilient HTTP handlers retry harder. A POST that creates a resource must survive being sent twice. Here is the whole thing in one [Idempotent]…"},"1907":{"u":"/articles/idempotency-attribute.html#why-it-matters","d":"Idempotency in one attribute: safe retries for HTTP APIs","k":"The MMCA.Common series","t":"Why it matters","x":"The non-idempotent POST is a quiet, expensive bug. It does not throw. It does not log an error. It produces a second perfectly valid-looking row. You find out when finance…"},"1908":{"u":"/articles/idempotency-attribute.html#the-mechanism-one-attribute-one-header","d":"Idempotency in one attribute: safe retries for HTTP APIs","k":"The MMCA.Common series","t":"The mechanism: one attribute, one header","x":"You mark an action [Idempotent]: The generic create action in the framework's controller bases carries [Idempotent] by default, so most write endpoints get it for free. The…"},"1909":{"u":"/articles/idempotency-attribute.html#the-concurrency-detail-that-actually-matters","d":"Idempotency in one attribute: safe retries for HTTP APIs","k":"The MMCA.Common series","t":"The concurrency detail that actually matters","x":"The interesting part is not \"cache the response.\" It is what happens when two duplicates arrive at the same time, before the first has finished. A naive cache check would let…"},"1910":{"u":"/articles/idempotency-attribute.html#the-same-problem-shows-up-on-the-broker-and-the-inbox-is-the-matching-mechanism","d":"Idempotency in one attribute: safe retries for HTTP APIs","k":"The MMCA.Common series","t":"The same problem shows up on the broker, and the inbox is the matching mechanism","x":"HTTP retries are one source of duplicates. The other is the message broker. MMCA.Common's outbox gives at-least-once delivery: an event may be published twice (the publish…"},"1911":{"u":"/articles/idempotency-attribute.html#trade-offs-honestly","d":"Idempotency in one attribute: safe retries for HTTP APIs","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Clients must send a stable key, from a stable identity. Idempotency is a contract, not magic. If a client generates a fresh key per retry, every retry is a \"new\" request and…"},"1912":{"u":"/articles/idempotency-attribute.html#apply-this-even-without-mmca","d":"Idempotency in one attribute: safe retries for HTTP APIs","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any HTTP stack: 1. Accept an Idempotency-Key header on write endpoints and require clients to keep it stable across retries. 2. Cache the first response…"},"1913":{"u":"/articles/self-invalidating-cache.html","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","x":"Subtitle: A read-through cache is easy. Keeping it correct is the hard part. Here is a cache where a write invalidates the reads it staled automatically, because invalidation…"},"1914":{"u":"/articles/self-invalidating-cache.html#why-invalidation-belongs-in-the-pipeline-not-the-handler","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","t":"Why invalidation belongs in the pipeline, not the handler","x":"A handler's job is one use case. The fact that succeeding at that use case happens to stale some cached reads is a cross-cutting concern, not part of the use case. Tie the two…"},"1915":{"u":"/articles/self-invalidating-cache.html#the-cache-abstraction","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","t":"The cache abstraction","x":"The whole subsystem is small and deliberate. The Application layer depends on one port: Four cache operations, two specialized reads, a counter primitive, and one composed…"},"1916":{"u":"/articles/self-invalidating-cache.html#one-contract-three-backends","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","t":"One contract, three backends","x":"AddCaching() picks a backend by probing the container. If a real distributed cache is registered (an IDistributedCache that is not the default MemoryDistributedCache, typically…"},"1917":{"u":"/articles/self-invalidating-cache.html#the-read-path-opt-in-by-marker-interface","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","t":"The read path: opt in by marker interface","x":"A query caches by implementing IQueryCacheable (it supplies the cache key and the retention duration). The CachingQueryDecorator does the read-through: On a hit, the decorator…"},"1918":{"u":"/articles/self-invalidating-cache.html#the-write-path-invalidate-on-success-outside-the-transaction","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","t":"The write path: invalidate on success, outside the transaction","x":"A command invalidates by implementing ICacheInvalidating, which exposes a CachePrefix. The CachingCommandDecorator runs the inner handler first, then evicts: The decorator calls…"},"1919":{"u":"/articles/self-invalidating-cache.html#swallowing-a-failure-is-a-discipline-not-a-catch","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","t":"Swallowing a failure is a discipline, not a catch","x":"That swallow is the right call here and a dangerous habit everywhere else, so the framework gives it a name: BestEffort.ExecuteAsync(operation, logger, action, ct), for a side…"},"1920":{"u":"/articles/self-invalidating-cache.html#the-two-key-transformations-the-pipeline-applies","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","t":"The two key transformations the pipeline applies","x":"Everything above treats the query's CacheKey and the command's CachePrefix as literal strings. At the decorator layer there are two exceptions, and they are the parts of key…"},"1921":{"u":"/articles/self-invalidating-cache.html#what-the-cache-is-and-is-not","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","t":"What the cache is, and is not","x":"This is a request-result read-through cache for query handlers. It is not a session store and not a write-behind buffer. The cross-source consistency mechanism in this framework…"},"1922":{"u":"/articles/self-invalidating-cache.html#the-edge-tier-caching-authenticated-reads-without-leaking-identity","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","t":"The edge tier: caching authenticated reads without leaking identity","x":"Tier 2 sits in front of the handler instead of inside the pipeline. MMCA.Common.API always calls app.UseOutputCache() but ships no policies: each host opts in. A read-heavy…"},"1923":{"u":"/articles/self-invalidating-cache.html#trade-offs-honestly","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Cache key correctness is the consumer's responsibility. The framework gives you read-through caching and prefix invalidation. It cannot know that GetProductQuery's key and…"},"1924":{"u":"/articles/self-invalidating-cache.html#apply-this-even-without-mmca","d":"The self-invalidating cache that lives in the pipeline, not your handlers","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any stack with a decoratable handler pipeline: 1. Put the cache behind a port the business layer depends on (Get, Set, Remove, RemoveByPrefix), and choose…"},"1925":{"u":"/articles/problem-details-http-grpc.html","d":"Problem Details across HTTP and gRPC (RFC 9457)","k":"The MMCA.Common series","x":"Subtitle: One error model, two transports. How a Result failure becomes the same RFC 9457 shape whether the caller reached you over HTTP or gRPC, and the honest gaps that still…"},"1926":{"u":"/articles/problem-details-http-grpc.html#why-it-matters","d":"Problem Details across HTTP and gRPC (RFC 9457)","k":"The MMCA.Common series","t":"Why it matters","x":"A consistent error contract is not cosmetic. It is the difference between a client that can branch on \"was this a validation problem, a not-found, or a conflict?\" mechanically,…"},"1927":{"u":"/articles/problem-details-http-grpc.html#the-mmca-answer-one-mapping-table-reused-on-both-transports","d":"Problem Details across HTTP and gRPC (RFC 9457)","k":"The MMCA.Common series","t":"The MMCA answer: one mapping table, reused on both transports","x":"MMCA.Common's whole error story starts from one decision recorded across the codebase: expected failures are values, not exceptions. Handlers return Result carrying an Error…"},"1928":{"u":"/articles/problem-details-http-grpc.html#the-rest-of-the-9-contract","d":"Problem Details across HTTP and gRPC (RFC 9457)","k":"The MMCA.Common series","t":"The rest of the §9 contract","x":"The same edge standardizes the things that drift if left to each endpoint: - Pagination and filtering. The generic read controllers expose GET /paged with filter, sort, and page…"},"1929":{"u":"/articles/problem-details-http-grpc.html#trade-offs-honestly","d":"Problem Details across HTTP and gRPC (RFC 9457)","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The scorecard scores §9 (API and Contract Design) at Maturity 4 of 4 and Implementation 9 of 10 (weighted 8/18). The category sits at the maturity ceiling: the contract is…"},"1930":{"u":"/articles/problem-details-http-grpc.html#apply-this-even-without-mmca","d":"Problem Details across HTTP and gRPC (RFC 9457)","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any stack with more than one client or more than one transport: 1. Model expected failures as typed values, not exceptions or ad-hoc status codes. A small…"},"1931":{"u":"/articles/notifications-vertical-slice.html","d":"Notifications as a vertical slice: in-app inbox, real-time push, native push, and email","k":"The MMCA.Common series","x":"Subtitle: A framework is mostly horizontal layers and abstract base classes. Notifications is the one concrete bounded context MMCA.Common ships, and it is built as a textbook…"},"1932":{"u":"/articles/notifications-vertical-slice.html#horizontal-layer-cut-vs-vertical-slice","d":"Notifications as a vertical slice: in-app inbox, real-time push, native push, and email","k":"The MMCA.Common series","t":"Horizontal layer cut vs. vertical slice","x":"The horizontal instinct is to organize by technical role. All the controllers in one folder, all the handlers in another, all the EF configurations in a third. The cost shows up…"},"1933":{"u":"/articles/notifications-vertical-slice.html#sending-a-push-notification-end-to-end","d":"Notifications as a vertical slice: in-app inbox, real-time push, native push, and email","k":"The MMCA.Common series","t":"Sending a push notification, end to end","x":"The send flow is the most instructive because it touches distinct consistency concerns: a deduplication check, a durable audit record, a per-user inbox, and two best-effort…"},"1934":{"u":"/articles/notifications-vertical-slice.html#retry-safety-on-two-levels-the-idempotency-filter-and-the-dedup-key","d":"Notifications as a vertical slice: in-app inbox, real-time push, native push, and email","k":"The MMCA.Common series","t":"Retry safety on two levels: the idempotency filter and the dedup key","x":"A broadcast is exactly the operation you never want to run twice, and the two ways it gets run twice are different problems. The client retries the HTTP call; or two retries…"},"1935":{"u":"/articles/notifications-vertical-slice.html#the-push-channel-an-adapter-chosen-at-composition-not-branched-at-runtime","d":"Notifications as a vertical slice: in-app inbox, real-time push, native push, and email","k":"The MMCA.Common series","t":"The push channel: an adapter chosen at composition, not branched at runtime","x":"The real-time channel is two cooperating types. NotificationHub is an [Authorize]d SignalR Hub. For this durable-push slice it contributes a ReceiveNotification method-name…"},"1936":{"u":"/articles/notifications-vertical-slice.html#the-native-push-channel-reaching-devices-the-hub-cannot","d":"Notifications as a vertical slice: in-app inbox, real-time push, native push, and email","k":"The MMCA.Common series","t":"The native push channel: reaching devices the hub cannot","x":"The SignalR leg stops at the edge of a connected client. A phone with the app backgrounded, killed, or offline hears nothing until the next launch, and conference announcements…"},"1937":{"u":"/articles/notifications-vertical-slice.html#the-in-app-inbox-pure-cqrs-readwrite-scoped-to-the-caller","d":"Notifications as a vertical slice: in-app inbox, real-time push, native push, and email","k":"The MMCA.Common series","t":"The in-app inbox: pure CQRS read/write, scoped to the caller","x":"The inbox is the durable channel, exposed by InboxController to any authenticated user (unlike the organizer-only send and history endpoints). Four slices back it: -…"},"1938":{"u":"/articles/notifications-vertical-slice.html#the-email-channel-and-the-feature-gate-over-all-of-it","d":"Notifications as a vertical slice: in-app inbox, real-time push, native push, and email","k":"The MMCA.Common series","t":"The email channel, and the feature gate over all of it","x":"Email is the smallest channel: one port IEmailSender and one SMTP adapter SmtpEmailSender, which constructs and disposes a fresh SmtpClient per send. It is independent of the…"},"1939":{"u":"/articles/notifications-vertical-slice.html#identifier-aliases-keep-the-ids-honest","d":"Notifications as a vertical slice: in-app inbox, real-time push, native push, and email","k":"The MMCA.Common series","t":"Identifier aliases keep the IDs honest","x":"A small but consistent detail: the notification entities do not type their keys as bare int. The slice uses solution-wide identifier aliases declared once in…"},"1940":{"u":"/articles/notifications-vertical-slice.html#trade-offs-honestly","d":"Notifications as a vertical slice: in-app inbox, real-time push, native push, and email","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Best-effort real-time, durable record. The deliberate swallow of delivery exceptions means a push can fail silently as far as the WebSocket is concerned. That is the right call…"},"1941":{"u":"/articles/notifications-vertical-slice.html#apply-this-even-without-mmca","d":"Notifications as a vertical slice: in-app inbox, real-time push, native push, and email","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The vertical-slice discipline ports to any stack: 1. Organize by feature, not by technical role. Keep a feature's domain, use cases, adapters, and endpoints together so the…"},"1942":{"u":"/articles/live-channel-push.html","d":"Ephemeral by design: sub-second live channels over one SignalR hub","k":"The MMCA.Common series","x":"Subtitle: Conference-day polls and Q&A need small events fanned out to whoever is watching the page right now, and persisting them is wrong. Here is how MMCA.Common adds…"},"1943":{"u":"/articles/live-channel-push.html#two-message-shapes-not-two-transports","d":"Ephemeral by design: sub-second live channels over one SignalR hub","k":"The MMCA.Common series","t":"Two message shapes, not two transports","x":"The mistake in both approaches is treating \"durable notification\" and \"live update\" as if the difference lives in the transport. It does not. Both are small messages pushed over…"},"1944":{"u":"/articles/live-channel-push.html#the-mmca-answer-one-hub-two-publisher-paths","d":"Ephemeral by design: sub-second live channels over one SignalR hub","k":"The MMCA.Common series","t":"The MMCA answer: one hub, two publisher paths","x":"The single NotificationHub gains channel semantics. A channel is just a SignalR group named by a key like event:1 or session:123, and the hub gets its first client-invokable…"},"1945":{"u":"/articles/live-channel-push.html#joining-a-channel-and-why-the-key-is-validated","d":"Ephemeral by design: sub-second live channels over one SignalR hub","k":"The MMCA.Common series","t":"Joining a channel, and why the key is validated","x":"Channel membership is a property of the one existing connection, which is the point of not adding a second hub. On the browser side, NotificationHubService carries both traffic…"},"1946":{"u":"/articles/live-channel-push.html#crossing-a-service-boundary-the-grpc-ingress","d":"Ephemeral by design: sub-second live channels over one SignalR hub","k":"The MMCA.Common series","t":"Crossing a service boundary: the gRPC ingress","x":"Here is where the publisher abstraction earns its keep. In ADC the module that raises live events (Engagement, running the poll and Q&A handlers) is not the host that maps the…"},"1947":{"u":"/articles/live-channel-push.html#the-queue-is-where-you-say-what-the-work-is-worth","d":"Ephemeral by design: sub-second live channels over one SignalR hub","k":"The MMCA.Common series","t":"The queue is where you say what the work is worth","x":"The publish queue in this article is one instance of a general contract (ADR-052): work that outlives a request goes on a bounded Channel singleton, drained by a SingleReader…"},"1948":{"u":"/articles/live-channel-push.html#the-sibling-contract-work-a-clock-owns","d":"Ephemeral by design: sub-second live channels over one SignalR hub","k":"The MMCA.Common series","t":"The sibling contract: work a clock owns","x":"The queue above and the durable row beside it answer the same question: a request started work and must not wait for it. Neither can answer the other one. Nothing starts a…"},"1949":{"u":"/articles/live-channel-push.html#trade-offs-honestly","d":"Ephemeral by design: sub-second live channels over one SignalR hub","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The ADR names the sharp edges, and they are all consequences of the ephemeral contract, not accidents: - Ephemeral means lossy. A client that connects after an event was…"},"1950":{"u":"/articles/live-channel-push.html#apply-this-even-without-mmca","d":"Ephemeral by design: sub-second live channels over one SignalR hub","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The idea ports to any real-time stack: 1. Split on the delivery contract, not the transport. \"Must survive an offline user\" and \"only matters on screen\" are different guarantees.…"},"1951":{"u":"/articles/manual-dto-mapping.html","d":"Delete AutoMapper: explicit, compile-time DTO mapping that you can actually test","k":"The MMCA.Common series","x":"Subtitle: Reflection-based mappers feel like they save you work until the day a renamed property silently maps to null in production. Here is the alternative: named mapper…"},"1952":{"u":"/articles/manual-dto-mapping.html#the-case-against-convention-based-mapping","d":"Delete AutoMapper: explicit, compile-time DTO mapping that you can actually test","k":"The MMCA.Common series","t":"The case against convention-based mapping","x":"Be precise about what goes wrong with a reflection mapper, because \"I prefer explicit code\" is not an argument. Here are four concrete failure modes, all things a type system is…"},"1953":{"u":"/articles/manual-dto-mapping.html#two-roles-two-interfaces","d":"Delete AutoMapper: explicit, compile-time DTO mapping that you can actually test","k":"The MMCA.Common series","t":"Two roles, two interfaces","x":"The first design move is to notice that \"mapping\" is actually two different jobs that deserve two different contracts. Reading data out and accepting data in are not symmetric,…"},"1954":{"u":"/articles/manual-dto-mapping.html#why-the-request-mapper-returns-a-result","d":"Delete AutoMapper: explicit, compile-time DTO mapping that you can actually test","k":"The MMCA.Common series","t":"Why the request mapper returns a Result","x":"When you read an entity out, mapping cannot really fail. The data already passed validation when it was written; you are just reshaping a valid object. So the read mapper returns…"},"1955":{"u":"/articles/manual-dto-mapping.html#mapperly-explicit-and-fast-because-a-generator-writes-the-body","d":"Delete AutoMapper: explicit, compile-time DTO mapping that you can actually test","k":"The MMCA.Common series","t":"Mapperly: explicit and fast, because a generator writes the body","x":"The AutoMapper crowd will raise one objection immediately: if you write every mapper by hand, you are back to typing dto.Name = entity.Name; forty times per entity, and that is…"},"1956":{"u":"/articles/manual-dto-mapping.html#auto-discovery-you-write-the-mapper-you-do-not-wire-it","d":"Delete AutoMapper: explicit, compile-time DTO mapping that you can actually test","k":"The MMCA.Common series","t":"Auto-discovery: you write the mapper, you do not wire it","x":"The last piece is registration, and the framework keeps it convention-driven without making it reflection-at-runtime. Mappers are plain classes that implement one of the two…"},"1957":{"u":"/articles/manual-dto-mapping.html#a-concrete-pair","d":"Delete AutoMapper: explicit, compile-time DTO mapping that you can actually test","k":"The MMCA.Common series","t":"A concrete pair","x":"Putting it together, a module holds both directions. The pair below is trimmed from the Store Catalog module's real Product mappers (the delegating sub-mappers, the two…"},"1958":{"u":"/articles/manual-dto-mapping.html#trade-offs-honestly","d":"Delete AutoMapper: explicit, compile-time DTO mapping that you can actually test","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"This is not a free win, and pretending otherwise would be exactly the kind of hand-waving the framework is built to avoid. - It is more boilerplate than AutoMapper's zero-config…"},"1959":{"u":"/articles/manual-dto-mapping.html#apply-this-even-without-mmca","d":"Delete AutoMapper: explicit, compile-time DTO mapping that you can actually test","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"You do not need this framework to adopt the pattern. The ideas port to any stack: 1. Split read mapping from write mapping. They are not symmetric. Reading reshapes valid data;…"},"1960":{"u":"/articles/permission-based-authorization.html","d":"Permission-based authorization: capabilities over role checks","k":"The MMCA.Common series","x":"Subtitle: [Authorize(Roles = \"Organizer\")] couples every endpoint to a role name. The day you need a role that can do most of what an organizer does but not all of it, you are…"},"1961":{"u":"/articles/permission-based-authorization.html#why-it-matters","d":"Permission-based authorization: capabilities over role checks","k":"The MMCA.Common series","t":"Why it matters","x":"Authorization that is coupled to role names has a fixed failure mode: reshaping who-can-do-what means touching endpoints. Every time the org chart of your application changes (a…"},"1962":{"u":"/articles/permission-based-authorization.html#the-mmca-answer-a-registry-a-builder-an-attribute-and-the-gates-that-read-them","d":"Permission-based authorization: capabilities over role checks","k":"The MMCA.Common series","t":"The MMCA answer: a registry, a builder, an attribute, and the gates that read them","x":"The capability layer is a small set of parts, and the design goal running through all of them is that the mechanism grants nothing until a host opts in. The registry is the…"},"1963":{"u":"/articles/permission-based-authorization.html#inert-until-adopted","d":"Permission-based authorization: capabilities over role checks","k":"The MMCA.Common series","t":"Inert until adopted","x":"The piece that makes this safe to add to a framework everyone consumes is that wiring it confers nothing until a host grants something. AddAuthorizationPolicies() always…"},"1964":{"u":"/articles/permission-based-authorization.html#trade-offs-honestly","d":"Permission-based authorization: capabilities over role checks","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The capability indirection earns its keep on exactly the content-editor case, but it is still RBAC, and the §11 review is explicit about the edges. - It is RBAC, not ABAC. The…"},"1965":{"u":"/articles/permission-based-authorization.html#apply-this-even-without-mmca","d":"Permission-based authorization: capabilities over role checks","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern is portable to any policy-based authorization stack: 1. Name capabilities, not roles, on the endpoint. sessions:manage says what the route does; Roles = \"Organizer\"…"},"1966":{"u":"/articles/session-cookie-auth-blazor-ssr.html","d":"Browser session-cookie auth for Blazor SSR: surviving the F5","k":"The MMCA.Common series","x":"Subtitle: Your Blazor app authenticates with a bearer token. Then a user presses F5 on an [Authorize] page and gets bounced to the login screen even though they are signed in.…"},"1967":{"u":"/articles/session-cookie-auth-blazor-ssr.html#why-it-matters","d":"Browser session-cookie auth for Blazor SSR: surviving the F5","k":"The MMCA.Common series","t":"Why it matters","x":"This is the gap between \"the user has a valid session\" and \"the server rendering the first paint can see it.\" A pure bearer-header design has nowhere to put the session that the…"},"1968":{"u":"/articles/session-cookie-auth-blazor-ssr.html#the-mmca-answer-httponly-cookies-plus-an-ssr-time-reader","d":"Browser session-cookie auth for Blazor SSR: surviving the F5","k":"The MMCA.Common series","t":"The MMCA answer: HttpOnly cookies plus an SSR-time reader","x":"The mechanism ships in MMCA.Common.API (a SessionCookies/ folder) with a MMCA.Common.UI companion and a same-origin API proxy in MMCA.Common.UI.Web, and both apps' Web UI hosts…"},"1969":{"u":"/articles/session-cookie-auth-blazor-ssr.html#the-csrf-tax-and-how-it-is-paid","d":"Browser session-cookie auth for Blazor SSR: surviving the F5","k":"The MMCA.Common series","t":"The CSRF tax, and how it is paid","x":"Cookie-based auth reintroduces a concern that a pure bearer-header design does not have: a cross-site page can cause the browser to send your cookies. The framework pays that tax…"},"1970":{"u":"/articles/session-cookie-auth-blazor-ssr.html#scaling-out-the-key-ring-has-to-be-shared","d":"Browser session-cookie auth for Blazor SSR: surviving the F5","k":"The MMCA.Common series","t":"Scaling out: the key ring has to be shared","x":"One replica is a special case. Add a second and a failure appears that has nothing to do with the design above: ASP.NET Core's DataProtection key ring lives in memory, per…"},"1971":{"u":"/articles/session-cookie-auth-blazor-ssr.html#trade-offs-honestly","d":"Browser session-cookie auth for Blazor SSR: surviving the F5","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The pattern fixes a real gap, and the §26 review names what it costs. - A non-validating auth scheme exists in your codebase. SessionCookieAuthenticationHandler trusts a cookie…"},"1972":{"u":"/articles/session-cookie-auth-blazor-ssr.html#apply-this-even-without-mmca","d":"Browser session-cookie auth for Blazor SSR: surviving the F5","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The shape ports to any server-prerendered SPA with token auth: 1. Put the session in an HttpOnly cookie, not localStorage. The server can read a cookie during render; it cannot…"},"1973":{"u":"/articles/external-oauth-login.html","d":"Google, GitHub and Apple login without leaking tokens: external OAuth behind your own JWTs","k":"The MMCA.Common series","x":"Subtitle: You want \"Sign in with Google,\" \"Sign in with GitHub,\" and the \"Sign in with Apple\" button the store guidelines ask for. So you add the provider packages, wire the…"},"1974":{"u":"/articles/external-oauth-login.html#why-it-matters","d":"Google, GitHub and Apple login without leaking tokens: external OAuth behind your own JWTs","k":"The MMCA.Common series","t":"Why it matters","x":"The invariant the rest of the system leans on is small and load-bearing: inside the app, a user is always a local User carrying the app's own JWT. Every other auth concern is…"},"1975":{"u":"/articles/external-oauth-login.html#the-mmca-answer-external-oauth-behind-a-local-jwt-exchange","d":"Google, GitHub and Apple login without leaking tokens: external OAuth behind your own JWTs","k":"The MMCA.Common series","t":"The MMCA answer: external OAuth behind a local-JWT exchange","x":"The mechanism ships in MMCA.Common.API, and adoption is one app deep (more on that below). It has three moving parts and one rule: the tokens never touch the URL. Scheme…"},"1976":{"u":"/articles/external-oauth-login.html#the-same-handshake-now-for-native-heads","d":"Google, GitHub and Apple login without leaking tokens: external OAuth behind your own JWTs","k":"The MMCA.Common series","t":"The same handshake, now for native heads","x":"A mobile head cannot intercept a redirect to a web URL, and the providers reject OAuth inside an embedded WebView, so a MAUI app has to run the provider flow in the system…"},"1977":{"u":"/articles/external-oauth-login.html#finding-the-local-user-three-ways","d":"Google, GitHub and Apple login without leaking tokens: external OAuth behind your own JWTs","k":"The MMCA.Common series","t":"Finding the local user, three ways","x":"ExternalLoginAsync is where the external identity becomes one of your users, and it resolves in a deliberate order inside a single transaction. First it looks for a user already…"},"1978":{"u":"/articles/external-oauth-login.html#trade-offs-honestly","d":"Google, GitHub and Apple login without leaking tokens: external OAuth behind your own JWTs","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The pattern buys real safety, and ADR-036 is candid about what it costs. - Opt-in per app, and easy to half-wire. The flow needs four cooperating pieces: scheme registration, the…"},"1979":{"u":"/articles/external-oauth-login.html#apply-this-even-without-mmca","d":"Google, GitHub and Apple login without leaking tokens: external OAuth behind your own JWTs","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The shape ports to any app that wants social login without a second identity system: 1. Terminate federation at the edge. Exchange the external principal for your own token the…"},"1980":{"u":"/articles/jwt-refresh-token-rotation.html","d":"Refresh tokens that rotate per device, and reuse detection that makes theft self-limiting","k":"The MMCA.Common series","x":"Subtitle: A stateless JWT you cannot revoke has to be short-lived, which forces a refresh token, which is a long-lived bearer credential that can be stolen and replayed. Here is…"},"1981":{"u":"/articles/jwt-refresh-token-rotation.html#why-it-matters","d":"Refresh tokens that rotate per device, and reuse detection that makes theft self-limiting","k":"The MMCA.Common series","t":"Why it matters","x":"The two credentials pull in opposite directions, and you cannot collapse them. The access token wants to be stateless (no lookup on the hot path) which means it cannot be revoked…"},"1982":{"u":"/articles/jwt-refresh-token-rotation.html#the-mmca-answer-one-hashed-session-per-device-rotated-on-every-use","d":"Refresh tokens that rotate per device, and reuse detection that makes theft self-limiting","k":"The MMCA.Common series","t":"The MMCA answer: one hashed session per device, rotated on every use","x":"The workflow is split in two, and the split is the first design decision. AuthenticationServiceBase (AuthenticationServiceBase.cs:63) decides who is signed in: credentials,…"},"1983":{"u":"/articles/jwt-refresh-token-rotation.html#both-apps-inherit-it-the-oauth-path-opens-the-same-session","d":"Refresh tokens that rotate per device, and reuse detection that makes theft self-limiting","k":"The MMCA.Common series","t":"Both apps inherit it; the OAuth path opens the same session","x":"The rotation, reuse detection, session cap, and lifetime logic are identical in ADC and Store because neither one owns a copy. ADC's AuthenticationService…"},"1984":{"u":"/articles/jwt-refresh-token-rotation.html#trade-offs-honestly","d":"Refresh tokens that rotate per device, and reuse detection that makes theft self-limiting","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"This model is a deliberate set of choices, and ADR-097 names the edges rather than hiding them. - Every device is its own row, so sign-ins grow a table. A session is a device…"},"1985":{"u":"/articles/jwt-refresh-token-rotation.html#apply-this-even-without-mmca","d":"Refresh tokens that rotate per device, and reuse detection that makes theft self-limiting","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any stack with a JWT story: 1. Keep the access token short and stateless. Validate it by signature and expiry with no lookup, and set a lifetime measured in…"},"1986":{"u":"/articles/generic-entity-controllers.html","d":"Generic entity controllers and the dynamic query contract (ADR-034)","k":"The MMCA.Common series","x":"Subtitle: The write-once REST surface every entity inherits. How list, page, lookup, by-id, create, and delete come from two base classes, plus a bounded OData-lite query…"},"1987":{"u":"/articles/generic-entity-controllers.html#why-it-matters","d":"Generic entity controllers and the dynamic query contract (ADR-034)","k":"The MMCA.Common series","t":"Why it matters","x":"Most entities need the same six things: list them, page through them, fetch a lightweight id/name list for a dropdown, get one by id, create one, delete one. That surface is so…"},"1988":{"u":"/articles/generic-entity-controllers.html#the-mmca-answer-two-base-classes-and-an-odata-lite-contract","d":"Generic entity controllers and the dynamic query contract (ADR-034)","k":"The MMCA.Common series","t":"The MMCA answer: two base classes and an OData-lite contract","x":"The read surface is EntityControllerBase . It is an [ApiController] with [Route(\"[controller]\")] and [ApiVersion(\"1.0\")], and it exposes five GET routes that any entity inherits…"},"1989":{"u":"/articles/generic-entity-controllers.html#the-line-where-the-users-value-stops-being-code","d":"Generic entity controllers and the dynamic query contract (ADR-034)","k":"The MMCA.Common series","t":"The line where the user's value stops being code","x":"There is one more constraint under all of this, and it is the one that decides whether a user-supplied filter DSL is a good idea or a liability. When a strategy builds its…"},"1990":{"u":"/articles/generic-entity-controllers.html#the-same-rule-for-hand-written-sql","d":"Generic entity controllers and the dynamic query contract (ADR-034)","k":"The MMCA.Common series","t":"The same rule for hand-written SQL","x":"The filter DSL is not the only path from a caller's value to the database. Some reads need a window function, a recursive CTE, or a vendor-specific operator that LINQ cannot…"},"1991":{"u":"/articles/generic-entity-controllers.html#trade-offs-honestly","d":"Generic entity controllers and the dynamic query contract (ADR-034)","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"A generic, dynamically queryable contract coupled to the entity model is a real trade against narrow bespoke endpoints. ADR-034 names the costs rather than hiding them. - The…"},"1992":{"u":"/articles/generic-entity-controllers.html#apply-this-even-without-mmca","d":"Generic entity controllers and the dynamic query contract (ADR-034)","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any stack where you expose more than a handful of CRUD resources: 1. Put the CRUD shape on a generic base and close the type parameters per entity. The…"},"1993":{"u":"/articles/resource-ownership-authorization.html","d":"Resource-ownership authorization: which rows you may touch, not just which actions","k":"The MMCA.Common series","x":"Subtitle: Article 24 covered what a role or permission lets you do. It said, explicitly, that \"a customer may read only their own order\" is a different concern. This is that…"},"1994":{"u":"/articles/resource-ownership-authorization.html#why-it-matters","d":"Resource-ownership authorization: which rows you may touch, not just which actions","k":"The MMCA.Common series","t":"Why it matters","x":"The failure mode here has a name, and it is not obscure. The OWASP API Security Top 10 lists Broken Object Level Authorization (the modern label for the classic Insecure Direct…"},"1995":{"u":"/articles/resource-ownership-authorization.html#the-mmca-answer-two-enforcement-points-one-bypass","d":"Resource-ownership authorization: which rows you may touch, not just which actions","k":"The MMCA.Common series","t":"The MMCA answer: two enforcement points, one bypass","x":"The first instinct is to look for a single ownership abstraction. There is not one, and ADR-033 is explicit about why: there are two genuinely different problems wearing one…"},"1996":{"u":"/articles/resource-ownership-authorization.html#how-mmcastore-wires-it","d":"Resource-ownership authorization: which rows you may touch, not just which actions","k":"The MMCA.Common series","t":"How MMCA.Store wires it","x":"This is not framework-only theory. MMCA.Store turns both points on in production. The filter guards the shopping-cart and customer-profile controllers as a class-level…"},"1997":{"u":"/articles/resource-ownership-authorization.html#trade-offs-honestly","d":"Resource-ownership authorization: which rows you may touch, not just which actions","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The §11 review is blunt about the edges of this, and they are real. - It is claim-trusting, not ABAC. Both points key entirely on the configured owner claim (customerid by…"},"1998":{"u":"/articles/resource-ownership-authorization.html#apply-this-even-without-mmca","d":"Resource-ownership authorization: which rows you may touch, not just which actions","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern carries to any web API, framework or not: 1. Treat ownership as a second axis, not a corollary of the role check. \"May read orders\" and \"may read this order\" are…"},"1999":{"u":"/articles/rate-limiting-brute-force-protection.html","d":"Defending the API edge: three controls that cover the whole surface","k":"The MMCA.Common series","x":"Subtitle: A global \"N requests per minute\" limiter feels like edge protection until you notice what it cannot do: it cannot key an anonymous login attempt to a principal, because…"},"2000":{"u":"/articles/rate-limiting-brute-force-protection.html#why-it-matters","d":"Defending the API edge: three controls that cover the whole surface","k":"The MMCA.Common series","t":"Why it matters","x":"\"Add rate limiting\" is not a decision. The load-bearing questions are who gets limited, by what partition key, and what is exempt. A naive global IP bucket gets all three wrong…"},"2001":{"u":"/articles/rate-limiting-brute-force-protection.html#the-mmca-answer-an-authenticated-only-global-limiter-plus-two-controls-for-the-surface-it-exempts","d":"Defending the API edge: three controls that cover the whole surface","k":"The MMCA.Common series","t":"The MMCA answer: an authenticated-only global limiter, plus two controls for the surface it exempts","x":"AddCommonRateLimiting (in MMCA.Common.API, the partial Source/Presentation/MMCA.Common.API/Startup/WebApplicationBuilderExtensions.RateLimiting.cs:328) installs a GlobalLimiter…"},"2002":{"u":"/articles/rate-limiting-brute-force-protection.html#trade-offs-honestly","d":"Defending the API edge: three controls that cover the whole surface","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"None of the three is a complete edge defence on its own, and the §11 review is explicit about the boundaries. - Per-principal keying needs an authenticated identity, full stop.…"},"2003":{"u":"/articles/rate-limiting-brute-force-protection.html#apply-this-even-without-mmca","d":"Defending the API edge: three controls that cover the whole surface","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The shape ports to any ASP.NET Core service, with or without this framework: 1. Pick the partition key before you pick the limit. \"300 a minute\" is meaningless until you answer…"},"2004":{"u":"/articles/aspire-one-command.html","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","x":"Subtitle: Four service processes, four databases, a broker, a cache, a mail interceptor, and a live telemetry dashboard, all from a single dotnet run. Here is how MMCA.Common…"},"2005":{"u":"/articles/aspire-one-command.html#prerequisites","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","t":"Prerequisites","x":"You need a few things in place before the first run: - .NET 10 SDK (the framework targets .NET 10.0 with C preview language features). - Docker (or a compatible container…"},"2006":{"u":"/articles/aspire-one-command.html#step-1-run-the-whole-stack-with-one-command","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","t":"Step 1: run the whole stack with one command","x":"From the consumer repo, the entire local topology comes up with: That single command brings up everything the application needs locally: four SQL Server databases, Redis,…"},"2007":{"u":"/articles/aspire-one-command.html#step-2-understand-what-addservicedefaults-configured","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","t":"Step 2: understand what AddServiceDefaults() configured","x":"Each service host calls one method first in its Program.cs, before anything app-specific: AddServiceDefaults() is the service-side baseline, and it is identical across both…"},"2008":{"u":"/articles/aspire-one-command.html#step-3-read-the-health-endpoints-from-mapdefaultendpoints","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","t":"Step 3: read the health endpoints from MapDefaultEndpoints()","x":"MapDefaultEndpoints() exposes the probe surface your platform reads: - /health runs all registered checks. This is the one for humans and dashboards. It is served through…"},"2009":{"u":"/articles/aspire-one-command.html#step-4-see-how-the-apphost-wires-the-distributed-app","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","t":"Step 4: see how the AppHost wires the distributed app","x":"The AppHost Program.cs does not start anything immediately. It builds a resource model: a graph of containers, databases, services, the gateway, and the UI, with their dependency…"},"2010":{"u":"/articles/aspire-one-command.html#step-5-wire-the-extraction-points-grpc-and-jwks","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","t":"Step 5: wire the extraction points (gRPC and JWKS)","x":"The same AppHost wires the extraction boundaries that make the modular monolith behave like real microservices: typed gRPC clients and cross-service auth. gRPC references are…"},"2011":{"u":"/articles/aspire-one-command.html#step-6-make-the-telemetry-coherent-and-keep-the-bill-down","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","t":"Step 6: make the telemetry coherent, and keep the bill down","x":"There are a few more pieces worth knowing, because they shape what you see in the dashboard, and what you pay for it. Start with the noise. The OutboxProcessor background service…"},"2012":{"u":"/articles/aspire-one-command.html#step-7-harden-the-response-headers-and-reuse-connections","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","t":"Step 7: harden the response headers, and reuse connections","x":"Two smaller pieces round out the baseline, and both are the kind of thing each host would otherwise hand-roll and drift on. First, security headers at the host edge. Instead of…"},"2013":{"u":"/articles/aspire-one-command.html#step-8-refuse-to-boot-on-bad-configuration","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","t":"Step 8: refuse to boot on bad configuration","x":"One command bringing the stack up is only useful if a misconfigured process says so immediately. A bad settings value can surface in two places. At first use, where a missing…"},"2014":{"u":"/articles/aspire-one-command.html#trade-offs-and-gotchas-honestly","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","t":"Trade-offs and gotchas, honestly","x":"A single-command stack is a force multiplier, but it has edges worth naming: - It wants Docker and an interactive console. No container runtime means no SQL, Redis, or broker.…"},"2015":{"u":"/articles/aspire-one-command.html#apply-this-even-without-mmca","d":"Aspire: one command brings up the whole distributed app","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports cleanly to any Aspire app: 1. Put service defaults (telemetry, discovery, resilience) in one shared method every host calls, not copy-pasted per service. Drift…"},"2016":{"u":"/articles/extract-module-to-grpc-service.html","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","x":"Subtitle: A step-by-step walkthrough of lifting a module out of the monolith into its own gRPC service without rewriting application code. Define a contract, wire a typed client,…"},"2017":{"u":"/articles/extract-module-to-grpc-service.html#step-0-the-starting-invariant","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"Step 0: the starting invariant","x":"The precondition that makes everything else possible: application and domain code already talk to abstractions, and transport choices live at the edges. Concretely, that means…"},"2018":{"u":"/articles/extract-module-to-grpc-service.html#step-1-define-the-contracts-project","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"Step 1: define the .Contracts project","x":"The wire surface lives in its own project whose name ends in .Contracts. That suffix is load-bearing. Directory.Build.props gives any .Contracts project special treatment: it…"},"2019":{"u":"/articles/extract-module-to-grpc-service.html#step-2-server-side-addgrpcservicedefaults","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"Step 2: server side, AddGrpcServiceDefaults()","x":"In the extracted Engagement service's host, register the gRPC server defaults and map the service: AddGrpcServiceDefaults() registers GrpcResultExceptionInterceptor plus gRPC…"},"2020":{"u":"/articles/extract-module-to-grpc-service.html#step-3-client-side-addtypedgrpcclienttclientservicename","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"Step 3: client side, AddTypedGrpcClient(serviceName)","x":"On the calling side (Conference's host), wire the typed gRPC client and replace the local interface registration with the adapter: AddTypedGrpcClient (serviceName) wires the…"},"2021":{"u":"/articles/extract-module-to-grpc-service.html#step-4-flip-the-message-bus-from-in-process-to-broker","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"Step 4: flip the message bus from in-process to broker","x":"Synchronous calls now cross the wire. The asynchronous, fire-and-forget flows (domain and integration events) need the same treatment, and the framework makes it a configuration…"},"2022":{"u":"/articles/extract-module-to-grpc-service.html#step-5-jwks-so-the-new-service-validates-tokens","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"Step 5: JWKS so the new service validates tokens","x":"The extracted Engagement service now receives forwarded JWTs from Conference and must validate them. It does so against the issuer's JWKS, the public signing keys, not a shared…"},"2023":{"u":"/articles/extract-module-to-grpc-service.html#step-6-wire-it-in-the-apphost-with-mmcacommonaspirehosting","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"Step 6: wire it in the AppHost with MMCA.Common.Aspire.Hosting","x":"Local orchestration is where the topology becomes runnable. MMCA.Common.Aspire.Hosting provides AppHost extension methods for the cross-cutting infrastructure of an extracted…"},"2024":{"u":"/articles/extract-module-to-grpc-service.html#step-7-route-through-the-yarp-gateway","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"Step 7: route through the YARP gateway","x":"Clients never address a service directly. A single YARP reverse-proxy gateway owns the route-to-service map and is the only entry point. It has no DbContext and no controllers;…"},"2025":{"u":"/articles/extract-module-to-grpc-service.html#step-8-what-the-edge-process-itself-owns","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"Step 8: what the edge process itself owns","x":"Step 7 gets a request to the right service. The edge process also has jobs of its own, and they are jobs no service behind it can do, because only the gateway sees every request…"},"2026":{"u":"/articles/extract-module-to-grpc-service.html#a-note-you-cannot-skip-adr-012s-two-kestrel-transport-profiles","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"A note you cannot skip: ADR-012's two Kestrel transport profiles","x":"On a cleartext endpoint there is no TLS, so there is no ALPN to negotiate the protocol. Kestrel must be told up front which protocols the cleartext port speaks, and the choice…"},"2027":{"u":"/articles/extract-module-to-grpc-service.html#the-whole-point-it-stays-reversible","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"The whole point: it stays reversible","x":"Walk the steps back and you see why this is not a one-way door. Because transport lives at the edge and the core talks to abstractions, a service can be re-collapsed into a…"},"2028":{"u":"/articles/extract-module-to-grpc-service.html#trade-offs-honestly","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Operational complexity multiplies. You now run multiple deployables plus a gateway, service discovery, a broker, and per-service databases instead of one process. Aspire hides…"},"2029":{"u":"/articles/extract-module-to-grpc-service.html#apply-this-even-without-mmca","d":"Extracting a module to a gRPC service, live","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The recipe ports to any stack: 1. Make the core talk to abstractions and put a fitness test on it. A message-bus interface and plain service interfaces, with an architecture test…"},"2030":{"u":"/articles/resilience-recovery-objectives.html","d":"Retries are not a recovery plan: resilience handlers, RTO/RPO, and a restore you actually drilled","k":"The MMCA.Common series","x":"Subtitle: The last article promised the resilience handler that makes retries happen, and the recovery objectives behind it. Here is both halves: the Polly pipeline on every…"},"2031":{"u":"/articles/resilience-recovery-objectives.html#half-one-the-standard-resilience-handler-on-every-outbound-client","d":"Retries are not a recovery plan: resilience handlers, RTO/RPO, and a restore you actually drilled","k":"The MMCA.Common series","t":"Half one: the standard resilience handler on every outbound client","x":"The runtime half is the part already shown elsewhere in this series, so I will summarize and attribute rather than re-derive it. Every outbound HTTP and gRPC client in the system…"},"2032":{"u":"/articles/resilience-recovery-objectives.html#fitness-enforced-not-just-present","d":"Retries are not a recovery plan: resilience handlers, RTO/RPO, and a restore you actually drilled","k":"The MMCA.Common series","t":"Fitness-enforced, not just present","x":"A convention that is \"applied everywhere by everyone remembering to\" is the same failure mode the idempotency and caching articles kept warning about. The standard resilience…"},"2033":{"u":"/articles/resilience-recovery-objectives.html#the-one-place-resilience-left-the-outbound-client-the-outbox-broker-publish","d":"Retries are not a recovery plan: resilience handlers, RTO/RPO, and a restore you actually drilled","k":"The MMCA.Common series","t":"The one place resilience left the outbound client: the outbox broker publish","x":"For most of this series, \"resilience policy\" has meant \"outbound HTTP or gRPC client.\" ADR-087 (accepted 2026-08-18) amends ADR-009 with the first exception, and it is a narrow…"},"2034":{"u":"/articles/resilience-recovery-objectives.html#half-two-declared-rto-and-rpo-per-scenario","d":"Retries are not a recovery plan: resilience handlers, RTO/RPO, and a restore you actually drilled","k":"The MMCA.Common series","t":"Half two: declared RTO and RPO per scenario","x":"Now the part that is actually missing from most \"resilience\" treatments, and the part this article exists to document. ADR-009 requires each consuming app to declare, in writing,…"},"2035":{"u":"/articles/resilience-recovery-objectives.html#the-drilled-restore-backups-you-tested-not-backups-you-assumed","d":"Retries are not a recovery plan: resilience handlers, RTO/RPO, and a restore you actually drilled","k":"The MMCA.Common series","t":"The drilled restore: backups you tested, not backups you assumed","x":"The second word in \"declared RTO/RPO and a drilled restore\" is the one that separates a posture from a wish. The backup posture in ADC's runbook is two tiers. Point-in-time…"},"2036":{"u":"/articles/resilience-recovery-objectives.html#database-per-service-multiplies-the-restore-surface","d":"Retries are not a recovery plan: resilience handlers, RTO/RPO, and a restore you actually drilled","k":"The MMCA.Common series","t":"Database-per-service multiplies the restore surface","x":"There is a structural reason recovery is harder here than in a monolith, and it is the direct cost of a decision celebrated elsewhere in this series. ADR-006…"},"2037":{"u":"/articles/resilience-recovery-objectives.html#the-dr-runbook-and-the-deploy-time-auto-revert","d":"Retries are not a recovery plan: resilience handlers, RTO/RPO, and a restore you actually drilled","k":"The MMCA.Common series","t":"The DR runbook and the deploy-time auto-revert","x":"The runbook governs four per-service databases, ADCIdentity, ADCConference, ADCEngagement and ADCNotification, and those four are the entire application data estate: one Basic…"},"2038":{"u":"/articles/resilience-recovery-objectives.html#trade-offs-honestly","d":"Retries are not a recovery plan: resilience handlers, RTO/RPO, and a restore you actually drilled","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- RTO/RPO are only as real as the last drill. ADC's objectives are declared with specific numbers, and the restore is drilled repeatedly: the drill table records six passing…"},"2039":{"u":"/articles/resilience-recovery-objectives.html#apply-this-even-without-mmca","d":"Retries are not a recovery plan: resilience handlers, RTO/RPO, and a restore you actually drilled","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The posture ports to any stack, and most of it is discipline rather than code: 1. Put the resilience handler in one shared place every client inherits (the HttpClient/gRPC…"},"2040":{"u":"/articles/architecture-fitness-functions.html","d":"Architecture fitness functions: rules that fail the build, not a wiki page","k":"The MMCA.Common series","x":"Subtitle: The inward-dependency rule everyone agrees on is the one everyone eventually breaks. Here is how MMCA.Common enforces it twice, defines the rules once, and makes them…"},"2041":{"u":"/articles/architecture-fitness-functions.html#why-a-diagram-is-not-enforcement","d":"Architecture fitness functions: rules that fail the build, not a wiki page","k":"The MMCA.Common series","t":"Why a diagram is not enforcement","x":"The inward-dependency rule is the load-bearing wall of Clean Architecture. The whole value proposition, business logic that is independent of frameworks, UI, and data stores,…"},"2042":{"u":"/articles/architecture-fitness-functions.html#enforced-twice-compile-time-and-runtime","d":"Architecture fitness functions: rules that fail the build, not a wiki page","k":"The MMCA.Common series","t":"Enforced twice: compile-time and runtime","x":"MMCA.Common enforces the dependency rules through two independent gates, and the redundancy is deliberate (MMCA.Common/AGENTS.md, Architecture section). 1. Compile-time, via…"},"2043":{"u":"/articles/architecture-fitness-functions.html#defined-once-identical-everywhere","d":"Architecture fitness functions: rules that fail the build, not a wiki page","k":"The MMCA.Common series","t":"Defined once, identical everywhere","x":"Here is the part that makes the fitness functions scale across more than one repo without rotting into three slightly-different copies. The rule bodies do not live in the test…"},"2044":{"u":"/articles/architecture-fitness-functions.html#the-rules-that-matter-most","d":"Architecture fitness functions: rules that fail the build, not a wiki page","k":"The MMCA.Common series","t":"The rules that matter most","x":"Three example rule families show what fitness functions actually assert. LayerDependencyTests. The inward-dependency rule: API reaches down to Infrastructure, Infrastructure to…"},"2045":{"u":"/articles/architecture-fitness-functions.html#freezing-the-wire-the-contract-no-single-repos-build-can-see","d":"Architecture fitness functions: rules that fail the build, not a wiki page","k":"The MMCA.Common series","t":"Freezing the wire: the contract no single repo's build can see","x":"A .proto file is not source in the ordinary sense. It is a published contract, and what makes it dangerous is that breaking it looks exactly like editing a local file. Renumber a…"},"2046":{"u":"/articles/architecture-fitness-functions.html#the-other-kind-of-fitness-test-documentation-as-a-contract","d":"Architecture fitness functions: rules that fail the build, not a wiki page","k":"The MMCA.Common series","t":"The other kind of fitness test: documentation as a contract","x":"Everything above tests code against code. There is a second family that tests documentation against code, and it is the one that stops a doc from rotting the moment someone ships…"},"2047":{"u":"/articles/architecture-fitness-functions.html#the-same-family-aimed-at-operations-every-alert-needs-a-runbook","d":"Architecture fitness functions: rules that fail the build, not a wiki page","k":"The MMCA.Common series","t":"The same family, aimed at operations: every alert needs a runbook","x":"The newest member of that family points the idea at your on-call rotation. An alert with no triage steps is a page with no next step, and a runbook section for an alert that no…"},"2048":{"u":"/articles/architecture-fitness-functions.html#the-third-kind-a-fitness-function-for-cost","d":"Architecture fitness functions: rules that fail the build, not a wiki page","k":"The MMCA.Common series","t":"The third kind: a fitness function for cost","x":"Structural rules assert shape. Documentation rules assert honesty. There is a third thing worth failing a build over, and it is the one most teams leave to a dashboard: cost.…"},"2049":{"u":"/articles/architecture-fitness-functions.html#trade-offs-honestly","d":"Architecture fitness functions: rules that fail the build, not a wiki page","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"Fitness functions are not free, and the scorecard does not pretend otherwise. - They only cover what you write a rule for. Read the scorecard category by category and the pattern…"},"2050":{"u":"/articles/architecture-fitness-functions.html#apply-this-even-without-mmca","d":"Architecture fitness functions: rules that fail the build, not a wiki page","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any stack and most of it is one afternoon of work: 1. Pick the one rule you would be most upset to see violated silently. For most teams that is the…"},"2051":{"u":"/articles/test-pyramid.html","d":"The test pyramid, not the ice-cream cone: 2,254 fast tests, zero Docker","k":"The MMCA.Common series","x":"Subtitle: A suite you run constantly is worth more than a suite you run nervously. Here is how MMCA.Common keeps 2,254 tests fast enough to live in the inner loop, with…"},"2052":{"u":"/articles/test-pyramid.html#why-the-shape-matters-more-than-the-count","d":"The test pyramid, not the ice-cream cone: 2,254 fast tests, zero Docker","k":"The MMCA.Common series","t":"Why the shape matters more than the count","x":"The test-count number is not the point. The shape is. The rubric (Architecture Evaluation Criteria, category 14) describes a healthy pyramid as \"many fast unit tests on…"},"2053":{"u":"/articles/test-pyramid.html#the-base-fast-pure-no-infrastructure","d":"The test pyramid, not the ice-cream cone: 2,254 fast tests, zero Docker","k":"The MMCA.Common series","t":"The base: fast, pure, no infrastructure","x":"The wide base of the MMCA.Common pyramid is pure unit tests with no I/O: domain entity factories and invariants, value objects, the Result/Error primitives, CQRS handlers with…"},"2054":{"u":"/articles/test-pyramid.html#the-middle-real-sqlite-two-real-databases-still-no-docker","d":"The test pyramid, not the ice-cream cone: 2,254 fast tests, zero Docker","k":"The MMCA.Common series","t":"The middle: real SQLite, two real databases, still no Docker","x":"Above the base sit the persistence and EF-configuration tests, and this is where the \"no Docker\" claim gets interesting. Rather than mock the ORM (which proves nothing about…"},"2055":{"u":"/articles/test-pyramid.html#the-cap-and-an-orthogonal-tier","d":"The test pyramid, not the ice-cream cone: 2,254 fast tests, zero Docker","k":"The MMCA.Common series","t":"The cap, and an orthogonal tier","x":"At the top of the pyramid are the component tests (bUnit, rendering Blazor components in isolation) and the end-to-end tests (Playwright, driving a real browser). These are…"},"2056":{"u":"/articles/test-pyramid.html#shipped-test-packages-consumers-do-not-re-invent-the-harness","d":"The test pyramid, not the ice-cream cone: 2,254 fast tests, zero Docker","k":"The MMCA.Common series","t":"Shipped test packages: consumers do not re-invent the harness","x":"Six of the framework's twenty-two published NuGet packages are test infrastructure, not test code, and this is how the pyramid stays consistent across three codebases instead of…"},"2057":{"u":"/articles/test-pyramid.html#the-apphost-tier-a-compiled-claim-about-the-composition","d":"The test pyramid, not the ice-cream cone: 2,254 fast tests, zero Docker","k":"The MMCA.Common series","t":"The AppHost tier: a compiled claim about the composition","x":"There is one file the tiers above never execute: the AppHost. It is the only place that states how a whole stack fits together, which project resources exist, which database each…"},"2058":{"u":"/articles/test-pyramid.html#accessibility-as-a-shipped-test-contract","d":"The test pyramid, not the ice-cream cone: 2,254 fast tests, zero Docker","k":"The MMCA.Common series","t":"Accessibility as a shipped test contract","x":"The E2E package carries one more contract, and it is the tier where a published standard turns into a build failure instead of a review comment. ADR-063 records it: WCAG 2.1 AA…"},"2059":{"u":"/articles/test-pyramid.html#runner-and-gate-xunit-v3-mtp-and-a-coverage-floor","d":"The test pyramid, not the ice-cream cone: 2,254 fast tests, zero Docker","k":"The MMCA.Common series","t":"Runner and gate: xUnit v3, MTP, and a coverage floor","x":"A detail that trips up people coming from older .NET projects: the suite runs on the Microsoft Testing Platform (MTP), not VSTest, configured in global.json, with xUnit v3,…"},"2060":{"u":"/articles/test-pyramid.html#trade-offs-honestly","d":"The test pyramid, not the ice-cream cone: 2,254 fast tests, zero Docker","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The shape is right, but the scorecard names real gaps and one is squarely in the testing story. - The UI tier's visual check is markup-deep, not pixel-deep. The framework ships…"},"2061":{"u":"/articles/test-pyramid.html#apply-this-even-without-mmca","d":"The test pyramid, not the ice-cream cone: 2,254 fast tests, zero Docker","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The shape ports to any stack: 1. Make the base fast enough to run on every save. No Docker, no network, no shared database in the layer you run constantly. If your unit tests…"},"2062":{"u":"/articles/soft-delete-vs-erasure.html","d":"Soft-delete vs the right to erasure: the GDPR conflict and the erasure pathway","k":"The MMCA.Common series","x":"Subtitle: Soft-delete is the right default for lifecycle and audit. It is also, by itself, illegal for personal data under GDPR. This is the story of scoring that conflict 1 out…"},"2063":{"u":"/articles/soft-delete-vs-erasure.html#why-it-matters-and-why-i-am-telling-on-myself","d":"Soft-delete vs the right to erasure: the GDPR conflict and the erasure pathway","k":"The MMCA.Common series","t":"Why it matters, and why I am telling on myself","x":"When I first graded MMCA.Common against an architecture rubric and committed the scorecard to the repo, the original single-axis snapshot scored Compliance, Privacy & Data…"},"2064":{"u":"/articles/soft-delete-vs-erasure.html#the-mmca-answer-separate-the-two-concerns-give-each-a-mechanism","d":"Soft-delete vs the right to erasure: the GDPR conflict and the erasure pathway","k":"The MMCA.Common series","t":"The MMCA answer: separate the two concerns, give each a mechanism","x":"The wrong fix is to overload Delete() so it hard-deletes personal data. That would break audit, undelete, and referential integrity all at once, trading one defect for three.…"},"2065":{"u":"/articles/soft-delete-vs-erasure.html#the-delete-that-really-removes-rows-restrict-by-default","d":"Soft-delete vs the right to erasure: the GDPR conflict and the erasure pathway","k":"The MMCA.Common series","t":"The delete that really removes rows: restrict by default","x":"Soft-delete keeps the row. Anonymization keeps the row and destroys the person inside it. Physical erasure, a real DELETE that takes rows out of the table, is a third thing, and…"},"2066":{"u":"/articles/soft-delete-vs-erasure.html#the-row-that-still-holds-its-slot-filtered-unique-indexes","d":"Soft-delete vs the right to erasure: the GDPR conflict and the erasure pathway","k":"The MMCA.Common series","t":"The row that still holds its slot: filtered unique indexes","x":"Soft-delete has one more leak, and it is the database disagreeing with the application. The global query filter says a deleted row does not exist; a unique index still counts it.…"},"2067":{"u":"/articles/soft-delete-vs-erasure.html#the-second-hiding-place-the-outbox","d":"Soft-delete vs the right to erasure: the GDPR conflict and the erasure pathway","k":"The MMCA.Common series","t":"The second hiding place: the outbox","x":"There is a second source of retained personal data, and it is the kind of thing you only find when you go looking honestly. The transactional outbox (ADR-003) writes an event row…"},"2068":{"u":"/articles/soft-delete-vs-erasure.html#the-live-session-cutting-off-a-token-mid-flight","d":"Soft-delete vs the right to erasure: the GDPR conflict and the erasure pathway","k":"The MMCA.Common series","t":"The live session: cutting off a token mid-flight","x":"Anonymizing the aggregate and committing the soft-delete shuts two doors: no future logins, and no silent re-mint of a fresh access token, because the refresh flow re-fetches the…"},"2069":{"u":"/articles/soft-delete-vs-erasure.html#the-other-right-portability-and-why-it-degrades-instead-of-failing","d":"Soft-delete vs the right to erasure: the GDPR conflict and the erasure pathway","k":"The MMCA.Common series","t":"The other right: portability, and why it degrades instead of failing","x":"Erasure has a sibling that lands in the same regulation and is usually built badly. The right to data portability means a user can ask for everything you hold about them, and…"},"2070":{"u":"/articles/soft-delete-vs-erasure.html#trade-offs-honestly","d":"Soft-delete vs the right to erasure: the GDPR conflict and the erasure pathway","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"The framework provides the mechanisms (IAnonymizable, OutboxCleanupService); the consumer owns the policy. That division is the most important caveat, and ADR-005 states it…"},"2071":{"u":"/articles/soft-delete-vs-erasure.html#apply-this-even-without-mmca","d":"Soft-delete vs the right to erasure: the GDPR conflict and the erasure pathway","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern is independent of the framework: 1. Keep soft-delete for lifecycle. It is the right tool for \"is this active?\", and audit / undelete / referential integrity all…"},"2072":{"u":"/articles/reusable-blazor-ui-framework.html","d":"A list page in a few lines: a reusable Blazor UI framework with the same discipline as the backend","k":"The MMCA.Common series","x":"Subtitle: This series has been backend all the way down. But the front end is where DRY usually goes to die: every list screen re-implements paging, sort, filter, loading, and…"},"2073":{"u":"/articles/reusable-blazor-ui-framework.html#the-package-that-is-allowed-to-depend-on-almost-nothing","d":"A list page in a few lines: a reusable Blazor UI framework with the same discipline as the backend","k":"The MMCA.Common series","t":"The package that is allowed to depend on almost nothing","x":"One structural fact sets the tone. MMCA.Common.UI is allowed to reference MMCA.Common.Shared and nothing else. Not Application, not Domain, not Infrastructure. That is a…"},"2074":{"u":"/articles/reusable-blazor-ui-framework.html#datagridlistpagebase-the-screen-you-stop-rewriting","d":"A list page in a few lines: a reusable Blazor UI framework with the same discipline as the backend","k":"The MMCA.Common series","t":"DataGridListPageBase: the screen you stop rewriting","x":"The centerpiece is an abstract Blazor component, DataGridListPageBase . Every server-paged list screen in every consumer app derives from it. It folds into one reusable place the…"},"2075":{"u":"/articles/reusable-blazor-ui-framework.html#the-same-page-on-a-phone-without-a-second-page","d":"A list page in a few lines: a reusable Blazor UI framework with the same discipline as the backend","k":"The MMCA.Common series","t":"The same page on a phone, without a second page","x":"The desktop path above is only half of what DataGridListPageBase does, because a data grid is the wrong control on a 390px screen and no amount of CSS fixes that. The base…"},"2076":{"u":"/articles/reusable-blazor-ui-framework.html#the-data-access-boundary-bind-to-an-interface-never-to-httpclient","d":"A list page in a few lines: a reusable Blazor UI framework with the same discipline as the backend","k":"The MMCA.Common series","t":"The data-access boundary: bind to an interface, never to HttpClient","x":"A page in this framework never injects a raw HttpClient. It injects IEntityService , a generic CRUD contract: GetAllAsync, GetPagedAsync, GetByIdAsync, AddAsync, UpdateAsync,…"},"2077":{"u":"/articles/reusable-blazor-ui-framework.html#theming-one-set-of-tokens-guarded-by-a-fitness-test","d":"A list page in a few lines: a reusable Blazor UI framework with the same discipline as the backend","k":"The MMCA.Common series","t":"Theming: one set of tokens, guarded by a fitness test","x":"Visual consistency lives in one static MudTheme, exposed as MMCATheme.Instance and handed to MudThemeProvider by a shared component, MmcaThemeProviders, that a root layout drops…"},"2078":{"u":"/articles/reusable-blazor-ui-framework.html#render-mode-state-persistence-no-flash-no-double-fetch","d":"A list page in a few lines: a reusable Blazor UI framework with the same discipline as the backend","k":"The MMCA.Common series","t":"Render-mode state persistence: no flash, no double fetch","x":"Modern Blazor's InteractiveAuto renders a page up to three times: static SSR, then interactive Server, then WASM. Naively, each transition re-runs the data fetch, and the user…"},"2079":{"u":"/articles/reusable-blazor-ui-framework.html#the-shell-ships-in-the-package-too-modules-plug-in-with-iuimodule","d":"A list page in a few lines: a reusable Blazor UI framework with the same discipline as the backend","k":"The MMCA.Common series","t":"The shell ships in the package too: modules plug in with IUIModule","x":"A base class removes the duplication inside a page. The next duplication up is the application shell itself: the router, the layout, the nav menu, and the handful of pages every…"},"2080":{"u":"/articles/reusable-blazor-ui-framework.html#host-polymorphic-token-refresh-one-component-set-three-platforms","d":"A list page in a few lines: a reusable Blazor UI framework with the same discipline as the backend","k":"The MMCA.Common series","t":"Host-polymorphic token refresh: one component set, three platforms","x":"Here is where the front-end ports pay off the most. The same Razor component set runs on Blazor Server, Blazor WebAssembly, and a .NET MAUI hybrid host (Android, iOS, macOS,…"},"2081":{"u":"/articles/reusable-blazor-ui-framework.html#trade-offs-honestly","d":"A list page in a few lines: a reusable Blazor UI framework with the same discipline as the backend","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- This is opinionated UI infrastructure coupled to MudBlazor. DataGridListPageBase is built around MudDataGrid , GridState , and MudBlazor's viewport observer. The base is…"},"2082":{"u":"/articles/reusable-blazor-ui-framework.html#apply-this-even-without-mmca","d":"A list page in a few lines: a reusable Blazor UI framework with the same discipline as the backend","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The moves port to any component framework, not just Blazor: 1. Put a list-page base component in charge of paging, sort, filter, loading, cancellation, and teardown. A concrete…"},"2083":{"u":"/articles/i18n-and-theming.html","d":"One preference, two switches: shipping i18n and dark mode on a single cookie-and-profile pipeline","k":"The MMCA.Common series","x":"Subtitle: A user picking Spanish and a user picking dark mode are doing the same thing: stating a per-user preference that has to survive a page refresh, three render modes, and…"},"2084":{"u":"/articles/i18n-and-theming.html#why-it-matters","d":"One preference, two switches: shipping i18n and dark mode on a single cookie-and-profile pipeline","k":"The MMCA.Common series","t":"Why it matters","x":"Count the places a preference has to be true at once. The static prerender pass renders HTML on the server before any JavaScript runs. The interactive Server circuit takes over.…"},"2085":{"u":"/articles/i18n-and-theming.html#the-mmca-answer-one-preference-pipeline-used-twice","d":"One preference, two switches: shipping i18n and dark mode on a single cookie-and-profile pipeline","k":"The MMCA.Common series","t":"The MMCA answer: one preference pipeline, used twice","x":"Supported cultures are an explicit allowlist, not an open-ended capability. SupportedCultures (MMCA.Common.Shared/Globalization/SupportedCultures.cs:9) holds Default = \"en-US\"…"},"2086":{"u":"/articles/i18n-and-theming.html#the-pipeline-in-one-sketch","d":"One preference, two switches: shipping i18n and dark mode on a single cookie-and-profile pipeline","k":"The MMCA.Common series","t":"The pipeline, in one sketch","x":"This is illustrative-of-shape, condensed from the files above to put the shared pipeline in one view, not a verbatim paste: A culture choice and a theme choice enter the same way…"},"2087":{"u":"/articles/i18n-and-theming.html#trade-offs-honestly","d":"One preference, two switches: shipping i18n and dark mode on a single cookie-and-profile pipeline","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Coverage is two locales, en-US and Spanish, full stop. Spanish (es) is the one added locale (SupportedCultures.cs:18). The mechanism is built to scale (adding a locale is one…"},"2088":{"u":"/articles/i18n-and-theming.html#apply-this-even-without-mmca","d":"One preference, two switches: shipping i18n and dark mode on a single cookie-and-profile pipeline","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The moves port to any component framework with a server-prerender-then-client lifecycle: 1. Treat locale and theme as the same kind of thing. Both are small per-user preferences.…"},"2089":{"u":"/articles/build-your-first-module.html","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","x":"Subtitle: One command writes the solution. The seven steps after it are the ones worth understanding, because they are what makes the generated code safe to change. --- Most \"add…"},"2090":{"u":"/articles/build-your-first-module.html#prerequisites","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","t":"Prerequisites","x":"- .NET 10 SDK. The framework targets net10.0 with LangVersion: preview for C extension types. - Familiarity with the layer flow: API/Grpc - Infrastructure - Application - Domain…"},"2091":{"u":"/articles/build-your-first-module.html#step-0-scaffold-the-solution","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","t":"Step 0: scaffold the solution","x":"Three names, all independent: the solution (also your root namespace), the first module in plural PascalCase, and its aggregate root in singular PascalCase. Everything derived…"},"2092":{"u":"/articles/build-your-first-module.html#step-1-define-the-aggregate-with-a-private-constructor-and-a-result-factory","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","t":"Step 1: define the aggregate with a private constructor and a Result factory","x":"Open the Domain layer of the module you just generated (Source/Modules/Orders/...Orders.Domain/), or start a fresh one there. An aggregate root inherits from…"},"2093":{"u":"/articles/build-your-first-module.html#step-2-raise-a-domain-event-with-adddomainevent","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","t":"Step 2: raise a domain event with AddDomainEvent","x":"State changes that other parts of the system care about are announced as domain events. You do not publish them directly; you record them on the aggregate, and the framework…"},"2094":{"u":"/articles/build-your-first-module.html#step-3-write-the-command-and-its-handler","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","t":"Step 3: write the command and its handler","x":"A write is a use case: a small command object handed to a handler that does exactly one thing. The handler implements ICommandHandler , which is a single method, Task…"},"2095":{"u":"/articles/build-your-first-module.html#step-4-add-a-fluentvalidation-validator","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","t":"Step 4: add a FluentValidation validator","x":"Input validation does not belong in the handler. Write a FluentValidation validator for the command, and the pipeline runs it automatically before the handler ever executes: This…"},"2096":{"u":"/articles/build-your-first-module.html#step-5-implement-imodule","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","t":"Step 5: implement IModule","x":"A module is the unit of cohesion above a feature slice. It implements IModule: a display Name, an optional Dependencies list of other module names, a RequiresDependencies flag,…"},"2097":{"u":"/articles/build-your-first-module.html#step-6-register-in-the-exact-di-sequence","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","t":"Step 6: register in the exact DI sequence","x":"This is the step the most experienced developers still get wrong, because one ordering rule is load-bearing. AddApplicationDecorators() must run after every module's handler…"},"2098":{"u":"/articles/build-your-first-module.html#step-7-watch-the-decorator-pipeline-kick-in-for-free","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","t":"Step 7: watch the decorator pipeline kick in, for free","x":"With the sequence correct, every command and query handler is now wrapped, in this execution order: You wrote a thin handler. The pipeline added the rest, driven by the marker…"},"2099":{"u":"/articles/build-your-first-module.html#the-next-slice-and-the-next-module","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","t":"The next slice, and the next module","x":"You will repeat that shape for every feature you add, so the pack scaffolds it too, which keeps it from drifting one hand-typed slice at a time. A single vertical slice is one…"},"2100":{"u":"/articles/build-your-first-module.html#trade-offs-and-gotchas-honestly","d":"Scaffold a .NET modular monolith in one command, then build your first module","k":"The MMCA.Common series","t":"Trade-offs and gotchas, honestly","x":"The shape buys consistency, and it asks for discipline in return: - The DI order is guarded, but not completely. AddApplicationDecorators() seals the pipeline, so a module scan…"},"2101":{"u":"/articles/write-your-first-fitness-test.html","d":"Write your first architecture fitness test","k":"The MMCA.Common series","x":"Subtitle: Your Clean Architecture diagram is a hope, not a guarantee, until something fails the build when it is violated. Here is how to add NetArchTest fitness functions to…"},"2102":{"u":"/articles/write-your-first-fitness-test.html#why-rules-as-code-beats-review","d":"Write your first architecture fitness test","k":"The MMCA.Common series","t":"Why rules-as-code beats review","x":"Before the steps, the thesis, because it shapes everything below. An architecture invariant is easy to state (\"Domain depends on nothing above it\") and easy to erode by accident.…"},"2103":{"u":"/articles/write-your-first-fitness-test.html#prerequisites","d":"Write your first architecture fitness test","k":"The MMCA.Common series","t":"Prerequisites","x":"- A .NET solution with a layered shape you want to protect. The MMCA layers are API/Grpc - Infrastructure - Application - Domain - Shared, but the rule library generalizes. -…"},"2104":{"u":"/articles/write-your-first-fitness-test.html#step-1-install-the-package-and-create-a-test-project","d":"Write your first architecture fitness test","k":"The MMCA.Common series","t":"Step 1: install the package and create a test project","x":"Add a dedicated architecture-test project (mirroring how the framework keeps Tests/Architecture/.Architecture.Tests), and reference the package: The package brings the…"},"2105":{"u":"/articles/write-your-first-fitness-test.html#step-2-implement-iarchitecturemap-one-anchor-type-per-layer","d":"Write your first architecture fitness test","k":"The MMCA.Common series","t":"Step 2: implement IArchitectureMap, one anchor type per layer","x":"This is the only real work, and it is small. IArchitectureMap is the single extension point every rule is parameterized by. You declare your layers (and modules, if you have…"},"2106":{"u":"/articles/write-your-first-fitness-test.html#step-3-subclass-the-test-bases-to-inherit-the-rule-library","d":"Write your first architecture fitness test","k":"The MMCA.Common series","t":"Step 3: subclass the test bases to inherit the rule library","x":"Now your test classes shrink to thin sealed subclasses that supply the map and inherit the [Fact]s. Two of the most valuable bases to start with: That is genuinely the whole test…"},"2107":{"u":"/articles/write-your-first-fitness-test.html#step-4-run-the-suite-under-microsoft-testing-platform","d":"Write your first architecture fitness test","k":"The MMCA.Common series","t":"Step 4: run the suite under Microsoft Testing Platform","x":"The fitness tests are ordinary tests in your test tier, so they run with the same command as everything else: Because they run in the normal tier, a violated invariant fails CI…"},"2108":{"u":"/articles/write-your-first-fitness-test.html#step-5-optional-add-the-compile-time-layer-guard-too","d":"Write your first architecture fitness test","k":"The MMCA.Common series","t":"Step 5 (optional): add the compile-time layer guard too","x":"The runtime suite is the broad net. For the single most common mistake, a bad project reference, you can get even faster feedback by also adding the compile-time guard, so the…"},"2109":{"u":"/articles/write-your-first-fitness-test.html#trade-offs-and-gotchas-honestly","d":"Write your first architecture fitness test","k":"The MMCA.Common series","t":"Trade-offs and gotchas, honestly","x":"ADR-015 names its own rough edges, and you should know them before you trust the green: - The tests assert structure and registration, not runtime behavior. A fitness test can…"},"2110":{"u":"/articles/write-your-first-fitness-test.html#apply-this-even-without-mmca","d":"Write your first architecture fitness test","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"If you are not on MMCA.Common, the pattern still ports to any .NET stack with NetArchTest: 1. Write each invariant as a named test, one per forbidden edge, so a failure points at…"},"2111":{"u":"/articles/two-real-apps-case-study.html","d":"Two real apps on one framework: a conference platform and a store","k":"The MMCA.Common series","x":"Subtitle: A framework's README can claim anything. The real test is whether two unrelated applications, with different domains and different deployments, can both run on it…"},"2112":{"u":"/articles/two-real-apps-case-study.html#the-two-apps","d":"Two real apps on one framework: a conference platform and a store","k":"The MMCA.Common series","t":"The two apps","x":"MMCA.ADC is the Atlanta Developers Conference application. Its domain is events: conferences, sessions, speakers, rooms, categories, and the questions attendees ask. It carries…"},"2113":{"u":"/articles/two-real-apps-case-study.html#what-they-actually-share","d":"Two real apps on one framework: a conference platform and a store","k":"The MMCA.Common series","t":"What they actually share","x":"Both apps sit at the same architecture stage, and that is deliberate. Each one has its modules extracted into separate service hosts (one process per module) behind a YARP…"},"2114":{"u":"/articles/two-real-apps-case-study.html#how-a-framework-change-ships","d":"Two real apps on one framework: a conference platform and a store","k":"The MMCA.Common series","t":"How a framework change ships","x":"The interesting operational property is not that the apps share code. It is how a change to the shared code reaches them. There is no phased rollout, no opt-in flag, no…"},"2115":{"u":"/articles/two-real-apps-case-study.html#what-each-app-proves-that-the-framework-cannot","d":"Two real apps on one framework: a conference platform and a store","k":"The MMCA.Common series","t":"What each app proves that the framework cannot","x":"A framework can demonstrate a pattern. It cannot, by itself, demonstrate that the pattern survives a real domain and a real deployment. That is the division of labor between…"},"2116":{"u":"/articles/two-real-apps-case-study.html#the-honest-note","d":"Two real apps on one framework: a conference platform and a store","k":"The MMCA.Common series","t":"The honest note","x":"Here is the caveat the framework writes about itself. It is not a preamble or a methodology section: it is written into the category rows. Because the framework is a library and…"},"2117":{"u":"/articles/two-real-apps-case-study.html#what-we-covered--next","d":"Two real apps on one framework: a conference platform and a store","k":"The MMCA.Common series","t":"What we covered / Next","x":"What we covered: two unrelated applications, a conference platform and an e-commerce store, both running on the same MMCA.Common packages at the same lockstep version and the…"},"2118":{"u":"/articles/device-capability-abstraction.html","d":"One Blazor UI, two hosts: a device-capability layer that stays resolvable everywhere","k":"The MMCA.Common series","x":"Subtitle: The same Blazor component set runs in a browser and inside a MAUI Blazor Hybrid app. But a share sheet, a fingerprint prompt, and a haptic tap only exist on the phone.…"},"2119":{"u":"/articles/device-capability-abstraction.html#the-mmca-answer-one-small-contract-per-capability-chosen-per-host","d":"One Blazor UI, two hosts: a device-capability layer that stays resolvable everywhere","k":"The MMCA.Common series","t":"The MMCA answer: one small contract per capability, chosen per host","x":"There is no god IDeviceCapabilities interface. That was a deliberate rejection: an aggregate device service forces every head to implement everything, and every new capability…"},"2120":{"u":"/articles/device-capability-abstraction.html#three-flavors-of-unavailable-all-registered-by-default","d":"One Blazor UI, two hosts: a device-capability layer that stays resolvable everywhere","k":"The MMCA.Common series","t":"Three flavors of \"unavailable,\" all registered by default","x":"Small contracts only help if every one of them always resolves. A component that injects IShareService must get something on every head, or the browser build throws at runtime…"},"2121":{"u":"/articles/device-capability-abstraction.html#heads-override-after-the-defaults-last-registration-wins","d":"One Blazor UI, two hosts: a device-capability layer that stays resolvable everywhere","k":"The MMCA.Common series","t":"Heads override after the defaults, last registration wins","x":"A default that is always inert would be useless on the platforms that can do the real thing. So heads override, and the mechanism is deliberately boring: plain Add registrations,…"},"2122":{"u":"/articles/device-capability-abstraction.html#the-eleventh-package-and-why-it-lives-outside-the-solution","d":"One Blazor UI, two hosts: a device-capability layer that stays resolvable everywhere","k":"The MMCA.Common series","t":"The eleventh package, and why it lives outside the solution","x":"The native adapters cannot ship in MMCA.Common.UI, because that package must stay WebAssembly-compatible. They ship in MMCA.Common.UI.Maui, the eleventh of the framework's…"},"2123":{"u":"/articles/device-capability-abstraction.html#deep-links-one-funnel-no-translation-table","d":"One Blazor UI, two hosts: a device-capability layer that stays resolvable everywhere","k":"The MMCA.Common series","t":"Deep links: one funnel, no translation table","x":"The most elegant part is navigation. A notification tap, a home-screen app action, an app link, a scanned QR code: all four are native events that need to land on a Blazor route.…"},"2124":{"u":"/articles/device-capability-abstraction.html#trade-offs-honestly","d":"One Blazor UI, two hosts: a device-capability layer that stays resolvable everywhere","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Null-object defaults can mask a missing registration. A MAUI head that forgets UseMauiDeviceCapabilities does not fail fast: it silently resolves the null defaults and loses…"},"2125":{"u":"/articles/device-capability-abstraction.html#apply-this-even-without-mmca","d":"One Blazor UI, two hosts: a device-capability layer that stays resolvable everywhere","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any UI that runs on more than one host: 1. Define one small interface per capability, not an aggregate device service. Each new capability is then additive,…"},"2126":{"u":"/articles/managed-file-storage-avatars.html","d":"Managed file storage: uploads you don't have to trust","k":"The MMCA.Common series","x":"Subtitle: A user uploads a profile photo. It is attacker-controlled bytes with GPS coordinates baked into the metadata and, if you are unlucky, a payload hiding behind a valid…"},"2127":{"u":"/articles/managed-file-storage-avatars.html#why-it-matters","d":"Managed file storage: uploads you don't have to trust","k":"The MMCA.Common series","t":"Why it matters","x":"An avatar is user-generated content on an anonymous-visible surface. That combination is exactly where file-upload bugs turn into incidents. The two that bite hardest are not…"},"2128":{"u":"/articles/managed-file-storage-avatars.html#the-mmca-answer-a-storage-boundary-and-a-re-encode-that-keeps-only-pixels","d":"Managed file storage: uploads you don't have to trust","k":"The MMCA.Common series","t":"The MMCA answer: a storage boundary, and a re-encode that keeps only pixels","x":"The framework had no blob abstraction before this. Anything file-shaped would have been written directly against the Azure SDK inside a module, unusable by the next consumer and…"},"2129":{"u":"/articles/managed-file-storage-avatars.html#trade-offs-honestly","d":"Managed file storage: uploads you don't have to trust","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"ADR-045 owns its rough edges in its Consequences section, and they are real design choices rather than oversights. - The avatars container is public-read by design. Avatar URLs…"},"2130":{"u":"/articles/managed-file-storage-avatars.html#apply-this-even-without-mmca","d":"Managed file storage: uploads you don't have to trust","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any stack and any blob store. The rules are short: 1. Never trust the declared content type or the file extension. Sniff the leading magic bytes and accept…"},"2131":{"u":"/articles/http-api-versioning.html","d":"HTTP API versioning, proven not just claimed","k":"The MMCA.Common series","x":"Subtitle: Most APIs \"support versioning\" by shipping v1.0 and never a second version. Here is a header-based setup that introduces versioning without breaking a single caller,…"},"2132":{"u":"/articles/http-api-versioning.html#why-it-matters","d":"HTTP API versioning, proven not just claimed","k":"The MMCA.Common series","t":"Why it matters","x":"HTTP APIs need a versioning axis of their own: one the caller selects per request, that the service can advertise, and that it can deprecate over time. In a framework whose…"},"2133":{"u":"/articles/http-api-versioning.html#the-mmca-answer-one-registration-one-exemplar-one-fitness-contract","d":"HTTP API versioning, proven not just claimed","k":"The MMCA.Common series","t":"The MMCA answer: one registration, one exemplar, one fitness contract","x":"MMCA.Common standardizes a single header-based setup in MMCA.Common.API, adopts it in every service host through one call, and keeps it exercised by a shared contract test that…"},"2134":{"u":"/articles/http-api-versioning.html#trade-offs-honestly","d":"HTTP API versioning, proven not just claimed","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"ADR-046 is refreshingly candid about what is real today versus what the shape leaves room for. Four things are worth naming, and none of them is a bug. - The class-level version…"},"2135":{"u":"/articles/http-api-versioning.html#apply-this-even-without-mmca","d":"HTTP API versioning, proven not just claimed","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any HTTP stack that will have to evolve a response shape without a flag day: 1. Pick one version reader and put it behind one registration. Header, query, or…"},"2136":{"u":"/articles/feature-flags-cqrs-pipeline.html","d":"Feature Flags in the CQRS Pipeline: Gate Commands, Not Code","k":"The MMCA.Common series","x":"Subtitle: Decoupling release from deploy means shipping code dark and flipping a switch. Here is how MMCA.Common gates commands and queries with feature flags at the outermost…"},"2137":{"u":"/articles/feature-flags-cqrs-pipeline.html#why-it-matters","d":"Feature Flags in the CQRS Pipeline: Gate Commands, Not Code","k":"The MMCA.Common series","t":"Why it matters","x":"A feature flag is a branch in production behavior, and branches that are copy-pasted drift. If the gate lives inside the handler, then whether a feature is on is decided in as…"},"2138":{"u":"/articles/feature-flags-cqrs-pipeline.html#the-mmca-answer-an-outermost-decorator-plus-a-marker-interface","d":"Feature Flags in the CQRS Pipeline: Gate Commands, Not Code","k":"The MMCA.Common series","t":"The MMCA answer: an outermost decorator plus a marker interface","x":"The whole mechanism is two small types plus a registration. The opt-in signal is IFeatureGated (UseCases/Markers/IFeatureGated.cs:10), an interface with exactly one member,…"},"2139":{"u":"/articles/feature-flags-cqrs-pipeline.html#the-second-surface-and-why-disabled-means-404","d":"Feature Flags in the CQRS Pipeline: Gate Commands, Not Code","k":"The MMCA.Common series","t":"The second surface, and why disabled means 404","x":"A feature can be reachable from the CQRS pipeline, but it can also be reachable straight from an MVC action that never dispatches a command. So the same flag name is enforced at…"},"2140":{"u":"/articles/feature-flags-cqrs-pipeline.html#trade-offs-honestly","d":"Feature Flags in the CQRS Pipeline: Gate Commands, Not Code","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- The two surfaces must be kept in agreement by hand. Gating the controller but not the command (or the reverse) leaves a half-protected feature reachable through the entry you…"},"2141":{"u":"/articles/feature-flags-cqrs-pipeline.html#apply-this-even-without-mmca","d":"Feature Flags in the CQRS Pipeline: Gate Commands, Not Code","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any pipeline that already wraps its handlers (MediatR behaviors, an interceptor, your own decorator chain): 1. Make feature gating a marker interface with…"},"2142":{"u":"/articles/field-level-encryption-ef-core.html","d":"Field-Level Encryption in EF Core: AES-GCM for PII Columns","k":"The MMCA.Common series","x":"Subtitle: Transparent database encryption protects the file, then decrypts for anyone who can query it. When a column holds data sensitive enough that a database reader should…"},"2143":{"u":"/articles/field-level-encryption-ef-core.html#why-it-matters","d":"Field-Level Encryption in EF Core: AES-GCM for PII Columns","k":"The MMCA.Common series","t":"Why it matters","x":"The gap between \"the database is encrypted\" and \"this column is protected\" is where compliance findings live. A PII inventory (rubric §30 asks for exactly this: what is…"},"2144":{"u":"/articles/field-level-encryption-ef-core.html#the-mmca-answer-one-value-converter-applied-per-property","d":"Field-Level Encryption in EF Core: AES-GCM for PII Columns","k":"The MMCA.Common series","t":"The MMCA answer: one value converter, applied per property","x":"The mechanism is EncryptedStringConverter, a sealed ValueConverter in the MMCA.Common.Infrastructure.Persistence.Encryption namespace. You attach it to a single property in an EF…"},"2145":{"u":"/articles/field-level-encryption-ef-core.html#the-honest-part-shipped-tested-latent","d":"Field-Level Encryption in EF Core: AES-GCM for PII Columns","k":"The MMCA.Common series","t":"The honest part: shipped, tested, latent","x":"Here is what separates this from a \"look what we built\" post. This converter is not in production. Zero columns across the four repositories are encrypted with it today. The…"},"2146":{"u":"/articles/field-level-encryption-ef-core.html#column-level-crypto-vs-tde-the-trade-you-are-actually-making","d":"Field-Level Encryption in EF Core: AES-GCM for PII Columns","k":"The MMCA.Common series","t":"Column-level crypto vs TDE: the trade you are actually making","x":"TDE and field-level encryption are not competitors; they are different threat models, and the honest framing is when each earns its cost. TDE is cheap, global, and transparent to…"},"2147":{"u":"/articles/field-level-encryption-ef-core.html#trade-offs-honestly","d":"Field-Level Encryption in EF Core: AES-GCM for PII Columns","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Encrypted columns are not queryable. The random nonce makes ciphertext non-deterministic, so there is no equality filter, index seek, sort, or join on an encrypted column.…"},"2148":{"u":"/articles/field-level-encryption-ef-core.html#apply-this-even-without-mmca","d":"Field-Level Encryption in EF Core: AES-GCM for PII Columns","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any EF Core codebase, and to most ORMs with a value-conversion or type-handler hook: 1. Use an EF Core ValueConverter (or your ORM's equivalent) so…"},"2149":{"u":"/articles/security-headers-csp-blazor.html","d":"Security Headers and CSP for Blazor: One Middleware, Every Host","k":"The MMCA.Common series","x":"Subtitle: Every client-facing host must stamp the same hardened response headers, but a Blazor host needs a Content-Security-Policy no static string can express. Here is one…"},"2150":{"u":"/articles/security-headers-csp-blazor.html#why-it-matters","d":"Security Headers and CSP for Blazor: One Middleware, Every Host","k":"The MMCA.Common series","t":"Why it matters","x":"Security response headers are cheap defence-in-depth: X-Content-Type-Options: nosniff stops MIME sniffing, X-Frame-Options and frame-ancestors stop clickjacking, HSTS forces…"},"2151":{"u":"/articles/security-headers-csp-blazor.html#the-mmca-answer-one-middleware-a-pluggable-csp","d":"Security Headers and CSP for Blazor: One Middleware, Every Host","k":"The MMCA.Common series","t":"The MMCA answer: one middleware, a pluggable CSP","x":"MMCA.Common ships a single SecurityHeadersMiddleware (MMCA.Common.Aspire/Security/SecurityHeaders.cs:145) in the MMCA.Common.Aspire.Security layer, registered with…"},"2152":{"u":"/articles/security-headers-csp-blazor.html#the-blazor-policy-built-at-runtime","d":"Security Headers and CSP for Blazor: One Middleware, Every Host","k":"The MMCA.Common series","t":"The Blazor policy, built at runtime","x":"An HTML host opts into the origin-pinned policy by registering its own provider. Both apps register one shared BlazorCspPolicyProvider…"},"2153":{"u":"/articles/security-headers-csp-blazor.html#adopted-at-both-edges-of-both-apps","d":"Security Headers and CSP for Blazor: One Middleware, Every Host","k":"The MMCA.Common series","t":"Adopted at both edges of both apps","x":"This is not a library that exists and waits to be used. Store and ADC each wire it at both client-facing edges. The Gateway hosts call…"},"2154":{"u":"/articles/security-headers-csp-blazor.html#trade-offs-honestly","d":"Security Headers and CSP for Blazor: One Middleware, Every Host","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- The baseline is complete, not maximal. A default that works for a Blazor and MudBlazor host is a default that carries style-src 'unsafe-inline' (SecurityHeaders.cs:65-67), so…"},"2155":{"u":"/articles/security-headers-csp-blazor.html#apply-this-even-without-mmca","d":"Security Headers and CSP for Blazor: One Middleware, Every Host","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The shape ports to any ASP.NET Core stack, and the idea ports to any web framework: 1. Put the hardened header set in one middleware with strongly-typed, overridable settings,…"},"2156":{"u":"/articles/observability-opentelemetry.html","d":"Observability by Default: OpenTelemetry and Azure Monitor in MMCA","k":"The MMCA.Common series","x":"Subtitle: Auto-instrumentation gives you HTTP and runtime signals for free, but it is blind to the two paths that carry almost all of your framework's own work: the CQRS pipeline…"},"2157":{"u":"/articles/observability-opentelemetry.html#why-it-matters","d":"Observability by Default: OpenTelemetry and Azure Monitor in MMCA","k":"The MMCA.Common series","t":"Why it matters","x":"Observability is the category you do not miss until production, and by then retrofitting it is expensive. The rubric names the bar directly: structured logging with correlation…"},"2158":{"u":"/articles/observability-opentelemetry.html#the-mmca-answer-one-call-one-baseline-on-every-host","d":"Observability by Default: OpenTelemetry and Azure Monitor in MMCA","k":"The MMCA.Common series","t":"The MMCA answer: one call, one baseline, on every host","x":"Every framework-consuming host calls AddServiceDefaults() early in Program.cs, and that method calls ConfigureOpenTelemetry() (Extensions.cs:30, the call at :32) before anything…"},"2159":{"u":"/articles/observability-opentelemetry.html#the-one-that-pays-for-itself-filtering-idle-poll-spans","d":"Observability by Default: OpenTelemetry and Azure Monitor in MMCA","k":"The MMCA.Common series","t":"The one that pays for itself: filtering idle poll spans","x":"The OutboxProcessor polls every relational outbox table on a recurring cycle (both deployment templates push the interval to 300 seconds precisely so idle polls cost less:…"},"2160":{"u":"/articles/observability-opentelemetry.html#the-other-half-which-signal-wakes-a-human","d":"Observability by Default: OpenTelemetry and Azure Monitor in MMCA","k":"The MMCA.Common series","t":"The other half: which signal wakes a human","x":"Everything above is emission. Which of those signals pages somebody, at what threshold, at what severity, is a separate decision, and for a long time it lived in the deployment…"},"2161":{"u":"/articles/observability-opentelemetry.html#trade-offs-honestly","d":"Observability by Default: OpenTelemetry and Azure Monitor in MMCA","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- The literal names can drift. The meter, activity-source, and poll-span names are duplicated as string literals across the Aspire package (OutboxPollFilterProcessor.cs:26-29 and…"},"2162":{"u":"/articles/observability-opentelemetry.html#apply-this-even-without-mmca","d":"Observability by Default: OpenTelemetry and Azure Monitor in MMCA","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The pattern ports to any OpenTelemetry stack, with or without Aspire: 1. Put the telemetry baseline in one shared bootstrap every host calls, not in each app. One place to change…"},"2163":{"u":"/articles/saga-compensation-reconciliation.html","d":"Undo Is a Feature: Saga Compensation and the Reconciliation Backstop","k":"The MMCA.Common series","x":"Subtitle: A cancelled order has to give back stock that a transaction closed minutes ago already took, and a payment confirmation that never arrives strands the order forever.…"},"2164":{"u":"/articles/saga-compensation-reconciliation.html#why-it-matters","d":"Undo Is a Feature: Saga Compensation and the Reconciliation Backstop","k":"The MMCA.Common series","t":"Why it matters","x":"The rubric has two categories aimed straight at this. §6 (CQRS and Event-Driven Design, heading at ArchitectureEvaluationCriteria.md:229) asks for idempotent consumers (:238) and…"},"2165":{"u":"/articles/saga-compensation-reconciliation.html#the-mmca-answer-compensation-is-a-handler-not-a-branch-in-the-command","d":"Undo Is a Feature: Saga Compensation and the Reconciliation Backstop","k":"The MMCA.Common series","t":"The MMCA answer: compensation is a handler, not a branch in the command","x":"The command handler does one thing, and it does not even own the plumbing for that. CancelOrderHandler derives from MutateEntityHandlerBase (CancelOrderHandler.cs:27-31), so the…"},"2166":{"u":"/articles/saga-compensation-reconciliation.html#the-marker-idempotency-as-a-database-invariant","d":"Undo Is a Feature: Saga Compensation and the Reconciliation Backstop","k":"The MMCA.Common series","t":"The marker: idempotency as a database invariant","x":"Here is the part worth stealing even if you never touch this framework. At-least-once delivery means the compensating handler will eventually run twice. If restoring stock is not…"},"2167":{"u":"/articles/saga-compensation-reconciliation.html#redelivery-is-the-retry-mechanism-but-only-for-a-throw","d":"Undo Is a Feature: Saga Compensation and the Reconciliation Backstop","k":"The MMCA.Common series","t":"Redelivery is the retry mechanism, but only for a throw","x":"A compensating handler needs no retry loop of its own, because it already sits on one. The catch is that the loop only ever sees exceptions. When in-process dispatch throws, the…"},"2168":{"u":"/articles/saga-compensation-reconciliation.html#the-inbound-edge-a-webhook-is-a-delivery-contract-not-an-api-call","d":"Undo Is a Feature: Saga Compensation and the Reconciliation Backstop","k":"The MMCA.Common series","t":"The inbound edge: a webhook is a delivery contract, not an API call","x":"Everything so far is about a message leaving the process (ADR-003, at-least-once out) or a broker redelivery arriving at a consumer (ADR-021, dedup on the way in). The Stripe…"},"2169":{"u":"/articles/saga-compensation-reconciliation.html#the-backstop-a-periodic-sweep-against-the-provider","d":"Undo Is a Feature: Saga Compensation and the Reconciliation Backstop","k":"The MMCA.Common series","t":"The backstop: a periodic sweep against the provider","x":"Compensation answers \"step two failed.\" It does not answer \"step three never reported back.\" A webhook that is never delivered, or that arrives and is rejected because the…"},"2170":{"u":"/articles/saga-compensation-reconciliation.html#trade-offs-honestly","d":"Undo Is a Feature: Saga Compensation and the Reconciliation Backstop","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Adoption is one module, and the record says so. This pattern lives in MMCA.Store's Sales module only: the two saga handlers and the one reconciliation sweep above. MMCA.ADC and…"},"2171":{"u":"/articles/saga-compensation-reconciliation.html#apply-this-even-without-mmca","d":"Undo Is a Feature: Saga Compensation and the Reconciliation Backstop","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The mechanism ports to any stack that has events, a database, and an external dependency: 1. Put the compensating action in its own handler, triggered by the event the first step…"},"2172":{"u":"/articles/governed-llm-boundary.html","d":"The LLM Is a Dependency: A Bounded, Guarded, Metered Boundary for Chat Completions","k":"The MMCA.Common series","x":"Subtitle: A chat completion is an unbounded, metered, non-deterministic call to somebody else's server, and most codebases make it by newing up a vendor client in the middle of a…"},"2173":{"u":"/articles/governed-llm-boundary.html#why-it-matters","d":"The LLM Is a Dependency: A Bounded, Guarded, Metered Boundary for Chat Completions","k":"The MMCA.Common series","t":"Why it matters","x":"Rubric §16, AI-Native Application Architecture, asks exactly one question of a product feature that calls a model: is that dependency governed like any other external system,…"},"2174":{"u":"/articles/governed-llm-boundary.html#the-mmca-answer-four-optional-packages-and-the-call-is-a-pipeline","d":"The LLM Is a Dependency: A Bounded, Guarded, Metered Boundary for Chat Completions","k":"The MMCA.Common series","t":"The MMCA answer: four optional packages, and the call is a pipeline","x":"The AI boundary is four of the twenty-two published framework packages (MMCA.Common/FACTS.md:19), all at framework v1.221.0 (:14): MMCA.Common.AI, the governed pipeline (:22);…"},"2175":{"u":"/articles/governed-llm-boundary.html#off-by-absence-not-off-by-flag","d":"The LLM Is a Dependency: A Bounded, Guarded, Metered Boundary for Chat Completions","k":"The MMCA.Common series","t":"Off by absence, not off by flag","x":"AiSettings (AiSettings.cs:22) binds one configuration section, Ai (:25), and carries the whole surface: Enabled (:46), Provider (:55, the name of a registered provider), Model…"},"2176":{"u":"/articles/governed-llm-boundary.html#bounds-five-of-them-on-both-paths","d":"The LLM Is a Dependency: A Bounded, Guarded, Metered Boundary for Chat Completions","k":"The MMCA.Common series","t":"Bounds: five of them, on both paths","x":"BoundedChatClient (BoundedChatClient.cs:65) is a DelegatingChatClient and enforces five bounds, each applied to the buffered and the streaming path (the list is documented on the…"},"2177":{"u":"/articles/governed-llm-boundary.html#guardrails-an-extension-point-two-narrow-policies-no-domain-policy","d":"The LLM Is a Dependency: A Bounded, Guarded, Metered Boundary for Chat Completions","k":"The MMCA.Common series","t":"Guardrails: an extension point, two narrow policies, no domain policy","x":"IChatGuardrail (IChatGuardrail.cs:21) has three members, each answering with a GuardrailVerdict: InspectRequestAsync (:28-31), InspectResponseAsync (:38-41) and…"},"2178":{"u":"/articles/governed-llm-boundary.html#prompts-a-versioned-contract-the-framework-hashes-and-gates","d":"The LLM Is a Dependency: A Bounded, Guarded, Metered Boundary for Chat Completions","k":"The MMCA.Common series","t":"Prompts: a versioned contract the framework hashes and gates","x":"PromptContract (PromptContract.cs:23) is a record of four things: name, version, model and system prompt. Its Hash (:46) is the lowercase hex SHA-256 of those four joined with a…"},"2179":{"u":"/articles/governed-llm-boundary.html#metering-two-counters-one-histogram-one-name","d":"The LLM Is a Dependency: A Bounded, Guarded, Metered Boundary for Chat Completions","k":"The MMCA.Common series","t":"Metering: two counters, one histogram, one name","x":"AiUsageMeter (AiUsageMeter.cs:20) publishes mmca.ai.inputtokens (:29) and mmca.ai.outputtokens (:32) on the meter MMCA.Common.AI (:26), plus a mmca.ai.call.duration histogram in…"},"2180":{"u":"/articles/governed-llm-boundary.html#the-layering-rule-that-keeps-all-of-this-at-one-place","d":"The LLM Is a Dependency: A Bounded, Guarded, Metered Boundary for Chat Completions","k":"The MMCA.Common series","t":"The layering rule that keeps all of this at one place","x":"A governed boundary that leaks is not a boundary. There are exactly two ways this one leaks, and AiDependencyIsolationTestsBase (AiDependencyIsolationTestsBase.cs:19) is the…"},"2181":{"u":"/articles/governed-llm-boundary.html#trade-offs-honestly","d":"The LLM Is a Dependency: A Bounded, Guarded, Metered Boundary for Chat Completions","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Guardrails are the one partial §16 criterion, and they hold the row at Implementation 9. Both shipped policies are opt-in, so Ai:RequireGuardrail is satisfied by the PII…"},"2182":{"u":"/articles/governed-llm-boundary.html#apply-this-even-without-mmca","d":"The LLM Is a Dependency: A Bounded, Guarded, Metered Boundary for Chat Completions","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The shape ports to any stack with a DI container and a vendor SDK. Microsoft.Extensions.AI makes it cheap in .NET because IChatClient and DelegatingChatClient already exist, but…"},"2183":{"u":"/articles/durable-internal-commands.html","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","x":"Subtitle: A handler that wants something to happen after its transaction commits has four mechanisms to choose from, and picking the wrong one loses the work or pays for…"},"2184":{"u":"/articles/durable-internal-commands.html#why-it-matters","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"Why it matters","x":"The rubric asks for this twice, from two directions. §6 (CQRS and Event-Driven Design) wants reads and writes separated through a dispatcher with a real decorator pipeline, an…"},"2185":{"u":"/articles/durable-internal-commands.html#four-mechanisms-one-question","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"Four mechanisms, one question","x":"The framework has four ways to do work later, and they are not interchangeable. The bounded channel (ADR-121) is a Channel singleton with a SingleReader BackgroundService drain,…"},"2186":{"u":"/articles/durable-internal-commands.html#the-mmca-answer-a-deferred-execution-is-the-inline-execution","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"The MMCA answer: a deferred execution IS the inline execution","x":"Here is the decision that makes the rest of it cheap. IInternalCommand is a marker interface deriving from ICommand and nothing else (IInternalCommand.cs:38). A command that opts…"},"2187":{"u":"/articles/durable-internal-commands.html#scheduling-rides-the-callers-unit-of-work","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"Scheduling rides the caller's unit of work","x":"IInternalCommandScheduler exposes ScheduleAsync(command, runAt) and a TimeSpan delay overload, both returning Result (IInternalCommandScheduler.cs:45-62). runAt is \"the earliest…"},"2188":{"u":"/articles/durable-internal-commands.html#the-row-and-what-it-remembers","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"The row, and what it remembers","x":"InternalCommandMessage (InternalCommandMessage.cs:21) is deliberately not an auditable entity, for the same reason OutboxMessage is not: it is framework bookkeeping, not domain…"},"2189":{"u":"/articles/durable-internal-commands.html#a-rename-that-does-not-orphan-the-queue","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"A rename that does not orphan the queue","x":"The row stores the command's assembly-qualified CLR name by default, which means renaming the class, moving its namespace, or moving its assembly orphans every row already…"},"2190":{"u":"/articles/durable-internal-commands.html#the-drain-claim-execute-stamp","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"The drain: claim, execute, stamp","x":"InternalCommandProcessor is a BackgroundService (InternalCommandProcessor.cs:43). Its loop mechanics (the startup delay, the smart wait, the per-source drain and the retry…"},"2191":{"u":"/articles/durable-internal-commands.html#the-worked-example-an-email-that-must-survive-a-deploy","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"The worked example: an email that must survive a deploy","x":"MMCA.Store's Sales module schedules a payment-failure notification. The command is fifteen lines and most of them are documentation: One identifier as the payload, a stable name,…"},"2192":{"u":"/articles/durable-internal-commands.html#the-expensive-case-permission-timeout-and-a-cross-replica-claim","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"The expensive case: permission, timeout and a cross-replica claim","x":"MMCA.ADC's AI session scoring is the other end of the range, and it is the case ADR-121 moved out of the in-process channel. One pass issues one paid Anthropic call per session,…"},"2193":{"u":"/articles/durable-internal-commands.html#operating-it","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"Operating it","x":"A queue with no operator surface is a queue that gets hand-edited in production SQL. IInternalCommandAdministration (IInternalCommandAdministration.cs:17) mirrors…"},"2194":{"u":"/articles/durable-internal-commands.html#trade-offs-honestly","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- One migration per relational data source. The table is in the model of every relational source (SQL Server, PostgreSQL and SQLite after ADR-113), so adopting the queue means…"},"2195":{"u":"/articles/durable-internal-commands.html#apply-this-even-without-mmca","d":"Four Ways to Do Work Later: Channels, Cron, the Outbox and Durable Internal Commands","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The mechanism ports to anything with a relational database and a background worker. Six steps, in the order that matters: 1. Write the job to a table inside the caller's…"},"2196":{"u":"/articles/identity-completions.html","d":"Finishing Identity: Second Factor, Email Confirmation and Stored Permission Grants","k":"The MMCA.Common series","x":"Subtitle: A framework that owns sign-in for two deployed apps cannot add a second factor by adding a step. Here is how a TOTP challenge, an email-confirmation gate and…"},"2197":{"u":"/articles/identity-completions.html#why-it-matters","d":"Finishing Identity: Second Factor, Email Confirmation and Stored Permission Grants","k":"The MMCA.Common series","t":"Why it matters","x":"Rubric §11 (Security) is a weight-3 category asking that authentication be centralized and identity flows documented, that authorization be enforced at the right layer rather…"},"2198":{"u":"/articles/identity-completions.html#the-mmca-answer-the-unadopted-path-is-unreachable-not-merely-disabled","d":"Finishing Identity: Second Factor, Email Confirmation and Stored Permission Grants","k":"The MMCA.Common series","t":"The MMCA answer: the unadopted path is unreachable, not merely disabled","x":"AuthenticationServiceBase takes the two new collaborators as constructor parameters, both optional and both defaulted to null: ITwoFactorAuthenticator? twoFactor = null and…"},"2199":{"u":"/articles/identity-completions.html#the-step-up-assertion-is-a-claim-and-presence-is-the-whole-test","d":"Finishing Identity: Second Factor, Email Confirmation and Stored Permission Grants","k":"The MMCA.Common series","t":"The step-up assertion is a claim, and presence is the whole test","x":"A challenge that is satisfied has to be recorded somewhere the rest of the system can read. The framework stamps an amr-style claim: AuthClaimTypes.MultiFactor is the literal mfa…"},"2200":{"u":"/articles/identity-completions.html#the-framework-ships-no-user-table-on-purpose","d":"Finishing Identity: Second Factor, Email Confirmation and Stored Permission Grants","k":"The MMCA.Common series","t":"The framework ships no user table, on purpose","x":"ITwoFactorService is stateless cryptography: secrets, provisioning URIs, verification inside a skew window, recovery codes. ITwoFactorStore is the persistence, and the consumer…"},"2201":{"u":"/articles/identity-completions.html#stored-grants-operator-editable-and-structurally-unable-to-deny","d":"Finishing Identity: Second Factor, Email Confirmation and Stored Permission Grants","k":"The MMCA.Common series","t":"Stored grants: operator-editable, and structurally unable to deny","x":"Article 24 covered the compiled permission registry: a frozen role-to-permission map, consulted by the CQRS authorization decorators and the [HasPermission] policy. It has one…"},"2202":{"u":"/articles/identity-completions.html#two-refusals-that-are-worth-more-than-the-feature","d":"Finishing Identity: Second Factor, Email Confirmation and Stored Permission Grants","k":"The MMCA.Common series","t":"Two refusals that are worth more than the feature","x":"StoredPermissionRoleAdministrationService (:45) is the shipped IRoleAdministrationService: it reports each role's compiled and stored permissions and replaces the stored half.…"},"2203":{"u":"/articles/identity-completions.html#the-administration-api-is-two-bases-gated-on-capabilities","d":"Finishing Identity: Second Factor, Email Confirmation and Stored Permission Grants","k":"The MMCA.Common series","t":"The administration API is two bases, gated on capabilities","x":"RolesAdminControllerBase (:61) needs no app-supplied service, because AddStoredPermissionGrants() registers a complete one; an app implements the interface only to change that…"},"2204":{"u":"/articles/identity-completions.html#trade-offs-honestly","d":"Finishing Identity: Second Factor, Email Confirmation and Stored Permission Grants","k":"The MMCA.Common series","t":"Trade-offs, honestly","x":"- Two-factor ships unadopted, and the article will not pretend otherwise. A search across both consumers' Source/ trees this run finds no call to AddTwoFactorAuthentication and…"},"2205":{"u":"/articles/identity-completions.html#apply-this-even-without-mmca","d":"Finishing Identity: Second Factor, Email Confirmation and Stored Permission Grants","k":"The MMCA.Common series","t":"Apply this even without MMCA","x":"The identity mechanics here are standard. What is worth copying is the shape of the extension. 1. Make the unadopted path unreachable rather than disabled. An optional…"},"2206":{"u":"/articles/series-index.html","d":"The MMCA series: every pattern, one place","k":"The MMCA.Common series","x":"Subtitle: A single map of the whole series. Start at the top if MMCA.Common is new to you, or jump straight to the pattern you came for. --- MMCA.Common is an Apache-2.0 licensed…"},"2207":{"u":"/articles/series-index.html#start-here","d":"The MMCA series: every pattern, one place","k":"The MMCA.Common series","t":"Start here","x":"The thesis and the framing. Read these first if you have not met the framework. - 01 · I open-sourced the enterprise .NET plumbing I never want to rewrite, and graded it against…"},"2208":{"u":"/articles/series-index.html#core-patterns","d":"The MMCA series: every pattern, one place","k":"The MMCA.Common series","t":"Core patterns","x":"The day-one building blocks. Error handling, the domain model, query intent, the handler pipeline, the reliability backbone that ties them together, the compensating handlers…"},"2209":{"u":"/articles/series-index.html#data-and-persistence","d":"The MMCA series: every pattern, one place","k":"The MMCA.Common series","t":"Data and persistence","x":"How the data layer is built so a module owns its own database, and even its own storage engine, and can become its own service later without a rewrite. - 10 ·…"},"2210":{"u":"/articles/series-index.html#auth-the-api-edge-and-cross-cutting","d":"The MMCA series: every pattern, one place","k":"The MMCA.Common series","t":"Auth, the API edge, and cross-cutting","x":"The concerns that sit across every module: authentication between services, authorization (by role, by permission, and by row ownership), password storage, safe retries, caching,…"},"2211":{"u":"/articles/series-index.html#run-extract-and-harden","d":"The MMCA series: every pattern, one place","k":"The MMCA.Common series","t":"Run, extract, and harden","x":"Bring the whole stack up with one command, then cut a module out into its own service, make the running system survive failure, see what it is doing in production, and put…"},"2212":{"u":"/articles/series-index.html#proof-front-end-and-getting-started","d":"The MMCA series: every pattern, one place","k":"The MMCA.Common series","t":"Proof, front end, and getting started","x":"The evidence that the patterns hold (fitness functions, the test pyramid, the erasure pathway), the reusable Blazor UI framework and the internationalization and theming that…"},"2213":{"u":"/articles/series-index.html#where-to-go-next","d":"The MMCA series: every pattern, one place","k":"The MMCA.Common series","t":"Where to go next","x":"If you are evaluating the framework, read 01 then 03 then 41: the thesis, the rubric, and the proof. If you are here to solve a specific problem, the core-patterns and…"},"2214":{"u":"/","d":"Ivan Ball-llovera · Senior Software Architect","k":"Site","x":"Senior Software Architect Ivan Ball-llovera Cloud-native enterprise architecture on the Microsoft stack I design and ship production-grade .NET platforms: modular monoliths that…"},"2215":{"u":"/","d":"Ivan Ball-llovera · Senior Software Architect","k":"Site","t":"Architecture that earns its keep","x":"I am a Senior Software Architect with more than 25 years designing and delivering scalable, cloud-native systems on the Microsoft stack. My focus is Domain-Driven Design, Clean…"},"2216":{"u":"/","d":"Ivan Ball-llovera · Senior Software Architect","k":"Site","t":"The MMCA platform","x":"A production-grade .NET 10 framework and a set of reference apps that demonstrate modern enterprise architecture end to end. It is built as a modular monolith that extracts…"},"2217":{"u":"/","d":"Ivan Ball-llovera · Senior Software Architect","k":"Site","t":"Deep dives on enterprise .NET","x":"A long-form series turning the framework's decisions into teachable patterns, every claim grounded in real source. A few recent pieces: Proof & getting started · No. 53 The…"},"2218":{"u":"/","d":"Ivan Ball-llovera · Senior Software Architect","k":"Site","t":"Speaking & giving back","x":"I help run two community-driven Atlanta technology conferences and keep production-grade patterns free and in the open. See talks & community work Organizer & speaker Two Atlanta…"},"2219":{"u":"/resume.html","d":"Résumé","k":"Site","x":"Résumé Ivan Ball-llovera Senior Software Architect 25+ years designing and delivering scalable, cloud-native systems on the Microsoft stack: Domain-Driven Design, Clean…"},"2220":{"u":"/resume.html","d":"Résumé","k":"Site","t":"Professional summary","x":"Senior Software Architect with 25+ years designing and delivering scalable, cloud-native systems on the Microsoft stack. Deep expertise in Domain-Driven Design, Clean…"},"2221":{"u":"/resume.html","d":"Résumé","k":"Site","t":"Core competencies","x":"Architecture & design Domain-Driven Design, Clean Architecture, CQRS, Modular Monolith → Microservices, Event-Driven Architecture, Outbox Pattern, gRPC, API Gateway (YARP),…"},"2222":{"u":"/resume.html","d":"Résumé","k":"Site","t":"Professional experience","x":"Senior Software Engineer · Assurant June 2025 – Present · Architect-level scope: platform, security, and cross-team technical decisions Re-architected the AR.com renters quote…"},"2223":{"u":"/resume.html","d":"Résumé","k":"Site","t":"Featured project · MMCA platform","x":"Personal / open source · github.com/ivanball/MMCA.Common A production-grade .NET 10 reference platform demonstrating modern enterprise architecture end-to-end. The conference…"},"2224":{"u":"/resume.html","d":"Résumé","k":"Site","t":"Education","x":"B.S., Computer Science University of Havana (Faculty of Mathematics), Havana, Cuba (1994 – 1999)"},"2225":{"u":"/resume.html","d":"Résumé","k":"Site","t":"Languages","x":"English · Spanish (bilingual)"},"2226":{"u":"/resume.html","d":"Résumé","k":"Site","t":"Certifications","x":"✓ Azure Administrator Associate (AZ-104, 2025) ✓ Azure AI Fundamentals (AI-900, 2024) ✓ Azure Data Fundamentals (DP-900, 2021) ✓ Azure Fundamentals (AZ-900, 2021) → In progress…"},"2227":{"u":"/resume.html","d":"Résumé","k":"Site","t":"Professional development","x":"Continuously prototypes emerging technologies, with a current focus on Clean Architecture using .NET 10, Blazor, .NET MAUI, and ASP.NET Core Web API, and on AI-assisted…"},"2228":{"u":"/platform.html","d":"The MMCA Platform","k":"Site","x":"Featured work · Open source The MMCA platform A production-grade .NET 10 platform that demonstrates modern enterprise architecture end to end: an open-source framework of…"},"2229":{"u":"/platform.html","d":"The MMCA Platform","k":"Site","t":"MMCA.Common","x":"A NuGet package framework for building modular-monolith applications with DDD, Clean Architecture, and CQRS, and the extension points to extract a module into its own…"},"2230":{"u":"/platform.html","d":"The MMCA Platform","k":"Site","t":"Three reference applications","x":"The framework is consumed by real apps. Each one exercises the patterns differently, and the conference app ran a live event on Azure. Conference MMCA.ADC A production-deployed…"},"2231":{"u":"/platform.html","d":"The MMCA Platform","k":"Site","t":"From one graph, laptop to cloud","x":"Orchestrated locally with .NET Aspire, then deployed to Azure Container Apps from the same declarative model. The .NET Aspire dashboard: services, databases, and the broker as…"},"2232":{"u":"/platform.html","d":"The MMCA Platform","k":"Site","t":"Architectural styles the codebase commits to","x":"The recurring ideas every repo is built on, summarized from the onboarding primer's orientation chapter. Each is taught in full at its first concrete appearance in the reference…"},"2233":{"u":"/platform.html","d":"The MMCA Platform","k":"Site","t":"A two-axis architecture scorecard","x":"Every repo is scored against a 34-category rubric on two axes, Maturity (how complete the decision is) and Implementation (how well it is realized in code), with evidence and…"},"2234":{"u":"/platform.html","d":"The MMCA Platform","k":"Site","t":"Architecture Decision Records","x":"131 ADRs capture the context and trade-offs behind each cross-cutting pattern, so the design is teachable, not tribal knowledge. Every entry below links to the full record. 001…"},"2235":{"u":"/platform.html","d":"The MMCA Platform","k":"Site","t":"The reference library","x":"The full architecture documentation, maintained in this site's repository as its canonical home and rendered as browsable pages: every Architecture Decision Record, the…"},"2236":{"u":"/platform.html","d":"The MMCA Platform","k":"Site","t":"Use it, read it, or follow along","x":"The framework is Apache 2.0 and published to nuget.org. The fastest way in is the reference app: one module wired end to end through all five layers, with the extraction path…"},"2237":{"u":"/platform.html","d":"The MMCA Platform","k":"Site","t":"Get each deep dive by email","x":"One message per article, no digests and no other mail. Email address Subscribe"},"2238":{"u":"/writing.html","d":"Writing","k":"Site","x":"Writing Deep dives on enterprise .NET A long-form series that turns the MMCA framework's architecture decisions into teachable patterns, every claim grounded in real source. Read…"},"2239":{"u":"/writing.html","d":"Writing","k":"Site","t":"Get each deep dive by email","x":"One message per article, no digests and no other mail. Email address Subscribe"},"2240":{"u":"/speaking.html","d":"Speaking & Community","k":"Site","x":"Speaking & community Talks and giving back For more than 20 years I have been an active contributor to the Microsoft developer communities in Atlanta and South Florida: teaching,…"},"2241":{"u":"/speaking.html","d":"Speaking & Community","k":"Site","t":"Sessions and workshops","x":"Upcoming · Atlanta Developers Conference precon · October 16, 2026 Build an AI-Ready .NET App with an AI Pair: Clean Architecture, MCP, and Agentic Workflows Full-day, hands-on…"},"2242":{"u":"/speaking.html","d":"Speaking & Community","k":"Site","t":"Organizing two Atlanta conferences","x":"I help convene developers in person, giving the local community direct, no-cost access to expert content on the Microsoft platform. Lead organizer Atlanta Cloud + AI Conference…"},"2243":{"u":"/speaking.html","d":"Speaking & Community","k":"Site","t":"User groups","x":"An active participant in Atlanta's Microsoft technology user-group ecosystem, the same community network from which the conferences draw their speakers and attendees. • Atlanta…"},"2244":{"u":"/speaking.html","d":"Speaking & Community","k":"Site","t":"Open source & mentorship","x":"My MMCA framework is Apache-2.0 licensed and documented with architecture decision records, so the patterns are not just usable but teachable. I mentor developers one on one,…"},"2245":{"u":"/speaking.html","d":"Speaking & Community","k":"Site","t":"What I speak on","x":"Sessions and workshops for conferences, user groups, and teams. Clean Architecture & DDD on .NET Modular monolith → microservices The transactional outbox Database-per-service…"},"2246":{"u":"/contact.html","d":"Contact","k":"Site","x":"Contact Let's connect Happy to talk architecture, the MMCA platform, speaking at your conference or user group, or comparing notes on .NET and Azure. The fastest ways to reach…"},"2247":{"u":"/contact.html","d":"Contact","k":"Site","t":"Three places to start","x":"Open source The MMCA platform A .NET 10 framework and three reference apps, graded in the open against a 34-category rubric. See the architecture → Writing Deep dives on…"}},"dirtCount":0,"index":[["✉",{"3":{"2246":1}}],["✓",{"3":{"2226":4}}],["▸",{"3":{"2216":4}}],["↗",{"3":{"2216":1,"2228":2,"2234":1,"2236":5,"2238":1,"2244":1}}],["📚",{"3":{"1877":1,"1886":1,"1941":1,"1950":1,"1979":1,"2029":1}}],["📄",{"3":{"1793":1,"1802":1,"1846":1,"1853":1,"1877":1,"1886":1,"1899":1,"1905":1,"1950":1,"1965":1,"1972":1,"1979":1,"1985":1,"1992":1,"1998":1,"2003":1,"2029":1,"2050":1,"2061":1,"2071":1,"2088":1,"2130":1}}],["⭐",{"3":{"1787":1,"1793":1,"1802":1,"1846":1,"1853":1,"1877":1,"1886":1,"1899":1,"1905":1,"1941":1,"1950":1,"1965":1,"1972":1,"1979":1,"1985":1,"1992":1,"1998":1,"2003":1,"2029":1,"2050":1,"2061":1,"2071":1,"2088":1,"2130":1}}],["★",{"3":{"1779":8}}],["✅",{"3":{"1611":6}}],["−",{"3":{"1583":1,"1584":1,"1585":1}}],["≈",{"3":{"1537":1}}],["÷",{"3":{"1523":4,"1537":2,"1574":4,"1588":4}}],["σ",{"3":{"1523":4,"1532":1,"1533":1,"1537":4,"1574":4,"1583":1,"1584":1,"1588":4}}],["σweight",{"3":{"0":1,"1527":1,"1578":1,"1592":1}}],["≥",{"3":{"1467":1,"1709":1}}],["×4",{"3":{"1578":1,"1592":1}}],["×10",{"3":{"1527":1,"1578":1,"1592":1}}],["×",{"3":{"1456":1,"1537":5,"1583":1,"1584":1,"1585":1,"1594":2,"1678":1,"1798":2}}],["➡",{"3":{"1229":1,"1237":1,"1247":1,"1259":1,"1270":1,"1271":1,"1286":1,"1300":1,"1301":1,"1309":1,"1310":1,"1311":1,"1312":1,"1323":1,"1324":1,"1339":1,"1350":1,"1359":1,"1369":1,"1380":1,"1395":1,"1396":1,"1402":1,"1415":1,"1416":1,"1417":1,"1427":1,"1438":1}}],["⬅",{"3":{"1229":1,"1237":1,"1247":1,"1259":1,"1270":1,"1271":1,"1286":1,"1300":1,"1301":1,"1309":1,"1310":1,"1311":1,"1312":1,"1323":1,"1324":1,"1339":1,"1350":1,"1359":1,"1369":1,"1380":1,"1395":1,"1396":1,"1402":1,"1415":1,"1416":1,"1417":1,"1427":1,"1438":1}}],[">",{"0":{"1198":1},"3":{"2246":1}}],["<=",{"3":{"1532":1,"1583":1,"1588":1,"1635":1}}],["",{"1":{"961":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1},"3":{"2234":1}}],["enumerationconverter<",{"3":{"1237":1}}],["enumerationconverter",{"2":{"1230":1,"1235":1},"3":{"1198":1,"1199":2,"1203":1,"1207":1,"1230":1,"1235":1,"1237":3}}],["enumerationtests",{"3":{"964":3,"1191":1,"1199":1,"1207":4,"1237":1,"1438":1,"1496":1}}],["enumerationserializationtests",{"2":{"964":1},"3":{"964":3,"966":1,"1199":1,"1207":5,"1237":1}}],["enumerations",{"0":{"1235":1},"3":{"0":1,"964":1,"1049":1,"1051":1,"1230":1,"1286":4,"1311":2,"1436":1,"1438":1}}],["enumerationvalueconvertertests",{"2":{"964":1},"3":{"964":3,"1191":1,"1199":1,"1207":3,"1237":1,"1286":6,"1496":1}}],["enumerationvalueconverter",{"2":{"964":1},"3":{"0":1,"964":2,"965":1,"966":1,"1199":2,"1203":1,"1207":3,"1237":3,"1282":2,"1286":23}}],["enumerationjsonconverterfactory",{"2":{"964":1,"1230":1,"1235":1,"1237":1},"3":{"0":1,"964":1,"1050":1,"1198":1,"1199":5,"1203":1,"1207":1,"1230":1,"1235":1,"1237":6,"1300":1,"1311":2}}],["enumeration",{"2":{"963":1,"964":2,"966":1,"967":2,"968":1,"1049":1,"1051":1,"1052":1,"1235":2},"3":{"0":5,"166":1,"243":1,"441":1,"554":1,"626":1,"649":2,"651":1,"838":1,"853":1,"854":1,"855":1,"961":1,"963":8,"964":14,"965":5,"966":8,"967":4,"968":1,"990":1,"1049":1,"1050":1,"1051":1,"1052":1,"1198":1,"1199":10,"1203":1,"1207":4,"1212":2,"1230":2,"1231":1,"1234":1,"1235":17,"1237":71,"1271":1,"1282":2,"1286":22,"1294":2,"1300":16,"1301":2,"1311":8,"1323":4,"1324":9,"1359":3,"1396":1,"1415":4,"1433":1,"1436":17,"1438":4,"1496":1,"1498":1,"1526":1,"1632":1,"1641":2,"1662":3,"1767":1,"1770":1,"1915":1,"2079":1,"2129":1}}],["enumerator",{"3":{"1222":1,"1229":1,"1425":1,"2179":1}}],["enumerate",{"3":{"166":1,"248":1,"698":1,"773":1,"775":1,"1059":1,"1286":2,"1300":4,"1301":2,"1311":1,"1324":4,"1349":1,"1369":1,"1380":1,"1396":2,"1407":1,"1408":2,"1415":2,"1417":1,"1427":3,"1429":1,"1436":5,"1534":1,"1589":1,"1591":1,"1596":1,"1916":1}}],["enumerated",{"3":{"0":1,"171":1,"184":1,"186":1,"200":1,"526":1,"532":1,"618":1,"837":1,"899":1,"1018":1,"1033":1,"1036":1,"1212":1,"1237":1,"1270":1,"1300":1,"1301":1,"1309":1,"1311":1,"1323":1,"1324":3,"1339":2,"1344":1,"1359":3,"1396":1,"1436":3,"1454":1,"1492":1}}],["enumeratesourcefiles",{"3":{"1436":1}}],["enumerates",{"3":{"0":3,"184":1,"189":1,"243":2,"526":1,"585":2,"626":1,"640":1,"699":1,"765":1,"766":1,"770":1,"990":1,"1259":1,"1271":1,"1286":2,"1300":2,"1301":1,"1311":1,"1324":6,"1339":1,"1396":5,"1413":1,"1415":2,"1417":1,"1427":1,"1436":15,"1447":1,"1455":1,"1686":1,"1851":1,"1962":1,"2202":1}}],["enums",{"1":{"961":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1},"3":{"0":2,"782":1,"961":1,"963":2,"964":1,"1203":1,"1207":2,"1212":1,"1230":1,"1233":1,"1235":1,"1236":1,"1237":2,"1286":1,"1324":2,"1342":1,"1350":2,"1351":1,"1359":4,"1369":1,"1380":1,"1395":1,"1396":6,"1402":1,"1436":3,"1438":1,"1489":1,"1496":1,"1662":3,"2045":1,"2234":1}}],["enum",{"1":{"961":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1,"1172":1,"1173":1,"1174":1,"1175":1,"1176":1,"1177":1,"1178":1,"1179":1,"1180":1},"3":{"0":6,"110":1,"136":1,"142":1,"150":1,"164":1,"166":1,"454":2,"682":1,"691":2,"692":1,"717":1,"782":2,"783":2,"784":2,"961":1,"963":4,"964":6,"965":3,"966":1,"968":1,"1034":1,"1049":1,"1051":1,"1089":1,"1091":1,"1094":1,"1172":1,"1174":2,"1175":3,"1176":1,"1177":1,"1178":1,"1203":42,"1205":1,"1207":47,"1212":4,"1217":1,"1219":1,"1225":1,"1229":7,"1230":1,"1233":1,"1235":1,"1236":1,"1237":11,"1247":2,"1259":1,"1270":6,"1280":1,"1282":1,"1285":1,"1286":32,"1300":16,"1309":12,"1310":3,"1311":6,"1312":1,"1320":2,"1323":8,"1324":29,"1339":10,"1341":2,"1342":2,"1344":2,"1349":1,"1350":23,"1353":1,"1359":34,"1369":13,"1380":8,"1384":1,"1390":1,"1393":2,"1394":1,"1395":20,"1396":58,"1402":18,"1410":1,"1415":7,"1417":1,"1422":1,"1427":6,"1430":1,"1431":1,"1436":41,"1438":2,"1496":2,"1538":1,"1631":1,"1650":1,"1686":3,"1727":1,"1749":1,"1766":1,"1805":3,"1807":1,"1856":2,"1930":2,"1932":1,"2045":1,"2199":2,"2234":2}}],["entonces",{"3":{"1436":1}}],["entangled",{"3":{"1436":1}}],["entail",{"3":{"85":1,"264":1}}],["enterprise",{"0":{"2217":1},"1":{"1780":1,"1781":1,"1782":1,"1783":1,"1784":1,"1785":1,"1786":1,"1787":1},"3":{"696":1,"705":1,"713":1,"723":1,"739":1,"1011":1,"1213":1,"1332":1,"1339":3,"1438":2,"1443":1,"1496":1,"1536":2,"1780":2,"2207":1,"2214":1,"2216":1,"2218":1,"2222":2,"2223":1,"2228":1,"2238":1,"2241":1,"2247":1}}],["entering",{"3":{"498":1,"501":1,"1317":1,"1323":1,"1339":1,"1395":4,"1396":1,"1436":2}}],["enter",{"3":{"237":1,"507":1,"513":1,"725":1,"1247":1,"1271":4,"1286":1,"1324":5,"1339":1,"1359":11,"1380":1,"1395":1,"1417":1,"1438":2,"1453":1,"1460":1,"1467":1,"1496":1,"1669":1,"1980":1,"2037":1,"2086":1}}],["entered",{"3":{"139":1,"265":1,"333":1,"512":1,"1271":1,"1320":1,"1323":1,"1350":2,"1353":1,"1359":4,"1395":9,"1412":1,"1415":2,"1417":4,"1444":1,"1631":1,"1641":1,"1765":1}}],["enters",{"3":{"27":1,"235":1,"292":1,"427":1,"545":1,"564":1,"758":1,"1012":1,"1237":1,"1247":1,"1286":3,"1323":1,"1324":2,"1350":3,"1359":5,"1380":1,"1396":2,"1417":1,"1436":3,"1455":2,"2169":1,"2175":1}}],["entropy",{"3":{"907":1,"1300":1,"1311":1}}],["entrancy",{"3":{"1286":2,"1324":3,"1417":1}}],["entrance",{"3":{"657":2,"658":1}}],["entrant",{"3":{"0":1,"988":2,"989":1,"991":1,"1212":1,"1263":1,"1270":1,"1278":1,"1324":1,"1664":1,"1840":1}}],["entra",{"3":{"0":1,"599":2,"600":2,"1455":1,"1467":7,"1477":4}}],["entries",{"2":{"1231":1,"1233":1},"3":{"0":1,"17":4,"19":1,"122":1,"135":1,"137":1,"139":1,"142":3,"145":2,"147":1,"150":1,"166":2,"186":1,"219":1,"245":1,"330":2,"337":1,"372":1,"388":1,"390":1,"395":2,"407":1,"418":1,"423":2,"424":1,"429":1,"497":1,"511":1,"543":2,"585":1,"599":1,"611":1,"624":2,"626":2,"633":4,"669":3,"690":2,"692":2,"698":1,"715":1,"725":1,"733":2,"734":1,"735":1,"737":1,"740":1,"777":1,"819":1,"827":1,"829":1,"839":1,"841":1,"881":1,"896":1,"972":1,"996":1,"998":1,"1006":1,"1007":2,"1018":1,"1073":1,"1074":3,"1075":1,"1078":1,"1116":1,"1161":1,"1225":1,"1231":1,"1233":1,"1237":5,"1241":4,"1242":1,"1247":5,"1259":6,"1267":1,"1270":6,"1271":1,"1273":1,"1274":1,"1276":1,"1278":2,"1280":3,"1285":1,"1286":34,"1300":9,"1301":12,"1310":1,"1311":6,"1312":1,"1320":1,"1323":5,"1324":22,"1339":7,"1350":1,"1351":1,"1359":5,"1369":1,"1380":8,"1394":1,"1395":7,"1396":33,"1415":8,"1417":7,"1427":1,"1436":57,"1438":1,"1443":2,"1447":1,"1456":1,"1463":1,"1467":9,"1490":1,"1492":1,"1496":1,"1599":1,"1631":2,"1650":1,"1651":2,"1652":1,"1661":1,"1701":2,"1708":1,"1727":2,"1731":1,"1774":1,"1851":1,"1898":1,"1912":1,"1916":1,"1918":1,"1920":2,"1922":1,"1924":1,"1927":2,"1988":1,"2002":1,"2034":1,"2067":1,"2087":1,"2099":1,"2105":3,"2113":1,"2114":1,"2152":1,"2167":1}}],["entrypagesize",{"3":{"1396":1}}],["entrypoint",{"2":{"869":1},"3":{"0":1,"869":1,"870":1,"873":1,"1445":5}}],["entry",{"0":{"1377":1,"1421":1},"3":{"0":12,"27":1,"41":1,"59":2,"60":1,"71":1,"73":1,"74":1,"96":1,"121":1,"122":3,"123":1,"130":1,"135":4,"136":3,"137":3,"138":3,"139":5,"140":8,"141":4,"142":6,"145":5,"147":3,"149":1,"157":2,"166":7,"170":3,"171":1,"177":1,"186":2,"200":2,"201":5,"219":2,"243":2,"245":1,"248":4,"249":2,"251":1,"252":3,"254":5,"256":5,"257":4,"258":7,"259":4,"261":1,"265":2,"286":2,"298":1,"301":1,"303":2,"333":1,"335":2,"341":1,"349":1,"359":3,"362":1,"365":1,"366":1,"370":1,"372":1,"386":1,"395":2,"404":1,"408":1,"418":1,"423":4,"424":1,"425":5,"426":4,"427":1,"428":6,"436":1,"443":3,"461":1,"474":1,"478":2,"483":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"499":1,"507":1,"511":1,"543":2,"549":4,"551":2,"558":1,"572":1,"577":1,"585":1,"599":6,"600":1,"607":2,"609":1,"633":3,"636":1,"649":2,"657":1,"668":1,"676":1,"680":1,"698":4,"709":2,"710":1,"720":1,"725":1,"731":1,"732":1,"733":2,"735":1,"740":2,"742":1,"774":1,"776":2,"782":1,"790":1,"792":2,"794":1,"798":1,"821":1,"825":1,"826":1,"830":1,"832":1,"834":1,"838":2,"840":2,"861":2,"881":2,"899":1,"905":2,"909":1,"914":1,"937":1,"941":2,"972":2,"980":1,"988":1,"995":1,"996":2,"997":1,"1018":6,"1019":1,"1034":2,"1036":1,"1059":1,"1065":1,"1067":1,"1069":1,"1070":1,"1073":1,"1074":1,"1082":1,"1116":4,"1133":2,"1135":1,"1136":1,"1160":2,"1161":4,"1162":2,"1163":4,"1173":1,"1175":2,"1179":1,"1192":1,"1199":9,"1203":1,"1207":1,"1212":2,"1223":1,"1229":2,"1231":1,"1237":14,"1241":2,"1242":2,"1247":24,"1259":7,"1262":2,"1263":3,"1264":1,"1265":1,"1267":3,"1270":24,"1271":1,"1273":1,"1274":1,"1276":2,"1279":3,"1280":1,"1284":1,"1285":1,"1286":110,"1298":1,"1300":36,"1301":40,"1304":1,"1307":1,"1309":6,"1310":1,"1311":20,"1312":2,"1316":1,"1320":2,"1323":23,"1324":79,"1326":1,"1332":2,"1338":2,"1339":24,"1347":1,"1350":9,"1356":1,"1357":1,"1359":42,"1369":1,"1370":2,"1373":1,"1375":1,"1379":2,"1380":17,"1389":1,"1392":1,"1395":26,"1396":63,"1402":1,"1408":1,"1414":2,"1415":20,"1416":18,"1417":33,"1418":1,"1422":1,"1425":1,"1427":6,"1429":1,"1432":1,"1434":1,"1436":140,"1437":1,"1438":12,"1441":3,"1443":2,"1447":3,"1449":2,"1454":1,"1455":1,"1456":1,"1460":2,"1464":1,"1465":1,"1467":16,"1474":2,"1480":1,"1488":2,"1489":2,"1490":4,"1492":1,"1507":2,"1526":3,"1561":1,"1577":1,"1585":1,"1589":1,"1591":1,"1596":1,"1599":2,"1627":1,"1631":5,"1637":1,"1640":1,"1641":2,"1648":1,"1651":3,"1652":1,"1653":3,"1655":2,"1662":1,"1673":1,"1675":1,"1684":2,"1685":4,"1686":3,"1687":1,"1693":1,"1702":2,"1703":1,"1708":4,"1719":1,"1722":1,"1727":2,"1728":1,"1729":1,"1737":1,"1746":1,"1747":5,"1748":17,"1749":13,"1778":1,"1790":2,"1821":2,"1849":1,"1851":2,"1856":1,"1871":2,"1898":2,"1903":1,"1904":1,"1905":2,"1908":1,"1909":3,"1912":1,"1915":1,"1916":2,"1917":1,"1918":2,"1920":2,"1922":4,"1923":1,"1930":1,"1933":1,"1934":1,"1962":1,"1974":1,"1989":1,"2009":1,"2024":2,"2034":2,"2044":2,"2071":2,"2085":1,"2087":1,"2098":1,"2114":1,"2123":2,"2140":1,"2144":2,"2152":2,"2160":1,"2174":1,"2230":1,"2234":2}}],["entire",{"3":{"0":1,"47":1,"556":1,"557":1,"564":1,"640":1,"756":1,"759":1,"798":1,"906":1,"926":1,"979":1,"990":1,"1212":1,"1247":1,"1259":2,"1263":1,"1270":7,"1271":1,"1286":3,"1300":4,"1301":2,"1309":4,"1310":2,"1311":5,"1323":6,"1324":8,"1339":4,"1348":1,"1350":6,"1359":26,"1380":2,"1382":1,"1395":9,"1396":6,"1402":2,"1415":5,"1416":5,"1417":11,"1427":2,"1436":14,"1441":1,"1454":1,"1467":3,"1472":1,"1482":1,"1560":1,"1638":1,"1683":1,"1767":1,"1799":1,"1810":1,"1815":1,"1829":2,"1831":1,"1893":1,"1897":1,"1909":1,"1918":1,"1922":1,"1938":1,"1942":1,"2006":1,"2035":1,"2037":1,"2074":1,"2133":1,"2137":1,"2191":1}}],["entirely",{"3":{"0":3,"27":1,"32":1,"70":1,"109":1,"121":1,"126":1,"136":1,"137":1,"243":1,"244":1,"259":1,"295":1,"320":1,"349":1,"361":1,"388":1,"391":1,"427":1,"443":1,"464":1,"508":1,"527":1,"536":1,"556":1,"560":1,"564":1,"607":1,"657":1,"684":1,"724":1,"757":1,"789":1,"790":1,"799":1,"915":1,"926":1,"935":1,"988":1,"1118":1,"1170":1,"1229":2,"1237":1,"1241":1,"1245":1,"1247":4,"1256":1,"1259":4,"1266":1,"1270":7,"1271":2,"1274":1,"1279":1,"1281":1,"1286":14,"1300":13,"1301":4,"1309":3,"1311":6,"1312":2,"1314":1,"1320":2,"1323":4,"1324":13,"1331":1,"1336":1,"1339":8,"1340":1,"1342":2,"1350":2,"1359":21,"1368":1,"1369":2,"1379":1,"1380":2,"1383":1,"1392":1,"1393":1,"1395":11,"1396":13,"1400":1,"1401":1,"1402":7,"1415":9,"1417":12,"1427":2,"1430":1,"1436":23,"1438":3,"1446":1,"1447":1,"1449":1,"1454":1,"1455":3,"1456":1,"1459":1,"1465":2,"1467":3,"1478":1,"1488":1,"1490":1,"1496":2,"1504":1,"1562":1,"1577":1,"1631":1,"1651":1,"1683":1,"1720":1,"1727":1,"1765":1,"1777":1,"1781":1,"1849":1,"1858":1,"1859":1,"1872":1,"1884":1,"1916":1,"1921":1,"1922":1,"1923":1,"1986":1,"1988":1,"1997":1,"2001":1,"2014":1,"2030":1,"2031":2,"2032":1,"2045":1,"2048":1,"2055":1,"2078":1,"2120":1,"2123":1,"2147":1,"2163":1,"2166":1,"2168":1}}],["entitling",{"3":{"1764":1,"1765":1}}],["entitlements",{"3":{"418":1,"422":2,"425":1,"426":1,"1436":2,"1481":1,"1748":1,"1749":1,"1765":2,"1769":1}}],["entitlement",{"3":{"418":1,"420":1,"422":1,"1286":1,"1307":2,"1309":1,"1416":2,"1417":2,"1436":1,"1748":1,"1764":3,"1765":6,"1767":2,"1945":1}}],["entitled",{"3":{"0":1,"1247":1,"1309":2,"1323":1,"1359":7,"1396":3,"1759":1,"1764":1,"1945":1}}],["entitieswithtenantid",{"3":{"1436":1}}],["entitieswithpiiproperties",{"3":{"1436":3,"1489":1}}],["entitieswithpiiimplementanonymizable",{"2":{"725":1},"3":{"39":1,"725":1,"1237":1,"1436":1,"1496":1}}],["entities",{"0":{"1361":1,"1386":1,"1764":1},"1":{"1230":1,"1231":1,"1232":1,"1233":1,"1234":1,"1235":1,"1236":1,"1237":1},"3":{"0":1,"4":1,"5":1,"11":1,"12":1,"13":1,"21":1,"39":2,"43":1,"47":1,"132":1,"164":1,"166":1,"329":1,"331":2,"341":2,"360":1,"439":1,"469":1,"470":2,"536":1,"549":1,"642":1,"657":2,"698":1,"715":1,"799":1,"881":1,"988":1,"1018":1,"1049":1,"1082":1,"1085":1,"1117":1,"1132":1,"1140":1,"1150":2,"1168":17,"1169":1,"1170":3,"1171":1,"1202":1,"1203":4,"1207":43,"1212":3,"1229":1,"1230":2,"1231":3,"1232":1,"1236":1,"1237":28,"1244":1,"1247":7,"1249":1,"1259":3,"1269":1,"1270":1,"1277":1,"1278":3,"1279":1,"1282":2,"1286":57,"1300":1,"1309":5,"1310":12,"1311":9,"1317":1,"1323":2,"1324":2,"1340":1,"1342":2,"1343":1,"1347":1,"1350":15,"1353":1,"1359":45,"1360":1,"1361":2,"1363":1,"1369":5,"1374":1,"1380":3,"1382":1,"1395":4,"1396":7,"1402":3,"1431":3,"1436":27,"1437":4,"1441":1,"1446":1,"1467":3,"1489":3,"1496":2,"1526":2,"1539":1,"1540":1,"1541":3,"1546":2,"1577":1,"1627":1,"1629":1,"1630":12,"1631":8,"1632":11,"1633":1,"1635":2,"1636":2,"1637":1,"1638":11,"1639":17,"1640":8,"1650":1,"1651":1,"1652":1,"1686":1,"1728":1,"1729":1,"1772":1,"1810":1,"1812":1,"1840":2,"1844":1,"1849":1,"1853":1,"1856":1,"1863":1,"1864":1,"1865":1,"1867":1,"1939":1,"1987":3,"1988":1,"1992":1,"2062":1,"2106":1,"2229":2,"2232":2}}],["entitypropertysettersarenonpublic",{"3":{"1436":1}}],["entitypath",{"3":{"1247":1}}],["entityquotasapplied",{"3":{"1323":2}}],["entityqueryparameterstests",{"3":{"1199":1,"1207":3}}],["entityqueryparameters",{"2":{"333":1,"1243":1,"1244":1,"1245":1,"1815":1},"3":{"333":1,"1199":12,"1203":1,"1207":2,"1243":4,"1244":1,"1245":1,"1247":20,"1359":1,"1496":2,"1815":1}}],["entityquerypipelinetests",{"3":{"1199":1,"1207":3}}],["entityquerypipelineorderingtests",{"3":{"1199":1,"1207":3,"1436":1,"1438":2}}],["entityquerypipeline",{"2":{"330":2,"333":1,"337":1,"740":1,"1245":1,"1310":1,"1817":1,"1988":1,"1992":1},"3":{"330":9,"331":1,"332":1,"333":2,"337":3,"549":3,"552":2,"740":2,"741":1,"744":1,"1199":9,"1203":1,"1207":2,"1229":2,"1243":42,"1245":1,"1247":19,"1262":1,"1278":2,"1286":8,"1310":17,"1311":5,"1496":2,"1577":1,"1815":1,"1817":1,"1988":3,"1992":1}}],["entityqueryservicetests",{"3":{"1199":1,"1207":7,"1247":1,"1436":1,"1586":1}}],["entityqueryservicecontracttests",{"3":{"1199":1,"1207":5}}],["entityqueryserviceresolutiontests",{"3":{"1199":1,"1207":6,"1247":1,"1438":1}}],["entityqueryserviceprojectiontests",{"3":{"1199":1,"1207":6,"1247":1,"1438":1}}],["entityqueryservice",{"2":{"333":2,"337":1,"543":1,"552":1,"1269":1,"1498":1,"1817":1,"1992":1},"3":{"331":5,"332":1,"333":3,"336":3,"337":1,"543":1,"545":4,"549":2,"552":1,"1199":16,"1203":1,"1207":2,"1229":5,"1244":49,"1247":24,"1269":1,"1270":5,"1286":4,"1309":11,"1310":8,"1311":2,"1354":1,"1359":37,"1396":4,"1436":4,"1438":2,"1496":2,"1498":1,"1586":1,"1815":2,"1817":1,"1988":1,"1992":1}}],["entityname",{"3":{"1286":3,"1311":2,"1324":2,"1395":4}}],["entitytenantid",{"3":{"1286":3}}],["entitytypeof",{"3":{"1436":2}}],["entitytypename",{"3":{"1286":1}}],["entitytypeextensionstests",{"3":{"1199":1,"1207":4,"1237":2}}],["entitytypeextensions",{"2":{"980":1,"1214":1,"1230":1,"1236":1,"1237":1},"3":{"980":3,"1199":1,"1203":1,"1207":2,"1208":1,"1214":1,"1230":1,"1236":2,"1237":9,"1282":1,"1286":2,"1350":6}}],["entitytype",{"3":{"715":3,"980":1,"1208":1,"1237":2,"1270":2,"1286":15,"1323":1,"1436":1}}],["entitytypebuilder",{"2":{"658":1,"660":1,"1036":1},"3":{"658":1,"660":1,"1036":1,"1286":13,"1369":3,"1396":10,"1415":1}}],["entitytypebuilderextensions",{"2":{"655":1},"3":{"655":1,"657":2,"658":1,"1199":1,"1203":1,"1207":2,"1237":4,"1282":2,"1286":12,"1496":1}}],["entitytypeconfigurationbasetests",{"3":{"1199":1,"1207":8,"1286":1}}],["entitytypeconfigurationbase",{"2":{"1856":1},"3":{"1199":4,"1203":1,"1207":2,"1212":1,"1282":2,"1286":15,"1369":2,"1856":1}}],["entitytypeconfigurationsqlite",{"2":{"166":1,"1282":1,"1722":1,"1727":1,"1856":1},"3":{"166":1,"1199":12,"1203":1,"1207":2,"1282":2,"1286":6,"1722":1,"1727":1,"1856":1}}],["entitytypeconfigurationsqlserver",{"2":{"166":1,"470":1,"1212":1,"1282":1,"1361":1,"1412":1,"1651":1,"1849":1,"1856":1,"1857":1,"1860":1},"3":{"166":1,"470":1,"1199":39,"1203":1,"1207":2,"1212":1,"1282":2,"1286":12,"1323":1,"1359":1,"1361":2,"1369":25,"1396":12,"1412":1,"1415":2,"1651":1,"1849":1,"1856":1,"1857":1,"1860":1,"1862":1}}],["entitytypeconfigurationcosmos",{"2":{"166":1,"1282":1,"1856":1,"1857":1},"3":{"166":1,"1199":1,"1203":1,"1207":2,"1282":2,"1286":10,"1856":1,"1857":1}}],["entitytypeconfigurationtests",{"2":{"164":1},"3":{"164":1,"1199":1,"1207":5,"1286":2}}],["entitytypeconfiguration",{"2":{"1176":1,"1178":1,"1280":1,"1286":1,"1361":1,"1500":1,"1856":1,"1857":1,"1862":1},"3":{"135":1,"164":2,"166":1,"171":1,"231":1,"889":1,"1004":2,"1007":1,"1034":1,"1175":2,"1176":1,"1178":1,"1199":6,"1203":14,"1207":28,"1212":1,"1237":2,"1280":1,"1282":7,"1286":81,"1300":3,"1304":1,"1309":2,"1323":1,"1361":2,"1369":3,"1436":2,"1496":1,"1500":2,"1577":3,"1856":1,"1857":1,"1862":1}}],["entitytypeconfigurationpostgresql",{"2":{"166":1,"1034":1,"1036":1,"1212":1,"1282":1,"1856":1},"3":{"0":1,"166":1,"1034":3,"1036":1,"1199":4,"1203":1,"1207":2,"1212":1,"1282":2,"1286":5,"1496":1,"1856":1}}],["entityfilter",{"3":{"1286":2}}],["entityframeworkqueryableextensions",{"3":{"1286":2}}],["entityframeworkcore",{"2":{"401":1,"633":1,"1034":1,"1035":1,"1036":1,"1213":1,"1311":1,"1369":2,"1436":2,"1685":1,"1686":1,"1722":1,"1727":1,"1728":1,"1815":1,"1865":1,"2044":1,"2107":1},"3":{"0":1,"401":1,"633":1,"1034":1,"1035":1,"1036":1,"1213":1,"1286":15,"1310":2,"1311":2,"1323":1,"1339":1,"1369":20,"1436":9,"1489":2,"1685":1,"1686":2,"1722":1,"1727":1,"1728":1,"1815":1,"1865":2,"2044":1,"2107":1}}],["entityfullname",{"3":{"1286":3}}],["entityentry",{"3":{"1259":2,"1286":7}}],["entityexportauthorizationtests",{"3":{"1199":1,"1207":2,"1380":3,"1437":1,"1438":2,"1487":1}}],["entitymodel",{"2":{"1436":1},"3":{"1207":8,"1436":9,"1577":2,"1582":2}}],["entityhandlerbasetests",{"3":{"1207":18}}],["entitywithoutgeneratedid",{"3":{"1199":2,"1207":1}}],["entitywithgeneratedid",{"3":{"1199":2,"1207":1}}],["entitywithnavigation",{"3":{"1199":2,"1207":1}}],["entitybuilderbase",{"3":{"1199":9,"1207":2,"1428":1,"1429":2,"1436":8,"1488":2,"1671":1}}],["entitysettypenames",{"3":{"1436":1}}],["entityservicebasecachingtests",{"3":{"1199":1,"1207":5,"1324":1}}],["entityservicebasetests",{"2":{"883":1},"3":{"883":1,"1199":1,"1207":5,"1324":1}}],["entityservicebaseidempotencyretrytests",{"3":{"881":1,"1199":1,"1207":5,"1324":1,"1438":2}}],["entityservicebase",{"2":{"258":1,"259":1,"341":1,"833":1,"879":1,"881":1,"884":1,"1227":1,"1382":1,"1669":1,"2076":1,"2082":1},"3":{"0":2,"243":4,"245":1,"258":3,"259":2,"261":2,"341":2,"345":1,"827":2,"833":1,"879":1,"881":10,"884":2,"1199":13,"1203":1,"1207":2,"1212":1,"1227":2,"1229":1,"1300":7,"1311":4,"1324":43,"1350":1,"1380":1,"1382":1,"1395":46,"1396":1,"1438":1,"1526":1,"1577":1,"1591":1,"1653":1,"1668":1,"1669":1,"2076":2,"2082":1}}],["entitystate",{"2":{"1082":1},"3":{"1082":1,"1259":1,"1286":1}}],["entityid",{"3":{"782":1,"1249":1,"1259":2,"1265":1,"1270":5,"1350":5,"1359":24,"1399":1,"1402":4,"1415":2,"1631":1,"1638":1,"1640":1}}],["entitykey",{"3":{"715":3,"1270":2,"1286":7,"1323":1}}],["entitydatasourceregistrytests",{"3":{"1199":1,"1207":14,"1286":10}}],["entitydatasourceregistry",{"2":{"46":1,"166":1,"171":1,"1033":1,"1279":1,"1284":1,"1321":1,"1361":1,"1790":1,"1849":1,"1853":1,"1857":1},"3":{"46":1,"166":2,"171":2,"1004":1,"1033":1,"1199":9,"1203":1,"1207":3,"1212":1,"1279":3,"1284":1,"1286":64,"1300":2,"1321":1,"1323":4,"1326":1,"1339":1,"1361":1,"1438":1,"1790":1,"1849":1,"1853":1,"1857":1}}],["entitycollection",{"3":{"1309":1,"1311":2,"1359":6,"1396":2,"1415":1}}],["entityconventiontests",{"3":{"1168":2,"1199":2,"1207":4,"1436":10,"1489":1,"1526":1,"1535":1,"1577":1,"1582":1}}],["entityconventiontestsbase",{"2":{"1168":1},"3":{"0":1,"1168":4,"1199":3,"1207":2,"1212":1,"1436":8,"1489":1,"1526":1,"1582":1,"1654":1,"1810":1}}],["entityconfigurationinterface",{"3":{"1286":2}}],["entityconfigurationoptionstests",{"3":{"1199":1,"1207":2}}],["entityconfigurationoptions",{"3":{"1199":7,"1203":1,"1207":2,"1282":2,"1286":8}}],["entityconfiguration",{"3":{"470":1,"536":1,"657":3,"658":1,"690":3,"693":2,"889":1,"1004":2,"1026":1,"1082":2,"1116":1,"1203":30,"1207":60,"1212":1,"1237":3,"1286":16,"1350":9,"1359":13,"1361":2,"1369":44,"1396":31,"1398":2,"1401":1,"1402":1,"1412":1,"1415":3,"1436":1,"1685":1,"1686":1,"1854":1,"1856":1}}],["entitycontrollerbasetests",{"3":{"1199":1,"1207":5,"1311":1}}],["entitycontrollerbasereadspecificationtests",{"2":{"1438":1},"3":{"1199":1,"1207":9,"1311":2,"1438":2}}],["entitycontrollerbaseexporttests",{"3":{"1199":1,"1207":12,"1311":2,"1438":2}}],["entitycontrollerbaseexportcolumntests",{"3":{"1199":1,"1207":1}}],["entitycontrollerbaseetagtests",{"3":{"1199":1,"1207":8,"1311":1,"1438":2}}],["entitycontrollerbase",{"2":{"325":1,"337":1,"341":1,"345":1,"739":1,"744":1,"1049":1,"1245":1,"1702":1,"1730":1,"1992":1,"1996":1},"3":{"0":2,"318":1,"325":1,"330":15,"331":1,"332":1,"334":1,"337":2,"341":2,"345":1,"453":1,"455":1,"674":2,"739":1,"740":3,"741":10,"743":2,"744":2,"1049":2,"1055":1,"1199":31,"1203":1,"1207":2,"1212":2,"1229":5,"1245":7,"1247":1,"1300":4,"1311":44,"1323":3,"1359":8,"1371":1,"1372":4,"1380":40,"1436":1,"1438":1,"1496":3,"1575":1,"1577":3,"1582":1,"1586":1,"1651":1,"1666":1,"1702":1,"1730":1,"1874":1,"1927":1,"1988":1,"1992":1,"1996":8}}],["entitycsvexportertests",{"3":{"1199":1,"1207":3,"1311":2,"1438":1}}],["entitycsvexporter",{"2":{"744":1},"3":{"741":13,"743":3,"744":4,"1199":3,"1203":1,"1207":2,"1229":1,"1311":24,"1496":1}}],["entitychangedeventtests",{"3":{"782":1,"1199":1,"1207":4}}],["entitychangedevent",{"2":{"780":1,"784":1,"1249":1,"1340":1,"1345":1,"1665":1},"3":{"0":1,"780":1,"782":6,"784":1,"964":1,"1199":12,"1203":1,"1207":2,"1212":1,"1237":5,"1249":3,"1259":10,"1340":1,"1345":1,"1350":31,"1651":1,"1665":1,"1769":1}}],["entity",{"0":{"1231":1,"1243":1,"1279":1,"1282":1,"1362":1,"1857":1},"1":{"327":1,"328":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"779":1,"780":1,"781":1,"782":1,"783":1,"784":1,"785":1,"786":1,"878":1,"879":1,"880":1,"881":1,"882":1,"883":1,"884":1,"885":1,"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":1,"1238":1,"1239":1,"1240":1,"1241":1,"1242":1,"1243":1,"1244":1,"1245":1,"1246":1,"1247":1,"1854":1,"1855":1,"1856":1,"1857":1,"1858":1,"1859":1,"1860":1,"1861":1,"1862":1,"1986":1,"1987":1,"1988":1,"1989":1,"1990":1,"1991":1,"1992":1},"2":{"697":1,"715":1,"781":1,"923":1,"1048":1,"1232":1,"1273":1,"1867":1,"1955":1,"2165":1},"3":{"0":26,"3":1,"5":2,"7":1,"11":1,"12":1,"39":4,"41":2,"42":1,"81":2,"108":1,"109":1,"117":1,"122":1,"128":1,"145":1,"150":1,"164":1,"165":1,"166":6,"167":1,"168":2,"170":1,"193":1,"265":5,"268":1,"321":1,"327":1,"328":1,"329":5,"330":3,"331":2,"332":3,"333":3,"335":2,"340":1,"341":8,"343":1,"345":1,"346":1,"358":1,"359":2,"361":2,"365":2,"440":1,"455":1,"460":1,"469":4,"470":5,"471":2,"472":1,"473":2,"477":1,"536":1,"544":1,"545":5,"551":1,"642":1,"649":2,"658":1,"697":3,"698":4,"699":1,"700":2,"707":1,"713":1,"714":1,"715":5,"716":2,"717":3,"718":2,"720":1,"725":1,"740":1,"741":1,"745":1,"779":1,"781":4,"782":7,"783":3,"784":3,"798":2,"799":1,"853":1,"878":1,"879":1,"880":2,"881":5,"882":1,"883":1,"889":4,"890":1,"891":4,"899":1,"905":7,"906":1,"919":1,"920":1,"922":2,"923":1,"926":3,"932":1,"935":1,"971":1,"988":1,"1026":1,"1033":1,"1034":4,"1035":2,"1042":1,"1048":2,"1049":1,"1050":2,"1052":1,"1060":1,"1074":1,"1083":1,"1115":1,"1117":1,"1134":1,"1140":1,"1150":4,"1151":1,"1152":3,"1153":1,"1154":1,"1155":2,"1167":4,"1168":4,"1169":1,"1170":2,"1175":1,"1191":1,"1192":3,"1193":1,"1200":1,"1201":1,"1202":4,"1203":4,"1212":24,"1213":1,"1218":1,"1229":3,"1230":3,"1231":8,"1232":6,"1233":1,"1234":2,"1236":3,"1237":76,"1238":5,"1239":3,"1241":4,"1242":5,"1243":8,"1244":5,"1245":2,"1247":79,"1251":1,"1259":13,"1260":1,"1265":2,"1269":4,"1270":40,"1271":3,"1272":2,"1273":3,"1274":2,"1276":3,"1277":3,"1278":1,"1279":5,"1280":2,"1281":6,"1282":5,"1283":1,"1284":1,"1286":271,"1291":1,"1300":14,"1309":19,"1310":35,"1311":45,"1316":2,"1317":1,"1319":1,"1321":5,"1323":30,"1324":41,"1327":1,"1339":4,"1340":1,"1342":1,"1347":2,"1349":2,"1350":109,"1354":3,"1355":1,"1356":1,"1358":6,"1359":321,"1360":1,"1361":5,"1362":3,"1363":3,"1369":44,"1371":2,"1374":1,"1380":18,"1381":1,"1382":1,"1383":1,"1384":1,"1387":2,"1391":1,"1395":62,"1396":59,"1401":2,"1402":22,"1403":1,"1409":1,"1415":20,"1429":2,"1431":1,"1436":95,"1437":1,"1438":6,"1440":1,"1455":3,"1467":3,"1487":2,"1488":2,"1489":5,"1496":6,"1497":1,"1500":1,"1506":1,"1510":1,"1526":3,"1535":1,"1577":9,"1591":2,"1625":1,"1627":2,"1630":8,"1631":15,"1632":5,"1633":5,"1634":8,"1635":3,"1637":4,"1638":10,"1639":30,"1640":11,"1641":15,"1649":2,"1650":1,"1651":3,"1652":1,"1653":1,"1654":1,"1660":3,"1662":4,"1664":3,"1668":1,"1671":1,"1684":1,"1686":4,"1700":1,"1704":1,"1720":2,"1723":1,"1724":1,"1727":6,"1728":2,"1729":1,"1734":1,"1747":2,"1764":1,"1765":2,"1767":1,"1769":1,"1774":2,"1775":1,"1779":1,"1783":1,"1790":2,"1803":1,"1808":1,"1810":10,"1811":2,"1812":1,"1815":8,"1816":1,"1817":4,"1824":1,"1832":1,"1833":1,"1839":3,"1847":1,"1849":12,"1850":1,"1851":5,"1853":2,"1854":8,"1855":3,"1856":7,"1857":1,"1858":3,"1859":1,"1860":3,"1861":5,"1862":5,"1865":6,"1866":1,"1867":3,"1868":2,"1869":1,"1871":4,"1872":1,"1875":1,"1876":1,"1877":2,"1883":1,"1903":1,"1908":1,"1948":1,"1951":1,"1953":6,"1954":4,"1955":7,"1956":2,"1957":1,"1958":1,"1959":2,"1985":2,"1986":4,"1987":2,"1988":4,"1991":5,"1992":6,"2040":1,"2053":1,"2054":2,"2060":1,"2064":3,"2065":1,"2070":1,"2076":1,"2092":1,"2101":1,"2106":1,"2112":1,"2128":1,"2144":2,"2147":1,"2165":1,"2166":1,"2188":1,"2209":1,"2210":1,"2222":1,"2232":5,"2234":12}}],["endian",{"3":{"1479":1}}],["endipaddress",{"3":{"1467":1}}],["endings",{"3":{"1091":1,"1300":1,"1324":1,"1426":1,"1427":1,"1436":1,"1438":1,"2178":1,"2182":1}}],["ending",{"3":{"0":4,"53":1,"905":2,"1168":1,"1300":3,"1311":1,"1323":1,"1324":1,"1333":1,"1359":3,"1369":1,"1425":1,"1436":6,"1438":1,"1631":1,"1989":1,"2011":1,"2159":1}}],["endless",{"3":{"1395":1}}],["endlocal",{"3":{"1350":1}}],["endexclusiveutc",{"3":{"1350":1}}],["endedit",{"3":{"1324":2,"1384":1,"1395":22}}],["endedly",{"3":{"0":1,"468":1}}],["ended",{"3":{"0":1,"499":1,"797":1,"1012":1,"1049":1,"1075":1,"1212":1,"1247":1,"1300":1,"1311":1,"1324":2,"1348":1,"1350":2,"1393":2,"1395":4,"1396":1,"1402":1,"1417":3,"1492":1,"1750":1,"2030":1,"2085":1}}],["endutc",{"3":{"1350":2,"1395":1,"1396":1}}],["enddateselector",{"3":{"1359":1}}],["enddate",{"2":{"1630":1},"3":{"1348":1,"1350":8,"1353":1,"1359":13,"1369":1,"1375":1,"1395":7,"1396":2,"1630":3,"1631":5,"1635":2,"1640":1}}],["endtimeselector",{"3":{"1359":2}}],["endtime",{"3":{"1342":1,"1350":3,"1359":11,"1369":2,"1395":3}}],["endcaptureexclusion",{"2":{"1274":1},"3":{"1274":1,"1286":2}}],["endobject",{"3":{"1229":2}}],["endsatafterstartsatkey",{"3":{"1395":5}}],["endsattime",{"3":{"1395":1}}],["endsatdate",{"3":{"1395":1}}],["endsatlocal",{"3":{"1350":1,"1396":1}}],["endsat",{"3":{"1350":5,"1359":14,"1362":1,"1369":5,"1395":9,"1396":3,"1526":1,"1630":2,"1631":9,"1635":2,"1639":1,"1640":2}}],["endsatutc",{"3":{"1300":2,"1350":1}}],["endswith",{"2":{"1006":1},"3":{"1006":1,"1247":1,"1359":1}}],["ends",{"3":{"0":2,"10":2,"109":1,"110":1,"113":1,"117":1,"150":1,"166":1,"295":1,"341":2,"408":1,"413":1,"500":1,"538":1,"555":1,"675":1,"744":1,"757":1,"908":1,"1018":1,"1027":1,"1117":1,"1126":1,"1234":1,"1237":3,"1241":1,"1243":1,"1246":2,"1247":2,"1259":1,"1262":2,"1270":3,"1271":2,"1281":2,"1286":3,"1300":14,"1301":1,"1309":2,"1310":8,"1311":8,"1312":7,"1316":1,"1323":4,"1324":17,"1327":1,"1339":4,"1350":4,"1359":16,"1369":4,"1373":1,"1375":1,"1380":6,"1395":5,"1396":8,"1402":7,"1415":3,"1416":1,"1417":11,"1423":1,"1427":4,"1436":17,"1438":3,"1441":1,"1445":1,"1453":1,"1455":1,"1460":1,"1467":2,"1475":2,"1482":2,"1492":1,"1496":1,"1613":1,"1638":1,"1639":1,"1701":1,"1790":1,"1849":1,"1858":1,"1865":3,"1866":1,"1875":1,"1884":1,"1902":1,"1933":1,"1980":1,"1983":1,"1984":2,"1985":1,"1987":1,"1988":1,"2018":1,"2025":1,"2123":1,"2127":1,"2234":1}}],["endpointproperty",{"3":{"1339":1}}],["endpointprefix",{"2":{"203":1},"3":{"0":1,"15":1,"25":1,"198":2,"203":1,"1323":6,"1665":1}}],["endpointreference",{"3":{"1339":5}}],["endpointkey",{"3":{"1339":5}}],["endpointname",{"3":{"1328":1,"1339":6}}],["endpoint=sb",{"3":{"1339":1}}],["endpoint=",{"3":{"1323":1}}],["endpointmetadata",{"2":{"1300":1},"3":{"1300":1}}],["endpointfeaturestub",{"3":{"1199":2,"1207":1}}],["endpointcultureappliertests",{"3":{"1199":1,"1207":2,"1438":1}}],["endpointcultureapplier",{"3":{"265":1,"1199":4,"1203":1,"1207":2,"1324":17,"1417":1,"1438":1,"1496":1}}],["endpointdatasource",{"3":{"175":1}}],["endpointdefaults",{"3":{"91":1,"98":1,"1312":2}}],["endpointswithoutauthorizationattribute",{"3":{"1436":5}}],["endpoints",{"0":{"99":1,"2008":1},"2":{"189":1},"3":{"0":11,"31":1,"33":1,"92":2,"93":1,"95":2,"102":1,"156":1,"157":1,"162":1,"174":2,"175":1,"176":2,"177":1,"178":1,"182":1,"184":1,"185":2,"186":5,"187":1,"189":4,"190":1,"198":1,"207":1,"208":1,"235":2,"239":1,"242":1,"243":1,"279":1,"280":2,"283":1,"287":2,"318":2,"324":1,"329":2,"332":1,"350":1,"386":1,"387":3,"388":1,"390":1,"393":1,"401":1,"402":1,"406":1,"415":1,"418":3,"420":1,"423":1,"424":1,"438":1,"448":1,"508":1,"509":1,"510":1,"583":1,"585":1,"591":1,"625":1,"690":1,"725":1,"743":1,"749":2,"759":1,"790":1,"791":1,"792":1,"825":1,"826":2,"827":1,"830":1,"840":1,"854":1,"860":1,"881":1,"882":1,"903":1,"905":1,"906":1,"910":1,"917":1,"980":1,"1026":1,"1030":1,"1058":1,"1059":2,"1069":1,"1123":1,"1188":1,"1192":1,"1203":5,"1207":16,"1208":10,"1212":1,"1213":2,"1229":2,"1237":1,"1247":1,"1271":1,"1286":2,"1288":2,"1294":1,"1297":2,"1300":17,"1304":1,"1307":2,"1309":6,"1311":59,"1312":1,"1323":5,"1324":22,"1331":1,"1332":1,"1339":11,"1347":1,"1348":2,"1350":6,"1352":1,"1359":18,"1377":1,"1379":1,"1380":13,"1387":1,"1392":1,"1395":12,"1396":38,"1402":5,"1406":1,"1408":1,"1414":3,"1415":21,"1417":2,"1436":22,"1438":5,"1441":1,"1442":2,"1443":2,"1447":1,"1451":1,"1455":2,"1456":1,"1458":6,"1467":4,"1469":1,"1490":1,"1492":1,"1496":1,"1524":1,"1526":3,"1534":1,"1540":1,"1548":1,"1550":1,"1577":2,"1600":1,"1626":1,"1630":2,"1631":8,"1632":10,"1633":1,"1635":3,"1637":1,"1638":3,"1639":9,"1640":13,"1641":4,"1651":3,"1653":1,"1660":1,"1666":2,"1667":2,"1677":1,"1700":1,"1703":1,"1717":1,"1727":1,"1747":1,"1748":3,"1749":3,"1750":1,"1753":4,"1760":1,"1765":4,"1771":3,"1774":1,"1776":3,"1815":1,"1874":1,"1896":2,"1898":2,"1908":2,"1912":1,"1922":3,"1923":1,"1924":1,"1929":1,"1937":1,"1941":1,"1960":1,"1961":2,"1962":2,"1963":1,"1964":1,"1965":1,"1969":2,"1971":1,"1972":2,"1975":1,"1991":2,"1993":1,"1996":5,"1999":2,"2000":1,"2001":1,"2002":1,"2003":2,"2026":1,"2048":1,"2115":1,"2128":1,"2129":1,"2134":1,"2171":1,"2197":1,"2234":1}}],["endpoint",{"0":{"92":2,"95":1,"96":1},"1":{"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1},"2":{"397":1,"1333":1,"1419":1,"2011":1,"2158":1,"2161":1,"2175":1},"3":{"0":24,"24":1,"25":1,"27":2,"31":2,"33":2,"39":2,"42":1,"53":1,"55":2,"59":2,"62":3,"90":1,"91":9,"92":11,"93":5,"94":3,"95":12,"96":9,"97":3,"98":16,"99":6,"100":6,"101":4,"102":3,"103":3,"104":1,"105":1,"111":1,"126":1,"157":1,"159":2,"160":2,"173":2,"175":4,"177":4,"179":1,"185":2,"187":1,"188":1,"189":4,"193":1,"198":5,"203":2,"207":2,"208":1,"209":2,"216":1,"223":1,"225":2,"229":3,"235":3,"243":3,"245":1,"265":3,"281":1,"317":2,"318":2,"321":1,"324":1,"332":2,"333":1,"335":1,"342":1,"350":1,"378":1,"389":1,"390":2,"391":1,"397":1,"415":3,"418":1,"435":1,"448":1,"453":1,"459":1,"507":1,"510":1,"517":2,"520":1,"535":1,"549":1,"599":1,"640":1,"649":2,"651":1,"690":1,"709":1,"717":1,"724":1,"725":4,"726":2,"727":2,"728":1,"732":1,"735":1,"738":1,"739":2,"740":2,"741":2,"742":1,"743":2,"749":3,"751":2,"773":1,"775":1,"789":6,"790":17,"791":4,"792":7,"793":4,"794":3,"795":1,"800":1,"826":2,"827":1,"832":1,"837":1,"838":1,"853":2,"869":1,"881":4,"883":1,"907":1,"914":1,"924":1,"965":1,"990":1,"1016":1,"1018":3,"1019":2,"1020":1,"1021":2,"1051":1,"1059":2,"1060":1,"1066":1,"1067":3,"1068":2,"1069":2,"1091":3,"1099":1,"1116":1,"1124":1,"1184":1,"1185":1,"1188":1,"1192":1,"1212":4,"1218":1,"1225":1,"1229":4,"1237":1,"1241":1,"1247":4,"1259":3,"1263":2,"1264":1,"1269":1,"1270":9,"1271":2,"1278":1,"1286":10,"1288":3,"1297":5,"1298":2,"1300":70,"1301":3,"1302":1,"1304":1,"1307":3,"1309":22,"1311":74,"1312":6,"1320":2,"1322":1,"1323":27,"1324":138,"1326":4,"1328":10,"1331":2,"1332":2,"1333":1,"1334":1,"1337":3,"1339":91,"1347":3,"1350":17,"1353":1,"1359":91,"1366":1,"1369":2,"1372":1,"1373":1,"1375":1,"1379":4,"1380":21,"1382":1,"1386":1,"1387":1,"1388":1,"1389":3,"1390":2,"1395":62,"1396":103,"1400":3,"1402":26,"1406":1,"1408":1,"1409":2,"1410":1,"1413":1,"1415":59,"1416":6,"1417":12,"1419":4,"1420":2,"1427":6,"1430":3,"1434":1,"1436":72,"1437":1,"1438":19,"1440":1,"1441":12,"1442":2,"1443":4,"1444":2,"1447":3,"1449":3,"1455":2,"1456":2,"1458":1,"1460":1,"1461":1,"1467":13,"1476":1,"1477":1,"1487":3,"1488":1,"1489":2,"1496":4,"1524":1,"1526":4,"1534":4,"1546":1,"1577":1,"1582":2,"1591":1,"1612":1,"1631":3,"1632":7,"1635":1,"1638":1,"1639":7,"1640":10,"1641":17,"1653":3,"1656":2,"1664":1,"1666":5,"1670":4,"1671":2,"1673":1,"1686":1,"1698":4,"1702":1,"1703":2,"1707":1,"1720":1,"1727":1,"1747":4,"1748":5,"1749":4,"1755":2,"1758":1,"1760":1,"1765":1,"1771":1,"1775":1,"1776":3,"1805":1,"1815":2,"1823":1,"1825":2,"1873":1,"1876":3,"1877":1,"1896":2,"1898":3,"1909":1,"1910":1,"1912":1,"1921":1,"1922":1,"1923":2,"1925":3,"1928":2,"1930":2,"1934":1,"1946":3,"1950":1,"1960":3,"1961":3,"1963":1,"1964":1,"1965":4,"1968":4,"1969":1,"1972":1,"1978":1,"1987":1,"1991":2,"1994":2,"1995":1,"1996":1,"1999":1,"2001":4,"2002":4,"2003":2,"2006":2,"2009":3,"2010":2,"2011":1,"2026":13,"2037":1,"2057":1,"2068":2,"2070":1,"2076":1,"2128":1,"2134":3,"2135":2,"2136":1,"2137":1,"2140":1,"2152":1,"2154":1,"2158":1,"2161":1,"2162":1,"2163":1,"2168":12,"2169":1,"2170":2,"2171":1,"2175":2,"2192":1,"2201":1,"2202":1,"2203":1,"2205":2,"2234":4,"2241":1}}],["end",{"0":{"1245":2,"1304":2,"1323":2,"1350":2,"1415":2,"1433":2,"1514":2,"1560":1,"1563":1,"1565":1,"1651":2,"1754":2,"1933":2,"2212":1},"3":{"0":10,"15":1,"30":1,"59":1,"62":2,"66":2,"76":1,"92":2,"96":1,"107":2,"109":2,"115":4,"130":6,"132":1,"150":1,"155":1,"164":3,"173":1,"179":1,"180":1,"193":3,"241":4,"272":1,"298":2,"386":1,"395":6,"398":2,"402":1,"434":2,"468":4,"501":1,"516":1,"543":3,"574":1,"625":4,"626":1,"696":1,"706":1,"795":1,"797":3,"812":1,"827":1,"844":1,"846":2,"857":2,"861":1,"862":1,"867":2,"881":2,"883":2,"905":1,"920":1,"946":2,"952":2,"972":1,"1025":1,"1026":1,"1048":1,"1050":2,"1067":2,"1073":1,"1075":2,"1081":2,"1185":1,"1192":4,"1202":4,"1203":4,"1212":6,"1216":4,"1220":2,"1225":2,"1229":2,"1233":2,"1234":2,"1237":13,"1247":1,"1256":2,"1259":4,"1270":1,"1271":4,"1274":2,"1275":1,"1281":1,"1286":14,"1290":3,"1297":1,"1300":17,"1309":3,"1310":3,"1311":5,"1312":4,"1323":7,"1324":83,"1326":2,"1333":1,"1336":1,"1339":28,"1344":1,"1348":1,"1350":21,"1352":2,"1358":1,"1359":46,"1362":1,"1369":3,"1375":2,"1376":2,"1380":6,"1383":1,"1385":1,"1390":1,"1391":1,"1393":1,"1395":82,"1396":26,"1398":2,"1402":18,"1403":2,"1413":1,"1415":10,"1416":4,"1417":40,"1427":7,"1428":5,"1431":2,"1432":1,"1433":1,"1436":85,"1437":8,"1438":16,"1439":1,"1441":2,"1442":1,"1443":2,"1452":3,"1455":4,"1456":2,"1461":1,"1462":1,"1463":2,"1465":2,"1467":15,"1475":1,"1481":2,"1486":1,"1488":1,"1489":2,"1491":1,"1492":2,"1493":1,"1496":13,"1499":3,"1525":1,"1526":5,"1530":3,"1531":3,"1532":1,"1535":3,"1536":2,"1554":1,"1563":1,"1565":3,"1572":1,"1574":1,"1576":2,"1577":4,"1581":2,"1582":2,"1583":1,"1585":1,"1586":2,"1588":2,"1590":1,"1591":3,"1597":2,"1599":2,"1600":3,"1602":2,"1621":1,"1630":6,"1631":2,"1632":1,"1635":2,"1647":3,"1651":2,"1653":4,"1654":2,"1661":2,"1662":2,"1669":2,"1674":2,"1677":1,"1681":2,"1685":1,"1689":1,"1702":2,"1720":2,"1722":2,"1757":1,"1764":1,"1767":2,"1768":1,"1779":1,"1784":1,"1796":4,"1805":2,"1815":1,"1818":1,"1860":2,"1875":2,"1884":2,"1909":1,"1910":1,"1923":1,"1936":2,"1941":2,"1947":2,"1981":1,"1982":1,"2005":1,"2010":2,"2025":1,"2026":2,"2051":2,"2052":2,"2055":2,"2058":1,"2060":1,"2064":2,"2071":1,"2072":2,"2074":3,"2080":1,"2081":1,"2082":2,"2083":1,"2088":2,"2129":2,"2132":1,"2149":1,"2157":1,"2158":2,"2192":1,"2201":1,"2216":2,"2222":3,"2223":2,"2228":2,"2234":1,"2236":2}}],["exotic",{"3":{"1259":1,"1906":1,"1952":1,"2127":1}}],["exhibiting",{"3":{"1395":1}}],["exhibits",{"3":{"1395":1}}],["exhibitors",{"3":{"1359":1,"1364":1,"1369":1,"1380":1,"1438":1,"1629":1,"1631":1}}],["exhibitor",{"3":{"1350":1,"1359":3,"1369":1,"1395":3,"1438":1,"1631":2}}],["exhibit",{"3":{"725":1}}],["exhausting",{"3":{"1268":1,"1339":1,"2158":1}}],["exhaustively",{"3":{"1344":1,"1405":1}}],["exhaustiveness",{"3":{"257":1,"1438":1}}],["exhaustive",{"3":{"254":1,"260":1,"626":1,"1324":2,"1359":1,"1395":1,"1396":2,"1436":1,"1498":2}}],["exhaustion",{"3":{"0":1,"20":2,"1256":1,"1359":2,"1395":2,"1436":1}}],["exhaust",{"3":{"174":1,"1323":2,"1324":3,"1339":1}}],["exhausts",{"3":{"24":1,"818":1,"1237":1,"1255":1,"1256":1,"1258":1,"1259":3,"1267":1,"1317":1,"1323":2,"1332":1,"1436":2,"1438":1,"1442":1,"1447":1,"1589":1,"1591":1,"1596":1,"1917":1}}],["exhausted",{"3":{"0":1,"20":1,"395":1,"397":1,"819":1,"820":1,"1212":1,"1256":1,"1259":8,"1286":3,"1309":1,"1318":1,"1323":4,"1324":3,"1350":1,"1359":2,"1389":1,"1395":3,"1417":1,"1427":1,"1436":1,"1442":1,"1467":2,"1577":1,"1639":1,"1665":1,"1843":1,"1845":1,"2158":3}}],["exfiltrate",{"3":{"1300":1,"1966":1}}],["exfiltrated",{"3":{"530":1}}],["exfiltrating",{"3":{"1300":1}}],["exfiltration",{"3":{"206":1,"208":1,"219":1,"1324":1,"2152":1}}],["ex",{"3":{"265":1,"819":1,"1247":3,"1259":7,"1270":4,"1300":1,"1301":1,"1309":2,"1311":1,"1312":4,"1323":2,"1324":5,"1339":1,"1359":4,"1366":1,"1380":6,"1395":1,"1396":2,"1415":2,"1526":2,"1591":1,"1927":2,"2033":1}}],["examples",{"0":{"1491":1},"3":{"493":1,"495":2,"1270":1,"1286":1,"1309":1,"1310":1,"1324":1,"1359":1,"1436":1,"1485":2,"1491":1,"1735":1,"2111":1}}],["example",{"0":{"1799":1,"2191":1},"3":{"31":1,"53":2,"72":1,"82":1,"111":1,"119":1,"128":2,"165":1,"168":1,"185":1,"188":1,"268":2,"283":1,"318":1,"359":2,"363":1,"364":2,"370":1,"380":1,"401":1,"413":1,"415":1,"416":1,"420":1,"427":1,"448":1,"459":1,"474":1,"486":1,"490":1,"491":1,"492":1,"493":1,"543":1,"545":4,"550":1,"556":1,"566":1,"599":1,"620":1,"733":2,"780":1,"782":1,"799":1,"801":1,"837":1,"841":2,"861":1,"873":1,"876":1,"881":2,"963":1,"980":1,"1103":1,"1133":1,"1168":2,"1175":1,"1177":1,"1212":1,"1219":1,"1229":7,"1233":1,"1237":10,"1243":1,"1247":7,"1249":1,"1259":9,"1262":1,"1265":1,"1268":1,"1270":10,"1271":9,"1286":40,"1288":1,"1300":17,"1301":4,"1302":1,"1309":3,"1310":13,"1311":21,"1312":11,"1316":1,"1320":3,"1322":1,"1323":16,"1324":22,"1339":13,"1343":1,"1345":1,"1347":1,"1348":1,"1350":21,"1352":1,"1359":27,"1361":1,"1362":1,"1369":2,"1371":1,"1372":2,"1373":2,"1374":1,"1376":1,"1380":4,"1384":1,"1385":1,"1389":1,"1395":7,"1396":11,"1402":1,"1411":1,"1415":8,"1416":4,"1417":12,"1427":1,"1431":3,"1433":1,"1436":41,"1437":1,"1438":2,"1442":2,"1443":3,"1454":1,"1455":1,"1467":1,"1474":1,"1479":1,"1480":1,"1486":1,"1488":3,"1491":3,"1492":1,"1493":2,"1500":1,"1525":1,"1526":1,"1577":1,"1585":3,"1629":1,"1631":1,"1639":1,"1653":1,"1656":1,"1675":1,"1685":1,"1686":2,"1701":1,"1702":1,"1709":1,"1710":1,"1727":1,"1728":2,"1802":1,"1810":2,"1829":2,"1841":1,"1860":1,"1881":1,"1922":1,"1931":1,"1933":1,"1940":1,"1941":1,"1954":1,"1955":1,"1976":1,"2005":1,"2009":1,"2011":2,"2017":1,"2020":1,"2033":1,"2034":1,"2043":1,"2044":2,"2049":1,"2080":1,"2085":1,"2089":1,"2090":1,"2134":1,"2146":1,"2158":1}}],["exacting",{"3":{"1380":1}}],["exactness",{"3":{"1339":1}}],["exact",{"0":{"1263":1,"2097":1},"3":{"0":3,"1":1,"22":1,"24":1,"98":1,"99":2,"100":1,"102":1,"109":1,"167":1,"283":1,"341":1,"342":1,"371":1,"420":1,"440":1,"459":1,"472":1,"499":1,"530":1,"572":1,"574":1,"626":1,"627":1,"691":1,"707":1,"716":1,"725":1,"740":1,"757":1,"758":1,"765":1,"766":1,"813":1,"827":1,"838":1,"861":1,"863":1,"871":1,"890":1,"905":1,"908":1,"916":1,"980":1,"996":2,"1004":1,"1005":1,"1018":1,"1036":1,"1067":2,"1071":1,"1092":1,"1163":1,"1191":1,"1217":1,"1237":3,"1249":1,"1259":3,"1270":3,"1276":1,"1286":18,"1300":10,"1301":6,"1309":2,"1311":15,"1312":2,"1315":1,"1323":5,"1324":16,"1339":7,"1348":1,"1350":3,"1357":2,"1359":17,"1366":1,"1369":8,"1380":7,"1395":6,"1396":4,"1402":3,"1405":1,"1409":1,"1415":3,"1416":1,"1417":9,"1418":1,"1427":2,"1429":1,"1435":1,"1436":49,"1438":4,"1444":1,"1445":1,"1447":1,"1450":1,"1453":2,"1454":1,"1455":10,"1456":1,"1463":1,"1467":1,"1470":1,"1474":1,"1486":3,"1492":1,"1496":6,"1500":2,"1525":1,"1526":4,"1531":1,"1591":3,"1596":1,"1599":1,"1640":1,"1646":1,"1697":1,"1729":1,"1735":1,"1784":1,"1799":1,"1802":1,"1831":1,"1851":1,"1872":1,"1874":1,"1909":1,"1922":1,"1927":1,"1929":1,"1951":1,"1952":1,"1954":1,"1974":1,"2037":1,"2063":1,"2085":1,"2088":1,"2091":1,"2110":1,"2123":1,"2126":1,"2128":1,"2138":1,"2169":3,"2178":1}}],["exactlyonce",{"3":{"1492":1}}],["exactlyone",{"3":{"1415":1}}],["exactly",{"3":{"0":24,"15":1,"21":1,"23":2,"24":1,"26":2,"38":1,"39":1,"71":2,"93":1,"96":1,"99":1,"109":3,"135":6,"136":1,"139":2,"140":1,"148":2,"159":1,"160":1,"166":2,"170":2,"178":2,"180":1,"186":1,"187":1,"195":3,"197":1,"199":1,"201":1,"202":2,"214":1,"217":1,"218":1,"235":2,"243":1,"253":1,"254":1,"255":1,"257":1,"260":1,"266":1,"292":1,"303":2,"305":1,"310":1,"318":1,"335":2,"342":1,"343":1,"350":2,"351":1,"352":1,"353":1,"359":2,"361":1,"363":1,"369":1,"373":1,"374":1,"380":1,"387":1,"388":1,"390":2,"391":1,"395":1,"400":1,"401":1,"402":1,"407":1,"414":1,"415":1,"420":2,"426":1,"433":1,"443":1,"448":1,"458":2,"459":1,"464":1,"483":1,"490":2,"491":2,"492":1,"493":2,"494":1,"499":1,"507":1,"527":1,"536":2,"539":1,"545":1,"549":2,"551":1,"556":1,"563":1,"564":1,"571":1,"572":1,"574":1,"577":1,"579":1,"583":2,"585":2,"592":2,"593":1,"600":1,"608":1,"609":2,"610":1,"618":2,"619":1,"625":1,"626":1,"627":1,"633":1,"634":1,"635":1,"639":1,"640":2,"649":1,"651":1,"656":1,"657":1,"658":1,"665":1,"667":1,"674":5,"682":2,"684":1,"690":4,"692":1,"693":1,"698":3,"699":1,"702":1,"707":2,"708":1,"709":1,"714":1,"715":1,"716":1,"725":1,"727":1,"732":1,"733":4,"734":1,"735":2,"736":1,"740":1,"741":2,"742":1,"749":1,"757":3,"758":2,"761":1,"766":2,"768":1,"773":1,"775":1,"782":1,"790":2,"791":1,"799":1,"801":1,"803":1,"813":3,"814":1,"815":1,"819":2,"820":1,"826":1,"827":7,"828":1,"829":3,"832":1,"838":3,"839":1,"840":1,"846":1,"847":1,"849":1,"853":1,"861":1,"862":1,"876":1,"881":2,"882":1,"889":2,"891":1,"897":2,"898":1,"899":1,"903":1,"904":1,"905":6,"907":1,"913":2,"920":1,"923":2,"924":2,"926":3,"931":1,"932":1,"938":1,"939":1,"940":2,"944":1,"946":2,"948":2,"955":1,"956":1,"962":1,"966":1,"968":1,"971":1,"972":1,"980":1,"988":1,"990":1,"995":1,"996":1,"1005":1,"1006":1,"1013":1,"1018":4,"1020":1,"1027":2,"1034":1,"1036":1,"1041":1,"1042":2,"1043":1,"1049":1,"1050":2,"1051":2,"1053":1,"1059":1,"1061":1,"1067":1,"1069":1,"1076":1,"1082":1,"1083":1,"1084":2,"1085":1,"1090":1,"1091":2,"1092":1,"1093":2,"1107":1,"1108":1,"1116":2,"1118":1,"1124":1,"1132":1,"1133":2,"1135":1,"1140":1,"1161":1,"1175":1,"1178":1,"1184":2,"1191":2,"1200":1,"1212":4,"1220":1,"1223":1,"1228":1,"1229":14,"1230":1,"1231":2,"1232":1,"1233":1,"1234":1,"1235":1,"1237":22,"1239":1,"1241":2,"1243":2,"1244":1,"1247":26,"1250":1,"1251":2,"1253":1,"1255":1,"1259":28,"1260":1,"1262":1,"1263":2,"1264":1,"1265":1,"1266":1,"1267":1,"1269":1,"1270":48,"1271":7,"1274":3,"1275":3,"1276":2,"1277":1,"1278":2,"1279":3,"1280":2,"1281":3,"1283":3,"1284":1,"1286":110,"1289":1,"1290":2,"1292":1,"1294":2,"1295":1,"1297":2,"1300":61,"1301":17,"1307":1,"1309":27,"1310":8,"1311":61,"1312":4,"1315":1,"1316":3,"1317":2,"1318":4,"1320":2,"1322":1,"1323":66,"1324":102,"1325":1,"1328":1,"1330":1,"1331":1,"1332":1,"1334":3,"1335":1,"1336":2,"1337":1,"1339":54,"1342":6,"1345":1,"1347":1,"1348":1,"1349":1,"1350":37,"1352":2,"1353":2,"1354":1,"1355":1,"1357":2,"1358":1,"1359":144,"1362":1,"1368":2,"1369":12,"1371":1,"1372":1,"1373":1,"1374":1,"1378":1,"1380":24,"1384":1,"1389":2,"1391":2,"1395":82,"1396":90,"1399":1,"1400":1,"1402":31,"1405":1,"1407":1,"1408":1,"1409":1,"1410":1,"1411":1,"1412":1,"1415":56,"1416":13,"1417":38,"1420":1,"1421":1,"1423":1,"1424":1,"1426":1,"1427":10,"1428":2,"1430":1,"1433":1,"1435":2,"1436":183,"1438":17,"1441":3,"1442":2,"1443":2,"1447":2,"1449":1,"1453":2,"1454":1,"1455":15,"1456":3,"1459":1,"1462":1,"1463":1,"1466":1,"1467":18,"1472":1,"1473":2,"1474":1,"1476":7,"1480":1,"1482":1,"1483":1,"1484":1,"1486":3,"1488":3,"1489":2,"1490":2,"1491":2,"1492":5,"1496":6,"1498":1,"1505":1,"1526":5,"1531":1,"1577":1,"1591":1,"1631":3,"1632":1,"1635":2,"1639":1,"1641":1,"1651":1,"1652":1,"1656":1,"1664":2,"1668":2,"1683":2,"1684":1,"1685":4,"1686":5,"1689":1,"1693":1,"1697":2,"1719":1,"1728":1,"1749":3,"1764":5,"1765":2,"1767":1,"1781":1,"1783":1,"1784":1,"1789":1,"1790":1,"1796":1,"1799":1,"1800":1,"1801":1,"1805":1,"1810":1,"1814":1,"1815":3,"1816":1,"1821":1,"1822":1,"1825":2,"1829":2,"1832":2,"1839":2,"1840":1,"1842":2,"1843":1,"1847":1,"1849":3,"1852":2,"1856":1,"1864":1,"1869":1,"1871":1,"1874":1,"1876":2,"1881":1,"1888":1,"1891":1,"1892":1,"1900":1,"1902":1,"1904":1,"1908":1,"1909":2,"1918":1,"1919":2,"1920":1,"1922":2,"1923":3,"1927":2,"1929":1,"1931":1,"1934":1,"1936":1,"1940":1,"1942":1,"1944":1,"1946":1,"1947":1,"1948":1,"1953":1,"1958":1,"1960":1,"1961":1,"1964":1,"1965":1,"1968":1,"1970":1,"1974":1,"1975":1,"1976":2,"1977":1,"1978":2,"1979":3,"1980":2,"1981":1,"1982":2,"1983":1,"1990":2,"1994":1,"1995":1,"1997":1,"1999":1,"2001":2,"2002":3,"2003":1,"2004":1,"2011":1,"2013":1,"2025":1,"2028":1,"2030":1,"2031":1,"2033":1,"2034":1,"2035":1,"2037":1,"2038":1,"2043":2,"2044":2,"2045":2,"2048":2,"2049":2,"2057":1,"2058":2,"2062":1,"2065":2,"2066":1,"2068":2,"2072":1,"2076":1,"2077":1,"2078":1,"2083":1,"2087":1,"2090":1,"2094":1,"2100":1,"2103":1,"2107":1,"2109":2,"2111":1,"2113":1,"2116":1,"2121":1,"2127":1,"2131":1,"2133":1,"2136":1,"2138":1,"2142":1,"2143":1,"2144":3,"2145":1,"2146":1,"2150":2,"2151":1,"2152":1,"2153":1,"2159":1,"2160":1,"2167":3,"2168":1,"2169":2,"2173":1,"2176":1,"2178":1,"2180":1,"2181":1,"2187":1,"2188":1,"2192":1,"2194":1,"2197":1,"2198":1,"2201":2,"2205":1,"2232":1}}],["exif",{"3":{"439":1,"440":1,"1115":1,"1285":1,"1286":2,"1323":3,"1415":2,"1631":1,"2126":1,"2127":1,"2128":2,"2130":3}}],["exiting",{"3":{"626":1,"1460":1}}],["exits",{"3":{"0":2,"397":1,"566":2,"591":1,"626":5,"627":1,"757":1,"766":1,"1215":2,"1300":1,"1310":1,"1311":1,"1324":1,"1350":1,"1395":4,"1396":2,"1416":1,"1417":2,"1436":4,"1455":6,"1458":1,"1475":2,"1486":2,"1492":1,"1526":3,"1591":1,"1685":1,"2059":1}}],["exit",{"0":{"150":1},"1":{"1072":1,"1073":1,"1074":1,"1075":1,"1076":1,"1077":1,"1078":1,"1079":1},"3":{"0":4,"145":4,"153":1,"370":2,"373":1,"452":1,"633":1,"757":1,"766":1,"873":2,"876":1,"877":2,"980":1,"1072":1,"1073":1,"1075":2,"1077":2,"1078":1,"1079":2,"1212":1,"1270":2,"1286":2,"1293":1,"1300":2,"1311":1,"1323":1,"1324":4,"1359":1,"1380":1,"1396":3,"1415":1,"1417":9,"1445":1,"1453":2,"1455":3,"1459":1,"1475":1,"1486":1,"1496":1,"1526":3,"1577":1,"1591":1,"1673":1,"1930":1,"2059":1,"2202":1,"2234":1}}],["existent",{"3":{"1359":1,"1415":1,"1496":1}}],["existence",{"3":{"0":1,"230":1,"295":1,"318":5,"435":1,"459":1,"463":1,"468":1,"545":2,"550":1,"583":2,"856":1,"1003":1,"1058":1,"1170":1,"1244":1,"1247":2,"1270":3,"1276":1,"1286":16,"1300":2,"1308":1,"1309":1,"1311":2,"1322":1,"1323":3,"1324":1,"1352":1,"1359":16,"1364":1,"1369":4,"1380":2,"1395":1,"1396":3,"1402":1,"1412":1,"1415":2,"1436":3,"1438":2,"1591":1,"1600":1,"1631":1,"1666":1,"1748":1,"1759":1,"1761":1,"1765":1,"1772":1,"1956":1,"1995":1,"1996":2,"2035":1,"2068":1,"2092":1}}],["existed",{"3":{"22":1,"243":1,"274":1,"459":1,"477":1,"538":1,"539":1,"600":1,"698":1,"708":1,"837":1,"921":1,"945":1,"1017":1,"1018":1,"1020":1,"1066":1,"1090":1,"1118":1,"1160":1,"1183":1,"1247":3,"1249":1,"1250":1,"1253":1,"1259":4,"1270":1,"1273":1,"1286":5,"1300":1,"1301":2,"1311":2,"1318":1,"1320":1,"1323":3,"1324":6,"1330":1,"1350":4,"1355":1,"1359":8,"1365":1,"1369":2,"1395":2,"1396":3,"1402":1,"1408":1,"1415":2,"1417":1,"1427":1,"1436":10,"1465":1,"1467":1,"1496":3,"1631":1,"1641":1,"1727":1,"1748":1,"1765":1,"1982":1,"2049":1,"2062":1,"2169":1,"2170":1,"2188":1}}],["existinguser",{"3":{"1415":4}}],["existingdeletedbookmark",{"3":{"1396":3}}],["existinganswerids",{"3":{"1396":3}}],["existinganswer",{"3":{"1359":1}}],["existingspeaker",{"3":{"1359":1}}],["existingquestion",{"3":{"1359":1}}],["existingfilter",{"3":{"1286":3}}],["existing",{"2":{"1484":1,"1697":1},"3":{"0":21,"20":1,"24":1,"48":1,"52":1,"78":1,"79":1,"81":1,"99":1,"121":3,"126":1,"131":1,"142":1,"160":2,"200":1,"218":1,"241":1,"255":1,"265":1,"266":1,"273":1,"295":1,"309":1,"310":1,"318":1,"319":1,"350":1,"351":2,"352":2,"379":1,"380":1,"381":1,"390":1,"396":1,"401":1,"420":1,"434":1,"438":1,"443":1,"448":1,"449":2,"493":1,"518":1,"528":1,"534":1,"537":1,"545":1,"546":1,"549":2,"563":1,"575":1,"582":1,"587":1,"590":1,"599":2,"635":1,"640":1,"644":1,"648":1,"649":1,"664":1,"665":1,"690":1,"725":1,"733":3,"734":1,"736":1,"741":1,"742":1,"743":1,"756":1,"765":1,"789":1,"790":2,"793":1,"794":1,"799":2,"827":1,"846":1,"852":1,"854":2,"861":1,"889":1,"890":1,"905":1,"914":2,"920":2,"922":1,"923":1,"926":1,"938":1,"945":1,"948":1,"964":1,"1006":1,"1011":1,"1018":2,"1019":1,"1026":1,"1027":1,"1034":2,"1050":1,"1058":2,"1059":3,"1068":1,"1075":1,"1100":1,"1116":2,"1134":1,"1144":2,"1149":1,"1155":1,"1162":1,"1178":1,"1179":1,"1184":1,"1187":1,"1190":2,"1212":2,"1220":1,"1232":1,"1237":2,"1247":8,"1249":1,"1259":6,"1269":1,"1270":11,"1271":2,"1276":1,"1281":2,"1286":18,"1290":1,"1293":2,"1300":11,"1301":2,"1304":1,"1305":1,"1309":13,"1310":1,"1311":7,"1312":1,"1316":1,"1323":4,"1324":14,"1327":1,"1339":9,"1350":4,"1353":1,"1359":36,"1362":1,"1366":1,"1369":4,"1380":2,"1395":4,"1396":26,"1402":3,"1406":2,"1407":1,"1408":1,"1415":10,"1416":2,"1417":6,"1427":1,"1436":16,"1438":1,"1441":3,"1463":1,"1467":7,"1470":1,"1472":2,"1474":1,"1481":2,"1484":1,"1488":1,"1489":1,"1496":13,"1526":1,"1577":3,"1602":1,"1612":1,"1627":1,"1631":4,"1632":7,"1635":5,"1636":1,"1638":1,"1639":13,"1640":3,"1641":4,"1645":1,"1658":1,"1661":3,"1664":1,"1674":1,"1681":1,"1684":1,"1697":1,"1705":1,"1722":1,"1724":1,"1728":2,"1729":1,"1734":1,"1748":1,"1765":1,"1767":1,"1777":1,"1800":1,"1810":1,"1815":1,"1859":1,"1886":1,"1889":1,"1933":1,"1944":1,"1945":2,"1977":2,"1978":2,"1979":2,"1995":1,"2068":1,"2077":1,"2080":1,"2099":2,"2103":1,"2133":1,"2135":1,"2144":1,"2152":1,"2181":1,"2198":1,"2200":2,"2234":2}}],["existsasync",{"2":{"91":1,"295":1,"1364":1,"1777":1},"3":{"91":1,"295":1,"459":1,"545":2,"550":1,"1244":1,"1247":4,"1286":6,"1300":1,"1323":1,"1359":5,"1364":1,"1369":1,"1396":2,"1415":1,"1639":1,"1751":1,"1777":1,"1815":1}}],["exists",{"0":{"813":1,"1718":1},"2":{"1255":1},"3":{"0":6,"19":1,"24":1,"33":1,"45":1,"93":1,"103":1,"122":1,"135":3,"136":1,"143":1,"150":2,"157":1,"160":1,"161":1,"175":1,"179":1,"200":1,"209":1,"225":1,"243":2,"245":1,"254":1,"256":1,"265":3,"268":1,"273":1,"293":1,"301":1,"303":1,"305":1,"309":1,"318":2,"324":1,"325":1,"326":1,"336":1,"341":1,"343":2,"350":1,"361":1,"372":1,"383":1,"388":1,"390":1,"391":1,"398":1,"401":1,"413":2,"415":1,"418":2,"420":1,"423":1,"428":1,"442":1,"443":1,"448":1,"463":1,"477":1,"490":1,"491":1,"492":1,"493":2,"507":1,"517":1,"528":1,"536":1,"539":1,"543":1,"546":1,"548":1,"549":1,"551":1,"556":2,"557":1,"563":1,"572":1,"583":2,"585":1,"591":2,"592":1,"593":1,"599":3,"605":1,"607":1,"608":1,"609":3,"611":2,"618":2,"626":1,"633":2,"640":1,"645":1,"656":1,"657":1,"658":2,"665":3,"674":1,"676":4,"681":1,"689":1,"690":2,"698":2,"703":2,"707":2,"714":1,"716":2,"718":1,"720":1,"724":1,"725":1,"727":1,"736":1,"741":2,"749":1,"753":1,"759":1,"760":1,"762":1,"773":1,"790":1,"792":2,"797":1,"798":1,"804":1,"808":1,"809":2,"810":1,"811":2,"812":2,"818":1,"819":1,"820":2,"821":1,"827":2,"832":1,"834":1,"837":2,"838":1,"840":1,"862":1,"871":1,"882":1,"884":1,"890":1,"891":1,"913":2,"914":1,"916":1,"924":1,"926":2,"932":1,"945":1,"946":1,"947":1,"953":1,"956":1,"963":1,"965":1,"973":1,"974":2,"980":1,"988":1,"996":1,"997":1,"1005":1,"1014":1,"1018":1,"1019":1,"1020":1,"1029":1,"1042":2,"1043":1,"1050":2,"1051":1,"1052":1,"1067":2,"1071":1,"1077":1,"1082":1,"1092":1,"1100":1,"1118":2,"1132":1,"1134":2,"1142":1,"1168":1,"1190":1,"1191":1,"1196":1,"1200":1,"1212":1,"1229":8,"1231":1,"1232":1,"1235":1,"1237":12,"1239":2,"1240":1,"1241":2,"1242":1,"1247":12,"1251":1,"1254":1,"1255":1,"1257":1,"1259":9,"1270":15,"1271":4,"1274":1,"1276":1,"1277":2,"1278":1,"1281":1,"1286":61,"1288":1,"1289":2,"1290":1,"1293":1,"1297":2,"1300":40,"1301":8,"1304":1,"1307":1,"1309":7,"1310":2,"1311":34,"1312":1,"1313":1,"1315":1,"1320":2,"1322":1,"1323":35,"1324":63,"1332":1,"1333":2,"1334":1,"1337":2,"1339":21,"1345":1,"1348":1,"1349":1,"1350":28,"1352":3,"1357":2,"1359":100,"1368":1,"1369":8,"1371":1,"1372":2,"1375":1,"1376":1,"1379":1,"1380":10,"1383":1,"1389":1,"1395":33,"1396":46,"1401":1,"1402":14,"1405":1,"1406":1,"1410":1,"1411":1,"1414":2,"1415":40,"1416":8,"1417":37,"1418":1,"1427":6,"1431":1,"1436":106,"1438":5,"1441":1,"1443":2,"1445":3,"1447":1,"1448":1,"1449":2,"1452":1,"1455":10,"1457":2,"1458":1,"1459":1,"1465":1,"1466":1,"1467":8,"1468":1,"1470":1,"1471":1,"1472":3,"1474":2,"1475":2,"1476":1,"1478":1,"1479":1,"1482":1,"1484":2,"1486":2,"1488":3,"1489":4,"1490":1,"1491":2,"1492":2,"1496":2,"1524":2,"1526":6,"1531":5,"1532":1,"1534":3,"1539":1,"1545":1,"1547":1,"1548":1,"1577":2,"1585":1,"1591":1,"1596":3,"1626":1,"1627":1,"1631":5,"1632":9,"1633":1,"1635":1,"1638":3,"1639":6,"1641":6,"1646":1,"1651":2,"1653":1,"1654":1,"1666":1,"1668":1,"1675":1,"1683":1,"1684":1,"1686":2,"1692":1,"1701":1,"1720":2,"1724":1,"1726":1,"1730":1,"1732":1,"1737":1,"1747":1,"1748":1,"1749":6,"1755":2,"1760":1,"1765":3,"1776":3,"1790":1,"1802":1,"1810":1,"1811":1,"1815":1,"1825":1,"1831":1,"1835":1,"1837":1,"1849":1,"1851":4,"1858":1,"1861":1,"1864":2,"1874":1,"1876":1,"1878":1,"1881":1,"1889":1,"1898":1,"1902":1,"1908":1,"1909":3,"1923":1,"1926":1,"1934":1,"1945":1,"1947":1,"1948":1,"1952":1,"1953":1,"1954":3,"1955":1,"1970":1,"1971":1,"1975":1,"1982":1,"1989":1,"1995":1,"1996":3,"1997":1,"2001":1,"2010":1,"2015":1,"2034":1,"2035":1,"2041":1,"2042":1,"2047":1,"2058":1,"2064":1,"2076":1,"2077":1,"2080":1,"2109":1,"2123":1,"2129":1,"2133":1,"2134":1,"2137":1,"2140":1,"2153":1,"2158":2,"2167":1,"2168":2,"2169":1,"2170":3,"2176":1,"2178":1,"2185":2,"2187":1,"2190":1,"2206":1}}],["exist",{"0":{"1226":1,"1234":1},"3":{"0":11,"11":1,"16":1,"19":1,"61":1,"62":1,"68":1,"95":1,"97":1,"117":1,"122":2,"141":2,"142":1,"160":1,"219":1,"255":1,"341":1,"343":1,"395":1,"412":1,"416":1,"418":1,"422":2,"428":1,"433":1,"443":1,"468":1,"477":1,"518":1,"536":1,"543":1,"549":1,"551":1,"556":1,"560":1,"583":1,"591":1,"592":1,"601":1,"611":1,"619":1,"622":1,"625":1,"629":1,"638":1,"658":1,"666":1,"677":1,"681":1,"691":1,"725":1,"735":1,"780":1,"803":1,"819":1,"827":1,"829":2,"831":1,"846":1,"847":1,"856":1,"861":1,"876":1,"890":1,"899":1,"905":2,"914":1,"916":1,"918":1,"923":1,"924":1,"926":2,"956":1,"989":2,"1021":1,"1034":1,"1066":1,"1092":1,"1114":1,"1117":1,"1125":1,"1153":1,"1167":1,"1191":1,"1218":1,"1223":1,"1229":2,"1237":3,"1241":1,"1247":3,"1251":1,"1259":2,"1262":1,"1263":2,"1270":9,"1271":2,"1286":20,"1289":1,"1297":1,"1300":10,"1301":1,"1308":1,"1309":3,"1311":6,"1312":1,"1315":1,"1320":1,"1323":11,"1324":20,"1326":1,"1328":1,"1332":1,"1339":12,"1348":2,"1349":1,"1350":11,"1353":1,"1359":30,"1364":1,"1368":1,"1369":4,"1371":1,"1373":1,"1380":1,"1395":5,"1396":21,"1402":3,"1404":1,"1409":1,"1415":11,"1416":4,"1417":11,"1433":1,"1436":31,"1438":1,"1453":2,"1454":1,"1455":6,"1456":1,"1459":1,"1465":1,"1467":5,"1470":2,"1471":1,"1473":1,"1474":1,"1476":1,"1477":1,"1489":2,"1492":4,"1496":2,"1507":1,"1526":1,"1545":1,"1550":1,"1553":1,"1557":1,"1567":1,"1571":1,"1577":4,"1596":1,"1597":1,"1626":1,"1631":5,"1632":9,"1634":1,"1635":1,"1638":1,"1639":1,"1640":2,"1649":1,"1653":1,"1669":1,"1700":1,"1701":1,"1728":1,"1749":3,"1755":2,"1765":2,"1767":3,"1776":2,"1801":1,"1803":2,"1804":1,"1810":1,"1812":1,"1815":1,"1816":1,"1821":1,"1824":1,"1825":1,"1840":1,"1843":1,"1856":1,"1867":1,"1876":1,"1879":1,"1881":1,"1894":1,"1928":1,"1941":1,"1961":1,"2002":1,"2034":1,"2038":1,"2041":1,"2048":2,"2057":1,"2066":1,"2077":1,"2082":1,"2099":1,"2100":1,"2116":1,"2118":2,"2124":1,"2166":1,"2171":1,"2182":2,"2183":1,"2184":1}}],["exchanging",{"3":{"351":1,"1311":1,"1324":1,"1436":1,"1577":1}}],["exchangecode",{"3":{"1311":1}}],["exchanged",{"3":{"1300":1,"1324":3,"1416":1,"1582":1,"1972":1}}],["exchangeresponse",{"3":{"1199":2,"1207":1}}],["exchangeoauthcodeasync",{"2":{"420":2,"423":1,"426":1,"428":1},"3":{"420":2,"423":1,"426":1,"428":1,"1324":2,"1436":1}}],["exchangeasync",{"2":{"1535":1,"1975":1,"1976":1},"3":{"350":1,"1300":1,"1311":4,"1535":1,"1975":1,"1976":1}}],["exchanges",{"3":{"0":1,"350":1,"355":1,"419":1,"499":1,"503":1,"528":1,"1184":1,"1298":1,"1300":5,"1324":1,"1454":1,"1455":1,"1585":1,"1727":1}}],["exchange",{"0":{"1975":1},"1":{"347":1,"348":1,"349":1,"350":1,"351":1,"352":1,"353":1,"354":1,"355":1},"2":{"178":1,"818":1,"1334":1,"1843":1},"3":{"0":5,"159":1,"160":1,"161":1,"178":1,"340":1,"341":1,"342":1,"347":1,"350":6,"351":1,"352":1,"418":1,"420":1,"421":1,"422":1,"423":3,"426":3,"428":1,"528":3,"529":1,"530":2,"531":1,"640":1,"733":1,"735":1,"818":1,"872":1,"923":1,"1184":1,"1259":1,"1300":8,"1301":8,"1311":10,"1323":6,"1324":13,"1334":1,"1339":2,"1359":1,"1395":1,"1406":1,"1415":2,"1417":4,"1436":7,"1438":2,"1454":3,"1467":1,"1535":1,"1585":1,"1667":1,"1776":1,"1843":1,"1898":2,"1911":1,"1915":1,"1920":1,"1974":1,"1975":4,"1977":2,"1978":2,"1979":3,"2014":1,"2080":1,"2081":1,"2234":1}}],["excuse",{"3":{"1286":1}}],["excuses",{"3":{"318":1,"565":1,"1300":1,"1436":1,"1995":1}}],["excused",{"3":{"135":1,"139":1,"1436":2}}],["excluding",{"3":{"152":1,"619":1,"690":1,"799":1,"940":1,"1196":1,"1280":1,"1282":1,"1286":3,"1311":1,"1323":1,"1332":2,"1339":1,"1350":2,"1359":4,"1402":1,"1415":1,"1436":7,"1455":1,"1467":4,"1631":1,"1748":1,"1801":1,"2069":1}}],["excludereservedids",{"3":{"1359":1}}],["excludeitemid",{"3":{"1350":1}}],["excludefromdescription",{"3":{"1300":1,"1311":1,"1324":3,"1339":1}}],["excludessoftdeleteditems",{"2":{"1686":1},"3":{"1686":1}}],["excludesframeworkevents",{"3":{"1436":1}}],["excludesessionid",{"3":{"1359":7}}],["excludescoredsinceasync",{"3":{"1359":3}}],["excludesdomainevents",{"3":{"1286":1}}],["excludes",{"3":{"233":1,"607":1,"609":1,"819":1,"889":2,"1212":1,"1259":1,"1282":1,"1286":6,"1323":3,"1324":1,"1332":1,"1339":2,"1350":2,"1359":6,"1372":1,"1380":2,"1396":2,"1401":1,"1404":1,"1415":1,"1433":1,"1436":7,"1455":2,"1467":1,"1486":1,"1492":1,"1534":1,"1666":1,"2008":1,"2062":1,"2160":1}}],["exclude",{"3":{"0":1,"38":1,"141":1,"403":1,"609":1,"612":1,"1082":1,"1212":1,"1247":1,"1286":1,"1350":1,"1352":1,"1359":2,"1402":1,"1436":1,"1631":1,"1635":1,"1639":2,"1801":1,"2062":1,"2160":4,"2234":1}}],["excludedpathfragments",{"3":{"1436":3}}],["excludedpathprefixes",{"3":{"698":1,"1286":1,"1320":1}}],["excluded",{"0":{"1209":1},"3":{"0":5,"24":1,"135":2,"149":1,"474":1,"482":1,"490":1,"536":1,"573":1,"698":1,"700":1,"734":1,"799":1,"803":1,"805":1,"867":1,"871":1,"980":1,"982":1,"988":1,"996":1,"1026":1,"1074":1,"1075":1,"1078":1,"1184":1,"1196":1,"1204":1,"1209":1,"1212":2,"1215":1,"1227":1,"1231":1,"1259":4,"1270":2,"1277":1,"1286":6,"1300":2,"1311":2,"1323":2,"1324":6,"1339":3,"1350":4,"1359":13,"1369":1,"1395":2,"1396":5,"1401":1,"1402":7,"1410":1,"1415":8,"1436":13,"1438":1,"1459":1,"1467":1,"1474":2,"1486":1,"1487":1,"1494":1,"1496":3,"1497":1,"1526":1,"1527":1,"1553":1,"1577":1,"1578":1,"1582":1,"1591":1,"1592":1,"1611":1,"1617":1,"1630":1,"1631":5,"1632":1,"1633":2,"1635":5,"1637":1,"1638":2,"1639":2,"1640":4,"1664":1,"1784":1,"1851":2,"1923":1,"2069":1,"2102":1}}],["exclusivity",{"3":{"709":1,"1911":1}}],["exclusivemajorceiling",{"3":{"1436":1}}],["exclusively",{"3":{"193":1,"930":1,"1247":1,"1259":1,"1270":2,"1286":3,"1300":2,"1311":1,"1324":1,"1339":1,"1342":1,"1350":1,"1359":1,"1417":1,"1427":1,"1465":1,"1773":1}}],["exclusive",{"3":{"0":2,"159":1,"996":1,"997":1,"1026":1,"1074":1,"1212":1,"1269":1,"1300":1,"1316":1,"1323":3,"1348":1,"1350":4,"1395":1,"1396":2,"1402":1,"1427":1,"1436":2,"1489":1,"1630":2,"1749":1,"1764":1,"1765":1,"1767":1,"1909":1}}],["exclusionid",{"3":{"1359":1}}],["exclusiontestdbcontext",{"3":{"1199":2,"1207":1}}],["exclusionaggregate",{"3":{"1199":3,"1207":1}}],["exclusionevent",{"3":{"1199":2,"1207":1}}],["exclusions",{"3":{"876":1,"1006":1,"1353":1,"1415":1,"1436":1,"1455":1,"1486":1,"1496":2,"2044":1,"2160":1}}],["exclusion",{"1":{"993":1,"994":1,"995":1,"996":1,"997":1,"998":1,"999":1,"1000":1},"3":{"0":1,"135":1,"142":1,"159":2,"161":1,"235":1,"484":1,"486":1,"490":1,"524":1,"607":1,"696":3,"984":1,"993":1,"995":2,"996":3,"997":1,"998":2,"1000":1,"1212":1,"1237":2,"1260":1,"1269":1,"1270":4,"1274":2,"1286":11,"1300":3,"1301":2,"1311":6,"1323":1,"1339":2,"1344":2,"1350":2,"1352":1,"1359":5,"1367":1,"1395":1,"1396":1,"1402":1,"1415":1,"1417":1,"1436":5,"1438":2,"1443":1,"1474":1,"1496":1,"1534":2,"1592":1,"1635":1,"2058":1,"2122":1,"2234":1}}],["excerpt",{"3":{"1324":1}}],["excellent",{"3":{"1537":1,"1797":1,"1804":1}}],["excel",{"3":{"741":1,"1311":2}}],["exceeding",{"3":{"1427":1,"1714":1}}],["exceed",{"3":{"709":1,"828":1,"829":1,"1286":2,"1292":1,"1350":3,"1359":1,"1395":1,"1399":1,"1436":6,"1685":2,"1686":2,"1832":1,"2168":1}}],["exceeded",{"3":{"556":1,"861":1,"1300":3,"1312":2,"1324":1,"1378":1,"1380":1,"1396":1,"1467":1,"1476":1,"1640":2,"1641":2,"1927":1}}],["exceeds",{"3":{"0":1,"137":1,"369":1,"576":1,"591":1,"626":1,"861":1,"1091":1,"1237":1,"1247":1,"1300":2,"1309":2,"1350":1,"1417":1,"1422":1,"1427":1,"1436":2,"1456":1,"1467":1,"1638":1}}],["excessive",{"3":{"1639":2}}],["excessattempts",{"3":{"1300":1}}],["excess",{"3":{"282":1,"1324":2,"1339":1,"1436":1,"1640":1,"1641":1}}],["exceptargumentguards",{"3":{"1436":2}}],["excepted",{"3":{"619":1,"1488":1}}],["except",{"3":{"0":5,"31":2,"109":1,"130":2,"135":2,"138":2,"141":1,"142":1,"359":1,"388":1,"401":1,"484":1,"766":1,"881":1,"905":1,"926":1,"1034":1,"1092":1,"1247":2,"1259":1,"1270":1,"1271":1,"1278":1,"1286":3,"1300":4,"1309":1,"1311":7,"1312":1,"1318":1,"1323":1,"1324":4,"1333":1,"1339":3,"1350":1,"1359":10,"1369":2,"1392":1,"1395":7,"1396":5,"1415":2,"1427":1,"1436":11,"1438":1,"1443":1,"1455":1,"1459":1,"1490":1,"1611":1,"1627":1,"1635":1,"1760":1,"1761":1,"1821":1,"1823":1,"1856":1,"1878":1,"1898":1,"1904":1,"1919":1,"1922":2,"1948":1,"1954":1,"1955":1,"2076":1,"2102":1}}],["exceptionobject",{"3":{"1417":1}}],["exceptionhandler",{"3":{"1311":2,"1436":1,"1666":1}}],["exceptionhandlertests",{"3":{"1199":1,"1207":3,"1229":1}}],["exceptionhandled",{"3":{"1311":2}}],["exception",{"0":{"1218":1,"1873":1},"2":{"896":1,"899":1,"1821":1,"1919":1,"2033":1},"3":{"0":15,"17":1,"20":1,"24":1,"39":1,"53":1,"94":1,"95":1,"98":1,"107":2,"108":1,"109":12,"110":3,"111":6,"115":3,"122":1,"125":6,"135":1,"141":1,"142":1,"164":1,"175":1,"200":1,"230":1,"235":1,"265":3,"279":1,"280":2,"285":1,"287":1,"303":1,"310":1,"342":1,"370":1,"386":1,"388":2,"395":2,"397":1,"407":4,"414":1,"415":1,"420":1,"427":1,"440":1,"459":1,"465":1,"536":4,"539":1,"549":1,"583":1,"586":1,"618":3,"619":1,"620":2,"651":1,"657":2,"672":1,"674":2,"683":1,"688":1,"690":1,"691":2,"692":1,"698":1,"749":1,"757":1,"819":1,"827":1,"840":1,"881":1,"882":2,"896":2,"897":3,"899":2,"912":2,"913":1,"914":2,"917":1,"918":1,"965":1,"980":1,"988":6,"989":1,"990":1,"1002":1,"1004":1,"1005":1,"1018":2,"1022":1,"1042":1,"1054":1,"1058":1,"1107":1,"1124":2,"1126":1,"1134":1,"1201":1,"1202":1,"1203":2,"1208":1,"1212":2,"1217":1,"1226":1,"1228":1,"1229":18,"1237":3,"1241":1,"1247":12,"1252":2,"1259":19,"1263":6,"1269":1,"1270":34,"1271":1,"1273":1,"1275":1,"1278":3,"1284":1,"1286":75,"1288":1,"1293":1,"1299":1,"1300":18,"1301":1,"1304":2,"1309":8,"1311":41,"1312":22,"1318":1,"1323":36,"1324":52,"1328":2,"1339":19,"1350":5,"1352":2,"1355":3,"1357":1,"1358":1,"1359":33,"1366":1,"1369":4,"1378":1,"1379":1,"1380":2,"1390":1,"1395":24,"1396":40,"1402":6,"1413":1,"1415":19,"1416":8,"1417":31,"1423":2,"1424":1,"1427":12,"1436":70,"1438":8,"1445":1,"1447":1,"1450":1,"1455":2,"1467":1,"1485":1,"1487":1,"1488":6,"1489":2,"1495":1,"1496":12,"1498":1,"1526":1,"1591":1,"1615":1,"1631":1,"1634":1,"1638":1,"1640":2,"1651":1,"1660":1,"1666":1,"1669":1,"1685":1,"1702":1,"1729":1,"1741":1,"1753":1,"1774":2,"1804":1,"1806":6,"1807":1,"1815":1,"1821":2,"1822":4,"1825":1,"1826":1,"1827":1,"1840":5,"1873":1,"1881":1,"1885":1,"1886":1,"1912":1,"1918":1,"1919":1,"1922":1,"1927":3,"1933":2,"1934":2,"1951":1,"1954":3,"1959":1,"1995":1,"1999":1,"2001":2,"2033":2,"2058":3,"2061":1,"2074":1,"2076":2,"2081":1,"2092":1,"2094":1,"2098":2,"2119":1,"2122":1,"2125":1,"2128":1,"2134":1,"2166":1,"2167":4,"2171":2,"2177":2,"2190":1,"2192":1,"2193":1,"2204":1,"2234":1}}],["exceptional",{"3":{"0":2,"109":1,"111":1,"1217":1,"1218":1,"1226":2,"1229":1,"1324":1,"1415":1,"1436":3,"1803":1,"1805":1,"1806":1,"1807":1,"1959":1}}],["exceptions",{"0":{"1226":1,"1497":1,"1804":1},"1":{"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"1803":1,"1804":1,"1805":1,"1806":1,"1807":1},"2":{"1229":1},"3":{"0":5,"39":1,"106":1,"108":1,"109":2,"111":1,"120":3,"139":1,"265":1,"314":1,"318":1,"344":1,"549":1,"619":1,"674":2,"677":1,"683":1,"690":1,"798":1,"964":1,"988":1,"992":1,"1004":1,"1049":1,"1192":1,"1203":3,"1207":10,"1211":1,"1212":1,"1217":1,"1218":1,"1226":4,"1229":13,"1247":1,"1256":1,"1259":1,"1270":3,"1271":1,"1278":1,"1286":5,"1287":1,"1300":2,"1311":5,"1312":5,"1323":2,"1324":7,"1339":1,"1350":1,"1359":2,"1373":1,"1396":6,"1402":2,"1415":3,"1417":3,"1436":5,"1467":1,"1489":1,"1496":1,"1504":1,"1539":1,"1552":1,"1577":2,"1640":1,"1653":1,"1662":1,"1700":1,"1786":1,"1802":1,"1803":2,"1804":1,"1805":2,"1806":2,"1807":5,"1840":1,"1920":1,"1923":1,"1927":2,"1930":2,"1933":1,"1940":1,"1954":1,"1959":1,"1995":1,"2013":1,"2044":1,"2161":1,"2167":1,"2208":1,"2232":1,"2234":1}}],["exec",{"3":{"1479":2}}],["executably",{"3":{"1237":1}}],["executable",{"0":{"1489":1},"3":{"0":1,"1116":1,"1134":1,"1162":1,"1169":1,"1214":1,"1229":1,"1237":3,"1247":1,"1271":2,"1285":1,"1286":1,"1311":1,"1312":2,"1347":1,"1350":1,"1353":1,"1359":9,"1436":19,"1438":3,"1445":1,"1457":1,"1461":1,"1485":1,"1489":2,"1491":1,"1492":1,"1523":1,"1525":1,"1526":1,"1571":1,"1574":1,"1576":1,"1591":1,"1670":1,"1782":1,"1793":1,"1811":1,"1898":1,"2032":1,"2039":1,"2041":1,"2044":1,"2064":2,"2077":1}}],["executor",{"3":{"0":1,"881":1,"1133":1,"1135":2,"1136":1,"1137":1,"1175":1,"1176":1,"1180":1,"1286":2,"1309":4,"1310":1,"1323":1,"1324":3,"1395":4,"1396":5,"1415":2,"1417":1,"1436":2,"1653":1,"1990":1}}],["executing",{"3":{"0":1,"157":2,"698":1,"709":1,"995":1,"1044":1,"1212":1,"1246":1,"1247":1,"1270":1,"1276":1,"1286":3,"1300":1,"1311":2,"1323":2,"1332":1,"1359":1,"1416":1,"1436":1,"1438":1,"1577":1,"1851":1,"1909":1,"1912":1,"2194":1,"2234":1}}],["executionrejectedexception",{"3":{"1300":1}}],["executionandpublication",{"2":{"1288":1},"3":{"1288":1,"1300":1}}],["executions",{"3":{"1263":1,"1270":1,"1323":1,"1708":1,"1821":1,"1909":1}}],["executionlog",{"3":{"1199":4,"1207":1}}],["executionconfigurationbuilder",{"2":{"1067":1},"3":{"1067":1}}],["executioncontext",{"2":{"1246":1},"3":{"265":1,"1246":1,"1324":1,"1417":1}}],["execution",{"0":{"1262":1,"2186":2},"1":{"515":1,"516":1,"517":1,"518":1,"519":1,"520":1,"521":1,"522":1,"523":1,"524":1,"985":1,"986":1,"987":1,"988":1,"989":1,"990":1,"991":1,"992":1},"2":{"2193":1},"3":{"0":9,"21":1,"71":2,"117":1,"119":1,"120":1,"121":1,"122":3,"157":1,"407":1,"435":1,"515":1,"518":1,"549":1,"579":1,"707":3,"708":1,"711":1,"715":1,"819":2,"985":1,"987":2,"988":1,"991":1,"992":1,"996":1,"997":1,"1042":5,"1044":2,"1046":1,"1135":1,"1150":1,"1152":1,"1212":4,"1243":1,"1245":1,"1247":6,"1251":1,"1261":1,"1262":1,"1263":1,"1267":2,"1269":1,"1270":21,"1271":1,"1274":3,"1275":5,"1278":2,"1286":19,"1300":2,"1301":1,"1309":2,"1311":3,"1312":1,"1316":2,"1317":1,"1318":4,"1323":11,"1324":1,"1357":1,"1359":6,"1415":2,"1417":1,"1436":7,"1438":2,"1455":3,"1461":1,"1463":1,"1467":1,"1476":1,"1486":1,"1488":1,"1492":1,"1507":1,"1524":1,"1525":1,"1526":1,"1531":2,"1534":1,"1537":2,"1574":2,"1575":1,"1577":4,"1578":1,"1584":1,"1585":1,"1588":1,"1592":1,"1611":1,"1664":2,"1747":4,"1774":2,"1784":1,"1799":1,"1821":1,"1826":1,"1840":3,"1865":1,"1909":1,"1917":1,"1940":1,"1948":1,"2033":2,"2039":1,"2098":2,"2129":1,"2158":2,"2186":1,"2190":2,"2193":2,"2194":3,"2195":3,"2222":1,"2234":2}}],["executeandstoreasync",{"3":{"1311":1}}],["executeasync",{"2":{"255":1,"391":1,"522":1,"523":1,"524":1,"881":1,"897":1,"988":1,"1100":1,"1310":1,"1399":1,"1414":1,"1653":1,"1665":1,"1919":1,"1922":1,"1924":1,"1946":1,"2186":1},"3":{"0":1,"255":1,"391":1,"522":2,"523":2,"524":1,"536":1,"707":1,"881":1,"897":1,"988":1,"1100":4,"1212":1,"1243":2,"1244":1,"1247":12,"1259":3,"1269":1,"1270":3,"1273":1,"1286":9,"1310":1,"1311":1,"1323":5,"1324":8,"1334":1,"1339":7,"1395":9,"1396":27,"1399":2,"1402":6,"1414":1,"1415":1,"1442":1,"1653":1,"1665":1,"1919":2,"1922":1,"1924":1,"1946":1,"2169":1,"2186":1}}],["executeunderdistributedlockasync",{"3":{"1311":1}}],["executeunderprocesslockasync",{"3":{"1311":1}}],["executeupdateasync",{"2":{"20":1,"24":1,"995":1,"1844":1,"1948":1},"3":{"20":1,"24":1,"698":1,"707":2,"995":1,"1259":4,"1278":1,"1286":16,"1290":1,"1300":1,"1309":2,"1317":1,"1323":3,"1496":2,"1749":1,"1765":1,"1844":1,"1948":1}}],["executeupdate",{"2":{"1255":1,"1844":1},"3":{"0":1,"536":1,"540":1,"1252":1,"1255":1,"1259":3,"1278":1,"1286":5,"1300":1,"1309":1,"1591":1,"1664":1,"1844":2}}],["executerawlookupmethod",{"3":{"1286":1}}],["executerawlookupasync",{"3":{"1286":5}}],["executeclaimedjobasync",{"3":{"1323":3}}],["executeclaimedasync",{"3":{"1286":1}}],["executecycleasync",{"3":{"536":1,"1286":1,"1317":1,"1323":2,"2169":1}}],["executewithserversideincludesasync",{"3":{"1247":2}}],["executewithmanualnavigationasync",{"3":{"1247":2,"1310":1}}],["execute",{"0":{"2190":1},"3":{"0":1,"155":1,"156":1,"157":2,"159":1,"590":1,"707":1,"733":1,"990":1,"995":1,"996":1,"1202":1,"1203":1,"1244":1,"1247":2,"1259":1,"1269":1,"1270":2,"1284":1,"1286":3,"1301":1,"1309":1,"1311":7,"1323":3,"1324":1,"1339":1,"1359":2,"1395":2,"1417":1,"1436":4,"1445":1,"1467":1,"1490":1,"1591":1,"1666":1,"1668":1,"1765":1,"1815":1,"1909":6,"1911":2,"1912":2,"1915":1,"2057":1,"2195":2}}],["executeintransactionasync",{"2":{"21":1,"120":1,"535":1,"536":1,"539":1,"540":1,"987":2,"988":1,"1278":1,"1358":1,"1406":1,"1664":1,"1822":1,"1840":2,"1852":1,"2094":1,"2098":1,"2163":1,"2166":1},"3":{"0":1,"21":1,"120":1,"535":1,"536":1,"539":1,"540":2,"987":2,"988":3,"1212":1,"1263":1,"1270":3,"1278":1,"1286":10,"1358":1,"1359":2,"1406":1,"1415":2,"1591":1,"1664":1,"1822":1,"1840":3,"1852":1,"2094":1,"2098":1,"2163":1,"2166":1}}],["executeprojectedasync",{"2":{"549":1,"1243":1,"1244":1,"1247":1},"3":{"0":1,"549":1,"1243":1,"1244":1,"1247":4}}],["executedeletingfixture",{"3":{"1199":2,"1207":1,"1436":7}}],["executedelete",{"3":{"39":1,"1277":1,"1286":1,"1359":1,"1436":3}}],["executedeleteasync",{"2":{"39":1},"3":{"0":1,"39":1,"905":1,"1278":1,"1286":12,"1359":2,"1436":10,"1526":1}}],["executed",{"3":{"0":5,"130":2,"136":2,"137":4,"140":2,"142":1,"218":1,"626":1,"628":1,"641":1,"827":1,"1042":1,"1050":2,"1055":1,"1212":1,"1246":1,"1247":1,"1270":4,"1286":5,"1311":1,"1312":1,"1318":1,"1324":1,"1339":2,"1359":12,"1380":2,"1395":2,"1396":1,"1402":2,"1405":1,"1411":1,"1416":1,"1431":1,"1436":2,"1438":1,"1441":1,"1455":2,"1489":1,"1496":1,"1526":1,"1591":2,"1706":1,"1784":1,"1824":1,"2035":1}}],["executesql",{"2":{"1132":1,"1990":1},"3":{"1132":1,"1436":1,"1990":1}}],["executesqlinterpolated",{"2":{"1132":1},"3":{"1132":1}}],["executesqlrawasync",{"2":{"1132":1,"1133":1,"1990":1},"3":{"0":1,"1132":1,"1133":1,"1431":1,"1436":3,"1990":1,"2044":1}}],["executesqlraw",{"2":{"1132":1,"1990":1},"3":{"0":1,"1132":1,"1133":1,"1431":1,"1436":3,"1990":1,"2044":1}}],["executes",{"3":{"0":2,"135":1,"136":1,"137":2,"159":2,"265":1,"707":1,"972":1,"1042":1,"1043":1,"1100":1,"1238":1,"1247":1,"1259":2,"1270":4,"1271":2,"1275":1,"1286":3,"1300":1,"1310":2,"1311":2,"1317":1,"1323":1,"1324":2,"1326":1,"1359":2,"1369":1,"1395":1,"1415":1,"1417":3,"1430":1,"1431":1,"1436":2,"1453":1,"1489":1,"1492":1,"1524":1,"1526":1,"1531":1,"1577":1,"1782":1,"1815":1,"1911":2,"2095":1,"2103":1,"2180":1,"2186":1,"2190":1,"2196":1,"2205":1}}],["exe",{"3":{"1286":1,"1416":1,"1479":1,"1486":2}}],["exercisable",{"3":{"1359":1}}],["exercising",{"3":{"914":1,"1271":1,"1427":1,"1436":6,"1437":4,"1456":1,"1460":1,"1490":1,"2069":1}}],["exercised",{"3":{"136":1,"150":1,"267":1,"359":1,"361":1,"448":2,"450":1,"455":1,"572":1,"583":1,"639":1,"659":1,"667":1,"707":1,"733":1,"812":1,"917":1,"998":1,"1075":1,"1212":1,"1237":4,"1247":5,"1259":1,"1264":1,"1270":12,"1271":1,"1286":11,"1300":4,"1301":3,"1309":2,"1311":1,"1323":14,"1324":10,"1339":1,"1350":3,"1359":16,"1364":1,"1369":4,"1380":2,"1395":4,"1396":6,"1402":1,"1415":4,"1417":3,"1427":6,"1429":1,"1432":1,"1436":28,"1438":2,"1446":1,"1488":1,"1490":1,"1496":1,"1500":1,"1577":3,"1671":2,"1673":1,"1842":1,"1860":2,"1884":1,"2056":1,"2064":1,"2131":1,"2133":2,"2134":1,"2145":1,"2230":1}}],["exercises",{"3":{"0":3,"136":1,"170":1,"185":1,"558":1,"573":1,"635":1,"638":1,"641":1,"698":1,"716":1,"758":1,"848":1,"941":1,"954":1,"1020":1,"1270":1,"1271":1,"1286":3,"1300":1,"1309":1,"1311":2,"1323":1,"1324":1,"1339":1,"1359":6,"1369":1,"1395":1,"1396":3,"1402":1,"1427":2,"1436":25,"1438":2,"1446":1,"1456":1,"1487":1,"1490":2,"1526":1,"1535":1,"1585":1,"1600":1,"1611":1,"1663":1,"1673":1,"1702":1,"1706":1,"1929":1,"1952":1,"1960":1,"2054":1,"2075":1,"2099":1,"2115":1,"2230":1,"2234":1}}],["exercise",{"0":{"1800":1},"3":{"0":2,"62":1,"390":1,"650":1,"725":1,"776":1,"838":1,"1154":1,"1259":1,"1270":2,"1286":4,"1311":2,"1324":5,"1339":4,"1359":2,"1380":1,"1395":2,"1396":1,"1402":1,"1417":1,"1427":2,"1429":1,"1430":1,"1435":1,"1436":8,"1455":2,"1488":2,"1491":1,"1494":1,"1526":1,"1653":1,"1698":1,"1891":1,"1923":1,"2056":1,"2131":1}}],["exemplary",{"3":{"1526":3,"1537":1,"1576":1,"1577":2,"1590":1,"1591":2,"1797":1,"1799":1}}],["exemplar",{"0":{"2133":1},"3":{"0":1,"448":1,"449":2,"1212":1,"1323":1,"1343":1,"2133":2,"2134":1}}],["exemptprefixes",{"3":{"1324":1}}],["exemptpartitionkey",{"3":{"1324":1}}],["exemptpathprefixes",{"2":{"189":1},"3":{"189":1,"1300":3}}],["exemptablefixtureservice",{"3":{"1199":2,"1207":1,"1436":3}}],["exempting",{"3":{"1135":1,"1300":1,"1324":1,"1339":1,"1436":8,"2003":1}}],["exemption",{"3":{"0":5,"103":2,"135":6,"136":1,"139":1,"142":1,"173":4,"175":1,"179":2,"180":1,"181":1,"279":1,"480":1,"482":1,"486":1,"487":2,"488":3,"489":3,"490":3,"491":3,"492":3,"493":3,"494":1,"495":1,"507":1,"545":1,"747":1,"749":1,"753":1,"789":1,"792":1,"825":1,"826":1,"827":1,"828":1,"830":1,"832":4,"834":1,"1004":1,"1006":4,"1122":1,"1124":1,"1126":1,"1127":1,"1133":2,"1134":1,"1135":1,"1161":3,"1162":1,"1212":2,"1286":1,"1300":3,"1309":1,"1311":8,"1324":8,"1337":1,"1339":7,"1416":2,"1436":41,"1438":1,"1447":3,"1467":3,"1489":1,"1496":1,"1799":1,"1825":1,"1997":1,"1998":1,"1999":1,"2002":1,"2003":4,"2044":2}}],["exemptions",{"3":{"0":2,"90":1,"103":1,"135":1,"142":1,"545":1,"547":1,"1005":1,"1124":1,"1161":1,"1311":1,"1324":2,"1339":1,"1416":1,"1436":10,"1526":1,"2044":1}}],["exemptfoldersuffixes",{"2":{"1004":1,"2044":1},"3":{"1004":2,"1431":1,"1436":4,"2044":1}}],["exemptmethods",{"3":{"135":1,"139":1,"1436":2}}],["exempt",{"3":{"0":3,"174":1,"178":1,"179":3,"180":1,"189":1,"227":1,"244":1,"280":1,"484":1,"486":1,"487":2,"488":4,"489":5,"490":8,"491":7,"492":8,"493":3,"494":3,"495":2,"552":1,"575":1,"749":1,"792":1,"827":1,"830":1,"831":1,"832":1,"881":1,"1006":1,"1124":3,"1126":1,"1186":1,"1297":2,"1300":6,"1311":3,"1324":4,"1337":1,"1339":5,"1344":1,"1416":2,"1431":1,"1436":18,"1447":2,"1465":1,"1467":1,"1577":1,"1582":1,"1583":1,"1600":1,"1637":1,"1666":1,"1670":1,"1698":1,"2000":2,"2003":3,"2116":1,"2170":1}}],["exemptedoffenderfixture",{"3":{"1199":2,"1207":1,"1436":5}}],["exempted",{"3":{"0":1,"135":1,"136":1,"139":1,"179":1,"265":1,"635":1,"749":1,"1168":1,"1212":1,"1286":1,"1311":1,"1324":1,"1431":1,"1436":10,"1447":1,"1467":1,"1771":1,"2043":1}}],["exemptseverytypeunderit",{"3":{"1436":1}}],["exemptsonlythatmember",{"3":{"1436":2}}],["exempts",{"0":{"2001":1},"3":{"0":4,"175":2,"182":1,"239":1,"243":1,"287":1,"484":1,"545":2,"566":1,"792":1,"826":1,"827":1,"829":1,"832":1,"833":2,"881":1,"884":1,"1135":1,"1161":3,"1163":2,"1300":1,"1311":2,"1337":1,"1339":4,"1380":2,"1436":9,"1455":1,"1465":1,"1591":1,"1999":1,"2001":2,"2003":1,"2025":2,"2234":2}}],["extreme",{"3":{"1359":1,"1417":1,"1436":1}}],["extraforbiddendomaindependencies",{"2":{"2106":1},"3":{"1436":2,"1489":1,"2106":1}}],["extrastatefixtureid",{"3":{"1199":2,"1207":1,"1436":9}}],["extras",{"3":{"598":1,"607":2,"752":1,"1034":1,"1309":1,"1324":9,"1359":1,"1395":1,"1436":2,"1441":1,"1666":1}}],["extra",{"3":{"0":1,"13":1,"24":1,"92":1,"94":1,"95":2,"102":1,"265":1,"275":1,"330":1,"351":1,"383":1,"401":1,"405":1,"426":1,"435":1,"454":2,"471":1,"633":1,"640":1,"649":1,"665":1,"683":1,"690":1,"749":1,"768":1,"782":1,"784":1,"827":2,"871":1,"924":1,"996":1,"1027":1,"1050":1,"1186":1,"1227":1,"1228":1,"1229":3,"1247":7,"1252":1,"1254":1,"1259":8,"1265":1,"1270":9,"1276":1,"1284":1,"1286":13,"1300":7,"1309":1,"1310":1,"1311":8,"1320":1,"1323":5,"1324":8,"1326":1,"1337":1,"1338":1,"1339":6,"1345":1,"1350":3,"1359":15,"1369":1,"1374":1,"1380":1,"1385":1,"1395":12,"1396":3,"1402":2,"1415":4,"1417":3,"1436":25,"1438":1,"1441":2,"1447":1,"1467":1,"1475":1,"1476":1,"1496":1,"1627":1,"1648":1,"1682":1,"1693":1,"1702":1,"1727":1,"1755":1,"1783":1,"1808":1,"1826":1,"1839":1,"1847":1,"1851":1,"1867":1,"1898":1,"1901":1,"1908":1,"1926":1,"1949":1,"1970":1,"1971":1,"2109":1,"2132":1,"2152":1,"2171":1,"2195":1}}],["extracttwitterhandle",{"3":{"1359":2}}],["extractability",{"3":{"1312":1,"1436":1}}],["extractable",{"0":{"1509":1},"1":{"1878":1,"1879":1,"1880":1,"1881":1,"1882":1,"1883":1,"1884":1,"1885":1,"1886":1},"3":{"135":1,"692":1,"1192":3,"1202":1,"1203":1,"1212":1,"1257":1,"1269":1,"1350":1,"1359":3,"1369":1,"1396":2,"1415":2,"1416":1,"1436":2,"1496":2,"1526":1,"1544":2,"1576":1,"1577":1,"1590":1,"1591":1,"1662":1,"1686":1,"1878":1,"2209":1,"2216":1,"2232":1}}],["extractname",{"3":{"1311":1}}],["extractclaims",{"3":{"1311":2}}],["extractors",{"3":{"974":1}}],["extractor",{"3":{"973":1,"1496":5,"1498":1}}],["extractgridfilters",{"3":{"881":1,"1324":1}}],["extractsociallinks",{"3":{"1359":1}}],["extractsortparameters",{"3":{"881":1,"1324":1}}],["extracts",{"3":{"350":1,"1289":1,"1311":2,"1324":2,"1339":1,"1396":1,"1436":1,"1453":1,"1672":1,"1780":1,"2074":1,"2157":1,"2206":1,"2216":1,"2223":1}}],["extracting",{"1":{"2016":1,"2017":1,"2018":1,"2019":1,"2020":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1,"2027":1,"2028":1,"2029":1},"3":{"59":1,"734":1,"1109":1,"1247":1,"1259":1,"1270":3,"1286":3,"1300":1,"1311":1,"1324":1,"1339":3,"1350":1,"1359":6,"1395":7,"1396":1,"1416":1,"1436":1,"1544":1,"1646":1,"1779":1,"2015":1,"2016":2,"2074":1,"2211":1}}],["extractions",{"3":{"1496":1}}],["extraction",{"0":{"1307":1,"1790":1,"1866":1,"1884":1,"2010":1},"1":{"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1},"3":{"0":5,"31":1,"35":1,"56":1,"57":1,"59":1,"60":1,"62":3,"64":1,"86":1,"88":2,"126":1,"229":1,"325":1,"326":1,"463":1,"545":1,"548":1,"567":1,"582":3,"584":2,"587":1,"640":1,"645":1,"690":1,"707":1,"733":1,"750":1,"753":1,"773":1,"783":1,"786":1,"827":1,"831":1,"846":1,"882":2,"883":1,"935":1,"954":1,"1025":1,"1034":1,"1035":1,"1212":4,"1213":1,"1214":1,"1259":1,"1270":1,"1286":6,"1287":1,"1288":1,"1300":4,"1301":2,"1303":1,"1309":5,"1311":4,"1312":7,"1313":1,"1314":1,"1320":1,"1323":9,"1324":3,"1349":1,"1350":5,"1359":3,"1380":11,"1383":1,"1395":3,"1396":9,"1415":6,"1416":2,"1436":23,"1446":1,"1447":3,"1450":1,"1453":1,"1489":1,"1496":6,"1526":2,"1530":1,"1531":2,"1532":1,"1535":1,"1576":4,"1577":5,"1586":1,"1602":1,"1638":2,"1646":1,"1648":1,"1652":2,"1654":1,"1656":1,"1657":1,"1663":4,"1684":1,"1691":1,"1697":1,"1717":1,"1724":1,"1781":1,"1783":2,"1787":1,"1788":3,"1790":1,"1793":4,"1815":1,"1842":1,"1848":1,"1853":1,"1863":1,"1866":2,"1882":1,"1886":3,"1892":1,"1895":1,"1899":1,"1926":1,"2010":1,"2017":1,"2029":3,"2030":1,"2031":1,"2044":1,"2055":1,"2096":1,"2113":1,"2115":1,"2116":1,"2211":1,"2229":1,"2236":1}}],["extractdeployedregion",{"2":{"972":1,"973":1,"2044":1},"3":{"0":1,"972":2,"973":1,"1436":3,"1489":1,"2044":1}}],["extract",{"0":{"1656":1,"2211":1},"3":{"0":2,"58":1,"59":1,"62":2,"243":1,"396":1,"743":1,"745":1,"1211":1,"1286":1,"1300":2,"1309":1,"1311":3,"1380":1,"1396":1,"1534":1,"1646":2,"1647":2,"1650":1,"1656":1,"1659":1,"1663":1,"1692":1,"1703":1,"1718":1,"1724":1,"1779":1,"1842":1,"1864":1,"1884":1,"1893":1,"1930":1,"2017":1,"2171":1,"2182":1,"2195":1,"2205":1,"2214":1,"2217":1,"2228":1,"2229":1}}],["extracted",{"3":{"0":6,"20":1,"30":2,"31":2,"32":1,"46":1,"57":1,"59":2,"62":2,"63":1,"95":1,"97":1,"191":1,"323":1,"349":1,"398":1,"447":1,"448":2,"458":1,"459":1,"461":1,"564":1,"572":1,"574":1,"578":1,"582":3,"583":1,"584":2,"586":1,"639":1,"640":2,"649":1,"707":1,"708":1,"725":1,"726":1,"733":1,"749":2,"750":1,"882":1,"918":1,"933":1,"972":2,"998":1,"1192":2,"1213":2,"1229":1,"1248":1,"1252":1,"1259":7,"1270":2,"1273":1,"1286":10,"1287":1,"1297":1,"1300":10,"1301":1,"1302":1,"1307":2,"1309":7,"1310":2,"1311":16,"1312":7,"1320":1,"1323":10,"1324":2,"1339":2,"1350":3,"1359":7,"1370":2,"1380":3,"1385":1,"1391":2,"1395":9,"1396":10,"1402":1,"1404":2,"1409":1,"1413":1,"1415":11,"1431":1,"1436":18,"1438":1,"1440":1,"1444":1,"1455":1,"1489":2,"1495":1,"1496":6,"1508":1,"1576":1,"1577":1,"1600":1,"1651":1,"1656":1,"1663":2,"1763":1,"1780":1,"1781":1,"1783":1,"1790":4,"1805":1,"1838":1,"1848":1,"1868":1,"1882":1,"1884":1,"1888":1,"1892":1,"1896":2,"1897":1,"1899":2,"1916":1,"1925":1,"1927":1,"1929":1,"1948":1,"2006":1,"2019":1,"2020":1,"2021":1,"2022":2,"2023":1,"2056":1,"2068":1,"2113":1,"2133":1,"2137":1,"2157":1,"2232":1,"2234":1}}],["extern",{"3":{"1611":1}}],["externalauthbroker",{"3":{"1417":1}}],["externalauthextensionstests",{"3":{"1199":1,"1207":2}}],["externalauthextensions",{"2":{"1415":1},"3":{"350":2,"980":1,"1199":5,"1203":1,"1207":2,"1208":1,"1300":1,"1311":10,"1324":1,"1415":3,"1496":1}}],["externalizing",{"3":{"1300":1}}],["externalized",{"3":{"265":1,"1311":2,"1324":2,"1394":1,"1395":4,"1396":1,"1416":1,"1549":1,"1554":1,"1564":1,"1653":1,"2085":1}}],["externalize",{"3":{"86":1,"1653":1}}],["externalcontractfixtureservice",{"3":{"1199":1,"1207":1,"1436":2}}],["externalsessionid",{"3":{"1286":1}}],["externals",{"3":{"1193":1,"1229":7,"1237":2,"1259":3,"1286":6,"1300":3,"1301":2,"1309":13,"1311":3,"1323":20,"1324":48,"1339":7,"1359":3,"1380":9,"1395":39,"1396":105,"1402":7,"1415":26,"1416":1,"1417":12,"1436":25}}],["externalprovideralreadylinked",{"2":{"350":1,"352":1,"1977":1},"3":{"350":1,"352":1,"1415":1,"1977":1}}],["externalemailnotverified",{"2":{"350":1,"352":1,"353":1,"354":1,"1406":1,"1977":1},"3":{"0":1,"350":1,"352":2,"353":1,"354":1,"1406":1,"1415":2,"1977":1}}],["externalemailinvalid",{"2":{"350":1,"354":1,"1977":1},"3":{"0":1,"350":1,"354":1,"1415":1,"1977":1}}],["externallinkservice",{"3":{"1417":2}}],["externallinktests",{"3":{"1199":1,"1207":3}}],["externallink",{"2":{"2123":1},"3":{"0":1,"413":1,"1324":1,"1417":7,"1599":2,"2123":1}}],["externallinkrequireslocalsignin",{"2":{"350":1,"353":1,"354":1,"1406":1,"1977":1},"3":{"0":1,"350":1,"353":1,"354":1,"1406":1,"1415":1,"1977":1}}],["externalloginemailverifier",{"3":{"1415":1}}],["externalloginscheme",{"2":{"1415":1},"3":{"1311":2,"1415":1}}],["externallogincoreasync",{"2":{"354":1,"1983":1},"3":{"350":1,"354":1,"1415":1,"1983":1}}],["externalloginnotsupported",{"2":{"350":1,"352":1,"1978":1},"3":{"350":1,"352":1,"1300":1,"1978":1}}],["externalloginasync",{"2":{"350":1,"351":1,"353":1,"354":1,"1975":1,"1977":1,"1978":1,"1979":1},"3":{"350":5,"351":1,"353":1,"354":1,"1289":1,"1300":5,"1311":3,"1406":2,"1415":2,"1975":1,"1977":2,"1978":2,"1979":1}}],["externallogin",{"2":{"352":1,"1975":1,"1979":1},"3":{"0":1,"350":2,"352":1,"1311":2,"1406":1,"1415":4,"1667":1,"1975":2,"1979":1}}],["externallyfixedmethods",{"3":{"1436":2}}],["externally",{"3":{"0":4,"350":1,"831":1,"860":1,"1123":1,"1259":7,"1270":1,"1286":1,"1311":1,"1323":2,"1324":5,"1344":1,"1350":7,"1359":3,"1380":1,"1395":3,"1415":2,"1416":1,"1427":2,"1436":2,"1441":1,"1467":2,"1631":1,"1636":2,"1640":1,"1755":1,"2001":1,"2171":1}}],["external",{"0":{"1213":2,"1636":1,"1752":1,"1770":1,"1975":1},"1":{"347":1,"348":1,"349":1,"350":1,"351":1,"352":1,"353":1,"354":1,"355":1,"1973":1,"1974":1,"1975":1,"1976":1,"1977":1,"1978":1,"1979":1},"2":{"601":1,"1477":1,"1975":1},"3":{"0":3,"150":1,"219":1,"284":1,"291":1,"347":1,"348":2,"349":1,"350":15,"351":3,"352":1,"353":4,"355":2,"415":1,"419":1,"440":1,"459":1,"497":1,"499":2,"502":2,"503":1,"519":1,"535":1,"536":1,"537":1,"538":1,"599":1,"601":1,"657":2,"660":1,"706":1,"792":1,"809":1,"810":2,"812":1,"840":1,"862":1,"926":1,"946":1,"948":2,"950":1,"988":1,"996":1,"1004":2,"1073":1,"1074":1,"1090":2,"1188":1,"1191":2,"1192":3,"1202":1,"1203":1,"1210":2,"1212":1,"1237":3,"1258":1,"1259":5,"1270":1,"1271":3,"1286":4,"1289":1,"1298":1,"1300":6,"1301":1,"1309":2,"1311":9,"1323":6,"1324":11,"1339":2,"1340":1,"1342":1,"1344":1,"1347":2,"1350":7,"1352":1,"1355":1,"1358":1,"1359":47,"1369":30,"1380":2,"1391":2,"1395":9,"1396":2,"1402":1,"1405":1,"1406":2,"1412":1,"1415":30,"1416":2,"1417":21,"1418":1,"1427":5,"1436":2,"1438":4,"1454":1,"1455":2,"1467":9,"1477":2,"1487":1,"1496":3,"1534":1,"1546":1,"1553":1,"1599":2,"1629":1,"1633":1,"1639":1,"1640":1,"1641":2,"1667":3,"1669":3,"1737":1,"1749":1,"1779":1,"1902":1,"1972":1,"1973":2,"1974":2,"1975":5,"1977":6,"1978":1,"1979":5,"1983":2,"2001":1,"2069":1,"2123":1,"2124":1,"2128":1,"2163":1,"2170":2,"2171":1,"2173":1,"2210":1,"2234":1}}],["extexp0001",{"3":{"1591":1}}],["extensibility",{"2":{"960":1,"1067":1},"3":{"846":1,"850":1,"960":1,"980":1,"1067":1,"1176":1,"1178":1,"1207":1,"1208":1,"1247":6,"1270":1,"1280":1,"1316":1,"1317":1,"1323":7,"1339":1,"1415":2}}],["extensible",{"3":{"235":1,"920":1,"1270":2,"1311":1,"1350":1,"1359":1,"1369":1,"1395":1,"1666":1}}],["extensiont",{"3":{"1427":1}}],["extensionof",{"3":{"1395":2}}],["extensionmarkerattribute",{"2":{"984":1},"3":{"980":1,"984":1}}],["extensions",{"0":{"1444":1},"2":{"63":1,"171":2,"253":1,"395":1,"409":1,"451":1,"452":1,"665":1,"676":1,"732":1,"733":1,"833":1,"917":1,"1090":1,"1091":1,"1213":2,"1247":1,"1259":1,"1270":1,"1301":2,"1311":2,"1312":3,"1323":2,"1324":1,"1329":2,"1339":4,"1369":1,"1417":1,"1427":6,"1611":1,"1915":1,"1916":1,"2013":1,"2179":1,"2180":1,"2182":1},"3":{"0":3,"61":1,"63":1,"72":2,"166":2,"171":3,"235":3,"237":1,"238":2,"253":1,"255":1,"256":1,"258":2,"259":1,"261":1,"395":1,"397":25,"399":3,"400":3,"401":3,"402":11,"404":4,"407":6,"408":5,"409":3,"451":1,"452":1,"640":3,"665":2,"673":1,"674":1,"676":1,"732":1,"733":1,"819":2,"821":1,"822":1,"827":1,"833":2,"883":2,"884":1,"897":1,"899":1,"900":1,"913":2,"917":1,"920":1,"926":1,"980":6,"982":1,"1006":1,"1018":1,"1034":3,"1037":1,"1066":1,"1090":1,"1091":4,"1103":1,"1199":13,"1202":1,"1203":10,"1207":42,"1208":12,"1213":4,"1229":1,"1236":2,"1237":7,"1247":4,"1259":4,"1270":16,"1271":8,"1278":1,"1286":18,"1296":2,"1300":8,"1301":6,"1309":12,"1311":13,"1312":3,"1323":26,"1324":39,"1325":1,"1326":7,"1327":5,"1329":5,"1332":11,"1333":8,"1334":4,"1337":1,"1339":108,"1350":3,"1359":22,"1369":5,"1380":3,"1382":1,"1395":7,"1396":15,"1415":16,"1416":1,"1417":5,"1422":1,"1425":2,"1427":26,"1436":17,"1437":2,"1438":4,"1441":25,"1442":2,"1443":47,"1444":27,"1448":1,"1450":3,"1467":1,"1487":1,"1496":12,"1535":1,"1575":1,"1577":7,"1583":1,"1586":1,"1591":1,"1611":1,"1656":1,"1662":1,"1666":1,"1670":1,"1671":1,"1707":1,"1783":1,"1827":1,"1915":1,"1916":1,"2013":1,"2158":19,"2159":1,"2161":4,"2179":1,"2180":1,"2182":1}}],["extension",{"0":{"1208":1,"2177":1},"1":{"843":1,"844":1,"845":1,"846":1,"847":1,"848":1,"849":1,"850":1,"977":1,"978":1,"979":1,"980":1,"981":1,"982":1,"983":1,"984":1},"2":{"180":1,"388":1,"980":1,"982":1,"983":1,"1204":1,"1327":1,"1354":1,"1418":1,"1831":1},"3":{"0":20,"39":2,"41":1,"48":1,"68":1,"71":1,"76":1,"80":1,"95":1,"99":1,"109":3,"110":1,"133":1,"164":2,"165":1,"167":1,"180":1,"200":1,"214":1,"215":1,"243":1,"258":3,"265":1,"266":1,"295":1,"300":1,"301":1,"306":1,"341":2,"342":1,"358":1,"388":1,"411":1,"413":1,"415":1,"434":2,"438":2,"443":2,"511":1,"549":3,"574":1,"614":1,"649":2,"724":2,"725":1,"728":1,"749":1,"751":2,"766":1,"826":1,"827":2,"833":1,"843":1,"844":1,"845":1,"847":1,"859":2,"861":2,"889":1,"914":1,"922":1,"926":1,"972":1,"976":1,"977":1,"979":4,"980":20,"981":3,"982":1,"983":3,"984":2,"1004":1,"1033":1,"1034":1,"1059":2,"1067":1,"1089":3,"1116":3,"1117":1,"1119":1,"1124":2,"1125":1,"1126":2,"1204":1,"1211":1,"1212":10,"1214":7,"1224":1,"1225":1,"1229":7,"1236":2,"1237":12,"1239":1,"1243":1,"1244":1,"1245":1,"1247":10,"1258":1,"1259":7,"1262":2,"1265":2,"1270":19,"1271":15,"1280":1,"1281":2,"1282":1,"1285":1,"1286":64,"1297":1,"1300":20,"1301":3,"1304":1,"1309":15,"1310":1,"1311":54,"1312":12,"1313":1,"1314":1,"1316":2,"1323":19,"1324":57,"1326":1,"1327":1,"1334":1,"1336":1,"1339":62,"1340":1,"1347":3,"1350":6,"1354":1,"1359":18,"1368":1,"1369":4,"1377":1,"1378":1,"1379":3,"1380":9,"1382":1,"1389":2,"1392":2,"1395":27,"1396":42,"1398":1,"1400":2,"1402":5,"1415":15,"1416":3,"1417":20,"1418":1,"1420":1,"1421":2,"1423":4,"1424":1,"1427":15,"1429":1,"1430":2,"1431":1,"1432":1,"1433":2,"1435":2,"1436":59,"1438":3,"1441":7,"1442":1,"1444":1,"1456":2,"1487":1,"1488":9,"1496":3,"1500":1,"1526":1,"1575":2,"1577":5,"1582":2,"1585":3,"1586":1,"1599":1,"1619":1,"1631":2,"1634":2,"1640":1,"1648":1,"1651":2,"1658":1,"1666":1,"1693":1,"1735":1,"1769":1,"1784":1,"1799":1,"1801":1,"1810":1,"1815":1,"1823":2,"1825":2,"1831":1,"1851":1,"1860":3,"1861":1,"1868":1,"1871":1,"1874":1,"1880":1,"1891":1,"1892":2,"1903":1,"1919":1,"1926":1,"2023":1,"2043":1,"2064":1,"2077":1,"2079":1,"2090":1,"2105":1,"2115":1,"2124":1,"2127":1,"2128":1,"2130":1,"2139":1,"2150":1,"2151":1,"2154":1,"2177":1,"2182":2,"2205":1,"2222":1,"2229":1,"2234":3}}],["extending",{"3":{"890":1,"1040":1,"1043":1,"1286":1,"1324":1,"1339":1,"1348":1,"1349":1,"1350":1,"1395":3,"1402":3,"1467":1,"2194":1,"2234":1}}],["extend",{"3":{"0":3,"175":1,"189":1,"237":1,"572":1,"658":1,"694":1,"706":1,"749":1,"854":1,"926":1,"1229":1,"1247":2,"1259":1,"1280":1,"1286":2,"1294":1,"1300":4,"1310":1,"1311":5,"1323":2,"1324":1,"1359":2,"1395":4,"1396":3,"1402":1,"1413":1,"1436":3,"1455":1,"1488":2,"1571":1,"1595":1,"1596":1,"1597":1,"1600":1,"1641":1,"1685":1,"2044":1,"2196":1,"2234":1}}],["extends",{"3":{"0":5,"66":1,"295":1,"376":1,"532":1,"549":2,"600":1,"660":1,"686":1,"745":1,"823":1,"825":2,"852":1,"914":1,"920":1,"937":1,"976":1,"981":1,"998":1,"1032":1,"1057":1,"1089":1,"1096":1,"1114":1,"1176":1,"1182":1,"1192":1,"1212":3,"1227":1,"1237":3,"1249":1,"1259":3,"1270":1,"1271":2,"1281":1,"1286":11,"1291":2,"1300":3,"1311":7,"1322":1,"1324":3,"1339":6,"1350":1,"1359":4,"1380":2,"1395":25,"1396":4,"1406":1,"1410":1,"1412":1,"1415":4,"1417":1,"1418":1,"1431":1,"1436":3,"1443":1,"1467":2,"1488":3,"1489":2,"1566":1,"1576":1,"1591":1,"1765":1,"1805":1,"1853":1,"1856":1,"1905":1,"2039":1,"2050":1,"2234":7}}],["extended",{"3":{"0":3,"15":1,"328":1,"674":1,"690":1,"701":1,"834":1,"889":1,"920":1,"1016":1,"1160":1,"1169":1,"1217":1,"1229":1,"1271":2,"1286":4,"1300":1,"1311":4,"1323":1,"1324":2,"1339":2,"1359":2,"1396":1,"1415":1,"1417":4,"1436":5,"1438":1,"1496":2,"1538":1,"1855":1,"1940":1,"2013":1,"2234":1}}],["expr",{"3":{"1247":1}}],["expressiveness",{"3":{"1359":3}}],["expressible",{"3":{"699":1,"823":1,"1229":1,"1270":1,"1286":1,"1309":2,"1311":1,"1359":5,"1402":1,"1415":2,"1416":2,"1417":1}}],["expressing",{"3":{"57":1,"691":1,"926":1,"1041":1,"1275":1,"1309":1,"1311":1,"1323":1,"1324":3,"1350":2,"1359":4,"1395":1,"1402":1,"1415":1,"1844":1,"2185":1}}],["expressionboundliteraltrue",{"3":{"1436":1}}],["expression<",{"3":{"1359":5}}],["expressionsortabletemplatecolumngrid",{"3":{"1436":2}}],["expressions",{"3":{"359":1,"365":1,"434":1,"545":1,"1020":1,"1091":1,"1227":1,"1229":1,"1237":1,"1242":1,"1247":15,"1259":1,"1270":1,"1271":3,"1286":10,"1310":3,"1323":5,"1324":3,"1339":3,"1353":1,"1359":21,"1395":1,"1396":6,"1415":1,"1436":3,"2144":1}}],["expressionvisitor",{"2":{"1817":1,"1859":1},"3":{"0":1,"545":1,"549":1,"1239":1,"1247":2,"1431":1,"1436":2,"1815":1,"1817":1,"1859":1}}],["expression",{"2":{"547":1,"1238":1,"1242":1,"1817":1,"1859":2},"3":{"0":3,"6":1,"318":2,"319":1,"330":1,"332":1,"523":1,"543":2,"545":7,"546":2,"547":3,"548":1,"549":5,"556":1,"633":1,"651":1,"655":1,"657":1,"660":1,"676":1,"697":1,"698":2,"699":1,"707":4,"709":1,"726":1,"1050":1,"1091":1,"1213":1,"1214":1,"1219":1,"1229":3,"1231":1,"1237":7,"1238":1,"1239":9,"1242":3,"1247":79,"1252":1,"1259":6,"1268":1,"1269":2,"1270":9,"1271":21,"1273":1,"1286":51,"1300":16,"1301":3,"1305":1,"1309":13,"1310":17,"1311":8,"1312":1,"1323":26,"1324":21,"1339":12,"1350":14,"1353":2,"1359":139,"1369":3,"1372":1,"1380":6,"1395":16,"1396":25,"1402":10,"1415":18,"1416":3,"1417":6,"1426":1,"1427":1,"1431":1,"1436":38,"1438":1,"1453":1,"1458":1,"1465":1,"1467":1,"1475":2,"1490":1,"1577":1,"1591":1,"1599":1,"1687":1,"1689":1,"1727":2,"1815":8,"1817":4,"1829":4,"1859":3,"1865":2,"1920":1,"1948":2,"1952":1,"1953":1,"1955":2,"1988":3,"1989":1,"1991":1,"1992":1,"1995":1,"2074":1,"2091":1,"2178":1,"2198":1}}],["expressed",{"3":{"0":1,"59":1,"136":1,"243":1,"319":1,"464":1,"509":1,"530":1,"729":1,"781":1,"784":1,"836":1,"837":1,"838":2,"842":1,"1091":1,"1237":3,"1247":1,"1255":1,"1259":1,"1263":1,"1270":3,"1271":2,"1273":1,"1278":1,"1283":1,"1286":6,"1300":6,"1309":2,"1311":2,"1323":3,"1324":3,"1339":7,"1343":1,"1350":8,"1353":1,"1359":29,"1369":1,"1380":1,"1395":6,"1396":13,"1402":2,"1415":6,"1417":2,"1436":5,"1441":1,"1455":1,"1460":1,"1465":1,"1467":1,"1491":1,"1526":1,"1656":1,"1727":1,"1833":1}}],["expresses",{"3":{"0":1,"691":1,"708":2,"783":1,"809":1,"810":1,"954":1,"1231":1,"1237":2,"1247":1,"1271":1,"1286":2,"1300":2,"1301":1,"1309":1,"1338":1,"1359":8,"1380":3,"1395":2,"1396":1,"1417":1,"1436":1,"1455":1,"1540":1,"2043":1}}],["express",{"3":{"0":2,"187":1,"189":1,"203":1,"317":1,"523":1,"547":1,"608":1,"610":1,"675":1,"733":1,"743":1,"810":1,"819":2,"820":1,"855":1,"861":1,"862":1,"889":1,"926":1,"1102":1,"1115":1,"1116":1,"1134":1,"1229":1,"1237":1,"1247":2,"1259":1,"1270":3,"1271":1,"1276":1,"1286":8,"1300":1,"1301":1,"1311":1,"1323":6,"1324":3,"1339":2,"1342":1,"1348":1,"1350":3,"1352":1,"1353":1,"1357":1,"1359":17,"1361":1,"1362":1,"1369":1,"1373":2,"1380":3,"1395":14,"1396":3,"1402":2,"1416":1,"1431":1,"1436":6,"1441":1,"1453":3,"1467":1,"1474":1,"1490":2,"1537":1,"1816":1,"1856":1,"1898":1,"1960":1,"1965":1,"1990":1,"1993":1,"1998":1,"2149":1}}],["exp",{"2":{"500":1,"1980":1},"3":{"499":1,"500":1,"1300":6,"1577":1,"1980":1,"1982":1}}],["expansion",{"3":{"86":1,"265":1,"1259":2,"1286":7,"1324":1,"1436":6,"1438":2,"1454":1,"1526":3,"1534":1,"1564":1,"1577":1,"1639":1}}],["expanding",{"3":{"1277":1,"1286":1,"1475":1}}],["expandoobject",{"3":{"1242":1,"1244":1,"1247":6}}],["expandrelational",{"2":{"698":1,"703":1},"3":{"698":1,"703":1,"1286":1}}],["expands",{"3":{"442":1,"674":1,"869":1,"1259":1,"1286":2,"1300":1,"1311":1,"1436":3,"1454":1,"1847":1}}],["expandedsessions",{"3":{"1395":1}}],["expanded",{"3":{"27":1,"135":1,"468":2,"476":1,"1243":1,"1247":1,"1256":1,"1276":1,"1286":1,"1310":1,"1339":1,"1395":1,"1436":4,"1577":1,"1988":1}}],["expand",{"1":{"561":1,"562":1,"563":1,"564":1,"565":1,"566":1,"567":1,"568":1},"3":{"0":6,"15":1,"26":2,"41":1,"293":2,"296":1,"561":1,"564":6,"566":2,"756":2,"759":1,"761":1,"891":1,"892":1,"893":2,"907":2,"932":1,"1012":1,"1018":1,"1212":2,"1275":1,"1276":2,"1286":11,"1311":3,"1395":3,"1436":1,"1455":6,"1459":1,"1461":2,"1526":2,"1545":2,"1577":2,"1591":2,"1600":1,"1664":1,"1728":1,"2234":2}}],["expert",{"3":{"2226":1,"2242":1}}],["expertise",{"3":{"1369":1,"2220":1}}],["experiment",{"3":{"1300":2}}],["experiences",{"3":{"860":1,"1417":1}}],["experience",{"0":{"1570":1,"2222":1},"2":{"1327":1},"3":{"820":1,"1051":1,"1216":1,"1259":1,"1271":1,"1286":2,"1311":1,"1323":5,"1324":5,"1327":1,"1339":4,"1350":1,"1354":1,"1359":1,"1396":4,"1402":1,"1415":1,"1416":2,"1417":5,"1436":12,"1440":1,"1450":1,"1456":1,"1461":1,"1464":2,"1486":1,"1488":1,"1492":1,"1493":1,"1499":1,"1526":1,"1535":1,"1554":1,"1577":1,"1581":1,"1582":1,"1583":1,"1591":1,"1597":1,"1605":1,"1739":1,"1750":2,"1796":1,"1956":1,"2133":1,"2222":1,"2242":1}}],["experienced",{"3":{"513":1,"1190":1,"2097":1}}],["expecting",{"3":{"1270":1,"1415":1,"1438":1}}],["expects",{"3":{"185":1,"564":1,"634":1,"743":1,"827":1,"831":1,"965":1,"1259":1,"1270":2,"1271":1,"1286":3,"1300":1,"1309":1,"1311":2,"1323":2,"1324":7,"1350":1,"1359":1,"1395":2,"1396":1,"1417":1,"1436":6,"1467":1,"1639":1,"1887":1,"1888":1,"1892":1,"2169":1}}],["expect",{"3":{"77":1,"139":1,"812":1,"1036":1,"1214":1,"1237":1,"1270":1,"1286":1,"1309":1,"1311":1,"1359":1,"1395":1,"1406":1,"1577":1,"1582":1,"1685":1,"1686":1,"1719":1,"1852":1,"1887":1,"2069":1,"2108":1,"2162":1}}],["expectations",{"3":{"689":1,"1270":1,"1300":1,"1301":1,"1436":5,"1455":1,"1547":1,"2034":1}}],["expectation",{"3":{"23":1,"572":1,"585":1,"838":2,"1090":1,"1286":1,"1300":1,"1309":1,"1311":1,"1323":1,"1359":1,"1395":1,"1436":6,"1438":1,"1492":1,"1591":1,"1596":1,"1899":1}}],["expecteddisabledstubs",{"3":{"1436":1}}],["expecteddependencies",{"3":{"1436":5,"1438":1}}],["expectedrequiresdependencies",{"3":{"1436":5,"1438":1}}],["expectedname",{"3":{"1436":10,"1438":1}}],["expectedsecret",{"3":{"1339":1}}],["expectedstepnames",{"3":{"459":1,"464":1,"1311":1,"1436":3,"1488":1}}],["expectedcontract",{"2":{"635":1,"1729":1,"2091":1,"2109":1},"3":{"633":1,"635":1,"1436":6,"1654":1,"1727":1,"1729":1,"2091":1,"2109":1}}],["expectedcommanddecorators",{"2":{"121":1},"3":{"1436":1}}],["expectedquerydecorators",{"2":{"121":1},"3":{"1436":1}}],["expected",{"3":{"0":3,"68":1,"108":2,"109":2,"110":1,"111":1,"126":1,"127":1,"130":1,"132":1,"137":1,"140":1,"141":1,"142":1,"243":1,"386":1,"472":1,"530":1,"565":1,"635":1,"757":1,"765":1,"790":1,"972":1,"973":1,"996":1,"1018":1,"1020":1,"1049":1,"1163":1,"1212":3,"1215":1,"1217":2,"1218":1,"1229":4,"1259":1,"1261":1,"1262":1,"1268":1,"1270":5,"1273":1,"1275":1,"1286":4,"1287":1,"1288":1,"1300":3,"1311":4,"1312":1,"1318":1,"1323":10,"1324":7,"1339":1,"1350":3,"1359":3,"1380":1,"1395":13,"1396":8,"1402":3,"1413":1,"1415":3,"1417":3,"1436":27,"1449":1,"1453":3,"1455":8,"1459":1,"1460":1,"1461":1,"1465":2,"1486":2,"1488":3,"1489":1,"1490":1,"1492":4,"1524":5,"1525":5,"1526":1,"1575":5,"1576":5,"1577":2,"1586":1,"1589":5,"1638":1,"1720":1,"1804":2,"1806":1,"1807":3,"1820":1,"1826":1,"1877":1,"1887":1,"1897":2,"1923":1,"1927":1,"1930":1,"1945":1,"1954":2,"1959":1,"2059":1,"2106":1,"2107":1,"2109":1,"2131":1,"2158":1,"2193":1,"2229":1,"2232":1,"2234":2}}],["expensive",{"0":{"2192":1},"3":{"0":4,"81":1,"108":1,"111":1,"176":1,"234":1,"311":1,"474":1,"516":1,"518":3,"519":1,"520":1,"619":1,"627":1,"683":1,"735":1,"776":1,"800":1,"811":2,"830":1,"921":1,"953":2,"965":1,"1049":1,"1051":2,"1066":1,"1067":1,"1099":3,"1100":1,"1104":1,"1123":1,"1218":1,"1229":2,"1237":1,"1247":2,"1270":4,"1286":1,"1310":1,"1324":1,"1328":1,"1339":2,"1359":5,"1395":3,"1396":2,"1417":1,"1436":5,"1441":1,"1455":2,"1475":1,"1490":1,"1555":1,"1684":1,"1804":1,"1812":1,"1840":1,"1854":1,"1862":1,"1901":1,"1902":1,"1905":1,"1907":1,"1958":1,"1999":1,"2000":1,"2001":1,"2003":1,"2157":2,"2160":1,"2162":2,"2176":1,"2192":1}}],["expiries",{"3":{"1270":1,"1323":1}}],["expiring",{"3":{"534":1,"539":1,"1292":1,"1324":1,"1396":2,"1436":1,"1438":1}}],["expiryrule",{"3":{"1436":6}}],["expiryskew",{"3":{"1324":7,"1417":2}}],["expiryinpast",{"3":{"1300":1}}],["expiry",{"3":{"0":7,"150":1,"159":1,"201":1,"207":2,"209":1,"243":1,"255":1,"302":1,"305":2,"372":1,"458":1,"474":1,"497":2,"498":1,"499":6,"500":1,"505":1,"506":1,"507":2,"509":1,"513":1,"514":1,"529":1,"534":2,"536":3,"537":2,"538":1,"539":3,"627":1,"628":1,"708":1,"853":1,"854":1,"855":1,"905":2,"906":1,"998":1,"1160":1,"1162":1,"1212":3,"1263":1,"1267":1,"1270":1,"1288":1,"1298":2,"1300":31,"1301":3,"1311":2,"1323":5,"1324":14,"1332":1,"1396":5,"1415":3,"1417":2,"1436":12,"1438":2,"1630":1,"1635":1,"1639":2,"1641":4,"1764":1,"1765":2,"1767":3,"1922":1,"1968":4,"1971":1,"1980":1,"1981":1,"1982":3,"1984":1,"1985":1,"2003":1,"2044":1,"2068":2,"2071":1,"2098":1,"2140":2,"2169":3,"2195":1}}],["expiration",{"3":{"0":1,"243":3,"259":1,"388":3,"389":1,"733":4,"1300":1,"1301":24,"1311":7,"1668":1,"1708":1,"1922":2,"1923":1}}],["expireorderasync",{"3":{"2169":1}}],["expireunpaidorderinternalcommand",{"2":{"539":1,"813":1,"814":1,"2191":1},"3":{"539":2,"813":1,"814":1,"2191":1}}],["expireunpaidorderinternalcommandhandler",{"2":{"539":1,"674":1},"3":{"539":2,"674":2,"813":1}}],["expireunpaidorder",{"2":{"534":1,"794":1,"2169":1},"3":{"0":1,"534":1,"794":1,"2169":1}}],["expirestrandedunpaidordersasync",{"2":{"2169":1},"3":{"2169":1}}],["expiresin",{"3":{"1641":2}}],["expiresatunixseconds",{"3":{"1300":5}}],["expiresat",{"3":{"905":3,"1300":3,"1339":2,"1436":1}}],["expires",{"3":{"0":2,"19":1,"20":1,"27":1,"392":1,"458":2,"459":2,"460":1,"461":1,"498":1,"536":1,"707":1,"788":1,"793":2,"794":1,"881":1,"905":1,"907":1,"1028":1,"1029":1,"1044":1,"1074":1,"1183":1,"1255":1,"1259":6,"1270":3,"1275":1,"1294":1,"1300":8,"1301":3,"1311":6,"1318":1,"1323":4,"1324":5,"1339":1,"1359":1,"1395":2,"1396":4,"1417":2,"1429":1,"1436":1,"1438":1,"1467":1,"1639":1,"1641":5,"1841":1,"1909":1,"1911":1,"1917":1,"1918":1,"1922":1,"1947":1,"1981":1,"2068":2,"2098":1,"2165":1,"2169":1,"2171":1,"2191":1,"2194":1}}],["expiredflag",{"3":{"1436":2}}],["expired",{"2":{"790":1,"1770":1},"3":{"0":2,"350":1,"499":2,"500":1,"513":1,"536":3,"608":1,"612":1,"768":1,"790":1,"813":1,"853":2,"854":1,"855":1,"856":1,"904":1,"905":5,"996":1,"997":1,"1026":1,"1042":1,"1212":1,"1255":1,"1263":1,"1270":5,"1286":2,"1287":1,"1288":1,"1289":1,"1290":3,"1294":1,"1298":1,"1300":43,"1301":2,"1311":1,"1323":7,"1324":16,"1358":1,"1359":3,"1380":1,"1396":1,"1408":1,"1415":3,"1431":1,"1436":4,"1467":1,"1641":5,"1708":2,"1747":1,"1765":3,"1770":1,"1897":1,"1916":1,"1934":1,"1948":1,"1968":2,"1972":1,"1975":1,"1982":5,"1985":4,"2160":2,"2165":1,"2169":2,"2190":1}}],["expire",{"3":{"0":1,"536":1,"540":1,"793":1,"1270":1,"1283":1,"1286":1,"1300":2,"1301":1,"1311":2,"1324":3,"1395":1,"1415":1,"1436":1,"1438":1,"1631":1,"1635":1,"1767":3,"2165":1,"2199":1}}],["expo",{"3":{"1340":1,"1342":1,"1350":3,"1359":3,"1395":1}}],["exponent",{"3":{"279":1,"1259":1,"1275":1,"1286":1,"1292":1}}],["exponentially",{"3":{"1841":1}}],["exponential",{"3":{"0":4,"15":1,"19":1,"23":1,"72":1,"73":1,"150":1,"175":1,"281":1,"282":1,"285":1,"640":1,"818":1,"827":1,"881":1,"1041":1,"1212":1,"1256":1,"1259":2,"1275":1,"1292":1,"1300":2,"1323":4,"1324":3,"1330":1,"1339":2,"1395":1,"1396":2,"1415":1,"1526":1,"1576":1,"1577":1,"1641":1,"1665":2,"1667":1,"1707":1,"1842":1,"1903":1,"1910":1,"2001":1,"2002":1,"2003":2,"2076":1,"2185":1,"2234":1}}],["exposing",{"3":{"41":1,"60":1,"188":1,"206":1,"225":1,"300":1,"413":1,"939":1,"1237":2,"1239":2,"1270":4,"1286":5,"1300":2,"1309":3,"1311":5,"1312":1,"1323":3,"1324":7,"1339":1,"1350":6,"1359":7,"1368":1,"1369":2,"1380":1,"1382":1,"1395":3,"1396":3,"1402":1,"1415":4,"1417":3,"1431":1,"1436":6,"1488":2,"1651":1,"1815":1,"1831":1,"1962":1,"1964":1,"2024":1}}],["exposure",{"3":{"0":1,"177":1,"459":2,"461":1,"465":1,"481":1,"498":1,"501":2,"520":1,"691":1,"735":1,"792":1,"799":2,"801":1,"802":1,"981":1,"1019":1,"1135":1,"1237":1,"1247":2,"1270":2,"1286":1,"1300":4,"1307":1,"1311":2,"1323":1,"1324":2,"1359":7,"1396":3,"1424":1,"1436":3,"1477":1,"1492":1,"1524":1,"1532":1,"1534":1,"1641":1,"1923":1,"1980":1}}],["expose",{"0":{"1291":1},"3":{"76":1,"141":1,"397":1,"507":1,"545":1,"940":1,"1168":2,"1237":1,"1247":2,"1270":1,"1280":1,"1300":3,"1310":1,"1311":8,"1312":1,"1323":2,"1324":2,"1333":1,"1339":3,"1350":1,"1359":2,"1372":1,"1380":1,"1395":3,"1396":4,"1436":12,"1442":1,"1445":2,"1488":1,"1600":1,"1667":1,"1810":1,"1877":1,"1928":1,"1955":1,"1992":1,"2035":1,"2195":1,"2241":1}}],["exposes",{"3":{"0":4,"24":1,"31":1,"68":1,"78":1,"81":1,"102":1,"160":1,"174":1,"243":1,"329":1,"330":1,"341":1,"459":1,"469":1,"507":1,"545":1,"547":2,"549":1,"578":1,"599":1,"618":1,"649":1,"657":1,"698":1,"725":1,"727":1,"840":1,"854":1,"869":1,"905":1,"924":1,"959":1,"988":1,"996":1,"1018":1,"1042":1,"1059":1,"1060":1,"1067":1,"1083":1,"1123":1,"1161":1,"1168":1,"1175":2,"1212":1,"1237":4,"1239":1,"1241":2,"1244":1,"1247":6,"1257":1,"1259":1,"1264":5,"1267":1,"1270":5,"1273":1,"1285":1,"1286":13,"1287":1,"1290":1,"1293":1,"1296":1,"1300":14,"1301":5,"1303":1,"1306":1,"1309":2,"1310":3,"1311":10,"1316":2,"1318":1,"1320":1,"1323":5,"1324":11,"1332":1,"1336":1,"1337":1,"1339":2,"1341":1,"1342":1,"1350":8,"1359":12,"1366":1,"1369":5,"1371":2,"1378":2,"1379":1,"1380":6,"1383":1,"1385":1,"1395":14,"1396":17,"1400":1,"1402":2,"1408":1,"1415":12,"1416":3,"1417":8,"1420":2,"1421":1,"1427":2,"1429":2,"1431":2,"1432":1,"1435":1,"1436":15,"1441":1,"1444":1,"1453":1,"1455":1,"1465":1,"1467":1,"1488":2,"1526":1,"1577":2,"1607":1,"1630":3,"1651":1,"1662":1,"1664":2,"1667":1,"1715":1,"1741":1,"1755":1,"1776":2,"1782":1,"1790":1,"1794":1,"1810":2,"1811":1,"1815":2,"1816":1,"1857":1,"1871":1,"1875":1,"1889":1,"1918":1,"1932":1,"1982":1,"1988":1,"2008":1,"2015":1,"2022":1,"2058":1,"2094":1,"2100":1,"2106":1,"2124":1,"2128":1,"2158":1,"2187":1}}],["exposed",{"3":{"0":2,"53":1,"92":1,"93":1,"94":1,"100":1,"130":1,"156":1,"160":1,"207":1,"243":1,"292":1,"305":1,"599":1,"743":1,"751":1,"881":1,"883":1,"924":1,"1050":1,"1100":2,"1228":1,"1237":3,"1239":1,"1240":1,"1247":2,"1259":1,"1262":1,"1270":4,"1286":3,"1290":1,"1297":1,"1300":9,"1310":1,"1311":4,"1312":4,"1323":6,"1324":4,"1330":1,"1339":4,"1343":1,"1347":1,"1350":11,"1354":1,"1359":12,"1369":2,"1380":2,"1391":1,"1395":2,"1396":4,"1398":1,"1402":3,"1407":2,"1415":1,"1416":2,"1432":1,"1436":11,"1441":1,"1467":1,"1475":1,"1548":1,"1550":1,"1591":1,"1630":2,"1632":2,"1639":3,"1641":1,"1647":1,"1670":1,"1755":1,"1765":1,"1776":1,"1790":1,"1937":1,"2077":1,"2140":1}}],["exportforbidden",{"3":{"1323":2,"1415":1}}],["exportfilenameprefix",{"3":{"741":1,"1311":1}}],["exportparameters",{"3":{"1300":1}}],["exporting",{"3":{"1264":1,"1270":1,"1300":1,"1309":1,"1359":1,"1415":3,"1416":1,"1436":1,"1455":1,"1467":2}}],["exportcalendarasync",{"3":{"1380":2}}],["exportcalendar",{"3":{"1203":5,"1207":16,"1300":6,"1350":1,"1356":3,"1359":15,"1438":1,"1496":1}}],["exportcontenttype",{"3":{"725":1,"1311":2}}],["exporttestcontroller",{"3":{"1199":2,"1207":1}}],["exporttestentity",{"3":{"1199":8,"1207":1}}],["exporttestdto",{"3":{"1199":6,"1207":1}}],["exportmoney",{"3":{"1199":3,"1207":1}}],["exportrowscoperequirederrorcode",{"3":{"1311":1}}],["exportrow",{"3":{"1199":2,"1207":1}}],["exportrowlimitheadername",{"2":{"741":1},"3":{"741":1,"1311":1}}],["exportability",{"3":{"744":1}}],["exportable",{"3":{"725":1,"743":1,"1311":1,"1356":1,"1359":5,"1487":1}}],["exportasync",{"2":{"318":1,"324":2,"743":1},"3":{"318":2,"324":2,"725":1,"741":3,"743":4,"1311":14,"1323":2,"1359":1,"1372":2,"1380":17,"1415":5,"1438":1,"1496":1,"1996":1}}],["exportuserdataregistrationtests",{"3":{"1199":1,"1207":2,"1415":2,"1438":2}}],["exportuserdatahandler",{"3":{"724":4,"1199":3,"1203":1,"1207":2,"1300":2,"1309":1,"1323":3,"1396":5,"1410":2,"1415":22,"1535":1,"1600":1}}],["exportuserdatahandlertests",{"2":{"724":1},"3":{"724":1,"1199":1,"1207":3,"1415":2,"1438":2}}],["exportuserdatahandlerbasetests",{"3":{"1199":1,"1207":7,"1323":4,"1438":2}}],["exportuserdatahandlerbase",{"2":{"723":1,"725":1,"1299":1,"1403":1,"1672":1,"2069":1},"3":{"0":1,"723":1,"725":3,"727":1,"728":1,"1199":4,"1203":1,"1207":2,"1212":1,"1270":2,"1299":1,"1300":11,"1322":5,"1323":18,"1403":1,"1410":1,"1415":11,"1438":1,"1496":2,"1672":1,"2069":1}}],["exportuserdataquery",{"2":{"723":1,"726":1},"3":{"726":1,"1199":6,"1203":1,"1207":2,"1311":1,"1323":3,"1410":2,"1415":8}}],["exportuserdata",{"2":{"1500":1},"3":{"585":1,"724":2,"725":4,"727":1,"728":1,"1203":8,"1207":26,"1300":4,"1309":1,"1322":2,"1323":17,"1396":2,"1410":3,"1415":21,"1438":1,"1500":1}}],["exporteventcalendarhandlertests",{"3":{"1199":1,"1207":2,"1359":2,"1438":1}}],["exporteventcalendarhandler",{"3":{"1199":2,"1203":1,"1207":2,"1300":5,"1356":6,"1359":6,"1438":1}}],["exporteventcalendarquery",{"3":{"1199":5,"1203":1,"1207":2,"1359":3,"1380":1,"1496":1}}],["exporter",{"2":{"397":1,"1333":1,"2011":1,"2158":1,"2161":1},"3":{"395":1,"397":2,"399":1,"741":4,"744":1,"1213":1,"1311":6,"1333":2,"1339":6,"1443":3,"1467":1,"2011":2,"2158":1,"2161":1,"2162":2}}],["exporters",{"3":{"0":1,"397":2,"399":1,"402":1,"409":1,"591":1,"608":1,"1333":4,"1339":6,"1443":5,"1492":1,"1577":3,"1923":1,"2011":2,"2015":1,"2048":1,"2159":4,"2161":1,"2162":1}}],["exported",{"0":{"1333":1},"3":{"0":3,"47":1,"396":1,"407":1,"428":1,"440":1,"556":1,"591":2,"764":1,"766":1,"899":1,"1089":1,"1213":1,"1311":3,"1323":1,"1324":1,"1339":5,"1350":2,"1359":13,"1396":6,"1402":1,"1404":1,"1410":1,"1415":6,"1416":3,"1417":2,"1435":1,"1436":3,"1441":1,"1456":1,"1467":1,"1473":1,"1475":1,"1492":2,"1631":1,"1670":1,"1765":1,"2048":1,"2217":1}}],["exportsectionunavailable",{"3":{"1323":2}}],["exportsessioncalendarhandlertests",{"3":{"1199":1,"1207":2,"1359":2}}],["exportsessioncalendarhandler",{"3":{"1199":2,"1203":1,"1207":2,"1300":5,"1356":4,"1359":4}}],["exportsessioncalendarquery",{"2":{"1375":1},"3":{"1199":4,"1203":1,"1207":2,"1359":3,"1375":1,"1380":3,"1496":1}}],["exportshapetestcontroller",{"3":{"1199":2,"1207":1}}],["exportshapetestdto",{"3":{"1199":3,"1207":1}}],["exports",{"3":{"0":2,"81":1,"324":2,"397":1,"400":1,"404":2,"408":1,"557":1,"583":1,"585":3,"591":1,"725":2,"728":1,"741":1,"743":1,"821":1,"1203":8,"1207":24,"1247":1,"1259":1,"1270":1,"1300":5,"1311":3,"1312":2,"1323":1,"1339":1,"1350":2,"1359":6,"1372":1,"1380":2,"1396":24,"1402":2,"1417":3,"1436":14,"1438":2,"1443":2,"1444":1,"1455":1,"1456":1,"1460":1,"1465":1,"1488":1,"1490":1,"1535":1,"1545":1,"1631":2,"1764":1,"1765":2,"1895":1,"1996":2,"2005":1}}],["export",{"0":{"1299":1,"1308":1,"1356":1,"1410":1},"1":{"722":1,"723":1,"724":1,"725":1,"726":1,"727":1,"728":1,"729":1,"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1,"1403":1,"1404":1,"1405":1,"1406":1,"1407":1,"1408":1,"1409":1,"1410":1,"1411":1,"1412":1,"1413":1,"1414":1,"1415":1},"2":{"690":1,"916":1,"1478":1,"1766":1,"1988":1},"3":{"0":14,"18":1,"39":1,"41":1,"95":3,"96":2,"104":2,"318":3,"321":2,"324":2,"325":1,"330":1,"397":1,"399":1,"408":1,"440":1,"545":1,"583":1,"585":3,"586":3,"650":2,"690":2,"692":4,"694":1,"696":2,"709":1,"722":1,"723":2,"724":6,"725":10,"727":12,"728":2,"729":1,"738":1,"740":3,"741":18,"742":4,"743":13,"744":2,"745":1,"896":2,"914":2,"916":2,"973":1,"976":1,"1018":1,"1020":2,"1026":2,"1028":1,"1044":1,"1192":4,"1201":1,"1202":2,"1203":4,"1207":10,"1212":6,"1229":1,"1256":1,"1259":1,"1270":1,"1286":1,"1299":2,"1300":21,"1307":1,"1308":1,"1309":49,"1311":59,"1312":3,"1317":2,"1322":2,"1323":32,"1324":4,"1328":1,"1333":1,"1339":8,"1350":3,"1351":1,"1356":3,"1359":18,"1371":2,"1372":7,"1373":1,"1380":76,"1396":58,"1402":2,"1403":3,"1404":2,"1405":1,"1410":2,"1415":67,"1416":2,"1417":6,"1436":9,"1437":2,"1438":17,"1441":2,"1443":7,"1446":1,"1448":1,"1450":2,"1455":2,"1467":7,"1469":1,"1470":1,"1476":1,"1478":4,"1482":2,"1484":1,"1487":4,"1496":7,"1526":3,"1534":2,"1535":1,"1545":2,"1567":1,"1575":1,"1577":3,"1582":3,"1586":1,"1590":1,"1591":3,"1631":5,"1639":1,"1660":1,"1662":1,"1666":7,"1667":1,"1668":1,"1670":2,"1672":1,"1677":1,"1720":1,"1746":2,"1747":2,"1749":1,"1751":4,"1764":1,"1765":4,"1766":1,"1772":4,"1800":1,"1841":1,"1898":1,"1988":7,"1992":1,"1996":13,"1997":1,"1998":2,"2015":1,"2069":5,"2070":2,"2128":1,"2130":1,"2158":1,"2161":1,"2162":2,"2194":1,"2234":4}}],["exploiting",{"3":{"2121":1}}],["exploits",{"3":{"1323":1,"1324":1,"1436":1,"1447":1}}],["explodes",{"3":{"1436":1}}],["exploding",{"3":{"1300":1}}],["explosion",{"3":{"1247":1,"1286":2,"1864":1}}],["exploring",{"3":{"2230":1}}],["explore",{"3":{"2214":1,"2246":1}}],["explorer",{"3":{"446":1,"448":4,"1050":1,"1311":4,"2133":1}}],["exploration",{"3":{"740":1}}],["explainable",{"3":{"1350":1,"1359":2,"1396":2}}],["explainswhatismissinganddoesnotcalltheservice",{"3":{"1436":1}}],["explains",{"3":{"1000":1,"1193":1,"1216":1,"1229":1,"1237":3,"1247":8,"1259":8,"1270":4,"1271":1,"1286":21,"1300":23,"1301":2,"1309":5,"1311":8,"1323":10,"1324":20,"1328":1,"1339":20,"1344":1,"1350":10,"1359":15,"1369":5,"1395":20,"1396":24,"1397":1,"1402":7,"1405":1,"1415":15,"1416":3,"1417":7,"1427":1,"1436":21,"1443":1,"1445":1,"1453":1,"1456":1,"1459":1,"1465":1,"1467":4,"1476":2,"1489":1,"1496":1,"1497":1,"1658":1,"1685":1,"1705":1,"1802":1,"2004":1,"2091":1,"2169":1,"2178":1,"2180":1,"2213":1}}],["explain",{"3":{"982":1,"990":1,"1237":1,"1247":5,"1259":1,"1270":2,"1271":1,"1286":6,"1300":5,"1301":1,"1311":2,"1312":2,"1313":1,"1323":4,"1324":1,"1339":1,"1350":5,"1359":4,"1380":1,"1395":3,"1396":1,"1402":1,"1413":1,"1415":1,"1436":2,"1439":1,"1443":1,"1449":1,"1455":1,"1502":1,"1515":1,"1552":1,"1639":1,"1996":1,"2168":1}}],["explained",{"3":{"905":1,"972":2,"1191":1,"1194":1,"1216":2,"1237":1,"1300":1,"1309":1,"1311":1,"1324":1,"1339":1,"1359":5,"1369":1,"1380":1,"1395":2,"1416":1,"1417":1,"1436":1,"1441":1,"1493":1,"1494":1,"1495":1,"1496":1,"1499":4,"1800":1}}],["explaining",{"3":{"0":1,"365":1,"373":1,"424":1,"484":1,"626":1,"700":1,"750":1,"820":1,"1190":1,"1222":1,"1237":3,"1259":1,"1271":1,"1286":1,"1300":4,"1311":1,"1323":1,"1324":2,"1339":2,"1359":2,"1362":1,"1369":1,"1395":2,"1396":3,"1436":5,"1489":1,"2145":1,"2199":1}}],["explanation",{"3":{"642":1,"1133":1,"1161":1,"1232":1,"1300":1,"1339":1,"1369":1,"1395":1,"1396":4,"1417":1,"1427":1,"1436":1,"1467":1,"1803":1}}],["explanatory",{"3":{"93":1,"616":1,"856":1,"1052":1,"1259":1,"1270":1,"1286":1,"1323":1,"1359":2,"1417":2,"1627":1}}],["explicitcapture",{"3":{"1309":2,"1427":1,"1436":2}}],["explicitsource",{"3":{"1286":2}}],["explicitkeyinsertrequested",{"3":{"1286":1}}],["explicitkeyinsert",{"3":{"1286":8}}],["explicitkeyinsertgroup",{"2":{"1280":1},"3":{"1175":2,"1199":4,"1203":1,"1207":2,"1278":1,"1280":2,"1286":12,"1496":1}}],["explicitorderupdatecommandvalidator",{"3":{"1199":2,"1207":1}}],["explicitassemblyprovider",{"2":{"1284":1},"3":{"1199":2,"1203":1,"1207":1,"1284":1,"1286":4}}],["explicitly",{"2":{"1844":1},"3":{"0":8,"15":1,"24":1,"25":1,"31":1,"39":1,"54":1,"70":1,"71":1,"73":1,"93":1,"100":1,"109":1,"135":1,"175":1,"184":1,"186":1,"193":1,"195":1,"196":1,"243":1,"317":1,"348":1,"353":1,"415":1,"556":1,"564":1,"571":1,"590":1,"595":1,"625":1,"627":1,"630":1,"657":1,"690":1,"698":1,"733":1,"741":1,"758":1,"775":1,"782":1,"819":1,"823":1,"827":1,"881":1,"897":1,"899":1,"905":1,"922":1,"931":2,"953":1,"954":1,"955":1,"963":1,"973":1,"996":1,"1012":1,"1014":1,"1051":1,"1059":1,"1118":1,"1124":1,"1133":1,"1190":1,"1193":1,"1212":3,"1229":4,"1237":4,"1241":1,"1247":7,"1257":1,"1259":10,"1270":8,"1271":4,"1275":1,"1276":2,"1286":34,"1288":1,"1297":2,"1299":1,"1300":28,"1301":6,"1302":1,"1304":1,"1309":8,"1310":2,"1311":18,"1312":3,"1323":19,"1324":22,"1330":1,"1333":1,"1337":1,"1339":8,"1343":1,"1347":1,"1349":1,"1350":8,"1352":1,"1354":1,"1359":29,"1362":3,"1369":2,"1379":1,"1380":6,"1385":1,"1386":1,"1388":1,"1395":31,"1396":25,"1402":6,"1404":1,"1409":1,"1415":25,"1416":1,"1417":11,"1422":1,"1427":1,"1431":1,"1432":1,"1436":18,"1438":2,"1441":2,"1442":1,"1443":2,"1444":1,"1447":2,"1453":1,"1455":4,"1458":1,"1459":1,"1460":1,"1462":1,"1467":4,"1470":1,"1474":1,"1475":1,"1476":1,"1488":4,"1489":1,"1494":1,"1496":2,"1508":1,"1554":1,"1572":1,"1577":1,"1591":2,"1631":2,"1639":1,"1667":1,"1685":1,"1686":1,"1709":1,"1724":1,"1799":1,"1827":1,"1830":1,"1842":1,"1844":1,"1845":1,"1853":1,"1861":1,"1876":1,"1881":1,"1897":1,"1898":1,"1899":1,"1916":1,"1958":1,"1968":1,"1990":1,"1993":1,"1998":2,"2003":1,"2033":1,"2034":1,"2042":1,"2044":1,"2045":1,"2056":1,"2064":1,"2069":1,"2088":1,"2099":1,"2133":1,"2162":1,"2169":1,"2171":1,"2234":1}}],["explicit",{"0":{"1955":1},"1":{"1080":1,"1081":1,"1082":1,"1083":1,"1084":1,"1085":1,"1086":1,"1087":1,"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1956":1,"1957":1,"1958":1,"1959":1},"2":{"1083":1,"1084":1,"1583":1,"2065":1},"3":{"0":14,"5":1,"7":1,"15":1,"19":1,"22":2,"24":1,"31":1,"39":1,"68":1,"72":2,"73":1,"74":1,"78":1,"86":1,"95":3,"99":1,"108":1,"115":1,"118":1,"128":1,"173":1,"186":2,"189":1,"193":1,"195":1,"198":1,"200":1,"201":1,"215":1,"219":1,"243":1,"255":1,"265":4,"266":1,"274":1,"291":1,"312":1,"318":1,"320":1,"321":1,"353":1,"358":1,"368":1,"370":1,"373":1,"386":1,"390":2,"393":1,"397":1,"398":1,"402":1,"418":1,"420":1,"427":1,"428":1,"485":1,"499":1,"518":1,"537":1,"549":3,"556":1,"557":1,"558":1,"564":1,"583":1,"584":1,"618":1,"626":1,"628":1,"633":1,"640":1,"674":1,"709":1,"715":1,"742":1,"766":1,"774":1,"799":1,"817":1,"840":1,"847":2,"881":1,"905":2,"914":2,"926":2,"931":2,"932":1,"933":1,"939":1,"941":1,"942":1,"947":1,"965":1,"971":1,"980":1,"982":1,"988":1,"996":1,"998":1,"999":1,"1012":1,"1013":1,"1035":1,"1050":3,"1052":2,"1060":1,"1066":1,"1067":1,"1080":1,"1083":3,"1084":2,"1092":1,"1108":1,"1117":1,"1133":1,"1175":3,"1212":2,"1213":1,"1219":1,"1221":1,"1229":8,"1233":2,"1236":1,"1237":10,"1239":1,"1241":1,"1247":7,"1249":2,"1253":1,"1256":1,"1257":1,"1259":14,"1263":2,"1264":1,"1269":1,"1270":12,"1271":3,"1274":1,"1275":1,"1278":3,"1280":4,"1281":2,"1286":66,"1288":1,"1300":33,"1301":8,"1309":21,"1310":2,"1311":21,"1312":11,"1316":1,"1317":1,"1318":1,"1320":2,"1322":1,"1323":25,"1324":41,"1331":3,"1333":2,"1338":2,"1339":25,"1342":1,"1343":1,"1345":1,"1350":30,"1352":1,"1353":1,"1354":1,"1358":2,"1359":70,"1364":1,"1369":15,"1373":1,"1375":1,"1376":1,"1380":13,"1383":1,"1390":1,"1392":1,"1393":1,"1394":1,"1395":29,"1396":42,"1399":1,"1401":1,"1402":23,"1411":1,"1415":36,"1416":12,"1417":19,"1427":2,"1436":47,"1438":1,"1440":1,"1441":1,"1442":1,"1443":2,"1444":1,"1445":1,"1448":1,"1451":1,"1453":1,"1454":3,"1455":2,"1458":1,"1467":4,"1469":1,"1474":1,"1475":2,"1476":1,"1486":1,"1487":1,"1489":1,"1496":1,"1510":1,"1526":4,"1534":1,"1541":1,"1543":1,"1544":1,"1545":1,"1547":1,"1553":3,"1556":1,"1566":1,"1576":1,"1577":12,"1582":1,"1583":1,"1591":1,"1631":2,"1632":1,"1639":1,"1641":1,"1651":1,"1667":1,"1673":1,"1677":1,"1686":1,"1693":1,"1711":1,"1749":1,"1765":1,"1795":1,"1810":1,"1830":1,"1841":1,"1842":1,"1845":1,"1858":1,"1882":1,"1889":2,"1890":1,"1892":1,"1898":3,"1903":1,"1904":1,"1910":2,"1911":1,"1948":1,"1950":1,"1951":2,"1952":2,"1955":2,"1957":1,"1958":3,"1959":3,"1963":1,"1964":1,"1965":2,"1982":1,"1995":1,"1997":1,"1998":1,"2002":1,"2020":2,"2031":3,"2034":1,"2064":1,"2065":2,"2069":1,"2085":1,"2087":2,"2088":1,"2097":1,"2129":1,"2140":1,"2144":1,"2152":1,"2154":1,"2159":1,"2162":1,"2163":1,"2164":1,"2167":1,"2171":2,"2177":1,"2182":1,"2187":1,"2188":1,"2200":1,"2210":1,"2234":3}}],["sf1nopko",{"2":{"1364":1},"3":{"1364":1,"1369":1}}],["svg",{"3":{"1324":1,"2127":1}}],["svc",{"3":{"248":1,"1301":3}}],["sdlc",{"3":{"1395":1,"2241":1}}],["sd",{"3":{"1324":3,"2078":1}}],["sdks",{"3":{"74":1,"1076":1,"1213":1,"1417":2,"1436":1,"1577":1}}],["sdk",{"2":{"877":1,"1449":1,"1460":1},"3":{"0":4,"72":5,"73":6,"74":1,"374":1,"439":1,"868":2,"869":1,"870":1,"873":1,"877":1,"980":3,"982":3,"1016":1,"1018":1,"1067":3,"1075":1,"1076":1,"1091":5,"1092":1,"1095":1,"1212":1,"1270":1,"1286":1,"1323":3,"1339":3,"1351":1,"1359":1,"1416":9,"1417":3,"1420":2,"1427":10,"1430":1,"1431":1,"1436":13,"1438":1,"1441":1,"1443":1,"1445":3,"1449":1,"1450":1,"1455":4,"1460":1,"1467":2,"1479":2,"1488":1,"1490":1,"1526":2,"1553":2,"1577":1,"1582":1,"1591":1,"1648":1,"1682":1,"1693":1,"1718":2,"1719":1,"2005":1,"2044":1,"2090":1,"2106":2,"2116":1,"2126":1,"2128":1,"2172":2,"2173":1,"2174":1,"2180":1,"2182":4}}],["sb",{"3":{"1323":1,"1436":3}}],["sbom",{"1":{"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1},"3":{"0":2,"367":1,"368":1,"369":2,"370":5,"371":4,"372":2,"373":3,"374":3,"375":4,"413":1,"415":1,"530":1,"531":1,"532":1,"590":1,"861":1,"870":1,"874":1,"1212":1,"1445":1,"1454":11,"1461":2,"1526":5,"1535":1,"1569":2,"1576":2,"1577":6,"1585":1,"1586":1,"1591":2,"1600":1,"1673":1,"1738":1,"1801":1,"2122":1,"2124":1,"2234":1}}],["s6672",{"3":{"1311":2}}],["s6932",{"3":{"790":1,"1309":1}}],["s5693",{"3":{"1380":1,"1395":1}}],["s5332",{"3":{"1309":1,"1312":1,"1323":1,"1359":1}}],["s5122",{"3":{"0":1,"774":2,"776":1,"777":1,"1311":1,"1339":1}}],["s4",{"3":{"1457":2}}],["s4275",{"3":{"1395":1}}],["s4830",{"3":{"1286":1,"1416":1}}],["s4035",{"3":{"0":1,"964":1,"1231":1,"1235":1,"1237":2,"1300":2}}],["sr",{"3":{"1359":3,"1597":1,"1607":1,"1609":1,"1741":1,"1743":1}}],["srp",{"3":{"1270":1,"1271":1,"1431":1,"1436":1,"1526":1,"1538":2,"1577":2,"1582":1,"1584":1}}],["srcset",{"3":{"1599":1}}],["src",{"3":{"0":2,"1":1,"147":2,"212":7,"213":3,"214":15,"215":3,"216":3,"219":23,"220":2,"324":1,"358":1,"361":1,"362":1,"366":1,"490":1,"491":1,"492":1,"493":1,"495":1,"582":1,"590":2,"756":2,"765":1,"773":2,"860":1,"914":1,"1003":1,"1011":1,"1012":3,"1017":1,"1090":2,"1094":1,"1095":1,"1212":4,"1216":2,"1237":2,"1271":1,"1300":8,"1311":1,"1324":53,"1336":2,"1339":16,"1350":1,"1359":11,"1380":7,"1391":1,"1395":11,"1417":4,"1428":1,"1430":2,"1436":3,"1438":1,"1441":1,"1443":2,"1445":1,"1496":1,"1502":1,"1515":1,"1525":4,"1526":9,"1531":1,"1575":1,"1577":14,"1582":2,"1586":1,"1591":5,"1596":1,"1600":3,"1793":1,"2001":2,"2002":2,"2003":1,"2077":1,"2088":1,"2119":1,"2120":1,"2122":1,"2149":3,"2151":6,"2152":21,"2153":1,"2154":2,"2155":4,"2160":1,"2174":1}}],["s2696",{"3":{"1417":1}}],["s2092",{"3":{"1300":1,"1311":1}}],["s2077",{"3":{"0":1,"1133":1,"1286":1,"1436":1}}],["s2326",{"3":{"1270":2}}],["s2245",{"3":{"1259":1,"1324":1}}],["s2221",{"3":{"1247":1,"1311":1,"1427":1}}],["s8970",{"3":{"1577":2,"1586":1,"1591":1}}],["s8",{"3":{"1201":1}}],["s1481",{"3":{"1727":1}}],["s107",{"3":{"1577":1,"1581":1,"1582":1,"1584":1}}],["s1075",{"3":{"1369":1,"1395":3,"1416":1,"1417":3}}],["s1144",{"3":{"1237":1}}],["s1200",{"3":{"1577":1,"1581":1,"1582":1,"1584":1}}],["s12",{"3":{"766":1,"769":1}}],["s1",{"3":{"766":1,"767":1,"769":1,"1591":1}}],["s+",{"3":{"609":1,"1476":1}}],["ssas",{"3":{"2221":1,"2222":1}}],["ssis",{"3":{"2221":1,"2222":2}}],["ssh",{"3":{"1526":1,"1535":1}}],["ssl",{"3":{"1416":2,"1770":1}}],["ss",{"3":{"1359":13}}],["ss9",{"3":{"448":1}}],["ssrs",{"3":{"2221":1,"2222":1}}],["ssrf",{"3":{"1358":1,"1359":1,"1369":1}}],["ssr",{"0":{"1298":1,"1968":1},"1":{"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"1966":1,"1967":1,"1968":1,"1969":1,"1970":1,"1971":1,"1972":1},"3":{"0":6,"204":1,"206":3,"207":3,"208":2,"209":3,"210":1,"264":1,"265":3,"266":1,"269":1,"272":2,"273":2,"274":1,"275":1,"277":2,"412":1,"458":1,"462":1,"486":1,"506":2,"507":2,"555":3,"556":3,"557":1,"560":2,"649":1,"664":1,"670":1,"682":1,"881":2,"1212":2,"1298":2,"1300":8,"1311":3,"1324":37,"1383":1,"1391":1,"1393":1,"1395":6,"1396":1,"1402":3,"1416":4,"1417":5,"1436":6,"1438":2,"1447":2,"1467":1,"1488":1,"1526":2,"1534":1,"1560":1,"1577":5,"1582":1,"1591":1,"1667":1,"1759":1,"1761":1,"1779":1,"1965":1,"1966":3,"1967":3,"1968":4,"1971":3,"1972":3,"2078":3,"2087":2,"2088":2,"2121":1,"2210":1,"2234":2}}],["snyk",{"3":{"2221":1,"2222":2}}],["snippet",{"3":{"1436":2,"2023":1}}],["snippets",{"3":{"955":1}}],["sniff",{"3":{"1286":1,"1369":1,"1415":4,"2130":1}}],["sniffed",{"3":{"1174":1,"1415":1}}],["sniffer",{"3":{"1114":1,"1116":2,"1117":3,"1118":2,"1285":1,"1286":2,"1347":1,"1359":2,"1380":1,"1438":1,"2234":1}}],["sniffs",{"3":{"1116":1,"1411":1,"1415":1}}],["sniffing",{"3":{"201":1,"1259":1,"1286":2,"1415":3,"1417":1,"1538":1,"1631":1,"1640":1,"2150":1}}],["snap",{"3":{"2084":1}}],["snappy",{"3":{"1324":1}}],["snapshotname",{"3":{"1436":2}}],["snapshotoutputvariable",{"3":{"1436":2}}],["snapshotted",{"3":{"692":1,"1286":3,"1300":5,"1324":1,"1339":1,"1369":2,"1390":1,"1396":1,"1398":1,"1402":7,"1429":1,"1436":1,"1438":1,"1526":1,"1630":2,"1631":1,"1930":1}}],["snapshotting",{"3":{"691":1,"1233":1,"1286":1,"1300":1,"1311":2,"1350":1,"1402":5,"1436":1,"1630":1,"1930":1}}],["snapshots=1",{"3":{"1432":1,"1436":3,"1438":1}}],["snapshots",{"1":{"1023":1,"1024":1,"1025":1,"1026":1,"1027":1,"1028":1,"1029":1,"1030":1},"3":{"21":1,"583":1,"739":1,"741":3,"743":1,"745":1,"988":1,"1023":1,"1144":1,"1178":1,"1209":1,"1212":1,"1251":2,"1259":1,"1274":1,"1286":4,"1311":2,"1323":4,"1324":6,"1350":2,"1359":1,"1395":4,"1396":1,"1402":3,"1417":5,"1427":1,"1432":1,"1436":5,"1438":3,"1577":1,"1632":1,"1660":1,"1671":1,"1686":1,"1687":1,"2061":1,"2201":1,"2234":1}}],["snapshot",{"2":{"633":1,"636":1},"3":{"0":3,"184":1,"186":1,"387":1,"484":1,"486":1,"487":1,"488":1,"489":1,"490":2,"491":2,"492":2,"493":2,"494":2,"536":1,"540":1,"556":1,"564":1,"572":2,"573":2,"585":1,"633":1,"636":1,"676":1,"690":1,"725":2,"727":1,"744":1,"782":2,"783":2,"801":1,"825":1,"891":1,"914":1,"990":2,"1034":1,"1050":1,"1059":1,"1060":1,"1142":1,"1199":3,"1203":1,"1207":1,"1247":1,"1273":2,"1275":2,"1279":1,"1283":3,"1286":40,"1297":1,"1299":1,"1300":16,"1301":3,"1311":3,"1322":1,"1323":7,"1324":17,"1339":3,"1347":1,"1349":1,"1350":12,"1355":1,"1356":1,"1359":9,"1375":1,"1380":4,"1391":1,"1395":21,"1396":42,"1398":1,"1402":8,"1410":2,"1415":5,"1416":3,"1417":6,"1431":1,"1432":1,"1436":61,"1438":10,"1455":2,"1488":2,"1496":2,"1497":1,"1500":1,"1524":1,"1525":3,"1526":4,"1531":3,"1535":2,"1577":4,"1586":1,"1631":1,"1640":1,"1643":1,"1663":1,"1671":1,"1675":1,"1686":8,"1697":1,"1727":1,"1749":4,"1765":4,"1767":1,"1769":2,"1801":1,"1929":3,"1930":1,"1933":1,"2045":3,"2050":1,"2056":2,"2060":2,"2063":1,"2071":1,"2081":2,"2166":2,"2169":1,"2201":1,"2202":1}}],["snackbars",{"3":{"1324":1,"1526":3,"1591":1,"1607":1,"1644":1,"1669":1,"1741":1,"1742":1}}],["snackbaroptions",{"3":{"1324":2}}],["snackbar",{"2":{"1687":1},"3":{"109":1,"265":3,"276":1,"881":1,"905":1,"954":1,"1324":17,"1394":1,"1395":29,"1396":5,"1401":1,"1402":1,"1417":2,"1432":1,"1436":13,"1488":2,"1526":4,"1577":1,"1591":1,"1653":3,"1669":1,"1671":1,"1686":1,"1687":1}}],["snake",{"2":{"1035":1},"3":{"0":2,"1034":1,"1035":1,"1273":1,"1286":1,"1311":2,"1856":1}}],["s3330",{"3":{"1311":1}}],["s3875",{"3":{"1237":1}}],["s3011",{"3":{"1286":1}}],["s30",{"2":{"1201":1},"3":{"1201":1}}],["s3",{"3":{"0":1,"764":1,"769":1,"1591":1}}],["s0",{"3":{"0":2,"764":4,"766":5,"767":3,"769":3,"1478":4,"1483":1,"1591":1,"1600":1}}],["skills",{"3":{"2241":2}}],["skim",{"3":{"1194":1,"1248":1,"1418":1,"1441":1,"1787":1,"1812":1,"2117":1}}],["skims",{"3":{"1132":1,"1436":1}}],["skipmigration",{"3":{"1684":1,"1688":1,"1722":1,"1729":2}}],["skiperror",{"3":{"1286":1}}],["skipwhenunavailable",{"2":{"1328":1,"1449":1},"3":{"1328":1,"1339":3,"1449":1}}],["skipwhen",{"2":{"1070":2,"2057":1},"3":{"1067":2,"1070":2,"1328":2,"1339":2,"1430":2,"1449":2,"2057":1}}],["skipreason",{"2":{"1070":1,"1328":1},"3":{"1067":4,"1070":2,"1328":2,"1339":3,"1430":3,"1449":2,"2057":2}}],["skipbearer",{"2":{"514":1},"3":{"507":1,"514":1,"1324":10}}],["skippable",{"3":{"764":3,"1455":1,"1596":1,"1599":1,"1892":1}}],["skipping",{"3":{"0":1,"208":1,"397":1,"557":1,"733":1,"759":1,"887":1,"889":1,"890":2,"1067":1,"1068":1,"1117":1,"1133":1,"1168":1,"1223":1,"1231":1,"1237":2,"1241":1,"1247":1,"1271":1,"1286":12,"1300":2,"1301":2,"1311":6,"1323":1,"1324":2,"1333":1,"1339":2,"1349":1,"1350":3,"1359":9,"1395":5,"1396":1,"1402":1,"1415":3,"1417":5,"1433":1,"1436":10,"1441":1,"1443":1,"1455":1,"1467":2,"1470":1,"1489":1,"1921":1,"1985":1,"2011":1,"2035":1,"2078":1,"2158":1,"2162":1,"2170":1,"2234":1}}],["skippedsoftdeleted",{"2":{"1632":1},"3":{"1350":2,"1359":4,"1632":1,"1639":1}}],["skipped",{"2":{"620":1,"624":1,"863":1},"3":{"0":6,"39":1,"120":1,"135":1,"157":1,"168":1,"201":2,"214":1,"292":1,"318":1,"335":1,"341":1,"370":1,"397":1,"534":1,"536":1,"564":1,"583":1,"593":1,"620":1,"624":1,"626":5,"627":1,"628":1,"649":1,"707":1,"709":1,"717":1,"749":1,"758":1,"766":4,"849":1,"861":4,"863":2,"889":1,"891":1,"990":1,"997":1,"1004":1,"1006":1,"1092":1,"1220":1,"1229":1,"1241":2,"1242":1,"1247":4,"1259":8,"1266":1,"1269":1,"1270":6,"1276":2,"1278":2,"1279":1,"1286":10,"1288":1,"1289":1,"1300":1,"1301":3,"1311":4,"1315":1,"1323":11,"1324":4,"1334":1,"1339":1,"1347":1,"1350":3,"1359":21,"1369":1,"1372":1,"1380":2,"1395":3,"1396":7,"1402":3,"1415":4,"1425":1,"1431":2,"1436":23,"1438":1,"1443":1,"1445":3,"1449":1,"1453":3,"1455":11,"1456":2,"1459":1,"1473":1,"1475":1,"1488":1,"1489":1,"1490":2,"1492":8,"1526":5,"1531":1,"1534":1,"1551":1,"1577":2,"1585":1,"1591":6,"1596":2,"1599":1,"1631":1,"1632":2,"1636":1,"1639":2,"1641":1,"1654":1,"1729":1,"1748":1,"1765":1,"1805":1,"1822":1,"1838":1,"1858":1,"1909":1,"1910":2,"1911":1,"2033":1,"2044":2,"2052":1,"2081":1,"2158":1,"2169":1,"2178":1,"2182":1}}],["skipsabstractcontrollers",{"3":{"1436":1}}],["skipsave",{"3":{"0":1,"926":3,"1265":1,"1270":7,"1359":4,"1415":2,"1666":1}}],["skipscoredsinceutc",{"3":{"1359":4}}],["skipsspeakersmissingfromrepository",{"3":{"1359":1}}],["skips",{"0":{"1844":1},"3":{"0":4,"22":1,"27":1,"117":1,"135":1,"166":1,"194":1,"195":2,"243":1,"244":1,"248":1,"255":1,"259":1,"296":1,"330":1,"337":1,"451":1,"452":1,"499":1,"528":1,"536":1,"538":3,"547":1,"556":1,"557":1,"559":1,"564":1,"573":1,"583":1,"599":1,"626":1,"628":1,"657":2,"715":1,"757":1,"790":2,"795":1,"889":1,"907":1,"914":1,"931":1,"980":1,"988":1,"1018":1,"1020":1,"1107":1,"1133":1,"1192":1,"1241":2,"1242":1,"1245":1,"1247":8,"1252":1,"1255":1,"1259":4,"1270":2,"1271":3,"1281":2,"1286":16,"1300":4,"1301":1,"1309":2,"1311":6,"1320":1,"1323":3,"1324":5,"1328":1,"1337":1,"1339":2,"1350":4,"1358":1,"1359":19,"1369":3,"1379":1,"1380":2,"1391":1,"1393":1,"1395":5,"1396":9,"1402":5,"1414":1,"1415":5,"1417":5,"1435":1,"1436":28,"1438":6,"1445":1,"1449":1,"1454":1,"1455":5,"1456":1,"1458":1,"1459":1,"1460":1,"1467":2,"1472":1,"1486":2,"1488":1,"1490":2,"1492":1,"1496":1,"1534":1,"1596":1,"1599":2,"1632":1,"1639":1,"1651":1,"1668":1,"1677":1,"1729":1,"1765":1,"1805":1,"1816":1,"1876":2,"1897":1,"1898":1,"1918":1,"1920":1,"1922":1,"1923":1,"1947":1,"1982":1,"1988":1,"1996":1,"2013":1,"2025":1,"2058":1,"2098":2,"2107":1,"2166":1,"2167":1,"2168":2,"2170":1,"2192":2}}],["skip",{"0":{"2026":1},"2":{"626":2,"642":1,"768":2,"1475":2,"1534":1,"1599":1},"3":{"0":8,"20":1,"24":1,"32":1,"103":2,"179":1,"195":1,"200":1,"201":2,"210":1,"276":1,"318":1,"335":1,"341":1,"355":1,"388":1,"453":1,"459":1,"528":1,"529":1,"538":1,"549":3,"554":1,"556":1,"559":1,"567":1,"586":1,"591":3,"620":1,"626":8,"627":2,"642":1,"708":1,"741":1,"743":1,"768":2,"863":1,"869":1,"916":1,"918":1,"924":1,"1005":1,"1006":1,"1020":2,"1067":6,"1070":1,"1084":1,"1184":1,"1212":2,"1229":2,"1240":1,"1242":1,"1243":2,"1247":19,"1259":6,"1270":3,"1271":1,"1280":1,"1286":19,"1291":1,"1300":6,"1301":2,"1309":6,"1310":2,"1323":5,"1324":8,"1333":1,"1339":17,"1350":2,"1353":1,"1359":14,"1391":1,"1395":8,"1396":13,"1400":1,"1401":1,"1402":3,"1415":10,"1417":3,"1426":1,"1430":4,"1436":12,"1438":3,"1443":2,"1445":1,"1449":1,"1453":1,"1454":1,"1455":13,"1456":2,"1475":5,"1486":1,"1490":1,"1492":4,"1496":2,"1500":1,"1525":1,"1526":4,"1534":1,"1577":1,"1589":1,"1591":2,"1596":1,"1598":1,"1599":2,"1600":1,"1607":2,"1611":2,"1613":1,"1639":1,"1644":2,"1651":1,"1664":1,"1684":1,"1686":2,"1720":1,"1727":1,"1741":2,"1808":1,"1815":1,"1841":1,"1845":1,"1858":1,"1860":1,"1865":1,"1871":1,"1882":1,"1891":1,"1911":1,"1918":1,"1921":1,"1922":1,"1923":1,"1950":1,"1984":1,"1988":1,"2011":1,"2030":1,"2057":2,"2070":1,"2089":1,"2103":1,"2109":1,"2113":1,"2123":1,"2128":1,"2133":1,"2147":1,"2157":1,"2159":1,"2173":1,"2182":1,"2192":1}}],["skuexistsasync",{"3":{"1751":1}}],["skus",{"3":{"1750":1,"1767":2,"1773":1}}],["skuid",{"3":{"1198":2,"1199":10,"1207":2}}],["sku",{"2":{"767":1,"769":3,"1465":1},"3":{"583":1,"766":5,"767":1,"769":3,"889":1,"897":1,"1436":5,"1465":2,"1467":1,"1473":1,"1478":6,"1599":1,"1746":2,"1748":4,"1750":2,"1751":2,"1764":2,"1767":2,"1768":1,"1769":3,"1772":2,"1773":1}}],["sketch",{"0":{"2086":1}}],["sketched",{"3":{"264":1,"963":1,"1079":1}}],["skeletons",{"3":{"1560":1}}],["skeleton",{"3":{"980":1,"1343":1,"1359":1,"1395":2,"1396":1,"1402":1,"1436":2}}],["skew",{"3":{"0":3,"146":1,"148":1,"178":1,"507":1,"513":1,"1059":1,"1256":1,"1259":1,"1293":2,"1298":1,"1300":2,"1311":1,"1324":9,"1417":1,"1436":3,"1467":1,"1648":1,"1655":1,"1727":1,"2200":2}}],["squash",{"3":{"1453":1}}],["squatting",{"3":{"1286":1}}],["squarely",{"3":{"1285":1,"1359":1,"2060":1}}],["square",{"3":{"0":1,"440":1,"1286":2,"1323":3,"1395":1,"1496":1,"2128":1}}],["sqs",{"3":{"0":1,"1075":1}}],["sqldatabase",{"2":{"1473":1,"1478":1},"3":{"1473":1,"1478":1}}],["sqllocation",{"3":{"1466":2,"1467":2,"1474":2}}],["sqlaadadminobjectid",{"3":{"1467":2}}],["sqlaadadminlogin",{"3":{"1467":1}}],["sqladminpassword",{"2":{"1466":1},"3":{"1466":2,"1467":1,"1526":1,"1534":1}}],["sqlauditingsettings",{"2":{"719":1},"3":{"719":1}}],["sqlauditconventiontests",{"2":{"719":1},"3":{"0":1,"719":2,"1199":1,"1207":2,"1436":4,"1467":2,"1591":1}}],["sql=true",{"3":{"1455":1,"1467":1,"1477":1,"1591":1,"1596":1,"1600":1}}],["sqlbaseenvironmentvariable",{"2":{"1429":1},"3":{"1429":1,"1436":2,"1488":1,"1490":1}}],["sqlthingconfiguration",{"3":{"1199":1,"1207":1}}],["sqlthing",{"3":{"1199":2,"1207":1,"1438":1}}],["sqlthingshipped",{"3":{"1199":2,"1207":1}}],["sqlqueryable",{"3":{"1286":2}}],["sqlquery",{"2":{"1132":1,"1133":1,"1990":1},"3":{"1132":1,"1133":1,"1286":2,"1436":1,"1990":1}}],["sqlqueryraw",{"2":{"1132":1,"1990":1},"3":{"0":1,"1132":1,"1133":1,"1431":1,"1436":3,"1990":1,"2044":1}}],["sqlsecurityauditevents",{"2":{"719":1},"3":{"719":2,"1467":2}}],["sqlserverfqdn",{"3":{"1467":1}}],["sqlserverbaseconnectionstring",{"3":{"1436":1}}],["sqlservermodel",{"3":{"1436":2}}],["sqlservermigrationsassembly",{"2":{"166":1,"633":1,"1446":1,"1684":1,"2099":1},"3":{"166":1,"633":1,"1286":5,"1436":1,"1446":1,"1684":3,"2099":1}}],["sqlserverretryingexecutionstrategy",{"3":{"1286":1}}],["sqlserverthingconfiguration",{"3":{"1199":1,"1207":1}}],["sqlserverthing",{"3":{"1199":3,"1207":1}}],["sqlserverindexedentity",{"3":{"1199":3,"1207":1}}],["sqlserverintegrationtestfixturebase",{"2":{"572":1,"914":1,"1212":1,"1428":1,"1429":1,"1488":1,"1490":1,"1600":1,"1671":1,"2056":1},"3":{"0":1,"572":6,"914":3,"916":1,"1199":5,"1207":2,"1212":1,"1428":1,"1429":3,"1436":8,"1488":2,"1490":2,"1496":1,"1600":1,"1671":1,"2056":1}}],["sqlserverpersistencetests",{"2":{"1453":1},"3":{"1198":1,"1199":2,"1207":9,"1437":1,"1438":2,"1453":1}}],["sqlserverdatasourceengine",{"2":{"1280":1},"3":{"1175":3,"1198":1,"1199":2,"1203":1,"1207":2,"1280":6,"1282":2,"1286":24,"1359":1}}],["sqlserverdbcontexttests",{"3":{"1199":1,"1207":3}}],["sqlserverdbcontextmodelsnapshot",{"3":{"1140":1,"1209":4}}],["sqlserverdbcontext",{"2":{"47":1,"200":1,"812":1,"1363":1,"1412":1,"1510":1,"1614":1,"1652":1,"1697":1,"1849":1,"1853":1,"1857":1},"3":{"47":2,"71":1,"166":1,"200":1,"674":2,"812":1,"819":3,"987":1,"1034":1,"1192":1,"1198":1,"1199":4,"1202":1,"1203":2,"1207":2,"1212":2,"1272":1,"1273":5,"1284":1,"1286":23,"1363":1,"1369":7,"1396":10,"1412":1,"1415":1,"1436":5,"1438":1,"1441":1,"1453":1,"1486":1,"1487":1,"1490":1,"1510":1,"1614":1,"1651":2,"1652":1,"1664":1,"1697":1,"1727":1,"1849":2,"1853":1,"1857":1,"2033":1}}],["sqlserverauditing",{"2":{"719":1},"3":{"719":1,"1467":1}}],["sqlserveruniqueconstraintviolationdetectortests",{"2":{"1199":1,"1438":1},"3":{"1199":1,"1207":2,"1286":1,"1438":2}}],["sqlserveruniqueconstraintviolationdetector",{"2":{"1203":1,"1284":1,"1323":1},"3":{"692":1,"1199":4,"1203":1,"1207":2,"1284":2,"1286":8,"1323":1,"1396":1}}],["sqlserverorsqlite",{"2":{"636":1},"3":{"633":1,"636":1}}],["sqlserver",{"2":{"170":1,"564":2,"631":1,"1174":1,"1203":1,"1327":1,"1361":1,"1369":1,"1437":1,"1438":1,"1487":1,"1497":1,"1724":1,"1728":1,"1729":1},"3":{"166":2,"170":2,"195":3,"341":2,"345":1,"350":1,"403":1,"564":8,"631":2,"633":1,"891":4,"1018":1,"1026":1,"1034":2,"1085":1,"1140":1,"1174":1,"1175":1,"1199":8,"1203":1,"1206":1,"1207":24,"1209":138,"1212":1,"1213":3,"1259":1,"1282":1,"1286":25,"1323":1,"1327":1,"1339":6,"1359":1,"1361":1,"1369":8,"1396":7,"1415":3,"1436":12,"1437":2,"1438":4,"1441":3,"1443":1,"1444":1,"1453":2,"1455":2,"1473":1,"1486":1,"1487":1,"1490":1,"1492":1,"1496":3,"1497":1,"1500":1,"1577":1,"1591":1,"1652":1,"1661":1,"1697":1,"1722":2,"1724":1,"1727":4,"1728":4,"1729":1}}],["sqlserverconnectionstring",{"2":{"166":1,"170":1,"1326":1,"1441":2,"1473":1,"1490":1,"1722":1,"1729":1},"3":{"166":1,"170":1,"1286":6,"1326":1,"1339":3,"1436":1,"1441":3,"1473":1,"1490":1,"1722":1,"1729":1,"2009":1}}],["sqlexception",{"3":{"692":1,"1286":6,"1359":1,"1396":1,"1438":1}}],["sqlconnection",{"3":{"1488":1,"1490":1}}],["sqlconnectionstringbuilder",{"3":{"1436":1}}],["sqlcommand",{"3":{"1436":1}}],["sqlcliententraauthenticationtests",{"3":{"1199":1,"1207":2,"1496":1}}],["sqlclient",{"2":{"1477":1},"3":{"692":1,"1207":2,"1259":1,"1286":1,"1339":3,"1436":2,"1443":1,"1477":1,"1534":1,"1677":1,"2011":1,"2156":1,"2159":1}}],["sqlcmd",{"2":{"291":1,"563":1},"3":{"0":1,"291":4,"563":1,"757":1,"1212":1,"1455":4,"1467":2,"1474":1}}],["sqliteconfig",{"3":{"1286":2}}],["sqliteconnectionstring",{"2":{"633":1,"1722":1,"1729":1},"3":{"166":1,"633":1,"1286":5,"1339":2,"1441":1,"1722":1,"1729":1}}],["sqlitetestdbcontext",{"3":{"1199":2,"1207":1}}],["sqlitetestentityconfig",{"3":{"1199":2,"1207":1}}],["sqlitetestentity",{"3":{"1199":4,"1207":1}}],["sqliteindexedentity",{"3":{"1199":3,"1207":1}}],["sqlitedatasourceengine",{"2":{"1175":1,"1280":1},"3":{"1175":3,"1176":1,"1198":1,"1199":2,"1203":1,"1207":2,"1280":5,"1286":14}}],["sqlitedbcontext",{"2":{"47":1,"1510":1,"1697":1,"1719":1,"1728":1,"1731":1,"1857":1},"3":{"47":1,"166":1,"200":1,"1198":1,"1199":4,"1203":1,"1207":2,"1212":2,"1272":1,"1273":2,"1286":13,"1323":2,"1436":5,"1510":1,"1664":1,"1697":1,"1719":1,"1727":2,"1728":2,"1731":1,"1849":1,"1857":1}}],["sqlite3",{"2":{"370":1},"3":{"370":1}}],["sqlitepclraw",{"2":{"370":1},"3":{"370":3}}],["sqlitemigrationsassembly",{"2":{"171":1,"633":1,"1279":1,"1323":1,"1719":1,"1722":1,"1727":1,"1728":1,"1731":1},"3":{"166":1,"171":1,"633":1,"1279":1,"1286":4,"1323":1,"1719":1,"1722":1,"1727":1,"1728":1,"1731":1}}],["sqlite",{"0":{"2054":1},"2":{"170":1,"631":1,"932":1,"1492":1,"1602":1,"1661":1,"1674":1,"1692":1,"1697":1,"1705":1,"1718":1,"1722":2,"1726":1,"1727":2,"1728":3,"1731":2},"3":{"0":11,"10":2,"45":1,"164":1,"166":6,"170":4,"201":1,"290":1,"296":1,"343":2,"345":1,"370":1,"371":1,"564":1,"631":2,"633":8,"676":1,"698":1,"889":2,"890":1,"892":1,"906":1,"932":1,"1033":3,"1034":6,"1035":1,"1036":1,"1044":1,"1050":3,"1067":2,"1174":2,"1175":3,"1176":1,"1177":1,"1178":3,"1179":1,"1180":1,"1212":8,"1213":4,"1247":1,"1259":2,"1273":1,"1274":1,"1279":5,"1280":2,"1281":1,"1282":3,"1284":1,"1286":99,"1309":1,"1311":9,"1319":1,"1320":1,"1321":1,"1323":8,"1326":1,"1332":1,"1339":5,"1361":1,"1369":2,"1396":2,"1436":15,"1437":1,"1438":11,"1441":3,"1443":2,"1453":1,"1487":1,"1489":1,"1490":5,"1492":3,"1496":1,"1500":3,"1510":1,"1526":2,"1577":3,"1582":1,"1583":1,"1585":2,"1602":1,"1614":2,"1616":1,"1618":1,"1661":2,"1664":2,"1674":1,"1692":1,"1697":2,"1705":1,"1707":3,"1718":3,"1719":4,"1720":1,"1721":1,"1722":6,"1723":1,"1726":1,"1727":11,"1728":7,"1729":3,"1731":5,"1752":1,"1763":1,"1774":1,"1849":1,"1853":1,"1854":2,"1855":1,"1856":3,"1860":5,"1861":2,"1862":1,"1872":1,"1876":1,"2054":2,"2060":2,"2061":2,"2066":1,"2091":1,"2194":1,"2232":1,"2234":1}}],["sql",{"0":{"1477":2,"1990":1},"1":{"1130":1,"1131":1,"1132":1,"1133":1,"1134":1,"1135":1,"1136":1,"1137":1},"2":{"566":1,"599":1,"769":1,"974":1,"1455":1,"1466":2,"1468":1,"1470":4,"1472":1,"1477":4,"1482":1,"1484":1,"1647":1,"1775":1,"2037":1},"3":{"0":39,"10":2,"13":1,"21":1,"24":1,"41":1,"45":1,"46":1,"47":3,"164":3,"165":2,"166":3,"168":1,"170":8,"171":1,"201":1,"235":1,"318":1,"330":1,"331":1,"341":2,"342":1,"343":1,"387":1,"395":1,"402":1,"403":2,"405":2,"471":1,"536":1,"543":1,"544":1,"546":1,"547":1,"549":1,"566":1,"572":1,"574":1,"598":1,"599":9,"600":1,"601":2,"605":1,"609":5,"611":1,"632":1,"633":3,"640":1,"644":1,"692":1,"698":1,"699":1,"713":2,"715":1,"718":1,"764":4,"765":3,"766":9,"769":2,"800":1,"860":1,"888":1,"889":4,"890":2,"892":1,"905":1,"907":1,"913":2,"914":2,"971":2,"972":2,"973":1,"974":2,"987":1,"988":1,"1004":1,"1033":4,"1034":15,"1035":2,"1036":2,"1044":1,"1050":3,"1067":1,"1069":1,"1085":1,"1130":1,"1132":4,"1133":4,"1134":1,"1135":1,"1144":1,"1162":1,"1167":1,"1174":2,"1175":5,"1176":2,"1178":2,"1180":1,"1192":1,"1212":13,"1217":1,"1236":1,"1237":4,"1239":1,"1241":5,"1242":1,"1246":1,"1247":20,"1259":7,"1263":1,"1270":3,"1272":1,"1273":2,"1276":1,"1277":1,"1279":7,"1280":6,"1281":1,"1282":2,"1284":2,"1286":193,"1290":1,"1300":5,"1301":2,"1309":8,"1310":8,"1311":7,"1312":2,"1317":1,"1318":1,"1320":1,"1321":1,"1323":2,"1326":2,"1327":2,"1332":4,"1339":13,"1342":2,"1350":7,"1352":3,"1353":1,"1358":1,"1359":28,"1360":1,"1361":1,"1369":12,"1380":5,"1396":25,"1401":1,"1402":7,"1406":1,"1410":1,"1415":9,"1428":1,"1429":5,"1430":1,"1436":52,"1437":7,"1438":20,"1440":1,"1441":11,"1443":4,"1446":2,"1451":1,"1453":4,"1455":16,"1456":2,"1457":7,"1460":3,"1463":1,"1465":2,"1466":5,"1467":40,"1468":1,"1469":1,"1470":5,"1471":2,"1472":2,"1473":9,"1474":10,"1475":7,"1476":3,"1477":24,"1478":8,"1482":3,"1483":2,"1484":2,"1486":9,"1487":3,"1488":4,"1490":11,"1492":4,"1496":3,"1510":1,"1524":4,"1525":2,"1526":9,"1532":1,"1534":6,"1535":1,"1575":1,"1577":6,"1585":1,"1589":1,"1590":1,"1591":16,"1595":1,"1596":2,"1597":1,"1599":2,"1600":4,"1602":1,"1611":6,"1614":1,"1617":1,"1618":1,"1641":1,"1647":1,"1648":2,"1653":4,"1654":3,"1657":1,"1664":2,"1665":1,"1670":2,"1671":1,"1673":1,"1677":1,"1678":1,"1682":1,"1684":2,"1685":1,"1689":3,"1693":1,"1697":1,"1698":1,"1700":1,"1704":1,"1717":2,"1718":3,"1719":1,"1720":1,"1721":1,"1723":1,"1724":1,"1725":1,"1727":2,"1731":2,"1752":1,"1763":2,"1774":1,"1775":2,"1815":3,"1840":2,"1844":1,"1848":1,"1849":1,"1851":1,"1853":1,"1854":4,"1855":1,"1856":4,"1857":3,"1858":2,"1859":2,"1860":3,"1861":2,"1863":1,"1864":1,"1865":1,"1867":1,"1871":1,"1872":1,"1876":1,"1877":1,"1922":1,"1986":1,"1988":1,"1989":2,"1990":1,"1992":1,"1995":1,"2004":1,"2005":2,"2006":1,"2008":1,"2014":2,"2034":2,"2035":6,"2037":4,"2038":1,"2044":4,"2050":1,"2054":1,"2056":1,"2060":5,"2066":1,"2113":1,"2160":1,"2169":1,"2193":1,"2194":1,"2195":1,"2215":1,"2221":2,"2222":4,"2226":1,"2232":1,"2234":4}}],["slept",{"3":{"1436":1}}],["sleeps",{"3":{"1259":1,"1323":1,"1324":1,"1436":1,"1671":1,"1841":2,"1948":1,"2194":1}}],["sleep",{"2":{"760":1},"3":{"757":1,"759":1,"760":2,"998":1,"1286":1,"1323":2,"1324":1,"1417":1,"1429":1,"1436":1,"1467":1,"1526":1,"1565":1,"1577":1}}],["sleeping",{"3":{"17":1,"881":1,"1160":1,"1259":1,"1275":1,"1324":1,"1396":1,"1436":1,"2044":1}}],["slugged",{"3":{"1496":1}}],["slugs",{"3":{"1480":1,"1496":1}}],["slug",{"2":{"1479":1,"1480":1},"3":{"1415":2,"1479":2,"1480":3}}],["slate",{"3":{"1324":1}}],["slashes",{"3":{"1359":1,"1436":3}}],["slash",{"3":{"420":1,"427":1,"1311":1,"1324":4,"1339":2,"1384":1,"1416":1,"1417":4,"1456":1}}],["slack",{"3":{"178":1,"593":1,"626":1,"627":1,"1286":1,"1324":1,"1415":1,"1455":1,"1492":1,"2048":1,"2222":1}}],["slsa",{"3":{"374":1,"1454":1,"1577":2}}],["sldexp",{"3":{"245":1,"1301":1,"1438":1}}],["sln",{"3":{"1728":1}}],["slnf",{"2":{"1215":2,"1455":1,"1459":1,"1486":2,"1494":1,"1531":1,"1611":1,"1616":1,"1617":1,"1619":1,"1775":1},"3":{"218":2,"374":1,"575":2,"609":2,"914":1,"954":2,"960":1,"1066":1,"1192":1,"1215":3,"1339":2,"1429":1,"1436":6,"1438":3,"1455":6,"1459":1,"1460":2,"1486":19,"1487":6,"1490":1,"1492":5,"1494":1,"1524":1,"1526":34,"1531":6,"1532":1,"1534":2,"1535":2,"1591":24,"1596":3,"1597":1,"1600":2,"1611":5,"1616":1,"1617":2,"1619":1,"1757":1,"1775":1}}],["slnx",{"2":{"139":1,"140":1,"373":1,"509":1,"511":1,"514":1,"528":1,"591":1,"868":1,"906":1,"974":1,"1066":1,"1215":1,"1434":1,"1454":1,"1503":1,"1617":1,"1619":1,"1649":1,"1655":1,"1657":1,"1684":1,"1690":1,"1704":1,"2122":1},"3":{"0":2,"135":3,"137":1,"139":1,"140":1,"142":1,"373":2,"413":1,"509":2,"511":1,"514":3,"528":2,"531":1,"591":1,"618":1,"633":1,"733":1,"737":1,"868":1,"906":1,"914":1,"972":1,"974":1,"980":1,"1034":1,"1066":2,"1067":1,"1192":1,"1215":2,"1323":2,"1339":2,"1417":2,"1434":2,"1436":21,"1438":4,"1453":3,"1454":3,"1455":1,"1456":1,"1460":2,"1486":12,"1487":8,"1490":4,"1492":4,"1494":1,"1503":1,"1577":14,"1611":1,"1617":2,"1619":1,"1649":1,"1654":2,"1657":2,"1684":1,"1686":1,"1690":2,"1704":2,"1727":1,"1728":1,"1729":1,"1923":1,"2099":1,"2122":1}}],["sli",{"3":{"1707":1,"1709":1}}],["slight",{"3":{"1324":1}}],["slightly",{"3":{"178":1,"283":1,"592":1,"804":1,"933":1,"1117":1,"1237":1,"1247":1,"1286":1,"1300":1,"1311":3,"1324":2,"1343":1,"1359":1,"1380":1,"1396":1,"1492":1,"1631":1,"1960":1,"2043":1,"2048":1}}],["slid",{"3":{"1324":1}}],["slideware",{"3":{"1783":1,"2229":1}}],["slides",{"3":{"1351":1,"1357":1,"1369":1,"1395":1,"1630":1,"1982":1,"2234":1}}],["slide",{"3":{"1115":1,"1350":1,"1380":1,"1395":1,"1467":1,"2002":1,"2241":1}}],["sliding",{"3":{"0":2,"173":1,"178":1,"280":1,"497":2,"499":1,"500":1,"1212":2,"1301":1,"1311":3,"1339":1,"1666":1,"2001":1,"2003":1}}],["slidingwindowratelimiteroptions",{"3":{"1311":1}}],["slidingwindow",{"2":{"2001":1},"3":{"0":1,"178":1,"1311":4}}],["slicing",{"3":{"1005":1,"1311":1,"1415":1,"1436":2}}],["sliceable",{"3":{"1323":1}}],["sliced",{"3":{"1311":1,"1485":1,"2116":1}}],["slicefixtures",{"3":{"1207":11,"1431":5,"1436":25,"1496":1}}],["slicecohesion",{"3":{"1576":1}}],["slicecohesiontests",{"3":{"1199":2,"1207":4,"1436":16,"1489":2,"1496":1,"1526":1,"1534":1,"1535":1,"1577":1,"1591":2}}],["slicecohesiontestsbase",{"2":{"1003":1,"2049":1},"3":{"1003":2,"1199":3,"1207":2,"1431":3,"1436":13,"1496":1,"1526":1,"1577":2,"1591":1,"1654":1,"2049":1}}],["slicecohesionfitnesstests",{"3":{"1199":1,"1207":3,"1431":4,"1436":13,"1496":1,"1577":1,"1586":1}}],["slices",{"3":{"132":1,"1006":1,"1207":1,"1300":2,"1351":1,"1359":7,"1370":1,"1399":1,"1402":2,"1431":6,"1436":13,"1489":1,"1496":1,"1514":1,"1526":3,"1542":2,"1577":6,"1582":2,"1583":2,"1586":1,"1591":1,"1684":1,"1686":3,"1701":1,"1726":1,"1727":2,"1728":1,"1730":1,"1731":3,"1932":1,"1937":2,"2116":1,"2144":1}}],["slice",{"0":{"1352":1,"1411":1,"1542":1,"1651":1,"1702":1,"1932":1,"2099":1},"1":{"1931":1,"1932":1,"1933":1,"1934":1,"1935":1,"1936":1,"1937":1,"1938":1,"1939":1,"1940":1,"1941":1},"3":{"122":1,"359":1,"387":1,"632":1,"633":2,"1003":2,"1119":1,"1192":4,"1201":1,"1212":3,"1216":1,"1224":1,"1247":3,"1259":1,"1265":3,"1270":8,"1286":3,"1300":1,"1304":2,"1309":2,"1310":2,"1311":5,"1314":1,"1323":5,"1324":4,"1348":1,"1350":3,"1351":2,"1352":5,"1357":1,"1359":69,"1362":1,"1369":1,"1370":1,"1380":1,"1396":16,"1399":1,"1402":7,"1403":1,"1411":1,"1415":11,"1431":6,"1436":31,"1488":2,"1489":1,"1496":8,"1497":1,"1499":1,"1514":1,"1525":2,"1526":7,"1530":1,"1531":1,"1532":1,"1534":2,"1535":2,"1542":6,"1572":1,"1577":6,"1581":1,"1582":3,"1583":2,"1586":1,"1591":2,"1597":1,"1651":1,"1661":2,"1671":1,"1684":1,"1686":2,"1691":1,"1694":1,"1701":4,"1726":2,"1727":3,"1730":4,"1779":1,"1796":1,"1804":1,"1865":1,"1883":1,"1922":1,"1930":1,"1931":3,"1932":1,"1934":1,"1935":2,"1937":1,"1939":1,"1940":2,"1941":6,"1960":1,"2049":1,"2089":1,"2096":1,"2099":3,"2116":3,"2210":1,"2232":3}}],["slimmer",{"3":{"784":1}}],["slipping",{"3":{"1997":1}}],["slipped",{"3":{"1286":1}}],["slips",{"3":{"1323":1,"1496":1,"1909":1,"2097":1}}],["slip",{"3":{"157":1,"856":1,"1311":1,"1323":1,"1339":1,"1396":1,"1402":1,"1415":1,"1432":1,"1436":5,"1872":1,"2049":1}}],["slogan",{"3":{"1663":1,"2058":1}}],["sloalerts",{"2":{"612":1,"613":1,"2047":1},"3":{"609":2,"612":1,"613":1,"1436":2,"1467":1,"1476":1,"1526":1,"2047":1}}],["sloalertspecs",{"2":{"607":1,"609":1,"611":1,"612":1,"613":1,"1016":1,"1019":1,"1474":1,"2047":1},"3":{"0":1,"607":3,"609":3,"611":1,"612":1,"613":1,"1016":1,"1018":1,"1019":1,"1212":1,"1436":6,"1467":4,"1474":1,"1476":2,"1526":1,"1577":1,"1591":2,"1600":1,"2047":1,"2160":1}}],["slos",{"3":{"609":3,"914":1,"1018":1,"1436":2,"1467":3,"1566":1,"1574":1,"1575":1,"1577":1,"1578":1,"1581":1,"1582":1,"1583":1,"1707":1,"1799":1,"2047":1,"2160":1}}],["slowmo",{"3":{"1436":2,"1488":1}}],["slowing",{"3":{"1259":1,"1300":1,"1486":1}}],["slowly",{"3":{"1123":1,"1300":1,"1324":2,"1339":1,"1340":1,"1380":1,"1396":1,"1402":1,"1416":1,"2001":1,"2012":1}}],["sloworkbook",{"3":{"609":1,"1474":1,"1526":1,"1577":1}}],["slowdown",{"3":{"593":1,"1380":1,"1436":1,"2049":1}}],["slows",{"3":{"592":2,"1436":1,"1456":1,"2048":2}}],["slowbenchmark",{"2":{"591":1},"3":{"591":1}}],["slower",{"3":{"509":1,"511":1,"539":1,"717":1,"996":1,"1247":1,"1270":1,"1286":1,"1311":1,"1339":2,"1359":1,"1395":1,"1415":1,"1436":2,"1441":1,"1453":1,"1534":1,"1989":1,"2050":1}}],["slowest",{"3":{"0":1,"727":1,"1069":1,"1270":1,"1339":3,"1433":1,"1436":1,"1449":1,"1453":2,"1454":1,"1455":1,"1474":2,"1488":1,"1490":1,"2035":1}}],["slow",{"0":{"1902":1},"3":{"235":1,"236":1,"309":1,"311":1,"383":1,"459":1,"520":2,"539":1,"591":1,"709":1,"759":1,"765":1,"818":1,"821":1,"829":1,"833":1,"860":1,"996":1,"1020":1,"1042":1,"1102":1,"1259":1,"1270":1,"1286":2,"1300":1,"1301":3,"1307":1,"1309":1,"1311":2,"1323":2,"1324":5,"1332":1,"1337":1,"1339":4,"1357":1,"1359":2,"1380":1,"1390":1,"1395":5,"1396":6,"1402":1,"1415":1,"1416":1,"1417":3,"1433":1,"1436":7,"1438":1,"1441":1,"1443":1,"1446":1,"1447":1,"1449":1,"1455":1,"1459":2,"1460":1,"1475":1,"1487":1,"1488":1,"1491":1,"1549":1,"1551":1,"1570":1,"1668":1,"1671":1,"1708":1,"1889":1,"1902":1,"1922":1,"1944":1,"1946":1,"1989":1,"2008":1,"2015":1,"2033":1,"2048":1,"2051":1,"2052":1,"2054":1,"2061":1,"2074":1,"2190":1}}],["sloppy",{"3":{"135":1,"2069":1}}],["slots",{"3":{"319":1,"321":1,"471":1,"1012":1,"1013":1,"1247":1,"1301":3,"1311":1,"1324":1,"1359":5,"1380":1,"1402":2,"1415":1,"1453":1,"1479":2,"1480":2,"1554":1,"1555":1,"1572":1,"1577":1,"1631":1,"1995":1}}],["slot",{"0":{"2066":1},"3":{"0":1,"235":1,"265":1,"273":1,"299":1,"304":1,"499":1,"753":2,"774":1,"888":1,"891":1,"904":1,"1012":1,"1013":2,"1033":1,"1034":1,"1124":1,"1212":1,"1270":3,"1271":1,"1286":3,"1300":1,"1301":3,"1304":2,"1307":1,"1309":2,"1311":4,"1323":4,"1324":24,"1332":2,"1339":3,"1350":5,"1352":1,"1359":18,"1369":5,"1380":2,"1396":5,"1402":2,"1415":6,"1416":3,"1417":6,"1436":3,"1458":1,"1459":1,"1479":1,"1480":2,"1489":1,"1496":5,"1531":1,"1554":2,"1631":1,"1637":1,"1779":1,"1876":1,"1945":1,"1957":1,"2001":1,"2066":2,"2085":1,"2086":1,"2120":1,"2125":1,"2136":1}}],["slo",{"0":{"1709":1},"1":{"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"613":1,"614":1},"3":{"0":4,"177":1,"403":1,"606":1,"607":3,"609":11,"612":1,"759":1,"765":1,"914":1,"971":1,"1212":1,"1431":1,"1436":6,"1455":2,"1466":1,"1467":16,"1469":3,"1474":6,"1476":6,"1482":2,"1489":2,"1526":3,"1535":1,"1550":1,"1575":2,"1577":6,"1582":1,"1583":2,"1586":2,"1591":3,"1670":1,"1671":1,"1706":3,"1709":2,"2002":1,"2047":1,"2050":1,"2160":3,"2162":1,"2234":2}}],["spun",{"3":{"2137":1}}],["spurious",{"3":{"897":1,"898":1,"996":1,"1300":1,"1309":1,"1323":1,"1324":2,"1396":2,"1415":1,"1436":1,"1472":1,"1534":1,"1651":1,"1919":1}}],["splats",{"3":{"1395":1,"1436":2}}],["splice",{"3":{"219":1,"1324":1,"2152":1}}],["spliced",{"3":{"219":1,"1286":1,"1324":2,"1467":2,"2151":1,"2152":1}}],["splitter",{"3":{"1436":1}}],["splittoplevel",{"3":{"1436":3}}],["splitting",{"3":{"135":1,"185":1,"507":1,"530":1,"592":1,"642":1,"691":1,"757":2,"758":1,"785":1,"989":1,"1237":3,"1247":2,"1261":1,"1270":2,"1271":1,"1286":5,"1300":4,"1301":1,"1309":2,"1311":3,"1323":2,"1324":8,"1339":1,"1350":2,"1359":10,"1369":1,"1380":1,"1385":1,"1395":5,"1396":3,"1402":9,"1415":3,"1417":5,"1436":7,"1455":1,"1498":1,"1560":1,"1597":1,"1749":1,"1820":1}}],["splitfullname",{"3":{"1311":1}}],["splits",{"3":{"0":1,"165":1,"180":1,"505":1,"528":1,"574":1,"649":1,"759":1,"778":1,"781":1,"845":1,"905":1,"1175":1,"1178":1,"1241":1,"1247":2,"1259":1,"1280":1,"1286":9,"1300":6,"1309":2,"1310":1,"1311":2,"1312":1,"1324":1,"1338":1,"1343":1,"1350":1,"1359":4,"1369":1,"1383":1,"1395":4,"1396":1,"1402":2,"1416":1,"1430":1,"1436":1,"1446":2,"1460":1,"1467":2,"1492":1,"1496":2,"1526":1,"1535":1,"1788":1,"1815":2,"1837":1,"1865":1,"1938":1,"1942":1,"1950":1,"1959":1,"1982":1,"1985":1,"1996":1,"1998":1,"2187":1,"2195":1,"2234":1}}],["split",{"0":{"1252":1,"1385":1},"3":{"0":8,"35":1,"47":2,"58":1,"59":1,"60":1,"62":1,"91":1,"92":1,"96":1,"97":1,"139":1,"145":1,"160":1,"161":1,"168":2,"226":1,"266":1,"320":1,"379":1,"380":1,"440":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":2,"495":1,"507":1,"509":1,"513":1,"514":1,"522":1,"526":1,"529":1,"530":1,"543":2,"545":3,"547":3,"549":2,"550":1,"554":1,"560":1,"582":1,"587":1,"616":1,"631":1,"633":2,"638":1,"652":1,"657":1,"664":1,"677":1,"682":1,"698":1,"707":1,"726":2,"731":1,"733":2,"741":1,"757":1,"758":1,"804":1,"805":1,"826":1,"827":1,"828":1,"844":1,"849":1,"862":1,"867":1,"872":1,"875":2,"923":1,"926":1,"927":1,"938":1,"941":1,"983":1,"1004":3,"1010":1,"1011":1,"1013":1,"1018":1,"1019":2,"1069":1,"1101":1,"1177":1,"1201":2,"1212":4,"1229":2,"1234":1,"1237":2,"1238":2,"1240":1,"1243":2,"1244":1,"1247":9,"1249":1,"1254":1,"1256":1,"1259":5,"1265":1,"1270":4,"1273":1,"1274":2,"1278":3,"1280":1,"1281":1,"1286":22,"1293":1,"1300":13,"1301":3,"1309":4,"1310":10,"1311":12,"1316":1,"1323":8,"1324":24,"1328":1,"1339":7,"1341":1,"1349":1,"1350":11,"1352":1,"1359":35,"1362":1,"1363":1,"1366":2,"1369":5,"1371":2,"1375":2,"1380":17,"1385":1,"1389":2,"1395":27,"1396":27,"1402":13,"1403":1,"1404":1,"1413":1,"1414":1,"1415":16,"1416":4,"1417":12,"1423":1,"1424":1,"1425":1,"1427":1,"1431":1,"1436":35,"1438":3,"1441":2,"1447":5,"1450":1,"1454":4,"1455":7,"1456":1,"1461":1,"1462":1,"1463":1,"1467":2,"1469":2,"1470":1,"1471":2,"1474":1,"1486":2,"1487":1,"1489":1,"1492":2,"1496":10,"1498":1,"1514":1,"1526":2,"1530":1,"1531":1,"1532":1,"1535":1,"1555":1,"1577":4,"1585":2,"1589":1,"1591":2,"1595":1,"1596":1,"1597":1,"1599":1,"1600":2,"1611":1,"1614":1,"1619":1,"1638":1,"1651":1,"1674":1,"1675":1,"1702":1,"1755":1,"1776":2,"1783":2,"1788":1,"1789":2,"1790":1,"1792":4,"1793":1,"1796":1,"1807":1,"1810":1,"1815":1,"1817":1,"1847":2,"1849":1,"1852":3,"1853":3,"1864":2,"1865":2,"1866":1,"1867":1,"1884":1,"1893":1,"1902":1,"1915":1,"1932":1,"1942":1,"1948":1,"1950":1,"1951":1,"1959":1,"1977":1,"1979":1,"1982":2,"1985":1,"1988":1,"1997":1,"1998":1,"2008":1,"2015":1,"2016":3,"2026":1,"2027":1,"2028":1,"2029":2,"2035":1,"2039":1,"2064":1,"2113":1,"2128":1,"2129":1,"2130":1,"2151":1,"2156":1,"2187":1,"2200":1,"2234":2}}],["spymapper",{"3":{"1199":2,"1207":1}}],["sp",{"2":{"518":1},"3":{"518":2,"1100":2,"1323":1,"1436":1,"1534":1}}],["sprint",{"3":{"1986":1,"2044":1}}],["sprinkling",{"3":{"1913":1,"2162":1}}],["sprinkled",{"3":{"1292":1,"1309":1}}],["spring",{"3":{"1348":1,"1350":2,"1355":1,"1359":4,"1393":1}}],["sprawling",{"3":{"1300":1}}],["sprawl",{"3":{"1286":1,"1526":1,"1542":1}}],["sprayed",{"3":{"1369":1,"1999":1}}],["spraying",{"3":{"280":1,"1311":1,"1406":1,"1415":1}}],["spray",{"3":{"175":1,"177":1,"1311":5,"1339":1,"1406":1,"1438":1,"1599":1,"1600":1,"2000":2,"2002":2,"2003":1}}],["spreading",{"3":{"280":1,"1396":1,"1436":2}}],["spreadsheet",{"3":{"743":2,"1286":2,"1311":3}}],["spreadsheets",{"3":{"743":1}}],["spreads",{"3":{"22":1,"23":1,"603":1,"651":1,"1286":1,"1323":1,"1350":1,"1380":2,"1417":1,"1436":2,"1526":1,"1542":1}}],["spread",{"3":{"0":2,"80":1,"408":1,"956":1,"980":1,"1174":1,"1286":2,"1301":1,"1311":1,"1323":1,"1324":1,"1347":1,"1359":10,"1380":3,"1396":1,"1415":1,"1417":1,"1436":4,"1474":1,"1638":1,"2180":1}}],["spills",{"3":{"1324":1}}],["spirit",{"3":{"491":1,"1324":1}}],["spinners",{"3":{"1607":1,"1741":1}}],["spinner",{"3":{"1324":2,"1390":1,"1395":10,"1396":1,"1561":1,"1577":1,"1643":2,"1644":1,"2072":1}}],["spinning",{"3":{"1259":2,"1323":1,"1677":1,"2004":1}}],["spine",{"0":{"1345":1},"3":{"1248":1,"1259":1,"1287":1,"1288":1,"1340":1,"1345":1,"1403":1,"1500":1}}],["spins",{"3":{"1213":1,"1570":1}}],["spin",{"3":{"19":1,"237":1,"1324":1,"1948":1,"2054":1}}],["spikes",{"3":{"875":1,"1188":1,"1488":1}}],["spike",{"3":{"0":3,"58":1,"390":1,"609":2,"611":1,"863":1,"898":1,"1077":3,"1124":1,"1339":2,"1350":1,"1436":1,"1456":1,"1465":1,"1467":2,"1670":1}}],["spof",{"3":{"2039":1}}],["spofs",{"3":{"1476":1,"2034":1}}],["spooky",{"3":{"1556":1}}],["spoof",{"3":{"1309":1}}],["spoofed",{"3":{"1300":1,"1402":2}}],["spoofable",{"3":{"177":1,"751":1,"1286":2,"1311":1}}],["spoofing",{"3":{"0":1}}],["spoken",{"3":{"1417":3}}],["sportsesports",{"3":{"1395":1}}],["sporadic",{"3":{"484":1}}],["spotting",{"3":{"2049":1}}],["spotty",{"3":{"1641":1}}],["spots",{"3":{"0":1,"422":1,"759":1,"1270":1,"1396":1,"1416":1,"1436":1,"1474":1,"1537":2,"1797":1}}],["spot",{"3":{"0":2,"135":1,"422":1,"425":1,"429":1,"759":1,"761":1,"800":1,"988":1,"1259":1,"1339":1,"1396":1,"1405":1,"1436":8,"1438":1,"1449":2,"1492":1,"1496":21,"1500":1,"2001":1,"2049":1}}],["sponsorvalidationrules",{"3":{"1207":10,"1271":4,"1350":3,"1359":37}}],["sponsorvisitlink",{"2":{"1394":1},"3":{"1394":1,"1395":2,"1396":1}}],["sponsorvisitroundtriptests",{"3":{"1199":1,"1207":3}}],["sponsorvisitresultdto",{"3":{"1199":8,"1203":1,"1207":2,"1396":15}}],["sponsorvisitrequestvalidatortests",{"3":{"1199":1,"1207":2}}],["sponsorvisitrequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1396":5}}],["sponsorvisitrequest",{"3":{"1199":7,"1203":1,"1207":2,"1396":9}}],["sponsorvisittests",{"3":{"1199":1,"1207":2,"1396":3,"1438":2}}],["sponsorvisitpage",{"3":{"1199":2,"1207":2}}],["sponsorvisits",{"2":{"690":2,"1396":1},"3":{"690":2,"1203":2,"1207":4,"1396":14}}],["sponsorvisit",{"2":{"690":1},"3":{"556":1,"690":1,"1199":5,"1203":1,"1207":3,"1395":1,"1396":38}}],["sponsorname",{"3":{"1350":2,"1380":2,"1396":2}}],["sponsornamerules",{"3":{"1199":2,"1203":1,"1207":1,"1353":1,"1359":6}}],["sponsornavigationpopulatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["sponsornavigationpopulator",{"3":{"1199":2,"1203":1,"1207":2,"1310":5,"1350":1,"1354":1,"1359":7}}],["sponsorbuilder",{"3":{"1199":3,"1207":2,"1436":1}}],["sponsorboothnumberrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":7}}],["sponsorupdateappliertests",{"3":{"1199":1,"1207":2}}],["sponsorupdateapplier",{"3":{"1199":2,"1203":1,"1207":2,"1270":1,"1350":1,"1354":1,"1359":8}}],["sponsorupdaterequestvalidatortests",{"3":{"1199":1,"1207":2}}],["sponsorupdaterequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":13}}],["sponsorupdaterequest",{"3":{"1199":7,"1203":1,"1207":2,"1350":1,"1359":16,"1380":1}}],["sponsorformfields",{"3":{"1350":1,"1395":5}}],["sponsorformmodel",{"3":{"1199":3,"1203":1,"1207":2,"1350":1,"1384":2,"1395":9}}],["sponsorfieldrules",{"3":{"1199":3,"1203":1,"1207":1,"1353":1,"1359":20}}],["sponsorwebsiteurlrules",{"3":{"1199":2,"1203":1,"1207":1,"1271":1,"1359":4}}],["sponsortests",{"3":{"1199":1,"1207":2,"1350":1,"1438":2}}],["sponsortwitterhandlerules",{"3":{"1199":2,"1203":1,"1207":1,"1359":4}}],["sponsortierinfo",{"3":{"1496":2}}],["sponsortiers",{"3":{"1395":2}}],["sponsortier",{"3":{"1199":25,"1203":1,"1207":2,"1342":1,"1350":10,"1359":3,"1369":5,"1392":1,"1395":11}}],["sponsorlogourlrules",{"3":{"1199":2,"1203":1,"1207":1,"1271":1,"1359":4}}],["sponsorlist",{"3":{"1199":3,"1203":1,"1207":2,"1324":2,"1350":2,"1383":2,"1392":2,"1395":20}}],["sponsorlistpage",{"3":{"1199":2,"1207":2}}],["sponsorlinkedinurlrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":6}}],["sponsorliveinfo",{"3":{"1199":8,"1203":1,"1207":2,"1349":1,"1350":7,"1359":1,"1378":1,"1380":3,"1396":2}}],["sponsorinfo",{"3":{"1496":2}}],["sponsoring",{"3":{"1395":1}}],["sponsorinvariantstests",{"3":{"1199":1,"1207":2,"1350":1}}],["sponsorinvariants",{"2":{"1344":1,"1362":1},"3":{"1199":14,"1203":1,"1207":2,"1344":2,"1350":8,"1359":34,"1362":1,"1369":7}}],["sponsorid",{"2":{"803":1,"1052":1,"1055":1},"3":{"690":3,"799":2,"803":1,"1052":1,"1055":1,"1350":2,"1359":2,"1380":1,"1396":34,"1415":2,"1436":1,"1526":1,"1627":2}}],["sponsoridentifiertype",{"2":{"468":1,"799":1,"1055":1},"3":{"468":1,"799":2,"1055":1,"1350":4,"1359":5,"1395":4,"1396":11}}],["sponsoreditmodel",{"3":{"1199":2,"1203":1,"1207":2,"1395":8}}],["sponsoreventidrules",{"3":{"1199":2,"1203":1,"1207":1,"1271":1,"1359":8}}],["sponsordetails",{"2":{"1394":1},"3":{"1394":1,"1395":1}}],["sponsordetailtests",{"3":{"1199":1,"1207":2}}],["sponsordetail",{"3":{"1199":2,"1203":1,"1207":2,"1350":1,"1384":2,"1388":1,"1392":2,"1395":33,"1396":1}}],["sponsordetailpage",{"3":{"1199":3,"1207":2}}],["sponsordescriptionrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":4}}],["sponsordtomappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["sponsordtomapper",{"3":{"1199":5,"1203":1,"1207":2,"1311":1,"1350":4,"1353":1,"1359":7}}],["sponsordto",{"3":{"1199":20,"1203":1,"1207":2,"1347":2,"1350":13,"1359":22,"1380":1,"1382":1,"1395":27,"1496":1}}],["sponsorconfiguration",{"2":{"1361":1},"3":{"1199":1,"1203":1,"1207":2,"1350":8,"1359":5,"1361":1,"1362":3,"1369":10}}],["sponsorcreatetests",{"3":{"1199":1,"1207":2}}],["sponsorcreate",{"3":{"1199":2,"1203":1,"1207":2,"1350":3,"1392":1,"1395":25}}],["sponsorcreaterequestvalidatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["sponsorcreaterequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":11}}],["sponsorcreaterequestmapper",{"3":{"1199":1,"1203":1,"1207":2,"1311":2,"1359":5}}],["sponsorcreaterequest",{"3":{"1199":8,"1203":1,"1207":2,"1270":1,"1350":1,"1359":13,"1380":1}}],["sponsorcreatemodel",{"3":{"1199":3,"1203":1,"1207":2,"1395":7}}],["sponsorcreatepage",{"3":{"1199":3,"1207":2}}],["sponsorchanged",{"3":{"782":1,"1199":3,"1203":1,"1207":2,"1345":1,"1350":10,"1359":2,"1438":1}}],["sponsorsmanage",{"3":{"1350":2,"1359":1,"1373":1,"1380":2}}],["sponsorships",{"3":{"1380":1,"1395":1}}],["sponsorshippacketurl",{"2":{"1387":1},"3":{"1350":2,"1359":6,"1369":2,"1387":1,"1395":4,"1526":1}}],["sponsorshippacketurlmaxlength",{"3":{"1350":2,"1359":2}}],["sponsorship",{"3":{"1271":1,"1340":1,"1342":3,"1350":5,"1359":10,"1364":1,"1369":4,"1380":1,"1384":1,"1392":2,"1395":12,"1436":1,"1438":1,"1455":1,"1463":1,"1467":1,"1474":1,"1629":1,"1631":2}}],["sponsorsortrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":4}}],["sponsorservice",{"3":{"881":1,"1199":6,"1203":1,"1207":2,"1369":1,"1382":3,"1395":9}}],["sponsorscontrollertests",{"3":{"1199":1,"1207":2,"1438":2,"1487":1}}],["sponsorscontroller",{"3":{"743":1,"1199":4,"1203":1,"1207":2,"1350":5,"1359":20,"1371":2,"1372":3,"1373":3,"1375":3,"1380":10,"1436":1}}],["sponsorscache",{"2":{"386":1},"3":{"386":1,"1350":1,"1379":1,"1380":2}}],["sponsors",{"0":{"1392":1},"2":{"1350":1,"1395":1,"1396":1},"3":{"0":1,"186":1,"556":1,"743":1,"837":1,"838":1,"881":1,"1004":1,"1203":40,"1207":112,"1270":1,"1271":4,"1310":4,"1311":2,"1342":3,"1346":2,"1347":1,"1348":2,"1349":1,"1350":37,"1351":2,"1352":1,"1353":1,"1359":127,"1363":1,"1364":1,"1369":18,"1375":1,"1380":9,"1381":1,"1382":3,"1383":4,"1384":3,"1387":1,"1388":1,"1392":6,"1395":69,"1396":13,"1415":1,"1433":1,"1436":1,"1437":1,"1438":6,"1447":1,"1487":1,"1496":1,"1526":1,"1621":1,"1625":1,"1627":6,"1629":1,"1631":7,"2242":1}}],["sponsor",{"2":{"1346":1},"3":{"0":2,"556":1,"583":1,"688":2,"690":7,"691":3,"924":1,"1199":28,"1203":1,"1207":2,"1212":1,"1270":1,"1271":5,"1310":4,"1311":1,"1340":1,"1342":12,"1343":2,"1346":3,"1349":1,"1350":76,"1351":1,"1352":3,"1354":1,"1355":1,"1359":141,"1361":1,"1362":2,"1369":22,"1375":1,"1380":11,"1381":1,"1383":1,"1387":2,"1388":1,"1392":3,"1393":1,"1395":83,"1396":103,"1415":1,"1436":2,"1438":11,"1466":1,"1467":1,"1487":5,"1496":4,"1526":4,"1627":2,"1629":1,"1631":10,"1638":1}}],["speeding",{"3":{"1301":1}}],["speed",{"3":{"459":1,"463":1,"1301":1,"1436":3,"1488":1,"1554":1,"1560":1,"1900":1,"1923":1,"2052":1}}],["speeds",{"3":{"133":1,"457":1,"465":1,"2102":1,"2108":3}}],["speechoptions",{"3":{"1417":2}}],["speechtotextoptions",{"3":{"1417":1}}],["speechtotext",{"3":{"1402":3,"1417":2}}],["speech",{"3":{"412":1,"415":1,"1192":1,"1202":1,"1203":1,"1395":1,"1416":2,"1417":16,"1496":1,"1669":2}}],["spell",{"3":{"526":1,"607":1,"611":1,"650":1,"727":1,"1247":3,"1286":3,"1300":3,"1301":2,"1323":1,"1324":1,"1326":1,"1339":1,"1352":1,"1359":2,"1369":1,"1396":2,"1405":1,"1406":1,"1415":5,"1436":3,"1444":1,"1596":1,"1814":1}}],["spellsoutgenericarguments",{"3":{"1436":3}}],["spells",{"3":{"390":1,"674":1,"1034":1,"1237":1,"1247":3,"1259":4,"1270":1,"1286":5,"1300":4,"1309":2,"1311":3,"1315":1,"1323":6,"1324":6,"1326":1,"1339":1,"1343":1,"1350":2,"1359":4,"1369":2,"1380":2,"1395":3,"1396":4,"1402":2,"1412":1,"1415":4,"1417":2,"1436":8,"1455":1,"1467":1,"1486":1,"1524":1,"1526":1,"1531":1,"1577":1,"2005":1,"2097":1,"2146":1}}],["spellings",{"3":{"892":1,"1247":2,"1286":3,"1296":1,"1297":1,"1324":1,"1339":1,"1350":1,"1436":1,"1596":1}}],["spelling",{"3":{"283":2,"633":4,"889":1,"974":1,"1068":1,"1247":1,"1270":1,"1286":7,"1300":1,"1323":1,"1343":1,"1369":1,"1395":1,"1396":1,"1402":1,"1415":2,"1417":1,"1436":9,"1596":1,"1722":1,"1729":1}}],["spelled",{"3":{"122":1,"793":1,"803":1,"938":1,"980":1,"1020":1,"1230":1,"1237":1,"1259":1,"1263":1,"1270":2,"1271":1,"1286":3,"1300":4,"1301":1,"1309":1,"1311":3,"1312":1,"1323":2,"1324":3,"1326":2,"1339":2,"1359":4,"1369":1,"1379":1,"1380":1,"1395":1,"1396":5,"1402":1,"1409":1,"1415":2,"1417":4,"1436":5,"1438":2,"1492":1,"1535":1,"2031":1,"2168":1}}],["spent",{"3":{"73":1,"818":2,"819":1,"872":1,"1259":1,"1283":1,"1286":1,"1293":1,"1300":3,"1311":1,"1324":1,"1339":3,"1408":1,"1418":1,"1473":1,"1483":1,"1667":1,"1843":1,"1980":1,"1982":1,"2172":1}}],["spending",{"3":{"151":1,"1293":1,"1436":1,"1438":1}}],["spends",{"3":{"19":1,"122":1,"592":1,"818":1,"1263":2,"1270":2,"1311":1,"1324":2,"1339":1,"1395":2,"1396":1,"1401":1,"1402":2,"1415":1,"1436":2,"1455":2,"1492":2,"1821":1,"1908":1,"2004":1,"2048":1}}],["spend",{"3":{"0":3,"178":1,"408":1,"517":1,"538":1,"650":1,"759":1,"760":1,"765":3,"767":2,"768":1,"831":1,"1017":1,"1018":3,"1019":3,"1020":3,"1041":1,"1090":1,"1091":2,"1092":1,"1093":3,"1212":1,"1229":1,"1300":1,"1311":2,"1324":2,"1330":1,"1339":2,"1350":2,"1359":3,"1369":2,"1380":1,"1395":1,"1396":1,"1402":1,"1422":1,"1425":1,"1426":1,"1427":2,"1435":1,"1436":3,"1438":1,"1442":2,"1456":2,"1457":2,"1460":1,"1467":7,"1476":1,"1490":1,"1496":1,"1526":3,"1553":1,"1568":2,"1577":2,"1591":1,"1678":1,"1679":1,"1683":1,"1788":1,"2007":1,"2158":1,"2162":1,"2170":1,"2172":1,"2179":3,"2181":1,"2182":2,"2185":1}}],["speakasync",{"3":{"1395":1,"1417":4}}],["speakable",{"3":{"882":1}}],["speak",{"0":{"2245":1},"3":{"243":1,"286":1,"346":1,"536":1,"800":1,"1301":1,"1311":1,"1312":1,"1331":1,"1338":1,"1339":6,"1350":1,"1417":2,"1446":1,"1447":1,"1656":1,"1670":1,"1928":1,"2026":1,"2118":1,"2218":1,"2245":1}}],["speaking",{"0":{"2218":1},"1":{"2240":1,"2241":1,"2242":1,"2243":1,"2244":1,"2245":1},"3":{"103":1,"856":1,"1050":1,"1053":1,"1417":3,"2240":2,"2246":1}}],["speaks",{"3":{"31":1,"97":2,"98":1,"99":1,"265":1,"331":2,"341":1,"433":1,"692":1,"905":1,"1067":1,"1134":1,"1217":1,"1241":1,"1270":1,"1271":3,"1300":2,"1309":1,"1311":1,"1326":1,"1331":1,"1337":1,"1339":4,"1350":2,"1359":1,"1395":2,"1396":2,"1417":5,"1430":1,"1436":1,"1440":2,"1444":1,"1447":1,"1685":1,"1831":2,"1874":1,"1888":1,"1896":1,"1928":1,"1988":2,"2010":2,"2026":1,"2085":1,"2143":1}}],["speakerprofiletests",{"3":{"1496":1}}],["speakeroverlap",{"3":{"1350":2,"1395":1}}],["speakername",{"3":{"1350":1,"1395":1}}],["speakernavigationpopulatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["speakernavigationpopulator",{"3":{"1199":2,"1203":1,"1207":2,"1310":5,"1350":2,"1354":1,"1359":10}}],["speakerresult",{"3":{"1247":1}}],["speakerrenamed",{"2":{"785":1},"3":{"785":1}}],["speakervalidationrules",{"3":{"1207":7,"1271":3,"1350":4,"1359":23}}],["speakervalidationrulestests",{"3":{"1199":1,"1207":4,"1359":6}}],["speakermanagementtests",{"3":{"1199":1,"1207":2}}],["speakertests",{"3":{"1199":1,"1207":2,"1350":1}}],["speakerbuilder",{"3":{"1199":11,"1207":2,"1436":1}}],["speakerwebsiteurlrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":2}}],["speakergithuburlrules",{"3":{"1199":2,"1203":1,"1207":1,"1271":1,"1359":5}}],["speakerformfields",{"3":{"1395":2}}],["speakerformmodel",{"3":{"1199":3,"1203":1,"1207":2,"1384":2,"1395":8}}],["speakerfeedbackauthtests",{"3":{"1199":1,"1207":2,"1438":2}}],["speakerfieldrules",{"3":{"1199":3,"1203":1,"1207":1,"1353":1,"1359":20}}],["speakerfirstnamerules",{"3":{"1199":3,"1203":1,"1207":1,"1271":1,"1353":1,"1359":5}}],["speakerentityqueryservicetests",{"3":{"1199":1,"1207":2,"1359":2}}],["speakerentityqueryservice",{"2":{"1244":1},"3":{"1199":2,"1203":1,"1207":2,"1242":2,"1244":3,"1247":2,"1354":2,"1359":9}}],["speakeremailrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":7}}],["speakereditmodeltests",{"3":{"1199":1,"1207":2}}],["speakereditmodel",{"3":{"1199":4,"1203":1,"1207":2,"1395":6}}],["speakerqrtests",{"3":{"1199":1,"1207":3,"1438":2}}],["speakerqr",{"3":{"1199":2,"1203":1,"1207":2,"1324":5,"1388":3,"1395":11,"1526":1}}],["speakerqrpage",{"3":{"1199":2,"1207":2}}],["speakerquestionanswernavigationpopulator",{"3":{"1496":1}}],["speakerquestionanswerid",{"3":{"1350":1}}],["speakerquestionansweridentifiertype",{"3":{"1350":3,"1359":1}}],["speakerquestionanswerscontroller",{"2":{"1632":1,"1639":1},"3":{"1632":1,"1639":2}}],["speakerquestionanswers",{"3":{"1310":1,"1350":3,"1359":4,"1369":1,"1436":1,"1630":2,"1632":2,"1639":1}}],["speakerquestionanswerconfiguration",{"2":{"1362":1},"3":{"1199":1,"1203":1,"1207":2,"1350":3,"1362":2,"1369":4}}],["speakerquestionanswerchanged",{"2":{"1345":1,"1631":1,"1632":1,"1634":1},"3":{"1199":3,"1203":1,"1207":2,"1345":1,"1350":6,"1631":1,"1632":3,"1634":2}}],["speakerquestionanswertests",{"3":{"1199":1,"1207":2,"1350":1}}],["speakerquestionanswerdtomappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["speakerquestionanswerdtomapper",{"3":{"1199":7,"1203":1,"1207":2,"1350":3,"1359":7}}],["speakerquestionanswerdto",{"2":{"1347":1},"3":{"1199":3,"1203":1,"1207":2,"1347":1,"1350":5,"1359":1}}],["speakerquestionanswer",{"2":{"1342":1,"1363":1,"1638":1,"1640":1},"3":{"1198":1,"1199":10,"1203":1,"1207":2,"1342":2,"1350":12,"1359":6,"1363":1,"1369":4,"1630":1,"1631":3,"1632":1,"1634":2,"1635":3,"1637":1,"1638":5,"1639":7,"1640":5}}],["speakerlastnamerules",{"3":{"1199":3,"1203":1,"1207":1,"1359":3}}],["speakerlocalities",{"3":{"1350":3,"1395":1}}],["speakerlocality",{"3":{"1350":2,"1395":1}}],["speakerlocalityhelpertests",{"3":{"1199":1,"1207":2,"1359":5}}],["speakerlocalityhelper",{"3":{"1199":3,"1203":1,"1207":3,"1347":1,"1350":6,"1359":18,"1496":2}}],["speakerlocalitysummary",{"3":{"1199":4,"1203":1,"1207":1,"1347":1,"1350":3,"1359":2}}],["speakerlookupservicetests",{"3":{"1199":1,"1207":2}}],["speakerlookupservice",{"2":{"1387":1},"3":{"1199":2,"1203":1,"1207":2,"1324":4,"1380":1,"1382":1,"1387":2,"1395":12}}],["speakerlist",{"3":{"1199":1,"1203":1,"1207":2,"1324":2,"1350":1,"1359":1,"1383":2,"1395":13}}],["speakerlistpage",{"3":{"1199":2,"1207":2}}],["speakerlinkbrokerflowtests",{"3":{"1199":1,"1207":2}}],["speakerlinkscontrollertests",{"3":{"1199":1,"1207":2,"1487":1}}],["speakerlinkscontroller",{"3":{"1199":2,"1203":1,"1207":2,"1350":5,"1359":14,"1371":2,"1373":2,"1380":8,"1395":4,"1436":1,"1496":1,"1535":1}}],["speakerlinked",{"3":{"1438":1,"1490":1,"1611":1}}],["speakerlinkedinurlrules",{"3":{"1199":2,"1203":1,"1207":1,"1271":1,"1359":2}}],["speakerlinkedtouserhandlertests",{"3":{"1199":1,"1207":3}}],["speakerlinkedtouserhandler",{"2":{"1413":1,"1611":1},"3":{"1199":2,"1203":1,"1207":2,"1259":2,"1350":1,"1413":2,"1415":9,"1524":1,"1526":1,"1534":1,"1611":1}}],["speakerlinkedtouser",{"2":{"195":1,"1341":1,"1355":1,"1451":1,"1612":1},"3":{"195":1,"1199":10,"1203":1,"1207":2,"1237":2,"1259":1,"1341":1,"1349":4,"1350":16,"1355":2,"1359":5,"1395":1,"1413":1,"1415":6,"1436":2,"1438":1,"1451":1,"1467":1,"1534":1,"1612":1}}],["speakerinvariantstests",{"3":{"1199":1,"1207":2,"1350":1}}],["speakerinvariants",{"2":{"1344":1,"1810":1},"3":{"1199":18,"1203":1,"1207":2,"1237":1,"1286":1,"1344":3,"1350":15,"1359":42,"1369":5,"1496":1,"1810":1}}],["speakerinfo",{"3":{"1199":28,"1203":2,"1207":2,"1359":9,"1369":1,"1387":1,"1395":15}}],["speakerids",{"3":{"1350":1,"1359":4,"1380":2,"1402":5}}],["speakerid",{"2":{"1386":2,"1813":2},"3":{"1198":2,"1199":9,"1207":2,"1247":1,"1350":24,"1359":50,"1362":1,"1369":14,"1375":1,"1380":16,"1386":2,"1388":1,"1395":46,"1415":1,"1438":1,"1488":1,"1631":3,"1632":4,"1634":2,"1635":4,"1640":1,"1641":7,"1813":2}}],["speakeridentifiertype",{"2":{"470":1,"472":1,"475":1,"476":1,"477":1,"478":1,"798":1,"803":1,"804":1,"805":1,"1049":1,"1054":1},"3":{"470":2,"472":1,"475":2,"476":2,"477":1,"478":2,"798":1,"803":1,"804":1,"805":1,"1049":1,"1054":1,"1212":1,"1286":1,"1350":22,"1359":45,"1380":4,"1395":20,"1402":7,"1404":1,"1415":2}}],["speakerunlinked",{"3":{"1438":1}}],["speakerunlinkedfromuserhandlertests",{"3":{"1199":1,"1207":3}}],["speakerunlinkedfromuserhandler",{"2":{"1413":1,"1611":1},"3":{"1199":2,"1203":1,"1207":2,"1259":2,"1350":1,"1359":1,"1413":1,"1415":4,"1526":1,"1534":1,"1611":1}}],["speakerunlinkedfromuser",{"2":{"195":1,"1341":1,"1349":1,"1355":1,"1413":1,"1451":1,"1612":1},"3":{"195":1,"1199":8,"1203":1,"1207":2,"1237":2,"1259":1,"1341":1,"1349":2,"1350":14,"1355":1,"1359":9,"1395":1,"1413":1,"1415":2,"1436":1,"1438":1,"1451":1,"1467":1,"1612":1}}],["speakerusersearch",{"3":{"1199":2,"1203":1,"1207":2,"1385":2,"1395":5,"1415":2}}],["speakerupdateauthtests",{"3":{"1199":1,"1207":2}}],["speakerupdateapplier",{"3":{"926":1,"1199":3,"1203":1,"1207":2,"1270":4,"1354":2,"1359":11}}],["speakerupdaterequestvalidatortests",{"3":{"1199":1,"1207":2}}],["speakerupdaterequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":9}}],["speakerupdaterequest",{"3":{"1199":7,"1203":1,"1207":2,"1359":15,"1380":1}}],["speakerclaims",{"3":{"1406":1,"1415":1}}],["speakercount",{"3":{"1350":1}}],["speakercommandvalidatortests",{"3":{"1207":1,"1359":2}}],["speakerconfiguration",{"2":{"1361":1},"3":{"657":1,"1199":1,"1203":1,"1207":2,"1286":3,"1350":8,"1359":1,"1361":1,"1362":3,"1369":4}}],["speakercreated",{"3":{"1631":1,"1634":1}}],["speakercreaterequestvalidatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["speakercreaterequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":11}}],["speakercreaterequestmappertests",{"3":{"1199":1,"1207":2,"1438":1}}],["speakercreaterequestmapper",{"3":{"1199":2,"1203":1,"1207":2,"1359":15}}],["speakercreaterequest",{"3":{"1199":9,"1203":1,"1207":2,"1270":1,"1359":34,"1380":1}}],["speakercreate",{"3":{"1199":1,"1203":1,"1207":2,"1395":20}}],["speakercreatemodel",{"3":{"1199":3,"1203":1,"1207":2,"1395":6}}],["speakercreatepage",{"3":{"1199":5,"1207":2}}],["speakercategoryitemid",{"3":{"1350":1,"1359":5}}],["speakercategoryitemidentifiertype",{"3":{"1350":4,"1359":4,"1395":4}}],["speakercategoryitemconfiguration",{"2":{"1362":1},"3":{"1199":1,"1203":1,"1207":2,"1350":1,"1359":1,"1362":2,"1369":6}}],["speakercategoryitemchanged",{"2":{"1345":1,"1631":1,"1634":1},"3":{"1199":4,"1203":1,"1207":2,"1345":1,"1350":6,"1359":2,"1631":1,"1634":1}}],["speakercategoryitemnavigationpopulatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["speakercategoryitemnavigationpopulator",{"3":{"1199":2,"1203":1,"1207":2,"1310":1,"1359":9}}],["speakercategoryitemtests",{"3":{"1199":1,"1207":2,"1350":1}}],["speakercategoryitems",{"2":{"1363":1},"3":{"1310":3,"1324":1,"1350":4,"1359":12,"1363":1,"1369":2,"1380":2,"1395":1,"1436":1,"1447":1,"1630":2,"1632":3,"1635":1,"1639":2}}],["speakercategoryitemscontrollertests",{"3":{"1199":1,"1207":2}}],["speakercategoryitemscontroller",{"2":{"1371":1,"1372":1},"3":{"1199":3,"1203":1,"1207":3,"1311":2,"1350":1,"1359":23,"1371":2,"1372":3,"1373":2,"1374":1,"1380":17}}],["speakercategoryitemspaneltests",{"3":{"1199":1,"1207":3}}],["speakercategoryitemspanel",{"2":{"1385":1},"3":{"1199":2,"1203":1,"1207":2,"1385":2,"1395":12}}],["speakercategoryitemservice",{"2":{"1386":1},"3":{"1199":2,"1203":1,"1207":1,"1324":1,"1386":1,"1395":4}}],["speakercategoryitemdtomappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["speakercategoryitemdtomapper",{"3":{"1199":9,"1203":1,"1207":2,"1350":3,"1359":16}}],["speakercategoryitemdto",{"3":{"1199":10,"1203":1,"1207":2,"1347":1,"1350":7,"1359":6,"1380":1,"1395":4}}],["speakercategoryitem",{"2":{"1342":1},"3":{"1198":1,"1199":16,"1203":1,"1207":2,"1237":2,"1310":1,"1342":3,"1350":8,"1359":25,"1369":3,"1380":1,"1395":1,"1630":1,"1631":1,"1632":1,"1634":2,"1635":2,"1637":1,"1638":3,"1639":5}}],["speakerchanged",{"2":{"1638":1},"3":{"782":2,"1199":5,"1203":1,"1207":2,"1259":1,"1345":3,"1350":13,"1355":1,"1359":4,"1631":1,"1634":3,"1638":3,"1639":1}}],["speakerdeleted",{"3":{"1359":1}}],["speakerdeletedhandlertests",{"3":{"1199":1,"1207":3}}],["speakerdeletedhandler",{"2":{"780":1,"782":1,"785":1},"3":{"780":1,"782":2,"784":1,"785":1,"1199":3,"1203":1,"1207":2,"1237":1,"1350":7,"1355":4,"1359":3}}],["speakerdetails",{"3":{"1395":2}}],["speakerdetailtests",{"3":{"1199":1,"1207":2,"1395":2}}],["speakerdetail",{"3":{"1199":2,"1203":1,"1207":2,"1237":1,"1350":1,"1384":2,"1395":47,"1415":2,"1496":1,"1526":1,"1531":1,"1535":1,"1627":1}}],["speakerdetailpage",{"3":{"1199":4,"1207":2}}],["speakerdetaillookupservice",{"2":{"1387":1},"3":{"1199":1,"1203":1,"1207":2,"1387":2,"1395":18}}],["speakerdetaillookups",{"2":{"1387":1},"3":{"1199":5,"1203":1,"1207":1,"1387":1,"1395":8}}],["speakerdtotests",{"3":{"1199":1,"1207":2}}],["speakerdto",{"3":{"1199":30,"1203":1,"1207":3,"1347":2,"1350":17,"1359":22,"1380":1,"1382":1,"1395":20}}],["speakerdtomappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["speakerdtomapper",{"2":{"5":1,"6":1},"3":{"5":1,"6":1,"657":1,"1199":8,"1203":1,"1207":2,"1350":9,"1353":3,"1359":27}}],["speakerdashboardtests",{"3":{"1199":2,"1207":4}}],["speakerdashboardpage",{"3":{"1199":3,"1207":2}}],["speakerdashboardservicetests",{"3":{"1199":1,"1207":2,"1395":1,"1436":1}}],["speakerdashboardservice",{"2":{"1388":1},"3":{"881":1,"1199":2,"1203":1,"1207":2,"1300":2,"1350":3,"1388":3,"1395":23}}],["speakerdashboard",{"2":{"1388":1},"3":{"556":1,"1119":1,"1199":2,"1203":1,"1207":2,"1350":3,"1388":2,"1395":20,"1531":1}}],["speakerscache",{"3":{"1350":1,"1359":1,"1379":1,"1380":2}}],["speakerscontrollertests",{"3":{"1199":1,"1207":2}}],["speakerscontroller",{"3":{"550":1,"552":1,"743":1,"1199":3,"1203":1,"1207":2,"1247":4,"1311":6,"1350":7,"1359":43,"1371":2,"1372":3,"1373":7,"1375":5,"1380":19,"1395":1,"1396":2,"1436":2,"1496":1,"1526":1}}],["speakerssynced",{"3":{"1350":1,"1359":1}}],["speakersmanage",{"2":{"1373":1},"3":{"1350":3,"1359":7,"1373":3,"1380":10,"1395":1}}],["speakersyncstrategytests",{"3":{"1199":1,"1207":2,"1359":1}}],["speakersyncstrategy",{"3":{"1199":3,"1203":1,"1207":2,"1350":8,"1358":1,"1359":16,"1526":1}}],["speakersexcept",{"3":{"1395":1}}],["speakerselfservicetests",{"3":{"1199":1,"1207":2,"1526":2}}],["speakersessionassettests",{"3":{"1199":1,"1207":2}}],["speakersessionscontrollertests",{"3":{"1199":1,"1207":2,"1487":1}}],["speakersessionscontroller",{"2":{"1371":1,"1375":1},"3":{"1199":2,"1203":1,"1207":2,"1350":4,"1371":2,"1375":3,"1380":6,"1396":2,"1436":1,"1496":1}}],["speakersessionsummary",{"3":{"1199":7,"1203":1,"1207":1,"1347":1,"1350":3,"1359":3,"1395":1}}],["speakersessionoverlapdto",{"2":{"1347":1},"3":{"1199":8,"1203":1,"1207":4,"1347":1,"1350":9,"1359":3,"1380":1}}],["speakerservice",{"3":{"881":1,"1199":7,"1203":1,"1207":2,"1382":4,"1395":8}}],["speakers",{"2":{"1350":1,"1380":1,"1395":1},"3":{"0":2,"186":1,"353":2,"470":1,"550":1,"554":1,"556":2,"657":3,"743":1,"782":1,"881":2,"926":1,"1004":6,"1018":1,"1116":4,"1118":1,"1168":1,"1202":1,"1203":94,"1207":296,"1212":1,"1237":6,"1238":1,"1242":2,"1247":3,"1259":2,"1270":8,"1271":3,"1286":1,"1300":1,"1310":7,"1311":4,"1324":6,"1340":1,"1342":3,"1343":1,"1345":1,"1346":1,"1347":5,"1348":1,"1349":3,"1350":87,"1351":4,"1352":3,"1353":4,"1354":2,"1355":5,"1357":2,"1358":4,"1359":289,"1363":1,"1364":3,"1365":1,"1367":1,"1369":19,"1371":3,"1373":1,"1380":36,"1381":1,"1382":4,"1383":5,"1384":3,"1385":2,"1386":1,"1387":4,"1388":7,"1389":1,"1391":1,"1392":1,"1395":115,"1396":3,"1402":11,"1413":1,"1415":7,"1416":2,"1433":1,"1435":2,"1436":2,"1437":1,"1438":8,"1441":1,"1447":1,"1458":1,"1492":1,"1496":2,"1526":1,"1531":1,"1534":1,"1535":1,"1608":1,"1621":1,"1625":1,"1626":1,"1627":4,"1629":8,"1630":7,"1631":6,"1632":16,"1635":3,"1636":5,"1637":5,"1638":4,"1639":10,"1640":4,"1641":14,"1815":1,"1863":1,"1866":1,"2072":1,"2112":2,"2218":1,"2240":1,"2242":2,"2243":1}}],["speaker",{"0":{"1624":1,"1626":1},"1":{"1113":1,"1114":1,"1115":1,"1116":1,"1117":1,"1118":1,"1119":1,"1120":1},"2":{"1355":1,"1621":1,"1626":1,"1635":1,"1636":1,"1640":1,"1641":1,"1983":1},"3":{"0":3,"340":1,"348":1,"350":2,"351":1,"353":5,"387":2,"443":1,"470":1,"545":1,"655":1,"657":4,"888":2,"926":1,"1017":1,"1018":3,"1113":1,"1115":4,"1116":7,"1117":1,"1118":2,"1168":2,"1192":1,"1198":2,"1199":62,"1201":1,"1202":1,"1203":2,"1207":19,"1212":1,"1237":3,"1239":1,"1247":3,"1270":3,"1271":2,"1281":1,"1286":3,"1288":1,"1300":4,"1310":4,"1311":1,"1312":1,"1323":1,"1324":4,"1340":3,"1342":13,"1343":8,"1345":2,"1347":5,"1348":2,"1349":2,"1350":186,"1351":2,"1352":2,"1353":4,"1354":1,"1355":9,"1357":7,"1359":494,"1361":1,"1362":4,"1363":1,"1364":1,"1366":3,"1369":33,"1371":2,"1373":5,"1375":3,"1376":1,"1377":1,"1378":2,"1379":1,"1380":70,"1381":1,"1382":1,"1383":2,"1385":1,"1386":2,"1387":1,"1388":8,"1389":7,"1390":1,"1391":1,"1392":1,"1395":203,"1396":17,"1397":2,"1402":38,"1403":1,"1405":1,"1406":3,"1412":1,"1413":4,"1415":28,"1416":2,"1424":1,"1436":11,"1437":1,"1438":23,"1467":5,"1487":4,"1489":2,"1490":1,"1492":1,"1496":6,"1498":1,"1524":1,"1526":4,"1531":1,"1534":2,"1535":2,"1608":1,"1611":4,"1617":1,"1621":8,"1624":1,"1626":2,"1627":15,"1629":4,"1630":37,"1631":14,"1632":58,"1633":2,"1634":7,"1635":11,"1636":4,"1637":12,"1638":16,"1639":38,"1640":12,"1641":77,"1805":1,"1813":1,"1815":4,"1829":1,"1869":2,"1922":2,"1955":1,"1977":1,"1983":1,"2066":2,"2112":1,"2115":1,"2128":1,"2129":1,"2218":1,"2234":1}}],["specparser",{"3":{"2222":1}}],["speculatively",{"3":{"1455":1}}],["spectrum",{"3":{"1436":1,"1492":1,"2005":1}}],["spectestentity",{"3":{"1199":28,"1207":1}}],["spectestchild",{"3":{"1199":6,"1207":1}}],["spectestmap",{"3":{"1198":1,"1199":2,"1207":1,"1436":8}}],["specfactory",{"3":{"1300":1}}],["spec2",{"3":{"1247":3}}],["spec1",{"3":{"1247":3}}],["specs",{"3":{"319":1,"607":2,"609":3,"976":1,"1192":1,"1247":1,"1339":1,"1431":1,"1436":3,"1467":3,"1476":3,"1496":1,"1546":1,"2047":3}}],["spec",{"3":{"0":3,"318":2,"320":3,"549":1,"607":4,"609":15,"610":1,"611":1,"1212":1,"1247":6,"1286":2,"1311":1,"1336":1,"1339":2,"1359":3,"1415":1,"1417":2,"1431":1,"1436":3,"1467":6,"1476":1,"1496":1,"1500":1,"1534":1,"1577":1,"1591":1,"1638":1,"1639":10,"1815":2,"2160":2,"2241":1}}],["specimen",{"3":{"1323":1,"1340":1}}],["specifying",{"3":{"1639":1}}],["specifykind",{"3":{"1286":2,"1309":1,"1312":1,"1415":1}}],["specify",{"3":{"1237":1,"1271":1,"1359":6,"1639":2}}],["specified",{"3":{"861":1,"885":1,"1359":1,"1631":1,"1639":3,"1640":1}}],["specifies",{"3":{"859":1,"880":1,"1286":1,"1417":1,"1429":1,"1640":1}}],["specificity",{"3":{"1311":1,"1577":1}}],["specifically",{"3":{"665":1,"702":1,"1229":1,"1247":1,"1286":1,"1311":3,"1312":1,"1323":2,"1324":3,"1339":2,"1350":1,"1359":2,"1395":2,"1396":3,"1415":2,"1417":1,"1427":1,"1436":8,"1455":1,"1467":1,"1490":1,"1727":1,"1840":1,"1960":1,"2177":1}}],["specificationprefix",{"3":{"1286":3}}],["specificationtestcontext",{"3":{"1207":3}}],["specificationtestdbcontext",{"3":{"1199":9,"1207":1}}],["specificationtests",{"3":{"1199":1,"1207":5,"1247":5}}],["specificationadditionaltests",{"3":{"1199":1,"1207":5}}],["specificationhonoringqueryservice",{"3":{"1199":2,"1207":1}}],["specificationconventiontests",{"3":{"1199":1,"1207":2,"1247":1,"1436":5,"1489":2,"1526":3}}],["specificationconventiontestsbase",{"2":{"1654":1},"3":{"1199":2,"1207":2,"1239":3,"1247":1,"1436":7,"1496":1,"1654":1}}],["specificationcompositiontests",{"3":{"1199":1,"1207":7,"1247":6,"1438":2}}],["specificationcomposer",{"2":{"1239":1},"3":{"545":1,"549":1,"1199":4,"1203":1,"1207":1,"1239":1,"1247":6,"1496":1}}],["specificationentitytype",{"3":{"1436":1}}],["specificationevaluatortests",{"3":{"1199":1,"1207":8,"1247":1,"1286":1,"1438":1}}],["specificationevaluator",{"2":{"1272":1},"3":{"1199":4,"1203":1,"1207":2,"1240":8,"1244":1,"1246":1,"1247":8,"1272":1,"1278":2,"1286":26,"1438":1,"1496":1}}],["specificationextensions",{"2":{"549":1,"550":1,"1239":1},"3":{"319":1,"326":1,"549":2,"550":1,"1199":1,"1203":1,"1207":2,"1239":6,"1247":5,"1359":1,"1380":3,"1496":1}}],["specificationbenchmarks",{"3":{"591":2,"592":1,"1199":1,"1207":5,"1247":1,"1436":2,"1438":2,"1496":1,"1577":1}}],["specificationfitnesstests",{"2":{"137":1,"139":1},"3":{"137":1,"139":1,"1198":1,"1199":2,"1207":9,"1436":28,"1489":2,"1496":1,"1577":1}}],["specificationsdonotnavigatetootherentities",{"2":{"168":1,"171":1,"548":1,"1247":1,"1438":1,"1489":1,"1496":1,"1577":1,"1859":1},"3":{"168":1,"171":1,"548":1,"1239":1,"1247":2,"1359":1,"1436":5,"1438":1,"1489":1,"1496":1,"1577":1,"1859":1}}],["specifications",{"0":{"1278":1,"1353":1,"1640":1,"1815":1},"1":{"1238":1,"1239":1,"1240":1,"1241":1,"1242":1,"1243":1,"1244":1,"1245":1,"1246":1,"1247":1,"1601":1,"1602":1,"1603":1,"1604":1,"1628":1,"1629":1,"1630":1,"1631":1,"1632":1,"1633":1,"1634":1,"1635":1,"1636":1,"1637":1,"1638":1,"1639":1,"1640":1,"1641":1,"1813":1,"1814":1,"1815":1,"1816":1,"1817":1},"2":{"168":1},"3":{"132":1,"168":3,"171":2,"318":3,"322":1,"543":1,"545":8,"547":1,"549":3,"592":1,"743":1,"1192":1,"1202":4,"1203":18,"1207":112,"1237":1,"1238":2,"1239":11,"1240":1,"1241":1,"1247":46,"1259":1,"1286":4,"1350":3,"1351":1,"1353":3,"1359":16,"1380":1,"1396":2,"1431":5,"1436":23,"1437":1,"1438":6,"1487":1,"1489":2,"1496":3,"1526":2,"1577":3,"1586":1,"1591":2,"1601":2,"1604":1,"1628":1,"1639":1,"1660":1,"1662":1,"1779":1,"1812":1,"1813":1,"1815":2,"1816":2,"1817":2,"1995":2,"2208":1,"2222":1,"2229":2,"2235":2}}],["specification",{"0":{"1239":1,"1639":1},"1":{"542":1,"543":1,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"550":1,"551":1,"552":1,"1762":1,"1763":1,"1764":1,"1765":1,"1766":1,"1767":1,"1768":1,"1769":1,"1770":1,"1771":1,"1772":1,"1773":1,"1774":1,"1775":1,"1776":1,"1777":1},"2":{"319":1,"321":1,"547":1,"550":2,"592":1,"1240":2,"1246":1,"1759":1,"1998":1},"3":{"0":7,"168":1,"318":9,"319":5,"321":2,"324":3,"325":1,"542":1,"543":5,"544":1,"545":12,"546":1,"547":4,"548":3,"549":18,"550":6,"551":4,"552":1,"591":1,"592":3,"595":1,"743":1,"798":1,"853":1,"1132":1,"1137":1,"1192":1,"1199":69,"1202":1,"1203":2,"1207":7,"1212":1,"1238":2,"1239":25,"1240":7,"1243":2,"1244":1,"1245":1,"1246":2,"1247":92,"1272":1,"1278":1,"1284":1,"1286":60,"1297":1,"1300":11,"1310":1,"1311":18,"1323":2,"1339":2,"1350":1,"1353":4,"1359":94,"1372":2,"1373":1,"1375":2,"1380":35,"1395":2,"1431":1,"1436":43,"1438":4,"1489":2,"1496":3,"1525":1,"1526":2,"1539":2,"1576":1,"1577":5,"1586":2,"1591":1,"1600":1,"1603":1,"1631":3,"1632":1,"1637":1,"1662":2,"1668":1,"1671":1,"1749":2,"1759":1,"1762":1,"1777":1,"1813":2,"1814":1,"1815":17,"1817":2,"1859":2,"1860":1,"1923":1,"1988":1,"1995":9,"1996":3,"1997":3,"1998":2,"2048":1,"2185":1,"2234":2}}],["specifics",{"0":{"1362":1},"3":{"164":1,"166":1,"987":1,"1350":1,"1359":1,"1369":1,"1417":1,"1467":5}}],["specific",{"3":{"0":4,"6":2,"93":1,"94":1,"109":1,"111":2,"137":1,"166":1,"175":1,"201":1,"224":1,"236":1,"265":1,"319":1,"332":1,"351":1,"381":1,"397":1,"399":1,"498":1,"499":1,"500":1,"506":1,"508":1,"530":1,"558":1,"572":1,"618":1,"627":1,"633":2,"642":1,"649":1,"650":1,"666":1,"681":1,"683":1,"697":1,"724":4,"725":1,"727":1,"728":1,"737":1,"743":1,"766":1,"782":1,"815":1,"828":1,"854":1,"863":1,"876":1,"882":1,"888":1,"890":1,"916":1,"939":1,"954":2,"959":1,"963":1,"987":1,"1016":1,"1020":1,"1041":1,"1066":1,"1067":1,"1068":1,"1089":1,"1093":1,"1096":1,"1132":1,"1144":1,"1174":1,"1175":1,"1179":1,"1190":1,"1201":1,"1211":1,"1212":1,"1214":1,"1229":4,"1234":1,"1237":1,"1246":1,"1247":3,"1258":1,"1259":2,"1265":1,"1270":11,"1271":2,"1272":1,"1273":1,"1280":1,"1284":1,"1286":29,"1289":1,"1291":2,"1296":1,"1298":1,"1300":19,"1301":1,"1302":1,"1309":11,"1311":10,"1321":1,"1322":1,"1323":18,"1324":28,"1328":1,"1338":1,"1339":9,"1344":2,"1350":7,"1352":1,"1359":29,"1366":1,"1369":2,"1371":1,"1380":14,"1387":1,"1395":21,"1396":21,"1402":6,"1406":1,"1410":1,"1415":23,"1416":8,"1417":11,"1424":1,"1427":2,"1429":2,"1432":1,"1433":1,"1436":38,"1438":6,"1440":1,"1441":1,"1443":1,"1445":1,"1447":1,"1449":2,"1451":1,"1453":1,"1455":2,"1456":1,"1457":1,"1460":1,"1467":1,"1474":1,"1475":2,"1488":4,"1490":3,"1496":2,"1525":1,"1538":1,"1554":1,"1577":1,"1591":2,"1596":1,"1630":3,"1631":1,"1632":3,"1636":1,"1637":5,"1639":5,"1640":1,"1641":6,"1645":1,"1656":1,"1658":1,"1666":1,"1667":1,"1670":1,"1685":1,"1686":1,"1727":2,"1749":1,"1764":3,"1769":1,"1771":1,"1777":1,"1816":1,"1819":1,"1852":1,"1853":1,"1882":1,"1896":1,"1897":1,"1927":1,"1929":1,"1977":1,"1983":1,"1990":1,"1991":1,"1993":1,"2007":2,"2031":2,"2034":1,"2038":1,"2060":2,"2069":1,"2075":1,"2090":1,"2109":1,"2125":1,"2139":1,"2147":1,"2156":1,"2158":1,"2161":1,"2170":1,"2181":1,"2185":1,"2191":1,"2213":1,"2234":4}}],["specially",{"3":{"1312":1}}],["specialcharacter",{"3":{"1271":1,"1300":1}}],["specialization",{"3":{"1359":8,"1395":2,"1416":1}}],["specializations",{"3":{"1354":1,"1408":1,"1410":1}}],["specialize",{"3":{"1359":1}}],["specializes",{"3":{"1339":1,"1637":1}}],["specialized",{"3":{"1286":2,"1350":2,"1359":3,"1395":2,"1396":3,"1416":1,"1915":2}}],["specializing",{"3":{"1229":1,"1359":1}}],["specialised",{"3":{"940":1,"1271":1,"1693":1}}],["specialist",{"3":{"620":1}}],["specialprice",{"2":{"658":1,"660":1},"3":{"658":1,"660":1}}],["special",{"3":{"0":2,"109":1,"135":2,"227":1,"389":1,"741":1,"820":1,"982":1,"1025":1,"1026":1,"1028":1,"1212":1,"1237":1,"1259":1,"1271":1,"1286":1,"1289":2,"1300":1,"1311":3,"1312":1,"1324":3,"1339":1,"1342":2,"1350":8,"1359":6,"1364":1,"1369":3,"1380":1,"1395":3,"1396":1,"1415":3,"1416":1,"1417":1,"1436":5,"1438":1,"1455":1,"1467":1,"1629":1,"1631":3,"1638":1,"1641":1,"1748":1,"1764":1,"1767":6,"1768":1,"1829":1,"1970":1,"2001":1,"2018":1}}],["spaghetti",{"1":{"1813":1,"1814":1,"1815":1,"1816":1,"1817":1},"3":{"1779":1,"1812":1,"1813":2,"2101":1,"2208":1,"2229":1}}],["spawning",{"3":{"1443":1}}],["spacing",{"3":{"890":1,"1324":1,"1557":2,"1577":1}}],["spaces",{"3":{"23":1,"972":1,"1286":1,"1324":1,"1436":3}}],["space",{"3":{"0":1,"157":1,"607":2,"609":2,"725":1,"1060":1,"1247":1,"1286":2,"1300":2,"1311":2,"1324":4,"1339":1,"1359":5,"1369":1,"1395":3,"1415":1,"1417":1,"1455":1,"1459":1,"1465":1,"1637":1,"1908":1,"1927":1}}],["sparingly",{"3":{"1270":2}}],["spared",{"3":{"1876":1}}],["spares",{"3":{"1270":2,"1380":1}}],["spare",{"3":{"790":1,"862":1,"1339":1,"1436":1}}],["sparse",{"0":{"1242":1},"3":{"0":1,"330":1,"332":1,"337":1,"591":1,"740":1,"1238":2,"1247":4,"1286":1,"1362":1,"1415":1,"1438":1,"1666":1,"1720":1,"1815":1,"1817":1,"1986":1,"1988":1,"1992":1,"2234":1}}],["spam",{"3":{"280":1,"1339":1,"1399":1,"1402":3,"1417":1,"2000":1,"2159":1}}],["spa",{"3":{"174":1,"1300":2,"1488":1,"1972":1,"1973":1,"1999":1,"2155":1}}],["spanid",{"3":{"1074":1,"1253":1,"1259":3,"1286":2,"2188":1}}],["spanish",{"3":{"0":1,"264":1,"265":2,"267":1,"856":1,"1311":3,"1324":5,"1380":1,"1389":1,"1395":2,"1396":1,"1436":11,"1438":1,"1577":3,"1582":1,"1583":1,"1591":1,"1595":1,"1596":2,"1653":1,"1669":1,"1685":2,"1784":1,"2082":1,"2083":2,"2085":1,"2087":4,"2088":1,"2218":1,"2225":1,"2234":1,"2244":1,"2247":1}}],["spanning",{"3":{"168":1,"760":1,"810":1,"1201":1,"1350":1,"1359":1,"1369":2,"1395":1,"1424":1,"1436":1,"1438":1,"1496":3,"1541":1,"1547":1,"1577":1,"1637":1,"2181":1,"2220":1,"2222":1}}],["span",{"2":{"1558":1},"3":{"47":1,"49":1,"115":1,"295":1,"395":6,"397":9,"398":1,"399":3,"400":1,"402":4,"404":1,"405":2,"406":3,"409":1,"520":1,"635":1,"821":1,"1042":1,"1091":1,"1093":1,"1102":1,"1212":1,"1229":2,"1247":2,"1251":1,"1259":3,"1273":1,"1286":10,"1301":2,"1309":1,"1311":5,"1324":4,"1333":4,"1339":39,"1350":1,"1359":7,"1415":4,"1421":1,"1425":2,"1427":1,"1436":1,"1443":7,"1450":1,"1496":3,"1526":1,"1558":1,"1565":1,"1572":1,"1575":1,"1577":4,"1583":1,"1591":2,"1631":1,"1664":1,"1819":1,"1843":1,"1909":1,"2011":3,"2156":1,"2159":10,"2161":3,"2162":1,"2174":1,"2178":1,"2181":1,"2185":1,"2194":1,"2215":1,"2217":1,"2234":1}}],["spans",{"0":{"2159":1},"3":{"0":1,"139":1,"157":1,"161":1,"230":1,"359":1,"396":1,"397":2,"398":1,"399":2,"402":2,"405":2,"466":1,"535":1,"609":1,"674":2,"676":1,"761":1,"803":1,"926":1,"946":1,"1044":1,"1089":1,"1124":1,"1201":1,"1212":1,"1270":2,"1286":6,"1300":1,"1302":1,"1320":1,"1323":1,"1339":14,"1341":1,"1346":1,"1350":2,"1359":8,"1380":1,"1395":1,"1396":1,"1417":1,"1427":1,"1431":1,"1436":2,"1438":2,"1442":1,"1443":6,"1454":1,"1467":3,"1496":1,"1511":1,"1550":1,"1577":1,"1668":1,"1670":1,"1677":2,"1789":1,"1841":1,"1848":1,"1852":1,"1853":1,"1858":1,"1888":1,"1892":1,"1902":1,"1909":1,"1912":1,"2001":1,"2011":4,"2013":1,"2015":2,"2144":1,"2156":2,"2158":2,"2159":4,"2160":1,"2161":1,"2162":2,"2163":1,"2194":1,"2222":1,"2229":1}}],["sms",{"3":{"1417":1,"2222":1}}],["sm",{"3":{"1324":1,"1591":1,"1712":1,"2075":1}}],["smuggling",{"3":{"1312":1,"1324":1}}],["smuggled",{"3":{"926":1,"1265":1,"1270":1,"1323":1,"1395":1}}],["smuggle",{"3":{"0":1,"1247":1,"1300":1,"1323":1,"1324":1,"1359":2,"1402":2,"1436":1}}],["smearing",{"3":{"1832":1,"1834":1}}],["smear",{"3":{"1278":1}}],["smeared",{"3":{"1247":1,"1324":1,"1359":1,"1396":1,"1402":1,"1931":1}}],["smell",{"3":{"70":1,"785":1,"1247":2,"1359":1,"1436":2,"1538":1,"1828":1,"1834":1,"2035":1}}],["smooth",{"3":{"1324":1}}],["smooths",{"3":{"1311":1}}],["smoothing",{"3":{"178":1,"1311":1}}],["smokes",{"3":{"1446":1,"1490":1}}],["smoketests",{"2":{"1069":1},"3":{"913":4,"1066":1,"1067":2,"1069":3,"1070":1,"1199":3,"1203":3,"1206":1,"1207":9,"1328":2,"1339":9,"1449":2,"1487":1}}],["smoke",{"0":{"1430":1,"1449":1},"3":{"0":8,"150":2,"373":1,"563":1,"564":1,"589":1,"591":1,"594":1,"620":1,"624":4,"626":4,"629":1,"631":2,"633":8,"635":3,"640":2,"642":1,"699":1,"755":2,"757":4,"758":2,"759":2,"762":1,"912":2,"913":2,"914":2,"916":1,"917":2,"1067":1,"1069":2,"1073":1,"1075":1,"1192":1,"1212":4,"1213":1,"1339":8,"1428":1,"1434":1,"1436":7,"1437":2,"1438":10,"1449":1,"1453":2,"1455":12,"1460":2,"1461":3,"1465":1,"1467":3,"1469":2,"1474":1,"1482":1,"1486":3,"1487":3,"1488":1,"1490":5,"1492":10,"1493":1,"1494":1,"1496":3,"1497":2,"1524":1,"1526":6,"1531":3,"1535":1,"1575":1,"1577":3,"1581":1,"1582":1,"1583":1,"1585":1,"1588":1,"1589":1,"1590":2,"1591":6,"1600":2,"1611":1,"1657":1,"1661":1,"1696":1,"1706":1,"1716":1,"1727":1,"1731":1,"1923":2,"2039":1,"2057":1,"2060":1,"2081":1,"2091":1,"2234":2}}],["smallness",{"3":{"2174":1}}],["smallestscreensize",{"3":{"1416":1}}],["smallest",{"3":{"414":1,"666":1,"699":1,"979":1,"1232":1,"1237":1,"1247":1,"1269":1,"1270":1,"1286":3,"1323":1,"1324":5,"1339":1,"1350":1,"1352":1,"1359":15,"1369":2,"1395":9,"1396":3,"1402":3,"1415":2,"1417":4,"1436":10,"1438":1,"1467":1,"1717":1,"1727":1,"1765":1,"1770":1,"1851":1,"1938":1,"2076":1}}],["smaller",{"3":{"409":1,"545":1,"547":1,"549":1,"593":1,"775":1,"827":1,"840":1,"875":1,"981":1,"1091":1,"1115":1,"1168":1,"1170":1,"1201":1,"1281":1,"1283":1,"1300":1,"1311":2,"1323":2,"1324":3,"1344":1,"1350":2,"1359":2,"1395":2,"1422":1,"1427":2,"1429":2,"1436":4,"1438":1,"1467":2,"1479":1,"1480":1,"1492":1,"1810":1,"1923":1,"1946":1,"2012":1,"2081":1,"2160":1,"2161":1,"2166":1,"2174":1,"2176":1}}],["small",{"0":{"1805":1,"2119":1},"1":{"1717":1,"1718":1,"1719":1,"1720":1,"1721":1,"1722":1,"1723":1,"1724":1,"1725":1},"3":{"6":1,"60":1,"122":1,"148":1,"165":1,"201":1,"235":1,"255":1,"273":1,"280":1,"292":1,"379":1,"398":1,"413":1,"440":1,"442":1,"507":1,"520":1,"572":1,"583":1,"593":1,"633":1,"650":1,"656":1,"681":1,"684":1,"692":1,"732":1,"742":1,"765":1,"897":1,"921":1,"930":1,"932":1,"1093":1,"1134":1,"1150":3,"1152":1,"1191":1,"1222":1,"1223":1,"1229":4,"1230":2,"1233":1,"1237":1,"1241":1,"1242":1,"1247":6,"1248":1,"1252":1,"1256":1,"1257":1,"1259":6,"1260":1,"1268":1,"1270":3,"1272":1,"1284":1,"1286":5,"1290":1,"1291":1,"1292":2,"1300":13,"1301":3,"1305":1,"1309":1,"1310":3,"1311":5,"1312":1,"1313":1,"1318":1,"1320":1,"1322":3,"1323":6,"1324":29,"1325":1,"1328":1,"1337":1,"1339":6,"1347":1,"1350":13,"1352":1,"1353":1,"1354":1,"1356":1,"1359":15,"1360":1,"1369":3,"1374":1,"1380":1,"1382":1,"1385":1,"1389":1,"1395":20,"1396":22,"1398":1,"1399":1,"1402":12,"1410":1,"1411":1,"1415":10,"1416":2,"1417":8,"1427":1,"1436":13,"1438":1,"1449":1,"1455":2,"1459":1,"1460":1,"1467":2,"1478":1,"1489":1,"1492":1,"1509":1,"1526":1,"1531":1,"1534":1,"1577":1,"1582":1,"1602":1,"1611":1,"1653":1,"1661":1,"1674":1,"1675":1,"1692":1,"1705":1,"1712":1,"1717":1,"1718":1,"1726":1,"1727":2,"1792":1,"1803":1,"1805":1,"1807":1,"1826":1,"1833":1,"1834":1,"1844":1,"1856":1,"1880":1,"1898":1,"1915":1,"1930":1,"1932":1,"1939":1,"1942":1,"1943":1,"1947":1,"1950":1,"1958":1,"1962":1,"1972":1,"1974":1,"1985":1,"2027":1,"2033":1,"2043":1,"2048":1,"2056":1,"2083":1,"2088":1,"2094":1,"2105":1,"2117":1,"2118":1,"2119":1,"2120":1,"2125":3,"2128":1,"2129":1,"2138":1,"2174":1,"2176":1,"2181":1,"2199":1}}],["smarttoy",{"3":{"1395":1}}],["smarter",{"3":{"1311":1}}],["smart",{"0":{"1235":1},"1":{"961":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1},"3":{"0":4,"15":1,"17":1,"18":1,"707":2,"711":1,"961":1,"963":2,"964":2,"965":3,"966":1,"1042":1,"1043":1,"1045":1,"1049":1,"1051":2,"1212":2,"1230":1,"1237":2,"1254":2,"1259":10,"1275":1,"1282":1,"1286":16,"1317":2,"1323":3,"1324":1,"1395":3,"1436":1,"1438":1,"1467":2,"1526":1,"1555":1,"1577":1,"1586":1,"1662":1,"1665":1,"1677":1,"1841":1,"2187":1,"2190":1,"2194":1,"2234":1}}],["smtppassword",{"3":{"1467":1}}],["smtpemailsendertests",{"3":{"1199":1,"1207":2}}],["smtpemailsender",{"2":{"72":1,"1512":1,"1752":1,"1938":1},"3":{"72":2,"230":4,"674":2,"1199":2,"1203":1,"1207":2,"1302":5,"1309":24,"1320":2,"1323":5,"1496":2,"1512":1,"1670":1,"1752":1,"1770":1,"1932":1,"1938":1}}],["smtpclient",{"2":{"72":1,"1938":1},"3":{"72":1,"230":1,"1302":2,"1309":4,"1323":2,"1938":1}}],["smtpsettingstests",{"3":{"1199":1,"1207":1}}],["smtpsettings",{"2":{"72":1,"1302":1},"3":{"72":2,"674":2,"1199":7,"1203":1,"1207":2,"1302":1,"1309":11,"1313":1,"1320":1,"1323":12}}],["smtptransportsecuritytests",{"3":{"1108":1,"1199":1,"1207":2,"1323":1}}],["smtptransportsecurity",{"2":{"1108":1,"1302":1},"3":{"0":1,"1108":2,"1199":3,"1203":1,"1207":2,"1212":1,"1302":1,"1309":4,"1313":1,"1320":5,"1323":5,"1496":2}}],["smtp",{"3":{"0":2,"66":2,"72":2,"74":1,"230":2,"598":1,"599":1,"600":1,"673":2,"827":1,"853":1,"856":1,"1107":1,"1108":4,"1109":2,"1112":1,"1302":2,"1303":1,"1309":9,"1320":1,"1323":9,"1326":4,"1339":3,"1408":1,"1415":2,"1440":1,"1441":3,"1446":5,"1455":1,"1466":1,"1467":9,"1470":2,"1472":5,"1474":1,"1670":1,"1752":1,"1770":1,"1898":2,"1938":2,"2006":1,"2013":2,"2014":1,"2191":2}}],["shy",{"3":{"1526":1}}],["sh",{"0":{"1472":1},"3":{"1471":1,"1472":20,"1475":1,"1482":1,"1483":2}}],["shuffling",{"3":{"1396":1}}],["shuts",{"3":{"1417":1,"2068":1}}],["shut",{"3":{"1300":1,"2008":1}}],["shutting",{"3":{"1270":1}}],["shutdowntimeoutseconds",{"3":{"1436":2,"1488":1}}],["shutdownsavetimeout",{"3":{"1259":1}}],["shutdown",{"3":{"0":5,"21":2,"27":2,"235":1,"237":1,"517":1,"518":2,"536":1,"572":4,"573":1,"574":2,"819":1,"837":1,"897":1,"898":3,"1100":2,"1192":1,"1212":2,"1247":2,"1252":1,"1255":1,"1259":7,"1270":2,"1275":1,"1286":2,"1309":1,"1311":4,"1323":6,"1324":1,"1334":1,"1337":1,"1339":9,"1359":1,"1366":1,"1396":1,"1400":1,"1402":1,"1415":1,"1436":5,"1437":1,"1438":1,"1488":2,"1525":1,"1526":1,"1550":1,"1566":1,"1591":2,"1600":1,"1671":1,"1919":1,"2056":2,"2167":1,"2234":1}}],["shrug",{"3":{"1416":1,"1436":1}}],["shrugs",{"3":{"1309":1}}],["shrunken",{"3":{"2107":1}}],["shrunk",{"3":{"1395":1}}],["shrinks",{"3":{"546":1,"783":1,"1237":1,"1350":1,"1369":1,"1395":1,"1436":3,"1480":1,"1578":1,"1815":1,"2150":1}}],["shrink",{"3":{"491":1,"651":1,"1183":1,"1300":1,"1311":1,"1353":1,"1359":1,"1390":1,"1395":2,"1402":2,"1436":5,"2043":1,"2106":1}}],["shrinking",{"3":{"461":1,"1018":1,"1020":1,"1300":1,"1380":1,"1402":1}}],["shrank",{"3":{"490":1,"1415":1,"1492":1,"1496":1}}],["shredded",{"3":{"2011":1}}],["shred",{"3":{"398":1}}],["shed",{"3":{"1126":1,"1347":1,"1350":1,"1396":2,"1436":1}}],["sheds",{"3":{"819":1,"1124":1,"1324":1,"1339":1,"1436":1,"2033":1}}],["shedding",{"3":{"575":1,"831":1,"1270":1,"1402":1,"1416":2}}],["shelf",{"3":{"627":1,"1041":1,"1101":1,"1301":1,"1915":1}}],["shelling",{"3":{"1430":1}}],["shells",{"3":{"1192":1,"1202":1,"1203":1,"1212":1,"1324":1,"1370":1,"1414":1,"1416":1,"1432":1,"1436":1,"1496":1}}],["shellpagese2etests",{"2":{"616":1},"3":{"616":1,"618":1,"1199":1,"1207":2}}],["shell",{"0":{"1395":1,"2079":1},"1":{"646":1,"647":1,"648":1,"649":1,"650":1,"651":1,"652":1,"653":1,"1416":1},"2":{"1479":1},"3":{"0":6,"415":1,"616":1,"618":3,"646":1,"648":3,"649":7,"650":3,"651":3,"869":2,"914":1,"954":1,"957":1,"974":1,"1059":1,"1192":1,"1202":1,"1203":1,"1212":3,"1324":23,"1359":1,"1376":1,"1395":5,"1396":3,"1414":1,"1415":6,"1416":13,"1417":5,"1436":3,"1438":2,"1440":1,"1452":3,"1454":1,"1461":1,"1475":3,"1479":2,"1481":1,"1490":1,"1496":1,"1513":1,"1526":1,"1562":1,"1591":1,"1597":1,"1653":1,"1660":1,"1669":1,"1682":1,"1698":1,"1761":2,"2079":6,"2081":2,"2082":1,"2234":3}}],["sheets",{"3":{"1324":2}}],["sheet",{"3":{"412":1,"419":1,"743":1,"1324":6,"1402":1,"1417":13,"1526":1,"2118":2}}],["shirt",{"3":{"1350":3}}],["shims",{"3":{"135":1,"151":1,"1282":1,"1286":2,"1436":1,"1496":2,"1856":2,"1862":1}}],["shim",{"3":{"0":1,"166":1,"470":1,"1004":1,"1034":1,"1175":1,"1212":1,"1286":12,"1361":1,"1369":1,"1396":4,"1436":1,"1496":1,"1577":1,"1856":1,"2114":1}}],["shifting",{"3":{"861":1,"1286":1,"1396":1,"1436":1,"1496":2}}],["shifted",{"3":{"251":1,"323":1,"424":1,"425":1,"426":1,"490":1,"491":1,"493":1,"543":1,"589":1,"1359":1,"1496":13}}],["shifts",{"3":{"41":1,"112":1,"693":1,"860":1,"1004":1,"1269":1,"1270":1,"1348":1,"1350":1,"1359":1,"1380":1,"1396":1,"1436":2,"1496":3}}],["shift",{"2":{"1607":1,"1741":1},"3":{"0":1,"279":1,"490":1,"709":1,"1019":1,"1074":1,"1292":1,"1300":1,"1348":1,"1359":3,"1380":1,"1396":1,"1435":1,"1443":1,"1496":1,"1607":1,"1741":1}}],["shipall",{"2":{"1809":1},"3":{"1809":1}}],["shiporderhandler",{"2":{"1875":1},"3":{"1765":1,"1875":1}}],["shiporderdialog",{"2":{"1750":1,"1760":1},"3":{"1750":1,"1760":1}}],["shipmentinvariants",{"3":{"1767":3}}],["shipments",{"3":{"1755":1,"1776":2}}],["shipmenttrackingnumber",{"2":{"1749":1},"3":{"1749":1}}],["shipment",{"2":{"1755":1},"3":{"1746":2,"1749":4,"1755":4,"1760":1,"1763":1,"1764":3,"1765":4,"1766":1,"1767":5,"1768":1,"1769":1,"1770":1,"1771":2,"1776":4,"1777":1,"2112":1}}],["shipmentline",{"3":{"1727":1}}],["shipmentlineidentifiertype",{"2":{"1727":1},"3":{"1727":1}}],["shippable",{"3":{"1270":1,"1766":1}}],["shippingaddresscity",{"3":{"1286":1}}],["shippingaddressline1",{"3":{"1286":1}}],["shippingaddress",{"3":{"1286":1}}],["shipping",{"1":{"2083":1,"2084":1,"2085":1,"2086":1,"2087":1,"2088":1},"3":{"0":2,"67":1,"216":1,"360":1,"449":1,"591":1,"619":1,"627":1,"635":2,"650":1,"657":1,"682":1,"706":1,"715":1,"726":1,"768":1,"832":1,"854":1,"932":1,"955":1,"973":1,"1051":1,"1052":1,"1092":1,"1133":1,"1212":1,"1270":2,"1286":8,"1300":2,"1309":2,"1323":2,"1324":2,"1339":1,"1350":5,"1380":1,"1402":1,"1415":2,"1416":2,"1417":1,"1427":1,"1435":1,"1436":11,"1445":1,"1455":1,"1488":1,"1750":1,"1765":1,"1767":3,"1771":1,"1776":1,"1808":1,"1809":1,"1810":1,"1815":1,"1902":1,"1931":1,"2011":1,"2056":1,"2083":1,"2131":1,"2136":1,"2212":1}}],["shippedstate",{"3":{"1767":3}}],["shippedon",{"3":{"1764":1}}],["shipped",{"0":{"1488":1,"2056":1,"2058":1,"2145":1},"1":{"569":1,"570":1,"571":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"578":1,"579":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1,"858":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"865":1,"951":1,"952":1,"953":1,"954":1,"955":1,"956":1,"957":1,"958":1,"959":1,"960":1,"1064":1,"1065":1,"1066":1,"1067":1,"1068":1,"1069":1,"1070":1,"1071":1},"2":{"135":1,"136":1,"138":1,"141":1,"142":1,"967":1,"980":1,"981":1,"983":1,"991":1,"1052":1,"1055":1,"1673":1,"1755":1,"1766":1,"1808":1,"1812":1,"2102":1},"3":{"0":28,"19":1,"22":1,"23":1,"80":1,"81":1,"91":1,"107":1,"109":1,"115":2,"121":1,"122":1,"130":1,"135":10,"136":1,"137":1,"138":2,"139":3,"140":1,"141":4,"142":7,"164":1,"166":1,"180":1,"186":1,"233":1,"235":2,"238":1,"241":1,"243":1,"245":1,"255":1,"256":1,"258":1,"265":2,"268":1,"317":1,"350":1,"358":1,"361":1,"362":1,"364":2,"370":1,"403":1,"418":2,"423":2,"443":1,"448":1,"468":1,"469":1,"482":1,"487":1,"497":3,"502":1,"527":1,"538":1,"539":1,"543":2,"545":1,"547":1,"550":1,"563":1,"569":1,"575":1,"576":1,"583":1,"599":2,"607":1,"609":1,"614":1,"615":1,"618":1,"619":1,"622":1,"627":1,"638":1,"640":1,"647":1,"649":2,"655":1,"657":5,"659":1,"660":2,"661":1,"665":1,"668":1,"688":1,"707":1,"714":1,"717":1,"723":4,"725":2,"729":1,"731":1,"732":1,"733":1,"734":1,"743":2,"745":1,"758":1,"797":1,"804":1,"809":1,"825":1,"827":1,"831":2,"845":1,"853":1,"858":1,"861":4,"873":1,"891":1,"905":2,"910":1,"921":1,"922":1,"923":1,"926":1,"951":1,"954":2,"955":1,"960":2,"962":1,"963":1,"964":5,"966":3,"967":1,"968":2,"972":2,"975":2,"980":8,"981":2,"982":3,"983":3,"988":1,"990":1,"991":1,"996":2,"1003":1,"1004":1,"1007":1,"1012":1,"1013":1,"1016":2,"1017":1,"1032":1,"1033":1,"1034":1,"1036":1,"1037":2,"1049":1,"1052":2,"1055":2,"1064":1,"1071":1,"1074":1,"1075":1,"1081":1,"1089":1,"1092":1,"1093":1,"1094":3,"1122":1,"1124":1,"1127":1,"1132":1,"1134":1,"1150":1,"1160":1,"1161":1,"1164":1,"1174":1,"1175":1,"1192":2,"1212":8,"1214":1,"1231":1,"1234":2,"1237":5,"1247":1,"1259":2,"1270":8,"1271":1,"1273":1,"1280":1,"1282":1,"1284":1,"1286":22,"1287":1,"1290":1,"1293":1,"1297":1,"1300":12,"1301":4,"1311":13,"1323":10,"1324":27,"1327":1,"1339":2,"1347":1,"1350":2,"1359":1,"1369":6,"1395":2,"1396":4,"1415":6,"1416":1,"1417":4,"1427":1,"1428":2,"1430":1,"1432":1,"1433":1,"1435":2,"1436":67,"1437":2,"1438":5,"1444":1,"1453":1,"1455":4,"1465":1,"1467":2,"1485":1,"1486":2,"1487":7,"1488":6,"1489":1,"1490":3,"1491":1,"1492":1,"1494":1,"1496":4,"1507":1,"1521":1,"1526":1,"1546":1,"1553":1,"1563":1,"1574":2,"1575":2,"1576":4,"1577":17,"1581":2,"1582":3,"1583":1,"1586":1,"1631":1,"1639":1,"1646":1,"1654":1,"1659":1,"1664":1,"1665":1,"1666":2,"1667":1,"1669":1,"1671":1,"1673":2,"1682":1,"1685":1,"1686":2,"1689":2,"1690":1,"1692":1,"1704":1,"1727":1,"1749":8,"1750":1,"1751":1,"1755":1,"1758":1,"1760":1,"1765":5,"1766":4,"1767":6,"1768":2,"1776":1,"1782":1,"1808":1,"1810":2,"1812":1,"1854":1,"1860":1,"1861":1,"1862":1,"1887":1,"1891":1,"1899":1,"1903":2,"1915":1,"2035":1,"2042":1,"2043":2,"2047":1,"2061":2,"2063":2,"2077":1,"2087":2,"2102":2,"2118":1,"2129":1,"2131":1,"2133":2,"2146":1,"2148":1,"2170":1,"2181":1,"2182":1,"2202":1,"2222":1,"2232":1,"2234":8,"2241":2}}],["ships",{"0":{"2079":1,"2114":1,"2200":1},"3":{"0":34,"72":1,"76":3,"78":1,"80":1,"99":1,"109":1,"134":1,"135":1,"136":3,"140":1,"145":1,"147":1,"150":1,"168":1,"174":1,"180":1,"185":1,"207":1,"212":1,"214":1,"225":1,"243":1,"255":1,"256":1,"273":1,"295":1,"302":1,"317":1,"318":1,"328":1,"358":1,"369":1,"370":1,"371":1,"380":1,"388":1,"397":2,"405":1,"413":2,"432":1,"433":1,"434":2,"436":1,"440":1,"447":1,"448":1,"454":1,"477":1,"481":1,"483":1,"497":1,"528":1,"532":1,"536":1,"543":1,"545":2,"550":1,"551":2,"564":1,"565":1,"571":1,"572":1,"574":1,"579":1,"583":1,"609":1,"610":2,"617":1,"620":1,"631":1,"633":1,"634":1,"635":1,"640":1,"648":1,"649":1,"656":1,"659":1,"667":1,"668":1,"682":2,"683":1,"684":1,"691":1,"707":1,"711":1,"715":1,"725":4,"739":1,"748":1,"774":1,"776":1,"782":2,"786":1,"808":2,"825":1,"827":1,"831":1,"832":1,"840":1,"844":1,"848":1,"855":1,"859":2,"863":1,"880":1,"905":3,"907":1,"914":1,"915":1,"921":1,"922":1,"933":1,"937":1,"939":2,"940":1,"953":1,"954":1,"960":1,"963":1,"974":1,"984":1,"996":1,"1004":2,"1017":1,"1034":1,"1037":1,"1044":2,"1049":1,"1050":1,"1053":1,"1054":1,"1055":1,"1057":3,"1058":2,"1059":7,"1061":1,"1062":2,"1066":1,"1075":1,"1077":1,"1089":2,"1091":5,"1093":2,"1096":1,"1124":2,"1139":2,"1149":2,"1160":1,"1162":1,"1178":1,"1211":1,"1212":4,"1213":1,"1237":4,"1239":1,"1248":1,"1259":1,"1269":1,"1270":4,"1271":2,"1286":12,"1289":1,"1293":2,"1297":2,"1300":9,"1301":2,"1309":3,"1311":11,"1312":3,"1313":1,"1318":1,"1320":1,"1323":8,"1324":10,"1336":1,"1339":8,"1341":1,"1350":6,"1359":1,"1369":1,"1380":3,"1395":1,"1396":3,"1408":1,"1415":9,"1416":2,"1417":20,"1420":1,"1423":1,"1427":5,"1428":1,"1431":4,"1435":1,"1436":47,"1438":2,"1442":2,"1443":4,"1445":1,"1447":2,"1453":1,"1454":1,"1455":4,"1459":2,"1461":1,"1467":6,"1471":1,"1487":2,"1488":2,"1489":6,"1491":1,"1492":1,"1496":1,"1503":2,"1524":1,"1526":5,"1531":2,"1545":1,"1553":1,"1575":2,"1577":16,"1578":2,"1582":3,"1583":1,"1585":1,"1591":3,"1595":1,"1596":1,"1626":1,"1631":1,"1641":1,"1651":1,"1652":1,"1653":2,"1654":1,"1655":1,"1661":1,"1662":1,"1663":1,"1664":1,"1666":1,"1667":1,"1668":1,"1670":1,"1671":1,"1674":1,"1675":1,"1681":1,"1683":1,"1684":1,"1686":1,"1689":1,"1697":1,"1699":1,"1701":1,"1719":1,"1727":2,"1728":1,"1729":2,"1750":1,"1764":1,"1765":1,"1767":1,"1768":1,"1781":3,"1784":2,"1790":1,"1799":2,"1800":2,"1810":1,"1815":1,"1828":1,"1829":1,"1830":1,"1840":1,"1845":2,"1883":2,"1889":1,"1891":2,"1898":1,"1902":1,"1903":1,"1921":1,"1922":2,"1930":2,"1931":1,"1933":1,"1941":1,"1948":1,"1961":1,"1968":1,"1970":1,"1975":1,"1977":1,"1995":1,"1998":1,"1999":1,"2000":1,"2001":1,"2002":1,"2009":1,"2011":2,"2012":2,"2018":1,"2025":1,"2035":1,"2045":1,"2046":1,"2047":1,"2056":3,"2058":1,"2060":1,"2069":1,"2070":1,"2077":1,"2079":1,"2081":1,"2082":1,"2083":1,"2085":2,"2089":1,"2096":1,"2099":1,"2100":1,"2103":1,"2109":1,"2116":2,"2117":1,"2126":1,"2129":1,"2133":2,"2135":2,"2149":1,"2150":1,"2151":2,"2152":1,"2155":1,"2156":2,"2158":2,"2170":1,"2172":1,"2177":1,"2180":2,"2181":1,"2194":2,"2204":4,"2205":1,"2234":11}}],["ship",{"0":{"576":1,"1424":1,"1897":1},"1":{"1056":1,"1057":1,"1058":1,"1059":1,"1060":1,"1061":1,"1062":1,"1063":1},"2":{"1809":1,"1812":1},"3":{"0":7,"62":1,"76":1,"78":1,"85":1,"109":1,"135":2,"147":1,"186":1,"213":1,"214":1,"235":1,"265":1,"269":1,"293":1,"299":1,"300":1,"302":1,"412":1,"415":1,"422":1,"425":1,"426":2,"448":1,"470":1,"528":1,"570":1,"572":2,"574":1,"577":1,"578":1,"579":1,"618":1,"628":2,"633":2,"634":1,"638":1,"640":1,"649":1,"658":1,"660":1,"665":1,"667":1,"672":1,"682":1,"691":1,"698":1,"708":1,"715":1,"717":1,"723":1,"733":1,"749":1,"758":1,"774":1,"798":1,"818":1,"827":1,"832":1,"836":1,"854":1,"861":1,"862":1,"914":1,"922":1,"953":1,"954":1,"955":1,"1016":1,"1049":1,"1056":1,"1059":2,"1060":2,"1067":1,"1091":1,"1096":1,"1212":2,"1237":2,"1259":1,"1270":1,"1271":3,"1282":1,"1286":4,"1300":5,"1301":1,"1308":1,"1309":1,"1311":4,"1315":1,"1323":4,"1324":5,"1334":1,"1339":3,"1359":1,"1395":1,"1396":2,"1402":2,"1415":1,"1416":2,"1417":7,"1418":2,"1419":1,"1427":4,"1428":1,"1431":1,"1432":1,"1433":2,"1436":9,"1438":2,"1454":1,"1459":1,"1465":1,"1467":1,"1486":1,"1489":2,"1492":1,"1526":1,"1531":1,"1534":1,"1575":1,"1577":1,"1583":1,"1585":1,"1591":1,"1596":1,"1627":1,"1648":1,"1654":1,"1661":1,"1662":1,"1666":1,"1667":1,"1669":1,"1673":2,"1675":1,"1699":1,"1706":1,"1727":1,"1733":1,"1735":1,"1746":2,"1749":6,"1750":1,"1755":1,"1760":1,"1761":1,"1764":1,"1765":7,"1767":1,"1768":1,"1769":2,"1771":1,"1788":1,"1809":1,"1810":2,"1812":1,"1815":2,"1843":1,"1853":1,"1880":1,"1882":1,"1889":1,"1905":1,"1927":1,"1941":1,"1959":1,"1965":1,"1970":1,"1978":1,"2000":1,"2025":1,"2029":1,"2030":1,"2039":2,"2045":1,"2050":1,"2054":1,"2061":1,"2075":1,"2087":1,"2091":1,"2103":1,"2109":1,"2118":1,"2122":2,"2124":2,"2133":2,"2135":1,"2136":1,"2140":1,"2162":1,"2175":1,"2177":1,"2181":2,"2182":1,"2197":1,"2198":1,"2202":1,"2205":1,"2214":1,"2215":1,"2220":1,"2222":1,"2228":1,"2234":1,"2241":1}}],["shop",{"3":{"1750":1,"1773":1}}],["shopping",{"3":{"1742":1,"1749":2,"1750":6,"1763":2,"1764":11,"1765":4,"1767":2,"1768":6,"1771":2,"1773":4,"1996":1}}],["shoppingcartinvariants",{"3":{"1767":3}}],["shoppingcartitems",{"3":{"1746":3,"1749":3,"1764":1}}],["shoppingcartitemcreaterequest",{"3":{"1270":1}}],["shoppingcartitemchanged",{"2":{"782":1,"1749":1},"3":{"782":2,"1749":2,"1769":1}}],["shoppingcartitem",{"3":{"1237":1,"1764":1}}],["shoppingcartlisttests",{"3":{"1436":2}}],["shoppingcartlist",{"3":{"1324":1,"1591":3,"1596":3,"1597":1}}],["shoppingcartcreaterequest",{"3":{"1270":1}}],["shoppingcartchanged",{"3":{"782":1,"1749":1,"1769":1}}],["shoppingcartcheckedout",{"2":{"782":1,"1749":1},"3":{"0":1,"782":3,"1259":1,"1749":1,"1769":1}}],["shoppingcart",{"2":{"1749":1,"1769":1,"2112":1},"3":{"782":1,"1324":2,"1591":1,"1749":1,"1764":1,"1765":1,"1767":1,"1769":4,"2112":1}}],["shoppingcartdetail",{"2":{"1591":1},"3":{"556":1,"1324":1,"1591":2}}],["shoppingcartbycustomerspecification",{"2":{"318":1,"1996":1},"3":{"318":4,"1996":2}}],["shoppingcartservice",{"3":{"881":1,"1324":1,"1591":1,"1597":1}}],["shoppingcartsmanage",{"2":{"318":1,"324":1,"1996":1},"3":{"318":1,"324":1,"1996":1}}],["shoppingcartscontroller",{"2":{"318":3,"324":1,"743":1},"3":{"318":9,"324":3,"325":1,"326":1,"743":1,"1300":7,"1311":4,"1591":1,"1599":1,"1996":13}}],["shoppingcarts",{"2":{"554":1},"3":{"317":1,"318":1,"535":1,"539":1,"554":1,"556":1,"674":1,"782":3,"813":1,"814":1,"881":2,"897":1,"900":1,"988":2,"1025":2,"1324":1,"1436":2,"1742":1,"1746":5,"1749":9,"1750":3,"1764":2,"1765":3,"1995":1}}],["shopper",{"3":{"831":1,"1028":1,"1591":1,"1596":2,"1742":2,"1764":1,"1769":1}}],["shouting",{"3":{"1324":1}}],["shouldgotoregisterpage",{"3":{"1436":1}}],["shouldnavigatetohomepage",{"3":{"1436":2}}],["shouldnotexceed",{"3":{"1436":1}}],["shouldnotexpose",{"3":{"81":1,"1436":2}}],["shouldnotinject",{"3":{"1436":2}}],["shouldnotimplement",{"3":{"1311":1,"1436":2,"1875":1}}],["shouldnotresidein",{"3":{"1436":1}}],["shouldnotreach",{"3":{"1436":6}}],["shouldnotreadtheambientclock",{"2":{"1161":1,"1436":1},"3":{"1161":1,"1436":2}}],["shouldnothave",{"3":{"1436":2}}],["shouldnot",{"3":{"1436":3,"1489":1}}],["shouldnotnavigate",{"3":{"1436":2}}],["shouldnotthrow",{"3":{"1436":2}}],["shouldnotbe",{"3":{"1436":10}}],["shouldnotdependon",{"2":{"1436":2,"1489":2},"3":{"54":1,"1436":15,"1489":6}}],["shouldupdateemail",{"3":{"1436":1}}],["shouldupdateprofileaddress",{"3":{"1436":1}}],["shouldupdateprofilename",{"3":{"1436":1}}],["shouldusereadrepositories",{"3":{"1436":4}}],["shouldpreventaccesstoprotectedpages",{"3":{"1436":1}}],["shouldexpose",{"3":{"1436":2,"1489":1}}],["shoulder",{"3":{"1300":1}}],["shouldrender",{"2":{"1555":1,"1560":1},"3":{"1555":1,"1560":1}}],["shouldredirecttologinpage",{"3":{"1436":1}}],["shouldredirecttologin",{"3":{"1436":1}}],["shouldresidein",{"3":{"1436":4}}],["shouldreside",{"3":{"1436":1}}],["shouldreturn",{"3":{"1436":2,"1489":1}}],["shouldregister",{"3":{"1436":1}}],["shouldreportpartialresults",{"3":{"1417":1}}],["shouldonlyoccurin",{"3":{"1436":3}}],["shouldinherit",{"3":{"1436":2}}],["shouldincrease",{"3":{"1436":2}}],["shouldimplement",{"3":{"1436":4,"1489":1}}],["shouldcarry",{"3":{"1436":3}}],["shouldcollectrequest",{"2":{"402":1},"3":{"402":1,"1333":1,"1339":5,"1443":2}}],["shouldcollectoutgoing",{"2":{"402":1},"3":{"402":1,"1333":1,"1339":5,"1443":1}}],["shouldhavenoaccessibilityviolations",{"3":{"1436":7}}],["shouldhave",{"2":{"1489":1},"3":{"1436":14,"1489":2}}],["shouldhandle",{"3":{"819":1,"1312":1,"1339":1}}],["shouldmatch",{"3":{"1436":5}}],["shouldlocalizeandpersist",{"3":{"1436":1}}],["shouldlockasync",{"3":{"1324":4}}],["shouldloadwithuserdata",{"3":{"1436":1}}],["shouldload",{"3":{"1310":2}}],["shouldapplyandpersist",{"3":{"1436":1}}],["shouldattempt",{"3":{"1300":2}}],["shouldaudit",{"3":{"1237":1,"1286":3}}],["shouldbypasscertificatevalidation",{"3":{"1286":2}}],["shouldbereachable",{"3":{"1436":1}}],["shouldbeforbidden",{"2":{"1627":1},"3":{"1436":1,"1627":1}}],["shouldbeaccessible",{"3":{"1436":2}}],["shouldbesealed",{"3":{"1436":4}}],["shouldbecolocatedwith",{"3":{"1436":6}}],["shouldbe",{"2":{"1168":1},"3":{"1168":1,"1237":1,"1436":26}}],["shouldsucceed",{"3":{"1436":1}}],["shouldshowerror",{"3":{"1436":4}}],["shouldshipfrom",{"2":{"81":1,"1436":1},"3":{"81":1,"1436":2}}],["shouldstayat",{"2":{"2180":1},"3":{"1436":2,"2180":1}}],["shouldstaybehind",{"2":{"1436":1,"2180":1},"3":{"1436":2,"2180":1}}],["shouldseed",{"2":{"1596":1},"3":{"1284":1,"1286":3,"1412":1,"1415":3,"1596":1}}],["shouldwritefilesink",{"2":{"401":1},"3":{"401":1,"1333":1,"1339":2}}],["shoulddeclare",{"2":{"160":1},"3":{"160":1,"1436":12}}],["should",{"3":{"0":1,"32":1,"33":1,"59":1,"62":1,"71":1,"109":1,"139":1,"155":1,"159":2,"160":2,"174":1,"175":1,"185":3,"188":1,"224":1,"230":1,"349":1,"358":1,"360":2,"361":1,"517":1,"519":1,"520":1,"537":1,"545":1,"550":1,"573":1,"625":1,"667":1,"674":1,"682":1,"709":1,"725":2,"758":1,"767":2,"801":1,"819":1,"832":2,"837":1,"861":1,"890":1,"899":1,"916":1,"940":2,"941":1,"955":1,"965":1,"980":1,"989":1,"1000":1,"1017":1,"1049":1,"1077":1,"1085":1,"1124":1,"1140":1,"1229":1,"1232":1,"1247":2,"1259":1,"1270":3,"1286":9,"1300":9,"1301":3,"1304":1,"1309":4,"1310":1,"1311":12,"1312":3,"1323":4,"1324":9,"1339":6,"1342":1,"1350":6,"1359":10,"1369":3,"1380":2,"1395":7,"1396":10,"1411":1,"1415":2,"1416":1,"1417":8,"1420":1,"1427":1,"1435":1,"1436":33,"1438":1,"1439":1,"1440":1,"1454":1,"1455":1,"1456":1,"1467":1,"1489":1,"1490":3,"1492":2,"1500":1,"1531":1,"1537":1,"1630":2,"1631":3,"1638":2,"1639":7,"1640":5,"1641":2,"1674":1,"1675":1,"1676":1,"1677":1,"1678":1,"1765":1,"1776":3,"1782":2,"1801":1,"1802":1,"1806":1,"1812":2,"1817":1,"1819":3,"1827":1,"1854":1,"1861":1,"1862":1,"1863":1,"1868":2,"1888":1,"1890":1,"1898":1,"1899":2,"1901":1,"1911":1,"1924":1,"1930":1,"1960":2,"1965":2,"1979":1,"1981":1,"1987":1,"1992":1,"2000":1,"2001":1,"2016":1,"2040":1,"2079":1,"2082":2,"2083":1,"2087":1,"2088":1,"2101":1,"2109":1,"2116":1,"2130":1,"2137":1,"2142":3,"2143":1,"2147":1,"2148":1,"2162":3,"2167":1,"2170":1,"2171":1,"2176":1,"2191":1,"2194":1}}],["showtargetpickers",{"3":{"1395":1}}],["showeventpicker",{"3":{"1395":1}}],["showeventpicker=",{"3":{"1395":2}}],["showempty",{"3":{"1395":1}}],["showed",{"3":{"147":1,"1070":1,"1339":1}}],["showgrid",{"3":{"1395":1}}],["showmyscheduleonlychanged",{"3":{"1395":1}}],["showmyscheduleonly",{"3":{"1395":1}}],["showmap",{"3":{"1395":3}}],["showmessageboxasync",{"3":{"1324":3}}],["showasync",{"3":{"1395":5}}],["showactionerror",{"3":{"1402":5}}],["showaction",{"3":{"1324":6,"1396":1}}],["showcancelsnackbar",{"3":{"1324":3,"1395":1}}],["showcase",{"3":{"618":1,"1434":1,"1436":1,"1438":1,"1486":1,"1487":1,"1643":2}}],["showpersistent",{"3":{"1324":8}}],["show",{"2":{"1484":1,"2135":1},"3":{"450":1,"537":1,"644":1,"681":1,"689":1,"741":1,"766":1,"1020":1,"1026":1,"1027":1,"1028":1,"1239":1,"1259":2,"1286":1,"1300":5,"1309":3,"1324":17,"1350":6,"1353":1,"1359":6,"1382":1,"1395":13,"1396":9,"1399":1,"1402":3,"1415":5,"1416":1,"1417":7,"1431":1,"1436":5,"1438":2,"1442":1,"1474":1,"1475":1,"1476":1,"1478":1,"1484":1,"1505":1,"1517":1,"1627":1,"1653":1,"1681":1,"1720":1,"1728":1,"1749":1,"1758":1,"1815":1,"1826":1,"1836":1,"1873":1,"1958":1,"2011":1,"2028":1,"2034":1,"2035":1,"2044":1,"2072":1,"2089":1,"2121":1,"2134":1,"2135":1,"2167":1,"2204":1}}],["shown",{"3":{"265":1,"1300":3,"1324":6,"1350":4,"1359":1,"1369":1,"1395":7,"1396":3,"1415":2,"1436":5,"1438":1,"1444":1,"1467":1,"1591":1,"1626":1,"1627":1,"1629":1,"1637":1,"1647":1,"1654":1,"1682":1,"1727":1,"1761":1,"2031":1,"2097":1,"2138":1}}],["showingcacheddata",{"3":{"1395":1}}],["showing",{"3":{"109":1,"265":1,"635":1,"881":1,"1300":1,"1311":2,"1324":3,"1350":1,"1359":4,"1388":1,"1391":1,"1395":8,"1396":5,"1415":2,"1416":1,"1417":2,"1436":5,"1479":1,"1750":1,"1941":1,"2004":1}}],["showstheapismessage",{"3":{"1436":1}}],["showsthesameconfirmation",{"3":{"1436":1}}],["showsclientvalidationerrors",{"3":{"1436":1}}],["showsearch",{"3":{"1324":1}}],["showsessionslink",{"3":{"1324":1}}],["shows",{"0":{"1910":1},"3":{"82":1,"109":1,"214":1,"227":1,"279":1,"536":1,"557":1,"585":1,"674":1,"684":1,"776":1,"782":1,"875":1,"890":1,"897":1,"905":2,"963":1,"981":1,"1004":1,"1018":1,"1020":1,"1029":1,"1102":2,"1229":1,"1237":2,"1259":1,"1270":1,"1280":1,"1286":7,"1289":1,"1300":4,"1301":1,"1307":1,"1309":7,"1311":3,"1313":1,"1323":6,"1324":38,"1339":13,"1340":1,"1344":1,"1350":7,"1351":1,"1359":10,"1362":1,"1369":1,"1375":1,"1380":3,"1384":1,"1385":1,"1387":1,"1388":1,"1391":3,"1395":40,"1396":26,"1397":1,"1398":1,"1402":13,"1403":1,"1414":1,"1415":2,"1416":2,"1417":7,"1427":2,"1431":1,"1433":1,"1436":9,"1438":1,"1440":1,"1456":1,"1467":1,"1470":1,"1474":1,"1484":2,"1492":1,"1577":1,"1620":1,"1627":1,"1631":2,"1646":1,"1657":2,"1661":2,"1670":1,"1673":1,"1684":1,"1685":1,"1689":1,"1702":1,"1704":1,"1729":1,"1730":1,"1748":1,"1750":2,"1756":1,"1768":2,"1773":2,"1836":1,"1913":1,"1919":1,"1923":1,"1932":1,"1943":1,"1949":1,"1950":1,"2006":1,"2011":1,"2023":1,"2083":1,"2088":1,"2101":1,"2118":1,"2119":1,"2137":1}}],["shotgun",{"3":{"1011":1,"1012":1,"1496":1,"1571":1}}],["shot",{"3":{"0":1,"422":1,"1161":1,"1259":1,"1286":3,"1297":1,"1309":1,"1324":4,"1334":1,"1339":1,"1359":1,"1389":1,"1393":1,"1395":6,"1414":1,"1415":1,"1417":2,"1436":2,"1438":1,"1765":1}}],["shortfall",{"3":{"1350":1,"1417":1}}],["shortcuts",{"3":{"1416":7}}],["shortcut",{"3":{"517":1,"923":1,"940":1,"1247":1,"1286":1,"1311":1,"1396":2,"1416":7,"1436":2,"1441":2,"1488":2,"1491":1,"1759":1,"2041":1}}],["shorthand",{"3":{"255":1,"674":1,"952":1,"954":1,"959":1,"1258":1,"1259":2,"1286":1,"1436":1,"1496":1}}],["shorter",{"3":{"139":1,"142":1,"359":1,"386":1,"387":1,"500":1,"733":1,"741":1,"827":2,"907":1,"975":1,"1244":1,"1247":1,"1270":2,"1286":2,"1288":1,"1300":1,"1301":2,"1309":1,"1311":2,"1323":1,"1324":1,"1350":1,"1359":1,"1415":1,"1436":3,"1438":1,"1465":1,"1821":1,"1824":1,"1900":1}}],["shortest",{"3":{"59":1,"135":1,"1265":1,"1359":2,"1436":6,"1759":1}}],["shorten",{"3":{"938":1,"1259":1,"1323":1,"1396":1}}],["shortened",{"3":{"461":1,"1187":1,"1396":1}}],["shortening",{"3":{"22":1,"459":1}}],["shortens",{"3":{"19":1,"526":1,"675":1,"1339":1,"1415":1}}],["short",{"3":{"0":3,"1":1,"39":1,"70":1,"71":1,"109":2,"110":1,"113":1,"117":1,"121":1,"122":1,"124":1,"125":1,"126":1,"223":1,"233":1,"235":1,"243":2,"244":1,"283":1,"284":1,"300":1,"318":1,"319":1,"324":1,"350":3,"351":1,"352":1,"359":2,"360":1,"361":2,"386":1,"390":2,"392":1,"459":2,"498":2,"500":2,"501":1,"508":1,"528":1,"549":1,"591":3,"593":1,"633":1,"640":1,"684":1,"690":1,"691":1,"734":1,"741":1,"743":1,"744":1,"790":2,"819":1,"820":2,"853":1,"855":1,"920":1,"921":1,"946":1,"948":1,"964":1,"973":1,"979":1,"1006":1,"1042":1,"1061":1,"1168":1,"1183":1,"1212":1,"1220":2,"1224":1,"1229":5,"1231":1,"1237":6,"1239":1,"1245":1,"1247":3,"1250":1,"1255":1,"1256":1,"1259":10,"1263":2,"1265":1,"1268":5,"1270":32,"1271":3,"1286":19,"1288":1,"1300":26,"1301":5,"1304":1,"1309":9,"1310":1,"1311":20,"1320":1,"1323":8,"1324":13,"1328":1,"1337":1,"1339":19,"1346":1,"1347":1,"1350":9,"1359":51,"1371":1,"1375":2,"1380":7,"1387":1,"1389":1,"1391":1,"1395":25,"1396":19,"1402":14,"1406":1,"1410":1,"1415":13,"1416":5,"1417":5,"1427":2,"1430":1,"1436":11,"1438":2,"1441":1,"1443":1,"1447":1,"1453":1,"1454":3,"1455":2,"1460":1,"1461":1,"1462":1,"1467":1,"1489":2,"1492":3,"1496":3,"1523":1,"1526":1,"1554":1,"1577":9,"1585":2,"1592":2,"1612":1,"1630":1,"1640":2,"1641":1,"1666":1,"1701":1,"1707":1,"1726":1,"1732":1,"1800":1,"1805":2,"1821":1,"1828":1,"1831":1,"1834":1,"1856":2,"1874":1,"1905":1,"1916":1,"1919":1,"1921":1,"1922":1,"1923":1,"1933":2,"1968":1,"1972":1,"1975":1,"1979":1,"1980":3,"1981":1,"1984":1,"1985":1,"1995":1,"2001":1,"2002":1,"2008":1,"2009":1,"2031":1,"2032":1,"2048":2,"2049":1,"2098":2,"2130":1,"2138":2,"2139":1,"2144":2,"2145":1,"2158":1,"2162":1,"2190":1,"2205":1,"2234":2}}],["shas",{"3":{"1483":1}}],["sha1",{"3":{"1300":1}}],["shadowed",{"3":{"1324":1}}],["shadow",{"3":{"1035":1,"1059":1,"1237":1,"1276":1,"1286":5,"1301":3,"1350":2,"1369":1,"1395":6,"1436":1,"1467":1,"1480":2,"2203":1}}],["shadowing",{"3":{"964":1,"1237":1}}],["shadows",{"3":{"840":1,"1311":1,"1443":1}}],["sha2",{"3":{"905":1,"1300":1}}],["sha256",{"2":{"418":2,"423":1,"424":1,"868":1,"870":1,"873":1,"1481":1},"3":{"30":1,"418":2,"423":2,"424":1,"868":1,"870":1,"873":1,"1300":8,"1309":1,"1311":2,"1427":1,"1445":1,"1481":1,"1895":2}}],["shaky",{"3":{"682":1,"685":1,"1417":2}}],["shaping",{"3":{"346":1,"572":1,"591":1,"595":1,"744":1,"827":2,"1238":1,"1242":3,"1244":2,"1247":9,"1270":3,"1272":1,"1309":4,"1311":2,"1339":2,"1350":4,"1356":1,"1359":7,"1380":1,"1395":1,"1436":3,"1438":1,"1488":1,"1727":2,"1815":1,"2056":1}}],["shapecollectiondata",{"2":{"1242":1},"3":{"741":1,"1242":1,"1247":4}}],["shaperow",{"2":{"744":1},"3":{"741":1,"744":1,"1311":1}}],["shaper",{"3":{"741":2,"742":1,"1436":1,"1438":1}}],["shapedaccessorcache",{"3":{"1247":4}}],["shapedata",{"2":{"741":1},"3":{"741":1,"1242":1,"1247":3,"1311":1}}],["shaped",{"0":{"1389":1},"3":{"175":1,"249":1,"253":1,"337":1,"341":1,"388":3,"439":1,"443":2,"573":1,"585":1,"608":1,"626":1,"633":1,"719":1,"741":3,"743":1,"785":1,"789":1,"825":1,"830":1,"880":1,"890":1,"921":1,"946":1,"948":1,"964":1,"1004":1,"1018":1,"1117":1,"1124":1,"1150":1,"1152":1,"1153":1,"1177":1,"1217":1,"1229":4,"1247":5,"1259":1,"1270":1,"1271":2,"1285":1,"1286":8,"1300":9,"1311":11,"1320":1,"1323":2,"1324":9,"1326":1,"1339":1,"1347":1,"1350":8,"1352":1,"1353":1,"1359":12,"1369":4,"1380":1,"1382":1,"1395":8,"1396":8,"1401":1,"1402":1,"1410":1,"1415":5,"1416":1,"1417":7,"1427":1,"1436":10,"1438":1,"1462":1,"1476":1,"1496":1,"1526":1,"1543":1,"1576":1,"1577":3,"1585":1,"1669":1,"1685":1,"1702":2,"1722":1,"1730":1,"1731":1,"1874":1,"1883":1,"1911":1,"1916":1,"1923":1,"1940":1,"1958":1,"2002":1,"2003":1,"2076":1,"2119":1,"2128":1,"2152":1}}],["shapes",{"0":{"1373":1,"1374":1,"1943":1},"3":{"0":2,"109":2,"157":1,"166":1,"170":1,"301":1,"317":1,"318":1,"395":1,"518":1,"522":1,"535":1,"549":1,"557":1,"566":1,"583":1,"591":1,"633":3,"640":1,"657":1,"733":1,"734":1,"743":1,"781":1,"782":1,"789":1,"810":1,"812":1,"826":1,"834":1,"845":1,"853":1,"920":1,"926":2,"980":2,"983":1,"984":1,"998":1,"1050":2,"1060":1,"1068":1,"1100":1,"1110":1,"1118":1,"1171":1,"1202":1,"1203":1,"1212":1,"1227":2,"1228":1,"1229":1,"1237":2,"1242":1,"1245":1,"1247":1,"1249":1,"1260":1,"1263":1,"1265":1,"1270":6,"1271":2,"1273":1,"1279":1,"1286":11,"1293":1,"1297":1,"1300":14,"1301":1,"1309":4,"1311":14,"1312":8,"1315":1,"1317":1,"1320":1,"1323":7,"1324":7,"1328":1,"1334":1,"1339":5,"1340":1,"1342":1,"1345":1,"1347":1,"1350":1,"1359":20,"1366":1,"1369":1,"1373":2,"1374":1,"1380":1,"1387":1,"1393":1,"1395":7,"1396":19,"1399":1,"1402":4,"1410":1,"1415":6,"1416":1,"1431":1,"1432":1,"1436":43,"1438":2,"1444":1,"1496":2,"1526":1,"1535":1,"1546":2,"1600":1,"1652":1,"1665":1,"1666":1,"1720":1,"1731":1,"1927":1,"1949":1,"1952":1,"1955":1,"1958":1,"1992":1,"1995":1,"1996":1,"2019":1,"2091":1,"2102":1,"2133":1}}],["shape",{"0":{"1261":1,"1295":1,"1331":1,"1343":1,"1363":1,"1375":1,"1613":1,"1718":1,"1820":1,"2052":1},"2":{"1704":1},"3":{"0":21,"24":1,"31":1,"42":1,"53":1,"59":1,"62":2,"68":1,"71":1,"72":1,"76":1,"77":2,"78":1,"80":1,"109":4,"110":1,"111":1,"122":1,"125":1,"126":1,"127":1,"130":1,"134":1,"136":2,"138":1,"139":2,"159":1,"164":1,"166":3,"180":1,"184":1,"186":1,"195":2,"201":1,"218":1,"226":1,"227":1,"230":1,"234":1,"243":1,"245":1,"247":1,"248":2,"255":2,"256":1,"258":1,"274":1,"280":1,"282":1,"300":1,"306":1,"309":1,"322":1,"325":2,"329":1,"331":1,"332":1,"333":1,"335":1,"341":1,"350":2,"352":1,"353":1,"372":1,"379":1,"380":1,"384":1,"400":1,"401":1,"404":1,"407":1,"412":1,"418":2,"423":1,"427":2,"428":1,"429":1,"430":1,"447":2,"448":5,"449":1,"451":1,"455":1,"459":1,"497":1,"498":1,"502":1,"509":1,"517":2,"519":1,"522":1,"523":1,"536":1,"539":1,"541":1,"544":1,"545":2,"549":6,"556":1,"563":2,"564":4,"572":2,"574":1,"582":2,"609":1,"625":1,"626":1,"630":1,"633":5,"635":2,"638":1,"655":1,"657":1,"661":1,"668":1,"674":2,"675":1,"676":1,"681":1,"689":1,"691":1,"698":2,"699":1,"700":1,"707":2,"714":1,"725":2,"726":1,"727":1,"731":1,"732":2,"733":2,"734":1,"740":1,"743":1,"749":3,"750":1,"760":2,"774":1,"776":1,"780":1,"782":5,"783":2,"784":3,"786":1,"790":3,"797":1,"798":1,"799":1,"801":2,"804":1,"808":1,"810":2,"812":1,"818":1,"821":1,"827":2,"829":1,"831":1,"832":1,"837":2,"838":1,"840":3,"845":3,"846":2,"847":1,"848":2,"854":1,"862":1,"868":1,"881":1,"882":2,"889":1,"891":1,"897":1,"898":1,"899":1,"901":1,"905":2,"907":1,"909":1,"913":1,"914":1,"921":1,"924":1,"926":5,"930":1,"935":1,"939":1,"941":1,"945":1,"946":4,"947":1,"948":2,"950":1,"957":1,"963":1,"964":1,"965":1,"966":1,"968":1,"971":2,"976":1,"979":2,"980":5,"981":3,"982":1,"1003":1,"1004":3,"1005":1,"1006":1,"1008":1,"1018":4,"1020":1,"1025":1,"1033":1,"1034":1,"1035":2,"1037":1,"1042":1,"1043":1,"1048":1,"1049":1,"1050":2,"1058":1,"1059":3,"1066":1,"1069":1,"1082":1,"1090":1,"1091":1,"1092":1,"1095":1,"1101":1,"1102":1,"1104":1,"1108":1,"1115":1,"1124":1,"1126":2,"1132":2,"1143":1,"1152":1,"1162":1,"1167":1,"1168":1,"1169":1,"1174":1,"1184":1,"1193":1,"1212":2,"1218":1,"1223":1,"1226":1,"1229":22,"1233":1,"1234":3,"1235":2,"1237":16,"1238":2,"1239":2,"1240":1,"1242":1,"1244":3,"1247":31,"1258":1,"1259":9,"1260":1,"1262":1,"1263":3,"1269":2,"1270":38,"1271":10,"1273":1,"1275":1,"1276":1,"1278":1,"1286":74,"1288":1,"1289":3,"1292":2,"1294":1,"1296":1,"1299":1,"1300":110,"1301":12,"1307":1,"1309":31,"1310":5,"1311":42,"1312":9,"1313":1,"1317":1,"1320":3,"1323":60,"1324":117,"1330":1,"1333":1,"1334":1,"1337":1,"1339":40,"1343":2,"1348":1,"1350":79,"1352":3,"1353":4,"1358":1,"1359":226,"1362":1,"1366":1,"1368":1,"1369":30,"1370":1,"1372":1,"1373":3,"1376":3,"1378":1,"1380":40,"1382":1,"1383":1,"1389":1,"1392":2,"1395":84,"1396":136,"1397":1,"1399":1,"1400":1,"1401":1,"1402":45,"1404":1,"1405":2,"1409":1,"1415":54,"1416":15,"1417":48,"1418":2,"1421":1,"1427":6,"1429":1,"1431":5,"1433":1,"1435":1,"1436":246,"1438":9,"1440":1,"1441":3,"1443":2,"1444":1,"1447":1,"1448":1,"1455":4,"1456":1,"1459":3,"1465":1,"1466":1,"1467":5,"1470":1,"1474":1,"1476":1,"1478":1,"1486":1,"1488":1,"1489":3,"1491":1,"1492":4,"1496":2,"1497":1,"1515":1,"1526":1,"1534":1,"1545":1,"1547":1,"1577":2,"1585":1,"1591":3,"1596":2,"1611":1,"1627":1,"1631":3,"1641":7,"1646":1,"1651":1,"1654":2,"1661":2,"1662":1,"1665":1,"1668":1,"1673":1,"1679":1,"1684":2,"1685":2,"1686":3,"1688":2,"1692":2,"1697":3,"1699":1,"1701":3,"1704":2,"1705":1,"1717":5,"1718":3,"1719":3,"1720":2,"1723":2,"1724":1,"1725":2,"1727":14,"1728":2,"1729":2,"1730":1,"1731":1,"1765":1,"1805":6,"1806":1,"1810":3,"1815":4,"1816":1,"1817":1,"1825":1,"1832":1,"1833":1,"1843":1,"1861":2,"1863":1,"1867":1,"1869":1,"1875":1,"1881":1,"1884":1,"1887":3,"1888":2,"1889":3,"1890":1,"1892":1,"1901":1,"1902":2,"1905":1,"1909":2,"1915":2,"1919":2,"1920":2,"1922":1,"1923":1,"1924":1,"1925":1,"1926":1,"1927":2,"1928":1,"1929":1,"1930":1,"1933":1,"1934":1,"1942":1,"1945":1,"1947":1,"1950":1,"1951":1,"1953":1,"1955":1,"1957":1,"1970":1,"1972":1,"1977":1,"1978":2,"1979":2,"1986":1,"1987":2,"1988":1,"1989":1,"1991":1,"1992":2,"1994":1,"2002":3,"2003":1,"2009":2,"2011":1,"2013":1,"2014":1,"2025":1,"2044":2,"2045":1,"2047":1,"2048":1,"2051":1,"2052":1,"2056":1,"2058":1,"2060":2,"2061":2,"2069":1,"2076":1,"2084":1,"2086":1,"2090":1,"2091":5,"2095":1,"2098":1,"2099":1,"2100":2,"2103":1,"2108":1,"2109":3,"2112":1,"2115":1,"2121":1,"2125":1,"2127":1,"2131":1,"2132":2,"2133":4,"2134":3,"2135":3,"2136":1,"2138":1,"2144":1,"2152":1,"2155":1,"2158":2,"2165":1,"2168":1,"2169":2,"2182":1,"2188":1,"2200":1,"2205":1,"2232":1,"2234":1}}],["shallowly",{"3":{"1459":1}}],["shallow",{"3":{"237":1,"566":1,"1237":1,"1359":1,"1436":1,"1438":1,"1453":1,"1577":1,"1957":1}}],["shards",{"3":{"2222":1}}],["sharply",{"3":{"1311":1,"1417":1}}],["sharpened",{"3":{"804":1}}],["sharpens",{"3":{"803":1,"1997":1}}],["sharper",{"3":{"168":1,"549":1,"1267":1,"1281":1,"1286":1,"1324":3,"1436":7,"2026":1,"2161":1}}],["sharpest",{"3":{"48":1,"160":1,"585":1,"1301":1,"1323":1,"1324":1,"1328":1,"1359":1,"1395":1,"1396":1,"1415":2,"1436":6,"1441":1,"1455":1,"2158":1}}],["sharp",{"3":{"102":1,"549":1,"735":1,"1312":1,"1396":1,"1436":2,"1787":1,"1792":1,"1793":1,"1801":1,"1807":1,"1812":1,"1817":1,"1827":1,"1834":1,"1846":1,"1853":1,"1862":1,"1868":1,"1877":1,"1886":1,"1892":1,"1899":1,"1905":1,"1912":1,"1921":1,"1922":3,"1924":1,"1930":1,"1941":1,"1949":1,"1950":1,"1959":1,"1965":1,"1972":1,"1979":1,"1985":1,"1992":1,"1998":1,"2003":1,"2015":1,"2023":1,"2029":1,"2031":1,"2049":1,"2050":1,"2059":1,"2061":1,"2071":1,"2082":1,"2088":1,"2100":1,"2110":1,"2125":1,"2130":1,"2135":1,"2141":1,"2148":1,"2155":1,"2162":1,"2171":1,"2182":1,"2195":1,"2205":1,"2213":1}}],["sharing",{"3":{"24":1,"25":1,"30":1,"58":1,"175":1,"228":1,"246":1,"248":1,"503":1,"597":1,"629":1,"665":1,"682":2,"715":1,"827":1,"846":1,"897":1,"964":1,"996":1,"1052":1,"1055":1,"1203":1,"1207":8,"1229":2,"1237":3,"1242":1,"1247":1,"1259":2,"1267":1,"1270":5,"1279":1,"1286":6,"1298":1,"1300":7,"1301":6,"1309":1,"1310":1,"1311":2,"1312":1,"1323":5,"1324":10,"1339":2,"1342":1,"1350":1,"1356":1,"1359":8,"1369":2,"1380":1,"1395":3,"1396":6,"1402":3,"1406":2,"1415":4,"1417":7,"1436":5,"1437":1,"1438":3,"1543":1,"1722":1,"1765":1,"1849":1,"1920":2,"1935":1,"1995":1,"1998":1,"2054":1,"2126":1}}],["sharefile",{"3":{"1417":2}}],["sharefilerequest",{"3":{"1417":2}}],["sharefileasync",{"3":{"1324":1,"1417":6,"2119":1}}],["sharetextrequest",{"3":{"1417":2}}],["sharetitle",{"3":{"1324":1}}],["sharelinkasync",{"3":{"1417":5,"2119":2}}],["sharelink",{"3":{"1417":4}}],["sharepagebutton",{"3":{"1324":7}}],["sharepagebuttontests",{"3":{"1199":2,"1207":4}}],["shareable",{"3":{"691":1,"1324":4,"1395":1,"1396":3,"1715":1}}],["sharescheduleasync",{"3":{"1395":1}}],["sharesthegatewayliftstrigger",{"3":{"1339":1}}],["shares",{"3":{"0":1,"74":1,"174":1,"181":2,"243":1,"265":1,"269":1,"277":1,"309":1,"665":1,"881":1,"998":1,"1000":1,"1133":1,"1229":2,"1239":1,"1255":1,"1259":2,"1267":1,"1270":1,"1271":2,"1273":1,"1277":1,"1278":1,"1286":13,"1290":1,"1300":2,"1309":1,"1310":2,"1311":10,"1323":3,"1324":10,"1339":5,"1348":1,"1350":3,"1359":8,"1380":4,"1391":1,"1395":1,"1396":3,"1402":1,"1415":1,"1416":1,"1417":3,"1427":1,"1436":9,"1438":1,"1442":1,"1475":1,"1488":1,"1539":1,"1591":1,"1698":1,"1849":1,"1851":1,"1894":1,"1999":1,"2001":2,"2068":1,"2073":1,"2179":1,"2234":1}}],["share",{"0":{"2113":1},"2":{"412":1,"2118":1,"2121":1},"3":{"0":8,"10":1,"15":1,"25":1,"27":1,"32":1,"46":1,"111":1,"116":1,"147":1,"157":1,"166":2,"169":1,"235":1,"248":1,"253":1,"335":1,"395":2,"412":2,"419":1,"420":1,"507":1,"633":2,"665":2,"667":1,"714":1,"733":1,"778":1,"799":1,"803":1,"827":2,"854":1,"881":1,"883":1,"891":1,"905":2,"909":1,"922":1,"926":1,"964":1,"998":1,"1018":1,"1036":1,"1040":1,"1043":1,"1044":1,"1045":1,"1066":1,"1096":1,"1116":1,"1185":1,"1192":1,"1193":1,"1196":1,"1202":1,"1203":1,"1237":1,"1239":1,"1241":1,"1242":1,"1243":3,"1247":13,"1259":1,"1270":7,"1271":3,"1284":1,"1286":27,"1297":1,"1300":12,"1301":10,"1309":6,"1310":3,"1311":8,"1312":1,"1317":1,"1320":2,"1322":1,"1323":9,"1324":31,"1325":1,"1332":1,"1337":1,"1339":12,"1346":1,"1350":5,"1351":1,"1353":1,"1358":1,"1359":38,"1366":1,"1369":3,"1380":6,"1385":2,"1387":1,"1395":30,"1396":17,"1397":1,"1402":3,"1415":2,"1416":2,"1417":51,"1425":1,"1427":2,"1435":1,"1436":21,"1438":10,"1445":1,"1453":1,"1454":1,"1467":6,"1486":1,"1489":1,"1496":5,"1591":2,"1597":1,"1630":2,"1631":2,"1639":5,"1640":1,"1641":3,"1664":1,"1669":2,"1731":1,"1732":1,"1789":1,"1805":1,"1847":1,"1859":1,"1865":1,"1868":1,"1894":1,"1898":1,"1900":1,"1908":2,"1909":1,"1916":1,"1932":1,"1972":1,"2001":1,"2022":1,"2025":1,"2057":1,"2066":1,"2083":1,"2088":1,"2114":1,"2117":1,"2118":4,"2119":1,"2120":2,"2121":2,"2123":1,"2124":2,"2194":1,"2234":1}}],["shared→masstransit",{"3":{"1576":1}}],["shared→domain→application→infra→api",{"3":{"1576":1}}],["shareddtos",{"3":{"1436":1}}],["sharedintegrationeventsnamespace",{"3":{"1436":1}}],["sharedadchome",{"3":{"1416":1}}],["sharedaccesskey=sas",{"3":{"1339":1}}],["sharedaccesskeyname=rootmanagesharedaccesskey",{"3":{"1339":1}}],["sharedassemblies",{"2":{"81":1,"1436":1},"3":{"80":1,"81":1,"1436":2}}],["sharedretrypolicy",{"2":{"1395":1},"3":{"1324":3,"1395":1}}],["sharedresource",{"2":{"2085":1},"3":{"265":1,"268":1,"905":1,"1199":15,"1203":1,"1207":2,"1324":29,"1436":5,"1496":1,"1577":2,"2085":2}}],["sharedownloadedfileasync",{"3":{"1324":1}}],["sharedkeywords",{"3":{"1350":2}}],["sharedkey",{"3":{"1300":1}}],["sharedlayertests",{"3":{"1199":1,"1207":2,"1436":4,"1489":1}}],["sharedlayertestsbase",{"3":{"1199":2,"1207":2,"1436":5,"1654":1}}],["sharedhttptestdoublestests",{"3":{"1199":1,"1207":2,"1436":3}}],["sharedcode",{"3":{"1436":2}}],["sharedcodes",{"3":{"1436":2}}],["sharedcodeerrors",{"3":{"1199":2,"1207":1,"1436":5}}],["sharedcategoryitems",{"3":{"1350":2}}],["sharedcachestripewebhooksecretstore",{"2":{"793":1},"3":{"792":1,"793":2,"794":1,"1589":1,"1591":1,"1596":1,"1597":1}}],["sharedstorereadoptions",{"2":{"733":1,"736":1},"3":{"733":1,"736":1,"1301":4}}],["shared",{"0":{"1284":1,"1289":1,"1300":1,"1322":1,"1336":1,"1406":1,"1465":1,"1970":1},"1":{"646":1,"647":1,"648":1,"649":1,"650":1,"651":1,"652":1,"653":1,"662":1,"663":1,"664":1,"665":1,"666":1,"667":1,"668":1,"669":1,"670":1,"695":1,"696":1,"697":1,"698":1,"699":1,"700":1,"701":1,"702":1,"703":1,"746":1,"747":1,"748":1,"749":1,"750":1,"751":1,"752":1,"753":1,"1893":1,"1894":1,"1895":1,"1896":1,"1897":1,"1898":1,"1899":1},"2":{"107":1,"109":1,"186":1,"190":1,"471":1,"472":1,"473":1,"576":1,"578":1,"938":1,"963":1,"966":1,"1051":1,"1217":1,"1222":1,"1229":3,"1230":1,"1237":2,"1271":1,"1287":2,"1309":2,"1325":1,"1340":1,"1341":1,"1344":1,"1359":1,"1396":4,"1402":2,"1404":1,"1415":1,"1504":1,"1650":2,"1653":1,"1660":1,"1687":1,"1699":2,"1702":2,"1727":2,"1805":1,"1829":1,"1962":1,"2073":1,"2080":1,"2159":1},"3":{"0":62,"15":1,"23":1,"26":2,"27":5,"31":2,"32":1,"33":1,"39":1,"42":1,"43":1,"45":1,"46":1,"47":1,"48":2,"53":1,"54":2,"58":1,"59":2,"61":1,"62":1,"68":1,"71":1,"74":1,"76":1,"78":2,"80":10,"81":4,"93":1,"95":2,"96":1,"98":2,"100":1,"107":1,"109":14,"110":2,"111":1,"113":1,"115":1,"121":1,"126":2,"130":2,"131":1,"132":1,"134":1,"135":1,"136":1,"139":1,"140":1,"150":1,"152":1,"155":1,"157":2,"160":2,"161":3,"166":1,"171":1,"173":2,"175":4,"176":1,"179":2,"182":1,"184":1,"186":13,"190":2,"196":1,"200":1,"202":2,"208":1,"214":2,"215":1,"216":2,"217":1,"220":1,"235":1,"237":1,"238":1,"241":1,"242":1,"243":3,"245":1,"246":2,"255":1,"256":1,"265":7,"266":2,"273":4,"283":2,"303":2,"305":5,"310":2,"311":1,"314":1,"318":2,"320":1,"325":1,"330":1,"340":1,"341":4,"346":1,"348":1,"350":1,"353":1,"360":1,"361":1,"368":1,"370":2,"382":2,"386":2,"387":1,"388":3,"391":1,"392":1,"397":2,"411":1,"412":2,"413":5,"418":3,"419":1,"420":5,"426":2,"427":1,"428":2,"430":1,"447":1,"448":2,"450":2,"457":1,"459":5,"461":2,"462":1,"463":1,"464":1,"466":1,"469":2,"470":9,"471":1,"472":2,"473":1,"475":10,"476":11,"477":13,"478":1,"482":1,"484":1,"490":1,"491":1,"492":1,"493":1,"499":2,"500":1,"505":1,"507":5,"508":1,"509":1,"510":1,"511":2,"516":1,"518":1,"523":2,"528":1,"534":1,"536":3,"538":1,"540":1,"549":2,"556":8,"558":2,"564":1,"570":1,"571":1,"572":3,"574":1,"576":6,"577":1,"578":1,"579":2,"583":6,"585":5,"587":1,"590":1,"591":2,"593":1,"594":1,"599":4,"601":4,"602":3,"603":1,"604":1,"605":1,"609":1,"610":1,"614":1,"617":2,"618":2,"624":1,"626":1,"633":1,"638":2,"640":2,"642":1,"643":4,"644":1,"646":1,"647":1,"649":2,"656":1,"657":5,"662":1,"665":1,"666":3,"667":3,"672":1,"674":4,"682":1,"690":10,"693":1,"695":1,"696":3,"698":4,"700":1,"702":2,"703":1,"707":1,"709":1,"718":1,"719":1,"725":4,"728":1,"729":1,"733":1,"741":1,"743":1,"746":1,"750":1,"753":1,"756":1,"757":1,"759":1,"760":2,"774":1,"776":1,"778":1,"782":4,"788":1,"790":5,"792":3,"793":1,"794":4,"798":3,"799":1,"803":1,"804":2,"805":1,"806":1,"810":1,"819":3,"821":1,"826":1,"827":5,"829":1,"831":2,"832":1,"833":1,"834":1,"836":1,"837":1,"838":4,"840":1,"841":1,"848":1,"860":1,"861":2,"868":1,"869":1,"872":1,"877":1,"881":6,"883":2,"884":1,"890":1,"891":1,"893":1,"903":1,"905":6,"906":1,"909":1,"910":1,"912":1,"914":1,"918":2,"920":1,"921":1,"922":1,"926":1,"938":1,"939":1,"946":1,"954":1,"956":1,"960":1,"962":1,"963":5,"964":3,"966":2,"967":1,"972":2,"973":2,"980":1,"982":1,"995":1,"996":1,"999":2,"1000":1,"1004":8,"1006":1,"1025":1,"1026":4,"1035":2,"1040":1,"1042":2,"1049":2,"1050":10,"1051":1,"1052":4,"1054":2,"1055":5,"1057":1,"1058":2,"1059":14,"1066":1,"1067":2,"1074":2,"1078":1,"1087":1,"1094":1,"1096":1,"1100":1,"1116":6,"1119":1,"1124":3,"1126":1,"1137":1,"1147":1,"1150":1,"1164":1,"1168":3,"1171":1,"1183":1,"1191":1,"1192":11,"1193":1,"1198":12,"1199":330,"1201":1,"1202":2,"1203":258,"1206":9,"1207":996,"1208":2,"1211":4,"1212":19,"1214":1,"1217":1,"1219":3,"1220":1,"1222":2,"1223":2,"1224":1,"1225":1,"1226":2,"1227":2,"1228":1,"1229":68,"1230":2,"1234":12,"1235":2,"1236":2,"1237":74,"1239":1,"1240":1,"1241":4,"1242":1,"1243":1,"1246":2,"1247":25,"1251":1,"1253":2,"1254":3,"1257":1,"1259":20,"1260":1,"1263":1,"1264":1,"1265":2,"1267":1,"1270":36,"1271":29,"1275":1,"1276":5,"1278":1,"1282":1,"1284":1,"1286":108,"1287":4,"1289":6,"1290":1,"1291":6,"1293":2,"1295":1,"1296":3,"1297":9,"1298":1,"1299":2,"1300":400,"1301":28,"1303":4,"1304":3,"1305":2,"1308":2,"1309":59,"1310":1,"1311":107,"1312":38,"1313":2,"1318":1,"1320":2,"1322":2,"1323":55,"1324":173,"1325":2,"1326":1,"1328":3,"1330":6,"1333":1,"1334":1,"1336":5,"1337":3,"1338":6,"1339":74,"1340":1,"1341":10,"1342":2,"1344":4,"1347":13,"1348":8,"1349":9,"1350":272,"1351":1,"1352":1,"1353":4,"1355":1,"1358":2,"1359":371,"1364":1,"1368":1,"1369":18,"1371":1,"1372":1,"1373":3,"1375":1,"1376":1,"1377":2,"1378":1,"1379":5,"1380":33,"1383":1,"1384":3,"1385":1,"1386":1,"1388":2,"1389":3,"1391":2,"1393":1,"1395":200,"1396":291,"1398":2,"1399":3,"1401":3,"1402":146,"1403":1,"1404":7,"1405":4,"1406":2,"1409":1,"1410":3,"1411":1,"1412":1,"1413":3,"1414":5,"1415":192,"1416":63,"1417":114,"1423":1,"1427":3,"1430":1,"1431":5,"1432":1,"1433":3,"1434":2,"1436":363,"1437":15,"1438":40,"1441":2,"1442":2,"1443":3,"1445":2,"1447":9,"1449":2,"1450":3,"1453":1,"1454":3,"1455":5,"1456":1,"1459":1,"1462":1,"1463":1,"1464":1,"1465":1,"1467":23,"1469":1,"1472":2,"1473":3,"1475":2,"1476":1,"1477":1,"1478":2,"1481":1,"1486":3,"1487":9,"1488":9,"1489":18,"1490":3,"1491":6,"1492":4,"1496":66,"1497":5,"1500":1,"1503":1,"1504":4,"1513":1,"1518":1,"1523":1,"1524":1,"1525":1,"1526":37,"1528":1,"1531":1,"1532":1,"1534":2,"1535":4,"1540":1,"1542":3,"1544":2,"1551":1,"1555":1,"1556":2,"1557":2,"1565":2,"1566":1,"1568":1,"1570":1,"1572":1,"1576":1,"1577":27,"1579":1,"1582":1,"1585":1,"1586":2,"1589":2,"1590":1,"1591":18,"1595":1,"1596":4,"1597":1,"1599":3,"1600":3,"1605":1,"1627":2,"1630":1,"1631":2,"1639":1,"1640":1,"1641":3,"1642":1,"1643":1,"1644":2,"1648":1,"1649":1,"1650":3,"1651":2,"1653":4,"1656":2,"1660":4,"1662":3,"1663":3,"1664":1,"1665":1,"1667":1,"1668":2,"1669":8,"1670":1,"1671":3,"1672":1,"1673":1,"1675":1,"1677":1,"1685":4,"1686":4,"1687":1,"1693":1,"1699":2,"1701":1,"1702":5,"1707":1,"1711":1,"1714":2,"1716":1,"1721":1,"1724":1,"1727":2,"1731":1,"1739":1,"1741":1,"1748":1,"1760":2,"1761":1,"1764":6,"1765":1,"1769":1,"1772":1,"1781":3,"1783":1,"1786":1,"1790":4,"1805":3,"1806":1,"1807":1,"1810":2,"1815":1,"1821":1,"1825":1,"1827":4,"1829":3,"1833":1,"1835":1,"1841":1,"1842":1,"1848":3,"1849":1,"1851":3,"1852":1,"1853":2,"1869":1,"1875":1,"1884":1,"1891":1,"1892":2,"1893":3,"1895":3,"1896":2,"1898":2,"1899":1,"1915":1,"1916":2,"1917":2,"1920":1,"1922":3,"1923":3,"1929":1,"1939":1,"1946":1,"1949":3,"1951":1,"1962":2,"1963":1,"1971":1,"1972":2,"1975":1,"1976":1,"1977":1,"1983":1,"1989":1,"1992":1,"1997":1,"1998":1,"1999":1,"2000":1,"2001":2,"2002":5,"2003":4,"2010":1,"2012":1,"2015":2,"2016":1,"2017":1,"2018":1,"2022":1,"2025":2,"2029":2,"2035":2,"2037":1,"2039":1,"2043":1,"2044":4,"2048":1,"2050":1,"2053":1,"2056":2,"2061":2,"2065":1,"2066":1,"2068":2,"2069":1,"2070":1,"2071":1,"2073":1,"2077":2,"2080":2,"2081":3,"2082":1,"2085":2,"2086":1,"2087":1,"2090":1,"2103":1,"2106":3,"2109":2,"2113":3,"2114":1,"2118":2,"2120":2,"2121":2,"2122":1,"2123":3,"2124":1,"2125":3,"2130":1,"2132":1,"2133":3,"2134":2,"2145":1,"2152":3,"2153":1,"2154":2,"2156":1,"2157":1,"2159":1,"2162":2,"2165":1,"2168":1,"2169":1,"2170":1,"2171":1,"2177":1,"2180":2,"2188":1,"2196":1,"2197":1,"2200":1,"2205":2,"2210":1,"2216":1,"2217":1,"2223":1,"2229":5,"2232":3,"2234":13}}],["sha",{"2":{"1589":1,"1597":1},"3":{"0":5,"157":2,"161":1,"225":1,"231":1,"368":1,"373":3,"374":2,"418":1,"424":1,"428":1,"429":1,"629":1,"854":1,"868":1,"870":1,"873":1,"905":1,"1018":3,"1091":1,"1212":2,"1286":1,"1290":1,"1294":1,"1295":1,"1300":8,"1309":1,"1311":4,"1418":1,"1426":1,"1427":1,"1436":1,"1438":1,"1445":4,"1452":2,"1455":8,"1456":2,"1459":4,"1461":3,"1465":1,"1466":1,"1467":1,"1469":1,"1475":3,"1526":1,"1589":1,"1591":1,"1596":1,"1597":1,"1641":2,"1666":1,"1667":1,"1765":1,"1767":1,"1900":1,"1902":2,"1905":2,"1908":2,"1933":1,"1982":1,"2056":1,"2178":1,"2182":1}}],["sha512",{"1":{"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"1900":1,"1901":1,"1902":1,"1903":1,"1904":1,"1905":1},"2":{"310":1,"946":1},"3":{"0":3,"307":1,"308":1,"309":1,"310":3,"311":1,"314":1,"945":2,"946":4,"1212":2,"1292":1,"1300":4,"1324":1,"1436":1,"1576":1,"1577":1,"1667":1,"1747":1,"1763":1,"1764":1,"1765":4,"1899":1,"1900":1,"1902":3,"1904":1,"1905":3,"2210":1}}],["symptoms",{"3":{"770":1,"2083":1}}],["symptom",{"3":{"234":1,"310":1,"664":1,"666":1,"821":1,"956":1,"963":1,"1339":5,"1396":2,"1430":1,"1436":3,"1651":1,"1970":1,"1989":1}}],["symmetricsecuritykey",{"3":{"1300":1,"1311":1}}],["symmetrically",{"3":{"1259":1,"1286":1,"1300":1,"1323":1,"1324":1,"1436":1}}],["symmetrical",{"3":{"930":1}}],["symmetric",{"3":{"24":1,"30":2,"31":2,"32":1,"33":1,"698":1,"764":2,"766":1,"819":1,"1212":1,"1237":1,"1267":1,"1270":1,"1286":1,"1288":1,"1300":3,"1312":3,"1324":3,"1350":1,"1415":1,"1441":1,"1450":1,"1843":1,"1893":2,"1894":1,"1895":1,"1898":1,"1899":2,"1920":1,"1953":1,"1959":1,"2010":1,"2022":1,"2029":1,"2033":1,"2232":1}}],["symmetry",{"3":{"0":1,"870":1,"1035":1,"1270":3,"1286":1,"1311":2,"1312":1,"1339":1,"1359":1,"1395":2,"1396":2,"1415":3,"1927":1,"2185":1}}],["symbolic",{"3":{"1467":1}}],["symbolically",{"3":{"1311":1}}],["symbols",{"3":{"636":1,"954":2,"1034":1,"1037":1,"1324":1,"1417":1,"1436":2,"1673":1}}],["symbol",{"3":{"0":1,"336":1,"619":1,"633":4,"634":1,"1311":2,"1324":11,"1396":1,"1417":1,"1432":1,"1488":1,"1492":1,"1591":1,"1600":1}}],["synonym",{"3":{"472":1}}],["synonyms",{"3":{"0":1,"798":1}}],["syncquestionanswers",{"3":{"1350":1,"1359":1}}],["synccategoryitems",{"3":{"1350":1,"1359":2}}],["synctrackedkey",{"3":{"1286":1}}],["syncing",{"3":{"1259":1,"1350":1,"1417":2}}],["syncstrategy",{"3":{"1526":1,"1535":1}}],["syncsessionquestionanswers",{"3":{"1359":1}}],["syncsessionchildren",{"3":{"1359":1}}],["syncscopedreadcontroller",{"3":{"1199":2,"1207":1}}],["syncs",{"3":{"988":1,"1252":1,"1259":1,"1359":3,"1417":1,"1632":2,"2222":1}}],["syncregistrationsasync",{"2":{"707":1,"710":1},"3":{"707":1,"710":1,"1323":1}}],["syncfusion",{"3":{"650":1}}],["syncasync",{"2":{"507":1},"3":{"507":1,"1324":7,"1359":3}}],["synchronizes",{"3":{"1632":1}}],["synchronize",{"2":{"1460":1},"3":{"1359":1,"1459":2,"1460":1}}],["synchronized",{"3":{"23":1,"643":1,"1324":1}}],["synchronization",{"3":{"481":2,"482":1,"485":1,"1229":1,"1286":1,"1310":1,"1312":1,"1324":2,"1380":1,"1395":2,"2234":1}}],["synchronizationcontext",{"2":{"481":1},"3":{"481":1,"1359":1}}],["synchronously",{"3":{"97":1,"601":1,"1259":4,"1323":1,"1324":1,"1335":1,"1339":2,"1350":1,"1395":6,"1402":1,"1413":1,"1427":1,"1467":1,"1792":1,"2017":1,"2113":1}}],["synchronous",{"1":{"50":1,"51":1,"52":1,"53":1,"54":1,"55":1},"3":{"0":3,"50":1,"52":1,"59":1,"68":1,"109":1,"184":1,"444":1,"603":1,"727":1,"743":3,"861":1,"933":1,"1059":2,"1060":1,"1202":1,"1203":1,"1212":1,"1213":1,"1220":1,"1229":3,"1247":2,"1259":10,"1270":1,"1274":1,"1283":1,"1286":16,"1297":1,"1300":5,"1301":1,"1309":1,"1311":8,"1312":4,"1318":1,"1323":2,"1324":10,"1339":1,"1349":2,"1350":2,"1359":10,"1372":2,"1380":4,"1395":6,"1396":3,"1402":4,"1417":13,"1431":1,"1436":10,"1496":1,"1526":1,"1543":1,"1544":1,"1549":1,"1656":2,"1789":1,"1790":2,"1793":1,"1805":1,"2017":1,"2021":1,"2031":1,"2045":1,"2129":1,"2192":1,"2201":1,"2205":1,"2234":1}}],["synced",{"3":{"0":1,"1212":1,"1347":1,"1359":7,"1369":1,"1632":2,"1636":1}}],["sync",{"3":{"0":1,"209":1,"243":1,"273":1,"274":1,"399":1,"434":1,"483":1,"507":1,"509":1,"649":1,"650":1,"1117":1,"1212":1,"1220":1,"1229":1,"1237":1,"1270":2,"1286":6,"1300":1,"1311":2,"1323":1,"1324":8,"1339":4,"1342":1,"1347":2,"1350":16,"1358":1,"1359":16,"1362":1,"1369":4,"1395":2,"1396":4,"1402":1,"1416":1,"1417":1,"1427":1,"1436":3,"1438":3,"1480":1,"1496":2,"1526":2,"1535":1,"1544":1,"1549":1,"1560":1,"1577":2,"1629":2,"1630":1,"1631":1,"1635":1,"1636":1,"1638":1,"1639":1,"1660":1,"1669":1,"1673":1,"1833":1,"2085":1,"2138":1,"2159":1,"2161":1,"2222":1}}],["syntactically",{"3":{"1323":1,"1324":1,"1395":1}}],["syntactic",{"3":{"1191":1,"1204":1,"1500":1}}],["syntax",{"2":{"2045":1},"3":{"0":1,"136":2,"332":1,"981":1,"1184":1,"1214":2,"1237":1,"1247":3,"1259":1,"1262":1,"1264":1,"1270":1,"1271":1,"1286":7,"1300":3,"1309":5,"1311":2,"1316":1,"1323":3,"1324":8,"1339":1,"1350":1,"1395":1,"1417":4,"1436":5,"1438":1,"1455":1,"1486":1,"1493":1,"1640":1,"1928":1,"1991":1,"2045":1}}],["synthesis",{"3":{"1417":2}}],["synthesize",{"3":{"1417":1}}],["synthesizer",{"3":{"1417":2}}],["synthesizes",{"3":{"1300":1,"1396":1,"1488":1}}],["synthesized",{"3":{"1300":2,"1311":1,"1312":1,"1324":1,"1436":1}}],["synthesizing",{"3":{"109":1,"1300":1,"1312":2,"1438":1}}],["synthetictrafficheadername",{"3":{"827":1,"1339":3}}],["synthetictrafficsecret",{"2":{"827":1,"1467":1,"2025":1},"3":{"827":2,"1339":6,"1458":1,"1467":2,"2025":1}}],["synthetic",{"2":{"1458":2,"1468":1,"1470":1},"3":{"0":1,"173":1,"179":1,"572":1,"597":1,"598":1,"599":2,"825":2,"827":6,"1244":1,"1247":1,"1337":2,"1339":12,"1350":1,"1369":1,"1395":2,"1436":1,"1455":3,"1458":5,"1461":1,"1466":1,"1467":5,"1468":1,"1470":1,"1474":1,"1476":1,"1488":1,"1535":1,"1591":1,"1670":1}}],["systematically",{"3":{"1526":1,"1531":1}}],["systematic",{"3":{"1436":1,"1496":1,"1530":1,"1532":1}}],["systempreferred",{"3":{"1417":1}}],["systemprefersdark",{"2":{"273":1},"3":{"273":1,"1324":1,"2085":1}}],["systemprompt",{"2":{"1426":1},"3":{"1018":1,"1369":2,"1426":1,"1427":2}}],["systemnethttpclient",{"2":{"73":1},"3":{"73":1}}],["systems",{"3":{"0":1,"61":1,"689":1,"812":1,"1011":1,"1116":1,"1238":1,"1359":2,"1380":1,"1395":1,"1426":1,"1776":1,"1789":1,"1792":1,"1802":1,"1815":1,"1835":1,"1846":1,"1847":1,"1853":1,"1912":1,"2028":1,"2110":1,"2162":1,"2164":1,"2171":1,"2173":1,"2195":1,"2215":1,"2219":1,"2220":1,"2222":6,"2240":1}}],["system",{"0":{"1503":1,"1557":1,"1629":1,"1763":1,"1777":1},"1":{"1313":1,"1314":1,"1315":1,"1316":1,"1317":1,"1318":1,"1319":1,"1320":1,"1321":1,"1322":1,"1323":1},"2":{"72":1,"397":1,"471":1,"475":1,"476":1,"477":1,"591":1,"665":1,"681":1,"798":1,"800":1,"803":1,"804":1,"805":1,"960":1,"966":1,"1049":1,"1054":1,"1163":1,"1196":1,"1229":5,"1270":1,"1311":2,"1324":3,"1332":1,"1344":1,"1369":1,"1400":1,"1415":1,"1447":1,"1480":2,"1687":1,"2188":1},"3":{"0":4,"58":1,"72":1,"78":2,"79":1,"81":1,"125":1,"244":1,"259":1,"266":1,"274":1,"340":1,"349":2,"350":2,"351":1,"361":1,"397":3,"400":1,"413":1,"419":1,"427":1,"470":2,"471":1,"475":1,"476":1,"477":1,"517":1,"520":1,"536":1,"539":1,"591":1,"593":1,"607":2,"611":1,"612":1,"665":1,"681":1,"691":2,"696":1,"698":4,"699":1,"700":2,"702":3,"706":1,"717":1,"741":1,"765":1,"792":1,"798":1,"799":2,"800":1,"801":1,"803":1,"804":1,"805":3,"809":1,"810":1,"853":1,"899":1,"947":1,"948":1,"954":2,"960":1,"963":1,"964":1,"966":1,"980":3,"1013":1,"1018":5,"1035":1,"1049":1,"1050":1,"1054":1,"1058":1,"1082":1,"1090":1,"1091":4,"1099":1,"1115":1,"1134":1,"1140":1,"1142":1,"1145":1,"1154":1,"1155":1,"1157":1,"1163":1,"1185":1,"1192":2,"1196":1,"1202":2,"1203":2,"1212":3,"1213":3,"1216":2,"1221":1,"1223":1,"1227":1,"1229":17,"1231":1,"1235":1,"1237":34,"1241":1,"1247":59,"1249":1,"1253":2,"1259":19,"1264":1,"1270":25,"1271":5,"1274":1,"1275":2,"1286":67,"1287":1,"1293":1,"1294":1,"1300":81,"1301":11,"1302":1,"1309":24,"1310":7,"1311":49,"1312":8,"1313":2,"1318":2,"1323":41,"1324":94,"1325":1,"1332":1,"1333":2,"1339":24,"1340":1,"1342":1,"1344":2,"1350":14,"1359":71,"1366":3,"1369":13,"1370":1,"1380":7,"1381":1,"1395":39,"1396":62,"1400":1,"1402":6,"1403":1,"1414":1,"1415":29,"1416":8,"1417":68,"1422":1,"1424":1,"1426":1,"1427":20,"1431":1,"1435":3,"1436":124,"1438":3,"1439":1,"1441":3,"1443":6,"1447":1,"1449":1,"1453":1,"1455":3,"1457":1,"1458":3,"1465":2,"1467":6,"1474":1,"1476":1,"1480":3,"1488":2,"1492":2,"1496":6,"1499":1,"1523":1,"1526":1,"1534":1,"1535":1,"1537":1,"1549":1,"1550":1,"1553":1,"1559":1,"1565":1,"1566":1,"1570":1,"1571":1,"1572":2,"1574":1,"1577":2,"1581":1,"1582":1,"1583":1,"1588":1,"1591":2,"1595":1,"1596":1,"1597":1,"1629":1,"1630":4,"1631":2,"1632":31,"1633":1,"1636":1,"1638":3,"1639":3,"1641":31,"1660":1,"1662":1,"1664":1,"1666":1,"1669":1,"1670":1,"1687":1,"1708":1,"1748":1,"1752":1,"1763":1,"1765":3,"1769":1,"1770":2,"1772":1,"1776":1,"1777":1,"1788":1,"1794":1,"1795":1,"1796":3,"1799":1,"1801":1,"1802":1,"1812":1,"1813":1,"1831":1,"1835":1,"1836":2,"1844":1,"1851":1,"1869":2,"1888":1,"1889":3,"1892":1,"1893":2,"1899":1,"1907":2,"1916":1,"1921":1,"1922":1,"1932":1,"1951":1,"1952":1,"1974":3,"1976":2,"1977":1,"1979":2,"1989":1,"2004":1,"2008":1,"2025":1,"2031":1,"2038":1,"2039":1,"2065":1,"2069":2,"2081":3,"2093":1,"2115":1,"2123":1,"2157":2,"2158":4,"2170":1,"2173":1,"2178":1,"2188":2,"2195":1,"2197":1,"2198":1,"2199":1,"2205":1,"2211":1,"2222":2,"2229":1}}],["swipe",{"3":{"1324":1,"1416":1,"1417":2,"1669":1}}],["switchboards",{"3":{"1542":1}}],["switchgeneration",{"3":{"1396":2}}],["switchable",{"3":{"572":1,"578":1,"1417":1,"1648":1,"2056":1}}],["switching",{"3":{"265":1,"267":1,"415":1,"454":1,"733":1,"799":1,"882":1,"1247":1,"1276":1,"1286":3,"1300":2,"1311":2,"1323":1,"1324":1,"1369":1,"1390":1,"1395":2,"1416":1,"1417":2,"1427":1,"1436":2,"1662":1,"1854":1,"1897":1}}],["switchexpressionexception",{"3":{"1436":3}}],["switchexpressionfixture",{"3":{"1199":1,"1207":1,"1436":4}}],["switched",{"3":{"0":2,"235":1,"556":1,"667":1,"914":1,"930":1,"941":1,"1232":1,"1259":1,"1270":1,"1286":4,"1300":1,"1309":1,"1311":4,"1312":1,"1313":1,"1323":2,"1324":3,"1332":1,"1339":2,"1347":1,"1350":1,"1359":3,"1380":1,"1395":5,"1396":11,"1415":2,"1417":2,"1419":1,"1436":3,"1438":2,"1450":1,"1467":1,"1572":1,"1631":1,"1668":1,"1720":1,"1938":1,"1970":1,"2087":1,"2192":1}}],["switchers",{"3":{"1415":1}}],["switcher",{"3":{"0":1,"265":5,"266":1,"273":1,"1300":1,"1311":5,"1323":1,"1324":5,"1415":1,"1417":4,"1436":1,"1438":1,"1577":1,"1644":1,"1653":4,"1669":1,"2085":2,"2088":1}}],["switches",{"1":{"2083":1,"2084":1,"2085":1,"2086":1,"2087":1,"2088":1},"3":{"0":2,"109":1,"171":1,"179":1,"265":1,"432":1,"452":2,"609":1,"674":1,"684":1,"939":1,"1175":1,"1184":1,"1270":2,"1277":1,"1286":7,"1300":1,"1301":1,"1306":2,"1309":2,"1310":2,"1311":1,"1320":2,"1323":3,"1324":7,"1326":1,"1333":1,"1339":3,"1350":1,"1355":1,"1359":3,"1395":4,"1396":6,"1402":1,"1416":2,"1427":1,"1436":4,"1441":2,"1456":1,"1467":4,"1481":1,"1496":1,"1675":1,"1701":1,"1884":1,"1921":1,"2083":1,"2152":1,"2212":1}}],["switch",{"0":{"1288":1,"1724":1},"2":{"966":1,"1538":1},"3":{"0":8,"31":1,"32":1,"59":1,"142":1,"150":2,"164":1,"166":2,"171":1,"195":1,"243":2,"265":4,"267":1,"290":1,"295":3,"296":1,"299":1,"301":1,"302":1,"361":1,"440":1,"572":1,"576":1,"600":1,"602":1,"618":1,"644":1,"666":1,"674":1,"691":1,"819":1,"838":1,"879":1,"916":1,"963":1,"964":1,"965":1,"966":1,"1034":4,"1035":1,"1036":1,"1051":1,"1075":2,"1091":1,"1107":2,"1108":1,"1212":1,"1220":1,"1229":1,"1235":1,"1237":2,"1241":1,"1243":1,"1247":4,"1259":2,"1260":1,"1264":1,"1270":4,"1273":2,"1280":1,"1286":20,"1288":1,"1297":2,"1300":6,"1303":1,"1311":15,"1312":2,"1313":1,"1323":6,"1324":25,"1336":1,"1339":9,"1347":1,"1350":7,"1359":2,"1363":1,"1380":1,"1395":24,"1396":39,"1399":1,"1402":6,"1415":3,"1416":3,"1417":22,"1421":2,"1427":3,"1431":1,"1436":22,"1438":5,"1440":1,"1443":1,"1444":1,"1446":2,"1447":1,"1450":1,"1467":9,"1475":1,"1479":1,"1488":2,"1496":3,"1507":1,"1526":1,"1535":1,"1538":2,"1591":2,"1602":1,"1607":1,"1608":1,"1631":1,"1653":1,"1661":2,"1674":1,"1686":1,"1692":1,"1712":1,"1717":1,"1724":2,"1741":1,"1742":1,"1795":1,"1805":1,"1839":1,"1842":1,"1856":1,"1894":1,"1970":1,"1972":1,"2012":1,"2014":1,"2021":2,"2031":1,"2075":1,"2085":1,"2088":2,"2113":1,"2128":1,"2136":1,"2137":1,"2140":1,"2141":1,"2147":1,"2182":1,"2199":1}}],["swagger",{"3":{"1534":1}}],["swamping",{"3":{"714":1}}],["swallowing",{"0":{"1919":1},"3":{"230":1,"537":1,"897":1,"898":2,"901":1,"989":1,"1237":1,"1252":1,"1259":2,"1311":2,"1323":1,"1324":4,"1339":1,"1355":1,"1359":1,"1396":2,"1413":1,"1415":1,"1417":4,"1436":1,"1455":1,"1459":1,"1496":1,"1946":1,"2167":1}}],["swallow",{"3":{"0":1,"111":1,"255":1,"258":1,"517":1,"534":2,"536":1,"538":1,"896":1,"897":5,"898":2,"899":2,"901":1,"1247":6,"1259":5,"1270":1,"1301":1,"1309":1,"1311":2,"1323":1,"1324":2,"1339":1,"1359":2,"1389":1,"1395":3,"1396":6,"1402":4,"1415":2,"1417":5,"1438":2,"1665":1,"1919":2,"1933":1,"1934":1,"1940":1,"1946":1,"1949":1,"1950":1}}],["swallowed",{"3":{"0":1,"157":1,"400":1,"461":1,"854":1,"896":2,"897":3,"898":1,"901":1,"988":1,"1212":1,"1247":8,"1286":1,"1300":1,"1301":2,"1307":1,"1309":1,"1311":4,"1323":2,"1324":10,"1355":1,"1358":1,"1359":1,"1369":1,"1383":2,"1395":11,"1396":7,"1399":1,"1402":5,"1408":1,"1415":1,"1417":7,"1433":1,"1436":2,"1438":3,"1443":1,"1455":1,"1665":1,"1909":2,"1918":1,"1919":1,"2007":1,"2119":1,"2158":1}}],["swallows",{"3":{"0":2,"125":1,"195":1,"230":1,"759":1,"897":1,"988":1,"1259":1,"1263":1,"1270":1,"1275":1,"1286":2,"1300":2,"1309":1,"1311":2,"1324":6,"1359":1,"1395":1,"1396":3,"1402":3,"1415":1,"1416":1,"1417":6,"1431":1,"1436":3,"1438":1,"1665":1,"1933":1,"1949":2}}],["swapping",{"3":{"0":2,"54":1,"472":1,"478":1,"798":1,"799":1,"1212":1,"1259":1,"1286":2,"1300":1,"1301":1,"1312":1,"1323":1,"1324":4,"1359":2,"1361":1,"1369":1,"1378":1,"1396":3,"1415":1,"1420":1,"1436":2,"1438":1,"1793":1,"1825":1,"1902":2,"2018":1,"2075":1,"2081":1,"2152":1}}],["swappable",{"1":{"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1},"3":{"0":1,"240":1,"1212":1,"1248":1,"1259":1,"1270":1,"1286":4,"1309":1,"1324":3,"1359":3,"1396":3,"1417":4,"1427":1,"1436":2,"1668":1,"2234":1}}],["swapped",{"3":{"0":3,"244":1,"380":1,"499":1,"636":1,"800":1,"803":1,"1259":3,"1300":1,"1311":1,"1324":1,"1350":1,"1359":2,"1396":1,"1402":1,"1436":4,"1496":1,"1684":1,"1736":1,"1902":2,"1982":1,"2027":1,"2180":1}}],["swaps",{"3":{"0":4,"178":1,"225":1,"434":1,"440":1,"633":1,"832":2,"881":1,"1018":1,"1212":2,"1239":1,"1286":1,"1300":1,"1307":1,"1311":3,"1316":1,"1323":1,"1324":2,"1339":1,"1359":2,"1378":1,"1380":1,"1383":1,"1395":4,"1396":5,"1413":1,"1415":2,"1417":2,"1431":1,"1436":1,"1438":1,"1440":1,"1467":1,"1477":1,"1488":1,"1492":1,"1526":1,"1936":1,"1948":1,"1972":1,"1975":1,"1979":1,"2014":1,"2077":1,"2121":1,"2125":1,"2128":1}}],["swap",{"3":{"0":3,"31":1,"68":1,"150":1,"241":1,"243":2,"244":1,"247":1,"253":1,"257":1,"259":2,"261":1,"265":1,"350":1,"454":1,"632":1,"651":1,"664":1,"732":1,"801":1,"1018":2,"1019":1,"1075":1,"1076":1,"1077":1,"1079":1,"1090":1,"1091":1,"1092":2,"1142":1,"1212":2,"1247":1,"1257":1,"1259":1,"1286":2,"1288":1,"1301":1,"1309":2,"1311":1,"1312":1,"1323":5,"1324":2,"1339":1,"1369":1,"1380":1,"1396":7,"1413":1,"1415":1,"1417":1,"1427":3,"1435":1,"1436":5,"1438":1,"1442":1,"1474":1,"1492":1,"1534":1,"1553":1,"1571":1,"1577":4,"1586":1,"1724":1,"1727":1,"1765":1,"1790":1,"1791":1,"1803":1,"1847":1,"1849":1,"1853":1,"1916":2,"1922":1,"1933":1,"1979":1,"2029":1,"2034":1,"2061":1,"2077":1,"2080":1,"2113":1,"2130":1,"2152":2,"2179":1,"2234":1}}],["swelling",{"3":{"1395":1}}],["sweepdeadlettersasync",{"3":{"1436":1}}],["sweepharness",{"3":{"1199":2,"1207":1}}],["sweeper",{"3":{"853":1,"854":1,"1259":2,"1293":1,"1294":1,"1300":3,"1324":1,"1415":2,"1641":1,"1667":1,"1765":1}}],["sweeping",{"3":{"148":1,"284":1,"1300":1,"1324":1,"1359":1,"1406":1,"1415":1,"1961":1,"2198":1}}],["sweeps",{"3":{"0":2,"24":1,"145":1,"635":1,"788":1,"793":1,"839":1,"937":1,"1212":2,"1259":2,"1276":2,"1278":1,"1284":1,"1286":6,"1300":1,"1313":1,"1317":1,"1323":1,"1359":1,"1438":3,"1490":1,"1492":1,"1526":1,"1585":1,"1661":1,"1664":2,"1731":2,"1764":1,"1845":1}}],["sweep",{"0":{"539":1,"2169":1},"3":{"0":9,"24":1,"27":1,"123":1,"135":1,"146":1,"147":3,"148":1,"149":1,"151":1,"187":2,"245":2,"246":1,"254":1,"257":1,"258":1,"260":1,"267":1,"369":1,"465":1,"497":1,"534":6,"536":7,"537":2,"538":3,"539":9,"540":2,"541":4,"574":1,"579":1,"634":1,"696":1,"707":2,"713":1,"715":2,"720":1,"725":1,"733":1,"737":1,"739":1,"741":2,"743":2,"744":1,"760":1,"780":1,"782":1,"789":1,"792":1,"794":1,"798":1,"799":1,"802":1,"809":6,"810":5,"812":2,"813":3,"814":1,"815":2,"891":1,"903":2,"905":9,"906":1,"907":2,"909":1,"941":2,"942":1,"955":1,"1003":1,"1004":1,"1016":1,"1018":1,"1022":1,"1036":1,"1041":1,"1042":1,"1044":1,"1074":1,"1075":1,"1084":1,"1118":1,"1212":1,"1256":2,"1259":8,"1264":1,"1270":2,"1273":1,"1275":2,"1276":2,"1286":34,"1290":4,"1300":8,"1311":2,"1316":1,"1317":1,"1318":1,"1323":8,"1324":2,"1359":3,"1367":2,"1368":1,"1369":1,"1395":2,"1396":4,"1436":7,"1438":5,"1459":1,"1460":2,"1461":1,"1467":1,"1475":5,"1483":1,"1485":1,"1489":1,"1490":1,"1492":1,"1496":33,"1500":1,"1526":1,"1576":2,"1577":3,"1585":1,"1591":2,"1600":3,"1648":1,"1654":1,"1664":1,"1672":1,"1693":1,"1737":1,"1765":3,"1844":2,"1845":1,"1948":1,"1959":1,"1960":1,"1965":2,"1982":1,"1984":2,"2056":1,"2114":1,"2117":1,"2163":1,"2167":1,"2168":2,"2169":9,"2170":9,"2171":2,"2185":1,"2192":1,"2217":1,"2234":1}}],["swept",{"3":{"0":2,"78":1,"249":1,"633":1,"905":1,"1004":1,"1077":1,"1256":1,"1277":1,"1286":2,"1290":1,"1300":2,"1333":1,"1359":2,"1436":1,"1441":1,"1455":1,"1465":1,"1531":1,"1569":1,"1735":1,"1736":1,"1785":1,"1984":1,"2114":1}}],["se",{"3":{"1686":1}}],["seq",{"2":{"760":1},"3":{"760":1}}],["sequencing",{"0":{"1617":1},"3":{"127":1,"151":1,"383":1,"518":1,"1100":1,"1359":1,"1395":1,"1467":1,"1944":1}}],["sequenceequal",{"2":{"1902":1},"3":{"1286":1,"1300":1,"1436":1,"1902":1}}],["sequenced",{"3":{"1191":1,"1323":1,"1436":2}}],["sequences",{"3":{"0":1,"126":1,"127":1,"1262":1,"1323":1,"1396":1,"1423":1,"1436":2,"1826":2}}],["sequence",{"0":{"1824":1,"1839":1,"2097":1},"3":{"0":3,"57":1,"115":1,"117":2,"119":1,"121":2,"122":1,"127":1,"256":1,"279":1,"281":1,"283":1,"459":1,"523":1,"560":1,"572":3,"633":1,"651":1,"698":1,"715":1,"733":1,"749":1,"750":1,"751":1,"838":1,"1069":1,"1100":2,"1145":1,"1212":1,"1232":1,"1237":5,"1259":4,"1262":4,"1270":7,"1286":5,"1289":1,"1300":4,"1301":1,"1309":2,"1311":7,"1316":2,"1323":8,"1324":4,"1339":2,"1343":1,"1350":1,"1359":22,"1395":8,"1396":2,"1399":1,"1402":3,"1415":3,"1416":4,"1417":1,"1427":1,"1436":17,"1438":2,"1441":1,"1452":1,"1455":1,"1463":1,"1467":1,"1473":1,"1474":1,"1478":1,"1488":1,"1489":1,"1577":1,"1591":1,"1631":1,"1653":2,"1656":1,"1658":1,"1685":1,"1727":1,"1779":1,"1824":3,"1825":1,"1826":3,"1838":1,"1839":1,"1878":1,"1881":1,"1883":1,"1886":1,"1905":1,"1915":1,"1941":1,"2001":1,"2093":1,"2097":2,"2098":1,"2100":2,"2109":1,"2198":1}}],["sequentially",{"3":{"1":1,"122":1,"538":1,"727":1,"759":1,"914":1,"916":1,"1263":1,"1271":1,"1278":1,"1310":1,"1322":1,"1339":1,"1359":3,"1415":2,"1429":1,"1436":2,"1488":1,"1821":1,"1852":1,"2170":1}}],["sequential",{"3":{"0":1,"122":1,"286":1,"470":1,"477":1,"537":1,"690":1,"798":1,"987":1,"988":1,"992":1,"1116":1,"1233":1,"1237":2,"1263":1,"1270":2,"1271":1,"1286":4,"1292":1,"1300":1,"1322":1,"1342":1,"1350":1,"1359":8,"1369":1,"1395":2,"1396":5,"1402":1,"1415":4,"1436":2,"1438":1,"1455":2,"1577":1,"1631":2,"1664":1,"1840":1,"1845":1,"2002":1,"2166":1,"2171":1}}],["segoe",{"3":{"1324":2,"2077":1}}],["segregation",{"3":{"1212":1,"1237":2,"1259":1,"1260":1,"1270":3,"1278":1,"1286":3,"1291":1,"1300":7,"1309":2,"1311":3,"1323":1,"1324":2,"1359":5,"1380":1,"1395":4,"1396":1,"1415":1,"1417":1,"1427":1}}],["segregated",{"3":{"545":1,"1272":1,"1278":1,"1311":1,"1359":1}}],["segmentversionedprobecontroller",{"3":{"1199":3,"1207":1}}],["segmented",{"3":{"178":1}}],["segment",{"3":{"0":1,"123":1,"135":1,"139":1,"178":1,"246":1,"333":1,"446":1,"447":1,"450":1,"470":1,"477":1,"549":1,"607":1,"635":1,"741":1,"798":1,"827":1,"1004":3,"1006":2,"1050":2,"1115":1,"1116":2,"1118":1,"1124":1,"1126":2,"1228":1,"1229":4,"1241":3,"1247":13,"1267":1,"1270":3,"1285":1,"1286":14,"1300":8,"1301":1,"1311":9,"1321":1,"1323":2,"1324":10,"1339":6,"1342":1,"1350":1,"1359":2,"1365":1,"1369":3,"1396":1,"1415":5,"1436":21,"1467":1,"1477":1,"1666":1,"1730":1,"1810":1,"1856":1,"1920":2,"2044":3,"2045":1,"2131":1,"2132":1,"2134":1,"2135":1,"2151":1}}],["segments",{"3":{"0":1,"333":1,"549":1,"599":1,"1228":1,"1229":3,"1241":2,"1247":4,"1270":2,"1286":1,"1300":1,"1311":4,"1324":4,"1337":1,"1339":2,"1436":2,"1467":2}}],["segmentsperwindow",{"2":{"178":1},"3":{"0":1,"178":1,"1311":5}}],["sesion",{"3":{"265":1}}],["session→400",{"3":{"1611":1}}],["sessionpresent",{"3":{"1396":1}}],["sessionprefix",{"3":{"1309":3}}],["sessionvalidationservice",{"3":{"1396":1}}],["sessionvalidationrules",{"3":{"1207":9,"1271":2,"1359":28,"1496":1}}],["sessionvalidationrulestests",{"3":{"1199":1,"1207":4,"1359":4}}],["sessionqa",{"2":{"1630":1,"1632":1},"3":{"1396":3,"1402":2,"1630":1,"1632":1}}],["sessionquestionid",{"3":{"1396":3,"1402":5,"1630":1}}],["sessionquestionidentifiertype",{"3":{"1396":4,"1402":16,"1415":1}}],["sessionquestioninvariants",{"2":{"1398":1},"3":{"1199":9,"1203":1,"1207":2,"1396":3,"1398":2,"1399":2,"1402":17}}],["sessionquestionlifecycletests",{"3":{"1199":1,"1207":2}}],["sessionquestionconfiguration",{"3":{"1199":2,"1203":1,"1207":2,"1396":5,"1402":3}}],["sessionquestionchannel",{"2":{"1402":1},"3":{"1199":10,"1203":1,"1207":2,"1399":2,"1402":29}}],["sessionquestionchanged",{"2":{"782":1,"1398":1},"3":{"690":1,"782":1,"1199":5,"1203":1,"1207":2,"1396":4,"1398":1,"1402":11}}],["sessionquestiontests",{"3":{"1199":1,"1207":2}}],["sessionquestionviewbuilder",{"2":{"1401":1,"1534":1},"3":{"1199":6,"1203":1,"1207":2,"1286":1,"1396":2,"1401":2,"1402":11,"1436":1,"1534":1}}],["sessionquestion",{"2":{"1397":1,"1398":1},"3":{"1199":24,"1203":1,"1207":2,"1350":1,"1396":11,"1397":2,"1398":6,"1402":46,"1415":1,"1436":2,"1438":1,"1487":1,"1496":2,"1630":1}}],["sessionquestiondto",{"2":{"1398":1},"3":{"1199":20,"1203":1,"1207":2,"1396":4,"1398":2,"1402":39}}],["sessionquestiondismissedpayload",{"3":{"1199":2,"1203":1,"1207":2,"1402":5}}],["sessionquestionpendingcountchangedpayload",{"2":{"1402":1},"3":{"1199":4,"1203":1,"1207":2,"1402":9}}],["sessionquestionapprovedpayload",{"2":{"1399":1},"3":{"1199":4,"1203":1,"1207":2,"1399":1,"1402":10}}],["sessionquestionanswerid",{"3":{"1350":1,"1359":8}}],["sessionquestionansweridentifiertype",{"3":{"1350":3,"1359":4,"1395":3,"1396":1}}],["sessionquestionanswerconfiguration",{"2":{"1362":1},"3":{"1199":1,"1203":1,"1207":2,"1359":1,"1362":4,"1369":5,"1396":1}}],["sessionquestionanswerchanged",{"2":{"1345":1,"1631":1,"1634":1},"3":{"1199":3,"1203":1,"1207":2,"1345":1,"1350":5,"1359":2,"1631":1,"1634":1}}],["sessionquestionanswertests",{"3":{"1199":1,"1207":2}}],["sessionquestionanswernavigationpopulatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionquestionanswernavigationpopulator",{"3":{"1199":2,"1203":1,"1207":2,"1359":5}}],["sessionquestionanswerrules",{"3":{"1199":4,"1203":1,"1207":2,"1350":4,"1352":1,"1359":38}}],["sessionquestionanswerdtomappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionquestionanswerdtomapper",{"3":{"1199":11,"1203":1,"1207":2,"1359":8}}],["sessionquestionanswerdto",{"2":{"1347":1},"3":{"1199":16,"1203":1,"1207":2,"1347":1,"1350":9,"1359":3,"1380":1,"1395":4,"1396":5}}],["sessionquestionansweredpayload",{"3":{"1199":2,"1203":1,"1207":2,"1402":7}}],["sessionquestionanswer",{"2":{"1342":1,"1638":1,"1639":1,"1640":1},"3":{"1198":1,"1199":21,"1203":1,"1207":2,"1342":2,"1350":11,"1359":20,"1369":3,"1380":1,"1630":1,"1631":5,"1632":1,"1634":2,"1635":3,"1637":1,"1638":7,"1639":5,"1640":6}}],["sessionquestionanswers",{"2":{"1115":1,"1343":1,"1363":1},"3":{"1115":1,"1343":1,"1350":5,"1359":18,"1363":1,"1369":2,"1380":3,"1395":3,"1396":2,"1447":1,"1630":2,"1631":1,"1632":1,"1635":1,"1638":1,"1639":4}}],["sessionquestionanswerscontrollertests",{"3":{"1199":1,"1207":2}}],["sessionquestionanswerscontroller",{"2":{"325":1,"1371":1,"1373":1,"1639":1},"3":{"325":3,"326":1,"743":1,"1199":3,"1203":1,"1207":6,"1239":1,"1247":3,"1300":2,"1311":4,"1350":1,"1359":32,"1371":2,"1372":4,"1373":2,"1374":3,"1380":30,"1396":2,"1496":1,"1639":1,"1996":1}}],["sessionquestionupvoteidentifiertype",{"3":{"1402":1}}],["sessionquestionupvoteinvariants",{"3":{"1199":2,"1203":1,"1207":2,"1402":4}}],["sessionquestionupvotes",{"3":{"1396":1,"1630":1}}],["sessionquestionupvoteconfiguration",{"3":{"1199":2,"1203":1,"1207":2,"1286":1,"1396":4,"1402":1}}],["sessionquestionupvotechangedpayload",{"3":{"1199":4,"1203":1,"1207":2,"1396":2,"1402":7}}],["sessionquestionupvotechangedhandlertests",{"3":{"1199":1,"1207":3,"1438":1}}],["sessionquestionupvotechangedhandler",{"2":{"522":1,"1100":1,"1399":1},"3":{"522":2,"897":2,"900":1,"1100":2,"1199":2,"1203":1,"1207":2,"1247":1,"1396":3,"1399":7,"1402":11,"1496":2}}],["sessionquestionupvotechanged",{"2":{"383":1,"522":1,"1100":1,"1399":1},"3":{"383":1,"1199":5,"1203":1,"1207":2,"1399":1,"1402":10}}],["sessionquestionupvotetests",{"3":{"1199":1,"1207":2}}],["sessionquestionupvote",{"2":{"1398":1,"1402":1},"3":{"1199":17,"1203":1,"1207":2,"1396":6,"1398":1,"1402":27,"1496":1,"1630":1}}],["sessionquestionuiservicetests",{"3":{"1199":1,"1207":2}}],["sessionquestionuiservice",{"2":{"1192":1},"3":{"881":1,"1192":1,"1199":2,"1203":1,"1207":2,"1300":6,"1396":7,"1402":1}}],["sessionquestionscontrollertests",{"3":{"1199":1,"1207":3}}],["sessionquestionscontroller",{"2":{"1874":1},"3":{"1199":3,"1203":1,"1207":2,"1311":2,"1380":1,"1396":3,"1402":30,"1496":1,"1526":1,"1874":1}}],["sessionquestionsubmittedpointshandlertests",{"3":{"782":1,"1199":1,"1207":3,"1396":1}}],["sessionquestionsubmittedpointshandler",{"3":{"690":1,"692":1,"782":1,"1199":2,"1203":1,"1207":2,"1237":1,"1396":10,"1402":2}}],["sessionquestions",{"2":{"1402":2,"2112":1},"3":{"493":1,"494":1,"495":1,"522":3,"523":2,"524":1,"897":1,"996":1,"1100":3,"1203":34,"1207":102,"1247":4,"1270":1,"1286":1,"1309":1,"1359":1,"1396":19,"1397":1,"1398":3,"1399":3,"1401":3,"1402":92,"1436":3,"1438":1,"1447":1,"1496":1,"1632":3,"2112":1}}],["sessionmatchesscoretier",{"3":{"1395":1}}],["sessionmatchesstatus",{"3":{"1395":2}}],["sessionmatchesfilters",{"3":{"1395":1}}],["sessionmappingonlydbcontext",{"3":{"1199":1,"1207":1}}],["sessionget",{"3":{"1324":1}}],["sessionnotinevent",{"3":{"1402":1}}],["sessionnotfound",{"3":{"905":1,"1300":2,"1359":1,"1395":1}}],["sessionnavigationpopulatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionnavigationpopulator",{"3":{"1199":2,"1203":1,"1207":2,"1310":2,"1354":1,"1359":11}}],["sessionbstatus",{"3":{"1350":1}}],["sessionbtitle",{"3":{"1350":1}}],["sessionbid",{"3":{"1350":1}}],["sessionbuilder",{"3":{"1199":29,"1207":2,"1436":1}}],["sessionbookmarkcount",{"3":{"1396":1}}],["sessionbookmarks",{"3":{"1396":5}}],["sessionbookmarksgrpcservicetests",{"3":{"1199":1,"1207":2,"1438":1}}],["sessionbookmarksgrpcservice",{"2":{"1378":1},"3":{"1199":2,"1203":1,"1207":2,"1312":6,"1350":1,"1359":2,"1378":4,"1380":6,"1396":1}}],["sessionbookmarkvalidationserviceclient",{"3":{"1380":1}}],["sessionbookmarkvalidationservicebase",{"3":{"1380":1}}],["sessionbookmarkvalidationservicetests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionbookmarkvalidationservice",{"3":{"1199":6,"1203":1,"1207":2,"1350":2,"1355":4,"1359":9,"1380":3}}],["sessionbookmarkvalidationservicegrpcadaptertests",{"2":{"1199":1},"3":{"1199":1,"1207":2,"1438":1}}],["sessionbookmarkvalidationservicegrpcadapter",{"2":{"53":1,"1203":1,"1312":1,"1378":1,"1927":1},"3":{"53":1,"1199":2,"1203":1,"1207":2,"1312":4,"1350":1,"1378":4,"1380":8,"1927":1}}],["sessionbookmarkuiservicetests",{"3":{"1199":1,"1207":2,"1396":2,"1417":1}}],["sessionbookmarkuiservice",{"3":{"1199":2,"1203":1,"1207":2,"1396":14,"1417":1}}],["sessionbookmarkbuttontests",{"3":{"1199":1,"1207":2}}],["sessionbookmarkbutton",{"2":{"1391":1},"3":{"1199":2,"1203":1,"1207":2,"1391":3,"1395":6,"1396":4,"1496":1}}],["sessiontitlerequiredkey",{"3":{"1395":1}}],["sessiontitlerules",{"3":{"1199":3,"1203":1,"1207":1,"1271":1,"1353":1,"1359":5}}],["sessiontitle",{"3":{"1350":5,"1380":1,"1395":3,"1396":3}}],["sessiontests",{"3":{"1199":1,"1207":2}}],["sessiontokenresult",{"2":{"1298":1},"3":{"1199":9,"1203":1,"1207":1,"1298":1,"1300":10}}],["sessiontokenresponse",{"2":{"1298":1},"3":{"1199":5,"1203":1,"1207":1,"1298":1,"1300":6,"1968":1}}],["sessionevent",{"3":{"1369":1}}],["sessioneventidrules",{"3":{"1199":3,"1203":1,"1207":1,"1271":3,"1359":8,"1496":1}}],["sessionentityqueryservicetests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionentityqueryservice",{"3":{"1199":2,"1203":1,"1207":2,"1354":2,"1359":8}}],["sessioneditmodeltests",{"3":{"1199":1,"1207":2}}],["sessioneditmodel",{"3":{"1199":2,"1203":1,"1207":2,"1395":6}}],["sessionhandoff",{"2":{"1324":1},"3":{"1324":1}}],["sessionhandoffendpoints",{"3":{"1199":2,"1203":1,"1207":3,"1300":4,"1324":18,"1496":1}}],["sessionhandoffservicestests",{"3":{"1199":1,"1207":2,"1324":2,"1438":1}}],["sessionhandoffprotector",{"3":{"1184":1,"1199":7,"1203":1,"1207":3,"1324":17}}],["sessionformfields",{"3":{"1395":2}}],["sessionformmodel",{"2":{"1526":1},"3":{"1199":4,"1203":1,"1207":2,"1350":2,"1384":2,"1395":14,"1526":2,"1531":1,"1532":1,"1535":1}}],["sessionfieldrules",{"3":{"1199":3,"1203":1,"1207":1,"1353":1,"1359":21}}],["sessionfeedbackorganizer",{"2":{"1395":1},"3":{"1395":2}}],["sessionfeedbacktests",{"3":{"1199":1,"1207":2,"1396":1,"1438":1}}],["sessionfeedbackservicetests",{"3":{"1199":1,"1207":2,"1396":1}}],["sessionfeedbackservice",{"3":{"1199":2,"1203":1,"1207":2,"1396":6}}],["sessionfeedbacksubmittedpointshandlertests",{"3":{"1199":1,"1207":2,"1396":1}}],["sessionfeedbacksubmittedpointshandler",{"3":{"1199":2,"1203":1,"1207":2,"1259":1,"1350":2,"1359":2,"1396":8}}],["sessionfeedbacksubmitted",{"2":{"195":1,"1341":1,"1349":1,"1639":1},"3":{"195":1,"690":1,"1199":6,"1203":1,"1207":2,"1237":2,"1341":1,"1349":5,"1350":6,"1359":4,"1396":3,"1436":1,"1467":1,"1631":1,"1639":1}}],["sessionfeedbackdto",{"3":{"1199":10,"1203":1,"1207":4,"1347":2,"1350":12,"1359":3,"1380":1,"1395":3}}],["sessionfeedbackpage",{"3":{"1199":2,"1207":2}}],["sessionfeedback",{"2":{"692":1},"3":{"690":1,"692":1,"1199":5,"1203":1,"1207":2,"1344":1,"1350":1,"1395":2,"1396":38,"1526":1,"1531":1,"1534":1}}],["sessiondurationsorttests",{"3":{"1199":1,"1207":2}}],["sessiondtomappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessiondtomapper",{"3":{"1199":8,"1203":1,"1207":2,"1350":4,"1353":2,"1359":21}}],["sessiondtotests",{"3":{"1199":1,"1207":2}}],["sessiondto",{"3":{"1199":47,"1203":1,"1207":2,"1311":2,"1347":2,"1350":40,"1359":23,"1380":2,"1382":1,"1395":21,"1396":7,"1496":2,"1875":1}}],["sessiondescriptionrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":3}}],["sessiondetails",{"3":{"1395":2,"1396":1}}],["sessiondetailstaleloadtests",{"3":{"1199":1,"1207":2}}],["sessiondetailscheduletests",{"3":{"1199":1,"1207":2,"1438":1}}],["sessiondetailroomcachetests",{"3":{"1199":1,"1207":2,"1438":2}}],["sessiondetailcategorychiptests",{"3":{"1199":1,"1207":2}}],["sessiondetailpage",{"3":{"1199":10,"1207":2}}],["sessiondetail",{"3":{"1119":1,"1199":5,"1203":1,"1207":2,"1237":1,"1384":2,"1395":51,"1526":3,"1531":1,"1535":1}}],["sessiondeleted",{"2":{"781":1,"783":1},"3":{"781":1,"783":1}}],["sessionupdaterequestvalidatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionupdaterequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":13}}],["sessionupdaterequest",{"2":{"1875":1},"3":{"1199":5,"1203":1,"1207":2,"1359":10,"1380":1,"1875":1}}],["sessiononlycontextbase",{"3":{"1199":3,"1207":1}}],["sessionlookup",{"3":{"1396":1,"1402":1}}],["sessionlookups",{"3":{"1199":1,"1203":1,"1207":2,"1385":2,"1387":1,"1395":26}}],["sessionlookupservicetests",{"3":{"1199":1,"1207":2,"1396":2}}],["sessionlookupservice",{"2":{"1192":1},"3":{"1192":1,"1199":2,"1203":1,"1207":2,"1324":2,"1396":14,"1496":1}}],["sessionlevel",{"3":{"1350":2,"1359":1,"1395":1}}],["sessionlisturi",{"3":{"1380":2}}],["sessionlisteventfiltertests",{"3":{"1199":1,"1207":2,"1436":1}}],["sessionlistcurrenteventclocktests",{"3":{"1199":1,"1207":3,"1438":1}}],["sessionlist",{"3":{"1199":3,"1203":1,"1207":2,"1324":4,"1350":2,"1383":2,"1385":1,"1395":22}}],["sessionlistpage",{"3":{"1199":3,"1207":2,"1436":1}}],["sessionlivemoderationpaneltests",{"3":{"1199":1,"1207":2}}],["sessionlivemoderationpanel",{"2":{"1401":1},"3":{"1199":3,"1203":1,"1207":3,"1396":4,"1401":1,"1402":16,"1531":1}}],["sessionliveurlrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":5}}],["sessionliveuiservice",{"2":{"1192":1,"1401":1},"3":{"1192":1,"1199":1,"1203":1,"1207":2,"1396":6,"1401":2,"1402":2}}],["sessionlivequestionpanel",{"2":{"1401":1},"3":{"1199":3,"1203":1,"1207":2,"1396":2,"1401":1,"1402":10}}],["sessionlivequestionpaneltests",{"3":{"954":1,"960":1,"1199":1,"1207":2}}],["sessionlivepollpaneltests",{"3":{"1199":1,"1207":2}}],["sessionlivepollpanel",{"2":{"1401":1},"3":{"1199":3,"1203":1,"1207":2,"1395":1,"1396":1,"1401":1,"1402":7}}],["sessionliveinfo",{"3":{"1199":23,"1203":1,"1207":2,"1349":1,"1350":9,"1359":1,"1378":1,"1380":3,"1402":10,"1496":1}}],["sessionlive",{"2":{"1397":1},"3":{"556":3,"881":1,"954":1,"960":1,"1192":1,"1199":2,"1203":17,"1207":46,"1300":5,"1395":1,"1396":44,"1397":4,"1400":5,"1401":9,"1402":36,"1436":1,"1496":3,"1526":1,"1531":1,"1534":1}}],["sessionroomfiltertests",{"3":{"1199":1,"1207":2,"1247":1,"1438":2}}],["sessionroomschedulingtests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionroomscheduling",{"2":{"1359":1,"1534":1},"3":{"545":1,"551":1,"1199":4,"1203":1,"1207":2,"1352":7,"1359":15,"1496":2,"1534":1}}],["sessionretrievalfailed",{"2":{"1600":1},"3":{"1600":1}}],["sessionresult",{"3":{"1395":1,"1396":1}}],["sessionresourcelinksrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":3}}],["sessionrecordingurlrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":3}}],["sessionremindercoordinatortests",{"3":{"1199":1,"1207":2,"1396":1,"1417":1}}],["sessionremindercoordinator",{"3":{"1199":4,"1203":1,"1207":2,"1396":10,"1417":3}}],["sessionreminderplannertests",{"3":{"1199":1,"1207":2}}],["sessionreminderplanner",{"3":{"1199":4,"1203":1,"1207":3,"1396":16}}],["sessionreminder",{"3":{"1199":3,"1203":1,"1207":1,"1396":5}}],["sessionrefreshoutcome",{"3":{"1184":1,"1185":1,"1199":6,"1203":1,"1207":3,"1300":8,"1324":1,"1496":1}}],["sessionrefreshstatus",{"3":{"1184":1,"1199":5,"1203":1,"1207":1,"1300":6,"1324":1}}],["sessioncreationfailed",{"2":{"1600":1},"3":{"1600":1,"1770":1}}],["sessioncreaterequestvalidatortests",{"3":{"1199":1,"1207":2,"1359":4}}],["sessioncreaterequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":13}}],["sessioncreaterequestmappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessioncreaterequestmapper",{"3":{"1199":2,"1203":1,"1207":2,"1359":7}}],["sessioncreaterequest",{"2":{"1830":1},"3":{"1199":9,"1203":1,"1207":2,"1270":1,"1359":12,"1374":1,"1380":1,"1830":1}}],["sessioncreatetests",{"3":{"1199":1,"1207":2}}],["sessioncreatemodeltests",{"3":{"1199":1,"1207":2}}],["sessioncreatemodel",{"3":{"1199":3,"1203":1,"1207":2,"1395":6}}],["sessioncreatepage",{"3":{"1199":12,"1207":2}}],["sessioncreated",{"2":{"781":1,"783":1},"3":{"781":1,"783":1,"1259":1,"1631":1,"1632":2,"1634":3}}],["sessioncreatedhandler",{"2":{"780":1},"3":{"780":1}}],["sessioncreate",{"3":{"128":1,"1199":2,"1203":1,"1207":2,"1395":25,"1526":2,"1532":1,"1535":2}}],["sessioncleanuptestcontext",{"3":{"1199":2,"1207":1}}],["sessionclaimstokentests",{"3":{"1199":1,"1207":2,"1300":1,"1438":1}}],["sessionclaimstoken",{"2":{"1968":1},"3":{"1184":2,"1185":1,"1199":5,"1203":1,"1207":2,"1300":6,"1324":2,"1496":1,"1968":1}}],["sessioncount",{"3":{"1350":1}}],["sessioncommandvalidatortests",{"3":{"1207":4,"1359":4}}],["sessionconfiguration",{"2":{"1361":1},"3":{"1082":1,"1199":1,"1203":1,"1207":2,"1350":1,"1359":2,"1361":2,"1362":7,"1369":6,"1496":1}}],["sessioncookieauthenticationextensions",{"2":{"1298":1},"3":{"1199":1,"1203":1,"1207":1,"1298":1,"1300":2}}],["sessioncookieauthenticationhandlertests",{"3":{"1199":1,"1207":2,"1300":1}}],["sessioncookieauthenticationhandler",{"2":{"207":1,"209":1,"1287":1,"1298":1,"1300":1,"1968":1,"1971":1,"1972":1},"3":{"0":1,"207":1,"209":1,"1199":3,"1203":1,"1207":3,"1208":1,"1287":1,"1298":7,"1300":14,"1416":1,"1968":1,"1971":1,"1972":1}}],["sessioncookierequest",{"2":{"1298":1},"3":{"1199":4,"1203":1,"1207":1,"1298":1,"1300":4}}],["sessioncookieendpointstests",{"3":{"1199":1,"1207":3,"1300":1}}],["sessioncookieendpoints",{"2":{"1298":1,"1968":1},"3":{"980":1,"1198":1,"1199":17,"1203":1,"1207":3,"1208":1,"1287":1,"1298":8,"1300":20,"1324":3,"1968":1}}],["sessioncookie",{"3":{"207":1,"1300":2,"1968":1}}],["sessioncookiesync",{"3":{"1324":4}}],["sessioncookiestore",{"3":{"1199":1,"1203":1,"1207":1,"1300":4,"1311":2,"1496":1}}],["sessioncookiesamesite",{"3":{"1184":2,"1300":1,"1324":2}}],["sessioncookiesettings",{"2":{"1184":1,"1968":2},"3":{"1184":3,"1199":8,"1203":1,"1207":2,"1300":10,"1311":2,"1324":3,"1496":1,"1968":2}}],["sessioncookies",{"3":{"207":1,"980":1,"1108":1,"1183":2,"1184":3,"1203":18,"1207":64,"1208":3,"1298":6,"1300":68,"1311":1,"1324":1,"1438":2,"1496":1,"1582":1,"1968":1}}],["sessioncookiejartests",{"3":{"1199":1,"1207":2,"1300":1}}],["sessioncookiejar",{"2":{"207":1},"3":{"207":1,"1108":1,"1198":1,"1199":5,"1203":1,"1207":2,"1298":4,"1300":15,"1534":1,"1968":1}}],["sessioncategories",{"3":{"1350":2,"1395":1}}],["sessioncategoryitemid",{"3":{"1350":1,"1359":5}}],["sessioncategoryitemidentifiertype",{"3":{"1350":3,"1359":4,"1395":3}}],["sessioncategoryitemconfiguration",{"2":{"1362":1},"3":{"1199":1,"1203":1,"1207":2,"1362":2,"1369":6}}],["sessioncategoryitemchanged",{"2":{"1345":1,"1631":1,"1634":1},"3":{"1199":4,"1203":1,"1207":2,"1345":1,"1350":6,"1359":1,"1631":1,"1634":1}}],["sessioncategoryitemtests",{"3":{"1199":1,"1207":2}}],["sessioncategoryitemnavigationpopulatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessioncategoryitemnavigationpopulator",{"3":{"1199":2,"1203":1,"1207":2,"1359":10}}],["sessioncategoryitemdtomappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessioncategoryitemdtomapper",{"3":{"1199":9,"1203":1,"1207":2,"1359":9}}],["sessioncategoryitemdto",{"3":{"1199":10,"1203":1,"1207":2,"1347":1,"1350":10,"1359":2,"1380":1,"1395":4}}],["sessioncategoryitem",{"2":{"1342":1},"3":{"1198":1,"1199":17,"1203":1,"1207":2,"1237":2,"1342":3,"1350":12,"1359":16,"1369":3,"1380":1,"1395":2,"1630":1,"1631":1,"1632":2,"1634":2,"1635":3,"1637":1,"1638":3,"1639":3}}],["sessioncategoryitemscontrollertests",{"3":{"1199":1,"1207":2}}],["sessioncategoryitemscontroller",{"2":{"1371":1,"1372":1},"3":{"1199":3,"1203":1,"1207":3,"1350":2,"1359":22,"1371":2,"1372":2,"1373":2,"1374":1,"1380":17}}],["sessioncategoryitemservice",{"2":{"1386":1},"3":{"1199":2,"1203":1,"1207":1,"1324":1,"1386":1,"1395":4}}],["sessioncategoryitems",{"2":{"1115":1,"1363":1},"3":{"1115":1,"1324":1,"1350":3,"1359":14,"1363":1,"1369":2,"1380":2,"1395":1,"1447":1,"1630":2,"1631":1,"1632":2,"1635":2,"1638":1,"1639":2}}],["sessioncalendarcontroller",{"2":{"1371":1,"1373":1,"1375":1},"3":{"1199":1,"1203":1,"1207":2,"1371":2,"1373":2,"1375":3,"1380":6,"1436":1,"1496":1,"1535":1}}],["sessioncapexceeded",{"3":{"905":2,"1290":1,"1300":1,"1982":1}}],["sessioncancelled",{"2":{"785":1},"3":{"785":1}}],["sessionchanged",{"2":{"781":1,"783":1},"3":{"781":1,"782":3,"783":1,"1199":3,"1203":1,"1207":2,"1259":1,"1345":3,"1350":12,"1359":1,"1631":1,"1634":1}}],["sessioncheckin",{"2":{"691":1,"692":1},"3":{"690":1,"691":1,"692":1,"1396":5,"1415":1}}],["sessionissuer",{"3":{"1300":8}}],["sessionincludechildrenregressiontests",{"3":{"1199":1,"1207":2,"1526":3}}],["sessioninvariantstests",{"3":{"1199":1,"1207":2}}],["sessioninvariants",{"2":{"1344":1,"1362":1,"1364":1,"1395":1},"3":{"1199":24,"1203":1,"1207":2,"1237":1,"1344":10,"1350":28,"1352":1,"1355":1,"1359":55,"1362":1,"1364":1,"1369":8,"1395":2,"1396":2}}],["sessioninfo",{"3":{"1199":14,"1203":1,"1207":1,"1396":12,"1402":10}}],["sessionizeid",{"3":{"1639":1}}],["sessionizeintegration",{"2":{"1352":1,"2138":1},"3":{"1347":1,"1350":4,"1352":1,"1359":2,"2138":2}}],["sessionizemodels",{"3":{"1207":9,"1358":1,"1359":22}}],["sessionizerefreshtests",{"3":{"1199":1,"1207":2,"1359":1}}],["sessionizerefreshoutcome",{"2":{"1382":1,"1387":1},"3":{"1199":4,"1203":1,"1207":2,"1382":2,"1387":1,"1395":10,"1526":1}}],["sessionizeresponse",{"2":{"1365":1},"3":{"1199":13,"1203":1,"1207":1,"1358":1,"1359":10,"1365":1,"1369":3}}],["sessionizeroom",{"3":{"1199":5,"1203":1,"1207":1,"1358":1,"1359":3}}],["sessionizeservicetests",{"3":{"1199":1,"1207":2,"1438":1}}],["sessionizeservice",{"2":{"1365":1},"3":{"1199":3,"1203":1,"1207":2,"1350":1,"1359":4,"1365":8,"1369":5,"1496":1}}],["sessionizesession",{"3":{"1199":5,"1203":1,"1207":1,"1358":1,"1359":4}}],["sessionizesynccontext",{"3":{"1199":13,"1203":1,"1207":2,"1358":1,"1359":14}}],["sessionizesyncwarnings",{"3":{"1199":6,"1203":1,"1207":2,"1358":1,"1359":12,"1496":1}}],["sessionizesyncresult",{"3":{"1199":8,"1203":1,"1207":1,"1350":1,"1358":1,"1359":5}}],["sessionizespeaker",{"3":{"1199":5,"1203":1,"1207":1,"1358":1,"1359":5}}],["sessionizecodemaxlength",{"3":{"1350":2,"1359":1}}],["sessionizecode",{"2":{"1636":1},"3":{"1350":5,"1353":1,"1359":14,"1362":1,"1369":8,"1395":9,"1630":2,"1631":1,"1632":5,"1636":1}}],["sessionizecodeattribute",{"2":{"1384":1},"3":{"1199":1,"1203":1,"1207":2,"1384":3,"1395":4,"1526":1}}],["sessionizecodeformattests",{"3":{"1199":1,"1207":2,"1350":1,"1437":1}}],["sessionizecodeformat",{"2":{"1353":2,"1365":1,"1631":1},"3":{"1199":8,"1203":1,"1207":2,"1347":7,"1350":10,"1353":2,"1359":12,"1365":1,"1369":2,"1384":1,"1395":3,"1496":2,"1526":1,"1631":1}}],["sessionizecategory",{"3":{"1199":5,"1203":1,"1207":1,"1358":1,"1359":4}}],["sessionizecategoryitem",{"3":{"1199":4,"1203":1,"1207":1,"1358":1,"1359":13}}],["sessionizequestionanswer",{"3":{"1199":6,"1203":1,"1207":1,"1358":1,"1359":6}}],["sessionizequestion",{"3":{"1199":4,"1203":1,"1207":1,"1358":1,"1359":3}}],["sessionizelink",{"3":{"1199":3,"1203":1,"1207":1,"1358":1,"1359":5}}],["sessionize",{"0":{"1358":1,"1365":1},"2":{"1207":1,"1359":1},"3":{"0":1,"344":1,"353":1,"470":1,"477":1,"798":1,"988":1,"1004":1,"1115":2,"1116":2,"1117":1,"1192":1,"1202":1,"1203":12,"1207":22,"1212":1,"1286":3,"1342":9,"1343":3,"1344":3,"1347":6,"1350":72,"1351":1,"1352":4,"1353":2,"1355":1,"1358":7,"1359":148,"1360":1,"1362":1,"1364":4,"1365":3,"1368":1,"1369":25,"1371":1,"1375":2,"1380":10,"1382":1,"1395":28,"1436":3,"1437":2,"1438":2,"1487":2,"1489":1,"1496":1,"1534":1,"1629":4,"1630":27,"1631":30,"1632":18,"1633":3,"1635":1,"1636":6,"1637":3,"1638":5,"1639":48,"1640":3,"1641":14,"2138":1}}],["sessionid=",{"3":{"1395":3,"1396":4,"1402":2,"1631":1,"1640":1}}],["sessionids=",{"3":{"1395":1}}],["sessionids",{"3":{"1359":6,"1380":2,"1395":3,"1396":6}}],["sessionidentifiertype",{"2":{"472":1,"799":1,"1055":1},"3":{"472":1,"799":2,"1055":1,"1259":1,"1350":23,"1359":41,"1380":6,"1395":19,"1396":36,"1402":26,"1415":2}}],["sessionid",{"2":{"1052":1,"1055":1,"1357":1},"3":{"0":2,"690":3,"799":1,"905":3,"996":1,"1052":1,"1055":1,"1116":2,"1212":1,"1259":1,"1300":19,"1311":2,"1324":4,"1342":2,"1345":1,"1350":28,"1357":1,"1359":80,"1362":4,"1369":19,"1380":30,"1395":52,"1396":117,"1398":2,"1401":1,"1402":54,"1415":4,"1436":2,"1438":1,"1467":1,"1526":1,"1535":1,"1627":1,"1630":2,"1631":6,"1632":7,"1634":3,"1635":4,"1638":1,"1639":1,"1640":2,"1641":2}}],["sessionastatus",{"3":{"1350":1}}],["sessionassetmalwarescanning",{"3":{"1467":1}}],["sessionassetrequests",{"3":{"1207":2,"1389":2,"1395":6}}],["sessionassetvalidationrules",{"3":{"1207":6,"1286":2,"1350":3,"1353":1,"1359":7}}],["sessionassettests",{"3":{"1199":1,"1207":2,"1350":2}}],["sessionassettitlerules",{"3":{"1199":2,"1203":1,"1207":1,"1359":5}}],["sessionassetbuilder",{"3":{"1199":2,"1207":2}}],["sessionassetfixtures",{"3":{"1199":7,"1207":2}}],["sessionassetfieldrules",{"3":{"1199":4,"1203":1,"1207":1,"1353":1,"1359":11}}],["sessionassetfilenamerules",{"3":{"1199":2,"1203":1,"1207":1,"1359":3}}],["sessionasseturlrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":5}}],["sessionassetupdaterequestvalidatortests",{"3":{"1199":1,"1207":2}}],["sessionassetupdaterequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1350":1,"1359":6}}],["sessionassetupdaterequest",{"2":{"1389":1},"3":{"1199":12,"1203":2,"1207":3,"1359":10,"1380":1,"1389":1,"1395":4}}],["sessionassetdisplay",{"3":{"1199":3,"1203":1,"1207":2,"1389":3,"1395":6,"1496":1}}],["sessionassetdto",{"3":{"1199":19,"1203":1,"1207":2,"1347":3,"1350":23,"1359":5,"1380":1,"1395":7}}],["sessionassetdtomappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionassetdtomapper",{"2":{"3":1},"3":{"3":1,"1199":10,"1203":1,"1207":2,"1350":1,"1357":1,"1359":14}}],["sessionassetlinkrequestvalidatortests",{"3":{"1199":1,"1207":2}}],["sessionassetlinkrequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":7,"1395":2}}],["sessionassetlinkrequest",{"2":{"1389":1},"3":{"1199":13,"1203":2,"1207":3,"1359":12,"1380":1,"1389":1,"1395":8}}],["sessionassetlimits",{"2":{"1118":1,"1357":1,"1373":1,"1389":1},"3":{"1116":3,"1118":1,"1199":14,"1203":1,"1207":2,"1286":2,"1347":8,"1350":13,"1357":1,"1359":9,"1373":1,"1380":4,"1389":3,"1395":7}}],["sessionassetid",{"3":{"1350":2}}],["sessionassetidentifiertype",{"2":{"468":1,"470":1,"472":1,"477":1,"478":1,"798":1,"805":1,"1049":1,"1054":1},"3":{"468":1,"470":1,"472":1,"477":3,"478":1,"798":1,"805":1,"1049":1,"1054":1,"1212":1,"1350":3,"1359":4}}],["sessionassetinvariantstests",{"3":{"1199":1,"1207":2,"1350":2}}],["sessionassetinvariants",{"2":{"1344":1,"1369":1},"3":{"1116":2,"1199":11,"1203":1,"1207":2,"1344":7,"1350":6,"1359":9,"1369":5,"1496":1}}],["sessionassetkind",{"2":{"1342":1},"3":{"1116":1,"1199":14,"1203":1,"1207":2,"1342":3,"1350":12,"1395":3}}],["sessionassetcomposer",{"3":{"1199":2,"1203":1,"1207":2,"1389":2,"1395":5,"1496":1}}],["sessionassetconfiguration",{"2":{"1361":1},"3":{"1116":1,"1199":1,"1203":1,"1207":2,"1350":2,"1361":1,"1362":6,"1369":5,"1496":2}}],["sessionassetchanged",{"2":{"780":1,"1345":1},"3":{"780":1,"782":1,"1199":3,"1203":1,"1207":2,"1345":3,"1350":7,"1496":1}}],["sessionassetstests",{"3":{"1199":1,"1207":2}}],["sessionassetsortorderrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":7}}],["sessionassetsessionidrules",{"3":{"1199":3,"1203":1,"1207":1,"1359":6}}],["sessionassetservicetests",{"3":{"1199":1,"1207":2}}],["sessionassetservice",{"3":{"881":1,"1199":4,"1203":1,"1207":2,"1350":2,"1389":2,"1395":9,"1496":2}}],["sessionassetspaneltests",{"3":{"1199":1,"1207":2}}],["sessionassetspanelpage",{"3":{"1199":2,"1207":2}}],["sessionassetspanel",{"3":{"1116":1,"1199":2,"1203":1,"1207":2,"1350":4,"1389":4,"1395":18,"1496":2,"1526":1,"1531":1}}],["sessionassetscontrollertests",{"3":{"1199":1,"1207":2,"1380":1,"1487":1}}],["sessionassetscontroller",{"2":{"1373":1},"3":{"1116":4,"1199":3,"1203":1,"1207":2,"1350":2,"1359":13,"1371":2,"1373":4,"1380":3,"1436":2,"1496":2}}],["sessionassetsdownloadlisttests",{"3":{"1199":1,"1207":2}}],["sessionassetsdownloadlist",{"2":{"1116":1,"1389":1},"3":{"1116":1,"1199":2,"1203":1,"1207":2,"1350":1,"1389":3,"1395":11,"1496":1}}],["sessionassetsmanage",{"2":{"184":1},"3":{"184":1,"1350":5,"1373":2,"1380":2}}],["sessionassets",{"2":{"1004":1,"1207":1,"1357":1,"1380":1,"1395":1},"3":{"0":1,"536":2,"881":1,"1004":1,"1116":12,"1203":45,"1207":128,"1264":1,"1286":6,"1318":1,"1323":3,"1342":2,"1344":1,"1345":1,"1347":2,"1350":17,"1353":1,"1357":4,"1359":73,"1363":1,"1369":6,"1371":1,"1373":1,"1380":5,"1389":8,"1395":33,"1438":1,"1447":2,"1487":1,"1630":1,"1631":5,"1640":5}}],["sessionassetaccessservicetests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionassetaccessservice",{"2":{"552":1,"1116":1},"3":{"0":1,"552":1,"1116":4,"1199":3,"1203":1,"1207":2,"1350":3,"1357":3,"1359":9,"1496":1}}],["sessionasset",{"2":{"1114":1,"1116":1,"1346":1,"1347":1,"1357":1,"1389":4},"3":{"0":1,"1114":1,"1116":4,"1199":24,"1203":1,"1207":2,"1212":1,"1323":1,"1340":1,"1342":9,"1343":7,"1344":3,"1345":1,"1346":2,"1347":1,"1350":23,"1352":1,"1357":1,"1359":45,"1369":4,"1389":4,"1395":2,"1436":1,"1496":2}}],["sessionatitle",{"3":{"1350":1}}],["sessionattendance",{"3":{"1396":3}}],["sessionattendancerow",{"3":{"1199":2,"1203":1,"1207":1,"1396":4}}],["sessionattendancedto",{"3":{"1199":6,"1203":1,"1207":2,"1396":10}}],["sessionaid",{"3":{"1350":1}}],["sessionaiscoreconfiguration",{"3":{"1199":1,"1203":1,"1207":2,"1350":1,"1359":1,"1362":4,"1369":4,"1496":1}}],["sessionaiscoretests",{"3":{"1199":1,"1207":2}}],["sessionaiscoredto",{"3":{"1199":9,"1203":1,"1207":3,"1347":2,"1350":8,"1359":1,"1395":3,"1496":2}}],["sessionaiscoreidentifiertype",{"2":{"468":1,"477":1},"3":{"468":1,"477":1,"1350":1}}],["sessionaiscore",{"2":{"1018":2},"3":{"0":1,"1018":3,"1199":7,"1203":1,"1207":2,"1342":8,"1347":1,"1350":10,"1359":11,"1363":1,"1369":9,"1496":2}}],["sessionawareauthenticationservice",{"3":{"1199":2,"1207":1}}],["sessionaccessibilityinforules",{"3":{"1199":2,"1203":1,"1207":1,"1359":7}}],["sessionsnext",{"3":{"1396":1}}],["sessionsnow",{"3":{"1396":1}}],["sessionsnavrequiredrole",{"2":{"186":1,"190":1},"3":{"186":1,"190":1,"905":1,"909":1,"1324":1,"1627":1,"1761":1}}],["sessionsfailed",{"3":{"1350":1}}],["sessionsscored",{"3":{"1350":1,"1390":1,"1395":5}}],["sessionssynced",{"3":{"1350":1,"1359":1}}],["sessionsmanage",{"3":{"1350":2,"1359":8,"1373":1,"1380":4}}],["sessionsyncstrategytests",{"3":{"1199":1,"1207":2,"1359":1}}],["sessionsyncstrategy",{"3":{"1199":3,"1203":1,"1207":2,"1358":6,"1359":9,"1496":1}}],["sessionscachetag",{"3":{"1369":2,"1396":2}}],["sessionscache",{"3":{"1350":1,"1359":1,"1373":2,"1375":1,"1379":1,"1380":6}}],["sessionschedulepagerequest",{"2":{"1391":1},"3":{"1199":5,"1203":1,"1207":1,"1391":1,"1395":7}}],["sessionscorestamp",{"3":{"1496":2}}],["sessionscored",{"3":{"1259":1}}],["sessionscoreresponseguardrailtests",{"2":{"1435":1},"3":{"1199":1,"1207":3,"1369":2,"1435":2,"1437":1,"1438":1,"1487":1}}],["sessionscoreresponseguardrail",{"2":{"1018":1,"1021":1,"1094":1,"1366":1},"3":{"1018":3,"1021":3,"1094":1,"1199":5,"1203":1,"1207":2,"1366":4,"1369":11,"1427":2,"1496":1,"1526":2,"1535":1}}],["sessionscoringcandidate",{"3":{"1496":2}}],["sessionscoringcontract",{"2":{"1366":1,"1368":1,"1369":1,"1492":1},"3":{"1366":1,"1368":1,"1369":3,"1492":1}}],["sessionscoringworkitem",{"3":{"1496":2}}],["sessionscoringenqueueresult",{"3":{"1496":2}}],["sessionscoringsweepjob",{"3":{"1270":1,"1496":2}}],["sessionscoringservicetests",{"2":{"1435":1},"3":{"1199":1,"1207":3,"1369":1,"1435":2,"1437":1,"1438":1}}],["sessionscoringservice",{"2":{"1016":1,"1018":1,"1021":1,"1094":1,"1095":1,"1366":2,"1369":1,"1492":1},"3":{"1016":1,"1017":1,"1018":11,"1021":2,"1090":1,"1093":1,"1094":2,"1095":2,"1199":9,"1203":1,"1207":2,"1347":1,"1350":1,"1359":9,"1366":11,"1369":19,"1427":3,"1435":1,"1438":2,"1492":1,"1496":3,"1526":8,"2181":1}}],["sessionscoringinput",{"3":{"1199":10,"1203":1,"1207":1,"1359":7,"1369":1}}],["sessionscoringresult",{"3":{"1199":6,"1203":1,"1207":1,"1359":5,"1366":1,"1369":4}}],["sessionscoringrunnertests",{"3":{"1199":1,"1207":2,"1359":2,"1438":2}}],["sessionscoringrunner",{"3":{"1082":1,"1086":1,"1199":2,"1203":1,"1207":2,"1286":1,"1350":2,"1359":23,"1369":2,"1436":2,"1438":1,"1496":3,"1526":1}}],["sessionscoring",{"2":{"1018":1,"1021":1,"1099":1,"1103":1,"2140":1},"3":{"1018":1,"1021":1,"1099":1,"1103":1,"1347":1,"1350":4,"1359":2,"1380":2,"1496":1,"2140":1}}],["sessionscoringpromptcontractpintests",{"2":{"1018":1,"1426":1,"1428":1,"1435":1},"3":{"1018":1,"1199":1,"1207":1,"1426":1,"1428":1,"1435":1}}],["sessionscoringprocessortests",{"3":{"1496":1}}],["sessionscoringprocessor",{"2":{"491":1,"492":1,"493":1,"518":1},"3":{"491":2,"492":3,"493":2,"518":1,"1496":4}}],["sessionscoringqueue",{"2":{"518":1},"3":{"0":2,"518":1,"1496":4}}],["sessionscontrollertests",{"3":{"1199":1,"1207":2}}],["sessionscontroller",{"2":{"543":1,"552":1},"3":{"543":2,"545":2,"546":1,"550":1,"552":1,"743":2,"1199":3,"1203":1,"1207":2,"1247":7,"1311":8,"1350":2,"1359":45,"1371":5,"1372":5,"1373":4,"1374":1,"1375":9,"1380":10,"1395":2,"1436":4,"1496":1,"1526":1,"1534":1}}],["sessionsimilaritycalculatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionsimilaritycalculator",{"3":{"1199":3,"1203":1,"1207":2,"1359":7}}],["sessionspeakerids",{"3":{"1359":1}}],["sessionspeakerid",{"3":{"1350":1,"1359":5}}],["sessionspeakeridentifiertype",{"3":{"1350":3,"1359":4,"1395":3}}],["sessionspeakerconfiguration",{"3":{"1199":1,"1203":1,"1207":2,"1362":2,"1369":8}}],["sessionspeakerchanged",{"2":{"1345":1,"1634":1},"3":{"1199":4,"1203":1,"1207":2,"1345":1,"1350":6,"1359":2,"1631":1,"1634":1}}],["sessionspeakertests",{"3":{"1199":1,"1207":2}}],["sessionspeakernavigationpopulatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionspeakernavigationpopulator",{"3":{"1199":2,"1203":1,"1207":2,"1359":5}}],["sessionspeakerdtomappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["sessionspeakerdtomapper",{"3":{"1199":9,"1203":1,"1207":2,"1359":8}}],["sessionspeakerdto",{"3":{"1199":9,"1203":1,"1207":2,"1347":1,"1350":9,"1359":2,"1380":1,"1395":3}}],["sessionspeaker",{"3":{"1198":1,"1199":24,"1203":1,"1207":2,"1237":4,"1324":1,"1342":3,"1350":8,"1353":1,"1359":38,"1364":2,"1369":5,"1380":1,"1395":5,"1438":1,"1630":1,"1631":2,"1632":2,"1634":2,"1635":3,"1637":1,"1638":3,"1639":4,"1640":1}}],["sessionspeakerscontrollertests",{"3":{"1199":1,"1207":2}}],["sessionspeakerscontroller",{"2":{"1371":1,"1372":1},"3":{"1199":3,"1203":1,"1207":3,"1311":2,"1350":2,"1359":23,"1371":2,"1372":2,"1373":2,"1374":1,"1380":17}}],["sessionspeakerservice",{"2":{"1386":1},"3":{"1199":1,"1203":1,"1207":1,"1324":1,"1386":1,"1395":3}}],["sessionspeakers",{"2":{"1115":1,"1357":1,"1363":1},"3":{"1115":1,"1116":1,"1324":1,"1350":4,"1357":1,"1359":21,"1363":1,"1369":4,"1380":2,"1395":6,"1447":1,"1526":1,"1630":2,"1631":1,"1632":2,"1635":3,"1638":1,"1639":3}}],["sessionspagee2etests",{"3":{"618":2,"906":1,"909":1,"1199":1,"1207":2,"1324":1,"1436":5,"1438":1}}],["sessionstatusrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":3}}],["sessionstatusdisplay",{"3":{"1199":1,"1203":1,"1207":2,"1385":2,"1395":6,"1496":1}}],["sessionstatuses",{"3":{"1199":23,"1203":1,"1207":2,"1344":7,"1350":10,"1353":1,"1356":1,"1359":40,"1395":6,"1396":2,"1496":2,"1535":1}}],["sessionstampingtokenservice",{"2":{"1287":1,"1290":1},"3":{"905":1,"1199":2,"1203":1,"1207":1,"1287":1,"1290":1,"1300":6,"1496":1,"1982":1}}],["sessionstests",{"3":{"906":1,"1199":1,"1207":2,"1324":1,"1436":1,"1438":2}}],["sessionstorage",{"2":{"2078":1},"3":{"881":1,"1324":7,"1577":1,"1715":1,"2078":1}}],["sessionset",{"3":{"1324":1}}],["sessionservice",{"3":{"881":1,"1199":8,"1203":1,"1207":2,"1324":1,"1382":3,"1395":7,"1396":1}}],["sessionselectiontests",{"3":{"1199":1,"1207":2}}],["sessionselectionstaleresponsetests",{"3":{"1199":1,"1207":2,"1395":2,"1438":2}}],["sessionselectionspeakeroverlaptests",{"3":{"1199":1,"1207":2,"1395":1}}],["sessionselectionspeakeroverlap",{"2":{"1385":1},"3":{"1199":2,"1203":1,"1207":2,"1385":3,"1395":4}}],["sessionselectionservicetests",{"3":{"1199":1,"1207":2}}],["sessionselectionservice",{"2":{"1390":1},"3":{"881":1,"1199":2,"1203":1,"1207":2,"1359":4,"1382":1,"1390":4,"1395":9}}],["sessionselectionfilters",{"2":{"1385":1},"3":{"1199":2,"1203":1,"1207":2,"1385":2,"1395":7}}],["sessionselectionfilteroptions",{"2":{"1385":1},"3":{"1199":2,"1203":1,"1207":2,"1385":2,"1395":4,"1496":1}}],["sessionselectionaiscorestests",{"3":{"1199":1,"1207":2,"1395":2,"1438":1}}],["sessionselectionaiscores",{"2":{"1385":1},"3":{"1199":2,"1203":1,"1207":2,"1385":3,"1395":8}}],["sessionselectiondashboard",{"2":{"1390":1,"1535":1},"3":{"1199":3,"1203":1,"1207":2,"1350":2,"1359":1,"1390":2,"1395":30,"1535":1}}],["sessionselectiondashboardtests",{"3":{"1199":2,"1207":4,"1395":2}}],["sessionselectiondashboarddto",{"2":{"1347":1,"1390":1},"3":{"1199":16,"1203":1,"1207":3,"1347":5,"1350":8,"1359":2,"1380":1,"1390":1,"1395":10}}],["sessionselectiondisplay",{"2":{"1385":1},"3":{"1199":3,"1203":1,"1207":2,"1385":2,"1395":15}}],["sessionselectioncontrollertests",{"3":{"1199":1,"1207":3}}],["sessionselectioncontroller",{"2":{"1371":1,"1376":1,"1390":1},"3":{"1018":1,"1021":1,"1099":1,"1103":1,"1199":2,"1203":1,"1207":2,"1311":1,"1323":2,"1347":3,"1350":6,"1359":19,"1367":1,"1369":1,"1371":2,"1373":1,"1376":2,"1379":1,"1380":10,"1390":2,"1395":3,"1496":2,"1526":1,"2140":1,"2192":1}}],["sessionselectionmanage",{"2":{"1018":1,"1264":1,"1376":1,"1380":1},"3":{"1018":1,"1264":1,"1350":1,"1359":4,"1373":1,"1376":1,"1380":2,"1526":1}}],["sessionselection",{"3":{"837":1,"839":1,"841":1,"1018":1,"1359":9,"1395":6,"1438":1,"1447":1,"1496":1,"1632":2,"1640":5}}],["sessions",{"0":{"1283":1,"1290":1,"2241":1},"1":{"456":1,"457":1,"458":1,"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1,"902":1,"903":1,"904":1,"905":1,"906":1,"907":1,"908":1,"909":1,"910":1},"2":{"1350":1,"1380":1,"1395":2},"3":{"0":9,"128":1,"186":2,"187":1,"325":1,"353":1,"456":1,"492":1,"493":2,"494":1,"495":1,"497":4,"501":1,"517":1,"543":2,"545":3,"550":1,"554":1,"556":1,"583":1,"616":2,"618":3,"666":1,"690":1,"743":3,"782":2,"827":1,"852":1,"857":1,"862":1,"881":2,"902":1,"903":1,"905":12,"906":1,"907":4,"908":1,"909":2,"910":4,"926":1,"995":1,"1004":2,"1017":1,"1018":6,"1082":3,"1085":1,"1090":1,"1099":2,"1103":1,"1116":3,"1192":1,"1199":14,"1202":2,"1203":179,"1207":548,"1212":1,"1237":5,"1239":2,"1247":10,"1264":2,"1270":7,"1271":2,"1283":2,"1286":16,"1287":2,"1290":6,"1293":1,"1297":2,"1300":56,"1301":1,"1310":1,"1311":6,"1312":1,"1323":5,"1324":56,"1340":1,"1342":3,"1344":3,"1345":1,"1346":1,"1347":10,"1348":2,"1349":5,"1350":137,"1351":2,"1352":9,"1353":4,"1354":1,"1355":3,"1356":4,"1357":1,"1358":2,"1359":582,"1361":1,"1362":2,"1363":1,"1364":2,"1365":1,"1366":3,"1367":4,"1369":43,"1371":3,"1373":2,"1375":5,"1380":69,"1381":2,"1382":3,"1383":2,"1384":3,"1385":13,"1386":1,"1388":3,"1389":2,"1390":12,"1391":12,"1395":189,"1396":41,"1402":6,"1405":1,"1409":2,"1415":20,"1416":2,"1417":1,"1427":3,"1433":1,"1436":31,"1437":1,"1438":21,"1441":1,"1442":1,"1447":1,"1458":1,"1467":3,"1479":1,"1489":1,"1496":9,"1526":8,"1531":2,"1535":2,"1577":1,"1582":1,"1583":1,"1586":1,"1591":1,"1600":1,"1608":2,"1621":1,"1624":1,"1625":1,"1627":11,"1629":9,"1630":11,"1631":16,"1632":29,"1633":3,"1635":10,"1636":2,"1637":8,"1638":10,"1639":12,"1640":9,"1641":6,"1667":6,"1669":1,"1672":1,"1752":1,"1761":3,"1763":1,"1813":1,"1815":3,"1859":1,"1922":1,"1947":1,"1961":1,"1962":1,"1965":1,"1982":2,"1984":1,"1985":2,"1996":1,"2013":1,"2064":1,"2072":1,"2112":2,"2192":2,"2218":1,"2234":1,"2240":1,"2242":1,"2245":1}}],["session",{"0":{"1298":1,"1357":1,"1389":1,"1390":1,"1982":1,"1983":1,"2068":1},"1":{"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"1015":1,"1016":1,"1017":1,"1018":1,"1019":1,"1020":1,"1021":1,"1022":1,"1113":1,"1114":1,"1115":1,"1116":1,"1117":1,"1118":1,"1119":1,"1120":1,"1396":1,"1397":1,"1398":1,"1399":1,"1400":1,"1401":1,"1402":1,"1966":1,"1967":1,"1968":1,"1969":1,"1970":1,"1971":1,"1972":1},"2":{"164":1,"780":1,"781":1,"790":2,"1115":2,"1116":1,"1117":1,"1188":1,"1342":1,"1343":1,"1346":1,"1630":1,"1631":1,"1633":1,"1635":1,"1638":1,"1640":1,"1765":1,"1770":2,"1854":1,"1858":1,"1859":1,"1860":1,"1968":1},"3":{"0":42,"57":1,"59":1,"160":1,"164":1,"165":1,"168":1,"170":1,"185":2,"186":1,"204":1,"207":6,"208":2,"209":2,"210":1,"221":1,"243":2,"261":1,"281":1,"285":1,"287":1,"340":1,"348":1,"350":2,"351":1,"355":1,"379":1,"380":2,"383":1,"384":1,"387":2,"390":1,"443":1,"458":1,"462":1,"497":2,"498":1,"499":4,"500":2,"501":4,"503":1,"506":1,"507":3,"508":2,"509":1,"510":2,"514":1,"516":1,"517":2,"519":1,"524":1,"534":3,"536":11,"540":3,"545":2,"551":1,"555":1,"560":1,"583":3,"664":2,"665":1,"670":1,"689":4,"690":11,"691":1,"692":1,"693":1,"748":1,"756":1,"780":1,"781":2,"782":2,"788":1,"790":4,"793":5,"794":1,"854":1,"857":1,"861":1,"864":1,"897":4,"903":4,"904":2,"905":18,"906":5,"907":1,"908":2,"909":1,"910":1,"926":2,"954":2,"995":1,"996":2,"1012":1,"1015":1,"1016":2,"1017":4,"1018":2,"1020":1,"1059":1,"1082":2,"1089":2,"1090":3,"1091":1,"1099":2,"1100":1,"1101":1,"1107":1,"1108":1,"1113":1,"1115":4,"1116":21,"1117":7,"1118":4,"1124":1,"1125":1,"1129":1,"1150":2,"1182":1,"1183":1,"1184":9,"1185":3,"1187":3,"1188":3,"1189":1,"1192":8,"1198":1,"1199":131,"1201":1,"1202":6,"1203":7,"1207":2,"1212":9,"1237":6,"1238":1,"1239":6,"1247":11,"1270":5,"1271":2,"1273":1,"1280":1,"1283":4,"1284":2,"1286":29,"1287":4,"1289":5,"1290":10,"1298":1,"1300":165,"1301":1,"1302":1,"1303":1,"1305":2,"1307":2,"1309":10,"1311":13,"1312":2,"1316":1,"1318":1,"1322":1,"1323":14,"1324":119,"1339":2,"1340":4,"1342":30,"1343":7,"1344":6,"1346":7,"1347":4,"1348":6,"1349":9,"1350":251,"1351":4,"1352":8,"1353":3,"1354":1,"1355":8,"1356":1,"1357":14,"1358":1,"1359":760,"1360":2,"1361":2,"1362":5,"1363":1,"1364":4,"1366":7,"1367":1,"1369":70,"1371":2,"1373":9,"1374":2,"1375":5,"1376":2,"1377":2,"1378":3,"1380":70,"1381":2,"1385":4,"1386":1,"1387":2,"1388":4,"1389":12,"1390":6,"1391":5,"1395":233,"1396":362,"1397":5,"1399":7,"1400":2,"1401":6,"1402":177,"1405":3,"1406":6,"1408":1,"1410":1,"1415":46,"1416":6,"1417":12,"1427":2,"1428":1,"1433":1,"1435":3,"1436":45,"1437":6,"1438":49,"1441":1,"1442":1,"1447":4,"1453":2,"1455":2,"1461":1,"1463":1,"1467":12,"1475":1,"1479":1,"1485":1,"1487":11,"1488":3,"1489":1,"1490":2,"1492":1,"1496":27,"1498":1,"1500":1,"1511":2,"1513":1,"1524":1,"1526":7,"1527":1,"1531":2,"1534":7,"1535":1,"1549":1,"1556":1,"1563":1,"1582":1,"1585":2,"1586":1,"1591":1,"1608":1,"1611":2,"1621":2,"1623":1,"1625":1,"1626":1,"1627":7,"1629":7,"1630":35,"1631":63,"1632":55,"1633":4,"1634":8,"1635":20,"1636":1,"1637":10,"1638":36,"1639":46,"1640":31,"1641":7,"1660":1,"1664":1,"1667":6,"1669":2,"1672":1,"1746":1,"1749":4,"1750":1,"1754":1,"1759":1,"1761":1,"1764":2,"1765":6,"1768":4,"1769":1,"1770":3,"1779":1,"1790":1,"1804":1,"1813":1,"1815":3,"1832":1,"1854":1,"1857":2,"1858":1,"1859":3,"1860":1,"1869":3,"1870":1,"1921":1,"1922":1,"1935":1,"1941":1,"1944":1,"1945":1,"1960":2,"1965":1,"1966":1,"1967":2,"1968":7,"1969":2,"1971":2,"1972":6,"1973":3,"1974":1,"1975":1,"1977":1,"1979":1,"1980":1,"1981":2,"1982":19,"1983":2,"1984":4,"1985":6,"1996":1,"2001":1,"2003":1,"2078":1,"2080":1,"2081":1,"2112":4,"2128":1,"2129":1,"2138":1,"2160":1,"2165":5,"2167":1,"2169":8,"2170":1,"2181":1,"2182":1,"2192":5,"2199":1,"2210":2,"2234":6,"2241":1}}],["semicolons",{"3":{"1286":1}}],["semicolon",{"3":{"219":1,"1270":4,"1286":2,"1300":1,"1311":1,"1324":4,"1339":1,"1415":2,"1436":4,"1856":1,"2152":1}}],["semanticproperties",{"3":{"1417":2}}],["semantically",{"3":{"1286":2,"1359":1,"1380":1,"1436":1,"1639":1}}],["semantic",{"0":{"1733":1},"3":{"684":1,"1196":1,"1237":1,"1249":1,"1259":1,"1270":1,"1271":1,"1300":1,"1324":1,"1359":1,"1396":1,"1417":2,"1425":1,"1500":1,"1526":2,"1534":1,"1558":1,"1569":1,"1577":2,"1585":1,"1591":1,"2179":1}}],["semanticscreenreader",{"3":{"1417":5}}],["semantics",{"3":{"0":5,"24":1,"40":1,"61":1,"115":1,"119":1,"120":1,"121":1,"202":1,"242":1,"247":1,"265":1,"310":1,"389":1,"434":1,"513":1,"618":1,"641":1,"658":1,"698":1,"733":1,"734":1,"735":1,"840":1,"842":1,"855":1,"906":1,"923":1,"946":1,"996":1,"1012":1,"1020":1,"1042":1,"1043":1,"1050":1,"1076":1,"1150":1,"1152":2,"1212":1,"1229":1,"1237":4,"1247":3,"1259":5,"1260":2,"1263":1,"1270":1,"1286":6,"1300":7,"1309":4,"1311":5,"1323":2,"1324":16,"1339":2,"1350":2,"1359":14,"1369":1,"1379":1,"1380":3,"1395":6,"1396":14,"1402":2,"1415":7,"1417":6,"1436":11,"1438":2,"1446":1,"1455":2,"1467":1,"1488":1,"1492":1,"1547":1,"1558":1,"1577":2,"1586":1,"1591":1,"1631":3,"1638":2,"1640":1,"1664":1,"1759":1,"1789":1,"1792":1,"1821":1,"1825":1,"1826":2,"1830":1,"1847":1,"1944":1,"1992":1,"2028":1,"2060":1,"2067":1,"2184":1,"2190":1,"2194":1,"2205":1}}],["semaphores",{"3":{"1270":2,"1300":2}}],["semaphoreslim",{"2":{"436":1,"995":1,"1254":1,"1774":1,"1909":1},"3":{"157":1,"434":1,"436":1,"995":1,"1254":1,"1259":6,"1270":3,"1275":1,"1286":5,"1300":8,"1324":3,"1332":1,"1339":3,"1417":3,"1774":1,"1909":1}}],["semaphorefullexception",{"3":{"1259":1,"1275":1,"1286":1}}],["semaphore",{"3":{"155":1,"157":3,"159":1,"830":1,"996":1,"1259":4,"1267":1,"1270":6,"1275":1,"1286":9,"1298":1,"1300":8,"1301":1,"1311":3,"1323":2,"1324":1,"1332":1,"1339":4,"1417":5,"1577":1,"1585":1,"1909":2}}],["semver",{"3":{"147":1,"1576":1,"1577":3,"1673":1,"1674":1,"1733":1}}],["separable",{"3":{"126":1,"1300":1,"1396":1,"1436":1}}],["separators",{"3":{"741":1,"1116":1,"1286":2,"1300":3,"1323":1,"1324":1,"1396":1}}],["separator",{"3":{"599":1,"741":2,"743":1,"1228":1,"1229":1,"1247":3,"1286":1,"1296":1,"1301":1,"1309":1,"1324":4,"1335":1,"1339":1,"1395":4,"1442":1,"1467":1,"1486":1,"1685":1}}],["separation",{"3":{"0":1,"642":1,"868":1,"999":2,"1050":1,"1230":1,"1270":1,"1286":2,"1300":3,"1309":1,"1323":2,"1324":2,"1359":1,"1381":1,"1395":2,"1396":2,"1402":2,"1417":2,"1436":1,"1467":1,"1526":1,"1545":1,"1555":1,"1577":1,"1638":1,"1639":1,"1815":1,"1817":1}}],["separating",{"3":{"0":1,"1185":1,"1229":1,"1259":1,"1286":1,"1300":4,"1302":1,"1309":1,"1311":2,"1324":4,"1350":1,"1359":4,"1369":1,"1380":1,"1395":3,"1402":3,"1417":1,"1427":1,"1436":1,"1478":1,"1489":1,"1577":1,"1638":2,"1953":1,"2008":1,"2071":1}}],["separates",{"3":{"395":1,"418":1,"426":1,"862":1,"905":1,"998":2,"1237":1,"1247":1,"1263":1,"1270":1,"1286":1,"1300":2,"1311":1,"1323":1,"1324":2,"1359":1,"1396":1,"1402":1,"1415":1,"1416":1,"1436":3,"1455":1,"1462":1,"1794":1,"1982":1,"2035":1,"2064":1,"2145":1}}],["separately",{"3":{"224":1,"235":1,"265":1,"275":1,"296":1,"322":1,"518":2,"549":1,"626":1,"665":1,"676":1,"684":1,"707":1,"715":1,"724":1,"785":1,"789":1,"838":2,"881":1,"883":1,"1049":1,"1061":1,"1100":1,"1169":1,"1231":1,"1237":2,"1243":1,"1247":1,"1259":3,"1270":1,"1271":3,"1286":4,"1300":3,"1301":2,"1305":1,"1309":1,"1310":1,"1311":1,"1316":1,"1323":1,"1324":5,"1334":1,"1339":4,"1350":5,"1359":15,"1380":1,"1395":2,"1396":4,"1402":2,"1415":4,"1417":3,"1427":1,"1429":1,"1436":14,"1438":1,"1441":1,"1442":1,"1443":1,"1467":4,"1476":2,"1487":1,"1489":1,"1554":1,"1639":1,"1640":1,"1675":1,"1815":1,"1837":1,"1887":1,"1915":1,"1938":1,"2002":1,"2003":1,"2064":1,"2195":1}}],["separated",{"3":{"26":1,"330":1,"633":2,"757":1,"974":1,"1012":1,"1212":1,"1247":4,"1253":1,"1259":1,"1260":1,"1270":1,"1271":1,"1286":2,"1300":4,"1310":1,"1311":3,"1318":1,"1323":1,"1324":3,"1339":2,"1396":2,"1402":1,"1417":2,"1436":1,"1455":1,"1526":2,"1543":1,"1545":1,"1630":1,"1727":1,"1988":1,"2184":1}}],["separate",{"0":{"1837":1,"2064":1},"3":{"0":9,"24":1,"30":1,"35":1,"39":1,"52":1,"70":1,"97":1,"109":1,"117":1,"136":1,"165":2,"168":3,"186":1,"188":1,"201":1,"237":2,"255":1,"291":1,"317":1,"318":1,"319":1,"320":1,"361":1,"363":1,"390":1,"391":1,"403":1,"509":1,"511":1,"532":1,"551":1,"558":1,"572":2,"579":1,"602":1,"634":1,"640":1,"651":1,"665":1,"676":1,"690":1,"698":1,"707":1,"731":1,"742":1,"751":1,"782":1,"784":1,"790":1,"829":2,"838":1,"862":1,"869":1,"881":1,"882":1,"905":1,"971":1,"980":1,"1006":1,"1018":1,"1019":2,"1025":2,"1042":1,"1043":2,"1045":1,"1049":1,"1050":1,"1059":2,"1067":1,"1068":1,"1116":3,"1123":1,"1124":1,"1125":2,"1170":1,"1174":1,"1178":1,"1193":1,"1212":4,"1237":5,"1247":7,"1248":1,"1259":3,"1262":1,"1267":1,"1270":9,"1271":4,"1273":1,"1279":1,"1286":16,"1293":1,"1300":15,"1301":4,"1302":1,"1309":10,"1310":1,"1311":7,"1312":1,"1313":1,"1315":1,"1323":15,"1324":28,"1325":1,"1339":11,"1342":1,"1346":1,"1349":1,"1350":19,"1352":2,"1355":1,"1359":40,"1369":3,"1374":1,"1380":1,"1384":1,"1393":1,"1395":20,"1396":31,"1398":1,"1401":2,"1402":17,"1415":19,"1416":3,"1417":11,"1427":5,"1433":1,"1436":29,"1437":1,"1438":1,"1441":2,"1442":1,"1444":1,"1447":1,"1449":1,"1455":1,"1456":1,"1457":1,"1460":1,"1465":1,"1467":6,"1473":1,"1478":1,"1490":2,"1492":4,"1512":1,"1517":1,"1545":1,"1599":1,"1605":1,"1616":1,"1617":1,"1626":1,"1627":1,"1630":3,"1631":2,"1632":1,"1634":1,"1638":1,"1639":1,"1640":1,"1652":1,"1662":2,"1665":1,"1693":1,"1696":1,"1731":3,"1739":1,"1748":1,"1749":1,"1755":1,"1765":1,"1767":1,"1768":1,"1790":1,"1796":1,"1802":1,"1805":1,"1810":2,"1821":1,"1842":1,"1846":1,"1847":1,"1848":1,"1849":2,"1851":1,"1855":1,"1875":1,"1883":1,"1900":1,"1903":1,"1919":1,"1964":1,"1972":1,"1995":1,"1996":1,"1998":1,"2001":1,"2005":1,"2035":1,"2042":1,"2056":1,"2058":1,"2064":2,"2069":1,"2070":1,"2071":1,"2075":1,"2076":1,"2090":1,"2109":1,"2111":1,"2113":1,"2124":1,"2125":1,"2135":1,"2146":1,"2153":1,"2158":1,"2160":1,"2165":1,"2187":1,"2195":1,"2204":1,"2232":1}}],["seat",{"3":{"1631":1,"1632":1}}],["seating",{"3":{"1630":2}}],["seats",{"3":{"1395":1}}],["season",{"3":{"1324":1}}],["seam",{"3":{"1323":1,"1324":1,"1359":1}}],["seamless",{"3":{"1300":1}}],["searchandwaitforrowasync",{"2":{"1433":1},"3":{"1433":1,"1436":1,"1488":1}}],["searchasync",{"3":{"1396":8}}],["searchability",{"3":{"1286":1}}],["searchable",{"3":{"363":1,"611":1,"1286":1,"1350":1}}],["searchfunc",{"3":{"1395":1}}],["searchfilterkey",{"3":{"1324":3,"1415":1}}],["searchusersasync",{"3":{"1395":2}}],["searchstringchanged",{"3":{"1395":1}}],["searchstring",{"3":{"1324":2,"1359":1,"1395":2}}],["searchvalues",{"3":{"1309":1,"1311":4,"1324":3}}],["searchtermfrom",{"3":{"1324":1}}],["searchterm",{"3":{"1300":1,"1311":1,"1324":2}}],["searching",{"3":{"1286":1,"1395":1}}],["searchedlocation",{"3":{"1324":1}}],["searched",{"3":{"488":1,"490":1,"1161":1,"1395":1,"1436":1}}],["searches",{"3":{"350":1,"1150":1,"1259":1,"1359":2,"1436":2,"1456":1,"1749":1}}],["search",{"3":{"0":1,"135":1,"243":1,"255":1,"259":1,"491":1,"492":1,"493":1,"511":1,"527":1,"528":1,"610":1,"684":1,"685":1,"690":2,"751":1,"819":1,"822":1,"837":1,"861":1,"863":1,"899":1,"946":1,"956":1,"963":1,"980":1,"1093":1,"1229":2,"1270":16,"1271":1,"1286":3,"1300":3,"1301":2,"1311":3,"1324":14,"1350":1,"1359":2,"1369":2,"1383":1,"1385":1,"1391":2,"1395":51,"1396":17,"1414":1,"1415":8,"1417":4,"1427":1,"1436":9,"1438":3,"1474":1,"1490":1,"1526":1,"1545":1,"1553":1,"1577":1,"1591":1,"1599":1,"1600":1,"1627":2,"1631":1,"1632":1,"1681":1,"1685":1,"1750":4,"1755":4,"1773":1,"1786":1,"1881":1,"1902":1,"1922":1,"1989":1,"2147":1,"2160":1,"2181":1,"2204":1,"2206":1,"2222":2}}],["seal",{"3":{"1323":5,"1438":1,"1824":1,"1826":1,"2097":2}}],["sealpipeline",{"3":{"1262":1,"1316":1,"1323":2}}],["sealing",{"3":{"0":1,"125":1,"126":1,"1168":1,"1169":1,"1170":1,"1259":1,"1270":1,"1312":1,"1323":1,"1324":1,"1415":1,"1436":5,"1671":1,"1827":1,"1883":1,"2100":1}}],["seals",{"0":{"1316":1},"3":{"0":1,"117":1,"122":1,"1289":1,"1311":1,"1323":1,"1324":1,"1383":1,"1396":1,"1415":1,"1436":1,"1662":1,"1824":1,"1883":1,"2097":1,"2100":1}}],["sealed",{"3":{"0":10,"45":1,"47":2,"80":1,"115":2,"166":1,"214":1,"255":1,"281":1,"310":2,"314":1,"318":1,"341":1,"350":1,"359":1,"448":2,"450":1,"455":1,"492":1,"498":1,"499":1,"511":1,"577":1,"631":2,"635":1,"657":2,"725":1,"733":1,"782":1,"854":1,"910":1,"922":1,"925":1,"926":1,"962":1,"963":3,"964":2,"967":1,"968":1,"988":1,"996":1,"1026":1,"1032":1,"1033":2,"1034":1,"1038":1,"1051":1,"1117":1,"1119":1,"1167":1,"1168":4,"1170":1,"1173":1,"1175":1,"1180":1,"1212":5,"1219":1,"1229":11,"1235":1,"1237":23,"1241":1,"1243":1,"1247":35,"1259":20,"1260":1,"1262":1,"1265":2,"1270":32,"1271":8,"1272":1,"1273":1,"1280":1,"1283":1,"1286":119,"1289":1,"1300":75,"1301":10,"1309":43,"1310":10,"1311":54,"1312":6,"1318":1,"1323":50,"1324":108,"1339":56,"1350":84,"1359":352,"1366":1,"1369":17,"1377":1,"1380":35,"1384":1,"1395":65,"1396":143,"1398":1,"1402":57,"1415":96,"1416":7,"1417":86,"1423":1,"1426":1,"1427":4,"1431":2,"1432":1,"1436":259,"1489":1,"1490":1,"1510":1,"1525":1,"1526":8,"1577":2,"1591":6,"1651":1,"1654":1,"1662":2,"1664":1,"1675":1,"1720":1,"1807":1,"1810":2,"1849":1,"1857":1,"1874":1,"1891":1,"1896":1,"1978":1,"1982":2,"1995":1,"2001":1,"2043":1,"2103":1,"2106":2,"2133":3,"2134":1,"2144":1,"2201":1,"2234":1}}],["senior",{"1":{"2214":1,"2215":1,"2216":1,"2217":1,"2218":1},"3":{"1794":1,"2101":1,"2111":1,"2214":1,"2215":1,"2219":1,"2220":1,"2222":2}}],["sensibly",{"3":{"1417":1,"1562":1}}],["sensible",{"3":{"709":1,"1339":1,"1395":1,"1436":2,"1488":1,"1555":1,"1561":1,"1607":1,"1642":1,"1678":1,"1741":1,"1927":1}}],["sensitivity",{"3":{"610":1,"1196":1,"1431":1,"1436":3,"1467":1,"1638":1,"2160":1}}],["sensitivedatadiscovery",{"3":{"1467":1}}],["sensitivedatalogginggatetests",{"3":{"1108":1,"1199":1,"1207":3,"1286":1}}],["sensitivedatalogginggate",{"2":{"1108":1,"1898":1},"3":{"0":1,"1108":2,"1199":2,"1203":1,"1207":2,"1212":1,"1273":3,"1286":6,"1323":1,"1496":2,"1898":1}}],["sensitively",{"3":{"1350":1,"1359":1}}],["sensitive",{"3":{"0":1,"122":1,"209":1,"265":1,"295":1,"313":1,"358":2,"360":1,"362":1,"585":1,"916":1,"950":1,"1108":1,"1110":1,"1247":1,"1284":1,"1286":1,"1300":3,"1310":1,"1311":1,"1312":1,"1323":1,"1324":3,"1339":1,"1350":1,"1359":6,"1380":1,"1395":1,"1396":3,"1415":3,"1416":1,"1417":6,"1423":1,"1436":3,"1453":2,"1467":1,"1563":1,"1567":1,"1631":1,"1971":1,"1973":1,"2087":1,"2141":1,"2142":2,"2143":1,"2146":1,"2147":1,"2151":1}}],["sense",{"3":{"396":1,"988":1,"1247":1,"1259":1,"1286":1,"1301":1,"1359":4,"1369":1,"1396":1,"1417":1,"1467":1,"1473":1,"2045":1,"2157":1}}],["sentto",{"3":{"1324":1,"1436":1}}],["senton",{"3":{"1309":6,"1415":2,"1436":2}}],["sentrequest",{"3":{"1199":3,"1207":1}}],["sentbyuserid",{"2":{"231":1},"3":{"225":1,"231":1,"1286":1,"1309":7,"1436":1,"1933":2}}],["sent",{"3":{"225":2,"227":1,"231":1,"434":1,"741":1,"759":1,"791":1,"837":1,"857":1,"1018":1,"1091":1,"1183":1,"1184":1,"1185":1,"1187":2,"1270":1,"1278":1,"1286":3,"1300":4,"1303":1,"1308":2,"1309":19,"1311":2,"1323":5,"1324":18,"1337":1,"1339":4,"1359":4,"1369":1,"1380":1,"1395":8,"1396":9,"1415":4,"1423":1,"1427":1,"1435":1,"1436":10,"1438":1,"1640":1,"1641":2,"1770":1,"1776":1,"1906":1,"1933":1,"1969":2,"2025":1,"2131":1,"2176":1,"2177":1,"2191":1}}],["sentences",{"3":{"265":1,"534":1,"543":1,"626":1,"1193":1,"1237":1,"1286":1,"1300":1,"1395":2,"1396":1,"1435":1,"1496":2,"1564":1,"1653":1,"1737":1}}],["sentence",{"3":{"0":1,"138":1,"139":1,"142":1,"245":1,"265":2,"373":1,"522":1,"523":1,"582":2,"611":1,"624":1,"626":2,"628":1,"798":1,"822":1,"864":1,"971":2,"972":2,"973":4,"974":2,"1007":1,"1026":1,"1067":2,"1068":1,"1119":1,"1237":1,"1270":1,"1286":3,"1311":3,"1323":3,"1324":9,"1339":2,"1359":4,"1369":1,"1389":1,"1395":12,"1396":9,"1415":2,"1427":1,"1430":1,"1436":7,"1478":1,"1496":3,"1526":2,"1577":2,"1586":1,"1591":2,"1653":1,"1750":1,"1900":1,"1995":1,"2034":1,"2040":2,"2044":2,"2057":1,"2167":1,"2180":1,"2228":1}}],["sentinels",{"3":{"1324":1}}],["sentinelref",{"3":{"1324":2}}],["sentinel",{"3":{"0":1,"26":1,"265":4,"268":1,"657":5,"658":3,"1234":1,"1237":4,"1244":1,"1247":1,"1253":1,"1259":1,"1274":1,"1275":1,"1282":1,"1286":7,"1300":4,"1309":2,"1311":1,"1324":11,"1350":2,"1352":1,"1359":3,"1369":1,"1383":1,"1390":3,"1395":19,"1396":3,"1436":6,"1438":4,"1577":1,"1591":1,"1611":1,"1653":1,"1669":1}}],["sendnotfoundprobeasync",{"3":{"1436":1}}],["sendnotificationasync",{"3":{"1324":1}}],["sendvalidationerrorprobeasync",{"3":{"1436":1}}],["sendforwardedasync",{"3":{"1436":1}}],["sendgetrequestasync",{"3":{"1395":3}}],["sendgrid",{"3":{"1309":1}}],["sendprobeasync",{"3":{"1339":2}}],["sendpushnotificationrequestvalidatortests",{"3":{"1199":1,"1207":2}}],["sendpushnotificationrequestvalidator",{"2":{"1305":1},"3":{"1199":2,"1203":1,"1207":2,"1305":2,"1309":13}}],["sendpushnotificationrequest",{"2":{"1303":1,"1305":1},"3":{"1199":14,"1203":1,"1207":2,"1303":1,"1305":2,"1309":13,"1324":11,"1436":1}}],["sendpushnotificationcommand",{"2":{"435":1,"436":1,"1304":1,"1933":1},"3":{"435":1,"436":1,"1199":5,"1203":1,"1207":2,"1270":2,"1304":3,"1309":13,"1933":1}}],["sendpushnotificationhandlertests",{"3":{"1199":1,"1207":3}}],["sendpushnotificationhandler",{"2":{"225":1,"229":1,"230":1,"231":1,"434":1,"435":1,"1304":1,"1512":1,"1933":1},"3":{"0":1,"225":7,"229":1,"230":1,"231":2,"434":1,"435":3,"436":1,"1199":2,"1203":1,"1207":2,"1286":2,"1302":1,"1304":3,"1309":54,"1323":2,"1512":1,"1933":1}}],["sendresult",{"3":{"1324":3}}],["sendreadwithauthrefreshasync",{"3":{"1324":3}}],["sendrequestasync",{"2":{"2076":1},"3":{"0":1,"881":2,"1324":8,"1395":12,"2076":1}}],["sendtouserasync",{"3":{"1309":3}}],["sendtousersasync",{"2":{"434":1,"1933":2},"3":{"434":1,"1286":1,"1309":5,"1323":2,"1933":2}}],["sendmailasync",{"3":{"230":1,"1309":1}}],["sendasync",{"3":{"230":1,"1309":8,"1311":3,"1323":1,"1324":15,"1339":1,"1436":7,"1488":1}}],["sendemailasync",{"2":{"2183":1},"3":{"2183":1}}],["sendemailconfirmationasync",{"3":{"1415":2,"1436":1}}],["sendemailconfirmationcommand",{"2":{"1408":1},"3":{"1199":7,"1203":1,"1207":2,"1300":1,"1323":2,"1408":2,"1415":12,"1436":1}}],["sendemailconfirmationrequestvalidator",{"2":{"1295":1},"3":{"1199":1,"1203":1,"1207":1,"1295":1,"1300":3}}],["sendemailconfirmationrequest",{"2":{"1295":1},"3":{"1199":11,"1203":1,"1207":1,"1295":1,"1300":3,"1323":1,"1324":1,"1415":3}}],["sendemailconfirmation",{"2":{"1408":1},"3":{"674":1,"1203":2,"1207":6,"1323":2,"1408":2,"1415":4}}],["sendemailconfirmationhandlertests",{"3":{"1199":1,"1207":2}}],["sendemailconfirmationhandler",{"2":{"674":1,"1408":1},"3":{"674":4,"1199":2,"1203":1,"1207":2,"1300":2,"1323":1,"1408":2,"1415":5,"1496":1}}],["sendemailconfirmationhandlerbase",{"2":{"674":1,"1322":1,"1408":1,"2200":1},"3":{"230":1,"674":2,"1199":3,"1203":1,"1207":2,"1300":3,"1322":3,"1323":4,"1408":1,"1415":2,"1496":1,"1577":1,"1582":1,"2200":1}}],["senderscopeddedupkey",{"3":{"1309":2}}],["senders",{"3":{"1309":3,"1323":1}}],["sender",{"3":{"0":1,"223":1,"225":4,"230":3,"231":3,"380":1,"433":1,"436":1,"1192":1,"1286":1,"1300":2,"1302":1,"1303":3,"1307":1,"1309":24,"1320":1,"1323":8,"1436":1,"1467":1,"1496":1,"1512":1,"1933":2,"1934":2,"1935":1,"1938":1,"1940":1,"1941":2,"1944":1}}],["sendordershippedemailinternalcommand",{"2":{"1264":1},"3":{"1264":2}}],["sendordershippedemailinternalcommandhandler",{"2":{"230":1},"3":{"230":1}}],["sendorderpaymentfailedemail",{"3":{"2189":1}}],["sendorderpaymentfailedemailinternalcommand",{"2":{"2167":1},"3":{"2167":1,"2191":2}}],["sendorderpaymentfailedemailinternalcommandhandler",{"2":{"230":1},"3":{"230":1,"2191":1}}],["sendorderpaidemailinternalcommand",{"2":{"1026":1},"3":{"1026":1}}],["sendorderpaidemailinternalcommandhandler",{"2":{"230":1,"1026":1},"3":{"230":2,"1026":3}}],["sending",{"0":{"1933":1},"3":{"180":1,"792":1,"1019":1,"1186":1,"1202":1,"1203":1,"1271":1,"1286":2,"1304":2,"1309":8,"1323":4,"1324":4,"1339":1,"1359":3,"1384":1,"1395":1,"1396":3,"1402":3,"1415":3,"1424":1,"1427":1,"1508":1,"1769":1,"1770":1,"1933":2}}],["sendshttp2withpriorknowledge",{"3":{"1339":1}}],["sendshttp11",{"3":{"1339":1}}],["sends",{"3":{"0":2,"97":1,"111":1,"157":2,"160":1,"180":1,"206":1,"227":1,"230":1,"382":1,"434":2,"435":2,"448":2,"449":1,"507":1,"649":1,"773":1,"826":1,"827":1,"842":1,"881":2,"1050":1,"1091":1,"1237":1,"1241":1,"1247":1,"1286":3,"1300":4,"1304":1,"1309":11,"1311":2,"1312":1,"1323":5,"1324":23,"1328":1,"1339":4,"1347":1,"1350":3,"1359":13,"1369":1,"1380":2,"1389":1,"1395":18,"1396":9,"1400":1,"1402":1,"1415":4,"1416":1,"1422":1,"1436":6,"1438":2,"1441":1,"1455":1,"1458":2,"1467":3,"1481":1,"1600":1,"1627":1,"1641":2,"1666":1,"1719":1,"1765":1,"1767":1,"1770":1,"1835":1,"1908":1,"1933":1,"1936":1,"1944":1,"1949":1,"2001":1,"2004":1,"2011":1,"2133":2,"2135":2,"2149":2,"2183":1,"2191":1}}],["send",{"0":{"1304":1,"1512":1},"2":{"641":1,"642":1},"3":{"0":6,"31":1,"72":2,"109":1,"175":1,"202":1,"225":6,"227":2,"230":10,"231":2,"236":1,"336":1,"380":1,"435":1,"436":1,"640":1,"641":1,"642":1,"649":1,"675":1,"740":1,"789":1,"795":1,"848":1,"854":2,"856":2,"881":2,"883":1,"896":1,"926":1,"1018":1,"1041":1,"1203":3,"1207":6,"1247":1,"1249":1,"1270":1,"1286":8,"1294":1,"1300":10,"1302":5,"1303":1,"1304":3,"1305":2,"1307":1,"1309":51,"1311":8,"1323":16,"1324":54,"1339":4,"1350":1,"1359":3,"1369":1,"1395":2,"1396":6,"1400":1,"1402":1,"1408":3,"1415":9,"1427":1,"1434":1,"1436":10,"1438":5,"1467":3,"1512":2,"1534":1,"1577":1,"1591":1,"1595":1,"1596":2,"1641":4,"1666":1,"1667":1,"1669":1,"1719":1,"1723":1,"1749":1,"1761":1,"1765":1,"1767":1,"1770":2,"1776":1,"1911":1,"1933":8,"1934":5,"1935":2,"1936":2,"1937":1,"1938":3,"1940":4,"1941":1,"1950":1,"1969":1,"2150":1,"2168":1,"2198":1}}],["sev",{"3":{"0":1,"609":15,"1436":2,"1467":3,"1469":1,"1474":4,"1476":8,"2047":1}}],["seventy",{"3":{"2045":1}}],["seventeen",{"3":{"135":1,"141":2,"468":1,"475":2,"616":1,"618":2,"782":1,"803":1,"1212":1,"1350":1,"1369":13,"1395":3,"1417":2,"1467":1,"1660":1,"1666":1,"2113":1,"2114":1}}],["seventh",{"3":{"0":1,"1055":1,"1359":1,"1396":1,"1436":5,"1526":1,"1728":1}}],["seven",{"3":{"0":14,"76":1,"80":1,"115":2,"117":1,"121":2,"122":1,"126":1,"135":1,"150":1,"184":1,"195":1,"203":1,"241":3,"243":1,"245":3,"250":1,"251":2,"252":1,"254":5,"256":2,"257":2,"258":1,"259":3,"260":3,"261":1,"400":2,"401":2,"404":1,"418":1,"423":1,"426":1,"454":1,"501":3,"502":1,"554":1,"556":1,"572":2,"574":1,"577":1,"578":3,"579":1,"589":1,"599":1,"604":1,"616":1,"626":1,"631":1,"632":2,"633":3,"635":2,"638":1,"640":1,"657":1,"659":3,"672":3,"674":3,"677":1,"690":1,"715":1,"749":1,"750":1,"767":1,"774":1,"782":2,"801":1,"881":3,"897":1,"900":1,"914":1,"968":1,"1018":1,"1020":1,"1050":1,"1076":1,"1090":1,"1176":1,"1212":4,"1220":1,"1237":1,"1241":1,"1247":9,"1260":1,"1262":1,"1270":7,"1273":1,"1286":2,"1300":3,"1301":2,"1309":1,"1311":1,"1312":2,"1323":5,"1324":7,"1339":7,"1347":1,"1350":17,"1359":33,"1369":4,"1371":1,"1380":2,"1382":1,"1395":6,"1396":8,"1402":2,"1415":11,"1417":1,"1428":2,"1431":1,"1436":34,"1438":2,"1443":1,"1450":1,"1455":1,"1459":1,"1467":2,"1476":1,"1486":1,"1492":1,"1496":3,"1524":1,"1526":6,"1531":1,"1532":2,"1577":3,"1591":3,"1600":2,"1627":1,"1650":1,"1651":1,"1662":1,"1667":1,"1670":1,"1671":2,"1686":1,"1728":1,"1729":1,"1805":1,"1821":1,"1826":1,"1839":1,"1916":1,"1923":1,"1963":1,"1980":1,"1982":1,"1984":3,"2045":1,"2056":1,"2061":1,"2067":1,"2089":1,"2099":2,"2100":2,"2105":1,"2133":1,"2173":2,"2204":1}}],["sever",{"3":{"1436":2}}],["severities",{"3":{"610":1,"614":1,"649":1,"1324":3,"1467":1,"1474":1,"1476":1,"1483":1,"2081":1,"2160":1}}],["severityfor",{"3":{"1396":2}}],["severity",{"0":{"1222":1},"2":{"135":1,"490":1,"491":1,"492":1,"493":1,"1526":1},"3":{"0":6,"107":2,"110":1,"111":1,"113":1,"135":2,"265":1,"407":1,"486":1,"490":2,"491":2,"492":2,"493":2,"607":2,"608":1,"609":23,"610":1,"611":6,"612":2,"633":2,"896":2,"898":2,"980":1,"981":2,"1018":1,"1198":2,"1199":9,"1207":2,"1212":1,"1213":1,"1214":2,"1225":1,"1229":2,"1237":1,"1271":1,"1311":2,"1324":24,"1339":1,"1359":1,"1395":3,"1396":5,"1431":1,"1436":6,"1438":1,"1453":2,"1467":12,"1476":2,"1489":1,"1526":1,"1552":1,"1577":1,"1581":1,"1582":1,"1584":1,"1591":1,"1649":1,"1654":1,"1661":1,"1662":1,"1673":1,"1683":1,"1685":1,"1696":1,"1727":2,"1903":1,"1905":1,"2047":2,"2050":1,"2087":1,"2088":1,"2160":15,"2222":1,"2234":1}}],["several",{"3":{"0":1,"27":1,"109":3,"131":1,"165":1,"166":1,"185":1,"228":1,"268":1,"396":1,"471":1,"508":1,"509":1,"544":1,"549":1,"551":1,"600":2,"601":1,"632":1,"677":1,"714":1,"765":1,"809":1,"810":1,"822":1,"839":1,"900":1,"974":1,"988":1,"1055":1,"1067":1,"1103":1,"1104":1,"1107":1,"1220":1,"1229":4,"1239":1,"1246":1,"1247":1,"1259":1,"1263":1,"1269":2,"1270":9,"1271":1,"1280":1,"1286":15,"1289":1,"1300":3,"1301":3,"1302":1,"1309":1,"1310":1,"1311":8,"1319":1,"1320":1,"1323":5,"1324":11,"1332":1,"1333":1,"1339":3,"1350":9,"1351":1,"1352":1,"1353":1,"1359":10,"1362":1,"1374":1,"1380":2,"1387":1,"1395":4,"1396":10,"1405":1,"1409":1,"1416":1,"1417":6,"1420":1,"1429":1,"1436":17,"1442":1,"1475":1,"1488":2,"1489":1,"1490":1,"1496":3,"1499":1,"1500":2,"1537":1,"1577":1,"1582":1,"1671":1,"1675":1,"1692":1,"1697":1,"1699":1,"1708":1,"1726":1,"1727":1,"1767":1,"1805":1,"1863":1,"1911":1,"1942":1,"2042":1,"2089":1}}],["severe",{"3":{"0":1,"109":2,"1224":1,"1229":2,"1311":5,"1312":2,"1324":2,"1702":1,"1805":1,"1806":1,"1927":2,"2019":1}}],["ser",{"3":{"1685":1,"1686":2}}],["serious",{"3":{"2062":1}}],["seriously",{"3":{"1396":1}}],["serif",{"3":{"1324":1,"2077":1}}],["serially",{"3":{"1455":1}}],["serial",{"3":{"1300":1,"1436":1}}],["serializable",{"3":{"1286":1,"1300":1,"1324":1,"1350":1,"1359":2,"1417":1,"1534":1}}],["serializationerror",{"3":{"1286":1}}],["serialization",{"2":{"1229":2,"1369":1},"3":{"0":1,"245":1,"253":1,"291":1,"380":1,"520":1,"593":1,"655":1,"657":2,"658":1,"659":1,"733":1,"964":1,"1043":1,"1102":1,"1150":1,"1154":1,"1203":3,"1207":24,"1212":2,"1223":1,"1229":8,"1233":1,"1234":1,"1235":1,"1237":6,"1259":3,"1270":1,"1300":3,"1301":3,"1311":3,"1323":3,"1324":2,"1341":1,"1350":1,"1359":9,"1369":1,"1380":2,"1402":2,"1415":3,"1417":2,"1436":3,"1438":1,"1496":1,"1540":1,"1916":1,"1920":1,"1944":1,"2041":1,"2234":1}}],["serializing",{"3":{"434":1,"1251":1,"1270":1,"1300":1,"1301":1,"1311":3,"1323":1,"1359":1,"1396":2,"1402":1,"1417":2,"1475":1,"1916":1}}],["serializetoutf8bytes",{"3":{"1301":1,"1311":1,"1415":1}}],["serialize",{"3":{"1229":1,"1244":1,"1247":2,"1270":2,"1286":1,"1300":5,"1301":2,"1311":3,"1324":2,"1350":2,"1359":1,"1395":1,"1399":1,"1402":2,"1415":3,"1417":3,"1427":2,"1838":1,"1909":2,"1912":1,"1950":1}}],["serializes",{"3":{"24":2,"77":1,"157":1,"195":1,"243":1,"301":1,"306":1,"341":1,"423":1,"424":1,"436":1,"519":1,"541":1,"657":1,"660":1,"725":1,"964":1,"995":1,"996":2,"999":1,"1018":1,"1050":2,"1142":1,"1150":1,"1229":3,"1233":3,"1234":1,"1237":5,"1259":2,"1270":1,"1286":4,"1300":8,"1301":2,"1311":12,"1323":3,"1324":5,"1345":1,"1350":1,"1359":1,"1396":2,"1399":1,"1402":4,"1415":4,"1417":3,"1436":2,"1455":1,"1496":1,"1638":1,"1806":1,"1874":1,"1887":2,"1909":1,"1912":1,"1927":1,"2078":1,"2093":1,"2139":1,"2171":1}}],["serialized",{"3":{"0":3,"17":1,"38":1,"78":1,"157":2,"159":3,"330":1,"380":1,"447":1,"472":1,"536":1,"558":1,"781":1,"783":1,"852":1,"857":1,"965":1,"966":1,"1034":1,"1043":1,"1074":1,"1140":1,"1175":1,"1212":1,"1223":1,"1229":4,"1237":3,"1245":1,"1259":6,"1274":1,"1275":1,"1286":2,"1289":1,"1298":1,"1300":6,"1309":3,"1311":4,"1312":1,"1323":2,"1324":7,"1350":4,"1359":1,"1380":1,"1396":9,"1400":1,"1402":5,"1406":1,"1415":4,"1417":2,"1436":6,"1546":1,"1630":1,"1631":1,"1639":1,"1640":1,"1805":1,"1845":1,"1889":1,"1908":2,"1944":1,"1946":1,"1950":1,"1968":1,"1972":1,"1988":1,"2067":1,"2132":1,"2186":1}}],["serializeroptions",{"3":{"1259":1,"1286":1}}],["serializer",{"3":{"0":1,"79":1,"82":1,"381":1,"470":1,"965":1,"1212":1,"1286":1,"1300":2,"1311":2,"1324":1,"1359":1,"1396":1,"1400":1,"1427":1,"1438":1,"1889":1,"1944":1,"2234":1}}],["series",{"0":{"1779":1,"1786":1},"1":{"1778":1,"1779":1,"2206":1,"2207":1,"2208":1,"2209":1,"2210":1,"2211":1,"2212":1,"2213":1},"3":{"0":1,"24":1,"126":1,"527":1,"863":1,"1247":1,"1259":1,"1270":1,"1286":1,"1311":1,"1359":1,"1395":2,"1425":3,"1427":4,"1778":2,"1779":2,"1780":1,"1783":1,"1790":1,"1793":1,"1802":1,"1807":1,"1812":1,"1817":1,"1821":1,"1827":1,"1834":1,"1840":1,"1846":1,"1853":1,"1862":1,"1868":1,"1877":2,"1886":2,"1892":1,"1899":1,"1905":1,"1912":1,"1924":1,"1930":1,"1935":1,"1941":2,"1942":1,"1947":1,"1950":2,"1957":1,"1959":1,"1965":1,"1972":1,"1979":2,"1985":1,"1992":1,"1998":1,"2003":1,"2015":1,"2029":2,"2031":1,"2033":1,"2036":1,"2039":2,"2050":1,"2061":1,"2071":1,"2072":2,"2079":1,"2082":1,"2088":1,"2100":1,"2110":2,"2117":1,"2125":2,"2130":1,"2135":1,"2141":2,"2148":2,"2155":1,"2162":1,"2171":1,"2179":1,"2182":1,"2185":1,"2195":1,"2196":1,"2205":4,"2206":3,"2213":1,"2217":3,"2234":1,"2238":2,"2247":2}}],["serilogbootstraptests",{"3":{"1199":1,"1207":2,"1437":1,"1487":1}}],["seriloghostextensionstests",{"3":{"401":1,"1199":1,"1207":3,"1339":2,"1438":1}}],["seriloghostextensions",{"3":{"401":3,"980":1,"1199":2,"1203":1,"1207":2,"1208":1,"1311":1,"1333":2,"1339":3,"1442":2}}],["serilogloggerprovider",{"2":{"401":1},"3":{"401":1,"1339":1}}],["serilog",{"3":{"0":3,"395":2,"401":4,"914":1,"1213":1,"1311":1,"1323":1,"1325":1,"1333":1,"1339":6,"1379":1,"1437":1,"1438":1,"1442":2,"1445":1,"1456":1,"1467":2,"1489":1,"1490":1,"1577":1,"1660":1,"1670":2,"2044":1,"2064":1}}],["serving",{"3":{"0":2,"31":1,"62":1,"91":2,"94":1,"99":1,"104":1,"234":1,"235":2,"390":1,"421":1,"563":1,"609":1,"699":1,"733":1,"756":1,"757":4,"758":2,"765":1,"875":1,"971":1,"1124":1,"1270":1,"1278":1,"1286":3,"1300":2,"1301":1,"1307":1,"1311":10,"1312":1,"1324":3,"1335":1,"1339":4,"1350":1,"1359":7,"1369":1,"1372":1,"1379":1,"1380":1,"1395":1,"1396":8,"1415":2,"1436":5,"1455":6,"1461":1,"1467":7,"1474":1,"1476":1,"1478":1,"1577":1,"1669":1,"1708":1,"1920":1,"1923":1,"2002":1,"2037":2,"2044":1,"2126":1,"2127":1,"2149":1,"2153":1,"2158":2}}],["servicetestfixture",{"2":{"1617":1},"3":{"1617":1}}],["servicetype",{"3":{"1323":2,"1339":1,"1436":1}}],["servicelifetime",{"3":{"1436":1}}],["servicehost",{"3":{"1431":1,"1436":3}}],["serviceprovider",{"3":{"1259":6,"1286":5,"1301":2,"1315":2,"1323":2,"1324":2,"1369":3,"1380":1,"1395":2,"1396":2,"1402":1,"1427":4,"1436":2}}],["serviced",{"3":{"1571":1}}],["servicedatabaseltr",{"2":{"1474":1,"2035":1},"3":{"1474":1,"2035":1}}],["servicedatabasenames",{"2":{"1473":1},"3":{"1467":1,"1473":1}}],["servicedatabases",{"3":{"1436":1}}],["servicedatasources",{"3":{"1328":1,"1339":2}}],["servicediscovery",{"2":{"1213":1},"3":{"1213":2,"1324":1}}],["servicedescriptor",{"2":{"122":1},"3":{"122":1,"1286":2,"1309":1,"1311":2,"1312":1,"1323":7,"1359":1,"1369":1,"1380":2,"1396":2,"1415":2,"1427":1,"1436":2}}],["servicedefaultsretrytests",{"3":{"1199":1,"1207":2,"1438":2}}],["servicedefaults",{"2":{"61":1,"1439":1,"1442":1},"3":{"0":1,"61":1,"1192":2,"1202":1,"1203":1,"1325":1,"1339":3,"1436":1,"1439":1,"1442":3,"1496":2,"1591":1,"2158":1}}],["servicemodel",{"3":{"1415":1}}],["servicemodels",{"3":{"1199":2,"1207":1,"1436":6,"1487":1,"1489":1}}],["servicemocks",{"3":{"1199":4,"1207":3}}],["servicecollectiondescriptorextensions",{"2":{"1309":1,"1350":1,"1380":1,"1415":1},"3":{"1309":1,"1311":1,"1350":1,"1380":1,"1396":1,"1415":1}}],["servicecollection",{"3":{"572":1,"1262":1,"1436":9}}],["servicecontractinterfaceof",{"3":{"1436":1}}],["servicecontractimplementations",{"3":{"1436":2}}],["servicecontractimplementationsarenotpublic",{"2":{"1312":1},"3":{"1312":1,"1436":1}}],["servicecontractpuritytests",{"3":{"1199":2,"1207":4,"1312":1,"1436":16,"1489":3,"1577":1,"1591":1}}],["servicecontractpuritytestsbase",{"2":{"51":1,"1585":1,"1663":1},"3":{"51":1,"54":1,"1199":3,"1207":2,"1312":5,"1350":1,"1415":1,"1436":13,"1577":1,"1585":1,"1663":1}}],["servicecontractattributefullname",{"3":{"1312":1,"1436":1}}],["servicecontractattribute",{"2":{"1349":1,"1801":1},"3":{"1199":1,"1203":1,"1207":2,"1312":9,"1349":1,"1350":3,"1396":4,"1415":3,"1436":6,"1577":1,"1801":1}}],["servicecontractsdonotdependonserviceinternals",{"2":{"1929":1},"3":{"54":1,"1312":1,"1436":4,"1929":1}}],["servicecontracts",{"3":{"54":1,"1436":3}}],["servicecontract",{"2":{"51":1,"54":1,"1025":1,"1030":1,"1663":1,"1929":1,"1930":1},"3":{"51":1,"54":1,"1025":1,"1030":1,"1202":1,"1203":1,"1309":2,"1312":5,"1349":1,"1350":2,"1359":1,"1396":3,"1404":1,"1415":2,"1436":11,"1577":1,"1585":1,"1586":1,"1662":1,"1663":1,"1929":2,"1930":1}}],["servicefilter",{"2":{"320":1,"1997":1},"3":{"318":2,"320":1,"324":1,"1300":1,"1396":3,"1995":1,"1996":2,"1997":1}}],["servicefilterattribute",{"2":{"157":1,"343":1,"1908":1},"3":{"157":1,"341":1,"343":1,"1311":4,"1908":1}}],["serviceinternalnamespaces",{"3":{"1436":1}}],["serviceinternals",{"3":{"54":1,"1436":3}}],["serviceinforesponse",{"3":{"448":1,"1199":2,"1203":1,"1207":1,"1311":6,"1380":1,"1496":1,"2133":1}}],["serviceinfo",{"2":{"449":1,"450":1,"2134":1},"3":{"448":2,"449":1,"450":1,"572":1,"1212":1,"1311":2,"1376":1,"1380":3,"1436":5,"1488":2,"1496":1,"1497":1,"1591":1,"2056":1,"2133":1,"2134":4}}],["serviceinfov2response",{"2":{"448":1,"2133":1,"2134":1},"3":{"448":1,"1199":2,"1203":1,"1207":1,"1311":6,"1380":1,"1496":1,"2133":1,"2134":1}}],["serviceinfoversioningcontracttestsbase",{"2":{"448":1,"455":1,"572":1,"1428":1,"1488":1,"2056":1,"2133":1,"2135":1},"3":{"0":1,"448":4,"455":1,"572":3,"1199":2,"1207":2,"1311":2,"1428":1,"1436":7,"1488":2,"2056":1,"2133":4,"2135":1}}],["serviceinfocontroller",{"2":{"448":1,"1376":1,"2133":1},"3":{"448":8,"1199":1,"1203":1,"1207":2,"1311":3,"1371":2,"1376":4,"1380":6,"1436":3,"1489":1,"1496":1,"1526":1,"1535":1,"1591":2,"1600":2,"2133":5}}],["serviceinfocontrollerbase",{"2":{"446":1,"448":1,"449":1,"1371":1,"1376":1,"2133":1,"2135":1},"3":{"0":1,"446":1,"448":8,"449":1,"1199":2,"1203":1,"1207":4,"1212":1,"1311":24,"1371":1,"1376":1,"1380":8,"1436":1,"1496":1,"2133":7,"2135":1}}],["servicenames",{"3":{"827":1,"1339":3}}],["servicename",{"0":{"2020":1},"2":{"53":1,"2010":1,"2029":1,"2031":1},"3":{"53":1,"1309":5,"1311":2,"1312":7,"1316":1,"1323":1,"1339":5,"1376":1,"1378":2,"1380":7,"1396":4,"1415":5,"1441":4,"1467":1,"1656":1,"2010":1,"2020":2,"2029":1,"2031":1}}],["serviceuri",{"2":{"440":1},"3":{"0":1,"440":1,"1323":7,"1467":2,"2128":2}}],["servicebusadministrationclient",{"3":{"1323":2}}],["servicebusclient",{"3":{"1323":2}}],["servicebusroundtripsmoketests",{"3":{"1199":1,"1207":2,"1436":2,"1438":1}}],["servicebusemulatorimagetag",{"3":{"1339":1}}],["servicebusemulatorimage",{"3":{"1339":1}}],["servicebusemulatorimageregistry",{"3":{"1339":1}}],["servicebusemulatorbrokertests",{"3":{"1199":1,"1207":2,"1339":3,"1438":2}}],["servicebusemulatorcollection",{"3":{"1199":2,"1207":1}}],["servicebusemulator",{"2":{"1203":1,"1437":1,"1438":1,"1486":1,"1487":1,"1490":2},"3":{"1199":3,"1203":1,"1206":1,"1207":9,"1436":4,"1437":1,"1438":2,"1446":1,"1486":1,"1487":1,"1490":2,"1496":1,"1599":1}}],["servicebusemulatorfixture",{"3":{"1199":3,"1207":3,"1436":2,"1438":2}}],["servicebusemulatorfixturebasetests",{"3":{"1199":1,"1207":4,"1436":1,"1438":1,"1487":1}}],["servicebusemulatorfixturebase",{"2":{"145":1,"638":1,"640":1,"1077":1,"1671":1},"3":{"145":1,"150":3,"638":1,"640":2,"642":1,"1074":1,"1077":1,"1199":4,"1207":2,"1323":2,"1436":4,"1438":2,"1488":1,"1496":1,"1671":1}}],["servicebusemulatorresource",{"2":{"640":1,"1444":2},"3":{"640":1,"1199":3,"1203":1,"1207":2,"1327":5,"1339":6,"1441":2,"1444":4,"1451":1,"1496":1}}],["servicebusemulatorsupporttests",{"3":{"1199":1,"1207":2,"1323":2,"1438":2}}],["servicebusemulatorsupport",{"2":{"638":1,"640":1,"1320":1},"3":{"150":3,"638":1,"640":2,"1074":1,"1199":2,"1203":1,"1207":2,"1320":3,"1323":10,"1496":1}}],["servicebus",{"2":{"145":1,"147":1,"149":1,"150":1,"152":1,"810":1,"1074":1,"1075":2,"1077":1,"1078":1},"3":{"0":2,"145":4,"147":2,"149":1,"150":2,"152":1,"624":2,"626":1,"640":4,"810":1,"1074":1,"1075":2,"1077":1,"1078":1,"1213":1,"1323":2,"1339":1,"1436":5,"1438":1,"1441":1,"1444":1,"1455":1,"1460":1,"1489":1,"1490":1,"1526":2,"1600":1}}],["serviceexceptionhelper",{"3":{"0":1,"109":1,"265":1}}],["services",{"0":{"1354":1,"1509":1,"1663":1},"1":{"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1},"2":{"92":1,"95":1,"96":1,"104":1,"121":1,"180":1,"265":1,"300":1,"412":1,"454":2,"846":1,"954":3,"979":8,"980":1,"981":1,"1004":1,"1207":2,"1247":2,"1249":1,"1269":1,"1307":1,"1309":1,"1310":1,"1369":1,"1377":1,"1395":1,"1396":3,"1416":2,"1417":6,"1441":1,"1447":1,"1455":1,"1486":1,"1491":1,"1653":2,"1684":1,"1702":1,"1728":1,"1810":1,"1935":1,"2010":1,"2020":1,"2023":1,"2027":1,"2096":1,"2099":1,"2134":1},"3":{"0":14,"20":1,"24":1,"30":1,"31":4,"46":4,"49":3,"53":2,"55":2,"56":1,"59":1,"60":2,"61":1,"62":1,"63":2,"73":1,"92":1,"93":3,"94":2,"95":8,"96":5,"97":1,"98":5,"99":1,"102":1,"103":1,"104":1,"105":1,"107":1,"109":1,"117":2,"121":1,"142":1,"157":2,"175":2,"180":1,"181":1,"186":2,"195":4,"203":1,"235":6,"241":2,"242":1,"243":14,"245":9,"247":1,"248":1,"254":2,"258":2,"259":5,"260":4,"261":2,"264":1,"265":4,"281":1,"283":2,"295":7,"300":2,"303":1,"310":1,"312":1,"313":1,"318":1,"330":5,"331":1,"333":4,"336":1,"337":3,"341":1,"349":2,"353":1,"387":2,"388":1,"390":5,"391":2,"392":3,"396":1,"400":1,"401":2,"412":1,"413":4,"416":2,"418":1,"420":1,"423":1,"426":2,"427":1,"428":5,"429":1,"430":2,"434":1,"436":1,"447":1,"448":5,"449":1,"451":1,"452":2,"454":4,"459":3,"461":1,"482":1,"486":2,"487":1,"489":1,"490":1,"491":2,"492":2,"493":1,"505":1,"507":12,"508":1,"509":2,"511":1,"512":1,"513":3,"514":3,"518":1,"536":1,"538":2,"539":1,"541":1,"545":1,"549":1,"552":1,"556":1,"558":1,"572":4,"574":1,"577":1,"578":1,"582":1,"583":9,"584":1,"585":7,"586":1,"600":2,"602":1,"640":2,"642":1,"644":1,"649":2,"657":2,"665":2,"668":1,"669":1,"674":7,"682":3,"690":2,"698":1,"707":1,"715":2,"723":1,"725":2,"727":1,"733":3,"736":1,"740":1,"741":1,"744":1,"749":6,"751":1,"773":1,"774":3,"775":1,"790":1,"810":1,"826":2,"827":5,"831":1,"833":1,"837":1,"838":2,"846":2,"854":2,"868":3,"869":2,"870":2,"873":3,"876":8,"877":3,"881":27,"897":2,"905":1,"913":2,"914":1,"916":1,"930":2,"931":1,"950":1,"953":1,"954":8,"979":10,"980":5,"981":1,"983":1,"998":4,"999":2,"1004":4,"1006":1,"1025":1,"1026":2,"1028":1,"1029":1,"1050":4,"1059":5,"1069":2,"1082":1,"1086":1,"1090":1,"1092":1,"1095":1,"1100":1,"1103":1,"1104":1,"1116":1,"1140":1,"1161":1,"1178":1,"1183":2,"1184":3,"1192":7,"1199":17,"1201":1,"1202":4,"1203":293,"1206":1,"1207":1067,"1208":61,"1212":5,"1213":2,"1227":1,"1229":3,"1237":2,"1241":4,"1242":2,"1243":5,"1244":1,"1246":2,"1247":92,"1248":1,"1249":1,"1252":1,"1253":1,"1256":3,"1257":1,"1259":10,"1262":3,"1269":1,"1270":12,"1271":1,"1275":3,"1276":1,"1278":1,"1281":1,"1285":1,"1286":33,"1287":1,"1300":51,"1301":22,"1304":1,"1305":1,"1307":9,"1309":55,"1310":32,"1311":78,"1312":36,"1314":3,"1316":2,"1320":1,"1323":44,"1324":368,"1325":6,"1326":2,"1328":3,"1331":6,"1332":11,"1333":1,"1334":4,"1335":5,"1336":1,"1337":1,"1338":1,"1339":77,"1340":1,"1341":1,"1345":1,"1349":1,"1350":18,"1351":1,"1352":1,"1353":1,"1354":1,"1355":2,"1359":95,"1360":1,"1368":1,"1369":9,"1377":1,"1378":7,"1379":3,"1380":52,"1381":3,"1382":25,"1385":1,"1386":7,"1387":12,"1388":8,"1389":3,"1390":3,"1391":3,"1392":2,"1393":2,"1395":209,"1396":239,"1401":7,"1402":32,"1404":2,"1406":3,"1409":1,"1413":1,"1414":2,"1415":82,"1416":36,"1417":365,"1421":1,"1427":6,"1428":1,"1429":1,"1431":1,"1432":4,"1434":1,"1435":3,"1436":77,"1437":7,"1438":49,"1440":1,"1441":12,"1442":2,"1443":5,"1444":2,"1445":3,"1446":3,"1447":7,"1448":1,"1449":2,"1455":5,"1456":4,"1460":1,"1461":1,"1464":10,"1467":32,"1469":1,"1473":1,"1474":1,"1477":1,"1486":1,"1487":6,"1488":5,"1489":2,"1490":4,"1491":2,"1496":30,"1498":2,"1508":1,"1509":2,"1523":1,"1526":9,"1531":2,"1534":2,"1535":3,"1538":1,"1541":1,"1542":2,"1544":4,"1547":1,"1548":1,"1549":1,"1550":1,"1555":1,"1556":2,"1570":1,"1577":9,"1582":3,"1586":2,"1588":1,"1589":2,"1591":13,"1596":5,"1599":1,"1600":1,"1611":2,"1613":1,"1619":1,"1629":1,"1638":1,"1641":1,"1651":1,"1652":1,"1653":5,"1656":5,"1663":1,"1667":1,"1669":2,"1677":1,"1678":1,"1684":1,"1702":2,"1708":1,"1724":1,"1728":1,"1761":1,"1765":3,"1770":2,"1790":2,"1792":2,"1808":2,"1810":1,"1824":1,"1835":1,"1848":1,"1850":1,"1852":2,"1864":1,"1878":1,"1882":1,"1883":3,"1887":1,"1893":1,"1894":2,"1895":2,"1896":1,"1897":1,"1898":1,"1899":1,"1908":3,"1916":1,"1920":1,"1923":1,"1926":1,"1935":1,"1948":2,"1970":1,"2005":1,"2009":1,"2010":2,"2011":1,"2016":1,"2020":1,"2023":1,"2024":1,"2025":2,"2026":1,"2027":1,"2029":1,"2031":1,"2056":3,"2069":1,"2084":2,"2085":3,"2088":1,"2096":2,"2099":1,"2112":1,"2113":1,"2115":1,"2119":1,"2120":2,"2121":1,"2123":3,"2125":1,"2129":1,"2132":2,"2133":2,"2134":1,"2138":1,"2156":1,"2157":1,"2158":3,"2166":1,"2170":1,"2179":1,"2204":1,"2210":1,"2231":1,"2232":1,"2234":2}}],["service",{"0":{"95":1,"1225":1,"1244":1,"1327":1,"1329":1,"1346":1,"1379":1,"1400":1,"1402":1,"1413":1,"1442":1,"1443":1,"1473":1,"1510":1,"1656":1,"1946":1,"2022":1,"2036":1},"1":{"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"746":1,"747":1,"748":1,"749":1,"750":1,"751":1,"752":1,"753":1,"771":1,"772":1,"773":1,"774":1,"775":1,"776":1,"777":1,"778":1,"1238":1,"1239":1,"1240":1,"1241":1,"1242":1,"1243":1,"1244":1,"1245":1,"1246":1,"1247":1,"1312":1,"1325":1,"1326":1,"1327":1,"1328":1,"1329":1,"1330":1,"1331":1,"1332":1,"1333":1,"1334":1,"1335":1,"1336":1,"1337":1,"1338":1,"1339":1,"1370":1,"1371":1,"1372":1,"1373":1,"1374":1,"1375":1,"1376":1,"1377":1,"1378":1,"1379":1,"1380":1,"1847":1,"1848":1,"1849":1,"1850":1,"1851":1,"1852":1,"1853":1,"1893":1,"1894":1,"1895":1,"1896":1,"1897":1,"1898":1,"1899":1,"2016":1,"2017":1,"2018":1,"2019":1,"2020":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1,"2027":1,"2028":1,"2029":1},"2":{"62":1,"229":1,"493":3,"1363":1,"1370":1,"1379":1,"1404":1,"1445":4,"1469":1,"1525":1,"1613":1,"1703":1},"3":{"0":82,"10":1,"15":1,"28":1,"30":7,"31":6,"32":3,"40":1,"44":1,"46":1,"47":5,"48":1,"49":1,"50":1,"52":1,"53":3,"54":1,"55":2,"57":2,"59":14,"60":4,"61":5,"62":6,"63":3,"64":3,"67":1,"68":2,"77":2,"81":1,"91":4,"92":6,"93":6,"94":3,"95":8,"96":5,"97":3,"98":5,"99":2,"100":5,"102":2,"103":3,"105":2,"107":1,"109":3,"110":1,"111":1,"115":1,"117":9,"122":2,"126":2,"127":1,"136":2,"145":2,"146":1,"147":1,"150":7,"152":2,"153":1,"155":1,"158":2,"159":2,"165":2,"167":1,"169":1,"174":2,"175":3,"176":1,"177":3,"181":1,"186":1,"191":2,"195":23,"196":2,"197":2,"200":5,"201":4,"202":1,"203":1,"216":1,"217":1,"219":1,"220":1,"224":1,"229":4,"234":1,"235":6,"236":1,"237":1,"241":4,"243":14,"245":13,"249":1,"255":7,"257":1,"258":1,"259":3,"260":5,"279":1,"280":1,"281":1,"283":3,"285":1,"288":1,"290":2,"291":7,"292":3,"293":2,"294":2,"295":8,"296":1,"300":1,"302":2,"313":1,"329":1,"330":1,"343":1,"349":2,"350":3,"352":1,"361":1,"380":1,"381":1,"382":1,"386":3,"387":4,"388":1,"389":2,"390":10,"391":3,"392":3,"395":3,"396":1,"397":2,"398":2,"399":1,"400":3,"401":6,"403":1,"407":1,"412":1,"413":2,"415":1,"418":2,"420":1,"426":3,"428":3,"429":2,"430":1,"433":1,"435":1,"446":2,"447":2,"448":6,"449":1,"450":1,"451":1,"452":8,"453":1,"454":1,"458":3,"459":3,"461":3,"471":1,"473":1,"493":4,"497":1,"498":1,"499":2,"500":1,"506":1,"513":3,"517":1,"518":1,"521":2,"524":1,"535":1,"536":3,"539":1,"541":1,"544":1,"545":1,"547":1,"548":1,"556":1,"558":2,"563":1,"564":1,"568":3,"572":5,"573":1,"574":2,"582":3,"583":18,"584":3,"585":5,"586":1,"587":1,"597":2,"598":3,"599":8,"600":1,"601":1,"602":8,"605":2,"609":2,"612":1,"624":1,"625":2,"626":9,"628":1,"633":1,"638":7,"639":2,"640":20,"641":4,"642":8,"643":10,"644":3,"645":1,"657":1,"659":1,"664":3,"665":5,"667":1,"668":2,"669":1,"674":5,"675":1,"690":3,"691":1,"692":4,"693":1,"696":1,"697":1,"699":1,"702":2,"706":3,"707":1,"708":1,"709":1,"711":1,"715":2,"725":4,"726":1,"727":1,"731":2,"732":1,"733":6,"741":1,"744":2,"746":1,"749":11,"750":3,"751":3,"756":1,"757":3,"758":4,"759":1,"762":2,"764":1,"766":2,"768":3,"771":1,"773":6,"774":21,"775":2,"776":5,"777":1,"778":3,"783":1,"786":1,"789":1,"790":1,"791":1,"792":1,"793":3,"794":1,"799":1,"809":1,"810":3,"815":2,"818":1,"819":4,"820":1,"821":2,"822":1,"823":1,"825":2,"826":10,"827":8,"828":2,"829":2,"834":2,"836":1,"837":2,"838":3,"839":1,"842":1,"846":1,"848":1,"854":4,"857":1,"860":1,"868":3,"869":12,"870":3,"872":2,"873":3,"875":1,"876":8,"877":2,"881":1,"883":2,"896":1,"897":2,"905":1,"906":1,"907":1,"913":4,"914":10,"915":3,"918":1,"922":1,"930":1,"931":2,"933":1,"935":1,"939":1,"950":1,"952":1,"954":4,"956":1,"960":1,"980":2,"987":3,"990":1,"992":1,"994":1,"995":1,"996":1,"998":3,"999":3,"1000":1,"1004":1,"1011":2,"1012":2,"1013":1,"1016":2,"1017":3,"1018":8,"1021":1,"1024":1,"1026":1,"1027":2,"1028":2,"1029":1,"1030":2,"1034":2,"1043":1,"1058":1,"1059":5,"1061":1,"1063":1,"1066":2,"1067":7,"1068":1,"1069":1,"1070":1,"1073":1,"1074":3,"1075":8,"1076":1,"1083":1,"1085":1,"1090":1,"1093":3,"1094":3,"1095":1,"1100":1,"1107":1,"1108":1,"1116":4,"1117":1,"1118":1,"1119":1,"1124":1,"1127":1,"1135":1,"1140":1,"1150":1,"1155":2,"1175":2,"1176":1,"1185":1,"1187":2,"1191":2,"1192":15,"1198":2,"1199":12,"1202":10,"1203":22,"1206":4,"1207":36,"1208":4,"1212":28,"1213":6,"1218":1,"1225":2,"1229":1,"1237":8,"1238":2,"1239":1,"1241":1,"1242":1,"1243":1,"1244":2,"1245":3,"1246":1,"1247":16,"1248":2,"1249":1,"1251":1,"1252":2,"1253":1,"1254":1,"1257":2,"1258":2,"1259":55,"1262":3,"1263":1,"1265":2,"1269":2,"1270":23,"1271":2,"1272":1,"1273":1,"1275":3,"1276":2,"1277":2,"1280":1,"1286":78,"1287":1,"1288":6,"1289":1,"1290":5,"1292":1,"1294":1,"1297":1,"1300":68,"1301":34,"1302":1,"1303":2,"1304":2,"1306":1,"1307":9,"1308":1,"1309":77,"1310":9,"1311":149,"1312":60,"1313":3,"1314":3,"1315":2,"1316":2,"1318":3,"1320":3,"1321":1,"1323":100,"1324":111,"1325":12,"1326":10,"1327":4,"1328":8,"1329":2,"1330":1,"1331":6,"1332":13,"1333":7,"1334":3,"1335":5,"1336":2,"1337":5,"1338":2,"1339":193,"1340":2,"1341":4,"1344":1,"1346":3,"1347":1,"1348":2,"1349":3,"1350":52,"1354":4,"1355":1,"1356":1,"1359":97,"1361":1,"1363":2,"1366":2,"1368":2,"1369":13,"1370":5,"1373":1,"1377":1,"1378":7,"1379":5,"1380":107,"1381":1,"1382":2,"1383":1,"1385":1,"1386":1,"1388":2,"1389":2,"1390":2,"1391":3,"1392":1,"1395":167,"1396":232,"1398":1,"1400":4,"1401":2,"1402":49,"1403":2,"1404":2,"1406":7,"1409":6,"1410":1,"1412":2,"1413":6,"1414":1,"1415":134,"1416":9,"1417":44,"1425":1,"1427":8,"1428":1,"1429":3,"1430":3,"1431":4,"1432":2,"1435":1,"1436":180,"1437":7,"1438":49,"1439":4,"1440":2,"1441":43,"1442":15,"1443":7,"1444":8,"1445":12,"1446":12,"1447":14,"1449":6,"1450":1,"1451":1,"1452":1,"1455":32,"1456":11,"1459":1,"1460":15,"1461":1,"1462":1,"1463":1,"1464":10,"1465":1,"1467":91,"1469":9,"1471":3,"1473":16,"1474":6,"1475":3,"1476":7,"1477":4,"1478":2,"1481":1,"1482":4,"1483":1,"1484":1,"1486":7,"1487":13,"1488":10,"1489":12,"1490":24,"1491":2,"1492":12,"1493":1,"1496":34,"1497":1,"1498":3,"1500":1,"1509":3,"1510":1,"1523":1,"1524":2,"1525":3,"1526":46,"1531":6,"1532":8,"1534":14,"1535":11,"1544":5,"1545":2,"1546":1,"1547":2,"1548":2,"1550":1,"1553":1,"1556":1,"1566":2,"1568":2,"1572":4,"1575":3,"1576":3,"1577":8,"1581":1,"1582":1,"1583":1,"1585":2,"1586":1,"1588":1,"1589":4,"1590":4,"1591":46,"1595":4,"1596":13,"1597":6,"1599":5,"1600":6,"1611":11,"1612":3,"1613":2,"1614":1,"1615":1,"1616":1,"1617":1,"1618":1,"1619":2,"1626":2,"1630":3,"1631":6,"1632":6,"1635":2,"1636":1,"1637":2,"1638":4,"1639":1,"1640":4,"1641":2,"1646":2,"1647":2,"1650":1,"1651":2,"1652":1,"1653":2,"1654":3,"1656":12,"1660":5,"1662":2,"1663":9,"1664":1,"1665":2,"1666":3,"1667":1,"1668":1,"1670":8,"1671":4,"1675":2,"1676":1,"1677":2,"1678":1,"1680":1,"1686":1,"1687":1,"1697":1,"1699":1,"1702":1,"1703":2,"1707":2,"1709":2,"1715":1,"1718":2,"1721":1,"1724":3,"1727":1,"1749":1,"1750":1,"1752":3,"1761":2,"1763":2,"1765":3,"1769":2,"1770":1,"1772":1,"1775":2,"1778":1,"1779":3,"1781":1,"1783":5,"1786":2,"1788":4,"1790":10,"1792":4,"1793":4,"1803":1,"1805":1,"1808":2,"1810":1,"1817":1,"1818":1,"1823":1,"1824":2,"1825":1,"1826":2,"1827":1,"1839":2,"1841":4,"1842":4,"1843":2,"1845":2,"1846":1,"1847":3,"1848":3,"1852":3,"1853":4,"1855":2,"1863":1,"1864":1,"1865":1,"1875":1,"1882":2,"1883":1,"1884":4,"1886":3,"1887":2,"1888":1,"1892":3,"1893":7,"1894":2,"1895":3,"1896":2,"1897":2,"1898":3,"1899":4,"1903":1,"1916":2,"1919":1,"1920":1,"1921":1,"1922":7,"1923":5,"1924":3,"1927":3,"1928":1,"1929":2,"1940":1,"1944":1,"1946":4,"1948":4,"1949":1,"1950":1,"1951":1,"1962":2,"1965":1,"1968":1,"1970":2,"1974":1,"1975":1,"1978":3,"1980":1,"1982":1,"1988":2,"1995":1,"2000":1,"2001":5,"2002":3,"2003":2,"2004":2,"2005":4,"2007":5,"2009":11,"2010":4,"2011":2,"2013":1,"2014":3,"2015":6,"2016":2,"2019":4,"2020":2,"2021":2,"2022":4,"2023":3,"2024":4,"2025":11,"2026":5,"2027":1,"2028":4,"2029":4,"2030":1,"2031":4,"2032":2,"2034":3,"2035":3,"2036":6,"2037":5,"2038":5,"2039":3,"2044":1,"2050":1,"2054":2,"2056":4,"2061":1,"2064":2,"2068":2,"2069":3,"2076":1,"2078":1,"2082":1,"2084":2,"2087":1,"2089":1,"2109":1,"2113":5,"2115":5,"2117":1,"2119":1,"2120":1,"2121":1,"2125":1,"2129":4,"2130":1,"2132":3,"2133":7,"2134":4,"2137":1,"2140":2,"2147":1,"2152":1,"2153":1,"2156":1,"2157":1,"2158":6,"2162":1,"2164":1,"2166":2,"2168":2,"2169":2,"2170":1,"2177":2,"2181":3,"2182":1,"2192":1,"2195":1,"2196":1,"2203":1,"2204":3,"2209":2,"2210":1,"2211":2,"2215":1,"2216":2,"2221":2,"2223":2,"2228":1,"2229":3,"2230":1,"2232":8,"2234":11,"2245":2}}],["servefromcacheasync",{"3":{"1311":1}}],["serve",{"3":{"0":2,"53":1,"55":1,"91":2,"92":2,"97":2,"98":2,"100":1,"101":1,"213":1,"234":1,"235":1,"236":1,"237":1,"243":1,"264":1,"265":1,"266":1,"388":1,"441":1,"451":1,"506":1,"556":1,"571":1,"733":1,"741":1,"751":1,"774":1,"819":1,"825":1,"829":1,"945":1,"1043":1,"1191":1,"1200":1,"1237":1,"1239":1,"1246":1,"1247":4,"1259":1,"1267":1,"1270":4,"1276":1,"1278":1,"1286":17,"1300":4,"1301":2,"1309":1,"1310":2,"1311":8,"1312":1,"1317":1,"1323":2,"1324":9,"1332":2,"1337":1,"1339":8,"1350":1,"1357":1,"1359":12,"1362":1,"1369":3,"1380":8,"1395":6,"1396":13,"1402":1,"1415":2,"1416":2,"1417":3,"1436":3,"1441":1,"1443":3,"1467":2,"1475":1,"1476":3,"1488":1,"1534":1,"1631":1,"1634":1,"1667":1,"1708":1,"1821":1,"1849":1,"1899":1,"1920":1,"1922":1,"1946":1,"1988":1,"2015":1,"2026":3,"2129":1,"2130":1,"2149":1,"2155":1}}],["served",{"3":{"0":7,"37":1,"42":1,"164":1,"170":2,"175":1,"176":1,"177":1,"233":1,"235":2,"242":1,"243":2,"341":2,"388":1,"391":1,"418":4,"420":1,"423":2,"424":2,"426":1,"428":1,"429":1,"433":1,"447":1,"450":1,"461":1,"573":1,"577":1,"707":1,"733":1,"735":1,"740":1,"749":1,"761":1,"826":2,"827":1,"905":1,"947":1,"1099":1,"1116":1,"1124":1,"1185":1,"1212":1,"1221":1,"1246":1,"1247":1,"1263":1,"1264":1,"1267":2,"1270":5,"1286":5,"1288":1,"1297":1,"1300":4,"1301":1,"1306":2,"1309":6,"1311":9,"1323":3,"1324":14,"1339":1,"1347":1,"1350":6,"1358":1,"1359":5,"1379":3,"1380":5,"1395":7,"1396":8,"1400":1,"1402":1,"1406":1,"1415":5,"1416":2,"1427":1,"1436":3,"1438":2,"1446":2,"1447":2,"1453":2,"1454":2,"1455":19,"1456":2,"1457":1,"1458":2,"1459":3,"1466":1,"1467":3,"1473":1,"1481":2,"1488":1,"1526":2,"1591":3,"1631":1,"1640":1,"1641":1,"1651":1,"1708":1,"1748":1,"1765":1,"1821":1,"1825":1,"1849":1,"1857":1,"1917":1,"1920":1,"1922":3,"1926":1,"1936":1,"2008":1,"2025":2,"2056":1,"2077":1,"2127":1,"2132":1,"2134":2,"2135":1,"2142":1,"2152":1,"2204":1,"2222":1,"2234":1}}],["serves",{"3":{"0":4,"63":1,"91":2,"93":1,"95":1,"98":3,"102":2,"110":1,"113":2,"170":1,"213":1,"216":2,"229":1,"265":1,"291":1,"391":1,"418":1,"448":2,"509":1,"536":1,"546":1,"571":1,"574":1,"577":1,"584":1,"633":1,"650":1,"665":1,"676":1,"697":1,"698":2,"725":1,"756":1,"758":1,"767":1,"832":1,"869":1,"877":1,"881":1,"882":1,"889":1,"926":2,"947":1,"954":1,"972":1,"1034":1,"1059":3,"1067":2,"1118":1,"1150":1,"1184":1,"1212":2,"1237":1,"1247":4,"1249":1,"1259":3,"1263":1,"1270":5,"1277":1,"1281":1,"1286":15,"1287":1,"1300":4,"1309":6,"1311":19,"1312":1,"1323":2,"1324":20,"1325":1,"1331":1,"1332":3,"1339":9,"1350":2,"1356":1,"1359":9,"1362":2,"1366":1,"1369":4,"1371":1,"1376":1,"1378":1,"1380":3,"1391":1,"1393":1,"1395":9,"1396":14,"1400":1,"1402":2,"1407":2,"1408":1,"1409":2,"1413":1,"1415":6,"1416":2,"1417":1,"1431":2,"1433":1,"1436":22,"1438":1,"1441":2,"1444":1,"1447":3,"1448":1,"1449":1,"1453":1,"1455":1,"1456":1,"1457":1,"1467":2,"1475":1,"1481":1,"1491":1,"1513":1,"1591":1,"1596":1,"1627":2,"1649":1,"1666":1,"1668":1,"1720":1,"1750":1,"1760":1,"1761":1,"1790":1,"1851":2,"1884":1,"1895":1,"1922":1,"1923":1,"1929":1,"1989":1,"1996":2,"2000":1,"2018":1,"2022":1,"2026":4,"2056":1,"2075":1,"2079":1,"2123":1,"2128":1,"2133":1,"2151":1,"2152":1,"2154":2,"2165":1,"2177":1,"2203":1,"2234":2}}],["serverless",{"3":{"1568":1,"1678":1}}],["server=true",{"3":{"1456":1,"1534":1}}],["serververdict",{"3":{"1436":1}}],["serveresponseasync",{"3":{"1311":1}}],["servercallcontext",{"3":{"1309":2,"1380":2,"1396":2,"1415":1,"1438":1}}],["servertokenstorageservicetests",{"3":{"1199":1,"1207":3,"1324":2,"1438":1}}],["servertokenstorageservice",{"2":{"486":1,"487":1,"489":1,"490":1,"491":1,"492":1,"507":1},"3":{"486":2,"487":2,"489":2,"490":2,"491":2,"492":3,"507":8,"514":1,"1199":4,"1203":1,"1207":2,"1300":2,"1324":18,"1416":1,"1417":1,"1438":1,"1487":1,"1496":2,"1590":1,"1591":2,"1600":1}}],["serverstreamingserverhandler",{"3":{"1312":1}}],["servers",{"2":{"1929":1},"3":{"91":1,"1192":1,"1202":1,"1203":1,"1301":3,"1359":1,"1370":1,"1436":1,"1437":1,"1474":1,"1929":1,"2222":1}}],["serverdata=",{"3":{"1395":1}}],["serverdata",{"2":{"2074":1,"2078":1},"3":{"0":1,"556":1,"881":1,"1324":5,"1383":1,"1395":6,"1526":1,"2074":1,"2078":1}}],["server",{"0":{"1378":1,"2019":1},"1":{"1121":1,"1122":1,"1123":1,"1124":1,"1125":1,"1126":1,"1127":1,"1128":1,"1129":1},"2":{"402":1,"409":1,"451":1,"452":1,"1698":1,"2161":1},"3":{"0":49,"10":2,"13":1,"45":1,"47":1,"53":2,"86":1,"91":2,"92":2,"97":2,"100":1,"103":1,"109":5,"117":1,"128":1,"158":1,"164":3,"165":2,"166":6,"170":9,"171":1,"174":2,"175":3,"176":1,"179":3,"180":1,"201":1,"206":3,"207":2,"208":2,"217":1,"228":1,"237":1,"241":1,"243":1,"258":1,"264":1,"265":7,"273":2,"330":2,"333":1,"337":1,"341":4,"342":4,"343":2,"350":1,"351":1,"363":1,"384":2,"387":1,"389":1,"397":2,"402":2,"409":1,"412":1,"413":1,"415":3,"419":1,"434":1,"436":1,"440":1,"443":1,"451":1,"452":1,"470":1,"499":1,"501":1,"506":3,"507":5,"508":2,"547":1,"549":1,"555":2,"556":5,"557":2,"558":3,"560":1,"572":1,"574":1,"609":1,"632":1,"633":5,"640":1,"644":1,"648":2,"650":1,"653":1,"664":1,"682":1,"684":1,"689":1,"690":3,"691":1,"692":1,"708":1,"719":4,"735":1,"741":1,"749":1,"766":1,"826":1,"827":3,"828":1,"830":2,"833":2,"855":2,"857":1,"860":2,"863":1,"865":2,"879":1,"880":2,"881":6,"882":3,"883":1,"884":1,"885":4,"889":2,"890":1,"892":1,"905":3,"909":1,"913":1,"914":1,"926":1,"971":1,"972":1,"974":1,"987":1,"988":1,"1004":1,"1028":1,"1033":4,"1034":18,"1035":2,"1036":3,"1044":1,"1050":2,"1052":1,"1067":1,"1069":1,"1083":1,"1085":1,"1091":1,"1116":2,"1117":1,"1121":1,"1123":3,"1124":1,"1129":1,"1132":1,"1133":1,"1134":1,"1135":1,"1144":1,"1174":2,"1175":2,"1176":1,"1182":1,"1184":9,"1185":2,"1187":2,"1192":1,"1212":12,"1213":3,"1217":1,"1219":2,"1225":1,"1227":1,"1229":7,"1236":1,"1237":3,"1239":1,"1241":5,"1242":6,"1243":2,"1245":2,"1247":24,"1259":2,"1265":2,"1270":6,"1271":3,"1273":2,"1274":1,"1277":1,"1278":1,"1279":7,"1280":5,"1281":1,"1282":3,"1284":3,"1286":141,"1287":2,"1289":1,"1290":1,"1298":5,"1300":49,"1301":17,"1306":1,"1309":30,"1310":4,"1311":39,"1312":28,"1317":1,"1320":1,"1321":1,"1323":8,"1324":253,"1326":2,"1327":2,"1332":2,"1333":3,"1334":2,"1339":43,"1342":3,"1347":1,"1350":21,"1352":1,"1355":1,"1357":1,"1358":1,"1359":54,"1360":1,"1361":1,"1369":7,"1378":2,"1379":1,"1380":13,"1381":1,"1382":1,"1383":2,"1384":3,"1385":1,"1387":1,"1388":2,"1389":1,"1390":1,"1391":1,"1392":3,"1393":1,"1395":182,"1396":170,"1399":1,"1401":1,"1402":22,"1408":1,"1410":1,"1414":3,"1415":31,"1416":21,"1417":88,"1419":1,"1427":1,"1428":1,"1429":3,"1431":1,"1432":1,"1433":1,"1436":79,"1437":8,"1438":27,"1440":1,"1441":12,"1443":10,"1446":3,"1447":2,"1451":2,"1453":8,"1455":3,"1456":2,"1457":2,"1460":2,"1467":42,"1473":3,"1474":3,"1475":5,"1476":2,"1477":1,"1478":2,"1486":4,"1487":4,"1488":7,"1489":2,"1490":15,"1492":4,"1496":5,"1510":1,"1513":1,"1526":16,"1531":1,"1532":2,"1534":3,"1535":2,"1554":1,"1556":4,"1560":2,"1561":3,"1563":1,"1564":1,"1572":3,"1577":9,"1582":3,"1583":1,"1585":1,"1586":1,"1591":9,"1595":1,"1596":2,"1597":1,"1599":8,"1600":1,"1602":1,"1611":2,"1618":1,"1626":1,"1627":2,"1630":2,"1631":5,"1632":2,"1635":1,"1638":1,"1639":3,"1640":5,"1641":5,"1647":2,"1648":2,"1653":7,"1654":1,"1656":1,"1660":2,"1664":2,"1666":1,"1667":2,"1668":2,"1669":4,"1671":2,"1673":2,"1675":1,"1677":3,"1681":1,"1682":1,"1685":1,"1687":1,"1692":1,"1693":1,"1697":1,"1698":1,"1702":3,"1709":1,"1717":2,"1718":3,"1719":1,"1720":2,"1721":2,"1723":1,"1724":2,"1725":1,"1727":2,"1731":2,"1748":1,"1749":1,"1750":1,"1752":1,"1757":1,"1759":2,"1763":3,"1765":1,"1767":1,"1773":2,"1774":1,"1775":1,"1781":1,"1790":2,"1805":2,"1814":1,"1815":3,"1817":2,"1829":1,"1840":2,"1851":1,"1853":1,"1854":3,"1855":1,"1856":4,"1857":2,"1858":1,"1859":2,"1860":2,"1861":4,"1863":1,"1867":1,"1871":2,"1872":2,"1874":1,"1876":2,"1877":1,"1883":1,"1903":1,"1906":4,"1916":1,"1921":1,"1927":1,"1928":1,"1936":1,"1945":1,"1956":1,"1966":4,"1967":2,"1968":8,"1969":1,"1972":8,"1975":3,"1979":2,"1980":2,"1981":1,"1984":1,"1985":2,"1988":2,"1989":1,"1999":1,"2000":1,"2001":5,"2002":1,"2003":1,"2004":1,"2005":2,"2006":1,"2008":1,"2018":1,"2019":2,"2025":1,"2026":1,"2029":2,"2031":3,"2034":2,"2035":1,"2037":2,"2038":1,"2044":2,"2054":1,"2056":1,"2060":4,"2066":1,"2071":1,"2072":3,"2073":1,"2074":3,"2076":7,"2078":1,"2079":1,"2080":2,"2082":3,"2083":2,"2084":3,"2085":2,"2087":3,"2088":4,"2091":1,"2120":2,"2121":1,"2128":1,"2158":2,"2160":1,"2161":1,"2169":1,"2172":1,"2194":1,"2221":1,"2222":2,"2226":1,"2232":1,"2234":5}}],["selenium",{"3":{"2221":1,"2222":1}}],["selecteventasync",{"3":{"1359":2}}],["selectedrole",{"3":{"1415":1}}],["selectedroomidchanged",{"3":{"1395":1}}],["selectedroomid",{"3":{"1395":4}}],["selectedvalue",{"3":{"1396":1}}],["selectedsessionid",{"3":{"1396":1}}],["selectedstatus",{"3":{"1395":1}}],["selectedeventname",{"3":{"1395":1}}],["selectedeventidchanged",{"3":{"1395":1}}],["selectedeventid",{"3":{"1395":4}}],["selected",{"3":{"0":3,"31":1,"166":1,"170":1,"243":1,"253":1,"447":1,"448":1,"455":1,"674":1,"689":1,"774":1,"775":1,"778":1,"827":1,"840":1,"905":1,"945":1,"1016":1,"1091":1,"1133":1,"1192":1,"1202":1,"1203":1,"1212":1,"1257":1,"1286":7,"1291":1,"1300":2,"1301":2,"1310":1,"1311":5,"1323":2,"1324":2,"1339":3,"1350":4,"1356":1,"1359":3,"1376":1,"1380":1,"1389":1,"1395":15,"1396":3,"1402":1,"1415":2,"1416":1,"1417":6,"1418":1,"1427":2,"1433":2,"1436":4,"1467":1,"1496":1,"1577":1,"1626":1,"1627":1,"1630":1,"1635":1,"1653":1,"1656":1,"1663":1,"1671":1,"1842":1,"1895":1,"2013":1,"2021":1,"2048":1,"2132":1,"2133":1,"2135":1,"2182":1,"2234":2}}],["selectcurrentornext",{"3":{"1350":7,"1359":1,"1395":10,"1396":1}}],["selectcleartexturl",{"3":{"1339":2}}],["selectmany",{"3":{"1286":1,"1311":1,"1324":1,"1436":1}}],["selectable",{"3":{"178":1,"1342":1,"1350":3,"1475":1,"1591":1,"1667":1,"2003":1}}],["selective",{"3":{"780":1,"784":1,"1350":2}}],["selecting",{"3":{"0":1,"359":1,"846":1,"1247":2,"1284":1,"1286":3,"1300":1,"1311":1,"1350":1,"1359":2,"1395":1,"1396":1,"1436":2,"1492":1,"1687":1,"1748":1}}],["selections",{"3":{"1395":1}}],["selectionservice",{"3":{"1395":1}}],["selection",{"0":{"1348":1,"1390":1},"1":{"637":1,"638":1,"639":1,"640":1,"641":1,"642":1,"643":1,"644":1,"645":1},"2":{"1395":1},"3":{"0":1,"27":1,"86":2,"107":1,"185":1,"199":1,"225":1,"305":1,"312":1,"359":1,"365":1,"412":1,"449":1,"591":1,"637":1,"642":2,"643":1,"774":2,"823":1,"881":1,"913":1,"917":1,"945":1,"947":2,"1017":1,"1111":1,"1202":2,"1203":14,"1207":34,"1212":2,"1229":1,"1238":1,"1243":2,"1247":2,"1257":1,"1278":1,"1286":9,"1292":1,"1300":1,"1301":1,"1311":4,"1323":2,"1324":3,"1326":1,"1339":6,"1340":1,"1347":1,"1348":1,"1350":9,"1359":9,"1369":2,"1377":1,"1380":2,"1381":1,"1382":1,"1385":9,"1390":9,"1393":1,"1395":66,"1396":4,"1405":1,"1415":2,"1417":7,"1427":3,"1429":1,"1436":2,"1437":2,"1438":8,"1446":2,"1455":1,"1460":1,"1467":1,"1469":1,"1492":1,"1493":1,"1496":1,"1524":2,"1526":1,"1531":1,"1532":1,"1564":1,"1577":1,"1621":2,"1625":1,"1627":2,"1632":2,"1640":1,"1815":1,"1960":1,"2048":1,"2144":1,"2234":1}}],["selectors",{"3":{"1278":1,"1286":1,"1310":3,"1359":18,"1416":2,"1436":4,"1526":1,"1531":1,"1565":2,"1577":1,"1640":1,"1865":1,"1868":1}}],["selectorderedcandidates",{"2":{"1255":1},"3":{"1237":1,"1255":1,"1259":1}}],["selector",{"2":{"1833":1},"3":{"0":4,"328":1,"333":2,"640":2,"692":1,"755":1,"1192":1,"1229":1,"1239":1,"1247":6,"1271":25,"1286":12,"1300":1,"1310":7,"1311":3,"1323":1,"1324":3,"1339":1,"1348":1,"1353":3,"1359":129,"1395":7,"1396":4,"1415":1,"1416":1,"1436":17,"1487":1,"1526":1,"1534":1,"1577":1,"1750":1,"1773":1,"1829":2,"1830":1,"1833":3,"1834":1,"1859":1,"2234":1}}],["select",{"2":{"1238":1,"2079":1,"2142":1,"2195":1},"3":{"0":2,"235":1,"311":1,"330":1,"402":1,"536":1,"549":2,"550":1,"618":2,"620":1,"640":1,"649":1,"1238":1,"1242":1,"1243":1,"1247":4,"1269":1,"1270":2,"1271":2,"1286":14,"1287":1,"1309":3,"1311":3,"1323":1,"1324":2,"1326":1,"1332":1,"1333":1,"1339":4,"1350":4,"1359":14,"1362":1,"1369":1,"1380":4,"1395":2,"1396":12,"1402":4,"1415":10,"1417":2,"1433":1,"1436":5,"1438":1,"1441":1,"1443":1,"1444":1,"1446":1,"1467":1,"1488":2,"1577":1,"1677":1,"1750":1,"1815":1,"1988":1,"2009":1,"2011":1,"2023":1,"2058":1,"2079":1,"2142":1,"2144":1,"2195":1}}],["selectsortkey",{"3":{"1415":3}}],["selects",{"3":{"0":1,"98":1,"201":1,"280":1,"330":1,"332":1,"447":1,"448":1,"499":1,"539":1,"592":1,"599":1,"638":1,"644":1,"757":1,"905":1,"946":1,"1091":1,"1108":1,"1112":1,"1222":1,"1229":1,"1237":1,"1240":1,"1243":2,"1247":4,"1256":1,"1259":2,"1269":2,"1284":1,"1286":6,"1288":1,"1300":3,"1311":1,"1312":2,"1319":1,"1323":2,"1327":1,"1336":1,"1339":4,"1359":5,"1392":1,"1395":1,"1396":4,"1402":2,"1416":1,"1420":1,"1427":1,"1436":11,"1438":2,"1441":1,"1455":3,"1456":1,"1467":3,"1486":1,"1526":1,"1653":1,"1669":1,"1765":1,"1790":1,"1842":1,"1902":1,"1916":1,"1924":1,"1988":1,"2021":1,"2132":1,"2167":1,"2174":1}}],["selling",{"3":{"1395":1,"2112":1}}],["sell",{"3":{"1395":1,"1782":1}}],["sells",{"3":{"689":1,"698":1,"1025":1,"1035":1,"1395":2}}],["selfreference",{"3":{"1417":3}}],["selfhealasync",{"3":{"1301":2}}],["selfhttpwarmup",{"3":{"1396":1,"1415":1}}],["selfhttpwarmuptask",{"2":{"1191":1,"1498":1},"3":{"235":2,"1191":3,"1198":2,"1199":4,"1203":2,"1207":4,"1334":1,"1339":4,"1396":9,"1413":2,"1415":14,"1496":5,"1498":3}}],["selfhttpwarmuptaskbasetests",{"3":{"1199":1,"1207":8,"1339":3,"1438":1}}],["selfhttpwarmuptaskbase",{"2":{"233":1,"235":1,"238":1,"1413":1,"1668":1},"3":{"0":1,"233":1,"235":3,"238":1,"1199":6,"1203":1,"1207":2,"1334":2,"1339":5,"1379":1,"1380":3,"1396":2,"1413":1,"1415":1,"1438":1,"1443":7,"1496":1,"1668":1}}],["selfhttpoutputcache",{"3":{"1380":1}}],["selfhttpoutputcachewarmuptasktests",{"2":{"1379":1},"3":{"1199":1,"1207":2,"1379":1,"1380":2,"1438":1}}],["selfhttpoutputcachewarmuptask",{"2":{"1379":1},"3":{"235":4,"1199":2,"1203":1,"1207":2,"1324":2,"1334":1,"1339":4,"1379":3,"1380":8,"1395":5}}],["selfonlydeletefixture",{"3":{"1199":2,"1207":1,"1436":5}}],["selfmappingupcaster",{"3":{"1199":2,"1207":1}}],["selfcheckinoutcome",{"3":{"1199":5,"1203":1,"1207":2,"1396":20}}],["self",{"1":{"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"787":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"794":1,"795":1,"1878":1,"1879":1,"1880":1,"1881":1,"1882":1,"1883":1,"1884":1,"1885":1,"1886":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"1919":1,"1920":1,"1921":1,"1922":1,"1923":1,"1924":1,"1980":1,"1981":1,"1982":1,"1983":1,"1984":1,"1985":1},"3":{"0":8,"55":1,"109":1,"165":1,"195":1,"196":1,"212":3,"214":11,"215":1,"216":1,"219":10,"235":3,"236":1,"243":1,"245":1,"282":1,"288":1,"332":1,"333":1,"341":1,"359":1,"360":1,"389":1,"484":1,"486":1,"500":2,"563":1,"568":1,"684":1,"688":2,"689":1,"690":2,"691":3,"692":2,"707":1,"733":1,"757":1,"758":1,"787":1,"790":2,"791":1,"794":1,"821":1,"828":1,"846":1,"853":1,"856":1,"910":1,"964":2,"1020":1,"1050":1,"1052":1,"1100":1,"1161":1,"1192":1,"1212":2,"1235":1,"1237":3,"1247":3,"1270":4,"1271":1,"1286":4,"1288":1,"1292":1,"1300":9,"1309":5,"1310":2,"1311":10,"1312":1,"1317":1,"1323":10,"1324":25,"1328":1,"1332":3,"1336":2,"1339":26,"1350":13,"1359":13,"1373":2,"1375":2,"1378":1,"1380":10,"1388":2,"1395":9,"1396":52,"1402":8,"1406":1,"1407":1,"1411":1,"1415":14,"1416":2,"1417":1,"1431":1,"1434":1,"1436":40,"1438":3,"1441":1,"1443":3,"1455":3,"1459":1,"1460":1,"1467":3,"1469":1,"1486":2,"1492":1,"1493":1,"1496":3,"1510":1,"1526":1,"1534":1,"1552":1,"1575":2,"1577":11,"1582":1,"1586":1,"1591":2,"1600":1,"1611":1,"1613":1,"1630":2,"1632":3,"1641":2,"1665":1,"1749":1,"1764":1,"1779":3,"1792":1,"1810":1,"1845":1,"1877":1,"1878":1,"1884":2,"1912":1,"1913":1,"1923":1,"1924":1,"1979":1,"1980":1,"1991":1,"2002":1,"2003":1,"2008":1,"2010":1,"2023":1,"2030":1,"2031":1,"2077":2,"2081":1,"2129":1,"2144":1,"2148":3,"2151":5,"2152":15,"2154":1,"2171":1,"2209":1,"2210":2,"2234":1}}],["seeing",{"3":{"1247":1,"1301":3,"1311":1,"1350":1,"1359":3,"1369":1,"1381":1,"1395":1,"1396":3,"1415":2,"1436":3}}],["seekable",{"3":{"1286":1,"1323":1}}],["seeks",{"3":{"1278":1,"1286":2,"1402":1}}],["seeking",{"3":{"1228":1,"1229":1}}],["seeked",{"3":{"359":1}}],["seek",{"3":{"200":1,"361":1,"1228":1,"1229":4,"1259":3,"1278":1,"1286":10,"1311":1,"1396":6,"1438":2,"1577":1,"2146":1,"2147":1}}],["seenrequest",{"3":{"1199":2,"1207":1}}],["seen",{"3":{"100":1,"188":1,"341":2,"344":1,"527":1,"1093":1,"1229":2,"1259":2,"1270":1,"1276":1,"1286":1,"1300":4,"1301":1,"1309":2,"1311":1,"1312":1,"1323":2,"1324":4,"1350":3,"1359":9,"1380":1,"1396":3,"1402":1,"1415":1,"1416":1,"1423":1,"1427":2,"1436":2,"1467":1,"1685":1,"1708":1,"1808":1,"1851":1,"1927":1,"1964":1,"2165":1,"2177":1}}],["sees",{"3":{"0":5,"17":1,"39":1,"41":1,"47":1,"53":1,"78":1,"109":1,"125":2,"126":1,"160":1,"175":1,"177":1,"217":1,"224":1,"244":1,"255":1,"265":1,"318":1,"351":1,"371":1,"382":1,"384":1,"390":1,"471":1,"544":1,"564":1,"583":1,"584":1,"592":1,"609":1,"611":1,"620":1,"639":1,"675":1,"692":1,"698":1,"699":1,"700":1,"714":3,"715":1,"717":2,"725":1,"789":1,"795":1,"798":1,"821":1,"825":1,"826":1,"827":1,"828":1,"829":1,"831":1,"881":1,"926":2,"933":1,"966":1,"982":1,"988":1,"989":1,"1018":2,"1019":1,"1020":1,"1033":1,"1050":2,"1059":1,"1061":1,"1066":1,"1092":1,"1116":2,"1117":1,"1123":1,"1125":2,"1141":1,"1162":1,"1169":1,"1170":1,"1177":1,"1184":1,"1186":1,"1188":1,"1212":2,"1232":1,"1237":4,"1247":7,"1257":1,"1259":6,"1266":1,"1270":6,"1271":5,"1276":1,"1280":1,"1286":20,"1300":6,"1301":3,"1302":1,"1305":2,"1309":9,"1311":9,"1312":1,"1315":1,"1323":7,"1324":19,"1332":1,"1333":1,"1336":1,"1338":2,"1339":6,"1350":8,"1359":27,"1366":1,"1369":1,"1371":1,"1375":1,"1379":1,"1380":6,"1395":19,"1396":12,"1402":9,"1408":1,"1410":1,"1415":9,"1416":1,"1417":6,"1420":1,"1424":1,"1427":3,"1436":28,"1438":2,"1441":1,"1442":1,"1443":1,"1455":1,"1467":2,"1473":1,"1475":1,"1485":1,"1489":2,"1496":1,"1596":1,"1641":1,"1672":1,"1677":1,"1708":2,"1749":2,"1759":1,"1765":1,"1831":2,"1840":1,"1841":1,"1851":1,"1871":1,"1876":1,"1881":1,"1889":1,"1906":1,"1927":1,"1930":1,"1933":2,"1940":1,"1949":1,"1966":1,"1974":1,"1995":1,"2000":1,"2001":1,"2002":1,"2025":2,"2042":1,"2048":1,"2049":1,"2057":1,"2078":1,"2118":1,"2125":1,"2139":1,"2143":1,"2146":1,"2167":3,"2169":1}}],["seeddarkthemeasync",{"3":{"1436":2}}],["seeddevelopersconferenceeventasync",{"3":{"1369":1}}],["seedlive",{"3":{"1436":1}}],["seedpartnersasync",{"3":{"1369":3}}],["seedquestionsasync",{"3":{"1369":1}}],["seedcloudaiconferenceeventasync",{"3":{"1369":1}}],["seedable",{"3":{"1436":1}}],["seedactivitiesasync",{"3":{"1369":1}}],["seedaccountasync",{"3":{"1286":1}}],["seedaccount",{"3":{"1199":5,"1203":1,"1207":2,"1284":2,"1286":6,"1415":1,"1496":1}}],["seedasync",{"2":{"1315":1,"1881":1},"3":{"1286":6,"1315":2,"1323":3,"1369":3,"1380":2,"1415":4,"1881":1}}],["seedallasync",{"2":{"295":2},"3":{"295":2,"1286":1,"1315":1,"1323":2,"1369":1,"1881":1}}],["seededday",{"3":{"1395":1}}],["seededids",{"3":{"1199":2,"1207":1}}],["seeded",{"3":{"207":1,"295":2,"310":1,"499":1,"618":1,"657":1,"747":1,"749":1,"774":1,"1282":1,"1286":2,"1297":1,"1298":1,"1300":2,"1311":3,"1342":1,"1350":3,"1364":3,"1369":7,"1380":1,"1395":10,"1396":1,"1402":2,"1415":4,"1429":1,"1433":1,"1436":12,"1438":4,"1488":3,"1577":1,"1595":1,"1596":2,"1630":1,"1643":1,"1777":2,"1825":1,"2058":1}}],["seedermocks",{"3":{"1199":6,"1207":3}}],["seeders",{"3":{"295":2,"314":1,"583":2,"1272":1,"1276":1,"1284":1,"1286":4,"1300":1,"1311":2,"1323":4,"1777":1,"1851":1}}],["seeder",{"0":{"1377":1},"3":{"0":2,"295":7,"585":1,"698":1,"1237":2,"1246":1,"1247":1,"1253":1,"1270":1,"1286":20,"1300":1,"1311":2,"1315":1,"1323":9,"1350":3,"1359":2,"1360":1,"1364":1,"1369":9,"1380":6,"1412":1,"1415":12,"1437":1,"1438":2}}],["seeding",{"0":{"1284":1,"1364":1,"1412":1},"3":{"0":1,"295":6,"296":1,"310":4,"314":2,"470":1,"583":1,"698":1,"700":1,"946":2,"1192":1,"1202":1,"1203":7,"1207":32,"1284":6,"1286":28,"1300":1,"1311":2,"1315":1,"1323":5,"1350":1,"1359":2,"1364":2,"1369":12,"1377":2,"1380":5,"1412":3,"1415":13,"1436":2,"1438":1,"1441":2,"1444":1,"1487":1,"1500":3,"1595":1,"1596":2,"1600":1,"1618":1,"1631":1,"1638":1,"1641":1,"1662":1,"1664":2,"1777":1,"1881":1,"2014":1}}],["seed",{"0":{"1777":1},"3":{"0":2,"80":1,"146":1,"207":1,"295":6,"314":1,"369":1,"545":1,"551":1,"556":1,"562":1,"564":1,"566":1,"572":3,"583":1,"585":1,"616":1,"618":2,"620":1,"631":11,"632":1,"633":6,"634":2,"635":7,"636":2,"649":1,"651":1,"657":1,"658":1,"665":1,"666":1,"674":1,"698":1,"700":1,"782":2,"861":1,"980":1,"1004":1,"1034":1,"1036":1,"1037":1,"1190":1,"1212":1,"1229":1,"1234":1,"1237":1,"1270":1,"1284":3,"1286":18,"1300":6,"1301":1,"1311":1,"1315":1,"1324":4,"1335":1,"1336":1,"1339":5,"1364":1,"1369":5,"1380":3,"1395":1,"1396":3,"1415":3,"1436":8,"1486":1,"1488":1,"1489":2,"1492":6,"1577":1,"1596":2,"1597":1,"1600":1,"1618":1,"1619":1,"1653":1,"1661":1,"1664":1,"1707":1,"1731":3,"1751":1,"1881":2,"1970":1,"2058":1,"2079":2,"2089":1,"2103":1,"2230":2,"2234":1,"2236":1,"2241":2}}],["seedsignedincookieasync",{"3":{"1436":1}}],["seedsponsorsasync",{"3":{"1369":1}}],["seedspeakersasync",{"3":{"1369":1}}],["seedsampleeventlinksasync",{"3":{"1369":1}}],["seedsessionsasync",{"3":{"1369":2}}],["seeds",{"3":{"0":1,"207":1,"210":1,"295":1,"296":1,"459":1,"464":1,"499":1,"507":1,"583":1,"698":1,"749":2,"1229":1,"1237":1,"1241":1,"1247":1,"1278":1,"1300":2,"1301":3,"1309":2,"1311":6,"1323":2,"1324":6,"1339":1,"1347":1,"1350":6,"1359":1,"1364":2,"1369":1,"1380":1,"1395":11,"1396":1,"1402":3,"1412":1,"1415":3,"1436":7,"1441":3,"1449":1,"1492":1,"1652":1,"1664":1,"1707":1,"1777":1,"2120":1,"2125":2}}],["see",{"0":{"2009":1,"2045":1},"3":{"0":9,"15":6,"17":2,"19":2,"21":1,"22":1,"24":1,"39":1,"47":1,"57":2,"62":1,"66":3,"72":1,"76":2,"91":4,"92":2,"93":2,"95":1,"97":1,"98":1,"101":1,"110":1,"115":4,"117":1,"122":2,"130":8,"132":1,"133":1,"135":3,"136":1,"139":1,"145":1,"146":1,"147":1,"155":3,"164":2,"166":1,"173":1,"175":2,"189":1,"193":4,"194":1,"202":1,"223":2,"228":1,"233":6,"241":5,"245":1,"248":2,"259":1,"272":1,"279":1,"298":2,"301":1,"302":1,"303":1,"316":1,"346":1,"359":1,"368":1,"372":1,"376":1,"386":4,"388":1,"391":1,"395":7,"397":1,"400":2,"413":1,"418":4,"423":2,"424":1,"425":2,"428":2,"432":1,"438":1,"443":1,"446":3,"448":1,"449":1,"451":1,"463":1,"468":4,"472":1,"497":2,"499":1,"505":1,"516":1,"526":2,"528":1,"530":2,"534":2,"537":1,"543":3,"546":1,"547":1,"564":1,"570":2,"593":1,"599":1,"612":1,"617":1,"624":1,"633":1,"638":1,"655":1,"665":1,"676":1,"680":1,"696":2,"698":1,"699":1,"713":1,"718":1,"725":1,"731":1,"733":1,"734":1,"759":1,"764":1,"790":1,"791":1,"797":3,"798":1,"808":1,"809":1,"821":1,"825":1,"826":1,"827":1,"829":2,"836":1,"840":1,"844":1,"852":1,"867":2,"868":1,"869":1,"870":3,"873":1,"875":1,"879":1,"891":1,"899":1,"905":1,"920":1,"922":2,"926":3,"952":3,"957":1,"970":1,"971":1,"974":1,"986":1,"994":1,"995":1,"1016":1,"1018":1,"1019":1,"1020":1,"1028":1,"1032":1,"1033":1,"1040":1,"1048":1,"1050":1,"1057":1,"1067":1,"1068":1,"1074":1,"1101":1,"1108":2,"1114":1,"1116":3,"1122":2,"1135":1,"1140":1,"1162":1,"1191":1,"1193":1,"1212":2,"1213":4,"1214":2,"1218":1,"1223":1,"1225":1,"1228":1,"1229":7,"1230":1,"1231":1,"1232":1,"1236":1,"1237":12,"1246":1,"1247":11,"1251":2,"1253":1,"1259":17,"1263":1,"1265":3,"1267":1,"1269":1,"1270":30,"1271":7,"1281":1,"1283":1,"1286":56,"1289":2,"1291":2,"1300":40,"1301":10,"1302":1,"1306":1,"1309":27,"1310":3,"1311":47,"1312":12,"1316":1,"1319":1,"1321":1,"1323":28,"1324":55,"1339":25,"1341":1,"1342":1,"1343":1,"1348":1,"1350":28,"1357":1,"1359":103,"1367":1,"1369":12,"1373":1,"1380":31,"1389":1,"1392":1,"1395":46,"1396":66,"1399":2,"1402":35,"1409":1,"1415":21,"1416":2,"1417":12,"1423":1,"1427":26,"1428":1,"1429":1,"1431":2,"1433":1,"1436":128,"1438":4,"1441":1,"1442":1,"1443":3,"1444":2,"1447":1,"1453":2,"1454":1,"1455":6,"1459":2,"1460":1,"1463":2,"1465":2,"1467":11,"1471":1,"1474":2,"1476":2,"1486":1,"1487":3,"1488":3,"1489":1,"1492":3,"1496":8,"1497":1,"1498":1,"1500":2,"1502":1,"1526":1,"1527":1,"1530":1,"1531":1,"1545":1,"1547":1,"1551":1,"1561":1,"1562":1,"1574":2,"1576":1,"1577":1,"1581":1,"1583":2,"1584":1,"1588":2,"1591":1,"1596":1,"1597":1,"1621":1,"1627":1,"1630":7,"1631":13,"1632":8,"1634":2,"1635":3,"1637":1,"1638":4,"1639":8,"1640":6,"1641":1,"1646":1,"1648":3,"1649":2,"1650":2,"1651":7,"1652":1,"1653":3,"1654":1,"1655":1,"1656":5,"1670":1,"1677":1,"1680":1,"1689":1,"1693":1,"1701":1,"1703":3,"1707":1,"1718":1,"1719":1,"1726":1,"1727":1,"1733":1,"1749":2,"1755":1,"1757":1,"1760":1,"1764":1,"1765":2,"1768":4,"1803":1,"1804":1,"1813":1,"1816":1,"1817":1,"1819":1,"1825":1,"1830":1,"1832":1,"1839":1,"1840":1,"1841":1,"1852":1,"1861":1,"1877":1,"1912":2,"1915":1,"1922":2,"1924":1,"1937":1,"1957":1,"1967":1,"1979":1,"1995":1,"1998":2,"2003":2,"2011":1,"2027":1,"2029":1,"2041":1,"2050":1,"2057":1,"2102":1,"2108":1,"2121":1,"2131":1,"2133":1,"2135":1,"2138":1,"2142":1,"2144":1,"2148":1,"2153":1,"2159":1,"2162":1,"2173":1,"2174":1,"2176":1,"2177":1,"2211":1,"2216":1,"2218":1,"2233":1,"2234":2,"2244":1,"2246":1,"2247":2}}],["setviewportsize",{"3":{"1591":1,"1596":1}}],["setvalues",{"3":{"1286":1}}],["setvalidator",{"2":{"1833":1},"3":{"1271":7,"1402":4,"1415":3,"1830":1,"1833":1}}],["setvariantdiscount",{"3":{"674":1}}],["setvariantdiscounthandler",{"3":{"674":2}}],["sethostconnectionstring",{"3":{"1436":1,"1488":1}}],["setnameddatasource",{"3":{"1436":2}}],["setbearertoken",{"3":{"1429":1,"1436":2,"1488":2,"1491":1}}],["setb",{"3":{"1359":1}}],["setbrowsercultureasync",{"2":{"265":1,"1526":1,"1653":1,"2085":1},"3":{"265":1,"1311":1,"1324":4,"1526":1,"1653":1,"2085":1}}],["setenvironmentvariable",{"3":{"1436":2,"1488":1}}],["seteventquestionanswers",{"3":{"1350":1,"1359":2}}],["seteventspeakers",{"3":{"1350":1,"1359":2}}],["setevent",{"3":{"1350":7,"1359":8}}],["seterror",{"3":{"1324":1}}],["setcategory",{"3":{"1350":1,"1359":1}}],["setcategoryitems",{"3":{"1350":2,"1359":1}}],["setcookie",{"3":{"1324":1}}],["setcorrelationid",{"3":{"1311":4}}],["setconcurrencyetag",{"3":{"341":1,"922":1,"1300":1,"1311":6,"1666":1,"1874":1}}],["setx",{"3":{"1343":1}}],["setxxx",{"3":{"1168":2,"1810":1}}],["setdiscount",{"3":{"1767":1}}],["setdiscountonallvariants",{"2":{"1026":1,"1767":1},"3":{"1026":1,"1767":2}}],["setdescription",{"3":{"1417":1}}],["setdarkmodeasync",{"2":{"2085":1},"3":{"1324":4,"2085":2}}],["setinventory",{"2":{"1769":1},"3":{"1746":2,"1749":3,"1769":1}}],["setinventoryitemcommand",{"3":{"1270":1}}],["setitems",{"2":{"1170":1},"3":{"1168":2,"1170":1,"1231":1,"1237":2,"1343":1,"1350":4,"1359":2,"1402":2,"1438":1,"1496":1,"1662":1,"1810":2}}],["setobserved",{"3":{"1417":2}}],["setoptions",{"3":{"1402":4}}],["setoldestdueage",{"3":{"1286":1}}],["setoldestpendingage",{"3":{"1259":2,"2158":1}}],["setoriginalrowversion",{"2":{"341":1,"342":1,"1871":1,"1872":1,"1876":1,"1877":1},"3":{"0":1,"341":3,"342":1,"926":1,"1237":2,"1270":2,"1286":8,"1311":2,"1359":4,"1871":1,"1872":1,"1874":1,"1876":1,"1877":1}}],["setprincipal",{"3":{"1436":2}}],["setproperty",{"3":{"1286":2}}],["setpropertycalls",{"3":{"1286":1}}],["setproperties",{"3":{"1286":1}}],["setproductdiscount",{"3":{"674":1}}],["setproductdiscounthandler",{"3":{"674":2}}],["setpublishedasync",{"3":{"1395":1}}],["setpermissionasync",{"3":{"1436":3}}],["setpermissionsasync",{"3":{"1311":2}}],["setpermissions",{"3":{"1300":1}}],["setpendingdepth",{"3":{"1259":3,"1286":2}}],["setresponse",{"3":{"1432":1,"1436":3}}],["setrendererinfo",{"2":{"955":1,"956":1},"3":{"0":1,"954":3,"955":1,"956":1,"1432":2,"1436":3}}],["setrooms",{"3":{"1350":1,"1359":2}}],["setroom",{"3":{"1350":1,"1359":1}}],["setrowsperpageasync",{"3":{"1324":1}}],["setroleasync",{"3":{"1324":7,"1415":1}}],["setroles",{"3":{"1300":1}}],["setrolesasync",{"3":{"1300":1,"1311":2,"1324":7,"1415":2}}],["setrolepermissionsrequestvalidator",{"2":{"1297":1},"3":{"1199":1,"1203":1,"1207":1,"1297":1,"1300":5}}],["setrolepermissionsrequest",{"3":{"1199":6,"1203":1,"1207":1,"1297":1,"1300":3,"1324":2}}],["setlivepoll",{"3":{"1402":4}}],["setlockedasync",{"3":{"1300":3,"1311":1,"1415":1}}],["setloadfailed",{"2":{"111":1,"112":1},"3":{"109":1,"111":1,"112":1,"1324":1}}],["setleaderboardparticipationasync",{"3":{"1396":7}}],["setleaderboardparticipation",{"3":{"1203":1,"1207":2,"1271":1,"1286":1,"1396":4}}],["setleaderboardparticipationrequest",{"3":{"1199":5,"1203":1,"1207":2,"1396":10,"1436":1}}],["setleaderboardparticipationhandlertests",{"3":{"1199":1,"1207":3,"1396":1}}],["setleaderboardparticipationhandler",{"2":{"692":1,"693":1},"3":{"690":1,"692":1,"693":1,"1199":2,"1203":1,"1207":2,"1271":2,"1286":3,"1396":15,"1496":1}}],["setauthenticationstate",{"3":{"1436":3}}],["setactionsasync",{"3":{"1416":2}}],["setavatarasync",{"3":{"1415":2}}],["setavatarurl",{"3":{"1415":3}}],["seta",{"3":{"1359":1}}],["setapplicationname",{"3":{"665":1,"1339":1}}],["setasync",{"3":{"243":1,"733":2,"1270":2,"1300":1,"1301":17,"1311":2,"1324":2,"1416":1,"1417":12}}],["setunreadcount",{"3":{"1324":4}}],["setuserrolesrequestvalidator",{"2":{"1297":1},"3":{"1199":1,"1203":1,"1207":1,"1297":1,"1300":4}}],["setuserrolesrequest",{"3":{"1199":6,"1203":1,"1207":1,"1297":1,"1300":2,"1311":1,"1324":3,"1496":1}}],["setuser",{"3":{"954":1,"1432":1,"1436":3,"1488":1}}],["setuseravatarcommandmarkertests",{"3":{"1199":1,"1207":2}}],["setuseravatarcommandvalidator",{"3":{"1199":1,"1203":1,"1207":2,"1415":8}}],["setuseravatarcommand",{"2":{"1264":1},"3":{"1199":7,"1203":1,"1207":2,"1264":2,"1411":2,"1415":9}}],["setuseravatarhandlertests",{"3":{"1199":1,"1207":2,"1415":1}}],["setuseravatarhandler",{"2":{"1526":1,"2129":1},"3":{"444":2,"926":1,"1199":3,"1203":1,"1207":2,"1270":3,"1286":9,"1323":4,"1411":2,"1415":19,"1496":1,"1526":1,"2129":4}}],["setuseravatar",{"3":{"444":2,"926":1,"1203":3,"1207":10,"1264":1,"1270":1,"1286":1,"1411":1,"1415":8,"1436":1,"1496":2}}],["setupdefaultroles",{"3":{"1436":1}}],["setupdefaultclient",{"3":{"1436":1}}],["setuproles",{"3":{"1436":1}}],["setups",{"3":{"1369":1}}],["setuppublicroomfilter",{"3":{"1359":1}}],["setup",{"0":{"1472":1},"3":{"0":1,"61":1,"140":1,"373":1,"402":1,"448":1,"619":1,"749":1,"953":1,"954":1,"955":2,"1247":2,"1286":1,"1300":2,"1309":1,"1311":3,"1324":2,"1396":1,"1406":1,"1415":1,"1417":3,"1427":1,"1429":1,"1431":1,"1432":1,"1436":15,"1453":3,"1454":1,"1455":3,"1456":1,"1471":1,"1472":20,"1475":1,"1482":1,"1483":2,"1488":2,"1565":1,"1570":1,"1577":1,"1686":1,"1751":1,"2131":1,"2133":1,"2141":1,"2144":1,"2156":1,"2158":1}}],["settag",{"3":{"1427":1}}],["settable",{"3":{"382":1,"881":1,"954":1,"1259":1,"1270":1,"1286":2,"1300":1,"1311":1,"1323":1,"1324":3,"1339":1,"1359":3,"1380":1,"1396":1,"1402":2,"1436":8,"1891":1,"1949":1}}],["settling",{"3":{"831":1}}],["settleasync",{"3":{"1436":1}}],["settleselector",{"3":{"1436":2}}],["settles",{"3":{"350":1,"639":1,"904":1,"1323":4,"1339":1,"1355":1,"1359":1,"1395":1,"1398":1,"1415":2,"1433":1,"1436":4,"1488":2,"1686":1}}],["settled",{"3":{"175":1,"325":1,"732":1,"906":1,"1300":2,"1311":1,"1337":1,"1339":4,"1359":1,"1395":2,"1402":2,"1427":1,"1433":1,"1436":1,"1453":1,"1455":1,"1488":1,"1828":1,"1926":1,"2145":1}}],["settle",{"3":{"160":1,"716":1,"1004":1,"1190":1,"1247":1,"1436":6,"1484":1,"1686":1,"1924":1}}],["settextasync",{"3":{"1417":5}}],["settenant",{"2":{"698":1},"3":{"698":4,"1270":3,"1286":3,"1311":2,"1317":1,"1323":3}}],["setter",{"3":{"265":1,"341":1,"342":1,"674":1,"675":1,"698":1,"883":1,"963":1,"1168":4,"1169":2,"1170":3,"1237":1,"1247":1,"1270":1,"1274":1,"1286":2,"1311":2,"1323":4,"1324":8,"1342":4,"1343":2,"1350":14,"1359":4,"1395":1,"1396":4,"1402":3,"1405":1,"1415":3,"1417":1,"1431":1,"1436":13,"1809":1,"1810":1,"1844":1,"1871":1,"2074":1,"2089":1,"2166":1}}],["setters",{"3":{"0":2,"265":1,"962":1,"1167":1,"1168":3,"1212":1,"1229":1,"1231":1,"1237":4,"1242":1,"1274":1,"1278":1,"1286":2,"1309":2,"1324":2,"1350":5,"1359":3,"1396":2,"1402":3,"1436":10,"1488":1,"1489":1,"1526":2,"1535":1,"1541":1,"1591":1,"1808":2,"1810":3,"1811":1,"1812":1,"1988":1,"2092":1}}],["settokensasync",{"2":{"423":1,"426":1,"428":1,"430":1,"505":1,"512":1,"514":1},"3":{"423":1,"426":1,"428":1,"430":1,"505":1,"507":1,"511":1,"512":3,"514":1,"1324":8,"1417":2,"1436":2}}],["setting",{"3":{"0":1,"20":1,"24":2,"32":1,"73":1,"100":1,"142":1,"145":1,"178":2,"186":1,"193":1,"195":2,"200":1,"201":2,"274":1,"290":1,"291":1,"296":1,"337":1,"403":1,"418":1,"422":1,"423":1,"499":1,"599":1,"640":1,"673":1,"719":2,"740":1,"741":3,"750":1,"776":1,"819":2,"820":1,"821":1,"827":1,"828":1,"831":1,"832":1,"837":1,"838":2,"882":1,"905":1,"907":1,"922":1,"931":3,"933":1,"935":1,"1107":1,"1108":2,"1112":1,"1118":1,"1175":1,"1178":1,"1229":1,"1232":1,"1237":2,"1256":2,"1259":5,"1267":1,"1270":2,"1273":2,"1280":1,"1286":20,"1292":1,"1300":6,"1301":6,"1309":3,"1311":4,"1312":2,"1323":8,"1324":9,"1326":1,"1335":1,"1339":10,"1350":2,"1359":1,"1395":3,"1396":9,"1402":1,"1416":1,"1417":7,"1422":1,"1427":2,"1436":8,"1438":1,"1440":1,"1441":2,"1442":1,"1444":1,"1453":1,"1455":2,"1465":4,"1466":1,"1467":12,"1470":1,"1490":1,"1492":1,"1526":1,"1591":1,"1627":1,"1701":1,"1721":1,"1767":1,"1769":1,"1825":1,"1839":1,"1843":2,"1845":1,"1871":1,"1898":1,"1904":2,"1929":1,"2001":1,"2002":1,"2012":1,"2021":2,"2058":1,"2076":1,"2133":1,"2151":2,"2205":1,"2234":1}}],["settingstests",{"3":{"1207":6,"1323":2}}],["settings",{"0":{"1320":1},"2":{"130":1,"201":1,"819":1,"1995":1},"3":{"0":11,"22":1,"24":2,"59":1,"73":1,"74":1,"130":1,"135":3,"139":3,"178":1,"186":2,"190":1,"193":1,"200":1,"201":1,"217":1,"243":1,"281":1,"318":2,"330":1,"337":1,"403":1,"530":1,"539":1,"583":2,"586":1,"633":1,"640":1,"641":1,"649":2,"650":1,"672":2,"673":1,"674":5,"675":2,"676":2,"696":1,"701":1,"707":3,"710":1,"713":1,"715":3,"727":1,"733":1,"741":2,"742":1,"743":1,"819":2,"827":6,"829":2,"831":1,"832":2,"834":1,"838":1,"840":1,"905":2,"907":1,"909":1,"914":1,"932":1,"946":1,"954":1,"980":1,"1004":1,"1034":1,"1042":1,"1045":1,"1107":1,"1112":1,"1116":1,"1119":1,"1127":1,"1175":3,"1177":3,"1178":2,"1179":1,"1184":4,"1189":1,"1192":5,"1202":2,"1203":13,"1207":48,"1212":2,"1259":7,"1267":1,"1270":4,"1272":1,"1273":1,"1276":2,"1279":1,"1284":1,"1286":64,"1287":1,"1288":3,"1290":1,"1294":1,"1295":1,"1300":33,"1301":16,"1302":1,"1309":6,"1311":38,"1313":2,"1316":1,"1320":9,"1323":50,"1324":45,"1326":1,"1327":1,"1335":1,"1337":1,"1338":2,"1339":61,"1359":11,"1366":1,"1379":1,"1380":1,"1396":16,"1415":2,"1416":7,"1417":19,"1418":1,"1419":1,"1427":17,"1429":3,"1436":15,"1437":1,"1438":7,"1442":1,"1443":2,"1444":1,"1455":1,"1456":1,"1466":1,"1467":2,"1474":1,"1476":1,"1484":1,"1487":2,"1488":2,"1496":13,"1526":1,"1577":2,"1582":1,"1626":2,"1627":1,"1661":1,"1666":1,"1670":2,"1675":1,"1708":1,"1734":1,"1748":1,"1765":1,"1842":1,"1881":1,"1968":1,"1995":2,"2001":3,"2003":1,"2013":9,"2015":1,"2025":2,"2028":1,"2029":1,"2152":1,"2155":1,"2169":1,"2175":1,"2182":1,"2190":1,"2198":1,"2200":1,"2204":1,"2205":1,"2234":1}}],["setsharedenvironment",{"3":{"1436":1}}],["setsessioncategoryitems",{"3":{"1359":1}}],["setsessionquestionanswers",{"3":{"1359":1}}],["setsessionspeakers",{"3":{"1359":1}}],["setsession",{"3":{"1350":4,"1359":4}}],["setscrollposition",{"3":{"1324":1}}],["setspeaker",{"3":{"1350":3,"1359":1}}],["setspeakerquestionanswers",{"3":{"1350":1,"1359":2}}],["setspeakercategoryitems",{"3":{"1310":1,"1350":1,"1359":2}}],["setsproperty",{"2":{"1844":1},"3":{"1286":4,"1844":1}}],["setsvaluegeneratednever",{"3":{"1286":1}}],["setstatus",{"3":{"1395":1,"1402":1}}],["setstablenameandkey",{"3":{"1286":1}}],["setstoredpermissionsasync",{"2":{"2202":1,"2205":1},"3":{"1059":1,"1300":6,"1311":1,"1324":4,"2202":1,"2205":1}}],["setsrequiredmembers",{"3":{"1229":3}}],["sets",{"3":{"0":4,"17":1,"24":1,"31":2,"38":1,"43":1,"59":1,"72":1,"74":1,"94":1,"178":1,"189":1,"202":1,"243":1,"263":1,"265":3,"296":1,"305":1,"311":1,"341":1,"342":1,"370":1,"397":4,"399":1,"446":1,"448":2,"458":1,"499":1,"507":2,"528":1,"557":1,"562":1,"564":1,"578":1,"601":1,"611":1,"617":1,"626":2,"640":4,"650":1,"657":1,"660":1,"698":1,"702":1,"705":1,"707":1,"715":1,"733":1,"736":1,"740":2,"741":1,"755":1,"757":1,"764":2,"767":1,"810":1,"819":1,"826":1,"827":2,"854":1,"863":1,"881":2,"888":1,"905":1,"907":1,"916":1,"926":1,"931":1,"933":2,"954":1,"963":1,"979":1,"1004":2,"1018":2,"1042":1,"1083":1,"1124":1,"1134":1,"1140":1,"1160":1,"1162":1,"1184":2,"1212":2,"1213":1,"1229":2,"1231":1,"1237":2,"1239":1,"1242":1,"1247":4,"1257":1,"1259":7,"1271":6,"1274":1,"1275":1,"1286":24,"1288":1,"1290":1,"1295":1,"1300":13,"1301":5,"1309":6,"1311":34,"1312":2,"1323":15,"1324":51,"1326":1,"1327":1,"1336":1,"1339":24,"1349":1,"1350":10,"1352":1,"1359":55,"1364":1,"1369":8,"1379":1,"1380":3,"1395":23,"1396":24,"1402":8,"1412":1,"1415":15,"1416":6,"1417":10,"1427":1,"1429":1,"1430":1,"1431":1,"1432":1,"1436":33,"1441":6,"1443":6,"1444":1,"1445":1,"1447":1,"1449":1,"1453":2,"1454":2,"1455":3,"1459":2,"1464":2,"1467":3,"1475":1,"1476":2,"1484":1,"1488":3,"1489":1,"1490":1,"1491":1,"1492":1,"1496":3,"1524":1,"1526":2,"1531":1,"1535":1,"1549":1,"1560":1,"1577":1,"1591":1,"1596":2,"1611":1,"1627":1,"1630":1,"1640":1,"1641":5,"1649":1,"1668":1,"1678":1,"1708":1,"1748":1,"1749":2,"1754":1,"1765":2,"1810":1,"1811":1,"1830":1,"1839":1,"1845":1,"1861":1,"1871":1,"1889":1,"1896":1,"1898":1,"1910":1,"1933":1,"1968":2,"1970":1,"1994":1,"2002":1,"2009":2,"2010":1,"2011":2,"2026":1,"2032":1,"2047":1,"2073":1,"2079":1,"2085":2,"2128":1,"2133":2,"2140":1,"2158":1,"2161":1,"2166":1,"2169":1,"2177":1,"2188":1,"2195":1}}],["set",{"0":{"1235":1,"1650":1,"1678":1,"1896":1,"2077":1,"2080":1},"2":{"764":1,"1135":1,"1136":1,"1912":1,"1924":1},"3":{"0":24,"17":1,"19":2,"24":2,"25":1,"26":2,"31":2,"32":1,"33":3,"39":3,"41":1,"45":1,"68":2,"79":1,"81":1,"82":1,"90":1,"94":1,"95":2,"98":3,"109":1,"121":1,"122":1,"135":1,"139":1,"142":2,"145":5,"146":1,"147":2,"149":2,"157":1,"164":1,"166":1,"167":1,"173":1,"175":1,"177":1,"178":1,"180":1,"181":2,"186":4,"189":1,"195":2,"200":1,"202":1,"215":1,"243":2,"245":1,"248":2,"259":1,"261":1,"265":8,"273":1,"291":2,"317":1,"318":1,"330":2,"332":1,"335":4,"337":2,"349":1,"350":1,"351":1,"352":1,"370":2,"386":3,"388":1,"392":1,"397":2,"402":1,"411":1,"412":1,"415":1,"424":1,"441":1,"448":2,"452":2,"461":1,"493":1,"494":1,"498":1,"499":3,"500":1,"507":2,"509":1,"514":1,"526":2,"528":2,"532":1,"549":2,"551":1,"554":2,"556":4,"564":1,"566":1,"567":1,"571":1,"572":1,"574":1,"576":1,"578":1,"584":2,"585":2,"592":1,"595":1,"598":1,"599":4,"601":1,"602":1,"612":1,"616":1,"618":2,"619":1,"632":1,"633":2,"640":1,"641":1,"642":1,"644":1,"650":1,"652":1,"655":1,"656":1,"657":1,"659":1,"668":2,"674":2,"689":1,"690":1,"697":1,"698":2,"702":1,"703":1,"707":2,"711":1,"715":1,"725":1,"727":1,"733":4,"749":3,"757":1,"764":2,"766":3,"780":2,"790":2,"809":1,"827":2,"832":1,"833":2,"837":3,"857":1,"859":1,"861":3,"863":1,"864":1,"869":1,"873":1,"875":2,"876":1,"881":4,"884":2,"897":3,"900":2,"903":1,"905":1,"907":2,"914":1,"924":1,"926":3,"929":1,"933":1,"937":1,"938":1,"939":2,"940":3,"941":1,"942":1,"948":1,"953":3,"963":4,"964":5,"965":4,"966":3,"973":1,"974":1,"980":1,"981":1,"988":1,"996":1,"998":2,"999":1,"1006":1,"1020":1,"1033":1,"1034":1,"1036":1,"1042":2,"1043":2,"1050":1,"1058":1,"1059":4,"1060":1,"1067":3,"1079":1,"1082":1,"1090":2,"1095":1,"1107":1,"1108":1,"1116":2,"1124":3,"1133":2,"1135":1,"1136":1,"1150":1,"1163":1,"1168":1,"1175":1,"1184":1,"1196":1,"1212":6,"1214":1,"1229":7,"1234":1,"1235":1,"1237":17,"1241":7,"1242":5,"1243":3,"1247":37,"1252":1,"1254":1,"1256":1,"1259":23,"1261":1,"1264":2,"1265":2,"1266":1,"1270":21,"1271":8,"1273":3,"1274":1,"1275":2,"1276":1,"1278":1,"1279":2,"1280":1,"1283":2,"1286":112,"1287":1,"1288":1,"1290":1,"1293":2,"1296":1,"1297":2,"1298":1,"1300":94,"1301":12,"1302":1,"1304":1,"1309":20,"1310":6,"1311":58,"1312":6,"1316":1,"1317":1,"1318":2,"1320":2,"1322":2,"1323":49,"1324":108,"1325":1,"1326":2,"1328":1,"1338":1,"1339":34,"1342":1,"1343":1,"1348":1,"1349":1,"1350":37,"1353":5,"1355":1,"1357":1,"1358":2,"1359":172,"1362":2,"1364":2,"1369":10,"1377":1,"1380":7,"1384":2,"1385":1,"1387":1,"1388":1,"1390":1,"1391":1,"1395":64,"1396":73,"1401":3,"1402":40,"1405":2,"1408":2,"1409":2,"1412":2,"1413":2,"1414":1,"1415":58,"1416":4,"1417":19,"1421":1,"1422":1,"1427":9,"1430":1,"1431":2,"1432":1,"1433":1,"1436":143,"1437":1,"1438":12,"1440":1,"1441":3,"1442":1,"1443":1,"1444":1,"1445":1,"1446":1,"1450":1,"1453":3,"1454":2,"1455":8,"1456":2,"1458":1,"1459":6,"1460":3,"1461":1,"1465":2,"1467":18,"1470":3,"1472":1,"1475":2,"1477":5,"1479":1,"1480":1,"1481":1,"1487":1,"1488":3,"1489":2,"1490":2,"1492":1,"1496":9,"1504":1,"1509":1,"1525":1,"1526":8,"1534":5,"1535":1,"1560":1,"1571":1,"1575":1,"1577":8,"1591":4,"1596":4,"1599":1,"1611":1,"1613":1,"1630":8,"1631":12,"1632":3,"1633":1,"1635":1,"1637":1,"1638":3,"1639":1,"1640":2,"1641":5,"1646":1,"1648":2,"1650":3,"1651":1,"1653":1,"1655":1,"1659":1,"1662":1,"1664":1,"1666":1,"1667":3,"1668":3,"1670":1,"1671":1,"1673":1,"1674":1,"1676":1,"1677":5,"1678":1,"1679":1,"1684":1,"1686":2,"1692":1,"1693":1,"1695":2,"1699":1,"1703":1,"1724":1,"1727":2,"1735":1,"1736":1,"1737":1,"1742":2,"1746":3,"1748":3,"1749":3,"1765":3,"1767":1,"1768":3,"1780":1,"1781":1,"1802":2,"1803":1,"1808":2,"1810":2,"1820":1,"1823":1,"1825":1,"1828":1,"1839":1,"1841":1,"1844":4,"1845":1,"1850":1,"1856":1,"1861":1,"1863":1,"1877":1,"1895":4,"1896":2,"1898":1,"1899":3,"1909":1,"1912":2,"1916":2,"1920":1,"1922":1,"1923":1,"1924":1,"1932":1,"1933":1,"1955":1,"1962":3,"1963":2,"1968":1,"1975":4,"1977":1,"1979":1,"1982":1,"1983":1,"1984":1,"1985":1,"1988":3,"1991":1,"1995":2,"1996":2,"2001":1,"2003":1,"2006":1,"2009":1,"2011":2,"2013":1,"2027":1,"2028":2,"2030":1,"2043":1,"2046":1,"2058":1,"2067":1,"2075":1,"2080":1,"2081":1,"2082":1,"2085":4,"2087":2,"2092":1,"2100":1,"2108":1,"2109":3,"2118":1,"2121":1,"2125":1,"2129":1,"2131":1,"2149":1,"2151":2,"2155":2,"2158":8,"2159":1,"2162":2,"2166":1,"2168":2,"2175":1,"2176":1,"2182":1,"2188":1,"2190":1,"2198":1,"2199":1,"2201":2,"2202":1,"2216":1,"2229":1,"2234":1}}],["securely",{"3":{"1764":1}}],["secure",{"2":{"601":1,"1107":1,"1108":1,"1111":1,"1468":1},"3":{"0":1,"29":1,"215":1,"506":1,"507":1,"508":1,"601":1,"1107":1,"1108":2,"1109":1,"1111":1,"1183":1,"1298":1,"1300":5,"1311":4,"1320":2,"1323":2,"1324":1,"1339":1,"1416":2,"1417":7,"1438":1,"1455":1,"1466":1,"1467":4,"1468":1,"1469":1,"1586":1,"1641":3,"1660":1,"1669":1,"1898":1,"1900":1,"1968":1}}],["securestorage",{"2":{"509":1,"511":1,"513":1},"3":{"0":2,"507":3,"508":1,"509":2,"510":1,"511":3,"513":1,"1184":1,"1187":1,"1212":1,"1324":7,"1416":2,"1417":5,"1639":1,"1641":6,"2234":1}}],["securitytokenexception",{"3":{"1300":1}}],["securitykey",{"3":{"1300":2}}],["securityalgorithms",{"3":{"1300":3,"1436":1}}],["securityheadersextensions",{"3":{"1199":1,"1203":1,"1207":1,"1336":1,"1339":4,"1443":1}}],["securityheaderstestsbase",{"2":{"218":1},"3":{"218":2,"572":5,"1199":3,"1207":2,"1339":1,"1428":1,"1436":10,"1438":1,"1488":3,"1493":1,"1496":1,"2056":1}}],["securityheaderstests",{"2":{"2153":1},"3":{"217":1,"218":2,"572":4,"575":1,"1199":2,"1207":4,"1436":4,"1437":1,"1438":2,"1487":2,"1488":1,"1535":1,"2153":1}}],["securityheaders",{"3":{"214":2,"216":3,"217":1,"219":1,"220":1,"674":1,"980":1,"1108":1,"1207":7,"1208":2,"1336":2,"1339":28,"1443":6,"1450":1,"1496":1,"1526":1,"1577":1,"1585":1,"1586":1,"2012":1,"2151":8,"2152":2,"2154":3}}],["securityheadersmiddleware",{"2":{"214":1,"217":1,"2012":1,"2151":1,"2155":1},"3":{"214":1,"217":1,"1199":3,"1203":1,"1207":1,"1324":3,"1336":1,"1339":12,"1416":1,"1436":1,"1438":1,"1443":1,"1496":2,"2012":1,"2151":1,"2155":1}}],["securityheadersmiddlewaretests",{"2":{"214":1,"2153":1},"3":{"214":1,"1199":1,"1207":4,"1339":5,"1577":1,"1586":1,"2153":1}}],["securityheaderssettings",{"2":{"0":1,"214":2,"216":1,"217":1,"1339":1,"1577":1,"2151":1},"3":{"0":1,"214":2,"216":1,"217":1,"674":1,"1199":5,"1203":1,"1207":1,"1336":1,"1339":7,"1577":1,"2151":2}}],["security",{"0":{"1336":1,"1548":1,"1563":1},"1":{"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"2149":1,"2150":1,"2151":1,"2152":1,"2153":1,"2154":1,"2155":1},"2":{"214":1,"665":1,"1335":1,"1423":1,"1674":1,"2151":1},"3":{"0":4,"23":1,"25":1,"59":1,"103":1,"177":1,"179":1,"207":2,"211":1,"213":2,"214":4,"216":2,"217":3,"218":1,"219":7,"220":1,"221":1,"228":1,"246":1,"283":1,"284":1,"311":1,"312":1,"313":2,"333":1,"344":1,"353":1,"358":2,"362":2,"369":2,"373":1,"375":1,"376":3,"395":1,"403":1,"419":1,"440":1,"509":1,"563":1,"572":4,"573":1,"574":2,"575":1,"602":1,"607":1,"612":2,"617":1,"665":1,"674":1,"676":1,"684":1,"718":1,"751":2,"752":1,"773":1,"778":1,"793":1,"810":1,"825":1,"826":2,"827":2,"830":1,"837":1,"854":1,"873":1,"946":2,"948":1,"950":2,"980":1,"1011":1,"1075":1,"1077":1,"1108":3,"1115":1,"1117":3,"1186":1,"1189":1,"1192":2,"1202":2,"1203":13,"1207":44,"1208":2,"1212":2,"1216":2,"1228":1,"1229":2,"1236":1,"1237":5,"1239":1,"1241":3,"1247":14,"1253":1,"1259":1,"1263":1,"1270":13,"1271":6,"1273":1,"1276":1,"1283":1,"1284":1,"1285":1,"1286":36,"1287":2,"1290":2,"1292":1,"1297":1,"1300":118,"1301":6,"1304":1,"1305":1,"1306":1,"1307":1,"1308":1,"1309":24,"1311":39,"1312":3,"1318":1,"1320":2,"1322":1,"1323":39,"1324":89,"1325":1,"1335":1,"1336":5,"1337":1,"1338":2,"1339":69,"1347":2,"1348":1,"1350":12,"1353":2,"1355":2,"1357":1,"1359":82,"1365":1,"1366":1,"1369":3,"1372":1,"1373":1,"1380":20,"1384":1,"1388":1,"1389":1,"1391":2,"1395":49,"1396":65,"1402":39,"1403":1,"1406":1,"1407":1,"1409":1,"1411":1,"1415":60,"1416":10,"1417":50,"1419":1,"1421":1,"1422":1,"1423":1,"1427":9,"1429":1,"1436":59,"1437":4,"1438":4,"1441":1,"1442":1,"1443":5,"1450":1,"1454":2,"1455":3,"1456":1,"1459":1,"1461":1,"1465":6,"1466":1,"1467":8,"1469":1,"1472":2,"1474":1,"1475":1,"1477":1,"1483":1,"1487":2,"1488":5,"1492":2,"1493":1,"1496":5,"1499":2,"1525":1,"1526":7,"1530":2,"1531":1,"1532":1,"1534":1,"1535":2,"1548":1,"1552":1,"1554":2,"1562":1,"1563":2,"1575":3,"1576":1,"1577":9,"1581":2,"1582":2,"1583":1,"1585":3,"1586":6,"1588":2,"1590":1,"1591":3,"1595":3,"1596":3,"1597":1,"1600":1,"1627":1,"1639":1,"1641":1,"1660":1,"1667":1,"1670":2,"1671":1,"1673":1,"1674":1,"1675":1,"1769":1,"1779":2,"1796":2,"1801":1,"1814":1,"1815":1,"1817":1,"1829":1,"1898":1,"1899":1,"1903":2,"1904":1,"1905":2,"1908":1,"1933":1,"1937":1,"1940":1,"1965":2,"1966":1,"1968":1,"1971":1,"1972":1,"1979":1,"1983":1,"1985":1,"1994":1,"1998":1,"2001":1,"2002":2,"2003":2,"2012":4,"2013":1,"2046":1,"2056":2,"2077":1,"2080":1,"2128":3,"2130":2,"2145":1,"2148":2,"2149":3,"2150":3,"2151":4,"2152":3,"2155":5,"2162":1,"2197":1,"2201":1,"2205":1,"2210":1,"2221":2,"2222":3,"2234":2}}],["sec",{"3":{"0":2,"25":1,"42":2,"103":1,"123":2,"179":2,"189":2,"198":1,"207":1,"209":1,"217":2,"246":3,"284":3,"333":5,"344":1,"353":2,"373":7,"384":3,"403":6,"427":2,"442":1,"602":4,"612":2,"643":3,"718":3,"747":1,"749":1,"793":4,"830":4,"831":1,"873":7,"876":1,"908":1,"920":1,"921":1,"1184":1,"1247":19,"1270":3,"1286":3,"1298":1,"1300":4,"1301":3,"1309":3,"1311":5,"1323":11,"1324":3,"1339":6,"1355":1,"1359":2,"1402":1,"1415":3,"1416":3,"1417":6,"1436":5,"1438":1,"1447":1,"1453":1,"1467":4,"1496":1,"1534":1,"1969":2,"1971":1,"1972":1,"2001":2}}],["sectionheading",{"2":{"1687":1}}],["sectioned",{"3":{"1201":1,"1203":2,"1496":40,"1497":2,"1500":1}}],["sectionname",{"2":{"728":1,"1447":1,"2001":1},"3":{"674":2,"725":1,"728":1,"1259":3,"1286":7,"1300":9,"1301":4,"1309":1,"1311":4,"1320":2,"1323":17,"1324":11,"1339":5,"1396":2,"1415":7,"1427":3,"1447":1}}],["sections",{"0":{"1209":1},"3":{"0":3,"27":3,"74":2,"104":1,"128":1,"203":1,"231":1,"256":1,"259":1,"337":1,"375":2,"393":1,"409":1,"418":1,"429":1,"463":1,"540":1,"552":2,"604":1,"607":1,"609":3,"611":2,"612":1,"613":1,"649":1,"672":2,"673":1,"674":8,"675":1,"676":2,"677":1,"725":8,"726":1,"727":3,"728":1,"731":1,"794":1,"832":1,"833":2,"877":1,"909":1,"927":1,"960":1,"976":1,"980":1,"995":1,"1021":1,"1068":1,"1095":1,"1124":1,"1125":1,"1128":1,"1191":1,"1194":1,"1210":1,"1211":1,"1212":1,"1213":1,"1229":1,"1279":1,"1286":4,"1300":3,"1310":1,"1311":4,"1313":4,"1316":1,"1320":3,"1322":1,"1323":8,"1324":11,"1339":2,"1340":1,"1343":2,"1359":1,"1395":7,"1401":1,"1402":2,"1403":1,"1404":1,"1406":1,"1415":9,"1427":1,"1436":4,"1437":1,"1438":2,"1451":1,"1452":1,"1467":1,"1476":4,"1481":1,"1487":1,"1489":1,"1496":77,"1497":4,"1498":2,"1500":1,"1523":1,"1526":1,"1577":1,"1626":1,"1983":1,"2001":1,"2013":7,"2015":1,"2047":1,"2061":1,"2069":1,"2234":1}}],["section",{"0":{"136":1,"1193":1},"2":{"1418":1,"1423":1,"1426":1},"3":{"0":21,"59":1,"72":1,"76":1,"94":1,"95":1,"96":1,"97":1,"109":1,"130":3,"135":1,"137":2,"139":2,"145":1,"159":1,"161":1,"166":3,"173":1,"178":3,"180":3,"214":2,"215":1,"216":1,"219":1,"225":2,"243":1,"255":1,"281":1,"286":1,"298":1,"300":1,"350":1,"375":1,"395":4,"397":1,"400":1,"407":1,"408":1,"409":1,"418":1,"423":3,"426":1,"428":2,"429":2,"432":1,"434":2,"440":1,"475":1,"476":1,"477":1,"482":1,"484":1,"490":1,"511":1,"526":1,"543":1,"583":1,"584":1,"585":4,"586":1,"590":1,"607":6,"608":1,"609":6,"610":1,"611":2,"617":1,"633":1,"640":1,"651":1,"652":1,"673":1,"674":13,"675":1,"676":5,"678":1,"690":2,"696":1,"698":1,"702":1,"707":3,"715":2,"723":1,"725":8,"726":2,"727":5,"728":2,"729":1,"731":1,"733":2,"798":1,"800":1,"819":1,"821":1,"827":5,"829":1,"832":3,"836":1,"837":1,"838":2,"839":1,"841":1,"845":1,"849":1,"854":1,"860":2,"865":1,"896":1,"901":1,"915":3,"931":1,"933":1,"971":1,"972":1,"976":1,"996":5,"997":1,"998":2,"1003":1,"1006":1,"1007":2,"1010":5,"1012":2,"1014":2,"1017":1,"1018":1,"1022":1,"1034":2,"1058":1,"1059":1,"1062":1,"1073":1,"1078":1,"1079":2,"1089":1,"1090":2,"1091":2,"1094":2,"1095":1,"1096":1,"1124":3,"1184":1,"1188":1,"1193":3,"1194":1,"1212":8,"1214":1,"1216":1,"1229":1,"1237":2,"1247":6,"1259":37,"1260":1,"1264":1,"1270":6,"1271":1,"1273":2,"1275":1,"1276":1,"1277":1,"1278":1,"1279":5,"1280":1,"1286":43,"1289":1,"1294":1,"1297":1,"1299":3,"1300":28,"1301":18,"1307":1,"1309":16,"1310":3,"1311":21,"1312":2,"1316":1,"1320":12,"1322":1,"1323":89,"1324":65,"1326":2,"1332":2,"1336":2,"1337":1,"1338":4,"1339":38,"1350":6,"1352":1,"1355":1,"1359":4,"1366":1,"1368":1,"1369":11,"1389":1,"1392":1,"1395":31,"1396":38,"1402":8,"1410":2,"1414":3,"1415":31,"1416":3,"1417":2,"1418":4,"1419":4,"1420":1,"1421":3,"1422":4,"1423":2,"1424":1,"1425":1,"1426":1,"1427":13,"1428":1,"1431":2,"1435":1,"1436":36,"1438":10,"1440":1,"1441":1,"1442":2,"1443":2,"1444":3,"1447":2,"1452":1,"1460":2,"1463":1,"1465":1,"1467":15,"1470":1,"1471":1,"1472":1,"1473":1,"1474":2,"1476":5,"1478":1,"1481":4,"1485":1,"1486":3,"1487":8,"1488":8,"1489":2,"1490":1,"1494":2,"1496":51,"1497":3,"1498":1,"1500":2,"1526":3,"1532":1,"1575":2,"1577":2,"1589":1,"1591":3,"1596":2,"1600":1,"1602":2,"1625":1,"1627":2,"1630":4,"1631":9,"1632":7,"1635":1,"1638":3,"1639":4,"1640":1,"1641":4,"1651":1,"1652":1,"1656":4,"1666":1,"1667":1,"1668":1,"1669":1,"1670":2,"1672":3,"1673":1,"1675":1,"1683":1,"1684":2,"1708":3,"1722":1,"1726":1,"1727":1,"1729":1,"1749":1,"1750":1,"1751":4,"1758":2,"1759":1,"1760":1,"1765":6,"1770":1,"1772":3,"1773":1,"1776":2,"1849":1,"1882":2,"1888":1,"1895":1,"1902":1,"1908":1,"1909":1,"1916":1,"1919":1,"1921":1,"1933":1,"1936":1,"1940":1,"1975":1,"1993":1,"2001":1,"2002":2,"2003":1,"2012":2,"2013":5,"2014":1,"2015":1,"2025":1,"2028":1,"2042":1,"2047":3,"2050":3,"2056":1,"2061":1,"2064":1,"2069":7,"2096":1,"2116":1,"2128":2,"2129":1,"2138":1,"2140":1,"2151":1,"2152":1,"2154":1,"2160":2,"2169":1,"2175":2,"2182":1,"2188":1,"2197":1,"2234":6}}],["secretbytelength",{"3":{"1300":2}}],["secretkey",{"2":{"792":1,"2168":1},"3":{"790":1,"792":1,"1770":1,"2168":1}}],["secretmissing",{"3":{"790":1}}],["secretforkey",{"3":{"31":1,"674":1,"1300":3}}],["secretref",{"3":{"0":1,"599":2,"640":1,"1212":1,"1467":11,"1496":1,"1577":1}}],["secrets",{"0":{"1335":1},"2":{"598":1,"601":1,"869":1,"875":1,"1339":1,"1455":1},"3":{"0":5,"349":1,"351":1,"359":1,"598":2,"599":6,"600":2,"601":4,"603":1,"758":1,"766":1,"869":2,"875":1,"1012":1,"1059":1,"1066":2,"1212":2,"1286":3,"1300":4,"1311":3,"1323":2,"1324":2,"1326":1,"1335":2,"1339":12,"1415":6,"1417":7,"1419":1,"1427":1,"1436":1,"1441":1,"1442":1,"1445":1,"1454":1,"1455":1,"1456":1,"1459":1,"1460":1,"1462":2,"1466":2,"1467":24,"1468":5,"1469":2,"1470":1,"1472":3,"1474":5,"1475":1,"1477":1,"1484":1,"1526":2,"1535":1,"1548":2,"1554":3,"1563":3,"1570":1,"1572":2,"1577":3,"1586":1,"1591":2,"1663":1,"1670":1,"1770":1,"1945":1,"1974":1,"1975":1,"1979":1,"2070":1,"2130":1,"2144":2,"2148":1,"2200":1,"2232":1}}],["secret",{"1":{"596":1,"597":1,"598":1,"599":1,"600":1,"601":1,"602":1,"603":1,"604":1,"605":1,"1893":1,"1894":1,"1895":1,"1896":1,"1897":1,"1898":1,"1899":1},"2":{"1458":1,"1468":1,"1470":1,"1472":1},"3":{"0":10,"30":4,"31":3,"33":1,"53":1,"72":1,"179":1,"180":1,"217":1,"350":1,"441":1,"500":1,"529":2,"530":2,"535":1,"596":1,"597":2,"598":3,"599":12,"601":5,"604":1,"605":3,"640":2,"644":1,"664":2,"670":1,"673":1,"678":1,"788":1,"789":2,"790":11,"791":3,"792":9,"793":4,"794":6,"827":10,"869":3,"871":2,"872":1,"1017":4,"1020":2,"1212":2,"1288":2,"1293":9,"1300":35,"1311":8,"1312":2,"1322":3,"1323":18,"1324":13,"1335":2,"1337":3,"1339":33,"1396":1,"1406":1,"1416":2,"1417":1,"1419":1,"1423":1,"1427":3,"1441":1,"1442":2,"1445":4,"1447":2,"1450":2,"1454":3,"1455":13,"1458":4,"1461":1,"1466":4,"1467":35,"1468":3,"1469":2,"1470":4,"1472":3,"1473":1,"1481":2,"1486":2,"1492":1,"1526":1,"1554":1,"1585":1,"1586":1,"1589":2,"1591":2,"1595":1,"1596":3,"1597":1,"1667":2,"1670":4,"1770":1,"1786":1,"1790":1,"1892":1,"1893":7,"1894":1,"1895":3,"1897":1,"1898":1,"1899":2,"1901":1,"1902":2,"1905":3,"1973":1,"1975":2,"1980":2,"1981":1,"1985":1,"2010":1,"2013":1,"2022":2,"2025":3,"2029":1,"2113":1,"2127":1,"2129":1,"2144":1,"2151":1,"2163":1,"2168":9,"2169":1,"2171":1,"2200":2,"2210":1,"2232":1,"2234":3}}],["secondfactor",{"3":{"1300":1}}],["secondentityfullname",{"3":{"1286":2}}],["secondjob",{"3":{"1199":2,"1207":1}}],["secondtestrequestvalidator",{"3":{"1199":2,"1207":1}}],["secondarysynced",{"3":{"1359":1}}],["secondarycontrasttext",{"3":{"1324":1}}],["secondarylight",{"3":{"1324":1}}],["secondarydark",{"3":{"1324":1}}],["secondary",{"2":{"2077":1},"3":{"618":1,"1191":1,"1286":1,"1300":1,"1324":12,"1350":1,"1358":1,"1359":1,"1380":1,"1395":1,"1492":1,"1526":5,"1535":1,"1577":1,"1591":1,"1612":1,"1638":1,"2077":2}}],["seconds",{"3":{"0":1,"19":2,"22":2,"23":1,"24":1,"72":2,"73":2,"121":1,"178":1,"233":1,"235":1,"243":3,"245":1,"254":1,"257":1,"379":2,"387":1,"390":3,"392":2,"460":2,"461":2,"463":1,"565":1,"707":1,"709":1,"733":1,"735":1,"818":1,"819":2,"821":2,"827":1,"830":1,"831":1,"833":1,"837":2,"838":2,"869":1,"914":1,"1028":2,"1029":1,"1044":1,"1061":1,"1089":1,"1091":1,"1101":1,"1124":2,"1184":1,"1256":1,"1259":6,"1263":1,"1264":3,"1270":4,"1273":1,"1286":4,"1293":1,"1300":11,"1301":7,"1309":4,"1311":6,"1312":4,"1317":1,"1320":1,"1323":8,"1324":15,"1328":1,"1337":1,"1339":9,"1359":2,"1378":1,"1380":4,"1390":1,"1395":2,"1396":3,"1402":5,"1415":1,"1416":2,"1417":5,"1419":1,"1425":1,"1427":2,"1430":1,"1433":1,"1436":8,"1441":3,"1443":2,"1447":3,"1451":1,"1455":2,"1456":1,"1467":11,"1490":1,"1492":1,"1616":1,"1639":1,"1668":1,"1748":1,"1765":1,"1841":1,"1843":1,"1906":1,"1916":1,"1918":1,"1922":2,"1923":1,"1924":1,"1948":1,"2001":1,"2011":1,"2025":1,"2052":1,"2068":3,"2076":1,"2136":1,"2158":4,"2159":1,"2160":1,"2175":1,"2179":1,"2194":1,"2200":1,"2204":1}}],["second",{"0":{"95":1,"1293":1,"1722":1,"2067":1,"2075":1,"2139":1},"1":{"816":1,"817":1,"818":1,"819":1,"820":1,"821":1,"822":1,"823":1,"1942":1,"1943":1,"1944":1,"1945":1,"1946":1,"1947":1,"1948":1,"1949":1,"1950":1,"2196":1,"2197":1,"2198":1,"2199":1,"2200":1,"2201":1,"2202":1,"2203":1,"2204":1,"2205":1},"3":{"0":34,"15":1,"24":2,"27":1,"31":1,"38":1,"55":1,"70":3,"71":4,"74":1,"91":1,"92":1,"95":1,"100":2,"113":1,"115":1,"122":1,"126":3,"130":1,"136":1,"137":1,"139":2,"150":1,"152":1,"156":1,"157":1,"165":1,"173":1,"178":3,"189":1,"197":1,"199":1,"200":1,"201":2,"214":1,"219":1,"231":1,"233":1,"234":1,"235":4,"237":2,"243":3,"252":1,"254":2,"258":1,"265":2,"279":1,"280":1,"285":1,"292":1,"296":1,"305":1,"324":1,"325":1,"340":1,"341":3,"342":1,"350":2,"351":1,"352":2,"358":1,"374":1,"379":2,"386":1,"387":2,"388":1,"390":1,"391":1,"395":3,"397":1,"404":3,"409":1,"411":1,"412":1,"415":1,"428":1,"436":1,"448":2,"450":2,"457":1,"459":7,"460":1,"461":2,"463":2,"465":5,"466":1,"477":1,"501":2,"505":1,"507":1,"508":1,"513":1,"517":1,"519":1,"524":1,"528":1,"530":1,"531":1,"534":1,"536":1,"538":2,"539":1,"540":1,"543":1,"546":1,"549":1,"551":1,"556":3,"558":1,"564":2,"599":1,"600":1,"609":1,"617":1,"619":1,"624":1,"628":2,"629":1,"631":1,"633":3,"635":2,"638":1,"640":4,"642":1,"649":1,"655":1,"656":1,"657":1,"660":1,"665":2,"673":1,"674":1,"675":2,"676":2,"681":1,"689":1,"690":2,"691":4,"692":1,"697":1,"698":2,"699":1,"700":1,"702":1,"707":3,"709":1,"715":1,"720":1,"728":1,"732":1,"733":4,"734":2,"735":2,"736":2,"737":2,"740":1,"741":3,"742":1,"749":2,"757":3,"758":1,"759":2,"761":1,"784":1,"789":1,"790":1,"792":1,"794":1,"810":1,"811":3,"813":1,"816":1,"818":1,"819":4,"820":1,"821":2,"825":1,"827":8,"828":1,"829":5,"831":1,"832":2,"834":1,"837":2,"849":1,"853":1,"854":2,"855":1,"859":1,"861":1,"881":2,"882":2,"889":1,"891":1,"897":1,"904":1,"905":1,"906":1,"907":1,"914":1,"916":1,"917":1,"926":2,"931":1,"934":1,"946":1,"947":2,"974":1,"988":3,"990":1,"994":1,"995":2,"996":6,"999":1,"1003":1,"1018":1,"1019":1,"1020":2,"1025":1,"1028":1,"1042":2,"1043":2,"1045":1,"1050":1,"1051":2,"1058":1,"1059":1,"1060":1,"1074":1,"1075":1,"1079":1,"1089":2,"1090":2,"1091":1,"1092":1,"1093":1,"1107":1,"1116":3,"1128":1,"1134":1,"1142":1,"1154":2,"1178":1,"1184":1,"1185":1,"1212":5,"1221":1,"1229":4,"1231":1,"1234":1,"1236":2,"1237":18,"1243":1,"1244":2,"1247":12,"1248":1,"1249":2,"1251":1,"1252":1,"1254":2,"1255":1,"1256":1,"1257":1,"1259":15,"1262":1,"1263":3,"1264":3,"1265":3,"1267":1,"1269":1,"1270":36,"1271":4,"1273":3,"1274":3,"1275":5,"1277":1,"1278":3,"1283":1,"1286":72,"1287":2,"1289":3,"1293":5,"1297":1,"1298":2,"1300":67,"1301":17,"1302":1,"1305":1,"1307":4,"1309":26,"1310":4,"1311":31,"1312":10,"1315":1,"1317":2,"1318":1,"1322":1,"1323":38,"1324":78,"1326":1,"1327":2,"1328":1,"1330":9,"1331":1,"1332":1,"1333":2,"1334":2,"1335":1,"1337":1,"1338":7,"1339":55,"1347":1,"1350":22,"1352":1,"1355":2,"1356":1,"1358":2,"1359":103,"1365":1,"1366":1,"1368":1,"1369":11,"1372":2,"1375":2,"1376":1,"1378":2,"1379":2,"1380":16,"1385":1,"1388":1,"1389":2,"1390":3,"1392":2,"1393":2,"1395":43,"1396":79,"1397":1,"1398":1,"1399":1,"1402":15,"1406":1,"1407":1,"1413":1,"1415":39,"1416":13,"1417":17,"1424":1,"1427":4,"1429":1,"1430":3,"1431":1,"1433":2,"1436":96,"1438":10,"1440":1,"1441":5,"1442":3,"1443":2,"1445":1,"1446":2,"1447":4,"1453":2,"1454":1,"1455":10,"1456":1,"1458":1,"1459":2,"1460":1,"1465":5,"1466":1,"1467":17,"1469":1,"1473":1,"1474":1,"1476":3,"1478":2,"1481":1,"1488":3,"1489":2,"1490":1,"1492":5,"1496":8,"1509":1,"1526":3,"1534":2,"1545":1,"1547":1,"1577":4,"1585":1,"1591":3,"1630":2,"1631":3,"1632":1,"1639":2,"1651":1,"1654":1,"1666":1,"1667":1,"1668":2,"1672":1,"1684":2,"1686":2,"1689":1,"1701":2,"1719":1,"1721":2,"1722":2,"1724":1,"1727":4,"1729":2,"1731":4,"1748":1,"1755":1,"1765":2,"1767":1,"1776":1,"1779":2,"1781":2,"1790":1,"1810":1,"1813":1,"1819":1,"1821":3,"1825":1,"1829":1,"1832":1,"1839":1,"1840":4,"1841":1,"1843":2,"1846":1,"1848":1,"1851":1,"1852":1,"1853":1,"1863":1,"1869":1,"1871":1,"1875":1,"1876":2,"1877":2,"1898":3,"1899":1,"1900":2,"1902":2,"1907":1,"1909":3,"1911":1,"1915":1,"1916":2,"1918":2,"1920":3,"1921":1,"1922":2,"1923":2,"1925":1,"1933":3,"1934":1,"1937":1,"1942":6,"1943":1,"1944":1,"1945":2,"1946":1,"1947":1,"1948":2,"1950":3,"1959":1,"1960":1,"1962":1,"1964":1,"1967":3,"1970":3,"1973":1,"1974":1,"1977":1,"1978":1,"1979":3,"1980":1,"1982":1,"1984":1,"1986":1,"1998":1,"2001":2,"2007":3,"2008":1,"2012":1,"2013":2,"2014":1,"2025":4,"2030":1,"2031":5,"2032":2,"2033":4,"2035":1,"2038":1,"2046":2,"2049":1,"2050":1,"2053":1,"2058":1,"2064":1,"2066":1,"2067":1,"2071":1,"2072":1,"2074":1,"2075":1,"2076":1,"2083":1,"2084":1,"2099":1,"2102":1,"2115":1,"2116":1,"2123":1,"2128":1,"2131":4,"2133":1,"2134":2,"2135":1,"2136":1,"2138":1,"2139":1,"2142":2,"2148":1,"2149":1,"2158":2,"2159":3,"2160":1,"2166":2,"2168":1,"2169":2,"2170":2,"2171":1,"2176":1,"2180":1,"2182":1,"2183":2,"2186":1,"2189":1,"2190":1,"2192":1,"2194":1,"2195":2,"2196":4,"2197":1,"2198":3,"2199":3,"2200":1,"2205":2,"2210":3,"2213":1,"2234":5,"2241":1}}],["school",{"3":{"1395":1}}],["schedulable",{"3":{"0":1,"1044":1,"1323":1,"1534":1,"1575":1,"1582":1,"1585":1,"2188":1,"2194":1}}],["scheduling",{"0":{"2187":1},"3":{"0":1,"230":1,"255":1,"444":1,"517":1,"529":1,"536":1,"539":3,"706":1,"707":6,"708":1,"709":2,"710":1,"995":1,"1036":1,"1041":1,"1042":2,"1044":2,"1191":1,"1203":6,"1207":44,"1259":1,"1264":1,"1275":1,"1284":1,"1286":14,"1317":3,"1318":1,"1320":1,"1323":27,"1350":1,"1357":1,"1359":16,"1380":3,"1396":1,"1410":1,"1411":1,"1415":12,"1417":11,"1436":1,"1438":6,"1442":1,"1487":1,"1496":1,"1527":1,"1532":1,"1574":1,"1578":1,"1594":1,"1630":2,"1637":1,"1638":1,"1923":1,"1950":2,"2167":2,"2191":1,"2194":2}}],["scheduleavatarblobdeletionasync",{"3":{"1415":5}}],["scheduleasync",{"2":{"1099":1,"1103":1,"2187":1,"2195":1},"3":{"1042":1,"1099":1,"1103":1,"1286":5,"1323":5,"1359":2,"1376":1,"1380":1,"1396":3,"1415":4,"1417":5,"2187":1,"2191":1,"2195":1}}],["scheduleuploadedblobcleanupasync",{"3":{"1415":1}}],["scheduleerror",{"3":{"1395":7}}],["schedulecachekey",{"3":{"1395":1}}],["scheduleblobcleanupasync",{"3":{"1359":1}}],["scheduleorphancleanupasync",{"3":{"1359":2}}],["schedule",{"2":{"1456":1},"3":{"0":1,"19":1,"23":1,"224":1,"230":1,"404":1,"444":2,"500":1,"511":1,"536":1,"539":2,"591":1,"617":1,"625":1,"627":1,"628":1,"641":1,"689":1,"706":1,"707":7,"708":3,"709":3,"727":1,"860":1,"900":1,"954":2,"1018":2,"1019":1,"1040":2,"1045":1,"1099":1,"1100":1,"1103":1,"1116":2,"1118":1,"1247":1,"1259":2,"1260":1,"1269":1,"1270":5,"1286":3,"1317":1,"1323":25,"1324":3,"1340":1,"1343":1,"1349":1,"1350":12,"1351":1,"1352":1,"1356":1,"1357":1,"1359":31,"1369":6,"1376":2,"1380":11,"1385":1,"1391":5,"1395":59,"1396":21,"1411":1,"1415":3,"1416":2,"1417":12,"1427":1,"1436":2,"1438":8,"1443":1,"1455":1,"1456":7,"1458":1,"1459":1,"1475":1,"1490":3,"1492":2,"1524":1,"1526":1,"1534":2,"1599":3,"1626":3,"1629":4,"1630":2,"1631":4,"1632":6,"1636":1,"1637":4,"1638":1,"1639":1,"1640":4,"1841":1,"1895":1,"1948":6,"2007":1,"2048":1,"2129":2,"2158":1,"2188":2,"2192":2,"2194":2,"2234":2}}],["schedules",{"0":{"1254":1},"3":{"0":2,"440":1,"444":3,"459":1,"466":1,"536":1,"640":1,"644":1,"707":1,"810":1,"814":1,"819":1,"849":1,"897":1,"901":1,"907":1,"1016":1,"1018":1,"1020":1,"1042":1,"1044":1,"1116":1,"1118":1,"1212":1,"1286":1,"1300":1,"1301":1,"1323":7,"1339":1,"1347":1,"1357":1,"1359":9,"1367":1,"1369":2,"1376":1,"1380":4,"1390":1,"1395":4,"1396":5,"1408":1,"1410":1,"1411":2,"1415":14,"1417":5,"1436":2,"1631":1,"1639":1,"1640":1,"1843":1,"1918":1,"2128":1,"2129":1,"2167":1,"2170":1,"2187":1,"2191":2,"2192":2,"2194":1,"2195":2}}],["scheduledon",{"2":{"1045":1},"3":{"1042":1,"1045":1,"1286":4,"1323":2,"2188":1}}],["scheduledjobs",{"3":{"1273":1,"1286":3,"1317":1,"1323":4,"1436":1,"1438":1}}],["scheduledjobrunnertests",{"3":{"1199":1,"1207":2,"1323":2,"1438":1}}],["scheduledjobrunner",{"2":{"995":1,"1043":1},"3":{"707":4,"710":1,"995":2,"996":1,"1043":1,"1199":5,"1203":1,"1207":3,"1269":1,"1270":2,"1286":4,"1313":1,"1317":10,"1323":42,"1438":1,"1442":2,"1496":3}}],["scheduledjoboverridesettings",{"2":{"707":1,"1320":1},"3":{"707":1,"1199":3,"1203":1,"1207":1,"1270":1,"1320":1,"1323":2}}],["scheduledjobentry",{"2":{"995":1,"1036":1,"1041":1},"3":{"0":1,"707":3,"710":1,"995":1,"1041":2,"1199":7,"1203":1,"1207":2,"1212":1,"1270":1,"1273":1,"1286":4,"1317":3,"1323":8}}],["scheduledqueryalertspecs",{"2":{"609":1,"1476":1,"2160":1},"3":{"609":1,"1467":1,"1476":2,"2160":1}}],["scheduledqueryrules",{"2":{"1474":1,"2160":1},"3":{"0":1,"609":1,"1467":1,"1474":1,"1577":1,"2160":1}}],["scheduled",{"3":{"0":4,"24":1,"71":1,"166":1,"229":1,"403":1,"405":1,"440":1,"444":1,"470":1,"534":1,"536":1,"538":1,"539":1,"541":1,"607":1,"609":4,"625":1,"626":1,"709":1,"715":1,"720":1,"767":1,"808":1,"810":1,"813":2,"818":2,"827":1,"897":1,"898":1,"988":1,"1018":2,"1019":1,"1020":1,"1026":1,"1042":1,"1043":1,"1044":3,"1099":1,"1100":1,"1116":2,"1212":4,"1259":2,"1263":1,"1270":5,"1275":1,"1277":1,"1278":1,"1286":17,"1318":1,"1323":17,"1327":1,"1337":1,"1339":5,"1346":1,"1350":3,"1352":1,"1357":2,"1359":14,"1369":1,"1380":7,"1395":1,"1396":14,"1415":9,"1416":2,"1417":5,"1436":4,"1438":1,"1440":1,"1455":4,"1456":2,"1457":1,"1458":1,"1460":5,"1465":5,"1467":9,"1469":1,"1474":3,"1475":6,"1476":1,"1492":1,"1525":2,"1526":5,"1530":1,"1531":3,"1532":2,"1534":6,"1568":1,"1575":3,"1577":1,"1578":1,"1581":2,"1582":1,"1583":2,"1584":1,"1585":7,"1591":3,"1599":2,"1630":3,"1665":1,"1670":1,"1678":1,"1679":1,"1710":1,"1720":1,"1823":1,"1832":1,"1839":1,"2035":2,"2128":1,"2129":1,"2160":2,"2163":1,"2167":1,"2169":2,"2170":2,"2187":1,"2189":1,"2193":1,"2194":2,"2195":1,"2234":2}}],["scheduleretryasync",{"3":{"1286":1}}],["schedulertableenabled",{"3":{"1286":2}}],["schedulertestharness",{"3":{"1199":3,"1207":5,"1323":2}}],["schedulertestcontext",{"3":{"1199":2,"1207":1}}],["schedulermodelgatetests",{"3":{"1191":1,"1199":1,"1207":4,"1286":2,"1323":2,"1438":2,"1496":1}}],["schedulermetricstests",{"3":{"1199":1,"1207":2,"1323":2,"1438":1}}],["schedulermetrics",{"2":{"711":1,"2161":1},"3":{"707":2,"711":1,"1199":3,"1203":1,"1207":2,"1317":5,"1323":12,"1438":1,"1496":1,"2158":1,"2161":1}}],["schedulersettings",{"2":{"707":1,"711":1},"3":{"674":1,"707":4,"711":1,"1199":7,"1203":1,"1207":3,"1270":1,"1286":3,"1313":1,"1317":2,"1320":5,"1323":17}}],["schedulers",{"3":{"0":1,"827":1,"1043":1}}],["scheduler",{"1":{"704":1,"705":1,"706":1,"707":1,"708":1,"709":1,"710":1,"711":1},"2":{"400":1,"408":1,"1317":1,"2007":1,"2014":1,"2162":1},"3":{"0":9,"170":2,"258":1,"400":2,"408":1,"536":2,"539":1,"540":1,"696":1,"704":1,"705":1,"707":9,"708":1,"709":1,"710":1,"711":1,"713":1,"715":2,"716":2,"720":3,"721":1,"897":1,"905":1,"910":2,"994":1,"996":1,"999":1,"1000":1,"1034":1,"1041":1,"1042":1,"1043":1,"1046":1,"1085":1,"1212":1,"1213":1,"1237":1,"1269":1,"1270":8,"1273":1,"1275":1,"1277":2,"1284":1,"1286":23,"1300":1,"1317":5,"1318":2,"1320":1,"1323":37,"1333":3,"1339":1,"1359":3,"1379":1,"1380":1,"1396":2,"1415":1,"1436":1,"1438":3,"1442":2,"1443":2,"1446":1,"1467":6,"1469":1,"1496":2,"1577":1,"1585":1,"1660":1,"1664":4,"1670":1,"1675":1,"1839":2,"1948":1,"1950":1,"2007":3,"2013":1,"2014":1,"2158":7,"2162":1,"2185":1,"2187":1,"2194":1,"2229":1,"2234":1}}],["schemas",{"3":{"0":1,"109":1,"656":1,"1034":1,"1035":1,"1082":1,"1085":1,"1093":1,"1286":1,"1300":2,"1422":1,"1543":1,"2176":1}}],["schemaversionrule",{"3":{"1436":1}}],["schemaversion",{"2":{"78":1,"81":1,"131":1,"256":1,"447":1,"455":1,"844":1,"845":1,"847":1,"1508":1,"1576":1,"1577":1,"1888":1,"1889":1,"1891":1,"1892":1,"2132":1},"3":{"0":2,"78":5,"79":1,"80":2,"81":1,"82":1,"131":1,"255":1,"256":1,"447":1,"455":1,"782":1,"844":1,"845":1,"846":1,"847":1,"1212":1,"1249":3,"1259":7,"1270":2,"1350":1,"1436":19,"1489":1,"1508":1,"1526":3,"1576":1,"1577":2,"1665":1,"1888":1,"1889":5,"1891":3,"1892":1,"2132":1,"2234":2}}],["schema",{"1":{"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"561":1,"562":1,"563":1,"564":1,"565":1,"566":1,"567":1,"568":1,"695":1,"696":1,"697":1,"698":1,"699":1,"700":1,"701":1,"702":1,"703":1,"1887":1,"1888":1,"1889":1,"1890":1,"1891":1,"1892":1},"3":{"0":15,"26":1,"46":1,"48":1,"75":1,"109":1,"166":1,"200":1,"282":1,"292":2,"295":1,"309":1,"342":1,"343":1,"376":1,"452":1,"453":1,"455":1,"470":1,"471":2,"561":1,"563":1,"564":2,"565":2,"566":1,"568":3,"572":1,"573":1,"574":1,"633":1,"657":1,"658":1,"695":1,"698":1,"700":1,"702":1,"703":1,"707":1,"708":1,"719":1,"756":2,"757":2,"759":2,"761":1,"762":1,"786":1,"799":1,"854":1,"855":1,"891":3,"892":1,"893":1,"931":1,"932":1,"933":1,"935":1,"964":1,"965":1,"1004":1,"1012":1,"1018":5,"1026":1,"1034":4,"1042":1,"1043":1,"1050":2,"1051":1,"1082":1,"1083":1,"1085":2,"1090":2,"1093":1,"1133":2,"1144":1,"1154":1,"1175":1,"1212":8,"1213":1,"1237":3,"1259":2,"1270":1,"1273":1,"1276":1,"1280":2,"1281":1,"1282":3,"1286":60,"1294":1,"1300":7,"1309":2,"1311":30,"1312":2,"1323":10,"1327":1,"1339":1,"1350":5,"1359":7,"1362":2,"1364":1,"1366":4,"1369":21,"1380":4,"1395":1,"1396":12,"1402":1,"1405":1,"1412":1,"1415":5,"1417":1,"1427":1,"1436":4,"1438":5,"1441":1,"1455":8,"1461":2,"1467":5,"1473":2,"1490":2,"1492":1,"1496":1,"1526":3,"1544":1,"1545":4,"1546":1,"1547":1,"1551":1,"1577":5,"1590":1,"1591":1,"1614":1,"1641":1,"1664":4,"1665":1,"1667":1,"1684":1,"1688":1,"1697":1,"1719":1,"1721":1,"1765":1,"1779":1,"1810":1,"1848":1,"1851":2,"1854":1,"1856":5,"1859":1,"1873":2,"1876":2,"1886":1,"1887":2,"1888":1,"1890":1,"1892":2,"1927":1,"1948":1,"1992":1,"2014":1,"2044":1,"2056":1,"2114":1,"2135":1,"2181":1,"2194":1,"2209":1,"2234":5}}],["schemename",{"2":{"1300":1},"3":{"1300":4,"1436":3}}],["schemes",{"3":{"350":2,"352":1,"420":1,"422":1,"1237":1,"1271":1,"1300":1,"1311":4,"1324":3,"1350":1,"1359":2,"1417":2,"1975":1,"1976":1,"1978":2}}],["scheme",{"3":{"0":3,"59":1,"92":2,"96":1,"207":3,"208":2,"209":2,"265":1,"273":2,"309":1,"310":1,"311":1,"350":3,"352":1,"355":1,"360":1,"361":2,"418":4,"420":5,"421":2,"422":3,"427":2,"556":1,"557":1,"618":1,"665":1,"668":1,"749":2,"751":1,"827":2,"907":1,"945":1,"948":1,"1124":1,"1184":1,"1186":1,"1212":2,"1237":3,"1271":7,"1286":4,"1287":1,"1298":1,"1300":13,"1311":27,"1312":1,"1323":2,"1324":17,"1339":2,"1347":1,"1350":2,"1353":1,"1359":38,"1395":4,"1406":1,"1415":4,"1416":11,"1417":15,"1434":1,"1436":8,"1441":1,"1447":1,"1467":1,"1490":1,"1534":1,"1577":1,"1599":1,"1611":1,"1647":1,"1650":1,"1698":1,"1721":1,"1825":3,"1900":1,"1903":1,"1904":1,"1965":1,"1968":3,"1971":1,"1975":5,"1976":3,"1978":1,"2026":1,"2085":1,"2088":1,"2124":1,"2144":1,"2146":1,"2234":2}}],["sc",{"3":{"1359":2}}],["science",{"3":{"1913":1,"2224":1}}],["sci",{"3":{"1350":4,"1359":9}}],["scuffed",{"3":{"1324":1}}],["sccs",{"3":{"1201":1,"1496":3,"1498":1,"1517":1}}],["scc",{"0":{"1198":1},"3":{"1196":1,"1237":1,"1436":1,"1496":5,"1498":1}}],["scenarios",{"3":{"1286":1,"1359":1,"1474":1,"1492":1,"1639":1,"1775":1,"2034":1,"2038":1}}],["scenario",{"0":{"2034":1},"3":{"68":2,"627":1,"1229":1,"1271":1,"1286":1,"1323":2,"1324":1,"1350":1,"1395":2,"1436":3,"1438":1,"1467":1,"1472":1,"1474":2,"1492":3,"1534":1,"1591":1,"1709":1,"2030":1,"2034":3,"2035":1,"2038":1,"2039":2}}],["scorable",{"3":{"1350":1,"2192":1}}],["scoretier",{"3":{"1395":1}}],["scoretieroptions",{"3":{"1395":2}}],["scorematchesfilter",{"3":{"1395":3}}],["scorepollsession",{"2":{"1390":1},"3":{"1199":2,"1203":1,"1207":3,"1390":5,"1395":21}}],["scorepollsignal",{"2":{"1390":1},"3":{"1199":4,"1203":1,"1207":1,"1390":1,"1395":6,"1496":1}}],["scorepollhost",{"3":{"1199":3,"1203":1,"1207":1,"1390":1,"1395":6,"1496":1}}],["scorepolltrackertests",{"3":{"1199":1,"1207":2}}],["scorepolltracker",{"2":{"1390":1},"3":{"1199":3,"1203":1,"1207":3,"1390":2,"1395":17,"1496":2}}],["scorerequested",{"3":{"1395":2}}],["scorer",{"3":{"756":1,"1016":1,"1018":4,"1021":2,"1095":2,"1359":4,"1360":1,"1366":5,"1368":1,"1369":9,"1435":1,"1437":1,"1442":1,"1455":2,"1461":1,"1463":1,"1485":1,"1487":1,"1492":2,"2241":1}}],["scoreeventsessionscommand",{"3":{"1496":1}}],["scoreeventsessionshandler",{"3":{"1286":1,"1350":1,"1496":3}}],["scoreeventsessionsresultdto",{"2":{"1347":1,"1390":1},"3":{"1199":9,"1203":1,"1207":1,"1347":1,"1350":3,"1359":2,"1390":1,"1395":3}}],["scoreeventsessionsinternalcommandmarkertests",{"2":{"1438":1},"3":{"1199":1,"1207":2,"1438":2}}],["scoreeventsessionsinternalcommand",{"2":{"1018":1,"1264":1,"1347":1,"1367":1,"1376":1,"1390":1,"2138":1,"2140":1},"3":{"1018":1,"1199":6,"1203":1,"1207":2,"1264":2,"1286":1,"1347":2,"1350":3,"1359":8,"1367":1,"1369":1,"1376":1,"1380":3,"1390":2,"1438":1,"1442":1,"1496":2,"2138":2,"2140":3,"2192":3}}],["scoreeventsessionsinternalcommandhandlertests",{"2":{"1438":1},"3":{"1199":1,"1207":2,"1438":2}}],["scoreeventsessionsinternalcommandhandler",{"2":{"994":1,"996":1,"1018":1,"1270":1,"1367":1,"1369":1,"1496":1,"2192":1},"3":{"493":1,"494":1,"495":1,"994":1,"995":1,"996":2,"998":1,"1018":2,"1099":1,"1103":1,"1199":2,"1203":1,"1207":2,"1270":3,"1350":2,"1359":14,"1367":2,"1369":3,"1438":2,"1496":2,"2192":1}}],["scoreeventsessions",{"3":{"493":1,"494":1,"495":1,"995":1,"1018":2,"1082":1,"1099":1,"1203":9,"1207":18,"1264":1,"1270":3,"1286":1,"1347":1,"1350":1,"1359":24,"1367":1,"1369":2,"1390":1,"1438":1,"1442":1,"1467":1,"1496":3,"1526":1}}],["score",{"1":{"1794":1,"1795":1,"1796":1,"1797":1,"1798":1,"1799":1,"1800":1,"1801":1,"1802":1},"3":{"0":3,"520":1,"1010":2,"1012":6,"1014":2,"1017":2,"1018":9,"1019":2,"1020":2,"1082":1,"1094":1,"1193":1,"1212":1,"1216":1,"1342":3,"1347":1,"1350":15,"1359":40,"1362":2,"1366":3,"1369":16,"1376":1,"1385":2,"1395":39,"1396":1,"1435":5,"1436":1,"1438":3,"1455":1,"1487":1,"1496":1,"1518":1,"1524":1,"1525":1,"1526":4,"1527":2,"1530":3,"1531":3,"1534":1,"1535":1,"1537":8,"1553":1,"1564":1,"1575":1,"1578":2,"1580":1,"1582":2,"1585":3,"1591":1,"1597":1,"1599":1,"1630":1,"1632":2,"1640":1,"1794":3,"1797":1,"1799":4,"1800":1,"1801":2,"1802":6,"2051":1,"2061":1,"2116":1,"2192":4,"2207":1,"2241":2}}],["scorecards",{"0":{"1520":1},"3":{"1011":1,"1012":1,"1216":1,"1521":1,"1604":1,"1674":2,"2233":1,"2235":1}}],["scorecard",{"0":{"1526":1,"1577":1,"1591":1,"2233":1},"1":{"1522":1,"1523":1,"1524":1,"1525":1,"1526":1,"1527":1,"1528":1,"1573":1,"1574":1,"1575":1,"1576":1,"1577":1,"1578":1,"1579":1,"1587":1,"1588":1,"1589":1,"1590":1,"1591":1,"1592":1,"1593":1},"3":{"0":2,"1006":2,"1007":1,"1010":1,"1011":4,"1012":3,"1013":2,"1014":2,"1021":1,"1089":1,"1340":1,"1342":2,"1477":1,"1496":1,"1518":1,"1520":4,"1522":2,"1526":1,"1528":1,"1529":1,"1536":2,"1537":1,"1553":1,"1571":1,"1573":2,"1577":1,"1579":1,"1580":3,"1587":2,"1591":1,"1594":2,"1597":1,"1605":1,"1610":1,"1673":1,"1739":1,"1744":1,"1778":1,"1787":2,"1794":1,"1796":1,"1799":3,"1801":2,"1802":4,"1805":1,"1811":2,"1888":1,"1903":1,"1905":2,"1910":2,"1916":1,"1929":1,"1930":3,"2035":1,"2044":2,"2049":3,"2060":3,"2061":1,"2063":3,"2071":2,"2081":1,"2087":1,"2111":1,"2117":3,"2135":2,"2155":2,"2162":2,"2171":2,"2181":1,"2182":2,"2195":2,"2205":2,"2213":2}}],["scoredshown",{"3":{"1395":1}}],["scoredthisrun",{"3":{"1395":14}}],["scoredon",{"3":{"1350":2,"1359":1,"1390":1,"1395":3}}],["scored",{"0":{"1784":1,"1799":1},"3":{"0":1,"1011":5,"1012":5,"1013":2,"1014":2,"1017":1,"1018":1,"1022":1,"1090":2,"1216":1,"1347":2,"1350":4,"1359":17,"1376":1,"1380":3,"1390":2,"1395":6,"1426":1,"1428":1,"1438":2,"1467":1,"1516":1,"1519":1,"1521":1,"1522":1,"1526":3,"1527":2,"1534":1,"1536":2,"1547":1,"1553":1,"1554":1,"1571":1,"1573":1,"1577":3,"1578":2,"1585":3,"1587":1,"1591":1,"1592":1,"1599":1,"1645":1,"1780":1,"1794":2,"1799":2,"1801":3,"1802":1,"1903":1,"1910":1,"1916":1,"2041":1,"2063":2,"2071":2,"2087":1,"2173":1,"2192":2,"2216":1,"2233":1}}],["scoresessionsasync",{"2":{"1390":1},"3":{"1380":4,"1390":1,"1395":7}}],["scoresessionasync",{"3":{"1018":1,"1359":5,"1369":1}}],["scoreschema",{"3":{"1366":2,"1369":2}}],["scores",{"3":{"0":2,"85":1,"768":1,"1010":3,"1012":5,"1014":1,"1017":1,"1018":7,"1019":2,"1020":1,"1090":1,"1094":1,"1259":28,"1286":1,"1323":7,"1342":2,"1347":2,"1350":10,"1359":21,"1362":1,"1366":4,"1367":1,"1369":9,"1380":1,"1390":2,"1395":10,"1396":1,"1435":2,"1436":2,"1437":1,"1438":2,"1487":1,"1492":1,"1496":1,"1521":1,"1522":1,"1526":1,"1536":1,"1537":1,"1547":2,"1570":2,"1573":1,"1587":1,"1591":1,"1592":3,"1594":1,"1632":1,"1784":4,"1794":1,"1797":1,"1798":1,"1799":5,"1800":1,"1801":1,"1929":1,"2054":1,"2060":1,"2063":3,"2116":1,"2173":1,"2184":1,"2234":1}}],["scoringinstruments",{"3":{"1496":2}}],["scoring=true",{"3":{"1492":1}}],["scoringnoscores",{"3":{"1395":1}}],["scoringcomplete",{"3":{"1395":2}}],["scoringtimedout",{"3":{"1395":2}}],["scoringpartial",{"3":{"1395":2}}],["scoringpollfailed",{"3":{"1395":2}}],["scoringpercent",{"3":{"1395":1}}],["scoring",{"0":{"1359":1,"1366":1,"1367":1,"1435":1,"1527":1,"1578":1,"1592":1},"1":{"1015":1,"1016":1,"1017":1,"1018":1,"1019":1,"1020":1,"1021":1,"1022":1},"2":{"1203":1,"1369":1,"1379":1,"1427":1,"1435":1,"1437":1,"1438":1,"1442":1,"1455":1,"1486":1,"1487":1,"1492":1,"1496":1},"3":{"0":8,"492":1,"493":1,"516":1,"517":2,"520":2,"607":2,"609":2,"994":1,"995":1,"996":2,"998":1,"999":1,"1004":1,"1012":1,"1015":1,"1016":3,"1017":3,"1018":11,"1019":1,"1020":3,"1022":3,"1089":4,"1090":4,"1093":1,"1096":1,"1099":2,"1103":2,"1192":1,"1193":1,"1199":10,"1203":5,"1206":1,"1207":38,"1212":1,"1270":2,"1342":1,"1347":4,"1350":14,"1354":1,"1359":47,"1360":2,"1366":10,"1367":3,"1368":1,"1369":36,"1376":1,"1379":1,"1380":5,"1390":7,"1395":29,"1396":1,"1426":1,"1427":12,"1428":1,"1435":10,"1436":5,"1437":8,"1438":12,"1442":3,"1455":8,"1463":1,"1467":9,"1469":1,"1470":2,"1486":2,"1487":3,"1492":8,"1493":1,"1496":20,"1526":5,"1527":1,"1529":1,"1532":1,"1534":1,"1535":2,"1537":1,"1553":1,"1594":1,"1632":2,"1640":1,"1784":2,"1794":1,"1795":1,"1802":1,"1947":1,"2047":1,"2061":1,"2062":1,"2063":1,"2138":1,"2140":1,"2160":1,"2181":1,"2182":1,"2184":1,"2192":1,"2234":4}}],["scoping",{"0":{"1267":1},"3":{"0":1,"159":1,"318":3,"320":1,"321":2,"324":1,"335":1,"544":1,"545":1,"619":1,"739":1,"743":3,"826":1,"906":1,"964":1,"1239":1,"1247":3,"1270":11,"1286":2,"1297":1,"1300":7,"1309":1,"1311":12,"1323":2,"1324":6,"1350":1,"1353":2,"1359":5,"1372":2,"1380":27,"1388":1,"1395":14,"1396":9,"1402":3,"1415":1,"1416":1,"1417":1,"1436":9,"1438":3,"1455":1,"1467":1,"1496":2,"1526":2,"1591":1,"1595":1,"1596":1,"1599":1,"1631":2,"1639":4,"1666":1,"1749":1,"1759":1,"1815":2,"1920":6,"1988":1,"1997":1}}],["scoper",{"3":{"1998":1}}],["scopers",{"3":{"1260":1}}],["scopeunresolvedforpublicreader",{"3":{"1395":4}}],["scopecaption",{"3":{"1324":1}}],["scopecapturinglogger",{"3":{"1199":3,"1207":2}}],["scope=",{"3":{"1324":1}}],["scopequeryasync",{"3":{"1324":1}}],["scopeprovider",{"3":{"1324":4}}],["scopeable",{"3":{"1324":1,"1465":1}}],["scopefactory",{"3":{"1259":5,"1286":1,"1359":4,"1402":1}}],["scopekeyregex",{"3":{"1309":1}}],["scopekeymaxlength",{"2":{"1306":1},"3":{"1286":2,"1306":1,"1309":7}}],["scopekey",{"2":{"231":1,"1512":1,"1941":1},"3":{"225":1,"231":1,"1286":1,"1309":31,"1324":4,"1396":1,"1415":4,"1512":1,"1933":2,"1941":1}}],["scopedeventids",{"3":{"1359":1}}],["scopedexporttestcontroller",{"3":{"1199":2,"1207":1}}],["scopedkey",{"3":{"1324":4}}],["scopedintegrationeventhandlerbasetests",{"3":{"1199":1,"1207":6,"1259":1,"1438":2}}],["scopedintegrationeventhandlerbase",{"2":{"1252":1,"1413":1,"1665":1},"3":{"1199":15,"1203":1,"1207":2,"1252":3,"1259":24,"1355":2,"1359":11,"1396":12,"1402":4,"1413":1,"1415":7,"1496":1,"1665":1}}],["scopedprobe",{"3":{"1199":3,"1207":1}}],["scopeduseroverride",{"2":{"1045":1,"2188":1},"3":{"0":1,"1042":2,"1045":1,"1199":5,"1203":1,"1207":2,"1313":1,"1318":6,"1323":12,"1496":2,"2188":1}}],["scoped",{"0":{"1937":1},"1":{"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1},"3":{"0":19,"24":1,"26":1,"39":1,"71":1,"85":1,"86":1,"109":1,"115":1,"122":1,"149":1,"157":1,"173":1,"195":1,"200":1,"201":2,"214":1,"219":1,"223":1,"225":1,"231":1,"241":1,"243":1,"246":2,"283":1,"292":1,"303":1,"317":3,"318":2,"320":1,"324":2,"325":2,"326":1,"397":1,"415":1,"434":1,"443":1,"479":1,"482":1,"483":1,"490":1,"491":1,"492":1,"493":1,"494":1,"511":1,"513":1,"518":1,"524":1,"530":2,"545":1,"549":1,"554":1,"564":1,"601":1,"602":1,"609":2,"620":1,"633":1,"638":1,"647":1,"651":1,"665":2,"666":2,"669":1,"670":1,"698":4,"699":1,"700":2,"702":1,"703":1,"706":1,"707":3,"708":2,"719":1,"724":1,"743":1,"747":1,"749":1,"751":1,"758":1,"766":1,"791":1,"794":1,"819":1,"827":2,"832":1,"863":1,"881":1,"905":2,"910":1,"916":1,"924":1,"926":1,"941":1,"988":1,"996":3,"1012":3,"1019":1,"1020":1,"1035":1,"1042":1,"1052":1,"1073":1,"1099":1,"1100":1,"1116":2,"1124":1,"1133":2,"1147":1,"1153":1,"1168":2,"1183":1,"1212":4,"1214":2,"1237":6,"1247":7,"1252":1,"1253":3,"1256":1,"1258":1,"1259":15,"1262":2,"1263":2,"1264":1,"1265":1,"1267":3,"1269":3,"1270":41,"1271":2,"1273":1,"1275":3,"1276":1,"1277":2,"1278":1,"1286":55,"1290":1,"1294":1,"1296":1,"1300":34,"1301":4,"1306":2,"1307":1,"1308":1,"1309":25,"1310":1,"1311":44,"1312":1,"1313":2,"1316":3,"1317":3,"1318":1,"1322":1,"1323":44,"1324":70,"1337":1,"1339":16,"1346":1,"1350":5,"1353":3,"1355":2,"1359":41,"1366":1,"1368":2,"1369":10,"1372":1,"1378":1,"1380":30,"1383":1,"1384":1,"1385":1,"1395":59,"1396":85,"1400":1,"1401":1,"1402":25,"1413":1,"1415":19,"1416":4,"1417":39,"1427":1,"1431":1,"1436":50,"1438":6,"1446":1,"1453":1,"1454":1,"1455":9,"1458":1,"1460":1,"1461":2,"1467":14,"1469":1,"1474":2,"1481":1,"1486":1,"1487":2,"1489":1,"1492":3,"1496":2,"1512":1,"1525":2,"1526":8,"1531":1,"1534":3,"1548":1,"1552":1,"1555":1,"1556":3,"1577":7,"1582":1,"1591":3,"1596":2,"1599":1,"1600":1,"1629":2,"1630":4,"1631":5,"1632":4,"1635":2,"1636":1,"1638":1,"1639":2,"1640":1,"1664":1,"1666":1,"1668":2,"1669":1,"1673":1,"1714":1,"1749":1,"1757":1,"1810":1,"1815":3,"1821":1,"1825":1,"1832":1,"1849":1,"1851":2,"1883":3,"1908":1,"1920":3,"1921":1,"1924":2,"1933":2,"1934":1,"1937":1,"1940":3,"1941":2,"1948":2,"1956":2,"1959":1,"1982":1,"1995":2,"1996":4,"1998":2,"2001":1,"2002":1,"2011":1,"2025":1,"2034":1,"2058":2,"2076":1,"2081":1,"2087":1,"2097":2,"2120":1,"2124":1,"2128":1,"2152":1,"2188":1,"2234":1}}],["scopes",{"3":{"0":6,"143":1,"179":1,"200":1,"201":1,"225":1,"318":1,"325":2,"378":1,"384":1,"397":1,"544":2,"545":1,"548":1,"607":1,"743":1,"782":1,"826":1,"905":2,"953":1,"1057":1,"1212":1,"1239":1,"1259":2,"1267":1,"1270":3,"1286":3,"1300":1,"1301":1,"1309":1,"1311":5,"1323":2,"1324":2,"1333":1,"1339":2,"1350":4,"1359":6,"1380":1,"1395":3,"1396":17,"1402":3,"1415":4,"1417":1,"1436":15,"1438":1,"1457":1,"1483":1,"1577":2,"1761":1,"1813":1,"1815":1,"1817":2,"1933":1,"1934":1,"1975":1,"1995":1,"1996":2,"2007":1,"2165":1,"2234":2}}],["scope",{"0":{"1305":1,"1680":1},"2":{"1054":1,"1920":2},"3":{"0":15,"15":1,"24":2,"26":6,"27":7,"71":1,"81":1,"84":1,"123":4,"125":1,"135":3,"136":2,"141":1,"160":2,"178":3,"180":1,"193":1,"201":1,"202":6,"223":1,"225":1,"230":1,"243":1,"246":2,"264":1,"312":1,"319":2,"320":1,"321":1,"343":1,"350":2,"359":2,"361":1,"365":2,"368":1,"369":1,"384":1,"388":1,"397":1,"405":2,"438":2,"459":1,"461":2,"501":1,"507":1,"522":1,"526":1,"528":1,"529":1,"531":1,"534":1,"536":4,"545":1,"546":1,"550":1,"556":1,"579":1,"620":1,"674":1,"688":1,"690":10,"691":3,"692":1,"696":3,"698":12,"699":1,"700":2,"702":5,"703":1,"707":3,"719":1,"731":2,"743":2,"744":1,"749":1,"799":1,"803":1,"820":1,"827":1,"848":4,"889":1,"898":1,"899":1,"905":1,"910":1,"914":1,"920":1,"926":3,"966":1,"988":5,"990":1,"994":1,"996":1,"1010":1,"1012":2,"1013":1,"1018":2,"1042":3,"1051":1,"1054":1,"1067":1,"1074":1,"1093":1,"1100":1,"1108":1,"1114":1,"1120":1,"1124":1,"1133":1,"1157":1,"1161":1,"1168":3,"1177":1,"1192":1,"1195":1,"1204":2,"1211":1,"1212":2,"1214":1,"1236":1,"1237":1,"1238":1,"1239":1,"1240":1,"1245":1,"1246":7,"1247":14,"1252":1,"1253":3,"1254":1,"1256":1,"1258":1,"1259":38,"1260":1,"1263":3,"1265":1,"1267":1,"1269":1,"1270":43,"1273":1,"1275":3,"1276":6,"1277":1,"1278":4,"1286":92,"1300":12,"1303":1,"1304":1,"1305":3,"1306":2,"1308":2,"1309":58,"1311":28,"1317":1,"1318":3,"1323":40,"1324":51,"1339":4,"1342":1,"1350":5,"1352":1,"1353":3,"1355":2,"1357":2,"1359":65,"1369":1,"1372":3,"1376":1,"1380":16,"1383":2,"1387":2,"1391":2,"1395":43,"1396":159,"1399":1,"1401":4,"1402":42,"1407":1,"1411":2,"1413":1,"1415":25,"1416":1,"1417":15,"1428":1,"1431":1,"1433":1,"1436":59,"1438":14,"1454":1,"1455":1,"1459":2,"1463":1,"1467":1,"1470":1,"1472":1,"1475":1,"1485":1,"1487":1,"1488":1,"1489":1,"1496":9,"1498":1,"1500":2,"1534":1,"1545":1,"1548":1,"1553":1,"1564":1,"1585":1,"1596":1,"1600":1,"1605":1,"1630":1,"1631":9,"1632":3,"1636":1,"1639":6,"1641":2,"1654":1,"1665":1,"1667":1,"1669":1,"1685":1,"1707":1,"1739":1,"1748":1,"1765":1,"1776":1,"1815":3,"1818":1,"1821":2,"1824":1,"1845":1,"1849":1,"1851":4,"1891":1,"1910":2,"1920":4,"1924":2,"1933":4,"1935":1,"1937":6,"1940":2,"1941":1,"1948":1,"1953":1,"1975":2,"1995":1,"1996":1,"1997":2,"1998":3,"2001":2,"2011":1,"2033":1,"2037":1,"2048":1,"2049":1,"2068":1,"2076":2,"2087":3,"2109":1,"2128":1,"2137":1,"2138":1,"2144":2,"2158":1,"2165":3,"2166":1,"2167":1,"2169":2,"2171":3,"2186":1,"2187":1,"2190":1,"2191":1,"2222":1,"2234":2}}],["scrypt",{"3":{"1905":1}}],["scroller",{"3":{"1526":1}}],["scrolledid",{"3":{"1324":3}}],["scrolled",{"3":{"1324":2,"2075":1}}],["scrollports",{"3":{"1438":1}}],["scrollposition",{"3":{"1324":1}}],["scrollwidth",{"3":{"1436":1}}],["scrollbar",{"3":{"1436":1}}],["scrollbehavior",{"3":{"1324":2}}],["scrollintoviewasync",{"3":{"1324":1}}],["scrollingelement",{"3":{"1324":1}}],["scrolling",{"3":{"1228":1,"1229":1,"1324":1,"1436":1,"1559":1}}],["scrollmanager",{"3":{"1324":2}}],["scrolltop",{"3":{"1324":1}}],["scrolltrackerid",{"3":{"1324":1}}],["scrollcontainerselector",{"3":{"1324":1}}],["scrolls",{"3":{"1247":1,"1324":5,"1436":1,"1438":1}}],["scroll",{"3":{"881":2,"883":1,"1286":1,"1324":33,"1383":1,"1395":12,"1396":2,"1438":3,"1526":1,"1643":1,"1669":3,"2075":2,"2078":1,"2081":2}}],["scratch",{"3":{"799":1,"1396":1,"1402":1,"1415":1,"1436":2,"1455":1,"1466":1,"1780":1}}],["scraper",{"3":{"1999":1}}],["scrapers",{"3":{"174":1}}],["scraped",{"3":{"1459":1}}],["scrape",{"3":{"1415":1,"1893":1}}],["scraping",{"3":{"725":1,"1317":1}}],["scramble",{"3":{"150":1}}],["screenreader",{"3":{"1524":1,"1526":2,"1531":1,"1533":1,"1589":2,"1591":2,"1596":1,"1598":1}}],["screencap",{"2":{"1479":1},"3":{"1479":3}}],["screenlayout",{"3":{"1416":1}}],["screening",{"3":{"1359":1}}],["screensize",{"3":{"1416":1}}],["screens",{"3":{"1059":1,"1300":1,"1324":4,"1350":3,"1380":2,"1381":1,"1383":1,"1385":1,"1395":3,"1396":2,"1409":1,"1415":3,"1417":3,"1436":1,"1438":1,"1559":1,"2072":1,"2081":1}}],["screenshots",{"3":{"1417":1,"1436":2,"1479":4,"1480":5,"1669":1}}],["screenshotformat",{"3":{"1417":1}}],["screenshotted",{"3":{"690":1,"1396":5,"1631":1}}],["screenshot",{"0":{"1479":1,"1480":1},"3":{"0":1,"691":1,"1202":1,"1203":1,"1391":1,"1396":2,"1417":7,"1436":1,"1479":1,"1480":1,"1496":1}}],["screened",{"3":{"676":1,"1359":1,"1415":1}}],["screen",{"0":{"1644":1,"2074":1},"1":{"1605":1,"1606":1,"1607":1,"1608":1,"1609":1,"1610":1,"1739":1,"1740":1,"1741":1,"1742":1,"1743":1,"1744":1},"3":{"24":1,"109":1,"380":1,"620":1,"622":1,"683":1,"691":1,"692":1,"906":1,"1059":2,"1259":2,"1270":2,"1286":3,"1300":8,"1311":1,"1318":1,"1323":1,"1324":21,"1339":1,"1347":1,"1350":2,"1359":8,"1375":1,"1380":3,"1388":1,"1391":1,"1395":26,"1396":23,"1397":1,"1402":2,"1409":1,"1414":3,"1415":6,"1416":10,"1417":27,"1436":13,"1438":1,"1479":1,"1523":1,"1524":3,"1526":1,"1530":1,"1531":2,"1532":1,"1533":1,"1557":1,"1558":1,"1577":1,"1589":1,"1591":1,"1595":1,"1596":2,"1603":1,"1604":1,"1605":2,"1606":1,"1610":1,"1626":1,"1640":1,"1642":1,"1668":1,"1669":2,"1674":1,"1685":1,"1712":1,"1739":2,"1740":1,"1744":1,"1760":1,"1773":1,"1942":2,"1943":1,"1950":1,"1962":1,"1966":1,"2046":1,"2072":4,"2073":1,"2074":2,"2075":1,"2082":4,"2118":1,"2123":1,"2193":1,"2202":1,"2204":1,"2205":1}}],["scrum",{"3":{"2221":1,"2222":1}}],["scrutiny",{"3":{"1436":1}}],["scrutor",{"0":{"1262":1},"3":{"0":2,"5":1,"117":2,"119":1,"121":2,"122":2,"572":1,"649":1,"781":1,"922":1,"1042":1,"1212":1,"1213":1,"1259":2,"1262":2,"1265":1,"1268":1,"1270":12,"1275":1,"1309":1,"1311":3,"1313":1,"1316":3,"1318":1,"1319":1,"1323":15,"1324":8,"1354":1,"1359":10,"1380":2,"1395":9,"1404":1,"1415":9,"1436":5,"1438":2,"1489":1,"1507":1,"1577":3,"1651":1,"1730":1,"1818":1,"1821":1,"1826":1,"1827":1,"1879":1,"1883":1,"1956":1,"2044":1,"2097":2,"2186":1,"2229":1,"2234":1}}],["scrubemailaddressesfromproductreviewernames",{"3":{"403":1}}],["scrubs",{"3":{"403":1,"1323":1,"1324":2,"1496":1,"1627":1,"1641":1,"2064":1}}],["scrubbed",{"3":{"0":1,"395":1,"1359":1}}],["scripting",{"3":{"1467":1}}],["scriptedhandler",{"3":{"1199":4,"1207":2}}],["scripted",{"3":{"861":2,"862":1,"1003":1,"1004":1,"1126":1,"1436":2,"1727":1,"2006":1}}],["scripts",{"0":{"1473":1},"1":{"1471":1,"1472":1,"1473":1,"1474":1,"1475":1,"1476":1,"1477":1,"1478":1,"1479":1,"1480":1,"1481":1,"1482":1,"1483":1,"1484":1},"3":{"0":1,"208":1,"387":1,"390":1,"484":1,"490":1,"491":1,"492":1,"493":1,"633":1,"1004":3,"1093":1,"1192":1,"1324":2,"1339":1,"1422":1,"1436":2,"1471":6,"1472":1,"1473":6,"1474":1,"1475":1,"1479":2,"1480":1,"1482":3,"1563":1,"1570":1,"1706":1,"1710":1,"1727":1,"1876":1,"1922":1,"2176":1}}],["script",{"1":{"1181":1,"1182":1,"1183":1,"1184":1,"1185":1,"1186":1,"1187":1,"1188":1,"1189":1},"2":{"483":1},"3":{"0":3,"157":1,"208":1,"212":2,"213":1,"214":5,"215":1,"216":1,"219":6,"273":1,"275":1,"286":1,"461":1,"483":1,"484":1,"543":1,"545":1,"633":2,"634":1,"659":1,"861":2,"869":1,"966":1,"996":2,"998":1,"1004":1,"1082":1,"1084":1,"1181":1,"1183":4,"1184":1,"1185":3,"1186":2,"1187":3,"1212":3,"1271":1,"1286":2,"1300":5,"1311":2,"1316":1,"1323":5,"1324":20,"1336":2,"1339":9,"1350":1,"1359":1,"1415":2,"1417":1,"1433":2,"1436":6,"1438":1,"1443":1,"1452":1,"1455":1,"1458":5,"1460":1,"1471":1,"1472":5,"1473":1,"1475":14,"1479":3,"1480":4,"1492":1,"1496":1,"1525":1,"1526":3,"1531":1,"1577":1,"1591":2,"1600":1,"1661":2,"1665":1,"1673":2,"1674":1,"1681":1,"1682":1,"1684":5,"1685":1,"1701":2,"1710":1,"1722":2,"1727":1,"1728":1,"1729":5,"1731":1,"1966":1,"1968":2,"1971":1,"1972":1,"2035":2,"2087":1,"2099":2,"2126":1,"2137":1,"2149":2,"2150":1,"2151":3,"2152":3,"2154":1,"2155":1,"2234":1}}],["scars",{"3":{"2074":1}}],["scarier",{"3":{"2037":1}}],["scar",{"3":{"1359":1,"1455":1}}],["scarcest",{"3":{"871":1}}],["scatter",{"3":{"1396":1,"1817":1,"1826":1,"1913":1,"1923":1}}],["scattering",{"3":{"1247":1,"1300":1,"1324":1,"1359":1,"1380":1,"1396":1,"1924":1,"1964":1,"2232":1}}],["scattered",{"3":{"118":1,"187":1,"360":1,"1201":1,"1212":1,"1237":1,"1247":2,"1260":1,"1270":1,"1286":3,"1301":3,"1311":1,"1314":1,"1323":2,"1324":2,"1348":1,"1350":6,"1352":1,"1395":2,"1396":1,"1402":2,"1415":1,"1417":2,"1436":2,"1557":1,"1813":1,"1819":2,"1822":1,"1827":1,"1882":1,"1930":1,"2138":1}}],["scatters",{"3":{"116":1}}],["scaffold",{"0":{"1650":1,"2091":1},"1":{"2089":1,"2090":1,"2091":1,"2092":1,"2093":1,"2094":1,"2095":1,"2096":1,"2097":1,"2098":1,"2099":1,"2100":1},"2":{"1689":1,"1699":1},"3":{"631":1,"633":1,"634":1,"635":1,"907":1,"923":1,"939":1,"942":1,"1034":1,"1133":1,"1286":4,"1436":3,"1488":3,"1602":2,"1646":2,"1649":1,"1656":1,"1661":2,"1674":1,"1681":1,"1683":1,"1684":4,"1685":4,"1686":6,"1687":1,"1689":3,"1692":1,"1693":1,"1697":1,"1699":2,"1701":3,"1702":1,"1705":2,"1719":3,"1724":1,"1727":2,"1729":1,"1730":1,"2005":1,"2089":1,"2091":1,"2100":2,"2212":1}}],["scaffolds",{"3":{"564":1,"698":1,"891":1,"1034":2,"1037":1,"1190":1,"1284":1,"1286":1,"1681":1,"1726":1,"1731":1,"2099":1,"2213":1}}],["scaffolded",{"3":{"41":1,"551":1,"749":1,"891":1,"921":1,"1270":2,"1286":4,"1396":1,"1436":5,"1497":1,"1646":1,"1649":1,"1650":1,"1651":1,"1652":1,"1653":1,"1654":1,"1655":1,"1656":1,"1664":1,"1675":1,"1684":1,"1685":4,"1686":4,"1687":1,"1690":1,"1697":1,"1699":1,"1701":4,"1720":1,"1727":1,"1729":1,"1730":1,"2005":1,"2091":1,"2103":1}}],["scaffolding",{"0":{"1661":1},"1":{"631":1,"632":1,"633":1,"634":1,"635":1,"636":1,"1726":1,"1727":1,"1728":1,"1729":1,"1730":1,"1731":1},"3":{"0":1,"534":1,"631":1,"633":1,"1212":1,"1286":1,"1428":1,"1429":1,"1436":3,"1438":2,"1442":1,"1488":1,"1602":1,"1699":1,"1726":1,"1727":2,"2063":1,"2100":1,"2234":1}}],["scalable",{"3":{"1237":1,"2215":1,"2219":1,"2220":1,"2222":1}}],["scalability",{"0":{"1549":1},"3":{"1216":1,"1223":1,"1228":1,"1229":8,"1231":1,"1233":1,"1237":3,"1241":1,"1242":1,"1243":1,"1247":16,"1252":1,"1259":8,"1260":1,"1263":1,"1269":1,"1270":18,"1271":1,"1274":1,"1278":1,"1286":33,"1287":1,"1300":10,"1301":10,"1306":1,"1307":1,"1309":12,"1310":4,"1311":21,"1313":1,"1316":1,"1323":9,"1324":9,"1337":1,"1339":10,"1343":1,"1347":1,"1350":13,"1355":1,"1358":1,"1359":61,"1367":1,"1369":5,"1375":1,"1380":16,"1388":1,"1395":19,"1396":43,"1402":16,"1406":1,"1413":1,"1415":11,"1417":10,"1422":1,"1427":1,"1436":13,"1438":1,"1450":1,"1455":1,"1456":1,"1458":2,"1461":1,"1496":1,"1499":1,"1526":1,"1530":1,"1531":1,"1533":1,"1535":1,"1577":1,"1581":1,"1582":1,"1583":1,"1591":1,"1595":1,"1596":1,"1597":1,"1598":1,"1796":1,"1800":1}}],["scalars",{"3":{"1234":1,"1237":1,"1286":2,"1350":9,"1359":1,"1369":6,"1396":3,"1415":1,"1436":1,"1686":2,"2188":1,"2194":1}}],["scalaronlyspec",{"3":{"1199":2,"1207":1,"1436":8}}],["scalaronlyqueryspec",{"3":{"1199":2,"1207":1,"1436":6}}],["scalar",{"3":{"0":1,"47":1,"49":1,"166":1,"799":3,"801":1,"802":1,"1050":2,"1053":1,"1132":1,"1133":1,"1236":1,"1237":1,"1241":1,"1247":3,"1281":2,"1286":13,"1300":1,"1311":6,"1312":3,"1323":2,"1342":5,"1350":22,"1353":1,"1359":22,"1363":1,"1369":10,"1395":1,"1396":27,"1401":1,"1402":2,"1410":1,"1415":11,"1436":9,"1473":1,"1489":1,"1496":1,"1534":1,"1577":1,"1656":1,"1663":1,"1666":3,"1727":1,"1749":1,"1810":1,"1849":1,"1853":1,"1858":2,"1859":1,"1862":1,"1866":1,"1929":1,"2036":1}}],["scaling",{"0":{"1970":1},"3":{"48":1,"58":2,"387":1,"389":1,"706":1,"740":1,"742":1,"759":1,"768":1,"1300":2,"1323":1,"1480":1,"1568":1,"1724":1,"1948":1,"1971":1}}],["scales",{"3":{"133":1,"282":1,"760":1,"765":1,"781":1,"799":1,"1125":1,"1270":1,"1300":1,"1301":1,"1309":1,"1339":1,"1359":3,"1395":1,"1396":1,"1526":1,"1549":1,"1671":1,"2102":1,"2204":1}}],["scaled",{"1":{"662":1,"663":1,"664":1,"665":1,"666":1,"667":1,"668":1,"669":1,"670":1},"3":{"0":1,"24":1,"58":1,"234":1,"242":1,"245":2,"283":1,"662":1,"664":2,"667":2,"732":1,"766":1,"768":1,"769":1,"793":1,"1212":1,"1233":1,"1237":1,"1301":2,"1309":1,"1317":1,"1336":1,"1339":2,"1442":1,"1447":1,"1467":1,"1473":1,"1480":1,"1524":1,"1531":1,"1568":1,"1591":1,"1600":1,"1848":1,"1855":1,"1916":1,"1923":1,"1924":1,"1971":1,"1972":1,"2002":1,"2105":1,"2190":1,"2234":2}}],["scale",{"0":{"1255":1},"2":{"766":1},"3":{"0":5,"15":1,"20":1,"48":1,"58":1,"60":1,"62":2,"68":1,"100":1,"141":1,"176":1,"225":1,"234":1,"243":1,"283":1,"285":1,"291":1,"390":2,"435":1,"458":1,"480":1,"483":1,"486":1,"487":1,"488":1,"489":1,"490":2,"491":1,"492":1,"493":1,"494":2,"495":1,"517":1,"538":1,"700":1,"765":2,"766":2,"768":1,"869":1,"871":1,"882":1,"995":1,"1011":1,"1101":1,"1152":1,"1154":1,"1156":1,"1213":1,"1229":1,"1237":1,"1255":1,"1256":1,"1259":8,"1270":1,"1275":1,"1286":1,"1300":1,"1309":2,"1312":1,"1323":3,"1324":6,"1336":1,"1339":1,"1350":2,"1351":1,"1359":4,"1380":1,"1396":10,"1398":1,"1402":1,"1415":1,"1457":1,"1462":1,"1465":1,"1467":9,"1474":1,"1525":1,"1526":4,"1531":1,"1532":1,"1534":1,"1536":1,"1537":3,"1549":2,"1554":3,"1565":1,"1568":3,"1572":1,"1575":1,"1577":6,"1585":1,"1591":2,"1599":1,"1638":2,"1665":1,"1676":1,"1678":2,"1679":2,"1680":1,"1795":1,"1797":1,"1841":1,"1884":1,"1900":1,"1923":1,"1935":1,"1940":1,"1942":1,"1972":1,"2002":1,"2003":1,"2011":1,"2015":1,"2034":1,"2043":1,"2068":1,"2077":1,"2087":1,"2159":1,"2230":1}}],["scanfile",{"3":{"1436":2}}],["scanfailingassembly",{"3":{"1199":2,"1207":1,"1438":1}}],["scanpage",{"3":{"1417":1}}],["scanoutcome",{"3":{"1199":2,"1203":1,"1207":1,"1396":4}}],["scanoutcomekind",{"3":{"1199":3,"1203":1,"1207":1,"1396":5}}],["scanonmainthreadasync",{"2":{"682":1},"3":{"682":1,"1417":1}}],["scangridasync",{"2":{"616":1,"620":1,"621":1,"2058":1},"3":{"616":1,"618":2,"620":1,"621":1,"1433":1,"1436":4,"1487":1,"1488":2,"1591":1,"2058":1}}],["scananddeleteasync",{"2":{"251":1},"3":{"251":1,"1301":2}}],["scanasync",{"2":{"621":1},"3":{"0":1,"618":1,"621":1,"682":1,"1396":1,"1417":4,"1433":1,"1436":4,"1487":1,"1488":2,"1591":1,"2058":1}}],["scanmodules",{"3":{"1316":1,"1323":1,"1662":1}}],["scanmodule",{"3":{"121":1,"1316":1,"1323":2,"1436":1,"1662":1}}],["scanmoduleapplicationservices",{"2":{"117":1,"122":1,"127":1,"922":1,"1262":1,"1316":1,"1354":1,"1404":1,"1651":1,"1662":1,"1830":1,"1883":1,"1886":1,"1956":1,"2097":1,"2100":1,"2165":1},"3":{"117":1,"122":1,"127":1,"922":1,"1259":1,"1262":2,"1270":5,"1271":2,"1316":2,"1323":15,"1350":1,"1354":1,"1359":15,"1396":8,"1402":2,"1404":1,"1415":12,"1651":1,"1662":1,"1830":1,"1883":2,"1886":1,"1956":1,"2097":1,"2100":1,"2165":1}}],["scannableassemblylocations",{"3":{"1436":5}}],["scannable",{"3":{"1301":1,"1395":1,"1396":2,"1436":2}}],["scanners",{"3":{"1311":1}}],["scanner",{"2":{"685":1},"3":{"684":1,"685":2,"690":2,"691":1,"694":1,"734":1,"872":1,"1271":2,"1300":1,"1301":3,"1311":1,"1323":9,"1350":1,"1396":20,"1415":4,"1416":4,"1417":7,"1436":5,"1627":1}}],["scanneravailable",{"2":{"684":1,"685":1},"3":{"684":1,"685":1,"690":1,"1396":1}}],["scannedpages",{"3":{"1436":3}}],["scannedpasswordhasherset",{"3":{"1436":1}}],["scanneduifiles",{"3":{"1436":1}}],["scannedcontrollers",{"3":{"1436":2}}],["scannedservices",{"3":{"1436":2}}],["scannedsourcedirectories",{"3":{"1436":5}}],["scannedhandlers",{"3":{"1436":3}}],["scannedendpointset",{"3":{"1436":4}}],["scannedassemblies",{"3":{"1286":3}}],["scanned",{"3":{"0":2,"27":1,"160":1,"200":1,"545":1,"564":1,"566":1,"618":1,"622":1,"628":1,"691":1,"692":1,"781":1,"799":1,"870":1,"873":1,"910":1,"1118":1,"1135":1,"1163":1,"1204":1,"1271":3,"1286":3,"1300":2,"1301":4,"1311":1,"1323":1,"1324":1,"1349":1,"1388":1,"1396":24,"1414":1,"1415":1,"1417":2,"1434":2,"1436":50,"1438":1,"1443":1,"1455":1,"1459":2,"1467":1,"1475":1,"1489":1,"1496":3,"1526":2,"1591":2,"1626":1,"1627":2,"1643":2,"1661":1,"1701":1,"1720":1,"1730":1,"1815":1,"1883":1,"1956":1,"2099":1,"2123":1}}],["scanning",{"0":{"1883":1},"1":{"679":1,"680":1,"681":1,"682":1,"683":1,"684":1,"685":1,"686":1},"3":{"0":5,"5":1,"117":1,"413":1,"565":2,"618":1,"619":1,"679":1,"681":1,"682":2,"683":1,"689":2,"690":1,"691":2,"801":1,"966":1,"1055":1,"1114":1,"1116":2,"1118":3,"1119":1,"1161":1,"1175":1,"1192":1,"1212":2,"1213":2,"1259":2,"1262":1,"1270":2,"1271":1,"1286":4,"1300":3,"1301":2,"1309":1,"1311":7,"1312":1,"1319":1,"1323":8,"1324":1,"1339":2,"1350":3,"1359":20,"1369":6,"1380":2,"1395":3,"1396":32,"1402":5,"1404":1,"1415":13,"1416":2,"1417":12,"1427":1,"1433":1,"1436":19,"1437":1,"1438":1,"1455":1,"1467":3,"1469":1,"1470":1,"1488":1,"1496":1,"1548":1,"1627":1,"1631":2,"1651":1,"1669":1,"1856":1,"1956":1,"1959":1,"2058":1,"2095":1,"2097":1,"2234":1}}],["scansource",{"3":{"1436":2}}],["scans",{"3":{"0":5,"54":1,"122":1,"253":1,"265":1,"268":1,"341":1,"413":2,"545":4,"583":1,"585":1,"616":3,"618":10,"620":1,"621":1,"682":1,"689":2,"690":1,"691":1,"733":1,"870":3,"873":1,"953":1,"1050":1,"1108":1,"1133":1,"1170":1,"1229":1,"1237":2,"1250":1,"1256":1,"1259":2,"1270":3,"1275":1,"1279":1,"1282":1,"1286":7,"1300":4,"1301":2,"1311":2,"1312":1,"1316":2,"1319":1,"1323":6,"1324":5,"1339":1,"1350":3,"1359":5,"1395":3,"1396":18,"1415":2,"1416":1,"1417":8,"1421":1,"1431":1,"1436":67,"1438":2,"1467":2,"1485":1,"1487":1,"1490":1,"1492":1,"1526":2,"1531":1,"1532":1,"1577":1,"1591":2,"1596":2,"1600":1,"1605":1,"1631":2,"1654":1,"1669":1,"1739":1,"1741":1,"1810":1,"1824":1,"1875":1,"1881":1,"1883":1,"1898":2,"1929":1,"1956":1,"1990":1,"2044":1,"2058":1,"2097":1,"2099":1,"2105":1,"2222":1}}],["scan",{"0":{"1572":1},"3":{"0":17,"24":2,"109":2,"117":1,"121":1,"245":1,"248":2,"251":1,"257":1,"483":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":2,"492":2,"493":2,"494":3,"495":3,"537":1,"539":1,"546":2,"549":1,"552":1,"572":1,"583":4,"585":1,"587":1,"616":4,"618":8,"619":1,"620":3,"622":1,"626":3,"628":1,"629":2,"649":1,"682":5,"683":1,"684":6,"685":2,"686":1,"688":2,"690":6,"691":2,"692":1,"726":1,"733":3,"734":1,"735":1,"799":1,"810":1,"849":1,"867":3,"870":1,"871":1,"872":1,"874":1,"876":1,"881":2,"906":1,"922":4,"924":1,"926":3,"946":1,"1133":5,"1135":2,"1161":2,"1162":1,"1163":3,"1196":1,"1212":2,"1228":1,"1229":2,"1236":1,"1237":3,"1242":1,"1259":6,"1262":3,"1263":2,"1265":2,"1269":2,"1270":5,"1271":7,"1286":23,"1300":21,"1301":13,"1308":1,"1309":2,"1311":7,"1315":4,"1316":1,"1318":1,"1319":1,"1323":28,"1324":14,"1339":1,"1350":4,"1354":4,"1359":122,"1369":6,"1377":1,"1380":1,"1395":30,"1396":119,"1402":3,"1414":1,"1415":34,"1416":2,"1417":33,"1421":1,"1431":2,"1433":3,"1434":1,"1436":195,"1438":10,"1442":1,"1445":2,"1450":1,"1459":1,"1487":5,"1488":3,"1489":2,"1491":1,"1492":2,"1496":7,"1526":3,"1531":1,"1577":2,"1589":1,"1591":5,"1596":2,"1627":2,"1629":1,"1631":2,"1643":1,"1645":2,"1651":2,"1653":1,"1666":1,"1673":1,"1677":1,"1749":1,"1815":1,"1816":1,"1824":2,"1830":2,"1849":1,"1862":1,"1881":2,"1883":2,"1898":3,"1916":2,"1920":1,"1923":1,"1956":3,"1959":1,"1990":2,"1992":1,"2042":1,"2044":2,"2058":3,"2081":1,"2097":3,"2100":1,"2105":2,"2165":2,"2234":1}}],["sil",{"3":{"2077":1,"2152":1}}],["silver",{"3":{"1350":1,"1364":1,"1369":1,"1631":1}}],["silo",{"3":{"1149":1,"1152":1,"1154":1,"1155":1,"1157":2,"2234":1}}],["silenced",{"3":{"982":1,"1309":1,"1417":1,"1436":2}}],["silencestherule",{"3":{"1436":5}}],["silencesonlythattype",{"3":{"1436":7}}],["silences",{"3":{"27":1,"372":1,"1359":1,"1436":9}}],["silence",{"3":{"0":2,"122":1,"200":1,"255":1,"370":1,"399":1,"401":1,"591":1,"821":1,"863":1,"1013":1,"1311":1,"1339":1,"1395":1,"1417":1,"1436":5,"1467":1,"1492":1,"1670":1,"1923":1,"2150":1,"2161":1,"2170":1}}],["silently",{"1":{"1887":1,"1888":1,"1889":1,"1890":1,"1891":1,"1892":1},"3":{"0":15,"6":1,"20":1,"67":1,"68":1,"77":1,"98":1,"109":2,"110":1,"119":1,"121":1,"122":1,"132":1,"135":3,"142":1,"160":1,"170":1,"175":2,"178":1,"180":1,"188":1,"214":1,"216":1,"220":1,"248":1,"302":1,"310":1,"318":2,"335":2,"340":1,"344":1,"350":1,"359":1,"360":1,"361":1,"363":2,"364":1,"370":1,"371":1,"373":1,"387":2,"391":1,"397":2,"399":1,"403":1,"408":1,"413":1,"415":1,"427":1,"428":1,"447":1,"459":1,"461":2,"474":1,"478":1,"484":1,"499":1,"501":2,"509":1,"518":1,"530":1,"534":1,"549":1,"558":1,"573":1,"574":1,"576":2,"583":1,"585":1,"592":1,"608":1,"610":1,"611":1,"625":1,"628":1,"632":1,"634":1,"635":1,"658":1,"667":1,"676":1,"698":2,"699":1,"700":1,"706":1,"709":1,"717":1,"735":1,"741":1,"749":1,"750":1,"758":1,"765":1,"768":1,"775":1,"784":1,"789":1,"819":1,"821":1,"827":1,"837":1,"838":1,"840":1,"847":1,"856":1,"863":1,"889":1,"890":1,"899":2,"907":1,"930":1,"931":1,"953":1,"954":1,"964":1,"972":1,"988":1,"990":1,"991":1,"998":1,"1005":1,"1017":1,"1018":1,"1028":1,"1042":1,"1050":2,"1051":1,"1059":1,"1060":1,"1067":1,"1085":1,"1100":1,"1102":1,"1117":1,"1126":1,"1132":1,"1154":1,"1215":1,"1222":1,"1228":1,"1229":3,"1237":4,"1241":4,"1247":10,"1252":1,"1257":2,"1259":6,"1262":2,"1263":1,"1270":6,"1271":2,"1273":2,"1276":1,"1278":2,"1279":1,"1281":2,"1284":1,"1286":46,"1291":1,"1300":34,"1301":9,"1306":1,"1309":5,"1310":1,"1311":24,"1312":4,"1315":2,"1322":1,"1323":22,"1324":34,"1326":1,"1332":1,"1333":2,"1334":1,"1335":1,"1336":1,"1339":20,"1343":1,"1344":2,"1347":1,"1349":1,"1350":15,"1352":1,"1355":1,"1359":42,"1366":1,"1368":1,"1369":5,"1380":7,"1383":1,"1385":1,"1387":1,"1390":1,"1395":32,"1396":26,"1402":11,"1406":1,"1409":1,"1414":1,"1415":20,"1416":7,"1417":19,"1421":1,"1423":1,"1426":1,"1427":9,"1428":1,"1429":1,"1430":1,"1431":2,"1432":1,"1433":2,"1436":79,"1438":15,"1442":2,"1443":2,"1444":2,"1445":2,"1447":2,"1449":1,"1453":3,"1454":2,"1455":3,"1460":1,"1467":7,"1469":1,"1473":1,"1475":1,"1486":2,"1488":4,"1489":3,"1490":1,"1491":1,"1492":2,"1526":1,"1546":1,"1547":1,"1571":1,"1585":1,"1607":1,"1639":3,"1640":1,"1641":2,"1645":1,"1651":1,"1653":2,"1654":2,"1675":1,"1677":2,"1684":1,"1685":3,"1686":1,"1700":2,"1701":1,"1708":1,"1728":1,"1730":1,"1741":1,"1748":1,"1749":1,"1764":1,"1765":2,"1767":2,"1785":1,"1802":1,"1821":1,"1823":1,"1825":1,"1826":1,"1830":1,"1840":2,"1843":1,"1844":1,"1849":1,"1851":2,"1869":1,"1870":1,"1877":1,"1879":1,"1881":2,"1886":1,"1887":2,"1890":1,"1892":1,"1902":1,"1920":1,"1923":2,"1940":1,"1947":1,"1948":1,"1951":1,"1952":2,"1959":1,"1964":1,"1977":1,"1984":1,"1988":1,"1995":1,"1997":1,"2002":2,"2003":1,"2011":1,"2014":1,"2032":1,"2044":1,"2045":1,"2046":2,"2048":1,"2050":1,"2057":1,"2059":1,"2062":1,"2069":1,"2077":1,"2099":2,"2100":2,"2107":1,"2110":1,"2123":1,"2124":1,"2127":1,"2131":1,"2140":1,"2144":1,"2146":1,"2147":1,"2151":1,"2154":1,"2158":2,"2161":1,"2162":2,"2166":1,"2168":1,"2176":1,"2177":1,"2184":1,"2185":1,"2190":1,"2199":2,"2202":1,"2209":1,"2222":1,"2234":2}}],["silent",{"3":{"0":5,"70":1,"78":1,"122":1,"136":1,"155":1,"193":1,"201":1,"227":1,"230":1,"235":1,"340":1,"342":2,"361":1,"383":1,"401":1,"465":1,"500":1,"518":1,"519":1,"520":1,"538":1,"573":1,"583":1,"585":1,"609":1,"617":1,"642":1,"649":1,"666":1,"692":1,"726":1,"734":1,"740":1,"748":1,"757":1,"765":1,"782":1,"784":1,"790":1,"818":1,"829":1,"831":1,"838":1,"922":1,"924":1,"931":1,"971":1,"990":1,"997":1,"1036":1,"1094":1,"1102":1,"1108":1,"1191":1,"1224":1,"1229":2,"1237":2,"1247":3,"1249":1,"1259":3,"1269":1,"1270":5,"1273":1,"1276":1,"1286":13,"1300":3,"1309":1,"1310":1,"1311":10,"1316":1,"1320":1,"1323":8,"1324":3,"1327":1,"1338":1,"1339":11,"1350":2,"1353":1,"1359":23,"1379":1,"1389":1,"1395":4,"1396":9,"1402":4,"1415":5,"1417":10,"1420":1,"1427":2,"1433":2,"1436":45,"1438":1,"1444":2,"1455":1,"1460":1,"1466":1,"1467":1,"1472":1,"1476":1,"1486":1,"1488":4,"1489":1,"1492":1,"1496":1,"1553":1,"1561":1,"1585":2,"1599":2,"1639":2,"1654":1,"1667":1,"1671":1,"1684":1,"1699":1,"1812":1,"1843":1,"1845":1,"1856":1,"1862":1,"1868":1,"1876":1,"1889":1,"1945":1,"1949":1,"1952":1,"1958":2,"1985":1,"1986":1,"1995":1,"2001":1,"2068":1,"2069":1,"2109":1,"2114":1,"2144":1,"2161":1,"2171":1,"2189":1,"2194":1}}],["sigsegv",{"3":{"1417":1}}],["sigstore",{"3":{"374":1}}],["sighted",{"3":{"1396":1,"1417":6}}],["sight",{"3":{"1359":1,"1380":1,"1396":1,"1417":1}}],["sighting",{"3":{"1237":1,"1350":1}}],["sig",{"3":{"1300":1}}],["sigma",{"3":{"1012":2}}],["signer",{"3":{"1893":1,"1899":1}}],["signedout",{"3":{"905":1,"1290":1,"1982":1}}],["signed",{"3":{"0":5,"68":1,"110":1,"186":1,"188":1,"265":3,"285":1,"351":1,"372":1,"374":1,"384":2,"434":1,"499":2,"501":1,"616":2,"618":1,"689":1,"691":1,"759":1,"790":1,"792":1,"827":1,"853":2,"855":1,"904":4,"905":5,"906":3,"907":3,"1067":1,"1184":1,"1212":2,"1228":1,"1229":1,"1276":1,"1286":5,"1289":2,"1290":1,"1291":1,"1300":26,"1307":1,"1311":4,"1323":1,"1324":30,"1339":2,"1373":1,"1395":5,"1396":5,"1407":1,"1414":2,"1415":12,"1416":2,"1417":4,"1429":1,"1434":1,"1436":13,"1438":1,"1454":1,"1479":1,"1576":1,"1577":2,"1586":1,"1591":1,"1596":1,"1627":1,"1668":1,"1672":2,"1703":1,"1750":1,"1761":2,"1773":1,"1897":1,"1922":1,"1945":1,"1966":1,"1968":1,"1969":1,"1973":2,"1977":1,"1980":1,"1982":7,"1983":1,"1984":4,"1985":4,"2001":1,"2034":1,"2085":1,"2113":1,"2126":1,"2168":1,"2234":1}}],["signoutlocallyasync",{"3":{"1324":4}}],["signouteverywhereasync",{"3":{"1300":3,"1982":1}}],["signoutasync",{"3":{"1300":3,"1324":1,"1436":5,"1671":1,"1982":1}}],["signup",{"3":{"283":1,"2000":1,"2002":1}}],["signups",{"3":{"282":1}}],["significance",{"3":{"1631":3}}],["significant",{"3":{"46":1,"1537":1,"1552":1,"1571":2}}],["signinwithbrokerasync",{"3":{"1417":1}}],["signinasync",{"3":{"1417":5}}],["signinscheme",{"3":{"1311":1}}],["signingkey",{"3":{"1339":2,"1442":2}}],["signingcredentials",{"3":{"1300":2,"1436":1}}],["signingalgorithm=rs256",{"3":{"1436":1}}],["signingalgorithm",{"2":{"31":1,"1288":1,"1895":1},"3":{"31":2,"1212":1,"1288":1,"1300":4,"1467":2,"1641":1,"1895":1}}],["signing",{"0":{"1288":1},"2":{"31":1,"418":1,"1481":1},"3":{"0":4,"30":1,"31":3,"32":1,"349":1,"353":1,"418":2,"420":1,"423":2,"424":1,"428":1,"499":1,"501":1,"514":1,"598":1,"599":2,"674":1,"788":1,"789":2,"790":2,"791":1,"792":1,"793":2,"794":1,"904":1,"905":1,"906":1,"963":1,"1212":1,"1290":2,"1300":15,"1311":4,"1323":1,"1324":2,"1335":1,"1339":1,"1415":2,"1416":1,"1429":1,"1433":1,"1436":3,"1442":1,"1455":1,"1456":1,"1466":1,"1467":2,"1472":2,"1481":5,"1488":1,"1490":1,"1576":1,"1589":2,"1591":1,"1595":1,"1596":2,"1597":1,"1790":1,"1893":2,"1894":1,"1895":1,"1899":1,"1968":1,"1982":1,"1984":1,"2022":2,"2168":4,"2169":1,"2232":1,"2234":1}}],["signs",{"3":{"0":2,"30":1,"31":1,"350":3,"353":1,"599":2,"905":3,"907":2,"909":1,"1212":1,"1288":2,"1290":1,"1300":9,"1311":3,"1324":8,"1326":1,"1328":1,"1348":1,"1350":1,"1359":1,"1380":1,"1396":2,"1406":2,"1415":2,"1436":2,"1441":1,"1449":1,"1455":1,"1466":1,"1467":1,"1481":1,"1667":1,"1893":1,"1894":1,"1895":2,"1975":2,"1978":1,"2056":1}}],["sign",{"0":{"1293":1},"3":{"0":8,"186":1,"243":2,"258":2,"261":1,"265":1,"281":1,"349":1,"350":4,"352":1,"353":2,"433":2,"434":3,"498":1,"512":1,"513":1,"618":1,"648":1,"650":1,"664":1,"665":1,"666":1,"674":1,"743":1,"853":1,"903":1,"905":8,"906":3,"907":1,"909":1,"1057":1,"1058":2,"1059":5,"1060":1,"1061":1,"1063":1,"1184":1,"1185":1,"1188":1,"1237":1,"1283":1,"1286":2,"1288":1,"1290":2,"1293":4,"1295":1,"1300":39,"1311":5,"1323":7,"1324":51,"1335":1,"1336":1,"1339":4,"1359":1,"1406":1,"1407":1,"1408":1,"1409":1,"1415":8,"1417":16,"1436":33,"1438":3,"1442":1,"1455":1,"1456":1,"1466":1,"1488":3,"1511":1,"1577":1,"1627":1,"1630":1,"1631":1,"1637":1,"1641":3,"1666":1,"1668":1,"1670":1,"1671":1,"1742":1,"1765":2,"1897":1,"1936":2,"1962":1,"1965":1,"1968":1,"1970":1,"1972":2,"1973":4,"1975":1,"1976":1,"1977":3,"1978":1,"1979":2,"1980":1,"1982":4,"1983":2,"1984":2,"1985":1,"2001":1,"2013":1,"2079":1,"2146":1,"2196":3,"2197":1,"2198":1,"2200":1,"2204":1,"2205":3,"2222":1,"2234":1}}],["signalling",{"3":{"1283":1,"1286":3}}],["signalled",{"3":{"743":1,"782":1,"1259":1,"1275":1,"1311":1,"1359":1,"1415":2,"1436":1,"1446":1,"1467":1,"1651":1,"1686":1,"2187":1,"2234":1}}],["signalingentry",{"3":{"1199":2,"1207":1}}],["signals",{"3":{"0":2,"18":1,"19":1,"396":1,"406":1,"608":1,"609":1,"767":1,"827":1,"1040":2,"1042":1,"1045":1,"1247":1,"1254":2,"1257":1,"1259":7,"1270":1,"1274":2,"1286":12,"1311":1,"1324":1,"1339":2,"1350":1,"1359":2,"1396":1,"1402":1,"1415":1,"1417":2,"1427":1,"1433":1,"1436":5,"1455":1,"1467":1,"1474":1,"1488":1,"1526":1,"1568":1,"1577":1,"2047":1,"2120":1,"2156":2,"2158":1,"2160":2,"2161":1,"2167":2,"2194":1}}],["signal",{"0":{"2160":1},"3":{"0":6,"17":1,"18":1,"19":1,"20":1,"22":1,"72":1,"77":1,"79":1,"80":1,"108":1,"125":1,"147":1,"159":1,"216":1,"237":1,"255":1,"343":1,"350":1,"376":1,"395":1,"399":1,"400":1,"402":1,"403":1,"406":1,"407":2,"518":1,"527":1,"530":1,"549":1,"585":1,"607":1,"612":2,"627":2,"628":1,"702":1,"726":1,"727":1,"735":1,"740":1,"741":1,"742":1,"758":1,"789":1,"830":1,"840":1,"844":1,"845":2,"905":2,"906":1,"914":1,"916":1,"948":1,"990":1,"1018":1,"1044":3,"1045":1,"1068":2,"1069":1,"1074":1,"1100":1,"1126":1,"1188":1,"1247":2,"1254":2,"1256":1,"1257":1,"1259":28,"1270":5,"1274":1,"1275":4,"1286":20,"1290":1,"1300":11,"1301":1,"1309":1,"1311":4,"1317":1,"1322":1,"1323":3,"1324":8,"1339":6,"1347":1,"1350":1,"1355":1,"1359":13,"1369":2,"1380":2,"1390":1,"1395":8,"1396":11,"1402":6,"1415":1,"1417":10,"1426":1,"1433":1,"1436":13,"1438":1,"1441":2,"1442":1,"1443":4,"1447":1,"1450":1,"1455":2,"1456":4,"1459":1,"1465":1,"1467":11,"1476":2,"1486":2,"1488":2,"1491":1,"1492":2,"1534":1,"1536":1,"1541":1,"1630":1,"1641":1,"1665":1,"1666":1,"1675":1,"1677":2,"1724":1,"1735":1,"1769":2,"1841":1,"1888":1,"1889":1,"1891":1,"1919":1,"1923":1,"1982":2,"1985":1,"1988":1,"2037":1,"2056":1,"2057":1,"2138":1,"2154":1,"2157":3,"2159":1,"2160":1,"2162":1,"2194":1,"2234":1}}],["signalrconfigured",{"2":{"1935":1},"3":{"1935":1}}],["signalrextensions",{"3":{"225":1,"749":1,"1150":1,"1199":1,"1203":1,"1207":2,"1208":1,"1309":1,"1311":7}}],["signalrlivechannelpublishertests",{"3":{"1199":1,"1207":2}}],["signalrlivechannelpublisher",{"2":{"225":1,"380":1,"1303":1,"1307":1,"1400":1,"1944":1,"1946":1},"3":{"225":2,"380":1,"1150":1,"1199":3,"1203":1,"1207":2,"1303":1,"1307":4,"1309":13,"1323":1,"1400":1,"1496":1,"1944":1,"1946":2}}],["signalrpushnotificationsendertests",{"3":{"1199":1,"1207":2}}],["signalrpushnotificationsenderadditionaltests",{"3":{"1199":1,"1207":2}}],["signalrpushnotificationsender",{"2":{"225":1,"1303":1,"1307":1,"1932":1,"1935":1},"3":{"225":2,"1199":4,"1203":1,"1207":2,"1300":3,"1303":1,"1307":2,"1309":16,"1323":1,"1932":1,"1935":2}}],["signalr",{"0":{"1307":1},"1":{"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"1942":1,"1943":1,"1944":1,"1945":1,"1946":1,"1947":1,"1948":1,"1949":1,"1950":1},"3":{"0":8,"25":1,"27":1,"31":1,"55":1,"61":1,"92":2,"96":1,"98":1,"100":1,"101":1,"135":1,"216":1,"222":1,"225":7,"226":1,"227":1,"228":1,"229":2,"230":2,"379":1,"380":2,"397":1,"433":1,"434":2,"507":1,"508":1,"513":1,"555":1,"556":1,"608":1,"749":1,"759":1,"774":3,"827":1,"832":1,"837":1,"838":2,"1124":1,"1149":1,"1150":1,"1192":1,"1202":2,"1203":2,"1212":1,"1213":2,"1247":1,"1285":1,"1286":4,"1296":1,"1300":8,"1302":4,"1303":2,"1304":1,"1307":1,"1308":1,"1309":43,"1311":4,"1312":4,"1320":3,"1323":8,"1324":20,"1331":1,"1338":1,"1339":5,"1397":1,"1400":1,"1402":10,"1417":4,"1433":2,"1436":10,"1437":1,"1438":8,"1441":3,"1443":1,"1447":4,"1467":10,"1474":1,"1488":1,"1489":1,"1496":1,"1512":2,"1599":1,"1656":1,"1658":1,"1666":1,"1667":1,"1669":1,"1705":1,"1779":1,"1932":1,"1933":6,"1935":5,"1936":2,"1940":2,"1941":2,"1942":3,"1944":1,"1945":1,"1946":1,"1950":3,"2025":1,"2026":1,"2112":1,"2152":2,"2154":1,"2158":1,"2160":1,"2210":1,"2234":1}}],["signatureverification",{"3":{"1770":1}}],["signatureverificationfailed",{"2":{"790":1},"3":{"790":1}}],["signaturemissing",{"3":{"790":1}}],["signatures",{"3":{"0":2,"31":1,"135":2,"265":1,"471":1,"676":1,"798":1,"799":1,"1115":1,"1300":3,"1301":1,"1324":2,"1349":1,"1395":1,"1396":2,"1416":1,"1431":1,"1436":3,"1455":1,"1489":1,"1496":1,"1585":1,"1671":1,"1968":1,"2085":1,"2234":1}}],["signature",{"3":{"0":4,"29":1,"31":1,"34":1,"108":1,"110":1,"135":5,"207":1,"208":1,"210":1,"372":1,"458":2,"498":1,"499":1,"509":1,"757":1,"790":7,"792":1,"793":2,"799":2,"803":1,"879":1,"903":1,"905":1,"907":1,"908":1,"1034":1,"1049":1,"1059":1,"1116":1,"1133":1,"1134":1,"1184":1,"1212":1,"1218":1,"1229":1,"1241":1,"1246":1,"1247":4,"1259":1,"1270":6,"1286":20,"1289":1,"1290":1,"1300":22,"1301":2,"1309":2,"1310":4,"1311":3,"1323":4,"1324":14,"1339":2,"1359":21,"1389":1,"1395":6,"1396":11,"1415":4,"1417":5,"1431":1,"1436":14,"1438":2,"1441":1,"1489":1,"1534":1,"1585":1,"1685":1,"1702":2,"1734":1,"1749":1,"1765":1,"1770":2,"1803":2,"1804":1,"1807":2,"1810":2,"1897":1,"1953":1,"1954":1,"1968":3,"1972":1,"1980":1,"1982":1,"1985":1,"1990":1,"1996":1,"2068":1,"2128":2,"2168":5,"2170":1,"2171":2,"2199":1,"2234":2}}],["sizebytes",{"3":{"1350":5,"1369":1,"1395":2}}],["size=10",{"3":{"1270":1}}],["sizes",{"3":{"237":1,"312":1,"359":1,"1018":1,"1286":2,"1300":1,"1309":1,"1324":2,"1359":1,"1369":1,"1396":2,"1398":1,"1415":1,"1436":1,"1467":1,"1559":2,"1661":1,"1678":1,"1711":1,"1748":1,"1777":1,"1825":1,"2144":1}}],["sized",{"3":{"236":1,"719":1,"996":1,"1020":1,"1150":1,"1291":1,"1300":2,"1311":2,"1324":1,"1350":4,"1359":2,"1369":3,"1380":1,"1395":3,"1396":2,"1402":2,"1415":1,"1436":1,"1438":1,"1467":5,"1478":1,"1486":1,"1523":1,"1525":1,"1526":3,"1549":1,"1554":1,"1555":1,"1560":1,"1572":2,"1591":2,"1670":1,"1909":1,"2034":1,"2038":1}}],["size",{"0":{"1198":1},"2":{"1986":1},"3":{"137":1,"140":1,"311":1,"330":3,"331":1,"335":2,"337":1,"360":2,"434":1,"438":1,"558":2,"609":1,"673":1,"692":1,"740":1,"741":2,"766":1,"788":1,"872":1,"881":1,"915":1,"1116":2,"1118":1,"1187":1,"1198":1,"1201":1,"1228":1,"1229":2,"1242":1,"1243":2,"1244":2,"1245":1,"1247":13,"1259":1,"1286":7,"1300":5,"1309":5,"1311":7,"1320":1,"1323":11,"1324":23,"1344":1,"1350":11,"1359":11,"1380":1,"1387":2,"1389":2,"1395":33,"1396":16,"1398":1,"1402":1,"1406":1,"1415":9,"1417":1,"1422":2,"1436":1,"1438":3,"1467":1,"1479":2,"1496":1,"1526":3,"1529":1,"1560":1,"1577":1,"1589":1,"1596":1,"1599":2,"1631":3,"1639":1,"1640":2,"1662":1,"1669":1,"1673":1,"1678":2,"1714":2,"1764":1,"1765":1,"1777":3,"1797":1,"1817":1,"1845":1,"1911":1,"1986":2,"1987":1,"1988":3,"1992":1,"2051":1,"2074":1,"2128":3,"2130":2,"2144":1,"2145":2,"2161":1,"2169":3,"2176":1}}],["sizing",{"3":{"0":1,"682":1,"867":1,"875":1,"1300":1,"1309":1,"1324":1,"1350":1,"1369":2,"1390":1,"1396":3,"1455":1,"1465":1,"1467":3,"1469":2,"1526":1,"1534":1,"1568":1,"1574":1,"1575":3,"1577":2,"1585":1,"1602":1,"1675":1,"1676":1,"1799":1}}],["simulated",{"3":{"1436":3,"1671":1,"1707":2}}],["simulate",{"3":{"1324":1,"1417":1,"1436":1,"1707":1}}],["simultaneous",{"3":{"0":1,"159":1,"856":1,"1124":1,"1311":2,"1323":1,"1324":2,"1339":1,"1357":1,"1359":2,"1396":1,"1416":1,"1667":1,"1982":1,"2001":1,"2171":1}}],["simultaneously",{"3":{"0":1,"40":1,"501":1,"690":1,"907":1,"1323":2,"1339":2,"1380":1,"1396":4,"1436":2,"1443":2,"1638":1,"1670":1}}],["similarityscore",{"3":{"1350":1}}],["similarity",{"3":{"1350":4,"1359":7,"1376":2,"1380":1,"1390":1,"1395":2,"1632":1,"1640":1}}],["similarly",{"3":{"1350":1,"1638":1,"1639":1}}],["similarsessionpair",{"3":{"1199":4,"1203":1,"1207":1,"1347":1,"1350":2,"1359":2}}],["similar",{"3":{"158":1,"725":1,"827":1,"973":1,"1229":1,"1350":5,"1369":1,"1373":1,"1415":1,"1467":1,"1640":1,"1834":1}}],["simplify",{"3":{"1631":1}}],["simplifying",{"3":{"1395":1,"1641":1}}],["simplification",{"3":{"1339":1,"1402":1,"1417":1}}],["simplifies",{"3":{"310":1,"1417":1,"1638":2}}],["simplename",{"3":{"1436":3}}],["simpletypename",{"3":{"1436":1}}],["simplest",{"3":{"1286":2,"1323":1,"1353":1,"1359":5,"1380":1,"1383":1,"1395":2,"1396":1,"1436":5,"1445":1,"1617":1,"1681":1}}],["simple",{"3":{"136":1,"160":1,"161":1,"196":1,"341":1,"372":1,"699":1,"1074":1,"1117":1,"1196":2,"1247":1,"1270":1,"1286":1,"1300":1,"1309":1,"1311":3,"1323":6,"1324":4,"1339":1,"1341":1,"1357":1,"1359":3,"1369":1,"1380":1,"1395":4,"1396":7,"1402":1,"1415":4,"1416":1,"1436":9,"1638":2,"1641":1,"1853":1,"1875":1,"1958":1,"2081":1,"2240":1}}],["simpler",{"3":{"48":1,"811":1,"871":1,"1034":1,"1323":1,"1324":4,"1350":2,"1359":1,"1395":1,"1396":2,"1436":1,"1650":1,"1658":1,"1703":1,"1705":1,"1848":1,"2064":1}}],["simply",{"3":{"22":1,"24":1,"79":1,"117":1,"135":1,"137":1,"213":1,"224":1,"225":1,"235":1,"295":1,"342":1,"343":1,"399":1,"415":1,"464":1,"539":1,"585":1,"599":1,"676":1,"681":1,"709":1,"717":1,"751":1,"840":1,"907":1,"933":1,"963":1,"1042":1,"1059":1,"1084":1,"1232":1,"1234":1,"1237":2,"1239":1,"1241":1,"1243":1,"1247":5,"1251":1,"1254":1,"1256":1,"1259":5,"1270":8,"1271":1,"1276":1,"1286":12,"1297":1,"1300":10,"1301":6,"1302":1,"1309":8,"1310":1,"1311":14,"1316":1,"1323":7,"1324":15,"1339":6,"1343":1,"1350":6,"1353":1,"1359":19,"1369":1,"1375":1,"1380":3,"1389":1,"1395":15,"1396":18,"1401":1,"1402":4,"1415":8,"1416":5,"1417":22,"1427":1,"1431":1,"1436":18,"1438":2,"1449":1,"1455":1,"1467":2,"1488":1,"1640":1,"1641":1,"1810":1,"1841":1,"1851":1,"1863":1,"1870":1,"1880":1,"1885":1,"1889":1,"1916":1,"1946":1,"1948":1,"1977":1,"2002":1,"2007":1,"2011":1,"2094":1,"2099":1,"2119":1,"2158":1,"2190":1,"2198":1}}],["sid",{"2":{"903":1,"906":1,"909":1,"1983":1},"3":{"0":4,"903":1,"905":5,"906":2,"907":3,"909":1,"1059":1,"1289":1,"1290":3,"1296":2,"1300":23,"1311":3,"1324":1,"1438":2,"1667":1,"1982":2,"1983":1}}],["sideways",{"3":{"1436":2,"2130":1}}],["sidekick",{"3":{"1313":1}}],["sided",{"3":{"1300":1,"1339":1,"1369":1,"1436":2}}],["sidebar",{"3":{"881":1,"1324":11,"1409":1,"1414":2,"1415":3,"1438":1,"1712":1,"1713":1,"1750":1,"1773":1}}],["sides",{"3":{"122":1,"180":1,"243":1,"286":1,"556":1,"631":1,"640":1,"720":1,"827":1,"975":1,"1050":1,"1212":1,"1236":1,"1237":3,"1241":1,"1247":2,"1270":4,"1271":1,"1276":1,"1277":1,"1286":5,"1289":1,"1300":5,"1309":2,"1311":2,"1312":2,"1323":1,"1324":5,"1339":1,"1350":1,"1359":5,"1380":1,"1396":3,"1415":2,"1436":13,"1488":1,"1577":1,"1641":1,"1651":1,"1839":1,"1979":1,"2045":1,"2098":1,"2138":1,"2159":2}}],["sidesteps",{"3":{"92":1,"1270":1,"1286":2,"1300":1,"1323":1,"1359":1,"1396":2,"1402":1,"1415":1,"1436":1,"1467":1,"1872":1}}],["side",{"0":{"141":1,"926":1,"1227":1,"1265":1,"1306":1,"1634":1,"1841":1,"2019":1,"2020":1},"1":{"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"202":1,"203":1,"504":1,"505":1,"506":1,"507":1,"508":1,"509":1,"510":1,"511":1,"512":1,"513":1,"514":1,"878":1,"879":1,"880":1,"881":1,"882":1,"883":1,"884":1,"885":1,"894":1,"895":1,"896":1,"897":1,"898":1,"899":1,"900":1,"901":1,"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":1},"3":{"0":27,"15":1,"21":1,"24":3,"31":2,"39":1,"53":2,"66":1,"72":1,"73":2,"99":1,"100":1,"103":1,"109":4,"113":2,"117":1,"121":1,"122":3,"124":1,"126":1,"128":1,"135":1,"139":2,"141":2,"145":2,"147":2,"150":3,"166":2,"168":2,"175":1,"180":1,"192":1,"193":1,"194":1,"199":1,"201":1,"207":1,"208":1,"236":1,"239":1,"245":1,"248":1,"255":2,"258":1,"264":1,"265":3,"267":1,"273":2,"295":1,"298":1,"330":2,"335":1,"337":1,"342":1,"343":1,"346":1,"350":3,"351":1,"353":3,"360":1,"363":1,"379":1,"387":1,"388":1,"389":1,"391":1,"399":1,"400":1,"401":3,"408":1,"415":1,"418":1,"419":1,"420":1,"433":1,"434":1,"436":1,"451":1,"470":1,"490":1,"499":1,"501":2,"504":1,"507":3,"508":1,"509":1,"518":1,"536":1,"537":1,"545":1,"549":1,"551":1,"557":1,"560":1,"591":2,"599":2,"601":1,"612":1,"629":1,"633":2,"635":1,"640":1,"645":1,"648":1,"649":2,"650":2,"653":1,"657":1,"665":2,"668":2,"674":1,"684":1,"690":3,"692":3,"693":2,"696":1,"697":1,"698":2,"701":1,"702":2,"725":1,"741":1,"756":1,"758":1,"770":1,"785":1,"786":1,"790":2,"795":1,"818":2,"827":6,"829":2,"830":1,"833":1,"836":2,"839":2,"844":1,"845":1,"846":1,"848":2,"860":3,"861":1,"865":3,"870":1,"878":1,"880":1,"881":6,"883":2,"885":2,"894":1,"897":7,"898":2,"899":1,"901":1,"904":1,"905":1,"919":1,"920":1,"921":1,"922":2,"923":1,"924":1,"925":1,"926":2,"930":1,"935":1,"984":1,"995":1,"1012":3,"1017":1,"1018":3,"1020":2,"1021":2,"1028":1,"1041":1,"1044":2,"1066":1,"1067":1,"1068":1,"1085":1,"1093":1,"1094":2,"1100":1,"1115":1,"1118":1,"1126":1,"1160":1,"1182":1,"1184":4,"1185":1,"1187":2,"1202":1,"1203":1,"1212":14,"1219":1,"1220":2,"1222":2,"1225":2,"1227":2,"1228":1,"1229":9,"1231":1,"1233":1,"1237":11,"1238":2,"1240":1,"1242":2,"1243":2,"1245":2,"1247":28,"1248":1,"1249":2,"1252":3,"1253":1,"1258":3,"1259":24,"1260":4,"1261":1,"1262":1,"1263":6,"1265":2,"1268":1,"1269":3,"1270":71,"1271":7,"1274":1,"1278":3,"1282":1,"1284":3,"1285":3,"1286":45,"1287":1,"1292":1,"1293":1,"1298":1,"1300":62,"1301":7,"1304":1,"1305":2,"1306":2,"1308":2,"1309":29,"1310":6,"1311":38,"1312":22,"1313":1,"1317":2,"1318":4,"1322":1,"1323":36,"1324":135,"1325":6,"1326":1,"1330":2,"1337":3,"1339":37,"1342":2,"1344":1,"1349":1,"1350":47,"1352":1,"1353":1,"1355":5,"1357":2,"1359":136,"1362":1,"1366":2,"1368":2,"1369":12,"1370":1,"1374":2,"1375":1,"1378":1,"1380":21,"1383":2,"1385":1,"1387":1,"1388":3,"1389":1,"1390":1,"1391":1,"1392":4,"1393":1,"1395":85,"1396":127,"1399":2,"1400":1,"1401":1,"1402":38,"1405":1,"1406":1,"1413":1,"1414":1,"1415":50,"1416":19,"1417":35,"1422":1,"1424":2,"1427":6,"1429":1,"1430":1,"1433":2,"1435":5,"1436":88,"1437":1,"1438":17,"1441":4,"1443":3,"1444":1,"1445":1,"1447":5,"1449":1,"1451":1,"1455":3,"1456":1,"1461":2,"1467":8,"1475":2,"1476":3,"1487":1,"1488":4,"1489":1,"1492":4,"1494":1,"1496":7,"1526":13,"1531":1,"1532":1,"1534":4,"1535":2,"1543":1,"1545":1,"1547":2,"1553":1,"1560":3,"1561":2,"1563":1,"1566":1,"1572":4,"1575":3,"1576":1,"1577":9,"1582":2,"1585":2,"1586":1,"1589":1,"1591":5,"1596":4,"1597":1,"1598":1,"1599":3,"1627":5,"1630":1,"1631":2,"1632":8,"1634":1,"1635":1,"1638":1,"1639":3,"1640":2,"1641":4,"1647":1,"1651":4,"1653":1,"1661":2,"1665":3,"1666":3,"1667":3,"1668":3,"1669":2,"1670":2,"1675":2,"1677":1,"1685":1,"1687":1,"1702":1,"1720":1,"1721":1,"1726":2,"1748":1,"1749":1,"1750":2,"1757":1,"1759":2,"1761":1,"1765":1,"1767":2,"1773":1,"1781":1,"1800":1,"1805":5,"1808":1,"1810":1,"1814":1,"1815":2,"1820":1,"1821":2,"1843":2,"1845":1,"1853":1,"1854":1,"1856":2,"1883":4,"1902":2,"1903":1,"1906":1,"1910":2,"1911":2,"1912":1,"1913":1,"1916":2,"1919":3,"1920":1,"1924":1,"1927":2,"1928":1,"1929":1,"1935":1,"1936":1,"1942":1,"1944":1,"1945":1,"1946":1,"1952":2,"1953":2,"1956":4,"1957":2,"1959":1,"1966":2,"1968":4,"1970":1,"1972":3,"1973":1,"1975":2,"1977":1,"1979":2,"1982":2,"1983":1,"1984":2,"1985":2,"1988":2,"2003":1,"2005":2,"2007":3,"2019":2,"2020":1,"2029":2,"2031":3,"2037":1,"2057":1,"2065":1,"2072":1,"2074":2,"2075":1,"2076":1,"2079":2,"2080":2,"2081":1,"2085":1,"2087":1,"2088":1,"2097":2,"2129":1,"2138":1,"2140":1,"2143":1,"2158":2,"2161":1,"2164":1,"2167":3,"2168":1,"2169":1,"2171":1,"2176":1,"2177":1,"2184":1,"2189":1,"2191":1,"2194":2,"2195":1,"2200":1,"2232":1,"2234":5}}],["siblings",{"3":{"509":1,"511":1,"703":1,"773":1,"914":1,"980":1,"1212":1,"1234":1,"1247":2,"1258":1,"1271":1,"1281":1,"1282":1,"1286":3,"1300":2,"1301":1,"1311":3,"1324":5,"1326":2,"1330":1,"1336":1,"1339":5,"1350":11,"1353":3,"1359":28,"1369":1,"1371":1,"1380":2,"1382":1,"1395":11,"1396":9,"1401":1,"1402":4,"1404":1,"1411":1,"1415":4,"1416":1,"1417":30,"1431":2,"1436":13,"1441":3,"1467":1,"1489":1,"1496":1,"1577":1,"1591":2,"2044":1,"2167":1}}],["sibling",{"0":{"1948":1},"3":{"0":4,"194":1,"247":1,"255":1,"256":1,"258":1,"265":4,"291":1,"406":1,"443":1,"538":1,"568":1,"614":1,"630":1,"645":1,"657":1,"694":1,"711":1,"725":1,"741":1,"750":1,"753":1,"765":1,"770":1,"782":1,"852":1,"854":2,"865":1,"881":1,"905":1,"922":1,"926":1,"935":1,"963":1,"973":1,"975":2,"976":2,"1120":1,"1133":1,"1136":1,"1184":1,"1193":1,"1212":2,"1223":1,"1228":1,"1229":2,"1237":5,"1247":1,"1252":2,"1256":1,"1259":6,"1260":1,"1267":1,"1270":11,"1271":2,"1278":1,"1282":1,"1285":1,"1286":16,"1295":1,"1296":1,"1300":11,"1309":4,"1310":4,"1311":17,"1316":1,"1323":10,"1324":27,"1339":13,"1343":1,"1344":1,"1350":13,"1352":1,"1353":1,"1356":1,"1359":55,"1369":4,"1380":14,"1395":13,"1396":19,"1402":21,"1407":2,"1415":18,"1416":3,"1417":8,"1427":1,"1431":1,"1436":55,"1438":2,"1456":1,"1475":1,"1486":1,"1489":1,"1491":1,"1492":1,"1496":8,"1497":2,"1526":2,"1577":2,"1593":1,"1653":2,"1654":1,"1749":1,"1950":1,"2044":2,"2069":1,"2085":1,"2087":1,"2094":1,"2153":2,"2185":1}}],["situations",{"3":{"1417":1,"1982":1,"2169":1}}],["situation",{"3":{"1300":1,"1324":1,"1380":1,"1396":2,"1415":1,"1436":1,"1908":1}}],["sitting",{"3":{"178":1,"198":1,"235":1,"257":1,"486":1,"536":1,"545":1,"572":1,"826":1,"1004":1,"1050":1,"1117":1,"1259":1,"1270":1,"1300":3,"1302":1,"1323":2,"1324":4,"1339":1,"1359":1,"1380":3,"1395":1,"1396":3,"1415":1,"1416":2,"1417":1,"1436":8,"1443":2,"1463":1,"1465":1,"1467":2,"1749":1,"1765":1,"1843":1,"1902":1,"1903":1,"1966":1,"1973":1,"1980":1,"2055":1,"2063":1,"2067":1,"2069":1,"2077":1,"2151":1,"2172":1}}],["sitemap",{"3":{"609":1,"1300":1,"1467":3,"2160":3}}],["sites",{"3":{"0":9,"93":1,"94":1,"95":1,"104":1,"111":1,"128":3,"223":1,"230":2,"254":1,"257":1,"260":1,"261":1,"281":1,"310":1,"314":1,"323":1,"326":1,"330":1,"418":1,"429":1,"453":1,"454":1,"483":2,"484":2,"486":2,"487":2,"488":2,"489":2,"490":2,"491":2,"492":2,"493":2,"494":3,"516":1,"522":3,"523":2,"545":2,"549":1,"550":2,"552":3,"647":1,"668":1,"669":1,"688":1,"693":1,"696":4,"698":1,"700":1,"703":1,"752":1,"782":1,"819":1,"837":1,"884":1,"897":2,"899":1,"900":2,"994":2,"996":1,"999":2,"1036":1,"1100":1,"1127":1,"1132":1,"1134":1,"1175":2,"1176":1,"1212":1,"1237":3,"1240":1,"1247":5,"1250":1,"1262":1,"1267":1,"1270":2,"1271":4,"1276":1,"1286":20,"1300":19,"1301":6,"1310":1,"1311":6,"1312":1,"1318":2,"1323":5,"1324":12,"1339":1,"1350":7,"1359":8,"1369":1,"1387":1,"1395":4,"1396":13,"1402":1,"1415":1,"1417":4,"1427":1,"1436":22,"1438":1,"1442":1,"1496":1,"1510":1,"1535":1,"1810":1,"1815":1,"1851":1,"1862":2,"1882":1,"1996":3,"2001":1,"2064":1,"2158":1,"2159":1}}],["site",{"3":{"0":8,"67":1,"109":3,"111":1,"113":1,"118":1,"121":1,"184":1,"207":2,"209":1,"217":1,"230":2,"279":2,"285":1,"303":1,"308":1,"310":3,"318":2,"325":1,"336":1,"353":1,"386":1,"387":1,"395":3,"397":1,"419":1,"420":1,"424":1,"446":3,"472":1,"480":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1,"516":1,"517":2,"523":1,"524":2,"545":3,"549":1,"650":1,"655":1,"657":2,"663":1,"665":2,"667":1,"669":1,"674":2,"696":1,"700":1,"733":1,"777":1,"782":1,"799":2,"800":1,"803":1,"819":2,"827":2,"832":1,"838":1,"846":1,"861":2,"889":1,"896":1,"900":1,"926":1,"934":1,"946":1,"948":1,"950":1,"952":1,"955":1,"964":2,"980":1,"981":1,"990":1,"1050":1,"1051":1,"1052":1,"1100":1,"1102":1,"1116":1,"1123":1,"1124":1,"1126":1,"1133":2,"1136":1,"1176":1,"1179":1,"1184":1,"1187":1,"1212":1,"1221":1,"1229":7,"1236":1,"1237":7,"1241":1,"1246":1,"1247":10,"1259":3,"1270":10,"1271":5,"1280":1,"1286":37,"1297":1,"1298":2,"1300":23,"1301":4,"1309":8,"1310":5,"1311":14,"1312":3,"1323":14,"1324":40,"1332":1,"1339":12,"1344":1,"1350":9,"1359":30,"1366":1,"1369":4,"1380":1,"1392":1,"1395":15,"1396":28,"1402":2,"1415":11,"1416":9,"1417":12,"1427":4,"1436":49,"1438":3,"1444":1,"1447":3,"1448":1,"1467":3,"1534":2,"1566":1,"1620":1,"1659":1,"1666":1,"1667":1,"1673":1,"1675":1,"1701":1,"1756":1,"1793":1,"1802":1,"1806":1,"1807":1,"1810":1,"1813":1,"1815":2,"1817":1,"1821":1,"1826":1,"1827":2,"1843":1,"1846":1,"1853":1,"1856":1,"1868":1,"1877":1,"1886":2,"1892":2,"1899":1,"1905":1,"1915":2,"1919":1,"1930":1,"1939":1,"1950":1,"1965":1,"1969":5,"1971":1,"1972":2,"1975":1,"1979":1,"1985":1,"1990":1,"1992":1,"1998":1,"2003":1,"2013":2,"2025":1,"2031":2,"2064":1,"2071":1,"2088":1,"2110":1,"2117":1,"2123":1,"2126":1,"2130":1,"2135":1,"2151":1,"2152":1,"2155":1,"2162":1,"2171":1,"2182":1,"2191":1,"2195":1,"2205":1,"2213":1,"2235":1}}],["sit",{"0":{"1303":1},"3":{"0":6,"25":1,"27":1,"64":1,"71":1,"80":1,"95":1,"147":1,"180":1,"182":1,"201":1,"242":1,"281":1,"287":1,"344":1,"423":1,"455":1,"459":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":2,"494":1,"495":2,"509":1,"511":1,"566":1,"572":1,"599":1,"609":1,"626":1,"627":1,"632":1,"633":1,"649":1,"674":2,"676":2,"751":1,"766":1,"798":1,"814":1,"815":1,"823":1,"832":1,"834":1,"862":1,"926":1,"954":1,"968":1,"980":1,"982":1,"992":1,"1051":1,"1055":1,"1067":1,"1117":1,"1144":1,"1168":1,"1192":1,"1211":1,"1212":2,"1213":1,"1220":1,"1229":1,"1230":1,"1237":1,"1249":1,"1258":1,"1259":1,"1260":1,"1269":1,"1270":3,"1271":3,"1275":1,"1278":1,"1284":1,"1285":1,"1286":6,"1300":4,"1311":7,"1316":1,"1317":2,"1322":1,"1323":4,"1324":11,"1330":1,"1332":1,"1339":8,"1347":1,"1350":4,"1354":1,"1359":16,"1371":1,"1372":1,"1378":1,"1379":1,"1380":2,"1389":1,"1391":1,"1395":5,"1396":9,"1402":2,"1403":1,"1414":1,"1415":6,"1416":1,"1417":3,"1421":2,"1431":1,"1436":20,"1438":2,"1441":1,"1445":1,"1447":2,"1453":1,"1459":1,"1467":2,"1489":3,"1490":2,"1496":2,"1498":2,"1523":2,"1531":1,"1551":1,"1574":3,"1577":10,"1581":1,"1582":3,"1583":1,"1584":1,"1591":6,"1596":2,"1597":1,"1599":2,"1627":2,"1630":1,"1640":1,"1767":2,"1781":2,"1784":1,"1800":1,"1810":1,"1826":1,"1851":1,"1855":1,"1856":1,"1864":1,"1883":1,"1898":1,"1904":1,"1927":1,"1956":1,"1975":1,"1982":1,"1990":1,"1995":1,"2001":1,"2011":1,"2054":1,"2081":1,"2097":1,"2113":1,"2174":2,"2198":1,"2200":1,"2205":1,"2210":1,"2234":1}}],["sits",{"0":{"1237":1,"1286":1,"1309":1},"3":{"0":5,"109":1,"122":3,"123":1,"135":1,"141":1,"149":1,"150":1,"152":1,"162":1,"178":1,"182":1,"218":1,"230":1,"237":1,"255":2,"259":1,"279":1,"287":1,"291":1,"295":1,"310":1,"317":1,"346":1,"349":1,"355":1,"366":1,"373":1,"380":1,"395":1,"407":1,"411":1,"416":1,"423":2,"427":1,"428":1,"457":1,"459":1,"462":1,"464":1,"491":1,"492":3,"493":3,"494":1,"495":1,"524":1,"536":1,"538":1,"544":1,"560":1,"564":1,"567":1,"575":1,"577":1,"591":1,"609":2,"619":1,"631":1,"633":2,"638":1,"665":2,"682":1,"692":1,"701":1,"706":1,"724":1,"736":1,"748":1,"749":3,"766":1,"768":1,"784":1,"803":1,"821":1,"823":1,"827":1,"856":1,"897":1,"905":1,"914":1,"953":1,"957":1,"963":2,"966":1,"967":1,"979":2,"980":1,"1004":1,"1014":1,"1018":1,"1034":1,"1052":1,"1054":1,"1059":1,"1066":1,"1077":1,"1093":1,"1124":1,"1125":1,"1137":1,"1167":1,"1212":3,"1229":1,"1230":1,"1233":1,"1237":2,"1247":1,"1259":31,"1263":7,"1265":1,"1270":15,"1271":5,"1278":1,"1285":2,"1286":11,"1297":1,"1299":1,"1300":9,"1301":2,"1304":1,"1309":3,"1310":1,"1311":10,"1316":3,"1323":19,"1324":16,"1328":1,"1330":1,"1336":1,"1337":1,"1339":7,"1343":1,"1347":1,"1348":2,"1350":4,"1351":1,"1359":12,"1369":2,"1371":1,"1372":1,"1373":1,"1375":1,"1380":1,"1388":1,"1393":1,"1395":10,"1396":23,"1402":4,"1404":1,"1410":1,"1415":6,"1416":4,"1417":8,"1421":1,"1425":1,"1429":1,"1433":1,"1435":1,"1436":18,"1438":2,"1443":1,"1447":1,"1453":1,"1455":1,"1456":1,"1460":1,"1467":3,"1473":1,"1474":1,"1475":2,"1479":1,"1486":1,"1490":1,"1492":5,"1503":1,"1504":2,"1507":1,"1523":1,"1524":2,"1526":2,"1527":1,"1534":2,"1544":1,"1554":1,"1574":1,"1577":2,"1582":2,"1588":1,"1591":3,"1592":1,"1631":2,"1648":1,"1653":1,"1662":1,"1695":1,"1749":1,"1757":1,"1758":1,"1766":1,"1781":1,"1784":2,"1799":1,"1800":1,"1804":1,"1810":3,"1815":1,"1821":7,"1825":1,"1828":1,"1831":1,"1839":1,"1856":1,"1881":1,"1889":1,"1890":1,"1902":2,"1916":3,"1918":1,"1921":1,"1922":3,"1929":1,"1938":1,"1944":1,"1947":1,"1953":1,"1972":1,"1984":1,"1988":1,"2001":2,"2008":1,"2033":1,"2047":1,"2049":1,"2051":1,"2065":1,"2080":1,"2081":1,"2093":1,"2098":2,"2102":1,"2128":2,"2138":1,"2151":1,"2158":1,"2160":1,"2163":1,"2167":1,"2170":1,"2173":1,"2174":1,"2177":1,"2179":1,"2181":1,"2197":1,"2201":1,"2234":1}}],["sixlaborslicensekey",{"3":{"1436":1}}],["sixlabors",{"2":{"145":1,"147":1},"3":{"145":2,"147":1,"1323":1,"1431":1,"1436":3,"1489":1}}],["sixty",{"3":{"1359":1,"1395":1,"1415":1,"1985":1}}],["sixteen",{"3":{"130":1,"138":2,"139":1,"141":2,"468":1,"554":1,"672":1,"1217":1,"1229":1,"1263":1,"1286":1,"1324":2,"1339":1,"1359":2,"1369":2,"1372":1,"1417":1,"1436":1,"1438":1,"1455":1,"1486":1,"1496":1}}],["sixth",{"3":{"19":1,"142":1,"258":1,"259":1,"261":1,"350":1,"688":1,"761":1,"776":1,"806":1,"1004":1,"1270":1,"1359":2,"1415":2,"1428":1,"1431":1,"1433":1,"1467":1,"1488":1,"1977":1,"2158":1}}],["six",{"0":{"140":1,"1445":1},"1":{"936":1,"937":1,"938":1,"939":1,"940":1,"941":1,"942":1},"3":{"0":19,"62":1,"63":1,"115":1,"122":1,"126":1,"130":1,"136":1,"140":1,"142":1,"145":2,"147":1,"184":1,"186":1,"251":1,"252":1,"335":1,"413":1,"429":1,"440":1,"466":2,"468":1,"470":1,"476":2,"478":1,"526":1,"531":1,"545":1,"554":1,"572":3,"589":1,"593":1,"599":1,"603":1,"607":5,"609":3,"625":1,"632":1,"657":3,"658":1,"660":1,"672":1,"674":2,"696":3,"707":2,"757":2,"760":1,"798":1,"800":2,"804":2,"832":1,"867":1,"868":2,"869":1,"875":1,"881":1,"897":2,"905":1,"936":1,"938":4,"939":2,"940":4,"946":1,"954":2,"955":1,"980":1,"981":1,"982":2,"986":1,"991":1,"998":1,"1004":1,"1017":1,"1018":3,"1019":2,"1020":1,"1033":1,"1048":1,"1051":1,"1060":1,"1068":1,"1116":1,"1191":1,"1211":2,"1212":1,"1234":1,"1237":4,"1244":2,"1247":10,"1259":1,"1260":2,"1268":1,"1270":4,"1271":15,"1286":10,"1293":1,"1300":8,"1309":4,"1311":2,"1312":1,"1322":1,"1323":6,"1324":14,"1339":5,"1342":1,"1343":1,"1346":1,"1350":12,"1359":53,"1362":1,"1364":1,"1366":2,"1369":13,"1375":1,"1377":1,"1380":1,"1383":2,"1395":16,"1396":16,"1402":4,"1415":6,"1416":1,"1417":1,"1433":1,"1436":84,"1439":1,"1441":2,"1442":1,"1443":1,"1445":9,"1449":1,"1450":5,"1454":1,"1455":10,"1461":1,"1464":1,"1465":5,"1466":1,"1467":27,"1469":2,"1472":1,"1474":3,"1488":2,"1489":3,"1492":1,"1496":10,"1497":1,"1503":1,"1525":2,"1526":4,"1535":2,"1577":2,"1591":1,"1602":1,"1630":1,"1631":1,"1651":1,"1660":1,"1661":2,"1662":1,"1666":1,"1674":1,"1684":1,"1686":2,"1692":1,"1693":3,"1717":1,"1725":1,"1726":1,"1727":2,"1728":2,"1781":1,"1794":1,"1809":1,"1810":3,"1826":1,"1829":2,"1881":1,"1898":1,"1902":1,"1913":1,"1948":2,"1951":1,"1958":1,"1987":1,"1996":1,"2035":1,"2038":2,"2039":1,"2045":1,"2056":2,"2061":1,"2077":1,"2112":1,"2129":1,"2130":1,"2140":1,"2149":1,"2158":1,"2160":1,"2161":1,"2162":1,"2169":1,"2195":1,"2200":1,"2202":1,"2228":1,"2229":2,"2234":2,"2236":1}}],["sin",{"3":{"2048":1}}],["singular",{"3":{"872":1,"1324":1,"1359":3,"1436":1,"1577":1,"1695":1,"1727":3,"1728":3,"1729":1,"2091":1}}],["singly",{"3":{"386":1,"1402":1}}],["singles",{"3":{"1496":1}}],["singleserviceprovider",{"3":{"1199":2,"1207":1}}],["singleframesettlescript",{"3":{"1436":1}}],["singlecapture",{"3":{"1436":1}}],["singlecontextfactory",{"3":{"1199":2,"1207":1}}],["singletop",{"3":{"1416":1}}],["singletonstateregistration",{"3":{"1436":1}}],["singletonscan",{"3":{"1436":1}}],["singletons",{"3":{"522":1,"536":1,"651":1,"884":1,"1100":1,"1219":1,"1229":4,"1237":2,"1252":1,"1259":2,"1262":1,"1270":1,"1286":1,"1300":1,"1316":4,"1323":3,"1324":1,"1377":1,"1380":1,"1395":1,"1396":2,"1399":1,"1415":1,"1417":4,"1436":1,"1438":1,"1555":1,"1883":1,"2165":2}}],["singleton",{"3":{"0":6,"200":1,"201":1,"235":1,"303":1,"310":2,"413":1,"511":1,"518":2,"649":1,"698":1,"699":1,"700":1,"703":1,"790":1,"831":1,"832":1,"846":1,"850":1,"881":3,"946":1,"954":1,"980":1,"1050":1,"1089":1,"1091":2,"1100":3,"1124":2,"1133":2,"1212":2,"1229":1,"1237":2,"1247":1,"1253":1,"1259":8,"1262":1,"1267":1,"1269":1,"1270":3,"1277":2,"1278":1,"1279":2,"1283":1,"1286":48,"1300":21,"1301":2,"1309":2,"1310":1,"1311":28,"1315":1,"1316":2,"1320":1,"1323":22,"1324":25,"1332":2,"1339":12,"1350":3,"1355":2,"1359":8,"1368":1,"1369":2,"1395":4,"1396":18,"1402":2,"1413":1,"1415":5,"1416":6,"1417":64,"1424":1,"1427":10,"1436":18,"1438":2,"1443":2,"1488":1,"1526":1,"1539":1,"1556":1,"1577":1,"1591":1,"1669":1,"1750":1,"1773":1,"1810":1,"1849":3,"1851":1,"1857":1,"1881":1,"1920":1,"1947":1,"2001":1,"2097":1,"2120":1,"2123":2,"2168":1,"2177":1,"2185":1}}],["singlewriter",{"3":{"1396":1}}],["singleordefaultasync",{"3":{"1286":1}}],["singlereader",{"2":{"1947":1,"2185":1},"3":{"0":2,"518":1,"1100":1,"1212":2,"1396":3,"1400":1,"1947":1,"2185":1}}],["single",{"0":{"94":1,"170":1,"1294":1,"2045":1},"1":{"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"496":1,"497":1,"498":1,"499":1,"500":1,"501":1,"502":1,"503":1,"1854":1,"1855":1,"1856":1,"1857":1,"1858":1,"1859":1,"1860":1,"1861":1,"1862":1,"2083":1,"2084":1,"2085":1,"2086":1,"2087":1,"2088":1},"3":{"0":39,"11":1,"15":1,"23":1,"24":1,"26":1,"30":1,"31":2,"32":1,"45":1,"46":2,"47":1,"48":1,"57":1,"58":1,"59":2,"60":1,"62":3,"67":1,"68":3,"69":1,"73":1,"83":1,"85":2,"86":2,"87":1,"91":1,"92":1,"99":1,"100":1,"115":1,"117":1,"121":1,"125":2,"128":1,"132":1,"135":2,"145":1,"147":1,"149":1,"157":3,"159":1,"160":1,"166":3,"174":1,"175":1,"176":2,"179":1,"180":1,"186":1,"194":1,"195":1,"196":2,"201":1,"202":1,"214":1,"216":1,"217":1,"220":1,"230":1,"233":1,"234":2,"235":3,"242":2,"243":2,"245":1,"246":1,"248":1,"249":1,"255":1,"259":1,"263":1,"264":1,"265":2,"266":1,"273":2,"281":1,"290":1,"310":2,"311":2,"312":1,"317":1,"318":3,"319":1,"320":1,"333":1,"340":1,"341":1,"350":3,"351":1,"352":1,"359":5,"360":1,"361":1,"365":1,"369":1,"370":2,"380":1,"382":3,"386":1,"388":1,"389":1,"390":2,"396":1,"397":1,"398":1,"405":1,"407":1,"412":1,"413":1,"418":1,"419":1,"420":2,"421":1,"422":1,"427":1,"428":2,"429":1,"446":2,"447":1,"448":2,"449":1,"459":1,"469":1,"475":1,"476":1,"491":1,"492":2,"496":1,"497":1,"499":2,"501":1,"503":1,"505":1,"506":2,"507":3,"508":1,"509":1,"510":1,"511":1,"518":1,"519":1,"526":1,"528":1,"536":1,"538":1,"539":1,"540":1,"545":4,"546":1,"549":1,"556":2,"564":1,"573":1,"582":2,"583":3,"584":1,"589":1,"608":1,"609":1,"618":1,"626":2,"627":1,"629":1,"633":1,"638":1,"649":1,"657":1,"659":1,"664":1,"665":3,"666":1,"674":3,"676":1,"681":1,"688":1,"690":3,"691":3,"693":1,"698":3,"702":1,"707":1,"709":1,"714":1,"731":1,"733":1,"735":2,"736":1,"741":1,"748":1,"756":1,"757":2,"758":1,"759":1,"766":1,"775":1,"781":1,"782":2,"790":2,"792":1,"795":1,"799":2,"808":1,"810":3,"819":1,"820":1,"821":1,"825":1,"826":1,"827":5,"830":2,"836":1,"837":1,"838":1,"853":1,"854":1,"855":2,"861":1,"862":1,"863":1,"872":1,"881":1,"889":1,"891":1,"893":1,"898":1,"904":2,"905":1,"906":1,"907":1,"910":1,"912":1,"922":2,"930":1,"941":1,"945":1,"946":3,"947":1,"954":1,"955":1,"971":2,"972":2,"973":1,"974":2,"976":1,"980":2,"981":1,"982":1,"988":2,"990":1,"996":4,"997":1,"1004":1,"1012":3,"1018":2,"1020":1,"1021":1,"1026":1,"1033":1,"1034":2,"1041":2,"1044":1,"1058":1,"1066":1,"1067":1,"1069":1,"1083":1,"1087":1,"1099":1,"1100":1,"1101":1,"1116":1,"1123":1,"1124":5,"1126":1,"1150":5,"1152":1,"1157":1,"1161":1,"1162":1,"1183":1,"1185":1,"1191":1,"1192":2,"1202":1,"1203":1,"1212":13,"1213":1,"1218":1,"1220":1,"1221":1,"1225":1,"1227":1,"1228":1,"1229":6,"1231":1,"1232":1,"1234":1,"1236":2,"1237":24,"1239":1,"1241":2,"1243":1,"1244":1,"1246":1,"1247":38,"1248":1,"1250":1,"1251":1,"1252":2,"1253":1,"1254":1,"1256":1,"1257":1,"1258":1,"1259":37,"1260":1,"1265":1,"1266":1,"1267":1,"1269":3,"1270":46,"1271":17,"1272":1,"1273":1,"1276":1,"1277":1,"1278":1,"1279":1,"1280":1,"1281":1,"1282":1,"1284":1,"1285":1,"1286":121,"1287":1,"1288":5,"1289":1,"1290":1,"1291":2,"1292":1,"1293":1,"1294":1,"1296":1,"1297":1,"1298":2,"1299":1,"1300":97,"1301":30,"1303":1,"1304":1,"1306":1,"1307":1,"1309":44,"1310":22,"1311":70,"1312":7,"1313":1,"1317":1,"1318":2,"1320":4,"1323":73,"1324":143,"1325":1,"1326":3,"1327":1,"1329":2,"1331":1,"1332":1,"1338":1,"1339":62,"1340":1,"1346":2,"1347":1,"1350":63,"1351":1,"1352":4,"1354":1,"1355":2,"1357":1,"1358":2,"1359":205,"1362":1,"1363":1,"1366":2,"1368":2,"1369":18,"1370":1,"1371":1,"1372":1,"1374":1,"1376":2,"1378":1,"1380":32,"1384":1,"1387":2,"1389":2,"1390":1,"1391":1,"1393":1,"1394":1,"1395":91,"1396":106,"1397":1,"1398":1,"1400":2,"1401":1,"1402":56,"1403":2,"1406":1,"1407":2,"1408":1,"1412":1,"1414":2,"1415":51,"1416":20,"1417":67,"1418":2,"1427":8,"1429":2,"1430":1,"1431":3,"1432":1,"1436":198,"1437":1,"1438":11,"1439":1,"1440":2,"1441":5,"1442":2,"1443":4,"1444":3,"1446":1,"1447":5,"1449":1,"1450":1,"1453":3,"1454":3,"1455":5,"1456":2,"1459":2,"1460":1,"1464":1,"1465":3,"1467":16,"1469":1,"1472":1,"1473":4,"1474":7,"1475":1,"1487":2,"1488":3,"1489":2,"1490":4,"1492":1,"1496":3,"1498":1,"1508":1,"1509":3,"1510":1,"1517":1,"1522":2,"1526":10,"1527":1,"1529":1,"1534":7,"1535":1,"1538":1,"1541":1,"1545":1,"1548":1,"1553":1,"1554":1,"1556":1,"1564":1,"1566":2,"1573":1,"1574":1,"1577":6,"1578":1,"1585":2,"1586":1,"1587":1,"1591":8,"1592":1,"1594":1,"1595":1,"1596":2,"1597":2,"1599":3,"1600":2,"1611":3,"1627":1,"1629":1,"1630":2,"1631":5,"1632":4,"1634":1,"1638":3,"1639":3,"1640":2,"1641":6,"1649":1,"1651":1,"1652":2,"1656":1,"1661":1,"1664":1,"1667":2,"1670":1,"1673":1,"1675":2,"1677":2,"1685":4,"1686":2,"1689":1,"1691":1,"1692":1,"1694":1,"1699":1,"1708":1,"1709":2,"1727":2,"1732":1,"1748":4,"1749":4,"1764":1,"1765":2,"1767":2,"1768":2,"1769":1,"1773":1,"1775":1,"1776":1,"1783":1,"1784":1,"1788":1,"1790":4,"1799":1,"1800":2,"1802":2,"1803":1,"1804":1,"1805":3,"1806":1,"1807":1,"1810":3,"1815":3,"1818":1,"1819":1,"1823":1,"1825":1,"1827":2,"1828":1,"1829":1,"1831":1,"1839":2,"1840":1,"1847":3,"1849":5,"1851":1,"1852":1,"1853":2,"1854":2,"1856":1,"1858":1,"1859":1,"1862":1,"1863":1,"1867":2,"1869":1,"1871":1,"1875":1,"1884":2,"1893":1,"1897":1,"1899":1,"1900":1,"1902":1,"1905":1,"1906":1,"1908":1,"1909":2,"1915":3,"1916":2,"1918":2,"1920":2,"1922":2,"1923":3,"1927":2,"1930":2,"1933":3,"1935":1,"1939":1,"1941":1,"1942":1,"1944":2,"1945":1,"1946":1,"1949":3,"1953":1,"1959":1,"1961":1,"1962":2,"1965":1,"1969":1,"1970":2,"1972":1,"1973":1,"1975":1,"1976":1,"1977":2,"1978":1,"1979":3,"1983":1,"1985":1,"1986":1,"1987":1,"1988":1,"1989":1,"1992":1,"1995":5,"1996":1,"1998":2,"1999":2,"2000":1,"2001":1,"2003":1,"2004":1,"2006":2,"2008":1,"2009":2,"2011":1,"2014":1,"2019":1,"2024":1,"2025":2,"2026":2,"2029":1,"2030":1,"2031":1,"2034":2,"2035":2,"2036":1,"2037":1,"2038":4,"2039":2,"2044":2,"2045":1,"2051":1,"2054":1,"2056":1,"2058":1,"2063":1,"2068":2,"2071":1,"2074":1,"2075":1,"2077":2,"2083":2,"2085":3,"2087":1,"2088":2,"2091":1,"2092":1,"2094":2,"2096":1,"2099":1,"2105":1,"2108":1,"2114":1,"2118":1,"2121":1,"2123":1,"2125":1,"2128":2,"2130":2,"2131":2,"2133":1,"2134":1,"2135":3,"2137":1,"2143":1,"2144":3,"2145":1,"2149":2,"2151":2,"2152":1,"2156":1,"2158":1,"2160":3,"2167":1,"2168":1,"2169":1,"2170":1,"2171":1,"2172":1,"2184":1,"2185":2,"2187":1,"2194":1,"2195":1,"2199":1,"2200":1,"2205":1,"2206":1,"2209":1,"2212":1,"2229":2,"2230":1,"2232":2,"2233":1,"2234":6}}],["sinks",{"3":{"401":1,"665":1,"1339":2,"1396":1}}],["sink",{"3":{"0":1,"395":1,"401":3,"914":1,"1271":1,"1286":1,"1311":1,"1326":1,"1333":1,"1339":5,"1359":2,"1416":1,"1417":2,"1436":2,"1445":1,"1467":2,"1670":1,"1898":1}}],["since",{"3":{"0":30,"18":1,"57":1,"91":1,"94":1,"98":1,"122":1,"126":1,"130":1,"135":2,"137":1,"138":3,"139":1,"140":2,"141":1,"142":1,"150":1,"157":1,"160":1,"166":2,"171":1,"175":1,"178":1,"202":1,"228":1,"229":1,"237":2,"243":1,"245":1,"251":1,"252":2,"254":3,"255":1,"256":2,"257":1,"258":1,"259":1,"265":2,"280":1,"291":1,"308":1,"314":1,"323":1,"324":2,"340":1,"349":1,"360":1,"365":1,"386":1,"390":1,"402":1,"413":1,"423":1,"427":1,"446":1,"448":2,"450":1,"465":1,"469":1,"490":2,"492":1,"493":1,"494":1,"499":1,"501":1,"511":1,"518":1,"526":1,"527":1,"543":1,"545":1,"550":1,"572":3,"600":1,"604":1,"626":1,"631":2,"633":1,"634":1,"636":1,"638":2,"640":1,"664":1,"665":1,"675":1,"677":1,"681":1,"696":1,"702":1,"703":1,"708":1,"711":1,"716":1,"720":2,"728":1,"789":1,"799":1,"800":1,"803":1,"805":2,"809":2,"826":1,"853":1,"857":1,"870":1,"875":1,"889":1,"898":1,"905":1,"907":1,"947":1,"948":1,"959":1,"988":1,"991":2,"1004":1,"1006":1,"1012":2,"1014":1,"1017":1,"1033":1,"1034":1,"1043":1,"1049":1,"1050":2,"1052":1,"1059":1,"1069":1,"1075":2,"1083":1,"1124":1,"1156":1,"1177":1,"1192":1,"1212":4,"1229":5,"1237":3,"1244":1,"1247":8,"1252":1,"1254":2,"1256":2,"1258":1,"1259":3,"1262":1,"1263":2,"1268":1,"1270":8,"1271":1,"1275":2,"1283":1,"1285":1,"1286":37,"1290":2,"1300":20,"1301":7,"1304":1,"1308":1,"1309":6,"1310":1,"1311":27,"1312":1,"1317":1,"1322":1,"1323":14,"1324":38,"1331":1,"1333":1,"1337":1,"1339":16,"1344":1,"1350":9,"1351":1,"1359":27,"1369":3,"1375":1,"1379":1,"1380":10,"1393":1,"1395":17,"1396":29,"1398":1,"1400":1,"1401":1,"1402":7,"1406":1,"1408":1,"1415":16,"1416":5,"1417":6,"1424":1,"1425":1,"1427":5,"1429":1,"1431":1,"1436":72,"1438":20,"1441":3,"1442":2,"1443":1,"1445":2,"1449":1,"1453":1,"1454":1,"1455":6,"1457":2,"1459":1,"1460":1,"1467":9,"1482":1,"1486":1,"1490":2,"1496":21,"1497":2,"1498":1,"1500":1,"1526":2,"1534":1,"1548":1,"1577":1,"1591":1,"1631":1,"1635":1,"1654":1,"1656":1,"1670":1,"1684":1,"1701":1,"1721":1,"1722":1,"1727":2,"1729":2,"1732":1,"1750":2,"1800":1,"1821":1,"1839":1,"1840":1,"1843":1,"1844":2,"1845":1,"1851":1,"1872":1,"1947":1,"1988":3,"2069":1,"2116":1,"2144":1,"2153":1}}],["sacrificing",{"3":{"2220":1}}],["sacrificed",{"3":{"1286":1}}],["saas",{"3":{"1940":1}}],["sa1203",{"3":{"1395":1}}],["sa1211",{"2":{"1689":1,"1699":1,"2091":1},"3":{"0":1,"490":1,"491":1,"492":1,"493":1,"495":1,"633":2,"1686":1,"1689":1,"1699":1,"1727":1,"2091":1}}],["sa1210",{"2":{"635":1,"1689":1,"2091":1},"3":{"0":1,"490":1,"491":1,"492":1,"493":1,"495":1,"633":2,"635":1,"1689":1,"1727":1,"2091":1}}],["sake",{"3":{"1339":1,"2158":1}}],["sa",{"3":{"1339":2,"1441":1}}],["sails",{"3":{"1999":1}}],["sail",{"3":{"1324":1}}],["said",{"3":{"0":1,"22":1,"27":1,"43":1,"62":1,"130":1,"138":1,"160":1,"200":1,"220":1,"256":1,"306":1,"353":1,"374":1,"408":1,"425":2,"426":1,"443":1,"624":1,"642":1,"683":1,"720":1,"761":1,"794":1,"837":1,"958":1,"1017":2,"1052":1,"1054":1,"1055":1,"1062":1,"1091":1,"1259":1,"1270":1,"1300":1,"1323":2,"1324":3,"1359":2,"1396":3,"1417":1,"1427":1,"1431":1,"1496":1,"1993":2}}],["safari",{"3":{"1324":5,"1417":1,"1436":2,"1606":1,"1716":1,"1740":1}}],["safer",{"3":{"584":1,"1286":1,"1301":1,"1339":1,"1436":1,"1999":1}}],["safedomaineventhandlertests",{"3":{"536":1,"1199":1,"1207":5,"1259":2,"1438":1,"2167":2}}],["safedomaineventhandler",{"2":{"534":1,"1252":1,"1665":1,"2167":1},"3":{"534":1,"536":2,"537":1,"1199":2,"1203":1,"1207":2,"1252":5,"1259":25,"1396":1,"1438":1,"1496":2,"1665":1,"2167":3}}],["safely",{"3":{"350":1,"508":1,"829":2,"883":1,"1237":1,"1259":1,"1271":1,"1286":4,"1300":3,"1311":1,"1312":1,"1324":3,"1358":1,"1359":1,"1395":1,"1396":3,"1402":2,"1415":1,"1417":3,"1427":1,"1436":1,"1438":1,"1472":1,"1563":1,"1569":1,"1646":1,"1665":1,"1840":1,"1977":1,"2187":1}}],["safeguards",{"3":{"1922":2}}],["safeguard",{"3":{"182":1,"1359":1,"1436":3,"1489":1,"1526":1}}],["safety",{"0":{"1254":1,"1561":1,"1934":1},"3":{"0":1,"6":1,"19":1,"158":1,"160":1,"209":1,"255":1,"330":1,"335":1,"382":1,"435":1,"472":1,"501":1,"522":1,"523":1,"524":1,"564":1,"800":1,"801":1,"803":1,"882":1,"1068":1,"1116":1,"1132":1,"1135":1,"1216":1,"1229":1,"1237":2,"1243":1,"1247":1,"1255":1,"1257":1,"1259":7,"1263":2,"1270":5,"1271":6,"1273":1,"1286":3,"1300":4,"1302":1,"1309":4,"1311":4,"1323":2,"1324":30,"1339":2,"1350":3,"1353":1,"1359":54,"1380":1,"1384":2,"1395":45,"1396":16,"1402":10,"1414":1,"1415":8,"1417":3,"1427":2,"1436":26,"1438":3,"1455":3,"1458":1,"1467":1,"1499":1,"1508":1,"1526":2,"1530":1,"1532":1,"1535":1,"1577":1,"1586":1,"1591":1,"1595":1,"1597":1,"1652":1,"1671":1,"1796":1,"1805":1,"1817":1,"1888":1,"1941":1,"1949":2,"1952":1,"1959":1,"1971":1,"1978":1,"1987":2,"1990":1,"2167":1,"2203":1,"2204":1}}],["safe",{"1":{"1900":1,"1901":1,"1902":1,"1903":1,"1904":1,"1905":1,"1906":1,"1907":1,"1908":1,"1909":1,"1910":1,"1911":1,"1912":1},"3":{"0":8,"15":1,"20":1,"78":1,"79":1,"109":1,"111":1,"122":1,"145":1,"147":2,"158":1,"187":1,"189":1,"208":1,"245":1,"265":2,"291":1,"302":1,"309":1,"310":1,"335":1,"397":1,"398":1,"402":1,"413":2,"416":1,"443":1,"460":1,"506":1,"507":1,"530":1,"550":1,"556":1,"564":1,"565":1,"607":2,"609":1,"610":1,"681":1,"691":1,"694":1,"700":1,"706":1,"711":1,"743":1,"751":1,"758":1,"767":1,"776":1,"827":1,"832":1,"838":1,"848":1,"861":1,"869":1,"890":1,"926":1,"940":1,"942":1,"946":1,"965":1,"989":1,"1059":1,"1084":1,"1109":1,"1115":2,"1116":1,"1124":1,"1132":1,"1147":1,"1184":1,"1212":2,"1229":3,"1237":4,"1238":1,"1247":3,"1252":1,"1259":15,"1263":1,"1269":3,"1270":12,"1271":2,"1275":1,"1278":1,"1283":1,"1285":1,"1286":30,"1298":1,"1299":1,"1300":26,"1301":4,"1304":1,"1309":12,"1310":2,"1311":29,"1312":3,"1320":3,"1322":1,"1323":19,"1324":39,"1333":1,"1334":1,"1337":1,"1339":20,"1344":1,"1346":1,"1349":1,"1350":7,"1355":1,"1358":1,"1359":26,"1364":1,"1369":6,"1380":4,"1395":12,"1396":26,"1402":11,"1415":17,"1416":1,"1417":28,"1421":1,"1427":1,"1429":2,"1436":27,"1453":3,"1455":7,"1457":1,"1458":2,"1463":1,"1467":2,"1472":1,"1475":2,"1477":1,"1478":2,"1484":1,"1488":1,"1490":1,"1492":2,"1496":1,"1545":1,"1554":1,"1561":1,"1577":1,"1590":1,"1591":1,"1611":1,"1626":1,"1631":1,"1660":1,"1661":1,"1668":1,"1672":2,"1686":1,"1708":1,"1729":1,"1734":1,"1748":1,"1781":1,"1790":1,"1821":1,"1835":1,"1837":1,"1842":1,"1844":1,"1873":1,"1889":2,"1899":1,"1900":1,"1902":1,"1905":1,"1906":1,"1907":2,"1910":1,"1911":1,"1912":3,"1920":1,"1923":1,"1935":1,"1948":1,"1950":1,"1958":1,"1963":1,"1968":1,"1972":2,"2001":1,"2012":1,"2015":1,"2022":1,"2030":1,"2038":1,"2049":1,"2056":1,"2064":1,"2071":1,"2089":1,"2120":1,"2121":1,"2125":2,"2128":1,"2140":1,"2150":1,"2164":1,"2190":1,"2198":1,"2201":1,"2210":3,"2234":1}}],["saturation",{"3":{"1324":1}}],["saturate",{"3":{"1311":1}}],["saturated",{"3":{"1124":1,"1256":1,"1259":2,"1286":2,"1339":2,"1380":1,"1444":1}}],["satellites",{"3":{"1436":2}}],["satellite",{"3":{"265":2,"269":1,"1324":1,"1380":2,"1402":1,"1436":1}}],["sat",{"3":{"72":1,"179":1,"390":1,"424":1,"689":1,"1174":1,"1324":5,"1460":1,"1467":2,"1475":1,"1500":1}}],["satisfaction",{"3":{"1396":1}}],["satisfiable",{"3":{"593":1,"1309":2,"1323":1,"1415":1}}],["satisfiesloadbearinginvariants",{"3":{"1436":2}}],["satisfies",{"3":{"160":1,"470":1,"799":1,"1018":1,"1049":1,"1089":1,"1091":1,"1229":1,"1237":1,"1247":1,"1270":1,"1286":6,"1300":4,"1309":1,"1310":2,"1311":2,"1323":1,"1324":1,"1359":13,"1368":1,"1369":2,"1380":1,"1395":4,"1396":6,"1402":2,"1410":1,"1415":4,"1417":4,"1436":14,"1482":1,"1671":1,"1810":1,"1845":1,"2128":1,"2232":1}}],["satisfied",{"3":{"0":1,"59":2,"130":1,"135":1,"140":1,"166":1,"584":1,"905":1,"926":1,"1050":1,"1059":1,"1237":1,"1247":3,"1265":1,"1270":2,"1286":1,"1293":1,"1300":5,"1309":2,"1315":1,"1320":1,"1323":6,"1324":2,"1350":3,"1359":8,"1380":1,"1396":4,"1415":7,"1416":3,"1417":2,"1431":2,"1436":7,"1478":1,"1488":1,"1534":1,"1577":1,"1662":1,"1772":1,"1790":1,"1863":1,"1882":1,"2170":1,"2181":1,"2199":2}}],["satisfy",{"3":{"109":1,"518":1,"528":1,"1006":1,"1017":1,"1100":1,"1124":1,"1145":1,"1220":1,"1229":1,"1237":3,"1247":1,"1286":3,"1300":4,"1301":2,"1309":1,"1310":1,"1311":1,"1312":2,"1323":6,"1324":7,"1337":1,"1338":1,"1339":3,"1350":3,"1359":8,"1378":1,"1380":2,"1388":1,"1395":1,"1396":2,"1402":1,"1415":4,"1416":1,"1417":1,"1424":1,"1427":1,"1436":14,"1447":1,"1454":1,"1467":1,"1480":1,"1488":1,"1492":1,"1591":1,"1790":1,"1793":1,"1805":1,"1864":1,"1916":1,"1967":1,"2018":1,"2071":1}}],["satisfying",{"3":{"40":1,"803":1,"1300":2,"1310":1,"1350":1,"1396":1,"1416":1,"1417":1,"1436":1,"1438":1}}],["sawerrors",{"3":{"1229":1}}],["sawvalue",{"3":{"1229":2}}],["saw",{"3":{"26":1,"72":1,"236":1,"340":1,"873":1,"876":1,"881":1,"1017":1,"1052":1,"1055":1,"1169":1,"1259":1,"1286":1,"1300":3,"1311":3,"1323":1,"1324":2,"1350":2,"1359":2,"1395":1,"1396":3,"1436":2,"1869":1,"1870":1}}],["sandboxing",{"3":{"2241":1}}],["sandboxed",{"3":{"1526":1}}],["sandbox",{"3":{"1429":1}}],["sandwich",{"3":{"1415":1}}],["santiago",{"3":{"1350":1}}],["sans",{"3":{"1324":1,"2077":1}}],["sane",{"3":{"1228":1,"1229":1,"1300":1,"1324":1,"1339":1,"1396":1,"1676":1}}],["sanctions",{"3":{"913":1,"1396":1,"1591":1}}],["sanctioned",{"3":{"0":1,"260":1,"371":1,"392":1,"642":1,"912":1,"914":1,"996":1,"1229":1,"1237":1,"1247":1,"1286":5,"1380":1,"1416":2,"1417":1,"1436":3,"1455":1,"1806":1,"2234":1}}],["sanitization",{"3":{"1286":1,"1323":1,"1563":1}}],["sanitizes",{"3":{"1286":1,"1320":1,"1324":2,"1359":1}}],["sanitize",{"3":{"1270":2,"1323":1,"1324":4}}],["sanitized",{"3":{"1116":2,"1286":1,"1300":2,"1323":1,"1324":3,"1344":1,"1350":2,"1357":1,"1359":2,"1526":1,"1563":1,"1572":1,"1577":1,"1631":1,"1669":1}}],["sanitizer",{"3":{"1114":1,"1324":2,"2234":1}}],["sanitizefilename",{"2":{"443":1,"1116":1},"3":{"0":1,"443":1,"1116":1,"1286":1}}],["sanity",{"3":{"846":1,"1436":2,"1479":1,"1489":1}}],["saying",{"3":{"201":1,"350":1,"541":1,"576":1,"673":1,"1140":1,"1161":1,"1259":1,"1270":1,"1286":3,"1309":1,"1323":1,"1324":2,"1339":3,"1359":3,"1389":1,"1395":1,"1396":5,"1415":1,"1427":1,"1436":3,"1442":1,"1596":1,"1646":1,"1685":1,"1860":1,"1887":1,"1908":1,"1909":1,"1961":1,"1970":1,"1977":1,"2001":1,"2164":1,"2166":1}}],["say",{"0":{"1423":1,"1947":1},"3":{"0":1,"73":1,"109":1,"122":1,"123":1,"136":1,"171":1,"185":1,"220":1,"231":1,"260":1,"261":1,"284":1,"300":1,"353":1,"390":1,"444":1,"477":1,"564":1,"578":1,"590":1,"610":1,"619":1,"626":2,"627":1,"638":1,"660":1,"676":1,"684":2,"689":1,"702":1,"703":1,"741":1,"743":1,"756":1,"776":1,"790":1,"804":1,"864":1,"871":1,"899":1,"904":1,"905":1,"907":1,"921":1,"960":1,"988":1,"1062":1,"1067":1,"1079":1,"1082":1,"1085":1,"1107":1,"1216":1,"1231":1,"1233":1,"1237":2,"1247":1,"1253":1,"1259":2,"1270":1,"1271":1,"1280":1,"1286":11,"1293":1,"1297":1,"1300":8,"1309":1,"1311":10,"1316":1,"1323":9,"1324":8,"1339":1,"1350":2,"1359":17,"1366":1,"1369":2,"1395":5,"1396":10,"1402":2,"1415":9,"1417":2,"1418":1,"1423":1,"1431":1,"1436":16,"1438":1,"1443":1,"1474":1,"1486":1,"1488":1,"1489":1,"1553":1,"1591":2,"1596":1,"1638":1,"1651":1,"1685":1,"1686":1,"1689":1,"1698":1,"1702":1,"1748":1,"1749":1,"1765":1,"1799":1,"1803":1,"1805":1,"1810":1,"1823":1,"1842":1,"1848":1,"1853":1,"1854":1,"1857":1,"1862":1,"1902":1,"1904":1,"1908":1,"1909":1,"1911":1,"1929":1,"1996":1,"2008":1,"2014":1,"2058":1,"2065":1,"2088":1,"2089":1,"2139":1,"2141":1,"2158":1,"2160":1,"2165":1,"2177":1,"2182":1,"2205":1}}],["saysnothingaboutthecanonicaldeclaration",{"3":{"1436":3}}],["says",{"3":{"0":4,"13":1,"27":2,"74":1,"77":1,"135":2,"137":1,"138":1,"139":1,"142":1,"149":1,"170":1,"171":1,"187":1,"189":1,"200":3,"201":2,"254":1,"256":2,"259":1,"265":1,"317":1,"342":1,"343":1,"353":1,"391":1,"459":1,"461":1,"478":1,"490":1,"535":1,"537":1,"539":1,"540":1,"541":1,"549":1,"550":1,"556":1,"563":1,"564":1,"601":1,"611":1,"624":1,"625":1,"633":3,"636":1,"657":1,"659":1,"660":2,"665":2,"674":1,"690":1,"692":1,"703":1,"725":1,"740":1,"742":1,"743":1,"749":2,"751":1,"761":1,"765":1,"781":1,"784":1,"793":1,"798":1,"827":1,"832":1,"833":2,"861":1,"876":1,"880":3,"890":2,"891":1,"893":1,"897":2,"904":1,"907":1,"927":1,"932":1,"946":1,"955":1,"958":1,"964":1,"966":1,"967":1,"979":1,"988":1,"996":1,"997":1,"1014":1,"1018":3,"1026":1,"1037":1,"1050":2,"1051":1,"1058":1,"1067":1,"1074":1,"1079":1,"1085":1,"1091":1,"1093":1,"1099":1,"1119":1,"1124":1,"1133":1,"1167":3,"1176":2,"1190":1,"1212":1,"1227":1,"1229":4,"1237":6,"1241":1,"1247":6,"1248":1,"1259":12,"1262":1,"1266":1,"1269":1,"1270":17,"1271":1,"1276":1,"1277":1,"1286":31,"1290":1,"1291":1,"1297":1,"1300":26,"1301":2,"1305":1,"1309":4,"1310":2,"1311":26,"1315":1,"1316":1,"1318":1,"1320":1,"1323":19,"1324":30,"1337":1,"1338":1,"1339":20,"1342":2,"1346":1,"1347":1,"1348":1,"1350":10,"1354":1,"1355":1,"1356":1,"1357":1,"1359":57,"1367":1,"1369":3,"1380":4,"1393":1,"1395":22,"1396":47,"1400":1,"1402":11,"1410":1,"1413":1,"1414":1,"1415":26,"1416":1,"1417":9,"1419":1,"1430":2,"1433":1,"1436":45,"1438":2,"1441":1,"1442":1,"1445":2,"1453":3,"1455":4,"1459":1,"1460":1,"1462":1,"1467":8,"1470":1,"1473":1,"1474":2,"1476":2,"1481":1,"1488":1,"1489":2,"1490":1,"1492":2,"1496":2,"1500":1,"1553":1,"1596":1,"1639":1,"1646":1,"1661":1,"1685":3,"1702":1,"1721":1,"1723":1,"1727":1,"1729":1,"1765":1,"1769":1,"1794":1,"1799":1,"1815":2,"1831":1,"1835":1,"1836":1,"1843":1,"1880":2,"1887":1,"1892":1,"1896":1,"1906":1,"1915":1,"1944":1,"1945":1,"1960":1,"1963":1,"1965":2,"1982":1,"1993":2,"1995":2,"2001":2,"2002":2,"2003":1,"2013":2,"2030":1,"2031":1,"2034":1,"2040":1,"2044":2,"2045":1,"2046":1,"2048":1,"2057":1,"2066":1,"2068":1,"2107":1,"2126":2,"2128":1,"2133":1,"2153":1,"2158":1,"2160":2,"2164":1,"2166":1,"2167":2,"2169":1,"2170":2,"2174":1,"2175":1,"2177":1,"2179":1,"2181":1,"2198":1}}],["sast",{"3":{"2221":1,"2222":1}}],["sas",{"3":{"0":2,"441":1,"597":1,"599":1,"602":1,"638":2,"643":2,"1446":1,"1467":7,"1589":1,"1591":1,"1595":1,"1596":2,"1597":1,"2129":1}}],["savings",{"3":{"1026":1,"1455":1,"1459":1,"1749":2,"1750":1,"1764":2,"1767":2,"1769":1}}],["savingchangesasync",{"3":{"715":1,"1286":5}}],["savingchanges",{"2":{"21":1,"1251":1},"3":{"21":1,"715":1,"1251":1,"1274":3,"1286":11}}],["saving",{"3":{"0":1,"43":1,"197":1,"342":1,"391":1,"534":1,"709":1,"827":1,"1026":2,"1229":1,"1237":1,"1269":1,"1270":4,"1286":10,"1300":1,"1323":3,"1324":1,"1339":1,"1359":2,"1395":1,"1396":1,"1399":1,"1401":1,"1402":19,"1417":1,"1438":1,"1484":1,"1526":1,"1749":1,"2025":1,"2222":1}}],["savebutton",{"3":{"1436":1}}],["savebehindaninterface",{"3":{"1436":2}}],["saveaddressbutton",{"3":{"1436":1}}],["saveasync",{"3":{"1324":4}}],["savenamebutton",{"3":{"1436":1}}],["saveupvoteasync",{"3":{"1402":2}}],["saver",{"3":{"1396":4,"1417":5}}],["saveresult",{"3":{"1324":2,"1395":27}}],["savepasswordasync",{"3":{"1415":1}}],["savepagefilters",{"3":{"1383":2,"1395":10}}],["saveprofileasync",{"3":{"1395":1}}],["savetitleasync",{"3":{"1395":2}}],["savetoken",{"3":{"1312":1}}],["savetokens",{"3":{"1311":2}}],["savefilters",{"3":{"1324":3,"1383":2,"1395":8,"1396":1}}],["saveexplicitkeygroupsasync",{"3":{"1286":3}}],["saveerror",{"3":{"265":1,"1324":1}}],["savewithexplicitkeyinsertasync",{"2":{"1278":1},"3":{"1278":1,"1286":2}}],["savecount",{"3":{"1436":3}}],["savechangedetectiontests",{"3":{"1199":1,"1207":5,"1286":2,"1438":2}}],["savechangesinterceptor",{"2":{"1839":1},"3":{"0":1,"715":1,"1212":3,"1286":2,"1839":1}}],["savechanges",{"0":{"1274":1},"2":{"124":1,"365":1,"809":1,"1701":1,"1844":1,"1846":1,"2093":1,"2094":1},"3":{"0":1,"124":1,"359":1,"365":1,"540":1,"715":1,"809":1,"1212":1,"1213":1,"1237":2,"1252":1,"1259":6,"1273":1,"1286":11,"1369":2,"1396":1,"1436":5,"1438":1,"1453":1,"1487":1,"1490":1,"1498":1,"1585":1,"1671":1,"1701":1,"1835":1,"1838":1,"1839":1,"1844":1,"1846":1,"2093":1,"2094":1,"2144":1}}],["savechangesasync",{"2":{"17":1,"27":1,"340":1,"444":1,"465":1,"466":1,"518":1,"522":1,"523":2,"524":1,"539":1,"714":1,"781":1,"1355":1,"1358":1,"1363":1,"1823":1,"1838":2,"1844":1,"1869":1,"1910":1,"1934":1,"2113":1},"3":{"0":1,"17":1,"27":1,"201":1,"340":1,"444":1,"459":1,"465":1,"466":1,"499":1,"518":1,"522":2,"523":4,"524":1,"539":1,"540":1,"714":1,"781":1,"897":2,"905":1,"1100":2,"1212":1,"1237":3,"1258":1,"1259":13,"1270":3,"1272":1,"1273":1,"1286":23,"1300":2,"1309":3,"1323":10,"1345":1,"1349":1,"1350":12,"1355":1,"1358":1,"1359":43,"1363":1,"1369":1,"1395":19,"1396":5,"1402":7,"1410":1,"1415":10,"1436":21,"1488":2,"1489":1,"1526":2,"1651":1,"1749":1,"1765":1,"1810":1,"1823":1,"1838":2,"1844":1,"1869":1,"1910":1,"1934":1,"2113":1}}],["savecurrentstate",{"3":{"881":1,"1324":3}}],["savedsortdescending",{"3":{"1324":1}}],["savedsortcolumn",{"3":{"1324":1}}],["savedpagesize",{"3":{"1324":2}}],["savedpage",{"3":{"1324":1}}],["savedtoken",{"3":{"1312":1}}],["savedchangesasync",{"3":{"1274":1,"1286":3}}],["savedchanges",{"3":{"1252":1,"1274":2,"1286":7}}],["saved",{"3":{"0":2,"120":2,"536":1,"538":1,"540":1,"609":1,"627":1,"725":1,"914":2,"926":1,"991":1,"1024":1,"1026":2,"1093":2,"1247":1,"1259":3,"1270":2,"1274":1,"1275":2,"1278":1,"1286":12,"1300":2,"1306":1,"1309":2,"1311":2,"1312":4,"1318":1,"1322":1,"1323":5,"1324":2,"1350":1,"1355":1,"1359":9,"1380":4,"1383":4,"1391":1,"1395":15,"1396":13,"1399":1,"1402":3,"1406":1,"1415":6,"1436":2,"1438":1,"1456":1,"1467":2,"1479":1,"1480":1,"1591":1,"1749":2,"1750":1,"1765":1,"1768":1,"1776":2,"1835":1,"1933":2,"1951":1,"1977":1,"2068":1,"2129":1,"2160":1,"2166":2,"2187":1,"2194":1}}],["save",{"2":{"268":1},"3":{"0":6,"17":2,"18":1,"20":2,"21":2,"26":2,"27":2,"39":1,"109":2,"120":1,"166":1,"195":1,"201":4,"225":1,"265":1,"268":1,"340":2,"342":1,"344":1,"388":1,"391":1,"435":1,"436":1,"516":2,"518":4,"522":2,"523":5,"524":3,"534":1,"536":1,"538":4,"539":4,"698":1,"715":1,"716":1,"717":1,"857":1,"897":1,"905":2,"908":2,"920":1,"921":1,"923":2,"926":6,"931":1,"988":2,"991":1,"1033":1,"1035":1,"1100":6,"1102":1,"1116":1,"1140":1,"1168":1,"1175":1,"1212":2,"1231":2,"1232":2,"1233":2,"1237":10,"1251":4,"1252":6,"1253":3,"1257":2,"1258":1,"1259":32,"1260":1,"1265":7,"1270":31,"1272":1,"1273":3,"1274":3,"1276":3,"1277":3,"1278":2,"1280":1,"1286":146,"1289":2,"1290":3,"1293":1,"1294":1,"1300":11,"1304":4,"1309":7,"1311":4,"1316":1,"1318":2,"1322":1,"1323":32,"1324":8,"1344":1,"1345":1,"1349":1,"1350":10,"1352":1,"1355":1,"1357":4,"1358":3,"1359":119,"1369":4,"1379":1,"1390":1,"1395":46,"1396":19,"1398":1,"1399":3,"1402":17,"1406":2,"1411":2,"1415":31,"1417":3,"1432":1,"1436":43,"1438":10,"1453":1,"1456":1,"1508":1,"1543":1,"1638":2,"1664":2,"1665":1,"1666":2,"1672":1,"1685":2,"1720":1,"1742":1,"1749":1,"1765":1,"1818":1,"1835":2,"1837":1,"1840":1,"1846":1,"1849":1,"1852":1,"1857":1,"1869":3,"1871":1,"1872":2,"1877":5,"1906":1,"1910":1,"1933":5,"1934":2,"1940":2,"1946":1,"1951":1,"1973":1,"2060":1,"2061":1,"2064":1,"2093":1,"2129":2,"2163":1,"2165":3,"2166":2,"2167":5,"2169":2,"2170":2,"2171":1,"2184":1,"2187":3,"2232":2,"2234":1}}],["savestate",{"3":{"1324":1}}],["savestagedasync",{"3":{"201":1,"1259":1}}],["saveskipped",{"3":{"926":1,"1270":3}}],["saves",{"3":{"0":2,"24":1,"27":2,"39":1,"195":1,"201":1,"499":1,"518":2,"522":3,"523":1,"524":1,"536":2,"540":2,"792":1,"897":1,"908":1,"921":1,"986":1,"988":3,"1042":1,"1045":1,"1061":1,"1100":1,"1115":1,"1143":1,"1237":2,"1258":1,"1259":4,"1260":1,"1265":2,"1270":3,"1286":18,"1289":1,"1300":7,"1309":3,"1318":1,"1323":4,"1324":3,"1346":2,"1352":1,"1355":1,"1359":17,"1369":3,"1373":1,"1395":4,"1396":7,"1402":1,"1411":1,"1414":1,"1415":7,"1431":1,"1436":12,"1455":1,"1472":1,"1476":1,"1479":1,"1638":1,"1840":1,"1845":1,"1869":2,"1911":1,"1933":2,"1982":1,"2064":1,"2071":1,"2093":1,"2094":1,"2166":1,"2187":1}}],["sagastatemachineinstance",{"2":{"809":1,"813":1},"3":{"809":1,"813":1}}],["sagas",{"3":{"0":3,"536":1,"926":1,"1011":1,"1012":1,"1577":1}}],["saga",{"1":{"533":1,"534":1,"535":1,"536":1,"537":1,"538":1,"539":1,"540":1,"541":1,"2163":1,"2164":1,"2165":1,"2166":1,"2167":1,"2168":1,"2169":1,"2170":1,"2171":1},"3":{"0":4,"230":1,"533":1,"534":1,"536":9,"537":2,"539":1,"674":1,"809":2,"810":3,"811":2,"812":3,"813":2,"815":2,"896":1,"987":1,"1041":1,"1044":1,"1212":2,"1309":1,"1359":1,"1436":1,"1526":2,"1547":1,"1572":1,"1591":5,"1600":2,"1665":1,"1755":2,"1765":1,"1779":2,"2115":1,"2162":2,"2163":2,"2165":2,"2169":1,"2170":5,"2171":1,"2182":1,"2191":1,"2208":1,"2217":2,"2234":2}}],["salient",{"3":{"1795":1}}],["salvages",{"3":{"1300":1}}],["salvaged",{"3":{"1018":1}}],["saleable",{"3":{"1764":1}}],["sale",{"3":{"539":1,"1025":1,"1027":1,"1028":3,"1742":1,"1750":2,"1769":1,"1773":2}}],["salesrouteauthorizationtests",{"3":{"1436":1,"1591":1}}],["salesintegrationtestfixture",{"3":{"1436":1}}],["salescrossservicefactory",{"3":{"1436":1}}],["salestestwebapplicationfactory",{"3":{"1436":1}}],["salesfakeusecase",{"3":{"1199":2,"1207":2}}],["salesfakeorder",{"3":{"1199":2,"1207":2}}],["salesfakeaggregate",{"3":{"1199":2,"1207":2}}],["salesfeatures",{"2":{"2138":1},"3":{"300":1,"1270":1,"2138":2}}],["salesuimodule",{"3":{"649":1,"1324":4}}],["salesuserdataexportsection",{"2":{"583":1},"3":{"585":1,"725":1,"1323":4}}],["salesmoduletests",{"3":{"1436":2}}],["salesmoduleseeder",{"3":{"1323":2}}],["salesmoduledbseeder",{"3":{"1286":2}}],["salesmodule",{"3":{"539":1,"540":2,"583":2,"584":1,"674":1,"676":1,"1323":1}}],["salesapp",{"2":{"538":1},"3":{"538":1}}],["salespermissiongrants",{"3":{"186":1}}],["salespermissions",{"2":{"318":1,"324":1,"1264":1,"1996":1},"3":{"186":1,"318":1,"324":1,"1264":1,"1996":1}}],["salesservice",{"2":{"96":1},"3":{"96":1}}],["sales",{"0":{"96":1,"1749":1},"1":{"1023":1,"1024":1,"1025":1,"1026":1,"1027":1,"1028":1,"1029":1,"1030":1},"2":{"62":1,"96":2,"493":1,"534":1,"794":1,"1588":1,"1748":1,"1751":1,"1766":1,"2169":1},"3":{"0":11,"24":1,"62":2,"72":6,"73":4,"80":3,"91":8,"94":1,"95":4,"96":12,"97":2,"98":1,"99":1,"100":1,"101":3,"102":1,"104":3,"117":2,"128":2,"165":1,"186":2,"195":4,"230":7,"235":2,"238":1,"243":3,"245":2,"250":1,"251":1,"252":1,"254":1,"257":1,"260":4,"261":1,"291":1,"295":1,"318":6,"324":1,"401":1,"448":1,"452":3,"453":1,"454":1,"459":1,"475":4,"476":4,"477":4,"493":1,"534":1,"535":2,"536":3,"539":4,"540":1,"545":3,"554":1,"556":2,"564":3,"572":2,"583":11,"584":1,"585":4,"586":1,"599":2,"602":1,"640":2,"643":1,"649":3,"657":2,"674":7,"676":2,"715":1,"725":1,"728":1,"743":2,"749":2,"752":1,"757":1,"774":3,"780":2,"782":9,"789":5,"790":20,"792":1,"793":13,"794":9,"795":1,"798":1,"804":1,"809":3,"813":4,"837":1,"838":4,"841":1,"868":1,"869":1,"870":1,"873":2,"876":3,"877":1,"881":3,"897":2,"900":2,"914":1,"926":6,"954":4,"988":4,"1023":1,"1025":9,"1026":11,"1027":2,"1029":2,"1054":1,"1083":1,"1085":1,"1161":1,"1207":6,"1212":3,"1233":1,"1237":10,"1259":1,"1264":4,"1265":1,"1270":14,"1286":18,"1300":21,"1301":1,"1309":4,"1310":4,"1311":23,"1312":4,"1323":10,"1324":16,"1339":13,"1436":30,"1486":1,"1496":2,"1541":1,"1588":2,"1589":1,"1591":21,"1596":3,"1600":6,"1631":1,"1742":1,"1746":17,"1748":1,"1749":4,"1751":14,"1752":1,"1757":1,"1761":1,"1763":1,"1764":16,"1765":40,"1766":1,"1769":9,"1770":3,"1771":1,"1772":5,"1775":2,"1785":1,"1839":1,"1874":1,"1875":1,"1963":1,"1995":1,"1996":1,"1998":1,"2026":1,"2089":1,"2112":1,"2113":1,"2115":1,"2133":1,"2138":1,"2140":1,"2163":1,"2168":2,"2169":3,"2170":1,"2189":1,"2191":1,"2222":1,"2230":1,"2234":1}}],["salted",{"0":{"1902":1},"3":{"309":1,"905":1,"1300":1}}],["saltsize",{"2":{"284":1,"944":1,"948":1},"3":{"284":1,"310":1,"944":1,"946":3,"948":1,"1300":5}}],["salt",{"3":{"0":7,"284":2,"309":1,"310":6,"311":2,"312":5,"314":2,"350":1,"352":1,"906":1,"944":1,"945":4,"946":10,"947":1,"948":3,"1212":3,"1286":1,"1291":1,"1292":2,"1300":29,"1323":3,"1410":1,"1415":8,"1436":2,"1577":1,"1630":1,"1641":4,"1667":1,"1673":1,"1747":1,"1765":2,"1900":2,"1902":7,"1905":3,"1977":2,"1978":1,"2069":1}}],["sample=",{"3":{"1436":1}}],["sampleid",{"3":{"1436":1}}],["sampleitem",{"3":{"1199":4,"1207":1,"1496":1}}],["samplev1tov2upcaster",{"3":{"1199":2,"1207":1}}],["samplemodel",{"3":{"1199":2,"1207":1}}],["samplegriddata",{"3":{"1199":1,"1207":1,"1436":4}}],["samplegridrow",{"3":{"1199":2,"1207":3,"1436":9}}],["samplegatewayhardeningtests",{"3":{"1199":1,"1207":1,"1436":1}}],["samplegatewayentrypoint",{"3":{"1199":2,"1207":1}}],["sampleapphostcollection",{"2":{"1430":1},"3":{"1199":2,"1207":2,"1430":2,"1487":1}}],["sampleapphostfixture",{"3":{"1069":1,"1199":3,"1207":2,"1430":2,"1487":1}}],["sampleapphosttests",{"3":{"1067":1,"1199":1,"1207":2,"1430":2,"1487":1}}],["sampler",{"3":{"398":1,"402":1,"1339":2,"1575":1,"1577":2,"1585":1,"1678":1}}],["sampleservice",{"3":{"1199":2,"1207":1}}],["samples",{"0":{"1679":1},"3":{"397":1,"599":2,"601":1,"781":1,"963":1,"1300":1,"1350":1,"1431":1,"1436":8,"1438":1,"1443":1,"1467":3,"1470":1,"1496":3,"1575":2,"1577":10,"1581":1,"1582":2,"1583":1,"1585":1,"1586":3,"1648":1,"1670":1,"1671":1,"1677":1,"2111":1,"2158":1}}],["sample",{"0":{"1364":1},"2":{"1453":1},"3":{"0":5,"76":1,"80":2,"181":1,"295":1,"397":1,"399":1,"405":1,"543":1,"550":1,"554":1,"556":1,"597":1,"599":2,"604":2,"718":1,"749":1,"780":1,"782":1,"861":8,"862":2,"863":2,"905":1,"913":1,"917":1,"964":1,"1050":1,"1067":8,"1069":2,"1090":1,"1229":1,"1237":2,"1264":1,"1270":2,"1286":1,"1311":1,"1323":1,"1350":3,"1359":1,"1364":6,"1369":11,"1380":5,"1415":1,"1431":1,"1436":31,"1437":1,"1438":1,"1441":1,"1443":1,"1446":1,"1453":3,"1467":5,"1486":2,"1487":1,"1488":1,"1490":1,"1496":1,"1526":1,"1575":3,"1576":1,"1577":10,"1581":1,"1582":3,"1583":2,"1586":1,"1602":1,"1654":1,"1661":1,"1673":1,"1674":2,"1677":1,"1683":1,"1685":2,"1686":2,"1687":1,"1688":2,"1689":3,"1690":1,"1697":2,"1717":1,"1718":1,"1719":1,"1727":6,"1728":1,"1729":1,"1800":1,"1815":1,"1891":1,"2064":1,"2081":1,"2112":1,"2158":1,"2161":1,"2162":2}}],["sampledeploymentobservabilitytests",{"2":{"1431":1},"3":{"1199":1,"1207":2,"1431":4,"1436":7,"1467":1,"1496":1,"1577":2,"1583":1,"1586":2}}],["sampled",{"3":{"0":1,"135":1,"397":1,"398":2,"399":1,"861":1,"1333":2,"1339":3,"1443":1,"1446":1,"1467":3,"1496":2,"1677":1,"2011":2,"2158":1,"2159":1,"2161":1}}],["samplingduration",{"3":{"819":1,"1339":3}}],["sampling",{"2":{"1330":1},"3":{"0":4,"68":1,"70":1,"71":1,"100":1,"395":1,"397":1,"398":2,"399":4,"402":1,"406":1,"914":1,"916":1,"918":1,"1212":1,"1259":1,"1312":1,"1330":2,"1333":2,"1339":7,"1438":1,"1443":3,"1467":3,"1469":1,"1568":1,"1591":1,"1677":1,"1678":1,"2007":1,"2011":1,"2031":2,"2033":1,"2038":1,"2158":1,"2161":2,"2162":1,"2234":1}}],["sameevent",{"3":{"1396":1}}],["samesponsor",{"3":{"1396":1}}],["samesession",{"3":{"1396":1}}],["samesitemode",{"3":{"1300":4,"1324":2}}],["samesite",{"2":{"1187":1,"1969":1,"1971":1,"1972":1},"3":{"1184":3,"1185":1,"1187":1,"1300":21,"1311":1,"1324":3,"1667":1,"1968":2,"1969":3,"1971":1,"1972":1}}],["samesite=none",{"3":{"1311":1}}],["samesite=strict",{"3":{"0":1,"1324":1,"1641":2}}],["samesite=lax",{"3":{"0":1,"207":3,"209":1,"350":1,"1187":1,"1298":2,"1311":1,"1324":2,"1534":2,"1975":1,"2085":1}}],["sameoriginproxyendpoint",{"3":{"1324":1}}],["sameoriginproxyclienttests",{"3":{"1199":1,"1207":3,"1324":4,"1438":1}}],["sameoriginproxyinvoker",{"3":{"1199":4,"1203":1,"1207":2,"1324":7,"1496":1}}],["sameoriginproxytransformer",{"3":{"1184":2,"1199":2,"1203":1,"1207":3,"1300":3,"1324":13}}],["sameoriginproxytokenrefreshertests",{"3":{"1199":1,"1207":2,"1324":2}}],["sameoriginproxytokenrefresher",{"2":{"507":1,"509":1,"1582":1},"3":{"0":1,"507":5,"509":1,"1199":3,"1203":1,"1207":2,"1324":8,"1416":1,"1582":2}}],["sameoriginproxyheaders",{"3":{"1184":2,"1199":6,"1203":1,"1207":2,"1324":12,"1582":1}}],["sameoriginproxy",{"2":{"1324":1},"3":{"1184":8,"1203":15,"1207":54,"1208":2,"1300":11,"1324":47,"1437":1,"1438":2,"1496":1,"1582":1,"2152":1}}],["sameoriginproxyrequesthandler",{"2":{"1184":1},"3":{"1184":2,"1199":1,"1203":1,"1207":2,"1324":13}}],["sameoriginapiproxymarker",{"3":{"1199":4,"1203":1,"1207":1,"1324":5}}],["sameoriginapiproxyhubtests",{"3":{"1184":2,"1199":1,"1207":2,"1438":1}}],["sameoriginapiproxycsrftests",{"3":{"1184":2,"1199":1,"1207":2,"1438":1}}],["sameoriginapiproxyendpoint",{"3":{"1184":5,"1185":1,"1186":3,"1187":1,"1199":4,"1203":1,"1207":2,"1300":7,"1324":20,"1496":2,"1582":1}}],["sameoriginapiproxyendpointextensions",{"3":{"1184":1,"1199":1,"1203":1,"1207":2,"1208":1,"1324":13}}],["sameoriginapiproxy",{"3":{"1184":1,"1324":2,"1582":1}}],["sameoriginapiproxysettingsvalidator",{"3":{"1184":1,"1185":1,"1199":2,"1203":1,"1207":2,"1324":6}}],["sameoriginapiproxysettings",{"3":{"1184":3,"1199":7,"1203":1,"1207":2,"1300":2,"1324":11}}],["sameoriginapiproxyserviceextensions",{"3":{"1184":3,"1186":1,"1199":1,"1203":1,"1207":3,"1208":1,"1300":2,"1324":21,"1582":1,"2152":1}}],["sameoriginapiproxytokentests",{"2":{"1184":1},"3":{"1184":2,"1199":1,"1207":2,"1437":1,"1438":1}}],["sameoriginapiproxyoptintests",{"2":{"1184":1},"3":{"1184":2,"1199":1,"1207":2,"1324":1,"1438":1}}],["sameoriginapiproxyorigintests",{"2":{"1184":1},"3":{"1184":2,"1199":1,"1207":2,"1438":1}}],["sameoriginapiproxyauthflowtests",{"2":{"1184":1},"3":{"1184":2,"1199":1,"1207":2,"1324":1,"1438":1}}],["sameoriginapiproxyrefreshoutcometests",{"2":{"1184":1},"3":{"1184":2,"1199":1,"1207":2,"1438":1}}],["sameoriginapiendpoint",{"2":{"1184":1},"3":{"1184":4,"1324":16,"1438":1}}],["sameness",{"3":{"284":1}}],["same",{"0":{"1225":1,"1228":1,"1293":1,"1295":1,"1317":1,"1825":1,"1842":1,"1910":1,"1976":1,"1983":1,"1990":1,"2047":1,"2075":1},"1":{"712":1,"713":1,"714":1,"715":1,"716":1,"717":1,"718":1,"719":1,"720":1,"721":1,"1181":1,"1182":1,"1183":1,"1184":1,"1185":1,"1186":1,"1187":1,"1188":1,"1189":1,"2072":1,"2073":1,"2074":1,"2075":1,"2076":1,"2077":1,"2078":1,"2079":1,"2080":1,"2081":1,"2082":1},"3":{"0":71,"17":1,"18":1,"20":2,"21":2,"23":1,"24":6,"26":8,"30":2,"31":1,"32":1,"39":1,"41":1,"42":2,"46":1,"53":2,"57":1,"59":2,"61":1,"62":1,"68":1,"69":1,"70":1,"71":1,"72":1,"76":1,"78":1,"79":1,"87":1,"91":1,"92":2,"93":2,"94":1,"95":3,"96":3,"99":3,"100":2,"103":1,"109":9,"110":4,"117":1,"118":1,"120":2,"122":4,"125":3,"126":2,"130":1,"132":1,"133":1,"135":5,"136":5,"139":1,"142":1,"145":4,"146":1,"147":4,"148":1,"150":2,"151":1,"156":1,"157":6,"158":1,"159":1,"160":2,"162":1,"164":1,"165":2,"166":1,"167":1,"173":1,"175":3,"178":1,"180":3,"185":1,"186":2,"188":1,"193":2,"194":1,"195":2,"196":1,"197":3,"200":2,"201":5,"202":10,"207":1,"213":1,"217":1,"218":1,"220":1,"221":1,"225":3,"226":2,"227":1,"230":4,"231":1,"235":3,"236":1,"237":1,"239":1,"242":1,"243":7,"245":3,"247":1,"248":1,"251":1,"255":4,"257":1,"265":9,"266":1,"272":1,"273":2,"274":1,"275":2,"279":1,"282":1,"283":3,"285":2,"290":1,"291":1,"295":6,"300":1,"302":1,"309":1,"310":3,"313":2,"314":1,"318":5,"320":1,"321":1,"325":2,"329":1,"330":1,"331":1,"337":1,"340":6,"341":6,"342":2,"343":1,"344":2,"346":4,"348":1,"349":3,"350":8,"351":1,"352":2,"353":1,"358":1,"359":3,"361":3,"362":1,"365":1,"370":3,"371":1,"373":1,"375":1,"376":1,"380":2,"381":1,"383":1,"386":1,"388":3,"390":1,"391":1,"392":1,"395":1,"396":1,"397":6,"401":4,"402":1,"403":1,"404":3,"406":2,"407":1,"408":1,"409":1,"412":1,"413":3,"414":1,"415":3,"420":1,"422":1,"423":1,"424":2,"427":1,"434":1,"435":1,"440":1,"443":3,"444":1,"446":1,"448":5,"449":1,"450":2,"452":1,"455":1,"458":1,"459":3,"460":1,"461":2,"462":1,"463":2,"464":1,"470":3,"472":1,"473":2,"475":2,"476":1,"477":2,"480":1,"481":1,"482":1,"485":1,"486":1,"487":1,"488":2,"489":2,"490":1,"491":1,"492":2,"493":3,"494":4,"499":4,"500":1,"503":2,"506":2,"507":5,"508":2,"509":2,"513":1,"514":1,"517":3,"519":1,"520":1,"524":2,"526":1,"528":4,"529":2,"530":2,"532":2,"536":8,"537":2,"538":3,"539":7,"543":3,"544":1,"545":4,"546":1,"549":5,"550":1,"551":1,"555":1,"556":8,"557":2,"558":2,"560":2,"564":3,"565":1,"566":2,"572":1,"573":1,"574":2,"575":1,"577":2,"579":1,"582":2,"583":3,"584":2,"585":2,"587":1,"591":5,"592":7,"599":9,"600":1,"601":1,"602":1,"603":1,"604":1,"605":3,"607":1,"609":9,"610":2,"611":4,"613":1,"614":1,"617":2,"618":1,"619":1,"622":1,"624":3,"626":10,"627":1,"628":1,"629":3,"633":3,"635":2,"638":2,"639":1,"640":8,"641":3,"642":4,"644":4,"648":2,"649":2,"650":4,"651":1,"657":6,"658":5,"659":2,"665":1,"667":2,"668":2,"674":13,"675":1,"676":1,"681":1,"682":2,"683":1,"684":1,"686":1,"689":1,"690":6,"691":2,"692":1,"694":1,"698":6,"699":1,"702":2,"707":7,"709":1,"711":1,"712":1,"714":2,"715":3,"716":4,"718":1,"721":1,"724":3,"725":6,"726":4,"729":1,"732":2,"733":2,"734":1,"740":5,"741":7,"742":1,"743":3,"747":1,"748":1,"749":4,"750":3,"751":2,"756":3,"757":1,"758":1,"759":1,"760":1,"761":1,"766":4,"767":1,"770":1,"773":1,"774":3,"776":1,"778":3,"782":7,"783":3,"784":1,"785":1,"786":1,"789":1,"790":3,"794":1,"795":1,"798":1,"799":2,"801":1,"803":2,"804":3,"805":6,"806":1,"809":1,"810":2,"819":1,"821":1,"825":3,"827":12,"829":6,"830":1,"831":4,"832":5,"833":1,"837":3,"838":8,"839":1,"840":1,"846":2,"854":1,"856":1,"859":1,"861":6,"862":1,"863":3,"865":3,"868":3,"869":1,"870":2,"871":1,"872":2,"873":1,"875":1,"876":3,"877":1,"880":1,"881":10,"882":1,"883":1,"885":1,"889":8,"890":4,"891":3,"897":2,"899":1,"901":1,"903":1,"904":2,"905":8,"906":1,"907":3,"910":3,"913":1,"914":3,"916":9,"921":1,"922":3,"923":5,"924":1,"926":5,"930":2,"931":1,"933":4,"935":1,"937":3,"939":2,"941":1,"942":1,"946":3,"948":2,"950":2,"953":1,"954":1,"955":2,"957":1,"958":1,"963":4,"964":1,"965":2,"966":1,"967":1,"968":1,"971":2,"972":3,"976":1,"979":4,"980":3,"981":1,"982":5,"988":3,"992":1,"995":5,"996":3,"997":2,"998":4,"1000":1,"1004":2,"1012":2,"1016":1,"1018":10,"1019":2,"1020":1,"1022":1,"1026":3,"1027":1,"1028":2,"1033":1,"1034":8,"1035":3,"1041":2,"1042":7,"1044":4,"1049":1,"1050":7,"1051":1,"1052":2,"1055":1,"1058":2,"1059":5,"1061":4,"1066":2,"1067":1,"1068":4,"1069":2,"1074":3,"1075":4,"1076":1,"1079":1,"1084":1,"1090":1,"1091":3,"1093":1,"1100":1,"1108":2,"1116":3,"1117":1,"1118":2,"1123":1,"1124":8,"1126":3,"1127":1,"1133":3,"1134":1,"1137":1,"1142":2,"1145":1,"1147":1,"1150":1,"1162":1,"1167":2,"1168":1,"1175":2,"1176":1,"1178":1,"1179":1,"1181":1,"1182":1,"1183":1,"1184":5,"1185":1,"1186":1,"1187":1,"1192":2,"1193":1,"1211":3,"1212":15,"1214":1,"1216":1,"1217":1,"1218":2,"1219":1,"1220":2,"1222":1,"1223":2,"1225":3,"1226":1,"1227":1,"1228":1,"1229":26,"1231":6,"1232":1,"1233":4,"1234":1,"1235":3,"1236":1,"1237":55,"1239":3,"1241":3,"1242":3,"1243":1,"1244":5,"1247":53,"1248":1,"1249":1,"1251":2,"1252":3,"1253":7,"1254":1,"1255":2,"1256":5,"1257":1,"1258":5,"1259":68,"1260":1,"1261":2,"1262":1,"1263":5,"1265":7,"1267":6,"1270":103,"1271":35,"1272":1,"1273":3,"1274":6,"1275":9,"1276":2,"1277":2,"1278":1,"1279":1,"1280":1,"1281":4,"1283":3,"1284":2,"1285":1,"1286":274,"1288":3,"1289":7,"1290":2,"1292":1,"1293":1,"1294":4,"1295":3,"1296":1,"1297":4,"1298":2,"1300":210,"1301":48,"1302":3,"1303":1,"1304":3,"1305":2,"1306":2,"1307":2,"1308":1,"1309":57,"1310":14,"1311":159,"1312":15,"1313":2,"1316":1,"1317":3,"1318":6,"1320":7,"1322":1,"1323":153,"1324":302,"1326":2,"1327":1,"1328":4,"1330":2,"1331":1,"1332":3,"1333":1,"1334":2,"1335":1,"1336":1,"1337":6,"1338":2,"1339":124,"1340":1,"1341":1,"1342":2,"1343":3,"1344":1,"1345":1,"1347":4,"1348":2,"1349":1,"1350":117,"1352":6,"1353":7,"1355":5,"1356":6,"1357":2,"1358":2,"1359":435,"1361":1,"1362":2,"1367":1,"1369":37,"1370":1,"1371":2,"1372":3,"1373":1,"1374":1,"1376":2,"1377":2,"1378":3,"1379":2,"1380":107,"1381":1,"1383":1,"1384":5,"1385":2,"1387":2,"1388":1,"1389":1,"1390":1,"1391":4,"1392":5,"1393":1,"1395":246,"1396":299,"1397":1,"1398":3,"1399":2,"1400":3,"1401":3,"1402":98,"1404":2,"1405":1,"1406":5,"1407":4,"1408":3,"1409":2,"1410":2,"1411":2,"1413":1,"1415":148,"1416":48,"1417":97,"1418":1,"1419":1,"1421":1,"1422":1,"1423":3,"1425":5,"1426":1,"1427":27,"1428":1,"1429":2,"1430":1,"1431":2,"1432":2,"1433":5,"1435":10,"1436":455,"1437":1,"1438":39,"1440":5,"1441":12,"1442":6,"1443":8,"1444":4,"1445":9,"1446":5,"1447":4,"1450":1,"1453":11,"1454":17,"1455":28,"1456":6,"1457":3,"1458":1,"1459":9,"1460":4,"1461":2,"1462":1,"1463":2,"1465":9,"1466":1,"1467":55,"1469":1,"1470":2,"1471":1,"1473":4,"1474":6,"1475":9,"1476":3,"1477":1,"1478":3,"1481":2,"1486":4,"1487":1,"1488":10,"1489":13,"1490":7,"1491":2,"1492":20,"1493":1,"1496":29,"1498":1,"1500":1,"1504":1,"1506":1,"1507":2,"1508":2,"1509":1,"1512":1,"1513":2,"1526":11,"1530":1,"1531":3,"1534":1,"1537":1,"1545":1,"1554":1,"1557":2,"1565":1,"1570":2,"1577":10,"1581":1,"1582":4,"1585":1,"1589":1,"1591":13,"1596":3,"1598":1,"1599":3,"1600":2,"1602":1,"1608":1,"1611":3,"1627":5,"1630":2,"1631":12,"1632":8,"1635":2,"1637":1,"1638":5,"1639":11,"1640":8,"1641":14,"1646":1,"1648":2,"1651":6,"1652":3,"1653":5,"1654":1,"1656":1,"1661":1,"1662":3,"1663":1,"1664":2,"1665":1,"1667":1,"1668":2,"1669":1,"1670":3,"1671":3,"1673":2,"1674":1,"1677":3,"1679":1,"1681":1,"1684":1,"1685":1,"1686":4,"1689":1,"1692":1,"1693":2,"1695":1,"1697":1,"1699":2,"1701":3,"1702":4,"1705":3,"1707":2,"1708":3,"1717":5,"1719":1,"1722":1,"1727":6,"1729":1,"1730":1,"1732":1,"1735":2,"1736":1,"1737":1,"1742":1,"1748":4,"1749":7,"1750":1,"1751":2,"1756":1,"1759":1,"1761":1,"1765":13,"1766":1,"1767":8,"1769":2,"1772":1,"1776":1,"1780":2,"1782":2,"1783":2,"1784":1,"1785":1,"1790":2,"1791":2,"1795":2,"1796":1,"1800":1,"1802":1,"1805":8,"1806":1,"1810":8,"1815":5,"1820":1,"1821":3,"1823":1,"1825":2,"1827":2,"1829":2,"1830":3,"1833":2,"1834":3,"1837":1,"1838":1,"1839":3,"1840":1,"1841":1,"1842":4,"1844":1,"1845":3,"1846":2,"1847":1,"1848":1,"1849":3,"1850":1,"1851":2,"1853":4,"1854":1,"1856":1,"1858":1,"1861":2,"1862":1,"1866":1,"1868":1,"1869":4,"1870":4,"1872":2,"1873":2,"1874":4,"1875":3,"1876":3,"1877":2,"1878":1,"1883":2,"1884":2,"1888":1,"1889":2,"1891":1,"1893":3,"1897":1,"1899":3,"1902":2,"1903":1,"1905":1,"1906":4,"1907":1,"1908":5,"1909":7,"1910":3,"1911":2,"1912":5,"1914":1,"1915":1,"1916":3,"1918":2,"1919":1,"1920":3,"1922":1,"1923":4,"1924":2,"1925":1,"1926":2,"1927":8,"1928":3,"1929":2,"1930":2,"1933":1,"1934":4,"1935":2,"1936":1,"1941":1,"1942":1,"1943":2,"1944":2,"1945":2,"1947":2,"1948":8,"1951":2,"1952":1,"1953":2,"1954":1,"1955":2,"1956":1,"1960":1,"1962":5,"1963":1,"1964":1,"1968":4,"1969":1,"1971":1,"1972":3,"1974":2,"1975":1,"1976":2,"1977":1,"1978":1,"1980":1,"1981":2,"1982":3,"1983":4,"1984":4,"1987":1,"1988":5,"1989":2,"1992":1,"1993":1,"1994":1,"1995":5,"1996":11,"1997":1,"1998":1,"2000":1,"2001":4,"2002":4,"2003":1,"2008":1,"2009":2,"2010":1,"2011":3,"2012":1,"2013":1,"2014":1,"2015":1,"2018":1,"2019":1,"2021":3,"2024":1,"2025":1,"2026":1,"2027":2,"2029":2,"2030":2,"2031":3,"2032":2,"2033":2,"2035":1,"2037":1,"2039":1,"2042":1,"2043":2,"2044":4,"2045":5,"2046":1,"2047":3,"2048":6,"2049":1,"2050":2,"2054":1,"2056":3,"2057":1,"2058":1,"2060":1,"2062":3,"2063":1,"2064":1,"2066":1,"2067":1,"2068":1,"2069":2,"2071":1,"2072":3,"2073":1,"2075":1,"2076":2,"2077":3,"2079":2,"2080":2,"2082":2,"2083":7,"2084":2,"2085":6,"2086":4,"2088":3,"2091":3,"2093":1,"2094":1,"2097":1,"2102":2,"2103":1,"2105":1,"2107":1,"2109":1,"2112":1,"2113":9,"2114":2,"2115":4,"2117":5,"2118":2,"2119":1,"2120":2,"2122":2,"2124":2,"2125":1,"2126":1,"2127":1,"2128":4,"2133":6,"2134":2,"2136":3,"2137":1,"2139":1,"2140":2,"2141":1,"2143":1,"2144":2,"2146":3,"2148":1,"2149":1,"2151":1,"2152":3,"2153":2,"2156":3,"2157":3,"2158":6,"2159":5,"2160":9,"2161":1,"2162":1,"2163":2,"2166":4,"2168":2,"2169":7,"2170":2,"2171":4,"2172":1,"2174":3,"2176":1,"2178":1,"2179":3,"2183":1,"2184":1,"2185":1,"2186":1,"2187":1,"2188":3,"2190":1,"2191":2,"2192":5,"2194":5,"2195":3,"2198":3,"2200":1,"2201":1,"2204":6,"2212":1,"2231":1,"2232":3,"2234":8,"2242":2,"2243":1}}],["s",{"0":{"93":1,"95":1,"96":1,"138":1,"139":1,"1259":1,"1291":1,"1323":1,"1447":1,"1881":1,"1883":1,"1989":1,"2026":1,"2045":1,"2187":1},"1":{"1039":1,"1040":1,"1041":1,"1042":1,"1043":1,"1044":1,"1045":1,"1046":1},"2":{"1239":1,"1353":1,"1813":2},"3":{"0":269,"6":1,"7":2,"10":2,"13":1,"15":1,"20":2,"21":5,"22":1,"24":3,"25":1,"26":2,"27":6,"30":1,"31":7,"37":1,"38":2,"39":6,"40":2,"41":1,"42":4,"43":2,"46":2,"47":1,"49":1,"51":1,"52":2,"53":10,"54":2,"57":3,"59":5,"60":1,"62":5,"66":4,"68":1,"71":6,"72":6,"73":6,"74":1,"76":1,"77":1,"78":2,"79":1,"80":8,"81":4,"82":2,"91":7,"92":4,"93":6,"94":4,"95":9,"96":6,"97":3,"98":3,"99":6,"100":9,"101":3,"102":2,"103":4,"104":2,"109":9,"111":2,"115":3,"117":2,"121":2,"122":5,"123":2,"125":2,"126":2,"127":3,"128":1,"130":6,"131":1,"132":1,"134":1,"135":15,"136":8,"137":4,"138":2,"139":5,"140":3,"141":3,"142":5,"145":7,"147":5,"149":2,"150":2,"152":1,"157":3,"159":2,"160":5,"161":2,"162":1,"164":1,"165":1,"166":6,"168":1,"169":1,"170":2,"173":1,"174":2,"175":7,"177":1,"178":1,"179":4,"180":6,"184":3,"186":20,"187":2,"189":1,"190":1,"193":5,"194":1,"195":4,"196":1,"199":1,"200":2,"201":6,"202":2,"208":1,"209":2,"212":2,"215":1,"217":3,"218":4,"219":4,"225":6,"226":3,"228":3,"230":7,"231":2,"233":1,"234":1,"235":7,"237":5,"241":10,"242":1,"243":9,"245":4,"246":3,"247":5,"248":1,"249":2,"250":2,"251":3,"252":2,"253":1,"254":5,"255":10,"256":7,"257":5,"258":4,"259":9,"260":2,"261":4,"264":1,"265":15,"267":2,"268":1,"273":3,"274":1,"275":3,"276":1,"279":3,"280":1,"282":3,"284":2,"286":1,"290":4,"291":3,"292":2,"293":1,"295":3,"296":1,"298":2,"300":1,"301":1,"302":1,"303":1,"305":4,"306":1,"309":1,"310":6,"311":1,"313":1,"314":3,"317":2,"318":17,"320":3,"322":1,"324":3,"325":4,"326":6,"330":1,"332":1,"333":4,"340":1,"341":13,"342":2,"343":2,"344":2,"345":1,"348":5,"349":3,"350":15,"351":3,"352":6,"353":8,"354":1,"355":1,"359":3,"361":3,"364":1,"365":2,"366":1,"369":1,"370":1,"373":7,"374":1,"375":1,"382":1,"383":2,"386":8,"387":5,"388":2,"389":2,"390":7,"391":5,"392":8,"393":2,"396":1,"397":5,"400":5,"401":3,"402":7,"404":2,"407":4,"408":1,"409":2,"411":1,"412":2,"413":3,"414":2,"415":2,"418":4,"420":6,"421":1,"422":2,"423":1,"426":2,"427":2,"428":3,"429":3,"430":2,"434":3,"435":2,"441":2,"447":1,"448":11,"450":2,"451":3,"452":4,"453":1,"454":4,"455":1,"458":3,"459":12,"460":2,"461":2,"462":1,"463":5,"464":2,"465":7,"466":3,"468":7,"469":2,"472":1,"473":1,"474":2,"475":2,"476":4,"477":4,"478":1,"481":3,"483":1,"484":1,"487":1,"488":1,"489":2,"490":5,"491":1,"492":1,"493":1,"494":1,"497":8,"498":1,"499":9,"500":1,"501":2,"502":3,"503":1,"506":2,"507":3,"509":4,"510":1,"511":1,"512":1,"513":1,"517":3,"518":1,"522":1,"524":2,"527":1,"528":3,"530":5,"532":1,"534":5,"535":1,"536":10,"537":3,"538":2,"539":4,"540":4,"541":1,"543":5,"545":12,"548":1,"549":8,"550":4,"551":6,"554":1,"556":14,"557":3,"558":2,"562":2,"564":7,"565":1,"566":3,"568":1,"572":15,"573":3,"575":3,"576":1,"577":3,"578":3,"579":1,"582":1,"583":12,"584":2,"585":6,"586":1,"587":3,"590":1,"591":5,"592":1,"593":1,"598":3,"599":5,"601":3,"602":3,"603":3,"604":1,"607":19,"609":22,"610":2,"611":3,"612":2,"613":1,"614":2,"616":1,"617":4,"618":11,"619":3,"620":1,"622":1,"624":2,"626":10,"627":1,"629":4,"631":3,"632":1,"633":20,"634":2,"635":8,"636":3,"638":2,"640":13,"642":3,"643":1,"644":4,"649":14,"650":1,"651":8,"655":5,"656":1,"657":7,"658":4,"659":1,"660":1,"663":1,"664":1,"665":4,"666":1,"667":1,"668":1,"674":17,"675":1,"676":1,"677":4,"681":3,"682":7,"683":5,"684":6,"685":1,"688":1,"689":3,"690":4,"691":1,"692":1,"693":1,"694":1,"696":1,"697":1,"698":8,"699":2,"700":6,"702":2,"703":1,"706":1,"707":2,"708":3,"709":3,"711":1,"714":4,"715":7,"716":4,"717":5,"718":3,"719":1,"720":2,"724":1,"725":11,"726":4,"727":6,"729":1,"731":3,"732":2,"733":11,"734":3,"735":6,"736":2,"737":1,"739":2,"740":2,"741":6,"742":1,"743":4,"744":1,"745":1,"749":7,"750":2,"751":4,"755":2,"757":5,"758":1,"759":1,"760":3,"761":1,"764":8,"766":13,"767":2,"768":1,"769":3,"774":2,"775":1,"776":2,"780":6,"781":1,"782":9,"783":1,"784":3,"785":1,"789":1,"790":5,"791":3,"792":2,"793":1,"798":2,"799":4,"800":1,"802":1,"803":7,"804":1,"805":1,"808":2,"809":5,"810":8,"811":2,"812":3,"813":3,"814":1,"815":1,"817":3,"818":3,"819":4,"820":1,"821":1,"822":1,"825":8,"826":7,"827":28,"828":1,"829":7,"830":2,"831":5,"832":9,"833":6,"834":1,"836":1,"837":6,"838":20,"839":3,"840":7,"841":2,"842":1,"844":1,"845":1,"846":4,"847":3,"848":3,"849":3,"850":1,"853":3,"854":6,"855":1,"857":3,"860":2,"861":6,"862":1,"863":7,"864":4,"867":3,"868":2,"870":2,"873":4,"876":9,"877":2,"879":1,"880":1,"881":16,"882":1,"884":3,"889":4,"891":5,"892":3,"895":1,"896":1,"897":14,"898":1,"900":2,"901":1,"903":1,"904":5,"905":26,"906":7,"907":7,"908":1,"909":1,"910":2,"912":2,"913":4,"914":9,"916":6,"917":2,"918":3,"920":3,"921":4,"922":10,"923":2,"924":5,"925":1,"926":10,"927":1,"931":1,"932":1,"934":1,"944":1,"945":1,"946":3,"947":1,"949":1,"952":1,"953":1,"954":14,"956":4,"958":2,"959":2,"960":3,"962":1,"964":6,"965":3,"966":1,"971":4,"972":9,"973":4,"974":3,"979":4,"980":2,"981":1,"982":1,"983":2,"986":3,"987":1,"988":13,"990":3,"991":1,"992":1,"994":4,"995":4,"996":8,"997":1,"998":5,"999":2,"1003":1,"1004":6,"1005":2,"1006":2,"1007":1,"1010":1,"1011":1,"1012":4,"1013":1,"1014":2,"1016":1,"1017":2,"1018":22,"1019":4,"1020":1,"1021":2,"1022":1,"1024":2,"1025":1,"1026":9,"1028":5,"1029":1,"1030":1,"1033":4,"1034":9,"1035":2,"1036":3,"1037":2,"1038":1,"1039":1,"1040":1,"1042":12,"1043":3,"1044":5,"1045":1,"1048":3,"1049":5,"1050":8,"1051":5,"1052":5,"1054":3,"1055":3,"1057":1,"1058":7,"1059":9,"1060":2,"1061":3,"1063":1,"1066":3,"1067":15,"1068":2,"1069":9,"1070":3,"1073":3,"1074":9,"1075":5,"1076":1,"1077":1,"1078":1,"1079":1,"1081":1,"1082":4,"1083":1,"1085":2,"1086":2,"1089":3,"1090":2,"1091":14,"1092":3,"1093":8,"1094":2,"1099":3,"1100":1,"1103":2,"1104":1,"1108":1,"1114":1,"1115":1,"1116":18,"1117":5,"1118":3,"1119":2,"1122":1,"1123":3,"1124":17,"1125":5,"1126":2,"1127":3,"1128":1,"1133":7,"1135":3,"1140":2,"1142":2,"1144":2,"1147":1,"1149":1,"1150":5,"1151":1,"1155":1,"1156":1,"1157":1,"1160":2,"1161":4,"1162":1,"1168":3,"1170":1,"1175":5,"1176":4,"1178":2,"1182":1,"1184":11,"1186":1,"1187":1,"1191":1,"1192":2,"1193":3,"1194":2,"1196":3,"1201":1,"1202":2,"1203":2,"1211":1,"1212":41,"1213":3,"1214":6,"1215":1,"1216":3,"1218":1,"1219":1,"1221":1,"1223":2,"1224":1,"1226":1,"1227":1,"1228":3,"1229":56,"1230":4,"1231":4,"1232":2,"1233":4,"1235":2,"1236":5,"1237":147,"1238":2,"1239":10,"1240":3,"1241":5,"1242":2,"1243":2,"1244":5,"1246":3,"1247":217,"1248":1,"1249":5,"1251":4,"1252":2,"1253":7,"1254":1,"1256":2,"1257":1,"1258":8,"1259":216,"1260":3,"1262":8,"1263":9,"1264":11,"1265":18,"1266":3,"1267":7,"1268":3,"1269":4,"1270":355,"1271":91,"1272":1,"1273":11,"1274":4,"1275":7,"1276":13,"1277":5,"1278":17,"1279":5,"1280":2,"1281":8,"1282":5,"1283":6,"1284":2,"1285":3,"1286":977,"1287":2,"1288":1,"1289":13,"1290":19,"1291":1,"1292":2,"1293":5,"1294":4,"1295":4,"1296":3,"1297":10,"1298":5,"1300":773,"1301":79,"1302":3,"1303":1,"1304":8,"1305":2,"1306":1,"1307":8,"1308":3,"1309":297,"1310":70,"1311":527,"1312":71,"1314":5,"1315":9,"1316":12,"1317":3,"1318":8,"1319":4,"1320":6,"1321":1,"1322":6,"1323":478,"1324":1026,"1325":1,"1326":8,"1327":5,"1328":7,"1329":1,"1330":4,"1331":3,"1332":5,"1333":10,"1334":4,"1335":1,"1336":5,"1337":4,"1338":8,"1339":433,"1340":3,"1341":5,"1342":10,"1343":2,"1344":3,"1345":2,"1346":3,"1347":6,"1348":9,"1349":5,"1350":480,"1351":4,"1352":14,"1353":12,"1354":6,"1355":13,"1356":3,"1357":14,"1358":6,"1359":1774,"1360":5,"1362":9,"1363":5,"1364":5,"1366":13,"1367":5,"1368":7,"1369":147,"1371":5,"1372":5,"1373":4,"1374":3,"1375":6,"1376":3,"1377":7,"1378":12,"1379":9,"1380":336,"1381":3,"1382":5,"1383":7,"1384":14,"1385":6,"1386":2,"1387":7,"1388":5,"1389":13,"1390":3,"1391":7,"1392":4,"1393":1,"1394":1,"1395":955,"1396":1023,"1397":2,"1398":5,"1399":7,"1400":5,"1401":7,"1402":471,"1404":1,"1405":4,"1406":5,"1407":3,"1409":1,"1410":5,"1411":3,"1412":4,"1413":1,"1414":4,"1415":645,"1416":134,"1417":394,"1418":3,"1420":3,"1421":4,"1422":6,"1423":6,"1424":8,"1425":3,"1426":4,"1427":165,"1428":1,"1429":7,"1430":3,"1431":20,"1432":3,"1433":6,"1434":6,"1435":14,"1436":1904,"1437":28,"1438":92,"1439":1,"1441":31,"1442":8,"1443":38,"1444":4,"1445":8,"1446":8,"1447":23,"1449":4,"1450":6,"1451":5,"1452":2,"1453":10,"1454":9,"1455":44,"1456":17,"1457":4,"1458":4,"1459":14,"1460":11,"1461":8,"1463":1,"1465":10,"1466":4,"1467":90,"1469":1,"1470":4,"1471":3,"1472":2,"1473":6,"1474":5,"1475":18,"1476":21,"1477":1,"1478":1,"1479":2,"1480":1,"1481":3,"1483":1,"1484":2,"1486":10,"1487":5,"1488":30,"1489":30,"1490":16,"1491":9,"1492":34,"1494":1,"1496":105,"1497":2,"1498":3,"1500":5,"1507":1,"1509":1,"1512":2,"1513":3,"1515":1,"1517":1,"1518":1,"1522":1,"1523":4,"1524":5,"1525":3,"1526":42,"1527":2,"1528":2,"1529":1,"1531":9,"1532":2,"1534":14,"1536":1,"1537":1,"1541":1,"1542":1,"1543":1,"1546":2,"1547":1,"1553":3,"1558":1,"1559":1,"1565":1,"1567":2,"1569":2,"1571":1,"1573":1,"1575":6,"1576":1,"1577":41,"1578":2,"1579":2,"1582":10,"1583":1,"1585":8,"1586":2,"1587":1,"1588":1,"1589":5,"1591":42,"1592":1,"1595":3,"1596":21,"1597":3,"1598":2,"1599":8,"1600":7,"1607":2,"1610":1,"1611":2,"1615":1,"1621":2,"1625":1,"1626":2,"1627":6,"1629":1,"1630":23,"1631":31,"1632":16,"1635":5,"1636":1,"1637":3,"1638":6,"1639":20,"1640":10,"1641":22,"1644":1,"1645":1,"1650":3,"1651":13,"1652":1,"1653":10,"1654":1,"1656":7,"1658":1,"1661":3,"1662":3,"1663":7,"1664":3,"1665":4,"1666":6,"1667":3,"1668":3,"1669":5,"1670":1,"1671":4,"1674":2,"1675":2,"1676":1,"1677":4,"1678":2,"1679":2,"1680":2,"1683":3,"1684":6,"1685":17,"1686":9,"1687":2,"1688":3,"1689":2,"1690":1,"1693":1,"1695":1,"1697":2,"1699":1,"1700":1,"1701":6,"1702":6,"1703":3,"1706":1,"1707":5,"1708":4,"1709":4,"1710":1,"1718":2,"1719":5,"1720":2,"1722":2,"1723":1,"1724":4,"1726":2,"1727":20,"1728":7,"1729":7,"1730":5,"1731":4,"1741":3,"1742":1,"1744":1,"1748":8,"1749":8,"1750":1,"1751":2,"1756":1,"1759":3,"1760":1,"1761":2,"1764":8,"1765":22,"1767":8,"1768":1,"1769":10,"1770":3,"1771":2,"1772":1,"1773":1,"1778":1,"1779":3,"1781":1,"1782":1,"1784":1,"1789":1,"1790":4,"1792":1,"1795":1,"1797":1,"1799":2,"1800":1,"1802":2,"1805":1,"1810":7,"1811":2,"1813":5,"1815":12,"1817":2,"1821":4,"1823":2,"1824":4,"1825":4,"1826":1,"1827":1,"1828":1,"1829":7,"1830":4,"1831":2,"1832":3,"1833":3,"1834":2,"1839":5,"1840":8,"1841":2,"1843":5,"1844":2,"1845":1,"1848":2,"1849":7,"1851":9,"1852":2,"1853":1,"1855":2,"1856":5,"1857":2,"1859":3,"1860":1,"1861":3,"1862":1,"1865":3,"1866":4,"1869":2,"1871":4,"1872":7,"1874":3,"1875":5,"1876":6,"1877":4,"1878":1,"1879":2,"1880":1,"1881":6,"1882":4,"1883":1,"1884":4,"1885":2,"1886":1,"1888":1,"1889":2,"1891":5,"1892":1,"1894":1,"1895":4,"1896":9,"1897":4,"1898":7,"1899":5,"1902":1,"1903":1,"1904":1,"1905":1,"1906":1,"1908":4,"1909":4,"1910":5,"1911":2,"1912":3,"1914":1,"1915":1,"1919":1,"1920":11,"1921":1,"1922":18,"1923":14,"1924":1,"1925":1,"1927":8,"1928":1,"1929":6,"1930":1,"1933":2,"1934":6,"1935":3,"1936":1,"1937":3,"1938":1,"1940":1,"1941":1,"1944":2,"1945":2,"1946":5,"1947":5,"1948":1,"1949":3,"1950":4,"1952":1,"1953":1,"1954":3,"1955":2,"1956":2,"1957":1,"1958":3,"1961":1,"1962":7,"1963":3,"1964":2,"1965":1,"1966":1,"1967":1,"1968":7,"1970":3,"1971":2,"1972":2,"1973":3,"1974":3,"1975":1,"1976":2,"1977":4,"1978":8,"1979":1,"1981":1,"1982":11,"1983":7,"1984":1,"1985":3,"1987":1,"1989":3,"1990":1,"1991":1,"1992":3,"1994":3,"1995":11,"1996":12,"1997":2,"1998":4,"1999":1,"2001":14,"2002":4,"2003":3,"2005":1,"2007":7,"2009":7,"2010":4,"2011":8,"2013":6,"2014":1,"2015":2,"2016":1,"2019":1,"2020":4,"2022":3,"2024":2,"2025":8,"2026":6,"2028":2,"2029":1,"2031":1,"2032":1,"2033":3,"2034":1,"2035":5,"2036":1,"2037":1,"2038":2,"2039":2,"2042":2,"2043":4,"2044":14,"2045":4,"2047":6,"2048":3,"2051":1,"2053":1,"2054":2,"2056":11,"2057":5,"2058":4,"2060":3,"2061":5,"2062":1,"2063":2,"2064":5,"2065":1,"2066":2,"2067":1,"2068":2,"2070":1,"2071":1,"2072":1,"2074":5,"2075":1,"2076":3,"2077":4,"2078":4,"2079":5,"2080":2,"2081":4,"2082":1,"2084":2,"2085":3,"2087":6,"2088":1,"2089":1,"2090":1,"2091":2,"2092":1,"2093":1,"2095":1,"2096":2,"2097":8,"2098":1,"2099":7,"2100":3,"2101":1,"2103":2,"2105":3,"2106":3,"2107":4,"2108":2,"2109":2,"2110":1,"2111":3,"2114":1,"2115":3,"2116":1,"2117":2,"2120":3,"2122":2,"2123":1,"2124":1,"2128":4,"2129":3,"2130":2,"2131":1,"2133":14,"2134":2,"2135":1,"2138":3,"2139":2,"2140":8,"2143":1,"2144":3,"2145":2,"2146":1,"2148":1,"2150":1,"2152":10,"2153":3,"2155":2,"2156":2,"2158":5,"2159":2,"2160":12,"2161":1,"2162":4,"2163":3,"2165":3,"2166":4,"2167":5,"2168":2,"2169":10,"2170":7,"2171":3,"2172":2,"2173":1,"2174":3,"2176":2,"2178":3,"2179":2,"2180":4,"2181":7,"2182":6,"2187":8,"2188":1,"2189":1,"2190":2,"2191":2,"2192":6,"2194":7,"2195":6,"2196":2,"2197":3,"2199":3,"2200":2,"2202":1,"2204":5,"2205":2,"2217":1,"2218":1,"2222":3,"2224":1,"2230":1,"2232":1,"2234":17,"2235":1,"2238":1,"2241":2,"2243":1,"2246":1}}],["sunday",{"3":{"1460":1,"1492":1,"1526":1}}],["sundays",{"3":{"1459":1,"1591":1}}],["suffers",{"3":{"1324":1}}],["suffer",{"3":{"1243":1,"1247":1,"1395":1}}],["suffixing",{"3":{"1324":1}}],["suffixes",{"3":{"1324":1,"1436":7}}],["suffixed",{"3":{"1270":2,"1300":1,"1309":1,"1333":1,"1359":1,"1429":1,"1436":2,"1496":1,"2130":1}}],["suffixredactor",{"3":{"1199":2,"1207":1}}],["suffix",{"2":{"1006":1},"3":{"123":1,"246":1,"343":2,"441":2,"443":2,"444":1,"576":1,"607":1,"609":1,"611":1,"629":1,"868":1,"870":1,"873":1,"975":1,"1006":2,"1267":2,"1270":1,"1300":2,"1309":2,"1311":2,"1312":1,"1324":4,"1339":1,"1350":1,"1395":3,"1396":1,"1411":1,"1415":4,"1416":1,"1436":18,"1444":1,"1465":1,"1467":3,"1475":2,"1476":3,"1535":1,"1591":1,"1651":2,"1685":1,"1686":1,"1733":1,"1920":2,"1923":1,"1924":2,"2018":1,"2129":2,"2160":2,"2162":1}}],["sufficiency",{"3":{"1300":1,"1749":1,"1765":2}}],["sufficient",{"3":{"100":1,"810":1,"813":1,"815":1,"856":1,"1300":1,"1309":1,"1311":1,"1323":1,"1324":1,"1350":1,"1380":2,"1395":3,"1402":1,"1415":2,"1417":1,"1457":1,"1472":1,"1490":1,"1496":1,"1631":1,"1639":1,"1749":1,"1765":1,"1767":2,"1891":1}}],["sufficed",{"3":{"1436":1}}],["suffices",{"3":{"30":1,"1273":1,"1286":1,"1359":3}}],["suffice",{"3":{"0":1,"1212":1}}],["sustain",{"3":{"1458":1}}],["sustained",{"3":{"0":1,"70":1,"403":1,"612":1,"625":1,"1102":1,"1311":2,"1324":2,"1396":1,"1400":1,"1534":1,"1949":1,"2032":1,"2076":1,"2168":1}}],["suspend",{"3":{"1396":1}}],["suspected",{"3":{"1323":1}}],["suspicious",{"3":{"801":1,"1415":1}}],["suggest",{"3":{"1341":1,"1436":1}}],["suggested",{"0":{"1194":1},"3":{"1075":1,"1286":1,"1709":1}}],["suggests",{"3":{"640":1,"768":1,"981":1,"987":1,"1252":1,"1270":1,"1467":1,"1727":1}}],["suggestions",{"3":{"1311":1,"1699":1,"1727":1}}],["suggestion",{"2":{"2091":1},"3":{"633":1,"1092":1,"1419":1,"1427":1,"1577":1,"1581":1,"1582":1,"1584":1,"1824":1,"1826":1,"2058":1,"2059":1,"2091":1,"2199":1}}],["sugar",{"3":{"0":1,"359":1,"655":1,"657":2,"660":1,"1168":1,"1259":1,"1286":2,"1761":1,"2144":1}}],["sums",{"3":{"1018":1,"1259":2,"1286":2,"1396":4,"2160":1}}],["sumselector",{"3":{"551":1,"1286":2}}],["summing",{"3":{"1286":2,"1396":1}}],["summer",{"3":{"1028":1,"1467":1,"1478":1}}],["summed",{"3":{"688":1,"1259":3,"1286":2,"1311":1,"1396":7,"1402":2}}],["summarizer",{"3":{"1435":1}}],["summarizes",{"3":{"1369":1,"1686":1}}],["summarize",{"3":{"1359":1,"2031":1}}],["summarized",{"3":{"369":1,"2232":1}}],["summaries",{"3":{"454":3,"1212":1,"1311":3,"1324":2,"1461":1,"1492":1,"1674":1,"1685":2}}],["summarypath",{"3":{"1475":1}}],["summary",{"0":{"1448":1,"1460":1,"1468":1,"1483":1,"1638":1,"1746":1,"2220":1},"3":{"0":2,"313":1,"376":1,"626":1,"627":1,"628":1,"642":1,"751":1,"757":1,"759":1,"766":3,"905":1,"946":1,"950":1,"972":1,"1006":2,"1237":2,"1259":1,"1263":1,"1270":2,"1277":1,"1286":3,"1300":12,"1309":1,"1311":3,"1312":2,"1323":3,"1324":10,"1339":2,"1350":7,"1359":31,"1380":1,"1395":13,"1396":10,"1402":6,"1407":1,"1414":1,"1415":4,"1416":11,"1417":7,"1431":1,"1433":1,"1436":19,"1438":4,"1452":1,"1455":5,"1457":1,"1459":1,"1461":1,"1474":1,"1475":4,"1488":2,"1489":1,"1492":2,"1526":3,"1561":1,"1607":1,"1608":1,"1632":1,"1639":3,"1669":1,"1671":1,"1685":1,"1686":1,"1701":1,"1729":1,"1741":1,"1742":1,"1748":2,"1750":1,"1760":1,"1765":2,"1767":2,"1769":1,"1957":1,"1958":1,"1996":4}}],["sumbyasync",{"3":{"543":1,"545":1,"551":1,"690":1,"692":1,"1286":9,"1396":4,"1815":1}}],["sum",{"3":{"0":1,"551":1,"592":1,"690":1,"692":2,"1011":1,"1012":3,"1259":1,"1270":1,"1286":4,"1339":1,"1359":1,"1366":1,"1395":1,"1396":11,"1402":1,"1455":1,"1467":2,"1487":1,"1492":1,"1496":8,"1498":1,"1686":1,"1764":2,"1798":2,"2048":1}}],["suiting",{"3":{"1339":1}}],["suitable",{"3":{"1323":2}}],["suit",{"3":{"165":1,"1309":1}}],["suits",{"3":{"0":1,"165":1,"650":1,"1270":1,"1300":1}}],["suite",{"0":{"2107":1},"2":{"2048":1},"3":{"0":4,"59":1,"132":1,"133":1,"135":3,"136":1,"137":4,"140":2,"143":1,"162":1,"218":1,"361":2,"546":1,"555":1,"556":1,"558":2,"571":1,"572":8,"573":1,"574":3,"575":2,"577":1,"591":6,"593":1,"616":2,"618":2,"621":1,"777":1,"838":1,"840":1,"859":1,"860":1,"861":2,"862":2,"863":1,"865":2,"906":1,"972":1,"973":1,"974":1,"1012":1,"1017":1,"1018":4,"1022":1,"1094":1,"1117":1,"1168":2,"1192":1,"1212":3,"1213":1,"1241":1,"1247":2,"1271":1,"1286":8,"1300":1,"1323":4,"1324":6,"1326":2,"1339":4,"1359":3,"1366":2,"1368":1,"1369":5,"1395":1,"1396":2,"1400":1,"1402":1,"1409":1,"1414":1,"1415":4,"1426":1,"1427":1,"1428":1,"1433":2,"1434":1,"1435":1,"1436":126,"1437":5,"1438":20,"1441":5,"1444":3,"1449":1,"1455":1,"1456":12,"1460":1,"1461":2,"1486":5,"1487":6,"1488":4,"1489":2,"1490":5,"1492":7,"1496":1,"1497":1,"1524":1,"1526":3,"1534":2,"1535":1,"1553":1,"1572":1,"1589":2,"1590":1,"1591":4,"1596":2,"1612":1,"1685":2,"1686":3,"1689":1,"1739":1,"1785":1,"1898":1,"1961":1,"2017":1,"2042":1,"2048":3,"2049":1,"2051":4,"2052":1,"2056":1,"2059":3,"2060":2,"2061":2,"2077":1,"2081":3,"2103":1,"2107":2,"2108":2,"2109":2,"2110":3,"2114":1,"2173":1,"2222":1,"2234":1}}],["suites",{"0":{"1438":1},"1":{"569":1,"570":1,"571":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"578":1,"579":1},"3":{"0":2,"124":1,"143":1,"569":1,"572":3,"573":1,"574":6,"576":1,"577":1,"578":1,"622":1,"650":1,"773":1,"837":1,"841":1,"863":1,"953":2,"1212":1,"1247":1,"1270":1,"1286":1,"1323":1,"1359":1,"1395":1,"1415":1,"1428":2,"1429":1,"1432":1,"1433":1,"1435":2,"1436":27,"1438":2,"1460":1,"1485":2,"1487":3,"1488":2,"1489":1,"1492":1,"1494":1,"1496":7,"1500":1,"1526":1,"1660":2,"1661":1,"1668":1,"1671":3,"1684":1,"1685":1,"1690":1,"1898":1,"1923":1,"2042":1,"2056":2,"2234":1}}],["succeeding",{"3":{"350":1,"881":1,"906":1,"1286":1,"1300":2,"1324":2,"1395":1,"1436":1,"1767":1,"1914":1,"1977":1,"2062":1}}],["succeeded",{"3":{"243":1,"538":1,"707":1,"741":1,"791":1,"881":1,"896":1,"1229":1,"1247":3,"1259":1,"1265":2,"1270":2,"1278":1,"1300":1,"1304":1,"1311":4,"1323":5,"1324":6,"1343":1,"1350":4,"1359":6,"1380":1,"1389":1,"1395":4,"1396":2,"1402":2,"1410":1,"1415":4,"1417":1,"1433":1,"1436":3,"1438":2,"1467":1,"1488":1,"1490":1,"1492":1,"1525":1,"1591":2,"1599":1,"1840":1,"1845":1,"1852":1,"1908":1,"1910":1,"1922":1,"2158":1,"2166":1,"2170":1}}],["succeed",{"3":{"22":1,"109":1,"195":1,"196":1,"342":1,"415":1,"537":1,"854":1,"857":1,"996":1,"1258":1,"1259":2,"1265":1,"1271":1,"1286":2,"1300":5,"1323":3,"1324":2,"1359":3,"1415":1,"1417":1,"1436":3,"1454":1,"1455":1,"1668":1,"1765":1,"1906":1,"2035":1,"2124":1,"2128":2}}],["succeeds",{"3":{"0":4,"31":1,"53":1,"186":1,"234":1,"239":1,"255":1,"318":1,"511":1,"518":1,"549":1,"848":1,"856":1,"988":1,"1018":1,"1212":1,"1237":1,"1247":1,"1252":1,"1255":1,"1286":2,"1294":1,"1300":11,"1311":2,"1322":1,"1323":6,"1324":3,"1334":1,"1339":4,"1350":2,"1352":1,"1359":3,"1367":1,"1380":1,"1395":4,"1396":6,"1402":1,"1410":1,"1415":10,"1417":2,"1435":1,"1436":3,"1438":2,"1443":1,"1456":1,"1472":1,"1488":1,"1492":1,"1631":2,"1649":1,"1657":2,"1701":1,"1748":2,"1749":1,"1755":1,"1776":1,"1835":1,"1840":1,"1923":1,"1944":2,"1947":1,"1962":1,"1993":1,"1995":1,"2008":1,"2068":1,"2167":1,"2187":1,"2194":1}}],["successalert",{"3":{"1436":2}}],["successoutcome",{"3":{"1427":2}}],["successorevent",{"3":{"1199":3,"1207":1}}],["successors",{"3":{"905":1,"1255":1,"1286":1,"1300":1,"1436":3}}],["successor",{"3":{"0":4,"499":1,"846":1,"903":1,"905":3,"906":2,"1252":1,"1258":1,"1259":2,"1270":2,"1286":4,"1290":1,"1300":11,"1436":9,"1438":4,"1496":1,"1640":1,"1667":1,"1926":1,"1982":7,"1984":1,"1985":1}}],["successive",{"3":{"1396":1}}],["successcontrasttext",{"3":{"1324":1}}],["successfully",{"3":{"195":1,"265":1,"527":1,"539":1,"585":1,"818":1,"1259":3,"1270":1,"1300":2,"1324":4,"1359":3,"1395":1,"1436":2,"1455":1,"1639":1,"1641":2,"1653":1,"1677":1,"1843":1}}],["successful",{"2":{"1467":1},"3":{"0":5,"20":1,"21":1,"24":1,"109":1,"120":1,"234":1,"243":1,"258":1,"265":1,"281":1,"312":1,"498":1,"499":2,"500":1,"591":2,"626":1,"725":1,"727":1,"732":1,"733":1,"756":1,"757":1,"758":1,"854":1,"857":1,"881":1,"908":1,"922":1,"988":2,"991":1,"1020":1,"1140":1,"1183":1,"1184":1,"1212":2,"1217":1,"1220":2,"1227":1,"1229":2,"1233":1,"1237":2,"1247":1,"1259":3,"1263":1,"1265":1,"1270":7,"1274":1,"1286":5,"1288":1,"1289":1,"1294":1,"1300":14,"1301":1,"1309":2,"1311":5,"1318":1,"1323":5,"1324":12,"1350":1,"1358":1,"1359":26,"1369":1,"1380":3,"1391":1,"1395":21,"1396":6,"1398":1,"1402":4,"1406":1,"1407":1,"1415":8,"1417":2,"1436":2,"1438":2,"1455":2,"1456":1,"1460":1,"1463":1,"1467":1,"1474":2,"1475":2,"1488":2,"1490":1,"1526":2,"1577":1,"1589":1,"1591":3,"1596":2,"1598":1,"1627":2,"1641":3,"1651":2,"1709":2,"1767":1,"1774":1,"1840":1,"1895":1,"1898":1,"1911":1,"1982":1,"2035":2,"2038":1,"2058":1}}],["successes",{"3":{"0":1,"243":1,"258":1,"1286":1,"1324":1,"1359":1,"1396":2,"1402":2,"1438":1,"1577":1}}],["success",{"0":{"1918":1},"2":{"620":1,"855":1,"1099":1,"1221":1,"2192":1},"3":{"0":5,"109":4,"157":1,"178":1,"196":1,"225":1,"226":1,"230":1,"265":1,"312":1,"350":1,"423":1,"434":1,"435":1,"461":1,"537":1,"539":1,"583":1,"585":1,"620":1,"626":6,"640":1,"737":1,"756":2,"758":2,"766":1,"790":3,"854":2,"855":1,"861":1,"881":1,"897":1,"905":4,"922":1,"926":4,"988":1,"989":1,"996":2,"1018":2,"1075":1,"1089":1,"1099":1,"1103":1,"1168":1,"1212":2,"1217":1,"1219":2,"1220":6,"1221":5,"1223":3,"1227":1,"1229":31,"1236":1,"1237":7,"1247":1,"1252":1,"1256":2,"1259":5,"1264":1,"1265":3,"1270":18,"1271":2,"1286":13,"1289":1,"1290":1,"1292":1,"1294":1,"1300":42,"1304":1,"1309":14,"1311":22,"1318":1,"1322":1,"1323":42,"1324":61,"1339":7,"1346":1,"1350":25,"1358":2,"1359":97,"1365":1,"1366":1,"1369":3,"1379":1,"1380":13,"1389":1,"1390":1,"1395":77,"1396":52,"1398":1,"1402":24,"1407":1,"1408":1,"1415":38,"1416":2,"1417":15,"1425":2,"1427":2,"1433":5,"1436":29,"1438":5,"1445":3,"1455":18,"1456":1,"1460":1,"1467":2,"1473":1,"1474":1,"1475":4,"1488":4,"1492":9,"1496":1,"1526":7,"1561":1,"1577":2,"1589":1,"1591":6,"1596":2,"1641":1,"1651":3,"1653":1,"1686":2,"1702":2,"1709":1,"1749":1,"1770":1,"1805":10,"1821":1,"1822":2,"1896":1,"1898":1,"1903":1,"1911":1,"1912":1,"1923":1,"1924":2,"1930":1,"1933":3,"1940":1,"1975":1,"1976":1,"1982":1,"2002":1,"2046":1,"2047":1,"2064":1,"2069":1,"2076":1,"2094":1,"2098":2,"2129":1,"2158":1,"2165":1,"2166":1,"2167":1,"2171":2,"2179":1,"2191":1,"2192":2,"2198":1,"2202":1}}],["such",{"3":{"0":4,"57":1,"81":2,"145":1,"157":1,"175":1,"185":1,"193":1,"215":1,"234":1,"235":1,"249":1,"290":1,"296":1,"341":1,"352":1,"363":1,"369":1,"390":1,"391":1,"427":1,"428":1,"491":1,"509":1,"536":1,"538":1,"549":1,"605":1,"657":1,"698":1,"707":1,"720":1,"743":3,"767":1,"776":1,"782":1,"799":1,"801":1,"803":1,"868":1,"883":2,"889":1,"930":2,"948":1,"966":1,"980":2,"995":1,"1034":1,"1042":2,"1108":1,"1115":1,"1168":1,"1184":1,"1188":1,"1233":1,"1237":4,"1244":1,"1247":3,"1249":1,"1252":1,"1256":1,"1259":5,"1270":2,"1271":2,"1275":1,"1286":23,"1297":1,"1300":21,"1301":2,"1309":4,"1311":15,"1312":2,"1323":10,"1324":20,"1339":5,"1342":1,"1347":1,"1348":1,"1350":7,"1353":1,"1359":28,"1372":1,"1380":5,"1384":1,"1395":11,"1396":10,"1402":6,"1406":1,"1415":8,"1416":2,"1417":8,"1427":1,"1428":1,"1431":4,"1436":28,"1453":1,"1455":1,"1500":1,"1534":1,"1569":1,"1585":1,"1653":1,"1808":1,"1857":1,"1883":1,"1908":1,"1909":1,"1912":1,"1922":1,"1948":1,"2001":1,"2013":1,"2056":1,"2087":1,"2109":1,"2166":1,"2170":1,"2181":1,"2190":2,"2201":1}}],["superar",{"3":{"1685":2,"1686":2}}],["supervisedusercircle",{"3":{"1415":1}}],["supertype",{"3":{"1339":1}}],["superficial",{"3":{"1140":1}}],["supersession",{"3":{"1324":5,"1436":1,"1478":1}}],["supersets",{"3":{"1247":1}}],["superset",{"3":{"448":1,"564":1,"1270":1,"1309":1,"1311":4,"1436":1,"2133":1}}],["supersede",{"3":{"607":1,"610":1,"1395":3,"1438":1,"1456":1,"1892":1}}],["supersedes",{"1":{"262":1,"263":1,"264":1,"265":1,"266":1,"267":1,"268":1,"269":1},"3":{"0":3,"15":1,"22":1,"45":1,"142":1,"145":2,"262":1,"263":1,"313":1,"326":1,"390":1,"724":1,"739":1,"743":1,"792":1,"903":1,"944":1,"1098":1,"1120":1,"1212":4,"1286":1,"1287":1,"1300":3,"1324":3,"1395":2,"1436":1,"1438":1,"1453":1,"1455":1,"1459":1,"1496":1,"1527":1,"1578":1,"1591":1,"1592":1,"1639":1,"1737":1,"1784":1,"1799":1,"1947":1,"2083":1,"2087":1,"2234":4}}],["superseded",{"0":{"137":1},"3":{"0":8,"1":1,"27":1,"84":1,"91":2,"92":1,"109":1,"117":1,"122":1,"130":1,"136":3,"137":2,"142":1,"195":2,"197":1,"200":1,"264":1,"269":1,"308":1,"372":1,"395":3,"408":2,"409":1,"438":1,"443":1,"463":2,"465":1,"475":2,"476":1,"477":1,"490":1,"492":1,"493":1,"497":2,"516":1,"522":2,"523":1,"543":6,"547":3,"549":1,"607":1,"609":2,"611":1,"833":1,"867":1,"950":1,"1016":1,"1096":1,"1104":1,"1114":1,"1212":4,"1259":1,"1301":1,"1309":1,"1311":1,"1324":6,"1394":1,"1395":12,"1415":1,"1436":3,"1465":1,"1467":1,"1473":1,"1478":1,"1496":6,"1515":1,"1585":1,"1591":1,"1600":1,"1611":1,"1631":1,"1671":1,"1737":1,"2074":1,"2081":1,"2128":1,"2160":1,"2234":1}}],["superseding",{"3":{"0":2,"1":1,"130":1,"495":1,"1287":1,"1527":1,"2087":1}}],["suppose",{"3":{"1859":1}}],["supposedly",{"3":{"2083":1}}],["supposed",{"3":{"141":1,"673":1,"765":1,"789":1,"1019":1,"1323":2,"1359":1,"1427":1,"1455":1,"1803":1,"1906":1,"1952":1,"2043":1,"2051":1,"2101":1,"2132":1,"2137":1,"2149":1,"2156":1}}],["supportapiclient",{"3":{"1653":1,"1702":1}}],["supportemail",{"3":{"1359":1}}],["supporter",{"3":{"1350":1}}],["supportedversions",{"3":{"1311":1,"1436":2}}],["supportedincludes",{"3":{"1310":6,"1865":1}}],["supportedfk",{"3":{"1199":2,"1207":1}}],["supportedchild",{"3":{"1199":2,"1207":1}}],["supportedculturestests",{"3":{"1199":1,"1207":2,"1438":2}}],["supportedcultures",{"2":{"265":1,"268":1,"2088":1},"3":{"265":8,"268":1,"1199":15,"1203":1,"1207":2,"1237":2,"1311":15,"1324":11,"1415":7,"1417":5,"1436":12,"1438":1,"1496":3,"1577":1,"1653":1,"2085":4,"2087":1,"2088":1}}],["supportedoperators",{"2":{"330":1,"331":1},"3":{"330":1,"331":1,"1241":2,"1247":10,"1988":1}}],["supported",{"0":{"1713":1},"2":{"31":3},"3":{"0":1,"31":3,"148":1,"170":1,"216":1,"265":1,"330":1,"350":1,"351":1,"352":1,"448":3,"501":1,"549":1,"550":1,"572":1,"682":1,"741":1,"1033":1,"1050":2,"1108":1,"1132":2,"1212":2,"1213":1,"1229":1,"1237":1,"1241":1,"1243":2,"1244":1,"1247":8,"1259":1,"1271":1,"1277":1,"1278":1,"1286":13,"1300":5,"1301":1,"1310":4,"1311":17,"1323":1,"1324":4,"1336":1,"1339":6,"1359":4,"1376":1,"1380":3,"1395":1,"1404":1,"1405":1,"1416":1,"1417":9,"1436":9,"1438":1,"1443":1,"1444":1,"1467":1,"1487":1,"1488":1,"1500":1,"1534":1,"1559":3,"1567":1,"1577":1,"1591":1,"1627":1,"1632":1,"1640":3,"1641":1,"1667":1,"1670":1,"1674":1,"1711":1,"1727":1,"1729":1,"1734":1,"1761":1,"1860":1,"1867":1,"1868":1,"1902":1,"1977":1,"1978":1,"1979":1,"1988":1,"2056":1,"2085":1,"2133":3,"2135":1,"2144":1,"2151":1,"2234":1}}],["supporting",{"0":{"1268":1},"3":{"659":1,"683":1,"845":1,"1247":2,"1272":1,"1284":1,"1286":2,"1287":1,"1311":1,"1312":1,"1324":1,"1346":1,"1350":1,"1415":1,"1432":1,"1436":1,"1488":1,"1763":1,"1774":1}}],["supportshttpstrafficonly",{"3":{"1467":1}}],["supportsrelationaloperator",{"3":{"1286":1}}],["supportstransactions",{"2":{"1840":1},"3":{"988":1,"1286":1,"1840":1}}],["supportsoutbox",{"2":{"720":1,"1174":1,"1175":1,"1178":1},"3":{"166":1,"715":1,"720":1,"1174":1,"1175":1,"1178":1,"1496":1}}],["supports",{"3":{"0":1,"10":1,"57":1,"449":1,"527":1,"528":1,"618":1,"640":1,"642":1,"845":1,"846":1,"891":1,"1019":1,"1048":1,"1050":1,"1237":1,"1241":1,"1247":2,"1270":1,"1286":2,"1300":2,"1323":1,"1326":1,"1339":1,"1340":1,"1342":1,"1350":2,"1359":5,"1395":1,"1396":3,"1417":2,"1436":1,"1456":1,"1467":1,"1488":1,"1534":1,"1551":1,"1629":1,"1631":1,"1639":1,"1675":1,"1764":1,"1773":1,"1799":1,"1815":1,"1827":1,"1834":1,"1895":1,"2131":1}}],["supportsifmatchattributetests",{"3":{"1199":1,"1207":2,"1438":2}}],["supportsifmatchattribute",{"2":{"341":1,"922":1,"1375":1,"1651":1,"1874":1},"3":{"341":4,"343":1,"345":1,"922":1,"1199":22,"1203":1,"1207":2,"1286":1,"1300":3,"1311":17,"1347":1,"1350":2,"1359":17,"1375":1,"1380":16,"1402":9,"1496":1,"1651":2,"1874":1}}],["supportsifmatch",{"2":{"343":1,"346":1,"1635":1,"1876":1},"3":{"0":2,"341":1,"343":2,"346":1,"922":1,"1212":1,"1286":1,"1311":4,"1350":1,"1359":2,"1373":1,"1375":1,"1380":5,"1402":5,"1438":2,"1635":1,"1651":1,"1664":1,"1666":1,"1874":1,"1876":2}}],["support",{"0":{"1347":1,"1359":1,"1376":1,"1390":1},"1":{"1711":1,"1712":1,"1713":1,"1714":1,"1715":1,"1716":1},"2":{"1646":1,"1649":1,"1650":5,"1657":1,"1697":2,"1698":1,"1699":1,"1727":2,"1728":2,"2091":1},"3":{"0":4,"12":1,"24":1,"109":1,"150":1,"166":2,"243":1,"363":1,"447":1,"461":1,"552":1,"556":1,"633":1,"650":1,"690":1,"743":1,"800":1,"812":1,"845":1,"848":1,"853":1,"904":1,"931":1,"980":2,"1019":1,"1052":1,"1073":1,"1074":2,"1075":3,"1077":2,"1175":2,"1192":1,"1202":1,"1203":1,"1207":66,"1208":2,"1211":1,"1232":1,"1237":2,"1247":2,"1257":2,"1259":2,"1270":3,"1279":1,"1286":19,"1300":4,"1311":3,"1324":2,"1340":1,"1342":1,"1350":5,"1351":1,"1359":16,"1376":1,"1380":3,"1395":12,"1396":1,"1405":1,"1415":2,"1416":1,"1417":5,"1428":2,"1429":3,"1430":1,"1436":59,"1438":6,"1467":1,"1487":1,"1488":3,"1490":2,"1492":3,"1496":2,"1558":1,"1567":1,"1577":2,"1582":1,"1602":1,"1629":3,"1630":2,"1631":2,"1635":1,"1638":1,"1639":1,"1640":2,"1641":2,"1646":1,"1649":1,"1650":5,"1653":3,"1654":2,"1656":5,"1657":2,"1665":1,"1673":1,"1674":1,"1685":2,"1697":3,"1698":2,"1699":1,"1711":1,"1716":1,"1727":4,"1728":2,"1774":1,"1873":1,"1891":1,"1898":1,"1951":1,"1974":1,"2075":1,"2091":1,"2116":1,"2130":1,"2131":1,"2133":1,"2135":2,"2143":1,"2202":1,"2222":1,"2236":1}}],["suppresswhenunderprobe",{"3":{"1339":2}}],["suppressnextlocationchanged",{"3":{"1324":2}}],["suppressfinalize",{"3":{"1324":2,"1396":3}}],["suppressible",{"3":{"1286":2}}],["suppressing",{"3":{"1286":2,"1339":1,"1436":1,"1438":1,"1443":2,"1450":1,"1639":1}}],["suppression",{"3":{"0":2,"258":1,"370":1,"371":1,"619":1,"726":1,"774":2,"941":1,"980":1,"982":2,"1108":1,"1111":1,"1133":1,"1237":5,"1259":5,"1266":1,"1270":2,"1271":1,"1273":1,"1286":5,"1300":6,"1309":2,"1311":5,"1323":5,"1324":6,"1339":16,"1350":1,"1359":2,"1395":4,"1396":2,"1415":2,"1416":3,"1417":2,"1427":1,"1436":7,"1441":2,"1453":1,"1487":1,"1488":1,"1490":1,"1496":1,"1586":1,"1591":1,"2058":1}}],["suppressions",{"3":{"0":2,"371":1,"776":1,"980":1,"981":2,"982":2,"1237":2,"1311":1,"1324":1,"1417":1,"1488":1,"1552":1,"1577":1,"1591":1,"1600":1,"2081":1}}],["suppressmessageattribute",{"3":{"1237":1,"1324":1}}],["suppressmessage",{"2":{"1270":1,"1324":1,"1415":1},"3":{"142":1,"980":1,"1229":1,"1247":1,"1270":5,"1286":2,"1300":4,"1311":3,"1312":1,"1323":2,"1324":6,"1369":1,"1380":1,"1396":1,"1415":1,"1427":2,"1436":4,"1496":1}}],["suppress",{"3":{"135":1,"231":1,"790":1,"1108":1,"1273":1,"1286":1,"1309":1,"1461":1,"1526":1,"1591":2,"1600":1,"1933":1,"2044":1,"2162":1,"2168":1}}],["suppresses",{"3":{"18":1,"216":1,"225":1,"733":1,"819":1,"1034":1,"1256":1,"1259":1,"1271":1,"1286":3,"1309":1,"1324":2,"1339":2,"1359":1,"1396":1,"1402":1,"1415":1,"1436":2,"1467":1,"1596":1,"1677":1,"2152":1,"2159":1}}],["suppressed",{"3":{"0":4,"130":1,"135":1,"265":1,"370":2,"454":1,"674":1,"692":1,"726":1,"790":1,"939":1,"941":1,"980":2,"983":1,"1044":1,"1212":1,"1241":1,"1259":2,"1270":1,"1273":1,"1286":2,"1309":1,"1312":2,"1323":1,"1324":3,"1339":2,"1387":1,"1395":3,"1415":1,"1416":2,"1417":2,"1427":1,"1453":2,"1496":1,"1526":1,"1569":1,"1577":1,"1591":2,"1841":1,"1897":1,"1934":1,"1955":1,"2159":1,"2194":1}}],["supplements",{"3":{"1395":1}}],["supplementary",{"3":{"1389":1,"1630":1}}],["supplemental",{"3":{"1286":1}}],["supplementation",{"3":{"1286":1}}],["supplied",{"1":{"154":1,"155":1,"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":1},"3":{"0":2,"31":1,"103":1,"109":1,"111":1,"154":1,"157":2,"175":1,"186":2,"190":1,"231":1,"265":1,"318":2,"330":1,"332":1,"350":2,"359":1,"378":1,"381":1,"397":1,"409":1,"423":1,"427":1,"443":2,"549":1,"599":1,"649":1,"674":1,"733":1,"795":1,"861":1,"905":1,"1059":2,"1091":1,"1115":2,"1116":1,"1132":1,"1184":1,"1228":1,"1229":4,"1237":2,"1239":1,"1242":2,"1247":15,"1270":3,"1271":12,"1282":1,"1285":1,"1286":19,"1289":1,"1300":20,"1301":4,"1306":2,"1309":7,"1310":1,"1311":18,"1323":9,"1324":16,"1334":1,"1339":9,"1343":3,"1349":1,"1350":15,"1352":1,"1355":1,"1359":61,"1369":2,"1378":1,"1380":6,"1395":10,"1396":17,"1402":7,"1415":14,"1416":2,"1417":5,"1421":1,"1423":1,"1424":1,"1425":1,"1427":2,"1429":2,"1432":1,"1436":24,"1438":4,"1467":2,"1526":2,"1534":1,"1631":1,"1663":1,"1748":1,"1764":1,"1765":2,"1767":1,"1805":1,"1830":1,"1831":1,"1909":1,"1912":1,"1937":1,"1950":1,"1977":1,"1988":1,"1989":1,"1991":1,"1995":1,"2001":1,"2003":1,"2133":1,"2138":1,"2198":1,"2203":1}}],["supplies",{"3":{"0":3,"5":1,"25":1,"31":1,"67":1,"79":1,"132":1,"150":1,"157":1,"166":1,"186":2,"230":1,"235":1,"265":1,"266":1,"269":1,"310":2,"318":1,"350":1,"398":1,"413":1,"415":1,"448":2,"460":1,"461":1,"507":1,"544":1,"572":4,"583":1,"603":1,"609":1,"610":1,"633":1,"639":1,"648":1,"653":1,"674":1,"683":1,"724":1,"725":2,"731":1,"799":1,"827":1,"836":1,"846":1,"881":1,"922":1,"923":1,"946":1,"972":1,"1018":3,"1050":3,"1059":1,"1074":1,"1083":2,"1108":1,"1161":3,"1184":1,"1237":4,"1247":4,"1257":1,"1258":1,"1259":5,"1265":1,"1269":1,"1270":12,"1271":3,"1286":13,"1289":1,"1300":12,"1301":3,"1302":1,"1303":1,"1304":1,"1305":2,"1309":7,"1310":1,"1311":15,"1323":11,"1324":21,"1326":1,"1328":1,"1333":1,"1336":1,"1338":1,"1339":6,"1350":3,"1352":1,"1354":1,"1355":1,"1359":54,"1360":1,"1369":4,"1380":4,"1383":1,"1395":25,"1396":10,"1402":2,"1406":2,"1407":1,"1409":1,"1410":1,"1412":1,"1414":1,"1415":22,"1416":5,"1417":6,"1427":3,"1431":1,"1435":1,"1436":98,"1438":2,"1467":1,"1488":3,"1489":2,"1490":1,"1526":1,"1651":1,"1654":1,"1666":2,"1685":1,"1686":1,"1708":1,"1765":1,"1810":3,"1815":1,"1817":1,"1856":1,"1889":1,"1891":1,"1897":1,"1898":1,"1908":1,"1917":1,"1932":1,"1937":1,"1940":1,"1945":1,"1995":1,"1996":2,"1998":1,"2011":1,"2043":1,"2044":5,"2045":1,"2056":3,"2074":1,"2087":1,"2113":1,"2116":1,"2133":2,"2140":1,"2144":1,"2174":1}}],["supplyparameterfromqueryattribute",{"3":{"1436":1}}],["supplyparameterfromquery",{"3":{"1324":3,"1395":1,"1436":3,"1526":1}}],["supplying",{"3":{"136":1,"341":1,"470":1,"640":1,"854":1,"1004":1,"1214":1,"1259":1,"1286":2,"1297":1,"1309":2,"1311":6,"1323":2,"1324":3,"1338":1,"1350":1,"1359":12,"1386":1,"1395":3,"1396":2,"1415":2,"1417":2,"1431":2,"1436":13,"1496":1,"1765":1,"1957":1,"2098":1}}],["supply",{"0":{"1569":1,"1673":1,"1738":1},"1":{"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1},"3":{"0":3,"117":1,"216":1,"314":1,"367":1,"369":3,"370":1,"371":1,"373":1,"376":2,"499":1,"529":1,"532":1,"548":1,"583":1,"590":1,"591":1,"592":1,"595":1,"599":1,"603":1,"625":1,"626":1,"756":1,"765":1,"870":1,"874":1,"922":1,"1017":1,"1058":1,"1070":1,"1110":1,"1162":1,"1168":1,"1212":1,"1214":1,"1216":1,"1247":1,"1249":1,"1259":1,"1265":2,"1270":1,"1286":6,"1300":5,"1301":1,"1311":7,"1323":4,"1324":10,"1326":1,"1339":6,"1342":1,"1350":1,"1359":5,"1362":1,"1369":2,"1371":2,"1380":6,"1395":4,"1396":1,"1402":2,"1415":3,"1417":7,"1430":1,"1431":1,"1433":1,"1436":19,"1443":1,"1445":2,"1450":1,"1453":2,"1454":3,"1455":2,"1459":7,"1460":1,"1461":3,"1463":1,"1465":1,"1467":1,"1475":1,"1483":1,"1486":3,"1488":1,"1489":1,"1491":1,"1493":1,"1499":1,"1526":11,"1534":1,"1535":1,"1576":1,"1577":2,"1586":1,"1591":6,"1600":1,"1649":1,"1651":1,"1673":1,"1723":1,"1782":1,"1796":1,"1799":1,"1810":1,"1851":1,"1875":1,"1891":1,"1896":1,"1983":1,"2043":1,"2103":1,"2106":1,"2116":1,"2152":1,"2154":1,"2234":1}}],["subrequests",{"3":{"1969":1}}],["subdirectories",{"3":{"1464":1}}],["subdomains",{"3":{"1339":1}}],["subdomain",{"3":{"698":1,"1184":1}}],["suburbs",{"3":{"1350":1,"1359":2}}],["subgroup",{"3":{"1347":1}}],["subverted",{"3":{"1286":1}}],["subagent",{"3":{"1011":1}}],["subfolders",{"3":{"607":1,"693":1}}],["submissions",{"3":{"1347":1,"1350":5,"1359":3,"1396":1,"1402":3,"1467":2,"1635":3,"1637":1,"1638":3}}],["submission",{"0":{"1481":1},"3":{"173":1,"179":1,"1018":1,"1324":1,"1350":2,"1359":2,"1360":1,"1366":2,"1369":1,"1380":3,"1395":1,"1396":3,"1399":1,"1401":1,"1402":6,"1415":1,"1436":1,"1447":1,"1467":1,"1471":1,"1481":3,"1482":1,"1483":1,"1623":1,"1629":1,"1630":2,"1631":3,"1632":4,"1638":3,"1639":4,"1640":6,"1764":1,"1765":1,"1767":1,"2000":1,"2002":1,"2202":1}}],["submitbutton",{"3":{"1436":2}}],["submitbuttontext",{"3":{"1396":1}}],["submitanswerasync",{"3":{"1396":6}}],["submitanswersasync",{"3":{"1396":11}}],["submitasync",{"3":{"1396":2,"1402":1}}],["submitfailed",{"3":{"1396":1}}],["submitfeedback",{"3":{"1396":2}}],["submitfeedbackasync",{"3":{"1396":3}}],["submitter",{"3":{"1398":1,"1402":1,"1632":1}}],["submittedquestions",{"3":{"1396":1,"1415":3}}],["submittedonutc",{"3":{"1350":2,"1396":2}}],["submitted",{"3":{"280":1,"282":1,"285":1,"690":1,"1018":2,"1238":1,"1247":1,"1300":2,"1323":5,"1324":3,"1349":1,"1350":11,"1359":13,"1366":1,"1369":2,"1380":3,"1395":3,"1396":12,"1398":1,"1399":1,"1402":5,"1410":1,"1415":4,"1436":1,"1438":1,"1455":1,"1534":1,"1629":1,"1630":1,"1631":1,"1632":3,"1638":1,"1639":2,"1640":5,"1765":1,"2000":1,"2001":2,"2003":2}}],["submittingwithoutatoken",{"3":{"1436":1}}],["submitting",{"3":{"1300":2,"1307":1,"1359":8,"1380":1,"1396":3,"1402":3,"1561":1,"1630":1,"1631":1,"1638":2,"1639":1,"1640":1,"1946":1,"1999":1}}],["submitreviewhandler",{"3":{"552":1,"1767":2}}],["submitquestionasync",{"3":{"1402":1}}],["submitquestionrequest",{"3":{"1199":8,"1203":1,"1207":2,"1396":3,"1402":8}}],["submitquestioncommandvalidatortests",{"3":{"1199":1,"1207":2}}],["submitquestioncommandvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1402":10}}],["submitquestioncommand",{"2":{"523":1},"3":{"1199":5,"1203":1,"1207":2,"1402":9}}],["submitquestionhandlertests",{"3":{"1199":1,"1207":3,"1436":1}}],["submitquestionhandler",{"2":{"522":1,"523":1,"524":1,"899":1,"900":1,"996":1,"1102":1,"1534":1},"3":{"0":2,"493":1,"494":1,"495":1,"522":2,"523":3,"524":3,"897":2,"899":2,"900":1,"996":2,"1100":2,"1102":2,"1199":1,"1203":1,"1207":2,"1247":2,"1350":4,"1359":2,"1396":5,"1399":8,"1402":20,"1436":2,"1496":1,"1534":1}}],["submit",{"3":{"160":1,"493":1,"494":1,"495":1,"522":1,"523":1,"524":1,"552":1,"897":3,"899":1,"900":1,"994":2,"996":4,"1100":1,"1203":3,"1207":6,"1247":2,"1265":1,"1270":1,"1300":1,"1324":13,"1359":14,"1369":1,"1373":1,"1380":7,"1395":10,"1396":33,"1397":1,"1399":1,"1402":34,"1415":2,"1436":15,"1467":1,"1488":6,"1526":3,"1534":1,"1561":3,"1591":1,"1607":1,"1608":1,"1626":1,"1627":1,"1632":4,"1638":1,"1639":1,"1640":1,"1741":1,"1742":1,"1746":1,"1748":1,"1765":2}}],["submitsitasthestoredset",{"3":{"1436":1}}],["submitscanasync",{"3":{"1396":1}}],["submits",{"3":{"156":1,"1349":1,"1350":3,"1352":1,"1369":1,"1380":1,"1395":1,"1396":2,"1399":1,"1402":2,"1432":1,"1436":6,"1488":1,"1632":3,"1765":2}}],["subtitled",{"3":{"1395":2}}],["subtitles",{"3":{"1395":1,"1480":1}}],["subtitle",{"3":{"1395":1,"1480":2,"1780":1,"1788":1,"1794":1,"1803":1,"1808":1,"1813":1,"1818":1,"1828":1,"1835":1,"1847":1,"1854":1,"1863":1,"1869":1,"1878":1,"1887":1,"1893":1,"1900":1,"1906":1,"1913":1,"1925":1,"1931":1,"1942":1,"1951":1,"1960":1,"1966":1,"1973":1,"1980":1,"1986":1,"1993":1,"1999":1,"2004":1,"2016":1,"2030":1,"2040":1,"2051":1,"2062":1,"2072":1,"2083":1,"2089":1,"2101":1,"2111":1,"2118":1,"2126":1,"2131":1,"2136":1,"2142":1,"2149":1,"2156":1,"2163":1,"2172":1,"2183":1,"2196":1,"2206":1}}],["subtitle2",{"3":{"1324":1}}],["subtitle1",{"3":{"1324":1}}],["subtag",{"3":{"1311":2}}],["subtrees",{"3":{"1487":3}}],["subtree",{"3":{"1286":1,"1333":1,"1339":2,"1436":1,"1443":1,"1487":2}}],["subtract",{"3":{"1395":1}}],["subtracted",{"3":{"1369":1}}],["subtracts",{"3":{"742":1,"1286":1,"1300":1,"1323":1,"1436":2,"1749":1}}],["subtractive",{"3":{"1300":1}}],["subtraction",{"3":{"741":1,"1019":1,"1359":1,"1362":1,"1369":1}}],["subtracting",{"3":{"137":1}}],["subtype",{"3":{"1259":1}}],["subtypes",{"3":{"1229":3,"1807":1}}],["subtly",{"3":{"274":1,"840":1,"1051":1,"1359":3,"1436":2,"1479":1,"1828":1,"2084":1}}],["subtlest",{"3":{"1291":1,"1300":1,"1339":1,"1417":1}}],["subtleties",{"3":{"1286":1,"1436":1}}],["subtlety",{"3":{"97":1,"1252":1,"1300":1,"1320":1,"1328":1,"1339":1,"1348":1,"1395":1,"1405":1,"1415":1,"1416":1,"1436":1,"1881":1}}],["subtle",{"3":{"574":1,"800":1,"862":1,"1229":1,"1247":3,"1258":1,"1259":2,"1262":1,"1270":1,"1274":1,"1286":1,"1300":1,"1309":3,"1311":2,"1323":3,"1324":4,"1332":1,"1350":3,"1359":1,"1380":1,"1395":1,"1396":3,"1415":1,"1436":5,"1454":1,"1815":1,"1818":1,"1822":1,"1862":1,"1881":1,"1886":1,"2042":1,"2076":1,"2120":1,"2138":1,"2241":1}}],["subtler",{"3":{"133":1,"610":1,"1237":1,"1332":1,"1417":1,"2102":1,"2108":1}}],["subquery",{"3":{"24":1,"1237":1,"1259":1,"1286":1,"1309":3,"1401":1,"1402":2}}],["sub",{"1":{"1942":1,"1943":1,"1944":1,"1945":1,"1946":1,"1947":1,"1948":1,"1949":1,"1950":1},"2":{"298":1,"910":1},"3":{"0":6,"68":1,"157":1,"161":1,"175":1,"259":1,"298":1,"303":3,"318":2,"324":1,"379":1,"413":1,"416":1,"493":1,"497":1,"545":1,"709":1,"905":3,"910":1,"954":1,"1004":1,"1006":1,"1011":1,"1018":4,"1019":1,"1042":1,"1238":1,"1269":1,"1270":1,"1286":2,"1288":2,"1289":1,"1296":2,"1300":19,"1311":2,"1323":1,"1324":2,"1332":1,"1339":3,"1350":3,"1359":2,"1362":1,"1366":1,"1369":3,"1371":1,"1372":1,"1380":3,"1395":2,"1396":3,"1415":2,"1432":1,"1436":12,"1474":1,"1488":1,"1492":1,"1526":3,"1529":1,"1530":1,"1531":1,"1532":1,"1535":1,"1582":1,"1585":1,"1594":1,"1600":1,"1747":1,"1765":1,"1771":1,"1779":1,"1815":1,"1908":1,"1942":1,"1957":1,"1982":1,"1996":1,"2034":1,"2038":1,"2044":1,"2140":1,"2188":1,"2210":1}}],["subclassable",{"3":{"622":1,"1286":1}}],["subclasses",{"3":{"0":8,"27":2,"76":1,"124":1,"130":1,"137":1,"139":1,"140":1,"147":1,"160":1,"281":1,"283":1,"305":1,"314":1,"465":1,"523":1,"549":1,"572":3,"573":1,"575":1,"577":1,"578":5,"609":1,"618":2,"631":2,"632":1,"635":1,"707":1,"723":1,"725":3,"741":1,"744":1,"749":1,"751":1,"809":1,"846":1,"881":1,"884":1,"905":1,"912":1,"964":1,"973":1,"976":1,"1004":1,"1018":2,"1074":2,"1091":1,"1136":1,"1161":1,"1162":1,"1163":1,"1168":1,"1212":1,"1214":1,"1231":1,"1237":3,"1247":6,"1252":1,"1259":5,"1262":1,"1265":1,"1270":7,"1271":1,"1286":5,"1300":7,"1311":5,"1312":1,"1322":1,"1323":4,"1324":6,"1354":1,"1359":8,"1384":1,"1395":4,"1398":1,"1402":1,"1406":1,"1409":1,"1415":4,"1418":1,"1427":2,"1429":1,"1431":2,"1436":54,"1438":2,"1476":1,"1487":3,"1488":2,"1489":8,"1496":2,"1526":3,"1577":5,"1582":2,"1654":1,"1666":1,"1826":1,"1857":1,"1896":1,"1983":1,"1990":1,"2001":1,"2043":1,"2056":3,"2058":1,"2103":1,"2106":1,"2107":1,"2109":1,"2113":1,"2140":1,"2234":1}}],["subclassed",{"3":{"0":3,"51":1,"80":1,"130":1,"265":1,"302":1,"572":4,"573":1,"574":1,"578":2,"638":1,"723":1,"972":1,"1050":1,"1054":1,"1161":1,"1168":1,"1247":1,"1259":1,"1270":3,"1286":1,"1300":1,"1310":1,"1311":3,"1323":9,"1359":1,"1395":4,"1396":1,"1430":1,"1436":71,"1488":3,"1489":2,"1526":1,"1576":1,"1577":2,"1582":1,"1583":1,"1586":2,"2043":1,"2056":1,"2103":1,"2133":1,"2180":1}}],["subclassing",{"3":{"0":2,"534":1,"545":1,"611":1,"619":1,"1075":1,"1247":2,"1270":1,"1271":2,"1310":1,"1311":3,"1323":3,"1359":3,"1402":3,"1416":1,"1436":2,"1488":3,"1489":1,"1577":1,"1654":1,"1667":1,"1815":1,"1891":1,"2110":1}}],["subclass",{"0":{"1406":1,"2106":1},"3":{"0":10,"27":1,"47":1,"54":1,"80":1,"109":1,"128":1,"134":1,"135":3,"136":2,"139":1,"142":1,"147":1,"218":1,"233":1,"235":2,"281":1,"283":1,"310":4,"341":1,"350":1,"351":1,"352":1,"446":1,"448":4,"449":1,"450":2,"455":1,"459":2,"461":1,"463":1,"465":1,"497":2,"498":1,"499":1,"500":1,"518":1,"523":2,"536":3,"540":1,"545":1,"551":1,"572":8,"573":1,"574":2,"575":1,"577":1,"585":2,"607":1,"609":3,"610":1,"611":1,"614":1,"616":1,"618":1,"631":2,"635":1,"640":1,"706":1,"720":1,"723":1,"724":1,"725":8,"726":1,"727":1,"749":2,"813":1,"814":1,"855":1,"881":3,"884":1,"905":2,"907":1,"909":1,"910":1,"914":2,"920":1,"922":1,"924":1,"926":3,"954":3,"956":1,"957":1,"960":2,"972":1,"973":1,"974":1,"1004":1,"1005":2,"1048":1,"1050":1,"1054":1,"1058":1,"1059":2,"1065":1,"1067":1,"1069":1,"1081":1,"1083":2,"1091":2,"1100":1,"1133":2,"1135":2,"1137":1,"1161":3,"1168":2,"1169":1,"1171":1,"1226":1,"1229":2,"1237":2,"1244":2,"1247":6,"1252":1,"1259":10,"1265":1,"1270":21,"1271":1,"1272":1,"1282":1,"1286":13,"1289":2,"1290":1,"1300":11,"1310":6,"1311":20,"1312":1,"1318":2,"1322":1,"1323":31,"1324":5,"1334":1,"1339":5,"1353":1,"1359":49,"1369":2,"1380":6,"1384":1,"1395":10,"1396":3,"1402":3,"1406":3,"1407":2,"1410":1,"1411":1,"1412":1,"1413":2,"1414":1,"1415":22,"1416":2,"1417":2,"1427":2,"1428":1,"1429":3,"1431":2,"1432":1,"1433":1,"1435":1,"1436":263,"1438":9,"1443":1,"1467":1,"1488":4,"1489":7,"1490":1,"1491":2,"1496":1,"1525":1,"1526":7,"1532":1,"1577":1,"1582":1,"1585":1,"1591":5,"1653":1,"1654":2,"1660":1,"1671":2,"1689":1,"1699":1,"1727":1,"1782":1,"1810":1,"1815":2,"1816":1,"1849":1,"1865":1,"1875":1,"1898":1,"1977":1,"1978":2,"1982":1,"1983":1,"1991":1,"2001":1,"2044":5,"2045":3,"2047":3,"2056":1,"2057":1,"2103":1,"2104":1,"2105":1,"2106":2,"2109":1,"2133":7,"2134":2,"2135":1,"2167":2,"2169":1,"2182":1,"2198":1,"2199":1,"2203":1}}],["subjective",{"3":{"1801":1}}],["subjects",{"3":{"1436":7,"1455":1,"2064":1}}],["subjectsnapshot",{"3":{"1199":2,"1207":1}}],["subjectkey",{"3":{"0":1,"690":2,"1212":1,"1396":22,"1415":2,"1631":2}}],["subject",{"0":{"1299":1},"1":{"722":1,"723":1,"724":1,"725":1,"726":1,"727":1,"728":1,"729":1},"2":{"31":1,"303":1,"1299":1,"2140":1},"3":{"0":5,"31":1,"38":1,"39":3,"41":2,"42":2,"95":1,"96":1,"136":1,"137":1,"157":2,"159":1,"161":1,"173":2,"175":1,"181":1,"230":1,"303":1,"358":1,"583":1,"585":1,"625":1,"690":2,"691":3,"692":1,"693":1,"698":1,"700":1,"716":1,"722":1,"724":4,"725":6,"727":3,"745":1,"765":1,"766":1,"868":1,"896":2,"905":1,"976":1,"1026":1,"1028":1,"1044":1,"1199":6,"1207":1,"1212":1,"1229":1,"1236":3,"1237":8,"1270":2,"1277":1,"1283":1,"1286":3,"1299":4,"1300":29,"1308":1,"1309":21,"1311":7,"1312":2,"1320":1,"1322":2,"1323":20,"1324":1,"1350":5,"1359":6,"1395":3,"1396":51,"1402":2,"1403":1,"1410":4,"1415":51,"1417":1,"1431":1,"1435":1,"1436":33,"1438":11,"1455":1,"1457":1,"1460":1,"1461":1,"1467":3,"1472":5,"1487":1,"1489":5,"1492":1,"1567":2,"1591":1,"1597":1,"1631":6,"1639":5,"1640":1,"1641":1,"1666":1,"1747":1,"1751":1,"1764":1,"1765":4,"1772":1,"1908":2,"1920":1,"1964":1,"1974":1,"2001":4,"2003":1,"2045":1,"2063":1,"2070":1,"2140":1,"2143":1,"2158":1,"2160":1,"2167":1,"2195":1,"2234":2,"2241":1}}],["subsuming",{"3":{"1436":1}}],["subsumes",{"3":{"1436":1,"1731":1}}],["subsequent",{"3":{"388":1,"390":1,"1247":2,"1259":1,"1286":2,"1311":2,"1324":1,"1359":1,"1456":1,"1475":1,"1491":1,"1630":1,"1635":3,"1639":1,"1641":1,"1908":1}}],["subsequently",{"3":{"91":1,"1324":1}}],["subsections",{"3":{"1467":1}}],["subsection",{"3":{"258":1,"1496":2}}],["subsets",{"3":{"0":1,"1242":1,"1247":1,"1324":1,"1348":1,"1350":2,"1436":2}}],["subset",{"3":{"0":1,"137":1,"140":1,"184":1,"186":1,"187":2,"741":1,"751":1,"954":1,"1215":1,"1242":1,"1244":1,"1245":1,"1247":6,"1259":1,"1271":1,"1286":3,"1300":6,"1332":1,"1350":1,"1373":1,"1377":2,"1380":8,"1396":4,"1405":1,"1409":1,"1415":6,"1417":1,"1486":1,"1496":4,"1526":1,"1560":1,"1614":1,"1617":1,"1618":1,"1621":2,"1627":1,"1955":1,"1961":1,"1963":1,"2077":1,"2113":1,"2152":2}}],["substantial",{"3":{"1436":1}}],["substantive",{"3":{"0":1,"77":1,"250":1,"251":1,"252":1,"257":1,"543":4,"1270":1,"1324":1,"1402":1}}],["substance",{"3":{"200":1,"256":1,"258":1,"464":1,"524":1,"703":1,"797":1,"875":1,"958":1,"1216":1,"1286":1,"1324":1,"1359":1,"1436":1,"1516":1,"1523":1,"1526":7,"1537":1,"1577":2,"1588":1,"1590":1,"1591":2,"1592":4,"1784":2,"1797":1}}],["substitutability",{"3":{"1237":1,"1270":1,"1286":2,"1300":1,"1359":1,"1417":3,"1427":1}}],["substitutable",{"3":{"641":1,"1309":1,"1395":1,"1417":1,"1436":1,"1538":1,"1842":1}}],["substituting",{"3":{"448":1,"545":1,"685":1,"1300":1,"1311":1,"1323":2,"1324":1,"1375":1,"1380":2,"1395":1,"1396":1,"1416":1,"1436":2,"1815":2}}],["substitutionpriority",{"2":{"1279":1},"3":{"1175":1,"1279":1,"1286":8}}],["substitutions",{"3":{"633":1}}],["substitution",{"0":{"170":1},"3":{"170":1,"543":1,"550":1,"1175":3,"1239":1,"1247":5,"1280":1,"1286":9,"1300":1,"1311":2,"1323":1,"1339":2,"1380":1,"1396":2,"1436":1,"1465":1,"1475":1,"1577":2,"1685":1,"1686":1,"1815":2,"1817":2,"1897":1,"1899":1,"1916":1,"2151":1,"2155":1}}],["substituteengine",{"3":{"1286":1}}],["substituteapiversioninurl",{"2":{"448":1},"3":{"448":1,"1311":1}}],["substituted",{"3":{"214":1,"359":1,"365":1,"369":1,"370":1,"838":1,"1237":1,"1247":1,"1259":1,"1286":2,"1324":1,"1336":1,"1339":1,"1350":1,"1359":3,"1375":1,"1380":3,"1395":1,"1396":1,"1436":4,"2144":1}}],["substitutes",{"3":{"170":1,"212":1,"954":1,"1279":1,"1280":2,"1286":9,"1300":1,"1309":2,"1312":1,"1323":1,"1324":4,"1339":1,"1359":2,"1380":1,"1396":1,"1417":3,"1436":3,"1438":2}}],["substitute",{"3":{"170":3,"546":1,"1034":1,"1177":1,"1259":1,"1286":8,"1311":2,"1324":5,"1359":1,"1362":1,"1368":1,"1373":1,"1395":1,"1396":2,"1417":1,"1481":1,"1646":1,"1897":1,"1993":1}}],["substituteunconfiguredengine",{"2":{"170":1,"1279":1},"3":{"170":1,"1279":1,"1286":1}}],["substrings",{"3":{"1311":1,"1395":1,"1436":2}}],["substring",{"3":{"0":1,"585":1,"633":2,"1270":1,"1286":1,"1339":1,"1359":2,"1395":1,"1415":1,"1436":5,"1455":1,"1686":1,"1727":2,"1731":1}}],["substrates",{"3":{"1438":1}}],["substrate",{"1":{"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"730":1,"731":1,"732":1,"733":1,"734":1,"735":1,"736":1,"737":1},"3":{"0":5,"124":1,"162":1,"239":1,"240":1,"241":2,"242":1,"243":3,"244":1,"247":3,"248":1,"253":3,"254":1,"259":3,"260":1,"282":1,"287":1,"730":1,"731":3,"733":5,"734":1,"735":2,"736":1,"737":2,"853":1,"1044":1,"1212":2,"1300":3,"1301":10,"1339":1,"1415":1,"1428":1,"1577":1,"1641":1,"1651":1,"1668":1,"1708":1,"1916":2,"1921":1,"2116":1,"2234":2}}],["subscribing",{"3":{"408":1,"784":2,"1323":1,"1324":2,"1339":1,"1350":4,"1359":1,"1396":4,"1417":2}}],["subscribers",{"3":{"1270":1,"1309":1,"1324":3,"1396":1,"1415":1,"1417":2,"1750":1}}],["subscriber",{"3":{"198":1,"382":1,"781":1,"783":1,"784":1,"1026":1,"1324":11,"1349":1,"1350":15,"1359":3,"1396":11,"1399":1,"1402":10,"1415":5,"1417":2,"1436":1,"1949":3}}],["subscribes",{"3":{"72":1,"273":1,"384":1,"391":1,"397":1,"404":1,"782":1,"790":1,"899":1,"1259":1,"1324":11,"1339":3,"1349":1,"1350":19,"1396":7,"1402":2,"1415":3,"1417":12,"1427":1,"1438":1,"1442":1,"1526":1,"1922":1,"2007":1,"2168":1,"2181":1}}],["subscribed",{"0":{"408":1},"3":{"0":1,"72":1,"255":1,"395":5,"400":1,"404":1,"407":1,"1259":1,"1302":1,"1309":4,"1324":3,"1339":2,"1402":1,"1417":1,"2007":1,"2158":2}}],["subscribe",{"3":{"0":1,"66":1,"273":1,"384":1,"404":1,"406":1,"819":1,"897":1,"1309":1,"1324":3,"1341":1,"1350":2,"1396":3,"1402":1,"1417":5,"1435":1,"1945":1,"2158":2,"2217":1,"2237":1,"2238":1,"2239":1}}],["subscription",{"2":{"1468":1,"1472":1},"3":{"0":1,"258":2,"259":1,"261":1,"276":1,"378":1,"384":1,"395":2,"400":1,"407":2,"408":3,"640":2,"641":1,"766":1,"767":1,"783":1,"784":1,"822":1,"900":1,"971":1,"973":2,"1323":1,"1324":12,"1327":1,"1339":2,"1396":5,"1400":2,"1401":1,"1402":9,"1415":2,"1417":7,"1436":4,"1438":2,"1440":1,"1443":1,"1455":2,"1463":1,"1465":1,"1466":1,"1467":6,"1468":1,"1470":2,"1472":2,"1474":1,"1476":1,"1484":2,"1950":1,"2044":1,"2075":1,"2158":2,"2161":1,"2182":1}}],["subscriptions",{"3":{"0":1,"380":1,"399":1,"1192":1,"1324":2,"1339":1,"1417":1,"1467":3,"1945":1}}],["subsystems",{"3":{"0":1,"1108":1,"1192":1,"1300":3,"1309":1,"1396":1}}],["subsystem",{"3":{"0":1,"165":1,"235":2,"237":1,"707":1,"1110":1,"1192":1,"1202":1,"1203":1,"1300":1,"1302":1,"1309":5,"1310":2,"1334":2,"1339":3,"1402":1,"1496":2,"1674":1,"1915":1}}],["surname",{"3":{"1311":1}}],["surround",{"3":{"2039":1}}],["surrounds",{"3":{"1904":1}}],["surrounding",{"3":{"139":1,"426":1,"490":1,"1300":2,"1311":1,"1323":1,"1324":2,"1350":1,"1359":4,"1380":1,"1395":1,"1396":6,"1415":2,"1416":1,"1417":1,"1436":2,"1438":1,"1728":1,"2060":1}}],["surrogate",{"3":{"1259":2,"1300":1,"1396":1,"1414":1,"1415":2}}],["surplus",{"3":{"1241":1,"1254":1,"1259":4,"1307":1,"1311":1}}],["surprisingly",{"3":{"1380":1}}],["surprising",{"3":{"692":1,"743":1,"1237":1,"1281":1,"1286":1,"1339":1,"1396":1,"1415":1,"1436":1,"1639":1,"2101":1}}],["surprises",{"3":{"1286":1,"1363":1,"1369":1,"1486":1,"1568":1,"1662":1}}],["surprise",{"3":{"399":1,"698":1,"741":1,"1093":1,"1229":1,"1286":3,"1311":2,"1339":2,"1350":2,"1395":1,"1406":1,"1415":2,"1455":1,"1679":1,"1686":1,"1881":1,"1885":1,"1955":1,"2047":1,"2067":1,"2161":1}}],["surprised",{"3":{"243":1,"1925":1,"1986":1}}],["surgically",{"3":{"1359":1}}],["surgical",{"3":{"1231":1,"1237":1}}],["surges",{"3":{"1457":1,"1526":1,"1679":1}}],["surgery",{"3":{"1011":1,"1012":1,"1436":1,"1496":1,"1571":1}}],["surge",{"3":{"0":1,"765":2,"766":3,"767":4,"769":1,"1212":1,"1457":5,"1461":2,"1467":4,"1469":1,"1476":1,"1525":1,"1526":4,"1530":1,"1531":2,"1532":1,"1534":1,"1591":3,"1597":1,"1678":2,"1679":1,"1680":1,"2234":1}}],["sure",{"3":{"215":1,"1300":1,"1324":1,"1436":1,"1877":1,"1930":1,"2107":1,"2152":1,"2155":1}}],["surfacing",{"3":{"39":1,"99":1,"501":1,"1259":1,"1263":1,"1271":1,"1286":1,"1300":1,"1311":2,"1312":1,"1323":1,"1324":3,"1339":1,"1350":2,"1383":1,"1395":3,"1396":2,"1402":4,"1417":1,"1427":2,"1436":1,"1984":1,"2074":1,"2222":1,"2234":1}}],["surfaced",{"3":{"39":2,"78":1,"265":1,"690":1,"729":1,"789":1,"846":1,"926":1,"1026":1,"1036":1,"1084":1,"1099":1,"1237":2,"1242":1,"1270":1,"1286":1,"1300":2,"1309":1,"1312":1,"1323":1,"1324":3,"1339":2,"1350":6,"1358":1,"1359":7,"1395":4,"1396":5,"1402":1,"1415":2,"1427":1,"1431":1,"1436":4,"1488":1,"1496":3,"1532":1,"1535":1,"1577":1,"1621":1,"1627":1,"1643":1,"1916":1,"1944":1,"1955":1,"2168":1,"2222":1}}],["surfaces",{"0":{"926":1},"3":{"0":5,"41":1,"43":1,"95":1,"109":1,"127":1,"189":1,"201":1,"215":1,"237":1,"245":1,"274":1,"300":2,"301":1,"303":1,"306":2,"340":1,"388":1,"390":1,"401":1,"441":1,"500":1,"514":1,"545":1,"550":1,"585":1,"612":1,"628":1,"648":1,"649":1,"650":1,"651":1,"688":1,"690":1,"732":1,"790":1,"802":1,"803":1,"861":1,"883":1,"913":1,"926":1,"966":1,"990":1,"996":1,"1004":1,"1043":1,"1051":1,"1212":2,"1247":2,"1259":2,"1263":1,"1270":6,"1271":1,"1276":1,"1278":1,"1286":9,"1287":1,"1297":1,"1300":8,"1301":2,"1307":1,"1309":1,"1310":1,"1311":7,"1323":1,"1324":18,"1339":6,"1347":1,"1350":2,"1352":1,"1355":1,"1356":1,"1359":23,"1379":1,"1380":1,"1388":1,"1394":1,"1395":15,"1396":33,"1397":1,"1401":1,"1402":16,"1415":4,"1416":4,"1417":6,"1433":2,"1434":1,"1436":18,"1438":7,"1444":1,"1447":1,"1454":1,"1456":1,"1467":2,"1487":1,"1488":1,"1489":1,"1496":1,"1526":6,"1531":2,"1532":2,"1534":1,"1535":1,"1576":1,"1577":1,"1582":1,"1591":2,"1596":1,"1627":2,"1636":1,"1651":1,"1698":1,"1714":2,"1760":1,"1800":1,"1869":1,"1923":1,"2009":1,"2038":1,"2076":1,"2077":1,"2079":1,"2085":2,"2115":1,"2129":1,"2139":1,"2140":2,"2155":1,"2234":3}}],["surface",{"0":{"1419":1,"1666":1,"1702":1,"2001":1,"2036":1,"2139":1},"1":{"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1,"977":1,"978":1,"979":1,"980":1,"981":1,"982":1,"983":1,"984":1,"1999":1,"2000":1,"2001":1,"2002":1,"2003":1},"3":{"0":16,"6":1,"24":1,"37":1,"42":1,"53":1,"54":2,"55":1,"58":2,"100":1,"103":1,"107":1,"109":1,"111":1,"121":1,"124":1,"130":1,"135":10,"138":1,"139":1,"141":1,"143":1,"145":2,"150":1,"162":1,"165":1,"166":1,"173":2,"177":2,"186":1,"189":1,"209":2,"210":1,"237":2,"256":1,"265":2,"275":1,"280":2,"287":1,"297":1,"299":1,"301":1,"305":1,"306":1,"314":1,"321":1,"329":1,"330":1,"331":1,"332":4,"334":1,"341":1,"349":1,"351":1,"355":1,"363":1,"384":1,"391":1,"398":1,"403":1,"415":2,"421":1,"435":1,"447":1,"450":1,"471":1,"474":1,"506":2,"507":1,"508":3,"513":1,"527":1,"543":1,"545":1,"547":1,"548":1,"549":2,"550":2,"551":2,"572":3,"583":2,"591":1,"609":1,"611":1,"617":1,"618":1,"649":1,"650":2,"674":2,"675":2,"676":1,"681":1,"682":2,"684":1,"690":2,"691":5,"692":1,"694":1,"700":3,"707":2,"715":2,"717":1,"723":1,"725":2,"727":1,"740":1,"741":1,"743":1,"745":1,"751":1,"773":1,"774":1,"775":2,"783":2,"784":1,"792":1,"795":1,"797":4,"799":1,"803":1,"804":1,"805":2,"806":1,"827":2,"832":1,"840":1,"848":1,"880":1,"881":1,"882":1,"885":1,"914":1,"920":3,"921":1,"942":1,"963":1,"964":3,"966":1,"968":1,"971":1,"976":1,"977":1,"979":2,"980":7,"981":1,"982":1,"983":1,"984":2,"988":1,"1008":1,"1020":1,"1025":1,"1043":1,"1044":1,"1048":1,"1049":2,"1051":1,"1052":3,"1053":1,"1054":1,"1055":2,"1059":3,"1073":1,"1074":1,"1076":1,"1091":1,"1118":1,"1132":1,"1133":2,"1134":1,"1187":1,"1192":1,"1202":1,"1203":1,"1212":4,"1213":1,"1217":1,"1220":1,"1227":1,"1229":6,"1237":3,"1238":1,"1247":7,"1248":1,"1249":1,"1256":1,"1259":4,"1263":1,"1270":9,"1271":1,"1275":1,"1276":2,"1277":1,"1278":1,"1280":1,"1285":1,"1286":33,"1290":1,"1291":1,"1297":2,"1299":2,"1300":34,"1301":3,"1309":15,"1310":1,"1311":43,"1312":8,"1316":1,"1318":3,"1320":1,"1323":16,"1324":60,"1332":2,"1336":1,"1338":1,"1339":8,"1348":2,"1350":18,"1354":1,"1356":2,"1357":1,"1358":1,"1359":49,"1366":1,"1367":1,"1368":1,"1369":8,"1370":2,"1371":2,"1373":2,"1375":1,"1380":11,"1381":2,"1392":1,"1395":41,"1396":65,"1401":2,"1402":22,"1403":2,"1406":2,"1409":3,"1414":2,"1415":41,"1416":9,"1417":17,"1421":1,"1429":1,"1431":3,"1436":73,"1437":1,"1438":11,"1443":1,"1445":1,"1449":1,"1450":1,"1453":1,"1454":1,"1455":2,"1465":1,"1467":2,"1476":2,"1487":2,"1488":2,"1492":1,"1496":4,"1524":1,"1526":2,"1531":1,"1534":1,"1570":1,"1577":7,"1585":4,"1591":2,"1597":1,"1599":2,"1626":1,"1627":1,"1630":1,"1631":2,"1640":1,"1642":1,"1644":2,"1662":2,"1665":1,"1673":2,"1686":1,"1715":1,"1716":1,"1720":1,"1748":1,"1761":1,"1771":1,"1781":1,"1792":1,"1815":1,"1848":1,"1852":1,"1868":1,"1876":1,"1929":5,"1930":2,"1932":1,"1936":1,"1938":1,"1940":1,"1941":1,"1958":1,"1971":2,"1985":1,"1986":1,"1987":3,"1988":2,"1989":1,"1991":3,"1998":1,"1999":1,"2001":1,"2002":1,"2003":3,"2008":2,"2013":1,"2018":1,"2036":1,"2038":1,"2039":2,"2042":1,"2045":1,"2052":2,"2056":1,"2080":1,"2081":1,"2087":2,"2102":1,"2108":1,"2116":2,"2124":2,"2127":1,"2131":1,"2139":1,"2161":1,"2170":1,"2171":1,"2174":1,"2175":1,"2193":1,"2195":2,"2202":1,"2203":1,"2204":1,"2205":2,"2210":2,"2212":1,"2234":6}}],["surveys",{"3":{"1074":1,"1629":1,"1639":1}}],["survey",{"3":{"1033":1,"1350":1,"1359":3,"1629":1,"1630":4,"1637":5,"1639":5,"1640":1}}],["surveyed",{"3":{"0":1,"1049":1,"1051":1}}],["survival",{"3":{"1359":1,"2170":1}}],["survivable",{"3":{"563":1,"698":1,"759":1,"1324":1,"1359":1,"1417":3,"2195":1}}],["survivor",{"3":{"1359":1,"1436":2}}],["survivors",{"3":{"1286":1,"1415":1}}],["surviving",{"1":{"1966":1,"1967":1,"1968":1,"1969":1,"1970":1,"1971":1,"1972":1},"3":{"0":1,"67":1,"122":1,"201":1,"497":1,"734":1,"856":1,"863":1,"1247":1,"1259":1,"1262":1,"1271":1,"1285":1,"1286":2,"1311":1,"1323":1,"1324":3,"1339":2,"1350":2,"1359":5,"1395":2,"1410":1,"1415":1,"1427":1,"1436":4,"1438":1,"1473":1,"1482":1,"1966":1,"2210":1}}],["survived",{"3":{"266":1,"839":1,"840":1,"908":1,"1359":2,"1415":1,"1989":1}}],["survive",{"0":{"1223":1,"2191":1},"3":{"0":2,"39":2,"49":1,"131":1,"166":1,"242":1,"265":1,"380":1,"390":1,"440":1,"490":1,"520":2,"610":1,"626":1,"708":1,"711":1,"846":1,"932":1,"933":1,"997":1,"1018":1,"1020":1,"1043":1,"1074":1,"1102":2,"1115":1,"1212":1,"1217":1,"1229":1,"1237":3,"1259":4,"1274":1,"1286":7,"1287":1,"1294":1,"1300":4,"1310":1,"1311":1,"1312":1,"1323":4,"1324":13,"1339":3,"1342":1,"1349":1,"1350":4,"1359":6,"1369":2,"1376":1,"1380":2,"1395":4,"1396":8,"1400":1,"1402":1,"1410":1,"1413":1,"1415":4,"1416":1,"1417":7,"1418":1,"1426":1,"1427":1,"1436":2,"1438":3,"1441":1,"1476":1,"1591":1,"1596":1,"1597":1,"1662":1,"1663":1,"1684":1,"1686":1,"1689":1,"1724":1,"1729":1,"1787":1,"1794":1,"1851":1,"1866":1,"1889":1,"1906":1,"1930":1,"1945":1,"1950":1,"1965":1,"2032":1,"2046":1,"2064":1,"2083":1,"2102":1,"2111":1,"2128":1,"2130":1,"2164":1,"2178":1,"2185":1,"2187":1,"2202":1,"2211":1}}],["survivesblockcommentsineveryposition",{"3":{"142":1,"1436":1}}],["survives",{"0":{"1307":1,"1866":1},"3":{"0":4,"24":1,"31":1,"91":1,"96":1,"101":1,"248":1,"458":1,"472":1,"497":1,"506":1,"524":1,"592":1,"633":1,"635":1,"638":1,"690":1,"699":1,"715":1,"716":1,"732":1,"783":1,"855":1,"862":1,"881":1,"897":1,"905":1,"988":2,"992":1,"996":2,"1018":1,"1019":1,"1054":1,"1093":1,"1115":1,"1116":1,"1212":3,"1237":1,"1239":1,"1247":4,"1250":1,"1251":1,"1259":4,"1270":5,"1274":1,"1286":10,"1287":1,"1288":1,"1300":7,"1301":2,"1304":1,"1309":3,"1311":5,"1312":1,"1318":1,"1323":8,"1324":16,"1333":1,"1336":1,"1337":1,"1339":2,"1350":1,"1357":1,"1359":14,"1369":1,"1379":1,"1380":2,"1395":9,"1396":9,"1402":1,"1415":8,"1416":3,"1417":5,"1427":1,"1436":11,"1441":1,"1453":1,"1454":1,"1486":1,"1492":2,"1566":1,"1651":1,"1664":1,"1699":1,"1715":1,"1727":1,"1790":1,"1792":1,"1815":1,"1840":1,"1852":1,"1858":1,"1863":1,"1923":1,"1933":1,"1943":1,"1965":1,"1972":1,"1984":1,"2011":1,"2025":1,"2048":1,"2078":1,"2091":1,"2115":1,"2123":1,"2159":1,"2162":1,"2167":1,"2181":1}}],["sovereignty",{"3":{"1567":1}}],["sonnet",{"3":{"1496":2}}],["sonaranalyzer",{"3":{"1213":1,"1395":2,"1417":1,"1453":1,"1903":1}}],["sonar",{"3":{"1133":1,"1237":2,"1266":1,"1270":1,"1300":2,"1309":1,"1312":1,"1369":1,"1380":1,"1395":1,"1436":1,"1577":1,"1673":1}}],["soak",{"3":{"1456":1}}],["sothecontractisnotvacuous",{"2":{"1436":1},"3":{"1436":1}}],["soi",{"3":{"1286":1,"2128":1}}],["sock",{"3":{"1430":1}}],["sockets",{"3":{"1300":1,"1339":2,"1436":1}}],["socketshttphandler",{"2":{"53":1,"100":1,"1329":1,"1450":1,"1663":1,"1677":1,"2007":1,"2012":1,"2015":1,"2020":1,"2031":1},"3":{"53":1,"100":1,"1312":4,"1324":2,"1329":1,"1339":11,"1380":1,"1416":3,"1441":1,"1443":2,"1450":1,"1663":1,"1677":1,"2007":1,"2012":1,"2015":1,"2020":1,"2031":1}}],["socket",{"3":{"0":2,"94":1,"95":1,"100":1,"109":1,"110":1,"235":1,"881":1,"1067":1,"1225":1,"1323":1,"1324":2,"1329":1,"1334":1,"1339":14,"1395":2,"1396":3,"1415":1,"1430":1,"1436":1,"1443":2,"1577":1,"1611":1,"1653":1,"1702":1}}],["socialsecuritynumber",{"2":{"364":1},"3":{"359":1,"364":1}}],["social",{"3":{"349":1,"657":1,"691":1,"1020":1,"1300":2,"1311":1,"1324":3,"1342":1,"1350":6,"1351":1,"1359":11,"1364":1,"1369":4,"1380":4,"1383":1,"1392":1,"1395":7,"1415":2,"1416":4,"1467":1,"1629":2,"1630":2,"1631":4,"1632":1,"1636":2,"1639":1,"1641":2,"1658":1,"1705":1,"1973":1,"1974":1,"1977":1,"1979":3,"2112":2}}],["southcentralus",{"3":{"1436":1}}],["southeast",{"3":{"975":1}}],["south",{"3":{"972":1,"1339":1,"1436":3,"1467":1,"2240":1}}],["sound",{"3":{"209":1,"659":1,"811":1,"1051":1,"1286":1,"1301":1,"1323":1,"1455":2,"1549":1,"1870":1,"1923":1,"1971":1,"1998":1}}],["sounds",{"3":{"136":1,"1150":1,"1286":1,"1339":1,"1799":1,"1951":1,"2131":1}}],["sourcing",{"1":{"1138":1,"1139":1,"1140":1,"1141":1,"1142":1,"1143":1,"1144":1,"1145":1,"1146":1,"1147":1},"3":{"0":1,"638":1,"1138":1,"1139":1,"1140":1,"1141":2,"1142":1,"1144":1,"1145":1,"1212":1,"1259":1,"1323":1,"1324":1,"1359":3,"1396":1,"1402":1,"1431":1,"1436":1,"1496":1,"1577":1,"1585":1,"2234":1}}],["source=",{"3":{"1339":1,"1441":1}}],["sourcecollectinghostapplicationbuilder",{"3":{"1199":2,"1207":1}}],["sourcecollectingconfigurationmanager",{"3":{"1199":2,"1207":1}}],["sourcetype",{"3":{"846":1,"1247":1,"1269":1,"1270":2,"1436":1}}],["sourcedatabase",{"2":{"1475":1},"3":{"1474":1,"1475":3}}],["sourcedir",{"3":{"1436":2}}],["sourced",{"1":{"1780":1,"1781":1,"1782":1,"1783":1,"1784":1,"1785":1,"1786":1,"1787":1},"3":{"0":1,"373":1,"602":1,"631":1,"643":1,"1083":1,"1085":1,"1116":1,"1142":1,"1145":1,"1286":6,"1300":2,"1312":1,"1344":1,"1350":4,"1359":8,"1362":1,"1369":4,"1376":1,"1378":1,"1380":2,"1396":3,"1415":1,"1436":1,"1489":1,"1600":1,"1630":2,"1779":1,"1780":2,"2031":1,"2207":1}}],["sourcename",{"2":{"634":1},"3":{"0":1,"634":1,"698":1,"1286":4,"1323":1,"1492":1}}],["sourcesbrandcolorfromtoken",{"3":{"1436":2}}],["sources",{"3":{"0":3,"26":1,"46":1,"47":1,"166":1,"169":1,"186":1,"265":1,"369":1,"370":1,"399":1,"407":1,"413":1,"640":1,"676":1,"715":1,"717":1,"827":1,"838":1,"905":1,"926":1,"988":2,"989":1,"1014":1,"1069":1,"1144":2,"1175":1,"1214":1,"1247":4,"1276":3,"1279":4,"1281":3,"1286":31,"1300":2,"1301":1,"1310":4,"1311":12,"1323":4,"1324":1,"1333":1,"1335":2,"1338":1,"1339":7,"1353":1,"1359":8,"1375":1,"1395":4,"1402":2,"1415":2,"1417":2,"1429":1,"1436":7,"1437":1,"1438":1,"1442":1,"1453":2,"1454":1,"1488":1,"1489":2,"1526":1,"1534":1,"1548":1,"1569":1,"1630":2,"1631":1,"1639":1,"1660":1,"1665":1,"1670":1,"1675":1,"1774":2,"1790":1,"1833":1,"1840":1,"1841":1,"1845":1,"1849":2,"1852":3,"1853":1,"1858":1,"1859":1,"1861":1,"1863":1,"1866":1,"1868":1,"1962":1,"1965":1,"2007":1,"2023":1,"2025":1,"2155":1,"2158":2,"2162":1,"2190":1,"2222":1,"2234":1}}],["source",{"0":{"1330":1,"1335":1,"1451":1,"1470":1,"1484":1,"1500":1,"1859":1,"1875":1,"2244":1},"1":{"1172":1,"1173":1,"1174":1,"1175":1,"1176":1,"1177":1,"1178":1,"1179":1,"1180":1},"2":{"138":1,"468":1,"469":1,"474":1,"477":1,"805":1,"809":1,"813":1,"1150":1,"1475":2},"3":{"0":53,"1":1,"3":1,"5":1,"10":1,"12":1,"15":5,"17":2,"24":13,"25":4,"26":10,"27":6,"31":2,"34":1,"38":1,"39":4,"42":2,"43":2,"47":4,"53":1,"57":1,"59":6,"60":1,"61":1,"62":1,"63":3,"68":3,"71":2,"72":6,"73":1,"74":4,"79":1,"80":6,"81":3,"82":3,"90":1,"93":3,"94":2,"95":8,"96":5,"98":5,"99":1,"100":2,"103":3,"109":16,"111":1,"112":1,"117":6,"121":3,"122":3,"123":4,"125":5,"126":5,"128":4,"130":1,"132":1,"135":5,"136":1,"138":2,"141":3,"142":4,"145":2,"146":1,"147":5,"150":5,"151":1,"152":1,"157":2,"160":3,"161":3,"162":1,"164":1,"166":17,"168":2,"169":1,"170":3,"171":4,"175":3,"178":3,"179":6,"180":7,"181":2,"184":1,"186":5,"189":4,"190":5,"193":1,"195":9,"196":2,"197":1,"198":3,"200":2,"201":3,"202":7,"203":2,"216":2,"217":2,"218":1,"219":5,"220":5,"225":1,"228":4,"230":9,"231":4,"235":15,"237":2,"238":1,"243":8,"245":9,"246":7,"250":1,"251":1,"252":2,"254":1,"255":5,"256":1,"257":2,"259":3,"260":4,"261":1,"265":11,"266":1,"273":2,"277":1,"280":1,"282":1,"283":2,"284":2,"285":3,"290":7,"295":12,"296":3,"303":4,"305":7,"306":4,"310":3,"314":4,"318":9,"324":1,"325":3,"328":2,"330":9,"331":2,"333":5,"336":4,"337":4,"341":17,"342":2,"343":3,"344":6,"345":2,"350":5,"352":4,"353":7,"359":1,"369":1,"370":4,"371":1,"372":1,"373":1,"379":1,"384":7,"387":2,"388":3,"390":6,"391":7,"392":4,"393":1,"395":4,"397":11,"399":1,"400":3,"401":7,"402":3,"403":1,"404":5,"406":1,"407":5,"408":4,"409":3,"412":1,"413":11,"415":3,"416":2,"418":11,"419":1,"420":3,"422":1,"423":7,"424":3,"425":2,"426":8,"427":2,"428":10,"429":5,"430":4,"433":2,"434":1,"435":1,"440":1,"442":1,"443":2,"444":3,"448":11,"450":1,"451":1,"452":2,"453":1,"454":1,"459":13,"461":1,"463":6,"464":4,"465":5,"466":2,"468":3,"469":4,"470":14,"474":1,"475":10,"476":13,"477":13,"478":1,"482":2,"483":3,"484":3,"486":11,"487":7,"488":5,"489":7,"490":7,"491":8,"492":9,"493":12,"494":8,"495":5,"497":13,"498":1,"499":6,"502":4,"507":20,"509":1,"511":6,"512":1,"513":5,"514":2,"522":2,"523":3,"524":2,"527":1,"528":1,"530":1,"535":1,"536":4,"537":1,"539":3,"544":2,"545":26,"547":1,"549":7,"550":3,"551":2,"552":4,"554":1,"556":25,"559":1,"564":7,"572":4,"576":3,"577":4,"583":33,"585":12,"586":5,"587":2,"592":1,"597":1,"599":6,"601":2,"603":3,"609":2,"616":2,"618":2,"621":1,"626":1,"629":2,"632":3,"633":3,"634":1,"636":1,"638":2,"640":14,"642":3,"644":3,"649":13,"651":1,"656":2,"657":17,"665":7,"668":4,"669":3,"672":4,"674":45,"675":3,"676":15,"677":2,"680":1,"682":1,"685":1,"690":1,"696":3,"697":2,"698":24,"699":3,"700":2,"701":4,"702":10,"703":9,"706":1,"707":9,"708":1,"709":2,"711":2,"715":6,"717":1,"720":3,"721":3,"724":5,"725":11,"727":3,"728":2,"731":1,"732":1,"733":8,"736":4,"740":5,"741":10,"742":1,"743":2,"744":2,"749":11,"751":2,"774":12,"777":1,"780":3,"782":19,"784":2,"789":4,"790":8,"792":3,"793":6,"794":4,"798":9,"799":8,"803":3,"804":5,"805":4,"806":1,"809":3,"813":4,"818":1,"819":16,"822":2,"825":1,"826":7,"827":18,"830":7,"831":3,"832":6,"833":14,"836":1,"837":5,"838":11,"839":2,"840":1,"841":2,"842":1,"846":9,"849":1,"850":1,"854":7,"857":4,"861":2,"863":1,"868":3,"869":6,"872":5,"873":3,"876":17,"877":4,"880":1,"881":14,"883":1,"884":1,"888":2,"889":1,"891":4,"892":1,"897":10,"900":2,"904":1,"905":13,"908":3,"909":1,"910":1,"912":1,"913":6,"914":2,"915":1,"916":1,"921":3,"922":9,"923":1,"924":3,"926":10,"929":1,"930":1,"931":7,"935":1,"939":1,"946":10,"949":1,"954":4,"959":1,"960":2,"963":4,"964":4,"966":1,"971":1,"972":6,"975":2,"979":5,"980":7,"982":2,"987":3,"988":17,"989":1,"990":4,"992":1,"995":4,"996":5,"998":1,"999":2,"1000":1,"1003":1,"1004":6,"1006":1,"1012":1,"1017":1,"1018":2,"1021":1,"1025":5,"1026":14,"1028":1,"1029":1,"1033":1,"1034":13,"1035":1,"1036":1,"1041":6,"1042":21,"1043":2,"1044":6,"1045":2,"1049":4,"1050":17,"1051":1,"1052":2,"1054":2,"1055":3,"1058":4,"1059":27,"1061":2,"1062":1,"1066":4,"1067":4,"1070":1,"1073":1,"1074":7,"1075":1,"1078":1,"1082":6,"1083":7,"1085":1,"1086":3,"1089":1,"1090":2,"1091":9,"1094":1,"1095":1,"1099":2,"1100":6,"1103":3,"1108":6,"1111":1,"1116":17,"1119":1,"1123":3,"1124":2,"1132":1,"1133":7,"1134":1,"1135":4,"1140":10,"1142":1,"1144":1,"1150":14,"1160":2,"1161":3,"1163":1,"1168":16,"1172":1,"1174":1,"1175":27,"1177":1,"1183":4,"1184":18,"1186":2,"1190":4,"1191":1,"1192":6,"1193":1,"1196":1,"1202":3,"1203":3,"1204":3,"1211":2,"1212":28,"1213":2,"1214":2,"1219":4,"1220":1,"1222":3,"1223":2,"1224":1,"1225":6,"1226":2,"1227":3,"1228":3,"1229":59,"1231":6,"1232":5,"1233":8,"1234":13,"1235":2,"1236":8,"1237":166,"1238":1,"1239":18,"1240":4,"1241":5,"1242":4,"1243":10,"1244":5,"1245":2,"1246":3,"1247":152,"1251":1,"1252":1,"1254":2,"1256":1,"1257":1,"1259":120,"1261":2,"1262":6,"1263":6,"1264":9,"1265":3,"1267":5,"1268":1,"1269":5,"1270":270,"1271":103,"1272":1,"1273":13,"1274":2,"1275":7,"1276":15,"1277":7,"1278":22,"1279":14,"1280":9,"1281":6,"1282":1,"1283":5,"1284":5,"1285":7,"1286":877,"1288":8,"1289":10,"1290":11,"1291":12,"1292":8,"1293":9,"1294":9,"1295":6,"1296":5,"1297":30,"1298":7,"1299":2,"1300":1020,"1301":82,"1302":6,"1303":8,"1304":11,"1305":7,"1306":9,"1307":16,"1308":8,"1309":208,"1310":78,"1311":456,"1312":85,"1313":1,"1314":3,"1315":4,"1316":8,"1317":11,"1318":10,"1319":1,"1320":28,"1321":3,"1322":14,"1323":388,"1324":595,"1325":9,"1326":11,"1327":4,"1328":4,"1329":1,"1330":3,"1331":5,"1332":19,"1333":7,"1334":10,"1335":7,"1336":8,"1337":6,"1338":10,"1339":367,"1341":3,"1342":12,"1344":7,"1345":5,"1346":1,"1347":17,"1348":5,"1349":10,"1350":359,"1353":2,"1354":1,"1359":930,"1361":1,"1362":2,"1363":3,"1364":1,"1366":1,"1368":1,"1369":84,"1371":6,"1372":2,"1373":5,"1374":1,"1375":1,"1376":1,"1377":7,"1378":8,"1379":4,"1380":199,"1381":1,"1384":3,"1387":1,"1389":1,"1390":2,"1395":373,"1396":591,"1402":129,"1403":1,"1404":4,"1405":1,"1406":5,"1407":2,"1409":1,"1410":1,"1412":1,"1413":1,"1414":1,"1415":377,"1416":32,"1417":148,"1419":2,"1420":6,"1421":1,"1422":5,"1423":5,"1424":6,"1425":6,"1426":1,"1427":58,"1428":1,"1429":3,"1430":1,"1431":4,"1433":1,"1435":1,"1436":742,"1437":1,"1438":16,"1440":3,"1441":9,"1442":7,"1443":6,"1444":6,"1445":9,"1447":2,"1449":5,"1451":1,"1453":5,"1454":4,"1455":12,"1459":2,"1461":1,"1462":1,"1464":16,"1466":1,"1467":17,"1469":2,"1470":2,"1473":1,"1474":3,"1475":3,"1476":1,"1477":1,"1478":2,"1482":1,"1484":2,"1485":2,"1486":5,"1487":2,"1488":27,"1489":8,"1490":3,"1491":1,"1492":12,"1494":1,"1495":1,"1496":108,"1497":1,"1500":5,"1504":2,"1509":1,"1510":2,"1512":1,"1521":1,"1522":1,"1526":22,"1531":6,"1534":3,"1535":3,"1545":1,"1547":1,"1548":1,"1553":2,"1554":1,"1556":1,"1569":1,"1570":1,"1572":1,"1573":1,"1576":1,"1577":43,"1578":1,"1581":1,"1582":18,"1583":6,"1585":2,"1586":7,"1587":1,"1591":7,"1594":1,"1596":1,"1606":1,"1614":1,"1619":3,"1630":1,"1631":3,"1632":16,"1636":1,"1637":2,"1638":1,"1639":4,"1640":1,"1641":2,"1646":1,"1648":4,"1649":1,"1650":4,"1651":4,"1652":5,"1653":7,"1654":1,"1655":1,"1656":6,"1659":1,"1661":2,"1664":12,"1665":1,"1671":2,"1673":6,"1675":5,"1684":1,"1685":5,"1686":5,"1687":1,"1695":2,"1697":1,"1708":1,"1710":1,"1712":1,"1718":1,"1719":3,"1722":3,"1727":4,"1728":6,"1729":3,"1731":2,"1734":1,"1736":1,"1740":1,"1755":2,"1764":27,"1765":31,"1770":4,"1773":3,"1777":2,"1778":1,"1783":1,"1787":2,"1790":3,"1792":1,"1793":1,"1802":1,"1805":2,"1807":1,"1810":1,"1812":1,"1815":3,"1817":1,"1827":1,"1831":5,"1834":2,"1838":1,"1840":4,"1841":1,"1845":5,"1846":1,"1849":9,"1851":8,"1852":8,"1853":3,"1856":1,"1857":1,"1859":1,"1860":3,"1861":2,"1862":2,"1865":5,"1866":3,"1867":2,"1868":2,"1872":1,"1875":1,"1877":3,"1886":1,"1889":1,"1891":1,"1892":1,"1895":1,"1899":1,"1902":1,"1905":1,"1910":1,"1912":1,"1921":1,"1924":1,"1927":3,"1930":1,"1933":1,"1941":1,"1942":1,"1948":1,"1950":1,"1951":1,"1955":2,"1958":1,"1959":4,"1962":1,"1965":1,"1972":1,"1979":1,"1983":1,"1985":1,"1987":1,"1988":3,"1990":2,"1992":1,"1995":6,"1996":1,"1998":1,"2000":1,"2001":11,"2002":2,"2003":4,"2006":1,"2009":2,"2011":1,"2014":2,"2015":1,"2025":2,"2029":1,"2034":1,"2037":1,"2039":1,"2042":2,"2044":3,"2045":4,"2047":1,"2050":1,"2054":6,"2056":1,"2057":1,"2061":1,"2065":2,"2066":1,"2067":2,"2068":6,"2071":1,"2072":1,"2074":3,"2076":2,"2077":2,"2078":1,"2081":1,"2082":5,"2084":1,"2085":3,"2087":1,"2088":3,"2092":1,"2099":1,"2100":1,"2108":1,"2110":1,"2113":1,"2117":2,"2119":1,"2125":2,"2128":1,"2129":1,"2130":1,"2135":1,"2138":1,"2141":1,"2144":1,"2148":1,"2149":1,"2155":1,"2158":6,"2159":5,"2161":1,"2162":2,"2167":1,"2171":1,"2174":1,"2181":1,"2182":1,"2190":2,"2191":1,"2193":1,"2194":4,"2195":1,"2201":1,"2204":3,"2205":1,"2213":1,"2214":1,"2217":1,"2218":1,"2223":1,"2228":2,"2232":3,"2234":6,"2236":1,"2238":1,"2241":1,"2247":2}}],["someday",{"3":{"1436":1}}],["somefixture",{"3":{"1436":3}}],["somehandler",{"3":{"1396":1}}],["somehow",{"3":{"1335":1}}],["somerandomtype",{"3":{"1380":1}}],["somerandomhandler",{"3":{"1323":2}}],["someincidentalclass",{"3":{"1311":1}}],["someintegrationevent",{"2":{"1252":1},"3":{"1252":1}}],["someid",{"3":{"1237":1}}],["sometimes",{"3":{"1345":1,"1359":1,"1436":1,"2101":1}}],["sometime",{"3":{"1077":1}}],["somethingbroke",{"3":{"1436":4}}],["something",{"3":{"1":1,"79":1,"81":1,"103":1,"108":1,"110":1,"135":1,"138":1,"139":1,"140":1,"147":1,"150":1,"175":1,"258":1,"290":1,"449":1,"539":1,"626":1,"627":1,"681":1,"683":1,"734":1,"740":1,"751":1,"758":1,"781":1,"793":1,"799":1,"812":1,"817":1,"860":2,"905":1,"931":1,"989":2,"1019":1,"1059":1,"1066":1,"1067":1,"1068":2,"1074":1,"1102":1,"1140":1,"1220":1,"1237":2,"1247":1,"1248":1,"1259":4,"1265":1,"1270":2,"1281":1,"1286":12,"1292":1,"1293":1,"1300":7,"1302":1,"1309":4,"1311":4,"1320":1,"1323":9,"1324":16,"1339":3,"1344":1,"1350":4,"1352":1,"1359":17,"1368":1,"1369":1,"1380":1,"1389":1,"1395":5,"1396":12,"1402":3,"1409":1,"1415":5,"1416":1,"1417":9,"1427":2,"1435":1,"1436":20,"1443":2,"1451":1,"1455":1,"1459":1,"1460":1,"1467":1,"1478":1,"1486":1,"1492":3,"1512":1,"1637":1,"1651":1,"1653":1,"1684":1,"1686":2,"1693":1,"1787":1,"1794":1,"1804":1,"1815":2,"1817":2,"1836":1,"1842":1,"1847":1,"1865":1,"1867":1,"1881":2,"1885":1,"1890":1,"1900":1,"1913":1,"1933":1,"1943":2,"1949":1,"1952":1,"1963":1,"1965":1,"1982":1,"2003":2,"2017":1,"2035":1,"2044":1,"2050":1,"2057":1,"2065":1,"2096":1,"2100":1,"2101":1,"2118":1,"2120":1,"2126":2,"2128":1,"2130":1,"2140":3,"2159":1,"2160":1,"2183":1,"2184":1,"2185":1,"2205":1,"2234":1}}],["somebody",{"3":{"896":1,"1082":1,"1083":1,"1134":1,"1229":1,"1286":1,"1306":1,"1323":2,"1324":1,"1359":1,"1396":2,"1415":2,"1422":1,"1427":1,"1436":2,"1465":1,"1475":1,"1951":1,"2040":1,"2044":1,"2047":1,"2048":1,"2065":1,"2155":1,"2160":1,"2172":2,"2176":1,"2182":2,"2196":1,"2197":1,"2198":1,"2204":1,"2205":1}}],["someone",{"3":{"160":1,"215":1,"255":1,"318":1,"342":1,"343":1,"372":1,"373":1,"387":1,"407":1,"435":1,"538":1,"574":1,"592":1,"610":1,"627":1,"634":1,"692":1,"715":1,"717":1,"759":1,"765":1,"767":2,"812":1,"820":1,"821":1,"828":1,"855":1,"890":1,"965":1,"974":1,"1052":1,"1085":1,"1102":1,"1160":1,"1237":2,"1247":2,"1263":1,"1270":1,"1286":4,"1300":4,"1309":3,"1311":2,"1323":5,"1324":7,"1332":1,"1339":2,"1350":1,"1359":7,"1369":1,"1395":4,"1396":11,"1402":1,"1415":8,"1417":2,"1436":14,"1467":1,"1472":1,"1654":1,"1718":1,"1788":1,"1794":2,"1797":1,"1800":2,"1804":1,"1809":1,"1813":1,"1815":1,"1817":1,"1818":1,"1828":1,"1872":1,"1876":1,"1878":1,"1900":2,"1901":1,"1914":1,"1947":2,"1960":2,"1966":1,"1976":1,"1994":1,"1995":1,"1996":1,"1998":1,"2030":1,"2034":1,"2038":1,"2046":2,"2049":1,"2069":1,"2075":1,"2101":1,"2120":1,"2131":1,"2146":1,"2149":1,"2150":1,"2156":1,"2167":1,"2170":1}}],["someerror",{"3":{"109":1,"1220":1,"1229":1}}],["some",{"3":{"6":1,"52":1,"134":1,"188":1,"318":1,"358":1,"412":1,"517":1,"537":1,"574":1,"585":1,"676":1,"725":1,"757":1,"759":2,"800":1,"848":1,"891":1,"974":1,"995":1,"1052":1,"1135":1,"1143":1,"1153":1,"1215":1,"1216":1,"1247":1,"1271":3,"1286":4,"1300":3,"1310":1,"1311":1,"1312":1,"1320":1,"1323":2,"1324":6,"1339":2,"1350":2,"1359":6,"1369":1,"1380":4,"1395":1,"1396":3,"1415":3,"1416":2,"1417":3,"1436":10,"1438":1,"1453":2,"1454":1,"1455":1,"1467":1,"1476":1,"1498":1,"1526":1,"1531":1,"1537":2,"1627":1,"1631":1,"1654":1,"1708":1,"1776":1,"1801":1,"1814":2,"1816":1,"1817":1,"1825":1,"1829":1,"1830":1,"1902":1,"1914":1,"1986":1,"1990":1,"2060":1,"2075":1,"2081":1,"2116":1,"2124":1,"2138":1,"2142":1,"2204":1}}],["somewhere",{"3":{"0":1,"138":1,"150":1,"157":1,"255":1,"544":1,"609":1,"718":1,"809":1,"921":1,"989":1,"995":1,"1027":1,"1109":1,"1235":1,"1237":1,"1271":1,"1286":2,"1311":1,"1324":3,"1350":1,"1359":2,"1395":1,"1396":5,"1416":2,"1417":1,"1423":1,"1432":1,"1436":6,"1467":1,"1488":1,"1531":1,"1575":1,"1818":1,"1909":1,"1922":1,"1954":1,"1967":2,"1972":1,"1987":1,"2045":1,"2047":1,"2118":1,"2160":1,"2167":1,"2177":1,"2184":1,"2187":1,"2199":1}}],["soonest",{"3":{"1348":2,"1350":1}}],["sooner",{"3":{"19":1,"640":1,"1436":1}}],["soon",{"3":{"0":1,"234":1,"827":1,"1116":1,"1278":1,"1323":3,"1324":2,"1339":1,"1359":1,"1396":1,"1433":1,"1436":2,"1553":1,"1631":1,"1902":1,"2159":1,"2187":1,"2191":1}}],["solo",{"3":{"1686":1}}],["sold",{"3":{"1340":1,"1342":1,"1346":1,"1350":4,"1359":2,"1380":1,"1395":5}}],["solvable",{"3":{"1638":1}}],["solving",{"3":{"1324":1,"1358":1,"1443":1,"1539":1}}],["solve",{"3":{"390":1,"811":1,"948":1,"990":1,"1043":1,"1218":1,"1229":4,"1247":1,"1286":1,"1310":1,"1350":1,"1395":1,"1396":1,"1415":2,"1417":1,"1488":1,"1859":1,"1942":1,"2183":1,"2213":1}}],["solves",{"3":{"272":1,"555":1,"971":2,"1237":1,"1247":1,"1259":1,"1270":2,"1298":1,"1300":1,"1324":2,"1359":3,"1395":1,"1396":1,"1417":1,"1436":1,"1443":1,"1447":1,"1818":1,"1859":1,"1910":1,"2078":1,"2126":1}}],["solved",{"3":{"26":1,"601":1,"708":1,"827":1,"990":1,"1115":1,"1311":1,"1312":1,"1323":1,"1339":1,"1380":1,"1395":1,"1396":4,"1415":1,"1417":1,"1436":1,"1900":4,"1997":1,"2088":1,"2164":1}}],["solid",{"0":{"1538":1},"3":{"1216":1,"1229":1,"1234":1,"1237":4,"1241":1,"1244":1,"1247":4,"1259":4,"1261":1,"1264":1,"1270":16,"1271":5,"1278":1,"1286":14,"1291":1,"1300":20,"1301":1,"1309":9,"1310":2,"1311":15,"1316":1,"1322":1,"1323":12,"1324":15,"1339":1,"1343":1,"1350":5,"1353":1,"1359":60,"1369":2,"1371":1,"1380":6,"1384":1,"1395":17,"1396":19,"1402":8,"1405":1,"1415":8,"1416":2,"1417":16,"1427":5,"1431":1,"1436":12,"1499":1,"1526":1,"1535":1,"1577":1,"1581":1,"1582":1,"1583":1,"1584":1,"1588":1,"1591":1,"1597":1,"1784":1,"1795":1,"1796":1,"1800":1,"1971":1,"2092":1}}],["solutions",{"3":{"556":1,"633":1,"1485":1,"1486":1,"1654":1,"1696":1,"1726":1,"1731":1,"2091":1,"2222":1,"2226":1}}],["solutionfilename",{"2":{"136":1},"3":{"136":1,"1431":1,"1436":5}}],["solution",{"0":{"1215":1,"1486":1,"1649":1,"1683":1,"1695":1,"2091":1,"2122":1},"1":{"1485":1,"1486":1,"1487":1,"1488":1,"1489":1,"1490":1,"1491":1,"1492":1,"1493":1,"1494":1},"3":{"0":4,"132":1,"135":1,"137":2,"140":1,"142":1,"370":2,"470":2,"509":1,"609":1,"631":1,"632":2,"633":7,"634":1,"635":2,"733":1,"863":1,"870":1,"883":1,"905":1,"906":2,"938":1,"939":2,"942":1,"979":1,"980":1,"1034":1,"1067":2,"1190":1,"1192":1,"1212":1,"1215":3,"1237":1,"1247":1,"1259":1,"1271":1,"1286":2,"1296":1,"1300":5,"1309":3,"1311":1,"1323":4,"1350":2,"1359":1,"1395":1,"1396":12,"1402":2,"1428":2,"1436":12,"1441":1,"1445":1,"1449":1,"1453":5,"1454":6,"1455":3,"1485":1,"1486":8,"1487":12,"1488":2,"1490":3,"1492":5,"1494":2,"1524":1,"1526":2,"1531":1,"1577":2,"1591":1,"1596":1,"1599":1,"1602":2,"1646":3,"1647":1,"1649":2,"1650":1,"1654":1,"1656":1,"1657":1,"1658":1,"1661":8,"1662":1,"1674":1,"1675":1,"1681":1,"1684":4,"1685":4,"1686":4,"1690":1,"1692":2,"1694":1,"1695":1,"1700":1,"1701":2,"1703":1,"1704":2,"1705":2,"1707":1,"1717":1,"1718":3,"1722":3,"1725":2,"1726":4,"1727":6,"1728":8,"1729":10,"1730":1,"1731":4,"1781":2,"1829":1,"1939":1,"2043":1,"2045":1,"2057":1,"2089":2,"2091":2,"2099":5,"2100":5,"2101":2,"2102":1,"2103":3,"2105":1,"2107":1,"2213":1,"2222":1,"2226":1,"2241":1}}],["solely",{"3":{"77":1,"149":1,"776":1,"1323":2,"1324":1,"1325":1,"1359":3,"1369":1,"1396":1,"1415":1,"1486":1,"1488":1,"1641":1,"1887":1}}],["sole",{"1":{"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1},"3":{"0":6,"20":1,"288":1,"291":3,"295":1,"296":2,"370":1,"563":1,"620":1,"756":2,"757":1,"762":1,"827":1,"833":1,"1212":1,"1229":1,"1237":1,"1247":1,"1270":2,"1286":2,"1311":2,"1324":2,"1350":1,"1359":5,"1396":7,"1415":1,"1416":1,"1417":1,"1436":5,"1447":1,"1455":1,"1467":2,"1469":1,"1473":1,"1476":1,"1477":1,"1488":2,"1496":3,"1534":1,"1652":1,"1664":1,"1750":1,"2234":2}}],["sortability",{"3":{"1395":1}}],["sortabletemplatecolumngrid",{"3":{"1436":2}}],["sortabletemplatecolumn",{"3":{"1436":1}}],["sortablegridcolumnsusepropertycolumn",{"3":{"1436":3}}],["sortable=",{"3":{"1395":1,"1436":5}}],["sortablecolumns",{"3":{"1436":2}}],["sortablecolumnconventiontests",{"3":{"1199":1,"1207":2,"1436":9,"1489":1}}],["sortablecolumnconventiontestsbase",{"3":{"1199":2,"1207":2,"1436":8}}],["sortablecolumnfitnesstests",{"3":{"1199":1,"1207":2,"1436":3,"1489":1}}],["sortable",{"3":{"332":1,"1247":1,"1286":1,"1311":1,"1324":2,"1350":1,"1359":3,"1383":1,"1395":10,"1396":1,"1415":4,"1436":14,"1489":1,"1629":1,"1640":2,"1671":1,"1748":1,"1765":1,"1988":1,"1991":1}}],["sortorder",{"3":{"1342":1,"1350":10,"1359":18,"1362":2,"1369":5,"1395":9}}],["sortby",{"3":{"1324":1}}],["sortproperty",{"3":{"1286":4}}],["sort=",{"3":{"1238":1,"1815":1}}],["sorttestentity",{"3":{"1199":2,"1207":1}}],["sortdescending",{"3":{"1324":1}}],["sortdefinition",{"3":{"881":1,"1324":1}}],["sortdirection=asc",{"3":{"1324":1,"1380":1,"1395":3}}],["sortdirection",{"3":{"330":1,"740":1,"741":1,"881":1,"1247":2,"1311":1,"1324":2,"1395":2,"1396":1,"1415":4,"1640":1,"1988":1}}],["sorts",{"3":{"583":1,"633":1,"741":1,"1242":1,"1247":3,"1286":2,"1310":1,"1311":1,"1313":1,"1323":2,"1342":1,"1350":4,"1359":7,"1362":1,"1369":1,"1395":4,"1396":1,"1402":1,"1415":2,"1436":5,"1599":1,"1699":2,"1727":2,"1815":1,"1878":1,"1879":1,"1886":1,"2091":1}}],["sortkey",{"3":{"549":1,"1278":1,"1286":3,"1577":1}}],["sortvalue",{"3":{"549":1,"1228":1,"1229":3,"1286":1}}],["sorted",{"3":{"359":1,"549":1,"1059":1,"1200":1,"1238":1,"1242":1,"1247":3,"1270":1,"1286":3,"1300":8,"1315":1,"1323":1,"1324":2,"1350":4,"1354":1,"1359":2,"1369":1,"1371":1,"1395":9,"1396":2,"1402":2,"1427":1,"1436":7,"1492":1,"1496":1,"1498":1,"1877":1,"1988":1}}],["sortcolumn=id",{"3":{"1324":1,"1380":1,"1395":3}}],["sortcolumn",{"2":{"42":1},"3":{"42":1,"330":1,"549":1,"740":1,"741":1,"881":1,"1228":1,"1229":2,"1247":4,"1286":1,"1311":1,"1324":3,"1369":1,"1395":2,"1396":1,"1415":4,"1640":2,"1765":1,"1988":1}}],["sorting",{"0":{"1242":1},"3":{"0":1,"319":1,"329":1,"333":1,"363":1,"545":1,"549":2,"591":1,"742":1,"1050":2,"1202":1,"1203":1,"1238":2,"1243":2,"1245":1,"1247":7,"1284":1,"1300":1,"1311":2,"1324":1,"1350":3,"1354":1,"1359":7,"1362":1,"1369":2,"1380":2,"1395":4,"1396":5,"1402":1,"1415":4,"1436":4,"1438":1,"1526":2,"1546":1,"1557":1,"1560":1,"1577":1,"1630":1,"1631":1,"1632":2,"1639":1,"1640":3,"1666":1,"1669":1,"1748":2,"1815":1,"1816":1,"1817":1,"1987":1,"1988":1,"1998":1}}],["sort",{"2":{"1353":1},"3":{"0":5,"122":1,"243":1,"328":1,"329":1,"330":1,"331":1,"361":1,"547":1,"549":8,"583":4,"585":2,"595":1,"633":1,"881":4,"882":1,"1050":2,"1053":1,"1192":1,"1212":1,"1228":2,"1229":9,"1242":4,"1243":6,"1244":3,"1245":1,"1247":23,"1259":1,"1263":1,"1270":1,"1278":2,"1286":24,"1309":1,"1315":1,"1323":5,"1324":22,"1342":1,"1344":1,"1350":31,"1353":1,"1354":1,"1357":2,"1359":120,"1362":2,"1369":15,"1380":15,"1383":1,"1392":4,"1395":46,"1396":8,"1402":14,"1406":3,"1415":11,"1436":5,"1438":6,"1496":1,"1498":1,"1526":2,"1600":1,"1607":1,"1630":5,"1631":3,"1632":8,"1639":5,"1640":9,"1669":1,"1675":1,"1686":1,"1689":2,"1699":1,"1715":1,"1720":1,"1727":2,"1741":1,"1750":1,"1751":1,"1769":1,"1773":1,"1815":2,"1881":2,"1886":2,"1923":1,"1928":1,"1988":3,"1992":3,"2072":3,"2074":2,"2078":1,"2081":1,"2082":1,"2091":2,"2146":1,"2147":1,"2234":1}}],["softer",{"3":{"1396":2}}],["softens",{"3":{"803":1}}],["softdeletingfixture",{"3":{"1199":2,"1207":1,"1436":5}}],["softdeletabletestentity",{"3":{"1199":3,"1207":1}}],["softdeletableentity",{"3":{"1199":3,"1207":1}}],["softdeletepredicate",{"3":{"1286":1}}],["softdeletefidelitytests",{"2":{"1535":1},"3":{"1199":1,"1207":2,"1535":1}}],["softdeletefilteronly",{"3":{"698":1}}],["softdeletefiltername",{"2":{"697":1},"3":{"697":1,"698":1,"1286":1}}],["softdeletefiltersql",{"2":{"889":2,"892":3,"1034":1,"1176":1,"2066":1},"3":{"0":2,"889":7,"891":1,"892":6,"1034":3,"1175":1,"1176":1,"1198":1,"1199":4,"1203":1,"1207":2,"1280":1,"1281":2,"1286":27,"1369":1,"1415":2,"1496":1,"2066":1}}],["softdeletequeryfiltertests",{"3":{"1199":1,"1207":5}}],["softdeleteenforcementtests",{"3":{"1199":2,"1207":4,"1286":4,"1436":16,"1489":2,"1577":1}}],["softdeleteenforcementtestsbase",{"3":{"39":2,"1199":3,"1207":2,"1436":14}}],["softdeleteenforcementfitnesstests",{"3":{"1199":1,"1207":3,"1436":22,"1489":1}}],["softdeletetestdbcontext",{"3":{"1199":6,"1207":2}}],["softdeleted",{"3":{"1286":1,"1396":1,"1402":1}}],["softdeletedmarkerfailed",{"2":{"459":1,"465":1},"3":{"459":1,"465":1,"1323":2,"1415":1}}],["softdeleteduserfilter",{"2":{"464":1,"1311":1,"2068":1},"3":{"459":2,"464":2,"466":1,"698":1,"749":2,"1311":3,"1436":1,"1666":1,"2068":1}}],["softdeleteduservalidatortests",{"3":{"1199":2,"1207":4,"1323":1,"1438":2}}],["softdeleteduservalidator",{"2":{"460":1,"463":1,"2068":1},"3":{"0":1,"459":4,"460":1,"463":3,"464":1,"465":1,"1199":4,"1203":1,"1207":2,"1300":1,"1322":3,"1323":8,"1404":1,"1415":3,"1496":2,"2068":2}}],["softdeletedusercachetests",{"3":{"1199":1,"1207":2,"1438":1}}],["softdeletedusercache",{"2":{"459":3,"461":2,"463":1,"2068":2},"3":{"0":1,"459":7,"461":4,"463":3,"464":1,"465":1,"1199":7,"1203":1,"1207":2,"1300":10,"1301":3,"1311":6,"1323":2,"1403":1,"1438":1,"2068":3}}],["softdeletedusermiddlewaretests",{"2":{"459":1,"466":1},"3":{"459":3,"463":1,"464":1,"466":2,"1199":1,"1207":2}}],["softdeletedusermiddleware",{"2":{"463":1,"464":1,"748":1,"752":1,"1923":1,"2068":1,"2071":1},"3":{"0":1,"459":7,"461":1,"463":4,"464":1,"465":1,"748":1,"749":4,"752":1,"1199":3,"1203":1,"1207":2,"1212":1,"1300":5,"1301":2,"1311":10,"1323":2,"1415":2,"1923":1,"2068":6,"2071":1}}],["softdeleteuniqueindexconventiontests",{"3":{"890":1,"891":1,"1199":1,"1207":8,"1286":1,"1438":1}}],["softdeleteuniqueindexconvention",{"2":{"889":1,"1212":1,"1281":1,"1362":1,"1412":1,"2066":1},"3":{"0":1,"888":1,"889":8,"890":1,"891":2,"892":1,"1198":1,"1199":2,"1203":1,"1207":2,"1212":1,"1280":1,"1281":3,"1286":32,"1362":2,"1369":9,"1396":7,"1412":1,"1415":4,"1496":2,"1577":1,"2066":2}}],["softdelete",{"3":{"0":2,"39":3,"549":2,"551":1,"699":1,"701":1,"1207":1,"1212":2,"1232":1,"1237":1,"1240":1,"1247":1,"1273":1,"1276":1,"1286":6,"1436":13,"1438":1,"1489":1,"1664":1,"1851":2}}],["softwarefactory",{"3":{"1395":1}}],["software",{"1":{"2214":1,"2215":1,"2216":1,"2217":1,"2218":1},"3":{"370":1,"1395":2,"1454":2,"1673":1,"1787":1,"1793":1,"1802":1,"1807":1,"1812":1,"1817":1,"1827":1,"1834":1,"1846":1,"1853":1,"1862":1,"1868":1,"1877":1,"1886":1,"1892":1,"1899":1,"1905":1,"1924":1,"1930":1,"1941":1,"1950":1,"1959":1,"1965":1,"1979":1,"1985":1,"1992":1,"1998":1,"2003":1,"2029":1,"2039":1,"2050":1,"2061":1,"2071":1,"2082":1,"2088":1,"2100":1,"2110":1,"2117":1,"2125":1,"2130":1,"2135":1,"2141":1,"2171":1,"2182":1,"2195":1,"2205":1,"2213":1,"2214":1,"2215":1,"2219":1,"2220":1,"2222":8}}],["soft",{"1":{"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"456":1,"457":1,"458":1,"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1,"886":1,"887":1,"888":1,"889":1,"890":1,"891":1,"892":1,"893":1,"2062":1,"2063":1,"2064":1,"2065":1,"2066":1,"2067":1,"2068":1,"2069":1,"2070":1,"2071":1},"3":{"0":14,"36":1,"38":3,"39":2,"40":1,"41":2,"313":1,"318":1,"326":1,"346":1,"358":1,"361":1,"362":2,"366":1,"456":1,"458":3,"459":3,"461":3,"462":2,"503":1,"538":1,"545":1,"549":1,"550":1,"551":1,"690":2,"698":4,"699":2,"700":1,"707":2,"710":1,"714":1,"715":1,"716":3,"721":2,"733":1,"734":1,"735":1,"748":1,"749":2,"781":1,"782":1,"886":1,"888":3,"889":7,"890":7,"891":4,"893":1,"905":1,"910":1,"926":1,"950":1,"1033":2,"1034":1,"1059":1,"1061":1,"1063":1,"1082":2,"1084":1,"1086":1,"1087":1,"1116":1,"1118":1,"1120":1,"1141":1,"1142":1,"1146":1,"1147":1,"1168":4,"1174":2,"1175":4,"1180":1,"1192":2,"1201":2,"1212":6,"1213":1,"1230":2,"1231":10,"1232":2,"1236":2,"1237":29,"1240":1,"1244":1,"1247":9,"1270":3,"1273":1,"1274":1,"1275":1,"1276":2,"1278":2,"1280":1,"1281":6,"1286":80,"1287":1,"1289":1,"1290":1,"1300":16,"1301":6,"1304":1,"1306":1,"1309":3,"1311":8,"1323":14,"1324":1,"1342":2,"1343":4,"1346":1,"1347":1,"1350":46,"1352":2,"1358":1,"1359":80,"1361":1,"1362":4,"1363":1,"1369":26,"1380":3,"1395":6,"1396":82,"1398":2,"1399":1,"1402":43,"1405":3,"1406":1,"1412":2,"1415":31,"1417":3,"1431":2,"1436":35,"1438":12,"1453":1,"1480":1,"1487":2,"1489":2,"1490":2,"1496":3,"1526":2,"1534":1,"1535":1,"1545":2,"1567":3,"1572":1,"1577":4,"1586":2,"1591":2,"1612":1,"1614":1,"1618":2,"1630":3,"1631":11,"1632":29,"1633":4,"1634":7,"1635":13,"1636":1,"1637":1,"1638":14,"1639":51,"1640":6,"1641":2,"1651":2,"1653":1,"1657":1,"1662":1,"1664":1,"1667":1,"1671":2,"1672":3,"1675":1,"1685":2,"1686":1,"1698":1,"1700":1,"1704":1,"1717":1,"1719":1,"1720":1,"1727":1,"1747":2,"1748":6,"1749":1,"1765":4,"1769":7,"1779":1,"1784":1,"1795":1,"1796":1,"1799":1,"1810":2,"1812":1,"1815":1,"1825":1,"1839":2,"1851":3,"1856":1,"1920":1,"1923":1,"1964":1,"1996":1,"2035":1,"2061":1,"2062":4,"2063":1,"2064":2,"2065":2,"2066":5,"2068":4,"2070":1,"2071":6,"2092":1,"2100":1,"2166":2,"2169":1,"2170":1,"2188":1,"2204":1,"2212":1,"2223":1,"2232":2,"2234":6}}],["so",{"0":{"96":1,"2022":1},"3":{"0":224,"1":2,"5":1,"15":3,"18":1,"19":2,"20":1,"21":2,"22":1,"23":2,"24":15,"26":4,"27":4,"30":1,"31":10,"32":2,"33":2,"34":1,"39":11,"41":5,"42":1,"43":1,"45":1,"46":2,"47":2,"53":4,"54":2,"59":4,"62":2,"63":1,"68":1,"71":2,"72":3,"73":2,"76":2,"78":3,"79":1,"80":3,"81":4,"88":1,"91":5,"92":1,"93":4,"94":2,"95":4,"97":2,"98":9,"99":2,"100":5,"101":1,"107":2,"109":23,"110":4,"111":3,"117":3,"118":2,"119":1,"120":2,"121":5,"122":7,"123":1,"124":1,"125":2,"126":4,"127":2,"128":2,"130":2,"132":2,"135":21,"136":2,"137":2,"139":4,"141":2,"142":2,"145":6,"147":7,"149":1,"150":5,"151":1,"152":1,"155":1,"157":6,"158":2,"159":4,"160":7,"161":2,"164":2,"165":1,"166":3,"167":1,"168":1,"170":2,"171":1,"173":1,"174":2,"175":3,"177":3,"178":4,"179":2,"180":4,"181":1,"184":2,"185":1,"186":9,"187":2,"189":2,"191":1,"193":2,"195":10,"196":2,"197":2,"198":1,"200":8,"201":8,"202":6,"203":3,"206":1,"207":1,"208":2,"213":2,"214":4,"215":2,"216":3,"217":2,"218":1,"219":3,"220":4,"223":2,"225":8,"227":3,"228":2,"230":5,"231":2,"233":3,"234":3,"235":13,"236":3,"237":6,"241":3,"242":1,"243":12,"244":3,"245":4,"246":1,"248":3,"249":2,"250":1,"253":1,"254":3,"255":9,"256":1,"257":1,"258":1,"259":4,"260":2,"261":2,"263":1,"264":1,"265":31,"266":2,"267":3,"268":1,"272":1,"273":5,"274":3,"275":2,"276":2,"279":2,"280":3,"281":3,"282":2,"283":3,"284":1,"285":3,"286":3,"290":2,"291":4,"292":2,"293":1,"295":5,"298":1,"300":2,"301":2,"302":2,"303":3,"304":1,"305":3,"306":2,"309":2,"310":4,"311":1,"312":2,"314":2,"317":1,"318":13,"319":2,"320":3,"322":1,"324":2,"325":4,"326":3,"330":5,"331":1,"332":1,"333":2,"335":5,"337":1,"339":1,"341":13,"342":4,"343":5,"344":2,"349":1,"350":15,"351":2,"352":4,"353":4,"358":5,"359":5,"360":3,"361":4,"365":4,"370":8,"371":2,"373":3,"374":1,"375":1,"380":1,"383":4,"384":2,"388":5,"390":6,"391":2,"392":1,"393":1,"395":4,"396":2,"397":13,"398":2,"399":2,"400":2,"401":5,"402":2,"403":1,"404":2,"405":2,"407":6,"408":1,"409":2,"413":7,"415":2,"418":2,"419":1,"420":3,"423":1,"424":2,"425":1,"426":2,"427":2,"428":1,"434":2,"435":3,"436":1,"440":1,"441":1,"442":1,"443":3,"444":4,"446":1,"448":5,"449":3,"450":3,"451":3,"452":1,"454":1,"457":1,"458":2,"459":13,"460":4,"461":3,"463":2,"464":3,"465":4,"466":1,"468":3,"469":1,"470":2,"471":1,"477":1,"478":2,"481":1,"482":1,"483":2,"484":3,"486":3,"487":2,"488":2,"489":2,"490":4,"491":4,"492":5,"493":7,"494":5,"495":3,"497":2,"498":2,"499":5,"501":5,"502":1,"505":1,"506":1,"507":7,"508":3,"509":1,"511":6,"512":1,"513":2,"514":2,"517":2,"518":6,"519":1,"520":1,"522":3,"523":3,"524":4,"526":3,"527":3,"528":5,"529":3,"530":5,"531":1,"532":1,"534":10,"536":8,"537":4,"538":6,"539":5,"540":4,"543":3,"544":1,"545":7,"546":2,"547":6,"549":13,"550":4,"551":8,"552":2,"555":1,"556":9,"557":4,"558":6,"559":1,"562":1,"564":7,"565":3,"566":3,"567":1,"572":8,"573":2,"574":2,"575":3,"576":2,"578":1,"583":8,"584":1,"585":10,"586":1,"589":1,"590":2,"591":3,"592":3,"593":5,"594":1,"597":1,"599":12,"600":1,"601":4,"602":1,"603":1,"605":1,"607":11,"609":14,"610":4,"611":5,"612":3,"613":1,"616":1,"617":1,"618":10,"619":2,"620":4,"624":7,"626":18,"627":2,"628":4,"629":3,"631":2,"632":2,"633":10,"634":2,"635":5,"636":2,"638":8,"640":12,"641":3,"642":6,"644":2,"648":1,"649":9,"650":3,"651":4,"655":1,"656":2,"657":12,"658":5,"659":3,"660":6,"664":1,"665":8,"666":1,"667":4,"668":2,"672":1,"674":11,"675":1,"676":4,"677":1,"680":1,"681":2,"682":5,"683":1,"684":8,"690":7,"691":8,"692":11,"693":1,"696":2,"698":16,"699":2,"700":4,"702":3,"703":1,"706":2,"707":6,"708":1,"709":4,"714":2,"715":5,"716":5,"717":5,"718":2,"719":2,"720":1,"723":1,"725":11,"726":1,"727":5,"728":1,"731":1,"732":1,"733":8,"734":1,"735":3,"736":1,"739":1,"740":2,"741":11,"742":1,"743":4,"747":1,"748":1,"749":8,"750":1,"751":3,"755":1,"756":1,"757":7,"758":5,"759":7,"760":2,"761":1,"762":1,"764":4,"766":6,"767":2,"768":4,"769":1,"773":1,"774":5,"775":4,"776":5,"778":1,"780":1,"781":1,"782":3,"783":1,"784":4,"785":1,"789":4,"790":9,"791":2,"792":6,"793":4,"797":1,"798":2,"799":5,"801":2,"804":1,"805":2,"809":1,"810":4,"812":2,"813":2,"814":2,"819":11,"820":1,"821":5,"825":2,"826":7,"827":19,"828":2,"829":8,"830":1,"831":4,"832":4,"833":4,"836":1,"837":4,"838":10,"839":1,"840":1,"844":1,"845":1,"846":7,"848":3,"849":1,"853":3,"854":6,"856":4,"857":4,"861":10,"862":3,"863":9,"867":1,"868":1,"869":3,"870":2,"871":1,"872":2,"873":3,"874":1,"875":4,"876":5,"877":1,"881":14,"882":3,"883":3,"884":2,"888":1,"889":5,"890":2,"891":3,"896":1,"897":10,"898":1,"899":3,"903":1,"904":2,"905":22,"906":2,"907":7,"908":2,"909":1,"912":1,"914":5,"916":4,"917":1,"920":2,"921":2,"922":8,"923":1,"924":2,"926":11,"927":1,"929":1,"930":2,"931":4,"932":4,"938":1,"939":2,"941":2,"945":1,"946":4,"948":5,"952":1,"953":1,"954":11,"955":3,"956":4,"958":2,"959":1,"960":2,"963":3,"964":8,"965":1,"966":2,"967":1,"971":1,"972":6,"973":3,"974":5,"975":1,"979":1,"980":3,"981":1,"982":3,"983":2,"986":1,"987":1,"988":12,"989":2,"990":4,"991":1,"995":2,"996":10,"997":1,"998":4,"999":2,"1003":1,"1004":4,"1005":3,"1006":3,"1012":4,"1013":1,"1014":2,"1016":2,"1017":3,"1018":26,"1019":8,"1020":7,"1021":2,"1024":1,"1026":4,"1028":5,"1029":1,"1030":1,"1033":2,"1034":5,"1036":3,"1041":3,"1042":8,"1043":2,"1044":4,"1045":2,"1049":1,"1050":11,"1051":1,"1052":4,"1054":2,"1055":3,"1058":1,"1059":13,"1060":1,"1061":4,"1062":3,"1065":1,"1066":5,"1067":14,"1068":3,"1069":3,"1074":3,"1075":4,"1076":1,"1077":2,"1079":1,"1081":1,"1082":2,"1083":5,"1085":5,"1089":2,"1090":3,"1091":17,"1092":4,"1093":6,"1100":6,"1107":1,"1108":5,"1109":2,"1115":3,"1116":15,"1117":4,"1118":7,"1119":1,"1123":2,"1124":14,"1125":3,"1126":2,"1127":2,"1128":1,"1132":4,"1133":12,"1134":3,"1135":5,"1136":1,"1144":1,"1145":1,"1150":2,"1154":3,"1155":1,"1156":1,"1160":2,"1161":4,"1162":1,"1163":1,"1168":6,"1169":1,"1170":3,"1174":1,"1175":6,"1176":1,"1177":3,"1178":2,"1183":1,"1184":7,"1185":1,"1186":2,"1187":2,"1190":1,"1191":4,"1193":1,"1196":2,"1210":1,"1212":34,"1213":2,"1214":2,"1215":2,"1216":2,"1218":1,"1219":1,"1220":4,"1221":2,"1222":2,"1223":3,"1224":2,"1225":3,"1226":1,"1227":3,"1228":4,"1229":54,"1230":1,"1231":6,"1232":5,"1233":6,"1234":8,"1235":2,"1236":4,"1237":102,"1239":10,"1240":4,"1241":15,"1242":6,"1243":7,"1244":6,"1246":3,"1247":186,"1248":1,"1249":4,"1250":1,"1251":3,"1252":9,"1253":7,"1254":2,"1255":4,"1256":8,"1257":6,"1258":7,"1259":183,"1260":1,"1261":2,"1262":3,"1263":20,"1264":6,"1265":11,"1266":1,"1267":11,"1269":13,"1270":230,"1271":55,"1273":11,"1274":11,"1275":13,"1276":12,"1277":3,"1278":9,"1279":4,"1280":3,"1281":12,"1282":3,"1283":7,"1284":10,"1285":3,"1286":606,"1287":2,"1288":8,"1289":12,"1290":9,"1291":2,"1292":7,"1293":11,"1294":9,"1295":1,"1296":2,"1297":7,"1298":6,"1299":2,"1300":451,"1301":114,"1302":2,"1303":2,"1304":7,"1305":3,"1306":3,"1307":9,"1308":4,"1309":176,"1310":40,"1311":440,"1312":61,"1313":1,"1314":3,"1315":7,"1316":13,"1317":10,"1318":11,"1320":12,"1321":2,"1322":10,"1323":392,"1324":746,"1325":2,"1326":7,"1327":4,"1328":7,"1329":1,"1330":3,"1331":1,"1332":10,"1333":12,"1334":3,"1335":4,"1336":6,"1337":10,"1338":10,"1339":339,"1341":2,"1342":9,"1343":3,"1344":4,"1345":2,"1346":2,"1347":8,"1348":7,"1349":7,"1350":297,"1352":13,"1353":10,"1354":4,"1355":16,"1356":4,"1357":9,"1358":9,"1359":1013,"1360":1,"1362":7,"1364":5,"1365":2,"1366":10,"1367":2,"1368":5,"1369":93,"1371":3,"1372":5,"1373":5,"1374":5,"1375":5,"1376":3,"1377":3,"1378":5,"1379":11,"1380":184,"1381":1,"1382":3,"1383":6,"1384":4,"1385":4,"1386":2,"1387":2,"1388":4,"1389":14,"1390":5,"1391":9,"1392":4,"1393":5,"1394":2,"1395":601,"1396":706,"1397":2,"1398":2,"1399":11,"1400":4,"1401":7,"1402":235,"1403":1,"1404":1,"1405":7,"1406":14,"1407":3,"1408":6,"1409":10,"1410":9,"1411":7,"1412":5,"1413":7,"1414":5,"1415":369,"1416":87,"1417":340,"1419":4,"1420":3,"1421":5,"1422":7,"1423":11,"1424":6,"1425":7,"1426":3,"1427":73,"1428":3,"1429":16,"1430":10,"1431":25,"1432":11,"1433":10,"1434":6,"1435":13,"1436":1113,"1437":1,"1438":100,"1440":2,"1441":35,"1442":13,"1443":24,"1444":9,"1445":13,"1446":2,"1447":23,"1449":8,"1450":1,"1452":2,"1453":17,"1454":11,"1455":71,"1456":19,"1457":4,"1458":5,"1459":11,"1460":9,"1461":2,"1462":1,"1463":2,"1465":12,"1467":115,"1469":1,"1470":1,"1471":1,"1472":4,"1473":4,"1474":9,"1475":25,"1476":17,"1477":6,"1478":1,"1480":2,"1481":6,"1483":1,"1484":2,"1486":9,"1487":1,"1488":35,"1489":30,"1490":22,"1491":5,"1492":28,"1496":50,"1497":1,"1498":3,"1500":4,"1504":1,"1507":2,"1508":3,"1509":1,"1510":1,"1512":1,"1513":2,"1517":2,"1524":3,"1525":1,"1526":36,"1527":2,"1531":9,"1532":1,"1533":1,"1534":11,"1536":2,"1537":1,"1541":1,"1542":1,"1544":1,"1545":1,"1553":3,"1557":1,"1567":1,"1569":2,"1570":1,"1571":1,"1575":2,"1576":2,"1577":25,"1578":3,"1582":6,"1583":1,"1584":2,"1585":6,"1589":3,"1591":22,"1592":1,"1596":10,"1597":1,"1598":1,"1599":6,"1600":2,"1610":1,"1611":4,"1612":1,"1613":2,"1626":1,"1627":8,"1630":4,"1631":22,"1635":2,"1638":4,"1639":4,"1640":2,"1641":24,"1643":2,"1644":1,"1645":1,"1646":2,"1647":1,"1648":3,"1649":2,"1650":1,"1651":8,"1652":4,"1653":10,"1654":5,"1655":1,"1656":3,"1657":1,"1660":2,"1661":6,"1662":7,"1663":4,"1664":6,"1665":6,"1666":4,"1667":6,"1668":6,"1669":9,"1670":9,"1671":7,"1672":4,"1673":5,"1675":3,"1676":1,"1677":10,"1678":1,"1679":3,"1681":1,"1682":2,"1683":1,"1684":6,"1685":14,"1686":14,"1687":1,"1688":1,"1689":4,"1692":1,"1693":4,"1697":1,"1698":3,"1699":3,"1700":1,"1701":7,"1702":6,"1705":1,"1706":3,"1707":3,"1708":3,"1711":1,"1714":1,"1715":1,"1718":1,"1719":4,"1720":2,"1721":3,"1722":2,"1723":1,"1724":1,"1725":1,"1727":19,"1728":4,"1729":4,"1730":4,"1731":2,"1732":2,"1735":1,"1736":1,"1744":1,"1747":1,"1748":10,"1749":10,"1750":3,"1751":1,"1757":1,"1758":1,"1759":2,"1760":1,"1761":6,"1764":6,"1765":17,"1766":1,"1767":5,"1769":2,"1770":1,"1772":1,"1773":2,"1779":1,"1780":1,"1781":4,"1782":2,"1783":1,"1784":1,"1785":1,"1788":2,"1789":4,"1790":2,"1792":1,"1794":1,"1796":1,"1799":2,"1800":1,"1805":8,"1806":2,"1810":16,"1811":1,"1814":2,"1815":16,"1816":1,"1817":2,"1819":1,"1821":10,"1822":2,"1823":3,"1824":2,"1825":10,"1826":2,"1827":1,"1828":2,"1829":3,"1830":2,"1831":4,"1832":2,"1833":2,"1834":2,"1838":3,"1839":2,"1840":10,"1841":3,"1842":4,"1843":2,"1844":3,"1845":4,"1848":2,"1849":5,"1851":8,"1852":1,"1853":1,"1855":1,"1856":5,"1857":3,"1858":4,"1859":3,"1860":2,"1861":4,"1862":1,"1863":1,"1865":4,"1867":1,"1868":2,"1869":1,"1871":6,"1872":2,"1873":2,"1874":4,"1875":2,"1876":8,"1877":5,"1879":1,"1880":1,"1881":3,"1882":3,"1883":1,"1884":1,"1885":1,"1886":4,"1889":7,"1891":3,"1892":1,"1893":2,"1895":2,"1896":6,"1897":1,"1898":7,"1899":2,"1900":1,"1902":9,"1903":2,"1904":1,"1905":3,"1906":1,"1908":7,"1909":10,"1910":4,"1911":3,"1912":3,"1913":2,"1915":3,"1916":10,"1917":3,"1918":3,"1919":4,"1920":9,"1921":1,"1922":12,"1923":15,"1924":3,"1926":1,"1927":5,"1928":1,"1929":5,"1930":1,"1932":1,"1933":8,"1934":3,"1935":4,"1936":3,"1937":3,"1938":2,"1940":2,"1941":3,"1942":1,"1944":8,"1945":7,"1946":4,"1947":3,"1948":10,"1949":2,"1950":4,"1951":1,"1952":1,"1953":3,"1954":2,"1955":2,"1956":2,"1959":3,"1960":1,"1962":8,"1963":3,"1964":1,"1965":2,"1966":1,"1967":1,"1968":5,"1969":2,"1970":4,"1971":3,"1972":2,"1973":2,"1974":1,"1975":5,"1976":4,"1977":5,"1978":6,"1979":1,"1980":1,"1981":2,"1982":10,"1983":1,"1984":5,"1985":6,"1986":2,"1987":1,"1988":9,"1989":3,"1990":6,"1991":1,"1993":1,"1994":2,"1995":9,"1996":14,"1997":3,"1998":3,"1999":3,"2000":1,"2001":17,"2002":8,"2003":2,"2005":1,"2007":2,"2008":4,"2009":4,"2010":2,"2011":12,"2012":2,"2013":6,"2014":4,"2015":2,"2017":1,"2020":4,"2021":1,"2022":2,"2023":1,"2024":1,"2025":7,"2026":6,"2028":2,"2029":4,"2031":4,"2032":1,"2033":3,"2034":2,"2035":6,"2036":1,"2037":1,"2038":3,"2039":1,"2042":2,"2043":4,"2044":7,"2045":2,"2046":1,"2047":2,"2048":6,"2049":2,"2050":1,"2053":3,"2056":6,"2057":6,"2058":5,"2059":2,"2060":1,"2061":1,"2062":2,"2064":8,"2065":1,"2066":4,"2067":1,"2068":6,"2069":4,"2071":2,"2072":2,"2073":1,"2074":2,"2075":1,"2076":3,"2077":6,"2078":4,"2079":3,"2080":3,"2081":3,"2082":5,"2083":3,"2084":1,"2085":8,"2087":7,"2088":2,"2089":2,"2091":3,"2092":2,"2093":1,"2095":1,"2096":3,"2097":3,"2098":4,"2099":7,"2100":2,"2101":1,"2102":1,"2103":1,"2106":3,"2107":3,"2108":2,"2109":2,"2110":4,"2113":3,"2114":1,"2115":4,"2116":2,"2118":2,"2119":5,"2120":6,"2121":1,"2122":1,"2123":4,"2125":5,"2128":8,"2129":3,"2133":9,"2134":2,"2135":3,"2136":3,"2137":1,"2138":5,"2139":2,"2140":8,"2141":5,"2142":1,"2143":1,"2144":3,"2145":2,"2146":2,"2147":3,"2148":4,"2149":1,"2151":3,"2152":9,"2154":3,"2155":3,"2156":1,"2157":2,"2158":16,"2159":4,"2160":9,"2161":6,"2162":3,"2163":2,"2165":7,"2166":4,"2167":10,"2168":7,"2169":11,"2170":9,"2171":4,"2172":1,"2174":3,"2175":1,"2176":4,"2177":4,"2178":4,"2179":1,"2181":7,"2182":3,"2183":4,"2185":2,"2186":1,"2187":2,"2188":3,"2189":1,"2190":1,"2191":2,"2192":6,"2194":5,"2195":4,"2196":1,"2197":2,"2198":2,"2199":3,"2200":2,"2201":5,"2202":2,"2203":1,"2204":2,"2205":4,"2206":1,"2209":1,"2213":1,"2218":1,"2229":1,"2232":4,"2234":13,"2244":1}}],["stderr",{"3":{"790":1,"792":2,"794":1,"1456":1,"1465":1,"1467":2,"1589":1,"1591":1,"1596":1,"1597":1}}],["stdout",{"3":{"0":1,"401":2,"914":1,"916":1,"1339":1,"1442":1,"1456":1,"1465":1,"1467":3,"1476":1}}],["stylistic",{"3":{"979":1,"1229":1,"1311":1,"1359":1,"1417":1,"1436":1,"1460":1}}],["styling",{"3":{"682":1,"905":1,"1324":1,"1436":1,"1557":1,"1561":1}}],["stylefunc",{"3":{"1436":1}}],["stylefunc=",{"3":{"1436":1,"1526":1}}],["style=",{"3":{"1436":3,"1526":2,"1534":2,"1591":1,"1600":1}}],["styled",{"3":{"1396":1,"1415":1,"1417":1}}],["stylecop",{"3":{"1213":1,"1453":1,"1577":1,"1673":1}}],["stylesheets",{"3":{"1431":1,"1436":3,"2081":1}}],["stylesheet",{"3":{"1324":1,"1395":1,"1417":1,"1436":8,"1489":1,"1496":1,"1526":2,"1534":1,"1591":3,"1596":3,"1597":1,"2077":2,"2152":1}}],["styles",{"0":{"1212":1,"2232":1},"3":{"0":1,"214":1,"216":2,"469":1,"889":1,"981":1,"1052":1,"1229":1,"1286":1,"1324":3,"1339":1,"1351":1,"1359":2,"1396":2,"1436":3,"1439":1,"1443":1,"1526":2,"1534":1,"1535":1,"1557":2,"2081":1,"2151":1,"2154":1,"2232":1}}],["style",{"0":{"1214":1,"1879":1},"2":{"1004":1,"1214":1},"3":{"0":5,"207":1,"212":1,"213":1,"214":3,"215":1,"216":2,"219":1,"546":1,"725":1,"748":1,"855":1,"980":1,"1004":1,"1034":1,"1059":1,"1134":1,"1137":1,"1160":1,"1162":1,"1164":1,"1169":1,"1171":1,"1210":1,"1212":1,"1214":2,"1229":2,"1247":1,"1265":1,"1270":2,"1273":1,"1286":4,"1297":1,"1300":8,"1309":2,"1310":1,"1323":2,"1324":6,"1336":1,"1339":7,"1343":1,"1350":2,"1359":10,"1369":1,"1395":4,"1396":3,"1402":1,"1417":2,"1436":19,"1437":2,"1438":20,"1443":1,"1497":1,"1524":2,"1525":2,"1526":2,"1530":1,"1532":1,"1534":1,"1552":1,"1554":1,"1574":1,"1577":6,"1581":1,"1582":2,"1583":1,"1591":1,"1600":2,"1685":1,"1807":1,"1826":1,"1856":1,"1988":1,"2061":1,"2081":2,"2088":1,"2149":2,"2151":3,"2152":2,"2154":2,"2155":1,"2188":1,"2199":1}}],["stickiness",{"3":{"2140":2}}],["stick",{"3":{"1436":1}}],["sticks",{"3":{"1380":1,"1433":1}}],["stickysidebare2etests",{"3":{"1199":1,"1207":2,"1436":1,"1438":2}}],["sticky",{"3":{"664":1,"666":1,"669":1,"1311":3,"1438":2,"1467":4}}],["stitches",{"3":{"398":1,"400":1,"1309":1,"1380":1,"1396":1,"1653":1}}],["stillcarriestheauthippolicy",{"3":{"2001":1}}],["stillcoversframeworkevents",{"3":{"1436":1}}],["stillfails",{"3":{"1436":1}}],["stillassertsthetwoscanscannotoverlap",{"3":{"1436":1}}],["stillreported",{"3":{"1436":5}}],["stillreportsunhealthyratherthanthrowing",{"3":{"1339":1}}],["still",{"0":{"2054":1,"2066":1},"1":{"1047":1,"1048":1,"1049":1,"1050":1,"1051":1,"1052":1,"1053":1,"1054":1,"1055":1},"3":{"0":27,"13":1,"22":1,"23":1,"24":5,"26":2,"27":3,"39":1,"41":2,"42":1,"46":1,"47":1,"59":1,"62":1,"70":1,"71":2,"73":2,"80":1,"81":1,"91":4,"92":3,"93":1,"95":1,"96":1,"98":1,"104":1,"109":3,"111":3,"117":1,"120":1,"121":2,"123":1,"125":3,"126":2,"127":1,"130":1,"135":2,"137":1,"139":6,"140":1,"141":1,"142":4,"145":1,"147":2,"152":2,"155":1,"157":1,"159":1,"160":1,"166":1,"170":1,"175":1,"177":1,"178":5,"179":3,"186":1,"188":1,"190":2,"195":2,"198":1,"199":1,"200":4,"201":5,"202":1,"203":1,"207":1,"214":1,"215":2,"216":2,"220":1,"225":2,"231":1,"235":5,"236":1,"237":4,"241":1,"243":2,"245":1,"246":1,"248":2,"250":1,"253":1,"254":2,"255":2,"256":3,"257":4,"258":2,"259":6,"260":1,"261":1,"265":4,"267":1,"273":1,"275":1,"280":1,"283":1,"286":1,"293":1,"294":1,"296":2,"300":1,"302":1,"303":3,"310":1,"318":2,"320":2,"330":1,"335":1,"337":1,"342":1,"343":2,"350":1,"352":2,"358":1,"359":3,"361":5,"364":1,"366":2,"383":1,"384":1,"387":2,"390":3,"392":1,"397":2,"407":4,"408":2,"409":1,"413":2,"422":2,"423":1,"424":2,"425":1,"426":4,"428":2,"429":2,"442":1,"444":1,"447":1,"448":1,"449":1,"451":1,"454":1,"458":1,"459":3,"461":1,"462":1,"464":1,"465":1,"466":3,"478":1,"480":1,"487":2,"488":2,"489":3,"490":3,"491":7,"492":8,"493":6,"494":3,"495":2,"497":2,"499":1,"507":1,"511":1,"513":1,"518":1,"522":2,"523":3,"524":3,"528":1,"529":2,"536":3,"538":3,"539":4,"540":2,"544":1,"545":1,"546":1,"549":7,"550":4,"551":3,"552":2,"558":1,"564":2,"565":1,"572":3,"573":1,"577":2,"578":1,"583":3,"584":1,"585":2,"590":1,"592":1,"593":1,"599":1,"601":3,"602":1,"607":4,"609":2,"610":1,"618":1,"620":1,"624":3,"625":1,"626":3,"627":1,"628":1,"633":1,"634":1,"636":2,"640":1,"642":4,"651":3,"656":1,"657":3,"658":1,"661":1,"667":1,"668":1,"674":1,"681":1,"684":2,"688":2,"691":1,"692":1,"696":1,"698":3,"700":1,"702":2,"703":4,"707":1,"709":2,"715":2,"717":1,"718":1,"724":3,"732":1,"733":2,"735":1,"741":3,"743":2,"749":1,"751":1,"756":1,"757":1,"759":1,"761":1,"766":1,"767":1,"774":1,"776":1,"782":1,"789":1,"790":4,"792":1,"798":1,"800":2,"801":2,"803":3,"804":2,"805":2,"809":3,"812":1,"813":6,"814":1,"819":1,"825":1,"826":1,"827":3,"829":3,"830":1,"831":2,"832":2,"833":1,"837":1,"839":2,"840":3,"848":1,"849":3,"856":1,"861":1,"862":1,"867":1,"872":2,"876":1,"877":2,"881":1,"882":1,"888":2,"890":1,"891":1,"897":2,"898":3,"899":1,"905":2,"906":1,"907":6,"914":1,"920":2,"921":2,"924":1,"926":4,"931":1,"932":1,"939":1,"941":1,"942":1,"945":1,"946":2,"949":1,"956":2,"959":2,"965":1,"967":1,"971":1,"972":1,"974":1,"975":1,"981":1,"983":2,"988":3,"996":2,"998":1,"999":1,"1006":1,"1014":1,"1018":5,"1020":2,"1026":2,"1027":1,"1028":1,"1043":1,"1045":1,"1047":1,"1049":2,"1051":4,"1052":1,"1054":5,"1055":3,"1058":1,"1059":3,"1066":1,"1069":1,"1070":1,"1073":1,"1078":1,"1079":1,"1086":1,"1089":1,"1092":2,"1093":2,"1100":1,"1116":1,"1118":1,"1123":1,"1135":1,"1136":1,"1156":1,"1168":1,"1170":2,"1175":2,"1177":1,"1183":2,"1185":1,"1186":2,"1196":1,"1212":2,"1222":1,"1225":1,"1226":1,"1228":1,"1229":5,"1231":3,"1233":1,"1236":1,"1237":8,"1241":2,"1242":1,"1244":1,"1247":23,"1249":1,"1251":1,"1252":1,"1254":1,"1259":29,"1262":2,"1263":3,"1264":1,"1265":1,"1267":2,"1269":1,"1270":31,"1271":5,"1274":2,"1276":1,"1278":2,"1280":1,"1281":3,"1284":1,"1285":1,"1286":80,"1288":1,"1289":2,"1290":1,"1292":2,"1294":1,"1297":1,"1298":3,"1300":74,"1301":24,"1302":2,"1304":1,"1305":1,"1308":1,"1309":21,"1310":3,"1311":64,"1312":7,"1314":2,"1315":1,"1316":2,"1317":3,"1323":42,"1324":85,"1328":1,"1332":1,"1334":3,"1336":1,"1337":1,"1338":2,"1339":36,"1344":1,"1346":1,"1350":16,"1352":2,"1353":1,"1354":3,"1355":1,"1357":2,"1359":87,"1362":1,"1364":1,"1366":3,"1369":11,"1377":1,"1379":2,"1380":9,"1383":1,"1389":1,"1390":1,"1391":1,"1395":74,"1396":64,"1397":2,"1398":2,"1399":2,"1400":2,"1401":2,"1402":31,"1410":2,"1412":1,"1415":43,"1416":6,"1417":42,"1421":2,"1423":1,"1427":4,"1429":1,"1430":1,"1431":1,"1435":4,"1436":148,"1438":18,"1441":1,"1443":5,"1445":5,"1446":1,"1447":3,"1449":1,"1451":1,"1453":4,"1455":17,"1456":7,"1457":1,"1459":2,"1463":2,"1465":1,"1466":1,"1467":29,"1468":2,"1469":1,"1472":1,"1474":3,"1475":2,"1476":4,"1477":1,"1478":3,"1481":3,"1484":1,"1486":2,"1488":7,"1489":1,"1490":3,"1492":6,"1496":6,"1497":1,"1515":1,"1517":1,"1524":1,"1525":1,"1562":1,"1586":2,"1596":1,"1611":1,"1627":1,"1631":2,"1632":2,"1638":1,"1640":1,"1641":5,"1651":2,"1652":1,"1653":2,"1656":1,"1662":1,"1663":1,"1670":1,"1677":3,"1684":3,"1685":8,"1686":2,"1690":1,"1693":1,"1702":2,"1708":2,"1713":1,"1719":1,"1720":1,"1727":4,"1731":1,"1737":1,"1748":3,"1749":2,"1759":1,"1765":4,"1766":1,"1767":1,"1770":1,"1776":1,"1789":1,"1790":1,"1799":1,"1800":1,"1807":1,"1810":3,"1815":1,"1817":1,"1822":1,"1825":3,"1838":1,"1840":2,"1845":1,"1848":1,"1849":1,"1851":2,"1857":1,"1858":1,"1866":1,"1867":1,"1873":1,"1875":1,"1881":3,"1882":3,"1886":1,"1887":1,"1888":1,"1891":3,"1892":1,"1894":1,"1896":1,"1898":1,"1903":1,"1908":3,"1909":2,"1910":2,"1911":2,"1913":1,"1915":1,"1916":1,"1917":1,"1918":2,"1919":2,"1920":2,"1922":1,"1923":5,"1924":1,"1925":2,"1927":2,"1928":1,"1933":1,"1934":2,"1935":1,"1940":3,"1944":2,"1946":1,"1949":3,"1951":1,"1953":1,"1956":1,"1961":1,"1962":1,"1963":1,"1964":1,"1965":2,"1966":1,"1968":3,"1970":1,"1971":1,"1976":1,"1978":3,"1979":1,"1982":1,"1984":2,"1986":1,"1988":2,"1990":1,"1995":3,"1996":1,"1997":2,"1998":2,"1999":1,"2001":4,"2002":1,"2003":1,"2008":2,"2009":1,"2011":1,"2014":1,"2017":1,"2025":1,"2026":2,"2031":1,"2035":1,"2037":1,"2044":1,"2046":2,"2048":1,"2052":1,"2056":1,"2057":1,"2058":1,"2059":1,"2064":3,"2066":1,"2067":1,"2068":3,"2070":1,"2080":1,"2081":3,"2085":1,"2087":1,"2088":1,"2092":1,"2095":1,"2097":2,"2098":1,"2099":1,"2100":1,"2110":1,"2124":1,"2125":1,"2126":2,"2128":1,"2129":1,"2132":1,"2133":1,"2137":1,"2140":2,"2142":1,"2144":2,"2147":5,"2150":1,"2152":4,"2154":1,"2155":2,"2158":2,"2160":1,"2163":1,"2165":1,"2166":1,"2167":2,"2168":3,"2169":2,"2170":1,"2171":2,"2175":1,"2178":1,"2181":2,"2182":1,"2183":1,"2192":1,"2193":1,"2205":2,"2234":4}}],["steals",{"3":{"2148":1}}],["stealing",{"3":{"2048":1,"2075":1,"2152":1,"2160":1,"2166":1,"2193":1,"2199":1}}],["stealable",{"3":{"1985":1}}],["steal",{"3":{"1300":1,"1324":1,"1454":1,"1981":1}}],["steady",{"3":{"390":1,"397":1,"399":1,"996":1,"1259":2,"1301":3,"1323":3,"1459":1,"1677":2,"2156":1,"2159":1,"2161":1}}],["steers",{"3":{"1323":1,"1417":3,"1436":1}}],["steering",{"3":{"1300":1,"1415":1,"1737":1}}],["steer",{"3":{"1270":1,"1324":2}}],["steered",{"3":{"659":1}}],["stem",{"3":{"741":1,"1286":2,"1393":1,"1395":1}}],["stepnames",{"3":{"1311":2,"1436":2}}],["stepupquery",{"3":{"1199":2,"1207":1}}],["stepupcommand",{"3":{"1199":2,"1207":1}}],["steppable",{"3":{"6":1,"1359":1}}],["stepped",{"3":{"0":1,"859":1,"1270":1}}],["steps",{"3":{"0":5,"110":1,"168":1,"243":1,"256":1,"296":1,"360":1,"368":1,"459":2,"464":1,"528":2,"536":1,"562":1,"566":1,"593":1,"599":1,"602":1,"604":1,"609":2,"611":1,"633":1,"698":1,"747":1,"749":3,"790":1,"809":1,"810":2,"873":1,"881":1,"914":2,"923":1,"927":1,"1018":1,"1094":1,"1212":1,"1229":1,"1247":2,"1248":1,"1254":1,"1259":1,"1265":1,"1270":1,"1286":1,"1289":1,"1300":5,"1301":2,"1310":1,"1311":18,"1312":1,"1315":1,"1316":1,"1323":2,"1324":2,"1336":1,"1359":18,"1369":1,"1380":1,"1395":3,"1396":1,"1402":1,"1415":1,"1417":3,"1436":7,"1453":1,"1454":4,"1455":7,"1456":1,"1461":1,"1463":1,"1467":2,"1478":1,"1481":1,"1488":1,"1490":2,"1526":1,"1577":2,"1585":1,"1602":1,"1641":1,"1653":1,"1659":1,"1666":2,"1674":1,"1675":1,"1692":1,"1717":1,"1719":1,"1725":1,"1727":1,"1729":1,"1747":3,"1749":1,"1765":10,"1808":1,"1815":1,"1825":3,"1835":1,"1846":1,"1898":1,"1923":1,"2027":1,"2036":1,"2047":2,"2089":2,"2102":1,"2103":3,"2107":1,"2165":1,"2170":1,"2171":1,"2195":2,"2204":1,"2228":1}}],["step",{"0":{"1293":1,"2006":1,"2007":1,"2008":1,"2009":1,"2010":1,"2011":1,"2012":1,"2013":1,"2017":1,"2018":1,"2019":1,"2020":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2091":1,"2092":1,"2093":1,"2094":1,"2095":1,"2096":1,"2097":1,"2098":1,"2104":1,"2105":1,"2106":1,"2107":1,"2108":1,"2199":1},"2":{"451":1,"483":1},"3":{"0":16,"24":1,"57":1,"59":2,"62":1,"63":1,"109":2,"115":1,"117":1,"126":3,"128":2,"132":1,"135":2,"137":2,"140":3,"142":2,"147":1,"149":1,"217":1,"220":1,"243":1,"256":2,"258":2,"265":1,"291":2,"292":1,"295":1,"343":1,"365":1,"370":4,"371":1,"373":3,"375":1,"435":1,"451":2,"452":1,"453":1,"457":2,"459":4,"462":2,"464":6,"466":1,"483":1,"529":3,"530":1,"534":1,"535":4,"536":5,"563":1,"564":7,"566":4,"567":1,"584":1,"587":1,"600":1,"608":1,"624":1,"626":8,"627":1,"628":1,"629":2,"632":1,"633":1,"635":1,"640":1,"656":1,"659":1,"665":1,"666":1,"674":3,"675":1,"684":1,"696":1,"698":5,"700":1,"703":1,"725":1,"733":1,"735":1,"741":1,"747":1,"749":13,"751":6,"756":2,"757":9,"758":1,"766":5,"767":2,"769":1,"774":5,"776":1,"777":2,"791":1,"809":7,"810":2,"812":2,"813":1,"829":1,"839":1,"847":1,"861":2,"864":1,"867":1,"870":2,"873":1,"876":2,"877":1,"882":1,"907":2,"917":1,"920":1,"927":1,"941":1,"991":1,"1018":3,"1020":2,"1043":1,"1058":1,"1059":2,"1060":2,"1067":1,"1069":2,"1116":1,"1117":1,"1124":1,"1156":1,"1170":1,"1184":1,"1187":1,"1212":2,"1220":1,"1229":9,"1233":2,"1237":1,"1241":1,"1244":1,"1247":3,"1252":2,"1253":1,"1258":1,"1259":6,"1262":1,"1263":2,"1264":1,"1265":3,"1270":15,"1271":1,"1284":1,"1286":28,"1293":2,"1300":28,"1301":6,"1309":3,"1311":46,"1312":1,"1315":2,"1318":1,"1320":1,"1322":2,"1323":15,"1324":10,"1325":1,"1338":1,"1339":2,"1346":1,"1350":3,"1359":66,"1364":1,"1366":1,"1367":1,"1369":1,"1375":1,"1380":2,"1395":15,"1396":12,"1399":1,"1400":1,"1402":1,"1415":18,"1416":1,"1417":6,"1427":1,"1433":1,"1436":25,"1438":2,"1445":6,"1447":1,"1449":1,"1452":2,"1453":21,"1454":15,"1455":43,"1456":15,"1457":2,"1458":6,"1459":6,"1460":3,"1461":2,"1465":7,"1466":2,"1467":8,"1469":2,"1471":2,"1472":1,"1473":2,"1475":13,"1476":2,"1477":1,"1478":1,"1481":1,"1482":1,"1486":4,"1488":5,"1489":1,"1490":6,"1492":13,"1496":1,"1526":2,"1531":1,"1545":1,"1570":1,"1572":1,"1577":8,"1582":1,"1591":5,"1600":1,"1611":1,"1631":1,"1641":3,"1646":1,"1651":1,"1656":1,"1658":1,"1661":3,"1663":2,"1667":1,"1670":1,"1673":2,"1681":1,"1682":2,"1683":1,"1684":3,"1685":2,"1686":3,"1696":1,"1697":1,"1705":1,"1719":1,"1722":2,"1726":1,"1728":1,"1729":3,"1774":2,"1805":2,"1815":1,"1821":2,"1824":1,"1825":6,"1826":1,"1835":2,"1839":1,"1845":1,"1846":1,"1876":1,"1881":2,"1898":3,"1909":1,"1910":1,"1915":1,"1920":1,"1923":1,"1940":1,"1982":1,"2004":2,"2007":4,"2014":1,"2016":5,"2023":1,"2024":1,"2025":3,"2035":1,"2042":1,"2046":1,"2047":1,"2068":2,"2077":1,"2089":2,"2095":1,"2097":3,"2098":1,"2099":1,"2101":1,"2102":1,"2103":1,"2107":2,"2108":1,"2134":1,"2138":1,"2144":1,"2149":1,"2163":1,"2164":3,"2165":3,"2166":2,"2167":1,"2169":2,"2170":2,"2171":5,"2189":1,"2191":1,"2196":2,"2197":1,"2198":1,"2199":2,"2200":2,"2205":4,"2208":1,"2234":3,"2236":1}}],["stumbles",{"3":{"1912":1}}],["student",{"3":{"1395":1}}],["study",{"3":{"1324":2,"1332":1,"1395":1,"1396":1,"1416":1,"1779":1,"2111":1,"2236":1}}],["studying",{"3":{"1286":1,"1300":1,"1309":1,"1324":2,"1350":1,"1359":2,"1380":1,"1390":1,"1396":1,"1399":1}}],["studio",{"3":{"214":1,"219":1,"665":1,"1074":1,"1324":1,"1335":1,"1339":2,"2152":1}}],["studied",{"3":{"0":1,"1033":1,"1324":1}}],["stuffing",{"3":{"174":1,"280":1,"286":1,"403":1,"612":1,"1292":1,"1300":1,"1326":1,"1339":1,"1444":1,"1999":2,"2000":1,"2002":1}}],["stubviewport",{"3":{"1436":4}}],["stubregistrations",{"3":{"1323":1}}],["stubrefresher",{"3":{"1199":3,"1207":2}}],["stubpushnotificationuiservice",{"2":{"1434":1},"3":{"1199":2,"1207":2,"1434":2,"1436":4}}],["stubparent",{"3":{"1199":2,"1207":1}}],["stubnotificationinboxuiservice",{"2":{"1434":1},"3":{"1199":2,"1207":2,"1434":2,"1436":5}}],["stubentity",{"3":{"1199":2,"1207":1}}],["stuberrorlocalizer",{"3":{"1199":2,"1207":1}}],["stubuimodule",{"3":{"1199":2,"1207":1,"1324":1}}],["stubmap",{"3":{"1199":2,"1207":1,"1436":3}}],["stubmetricsbuilder",{"3":{"1199":2,"1207":1}}],["stubfeaturemanager",{"3":{"1199":2,"1207":1}}],["stubguardrail",{"3":{"1199":4,"1207":2,"1427":1,"1435":2,"1487":1}}],["stubtwofactorservice",{"3":{"1199":2,"1207":1}}],["stubtenantcontext",{"3":{"1199":2,"1207":1}}],["stubtoolpolicy",{"3":{"1199":3,"1207":3,"1427":1}}],["stubtool",{"3":{"1199":2,"1207":1}}],["stubtokenstorageservicetests",{"3":{"1199":1,"1207":2,"1436":1}}],["stubtokenstorageservice",{"2":{"1432":1},"3":{"954":1,"1199":9,"1207":2,"1324":1,"1428":1,"1432":2,"1436":7,"1488":1}}],["stublocalizer",{"3":{"1199":8,"1207":5}}],["stubloggingbuilder",{"3":{"1199":2,"1207":1}}],["stubwebhostenvironment",{"3":{"1199":2,"1207":1}}],["stubcurrentuserservice",{"3":{"1199":3,"1207":1}}],["stubchild",{"3":{"1199":2,"1207":1}}],["stubchanneljoinauthorizer",{"3":{"1199":2,"1207":1}}],["stubchatclient",{"3":{"1199":17,"1207":6,"1427":1,"1487":1}}],["stubcspprovider",{"3":{"1199":2,"1207":1}}],["stubclock",{"3":{"1199":2,"1207":1}}],["stubhandler",{"3":{"1199":6,"1207":3}}],["stubhttpmessagehandler",{"3":{"1199":17,"1207":2}}],["stubhttpclientfactory",{"3":{"1199":16,"1207":3}}],["stubhostenvironment",{"3":{"1199":10,"1207":5}}],["stubbed",{"3":{"583":1,"957":1,"1396":1,"1415":1,"1432":1,"1436":2,"1438":2}}],["stubsharedlocalizer",{"3":{"1199":2,"1207":1}}],["stubscopeprovider",{"3":{"1199":3,"1207":2}}],["stubs",{"0":{"1349":1},"3":{"53":3,"59":1,"63":1,"135":1,"413":1,"582":1,"583":9,"584":1,"585":2,"586":2,"587":2,"649":1,"1192":1,"1207":16,"1212":1,"1286":1,"1300":1,"1309":1,"1323":3,"1324":3,"1341":2,"1380":4,"1396":3,"1434":9,"1436":38,"1496":2,"1656":1,"1671":1,"1790":2,"1882":1,"1884":1,"1885":1,"1886":1,"2029":1}}],["stub",{"0":{"1412":1},"3":{"0":1,"53":1,"63":1,"583":9,"585":4,"649":1,"650":1,"954":1,"1212":1,"1300":3,"1309":6,"1311":2,"1312":2,"1314":3,"1315":2,"1323":9,"1324":11,"1349":2,"1350":23,"1359":1,"1378":2,"1380":3,"1396":13,"1398":1,"1402":4,"1412":1,"1413":1,"1415":13,"1417":1,"1427":1,"1431":1,"1432":1,"1435":2,"1436":52,"1437":2,"1489":1,"1490":1,"1496":1,"1577":1,"1651":1,"1653":1,"1662":1,"1751":1,"1772":1,"1882":4,"1884":1,"1885":2,"1886":1,"2018":1,"2020":2,"2054":1,"2096":2,"2120":1,"2125":1,"2234":1}}],["stuckageminutes",{"2":{"793":1},"3":{"0":1,"539":1,"540":1,"793":1}}],["stuck",{"3":{"0":2,"24":2,"174":1,"234":1,"235":1,"237":1,"536":1,"537":1,"538":2,"540":1,"792":1,"809":1,"811":1,"997":1,"1259":2,"1324":4,"1339":1,"1395":2,"1396":1,"1436":1,"1476":1,"1854":1,"1999":1,"2074":1,"2158":1,"2169":3,"2170":2}}],["stryker",{"3":{"1577":1}}],["stroke",{"3":{"1359":2}}],["strongpasswordrules",{"2":{"1829":1,"1834":1},"3":{"1199":6,"1203":1,"1207":1,"1271":10,"1289":1,"1294":1,"1300":9,"1323":1,"1324":1,"1415":5,"1436":6,"1496":1,"1829":2,"1834":1}}],["strongest",{"3":{"947":1,"1229":1,"1286":1,"1323":1,"1324":1,"1359":2,"1380":2,"1454":1,"1523":1,"1574":1,"1588":1}}],["stronger",{"3":{"0":2,"48":1,"537":1,"694":1,"785":1,"801":1,"804":1,"819":1,"840":1,"995":1,"1043":1,"1237":1,"1286":1,"1300":1,"1323":1,"1359":2,"1396":1,"1417":1,"1436":2,"1474":1,"1848":1,"2166":1,"2171":1}}],["strong",{"3":{"54":1,"727":1,"1019":1,"1237":1,"1271":2,"1300":6,"1311":1,"1324":1,"1350":1,"1395":1,"1415":3,"1438":1,"1526":5,"1527":1,"1537":2,"1541":2,"1544":1,"1575":1,"1577":9,"1582":1,"1591":3,"1592":1,"1638":1,"1666":1,"1797":1,"1811":1,"1812":1,"1828":1,"1829":1,"1834":2,"1902":1,"2109":1,"2146":1}}],["stronglytypedidapitests",{"3":{"1199":1,"1207":7,"1300":2}}],["stronglytypedidconverter",{"3":{"1199":2,"1203":1,"1207":1,"1300":6}}],["stronglytypedidconventiontests",{"3":{"1050":1,"1199":1,"1207":2,"1436":10}}],["stronglytypedidregistry",{"2":{"1281":1},"3":{"1050":2,"1199":4,"1203":1,"1207":2,"1281":1,"1286":3,"1300":11,"1810":1}}],["stronglytypedidvaluecomparer<",{"3":{"1286":2}}],["stronglytypedidvaluecomparer",{"2":{"1281":1},"3":{"1050":1,"1199":3,"1203":1,"1207":1,"1281":1,"1286":1,"1810":1}}],["stronglytypedidvalueconverter",{"2":{"1281":1,"1810":1},"3":{"798":1,"806":1,"1050":2,"1199":3,"1203":1,"1207":4,"1281":3,"1286":14,"1496":1,"1810":1}}],["stronglytypedidvalueparserdelegate",{"3":{"1199":2,"1203":1,"1207":1,"1300":3}}],["stronglytypedidvalueparser",{"3":{"1050":1,"1199":2,"1203":1,"1207":1,"1300":7}}],["stronglytypedidpersistencetests",{"2":{"1050":1},"3":{"1050":1,"1199":1,"1207":2,"1286":3}}],["stronglytypedidparametertransformer",{"2":{"1050":1},"3":{"1050":1,"1199":2,"1203":1,"1207":1,"1311":6,"1496":1}}],["stronglytypedidtests",{"3":{"1050":3,"1199":2,"1207":4,"1300":4,"1436":3}}],["stronglytypedidtestsbase",{"2":{"130":1,"1054":1},"3":{"0":1,"130":1,"1050":2,"1054":1,"1199":3,"1207":2,"1431":3,"1436":11}}],["stronglytypedidtypeconverter",{"3":{"1050":2,"1052":1,"1055":2,"1199":3,"1203":1,"1207":3,"1300":15,"1810":1}}],["stronglytypedidtypeconvertertests",{"2":{"1050":1},"3":{"1050":1,"1052":1,"1055":1,"1199":1,"1207":3,"1300":4}}],["stronglytypedidtypeconverters",{"2":{"1050":1,"1052":1,"1810":1},"3":{"1050":1,"1052":1,"1199":4,"1203":1,"1207":1,"1300":4,"1810":1}}],["stronglytypedidmappertests",{"3":{"1199":1,"1207":8,"1300":2}}],["stronglytypedidmappings",{"3":{"798":1,"806":1,"1050":3,"1199":2,"1203":1,"1207":2,"1300":8,"1810":1}}],["stronglytypedidmodelconfiguration",{"2":{"1050":1,"1281":1,"1810":1},"3":{"1050":3,"1199":1,"1203":1,"1207":2,"1281":2,"1286":19,"1300":2,"1496":1,"1810":1}}],["stronglytypedidjsonconverterfactory",{"2":{"967":1,"1050":1,"1810":1},"3":{"967":1,"1050":2,"1199":2,"1203":1,"1207":3,"1300":12,"1311":3,"1810":1}}],["stronglytypedid",{"2":{"798":1,"1241":1},"3":{"798":2,"799":1,"1050":3,"1198":1,"1199":11,"1203":1,"1207":4,"1241":1,"1247":3,"1300":32,"1311":4,"1496":2}}],["stronglytypedidfitnesstests",{"3":{"1198":1,"1199":2,"1207":3,"1436":13}}],["stronglytypedidfixtures",{"3":{"477":2,"1207":15,"1300":3,"1436":22}}],["stronglytypedidfilterstrategytests",{"3":{"1199":1,"1207":5,"1247":2}}],["stronglytypedidfilterstrategy",{"2":{"330":1,"337":1,"1241":2,"1247":1},"3":{"330":1,"337":1,"1050":2,"1199":2,"1203":1,"1207":4,"1241":11,"1247":8,"1300":1,"1496":3}}],["stronglytypedidschematransformer",{"3":{"1050":2,"1199":3,"1203":1,"1207":3,"1300":2,"1311":14,"1496":2}}],["stronglytypedidserializationtests",{"2":{"1050":1},"3":{"1050":1,"1199":1,"1207":3,"1300":4}}],["stronglytypedids",{"2":{"468":1},"3":{"468":1,"798":1,"801":1,"804":1,"1050":1,"1207":1,"1436":9,"1489":1}}],["stronglytypedidsarereadonlyrecordstructs",{"2":{"0":1,"130":1,"798":1,"801":1,"804":1,"1050":1},"3":{"0":1,"130":1,"798":1,"801":1,"804":1,"1050":1,"1436":6}}],["strongly",{"1":{"467":1,"468":1,"469":1,"470":1,"471":1,"472":1,"473":1,"474":1,"475":1,"476":1,"477":1,"478":1,"1047":1,"1048":1,"1049":1,"1050":1,"1051":1,"1052":1,"1053":1,"1054":1,"1055":1},"3":{"0":4,"135":2,"139":1,"330":1,"337":1,"454":1,"467":1,"469":1,"656":1,"962":1,"1047":1,"1049":1,"1050":1,"1212":2,"1231":1,"1236":1,"1237":6,"1241":1,"1247":4,"1270":1,"1286":13,"1300":14,"1309":1,"1311":10,"1320":1,"1323":1,"1336":1,"1339":2,"1340":1,"1350":2,"1359":3,"1362":1,"1395":4,"1396":1,"1403":1,"1417":1,"1431":1,"1436":23,"1441":1,"1496":2,"1554":1,"1577":1,"1581":1,"1641":1,"1810":1,"1812":1,"1815":1,"2155":1,"2234":3}}],["struggling",{"3":{"1339":2,"2038":1}}],["strung",{"3":{"1300":1}}],["struck",{"3":{"1026":2,"1027":1,"1028":1,"1030":1,"1496":4,"1515":1,"1749":2,"1750":3,"1764":1,"1765":1,"1767":1,"1768":1,"1769":1,"1773":2,"1776":1}}],["structurally",{"0":{"2201":1},"3":{"0":1,"827":1,"946":1,"973":1,"1100":1,"1217":1,"1226":1,"1229":3,"1231":1,"1236":1,"1237":4,"1247":1,"1270":2,"1271":1,"1286":5,"1300":3,"1310":3,"1311":2,"1324":2,"1339":3,"1350":7,"1359":18,"1369":2,"1380":4,"1395":13,"1396":4,"1402":3,"1415":4,"1417":2,"1436":10,"1453":1,"1459":1,"1465":1,"1489":2,"1576":1,"1577":1,"1707":1,"1927":1,"1993":1,"1998":1,"2003":2,"2039":1,"2118":1,"2125":1,"2156":1,"2162":1}}],["structural",{"0":{"1638":1},"3":{"0":3,"135":4,"140":1,"518":1,"523":1,"572":2,"573":1,"579":1,"595":1,"622":1,"657":1,"733":1,"831":1,"865":1,"882":1,"926":1,"957":1,"997":1,"1022":1,"1050":1,"1212":1,"1234":1,"1237":3,"1247":2,"1249":1,"1259":2,"1265":1,"1270":1,"1286":9,"1300":3,"1301":2,"1310":1,"1311":1,"1323":4,"1324":2,"1332":1,"1339":5,"1350":8,"1359":9,"1371":2,"1380":4,"1395":5,"1396":12,"1401":1,"1402":10,"1415":5,"1428":1,"1431":1,"1436":22,"1455":1,"1467":2,"1488":1,"1489":1,"1494":1,"1496":1,"1526":1,"1539":1,"1574":1,"1575":1,"1577":2,"1578":1,"1638":3,"1639":2,"1654":2,"1799":2,"1806":1,"1810":2,"1832":3,"1833":3,"1834":1,"1849":1,"1858":1,"1922":1,"1950":1,"2032":2,"2036":1,"2048":1,"2055":1,"2060":1,"2073":1,"2081":1,"2095":1,"2100":1,"2234":1}}],["structures",{"3":{"1301":2,"1764":1}}],["structure",{"0":{"1615":1,"1796":1},"3":{"0":1,"1":1,"58":1,"130":1,"134":1,"264":1,"571":1,"590":1,"595":1,"617":2,"865":1,"953":1,"955":1,"1004":1,"1237":1,"1270":1,"1271":1,"1300":6,"1301":1,"1311":1,"1324":5,"1339":1,"1350":1,"1359":3,"1377":1,"1380":1,"1395":2,"1396":2,"1402":1,"1405":1,"1415":4,"1428":1,"1436":4,"1445":3,"1455":1,"1486":1,"1494":1,"1555":1,"1558":1,"1607":1,"1621":1,"1640":1,"1654":1,"1741":1,"1750":1,"1773":1,"1775":1,"1794":1,"1802":1,"1932":1,"1992":1,"2042":1,"2043":1,"2056":2,"2060":1,"2109":1}}],["structured",{"3":{"0":1,"53":1,"265":1,"372":1,"1018":1,"1116":1,"1213":1,"1217":1,"1229":1,"1237":3,"1247":2,"1263":1,"1270":5,"1311":3,"1312":7,"1315":1,"1317":1,"1323":2,"1324":1,"1339":1,"1340":1,"1342":1,"1350":1,"1359":11,"1369":2,"1376":1,"1378":1,"1380":4,"1396":1,"1402":1,"1417":1,"1435":2,"1436":2,"1438":1,"1465":2,"1467":1,"1473":1,"1526":1,"1536":1,"1550":1,"1577":3,"1630":1,"1665":1,"1790":1,"1821":1,"1881":1,"1885":1,"1927":1,"1928":1,"1992":1,"2019":1,"2064":1,"2076":1,"2157":1,"2158":1}}],["struct",{"2":{"469":1,"1051":1},"3":{"0":6,"468":4,"469":4,"470":4,"471":1,"472":1,"473":1,"474":1,"477":3,"656":2,"661":1,"797":3,"798":2,"799":3,"802":1,"803":1,"804":1,"1048":1,"1049":1,"1050":6,"1051":2,"1052":1,"1203":27,"1205":2,"1207":48,"1212":1,"1229":2,"1237":1,"1241":1,"1242":1,"1247":8,"1253":1,"1259":12,"1271":1,"1275":1,"1277":1,"1279":1,"1286":20,"1287":1,"1289":1,"1300":48,"1310":4,"1311":2,"1312":1,"1359":1,"1396":6,"1415":1,"1423":2,"1427":3,"1436":32,"1810":5,"1812":1,"2177":1}}],["structs",{"1":{"467":1,"468":1,"469":1,"470":1,"471":1,"472":1,"473":1,"474":1,"475":1,"476":1,"477":1,"478":1,"796":1,"797":1,"798":1,"799":1,"800":1,"801":1,"802":1,"803":1,"804":1,"805":1,"806":1},"3":{"0":2,"467":1,"469":1,"470":1,"472":1,"477":1,"660":1,"661":1,"796":1,"799":2,"1049":1,"1212":2,"1231":1,"1286":1,"1300":2,"2234":2}}],["street",{"3":{"1359":1,"1391":1,"1417":5}}],["streak",{"3":{"1069":1,"1453":1,"1490":1}}],["streamboundedasync",{"3":{"1427":2}}],["streamrendering",{"3":{"1324":1}}],["streamwriter",{"2":{"744":1},"3":{"741":1,"744":1,"1311":3}}],["streamedguardrailtests",{"3":{"1199":1,"1207":3,"1435":2}}],["streamed",{"3":{"741":2,"745":1,"1089":2,"1091":3,"1093":2,"1324":1,"1366":1,"1371":1,"1415":1,"1418":1,"1423":3,"1424":1,"1427":9,"1435":2,"1437":1,"1487":1,"1577":2,"1585":1,"1599":1,"1988":2,"1992":1,"2181":1,"2182":1}}],["stream",{"3":{"443":1,"741":1,"742":1,"743":2,"914":2,"1091":1,"1093":1,"1116":1,"1139":1,"1141":1,"1142":1,"1143":1,"1144":1,"1147":1,"1212":1,"1229":1,"1233":1,"1237":1,"1286":8,"1301":2,"1311":7,"1323":2,"1324":6,"1339":1,"1350":3,"1357":2,"1359":2,"1369":1,"1373":1,"1380":1,"1389":1,"1395":4,"1396":1,"1414":1,"1415":10,"1416":2,"1417":16,"1422":2,"1423":1,"1425":2,"1427":5,"1436":6,"1443":2,"1446":1,"1447":1,"1451":1,"1456":1,"1467":5,"1476":1,"1479":2,"1483":1,"1629":1,"1630":1,"1677":1,"1908":1,"2011":1,"2128":1,"2159":1,"2161":1,"2162":1,"2168":1,"2176":2,"2177":1,"2179":1,"2234":1}}],["streamprefix",{"3":{"142":1}}],["streams",{"3":{"0":1,"318":1,"407":1,"743":1,"1117":1,"1212":1,"1286":2,"1311":3,"1324":1,"1339":1,"1359":2,"1375":1,"1380":1,"1389":1,"1415":1,"1417":1,"1465":1,"1467":1,"1986":1,"1996":1,"2162":1,"2194":1,"2234":1}}],["streaming",{"3":{"0":1,"136":2,"142":1,"741":5,"1091":2,"1093":1,"1311":1,"1312":8,"1372":1,"1380":1,"1395":1,"1417":2,"1422":3,"1423":2,"1424":1,"1425":3,"1427":8,"1436":4,"1526":1,"1549":1,"1927":1,"2045":3,"2176":3,"2177":1,"2179":1}}],["stresses",{"3":{"1286":1,"1324":1,"1436":1}}],["stress",{"3":{"966":1,"1052":1,"1549":1,"1577":1,"1582":1,"2116":1}}],["stretching",{"3":{"1467":1,"2003":1}}],["stretches",{"3":{"1334":1,"1443":1,"2194":1}}],["stretched",{"3":{"309":1,"914":1}}],["stretch",{"3":{"234":1,"491":1,"1339":1,"1443":1,"1654":1}}],["strengths",{"0":{"1525":1,"1576":1,"1590":1},"3":{"1324":1,"1527":1}}],["strengthen",{"3":{"1577":1}}],["strengthened",{"3":{"1292":1,"1300":1}}],["strengthens",{"3":{"831":1,"917":1}}],["strength",{"3":{"103":1,"214":1,"215":1,"341":1,"472":1,"801":1,"1300":3,"1311":1,"1323":2,"1324":1,"1336":1,"1339":3,"1348":1,"1350":2,"1415":5,"1443":1,"1474":1,"1577":1,"1641":7,"1765":1,"1767":3,"1825":1,"1874":1,"1903":1,"2150":1,"2151":1}}],["strike",{"3":{"1773":1}}],["strikethrough",{"3":{"1639":1,"1742":1}}],["striking",{"3":{"1371":1}}],["stride",{"3":{"1534":1,"1577":1}}],["stripper",{"3":{"1436":1}}],["stripped",{"3":{"166":1,"889":1,"1091":2,"1184":1,"1323":1,"1324":2,"1359":2,"1366":1,"1369":1,"1395":1,"1421":1,"1422":1,"1427":2,"1435":1,"1436":5,"1447":1,"1577":1,"1631":1,"2176":2}}],["stripping",{"3":{"1286":1,"1300":1,"1323":1,"1324":2,"1339":2,"1436":1}}],["striping",{"3":{"157":1,"1267":1,"1270":2,"1298":1,"1300":2,"1301":2,"1311":1,"1909":1}}],["strips",{"3":{"0":1,"169":1,"972":1,"1184":1,"1286":5,"1300":4,"1309":1,"1323":2,"1324":3,"1359":1,"1395":2,"1396":2,"1401":1,"1402":1,"1415":1,"1417":1,"1427":1,"1436":7,"1445":1,"1454":1,"1526":1,"2128":1,"2130":1,"2234":1}}],["strip",{"3":{"0":1,"440":1,"1115":1,"1212":1,"1286":2,"1300":1,"1322":1,"1323":1,"1324":2,"1350":1,"1352":1,"1353":1,"1359":2,"1369":2,"1380":1,"1392":2,"1395":3,"1396":1,"1402":1,"1436":1,"1438":1,"1496":1,"1534":1,"1663":1,"2128":1,"2130":2}}],["stripepaymentintentid",{"2":{"1749":1,"1754":1},"3":{"1749":1,"1754":1,"1764":1}}],["stripepaymentservice",{"2":{"72":1,"73":1,"794":1,"1752":1},"3":{"72":2,"73":2,"674":1,"790":3,"791":2,"792":1,"794":1,"1591":1,"1600":1,"1752":1,"1765":1,"1770":1,"2168":1}}],["stripeuri",{"3":{"1600":1}}],["stripesessionid",{"3":{"1286":1,"1764":1}}],["stripesettings",{"2":{"73":1,"1770":1},"3":{"72":1,"73":2,"1770":1}}],["stripes",{"3":{"996":1,"1267":1,"1270":3,"1300":2,"1301":3,"1323":2,"1438":1,"1909":1}}],["stripewebhooksecretprovider",{"2":{"790":1},"3":{"790":2,"2168":1}}],["stripewebhookregistrationservicetests",{"3":{"790":1,"2169":1}}],["stripewebhookregistrationservice",{"2":{"790":1,"792":1,"794":1,"2168":1},"3":{"674":1,"789":1,"790":3,"791":1,"792":4,"794":2,"1589":1,"1591":2,"1596":1,"1597":1,"2168":3}}],["striped",{"3":{"155":1,"157":2,"159":1,"995":1,"996":1,"1183":1,"1267":1,"1270":4,"1300":2,"1311":1,"1323":1,"1438":1,"1496":1,"1577":2,"1585":1,"1668":1,"1909":1,"1912":1}}],["stripeclient",{"2":{"73":1},"3":{"73":1}}],["stripeclientfactorytests",{"3":{"73":2}}],["stripeclientfactory",{"2":{"73":1},"3":{"72":1,"73":2,"674":1}}],["stripeexception",{"2":{"72":1},"3":{"72":1}}],["stripe",{"1":{"787":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"794":1,"795":1},"2":{"1600":3},"3":{"0":13,"66":1,"72":5,"73":4,"96":2,"101":1,"157":1,"534":1,"535":2,"536":3,"537":1,"538":2,"539":1,"598":1,"599":1,"674":1,"698":1,"701":1,"733":2,"757":1,"759":1,"761":1,"787":1,"789":3,"790":8,"791":1,"792":5,"793":2,"794":2,"795":1,"827":2,"837":1,"838":1,"840":1,"841":1,"996":2,"1026":1,"1212":3,"1270":13,"1298":1,"1300":13,"1301":18,"1311":4,"1339":1,"1436":4,"1489":1,"1588":1,"1589":1,"1591":6,"1595":1,"1596":1,"1597":1,"1600":7,"1673":1,"1746":2,"1749":7,"1750":2,"1752":1,"1754":2,"1755":2,"1759":1,"1763":2,"1765":10,"1768":1,"1769":1,"1770":7,"1773":2,"1776":1,"1785":1,"1909":2,"1910":1,"1911":1,"1915":1,"1917":1,"1920":1,"2013":1,"2025":1,"2106":1,"2112":1,"2115":1,"2138":1,"2163":2,"2168":9,"2169":6,"2170":2,"2171":2,"2223":1,"2230":1,"2234":1}}],["strict=true",{"3":{"1591":1}}],["stricttransportsecurity",{"3":{"1339":1}}],["strictconformanttests",{"3":{"1198":1,"1199":2,"1207":1,"1436":6}}],["strictdriftedtests",{"3":{"1198":1,"1199":2,"1207":1,"1436":8}}],["strictness",{"3":{"461":1,"583":1,"584":2,"618":1,"1323":1}}],["strictest",{"3":{"215":1,"2152":1,"2155":1}}],["stricter",{"3":{"135":1,"177":1,"214":1,"217":1,"243":1,"1093":1,"1223":1,"1241":1,"1247":1,"1300":1,"1309":1,"1320":1,"1323":1,"1324":3,"1359":2,"1395":1,"1436":6,"1443":1,"1496":1,"1500":1,"1898":1,"2002":1,"2080":1,"2155":1}}],["strictly",{"3":{"0":3,"93":1,"95":1,"537":1,"591":1,"666":1,"846":1,"890":1,"914":1,"916":1,"1229":1,"1259":1,"1270":1,"1286":3,"1300":2,"1308":1,"1311":1,"1324":3,"1339":2,"1359":4,"1395":1,"1396":1,"1402":3,"1417":1,"1429":1,"1436":6,"1438":1,"1442":1,"1488":1,"1526":1,"1577":1,"1631":1,"1635":1,"1767":1,"1781":1,"1867":1,"2048":1,"2166":1}}],["strict",{"2":{"1969":1},"3":{"0":1,"58":1,"109":1,"187":1,"213":1,"214":1,"215":1,"217":2,"218":1,"219":1,"236":1,"388":1,"583":3,"584":1,"616":1,"618":7,"621":2,"953":1,"1184":4,"1191":1,"1200":1,"1229":2,"1237":1,"1247":3,"1262":1,"1270":2,"1286":2,"1300":5,"1309":2,"1311":1,"1324":4,"1334":1,"1339":3,"1359":3,"1395":1,"1396":1,"1398":1,"1402":1,"1405":1,"1409":1,"1415":4,"1433":1,"1436":25,"1443":1,"1455":3,"1480":1,"1486":1,"1488":1,"1496":1,"1498":1,"1517":1,"1534":2,"1585":1,"1621":1,"1638":1,"1640":1,"1671":1,"1772":1,"1922":1,"1961":1,"1967":1,"1969":1,"1972":1,"1977":1,"2058":1,"2149":2,"2150":1,"2151":1,"2153":1,"2155":1,"2229":1}}],["stringcontent",{"3":{"1436":2}}],["stringcomparemethod",{"3":{"1286":1}}],["stringcomparer",{"3":{"1237":1,"1247":4,"1286":4,"1300":4,"1301":1,"1309":2,"1310":1,"1311":1,"1323":3,"1324":8,"1339":5,"1350":2,"1359":2,"1395":3,"1396":4,"1402":1,"1417":2}}],["stringcomparison",{"3":{"1271":1,"1286":1,"1300":5,"1301":1,"1311":2,"1323":1,"1324":5,"1339":2,"1350":3,"1359":3,"1395":3,"1396":4,"1415":1,"1436":1}}],["stringwithqualityheadervalue",{"3":{"1324":1}}],["stringvalues",{"3":{"1311":1,"1324":1}}],["stringbuilder",{"3":{"1286":2,"1300":1,"1312":1,"1324":2,"1427":1}}],["stringfilterstrategytests",{"3":{"1199":1,"1207":3,"1247":1}}],["stringfilterstrategy",{"3":{"1199":3,"1203":1,"1207":2,"1241":4,"1247":10,"1359":1,"1496":3,"1815":1}}],["stringlocalizer",{"3":{"1324":1}}],["stringlocalizerpluralextensionstests",{"3":{"1199":1,"1207":3,"1586":1}}],["stringlocalizerpluralextensions",{"3":{"1199":1,"1203":1,"1207":2,"1208":1,"1324":5,"1436":2,"1496":1,"1577":2,"1586":1,"1591":1,"1596":1}}],["stringlength",{"3":{"827":1,"1300":4,"1309":4,"1323":3,"1324":5,"1339":4}}],["stringly",{"3":{"188":1,"1324":1,"1359":1,"1964":1}}],["stringifies",{"3":{"1247":1}}],["stringified",{"3":{"741":1,"1309":1,"1311":1,"1378":1}}],["stringidentity",{"3":{"1199":2,"1207":1}}],["stringincrementasync",{"2":{"178":1},"3":{"178":1,"1311":1}}],["stringstrategy",{"3":{"1247":3}}],["stringsplitoptions",{"3":{"1247":3}}],["stringsetasync",{"3":{"996":1,"1323":1}}],["strings",{"0":{"1394":1},"3":{"0":2,"86":2,"88":2,"164":1,"166":1,"188":1,"202":1,"230":1,"265":6,"286":1,"380":1,"448":1,"585":1,"599":2,"643":1,"673":1,"698":1,"700":1,"717":1,"974":1,"980":1,"983":1,"1059":1,"1175":1,"1229":1,"1232":1,"1237":3,"1247":2,"1259":1,"1270":5,"1271":3,"1278":1,"1282":1,"1286":16,"1300":18,"1309":10,"1311":9,"1312":3,"1323":3,"1324":28,"1335":1,"1339":7,"1350":14,"1359":19,"1369":1,"1380":1,"1394":2,"1395":11,"1396":14,"1402":4,"1409":2,"1415":14,"1416":4,"1417":12,"1427":2,"1436":24,"1442":1,"1455":1,"1467":10,"1470":1,"1473":2,"1474":1,"1477":2,"1489":1,"1490":1,"1496":1,"1524":1,"1526":1,"1531":1,"1548":1,"1553":1,"1554":1,"1564":2,"1591":2,"1596":1,"1653":1,"1666":1,"1669":2,"1670":1,"1671":1,"1684":1,"1686":1,"1695":1,"1727":2,"1790":1,"1920":1,"1928":1,"1964":1,"2013":1,"2083":1,"2085":2,"2133":1,"2138":1,"2141":1,"2173":1}}],["string",{"0":{"1305":1},"2":{"360":1,"397":1,"656":1,"658":1,"680":1,"684":1,"701":1,"776":1,"914":1,"959":1,"1132":1,"1333":1,"1356":1,"1443":1,"1446":1,"1467":1,"1541":1,"1687":1,"2011":1,"2080":1,"2148":1,"2158":1,"2161":1},"3":{"0":14,"24":1,"31":1,"33":1,"77":1,"86":1,"109":1,"111":1,"121":2,"159":1,"160":1,"164":1,"166":1,"168":1,"170":4,"171":1,"186":1,"190":1,"214":1,"216":1,"219":1,"225":1,"227":1,"229":1,"241":1,"243":2,"245":2,"249":1,"253":1,"255":1,"259":2,"260":2,"261":1,"265":11,"266":1,"286":1,"305":1,"314":1,"330":1,"335":1,"350":1,"358":1,"359":5,"360":1,"381":1,"386":1,"388":1,"390":1,"392":1,"397":1,"422":1,"425":1,"426":1,"429":1,"499":1,"547":1,"558":1,"572":1,"598":3,"599":8,"600":1,"601":2,"602":1,"604":1,"605":2,"609":1,"626":1,"633":1,"640":5,"643":1,"644":1,"656":1,"657":7,"658":1,"659":2,"680":5,"684":1,"691":1,"692":1,"698":7,"699":2,"701":1,"707":1,"708":2,"710":1,"715":1,"732":1,"733":1,"736":1,"740":1,"759":2,"827":1,"839":3,"881":3,"883":1,"888":1,"899":1,"904":1,"905":1,"906":1,"914":5,"922":1,"926":2,"959":2,"963":2,"964":2,"972":2,"974":1,"996":2,"1005":1,"1017":1,"1018":4,"1027":1,"1028":1,"1034":2,"1036":1,"1050":3,"1067":1,"1089":1,"1091":3,"1094":1,"1095":2,"1132":1,"1133":1,"1135":2,"1150":1,"1175":2,"1176":1,"1177":1,"1192":1,"1208":1,"1212":2,"1229":11,"1232":2,"1234":3,"1235":1,"1236":3,"1237":60,"1238":2,"1240":1,"1241":12,"1242":1,"1244":1,"1246":1,"1247":74,"1250":2,"1259":8,"1264":2,"1265":1,"1269":1,"1270":41,"1271":26,"1273":1,"1278":5,"1279":5,"1280":2,"1284":1,"1286":216,"1290":1,"1299":2,"1300":206,"1301":25,"1307":1,"1309":68,"1310":2,"1311":103,"1312":25,"1320":4,"1323":102,"1324":201,"1326":3,"1332":4,"1333":1,"1339":85,"1341":1,"1344":2,"1348":1,"1350":105,"1352":1,"1353":2,"1359":180,"1366":3,"1369":15,"1379":2,"1380":28,"1382":1,"1385":1,"1388":1,"1389":1,"1394":1,"1395":101,"1396":104,"1400":1,"1402":31,"1405":1,"1408":1,"1415":108,"1416":17,"1417":112,"1419":1,"1422":1,"1427":18,"1429":5,"1430":1,"1431":2,"1435":1,"1436":216,"1438":8,"1441":3,"1442":2,"1443":3,"1444":3,"1446":2,"1449":1,"1451":1,"1453":2,"1454":3,"1455":1,"1456":1,"1459":1,"1460":1,"1465":2,"1466":1,"1467":18,"1472":1,"1477":1,"1481":2,"1486":1,"1488":4,"1489":1,"1490":2,"1491":1,"1492":1,"1496":5,"1526":4,"1531":1,"1532":1,"1535":1,"1541":1,"1564":1,"1577":2,"1582":1,"1583":1,"1586":2,"1591":1,"1630":2,"1631":1,"1633":1,"1640":4,"1641":21,"1651":1,"1653":4,"1662":1,"1664":1,"1667":1,"1668":1,"1669":3,"1670":1,"1684":3,"1685":2,"1686":3,"1687":2,"1700":1,"1720":1,"1724":1,"1727":1,"1730":1,"1758":1,"1764":1,"1811":1,"1815":1,"1816":2,"1831":1,"1832":1,"1847":1,"1849":4,"1851":2,"1853":1,"1857":1,"1887":1,"1912":1,"1916":2,"1921":1,"1922":2,"1923":3,"1935":1,"1937":1,"1940":1,"1944":2,"1948":1,"1949":1,"1950":1,"1951":1,"1962":3,"1973":1,"1982":1,"1988":1,"1989":2,"1990":3,"1992":2,"2001":1,"2002":1,"2004":1,"2009":3,"2011":1,"2014":1,"2044":2,"2050":1,"2057":2,"2072":1,"2074":1,"2076":1,"2078":1,"2085":2,"2087":2,"2088":1,"2099":1,"2110":1,"2128":1,"2129":1,"2131":1,"2132":1,"2138":1,"2144":4,"2145":1,"2148":2,"2149":4,"2151":2,"2155":1,"2158":1,"2161":2,"2162":1,"2195":1,"2203":1,"2232":1,"2234":2}}],["straddle",{"3":{"1536":1}}],["straddles",{"3":{"1324":1,"1356":1,"1359":1}}],["stratification",{"3":{"1487":1}}],["strategic",{"3":{"1577":1,"1581":1,"1582":1,"1583":1,"1811":2,"2116":1}}],["strategies",{"3":{"0":1,"290":1,"295":1,"335":2,"1176":1,"1212":1,"1238":1,"1241":2,"1247":23,"1284":1,"1286":8,"1339":1,"1359":17,"1369":1,"1436":2,"1438":3,"1485":1,"1496":1,"1497":1,"1535":1,"1538":1,"1664":1,"1666":1,"1856":2,"1860":1,"1862":1,"1988":1,"2234":1}}],["strategy",{"0":{"1241":1,"1358":1,"1490":1,"1551":1,"1612":1},"1":{"394":1,"395":1,"396":1,"397":1,"398":1,"399":1,"400":1,"401":1,"402":1,"403":1,"404":1,"405":1,"406":1,"407":1,"408":1,"409":1,"445":1,"446":1,"447":1,"448":1,"449":1,"450":1,"451":1,"452":1,"453":1,"454":1,"455":1,"553":1,"554":1,"555":1,"556":1,"557":1,"558":1,"559":1,"560":1,"1072":1,"1073":1,"1074":1,"1075":1,"1076":1,"1077":1,"1078":1,"1079":1,"1172":1,"1173":1,"1174":1,"1175":1,"1176":1,"1177":1,"1178":1,"1179":1,"1180":1},"2":{"72":1,"407":2,"609":1,"988":1,"2158":1,"2160":1},"3":{"0":12,"17":1,"21":1,"27":1,"71":6,"72":2,"120":1,"153":1,"239":1,"290":3,"295":1,"296":3,"328":1,"330":3,"335":1,"394":1,"407":3,"435":1,"445":1,"459":1,"553":1,"573":1,"609":1,"653":1,"749":1,"819":7,"897":1,"948":1,"987":1,"988":5,"989":1,"991":1,"992":1,"1050":3,"1051":3,"1072":1,"1123":1,"1129":1,"1172":1,"1175":1,"1179":1,"1192":2,"1212":5,"1216":1,"1237":8,"1238":1,"1241":10,"1247":34,"1251":1,"1256":1,"1259":1,"1270":5,"1273":1,"1274":2,"1278":3,"1281":1,"1286":51,"1301":3,"1309":3,"1310":7,"1311":26,"1314":1,"1321":1,"1323":3,"1324":4,"1339":5,"1350":1,"1358":4,"1359":29,"1361":1,"1364":1,"1369":2,"1380":2,"1395":8,"1396":3,"1415":2,"1416":1,"1417":3,"1418":1,"1429":1,"1436":9,"1438":3,"1449":1,"1450":1,"1453":1,"1455":3,"1461":1,"1467":3,"1487":1,"1488":1,"1490":1,"1491":1,"1492":1,"1493":3,"1496":3,"1499":1,"1510":1,"1526":3,"1535":1,"1539":1,"1543":1,"1545":1,"1546":1,"1554":1,"1556":1,"1566":1,"1571":1,"1576":1,"1577":4,"1586":2,"1591":3,"1597":1,"1600":1,"1637":1,"1639":1,"1652":1,"1664":1,"1708":1,"1719":1,"1752":1,"1763":1,"1774":2,"1796":1,"1825":1,"1840":5,"1854":1,"1855":1,"1856":4,"1861":3,"1862":1,"1882":1,"1940":1,"1988":3,"1989":2,"1991":1,"1992":3,"2001":1,"2033":5,"2039":1,"2056":1,"2135":1,"2158":2,"2160":1,"2162":1,"2234":4}}],["stray",{"3":{"1091":1,"1300":1,"1395":2,"1396":1,"1425":1,"1436":2,"1496":3,"2152":1}}],["straightforward",{"3":{"1265":1,"1323":1,"1347":1}}],["straight",{"3":{"0":2,"102":1,"109":1,"121":1,"135":1,"150":1,"295":1,"423":1,"424":1,"459":1,"522":1,"523":1,"534":1,"545":1,"599":1,"674":1,"700":1,"749":1,"782":1,"790":1,"793":1,"799":1,"827":1,"881":1,"905":1,"987":1,"1018":1,"1042":1,"1077":1,"1100":1,"1116":1,"1183":1,"1187":1,"1194":1,"1237":1,"1244":1,"1247":2,"1252":1,"1256":1,"1257":1,"1259":5,"1263":1,"1264":1,"1270":11,"1271":1,"1278":2,"1286":23,"1289":1,"1300":11,"1301":2,"1307":1,"1309":5,"1311":11,"1318":1,"1323":4,"1324":22,"1339":6,"1347":1,"1350":6,"1359":41,"1369":4,"1375":1,"1380":7,"1383":1,"1389":1,"1392":1,"1395":20,"1396":18,"1402":1,"1406":1,"1415":14,"1416":3,"1417":5,"1436":11,"1438":2,"1467":2,"1479":1,"1585":1,"1651":1,"1669":1,"1730":1,"1773":1,"1823":1,"1840":2,"1844":1,"1851":1,"1859":1,"1896":1,"1902":1,"1917":1,"1922":1,"1945":1,"1955":2,"1957":1,"1975":1,"1986":1,"1992":1,"1995":1,"1999":1,"2022":1,"2048":1,"2049":1,"2068":1,"2071":1,"2098":1,"2126":1,"2139":1,"2159":1,"2164":1,"2167":1,"2188":1,"2206":1}}],["strangers",{"3":{"1396":1}}],["stranger",{"3":{"1017":1,"1415":1,"1454":1}}],["strangler",{"3":{"0":2,"53":1,"57":1,"59":1,"1012":1,"1312":1,"1436":1,"1526":1,"1532":1,"1544":1,"1576":1,"1577":1,"1586":1,"1591":1,"1663":1}}],["stranding",{"3":{"897":1,"1311":1,"1431":1}}],["strands",{"3":{"539":1,"1270":1,"1309":1,"1324":1,"1436":1,"2163":1,"2169":1}}],["strand",{"3":{"350":1,"1255":1,"1318":1,"1324":4,"1406":1,"1415":1,"1918":1,"1977":1}}],["strandedfixturehandler",{"3":{"1207":1,"1431":1,"1436":3}}],["strandedfixturehandlerbase",{"3":{"1199":2,"1207":1,"1431":1,"1436":7}}],["stranded",{"3":{"0":1,"534":1,"788":1,"793":1,"794":1,"1003":1,"1207":2,"1323":1,"1431":2,"1436":9,"1496":1,"1526":1,"1569":1,"1577":2,"2049":1,"2171":1}}],["stolen",{"3":{"500":1,"907":2,"908":1,"1300":4,"1322":2,"1323":1,"1406":1,"1415":1,"1436":1,"1901":1,"1905":2,"1980":1,"1981":1,"2142":2,"2146":1}}],["stood",{"3":{"111":1,"136":1,"285":1,"497":1,"1312":1,"1350":1,"1396":1,"1436":1,"1474":1,"2014":1,"2234":1}}],["stock",{"3":{"0":3,"99":2,"534":3,"535":3,"536":6,"538":4,"539":4,"540":2,"556":1,"793":2,"809":1,"1066":1,"1067":2,"1286":1,"1324":4,"1328":2,"1339":7,"1441":5,"1444":1,"1490":1,"1492":1,"1591":2,"1742":2,"1749":1,"1750":1,"1751":1,"1755":1,"1763":1,"1764":3,"1765":1,"1767":2,"1768":1,"1769":2,"1776":2,"2023":1,"2112":1,"2115":1,"2163":4,"2165":1,"2166":5,"2167":1,"2169":4,"2170":4,"2217":1}}],["storable",{"3":{"1369":2}}],["storagedelete",{"3":{"1467":1}}],["storagewrite",{"3":{"1467":1}}],["storageread",{"3":{"1467":2}}],["storageremove",{"3":{"1417":3}}],["storageaccesskey",{"3":{"1467":1}}],["storageallowsharedkeyaccess",{"3":{"1467":1}}],["storagev2",{"3":{"1467":1}}],["storageclearprefix",{"3":{"1417":1}}],["storageset",{"3":{"1417":3}}],["storageget",{"3":{"1417":1}}],["storagekey",{"3":{"1324":2}}],["storagenotconfigured",{"2":{"1116":1,"1389":1},"3":{"1116":1,"1323":1,"1359":1,"1389":1}}],["storage",{"0":{"1285":1,"2128":1},"1":{"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"437":1,"438":1,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1,"2126":1,"2127":1,"2128":1,"2129":1,"2130":1},"2":{"1484":1},"3":{"0":11,"163":1,"165":2,"166":1,"182":1,"207":1,"243":1,"245":3,"248":1,"251":1,"254":1,"257":1,"258":1,"259":2,"353":1,"359":1,"360":1,"361":1,"365":1,"387":1,"388":2,"403":1,"437":1,"438":2,"439":2,"441":2,"442":1,"443":5,"444":2,"459":1,"497":2,"505":2,"506":3,"507":8,"508":1,"509":4,"510":1,"511":2,"513":6,"514":3,"536":1,"555":1,"560":1,"598":2,"599":1,"602":2,"641":1,"663":1,"664":1,"665":6,"666":1,"670":1,"707":2,"708":1,"717":1,"732":1,"737":1,"853":1,"855":1,"903":1,"906":1,"972":1,"974":2,"1043":3,"1115":2,"1116":11,"1117":2,"1118":1,"1119":2,"1120":1,"1182":1,"1183":1,"1192":2,"1203":11,"1207":32,"1212":3,"1237":5,"1247":2,"1250":1,"1259":3,"1271":1,"1272":1,"1285":8,"1286":44,"1287":1,"1300":5,"1301":2,"1309":2,"1310":4,"1311":3,"1318":2,"1323":38,"1324":57,"1339":2,"1350":6,"1357":3,"1359":25,"1361":1,"1369":4,"1373":1,"1375":1,"1380":5,"1395":5,"1396":7,"1407":1,"1410":1,"1411":1,"1415":19,"1416":2,"1417":37,"1436":14,"1437":1,"1438":3,"1445":1,"1446":1,"1455":3,"1465":6,"1467":13,"1470":1,"1472":1,"1473":1,"1474":2,"1478":2,"1481":2,"1484":2,"1487":1,"1490":1,"1496":3,"1526":1,"1563":1,"1567":1,"1577":2,"1599":1,"1631":2,"1635":1,"1638":1,"1639":2,"1640":2,"1641":5,"1660":1,"1668":2,"1669":3,"1670":2,"1677":1,"1748":1,"1765":3,"1779":2,"1854":1,"1855":1,"1862":2,"1863":1,"1864":1,"1900":1,"1901":1,"1904":1,"1922":1,"1933":1,"1948":2,"1970":1,"1980":1,"2013":1,"2035":2,"2037":2,"2076":1,"2100":1,"2125":2,"2126":3,"2128":8,"2129":4,"2130":3,"2135":1,"2144":1,"2145":3,"2146":1,"2147":1,"2209":1,"2210":1,"2212":2,"2234":3}}],["stories",{"3":{"506":1,"508":1,"555":1,"560":1,"2133":1}}],["storing",{"3":{"206":1,"208":1,"995":1,"1092":1,"1259":3,"1270":1,"1286":5,"1300":2,"1309":1,"1311":2,"1323":1,"1324":5,"1339":1,"1350":4,"1359":1,"1362":1,"1369":4,"1395":4,"1396":2,"1417":3,"1436":3,"1631":1,"1900":1,"1979":1,"2126":1,"2127":1}}],["story",{"3":{"24":1,"71":1,"148":1,"168":1,"236":1,"349":1,"350":1,"365":1,"379":1,"413":1,"507":1,"633":1,"707":1,"916":1,"990":1,"1018":1,"1020":1,"1035":1,"1044":1,"1074":1,"1084":1,"1212":1,"1228":1,"1230":1,"1234":1,"1236":1,"1237":2,"1241":1,"1247":2,"1259":1,"1263":2,"1270":2,"1271":1,"1275":1,"1286":9,"1290":1,"1291":1,"1292":1,"1300":5,"1301":1,"1303":1,"1309":3,"1311":3,"1312":2,"1323":4,"1324":4,"1336":1,"1348":1,"1350":4,"1353":1,"1359":3,"1366":1,"1369":3,"1375":1,"1376":1,"1380":3,"1381":1,"1395":2,"1396":7,"1400":1,"1410":1,"1415":2,"1416":2,"1417":6,"1427":1,"1428":1,"1436":4,"1455":2,"1471":1,"1473":1,"1476":1,"1482":1,"1488":1,"1496":1,"1547":1,"1549":1,"1566":1,"1577":1,"1591":1,"1699":1,"1706":1,"1723":1,"1727":1,"1833":1,"1853":1,"1894":1,"1899":2,"1927":1,"1929":1,"1968":1,"1978":1,"1985":2,"1989":1,"2030":1,"2035":1,"2060":1,"2062":1,"2063":1,"2065":2,"2091":1,"2092":1,"2115":1,"2123":1,"2131":2,"2148":1,"2157":1,"2171":1,"2174":1,"2184":1,"2196":1,"2210":1,"2234":1}}],["storming",{"3":{"1438":1}}],["storms",{"3":{"174":1,"1547":1,"1566":1,"2015":1,"2164":1,"2184":1}}],["storm",{"3":{"0":3,"72":1,"407":1,"612":1,"792":1,"827":2,"883":1,"1259":1,"1330":1,"1339":3,"1402":1,"1436":1,"1438":1,"1443":1,"1465":2,"1668":1,"2008":1,"2038":1,"2075":1,"2168":1,"2234":1}}],["storehome",{"3":{"1591":6,"1595":1,"1596":3,"1597":2,"1600":2}}],["storehomepagecontent",{"3":{"1324":1}}],["storeharness",{"3":{"1199":2,"1207":1}}],["storegenerated",{"2":{"1872":1},"3":{"1175":1,"1280":1,"1286":3,"1872":1}}],["storeaccounts",{"3":{"1286":1}}],["storeapphostfixture",{"3":{"914":1,"1069":1}}],["storearchitecturemap",{"2":{"132":1,"1161":1},"3":{"132":1,"1161":1,"1431":1,"1436":3,"1489":2,"1590":1,"1591":4,"1600":1,"2043":1}}],["storetimezonesettings",{"2":{"675":1,"676":1},"3":{"675":1,"676":1}}],["storefronthostapplicationfactory",{"2":{"572":1},"3":{"572":1}}],["storefront",{"3":{"0":2,"217":1,"825":1,"830":1,"831":1,"832":1,"1027":1,"1028":2,"1124":1,"1416":1,"1436":2,"1600":2,"1750":1,"1764":2,"1765":1,"1767":1}}],["stores",{"3":{"0":6,"24":1,"26":1,"231":1,"243":1,"245":2,"256":1,"261":1,"286":1,"309":1,"420":1,"696":1,"702":1,"715":1,"727":1,"732":1,"848":1,"849":1,"854":1,"883":1,"904":1,"945":1,"947":1,"1012":1,"1025":1,"1026":1,"1034":1,"1035":1,"1068":1,"1116":1,"1229":1,"1237":2,"1247":2,"1259":4,"1263":1,"1270":5,"1273":1,"1275":2,"1285":1,"1286":13,"1293":2,"1300":7,"1301":8,"1309":1,"1311":9,"1312":1,"1318":1,"1322":1,"1323":7,"1324":13,"1339":6,"1350":2,"1357":1,"1359":5,"1369":2,"1395":12,"1396":4,"1402":1,"1406":1,"1409":1,"1412":1,"1415":10,"1416":1,"1417":11,"1433":1,"1436":8,"1438":1,"1441":1,"1454":1,"1456":1,"1465":1,"1467":1,"1488":1,"1496":1,"1540":1,"1553":1,"1631":3,"1641":1,"1660":1,"1667":1,"1854":1,"1902":1,"1909":1,"1911":1,"1915":1,"1917":1,"1933":1,"2041":1,"2145":1,"2151":1,"2189":1,"2234":1}}],["storedat",{"3":{"1324":1}}],["storedpermission",{"3":{"1436":1}}],["storedpermissions",{"3":{"1300":2,"1324":1}}],["storedpermissionroleadministrationservicetests",{"2":{"1199":1},"3":{"1199":1,"1207":4}}],["storedpermissionroleadministrationservice",{"2":{"1287":1,"1297":1,"2202":1},"3":{"1059":1,"1199":2,"1203":1,"1207":2,"1287":1,"1297":2,"1300":22,"1323":1,"1496":1,"2202":1}}],["storedhashes",{"3":{"1300":1}}],["storedstate",{"3":{"1199":2,"1207":1}}],["stored",{"0":{"1250":1,"2201":1},"1":{"2196":1,"2197":1,"2198":1,"2199":1,"2200":1,"2201":1,"2202":1,"2203":1,"2204":1,"2205":1},"2":{"1902":1},"3":{"0":12,"24":3,"27":1,"41":1,"126":1,"157":5,"160":1,"184":1,"186":2,"224":1,"225":1,"231":1,"243":1,"246":1,"248":1,"265":1,"284":1,"309":2,"310":6,"311":1,"314":1,"353":1,"358":1,"359":6,"360":1,"363":1,"364":1,"365":3,"387":1,"388":1,"395":1,"397":1,"399":1,"403":1,"423":1,"443":2,"499":11,"500":1,"501":2,"507":2,"511":1,"513":1,"528":1,"529":2,"530":1,"539":1,"574":1,"591":1,"605":1,"666":1,"672":1,"692":1,"707":1,"717":1,"740":1,"767":2,"790":1,"813":1,"849":1,"852":1,"854":1,"880":1,"881":2,"885":1,"904":1,"944":2,"945":4,"946":2,"948":5,"965":1,"971":1,"995":1,"996":1,"1017":1,"1018":3,"1026":3,"1034":1,"1035":1,"1042":2,"1044":1,"1050":1,"1057":1,"1059":6,"1060":2,"1061":4,"1063":1,"1114":1,"1115":2,"1116":3,"1118":2,"1135":1,"1140":1,"1183":1,"1212":7,"1229":2,"1234":2,"1237":4,"1247":2,"1250":2,"1251":1,"1256":2,"1259":11,"1270":7,"1271":2,"1283":2,"1284":2,"1285":1,"1286":37,"1289":1,"1291":2,"1292":2,"1293":1,"1294":1,"1295":1,"1297":3,"1300":80,"1301":15,"1309":4,"1311":31,"1312":1,"1321":1,"1323":15,"1324":49,"1339":5,"1342":2,"1344":1,"1347":3,"1350":16,"1352":1,"1356":1,"1357":1,"1358":1,"1359":43,"1362":3,"1369":11,"1380":7,"1382":1,"1384":1,"1389":2,"1391":1,"1395":19,"1396":13,"1402":3,"1405":1,"1409":5,"1411":1,"1414":1,"1415":26,"1417":18,"1432":1,"1435":1,"1436":12,"1438":2,"1443":1,"1454":2,"1455":2,"1462":1,"1465":2,"1467":4,"1492":1,"1496":3,"1563":1,"1567":1,"1577":2,"1585":1,"1630":6,"1631":8,"1633":1,"1638":1,"1639":4,"1640":3,"1641":20,"1664":1,"1686":2,"1732":1,"1747":2,"1749":2,"1764":3,"1765":3,"1767":2,"1779":1,"1849":1,"1854":1,"1861":2,"1900":1,"1902":4,"1904":2,"1908":3,"1909":4,"1922":1,"1933":1,"1963":1,"1964":1,"1975":1,"1979":1,"1980":1,"1982":1,"2044":1,"2048":1,"2080":1,"2085":4,"2127":1,"2130":1,"2143":2,"2144":4,"2146":1,"2159":1,"2188":1,"2190":1,"2194":1,"2195":1,"2196":1,"2201":3,"2202":3,"2204":3,"2205":2,"2210":2,"2213":1,"2234":4}}],["store",{"0":{"91":1,"96":1,"1479":1,"1480":2,"1481":1,"1603":1,"1996":1},"1":{"1587":1,"1588":1,"1589":1,"1590":1,"1591":1,"1592":1,"1593":1,"1594":1,"1595":1,"1596":1,"1597":1,"1598":1,"1599":1,"1600":1,"1681":1,"1682":1,"1683":1,"1684":1,"1685":1,"1686":1,"1687":1,"1688":1,"1689":1,"1690":1,"1691":1,"2111":1,"2112":1,"2113":1,"2114":1,"2115":1,"2116":1,"2117":1},"2":{"62":3,"80":1,"395":1,"401":1,"493":3,"564":1,"642":1,"1195":1,"1215":1,"1471":1,"1486":1,"1490":2,"1503":1,"1588":3,"1591":1,"1775":3,"2107":1,"2113":1,"2204":1},"3":{"0":117,"3":5,"7":2,"24":1,"27":3,"37":1,"39":1,"42":7,"59":5,"62":6,"63":1,"66":1,"68":1,"72":9,"73":5,"76":1,"80":8,"85":1,"86":1,"91":6,"93":5,"94":12,"95":5,"96":12,"97":2,"98":3,"99":2,"100":1,"101":2,"102":1,"103":3,"104":3,"109":3,"115":1,"117":3,"121":3,"127":3,"128":7,"132":1,"135":1,"145":6,"146":1,"147":5,"149":3,"150":1,"151":1,"152":5,"155":1,"157":4,"159":1,"161":1,"165":2,"166":2,"167":1,"170":1,"175":3,"180":11,"184":2,"186":5,"193":1,"195":17,"196":2,"200":1,"201":1,"202":1,"203":2,"212":1,"214":1,"217":6,"218":7,"223":1,"229":1,"230":11,"235":7,"238":1,"241":1,"242":1,"243":27,"245":10,"249":3,"250":4,"251":2,"252":3,"253":1,"254":2,"256":1,"257":2,"258":1,"259":3,"260":10,"261":8,"279":1,"281":2,"283":3,"285":1,"291":5,"293":1,"295":6,"300":1,"310":4,"314":2,"318":13,"320":1,"322":1,"324":3,"325":5,"326":3,"333":2,"341":5,"345":2,"350":1,"351":1,"352":1,"353":1,"359":3,"368":1,"373":3,"375":3,"386":4,"387":3,"388":1,"390":14,"391":13,"392":8,"393":7,"395":4,"397":1,"401":11,"403":13,"405":1,"409":1,"414":1,"418":1,"421":1,"422":2,"433":1,"435":2,"439":1,"446":2,"448":12,"452":19,"453":1,"454":4,"458":2,"459":5,"461":1,"462":1,"463":6,"464":2,"465":5,"466":1,"468":1,"470":7,"475":10,"476":11,"477":11,"478":2,"481":1,"482":1,"483":2,"486":1,"487":1,"488":2,"489":2,"490":2,"491":2,"492":3,"493":7,"494":4,"495":4,"497":12,"499":11,"500":1,"502":1,"507":10,"511":4,"513":6,"514":2,"527":1,"534":2,"535":2,"536":3,"537":2,"538":1,"539":6,"540":1,"543":5,"545":22,"547":1,"550":1,"551":1,"552":7,"554":2,"556":25,"562":1,"563":5,"564":20,"566":6,"567":8,"572":29,"574":1,"575":3,"576":1,"577":4,"578":8,"582":1,"583":30,"585":13,"586":7,"589":1,"591":7,"593":1,"594":3,"597":1,"598":1,"599":35,"600":5,"601":5,"602":3,"603":5,"604":3,"607":14,"609":52,"611":11,"612":6,"613":6,"616":4,"618":7,"620":3,"621":4,"624":8,"625":7,"626":37,"627":2,"628":6,"629":5,"638":4,"640":25,"641":1,"642":8,"643":5,"644":10,"649":10,"651":5,"655":5,"657":14,"658":1,"660":2,"663":1,"665":12,"666":1,"667":2,"668":9,"669":7,"674":17,"675":3,"676":5,"677":3,"681":2,"683":1,"689":1,"690":1,"691":2,"698":2,"702":2,"707":4,"710":1,"711":1,"713":1,"714":1,"715":4,"718":6,"719":4,"720":2,"723":1,"724":4,"725":20,"726":2,"727":2,"728":7,"733":5,"737":2,"739":1,"741":2,"743":6,"744":2,"745":1,"749":14,"751":4,"752":2,"755":1,"756":4,"757":24,"758":1,"759":6,"760":5,"761":6,"764":5,"765":4,"766":35,"767":2,"768":6,"769":5,"774":17,"780":4,"782":15,"789":6,"790":21,"792":4,"793":16,"794":9,"798":2,"799":1,"803":1,"804":5,"805":2,"806":1,"808":2,"809":5,"810":2,"813":5,"825":4,"826":8,"827":25,"829":1,"830":10,"831":7,"832":14,"833":7,"836":1,"837":13,"838":25,"839":6,"840":3,"841":6,"842":1,"846":1,"853":4,"854":5,"855":2,"856":2,"857":1,"859":1,"861":15,"863":9,"864":5,"867":1,"868":7,"869":14,"870":8,"872":2,"873":12,"875":2,"876":23,"877":7,"879":1,"881":7,"884":3,"889":3,"891":4,"892":1,"896":1,"897":10,"900":6,"903":2,"905":6,"906":1,"907":1,"908":1,"913":6,"914":7,"916":5,"917":2,"924":7,"926":7,"927":4,"930":1,"933":1,"939":1,"946":3,"949":1,"954":16,"956":1,"958":1,"959":2,"960":1,"964":1,"971":3,"972":4,"973":1,"974":3,"979":1,"980":3,"981":1,"983":1,"986":2,"988":7,"990":3,"991":3,"994":1,"996":2,"999":1,"1004":5,"1006":1,"1010":1,"1012":6,"1014":2,"1020":1,"1025":11,"1026":28,"1027":1,"1028":2,"1029":2,"1036":1,"1044":1,"1050":5,"1051":2,"1054":4,"1058":4,"1063":1,"1065":2,"1067":3,"1069":3,"1073":1,"1074":3,"1078":2,"1081":1,"1082":7,"1083":3,"1085":2,"1086":3,"1090":1,"1093":1,"1094":1,"1117":1,"1123":2,"1124":13,"1127":3,"1128":1,"1129":1,"1133":4,"1139":1,"1141":1,"1142":2,"1144":1,"1154":2,"1156":1,"1161":4,"1162":1,"1163":1,"1168":11,"1184":1,"1187":3,"1192":1,"1195":1,"1207":1,"1208":1,"1212":9,"1214":1,"1215":1,"1216":1,"1229":4,"1231":1,"1233":1,"1237":43,"1246":2,"1247":15,"1253":1,"1257":1,"1259":23,"1262":5,"1263":1,"1264":8,"1265":1,"1266":1,"1269":2,"1270":75,"1271":29,"1273":1,"1275":1,"1277":1,"1280":2,"1282":1,"1283":1,"1285":1,"1286":95,"1290":5,"1293":1,"1294":1,"1300":138,"1301":36,"1309":9,"1310":6,"1311":117,"1312":13,"1315":1,"1316":3,"1318":2,"1322":2,"1323":118,"1324":141,"1326":2,"1337":1,"1339":139,"1350":1,"1357":2,"1359":13,"1369":2,"1379":2,"1380":7,"1395":9,"1396":6,"1402":2,"1405":2,"1406":1,"1409":1,"1415":19,"1416":1,"1417":69,"1427":1,"1428":1,"1431":1,"1436":323,"1438":5,"1441":1,"1442":1,"1444":6,"1447":1,"1453":2,"1454":1,"1455":10,"1459":1,"1460":1,"1462":1,"1465":3,"1467":5,"1471":8,"1474":1,"1475":2,"1479":21,"1480":30,"1481":3,"1482":2,"1483":3,"1485":1,"1486":10,"1487":2,"1488":4,"1489":5,"1490":8,"1492":10,"1496":7,"1500":2,"1503":1,"1512":1,"1520":1,"1526":2,"1531":1,"1545":1,"1556":1,"1566":1,"1573":1,"1577":2,"1582":4,"1583":1,"1585":2,"1587":2,"1588":4,"1589":2,"1591":80,"1593":1,"1594":1,"1596":20,"1597":3,"1598":1,"1599":12,"1600":18,"1601":1,"1602":1,"1627":1,"1631":1,"1635":1,"1636":1,"1638":1,"1641":2,"1645":1,"1646":1,"1650":2,"1653":1,"1654":1,"1658":2,"1659":1,"1660":1,"1665":1,"1666":1,"1667":1,"1668":2,"1669":2,"1672":1,"1673":1,"1675":1,"1681":1,"1703":2,"1705":3,"1708":1,"1721":1,"1724":1,"1736":1,"1739":1,"1740":1,"1747":1,"1756":1,"1757":1,"1760":2,"1761":6,"1764":14,"1765":35,"1770":1,"1773":3,"1775":3,"1782":1,"1785":1,"1810":3,"1815":3,"1833":1,"1839":2,"1842":1,"1845":1,"1851":1,"1854":1,"1856":2,"1858":1,"1872":1,"1874":1,"1875":3,"1876":1,"1891":1,"1896":3,"1898":1,"1900":1,"1905":1,"1909":2,"1910":2,"1912":3,"1915":3,"1916":1,"1921":1,"1922":6,"1923":5,"1934":1,"1947":1,"1948":2,"1953":1,"1957":1,"1963":1,"1967":1,"1970":2,"1972":2,"1973":1,"1975":1,"1978":2,"1979":1,"1982":3,"1983":5,"1985":3,"1990":2,"1995":3,"1996":5,"1997":1,"1998":1,"2001":10,"2005":1,"2013":1,"2025":2,"2026":3,"2035":1,"2043":1,"2044":2,"2045":6,"2047":4,"2056":4,"2058":1,"2068":1,"2071":1,"2085":1,"2103":1,"2106":1,"2107":1,"2111":1,"2112":1,"2113":6,"2114":2,"2115":5,"2116":1,"2117":1,"2125":1,"2126":1,"2127":1,"2128":1,"2129":1,"2130":3,"2133":7,"2134":3,"2138":1,"2140":2,"2144":1,"2148":1,"2151":1,"2152":1,"2153":5,"2158":5,"2159":1,"2160":12,"2161":1,"2163":1,"2166":1,"2167":1,"2168":2,"2170":1,"2171":1,"2181":3,"2187":1,"2189":1,"2191":1,"2194":2,"2195":2,"2202":1,"2204":5,"2212":1,"2230":1,"2233":1,"2234":3}}],["stoptracingasync",{"3":{"1436":1}}],["stoplistenasync",{"3":{"1417":1}}],["stopdetecting",{"3":{"1417":1}}],["stopwords",{"3":{"1359":1}}],["stopwatch",{"2":{"1163":1,"1821":1},"3":{"1163":1,"1263":3,"1270":6,"1311":2,"1323":5,"1339":3,"1425":1,"1427":2,"1436":3,"1475":1,"1818":1,"1821":2}}],["stopasync",{"3":{"572":2,"1069":1,"1259":2,"1286":1,"1323":1,"1324":1,"1395":1,"1417":7,"1429":1,"1436":6,"1488":2,"2056":2}}],["stop",{"0":{"2074":1},"1":{"1803":1,"1804":1,"1805":1,"1806":1,"1807":1},"3":{"80":1,"81":2,"115":1,"156":2,"237":1,"283":1,"341":1,"433":1,"472":1,"557":1,"571":1,"595":1,"674":1,"751":1,"791":1,"827":1,"870":1,"897":2,"898":1,"910":1,"932":1,"948":1,"1006":1,"1124":1,"1133":1,"1134":1,"1212":1,"1237":2,"1240":1,"1247":1,"1251":1,"1259":3,"1270":1,"1286":3,"1300":3,"1311":6,"1323":5,"1324":5,"1326":1,"1328":1,"1339":4,"1350":2,"1357":1,"1359":7,"1366":1,"1369":1,"1395":6,"1396":9,"1415":5,"1417":4,"1436":13,"1438":3,"1443":1,"1454":1,"1456":2,"1467":2,"1489":1,"1490":1,"1526":1,"1589":1,"1595":1,"1596":1,"1606":1,"1654":1,"1671":1,"1684":1,"1727":1,"1729":1,"1740":1,"1749":1,"1765":1,"1784":1,"1796":1,"1800":1,"1802":1,"1803":1,"1812":1,"1859":1,"1868":1,"1891":1,"1893":1,"1924":1,"1980":1,"1990":1,"2001":1,"2002":3,"2017":1,"2050":1,"2051":1,"2068":1,"2082":1,"2087":1,"2099":1,"2150":1,"2152":1,"2167":1,"2169":1,"2171":1,"2182":1,"2208":1}}],["stopped",{"3":{"0":1,"67":1,"109":1,"170":1,"248":1,"318":1,"413":1,"497":1,"499":1,"527":1,"563":1,"741":1,"757":1,"832":1,"840":1,"876":1,"905":2,"932":1,"1005":2,"1019":1,"1247":2,"1259":1,"1270":2,"1286":3,"1309":1,"1311":1,"1312":1,"1322":1,"1323":4,"1324":5,"1328":1,"1332":1,"1339":4,"1359":2,"1395":1,"1396":2,"1399":1,"1402":2,"1415":1,"1417":4,"1435":1,"1436":13,"1438":2,"1449":1,"1451":1,"1455":1,"1467":2,"1478":1,"1489":2,"1496":1,"1699":1,"1727":1,"1765":1,"1919":2,"1946":1,"1993":1,"2040":1,"2046":1,"2099":1,"2192":1}}],["stoppingtoken",{"2":{"237":1},"3":{"237":1,"518":1,"1100":1,"1286":1,"1323":2,"1339":4,"1396":3}}],["stopping",{"3":{"0":3,"135":1,"235":1,"255":1,"626":1,"898":1,"1091":1,"1187":1,"1271":1,"1312":1,"1323":3,"1339":1,"1380":1,"1395":4,"1396":1,"1417":2,"1427":3,"1431":1,"1435":1,"1436":3,"1492":1,"1665":1,"1807":1,"1919":1,"1922":1,"2178":1}}],["stopsgracefully",{"3":{"1436":1}}],["stopsthewalk",{"3":{"1436":2}}],["stops",{"0":{"1989":1},"3":{"0":13,"1":1,"19":1,"24":2,"27":1,"57":1,"72":1,"81":1,"109":1,"111":1,"122":1,"137":1,"148":1,"160":1,"176":1,"216":1,"235":1,"241":1,"243":1,"265":1,"290":1,"361":1,"369":1,"370":1,"371":1,"391":1,"399":1,"401":1,"403":1,"408":1,"472":1,"528":1,"535":1,"539":1,"549":2,"593":1,"608":1,"611":1,"612":1,"614":1,"626":1,"632":1,"633":1,"648":1,"657":1,"698":1,"700":2,"707":1,"714":1,"741":1,"750":1,"782":1,"789":1,"800":1,"809":1,"810":1,"821":1,"827":1,"829":1,"838":1,"863":1,"869":1,"874":1,"889":1,"898":1,"899":1,"912":1,"921":2,"923":1,"924":1,"926":2,"948":1,"963":1,"973":1,"1020":1,"1022":1,"1033":1,"1042":1,"1049":1,"1051":1,"1067":1,"1093":1,"1153":1,"1163":1,"1212":2,"1229":2,"1233":1,"1237":1,"1247":2,"1256":2,"1259":8,"1270":7,"1274":1,"1277":1,"1281":1,"1286":16,"1300":13,"1301":1,"1309":2,"1311":8,"1312":1,"1322":1,"1323":9,"1324":12,"1327":1,"1339":12,"1350":3,"1359":15,"1369":3,"1380":1,"1395":20,"1396":14,"1400":2,"1401":1,"1402":1,"1405":1,"1415":8,"1416":2,"1417":5,"1423":1,"1425":1,"1427":4,"1431":1,"1436":25,"1438":4,"1441":3,"1443":1,"1449":1,"1455":1,"1465":1,"1467":4,"1472":1,"1475":1,"1488":1,"1489":2,"1490":1,"1492":1,"1494":2,"1531":1,"1545":1,"1654":1,"1665":1,"1681":1,"1685":1,"1692":1,"1702":1,"1717":1,"1722":1,"1729":1,"1769":1,"1824":1,"1849":1,"1851":1,"1876":1,"1902":3,"1936":1,"1951":1,"1964":1,"1988":1,"1991":1,"1995":1,"2002":1,"2030":1,"2042":2,"2046":1,"2049":1,"2057":1,"2069":1,"2071":1,"2077":1,"2084":1,"2099":2,"2118":1,"2144":1,"2148":1,"2150":2,"2152":1,"2159":1,"2161":1,"2164":1,"2166":2,"2168":1,"2170":1,"2172":1,"2177":2,"2182":1,"2195":1}}],["stakeholders",{"3":{"1541":1}}],["stake",{"3":{"1396":1,"1436":2,"1438":1,"2197":1}}],["stakes",{"3":{"530":1,"1286":1,"1324":1,"1350":1,"2150":1}}],["stash",{"3":{"1311":3,"1324":1,"1352":1}}],["stashes",{"3":{"350":1,"419":1,"1273":1,"1298":1,"1300":3,"1311":3,"1339":1,"1359":1,"1415":1,"1443":1,"1825":1,"1975":2}}],["stashed",{"3":{"214":1,"350":1,"420":1,"1300":2,"1311":3,"1336":1,"1976":1,"2151":1}}],["staffs",{"3":{"1350":1}}],["staff",{"3":{"689":1}}],["stably",{"3":{"1324":1,"1395":2}}],["stablepolls",{"3":{"1395":3}}],["stablepollsforcompletion",{"3":{"1395":1}}],["stable",{"3":{"0":3,"24":1,"264":1,"265":4,"266":1,"303":1,"341":1,"434":2,"449":1,"549":1,"593":1,"635":1,"742":1,"750":1,"751":1,"880":1,"891":1,"964":1,"1012":1,"1133":1,"1178":1,"1212":1,"1229":3,"1233":1,"1237":5,"1247":2,"1259":4,"1269":1,"1270":4,"1271":3,"1276":1,"1286":7,"1300":7,"1301":1,"1308":1,"1309":5,"1310":1,"1311":13,"1318":1,"1323":14,"1324":4,"1339":1,"1348":1,"1350":16,"1353":2,"1359":46,"1369":2,"1380":4,"1387":1,"1390":2,"1395":7,"1396":28,"1402":16,"1406":1,"1410":1,"1415":9,"1416":1,"1417":7,"1427":1,"1435":1,"1436":10,"1438":3,"1441":1,"1465":1,"1496":1,"1519":1,"1536":1,"1546":1,"1560":1,"1565":1,"1577":1,"1585":1,"1638":1,"1639":1,"1641":3,"1664":1,"1665":1,"1796":1,"1805":1,"1873":1,"1899":1,"1911":2,"1912":1,"1958":1,"2085":1,"2088":2,"2134":1,"2140":2,"2160":1,"2189":1,"2191":1,"2195":1}}],["stability",{"3":{"592":1,"1134":1,"1359":2,"1369":1,"1395":3,"1396":1,"1417":1,"1436":2,"1492":1,"1565":1}}],["starred",{"3":{"1396":1}}],["starborder",{"3":{"1324":1}}],["starhalf",{"3":{"1324":1}}],["stars",{"3":{"1324":4,"1385":1,"1391":1,"1395":3,"1396":1,"1748":1,"1765":1,"1767":1}}],["starving",{"3":{"1259":1}}],["starve",{"3":{"1124":1,"1128":1,"1254":1,"1259":1,"1275":1,"1324":1,"1447":1}}],["starved",{"3":{"556":1}}],["star",{"3":{"391":1,"1324":11,"1391":2,"1395":12,"1396":16,"1417":1,"1748":1,"1750":1,"1758":1,"1763":1,"1764":3,"1765":1,"1767":1,"1768":1,"1773":1,"1787":1,"1793":1,"1807":1,"1812":1,"1817":1,"1827":1,"1834":1,"1846":1,"1853":1,"1862":1,"1868":1,"1877":1,"1886":1,"1892":1,"1899":1,"1905":1,"1912":1,"1922":2,"1924":1,"1930":1,"1941":1,"1950":1,"1959":1,"1965":1,"1972":1,"1979":1,"1985":1,"1992":1,"1998":1,"2003":1,"2015":1,"2029":1,"2039":1,"2050":1,"2061":1,"2071":1,"2082":1,"2088":1,"2100":1,"2110":1,"2117":1,"2125":1,"2130":1,"2135":1,"2141":1,"2148":1,"2155":1,"2162":1,"2171":1,"2182":1,"2195":1,"2205":1,"2213":1}}],["startipaddress",{"3":{"1467":1}}],["startindex",{"3":{"1324":1}}],["starting",{"0":{"2017":1},"3":{"59":1,"256":1,"529":1,"674":6,"749":1,"1067":1,"1124":1,"1229":1,"1247":2,"1263":1,"1270":1,"1286":1,"1293":1,"1300":1,"1301":4,"1311":1,"1320":1,"1323":1,"1324":7,"1326":1,"1327":1,"1339":4,"1342":1,"1350":3,"1359":3,"1380":1,"1390":1,"1395":7,"1396":2,"1402":1,"1415":2,"1417":1,"1436":5,"1438":1,"1441":3,"1449":1,"1488":1,"1492":1,"1537":1,"1646":1,"1658":1,"1727":1,"1781":1,"1801":1,"1821":1,"1825":1,"2001":1,"2029":1,"2089":1,"2100":1,"2158":1}}],["startlocal",{"3":{"1350":1}}],["startutc",{"3":{"1350":2,"1395":1,"1396":1}}],["startuptext",{"3":{"1416":3}}],["startupresources",{"3":{"1416":2}}],["startupbudget",{"3":{"1069":1}}],["startupdelay",{"3":{"905":1,"1259":2,"1275":1,"1286":5,"1317":1,"1323":3}}],["startup",{"0":{"1328":1,"1448":1},"1":{"232":1,"233":1,"234":1,"235":1,"236":1,"237":1,"238":1,"239":1,"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"787":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"794":1,"795":1},"3":{"0":16,"15":1,"24":1,"31":3,"33":1,"34":1,"55":1,"61":1,"72":2,"91":1,"92":1,"93":1,"94":2,"99":2,"103":2,"122":2,"146":1,"147":1,"148":1,"150":1,"170":4,"175":1,"178":3,"179":2,"181":1,"193":2,"199":1,"200":1,"201":1,"212":1,"219":1,"220":2,"232":1,"235":1,"237":1,"243":3,"245":1,"255":1,"256":4,"258":1,"259":1,"265":4,"288":1,"290":2,"291":3,"292":1,"293":1,"295":3,"296":2,"310":1,"350":1,"387":1,"401":1,"406":1,"418":2,"423":1,"424":1,"448":4,"453":1,"459":4,"464":3,"501":1,"521":1,"536":1,"563":1,"564":1,"567":1,"568":1,"583":6,"585":1,"587":1,"599":3,"601":2,"603":2,"633":1,"640":2,"665":1,"666":1,"667":2,"674":5,"675":1,"678":1,"684":1,"698":2,"700":1,"702":1,"709":1,"711":1,"727":1,"732":1,"747":1,"749":7,"751":3,"756":3,"757":2,"762":1,"774":2,"776":3,"787":1,"790":2,"792":3,"794":1,"795":1,"821":1,"827":3,"830":1,"838":1,"846":1,"875":1,"905":1,"907":1,"913":1,"918":1,"929":1,"931":3,"932":2,"933":3,"934":1,"980":8,"1006":2,"1011":1,"1012":1,"1018":1,"1034":1,"1050":1,"1066":4,"1067":2,"1068":4,"1069":1,"1071":1,"1074":1,"1089":2,"1091":2,"1093":1,"1104":1,"1107":1,"1108":7,"1109":1,"1112":1,"1124":3,"1125":1,"1150":3,"1174":1,"1176":1,"1177":1,"1180":1,"1186":1,"1189":1,"1192":1,"1202":1,"1203":20,"1207":88,"1208":15,"1212":3,"1213":1,"1222":1,"1229":2,"1237":1,"1247":5,"1248":1,"1254":1,"1257":2,"1259":10,"1270":1,"1272":1,"1275":1,"1279":1,"1280":1,"1283":1,"1286":46,"1288":3,"1297":1,"1300":19,"1301":1,"1309":8,"1311":121,"1312":2,"1315":5,"1316":2,"1317":2,"1320":3,"1323":38,"1324":32,"1325":1,"1328":5,"1332":2,"1333":1,"1334":1,"1335":4,"1336":1,"1338":1,"1339":43,"1359":2,"1364":1,"1369":6,"1378":1,"1379":1,"1380":7,"1395":4,"1396":10,"1406":1,"1413":1,"1415":17,"1416":6,"1417":16,"1418":1,"1419":1,"1420":1,"1427":11,"1430":2,"1436":18,"1438":22,"1439":1,"1441":10,"1442":3,"1443":3,"1444":1,"1446":1,"1447":1,"1450":1,"1455":6,"1456":3,"1460":1,"1461":1,"1467":19,"1469":2,"1476":1,"1477":1,"1491":1,"1496":6,"1500":1,"1526":3,"1550":1,"1554":1,"1566":1,"1577":6,"1586":2,"1614":1,"1619":1,"1641":1,"1652":1,"1653":1,"1663":1,"1664":3,"1665":3,"1667":1,"1670":4,"1684":2,"1689":1,"1700":1,"1706":1,"1707":2,"1718":1,"1719":3,"1721":1,"1722":1,"1724":2,"1727":1,"1728":1,"1748":1,"1751":1,"1764":1,"1765":1,"1767":1,"1772":1,"1777":1,"1790":1,"1792":1,"1824":1,"1825":1,"1826":1,"1827":1,"1842":1,"1845":1,"1849":1,"1862":1,"1881":3,"1882":1,"1885":4,"1886":1,"1889":1,"1898":2,"1904":1,"1908":1,"1910":1,"1922":1,"1923":1,"1929":1,"1956":2,"1959":1,"1964":1,"1970":1,"1971":1,"1975":2,"1982":2,"1984":1,"1995":1,"2001":2,"2002":1,"2005":1,"2007":1,"2008":1,"2010":1,"2013":1,"2015":1,"2023":1,"2028":2,"2031":2,"2057":3,"2068":1,"2085":1,"2097":1,"2100":1,"2129":1,"2133":1,"2134":2,"2152":1,"2169":1,"2171":1,"2173":1,"2177":1,"2181":2,"2182":2,"2190":2,"2234":5}}],["startdatefunc",{"3":{"1359":2}}],["startdateselector",{"3":{"1359":2}}],["startdate",{"2":{"1630":1},"3":{"1348":1,"1350":8,"1353":1,"1359":9,"1369":3,"1375":1,"1395":9,"1396":2,"1630":4,"1631":3,"1635":2,"1640":2}}],["starttimefunc",{"3":{"1359":3}}],["starttimeselector",{"3":{"1359":3}}],["starttimestamp",{"3":{"1270":1}}],["starttime",{"3":{"1342":1,"1350":4,"1359":4,"1362":1,"1369":4,"1395":6}}],["startaddingitem",{"3":{"1395":2}}],["startactivity",{"3":{"1339":1,"2159":1}}],["startasync",{"2":{"135":1,"1613":1,"1619":1},"3":{"135":1,"200":1,"1069":1,"1259":3,"1286":1,"1323":1,"1324":6,"1436":4,"1611":1,"1613":1,"1619":1}}],["startcoreasync",{"3":{"1324":3}}],["starter",{"3":{"2241":1}}],["startenrollmentasync",{"3":{"1293":1,"1300":2}}],["startedhost",{"3":{"1436":3,"1488":1}}],["starteditingitem",{"3":{"1395":2}}],["starteditingprofile",{"3":{"1395":1}}],["startediting",{"3":{"1395":22}}],["startedat",{"3":{"1323":2,"1324":1}}],["started",{"0":{"1661":1,"2212":1},"1":{"1692":1,"1693":1,"1694":1,"1695":1,"1696":1,"1697":1,"1698":1,"1699":1,"1700":1,"1701":1,"1702":1,"1703":1,"1704":1,"1705":1},"3":{"0":2,"24":1,"99":1,"170":1,"234":1,"348":1,"353":1,"397":4,"451":1,"490":1,"491":1,"492":1,"493":1,"495":1,"507":1,"513":1,"517":1,"527":1,"528":1,"572":1,"632":3,"640":1,"673":1,"706":2,"711":1,"799":1,"868":1,"869":1,"889":1,"938":1,"1005":1,"1050":1,"1067":2,"1190":1,"1194":1,"1251":1,"1259":1,"1270":2,"1286":1,"1300":3,"1311":2,"1324":14,"1328":1,"1333":1,"1339":7,"1359":1,"1395":9,"1396":3,"1409":1,"1417":4,"1427":1,"1429":1,"1430":2,"1436":8,"1438":1,"1441":2,"1444":1,"1467":3,"1488":1,"1489":1,"1526":1,"1535":1,"1577":7,"1600":1,"1602":1,"1606":1,"1646":1,"1658":1,"1661":1,"1669":1,"1673":1,"1674":1,"1681":1,"1689":2,"1691":1,"1692":1,"1717":1,"1718":1,"1725":1,"1726":1,"1730":1,"1740":1,"1779":1,"1948":1,"1950":2,"1975":1,"1976":1,"2013":1,"2042":1,"2056":1,"2057":2,"2100":2,"2159":1,"2217":1,"2228":1,"2230":1,"2234":1,"2236":2,"2238":1}}],["startobject",{"3":{"1229":2}}],["startoutboxactivity",{"3":{"397":1,"1259":1}}],["startscanningasync",{"3":{"1396":1}}],["startsattime",{"3":{"1395":1}}],["startsatdate",{"3":{"1395":1}}],["startsatlocal",{"3":{"1350":1,"1396":1,"1416":2}}],["startsat",{"2":{"1342":1},"3":{"1342":1,"1350":5,"1352":2,"1359":19,"1362":1,"1369":5,"1380":2,"1395":13,"1396":4,"1526":1,"1534":1,"1630":2,"1631":9,"1635":2,"1639":1,"1640":3,"1814":1}}],["startsatutc",{"3":{"1300":2,"1350":1,"1359":1,"1396":4}}],["startsync",{"3":{"1324":2}}],["startswithscheme",{"3":{"1417":2}}],["startswithsegments",{"3":{"1300":1,"1311":1,"1339":3}}],["startswith",{"3":{"1247":1,"1301":1,"1339":1,"1467":1,"1640":1}}],["starts",{"3":{"0":5,"104":1,"148":1,"195":1,"234":1,"235":2,"238":1,"241":1,"350":2,"395":1,"400":1,"402":1,"409":1,"413":1,"452":1,"518":1,"528":1,"545":1,"551":1,"556":1,"632":1,"640":1,"641":1,"675":1,"705":1,"733":1,"759":1,"762":1,"766":1,"776":1,"782":1,"792":1,"810":1,"827":1,"861":1,"875":1,"907":1,"914":1,"932":1,"965":1,"988":1,"1017":1,"1018":2,"1019":2,"1069":2,"1074":1,"1100":1,"1168":1,"1212":1,"1241":2,"1247":1,"1249":1,"1259":2,"1270":3,"1273":1,"1285":1,"1286":5,"1290":2,"1293":1,"1298":1,"1300":8,"1301":2,"1310":1,"1311":3,"1318":1,"1323":4,"1324":8,"1327":1,"1328":2,"1334":1,"1339":14,"1350":1,"1359":9,"1366":1,"1369":2,"1376":1,"1380":2,"1383":1,"1387":1,"1390":1,"1395":17,"1396":11,"1402":2,"1414":1,"1415":3,"1416":3,"1417":11,"1422":1,"1427":3,"1430":1,"1436":23,"1438":2,"1441":1,"1443":1,"1444":1,"1445":1,"1449":1,"1450":1,"1453":1,"1455":1,"1475":1,"1476":1,"1482":1,"1488":1,"1489":1,"1490":4,"1491":3,"1630":1,"1632":1,"1640":1,"1648":1,"1651":2,"1721":1,"1821":1,"1840":2,"1866":1,"1927":1,"1929":1,"1945":1,"1948":1,"1951":1,"1968":1,"1977":1,"2005":1,"2041":1,"2057":1,"2060":1,"2069":1,"2071":1,"2158":1,"2229":1}}],["start",{"0":{"1334":1,"1682":1,"1693":1,"1723":1,"2207":1,"2247":1},"1":{"232":1,"233":1,"234":1,"235":1,"236":1,"237":1,"238":1,"239":1},"2":{"1606":1,"1740":1},"3":{"0":3,"1":1,"24":1,"33":1,"99":1,"101":1,"135":1,"170":1,"195":1,"232":1,"236":3,"239":1,"256":1,"395":1,"427":1,"452":1,"486":1,"517":1,"539":1,"673":1,"675":2,"676":1,"698":2,"707":1,"709":2,"768":1,"795":1,"808":1,"818":1,"819":1,"820":1,"837":1,"846":1,"867":1,"869":1,"872":1,"875":1,"905":1,"918":1,"932":1,"1025":1,"1026":1,"1070":1,"1091":2,"1093":1,"1096":1,"1125":1,"1133":1,"1144":1,"1184":1,"1194":1,"1210":1,"1212":2,"1234":2,"1237":9,"1238":1,"1247":2,"1269":1,"1270":6,"1286":2,"1300":8,"1311":11,"1317":2,"1320":1,"1323":16,"1324":30,"1327":1,"1328":4,"1333":1,"1339":15,"1344":1,"1348":1,"1350":14,"1352":1,"1356":2,"1359":33,"1364":2,"1369":4,"1379":1,"1380":6,"1392":1,"1395":31,"1396":20,"1402":4,"1415":4,"1416":13,"1417":13,"1430":1,"1436":13,"1438":3,"1441":1,"1443":5,"1444":2,"1449":3,"1453":1,"1454":1,"1456":5,"1467":4,"1475":1,"1477":1,"1488":1,"1489":1,"1490":3,"1496":2,"1577":2,"1606":2,"1630":3,"1631":2,"1635":2,"1650":1,"1651":1,"1654":2,"1655":1,"1669":1,"1671":1,"1675":1,"1707":1,"1718":1,"1724":2,"1740":2,"1751":1,"1764":1,"1765":1,"1767":2,"1768":1,"1772":1,"1814":1,"1818":1,"1843":1,"1860":1,"1913":1,"1947":1,"1958":1,"1960":1,"1962":1,"2004":1,"2008":1,"2009":2,"2011":1,"2013":2,"2014":1,"2016":1,"2056":1,"2057":1,"2067":1,"2092":1,"2099":1,"2106":1,"2123":1,"2159":1,"2180":1,"2181":1,"2199":1,"2206":2,"2213":1,"2235":1,"2238":1}}],["staging",{"3":{"201":1,"543":1,"545":1,"600":1,"631":2,"633":4,"635":1,"636":2,"1034":1,"1258":1,"1259":7,"1286":3,"1290":1,"1311":1,"1324":1,"1441":1,"1458":1,"1467":1,"1477":1,"1685":1,"1686":1,"2109":1}}],["stagefileasync",{"3":{"1324":1}}],["stage",{"2":{"636":1},"3":{"0":5,"157":1,"160":1,"161":1,"490":1,"491":1,"492":1,"493":1,"495":1,"543":2,"545":1,"552":1,"599":1,"600":1,"631":1,"633":6,"635":1,"636":2,"757":1,"790":1,"867":2,"868":2,"869":8,"871":3,"873":2,"876":1,"877":1,"1034":2,"1037":1,"1212":3,"1237":1,"1247":3,"1259":3,"1270":5,"1271":4,"1286":1,"1300":4,"1311":4,"1323":1,"1324":1,"1339":1,"1359":7,"1395":3,"1402":2,"1415":6,"1427":1,"1436":6,"1438":1,"1445":12,"1450":1,"1455":3,"1467":2,"1477":5,"1482":1,"1496":1,"1591":1,"1764":1,"1908":2,"2113":1,"2117":1}}],["stages",{"3":{"0":1,"24":1,"201":1,"599":1,"1074":1,"1258":1,"1259":7,"1270":1,"1286":3,"1300":4,"1311":2,"1323":1,"1324":2,"1396":1,"1402":1,"1436":4,"1445":1,"1455":1,"1467":1,"1477":3,"1577":1,"1845":1,"1908":1,"1910":1}}],["staged",{"0":{"1477":1},"3":{"0":4,"21":1,"24":1,"193":1,"195":1,"201":3,"202":1,"384":1,"543":2,"598":1,"599":3,"601":1,"631":2,"633":3,"782":1,"905":1,"1212":2,"1258":1,"1259":11,"1286":3,"1300":1,"1323":2,"1395":1,"1417":1,"1436":12,"1441":1,"1466":1,"1467":3,"1469":1,"1471":1,"1477":2,"1483":1,"1490":1,"1500":2,"1526":1,"1577":1,"1646":1,"1691":1,"1701":1,"1705":1,"1725":1,"1731":2,"1781":1,"1782":1,"1910":1,"2091":1,"2234":1}}],["stanza",{"3":{"1464":1}}],["stance",{"3":{"39":1,"45":1,"1176":1,"1286":1,"1300":1,"1324":1,"1380":1,"1396":2,"1416":1,"1436":5,"1596":1,"1598":1}}],["standout",{"3":{"2054":1}}],["standalone",{"3":{"350":1,"396":1,"609":1,"631":1,"1271":1,"1309":2,"1323":1,"1324":1,"1341":1,"1350":3,"1359":3,"1380":1,"1395":3,"1396":1,"1402":2,"1415":3,"1432":1,"1436":3,"1441":2,"1443":1,"1467":2,"1489":1,"1611":1,"1630":2,"1632":1,"1635":1,"1638":5,"1639":2,"1648":1}}],["standards",{"3":{"1311":1,"2215":1,"2220":1}}],["standardized",{"3":{"608":1,"826":1,"1218":1,"1229":2,"1259":1,"1271":1,"1311":1,"1526":1,"1546":1}}],["standardizes",{"3":{"340":1,"536":1,"901":1,"1436":1,"1665":1,"1928":1,"2133":1}}],["standardize",{"3":{"300":1,"397":1,"448":1,"1237":1}}],["standard",{"0":{"2031":1},"3":{"0":6,"53":1,"62":1,"66":1,"67":1,"68":1,"70":1,"72":2,"74":1,"100":2,"109":1,"200":1,"265":2,"341":1,"350":1,"407":1,"481":1,"483":1,"497":1,"640":3,"665":1,"743":1,"764":1,"766":4,"768":1,"769":2,"799":1,"819":1,"822":1,"833":1,"846":1,"880":1,"882":1,"883":1,"938":1,"939":1,"1043":1,"1125":1,"1126":1,"1211":1,"1212":2,"1229":4,"1270":10,"1286":6,"1290":1,"1296":1,"1300":13,"1309":3,"1311":11,"1312":4,"1316":1,"1323":3,"1324":5,"1329":1,"1339":17,"1350":4,"1358":1,"1359":8,"1365":1,"1368":2,"1369":1,"1379":1,"1380":2,"1395":12,"1396":7,"1402":1,"1404":1,"1405":1,"1410":1,"1415":5,"1417":2,"1421":1,"1425":1,"1427":2,"1431":1,"1435":1,"1436":3,"1438":1,"1443":2,"1446":1,"1455":2,"1456":1,"1457":1,"1459":1,"1467":8,"1474":1,"1476":3,"1488":1,"1489":1,"1503":1,"1526":3,"1534":1,"1537":1,"1591":3,"1600":2,"1631":2,"1632":5,"1639":2,"1640":3,"1641":1,"1647":1,"1653":1,"1656":1,"1663":1,"1668":1,"1670":1,"1693":1,"1707":1,"1720":1,"1781":1,"1895":1,"1899":1,"1909":1,"1926":1,"1930":1,"1975":1,"1980":1,"1982":1,"2012":1,"2014":1,"2030":1,"2032":1,"2039":1,"2058":2,"2158":1,"2179":1,"2187":1,"2205":1,"2229":1,"2234":1}}],["stand",{"3":{"73":1,"95":1,"111":1,"126":1,"258":1,"476":1,"490":1,"491":1,"492":1,"493":1,"495":1,"601":1,"1016":1,"1074":1,"1077":1,"1128":1,"1154":1,"1211":1,"1270":1,"1284":1,"1286":2,"1312":1,"1339":2,"1350":2,"1359":2,"1369":1,"1380":2,"1396":1,"1402":1,"1415":1,"1417":3,"1428":1,"1436":10,"1438":1,"1443":1,"1467":1,"1503":1,"1577":1,"1602":1,"1663":2,"1806":1,"1929":1,"1942":1,"1996":1,"2009":1}}],["standing",{"3":{"0":2,"140":1,"177":1,"474":1,"490":1,"572":1,"591":1,"745":1,"768":1,"801":1,"811":1,"812":1,"840":1,"867":1,"912":1,"1054":1,"1090":1,"1094":1,"1247":1,"1300":3,"1301":2,"1323":2,"1339":1,"1359":3,"1392":1,"1395":1,"1396":5,"1415":1,"1427":2,"1436":5,"1460":2,"1461":1,"1472":1,"1474":1,"1490":1,"1492":1,"1496":3,"1526":2,"1692":1,"1726":1,"1809":1,"1896":1,"1929":1,"1950":1,"2133":1}}],["standstill",{"3":{"1124":1,"1311":2,"1339":2}}],["stands",{"3":{"0":4,"20":1,"54":1,"178":1,"257":1,"259":1,"508":1,"551":1,"620":1,"640":1,"649":1,"790":1,"797":1,"803":1,"804":1,"808":1,"813":1,"814":1,"827":1,"840":1,"848":1,"877":1,"1055":1,"1075":1,"1116":1,"1142":1,"1177":1,"1286":2,"1300":3,"1309":1,"1323":2,"1324":1,"1350":1,"1359":3,"1380":1,"1395":1,"1396":2,"1415":1,"1436":7,"1496":1,"1526":1,"1534":1,"1577":1,"1591":1,"1671":1,"1786":1,"1794":1,"1796":1,"1933":1,"2002":1,"2049":1,"2051":1,"2096":1,"2170":1,"2204":1,"2206":1}}],["stalling",{"3":{"1309":1,"1312":1,"1323":1,"1413":1}}],["stall",{"3":{"1301":1,"1324":1,"1396":3,"1402":1,"1415":1,"1451":1,"1727":1,"1944":1,"2006":1,"2014":1}}],["stalled",{"3":{"759":1,"1323":1,"1396":1,"1488":1,"2195":1}}],["stalls",{"3":{"0":1,"709":1,"914":1,"1256":1,"1427":1,"1440":1,"1456":1,"1467":1,"1490":1,"1577":1,"1582":1,"1653":1,"1689":1,"1698":1,"2176":1}}],["stales",{"3":{"1922":2}}],["stalerowversionconflicttests",{"3":{"1591":1,"1600":1}}],["staler",{"3":{"1395":1}}],["staled",{"3":{"1301":1,"1912":1,"1913":1,"1918":1,"1924":1}}],["staleundecoratedallowlisttests",{"3":{"1198":1,"1199":2,"1207":1,"1436":5}}],["staleallowlisttests",{"3":{"1198":1,"1199":2,"1207":1,"1436":7,"1496":1}}],["staleness",{"3":{"189":1,"243":1,"245":2,"305":1,"390":2,"391":1,"441":1,"444":1,"674":1,"735":1,"736":1,"924":1,"1060":1,"1102":1,"1270":4,"1283":1,"1300":1,"1301":5,"1311":2,"1324":14,"1350":1,"1359":1,"1395":1,"1402":2,"1436":2,"1475":1,"1496":1,"1534":1,"1556":1,"1577":2,"1586":1,"1591":2,"1597":1,"1651":1,"1668":1,"1923":1,"2129":1,"2130":1,"2205":1}}],["stale",{"3":{"0":5,"70":1,"104":1,"128":1,"130":1,"138":2,"140":1,"141":1,"171":1,"231":1,"235":1,"243":1,"255":2,"279":1,"324":1,"340":1,"341":2,"343":1,"344":1,"345":1,"373":1,"388":1,"426":1,"512":2,"572":2,"608":1,"610":1,"626":1,"628":2,"703":1,"716":1,"720":1,"733":2,"735":1,"751":1,"759":1,"790":3,"792":1,"793":1,"810":1,"841":1,"848":1,"873":1,"876":1,"877":1,"892":1,"905":1,"906":1,"927":1,"971":1,"972":2,"986":1,"991":1,"1028":1,"1042":1,"1045":1,"1065":1,"1101":1,"1175":1,"1184":1,"1212":2,"1229":1,"1237":3,"1249":1,"1259":3,"1265":1,"1270":7,"1271":1,"1286":7,"1300":10,"1301":6,"1306":1,"1309":2,"1311":6,"1323":1,"1324":29,"1332":1,"1339":4,"1347":1,"1350":3,"1352":1,"1359":17,"1373":1,"1375":1,"1379":1,"1380":4,"1393":1,"1395":20,"1396":25,"1399":1,"1402":3,"1406":1,"1411":1,"1415":5,"1416":1,"1417":9,"1436":23,"1438":3,"1453":2,"1460":1,"1475":3,"1488":2,"1489":1,"1490":1,"1492":1,"1496":21,"1525":1,"1526":5,"1534":2,"1546":1,"1549":1,"1556":2,"1561":1,"1571":2,"1577":1,"1591":5,"1596":1,"1597":1,"1600":1,"1635":1,"1639":1,"1648":1,"1651":2,"1668":1,"1685":1,"1689":1,"1701":1,"1702":1,"1708":3,"1720":1,"1730":1,"1748":3,"1749":1,"1765":1,"1822":1,"1856":1,"1869":1,"1870":1,"1871":1,"1872":1,"1876":2,"1877":2,"1898":2,"1912":1,"1913":1,"1914":1,"1918":2,"1920":1,"1923":2,"1924":1,"1948":1,"2014":1,"2035":2,"2038":1,"2044":2,"2046":2,"2047":1,"2056":1,"2074":1,"2099":1,"2129":1,"2165":1,"2169":3,"2190":1,"2195":1,"2201":1,"2204":1,"2234":1}}],["stamptimeout",{"3":{"1323":4}}],["stamptestdbcontext",{"3":{"1199":2,"1207":1}}],["stamper",{"3":{"1323":1}}],["stampeding",{"3":{"1396":1,"1402":1}}],["stampedentity",{"3":{"1199":3,"1207":1}}],["stampedetestquery",{"3":{"1199":2,"1207":1}}],["stampede",{"3":{"0":1,"248":1,"508":1,"733":3,"737":1,"1192":1,"1267":3,"1270":10,"1301":9,"1323":1,"1496":1,"1668":1,"1708":1,"1917":2,"1920":1}}],["stamped",{"3":{"0":3,"26":1,"39":1,"214":1,"221":1,"345":1,"397":1,"434":1,"435":1,"500":1,"501":1,"507":1,"714":1,"715":1,"720":1,"905":1,"907":1,"1044":1,"1083":1,"1084":1,"1140":1,"1168":1,"1212":3,"1231":1,"1232":1,"1237":3,"1247":4,"1253":2,"1259":7,"1265":1,"1269":1,"1270":3,"1275":1,"1280":1,"1281":1,"1286":19,"1290":1,"1300":5,"1309":3,"1312":2,"1318":1,"1323":7,"1324":4,"1339":6,"1357":1,"1358":1,"1359":19,"1380":2,"1390":1,"1395":7,"1396":6,"1402":2,"1415":8,"1418":1,"1425":1,"1427":5,"1436":5,"1438":5,"1496":1,"1545":1,"1577":1,"1591":1,"1653":1,"1657":1,"1664":1,"1665":1,"1672":1,"1685":1,"1698":1,"1704":1,"1719":1,"1720":1,"1749":1,"1767":1,"1810":1,"1839":1,"1861":2,"1876":1,"1933":1,"1936":1,"1982":4,"1984":1,"2092":1,"2188":1,"2194":1,"2199":1,"2205":1,"2232":1}}],["stampauditfields",{"3":{"1286":2}}],["stampasync",{"3":{"1042":1,"1436":5,"2190":1}}],["stamprowversion",{"3":{"1274":1,"1286":2}}],["stamporverifyinsert",{"3":{"698":1,"1286":2}}],["stampingtransformer",{"3":{"1199":2,"1207":1}}],["stamping",{"3":{"0":1,"21":1,"26":1,"39":1,"179":1,"202":1,"350":1,"698":1,"716":2,"826":1,"840":1,"847":1,"923":1,"926":1,"1083":1,"1163":1,"1232":1,"1237":4,"1244":1,"1247":3,"1259":3,"1265":1,"1270":1,"1272":1,"1274":1,"1281":1,"1286":12,"1300":4,"1304":1,"1309":1,"1311":3,"1323":2,"1324":3,"1339":4,"1342":1,"1359":7,"1369":2,"1396":2,"1398":1,"1402":3,"1412":1,"1415":2,"1438":1,"1526":1,"1577":2,"1591":1,"1663":1,"1664":2,"1717":1,"1839":1,"1844":1,"1871":1,"1977":1,"1983":1,"2001":1,"2053":1,"2076":1,"2151":1,"2190":1,"2223":1}}],["stamp",{"0":{"2190":1},"3":{"0":4,"213":1,"214":1,"341":1,"343":1,"365":1,"397":1,"716":1,"926":2,"988":1,"996":1,"1034":1,"1035":1,"1083":1,"1084":1,"1091":1,"1160":1,"1163":1,"1174":1,"1175":1,"1231":1,"1237":1,"1247":1,"1249":2,"1253":1,"1259":8,"1265":1,"1270":7,"1286":21,"1300":7,"1309":1,"1311":2,"1318":2,"1323":9,"1324":8,"1336":1,"1339":5,"1342":1,"1350":1,"1352":2,"1356":1,"1358":5,"1359":33,"1380":1,"1382":1,"1395":4,"1396":2,"1402":2,"1415":2,"1427":4,"1431":2,"1436":14,"1438":2,"1496":1,"1524":1,"1526":1,"1531":1,"1534":3,"1577":1,"1585":1,"1679":1,"1765":1,"1838":2,"1839":3,"1876":1,"1948":1,"2011":1,"2044":1,"2065":1,"2088":1,"2144":1,"2149":1,"2155":1,"2165":1,"2178":1,"2182":1,"2193":1,"2195":2,"2205":1}}],["stampsoftdeletetransition",{"2":{"1274":1},"3":{"1274":1,"1286":2}}],["stamps",{"3":{"0":8,"27":2,"37":1,"39":1,"41":2,"109":1,"195":1,"202":1,"214":1,"246":1,"339":1,"341":1,"343":1,"359":1,"365":1,"402":1,"499":1,"574":1,"698":2,"702":2,"707":1,"714":1,"715":3,"716":2,"740":1,"827":2,"833":1,"846":1,"849":1,"861":1,"905":1,"909":1,"921":1,"995":1,"1018":1,"1033":1,"1034":1,"1042":1,"1059":2,"1081":1,"1083":3,"1118":1,"1184":1,"1212":5,"1231":1,"1232":2,"1237":7,"1247":1,"1249":1,"1252":1,"1253":1,"1255":2,"1259":5,"1270":4,"1271":2,"1273":1,"1274":3,"1275":1,"1276":1,"1278":2,"1281":1,"1286":34,"1290":1,"1300":11,"1309":2,"1310":1,"1311":3,"1312":2,"1317":1,"1323":5,"1324":14,"1326":1,"1333":1,"1336":1,"1338":1,"1339":11,"1350":3,"1359":13,"1363":1,"1366":1,"1369":1,"1373":1,"1380":1,"1389":1,"1395":1,"1396":6,"1402":3,"1410":1,"1415":4,"1417":1,"1426":1,"1427":2,"1433":1,"1436":8,"1438":1,"1441":2,"1443":2,"1447":1,"1496":2,"1585":1,"1664":1,"1670":1,"1801":1,"1839":1,"1844":1,"1851":1,"1856":1,"1876":2,"1889":1,"1948":1,"2085":1,"2093":1,"2145":1,"2150":1,"2151":2,"2155":1,"2168":1,"2188":1,"2190":1,"2199":1,"2202":1,"2210":1,"2234":1}}],["stacked",{"3":{"1304":1,"1402":1,"1524":1,"1713":1}}],["stackexchangeredis",{"2":{"1339":1},"3":{"1339":1}}],["stackexchangerediscache",{"2":{"245":1,"249":1,"253":1,"286":1,"732":1},"3":{"245":1,"249":1,"253":1,"286":1,"732":1,"1301":2}}],["stackexchange",{"2":{"234":1,"245":1,"1301":1,"1915":1},"3":{"234":2,"245":1,"259":2,"1213":1,"1270":3,"1286":1,"1301":6,"1311":4,"1323":3,"1332":1,"1339":6,"1442":2,"1443":1,"1489":1,"1577":1,"1915":1,"2044":1}}],["stackalloc",{"3":{"1286":1}}],["stacks",{"3":{"125":1,"881":1,"1263":1,"1270":1,"1311":1,"1368":1,"1369":1,"1417":1,"1585":1,"2222":1}}],["stacking",{"3":{"0":1,"1028":1,"1324":1,"1339":1,"1396":1,"1415":1,"1416":1,"1443":1,"1459":1}}],["stack",{"0":{"1213":1,"1511":1,"2006":1},"1":{"1210":1,"1211":1,"1212":1,"1213":1,"1214":1,"1215":1,"1216":1},"3":{"0":7,"6":1,"73":1,"115":1,"125":5,"150":1,"340":1,"387":1,"401":1,"407":1,"483":1,"618":1,"619":1,"625":1,"640":1,"641":2,"644":1,"827":1,"837":1,"860":1,"883":1,"913":1,"953":1,"1066":1,"1067":2,"1069":1,"1070":1,"1154":1,"1192":1,"1210":1,"1212":1,"1218":1,"1226":1,"1229":3,"1230":1,"1236":1,"1237":1,"1247":1,"1252":1,"1259":5,"1261":1,"1263":2,"1270":5,"1286":6,"1300":6,"1309":2,"1311":3,"1313":1,"1316":1,"1318":2,"1323":5,"1324":13,"1328":1,"1339":13,"1350":2,"1359":3,"1395":1,"1396":5,"1402":3,"1415":2,"1416":4,"1417":11,"1430":4,"1436":10,"1437":1,"1438":3,"1439":1,"1440":2,"1441":3,"1443":1,"1444":1,"1446":1,"1447":1,"1449":3,"1450":1,"1456":7,"1464":1,"1467":2,"1486":1,"1487":3,"1488":1,"1489":2,"1490":4,"1492":5,"1496":2,"1536":1,"1582":1,"1591":1,"1599":1,"1640":1,"1647":1,"1653":1,"1663":1,"1669":2,"1673":1,"1763":1,"1781":3,"1800":1,"1804":2,"1806":1,"1807":2,"1817":1,"1827":1,"1834":1,"1846":1,"1853":1,"1862":1,"1868":1,"1874":1,"1877":1,"1899":1,"1905":1,"1906":1,"1912":1,"1924":1,"1925":1,"1930":1,"1941":1,"1950":1,"1952":1,"1958":1,"1959":1,"1965":1,"1985":1,"1992":1,"1994":1,"2003":1,"2004":1,"2013":1,"2014":1,"2015":1,"2029":1,"2039":1,"2050":1,"2054":1,"2057":5,"2058":1,"2061":2,"2077":2,"2078":1,"2110":1,"2130":1,"2135":1,"2152":1,"2155":1,"2159":1,"2162":1,"2167":1,"2171":1,"2182":1,"2211":1,"2214":2,"2215":1,"2219":1,"2220":1}}],["stat",{"3":{"1396":1,"1455":1,"1526":1}}],["stats",{"3":{"1396":12,"1487":1}}],["statistics",{"3":{"1339":1,"1524":1,"1526":1,"1531":1}}],["stating",{"0":{"1201":1},"3":{"128":1,"219":1,"463":1,"819":1,"828":1,"972":1,"1012":1,"1018":1,"1082":1,"1134":1,"1248":1,"1270":2,"1286":4,"1300":2,"1311":3,"1323":1,"1324":2,"1339":3,"1350":2,"1359":6,"1362":1,"1369":1,"1395":1,"1396":4,"1417":4,"1436":10,"1459":1,"1526":1,"1810":1,"1815":1,"1816":1,"1844":1,"1881":1,"1948":1,"1956":1,"1990":1,"2083":1,"2139":1,"2165":1}}],["staticwebassets",{"3":{"1436":2}}],["statically",{"3":{"1237":1,"1339":1,"1359":1,"1396":1,"1416":1,"1436":7,"2072":1}}],["staticcsppolicyprovider",{"2":{"214":1,"2012":1,"2151":1},"3":{"214":1,"1199":2,"1203":1,"1207":1,"1336":1,"1339":8,"2012":1,"2151":1}}],["statics",{"3":{"145":1,"150":1,"413":1,"1237":1,"1270":1,"1286":1,"1311":1,"1319":1,"1323":2,"1324":3,"1415":1,"1417":1,"1436":3}}],["static",{"2":{"883":1,"982":1,"1051":1,"1162":1,"1168":1,"1196":1,"1246":1,"1319":1,"1346":1},"3":{"0":14,"10":1,"15":1,"27":1,"59":2,"122":1,"135":3,"137":1,"140":1,"178":1,"189":2,"212":1,"213":2,"214":1,"215":1,"216":2,"219":1,"220":1,"258":1,"305":1,"318":1,"343":1,"350":1,"397":1,"413":1,"549":1,"555":1,"556":2,"640":2,"642":1,"657":3,"698":1,"741":2,"744":1,"782":1,"819":2,"826":1,"881":3,"883":2,"884":1,"897":1,"963":2,"964":3,"972":2,"975":1,"979":1,"980":8,"981":1,"982":1,"1026":1,"1050":6,"1051":1,"1052":1,"1109":1,"1117":1,"1124":1,"1126":1,"1162":1,"1163":1,"1167":3,"1168":7,"1171":1,"1175":2,"1176":1,"1177":1,"1178":1,"1196":2,"1212":5,"1214":2,"1219":1,"1221":1,"1228":1,"1229":9,"1234":2,"1235":2,"1237":33,"1239":3,"1241":3,"1243":1,"1246":2,"1247":43,"1259":21,"1266":1,"1268":3,"1270":39,"1271":11,"1274":1,"1275":1,"1280":2,"1286":107,"1297":1,"1300":75,"1301":14,"1307":1,"1309":35,"1310":7,"1311":59,"1312":6,"1316":1,"1319":3,"1320":1,"1323":75,"1324":106,"1326":1,"1330":1,"1336":1,"1338":1,"1339":82,"1340":1,"1341":1,"1343":1,"1344":1,"1346":1,"1350":52,"1352":1,"1353":2,"1354":1,"1359":72,"1366":2,"1368":1,"1369":11,"1380":17,"1383":1,"1393":2,"1394":1,"1395":53,"1396":82,"1402":17,"1405":2,"1415":46,"1416":13,"1417":26,"1422":2,"1423":1,"1426":1,"1427":15,"1433":1,"1434":1,"1436":138,"1438":2,"1441":1,"1443":2,"1447":1,"1453":1,"1455":2,"1460":1,"1465":1,"1468":1,"1469":1,"1488":3,"1489":3,"1496":4,"1510":1,"1525":1,"1526":3,"1556":2,"1572":1,"1577":1,"1591":2,"1611":1,"1631":1,"1651":1,"1653":1,"1667":1,"1671":1,"1698":2,"1702":1,"1805":1,"1810":7,"1811":2,"1812":1,"1831":1,"1856":3,"1868":1,"1956":1,"1959":1,"1975":1,"1980":1,"1989":1,"1995":1,"2024":1,"2037":1,"2077":1,"2078":1,"2083":1,"2084":1,"2085":1,"2092":1,"2121":1,"2128":1,"2138":1,"2149":1,"2150":1,"2151":2,"2152":3,"2153":2,"2154":2,"2155":4,"2166":2,"2177":1,"2221":1}}],["statequery",{"3":{"1417":1}}],["statehaschanged",{"2":{"1556":1},"3":{"1324":3,"1395":7,"1396":4,"1401":1,"1402":1,"1526":1,"1556":2,"1577":1,"1591":2}}],["state=",{"3":{"1311":1,"1417":2}}],["statetable",{"3":{"1286":1}}],["staterules",{"3":{"1199":3,"1203":1,"1207":1,"1271":8}}],["statemaxlength",{"3":{"1237":1,"1271":2}}],["statemanagementconventiontests",{"2":{"1525":1,"1591":1},"3":{"881":4,"884":1,"1199":2,"1207":4,"1324":1,"1436":17,"1489":2,"1525":1,"1526":2,"1535":1,"1591":2,"1600":1}}],["statemanagementconventiontestsbase",{"2":{"1526":1},"3":{"881":1,"884":1,"1199":3,"1207":2,"1436":17,"1526":2}}],["statements",{"3":{"27":1,"63":1,"82":1,"161":1,"171":1,"181":1,"268":1,"285":1,"345":1,"375":1,"409":1,"486":1,"502":1,"514":1,"526":1,"531":1,"534":1,"540":2,"578":1,"586":1,"604":1,"607":1,"660":1,"713":1,"718":1,"744":1,"761":1,"777":1,"814":1,"825":1,"833":2,"841":1,"857":1,"877":1,"900":1,"917":1,"927":1,"999":1,"1029":1,"1045":1,"1055":1,"1074":1,"1103":1,"1271":1,"1286":2,"1300":1,"1311":1,"1350":1,"1352":1,"1359":9,"1396":6,"1467":1,"1538":1}}],["statement",{"0":{"1246":1},"3":{"0":2,"135":1,"136":1,"140":1,"150":1,"200":1,"220":1,"341":2,"395":1,"423":1,"438":1,"443":1,"478":1,"488":1,"489":1,"518":1,"522":1,"523":1,"524":3,"563":1,"566":1,"587":1,"590":1,"607":2,"633":1,"677":1,"707":1,"716":1,"719":4,"827":1,"838":1,"973":1,"974":1,"996":1,"1005":1,"1007":1,"1049":1,"1100":1,"1114":1,"1120":1,"1123":1,"1132":2,"1133":7,"1134":2,"1135":2,"1141":1,"1175":2,"1190":1,"1212":1,"1235":1,"1237":1,"1242":1,"1243":1,"1246":1,"1247":2,"1252":1,"1259":3,"1270":3,"1271":2,"1275":1,"1278":1,"1280":1,"1286":25,"1300":3,"1301":1,"1309":3,"1310":1,"1323":3,"1324":5,"1339":3,"1348":1,"1350":5,"1359":11,"1369":1,"1396":6,"1402":1,"1415":1,"1416":1,"1417":1,"1423":1,"1431":1,"1436":15,"1438":1,"1447":1,"1451":1,"1489":4,"1526":1,"1689":1,"1699":1,"1727":1,"1749":1,"1795":1,"1865":1,"1871":1,"1872":1,"1876":1,"1990":1,"2032":1,"2034":1,"2044":2,"2091":1,"2128":1,"2205":1}}],["statecontainer",{"3":{"881":1,"884":1,"1436":1,"1526":1}}],["stateful",{"3":{"178":1,"458":1,"881":1,"1020":1,"1186":1,"1187":1,"1300":1,"1324":1,"1396":3,"1415":1,"1417":2,"1436":5,"1467":3,"1489":1,"1526":1,"1566":1,"1833":1}}],["stated",{"3":{"0":2,"24":1,"27":1,"67":1,"100":1,"109":1,"111":1,"115":1,"125":1,"126":1,"135":3,"160":1,"193":2,"200":1,"202":1,"223":1,"243":1,"342":1,"463":1,"477":1,"518":1,"522":1,"536":1,"543":1,"545":1,"556":1,"559":1,"579":1,"602":2,"628":1,"631":2,"632":1,"658":1,"703":1,"723":1,"725":1,"751":1,"766":1,"769":1,"792":1,"797":1,"799":2,"809":1,"819":1,"826":1,"827":3,"838":4,"861":1,"868":1,"869":1,"876":2,"883":1,"888":1,"906":1,"914":1,"931":1,"946":2,"963":1,"968":1,"972":1,"979":2,"988":1,"996":1,"1012":2,"1019":1,"1021":1,"1075":1,"1083":1,"1100":2,"1108":1,"1116":1,"1124":1,"1133":1,"1134":1,"1168":1,"1193":1,"1212":1,"1225":1,"1228":1,"1229":1,"1236":1,"1237":3,"1247":3,"1259":1,"1270":8,"1273":1,"1286":19,"1291":1,"1292":1,"1293":1,"1294":1,"1298":1,"1300":11,"1304":1,"1309":8,"1311":11,"1312":3,"1318":1,"1323":10,"1324":10,"1330":2,"1332":1,"1333":1,"1336":1,"1337":1,"1339":8,"1350":5,"1359":28,"1369":1,"1380":3,"1384":1,"1389":1,"1392":1,"1395":5,"1396":27,"1399":1,"1402":9,"1405":1,"1415":7,"1416":1,"1417":3,"1424":1,"1425":1,"1436":25,"1441":2,"1445":1,"1455":1,"1459":1,"1467":3,"1469":1,"1470":1,"1474":1,"1486":1,"1489":1,"1496":3,"1526":1,"1531":1,"1541":1,"1545":2,"1547":1,"1548":1,"1558":1,"1572":1,"1577":1,"1591":2,"1666":1,"1673":1,"1685":1,"1709":1,"1789":1,"1799":1,"1874":3,"1877":1,"1958":1,"2031":1,"2060":1,"2170":1,"2176":1,"2184":1,"2234":1}}],["statelessness",{"3":{"1323":1,"1427":1}}],["stateless",{"3":{"0":5,"310":1,"359":1,"365":1,"458":2,"460":4,"462":1,"498":2,"499":2,"500":1,"501":2,"503":2,"910":1,"946":1,"1059":1,"1176":1,"1184":1,"1187":1,"1212":3,"1259":1,"1272":1,"1280":1,"1286":6,"1293":2,"1300":7,"1309":1,"1311":2,"1323":3,"1339":2,"1350":1,"1359":4,"1395":4,"1396":1,"1402":1,"1417":6,"1441":1,"1539":1,"1549":1,"1577":1,"1591":1,"1980":2,"1981":1,"1982":1,"1984":1,"1985":3,"2068":2,"2144":1,"2200":1,"2234":2}}],["state",{"0":{"100":1,"720":1,"813":1,"1556":1,"1633":1,"1766":1,"1769":1,"1777":1,"2078":1},"1":{"779":1,"780":1,"781":1,"782":1,"783":1,"784":1,"785":1,"786":1},"2":{"426":1,"784":1,"1976":1,"2033":2},"3":{"0":23,"17":1,"27":3,"39":1,"42":1,"74":1,"93":1,"109":1,"120":1,"131":1,"137":1,"141":1,"152":1,"159":1,"177":1,"178":1,"181":1,"186":1,"188":1,"195":1,"201":1,"208":1,"227":1,"228":1,"243":2,"249":1,"252":1,"254":1,"256":1,"257":1,"258":1,"259":1,"265":1,"266":1,"267":1,"272":1,"279":1,"281":1,"283":1,"284":1,"285":1,"286":1,"302":1,"324":1,"341":1,"342":1,"345":1,"348":1,"350":1,"353":1,"363":1,"375":1,"382":2,"384":2,"389":1,"390":2,"397":1,"399":1,"413":1,"423":1,"426":1,"429":1,"434":1,"497":3,"499":2,"501":1,"506":1,"507":4,"508":1,"513":1,"518":1,"524":1,"534":1,"536":1,"537":5,"540":2,"547":1,"549":1,"550":1,"552":1,"554":1,"557":1,"566":1,"572":1,"578":1,"599":1,"609":1,"610":1,"611":2,"613":1,"618":3,"622":1,"651":1,"664":3,"667":1,"670":1,"698":2,"699":1,"700":1,"707":1,"709":1,"736":3,"758":1,"761":1,"768":1,"779":1,"782":9,"783":1,"784":5,"785":1,"793":1,"794":1,"808":2,"809":6,"810":10,"811":4,"812":2,"813":6,"814":1,"815":2,"819":2,"821":1,"833":1,"836":1,"838":1,"841":1,"855":3,"856":1,"868":1,"871":1,"876":2,"879":1,"881":7,"882":3,"883":1,"884":1,"896":1,"905":1,"909":1,"923":1,"926":7,"927":1,"946":1,"954":3,"959":1,"960":1,"962":1,"963":1,"972":1,"976":1,"986":1,"988":2,"989":3,"994":1,"996":2,"1014":1,"1021":2,"1030":1,"1050":2,"1052":1,"1065":1,"1067":2,"1068":1,"1081":1,"1089":2,"1095":1,"1100":1,"1116":1,"1117":1,"1119":1,"1123":1,"1124":2,"1125":2,"1139":1,"1140":5,"1141":1,"1142":1,"1145":1,"1147":1,"1150":5,"1151":1,"1152":4,"1154":2,"1155":2,"1161":3,"1162":2,"1167":1,"1169":3,"1171":1,"1175":1,"1184":1,"1199":64,"1207":1,"1212":7,"1216":1,"1226":1,"1227":1,"1229":5,"1230":1,"1231":2,"1232":1,"1233":1,"1237":14,"1240":1,"1246":1,"1247":9,"1249":1,"1252":1,"1259":22,"1261":1,"1263":2,"1264":1,"1265":4,"1267":1,"1269":1,"1270":25,"1271":10,"1274":4,"1275":2,"1278":2,"1286":60,"1290":1,"1293":3,"1300":39,"1301":10,"1303":1,"1309":20,"1311":24,"1317":1,"1318":1,"1322":1,"1323":39,"1324":206,"1327":1,"1334":2,"1339":18,"1342":1,"1343":2,"1345":2,"1347":1,"1350":57,"1352":1,"1354":1,"1355":1,"1357":1,"1359":71,"1366":1,"1369":4,"1378":1,"1380":17,"1383":4,"1384":2,"1385":1,"1390":2,"1391":5,"1395":204,"1396":121,"1397":3,"1398":1,"1402":82,"1405":2,"1409":3,"1411":1,"1414":2,"1415":41,"1416":6,"1417":87,"1427":3,"1431":2,"1432":2,"1433":1,"1434":1,"1436":116,"1438":13,"1441":2,"1447":2,"1451":1,"1453":1,"1454":2,"1455":4,"1459":1,"1460":1,"1467":1,"1470":1,"1472":1,"1473":1,"1474":1,"1475":2,"1478":1,"1481":1,"1484":1,"1486":1,"1488":2,"1489":1,"1490":1,"1491":3,"1496":4,"1499":1,"1525":3,"1526":8,"1535":2,"1541":1,"1542":1,"1547":1,"1549":2,"1555":1,"1556":10,"1561":3,"1562":3,"1563":1,"1572":2,"1577":8,"1586":2,"1588":1,"1591":9,"1597":1,"1599":1,"1600":3,"1607":2,"1608":3,"1631":3,"1632":2,"1633":3,"1638":1,"1641":1,"1643":5,"1645":1,"1651":3,"1652":1,"1654":1,"1660":2,"1665":1,"1669":1,"1671":2,"1677":1,"1686":1,"1701":1,"1709":1,"1715":2,"1741":2,"1742":1,"1747":5,"1748":6,"1749":7,"1750":3,"1755":1,"1764":3,"1765":5,"1769":9,"1773":3,"1775":1,"1776":2,"1796":1,"1805":1,"1808":1,"1809":2,"1810":1,"1820":1,"1822":2,"1832":1,"1840":3,"1844":1,"1846":1,"1849":1,"1851":1,"1852":1,"1862":1,"1871":1,"1876":1,"1877":1,"1883":1,"1890":1,"1916":1,"1918":3,"1920":1,"1937":1,"1940":1,"1948":2,"1949":3,"1950":2,"1968":1,"1971":1,"1972":2,"1975":2,"1976":1,"1979":1,"1984":1,"1996":1,"2001":2,"2002":1,"2003":3,"2014":1,"2033":2,"2044":1,"2056":1,"2061":1,"2064":1,"2067":1,"2072":2,"2077":1,"2078":3,"2080":1,"2081":1,"2082":2,"2083":1,"2084":1,"2088":1,"2092":1,"2093":3,"2102":1,"2120":2,"2121":1,"2125":1,"2156":1,"2158":1,"2161":1,"2165":1,"2167":1,"2169":4,"2170":6,"2175":1,"2184":1,"2187":1,"2188":1,"2196":1,"2232":1,"2234":5}}],["stateservice",{"3":{"881":1,"884":1,"1436":1,"1526":1,"1591":1}}],["states",{"3":{"0":6,"68":1,"85":1,"91":1,"98":1,"115":1,"130":1,"136":1,"138":1,"141":1,"156":1,"171":1,"195":1,"200":2,"268":1,"301":1,"318":2,"322":1,"341":1,"353":1,"378":1,"392":1,"393":1,"459":1,"465":1,"490":1,"524":1,"529":1,"544":1,"549":1,"555":3,"556":1,"572":1,"582":1,"584":1,"591":1,"609":1,"612":1,"618":4,"627":1,"630":1,"642":1,"643":1,"644":1,"649":1,"650":1,"756":1,"766":1,"782":1,"789":1,"790":1,"794":1,"797":1,"809":1,"827":1,"833":1,"836":1,"838":3,"849":1,"867":1,"869":1,"881":1,"905":1,"914":1,"922":2,"941":1,"946":1,"963":2,"964":1,"967":1,"972":1,"1003":1,"1004":1,"1017":1,"1018":1,"1066":1,"1067":1,"1089":1,"1091":1,"1108":1,"1128":1,"1143":1,"1160":1,"1167":1,"1212":1,"1229":6,"1237":13,"1247":15,"1259":15,"1270":20,"1271":4,"1273":1,"1275":2,"1277":1,"1278":1,"1280":1,"1284":1,"1286":56,"1297":1,"1300":54,"1301":5,"1309":16,"1310":1,"1311":28,"1312":2,"1323":19,"1324":62,"1333":1,"1338":1,"1339":45,"1343":1,"1350":23,"1359":111,"1362":3,"1365":1,"1369":3,"1375":1,"1380":12,"1389":1,"1395":55,"1396":82,"1400":1,"1402":31,"1407":1,"1414":1,"1415":39,"1416":5,"1417":12,"1423":1,"1430":1,"1436":81,"1438":3,"1440":1,"1447":2,"1449":1,"1453":1,"1454":2,"1455":9,"1457":1,"1459":1,"1465":2,"1467":11,"1473":1,"1475":1,"1483":1,"1486":1,"1488":1,"1489":2,"1491":2,"1492":2,"1496":1,"1525":1,"1526":1,"1545":1,"1557":1,"1558":1,"1560":1,"1561":2,"1562":1,"1565":2,"1577":5,"1585":2,"1591":1,"1596":2,"1633":1,"1634":1,"1639":3,"1643":2,"1645":2,"1651":1,"1653":2,"1656":2,"1669":1,"1686":1,"1708":1,"1720":1,"1749":1,"1766":6,"1767":1,"1769":1,"1771":1,"1799":1,"1869":1,"1871":2,"1874":1,"1876":1,"1877":1,"1917":1,"1960":1,"1961":1,"1964":1,"1970":1,"2025":1,"2029":1,"2044":2,"2057":1,"2066":1,"2070":1,"2076":1,"2114":1,"2167":1,"2170":1,"2185":1,"2191":1,"2200":1,"2234":2}}],["status202accepted",{"3":{"1380":1}}],["status201created",{"3":{"1311":1}}],["statusmaxlength",{"3":{"1350":2,"1359":2,"1369":1}}],["statusineligible",{"3":{"1344":2,"1350":1}}],["status500internalservererror",{"3":{"1311":1}}],["status429toomanyrequests",{"3":{"1339":1}}],["status400badrequest",{"3":{"1311":3}}],["status409conflict",{"3":{"1311":1}}],["status499clientclosedrequest",{"3":{"1311":2}}],["statuserrorcodeprefix",{"3":{"1300":1}}],["statuses",{"3":{"318":1,"326":1,"1311":1,"1350":1,"1359":7,"1395":3,"1396":1,"1402":1,"1630":2,"1631":1,"1632":1,"1633":2,"1635":1,"1639":1}}],["statuscriteria",{"2":{"1239":1,"1359":1},"3":{"1239":1,"1247":1,"1359":7,"1815":1}}],["statuscodes",{"3":{"1311":8,"1339":1,"1380":1}}],["statuscodetoerrortype",{"3":{"1300":1}}],["statuscoderesult",{"2":{"159":1,"1909":1,"1911":1},"3":{"157":1,"159":1,"1311":6,"1909":1,"1911":1}}],["statuscode",{"2":{"100":1,"1225":2},"3":{"100":1,"1225":2,"1270":1,"1309":1,"1311":10,"1312":14,"1378":1,"1380":1,"1436":6,"1438":1,"1927":2,"2019":2}}],["statusbucket",{"2":{"1351":1},"3":{"1199":3,"1203":2,"1207":2,"1351":1,"1359":11,"1496":1}}],["status=success",{"3":{"626":1,"1475":1}}],["status",{"0":{"3":1,"9":1,"15":1,"29":1,"37":1,"45":1,"51":1,"57":1,"66":1,"76":1,"84":1,"90":1,"107":1,"115":1,"130":1,"145":1,"155":1,"164":1,"173":1,"184":1,"193":1,"205":1,"212":1,"223":1,"233":1,"241":1,"263":1,"271":1,"279":1,"289":1,"298":1,"308":1,"316":1,"328":1,"339":1,"348":1,"357":1,"368":1,"378":1,"386":1,"395":1,"411":1,"418":1,"432":1,"438":1,"446":1,"457":1,"468":1,"480":1,"497":1,"505":1,"516":1,"526":1,"534":1,"543":1,"554":1,"562":1,"570":1,"581":1,"589":1,"597":1,"607":1,"616":1,"624":1,"638":1,"647":1,"655":1,"663":1,"672":1,"680":1,"688":1,"696":1,"705":1,"713":1,"723":1,"731":1,"739":1,"747":1,"755":1,"764":1,"772":1,"780":1,"788":1,"797":1,"808":1,"817":1,"825":1,"836":1,"844":1,"852":1,"859":1,"867":1,"879":1,"887":1,"895":1,"903":1,"912":1,"920":1,"929":1,"937":1,"944":1,"952":1,"962":1,"970":1,"978":1,"986":1,"994":1,"1002":1,"1010":1,"1016":1,"1024":1,"1032":1,"1040":1,"1048":1,"1057":1,"1065":1,"1073":1,"1081":1,"1089":1,"1098":1,"1106":1,"1114":1,"1122":1,"1131":1,"1139":1,"1149":1,"1159":1,"1166":1,"1173":1,"1182":1,"1766":1,"1873":1},"2":{"537":1,"574":1,"809":1,"813":1,"1594":1,"1633":1,"1749":1,"1808":1,"1812":1,"1926":1,"2169":1,"2170":1},"3":{"0":5,"1":1,"27":1,"42":1,"74":1,"100":2,"107":1,"109":8,"110":2,"111":3,"112":1,"138":1,"139":1,"140":1,"142":1,"150":1,"157":4,"203":1,"225":1,"230":2,"235":1,"261":1,"301":1,"340":1,"341":3,"343":1,"392":1,"403":1,"423":2,"424":1,"434":1,"435":1,"451":1,"458":1,"459":4,"460":1,"461":1,"497":2,"499":1,"502":1,"536":4,"537":1,"538":1,"556":1,"574":1,"591":1,"609":1,"631":1,"633":2,"660":1,"731":1,"741":1,"757":3,"759":1,"761":1,"766":1,"789":3,"790":2,"791":3,"794":1,"802":1,"809":3,"811":1,"812":1,"813":1,"856":1,"882":1,"909":2,"921":1,"1019":1,"1021":2,"1062":1,"1116":1,"1124":1,"1140":1,"1143":1,"1150":1,"1212":2,"1217":2,"1219":1,"1222":1,"1224":1,"1225":1,"1229":13,"1237":1,"1239":1,"1247":3,"1260":1,"1263":1,"1266":1,"1270":3,"1286":4,"1300":18,"1304":2,"1309":27,"1311":43,"1312":15,"1324":14,"1328":1,"1332":1,"1337":2,"1339":19,"1341":1,"1344":7,"1349":1,"1350":43,"1353":4,"1356":1,"1358":2,"1359":66,"1365":1,"1369":4,"1380":3,"1385":3,"1389":2,"1390":1,"1395":38,"1396":28,"1398":2,"1401":1,"1402":49,"1415":4,"1416":1,"1417":9,"1436":17,"1438":5,"1449":1,"1453":1,"1455":5,"1465":1,"1467":5,"1474":4,"1475":1,"1478":1,"1496":2,"1526":3,"1531":1,"1535":1,"1546":1,"1577":5,"1586":1,"1591":1,"1594":1,"1600":1,"1611":1,"1630":7,"1631":6,"1632":4,"1633":4,"1635":5,"1637":1,"1638":1,"1639":10,"1640":6,"1641":1,"1643":1,"1644":1,"1650":1,"1651":3,"1660":1,"1661":1,"1662":1,"1666":1,"1669":1,"1683":3,"1684":1,"1685":1,"1686":13,"1687":1,"1697":1,"1701":1,"1702":1,"1710":1,"1716":1,"1727":10,"1728":3,"1729":2,"1742":1,"1748":3,"1749":10,"1750":4,"1753":1,"1754":2,"1760":1,"1764":5,"1765":14,"1768":3,"1770":1,"1776":1,"1805":5,"1806":2,"1808":1,"1810":1,"1812":1,"1814":2,"1815":1,"1831":1,"1873":1,"1874":2,"1876":1,"1877":1,"1908":2,"1909":3,"1912":1,"1923":1,"1925":2,"1926":1,"1927":8,"1930":6,"1933":4,"1940":2,"1941":1,"1957":1,"1959":1,"2019":2,"2031":1,"2068":1,"2076":1,"2087":1,"2091":1,"2129":1,"2139":1,"2160":1,"2165":2,"2168":4,"2169":3,"2170":2,"2171":3,"2234":3}}],["staywithinthelinecap",{"3":{"1436":3}}],["stayed",{"3":{"148":1,"265":1,"592":1,"766":1,"832":1,"871":1,"1300":1,"1311":1,"1339":2,"1369":1,"1387":1,"1436":1,"1449":1,"1474":1,"1476":1,"1491":1,"2158":1}}],["staying",{"3":{"131":1,"212":1,"499":1,"906":1,"909":1,"1020":1,"1128":1,"1237":1,"1247":1,"1271":1,"1286":2,"1297":1,"1300":2,"1311":3,"1312":1,"1324":1,"1339":1,"1359":1,"1395":1,"1396":3,"1436":4,"1438":2,"1441":1,"1477":1,"1667":1,"1845":1,"2002":1}}],["stay",{"3":{"0":21,"27":2,"58":1,"62":1,"68":1,"72":1,"78":1,"91":1,"93":1,"96":1,"100":3,"111":1,"117":1,"122":1,"128":1,"138":1,"140":1,"141":1,"142":2,"149":1,"150":1,"186":2,"197":1,"201":1,"209":1,"219":1,"224":1,"265":2,"273":1,"274":1,"286":1,"351":1,"358":1,"362":1,"363":1,"369":1,"395":1,"398":1,"399":1,"401":1,"407":1,"412":1,"413":2,"442":1,"448":1,"460":2,"468":1,"482":2,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"498":2,"500":1,"509":1,"511":1,"518":1,"524":1,"528":1,"544":1,"547":1,"568":1,"590":1,"591":1,"609":3,"611":1,"618":1,"625":1,"649":1,"656":1,"657":1,"681":1,"683":1,"724":1,"735":1,"742":1,"785":1,"790":2,"799":1,"821":2,"827":1,"829":1,"832":1,"833":3,"838":1,"846":1,"863":1,"876":1,"877":1,"922":1,"923":1,"926":2,"939":1,"960":1,"964":2,"980":1,"996":1,"1004":1,"1018":1,"1026":1,"1036":1,"1045":1,"1049":1,"1059":4,"1074":1,"1075":2,"1091":1,"1096":1,"1109":1,"1123":1,"1141":1,"1168":1,"1175":1,"1177":1,"1184":1,"1201":2,"1210":1,"1212":5,"1217":1,"1220":1,"1229":4,"1233":1,"1235":1,"1237":8,"1239":2,"1241":1,"1247":2,"1252":1,"1257":1,"1259":5,"1267":1,"1269":1,"1270":10,"1271":2,"1280":1,"1281":1,"1286":24,"1291":1,"1295":1,"1300":13,"1301":4,"1309":6,"1310":1,"1311":12,"1317":1,"1322":1,"1323":8,"1324":24,"1338":1,"1339":9,"1347":1,"1350":6,"1353":1,"1355":1,"1359":47,"1362":1,"1369":4,"1377":1,"1380":9,"1393":1,"1395":16,"1396":23,"1401":1,"1402":4,"1409":1,"1415":5,"1416":8,"1417":8,"1423":1,"1424":1,"1433":1,"1435":1,"1436":69,"1438":5,"1442":1,"1447":1,"1455":1,"1456":1,"1467":2,"1474":1,"1476":1,"1489":4,"1490":1,"1492":2,"1496":1,"1508":1,"1509":1,"1515":1,"1526":3,"1527":1,"1534":1,"1536":1,"1560":1,"1569":1,"1572":1,"1577":2,"1582":1,"1583":1,"1591":2,"1592":1,"1599":1,"1627":1,"1654":1,"1656":1,"1663":1,"1665":2,"1668":1,"1672":1,"1677":1,"1686":1,"1693":1,"1703":1,"1722":1,"1758":1,"1765":1,"1805":1,"1810":1,"1815":2,"1842":1,"1843":1,"1886":1,"1891":1,"1898":2,"1916":1,"1920":1,"1933":1,"1967":1,"1977":1,"1992":1,"2001":1,"2002":1,"2011":1,"2029":1,"2043":1,"2044":2,"2048":1,"2059":1,"2085":3,"2096":1,"2106":1,"2122":1,"2133":1,"2137":1,"2141":1,"2143":1,"2152":2,"2158":1,"2160":1,"2161":2,"2162":1,"2169":1,"2171":1,"2181":1,"2234":3}}],["staysinsidetheenginestrategies",{"3":{"1436":2}}],["stays",{"0":{"2027":1},"1":{"2118":1,"2119":1,"2120":1,"2121":1,"2122":1,"2123":1,"2124":1,"2125":1},"3":{"0":26,"15":1,"20":1,"31":2,"38":1,"39":2,"54":2,"59":3,"62":1,"72":1,"91":1,"92":2,"96":1,"100":1,"109":1,"124":1,"134":1,"135":1,"139":1,"140":1,"141":1,"152":1,"158":1,"173":1,"178":2,"182":1,"184":1,"188":1,"193":1,"195":2,"201":1,"207":1,"219":1,"225":1,"229":1,"230":1,"233":1,"235":3,"237":1,"244":1,"250":1,"258":1,"260":2,"265":2,"295":1,"312":1,"313":1,"314":1,"317":1,"324":1,"342":3,"345":1,"350":1,"357":1,"359":3,"361":1,"362":1,"365":1,"380":1,"384":1,"392":1,"396":1,"398":1,"402":1,"404":1,"408":1,"413":2,"414":1,"425":1,"434":1,"448":1,"449":1,"451":1,"458":2,"460":1,"486":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"499":1,"501":1,"508":1,"528":1,"530":1,"538":1,"539":3,"545":1,"547":1,"549":1,"556":1,"591":1,"592":1,"607":1,"609":1,"617":1,"627":1,"633":1,"640":2,"644":1,"657":1,"668":1,"682":1,"683":1,"684":1,"692":1,"698":1,"711":1,"719":1,"725":1,"733":1,"741":1,"749":1,"751":1,"758":1,"774":1,"790":1,"793":1,"797":1,"799":1,"803":1,"810":1,"827":3,"830":1,"834":1,"836":1,"837":1,"838":1,"849":1,"853":1,"857":1,"863":1,"870":1,"873":1,"876":1,"897":1,"905":1,"914":6,"917":1,"926":2,"929":1,"946":1,"950":1,"954":1,"957":1,"964":2,"966":1,"973":1,"990":1,"1013":1,"1018":2,"1026":1,"1034":2,"1037":1,"1048":2,"1050":1,"1059":1,"1060":1,"1075":1,"1093":3,"1094":3,"1096":1,"1100":1,"1116":1,"1133":1,"1137":1,"1149":1,"1151":3,"1163":1,"1175":1,"1182":1,"1184":1,"1185":1,"1186":1,"1187":2,"1188":1,"1193":1,"1212":10,"1215":1,"1220":1,"1229":2,"1231":1,"1234":1,"1237":9,"1239":1,"1240":1,"1243":1,"1247":8,"1252":1,"1254":1,"1256":1,"1259":12,"1263":1,"1264":1,"1265":1,"1266":1,"1270":10,"1271":3,"1274":1,"1275":2,"1276":3,"1281":1,"1286":39,"1288":1,"1289":1,"1293":2,"1300":24,"1301":7,"1304":2,"1306":1,"1309":12,"1310":2,"1311":23,"1312":2,"1316":1,"1323":26,"1324":50,"1328":1,"1329":1,"1332":1,"1333":2,"1338":1,"1339":26,"1350":13,"1352":1,"1353":1,"1355":1,"1358":1,"1359":70,"1360":1,"1366":1,"1368":1,"1369":11,"1379":1,"1380":13,"1385":1,"1391":1,"1395":41,"1396":51,"1399":1,"1402":20,"1406":2,"1407":1,"1408":2,"1409":1,"1410":3,"1415":31,"1416":13,"1417":28,"1420":1,"1423":1,"1427":4,"1431":2,"1433":1,"1434":1,"1436":84,"1438":6,"1441":1,"1443":2,"1447":6,"1454":2,"1455":3,"1456":1,"1458":1,"1460":1,"1467":10,"1474":1,"1486":2,"1489":3,"1490":2,"1492":1,"1496":10,"1534":2,"1568":1,"1571":1,"1577":5,"1585":5,"1586":1,"1592":1,"1599":2,"1627":2,"1629":1,"1630":1,"1631":1,"1641":4,"1651":1,"1653":1,"1660":1,"1661":2,"1662":1,"1667":1,"1668":1,"1669":1,"1677":1,"1684":2,"1685":2,"1686":2,"1721":1,"1727":3,"1729":1,"1764":1,"1765":1,"1767":1,"1770":1,"1781":1,"1785":1,"1792":1,"1799":1,"1805":2,"1806":1,"1810":2,"1815":1,"1818":1,"1823":2,"1825":1,"1830":1,"1837":1,"1838":1,"1842":1,"1845":1,"1851":1,"1858":3,"1859":1,"1865":1,"1871":1,"1874":1,"1876":1,"1881":1,"1891":1,"1896":1,"1902":2,"1908":1,"1915":1,"1920":1,"1929":1,"1933":1,"1934":1,"1940":1,"1946":1,"1959":1,"1963":1,"1967":1,"1968":1,"1971":1,"1972":1,"1978":1,"1979":1,"1982":1,"1984":1,"1985":3,"1988":1,"2001":3,"2002":1,"2003":1,"2007":1,"2016":1,"2021":1,"2026":1,"2029":1,"2032":1,"2035":1,"2045":1,"2049":1,"2056":3,"2062":2,"2064":1,"2065":2,"2068":1,"2091":1,"2098":1,"2101":1,"2106":1,"2109":2,"2114":1,"2118":1,"2122":1,"2124":2,"2129":1,"2133":1,"2134":1,"2144":1,"2147":1,"2153":1,"2157":1,"2158":1,"2167":1,"2170":2,"2177":1,"2201":2,"2204":1,"2212":1,"2227":1,"2234":3}}],["mcp",{"3":{"2241":2}}],["mcpd",{"3":{"2226":1}}],["mcts",{"3":{"2226":1}}],["mct001",{"3":{"1417":2}}],["mcsa",{"3":{"2226":2}}],["mcr",{"3":{"640":1,"868":2,"1339":1,"1441":1,"1445":2,"1465":1}}],["mvp",{"3":{"1395":3}}],["mvc",{"2":{"300":1,"2133":1,"2139":1},"3":{"0":4,"157":1,"299":1,"300":1,"301":1,"448":1,"583":1,"657":1,"725":1,"726":1,"827":1,"962":1,"1049":1,"1050":3,"1051":2,"1052":1,"1213":2,"1235":2,"1237":5,"1300":7,"1308":1,"1309":10,"1311":40,"1323":1,"1379":1,"1380":2,"1396":7,"1402":2,"1415":3,"1436":13,"1438":1,"1447":1,"1666":1,"1810":3,"2133":4,"2139":2,"2222":1,"2226":1}}],["m119",{"3":{"1496":1}}],["m135",{"3":{"1496":1}}],["m136",{"3":{"1496":1}}],["m137",{"3":{"1496":1}}],["m139",{"3":{"1350":2,"1496":1}}],["m140",{"3":{"1496":1}}],["m148",{"3":{"1415":1,"1496":1}}],["m146",{"3":{"1398":1,"1496":1}}],["m143",{"3":{"1350":1,"1496":1}}],["m162",{"3":{"1395":1}}],["m161",{"3":{"1350":1,"1496":1}}],["m8",{"3":{"1323":1}}],["mgmt",{"3":{"1192":1}}],["m48",{"3":{"1438":1}}],["m4",{"3":{"1012":2,"1014":2,"1089":1,"1090":1,"1094":1,"1095":1,"1526":5,"1531":9,"1534":1,"1577":2,"1582":1,"1588":1,"1591":4,"1592":1,"1595":11,"1600":42}}],["m3",{"3":{"1012":2,"1014":1,"1526":2,"1531":5,"1577":2,"1589":2,"1591":1,"1592":1,"1595":4,"1596":1,"1600":11}}],["m2",{"3":{"1012":1,"1090":1}}],["mm",{"3":{"305":1,"1018":1,"1300":2,"1350":2,"1359":1,"1369":2,"1416":2,"1436":6,"1492":1,"1609":1,"1710":1,"1743":1,"2140":1}}],["mmcacommondomain",{"3":{"1436":2}}],["mmcaclientconfigbootstraptests",{"3":{"1199":1,"1207":3,"1324":2}}],["mmcaclientconfigbootstrap",{"3":{"1184":1,"1199":3,"1203":1,"1207":2,"1324":5,"1416":1,"1496":1}}],["mmcaculturebootstrap",{"2":{"265":1,"1526":1,"1653":1,"2085":1,"2088":1},"3":{"265":2,"1199":1,"1203":1,"1207":2,"1311":3,"1324":17,"1416":1,"1417":1,"1496":1,"1526":1,"1653":1,"2085":2,"2088":1}}],["mmcastore",{"2":{"764":1,"1471":1},"3":{"764":1,"766":2,"1471":1,"1591":1,"1600":2}}],["mmca0002",{"2":{"576":1},"3":{"576":1,"1489":1}}],["mmca0001",{"2":{"576":1},"3":{"576":1,"1489":1}}],["mmcalayerenforcement",{"2":{"576":1}}],["mmcaadcuiweb",{"3":{"1456":1,"1490":1}}],["mmcaadc",{"3":{"1456":2,"1490":1}}],["mmcaauthhandoff",{"3":{"1324":3}}],["mmcaauthcookie",{"3":{"1324":6}}],["mmcaauthsession",{"2":{"507":1},"3":{"507":1,"1324":2}}],["mmcaapplicationpipelinebuilder",{"2":{"1262":1,"1313":1,"1316":1,"1662":1},"3":{"122":1,"1199":1,"1203":1,"1207":2,"1262":1,"1313":1,"1316":3,"1323":7,"1662":1}}],["mmcaopenapidesigntime",{"2":{"452":1},"3":{"452":1,"1311":1}}],["mmcagatewaysection",{"3":{"1326":1,"1339":1,"1444":1}}],["mmcagatewaytests",{"3":{"180":1,"827":1,"833":1}}],["mmcagateway",{"2":{"836":1,"841":1},"3":{"0":2,"827":1,"833":1,"836":1,"838":3,"841":1,"1338":2,"1339":12,"1436":1,"1438":2,"1447":4,"1656":1}}],["mmcagatewayhardeningtestsbasetests",{"3":{"1199":1,"1207":4,"1436":1,"1438":1,"1487":1}}],["mmcagatewayhardeningtestsbase",{"2":{"572":1,"578":1,"2056":1},"3":{"0":1,"572":8,"578":3,"1199":4,"1207":2,"1436":5,"1438":2,"1488":4,"1493":1,"1496":1,"2056":1}}],["mmcagenerateopenapidocument",{"2":{"451":1,"452":1,"1455":1},"3":{"0":1,"451":1,"452":1,"1311":1,"1455":1}}],["mmcathemeprovidersprerendertests",{"3":{"1199":1,"1207":2,"1324":1}}],["mmcathemeproviderstests",{"3":{"1199":2,"1207":2,"1324":1}}],["mmcathemeproviders",{"2":{"273":1,"275":1,"276":1,"2077":1},"3":{"0":2,"273":5,"275":1,"276":2,"1324":9,"1433":1,"1436":2,"1526":3,"2077":2,"2085":2}}],["mmcatheme",{"2":{"272":1,"273":1,"621":1,"2077":2,"2082":1,"2088":1},"3":{"0":2,"272":2,"273":2,"618":1,"621":1,"622":1,"1199":3,"1203":1,"1207":2,"1324":13,"1436":1,"1496":1,"1526":3,"1577":2,"1586":1,"2077":4,"2082":1,"2085":3,"2088":1}}],["mmca",{"0":{"95":1,"465":1,"1441":1,"1442":1,"1443":1,"1444":1,"1453":1,"1454":1,"1455":1,"1456":1,"1457":1,"1458":1,"1602":1,"1603":1,"1604":1,"1679":1,"1727":1,"1728":1,"1730":2,"1790":1,"1793":1,"1799":1,"1802":1,"1805":1,"1807":1,"1810":1,"1812":1,"1815":1,"1817":1,"1827":1,"1834":1,"1838":1,"1846":1,"1849":1,"1853":1,"1862":1,"1865":1,"1868":1,"1871":1,"1877":1,"1886":1,"1889":1,"1892":1,"1895":1,"1899":1,"1902":1,"1905":1,"1912":1,"1924":1,"1927":1,"1930":1,"1941":1,"1944":1,"1950":1,"1959":1,"1962":1,"1965":1,"1968":1,"1972":1,"1975":1,"1979":1,"1982":1,"1985":1,"1988":1,"1992":1,"1995":1,"1996":1,"1998":1,"2001":1,"2003":1,"2015":1,"2023":1,"2029":1,"2039":1,"2050":1,"2061":1,"2064":1,"2071":1,"2082":1,"2085":1,"2088":1,"2110":1,"2119":1,"2125":1,"2128":1,"2130":1,"2133":1,"2135":1,"2138":1,"2141":1,"2144":1,"2148":1,"2151":1,"2155":1,"2158":1,"2162":1,"2165":1,"2171":1,"2174":1,"2182":1,"2186":1,"2195":1,"2198":1,"2205":1,"2216":1,"2223":1,"2229":1},"1":{"936":1,"937":1,"938":1,"939":1,"940":1,"941":1,"942":1,"1088":1,"1089":1,"1090":1,"1091":1,"1092":1,"1093":1,"1094":1,"1095":1,"1096":1,"1190":2,"1191":2,"1192":2,"1193":2,"1194":2,"1195":2,"1502":1,"1503":1,"1504":1,"1505":1,"1506":1,"1507":1,"1508":1,"1509":1,"1510":1,"1511":1,"1512":1,"1513":1,"1514":1,"1515":1,"1516":1,"1517":1,"1522":1,"1523":1,"1524":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1531":1,"1532":1,"1533":1,"1534":1,"1535":1,"1573":1,"1574":1,"1575":1,"1576":1,"1577":1,"1578":1,"1579":1,"1580":1,"1581":1,"1582":1,"1583":1,"1584":1,"1585":1,"1586":1,"1587":1,"1588":1,"1589":1,"1590":1,"1591":1,"1592":1,"1593":1,"1594":1,"1595":1,"1596":1,"1597":1,"1598":1,"1599":1,"1600":1,"1646":1,"1647":1,"1648":1,"1649":1,"1650":1,"1651":1,"1652":1,"1653":1,"1654":1,"1655":1,"1656":1,"1657":1,"1658":1,"1659":1,"1660":1,"1661":1,"1662":1,"1663":1,"1664":1,"1665":1,"1666":1,"1667":1,"1668":1,"1669":1,"1670":1,"1671":1,"1672":1,"1673":1,"1674":1,"1675":1,"1681":1,"1682":1,"1683":1,"1684":1,"1685":1,"1686":1,"1687":1,"1688":1,"1689":1,"1690":1,"1691":1,"1692":1,"1693":1,"1694":1,"1695":1,"1696":1,"1697":1,"1698":1,"1699":1,"1700":1,"1701":1,"1702":1,"1703":1,"1704":1,"1705":1,"1717":1,"1718":1,"1719":1,"1720":1,"1721":1,"1722":1,"1723":1,"1724":1,"1725":1,"1726":1,"1727":1,"1728":1,"1729":1,"1730":1,"1731":1,"1745":1,"1746":1,"1747":1,"1748":1,"1749":1,"1750":1,"1751":1,"1752":1,"1753":1,"1754":1,"1755":1,"1762":1,"1763":1,"1764":1,"1765":1,"1766":1,"1767":1,"1768":1,"1769":1,"1770":1,"1771":1,"1772":1,"1773":1,"1774":1,"1775":1,"1776":1,"1777":1,"1778":1,"1779":1,"2156":1,"2157":1,"2158":1,"2159":1,"2160":1,"2161":1,"2162":1,"2206":1,"2207":1,"2208":1,"2209":1,"2210":1,"2211":1,"2212":1,"2213":1,"2228":1,"2229":1,"2230":1,"2231":1,"2232":1,"2233":1,"2234":1,"2235":1,"2236":1,"2237":1},"2":{"24":1,"39":3,"53":1,"58":1,"59":2,"61":2,"62":3,"67":1,"68":1,"70":1,"78":1,"80":3,"85":1,"95":1,"99":1,"100":1,"107":2,"109":1,"111":1,"117":1,"124":1,"126":1,"130":1,"132":2,"135":2,"137":1,"138":1,"139":3,"140":1,"141":6,"142":6,"145":2,"147":1,"150":1,"152":2,"160":1,"180":1,"186":1,"190":1,"207":4,"214":2,"216":1,"225":2,"229":1,"241":2,"247":1,"250":1,"252":1,"255":2,"258":1,"259":2,"261":1,"265":1,"273":1,"281":2,"310":1,"359":2,"370":1,"373":1,"388":1,"395":6,"400":7,"401":2,"404":2,"406":1,"408":1,"412":1,"436":1,"460":1,"481":1,"482":3,"486":3,"487":3,"488":3,"489":3,"490":3,"491":3,"492":3,"493":6,"494":3,"495":3,"509":6,"511":3,"514":1,"526":2,"527":2,"528":3,"529":1,"530":1,"558":1,"564":2,"572":2,"576":1,"577":1,"578":2,"591":1,"599":1,"617":1,"618":1,"632":1,"633":1,"634":3,"635":1,"636":1,"638":3,"648":1,"649":1,"667":1,"681":1,"683":1,"684":1,"686":2,"731":1,"733":1,"780":1,"789":1,"821":1,"822":3,"823":3,"825":2,"826":3,"832":1,"836":1,"838":1,"840":1,"861":1,"880":1,"897":2,"899":1,"906":1,"912":1,"913":1,"914":2,"917":1,"936":1,"938":2,"939":7,"941":2,"942":1,"953":1,"954":1,"957":1,"963":1,"966":1,"982":1,"984":1,"1004":2,"1012":1,"1016":1,"1036":3,"1037":1,"1044":1,"1051":1,"1057":1,"1058":1,"1062":1,"1066":1,"1067":2,"1068":3,"1069":3,"1074":1,"1089":4,"1090":1,"1091":1,"1093":1,"1124":2,"1161":2,"1191":2,"1192":1,"1194":2,"1195":1,"1200":2,"1201":2,"1203":4,"1207":10,"1211":1,"1213":5,"1214":1,"1215":4,"1217":1,"1222":1,"1229":3,"1230":2,"1236":1,"1237":3,"1247":3,"1256":1,"1259":6,"1264":1,"1268":1,"1270":6,"1271":2,"1275":1,"1286":5,"1287":2,"1300":2,"1301":3,"1309":4,"1310":2,"1317":1,"1321":1,"1323":5,"1324":1,"1325":6,"1326":1,"1327":1,"1328":2,"1329":1,"1330":1,"1333":1,"1336":1,"1337":1,"1339":1,"1340":1,"1341":3,"1350":6,"1351":1,"1359":5,"1363":1,"1366":1,"1369":2,"1370":3,"1378":1,"1379":2,"1380":7,"1381":1,"1386":1,"1395":6,"1396":11,"1402":6,"1404":6,"1414":1,"1415":4,"1416":3,"1417":9,"1418":4,"1422":2,"1425":4,"1426":3,"1427":1,"1428":1,"1430":3,"1434":3,"1435":1,"1436":2,"1437":12,"1438":3,"1439":1,"1442":2,"1445":8,"1449":1,"1451":1,"1452":1,"1453":3,"1454":2,"1455":2,"1456":1,"1459":1,"1460":1,"1471":2,"1476":1,"1486":10,"1487":9,"1488":1,"1490":6,"1492":3,"1494":1,"1496":4,"1497":2,"1500":1,"1503":10,"1509":2,"1512":1,"1513":2,"1523":1,"1524":1,"1525":1,"1526":2,"1527":2,"1531":2,"1534":1,"1535":1,"1576":1,"1577":1,"1578":1,"1585":3,"1591":1,"1599":1,"1602":1,"1605":1,"1611":2,"1615":4,"1619":2,"1639":1,"1642":1,"1643":2,"1648":1,"1649":1,"1650":5,"1653":2,"1654":1,"1656":2,"1660":12,"1661":2,"1675":1,"1677":1,"1681":1,"1682":1,"1684":1,"1687":1,"1690":1,"1693":2,"1702":4,"1711":1,"1726":1,"1730":1,"1732":1,"1739":1,"1741":1,"1761":2,"1775":2,"1781":1,"1782":2,"1787":1,"1790":1,"1793":1,"1805":1,"1807":1,"1810":1,"1812":1,"1815":1,"1817":1,"1827":1,"1828":1,"1829":1,"1834":1,"1843":1,"1846":1,"1853":1,"1862":1,"1865":1,"1868":1,"1877":1,"1886":1,"1892":1,"1895":1,"1896":1,"1899":1,"1902":2,"1905":1,"1912":1,"1919":1,"1922":1,"1924":1,"1930":1,"1935":1,"1941":1,"1950":1,"1953":1,"1959":1,"1962":1,"1965":1,"1972":1,"1975":2,"1979":1,"1985":1,"1992":1,"1998":1,"2003":1,"2005":3,"2007":9,"2009":1,"2011":1,"2014":8,"2015":3,"2017":1,"2023":1,"2025":1,"2029":2,"2031":1,"2039":1,"2043":1,"2045":1,"2047":1,"2050":1,"2056":2,"2057":1,"2058":1,"2060":2,"2061":1,"2064":1,"2072":1,"2073":2,"2079":1,"2082":1,"2088":1,"2102":2,"2103":1,"2110":1,"2113":1,"2117":1,"2118":1,"2122":3,"2125":1,"2130":1,"2135":1,"2141":1,"2144":1,"2148":1,"2151":1,"2153":1,"2154":1,"2155":1,"2158":1,"2159":3,"2162":9,"2171":1,"2174":3,"2178":4,"2179":4,"2180":1,"2182":2,"2193":1,"2195":2,"2204":1,"2205":1,"2213":1},"3":{"0":139,"5":1,"11":1,"15":4,"17":4,"18":1,"19":3,"22":2,"23":1,"24":11,"25":8,"26":19,"27":24,"31":5,"34":2,"39":9,"42":4,"43":4,"46":1,"53":3,"54":2,"58":1,"59":17,"60":2,"61":4,"62":11,"63":7,"66":1,"67":1,"68":8,"70":5,"71":4,"72":14,"73":5,"74":14,"76":2,"78":1,"79":2,"80":14,"81":9,"82":4,"85":2,"93":8,"94":6,"95":17,"96":11,"97":2,"98":10,"99":3,"100":5,"103":6,"104":2,"107":2,"109":46,"111":6,"117":14,"121":15,"122":5,"123":8,"124":1,"125":10,"126":7,"127":4,"128":17,"130":6,"132":2,"135":26,"136":6,"137":5,"138":5,"139":6,"140":3,"141":7,"142":14,"145":3,"146":3,"147":19,"149":6,"150":13,"151":2,"152":9,"157":5,"160":8,"161":6,"164":1,"166":10,"168":1,"170":3,"171":3,"173":1,"175":7,"178":6,"179":12,"180":19,"181":4,"184":1,"186":27,"189":10,"190":11,"193":3,"195":21,"196":4,"198":6,"200":4,"201":3,"202":18,"203":4,"207":5,"208":1,"214":4,"216":5,"217":6,"218":12,"219":8,"220":10,"225":9,"228":8,"229":1,"230":18,"231":8,"235":24,"237":2,"238":1,"241":2,"243":44,"245":22,"246":14,"247":1,"250":2,"251":1,"252":3,"254":1,"255":11,"256":8,"257":1,"258":8,"259":15,"260":9,"261":5,"265":22,"268":2,"272":1,"273":4,"275":1,"281":3,"283":4,"284":4,"285":6,"290":2,"291":4,"295":24,"296":2,"300":4,"301":1,"303":8,"305":14,"306":8,"310":12,"312":1,"314":4,"318":20,"324":1,"325":10,"326":2,"328":1,"330":8,"331":1,"333":10,"336":1,"337":4,"341":37,"342":2,"343":6,"344":12,"345":4,"350":11,"352":8,"353":14,"359":9,"365":2,"366":1,"368":1,"369":2,"370":5,"373":6,"374":4,"375":5,"384":14,"387":4,"388":7,"390":12,"391":14,"392":8,"395":8,"397":13,"400":16,"401":19,"402":4,"403":9,"404":7,"406":1,"407":12,"408":8,"409":8,"412":4,"413":18,"415":3,"416":2,"418":27,"419":1,"420":3,"422":4,"423":11,"424":7,"425":7,"426":19,"427":4,"428":18,"429":12,"430":7,"434":3,"436":3,"442":2,"443":4,"444":6,"446":2,"448":24,"450":3,"451":3,"452":17,"453":2,"454":1,"457":1,"459":27,"460":1,"463":15,"464":10,"465":10,"466":5,"469":6,"470":31,"472":1,"475":28,"476":34,"477":34,"478":6,"481":2,"482":6,"483":2,"484":2,"486":27,"487":16,"488":10,"489":17,"490":24,"491":22,"492":22,"493":27,"494":12,"495":15,"497":20,"498":1,"499":10,"502":5,"507":44,"509":12,"511":15,"512":2,"513":10,"514":6,"522":4,"523":6,"524":4,"526":4,"527":7,"528":7,"529":1,"530":3,"531":4,"532":1,"535":2,"536":23,"538":3,"539":7,"540":3,"543":6,"544":2,"545":57,"547":5,"549":6,"550":7,"551":7,"552":16,"556":73,"558":6,"559":2,"562":3,"563":10,"564":45,"566":11,"567":3,"570":2,"572":83,"575":6,"576":12,"577":16,"578":12,"579":1,"582":1,"583":77,"585":26,"586":12,"587":2,"589":2,"590":1,"591":20,"592":2,"593":6,"594":5,"597":1,"599":69,"600":8,"601":14,"602":3,"603":8,"604":3,"607":1,"608":1,"609":78,"611":11,"612":3,"613":7,"616":2,"617":1,"618":21,"620":1,"621":1,"624":10,"625":13,"626":75,"627":3,"628":10,"629":12,"631":4,"632":5,"633":23,"634":8,"635":8,"636":4,"638":4,"640":46,"642":12,"643":3,"644":8,"648":1,"649":43,"651":5,"652":2,"656":2,"657":28,"659":1,"664":2,"665":24,"667":1,"668":11,"669":10,"674":92,"675":6,"676":22,"677":1,"681":3,"682":6,"683":1,"684":1,"685":1,"686":2,"688":1,"689":2,"690":5,"691":2,"692":2,"693":1,"696":3,"697":3,"698":33,"700":3,"702":19,"703":13,"705":1,"706":2,"707":8,"713":1,"715":10,"718":2,"719":5,"720":8,"723":1,"724":8,"725":31,"727":7,"728":5,"731":1,"732":2,"733":16,"736":8,"739":1,"740":4,"741":10,"742":1,"743":2,"744":4,"749":38,"751":8,"756":6,"757":35,"758":3,"759":8,"760":4,"761":5,"765":5,"766":51,"768":8,"769":3,"774":41,"776":7,"780":2,"782":48,"784":4,"789":7,"790":21,"792":7,"793":12,"794":8,"798":20,"799":14,"803":6,"804":7,"805":4,"806":2,"808":1,"809":7,"810":1,"813":7,"814":2,"818":2,"819":34,"821":1,"822":8,"823":3,"825":9,"826":20,"827":58,"830":14,"831":10,"832":26,"833":32,"836":1,"837":16,"838":29,"839":6,"840":1,"841":6,"846":5,"849":5,"850":2,"853":2,"854":15,"855":2,"857":12,"860":1,"861":18,"863":3,"864":1,"865":1,"868":13,"869":31,"870":8,"872":4,"873":8,"875":4,"876":28,"877":13,"880":3,"881":43,"883":4,"884":3,"888":4,"889":2,"890":2,"891":7,"892":2,"897":23,"899":1,"900":4,"904":2,"905":22,"906":14,"907":1,"908":6,"912":1,"913":27,"914":16,"915":4,"916":1,"917":6,"921":2,"922":9,"923":1,"924":7,"926":20,"927":1,"930":1,"931":7,"932":1,"936":1,"938":2,"939":12,"941":2,"942":1,"945":1,"946":21,"950":1,"953":1,"954":59,"955":1,"956":10,"957":1,"958":9,"959":10,"960":15,"963":9,"964":18,"966":3,"971":11,"972":21,"973":1,"974":5,"975":7,"979":15,"980":21,"982":3,"983":1,"984":1,"986":2,"987":4,"988":15,"990":3,"991":2,"994":2,"995":9,"996":13,"998":3,"999":7,"1003":5,"1004":36,"1006":6,"1007":4,"1010":5,"1012":14,"1013":1,"1016":3,"1017":7,"1018":24,"1021":2,"1022":1,"1025":11,"1026":28,"1028":2,"1029":2,"1034":26,"1036":3,"1037":6,"1041":8,"1042":38,"1043":3,"1044":8,"1045":5,"1049":10,"1050":49,"1051":1,"1052":6,"1054":8,"1055":6,"1057":2,"1058":10,"1059":57,"1062":4,"1065":2,"1066":12,"1067":25,"1068":5,"1069":13,"1070":5,"1073":4,"1074":24,"1075":6,"1078":6,"1082":12,"1083":13,"1085":5,"1086":4,"1088":1,"1089":11,"1090":7,"1091":48,"1093":5,"1094":6,"1095":5,"1099":4,"1100":13,"1103":6,"1108":15,"1116":39,"1117":1,"1119":5,"1122":1,"1123":11,"1124":46,"1125":9,"1126":7,"1127":4,"1128":4,"1129":2,"1132":4,"1133":26,"1135":2,"1136":4,"1137":1,"1140":18,"1142":3,"1150":26,"1154":2,"1156":2,"1160":7,"1161":17,"1163":1,"1164":1,"1168":45,"1170":1,"1171":1,"1173":1,"1174":4,"1175":54,"1180":1,"1182":3,"1183":8,"1184":39,"1185":3,"1186":4,"1187":2,"1189":1,"1190":4,"1191":9,"1192":3,"1194":2,"1195":3,"1199":5234,"1200":3,"1201":3,"1203":2371,"1204":6,"1206":110,"1207":16206,"1208":236,"1209":138,"1211":13,"1212":40,"1213":9,"1214":11,"1215":7,"1217":1,"1219":6,"1220":2,"1222":7,"1223":4,"1224":2,"1225":8,"1226":4,"1227":6,"1228":4,"1229":129,"1230":4,"1231":12,"1232":10,"1233":14,"1234":24,"1235":4,"1236":19,"1237":376,"1238":1,"1239":26,"1240":8,"1241":12,"1242":6,"1243":10,"1244":5,"1245":2,"1246":6,"1247":348,"1249":8,"1250":1,"1251":3,"1252":4,"1253":1,"1254":4,"1255":1,"1256":3,"1257":10,"1258":5,"1259":289,"1260":1,"1261":4,"1262":21,"1263":4,"1264":25,"1265":8,"1266":5,"1267":10,"1268":4,"1269":4,"1270":558,"1271":215,"1273":10,"1274":4,"1275":5,"1276":16,"1277":8,"1278":18,"1279":18,"1280":2,"1281":7,"1282":2,"1283":4,"1284":4,"1285":14,"1286":1670,"1287":2,"1288":16,"1289":19,"1290":22,"1291":24,"1292":12,"1293":18,"1294":18,"1295":12,"1296":10,"1297":60,"1298":14,"1299":4,"1300":2345,"1301":163,"1302":14,"1303":17,"1304":20,"1305":12,"1306":16,"1307":32,"1308":16,"1309":511,"1310":140,"1311":989,"1312":164,"1313":1,"1314":6,"1315":10,"1316":24,"1317":23,"1318":19,"1319":6,"1320":57,"1321":5,"1322":29,"1323":907,"1324":1729,"1325":28,"1326":16,"1327":9,"1328":11,"1329":3,"1330":11,"1331":10,"1332":34,"1333":23,"1334":20,"1335":12,"1336":15,"1337":14,"1338":22,"1339":723,"1340":2,"1341":21,"1342":24,"1344":15,"1345":10,"1346":2,"1347":32,"1348":10,"1349":20,"1350":826,"1351":1,"1352":19,"1353":21,"1354":10,"1355":7,"1356":4,"1357":3,"1358":3,"1359":3249,"1361":4,"1362":4,"1363":6,"1364":5,"1365":2,"1366":7,"1367":3,"1368":4,"1369":215,"1370":4,"1371":14,"1372":4,"1373":8,"1374":2,"1376":2,"1377":14,"1378":17,"1379":6,"1380":489,"1381":3,"1384":2,"1386":1,"1387":2,"1389":2,"1390":4,"1395":1050,"1396":1492,"1397":3,"1398":3,"1399":2,"1400":4,"1401":5,"1402":473,"1403":4,"1404":24,"1405":3,"1406":15,"1407":3,"1408":1,"1409":3,"1410":6,"1411":1,"1412":5,"1413":8,"1414":14,"1415":950,"1416":282,"1417":897,"1418":5,"1419":4,"1420":12,"1421":2,"1422":8,"1423":10,"1424":10,"1425":11,"1426":7,"1427":194,"1428":13,"1429":10,"1430":19,"1431":45,"1432":9,"1433":23,"1434":13,"1435":23,"1436":4105,"1437":139,"1438":207,"1439":3,"1440":3,"1441":23,"1442":29,"1443":32,"1444":7,"1445":21,"1446":1,"1447":14,"1449":11,"1450":1,"1451":4,"1452":4,"1453":15,"1454":12,"1455":34,"1456":4,"1457":2,"1458":1,"1459":32,"1460":16,"1461":3,"1462":3,"1464":14,"1465":1,"1467":66,"1470":1,"1471":4,"1472":3,"1473":2,"1474":2,"1475":8,"1476":4,"1477":1,"1478":2,"1479":1,"1480":1,"1481":9,"1484":1,"1485":7,"1486":68,"1487":84,"1488":93,"1489":54,"1490":34,"1491":5,"1492":59,"1494":1,"1496":377,"1497":2,"1498":3,"1500":4,"1502":1,"1503":13,"1504":1,"1509":4,"1512":1,"1513":2,"1518":1,"1520":3,"1521":1,"1522":4,"1523":3,"1524":4,"1525":6,"1526":114,"1527":4,"1529":2,"1531":18,"1532":2,"1534":10,"1535":14,"1569":1,"1570":1,"1573":2,"1574":1,"1576":2,"1577":85,"1578":2,"1580":1,"1582":24,"1583":5,"1584":1,"1585":9,"1586":11,"1587":4,"1588":3,"1589":1,"1591":79,"1592":1,"1593":2,"1594":3,"1596":8,"1597":1,"1599":2,"1600":8,"1601":1,"1602":7,"1605":2,"1606":1,"1611":17,"1615":4,"1619":9,"1620":1,"1627":11,"1631":1,"1639":1,"1642":1,"1643":2,"1646":8,"1648":11,"1649":9,"1650":12,"1651":4,"1652":2,"1653":18,"1654":3,"1655":4,"1656":4,"1658":8,"1659":5,"1660":17,"1661":9,"1664":1,"1673":3,"1674":2,"1675":6,"1676":2,"1677":4,"1678":3,"1679":2,"1681":5,"1682":3,"1684":2,"1685":12,"1686":10,"1687":2,"1688":1,"1689":1,"1690":3,"1691":4,"1692":3,"1693":4,"1694":4,"1695":3,"1699":1,"1701":2,"1702":6,"1703":3,"1704":1,"1705":4,"1706":2,"1707":1,"1708":1,"1710":1,"1711":1,"1712":1,"1713":1,"1714":1,"1717":2,"1718":1,"1722":2,"1724":2,"1725":1,"1726":10,"1727":13,"1728":3,"1729":2,"1730":2,"1731":2,"1732":2,"1736":5,"1739":2,"1740":1,"1741":1,"1745":1,"1748":1,"1756":2,"1757":1,"1761":5,"1762":1,"1763":1,"1764":17,"1765":33,"1770":2,"1773":3,"1775":2,"1778":2,"1780":1,"1781":2,"1782":6,"1784":1,"1785":3,"1787":4,"1788":1,"1790":3,"1793":4,"1794":1,"1799":2,"1801":1,"1802":4,"1803":2,"1805":2,"1806":1,"1807":3,"1808":1,"1810":11,"1812":3,"1815":8,"1816":1,"1817":3,"1820":1,"1826":1,"1827":4,"1828":2,"1829":2,"1834":4,"1838":2,"1843":1,"1846":4,"1847":1,"1851":1,"1853":3,"1854":1,"1860":1,"1862":4,"1865":2,"1868":4,"1877":4,"1879":1,"1880":1,"1884":2,"1886":3,"1889":1,"1891":1,"1892":4,"1894":1,"1895":3,"1896":1,"1897":1,"1899":3,"1902":4,"1903":1,"1905":4,"1906":1,"1910":1,"1912":3,"1913":1,"1919":1,"1922":2,"1924":4,"1927":2,"1929":2,"1930":5,"1931":2,"1935":1,"1939":1,"1941":4,"1942":1,"1947":3,"1950":3,"1951":1,"1953":4,"1955":1,"1959":3,"1961":1,"1962":1,"1963":2,"1965":4,"1968":6,"1970":2,"1972":4,"1975":2,"1978":1,"1979":4,"1981":1,"1982":2,"1985":4,"1990":1,"1992":4,"1995":10,"1996":8,"1998":5,"2000":1,"2001":20,"2002":1,"2003":4,"2004":2,"2005":7,"2007":13,"2009":1,"2011":2,"2014":9,"2015":6,"2016":1,"2017":1,"2023":1,"2025":3,"2029":4,"2031":1,"2035":1,"2039":3,"2040":2,"2042":5,"2043":5,"2044":5,"2045":19,"2047":15,"2048":3,"2050":4,"2051":2,"2053":1,"2056":8,"2057":1,"2058":3,"2060":2,"2061":4,"2062":1,"2063":1,"2064":1,"2065":3,"2066":1,"2068":6,"2069":1,"2071":2,"2072":1,"2073":2,"2077":2,"2079":2,"2082":3,"2083":1,"2085":17,"2087":11,"2088":4,"2089":1,"2091":1,"2099":2,"2100":5,"2101":1,"2102":3,"2103":8,"2107":1,"2108":1,"2109":1,"2110":5,"2111":1,"2112":2,"2113":6,"2114":2,"2115":1,"2116":2,"2117":4,"2118":1,"2119":1,"2121":2,"2122":5,"2124":3,"2125":6,"2126":1,"2129":5,"2130":3,"2133":12,"2134":4,"2135":4,"2136":2,"2138":1,"2139":1,"2140":1,"2141":3,"2142":1,"2144":1,"2148":4,"2151":3,"2152":7,"2153":1,"2154":1,"2155":7,"2156":2,"2158":17,"2159":5,"2160":16,"2161":2,"2162":13,"2163":1,"2165":1,"2166":1,"2168":1,"2169":1,"2170":3,"2171":6,"2173":1,"2174":7,"2178":4,"2179":4,"2180":3,"2181":7,"2182":6,"2184":1,"2191":1,"2192":1,"2193":1,"2194":2,"2195":5,"2197":1,"2204":3,"2205":5,"2206":4,"2211":1,"2212":1,"2213":3,"2223":1,"2228":2,"2229":23,"2230":3,"2231":1,"2233":3,"2234":12,"2236":5,"2238":1,"2242":1,"2244":1,"2246":2,"2247":1}}],["mx",{"3":{"265":1,"1311":1,"1417":1,"1438":1}}],["mtp",{"0":{"2059":1},"3":{"1192":1,"1213":2,"1215":2,"1456":1,"1486":6,"1493":1,"1494":1,"1611":1,"1654":1,"1685":1,"1686":1,"2059":4,"2061":1}}],["mt",{"2":{"146":1,"147":1},"3":{"146":1,"147":1,"150":1,"1436":1,"1491":1}}],["mfa",{"2":{"909":1,"1063":1,"2199":1,"2205":1},"3":{"0":1,"126":1,"905":1,"909":1,"1059":1,"1063":1,"1270":5,"1289":2,"1293":1,"1300":18,"1437":2,"1982":1,"2098":1,"2199":4,"2205":1}}],["m",{"2":{"2079":1},"3":{"0":1,"69":1,"137":1,"138":1,"649":2,"758":1,"980":2,"1259":2,"1270":1,"1324":6,"1436":2,"1524":2,"1526":2,"1529":1,"1530":1,"1531":8,"1532":4,"1534":1,"1535":1,"1577":1,"1581":5,"1585":4,"1586":1,"1591":1,"1595":1,"1596":3,"1600":1,"1727":1,"1730":1,"2079":2,"2222":1}}],["myprofile",{"3":{"1415":1}}],["mypointstests",{"3":{"1199":1,"1207":2,"1396":2,"1438":2}}],["mypoints",{"3":{"1199":3,"1203":1,"1207":2,"1396":26}}],["mypointsdto",{"3":{"1199":7,"1203":1,"1207":2,"1396":12}}],["mypointspage",{"3":{"1199":3,"1207":2}}],["myvotebypoll",{"3":{"1402":1}}],["myvoteoptionid",{"3":{"1396":1,"1399":1,"1402":9}}],["mymoderatedquestions",{"3":{"1402":1}}],["myupvote",{"3":{"1401":1,"1402":9}}],["mysql",{"3":{"2221":1,"2222":1}}],["mysteriously",{"3":{"2128":1}}],["mystery",{"3":{"1315":1}}],["myself",{"0":{"2063":1},"3":{"1436":2}}],["myscheduleroute",{"3":{"1416":2}}],["myschedulesessionids",{"3":{"1395":4}}],["myschedule",{"3":{"1395":1}}],["myapp",{"3":{"1311":1}}],["myrolenames",{"3":{"1300":1}}],["myordersquery",{"3":{"1199":2,"1207":1}}],["mybadgetests",{"3":{"1199":1,"1207":2,"1396":1,"1438":2}}],["mybadge",{"3":{"1199":2,"1203":1,"1207":2,"1324":1,"1396":23,"1438":1}}],["mybadgedto",{"3":{"1199":7,"1203":1,"1207":2,"1396":14}}],["mybadgepage",{"3":{"1199":3,"1207":2}}],["my",{"3":{"0":1,"317":1,"649":1,"690":3,"694":1,"905":1,"907":1,"1194":1,"1247":1,"1267":2,"1290":1,"1300":2,"1309":3,"1311":4,"1324":2,"1359":3,"1385":1,"1391":3,"1395":21,"1396":24,"1402":3,"1414":1,"1415":4,"1416":2,"1417":1,"1436":2,"1438":1,"1441":1,"1487":1,"1608":1,"1627":3,"1631":2,"1667":2,"1728":1,"1750":3,"1759":1,"1768":1,"1773":3,"1784":1,"1794":1,"1801":1,"1880":1,"1920":2,"2004":1,"2215":1,"2218":1,"2240":1,"2244":1,"2246":1}}],["msg",{"3":{"1455":1}}],["mssqllocaldb",{"3":{"1490":1}}],["mssql",{"3":{"1213":1,"1339":1,"1436":1,"1441":1,"1614":1,"1616":1,"1617":1,"1618":1,"1775":1}}],["ms",{"3":{"0":3,"556":1,"861":7,"862":1,"881":2,"1212":1,"1237":1,"1270":1,"1271":1,"1300":1,"1309":1,"1323":2,"1324":2,"1347":1,"1395":1,"1417":1,"1429":1,"1433":6,"1436":22,"1453":1,"1474":1,"1488":3,"1492":2,"1577":1,"1707":4}}],["msbuild",{"3":{"0":2,"133":1,"135":1,"138":1,"147":1,"266":1,"570":1,"869":1,"1196":1,"1416":1,"1431":2,"1436":2,"1455":1,"1459":2,"1489":1,"1491":1,"1504":1,"1577":2,"1591":1,"1650":1,"1671":1,"1782":1,"2042":2,"2049":1,"2050":1,"2102":2,"2108":2,"2110":1,"2232":1}}],["mp",{"3":{"0":1,"1324":2}}],["mb",{"3":{"0":3,"440":1,"442":1,"875":3,"1116":1,"1117":1,"1118":1,"1212":1,"1323":4,"1347":1,"1350":1,"1373":1,"1380":2,"1389":3,"1395":2,"1411":1,"1414":1,"1415":5,"1417":1,"1443":2,"1447":4,"1451":2,"1456":2,"1465":1,"1467":8,"1478":1,"1490":1,"1631":2,"1640":2,"1748":2,"1765":2,"2128":3,"2130":1,"2168":1}}],["muscle",{"3":{"1144":1}}],["mustcascadesoftdelete",{"3":{"1436":2}}],["mustquote",{"3":{"1311":2}}],["mustnotexceed",{"2":{"1074":1,"1489":2,"1491":1},"3":{"1074":1,"1436":4,"1489":2,"1491":1}}],["must",{"0":{"1291":1,"2191":1},"3":{"0":21,"4":1,"16":1,"17":1,"18":2,"19":1,"24":3,"25":1,"30":1,"37":1,"38":1,"39":1,"41":1,"42":1,"55":1,"62":2,"68":2,"70":1,"92":2,"95":1,"97":2,"98":3,"100":3,"102":2,"108":1,"109":1,"111":2,"117":1,"119":1,"120":1,"126":1,"134":1,"135":1,"149":1,"157":1,"160":1,"168":2,"176":1,"177":3,"178":1,"188":1,"194":1,"195":2,"196":1,"197":1,"198":1,"199":1,"201":1,"209":1,"213":2,"216":1,"217":1,"219":1,"224":1,"235":1,"243":1,"253":1,"255":1,"265":1,"272":1,"279":1,"280":1,"290":1,"302":3,"309":1,"317":2,"318":1,"320":1,"332":1,"333":1,"336":1,"343":1,"348":1,"349":1,"352":1,"358":2,"359":1,"361":2,"362":1,"363":1,"366":1,"380":1,"382":1,"388":1,"390":3,"401":1,"407":1,"412":1,"415":1,"419":1,"424":1,"428":1,"433":1,"434":1,"435":1,"441":1,"448":1,"450":1,"459":1,"465":1,"482":1,"490":1,"498":2,"501":1,"506":2,"509":1,"511":1,"517":3,"518":2,"520":1,"521":1,"527":1,"536":1,"538":2,"541":1,"544":1,"545":1,"549":3,"556":1,"564":1,"572":1,"583":1,"587":1,"590":2,"591":2,"601":1,"626":1,"632":2,"633":1,"645":1,"657":1,"659":1,"667":2,"674":1,"676":1,"681":1,"683":1,"690":1,"698":1,"707":3,"709":3,"716":1,"718":1,"724":1,"757":3,"759":1,"761":1,"762":2,"766":1,"769":1,"774":1,"775":1,"783":2,"790":1,"792":1,"799":1,"809":2,"813":1,"820":1,"821":1,"823":1,"827":2,"829":1,"832":1,"838":1,"840":1,"846":2,"855":1,"856":1,"861":1,"889":1,"897":2,"898":1,"905":1,"914":1,"916":1,"922":2,"926":2,"932":1,"946":1,"948":1,"964":1,"972":2,"976":1,"987":1,"989":1,"990":1,"996":1,"997":1,"1014":1,"1017":1,"1018":2,"1019":1,"1026":1,"1036":1,"1041":2,"1042":1,"1043":1,"1044":1,"1066":1,"1067":1,"1068":1,"1074":1,"1079":1,"1083":2,"1091":4,"1099":2,"1100":3,"1102":2,"1104":1,"1116":4,"1117":1,"1124":1,"1126":1,"1133":1,"1135":1,"1145":1,"1155":1,"1168":3,"1170":1,"1175":1,"1184":1,"1185":2,"1186":4,"1187":1,"1188":1,"1191":1,"1200":1,"1211":1,"1212":5,"1213":1,"1214":2,"1215":1,"1219":1,"1222":1,"1223":1,"1225":1,"1228":1,"1229":7,"1231":3,"1233":2,"1236":2,"1237":17,"1238":2,"1239":1,"1243":1,"1247":24,"1252":1,"1254":1,"1255":1,"1259":26,"1262":2,"1263":2,"1264":6,"1265":3,"1269":4,"1270":38,"1271":15,"1273":3,"1274":1,"1275":2,"1278":1,"1279":1,"1284":1,"1286":87,"1290":1,"1296":1,"1297":1,"1300":71,"1301":14,"1309":17,"1310":10,"1311":44,"1312":8,"1316":2,"1318":3,"1323":47,"1324":80,"1326":1,"1328":2,"1332":2,"1333":2,"1336":1,"1337":4,"1338":3,"1339":51,"1342":1,"1344":3,"1346":1,"1347":1,"1350":28,"1352":3,"1353":2,"1354":1,"1356":1,"1358":1,"1359":138,"1366":4,"1368":1,"1369":4,"1372":1,"1373":1,"1377":1,"1378":3,"1379":3,"1380":19,"1383":1,"1390":1,"1391":1,"1393":1,"1394":1,"1395":44,"1396":65,"1397":1,"1399":1,"1402":29,"1410":1,"1411":1,"1413":1,"1415":38,"1416":16,"1417":45,"1422":1,"1423":3,"1424":1,"1425":1,"1427":7,"1429":3,"1431":1,"1435":2,"1436":306,"1438":47,"1441":2,"1443":4,"1444":1,"1445":1,"1447":3,"1453":5,"1454":4,"1455":13,"1457":3,"1460":1,"1465":2,"1467":13,"1472":1,"1473":1,"1474":2,"1475":1,"1476":3,"1477":1,"1478":1,"1479":1,"1480":1,"1481":5,"1486":3,"1487":1,"1488":4,"1489":10,"1490":1,"1491":1,"1492":1,"1496":2,"1534":1,"1542":1,"1544":1,"1567":1,"1569":1,"1570":1,"1575":1,"1577":3,"1582":2,"1585":2,"1589":1,"1591":2,"1596":2,"1611":1,"1613":1,"1630":7,"1631":17,"1632":9,"1635":12,"1638":1,"1639":5,"1640":5,"1641":8,"1648":1,"1651":1,"1653":3,"1656":1,"1657":1,"1665":1,"1675":1,"1685":1,"1686":4,"1700":1,"1724":3,"1728":1,"1748":1,"1749":2,"1764":6,"1765":10,"1767":25,"1781":1,"1782":1,"1790":1,"1810":3,"1815":5,"1821":1,"1823":1,"1824":2,"1826":1,"1827":1,"1828":2,"1833":1,"1845":1,"1853":1,"1876":1,"1882":1,"1883":1,"1885":1,"1898":4,"1906":1,"1909":1,"1910":1,"1911":1,"1915":2,"1916":1,"1918":2,"1919":2,"1922":1,"1923":3,"1924":2,"1933":1,"1936":1,"1942":1,"1943":1,"1946":1,"1947":1,"1948":2,"1949":1,"1950":3,"1951":1,"1960":1,"1967":2,"1974":1,"1981":1,"1995":1,"1997":1,"1998":1,"2001":1,"2002":4,"2003":1,"2008":1,"2014":1,"2022":1,"2023":1,"2026":3,"2028":2,"2040":1,"2043":1,"2044":2,"2048":1,"2049":1,"2050":1,"2056":1,"2059":2,"2070":2,"2087":1,"2095":1,"2097":2,"2106":2,"2107":1,"2109":1,"2120":1,"2122":1,"2124":1,"2129":1,"2134":1,"2140":1,"2143":1,"2144":3,"2145":1,"2146":1,"2149":1,"2151":1,"2159":1,"2160":2,"2169":3,"2170":2,"2171":1,"2179":1,"2180":1,"2185":3,"2187":1,"2194":1,"2195":1,"2199":1}}],["much",{"3":{"235":1,"384":1,"490":1,"491":1,"492":1,"493":1,"494":1,"625":1,"749":1,"815":1,"819":1,"869":1,"897":1,"1033":1,"1044":1,"1243":1,"1247":1,"1259":1,"1270":2,"1286":4,"1290":1,"1295":1,"1323":1,"1324":7,"1339":4,"1348":1,"1350":1,"1359":2,"1368":1,"1378":1,"1395":2,"1396":8,"1402":1,"1415":1,"1417":2,"1429":1,"1431":1,"1436":4,"1488":2,"1692":1,"1726":1,"1784":1,"1818":1,"1946":1,"1966":1,"2000":1,"2003":1,"2030":1,"2065":1,"2088":1,"2089":1,"2160":1,"2193":1,"2194":1,"2195":1}}],["mute",{"3":{"1436":2}}],["muted",{"3":{"590":1,"2077":1}}],["mutually",{"3":{"667":1,"1191":1,"1196":1,"1300":1,"1323":1,"1395":1,"1396":1,"1427":1,"1749":1,"1765":1}}],["mutual",{"1":{"993":1,"994":1,"995":1,"996":1,"997":1,"998":1,"999":1,"1000":1},"3":{"0":1,"55":1,"135":1,"159":2,"161":1,"993":1,"996":1,"1212":1,"1237":8,"1260":1,"1269":1,"1270":2,"1286":1,"1300":1,"1301":2,"1312":1,"1350":1,"1436":1,"1438":1,"2031":1,"2234":1}}],["mutant",{"3":{"2060":1}}],["mutability",{"3":{"1339":1,"1396":2}}],["mutablepropertyviolations",{"3":{"1436":1}}],["mutableoptions",{"3":{"1199":2,"1207":1}}],["mutablefixtureid",{"3":{"1199":2,"1207":1,"1436":9}}],["mutabletenantcontext",{"3":{"1199":2,"1207":1}}],["mutableauthenticationstateprovider",{"2":{"954":1,"1488":1,"1491":1},"3":{"954":1,"1199":2,"1207":1,"1436":3,"1488":1,"1491":1}}],["mutable",{"3":{"0":1,"340":1,"341":1,"342":1,"343":1,"373":1,"629":1,"881":1,"884":1,"954":1,"962":1,"963":1,"1050":1,"1170":1,"1237":1,"1281":1,"1286":4,"1300":7,"1301":1,"1310":3,"1311":1,"1323":3,"1324":8,"1339":8,"1350":6,"1359":5,"1380":1,"1395":5,"1396":3,"1402":5,"1417":1,"1427":1,"1432":1,"1436":21,"1452":1,"1459":1,"1475":1,"1488":2,"1489":1,"1491":2,"1525":1,"1526":2,"1542":1,"1556":2,"1572":1,"1577":1,"1591":1,"1630":1,"1632":2,"1639":1,"1660":1,"1671":1,"1686":1,"1869":1,"1875":1,"1877":1,"2053":1}}],["mutator",{"3":{"1291":1,"1300":2,"1310":1,"1343":1,"1345":1,"1359":14,"1396":3,"1402":1}}],["mutators",{"3":{"0":1,"109":1,"690":1,"782":1,"1309":1,"1310":4,"1311":2,"1344":1,"1350":1,"1359":3,"1396":2,"1631":1}}],["mutating",{"0":{"1411":1},"3":{"80":1,"258":1,"318":1,"359":1,"388":2,"390":1,"727":1,"905":1,"1247":1,"1270":2,"1283":1,"1286":4,"1293":1,"1300":1,"1301":1,"1309":1,"1311":3,"1323":1,"1324":2,"1339":1,"1359":4,"1375":1,"1380":3,"1395":2,"1396":1,"1402":1,"1415":8,"1429":1,"1436":1,"1460":2,"1475":2,"1556":1,"1664":1,"1701":1,"1923":1,"1996":2,"2144":1}}],["mutationcontexttests",{"3":{"926":1,"1199":1,"1207":1,"1270":1}}],["mutationcontexthandlertests",{"2":{"926":1},"3":{"926":1,"1199":1,"1207":1}}],["mutationcontext",{"3":{"0":1,"926":4,"1199":15,"1203":1,"1207":2,"1260":1,"1265":5,"1270":16,"1352":1,"1359":9,"1411":1,"1415":5,"1666":1}}],["mutation",{"3":{"0":1,"120":1,"241":1,"242":1,"243":1,"244":1,"255":2,"318":3,"322":1,"341":1,"344":1,"386":1,"387":1,"390":3,"715":1,"721":1,"792":1,"905":1,"920":1,"921":2,"922":3,"926":10,"988":1,"1153":1,"1167":1,"1168":1,"1169":1,"1229":1,"1237":3,"1259":2,"1263":1,"1265":6,"1270":28,"1278":1,"1286":14,"1290":1,"1300":5,"1301":5,"1311":7,"1323":3,"1324":3,"1339":2,"1340":1,"1350":10,"1352":2,"1354":1,"1359":51,"1369":1,"1379":1,"1380":14,"1395":9,"1396":7,"1402":9,"1411":1,"1415":11,"1417":2,"1427":1,"1431":1,"1436":7,"1438":1,"1556":1,"1576":2,"1577":2,"1591":1,"1632":1,"1651":1,"1685":1,"1686":1,"1701":1,"1748":2,"1749":1,"1750":1,"1753":1,"1761":1,"1765":2,"1821":1,"1918":2,"1922":2,"1923":2,"1941":1,"1995":1,"2038":2,"2039":1,"2060":2,"2081":1,"2165":2}}],["mutations",{"3":{"0":2,"24":1,"193":1,"201":2,"320":1,"926":1,"1155":1,"1258":1,"1259":4,"1270":3,"1286":1,"1306":1,"1323":1,"1324":2,"1346":1,"1350":2,"1359":4,"1380":9,"1395":2,"1396":2,"1402":2,"1436":1,"1455":2,"1465":1,"1599":1,"1631":1,"1634":2,"1638":1,"1651":1,"1685":1,"1686":2,"1700":1,"1727":1,"1748":1,"1769":1,"1910":1,"1997":1}}],["mutatefirstmultimemberevent",{"3":{"1436":1}}],["mutatetrackedasync",{"3":{"1396":3}}],["mutatechildasync",{"3":{"1395":2}}],["mutatecoreasync",{"2":{"523":1,"921":1},"3":{"0":1,"523":1,"921":1,"926":1,"1270":4,"1359":5,"1402":1,"1415":1}}],["mutateattemptscopetests",{"2":{"926":1},"3":{"926":1,"1199":1,"1207":1}}],["mutateasync",{"3":{"0":1,"922":1,"926":6,"1265":1,"1270":12,"1352":1,"1359":35,"1389":1,"1395":6,"1399":1,"1402":6}}],["mutated",{"3":{"914":1,"922":1,"926":2,"1091":1,"1150":1,"1155":1,"1229":1,"1237":1,"1265":1,"1270":6,"1286":4,"1300":2,"1309":1,"1311":1,"1323":2,"1339":2,"1350":9,"1359":9,"1395":4,"1396":5,"1415":2,"1417":1,"1436":4,"1453":1,"1556":1,"1647":1,"2176":1}}],["mutateentityhandlercore",{"2":{"523":2,"926":1,"1100":1,"1265":1},"3":{"523":2,"926":1,"1100":1,"1199":3,"1203":1,"1207":1,"1212":1,"1260":1,"1265":1,"1270":9,"1359":6,"1402":1,"1415":1,"1496":2,"1666":1}}],["mutateentityhandlerbasetests",{"3":{"1199":1,"1207":1,"1270":3}}],["mutateentityhandlerbase",{"2":{"344":1,"518":1,"523":1,"922":1,"926":1,"1100":1,"1265":1,"1399":1,"1871":1,"2165":1},"3":{"0":3,"341":1,"344":2,"345":1,"444":1,"518":1,"523":3,"921":2,"922":2,"923":1,"926":4,"927":1,"1100":2,"1199":25,"1203":1,"1207":6,"1260":1,"1265":17,"1270":17,"1311":2,"1352":1,"1355":1,"1359":91,"1399":1,"1402":16,"1415":5,"1496":2,"1871":1,"2165":1}}],["mutateentitypayloadhandlerbase",{"3":{"0":1,"926":1,"1199":6,"1203":1,"1207":1,"1260":1,"1265":1,"1270":3,"1352":1,"1359":3,"1411":1,"1415":2}}],["mutate",{"3":{"0":3,"827":1,"920":3,"921":1,"926":8,"927":1,"1068":1,"1153":1,"1212":1,"1237":1,"1247":3,"1260":1,"1261":1,"1265":3,"1270":9,"1286":6,"1300":1,"1301":1,"1309":1,"1324":1,"1342":1,"1343":1,"1350":2,"1359":25,"1369":1,"1380":2,"1395":5,"1396":1,"1399":1,"1402":3,"1415":5,"1423":1,"1436":5,"1543":1,"1651":2,"1666":1,"1808":1,"1820":1,"1891":1,"1937":1,"2232":1}}],["mutates",{"3":{"0":1,"17":1,"341":1,"766":1,"767":1,"1212":1,"1237":1,"1247":1,"1259":2,"1270":1,"1286":4,"1309":1,"1311":3,"1323":2,"1324":1,"1350":4,"1352":1,"1359":9,"1369":1,"1380":2,"1395":2,"1396":1,"1402":5,"1415":1,"1436":6,"1455":1,"1457":1,"1458":1,"1460":1,"1591":1,"1632":1,"1911":1,"2093":2}}],["mudnumericfield",{"3":{"1702":1}}],["mudnavgroup",{"3":{"1324":1}}],["mudpagination",{"3":{"1591":1}}],["mudpopoverprovider",{"3":{"1436":2,"1653":1}}],["mudprogresscircular",{"3":{"1324":1}}],["mudproviderhandles",{"3":{"1199":3,"1207":1,"1432":1,"1436":3,"1488":1}}],["mudmenu",{"3":{"1436":1}}],["mudmessagebox",{"3":{"1415":2,"1436":1,"1488":1,"1526":2}}],["mudrating",{"3":{"1395":2,"1396":3}}],["mudcheckbox",{"3":{"1436":2}}],["mudchip",{"3":{"1395":2}}],["mudcard",{"3":{"1395":2}}],["muddialogprovider",{"3":{"1436":2,"1653":1}}],["muddivider",{"3":{"1395":1}}],["muddatagridrowselector",{"3":{"1436":1}}],["muddatagrid",{"2":{"1715":1,"2074":1,"2081":1},"3":{"0":1,"881":1,"883":1,"1324":14,"1383":1,"1395":6,"1396":1,"1415":2,"1433":1,"1436":6,"1526":1,"1715":1,"1741":1,"1750":7,"2074":2,"2081":1}}],["mudimage",{"3":{"1395":2}}],["muditem",{"3":{"1395":1}}],["mudicon",{"3":{"1324":1}}],["mudiconbutton",{"3":{"1324":2}}],["mudbutton",{"3":{"1324":1,"1436":3}}],["mudblazor",{"0":{"1432":1},"1":{"1324":1},"2":{"265":1,"1698":1},"3":{"0":4,"213":1,"214":1,"215":1,"216":2,"263":1,"265":8,"267":3,"268":1,"556":2,"558":1,"618":2,"620":1,"647":1,"649":3,"650":1,"651":2,"940":1,"954":5,"956":2,"960":1,"1125":1,"1192":1,"1202":1,"1203":1,"1212":1,"1213":1,"1323":1,"1324":129,"1336":1,"1339":4,"1383":1,"1395":51,"1396":11,"1402":2,"1415":4,"1416":5,"1428":1,"1432":3,"1433":2,"1436":25,"1438":3,"1443":1,"1488":7,"1489":1,"1491":2,"1496":3,"1526":2,"1534":1,"1536":1,"1557":1,"1577":8,"1586":1,"1591":4,"1600":1,"1647":1,"1653":2,"1660":1,"1669":3,"1670":1,"1671":1,"1681":1,"1687":1,"1698":1,"1712":2,"1741":1,"1763":1,"1773":1,"2044":1,"2056":1,"2058":1,"2074":3,"2075":1,"2077":2,"2081":5,"2087":4,"2091":1,"2149":1,"2151":1,"2152":3,"2154":1,"2223":1,"2229":1}}],["mudlink",{"3":{"1324":1,"1395":5,"1417":1,"1436":1}}],["mudlocalizer",{"2":{"267":1},"3":{"265":1,"267":1,"1324":22,"2087":1}}],["mudswitch",{"3":{"1396":2}}],["mudsimpletable",{"2":{"1531":1},"3":{"1395":2,"1396":2,"1526":1,"1531":1}}],["mudsnackbarprovider",{"3":{"1324":1,"1436":2,"1653":1}}],["mudselect",{"3":{"618":1,"1395":1,"1396":1,"1488":1}}],["mudavatar",{"3":{"1395":2,"1415":1,"1491":1}}],["mudautocomplete",{"3":{"1395":2}}],["mudappdialogservice",{"2":{"649":1},"3":{"649":1,"954":1,"1199":2,"1203":1,"1207":2,"1324":22}}],["mudappbar",{"3":{"273":1}}],["mudalert",{"3":{"109":1,"1324":1,"1395":4,"1396":2,"1436":2}}],["mudform",{"2":{"128":1,"2046":1},"3":{"109":1,"117":1,"128":1,"1324":9,"1384":1,"1395":25,"1396":5,"1415":1,"1436":3,"1489":1,"1526":1,"1535":1,"1591":1,"2046":1}}],["mudtext",{"3":{"1324":1}}],["mudtextfield",{"3":{"1324":1,"1395":2,"1396":2,"1402":2}}],["mudtoastservicetests",{"3":{"1199":1,"1207":2,"1324":3}}],["mudtoastservice",{"3":{"649":1,"954":1,"1199":3,"1203":1,"1207":2,"1324":18,"1496":1}}],["mudtable",{"2":{"554":1},"3":{"554":1,"556":1,"1324":1}}],["mudtablepager",{"2":{"651":1,"2058":1},"3":{"0":1,"618":2,"651":1,"1436":2,"1488":2,"2058":1}}],["mudtranslations",{"2":{"267":1,"268":1,"2087":1},"3":{"265":2,"267":1,"268":2,"1199":2,"1203":1,"1207":2,"1324":10,"1436":2,"1496":1,"1577":2,"2087":4}}],["mudtheme",{"2":{"2077":1},"3":{"0":1,"273":2,"1324":6,"2077":2,"2085":1}}],["mudthemeprovider",{"2":{"272":1,"273":1,"2077":1,"2088":1},"3":{"0":1,"272":1,"273":1,"1212":1,"1324":4,"1436":1,"1577":1,"1653":1,"2077":1,"2088":1,"2234":1}}],["mud",{"3":{"0":2,"273":1,"275":1,"954":1,"1324":6,"1436":7,"1653":1,"2077":1}}],["multidimensional",{"3":{"2222":1}}],["multidevicerefreshsessionsandauditdeletioncolumns",{"3":{"1209":2}}],["multithreaded",{"3":{"2222":1}}],["multiline",{"3":{"1396":1,"1436":1,"1455":1}}],["multifactor",{"2":{"2199":1},"3":{"1300":7,"2199":1}}],["multifactormethodrecoverycode",{"3":{"1300":1}}],["multifactormethodtotp",{"3":{"1300":1}}],["multifactormethodfor",{"3":{"1300":2}}],["multifactormethod",{"3":{"1300":6}}],["multifactorrequired",{"2":{"1263":1},"3":{"126":1,"1263":1,"1270":1,"1821":1}}],["multihandlereventhandler2",{"3":{"1199":2,"1207":1}}],["multihandlereventhandler1",{"3":{"1199":2,"1207":1}}],["multihandlerevent",{"3":{"1199":4,"1207":1}}],["multipartformdatacontent",{"3":{"1395":2,"1415":2}}],["multipart",{"3":{"1116":1,"1347":1,"1350":2,"1389":1,"1395":4,"1411":1,"1415":3,"1447":1,"1631":2,"1640":1,"1748":1,"1765":1}}],["multiplying",{"3":{"1247":1,"1323":1,"1396":1}}],["multiply",{"3":{"657":1,"685":1,"716":1,"819":1,"1229":1,"1237":1,"1242":1,"1247":4,"1286":2,"1339":2,"1359":1,"1449":1,"1863":1,"1925":1,"2033":1}}],["multiplicity",{"3":{"1396":1}}],["multiplication",{"3":{"0":1,"178":1,"827":1,"1339":1}}],["multipliers",{"3":{"1339":1}}],["multiplier",{"3":{"714":1,"742":1,"1339":2,"2014":1}}],["multiplies",{"0":{"2036":1},"3":{"509":1,"682":1,"700":1,"740":1,"783":1,"1232":1,"1237":1,"1286":1,"1300":1,"1337":1,"1402":1,"1417":1,"2028":1,"2036":1,"2038":2,"2039":1}}],["multiplied",{"3":{"19":1,"23":1,"1126":1,"1256":1,"1259":2,"1275":1,"1339":2,"1395":1,"1416":1,"1841":1,"2028":1,"2039":1}}],["multiplexed",{"3":{"1329":1,"1339":1,"1443":1}}],["multiplexer",{"3":{"0":2,"155":1,"159":1,"178":1,"243":2,"245":1,"257":1,"260":1,"261":1,"733":1,"996":1,"1301":11,"1323":1,"1332":1,"1339":8,"1438":1,"1443":1,"1577":1,"1666":1,"1668":1,"1909":1,"1911":1,"1923":3}}],["multiple",{"1":{"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1},"3":{"0":1,"10":1,"46":1,"135":1,"163":1,"839":1,"1085":1,"1237":1,"1247":1,"1259":1,"1270":2,"1286":4,"1300":3,"1311":3,"1312":1,"1323":3,"1324":2,"1347":1,"1350":1,"1359":3,"1369":1,"1395":2,"1397":1,"1417":1,"1429":1,"1436":5,"1464":1,"1488":1,"1537":1,"1544":1,"1555":1,"1556":1,"1630":2,"1639":3,"1668":1,"1767":1,"1773":1,"1792":1,"1940":1,"2028":1,"2222":1}}],["multisourceorderconfiguration",{"3":{"1199":1,"1207":1}}],["multisourceorder",{"3":{"1199":3,"1207":1}}],["multisourcecustomerconfiguration",{"3":{"1199":1,"1207":1}}],["multisourcecustomer",{"3":{"1199":4,"1207":1}}],["multisourcetestevent",{"3":{"1199":1,"1207":1}}],["multisourcesqliteintegrationtests",{"2":{"164":1,"2054":1,"2061":1},"3":{"164":1,"1198":1,"1199":2,"1207":8,"1286":1,"1496":1,"2054":1,"2061":1}}],["multisessionspeaker",{"3":{"1199":9,"1203":1,"1207":1,"1347":1,"1350":3,"1359":3,"1395":1}}],["multiselect",{"3":{"757":1,"1455":1}}],["multicast",{"3":{"0":1,"380":1,"382":1,"1324":2,"1400":2,"1402":1,"1945":1,"1949":1}}],["multi",{"1":{"262":1,"263":1,"264":1,"265":1,"266":1,"267":1,"268":1,"269":1,"695":1,"696":1,"697":1,"698":1,"699":1,"700":1,"701":1,"702":1,"703":1,"902":1,"903":1,"904":1,"905":1,"906":1,"907":1,"908":1,"909":1,"910":1},"3":{"0":9,"12":1,"30":1,"68":2,"84":1,"86":1,"149":1,"158":1,"166":1,"227":1,"243":1,"245":1,"258":1,"262":1,"264":1,"283":1,"340":1,"386":1,"390":1,"392":1,"413":1,"442":1,"462":1,"491":1,"501":1,"517":1,"535":1,"536":1,"555":1,"657":1,"659":1,"660":1,"670":1,"695":1,"706":1,"708":1,"748":1,"750":1,"809":2,"810":2,"827":1,"897":1,"902":1,"926":1,"988":1,"990":1,"997":1,"998":1,"1012":1,"1013":1,"1067":1,"1212":6,"1217":1,"1237":1,"1247":2,"1259":1,"1267":1,"1270":6,"1271":1,"1276":1,"1283":1,"1286":24,"1287":1,"1296":1,"1300":17,"1301":4,"1311":7,"1316":1,"1323":6,"1324":9,"1332":1,"1333":1,"1336":1,"1339":5,"1350":6,"1359":5,"1367":1,"1380":5,"1395":8,"1415":2,"1416":2,"1417":1,"1427":1,"1436":14,"1437":1,"1438":3,"1441":1,"1445":1,"1449":1,"1454":1,"1455":1,"1459":1,"1466":1,"1474":1,"1489":1,"1496":4,"1499":1,"1526":3,"1529":1,"1534":1,"1541":2,"1547":1,"1548":1,"1566":1,"1570":1,"1572":1,"1577":3,"1599":1,"1629":2,"1631":2,"1638":1,"1653":1,"1661":1,"1664":2,"1667":1,"1673":1,"1675":2,"1677":1,"1686":1,"1698":1,"1713":1,"1720":1,"1727":2,"1774":1,"1780":1,"1795":1,"1799":1,"1853":1,"1869":1,"1920":1,"1940":1,"1948":1,"1949":1,"1950":1,"1971":1,"1982":1,"1985":2,"2002":1,"2009":1,"2034":1,"2035":1,"2038":2,"2054":1,"2057":1,"2083":1,"2087":1,"2088":1,"2122":1,"2164":1,"2222":4,"2223":1,"2229":2,"2232":1,"2234":4,"2242":1}}],["mobility",{"3":{"1630":1}}],["mobileviewport",{"3":{"1436":1}}],["mobilepage",{"3":{"1324":1}}],["mobilepagesize",{"3":{"881":1,"1324":1,"1395":2}}],["mobilelist",{"3":{"1324":2}}],["mobiletoprowe2etests",{"3":{"1199":1,"1207":2,"1436":4}}],["mobiletotalitems",{"3":{"881":1,"1324":1,"1395":1}}],["mobilecardlist",{"2":{"2060":1},"3":{"1436":2,"2060":1}}],["mobilecardlisttests",{"3":{"1199":1,"1207":2}}],["mobilecurrentpage",{"3":{"881":1,"1324":3,"1395":1}}],["mobilehostparitytests",{"3":{"1199":1,"1207":2,"1436":3}}],["mobileitems",{"3":{"881":1,"1324":1,"1395":1}}],["mobileinfinitescrolllisttests",{"3":{"1199":1,"1207":2,"1324":1}}],["mobileinfinitescrolllist",{"2":{"112":1,"1383":1,"2060":1,"2075":1},"3":{"0":1,"109":2,"111":1,"112":2,"1199":18,"1203":1,"1207":2,"1324":12,"1383":1,"1395":12,"1396":1,"1436":1,"1526":1,"1577":1,"1591":1,"1600":1,"2060":1,"2075":1}}],["mobilenavkeyboarde2etests",{"2":{"616":1},"3":{"616":1,"618":1,"1199":1,"1207":2}}],["mobilereleaserunbook",{"0":{"1481":1},"3":{"422":1,"423":1,"424":1,"425":1,"426":2,"1416":1,"1470":1,"1481":16,"1482":1,"1483":1,"1526":1}}],["mobileredirectscheme",{"3":{"415":1,"1416":1,"1417":4}}],["mobile",{"0":{"1669":1},"1":{"417":1,"418":1,"419":1,"420":1,"421":1,"422":1,"423":1,"424":1,"425":1,"426":1,"427":1,"428":1,"429":1,"430":1},"3":{"0":2,"340":1,"387":1,"417":1,"419":1,"618":1,"649":1,"652":1,"881":3,"905":1,"907":1,"1124":1,"1212":1,"1300":3,"1311":3,"1323":1,"1324":29,"1350":1,"1380":1,"1383":2,"1385":1,"1395":39,"1396":9,"1402":2,"1411":1,"1414":1,"1415":5,"1416":2,"1417":5,"1436":8,"1438":5,"1459":1,"1471":1,"1472":1,"1481":1,"1487":1,"1490":1,"1496":1,"1524":2,"1526":5,"1531":3,"1534":2,"1559":2,"1577":2,"1591":2,"1595":1,"1596":1,"1597":1,"1599":1,"1629":1,"1640":1,"1641":4,"1667":1,"1669":3,"1673":1,"1675":1,"1712":2,"1713":1,"1714":4,"1874":1,"1976":2,"2074":1,"2075":4,"2081":3,"2118":1,"2123":1,"2234":1}}],["mouse",{"3":{"1606":1,"1740":1}}],["mount=type=secret",{"3":{"1445":1}}],["mounted",{"3":{"869":1,"1300":3,"1309":1,"1311":1,"1323":2,"1324":4,"1380":4,"1395":3,"1396":5,"1402":2,"1415":5,"1455":1,"1458":1,"2151":1}}],["mounts",{"3":{"217":1,"723":1,"871":1,"1311":1,"1324":2,"1380":1,"1395":2,"1396":1,"1416":1,"1432":1,"1666":1}}],["mount",{"3":{"0":1,"871":1,"1300":1,"1396":1,"1445":1,"1666":1,"2155":1}}],["mo",{"3":{"1436":2,"1534":1,"1671":1}}],["motion",{"3":{"1433":1,"1436":1}}],["motive",{"3":{"1270":1,"1300":2,"1395":1,"1402":1}}],["motivation",{"3":{"1323":2,"1339":1,"1359":1,"1395":1,"1415":1,"1436":1}}],["motivations",{"3":{"1237":1}}],["motivating",{"3":{"1286":1,"1324":2,"1396":1}}],["motivate",{"3":{"1259":1}}],["motivates",{"3":{"485":1,"1296":1,"1309":1,"1359":1}}],["motivated",{"3":{"0":1,"105":1,"318":1,"686":1,"829":1,"836":1,"1396":1,"1413":1,"1436":1,"1438":1,"1467":3,"1492":1,"2028":1}}],["motor",{"3":{"1417":2}}],["moot",{"3":{"915":1,"1395":1}}],["mojibake",{"3":{"741":1,"1311":1}}],["mornings",{"3":{"1457":1}}],["morning",{"3":{"689":1,"1342":1,"1350":1,"1359":2,"1364":1,"1369":1}}],["more",{"0":{"1335":1,"1376":1,"2052":1,"2202":1},"3":{"0":11,"7":1,"27":1,"33":1,"49":1,"81":1,"95":1,"96":1,"109":2,"111":2,"126":1,"130":1,"135":1,"137":1,"141":1,"145":1,"185":1,"194":1,"195":1,"243":1,"245":1,"259":1,"264":1,"340":1,"350":1,"361":2,"365":2,"382":1,"390":1,"391":1,"392":1,"413":1,"423":1,"461":1,"463":1,"470":1,"497":1,"518":1,"530":2,"549":2,"551":2,"566":1,"572":1,"590":1,"592":1,"597":1,"600":1,"601":1,"609":3,"633":1,"635":1,"673":1,"674":3,"690":1,"706":1,"708":1,"723":1,"725":1,"743":1,"758":1,"767":1,"782":1,"800":1,"827":1,"829":1,"833":1,"838":1,"849":1,"854":1,"856":2,"862":1,"871":2,"881":1,"905":1,"907":1,"920":1,"924":1,"926":2,"937":1,"941":3,"979":1,"980":1,"981":1,"982":2,"987":2,"995":1,"1004":1,"1006":1,"1013":1,"1019":2,"1020":1,"1034":1,"1036":1,"1051":2,"1061":1,"1067":1,"1069":2,"1085":1,"1089":1,"1091":1,"1100":1,"1101":1,"1116":2,"1134":1,"1142":1,"1143":1,"1145":1,"1154":1,"1156":2,"1163":1,"1168":1,"1170":1,"1219":1,"1229":6,"1237":3,"1243":1,"1247":1,"1252":1,"1254":1,"1255":1,"1256":1,"1258":1,"1259":7,"1265":1,"1268":1,"1270":11,"1273":1,"1275":2,"1277":1,"1278":1,"1282":1,"1284":1,"1285":3,"1286":22,"1294":1,"1300":13,"1301":2,"1309":2,"1311":13,"1314":1,"1317":1,"1320":1,"1322":1,"1323":9,"1324":25,"1326":1,"1328":1,"1339":10,"1347":1,"1348":1,"1350":7,"1352":2,"1359":33,"1364":1,"1369":2,"1375":1,"1379":1,"1380":5,"1395":18,"1396":21,"1401":1,"1402":2,"1405":1,"1407":1,"1409":2,"1415":11,"1416":1,"1417":5,"1421":1,"1427":3,"1431":2,"1436":36,"1438":3,"1441":3,"1442":3,"1443":1,"1444":1,"1455":2,"1456":2,"1457":1,"1460":1,"1465":2,"1467":8,"1475":1,"1478":1,"1488":2,"1489":2,"1492":3,"1496":4,"1503":1,"1508":1,"1534":1,"1631":1,"1637":3,"1638":1,"1640":1,"1651":1,"1654":1,"1662":1,"1673":1,"1683":1,"1693":1,"1695":1,"1724":1,"1727":1,"1764":6,"1765":1,"1778":1,"1781":1,"1793":1,"1794":1,"1799":1,"1802":1,"1805":2,"1806":1,"1810":1,"1811":2,"1826":1,"1828":1,"1833":1,"1836":1,"1839":1,"1851":2,"1852":1,"1870":1,"1874":1,"1880":1,"1892":1,"1894":3,"1902":1,"1907":1,"1909":1,"1923":1,"1925":1,"1929":1,"1930":2,"1942":1,"1945":1,"1949":1,"1958":1,"1962":1,"1965":1,"1971":2,"1972":1,"1973":1,"1975":1,"1986":1,"1989":1,"1992":1,"1996":2,"2002":1,"2011":1,"2036":1,"2043":1,"2044":1,"2047":1,"2048":2,"2050":1,"2051":1,"2056":2,"2058":2,"2061":3,"2063":1,"2064":1,"2066":1,"2069":1,"2075":2,"2087":1,"2088":1,"2106":1,"2123":1,"2125":1,"2128":1,"2133":2,"2137":1,"2138":1,"2147":1,"2157":1,"2158":3,"2160":1,"2170":2,"2181":1,"2182":1,"2185":1,"2189":1,"2194":1,"2195":1,"2199":1,"2201":1,"2203":1,"2204":1,"2215":1,"2240":1}}],["mockable",{"3":{"1286":2,"1324":3,"1415":1}}],["mocks",{"3":{"1199":28,"1207":17,"1286":2,"1323":2,"1359":2,"1395":1,"1396":1,"1436":2,"1438":2,"1491":1,"1685":1}}],["mocking",{"3":{"956":1,"1213":1,"1286":1,"1323":1,"1359":1,"1436":2,"1440":1,"1685":1,"2061":1}}],["mocked",{"3":{"914":1,"998":1,"1286":1,"1323":2,"1324":1,"1359":1,"1396":1,"1436":7,"1438":5,"1487":1,"1490":1,"1612":1,"1654":1,"1671":1,"1685":2,"2053":1}}],["mock",{"3":{"414":1,"1271":1,"1286":5,"1300":3,"1323":1,"1324":5,"1359":1,"1395":1,"1396":5,"1429":1,"1436":19,"1438":4,"1453":4,"1488":1,"1490":1,"1538":1,"1551":1,"1577":1,"1617":2,"1686":1,"2054":1}}],["moq",{"3":{"0":1,"954":1,"956":2,"960":1,"1213":1,"1369":2,"1436":5,"1488":1,"1686":2,"2059":1,"2221":1}}],["momentarily",{"3":{"1402":1,"1454":1}}],["moments",{"3":{"135":1,"1324":1}}],["moment",{"3":{"0":1,"20":1,"24":1,"54":1,"160":1,"351":1,"358":1,"499":2,"527":1,"539":1,"557":1,"565":1,"628":1,"692":1,"714":1,"741":1,"765":1,"767":1,"768":1,"798":1,"800":1,"828":1,"840":1,"889":1,"891":1,"971":1,"1090":1,"1153":1,"1160":1,"1212":1,"1223":1,"1237":1,"1247":2,"1249":1,"1254":1,"1256":1,"1259":4,"1265":1,"1270":2,"1271":2,"1275":1,"1286":11,"1300":5,"1301":1,"1309":1,"1310":1,"1311":5,"1312":2,"1318":1,"1323":6,"1324":6,"1330":1,"1339":4,"1350":2,"1358":3,"1359":11,"1369":1,"1390":1,"1393":1,"1395":2,"1396":7,"1402":2,"1405":1,"1415":5,"1416":1,"1417":6,"1436":9,"1438":2,"1465":2,"1467":1,"1489":2,"1534":1,"1577":1,"1585":1,"1653":1,"1654":1,"1708":1,"1792":1,"1805":1,"1836":1,"1858":1,"1863":1,"1887":1,"1888":1,"1899":1,"1913":1,"1918":1,"1929":1,"1950":1,"1960":1,"1972":1,"1974":1,"1978":1,"1979":1,"1985":1,"1988":1,"1999":1,"2007":1,"2038":1,"2041":1,"2046":1,"2064":1,"2083":1,"2118":1,"2128":3,"2129":1,"2131":1,"2137":1,"2142":1,"2148":1,"2152":1,"2166":1,"2168":1,"2169":1,"2173":1,"2196":2}}],["mon",{"3":{"1456":1,"1460":2,"1490":1}}],["monetary",{"3":{"1237":1}}],["moneytestdbcontext",{"3":{"1199":2,"1207":1}}],["moneytests",{"3":{"1199":1,"1207":2}}],["moneytowire",{"3":{"657":1}}],["moneyserializationtests",{"3":{"1199":1,"1207":2,"1438":2}}],["moneyextensionstests",{"3":{"1199":1,"1207":3,"1324":1}}],["moneyextensions",{"3":{"980":1,"1199":1,"1203":1,"1207":2,"1208":2,"1237":1,"1324":4,"1496":1,"1591":2,"1596":1,"1600":1}}],["moneyfromwire",{"3":{"657":2}}],["moneyv1",{"3":{"0":1,"657":1}}],["money",{"2":{"655":1,"658":1,"659":1,"660":3,"1025":1},"3":{"0":3,"535":1,"536":1,"655":2,"657":29,"658":5,"659":5,"660":7,"689":1,"767":1,"768":1,"793":1,"1020":1,"1025":2,"1026":1,"1168":1,"1199":13,"1203":1,"1207":2,"1208":1,"1212":1,"1230":1,"1234":13,"1237":41,"1247":1,"1282":2,"1286":11,"1311":1,"1312":3,"1324":13,"1395":1,"1422":1,"1435":1,"1438":3,"1455":4,"1492":1,"1496":2,"1541":1,"1577":1,"1585":2,"1591":3,"1596":1,"1600":3,"1662":2,"1749":1,"1764":6,"1765":2,"1766":1,"1770":1,"1810":4,"2163":1,"2165":1,"2171":1}}],["monadic",{"3":{"1220":1,"1229":1,"1805":1}}],["months",{"3":{"888":1,"1019":1,"1436":2,"1661":1,"1794":1,"1809":1,"1913":1,"1948":1,"1951":1,"2040":1,"2044":1,"2102":1,"2149":1,"2202":1}}],["month",{"3":{"827":1,"1020":2,"1118":1,"1270":2,"1395":1,"1457":1,"1465":1,"1467":8,"1474":1,"1476":1,"1709":1,"1958":1,"1973":1,"2044":1,"2058":1,"2160":1}}],["monthlybudgetamount",{"3":{"1467":1,"1591":1}}],["monthly",{"3":{"0":1,"591":1,"609":1,"625":1,"626":1,"627":1,"628":1,"765":2,"827":1,"870":1,"1020":1,"1116":1,"1436":1,"1446":1,"1455":2,"1456":1,"1458":1,"1460":2,"1467":8,"1469":2,"1474":2,"1475":1,"1484":1,"1524":1,"1525":1,"1526":1,"1531":1,"1535":1,"1589":2,"1591":1,"1595":1,"1596":3,"1598":1,"1678":1,"1709":1,"2035":2,"2048":1,"2213":1}}],["mondays",{"3":{"1475":1,"2035":1}}],["monday",{"3":{"625":3,"766":1,"1438":1,"1455":1,"1456":1,"1457":3,"1460":3,"1461":1,"1475":1,"1484":1,"1490":1,"1492":1,"1534":1,"1591":2,"1599":1}}],["monitors",{"3":{"1417":1}}],["monitored",{"3":{"1324":1,"1465":1,"1467":2}}],["monitoringviewresourceregex",{"3":{"1436":2}}],["monitoringworkbookordashboard",{"3":{"1436":2,"1467":1}}],["monitoring",{"3":{"109":1,"827":1,"1311":1,"1417":1,"1436":2,"1467":2,"1474":1,"1927":1,"2222":1}}],["monitor",{"1":{"2156":1,"2157":1,"2158":1,"2159":1,"2160":1,"2161":1,"2162":1},"3":{"0":2,"395":1,"397":2,"401":1,"402":1,"790":1,"914":1,"997":1,"1068":1,"1213":1,"1333":4,"1339":11,"1379":1,"1436":1,"1438":1,"1442":2,"1443":3,"1447":1,"1450":1,"1467":7,"1474":2,"1526":1,"1577":1,"1668":1,"1670":1,"1779":1,"2011":3,"2015":1,"2047":1,"2155":2,"2156":3,"2158":2,"2159":1,"2162":2,"2171":1,"2211":1,"2217":1}}],["monotonic",{"3":{"1390":1,"1395":1,"1396":1,"1417":1,"1438":1}}],["monotonically",{"3":{"690":1,"1286":1,"1324":1,"1396":2,"1465":1}}],["monopolizing",{"3":{"176":1}}],["mono",{"3":{"0":1,"27":1,"39":1,"109":1,"1161":1,"1162":1,"1436":12,"2044":1}}],["monolithic",{"3":{"1359":1,"1396":1}}],["monoliths",{"3":{"1211":1,"2214":1}}],["monolith",{"0":{"1509":1,"1653":1,"1663":1,"1783":1,"1790":1},"1":{"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"1788":1,"1789":1,"1790":1,"1791":1,"1792":1,"1793":1,"1847":1,"1848":1,"1849":1,"1850":1,"1851":1,"1852":1,"1853":1,"2089":1,"2090":1,"2091":1,"2092":1,"2093":1,"2094":1,"2095":1,"2096":1,"2097":1,"2098":1,"2099":1,"2100":1},"3":{"0":10,"20":1,"30":2,"31":3,"32":1,"47":1,"56":1,"58":2,"59":2,"60":1,"61":1,"62":2,"105":1,"196":1,"201":1,"224":1,"242":1,"243":2,"247":1,"282":1,"329":1,"396":1,"405":1,"448":1,"582":3,"583":1,"587":1,"639":1,"640":1,"664":1,"674":1,"734":1,"781":1,"783":1,"845":1,"931":1,"933":2,"1212":4,"1248":1,"1252":1,"1257":3,"1259":16,"1270":2,"1273":1,"1279":1,"1281":2,"1286":15,"1287":1,"1288":1,"1300":7,"1301":3,"1307":1,"1309":1,"1310":1,"1311":6,"1312":4,"1313":1,"1320":2,"1323":10,"1339":1,"1350":2,"1359":4,"1396":4,"1402":2,"1415":2,"1429":1,"1436":5,"1447":1,"1471":1,"1489":1,"1508":1,"1509":1,"1534":1,"1536":1,"1544":2,"1577":3,"1641":1,"1646":2,"1647":2,"1648":1,"1652":4,"1653":2,"1656":4,"1658":1,"1659":1,"1663":3,"1670":1,"1675":1,"1683":1,"1692":1,"1697":1,"1779":2,"1780":2,"1781":1,"1783":3,"1786":1,"1787":1,"1788":4,"1789":1,"1790":5,"1792":1,"1793":3,"1815":1,"1842":3,"1846":1,"1847":5,"1848":1,"1849":4,"1850":1,"1853":2,"1858":1,"1864":1,"1878":1,"1884":5,"1886":1,"1888":2,"1893":2,"1895":1,"1896":2,"1899":1,"1916":1,"1924":1,"1926":1,"1986":1,"1992":1,"2005":1,"2009":1,"2010":1,"2015":1,"2016":2,"2017":1,"2018":1,"2021":2,"2029":1,"2036":1,"2044":1,"2089":1,"2113":1,"2132":1,"2133":1,"2137":1,"2156":1,"2157":1,"2171":1,"2182":1,"2195":1,"2205":1,"2206":1,"2207":1,"2209":1,"2212":1,"2215":2,"2216":2,"2220":1,"2221":1,"2223":1,"2228":1,"2229":1,"2230":1,"2232":2,"2234":1,"2241":2,"2245":1}}],["movable",{"3":{"373":1,"1247":1,"1436":1}}],["moving",{"3":{"0":4,"33":1,"59":1,"164":1,"166":1,"286":1,"291":1,"295":1,"374":1,"591":1,"609":1,"610":1,"627":1,"631":1,"633":1,"635":1,"691":1,"838":1,"856":1,"891":1,"982":1,"1003":1,"1019":1,"1034":1,"1051":1,"1212":1,"1233":1,"1237":2,"1259":2,"1263":1,"1270":2,"1271":1,"1282":1,"1286":2,"1293":1,"1300":2,"1301":1,"1309":1,"1311":3,"1323":6,"1342":3,"1350":4,"1353":1,"1359":14,"1369":2,"1380":1,"1392":1,"1395":12,"1396":2,"1402":3,"1415":3,"1417":1,"1428":1,"1436":6,"1438":1,"1447":1,"1459":1,"1465":1,"1477":2,"1492":2,"1534":1,"1577":1,"1585":1,"1631":2,"1638":1,"1655":1,"1727":1,"1735":1,"1765":1,"1801":1,"1854":1,"1885":1,"1904":1,"1968":1,"1975":1,"1991":1,"2047":1,"2048":1,"2081":1,"2099":1,"2109":1,"2166":1,"2189":2,"2200":1}}],["movenext",{"3":{"1436":2}}],["movenextasync",{"3":{"1427":1,"1436":2}}],["movement",{"3":{"1145":1,"1496":8,"1575":2,"1582":1,"1585":1,"1769":1}}],["move",{"0":{"139":1,"140":1,"142":1,"1857":1},"3":{"0":10,"24":3,"46":1,"59":1,"102":1,"130":2,"135":1,"136":1,"138":1,"140":1,"141":1,"145":1,"150":2,"165":1,"177":1,"242":1,"254":1,"390":2,"407":1,"440":1,"488":1,"492":1,"493":1,"494":2,"545":1,"590":1,"635":1,"640":1,"676":1,"688":1,"690":1,"691":1,"698":1,"725":2,"726":1,"727":1,"741":1,"765":1,"767":1,"790":1,"791":1,"812":1,"819":1,"827":1,"838":1,"842":1,"849":3,"882":1,"899":1,"921":1,"926":1,"932":1,"954":1,"971":1,"980":1,"1004":3,"1005":1,"1006":3,"1012":3,"1014":1,"1019":1,"1041":1,"1053":1,"1075":1,"1077":1,"1085":1,"1134":1,"1137":1,"1176":1,"1212":1,"1214":1,"1229":1,"1233":1,"1237":1,"1249":1,"1250":2,"1259":4,"1270":2,"1271":1,"1275":1,"1286":5,"1297":1,"1300":6,"1301":1,"1309":2,"1310":1,"1311":5,"1312":1,"1323":7,"1324":13,"1339":5,"1343":1,"1350":2,"1353":1,"1359":8,"1369":3,"1380":1,"1385":1,"1391":1,"1392":1,"1395":8,"1396":11,"1399":1,"1402":7,"1415":6,"1416":1,"1417":2,"1436":22,"1438":1,"1441":1,"1442":1,"1455":1,"1461":1,"1467":2,"1482":1,"1489":3,"1492":2,"1496":8,"1500":1,"1524":1,"1525":1,"1577":2,"1578":1,"1607":1,"1618":1,"1663":1,"1665":1,"1673":1,"1675":1,"1686":1,"1687":1,"1697":1,"1701":1,"1735":1,"1741":1,"1749":1,"1765":2,"1802":1,"1817":1,"1824":1,"1826":1,"1857":1,"1860":1,"1861":1,"1862":1,"1866":1,"1893":1,"1914":1,"1923":1,"1924":1,"1950":1,"1953":1,"1955":1,"2002":1,"2012":1,"2033":1,"2048":1,"2072":2,"2077":1,"2108":1,"2126":1,"2130":1,"2154":1,"2169":1,"2171":1,"2189":1,"2196":1,"2234":1}}],["moves",{"0":{"539":1},"3":{"0":7,"25":1,"57":1,"126":2,"141":1,"147":1,"150":1,"170":1,"198":1,"203":1,"216":1,"228":1,"253":1,"255":2,"258":1,"311":1,"386":1,"387":1,"392":1,"407":1,"459":1,"464":1,"490":1,"535":1,"536":1,"540":2,"591":1,"592":1,"638":1,"651":1,"691":1,"727":1,"743":1,"781":1,"799":1,"803":1,"804":1,"805":1,"812":1,"818":2,"831":1,"840":2,"891":2,"916":1,"955":1,"959":1,"971":1,"974":1,"990":1,"1004":1,"1006":2,"1012":3,"1018":3,"1069":1,"1077":1,"1083":1,"1089":1,"1092":1,"1093":1,"1125":1,"1126":1,"1129":1,"1136":1,"1153":1,"1184":1,"1212":1,"1229":1,"1259":4,"1263":1,"1270":1,"1271":1,"1286":4,"1300":2,"1309":2,"1311":4,"1323":2,"1324":13,"1326":1,"1339":3,"1350":2,"1352":1,"1355":1,"1359":5,"1369":1,"1380":1,"1390":1,"1395":3,"1396":7,"1402":2,"1413":1,"1415":4,"1417":1,"1422":1,"1426":1,"1435":1,"1436":13,"1438":1,"1441":1,"1445":1,"1455":4,"1460":1,"1467":2,"1475":1,"1476":3,"1496":4,"1575":1,"1582":1,"1607":2,"1644":1,"1648":1,"1660":1,"1666":1,"1686":1,"1695":1,"1701":1,"1727":1,"1741":2,"1742":1,"1748":1,"1765":1,"1799":1,"1812":1,"1823":1,"1843":2,"1854":1,"1856":1,"1858":1,"1884":1,"1922":1,"1961":1,"1968":1,"2044":1,"2048":1,"2059":1,"2082":1,"2088":1,"2143":1,"2146":1,"2148":1,"2154":1,"2162":1,"2163":1,"2166":1,"2178":1,"2179":2,"2234":2}}],["moved",{"0":{"95":1},"3":{"0":5,"43":1,"57":1,"59":1,"82":1,"91":1,"93":1,"99":1,"104":3,"111":1,"125":1,"126":1,"130":3,"137":1,"138":5,"139":7,"140":1,"142":2,"161":1,"167":1,"168":1,"171":1,"179":1,"180":1,"201":1,"223":1,"238":1,"241":1,"243":1,"248":1,"250":1,"251":2,"252":2,"254":3,"255":2,"256":3,"257":1,"258":1,"259":1,"261":2,"276":1,"296":1,"322":1,"323":1,"364":1,"365":1,"374":1,"383":1,"395":1,"407":1,"418":2,"424":1,"425":2,"426":1,"428":3,"429":4,"430":1,"446":1,"453":1,"457":2,"463":2,"464":1,"465":1,"468":1,"475":1,"476":1,"478":1,"487":1,"488":1,"489":1,"490":2,"491":1,"492":2,"493":3,"495":2,"497":1,"516":2,"522":1,"524":1,"528":1,"534":2,"536":1,"539":1,"540":2,"543":1,"547":1,"549":1,"551":1,"552":2,"559":1,"607":2,"609":1,"611":1,"618":1,"631":1,"632":1,"638":1,"647":1,"652":1,"677":1,"688":1,"693":1,"696":2,"714":1,"720":1,"747":2,"821":1,"822":1,"825":2,"832":2,"845":1,"867":1,"875":1,"877":1,"909":1,"926":1,"929":1,"934":1,"967":1,"975":1,"983":2,"994":1,"1016":2,"1021":2,"1037":1,"1040":1,"1049":2,"1054":1,"1078":1,"1099":1,"1127":1,"1133":1,"1237":1,"1247":1,"1259":2,"1270":1,"1271":1,"1286":3,"1300":1,"1311":1,"1323":4,"1324":6,"1339":2,"1342":1,"1350":6,"1359":2,"1366":1,"1367":1,"1369":2,"1371":1,"1380":2,"1395":7,"1396":6,"1402":2,"1409":1,"1415":4,"1416":1,"1417":1,"1431":1,"1436":27,"1438":1,"1445":1,"1447":2,"1453":1,"1455":1,"1467":1,"1474":1,"1475":1,"1476":2,"1489":2,"1490":1,"1496":61,"1500":1,"1524":1,"1526":1,"1531":2,"1535":1,"1544":1,"1589":1,"1591":1,"1596":1,"1611":1,"1639":1,"1729":1,"1764":1,"1766":1,"1816":1,"1888":1,"1889":1,"1997":1,"2049":1,"2052":1,"2168":1,"2171":1,"2192":1,"2194":1,"2234":1}}],["mostsevere",{"2":{"109":1,"1222":1,"1225":1},"3":{"109":2,"1222":1,"1225":1,"1229":2,"1311":1,"1312":2}}],["mostly",{"3":{"41":1,"135":1,"267":1,"409":1,"734":1,"1011":1,"1264":1,"1270":1,"1311":1,"1312":1,"1350":1,"1359":1,"1380":1,"1396":1,"1436":4,"1438":1,"1496":2,"1551":1,"1577":1,"1582":1,"1583":1,"1585":2,"1931":1,"2052":1,"2076":1,"2158":1}}],["most",{"0":{"2044":1},"3":{"0":5,"24":2,"69":1,"109":3,"110":1,"111":1,"132":1,"150":1,"157":1,"178":1,"235":1,"243":1,"255":1,"312":1,"329":1,"349":1,"351":1,"352":1,"390":1,"402":1,"459":2,"460":1,"463":1,"470":1,"472":1,"487":1,"500":1,"518":1,"556":1,"584":1,"590":1,"599":1,"625":1,"628":3,"641":1,"650":1,"692":1,"725":1,"742":1,"781":1,"811":1,"819":2,"821":1,"826":1,"830":1,"839":1,"840":1,"842":1,"854":1,"941":1,"947":1,"971":1,"973":1,"984":1,"998":1,"1004":1,"1020":2,"1033":1,"1051":1,"1058":1,"1067":1,"1075":1,"1085":1,"1115":1,"1116":1,"1125":1,"1126":1,"1140":2,"1154":1,"1191":1,"1200":1,"1212":3,"1216":1,"1218":1,"1224":1,"1226":1,"1229":4,"1237":5,"1247":2,"1251":1,"1252":1,"1254":2,"1255":1,"1259":6,"1264":1,"1265":1,"1267":1,"1270":7,"1271":3,"1274":1,"1280":1,"1283":1,"1286":19,"1290":1,"1291":1,"1300":8,"1301":4,"1309":2,"1310":2,"1311":15,"1312":2,"1316":1,"1322":1,"1323":8,"1324":14,"1333":1,"1337":1,"1338":1,"1339":11,"1340":2,"1343":1,"1347":2,"1348":1,"1350":7,"1352":1,"1358":1,"1359":32,"1361":1,"1363":1,"1366":1,"1369":4,"1372":1,"1373":1,"1376":1,"1379":1,"1380":4,"1390":1,"1395":13,"1396":21,"1397":1,"1399":1,"1401":1,"1402":12,"1403":1,"1405":1,"1414":1,"1415":6,"1417":19,"1426":1,"1428":1,"1431":1,"1436":22,"1438":3,"1441":1,"1442":1,"1443":1,"1445":1,"1447":1,"1453":1,"1455":8,"1458":1,"1460":1,"1465":1,"1467":2,"1475":2,"1489":4,"1492":2,"1496":2,"1525":1,"1526":2,"1527":1,"1531":1,"1537":3,"1574":2,"1578":1,"1585":1,"1625":1,"1627":1,"1630":2,"1631":2,"1632":1,"1638":1,"1639":1,"1641":4,"1656":1,"1666":2,"1677":1,"1683":1,"1702":1,"1765":3,"1769":1,"1782":1,"1795":1,"1796":1,"1797":1,"1799":2,"1800":1,"1802":4,"1803":1,"1805":2,"1806":2,"1813":2,"1823":1,"1840":1,"1843":1,"1847":1,"1849":1,"1858":1,"1860":1,"1878":1,"1900":2,"1908":1,"1915":1,"1917":1,"1922":1,"1927":4,"1931":1,"1933":1,"1959":1,"1960":1,"1964":1,"1973":2,"1974":1,"1978":1,"1986":1,"1987":1,"1989":1,"1999":2,"2002":1,"2003":1,"2011":1,"2016":2,"2019":1,"2030":2,"2033":1,"2034":1,"2037":1,"2039":1,"2043":1,"2048":2,"2050":4,"2051":1,"2068":1,"2070":1,"2071":2,"2080":1,"2081":1,"2083":1,"2089":1,"2097":1,"2102":1,"2106":1,"2108":1,"2110":1,"2113":1,"2116":1,"2123":2,"2126":1,"2131":1,"2133":1,"2137":1,"2148":1,"2157":2,"2172":2,"2173":1,"2191":1,"2197":1,"2222":1,"2232":1}}],["modreq",{"3":{"1168":1}}],["modificar",{"3":{"1686":1}}],["modification",{"3":{"564":1,"566":1,"1244":1,"1270":4,"1286":5,"1323":1,"1324":1,"1359":2,"1415":1,"1630":1,"1749":1,"1823":1}}],["modifier",{"3":{"1259":1,"1270":1,"1286":1,"1359":1,"1369":1,"1380":1,"1395":1,"1431":1,"1436":4,"1630":1}}],["modifiers",{"3":{"1214":1}}],["modified",{"2":{"2169":1},"3":{"344":1,"698":1,"714":1,"715":2,"716":1,"1274":1,"1277":1,"1286":17,"1323":1,"1436":1,"1438":1,"1496":2,"1545":1,"1632":1,"1633":1,"1636":1,"1755":1,"1839":1,"1851":1,"1871":1,"1876":1,"2169":1}}],["modifying",{"3":{"1286":1,"1359":1,"1458":1}}],["modify",{"3":{"0":1,"245":2,"248":1,"249":1,"253":1,"254":1,"256":1,"257":1,"279":1,"285":1,"286":1,"340":1,"732":1,"733":1,"854":1,"856":1,"857":1,"1286":1,"1292":1,"1300":4,"1301":6,"1395":1,"1438":3,"1542":1,"1631":1,"1638":1,"1869":1,"1877":2,"1915":1,"2002":1}}],["modalities",{"3":{"1395":1}}],["modally",{"3":{"682":1,"1417":4}}],["modal",{"3":{"0":1,"682":1,"684":1,"1324":1,"1417":8}}],["mode=complete",{"3":{"1472":1}}],["mode=form",{"3":{"1311":1,"1975":1}}],["mode=max",{"3":{"868":1,"1455":4,"1465":2}}],["moderating",{"3":{"1395":1,"1402":3,"1946":1}}],["moderationqueue",{"3":{"1402":2}}],["moderationaction",{"3":{"1199":6,"1203":1,"1207":2,"1402":12}}],["moderation",{"3":{"523":1,"897":2,"900":1,"1342":1,"1349":2,"1350":10,"1353":1,"1355":1,"1359":11,"1378":2,"1380":2,"1381":1,"1388":1,"1395":11,"1396":16,"1398":1,"1399":2,"1401":2,"1402":75,"1438":3,"1626":1,"1627":2,"1629":1,"1630":1,"1631":3,"1632":5,"1635":1,"1748":2,"1750":1,"1760":1,"1763":1,"1765":3,"1771":1}}],["moderateasync",{"3":{"1402":3}}],["moderatequestioncommand",{"3":{"1199":5,"1203":1,"1207":2,"1402":7,"1436":1}}],["moderatequestionhandlertests",{"3":{"1199":1,"1207":3}}],["moderatequestionhandler",{"2":{"522":1,"523":1,"1100":1,"1399":1},"3":{"522":2,"523":2,"897":2,"1100":2,"1199":2,"1203":1,"1207":2,"1247":1,"1270":2,"1350":2,"1396":4,"1399":10,"1402":8,"1436":1}}],["moderated",{"3":{"1192":1,"1202":1,"1203":1,"1350":1,"1402":2}}],["moderate",{"3":{"522":1,"523":1,"897":1,"1100":1,"1203":2,"1207":4,"1247":1,"1270":2,"1350":1,"1395":3,"1396":2,"1399":1,"1402":9,"1626":1,"1632":1,"1748":2,"1760":1,"1765":3,"1768":2,"1771":1}}],["moderators",{"3":{"1396":4,"1399":1,"1402":11,"1748":1,"1765":1}}],["moderator",{"3":{"391":1,"1350":1,"1396":3,"1397":1,"1402":21,"1438":1,"1630":1,"1632":2,"1764":1,"1765":3,"1768":1}}],["modernizing",{"3":{"2215":1,"2220":1,"2222":1}}],["modernize",{"3":{"1396":1}}],["modernization",{"3":{"1012":1,"1526":1,"1531":1,"1532":1,"1544":1,"1576":1,"1577":1,"2222":1}}],["modern",{"3":{"309":1,"743":1,"799":1,"1049":1,"1237":1,"1286":1,"1292":1,"1417":1,"1436":3,"1994":1,"2072":1,"2078":1,"2216":1,"2222":1,"2223":1,"2228":1,"2241":1,"2242":1}}],["modest",{"3":{"1474":1,"2034":2,"2061":1}}],["modes",{"1":{"504":1,"505":1,"506":1,"507":1,"508":1,"509":1,"510":1,"511":1,"512":1,"513":1,"514":1},"3":{"0":1,"16":1,"100":1,"101":1,"185":1,"504":1,"520":1,"536":1,"555":1,"626":2,"666":1,"880":1,"885":1,"1152":1,"1189":1,"1212":1,"1229":1,"1247":2,"1259":2,"1270":1,"1286":4,"1311":3,"1324":5,"1339":1,"1350":1,"1359":3,"1395":2,"1396":1,"1415":2,"1417":2,"1424":1,"1427":1,"1436":7,"1453":2,"1467":1,"1490":2,"1492":1,"1559":1,"1577":1,"1648":1,"1664":1,"1684":1,"1721":1,"1890":1,"1899":1,"1952":1,"2081":1,"2083":1,"2234":1}}],["model=",{"3":{"1596":1}}],["modeltype",{"3":{"1311":2}}],["modeltestcontext",{"3":{"1199":2,"1207":1}}],["modelmetadata",{"3":{"1311":2}}],["modelconfigurationbuilder",{"3":{"1286":1}}],["modelidvalue",{"3":{"1018":2,"1369":1,"1526":1}}],["modelid",{"2":{"1090":1,"1425":1},"3":{"1018":2,"1090":1,"1212":1,"1350":1,"1359":3,"1366":1,"1425":2,"1427":5,"1496":1}}],["modeling",{"3":{"168":1,"1229":1,"1286":1,"1309":1,"1324":1,"1350":5,"1359":3,"1380":2,"1395":2,"1402":1,"1415":1,"1417":1,"1436":1,"1473":1,"1804":1,"1811":1}}],["modelused",{"2":{"1018":1},"3":{"1018":1,"1350":9,"1359":2,"1362":1,"1369":2}}],["modelling",{"3":{"683":1,"1041":1,"1115":1,"1162":1,"1218":1,"1249":1,"1259":1,"1300":1,"1311":1,"1323":1,"1324":1,"1339":1,"1350":3,"1359":3,"1362":1,"1369":1,"1395":2,"1402":3,"1415":2,"1436":1,"1776":1,"2185":1}}],["modelled",{"3":{"0":1,"691":1,"1108":1,"1217":1,"1247":1,"1270":1,"1286":2,"1311":1,"1323":1,"1324":1,"1350":2,"1359":3,"1396":1,"1415":2,"1436":3,"1631":2}}],["modelbindingresult",{"3":{"1311":1}}],["modelbinding",{"3":{"1311":1}}],["modelbinders",{"3":{"330":1,"880":1,"883":1,"1203":1,"1207":4,"1241":1,"1247":1,"1311":3}}],["modelbinder",{"3":{"330":1,"741":1,"1311":1,"1380":1,"1988":1}}],["modelbuilderextensions",{"3":{"1199":2,"1203":1,"1207":2,"1208":1,"1282":3,"1286":14}}],["modelbuilderextensionstests",{"3":{"1198":1,"1199":2,"1207":6,"1286":2}}],["modelbuilder",{"2":{"697":1},"3":{"200":1,"697":1,"715":1,"1208":2,"1282":1,"1286":13,"1396":1}}],["modelvalidationtests",{"3":{"1199":1,"1207":7}}],["modelvalidation",{"2":{"117":1,"128":2,"1596":1},"3":{"117":2,"128":4,"1199":24,"1203":1,"1207":2,"1324":18,"1384":1,"1395":26,"1396":6,"1436":1,"1496":1,"1591":1,"1596":2,"1600":1}}],["modeled",{"3":{"109":1,"1286":3,"1300":3,"1309":3,"1342":2,"1350":5,"1359":2,"1380":3,"1395":2,"1396":4,"1402":2,"1417":1,"1531":1,"1532":1,"2241":1}}],["model",{"0":{"1228":1,"1281":1,"1468":1,"1630":1,"1652":1,"1761":1,"1771":1},"1":{"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"1088":1,"1089":1,"1090":1,"1091":1,"1092":1,"1093":1,"1094":1,"1095":1,"1096":1,"1148":1,"1149":1,"1150":1,"1151":1,"1152":1,"1153":1,"1154":1,"1155":1,"1156":1,"1157":1,"1340":1,"1341":1,"1342":1,"1343":1,"1344":1,"1345":1,"1346":1,"1347":1,"1348":1,"1349":1,"1350":1,"1808":1,"1809":1,"1810":1,"1811":1,"1812":1,"1854":1,"1855":1,"1856":1,"1857":1,"1858":1,"1859":1,"1860":1,"1861":1,"1862":1},"2":{"1083":1,"1594":1,"2176":1},"3":{"0":36,"25":1,"26":1,"38":1,"39":1,"52":1,"53":1,"81":1,"109":2,"117":1,"121":1,"124":1,"126":1,"128":1,"163":1,"166":3,"167":1,"168":1,"185":1,"186":2,"187":1,"188":1,"193":1,"200":2,"201":1,"223":1,"226":1,"227":1,"228":1,"230":4,"274":1,"277":1,"284":1,"291":2,"293":1,"296":1,"313":1,"317":1,"318":3,"319":1,"320":1,"329":1,"332":2,"341":1,"346":1,"350":1,"358":1,"362":1,"384":1,"397":1,"408":1,"434":1,"458":1,"462":1,"470":1,"497":2,"498":1,"501":1,"507":1,"560":1,"563":2,"564":2,"566":1,"567":1,"572":1,"582":1,"587":2,"599":1,"600":1,"605":1,"612":1,"641":1,"650":1,"651":1,"656":1,"657":2,"670":1,"686":1,"690":1,"697":1,"698":5,"699":5,"707":3,"708":1,"720":1,"733":1,"737":1,"748":1,"755":1,"756":2,"758":1,"761":1,"762":1,"783":1,"790":1,"797":1,"798":1,"811":1,"821":1,"834":1,"842":1,"857":1,"889":5,"890":1,"891":4,"903":2,"904":1,"905":2,"906":1,"907":3,"910":1,"913":2,"914":5,"915":3,"918":1,"929":2,"931":1,"932":1,"934":1,"946":1,"950":1,"974":1,"1011":2,"1012":6,"1013":1,"1016":2,"1017":7,"1018":19,"1019":8,"1020":5,"1025":1,"1026":2,"1027":1,"1033":2,"1034":2,"1035":1,"1036":1,"1042":1,"1044":1,"1049":1,"1050":3,"1051":3,"1052":2,"1058":1,"1059":2,"1060":1,"1062":1,"1068":1,"1069":2,"1076":1,"1083":10,"1084":2,"1085":3,"1088":1,"1089":2,"1090":9,"1091":12,"1092":5,"1093":5,"1094":3,"1118":1,"1133":1,"1137":1,"1139":1,"1140":2,"1142":1,"1148":1,"1149":1,"1150":1,"1151":1,"1152":1,"1155":1,"1160":1,"1168":1,"1170":1,"1174":1,"1176":2,"1177":1,"1178":2,"1180":1,"1192":3,"1202":2,"1203":2,"1212":11,"1213":1,"1220":1,"1230":2,"1235":1,"1237":11,"1241":2,"1247":5,"1249":2,"1259":5,"1263":1,"1269":1,"1270":11,"1271":3,"1272":1,"1273":5,"1276":1,"1277":1,"1278":1,"1279":2,"1280":2,"1281":11,"1282":1,"1283":1,"1284":1,"1286":207,"1287":2,"1290":3,"1296":1,"1297":2,"1300":37,"1302":1,"1309":10,"1310":4,"1311":18,"1312":4,"1320":1,"1323":29,"1324":108,"1326":1,"1328":1,"1339":6,"1340":2,"1342":3,"1347":2,"1348":2,"1350":54,"1359":44,"1362":3,"1363":1,"1365":1,"1366":5,"1368":1,"1369":30,"1371":1,"1373":2,"1374":1,"1380":5,"1381":1,"1384":4,"1386":1,"1395":200,"1396":54,"1401":1,"1402":16,"1409":1,"1410":1,"1412":1,"1415":10,"1416":3,"1417":9,"1418":3,"1419":2,"1420":6,"1422":6,"1423":1,"1424":3,"1425":2,"1426":3,"1427":41,"1428":2,"1429":2,"1431":5,"1435":8,"1436":118,"1438":12,"1441":1,"1442":2,"1443":1,"1446":1,"1453":3,"1455":14,"1456":1,"1461":1,"1462":4,"1467":8,"1469":2,"1476":1,"1488":3,"1489":2,"1490":2,"1492":7,"1496":10,"1503":1,"1508":1,"1511":1,"1524":2,"1526":15,"1527":1,"1530":1,"1531":1,"1532":2,"1534":8,"1535":1,"1537":2,"1541":4,"1543":1,"1544":2,"1545":2,"1548":3,"1553":11,"1554":1,"1556":1,"1572":2,"1575":3,"1576":1,"1577":8,"1578":1,"1581":1,"1582":3,"1583":1,"1585":5,"1591":5,"1592":1,"1594":1,"1596":2,"1599":4,"1600":1,"1614":1,"1621":1,"1627":1,"1630":2,"1631":2,"1635":1,"1636":1,"1638":3,"1639":3,"1640":1,"1641":4,"1651":1,"1653":1,"1663":1,"1664":1,"1686":2,"1697":3,"1704":1,"1721":1,"1724":1,"1727":1,"1735":1,"1757":1,"1776":1,"1779":2,"1781":1,"1784":1,"1790":1,"1795":1,"1799":1,"1805":1,"1807":1,"1808":3,"1809":1,"1810":1,"1812":2,"1839":1,"1849":10,"1851":4,"1853":1,"1854":1,"1856":2,"1858":7,"1859":1,"1861":2,"1862":1,"1863":3,"1864":1,"1866":2,"1868":1,"1871":1,"1872":1,"1874":1,"1875":1,"1894":1,"1898":1,"1901":2,"1904":1,"1908":1,"1920":1,"1923":1,"1925":1,"1927":1,"1928":1,"1930":2,"1948":1,"1961":1,"1964":1,"1978":1,"1980":1,"1982":1,"1984":1,"1991":3,"1992":1,"1994":1,"1995":2,"1997":1,"2009":1,"2019":2,"2054":2,"2056":1,"2062":2,"2065":1,"2066":2,"2070":1,"2079":1,"2080":1,"2085":1,"2088":1,"2116":1,"2127":2,"2142":1,"2143":1,"2148":1,"2156":1,"2158":3,"2168":1,"2172":2,"2173":4,"2174":1,"2175":2,"2176":8,"2177":1,"2178":3,"2179":3,"2180":2,"2181":5,"2182":8,"2194":1,"2197":1,"2200":1,"2201":1,"2208":2,"2209":1,"2211":1,"2222":2,"2229":1,"2231":1,"2232":2,"2234":9,"2241":2}}],["modelsnapshot",{"3":{"1497":1}}],["modelstatedictionary",{"3":{"1311":1}}],["models",{"0":{"1347":1,"1356":1,"1384":1},"3":{"0":1,"95":1,"115":1,"117":1,"128":1,"165":1,"224":1,"242":1,"255":1,"659":1,"731":1,"810":1,"932":1,"1028":1,"1083":2,"1085":2,"1234":1,"1237":1,"1286":4,"1311":2,"1324":7,"1339":1,"1340":2,"1347":1,"1350":6,"1359":2,"1380":7,"1395":7,"1396":3,"1402":6,"1415":1,"1436":20,"1488":1,"1496":1,"1543":1,"1567":1,"1577":2,"1600":1,"1803":1,"2146":1}}],["mode",{"0":{"1270":1,"2078":1},"1":{"270":1,"271":1,"272":1,"273":1,"274":1,"275":1,"276":1,"277":1,"553":1,"554":1,"555":1,"556":1,"557":1,"558":1,"559":1,"560":1,"928":1,"929":1,"930":1,"931":1,"932":1,"933":1,"934":1,"935":1,"2083":1,"2084":1,"2085":1,"2086":1,"2087":1,"2088":1},"3":{"0":17,"18":1,"20":1,"23":1,"31":1,"100":1,"101":1,"135":1,"146":1,"147":1,"168":1,"216":1,"226":1,"234":1,"235":1,"236":1,"243":2,"245":5,"255":1,"259":1,"265":1,"270":1,"272":1,"273":1,"283":1,"361":1,"368":2,"373":3,"401":1,"483":1,"507":2,"508":1,"516":1,"518":1,"519":1,"520":1,"526":1,"527":1,"529":1,"530":2,"531":2,"532":1,"536":1,"537":1,"553":1,"555":4,"556":12,"557":2,"558":6,"560":2,"592":1,"609":1,"610":1,"618":2,"622":1,"626":2,"633":6,"648":1,"653":1,"684":1,"699":1,"700":1,"702":1,"716":1,"718":1,"740":1,"758":1,"765":1,"767":1,"809":1,"811":1,"825":1,"845":1,"856":2,"860":1,"863":1,"865":2,"867":3,"868":1,"873":2,"876":4,"877":1,"881":1,"883":1,"885":1,"923":1,"928":1,"940":1,"954":1,"955":1,"956":1,"982":1,"997":1,"1018":2,"1034":1,"1055":1,"1067":1,"1074":2,"1091":2,"1099":1,"1100":2,"1101":2,"1125":1,"1212":7,"1228":1,"1229":4,"1237":1,"1240":1,"1247":1,"1257":3,"1259":21,"1270":1,"1271":1,"1286":14,"1288":1,"1300":11,"1301":2,"1311":9,"1323":6,"1324":41,"1326":1,"1332":1,"1334":1,"1336":1,"1339":19,"1350":1,"1357":1,"1359":9,"1362":1,"1369":2,"1384":1,"1389":1,"1391":1,"1395":21,"1396":17,"1402":3,"1415":2,"1416":2,"1417":6,"1427":9,"1432":1,"1433":1,"1436":45,"1438":3,"1441":3,"1442":1,"1443":1,"1445":6,"1449":2,"1450":1,"1451":1,"1453":4,"1454":1,"1455":4,"1456":1,"1459":1,"1460":2,"1461":1,"1463":3,"1467":9,"1469":1,"1472":1,"1473":1,"1475":1,"1476":1,"1478":2,"1486":2,"1487":1,"1488":2,"1490":2,"1491":1,"1492":9,"1496":1,"1524":1,"1526":3,"1531":2,"1534":1,"1535":1,"1566":1,"1577":12,"1582":1,"1585":1,"1589":1,"1591":5,"1596":1,"1600":1,"1608":1,"1641":1,"1643":2,"1644":1,"1645":2,"1648":1,"1649":1,"1655":1,"1660":1,"1661":2,"1669":1,"1670":1,"1673":1,"1675":4,"1696":1,"1731":5,"1742":1,"1750":1,"1773":2,"1790":1,"1825":1,"1842":2,"1851":1,"1895":2,"1896":1,"1914":1,"1922":1,"1923":2,"1948":1,"1951":1,"1959":1,"1961":1,"1968":2,"1969":1,"1994":1,"1997":1,"2002":1,"2021":1,"2028":1,"2032":1,"2037":1,"2044":1,"2051":1,"2057":1,"2072":1,"2075":1,"2078":1,"2080":1,"2081":2,"2082":3,"2083":3,"2088":2,"2091":1,"2144":1,"2147":1,"2148":1,"2150":1,"2152":1,"2176":1,"2185":1,"2206":1,"2212":1,"2234":4}}],["modulo",{"3":{"1286":1,"1436":1,"1475":1}}],["modularity",{"3":{"1436":3}}],["modular",{"0":{"1509":1,"1783":1},"1":{"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"1788":1,"1789":1,"1790":1,"1791":1,"1792":1,"1793":1,"2089":1,"2090":1,"2091":1,"2092":1,"2093":1,"2094":1,"2095":1,"2096":1,"2097":1,"2098":1,"2099":1,"2100":1},"3":{"0":1,"30":1,"56":1,"58":3,"62":1,"329":1,"396":1,"405":1,"582":1,"781":1,"905":1,"1211":1,"1212":1,"1259":2,"1270":1,"1290":1,"1300":5,"1310":1,"1312":2,"1323":3,"1324":1,"1359":1,"1395":1,"1396":2,"1402":2,"1436":3,"1455":1,"1489":1,"1534":1,"1536":1,"1544":1,"1646":1,"1647":1,"1659":1,"1675":1,"1692":1,"1779":1,"1780":2,"1781":1,"1787":1,"1788":1,"1793":1,"1864":1,"1878":1,"1886":1,"1986":1,"2010":1,"2089":1,"2157":1,"2206":1,"2207":1,"2212":1,"2214":1,"2215":2,"2216":2,"2220":1,"2221":1,"2223":1,"2229":1,"2232":1,"2241":2,"2245":1}}],["moduledefinition",{"3":{"1436":3}}],["moduledomains",{"3":{"1436":2}}],["moduledomain",{"3":{"1431":1,"1436":4}}],["modulebearingmap",{"3":{"1436":2}}],["modulelayerisolated",{"3":{"1436":1}}],["modulelayer",{"3":{"1436":1}}],["modulelessmap",{"3":{"1436":1}}],["moduleless",{"3":{"1436":1}}],["moduleloaderlogger",{"3":{"1311":1}}],["moduleloadertests",{"3":{"583":7,"586":1,"1199":1,"1207":16,"1315":1,"1323":2,"1438":2}}],["moduleloader",{"0":{"1881":1},"2":{"58":1,"59":1,"60":1,"63":1,"117":1,"295":2,"582":1,"587":1,"633":1,"636":1,"1378":1,"1413":1,"1509":1,"1700":1,"1701":1,"1884":1,"1886":1,"2020":1,"2027":1,"2096":1,"2097":1,"2099":1,"2100":1},"3":{"58":1,"59":3,"60":1,"63":3,"117":2,"122":1,"295":3,"582":1,"583":18,"584":5,"585":6,"586":1,"587":1,"633":1,"636":1,"674":1,"980":1,"1199":8,"1202":1,"1203":2,"1207":2,"1286":2,"1309":4,"1311":21,"1313":1,"1315":28,"1323":20,"1350":2,"1359":1,"1369":3,"1377":1,"1378":1,"1380":7,"1396":6,"1413":1,"1415":4,"1431":1,"1436":5,"1438":1,"1447":1,"1496":2,"1509":1,"1534":1,"1577":1,"1653":2,"1662":1,"1684":1,"1700":1,"1701":1,"1728":1,"1790":1,"1881":1,"1884":2,"1886":1,"2020":2,"2027":1,"2096":1,"2097":2,"2099":1,"2100":1}}],["moduletests",{"3":{"1436":2,"1489":1}}],["modulerequiredlayeroverrides",{"3":{"1436":3,"1489":1}}],["moduleinfrastructures",{"3":{"1436":1}}],["moduleinternallayersareisolated",{"3":{"1436":3}}],["moduleinternallayers",{"3":{"1436":2}}],["moduleinitializer",{"3":{"1433":1,"1436":2,"1488":1}}],["moduleisolationtests",{"3":{"1199":1,"1207":2,"1436":4,"1489":3,"1591":1}}],["moduleisolationtestsbasetests",{"3":{"1199":1,"1207":3,"1436":6,"1489":1}}],["moduleisolationtestsbase",{"3":{"587":1,"1199":2,"1207":2,"1431":1,"1436":8,"1489":1,"1654":1}}],["moduleof",{"3":{"1431":1,"1436":2}}],["modulepath",{"3":{"1324":4,"1417":1}}],["moduleprobemap",{"3":{"1199":2,"1207":1,"1436":6}}],["moduleenabled",{"2":{"1314":1},"3":{"1314":1,"1882":1}}],["moduleapis",{"3":{"1436":1}}],["moduleapplications",{"3":{"1436":2}}],["moduleapplication",{"3":{"1431":1,"1436":13}}],["moduleapplicationdbcontext",{"2":{"1363":1,"1404":1,"1412":1,"1500":1,"1685":1,"1686":1},"3":{"1199":3,"1203":3,"1207":6,"1363":5,"1369":17,"1396":8,"1404":2,"1412":2,"1415":6,"1496":2,"1500":1,"1651":1,"1685":1,"1686":1}}],["moduleassembly",{"2":{"1830":1},"3":{"1270":2,"1271":1,"1359":4,"1415":2,"1830":1}}],["moduleassemblies",{"2":{"1881":1},"3":{"0":1,"583":1,"1311":3,"1323":2,"1881":1}}],["modulehost",{"3":{"1311":10,"1312":1,"1323":3,"1380":1}}],["modulehostcontext",{"2":{"1881":1},"3":{"1199":4,"1203":1,"1207":2,"1311":16,"1315":3,"1323":6,"1881":1}}],["modulehostextensionstests",{"3":{"1199":1,"1207":2,"1311":5,"1438":2}}],["modulehostextensions",{"3":{"583":1,"674":1,"677":1,"980":2,"1199":1,"1203":1,"1207":2,"1208":1,"1311":9,"1315":3,"1323":6,"1339":1}}],["moduleconformancetestsbasetests",{"3":{"1199":1,"1207":9,"1436":32,"1489":4}}],["moduleconformancetestsbase",{"2":{"585":1,"1497":1},"3":{"585":2,"1199":6,"1207":2,"1323":2,"1428":1,"1431":3,"1436":15,"1438":1,"1489":2,"1496":2,"1497":1}}],["modulecontrollerfeatureprovidertests",{"3":{"1199":1,"1207":2}}],["modulecontrollerfeatureprovider",{"2":{"583":1},"3":{"583":2,"585":3,"1199":3,"1203":1,"1207":2,"1311":10,"1323":4}}],["modulecode",{"2":{"1133":1,"2044":1},"3":{"0":1,"1133":1,"1436":2,"1990":1,"2044":1}}],["modulename",{"2":{"1773":1},"3":{"405":1,"583":2,"585":1,"1270":5,"1286":2,"1300":1,"1311":3,"1315":2,"1323":5,"1324":2,"1380":1,"1415":1,"1436":2,"1773":1,"1856":1}}],["modulenames",{"2":{"80":1,"82":1},"3":{"80":1,"82":1,"1436":12}}],["modulenameconventionstests",{"3":{"1004":1,"1199":1,"1207":2,"1286":1,"1300":3,"1438":2}}],["modulenameconventions",{"3":{"0":1,"1004":2,"1199":5,"1203":1,"1207":2,"1263":1,"1270":3,"1286":8,"1300":10,"1662":1,"2044":1}}],["moduleshared",{"3":{"1436":6}}],["modulesdeclarelayers",{"3":{"1436":12}}],["modulesdeclareeveryexpectedlayer",{"2":{"1489":1},"3":{"1436":2,"1489":2}}],["modulessectionname",{"3":{"1324":1}}],["modulessettingstests",{"3":{"1199":1,"1207":2}}],["modulessettings",{"2":{"585":1,"1315":1,"1882":1,"2013":1,"2096":1},"3":{"0":1,"583":5,"584":1,"585":4,"586":1,"674":1,"979":1,"1199":10,"1203":1,"1207":2,"1311":18,"1313":1,"1315":2,"1320":4,"1323":9,"1436":4,"1662":1,"1882":1,"2013":1,"2096":1}}],["modulesbyname",{"3":{"1323":1}}],["modulescanning",{"2":{"115":1,"1262":1},"3":{"115":1,"122":1,"536":1,"552":1,"922":1,"927":1,"980":1,"1207":1,"1208":1,"1262":7,"1263":2,"1270":8,"1271":4,"1300":1,"1311":3,"1316":7,"1323":6,"1359":8,"1396":6,"1415":13,"2165":1}}],["modulesettings",{"2":{"585":1,"674":1,"1882":1},"3":{"0":1,"583":4,"584":1,"674":2,"677":1,"1199":5,"1203":1,"1207":2,"1313":1,"1315":1,"1320":4,"1323":5,"1882":2}}],["modules",{"0":{"1514":1,"2079":1},"1":{"1878":1,"1879":1,"1880":1,"1881":1,"1882":1,"1883":1,"1884":1,"1885":1,"1886":1},"2":{"576":1,"584":1,"586":1,"1004":1,"1639":1},"3":{"0":3,"42":2,"46":1,"52":1,"53":1,"54":1,"59":6,"60":1,"63":2,"72":3,"73":2,"80":6,"97":1,"109":1,"128":3,"132":1,"165":1,"184":1,"186":5,"230":6,"265":1,"295":4,"311":1,"318":1,"325":2,"344":1,"350":2,"352":3,"353":4,"360":1,"384":2,"388":2,"390":1,"391":2,"396":1,"401":1,"444":1,"448":2,"459":2,"463":2,"465":2,"466":1,"470":8,"475":8,"476":10,"477":8,"478":1,"491":1,"492":1,"493":2,"494":2,"495":2,"497":6,"499":2,"502":1,"522":1,"523":1,"524":1,"535":1,"536":1,"539":1,"545":15,"550":1,"551":1,"552":2,"556":8,"559":1,"572":1,"576":1,"577":2,"583":27,"584":1,"585":11,"586":5,"618":1,"633":1,"648":1,"649":4,"650":1,"651":1,"653":1,"657":6,"674":7,"675":2,"676":3,"690":1,"707":1,"724":3,"725":5,"728":2,"741":1,"743":2,"782":14,"784":2,"789":2,"790":7,"793":6,"794":4,"798":1,"799":1,"803":1,"804":1,"805":1,"809":1,"813":2,"846":1,"881":4,"889":1,"897":4,"900":1,"905":1,"924":4,"926":6,"946":2,"954":5,"956":1,"958":1,"960":1,"963":1,"980":2,"988":4,"995":1,"996":1,"1004":3,"1017":1,"1025":5,"1026":11,"1049":1,"1052":1,"1054":1,"1055":1,"1058":1,"1059":1,"1082":4,"1086":1,"1090":1,"1099":2,"1100":4,"1103":1,"1116":12,"1133":2,"1140":1,"1142":1,"1150":4,"1152":1,"1168":7,"1191":1,"1195":1,"1200":1,"1201":1,"1203":3,"1207":37,"1211":1,"1212":2,"1213":1,"1237":38,"1239":5,"1242":1,"1247":20,"1259":8,"1264":8,"1265":2,"1270":43,"1271":35,"1284":1,"1286":73,"1300":98,"1301":3,"1304":4,"1305":1,"1308":5,"1309":31,"1310":18,"1311":64,"1312":15,"1313":3,"1314":3,"1315":10,"1317":1,"1318":3,"1320":1,"1323":102,"1324":72,"1339":1,"1341":3,"1342":12,"1344":7,"1345":5,"1346":1,"1347":16,"1348":5,"1349":12,"1350":254,"1355":1,"1359":546,"1369":60,"1371":6,"1373":4,"1374":1,"1376":1,"1377":6,"1380":112,"1381":1,"1389":1,"1390":2,"1395":272,"1396":377,"1402":63,"1403":1,"1404":3,"1405":1,"1406":1,"1415":216,"1416":16,"1417":12,"1426":1,"1427":6,"1431":1,"1435":2,"1436":130,"1437":20,"1438":26,"1442":1,"1455":5,"1467":1,"1473":1,"1487":1,"1489":6,"1491":1,"1492":2,"1496":10,"1505":1,"1509":2,"1526":9,"1534":3,"1535":1,"1538":1,"1540":1,"1541":1,"1544":2,"1571":3,"1577":2,"1588":1,"1590":1,"1591":6,"1626":1,"1638":1,"1639":2,"1649":1,"1650":3,"1651":1,"1653":1,"1654":2,"1656":1,"1658":1,"1659":1,"1662":1,"1666":1,"1667":1,"1675":1,"1681":1,"1684":3,"1685":6,"1686":7,"1690":1,"1700":1,"1705":1,"1718":1,"1722":1,"1726":1,"1728":4,"1729":2,"1731":1,"1760":1,"1763":1,"1764":14,"1765":31,"1770":1,"1772":1,"1773":2,"1777":1,"1779":1,"1781":1,"1785":1,"1789":1,"1790":2,"1793":2,"1810":1,"1811":1,"1848":4,"1864":1,"1875":1,"1877":2,"1878":2,"1881":6,"1882":3,"1883":2,"1885":1,"1886":3,"1891":1,"1896":1,"1962":2,"1982":1,"2016":1,"2018":1,"2028":1,"2069":1,"2085":1,"2089":1,"2092":1,"2096":3,"2099":2,"2105":1,"2112":2,"2113":1,"2204":1,"2209":1,"2216":2,"2232":1,"2234":1}}],["module",{"0":{"1265":1,"1308":1,"1314":1,"1349":1,"1377":1,"1438":1,"1650":1,"1656":1,"1683":1,"1684":1,"1722":1,"1728":1,"1729":1,"1747":1,"1748":1,"1749":1,"1751":1,"1772":1,"1880":1,"1882":1,"1883":1,"1884":1,"2099":1},"1":{"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"580":1,"581":1,"582":1,"583":1,"584":1,"585":1,"586":1,"587":1,"1313":1,"1314":1,"1315":1,"1316":1,"1317":1,"1318":1,"1319":1,"1320":1,"1321":1,"1322":1,"1323":1,"1340":1,"1341":1,"1342":1,"1343":1,"1344":1,"1345":1,"1346":1,"1347":1,"1348":1,"1349":1,"1350":1,"1396":1,"1403":1,"1404":1,"1405":1,"1406":1,"1407":1,"1408":1,"1409":1,"1410":1,"1411":1,"1412":1,"1413":1,"1414":1,"1415":1,"1416":1,"1681":1,"1682":1,"1683":1,"1684":1,"1685":1,"1686":1,"1687":1,"1688":1,"1689":1,"1690":1,"1691":1,"2016":1,"2017":1,"2018":1,"2019":1,"2020":1,"2021":1,"2022":1,"2023":1,"2024":1,"2025":1,"2026":1,"2027":1,"2028":1,"2029":1,"2089":1,"2090":1,"2091":1,"2092":1,"2093":1,"2094":1,"2095":1,"2096":1,"2097":1,"2098":1,"2099":1,"2100":1},"2":{"1731":1,"1771":1,"1882":1,"2105":1},"3":{"0":52,"24":1,"30":1,"47":3,"51":1,"53":6,"56":1,"57":1,"58":4,"59":12,"60":6,"62":3,"63":4,"80":2,"81":4,"82":1,"109":2,"117":3,"121":2,"122":2,"127":2,"128":2,"131":2,"132":1,"143":1,"166":2,"168":1,"184":1,"186":16,"187":7,"265":2,"295":4,"300":1,"318":2,"324":1,"325":1,"328":1,"329":1,"341":2,"350":2,"401":1,"405":4,"439":1,"459":2,"460":1,"470":2,"471":3,"472":1,"473":2,"474":1,"490":1,"493":1,"498":1,"536":3,"544":1,"545":3,"547":2,"556":1,"558":1,"562":1,"564":1,"572":4,"576":1,"580":1,"582":6,"583":30,"584":13,"585":20,"586":1,"587":7,"631":3,"632":2,"633":18,"635":8,"636":3,"639":1,"645":1,"648":4,"649":12,"650":6,"651":3,"673":1,"674":2,"688":1,"690":2,"692":2,"697":1,"698":1,"700":1,"707":2,"709":1,"725":3,"727":1,"750":1,"773":1,"778":1,"781":1,"782":3,"783":1,"784":1,"792":1,"798":2,"799":6,"801":1,"802":1,"803":1,"805":1,"809":1,"846":2,"880":1,"889":2,"891":1,"893":1,"905":2,"906":1,"912":1,"920":2,"921":2,"922":7,"923":2,"924":4,"926":3,"933":1,"956":1,"963":1,"979":1,"980":2,"1004":8,"1007":1,"1008":1,"1016":1,"1018":5,"1020":1,"1021":2,"1022":1,"1026":2,"1027":1,"1034":1,"1048":1,"1049":2,"1050":1,"1052":1,"1053":1,"1058":1,"1059":4,"1077":1,"1083":1,"1084":1,"1090":2,"1094":3,"1095":2,"1116":1,"1117":2,"1118":1,"1132":1,"1133":8,"1134":2,"1135":3,"1140":1,"1143":1,"1145":5,"1147":1,"1149":1,"1150":3,"1151":1,"1152":2,"1155":5,"1168":7,"1170":1,"1192":7,"1194":1,"1195":1,"1201":4,"1202":11,"1203":11,"1211":3,"1212":16,"1213":1,"1229":3,"1234":1,"1237":7,"1241":1,"1244":1,"1247":6,"1248":1,"1249":5,"1252":2,"1257":1,"1259":29,"1260":1,"1261":1,"1262":4,"1263":6,"1265":7,"1269":2,"1270":64,"1271":37,"1273":4,"1274":1,"1276":1,"1279":2,"1281":2,"1282":2,"1283":4,"1284":1,"1286":87,"1289":1,"1297":5,"1300":68,"1301":3,"1304":3,"1308":4,"1309":67,"1310":17,"1311":90,"1312":13,"1313":5,"1314":8,"1315":11,"1316":4,"1320":3,"1321":2,"1322":1,"1323":108,"1324":119,"1328":1,"1333":1,"1337":1,"1339":9,"1340":4,"1341":6,"1342":1,"1344":1,"1345":1,"1347":1,"1348":3,"1349":5,"1350":79,"1351":2,"1352":2,"1353":2,"1354":7,"1355":7,"1357":1,"1359":299,"1360":3,"1362":2,"1363":5,"1366":1,"1367":2,"1368":6,"1369":39,"1370":3,"1377":5,"1378":1,"1379":2,"1380":43,"1381":2,"1384":1,"1386":2,"1389":1,"1391":1,"1392":1,"1394":1,"1395":55,"1396":258,"1398":1,"1401":1,"1402":40,"1403":3,"1404":6,"1405":2,"1409":6,"1410":1,"1412":1,"1414":2,"1415":141,"1416":31,"1417":25,"1427":2,"1429":3,"1431":4,"1436":417,"1437":11,"1438":23,"1441":1,"1445":3,"1446":1,"1455":7,"1458":1,"1467":1,"1486":1,"1487":13,"1488":1,"1489":29,"1490":2,"1496":29,"1509":2,"1512":1,"1513":2,"1514":1,"1526":3,"1534":2,"1538":1,"1541":1,"1544":2,"1545":1,"1550":1,"1551":1,"1571":1,"1572":1,"1576":1,"1577":5,"1582":4,"1591":7,"1596":1,"1599":1,"1602":2,"1618":3,"1621":1,"1627":2,"1631":1,"1638":3,"1639":4,"1646":5,"1647":5,"1649":4,"1650":10,"1651":16,"1652":1,"1653":6,"1654":6,"1656":3,"1658":2,"1660":2,"1661":9,"1662":7,"1663":7,"1664":2,"1665":2,"1666":6,"1667":1,"1669":4,"1670":4,"1671":7,"1672":1,"1673":3,"1674":2,"1675":1,"1681":7,"1682":1,"1683":2,"1684":18,"1685":2,"1686":11,"1687":2,"1688":3,"1689":1,"1690":3,"1691":2,"1692":1,"1694":2,"1695":3,"1697":1,"1698":1,"1700":4,"1701":6,"1702":1,"1703":3,"1705":1,"1717":2,"1718":2,"1719":2,"1720":1,"1721":1,"1722":6,"1724":4,"1726":6,"1727":25,"1728":20,"1729":10,"1730":5,"1731":9,"1746":1,"1748":1,"1749":2,"1751":1,"1757":1,"1760":1,"1761":1,"1763":1,"1764":1,"1765":7,"1769":1,"1771":3,"1772":7,"1773":1,"1775":3,"1779":2,"1781":1,"1783":2,"1788":1,"1789":2,"1790":5,"1793":3,"1810":2,"1815":3,"1816":1,"1817":1,"1823":1,"1824":5,"1828":1,"1830":4,"1838":1,"1842":3,"1849":6,"1853":1,"1855":2,"1856":4,"1857":1,"1864":1,"1865":1,"1866":1,"1868":1,"1875":2,"1878":5,"1879":3,"1880":5,"1881":10,"1882":14,"1883":3,"1884":8,"1885":4,"1886":5,"1888":1,"1889":1,"1891":2,"1893":1,"1899":1,"1916":1,"1925":1,"1930":1,"1933":1,"1946":2,"1950":1,"1956":4,"1957":4,"1962":6,"1963":7,"1965":2,"1978":1,"1981":1,"1990":3,"1995":1,"2013":2,"2015":1,"2016":4,"2017":3,"2020":3,"2027":2,"2031":2,"2043":2,"2044":8,"2066":1,"2068":1,"2076":1,"2079":10,"2082":1,"2085":2,"2088":1,"2089":4,"2090":2,"2091":3,"2092":1,"2096":9,"2097":7,"2098":1,"2099":13,"2100":9,"2105":3,"2106":1,"2112":1,"2113":2,"2115":1,"2121":1,"2128":1,"2132":1,"2136":1,"2138":1,"2140":1,"2141":1,"2145":1,"2158":1,"2163":1,"2168":1,"2169":1,"2170":2,"2180":1,"2181":2,"2191":1,"2209":1,"2210":1,"2211":2,"2212":2,"2222":2,"2229":3,"2230":1,"2232":3,"2234":8,"2236":1}}],["miami",{"3":{"2222":1}}],["mientras",{"3":{"1686":1}}],["mi",{"3":{"1526":1,"1590":2,"1591":2,"1600":1}}],["mildly",{"3":{"1396":1}}],["miles",{"3":{"1395":1}}],["million",{"3":{"1228":1,"1229":1,"1467":1}}],["millions",{"3":{"1150":1}}],["millisecond",{"3":{"930":1,"1399":1,"1402":2,"1436":1,"1946":1}}],["milliseconds",{"3":{"235":1,"397":1,"1268":1,"1270":1,"1323":1,"1339":3,"1436":2,"1443":1,"1638":1,"2051":1,"2053":1,"2158":1}}],["might",{"3":{"1247":1,"1286":1,"1323":2,"1359":2,"1366":1,"1396":2,"1415":2,"1417":1,"1424":1,"1436":2,"1803":1,"1810":1,"1868":2,"1886":1,"1913":1,"1930":1,"1954":3}}],["migrating",{"3":{"294":1,"1035":1,"1048":1,"1051":1,"1116":1,"1323":1,"1416":1,"1436":1,"1444":1}}],["migrationid",{"3":{"1323":3}}],["migrationattribute",{"3":{"1323":1}}],["migrationapplyprooftests",{"3":{"1199":1,"1207":4,"1323":4,"1438":2,"1577":1,"1586":1}}],["migrationproof",{"3":{"1323":3}}],["migrationpolicy",{"3":{"1175":2,"1199":8,"1203":1,"1207":2,"1278":1,"1279":1,"1280":2,"1286":16,"1311":1,"1496":1}}],["migrationbuilder",{"2":{"566":1},"3":{"566":1,"1323":3}}],["migrationless",{"3":{"296":1,"1311":5}}],["migrationsassemblyprefix",{"3":{"1436":1}}],["migrationsassemblysettingname",{"3":{"1286":3}}],["migrationsassembly",{"3":{"1286":12}}],["migrationsfixture",{"2":{"1453":1},"3":{"564":1,"1199":1,"1203":1,"1206":1,"1207":3,"1319":1,"1323":6,"1487":1,"1490":1}}],["migrations",{"0":{"1652":1,"1688":1},"1":{"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1},"2":{"291":1,"563":1,"564":2,"1037":1,"1044":1,"1180":1,"1369":1,"1497":1,"1614":1,"1652":1,"1657":1,"1688":2,"1697":3,"1719":1,"1722":2,"1727":1,"1728":3,"1729":2,"1731":1,"2099":1,"2194":1},"3":{"0":13,"49":1,"164":1,"166":1,"168":1,"169":1,"195":6,"200":2,"288":1,"290":7,"291":3,"295":2,"341":5,"343":1,"345":2,"350":2,"403":2,"563":2,"564":19,"568":2,"632":1,"633":5,"698":2,"699":1,"700":1,"701":1,"757":1,"872":1,"891":9,"905":3,"906":1,"918":1,"966":1,"1004":1,"1018":2,"1026":2,"1034":6,"1037":1,"1044":1,"1052":1,"1067":1,"1081":1,"1082":1,"1085":4,"1087":1,"1135":1,"1140":2,"1143":1,"1175":5,"1177":1,"1179":1,"1180":1,"1209":273,"1212":1,"1213":1,"1273":4,"1276":1,"1279":5,"1280":3,"1283":2,"1284":4,"1286":75,"1290":1,"1300":1,"1311":15,"1317":1,"1319":1,"1320":1,"1323":13,"1326":1,"1359":1,"1361":1,"1369":9,"1396":11,"1415":8,"1431":1,"1436":17,"1438":3,"1441":2,"1442":1,"1445":1,"1455":13,"1461":1,"1467":6,"1469":1,"1473":2,"1476":1,"1486":1,"1487":1,"1490":2,"1492":2,"1496":3,"1497":3,"1510":2,"1526":1,"1545":4,"1572":1,"1577":5,"1590":1,"1591":3,"1614":2,"1647":1,"1652":9,"1657":3,"1661":2,"1664":4,"1673":1,"1681":1,"1683":1,"1684":2,"1688":2,"1689":1,"1690":1,"1697":12,"1701":1,"1704":2,"1718":1,"1719":7,"1722":3,"1724":1,"1726":1,"1727":11,"1728":11,"1729":3,"1731":1,"1851":1,"1852":1,"1860":1,"2044":2,"2091":1,"2099":5,"2194":1,"2234":1}}],["migration",{"0":{"1697":1},"2":{"1697":1},"3":{"0":23,"15":2,"26":2,"41":2,"68":1,"78":1,"81":1,"167":1,"168":2,"195":4,"197":2,"200":3,"273":1,"275":2,"277":1,"290":1,"291":6,"292":3,"293":8,"294":1,"296":1,"308":1,"311":1,"348":2,"350":4,"352":1,"360":1,"403":1,"461":1,"474":2,"548":1,"562":4,"563":5,"564":10,"565":5,"566":6,"568":1,"598":1,"600":1,"609":1,"625":1,"630":1,"633":5,"635":1,"657":2,"691":1,"697":1,"698":1,"699":1,"700":1,"702":1,"707":1,"711":1,"715":2,"733":1,"756":3,"757":2,"759":3,"762":2,"797":4,"798":1,"799":4,"800":2,"801":1,"802":2,"803":1,"804":1,"805":1,"806":1,"810":1,"811":1,"812":1,"846":1,"848":2,"853":1,"855":1,"891":5,"893":1,"905":2,"907":3,"924":1,"929":1,"931":2,"932":1,"939":1,"947":1,"948":2,"965":1,"972":1,"973":1,"1004":1,"1016":1,"1026":1,"1034":2,"1035":1,"1037":1,"1042":1,"1044":1,"1046":1,"1048":2,"1049":2,"1050":1,"1051":4,"1052":1,"1054":1,"1059":1,"1060":1,"1061":1,"1082":1,"1085":5,"1089":1,"1145":1,"1174":1,"1175":1,"1177":1,"1178":2,"1179":1,"1212":4,"1259":4,"1273":3,"1281":1,"1284":1,"1286":24,"1290":1,"1293":1,"1300":7,"1309":2,"1311":8,"1316":1,"1319":3,"1323":24,"1324":1,"1326":1,"1339":1,"1350":1,"1369":8,"1402":1,"1408":1,"1415":5,"1429":1,"1436":5,"1438":1,"1455":21,"1460":1,"1461":2,"1467":8,"1469":1,"1471":1,"1474":1,"1475":1,"1477":1,"1478":1,"1490":1,"1492":1,"1496":2,"1497":1,"1508":1,"1526":2,"1545":1,"1577":1,"1586":1,"1591":3,"1600":1,"1614":1,"1641":3,"1650":1,"1651":1,"1652":3,"1661":2,"1663":1,"1664":2,"1684":1,"1688":3,"1689":1,"1697":3,"1701":1,"1709":1,"1718":1,"1719":3,"1721":1,"1722":1,"1724":1,"1727":3,"1728":3,"1729":2,"1731":1,"1765":1,"1787":1,"1788":1,"1810":1,"1842":1,"1848":1,"1852":1,"1853":1,"1854":1,"1875":2,"1876":1,"1889":2,"1891":1,"1948":1,"1978":1,"2009":1,"2014":1,"2021":1,"2034":1,"2039":1,"2066":1,"2085":2,"2087":1,"2099":1,"2194":2,"2204":1,"2222":3,"2234":4}}],["migrateasync",{"2":{"291":1},"3":{"291":1,"1278":1,"1286":4,"1311":3,"1323":2,"1577":1,"1664":1}}],["migrated",{"3":{"151":1,"200":1,"290":1,"563":1,"573":1,"633":1,"800":1,"1034":1,"1280":1,"1286":11,"1311":5,"1323":1,"1369":1,"1415":1,"1432":1,"1436":2,"1473":1,"1488":1,"1496":2,"1638":1,"1674":1,"1684":2,"1692":1,"1719":1,"1727":1,"1728":1,"1889":1,"2037":1,"2099":1}}],["migrates",{"3":{"0":3,"79":1,"294":1,"296":1,"468":1,"564":1,"698":1,"703":1,"1034":2,"1036":1,"1050":1,"1212":2,"1286":9,"1300":1,"1311":2,"1339":1,"1436":1,"1449":1,"1455":1,"1467":1,"1475":1,"1491":1,"1722":1,"1729":1,"1856":1}}],["migrate",{"2":{"291":1,"563":1,"1364":1,"1614":1,"1652":1,"1719":1},"3":{"0":2,"49":1,"102":1,"290":3,"291":4,"293":1,"295":1,"296":2,"311":1,"365":1,"563":1,"567":1,"846":1,"1212":1,"1286":4,"1311":6,"1320":1,"1323":4,"1364":1,"1417":1,"1429":1,"1436":1,"1438":2,"1455":2,"1467":2,"1473":2,"1490":1,"1570":1,"1614":1,"1652":1,"1653":1,"1665":1,"1684":1,"1719":2,"1792":1,"1905":1,"2056":1,"2234":1}}],["migrator",{"1":{"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1},"3":{"0":2,"20":1,"288":1,"291":3,"292":1,"295":1,"296":2,"563":1,"756":2,"757":1,"762":1,"1180":1,"1192":1,"1212":1,"1286":1,"1324":1,"1396":2,"1455":1,"1467":1,"1469":1,"1473":1,"1476":1,"1477":1,"1496":2,"1652":1,"1664":1,"2234":2}}],["mime",{"3":{"1116":1,"1286":4,"1324":2,"1417":3,"2150":1}}],["mib",{"3":{"875":1,"1125":1,"1324":2,"1467":1}}],["microphone",{"3":{"1339":1,"1417":6}}],["microphone=",{"3":{"214":1,"2151":1}}],["micro",{"3":{"1135":1,"1286":1,"1359":1,"1417":2,"1990":1}}],["microbenchmark",{"3":{"860":1}}],["microsecond",{"3":{"820":1,"2033":1}}],["microseconds",{"3":{"71":1,"819":1,"827":1,"1126":1,"1270":1,"1324":1,"1337":1,"1339":1,"1948":1,"2025":1}}],["microserviceextraction",{"3":{"1576":1,"1577":1}}],["microserviceextractiontests",{"2":{"54":1,"59":1,"150":1,"1525":1,"1535":1,"1591":1,"1790":1,"1793":1,"1842":1,"2017":1,"2029":1,"2044":1,"2050":1},"3":{"54":1,"59":1,"62":1,"150":1,"1199":2,"1207":4,"1257":1,"1259":3,"1436":12,"1489":7,"1494":1,"1525":1,"1526":2,"1535":1,"1576":1,"1577":1,"1586":1,"1591":2,"1790":1,"1793":1,"1842":1,"2017":1,"2029":1,"2044":1,"2050":1}}],["microserviceextractiontestsbase",{"2":{"1074":1,"1077":1,"1654":1,"1663":1,"2043":1,"2106":1},"3":{"0":1,"1074":2,"1077":1,"1199":3,"1207":2,"1312":1,"1431":1,"1436":9,"1489":1,"1576":1,"1577":1,"1654":1,"1663":1,"2043":1,"2106":1}}],["microservice",{"3":{"846":1,"1034":1,"1211":1,"1214":1,"1248":1,"1259":1,"1286":2,"1311":2,"1312":2,"1315":1,"1323":3,"1380":1,"1440":1,"1488":1,"1489":1,"1526":1,"1646":1,"1647":1,"1692":1,"1781":1,"1815":1,"1847":1,"1882":1,"1895":1,"2006":1,"2018":1,"2055":1,"2229":1}}],["microservices",{"0":{"1544":1,"1783":1},"1":{"1788":1,"1789":1,"1790":1,"1791":1,"1792":1,"1793":1},"3":{"46":1,"60":1,"1216":1,"1229":1,"1237":1,"1247":2,"1257":1,"1259":8,"1270":3,"1272":1,"1273":1,"1281":1,"1286":14,"1287":1,"1290":1,"1297":1,"1300":14,"1301":3,"1303":1,"1307":1,"1309":11,"1310":3,"1311":13,"1312":7,"1313":1,"1323":14,"1324":5,"1326":1,"1338":1,"1339":12,"1349":1,"1350":15,"1354":1,"1355":1,"1359":15,"1363":1,"1369":3,"1370":1,"1378":1,"1380":7,"1391":1,"1395":4,"1396":36,"1402":14,"1410":1,"1413":1,"1415":16,"1436":50,"1441":1,"1444":1,"1446":1,"1447":1,"1450":1,"1467":1,"1469":1,"1499":1,"1526":1,"1530":1,"1532":1,"1536":1,"1545":1,"1576":1,"1577":1,"1586":1,"1590":1,"1591":1,"1595":1,"1596":1,"1597":1,"1659":1,"1675":1,"1779":1,"1780":1,"1783":1,"1784":1,"1787":2,"1788":3,"1792":1,"1793":2,"1796":1,"1799":1,"1842":1,"1846":1,"1847":1,"1868":1,"1886":1,"1892":1,"1895":1,"1899":1,"2010":1,"2015":1,"2027":1,"2029":2,"2117":1,"2171":1,"2195":1,"2206":1,"2207":1,"2213":1,"2214":1,"2215":3,"2216":1,"2219":1,"2220":2,"2221":1,"2223":1,"2230":2,"2245":1}}],["microsoft",{"0":{"2107":1},"2":{"0":1,"135":1,"137":1,"138":1,"253":1,"300":2,"401":2,"409":1,"451":1,"452":1,"676":1,"732":1,"733":1,"1090":1,"1091":2,"1213":2,"1247":1,"1259":1,"1270":2,"1300":1,"1301":2,"1311":6,"1312":5,"1323":2,"1324":5,"1339":3,"1369":3,"1395":1,"1416":1,"1417":1,"1427":6,"1477":1,"1492":1,"1611":1,"1685":1,"1686":1,"1722":1,"1727":1,"1728":1,"1815":1,"1865":1,"1915":1,"1916":1,"2011":1,"2013":1,"2044":1,"2101":1,"2102":1,"2107":1,"2122":1,"2139":1,"2179":1,"2180":1,"2182":1},"3":{"0":6,"135":2,"137":1,"138":1,"253":1,"300":2,"397":1,"401":2,"409":1,"413":1,"451":1,"452":1,"609":2,"640":1,"673":1,"676":1,"732":1,"733":1,"868":2,"870":1,"954":1,"980":1,"1018":1,"1036":1,"1090":3,"1091":5,"1116":1,"1154":1,"1212":1,"1213":11,"1215":1,"1244":1,"1247":3,"1259":4,"1270":12,"1286":26,"1300":19,"1301":6,"1309":18,"1310":2,"1311":40,"1312":5,"1323":25,"1324":61,"1339":21,"1359":20,"1369":26,"1380":4,"1395":7,"1396":11,"1402":1,"1415":14,"1416":9,"1417":7,"1422":1,"1425":2,"1427":25,"1432":1,"1436":70,"1437":1,"1438":1,"1441":1,"1443":1,"1445":2,"1446":1,"1453":1,"1455":1,"1459":1,"1465":2,"1466":1,"1467":13,"1472":1,"1477":1,"1481":1,"1485":1,"1486":1,"1488":1,"1489":4,"1492":1,"1577":4,"1586":1,"1611":1,"1654":1,"1671":1,"1685":2,"1686":2,"1722":1,"1727":1,"1728":1,"1815":1,"1827":1,"1865":2,"1915":1,"1916":1,"2011":1,"2013":1,"2044":2,"2059":1,"2101":1,"2102":1,"2103":1,"2107":2,"2110":1,"2122":1,"2139":1,"2158":1,"2179":1,"2180":1,"2182":1,"2214":2,"2215":1,"2219":1,"2220":1,"2222":1,"2226":1,"2240":2,"2242":2,"2243":2}}],["mixes",{"3":{"649":1,"1176":1,"1286":1,"1310":1,"1396":1}}],["mixedentity",{"3":{"1199":2,"1207":1}}],["mixed",{"0":{"92":1,"96":1},"3":{"0":3,"62":1,"91":2,"92":1,"93":1,"95":4,"96":2,"98":2,"99":2,"100":1,"101":1,"102":3,"104":1,"105":1,"229":1,"267":1,"692":1,"790":1,"795":1,"837":1,"838":1,"869":1,"981":1,"1034":1,"1178":1,"1279":1,"1286":5,"1307":1,"1309":2,"1312":2,"1324":2,"1328":2,"1337":1,"1339":7,"1359":1,"1396":1,"1400":1,"1415":1,"1438":1,"1441":1,"1442":1,"1449":1,"1467":2,"1552":1,"1557":1,"1670":1,"1946":1,"1950":1,"2026":3}}],["mix",{"3":{"392":1,"1018":1,"1020":1,"1229":1,"1297":1,"1359":2,"1395":1,"1415":1}}],["mixing",{"3":{"0":1,"95":1,"941":1,"990":1,"1035":1,"1237":1,"1301":1,"1311":1,"1324":1,"1415":1,"1436":1,"1438":1,"1555":1,"1630":1}}],["mitigates",{"3":{"237":1,"1826":1}}],["mitigated",{"3":{"13":1,"61":1,"88":1,"119":1,"188":1,"209":1,"812":1,"947":1,"1055":1,"1474":1,"1526":1,"1867":1,"1964":1}}],["mitigations",{"3":{"692":1,"1534":1,"1548":1}}],["mitigation",{"1":{"232":1,"233":1,"234":1,"235":1,"236":1,"237":1,"238":1,"239":1},"3":{"70":1,"121":1,"188":1,"232":1,"312":1,"318":1,"684":1,"725":1,"743":1,"883":1,"947":1,"1402":1,"1417":1,"1436":1,"1459":1,"1474":1,"1478":1,"1630":1,"1885":1,"1964":1,"2034":2,"2038":1,"2039":1,"2109":1}}],["mit",{"3":{"0":1,"650":1,"682":2,"683":1,"707":1,"708":1,"1059":1,"1323":1,"1661":1,"1948":1,"2241":1}}],["misclassified",{"3":{"1436":1}}],["misconstructed",{"3":{"1427":1}}],["misconfigurations",{"3":{"1438":1}}],["misconfiguration",{"3":{"0":1,"178":1,"214":1,"215":1,"401":1,"501":1,"674":1,"846":1,"1060":1,"1259":1,"1269":1,"1272":1,"1286":7,"1300":2,"1320":2,"1323":4,"1324":3,"1339":3,"1396":1,"1415":1,"1427":1,"1436":1,"1721":1,"1984":1,"2002":1}}],["misconfigured",{"3":{"0":1,"399":1,"415":1,"535":1,"700":1,"792":1,"1212":1,"1259":2,"1264":1,"1270":2,"1300":1,"1311":1,"1317":1,"1324":4,"1332":1,"1339":1,"1396":1,"1417":1,"1419":1,"1427":1,"1430":1,"1443":1,"1670":2,"1823":1,"1894":1,"2013":1,"2015":2,"2161":1,"2163":1}}],["miscounts",{"3":{"607":1,"1436":1}}],["mishandled",{"3":{"1416":1}}],["miswiring",{"3":{"1339":1}}],["misled",{"3":{"1436":1}}],["misleads",{"3":{"1436":1}}],["mislead",{"3":{"1369":1,"1415":1,"1436":2,"1474":1}}],["misleading",{"3":{"1324":1,"1359":1,"1415":1,"1417":1,"1467":1,"1927":1}}],["mislabeled",{"3":{"1311":1,"1359":1}}],["misbehaves",{"3":{"1327":1,"1339":1,"2136":1}}],["misbehaved",{"3":{"1312":1}}],["misbehaving",{"3":{"827":1,"848":1,"1339":1}}],["misalignment",{"3":{"1496":1}}],["misaligned",{"3":{"1359":1,"1631":1}}],["misattributed",{"3":{"1436":1}}],["misapplication",{"3":{"1311":1}}],["misauthenticates",{"3":{"312":1}}],["misrouting",{"3":{"1311":1,"1438":1}}],["misrouted",{"3":{"1300":1,"1438":1}}],["misreported",{"3":{"1323":1,"1396":1,"1436":1}}],["misreports",{"3":{"1110":1,"1324":1,"1339":1,"1481":1,"1898":1}}],["misregistration",{"3":{"1270":1}}],["misreadable",{"3":{"1467":1}}],["misreads",{"3":{"827":1,"1300":1,"1339":1}}],["misread",{"3":{"136":1,"1311":1,"1312":1,"1323":1,"1362":1,"2045":1}}],["misplaced",{"3":{"1436":1,"2097":1}}],["misplacedtokenfixtureservice",{"3":{"1199":2,"1207":1,"1436":2}}],["mispositioned",{"3":{"135":1}}],["misfires",{"3":{"1561":1}}],["misfire",{"3":{"1043":1,"1436":1,"2205":1}}],["mistype",{"3":{"1396":1}}],["mistyped",{"3":{"838":1,"1286":1,"1338":1,"1339":4,"1359":3,"1427":1,"1438":1}}],["mistakes",{"3":{"1311":1}}],["mistaken",{"3":{"109":1,"235":1,"1339":2,"1396":1,"1417":1,"1423":1,"1433":1,"1436":6,"1459":1,"1910":1,"1929":1}}],["mistake",{"3":{"0":1,"122":1,"132":1,"140":1,"215":1,"216":1,"290":1,"391":1,"465":1,"676":1,"727":1,"776":2,"801":1,"828":2,"1041":1,"1066":1,"1132":1,"1241":1,"1247":3,"1259":1,"1270":1,"1286":2,"1300":1,"1311":4,"1317":1,"1323":1,"1328":1,"1333":1,"1359":1,"1369":1,"1436":2,"1686":2,"1927":1,"1930":1,"1939":1,"1943":1,"2044":1,"2102":1,"2108":1,"2109":1,"2110":1,"2154":1,"2155":1,"2185":2}}],["misdiagnose",{"3":{"829":1}}],["misordered",{"3":{"751":1}}],["misordering",{"3":{"749":1,"1825":1}}],["misused",{"3":{"1396":1,"1436":1}}],["misuse",{"3":{"735":1,"1396":2,"1436":1,"1605":1,"1739":1}}],["misnamedtokenfixtureservice",{"3":{"1199":2,"1207":1,"1436":2}}],["misnamed",{"3":{"135":1,"1436":1,"2181":1}}],["mis",{"3":{"111":1,"324":1,"733":1,"1228":1,"1229":1,"1286":2,"1300":1,"1311":1,"1323":2,"1395":1,"1396":2,"1436":4,"1952":1}}],["misshapen",{"3":{"1324":1}}],["misspelled",{"3":{"840":1,"1311":1,"1339":1,"1427":1,"1652":1}}],["miss",{"3":{"157":1,"159":1,"166":1,"171":1,"343":1,"399":1,"404":1,"459":1,"463":1,"538":1,"549":1,"733":2,"734":1,"849":1,"964":1,"995":1,"1000":1,"1006":1,"1107":1,"1118":1,"1162":1,"1237":2,"1241":1,"1242":1,"1247":4,"1263":1,"1267":2,"1268":1,"1270":16,"1278":1,"1279":1,"1283":1,"1286":21,"1300":12,"1301":27,"1309":1,"1311":14,"1323":3,"1324":4,"1339":2,"1350":1,"1355":1,"1359":6,"1369":1,"1388":1,"1395":12,"1396":11,"1415":2,"1417":4,"1427":1,"1436":11,"1438":4,"1443":1,"1444":1,"1538":2,"1600":2,"1651":1,"1653":1,"1655":1,"1668":1,"1684":1,"1708":1,"1810":1,"1825":1,"1849":1,"1857":1,"1882":1,"1898":1,"1909":2,"1911":1,"1915":1,"1917":2,"1923":2,"1945":1,"1975":1,"1989":1,"1999":1,"2007":1,"2049":1,"2068":2,"2137":1,"2157":1,"2158":1,"2161":1}}],["misses",{"3":{"24":1,"159":1,"243":1,"255":1,"618":1,"762":1,"980":1,"1241":1,"1247":4,"1267":1,"1270":3,"1286":1,"1311":1,"1323":1,"1324":2,"1339":1,"1359":2,"1396":4,"1397":1,"1415":1,"1417":1,"1436":6,"1496":1,"1641":1,"1668":1,"1872":1,"1911":1,"1989":1}}],["missed",{"3":{"0":3,"235":1,"301":1,"520":1,"558":1,"627":1,"658":1,"707":2,"890":1,"1036":1,"1041":1,"1099":1,"1101":1,"1174":1,"1176":1,"1212":1,"1269":1,"1270":2,"1271":1,"1286":1,"1300":2,"1301":1,"1309":1,"1311":1,"1323":2,"1324":2,"1334":1,"1339":1,"1359":1,"1395":1,"1396":4,"1399":1,"1424":1,"1427":1,"1436":5,"1438":2,"1459":1,"1467":1,"1474":1,"1577":1,"1585":1,"1708":1,"1709":1,"1790":1,"1829":1,"1918":1,"1933":2,"1948":2,"1961":1,"2140":1,"2181":1,"2185":2,"2194":1,"2195":1,"2234":1}}],["missingsubscription",{"2":{"1472":1},"3":{"1472":1}}],["missingroot",{"3":{"1436":1}}],["missingrequired",{"2":{"1687":1},"3":{"1396":5,"1687":2}}],["missingrecordingharness",{"3":{"1199":2,"1207":1}}],["missingcode",{"3":{"1324":1}}],["missingaccesstokencode",{"3":{"1324":2}}],["missingaccesstoken",{"3":{"1324":2}}],["missingoverridefixture",{"3":{"1199":2,"1207":1,"1436":10}}],["missingtokenfixtureservice",{"3":{"1199":2,"1207":1,"1436":3}}],["missing",{"0":{"1755":1,"1776":1},"3":{"0":8,"67":1,"79":1,"102":1,"108":1,"136":1,"155":1,"159":1,"160":1,"188":1,"214":1,"230":1,"265":1,"283":1,"302":1,"305":1,"318":7,"320":2,"322":1,"323":1,"324":1,"326":2,"342":1,"350":3,"370":1,"371":1,"375":1,"383":1,"411":1,"415":1,"448":2,"484":1,"534":1,"538":2,"549":1,"554":1,"572":1,"573":1,"576":1,"583":1,"584":1,"585":1,"591":1,"599":1,"601":1,"602":1,"609":1,"610":1,"617":1,"626":2,"632":1,"633":2,"642":1,"648":1,"667":1,"673":1,"676":1,"684":1,"700":1,"707":1,"725":1,"757":1,"765":1,"780":1,"790":2,"791":1,"795":1,"819":1,"820":1,"828":1,"838":1,"842":1,"844":1,"871":1,"879":2,"881":1,"888":2,"915":1,"916":1,"921":1,"926":1,"948":1,"972":1,"974":1,"1018":1,"1042":1,"1049":1,"1058":1,"1067":1,"1084":1,"1092":1,"1093":1,"1109":1,"1163":1,"1184":1,"1188":1,"1212":1,"1246":1,"1250":1,"1259":2,"1265":1,"1266":1,"1270":8,"1271":2,"1282":1,"1286":12,"1297":1,"1300":23,"1301":3,"1309":2,"1311":20,"1312":3,"1320":1,"1323":13,"1324":35,"1336":1,"1339":6,"1343":1,"1349":1,"1350":9,"1352":1,"1359":51,"1369":5,"1372":1,"1380":9,"1384":1,"1395":17,"1396":19,"1402":9,"1406":1,"1411":1,"1415":11,"1416":1,"1417":10,"1421":1,"1422":1,"1427":4,"1430":1,"1431":1,"1432":1,"1436":60,"1438":3,"1440":1,"1442":1,"1443":1,"1449":2,"1454":1,"1455":3,"1459":2,"1466":1,"1467":6,"1472":1,"1480":1,"1489":1,"1491":1,"1492":3,"1496":30,"1524":2,"1525":1,"1526":3,"1531":2,"1558":1,"1577":1,"1591":1,"1600":1,"1605":1,"1631":1,"1640":1,"1641":3,"1668":1,"1684":1,"1685":1,"1700":2,"1702":1,"1719":1,"1727":2,"1728":1,"1729":2,"1731":1,"1739":1,"1748":1,"1749":2,"1765":1,"1803":1,"1839":1,"1843":1,"1844":1,"1862":1,"1881":1,"1887":1,"1889":1,"1913":1,"1924":1,"1944":1,"1948":1,"1959":1,"1964":2,"1968":1,"1975":2,"1982":1,"1986":1,"1987":2,"1994":1,"1995":4,"1996":3,"1997":2,"1998":2,"2002":4,"2013":1,"2034":1,"2045":1,"2046":1,"2057":2,"2069":1,"2076":1,"2083":1,"2087":1,"2099":1,"2102":1,"2109":2,"2124":1,"2125":1,"2133":1,"2140":1,"2151":1,"2169":1,"2170":2,"2171":2,"2175":1,"2182":1,"2190":1,"2191":1,"2196":1,"2197":1,"2198":1,"2234":3}}],["mismatched",{"3":{"511":1,"854":1,"1270":1,"1286":4,"1294":1,"1300":6,"1309":1,"1311":1,"1323":1,"1324":1,"1359":1,"1417":1,"1436":4,"1641":1,"1765":1}}],["mismatches",{"2":{"1998":1},"3":{"0":2,"501":1,"1270":2,"1415":1,"1496":4,"1635":1,"1670":1,"1761":1,"1998":1,"2234":1}}],["mismatch",{"3":{"0":1,"91":1,"245":1,"251":1,"254":1,"257":1,"259":1,"264":1,"318":1,"319":1,"322":2,"323":1,"350":1,"452":1,"499":2,"500":2,"609":1,"658":1,"659":1,"732":1,"907":1,"926":1,"1069":1,"1212":1,"1234":1,"1237":1,"1270":10,"1286":4,"1300":4,"1301":1,"1311":4,"1323":4,"1324":5,"1339":3,"1350":2,"1359":7,"1369":1,"1396":2,"1402":1,"1415":2,"1416":1,"1417":1,"1427":1,"1436":7,"1454":1,"1467":1,"1490":1,"1496":1,"1577":2,"1585":1,"1747":1,"1764":1,"1902":1,"1922":1,"1996":1,"1998":1,"2076":1,"2234":1}}],["midpointrounding",{"3":{"1359":1,"1369":1}}],["midsavecontextcreatingdbcontext",{"2":{"1498":1},"3":{"1198":1,"1199":3,"1207":1,"1496":1,"1498":1}}],["midnight",{"3":{"403":1,"612":1,"1348":1,"1350":1,"1355":2,"1393":1,"1395":6,"1438":1,"1631":1}}],["middle",{"0":{"139":1,"1423":1,"2054":1},"3":{"27":1,"130":1,"135":1,"139":1,"602":1,"1092":2,"1124":1,"1271":1,"1286":1,"1300":1,"1323":1,"1324":6,"1350":1,"1369":1,"1395":1,"1396":3,"1417":2,"1436":7,"1685":1,"1794":1,"1800":1,"1818":1,"1887":1,"1950":1,"2060":1,"2061":1,"2075":1,"2172":1,"2238":1}}],["middlewares",{"3":{"829":1,"1311":2}}],["middlewarepipelinestep",{"3":{"749":1,"1199":3,"1203":1,"1207":2,"1311":9}}],["middlewarepipelinestepnames",{"2":{"243":1,"256":1,"258":1,"259":1,"696":1,"749":1,"751":1,"1311":2},"3":{"243":2,"256":3,"258":2,"259":1,"261":1,"459":1,"696":1,"698":2,"749":2,"751":1,"1199":4,"1203":1,"1207":2,"1311":13,"1436":4}}],["middlewarepipelineordertests",{"2":{"572":1},"3":{"572":2,"749":4,"1199":2,"1207":4,"1311":1,"1436":10,"1438":1,"1487":1,"1488":3,"1489":3}}],["middlewarepipelineordertestsbase",{"2":{"572":1,"696":1,"698":1,"747":1,"749":1,"751":1,"1428":1,"1488":1,"2056":1},"3":{"0":1,"459":2,"464":2,"572":2,"696":1,"698":1,"747":1,"749":2,"751":1,"1199":3,"1207":2,"1311":8,"1428":1,"1436":15,"1438":1,"1488":5,"1489":1,"2056":1}}],["middlewarepipelinebuildertests",{"3":{"776":1,"777":1,"1199":1,"1207":2,"1311":1,"1438":1}}],["middlewarepipelinebuilder",{"2":{"103":1,"179":1,"259":1,"457":1,"459":2,"464":2,"465":1,"466":1,"696":1,"698":1,"747":3,"749":3,"1496":1,"1666":1},"3":{"0":1,"103":2,"179":2,"243":1,"256":1,"258":1,"259":1,"261":1,"457":1,"459":5,"464":6,"465":1,"466":1,"696":1,"698":5,"747":3,"749":14,"751":2,"774":2,"777":1,"1108":1,"1111":1,"1124":1,"1150":1,"1156":1,"1198":1,"1199":5,"1203":1,"1207":2,"1301":2,"1311":31,"1436":7,"1438":1,"1496":3,"1666":1,"2068":1}}],["middleware",{"0":{"2151":1},"1":{"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"746":1,"747":1,"748":1,"749":1,"750":1,"751":1,"752":1,"753":1,"1311":1,"2149":1,"2150":1,"2151":1,"2152":1,"2153":1,"2154":1,"2155":1},"3":{"0":10,"31":2,"33":1,"57":1,"59":3,"86":1,"109":7,"118":1,"125":2,"135":1,"174":1,"175":1,"182":1,"211":1,"212":1,"214":3,"215":1,"217":1,"219":1,"234":1,"235":1,"236":1,"237":2,"243":1,"256":1,"265":1,"280":1,"282":1,"301":1,"306":1,"342":1,"397":2,"407":2,"409":2,"415":2,"459":11,"460":4,"462":3,"463":6,"464":4,"465":1,"466":2,"503":1,"571":1,"573":1,"696":2,"698":2,"700":1,"702":1,"703":1,"741":1,"746":1,"748":2,"749":5,"750":1,"753":1,"773":1,"774":1,"775":1,"778":2,"825":2,"826":2,"827":6,"833":1,"910":1,"1125":1,"1126":1,"1129":1,"1192":2,"1202":2,"1203":12,"1207":36,"1212":9,"1222":1,"1229":5,"1270":2,"1286":5,"1296":1,"1297":1,"1300":23,"1301":2,"1304":1,"1309":1,"1310":1,"1311":75,"1312":2,"1323":6,"1324":14,"1334":1,"1336":3,"1337":1,"1338":1,"1339":38,"1359":1,"1370":1,"1379":1,"1380":1,"1396":3,"1415":3,"1416":2,"1429":1,"1436":19,"1438":6,"1441":1,"1443":2,"1447":3,"1486":1,"1487":2,"1488":3,"1496":4,"1526":1,"1540":1,"1577":2,"1611":1,"1615":1,"1617":1,"1659":1,"1660":1,"1666":2,"1670":1,"1671":1,"1753":1,"1774":1,"1825":1,"1827":3,"1873":1,"1920":1,"1934":1,"1968":2,"1972":2,"1973":1,"1975":1,"1999":1,"2001":3,"2025":2,"2068":3,"2085":1,"2148":1,"2149":2,"2151":2,"2153":1,"2155":4,"2162":1,"2210":1,"2229":1,"2232":2,"2234":5}}],["mid",{"0":{"2068":1},"3":{"0":3,"20":1,"26":1,"194":1,"517":1,"674":1,"691":1,"707":1,"741":1,"743":1,"759":1,"767":1,"881":1,"954":1,"996":1,"998":1,"1042":1,"1101":1,"1247":1,"1251":1,"1255":2,"1259":3,"1267":1,"1270":4,"1276":1,"1286":6,"1300":1,"1311":6,"1323":9,"1324":8,"1339":1,"1359":3,"1369":1,"1380":2,"1390":1,"1395":8,"1396":16,"1400":1,"1402":1,"1415":2,"1417":3,"1432":1,"1436":6,"1438":1,"1455":1,"1456":1,"1460":1,"1475":3,"1488":2,"1496":3,"1684":1,"1749":1,"1765":1,"1766":1,"1835":1,"1841":1,"1889":1,"1909":1,"1911":1,"1948":1,"2036":1,"2068":1,"2071":1,"2160":1,"2190":1,"2234":1}}],["minoptions",{"3":{"1398":1,"1402":10}}],["minority",{"3":{"689":1,"741":1,"1380":1}}],["minor",{"2":{"1733":2},"3":{"147":1,"1004":1,"1075":1,"1324":1,"1496":1,"1517":1,"1526":3,"1532":1,"1537":1,"1576":1,"1577":1,"1591":2,"1599":1,"1673":1,"1675":1,"1733":3,"1735":1}}],["mind",{"3":{"1323":1,"1355":1,"1359":1,"1398":1}}],["mincount",{"3":{"1237":1}}],["minvalue",{"2":{"1352":1},"3":{"1300":1,"1311":2,"1350":2,"1352":1,"1359":1,"1369":1,"1395":2,"1465":1}}],["minvaluespec",{"3":{"1199":2,"1207":1,"1496":1}}],["minverskip=true",{"3":{"1454":1}}],["minver",{"3":{"0":1,"147":1,"939":1,"1212":1,"1213":1,"1453":1,"1454":3,"1492":1,"1577":1,"1733":1,"2114":2}}],["mini",{"3":{"2241":1}}],["miniprofiler",{"3":{"1262":2,"1270":6,"1278":1,"1284":1,"1286":15,"1311":4,"1316":1,"1323":1,"1438":1,"1664":1,"1753":1,"1774":2}}],["miniprofilerextensions",{"3":{"980":1,"1199":1,"1203":1,"1207":2,"1208":1,"1270":1,"1311":4,"1323":2}}],["miniature",{"0":{"1392":1},"3":{"1217":1,"1230":1,"1291":1,"1300":2,"1301":1,"1309":2,"1350":1,"1359":1,"1395":1,"1417":1,"1431":1,"1436":1,"2092":1}}],["minimisation",{"3":{"1396":1}}],["minimizing",{"3":{"1396":1,"1445":1,"1458":1}}],["minimizes",{"3":{"1395":1}}],["minimized",{"3":{"1359":1}}],["minimization",{"3":{"1237":1,"1359":2,"1396":1,"1415":2,"1417":1}}],["minimaltlsversion",{"3":{"1467":1}}],["minimality",{"3":{"1324":1}}],["minimalism",{"3":{"1300":1}}],["minimal",{"3":{"0":1,"31":1,"59":1,"448":2,"632":1,"674":1,"1004":1,"1050":1,"1213":1,"1229":1,"1237":1,"1247":1,"1259":2,"1284":1,"1286":6,"1289":1,"1300":8,"1309":1,"1311":8,"1313":1,"1323":4,"1324":6,"1339":1,"1350":2,"1376":1,"1380":2,"1395":2,"1396":2,"1402":3,"1415":2,"1416":3,"1417":1,"1429":1,"1430":1,"1436":21,"1438":1,"1441":1,"1443":1,"1445":1,"1454":1,"1489":1,"1492":1,"1542":1,"1546":1,"1555":1,"1563":1,"1638":2,"1658":1,"1810":1,"1880":1,"1898":1,"2056":1,"2096":1,"2133":2,"2223":1,"2230":1,"2234":1}}],["minimumtlsversion",{"3":{"1467":1}}],["minimumthroughput",{"2":{"100":1},"3":{"100":1,"819":1,"1312":2,"1339":2}}],["minimumroutes",{"3":{"1436":2}}],["minimumrazorfiles",{"3":{"1436":1}}],["minimumcreateforms=4",{"3":{"1591":1,"1600":1}}],["minimumcreateforms",{"3":{"1436":2,"1489":1,"1596":1}}],["minimumcodebehindfiles",{"3":{"1436":3,"1591":1}}],["minimumcommonpackagecount",{"3":{"1436":2}}],["minimumcommands",{"3":{"1436":2,"1489":2}}],["minimumcontainerapps",{"3":{"1436":1}}],["minimumbaseresources=25",{"3":{"1591":1}}],["minimumbaseresources",{"3":{"1436":4,"1489":1}}],["minimumscannedfiles=40",{"3":{"1591":1}}],["minimumscannedfiles=60",{"3":{"1526":1}}],["minimumscannedfiles",{"3":{"1436":5,"1489":1}}],["minimumscannedtypes",{"3":{"1436":7}}],["minimumsimilarity",{"2":{"1376":1},"3":{"1359":6,"1376":1,"1380":1}}],["minimumgovernedpages",{"3":{"1431":1,"1436":1,"1526":1}}],["minimumlevel",{"3":{"1339":1}}],["minimumlength",{"3":{"827":1,"1271":2,"1300":2,"1339":2,"1436":1}}],["minimumerrorcodes",{"2":{"1271":1},"3":{"1271":1,"1436":2}}],["minimumwait",{"3":{"1259":1,"1286":2,"1323":2}}],["minimumpathcount=10",{"3":{"1526":1,"1531":1}}],["minimumpathcountbecause",{"3":{"1436":1}}],["minimumpathcount",{"2":{"574":1},"3":{"574":1,"1436":3,"1488":1}}],["minimum",{"3":{"0":1,"24":1,"71":1,"74":1,"101":1,"130":1,"132":1,"137":1,"140":1,"142":1,"215":1,"401":1,"530":1,"610":1,"635":1,"821":1,"1018":2,"1020":1,"1215":1,"1259":2,"1271":2,"1300":1,"1309":1,"1310":1,"1323":1,"1330":2,"1333":1,"1339":3,"1359":6,"1396":2,"1402":2,"1415":4,"1416":1,"1431":1,"1436":8,"1441":1,"1449":1,"1453":3,"1454":1,"1455":6,"1460":1,"1461":1,"1465":1,"1467":1,"1477":1,"1486":2,"1490":1,"1492":4,"1526":1,"1577":2,"1586":1,"1591":1,"1602":1,"1640":1,"1641":2,"1678":1,"1705":1,"1714":3,"2031":1,"2033":1,"2046":1,"2048":1,"2059":1,"2107":1,"2109":1}}],["minimumalertspecs",{"2":{"607":1,"1476":1,"2047":1},"3":{"0":2,"607":2,"609":2,"1018":1,"1436":7,"1476":1,"1526":1,"2047":2}}],["minlength",{"3":{"657":1,"1237":2,"1300":1,"1467":1,"1472":1,"1474":1}}],["minratio",{"3":{"591":1}}],["minreplicas",{"2":{"291":1,"293":1,"995":1,"1154":1,"1156":1,"1255":1,"1469":1,"1841":1,"2034":1},"3":{"0":1,"20":1,"291":2,"293":1,"390":2,"995":1,"1154":1,"1156":1,"1255":1,"1259":2,"1455":1,"1467":4,"1469":2,"1474":1,"1526":2,"1534":1,"1841":1,"2034":1}}],["mine=true",{"3":{"1391":1,"1395":1,"1416":2}}],["mine",{"3":{"320":1,"1237":1,"1395":1,"1396":1,"1402":1,"1748":1,"1759":1,"1765":1,"1997":1}}],["minus",{"3":{"22":1,"707":1,"743":1,"1019":1,"1262":1,"1271":1,"1286":2,"1309":2,"1311":1,"1324":1,"1339":1,"1359":2,"1366":1,"1380":4,"1396":3,"1417":1,"1435":1,"1436":3,"1438":1,"1455":1,"1480":1,"1507":1,"1662":1,"1765":1,"1827":1}}],["minutesuntilstart",{"3":{"1396":2}}],["minutes",{"2":{"539":1,"1475":1},"3":{"0":3,"18":1,"19":2,"22":1,"237":1,"386":1,"387":3,"392":2,"499":1,"517":1,"530":1,"535":1,"538":1,"539":6,"540":1,"609":2,"611":1,"619":1,"625":2,"627":3,"640":2,"675":1,"708":1,"757":1,"759":5,"760":2,"813":1,"818":1,"819":1,"905":1,"996":1,"1018":1,"1019":1,"1029":1,"1067":1,"1069":1,"1099":2,"1212":1,"1264":1,"1288":1,"1289":1,"1294":1,"1295":1,"1300":6,"1305":1,"1311":3,"1312":2,"1323":3,"1324":4,"1328":2,"1330":1,"1339":3,"1350":2,"1358":1,"1359":9,"1376":1,"1380":1,"1387":1,"1390":1,"1395":6,"1396":5,"1397":1,"1416":1,"1417":2,"1430":1,"1436":2,"1449":1,"1453":5,"1454":2,"1455":9,"1456":5,"1460":2,"1465":1,"1466":1,"1467":14,"1473":1,"1474":6,"1475":8,"1476":6,"1478":1,"1486":1,"1490":2,"1492":1,"1496":1,"1577":3,"1582":2,"1630":1,"1631":1,"1632":2,"1638":1,"1639":1,"1641":2,"1767":1,"1843":2,"1922":2,"1923":1,"1942":1,"1980":1,"1982":2,"1985":1,"2013":1,"2034":2,"2035":3,"2037":1,"2039":1,"2051":1,"2068":2,"2160":3,"2163":2,"2169":1,"2170":1,"2192":1}}],["minute",{"0":{"1719":1},"3":{"0":8,"175":2,"178":2,"179":1,"260":1,"280":1,"282":1,"350":1,"390":1,"391":1,"392":2,"422":1,"459":1,"517":1,"536":2,"591":1,"593":1,"607":1,"609":1,"626":1,"627":1,"640":1,"709":1,"759":1,"766":1,"809":2,"819":1,"854":2,"862":1,"914":1,"916":1,"1018":2,"1029":1,"1066":1,"1124":2,"1184":1,"1212":2,"1264":2,"1270":3,"1286":1,"1288":1,"1292":1,"1300":5,"1311":13,"1323":2,"1324":5,"1330":2,"1339":4,"1342":2,"1350":1,"1357":1,"1358":2,"1359":11,"1362":1,"1367":3,"1368":1,"1369":1,"1379":1,"1380":9,"1390":1,"1395":3,"1396":3,"1436":1,"1438":4,"1443":1,"1447":1,"1449":2,"1455":4,"1456":4,"1458":1,"1459":2,"1460":2,"1463":1,"1467":16,"1469":2,"1474":1,"1475":4,"1476":2,"1492":1,"1496":1,"1525":1,"1526":2,"1531":2,"1534":1,"1535":1,"1572":1,"1591":1,"1599":1,"1631":1,"1639":2,"1641":1,"1667":1,"1807":1,"1827":1,"1843":1,"1846":1,"1853":1,"1868":1,"1892":1,"1899":1,"1950":1,"1958":1,"1965":1,"1972":1,"1975":3,"1979":1,"1980":1,"1985":1,"1992":1,"1998":1,"1999":3,"2001":1,"2002":2,"2003":1,"2035":2,"2038":2,"2039":1,"2049":1,"2068":1,"2071":1,"2089":1,"2110":1,"2130":1,"2135":1,"2141":1,"2155":1,"2160":4,"2162":1,"2169":2,"2171":1,"2182":1,"2192":2,"2195":1,"2205":1}}],["minter",{"3":{"1396":1}}],["minted",{"3":{"0":7,"207":1,"208":1,"209":1,"350":1,"443":1,"470":1,"664":1,"690":1,"788":1,"790":2,"793":2,"794":3,"805":1,"826":1,"827":1,"829":1,"880":1,"881":2,"882":1,"905":1,"1067":1,"1116":2,"1212":3,"1259":1,"1264":1,"1270":2,"1293":2,"1300":16,"1309":1,"1311":7,"1323":1,"1324":3,"1336":1,"1339":2,"1342":1,"1348":1,"1350":1,"1357":1,"1380":2,"1395":4,"1396":10,"1404":1,"1409":1,"1415":2,"1417":1,"1436":1,"1438":1,"1442":1,"1467":2,"1490":1,"1631":2,"1641":1,"1667":1,"1765":1,"1893":1,"1968":2,"1970":2,"1971":1,"1973":1,"1982":2,"2168":1,"2199":1,"2200":1,"2234":1}}],["mintaccesstoken",{"3":{"1300":6}}],["mintable",{"3":{"0":1}}],["mintforsession",{"2":{"2199":1},"3":{"1290":1,"1300":4,"2199":1}}],["mint",{"3":{"30":1,"32":1,"177":1,"499":1,"500":1,"664":2,"665":2,"670":2,"792":3,"828":1,"881":1,"883":1,"904":1,"905":2,"906":1,"926":1,"1212":1,"1278":1,"1286":2,"1292":1,"1293":1,"1300":18,"1311":4,"1323":3,"1324":3,"1326":1,"1336":1,"1339":1,"1369":1,"1380":1,"1395":2,"1396":1,"1415":2,"1417":1,"1436":3,"1438":1,"1441":1,"1454":1,"1455":1,"1467":3,"1472":1,"1582":1,"1585":1,"1667":1,"1765":1,"1767":1,"1894":1,"1899":1,"1911":1,"1970":1,"1980":1,"1983":1,"2064":1,"2068":1,"2199":1,"2234":1}}],["mints",{"3":{"0":1,"32":1,"186":1,"349":1,"350":2,"353":1,"458":1,"499":1,"602":1,"665":1,"667":1,"668":2,"792":1,"827":1,"829":1,"880":1,"885":1,"905":3,"907":1,"1059":1,"1069":1,"1249":1,"1259":2,"1270":1,"1288":1,"1289":2,"1290":2,"1294":1,"1300":24,"1301":1,"1309":2,"1311":3,"1322":1,"1323":1,"1324":4,"1328":1,"1337":1,"1339":2,"1343":1,"1380":3,"1395":3,"1396":8,"1407":1,"1414":1,"1415":3,"1417":1,"1429":1,"1430":1,"1436":1,"1438":2,"1449":1,"1460":1,"1467":1,"1472":1,"1475":1,"1488":1,"1490":1,"1589":1,"1596":1,"1627":1,"1641":1,"1671":1,"1732":1,"1893":2,"1899":1,"1972":1,"1975":2,"1982":2,"1985":1,"2025":1,"2057":1,"2204":1}}],["minting",{"3":{"0":2,"126":1,"295":1,"333":1,"351":1,"400":1,"827":1,"881":1,"908":1,"1030":1,"1116":1,"1259":1,"1263":1,"1270":1,"1286":1,"1287":1,"1290":1,"1295":1,"1300":5,"1304":1,"1309":2,"1324":1,"1337":1,"1339":1,"1348":1,"1350":3,"1377":2,"1380":1,"1395":1,"1396":8,"1402":1,"1406":1,"1409":2,"1415":3,"1417":2,"1432":1,"1445":1,"1447":1,"1449":1,"1455":1,"1491":1,"1962":2,"1965":1,"1972":1,"2025":1,"2168":2}}],["min",{"3":{"0":3,"24":1,"68":2,"177":1,"281":1,"330":1,"609":2,"612":1,"733":1,"1237":1,"1244":1,"1259":1,"1286":1,"1300":1,"1311":3,"1324":3,"1339":2,"1396":1,"1415":1,"1422":1,"1443":2,"1455":2,"1467":4,"1474":14,"1525":1,"1526":1,"1534":1,"1535":1,"1576":1,"1577":2,"1590":1,"1591":2,"1596":1,"1599":1,"1600":2,"1632":1,"1709":2,"1710":1,"1712":1,"1747":1,"1753":1,"1765":1,"1988":1,"2001":1}}],["mirrors",{"3":{"0":4,"26":1,"199":1,"247":1,"265":1,"268":1,"269":1,"321":1,"324":1,"351":1,"355":1,"362":1,"388":1,"471":1,"556":1,"599":1,"626":1,"644":1,"653":1,"698":2,"707":1,"725":1,"766":1,"832":1,"857":1,"881":1,"1042":1,"1059":2,"1063":1,"1067":1,"1068":1,"1108":1,"1212":3,"1229":2,"1237":3,"1242":1,"1247":1,"1259":2,"1270":3,"1271":1,"1286":6,"1295":1,"1300":2,"1301":2,"1303":1,"1309":2,"1310":2,"1311":7,"1312":3,"1322":1,"1323":3,"1324":17,"1339":4,"1350":10,"1353":1,"1359":11,"1369":4,"1372":1,"1374":1,"1379":2,"1380":3,"1384":1,"1395":7,"1396":10,"1402":7,"1407":1,"1412":1,"1414":1,"1415":5,"1416":1,"1417":2,"1430":1,"1436":17,"1438":1,"1441":1,"1444":1,"1455":2,"1490":1,"1496":1,"1526":1,"1561":1,"1570":1,"1591":2,"1599":1,"1653":1,"1662":1,"1666":1,"1825":1,"1922":1,"1927":1,"1996":1,"2019":1,"2077":1,"2078":1,"2189":1,"2193":1}}],["mirror",{"0":{"1608":1,"1742":1},"3":{"0":3,"122":1,"162":1,"181":1,"217":1,"219":1,"241":1,"346":1,"407":1,"448":1,"528":1,"576":1,"707":1,"729":1,"803":1,"860":1,"931":1,"1034":1,"1042":1,"1212":1,"1225":1,"1227":1,"1228":1,"1229":3,"1237":3,"1253":2,"1258":1,"1270":1,"1283":1,"1286":2,"1300":3,"1301":1,"1309":4,"1310":1,"1311":2,"1324":15,"1339":3,"1340":1,"1350":4,"1359":13,"1380":3,"1384":1,"1395":7,"1396":10,"1398":1,"1401":1,"1402":3,"1415":2,"1416":5,"1432":1,"1436":3,"1444":1,"1531":1,"1535":1,"1648":1,"1649":1,"1667":1,"1669":1,"1685":1,"1687":2,"1702":1,"1835":1,"1851":1,"1922":1,"1930":1,"1953":1,"2133":1,"2158":1,"2167":1,"2190":1}}],["mirroring",{"3":{"0":1,"53":1,"145":1,"243":1,"246":1,"698":1,"715":1,"799":1,"854":1,"1034":1,"1116":1,"1124":1,"1229":2,"1244":1,"1247":1,"1259":1,"1286":3,"1300":1,"1309":2,"1311":1,"1312":1,"1323":1,"1324":4,"1350":2,"1359":2,"1380":3,"1395":3,"1396":2,"1416":1,"1417":3,"1427":1,"1436":6,"1486":1,"1596":1,"1631":1,"1645":1,"1825":1,"1996":1,"2087":1,"2104":1}}],["mirrored",{"3":{"0":2,"109":1,"147":1,"374":1,"618":1,"649":1,"1067":1,"1068":1,"1211":1,"1291":1,"1312":1,"1324":3,"1330":1,"1339":3,"1344":1,"1350":1,"1396":4,"1417":2,"1436":1,"1443":1,"1478":1,"1488":1,"1526":1,"1532":1,"1591":1,"1669":1,"1673":1,"2057":1,"2081":1}}],["mezzanine",{"3":{"1359":1,"1630":1}}],["meziantou",{"2":{"138":1},"3":{"138":1,"265":1,"1213":1,"1453":1,"1577":1,"1673":1,"1903":1,"2087":1}}],["mega",{"3":{"1323":1}}],["megabytes",{"3":{"1323":1,"1395":3,"2128":1}}],["megabyte",{"3":{"390":1,"1117":1,"1125":1,"1324":1,"1359":1}}],["me",{"0":{"1787":1},"3":{"1228":2,"1229":2,"1270":1,"1286":2,"1300":1,"1309":1,"1311":1,"1312":1,"1324":1,"1359":4,"1378":1,"1395":1,"1396":12,"1402":1,"1415":9,"1417":1,"1436":1,"1631":2,"1640":3,"1787":1,"1859":1,"1880":1,"2100":1,"2168":1,"2171":1,"2213":1,"2245":1,"2246":1}}],["mesh",{"3":{"702":1,"1312":2,"1396":1}}],["messagingentitynotfoundexception",{"3":{"1323":1}}],["messagingexception",{"3":{"1323":2}}],["messaging",{"0":{"1547":1,"1665":1},"1":{"928":1,"929":1,"930":1,"931":1,"932":1,"933":1,"934":1,"935":1},"2":{"130":1,"150":1,"152":1,"203":1,"917":1,"929":1,"1074":1,"1075":1,"1077":1,"1078":2,"1259":1,"1323":1},"3":{"0":4,"15":1,"25":1,"26":2,"27":5,"68":1,"70":1,"74":1,"130":1,"135":1,"139":2,"145":1,"150":15,"152":2,"166":1,"171":1,"193":2,"196":2,"198":1,"200":1,"201":2,"202":6,"203":5,"255":1,"256":1,"259":1,"391":1,"638":1,"640":12,"641":2,"642":2,"644":1,"674":1,"702":4,"818":1,"819":5,"821":1,"822":2,"846":1,"849":1,"915":2,"917":1,"928":1,"929":1,"930":1,"931":4,"933":1,"934":2,"980":3,"982":2,"983":1,"1006":1,"1012":1,"1013":1,"1074":9,"1075":3,"1077":1,"1078":2,"1175":2,"1203":16,"1207":141,"1208":2,"1212":3,"1213":1,"1216":1,"1237":2,"1247":2,"1257":5,"1258":2,"1259":84,"1270":3,"1286":4,"1300":8,"1309":1,"1311":4,"1316":2,"1317":4,"1318":3,"1320":5,"1323":71,"1339":3,"1359":1,"1396":1,"1415":2,"1417":1,"1436":6,"1438":8,"1441":1,"1443":1,"1451":1,"1496":4,"1499":1,"1519":1,"1524":1,"1526":3,"1527":1,"1530":1,"1531":3,"1532":1,"1533":1,"1536":1,"1539":1,"1551":1,"1577":7,"1578":1,"1582":1,"1583":1,"1585":1,"1586":1,"1588":1,"1589":1,"1591":2,"1592":1,"1595":1,"1596":2,"1597":1,"1598":1,"1602":1,"1656":1,"1660":1,"1662":1,"1673":1,"1675":1,"1707":2,"1718":1,"1721":1,"1784":1,"1796":1,"1924":1,"1936":1,"2009":1,"2060":1,"2184":1,"2214":1,"2215":1,"2220":1,"2234":1}}],["messagepack",{"3":{"370":1,"1577":1}}],["messageheaders",{"2":{"202":1},"3":{"202":2,"702":1,"1199":5,"1203":1,"1207":2,"1259":5,"1300":6,"1323":2,"1496":1}}],["messageid",{"2":{"77":1,"195":1,"197":1,"200":1,"202":1,"203":2,"786":1,"847":1,"1273":1,"1508":1,"1845":1,"1888":1,"1889":1},"3":{"0":2,"77":1,"195":7,"197":2,"200":2,"201":2,"202":1,"203":2,"782":1,"786":1,"846":2,"847":1,"1074":1,"1212":2,"1247":4,"1249":3,"1258":1,"1259":26,"1269":1,"1270":2,"1273":1,"1286":1,"1309":1,"1323":2,"1350":3,"1427":1,"1436":2,"1438":2,"1508":1,"1577":2,"1845":1,"1888":1,"1889":1,"1910":4}}],["messages=",{"3":{"1436":1}}],["messages",{"3":{"0":1,"21":1,"24":1,"25":1,"27":1,"53":1,"109":1,"117":1,"195":1,"198":1,"225":1,"255":1,"265":1,"397":1,"433":1,"538":1,"629":2,"640":1,"656":1,"790":1,"810":1,"819":1,"1012":1,"1018":1,"1026":1,"1082":1,"1091":2,"1107":1,"1150":1,"1229":1,"1237":1,"1247":2,"1255":1,"1259":13,"1270":1,"1271":4,"1273":1,"1286":5,"1296":1,"1300":5,"1301":1,"1302":1,"1309":8,"1311":3,"1315":1,"1323":11,"1324":14,"1333":1,"1339":2,"1359":18,"1377":1,"1380":4,"1394":1,"1395":9,"1396":11,"1402":3,"1415":7,"1420":1,"1423":3,"1424":1,"1427":9,"1435":2,"1436":17,"1437":1,"1467":3,"1492":2,"1577":1,"1641":1,"1653":1,"1677":1,"1686":1,"1702":1,"1727":1,"1817":1,"1831":1,"1841":1,"1845":1,"1846":1,"1936":1,"1943":1,"2045":1,"2083":1,"2158":1,"2167":1}}],["message",{"0":{"1943":1,"2021":1},"1":{"816":1,"817":1,"818":1,"819":1,"820":1,"821":1,"822":1,"823":1,"1072":1,"1073":1,"1074":1,"1075":1,"1076":1,"1077":1,"1078":1,"1079":1},"2":{"301":1,"818":1,"1843":1},"3":{"0":10,"17":1,"19":4,"22":2,"24":4,"26":1,"27":1,"71":1,"72":1,"77":1,"109":11,"111":2,"113":1,"125":1,"136":1,"170":2,"193":2,"195":2,"196":1,"197":1,"198":1,"200":1,"201":4,"202":2,"219":1,"255":1,"265":9,"266":1,"267":1,"284":1,"290":1,"300":1,"301":1,"306":1,"342":1,"352":1,"353":1,"354":1,"391":1,"397":5,"399":2,"434":1,"536":2,"537":2,"538":2,"539":1,"546":1,"568":1,"574":1,"583":1,"624":1,"626":3,"628":1,"629":1,"640":2,"657":1,"659":1,"673":1,"674":1,"684":1,"688":1,"690":2,"691":1,"692":2,"696":1,"702":2,"766":3,"768":1,"789":3,"790":2,"816":1,"818":7,"819":7,"820":2,"821":2,"823":1,"838":1,"845":1,"846":1,"862":1,"875":1,"882":1,"905":1,"931":1,"963":1,"972":1,"973":1,"988":1,"989":1,"996":1,"1004":1,"1012":2,"1017":1,"1018":3,"1019":2,"1043":1,"1067":1,"1072":1,"1074":1,"1075":2,"1091":3,"1092":1,"1093":1,"1100":1,"1108":1,"1126":1,"1133":1,"1134":1,"1140":1,"1161":1,"1162":1,"1169":1,"1175":1,"1192":1,"1202":1,"1203":1,"1212":3,"1219":1,"1225":1,"1229":9,"1230":1,"1237":9,"1247":10,"1248":1,"1249":1,"1253":2,"1256":2,"1258":3,"1259":82,"1264":1,"1269":1,"1270":23,"1271":27,"1274":1,"1279":2,"1284":1,"1286":46,"1297":2,"1299":1,"1300":31,"1301":2,"1302":3,"1306":1,"1309":11,"1311":43,"1312":25,"1315":1,"1316":1,"1317":3,"1318":3,"1320":1,"1323":93,"1324":95,"1333":1,"1338":1,"1339":12,"1350":15,"1352":1,"1353":1,"1355":1,"1359":148,"1366":3,"1369":1,"1380":10,"1384":1,"1395":45,"1396":59,"1402":39,"1406":1,"1413":1,"1414":1,"1415":28,"1417":12,"1420":1,"1422":1,"1423":2,"1424":1,"1427":22,"1429":1,"1430":1,"1435":1,"1436":176,"1438":14,"1441":1,"1443":1,"1455":1,"1467":6,"1488":4,"1489":2,"1492":1,"1496":1,"1524":1,"1526":3,"1531":1,"1543":1,"1547":4,"1575":1,"1577":3,"1585":1,"1591":3,"1596":1,"1639":1,"1640":3,"1641":2,"1645":1,"1653":1,"1665":1,"1669":1,"1677":4,"1685":1,"1686":2,"1702":1,"1752":1,"1769":1,"1776":1,"1790":1,"1802":1,"1805":1,"1815":1,"1824":2,"1831":2,"1840":1,"1841":2,"1843":9,"1852":1,"1873":2,"1876":1,"1887":1,"1889":2,"1891":1,"1910":3,"1912":1,"1922":5,"1924":1,"1927":4,"1942":2,"1977":1,"1978":1,"1985":1,"1990":1,"1995":1,"2004":1,"2007":1,"2011":1,"2013":2,"2016":1,"2029":1,"2033":3,"2045":1,"2048":1,"2071":1,"2076":1,"2085":3,"2088":2,"2094":1,"2101":1,"2128":1,"2130":1,"2139":2,"2152":1,"2156":1,"2159":2,"2166":1,"2167":1,"2168":2,"2174":1,"2176":1,"2181":1,"2182":1,"2183":2,"2184":2,"2202":1,"2229":2,"2234":3,"2237":1,"2239":1}}],["messagebusbackpressuretests",{"2":{"1591":1},"3":{"1591":2,"1596":1}}],["messagebusprovider",{"2":{"150":1,"200":1,"201":1,"931":1,"1075":1,"1446":1,"1842":2},"3":{"0":2,"150":1,"200":1,"201":2,"640":1,"931":1,"964":1,"1075":1,"1199":4,"1203":1,"1207":1,"1212":1,"1320":1,"1323":4,"1326":1,"1339":3,"1446":1,"1842":2}}],["messagebus",{"2":{"640":2,"642":1,"644":1,"915":1,"933":1,"1441":1,"2014":1},"3":{"0":7,"15":3,"24":1,"25":1,"27":1,"193":2,"195":1,"198":2,"200":1,"203":1,"640":9,"642":1,"644":1,"819":1,"914":1,"915":1,"930":1,"931":3,"932":1,"933":2,"1212":2,"1257":2,"1259":10,"1286":1,"1323":6,"1326":1,"1327":1,"1339":4,"1429":1,"1436":2,"1441":4,"1446":3,"1451":1,"1467":4,"1508":1,"1577":1,"1582":1,"1591":1,"1612":1,"1653":1,"1663":1,"1665":1,"1675":1,"1721":1,"1724":2,"1842":1,"1843":1,"1845":1,"1910":1,"1911":1,"2009":2,"2014":1,"2021":1,"2023":1,"2027":1}}],["messagebussettingstests",{"3":{"1199":1,"1207":1}}],["messagebussettings",{"2":{"0":1,"145":1,"152":1,"201":1,"638":1,"644":1,"822":1,"929":1,"931":1,"1257":1,"1707":2,"1790":1,"1842":2,"1910":2,"2021":1},"3":{"0":1,"15":1,"24":1,"25":1,"27":2,"145":2,"150":1,"152":1,"193":1,"196":1,"198":1,"200":2,"201":2,"203":1,"638":1,"640":4,"644":1,"674":1,"818":1,"819":2,"822":1,"915":1,"929":1,"930":1,"931":2,"1199":14,"1203":1,"1207":3,"1257":3,"1259":20,"1286":2,"1313":1,"1316":1,"1320":2,"1323":24,"1326":1,"1339":3,"1436":2,"1496":1,"1534":1,"1577":1,"1582":1,"1583":1,"1586":1,"1591":1,"1707":3,"1790":1,"1842":2,"1910":2,"2021":1}}],["mediocre",{"3":{"1216":1,"1537":1,"1797":1}}],["medium",{"3":{"682":1,"1324":3,"1395":1,"1396":1,"1417":2,"2222":1,"2236":1,"2238":2}}],["median",{"3":{"1436":1,"1577":1,"1707":1}}],["mediapicker",{"3":{"439":1,"1415":1,"1417":6}}],["media",{"2":{"1712":1},"3":{"416":1,"682":4,"684":1,"691":1,"740":1,"741":1,"743":1,"1202":1,"1203":15,"1207":28,"1300":1,"1311":1,"1324":1,"1350":2,"1415":1,"1417":57,"1491":1,"1496":1,"1585":1,"1669":2,"1712":2,"1714":1,"2075":1,"2120":1}}],["mediate",{"3":{"1992":1}}],["mediated",{"3":{"0":1,"332":1}}],["mediators",{"3":{"1556":1}}],["mediator",{"3":{"1270":2,"1539":2,"1543":1}}],["mediatr",{"3":{"0":1,"1075":1,"2141":1}}],["meetups",{"3":{"1380":1}}],["meetup",{"3":{"1342":1,"1350":1}}],["meetcustomrule",{"3":{"1312":1,"1436":2}}],["meeting",{"3":{"734":1,"808":1,"1283":1,"1311":1,"1417":1,"1436":1,"1491":1,"1526":1,"1888":1}}],["meet",{"3":{"92":1,"255":1,"813":1,"1191":1,"1194":1,"1200":1,"1214":1,"1241":1,"1247":1,"1276":1,"1286":2,"1300":3,"1301":4,"1311":1,"1322":1,"1324":2,"1350":1,"1359":4,"1366":1,"1396":3,"1478":1,"1577":2,"1641":3,"1668":1,"1714":1,"1831":1,"1923":1,"1996":1,"2066":1,"2143":1}}],["meetsminimumsizeonmobileviewport",{"3":{"1714":1}}],["meets",{"3":{"53":1,"135":1,"136":1,"568":1,"811":1,"1231":1,"1247":1,"1271":1,"1286":1,"1300":1,"1311":1,"1326":1,"1346":1,"1359":2,"1360":1,"1396":2,"1415":1,"1417":3,"1436":5,"1476":1,"1488":1,"1526":1,"1549":1,"1558":1,"1577":1,"1641":2,"1833":1,"2060":1,"2138":1}}],["mermaid",{"3":{"1502":1,"1620":1,"1756":1}}],["merchandising",{"3":{"1025":1}}],["mere",{"3":{"681":1,"1270":1,"1297":1}}],["merely",{"0":{"2198":1},"3":{"24":1,"38":1,"39":1,"96":1,"135":2,"137":1,"218":1,"324":1,"353":1,"358":1,"359":1,"360":1,"371":1,"497":1,"540":1,"575":1,"690":1,"757":1,"800":2,"827":2,"904":1,"946":1,"1060":1,"1237":2,"1255":1,"1270":1,"1271":1,"1286":6,"1295":1,"1300":2,"1306":1,"1309":2,"1311":1,"1313":1,"1320":1,"1323":2,"1324":1,"1327":1,"1328":1,"1339":5,"1350":2,"1359":10,"1380":2,"1395":3,"1396":10,"1402":2,"1415":4,"1417":1,"1428":1,"1436":17,"1438":1,"1444":1,"1455":1,"1457":1,"1460":1,"1467":1,"1473":1,"1486":1,"1526":1,"1685":1,"1825":1,"1920":1,"1923":1,"2046":1,"2049":1,"2062":1,"2134":1,"2142":1,"2144":2}}],["merging",{"3":{"627":1,"1018":1,"1359":3,"1453":1,"1591":1,"1767":1}}],["merges",{"3":{"0":1,"418":1,"618":1,"838":2,"1091":1,"1271":1,"1286":1,"1300":1,"1309":1,"1311":1,"1324":1,"1359":6,"1396":1,"1415":1,"1436":1,"1453":1,"1455":2,"1492":1,"1572":1,"1577":1,"1582":1,"1591":1,"1905":1}}],["merge",{"3":{"0":3,"112":1,"135":1,"265":1,"564":2,"590":1,"591":1,"595":1,"618":2,"625":1,"626":3,"628":2,"629":1,"630":1,"642":2,"838":1,"863":2,"1212":2,"1247":3,"1286":1,"1300":2,"1310":1,"1311":2,"1323":4,"1339":2,"1359":1,"1415":4,"1436":2,"1453":3,"1454":1,"1455":5,"1456":1,"1459":1,"1478":1,"1485":1,"1486":4,"1490":1,"1492":16,"1496":2,"1526":6,"1531":1,"1535":1,"1554":1,"1565":1,"1570":1,"1572":1,"1577":12,"1581":3,"1582":3,"1583":1,"1586":1,"1589":3,"1590":1,"1591":12,"1595":1,"1596":5,"1598":1,"1605":1,"1616":1,"1643":1,"1662":1,"1673":1,"1716":3,"1765":1,"1800":1,"1811":1,"1842":1,"1876":1,"1902":1,"1923":2,"2058":1,"2060":1,"2075":1,"2081":1,"2112":1,"2136":1,"2234":1}}],["merged",{"3":{"0":2,"94":1,"109":1,"365":1,"368":1,"373":1,"424":1,"425":1,"526":1,"530":1,"543":1,"550":2,"572":1,"607":1,"832":2,"833":1,"1012":2,"1016":1,"1081":1,"1085":2,"1229":1,"1237":1,"1247":2,"1256":1,"1259":2,"1300":1,"1323":1,"1339":3,"1359":3,"1396":1,"1415":2,"1429":1,"1438":1,"1447":1,"1453":1,"1454":3,"1459":1,"1481":1,"1492":2,"1496":1,"2059":1}}],["merits",{"3":{"486":1,"801":1,"1018":1,"1054":1}}],["mechanic",{"3":{"715":1,"716":1,"1286":4,"1301":1,"1395":1,"1396":4,"1417":1,"1839":1}}],["mechanics",{"3":{"1":1,"147":1,"272":1,"329":1,"369":1,"506":1,"715":1,"861":1,"862":1,"1043":1,"1045":1,"1229":1,"1237":2,"1247":1,"1259":5,"1270":1,"1275":1,"1286":12,"1300":5,"1311":3,"1324":5,"1339":4,"1350":5,"1359":4,"1380":1,"1395":9,"1415":1,"1417":1,"1433":1,"1435":1,"1436":11,"1475":1,"1577":1,"1861":1,"2048":1,"2190":1,"2194":1,"2205":1}}],["mechanically",{"3":{"342":1,"801":1,"1191":2,"1192":1,"1204":1,"1270":1,"1286":1,"1359":2,"1369":1,"1417":1,"1436":6,"1480":1,"1495":1,"1496":8,"1500":1,"1875":1,"1926":1}}],["mechanical",{"3":{"0":1,"88":1,"135":1,"143":1,"267":1,"483":1,"486":1,"674":1,"980":1,"1069":1,"1094":1,"1270":2,"1286":1,"1309":1,"1311":1,"1324":1,"1350":2,"1359":4,"1369":1,"1396":1,"1431":1,"1436":7,"1455":1,"1459":2,"1460":1,"1496":9,"1585":1,"1653":1,"1673":1,"1675":1,"1735":1,"1951":1}}],["mechanisms",{"0":{"2185":1},"3":{"19":1,"67":1,"282":1,"319":1,"340":1,"358":1,"557":1,"812":1,"1144":1,"1236":2,"1237":1,"1286":2,"1300":1,"1304":1,"1310":1,"1311":1,"1323":1,"1324":4,"1359":4,"1379":1,"1395":10,"1396":3,"1417":1,"1436":4,"1497":1,"1517":1,"1706":1,"1708":1,"1784":1,"1816":1,"1858":1,"1996":1,"2070":2,"2071":1,"2143":1,"2167":1,"2169":2,"2183":1,"2195":1}}],["mechanism",{"0":{"1804":1,"1908":1,"1910":1,"2064":1,"2167":1},"3":{"0":10,"3":1,"24":1,"39":1,"68":1,"80":1,"86":1,"109":1,"142":1,"169":1,"186":1,"207":1,"235":1,"259":1,"265":2,"266":2,"292":1,"295":1,"317":2,"320":1,"340":1,"358":1,"361":2,"362":1,"366":1,"372":1,"389":1,"391":1,"413":1,"465":1,"508":1,"517":1,"522":1,"536":2,"537":1,"538":1,"539":1,"582":1,"598":1,"599":1,"605":1,"608":1,"624":1,"658":1,"678":1,"689":2,"696":1,"699":1,"715":1,"723":1,"764":4,"769":1,"808":1,"809":1,"815":1,"820":1,"827":2,"829":1,"844":1,"846":1,"847":1,"848":2,"849":2,"850":1,"871":1,"905":1,"931":1,"958":1,"959":1,"960":1,"981":1,"988":1,"1012":1,"1075":1,"1099":1,"1101":1,"1139":1,"1147":1,"1192":1,"1193":1,"1212":2,"1213":1,"1218":1,"1229":5,"1237":6,"1247":3,"1249":1,"1253":1,"1258":1,"1259":9,"1270":11,"1271":3,"1286":16,"1290":1,"1297":1,"1300":5,"1309":1,"1310":1,"1311":5,"1318":1,"1323":8,"1324":17,"1339":11,"1350":5,"1355":1,"1359":21,"1377":1,"1380":4,"1395":10,"1396":6,"1402":5,"1413":1,"1415":6,"1416":1,"1417":9,"1418":1,"1436":25,"1438":1,"1446":1,"1454":1,"1456":1,"1457":1,"1459":1,"1474":3,"1477":1,"1479":1,"1486":1,"1488":1,"1489":1,"1490":1,"1496":2,"1510":1,"1526":1,"1564":1,"1566":1,"1567":2,"1575":2,"1577":2,"1578":1,"1582":1,"1586":1,"1591":5,"1634":1,"1639":2,"1641":2,"1677":1,"1707":1,"1764":1,"1790":1,"1840":1,"1842":1,"1844":1,"1845":1,"1846":1,"1851":1,"1853":1,"1871":1,"1882":1,"1891":1,"1921":1,"1922":1,"1947":1,"1948":1,"1950":1,"1962":1,"1963":1,"1964":1,"1965":1,"1968":1,"1975":1,"1993":1,"1995":1,"1997":2,"1998":1,"2001":1,"2003":1,"2044":1,"2047":1,"2062":2,"2063":1,"2064":1,"2070":3,"2071":1,"2082":1,"2084":1,"2087":1,"2088":1,"2115":1,"2121":1,"2122":1,"2124":1,"2132":1,"2135":1,"2136":1,"2138":1,"2144":1,"2145":1,"2147":1,"2166":3,"2170":2,"2171":1,"2181":1,"2187":1,"2195":1,"2232":1,"2234":1}}],["mentor",{"3":{"2218":1,"2244":1}}],["mentorship",{"0":{"2244":1},"3":{"2218":1,"2221":1}}],["mentoring",{"3":{"2215":1,"2220":1,"2240":1,"2247":1}}],["mentioning",{"3":{"1415":1}}],["mentioned",{"3":{"370":1,"1006":1,"1632":1}}],["mention",{"3":{"256":1,"423":1,"638":1,"988":1,"1286":1,"1348":1,"1436":1,"1459":1,"1460":1,"1685":2}}],["mentions",{"3":{"0":1,"230":1,"418":1,"425":1,"426":1,"435":1,"497":1,"555":1,"593":1,"609":1,"700":1,"782":1,"1270":4,"1311":3,"1359":1,"1369":1,"1396":1,"1415":2,"1436":3,"1472":1,"1496":1,"1568":1,"1639":2}}],["mental",{"3":{"167":1,"906":1,"932":1,"1220":1,"1323":1,"1359":1,"1395":1,"1416":1,"1805":1}}],["menuitem",{"3":{"1436":1}}],["menus",{"3":{"265":1,"1324":3,"1436":1,"1526":1,"1559":1,"1591":1,"1607":1,"1653":1,"1741":1,"2087":1}}],["menu",{"3":{"0":1,"618":1,"647":1,"648":1,"649":1,"651":1,"1212":1,"1324":19,"1395":2,"1396":4,"1415":6,"1436":2,"1438":1,"1526":1,"1562":1,"1621":1,"1625":1,"1627":4,"1653":3,"1761":2,"2079":4,"2085":1}}],["measurably",{"3":{"1289":1,"1483":1}}],["measurable",{"3":{"255":1,"405":1,"799":1,"1270":1,"1271":1,"1395":1,"1402":1,"1427":1,"1802":2}}],["measuring",{"3":{"236":1,"474":1,"592":1,"1286":1,"1339":1,"1436":1,"1455":1,"1458":1,"1492":2,"2048":1}}],["measureasync",{"3":{"1436":1}}],["measureandassertasync",{"2":{"861":1},"3":{"861":1}}],["measurewebvitalsasync",{"2":{"861":1},"3":{"861":1,"1436":6}}],["measurewebvitalswithinteractionasync",{"2":{"859":1,"861":1,"864":1},"3":{"859":1,"861":2,"864":1,"1436":3}}],["measure",{"3":{"72":1,"407":1,"591":1,"617":1,"631":1,"865":1,"1271":1,"1286":1,"1324":1,"1339":1,"1359":1,"1395":1,"1416":1,"1417":1,"1436":1,"1458":1,"1467":1,"1488":1,"1491":1,"1492":2,"1521":1,"1531":1,"1537":2,"1710":1,"1797":1,"1902":1,"2158":1,"2195":1}}],["measuresarevokedrowfromitsrevocationnotitsexpiry",{"3":{"906":1}}],["measures",{"3":{"0":2,"140":1,"558":1,"591":2,"611":1,"797":1,"821":1,"859":1,"860":2,"861":3,"1259":1,"1263":1,"1270":1,"1323":2,"1324":2,"1339":1,"1395":2,"1425":1,"1436":6,"1438":1,"1455":5,"1461":1,"1467":2,"1492":3,"1496":1,"1526":1,"1591":1,"1670":1,"1797":2,"1821":1,"2025":1,"2047":1,"2089":1}}],["measurements",{"3":{"480":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1,"591":1,"631":5,"636":1,"915":1,"1270":1,"1311":1,"1323":1,"1436":3,"1456":1,"1467":1,"1484":1,"1492":2,"1794":1}}],["measurement",{"3":{"0":1,"397":1,"487":2,"488":1,"489":1,"490":2,"491":1,"492":1,"493":1,"494":1,"591":3,"592":3,"799":1,"859":1,"860":1,"861":5,"863":1,"869":1,"875":1,"980":1,"1018":1,"1199":4,"1207":1,"1259":2,"1270":1,"1339":1,"1369":1,"1395":1,"1427":3,"1436":10,"1438":1,"1445":1,"1451":1,"1453":1,"1455":2,"1458":1,"1465":1,"1467":3,"1475":2,"1478":1,"1492":3,"1531":1,"1802":1,"2048":2,"2049":1,"2234":2}}],["measuredconstructors",{"3":{"1436":4}}],["measured",{"3":{"0":7,"137":1,"237":1,"397":1,"480":1,"483":1,"486":2,"487":2,"488":2,"489":2,"490":2,"491":2,"492":2,"493":2,"494":2,"590":1,"591":3,"592":1,"597":1,"604":1,"616":2,"620":1,"621":1,"632":1,"683":1,"797":2,"801":1,"803":1,"804":1,"805":1,"806":1,"827":1,"828":1,"860":2,"861":5,"862":3,"863":3,"869":1,"871":1,"914":2,"915":1,"947":1,"978":1,"980":1,"983":1,"986":1,"1011":1,"1012":1,"1048":1,"1054":1,"1101":1,"1125":1,"1199":2,"1207":1,"1212":1,"1270":2,"1286":1,"1300":4,"1323":2,"1324":2,"1339":2,"1344":1,"1358":1,"1395":2,"1396":1,"1402":1,"1416":1,"1425":1,"1436":21,"1438":2,"1443":1,"1447":1,"1455":4,"1458":1,"1460":1,"1461":1,"1465":3,"1467":4,"1474":2,"1475":2,"1476":1,"1483":1,"1484":1,"1492":6,"1496":4,"1500":1,"1523":1,"1525":1,"1526":4,"1529":1,"1534":2,"1549":1,"1560":1,"1566":1,"1568":1,"1571":1,"1575":3,"1576":1,"1577":8,"1581":1,"1582":1,"1583":1,"1591":4,"1596":1,"1670":1,"1678":2,"1707":10,"1709":1,"1710":1,"1923":2,"1985":1,"2025":1,"2035":3,"2038":1,"2044":1,"2048":2,"2059":1,"2060":1,"2081":1,"2158":1,"2179":1,"2234":3}}],["meanings",{"3":{"1300":1,"1323":1,"1339":1,"1630":1}}],["meaningless",{"3":{"691":1,"784":1,"1247":1,"1311":1,"1323":4,"1359":1,"1395":2,"1396":1,"1415":1,"1417":1,"1434":1,"1436":1,"1631":2,"1638":1,"1639":2,"2003":1}}],["meaningfulness",{"3":{"1487":1}}],["meaningfully",{"3":{"1323":1,"1359":1,"1417":1,"1436":1,"1492":1,"1950":1}}],["meaningful",{"3":{"305":1,"390":1,"499":1,"775":1,"918":1,"932":1,"1140":1,"1212":1,"1237":1,"1240":1,"1247":3,"1259":1,"1265":1,"1267":1,"1270":2,"1286":3,"1300":1,"1310":1,"1311":1,"1312":1,"1323":1,"1324":3,"1339":1,"1350":4,"1359":8,"1369":1,"1395":6,"1396":4,"1402":5,"1415":2,"1420":1,"1427":1,"1435":1,"1436":7,"1453":1,"1458":1,"1467":1,"1537":1,"1541":1,"1551":2,"1562":1,"1565":1,"1605":1,"1607":1,"1630":1,"1637":1,"1642":1,"1739":1,"1741":1,"1909":1,"2075":1,"2232":1,"2234":1}}],["meaning",{"3":{"284":1,"698":2,"758":1,"827":2,"1090":1,"1222":1,"1237":2,"1241":1,"1247":1,"1253":1,"1259":1,"1264":2,"1271":1,"1286":5,"1300":6,"1301":4,"1311":2,"1323":2,"1324":9,"1339":5,"1350":4,"1359":9,"1369":3,"1395":9,"1396":6,"1402":4,"1415":1,"1417":5,"1436":6,"1442":1,"1459":1,"1465":1,"1467":3,"1476":1,"1537":2,"1630":17,"1633":2,"1638":1,"1639":2,"1640":1,"1727":1,"1728":1,"1729":1,"1730":1,"1734":1,"1769":4,"1797":1,"1810":1,"1933":1,"2076":1,"2173":1,"2187":1}}],["meanwhile",{"3":{"261":1,"826":1,"1350":1,"1380":1,"1395":1}}],["mean",{"3":{"60":1,"110":1,"135":1,"198":1,"218":1,"310":1,"402":1,"414":1,"509":1,"591":2,"593":1,"620":2,"626":1,"697":1,"699":1,"757":1,"768":1,"776":1,"810":1,"819":1,"821":1,"829":1,"856":1,"861":1,"862":1,"863":1,"923":1,"981":2,"1006":1,"1018":1,"1043":1,"1067":1,"1091":1,"1092":1,"1116":1,"1188":1,"1259":3,"1270":1,"1275":1,"1280":1,"1286":6,"1300":4,"1301":1,"1309":4,"1310":2,"1311":2,"1323":4,"1324":2,"1333":1,"1339":6,"1350":6,"1359":6,"1395":4,"1396":8,"1402":1,"1415":4,"1417":5,"1422":1,"1427":1,"1436":5,"1438":1,"1443":1,"1455":2,"1467":2,"1472":1,"1478":1,"1479":1,"1489":1,"1492":2,"1630":1,"1638":1,"1862":1,"1863":1,"1922":1,"1933":1,"1979":1,"2002":1,"2016":1,"2029":1,"2033":1,"2038":1,"2049":1,"2058":1,"2081":1,"2100":1,"2129":1,"2158":1,"2162":1,"2176":1}}],["meantime",{"3":{"635":1,"988":1,"1117":1}}],["meant",{"3":{"0":2,"81":1,"110":1,"246":1,"302":1,"318":1,"342":1,"403":1,"460":1,"539":1,"540":1,"609":1,"648":1,"650":1,"683":1,"697":1,"698":1,"709":1,"765":1,"939":1,"945":1,"1074":1,"1169":1,"1174":1,"1229":2,"1239":1,"1247":4,"1259":2,"1270":1,"1271":2,"1286":3,"1300":8,"1301":1,"1311":2,"1323":2,"1324":4,"1350":1,"1355":1,"1359":3,"1379":2,"1380":1,"1395":1,"1396":4,"1402":2,"1413":1,"1415":1,"1427":1,"1436":16,"1455":1,"1475":1,"1677":1,"1698":1,"1726":1,"1815":1,"1872":1,"1874":1,"2003":1,"2033":1,"2140":1}}],["means",{"0":{"719":1,"2139":1},"1":{"1794":1,"1795":1,"1796":1,"1797":1,"1798":1,"1799":1,"1800":1,"1801":1,"1802":1},"3":{"0":9,"30":1,"32":1,"58":1,"79":1,"80":1,"119":1,"122":1,"132":1,"134":1,"135":1,"136":1,"149":1,"159":1,"160":2,"170":1,"175":1,"185":1,"187":1,"189":1,"194":1,"196":1,"201":1,"216":1,"226":2,"236":1,"237":1,"243":2,"244":1,"255":1,"266":1,"274":1,"282":1,"283":1,"292":1,"311":1,"318":1,"319":1,"320":1,"332":1,"341":1,"342":1,"343":1,"349":1,"351":2,"352":1,"359":1,"361":2,"363":1,"371":1,"372":1,"382":1,"384":1,"390":1,"399":1,"413":1,"441":2,"448":1,"449":3,"461":1,"500":2,"501":1,"508":1,"519":1,"520":1,"538":2,"546":1,"547":1,"549":1,"564":2,"573":1,"575":1,"583":2,"591":1,"598":1,"601":2,"602":1,"617":1,"619":5,"642":1,"650":1,"651":1,"665":1,"666":1,"667":1,"676":1,"682":1,"684":1,"691":1,"692":1,"698":2,"700":1,"708":1,"713":1,"716":1,"717":1,"718":1,"726":1,"727":1,"733":2,"741":3,"743":1,"750":2,"756":1,"766":1,"767":2,"768":1,"781":1,"782":1,"784":1,"792":2,"799":1,"800":1,"801":1,"810":1,"819":1,"821":1,"827":1,"838":1,"845":1,"855":2,"863":1,"872":1,"883":1,"905":1,"906":1,"916":1,"932":2,"945":1,"955":1,"965":2,"988":1,"989":1,"996":3,"997":1,"999":1,"1020":1,"1026":1,"1034":2,"1035":1,"1041":1,"1044":1,"1060":2,"1066":1,"1076":1,"1083":1,"1091":1,"1092":3,"1093":1,"1101":1,"1102":1,"1107":1,"1108":1,"1109":1,"1144":1,"1177":1,"1212":2,"1229":10,"1231":1,"1237":13,"1240":1,"1243":1,"1247":12,"1253":1,"1254":1,"1259":26,"1264":1,"1270":25,"1271":1,"1276":1,"1285":1,"1286":81,"1291":1,"1300":53,"1301":12,"1305":2,"1309":20,"1310":8,"1311":47,"1312":3,"1323":49,"1324":64,"1328":1,"1332":2,"1339":32,"1344":2,"1350":32,"1352":1,"1354":1,"1359":99,"1366":1,"1368":1,"1369":9,"1372":2,"1373":1,"1380":7,"1395":50,"1396":69,"1402":35,"1406":1,"1407":1,"1408":1,"1411":1,"1415":32,"1416":3,"1417":49,"1427":8,"1430":2,"1431":1,"1433":1,"1436":56,"1438":3,"1440":1,"1441":7,"1442":1,"1443":2,"1445":1,"1446":1,"1453":2,"1454":2,"1455":6,"1456":1,"1458":1,"1460":1,"1464":1,"1467":7,"1468":1,"1473":1,"1475":1,"1476":1,"1488":4,"1489":1,"1490":1,"1492":4,"1526":2,"1537":2,"1542":1,"1597":1,"1599":1,"1631":2,"1639":1,"1640":1,"1641":1,"1652":1,"1653":1,"1668":1,"1685":1,"1692":1,"1702":1,"1723":1,"1731":1,"1735":1,"1748":1,"1755":1,"1767":1,"1792":1,"1793":1,"1794":1,"1797":1,"1798":2,"1810":1,"1812":1,"1815":2,"1817":1,"1822":1,"1823":1,"1826":1,"1830":2,"1833":1,"1843":1,"1844":1,"1845":2,"1851":2,"1854":1,"1871":1,"1874":1,"1876":4,"1885":2,"1889":1,"1890":1,"1891":2,"1898":1,"1900":1,"1902":3,"1905":1,"1908":2,"1909":1,"1911":1,"1912":2,"1916":1,"1920":1,"1932":1,"1933":1,"1940":2,"1948":1,"1949":2,"1958":1,"1961":1,"1965":1,"1981":3,"1991":1,"1992":1,"1995":1,"1997":2,"1999":1,"2002":1,"2003":1,"2014":2,"2016":1,"2017":2,"2034":1,"2042":1,"2043":1,"2044":1,"2045":1,"2046":1,"2047":1,"2048":2,"2052":2,"2054":1,"2057":2,"2060":1,"2069":1,"2072":3,"2079":1,"2080":1,"2087":1,"2119":1,"2128":1,"2129":1,"2133":2,"2136":1,"2138":1,"2140":1,"2144":1,"2152":1,"2158":1,"2162":1,"2166":1,"2168":1,"2170":2,"2171":1,"2176":1,"2179":1,"2181":2,"2185":2,"2186":3,"2189":1,"2194":2,"2195":1,"2198":1,"2199":1,"2201":1,"2204":1,"2207":1,"2232":1,"2234":3}}],["memoizing",{"3":{"1259":1,"1286":1,"1311":1}}],["memoization",{"3":{"1247":1,"1395":1,"1556":1}}],["memoize",{"3":{"1247":1,"1395":1}}],["memoizes",{"3":{"244":1,"330":1,"337":1,"1050":1,"1247":2,"1286":2,"1323":1,"1359":1,"1387":1,"1395":2}}],["memoized",{"3":{"242":1,"682":1,"1241":2,"1247":2,"1300":1,"1310":1,"1395":1}}],["memorize",{"3":{"1270":1,"1311":1,"1905":1}}],["memorizing",{"3":{"1231":1,"1263":1,"1311":1,"1372":1,"1396":2}}],["memoryallocator",{"3":{"1438":1}}],["memorymarshal",{"3":{"1359":1}}],["memorystream",{"3":{"1323":1,"1324":1,"1359":1,"1380":1,"1415":3}}],["memorycache",{"3":{"1467":1}}],["memorycacheentryoptions",{"3":{"1301":3}}],["memorycacheservicetests",{"3":{"1199":1,"1207":2,"1301":5}}],["memorycacheservice",{"2":{"248":1,"252":1,"253":1,"731":1},"3":{"0":1,"243":2,"248":2,"252":1,"253":1,"731":1,"1199":4,"1203":1,"1207":2,"1300":6,"1301":57,"1323":2,"1496":2,"1577":1,"1916":2}}],["memorydiagnoser",{"2":{"591":1,"592":1,"2048":1},"3":{"591":2,"592":1,"1436":1,"1492":1,"2048":1}}],["memorydistributedcache",{"2":{"252":1,"1916":1},"3":{"243":1,"252":1,"1301":2,"1323":1,"1916":1}}],["memory",{"2":{"875":1},"3":{"0":6,"16":1,"17":1,"39":1,"43":1,"157":1,"158":1,"162":1,"178":2,"207":1,"209":1,"235":2,"241":1,"242":1,"243":5,"244":1,"245":3,"249":1,"259":1,"261":1,"283":1,"386":1,"390":2,"461":1,"507":5,"508":1,"514":1,"536":1,"540":1,"545":2,"546":1,"549":1,"551":1,"664":1,"665":1,"667":1,"688":1,"692":1,"699":1,"732":1,"733":1,"767":1,"792":1,"793":1,"794":1,"818":1,"827":1,"831":1,"856":2,"875":2,"881":2,"903":1,"905":1,"914":1,"916":1,"1050":1,"1052":1,"1085":1,"1117":1,"1123":1,"1125":1,"1126":1,"1150":2,"1152":2,"1154":1,"1155":1,"1183":1,"1212":1,"1229":1,"1237":4,"1239":3,"1243":1,"1247":11,"1250":1,"1259":1,"1270":1,"1278":1,"1282":1,"1286":21,"1290":2,"1297":1,"1298":3,"1300":11,"1301":7,"1309":2,"1310":2,"1311":15,"1323":3,"1324":46,"1332":1,"1334":1,"1336":1,"1337":1,"1339":12,"1346":1,"1350":6,"1354":1,"1357":1,"1359":45,"1362":1,"1367":1,"1369":5,"1379":1,"1380":1,"1383":1,"1391":1,"1395":13,"1396":17,"1401":1,"1402":3,"1415":2,"1417":5,"1427":1,"1429":1,"1431":1,"1436":25,"1438":9,"1442":3,"1443":2,"1457":1,"1465":1,"1467":6,"1473":1,"1476":1,"1526":2,"1535":1,"1549":1,"1560":1,"1562":1,"1577":3,"1582":1,"1586":1,"1590":1,"1591":1,"1611":1,"1614":1,"1641":4,"1651":1,"1667":1,"1668":1,"1675":1,"1715":1,"1721":1,"1814":2,"1815":2,"1817":1,"1824":1,"1856":1,"1868":1,"1885":1,"1904":1,"1909":1,"1916":3,"1923":4,"1924":1,"1929":1,"1950":1,"1966":1,"1968":1,"1970":2,"1982":1,"1986":1,"1988":1,"2001":1,"2002":2,"2008":1,"2028":1,"2053":1,"2076":1,"2078":2,"2081":1,"2083":1,"2110":1,"2130":1,"2166":1,"2169":2,"2182":1,"2201":1,"2234":2}}],["memberallowlistentry",{"3":{"1436":2}}],["membername",{"3":{"1324":3,"1427":1,"1436":2}}],["memberexpression",{"3":{"1247":1,"1286":3,"1310":1,"1324":2,"1436":1}}],["memberpath",{"3":{"1247":2,"1310":1,"1395":1}}],["memberless",{"3":{"657":1}}],["memberinit",{"3":{"330":1,"1242":1,"1247":3,"1286":1,"1311":2,"1988":1}}],["member",{"2":{"1161":1},"3":{"0":13,"24":1,"27":1,"121":2,"124":1,"126":1,"135":4,"142":1,"164":1,"186":1,"245":1,"248":1,"249":1,"255":1,"261":1,"335":1,"350":1,"443":1,"463":1,"501":1,"502":1,"545":1,"546":2,"549":1,"550":2,"583":1,"609":1,"633":2,"692":1,"698":2,"725":1,"726":1,"733":2,"734":1,"735":1,"741":2,"745":1,"749":1,"782":3,"783":2,"784":2,"854":1,"859":1,"861":2,"922":1,"963":3,"964":12,"965":2,"966":3,"967":1,"979":3,"980":6,"981":3,"982":3,"984":2,"1034":1,"1038":1,"1042":1,"1050":3,"1052":1,"1059":2,"1060":2,"1091":1,"1119":1,"1133":1,"1135":1,"1161":14,"1162":1,"1163":2,"1168":1,"1176":1,"1193":1,"1212":1,"1219":3,"1225":2,"1229":13,"1230":1,"1232":1,"1235":2,"1236":1,"1237":21,"1239":1,"1241":2,"1247":19,"1249":1,"1259":6,"1263":1,"1266":1,"1270":39,"1271":7,"1276":2,"1278":1,"1279":1,"1280":1,"1286":99,"1293":1,"1294":1,"1295":3,"1297":1,"1300":29,"1301":12,"1309":23,"1310":5,"1311":21,"1312":1,"1315":1,"1318":2,"1323":23,"1324":48,"1327":1,"1339":6,"1348":1,"1350":21,"1352":1,"1353":1,"1354":2,"1357":1,"1359":145,"1369":8,"1376":1,"1380":7,"1395":25,"1396":60,"1402":13,"1405":1,"1407":1,"1408":1,"1411":1,"1415":29,"1416":2,"1417":22,"1423":2,"1427":3,"1429":1,"1431":1,"1436":210,"1438":2,"1467":1,"1477":1,"1478":1,"1489":2,"1496":2,"1517":1,"1526":1,"1577":3,"1673":1,"1686":1,"1699":1,"1727":5,"1734":2,"1769":1,"1810":1,"1815":3,"1887":1,"1915":1,"1953":1,"1955":5,"1963":1,"1977":1,"1989":1,"1990":1,"2002":1,"2044":1,"2047":1,"2064":1,"2076":1,"2079":1,"2102":1,"2109":3,"2138":1,"2188":1,"2192":1}}],["membersof",{"3":{"1436":3}}],["memberslazy",{"3":{"1237":1}}],["membershipservice",{"3":{"1199":2,"1207":1}}],["membershipdto",{"3":{"1199":3,"1207":1}}],["membership",{"0":{"1203":1},"3":{"0":1,"284":1,"380":2,"381":1,"1152":1,"1154":1,"1200":1,"1247":6,"1259":1,"1286":2,"1296":1,"1300":5,"1302":1,"1307":2,"1309":4,"1310":1,"1311":1,"1312":1,"1324":9,"1350":1,"1359":3,"1380":1,"1396":5,"1400":1,"1402":1,"1436":5,"1496":5,"1638":1,"1945":4}}],["members",{"0":{"1300":1},"1":{"977":1,"978":1,"979":1,"980":1,"981":1,"982":1,"983":1,"984":1},"3":{"0":8,"39":2,"109":1,"112":1,"135":6,"136":1,"142":1,"166":1,"184":1,"201":1,"235":1,"258":1,"261":1,"276":1,"326":1,"486":1,"497":1,"499":1,"543":1,"545":1,"549":7,"550":4,"551":3,"552":1,"583":5,"633":1,"649":1,"650":1,"657":1,"674":2,"675":1,"677":1,"682":1,"733":1,"749":1,"782":2,"784":1,"819":1,"846":1,"849":1,"881":1,"884":1,"922":1,"963":1,"964":5,"966":2,"975":1,"977":1,"980":4,"982":1,"1018":1,"1027":1,"1034":1,"1036":1,"1045":1,"1050":2,"1133":2,"1135":1,"1168":3,"1175":2,"1193":1,"1198":1,"1212":4,"1214":3,"1220":1,"1229":3,"1232":1,"1235":2,"1236":1,"1237":19,"1239":2,"1247":11,"1249":1,"1259":9,"1262":1,"1269":1,"1270":12,"1271":1,"1280":1,"1281":2,"1286":67,"1288":1,"1296":1,"1299":1,"1300":39,"1301":7,"1304":1,"1309":16,"1310":5,"1311":19,"1312":3,"1314":1,"1323":28,"1324":74,"1334":1,"1339":10,"1347":2,"1349":1,"1350":46,"1359":107,"1380":7,"1395":37,"1396":55,"1402":40,"1405":1,"1409":1,"1412":1,"1414":1,"1415":35,"1416":5,"1417":23,"1427":6,"1431":2,"1436":141,"1438":3,"1488":3,"1489":1,"1496":47,"1498":2,"1538":1,"1575":1,"1577":1,"1648":1,"1654":1,"1766":1,"1810":2,"1815":1,"1849":1,"1858":1,"1871":1,"1880":1,"1915":2,"1926":1,"1948":1,"1990":1,"1992":1,"2044":1,"2096":1,"2109":1,"2169":1,"2177":1,"2234":1}}],["met",{"3":{"1017":1,"1145":1,"1152":1,"1153":1,"1155":1,"1248":1,"1323":3,"1359":1,"1396":1,"1415":1,"1418":1,"1436":1,"1445":1,"1526":6,"1527":1,"1531":1,"1537":5,"1576":1,"1577":10,"1578":1,"1582":2,"1591":1,"1797":1,"2015":1,"2173":1,"2207":1}}],["metastasizes",{"3":{"2118":1}}],["meta",{"3":{"1436":24,"1486":1,"1496":1}}],["metacharacters",{"3":{"1452":1}}],["metacharacter",{"3":{"1324":1}}],["metaphor",{"3":{"1229":1}}],["metapackages",{"3":{"940":1}}],["metapackage",{"1":{"936":1,"937":1,"938":1,"939":1,"940":1,"941":1,"942":1},"3":{"0":3,"135":2,"139":1,"141":3,"142":1,"145":1,"526":1,"936":1,"937":1,"939":4,"940":3,"941":3,"942":1,"953":2,"957":1,"966":1,"984":1,"1096":1,"1211":1,"1212":1,"1454":1,"1503":1,"1527":1,"1577":1,"1660":1,"1661":1,"1693":1,"1781":1,"2174":1,"2229":2,"2234":2,"2236":1}}],["metadatanames",{"3":{"1311":1}}],["metadata",{"0":{"1236":1},"1":{"1310":1},"2":{"1369":1},"3":{"0":5,"13":1,"31":2,"90":1,"91":1,"93":1,"98":2,"99":1,"103":1,"173":2,"175":3,"179":1,"189":1,"318":1,"330":1,"435":1,"439":1,"440":1,"526":1,"528":1,"611":1,"749":2,"939":1,"981":1,"1089":1,"1093":1,"1107":1,"1115":1,"1133":1,"1136":1,"1192":1,"1202":1,"1203":1,"1208":1,"1212":1,"1229":4,"1230":1,"1236":1,"1237":2,"1238":1,"1244":2,"1245":1,"1247":4,"1259":1,"1262":1,"1271":1,"1286":20,"1287":1,"1297":3,"1300":16,"1309":9,"1310":15,"1311":23,"1312":10,"1323":10,"1324":1,"1339":1,"1340":1,"1350":4,"1359":10,"1369":16,"1380":1,"1396":5,"1405":1,"1409":1,"1415":10,"1416":2,"1417":1,"1427":1,"1434":1,"1436":20,"1438":1,"1441":2,"1443":1,"1447":2,"1450":1,"1454":1,"1467":4,"1496":1,"1629":1,"1630":2,"1631":2,"1639":1,"1640":1,"1641":15,"1663":1,"1664":1,"1667":1,"1668":1,"1703":1,"1805":2,"1815":1,"1817":1,"1825":1,"1867":1,"1898":2,"1904":1,"1905":1,"1925":1,"1927":3,"1928":1,"1963":1,"1988":2,"1995":1,"2001":2,"2010":1,"2019":1,"2020":1,"2026":1,"2126":2,"2127":1,"2128":2,"2130":2,"2234":1}}],["methodreference",{"3":{"1436":1}}],["methoddefinition",{"3":{"1436":1}}],["methodinfo",{"3":{"1270":1,"1286":3}}],["methodology",{"3":{"491":1,"797":1,"1496":2,"2116":1,"2234":1}}],["methodname",{"3":{"135":1,"1286":3,"1436":4}}],["methods",{"1":{"1808":1,"1809":1,"1810":1,"1811":1,"1812":1},"3":{"0":11,"68":1,"71":1,"109":1,"130":2,"135":5,"136":3,"137":2,"139":1,"142":1,"281":1,"380":1,"415":1,"499":1,"537":1,"547":1,"549":1,"578":1,"674":2,"749":1,"773":1,"774":2,"775":1,"776":1,"790":1,"854":1,"860":1,"914":1,"921":1,"922":2,"923":1,"924":1,"926":1,"963":1,"964":3,"966":1,"979":3,"980":1,"982":1,"1004":1,"1050":1,"1075":1,"1161":1,"1167":1,"1168":2,"1169":1,"1186":1,"1193":1,"1212":2,"1214":1,"1219":1,"1220":1,"1221":2,"1223":1,"1229":9,"1236":1,"1237":9,"1240":1,"1247":8,"1259":5,"1265":2,"1269":1,"1270":5,"1286":26,"1290":1,"1294":1,"1297":1,"1300":22,"1301":3,"1309":15,"1310":5,"1311":12,"1312":3,"1320":1,"1323":22,"1324":28,"1339":14,"1342":1,"1343":5,"1344":1,"1350":18,"1353":1,"1358":1,"1359":36,"1366":1,"1368":2,"1369":2,"1378":2,"1380":18,"1394":1,"1395":20,"1396":30,"1402":9,"1405":4,"1415":9,"1416":1,"1417":23,"1420":1,"1427":6,"1431":1,"1436":39,"1437":1,"1442":1,"1443":1,"1444":1,"1485":1,"1487":2,"1488":2,"1489":3,"1496":3,"1525":2,"1526":1,"1539":1,"1541":1,"1576":1,"1577":3,"1585":2,"1639":1,"1647":1,"1651":2,"1654":1,"1659":1,"1662":1,"1671":1,"1686":1,"1751":1,"1782":1,"1805":2,"1807":2,"1808":1,"1810":1,"1812":1,"1815":1,"1817":1,"1935":1,"1944":1,"1990":1,"2009":1,"2023":1,"2043":1,"2090":1,"2092":1,"2103":1,"2119":1,"2120":1,"2124":1,"2169":2,"2180":1,"2193":1,"2208":1,"2222":1,"2229":1,"2232":1}}],["method",{"2":{"160":1,"1995":1},"3":{"0":10,"5":3,"24":1,"27":1,"39":1,"93":1,"94":1,"95":2,"96":1,"98":2,"108":1,"109":1,"110":1,"113":1,"130":2,"135":11,"137":1,"139":2,"140":2,"157":1,"160":1,"225":1,"252":1,"254":1,"256":1,"295":1,"312":1,"318":1,"325":1,"336":1,"341":1,"395":1,"397":1,"407":1,"409":1,"459":1,"487":1,"499":1,"511":1,"512":1,"546":2,"548":1,"549":1,"592":1,"631":1,"632":1,"657":1,"665":1,"672":1,"674":6,"676":1,"677":1,"682":1,"715":1,"741":2,"748":1,"749":2,"750":1,"751":4,"776":1,"826":1,"827":1,"846":1,"849":1,"850":1,"855":1,"905":2,"921":1,"979":5,"980":7,"981":2,"982":3,"987":1,"988":1,"996":1,"1004":1,"1018":1,"1019":1,"1021":1,"1026":1,"1027":1,"1030":1,"1036":1,"1043":1,"1059":1,"1093":1,"1100":1,"1133":1,"1135":1,"1161":6,"1162":1,"1168":1,"1169":1,"1170":1,"1184":3,"1212":2,"1214":1,"1215":1,"1218":4,"1224":2,"1229":8,"1231":1,"1233":2,"1234":1,"1237":24,"1238":1,"1241":1,"1242":1,"1244":2,"1247":22,"1259":19,"1261":1,"1265":1,"1269":3,"1270":35,"1271":8,"1278":1,"1286":66,"1288":1,"1291":2,"1293":2,"1300":59,"1301":3,"1309":32,"1310":7,"1311":52,"1312":15,"1314":2,"1315":2,"1316":2,"1318":1,"1323":53,"1324":74,"1326":1,"1329":1,"1333":1,"1335":1,"1336":2,"1339":44,"1344":1,"1345":1,"1346":1,"1348":1,"1350":30,"1353":3,"1355":1,"1359":142,"1362":1,"1365":2,"1368":3,"1369":7,"1372":1,"1378":3,"1380":19,"1382":1,"1383":1,"1389":1,"1395":67,"1396":87,"1402":21,"1405":1,"1415":49,"1417":25,"1418":1,"1421":1,"1427":8,"1429":1,"1431":4,"1436":133,"1438":4,"1441":4,"1442":1,"1443":1,"1444":2,"1453":1,"1467":2,"1486":1,"1488":2,"1489":2,"1492":1,"1493":1,"1496":4,"1507":1,"1539":1,"1541":1,"1641":1,"1653":1,"1654":2,"1666":1,"1685":2,"1686":1,"1701":6,"1702":3,"1715":1,"1730":4,"1747":1,"1755":1,"1769":1,"1776":1,"1783":1,"1789":1,"1790":1,"1803":3,"1804":1,"1805":1,"1806":1,"1807":2,"1809":2,"1810":4,"1812":2,"1815":1,"1817":1,"1818":1,"1820":1,"1821":1,"1824":1,"1825":3,"1826":1,"1831":1,"1832":1,"1840":1,"1842":1,"1856":1,"1859":1,"1880":1,"1881":2,"1884":1,"1899":1,"1902":1,"1908":1,"1912":1,"1935":2,"1937":1,"1944":5,"1950":1,"1953":1,"1954":1,"1955":1,"1956":1,"1962":1,"1968":1,"1970":1,"1982":1,"1990":1,"1995":1,"1996":1,"2001":1,"2007":1,"2015":1,"2016":1,"2021":1,"2031":1,"2033":1,"2044":3,"2048":1,"2050":1,"2059":2,"2068":1,"2074":3,"2080":1,"2082":1,"2085":1,"2093":1,"2094":2,"2096":1,"2099":2,"2128":1,"2136":1,"2141":1,"2158":2,"2166":1,"2168":1,"2172":1,"2181":1,"2186":1,"2193":1,"2199":4,"2202":1,"2205":1,"2234":1}}],["metername",{"3":{"1247":2,"1259":2,"1270":1,"1286":2,"1311":2,"1323":3,"1339":1,"1427":4}}],["metering",{"0":{"2179":1},"3":{"1016":1,"1020":1,"1022":1,"1192":1,"1311":3,"1418":1,"1421":1,"1496":1,"2001":1,"2178":1,"2211":1,"2229":1}}],["meterlistener",{"3":{"897":1}}],["meterprovider",{"3":{"397":1,"1333":1,"1339":1,"1443":1,"2158":1}}],["meters",{"3":{"0":2,"395":2,"397":1,"400":2,"407":1,"408":1,"792":1,"818":1,"819":1,"822":1,"899":1,"1018":1,"1186":1,"1212":1,"1270":1,"1311":1,"1323":1,"1333":3,"1339":7,"1427":1,"1442":1,"1443":3,"1450":1,"1467":2,"1577":1,"1670":2,"1843":1,"1971":1,"2007":1,"2011":1,"2014":1,"2158":2,"2162":2}}],["metered",{"1":{"2172":1,"2173":1,"2174":1,"2175":1,"2176":1,"2177":1,"2178":1,"2179":1,"2180":1,"2181":1,"2182":1},"3":{"0":3,"173":2,"175":1,"177":1,"179":1,"279":1,"280":1,"287":1,"1016":1,"1018":1,"1091":2,"1202":1,"1203":1,"1212":1,"1311":4,"1324":1,"1350":2,"1358":2,"1359":5,"1369":2,"1395":1,"1425":1,"1668":1,"1779":1,"1999":1,"2001":1,"2171":2,"2172":2,"2195":1,"2211":1}}],["meter",{"0":{"407":1,"408":1},"3":{"0":14,"24":2,"66":1,"72":3,"121":1,"124":1,"126":1,"241":1,"255":4,"258":3,"259":1,"261":1,"395":12,"397":7,"399":2,"400":3,"404":5,"406":2,"407":3,"408":4,"409":2,"707":2,"731":1,"819":3,"821":3,"822":2,"823":1,"827":1,"829":1,"897":3,"899":2,"900":1,"901":1,"914":1,"916":1,"917":1,"1016":1,"1018":3,"1020":1,"1044":1,"1089":2,"1090":3,"1091":3,"1092":2,"1093":1,"1094":1,"1096":1,"1192":1,"1212":2,"1247":12,"1256":1,"1259":9,"1268":2,"1270":7,"1275":1,"1286":3,"1311":15,"1317":2,"1323":13,"1333":5,"1339":12,"1366":1,"1369":1,"1379":1,"1396":5,"1400":1,"1402":2,"1418":2,"1421":1,"1425":6,"1427":13,"1435":2,"1438":1,"1442":3,"1443":3,"1451":1,"1465":3,"1467":8,"1496":2,"1577":1,"1586":1,"1665":1,"1668":1,"1843":1,"1919":1,"1922":1,"1946":1,"1949":1,"2003":1,"2007":1,"2011":2,"2014":2,"2158":16,"2159":1,"2161":2,"2162":4,"2179":6,"2181":1,"2182":1,"2193":1,"2195":2}}],["metricalerts",{"3":{"609":1,"1467":1}}],["metricmeasurecolumn",{"2":{"609":1,"2160":1},"3":{"609":2,"1467":2,"2160":1}}],["metricstreamconfiguration",{"2":{"1333":1,"1443":1},"3":{"1333":1,"1339":1,"1443":1,"1577":1}}],["metricsinstrumentationtoggletests",{"3":{"1199":1,"1207":2,"1339":1,"1438":1}}],["metrics",{"2":{"407":1},"3":{"0":2,"15":1,"125":1,"395":4,"397":7,"398":1,"399":2,"401":1,"402":4,"404":1,"407":3,"409":5,"707":1,"709":1,"711":1,"859":1,"861":2,"897":1,"914":1,"916":1,"917":1,"1020":1,"1043":1,"1044":1,"1213":1,"1247":5,"1259":2,"1268":1,"1270":5,"1286":1,"1311":2,"1323":3,"1333":4,"1339":13,"1421":1,"1425":1,"1427":4,"1436":4,"1438":3,"1440":1,"1442":1,"1443":8,"1450":1,"1451":1,"1465":3,"1467":6,"1487":1,"1496":10,"1550":1,"1577":2,"1591":1,"1632":1,"1641":1,"1664":1,"1677":4,"1841":1,"1923":1,"2004":1,"2006":1,"2007":2,"2011":1,"2155":1,"2156":2,"2157":1,"2158":7,"2159":1,"2161":4,"2162":3,"2194":1,"2217":1,"2234":1}}],["metric",{"2":{"916":1},"3":{"0":7,"20":1,"343":1,"395":2,"397":2,"398":2,"527":1,"530":2,"607":2,"608":2,"609":4,"610":2,"611":1,"613":1,"727":1,"818":1,"860":1,"861":3,"862":2,"863":1,"897":2,"898":1,"899":1,"914":1,"916":3,"918":1,"1247":5,"1259":1,"1268":1,"1270":7,"1275":1,"1309":1,"1311":2,"1317":1,"1323":4,"1333":1,"1339":9,"1396":3,"1402":2,"1415":1,"1436":4,"1438":1,"1443":4,"1446":2,"1450":1,"1467":12,"1469":2,"1474":3,"1476":1,"1577":2,"1586":1,"1589":1,"1591":2,"1596":1,"1598":1,"1665":1,"1677":1,"1706":1,"1709":1,"1843":1,"1909":2,"1911":1,"1912":1,"1919":2,"2011":1,"2015":1,"2052":1,"2158":2,"2160":6,"2161":2,"2162":2}}],["ma0176",{"3":{"1436":1}}],["ma0136",{"3":{"1436":1}}],["ma0011",{"3":{"2087":1}}],["ma0004",{"2":{"481":1,"482":1},"3":{"481":1,"482":2,"490":1,"491":1,"492":1}}],["ma0076",{"2":{"269":1},"3":{"0":1,"265":1,"269":1,"485":1,"1577":1,"2087":1}}],["magic",{"3":{"1270":1,"1285":1,"1286":2,"1300":2,"1309":2,"1311":4,"1323":4,"1324":1,"1350":1,"1353":1,"1359":1,"1395":2,"1396":1,"1402":2,"1411":1,"1415":7,"1436":1,"1438":1,"1467":1,"1526":1,"1554":1,"1557":1,"1631":1,"1641":2,"1859":1,"1911":1,"1958":1,"2128":1,"2130":2,"2138":1,"2141":1,"2222":1}}],["magazine",{"3":{"1074":1}}],["magnitude",{"3":{"592":1,"860":1,"1436":1,"1707":1,"2002":1}}],["macintosh",{"3":{"1324":2}}],["macos",{"3":{"1212":1,"1381":1,"1416":3,"1417":2,"1459":3,"1513":1,"1606":1,"1740":1,"1773":1,"2080":1,"2232":1}}],["mac",{"3":{"682":1,"684":1,"1286":1,"1324":1,"1417":4,"1660":1,"1669":1}}],["maccatalyst",{"3":{"412":1,"413":2,"434":1,"436":1,"1207":2,"1416":7,"1417":3,"1454":1,"1459":1,"2122":1}}],["machinery",{"1":{"1039":1,"1040":1,"1041":1,"1042":1,"1043":1,"1044":1,"1045":1,"1046":1},"3":{"0":2,"46":1,"164":1,"167":1,"225":1,"230":1,"255":1,"269":1,"272":1,"274":1,"447":1,"448":1,"455":1,"469":1,"470":1,"477":1,"536":1,"548":1,"556":1,"572":1,"676":1,"678":1,"697":1,"733":1,"744":1,"802":1,"845":1,"921":1,"1039":1,"1040":1,"1041":1,"1043":1,"1046":1,"1076":1,"1144":1,"1201":1,"1212":3,"1217":1,"1227":1,"1247":3,"1248":1,"1249":2,"1252":1,"1259":3,"1270":2,"1275":1,"1281":1,"1286":2,"1287":1,"1300":1,"1301":1,"1302":1,"1309":3,"1310":2,"1311":4,"1317":1,"1318":1,"1319":1,"1323":1,"1324":4,"1328":1,"1333":1,"1340":1,"1343":1,"1359":11,"1363":1,"1367":1,"1370":1,"1376":1,"1379":1,"1380":3,"1395":3,"1396":4,"1401":1,"1402":2,"1403":1,"1415":2,"1428":1,"1436":13,"1439":1,"1488":1,"1571":1,"1577":1,"1800":1,"1826":1,"1853":1,"1854":1,"1861":1,"1884":1,"1895":1,"1952":1,"2056":1,"2081":2,"2083":1,"2088":1,"2131":1,"2133":1,"2134":1,"2137":1,"2183":1,"2184":2,"2195":1,"2234":2}}],["machines",{"3":{"0":1,"27":1,"926":1,"1161":1,"1402":1,"1436":3,"2044":1}}],["machine",{"0":{"813":1,"1766":1},"3":{"0":3,"264":1,"265":5,"295":1,"450":1,"485":1,"537":2,"576":1,"584":1,"592":2,"593":1,"620":1,"641":2,"665":2,"725":1,"741":1,"782":1,"784":1,"791":1,"808":2,"809":1,"810":6,"811":2,"812":1,"813":1,"815":1,"914":1,"926":1,"1067":2,"1068":1,"1116":1,"1117":1,"1161":2,"1162":1,"1212":2,"1219":1,"1229":1,"1237":1,"1247":1,"1249":1,"1259":2,"1263":1,"1270":2,"1271":4,"1296":1,"1300":5,"1309":1,"1311":12,"1323":2,"1324":3,"1335":1,"1336":1,"1339":9,"1350":2,"1359":19,"1380":1,"1389":1,"1390":1,"1395":4,"1396":3,"1402":7,"1415":6,"1416":1,"1417":1,"1430":1,"1436":35,"1438":2,"1441":1,"1442":1,"1453":2,"1454":2,"1455":1,"1481":1,"1488":1,"1490":1,"1492":2,"1496":1,"1525":1,"1526":6,"1577":4,"1591":6,"1600":1,"1633":2,"1666":1,"1668":1,"1689":1,"1749":2,"1764":1,"1765":1,"1805":1,"1811":1,"1926":1,"1970":1,"2004":1,"2048":2,"2085":2,"2088":1,"2093":1,"2108":1,"2170":2,"2183":1,"2222":1,"2234":2}}],["mailaddress",{"2":{"1344":1},"3":{"1344":1,"1350":2,"1415":2,"1639":1,"1640":1}}],["mailing",{"3":{"1311":1,"1764":2}}],["mailmessage",{"3":{"1309":2,"1323":1}}],["mails",{"3":{"1294":1,"1407":1}}],["mailto",{"3":{"1271":1,"1417":2}}],["mailed",{"3":{"1184":1,"1300":1,"1324":1,"1969":1}}],["mailbox",{"3":{"1150":1,"1436":1}}],["maildevsmtpport",{"3":{"1339":1,"1441":1}}],["maildevhttpport",{"3":{"1339":1,"1441":1}}],["maildev",{"3":{"1069":1,"1302":1,"1320":1,"1326":1,"1339":6,"1440":1,"1441":4,"1444":2,"1446":2,"1490":1,"1526":1,"1591":1,"1660":1,"1938":1,"2006":2,"2014":1}}],["mail",{"2":{"72":1,"1344":1},"3":{"72":3,"230":3,"673":1,"674":2,"675":1,"926":1,"1059":1,"1108":2,"1203":4,"1207":12,"1295":1,"1300":1,"1302":2,"1309":12,"1311":1,"1320":2,"1323":7,"1339":2,"1344":1,"1350":2,"1408":1,"1415":3,"1436":1,"1438":1,"1439":1,"1467":1,"1512":2,"1932":1,"2004":1,"2005":1,"2013":1,"2014":1,"2237":1,"2239":1}}],["mainly",{"3":{"2111":1}}],["mainlauncher",{"3":{"428":1,"1416":3}}],["mainlayout",{"2":{"275":1,"276":1,"1607":1,"1644":2,"1741":1,"2079":1,"2081":1},"3":{"0":2,"273":6,"275":2,"276":2,"649":3,"652":1,"1324":11,"1396":1,"1526":3,"1577":4,"1582":1,"1607":1,"1627":1,"1644":5,"1653":1,"1687":1,"1741":1,"2079":3,"2081":1,"2085":4}}],["mainapplication",{"3":{"1199":1,"1203":1,"1207":2,"1212":1,"1416":13}}],["mainactivity",{"2":{"423":1},"3":{"418":3,"422":2,"423":2,"425":2,"426":2,"427":1,"428":1,"429":1,"1199":2,"1203":1,"1207":2,"1416":26,"1417":2,"1436":5,"1496":2}}],["mainpage",{"3":{"1199":2,"1203":1,"1207":2,"1212":1,"1416":20,"1417":3}}],["mainpagebase",{"3":{"1199":2,"1203":1,"1207":2,"1324":3,"1416":9,"1417":27,"1496":1}}],["mainthread",{"3":{"1417":6}}],["maintenance",{"3":{"0":1,"336":1,"360":1,"399":1,"423":1,"529":1,"809":1,"814":1,"1075":1,"1247":1,"1286":2,"1300":1,"1350":1,"1369":1,"1395":1,"1436":2,"1459":1,"1465":1,"1844":1,"1848":1,"2144":1}}],["maintainable",{"3":{"1436":1}}],["maintainability",{"3":{"0":1,"1011":1,"1496":1,"1526":1,"1534":1,"1536":1,"1552":1,"1553":1,"1571":1,"1591":1,"2043":2}}],["maintains",{"3":{"1286":2,"1301":1,"1323":1,"1369":1,"1436":1,"1916":1}}],["maintaining",{"3":{"486":1,"634":1,"1309":1,"1311":1,"1359":1,"1436":2,"1479":1,"1639":1}}],["maintainers",{"3":{"1436":1}}],["maintainer",{"3":{"150":1,"590":1,"1436":1,"1454":1,"1459":1,"2048":1}}],["maintained",{"0":{"1521":1},"3":{"0":1,"58":1,"135":1,"342":1,"584":1,"609":1,"620":1,"634":1,"642":1,"683":1,"759":1,"801":1,"839":1,"974":2,"1237":1,"1286":1,"1324":1,"1339":1,"1350":2,"1359":6,"1380":1,"1396":2,"1416":1,"1436":1,"1467":1,"1474":1,"1479":1,"1484":1,"1490":1,"1526":1,"1528":1,"1534":1,"1546":1,"1571":1,"1577":1,"1579":1,"1593":1,"1599":1,"1600":1,"1658":1,"1705":1,"1885":1,"2100":1,"2160":1,"2235":1}}],["maintain",{"3":{"136":1,"167":1,"311":1,"1324":1,"1395":1,"1415":1,"1492":1,"1638":1,"1877":1,"1885":1,"1942":1,"1995":1,"2049":1}}],["main",{"0":{"1467":1},"2":{"63":1,"66":1,"73":1,"296":1,"365":1,"373":1,"374":1,"375":1,"566":1,"593":1,"597":1,"601":1,"604":1,"607":2,"613":1,"629":1,"644":1,"719":1,"756":1,"761":1,"766":1,"794":1,"877":1,"920":1,"1016":1,"1128":1,"1458":1,"1463":1,"1464":1,"1476":1,"1478":1,"1583":1,"1589":1,"1597":1,"1607":1,"1644":1,"1741":1},"3":{"0":5,"15":1,"27":1,"47":1,"59":1,"62":1,"63":2,"66":1,"72":1,"73":1,"92":1,"93":6,"94":3,"95":1,"96":3,"104":3,"128":1,"135":1,"162":1,"180":2,"261":1,"265":1,"291":2,"296":1,"365":1,"368":1,"373":1,"374":2,"375":1,"397":2,"403":5,"409":2,"495":2,"526":1,"528":1,"530":1,"538":1,"543":1,"550":1,"564":1,"566":2,"572":1,"591":2,"593":1,"597":1,"599":57,"600":8,"601":11,"602":3,"603":2,"604":3,"607":6,"608":1,"609":44,"611":3,"612":2,"613":5,"629":2,"633":1,"640":12,"642":4,"643":3,"644":2,"648":1,"664":2,"665":5,"668":4,"669":4,"682":1,"684":1,"719":3,"720":2,"756":2,"757":6,"761":3,"765":5,"766":4,"768":1,"774":2,"790":2,"794":1,"827":3,"832":2,"837":2,"854":1,"869":3,"875":3,"877":3,"914":2,"915":1,"916":2,"917":2,"920":1,"992":1,"995":1,"998":1,"1016":1,"1017":2,"1018":1,"1020":2,"1043":1,"1044":1,"1045":1,"1116":2,"1119":1,"1125":1,"1128":1,"1154":2,"1156":2,"1212":1,"1229":2,"1300":1,"1309":1,"1324":5,"1331":1,"1339":3,"1350":3,"1359":4,"1380":1,"1395":1,"1396":5,"1416":10,"1417":7,"1431":2,"1436":19,"1438":1,"1441":7,"1442":5,"1443":13,"1446":27,"1447":3,"1450":4,"1451":2,"1453":5,"1454":5,"1455":18,"1456":1,"1457":1,"1458":1,"1460":3,"1462":1,"1463":5,"1464":1,"1465":8,"1466":8,"1467":312,"1470":9,"1472":5,"1473":10,"1474":19,"1475":3,"1476":26,"1477":5,"1478":3,"1480":1,"1481":8,"1482":3,"1483":1,"1484":6,"1486":1,"1489":3,"1492":7,"1496":24,"1524":2,"1525":2,"1526":17,"1531":2,"1532":2,"1534":3,"1535":4,"1554":1,"1577":10,"1582":4,"1583":2,"1585":1,"1586":3,"1589":3,"1590":1,"1591":21,"1596":5,"1597":4,"1600":2,"1607":2,"1611":1,"1616":1,"1632":18,"1639":1,"1641":6,"1644":2,"1665":1,"1675":1,"1676":1,"1679":1,"1683":1,"1706":1,"1709":1,"1716":1,"1727":2,"1728":1,"1729":1,"1731":1,"1741":2,"2035":1,"2047":1,"2079":1,"2102":1,"2112":1,"2158":4,"2159":2,"2160":15,"2161":2,"2170":1,"2194":2}}],["masquerading",{"3":{"1543":1,"2049":1}}],["massive",{"3":{"1549":1}}],["mass",{"3":{"666":1}}],["masstransitpackageids",{"2":{"1075":1},"3":{"1075":1,"1436":1,"1491":1}}],["masstransitstatemachine",{"2":{"809":1,"810":1,"813":1},"3":{"0":1,"809":1,"810":1,"813":1}}],["masstransit",{"1":{"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1,"151":1,"152":1,"153":1,"1072":1,"1073":1,"1074":1,"1075":1,"1076":1,"1077":1,"1078":1,"1079":1},"2":{"54":1,"145":1,"146":1,"147":3,"149":1,"150":1,"152":2,"810":3,"1073":1,"1074":2,"1075":1,"1078":1,"1489":1,"1738":1,"2017":1},"3":{"0":14,"20":1,"54":1,"59":2,"69":1,"77":1,"78":1,"79":2,"131":2,"133":1,"143":1,"144":1,"145":13,"146":1,"147":8,"148":1,"149":3,"150":7,"152":5,"153":1,"194":1,"195":1,"201":1,"255":1,"369":1,"371":1,"376":1,"639":1,"640":5,"641":2,"645":1,"683":1,"810":6,"812":1,"814":1,"815":1,"818":3,"819":1,"820":1,"845":1,"846":1,"1013":1,"1072":1,"1073":2,"1074":12,"1075":6,"1077":1,"1078":2,"1212":3,"1213":1,"1214":2,"1257":4,"1258":3,"1259":26,"1311":5,"1312":1,"1317":1,"1323":30,"1327":3,"1339":5,"1350":1,"1355":2,"1359":1,"1396":1,"1413":1,"1415":2,"1431":1,"1436":29,"1437":1,"1438":3,"1441":1,"1444":3,"1446":3,"1454":2,"1455":1,"1467":8,"1487":1,"1489":8,"1490":1,"1491":3,"1508":1,"1523":1,"1526":2,"1576":2,"1577":6,"1585":1,"1586":1,"1588":1,"1590":1,"1591":2,"1599":1,"1611":1,"1649":1,"1654":1,"1655":1,"1656":1,"1660":1,"1663":1,"1665":1,"1671":1,"1673":1,"1738":1,"1752":1,"1790":2,"1801":2,"1842":2,"1843":3,"1889":2,"1910":1,"2014":1,"2017":1,"2021":1,"2043":1,"2044":1,"2049":1,"2106":1,"2113":1,"2114":1,"2158":1,"2170":2,"2234":4}}],["masked",{"3":{"1237":3,"1415":1,"1436":1,"1466":1}}],["masking",{"3":{"1230":1,"1237":2,"1300":1,"1396":1,"1436":3,"1575":1}}],["mask",{"3":{"415":1,"1237":1,"1311":4,"1406":1,"1436":2,"1459":1,"1496":1,"1549":1,"1675":1,"2124":1}}],["maskseverypiimember",{"3":{"1436":1}}],["masks",{"3":{"39":1,"227":1,"684":1,"1237":1,"1422":1,"1438":1,"1453":1,"1467":1,"1561":1,"1577":1,"2064":1}}],["masterclass",{"3":{"1455":1}}],["master",{"3":{"403":1,"719":1,"766":1,"1324":1,"1395":1,"1415":1,"1417":1,"1436":1,"1467":4,"1496":1,"1629":1,"1632":1,"1637":1,"1638":3}}],["malicious",{"3":{"1311":1,"1415":1,"1452":1,"1459":1,"1467":1}}],["malwarescanning",{"3":{"1116":1,"1119":1}}],["malware",{"3":{"0":1,"1114":1,"1116":1,"1118":1,"1119":1,"1469":1,"1470":1}}],["malformedresponsereason",{"3":{"1369":1}}],["malformedresponse",{"3":{"1300":1,"1378":1,"1380":4}}],["malformedresponsecode",{"3":{"1300":2}}],["malformedifmatchresult",{"3":{"1311":1}}],["malformedifmatch",{"2":{"341":1},"3":{"0":1,"341":1,"1311":1}}],["malformed",{"3":{"0":3,"122":1,"202":1,"255":1,"341":1,"361":1,"657":1,"707":1,"840":1,"854":1,"907":1,"948":1,"1016":1,"1021":1,"1228":1,"1229":1,"1236":1,"1237":2,"1247":4,"1263":2,"1270":1,"1286":6,"1292":1,"1294":1,"1300":13,"1309":1,"1311":5,"1312":2,"1318":1,"1323":8,"1324":7,"1339":2,"1350":4,"1359":12,"1365":1,"1369":3,"1380":2,"1395":1,"1396":4,"1402":2,"1415":2,"1436":3,"1438":6,"1496":1,"1641":3,"1651":1,"1720":1,"1767":1,"1821":1,"1874":1,"1922":1,"1954":2,"1959":2,"2095":1}}],["mariner",{"3":{"2222":1}}],["mariadb",{"3":{"2222":1}}],["martin",{"3":{"1808":1}}],["marten",{"3":{"0":1,"1144":2}}],["marshalling",{"3":{"1416":1}}],["marshalled",{"3":{"1395":1,"1417":1,"1556":1,"1577":1}}],["marshals",{"3":{"682":1,"1324":1,"1396":1,"1417":3}}],["marries",{"3":{"1359":1}}],["margin",{"3":{"1126":1,"1324":4,"1359":1,"1417":1,"1436":2,"1438":1,"1447":2,"1712":1}}],["marginal",{"3":{"0":2,"237":1,"627":1,"862":1,"863":1}}],["march",{"3":{"625":1}}],["markquestionansweredasync",{"3":{"1402":1}}],["markready",{"3":{"1339":3}}],["markreadasync",{"3":{"1309":1,"1324":4,"1436":1}}],["markread",{"3":{"1203":2,"1207":4,"1306":1,"1309":5,"1577":1}}],["marknotificationreadhandlertests",{"3":{"1199":1,"1207":4}}],["marknotificationreadhandler",{"2":{"1306":1,"1937":1},"3":{"1199":4,"1203":1,"1207":2,"1286":1,"1306":3,"1309":6,"1937":1}}],["marknotificationreadcommand",{"2":{"1306":1,"1939":1},"3":{"1199":7,"1203":1,"1207":2,"1306":1,"1309":10,"1939":1}}],["markanswered",{"3":{"1398":1,"1402":3}}],["markansweredasync",{"3":{"1396":2,"1402":1}}],["markallreadasync",{"3":{"1309":1,"1324":3,"1436":1}}],["markallread",{"3":{"1203":2,"1207":4,"1306":1,"1309":4,"1496":1,"1577":1}}],["markallnotificationsreadhandlertests",{"3":{"1199":1,"1207":5,"1438":2,"1496":1}}],["markallnotificationsreadhandlertrackingtests",{"3":{"1199":1,"1207":4}}],["markallnotificationsreadhandler",{"2":{"1306":1,"1937":1},"3":{"1199":5,"1203":1,"1207":2,"1286":1,"1306":2,"1309":4,"1496":2,"1937":1}}],["markallnotificationsreadcommand",{"2":{"1306":1},"3":{"1199":8,"1203":1,"1207":2,"1306":1,"1309":6}}],["markasdelivered",{"3":{"1769":2}}],["markascheckedout",{"2":{"1769":1},"3":{"1769":1}}],["markascancelled",{"2":{"2165":2},"3":{"536":1,"539":1,"1769":1,"2165":2,"2169":1}}],["markassent",{"2":{"1933":1},"3":{"1304":1,"1309":3,"1933":1}}],["markaspaymentfailed",{"3":{"536":1,"1769":1,"2169":1}}],["markaspaidmanually",{"3":{"1765":1,"1769":1}}],["markaspaid",{"3":{"536":1,"1769":1,"2169":1}}],["markasfailed",{"2":{"896":1,"1933":1},"3":{"225":1,"896":1,"1304":1,"1309":3,"1933":2}}],["markasread",{"2":{"1937":1},"3":{"225":1,"1306":2,"1309":9,"1496":1,"1577":1,"1937":1}}],["markdirty",{"3":{"1324":1,"1395":5,"1396":1}}],["markdown",{"3":{"564":1,"567":1,"611":1,"1286":1,"1436":3,"1453":1,"1457":1,"1475":1}}],["markdeletedasync",{"2":{"459":1,"461":1,"2068":1},"3":{"459":2,"461":1,"1300":2,"1323":1,"2068":1}}],["markinventoryrestored",{"2":{"538":1,"2166":1,"2167":1},"3":{"536":1,"538":1,"2166":1,"2167":1}}],["markings",{"3":{"1672":1}}],["marking",{"3":{"41":1,"196":2,"973":1,"1212":1,"1232":3,"1237":7,"1256":1,"1259":1,"1264":1,"1286":3,"1300":2,"1309":1,"1312":1,"1359":1,"1402":1,"1415":6,"1436":5,"1575":1,"1577":1,"1582":1,"1586":1,"1632":1,"2067":1,"2069":1}}],["markprocessedasync",{"2":{"195":1,"201":1},"3":{"195":1,"201":1,"1258":1,"1259":8,"1286":1,"1586":1}}],["mark",{"3":{"18":2,"20":1,"54":1,"290":1,"536":1,"538":1,"757":1,"761":1,"829":1,"1252":2,"1254":2,"1259":3,"1274":1,"1286":2,"1289":1,"1300":3,"1306":2,"1309":10,"1311":1,"1312":1,"1323":1,"1324":16,"1359":1,"1396":1,"1397":1,"1402":7,"1415":1,"1416":1,"1431":1,"1436":14,"1443":1,"1462":1,"1489":1,"1526":4,"1553":1,"1591":1,"1651":1,"1653":1,"1689":1,"1765":3,"1768":2,"1838":1,"1845":1,"1908":1,"1910":1,"1937":2,"2008":1,"2167":3,"2169":1,"2170":1}}],["markupstring",{"2":{"1563":1},"3":{"1526":1,"1563":1,"1577":1}}],["markupsnapshotresult",{"3":{"1199":2,"1207":1,"1432":1,"1436":2,"1496":1}}],["markupsnapshot",{"3":{"954":2,"1199":5,"1207":3,"1428":1,"1432":9,"1436":8,"1488":1,"1496":1,"1577":3,"1586":1,"2056":1}}],["markuproots",{"3":{"1436":3}}],["markup",{"3":{"0":2,"86":1,"265":2,"273":1,"618":3,"620":1,"648":1,"953":2,"954":3,"957":1,"1207":1,"1324":38,"1350":2,"1359":2,"1384":1,"1391":1,"1394":1,"1395":68,"1396":38,"1402":12,"1415":7,"1417":6,"1431":1,"1432":1,"1434":1,"1436":58,"1438":6,"1488":3,"1489":1,"1497":1,"1498":1,"1525":2,"1526":2,"1531":2,"1534":2,"1535":1,"1555":2,"1563":1,"1564":1,"1577":5,"1586":1,"1591":1,"1597":1,"1600":1,"1643":1,"1660":1,"1671":1,"1702":1,"2056":1,"2058":2,"2060":3,"2061":1,"2074":1,"2079":1,"2081":2}}],["marketing",{"3":{"1359":1,"1395":1,"1416":1,"2242":1}}],["markers",{"0":{"1232":1,"1236":1,"1266":1},"2":{"1270":1},"3":{"0":2,"121":2,"123":1,"125":1,"126":1,"160":1,"246":1,"247":1,"522":1,"523":1,"564":1,"741":1,"744":1,"923":1,"974":1,"1059":1,"1089":1,"1091":1,"1095":1,"1100":1,"1192":1,"1201":1,"1202":2,"1203":10,"1207":16,"1212":1,"1230":2,"1232":1,"1249":1,"1260":2,"1264":11,"1270":21,"1286":3,"1321":1,"1323":4,"1324":3,"1359":15,"1395":2,"1396":1,"1403":2,"1415":8,"1422":1,"1424":3,"1436":3,"1438":1,"1526":1,"1577":1,"1591":1,"1660":1,"1662":2,"1667":1,"1826":1,"2100":1,"2138":1,"2177":1,"2192":1}}],["marker",{"0":{"1264":1,"1823":1,"1917":1,"2138":1,"2166":1},"3":{"0":9,"51":1,"115":1,"117":1,"121":5,"122":3,"123":1,"126":2,"135":1,"242":1,"246":1,"265":2,"293":1,"295":1,"312":1,"402":2,"457":1,"459":11,"461":3,"463":1,"465":5,"466":3,"491":1,"492":1,"493":1,"522":2,"523":1,"534":2,"536":9,"537":2,"538":7,"539":1,"540":2,"541":1,"564":3,"565":1,"566":1,"567":1,"583":1,"618":1,"633":1,"640":1,"700":1,"713":1,"715":3,"716":1,"717":1,"741":1,"742":1,"766":1,"791":1,"792":1,"794":1,"809":1,"815":1,"891":1,"892":1,"893":1,"907":1,"910":1,"923":1,"927":1,"945":1,"947":1,"948":2,"972":7,"973":3,"974":1,"982":1,"988":1,"1042":1,"1059":2,"1091":2,"1093":1,"1095":1,"1100":1,"1192":1,"1202":1,"1203":1,"1212":3,"1232":3,"1236":1,"1237":16,"1239":1,"1247":2,"1249":2,"1259":6,"1260":2,"1262":1,"1264":5,"1266":3,"1267":3,"1269":1,"1270":64,"1273":1,"1277":1,"1282":2,"1283":1,"1286":20,"1297":1,"1300":22,"1301":2,"1309":9,"1310":2,"1311":20,"1312":12,"1313":1,"1316":2,"1318":1,"1323":40,"1324":28,"1327":1,"1333":2,"1339":14,"1340":2,"1350":11,"1354":1,"1359":41,"1369":3,"1380":6,"1394":1,"1395":17,"1396":34,"1401":1,"1402":6,"1405":1,"1410":2,"1415":38,"1416":2,"1424":2,"1427":7,"1435":1,"1436":63,"1438":6,"1441":1,"1444":1,"1455":1,"1478":1,"1489":1,"1496":4,"1507":1,"1526":1,"1531":1,"1532":1,"1577":2,"1582":1,"1591":2,"1596":1,"1653":1,"1662":1,"1666":1,"1667":2,"1672":1,"1749":1,"1753":2,"1764":1,"1765":4,"1774":1,"1823":2,"1825":1,"1827":1,"1839":1,"1851":1,"1902":1,"1908":1,"1914":1,"1920":2,"1923":1,"1929":2,"1933":1,"1988":2,"2064":1,"2068":7,"2071":1,"2094":3,"2097":1,"2098":1,"2100":2,"2136":1,"2141":2,"2163":1,"2166":14,"2167":5,"2169":2,"2170":7,"2171":6,"2181":2,"2186":1,"2191":2,"2196":1,"2201":1,"2205":1,"2234":3}}],["markerduration",{"2":{"459":1,"461":1,"463":1,"2068":1},"3":{"0":1,"459":2,"461":1,"463":1,"1300":3,"1311":2,"2068":1}}],["marked",{"3":{"0":2,"18":1,"20":1,"39":2,"41":1,"51":1,"54":2,"126":2,"160":2,"189":1,"484":1,"490":1,"534":1,"537":1,"538":1,"543":2,"690":1,"714":1,"905":1,"910":1,"980":1,"1003":1,"1203":1,"1212":1,"1229":1,"1237":6,"1252":3,"1259":2,"1264":1,"1270":1,"1277":1,"1286":5,"1300":8,"1309":1,"1311":2,"1312":4,"1323":1,"1342":1,"1347":1,"1349":1,"1350":5,"1357":1,"1359":10,"1380":12,"1402":6,"1405":1,"1415":3,"1422":1,"1436":23,"1438":3,"1441":1,"1447":1,"1459":1,"1467":2,"1489":1,"1496":2,"1508":1,"1577":5,"1640":1,"1672":1,"1699":1,"1727":1,"1737":1,"1749":3,"1764":2,"1767":2,"1821":1,"1839":1,"1840":1,"1930":1,"1975":1,"2064":1,"2091":1,"2100":1,"2167":1,"2170":1,"2176":1,"2199":1}}],["markstale",{"3":{"1324":2,"1577":2}}],["marksnothingcurrent",{"3":{"907":1}}],["marks",{"3":{"0":4,"157":1,"160":1,"344":1,"528":1,"538":1,"540":1,"543":1,"657":1,"674":1,"873":1,"876":1,"907":1,"1012":1,"1091":1,"1233":1,"1236":1,"1237":4,"1257":1,"1259":5,"1265":1,"1270":1,"1274":1,"1286":8,"1297":1,"1300":11,"1309":7,"1310":1,"1311":5,"1312":4,"1322":1,"1323":1,"1324":2,"1339":2,"1350":6,"1359":3,"1369":1,"1395":2,"1396":3,"1402":3,"1405":1,"1415":9,"1416":2,"1417":1,"1427":2,"1436":14,"1441":1,"1512":1,"1577":1,"1582":1,"1586":1,"1630":1,"1632":1,"1639":1,"1662":2,"1666":1,"1672":1,"1687":1,"1765":1,"1784":1,"1846":1,"1871":1,"1876":1,"1929":2,"1937":2,"2013":1,"2014":1,"2045":1,"2093":1,"2167":1}}],["making",{"0":{"1223":1,"2146":1},"3":{"0":3,"159":1,"178":1,"235":1,"237":1,"264":1,"286":1,"340":1,"436":1,"520":1,"551":1,"619":1,"651":1,"666":2,"683":1,"691":1,"698":1,"700":1,"709":1,"716":1,"724":1,"742":1,"767":2,"805":1,"819":1,"820":1,"827":2,"855":1,"890":1,"907":1,"965":1,"996":1,"1018":1,"1027":1,"1051":1,"1076":1,"1117":1,"1212":1,"1229":2,"1237":4,"1247":3,"1259":6,"1270":7,"1271":2,"1286":8,"1293":1,"1300":6,"1301":1,"1309":1,"1310":2,"1311":6,"1323":4,"1324":11,"1332":1,"1339":6,"1350":9,"1359":15,"1369":1,"1395":8,"1396":12,"1402":5,"1417":6,"1436":9,"1438":1,"1454":1,"1455":5,"1467":1,"1492":1,"1638":1,"1641":1,"1734":1,"1776":1,"1806":1,"1901":2,"1956":1,"2008":1,"2046":1,"2072":1,"2083":1,"2157":1,"2164":1}}],["makegenericmethod",{"3":{"1247":1,"1270":1,"1286":5}}],["makegenerictype",{"3":{"1229":1,"1237":1,"1247":1,"1259":1,"1286":5,"1300":2,"1323":1}}],["makes",{"0":{"1782":1,"1824":1,"1872":1},"1":{"1980":1,"1981":1,"1982":1,"1983":1,"1984":1,"1985":1},"3":{"0":20,"24":2,"26":1,"72":2,"100":1,"109":1,"110":3,"111":1,"116":1,"125":1,"136":1,"137":1,"147":1,"150":1,"151":1,"158":1,"160":1,"162":1,"168":1,"177":2,"182":1,"186":2,"187":1,"188":1,"189":1,"194":1,"195":1,"215":1,"217":1,"218":1,"219":1,"230":1,"236":1,"243":1,"244":1,"245":1,"255":2,"264":1,"265":3,"266":3,"273":1,"283":1,"284":1,"309":1,"311":1,"341":1,"342":2,"361":3,"374":1,"388":2,"397":1,"398":1,"407":1,"449":1,"458":1,"460":1,"465":1,"477":1,"484":1,"498":1,"500":1,"511":1,"530":2,"543":1,"546":2,"551":1,"556":1,"557":1,"558":1,"560":1,"563":2,"572":1,"573":1,"582":1,"584":2,"591":1,"592":3,"599":1,"600":1,"601":1,"603":1,"607":2,"609":1,"610":1,"619":1,"641":2,"649":1,"650":1,"656":2,"658":1,"667":1,"670":1,"672":1,"674":1,"675":1,"690":1,"691":4,"692":1,"694":1,"697":1,"698":2,"708":1,"716":3,"717":1,"718":1,"721":1,"725":2,"733":3,"734":1,"735":1,"742":2,"748":1,"750":1,"751":2,"766":1,"767":1,"773":1,"789":1,"791":1,"799":1,"800":1,"802":1,"812":1,"819":1,"820":1,"823":1,"827":3,"828":1,"838":1,"839":1,"840":1,"847":1,"856":2,"860":1,"862":3,"871":1,"873":1,"874":1,"881":1,"882":2,"883":2,"888":1,"890":2,"891":1,"896":3,"898":1,"901":1,"906":1,"918":1,"923":1,"924":1,"932":2,"938":1,"940":2,"942":1,"946":1,"948":2,"954":1,"965":1,"968":1,"972":1,"988":2,"989":1,"990":2,"992":1,"996":1,"997":1,"1005":1,"1006":1,"1012":1,"1018":1,"1019":1,"1020":2,"1025":1,"1027":1,"1033":1,"1036":1,"1044":1,"1051":3,"1052":2,"1060":2,"1067":2,"1076":1,"1084":2,"1087":1,"1091":1,"1092":3,"1093":1,"1109":1,"1116":1,"1123":1,"1124":1,"1129":2,"1132":1,"1133":1,"1135":1,"1137":1,"1147":1,"1150":1,"1162":1,"1167":1,"1169":1,"1212":1,"1223":1,"1229":11,"1231":1,"1237":10,"1247":11,"1250":1,"1252":1,"1253":1,"1257":1,"1259":25,"1265":2,"1266":1,"1269":1,"1270":28,"1271":4,"1275":1,"1276":1,"1278":2,"1283":1,"1284":1,"1286":77,"1290":1,"1291":1,"1292":1,"1294":1,"1300":51,"1301":7,"1309":18,"1310":5,"1311":42,"1312":4,"1314":1,"1316":1,"1317":1,"1320":1,"1323":34,"1324":74,"1325":1,"1326":1,"1327":1,"1328":2,"1330":1,"1333":3,"1334":1,"1336":1,"1337":2,"1338":1,"1339":60,"1343":1,"1344":1,"1346":1,"1350":17,"1353":1,"1355":1,"1356":1,"1357":1,"1359":121,"1362":1,"1364":1,"1366":1,"1369":16,"1376":1,"1380":7,"1392":1,"1393":1,"1395":51,"1396":98,"1397":1,"1401":1,"1402":33,"1405":1,"1406":1,"1412":1,"1415":42,"1416":10,"1417":35,"1421":1,"1422":2,"1424":2,"1425":1,"1427":2,"1430":1,"1431":1,"1435":2,"1436":150,"1438":7,"1441":2,"1443":2,"1447":2,"1453":3,"1454":1,"1455":7,"1456":2,"1457":1,"1458":1,"1460":1,"1465":1,"1467":8,"1472":1,"1474":2,"1475":1,"1476":2,"1477":1,"1480":1,"1488":5,"1489":1,"1490":1,"1491":1,"1492":3,"1526":2,"1534":2,"1536":1,"1568":1,"1577":1,"1633":1,"1638":1,"1649":1,"1652":1,"1658":1,"1661":1,"1662":2,"1667":1,"1677":1,"1684":1,"1685":1,"1686":3,"1688":1,"1697":1,"1701":1,"1708":1,"1711":1,"1720":1,"1729":1,"1731":2,"1737":1,"1749":2,"1755":1,"1765":1,"1779":1,"1790":2,"1795":2,"1797":1,"1808":1,"1810":1,"1811":1,"1812":1,"1813":1,"1814":1,"1815":1,"1819":1,"1825":1,"1839":1,"1840":2,"1841":1,"1842":1,"1843":1,"1844":2,"1846":1,"1849":2,"1853":1,"1854":1,"1876":1,"1879":1,"1883":1,"1884":2,"1895":1,"1899":2,"1902":1,"1905":1,"1907":1,"1908":1,"1916":1,"1922":1,"1923":2,"1924":1,"1939":1,"1943":1,"1944":2,"1946":2,"1947":2,"1950":1,"1958":1,"1963":1,"1969":1,"1970":1,"1971":1,"1980":1,"1982":1,"1983":1,"1989":1,"1994":1,"1997":1,"1998":1,"1999":1,"2001":1,"2002":1,"2011":1,"2017":1,"2021":1,"2022":1,"2023":1,"2025":2,"2030":1,"2031":1,"2032":1,"2035":1,"2040":1,"2041":1,"2043":1,"2044":1,"2045":1,"2046":1,"2058":1,"2062":2,"2065":1,"2066":1,"2068":1,"2072":1,"2075":1,"2085":1,"2089":1,"2100":1,"2114":1,"2134":2,"2135":1,"2139":1,"2143":1,"2144":1,"2146":2,"2147":4,"2148":1,"2152":1,"2154":1,"2158":2,"2159":1,"2162":1,"2165":1,"2166":1,"2167":2,"2168":1,"2169":1,"2171":2,"2172":2,"2176":1,"2179":1,"2181":1,"2182":2,"2186":1,"2187":1,"2188":1,"2190":1,"2192":1,"2194":1,"2195":1,"2204":2,"2205":1,"2210":1}}],["make",{"0":{"2011":1},"3":{"0":4,"1":1,"6":1,"20":1,"39":1,"41":1,"88":1,"109":3,"160":1,"195":1,"219":1,"257":1,"295":1,"305":1,"342":1,"361":1,"373":1,"381":1,"383":1,"390":1,"395":1,"396":1,"403":1,"469":1,"500":1,"518":1,"537":1,"583":1,"584":1,"585":1,"593":1,"609":1,"618":1,"626":1,"650":1,"656":1,"657":1,"675":1,"683":1,"698":1,"709":1,"726":1,"729":1,"740":1,"741":1,"749":1,"750":1,"776":1,"810":1,"815":1,"820":1,"827":1,"829":1,"838":2,"848":1,"861":1,"862":1,"872":1,"889":1,"898":1,"899":1,"903":1,"906":1,"907":1,"914":1,"915":1,"926":1,"931":1,"932":1,"945":1,"988":1,"989":1,"997":1,"1018":1,"1020":1,"1034":2,"1035":2,"1042":1,"1052":1,"1059":1,"1060":1,"1067":1,"1083":1,"1091":1,"1092":1,"1100":1,"1108":1,"1123":1,"1139":1,"1149":1,"1187":1,"1212":1,"1219":1,"1221":1,"1229":3,"1237":2,"1242":1,"1247":3,"1249":1,"1258":2,"1259":1,"1265":1,"1268":1,"1269":3,"1270":4,"1271":3,"1276":1,"1281":1,"1286":23,"1300":14,"1301":1,"1309":2,"1311":13,"1313":1,"1315":1,"1319":1,"1320":1,"1323":8,"1324":13,"1330":1,"1334":1,"1337":1,"1339":7,"1344":1,"1350":7,"1357":1,"1358":1,"1359":30,"1366":1,"1369":2,"1373":1,"1379":1,"1380":1,"1395":14,"1396":23,"1402":5,"1403":1,"1409":1,"1410":1,"1415":2,"1416":2,"1417":8,"1427":1,"1431":1,"1436":39,"1438":1,"1441":2,"1453":1,"1455":5,"1465":1,"1467":4,"1471":1,"1473":1,"1488":1,"1489":1,"1492":1,"1585":1,"1595":1,"1596":1,"1639":2,"1651":1,"1656":1,"1678":1,"1686":1,"1702":1,"1708":1,"1720":1,"1728":1,"1729":1,"1749":1,"1765":2,"1788":2,"1793":1,"1803":1,"1807":2,"1812":1,"1827":2,"1828":1,"1829":1,"1832":1,"1841":1,"1846":2,"1853":2,"1859":1,"1862":2,"1863":1,"1865":1,"1868":1,"1871":1,"1877":2,"1886":2,"1890":1,"1892":2,"1901":1,"1905":1,"1907":1,"1911":1,"1912":3,"1930":2,"1941":1,"1947":1,"1948":1,"1954":1,"1958":1,"1959":1,"1964":1,"1965":1,"1972":1,"1979":1,"1980":1,"1981":1,"1985":1,"1996":3,"1997":1,"1998":1,"1999":1,"2005":1,"2010":1,"2029":1,"2039":1,"2041":1,"2044":1,"2050":1,"2061":1,"2069":1,"2070":1,"2071":1,"2082":1,"2099":1,"2107":1,"2110":1,"2113":1,"2115":1,"2127":1,"2138":1,"2141":1,"2144":1,"2147":1,"2155":1,"2157":1,"2162":2,"2163":1,"2168":2,"2169":1,"2171":1,"2172":1,"2181":2,"2182":4,"2194":2,"2195":3,"2199":1,"2202":1,"2205":4,"2211":1,"2213":1,"2234":1}}],["mat",{"3":{"1524":8,"1525":10,"1589":6,"1598":1}}],["matrices",{"3":{"1456":1,"1526":1,"1535":1,"1611":1}}],["matrix",{"0":{"1499":1,"1716":1},"2":{"1456":1},"3":{"137":1,"146":1,"148":1,"265":1,"618":1,"619":1,"684":1,"756":1,"863":2,"868":1,"1192":1,"1212":1,"1216":1,"1247":1,"1300":1,"1324":2,"1402":1,"1417":2,"1433":2,"1436":3,"1438":1,"1445":1,"1450":1,"1453":1,"1455":5,"1456":10,"1460":1,"1461":1,"1465":1,"1490":4,"1492":3,"1496":1,"1526":2,"1533":1,"1559":1,"1577":7,"1591":4,"1596":1,"1599":1,"1611":1,"1632":2,"1639":1,"1674":1,"1711":1,"2075":1,"2078":1,"2114":1}}],["mates",{"3":{"1271":1}}],["materialised",{"3":{"1339":2,"1396":3}}],["materializing",{"3":{"1237":1,"1242":1,"1243":1,"1245":1,"1259":1,"1269":1,"1270":1,"1286":5,"1309":2,"1311":1,"1323":1,"1324":1,"1353":1,"1359":5,"1395":1,"1396":2,"1402":2,"1415":2,"1436":1,"1988":1,"2169":1}}],["materializers",{"3":{"1286":3}}],["materializer",{"3":{"657":1,"1237":1,"1438":1}}],["materialize",{"3":{"31":1,"549":1,"609":1,"659":1,"741":1,"1243":2,"1247":1,"1269":1,"1270":3,"1271":1,"1278":1,"1286":4,"1300":2,"1301":1,"1309":2,"1311":2,"1323":1,"1359":4,"1395":1,"1396":1,"1402":1,"1427":1,"1436":2,"1438":2,"1667":1,"1883":1,"1956":1,"1965":1}}],["materializes",{"3":{"0":1,"166":1,"186":1,"551":1,"819":1,"964":1,"966":1,"1212":1,"1231":1,"1237":1,"1239":1,"1243":1,"1247":3,"1259":1,"1263":1,"1270":1,"1271":2,"1286":13,"1297":1,"1300":5,"1309":4,"1310":2,"1311":2,"1324":4,"1350":1,"1359":8,"1380":1,"1395":3,"1396":5,"1402":3,"1415":3,"1417":1,"1423":1,"1427":3,"1436":5,"1467":1,"1810":1,"1815":1,"1844":1,"1859":1,"1861":1,"1895":1,"1962":1,"2092":1}}],["materialized",{"3":{"0":1,"47":1,"71":1,"122":1,"188":1,"335":1,"609":2,"658":1,"799":1,"988":1,"1091":1,"1229":1,"1239":1,"1243":4,"1244":1,"1247":11,"1259":2,"1270":4,"1286":9,"1288":1,"1300":3,"1309":2,"1310":4,"1311":1,"1323":1,"1324":1,"1359":25,"1396":9,"1402":1,"1406":1,"1415":2,"1423":3,"1427":1,"1431":1,"1436":2,"1467":1,"1474":1,"1476":1,"1964":1,"1988":1,"2160":2,"2234":1}}],["materialization",{"3":{"0":1,"330":1,"359":1,"365":1,"657":1,"990":1,"1226":1,"1229":2,"1244":1,"1247":5,"1270":2,"1278":1,"1284":1,"1286":10,"1300":1,"1309":6,"1310":1,"1323":1,"1343":1,"1359":2,"1362":1,"1369":1,"1395":1,"1396":6,"1402":3,"1436":1,"1805":1,"1806":1,"1811":1,"1815":1,"2144":1}}],["materials",{"0":{"1357":1,"1389":1},"1":{"1113":1,"1114":1,"1115":1,"1116":1,"1117":1,"1118":1,"1119":1,"1120":1},"3":{"0":2,"370":1,"371":1,"372":1,"374":1,"443":1,"1113":1,"1116":5,"1117":3,"1212":1,"1348":1,"1350":2,"1357":2,"1359":4,"1373":1,"1377":1,"1380":2,"1381":1,"1389":1,"1395":10,"1436":1,"1454":1,"1630":1,"1631":5,"1636":1,"1640":2,"2128":1,"2234":1}}],["material",{"3":{"0":1,"30":1,"31":1,"284":1,"359":3,"361":1,"599":1,"650":1,"673":1,"674":1,"792":1,"827":1,"906":1,"907":1,"944":1,"946":3,"948":2,"950":1,"1060":1,"1063":1,"1066":1,"1115":1,"1117":1,"1118":1,"1212":1,"1241":1,"1285":1,"1286":2,"1287":2,"1288":1,"1292":1,"1294":1,"1300":20,"1311":1,"1323":2,"1324":6,"1339":1,"1342":2,"1350":3,"1351":1,"1352":1,"1357":1,"1359":2,"1373":2,"1380":1,"1389":1,"1395":15,"1409":1,"1410":1,"1415":6,"1417":1,"1429":1,"1430":1,"1436":4,"1438":3,"1442":1,"1447":1,"1456":1,"1467":2,"1640":1,"1645":1,"1667":1,"1714":1,"1896":1,"1902":4,"1905":1,"1973":1,"1982":1,"2013":1,"2025":1,"2057":2,"2144":2,"2147":1,"2200":1,"2205":1,"2232":1,"2234":1,"2236":1}}],["materially",{"3":{"0":1,"259":1,"474":1,"549":1,"799":1,"987":1,"1324":1,"1436":1,"1467":1,"1534":1}}],["maturity×weight",{"3":{"1523":1,"1574":1,"1588":1}}],["maturity",{"0":{"1533":1,"1584":1,"1598":1,"1797":1},"2":{"1529":1},"3":{"1216":1,"1516":1,"1519":1,"1523":5,"1524":6,"1526":27,"1529":3,"1530":4,"1531":10,"1532":2,"1533":2,"1534":1,"1535":7,"1536":1,"1537":9,"1554":1,"1565":1,"1574":4,"1575":10,"1576":1,"1577":20,"1578":3,"1580":4,"1581":4,"1582":4,"1583":4,"1584":4,"1585":4,"1586":1,"1588":3,"1589":1,"1591":21,"1592":3,"1594":3,"1595":3,"1596":3,"1597":3,"1599":1,"1673":1,"1784":6,"1794":1,"1797":1,"1798":3,"1799":7,"1800":1,"1802":2,"1903":2,"1929":2,"2035":1,"2042":1,"2044":2,"2049":1,"2051":1,"2054":1,"2060":2,"2063":1,"2071":1,"2116":1,"2173":2,"2184":2,"2197":1,"2233":4}}],["mature",{"3":{"1216":1,"1537":1,"1578":1,"1784":1,"1797":1,"1833":1}}],["mathematics",{"3":{"2224":1}}],["math",{"3":{"281":1,"330":1,"337":1,"1229":1,"1244":3,"1247":7,"1259":1,"1286":1,"1300":3,"1311":3,"1324":9,"1348":1,"1350":6,"1359":2,"1369":1,"1395":1,"1396":15,"1401":1,"1402":1,"1415":4,"1417":4,"1422":1,"1435":1,"1438":1,"1455":2,"1988":1,"2001":1}}],["mattering",{"3":{"1323":1,"2099":1}}],["matters",{"0":{"1789":1,"1809":1,"1814":1,"1819":1,"1836":1,"1848":1,"1864":1,"1870":1,"1888":1,"1894":1,"1901":1,"1907":1,"1909":1,"1926":1,"1961":1,"1967":1,"1974":1,"1981":1,"1987":1,"1994":1,"2000":1,"2052":1,"2063":1,"2084":1,"2127":1,"2132":1,"2137":1,"2143":1,"2150":1,"2157":1,"2164":1,"2173":1,"2184":1,"2197":1},"3":{"160":1,"198":1,"216":1,"264":1,"380":1,"387":1,"390":1,"423":1,"551":1,"592":1,"702":1,"827":1,"845":1,"847":1,"875":1,"906":1,"941":2,"1186":1,"1223":1,"1229":1,"1237":3,"1238":1,"1247":3,"1259":2,"1270":4,"1271":1,"1280":1,"1286":17,"1300":7,"1309":5,"1311":6,"1315":1,"1323":7,"1324":11,"1339":13,"1345":1,"1347":1,"1359":18,"1366":1,"1369":1,"1372":1,"1379":1,"1380":1,"1395":11,"1396":13,"1398":1,"1402":2,"1415":7,"1417":6,"1421":1,"1427":1,"1436":18,"1438":2,"1441":1,"1445":1,"1447":1,"1453":3,"1454":1,"1455":1,"1456":1,"1467":2,"1475":2,"1488":1,"1490":1,"1555":1,"1649":1,"1684":1,"1782":1,"1813":1,"1817":1,"1840":1,"1844":1,"1878":1,"1886":1,"1889":1,"1898":1,"1902":1,"1934":1,"1937":1,"1943":1,"1950":1,"1962":1,"2008":1,"2011":1,"2030":1,"2037":1,"2040":1,"2050":1,"2058":1,"2061":1,"2075":1,"2077":1,"2097":1,"2100":1,"2101":1,"2120":1,"2130":1,"2154":1,"2157":1,"2158":1,"2195":1,"2203":1}}],["matter",{"0":{"2044":1},"3":{"122":1,"160":1,"219":1,"265":1,"783":1,"998":1,"1004":1,"1059":1,"1192":2,"1229":1,"1259":1,"1270":1,"1271":1,"1286":3,"1296":1,"1300":5,"1301":3,"1311":3,"1323":3,"1324":2,"1339":3,"1350":1,"1359":10,"1369":1,"1395":1,"1396":3,"1397":1,"1402":1,"1410":1,"1415":1,"1417":4,"1431":2,"1436":4,"1438":3,"1463":1,"1475":2,"1489":1,"1490":1,"1496":2,"1638":1,"1831":1,"1874":1,"1883":1,"1908":1,"1918":1,"1922":1,"2025":1,"2046":1,"2050":1,"2095":1,"2111":1,"2152":1,"2156":1,"2160":1,"2189":1,"2202":1}}],["matchtimeout",{"3":{"1427":2}}],["matchtimeoutmilliseconds",{"3":{"1237":2,"1309":1}}],["matchlocaleasync",{"3":{"1417":2}}],["matchmedia",{"2":{"273":1},"3":{"273":1,"2085":1}}],["matchingmethods",{"3":{"1436":1}}],["matching",{"0":{"1910":1},"3":{"0":8,"31":1,"80":1,"97":1,"126":1,"136":1,"158":1,"166":1,"180":1,"226":1,"243":2,"265":2,"272":1,"295":1,"318":1,"351":1,"352":1,"353":1,"365":1,"403":1,"420":1,"448":1,"470":1,"473":1,"491":1,"492":1,"493":2,"494":2,"495":1,"528":1,"536":2,"540":1,"543":1,"551":2,"554":1,"556":1,"575":1,"599":1,"603":1,"607":1,"609":2,"612":1,"643":1,"657":2,"692":3,"697":1,"698":1,"716":1,"749":1,"760":1,"764":1,"790":1,"827":1,"838":1,"839":1,"840":1,"842":1,"847":1,"882":1,"925":1,"939":1,"946":1,"948":1,"964":1,"970":1,"972":1,"975":1,"1059":1,"1089":1,"1133":1,"1191":1,"1196":1,"1212":1,"1229":4,"1230":1,"1234":1,"1237":5,"1239":1,"1247":7,"1258":1,"1259":3,"1270":9,"1271":3,"1276":1,"1278":1,"1286":30,"1288":1,"1289":1,"1291":1,"1293":3,"1300":18,"1301":3,"1309":8,"1310":3,"1311":21,"1312":4,"1322":1,"1323":8,"1324":22,"1327":1,"1337":1,"1339":15,"1344":2,"1350":16,"1352":1,"1353":1,"1359":38,"1366":1,"1369":3,"1374":1,"1380":3,"1395":15,"1396":17,"1399":1,"1402":7,"1405":1,"1415":4,"1417":12,"1427":10,"1430":1,"1436":68,"1438":1,"1443":2,"1445":1,"1446":1,"1447":2,"1454":1,"1455":2,"1464":1,"1467":1,"1476":1,"1488":2,"1489":1,"1492":1,"1496":2,"1526":1,"1572":2,"1577":2,"1586":1,"1589":2,"1591":2,"1599":1,"1630":2,"1631":1,"1632":2,"1639":1,"1641":8,"1662":1,"1670":1,"1821":1,"1851":1,"1859":1,"1861":1,"1894":1,"1895":1,"1902":1,"1906":1,"1916":1,"1955":1,"1975":1,"1978":1,"1979":1,"1995":1,"2026":1,"2028":1,"2047":2,"2064":1,"2133":1,"2159":1,"2160":1,"2161":1,"2166":1,"2234":1}}],["matchers",{"3":{"1427":1}}],["matcher",{"3":{"1237":1,"1309":2,"1311":1,"1324":1,"1339":1,"1347":1,"1350":1,"1436":2,"1438":1}}],["matcheswholeregiontokensonly",{"3":{"1436":2}}],["matchestherouteattributereality",{"3":{"1436":1}}],["matchesthecurrentcontract",{"2":{"1427":1},"3":{"1427":1}}],["matchesserverstrongpasswordrules",{"3":{"1436":2}}],["matchessignature",{"3":{"1286":1}}],["matchesdeployedregion",{"3":{"972":1,"1436":3,"2044":1}}],["matches",{"0":{"720":1},"3":{"0":5,"39":1,"40":1,"74":1,"91":1,"96":1,"109":1,"139":1,"142":1,"179":1,"217":1,"218":1,"258":1,"265":1,"268":1,"318":1,"324":1,"335":1,"341":1,"345":1,"352":1,"372":1,"398":1,"402":1,"415":1,"500":1,"545":1,"551":2,"564":1,"611":4,"650":1,"655":1,"666":1,"688":1,"734":1,"740":1,"749":1,"769":1,"790":1,"801":1,"827":1,"847":1,"857":1,"871":1,"881":1,"904":1,"946":1,"955":1,"972":1,"973":1,"974":1,"975":2,"1004":1,"1006":2,"1018":1,"1040":1,"1091":1,"1118":1,"1135":1,"1177":1,"1194":1,"1196":1,"1202":1,"1212":1,"1223":1,"1229":1,"1234":1,"1237":3,"1240":1,"1241":1,"1247":8,"1259":3,"1262":1,"1270":6,"1271":5,"1275":1,"1284":2,"1286":26,"1289":1,"1292":1,"1297":1,"1300":19,"1301":3,"1306":1,"1309":6,"1310":4,"1311":18,"1312":1,"1317":1,"1323":8,"1324":29,"1333":1,"1337":1,"1339":8,"1347":1,"1350":4,"1352":1,"1353":2,"1358":1,"1359":41,"1364":1,"1369":1,"1380":4,"1385":1,"1395":11,"1396":13,"1402":3,"1406":1,"1413":1,"1415":14,"1416":2,"1417":9,"1420":1,"1421":1,"1424":1,"1427":8,"1432":1,"1435":1,"1436":41,"1438":2,"1440":1,"1441":2,"1443":2,"1453":2,"1455":1,"1456":1,"1467":1,"1475":3,"1476":2,"1480":2,"1481":1,"1488":1,"1489":1,"1496":1,"1524":1,"1525":1,"1526":2,"1531":1,"1567":1,"1571":1,"1575":1,"1577":6,"1582":1,"1585":3,"1586":1,"1589":2,"1591":3,"1596":2,"1597":1,"1631":1,"1632":1,"1639":2,"1641":2,"1651":1,"1654":1,"1686":2,"1730":1,"1749":1,"1750":1,"1765":1,"1767":2,"1771":1,"1829":1,"1851":1,"1872":1,"1904":1,"1920":1,"1923":1,"1928":1,"1948":1,"1952":1,"1978":1,"1996":1,"1997":2,"2001":1,"2011":1,"2044":1,"2046":2,"2085":1,"2099":1,"2159":1,"2167":1,"2168":1,"2174":1,"2177":1,"2178":1,"2189":1,"2201":1,"2234":1}}],["matchedhash",{"3":{"1300":1}}],["matchedstep",{"3":{"1300":4}}],["matched",{"3":{"0":2,"136":1,"142":1,"160":1,"186":1,"249":1,"265":2,"310":1,"353":1,"372":1,"538":2,"557":1,"564":1,"585":1,"586":1,"592":1,"649":1,"827":1,"837":1,"840":2,"877":1,"905":1,"946":1,"999":1,"1029":1,"1045":1,"1067":1,"1089":1,"1091":2,"1117":1,"1135":1,"1161":2,"1163":1,"1196":1,"1231":1,"1237":1,"1247":2,"1270":2,"1286":9,"1300":14,"1301":1,"1310":1,"1311":8,"1312":1,"1315":1,"1323":2,"1324":4,"1338":1,"1339":8,"1350":1,"1355":1,"1359":5,"1395":3,"1396":2,"1402":1,"1415":1,"1416":1,"1417":3,"1419":1,"1421":1,"1424":1,"1427":4,"1436":38,"1443":1,"1447":1,"1455":1,"1458":1,"1492":1,"1526":1,"1568":1,"1577":1,"1631":5,"1636":1,"1639":2,"1640":1,"1641":2,"1653":1,"1684":1,"1700":1,"1902":1,"1951":1,"1977":1,"2045":1,"2141":1,"2151":1,"2159":1,"2166":1,"2170":1}}],["matchasync",{"2":{"1220":1},"3":{"0":1,"109":2,"1220":2,"1229":3,"1805":2}}],["match",{"0":{"1874":1},"1":{"1869":1,"1870":1,"1871":1,"1872":1,"1873":1,"1874":1,"1875":1,"1876":1,"1877":1},"2":{"1004":1,"1807":1},"3":{"0":8,"93":1,"98":1,"102":1,"109":2,"152":1,"162":1,"173":1,"268":1,"279":1,"300":1,"314":1,"339":1,"340":1,"341":3,"342":3,"343":2,"344":1,"348":1,"350":2,"353":2,"363":1,"402":1,"420":1,"489":1,"499":1,"507":1,"511":1,"540":1,"547":1,"564":1,"572":1,"607":1,"609":2,"610":1,"611":2,"635":1,"658":1,"744":1,"766":1,"785":1,"789":1,"809":1,"813":1,"829":1,"833":1,"879":1,"881":2,"885":1,"907":1,"909":1,"916":1,"922":2,"925":1,"944":1,"965":1,"972":4,"973":1,"974":2,"975":1,"1004":3,"1006":1,"1021":1,"1026":1,"1040":1,"1042":1,"1091":3,"1095":1,"1119":1,"1120":1,"1133":1,"1135":1,"1150":1,"1212":1,"1220":2,"1229":5,"1234":1,"1237":6,"1247":5,"1259":3,"1264":1,"1265":2,"1270":8,"1271":2,"1273":1,"1286":24,"1289":1,"1293":2,"1295":1,"1300":26,"1301":6,"1305":1,"1307":1,"1309":4,"1310":3,"1311":27,"1323":9,"1324":28,"1339":14,"1347":3,"1349":1,"1350":15,"1355":4,"1359":55,"1369":5,"1373":1,"1375":1,"1380":9,"1382":1,"1389":2,"1395":18,"1396":17,"1402":18,"1406":3,"1413":2,"1414":1,"1415":13,"1416":3,"1417":5,"1424":2,"1427":7,"1432":3,"1436":65,"1438":2,"1443":4,"1451":1,"1455":2,"1456":1,"1457":1,"1459":1,"1461":1,"1467":1,"1475":1,"1476":3,"1481":1,"1489":3,"1492":3,"1496":9,"1517":1,"1526":4,"1531":1,"1541":1,"1545":1,"1562":1,"1577":1,"1591":1,"1596":1,"1600":2,"1611":2,"1627":1,"1631":3,"1632":5,"1635":3,"1638":1,"1640":1,"1641":7,"1651":3,"1654":1,"1662":1,"1664":1,"1689":1,"1720":1,"1728":1,"1748":4,"1749":4,"1765":5,"1779":1,"1796":1,"1805":3,"1807":1,"1810":1,"1816":1,"1832":1,"1869":2,"1871":1,"1872":1,"1874":3,"1876":2,"1877":3,"1882":1,"1923":1,"1926":1,"1945":1,"1973":2,"1975":1,"1976":1,"1977":1,"1978":1,"1979":2,"1996":1,"2001":1,"2004":1,"2034":1,"2044":1,"2109":1,"2115":1,"2128":1,"2138":1,"2146":1,"2162":1,"2166":1,"2168":1,"2190":1,"2200":1,"2209":1,"2234":1}}],["maxhandlerconstructordependencies",{"2":{"1431":1},"3":{"1431":1,"1436":9}}],["maxopenquestionsperuserpersession",{"3":{"1402":4}}],["maxoptions",{"3":{"1398":1,"1402":8}}],["maxoutcomes",{"3":{"1396":2}}],["maxoutputtokens",{"2":{"1419":1,"1422":1,"2175":1,"2176":1},"3":{"1018":1,"1090":1,"1091":3,"1094":1,"1366":1,"1369":3,"1419":1,"1422":1,"1427":5,"2175":1,"2176":1}}],["maxsizebytes",{"2":{"1478":1},"3":{"1478":1}}],["maxserviceconstructorparameters",{"3":{"1436":2}}],["maxsponsors",{"3":{"1395":1}}],["maxspeakersessions",{"3":{"1395":4}}],["maxsuggestions",{"3":{"1395":1}}],["maxsavepasses",{"3":{"1278":1,"1286":3}}],["maxpolls",{"3":{"1395":5}}],["maxpairs",{"3":{"1359":2}}],["maxpages",{"3":{"1324":2,"1395":1}}],["maxpagesize=500",{"3":{"1577":1}}],["maxpagesize",{"2":{"331":1,"337":1,"741":1,"743":1,"1228":1,"1245":1,"1988":1,"1992":1,"2203":1},"3":{"0":1,"330":2,"331":1,"337":2,"674":1,"741":1,"743":1,"1228":2,"1229":3,"1242":1,"1245":1,"1247":3,"1259":1,"1286":1,"1309":4,"1311":8,"1320":1,"1323":4,"1324":3,"1380":2,"1395":1,"1396":4,"1415":2,"1748":2,"1988":3,"1992":1,"2203":1}}],["maxpayloadbytes",{"3":{"1309":1}}],["maxmanualidattempts",{"3":{"1359":3,"1395":1}}],["maxlineoctets",{"3":{"1300":2}}],["maxlockoutseconds",{"2":{"1292":1},"3":{"1292":2,"1300":2}}],["maxlookupselectorcacheentries",{"3":{"1286":2}}],["maxlengtherror",{"3":{"1396":2}}],["maxlengthattribute",{"3":{"1324":1,"1395":1}}],["maxlength",{"2":{"657":1,"1353":1,"1833":1},"3":{"657":2,"1237":6,"1271":10,"1286":5,"1309":5,"1311":2,"1324":10,"1350":10,"1353":1,"1359":24,"1395":15,"1396":9,"1631":1,"1727":1,"1810":2,"1829":1,"1833":1}}],["maxrosterpages",{"3":{"1396":2}}],["maxroster",{"3":{"1395":2}}],["maxroleslength",{"3":{"1286":4,"1318":1,"1323":2}}],["maxrenderedrows",{"3":{"1436":1}}],["maxrendereditems",{"2":{"2081":1},"3":{"1324":2,"2081":1}}],["maxreturnedownquestions",{"3":{"1402":1}}],["maxreturnedquestions",{"3":{"1402":2}}],["maxretryattempts",{"3":{"1339":5,"1443":1}}],["maxretrydelay",{"2":{"987":1},"3":{"987":1,"1286":2}}],["maxretrycount",{"2":{"987":1},"3":{"987":1,"1286":2}}],["maxretrybackoffseconds",{"2":{"2190":1},"3":{"0":1,"1042":2,"1286":1,"2190":2}}],["maxretries",{"2":{"19":1,"409":1,"2033":1},"3":{"19":3,"24":1,"27":1,"397":2,"409":1,"819":1,"849":1,"1256":1,"1259":11,"1286":1,"1324":1,"1339":1,"1359":1,"2033":1}}],["maxrecentcount",{"3":{"1396":3}}],["maxrequestsperemail",{"2":{"1641":1},"3":{"1300":5,"1641":2,"1767":1}}],["maxrequestspertcpconnection",{"3":{"1286":1}}],["maxrequestbytes",{"2":{"1118":1,"1373":1},"3":{"1118":1,"1350":2,"1373":1,"1380":1}}],["maxregistrationsperipperhour",{"2":{"281":1,"1326":1,"1339":1,"1444":1},"3":{"1300":1,"1326":1,"1339":1,"1444":1,"1496":1}}],["maxreplicas",{"2":{"538":1,"664":1,"764":1,"765":1,"766":2,"767":1,"768":1,"995":1,"1154":1,"1156":1,"1469":1,"2170":1},"3":{"0":1,"390":2,"534":4,"538":1,"540":1,"664":1,"665":1,"764":1,"765":1,"766":2,"767":1,"768":1,"995":1,"1154":1,"1156":1,"1467":6,"1469":1,"1526":4,"1535":1,"2170":1}}],["maxtimeout",{"3":{"1427":3}}],["maxtagsperexpression",{"3":{"1323":2}}],["maxtcpconnectionsperendpoint",{"3":{"1286":1}}],["maxtenantidlength",{"3":{"1286":2}}],["maxkeylength",{"3":{"1286":1}}],["maxintervalseconds",{"3":{"1707":1}}],["maxinlinecodelines",{"3":{"1436":4,"1526":1}}],["maxinspectedentries",{"3":{"1286":1}}],["maximumlength",{"2":{"1828":1,"1833":1},"3":{"1271":16,"1300":6,"1309":3,"1324":4,"1359":38,"1402":4,"1436":3,"1828":1,"1829":1,"1833":1}}],["maximumlengthvalidator",{"3":{"1271":2,"1395":1}}],["maximum",{"3":{"71":1,"529":1,"819":1,"862":1,"1271":1,"1275":1,"1286":1,"1300":1,"1324":5,"1339":1,"1359":11,"1395":7,"1396":1,"1402":1,"1415":2,"1436":1,"1457":1,"1630":1,"1631":2,"1640":3,"1641":1,"1767":1,"1840":1,"1908":1,"2033":1}}],["maximal",{"3":{"216":1,"1324":1,"2154":1}}],["maxima",{"3":{"0":1,"861":2,"862":1,"1436":1,"1596":1}}],["maxeventnamelength",{"3":{"1309":1}}],["maxentitytypelength",{"3":{"1286":1}}],["maxerrorlength",{"3":{"1259":1,"1286":1,"1323":1}}],["maxexportrows",{"2":{"743":1,"1988":1,"1992":1},"3":{"0":1,"674":1,"741":1,"743":1,"1212":1,"1229":1,"1311":4,"1320":1,"1323":4,"1988":2,"1992":1}}],["maxfilemegabytes",{"3":{"1395":3}}],["maxfilebytes",{"3":{"1350":8,"1359":2,"1380":1,"1395":5}}],["maxfilters",{"3":{"1241":1,"1247":2,"1311":4}}],["maxframes",{"3":{"1323":3,"2128":1}}],["maxfailedattempts",{"2":{"286":1,"1292":1,"2002":1},"3":{"175":1,"281":1,"286":1,"1292":1,"1300":4,"2001":1,"2002":1}}],["maxdirectfiles",{"2":{"1004":1},"3":{"1004":2,"1431":1,"1436":3,"2044":1}}],["maxdecodeddimension",{"2":{"442":1},"3":{"0":1,"442":1,"1323":3,"2128":1}}],["maxdecodedpixels",{"2":{"442":1},"3":{"0":1,"442":1,"1323":3,"2128":1}}],["maxvalidationattempts",{"2":{"1641":1},"3":{"854":1,"1294":1,"1300":5,"1641":2,"1767":1}}],["maxvalue",{"2":{"335":1,"1419":1},"3":{"335":1,"827":1,"1124":1,"1242":1,"1247":2,"1286":1,"1309":4,"1311":1,"1323":3,"1324":4,"1339":3,"1350":2,"1396":3,"1415":4,"1419":1,"1427":1,"1436":5,"1465":1,"2001":1}}],["maxavatarbytes",{"3":{"1415":7}}],["maxavatarrequestbytes",{"2":{"1411":1},"3":{"1411":1,"1415":4}}],["maxactivities",{"3":{"1395":1}}],["maxactivecircuits",{"2":{"830":1,"831":1,"1128":1},"3":{"830":1,"831":1,"832":1,"1124":3,"1128":1,"1212":1,"1324":5,"1416":1,"2001":1}}],["maxactivesessionsperuser",{"2":{"909":1,"1290":1,"1982":1},"3":{"0":1,"905":2,"909":1,"1290":1,"1300":2,"1982":2}}],["maxassetspersession",{"2":{"1357":1,"1389":1},"3":{"1350":2,"1357":1,"1359":2,"1380":1,"1389":1,"1395":1}}],["maxage",{"3":{"1300":2,"1324":3}}],["maxattempts",{"3":{"444":1,"1042":1,"1286":2,"1323":1,"1436":1,"2190":1}}],["maxcalldepth",{"3":{"1436":4}}],["maxcacheentries",{"2":{"337":1},"3":{"330":1,"333":1,"337":1,"1242":1,"1247":2}}],["maxchannelkeylength",{"3":{"1309":1}}],["maxcodebehindlines",{"2":{"1531":1},"3":{"1436":4,"1526":1,"1531":1}}],["maxcodelength",{"3":{"1300":3}}],["maxconstructordependencies",{"3":{"1431":1,"1436":7}}],["maxconsecutivefailures",{"3":{"1395":1}}],["maxcontrollerconstructordependencies",{"2":{"1431":1},"3":{"1431":1,"1436":7}}],["maxconnectionsperuser",{"2":{"1307":1,"1309":1,"1945":1},"3":{"0":1,"228":1,"384":1,"1307":1,"1309":3,"1323":3,"1945":1}}],["maxcorrelationidlength",{"3":{"1286":2}}],["maxcount",{"3":{"1237":1}}],["max",{"2":{"766":1,"768":1,"1457":1,"1529":1},"3":{"214":1,"217":1,"572":1,"626":1,"690":1,"698":1,"766":1,"768":2,"905":1,"1237":4,"1244":1,"1247":4,"1271":5,"1286":2,"1298":1,"1300":1,"1303":2,"1309":2,"1311":1,"1324":7,"1339":2,"1344":1,"1350":11,"1353":2,"1359":32,"1369":8,"1395":3,"1396":3,"1402":1,"1405":1,"1415":5,"1436":3,"1456":1,"1457":1,"1467":2,"1488":1,"1526":1,"1577":1,"1583":1,"1630":1,"1631":4,"1640":1,"1641":2,"1683":1,"1713":1,"1727":2,"1748":3,"1764":14,"1767":22,"1829":2,"1832":1,"1833":1,"1911":1,"1986":1,"2056":1,"2151":2}}],["maxby",{"3":{"109":1,"1222":1,"1229":1}}],["maxnetworkretries",{"2":{"73":2},"3":{"73":2}}],["maxnavigationdepth",{"2":{"333":1,"1242":1},"3":{"0":1,"333":1,"1241":1,"1242":1,"1247":6}}],["maxunboundedresultlimit",{"2":{"330":2,"331":1,"332":1,"333":1,"335":1,"552":1,"740":1,"741":1,"745":1,"1243":1,"1244":1,"1815":1,"1988":2,"1991":1,"1992":1},"3":{"0":1,"330":3,"331":1,"332":1,"333":1,"335":1,"337":1,"552":1,"740":1,"741":1,"745":1,"1229":2,"1243":1,"1244":2,"1247":6,"1278":1,"1286":3,"1310":1,"1311":3,"1577":1,"1815":1,"1988":3,"1991":1,"1992":1}}],["mayor",{"3":{"1685":1,"1686":2}}],["maybenullwhen",{"3":{"1270":1}}],["maybe",{"3":{"1237":1,"1286":1,"1808":1,"1818":1,"1973":1,"2004":1}}],["may",{"0":{"1423":2},"1":{"1993":1,"1994":1,"1995":1,"1996":1,"1997":1,"1998":1},"3":{"0":7,"18":1,"24":1,"27":1,"38":1,"71":1,"76":1,"77":1,"80":1,"81":3,"122":1,"126":1,"185":1,"186":1,"187":1,"188":1,"219":1,"225":1,"235":2,"243":2,"255":1,"266":1,"267":1,"317":3,"318":1,"325":1,"335":1,"342":1,"353":1,"384":1,"390":1,"433":1,"441":1,"530":1,"536":1,"556":2,"563":1,"564":1,"568":1,"620":1,"626":1,"628":1,"658":4,"674":1,"683":1,"727":1,"782":1,"793":1,"819":1,"863":1,"881":1,"891":1,"896":1,"916":1,"924":1,"989":2,"1014":1,"1020":1,"1042":1,"1059":1,"1075":1,"1090":1,"1091":1,"1102":1,"1107":1,"1112":1,"1116":1,"1168":1,"1187":1,"1193":1,"1211":1,"1220":1,"1228":1,"1229":2,"1230":1,"1237":5,"1241":1,"1242":1,"1244":1,"1247":15,"1254":1,"1255":1,"1256":2,"1259":7,"1263":3,"1264":2,"1265":1,"1269":4,"1270":9,"1273":1,"1275":1,"1278":1,"1279":1,"1284":1,"1285":1,"1286":30,"1287":1,"1290":1,"1296":1,"1297":1,"1300":18,"1301":1,"1305":1,"1307":1,"1309":11,"1311":16,"1312":2,"1320":2,"1323":16,"1324":26,"1330":1,"1339":12,"1342":1,"1348":3,"1350":14,"1353":1,"1355":1,"1357":3,"1359":62,"1369":1,"1373":2,"1375":1,"1380":8,"1389":1,"1395":5,"1396":16,"1399":1,"1402":8,"1403":1,"1405":1,"1406":1,"1409":1,"1415":18,"1417":6,"1418":3,"1427":4,"1431":1,"1436":28,"1438":4,"1455":1,"1456":1,"1467":3,"1488":1,"1489":2,"1492":1,"1496":1,"1553":1,"1585":3,"1596":1,"1626":1,"1630":4,"1631":7,"1632":1,"1635":2,"1639":1,"1640":1,"1641":1,"1708":1,"1755":2,"1764":1,"1765":1,"1767":1,"1776":5,"1792":1,"1805":1,"1816":1,"1821":1,"1832":1,"1837":1,"1840":4,"1908":1,"1910":1,"1923":1,"1960":2,"1964":1,"1973":1,"1992":2,"1993":5,"1995":2,"1998":5,"2031":2,"2033":1,"2044":1,"2050":1,"2066":1,"2079":1,"2100":1,"2109":1,"2129":1,"2144":1,"2169":1,"2172":1,"2173":1,"2176":1,"2187":1,"2188":1,"2190":1,"2200":1,"2201":1,"2210":1,"2222":3,"2234":1,"2242":1}}],["mangled",{"3":{"1380":1}}],["mangling",{"3":{"743":1}}],["manipulation",{"3":{"1438":1}}],["manipulations",{"3":{"1350":1}}],["manipulate",{"3":{"1371":1}}],["manifestation",{"3":{"1326":1,"1339":1}}],["manifests",{"2":{"1461":1},"3":{"422":1,"1416":1,"1436":1,"1455":3,"1461":1,"1465":3}}],["manifest",{"0":{"1199":1},"1":{"1196":1,"1197":1,"1198":1,"1199":1},"3":{"418":2,"423":1,"426":1,"1191":2,"1192":1,"1196":1,"1200":1,"1201":1,"1300":1,"1309":2,"1324":4,"1369":3,"1416":7,"1417":7,"1431":1,"1434":1,"1436":6,"1445":1,"1455":2,"1464":2,"1465":1,"1476":1,"1479":1,"1481":1,"1496":2,"1498":1,"1500":1,"1501":1,"1502":2,"1517":1,"1599":1,"2047":1}}],["manufacturing",{"3":{"2138":1}}],["manufacture",{"3":{"1436":2,"2141":1}}],["manufacturer",{"3":{"1300":1,"1630":1,"1764":1}}],["manufactures",{"3":{"1229":1,"1268":1}}],["manufactured",{"3":{"295":1,"1271":1}}],["manualidrangeexhausted",{"3":{"1359":2,"1395":2}}],["manualidrangeend",{"3":{"1350":2,"1359":2,"1395":2}}],["manualidrangestart",{"2":{"1364":1},"3":{"1350":3,"1352":1,"1359":2,"1364":2,"1369":2,"1395":2}}],["manualinstructions",{"2":{"633":1},"3":{"633":1}}],["manualcheckinasync",{"3":{"1396":4}}],["manualcheckin",{"3":{"1203":2,"1207":4,"1271":1,"1396":6}}],["manualcheckinhandlertests",{"3":{"1199":1,"1207":3}}],["manualcheckinhandler",{"3":{"1199":2,"1203":1,"1207":2,"1271":2,"1350":2,"1396":13}}],["manualcheckinrequestvalidatortests",{"3":{"1199":1,"1207":2}}],["manualcheckinrequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1396":6}}],["manualcheckinrequest",{"3":{"1199":10,"1203":1,"1207":2,"1396":10}}],["manualclock",{"3":{"1199":4,"1207":2}}],["manuals",{"3":{"1117":1}}],["manually",{"3":{"435":1,"767":1,"1247":2,"1309":1,"1350":3,"1355":1,"1396":2,"1417":1,"1457":1,"1467":1,"1627":1,"1630":3,"1631":1,"1633":1,"1637":1,"1638":1,"1639":4,"1641":2,"1644":1,"1765":1,"1768":1}}],["manual",{"0":{"1353":1,"1644":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"1605":1,"1606":1,"1607":1,"1608":1,"1609":1,"1610":1,"1739":1,"1740":1,"1741":1,"1742":1,"1743":1,"1744":1},"3":{"0":2,"2":1,"4":1,"10":1,"13":1,"19":1,"20":1,"41":1,"293":1,"330":1,"331":1,"334":1,"435":1,"444":2,"512":1,"528":2,"530":1,"536":1,"549":1,"577":1,"620":1,"622":1,"626":1,"635":2,"659":1,"684":1,"685":2,"690":2,"757":1,"759":3,"765":1,"791":1,"793":1,"799":1,"889":1,"890":1,"966":1,"990":1,"1110":1,"1118":1,"1168":1,"1192":1,"1202":1,"1203":1,"1212":3,"1213":1,"1238":1,"1243":1,"1247":3,"1259":2,"1265":1,"1270":1,"1273":1,"1286":13,"1300":5,"1309":1,"1310":7,"1311":5,"1323":1,"1324":7,"1344":1,"1347":2,"1349":1,"1350":10,"1352":1,"1359":17,"1369":1,"1380":4,"1395":3,"1396":27,"1402":1,"1415":2,"1417":1,"1427":1,"1432":1,"1436":5,"1438":4,"1454":1,"1455":2,"1456":2,"1457":1,"1467":2,"1470":1,"1473":1,"1474":1,"1475":3,"1476":1,"1480":1,"1481":3,"1483":1,"1487":1,"1490":1,"1492":3,"1496":1,"1523":1,"1524":2,"1525":1,"1526":5,"1530":1,"1531":3,"1532":1,"1533":1,"1546":1,"1554":1,"1558":1,"1564":1,"1565":1,"1570":2,"1571":1,"1577":4,"1582":1,"1589":1,"1591":2,"1595":1,"1596":2,"1598":1,"1603":1,"1604":1,"1605":4,"1610":2,"1611":1,"1627":1,"1630":1,"1631":3,"1632":1,"1636":2,"1639":6,"1641":10,"1642":1,"1645":1,"1651":1,"1653":1,"1662":1,"1674":1,"1684":1,"1701":1,"1710":1,"1728":1,"1729":1,"1739":4,"1744":2,"1746":1,"1749":3,"1754":2,"1765":3,"1766":1,"1767":2,"1771":1,"1779":1,"1865":1,"1867":1,"1898":1,"1988":1,"1992":1,"2035":1,"2037":1,"2066":1,"2129":1,"2149":1,"2165":1,"2234":2}}],["managing",{"3":{"188":1,"1380":1,"1395":2,"1415":1,"1624":1,"1629":1,"1637":1}}],["managepollrows",{"3":{"1402":1}}],["managepolls",{"3":{"1402":4}}],["managepackageversionscentrally",{"2":{"1214":1},"3":{"1214":1}}],["manageable",{"3":{"1286":1,"1638":1}}],["managers",{"3":{"1380":1,"1395":1,"1577":1}}],["manager",{"1":{"807":1,"808":1,"809":1,"810":1,"811":1,"812":1,"813":1,"814":1,"815":1},"3":{"0":1,"807":1,"810":2,"812":1,"815":1,"1212":1,"1300":4,"1307":1,"1309":2,"1311":1,"1324":1,"1380":1,"1395":1,"1396":1,"1416":1,"1436":1,"1539":1,"1547":1,"1577":1,"1768":1,"1935":1,"2234":1}}],["manageroles",{"2":{"184":1,"1059":1,"2202":1,"2203":1},"3":{"0":1,"184":1,"186":1,"1059":2,"1300":14,"1311":2,"1324":5,"1415":4,"2202":1,"2203":1}}],["managed",{"0":{"1477":1},"1":{"437":1,"438":1,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1,"596":1,"597":1,"598":1,"599":1,"600":1,"601":1,"602":1,"603":1,"604":1,"605":1,"2126":1,"2127":1,"2128":1,"2129":1,"2130":1},"2":{"599":1,"1455":1,"1466":1,"1470":1,"1477":2,"1484":1},"3":{"0":7,"234":1,"245":1,"259":1,"341":2,"342":1,"343":1,"437":1,"440":1,"443":2,"591":1,"596":1,"598":1,"599":4,"601":1,"639":1,"640":1,"641":1,"664":1,"665":1,"666":1,"670":1,"681":1,"682":1,"683":1,"684":1,"860":1,"1022":1,"1035":1,"1038":1,"1114":1,"1115":1,"1150":1,"1192":1,"1212":4,"1213":1,"1237":1,"1286":4,"1302":1,"1323":2,"1332":1,"1335":1,"1339":7,"1350":3,"1380":1,"1395":1,"1396":1,"1415":3,"1416":7,"1417":7,"1436":1,"1438":1,"1441":1,"1442":2,"1443":1,"1445":1,"1446":1,"1455":6,"1459":1,"1463":1,"1466":3,"1467":12,"1470":2,"1471":2,"1472":3,"1474":1,"1476":1,"1477":19,"1478":1,"1482":1,"1483":2,"1484":2,"1496":2,"1524":2,"1526":5,"1534":2,"1535":1,"1548":1,"1554":1,"1575":1,"1577":2,"1588":1,"1589":1,"1591":8,"1596":2,"1597":1,"1600":1,"1629":3,"1630":2,"1631":2,"1632":1,"1635":1,"1636":1,"1637":1,"1638":4,"1668":1,"1670":2,"1748":1,"1765":1,"1779":2,"1868":1,"1876":1,"1877":3,"2048":1,"2125":1,"2126":1,"2128":2,"2129":1,"2130":2,"2135":1,"2144":1,"2148":1,"2212":2,"2215":1,"2221":1,"2223":1,"2234":2}}],["manages",{"3":{"0":1,"1074":1,"1286":1,"1307":1,"1309":1,"1324":1,"1373":1,"1396":1,"1402":2,"1472":1,"1637":1,"1750":1,"1765":1,"1773":1,"1871":1,"1936":1}}],["managementrouteauthorizationtests",{"2":{"1535":1},"3":{"1199":1,"1207":2,"1436":1,"1526":2,"1535":2}}],["management",{"0":{"1556":1,"1569":1},"1":{"596":1,"597":1,"598":1,"599":1,"600":1,"601":1,"602":1,"603":1,"604":1,"605":1},"3":{"0":2,"32":1,"39":1,"186":1,"225":1,"301":1,"324":1,"359":1,"361":1,"369":1,"379":1,"381":1,"596":1,"640":2,"641":1,"881":1,"938":1,"954":1,"1026":1,"1192":1,"1202":1,"1203":1,"1212":1,"1213":1,"1214":1,"1216":2,"1259":2,"1300":11,"1308":1,"1309":1,"1311":7,"1323":9,"1324":34,"1326":1,"1327":2,"1339":5,"1350":5,"1359":2,"1380":6,"1383":1,"1389":1,"1390":1,"1395":50,"1396":14,"1402":8,"1414":1,"1415":6,"1417":10,"1429":1,"1431":1,"1436":12,"1437":1,"1438":9,"1440":1,"1441":2,"1444":3,"1446":1,"1453":1,"1455":1,"1467":2,"1487":2,"1496":1,"1499":1,"1525":2,"1526":2,"1534":1,"1535":2,"1552":1,"1569":1,"1577":2,"1586":1,"1588":1,"1591":1,"1597":1,"1600":1,"1611":2,"1621":1,"1625":2,"1626":1,"1627":7,"1629":6,"1630":1,"1632":5,"1636":1,"1637":2,"1638":4,"1639":2,"1641":2,"1644":1,"1649":1,"1666":1,"1667":2,"1671":1,"1685":1,"1686":1,"1747":1,"1748":4,"1749":1,"1750":2,"1763":3,"1767":1,"1771":3,"1773":1,"1796":2,"1802":1,"1942":1,"1963":1,"1996":2,"2006":2,"2056":1,"2064":1,"2137":1,"2147":1,"2222":1,"2234":2}}],["manageusers",{"2":{"184":1,"1059":1,"2203":1},"3":{"0":1,"184":1,"186":1,"1059":1,"1300":6,"1311":1,"1415":3,"2203":1}}],["manage",{"2":{"186":1,"638":1,"642":1,"1304":1},"3":{"0":6,"152":1,"185":1,"186":6,"187":1,"209":1,"378":1,"384":2,"638":1,"640":3,"642":2,"690":1,"694":1,"1026":1,"1078":1,"1116":3,"1120":1,"1297":4,"1300":6,"1303":1,"1304":3,"1309":13,"1324":5,"1347":1,"1348":7,"1350":11,"1357":2,"1359":1,"1373":1,"1377":1,"1380":5,"1389":1,"1392":1,"1395":1,"1396":16,"1402":29,"1409":3,"1414":2,"1415":5,"1417":1,"1438":1,"1455":1,"1467":5,"1496":1,"1550":1,"1589":1,"1591":1,"1596":1,"1597":1,"1621":1,"1626":2,"1627":5,"1629":1,"1631":5,"1632":5,"1638":1,"1640":2,"1651":1,"1653":2,"1687":1,"1748":3,"1749":3,"1760":1,"1763":2,"1767":1,"1768":8,"1771":1,"1960":1,"1961":1,"1962":1,"1963":4,"1965":1,"2074":1}}],["many",{"3":{"71":1,"135":1,"175":2,"186":1,"227":1,"258":1,"282":1,"310":1,"317":1,"319":1,"329":1,"333":1,"361":1,"472":1,"598":1,"600":1,"697":1,"740":1,"760":1,"819":1,"827":1,"829":1,"853":1,"881":2,"946":1,"1110":1,"1124":1,"1126":1,"1150":1,"1153":1,"1200":1,"1229":1,"1237":2,"1247":5,"1259":2,"1270":1,"1271":1,"1276":1,"1279":1,"1286":9,"1300":10,"1301":4,"1304":1,"1305":1,"1309":4,"1310":12,"1311":5,"1312":2,"1323":5,"1324":13,"1339":5,"1350":29,"1354":1,"1359":17,"1380":3,"1387":1,"1395":14,"1396":25,"1402":5,"1406":1,"1410":1,"1415":4,"1417":3,"1427":1,"1428":1,"1431":2,"1436":7,"1438":2,"1456":1,"1459":1,"1465":1,"1473":1,"1476":1,"1496":2,"1499":1,"1500":1,"1541":1,"1551":1,"1555":1,"1565":1,"1571":1,"1577":3,"1630":23,"1638":3,"1640":2,"1641":1,"1749":1,"1780":1,"1790":1,"1805":1,"1808":1,"1815":1,"1847":1,"1853":1,"1894":1,"1901":1,"1902":1,"1982":1,"1984":1,"1995":1,"1998":1,"2001":1,"2002":2,"2025":1,"2033":1,"2052":1,"2137":1,"2147":1,"2169":1,"2228":1}}],["mandating",{"3":{"1436":1}}],["mandated",{"3":{"1474":1}}],["mandates",{"3":{"120":1,"988":1,"1237":1,"1323":1,"1380":2,"1840":1}}],["mandate",{"3":{"0":1,"68":1}}],["mandatory",{"3":{"0":1,"674":1,"707":1,"1058":1,"1060":2,"1270":3,"1286":1,"1293":1,"1300":2,"1311":3,"1323":1,"1324":1,"1350":1,"1359":9,"1380":1,"1395":1,"1396":4,"1402":3,"1415":1,"1436":5,"1455":1,"1461":1,"1491":1,"1526":1,"1600":1,"1635":1,"1654":1,"1748":1,"1749":4,"1765":5,"1802":1,"1876":1,"2197":1,"2205":1}}],["major≥9",{"3":{"1576":1,"1577":1}}],["majorversion3",{"2":{"1489":1,"1491":1},"3":{"1436":2,"1489":1,"1491":1}}],["majorversion8",{"2":{"1074":1,"1489":1},"3":{"1074":1,"1436":2,"1489":1}}],["majority",{"3":{"1229":1,"1286":1,"1380":1,"1415":1,"1443":1,"1896":1,"1898":1}}],["majors",{"3":{"145":1,"413":2,"1431":1}}],["major",{"2":{"1733":1},"3":{"0":4,"147":6,"149":1,"150":2,"152":2,"1036":1,"1074":1,"1075":2,"1212":1,"1213":1,"1323":1,"1431":2,"1436":3,"1454":1,"1489":1,"1526":1,"1537":1,"1552":1,"1569":1,"1576":1,"1577":2,"1586":1,"1733":2,"1735":2,"1763":1,"2043":1,"2222":1}}],["maui=",{"3":{"1416":1}}],["mauiuiapplicationdelegate",{"3":{"1416":1}}],["mauiuimodule",{"2":{"651":1},"3":{"649":2,"651":2,"1324":2}}],["mauiwinuiapplication",{"3":{"1416":5}}],["mauimediapickerservice",{"3":{"1199":1,"1203":1,"1207":2,"1417":12}}],["mauimapnavigationservice",{"3":{"1199":1,"1203":1,"1207":2,"1417":9}}],["mauilocalnotificationservice",{"3":{"1199":1,"1203":1,"1207":2,"1417":17}}],["mauilocalcachestore",{"3":{"1199":1,"1203":1,"1207":2,"1417":14}}],["mauigeolocationservice",{"2":{"2121":1},"3":{"1199":1,"1203":1,"1207":2,"1417":11,"2121":1}}],["mauigeocodingservice",{"3":{"1199":1,"1203":1,"1207":2,"1417":10}}],["mauitexttospeechservice",{"3":{"1199":1,"1203":1,"1207":2,"1417":13}}],["mauitokenstorageservice",{"2":{"507":1,"510":1,"513":1},"3":{"0":1,"507":5,"510":1,"513":8,"1199":1,"1203":1,"1207":2,"1324":3,"1416":4,"1417":10,"1496":1}}],["mauispeechtotextservice",{"3":{"1199":1,"1203":1,"1207":2,"1417":10}}],["mauishareservice",{"2":{"2121":1},"3":{"1199":1,"1203":1,"1207":2,"1417":8,"2121":2}}],["mauiscreenshotservice",{"3":{"1199":1,"1203":1,"1207":2,"1417":7}}],["mauisecuretokenstore",{"2":{"510":1,"511":1,"513":1},"3":{"507":5,"509":1,"510":1,"511":7,"512":1,"513":2,"1199":1,"1203":1,"1207":2,"1324":1,"1417":11}}],["mauihapticfeedbackservice",{"2":{"2121":1},"3":{"1199":1,"1203":1,"1207":2,"1417":9,"2121":1}}],["mauiformfactor",{"3":{"1199":1,"1203":1,"1207":2,"1417":17}}],["mauifirebasemessagingservice",{"2":{"434":1,"436":1},"3":{"434":2,"436":2}}],["mauidevicepreferences",{"3":{"1199":1,"1203":1,"1207":2,"1417":16}}],["mauicommunitytoolkit",{"3":{"1417":1}}],["mauicontext",{"3":{"1416":3}}],["mauiconnectivitystatusservice",{"3":{"1199":1,"1203":1,"1207":2,"1417":11}}],["mauiclipboardservice",{"2":{"2121":1},"3":{"1199":1,"1203":1,"1207":2,"1417":7,"2121":1}}],["mauiculturestore",{"3":{"265":1,"268":1,"415":1,"1199":3,"1203":1,"1207":2,"1311":2,"1417":14}}],["mauicultureinitializer",{"3":{"265":1,"1199":2,"1203":1,"1207":2,"1324":1,"1416":1,"1417":12}}],["mauicultureapplier",{"3":{"265":1,"415":1,"1199":2,"1203":1,"1207":2,"1311":2,"1324":3,"1417":13}}],["mauibiometricauthenticator",{"3":{"1199":1,"1203":1,"1207":2,"1417":9}}],["mauibatterystatusservice",{"3":{"1199":1,"1203":1,"1207":2,"1417":11}}],["mauibarcodescannerservice",{"2":{"680":1,"682":1},"3":{"680":1,"682":5,"684":1,"1199":2,"1203":1,"1207":2,"1417":30}}],["mauibacknavigationbridgetests",{"3":{"1199":1,"1207":2,"1438":1}}],["mauibacknavigationbridge",{"2":{"1417":1},"3":{"413":1,"1199":3,"1203":1,"1207":3,"1324":14,"1416":1,"1417":4}}],["mauiapp",{"3":{"1416":3}}],["mauiapplication",{"3":{"1416":2}}],["mauiappcompatactivity",{"3":{"1416":1}}],["mauiappbuilder",{"3":{"265":1,"682":1,"980":1,"1208":1,"1417":9}}],["mauiaccessibilityannouncer",{"3":{"1199":1,"1203":1,"1207":2,"1417":9}}],["mauipubliclinkbuilder",{"3":{"1199":1,"1203":1,"1207":2,"1324":4,"1417":8,"1496":1}}],["mauipushregistrationservice",{"2":{"434":1,"436":1},"3":{"434":2,"436":2,"1199":1,"1203":1,"1207":2,"1417":21,"1496":1}}],["mauiprogram",{"2":{"683":1},"3":{"412":1,"413":1,"507":2,"511":4,"513":2,"649":2,"683":1,"1199":4,"1203":1,"1207":2,"1212":2,"1324":11,"1395":2,"1415":1,"1416":77,"1417":20,"1496":2}}],["mauiexternallinkservice",{"3":{"1199":1,"1203":1,"1207":2,"1417":8}}],["mauiexternalauthbroker",{"2":{"415":1,"418":1,"1976":1,"2124":1},"3":{"0":1,"415":2,"418":2,"420":1,"423":1,"428":1,"1199":1,"1203":1,"1207":2,"1324":1,"1417":13,"1496":1,"1976":1,"2124":1}}],["mauierrorhandlinginitializer",{"2":{"413":1},"3":{"413":1,"1199":2,"1203":1,"1207":2,"1417":29}}],["maui",{"0":{"1459":1},"1":{"410":1,"411":1,"412":1,"413":1,"414":1,"415":1,"416":1,"1417":1},"2":{"130":1,"138":1,"141":1,"142":1,"436":1,"481":1,"482":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1,"509":1,"511":1,"528":1,"682":1,"686":1,"939":1,"942":1,"982":1,"984":1,"1416":2,"1417":4,"1454":1,"1503":1,"1504":1,"1585":1,"1599":1,"1660":1,"1675":1,"1732":1,"1781":1,"2102":1,"2122":2,"2125":1},"3":{"0":19,"59":1,"60":1,"130":2,"135":4,"138":1,"141":1,"142":1,"243":1,"265":4,"370":1,"373":2,"389":1,"410":1,"412":5,"413":15,"414":2,"415":6,"418":3,"419":2,"420":2,"422":1,"423":2,"426":1,"428":2,"429":1,"430":1,"432":1,"434":2,"436":2,"439":1,"481":2,"482":3,"483":1,"485":1,"486":4,"487":1,"488":1,"489":1,"490":3,"491":1,"492":1,"493":2,"494":1,"495":2,"505":1,"506":3,"507":11,"508":2,"509":10,"510":2,"511":12,"512":1,"513":6,"514":2,"528":4,"530":1,"531":2,"532":1,"555":1,"560":1,"649":1,"650":1,"653":1,"681":1,"682":5,"683":2,"684":2,"685":1,"686":1,"773":1,"854":1,"880":1,"939":2,"942":2,"980":8,"982":4,"983":2,"984":2,"1004":1,"1184":1,"1185":1,"1187":2,"1192":3,"1199":35,"1202":2,"1203":37,"1206":1,"1207":105,"1208":6,"1211":2,"1212":12,"1289":1,"1294":1,"1298":1,"1300":1,"1311":5,"1323":2,"1324":67,"1328":1,"1339":1,"1359":1,"1381":1,"1384":1,"1388":1,"1391":1,"1393":1,"1395":13,"1396":1,"1402":1,"1403":1,"1405":1,"1414":1,"1415":15,"1416":109,"1417":426,"1427":1,"1436":6,"1438":2,"1441":1,"1447":1,"1449":1,"1452":1,"1453":1,"1454":13,"1455":2,"1456":2,"1459":23,"1460":2,"1461":4,"1486":4,"1488":1,"1489":3,"1496":15,"1503":2,"1504":2,"1513":2,"1524":4,"1526":9,"1530":1,"1531":8,"1532":2,"1577":1,"1582":1,"1583":1,"1585":3,"1591":11,"1595":1,"1596":5,"1597":2,"1599":4,"1600":2,"1626":2,"1627":2,"1629":1,"1630":7,"1639":1,"1641":25,"1660":2,"1669":6,"1673":1,"1675":2,"1732":2,"1773":1,"1781":3,"1976":2,"2079":1,"2080":2,"2082":1,"2102":2,"2113":1,"2117":1,"2118":4,"2120":1,"2121":4,"2122":7,"2124":6,"2125":4,"2221":1,"2223":1,"2227":1,"2229":2,"2230":1,"2232":1,"2234":4}}],["made",{"3":{"0":7,"24":2,"26":1,"27":1,"110":1,"125":1,"135":1,"136":2,"149":1,"151":1,"157":1,"168":1,"170":1,"173":1,"201":1,"243":1,"255":1,"265":1,"303":1,"365":1,"372":1,"448":1,"454":1,"526":1,"537":1,"539":1,"550":1,"603":1,"609":1,"626":1,"706":1,"716":2,"724":1,"726":1,"734":1,"749":1,"799":1,"812":1,"819":1,"826":2,"827":3,"829":1,"832":1,"834":1,"837":2,"840":1,"860":1,"868":1,"896":1,"906":1,"923":1,"938":1,"954":1,"964":2,"965":2,"971":1,"1033":1,"1036":1,"1043":1,"1045":1,"1051":2,"1055":1,"1061":2,"1074":1,"1082":1,"1090":1,"1092":1,"1101":1,"1212":1,"1229":2,"1237":1,"1239":1,"1241":1,"1247":1,"1252":1,"1253":1,"1255":1,"1259":8,"1270":3,"1271":3,"1273":1,"1275":1,"1286":8,"1300":12,"1301":4,"1309":3,"1310":1,"1311":10,"1312":2,"1313":1,"1318":1,"1320":1,"1323":8,"1324":19,"1331":1,"1332":1,"1339":5,"1350":1,"1352":1,"1353":2,"1359":18,"1369":2,"1380":2,"1388":1,"1395":11,"1396":7,"1402":3,"1415":6,"1417":1,"1422":1,"1426":1,"1427":2,"1428":1,"1432":1,"1436":14,"1443":1,"1447":1,"1455":6,"1457":1,"1461":1,"1467":2,"1473":1,"1478":1,"1489":2,"1496":3,"1631":1,"1641":2,"1686":1,"1700":1,"1727":2,"1735":1,"1822":1,"1823":1,"1835":1,"1854":1,"1863":1,"1908":1,"1927":1,"1941":1,"1963":1,"2030":1,"2046":1,"2160":1,"2167":1,"2176":1,"2178":1,"2200":1,"2234":1}}],["mapget",{"3":{"1324":1}}],["mapgrpcservice",{"2":{"103":1,"179":1},"3":{"103":1,"179":1,"1311":2,"1312":1,"1380":4,"1415":1,"2001":1}}],["maphub",{"3":{"1311":1}}],["maphealthchecks",{"3":{"235":1,"1332":1,"1339":4}}],["mapformat",{"3":{"1311":5}}],["mapforwarder",{"2":{"57":1,"59":1,"836":1,"837":1,"840":1,"1509":1},"3":{"0":2,"57":1,"59":1,"836":1,"837":2,"838":1,"840":1,"1212":1,"1436":1,"1447":1,"1509":1,"2025":1}}],["maptype",{"3":{"1311":5}}],["maptoapiversion",{"3":{"448":2,"1311":4,"1380":1,"2133":2}}],["maptodtogenerated",{"3":{"1350":1,"1359":3}}],["maptodto",{"2":{"5":1,"6":1,"1953":1,"1956":1},"3":{"5":4,"6":1,"1270":1,"1309":3,"1311":3,"1350":3,"1359":51,"1396":5,"1402":5,"1415":3,"1953":2,"1956":1}}],["maptodtos",{"2":{"5":1,"7":1,"331":1,"1953":1},"3":{"5":2,"7":1,"331":1,"1244":1,"1309":2,"1311":2,"1359":20,"1396":3,"1402":1,"1415":1,"1953":1}}],["mapopenapi",{"2":{"2134":1},"3":{"454":1,"1311":2,"1591":1,"2134":1}}],["mapoidcdiscoveryendpoint",{"2":{"31":1,"751":1,"1667":1},"3":{"31":1,"751":1,"1311":1,"1667":1}}],["mapcontrollers",{"3":{"1311":1}}],["mapcommonscalarui",{"2":{"1929":1},"3":{"1311":2,"1496":1,"1577":2,"1929":1}}],["mapcommonsameoriginapiproxy",{"2":{"1184":1,"2152":1},"3":{"0":1,"1184":1,"1212":1,"1324":5,"2152":1}}],["mapcommonopenapiauthorizationtests",{"3":{"1199":1,"1207":2,"1311":2,"1438":1}}],["mapcommonopenapi",{"2":{"446":1,"453":1,"454":2,"1929":1,"2134":1},"3":{"446":1,"448":1,"450":1,"453":1,"454":3,"1311":4,"1438":1,"1577":3,"1929":2,"2134":1}}],["mapchild",{"3":{"1265":1,"1270":3,"1359":9}}],["mapclientconfigendpoint",{"2":{"674":1},"3":{"674":1,"1324":8,"1526":1}}],["mapcultureendpoint",{"2":{"415":1},"3":{"265":1,"415":1,"1311":4,"1324":1,"1591":1,"1653":1,"1666":1}}],["mapcachedhealthchecks",{"2":{"233":1,"235":1,"238":1,"1332":1,"2008":1},"3":{"233":1,"235":1,"238":1,"1332":1,"1339":7,"2008":1}}],["mapnotificationhub",{"3":{"225":2,"1307":1,"1309":1,"1311":2,"1666":1}}],["mapasync",{"3":{"109":1,"1220":1,"1229":2,"1805":1}}],["mapappassociationendpoints",{"2":{"418":1,"423":1,"424":1,"425":1,"426":1,"428":1,"1481":1,"1666":1},"3":{"0":1,"418":1,"423":1,"424":1,"425":1,"426":1,"428":1,"429":1,"1311":1,"1481":1,"1666":1}}],["mapjwksendpoint",{"3":{"31":1,"827":1,"1311":1,"1667":1}}],["mapdefaultendpoints",{"0":{"2008":1},"2":{"235":1,"464":1,"913":1,"1331":1,"1332":1,"1677":1,"1720":1,"1727":1,"2008":1,"2015":1},"3":{"0":1,"235":1,"464":1,"913":1,"1212":1,"1331":1,"1332":1,"1338":1,"1339":10,"1442":1,"1443":2,"1447":1,"1653":1,"1670":1,"1677":1,"1720":1,"1727":1,"2008":1,"2015":1}}],["mapregistry",{"3":{"1199":2,"1207":1}}],["mapreverseproxy",{"2":{"59":1,"836":1,"838":1,"841":1,"1509":1},"3":{"0":1,"59":1,"827":1,"836":1,"838":1,"841":1,"1338":1,"1339":1,"1436":1,"1447":1,"1509":1}}],["maprazorcomponents",{"2":{"647":1,"1434":1},"3":{"0":1,"556":1,"647":1,"649":1,"1311":1,"1324":1,"1416":1,"1434":1,"1436":2}}],["mapssearchurl",{"3":{"1417":1}}],["mapspeakersessions",{"3":{"1359":1}}],["mapscalarapireference",{"3":{"1311":1}}],["mapsearchurl",{"3":{"1395":2}}],["mapsessionizequestiontype",{"3":{"1359":2}}],["mapsessioncookieendpoints",{"2":{"1667":1,"1968":1},"3":{"1300":2,"1667":1,"1968":1}}],["mapsentity",{"3":{"1286":1}}],["mapstaticassets",{"3":{"1436":1}}],["mapstatustostring",{"3":{"1270":1,"1309":3}}],["mapstoaprovisionedalert",{"2":{"609":1},"3":{"609":2,"1436":2}}],["mapster",{"3":{"3":1,"4":1}}],["maps",{"0":{"1831":1},"1":{"1502":1,"1503":1,"1504":1,"1505":1,"1506":1,"1507":1,"1508":1,"1509":1,"1510":1,"1511":1,"1512":1,"1513":1,"1514":1,"1515":1,"1516":1,"1517":1},"3":{"0":7,"5":1,"53":1,"60":1,"78":1,"95":1,"107":1,"109":7,"170":2,"186":3,"225":1,"235":2,"265":1,"282":1,"318":2,"324":1,"330":1,"341":1,"365":1,"405":1,"449":1,"454":2,"548":1,"585":1,"626":1,"655":1,"657":5,"660":2,"674":1,"707":1,"710":1,"713":1,"733":1,"751":1,"827":1,"838":1,"845":1,"854":1,"869":1,"905":2,"921":1,"1020":1,"1033":1,"1034":1,"1050":3,"1059":1,"1061":1,"1161":1,"1180":1,"1184":1,"1191":1,"1194":1,"1212":1,"1217":1,"1219":1,"1229":3,"1237":5,"1245":1,"1247":6,"1263":2,"1265":2,"1269":1,"1270":5,"1271":3,"1273":2,"1277":1,"1279":1,"1280":1,"1281":1,"1283":3,"1284":1,"1286":42,"1296":1,"1297":2,"1300":13,"1306":1,"1307":2,"1309":9,"1311":24,"1312":7,"1316":1,"1323":6,"1324":25,"1331":1,"1332":1,"1335":1,"1339":13,"1350":9,"1352":1,"1354":4,"1359":36,"1362":2,"1369":4,"1372":1,"1374":2,"1380":13,"1390":1,"1391":5,"1395":24,"1396":29,"1400":1,"1402":8,"1405":1,"1406":1,"1408":1,"1412":1,"1413":1,"1415":13,"1416":2,"1417":26,"1427":1,"1435":1,"1436":35,"1438":2,"1441":1,"1442":1,"1443":1,"1444":1,"1446":1,"1466":1,"1467":1,"1489":1,"1496":14,"1502":1,"1509":1,"1582":1,"1589":1,"1591":2,"1596":1,"1600":1,"1620":1,"1631":1,"1632":1,"1636":2,"1651":1,"1658":1,"1662":1,"1663":2,"1665":1,"1666":1,"1667":1,"1670":1,"1677":1,"1681":1,"1685":1,"1700":1,"1702":3,"1729":1,"1749":1,"1753":1,"1756":1,"1770":1,"1790":2,"1805":1,"1807":1,"1821":1,"1834":1,"1849":1,"1861":1,"1871":1,"1876":1,"1889":2,"1930":1,"1933":1,"1946":2,"1951":1,"1952":1,"1953":2,"1954":2,"1959":2,"1961":2,"1962":1,"1963":1,"1965":1,"1988":1,"1996":2,"2043":1,"2074":1,"2089":1,"2117":1,"2134":1,"2152":2,"2169":1,"2201":1,"2205":1,"2234":1,"2236":1}}],["map",{"0":{"1409":1,"1517":1,"1654":1,"1660":1},"2":{"80":1,"82":1,"973":1,"1224":1,"1951":1},"3":{"0":7,"26":1,"41":1,"54":1,"57":2,"59":1,"80":3,"81":1,"82":2,"109":1,"111":1,"135":4,"166":2,"184":3,"186":3,"305":1,"333":2,"341":1,"350":1,"359":1,"380":3,"413":1,"546":1,"549":1,"583":1,"585":1,"599":1,"631":2,"632":1,"633":1,"635":1,"659":1,"698":2,"749":1,"751":1,"826":1,"827":1,"833":1,"836":3,"838":1,"840":2,"842":3,"846":2,"905":1,"926":1,"964":1,"972":3,"973":1,"1004":2,"1011":2,"1054":1,"1058":1,"1059":1,"1133":2,"1161":6,"1162":1,"1168":1,"1188":1,"1190":1,"1196":1,"1212":2,"1220":1,"1224":1,"1225":1,"1229":5,"1236":1,"1237":3,"1239":1,"1241":3,"1242":7,"1243":1,"1247":17,"1265":3,"1269":1,"1270":11,"1279":1,"1282":1,"1286":15,"1291":1,"1297":1,"1300":13,"1301":1,"1304":3,"1309":4,"1311":10,"1312":4,"1320":1,"1321":1,"1323":13,"1324":8,"1339":3,"1341":1,"1348":4,"1350":4,"1351":1,"1352":1,"1354":1,"1357":1,"1359":50,"1362":1,"1364":1,"1369":22,"1377":1,"1378":1,"1380":8,"1385":3,"1387":2,"1391":1,"1395":25,"1396":42,"1400":2,"1402":2,"1404":1,"1406":1,"1409":7,"1414":1,"1415":12,"1416":1,"1417":7,"1428":2,"1431":5,"1436":516,"1438":4,"1445":1,"1455":5,"1467":2,"1469":1,"1487":1,"1489":11,"1492":1,"1493":1,"1496":6,"1509":1,"1515":2,"1525":1,"1526":6,"1531":1,"1535":1,"1571":1,"1572":1,"1577":4,"1582":1,"1585":1,"1586":1,"1600":1,"1621":1,"1626":3,"1627":1,"1629":1,"1630":1,"1636":1,"1649":1,"1650":1,"1654":5,"1660":1,"1661":2,"1662":2,"1669":1,"1671":1,"1673":2,"1675":1,"1700":1,"1701":2,"1702":2,"1728":3,"1729":1,"1730":1,"1735":2,"1760":1,"1765":1,"1782":1,"1790":1,"1805":1,"1807":1,"1810":1,"1815":2,"1817":1,"1834":1,"1840":1,"1849":1,"1883":1,"1891":1,"1894":1,"1929":2,"1930":1,"1935":1,"1944":1,"1946":1,"1951":1,"1952":3,"1953":1,"1955":1,"1956":3,"1958":2,"1959":2,"1962":4,"1964":1,"1965":1,"1968":1,"1990":1,"1991":1,"1992":2,"2019":1,"2024":1,"2043":2,"2044":4,"2050":1,"2099":3,"2100":1,"2103":1,"2105":1,"2106":4,"2113":1,"2122":1,"2131":1,"2144":1,"2180":1,"2199":2,"2201":1,"2206":2,"2238":1}}],["mapproperty",{"2":{"1957":1},"3":{"1309":2,"1359":4,"1957":1}}],["mappedadminport",{"3":{"1436":1}}],["mappedentityqueryservice",{"3":{"1199":2,"1207":1}}],["mappedorder",{"3":{"1199":4,"1207":1}}],["mappedorderid",{"3":{"1199":5,"1207":1}}],["mappeddto",{"3":{"1199":2,"1207":1}}],["mapped",{"3":{"0":5,"4":1,"15":1,"31":1,"59":1,"96":1,"110":1,"111":1,"225":1,"303":1,"335":2,"341":1,"343":1,"345":1,"415":2,"448":3,"453":1,"454":1,"545":2,"549":1,"583":1,"585":2,"640":1,"657":4,"682":1,"698":1,"702":1,"703":1,"749":1,"751":1,"929":1,"932":1,"935":2,"1011":1,"1042":1,"1046":1,"1089":1,"1094":1,"1132":1,"1133":2,"1140":1,"1150":1,"1212":1,"1218":1,"1234":1,"1237":1,"1247":4,"1253":1,"1269":1,"1270":4,"1271":2,"1273":3,"1277":1,"1278":1,"1283":1,"1286":18,"1288":2,"1297":1,"1300":12,"1304":1,"1307":2,"1309":10,"1311":12,"1312":2,"1316":1,"1318":1,"1320":1,"1323":9,"1324":5,"1332":1,"1339":7,"1350":19,"1359":18,"1362":1,"1363":1,"1369":4,"1380":3,"1395":3,"1396":16,"1402":5,"1405":1,"1415":11,"1417":2,"1436":12,"1447":1,"1455":2,"1467":1,"1477":2,"1486":1,"1489":3,"1496":5,"1577":2,"1600":1,"1632":1,"1685":1,"1720":1,"1804":1,"1815":2,"1839":1,"1842":1,"1875":1,"1876":1,"1889":1,"1896":1,"1908":1,"1990":1,"2001":1,"2021":1,"2026":1,"2044":1,"2133":2,"2140":1}}],["mapperignoretarget",{"3":{"1359":2}}],["mapper",{"0":{"1954":1,"1956":1},"2":{"1957":1,"1958":1},"3":{"3":1,"5":2,"6":2,"7":2,"333":1,"423":1,"424":1,"549":2,"657":1,"798":1,"806":1,"1026":1,"1050":1,"1201":1,"1212":1,"1213":1,"1220":1,"1229":1,"1241":1,"1243":1,"1244":2,"1247":3,"1260":1,"1265":2,"1269":2,"1270":14,"1283":1,"1300":5,"1309":18,"1311":13,"1324":3,"1350":11,"1352":1,"1353":4,"1354":2,"1359":163,"1369":1,"1375":1,"1380":3,"1396":13,"1401":1,"1402":8,"1415":8,"1436":2,"1438":2,"1481":1,"1487":1,"1526":1,"1532":1,"1546":1,"1651":1,"1653":1,"1727":1,"1805":1,"1810":1,"1831":1,"1849":1,"1951":4,"1952":1,"1953":3,"1954":6,"1955":7,"1956":4,"1957":3,"1958":7,"1959":4,"2232":1}}],["mappers",{"3":{"0":1,"3":4,"5":2,"6":1,"7":1,"117":1,"473":1,"548":1,"1262":2,"1269":2,"1270":4,"1311":4,"1316":2,"1323":2,"1350":1,"1351":1,"1353":2,"1359":23,"1396":6,"1404":1,"1415":3,"1437":2,"1438":3,"1496":1,"1526":1,"1650":1,"1651":1,"1661":1,"1662":3,"1686":1,"1701":1,"1775":1,"1857":1,"1883":3,"1951":1,"1953":2,"1956":3,"1957":2,"2053":1,"2097":1,"2234":1}}],["mapperly",{"0":{"1955":1},"3":{"0":3,"3":1,"5":2,"548":1,"549":1,"1050":4,"1051":1,"1212":1,"1213":2,"1270":3,"1300":2,"1306":1,"1309":11,"1347":1,"1350":7,"1353":1,"1357":1,"1359":48,"1396":11,"1401":1,"1402":6,"1404":1,"1415":7,"1438":1,"1650":1,"1651":1,"1662":1,"1810":1,"1955":6,"1956":1,"1957":1,"1958":1,"1959":2}}],["mappings",{"3":{"104":1,"658":1,"1309":1,"1362":1,"1395":1,"1774":1,"1856":1}}],["mapping",{"0":{"1281":1,"1353":1,"1927":1,"1952":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"1311":1,"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1956":1,"1957":1,"1958":1,"1959":1},"2":{"1247":1,"1270":1},"3":{"0":7,"2":1,"3":1,"4":2,"6":5,"7":1,"26":1,"53":1,"92":1,"104":1,"109":1,"111":1,"151":1,"166":1,"185":1,"186":1,"188":1,"238":1,"265":1,"331":1,"334":1,"360":1,"369":1,"370":2,"371":1,"372":1,"420":1,"454":1,"470":1,"545":1,"549":2,"559":1,"572":1,"583":1,"657":1,"658":2,"659":1,"690":1,"707":1,"734":1,"741":1,"742":1,"749":1,"782":1,"790":1,"791":2,"799":2,"806":1,"833":1,"838":1,"846":1,"872":1,"874":1,"905":2,"906":2,"910":1,"922":1,"925":1,"964":1,"1011":1,"1018":1,"1026":1,"1034":3,"1042":1,"1049":2,"1050":2,"1051":4,"1052":1,"1069":1,"1175":3,"1192":3,"1202":4,"1203":10,"1207":26,"1212":1,"1213":3,"1224":1,"1225":2,"1229":3,"1237":2,"1238":1,"1244":2,"1245":1,"1247":10,"1265":1,"1269":2,"1270":12,"1271":4,"1273":2,"1280":1,"1281":1,"1282":4,"1283":2,"1286":56,"1290":1,"1300":22,"1304":1,"1307":1,"1309":10,"1310":1,"1311":45,"1312":6,"1317":1,"1323":3,"1324":12,"1332":2,"1339":3,"1347":1,"1350":4,"1353":3,"1359":64,"1360":1,"1365":1,"1366":1,"1369":17,"1370":1,"1375":1,"1378":1,"1380":19,"1395":15,"1396":44,"1401":1,"1402":11,"1404":1,"1409":1,"1411":1,"1414":1,"1415":16,"1416":3,"1417":3,"1436":14,"1437":2,"1438":3,"1441":1,"1443":1,"1450":1,"1453":1,"1455":1,"1461":1,"1487":1,"1488":2,"1489":1,"1496":3,"1498":1,"1526":1,"1546":1,"1571":1,"1577":1,"1585":1,"1600":1,"1651":1,"1662":2,"1666":1,"1673":1,"1686":1,"1779":1,"1805":2,"1807":1,"1810":3,"1825":1,"1831":1,"1854":1,"1856":2,"1862":1,"1877":1,"1923":1,"1924":2,"1925":1,"1927":1,"1929":1,"1930":2,"1935":1,"1950":1,"1951":4,"1952":4,"1953":2,"1954":2,"1955":4,"1956":2,"1957":1,"1958":2,"1959":9,"1960":1,"1962":2,"1964":1,"1965":1,"1988":1,"1992":1,"2019":1,"2026":1,"2056":1,"2061":1,"2139":1,"2148":1,"2168":1,"2169":1,"2194":1,"2210":2,"2234":1}}],["md5",{"3":{"1905":1}}],["md",{"0":{"1474":1,"1476":1,"1477":1,"1478":1,"1481":1},"2":{"137":1,"138":1,"140":1,"146":1,"147":1,"164":1,"375":1,"607":1,"609":1,"636":2,"971":1,"972":1,"974":1,"975":1,"1003":2,"1004":1,"1058":1,"1190":1,"1451":1,"1457":1,"1458":1,"1465":1,"1467":1,"1476":1,"1483":1,"1515":1,"1522":2,"1529":1,"1571":1,"1573":2,"1574":1,"1575":2,"1577":1,"1587":2,"1589":1,"1594":1,"1595":1,"1605":1,"1658":2,"1673":2,"1674":5,"1675":1,"1697":1,"1756":1,"2046":1,"2050":2,"2061":1,"2114":1,"2197":1},"3":{"0":12,"1":5,"27":1,"68":1,"130":4,"135":6,"136":3,"137":8,"138":4,"139":4,"140":5,"141":2,"142":4,"146":1,"147":5,"152":1,"164":1,"313":1,"317":1,"321":1,"324":1,"326":2,"358":2,"361":1,"362":2,"365":1,"366":2,"369":4,"371":1,"375":2,"376":3,"398":1,"406":1,"422":1,"423":1,"424":1,"425":1,"426":2,"435":1,"443":1,"469":1,"483":1,"490":1,"491":1,"492":1,"493":1,"495":1,"497":1,"502":1,"526":2,"527":1,"528":2,"531":1,"532":1,"550":1,"555":6,"556":1,"557":1,"558":2,"563":2,"564":7,"571":2,"577":1,"579":1,"582":1,"590":2,"591":3,"593":1,"594":3,"598":2,"599":1,"601":2,"605":1,"607":5,"608":1,"609":16,"611":6,"612":1,"614":1,"617":1,"618":1,"620":1,"621":1,"622":1,"626":5,"632":2,"633":5,"634":2,"636":4,"657":1,"660":1,"748":3,"756":4,"761":1,"765":1,"766":2,"773":2,"825":1,"827":1,"832":1,"857":1,"860":1,"861":1,"864":2,"892":1,"893":1,"896":5,"897":1,"899":1,"904":1,"914":2,"917":1,"937":1,"946":1,"950":1,"953":2,"954":1,"955":1,"959":1,"960":1,"971":4,"972":5,"974":1,"975":2,"987":2,"990":1,"991":1,"1003":5,"1004":8,"1006":2,"1007":5,"1011":1,"1012":3,"1017":1,"1018":5,"1058":2,"1062":1,"1069":1,"1089":1,"1090":2,"1091":1,"1092":1,"1093":3,"1094":2,"1095":5,"1116":1,"1119":1,"1124":2,"1127":1,"1128":1,"1132":2,"1136":1,"1137":1,"1160":2,"1164":1,"1171":1,"1180":1,"1182":1,"1186":3,"1188":1,"1189":1,"1190":2,"1191":4,"1192":11,"1193":2,"1200":3,"1201":1,"1202":28,"1203":28,"1211":2,"1212":5,"1214":1,"1216":5,"1237":4,"1270":3,"1286":8,"1300":17,"1301":7,"1304":2,"1308":1,"1309":4,"1311":1,"1323":1,"1324":22,"1339":3,"1347":1,"1350":4,"1355":1,"1359":22,"1380":20,"1395":11,"1396":11,"1402":2,"1403":1,"1405":1,"1410":2,"1411":1,"1415":6,"1416":2,"1417":4,"1427":1,"1428":2,"1430":2,"1431":4,"1436":48,"1438":1,"1440":1,"1451":2,"1453":7,"1454":3,"1455":1,"1457":2,"1458":1,"1459":3,"1462":1,"1465":1,"1466":4,"1467":22,"1470":6,"1471":4,"1472":1,"1473":1,"1474":37,"1475":1,"1476":32,"1477":12,"1478":5,"1479":1,"1480":2,"1481":17,"1482":9,"1483":10,"1484":4,"1485":2,"1486":3,"1487":2,"1488":1,"1489":6,"1492":6,"1494":4,"1496":48,"1497":2,"1498":1,"1501":3,"1502":5,"1503":1,"1515":1,"1517":5,"1521":1,"1522":4,"1524":3,"1525":4,"1526":50,"1527":1,"1528":1,"1529":1,"1531":5,"1532":1,"1533":1,"1534":3,"1535":5,"1571":1,"1573":3,"1574":1,"1575":4,"1576":3,"1577":72,"1578":1,"1579":1,"1582":11,"1583":1,"1585":6,"1586":13,"1587":4,"1589":6,"1590":1,"1591":32,"1593":1,"1594":3,"1595":1,"1596":9,"1597":3,"1598":3,"1599":1,"1600":4,"1605":1,"1617":1,"1631":1,"1646":1,"1648":1,"1649":2,"1654":1,"1658":3,"1673":2,"1674":5,"1675":2,"1692":1,"1697":1,"1706":1,"1709":1,"1732":1,"1734":1,"1735":1,"1756":1,"1765":1,"1838":1,"1895":1,"1995":1,"2001":3,"2002":3,"2034":1,"2035":1,"2042":1,"2043":1,"2044":1,"2046":1,"2047":2,"2050":2,"2061":1,"2114":2,"2119":1,"2120":1,"2122":1,"2128":2,"2129":1,"2153":1,"2157":1,"2160":1,"2164":1,"2173":2,"2174":2,"2180":1,"2181":5,"2184":2,"2197":3,"2241":2}}],["cmd",{"2":{"1606":1,"1740":1},"3":{"1606":1,"1740":1}}],["cms",{"3":{"1395":1}}],["ck",{"2":{"1591":1},"3":{"1591":1}}],["c4adff2",{"2":{"1761":1},"3":{"1591":1,"1761":1}}],["c4",{"3":{"1571":1}}],["cwv",{"3":{"1526":1,"1531":1,"1600":3}}],["c64b9fe2",{"3":{"1496":1}}],["c6369020",{"3":{"1472":1}}],["c911480",{"3":{"1496":2}}],["cyan",{"3":{"1480":3}}],["cyclic",{"3":{"1259":1,"1286":1}}],["cyclomatic",{"3":{"1237":1,"1247":1,"1312":1,"1359":1}}],["cyclonedx",{"2":{"373":1},"3":{"0":1,"370":4,"371":1,"372":1,"373":1,"374":1,"375":2,"870":1,"1445":1,"1454":4,"1455":1,"1526":1,"1576":1,"1577":5,"1673":1,"1738":1}}],["cyclefixtures",{"2":{"1436":1},"3":{"1207":8,"1436":15}}],["cycletestmap",{"3":{"1198":1,"1199":2,"1207":1,"1436":5,"1496":1}}],["cycles",{"0":{"1198":1},"2":{"135":1},"3":{"0":1,"19":1,"130":1,"135":3,"136":1,"139":1,"627":1,"1011":1,"1191":1,"1192":1,"1196":1,"1201":3,"1207":1,"1259":1,"1270":1,"1275":2,"1286":1,"1300":1,"1323":1,"1324":1,"1339":1,"1431":1,"1436":12,"1438":1,"1489":1,"1496":24,"1498":5,"1517":2,"1638":1,"1639":1,"1665":1,"1804":1,"1867":1,"1885":1,"1886":1}}],["cycle",{"0":{"139":1},"3":{"0":3,"17":1,"19":1,"22":1,"24":5,"26":2,"27":3,"99":1,"125":1,"130":1,"135":5,"139":1,"140":1,"534":1,"536":6,"539":2,"556":1,"583":2,"707":5,"846":1,"861":1,"876":1,"1012":1,"1014":1,"1017":1,"1036":2,"1085":1,"1089":2,"1090":1,"1201":2,"1212":1,"1229":1,"1237":8,"1247":4,"1251":1,"1253":2,"1254":4,"1255":2,"1256":1,"1259":27,"1269":1,"1270":2,"1275":6,"1286":17,"1309":1,"1315":1,"1317":4,"1323":27,"1324":5,"1328":2,"1330":1,"1339":6,"1350":2,"1359":2,"1369":1,"1395":3,"1409":1,"1415":1,"1416":2,"1417":1,"1431":1,"1436":35,"1438":2,"1441":2,"1443":1,"1448":1,"1449":1,"1450":1,"1453":1,"1456":1,"1467":2,"1486":1,"1490":1,"1491":1,"1496":9,"1498":2,"1517":2,"1571":1,"1664":1,"1706":1,"1881":1,"1885":1,"1886":1,"1889":1,"1948":1,"2011":1,"2158":1,"2159":1,"2167":2,"2169":8,"2190":2,"2195":1}}],["cn=user",{"3":{"1416":1}}],["c50d86f",{"3":{"1496":1}}],["c5",{"3":{"1355":1,"1359":1,"1641":1}}],["cbc",{"3":{"1286":1}}],["c2y6ydjf5",{"3":{"1286":1}}],["cjk",{"3":{"1271":1,"1289":1,"1300":1,"1324":1,"1436":4,"1438":1}}],["cpm",{"3":{"1214":1,"1591":2}}],["cpu",{"2":{"875":1},"3":{"31":1,"234":1,"361":1,"593":1,"869":1,"871":1,"875":5,"1300":1,"1334":1,"1339":4,"1443":2,"1467":9,"1534":1,"2001":1,"2008":1,"2012":1,"2147":1}}],["cdc",{"3":{"1526":1,"1545":1}}],["cd0026df",{"2":{"1204":1},"3":{"1204":1,"1496":1}}],["cd",{"1":{"1452":1,"1453":1,"1454":1,"1455":1,"1456":1,"1457":1,"1458":1,"1459":1,"1460":1,"1461":1},"3":{"1192":1,"1452":1,"1453":1,"1455":1,"1462":2,"1463":1,"1465":1,"1471":1,"1474":1,"1475":1,"1476":1,"1482":1,"1486":1,"1526":2,"1545":1,"1554":1,"1575":1,"1577":2,"1582":1,"1584":1,"1586":2,"1670":1,"1674":1,"2111":1,"2215":1,"2220":1,"2221":1,"2222":2}}],["cdn",{"3":{"441":1,"1116":1,"1311":2,"1415":1,"1467":1,"1481":1,"1666":1,"1973":1,"2077":1,"2129":1,"2152":4}}],["cf69cb8e",{"3":{"1496":3}}],["cfg",{"2":{"819":1},"3":{"640":2,"819":1,"1323":7}}],["cfbundleurltypes",{"2":{"420":1},"3":{"420":1}}],["ctrl",{"2":{"1606":1,"1740":1},"3":{"1606":1,"1740":1}}],["cts",{"3":{"1324":30,"1395":16,"1396":14,"1402":5,"1415":3,"1417":4,"1526":2,"1577":4}}],["ctor",{"3":{"1286":2,"1311":1,"1324":2,"1436":7,"1526":2,"1591":1}}],["ctorprobequeryhandler",{"3":{"1199":2,"1207":1}}],["ctorprobequery",{"3":{"1199":3,"1207":1}}],["ctorprobecommandhandler",{"3":{"1199":2,"1207":1}}],["ctorprobecommand",{"3":{"1199":3,"1207":1}}],["cte",{"3":{"1132":1,"1990":1}}],["ct",{"3":{"109":2,"434":1,"690":1,"819":1,"1212":1,"1259":3,"1270":3,"1286":6,"1300":6,"1323":9,"1324":28,"1359":2,"1380":4,"1395":60,"1396":23,"1436":9,"1919":1,"1944":1,"2033":1}}],["c→a",{"3":{"78":1,"1591":1,"1594":1,"1596":4,"1597":2,"1599":1}}],["c+",{"3":{"0":1,"1183":2,"1187":2}}],["c",{"0":{"1214":1},"1":{"977":1,"978":1,"979":1,"980":1,"981":1,"982":1,"983":1,"984":1,"1803":1,"1804":1,"1805":1,"1806":1,"1807":1},"3":{"0":3,"53":1,"142":1,"145":1,"147":1,"265":1,"274":1,"418":1,"543":1,"549":1,"692":1,"839":1,"840":1,"963":1,"964":2,"977":1,"979":2,"980":1,"1004":1,"1010":1,"1011":1,"1013":1,"1019":1,"1066":1,"1183":1,"1193":1,"1196":1,"1212":2,"1214":3,"1216":1,"1229":3,"1236":1,"1237":5,"1247":2,"1259":1,"1262":1,"1270":2,"1271":8,"1286":6,"1300":9,"1309":3,"1311":7,"1312":7,"1316":1,"1323":6,"1324":25,"1326":1,"1339":6,"1342":1,"1344":1,"1349":1,"1350":6,"1354":1,"1359":12,"1378":1,"1379":1,"1380":7,"1395":8,"1396":31,"1401":2,"1402":5,"1413":1,"1415":10,"1416":3,"1417":9,"1425":1,"1427":5,"1430":1,"1433":1,"1436":18,"1441":1,"1455":1,"1479":1,"1488":2,"1491":1,"1492":1,"1496":2,"1497":1,"1526":2,"1536":1,"1565":1,"1577":1,"1582":1,"1585":4,"1586":7,"1632":1,"1639":1,"1641":1,"1648":2,"1651":1,"1661":1,"1692":1,"1693":1,"1712":3,"1726":1,"1727":1,"1728":1,"1761":1,"1765":1,"1779":1,"1781":1,"1787":1,"1790":1,"1793":1,"1796":1,"1803":1,"1807":1,"1812":1,"1817":1,"1827":1,"1830":3,"1831":1,"1834":1,"1846":1,"1853":1,"1862":1,"1868":1,"1877":1,"1886":1,"1892":1,"1899":1,"1905":1,"1912":1,"1924":1,"1927":1,"1930":1,"1941":1,"1950":1,"1953":1,"1955":1,"1959":1,"1965":1,"1972":1,"1979":1,"1985":1,"1992":1,"1998":1,"2003":1,"2005":1,"2015":1,"2017":1,"2018":2,"2019":1,"2029":1,"2050":1,"2061":1,"2071":1,"2077":2,"2082":1,"2088":1,"2090":1,"2100":1,"2110":1,"2125":1,"2130":1,"2135":1,"2141":1,"2148":1,"2155":1,"2162":1,"2171":1,"2179":1,"2182":1,"2195":1,"2205":1,"2208":1,"2213":1,"2221":1,"2222":2,"2234":1}}],["cve",{"3":{"0":1,"370":1,"1445":1}}],["cs0103",{"2":{"1648":1},"3":{"1648":1}}],["cs0618",{"3":{"1417":1,"1436":1}}],["cs1591",{"3":{"1577":2,"1586":3,"1591":1}}],["cs8509",{"3":{"1436":1}}],["cs9113",{"3":{"1436":3}}],["cs9107",{"3":{"1259":1,"1286":3}}],["cswinrt1028",{"3":{"1417":1}}],["cswinrt1030",{"3":{"1417":2}}],["cswinrt",{"3":{"1417":2}}],["css3",{"3":{"2222":1}}],["css",{"2":{"2077":1,"2081":2},"3":{"954":1,"1300":1,"1324":13,"1395":1,"1432":1,"1436":17,"1438":1,"1489":2,"1524":2,"1526":12,"1531":2,"1532":1,"1534":2,"1535":1,"1557":1,"1565":1,"1577":11,"1582":6,"1583":2,"1586":1,"1591":7,"1595":1,"1596":2,"1597":2,"1600":4,"1712":3,"1714":1,"2075":1,"2077":9,"2081":4,"2152":2}}],["csrfheadervalue",{"3":{"1324":2}}],["csrfheadername",{"3":{"1324":1}}],["csrf",{"0":{"1969":1},"3":{"0":2,"207":1,"209":2,"1184":7,"1185":3,"1186":1,"1187":2,"1300":2,"1324":25,"1417":1,"1438":2,"1534":1,"1582":1,"1968":2,"1969":3,"1971":2,"1972":2}}],["cs",{"2":{"43":2,"63":1,"93":1,"95":1,"112":1,"115":3,"142":1,"145":4,"152":3,"171":2,"181":2,"203":1,"220":2,"254":1,"256":1,"258":1,"259":4,"337":5,"345":3,"354":2,"364":1,"378":1,"395":1,"409":1,"418":1,"424":1,"425":1,"428":2,"452":1,"453":1,"464":1,"465":1,"466":1,"514":2,"543":4,"545":1,"547":1,"552":7,"558":1,"559":1,"572":1,"597":1,"604":1,"618":1,"621":1,"638":1,"644":2,"649":1,"651":1,"652":1,"693":5,"720":2,"728":2,"736":1,"744":1,"747":3,"750":1,"752":1,"822":3,"832":2,"833":3,"841":1,"846":1,"849":1,"850":1,"883":1,"892":5,"916":1,"917":2,"929":1,"949":4,"960":1,"967":1,"975":2,"991":1,"999":1,"1029":4,"1050":3,"1062":1,"1074":6,"1078":2,"1128":3,"1133":1,"1135":1,"1214":1,"1262":2,"1300":1,"1311":2,"1329":2,"1444":2,"1445":1,"1453":2,"1497":2,"1532":1,"1535":4,"1577":1,"1582":2,"1586":1,"1591":2,"1596":1,"1597":1,"1619":1,"1684":1,"1685":1,"1686":1,"1689":1,"1767":8,"1829":1,"1878":1,"1885":1,"1895":2,"1902":1,"2012":1,"2031":1,"2150":1,"2161":8,"2169":2,"2190":1,"2192":1},"3":{"0":6,"15":2,"17":2,"19":5,"22":2,"23":1,"24":24,"25":5,"26":13,"27":23,"31":5,"34":1,"39":13,"42":2,"43":4,"53":1,"59":5,"60":1,"61":1,"62":1,"63":4,"68":4,"70":2,"71":4,"72":7,"73":4,"74":8,"79":1,"80":10,"81":6,"82":2,"93":6,"94":2,"95":15,"96":6,"98":5,"99":1,"100":2,"103":3,"104":2,"109":38,"110":3,"111":7,"112":4,"115":3,"117":12,"121":15,"122":15,"123":4,"125":7,"126":16,"127":2,"128":9,"135":9,"136":3,"138":1,"139":10,"142":6,"145":7,"147":3,"150":25,"152":4,"157":11,"159":2,"160":9,"161":12,"164":1,"166":14,"168":1,"170":5,"171":10,"175":2,"178":9,"179":7,"180":5,"181":4,"186":35,"188":1,"189":5,"190":6,"193":2,"195":9,"196":2,"198":3,"200":8,"201":9,"202":11,"203":6,"216":4,"217":3,"218":4,"219":7,"220":10,"225":11,"228":4,"230":12,"231":4,"235":25,"237":5,"238":3,"243":37,"245":15,"246":8,"250":6,"251":12,"252":15,"254":19,"255":7,"256":17,"257":16,"258":16,"259":15,"260":11,"261":19,"265":12,"268":7,"272":1,"281":1,"283":2,"284":2,"285":3,"290":1,"295":12,"296":1,"300":4,"301":1,"303":4,"305":8,"306":5,"310":30,"312":5,"314":8,"318":67,"319":4,"320":2,"323":7,"324":8,"325":8,"326":13,"328":1,"330":37,"331":8,"332":7,"333":5,"334":2,"336":3,"337":12,"341":23,"342":1,"343":5,"344":6,"345":9,"350":21,"352":7,"353":7,"354":2,"359":62,"360":8,"361":9,"364":1,"365":3,"378":1,"384":8,"387":2,"388":4,"390":10,"391":8,"392":4,"393":5,"395":2,"397":66,"399":6,"400":5,"401":15,"402":16,"403":1,"404":7,"407":12,"408":7,"409":6,"412":1,"413":12,"415":4,"416":1,"418":11,"419":1,"420":2,"422":2,"423":6,"424":3,"425":4,"426":6,"427":2,"428":9,"429":2,"430":2,"434":7,"435":3,"436":8,"442":1,"443":5,"444":9,"448":45,"450":3,"452":1,"453":7,"454":3,"455":1,"459":35,"461":5,"463":15,"464":17,"465":14,"466":8,"469":4,"470":17,"472":1,"474":1,"475":10,"476":14,"477":14,"478":2,"482":2,"486":6,"487":6,"488":5,"489":6,"490":6,"491":7,"492":8,"493":8,"494":6,"495":5,"497":12,"498":1,"499":45,"500":1,"501":5,"502":4,"507":63,"508":1,"509":1,"511":13,"512":1,"513":15,"514":8,"522":8,"523":8,"524":2,"535":1,"536":73,"537":1,"538":15,"539":14,"540":13,"543":11,"544":2,"545":44,"546":4,"547":6,"549":25,"550":9,"551":3,"552":21,"556":47,"558":4,"559":6,"564":8,"572":81,"574":2,"575":4,"577":10,"578":9,"583":60,"584":12,"585":28,"586":6,"587":1,"591":14,"592":3,"597":1,"599":4,"601":2,"603":3,"604":1,"609":7,"618":35,"620":3,"621":4,"622":1,"633":4,"635":1,"636":3,"638":1,"640":24,"642":5,"644":5,"649":28,"651":5,"652":4,"656":1,"657":72,"658":4,"659":6,"660":10,"665":8,"668":4,"669":3,"674":82,"675":3,"676":14,"677":11,"682":10,"684":2,"685":2,"690":40,"691":4,"692":3,"693":9,"697":1,"698":26,"700":4,"702":9,"703":7,"706":1,"707":15,"710":8,"715":7,"718":1,"719":1,"720":11,"724":8,"725":21,"727":3,"728":6,"732":1,"733":16,"736":12,"740":7,"741":31,"743":14,"744":6,"747":3,"749":48,"750":1,"751":12,"752":2,"774":28,"776":7,"777":6,"782":51,"783":1,"784":4,"789":5,"790":20,"791":4,"792":10,"793":6,"794":4,"798":12,"799":5,"801":3,"803":5,"804":3,"805":2,"806":4,"809":6,"813":6,"814":8,"818":1,"819":21,"821":3,"822":7,"826":5,"827":47,"829":6,"830":9,"831":15,"832":21,"833":15,"837":6,"838":10,"839":2,"841":4,"846":5,"847":1,"849":4,"850":4,"854":5,"857":4,"861":11,"862":4,"863":4,"864":3,"880":1,"881":60,"883":8,"884":4,"888":3,"889":20,"890":5,"891":8,"892":10,"897":34,"899":3,"900":8,"904":1,"905":55,"906":18,"907":15,"908":5,"909":11,"910":2,"913":5,"914":15,"915":2,"916":3,"917":2,"921":3,"922":11,"923":5,"924":4,"926":29,"927":8,"929":1,"930":1,"931":9,"934":3,"946":19,"948":5,"949":5,"954":21,"955":2,"956":1,"959":1,"960":7,"963":6,"964":12,"965":3,"966":7,"967":5,"971":2,"972":6,"973":1,"974":5,"975":4,"979":8,"980":71,"981":1,"982":10,"983":7,"987":6,"988":36,"990":3,"991":4,"995":4,"996":18,"997":2,"998":9,"999":4,"1003":1,"1004":20,"1005":2,"1006":4,"1007":3,"1017":2,"1018":38,"1020":3,"1021":9,"1025":5,"1026":29,"1028":2,"1029":9,"1034":19,"1037":5,"1041":4,"1042":20,"1043":1,"1044":4,"1045":6,"1049":5,"1050":25,"1052":3,"1054":2,"1055":9,"1058":4,"1059":56,"1061":1,"1062":3,"1066":4,"1067":20,"1069":5,"1070":3,"1074":22,"1075":1,"1078":3,"1082":11,"1083":7,"1085":2,"1086":9,"1090":3,"1091":64,"1092":5,"1093":13,"1094":5,"1095":7,"1099":2,"1100":17,"1102":2,"1103":5,"1108":15,"1111":6,"1116":37,"1117":2,"1119":4,"1123":8,"1124":37,"1125":7,"1126":6,"1127":2,"1128":6,"1129":2,"1132":1,"1133":17,"1135":3,"1136":3,"1140":11,"1142":1,"1146":2,"1150":13,"1156":3,"1160":2,"1161":8,"1162":4,"1163":4,"1168":32,"1169":1,"1170":3,"1174":1,"1175":39,"1176":6,"1177":7,"1178":3,"1179":2,"1183":4,"1184":36,"1185":6,"1186":7,"1187":1,"1188":1,"1190":1,"1191":6,"1204":1,"1207":5402,"1208":118,"1209":139,"1212":6,"1214":2,"1219":13,"1220":24,"1221":11,"1222":9,"1223":15,"1224":6,"1225":11,"1226":7,"1227":13,"1228":21,"1229":244,"1231":31,"1232":18,"1233":18,"1234":43,"1235":14,"1236":27,"1237":528,"1239":59,"1240":36,"1241":96,"1242":48,"1243":54,"1244":56,"1245":6,"1246":16,"1247":330,"1249":15,"1250":5,"1251":6,"1252":13,"1253":16,"1254":17,"1255":10,"1256":37,"1257":17,"1258":19,"1259":576,"1261":4,"1262":41,"1263":84,"1264":34,"1265":60,"1266":17,"1267":28,"1268":18,"1269":48,"1270":588,"1271":181,"1273":20,"1274":4,"1275":20,"1276":11,"1277":8,"1278":29,"1279":14,"1280":33,"1281":16,"1282":29,"1283":9,"1284":11,"1285":9,"1286":2431,"1288":35,"1289":49,"1290":61,"1291":19,"1292":21,"1293":52,"1294":47,"1295":30,"1296":18,"1297":100,"1298":38,"1299":9,"1300":1398,"1301":413,"1302":8,"1303":11,"1304":19,"1305":8,"1306":11,"1307":26,"1308":11,"1309":440,"1310":118,"1311":973,"1312":127,"1314":12,"1315":35,"1316":51,"1317":39,"1318":45,"1319":6,"1320":64,"1321":3,"1322":41,"1323":863,"1324":1359,"1325":7,"1326":14,"1327":12,"1328":6,"1329":5,"1330":5,"1331":5,"1332":34,"1333":20,"1334":14,"1335":6,"1336":7,"1337":6,"1338":13,"1339":404,"1341":3,"1342":78,"1343":42,"1344":46,"1345":8,"1346":6,"1347":47,"1348":19,"1349":25,"1350":995,"1352":49,"1353":38,"1354":15,"1355":17,"1356":12,"1357":14,"1358":11,"1359":3331,"1361":3,"1362":46,"1363":5,"1364":14,"1365":8,"1366":16,"1367":6,"1368":7,"1369":111,"1371":27,"1372":40,"1373":45,"1374":16,"1375":38,"1376":4,"1377":15,"1378":19,"1379":9,"1380":378,"1382":25,"1383":27,"1384":24,"1385":16,"1386":6,"1387":13,"1388":12,"1389":14,"1390":11,"1391":22,"1392":21,"1393":10,"1394":6,"1395":998,"1396":1539,"1397":5,"1398":26,"1399":44,"1400":13,"1401":22,"1402":504,"1403":1,"1404":22,"1405":13,"1406":32,"1407":6,"1408":8,"1409":11,"1410":13,"1411":7,"1412":7,"1413":12,"1414":13,"1415":821,"1416":211,"1417":1129,"1419":7,"1420":7,"1421":4,"1422":11,"1423":7,"1424":6,"1425":9,"1426":3,"1427":285,"1429":28,"1430":23,"1431":90,"1432":43,"1433":50,"1434":18,"1435":37,"1436":2192,"1437":40,"1438":400,"1440":2,"1441":95,"1442":40,"1443":111,"1444":39,"1445":1,"1446":2,"1447":39,"1448":4,"1449":25,"1450":8,"1451":3,"1453":2,"1455":4,"1467":18,"1476":11,"1481":1,"1487":1,"1488":69,"1489":36,"1490":6,"1491":3,"1492":27,"1496":341,"1497":4,"1498":2,"1524":6,"1525":8,"1526":227,"1531":20,"1532":16,"1534":10,"1535":55,"1575":3,"1576":11,"1577":247,"1582":29,"1583":10,"1584":1,"1585":7,"1586":66,"1589":5,"1590":5,"1591":148,"1596":22,"1597":9,"1599":6,"1600":57,"1605":1,"1611":3,"1619":6,"1627":2,"1651":2,"1653":5,"1654":1,"1656":2,"1684":2,"1685":25,"1686":35,"1689":1,"1697":1,"1707":5,"1708":1,"1712":1,"1727":1,"1728":2,"1739":1,"1749":1,"1757":1,"1760":2,"1761":2,"1764":19,"1765":30,"1767":83,"1770":2,"1815":1,"1829":2,"1878":1,"1885":1,"1895":2,"1896":1,"1902":1,"1939":1,"1953":1,"1982":45,"1983":4,"1984":5,"1995":45,"1996":44,"2001":42,"2002":13,"2007":1,"2009":1,"2012":1,"2031":1,"2033":2,"2044":1,"2045":7,"2047":3,"2065":3,"2066":2,"2068":13,"2085":12,"2087":11,"2099":3,"2119":9,"2120":8,"2121":4,"2123":3,"2124":3,"2128":19,"2129":10,"2133":23,"2134":3,"2138":18,"2139":6,"2140":14,"2145":1,"2150":1,"2151":7,"2152":10,"2153":8,"2154":4,"2158":35,"2159":13,"2161":15,"2163":1,"2165":9,"2166":10,"2167":12,"2168":6,"2169":15,"2170":6,"2174":11,"2175":2,"2176":6,"2177":17,"2178":5,"2179":3,"2180":1,"2181":11,"2186":3,"2187":6,"2188":4,"2189":2,"2190":8,"2191":3,"2192":6,"2193":2,"2194":3,"2198":1,"2199":4,"2200":3,"2201":7,"2203":2,"2204":11}}],["csvcontenttype",{"3":{"1311":1}}],["csvwritertests",{"3":{"1199":1,"1207":2,"1438":1}}],["csvwriter",{"2":{"741":1},"3":{"741":5,"743":1,"1199":3,"1203":1,"1207":2,"1311":25,"1438":1,"1496":1}}],["csvs",{"3":{"725":2}}],["csvhelper",{"3":{"0":1,"741":1,"1311":1}}],["csv",{"1":{"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1},"3":{"0":3,"318":3,"321":1,"324":1,"330":1,"696":1,"738":1,"740":5,"741":9,"742":2,"743":4,"744":1,"745":1,"1212":1,"1229":1,"1311":22,"1323":1,"1359":3,"1371":1,"1372":2,"1380":15,"1438":2,"1487":1,"1496":1,"1498":1,"1526":2,"1575":1,"1577":1,"1582":1,"1586":1,"1660":1,"1666":4,"1720":1,"1988":3,"1992":1,"1996":2,"1997":1,"1998":1,"2234":1}}],["cspoptions",{"3":{"1324":2}}],["cspnonce",{"2":{"2151":1},"3":{"214":1,"1199":3,"1203":1,"1207":1,"1336":1,"1339":6,"1443":1,"1526":1,"1577":2,"1670":1,"2151":2}}],["csppolicy",{"2":{"2012":1},"3":{"214":1,"1199":7,"1203":1,"1207":1,"1324":3,"1336":1,"1339":11,"2012":1,"2151":1}}],["csproj",{"2":{"152":1,"872":1,"1215":1,"1728":1,"2042":1},"3":{"0":1,"135":1,"147":1,"152":2,"265":1,"370":1,"375":1,"422":1,"426":1,"429":1,"430":1,"486":4,"487":1,"489":1,"490":1,"491":1,"492":1,"493":1,"526":1,"528":1,"572":2,"576":1,"591":2,"593":1,"609":2,"613":1,"665":1,"669":1,"826":2,"827":1,"861":1,"872":1,"876":4,"913":4,"914":1,"917":1,"939":1,"954":11,"956":4,"958":2,"960":2,"971":1,"972":1,"979":1,"1059":1,"1067":3,"1090":1,"1091":6,"1094":2,"1212":1,"1214":1,"1215":1,"1247":1,"1323":2,"1324":3,"1325":2,"1339":5,"1341":5,"1344":1,"1350":1,"1359":4,"1380":1,"1395":2,"1396":3,"1415":2,"1416":5,"1417":1,"1434":1,"1435":1,"1436":36,"1437":1,"1438":2,"1441":8,"1445":4,"1454":2,"1476":1,"1481":9,"1486":2,"1488":2,"1489":3,"1492":1,"1494":1,"1524":1,"1526":6,"1531":1,"1535":1,"1577":1,"1586":1,"1591":2,"1600":1,"1649":2,"1685":1,"1686":1,"1727":1,"1728":5,"2042":1,"2047":1,"2181":2}}],["csprng",{"3":{"0":1,"1212":1,"1300":5}}],["csp",{"0":{"2151":1},"1":{"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"2149":1,"2150":1,"2151":1,"2152":1,"2153":1,"2154":1,"2155":1},"3":{"0":4,"211":1,"213":1,"214":2,"215":1,"216":2,"672":1,"676":1,"1108":1,"1109":1,"1111":1,"1112":1,"1183":1,"1189":1,"1212":2,"1324":11,"1336":4,"1339":25,"1391":1,"1395":3,"1437":1,"1441":1,"1450":1,"1496":3,"1525":1,"1526":4,"1535":1,"1577":3,"1585":1,"1586":1,"1590":1,"1591":2,"1660":2,"1670":1,"1779":2,"2012":3,"2013":1,"2148":1,"2149":4,"2150":2,"2151":3,"2152":2,"2154":2,"2155":6,"2162":1,"2210":1,"2234":2}}],["csharp",{"2":{"136":1,"1214":2,"2045":1},"3":{"0":1,"136":2,"1213":1,"1214":2,"1436":3,"2045":2}}],["celebrated",{"3":{"2036":1}}],["celebration",{"3":{"1396":1}}],["cellclass=",{"3":{"1395":1,"1591":1}}],["celltemplate",{"3":{"1395":1}}],["cellstyle=",{"3":{"1526":1,"1534":1,"1591":1,"1600":1}}],["cells",{"3":{"1311":2,"1402":5,"1436":2}}],["cell",{"3":{"743":2,"1311":4,"1395":3,"1396":1,"1402":1,"1436":2,"1488":2,"1496":2,"1500":1,"1526":1,"1534":1,"1591":2,"1988":1}}],["cede",{"3":{"1079":1}}],["ceding",{"3":{"1078":1}}],["census",{"3":{"474":1,"475":1,"476":1,"797":4,"803":1,"804":1,"805":1,"806":1,"1048":1,"1049":1,"1051":1,"1054":1,"2234":3}}],["cents",{"3":{"1765":1,"1770":1}}],["centric",{"3":{"1359":1,"1436":1,"1540":1,"1577":1}}],["centre",{"3":{"1286":1,"1679":1}}],["centralising",{"3":{"1339":2}}],["centralised",{"3":{"1270":1,"1301":1,"1323":1,"1339":2}}],["centralizing",{"3":{"132":1,"215":1,"750":1,"1229":1,"1237":2,"1247":1,"1270":2,"1286":5,"1300":2,"1309":1,"1311":2,"1323":1,"1344":1,"1350":1,"1359":2,"1380":1,"1395":1,"1396":1,"1402":3,"1405":1,"1415":1,"1417":1,"1436":3,"2024":1,"2154":1}}],["centralize",{"3":{"1336":1,"2155":1}}],["centralizes",{"3":{"60":1,"1286":1,"1339":1,"1396":1,"1417":1,"1431":1,"1436":2,"2024":1,"2149":1}}],["centralized",{"1":{"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1},"3":{"0":2,"211":1,"283":1,"1117":1,"1237":2,"1270":1,"1286":1,"1292":1,"1300":2,"1301":1,"1309":1,"1311":3,"1323":1,"1324":5,"1339":2,"1350":1,"1359":3,"1380":1,"1394":1,"1395":2,"1396":4,"1402":1,"1415":1,"1433":1,"1526":2,"1548":1,"1557":1,"1575":1,"1576":1,"1577":4,"1591":1,"1805":1,"2155":1,"2197":1}}],["centralus",{"2":{"972":1},"3":{"972":1,"1436":3}}],["centrally",{"3":{"31":1,"665":1,"847":1,"1212":1,"1231":2,"1237":2,"1270":1,"1274":1,"1286":2,"1323":1,"1324":3,"1348":1,"1350":2,"1359":1,"1369":1,"1395":1,"1402":1,"1526":1,"1545":1,"1577":2,"1706":1,"1707":2,"1738":1,"1750":1,"1773":1,"1810":1,"1896":1,"2232":1}}],["central",{"3":{"0":2,"186":1,"201":1,"301":1,"465":1,"669":1,"715":1,"800":1,"938":1,"954":2,"956":1,"958":2,"959":2,"960":1,"972":1,"1213":1,"1214":1,"1229":1,"1247":1,"1260":1,"1286":1,"1300":1,"1311":1,"1323":3,"1324":2,"1339":1,"1350":1,"1359":1,"1369":1,"1395":2,"1402":1,"1415":1,"1416":2,"1430":1,"1436":7,"1449":1,"1460":1,"1465":1,"1467":2,"1489":1,"1490":1,"1526":1,"1535":1,"1552":1,"1569":2,"1577":1,"1591":1,"1649":1,"1663":1,"1685":1,"1686":1,"1706":1,"1707":1,"1852":1,"2044":2}}],["centers",{"3":{"2222":1}}],["centered",{"3":{"1480":1,"1669":1}}],["centerpiece",{"3":{"1324":1,"1396":1,"2074":1}}],["center",{"3":{"440":1,"1286":2,"1324":1,"1395":1,"1429":1,"1436":1,"1526":1,"1534":1,"1577":1,"1789":1,"2128":1,"2130":1}}],["ceil",{"2":{"435":1},"3":{"435":1}}],["ceilings",{"3":{"0":3,"591":3,"592":1,"593":2,"595":1,"859":1,"861":1,"862":1,"1125":2,"1126":1,"1212":1,"1323":1,"1359":2,"1416":2,"1431":1,"1436":19,"1438":1,"1492":1,"1534":1,"1535":1,"1577":3,"1588":1,"1591":1,"1597":1,"1599":2,"1668":1,"1673":1,"2048":1,"2049":1,"2234":1}}],["ceiling",{"3":{"0":15,"22":1,"48":1,"150":1,"177":1,"178":1,"233":1,"235":2,"237":3,"330":2,"337":1,"438":1,"442":1,"549":1,"575":1,"591":3,"593":1,"607":3,"609":6,"651":1,"733":3,"736":1,"741":4,"742":1,"743":1,"745":1,"760":1,"764":4,"765":1,"766":1,"768":1,"769":1,"792":1,"827":2,"829":1,"831":2,"832":4,"833":1,"860":1,"861":4,"862":2,"863":1,"997":1,"1016":3,"1018":5,"1019":2,"1020":1,"1042":2,"1067":1,"1074":2,"1075":1,"1076":1,"1090":2,"1092":2,"1094":2,"1095":1,"1096":1,"1099":1,"1100":1,"1122":1,"1124":5,"1125":1,"1126":2,"1128":1,"1129":1,"1186":1,"1212":2,"1228":1,"1229":4,"1238":1,"1243":3,"1244":1,"1247":15,"1270":1,"1271":4,"1275":1,"1286":5,"1289":2,"1297":1,"1300":6,"1301":6,"1306":1,"1309":4,"1310":1,"1311":9,"1312":1,"1323":6,"1324":30,"1334":1,"1339":12,"1350":3,"1359":15,"1366":2,"1368":1,"1369":2,"1371":1,"1380":7,"1395":4,"1396":11,"1415":7,"1416":6,"1417":1,"1418":2,"1420":1,"1422":1,"1427":4,"1436":68,"1438":1,"1447":1,"1455":1,"1463":1,"1465":5,"1467":12,"1469":1,"1470":1,"1489":5,"1492":3,"1496":4,"1526":6,"1534":3,"1577":6,"1582":2,"1583":1,"1584":1,"1586":1,"1591":2,"1597":1,"1599":1,"1664":1,"1666":2,"1668":1,"1670":1,"1671":1,"1707":4,"1708":2,"1817":1,"1923":1,"1929":1,"1987":1,"1988":2,"1992":2,"2001":7,"2002":2,"2003":3,"2028":1,"2047":1,"2048":1,"2049":1,"2128":2,"2147":1,"2156":1,"2160":1,"2176":1,"2182":3,"2184":1,"2190":2,"2192":1,"2234":1}}],["cero",{"3":{"1685":1,"1686":2}}],["ceremony",{"3":{"110":1,"111":1,"683":1,"938":1,"1109":1,"1220":1,"1237":1,"1259":1,"1286":1,"1309":1,"1323":2,"1324":1,"1340":1,"1342":1,"1350":2,"1359":4,"1392":1,"1395":1,"1396":7,"1415":5,"1417":3,"1436":1,"1637":1,"1806":1,"1808":1,"1811":1}}],["certification",{"3":{"2226":1}}],["certifications",{"0":{"2226":1},"3":{"2226":1}}],["certificates",{"3":{"1187":1,"1467":1}}],["certificate",{"3":{"0":1,"418":2,"420":1,"423":1,"424":1,"698":1,"1066":2,"1067":3,"1068":2,"1069":1,"1286":3,"1311":3,"1328":2,"1339":3,"1416":2,"1430":2,"1449":2,"1453":2,"1456":5,"1460":1,"1481":1,"1487":1,"1488":2,"1490":4,"1492":1}}],["certs",{"3":{"1067":1,"1069":1,"1430":1,"1456":1}}],["cert",{"2":{"418":1,"423":1,"424":1,"1481":1},"3":{"418":1,"423":1,"424":1,"1416":3,"1481":1}}],["certainly",{"3":{"1436":2,"1888":1}}],["certainty",{"3":{"1424":1,"1427":1}}],["certain",{"3":{"10":1,"1286":1,"1359":2,"1453":1,"1490":1,"2060":1}}],["cecil",{"3":{"0":1,"27":1,"39":1,"109":1,"1161":1,"1162":1,"1436":18,"2044":1}}],["cqrscontractinspectortests",{"3":{"1199":1,"1207":12,"1266":1,"1270":8,"1438":2}}],["cqrscontractinspector",{"2":{"1266":1,"1662":1},"3":{"1199":2,"1203":1,"1207":4,"1260":1,"1266":12,"1270":18,"1496":1,"1662":1}}],["cqrscontractmismatch",{"2":{"1266":1},"3":{"1199":3,"1203":1,"1207":1,"1260":1,"1266":1,"1270":6}}],["cqrscontractmismatchkind",{"2":{"1260":1,"1266":1},"3":{"1199":4,"1203":1,"1207":1,"1260":1,"1266":1,"1270":7}}],["cqrsmetricstests",{"3":{"1199":1,"1207":5,"1438":1}}],["cqrsmetricsprobequery",{"3":{"1199":2,"1207":1}}],["cqrsmetricsprobecommand",{"3":{"1199":2,"1207":1}}],["cqrsmetrics",{"2":{"126":1,"397":1,"405":1,"1268":1,"2161":1},"3":{"121":2,"126":2,"397":4,"399":1,"405":1,"1199":7,"1203":1,"1207":2,"1260":1,"1263":4,"1268":9,"1270":30,"1301":1,"1438":1,"1496":1,"2158":2,"2161":1}}],["cqrs",{"0":{"1507":1,"1543":1,"1937":1},"1":{"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"1260":1,"1261":1,"1262":1,"1263":1,"1264":1,"1265":1,"1266":1,"1267":1,"1268":1,"1269":1,"1270":1,"1818":1,"1819":1,"1820":1,"1821":1,"1822":1,"1823":1,"1824":1,"1825":1,"1826":1,"1827":1,"2136":1,"2137":1,"2138":1,"2139":1,"2140":1,"2141":1},"2":{"121":1,"124":1,"126":2,"400":1,"822":1,"823":1,"1268":3,"2007":1,"2014":1,"2158":1,"2162":1},"3":{"0":8,"17":2,"27":4,"77":1,"114":1,"117":1,"121":4,"124":1,"126":2,"127":2,"128":3,"135":3,"139":3,"142":2,"160":2,"186":1,"246":1,"258":1,"299":1,"300":2,"301":1,"306":1,"395":6,"396":1,"397":6,"398":2,"400":1,"404":1,"405":1,"406":1,"407":1,"408":1,"409":1,"545":4,"552":1,"572":2,"578":1,"608":1,"748":1,"819":1,"822":1,"823":1,"827":1,"897":2,"1003":1,"1004":1,"1006":2,"1042":1,"1058":1,"1059":1,"1075":1,"1132":1,"1133":3,"1191":1,"1192":2,"1194":1,"1200":1,"1202":3,"1203":3,"1207":101,"1211":1,"1212":4,"1213":1,"1216":1,"1218":1,"1223":1,"1229":2,"1231":1,"1237":4,"1238":1,"1245":1,"1246":1,"1247":5,"1249":1,"1259":23,"1260":3,"1262":1,"1268":3,"1270":37,"1271":4,"1286":15,"1297":1,"1300":12,"1301":5,"1302":1,"1303":1,"1304":1,"1309":22,"1311":20,"1315":1,"1316":3,"1323":19,"1324":6,"1333":1,"1339":2,"1345":1,"1350":32,"1351":1,"1352":1,"1355":1,"1359":53,"1370":2,"1371":1,"1380":8,"1390":1,"1395":2,"1396":33,"1402":32,"1403":1,"1409":1,"1413":1,"1415":30,"1417":1,"1431":17,"1436":255,"1437":2,"1438":1,"1443":1,"1455":1,"1487":1,"1488":1,"1489":2,"1496":6,"1499":1,"1505":1,"1526":2,"1534":1,"1535":2,"1536":1,"1543":1,"1577":9,"1582":2,"1583":2,"1584":1,"1586":2,"1590":1,"1591":4,"1597":1,"1646":1,"1659":1,"1660":1,"1662":1,"1666":1,"1670":1,"1675":1,"1692":1,"1717":1,"1720":1,"1779":2,"1780":2,"1781":1,"1784":1,"1786":1,"1796":1,"1803":1,"1817":1,"1818":2,"1827":3,"1828":1,"1840":1,"1879":1,"1888":1,"1914":1,"1932":1,"1941":1,"1947":1,"1962":3,"1965":1,"2007":1,"2011":1,"2014":1,"2053":1,"2100":1,"2113":1,"2117":1,"2135":2,"2136":1,"2139":2,"2141":1,"2148":1,"2156":2,"2158":10,"2162":2,"2164":1,"2183":1,"2184":1,"2201":1,"2206":1,"2208":2,"2215":2,"2217":1,"2219":1,"2220":1,"2221":1,"2223":1,"2229":3,"2232":1,"2234":3,"2241":2}}],["clutter",{"3":{"2011":1}}],["clustertraceheadername",{"3":{"1436":1}}],["clustertraceechoheader",{"3":{"1436":1}}],["clusterheader",{"3":{"1436":1}}],["clusterheadername",{"3":{"1339":1}}],["clusterconfig",{"3":{"1339":4}}],["clustered",{"3":{"1332":1,"1339":3,"1443":1,"1496":4,"1515":1,"1799":1}}],["clusterprofile",{"3":{"1199":2,"1207":1}}],["clusterid",{"3":{"838":1,"1338":1,"1339":5}}],["clustering",{"3":{"641":1,"1043":1,"1154":1,"1467":2}}],["clusterrequestoverrides",{"2":{"838":1,"1338":1,"1656":1},"3":{"838":2,"1338":1,"1339":3,"1447":1,"1656":1}}],["clusterrequestdefaults",{"2":{"836":1,"838":1,"1338":1,"1656":1},"3":{"0":1,"836":1,"838":3,"1338":1,"1339":5,"1438":1,"1447":1,"1656":1}}],["clusters",{"3":{"91":1,"827":1,"838":7,"839":1,"841":1,"1287":2,"1300":1,"1338":1,"1339":4,"1436":1,"1438":4,"1447":8,"1496":1,"1656":1,"1779":1}}],["cluster",{"0":{"1338":1},"2":{"234":1},"3":{"0":14,"57":1,"59":1,"91":2,"93":2,"98":4,"100":4,"102":1,"234":2,"235":3,"236":1,"245":1,"259":2,"520":1,"572":4,"578":3,"790":3,"827":10,"829":2,"833":2,"836":2,"838":21,"839":3,"840":2,"841":2,"842":1,"1152":1,"1212":1,"1237":2,"1247":1,"1259":1,"1267":1,"1270":3,"1286":1,"1290":1,"1298":2,"1301":4,"1312":1,"1323":3,"1325":2,"1332":1,"1338":10,"1339":61,"1347":1,"1350":1,"1356":2,"1359":1,"1436":12,"1438":11,"1442":1,"1443":1,"1446":1,"1447":17,"1455":1,"1488":1,"1496":3,"1656":7,"1660":1,"1663":2,"1765":1,"1917":1,"2022":1,"2025":1,"2026":4,"2056":3,"2222":1}}],["cleverness",{"3":{"1909":1}}],["clever",{"3":{"1790":1}}],["cleavestack",{"3":{"2228":1,"2236":2}}],["clearlinkedspeakerasync",{"2":{"1350":1},"3":{"1350":1}}],["clearlocalcacheasync",{"3":{"1324":3}}],["clearly",{"3":{"1259":1,"1280":1,"1286":1,"1324":1,"1339":1,"1417":1,"1436":1,"1727":1,"2130":1}}],["clearmobileitems",{"3":{"1324":1}}],["clearallpools",{"3":{"1490":1}}],["clearauthentication",{"3":{"1429":1,"1436":1,"1488":1}}],["clearasync",{"3":{"1324":9,"1417":9}}],["clearable",{"3":{"248":1,"1301":1}}],["cleardraft",{"3":{"1389":1,"1395":4}}],["cleardirty",{"3":{"1324":1}}],["cleardomainevents",{"2":{"1231":1},"3":{"1231":1,"1237":4,"1286":4,"1810":1}}],["clearest",{"3":{"799":1,"1231":1,"1270":3,"1278":1,"1309":1,"1310":1,"1311":1,"1324":4,"1329":1,"1339":2,"1348":1,"1350":1,"1359":5,"1373":1,"1389":1,"1395":9,"1396":3,"1402":1,"1410":1,"1417":2,"1431":1,"1455":1,"2044":1}}],["cleared",{"3":{"0":2,"21":1,"24":1,"26":1,"219":2,"512":1,"749":1,"751":1,"783":1,"989":1,"1014":1,"1066":1,"1124":1,"1127":1,"1185":1,"1259":1,"1263":1,"1274":2,"1286":4,"1298":1,"1300":1,"1311":3,"1318":1,"1323":4,"1324":9,"1338":1,"1339":2,"1350":3,"1355":1,"1359":4,"1389":1,"1390":1,"1395":20,"1396":3,"1402":2,"1415":7,"1417":1,"1427":1,"1433":1,"1438":1,"1635":1,"1638":2,"1639":2,"1641":1,"1673":1,"1748":2,"1749":1,"1754":1,"1765":1,"1840":1,"1923":1}}],["cleartokensasync",{"2":{"511":1},"3":{"511":1,"1324":6,"1417":2,"1436":2}}],["cleartextport",{"3":{"95":1,"1331":1,"1339":3,"1442":1}}],["cleartext",{"3":{"31":1,"33":1,"53":2,"55":1,"60":1,"61":1,"91":5,"92":3,"94":1,"96":1,"97":7,"98":6,"99":3,"100":3,"101":1,"102":1,"103":2,"235":2,"749":2,"1067":3,"1309":1,"1311":5,"1312":6,"1323":3,"1326":1,"1328":2,"1331":1,"1334":2,"1337":1,"1339":17,"1379":3,"1380":1,"1396":3,"1415":3,"1430":2,"1438":1,"1441":5,"1447":4,"1449":1,"1467":5,"1476":1,"1488":1,"1496":1,"1656":2,"1663":1,"1670":1,"1825":1,"1896":1,"1898":2,"1904":1,"1946":1,"2009":1,"2010":1,"2020":1,"2024":1,"2026":12}}],["clears→nuget",{"3":{"1526":1}}],["clears",{"3":{"0":1,"21":1,"39":1,"123":1,"175":1,"207":1,"220":1,"246":1,"350":1,"355":1,"370":1,"391":1,"397":1,"402":1,"404":1,"556":1,"790":1,"854":1,"857":1,"881":1,"905":1,"997":1,"1091":1,"1184":2,"1229":1,"1231":1,"1237":2,"1259":3,"1267":1,"1273":1,"1286":10,"1289":1,"1293":1,"1294":1,"1300":9,"1301":1,"1309":2,"1311":3,"1323":6,"1324":37,"1333":1,"1339":4,"1349":1,"1350":3,"1359":9,"1373":1,"1380":4,"1390":1,"1395":46,"1396":11,"1402":4,"1407":1,"1410":1,"1415":7,"1417":8,"1433":1,"1436":15,"1438":1,"1443":1,"1488":1,"1526":1,"1563":1,"1611":1,"1634":1,"1639":2,"1641":7,"1747":1,"1748":1,"1751":1,"1753":1,"1764":1,"1765":2,"1767":5,"1769":1,"1776":1,"1903":1,"1918":1,"1920":1,"1922":2,"1923":1,"1924":1,"2011":1,"2081":1,"2159":1,"2162":1,"2193":1,"2199":2}}],["clearing",{"3":{"0":1,"279":1,"500":1,"512":1,"861":1,"1026":1,"1233":1,"1237":1,"1252":1,"1259":1,"1270":1,"1274":2,"1275":1,"1286":3,"1300":2,"1311":3,"1323":1,"1324":7,"1338":1,"1339":4,"1343":1,"1345":1,"1359":3,"1395":3,"1396":2,"1399":1,"1402":1,"1415":3,"1417":1,"1436":3,"1443":1,"1488":1,"1748":2,"1764":1,"1767":1,"1769":1,"1776":1,"2159":1}}],["clear",{"2":{"1840":1},"3":{"0":1,"21":1,"170":1,"207":1,"212":1,"219":1,"243":3,"258":2,"259":1,"261":1,"395":1,"440":1,"499":1,"507":1,"618":1,"707":1,"715":1,"716":1,"733":1,"766":1,"861":1,"972":1,"988":1,"1027":1,"1028":1,"1237":6,"1247":1,"1282":1,"1286":9,"1300":8,"1301":2,"1309":3,"1311":1,"1318":2,"1323":11,"1324":29,"1333":1,"1339":4,"1343":1,"1350":1,"1355":1,"1359":6,"1380":5,"1383":1,"1390":1,"1395":26,"1396":4,"1413":1,"1415":3,"1417":7,"1436":19,"1438":2,"1475":1,"1480":1,"1488":1,"1496":1,"1541":1,"1545":1,"1546":1,"1556":1,"1572":1,"1577":3,"1638":1,"1641":1,"1667":1,"1668":1,"1746":3,"1748":1,"1749":2,"1750":3,"1765":1,"1768":2,"1769":1,"1773":1,"1775":1,"1840":1,"1841":1,"1918":1,"1924":1,"1956":1,"2058":1,"2081":1,"2087":1,"2128":1,"2130":1,"2134":1,"2142":1,"2148":1}}],["cleanest",{"3":{"1323":1,"1324":1,"1350":1,"1369":1,"1416":1,"1417":1,"1800":1,"2033":1,"2035":1,"2080":1}}],["cleaned",{"3":{"19":1,"707":1,"1274":1,"1323":1,"1359":2,"2067":1}}],["cleans",{"3":{"1082":1,"1323":1,"1415":1,"1460":1}}],["cleanly",{"3":{"187":1,"234":1,"266":1,"310":1,"414":1,"641":1,"799":1,"1247":1,"1270":2,"1273":1,"1285":1,"1286":2,"1309":2,"1311":1,"1323":4,"1324":4,"1350":1,"1359":1,"1369":1,"1395":1,"1396":1,"1402":2,"1415":1,"1417":6,"1436":5,"1441":1,"1460":1,"1467":1,"1481":1,"1526":1,"1555":1,"1831":1,"1886":1,"1929":1,"1960":1,"2015":1,"2062":1,"2214":1,"2216":1,"2223":1}}],["cleanuptestcontext",{"3":{"1199":2,"1207":1}}],["cleanupintervalhours",{"2":{"1256":1,"1290":1,"2190":1},"3":{"905":1,"1042":1,"1256":1,"1259":2,"1286":3,"1290":1,"1300":1,"1845":1,"2190":1}}],["cleanup",{"0":{"1357":1},"3":{"0":1,"21":1,"24":1,"39":1,"40":1,"546":1,"699":1,"790":1,"905":1,"1082":1,"1086":2,"1116":1,"1118":1,"1134":1,"1247":1,"1259":4,"1270":3,"1276":1,"1286":13,"1303":1,"1311":2,"1323":3,"1324":2,"1345":1,"1350":6,"1355":1,"1357":2,"1359":13,"1396":1,"1411":1,"1415":13,"1417":1,"1436":4,"1467":1,"1475":6,"1488":1,"1496":3,"1634":3,"1639":1,"2169":3}}],["clean",{"0":{"1504":1,"1540":1},"2":{"1360":1},"3":{"0":1,"54":1,"58":1,"131":1,"135":2,"136":1,"248":1,"282":1,"373":1,"507":1,"512":1,"529":1,"546":1,"757":1,"759":1,"988":1,"1211":3,"1212":1,"1216":1,"1217":1,"1221":1,"1229":3,"1230":1,"1237":3,"1241":1,"1243":1,"1245":1,"1247":4,"1249":1,"1259":3,"1270":5,"1271":1,"1272":1,"1286":20,"1289":1,"1300":6,"1301":8,"1303":2,"1309":10,"1310":5,"1311":13,"1312":1,"1313":1,"1314":1,"1323":9,"1324":11,"1339":2,"1341":2,"1342":1,"1345":1,"1346":1,"1349":1,"1350":7,"1352":2,"1354":1,"1359":41,"1360":2,"1369":7,"1380":6,"1382":1,"1395":4,"1396":21,"1402":1,"1404":2,"1415":15,"1416":3,"1417":9,"1427":1,"1436":55,"1438":3,"1445":4,"1455":5,"1459":1,"1467":2,"1476":1,"1488":1,"1489":3,"1493":1,"1496":24,"1499":1,"1522":1,"1523":1,"1525":1,"1526":4,"1535":1,"1536":1,"1554":1,"1562":1,"1576":1,"1577":4,"1586":1,"1587":1,"1588":1,"1590":1,"1591":1,"1594":1,"1600":1,"1611":1,"1638":1,"1639":1,"1646":1,"1659":1,"1692":1,"1710":1,"1763":1,"1780":2,"1781":1,"1782":1,"1784":1,"1794":2,"1796":1,"1797":1,"1799":1,"1805":1,"1815":1,"1831":1,"1882":1,"1902":1,"1915":1,"1923":1,"1931":1,"1960":1,"1966":1,"2003":1,"2009":1,"2040":1,"2041":2,"2045":2,"2050":1,"2053":1,"2056":1,"2073":1,"2078":1,"2101":1,"2110":1,"2111":1,"2118":1,"2128":3,"2206":1,"2215":2,"2218":1,"2219":1,"2220":1,"2221":1,"2222":1,"2223":1,"2227":1,"2229":1,"2232":1,"2241":3,"2245":1,"2247":1}}],["cldr",{"3":{"1324":2,"1577":1}}],["cl",{"2":{"609":1,"1465":1,"1476":2},"3":{"609":1,"1465":1,"1467":2,"1476":2}}],["clrtype",{"2":{"697":1},"3":{"697":1,"1286":3}}],["clr",{"0":{"1241":1},"3":{"0":1,"24":2,"330":1,"471":1,"633":1,"636":1,"798":1,"799":1,"803":2,"805":1,"848":1,"849":1,"963":2,"964":2,"965":2,"1049":1,"1233":1,"1235":2,"1237":7,"1241":2,"1247":5,"1250":2,"1259":9,"1269":1,"1270":1,"1276":1,"1277":1,"1278":1,"1281":2,"1282":1,"1286":33,"1300":3,"1310":5,"1318":1,"1323":5,"1339":1,"1350":1,"1369":4,"1380":1,"1395":1,"1396":1,"1415":2,"1417":2,"1433":1,"1436":8,"1586":1,"1815":1,"1849":1,"1858":1,"1988":1,"1992":1,"2189":1,"2195":1}}],["cls=",{"3":{"1436":1}}],["cls",{"3":{"0":3,"860":1,"861":6,"863":2,"1212":1,"1433":3,"1436":9,"1526":1,"1560":1,"1582":1,"1591":1,"1596":1,"1671":1,"2081":1}}],["cliff",{"3":{"1892":1}}],["clipped",{"3":{"1653":1}}],["clip",{"3":{"1417":1,"1427":1}}],["clips",{"3":{"1286":1,"1669":1}}],["clipboard",{"2":{"412":1,"2118":1},"3":{"412":2,"1192":1,"1202":1,"1203":1,"1395":1,"1417":22,"1496":1,"1669":1,"2118":2}}],["climbs",{"3":{"1436":1}}],["climb",{"3":{"801":1}}],["climbing",{"3":{"799":1,"801":1,"1049":1,"1465":1}}],["clickjacks",{"3":{"2150":1}}],["clickjacking",{"3":{"1324":1,"1339":1,"2150":1}}],["clickandverifyasync",{"2":{"1671":1},"3":{"1433":1,"1436":1,"1488":1,"1671":1}}],["clickandwaitforurlasync",{"2":{"1433":1},"3":{"1433":1,"1436":1,"1488":1}}],["clickablecard",{"3":{"1324":1,"1436":1}}],["clickablecardtests",{"3":{"1199":1,"1207":2}}],["clickable",{"3":{"1324":1,"1359":1,"1436":2}}],["clickbuttonbytext",{"3":{"1432":1,"1436":2}}],["clicked",{"3":{"608":1,"1290":1,"1395":1,"1396":1,"1415":1,"1436":1,"2035":1,"2160":1}}],["clicks",{"3":{"517":1,"519":1,"743":1,"954":1,"1311":1,"1383":1,"1395":2,"1417":1,"1436":22,"1488":4,"1973":1}}],["clicking",{"3":{"156":1,"905":1,"1300":1,"1324":1,"1389":1,"1402":1,"1436":3,"1463":1,"1488":1}}],["click",{"3":{"0":2,"413":1,"519":1,"520":1,"743":1,"766":1,"861":1,"862":1,"905":1,"907":1,"1020":1,"1300":2,"1324":13,"1339":1,"1359":1,"1392":1,"1395":7,"1396":1,"1402":2,"1415":2,"1417":11,"1433":2,"1436":18,"1456":1,"1474":1,"1488":3,"1554":1,"1558":2,"1565":1,"1627":1,"1629":1,"1966":1,"2119":1,"2123":1}}],["cli",{"3":{"0":1,"665":1,"764":1,"766":1,"790":1,"1335":1,"1339":2,"1441":1,"1455":1,"1457":1,"1458":1,"1464":1,"1465":1,"1472":2,"1474":1,"1475":1,"1682":1,"2035":1,"2168":1}}],["cliente",{"3":{"1686":2}}],["clienteventformatvalidationtests",{"3":{"1199":1,"1207":2}}],["clientwidth",{"3":{"1436":1}}],["clientverdict",{"3":{"1436":1}}],["clientpasswordcomplexity",{"3":{"1436":2}}],["clientmodel",{"3":{"1427":1}}],["clientoptions",{"2":{"1420":1},"3":{"1420":1,"1427":2}}],["clienttoken",{"3":{"1359":1}}],["clientname",{"3":{"1339":1}}],["clientnameprefix",{"3":{"1339":1}}],["clientuseragent",{"3":{"1311":2,"1415":1}}],["clienturlvalidationtests",{"3":{"1199":1,"1207":2,"1438":2}}],["clientfactory",{"3":{"1213":1,"1312":2,"1436":5}}],["clientinterceptorcontext",{"3":{"1312":1}}],["clientip",{"3":{"1338":1,"1339":6,"1436":1,"1447":1}}],["clientipaddress",{"3":{"1311":2,"1415":1}}],["clientippartition",{"3":{"827":1,"1324":1,"1337":1,"1339":2}}],["clientid",{"2":{"351":1,"352":1},"3":{"0":1,"350":2,"351":1,"352":1,"1311":6,"1324":3,"1472":2,"1667":1,"1975":4,"1978":1}}],["clientconfigpath",{"3":{"1324":2}}],["clientconfigendpointtests",{"3":{"1199":2,"1207":4,"1324":4,"1437":1,"1487":2}}],["clientconfigendpointextensions",{"2":{"1324":1},"3":{"674":1,"677":1,"1184":1,"1198":1,"1199":3,"1203":1,"1207":2,"1208":1,"1324":17,"1496":1}}],["clientconfigbuilder",{"3":{"1198":1,"1199":2,"1203":1,"1207":2,"1324":11,"1496":1}}],["clientconfig",{"3":{"674":1,"1184":1,"1203":2,"1207":6,"1208":1,"1324":14,"1487":1}}],["clientcascade",{"2":{"1083":1},"3":{"0":1,"1083":1}}],["clientkey",{"2":{"231":1},"3":{"225":1,"231":1,"1247":1,"1309":1,"1933":1}}],["client",{"0":{"1378":1,"2020":1,"2031":1,"2033":1},"1":{"154":1,"155":1,"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":1,"504":1,"505":1,"506":1,"507":1,"508":1,"509":1,"510":1,"511":1,"512":1,"513":1,"514":1,"878":1,"879":1,"880":1,"881":1,"882":1,"883":1,"884":1,"885":1},"2":{"407":1,"599":1,"601":1,"603":1,"667":1,"669":1,"1075":1,"1425":1,"1443":1,"1445":1,"1468":1,"1472":2,"1531":1,"1677":1,"2158":1,"2179":1},"3":{"0":40,"53":5,"59":2,"60":1,"66":1,"67":1,"68":1,"70":2,"71":2,"72":5,"73":4,"74":2,"86":1,"92":1,"95":1,"96":1,"97":3,"100":2,"103":1,"104":1,"109":8,"110":1,"111":3,"113":2,"122":1,"131":1,"134":1,"135":2,"136":1,"142":2,"154":1,"156":2,"157":8,"158":1,"159":1,"160":4,"166":2,"168":2,"175":4,"177":1,"179":2,"180":4,"182":1,"194":1,"206":2,"213":1,"225":2,"229":1,"230":1,"231":3,"233":1,"234":2,"235":3,"237":2,"241":2,"243":2,"245":4,"247":1,"258":3,"259":2,"261":3,"264":1,"265":5,"267":2,"272":1,"279":1,"280":3,"285":1,"332":1,"333":2,"335":1,"340":2,"341":6,"342":4,"343":3,"348":1,"350":1,"353":1,"379":2,"380":1,"381":2,"382":1,"383":1,"384":2,"387":1,"389":1,"398":1,"402":1,"404":1,"406":1,"407":3,"408":1,"418":1,"420":2,"423":1,"425":1,"430":1,"433":2,"434":4,"435":1,"436":1,"439":1,"440":1,"443":1,"447":2,"449":3,"455":1,"498":1,"499":2,"500":2,"501":2,"504":1,"506":1,"507":6,"508":1,"509":1,"510":1,"536":1,"545":1,"551":1,"554":1,"555":4,"556":7,"557":2,"558":1,"559":1,"560":1,"571":1,"572":5,"583":2,"591":1,"598":1,"599":5,"601":1,"603":1,"608":1,"612":1,"638":1,"640":2,"649":1,"650":1,"665":3,"667":1,"669":1,"674":2,"677":1,"684":2,"740":1,"741":1,"742":1,"743":2,"749":2,"750":1,"773":1,"774":1,"789":1,"792":1,"795":1,"817":1,"822":1,"826":3,"827":10,"829":1,"833":2,"837":1,"860":3,"861":1,"865":2,"876":5,"878":1,"879":1,"880":6,"881":13,"882":6,"883":2,"884":1,"885":4,"897":1,"904":1,"905":2,"907":2,"910":2,"914":1,"922":1,"954":1,"988":1,"996":2,"998":1,"1016":1,"1017":1,"1018":5,"1020":1,"1034":2,"1035":2,"1050":1,"1052":1,"1059":1,"1067":2,"1075":1,"1082":1,"1085":1,"1089":1,"1090":1,"1091":6,"1092":3,"1093":3,"1112":1,"1116":1,"1124":4,"1125":1,"1126":2,"1182":1,"1183":2,"1184":5,"1185":1,"1186":1,"1187":1,"1189":1,"1192":2,"1199":1,"1202":1,"1203":2,"1206":1,"1207":3,"1212":12,"1213":1,"1217":1,"1218":1,"1225":3,"1227":1,"1228":1,"1229":9,"1237":2,"1239":1,"1241":5,"1242":2,"1243":1,"1244":1,"1247":29,"1259":1,"1268":1,"1270":3,"1271":4,"1285":2,"1286":24,"1287":1,"1289":1,"1290":2,"1294":1,"1295":1,"1298":1,"1300":53,"1301":4,"1302":2,"1305":1,"1306":1,"1308":2,"1309":53,"1311":98,"1312":36,"1314":2,"1315":1,"1316":2,"1323":34,"1324":261,"1327":1,"1328":2,"1332":2,"1333":1,"1334":1,"1335":1,"1336":3,"1337":1,"1338":3,"1339":69,"1347":3,"1349":1,"1350":28,"1352":3,"1353":1,"1355":2,"1357":1,"1358":3,"1359":77,"1360":1,"1365":2,"1366":5,"1369":13,"1370":1,"1371":1,"1378":3,"1380":37,"1384":4,"1387":1,"1388":1,"1389":2,"1395":100,"1396":110,"1397":1,"1402":48,"1404":1,"1406":2,"1408":1,"1411":1,"1413":1,"1414":2,"1415":58,"1416":40,"1417":34,"1420":2,"1421":5,"1422":2,"1423":1,"1425":4,"1427":34,"1429":2,"1432":2,"1433":1,"1435":4,"1436":84,"1437":5,"1438":28,"1441":6,"1442":2,"1443":3,"1444":1,"1445":2,"1447":8,"1455":4,"1456":1,"1460":1,"1461":1,"1467":16,"1468":1,"1472":5,"1477":1,"1487":1,"1488":5,"1489":1,"1490":1,"1491":3,"1492":2,"1496":7,"1503":1,"1526":13,"1531":3,"1532":3,"1534":2,"1545":1,"1554":1,"1556":2,"1560":3,"1561":2,"1563":5,"1564":1,"1572":3,"1577":4,"1585":1,"1586":2,"1589":1,"1591":4,"1595":1,"1596":5,"1597":2,"1626":1,"1627":2,"1631":4,"1638":1,"1639":5,"1640":4,"1641":6,"1651":1,"1653":5,"1656":2,"1662":2,"1663":4,"1666":1,"1667":2,"1668":3,"1669":1,"1670":1,"1671":1,"1677":1,"1685":3,"1702":5,"1707":1,"1720":1,"1749":2,"1765":1,"1773":2,"1790":4,"1805":2,"1815":2,"1829":1,"1831":2,"1840":1,"1856":1,"1861":2,"1868":1,"1870":1,"1871":2,"1872":3,"1873":2,"1874":2,"1875":1,"1876":4,"1877":2,"1882":2,"1884":1,"1905":1,"1906":4,"1908":8,"1909":2,"1911":4,"1912":4,"1918":1,"1921":1,"1925":2,"1926":2,"1927":3,"1930":1,"1933":1,"1934":1,"1935":1,"1936":2,"1937":1,"1942":2,"1944":3,"1945":2,"1946":1,"1949":1,"1950":2,"1966":3,"1968":6,"1972":3,"1973":1,"1975":4,"1976":1,"1979":2,"1980":2,"1981":1,"1982":2,"1984":1,"1985":1,"1986":1,"1987":1,"1988":1,"1991":1,"1999":1,"2001":3,"2002":1,"2003":2,"2010":1,"2011":1,"2016":1,"2018":2,"2020":3,"2023":1,"2024":1,"2025":4,"2029":2,"2030":2,"2031":4,"2032":4,"2033":1,"2039":3,"2044":1,"2045":1,"2056":4,"2076":1,"2079":1,"2080":2,"2081":1,"2082":2,"2083":1,"2084":1,"2085":2,"2088":1,"2096":1,"2106":2,"2109":1,"2115":1,"2126":2,"2128":4,"2131":3,"2132":2,"2133":2,"2135":3,"2149":1,"2152":3,"2153":1,"2154":1,"2158":3,"2160":1,"2165":1,"2168":1,"2169":1,"2172":2,"2174":1,"2175":1,"2176":2,"2177":1,"2179":2,"2181":1,"2182":1,"2234":5,"2241":1}}],["clientstreamingserverhandler",{"3":{"1312":1}}],["clientstate",{"3":{"1311":4}}],["clientstateitemkey",{"3":{"1311":2}}],["clientstamped",{"2":{"1872":1},"3":{"1175":2,"1274":1,"1280":1,"1286":5,"1872":1}}],["clientsecret",{"3":{"350":1,"1311":1,"1975":1}}],["clientsetnull",{"2":{"1082":1,"1085":1},"3":{"0":1,"1082":1,"1085":1}}],["clients",{"0":{"100":1},"2":{"1330":1},"3":{"0":5,"53":2,"57":1,"59":2,"60":1,"63":1,"66":1,"74":1,"97":1,"98":3,"135":1,"157":1,"174":1,"225":2,"314":1,"380":1,"383":1,"387":1,"560":1,"583":1,"586":1,"587":1,"638":2,"640":1,"645":1,"657":1,"773":1,"823":1,"881":1,"882":1,"1077":1,"1091":2,"1184":1,"1192":2,"1202":1,"1203":1,"1212":3,"1213":1,"1247":1,"1286":4,"1289":1,"1296":1,"1300":7,"1301":1,"1302":1,"1307":5,"1309":13,"1311":13,"1312":1,"1316":1,"1320":1,"1323":14,"1324":8,"1326":1,"1329":3,"1330":1,"1339":9,"1350":1,"1353":1,"1359":4,"1379":1,"1380":4,"1395":4,"1396":15,"1399":1,"1402":4,"1406":1,"1410":1,"1414":1,"1415":9,"1418":1,"1427":1,"1436":8,"1438":2,"1441":4,"1443":1,"1447":4,"1450":1,"1467":1,"1490":1,"1496":1,"1509":1,"1538":1,"1555":1,"1591":1,"1630":2,"1631":2,"1638":1,"1639":4,"1640":3,"1641":11,"1660":2,"1668":1,"1669":2,"1671":1,"1772":1,"1790":2,"1906":1,"1907":1,"1911":1,"1912":2,"1932":1,"1935":3,"1944":1,"1946":1,"1950":1,"2010":1,"2020":1,"2024":2,"2026":2,"2029":1,"2038":1,"2039":1,"2085":1,"2113":1,"2172":1,"2216":1,"2223":2,"2229":1,"2234":1}}],["clobbering",{"3":{"1324":1,"1870":1}}],["clobbers",{"3":{"1324":1,"2074":1}}],["clobber",{"3":{"1323":2,"1359":1,"1415":1,"1429":1,"1430":1,"1436":2,"1490":1}}],["cloning",{"3":{"820":1,"1286":1}}],["cloned",{"3":{"1091":1,"1436":1}}],["clones",{"3":{"698":1,"1286":5,"1427":1,"1453":1,"1851":1}}],["clone",{"3":{"468":1,"657":1,"1286":4,"1359":1,"1422":1,"1464":1,"2004":1,"2005":1,"2176":1}}],["clothes",{"3":{"341":1}}],["cloud",{"0":{"1446":1,"2231":1},"3":{"0":1,"175":1,"177":1,"219":1,"397":1,"405":1,"641":1,"749":1,"972":1,"1011":1,"1043":1,"1124":1,"1213":1,"1309":1,"1311":2,"1338":1,"1339":2,"1350":1,"1364":3,"1369":4,"1439":1,"1442":1,"1450":1,"1457":1,"1467":2,"1554":1,"1568":1,"1570":1,"1575":1,"1577":1,"1670":1,"1707":3,"1784":1,"1936":1,"2011":2,"2014":1,"2028":1,"2130":1,"2156":2,"2158":1,"2162":1,"2187":2,"2195":1,"2214":1,"2215":3,"2216":1,"2218":1,"2219":1,"2220":2,"2221":1,"2222":2,"2223":1,"2230":1,"2240":1,"2241":2,"2242":2}}],["closures",{"3":{"1309":2,"1436":1}}],["closure",{"3":{"122":1,"135":2,"465":1,"466":1,"1067":1,"1222":1,"1229":2,"1247":3,"1259":1,"1270":1,"1286":2,"1301":1,"1311":1,"1323":2,"1324":1,"1339":2,"1359":1,"1395":1,"1417":1,"1436":8}}],["closing",{"3":{"0":3,"122":1,"217":1,"252":1,"254":1,"265":1,"390":1,"392":1,"458":1,"492":1,"523":1,"603":1,"607":1,"664":1,"699":1,"764":1,"856":1,"872":1,"897":1,"920":2,"1033":1,"1052":1,"1108":1,"1229":1,"1239":1,"1247":2,"1258":1,"1270":2,"1286":1,"1300":3,"1311":2,"1323":5,"1324":4,"1340":1,"1342":1,"1350":2,"1359":7,"1380":1,"1392":1,"1395":4,"1402":5,"1415":3,"1417":1,"1427":1,"1436":9,"1450":1,"1455":1,"1467":1,"1496":1,"1524":1,"1577":2,"1637":1,"1641":1,"1702":1,"1851":1,"1923":1,"1946":1,"2035":1,"2081":1,"2087":1,"2165":1}}],["closepollasync",{"3":{"1402":2}}],["closeasync",{"3":{"1396":2,"1402":1}}],["closely",{"3":{"1270":1,"1300":1,"1311":2,"1320":1,"1339":1,"1350":1,"1355":1,"1359":3,"1395":1,"1396":1,"1406":1,"1417":2,"1421":1,"1436":2,"1441":1,"1455":1,"1456":1}}],["closelivepollcommand",{"3":{"1199":6,"1203":1,"1207":2,"1402":11}}],["closelivepollhandlertests",{"3":{"1199":1,"1207":3}}],["closelivepollhandler",{"2":{"522":1,"1399":1},"3":{"522":2,"523":2,"1100":2,"1199":2,"1203":1,"1207":2,"1270":2,"1350":2,"1396":4,"1399":6,"1402":17}}],["closer",{"3":{"915":1,"1780":1}}],["close",{"3":{"0":5,"21":1,"26":1,"99":1,"122":1,"197":1,"265":1,"273":1,"320":1,"329":1,"335":1,"342":1,"350":1,"390":1,"491":1,"507":1,"522":1,"523":1,"558":1,"642":1,"832":1,"837":1,"840":1,"848":1,"916":1,"921":1,"926":1,"988":2,"996":1,"1061":1,"1075":1,"1100":1,"1108":1,"1123":1,"1124":2,"1125":1,"1128":1,"1203":2,"1207":4,"1247":1,"1259":1,"1262":1,"1265":1,"1270":9,"1271":1,"1277":1,"1284":1,"1286":3,"1292":1,"1300":5,"1301":1,"1309":1,"1311":1,"1312":2,"1323":3,"1324":17,"1338":1,"1339":1,"1350":1,"1355":1,"1359":9,"1379":1,"1380":1,"1383":1,"1395":7,"1396":9,"1398":1,"1399":1,"1401":1,"1402":38,"1415":4,"1416":1,"1427":1,"1436":12,"1438":1,"1441":1,"1448":1,"1449":1,"1459":2,"1467":1,"1488":2,"1489":1,"1490":1,"1496":1,"1526":1,"1534":2,"1576":1,"1582":1,"1607":1,"1632":2,"1741":1,"1872":1,"1902":1,"1915":1,"1934":1,"1977":1,"1978":1,"1987":1,"1992":1,"1999":1,"2001":3,"2056":1,"2087":1,"2204":1}}],["closedrawer",{"3":{"1591":1}}],["closedgenericarguments",{"3":{"1436":1}}],["closedhandlertype",{"3":{"1259":3}}],["closed",{"0":{"870":1,"1235":1},"1":{"1105":1,"1106":1,"1107":1,"1108":1,"1109":1,"1110":1,"1111":1,"1112":1},"2":{"384":1},"3":{"0":18,"24":1,"76":1,"80":2,"109":1,"122":1,"135":1,"195":1,"201":1,"212":1,"214":1,"215":1,"216":1,"224":1,"233":2,"235":2,"237":2,"267":1,"275":1,"298":1,"305":1,"316":1,"324":1,"325":2,"326":1,"341":1,"368":1,"373":1,"374":1,"384":1,"414":1,"421":1,"423":1,"424":1,"459":2,"461":1,"463":1,"501":1,"512":1,"528":1,"530":1,"531":1,"535":1,"545":1,"549":1,"562":1,"566":1,"567":1,"572":2,"574":2,"591":1,"599":1,"624":1,"626":1,"628":1,"629":1,"657":1,"659":1,"698":1,"699":1,"700":1,"743":1,"759":1,"768":1,"776":2,"784":1,"833":1,"834":1,"840":1,"867":3,"868":1,"871":1,"872":2,"873":1,"906":1,"912":1,"922":4,"926":1,"963":1,"964":3,"988":1,"1018":1,"1042":1,"1050":2,"1052":1,"1059":1,"1091":2,"1105":1,"1108":3,"1169":1,"1176":1,"1177":1,"1178":1,"1212":1,"1223":1,"1229":7,"1234":1,"1235":2,"1237":14,"1240":1,"1241":3,"1247":13,"1259":5,"1263":2,"1264":2,"1265":2,"1267":2,"1268":1,"1270":44,"1271":5,"1273":1,"1275":1,"1278":1,"1280":1,"1286":21,"1297":1,"1300":26,"1301":1,"1307":1,"1309":8,"1310":2,"1311":29,"1312":1,"1316":1,"1318":1,"1323":21,"1324":22,"1334":1,"1339":4,"1350":14,"1352":2,"1353":1,"1354":2,"1358":1,"1359":119,"1366":1,"1369":1,"1372":1,"1380":25,"1383":1,"1384":1,"1391":1,"1395":27,"1396":20,"1398":1,"1399":1,"1401":1,"1402":32,"1403":1,"1404":1,"1406":1,"1415":24,"1417":4,"1421":1,"1422":1,"1423":2,"1427":7,"1436":33,"1438":6,"1442":1,"1447":1,"1453":1,"1454":1,"1455":2,"1459":3,"1467":1,"1489":1,"1496":5,"1526":4,"1531":1,"1575":2,"1577":1,"1582":1,"1586":2,"1590":1,"1591":4,"1597":1,"1600":1,"1630":1,"1632":2,"1653":1,"1670":1,"1686":2,"1701":1,"1702":2,"1707":1,"1771":1,"1815":2,"1823":2,"1830":2,"1851":2,"1856":1,"1898":2,"1899":1,"1912":1,"1927":1,"1962":1,"1963":1,"1984":1,"1985":1,"1988":1,"1989":1,"1995":2,"1996":1,"1997":1,"1998":2,"2001":1,"2039":1,"2044":1,"2047":1,"2048":1,"2138":1,"2142":1,"2152":2,"2154":1,"2155":2,"2163":2,"2174":1,"2177":1,"2182":2,"2186":1,"2192":1,"2195":1,"2203":2,"2205":1,"2234":1}}],["closesentinel",{"3":{"1324":1}}],["closest",{"3":{"1263":1,"1270":3,"1311":1,"1323":1,"1821":1}}],["closes",{"3":{"0":6,"40":1,"42":1,"69":1,"110":1,"121":1,"197":1,"201":1,"208":1,"230":1,"265":1,"284":2,"305":1,"318":1,"331":1,"350":1,"360":1,"365":1,"381":1,"387":1,"418":1,"459":1,"474":1,"538":1,"539":1,"599":1,"609":2,"612":1,"702":2,"741":1,"755":1,"757":1,"798":1,"827":2,"829":2,"832":1,"839":1,"893":1,"916":1,"1018":1,"1028":1,"1053":1,"1124":2,"1125":1,"1128":1,"1229":2,"1237":2,"1241":1,"1247":7,"1253":1,"1259":8,"1267":1,"1270":5,"1271":1,"1278":1,"1281":1,"1286":10,"1300":10,"1301":1,"1307":1,"1309":1,"1311":5,"1316":2,"1323":9,"1324":6,"1327":1,"1334":1,"1337":1,"1339":9,"1350":3,"1357":1,"1359":23,"1380":3,"1389":1,"1395":7,"1396":7,"1399":1,"1402":7,"1415":7,"1416":2,"1417":4,"1420":1,"1430":2,"1435":1,"1436":31,"1438":4,"1445":1,"1446":1,"1453":1,"1456":1,"1459":1,"1465":1,"1467":4,"1474":1,"1476":1,"1488":1,"1492":2,"1582":1,"1600":1,"1632":1,"1641":1,"1651":1,"1790":1,"1843":1,"1844":1,"1871":1,"1886":1,"1897":1,"1899":1,"1909":1,"1920":1,"1922":2,"1929":1,"1930":1,"1945":1,"1950":1,"1968":1,"1972":2,"1979":1,"1990":1,"1997":1,"2001":1,"2003":2,"2019":1,"2025":1,"2028":1,"2037":1,"2057":1,"2067":1,"2068":2,"2071":1,"2145":1,"2148":1,"2180":1}}],["clockreadfixtures",{"3":{"1207":21,"1436":30}}],["clockreadtests",{"3":{"1161":3,"1199":2,"1207":5,"1431":1,"1436":29,"1577":1,"1591":1,"1599":1}}],["clockreadtestsbase",{"3":{"0":1,"1161":4,"1162":1,"1199":3,"1207":2,"1212":1,"1431":3,"1436":13,"2043":1,"2044":1}}],["clockreadsin",{"3":{"1436":1}}],["clockreads",{"3":{"1160":1,"1161":3,"1162":2,"1163":2,"1207":1,"1431":1,"1436":5}}],["clocks",{"3":{"1028":1,"1324":1,"1396":1}}],["clock",{"0":{"1948":1},"1":{"1158":1,"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1},"3":{"0":4,"19":1,"39":1,"62":1,"178":1,"255":1,"305":1,"386":2,"387":2,"390":1,"392":2,"396":1,"590":1,"640":1,"711":1,"724":1,"726":1,"727":1,"860":1,"905":1,"954":1,"1028":1,"1029":1,"1090":1,"1117":1,"1158":1,"1160":2,"1161":3,"1163":4,"1212":2,"1237":1,"1249":1,"1254":1,"1256":3,"1259":10,"1269":1,"1286":7,"1293":1,"1300":26,"1306":1,"1309":7,"1311":5,"1317":1,"1323":7,"1324":13,"1332":1,"1339":2,"1342":1,"1347":1,"1348":1,"1350":11,"1356":2,"1359":15,"1364":1,"1369":2,"1379":1,"1380":1,"1383":2,"1393":1,"1395":23,"1396":23,"1402":4,"1415":1,"1417":3,"1418":1,"1422":1,"1425":1,"1427":2,"1431":2,"1436":42,"1438":9,"1467":1,"1486":1,"1487":1,"1492":2,"1496":2,"1535":1,"1577":2,"1582":1,"1585":1,"1586":2,"1599":1,"1600":2,"1640":1,"1664":1,"1671":1,"1731":1,"1750":1,"1922":2,"1937":1,"1948":1,"1950":2,"2044":2,"2048":1,"2050":1,"2068":1,"2156":1,"2176":1,"2182":1,"2185":1,"2192":1,"2234":1}}],["clarify",{"3":{"1636":1,"1755":1,"1776":3}}],["clarification",{"3":{"1639":1,"1641":2}}],["clarifications",{"0":{"1639":1},"3":{"337":1,"1639":2}}],["clarifies",{"3":{"1639":18,"1640":1}}],["clarified",{"3":{"3":1,"45":1}}],["clarity",{"3":{"1369":1,"1417":1}}],["clash",{"3":{"1237":1,"1350":1}}],["class=",{"3":{"1416":1}}],["classname",{"3":{"1286":6}}],["classreference",{"2":{"1319":1,"1354":1},"3":{"1199":27,"1203":16,"1207":16,"1311":5,"1313":1,"1319":2,"1323":16,"1341":1,"1350":6,"1354":1,"1359":5,"1369":4,"1377":1,"1380":3,"1396":17,"1404":1,"1415":23,"1496":1}}],["classifiable",{"3":{"1229":1}}],["classifications",{"3":{"1243":1,"1247":2,"1662":1}}],["classification",{"0":{"1219":1},"3":{"688":1,"1091":1,"1217":1,"1219":2,"1221":1,"1225":1,"1229":4,"1230":1,"1247":7,"1270":2,"1271":4,"1286":6,"1310":7,"1350":1,"1359":8,"1369":1,"1395":1,"1396":2,"1433":1,"1436":2,"1488":1,"1517":1,"1630":3,"1637":3,"1669":1,"1764":1,"1769":1,"1805":2,"1867":1,"2063":1,"2064":1}}],["classifiers",{"3":{"1368":1}}],["classifier",{"3":{"593":1,"1019":1,"1243":1,"1286":3,"1323":2,"1339":1,"1402":1,"1423":1,"1436":7,"1453":2,"1455":5,"1488":1,"1492":1,"1496":18,"1531":1,"1630":1}}],["classifies",{"0":{"1222":1},"3":{"100":1,"564":1,"626":1,"893":1,"988":1,"1229":3,"1245":1,"1247":2,"1284":2,"1286":9,"1300":1,"1310":1,"1311":3,"1324":1,"1339":1,"1359":3,"1395":1,"1396":2,"1425":1,"1436":3,"1453":1,"1455":1,"1840":1,"1868":1}}],["classified",{"3":{"10":2,"109":1,"110":1,"539":1,"1006":1,"1091":1,"1184":1,"1229":1,"1260":1,"1266":1,"1270":1,"1286":1,"1289":1,"1300":2,"1304":1,"1309":1,"1310":1,"1324":1,"1359":3,"1391":1,"1395":1,"1443":1,"1567":1,"1934":1}}],["classifystatus",{"3":{"1359":11}}],["classifyfailure",{"3":{"1300":3}}],["classifyentries",{"3":{"1286":4}}],["classifynavigationproperty",{"3":{"1247":1,"1310":1}}],["classifying",{"3":{"109":1,"110":1,"1247":1,"1286":5,"1310":1,"1350":1,"1359":2,"1393":1,"1396":2,"1436":1,"1445":1,"2071":1}}],["classify",{"0":{"1865":1},"2":{"1495":1,"1501":1},"3":{"0":1,"107":1,"620":1,"692":1,"1191":1,"1222":2,"1229":1,"1247":1,"1286":5,"1300":1,"1324":1,"1339":1,"1350":2,"1359":1,"1395":1,"1433":1,"1436":4,"1467":1,"1488":1,"1495":1,"1496":24,"1498":1,"1501":1,"1524":1,"1526":1,"1807":1,"1865":1,"1940":1}}],["classic",{"3":{"0":3,"31":1,"208":1,"481":1,"801":1,"828":1,"963":1,"979":1,"980":7,"981":1,"982":1,"1212":2,"1229":1,"1237":2,"1247":1,"1270":1,"1300":3,"1311":4,"1323":1,"1324":5,"1339":1,"1350":1,"1359":1,"1380":1,"1395":2,"1396":1,"1415":1,"1416":1,"1417":5,"1427":1,"1436":7,"1441":1,"1467":2,"1488":1,"1585":1,"1652":1,"1664":1,"1796":1,"1897":1,"1994":1,"2008":1,"2046":1}}],["classes",{"0":{"1988":1},"1":{"1056":1,"1057":1,"1058":1,"1059":1,"1060":1,"1061":1,"1062":1,"1063":1},"3":{"0":10,"4":1,"7":1,"47":1,"48":1,"130":1,"132":1,"135":1,"136":1,"137":1,"140":1,"160":1,"314":1,"511":1,"513":1,"591":1,"616":5,"618":2,"657":1,"672":1,"674":4,"676":1,"677":1,"728":1,"794":1,"926":1,"954":2,"960":1,"980":1,"983":1,"1056":1,"1117":1,"1168":2,"1175":1,"1192":2,"1202":1,"1203":1,"1211":1,"1212":4,"1214":1,"1229":1,"1234":1,"1237":5,"1247":1,"1259":1,"1270":1,"1271":6,"1279":1,"1286":12,"1300":4,"1309":2,"1310":2,"1311":1,"1312":3,"1316":1,"1321":1,"1323":11,"1324":7,"1330":1,"1339":4,"1340":1,"1350":5,"1352":1,"1359":9,"1360":1,"1363":1,"1369":3,"1385":1,"1395":2,"1396":5,"1399":1,"1416":2,"1417":5,"1428":3,"1431":1,"1433":1,"1436":50,"1437":1,"1438":3,"1443":1,"1450":1,"1487":1,"1488":5,"1489":7,"1496":18,"1497":4,"1498":2,"1500":1,"1523":1,"1525":1,"1526":3,"1531":1,"1534":1,"1535":1,"1538":1,"1539":1,"1551":1,"1577":3,"1582":1,"1583":1,"1588":1,"1590":1,"1591":5,"1600":2,"1653":1,"1654":1,"1662":2,"1666":1,"1685":1,"1782":1,"1808":1,"1810":1,"1811":1,"1829":1,"1850":1,"1854":1,"1931":2,"1951":2,"1956":2,"1957":1,"1958":1,"1959":1,"1986":1,"1992":1,"2038":1,"2043":3,"2056":1,"2061":1,"2072":1,"2081":1,"2082":1,"2090":1,"2103":1,"2104":1,"2106":1,"2116":1,"2128":1,"2140":2,"2180":1,"2205":1,"2234":1}}],["class",{"0":{"1273":1,"1361":1,"1849":1},"1":{"1031":1,"1032":1,"1033":1,"1034":1,"1035":1,"1036":1,"1037":1,"1038":1},"2":{"1319":1,"1619":1,"1995":1},"3":{"0":11,"5":1,"6":1,"7":1,"11":1,"24":1,"45":2,"47":3,"53":1,"138":1,"150":1,"164":1,"167":1,"189":1,"214":1,"216":1,"230":1,"233":3,"235":3,"236":1,"237":1,"243":1,"253":1,"258":3,"264":1,"265":1,"283":2,"305":2,"318":3,"322":1,"326":1,"340":1,"343":1,"350":1,"364":1,"412":1,"428":1,"446":1,"448":2,"450":1,"455":1,"459":2,"463":3,"464":1,"492":1,"497":1,"511":1,"516":1,"523":1,"524":1,"534":1,"536":2,"537":2,"543":1,"545":2,"554":1,"555":1,"557":1,"573":1,"610":1,"616":1,"618":5,"619":1,"621":1,"633":2,"635":1,"639":1,"640":2,"657":2,"659":3,"660":1,"672":1,"674":5,"675":3,"676":1,"677":1,"681":1,"682":1,"715":1,"720":1,"724":2,"725":2,"726":2,"733":2,"741":1,"776":1,"793":2,"794":1,"797":1,"798":1,"801":1,"805":1,"811":1,"819":1,"821":1,"826":1,"827":1,"831":1,"832":2,"847":1,"855":1,"861":1,"862":1,"880":1,"882":1,"889":1,"893":1,"905":1,"910":1,"923":1,"926":1,"955":2,"963":2,"974":1,"979":1,"980":2,"989":2,"990":1,"1006":1,"1031":1,"1032":1,"1033":2,"1034":3,"1035":2,"1048":1,"1051":1,"1061":2,"1067":1,"1075":1,"1083":1,"1085":1,"1087":1,"1102":1,"1133":1,"1137":1,"1146":1,"1156":1,"1167":3,"1168":3,"1170":2,"1171":1,"1173":1,"1175":2,"1176":2,"1177":2,"1179":1,"1185":1,"1187":1,"1191":1,"1201":1,"1203":1589,"1204":1,"1205":1,"1207":4315,"1212":7,"1214":2,"1215":1,"1221":1,"1229":14,"1231":1,"1233":1,"1234":1,"1236":1,"1237":54,"1239":3,"1240":1,"1241":1,"1244":1,"1247":85,"1249":1,"1257":1,"1258":1,"1259":68,"1262":1,"1265":1,"1269":1,"1270":76,"1271":32,"1273":4,"1275":1,"1276":1,"1277":1,"1279":1,"1280":3,"1286":321,"1288":1,"1291":2,"1295":1,"1297":1,"1300":180,"1301":26,"1304":1,"1305":1,"1309":93,"1310":14,"1311":163,"1312":25,"1316":1,"1317":1,"1319":2,"1320":2,"1321":2,"1322":1,"1323":186,"1324":327,"1326":1,"1329":1,"1330":1,"1339":156,"1344":2,"1346":1,"1350":123,"1352":2,"1353":1,"1354":1,"1359":582,"1361":3,"1363":2,"1365":1,"1366":2,"1369":86,"1371":1,"1372":2,"1373":5,"1374":1,"1375":1,"1376":1,"1377":1,"1380":114,"1381":1,"1383":1,"1385":1,"1392":1,"1395":272,"1396":340,"1402":108,"1404":1,"1405":2,"1406":4,"1407":1,"1410":1,"1412":1,"1414":1,"1415":208,"1416":45,"1417":165,"1427":30,"1429":2,"1432":2,"1433":1,"1436":846,"1437":4,"1438":5,"1441":3,"1443":3,"1444":1,"1453":3,"1454":1,"1467":4,"1486":1,"1488":10,"1489":9,"1491":3,"1496":9,"1498":1,"1510":2,"1526":3,"1534":2,"1538":1,"1566":1,"1568":1,"1571":1,"1577":3,"1591":1,"1597":1,"1613":1,"1619":1,"1641":2,"1651":2,"1654":3,"1664":2,"1665":1,"1668":1,"1672":1,"1675":1,"1685":2,"1686":1,"1697":1,"1701":1,"1713":1,"1714":1,"1719":1,"1734":1,"1776":1,"1789":1,"1794":1,"1796":1,"1805":3,"1808":1,"1810":3,"1811":2,"1813":1,"1826":1,"1829":1,"1831":1,"1834":2,"1847":1,"1849":5,"1853":1,"1854":2,"1856":5,"1857":4,"1861":1,"1862":3,"1865":1,"1868":1,"1889":1,"1896":1,"1902":3,"1909":2,"1941":1,"1944":1,"1952":1,"1955":3,"1956":3,"1958":3,"1962":1,"1987":1,"1995":1,"1996":5,"1997":1,"1998":1,"2001":1,"2003":1,"2018":1,"2044":1,"2055":1,"2057":1,"2059":2,"2068":1,"2072":1,"2075":1,"2076":1,"2079":1,"2089":1,"2101":1,"2106":1,"2107":1,"2109":1,"2118":1,"2124":1,"2133":2,"2134":1,"2139":1,"2141":1,"2152":2,"2158":1,"2165":3,"2166":3,"2167":5,"2168":2,"2169":3,"2171":1,"2180":1,"2189":1,"2196":1,"2200":1,"2201":1,"2217":1,"2234":4}}],["clamppagesize",{"3":{"1324":1}}],["clamping",{"3":{"740":1,"1017":1,"1396":4,"1417":2,"1427":2,"2176":1}}],["clamp",{"2":{"1242":1},"3":{"330":1,"331":1,"337":1,"744":1,"1019":1,"1229":1,"1242":1,"1243":1,"1244":2,"1247":11,"1292":1,"1300":1,"1306":1,"1309":2,"1311":4,"1369":3,"1387":1,"1395":2,"1396":7,"1415":5,"1427":1,"1438":1,"1496":1,"1577":3,"1586":1,"1986":1,"1988":1,"1992":2,"2182":1}}],["clamped",{"3":{"279":1,"337":1,"682":1,"741":1,"1018":2,"1090":1,"1094":1,"1228":1,"1229":3,"1243":1,"1247":2,"1256":1,"1259":2,"1275":1,"1292":1,"1309":2,"1311":4,"1324":2,"1366":1,"1396":12,"1415":2,"1417":1,"1418":1,"1435":1,"1438":3,"1817":1,"1988":1,"2176":1}}],["clamps",{"3":{"0":1,"330":3,"337":1,"549":1,"741":1,"744":1,"1018":1,"1091":1,"1092":1,"1094":1,"1242":1,"1245":1,"1247":1,"1286":1,"1300":1,"1306":1,"1311":4,"1324":1,"1366":1,"1369":1,"1380":2,"1395":3,"1396":2,"1406":1,"1409":1,"1415":1,"1422":1,"1427":3,"1988":1,"2203":1}}],["claude",{"0":{"1459":1},"2":{"636":1,"1003":1,"1190":1,"1451":1,"1459":1,"1460":1,"1571":1,"1658":1,"2061":1},"3":{"1":1,"469":1,"550":1,"599":3,"626":2,"636":1,"766":1,"1003":1,"1004":2,"1018":1,"1190":1,"1192":1,"1211":1,"1270":2,"1286":3,"1300":6,"1311":1,"1323":1,"1339":3,"1366":1,"1369":1,"1380":1,"1415":1,"1436":15,"1440":1,"1451":2,"1452":1,"1453":2,"1454":1,"1459":32,"1460":4,"1461":2,"1467":2,"1470":1,"1496":10,"1526":1,"1571":1,"1576":1,"1577":5,"1582":1,"1591":3,"1617":1,"1649":1,"1658":2,"1838":1,"2061":1,"2215":1,"2221":1,"2222":1,"2227":1,"2241":4,"2245":1}}],["clauses",{"3":{"699":1,"1229":1,"1238":1,"1245":1,"1247":2,"1270":1,"1286":3,"1324":2,"1339":2,"1359":3,"1395":1,"1415":2,"1425":1,"1436":1,"1815":2}}],["clause",{"3":{"0":3,"109":1,"110":1,"145":1,"341":1,"342":1,"343":1,"697":1,"703":1,"887":1,"889":2,"890":3,"892":1,"988":2,"1073":1,"1075":1,"1132":1,"1220":1,"1229":1,"1237":2,"1241":2,"1247":5,"1263":1,"1271":3,"1274":1,"1281":1,"1286":14,"1300":1,"1309":1,"1311":2,"1323":2,"1324":2,"1339":2,"1350":2,"1359":11,"1369":1,"1396":1,"1402":1,"1412":1,"1415":7,"1416":5,"1427":1,"1436":4,"1456":1,"1662":1,"1813":2,"1817":1,"1844":1,"1859":1,"1869":1,"1872":2,"1877":1,"1987":1,"1992":1,"2066":2,"2234":2}}],["claimvalue",{"3":{"1415":1}}],["claimbaseduseridprovidertests",{"3":{"1199":1,"1207":4}}],["claimbaseduseridprovider",{"2":{"1296":1,"1935":1},"3":{"1199":3,"1203":1,"1207":2,"1287":1,"1296":3,"1300":9,"1309":1,"1935":1}}],["claimdueasync",{"3":{"1042":1,"2190":1}}],["claimwait",{"2":{"1099":1},"3":{"996":1,"1099":1,"1270":1,"1359":1,"1402":2}}],["claimtoken",{"3":{"1286":1}}],["claimtimetolive",{"2":{"1099":1},"3":{"996":1,"1099":1,"1270":1,"1359":1,"1402":2}}],["claimtype",{"3":{"318":1,"698":1,"1286":2,"1300":4,"1311":1,"1323":1,"1396":1,"1995":1}}],["claimtypes",{"2":{"157":1,"161":1,"246":1,"303":2,"324":1,"954":1,"1296":1,"1372":1,"1996":1,"1997":1,"2140":1},"3":{"157":1,"161":1,"186":1,"246":1,"303":2,"318":2,"324":2,"954":1,"1296":1,"1300":13,"1311":5,"1323":1,"1372":1,"1380":5,"1396":5,"1436":7,"1962":1,"1996":1,"1997":1,"2140":1}}],["claiming",{"0":{"1255":1},"3":{"862":1,"1018":1,"1049":1,"1247":1,"1259":2,"1270":1,"1286":1,"1311":1,"1323":3,"1324":1,"1359":1,"1402":1,"1436":2,"1801":1,"1841":1,"1891":1}}],["claimants",{"3":{"1436":1}}],["claimant",{"3":{"708":1,"1436":3,"2190":1,"2195":1}}],["claimable",{"3":{"353":1,"995":1,"1259":2,"1323":1,"1406":1,"1415":1,"1977":1}}],["claimeligibleasync",{"3":{"707":1,"1259":1}}],["claimeduntil",{"3":{"1286":4,"2188":1}}],["claimedby",{"3":{"1286":3,"2188":1}}],["claimed",{"1":{"2131":1,"2132":1,"2133":1,"2134":1,"2135":1},"3":{"82":1,"137":1,"164":1,"477":1,"499":1,"660":1,"690":1,"696":1,"707":2,"709":1,"876":1,"927":1,"995":1,"1237":1,"1247":1,"1259":5,"1279":1,"1286":6,"1290":1,"1300":1,"1311":1,"1323":3,"1324":1,"1339":3,"1359":1,"1380":1,"1415":1,"1436":3,"1489":1,"1496":3,"1779":1,"1948":1,"2120":1,"2125":1,"2130":1,"2131":1,"2141":1,"2183":1,"2212":1}}],["claimkey",{"2":{"524":1},"3":{"524":1,"996":1,"1359":1,"1402":1}}],["claimsidentity",{"3":{"1300":2,"1323":2,"1324":2,"1436":6}}],["claimsonlysessioncookieendpointstests",{"3":{"1199":1,"1207":3,"1300":2,"1438":1}}],["claimsonlybrowsertokens",{"2":{"1184":1,"1968":1},"3":{"1184":1,"1300":4,"1324":1,"1968":1}}],["claimsprincipal",{"2":{"1296":1,"2188":1},"3":{"507":1,"1042":1,"1286":2,"1296":1,"1300":19,"1309":2,"1311":1,"1323":3,"1324":1,"1396":1,"1415":1,"1432":1,"1436":8,"2188":1}}],["claimsprincipalextensionstests",{"3":{"906":1,"1199":1,"1207":2}}],["claimsprincipalextensions",{"2":{"126":1,"186":1,"246":1,"905":1,"1059":2,"1270":1,"1289":1,"1293":1,"1296":1,"1662":1},"3":{"0":1,"126":3,"157":1,"161":1,"186":2,"246":2,"303":1,"649":1,"905":4,"907":1,"1059":4,"1199":1,"1203":1,"1207":2,"1270":2,"1287":1,"1289":1,"1293":3,"1296":5,"1297":2,"1300":35,"1311":4,"1395":3,"1436":1,"1662":1,"2140":1}}],["claims",{"0":{"1296":1},"3":{"0":5,"15":1,"20":2,"24":1,"43":1,"93":1,"109":1,"181":1,"186":2,"191":1,"207":1,"208":1,"209":2,"259":1,"265":1,"303":1,"344":1,"350":2,"499":2,"507":1,"531":1,"538":1,"571":1,"592":1,"611":1,"649":1,"690":1,"691":1,"696":1,"697":1,"707":2,"720":1,"727":1,"749":1,"857":1,"905":1,"972":1,"973":1,"996":1,"1018":1,"1042":1,"1059":2,"1184":3,"1185":1,"1186":1,"1192":1,"1202":1,"1203":1,"1255":1,"1259":4,"1270":2,"1275":1,"1286":3,"1287":1,"1288":2,"1289":2,"1296":2,"1300":61,"1309":2,"1311":13,"1317":1,"1323":7,"1324":12,"1339":5,"1355":1,"1359":4,"1369":1,"1377":1,"1380":2,"1396":9,"1402":9,"1405":1,"1406":1,"1415":10,"1416":1,"1436":22,"1438":4,"1449":2,"1488":1,"1489":1,"1492":1,"1496":3,"1526":1,"1577":1,"1627":1,"1631":1,"1632":3,"1638":1,"1639":1,"1641":6,"1653":1,"1665":1,"1747":1,"1765":1,"1771":1,"1801":1,"1825":1,"1841":1,"1862":1,"1897":3,"1947":1,"1948":1,"1963":1,"1965":1,"1968":8,"1971":2,"1972":4,"1975":2,"1982":2,"2046":1,"2047":1,"2054":1,"2080":1,"2170":1,"2190":1,"2196":1}}],["claim",{"0":{"2057":1,"2190":1,"2192":1,"2199":1},"1":{"704":1,"705":1,"706":1,"707":1,"708":1,"709":1,"710":1,"711":1,"969":1,"970":1,"971":1,"972":1,"973":1,"974":1,"975":1,"976":1},"2":{"494":1,"495":1,"1998":1},"3":{"0":28,"15":1,"20":1,"22":2,"24":3,"26":1,"31":1,"46":1,"62":1,"72":1,"103":1,"115":1,"121":1,"126":4,"145":1,"157":1,"161":1,"173":3,"175":1,"186":7,"191":1,"197":1,"246":1,"250":1,"251":1,"252":1,"254":2,"256":1,"257":1,"258":1,"259":1,"279":2,"298":2,"303":3,"318":18,"320":6,"321":1,"322":2,"323":1,"324":3,"325":1,"326":4,"344":2,"349":1,"350":4,"351":1,"352":2,"365":1,"372":1,"373":1,"400":1,"403":1,"426":1,"447":1,"449":1,"459":1,"463":1,"464":1,"465":1,"477":1,"489":1,"490":2,"491":1,"492":1,"493":1,"494":1,"495":1,"497":3,"498":1,"499":2,"500":1,"518":1,"520":1,"524":4,"526":1,"538":1,"543":2,"550":1,"554":1,"574":1,"582":1,"592":1,"638":1,"650":1,"690":1,"696":1,"698":5,"700":1,"703":1,"704":1,"707":4,"708":1,"709":1,"710":1,"711":1,"743":1,"748":1,"749":1,"758":1,"764":2,"799":2,"800":2,"811":1,"833":1,"862":1,"903":3,"905":9,"906":3,"907":3,"909":1,"959":1,"969":1,"971":3,"972":4,"973":1,"976":1,"994":1,"995":5,"996":3,"999":1,"1000":2,"1018":3,"1019":1,"1021":1,"1022":1,"1041":1,"1042":2,"1043":1,"1046":1,"1057":1,"1058":1,"1059":6,"1060":1,"1061":1,"1063":1,"1066":1,"1067":1,"1074":1,"1075":1,"1085":1,"1099":3,"1100":3,"1103":2,"1104":1,"1108":1,"1116":1,"1118":1,"1212":4,"1213":1,"1232":1,"1233":1,"1237":5,"1247":1,"1255":3,"1256":1,"1259":18,"1263":1,"1269":1,"1270":17,"1275":2,"1276":2,"1281":1,"1286":27,"1288":3,"1289":2,"1290":3,"1293":1,"1296":6,"1297":5,"1300":135,"1304":1,"1309":2,"1311":27,"1317":2,"1318":1,"1323":29,"1324":10,"1339":3,"1348":2,"1349":1,"1350":3,"1357":1,"1358":2,"1359":35,"1367":2,"1369":1,"1372":4,"1373":2,"1375":1,"1376":1,"1380":27,"1388":2,"1389":2,"1395":20,"1396":21,"1402":28,"1405":1,"1406":4,"1409":2,"1410":1,"1413":1,"1414":1,"1415":36,"1416":1,"1430":1,"1432":1,"1436":31,"1438":16,"1441":1,"1449":2,"1450":1,"1473":1,"1474":3,"1488":1,"1491":2,"1496":6,"1525":1,"1526":1,"1534":1,"1577":2,"1582":1,"1583":1,"1621":3,"1626":1,"1627":3,"1631":2,"1632":2,"1638":1,"1639":3,"1640":1,"1641":12,"1660":1,"1664":2,"1665":1,"1667":2,"1668":1,"1719":2,"1723":2,"1724":2,"1757":1,"1761":1,"1771":1,"1778":1,"1797":2,"1815":1,"1821":1,"1825":1,"1841":1,"1848":1,"1849":1,"1851":4,"1896":1,"1908":2,"1933":1,"1947":1,"1948":2,"1950":2,"1962":6,"1965":2,"1974":1,"1977":2,"1978":1,"1979":1,"1982":7,"1983":1,"1984":1,"1985":1,"1995":11,"1996":9,"1997":10,"1998":6,"2001":2,"2003":2,"2044":3,"2049":1,"2050":1,"2054":1,"2061":1,"2079":1,"2087":1,"2098":1,"2111":1,"2112":1,"2124":1,"2127":1,"2131":1,"2140":2,"2145":1,"2170":1,"2185":1,"2188":3,"2190":1,"2191":1,"2192":1,"2195":3,"2196":1,"2199":7,"2204":2,"2205":2,"2217":1,"2222":1,"2234":3,"2238":1}}],["cuba",{"3":{"2222":1,"2224":1}}],["cu27",{"3":{"1453":1}}],["cumulative",{"3":{"1443":1,"1467":1}}],["cultural",{"3":{"1436":1}}],["culture+theme",{"3":{"1438":1}}],["cultureandtheme",{"3":{"1436":1}}],["cultureinvariant",{"3":{"1350":1,"1427":1,"1436":1}}],["cultureinfo",{"2":{"265":1,"1236":1,"1324":1},"3":{"265":3,"1050":1,"1236":1,"1237":3,"1241":1,"1247":5,"1270":1,"1271":6,"1286":3,"1300":11,"1309":15,"1311":4,"1312":3,"1323":6,"1324":38,"1339":2,"1350":5,"1359":13,"1380":2,"1395":31,"1396":14,"1402":4,"1415":5,"1416":2,"1417":16,"1427":1,"1436":3,"1591":1}}],["culture=",{"3":{"1311":1,"1436":1}}],["cultureendpointtests",{"3":{"1199":1,"1207":2}}],["culturedelegatinghandler",{"2":{"2085":1,"2088":1},"3":{"265":2,"881":1,"1199":2,"1203":1,"1207":2,"1324":11,"1496":1,"2085":2,"2088":1}}],["cultureswitch",{"3":{"1436":1}}],["cultureswitchertests",{"3":{"1199":1,"1207":3,"1438":2}}],["cultureswitcher",{"2":{"273":1,"276":1},"3":{"1324":5,"1577":1,"2085":2}}],["culturescope",{"3":{"1199":2,"1207":1}}],["cultures",{"3":{"265":1,"1108":1,"1300":1,"1311":3,"1324":4,"1417":1,"1436":4,"1487":1,"1564":1,"1591":2,"1666":1,"2085":1}}],["culture",{"3":{"0":6,"86":3,"87":1,"263":1,"264":1,"265":41,"267":1,"268":1,"269":1,"273":1,"415":3,"459":1,"485":1,"555":1,"556":1,"558":1,"560":2,"684":1,"686":1,"861":1,"1050":1,"1108":2,"1111":1,"1192":2,"1203":4,"1207":8,"1230":1,"1236":3,"1237":4,"1241":1,"1247":3,"1271":5,"1286":2,"1291":1,"1296":3,"1300":24,"1305":1,"1309":4,"1311":43,"1312":5,"1318":1,"1323":12,"1324":149,"1339":1,"1344":1,"1350":2,"1359":12,"1379":1,"1380":2,"1394":2,"1395":18,"1396":18,"1402":3,"1405":1,"1415":23,"1416":6,"1417":53,"1436":29,"1438":9,"1496":4,"1513":1,"1526":2,"1534":1,"1564":4,"1577":5,"1591":3,"1596":1,"1600":1,"1607":1,"1608":1,"1644":1,"1653":5,"1660":1,"1662":1,"1666":2,"1669":3,"1687":1,"1741":1,"1742":1,"1747":2,"1995":1,"2049":2,"2083":1,"2084":3,"2085":13,"2086":1,"2087":7,"2088":6,"2234":1}}],["culprit",{"3":{"1324":1,"1456":1}}],["cues",{"3":{"1417":1}}],["cue",{"3":{"353":1,"1324":1,"1417":3,"1641":2}}],["curriculum",{"3":{"1779":1,"1786":1,"2206":1,"2238":1}}],["currencies",{"3":{"1237":1,"1324":1}}],["currencymismatch",{"3":{"1234":1,"1237":2,"1311":1}}],["currencytests",{"3":{"1199":1,"1207":2}}],["currencyjsonconvertertests",{"3":{"1199":2,"1207":4}}],["currencyjsonconverter",{"2":{"659":1,"660":1,"964":1,"1230":1,"1235":1},"3":{"657":1,"659":1,"660":1,"964":1,"1198":1,"1199":4,"1203":2,"1207":3,"1230":1,"1234":1,"1235":1,"1237":9,"1311":11}}],["currency",{"2":{"655":1,"658":1,"659":1,"660":2},"3":{"0":2,"86":1,"124":1,"125":1,"536":1,"655":1,"656":1,"657":25,"658":5,"659":7,"660":8,"790":1,"1011":1,"1026":1,"1198":1,"1199":16,"1203":1,"1207":3,"1230":2,"1234":13,"1237":75,"1270":1,"1282":1,"1286":12,"1300":1,"1311":17,"1323":1,"1324":19,"1438":1,"1498":1,"1506":1,"1564":1,"1585":1,"1591":2,"1600":3,"1662":2,"1685":1,"1687":1,"1764":8,"1765":1,"1767":4,"1770":1,"1810":1,"2169":1}}],["currentisdirty",{"3":{"1577":1}}],["currentdevicesessionid",{"3":{"1436":1}}],["currentdomain",{"3":{"1286":1}}],["currentfixtimeout",{"3":{"1417":2}}],["currentformatversion",{"3":{"1300":1,"1323":1,"1415":1}}],["currentgeneration",{"3":{"1395":3}}],["currentcount",{"3":{"1395":2}}],["currentculture",{"3":{"265":5,"1300":1,"1324":11,"1395":4,"1396":5,"1402":1,"1417":1,"1591":2,"1600":1}}],["currenteditcontext",{"3":{"1324":1}}],["currenteventdefaultstests",{"3":{"1199":1,"1207":2}}],["currenteventdefaults",{"2":{"1348":1,"1391":1},"3":{"1199":5,"1203":1,"1207":2,"1348":2,"1350":7,"1391":1,"1395":6,"1496":1}}],["currenteventselectortests",{"3":{"1199":1,"1207":3,"1437":1}}],["currenteventselector",{"2":{"1348":1,"1383":1,"1392":1,"1393":2,"1401":1},"3":{"1199":16,"1203":1,"1207":2,"1348":6,"1350":28,"1355":1,"1356":1,"1359":7,"1383":1,"1392":2,"1393":2,"1395":28,"1396":4,"1401":1,"1496":1}}],["currenteventnotificationscopeprovidertests",{"2":{"1487":1},"3":{"1199":1,"1207":2,"1396":1,"1438":1,"1487":1}}],["currenteventnotificationscopeprovider",{"2":{"1305":1},"3":{"1199":3,"1203":1,"1207":2,"1305":2,"1309":2,"1324":2,"1396":7,"1438":1}}],["currentpasswordfield",{"3":{"1436":1}}],["currentpassword",{"3":{"1300":2,"1324":1,"1415":3,"1436":1,"1641":1}}],["currentpagestate",{"3":{"1324":2}}],["currentpage",{"3":{"1227":1,"1229":2,"1324":9,"1417":1,"1526":1,"1631":1,"1805":1}}],["currentmultifactormethod",{"3":{"1300":2}}],["currentsessionid",{"3":{"1300":7}}],["currentsaveuserid",{"3":{"1273":1,"1274":1,"1286":5}}],["currenttransaction",{"3":{"1286":3}}],["currenttype",{"3":{"1247":1}}],["currenttenantid",{"2":{"1851":1},"3":{"698":3,"1237":2,"1276":3,"1286":10,"1851":2}}],["currentvalues",{"3":{"1286":1}}],["currentvalue",{"3":{"698":1,"715":1,"1231":1,"1237":1,"1274":1,"1286":3}}],["currentuiculture",{"3":{"265":7,"1324":6,"1416":2,"1417":5}}],["currentuserrole",{"3":{"725":1,"1322":1,"1323":5,"1415":10}}],["currentuserid",{"2":{"727":1},"3":{"725":1,"727":1,"1311":1,"1322":1,"1323":3,"1324":2,"1415":6}}],["currentuserservicetests",{"3":{"1199":1,"1207":4}}],["currentuserserviceadditionaltests",{"3":{"1199":1,"1207":2}}],["currentuserserviceextensionstests",{"3":{"1199":1,"1207":2,"1271":2}}],["currentuserserviceextensions",{"2":{"1373":1},"3":{"388":2,"980":1,"1199":3,"1203":2,"1207":4,"1208":2,"1271":11,"1350":2,"1373":3,"1380":19,"1396":8,"1496":1}}],["currentuserservice",{"2":{"303":1,"1208":1,"1296":1,"1308":1,"1359":1,"1380":1},"3":{"303":1,"318":1,"1199":8,"1203":1,"1207":2,"1208":2,"1259":2,"1271":3,"1286":6,"1287":1,"1296":6,"1300":23,"1308":1,"1309":2,"1311":10,"1318":1,"1323":1,"1359":15,"1372":1,"1380":16,"1396":7,"1402":1,"1415":3}}],["currentuser",{"3":{"121":1,"126":1,"1270":6,"1415":2}}],["currentusertargetingcontextaccessortests",{"3":{"1199":1,"1207":2,"1438":2}}],["currentusertargetingcontextaccessor",{"2":{"303":1,"2140":1},"3":{"0":1,"303":2,"1199":3,"1203":1,"1207":2,"1300":2,"1311":7,"2140":3}}],["currently",{"3":{"54":1,"72":1,"85":1,"135":1,"273":1,"306":1,"370":1,"422":1,"547":1,"678":1,"751":2,"800":1,"811":1,"839":1,"996":1,"1018":1,"1229":1,"1247":1,"1259":1,"1270":2,"1271":1,"1286":7,"1300":4,"1301":1,"1305":1,"1309":4,"1311":2,"1323":3,"1324":9,"1339":1,"1350":1,"1359":5,"1369":2,"1378":1,"1395":1,"1396":4,"1415":4,"1417":2,"1436":7,"1480":1,"1576":1,"1632":1,"1634":1,"1639":2,"1733":1,"1764":1,"1929":1,"2037":1,"2087":1,"2220":1}}],["currentoutboxorigin",{"2":{"26":1,"1253":1},"3":{"26":1,"1253":1,"1259":3,"1286":4}}],["current",{"0":{"720":1,"1348":1},"2":{"452":1,"453":1,"682":1,"1246":1,"1416":1,"1425":1},"3":{"0":5,"25":1,"27":2,"29":1,"39":1,"57":1,"63":1,"74":1,"86":1,"87":1,"100":1,"112":1,"115":1,"137":2,"140":1,"142":1,"145":4,"152":2,"157":1,"164":1,"173":1,"181":1,"198":1,"202":1,"220":1,"227":1,"250":1,"251":1,"252":2,"254":1,"256":1,"257":2,"258":1,"259":1,"263":1,"273":1,"281":2,"285":3,"308":1,"309":1,"310":2,"311":1,"312":4,"328":1,"336":2,"337":1,"341":1,"342":1,"345":1,"353":2,"354":1,"359":5,"360":2,"361":1,"364":1,"365":5,"366":1,"375":1,"393":1,"395":8,"397":1,"407":1,"429":1,"434":1,"448":1,"451":1,"452":1,"453":1,"463":1,"464":2,"465":1,"466":1,"474":1,"476":1,"483":1,"497":4,"499":1,"502":1,"507":1,"512":1,"514":1,"520":1,"526":2,"534":1,"540":1,"552":2,"554":3,"559":1,"562":1,"567":1,"574":1,"583":1,"609":1,"613":1,"618":1,"621":1,"624":1,"629":1,"635":1,"649":1,"669":1,"682":1,"684":2,"696":2,"703":1,"707":2,"710":1,"714":1,"716":1,"720":1,"761":1,"777":1,"794":2,"810":1,"814":1,"825":4,"827":1,"833":2,"841":1,"849":1,"850":1,"873":1,"876":1,"877":1,"895":1,"905":3,"906":2,"907":1,"909":2,"910":1,"912":2,"914":1,"927":1,"945":1,"946":1,"949":1,"960":1,"994":1,"996":1,"1018":2,"1021":3,"1062":1,"1065":1,"1067":1,"1069":1,"1085":1,"1086":1,"1095":1,"1111":1,"1116":2,"1117":1,"1119":2,"1127":1,"1128":1,"1139":1,"1140":3,"1141":1,"1145":1,"1167":1,"1171":1,"1178":1,"1192":2,"1202":1,"1203":1,"1212":1,"1220":1,"1229":3,"1232":1,"1237":5,"1246":2,"1247":2,"1251":1,"1259":4,"1260":1,"1262":1,"1264":1,"1270":8,"1271":2,"1273":1,"1275":1,"1276":2,"1282":1,"1284":2,"1286":43,"1287":1,"1298":1,"1300":31,"1301":1,"1309":5,"1311":23,"1312":2,"1318":1,"1323":13,"1324":43,"1332":1,"1333":1,"1337":1,"1339":19,"1342":1,"1349":1,"1350":5,"1356":2,"1357":2,"1359":16,"1364":1,"1380":1,"1391":1,"1392":2,"1395":50,"1396":22,"1401":1,"1402":6,"1415":16,"1416":12,"1417":31,"1425":2,"1427":7,"1431":1,"1435":1,"1436":21,"1437":1,"1438":5,"1447":1,"1451":1,"1453":1,"1455":2,"1461":1,"1465":1,"1467":4,"1473":1,"1476":2,"1478":1,"1479":1,"1481":1,"1484":2,"1487":3,"1488":1,"1492":1,"1496":33,"1500":1,"1521":1,"1526":2,"1531":1,"1561":1,"1570":1,"1571":2,"1572":1,"1577":3,"1589":1,"1591":3,"1600":1,"1610":1,"1627":1,"1630":4,"1631":2,"1632":4,"1638":1,"1639":5,"1640":2,"1641":7,"1648":2,"1661":1,"1664":1,"1686":2,"1716":1,"1744":1,"1747":1,"1748":1,"1749":1,"1764":1,"1765":3,"1767":1,"1805":1,"1813":1,"1839":1,"1844":1,"1860":1,"1871":1,"1872":2,"1904":1,"1905":1,"1933":1,"1936":1,"1948":1,"1988":1,"2001":2,"2011":1,"2020":1,"2025":1,"2038":1,"2047":1,"2061":1,"2074":1,"2079":1,"2085":2,"2098":1,"2103":1,"2134":1,"2135":1,"2144":5,"2148":1,"2165":1,"2192":1,"2227":1}}],["curiously",{"3":{"1237":1,"1286":1,"1300":1,"1436":1}}],["curl",{"3":{"387":1,"426":1,"757":1,"1455":1,"1467":1,"1874":1}}],["curating",{"3":{"1395":1}}],["curation",{"3":{"184":1,"186":1,"1348":1,"1350":1,"1359":3,"1377":1,"1380":6,"1621":2,"1627":1}}],["curates",{"3":{"1340":1,"1380":1,"1405":1,"1415":2}}],["curated",{"3":{"265":1,"1324":1,"1350":1,"1630":1}}],["curate",{"3":{"185":1,"1347":1,"1415":1,"1960":1}}],["curve",{"3":{"22":1,"23":2,"27":1,"709":1,"1300":1,"1833":1,"1958":1}}],["cursor",{"3":{"0":1,"549":3,"1228":5,"1229":21,"1272":1,"1278":1,"1286":16,"1438":4,"1664":1}}],["custommetrics",{"3":{"1467":1}}],["customdomainexception",{"3":{"1436":2}}],["customdeleteorderhandler",{"3":{"1199":2,"1207":1}}],["customincreaseorderhandler",{"3":{"1199":2,"1207":1}}],["customize",{"3":{"1416":1}}],["customizes",{"3":{"1355":1,"1436":1,"1438":1}}],["customized",{"3":{"749":1,"1436":1,"1438":1,"1825":1}}],["customizing",{"3":{"1311":2}}],["customization",{"3":{"471":1,"749":1,"751":1,"1311":4,"1436":3,"1438":1}}],["customloggingintegrationeventhandler",{"3":{"1199":2,"1207":1}}],["customschemacontext",{"3":{"1199":2,"1207":1}}],["customexceptionthrowingfixture",{"3":{"1199":2,"1207":1,"1436":2}}],["customerinvariants",{"2":{"1810":1},"3":{"1767":2,"1810":1}}],["customeridentifiertype",{"3":{"1771":1,"1810":1}}],["customerid",{"2":{"42":1},"3":{"42":1,"96":1,"318":1,"782":1,"1198":2,"1199":10,"1207":2,"1600":1,"1747":1,"1749":2,"1764":5,"1765":2,"1769":2,"1810":2,"1996":5}}],["customername",{"2":{"1686":1},"3":{"1684":1,"1686":14,"1727":4}}],["customerdetail",{"3":{"1591":2,"1596":1,"1600":1}}],["customerbuilder",{"3":{"1436":1}}],["customerlookupservice",{"3":{"1324":1}}],["customerlist",{"3":{"1324":1,"1591":2}}],["customervalidationrules",{"3":{"1271":1}}],["customeremailrules",{"3":{"1271":1,"1596":1}}],["customererasedhandlertests",{"3":{"1591":1}}],["customererasedhandler",{"2":{"391":1,"1748":1,"1922":1},"3":{"391":3,"897":1,"1259":2,"1748":1,"1765":1,"1769":1,"1922":1}}],["customererased",{"2":{"76":1,"391":1,"1597":1,"1748":1,"1751":1,"1769":1},"3":{"76":1,"80":2,"195":2,"391":1,"1591":3,"1596":1,"1597":1,"1748":1,"1751":1,"1765":1,"1769":2,"1922":1}}],["customerrenamedv3",{"3":{"1199":4,"1207":1}}],["customerrenamedv2",{"3":{"1199":6,"1207":1}}],["customerrenamedv1",{"3":{"1199":7,"1207":1}}],["customercreate",{"3":{"1596":2}}],["customercreaterequestvalidator",{"3":{"1271":2}}],["customercreaterequest",{"3":{"1270":1}}],["customerchangeaddressrequestvalidator",{"2":{"1271":1},"3":{"1271":3}}],["customerchanged",{"2":{"1747":1},"3":{"782":1,"1747":5,"1769":1}}],["customerconfiguration",{"3":{"657":2,"660":2,"1237":5,"1286":2,"1767":1,"1810":1}}],["customercontactlookupguard",{"2":{"103":1,"1596":1},"3":{"103":1,"1596":1}}],["customerservice",{"3":{"545":1,"550":1,"881":1,"1324":1}}],["customerscontroller",{"2":{"318":2,"324":3,"326":1},"3":{"318":8,"324":4,"326":2,"1300":4,"1311":4,"1874":1,"1996":8}}],["customersmanage",{"2":{"318":1,"324":1,"326":1,"1996":1},"3":{"318":4,"324":1,"326":1,"1311":1,"1996":1}}],["customersgrpcservice",{"2":{"103":1,"1589":1,"1596":1},"3":{"103":2,"1589":1,"1591":1,"1596":1}}],["customers",{"2":{"1757":1},"3":{"80":1,"317":1,"318":1,"320":1,"324":1,"545":1,"583":1,"657":1,"782":1,"1237":2,"1271":5,"1312":1,"1436":1,"1591":1,"1742":2,"1746":5,"1747":13,"1749":1,"1750":6,"1753":1,"1757":1,"1761":3,"1763":1,"1764":2,"1765":1,"1768":2,"1770":1,"1773":1,"1776":2,"1995":1,"1997":1}}],["customer",{"0":{"1754":1,"1759":1,"1851":1},"2":{"320":1,"655":1,"660":1,"924":1,"1747":3,"1757":2,"1761":1,"1771":1,"1983":1,"1993":1,"1997":1,"2115":1},"3":{"0":3,"42":2,"103":1,"188":1,"230":1,"317":3,"318":10,"320":2,"324":1,"326":1,"459":1,"536":2,"539":1,"544":1,"545":1,"655":1,"657":5,"660":1,"697":2,"699":1,"743":2,"782":1,"793":1,"809":1,"897":2,"900":1,"924":1,"990":1,"1026":1,"1237":8,"1259":1,"1270":3,"1271":2,"1286":3,"1288":1,"1297":1,"1300":7,"1310":1,"1323":4,"1339":1,"1395":1,"1427":1,"1436":5,"1488":2,"1577":1,"1589":2,"1591":3,"1595":1,"1596":4,"1597":1,"1600":1,"1686":7,"1687":1,"1701":1,"1727":1,"1746":5,"1747":17,"1748":5,"1749":4,"1750":9,"1751":3,"1754":1,"1755":1,"1757":5,"1759":1,"1760":3,"1761":3,"1763":1,"1764":24,"1765":29,"1767":15,"1768":21,"1769":11,"1770":3,"1771":8,"1772":1,"1773":2,"1775":2,"1776":5,"1777":4,"1851":2,"1875":1,"1906":1,"1907":1,"1964":1,"1983":1,"1993":6,"1994":2,"1995":2,"1996":10,"1997":3,"1998":1,"2112":1,"2115":2,"2163":1,"2165":1,"2167":2,"2183":2,"2191":1,"2222":1}}],["custom",{"3":{"0":4,"135":1,"216":3,"220":1,"273":1,"275":1,"335":1,"350":1,"355":1,"396":1,"397":1,"398":1,"399":1,"418":3,"420":2,"422":3,"481":1,"640":1,"645":1,"672":3,"676":1,"698":1,"735":1,"905":1,"1075":1,"1076":1,"1077":1,"1185":1,"1212":2,"1241":3,"1247":4,"1269":1,"1270":1,"1286":2,"1288":1,"1296":1,"1298":1,"1300":2,"1309":2,"1310":1,"1311":7,"1323":6,"1324":11,"1336":1,"1339":7,"1350":4,"1359":4,"1380":2,"1415":1,"1416":4,"1417":4,"1436":21,"1488":1,"1526":1,"1557":1,"1558":1,"1641":1,"1965":1,"1969":1,"1972":1,"1976":2,"2077":2,"2080":1,"2154":1,"2158":1,"2234":1}}],["cut",{"0":{"1932":1},"3":{"396":1,"397":2,"530":1,"610":1,"881":1,"914":1,"1044":1,"1161":1,"1254":1,"1259":2,"1277":1,"1311":1,"1324":3,"1352":1,"1359":1,"1367":1,"1395":1,"1396":2,"1417":1,"1436":7,"1454":2,"1456":1,"1467":4,"1491":1,"1496":1,"1526":1,"1534":2,"1653":1,"1661":1,"1677":2,"1695":1,"1727":1,"1736":1,"1783":1,"1788":1,"1841":1,"1941":1,"2011":2,"2064":1,"2211":1}}],["cutoffs",{"3":{"1160":1}}],["cutoff",{"3":{"24":1,"536":2,"905":1,"1162":1,"1254":1,"1256":1,"1259":5,"1286":2,"1712":2,"1713":1,"2044":1,"2169":4}}],["cutover",{"0":{"1473":1,"1478":1},"3":{"0":3,"25":2,"27":1,"57":1,"193":1,"198":1,"422":1,"425":1,"426":1,"429":1,"1192":2,"1300":1,"1416":2,"1436":1,"1466":1,"1467":4,"1470":1,"1471":4,"1473":5,"1474":1,"1478":8,"1482":3,"1483":4,"1484":3,"1496":1,"1534":2,"1577":2}}],["cuts",{"3":{"18":1,"409":1,"1259":1,"1286":1,"1311":2,"1324":1,"1351":1,"1467":1,"1831":1,"2160":1}}],["cutting",{"0":{"1362":1,"1753":1,"1774":1,"2068":1,"2210":1},"3":{"0":5,"57":1,"116":2,"117":1,"119":1,"122":1,"265":1,"396":1,"826":1,"834":1,"906":1,"914":1,"1011":1,"1191":1,"1192":1,"1200":1,"1202":1,"1203":1,"1210":1,"1212":2,"1216":1,"1231":1,"1232":1,"1259":1,"1260":1,"1261":2,"1267":1,"1270":4,"1271":3,"1273":1,"1281":1,"1286":10,"1300":1,"1309":3,"1311":5,"1312":1,"1313":1,"1316":1,"1323":2,"1324":8,"1326":1,"1338":1,"1339":2,"1350":1,"1359":4,"1395":2,"1396":2,"1415":4,"1428":1,"1431":1,"1436":7,"1437":3,"1450":1,"1496":1,"1502":1,"1507":1,"1509":1,"1526":2,"1534":1,"1536":2,"1542":1,"1547":1,"1565":1,"1571":1,"1577":4,"1591":1,"1599":1,"1630":1,"1656":1,"1662":1,"1664":2,"1780":1,"1796":1,"1810":1,"1818":2,"1819":1,"1820":1,"1827":3,"1834":1,"1856":1,"1879":1,"1914":1,"1916":1,"1937":1,"1941":1,"2009":1,"2023":1,"2071":1,"2072":1,"2076":1,"2094":1,"2098":1,"2136":1,"2141":3,"2150":1,"2213":1,"2222":2,"2232":1,"2234":1}}],["ccpa",{"3":{"0":1,"38":1,"1212":2,"1230":1,"1237":1,"1299":1,"1311":1,"1323":2,"1436":1,"1489":1,"1499":1,"1567":1,"1747":1,"1765":1,"2062":1,"2063":1,"2071":1,"2223":1,"2232":1,"2234":1}}],["camps",{"3":{"2227":1}}],["camp",{"3":{"1788":1}}],["camel",{"3":{"1686":2,"1727":2}}],["camelcasing",{"3":{"1311":1}}],["camelcased",{"3":{"1311":1,"1324":1}}],["camelcasename",{"3":{"1247":3}}],["camelcase",{"2":{"741":1,"2090":1},"3":{"0":1,"741":2,"1214":1,"1242":2,"1244":1,"1247":6,"1300":1,"1311":6,"1324":3,"1396":1,"1416":1,"1436":1,"2090":1}}],["came",{"3":{"26":1,"284":1,"291":1,"610":1,"633":1,"732":1,"743":1,"905":1,"941":1,"1081":1,"1083":1,"1091":1,"1115":1,"1247":2,"1253":1,"1259":4,"1286":3,"1300":1,"1301":2,"1311":2,"1312":1,"1323":1,"1324":7,"1339":1,"1350":1,"1359":2,"1369":2,"1395":1,"1396":1,"1402":1,"1417":2,"1436":3,"1438":2,"1467":1,"1474":1,"1476":1,"1728":1,"1764":1,"1790":1,"1926":1,"2099":1,"2159":1,"2188":1,"2206":1}}],["camerabarcodereaderview",{"3":{"1417":2}}],["cameras",{"3":{"1396":1,"1417":1}}],["camera=",{"3":{"214":1,"2151":1}}],["cameradescription",{"2":{"684":1},"3":{"0":1,"682":1,"684":1,"1416":1,"1417":3}}],["camera",{"2":{"681":1},"3":{"0":2,"413":2,"426":1,"439":1,"681":4,"682":4,"683":3,"684":1,"689":1,"690":1,"1212":1,"1323":1,"1339":1,"1395":1,"1396":12,"1414":1,"1415":1,"1416":3,"1417":58,"1438":2,"1627":1,"2128":1,"2234":2}}],["ca5392",{"2":{"1524":1},"3":{"1524":1,"1526":2,"1531":1}}],["ca5394",{"3":{"1259":1,"1324":1}}],["ca5359",{"3":{"1416":1}}],["ca5404",{"3":{"1300":1}}],["ca1822",{"3":{"1416":1}}],["ca1859",{"3":{"1300":1}}],["ca1819",{"3":{"1237":2,"1300":1,"1311":1,"1350":2,"1415":1}}],["ca1721",{"3":{"1300":1}}],["ca1708",{"3":{"0":1,"258":1,"980":1,"981":1,"982":1,"983":1,"1311":3,"1312":1,"1324":4,"1339":11,"1436":2,"1488":1}}],["ca1068",{"3":{"1436":1}}],["ca1008",{"3":{"1350":1,"1369":1,"1396":1}}],["ca1000",{"3":{"1237":1}}],["ca1055",{"3":{"1324":1}}],["ca1056",{"3":{"1300":1,"1324":1}}],["ca1054",{"3":{"1237":1,"1324":2,"1359":1,"1415":1}}],["ca1032",{"3":{"1312":4}}],["ca1033",{"3":{"1270":1}}],["ca1031",{"3":{"692":1,"1247":1,"1270":1,"1309":3,"1311":1,"1324":2,"1339":2,"1395":1,"1396":2,"1416":1,"1417":5,"1427":1,"1934":1}}],["ca1308",{"3":{"972":1,"1237":1,"1300":3,"1323":1,"1359":1,"1395":1,"1436":1}}],["ca2100",{"3":{"1436":2,"1490":1}}],["ca2000",{"3":{"1311":1,"1323":1,"1427":2}}],["ca2007",{"1":{"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1},"2":{"481":1,"482":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1},"3":{"0":2,"479":1,"481":1,"482":3,"483":2,"486":3,"487":3,"488":2,"489":3,"490":7,"491":7,"492":7,"493":6,"494":1,"1212":1,"2234":1}}],["ca2227",{"3":{"674":1,"1323":1}}],["cautious",{"3":{"1359":1,"1415":1}}],["cautionary",{"3":{"2026":1}}],["caution",{"3":{"543":2,"550":1,"1496":1}}],["caught",{"3":{"21":1,"39":2,"110":1,"178":1,"235":3,"237":1,"345":1,"361":1,"427":1,"459":2,"558":1,"618":2,"675":2,"725":1,"759":1,"776":1,"819":1,"837":1,"854":1,"863":1,"883":1,"896":1,"901":1,"916":1,"941":2,"966":1,"1034":1,"1036":1,"1067":1,"1168":1,"1170":1,"1229":2,"1236":1,"1247":1,"1269":1,"1270":4,"1286":4,"1300":1,"1301":2,"1311":3,"1312":2,"1323":4,"1324":13,"1339":5,"1358":1,"1359":7,"1366":1,"1369":1,"1380":2,"1395":6,"1396":5,"1402":1,"1415":2,"1416":1,"1417":4,"1427":2,"1436":17,"1453":1,"1459":1,"1465":1,"1496":3,"1534":1,"1546":1,"1673":1,"1686":1,"1800":1,"1801":1,"1810":1,"1844":1,"1852":1,"1873":1,"1909":1,"1933":1,"1940":1,"2033":1,"2087":1}}],["causes",{"3":{"1222":1,"1324":1,"1339":1,"1359":1,"1415":1,"2003":1,"2015":1}}],["caused",{"3":{"451":1,"556":1,"789":1,"790":1,"981":1,"1006":1,"1066":1,"1300":1,"1311":2,"1323":1,"1324":1,"1359":4,"1396":3,"1402":1,"1425":1,"1427":1,"1436":1,"1473":1,"1534":1,"1665":1,"2179":1}}],["cause",{"3":{"0":1,"156":1,"343":2,"915":1,"948":1,"1065":1,"1286":2,"1300":1,"1309":1,"1311":2,"1323":2,"1339":1,"1395":2,"1415":1,"1417":1,"1436":2,"1438":4,"1467":2,"1476":1,"1490":1,"1686":1,"1876":1,"1913":1,"1934":1,"1969":1,"1989":1,"1990":1}}],["caveats",{"3":{"1191":1,"1193":1,"1229":7,"1237":18,"1247":14,"1259":13,"1270":39,"1271":6,"1286":51,"1300":49,"1301":8,"1309":7,"1310":5,"1311":33,"1312":4,"1323":49,"1324":58,"1339":53,"1350":35,"1359":177,"1369":7,"1380":9,"1395":44,"1396":90,"1402":16,"1415":41,"1416":7,"1417":27,"1427":3,"1436":93,"1577":1,"1591":1,"2135":1}}],["caveat",{"3":{"0":1,"135":1,"159":1,"188":1,"197":1,"245":3,"283":1,"320":1,"352":1,"361":1,"446":1,"450":2,"461":1,"558":1,"574":1,"601":1,"605":1,"607":1,"611":2,"642":1,"667":2,"751":1,"821":1,"829":1,"863":3,"865":1,"998":1,"1010":2,"1231":1,"1236":1,"1259":1,"1270":2,"1282":1,"1286":2,"1296":1,"1301":1,"1310":1,"1318":1,"1323":1,"1324":1,"1326":1,"1334":1,"1339":3,"1359":4,"1369":1,"1395":3,"1396":1,"1402":1,"1422":1,"1423":1,"1436":1,"1440":1,"1468":1,"1496":3,"1591":2,"1599":2,"1891":1,"1923":1,"1964":1,"1997":1,"2064":1,"2070":1,"2079":1,"2116":1,"2133":1,"2134":2,"2140":1}}],["cash",{"3":{"1765":1}}],["cashed",{"3":{"1436":1,"1474":1}}],["casting",{"3":{"1286":1,"1300":1,"1396":3,"1399":1,"1401":1,"1402":4,"1417":1}}],["cast",{"3":{"1237":3,"1247":3,"1259":1,"1268":1,"1270":1,"1272":1,"1286":3,"1300":1,"1301":1,"1309":1,"1312":1,"1313":1,"1323":1,"1324":5,"1339":1,"1380":1,"1395":1,"1396":4,"1397":1,"1401":1,"1402":13,"1415":2,"1436":4}}],["casts",{"3":{"1229":1,"1237":1,"1259":1,"1270":1,"1286":1,"1323":1,"1324":1,"1380":1,"1402":2,"1436":1,"1632":1}}],["castvoteasync",{"3":{"1396":4,"1402":1}}],["castvoterequest",{"3":{"1199":4,"1203":1,"1207":2,"1396":2,"1402":6}}],["castvotecommandvalidatortests",{"3":{"1199":1,"1207":2}}],["castvotecommandvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1402":5}}],["castvotecommand",{"3":{"1199":8,"1203":1,"1207":2,"1396":2,"1402":8}}],["castvote",{"3":{"1150":1,"1203":3,"1207":6,"1398":1,"1402":11,"1496":2}}],["castvotehandlertests",{"3":{"1199":1,"1207":3,"1436":2}}],["castvotehandler",{"2":{"383":1},"3":{"383":1,"1150":1,"1156":1,"1199":2,"1203":1,"1207":2,"1396":1,"1398":3,"1399":2,"1401":1,"1402":19,"1496":1}}],["casualty",{"3":{"751":1}}],["casings",{"3":{"1247":1}}],["casing",{"3":{"135":1,"572":1,"574":1,"585":1,"964":1,"1089":1,"1094":1,"1247":3,"1286":1,"1300":1,"1323":4,"1324":1,"1350":1,"1359":3,"1395":2,"1396":1,"1405":1,"1410":1,"1415":6,"1416":1,"1436":1,"1438":2,"1453":1,"1455":1,"1631":1}}],["cascadingforeignkeysareexplicitlyoptedin",{"3":{"1436":4}}],["cascadingparameterattribute",{"3":{"1436":1}}],["cascadingparameter",{"3":{"1324":2,"1396":2,"1436":1}}],["cascadingauthenticationstate",{"2":{"1641":1,"2080":1},"3":{"1324":1,"1396":2,"1436":1,"1641":1,"2080":1}}],["cascadingchild",{"3":{"1199":3,"1207":1}}],["cascadingdeletes",{"2":{"1083":1},"3":{"1083":1,"1436":3}}],["cascading",{"3":{"0":1,"39":1,"556":1,"954":1,"1081":1,"1116":1,"1168":1,"1281":1,"1286":2,"1301":1,"1324":2,"1359":1,"1395":6,"1396":2,"1402":3,"1432":1,"1436":12,"1488":2,"1491":2,"1556":1,"1639":1,"1662":1,"1776":1,"2065":1,"2234":1}}],["cascaded",{"3":{"1323":1,"1350":1,"1359":2,"1391":1,"1395":3,"1396":1,"1438":1,"1492":1}}],["cascadedelete",{"2":{"1116":1,"1346":1},"3":{"1116":1,"1346":1,"1350":4,"1359":2}}],["cascadefixtures",{"3":{"1207":21,"1436":43}}],["cascadechildfixture",{"3":{"1199":7,"1207":1,"1436":12}}],["cascadesoftdelete",{"3":{"1207":1,"1436":9,"1489":1,"1577":1}}],["cascadesoftdeleteconventiontests",{"3":{"1199":2,"1207":4,"1436":19,"1489":2,"1577":1}}],["cascadesoftdeleteconventiontestsbase",{"3":{"1199":3,"1207":2,"1436":11,"1586":2}}],["cascadesoftdeletefitnesstests",{"3":{"1199":1,"1207":3,"1436":31,"1489":1}}],["cascades",{"3":{"0":1,"1082":1,"1084":1,"1087":1,"1231":1,"1237":2,"1270":1,"1281":1,"1286":1,"1323":1,"1346":2,"1350":2,"1359":2,"1380":1,"1395":1,"1398":1,"1402":1,"1431":1,"1432":1,"1436":10,"1455":1,"1489":1,"1490":1,"1496":1,"1544":1,"1635":1,"1638":2,"2056":1,"2065":1}}],["cascade",{"0":{"1346":1},"2":{"1082":1,"1083":1,"1281":1,"2065":1},"3":{"0":7,"27":1,"37":1,"39":2,"43":3,"459":1,"926":1,"1082":4,"1083":6,"1084":3,"1085":3,"1117":1,"1120":2,"1170":1,"1212":1,"1237":2,"1265":1,"1270":3,"1281":3,"1286":9,"1340":1,"1342":1,"1343":2,"1346":3,"1350":31,"1352":2,"1354":1,"1359":31,"1362":2,"1369":4,"1402":5,"1415":2,"1431":1,"1436":43,"1438":3,"1496":1,"1566":1,"1577":4,"1586":2,"1630":1,"1631":1,"1632":2,"1635":5,"1638":23,"1639":21,"1664":1,"1671":1,"1686":1,"1700":1,"1727":1,"1755":1,"1776":1,"1810":1,"2065":3}}],["caseoptedindefaultsource",{"3":{"1199":2,"1207":1}}],["casenosettings",{"3":{"1199":2,"1207":1}}],["casenooptin",{"3":{"1199":2,"1207":1}}],["casenamedsource",{"3":{"1199":3,"1207":2}}],["casemappingshape",{"3":{"1199":3,"1207":2}}],["caseenableddefaultsource",{"3":{"1199":2,"1207":1}}],["casewrongsource",{"3":{"1199":2,"1207":1}}],["caseidentity",{"3":{"1199":2,"1207":1}}],["caseconference",{"3":{"1199":2,"1207":1}}],["casedefaultsettings",{"3":{"1199":2,"1207":1}}],["cased",{"3":{"1091":1,"1247":2,"1323":1,"1324":1,"1339":1,"1350":1,"1359":2,"1395":1,"1425":1,"1427":1,"1436":1,"1488":1}}],["case",{"0":{"1246":1,"1322":1,"1352":1,"1952":1,"2192":1},"2":{"1035":1},"3":{"0":10,"32":1,"42":1,"109":2,"116":2,"117":1,"121":1,"126":3,"133":1,"135":2,"136":1,"150":1,"156":1,"157":1,"158":1,"160":1,"175":1,"186":1,"189":1,"196":1,"197":1,"201":1,"225":1,"227":1,"245":2,"246":1,"249":1,"301":1,"318":2,"333":1,"340":1,"358":1,"379":1,"386":1,"389":1,"390":1,"391":1,"396":1,"402":1,"435":1,"460":1,"461":1,"473":1,"517":2,"519":1,"534":1,"539":1,"540":1,"544":1,"564":1,"582":1,"583":1,"585":4,"586":1,"601":1,"609":2,"633":3,"650":1,"667":1,"683":1,"690":2,"709":1,"737":1,"741":1,"749":1,"765":1,"766":1,"782":1,"789":1,"791":1,"799":1,"802":1,"810":1,"811":1,"820":1,"821":1,"827":1,"831":1,"861":1,"863":1,"864":2,"875":1,"881":2,"883":2,"889":1,"897":2,"898":1,"905":2,"907":1,"926":2,"933":1,"938":1,"939":1,"940":1,"964":1,"965":1,"972":1,"974":1,"980":1,"982":1,"988":1,"1003":1,"1004":1,"1018":11,"1019":2,"1020":6,"1034":1,"1035":1,"1045":1,"1049":1,"1050":1,"1060":1,"1091":4,"1099":1,"1101":1,"1108":2,"1109":2,"1112":1,"1116":1,"1123":1,"1155":1,"1177":1,"1212":1,"1220":1,"1221":1,"1223":2,"1229":4,"1234":2,"1235":1,"1237":10,"1241":1,"1242":1,"1246":1,"1247":22,"1250":1,"1259":11,"1260":3,"1261":1,"1263":5,"1264":4,"1269":1,"1270":16,"1271":9,"1273":1,"1276":1,"1278":1,"1281":2,"1286":44,"1290":1,"1293":1,"1295":1,"1296":1,"1297":2,"1300":46,"1301":7,"1306":1,"1309":7,"1310":2,"1311":20,"1312":7,"1313":1,"1315":2,"1318":1,"1323":25,"1324":45,"1331":1,"1332":2,"1334":1,"1337":1,"1339":28,"1342":1,"1344":1,"1350":16,"1352":1,"1353":1,"1355":1,"1358":1,"1359":85,"1362":1,"1365":1,"1369":5,"1372":1,"1378":1,"1380":6,"1383":2,"1392":1,"1395":29,"1396":28,"1398":1,"1402":16,"1403":1,"1404":1,"1405":1,"1415":33,"1416":6,"1417":10,"1420":1,"1427":18,"1431":2,"1432":1,"1433":1,"1435":10,"1436":87,"1438":18,"1443":1,"1453":2,"1455":8,"1456":1,"1458":1,"1459":1,"1467":2,"1470":1,"1474":1,"1480":1,"1486":1,"1487":1,"1488":1,"1489":2,"1492":14,"1496":7,"1512":1,"1526":6,"1531":1,"1534":1,"1535":1,"1540":1,"1542":1,"1568":1,"1577":4,"1582":1,"1583":1,"1600":1,"1617":1,"1630":2,"1631":6,"1632":2,"1635":2,"1638":1,"1639":2,"1640":2,"1641":5,"1649":1,"1651":3,"1667":1,"1678":1,"1686":3,"1697":1,"1708":1,"1727":4,"1730":1,"1731":4,"1749":1,"1755":1,"1768":3,"1776":1,"1779":1,"1805":1,"1810":1,"1815":1,"1817":1,"1818":2,"1820":1,"1823":2,"1825":1,"1827":1,"1830":1,"1840":1,"1845":1,"1849":1,"1853":3,"1856":1,"1858":1,"1867":2,"1874":1,"1898":1,"1903":1,"1909":3,"1910":1,"1914":3,"1922":1,"1923":2,"1941":1,"1962":1,"1964":1,"1970":1,"1977":1,"1984":1,"1988":1,"1994":1,"1995":2,"2001":1,"2003":1,"2026":1,"2031":1,"2035":1,"2044":3,"2049":1,"2068":1,"2072":1,"2085":1,"2089":1,"2094":1,"2097":1,"2098":1,"2107":1,"2108":1,"2110":2,"2111":1,"2116":1,"2119":1,"2120":1,"2125":1,"2136":2,"2137":1,"2138":1,"2141":1,"2143":2,"2151":1,"2156":1,"2160":1,"2161":1,"2162":1,"2165":1,"2167":1,"2169":2,"2178":2,"2185":1,"2191":1,"2192":1,"2195":1,"2199":1,"2234":1,"2236":1}}],["casesettingsonly",{"3":{"1199":2,"1207":1}}],["cases",{"0":{"1632":1,"1768":1},"1":{"1351":1,"1352":1,"1353":1,"1354":1,"1355":1,"1356":1,"1357":1,"1358":1,"1359":1},"3":{"0":1,"33":1,"126":1,"135":1,"136":1,"138":1,"142":1,"160":1,"314":1,"324":1,"335":1,"350":1,"365":1,"466":1,"539":1,"656":1,"790":1,"791":1,"794":1,"845":1,"972":1,"988":1,"998":1,"1018":3,"1020":1,"1050":1,"1091":1,"1116":1,"1192":2,"1201":1,"1202":3,"1203":3,"1217":1,"1219":1,"1229":4,"1237":1,"1247":3,"1260":2,"1263":1,"1270":1,"1271":1,"1286":9,"1300":8,"1303":1,"1306":1,"1309":3,"1311":3,"1322":1,"1323":4,"1324":4,"1339":10,"1350":3,"1351":2,"1354":1,"1359":18,"1365":1,"1369":4,"1380":1,"1395":4,"1396":7,"1402":3,"1403":2,"1410":1,"1415":9,"1416":1,"1417":2,"1427":3,"1428":1,"1431":2,"1435":2,"1436":22,"1438":8,"1444":1,"1454":1,"1487":1,"1492":1,"1496":6,"1500":1,"1526":1,"1553":1,"1577":1,"1611":3,"1632":2,"1641":1,"1646":1,"1649":1,"1650":1,"1660":1,"1667":2,"1729":1,"1749":1,"1821":1,"1909":1,"1932":1,"1941":1,"1955":1,"1962":1,"1982":1,"2116":1,"2138":1,"2140":1,"2145":1,"2167":2,"2169":1}}],["caracteres",{"3":{"1685":2,"1686":2}}],["car",{"3":{"1416":1}}],["carve",{"3":{"200":1,"265":2,"317":1,"322":1,"324":1,"326":1,"562":1,"783":1,"862":1,"1286":2,"1375":1,"1380":2,"1402":1,"1431":1,"1433":2,"1436":1,"1465":1,"1467":1,"1496":1,"1577":1,"1630":1,"1635":1}}],["carved",{"3":{"200":1,"1323":1,"1441":1}}],["career",{"3":{"1395":1,"2222":1}}],["careless",{"3":{"1107":1,"1135":1,"1905":1,"1990":1}}],["carelessly",{"3":{"829":1}}],["careful",{"3":{"839":1,"1259":1,"1300":1,"1323":1,"1324":1,"1359":1,"1396":2,"1402":1,"1425":1,"1431":1,"1436":2,"1942":1,"2001":1,"2074":1,"2169":1}}],["carefully",{"3":{"365":1,"1234":1,"1237":1,"1259":1,"1270":1,"1301":1,"1323":1,"1324":1,"1332":1,"1341":1,"1344":1,"1350":2,"1359":2,"1396":2,"1415":2,"1436":1,"1467":1,"1486":1,"1803":1}}],["cares",{"3":{"784":1,"827":1,"1041":1,"1296":1,"1339":4,"1350":1,"1359":2,"1395":1,"1415":1,"1417":1,"1427":1,"1429":1,"1436":1,"2093":1,"2185":1}}],["care",{"3":{"55":1,"740":1,"842":1,"1194":1,"1229":1,"1255":1,"1259":1,"1273":1,"1312":1,"1323":1,"1324":1,"1359":1,"1396":1,"1436":2,"1453":1,"1782":1,"1783":1,"1792":1,"1882":1,"1905":1,"2093":1,"2109":1}}],["carte",{"3":{"1436":1}}],["cartesian",{"3":{"1286":3,"1863":1,"1864":1}}],["cartdrawer",{"3":{"1324":1,"1591":7,"1596":3,"1597":1,"1600":2,"1750":3,"1773":1}}],["cartbutton",{"3":{"1324":1,"1591":1,"1596":1,"1597":1}}],["carts",{"3":{"1297":1,"1742":1,"1750":2,"1761":1,"1763":1,"1768":2,"1773":2,"2112":1}}],["cartstateservice",{"2":{"879":1,"883":1,"884":1,"1599":1},"3":{"0":1,"879":1,"881":2,"883":1,"884":2,"1324":1,"1591":5,"1599":1,"1600":3}}],["cartid",{"3":{"1237":1}}],["cart",{"3":{"0":1,"318":1,"320":1,"535":1,"881":1,"990":1,"1025":1,"1026":2,"1027":3,"1028":1,"1237":1,"1270":1,"1300":1,"1311":1,"1324":2,"1436":2,"1577":1,"1591":5,"1596":1,"1599":2,"1600":3,"1712":1,"1713":2,"1714":1,"1741":1,"1742":2,"1746":5,"1748":1,"1749":18,"1750":20,"1751":1,"1753":1,"1754":2,"1755":2,"1757":1,"1758":1,"1759":1,"1761":1,"1763":1,"1764":13,"1765":17,"1767":8,"1768":12,"1769":2,"1771":2,"1773":10,"1775":2,"1776":10,"1996":5,"1997":1,"2079":1,"2163":1}}],["cardinalities",{"3":{"1640":1}}],["cardinality",{"3":{"0":2,"407":1,"897":2,"898":1,"1150":1,"1152":1,"1212":1,"1247":3,"1301":1,"1311":2,"1396":3,"1402":3,"1919":1}}],["cardclass",{"3":{"1324":1}}],["cardcontent",{"3":{"1324":1}}],["cardelevation",{"3":{"1324":1}}],["cardelementid",{"3":{"1324":1}}],["cardformatting",{"3":{"1324":1,"1591":2}}],["cardtemplate",{"3":{"1324":1}}],["card",{"3":{"539":1,"684":1,"685":1,"690":1,"881":2,"953":1,"1264":1,"1270":1,"1324":12,"1383":1,"1385":1,"1395":33,"1396":9,"1402":13,"1415":3,"1416":3,"1436":3,"1438":2,"1490":1,"1524":2,"1526":2,"1531":1,"1591":2,"1599":2,"1627":2,"1643":1,"1669":1,"1712":1,"1713":2,"1750":4,"1773":4,"2081":1}}],["cardsperpage",{"3":{"1395":1}}],["cardstyle",{"3":{"1324":1}}],["cardselector",{"3":{"1324":2}}],["cards",{"3":{"0":1,"1324":2,"1383":2,"1395":11,"1396":1,"1402":3,"1414":1,"1415":1,"1577":1,"1714":1,"1742":1,"1758":1,"1773":1}}],["carriage",{"3":{"885":1,"947":1}}],["carriertrackingurls",{"3":{"1767":1}}],["carriers",{"3":{"1286":1,"1300":1,"1313":1}}],["carrier",{"0":{"1219":1},"3":{"0":1,"340":1,"342":1,"672":1,"905":1,"1042":1,"1124":1,"1219":1,"1229":1,"1247":3,"1286":8,"1288":1,"1300":7,"1309":1,"1312":1,"1318":2,"1323":1,"1324":2,"1339":1,"1350":3,"1359":3,"1402":2,"1417":3,"1749":3,"1750":1,"1763":1,"1764":3,"1765":7,"1766":1,"1767":2,"1768":2,"1769":2,"1770":1,"1776":2,"1805":1,"2188":1}}],["carried",{"3":{"0":3,"77":1,"94":1,"99":2,"135":1,"201":2,"258":1,"265":1,"318":1,"400":1,"407":1,"447":1,"448":1,"455":1,"463":1,"464":2,"465":2,"492":1,"529":1,"536":1,"607":1,"626":1,"702":2,"707":1,"719":1,"743":1,"747":1,"800":1,"827":1,"839":1,"853":1,"867":1,"872":1,"921":1,"973":1,"980":1,"1006":2,"1010":2,"1012":1,"1014":3,"1024":1,"1054":1,"1065":1,"1075":1,"1099":2,"1212":1,"1229":2,"1247":2,"1263":1,"1264":1,"1270":1,"1286":8,"1300":16,"1311":6,"1312":1,"1321":1,"1323":8,"1324":8,"1339":4,"1344":1,"1349":1,"1350":7,"1359":14,"1369":3,"1380":4,"1395":9,"1396":16,"1402":3,"1413":1,"1415":7,"1417":4,"1427":2,"1432":1,"1436":5,"1455":1,"1467":3,"1478":1,"1489":1,"1496":1,"1526":1,"1531":1,"1578":1,"1591":1,"1634":1,"1737":1,"1764":1,"1805":1,"1825":1,"1854":1,"1995":1,"2044":1,"2051":1,"2128":1,"2132":1,"2133":1,"2169":1,"2178":1,"2205":1}}],["carrieshardenedsecurityheaders",{"3":{"1436":1}}],["carriesanactivehealthcheckprobingalive",{"3":{"1436":1}}],["carriesaservicetag",{"3":{"1436":1}}],["carriesnoinlinestyles",{"3":{"1436":2}}],["carriesservicecontractattribute",{"3":{"1312":1,"1436":3}}],["carries",{"0":{"95":1},"3":{"0":35,"1":1,"23":1,"24":1,"26":2,"39":2,"54":1,"55":1,"57":1,"61":1,"68":1,"72":1,"73":1,"78":1,"91":2,"93":1,"95":2,"109":2,"111":1,"115":1,"122":1,"123":1,"125":1,"126":2,"132":1,"135":1,"140":2,"141":1,"142":1,"149":1,"157":1,"165":1,"166":1,"168":1,"171":1,"173":1,"175":1,"180":2,"184":1,"186":3,"188":1,"189":1,"195":3,"197":1,"200":1,"212":1,"214":2,"215":1,"216":1,"217":1,"219":1,"220":1,"225":1,"229":2,"243":1,"255":2,"258":1,"259":1,"265":2,"275":1,"282":1,"284":1,"293":1,"295":1,"300":1,"302":1,"305":1,"308":1,"318":3,"324":1,"325":2,"326":1,"333":1,"341":5,"343":1,"346":2,"348":1,"349":1,"350":4,"353":3,"359":1,"360":1,"365":1,"372":1,"373":1,"374":1,"380":1,"384":1,"388":1,"392":1,"395":2,"399":1,"400":1,"401":1,"402":2,"403":1,"404":2,"405":1,"406":1,"407":1,"408":1,"418":3,"422":1,"423":2,"426":2,"439":1,"448":2,"451":1,"452":1,"458":1,"459":1,"461":1,"462":1,"470":1,"471":1,"474":1,"475":1,"476":1,"477":1,"484":1,"487":1,"488":2,"489":2,"490":2,"491":1,"492":2,"493":3,"494":4,"495":2,"499":1,"528":2,"536":2,"539":1,"543":1,"545":4,"546":1,"547":2,"549":2,"551":1,"556":1,"558":1,"564":3,"565":1,"572":4,"575":1,"578":1,"591":1,"599":5,"601":1,"604":1,"605":1,"607":2,"609":4,"618":2,"624":1,"625":1,"626":4,"631":1,"633":4,"634":1,"638":1,"640":3,"642":2,"649":1,"651":2,"656":1,"657":4,"659":1,"664":1,"668":1,"676":1,"689":1,"690":3,"691":2,"692":3,"698":3,"700":1,"702":1,"707":2,"709":1,"710":1,"713":1,"714":2,"720":1,"725":4,"733":1,"737":2,"741":1,"749":1,"757":2,"764":1,"766":4,"781":1,"782":7,"783":1,"784":2,"788":1,"790":4,"792":1,"793":1,"794":1,"799":2,"803":1,"804":2,"805":1,"806":1,"815":1,"818":1,"819":1,"825":1,"826":1,"827":2,"830":1,"833":2,"838":1,"848":1,"849":2,"850":1,"852":1,"854":1,"857":1,"859":1,"861":2,"876":2,"881":3,"889":1,"899":1,"903":1,"905":6,"907":1,"916":1,"920":1,"922":3,"924":1,"926":2,"931":1,"939":2,"944":1,"946":1,"948":2,"954":2,"959":1,"960":1,"962":1,"964":2,"971":1,"972":3,"988":1,"996":1,"1004":6,"1008":1,"1011":1,"1012":2,"1014":1,"1017":1,"1018":7,"1019":1,"1021":1,"1026":1,"1029":1,"1034":1,"1041":2,"1055":1,"1058":1,"1059":4,"1062":2,"1065":1,"1067":4,"1068":1,"1069":1,"1073":1,"1074":1,"1083":2,"1091":1,"1094":1,"1096":1,"1116":3,"1118":1,"1123":1,"1124":2,"1125":1,"1133":1,"1135":1,"1140":2,"1150":1,"1157":1,"1162":1,"1168":1,"1173":1,"1177":1,"1184":1,"1211":1,"1212":7,"1213":1,"1217":1,"1220":2,"1225":1,"1228":2,"1229":12,"1231":1,"1233":1,"1237":18,"1238":1,"1240":1,"1241":2,"1242":1,"1247":7,"1249":1,"1253":4,"1259":15,"1262":1,"1263":1,"1264":2,"1265":3,"1266":1,"1270":22,"1271":7,"1272":1,"1273":2,"1275":3,"1276":3,"1277":1,"1278":3,"1279":1,"1281":1,"1284":1,"1285":3,"1286":60,"1288":1,"1289":2,"1290":2,"1291":1,"1292":1,"1294":1,"1296":1,"1297":3,"1299":1,"1300":68,"1301":5,"1303":1,"1304":2,"1305":2,"1307":1,"1308":1,"1309":20,"1310":2,"1311":56,"1312":7,"1316":1,"1320":3,"1322":1,"1323":49,"1324":78,"1325":1,"1328":2,"1330":1,"1333":2,"1337":1,"1338":1,"1339":43,"1342":5,"1343":1,"1345":2,"1347":3,"1348":1,"1349":1,"1350":73,"1352":4,"1353":2,"1354":1,"1357":2,"1358":1,"1359":157,"1366":4,"1367":1,"1369":11,"1371":1,"1373":4,"1374":1,"1376":2,"1377":1,"1379":1,"1380":52,"1384":1,"1386":1,"1389":3,"1391":2,"1392":1,"1393":1,"1394":1,"1395":55,"1396":133,"1397":2,"1398":1,"1399":3,"1400":1,"1402":45,"1404":1,"1405":2,"1406":4,"1407":4,"1408":4,"1410":2,"1411":2,"1413":1,"1414":2,"1415":52,"1416":8,"1417":21,"1421":1,"1422":1,"1423":1,"1425":2,"1427":7,"1428":1,"1430":1,"1431":2,"1432":1,"1436":122,"1438":19,"1439":1,"1441":5,"1442":1,"1443":1,"1444":2,"1445":1,"1447":4,"1449":3,"1453":2,"1454":1,"1455":9,"1456":3,"1458":1,"1459":3,"1460":2,"1465":2,"1467":20,"1470":1,"1473":1,"1474":3,"1475":2,"1476":1,"1482":1,"1488":3,"1489":3,"1490":2,"1491":1,"1492":5,"1496":3,"1504":2,"1508":1,"1512":1,"1513":1,"1517":1,"1522":1,"1525":1,"1526":4,"1531":1,"1534":2,"1535":1,"1547":1,"1548":1,"1577":12,"1582":2,"1585":1,"1589":2,"1591":10,"1596":5,"1597":1,"1599":4,"1600":1,"1627":1,"1631":5,"1634":1,"1638":1,"1640":1,"1641":3,"1643":1,"1651":1,"1653":2,"1654":1,"1656":2,"1660":1,"1665":1,"1666":1,"1670":1,"1673":1,"1677":1,"1683":1,"1684":1,"1685":1,"1686":2,"1693":1,"1701":1,"1702":1,"1703":2,"1712":1,"1719":1,"1722":1,"1727":1,"1728":1,"1748":5,"1749":2,"1750":1,"1751":1,"1755":1,"1758":2,"1760":3,"1764":2,"1767":1,"1769":7,"1771":2,"1772":1,"1773":2,"1776":1,"1799":2,"1805":3,"1810":2,"1815":3,"1821":3,"1825":3,"1831":1,"1833":1,"1839":1,"1840":2,"1849":2,"1851":2,"1854":1,"1870":1,"1871":1,"1874":1,"1875":1,"1876":2,"1877":1,"1881":1,"1882":1,"1888":1,"1889":1,"1896":1,"1902":1,"1904":1,"1908":2,"1909":1,"1916":1,"1918":1,"1922":2,"1925":1,"1927":2,"1933":3,"1934":1,"1939":1,"1940":1,"1943":1,"1945":1,"1947":1,"1950":1,"1962":2,"1964":1,"1965":1,"1966":1,"1968":3,"1973":1,"1975":3,"1977":1,"1982":4,"1993":1,"1995":1,"1998":1,"2001":2,"2014":1,"2019":1,"2020":1,"2026":1,"2031":1,"2033":1,"2035":2,"2047":1,"2056":2,"2057":1,"2058":2,"2060":1,"2064":2,"2065":1,"2068":1,"2075":1,"2076":1,"2081":1,"2084":1,"2089":1,"2091":1,"2099":1,"2107":1,"2109":2,"2112":2,"2126":1,"2128":1,"2132":1,"2133":4,"2134":2,"2139":1,"2140":3,"2152":2,"2153":1,"2154":1,"2158":4,"2160":2,"2166":1,"2167":1,"2168":1,"2169":1,"2175":1,"2179":2,"2182":1,"2185":2,"2188":1,"2192":1,"2196":1,"2199":2,"2229":1,"2232":1,"2234":7}}],["carrynomutablestaticstate",{"3":{"1436":3}}],["carrytheservicetagoftheowningapp",{"3":{"1436":1}}],["carrythetightratelimiterpolicy",{"2":{"180":1},"3":{"180":1}}],["carry",{"0":{"1235":1},"3":{"0":13,"1":2,"15":1,"24":1,"71":1,"81":1,"91":1,"98":1,"99":1,"109":1,"125":1,"126":1,"135":3,"136":1,"138":2,"139":1,"142":1,"147":1,"155":1,"161":1,"170":2,"176":1,"177":2,"179":1,"186":2,"195":1,"200":1,"207":2,"217":1,"225":1,"241":1,"259":1,"260":1,"261":1,"265":3,"279":1,"291":1,"300":1,"318":4,"324":2,"341":2,"343":2,"345":1,"350":1,"352":1,"355":1,"359":1,"361":1,"387":1,"390":1,"396":1,"401":2,"403":2,"404":1,"407":1,"419":1,"438":1,"443":1,"446":1,"450":1,"451":1,"461":1,"470":1,"490":1,"497":1,"505":1,"526":1,"530":1,"536":1,"543":1,"549":2,"558":1,"564":1,"572":1,"578":2,"583":1,"591":1,"594":1,"599":2,"603":1,"607":2,"609":3,"611":1,"618":2,"626":1,"629":1,"634":1,"635":1,"636":1,"640":1,"649":1,"657":1,"658":1,"659":1,"661":1,"668":1,"689":1,"690":2,"698":2,"718":1,"719":1,"724":1,"739":2,"741":1,"742":1,"743":1,"755":1,"764":1,"766":1,"774":1,"782":1,"783":1,"799":3,"801":1,"802":1,"826":1,"828":1,"831":1,"832":1,"838":3,"869":1,"873":1,"881":1,"884":1,"891":1,"905":1,"907":2,"926":1,"963":1,"964":1,"972":1,"982":1,"996":1,"1011":1,"1018":1,"1020":1,"1026":1,"1034":1,"1042":1,"1043":1,"1044":1,"1050":1,"1083":1,"1085":2,"1091":1,"1110":1,"1116":4,"1125":1,"1126":1,"1127":1,"1141":1,"1155":1,"1175":1,"1184":1,"1185":3,"1212":3,"1228":1,"1229":4,"1231":1,"1234":1,"1236":1,"1237":11,"1247":4,"1252":1,"1253":1,"1255":1,"1259":6,"1264":1,"1265":1,"1266":1,"1270":13,"1271":4,"1275":1,"1276":1,"1285":1,"1286":35,"1290":1,"1297":1,"1300":36,"1301":3,"1309":6,"1311":25,"1312":5,"1317":1,"1318":2,"1319":1,"1323":9,"1324":34,"1328":2,"1337":1,"1339":17,"1342":1,"1344":2,"1345":3,"1347":1,"1350":18,"1353":1,"1359":66,"1360":1,"1362":2,"1366":1,"1369":8,"1371":1,"1373":2,"1377":1,"1380":16,"1382":1,"1384":1,"1388":2,"1389":1,"1390":1,"1392":2,"1395":33,"1396":29,"1399":1,"1401":1,"1402":16,"1405":1,"1415":24,"1416":2,"1417":4,"1423":1,"1427":1,"1428":1,"1431":1,"1434":1,"1436":51,"1438":7,"1443":3,"1444":1,"1445":1,"1447":4,"1448":1,"1453":2,"1454":1,"1455":2,"1456":1,"1458":1,"1465":2,"1467":14,"1469":1,"1473":1,"1474":1,"1476":3,"1481":1,"1485":1,"1489":3,"1491":1,"1496":3,"1526":4,"1534":1,"1536":1,"1543":1,"1575":1,"1576":1,"1577":3,"1578":1,"1582":1,"1585":1,"1586":1,"1591":2,"1596":1,"1621":1,"1626":1,"1627":2,"1630":1,"1631":1,"1632":2,"1635":1,"1641":3,"1654":1,"1662":1,"1665":1,"1666":1,"1672":1,"1686":1,"1688":1,"1723":1,"1727":1,"1748":2,"1757":1,"1758":1,"1759":1,"1760":1,"1761":2,"1764":1,"1765":4,"1767":2,"1771":1,"1830":1,"1839":1,"1851":1,"1875":1,"1876":1,"1883":1,"1902":1,"1903":1,"1908":1,"1938":1,"1942":1,"1946":1,"1948":1,"1949":1,"1950":2,"1963":3,"1964":1,"1968":1,"1969":3,"1971":1,"1974":1,"1978":1,"1994":1,"1996":3,"1997":1,"2002":1,"2019":1,"2047":1,"2048":1,"2056":1,"2057":2,"2072":1,"2077":1,"2081":1,"2088":1,"2100":1,"2128":1,"2133":2,"2144":1,"2147":1,"2153":1,"2156":2,"2158":1,"2160":1,"2162":1,"2166":1,"2191":1,"2193":1,"2194":3,"2200":1,"2205":1,"2234":1}}],["carrying",{"3":{"0":4,"20":1,"53":1,"81":1,"109":2,"110":1,"111":1,"117":1,"122":1,"128":1,"147":1,"160":1,"180":1,"189":1,"193":1,"202":1,"212":1,"217":1,"225":2,"231":1,"243":2,"244":1,"247":1,"265":1,"305":1,"318":1,"328":1,"344":1,"349":1,"350":4,"365":1,"370":1,"387":1,"413":1,"420":1,"443":2,"448":1,"499":1,"538":1,"557":1,"609":1,"618":1,"626":1,"632":1,"688":1,"690":2,"715":2,"725":3,"740":1,"741":2,"782":1,"790":1,"804":1,"805":1,"810":1,"813":1,"827":1,"860":1,"863":1,"876":1,"881":1,"897":1,"914":1,"920":2,"921":1,"926":1,"945":1,"966":1,"971":1,"980":2,"987":1,"988":2,"996":1,"1004":1,"1026":2,"1034":1,"1042":1,"1049":1,"1050":1,"1051":1,"1054":1,"1067":1,"1119":1,"1168":1,"1175":1,"1212":2,"1219":1,"1223":1,"1224":1,"1225":1,"1229":9,"1237":8,"1239":1,"1240":1,"1241":1,"1243":1,"1245":1,"1247":4,"1249":1,"1256":2,"1259":6,"1263":3,"1265":1,"1266":1,"1270":16,"1271":3,"1273":1,"1275":1,"1277":1,"1280":1,"1284":1,"1286":26,"1294":1,"1297":2,"1300":24,"1301":2,"1304":1,"1305":1,"1309":11,"1310":2,"1311":21,"1312":5,"1317":1,"1318":1,"1320":1,"1323":26,"1324":30,"1332":1,"1335":1,"1336":1,"1339":11,"1347":1,"1349":1,"1350":8,"1352":1,"1353":1,"1358":1,"1359":37,"1361":1,"1364":1,"1369":3,"1373":1,"1374":2,"1378":1,"1379":1,"1380":13,"1384":2,"1389":1,"1391":1,"1395":27,"1396":48,"1398":1,"1402":21,"1405":1,"1406":1,"1409":1,"1410":1,"1415":27,"1416":6,"1417":10,"1423":2,"1426":1,"1427":1,"1430":2,"1434":1,"1436":55,"1438":8,"1446":1,"1452":1,"1453":1,"1458":1,"1465":1,"1467":3,"1488":2,"1489":2,"1492":1,"1534":1,"1577":2,"1627":1,"1631":1,"1641":1,"1651":1,"1666":2,"1667":1,"1685":2,"1702":1,"1723":1,"1749":2,"1750":1,"1765":1,"1769":3,"1790":2,"1792":1,"1805":2,"1806":1,"1815":1,"1821":2,"1840":1,"1865":1,"1871":1,"1908":1,"1909":1,"1922":2,"1924":1,"1927":4,"1929":1,"1933":2,"1937":1,"1974":1,"1975":1,"1976":2,"1977":2,"1978":1,"1988":1,"1995":1,"1996":2,"2019":1,"2037":2,"2056":1,"2058":1,"2076":1,"2085":1,"2112":1,"2128":1,"2138":1,"2151":1,"2160":1,"2166":1,"2177":1,"2188":1,"2232":1}}],["calcifies",{"3":{"1788":2}}],["calculation",{"3":{"1798":1,"2077":1}}],["calculations",{"3":{"1229":1}}],["calculated",{"3":{"1631":1,"1764":1}}],["calculateduration",{"2":{"1342":1},"3":{"1342":1,"1350":1}}],["calculatesimilarity",{"3":{"1359":2}}],["calculatejaccardindex",{"3":{"1359":1}}],["calmly",{"3":{"1396":1}}],["calm",{"3":{"1396":2}}],["calscale",{"3":{"1300":1}}],["calibrate",{"3":{"1229":1}}],["calibrated",{"3":{"0":1,"861":3,"1436":2,"1596":1}}],["calibration",{"3":{"862":1,"1263":1,"1339":1,"1369":1,"1577":2,"1578":1,"1592":1}}],["calibrating",{"3":{"862":1,"1237":1}}],["calendarexportmappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["calendarexportmapper",{"2":{"1356":1},"3":{"1199":6,"1203":1,"1207":2,"1300":5,"1350":3,"1356":4,"1359":16,"1396":1,"1526":1}}],["calendars",{"0":{"1375":1},"3":{"1043":2,"1203":2,"1207":6,"1300":10,"1359":4,"1496":1}}],["calendar",{"0":{"1356":1},"3":{"706":1,"1192":2,"1300":13,"1324":4,"1350":1,"1351":1,"1356":1,"1359":18,"1375":3,"1380":7,"1396":1,"1436":4,"1438":1,"1455":2,"1496":2,"1535":1,"1631":1,"1640":1,"1660":1,"1948":2}}],["callout",{"3":{"1496":1}}],["callvirt",{"3":{"1436":3}}],["callcount",{"3":{"1427":2}}],["calldurationhistogramname",{"3":{"1427":1}}],["calldeadline",{"3":{"1309":1,"1312":1,"1380":3,"1396":3,"1415":2}}],["callrefreshasync",{"3":{"1300":1}}],["callgraphindex",{"3":{"1199":2,"1207":2,"1436":12,"1489":1,"1671":1}}],["callable",{"3":{"265":1,"497":1,"1271":1,"1286":3,"1359":3,"1395":3,"1396":1,"1417":1,"1436":1,"1548":1}}],["callee",{"3":{"39":1,"1161":1,"1324":1,"1436":7}}],["callees",{"3":{"39":1,"1436":2}}],["called",{"3":{"13":1,"39":2,"81":1,"92":1,"109":2,"117":1,"122":1,"201":1,"203":1,"243":1,"259":1,"260":1,"265":1,"268":1,"284":1,"325":2,"326":2,"336":1,"341":1,"344":1,"350":1,"397":2,"400":1,"407":1,"413":1,"423":3,"426":2,"428":2,"497":1,"499":2,"591":1,"652":1,"674":1,"697":1,"698":2,"717":1,"741":1,"743":1,"822":1,"837":1,"875":1,"881":1,"889":2,"905":1,"908":1,"926":2,"931":2,"947":1,"1006":1,"1108":1,"1170":1,"1175":1,"1191":1,"1229":4,"1237":9,"1247":9,"1254":1,"1259":9,"1262":1,"1263":1,"1266":1,"1270":13,"1273":1,"1274":1,"1278":2,"1281":1,"1286":29,"1297":1,"1300":17,"1301":3,"1307":1,"1309":15,"1310":2,"1311":24,"1312":5,"1315":2,"1316":1,"1318":1,"1323":23,"1324":27,"1333":1,"1335":1,"1339":6,"1350":9,"1352":1,"1359":30,"1369":6,"1378":1,"1380":2,"1386":1,"1389":1,"1395":14,"1396":29,"1402":5,"1409":1,"1415":11,"1416":3,"1417":16,"1427":5,"1436":22,"1442":4,"1443":2,"1457":1,"1460":1,"1467":1,"1473":1,"1474":1,"1488":2,"1496":2,"1526":1,"1556":1,"1600":2,"1662":1,"1780":1,"1825":2,"1909":1,"1925":1,"1936":2,"1948":1,"1954":1,"1982":2,"1995":1,"2044":1,"2107":1,"2121":1,"2158":3,"2166":1,"2167":1,"2169":2,"2190":1}}],["callerfilepathattribute",{"3":{"1436":1}}],["callerfilepath",{"3":{"1432":1,"1436":3}}],["calleruserid",{"3":{"1402":4}}],["callerhasprivilegedrole",{"3":{"1323":2}}],["callermembername",{"3":{"1312":2,"1380":1}}],["callerisorganizer",{"2":{"1354":1},"3":{"1270":3,"1354":1,"1359":6,"1373":1,"1380":1,"1402":15}}],["callerspeakerid",{"3":{"1402":15}}],["callerscopedquerycachetests",{"3":{"1199":1,"1207":5,"1264":1,"1270":2}}],["callers",{"3":{"0":6,"33":1,"109":1,"157":1,"175":1,"230":1,"243":1,"244":1,"258":1,"265":1,"320":1,"335":1,"388":1,"435":1,"449":1,"481":1,"497":1,"502":1,"507":1,"513":1,"543":1,"545":1,"550":2,"552":1,"659":1,"674":1,"827":1,"889":1,"899":1,"980":1,"988":1,"995":1,"996":1,"998":1,"1153":1,"1155":2,"1176":1,"1212":2,"1220":1,"1229":1,"1236":1,"1237":2,"1239":1,"1241":1,"1242":1,"1243":1,"1247":10,"1259":2,"1263":1,"1267":1,"1270":12,"1271":2,"1278":1,"1286":22,"1300":18,"1301":9,"1302":1,"1309":7,"1311":15,"1312":2,"1316":1,"1323":7,"1324":31,"1337":1,"1339":4,"1350":13,"1359":23,"1369":2,"1373":1,"1375":1,"1380":4,"1395":7,"1396":14,"1402":2,"1415":8,"1416":1,"1417":20,"1430":1,"1436":4,"1438":3,"1441":1,"1442":1,"1443":1,"1467":1,"1496":1,"1596":1,"1630":1,"1631":2,"1635":3,"1639":1,"1640":2,"1701":1,"1735":1,"1749":1,"1790":1,"1807":1,"1815":2,"1908":1,"1912":1,"1915":1,"1922":1,"1937":1,"1987":1,"1998":1,"2025":1,"2128":1,"2135":1,"2234":2}}],["caller",{"0":{"1937":1,"2187":1},"2":{"1844":1},"3":{"0":25,"31":1,"39":2,"42":2,"43":1,"53":1,"72":1,"90":1,"95":1,"96":1,"103":2,"107":1,"108":2,"109":5,"110":3,"111":1,"115":1,"122":3,"123":2,"125":2,"126":2,"135":1,"147":1,"157":5,"158":1,"159":2,"173":2,"175":3,"177":2,"178":1,"179":2,"180":3,"184":1,"186":2,"189":1,"201":1,"225":3,"228":2,"230":2,"231":1,"235":2,"241":2,"243":3,"246":5,"259":1,"284":1,"317":2,"318":12,"324":2,"330":1,"333":3,"340":1,"341":2,"342":3,"344":2,"350":1,"359":1,"365":1,"383":1,"384":2,"387":2,"388":3,"389":1,"400":1,"435":1,"447":2,"448":2,"449":2,"450":1,"459":2,"461":1,"465":1,"481":1,"490":1,"507":2,"517":1,"518":2,"519":1,"538":1,"544":1,"549":7,"550":1,"551":2,"552":1,"572":1,"597":1,"598":1,"599":3,"600":1,"619":1,"649":1,"656":1,"657":1,"658":1,"660":1,"674":2,"682":1,"683":1,"684":3,"690":2,"715":1,"717":2,"725":2,"727":3,"733":4,"735":2,"740":3,"741":1,"743":1,"749":1,"751":1,"766":1,"769":1,"789":1,"790":2,"791":2,"792":2,"793":1,"825":1,"826":2,"827":12,"829":1,"833":1,"854":1,"861":3,"864":1,"881":5,"896":1,"897":12,"899":1,"905":12,"906":2,"908":1,"921":2,"922":2,"924":1,"926":3,"948":1,"980":1,"986":1,"987":1,"988":5,"989":1,"990":2,"992":2,"996":2,"997":2,"998":1,"1018":1,"1019":1,"1021":1,"1026":1,"1042":3,"1043":1,"1050":1,"1059":2,"1091":3,"1092":2,"1093":2,"1100":2,"1101":2,"1116":2,"1123":1,"1124":1,"1126":2,"1132":1,"1133":3,"1140":1,"1150":1,"1161":2,"1168":1,"1169":2,"1176":1,"1212":2,"1219":1,"1227":1,"1228":3,"1229":16,"1231":1,"1232":1,"1237":20,"1238":2,"1241":4,"1242":3,"1243":1,"1244":1,"1247":44,"1251":1,"1253":1,"1259":19,"1262":1,"1263":6,"1264":8,"1265":5,"1267":6,"1269":1,"1270":100,"1271":20,"1273":1,"1275":1,"1276":4,"1278":1,"1283":1,"1285":2,"1286":139,"1287":2,"1289":1,"1290":3,"1293":2,"1296":2,"1297":4,"1299":1,"1300":139,"1301":22,"1302":1,"1304":2,"1305":1,"1306":2,"1307":2,"1308":2,"1309":49,"1310":7,"1311":90,"1312":14,"1318":1,"1322":1,"1323":81,"1324":127,"1326":1,"1332":1,"1337":1,"1339":44,"1343":1,"1346":3,"1348":2,"1350":45,"1352":1,"1353":2,"1356":1,"1357":6,"1358":2,"1359":256,"1365":1,"1366":2,"1368":2,"1369":6,"1372":1,"1373":4,"1375":3,"1376":1,"1378":2,"1379":2,"1380":65,"1389":3,"1395":40,"1396":196,"1398":1,"1399":3,"1401":5,"1402":128,"1407":1,"1408":1,"1410":2,"1411":2,"1414":1,"1415":64,"1416":3,"1417":57,"1419":1,"1422":5,"1423":10,"1424":1,"1425":1,"1426":1,"1427":27,"1432":2,"1435":1,"1436":73,"1437":1,"1438":17,"1447":1,"1455":2,"1456":2,"1467":5,"1487":1,"1488":2,"1496":1,"1507":1,"1508":1,"1548":1,"1553":2,"1577":2,"1589":1,"1591":1,"1596":1,"1627":1,"1631":4,"1632":8,"1639":1,"1640":4,"1641":2,"1653":2,"1656":1,"1663":1,"1665":1,"1666":1,"1671":1,"1672":2,"1686":2,"1698":1,"1703":1,"1708":2,"1723":2,"1737":1,"1748":2,"1759":1,"1764":2,"1765":7,"1767":2,"1771":1,"1803":3,"1804":1,"1805":3,"1806":1,"1807":2,"1810":1,"1813":1,"1815":6,"1817":1,"1821":6,"1823":1,"1824":1,"1825":1,"1831":2,"1839":1,"1840":2,"1844":3,"1852":1,"1857":1,"1871":1,"1873":1,"1874":1,"1875":1,"1876":2,"1877":3,"1883":1,"1898":1,"1908":2,"1909":5,"1911":2,"1912":1,"1919":4,"1920":6,"1922":3,"1923":3,"1924":3,"1925":2,"1926":1,"1927":1,"1930":1,"1933":3,"1934":3,"1937":2,"1938":1,"1940":1,"1941":2,"1944":1,"1945":2,"1947":2,"1950":2,"1963":1,"1968":1,"1982":4,"1988":1,"1990":1,"1992":1,"1993":1,"1994":3,"1995":14,"1996":6,"1997":1,"1998":2,"2001":3,"2002":1,"2003":2,"2017":1,"2020":1,"2025":6,"2038":1,"2039":1,"2056":1,"2058":1,"2068":1,"2076":1,"2080":1,"2092":1,"2098":1,"2119":2,"2131":2,"2132":2,"2133":2,"2134":1,"2135":1,"2139":1,"2141":1,"2145":1,"2167":1,"2168":3,"2170":1,"2171":1,"2173":1,"2176":4,"2177":2,"2181":1,"2182":2,"2187":3,"2192":1,"2195":2,"2198":2,"2199":1}}],["callbackpath",{"3":{"1311":1}}],["callbackscheme",{"3":{"1416":2}}],["callbacks",{"3":{"180":1,"248":1,"413":1,"744":1,"1259":1,"1323":1,"1324":4,"1385":1,"1387":1,"1390":1,"1395":2,"1402":8,"1416":5,"1417":5,"1447":1,"1555":1,"1560":1,"1973":1}}],["callback",{"1":{"417":1,"418":1,"419":1,"420":1,"421":1,"422":1,"423":1,"424":1,"425":1,"426":1,"427":1,"428":1,"429":1,"430":1},"3":{"0":6,"243":1,"248":3,"265":1,"348":1,"350":4,"351":1,"355":1,"383":1,"397":1,"413":2,"417":1,"418":2,"420":3,"422":1,"427":2,"428":1,"463":1,"518":1,"556":3,"733":1,"831":2,"832":3,"1100":1,"1128":1,"1212":1,"1223":1,"1229":5,"1243":1,"1247":3,"1259":1,"1286":1,"1290":1,"1300":10,"1301":15,"1309":1,"1310":3,"1311":14,"1316":1,"1323":9,"1324":32,"1333":1,"1339":9,"1380":1,"1391":1,"1395":26,"1396":8,"1400":1,"1402":3,"1406":1,"1415":5,"1416":9,"1417":33,"1436":2,"1443":2,"1496":2,"1599":1,"1662":1,"1667":1,"1669":1,"1868":1,"1883":1,"1898":1,"1916":1,"1944":1,"1945":1,"1947":1,"1973":2,"1975":5,"1976":1,"1979":1,"2001":1,"2097":1,"2123":2,"2124":1,"2234":1}}],["calling",{"3":{"0":5,"91":1,"115":1,"214":1,"224":1,"237":2,"243":1,"265":2,"283":1,"310":1,"380":1,"409":1,"418":1,"459":1,"638":1,"657":1,"676":1,"696":1,"700":1,"733":2,"735":1,"741":1,"751":1,"766":2,"840":1,"880":1,"881":1,"906":1,"912":1,"922":1,"924":1,"959":1,"960":1,"979":1,"1012":1,"1016":1,"1017":1,"1018":1,"1020":1,"1042":1,"1090":2,"1134":1,"1184":1,"1212":1,"1229":2,"1232":1,"1234":1,"1237":5,"1241":1,"1251":1,"1259":4,"1263":1,"1270":13,"1271":3,"1275":1,"1286":23,"1291":1,"1300":11,"1301":2,"1304":1,"1309":9,"1311":13,"1312":2,"1315":1,"1316":1,"1317":1,"1323":11,"1324":21,"1336":1,"1339":12,"1350":7,"1353":1,"1359":32,"1365":1,"1366":1,"1369":4,"1376":1,"1378":1,"1380":8,"1395":11,"1396":12,"1402":11,"1415":5,"1416":2,"1417":13,"1425":1,"1427":5,"1432":1,"1436":20,"1438":2,"1467":1,"1476":1,"1488":2,"1526":2,"1540":1,"1553":1,"1577":1,"1578":1,"1641":1,"1687":1,"1790":1,"1799":1,"1805":1,"1821":1,"1844":1,"1882":1,"1914":1,"1944":1,"1968":1,"1983":1,"1990":1,"2019":1,"2020":1,"2028":1,"2115":1,"2152":2,"2172":1,"2173":1,"2181":1,"2187":2,"2234":1}}],["calls",{"1":{"50":1,"51":1,"52":1,"53":1,"54":1,"55":1},"3":{"0":17,"26":1,"27":2,"35":1,"39":2,"41":1,"50":1,"52":2,"57":1,"59":2,"64":1,"74":1,"96":1,"105":1,"120":1,"127":1,"135":1,"175":1,"179":1,"180":1,"185":1,"186":1,"195":2,"200":1,"201":1,"202":1,"206":1,"207":1,"209":1,"214":1,"215":1,"220":1,"225":1,"226":1,"230":1,"243":3,"245":1,"255":2,"256":3,"257":1,"258":2,"259":3,"260":5,"261":3,"279":1,"280":1,"281":2,"283":1,"284":1,"285":1,"303":1,"308":1,"310":1,"318":1,"326":1,"340":1,"341":2,"343":1,"350":4,"354":1,"359":1,"362":1,"370":2,"374":1,"387":1,"390":1,"391":1,"395":2,"397":1,"401":1,"402":3,"405":1,"413":1,"418":1,"420":2,"423":2,"425":1,"426":1,"428":2,"429":1,"430":1,"434":1,"435":1,"453":1,"459":2,"461":1,"464":1,"492":1,"493":1,"494":1,"497":2,"499":2,"502":1,"506":1,"507":1,"517":1,"518":1,"519":1,"522":2,"523":3,"524":1,"534":1,"536":2,"539":3,"545":1,"546":1,"550":2,"551":1,"552":1,"572":1,"583":4,"585":1,"599":2,"603":1,"609":1,"626":1,"640":2,"642":1,"644":1,"649":2,"651":1,"665":2,"667":1,"674":3,"677":2,"682":1,"684":1,"690":1,"696":1,"698":2,"705":1,"707":1,"708":1,"715":3,"724":1,"725":1,"733":4,"749":5,"750":1,"774":2,"819":3,"826":1,"827":2,"829":1,"832":1,"836":1,"837":2,"838":2,"839":2,"857":2,"861":1,"880":1,"881":1,"883":2,"884":1,"885":1,"905":1,"913":1,"922":2,"923":1,"926":1,"946":1,"954":2,"955":1,"956":1,"964":1,"972":1,"979":2,"987":2,"988":2,"996":1,"1011":1,"1012":3,"1013":1,"1017":2,"1018":5,"1020":1,"1022":1,"1034":1,"1042":2,"1050":2,"1052":1,"1055":1,"1059":3,"1062":1,"1090":3,"1091":1,"1093":1,"1094":2,"1095":1,"1100":1,"1101":1,"1108":1,"1133":2,"1161":2,"1162":1,"1168":2,"1179":1,"1183":2,"1185":1,"1202":2,"1203":2,"1212":6,"1213":1,"1222":1,"1229":5,"1231":1,"1233":2,"1235":2,"1236":1,"1237":18,"1240":1,"1244":1,"1245":1,"1247":20,"1249":1,"1251":1,"1256":1,"1257":1,"1258":1,"1259":31,"1262":2,"1263":2,"1265":4,"1270":34,"1271":15,"1274":2,"1275":2,"1276":1,"1281":1,"1282":1,"1283":1,"1286":99,"1287":1,"1289":1,"1292":2,"1297":2,"1300":61,"1301":13,"1308":1,"1309":38,"1310":4,"1311":72,"1312":16,"1315":1,"1316":3,"1317":1,"1323":52,"1324":135,"1326":2,"1329":1,"1330":1,"1332":1,"1333":4,"1336":2,"1339":48,"1340":1,"1344":1,"1346":1,"1347":1,"1349":2,"1350":42,"1352":2,"1353":1,"1354":2,"1355":1,"1359":153,"1360":1,"1362":1,"1365":2,"1366":1,"1368":1,"1369":15,"1372":2,"1376":1,"1377":2,"1378":3,"1380":21,"1382":1,"1383":1,"1384":1,"1385":1,"1388":1,"1395":89,"1396":92,"1399":1,"1400":1,"1401":2,"1402":42,"1405":1,"1409":1,"1414":1,"1415":38,"1416":12,"1417":72,"1421":2,"1423":2,"1424":1,"1426":1,"1427":20,"1429":1,"1431":1,"1432":1,"1436":119,"1438":5,"1441":6,"1442":2,"1443":7,"1444":3,"1447":3,"1450":1,"1454":1,"1455":3,"1456":1,"1457":1,"1466":1,"1467":9,"1475":1,"1476":1,"1488":4,"1489":2,"1490":2,"1491":5,"1492":4,"1496":1,"1508":1,"1526":8,"1527":1,"1534":1,"1537":1,"1544":1,"1548":1,"1549":1,"1553":4,"1568":1,"1572":2,"1577":2,"1582":2,"1591":1,"1592":1,"1599":1,"1600":1,"1605":1,"1632":2,"1639":1,"1640":1,"1641":1,"1647":1,"1651":2,"1653":6,"1656":2,"1663":1,"1677":1,"1685":1,"1701":2,"1719":1,"1730":2,"1739":1,"1781":1,"1789":1,"1790":2,"1793":1,"1810":1,"1817":1,"1825":1,"1829":1,"1830":2,"1831":2,"1839":2,"1840":2,"1865":1,"1869":1,"1871":1,"1872":1,"1874":1,"1881":1,"1882":1,"1883":1,"1884":3,"1885":1,"1908":1,"1910":3,"1913":1,"1916":1,"1918":1,"1922":1,"1927":3,"1933":4,"1935":2,"1938":2,"1940":3,"1944":1,"1946":1,"1960":1,"1963":1,"1968":3,"1970":2,"1972":1,"1975":2,"1978":1,"1982":1,"2001":3,"2002":2,"2007":2,"2011":1,"2015":1,"2016":2,"2017":2,"2018":1,"2019":2,"2021":1,"2023":3,"2025":2,"2029":1,"2030":1,"2031":2,"2032":1,"2035":1,"2049":1,"2056":2,"2064":2,"2074":1,"2080":1,"2085":1,"2093":1,"2094":1,"2097":1,"2098":1,"2099":1,"2119":1,"2120":2,"2121":3,"2128":1,"2129":3,"2144":2,"2145":1,"2151":1,"2152":1,"2155":1,"2158":4,"2162":1,"2173":3,"2174":1,"2180":1,"2181":4,"2188":1,"2191":1,"2201":1,"2204":2,"2234":2}}],["call",{"0":{"1422":1,"1423":1,"1425":1,"2158":1,"2168":1,"2174":1},"2":{"629":1,"766":1,"767":1,"1089":1,"1425":1,"1456":1,"1457":1,"1460":1,"2179":1},"3":{"0":39,"17":1,"24":1,"26":1,"27":1,"39":1,"41":1,"53":1,"68":1,"71":3,"73":1,"74":2,"93":1,"94":2,"95":5,"97":1,"98":2,"99":1,"100":3,"104":1,"109":5,"110":1,"111":5,"113":1,"117":1,"121":3,"122":1,"126":1,"127":2,"128":3,"135":3,"156":1,"180":1,"188":2,"200":1,"202":1,"207":1,"208":1,"209":2,"210":1,"216":1,"223":1,"230":7,"231":1,"237":1,"241":1,"243":5,"245":4,"246":1,"250":1,"253":1,"254":1,"255":2,"256":2,"257":1,"258":1,"259":3,"260":3,"261":2,"265":1,"273":1,"279":4,"281":1,"283":1,"285":1,"295":2,"303":1,"308":1,"310":5,"314":2,"320":1,"323":1,"325":2,"330":1,"336":1,"353":1,"361":1,"387":1,"390":2,"391":1,"392":1,"395":2,"397":1,"398":1,"401":3,"407":2,"408":2,"413":1,"418":2,"420":1,"424":1,"426":1,"427":1,"428":1,"429":1,"430":1,"434":3,"438":1,"444":2,"446":3,"448":5,"449":1,"453":1,"454":2,"459":5,"460":1,"463":1,"465":1,"466":2,"472":1,"481":2,"483":1,"489":1,"499":2,"502":1,"507":1,"508":1,"509":1,"511":1,"513":1,"514":1,"517":2,"518":1,"522":3,"523":2,"524":3,"536":2,"538":3,"539":1,"544":1,"545":3,"548":1,"549":4,"550":2,"552":2,"556":4,"559":1,"567":1,"583":1,"584":3,"585":1,"591":1,"592":2,"593":1,"594":1,"599":1,"603":2,"618":2,"626":1,"628":1,"629":2,"632":1,"633":2,"641":1,"642":1,"647":2,"649":3,"650":1,"655":1,"656":1,"657":1,"658":1,"661":1,"663":2,"665":6,"667":1,"668":1,"669":2,"672":2,"674":7,"676":1,"682":1,"690":3,"696":5,"698":2,"700":2,"703":1,"707":2,"715":2,"716":1,"724":2,"725":1,"731":1,"733":7,"735":1,"741":1,"748":3,"749":7,"750":1,"751":2,"752":2,"757":1,"759":1,"766":4,"767":1,"768":1,"774":4,"777":1,"782":1,"784":2,"789":1,"790":1,"791":1,"797":1,"798":1,"799":3,"800":1,"802":1,"803":2,"810":1,"814":2,"819":6,"821":2,"826":2,"827":5,"829":1,"831":1,"832":1,"837":1,"838":1,"846":2,"848":1,"850":2,"854":1,"861":4,"881":6,"882":2,"883":1,"889":2,"890":1,"896":1,"897":9,"899":2,"900":2,"905":1,"913":1,"920":1,"922":2,"924":2,"926":3,"930":1,"934":2,"946":3,"948":1,"949":1,"950":1,"952":1,"954":5,"955":2,"957":1,"964":2,"965":2,"966":1,"972":1,"980":1,"988":4,"989":1,"990":1,"994":2,"995":1,"996":3,"999":1,"1012":1,"1016":1,"1017":2,"1018":8,"1019":3,"1020":2,"1021":1,"1028":2,"1034":1,"1035":1,"1050":2,"1051":4,"1052":1,"1059":1,"1067":1,"1089":2,"1090":1,"1091":7,"1092":5,"1093":5,"1094":1,"1095":1,"1099":1,"1100":1,"1102":2,"1103":1,"1126":1,"1127":1,"1132":2,"1133":3,"1134":3,"1136":1,"1150":1,"1156":1,"1168":3,"1170":1,"1175":3,"1176":3,"1182":1,"1183":1,"1184":1,"1185":1,"1186":3,"1188":1,"1212":6,"1217":1,"1220":2,"1221":2,"1226":1,"1229":10,"1234":1,"1236":2,"1237":20,"1239":1,"1240":1,"1241":1,"1243":1,"1244":2,"1246":1,"1247":53,"1249":1,"1252":2,"1253":2,"1259":22,"1261":1,"1262":6,"1263":5,"1265":2,"1267":1,"1269":1,"1270":41,"1271":14,"1273":3,"1275":1,"1276":1,"1278":3,"1279":1,"1280":1,"1283":1,"1286":134,"1287":1,"1289":1,"1290":1,"1291":1,"1293":2,"1297":1,"1298":2,"1300":79,"1301":21,"1302":2,"1303":1,"1304":1,"1309":27,"1310":10,"1311":85,"1312":32,"1313":1,"1315":2,"1316":4,"1318":4,"1322":1,"1323":84,"1324":197,"1326":1,"1327":1,"1328":1,"1329":1,"1331":3,"1332":2,"1333":3,"1335":1,"1337":2,"1338":3,"1339":99,"1342":1,"1343":1,"1347":2,"1350":61,"1352":1,"1354":1,"1358":4,"1359":214,"1362":3,"1365":2,"1366":9,"1367":1,"1368":4,"1369":25,"1372":1,"1377":1,"1378":2,"1380":41,"1382":2,"1383":1,"1384":2,"1385":1,"1387":2,"1388":2,"1390":3,"1391":1,"1392":2,"1393":1,"1395":134,"1396":155,"1398":2,"1401":1,"1402":39,"1408":1,"1409":1,"1410":2,"1413":2,"1414":1,"1415":79,"1416":18,"1417":81,"1418":3,"1420":2,"1421":3,"1422":2,"1423":4,"1425":4,"1427":61,"1430":2,"1431":1,"1432":1,"1435":1,"1436":164,"1438":16,"1441":7,"1442":8,"1443":5,"1444":4,"1445":1,"1446":2,"1447":3,"1448":1,"1449":1,"1450":1,"1453":1,"1456":3,"1457":1,"1460":2,"1466":1,"1467":5,"1470":1,"1472":1,"1475":4,"1476":1,"1477":1,"1479":1,"1482":2,"1486":1,"1487":1,"1488":4,"1489":5,"1490":4,"1491":1,"1492":1,"1496":4,"1510":1,"1526":9,"1530":1,"1531":2,"1532":1,"1534":1,"1544":1,"1553":3,"1555":1,"1566":2,"1572":1,"1581":1,"1582":2,"1591":2,"1596":1,"1599":1,"1600":1,"1627":3,"1630":1,"1631":1,"1632":4,"1636":1,"1637":1,"1639":1,"1651":1,"1653":4,"1659":1,"1663":1,"1664":1,"1665":1,"1667":1,"1668":3,"1669":1,"1670":2,"1671":1,"1673":1,"1675":1,"1684":4,"1685":2,"1686":3,"1701":1,"1719":2,"1720":1,"1721":1,"1724":1,"1734":1,"1749":1,"1765":3,"1781":1,"1783":1,"1789":2,"1790":5,"1792":1,"1803":1,"1805":1,"1806":5,"1808":1,"1810":5,"1811":1,"1813":1,"1815":5,"1817":2,"1818":1,"1821":1,"1824":2,"1825":2,"1835":1,"1839":3,"1840":1,"1842":1,"1843":1,"1848":1,"1851":1,"1856":2,"1862":2,"1865":3,"1867":1,"1881":2,"1882":1,"1883":3,"1886":2,"1895":1,"1898":1,"1902":2,"1908":2,"1915":3,"1916":3,"1919":2,"1920":1,"1923":3,"1924":2,"1927":1,"1932":1,"1933":1,"1934":2,"1936":1,"1937":1,"1939":1,"1940":2,"1946":1,"1951":1,"1954":1,"1955":1,"1960":1,"1962":2,"1963":3,"1964":1,"1966":1,"1968":4,"1970":3,"1971":4,"1972":1,"1973":1,"1979":1,"1989":1,"1990":1,"1993":1,"1995":1,"1996":3,"1997":1,"2001":3,"2007":2,"2009":1,"2010":1,"2011":1,"2012":1,"2013":3,"2014":1,"2017":1,"2018":2,"2019":1,"2020":4,"2021":1,"2025":3,"2030":1,"2031":6,"2033":3,"2034":1,"2036":1,"2039":1,"2044":3,"2047":1,"2048":1,"2050":1,"2058":1,"2064":2,"2072":1,"2073":1,"2074":3,"2076":3,"2078":1,"2081":2,"2082":1,"2084":1,"2085":2,"2087":1,"2088":1,"2089":1,"2095":1,"2097":1,"2098":1,"2115":2,"2121":2,"2129":1,"2133":3,"2135":2,"2137":1,"2138":2,"2147":1,"2152":1,"2153":1,"2154":1,"2156":2,"2158":5,"2159":1,"2162":3,"2165":1,"2166":2,"2167":3,"2168":1,"2169":4,"2170":2,"2171":1,"2172":3,"2173":2,"2174":1,"2176":5,"2177":1,"2178":1,"2179":2,"2181":5,"2182":6,"2188":1,"2191":2,"2192":2,"2195":1,"2198":1,"2200":1,"2201":1,"2204":3,"2211":1,"2232":1,"2234":2}}],["cachingtestentity",{"3":{"1199":2,"1207":1}}],["cachingdecoratortenantscopingtests",{"3":{"1199":1,"1207":2,"1438":2}}],["cachingdecoratorconstructorselectiontests",{"3":{"1199":1,"1207":6,"1438":2}}],["cachingcommanddecoratortests",{"3":{"1199":1,"1207":6}}],["cachingcommanddecorator",{"2":{"1260":1,"1753":1,"1774":1,"1918":1},"3":{"698":1,"1199":6,"1203":1,"1207":2,"1260":1,"1263":9,"1267":2,"1270":30,"1301":8,"1323":1,"1359":11,"1436":1,"1753":1,"1774":1,"1918":1}}],["cachingquerydecoratortests",{"3":{"1199":1,"1207":13,"1270":1}}],["cachingquerydecorator",{"2":{"123":1,"246":1,"1223":1,"1267":1,"1917":1,"1923":1},"3":{"123":2,"246":2,"674":2,"698":1,"733":1,"1199":6,"1203":1,"1207":3,"1223":2,"1229":2,"1260":1,"1263":6,"1267":11,"1268":1,"1270":56,"1300":6,"1301":16,"1323":5,"1436":1,"1467":1,"1496":2,"1917":1,"1923":1}}],["caching",{"0":{"1379":1,"1668":1,"1708":1,"1922":1},"1":{"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"385":1,"386":1,"387":1,"388":1,"389":1,"390":1,"391":1,"392":1,"393":1,"1301":1,"1818":1,"1819":1,"1820":1,"1821":1,"1822":1,"1823":1,"1824":1,"1825":1,"1826":1,"1827":1},"2":{"253":1,"259":1,"732":1,"733":1,"736":1,"999":1,"1301":2,"1339":1,"1915":1,"1916":1},"3":{"0":13,"25":1,"115":1,"117":2,"118":1,"121":3,"122":5,"123":1,"124":1,"126":2,"157":1,"160":1,"162":1,"186":1,"190":1,"235":1,"239":1,"240":1,"242":3,"243":16,"244":1,"245":5,"246":2,"247":2,"252":1,"253":1,"255":4,"256":1,"258":2,"259":3,"260":3,"261":3,"285":2,"300":1,"343":1,"385":1,"387":1,"389":1,"390":2,"391":1,"392":1,"400":1,"460":1,"674":4,"677":1,"701":1,"702":1,"732":3,"733":8,"736":4,"737":1,"740":1,"789":1,"885":1,"897":4,"924":1,"980":2,"996":6,"999":2,"1011":1,"1149":1,"1150":2,"1151":1,"1157":1,"1192":3,"1202":3,"1203":19,"1207":69,"1208":4,"1212":7,"1223":1,"1229":1,"1237":2,"1241":1,"1247":8,"1259":6,"1261":2,"1263":2,"1264":1,"1267":1,"1268":1,"1270":36,"1271":1,"1278":1,"1286":14,"1296":1,"1300":8,"1301":105,"1309":2,"1310":1,"1311":34,"1313":1,"1316":7,"1320":5,"1323":23,"1324":25,"1332":2,"1339":9,"1352":2,"1359":15,"1375":2,"1379":1,"1380":4,"1395":8,"1396":5,"1409":1,"1415":6,"1417":2,"1421":2,"1427":2,"1432":1,"1436":4,"1437":1,"1438":6,"1441":1,"1442":1,"1445":1,"1487":1,"1496":11,"1507":4,"1526":3,"1549":2,"1556":1,"1560":1,"1577":5,"1600":1,"1602":1,"1651":5,"1654":2,"1660":1,"1662":3,"1668":2,"1685":2,"1686":1,"1700":2,"1708":1,"1720":1,"1721":2,"1727":1,"1730":1,"1748":1,"1786":1,"1817":1,"1818":3,"1820":1,"1821":3,"1823":1,"1824":1,"1827":1,"1851":2,"1879":1,"1914":1,"1915":1,"1916":1,"1918":1,"1919":1,"1922":1,"1923":2,"1924":2,"2032":1,"2094":1,"2097":1,"2098":3,"2099":1,"2113":2,"2136":1,"2137":1,"2138":2,"2141":1,"2158":1,"2192":1,"2208":1,"2210":1,"2229":2,"2230":1,"2232":1,"2234":2}}],["cacheexpireson",{"3":{"1396":1}}],["cacheexpirationhours",{"2":{"157":1},"3":{"157":1,"1311":3}}],["cachettl",{"3":{"1395":2}}],["cachetag",{"3":{"1311":1}}],["cachecontrol",{"3":{"1286":4,"1323":1,"1339":1}}],["cacheinvalidating",{"3":{"1270":4}}],["cacheinvalidatingtestcommand",{"3":{"1199":3,"1207":1}}],["cachereachable",{"3":{"1311":1}}],["cachereadfailurequery",{"3":{"1199":2,"1207":1}}],["cachereadfailuremetricquery",{"3":{"1199":2,"1207":1}}],["cachereadcanceledquery",{"3":{"1199":2,"1207":1}}],["cacherequestasync",{"2":{"261":1},"3":{"243":1,"261":1,"1311":1}}],["cachepipelinetestcommand",{"3":{"1199":2,"1207":1}}],["cacheprobeentity",{"3":{"1199":2,"1207":1}}],["cacheprefix",{"2":{"924":1,"925":1,"1918":1,"1920":1,"2094":1},"3":{"0":1,"117":1,"922":1,"924":1,"925":1,"926":1,"1264":1,"1265":1,"1270":15,"1301":1,"1311":1,"1323":1,"1359":51,"1380":1,"1415":6,"1651":1,"1685":1,"1686":1,"1918":2,"1920":1,"2094":1}}],["cachemissmetricquery",{"3":{"1199":2,"1207":1}}],["cachehitmetricquery",{"3":{"1199":2,"1207":1}}],["cacheability",{"3":{"389":1}}],["cacheabletestquery",{"3":{"1199":3,"1207":1}}],["cacheable",{"3":{"123":2,"243":1,"246":2,"633":1,"1270":5,"1301":4,"1311":3,"1700":1,"1726":1,"1727":1,"1730":1,"1920":2,"1923":1,"2099":1}}],["cachevarybyrules",{"2":{"243":1,"246":1,"247":1,"740":2,"1922":1},"3":{"243":1,"246":1,"247":1,"388":1,"740":2,"1311":2,"1324":1,"1922":1}}],["cacheoptionstests",{"3":{"1199":1,"1207":2,"1301":1}}],["cacheoptions",{"2":{"243":2,"252":1,"254":1,"736":1,"1708":2,"1916":1},"3":{"243":4,"252":2,"254":4,"256":2,"257":2,"259":1,"261":1,"736":1,"1199":7,"1203":1,"1207":2,"1301":26,"1708":2,"1916":1}}],["cachekeys",{"3":{"1701":1,"1727":1,"1730":1,"2099":1}}],["cachekeynamespace",{"2":{"996":1,"999":1},"3":{"733":2,"996":1,"999":1,"1199":8,"1203":1,"1207":1,"1301":20,"1323":6,"1496":2}}],["cachekeylocks",{"3":{"733":1,"1199":2,"1203":1,"1207":1,"1260":1,"1267":1,"1270":2,"1300":1,"1301":4,"1496":2}}],["cachekey",{"2":{"123":1,"248":1,"1730":1,"1920":1},"3":{"117":1,"123":2,"246":1,"248":1,"1264":1,"1270":12,"1286":2,"1324":6,"1359":1,"1496":1,"1651":1,"1685":1,"1701":1,"1730":1,"1920":2,"2098":1,"2099":1}}],["cachekeyprefixoptions",{"3":{"674":1,"1199":4,"1203":1,"1207":1,"1301":9,"1323":1,"1496":2}}],["cachekeyprefix",{"3":{"25":1,"246":1,"996":1,"998":1,"999":1,"1207":2,"1301":35,"1311":1,"1320":1,"1323":1,"1496":2}}],["cachesettingstests",{"3":{"1199":1,"1207":2,"1301":1,"1323":2}}],["cachesettings",{"2":{"731":2,"1708":1,"1916":1},"3":{"674":1,"731":1,"733":3,"1192":1,"1199":8,"1203":1,"1207":2,"1301":33,"1320":2,"1323":5,"1496":1,"1708":2,"1916":1}}],["cacheservicegetorcreatetests",{"3":{"1199":1,"1207":3,"1301":1}}],["cacheservice",{"3":{"459":1,"465":1,"1300":1,"1323":1,"1415":1}}],["cacheseconds",{"2":{"1061":1,"2201":1,"2204":1},"3":{"0":3,"235":1,"830":1,"833":1,"1059":1,"1061":2,"1286":3,"1297":1,"1300":1,"1332":1,"1339":2,"1447":1,"2201":1,"2204":2}}],["caches",{"3":{"33":1,"162":1,"235":1,"243":2,"245":1,"390":1,"391":1,"441":1,"459":1,"507":1,"545":2,"592":1,"733":1,"735":1,"827":1,"830":1,"868":1,"964":1,"1052":1,"1055":1,"1229":1,"1237":3,"1239":1,"1241":1,"1242":2,"1247":8,"1259":3,"1270":5,"1278":1,"1279":1,"1286":15,"1288":1,"1300":12,"1301":3,"1305":1,"1310":1,"1323":4,"1324":4,"1334":1,"1339":1,"1359":4,"1385":1,"1387":2,"1395":4,"1396":3,"1411":1,"1415":1,"1417":1,"1421":1,"1436":2,"1438":1,"1453":1,"1455":1,"1456":1,"1567":1,"1666":1,"1672":1,"1748":1,"1753":1,"1774":2,"1815":2,"1849":1,"1912":1,"1914":1,"1915":1,"1916":1,"1917":1,"1922":2,"1923":3,"1924":1,"1934":1,"2025":1,"2068":1,"2071":1,"2129":1,"2174":1}}],["cachedirectory",{"3":{"1417":1}}],["cacheduntil",{"3":{"1395":3}}],["cacheduration",{"2":{"463":1,"2098":1},"3":{"117":1,"463":1,"1264":1,"1270":8,"1301":2,"1359":2,"1396":1,"1496":1,"1651":1,"2098":1}}],["cachedresult",{"3":{"1311":1}}],["cachedroles",{"3":{"1286":2}}],["cachedkeyset",{"3":{"1300":1}}],["cachedsuccess",{"3":{"1229":1}}],["cachedoublecheckmetricquery",{"3":{"1199":2,"1207":1}}],["cachedpage",{"3":{"1199":2,"1203":1,"1207":1,"1324":6}}],["cachedcompile",{"2":{"591":1},"3":{"591":2}}],["cachedhealthreportprovidertests",{"3":{"1199":1,"1207":4,"1339":2}}],["cachedhealthreportprovider",{"2":{"233":1,"235":1,"830":1,"833":1,"1447":1},"3":{"0":1,"233":1,"235":3,"830":3,"833":1,"1199":3,"1203":1,"1207":3,"1332":3,"1339":20,"1447":1,"1496":2}}],["cached",{"3":{"0":9,"21":1,"24":1,"155":1,"157":3,"159":2,"160":2,"174":1,"176":1,"184":1,"201":1,"235":1,"243":2,"245":1,"248":1,"255":2,"330":1,"387":1,"388":2,"390":1,"391":3,"392":1,"459":5,"460":1,"461":1,"463":1,"545":1,"697":1,"698":2,"733":2,"741":2,"743":1,"825":1,"830":1,"905":1,"922":1,"924":1,"1028":2,"1061":1,"1091":3,"1116":1,"1134":1,"1212":2,"1221":1,"1229":2,"1230":1,"1236":1,"1237":6,"1238":1,"1242":3,"1243":1,"1244":1,"1247":15,"1249":1,"1250":2,"1252":1,"1259":8,"1263":1,"1270":18,"1278":4,"1286":24,"1294":1,"1295":1,"1298":1,"1300":21,"1301":17,"1307":1,"1309":3,"1310":5,"1311":24,"1322":1,"1323":3,"1324":23,"1332":1,"1339":8,"1350":3,"1352":1,"1359":31,"1369":1,"1373":2,"1376":2,"1379":2,"1380":10,"1391":4,"1395":28,"1396":11,"1402":1,"1406":1,"1407":1,"1415":6,"1416":3,"1417":6,"1426":2,"1427":2,"1436":6,"1438":4,"1447":1,"1456":1,"1458":3,"1507":1,"1535":1,"1556":2,"1589":1,"1591":2,"1596":1,"1631":3,"1638":1,"1640":4,"1651":1,"1662":2,"1668":1,"1748":3,"1758":1,"1765":3,"1774":1,"1815":1,"1821":1,"1823":1,"1851":1,"1865":1,"1867":2,"1895":2,"1908":3,"1909":2,"1911":2,"1913":1,"1914":1,"1915":2,"1916":1,"1917":2,"1918":1,"1920":1,"1922":4,"1923":2,"1924":1,"1945":1,"1972":1,"1988":1,"2000":1,"2001":1,"2048":1,"2068":1,"2098":1,"2151":1,"2152":1,"2158":1,"2178":2,"2204":1,"2234":2}}],["cache",{"0":{"1294":1,"1915":1,"1921":1},"1":{"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"851":1,"852":1,"853":1,"854":1,"855":1,"856":1,"857":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":1,"1918":1,"1919":1,"1920":1,"1921":1,"1922":1,"1923":1,"1924":1},"2":{"255":1,"258":1,"400":1,"731":1,"897":1,"899":1,"1708":1,"1919":1,"1922":1},"3":{"0":47,"15":1,"25":4,"116":1,"117":2,"120":2,"122":1,"140":1,"155":1,"157":8,"158":1,"159":4,"161":3,"175":1,"176":1,"177":1,"181":1,"186":1,"190":1,"195":1,"212":1,"217":4,"233":1,"234":1,"235":7,"236":1,"237":3,"240":1,"241":6,"242":3,"243":17,"244":2,"245":3,"246":4,"247":1,"248":4,"249":2,"253":1,"255":6,"256":1,"258":3,"259":4,"282":1,"283":3,"285":1,"328":1,"330":1,"333":2,"337":2,"343":1,"350":1,"351":1,"373":2,"382":1,"386":3,"387":4,"388":3,"389":1,"390":4,"391":1,"392":1,"400":3,"441":1,"443":1,"444":1,"459":13,"460":2,"461":7,"463":6,"464":2,"465":3,"549":1,"550":1,"592":6,"593":1,"595":1,"657":1,"665":1,"666":2,"672":2,"674":3,"698":4,"699":3,"700":1,"731":5,"732":5,"733":5,"734":4,"735":3,"736":1,"737":3,"740":5,"742":2,"743":1,"744":1,"745":2,"749":1,"753":1,"757":1,"788":1,"792":2,"793":1,"794":1,"826":4,"828":1,"851":1,"852":1,"853":1,"854":3,"855":2,"856":2,"869":3,"871":1,"872":2,"879":1,"881":4,"885":1,"896":3,"897":7,"899":2,"922":1,"923":2,"924":1,"995":2,"996":6,"997":2,"998":4,"999":2,"1000":1,"1012":1,"1028":2,"1029":1,"1042":1,"1058":1,"1059":2,"1091":1,"1093":2,"1103":1,"1116":4,"1150":1,"1156":1,"1192":2,"1202":2,"1203":2,"1212":6,"1213":1,"1223":2,"1229":7,"1235":1,"1237":9,"1239":1,"1241":3,"1242":3,"1244":1,"1247":29,"1249":1,"1259":10,"1260":1,"1263":7,"1264":1,"1265":1,"1267":9,"1268":2,"1270":87,"1273":1,"1275":1,"1278":1,"1285":1,"1286":32,"1287":1,"1288":1,"1292":1,"1294":3,"1298":1,"1300":62,"1301":101,"1304":1,"1309":5,"1310":6,"1311":72,"1316":1,"1320":3,"1323":41,"1324":52,"1332":6,"1337":1,"1339":42,"1348":3,"1350":18,"1352":1,"1359":128,"1360":1,"1367":1,"1368":1,"1369":5,"1373":3,"1375":3,"1379":8,"1380":50,"1387":1,"1388":3,"1391":1,"1395":53,"1396":24,"1397":1,"1400":1,"1402":2,"1406":1,"1407":1,"1409":1,"1415":21,"1416":1,"1417":29,"1421":2,"1427":3,"1429":1,"1436":9,"1437":3,"1438":27,"1439":1,"1441":1,"1442":5,"1443":5,"1445":2,"1446":1,"1447":1,"1453":5,"1454":1,"1455":12,"1456":5,"1461":1,"1465":8,"1467":3,"1469":2,"1487":3,"1492":3,"1496":15,"1507":1,"1511":1,"1526":3,"1534":1,"1535":1,"1545":1,"1549":1,"1577":7,"1591":6,"1600":4,"1630":1,"1631":1,"1635":1,"1637":1,"1638":1,"1640":2,"1641":4,"1651":7,"1660":1,"1662":2,"1664":2,"1667":4,"1668":9,"1669":1,"1670":1,"1672":2,"1675":1,"1695":1,"1702":1,"1708":10,"1727":1,"1748":5,"1753":2,"1765":5,"1774":1,"1779":1,"1818":1,"1819":1,"1821":7,"1822":3,"1825":2,"1827":1,"1849":1,"1851":4,"1908":4,"1909":14,"1911":3,"1912":6,"1913":5,"1914":2,"1915":1,"1916":6,"1917":4,"1918":6,"1919":1,"1920":7,"1921":5,"1922":12,"1923":16,"1924":9,"1934":2,"1949":1,"1975":3,"1979":1,"1988":2,"1989":5,"2001":1,"2002":6,"2003":2,"2004":1,"2007":2,"2008":3,"2013":6,"2025":2,"2048":3,"2068":4,"2078":1,"2081":1,"2091":1,"2098":3,"2128":1,"2129":3,"2130":1,"2137":1,"2138":1,"2151":4,"2152":1,"2155":1,"2158":8,"2162":1,"2181":2,"2182":1,"2186":1,"2201":3,"2205":3,"2210":1,"2234":9}}],["cat",{"3":{"2222":1}}],["categorized",{"3":{"1631":1}}],["categorization",{"3":{"1395":1,"1764":1}}],["categoriessynced",{"3":{"1350":1,"1359":1}}],["categoriesmanage",{"3":{"1350":2,"1359":1,"1373":1,"1380":7}}],["categoriescontroller",{"2":{"1986":1},"3":{"897":1,"900":1,"1311":4,"1591":1,"1874":1,"1986":1}}],["categoriescache",{"2":{"392":1,"393":1},"3":{"175":1,"392":1,"393":1,"1350":1,"1379":1,"1380":2}}],["categories",{"0":{"1493":1,"1796":1},"1":{"1780":1,"1781":1,"1782":1,"1783":1,"1784":1,"1785":1,"1786":1,"1787":1},"2":{"1359":1,"1380":1},"3":{"0":2,"109":1,"110":1,"111":1,"186":1,"545":1,"556":1,"782":1,"881":2,"897":1,"1004":1,"1011":2,"1012":5,"1193":1,"1202":1,"1203":53,"1207":160,"1212":1,"1216":4,"1224":1,"1229":7,"1237":2,"1247":1,"1270":7,"1301":1,"1310":3,"1311":1,"1318":1,"1322":1,"1324":4,"1342":2,"1344":1,"1347":1,"1350":31,"1352":1,"1353":1,"1354":1,"1358":2,"1359":175,"1363":1,"1367":1,"1369":6,"1380":24,"1381":1,"1382":3,"1383":1,"1384":4,"1385":1,"1387":2,"1395":54,"1415":2,"1416":1,"1417":1,"1436":6,"1437":1,"1438":3,"1447":1,"1452":1,"1458":1,"1465":1,"1467":2,"1471":1,"1495":1,"1499":2,"1502":1,"1519":2,"1523":2,"1526":1,"1532":1,"1536":2,"1554":1,"1565":1,"1574":4,"1578":1,"1580":2,"1583":1,"1586":2,"1588":3,"1591":1,"1592":1,"1594":1,"1597":1,"1598":1,"1621":1,"1625":1,"1629":4,"1630":1,"1631":3,"1632":5,"1636":2,"1637":1,"1638":2,"1639":4,"1640":1,"1673":2,"1677":1,"1742":1,"1746":4,"1748":9,"1750":6,"1763":1,"1764":1,"1768":3,"1771":1,"1773":1,"1777":1,"1779":1,"1780":1,"1784":3,"1794":1,"1796":4,"1799":1,"1800":2,"1801":1,"1802":1,"1807":1,"2111":1,"2112":2,"2116":1,"2117":1,"2143":1,"2164":1,"2207":1}}],["categorydto",{"3":{"1748":1}}],["categorydetail",{"3":{"1591":1,"1600":1}}],["categorydistribution",{"3":{"1350":2,"1395":1}}],["categorydistributiondto",{"3":{"1199":10,"1203":1,"1207":4,"1347":1,"1350":10,"1359":4,"1380":1}}],["categorybuilder",{"3":{"1436":1}}],["categoryweight",{"3":{"1359":2}}],["categorygroups",{"3":{"1359":1}}],["categorygroupdistribution",{"2":{"1347":1},"3":{"1199":6,"1203":1,"1207":1,"1347":1,"1350":4,"1359":1}}],["categorytitlerequiredkey",{"3":{"1395":1}}],["categorytitles",{"3":{"1395":4}}],["categorytitle",{"3":{"1350":1,"1395":8}}],["categorytests",{"3":{"1199":1,"1207":2}}],["categorylisttests",{"3":{"1591":2,"1600":1}}],["categorylistpage",{"3":{"1436":1}}],["categorylist",{"3":{"1324":1,"1591":2}}],["categoryentityqueryservice",{"3":{"1247":2}}],["categoryname",{"2":{"1991":1},"3":{"1247":3,"1991":1}}],["categorycreated",{"3":{"1631":1,"1634":1}}],["categorycreate",{"3":{"1596":1}}],["categorycreaterequest",{"3":{"1270":1}}],["categoryconfiguration",{"3":{"1286":1,"1369":1,"1767":1}}],["categorycommandvalidatortests",{"3":{"1207":2,"1359":1}}],["categorychanged",{"2":{"1634":1},"3":{"782":2,"1199":4,"1203":1,"1207":2,"1259":2,"1345":1,"1350":10,"1359":4,"1385":1,"1395":1,"1631":1,"1634":1,"1748":1,"1769":1}}],["categoryscore",{"3":{"1359":1}}],["categorysyncstrategytests",{"3":{"1199":1,"1207":2,"1359":1}}],["categorysyncstrategy",{"3":{"1199":3,"1203":1,"1207":2,"1358":1,"1359":11}}],["categoryservice",{"3":{"881":1,"1324":1,"1395":1}}],["category=aieval",{"3":{"1018":1,"1435":1,"1438":1,"1455":1,"1492":1}}],["categoryinvariantstests",{"3":{"1199":1,"1207":2}}],["categoryinvariants",{"2":{"1344":1,"1350":1,"1359":1,"1369":1},"3":{"1198":1,"1199":14,"1203":1,"1207":2,"1344":5,"1350":16,"1359":25,"1369":5,"1767":2}}],["categoryid",{"2":{"891":1,"1776":1},"3":{"891":1,"1271":1,"1350":9,"1359":21,"1362":1,"1369":3,"1380":9,"1395":4,"1634":1,"1640":1,"1755":1,"1764":1,"1776":1}}],["categoryitemid",{"3":{"1350":13,"1359":24,"1369":6,"1380":10,"1395":8,"1631":2,"1635":2}}],["categoryitemidentifiertype",{"3":{"1350":9,"1359":14,"1380":4,"1395":12}}],["categoryiteminfo",{"3":{"1199":16,"1203":1,"1207":1,"1387":1,"1395":14}}],["categoryitemcount",{"2":{"1354":1},"3":{"1350":3,"1354":1,"1359":5}}],["categoryitemconfiguration",{"3":{"1199":2,"1203":1,"1207":2,"1350":1,"1359":2,"1362":2,"1369":10}}],["categoryitemchanged",{"2":{"1345":1,"1634":1},"3":{"1199":2,"1203":1,"1207":2,"1345":1,"1350":10,"1359":5,"1631":1,"1634":1}}],["categoryitemnamemaxlength",{"2":{"1369":1},"3":{"1350":3,"1359":5,"1369":2}}],["categoryitemnames",{"3":{"1350":2,"1395":1}}],["categoryitemname",{"3":{"1350":1,"1395":1}}],["categoryitemnamerules",{"3":{"1199":4,"1203":1,"1207":1,"1353":1,"1359":13}}],["categoryitemnavigationpopulatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["categoryitemnavigationpopulator",{"3":{"1199":3,"1203":1,"1207":2,"1310":3,"1359":4}}],["categoryitemlookupservice",{"2":{"1387":1},"3":{"1199":3,"1203":1,"1207":2,"1300":2,"1324":4,"1380":1,"1387":2,"1395":12}}],["categoryitemdtomappertests",{"3":{"1199":1,"1207":2}}],["categoryitemdtomapper",{"3":{"1199":9,"1203":1,"1207":2,"1350":4,"1353":2,"1359":11}}],["categoryitemdto",{"3":{"1199":13,"1203":1,"1207":2,"1347":1,"1350":15,"1359":9,"1380":1,"1384":1,"1395":13}}],["categoryitemdistribution",{"2":{"1347":1},"3":{"1199":6,"1203":1,"1207":1,"1347":1,"1350":7,"1359":3}}],["categoryitemsexcept",{"3":{"1395":1}}],["categoryitemservice",{"2":{"1382":1},"3":{"881":1,"1199":2,"1203":1,"1207":2,"1382":3,"1395":7}}],["categoryitemssynced",{"3":{"1350":1,"1359":1}}],["categoryitems",{"2":{"1354":1},"3":{"1310":2,"1350":12,"1354":1,"1359":25,"1363":1,"1369":2,"1380":3,"1395":8,"1447":1,"1630":1,"1632":4,"1636":1,"1639":8,"1640":1}}],["categoryitemscontrollertests",{"3":{"1199":1,"1207":2}}],["categoryitemscontroller",{"2":{"1371":1,"1372":1},"3":{"1199":2,"1203":1,"1207":4,"1311":4,"1359":24,"1371":2,"1372":2,"1373":1,"1374":1,"1380":26,"1436":1}}],["categoryitemsortrules",{"3":{"1199":4,"1203":1,"1207":1,"1359":12}}],["categoryitem",{"2":{"891":1},"3":{"891":1,"1198":1,"1199":16,"1203":1,"1207":2,"1237":1,"1340":1,"1342":2,"1343":1,"1344":1,"1350":43,"1359":41,"1369":9,"1380":6,"1395":1,"1630":6,"1631":2,"1632":2,"1634":2,"1635":3,"1638":5,"1639":6,"1640":3}}],["categoryassignparentupdatehandler",{"2":{"543":1,"551":1,"924":1,"927":1},"3":{"543":1,"545":1,"550":1,"551":1,"924":1,"927":1,"1270":2}}],["category",{"0":{"1216":1,"1450":1,"1461":1,"1469":1,"1516":1},"1":{"1009":1,"1010":1,"1011":1,"1012":1,"1013":1,"1014":1,"1794":1,"1795":1,"1796":1,"1797":1,"1798":1,"1799":1,"1800":1,"1801":1,"1802":1},"2":{"11":1,"804":1,"924":1,"1594":1,"1991":1,"2112":1},"3":{"0":7,"11":1,"109":4,"110":3,"111":1,"168":1,"188":1,"390":1,"403":1,"550":1,"804":1,"819":1,"860":1,"882":1,"924":2,"963":1,"972":1,"1009":1,"1010":1,"1011":5,"1012":4,"1013":2,"1014":1,"1017":1,"1022":1,"1028":1,"1090":2,"1190":1,"1192":2,"1193":2,"1194":1,"1198":1,"1199":52,"1201":1,"1202":1,"1203":2,"1207":3,"1216":3,"1222":1,"1229":4,"1237":6,"1241":1,"1247":10,"1259":1,"1270":2,"1286":3,"1301":1,"1310":5,"1311":1,"1312":1,"1315":1,"1317":1,"1320":1,"1323":2,"1324":7,"1339":4,"1340":1,"1342":3,"1343":4,"1344":1,"1347":2,"1348":1,"1350":124,"1351":2,"1352":1,"1353":1,"1354":1,"1359":264,"1362":3,"1369":14,"1371":2,"1375":1,"1376":1,"1380":17,"1382":1,"1385":1,"1386":1,"1387":2,"1390":1,"1395":98,"1396":1,"1416":1,"1417":3,"1418":1,"1427":2,"1431":2,"1436":13,"1437":1,"1438":5,"1440":1,"1450":1,"1456":1,"1457":1,"1458":1,"1459":1,"1461":1,"1467":5,"1469":1,"1487":1,"1492":1,"1493":1,"1496":5,"1497":1,"1498":1,"1499":2,"1518":2,"1519":2,"1521":1,"1523":1,"1526":7,"1527":1,"1529":2,"1530":1,"1531":1,"1532":3,"1533":1,"1535":3,"1536":2,"1537":10,"1553":1,"1575":2,"1577":3,"1578":1,"1580":1,"1581":1,"1582":1,"1583":3,"1584":3,"1585":1,"1586":1,"1588":1,"1591":5,"1592":2,"1594":1,"1595":1,"1597":2,"1598":2,"1600":2,"1611":1,"1629":1,"1630":11,"1631":3,"1632":31,"1634":5,"1635":2,"1636":3,"1637":4,"1638":5,"1639":16,"1640":7,"1673":2,"1674":1,"1702":1,"1742":1,"1746":6,"1748":8,"1750":6,"1755":3,"1764":9,"1767":5,"1768":1,"1769":4,"1773":2,"1776":4,"1777":1,"1779":1,"1780":2,"1784":8,"1787":1,"1793":1,"1794":2,"1796":5,"1797":4,"1798":2,"1799":7,"1800":1,"1801":1,"1802":5,"1827":1,"1845":1,"1903":1,"1925":1,"1929":1,"1930":1,"1957":1,"1991":1,"2041":2,"2043":1,"2044":2,"2049":3,"2051":1,"2052":1,"2054":1,"2056":1,"2060":2,"2061":1,"2063":4,"2071":1,"2087":1,"2112":1,"2116":1,"2117":1,"2135":1,"2155":1,"2157":2,"2162":1,"2164":1,"2171":1,"2173":1,"2182":1,"2184":1,"2195":1,"2197":1,"2205":1,"2206":1,"2207":1,"2213":1,"2216":1,"2223":1,"2233":2,"2234":2,"2247":1}}],["catalyst",{"3":{"682":1,"684":1,"1416":2,"1417":4,"1660":1,"1669":1}}],["catalogroutepaths",{"3":{"1591":1}}],["catalogrouteauthorizationtests",{"3":{"1436":1,"1591":1}}],["catalogintegrationtestfixture",{"3":{"1436":1}}],["catalogcrossservicefactory",{"3":{"1436":1}}],["catalogcache",{"2":{"392":1,"393":1},"3":{"392":1,"393":3}}],["catalogtestwebapplicationfactory",{"3":{"1436":1}}],["cataloged",{"3":{"1428":1,"1436":1}}],["catalogued",{"3":{"1301":1,"1347":1,"1350":1,"1403":1,"1496":1}}],["catalogue",{"3":{"974":1,"1237":2,"1311":2,"1324":2,"1344":2,"1348":1,"1369":1,"1394":1,"1395":4}}],["cataloguimodule",{"3":{"649":1,"1324":2,"1591":1}}],["cataloguserdataexportsection",{"2":{"583":1,"728":1},"3":{"725":1,"728":2}}],["catalogmoduletests",{"3":{"1436":2}}],["catalogmoduleseeder",{"3":{"1323":2}}],["catalogmoduledbseeder",{"3":{"1286":2}}],["catalogmodule",{"2":{"586":1},"3":{"583":2,"584":1,"586":2,"675":1,"676":1,"1323":1}}],["catalogbrowse",{"2":{"557":1,"558":1},"3":{"556":6,"557":1,"558":1,"1324":1,"1591":9,"1596":1,"1597":1,"1600":1}}],["catalogproductdetail",{"3":{"556":1,"1324":1,"1591":1,"1596":1,"1597":1}}],["catalogpermissiongrants",{"3":{"186":1}}],["catalogpermissions",{"2":{"1264":1},"3":{"186":1,"1026":1,"1264":1,"1767":1}}],["catalogs",{"3":{"387":1,"1436":1,"1755":1}}],["catalogfeatures",{"2":{"1748":1,"1765":1},"3":{"300":1,"1270":1,"1748":1,"1765":1}}],["catalog",{"0":{"1685":1,"1748":1},"1":{"1023":1,"1024":1,"1025":1,"1026":1,"1027":1,"1028":1,"1029":1,"1030":1,"1659":1,"1660":1,"1661":1,"1662":1,"1663":1,"1664":1,"1665":1,"1666":1,"1667":1,"1668":1,"1669":1,"1670":1,"1671":1,"1672":1,"1673":1,"1674":1,"1675":1},"2":{"62":1,"493":1,"1588":1,"1751":2,"1769":2,"2203":1},"3":{"0":3,"42":4,"62":1,"80":5,"91":4,"93":1,"94":2,"95":1,"97":2,"99":1,"101":2,"104":1,"109":2,"117":2,"128":4,"136":1,"142":1,"184":1,"185":1,"186":2,"195":5,"235":2,"238":1,"243":8,"245":2,"249":1,"250":2,"251":2,"252":2,"254":2,"257":2,"259":1,"260":6,"261":3,"291":1,"295":1,"325":1,"326":1,"341":1,"345":1,"387":2,"390":4,"391":8,"392":4,"393":1,"401":2,"403":1,"446":1,"448":6,"452":3,"453":1,"454":1,"459":1,"468":1,"470":4,"475":4,"476":7,"477":4,"493":1,"545":9,"552":2,"556":6,"564":1,"572":4,"583":13,"585":4,"586":4,"599":2,"602":1,"640":2,"643":1,"649":3,"650":1,"657":5,"658":1,"674":4,"675":2,"676":2,"715":1,"725":1,"728":3,"733":1,"743":1,"749":2,"752":1,"757":2,"759":1,"774":2,"780":1,"782":9,"790":1,"798":2,"804":4,"837":2,"838":2,"861":1,"864":1,"869":1,"876":1,"881":1,"889":2,"891":1,"897":10,"900":2,"914":1,"924":5,"927":3,"954":7,"990":1,"1023":1,"1024":1,"1025":7,"1026":24,"1028":2,"1029":3,"1030":1,"1054":1,"1059":7,"1082":4,"1085":1,"1086":2,"1168":6,"1207":1,"1212":2,"1237":7,"1247":4,"1259":2,"1262":1,"1265":1,"1270":14,"1271":5,"1286":14,"1297":2,"1300":25,"1301":6,"1307":1,"1311":34,"1312":4,"1323":18,"1324":31,"1339":15,"1348":2,"1350":12,"1359":1,"1369":2,"1380":14,"1393":1,"1395":10,"1396":30,"1401":1,"1402":2,"1405":1,"1414":1,"1415":6,"1431":1,"1436":54,"1438":1,"1467":1,"1486":1,"1488":1,"1489":1,"1496":2,"1500":1,"1541":1,"1588":2,"1591":24,"1596":6,"1597":1,"1599":1,"1600":10,"1602":1,"1621":2,"1627":1,"1659":1,"1671":1,"1681":1,"1683":1,"1685":5,"1686":1,"1687":1,"1727":1,"1728":1,"1742":3,"1746":26,"1748":9,"1749":4,"1750":6,"1751":15,"1755":1,"1757":2,"1758":1,"1760":1,"1761":1,"1763":4,"1764":15,"1765":32,"1767":5,"1768":3,"1769":12,"1771":3,"1772":6,"1773":7,"1775":2,"1777":1,"1785":1,"1874":1,"1875":2,"1893":1,"1918":2,"1922":4,"1923":2,"1957":1,"1960":1,"1963":2,"2056":1,"2089":1,"2112":2,"2113":1,"2115":1,"2133":6,"2140":1,"2158":2,"2202":3,"2203":3,"2205":1,"2230":1,"2234":1}}],["catastrophic",{"3":{"0":1,"791":1,"861":1,"1237":1,"1309":1,"1323":1,"1577":1,"1706":1,"1707":1,"1836":1,"1849":1,"2168":1}}],["catchable",{"3":{"1259":1,"1436":2}}],["catchesadomainreachinganothermodulesapplication",{"3":{"1436":1}}],["catches",{"3":{"18":1,"125":1,"127":1,"132":1,"133":1,"135":1,"148":1,"225":1,"255":1,"345":1,"465":1,"486":1,"490":1,"491":1,"492":1,"493":1,"494":1,"518":1,"566":1,"573":1,"593":1,"609":1,"698":1,"709":1,"718":1,"767":2,"863":1,"897":1,"956":1,"982":1,"988":1,"990":1,"1018":1,"1019":2,"1021":1,"1102":1,"1169":1,"1237":1,"1254":1,"1259":2,"1270":1,"1286":5,"1300":3,"1311":2,"1312":4,"1315":1,"1323":4,"1324":9,"1339":3,"1359":3,"1380":1,"1396":6,"1402":2,"1410":1,"1415":3,"1416":2,"1417":6,"1423":1,"1436":18,"1438":2,"1455":3,"1456":1,"1458":1,"1475":1,"1476":1,"1488":2,"1489":1,"1492":1,"1496":2,"1524":1,"1526":1,"1535":1,"1605":3,"1654":1,"1739":3,"1790":1,"1805":1,"1806":1,"1873":1,"1881":1,"1923":1,"1927":2,"1929":2,"1930":1,"1961":1,"2000":1,"2019":1,"2037":1,"2042":1,"2049":1,"2068":1,"2102":2,"2108":2,"2110":1,"2128":1,"2171":1,"2177":1,"2181":1}}],["catching",{"3":{"0":1,"590":1,"881":1,"1247":1,"1270":1,"1286":3,"1300":1,"1304":1,"1323":2,"1324":9,"1395":2,"1396":5,"1415":2,"1416":1,"1417":5,"1427":1,"1431":1,"1436":9,"1438":1,"1455":2,"1492":2,"1663":1,"1669":1,"1702":1,"2003":1,"2048":1,"2049":1,"2076":1,"2102":1,"2119":1,"2167":1}}],["catch",{"0":{"1919":1},"2":{"21":1,"111":1,"512":1,"537":1,"684":1,"896":1,"899":1,"1218":1,"1803":1,"1804":1,"1919":1,"2171":1},"3":{"0":7,"21":1,"107":1,"108":1,"109":6,"110":2,"111":2,"135":1,"180":3,"231":1,"258":1,"295":1,"303":1,"310":1,"344":1,"413":1,"426":1,"434":1,"435":1,"436":1,"466":1,"512":1,"517":1,"523":1,"529":1,"536":2,"537":1,"559":1,"565":1,"574":1,"619":1,"684":1,"692":2,"700":1,"707":1,"709":1,"724":1,"726":1,"727":1,"765":1,"790":1,"801":1,"810":1,"819":1,"827":2,"840":3,"842":1,"861":1,"896":1,"897":2,"899":1,"914":1,"972":1,"988":1,"1018":1,"1019":2,"1093":1,"1218":1,"1225":1,"1229":4,"1233":1,"1247":6,"1254":1,"1259":7,"1263":2,"1270":5,"1276":1,"1286":13,"1289":2,"1300":8,"1301":4,"1302":1,"1304":1,"1309":9,"1311":10,"1312":3,"1323":16,"1324":29,"1334":1,"1337":1,"1339":7,"1350":1,"1352":1,"1357":1,"1358":1,"1359":16,"1366":2,"1378":2,"1380":25,"1395":14,"1396":23,"1399":1,"1402":7,"1415":9,"1416":2,"1417":20,"1425":2,"1427":3,"1435":2,"1436":36,"1438":4,"1447":3,"1453":1,"1455":1,"1466":1,"1467":1,"1487":1,"1488":1,"1489":3,"1496":7,"1524":1,"1547":1,"1577":1,"1662":1,"1670":1,"1671":1,"1765":1,"1774":1,"1803":1,"1804":3,"1805":1,"1806":1,"1812":1,"1835":1,"1852":1,"1858":1,"1919":1,"1920":1,"1927":3,"1933":2,"1934":2,"1940":1,"1946":2,"1952":1,"1954":1,"1959":1,"1970":1,"1980":1,"1995":1,"1999":1,"2033":1,"2042":1,"2044":1,"2050":1,"2055":1,"2060":1,"2069":3,"2072":1,"2077":1,"2080":1,"2081":1,"2101":1,"2167":2,"2169":2,"2171":1,"2179":1,"2234":1}}],["cantidad",{"3":{"1686":1}}],["canvas",{"3":{"1480":3}}],["canevaluatepolicy",{"3":{"1417":1}}],["canmoderate",{"3":{"1402":7}}],["canmanage=",{"3":{"1395":2}}],["canmanage",{"3":{"1380":2,"1389":1,"1395":2}}],["canreview",{"3":{"1748":1,"1765":1}}],["canrendereventpicker",{"3":{"1395":2}}],["canreadsessionassetsasync",{"3":{"1359":6}}],["canreadtoken",{"3":{"1300":1,"1324":1}}],["canbookmark",{"3":{"1395":1}}],["cansubmitlink",{"3":{"1395":2}}],["canserve",{"3":{"1324":4,"1395":2}}],["canned",{"3":{"1359":1,"1432":2,"1434":1,"1436":14,"1671":1}}],["cannot",{"0":{"1234":1,"1936":1,"2026":1,"2115":1},"3":{"0":35,"17":1,"19":2,"24":2,"26":1,"31":3,"32":1,"33":1,"38":1,"39":1,"41":1,"68":2,"78":1,"81":1,"91":1,"92":2,"93":1,"94":1,"98":1,"100":1,"103":1,"109":1,"110":2,"119":1,"120":1,"122":1,"123":1,"130":1,"133":1,"134":1,"135":3,"136":1,"137":3,"147":1,"149":1,"150":1,"157":2,"158":1,"160":1,"168":1,"187":1,"189":1,"201":1,"203":1,"206":1,"207":1,"212":1,"213":2,"214":1,"215":3,"216":1,"224":1,"225":1,"227":1,"233":1,"234":1,"235":4,"236":1,"243":1,"248":2,"249":1,"253":1,"255":3,"265":4,"267":1,"279":1,"280":1,"284":1,"285":1,"309":2,"310":1,"317":2,"318":3,"319":1,"324":1,"326":1,"330":2,"331":2,"341":2,"342":1,"343":2,"350":3,"353":1,"359":2,"363":1,"365":1,"370":1,"371":1,"380":1,"384":1,"387":1,"390":1,"397":3,"399":1,"408":1,"412":2,"413":1,"420":1,"422":1,"423":1,"433":1,"435":1,"449":2,"451":1,"459":1,"461":1,"465":1,"498":1,"500":1,"506":1,"509":3,"511":1,"513":1,"517":3,"518":2,"519":2,"526":1,"528":1,"529":5,"530":3,"535":1,"536":2,"537":3,"545":2,"546":2,"547":2,"549":1,"551":1,"556":2,"557":1,"558":1,"564":1,"565":1,"568":1,"571":1,"574":1,"576":2,"584":1,"585":1,"591":1,"593":1,"601":2,"608":1,"609":2,"610":1,"617":1,"619":1,"620":2,"625":3,"628":1,"633":2,"635":2,"640":1,"649":1,"651":1,"658":1,"660":1,"664":1,"674":1,"676":1,"681":1,"689":2,"690":1,"691":2,"692":1,"698":4,"699":1,"709":1,"714":2,"717":1,"718":3,"725":1,"726":2,"733":3,"734":1,"741":3,"742":3,"743":1,"757":2,"758":1,"762":1,"767":1,"773":1,"775":1,"784":1,"789":1,"790":1,"792":1,"793":1,"794":1,"800":1,"810":2,"818":1,"819":1,"821":1,"827":6,"828":1,"832":1,"840":1,"848":1,"853":1,"854":5,"855":2,"857":1,"861":2,"862":1,"870":1,"871":1,"872":1,"881":3,"883":1,"888":1,"889":3,"896":1,"903":1,"904":2,"905":5,"906":1,"908":1,"914":1,"921":1,"922":3,"924":1,"926":4,"931":1,"939":1,"940":1,"955":1,"956":1,"957":1,"966":1,"972":1,"974":1,"988":2,"996":5,"997":2,"998":1,"1004":1,"1017":1,"1018":3,"1019":2,"1020":2,"1026":2,"1028":2,"1029":1,"1033":1,"1034":1,"1042":2,"1043":2,"1044":1,"1050":1,"1052":2,"1059":3,"1060":1,"1067":2,"1074":1,"1083":1,"1085":2,"1091":2,"1092":2,"1093":1,"1100":1,"1101":2,"1102":1,"1110":1,"1115":1,"1116":4,"1124":2,"1125":1,"1126":1,"1132":2,"1133":2,"1134":1,"1135":1,"1145":1,"1155":1,"1160":1,"1162":1,"1175":1,"1176":1,"1177":1,"1184":1,"1185":4,"1191":1,"1212":8,"1221":1,"1223":1,"1224":1,"1226":1,"1228":1,"1229":10,"1232":1,"1233":1,"1234":2,"1235":1,"1237":11,"1239":3,"1240":1,"1241":6,"1243":4,"1247":33,"1248":1,"1252":1,"1253":2,"1254":2,"1256":1,"1257":1,"1259":15,"1262":1,"1263":1,"1265":3,"1267":1,"1270":29,"1271":13,"1273":2,"1274":2,"1275":2,"1276":2,"1277":2,"1278":3,"1279":1,"1281":2,"1283":1,"1284":1,"1286":81,"1288":2,"1289":2,"1290":2,"1292":2,"1293":2,"1294":2,"1297":3,"1298":1,"1300":74,"1301":19,"1302":1,"1305":3,"1307":2,"1308":1,"1309":28,"1310":7,"1311":61,"1312":7,"1316":1,"1317":1,"1318":1,"1320":4,"1322":3,"1323":63,"1324":105,"1326":2,"1327":1,"1328":1,"1331":1,"1332":4,"1336":1,"1337":3,"1339":58,"1344":1,"1346":1,"1348":1,"1349":1,"1350":41,"1352":3,"1353":1,"1354":1,"1355":1,"1357":2,"1358":2,"1359":221,"1362":3,"1366":5,"1367":2,"1368":1,"1369":14,"1371":1,"1372":2,"1373":1,"1374":1,"1375":1,"1378":2,"1379":1,"1380":32,"1384":1,"1385":1,"1386":1,"1389":2,"1391":1,"1392":1,"1393":1,"1395":58,"1396":103,"1398":1,"1399":5,"1401":3,"1402":44,"1405":2,"1406":4,"1407":2,"1408":1,"1409":1,"1414":2,"1415":63,"1416":9,"1417":30,"1419":1,"1421":1,"1423":2,"1426":1,"1427":12,"1428":2,"1429":1,"1430":3,"1431":5,"1432":1,"1433":1,"1435":3,"1436":160,"1438":23,"1441":6,"1442":3,"1443":3,"1444":2,"1445":2,"1446":1,"1447":1,"1449":2,"1452":1,"1453":11,"1454":5,"1455":17,"1456":1,"1458":1,"1459":7,"1460":1,"1465":4,"1467":15,"1469":1,"1472":1,"1474":3,"1475":3,"1476":1,"1477":2,"1481":2,"1482":1,"1483":1,"1484":1,"1486":3,"1487":1,"1488":5,"1489":4,"1490":3,"1491":1,"1492":7,"1496":2,"1498":1,"1500":1,"1513":1,"1524":1,"1526":8,"1531":3,"1534":3,"1537":1,"1553":1,"1575":2,"1577":4,"1582":1,"1584":1,"1585":2,"1589":1,"1591":2,"1596":1,"1605":2,"1611":2,"1630":2,"1631":8,"1632":3,"1635":3,"1638":1,"1639":10,"1640":3,"1641":9,"1642":1,"1644":1,"1648":1,"1651":2,"1653":1,"1654":1,"1661":2,"1666":2,"1667":4,"1668":1,"1669":2,"1670":3,"1671":3,"1673":1,"1676":1,"1677":2,"1679":1,"1681":1,"1685":6,"1686":9,"1692":1,"1701":2,"1702":1,"1706":1,"1707":1,"1722":2,"1723":1,"1725":1,"1726":1,"1727":2,"1728":1,"1729":1,"1730":1,"1731":1,"1732":1,"1737":1,"1739":2,"1748":2,"1749":2,"1755":2,"1764":2,"1765":8,"1767":11,"1772":1,"1788":1,"1793":1,"1795":1,"1797":1,"1803":2,"1805":3,"1806":1,"1809":1,"1810":3,"1812":2,"1814":3,"1815":5,"1816":1,"1817":1,"1829":1,"1830":1,"1832":3,"1834":1,"1835":1,"1838":1,"1839":1,"1842":1,"1846":1,"1849":1,"1851":2,"1856":1,"1858":2,"1859":2,"1861":1,"1863":1,"1864":1,"1868":1,"1874":1,"1876":2,"1877":1,"1885":1,"1888":2,"1889":1,"1894":2,"1896":1,"1897":1,"1898":3,"1901":1,"1902":2,"1906":1,"1908":1,"1910":1,"1912":1,"1916":1,"1918":1,"1920":2,"1922":1,"1923":1,"1924":1,"1925":1,"1927":2,"1933":2,"1937":2,"1940":1,"1941":1,"1942":1,"1944":2,"1945":2,"1946":1,"1948":1,"1950":3,"1952":1,"1953":1,"1954":1,"1957":1,"1960":1,"1965":1,"1966":1,"1968":2,"1969":1,"1970":1,"1971":1,"1972":2,"1974":1,"1976":3,"1977":2,"1978":1,"1980":3,"1981":3,"1982":2,"1985":1,"1986":1,"1987":2,"1988":2,"1990":2,"1993":2,"1995":6,"1997":1,"1998":2,"1999":2,"2000":1,"2001":2,"2002":2,"2003":4,"2015":1,"2017":1,"2020":1,"2025":1,"2026":3,"2028":1,"2029":1,"2031":1,"2038":1,"2041":1,"2042":2,"2044":3,"2046":2,"2049":1,"2050":2,"2057":2,"2062":1,"2064":1,"2066":2,"2070":2,"2073":2,"2076":1,"2081":1,"2084":1,"2085":2,"2087":1,"2091":1,"2092":1,"2097":1,"2099":2,"2100":1,"2102":1,"2106":1,"2108":1,"2109":2,"2111":1,"2115":1,"2117":1,"2118":1,"2122":3,"2124":1,"2125":1,"2129":1,"2131":1,"2133":1,"2135":2,"2138":1,"2143":1,"2144":2,"2146":1,"2148":2,"2149":4,"2152":1,"2154":1,"2155":4,"2156":2,"2158":1,"2160":2,"2162":2,"2163":1,"2166":2,"2168":2,"2169":2,"2170":1,"2171":4,"2174":1,"2176":1,"2178":2,"2180":1,"2181":1,"2182":2,"2183":1,"2185":1,"2187":1,"2190":2,"2194":1,"2195":2,"2196":1,"2197":2,"2198":1,"2200":2,"2201":1,"2203":1,"2205":3,"2232":1,"2234":4}}],["cangobackasync",{"3":{"1324":1}}],["canaries",{"3":{"1453":1}}],["canary",{"3":{"0":4,"135":1,"265":1,"530":2,"564":4,"624":2,"626":2,"631":1,"633":5,"757":1,"1012":1,"1032":2,"1034":4,"1036":1,"1037":3,"1436":2,"1453":2,"1454":2,"1455":1,"1460":1,"1461":3,"1486":1,"1492":3,"1493":1,"1554":1,"1574":1,"1577":2,"1664":1,"1673":1,"2107":1}}],["canauthenticate",{"3":{"1417":1}}],["canacceptupvote",{"3":{"1398":1,"1402":2}}],["canacceptvote",{"3":{"1398":1,"1402":6}}],["canadminister",{"3":{"1324":1,"1415":1}}],["canjoinasync",{"3":{"1286":1,"1309":2}}],["candid",{"3":{"1270":1,"1369":1,"1436":1,"1443":1,"1792":1,"1891":1,"1978":1,"2060":1,"2134":1}}],["candidate",{"3":{"0":2,"24":1,"145":1,"150":2,"256":1,"325":1,"326":1,"907":1,"1075":2,"1076":1,"1077":1,"1196":1,"1237":3,"1259":3,"1270":2,"1275":1,"1286":2,"1289":2,"1300":7,"1301":2,"1303":1,"1309":1,"1311":1,"1324":5,"1339":2,"1350":2,"1359":4,"1395":2,"1415":2,"1436":1,"1438":1,"1496":1,"1638":1,"2050":1}}],["candidates",{"3":{"0":2,"145":2,"150":2,"153":1,"1074":1,"1075":1,"1077":1,"1079":2,"1259":1,"1311":1,"1324":1,"1339":2,"1355":1,"1396":1,"1402":1,"1415":1,"1436":4,"1673":1,"2190":1}}],["canproject",{"3":{"1244":1,"1247":2,"1270":1,"1309":2}}],["canparse",{"3":{"1241":1,"1247":12}}],["canparsevalues",{"3":{"1300":5}}],["canparsevalue",{"2":{"335":1},"3":{"335":1,"1241":2,"1247":15,"1496":1}}],["canwrite",{"3":{"1242":1,"1247":2}}],["canclose",{"3":{"1436":1}}],["cancheckin",{"3":{"1396":2}}],["canconvertto",{"3":{"1300":1}}],["canconvertfrom",{"3":{"1300":1}}],["canconvert",{"2":{"1223":1},"3":{"1223":1,"1229":1,"1237":2,"1300":2}}],["cancelordercommand",{"3":{"1591":1}}],["cancelorderhandler",{"2":{"534":1,"793":1,"1875":1},"3":{"534":3,"536":8,"540":2,"793":2,"1591":1,"1749":1,"1765":1,"1767":1,"1875":1,"2165":2}}],["cancelall",{"3":{"1417":1}}],["cancelallasync",{"3":{"1417":3}}],["cancelasync",{"3":{"1417":5}}],["cancelable",{"3":{"1359":1}}],["cancelanddisposecurrent",{"3":{"1324":2}}],["cancelafter",{"3":{"1263":1,"1324":1}}],["canceledoutcome",{"3":{"1427":2}}],["cancelediting",{"3":{"1395":11}}],["canceled",{"3":{"1089":1,"1311":1,"1324":1,"1425":1,"1436":2,"2179":1}}],["cancels",{"3":{"237":1,"518":1,"556":1,"592":1,"813":1,"926":1,"1100":1,"1212":1,"1247":1,"1263":1,"1270":2,"1300":1,"1316":1,"1323":2,"1324":12,"1339":2,"1380":1,"1395":7,"1396":5,"1402":9,"1415":3,"1417":8,"1436":2,"1456":1,"1492":1,"1668":1,"1765":1,"1821":1,"2048":1,"2163":1}}],["canceltext",{"2":{"684":1},"3":{"0":1,"682":1,"684":1,"1324":3,"1416":1,"1417":3}}],["canceller",{"3":{"1339":1}}],["cancelled",{"2":{"793":1,"1754":1},"3":{"0":4,"109":1,"135":1,"440":1,"534":1,"536":5,"538":2,"539":2,"682":3,"790":1,"793":4,"897":1,"1091":1,"1212":1,"1259":2,"1263":1,"1270":4,"1286":1,"1289":1,"1300":1,"1309":1,"1311":1,"1323":1,"1324":6,"1339":3,"1357":1,"1359":3,"1395":10,"1396":7,"1399":1,"1402":2,"1411":1,"1415":5,"1417":15,"1422":1,"1431":1,"1436":3,"1438":1,"1455":3,"1456":1,"1460":1,"1475":2,"1483":1,"1526":1,"1686":1,"1749":1,"1754":1,"1755":1,"1765":3,"1766":1,"1767":1,"1923":1,"2035":1,"2098":1,"2128":1,"2163":1,"2165":2,"2166":2,"2167":1,"2169":3,"2170":2,"2176":1,"2234":1}}],["cancelloading",{"3":{"1324":1}}],["cancellingsection",{"3":{"1199":2,"1207":1,"1323":1}}],["cancelling",{"3":{"0":1,"535":1,"788":1,"793":2,"813":1,"1259":1,"1270":1,"1324":6,"1339":1,"1395":3,"1396":7,"1427":1,"1456":1,"1475":1,"1492":1,"1767":1}}],["cancellable",{"3":{"0":1,"135":1,"683":1,"1270":1,"1300":1,"1395":1,"1396":2,"1415":1,"1417":1,"1436":2,"1455":1,"1765":1,"1766":2,"1767":1,"1768":1,"1918":1}}],["cancellations",{"3":{"1311":1}}],["cancellationfixtures",{"3":{"1207":12,"1436":10}}],["cancellationtestmap",{"3":{"1198":1,"1199":2,"1207":1,"1436":5,"1496":1}}],["cancellationtokenfixtures",{"3":{"1207":6,"1436":8}}],["cancellationtokenfitnesstests",{"3":{"1198":1,"1199":2,"1207":3,"1436":10,"1489":1,"1496":1}}],["cancellationtokenconventiontests",{"3":{"135":1,"139":1,"142":2,"1199":1,"1207":2,"1309":1,"1436":11,"1489":1}}],["cancellationtokenconventiontestsbase",{"2":{"1431":1},"3":{"135":2,"139":1,"1199":2,"1207":2,"1431":3,"1436":8,"1496":1}}],["cancellationtokenexemptmethods",{"3":{"135":1,"1436":4}}],["cancellationtokens",{"2":{"135":1},"3":{"135":3,"139":1,"1207":1,"1431":1,"1436":7,"1489":1}}],["cancellationtokensource",{"2":{"121":1,"743":1,"1384":1,"2072":1,"2074":1},"3":{"743":1,"1263":1,"1270":1,"1323":1,"1324":15,"1384":1,"1395":24,"1396":4,"1402":6,"1415":3,"1417":2,"1427":1,"1436":1,"2072":1,"2074":1}}],["cancellationtoken",{"2":{"130":1,"143":1,"225":1,"743":1,"879":1,"897":1,"996":1,"1261":2,"1289":1,"1324":1,"1918":1,"1919":1,"1934":1,"2094":1},"3":{"0":5,"130":1,"135":2,"143":1,"225":1,"235":1,"459":1,"682":3,"707":1,"725":1,"733":1,"743":1,"879":1,"881":2,"897":5,"922":1,"996":1,"1247":10,"1259":14,"1261":2,"1263":1,"1269":1,"1270":30,"1286":74,"1289":1,"1300":54,"1301":14,"1304":1,"1309":30,"1310":4,"1311":29,"1315":1,"1323":41,"1324":63,"1339":15,"1350":4,"1359":45,"1369":2,"1380":11,"1395":41,"1396":45,"1402":8,"1415":15,"1417":126,"1431":2,"1436":58,"1918":1,"1919":2,"1934":1,"2094":1,"2234":1}}],["cancellation",{"3":{"0":4,"21":2,"27":2,"109":2,"135":1,"178":1,"459":1,"465":1,"518":1,"534":1,"536":2,"538":1,"559":1,"683":1,"881":2,"882":2,"896":2,"897":5,"898":2,"988":1,"1100":1,"1212":1,"1247":4,"1255":1,"1259":6,"1263":1,"1270":14,"1286":10,"1301":2,"1309":3,"1311":4,"1323":7,"1324":23,"1334":1,"1337":1,"1339":3,"1357":1,"1358":1,"1359":5,"1366":1,"1369":2,"1380":2,"1383":1,"1391":1,"1395":23,"1396":17,"1399":2,"1402":4,"1411":1,"1415":2,"1417":16,"1422":1,"1423":1,"1427":2,"1431":2,"1436":8,"1438":8,"1475":1,"1496":2,"1526":1,"1535":1,"1577":2,"1591":1,"1640":1,"1653":1,"1665":1,"1666":1,"1671":1,"1702":1,"1749":3,"1755":4,"1765":2,"1767":2,"1775":1,"1776":2,"1806":1,"1917":2,"1919":3,"2069":1,"2072":1,"2074":3,"2076":1,"2082":1,"2098":1,"2115":1,"2119":1,"2165":3,"2167":1,"2170":1,"2182":1}}],["cancel",{"2":{"268":1},"3":{"0":3,"265":1,"268":1,"517":1,"519":1,"536":2,"556":1,"682":3,"684":2,"793":4,"809":1,"1101":1,"1212":1,"1270":1,"1324":9,"1357":1,"1359":1,"1395":18,"1396":6,"1411":1,"1415":2,"1417":17,"1430":1,"1436":2,"1445":1,"1453":2,"1455":5,"1456":2,"1459":1,"1460":3,"1475":1,"1591":1,"1627":1,"1742":1,"1746":2,"1749":2,"1754":1,"1755":1,"1765":1,"1768":4,"2078":1,"2081":1,"2085":1,"2165":1,"2169":1,"2234":1}}],["canonicalization",{"3":{"1324":1}}],["canonicalizing",{"3":{"1286":1}}],["canonicalizes",{"3":{"1300":1,"1324":1}}],["canonicalize",{"3":{"220":1,"1324":1}}],["canonicalized",{"3":{"219":1,"1324":1,"2152":1}}],["canonically",{"3":{"333":1}}],["canonical",{"3":{"0":1,"98":1,"160":1,"175":1,"202":1,"265":1,"309":1,"324":1,"325":1,"333":1,"366":1,"498":1,"529":1,"782":1,"872":1,"912":1,"944":1,"946":3,"950":1,"963":1,"964":1,"1018":2,"1019":1,"1020":1,"1116":2,"1192":1,"1212":2,"1221":1,"1227":1,"1229":2,"1234":1,"1237":1,"1247":3,"1270":1,"1271":2,"1278":1,"1279":2,"1286":6,"1300":6,"1309":2,"1311":3,"1323":1,"1324":3,"1339":2,"1350":6,"1352":1,"1359":4,"1380":2,"1396":2,"1411":1,"1415":6,"1435":2,"1436":9,"1438":1,"1443":1,"1492":1,"1496":1,"1502":1,"1515":1,"1522":1,"1526":3,"1573":1,"1577":3,"1587":1,"1591":1,"1630":1,"1631":1,"1641":4,"1799":1,"1805":1,"1849":1,"1905":1,"1955":1,"2043":1,"2114":1,"2234":1,"2235":1}}],["can",{"0":{"1235":1,"2045":1},"1":{"1794":1,"1795":1,"1796":1,"1797":1,"1798":1,"1799":1,"1800":1,"1801":1,"1802":1,"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1956":1,"1957":1,"1958":1,"1959":1},"3":{"0":25,"1":1,"5":1,"10":1,"24":1,"26":2,"27":1,"30":1,"31":1,"32":2,"39":1,"42":2,"48":1,"60":1,"68":1,"69":2,"70":1,"72":1,"77":1,"95":1,"97":1,"100":1,"101":1,"103":1,"109":3,"110":1,"111":2,"117":2,"119":1,"121":1,"122":2,"134":1,"135":2,"136":2,"137":1,"140":1,"145":1,"146":1,"150":1,"156":1,"157":2,"159":1,"166":1,"167":1,"170":1,"174":1,"175":1,"177":3,"178":2,"179":1,"184":1,"185":1,"189":2,"194":1,"199":1,"201":1,"202":1,"208":1,"210":1,"214":1,"215":1,"217":1,"231":1,"234":2,"235":1,"236":2,"237":4,"243":1,"245":3,"255":1,"256":1,"259":1,"264":1,"265":3,"266":1,"275":1,"280":1,"283":2,"286":2,"293":1,"299":1,"303":2,"305":2,"310":1,"317":1,"318":1,"319":1,"320":1,"333":1,"340":2,"341":4,"343":1,"344":1,"352":1,"353":1,"358":3,"359":1,"360":1,"365":1,"373":1,"378":1,"380":2,"384":1,"386":1,"390":3,"391":1,"396":1,"397":2,"399":1,"415":2,"420":1,"421":1,"422":1,"427":3,"428":1,"435":2,"441":1,"442":1,"447":1,"449":1,"459":1,"461":2,"474":1,"478":1,"502":1,"506":1,"508":1,"509":1,"511":1,"513":1,"518":1,"519":1,"520":2,"528":1,"529":1,"530":4,"536":1,"538":1,"539":3,"540":1,"544":1,"545":1,"546":1,"549":5,"556":1,"558":2,"564":1,"565":1,"571":1,"572":2,"573":1,"583":2,"592":1,"598":1,"601":1,"610":2,"611":1,"617":3,"619":1,"620":2,"626":4,"627":1,"628":1,"632":1,"633":2,"635":1,"638":1,"640":3,"642":2,"649":1,"651":1,"657":2,"658":3,"665":1,"667":1,"673":3,"675":2,"676":2,"681":1,"682":1,"684":1,"690":4,"691":1,"692":4,"697":3,"698":2,"707":1,"709":2,"714":1,"716":2,"717":1,"718":2,"721":1,"725":3,"726":2,"727":3,"733":2,"735":2,"740":2,"741":1,"742":1,"743":2,"749":2,"750":1,"751":3,"757":3,"758":1,"759":1,"767":1,"768":3,"774":2,"775":1,"783":1,"784":2,"790":1,"791":3,"792":2,"799":2,"800":1,"810":1,"811":1,"815":1,"819":2,"821":2,"826":2,"827":5,"828":2,"829":2,"832":1,"839":1,"840":1,"853":1,"855":1,"856":1,"862":2,"863":1,"876":1,"881":1,"882":1,"891":1,"896":1,"897":1,"898":1,"903":1,"904":2,"905":5,"906":2,"907":2,"909":1,"916":1,"922":2,"924":1,"926":1,"930":1,"933":1,"940":1,"941":1,"952":1,"953":1,"954":1,"956":3,"960":1,"964":1,"965":1,"966":1,"971":2,"972":1,"973":1,"974":1,"982":1,"987":1,"988":2,"989":2,"990":2,"995":2,"996":3,"998":1,"1005":1,"1006":3,"1013":1,"1017":1,"1018":4,"1019":3,"1020":1,"1026":1,"1028":2,"1033":1,"1034":2,"1042":2,"1044":1,"1050":1,"1051":2,"1052":3,"1058":2,"1059":6,"1066":1,"1067":1,"1068":1,"1069":1,"1074":1,"1083":2,"1084":1,"1091":1,"1092":1,"1093":1,"1100":2,"1101":1,"1102":1,"1115":1,"1116":5,"1117":1,"1118":2,"1126":1,"1134":2,"1147":1,"1160":2,"1162":2,"1169":1,"1174":1,"1175":1,"1176":1,"1178":1,"1183":2,"1185":2,"1186":1,"1190":1,"1191":1,"1200":1,"1210":1,"1212":6,"1216":1,"1217":2,"1218":1,"1219":1,"1220":1,"1222":1,"1225":2,"1229":18,"1231":2,"1236":1,"1237":38,"1239":1,"1240":2,"1241":2,"1242":2,"1243":1,"1244":1,"1247":57,"1248":1,"1253":1,"1254":3,"1255":1,"1256":2,"1259":30,"1262":3,"1263":3,"1265":1,"1267":1,"1269":1,"1270":68,"1271":13,"1273":2,"1274":1,"1276":2,"1278":6,"1279":1,"1280":1,"1281":3,"1283":1,"1284":1,"1285":3,"1286":177,"1288":3,"1289":1,"1290":1,"1292":2,"1293":4,"1294":1,"1296":1,"1297":3,"1299":1,"1300":118,"1301":27,"1306":1,"1307":3,"1308":2,"1309":45,"1310":14,"1311":116,"1312":12,"1313":1,"1315":2,"1316":1,"1317":4,"1318":1,"1320":1,"1322":1,"1323":107,"1324":193,"1326":1,"1328":2,"1330":2,"1331":1,"1333":2,"1334":1,"1336":2,"1338":1,"1339":78,"1341":2,"1342":4,"1343":3,"1344":2,"1345":1,"1347":2,"1348":1,"1349":1,"1350":98,"1352":3,"1353":4,"1354":1,"1355":2,"1356":1,"1357":2,"1359":245,"1362":2,"1363":1,"1366":4,"1368":3,"1369":19,"1371":2,"1372":1,"1373":4,"1374":1,"1375":4,"1376":1,"1378":1,"1379":2,"1380":36,"1382":1,"1383":2,"1384":1,"1386":1,"1388":1,"1389":4,"1390":2,"1391":1,"1395":123,"1396":163,"1398":3,"1399":1,"1400":2,"1401":1,"1402":56,"1404":1,"1406":1,"1407":2,"1408":1,"1409":3,"1411":2,"1413":1,"1415":87,"1416":20,"1417":105,"1418":1,"1420":1,"1422":4,"1423":1,"1425":1,"1427":18,"1429":4,"1430":4,"1431":3,"1433":1,"1434":1,"1435":3,"1436":218,"1438":18,"1441":4,"1442":1,"1443":5,"1445":1,"1446":2,"1447":2,"1449":1,"1451":1,"1452":2,"1453":5,"1454":5,"1455":28,"1456":6,"1458":3,"1459":4,"1461":1,"1463":1,"1464":1,"1465":2,"1467":25,"1474":1,"1475":3,"1476":1,"1478":1,"1479":2,"1481":1,"1484":2,"1486":1,"1488":8,"1489":1,"1490":5,"1492":9,"1498":2,"1500":2,"1504":1,"1507":1,"1513":1,"1526":2,"1531":1,"1534":3,"1537":2,"1541":1,"1544":1,"1547":1,"1550":2,"1553":1,"1562":2,"1564":1,"1567":1,"1570":1,"1572":4,"1577":1,"1589":2,"1591":3,"1596":1,"1599":1,"1607":1,"1610":1,"1613":1,"1615":1,"1626":3,"1627":2,"1630":3,"1631":19,"1632":7,"1635":5,"1638":4,"1639":5,"1641":18,"1645":1,"1650":1,"1651":1,"1652":1,"1653":2,"1661":1,"1663":1,"1664":1,"1665":1,"1667":1,"1668":2,"1669":1,"1670":1,"1671":1,"1673":1,"1674":1,"1675":1,"1676":1,"1677":1,"1679":1,"1684":1,"1685":2,"1686":4,"1687":1,"1689":1,"1693":1,"1699":1,"1701":2,"1702":2,"1706":1,"1708":1,"1720":1,"1727":3,"1728":2,"1729":2,"1731":2,"1741":1,"1744":1,"1749":1,"1754":1,"1755":1,"1758":1,"1761":2,"1764":1,"1765":7,"1767":12,"1769":1,"1770":1,"1773":1,"1776":2,"1786":1,"1788":1,"1794":1,"1796":1,"1797":3,"1799":1,"1800":1,"1801":2,"1802":1,"1803":2,"1804":2,"1805":3,"1806":1,"1807":2,"1808":2,"1809":2,"1810":1,"1811":1,"1812":2,"1814":1,"1815":4,"1817":5,"1819":1,"1821":1,"1824":1,"1825":3,"1826":2,"1832":1,"1833":1,"1836":1,"1837":1,"1838":1,"1839":1,"1840":2,"1841":2,"1844":2,"1845":2,"1847":1,"1848":2,"1851":1,"1852":2,"1855":2,"1856":1,"1861":1,"1862":1,"1863":1,"1864":2,"1865":2,"1868":1,"1871":2,"1872":1,"1873":1,"1874":1,"1875":1,"1877":2,"1882":2,"1885":1,"1890":2,"1892":4,"1893":4,"1894":1,"1897":1,"1898":1,"1899":1,"1900":1,"1902":3,"1904":1,"1905":1,"1908":5,"1909":4,"1910":1,"1911":4,"1912":1,"1916":2,"1918":2,"1919":1,"1920":1,"1922":2,"1923":3,"1924":1,"1926":1,"1927":1,"1929":1,"1933":3,"1934":2,"1938":1,"1940":1,"1942":1,"1944":2,"1945":1,"1946":4,"1948":4,"1949":2,"1950":3,"1951":1,"1952":1,"1954":3,"1955":2,"1957":1,"1960":5,"1961":1,"1963":1,"1964":1,"1965":2,"1966":2,"1967":4,"1968":2,"1969":1,"1970":1,"1971":2,"1972":2,"1975":1,"1977":1,"1978":1,"1979":2,"1980":4,"1982":1,"1985":1,"1990":1,"1994":2,"1995":1,"1996":3,"1997":1,"1998":1,"1999":1,"2000":1,"2001":1,"2002":7,"2003":3,"2005":1,"2006":2,"2009":1,"2010":1,"2011":3,"2012":1,"2013":3,"2014":2,"2022":1,"2025":4,"2026":1,"2027":2,"2028":1,"2029":1,"2030":2,"2031":1,"2033":1,"2034":1,"2035":2,"2036":1,"2038":1,"2039":1,"2042":1,"2044":3,"2045":2,"2046":1,"2047":1,"2048":1,"2049":1,"2050":1,"2051":1,"2053":1,"2056":1,"2057":5,"2058":1,"2062":1,"2064":1,"2067":1,"2068":1,"2069":2,"2070":2,"2071":1,"2074":1,"2078":1,"2084":1,"2085":1,"2088":2,"2089":2,"2093":1,"2096":1,"2097":3,"2100":1,"2106":1,"2107":1,"2108":1,"2109":2,"2111":3,"2115":2,"2116":1,"2121":1,"2123":1,"2124":2,"2126":1,"2128":2,"2129":3,"2130":1,"2132":2,"2133":1,"2135":2,"2137":2,"2139":2,"2142":3,"2143":4,"2148":3,"2149":1,"2151":1,"2152":1,"2155":3,"2158":3,"2160":1,"2161":2,"2162":2,"2163":1,"2165":2,"2166":1,"2167":1,"2168":1,"2169":2,"2170":2,"2171":2,"2172":3,"2173":1,"2177":1,"2180":1,"2181":2,"2182":3,"2186":1,"2189":1,"2190":2,"2193":1,"2194":2,"2195":2,"2196":1,"2197":1,"2198":1,"2199":1,"2200":1,"2201":3,"2202":2,"2203":1,"2204":2,"2205":4,"2207":1,"2208":1,"2209":1,"2210":1,"2232":1,"2234":4}}],["cadences",{"3":{"767":1,"1467":1,"1469":1,"1484":1,"1888":1}}],["cadence",{"3":{"0":3,"22":3,"62":2,"143":1,"607":2,"609":1,"626":1,"627":1,"634":1,"642":1,"706":1,"1018":1,"1036":1,"1259":4,"1300":1,"1301":1,"1323":4,"1339":2,"1350":2,"1390":2,"1395":4,"1443":1,"1450":1,"1455":2,"1459":1,"1467":8,"1469":2,"1474":3,"1475":1,"1476":3,"1483":1,"1492":1,"1521":1,"1589":2,"1591":1,"1592":1,"1595":1,"1596":1,"1598":1,"1661":1,"1724":1,"1841":2,"1845":1,"2038":1,"2160":3}}],["capgbpermonth",{"3":{"1467":1}}],["capgbpermonth=",{"3":{"1116":1,"1119":1}}],["capital",{"3":{"1379":1}}],["capitalized",{"3":{"1311":1,"1380":1}}],["capitalization",{"3":{"1300":1,"1311":1,"1667":1}}],["capitals",{"3":{"1286":1,"1324":1}}],["captioning",{"3":{"1630":1,"1631":1,"1637":1}}],["captions",{"3":{"1480":1}}],["caption",{"3":{"1324":9,"1396":3,"1436":3,"1480":5}}],["captive",{"3":{"1259":1,"1359":1,"1417":2}}],["capturingmessagebus",{"3":{"1199":2,"1207":1}}],["capturinghandler",{"3":{"1199":6,"1207":4}}],["capturinghttpmessagehandlertests",{"3":{"1199":1,"1207":2,"1436":3}}],["capturinghttpmessagehandler",{"2":{"1432":1},"3":{"954":1,"1199":27,"1207":4,"1428":1,"1432":8,"1436":12,"1488":1}}],["capturinglogger",{"3":{"1199":4,"1207":2}}],["capturing",{"0":{"1251":1},"3":{"481":1,"483":1,"716":2,"1237":1,"1251":1,"1259":1,"1274":1,"1286":6,"1300":1,"1310":1,"1311":1,"1323":1,"1324":1,"1338":1,"1339":2,"1359":1,"1417":4,"1436":4,"1456":1,"1577":1,"1660":1,"1671":1,"1764":1}}],["captureasync",{"3":{"1436":3}}],["captureavatarasync",{"3":{"1415":1}}],["capturetofileasync",{"3":{"1417":3}}],["capturephotoasync",{"3":{"1417":4}}],["capturejsruntime",{"3":{"1417":1}}],["captureunauthorized",{"3":{"1324":1}}],["captureexclusiontable",{"3":{"1286":1}}],["captureeventsandpersisttooutbox",{"3":{"1286":4}}],["captureentry",{"3":{"1286":4}}],["capturemodifiedproperties",{"3":{"1286":3}}],["capturechanges",{"3":{"1286":4}}],["capturecontext",{"2":{"1277":1},"3":{"1199":2,"1203":1,"1207":1,"1277":1,"1286":3}}],["captureheaders",{"3":{"1259":2,"1436":2}}],["captures",{"3":{"15":1,"142":1,"202":1,"261":1,"350":1,"373":1,"396":1,"420":1,"423":1,"481":1,"572":1,"676":1,"702":1,"707":1,"715":1,"717":1,"931":1,"1042":1,"1091":1,"1233":1,"1237":1,"1247":2,"1259":4,"1273":1,"1286":8,"1300":3,"1309":2,"1311":2,"1318":1,"1323":3,"1324":4,"1339":3,"1340":1,"1345":1,"1349":1,"1350":3,"1359":8,"1363":1,"1369":2,"1380":1,"1395":3,"1396":10,"1402":1,"1406":1,"1415":3,"1417":10,"1427":1,"1429":1,"1436":8,"1441":1,"1479":2,"1480":2,"1488":1,"1502":1,"1525":1,"1526":1,"1665":1,"1839":1,"1840":1,"1881":1,"1908":1,"1948":1,"1976":1,"2056":1,"2093":1}}],["capturedstate",{"3":{"1199":3,"1203":1,"1207":1,"1237":1,"1274":1,"1286":6}}],["capturedrequest",{"3":{"1199":4,"1207":2,"1432":1,"1436":5}}],["capturedmeasurement",{"3":{"1199":2,"1207":1}}],["capturedcounter",{"3":{"1199":2,"1207":1}}],["captured",{"0":{"1253":1},"3":{"0":1,"21":1,"26":2,"27":1,"109":1,"120":1,"202":1,"243":1,"330":1,"359":1,"397":1,"399":1,"403":1,"483":1,"498":1,"500":2,"501":1,"682":1,"698":1,"716":1,"720":2,"781":1,"786":1,"860":1,"1020":1,"1043":1,"1212":2,"1231":1,"1232":1,"1233":1,"1237":7,"1246":1,"1247":1,"1251":1,"1252":1,"1253":1,"1259":10,"1270":3,"1274":4,"1279":1,"1286":29,"1300":3,"1301":1,"1309":3,"1310":2,"1311":7,"1318":1,"1323":10,"1324":4,"1326":1,"1327":2,"1328":1,"1339":9,"1350":10,"1355":1,"1358":1,"1359":14,"1380":1,"1395":18,"1396":5,"1398":1,"1402":4,"1406":1,"1410":1,"1415":3,"1416":1,"1417":6,"1436":6,"1438":2,"1455":1,"1467":1,"1479":2,"1480":1,"1496":1,"1508":1,"1567":1,"1571":1,"1631":1,"1641":1,"1665":1,"1677":1,"1686":1,"1825":1,"1843":1,"1844":1,"1894":1,"1980":2,"1981":1,"2113":1,"2194":1}}],["capture",{"0":{"1479":2},"3":{"0":6,"21":8,"202":1,"439":1,"440":1,"481":1,"490":1,"698":1,"713":1,"714":2,"715":2,"716":1,"717":2,"720":1,"721":1,"749":1,"751":2,"905":1,"1036":1,"1212":1,"1213":1,"1218":1,"1229":2,"1233":1,"1237":5,"1249":2,"1251":4,"1253":3,"1255":1,"1259":14,"1270":1,"1272":1,"1274":4,"1275":2,"1277":1,"1280":1,"1286":39,"1300":2,"1309":2,"1311":3,"1312":1,"1318":2,"1323":1,"1324":3,"1339":1,"1350":1,"1359":1,"1395":2,"1396":1,"1402":1,"1415":2,"1417":19,"1433":2,"1436":16,"1438":1,"1455":1,"1471":1,"1479":15,"1480":4,"1482":1,"1483":1,"1488":3,"1537":2,"1552":1,"1575":1,"1577":1,"1584":1,"1664":1,"1672":1,"1767":1,"1797":1,"1804":1,"1825":2,"1838":1,"1839":1,"2054":1,"2128":1,"2234":2}}],["capacities",{"3":{"1359":1}}],["capacity",{"3":{"413":1,"519":1,"591":1,"628":1,"630":1,"768":2,"827":2,"1100":1,"1101":1,"1124":1,"1125":1,"1270":1,"1301":1,"1311":3,"1324":3,"1337":1,"1339":2,"1350":4,"1359":18,"1369":1,"1380":4,"1395":13,"1396":4,"1400":1,"1416":1,"1417":3,"1455":3,"1458":3,"1459":1,"1461":1,"1467":4,"1484":1,"1523":2,"1524":2,"1525":1,"1526":1,"1530":1,"1531":1,"1533":1,"1534":1,"1549":1,"1577":2,"1582":1,"1589":1,"1596":1,"1629":1,"1630":2,"1631":2,"1637":1,"1670":1,"1708":1,"1841":1,"1947":1,"2123":2}}],["capable",{"3":{"92":1,"96":1,"100":1,"810":1,"838":1,"841":1,"988":2,"1243":1,"1247":1,"1286":1,"1301":3,"1339":1,"1359":1,"1369":1,"1395":1,"1396":1,"1417":2,"1447":1,"1984":1,"2075":1}}],["capabilitiesjsmodule",{"2":{"2121":1},"3":{"1199":11,"1203":1,"1207":2,"1324":5,"1417":21,"2121":1}}],["capabilities",{"0":{"2203":1},"1":{"1960":1,"1961":1,"1962":1,"1963":1,"1964":1,"1965":1},"2":{"1175":1,"1416":3,"1417":9},"3":{"0":3,"185":1,"186":6,"187":2,"190":1,"245":1,"266":1,"283":1,"304":1,"324":1,"412":1,"413":7,"414":2,"415":2,"416":2,"418":1,"420":1,"423":1,"427":1,"428":2,"430":1,"434":1,"436":1,"461":1,"556":1,"682":5,"684":1,"689":1,"820":1,"980":1,"1034":1,"1059":1,"1060":1,"1107":1,"1175":3,"1176":1,"1200":1,"1203":89,"1207":204,"1208":1,"1238":1,"1259":3,"1270":1,"1280":1,"1286":34,"1297":4,"1300":7,"1309":1,"1311":1,"1317":1,"1323":1,"1324":9,"1350":3,"1377":1,"1380":1,"1395":1,"1396":8,"1409":2,"1415":8,"1416":5,"1417":426,"1436":1,"1438":1,"1496":7,"1500":1,"1510":1,"1577":1,"1599":1,"1621":1,"1626":1,"1627":1,"1629":1,"1630":1,"1632":1,"1638":1,"1639":1,"1662":1,"1667":1,"1856":1,"1862":1,"1872":1,"1960":2,"1961":1,"1963":1,"1965":2,"2119":1,"2120":3,"2121":1,"2123":3,"2124":1,"2125":2,"2196":1,"2197":1,"2203":1,"2205":1,"2210":1}}],["capabilityfallbacktests",{"3":{"1199":1,"1207":2,"1417":32,"1438":2}}],["capability",{"0":{"1231":1,"1409":1,"1810":1,"2119":1},"1":{"410":1,"411":1,"412":1,"413":1,"414":1,"415":1,"416":1,"679":1,"680":1,"681":1,"682":1,"683":1,"684":1,"685":1,"686":1,"1047":1,"1048":1,"1049":1,"1050":1,"1051":1,"1052":1,"1053":1,"1054":1,"1055":1,"1417":1,"1659":1,"1660":1,"1661":1,"1662":1,"1663":1,"1664":1,"1665":1,"1666":1,"1667":1,"1668":1,"1669":1,"1670":1,"1671":1,"1672":1,"1673":1,"1674":1,"1675":1,"2118":1,"2119":1,"2120":1,"2121":1,"2122":1,"2123":1,"2124":1,"2125":1},"2":{"1760":1},"3":{"0":14,"39":1,"115":1,"126":3,"184":2,"185":4,"186":4,"188":2,"191":1,"243":2,"258":1,"300":1,"301":1,"317":2,"318":1,"319":1,"324":2,"358":1,"410":1,"411":1,"413":5,"414":2,"415":2,"426":1,"434":1,"439":1,"440":1,"468":1,"482":1,"510":1,"549":1,"558":1,"649":1,"650":1,"653":1,"656":1,"661":1,"665":1,"679":1,"681":4,"682":2,"683":2,"686":2,"689":1,"691":1,"694":2,"696":1,"698":1,"705":1,"706":1,"708":1,"713":1,"717":1,"723":1,"725":1,"739":1,"741":1,"749":1,"797":1,"798":2,"802":1,"804":2,"806":1,"820":2,"954":1,"957":1,"964":1,"965":3,"966":2,"968":1,"979":1,"1003":1,"1004":1,"1034":1,"1047":1,"1048":1,"1049":2,"1050":1,"1051":1,"1052":3,"1053":1,"1054":1,"1055":1,"1060":1,"1115":1,"1116":2,"1118":1,"1120":1,"1132":1,"1176":1,"1178":1,"1191":1,"1192":4,"1194":2,"1195":1,"1200":1,"1201":2,"1202":3,"1203":3,"1212":5,"1217":1,"1228":1,"1229":2,"1230":1,"1231":1,"1232":1,"1237":5,"1247":2,"1259":1,"1263":4,"1264":1,"1270":12,"1271":1,"1281":1,"1286":19,"1287":1,"1297":3,"1300":23,"1301":4,"1303":2,"1304":2,"1308":1,"1309":19,"1310":3,"1311":7,"1315":1,"1322":1,"1323":11,"1324":14,"1339":1,"1347":1,"1348":8,"1350":20,"1357":2,"1359":11,"1367":1,"1372":3,"1373":8,"1377":2,"1380":32,"1381":1,"1388":1,"1391":1,"1395":10,"1396":44,"1402":6,"1404":1,"1405":1,"1406":1,"1409":5,"1414":5,"1415":22,"1416":10,"1417":104,"1422":1,"1427":2,"1431":1,"1436":11,"1438":4,"1481":2,"1491":2,"1496":14,"1505":1,"1513":1,"1514":1,"1517":1,"1526":4,"1531":1,"1534":1,"1541":1,"1542":1,"1575":1,"1577":2,"1582":2,"1583":1,"1585":1,"1599":3,"1602":1,"1621":2,"1626":3,"1627":4,"1631":1,"1632":1,"1640":3,"1653":1,"1659":2,"1660":2,"1669":1,"1673":1,"1675":1,"1733":1,"1760":2,"1761":1,"1770":1,"1771":1,"1779":2,"1810":3,"1821":4,"1823":2,"1860":1,"1868":1,"1903":1,"1904":1,"1921":1,"1932":1,"1948":1,"1959":1,"1960":3,"1961":4,"1962":7,"1963":1,"1964":4,"1965":3,"1978":1,"1996":4,"2064":2,"2085":1,"2117":2,"2118":3,"2119":4,"2120":2,"2122":1,"2124":1,"2125":6,"2128":2,"2129":1,"2140":2,"2141":1,"2145":1,"2200":1,"2201":1,"2204":1,"2205":1,"2212":2,"2234":6}}],["capping",{"3":{"176":1,"332":1,"1242":1,"1247":1,"1286":1,"1311":1,"1350":1,"1402":1,"1597":1}}],["capped",{"3":{"0":5,"19":1,"22":1,"23":1,"328":1,"330":1,"333":2,"335":1,"378":1,"384":1,"707":1,"854":1,"1026":1,"1042":2,"1095":1,"1118":1,"1212":1,"1237":1,"1238":1,"1243":2,"1247":3,"1256":1,"1259":6,"1275":2,"1278":2,"1286":7,"1291":1,"1292":1,"1294":1,"1300":6,"1309":1,"1311":1,"1317":1,"1323":2,"1324":2,"1339":1,"1344":1,"1357":1,"1359":2,"1369":2,"1371":1,"1395":15,"1396":3,"1402":2,"1415":1,"1427":1,"1436":2,"1443":1,"1467":1,"1578":1,"1589":1,"1631":2,"1632":1,"1640":1,"1641":3,"1665":1,"1667":1,"1668":1,"1713":1,"1748":3,"1765":3,"1784":1,"1800":1,"1815":3,"1841":1,"1923":1,"1937":1,"1948":1,"1988":2,"1999":1,"2001":1,"2039":1,"2049":1,"2175":1,"2180":1,"2190":1,"2194":1}}],["capseconds",{"3":{"1286":1}}],["caps",{"3":{"0":2,"27":1,"175":2,"280":2,"282":3,"330":1,"333":1,"334":1,"361":1,"552":1,"669":1,"691":1,"692":1,"740":1,"830":1,"832":1,"853":1,"907":1,"1042":1,"1118":1,"1212":2,"1237":1,"1241":2,"1247":3,"1259":2,"1286":5,"1294":1,"1300":2,"1305":1,"1307":1,"1309":3,"1310":1,"1311":1,"1323":3,"1324":3,"1344":2,"1350":20,"1359":5,"1384":2,"1388":1,"1395":9,"1396":1,"1398":2,"1401":1,"1402":4,"1411":1,"1415":1,"1417":1,"1436":7,"1442":1,"1447":1,"1457":3,"1467":3,"1526":1,"1534":1,"1577":2,"1591":1,"1599":3,"1600":1,"1671":1,"1945":1,"1988":1,"1991":1,"2000":1,"2001":1,"2003":3,"2038":1,"2147":1,"2172":1,"2234":1}}],["cap",{"0":{"2055":1},"3":{"0":16,"19":4,"23":3,"26":1,"27":1,"57":1,"59":2,"174":1,"175":2,"176":3,"177":2,"178":3,"179":1,"180":1,"182":1,"223":1,"225":1,"228":1,"280":1,"282":1,"283":1,"287":1,"335":2,"350":1,"395":2,"403":2,"434":1,"438":1,"442":1,"500":2,"501":2,"524":2,"607":2,"609":2,"611":1,"612":3,"710":1,"719":2,"741":8,"743":2,"744":1,"749":1,"767":1,"825":1,"826":2,"827":2,"828":1,"831":1,"855":1,"856":1,"905":6,"906":4,"907":2,"909":1,"996":3,"1005":1,"1006":2,"1059":1,"1116":3,"1119":2,"1124":1,"1212":2,"1237":2,"1242":2,"1243":2,"1247":11,"1254":1,"1256":1,"1259":9,"1273":1,"1275":2,"1283":1,"1285":1,"1286":3,"1290":1,"1294":1,"1295":1,"1300":25,"1307":1,"1309":7,"1311":10,"1323":15,"1324":13,"1326":1,"1339":1,"1344":1,"1347":2,"1350":17,"1357":4,"1359":12,"1371":1,"1373":1,"1380":1,"1383":1,"1384":1,"1389":4,"1390":2,"1392":1,"1395":31,"1396":12,"1399":2,"1401":1,"1402":18,"1406":2,"1409":1,"1414":1,"1415":9,"1416":1,"1417":1,"1427":1,"1436":14,"1438":3,"1447":2,"1456":3,"1460":2,"1465":7,"1467":21,"1469":1,"1473":1,"1478":2,"1488":1,"1489":1,"1496":1,"1525":1,"1526":4,"1531":3,"1532":2,"1534":2,"1575":1,"1581":1,"1583":1,"1584":1,"1586":1,"1591":6,"1596":2,"1597":2,"1599":1,"1631":1,"1632":33,"1635":1,"1640":4,"1662":1,"1667":1,"1767":1,"1817":1,"1825":1,"1829":2,"1977":1,"1982":6,"1983":3,"1984":5,"1985":2,"1988":1,"1992":1,"1999":2,"2000":2,"2001":2,"2002":3,"2003":5,"2015":1,"2025":3,"2061":1,"2075":1,"2081":1,"2128":1,"2160":1,"2168":1,"2171":1,"2200":1,"2234":1}}],["chronological",{"3":{"1309":1,"1383":1,"1395":2,"1396":1,"1632":2,"1640":4}}],["chronologically",{"3":{"741":1,"1359":1,"1380":1,"1392":1,"1395":2}}],["chrometextmuted",{"3":{"1324":2}}],["chrometext",{"3":{"1324":1}}],["chromebackground",{"3":{"1324":3}}],["chrome",{"3":{"265":4,"267":1,"275":1,"860":1,"861":1,"954":1,"1324":30,"1395":4,"1396":2,"1402":1,"1416":3,"1436":6,"1438":1,"1526":1,"1559":1,"1577":1,"1591":1,"1606":1,"1609":1,"1644":1,"1653":1,"1669":1,"1687":2,"1716":1,"1740":1,"1743":1,"2077":1,"2087":1}}],["chromium",{"3":{"0":4,"265":2,"558":1,"591":1,"618":2,"619":2,"625":3,"626":2,"756":1,"861":1,"863":3,"1212":3,"1324":2,"1414":1,"1433":3,"1436":7,"1438":2,"1455":1,"1456":7,"1460":1,"1461":2,"1463":2,"1486":1,"1488":4,"1490":2,"1492":5,"1524":1,"1526":8,"1531":3,"1532":1,"1534":3,"1535":1,"1577":6,"1586":1,"1591":10,"1596":5,"1599":3,"1600":1,"1643":1,"1716":2,"1739":1,"1775":1,"2058":2,"2075":1,"2081":1}}],["cheat",{"3":{"691":1,"1369":1}}],["cheaper",{"3":{"627":1,"675":1,"741":1,"947":1,"964":1,"965":1,"981":1,"1019":1,"1041":1,"1051":1,"1092":1,"1124":1,"1144":1,"1229":1,"1286":4,"1300":2,"1311":1,"1323":1,"1324":3,"1329":1,"1339":2,"1359":6,"1395":4,"1396":3,"1402":1,"1415":1,"1417":1,"1436":3,"1443":1,"1491":1,"1631":1,"1678":1,"1708":1,"1951":1,"2001":1,"2050":1,"2152":1}}],["cheapest",{"3":{"110":1,"150":1,"235":1,"242":1,"266":1,"319":1,"742":1,"915":1,"973":1,"1019":1,"1234":1,"1237":2,"1247":3,"1259":1,"1270":1,"1286":1,"1300":1,"1309":1,"1311":2,"1324":1,"1359":3,"1369":1,"1392":1,"1395":2,"1396":3,"1417":3,"1436":7,"1467":1,"1488":1,"1531":1,"1802":1,"1810":1,"2055":1,"2141":1}}],["cheaply",{"3":{"244":1,"460":1,"1052":1,"1142":1,"1277":1,"1286":1,"1289":1,"1300":2,"1309":1,"1311":1,"1359":3,"1395":1,"1396":1,"1402":1,"1415":1,"1436":5,"1605":1,"1739":1,"2025":1,"2095":1,"2128":1}}],["cheap",{"3":{"0":2,"18":1,"110":1,"111":1,"165":1,"174":1,"236":1,"237":1,"295":1,"309":1,"529":1,"546":1,"565":2,"619":1,"641":1,"684":1,"734":1,"751":1,"758":1,"767":1,"776":1,"783":1,"811":1,"813":1,"826":2,"855":1,"871":1,"932":1,"953":1,"962":1,"965":1,"989":1,"1005":2,"1049":1,"1075":1,"1099":1,"1123":1,"1154":1,"1212":1,"1229":1,"1237":1,"1242":1,"1247":3,"1259":2,"1270":1,"1271":1,"1286":9,"1292":1,"1300":3,"1301":2,"1309":1,"1311":5,"1323":1,"1324":6,"1339":2,"1350":1,"1359":12,"1369":3,"1376":1,"1380":5,"1387":1,"1395":9,"1396":12,"1402":3,"1415":1,"1417":4,"1427":4,"1436":5,"1438":2,"1449":1,"1455":4,"1456":2,"1467":1,"1475":1,"1492":1,"1531":1,"1534":1,"1589":1,"1641":1,"1677":2,"1678":1,"1789":1,"1792":1,"1810":1,"1832":2,"1902":1,"1934":1,"1958":1,"2000":1,"2001":2,"2100":1,"2146":1,"2150":1,"2160":1,"2182":1,"2186":1,"2199":1}}],["checkpoint",{"3":{"1429":2,"1649":1,"1654":1}}],["checkpreconditions",{"3":{"1396":4}}],["checknotlocked",{"3":{"1415":2}}],["checknameprefix",{"3":{"1339":1}}],["checkname",{"2":{"1220":1},"3":{"1220":1,"1339":1}}],["checkkey",{"3":{"1339":2,"1441":1}}],["checkhealthasync",{"3":{"1339":9}}],["checkboxes",{"3":{"1324":2,"1436":1}}],["checkbox",{"3":{"1324":6,"1396":1,"1436":4,"1496":1,"1626":1,"2142":1}}],["checkdate",{"2":{"1220":1},"3":{"1220":1}}],["checkownershipasync",{"3":{"1300":1}}],["checkownership",{"2":{"725":1,"1322":1,"1667":1},"3":{"725":1,"1322":1,"1323":4,"1415":2,"1667":1}}],["checkoutoutcome",{"3":{"1600":1}}],["checkoutandpayasync",{"3":{"1600":1}}],["checkoutcommand",{"3":{"988":1,"1270":2,"1749":2}}],["checkoutpreflight",{"2":{"1025":1,"1029":1},"3":{"897":1,"900":1,"1025":2,"1026":2,"1029":2,"1600":1}}],["checkouts",{"3":{"566":1,"567":1,"2166":1}}],["checkoutdomainservice",{"2":{"1025":1},"3":{"0":1,"1025":2,"1765":1,"1767":1}}],["checkoutdeadlinescheduler",{"2":{"534":1,"539":1,"540":1,"814":1},"3":{"0":1,"534":1,"539":5,"540":3,"674":2,"677":1,"814":2,"1600":1}}],["checkouthandler",{"2":{"535":1,"539":1,"677":1,"813":1,"814":1,"986":1,"990":1,"991":1,"1025":1,"1600":1},"3":{"0":2,"534":3,"535":2,"539":3,"540":1,"677":1,"813":2,"814":2,"986":1,"988":4,"990":2,"991":1,"1025":2,"1026":1,"1029":1,"1591":2,"1600":3,"1765":1,"1767":1,"2163":1}}],["checkout",{"1":{"1023":1,"1024":1,"1025":1,"1026":1,"1027":1,"1028":1,"1029":1,"1030":1},"2":{"790":2,"1765":1,"1770":2},"3":{"0":6,"534":3,"535":3,"536":2,"539":6,"562":1,"566":2,"567":1,"674":1,"782":1,"790":2,"793":3,"794":1,"811":1,"813":2,"814":1,"881":2,"897":5,"900":3,"988":2,"1023":1,"1025":3,"1026":2,"1027":3,"1028":2,"1029":1,"1212":1,"1426":2,"1436":2,"1453":1,"1454":4,"1455":2,"1459":3,"1475":1,"1483":1,"1500":1,"1588":1,"1591":3,"1600":5,"1742":1,"1746":4,"1749":6,"1750":4,"1751":1,"1752":1,"1753":1,"1755":3,"1757":1,"1759":1,"1763":2,"1765":14,"1767":4,"1768":3,"1769":2,"1770":3,"1773":2,"1775":2,"1776":3,"2163":2,"2165":1,"2166":1,"2169":3,"2234":1}}],["checklist",{"0":{"1572":1,"1657":1,"1690":1,"1704":1},"3":{"620":1,"622":1,"1396":1,"1402":1,"1436":1,"1472":4,"1481":1,"1496":1,"1577":1,"1585":1,"1644":1,"1875":1,"2039":1}}],["checklockoutasync",{"3":{"281":2,"1300":3,"1323":1,"2001":2}}],["checkregistrationratelimitasync",{"2":{"281":1,"2001":1},"3":{"281":1,"1300":4,"2001":1}}],["checkable",{"3":{"72":1,"620":1,"1084":1,"1270":3,"1286":1,"1300":3,"1324":1,"1359":2,"1415":1,"1436":1,"1488":1,"1883":1}}],["checkinbycredentialasync",{"3":{"1396":2}}],["checkinidentifiertype",{"3":{"1396":1}}],["checkininvariants",{"2":{"690":1},"3":{"690":1,"1199":2,"1203":1,"1207":2,"1396":8}}],["checkintests",{"3":{"1199":1,"1207":2,"1396":1,"1438":1}}],["checkinasync",{"3":{"1396":2}}],["checkinauthorizationtests",{"3":{"1199":1,"1207":2,"1438":2}}],["checkinattendee",{"3":{"1203":2,"1207":4,"1271":2,"1396":9}}],["checkinattendeehandlertests",{"3":{"1199":1,"1207":3,"1438":1}}],["checkinattendeehandler",{"3":{"1199":2,"1203":1,"1207":2,"1271":3,"1350":2,"1396":21,"1438":1}}],["checkinattendeerequestvalidatortests",{"3":{"1199":1,"1207":2}}],["checkinattendeerequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1396":7}}],["checkinattendeerequest",{"3":{"1199":11,"1203":1,"1207":2,"1396":12}}],["checkinandpointstests",{"3":{"1199":1,"1207":2,"1438":2}}],["checkindtomapper",{"3":{"1199":1,"1203":1,"1207":2,"1396":7}}],["checkindto",{"3":{"1199":2,"1203":1,"1207":2,"1396":11}}],["checkinerrorcodes",{"3":{"1199":5,"1203":1,"1207":2,"1396":16}}],["checkinresultdto",{"3":{"1199":10,"1203":1,"1207":2,"1396":20}}],["checkinrow",{"3":{"1199":2,"1207":1}}],["checkinconfiguration",{"3":{"690":1,"691":1,"1199":1,"1203":1,"1207":2,"1286":1,"1396":24}}],["checkinprocessor",{"2":{"690":1},"3":{"690":2,"1199":5,"1203":1,"1207":3,"1350":5,"1359":2,"1396":73,"1436":1}}],["checkinmanage",{"2":{"690":1},"3":{"690":1,"1396":12}}],["checkinservicetests",{"3":{"1199":1,"1207":3,"1396":1,"1438":1}}],["checkinservice",{"3":{"1199":8,"1203":1,"1207":2,"1396":35}}],["checkinsettingstests",{"3":{"1199":1,"1207":2,"1396":1}}],["checkinsettings",{"2":{"690":1},"3":{"674":1,"690":1,"1199":4,"1203":1,"1207":2,"1350":2,"1396":9}}],["checkinstate",{"3":{"1199":2,"1203":1,"1207":1,"1396":8}}],["checkinscontrollertests",{"3":{"1199":1,"1207":3,"1396":2,"1438":2}}],["checkinscontroller",{"2":{"693":1},"3":{"690":3,"693":1,"1199":2,"1203":1,"1207":2,"1396":82}}],["checkinscopenamestests",{"3":{"1199":1,"1207":2,"1396":1}}],["checkinscopenames",{"3":{"1199":11,"1203":1,"1207":2,"1396":11}}],["checkinscope",{"2":{"688":1,"799":1,"803":1,"1052":1,"1054":1},"3":{"688":1,"690":2,"799":1,"803":1,"1052":1,"1054":1,"1199":34,"1203":1,"1207":2,"1396":37,"1415":1}}],["checkinscanroundtriptests",{"3":{"1199":1,"1207":2,"1438":2}}],["checkinscantests",{"3":{"1199":1,"1207":2,"1396":1,"1438":2}}],["checkinscanpage",{"3":{"1199":3,"1207":2}}],["checkinscan",{"2":{"693":1},"3":{"684":3,"685":3,"690":5,"693":1,"1199":2,"1203":1,"1207":4,"1396":56,"1417":1}}],["checkins",{"2":{"554":1,"1207":1,"1396":5},"3":{"0":1,"554":1,"556":3,"674":1,"690":11,"693":3,"799":1,"837":1,"838":1,"881":1,"1052":1,"1055":1,"1203":51,"1207":178,"1237":2,"1271":10,"1286":4,"1324":2,"1350":1,"1359":3,"1396":178,"1415":3,"1436":3,"1438":6,"1447":1,"1487":1,"1496":1,"1526":1}}],["checking",{"3":{"0":1,"390":1,"427":1,"460":1,"507":2,"579":1,"675":1,"827":2,"973":1,"1133":1,"1168":1,"1229":2,"1259":1,"1263":1,"1270":1,"1286":5,"1300":3,"1309":1,"1324":9,"1339":5,"1350":1,"1359":4,"1380":2,"1395":3,"1396":3,"1415":1,"1416":1,"1417":3,"1431":1,"1436":9,"1438":2,"1455":1,"1489":1,"1496":1,"1630":1,"1641":1,"1669":1,"1810":1,"1812":1,"1908":1,"1947":1,"1952":1,"1969":1,"1994":1,"2046":1}}],["checkin",{"2":{"474":1,"797":1,"801":2,"803":1,"1048":1,"1054":1,"1055":1,"1627":1},"3":{"0":2,"186":1,"474":1,"690":7,"691":1,"694":1,"797":1,"799":3,"801":4,"803":2,"1048":1,"1052":2,"1054":1,"1055":2,"1199":16,"1203":1,"1207":2,"1212":1,"1237":2,"1396":84,"1438":5,"1487":1,"1526":1,"1627":2,"1631":2,"2234":1}}],["checkemailconfirmed",{"2":{"2198":1},"3":{"1300":3,"2198":2}}],["checker",{"3":{"0":1,"1496":1,"2048":3}}],["checkedout",{"3":{"1749":2,"1750":1,"1764":1,"1765":1}}],["checkedin",{"3":{"1396":2}}],["checkedinon",{"3":{"1396":17,"1415":2}}],["checkedinbyuserid",{"2":{"799":1},"3":{"690":1,"799":1,"1396":12,"1631":1}}],["checked",{"3":{"0":2,"109":2,"135":1,"139":1,"160":1,"186":1,"209":1,"243":2,"250":2,"252":2,"254":1,"256":2,"257":2,"258":1,"259":1,"260":1,"261":2,"284":1,"318":1,"323":1,"335":3,"342":1,"350":2,"390":1,"397":1,"418":2,"423":1,"424":1,"426":1,"438":1,"442":1,"463":1,"464":1,"465":1,"489":1,"490":1,"507":1,"572":1,"576":1,"584":1,"585":1,"591":1,"611":1,"617":1,"628":1,"633":1,"642":1,"657":1,"660":1,"674":1,"692":1,"715":1,"718":1,"759":1,"766":1,"798":1,"811":1,"827":1,"838":1,"846":1,"867":1,"945":1,"959":1,"975":1,"1034":1,"1037":1,"1059":1,"1067":1,"1074":1,"1091":1,"1118":1,"1124":1,"1161":1,"1168":1,"1212":1,"1229":1,"1237":1,"1247":3,"1259":2,"1263":1,"1270":8,"1273":1,"1277":2,"1281":1,"1286":10,"1297":1,"1298":1,"1300":13,"1301":2,"1306":1,"1309":2,"1311":8,"1317":1,"1323":7,"1324":7,"1339":3,"1344":1,"1350":7,"1359":26,"1369":1,"1373":1,"1380":5,"1384":1,"1389":1,"1390":2,"1395":4,"1396":12,"1402":6,"1415":11,"1417":2,"1419":1,"1427":4,"1431":2,"1436":24,"1445":1,"1453":2,"1455":1,"1457":1,"1459":1,"1466":1,"1467":1,"1475":1,"1481":1,"1487":1,"1496":4,"1563":1,"1571":1,"1575":1,"1577":1,"1600":1,"1627":1,"1631":1,"1662":1,"1699":1,"1721":1,"1722":1,"1727":3,"1729":1,"1748":2,"1749":1,"1750":1,"1754":1,"1755":1,"1759":1,"1765":1,"1767":1,"1773":2,"1776":1,"1823":1,"1929":1,"1951":1,"1955":1,"1957":1,"1958":1,"1962":1,"1971":1,"1980":1,"1982":1,"2001":1,"2042":1,"2056":1,"2091":1,"2098":1,"2176":1,"2234":1}}],["checkstatusasync",{"3":{"1417":1}}],["checks",{"0":{"1332":1},"1":{"1960":1,"1961":1,"1962":1,"1963":1,"1964":1,"1965":1},"3":{"0":6,"12":1,"70":1,"74":1,"79":1,"100":1,"126":1,"132":1,"134":1,"135":1,"158":1,"166":1,"170":1,"187":1,"191":1,"201":1,"207":1,"233":2,"235":3,"236":1,"237":2,"243":1,"259":1,"282":1,"283":1,"287":1,"300":1,"349":1,"359":1,"402":2,"435":1,"453":1,"507":1,"536":1,"545":1,"558":1,"564":1,"566":1,"571":1,"572":1,"574":2,"577":1,"583":2,"591":1,"599":3,"600":1,"611":2,"626":1,"629":1,"651":1,"657":2,"659":1,"690":1,"700":1,"736":1,"744":1,"749":1,"757":3,"784":1,"826":1,"827":2,"829":1,"833":2,"834":1,"910":1,"913":1,"924":1,"956":1,"960":1,"990":1,"996":1,"1004":1,"1005":1,"1050":1,"1059":1,"1066":2,"1068":1,"1077":1,"1078":1,"1108":1,"1109":1,"1110":1,"1160":1,"1168":1,"1220":2,"1228":1,"1229":8,"1234":5,"1237":12,"1239":1,"1241":6,"1242":1,"1247":19,"1259":1,"1261":1,"1263":1,"1264":1,"1267":1,"1270":9,"1271":1,"1276":2,"1286":21,"1288":1,"1289":2,"1298":2,"1300":30,"1301":4,"1305":1,"1309":6,"1310":2,"1311":22,"1312":3,"1314":1,"1315":1,"1323":13,"1324":26,"1325":1,"1328":2,"1330":1,"1331":1,"1332":4,"1333":1,"1337":1,"1338":3,"1339":39,"1343":1,"1344":2,"1347":1,"1348":3,"1349":1,"1350":25,"1352":2,"1355":1,"1357":1,"1359":72,"1365":1,"1369":6,"1379":2,"1380":5,"1395":18,"1396":22,"1398":1,"1399":1,"1402":23,"1415":12,"1416":2,"1417":7,"1427":5,"1430":3,"1431":1,"1434":1,"1436":53,"1438":5,"1441":1,"1442":1,"1443":9,"1447":2,"1450":1,"1453":2,"1454":3,"1455":3,"1459":1,"1466":1,"1467":3,"1472":2,"1486":2,"1488":1,"1489":1,"1490":1,"1492":4,"1496":15,"1497":1,"1526":1,"1531":2,"1548":1,"1550":2,"1551":2,"1558":1,"1563":1,"1565":1,"1571":1,"1572":1,"1574":1,"1577":10,"1582":1,"1591":1,"1596":2,"1608":1,"1611":1,"1627":2,"1632":1,"1641":4,"1660":1,"1661":1,"1668":1,"1670":2,"1673":1,"1677":1,"1684":1,"1742":1,"1759":1,"1761":1,"1764":1,"1765":2,"1800":1,"1802":1,"1805":2,"1811":1,"1815":3,"1821":1,"1824":1,"1829":1,"1832":2,"1834":1,"1865":1,"1882":1,"1897":1,"1898":1,"1902":1,"1904":1,"1909":1,"1917":1,"1923":1,"1933":1,"1956":1,"1960":3,"1965":1,"1968":2,"1969":1,"1974":3,"1995":2,"1997":1,"1998":2,"2005":1,"2008":2,"2011":1,"2013":1,"2031":1,"2032":1,"2041":1,"2043":2,"2048":1,"2056":1,"2057":3,"2058":1,"2095":1,"2100":2,"2101":1,"2109":1,"2124":1,"2136":1,"2137":1,"2144":1,"2157":1,"2166":1,"2169":1,"2177":1,"2182":1,"2202":1,"2205":1,"2210":1,"2229":1}}],["check",{"0":{"1697":1},"1":{"687":1,"688":1,"689":1,"690":1,"691":1,"692":1,"693":1,"694":1},"3":{"0":24,"11":1,"24":1,"59":1,"80":1,"93":2,"94":1,"99":3,"109":1,"110":1,"115":1,"121":1,"122":2,"126":3,"133":1,"135":3,"157":2,"164":1,"166":1,"171":2,"175":1,"186":1,"188":1,"189":1,"195":2,"196":1,"200":1,"201":3,"202":2,"209":1,"225":1,"231":1,"233":1,"234":3,"235":7,"237":3,"239":1,"241":1,"245":3,"246":1,"247":1,"257":1,"259":1,"265":2,"268":1,"279":2,"284":2,"285":1,"290":1,"295":1,"296":1,"302":1,"305":1,"313":1,"316":1,"317":2,"318":6,"320":1,"322":2,"326":2,"340":1,"341":3,"342":2,"350":1,"352":2,"360":1,"370":1,"371":1,"373":1,"384":2,"386":1,"388":1,"390":1,"391":2,"402":1,"406":1,"413":1,"423":1,"427":2,"429":1,"448":3,"453":1,"458":1,"459":4,"460":1,"461":1,"464":1,"490":1,"499":1,"505":1,"507":1,"513":2,"529":1,"536":3,"551":1,"556":1,"564":1,"565":2,"566":1,"572":5,"574":2,"583":1,"584":1,"585":2,"591":1,"592":2,"594":3,"611":2,"617":1,"618":2,"619":1,"625":1,"626":1,"633":2,"636":3,"638":1,"642":1,"681":2,"683":2,"684":1,"685":1,"687":1,"688":1,"689":4,"690":5,"691":6,"692":2,"694":2,"701":1,"709":1,"724":1,"725":1,"729":2,"733":2,"743":1,"749":3,"756":1,"757":1,"758":1,"764":1,"765":1,"766":2,"767":2,"768":2,"769":1,"790":1,"799":3,"801":2,"827":6,"829":2,"834":1,"838":2,"839":1,"840":1,"847":1,"869":1,"876":1,"891":1,"905":3,"923":1,"924":1,"946":2,"948":1,"950":1,"962":1,"971":1,"974":1,"997":1,"1018":2,"1033":1,"1034":3,"1036":1,"1037":2,"1042":1,"1050":1,"1067":1,"1074":1,"1077":1,"1092":1,"1093":1,"1100":1,"1110":2,"1111":1,"1117":2,"1118":1,"1155":1,"1163":2,"1170":1,"1175":1,"1190":1,"1192":2,"1211":1,"1212":4,"1213":1,"1229":3,"1231":1,"1237":20,"1241":1,"1244":1,"1247":15,"1255":1,"1259":6,"1263":4,"1264":2,"1265":1,"1267":1,"1270":46,"1271":12,"1275":1,"1280":1,"1281":2,"1286":63,"1288":1,"1289":6,"1290":1,"1293":2,"1295":1,"1296":1,"1297":3,"1300":69,"1301":8,"1304":1,"1307":2,"1308":1,"1309":12,"1310":3,"1311":31,"1312":2,"1316":1,"1317":1,"1322":1,"1323":33,"1324":50,"1325":1,"1326":1,"1327":1,"1328":3,"1329":1,"1332":9,"1333":1,"1337":4,"1339":109,"1343":1,"1344":2,"1347":1,"1348":1,"1349":2,"1350":52,"1352":1,"1353":3,"1355":1,"1357":2,"1358":3,"1359":187,"1364":2,"1366":1,"1369":18,"1372":4,"1373":1,"1375":1,"1380":21,"1384":1,"1387":1,"1389":3,"1391":1,"1395":38,"1396":223,"1399":1,"1400":1,"1402":31,"1405":1,"1406":4,"1410":1,"1411":1,"1412":1,"1414":1,"1415":39,"1416":13,"1417":20,"1421":1,"1422":1,"1427":8,"1430":2,"1431":1,"1433":2,"1436":95,"1437":4,"1438":30,"1441":6,"1442":2,"1443":11,"1444":1,"1446":1,"1447":1,"1449":3,"1453":3,"1454":2,"1455":10,"1457":6,"1460":2,"1467":9,"1475":5,"1476":4,"1479":1,"1484":2,"1485":1,"1487":7,"1488":2,"1489":2,"1490":1,"1491":1,"1492":4,"1496":27,"1500":3,"1514":1,"1524":3,"1525":1,"1526":7,"1530":1,"1531":3,"1533":1,"1534":5,"1536":1,"1547":1,"1576":1,"1577":8,"1582":1,"1583":1,"1586":5,"1590":1,"1591":9,"1595":1,"1596":4,"1598":1,"1599":1,"1600":8,"1614":1,"1625":1,"1627":8,"1629":2,"1630":1,"1631":13,"1632":1,"1638":1,"1639":6,"1644":1,"1651":2,"1652":1,"1660":1,"1662":2,"1663":1,"1666":1,"1668":2,"1670":2,"1677":1,"1679":1,"1687":1,"1719":1,"1731":1,"1747":2,"1749":1,"1755":2,"1765":7,"1767":1,"1772":1,"1776":4,"1777":1,"1782":1,"1800":3,"1801":1,"1802":1,"1805":1,"1808":1,"1809":2,"1810":1,"1811":1,"1818":1,"1821":6,"1823":2,"1825":1,"1826":2,"1832":4,"1833":1,"1871":1,"1872":1,"1875":1,"1877":1,"1881":1,"1882":1,"1885":1,"1886":1,"1888":1,"1889":1,"1893":1,"1899":1,"1902":1,"1909":2,"1912":2,"1915":2,"1917":1,"1922":1,"1923":2,"1929":1,"1930":2,"1933":1,"1934":2,"1940":2,"1941":2,"1945":1,"1954":2,"1959":1,"1968":1,"1969":1,"1972":2,"1977":1,"1978":2,"1982":2,"1984":1,"1985":1,"1993":5,"1994":1,"1995":2,"1996":6,"1997":4,"1998":4,"2001":1,"2008":1,"2009":3,"2011":1,"2025":3,"2035":2,"2040":2,"2042":1,"2043":1,"2044":1,"2049":2,"2050":2,"2056":5,"2057":1,"2058":1,"2060":1,"2066":1,"2068":2,"2081":1,"2101":1,"2102":1,"2108":1,"2110":2,"2118":1,"2121":1,"2124":1,"2125":1,"2128":2,"2130":3,"2133":2,"2136":2,"2137":1,"2138":2,"2140":2,"2141":2,"2144":2,"2160":1,"2161":1,"2162":2,"2166":1,"2169":1,"2171":5,"2174":1,"2175":1,"2176":1,"2179":1,"2181":1,"2182":1,"2186":1,"2195":1,"2199":1,"2202":1,"2205":2,"2230":1,"2234":2}}],["chips",{"3":{"1324":2,"1385":1,"1395":5,"1496":1,"1742":1,"1750":1}}],["chip",{"3":{"0":1,"618":1,"905":1,"1324":2,"1385":1,"1395":19,"1402":1,"1436":3,"1526":1,"1742":1,"1750":2,"1773":1}}],["childitem",{"3":{"1728":1}}],["childid",{"3":{"1237":1,"1395":2}}],["childrules",{"3":{"1359":2}}],["childresult",{"3":{"1350":4}}],["children",{"3":{"0":2,"39":4,"341":1,"397":1,"402":1,"922":1,"926":1,"1168":1,"1212":1,"1231":1,"1237":6,"1247":2,"1270":1,"1281":1,"1286":2,"1310":4,"1324":1,"1333":2,"1339":5,"1342":2,"1343":4,"1346":1,"1350":41,"1352":1,"1359":39,"1369":1,"1380":1,"1382":1,"1385":3,"1387":1,"1395":21,"1398":1,"1401":1,"1402":5,"1436":26,"1443":2,"1489":1,"1556":1,"1575":1,"1630":2,"1632":5,"1635":2,"1638":8,"1639":8,"1640":3,"1647":1,"1651":2,"1664":1,"1666":1,"1677":1,"1685":3,"1720":1,"1748":2,"1749":2,"2011":2,"2062":1,"2065":2,"2159":1}}],["childforeignkeyselector",{"3":{"1310":3,"1359":12,"1402":2}}],["childfk",{"3":{"1310":1,"1359":1,"1865":1}}],["childless",{"3":{"1237":1,"1350":4,"1354":1}}],["childlessfixture",{"3":{"1199":2,"1207":1,"1436":6}}],["childd",{"3":{"1199":3,"1207":1}}],["childcollectiontypenames",{"3":{"1436":1}}],["childcollection",{"3":{"1247":1,"1310":3}}],["childc",{"3":{"1199":2,"1207":1}}],["childb",{"3":{"1199":2,"1207":1}}],["childa",{"3":{"1199":2,"1207":1}}],["childmodel",{"3":{"1199":3,"1207":1}}],["childentityhandlerbase",{"3":{"1207":2,"1265":6,"1270":6,"1359":43}}],["childentityhandlerbasetests",{"3":{"1199":1,"1207":1,"1270":2}}],["childentitydeletepathtests",{"3":{"1199":1,"1207":1}}],["childentitydeletepath",{"2":{"1386":1},"3":{"1199":6,"1203":1,"1207":1,"1324":1,"1386":1,"1395":12}}],["childentityservices",{"3":{"881":1,"1207":5,"1324":2,"1386":5,"1395":39}}],["childentityservicebasetests",{"3":{"1199":1,"1207":5,"1324":1}}],["childentityservicebase",{"2":{"879":1,"883":2,"1386":1},"3":{"0":2,"879":2,"881":5,"883":3,"1199":6,"1203":1,"1207":2,"1300":2,"1324":12,"1386":1,"1395":14,"1496":1}}],["childentity",{"3":{"341":1,"1199":4,"1207":1,"1286":1}}],["childnavigationdescriptortests",{"3":{"1199":1,"1207":4}}],["childnavigationdescriptor",{"2":{"11":1,"1865":1},"3":{"11":1,"1199":7,"1203":1,"1207":2,"1310":17,"1359":22,"1402":3,"1865":2}}],["child",{"0":{"1386":1},"3":{"0":3,"10":1,"11":1,"39":3,"43":2,"164":1,"339":1,"341":5,"344":1,"397":1,"599":1,"633":2,"782":1,"921":2,"926":3,"1115":1,"1116":1,"1117":1,"1140":1,"1167":1,"1168":8,"1170":2,"1191":1,"1212":2,"1231":10,"1232":2,"1237":32,"1243":4,"1244":1,"1247":9,"1259":2,"1260":1,"1265":9,"1270":21,"1271":2,"1278":1,"1286":18,"1310":23,"1311":6,"1323":1,"1324":5,"1339":8,"1340":1,"1342":2,"1343":5,"1345":3,"1346":1,"1347":1,"1350":127,"1353":2,"1354":4,"1359":268,"1369":6,"1371":2,"1374":2,"1380":24,"1386":1,"1393":1,"1395":49,"1396":8,"1401":1,"1402":26,"1416":1,"1436":41,"1438":1,"1465":2,"1467":1,"1496":1,"1526":1,"1577":3,"1586":1,"1591":1,"1630":10,"1631":10,"1632":10,"1633":1,"1634":1,"1635":5,"1637":2,"1638":10,"1639":5,"1640":3,"1650":1,"1651":1,"1661":1,"1662":1,"1666":2,"1668":1,"1683":1,"1684":2,"1686":7,"1700":1,"1701":2,"1704":1,"1719":1,"1727":14,"1728":4,"1729":5,"1730":3,"1731":2,"1764":1,"1810":5,"1863":1,"1865":1,"1871":3,"1876":4,"1877":1,"1988":2,"2011":1,"2156":1,"2159":2}}],["chunking",{"3":{"1320":1,"1323":2}}],["chunks",{"3":{"1307":1,"1309":1,"1323":1}}],["chunk",{"3":{"435":1,"1286":1,"1323":5,"1383":2,"1395":1,"1479":1}}],["chunked",{"3":{"0":1,"434":1,"1323":1,"1935":1}}],["churns",{"3":{"1436":1,"1438":1,"1748":1,"1989":1}}],["churning",{"3":{"1402":1,"1436":1}}],["churn",{"3":{"0":1,"87":1,"785":1,"798":1,"800":1,"891":1,"1237":1,"1259":1,"1286":1,"1324":1,"1338":1,"1339":3,"1402":1,"1436":7,"1492":1,"1496":1,"1677":1}}],["chaos",{"3":{"1566":1,"1577":1}}],["chasing",{"3":{"1440":1,"1446":1}}],["chased",{"3":{"1551":1}}],["chases",{"3":{"1436":1,"2155":1}}],["chase",{"3":{"1277":1,"1286":1,"1350":1,"1415":1,"1672":1,"1839":1}}],["chapter",{"0":{"1450":1,"1461":1,"1493":1},"3":{"1191":1,"1192":5,"1193":1,"1194":1,"1200":2,"1201":2,"1202":1,"1203":1,"1210":1,"1212":3,"1214":1,"1217":4,"1223":2,"1225":1,"1227":1,"1229":20,"1238":1,"1240":1,"1248":2,"1251":1,"1271":2,"1272":1,"1286":2,"1287":1,"1300":2,"1301":1,"1302":1,"1309":3,"1310":4,"1311":1,"1312":3,"1313":4,"1316":4,"1320":1,"1321":1,"1322":1,"1323":3,"1324":10,"1325":1,"1339":6,"1340":3,"1345":1,"1346":1,"1347":1,"1350":7,"1351":2,"1359":8,"1360":1,"1361":2,"1367":1,"1369":11,"1370":2,"1380":1,"1381":1,"1395":4,"1396":14,"1397":3,"1401":1,"1402":3,"1403":3,"1415":7,"1416":6,"1417":7,"1418":2,"1428":1,"1436":9,"1438":1,"1439":1,"1451":3,"1452":1,"1455":4,"1460":1,"1462":3,"1463":1,"1465":1,"1470":1,"1471":2,"1473":1,"1474":2,"1475":1,"1476":1,"1482":2,"1485":4,"1494":3,"1496":80,"1497":1,"1498":2,"1499":1,"1500":1,"1503":1,"1505":1,"1517":7,"1674":1,"1812":2,"1815":1,"1817":2,"1834":1,"1862":1,"1912":1,"1924":1,"1959":1,"2015":1,"2031":2,"2039":1,"2082":1,"2125":1,"2148":1,"2232":2}}],["chapters",{"0":{"1192":1},"3":{"329":1,"751":1,"1011":1,"1012":1,"1014":1,"1191":1,"1192":2,"1194":1,"1200":1,"1201":1,"1210":2,"1212":1,"1216":1,"1271":1,"1320":1,"1339":1,"1452":1,"1471":1,"1485":2,"1496":26,"1498":1,"1499":2,"1502":2,"1514":1,"1517":2,"1674":2}}],["chatrole",{"3":{"1427":2}}],["chatresponseupdate",{"3":{"1427":2}}],["chatresponseformat",{"2":{"1018":1,"1366":1},"3":{"1018":1,"1366":1}}],["chatresponse",{"2":{"1016":1,"1019":1,"1092":1},"3":{"1016":1,"1018":2,"1019":1,"1091":1,"1092":1,"1369":2,"1427":7,"1435":1,"1492":1}}],["chatclientbuilder",{"2":{"1421":1,"1427":1},"3":{"1421":1,"1427":3}}],["chatclient",{"3":{"1369":2}}],["chatclientmetadata",{"2":{"1091":1,"1425":1,"2179":1},"3":{"1091":1,"1425":1,"1427":3,"2179":1}}],["chatoptions",{"2":{"1419":1,"1424":1,"2176":1},"3":{"1369":4,"1419":1,"1424":1,"1427":17,"2176":1}}],["chatmessage",{"3":{"1369":2,"1427":4}}],["chatfinishreason",{"2":{"1366":1},"3":{"1366":1,"1369":2}}],["chatty",{"3":{"1402":1,"1544":1,"1568":1}}],["chattoolpolicy",{"2":{"1095":1},"3":{"1091":1,"1092":1,"1095":2,"1199":4,"1203":1,"1207":2,"1422":2,"1427":14,"1496":2}}],["chatter",{"3":{"18":1,"1259":2,"1339":2,"1402":1,"1443":1,"1456":1,"1467":2,"1490":1,"1677":1,"2011":1,"2161":1}}],["chatguardrailexception",{"2":{"1021":1,"1089":1,"1366":1,"2177":1},"3":{"1018":1,"1021":1,"1089":1,"1091":1,"1199":5,"1203":1,"1207":2,"1366":1,"1369":2,"1423":4,"1427":8,"1496":1,"2177":3}}],["chat",{"1":{"2172":1,"2173":1,"2174":1,"2175":1,"2176":1,"2177":1,"2178":1,"2179":1,"2180":1,"2181":1,"2182":1},"3":{"404":1,"406":1,"408":1,"1018":1,"1089":1,"1091":6,"1112":1,"1118":1,"1192":2,"1202":1,"1203":9,"1207":16,"1324":1,"1359":3,"1360":1,"1366":3,"1369":5,"1396":1,"1422":2,"1423":5,"1425":2,"1427":31,"1437":3,"1442":1,"1496":1,"1526":3,"1577":1,"1585":1,"1779":1,"2171":2,"2172":2,"2176":1,"2178":1,"2195":1,"2211":1}}],["challengeprovider",{"3":{"1311":1}}],["challenges",{"3":{"1311":1,"1487":1,"1898":1}}],["challengesecondfactorcountingfailuresasync",{"2":{"2198":1},"3":{"1300":2,"2198":1}}],["challengesecondfactorasync",{"2":{"1059":1,"2198":1},"3":{"1059":1,"1300":2,"2198":1}}],["challengeasync",{"2":{"2198":1},"3":{"1300":4,"1323":1,"2198":1}}],["challenged",{"3":{"1300":1}}],["challenge",{"3":{"0":1,"189":1,"350":1,"352":1,"353":1,"420":1,"1059":2,"1188":1,"1212":1,"1289":1,"1293":2,"1298":1,"1300":18,"1311":4,"1323":9,"1324":5,"1396":1,"1406":1,"1415":1,"1417":1,"1436":3,"1438":1,"1489":1,"1490":1,"1975":2,"1976":2,"1978":1,"2196":2,"2198":3,"2199":2,"2204":1}}],["chartable",{"3":{"2158":1}}],["charting",{"3":{"1270":1}}],["chart",{"3":{"1247":1,"1402":1,"1961":1,"1965":1,"2161":1}}],["charters",{"3":{"1505":1,"1517":1}}],["charter",{"3":{"1202":1,"1324":1,"1339":1,"1496":1}}],["charset",{"3":{"1347":2,"1359":4,"1365":1,"1369":1,"1384":2}}],["charset=utf",{"3":{"1311":2}}],["chars",{"3":{"690":1,"1303":1,"1350":1,"1359":3,"1630":1,"1640":1,"1764":9}}],["charges",{"3":{"1027":1,"1821":1}}],["charge",{"3":{"201":1,"1026":2,"1027":1,"1029":1,"1243":1,"1247":1,"1263":1,"1417":1,"1436":1,"1460":1,"1764":1,"1907":1,"2082":1}}],["charged",{"3":{"0":1,"122":1,"1024":1,"1028":2,"1270":1,"1749":2,"1750":1,"1764":1,"1767":1,"1776":1,"1906":1}}],["characters",{"3":{"231":1,"397":1,"409":1,"674":1,"676":1,"698":1,"827":2,"1018":1,"1026":2,"1091":1,"1234":1,"1237":3,"1247":1,"1259":1,"1271":6,"1276":1,"1286":4,"1288":1,"1290":1,"1300":7,"1309":2,"1311":2,"1320":1,"1324":7,"1337":1,"1339":1,"1344":1,"1347":1,"1350":2,"1359":33,"1369":2,"1395":1,"1396":2,"1402":6,"1415":1,"1417":1,"1422":1,"1427":2,"1436":5,"1496":1,"1630":3,"1631":3,"1632":2,"1641":1,"1685":2,"1686":2,"1764":1,"1765":1,"1767":11,"1933":1,"1934":1,"1982":1,"2011":1,"2013":1,"2176":2,"2181":1}}],["character",{"3":{"26":1,"373":1,"427":1,"657":1,"698":1,"710":1,"741":1,"832":1,"905":1,"931":2,"972":1,"1018":1,"1228":1,"1229":1,"1232":1,"1237":2,"1241":2,"1259":1,"1270":1,"1271":2,"1282":1,"1286":1,"1289":2,"1300":7,"1309":4,"1311":2,"1312":3,"1323":1,"1324":12,"1339":4,"1344":2,"1347":1,"1350":5,"1359":13,"1362":3,"1395":7,"1396":4,"1415":2,"1416":1,"1417":7,"1426":1,"1427":1,"1433":2,"1436":9,"1438":2,"1496":1,"1641":1,"1829":3,"1842":2,"1851":1,"1933":1,"2129":1,"2152":1}}],["char",{"3":{"0":1,"905":1,"1212":1,"1247":1,"1286":1,"1300":1,"1324":4,"1350":4,"1488":1}}],["chain+cost",{"3":{"1526":1}}],["chainable",{"3":{"1271":1,"1324":1}}],["chaining",{"3":{"0":1,"749":1,"846":1,"1247":1,"1259":1,"1286":4,"1300":2,"1309":5,"1311":4,"1312":2,"1323":1,"1324":2,"1350":2,"1359":2,"1369":1,"1380":2,"1395":2,"1396":5,"1415":4,"1417":4,"1427":2,"1436":4,"1891":1}}],["chained",{"3":{"0":3,"258":1,"261":1,"827":2,"828":1,"831":1,"832":1,"905":1,"1124":1,"1128":1,"1212":1,"1300":2,"1324":3,"1337":1,"1339":3,"1359":2,"1369":1,"1436":2,"1438":1,"1467":2,"1488":1,"1489":1,"1670":1,"1684":1,"2001":1,"2003":1,"2025":1}}],["chains",{"1":{"1863":1,"1864":1,"1865":1,"1866":1,"1867":1,"1868":1},"3":{"0":2,"117":1,"121":2,"125":1,"195":1,"448":1,"672":4,"674":2,"752":1,"826":1,"827":1,"846":1,"872":1,"1212":1,"1224":1,"1247":2,"1260":1,"1270":5,"1271":1,"1286":4,"1300":5,"1311":4,"1323":1,"1324":3,"1339":3,"1359":16,"1377":1,"1380":1,"1396":2,"1402":2,"1416":1,"1419":1,"1436":3,"1441":1,"1443":1,"1444":1,"1445":1,"1543":1,"1545":1,"1786":1,"1821":1,"1829":2,"1833":2,"1862":1,"1863":1,"1864":1,"1868":1,"1889":1,"1891":1,"1892":1,"2009":1,"2023":1,"2209":1}}],["chain",{"0":{"1231":1,"1232":1,"1569":1,"1673":1,"1738":1},"1":{"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1},"3":{"0":10,"99":1,"107":1,"109":2,"110":2,"111":1,"115":4,"121":3,"122":2,"126":2,"127":1,"128":1,"259":1,"350":1,"367":1,"369":3,"370":1,"371":1,"373":2,"376":2,"388":1,"389":1,"395":1,"402":1,"404":2,"407":1,"408":1,"409":1,"499":1,"500":2,"501":2,"529":1,"532":1,"549":1,"574":1,"590":1,"591":1,"592":1,"595":1,"625":1,"626":1,"642":1,"665":1,"672":4,"674":6,"675":4,"676":7,"677":2,"692":2,"698":2,"701":1,"707":1,"711":1,"715":1,"721":1,"748":1,"749":2,"751":1,"756":1,"765":1,"819":1,"821":1,"823":1,"826":1,"852":1,"854":2,"870":1,"874":1,"905":1,"906":1,"908":1,"915":1,"923":1,"925":1,"964":1,"988":1,"1046":1,"1058":2,"1075":1,"1212":3,"1214":1,"1216":1,"1220":2,"1229":7,"1230":2,"1231":1,"1232":1,"1235":1,"1237":3,"1240":1,"1241":1,"1247":17,"1259":1,"1260":1,"1262":2,"1269":2,"1270":17,"1271":14,"1278":2,"1283":1,"1284":1,"1286":23,"1290":2,"1300":9,"1301":1,"1309":1,"1310":1,"1311":25,"1322":1,"1323":10,"1324":9,"1326":1,"1327":1,"1329":1,"1333":2,"1339":15,"1350":9,"1353":1,"1359":28,"1369":4,"1380":1,"1395":3,"1396":3,"1402":5,"1403":1,"1406":1,"1407":1,"1408":1,"1415":8,"1416":5,"1417":7,"1421":1,"1427":3,"1431":2,"1436":57,"1438":5,"1441":1,"1443":2,"1445":2,"1448":1,"1450":1,"1453":2,"1454":3,"1455":4,"1456":1,"1459":7,"1460":1,"1461":3,"1463":1,"1465":1,"1468":2,"1475":1,"1483":1,"1486":3,"1487":1,"1489":2,"1491":1,"1492":2,"1493":1,"1496":1,"1499":1,"1503":1,"1507":1,"1524":1,"1526":12,"1530":1,"1531":1,"1533":1,"1534":1,"1535":1,"1576":1,"1577":2,"1586":1,"1591":9,"1599":1,"1600":1,"1651":1,"1667":1,"1673":1,"1753":1,"1796":1,"1799":1,"1805":1,"1806":1,"1810":1,"1815":1,"1821":2,"1825":4,"1826":2,"1827":1,"1828":3,"1833":1,"1834":1,"1840":1,"1856":1,"1864":2,"1868":1,"1922":1,"1927":1,"1930":1,"1977":1,"1983":1,"1984":1,"2009":1,"2011":1,"2013":3,"2014":2,"2025":1,"2076":1,"2092":1,"2141":1,"2158":1,"2159":2,"2186":1,"2192":2,"2195":1,"2205":2,"2229":1,"2234":3}}],["chances",{"3":{"882":1,"938":1,"1359":1}}],["chance",{"3":{"234":1,"235":1,"411":1,"413":1,"673":1,"750":1,"1090":1,"1265":1,"1270":1,"1286":2,"1312":1,"1339":1,"1359":1,"1380":1,"1396":1,"1413":1,"1415":2,"1416":2,"1417":6,"1669":1,"2172":1}}],["channelreader",{"3":{"1396":2}}],["channelreferencecountertests",{"3":{"1199":1,"1207":1,"1324":1}}],["channelreferencecounter",{"3":{"1199":3,"1203":1,"1207":2,"1324":9,"1496":1}}],["channeljoinrefused",{"3":{"1309":1}}],["channelsync",{"3":{"1324":2}}],["channelsubscriptions",{"3":{"1324":2}}],["channelsubscription",{"3":{"1198":1,"1199":2,"1203":1,"1207":1,"1324":7,"1496":2}}],["channels",{"0":{"1512":1},"1":{"1942":1,"1943":1,"1944":1,"1945":1,"1946":1,"1947":1,"1948":1,"1949":1,"1950":1,"2183":1,"2184":1,"2185":1,"2186":1,"2187":1,"2188":1,"2189":1,"2190":1,"2191":1,"2192":1,"2193":1,"2194":1,"2195":1},"2":{"1400":1},"3":{"109":1,"110":1,"111":1,"225":3,"384":1,"433":1,"434":1,"1286":2,"1300":1,"1302":1,"1304":1,"1309":7,"1311":1,"1320":1,"1323":1,"1324":3,"1396":4,"1400":1,"1417":3,"1436":1,"1496":1,"1556":1,"1669":1,"1677":1,"1779":2,"1806":1,"1942":2,"1947":2,"1950":1,"2167":1,"2182":2,"2183":1,"2205":1,"2208":1,"2210":1}}],["channelkeyregexcache",{"3":{"1309":1}}],["channelkeymatchtimeout",{"3":{"1309":2}}],["channelkey",{"3":{"0":1,"380":1,"1286":4,"1309":17,"1324":8,"1396":10,"1402":3,"1944":1}}],["channelkeypattern",{"2":{"0":1,"380":1,"1305":1,"1309":1,"1402":1,"1945":1},"3":{"0":1,"380":1,"1305":1,"1307":1,"1309":2,"1323":2,"1402":1,"1945":1}}],["channel",{"0":{"1305":1,"1935":1,"1936":1,"1938":1,"1945":1},"1":{"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"377":1,"378":1,"379":1,"380":1,"381":1,"382":1,"383":1,"384":1,"431":1,"432":1,"433":1,"434":1,"435":1,"436":1,"1097":1,"1098":1,"1099":1,"1100":1,"1101":1,"1102":1,"1103":1,"1104":1},"2":{"1100":1,"1947":1,"2185":1},"3":{"0":18,"25":2,"27":1,"92":1,"95":1,"105":1,"110":1,"222":1,"223":2,"225":5,"226":1,"228":4,"229":1,"230":3,"255":1,"265":2,"273":1,"343":2,"377":1,"378":2,"380":3,"381":2,"382":2,"383":1,"384":6,"431":1,"434":1,"517":2,"518":2,"519":1,"521":1,"522":1,"608":1,"610":1,"640":1,"856":1,"857":1,"882":1,"896":1,"897":3,"914":2,"915":1,"916":1,"926":1,"930":1,"1066":1,"1097":1,"1099":2,"1100":5,"1101":2,"1102":1,"1104":1,"1112":1,"1150":1,"1157":1,"1192":6,"1202":2,"1203":2,"1212":5,"1226":1,"1229":1,"1259":1,"1260":1,"1265":1,"1270":6,"1285":1,"1286":9,"1292":1,"1300":3,"1302":3,"1307":5,"1308":2,"1309":40,"1312":1,"1320":6,"1323":21,"1324":40,"1328":1,"1339":1,"1359":8,"1380":7,"1395":1,"1396":52,"1397":2,"1399":8,"1400":4,"1401":3,"1402":84,"1415":6,"1417":11,"1429":1,"1436":7,"1437":1,"1438":4,"1441":1,"1445":1,"1448":1,"1460":1,"1466":1,"1467":2,"1488":1,"1490":1,"1496":6,"1512":1,"1599":2,"1644":1,"1677":1,"1733":1,"1902":1,"1922":1,"1935":3,"1936":2,"1937":1,"1938":2,"1940":1,"1941":4,"1943":1,"1944":5,"1945":6,"1947":5,"1948":1,"1949":2,"1950":4,"2026":1,"2081":1,"2085":2,"2160":1,"2185":5,"2192":3,"2194":1,"2195":2,"2234":6}}],["changequantity",{"3":{"1686":1}}],["changeorderitemquantityrequest",{"3":{"1686":1}}],["changeorderstatusrequest",{"2":{"1686":1,"1702":1},"3":{"1686":2,"1702":1}}],["changeoption",{"3":{"1402":4}}],["changeitemquantityasync",{"3":{"1686":1}}],["changeitemquantityhandler",{"3":{"1686":1}}],["changeitemquantitycommand",{"2":{"1686":1},"3":{"1686":2}}],["changeitemquantity",{"2":{"1684":1},"3":{"1684":1,"1686":4}}],["changename",{"2":{"1747":1},"3":{"1436":1,"1747":1,"1769":1}}],["changerole",{"3":{"1409":1,"1415":2}}],["changeroleasync",{"3":{"1324":1,"1415":1}}],["changeable",{"3":{"1359":1}}],["changeaddress",{"2":{"1747":1},"3":{"1271":2,"1436":1,"1747":1,"1769":1}}],["changetracking",{"3":{"1286":3}}],["changetracker",{"2":{"1231":1,"1233":1,"1278":1,"1840":1},"3":{"715":1,"988":1,"1231":1,"1233":1,"1237":2,"1273":1,"1278":1,"1286":10,"1840":1}}],["changevariantskuhandler",{"3":{"1286":1}}],["changevariantskucommand",{"3":{"1270":1}}],["changevariantprice",{"3":{"1286":1}}],["changevariantpricehandler",{"3":{"1286":2}}],["changevariantpricecommand",{"3":{"1270":1}}],["changeemail",{"2":{"1747":1},"3":{"1237":1,"1436":1,"1747":1,"1769":1}}],["changepreferencesasync",{"3":{"1311":1}}],["changepreferences",{"3":{"1203":4,"1207":10,"1291":2,"1300":4,"1322":1,"1323":9,"1415":9,"1436":1,"1496":2}}],["changepreferenceshandlertests",{"3":{"1199":1,"1207":2}}],["changepreferenceshandler",{"3":{"1199":4,"1203":1,"1207":2,"1323":3,"1406":2,"1415":9}}],["changepreferenceshandlerbasetests",{"3":{"1199":1,"1207":4,"1323":1}}],["changepreferenceshandlerbase",{"2":{"1291":1,"1322":1},"3":{"1199":3,"1203":1,"1207":2,"1291":3,"1300":6,"1322":2,"1323":8,"1415":6}}],["changepreferencesrequest",{"2":{"1291":1},"3":{"1199":12,"1203":1,"1207":2,"1291":2,"1300":6,"1311":1,"1323":3,"1415":4,"1496":1}}],["changepreferencescommandvalidator",{"3":{"1199":1,"1203":1,"1207":2,"1270":1,"1415":5}}],["changepreferencescommand",{"3":{"572":1,"1199":8,"1203":1,"1207":2,"1300":2,"1323":6,"1406":3,"1415":11,"1436":3,"1489":1}}],["changeprice",{"2":{"1028":1},"3":{"1028":1}}],["changepasswordfailed",{"3":{"1526":1}}],["changepasswordbutton",{"3":{"1436":1}}],["changepasswordasync",{"3":{"1311":1,"1324":3,"1436":1}}],["changepasswordcommand",{"3":{"1199":5,"1203":1,"1207":2,"1270":2,"1300":2,"1311":2,"1323":6,"1406":2,"1415":12}}],["changepasswordrequestvalidatortests",{"3":{"1199":1,"1207":2}}],["changepasswordrequestvalidator",{"2":{"1404":1},"3":{"1199":2,"1203":1,"1207":2,"1271":2,"1300":2,"1404":1,"1415":9,"1591":1}}],["changepasswordrequest",{"2":{"1289":1},"3":{"1199":15,"1203":1,"1207":2,"1289":1,"1300":4,"1311":1,"1323":1,"1324":2,"1415":5,"1591":1}}],["changepassword",{"2":{"314":1,"1291":1,"1500":1},"3":{"285":1,"310":3,"314":2,"353":1,"908":1,"926":1,"946":1,"1059":1,"1062":1,"1203":3,"1207":8,"1291":2,"1294":1,"1300":8,"1311":1,"1322":1,"1323":14,"1405":1,"1415":18,"1436":2,"1496":1,"1500":1,"1591":1,"1769":1,"2001":1}}],["changepasswordhandlertests",{"3":{"1199":1,"1207":2,"1436":1}}],["changepasswordhandler",{"2":{"310":1,"314":1},"3":{"281":1,"310":3,"314":4,"926":1,"1199":3,"1203":1,"1207":2,"1300":2,"1323":4,"1406":3,"1415":16}}],["changepasswordhandlerbasetests",{"3":{"1199":1,"1207":4,"1323":1,"1438":2}}],["changepasswordhandlerbase",{"2":{"281":1,"285":1,"310":1,"314":1,"353":1,"908":1,"946":1,"949":1,"1062":1,"1291":1,"1403":1},"3":{"281":2,"285":2,"310":4,"314":3,"353":2,"908":3,"909":1,"946":2,"949":1,"1059":2,"1062":2,"1199":3,"1203":1,"1207":2,"1291":2,"1300":8,"1322":5,"1323":13,"1403":1,"1415":14,"1496":1,"1577":1,"2001":2}}],["changelog",{"2":{"1674":1},"3":{"27":1,"135":2,"137":2,"138":2,"139":2,"140":2,"142":2,"286":1,"326":1,"365":2,"366":2,"449":1,"497":2,"502":1,"657":1,"660":1,"698":1,"825":1,"832":1,"857":1,"990":1,"991":2,"1003":2,"1004":3,"1007":2,"1091":1,"1095":3,"1119":1,"1124":2,"1127":1,"1128":2,"1132":2,"1136":2,"1160":2,"1173":1,"1324":1,"1577":7,"1585":2,"1586":2,"1673":3,"1674":1,"1675":1,"1734":1,"1735":1,"1737":1,"2067":1,"2133":1,"2234":1}}],["changedby",{"3":{"715":1,"1286":4,"1300":2,"1323":1}}],["changedon",{"2":{"715":1,"720":1,"1273":1},"3":{"715":3,"720":1,"1270":1,"1273":1,"1286":10,"1323":1}}],["changed",{"0":{"1277":1},"2":{"781":1,"923":1},"3":{"0":4,"1":1,"24":1,"25":1,"26":2,"27":1,"34":1,"43":1,"51":1,"82":1,"103":1,"104":1,"112":1,"115":1,"120":1,"123":1,"125":1,"126":1,"127":1,"130":1,"135":1,"136":1,"138":1,"139":4,"140":1,"141":1,"142":2,"149":1,"152":1,"164":1,"171":1,"178":1,"181":1,"189":1,"190":1,"200":1,"202":1,"203":1,"220":1,"238":1,"249":1,"250":1,"251":1,"252":1,"254":1,"256":1,"257":1,"258":2,"259":3,"260":1,"261":1,"265":1,"268":1,"276":1,"284":1,"296":1,"303":1,"314":1,"322":1,"323":1,"324":1,"336":1,"337":1,"339":1,"345":1,"354":1,"363":1,"366":1,"375":1,"393":1,"407":1,"416":1,"423":1,"424":1,"425":2,"426":1,"428":1,"429":1,"430":1,"451":1,"453":1,"454":2,"463":1,"465":1,"474":2,"475":1,"476":1,"477":1,"478":1,"495":1,"502":1,"514":1,"522":2,"523":1,"524":1,"531":1,"538":1,"545":1,"549":1,"550":1,"551":2,"552":1,"559":1,"564":1,"567":1,"573":1,"577":1,"578":1,"594":1,"602":1,"604":1,"607":7,"613":1,"616":4,"617":1,"621":1,"626":1,"629":1,"636":1,"652":1,"660":1,"669":1,"677":1,"685":1,"688":1,"691":1,"693":2,"710":1,"714":1,"715":2,"716":1,"717":3,"720":1,"728":1,"744":1,"752":1,"777":1,"781":1,"782":1,"783":1,"797":1,"800":1,"803":1,"804":1,"805":1,"806":1,"813":1,"814":1,"822":1,"832":1,"833":2,"836":1,"838":1,"840":2,"841":1,"849":1,"850":1,"857":1,"864":1,"877":1,"881":1,"891":2,"892":1,"900":1,"908":1,"909":1,"917":1,"921":1,"923":1,"927":1,"933":1,"934":1,"949":1,"960":1,"967":1,"980":1,"983":1,"1007":1,"1016":1,"1019":1,"1028":1,"1042":1,"1052":1,"1054":1,"1058":1,"1070":1,"1078":1,"1086":1,"1093":1,"1095":1,"1103":1,"1111":1,"1118":1,"1119":1,"1128":1,"1136":1,"1142":1,"1146":1,"1156":1,"1180":1,"1232":1,"1237":5,"1242":1,"1247":1,"1257":1,"1259":1,"1265":1,"1270":4,"1271":1,"1277":1,"1279":1,"1281":1,"1286":8,"1300":1,"1301":2,"1309":2,"1311":2,"1323":14,"1324":10,"1339":5,"1343":1,"1350":9,"1359":2,"1369":1,"1380":3,"1395":11,"1396":9,"1399":1,"1401":3,"1402":18,"1405":1,"1407":1,"1409":1,"1415":5,"1436":13,"1438":2,"1445":1,"1447":1,"1453":3,"1455":3,"1467":3,"1474":1,"1476":1,"1485":1,"1492":2,"1496":35,"1500":1,"1526":1,"1531":1,"1547":1,"1554":1,"1631":4,"1632":1,"1634":2,"1635":1,"1639":6,"1641":3,"1656":1,"1672":1,"1686":1,"1704":1,"1727":1,"1734":1,"1735":1,"1748":2,"1767":1,"1769":2,"1776":1,"1839":3,"1850":1,"1871":1,"1876":1,"1877":1,"1887":1,"1890":1,"1911":1,"1912":1,"1918":1,"2028":1,"2056":1,"2109":1,"2134":1,"2152":1,"2169":1,"2194":1,"2199":1,"2202":1,"2234":1}}],["changeshoppingcartitemquantity",{"2":{"1769":1},"3":{"1769":1}}],["changestatusasync",{"3":{"1702":2}}],["changestatus",{"2":{"1701":1},"3":{"1686":3,"1701":1,"1702":1,"1727":1}}],["changes+supply",{"3":{"1526":1}}],["changes",{"0":{"1735":1,"1769":1},"2":{"562":1,"564":1,"593":1,"604":1,"624":1,"626":1,"756":1,"1455":1,"1492":1,"1596":1},"3":{"0":4,"16":1,"17":1,"18":1,"20":1,"24":3,"71":1,"73":1,"74":1,"78":2,"79":1,"95":1,"136":1,"145":2,"147":3,"150":1,"160":1,"193":1,"201":1,"217":1,"219":1,"245":1,"246":2,"291":1,"305":1,"311":1,"312":1,"351":1,"353":1,"360":1,"390":2,"392":1,"413":1,"422":1,"434":1,"441":1,"499":1,"536":1,"539":1,"549":1,"562":1,"563":1,"564":4,"568":1,"572":1,"576":1,"593":1,"599":1,"600":1,"602":1,"604":2,"624":1,"626":3,"629":1,"698":1,"699":1,"717":1,"723":1,"726":1,"733":1,"740":1,"741":1,"750":1,"756":1,"767":1,"791":1,"793":1,"797":1,"799":1,"819":1,"825":6,"827":2,"830":1,"833":1,"838":1,"840":1,"844":1,"854":1,"903":1,"905":1,"907":1,"920":1,"921":1,"930":1,"954":2,"982":1,"1006":1,"1012":2,"1016":1,"1018":2,"1020":1,"1021":1,"1030":1,"1034":2,"1048":1,"1077":1,"1095":1,"1116":1,"1145":1,"1184":1,"1212":4,"1213":1,"1231":2,"1233":1,"1237":7,"1247":2,"1249":1,"1250":1,"1257":1,"1259":9,"1270":2,"1273":2,"1274":1,"1277":1,"1278":1,"1281":1,"1286":23,"1300":7,"1301":2,"1309":9,"1310":1,"1311":11,"1312":1,"1318":1,"1322":1,"1323":7,"1324":23,"1339":4,"1345":1,"1350":8,"1359":15,"1369":1,"1373":1,"1379":1,"1380":4,"1385":1,"1389":1,"1395":15,"1396":17,"1397":1,"1398":1,"1402":6,"1405":1,"1413":1,"1414":1,"1415":14,"1416":3,"1417":6,"1427":5,"1432":1,"1436":24,"1438":5,"1440":1,"1442":2,"1443":2,"1445":1,"1446":1,"1447":2,"1453":2,"1455":11,"1458":2,"1461":1,"1467":7,"1476":1,"1477":1,"1478":1,"1483":1,"1486":1,"1488":2,"1492":1,"1496":6,"1526":2,"1534":1,"1541":1,"1546":2,"1547":1,"1548":1,"1553":1,"1556":1,"1561":1,"1569":1,"1572":1,"1586":1,"1591":2,"1596":2,"1605":1,"1607":1,"1608":1,"1614":1,"1631":6,"1632":2,"1634":2,"1635":1,"1638":1,"1639":2,"1640":1,"1651":1,"1663":1,"1669":1,"1673":1,"1675":1,"1685":6,"1686":7,"1701":1,"1704":1,"1727":2,"1733":2,"1734":1,"1735":1,"1739":1,"1741":1,"1747":3,"1748":1,"1749":3,"1765":5,"1769":2,"1776":1,"1842":1,"1851":2,"1853":1,"1863":2,"1866":1,"1874":1,"1884":1,"1889":3,"1892":1,"1913":1,"1916":1,"1920":1,"1961":2,"1965":1,"1974":1,"1980":2,"2014":2,"2018":1,"2046":1,"2057":1,"2058":1,"2064":1,"2075":1,"2080":1,"2087":1,"2089":1,"2092":1,"2093":1,"2114":1,"2120":1,"2128":1,"2129":1,"2146":1,"2152":1,"2162":1,"2169":1,"2177":1,"2189":2,"2200":1,"2222":2,"2232":2,"2234":2}}],["change",{"0":{"1696":1,"1839":1,"2114":1},"1":{"712":1,"713":1,"714":1,"715":1,"716":1,"717":1,"718":1,"719":1,"720":1,"721":1,"1732":1,"1733":1,"1734":1,"1735":1,"1736":1,"1737":1,"1738":1},"2":{"1467":1},"3":{"0":28,"21":2,"26":1,"27":4,"30":1,"32":1,"41":1,"46":1,"54":1,"58":1,"59":2,"60":4,"63":1,"70":1,"71":1,"78":1,"79":1,"81":2,"94":1,"99":1,"111":1,"118":1,"119":1,"121":1,"131":1,"133":1,"134":1,"135":6,"136":3,"141":1,"142":1,"143":1,"147":3,"149":2,"150":1,"151":3,"158":1,"160":1,"164":1,"166":1,"167":1,"170":1,"186":2,"187":2,"200":1,"224":1,"241":1,"243":2,"253":1,"254":1,"255":2,"265":3,"273":1,"279":1,"285":1,"301":2,"303":2,"310":1,"311":1,"312":1,"314":1,"330":1,"332":2,"333":1,"340":1,"348":1,"353":2,"359":1,"364":1,"365":5,"370":1,"390":2,"391":3,"393":1,"397":2,"414":2,"422":1,"425":1,"429":1,"433":1,"447":1,"449":1,"451":1,"454":1,"465":1,"472":1,"474":1,"486":1,"490":1,"497":3,"499":1,"509":1,"526":1,"528":2,"547":1,"549":1,"550":1,"551":1,"563":1,"564":2,"566":1,"568":1,"583":1,"584":2,"591":2,"592":1,"609":1,"610":3,"618":1,"619":1,"620":2,"624":1,"625":1,"628":1,"629":1,"640":2,"641":1,"644":1,"650":1,"651":1,"657":1,"659":1,"665":1,"668":1,"691":1,"692":1,"703":1,"706":1,"712":1,"714":2,"715":4,"716":2,"719":1,"726":1,"727":1,"731":1,"733":1,"740":1,"742":1,"747":1,"749":1,"750":1,"751":2,"760":1,"765":1,"766":1,"767":1,"776":2,"784":1,"793":1,"799":3,"800":2,"803":2,"804":1,"818":1,"819":1,"825":1,"829":3,"832":1,"833":1,"836":1,"840":1,"845":1,"853":1,"854":2,"856":1,"857":1,"860":2,"861":1,"862":1,"863":1,"869":1,"870":1,"881":1,"883":3,"891":1,"903":1,"905":2,"907":1,"908":1,"916":1,"921":1,"924":1,"926":2,"931":2,"932":1,"939":1,"942":1,"946":1,"947":1,"948":1,"955":1,"958":1,"964":2,"965":1,"966":1,"972":1,"980":1,"981":2,"982":1,"986":1,"987":1,"988":4,"989":1,"990":1,"991":1,"1003":1,"1004":2,"1008":1,"1011":1,"1012":1,"1014":1,"1016":1,"1017":1,"1018":8,"1019":4,"1020":2,"1027":1,"1034":2,"1035":1,"1041":1,"1042":3,"1043":3,"1044":1,"1049":1,"1050":2,"1051":2,"1052":1,"1058":1,"1059":4,"1060":1,"1061":2,"1077":1,"1082":1,"1084":2,"1085":2,"1086":1,"1091":2,"1094":2,"1096":1,"1119":1,"1126":2,"1129":1,"1142":2,"1147":1,"1169":1,"1175":1,"1188":1,"1196":1,"1202":1,"1203":1,"1212":7,"1213":1,"1214":1,"1229":6,"1230":2,"1232":1,"1233":1,"1236":1,"1237":24,"1241":1,"1246":1,"1247":12,"1249":2,"1251":2,"1252":1,"1255":1,"1259":15,"1260":1,"1261":1,"1264":1,"1267":1,"1269":2,"1270":17,"1271":5,"1272":2,"1273":2,"1274":1,"1275":1,"1277":3,"1278":3,"1281":1,"1282":2,"1283":1,"1286":77,"1289":2,"1293":1,"1294":2,"1296":1,"1300":35,"1301":4,"1304":1,"1306":2,"1309":15,"1310":1,"1311":29,"1312":2,"1318":2,"1321":1,"1322":1,"1323":43,"1324":45,"1326":1,"1333":1,"1338":1,"1339":21,"1340":2,"1342":1,"1343":1,"1345":3,"1347":1,"1348":1,"1350":41,"1352":2,"1355":1,"1358":2,"1359":93,"1361":1,"1362":1,"1366":1,"1369":10,"1370":1,"1371":1,"1378":1,"1380":9,"1389":1,"1394":1,"1395":38,"1396":40,"1402":25,"1403":3,"1405":2,"1406":2,"1407":2,"1408":1,"1410":1,"1414":3,"1415":57,"1416":3,"1417":20,"1421":1,"1426":1,"1427":6,"1432":1,"1435":5,"1436":71,"1438":11,"1441":2,"1442":1,"1445":2,"1453":5,"1455":19,"1459":1,"1461":2,"1463":1,"1465":1,"1467":17,"1474":5,"1475":1,"1476":5,"1477":1,"1478":3,"1481":1,"1488":4,"1492":8,"1496":45,"1521":1,"1524":2,"1526":1,"1531":4,"1534":1,"1535":1,"1538":1,"1542":1,"1545":1,"1546":2,"1547":1,"1553":5,"1569":1,"1570":2,"1571":3,"1577":6,"1585":2,"1591":1,"1592":1,"1596":1,"1599":3,"1602":1,"1608":2,"1616":1,"1626":1,"1630":2,"1631":1,"1632":3,"1633":1,"1634":2,"1638":2,"1639":4,"1641":10,"1643":1,"1644":1,"1646":1,"1651":2,"1653":1,"1662":1,"1664":2,"1667":2,"1668":1,"1673":1,"1674":1,"1675":1,"1677":1,"1692":1,"1696":1,"1697":1,"1701":1,"1703":1,"1708":1,"1710":1,"1719":4,"1724":3,"1727":1,"1732":1,"1734":1,"1735":3,"1736":3,"1737":2,"1742":2,"1746":10,"1747":6,"1748":6,"1749":1,"1750":1,"1760":1,"1765":2,"1767":2,"1768":6,"1775":1,"1776":3,"1788":1,"1790":4,"1793":1,"1796":1,"1805":1,"1807":1,"1809":1,"1810":2,"1812":1,"1821":1,"1826":1,"1839":4,"1840":4,"1844":2,"1846":1,"1847":1,"1849":3,"1852":1,"1853":2,"1854":2,"1855":1,"1857":6,"1861":1,"1869":2,"1889":3,"1890":1,"1892":3,"1896":1,"1899":2,"1902":1,"1904":1,"1913":1,"1916":1,"1918":1,"1923":1,"1926":1,"1929":2,"1930":1,"1932":2,"1936":1,"1938":1,"1939":1,"1941":1,"1965":3,"1982":1,"1989":1,"1991":2,"1992":1,"1996":2,"2001":2,"2009":2,"2011":2,"2014":1,"2016":1,"2018":1,"2021":3,"2029":1,"2035":1,"2045":3,"2046":1,"2048":1,"2052":1,"2064":1,"2067":2,"2070":1,"2080":1,"2081":1,"2085":1,"2089":2,"2091":1,"2100":1,"2102":1,"2108":1,"2109":3,"2113":1,"2114":2,"2117":1,"2119":1,"2125":1,"2132":1,"2133":1,"2138":2,"2144":1,"2145":2,"2148":1,"2152":1,"2156":1,"2158":1,"2162":3,"2185":2,"2190":2,"2194":4,"2195":1,"2196":1,"2197":1,"2201":2,"2203":1,"2204":1,"2205":1,"2232":1,"2234":2}}],["changing",{"0":{"1889":1},"3":{"0":4,"40":1,"136":1,"160":1,"194":1,"208":1,"311":1,"365":1,"448":1,"476":1,"478":1,"497":1,"547":1,"692":1,"701":1,"732":1,"735":1,"741":1,"768":1,"819":1,"829":1,"905":1,"907":2,"948":1,"980":1,"1014":1,"1018":1,"1020":1,"1059":1,"1071":1,"1092":1,"1095":1,"1173":1,"1182":1,"1229":3,"1237":1,"1286":3,"1290":1,"1300":6,"1309":2,"1311":6,"1312":1,"1323":4,"1324":5,"1339":1,"1345":1,"1350":1,"1359":6,"1395":5,"1396":2,"1402":2,"1415":3,"1417":1,"1420":1,"1427":1,"1436":5,"1474":1,"1631":1,"1639":4,"1683":1,"1708":1,"1734":3,"1767":1,"1802":1,"1805":2,"1854":1,"1856":1,"1875":2,"1889":1,"1902":1,"1923":1,"1961":1,"1972":1,"2027":1,"2028":1,"2032":1,"2033":1,"2045":1,"2067":1,"2196":1,"2201":1,"2204":1}}],["chore",{"3":{"832":1,"1237":1,"1436":1,"1496":12,"1951":1}}],["choreography",{"3":{"537":1,"541":1,"809":4,"811":1,"815":1,"2170":1}}],["choreographed",{"1":{"533":1,"534":1,"535":1,"536":1,"537":1,"538":1,"539":1,"540":1,"541":1},"3":{"533":1,"536":1,"815":1,"1147":1,"1577":1,"2165":1,"2171":1}}],["chokepoint",{"3":{"1286":1,"1359":2,"2076":1}}],["choke",{"3":{"826":1,"829":1}}],["choosable",{"3":{"422":1}}],["choosing",{"3":{"70":1,"248":1,"295":1,"427":1,"520":1,"855":1,"896":1,"926":1,"964":1,"998":1,"1051":1,"1074":1,"1102":1,"1259":1,"1270":3,"1286":3,"1300":1,"1301":3,"1311":2,"1321":1,"1323":2,"1324":3,"1359":4,"1369":1,"1380":2,"1395":2,"1396":2,"1415":1,"1436":2,"1852":1,"1985":1,"2032":1,"2098":1,"2194":1}}],["chooses",{"3":{"234":1,"305":1,"1184":1,"1247":1,"1270":1,"1300":2,"1309":1,"1311":1,"1321":1,"1323":1,"1324":1,"1395":3,"1396":4,"1402":1,"1415":1,"1417":1,"1427":1,"1436":3,"1903":1,"2064":1}}],["choose",{"3":{"0":2,"157":1,"226":1,"481":1,"557":1,"640":1,"966":1,"996":1,"999":1,"1160":1,"1185":1,"1232":1,"1237":1,"1240":1,"1247":1,"1278":1,"1323":1,"1324":3,"1359":5,"1380":1,"1383":1,"1396":3,"1415":1,"1417":1,"1457":1,"1648":1,"1899":1,"1924":1,"1941":1,"1952":1,"1969":1,"2003":1,"2125":1,"2148":1,"2162":1,"2170":1,"2183":1}}],["chose",{"3":{"1":1,"91":1,"101":1,"305":1,"329":1,"469":1,"727":1,"743":1,"827":1,"853":1,"933":1,"963":1,"1004":1,"1049":1,"1082":1,"1085":2,"1093":1,"1109":1,"1213":1,"1286":2,"1311":3,"1323":4,"1324":3,"1338":1,"1339":3,"1347":1,"1359":2,"1380":1,"1395":2,"1396":5,"1415":1,"1417":2,"1423":1,"1427":1,"1436":2,"1898":1,"2026":1,"2044":2,"2065":2}}],["chosen",{"0":{"1361":1,"1935":1,"2119":1},"3":{"0":4,"1":1,"27":1,"102":1,"243":1,"255":1,"265":1,"353":1,"447":1,"450":1,"458":1,"461":1,"501":1,"546":1,"556":1,"584":1,"591":1,"657":1,"684":1,"732":1,"811":1,"821":1,"862":1,"889":1,"1013":1,"1084":1,"1092":1,"1144":1,"1212":2,"1229":1,"1235":1,"1244":1,"1247":1,"1269":2,"1270":2,"1286":10,"1300":6,"1301":2,"1302":1,"1309":1,"1311":7,"1323":3,"1324":11,"1326":1,"1338":1,"1339":5,"1350":2,"1359":11,"1369":3,"1373":1,"1380":1,"1395":14,"1396":6,"1402":5,"1415":4,"1417":1,"1422":1,"1429":1,"1435":1,"1436":5,"1438":1,"1441":1,"1455":1,"1460":1,"1474":2,"1475":1,"1492":1,"1496":1,"1513":1,"1545":1,"1556":1,"1567":1,"1577":2,"1630":1,"1653":1,"1666":1,"1715":1,"1842":1,"1889":1,"1915":1,"1944":1,"1984":1,"2025":1,"2065":1,"2068":1,"2080":1,"2085":2,"2117":1,"2118":1,"2132":1,"2133":1,"2134":1,"2162":1,"2179":1,"2234":3}}],["choices",{"3":{"0":2,"97":1,"449":1,"633":1,"880":2,"905":1,"953":1,"1212":1,"1229":1,"1257":1,"1259":1,"1266":1,"1270":1,"1271":1,"1286":4,"1300":4,"1309":3,"1310":1,"1311":2,"1312":1,"1323":1,"1324":4,"1337":1,"1339":1,"1350":3,"1369":3,"1373":1,"1375":1,"1380":1,"1395":3,"1396":2,"1415":1,"1416":1,"1417":1,"1436":7,"1467":1,"1492":1,"1630":1,"1675":1,"1783":1,"1789":1,"1829":1,"1967":1,"1984":1,"2017":1,"2029":1,"2044":1,"2053":1,"2077":1,"2129":1,"2132":1,"2133":1}}],["choice",{"3":{"0":7,"20":1,"31":1,"32":1,"54":1,"62":1,"68":1,"87":1,"97":1,"98":1,"101":1,"157":1,"165":2,"168":1,"170":1,"175":1,"178":1,"201":1,"236":1,"265":2,"273":1,"274":1,"291":1,"309":1,"469":1,"508":1,"551":1,"555":1,"558":1,"560":1,"633":1,"640":2,"642":1,"647":1,"666":1,"676":1,"686":1,"690":1,"792":1,"808":1,"810":1,"811":1,"833":1,"853":1,"874":1,"876":1,"913":1,"914":1,"947":1,"953":1,"954":1,"955":1,"963":1,"968":1,"980":1,"981":1,"1032":1,"1034":3,"1037":1,"1049":1,"1052":1,"1073":1,"1077":1,"1082":1,"1125":1,"1162":1,"1185":1,"1212":4,"1229":3,"1231":1,"1237":3,"1247":4,"1248":1,"1249":1,"1259":6,"1270":6,"1271":1,"1283":1,"1286":22,"1288":1,"1300":12,"1301":1,"1304":1,"1309":1,"1310":1,"1311":8,"1312":2,"1314":1,"1315":1,"1316":1,"1323":14,"1324":26,"1327":2,"1339":17,"1350":8,"1353":1,"1355":1,"1359":24,"1362":1,"1369":3,"1379":1,"1380":4,"1391":1,"1395":18,"1396":23,"1397":1,"1402":4,"1415":10,"1416":2,"1417":15,"1423":1,"1427":2,"1436":27,"1439":1,"1441":5,"1445":1,"1453":1,"1455":1,"1459":1,"1460":1,"1465":1,"1467":2,"1471":1,"1472":1,"1475":2,"1496":1,"1534":1,"1547":2,"1577":2,"1596":1,"1597":1,"1599":4,"1632":1,"1640":1,"1665":1,"1669":2,"1678":1,"1720":1,"1724":1,"1747":1,"1791":1,"1805":1,"1810":1,"1826":1,"1849":1,"1854":2,"1856":1,"1861":2,"1862":2,"1866":1,"1881":1,"1884":1,"1909":1,"1923":1,"1935":1,"1941":1,"1969":1,"1995":1,"1999":1,"2026":1,"2028":1,"2029":1,"2048":1,"2069":1,"2083":3,"2085":1,"2086":2,"2088":1,"2119":1,"2152":1,"2167":1,"2171":1,"2184":1,"2232":1,"2234":1}}],["cipher",{"3":{"2148":2}}],["ciphertext",{"2":{"365":1,"2148":1},"3":{"358":1,"359":8,"360":2,"361":4,"363":2,"365":2,"1284":2,"1286":11,"1324":2,"1675":1,"2141":1,"2142":2,"2144":7,"2145":2,"2146":2,"2147":1,"2148":5}}],["cil",{"3":{"1436":1}}],["circle",{"3":{"1395":1,"1417":2}}],["circularity",{"3":{"1436":2}}],["circular",{"3":{"0":1,"583":1,"768":1,"1286":1,"1311":1,"1415":1,"1436":2,"1441":1,"1540":1,"1577":1,"1641":1,"1881":1,"1885":1,"2010":1}}],["circuitbreakersamplingduration",{"3":{"1339":3}}],["circuitbreaker",{"3":{"819":1,"1359":1}}],["circuitopencounter",{"2":{"1256":1},"3":{"1256":1,"1259":2,"1323":2}}],["circuitopen",{"3":{"819":1}}],["circuitoptions",{"2":{"831":1,"1123":1,"1125":1},"3":{"0":1,"831":1,"832":1,"1123":2,"1125":1,"1324":6,"1416":2,"2001":1}}],["circuiting",{"3":{"284":1,"946":1,"1229":1,"1231":1,"1237":1,"1247":1,"1268":1,"1270":3,"1286":1,"1300":2,"1311":1,"1320":1,"1323":1,"1324":1,"1350":2,"1359":2,"1380":2,"1387":1,"1395":3,"1396":1,"1402":2,"1415":2,"1436":1,"1577":1,"1666":1,"1707":1}}],["circuited",{"3":{"71":1,"819":1,"820":1,"1270":1,"1311":1,"1339":1,"1402":1}}],["circuithandler",{"2":{"1124":1,"1125":1,"2001":1},"3":{"0":1,"1124":2,"1125":1,"1324":8,"1416":1,"2001":2}}],["circuits",{"3":{"0":1,"70":1,"109":1,"117":1,"121":1,"126":1,"175":1,"179":1,"300":1,"318":1,"459":1,"556":1,"640":1,"690":1,"790":2,"820":1,"821":1,"830":1,"832":1,"948":1,"964":1,"1123":3,"1124":2,"1125":1,"1126":1,"1128":3,"1212":1,"1224":1,"1229":2,"1237":3,"1239":1,"1245":1,"1247":2,"1259":2,"1268":1,"1270":8,"1271":1,"1286":5,"1300":7,"1309":7,"1311":9,"1323":2,"1324":21,"1339":3,"1346":1,"1347":1,"1350":3,"1359":27,"1380":1,"1389":1,"1391":1,"1395":9,"1396":9,"1402":7,"1410":1,"1415":6,"1416":4,"1417":4,"1427":1,"1436":2,"1441":1,"1455":1,"1461":1,"1467":1,"1534":1,"1577":1,"1599":1,"1612":1,"1805":1,"1821":1,"1831":1,"1933":1,"1995":1,"2001":3,"2002":1,"2009":1,"2032":1,"2033":1,"2098":2,"2139":1,"2205":1}}],["circuit",{"0":{"100":1,"1128":2},"2":{"819":1,"2033":1,"2158":1},"3":{"0":11,"27":2,"66":1,"67":2,"70":1,"71":1,"72":2,"73":1,"100":1,"109":1,"110":1,"113":1,"122":1,"124":1,"125":1,"175":1,"180":1,"189":1,"223":1,"241":1,"243":1,"258":1,"264":1,"265":1,"272":1,"359":1,"407":2,"413":1,"486":1,"506":3,"507":4,"549":1,"555":2,"557":2,"558":1,"575":1,"607":1,"609":3,"817":1,"819":6,"821":1,"822":1,"825":1,"828":1,"830":1,"831":3,"832":4,"833":1,"879":1,"881":3,"884":1,"920":1,"1020":1,"1074":1,"1079":1,"1122":3,"1123":2,"1124":15,"1125":4,"1126":1,"1128":5,"1129":1,"1168":1,"1184":3,"1192":2,"1212":2,"1213":1,"1220":2,"1229":2,"1237":1,"1256":2,"1259":7,"1263":2,"1265":1,"1268":3,"1270":17,"1271":1,"1286":7,"1300":1,"1301":1,"1304":1,"1307":1,"1309":2,"1310":1,"1311":5,"1312":5,"1317":1,"1323":5,"1324":131,"1330":2,"1339":18,"1350":2,"1359":17,"1365":1,"1380":2,"1395":12,"1396":17,"1401":1,"1402":7,"1415":4,"1416":9,"1417":32,"1433":1,"1436":20,"1437":2,"1438":7,"1441":3,"1443":2,"1447":1,"1453":1,"1455":1,"1456":2,"1465":1,"1467":10,"1489":1,"1490":1,"1496":1,"1525":1,"1526":5,"1534":1,"1544":1,"1560":2,"1566":2,"1577":6,"1585":1,"1599":1,"1653":1,"1665":1,"1668":1,"1698":1,"1701":1,"1707":1,"1708":1,"1805":1,"1874":1,"1921":1,"1933":1,"1946":1,"1968":3,"2001":13,"2003":3,"2007":3,"2011":1,"2013":2,"2020":2,"2030":1,"2031":4,"2033":2,"2038":1,"2039":2,"2072":1,"2076":2,"2078":2,"2083":2,"2084":1,"2120":2,"2138":2,"2144":1,"2158":4,"2160":2,"2162":1,"2234":1}}],["cicd",{"3":{"1192":1,"1212":16,"1462":1,"1494":1,"1496":9,"1499":3}}],["citizen",{"3":{"1300":1}}],["citing",{"3":{"0":1,"137":2,"428":1,"990":1,"1259":1,"1300":1,"1324":2,"1359":1}}],["citymaxlength",{"3":{"1237":1,"1271":1}}],["city",{"3":{"1237":1,"1271":2,"1286":1,"1324":4,"1436":2,"1764":1,"1829":1}}],["cityrules",{"3":{"1199":3,"1203":1,"1207":1,"1271":7}}],["citable",{"3":{"861":2,"1433":1,"1436":3,"1526":1,"1534":2}}],["citations",{"0":{"138":1,"139":1,"140":1,"142":1},"3":{"0":1,"27":1,"34":1,"43":1,"74":1,"104":1,"112":1,"115":2,"128":1,"130":2,"137":1,"138":2,"139":2,"142":2,"145":2,"152":1,"171":1,"184":1,"190":1,"203":1,"231":1,"238":1,"249":1,"268":1,"296":1,"322":1,"328":2,"337":2,"345":1,"354":1,"365":1,"366":1,"375":1,"393":1,"395":8,"409":3,"429":1,"446":2,"453":1,"468":3,"476":1,"478":1,"490":1,"493":1,"495":1,"497":1,"514":1,"534":3,"540":1,"551":1,"554":3,"559":1,"578":1,"586":1,"589":1,"594":1,"597":2,"621":1,"624":1,"636":1,"638":3,"644":1,"647":1,"652":1,"669":1,"672":4,"680":2,"685":1,"688":1,"696":2,"710":1,"713":1,"723":1,"728":1,"744":1,"752":1,"764":3,"769":1,"777":1,"780":2,"794":1,"797":1,"803":2,"822":1,"825":3,"841":1,"844":1,"849":1,"850":1,"864":1,"867":1,"875":1,"892":1,"900":1,"927":1,"929":1,"934":2,"949":1,"975":1,"983":1,"1003":1,"1006":1,"1007":1,"1029":1,"1037":1,"1045":1,"1055":1,"1062":1,"1078":1,"1086":1,"1095":1,"1103":1,"1111":1,"1128":1,"1136":1,"1146":1,"1156":1,"1396":2,"1452":1,"1496":17,"1500":1,"1536":1,"1796":1}}],["citation",{"0":{"137":1},"3":{"0":2,"82":2,"137":1,"138":1,"139":1,"141":1,"142":1,"145":2,"252":1,"256":1,"258":2,"336":1,"364":1,"378":1,"395":3,"409":1,"425":1,"426":1,"428":2,"429":1,"474":1,"478":1,"492":1,"534":4,"540":1,"543":1,"552":1,"559":1,"567":1,"597":1,"604":1,"607":5,"613":1,"624":2,"629":1,"677":1,"693":1,"755":1,"761":1,"780":1,"806":1,"825":1,"833":1,"867":1,"877":1,"892":1,"909":1,"912":1,"917":1,"958":1,"960":1,"1006":1,"1013":1,"1021":1,"1119":1,"1381":2,"1396":1,"1462":1,"1496":25,"1497":1,"1499":1,"1500":1,"2234":1}}],["cites",{"3":{"252":1,"392":1,"492":1,"534":1,"549":1,"594":1,"782":1,"865":1,"893":1,"968":1,"986":1,"987":1,"1006":1,"1062":1,"1070":1,"1193":1,"1237":2,"1270":1,"1300":2,"1312":1,"1324":1,"1339":2,"1359":6,"1369":1,"1396":5,"1415":1,"1436":6,"1455":1,"1471":1,"1496":14,"1518":1,"1888":1,"2001":1}}],["cited",{"3":{"29":1,"139":1,"140":2,"250":1,"258":1,"259":2,"261":1,"276":2,"423":1,"430":1,"463":1,"490":1,"493":1,"547":1,"551":1,"584":1,"586":1,"587":1,"607":1,"720":1,"780":1,"825":1,"867":1,"875":1,"877":1,"916":1,"1006":1,"1011":1,"1065":1,"1074":1,"1190":1,"1193":1,"1236":1,"1237":1,"1270":2,"1286":1,"1300":3,"1301":1,"1311":3,"1323":1,"1324":1,"1339":1,"1350":2,"1359":1,"1380":1,"1395":2,"1396":2,"1417":5,"1436":1,"1451":2,"1462":1,"1471":1,"1485":1,"1496":9,"1497":1,"1580":1,"1597":1,"1673":1,"2051":1}}],["cite",{"3":{"0":1,"95":1,"121":1,"136":1,"139":1,"286":1,"395":1,"407":1,"493":1,"556":1,"660":1,"748":1,"869":1,"1289":1,"1300":1,"1339":1,"1436":1,"1451":1,"1496":9,"1610":1,"1744":1}}],["ci",{"0":{"1364":1,"1453":1,"1616":1},"1":{"561":1,"562":1,"563":1,"564":1,"565":1,"566":1,"567":1,"568":1,"588":1,"589":1,"590":1,"591":1,"592":1,"593":1,"594":1,"595":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1,"1452":1,"1453":1,"1454":1,"1455":1,"1456":1,"1457":1,"1458":1,"1459":1,"1460":1,"1461":1},"2":{"374":1,"514":1,"589":1,"594":1,"604":1,"624":1,"1215":2,"1459":1,"1531":1,"1616":1,"1617":1,"1619":1},"3":{"0":17,"130":3,"132":3,"135":4,"136":1,"137":3,"138":1,"140":6,"142":4,"148":1,"218":3,"263":1,"265":1,"291":1,"368":1,"369":2,"370":7,"371":2,"373":10,"374":1,"375":1,"401":1,"412":1,"413":1,"414":1,"446":1,"450":2,"451":2,"483":1,"486":1,"509":4,"511":1,"514":1,"526":1,"527":1,"530":2,"531":2,"555":1,"556":1,"557":1,"558":1,"561":1,"562":1,"564":3,"572":1,"573":1,"574":1,"575":2,"576":1,"577":1,"588":1,"589":2,"590":2,"591":8,"592":1,"593":5,"594":1,"599":3,"601":1,"604":3,"609":4,"615":1,"618":1,"619":1,"621":1,"624":3,"625":1,"626":7,"630":1,"631":2,"633":5,"634":2,"635":3,"675":1,"700":1,"766":2,"767":1,"768":1,"862":1,"863":3,"864":1,"865":1,"868":1,"869":2,"871":2,"873":1,"876":1,"893":1,"906":1,"913":1,"914":3,"917":1,"941":1,"954":3,"960":1,"982":2,"983":1,"1012":2,"1017":2,"1018":1,"1020":1,"1034":8,"1037":2,"1066":2,"1067":3,"1069":1,"1070":1,"1074":1,"1091":1,"1192":1,"1212":2,"1214":1,"1215":6,"1216":1,"1237":1,"1273":1,"1286":2,"1311":2,"1324":1,"1326":3,"1339":8,"1359":2,"1364":2,"1369":4,"1380":3,"1415":2,"1426":1,"1427":4,"1428":2,"1429":2,"1431":2,"1433":4,"1434":4,"1435":1,"1436":82,"1438":17,"1440":1,"1441":4,"1442":1,"1444":1,"1445":2,"1450":1,"1452":2,"1453":56,"1454":8,"1455":12,"1456":5,"1457":1,"1459":6,"1460":2,"1461":6,"1462":2,"1463":2,"1464":1,"1465":1,"1467":3,"1468":1,"1471":1,"1474":1,"1475":1,"1476":1,"1481":2,"1482":1,"1485":2,"1486":42,"1487":8,"1488":3,"1489":10,"1490":15,"1491":1,"1492":44,"1493":2,"1494":3,"1496":6,"1503":1,"1521":1,"1523":1,"1524":5,"1525":4,"1526":60,"1530":1,"1531":10,"1532":2,"1534":8,"1535":7,"1537":2,"1545":1,"1548":1,"1551":2,"1552":1,"1553":1,"1554":2,"1558":2,"1565":1,"1569":1,"1570":2,"1572":1,"1574":1,"1576":4,"1577":65,"1582":7,"1583":2,"1584":1,"1585":3,"1586":9,"1589":1,"1590":1,"1591":40,"1592":3,"1595":1,"1596":6,"1597":1,"1599":1,"1600":2,"1605":2,"1611":6,"1614":1,"1616":1,"1617":3,"1619":2,"1642":1,"1643":1,"1654":1,"1659":1,"1661":1,"1664":1,"1669":1,"1670":1,"1671":1,"1673":1,"1674":1,"1675":1,"1696":1,"1706":1,"1707":2,"1716":4,"1731":2,"1738":1,"1739":2,"1757":2,"1761":1,"1781":1,"1785":1,"1793":1,"1797":1,"1800":2,"1923":2,"1929":1,"1930":1,"2004":1,"2048":2,"2052":1,"2056":1,"2057":1,"2059":1,"2060":5,"2061":1,"2081":1,"2091":1,"2099":1,"2103":1,"2107":4,"2110":1,"2111":1,"2122":2,"2124":1,"2125":2,"2134":3,"2135":1,"2173":2,"2178":2,"2182":1,"2215":1,"2220":1,"2221":1,"2222":2,"2234":2,"2241":2}}],["crtp",{"3":{"1436":2}}],["cry",{"3":{"1300":1}}],["cryptoprovidercache",{"3":{"1300":1,"1323":1}}],["crypto",{"0":{"2146":1},"3":{"311":1,"360":1,"602":1,"665":1,"667":1,"1213":1,"1300":2,"1336":1,"1339":3,"1436":2,"1442":1,"1467":3,"1496":1,"1905":1,"1970":1,"2144":1,"2148":1}}],["cryptographic",{"3":{"372":1,"1259":1,"1300":4,"1323":1,"1339":1,"1415":1,"1436":1,"1438":1,"1630":2,"1641":3}}],["cryptographicexception",{"2":{"359":1,"361":1,"2144":1},"3":{"359":4,"361":1,"1286":2,"1324":1,"2144":3}}],["cryptographically",{"3":{"209":2,"359":1,"1300":1,"1324":1,"1641":1,"1902":1,"1905":1,"1971":2,"2144":1}}],["cryptographicoperationstype",{"3":{"1436":1}}],["cryptographicoperations",{"2":{"179":1,"310":1,"827":1,"854":1,"946":2,"1292":1,"1293":1,"1294":1,"1337":1,"1902":2,"1905":1},"3":{"0":1,"179":1,"310":1,"827":1,"854":1,"946":2,"1292":1,"1293":1,"1294":1,"1300":8,"1337":1,"1339":3,"1436":3,"1902":3,"1905":1}}],["cryptography",{"2":{"665":1},"3":{"0":1,"664":1,"665":1,"1059":1,"1286":1,"1293":1,"1300":5,"1311":1,"1324":1,"1339":3,"1395":1,"1427":1,"1436":1,"1442":1,"1467":1,"1905":1,"2196":1,"2200":1}}],["cruiser",{"3":{"2050":1}}],["crumb",{"3":{"1324":2,"1395":5}}],["crucial",{"3":{"1310":1}}],["crucially",{"3":{"1223":1,"1251":1,"1259":1,"1270":1,"1281":1,"1300":1,"1323":1,"1339":2,"1359":1,"1402":1,"1415":1,"1417":1,"1865":1}}],["crux",{"3":{"1286":1,"1314":1,"1882":1,"1968":1}}],["crutch",{"3":{"1229":1}}],["crud",{"0":{"1388":1,"1389":1},"1":{"779":1,"780":1,"781":1,"782":1,"783":1,"784":1,"785":1,"786":1},"2":{"115":1,"1262":1,"1270":1},"3":{"0":1,"115":1,"122":2,"328":1,"341":1,"344":1,"444":1,"490":1,"523":1,"779":1,"782":2,"783":1,"784":1,"785":1,"881":4,"883":1,"921":1,"922":5,"924":1,"926":4,"927":1,"963":1,"980":1,"1100":1,"1203":14,"1207":87,"1208":1,"1212":1,"1233":1,"1249":1,"1259":3,"1262":2,"1263":1,"1265":8,"1270":45,"1271":3,"1286":1,"1300":1,"1311":5,"1323":5,"1324":14,"1350":10,"1352":1,"1354":1,"1359":80,"1371":3,"1373":1,"1380":14,"1382":2,"1386":1,"1389":1,"1392":1,"1395":68,"1396":3,"1402":4,"1415":6,"1436":1,"1438":2,"1526":1,"1540":1,"1577":5,"1591":1,"1611":2,"1612":1,"1616":1,"1617":1,"1621":1,"1625":1,"1626":1,"1627":1,"1629":1,"1631":1,"1632":12,"1638":2,"1639":3,"1651":1,"1666":1,"1742":1,"1747":1,"1750":1,"1757":1,"1760":1,"1824":1,"1874":1,"1985":1,"1992":3,"2076":1,"2234":1}}],["crudentitycontrollerbasetests",{"3":{"1199":1,"1207":5,"1311":2}}],["crudentitycontrollerbase",{"2":{"328":1,"925":1,"1666":1,"1874":1},"3":{"0":2,"328":1,"341":1,"922":2,"925":1,"1199":2,"1203":1,"1207":2,"1212":2,"1270":6,"1300":1,"1311":14,"1436":2,"1496":1,"1666":1,"1874":1}}],["crlf",{"3":{"741":1,"1300":4,"1311":2,"1436":1,"1438":1,"1479":1,"1496":1}}],["crisp",{"3":{"1816":1}}],["crios",{"3":{"1324":1}}],["cries",{"3":{"590":1,"1436":1}}],["criterion",{"3":{"265":1,"371":1,"1011":1,"1012":1,"1018":1,"1019":1,"1020":1,"1093":1,"1247":2,"1359":2,"1366":1,"1369":1,"1436":1,"1491":1,"1496":1,"1524":1,"1526":15,"1527":1,"1531":3,"1532":2,"1537":1,"1576":1,"1577":12,"1578":1,"1582":2,"1585":1,"1591":2,"1797":1,"1904":1,"2144":1,"2173":1,"2181":3}}],["criteria",{"1":{"1536":1,"1537":1,"1538":1,"1539":1,"1540":1,"1541":1,"1542":1,"1543":1,"1544":1,"1545":1,"1546":1,"1547":1,"1548":1,"1549":1,"1550":1,"1551":1,"1552":1,"1553":1,"1554":1,"1555":1,"1556":1,"1557":1,"1558":1,"1559":1,"1560":1,"1561":1,"1562":1,"1563":1,"1564":1,"1565":1,"1566":1,"1567":1,"1568":1,"1569":1,"1570":1,"1571":1,"1572":1},"2":{"319":1,"546":1,"547":1,"550":1},"3":{"0":4,"168":1,"318":1,"319":1,"376":1,"544":1,"545":4,"546":1,"547":1,"548":1,"549":3,"550":1,"591":1,"1010":1,"1011":2,"1012":9,"1013":3,"1014":3,"1017":3,"1018":1,"1019":1,"1090":1,"1212":1,"1216":2,"1239":11,"1240":2,"1243":3,"1245":1,"1247":49,"1278":1,"1286":5,"1310":1,"1311":2,"1342":1,"1350":3,"1353":1,"1359":43,"1366":1,"1369":2,"1372":1,"1380":2,"1431":1,"1436":11,"1438":4,"1467":1,"1519":2,"1526":5,"1531":2,"1534":1,"1536":5,"1537":6,"1538":1,"1539":1,"1540":1,"1541":1,"1542":1,"1543":1,"1544":1,"1545":1,"1546":1,"1547":1,"1548":1,"1549":1,"1550":1,"1551":1,"1552":1,"1553":2,"1554":1,"1555":1,"1556":1,"1557":1,"1558":1,"1559":1,"1560":1,"1561":1,"1562":1,"1563":1,"1564":1,"1565":1,"1566":1,"1567":1,"1568":1,"1569":1,"1570":1,"1571":1,"1575":1,"1577":9,"1581":1,"1582":2,"1584":1,"1585":2,"1591":2,"1637":1,"1662":1,"1796":1,"1797":1,"1802":1,"1811":1,"1815":9,"1817":1,"1859":1,"1995":2,"2041":1,"2043":1,"2052":1,"2116":1,"2173":2}}],["critically",{"3":{"235":1,"1237":1,"1270":1,"1300":1,"1342":1,"1436":3,"1452":1,"1805":1,"1895":1}}],["critical",{"0":{"1619":1},"2":{"791":1,"792":1,"794":1,"2168":1,"2170":1},"3":{"0":1,"767":1,"790":6,"791":1,"792":3,"794":1,"812":1,"870":1,"995":1,"1259":1,"1286":1,"1300":3,"1303":1,"1311":1,"1395":11,"1415":1,"1417":5,"1445":1,"1449":1,"1455":3,"1456":1,"1460":1,"1463":2,"1466":1,"1492":1,"1559":1,"1565":1,"1569":1,"1639":1,"1649":1,"1814":1,"2168":3,"2170":1}}],["crack",{"3":{"1900":1,"1902":1,"1905":1}}],["cracking",{"3":{"311":1,"945":1,"1300":2,"1436":1}}],["craft",{"3":{"1324":1,"1897":1,"2071":1}}],["craftsmanship",{"3":{"1301":1,"1552":1}}],["crafted",{"3":{"1270":1,"1324":1,"1359":4,"1416":1,"1436":3,"1908":1}}],["crawler",{"3":{"607":1,"609":1,"1467":2,"2160":3}}],["crashing",{"3":{"1237":1,"1259":1,"1286":1,"1300":1,"1380":1,"1396":1,"1401":1,"1402":2,"1416":1}}],["crashed",{"3":{"1125":1,"1323":2,"1324":1,"1475":1}}],["crashes",{"3":{"0":1,"16":1,"18":1,"146":1,"147":1,"150":1,"1074":1,"1213":1,"1286":1,"1324":1,"1436":1,"1491":1,"2130":1}}],["crash",{"3":{"0":4,"19":1,"24":1,"148":1,"195":1,"197":1,"199":1,"201":3,"226":1,"413":2,"520":1,"524":1,"537":1,"539":1,"601":1,"603":1,"676":1,"692":2,"714":1,"716":1,"756":1,"897":1,"931":2,"933":1,"996":1,"1016":1,"1018":1,"1022":1,"1041":1,"1074":1,"1076":1,"1102":1,"1116":1,"1254":1,"1257":1,"1258":1,"1259":12,"1269":1,"1270":1,"1286":3,"1318":1,"1323":5,"1324":2,"1339":4,"1349":1,"1357":1,"1359":6,"1367":1,"1368":1,"1369":2,"1396":4,"1408":1,"1415":6,"1416":1,"1417":16,"1436":1,"1455":1,"1491":2,"1576":1,"1577":1,"1631":1,"1660":1,"1669":1,"1721":1,"1724":1,"1839":1,"1842":1,"1947":1,"2014":1,"2128":1,"2166":1,"2192":1}}],["crowd",{"3":{"390":1,"1324":2,"1395":1,"1955":1}}],["cronformatexception",{"3":{"1323":1}}],["cronexpression",{"3":{"707":3,"1269":1,"1270":2,"1286":1,"1323":3,"1442":1}}],["cronschedule",{"3":{"1323":1}}],["crons",{"3":{"625":1,"626":2,"1438":1,"1456":1,"1490":1,"1492":2,"1591":1,"1599":1}}],["cronosnextoccurrencetests",{"3":{"1199":1,"1207":2,"1438":2}}],["cronos",{"3":{"0":1,"707":2,"708":1,"709":1,"1059":1,"1212":1,"1213":1,"1270":2,"1323":3,"1948":1}}],["cron",{"1":{"704":1,"705":1,"706":1,"707":1,"708":1,"709":1,"710":1,"711":1,"2183":1,"2184":1,"2185":1,"2186":1,"2187":1,"2188":1,"2189":1,"2190":1,"2191":1,"2192":1,"2193":1,"2194":1,"2195":1},"2":{"707":1},"3":{"0":5,"627":2,"628":1,"640":1,"704":1,"707":6,"708":1,"709":3,"766":1,"767":1,"768":1,"1000":1,"1041":1,"1043":1,"1046":1,"1212":1,"1213":1,"1260":1,"1269":2,"1270":5,"1323":16,"1367":1,"1438":2,"1456":1,"1457":1,"1459":1,"1460":1,"1465":1,"1474":1,"1475":1,"1482":1,"1492":2,"1496":1,"1524":1,"1526":5,"1531":1,"1577":2,"1582":1,"1589":1,"1590":1,"1591":4,"1596":1,"1664":3,"1779":1,"1947":2,"1948":3,"1950":3,"2035":1,"2038":1,"2167":1,"2182":2,"2183":1,"2185":1,"2194":1,"2205":1,"2208":1,"2234":1}}],["cropped",{"3":{"1480":1}}],["cropping",{"3":{"1480":1}}],["crops",{"3":{"1323":1,"2128":1}}],["crop",{"3":{"0":1,"440":1,"1212":1,"1286":1,"1323":1,"1415":1,"1496":1,"2130":1}}],["crossrepocomparison",{"3":{"1522":1,"1528":1,"1573":1,"1579":1,"1587":1,"1593":1}}],["crosslayerviolation",{"3":{"1436":2}}],["crossoriginrejection",{"3":{"1324":2}}],["crosstenantwritedetail",{"3":{"1311":1}}],["crosstenantwritetitle",{"3":{"1311":1}}],["crosstenantwriteexception",{"2":{"107":1,"109":1,"698":2,"1276":1,"1851":1},"3":{"0":1,"107":1,"109":2,"698":2,"1199":5,"1203":1,"1207":2,"1237":1,"1276":2,"1286":6,"1311":5,"1851":1}}],["crossservicespeakerlinktests",{"2":{"1535":1},"3":{"1199":1,"1207":2,"1438":1,"1535":1,"1611":1}}],["crossservicesmoketests",{"3":{"1199":1,"1207":2}}],["crossserviceuserregisteredtests",{"2":{"1535":1},"3":{"1199":1,"1207":2,"1438":1,"1535":1,"1611":1}}],["crossservicetestbase",{"3":{"1199":6,"1207":2,"1436":2}}],["crossservicecollection",{"3":{"1199":2,"1207":2}}],["crossservicedatasource",{"2":{"1429":1},"3":{"1199":4,"1207":1,"1429":1,"1436":2,"1488":1}}],["crossservice",{"2":{"1207":1,"1437":1,"1486":1,"1487":1,"1490":2,"1526":1,"1534":1,"1591":1,"1615":1},"3":{"914":3,"1199":13,"1203":1,"1206":1,"1207":53,"1436":11,"1437":2,"1438":3,"1467":1,"1486":1,"1487":1,"1488":1,"1490":2,"1496":1,"1526":3,"1534":1,"1591":3,"1611":3,"1615":1}}],["crossservicefixture",{"2":{"914":1},"3":{"914":3,"1199":8,"1207":2,"1436":4,"1437":2,"1488":2}}],["crossservicefixturebasetests",{"3":{"1199":1,"1207":3,"1436":1,"1438":1,"1487":1}}],["crossservicefixturebase",{"2":{"914":1,"1429":1,"1671":1},"3":{"640":1,"914":4,"916":1,"1066":1,"1199":5,"1207":3,"1212":1,"1428":1,"1429":7,"1436":21,"1438":2,"1488":2,"1496":1,"1671":1}}],["crosssourcespecificationtests",{"3":{"1199":1,"1207":4,"1496":1}}],["crosssourcespecification",{"2":{"168":1,"545":1,"549":1,"1239":1,"1500":1,"1577":1,"1662":1,"1859":2,"1861":1,"1862":1},"3":{"168":2,"545":2,"547":1,"549":1,"1199":4,"1203":1,"1207":2,"1212":1,"1239":11,"1247":9,"1353":2,"1359":11,"1436":2,"1438":1,"1496":3,"1500":1,"1577":4,"1662":1,"1859":2,"1861":1,"1862":1}}],["crossevent",{"3":{"1359":2}}],["crossentitynavigationfinder",{"3":{"1199":2,"1207":1,"1428":1,"1431":1,"1436":4}}],["crossed",{"3":{"255":1,"1323":1,"1396":1,"1415":1,"1436":1,"1467":1,"1973":1,"2011":1}}],["crosses",{"0":{"1225":1,"1858":1},"3":{"0":2,"109":2,"249":1,"265":1,"396":1,"551":1,"645":1,"656":1,"657":1,"658":2,"696":1,"786":1,"789":1,"930":1,"1018":1,"1212":1,"1237":2,"1243":1,"1259":2,"1300":2,"1307":1,"1309":1,"1311":3,"1324":2,"1332":1,"1350":4,"1353":1,"1357":1,"1359":4,"1379":1,"1380":3,"1395":2,"1396":9,"1400":1,"1402":2,"1415":2,"1416":2,"1417":2,"1427":1,"1436":1,"1438":1,"1634":1,"1638":2,"1840":1,"1862":1,"1887":1,"1892":1,"1916":1,"1919":1,"1922":1,"1927":1,"1944":1,"1953":1,"2075":1,"2128":1,"2157":1,"2232":1}}],["crossdatasourcedegradeconventiontests",{"2":{"164":1},"3":{"164":1,"1199":1,"1207":7,"1286":1,"1438":1}}],["crossdatasourcedegradeconvention",{"2":{"46":1,"47":1,"166":1,"1281":1,"1310":1,"1473":1,"1482":1,"1577":1,"1849":1,"1853":1,"1858":1,"1862":1,"1866":1},"3":{"46":1,"47":1,"166":1,"1198":1,"1199":2,"1203":1,"1207":2,"1247":1,"1281":3,"1286":30,"1310":4,"1396":1,"1436":1,"1473":1,"1482":1,"1577":2,"1849":1,"1853":1,"1858":1,"1862":1,"1866":1}}],["crossings",{"3":{"1324":1}}],["crossing",{"0":{"1349":1,"1413":1,"1946":1},"3":{"0":2,"255":1,"390":1,"427":1,"826":1,"1293":1,"1323":2,"1324":1,"1339":1,"1350":3,"1359":3,"1396":1,"1402":1,"1416":1,"1436":2,"1631":1,"1922":1,"2075":1}}],["cross",{"0":{"1346":1,"1362":1,"1400":1,"1402":1,"1405":1,"1460":1,"1469":1,"1494":1,"1528":1,"1559":1,"1579":1,"1593":1,"1751":1,"1753":1,"1772":1,"1774":1,"1859":1,"2192":1,"2210":1},"1":{"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"771":1,"772":1,"773":1,"774":1,"775":1,"776":1,"777":1,"778":1,"993":1,"994":1,"995":1,"996":1,"997":1,"998":1,"999":1,"1000":1,"1416":1,"1711":1,"1712":1,"1713":1,"1714":1,"1715":1,"1716":1,"1893":1,"1894":1,"1895":1,"1896":1,"1897":1,"1898":1,"1899":1},"2":{"1188":1,"1968":1},"3":{"0":28,"8":1,"10":3,"28":1,"31":1,"47":2,"49":1,"50":1,"52":1,"54":1,"57":1,"59":2,"61":3,"62":3,"63":1,"64":2,"68":1,"77":1,"81":1,"91":1,"97":1,"99":1,"105":2,"116":2,"117":1,"119":1,"122":2,"135":1,"136":1,"150":2,"151":1,"152":1,"157":2,"159":1,"162":1,"166":3,"168":2,"169":2,"171":1,"207":1,"214":2,"215":1,"216":1,"217":1,"245":2,"253":1,"255":1,"264":1,"265":3,"266":1,"273":1,"313":1,"331":1,"336":1,"343":1,"381":1,"386":2,"387":1,"391":1,"396":1,"398":1,"399":1,"400":1,"405":1,"446":1,"459":1,"470":1,"474":1,"506":2,"507":1,"509":1,"517":1,"521":2,"524":2,"528":1,"531":1,"535":1,"536":1,"541":1,"545":1,"547":1,"549":3,"554":1,"578":1,"583":2,"584":3,"585":1,"587":1,"607":1,"611":1,"618":1,"619":2,"624":2,"625":2,"626":11,"627":1,"628":4,"629":2,"640":5,"642":1,"659":1,"661":1,"665":1,"667":1,"692":1,"698":1,"699":1,"717":1,"731":1,"733":1,"747":1,"756":2,"764":1,"771":1,"774":4,"776":1,"777":1,"781":1,"782":1,"799":4,"801":1,"802":1,"809":2,"810":1,"826":1,"834":1,"861":1,"895":1,"896":1,"897":1,"900":1,"906":1,"907":1,"914":5,"915":2,"930":1,"931":1,"950":1,"964":1,"980":1,"987":1,"990":1,"992":1,"993":1,"996":1,"1011":1,"1018":1,"1022":1,"1024":1,"1026":1,"1027":1,"1028":1,"1030":1,"1043":1,"1049":1,"1050":1,"1053":1,"1061":1,"1066":2,"1067":1,"1068":1,"1069":1,"1070":1,"1075":3,"1083":1,"1086":1,"1104":1,"1108":1,"1140":1,"1147":1,"1150":1,"1183":1,"1184":1,"1185":1,"1187":1,"1188":1,"1190":1,"1191":2,"1192":10,"1193":2,"1200":3,"1201":3,"1202":6,"1203":6,"1210":2,"1212":20,"1213":1,"1216":3,"1231":1,"1232":2,"1237":3,"1239":3,"1243":1,"1244":2,"1245":2,"1247":11,"1252":1,"1257":1,"1258":1,"1259":15,"1260":1,"1261":2,"1265":1,"1267":1,"1270":13,"1271":3,"1273":1,"1276":1,"1278":1,"1281":3,"1286":38,"1287":1,"1288":1,"1298":1,"1300":16,"1301":6,"1308":2,"1309":21,"1310":15,"1311":23,"1312":6,"1313":2,"1314":1,"1316":2,"1320":1,"1323":19,"1324":36,"1326":4,"1328":3,"1338":1,"1339":21,"1340":4,"1341":2,"1342":1,"1343":1,"1345":3,"1349":1,"1350":37,"1352":1,"1353":1,"1354":2,"1355":4,"1359":80,"1363":2,"1367":1,"1369":4,"1375":1,"1378":1,"1379":1,"1380":16,"1381":1,"1387":1,"1391":1,"1395":29,"1396":72,"1398":1,"1401":1,"1402":34,"1403":1,"1404":3,"1405":2,"1406":1,"1410":2,"1413":2,"1414":1,"1415":39,"1416":11,"1417":27,"1427":3,"1428":2,"1429":1,"1430":1,"1431":2,"1433":2,"1436":154,"1437":4,"1438":26,"1439":1,"1440":1,"1441":2,"1442":1,"1443":1,"1444":1,"1446":2,"1449":4,"1452":3,"1453":1,"1454":1,"1455":12,"1456":4,"1459":1,"1460":15,"1461":1,"1462":1,"1463":4,"1465":2,"1467":5,"1471":1,"1473":2,"1474":1,"1475":4,"1476":2,"1482":4,"1485":2,"1486":4,"1487":2,"1488":5,"1489":4,"1490":16,"1492":13,"1493":1,"1496":32,"1497":1,"1498":4,"1499":1,"1500":3,"1502":1,"1507":1,"1509":1,"1510":2,"1522":1,"1523":1,"1524":4,"1525":1,"1526":23,"1528":1,"1530":1,"1531":6,"1532":1,"1533":2,"1534":11,"1535":5,"1536":2,"1542":1,"1545":1,"1547":1,"1554":2,"1556":1,"1565":1,"1570":2,"1571":1,"1572":2,"1573":1,"1574":1,"1576":1,"1577":15,"1579":1,"1585":1,"1586":1,"1587":1,"1591":19,"1594":1,"1595":1,"1596":1,"1597":1,"1599":4,"1600":4,"1602":1,"1610":1,"1611":6,"1612":2,"1617":1,"1618":3,"1627":1,"1630":2,"1631":2,"1634":3,"1635":4,"1638":9,"1639":6,"1641":1,"1651":1,"1653":1,"1654":1,"1656":4,"1660":1,"1661":1,"1662":4,"1663":3,"1664":5,"1665":2,"1667":1,"1668":1,"1670":1,"1671":1,"1674":1,"1675":1,"1682":1,"1699":1,"1711":1,"1722":1,"1729":1,"1732":1,"1744":1,"1748":1,"1749":1,"1751":1,"1752":1,"1764":1,"1765":5,"1769":2,"1775":1,"1779":1,"1780":1,"1783":1,"1786":1,"1790":1,"1792":3,"1793":1,"1796":2,"1806":1,"1810":1,"1818":2,"1819":1,"1820":1,"1823":1,"1825":1,"1827":3,"1833":1,"1834":1,"1845":1,"1849":4,"1851":1,"1852":1,"1853":3,"1856":1,"1858":1,"1860":2,"1861":2,"1862":3,"1863":1,"1865":3,"1866":2,"1867":2,"1868":2,"1876":1,"1879":1,"1882":1,"1884":2,"1885":1,"1886":1,"1892":1,"1893":1,"1896":1,"1897":1,"1899":2,"1911":1,"1914":1,"1916":1,"1919":1,"1921":1,"1923":1,"1937":2,"1941":1,"1946":1,"1950":1,"1968":3,"1969":4,"1974":1,"1975":1,"1988":1,"2000":1,"2009":1,"2010":1,"2017":1,"2021":1,"2023":1,"2028":3,"2030":1,"2036":1,"2054":2,"2057":1,"2058":2,"2069":1,"2072":1,"2076":1,"2084":1,"2085":2,"2088":3,"2094":1,"2096":1,"2098":1,"2100":1,"2109":1,"2115":2,"2136":1,"2141":3,"2148":2,"2150":1,"2151":1,"2152":2,"2153":1,"2154":1,"2158":1,"2162":1,"2164":1,"2170":1,"2171":1,"2187":1,"2196":1,"2204":1,"2210":1,"2213":1,"2215":1,"2220":1,"2221":1,"2222":2,"2229":1,"2230":1,"2232":5,"2234":10,"2245":1}}],["cref",{"3":{"1416":2,"1496":1,"1526":1}}],["creeping",{"3":{"1862":1}}],["creep",{"3":{"698":1,"2049":1}}],["creds",{"3":{"1526":2}}],["credible",{"3":{"1144":1,"1904":1,"2044":1}}],["credibilityexperience",{"3":{"1369":1}}],["credibilityexperiencescore",{"3":{"1350":1,"1359":1,"1369":1}}],["credibility",{"3":{"1018":1,"1019":1,"1020":1,"1350":1,"1359":2,"1366":2}}],["credit",{"3":{"1490":1,"1903":1}}],["crediting",{"3":{"1286":1}}],["credits",{"3":{"777":1,"1591":2,"1805":1,"1910":1}}],["credited",{"3":{"428":1,"703":1,"1910":1}}],["credentialroutes",{"2":{"180":1},"3":{"180":1}}],["credentials",{"0":{"1405":1},"3":{"0":2,"313":1,"349":1,"351":1,"362":1,"432":1,"433":1,"434":2,"436":1,"498":1,"507":1,"527":1,"598":2,"601":2,"643":1,"665":1,"774":3,"775":3,"776":1,"905":1,"926":1,"945":2,"947":1,"950":1,"972":1,"1284":1,"1286":2,"1288":1,"1300":16,"1309":2,"1311":8,"1312":1,"1323":6,"1324":12,"1336":2,"1339":2,"1396":3,"1406":2,"1410":1,"1412":1,"1415":10,"1417":23,"1429":1,"1433":1,"1436":6,"1441":1,"1443":1,"1454":2,"1455":1,"1459":2,"1464":1,"1465":1,"1467":3,"1469":1,"1472":4,"1475":1,"1481":1,"1482":1,"1488":3,"1490":1,"1526":1,"1554":1,"1577":1,"1582":1,"1589":1,"1596":2,"1639":1,"1641":8,"1648":1,"1667":1,"1669":1,"1671":1,"1673":1,"1682":1,"1693":1,"1764":2,"1769":1,"1777":1,"1896":1,"1898":1,"1901":1,"1936":1,"1940":1,"1981":1,"1982":1,"2064":1,"2069":1,"2090":1,"2124":1,"2226":1}}],["credentialed",{"3":{"0":1,"432":1,"436":1,"1187":1,"1339":2,"1416":1,"1417":12,"1898":1}}],["credential",{"0":{"1407":1},"3":{"0":8,"173":1,"174":1,"176":1,"177":1,"179":1,"180":2,"189":1,"212":1,"217":1,"279":1,"280":1,"281":2,"284":4,"286":1,"309":2,"313":2,"314":3,"348":1,"349":1,"350":1,"352":1,"353":2,"355":1,"358":1,"362":1,"403":1,"435":1,"458":1,"498":1,"499":2,"526":1,"528":1,"529":1,"530":2,"532":1,"572":1,"597":1,"598":1,"599":2,"600":1,"602":2,"605":1,"612":1,"632":1,"634":1,"640":1,"641":1,"642":2,"643":3,"667":1,"670":1,"684":1,"688":1,"690":6,"691":1,"692":1,"718":2,"766":1,"768":1,"792":1,"853":1,"855":1,"869":1,"871":1,"872":2,"874":1,"904":1,"906":2,"908":1,"938":1,"945":3,"946":1,"947":1,"948":4,"950":3,"1017":2,"1018":1,"1020":3,"1022":1,"1057":1,"1058":1,"1059":1,"1063":1,"1118":1,"1183":1,"1212":1,"1241":1,"1264":1,"1270":1,"1283":1,"1286":4,"1289":1,"1290":1,"1291":2,"1292":2,"1293":1,"1294":1,"1300":48,"1311":2,"1312":1,"1322":1,"1323":12,"1324":10,"1326":1,"1335":1,"1339":14,"1359":1,"1366":1,"1368":1,"1369":1,"1395":1,"1396":89,"1403":2,"1404":1,"1405":2,"1406":2,"1407":3,"1409":2,"1415":22,"1417":8,"1427":1,"1436":22,"1438":9,"1441":1,"1444":1,"1445":1,"1446":1,"1447":1,"1455":8,"1457":2,"1458":1,"1460":1,"1461":1,"1462":2,"1465":5,"1466":1,"1467":14,"1468":2,"1472":2,"1474":1,"1475":1,"1477":2,"1481":2,"1492":2,"1577":1,"1595":1,"1596":1,"1631":3,"1641":4,"1650":1,"1661":1,"1670":1,"1672":1,"1703":1,"1732":2,"1765":1,"1898":2,"1899":1,"1902":3,"1905":1,"1967":1,"1968":1,"1971":1,"1972":2,"1973":1,"1978":3,"1979":3,"1980":3,"1982":1,"1999":2,"2000":2,"2001":1,"2002":4,"2003":2,"2056":1,"2068":1,"2119":1,"2143":1,"2155":1,"2174":1,"2175":1,"2178":1}}],["credentialpathprefixes",{"2":{"0":1,"217":1,"1339":1,"2151":1},"3":{"0":1,"217":1,"1339":6,"2151":1}}],["cream",{"1":{"2051":1,"2052":1,"2053":1,"2054":1,"2055":1,"2056":1,"2057":1,"2058":1,"2059":1,"2060":1,"2061":1},"3":{"2051":2,"2061":1,"2212":1}}],["creada",{"3":{"265":1}}],["creado",{"3":{"265":2}}],["creator",{"3":{"1362":1,"1630":1}}],["creatable",{"3":{"1311":2}}],["creational",{"3":{"1526":1,"1539":1}}],["creations",{"3":{"27":1,"1436":1}}],["creation",{"3":{"17":1,"351":1,"352":1,"524":1,"698":3,"782":1,"784":2,"790":2,"792":1,"794":1,"906":1,"988":1,"1174":1,"1175":2,"1213":1,"1229":1,"1234":1,"1249":1,"1254":1,"1259":2,"1271":1,"1278":1,"1286":9,"1300":3,"1309":3,"1311":4,"1339":1,"1350":7,"1357":1,"1359":9,"1364":1,"1369":1,"1380":1,"1395":12,"1396":4,"1402":2,"1415":6,"1417":4,"1429":1,"1436":1,"1467":1,"1472":3,"1481":1,"1490":1,"1496":2,"1630":1,"1631":5,"1632":2,"1634":1,"1635":1,"1639":4,"1640":1,"1651":1,"1685":1,"1686":1,"1719":1,"1727":3,"1728":1,"1729":1,"1750":1,"1751":1,"1765":1,"1767":1,"1770":1,"1773":1,"1775":1,"1841":1,"1978":1,"1979":2,"2168":2}}],["creating",{"3":{"0":1,"7":1,"291":1,"632":1,"711":1,"715":1,"781":1,"1270":1,"1281":1,"1286":4,"1300":1,"1309":3,"1311":3,"1323":1,"1324":1,"1350":3,"1359":10,"1380":1,"1396":1,"1402":1,"1417":2,"1436":5,"1467":1,"1472":1,"1474":1,"1490":2,"1629":1,"1631":2,"1632":1,"1639":3,"1664":1,"1684":1,"1722":1,"1729":1,"1749":1,"1988":1,"2000":1}}],["create→",{"3":{"1577":1}}],["create→result",{"3":{"1526":1}}],["createwindow",{"3":{"1416":3,"1417":1}}],["createmodel",{"3":{"1496":2}}],["createmodule",{"3":{"1436":1}}],["createmauiapp",{"3":{"1416":15,"1417":2}}],["createmigrationprooftable",{"2":{"564":1,"1319":1},"3":{"564":2,"1199":3,"1203":1,"1207":2,"1319":3,"1323":5}}],["createorderhandler",{"3":{"1686":1}}],["createorreactivate",{"3":{"1396":5}}],["createorupdateinstallationasync",{"3":{"1323":1}}],["createroomasync",{"3":{"1395":2}}],["createrequest",{"3":{"1497":1}}],["createrequestclientasync",{"2":{"881":1},"3":{"881":2,"1324":1,"1395":1}}],["createresult",{"3":{"1395":4}}],["createresetpasswordcommand",{"3":{"1311":1,"1415":2}}],["createreadonly",{"3":{"1286":7}}],["createrefreshusermissingerror",{"2":{"497":1,"499":1},"3":{"497":1,"499":1,"1300":1}}],["createx",{"3":{"1359":1}}],["createxhandler",{"2":{"1354":1},"3":{"1354":1,"1359":1}}],["createnewcategory",{"3":{"1359":1}}],["createnewanswerasync",{"3":{"1350":1,"1359":2}}],["createbatchasync",{"2":{"1380":1},"3":{"1380":8}}],["createbuilder",{"3":{"1339":1,"1436":1}}],["createbookmarkasync",{"3":{"1396":2}}],["createbookmarkhandlertests",{"3":{"1199":1,"1207":3}}],["createbookmarkhandler",{"3":{"1199":2,"1203":1,"1207":2,"1286":3,"1350":1,"1359":3,"1380":1,"1396":16,"1436":1}}],["createbookmarkrequestvalidatortests",{"3":{"1199":1,"1207":2}}],["createbookmarkrequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1396":8}}],["createbookmarkrequest",{"3":{"1199":12,"1203":1,"1207":2,"1396":12}}],["createbootstraploggerfactory",{"2":{"401":1,"1333":1},"3":{"401":2,"1311":1,"1333":1,"1339":2}}],["createbounded",{"2":{"1100":1},"3":{"1100":1,"1396":1}}],["createifnotexists",{"3":{"1323":1}}],["createinheritedasync",{"3":{"1436":2}}],["createinventoryitemhandler",{"3":{"897":2}}],["createinstance",{"2":{"583":1,"585":1,"1315":1},"3":{"583":1,"585":1,"1229":1,"1237":1,"1247":1,"1286":4,"1300":2,"1315":1,"1323":1}}],["createindex",{"2":{"564":1},"3":{"564":1}}],["createloggerconfiguration",{"2":{"1333":1},"3":{"1333":1,"1339":2}}],["createlogger",{"3":{"1311":1,"1339":2,"1417":1}}],["createlinkedtimeout",{"2":{"1422":1},"3":{"1422":1,"1427":1}}],["createlinkedtokensource",{"2":{"121":1}}],["createlink",{"2":{"1357":1},"3":{"1343":1,"1350":3,"1357":1,"1359":2}}],["createlimitedpartition",{"3":{"1311":9,"2001":1}}],["createlivepollhandlertests",{"3":{"1199":1,"1207":3}}],["createlivepollhandler",{"3":{"1199":2,"1203":1,"1207":2,"1350":7,"1399":2,"1402":11,"1496":1}}],["createlivepollcommandvalidatortests",{"3":{"1199":1,"1207":2}}],["createlivepollcommandvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1402":6}}],["createlivepollcommand",{"3":{"1199":8,"1203":1,"1207":2,"1402":9}}],["createlivepollrequestvalidatortests",{"3":{"1199":1,"1207":2}}],["createlivepollrequestvalidator",{"3":{"1199":3,"1203":1,"1207":2,"1402":8}}],["createlivepollrequest",{"3":{"1199":14,"1203":1,"1207":2,"1396":2,"1402":17}}],["createhost",{"3":{"1436":2,"1488":1}}],["createhostasync",{"3":{"1300":1}}],["createhandler",{"3":{"1311":3,"1324":1,"1359":1,"1380":1,"1396":1}}],["createfile",{"3":{"1343":1,"1350":3,"1359":2}}],["createforwardedheadersoptions",{"2":{"1338":1},"3":{"1338":1,"1339":3}}],["createforgotpasswordcommand",{"3":{"1311":1,"1415":2}}],["createfactory",{"3":{"1286":2,"1436":2,"1488":1}}],["createfailure",{"3":{"1270":24,"2138":2}}],["createfetchcts",{"2":{"559":1},"3":{"556":1,"559":1,"881":1,"1324":3}}],["createquestionasync",{"3":{"1395":1}}],["createquestioncommand",{"3":{"1359":1}}],["createquestionhandlertests",{"3":{"1199":1,"1207":2,"1359":2}}],["createquestionhandler",{"2":{"1639":1},"3":{"1199":2,"1203":1,"1207":2,"1270":2,"1352":1,"1359":23,"1395":2,"1639":1}}],["createquery",{"3":{"725":3,"1311":3,"1415":2}}],["createproducthandlertests",{"3":{"1685":1}}],["createproducthandler",{"3":{"1685":1}}],["createproviderchatclient",{"2":{"1091":1,"1421":1,"2174":1},"3":{"1091":1,"1421":1,"1427":2,"2174":2}}],["createpage",{"3":{"1496":1}}],["createpartnerasync",{"3":{"1395":2}}],["createpartnerhandlertests",{"3":{"1199":1,"1207":2,"1359":4,"1496":1}}],["createpartnerhandler",{"3":{"1199":2,"1203":1,"1207":2,"1350":2,"1352":3,"1359":18}}],["createpostgresql",{"2":{"909":1,"1034":1},"3":{"905":1,"909":1,"1034":1,"1286":2}}],["createthingasync",{"3":{"1436":3}}],["createticketcommandvalidator",{"3":{"1199":1,"1207":1,"1436":6}}],["createticketcommand",{"3":{"1199":5,"1207":1,"1436":10}}],["createtickethandler",{"3":{"782":1,"1199":1,"1207":1,"1436":5}}],["createtenantscope",{"2":{"703":1},"3":{"698":1,"703":1,"1259":5,"1286":10,"1311":1}}],["createtable",{"2":{"564":1},"3":{"564":1,"1323":1}}],["createversion7",{"3":{"690":1,"1396":2}}],["createcategoryasync",{"3":{"1395":2}}],["createcouponcommand",{"2":{"2098":1},"3":{"2098":1}}],["createcore",{"3":{"1350":7}}],["createcoreasync",{"3":{"0":1,"926":1,"1265":1,"1270":3,"1359":15}}],["createcontainers",{"3":{"1436":1}}],["createcontext",{"3":{"1270":3}}],["createconferencecategorycommand",{"3":{"1359":1}}],["createconferencecategoryhandlertests",{"3":{"1199":1,"1207":2,"1359":2,"1436":1}}],["createconferencecategoryhandler",{"3":{"1199":2,"1203":1,"1207":2,"1270":2,"1352":1,"1359":23}}],["createconverter",{"2":{"1223":1,"1237":1},"3":{"1223":1,"1229":2,"1237":4,"1300":3}}],["createchangepasswordcommand",{"2":{"1406":1},"3":{"1311":2,"1406":1,"1415":2}}],["createchangepreferencescommand",{"2":{"1406":1},"3":{"1300":1,"1311":1,"1406":1,"1415":2}}],["createchained",{"2":{"827":1,"1124":1},"3":{"827":1,"1124":1,"1324":1,"1339":1}}],["createcheckoutsessionhandler",{"3":{"1765":1}}],["createcheckoutsessioncommand",{"2":{"1264":1},"3":{"1264":2}}],["createcheckoutsessioncommandvalidator",{"2":{"674":1},"3":{"674":2,"1591":1}}],["createcheckoutsession",{"3":{"674":1,"1264":1,"1765":1}}],["createclientwithtoken",{"3":{"881":1,"1324":4}}],["createclient",{"3":{"572":1,"1309":2,"1429":1,"1436":7,"1488":2,"1611":1}}],["createaccountlink",{"3":{"1436":1}}],["createaccesstokenforsession",{"2":{"905":1,"2199":1},"3":{"905":1,"1300":6,"2199":1}}],["createaccesstoken",{"2":{"907":1,"2199":1},"3":{"0":1,"905":1,"907":1,"1059":1,"1289":2,"1290":1,"1300":6,"1406":1,"1415":1,"2199":1}}],["createactivityasync",{"3":{"1395":2}}],["createactivityhandlertests",{"3":{"1199":1,"1207":2,"1359":2,"1438":1}}],["createactivityhandler",{"3":{"1199":3,"1203":1,"1207":2,"1270":2,"1352":2,"1359":15}}],["createauthenticatedclientasync",{"2":{"881":1},"3":{"881":1,"1324":6,"1395":6,"1396":3,"1415":1}}],["createasyncscope",{"3":{"1259":2,"1359":4,"1402":1}}],["createasync",{"2":{"318":1,"324":1,"913":1,"1067":1,"1069":1},"3":{"318":1,"324":1,"913":1,"1067":1,"1069":1,"1311":6,"1359":2,"1380":29,"1396":8,"1402":2,"1490":1,"1996":1}}],["createunsafe",{"3":{"1237":1}}],["createunderclaimasync",{"2":{"524":1,"1102":1},"3":{"0":1,"524":2,"1100":2,"1102":1,"1402":4}}],["createusingazureservicebus",{"2":{"640":1},"3":{"640":1}}],["createuser",{"2":{"314":1},"3":{"314":1,"1286":2,"1289":1,"1300":6,"1406":1,"1415":3}}],["createsinglekeyring",{"3":{"1286":1}}],["createsessionpollasync",{"3":{"1402":1}}],["createsessionasync",{"3":{"1395":3}}],["createsessionrequest",{"3":{"1271":1}}],["createsessioncommand",{"3":{"1271":1,"1359":1}}],["createsessionhandlertests",{"3":{"1199":1,"1207":2,"1359":2}}],["createsessionhandler",{"2":{"1830":1},"3":{"1199":2,"1203":1,"1207":2,"1286":3,"1352":8,"1359":23,"1395":3,"1436":2,"1830":1}}],["createsponsorasync",{"3":{"1395":3}}],["createsponsorhandlertests",{"3":{"1199":1,"1207":2,"1359":2,"1438":1}}],["createsponsorhandler",{"3":{"1199":2,"1203":1,"1207":2,"1270":2,"1350":1,"1352":1,"1359":13}}],["createspeakerasync",{"3":{"1395":3}}],["createspeakercommand",{"3":{"1359":1}}],["createspeakerhandlertests",{"3":{"1199":1,"1207":2,"1359":2}}],["createspeakerhandler",{"3":{"1199":2,"1203":1,"1207":2,"1270":2,"1352":1,"1359":20}}],["createsqlite",{"2":{"909":1},"3":{"905":1,"909":1,"1286":2}}],["createsqlserver",{"2":{"909":1},"3":{"905":1,"909":1,"1286":2,"1436":1}}],["creates",{"0":{"1314":1},"3":{"25":1,"27":1,"42":1,"157":1,"195":1,"197":1,"200":1,"225":1,"230":1,"350":1,"352":1,"524":1,"572":1,"599":1,"610":1,"665":1,"698":1,"705":1,"792":1,"881":1,"926":1,"1034":1,"1212":1,"1223":1,"1259":1,"1270":2,"1286":10,"1300":8,"1307":1,"1309":2,"1311":7,"1323":4,"1324":19,"1329":1,"1339":7,"1352":2,"1359":16,"1373":1,"1374":2,"1389":1,"1395":10,"1396":4,"1402":7,"1415":1,"1416":4,"1417":9,"1427":2,"1436":12,"1438":3,"1441":2,"1467":5,"1472":3,"1475":1,"1488":3,"1491":1,"1630":1,"1632":3,"1635":1,"1638":1,"1639":1,"1640":1,"1641":1,"1650":1,"1653":2,"1671":1,"1684":2,"1688":1,"1692":1,"1700":1,"1722":1,"1726":1,"1730":1,"1747":4,"1748":1,"1749":3,"1750":1,"1751":2,"1752":1,"1757":1,"1764":1,"1765":2,"1767":1,"1769":2,"1770":1,"1849":1,"1875":1,"1906":1,"1909":1,"1933":2,"1977":1,"1978":1,"2049":1,"2056":1,"2115":1,"2160":1,"2168":1}}],["createeventasync",{"3":{"1395":2}}],["createeventcommand",{"3":{"1359":1}}],["createeventhandlertests",{"3":{"1199":1,"1207":2,"1359":1,"1436":1}}],["createeventhandler",{"3":{"1199":2,"1203":1,"1207":2,"1270":2,"1352":1,"1359":10}}],["createexecutionstrategy",{"2":{"1273":1},"3":{"1273":1,"1286":2}}],["createexternal",{"2":{"354":1,"1977":1},"3":{"0":1,"350":2,"354":1,"1405":1,"1415":4,"1977":1}}],["createentityasync",{"2":{"1956":1},"3":{"1270":1,"1311":2,"1359":12,"1956":1}}],["createentityhandlerbasetests",{"3":{"1199":1,"1207":1,"1270":1}}],["createentityhandlerbase",{"2":{"922":1,"1265":1,"1269":1,"1666":1},"3":{"922":1,"926":1,"1199":13,"1203":1,"1207":2,"1260":1,"1265":4,"1269":2,"1270":8,"1311":7,"1350":1,"1352":1,"1359":74,"1666":1}}],["createentityhandler",{"2":{"922":1,"1265":1},"3":{"0":1,"922":2,"1199":3,"1203":1,"1207":2,"1260":1,"1265":3,"1270":7,"1311":1,"1323":2,"1577":1}}],["createdroom",{"3":{"1395":1}}],["createdactivity",{"3":{"1395":1}}],["createdat",{"3":{"905":3,"1286":1,"1300":3,"1436":2}}],["createdatabasesasync",{"3":{"1436":1}}],["createdataction",{"3":{"157":1}}],["createdataprotectionkeyvaultkey",{"2":{"602":1,"604":1,"668":1},"3":{"0":1,"602":1,"604":1,"668":1,"1467":1}}],["createdatroute",{"3":{"157":1,"330":1,"1311":2,"1380":10,"1988":1}}],["createdsession",{"3":{"1395":2}}],["createdcount",{"3":{"1359":1}}],["createdevent",{"3":{"1395":1}}],["createdelegate",{"3":{"1286":2,"1300":1}}],["createdefault",{"2":{"459":1,"464":1,"466":2,"698":1,"747":1,"749":1},"3":{"459":1,"464":1,"466":2,"698":1,"747":1,"749":1,"774":1,"1311":6,"1436":5}}],["createdbcontext",{"2":{"1278":1},"3":{"1278":1,"1286":7}}],["createdby",{"2":{"1635":1},"3":{"470":1,"545":1,"715":1,"1237":4,"1239":1,"1247":6,"1286":2,"1355":1,"1359":11,"1369":4,"1380":2,"1438":1,"1630":1,"1631":6,"1632":4,"1635":4,"1638":1,"1639":1,"1640":2,"1815":1}}],["createdtime",{"2":{"757":1},"3":{"757":1,"1455":1,"1467":1}}],["createdon",{"2":{"1140":1},"3":{"39":2,"539":1,"714":1,"1140":1,"1212":1,"1231":2,"1237":3,"1274":2,"1286":4,"1309":6,"1323":2,"1359":4,"1369":1,"1396":15,"1402":4,"1415":13,"1436":3,"1600":2,"1630":1,"1631":2,"1640":5,"1664":1,"1810":1,"2092":1,"2169":1,"2188":1}}],["created",{"2":{"781":1,"1683":1},"3":{"0":2,"157":1,"178":1,"265":2,"290":3,"296":2,"350":2,"353":1,"408":1,"440":1,"539":1,"599":2,"600":1,"610":1,"633":1,"640":1,"665":1,"668":1,"670":1,"690":1,"693":1,"707":1,"716":1,"721":1,"781":1,"782":1,"784":1,"789":1,"790":6,"791":2,"881":1,"905":1,"988":1,"991":1,"1033":1,"1034":1,"1096":1,"1116":1,"1212":1,"1229":2,"1247":3,"1249":1,"1259":4,"1270":3,"1274":1,"1275":1,"1278":3,"1280":1,"1281":1,"1286":19,"1290":1,"1300":5,"1301":1,"1309":10,"1311":9,"1316":1,"1323":6,"1324":14,"1339":7,"1342":2,"1344":1,"1350":30,"1352":1,"1359":37,"1364":1,"1369":5,"1371":1,"1380":4,"1395":25,"1396":22,"1399":1,"1402":14,"1415":6,"1416":4,"1417":4,"1425":2,"1427":1,"1429":1,"1436":11,"1438":3,"1453":1,"1455":2,"1465":2,"1467":6,"1472":1,"1474":2,"1475":1,"1479":1,"1490":1,"1496":4,"1538":1,"1545":1,"1577":1,"1596":1,"1614":1,"1630":5,"1631":5,"1632":2,"1633":2,"1634":8,"1635":1,"1636":1,"1637":1,"1638":1,"1639":5,"1641":1,"1646":1,"1652":2,"1653":2,"1683":1,"1684":1,"1689":1,"1690":1,"1719":2,"1727":1,"1728":1,"1731":1,"1747":2,"1748":2,"1764":2,"1765":2,"1767":2,"1895":1,"1906":1,"1908":2,"1933":1,"1954":1,"2076":1,"2128":1,"2168":2,"2169":2,"2179":1,"2234":2}}],["create",{"0":{"1649":1,"1688":1,"2104":1},"1":{"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":1},"2":{"220":1,"231":1,"354":1,"601":1,"661":1,"698":1,"700":1,"703":1,"741":1,"747":1,"749":1,"801":2,"965":1,"968":1,"1051":1,"1067":1,"1124":1,"1135":1,"1167":1,"1169":1,"1170":1,"1398":1,"1472":1,"1811":1,"1812":1,"1954":1,"1968":1,"1990":1,"2049":1,"2092":1,"2095":1,"2106":1},"3":{"0":8,"5":1,"73":1,"200":2,"220":1,"231":1,"290":1,"318":1,"328":1,"329":1,"330":3,"334":1,"348":1,"350":4,"354":1,"527":1,"564":1,"601":1,"609":1,"641":1,"642":1,"657":15,"659":1,"660":1,"661":1,"690":4,"691":1,"693":1,"698":1,"700":1,"703":1,"732":1,"734":2,"741":1,"747":1,"749":2,"782":1,"799":1,"801":2,"803":1,"839":1,"882":1,"888":2,"891":1,"897":4,"905":1,"907":1,"919":1,"920":1,"921":1,"922":4,"924":1,"925":2,"926":1,"965":1,"968":1,"1033":1,"1050":1,"1051":1,"1067":1,"1085":1,"1091":1,"1124":1,"1135":1,"1167":1,"1168":7,"1169":1,"1170":2,"1184":1,"1203":38,"1207":86,"1212":4,"1229":1,"1234":2,"1237":22,"1259":1,"1260":3,"1265":4,"1270":41,"1271":10,"1286":42,"1290":1,"1300":14,"1301":8,"1304":1,"1305":1,"1309":15,"1311":45,"1312":1,"1323":9,"1324":24,"1327":1,"1339":5,"1342":2,"1343":2,"1349":2,"1350":81,"1351":1,"1352":11,"1353":4,"1354":3,"1357":1,"1358":2,"1359":384,"1369":8,"1371":2,"1373":1,"1374":1,"1375":3,"1378":1,"1380":40,"1384":3,"1392":3,"1395":146,"1396":74,"1398":3,"1399":1,"1402":61,"1405":1,"1406":1,"1412":1,"1415":22,"1417":1,"1420":1,"1421":1,"1427":9,"1429":1,"1436":37,"1438":8,"1441":2,"1467":6,"1472":6,"1474":1,"1476":1,"1477":2,"1481":2,"1482":1,"1487":2,"1488":1,"1489":5,"1490":2,"1496":4,"1526":7,"1534":2,"1535":2,"1591":2,"1596":2,"1600":1,"1608":1,"1627":3,"1630":3,"1631":4,"1632":9,"1638":3,"1639":9,"1640":2,"1641":2,"1646":1,"1651":4,"1652":1,"1653":2,"1654":1,"1656":1,"1664":1,"1666":1,"1671":1,"1685":13,"1686":12,"1687":2,"1689":1,"1697":1,"1698":1,"1719":1,"1720":1,"1725":1,"1727":2,"1728":2,"1742":3,"1746":4,"1747":3,"1748":2,"1749":2,"1750":8,"1753":1,"1754":1,"1765":3,"1768":4,"1769":9,"1774":1,"1810":7,"1811":2,"1812":1,"1830":1,"1908":1,"1922":1,"1933":1,"1953":2,"1954":1,"1956":2,"1968":1,"1977":2,"1979":1,"1986":1,"1987":1,"1988":2,"1990":1,"1992":1,"2046":1,"2049":1,"2092":1,"2095":1,"2106":1,"2130":1,"2165":1,"2174":2,"2234":2}}],["cobertura",{"2":{"1455":1},"3":{"1455":2,"1492":1,"1591":1}}],["coffee",{"3":{"1340":1,"1342":1,"1350":3,"1359":1,"1364":1,"1369":2,"1392":1,"1395":1}}],["covariant",{"3":{"1269":1,"1270":1,"1311":2,"1323":1}}],["coverlet",{"3":{"1213":1,"1611":2,"1617":1}}],["covering",{"3":{"138":1,"160":1,"268":1,"494":1,"609":1,"618":1,"635":1,"790":1,"980":1,"996":1,"1083":1,"1247":1,"1280":1,"1286":9,"1309":1,"1311":1,"1312":1,"1323":1,"1324":6,"1339":1,"1350":3,"1358":1,"1359":12,"1380":1,"1395":2,"1396":4,"1416":2,"1417":1,"1433":1,"1436":13,"1437":2,"1438":2,"1449":1,"1453":1,"1455":1,"1456":1,"1467":1,"1489":1,"1491":1,"1496":2,"1526":2,"1577":1,"1591":1,"1654":1,"1671":1,"1684":1,"1686":1,"1748":1,"1923":1,"2035":1,"2038":1,"2039":1,"2044":1,"2081":1,"2160":1,"2192":1,"2234":1,"2242":1}}],["cover",{"0":{"1608":1,"1742":1,"1786":1},"1":{"1999":1,"2000":1,"2001":1,"2002":1,"2003":1},"3":{"23":1,"52":1,"72":1,"118":1,"135":2,"157":1,"170":1,"265":1,"333":1,"388":1,"398":1,"401":1,"461":1,"466":1,"528":1,"530":1,"531":1,"563":1,"578":1,"582":1,"618":1,"651":1,"682":1,"690":1,"700":1,"718":1,"719":1,"751":1,"768":1,"789":1,"810":1,"881":1,"954":1,"966":1,"1018":1,"1026":1,"1075":1,"1119":1,"1187":1,"1219":1,"1235":1,"1242":1,"1247":1,"1259":1,"1265":1,"1286":5,"1300":2,"1301":2,"1309":1,"1311":1,"1320":1,"1322":1,"1324":5,"1339":2,"1359":3,"1380":2,"1396":5,"1417":1,"1425":1,"1428":1,"1436":19,"1438":8,"1445":1,"1456":1,"1459":1,"1465":1,"1483":1,"1487":1,"1488":1,"1534":1,"1551":1,"1577":1,"1582":2,"1583":1,"1597":1,"1632":1,"1646":1,"1666":1,"1667":1,"1669":1,"1776":1,"1999":2,"2000":1,"2002":1,"2003":1,"2007":1,"2026":1,"2035":1,"2049":1,"2060":1,"2078":1,"2081":1,"2106":1,"2158":1,"2169":2,"2210":1,"2238":1}}],["covered",{"0":{"2117":1},"3":{"0":1,"100":1,"164":1,"177":1,"186":1,"215":1,"236":1,"249":1,"265":1,"295":1,"358":1,"419":1,"601":1,"611":1,"620":1,"632":1,"657":1,"702":1,"718":1,"743":1,"768":1,"790":1,"832":1,"889":1,"907":1,"998":1,"1011":1,"1017":1,"1050":2,"1091":1,"1104":1,"1124":1,"1212":1,"1214":1,"1237":7,"1247":4,"1259":1,"1263":1,"1270":4,"1271":6,"1284":1,"1286":33,"1290":1,"1300":9,"1301":3,"1309":6,"1310":1,"1311":10,"1312":1,"1317":1,"1323":18,"1324":33,"1332":1,"1339":38,"1350":2,"1359":92,"1380":3,"1395":7,"1396":43,"1402":2,"1415":10,"1417":8,"1436":29,"1438":6,"1441":1,"1443":1,"1444":3,"1449":1,"1452":1,"1453":1,"1454":1,"1455":3,"1460":1,"1462":1,"1467":2,"1482":1,"1488":2,"1489":1,"1490":1,"1496":4,"1497":1,"1526":3,"1534":1,"1561":1,"1577":3,"1585":2,"1591":3,"1596":1,"1611":1,"1627":1,"1645":1,"1664":1,"1666":1,"1699":1,"1700":1,"1707":2,"1715":1,"1728":1,"1755":1,"1793":1,"1802":1,"1807":1,"1810":1,"1812":1,"1817":1,"1827":1,"1828":1,"1831":1,"1834":1,"1846":1,"1853":1,"1862":1,"1868":1,"1877":1,"1886":1,"1890":1,"1892":1,"1899":1,"1905":1,"1912":1,"1914":1,"1924":1,"1930":1,"1941":1,"1950":1,"1959":1,"1965":1,"1972":1,"1979":1,"1985":1,"1992":1,"1993":1,"1998":1,"2001":1,"2002":1,"2003":2,"2007":1,"2015":1,"2029":1,"2031":1,"2039":1,"2042":1,"2050":1,"2061":1,"2066":1,"2071":1,"2082":1,"2088":1,"2099":1,"2100":1,"2110":1,"2117":1,"2125":1,"2130":1,"2135":1,"2141":1,"2148":1,"2155":1,"2162":1,"2169":1,"2171":1,"2182":1,"2195":1,"2196":1,"2201":1,"2205":1,"2241":1}}],["covers",{"0":{"141":1},"3":{"0":7,"35":1,"41":1,"130":1,"135":1,"142":1,"160":1,"173":1,"178":1,"179":1,"182":1,"189":1,"226":1,"233":1,"235":1,"241":1,"265":1,"318":2,"328":1,"343":1,"358":1,"359":2,"361":1,"365":1,"369":1,"373":1,"402":1,"418":1,"427":1,"434":1,"440":1,"459":1,"461":1,"482":1,"486":1,"506":1,"518":1,"528":2,"529":1,"535":1,"539":1,"555":1,"572":2,"590":1,"591":1,"607":1,"609":2,"618":1,"620":1,"625":1,"626":2,"648":1,"665":1,"674":1,"675":1,"690":1,"701":1,"762":1,"766":1,"794":1,"802":1,"809":1,"818":1,"832":3,"838":1,"844":1,"861":1,"880":1,"897":1,"926":1,"946":1,"964":4,"1016":1,"1018":1,"1019":1,"1020":1,"1074":1,"1116":3,"1123":1,"1132":1,"1135":1,"1161":1,"1163":1,"1170":1,"1175":1,"1185":1,"1195":1,"1212":1,"1217":1,"1229":3,"1230":1,"1238":1,"1247":6,"1248":1,"1258":1,"1259":4,"1260":1,"1263":1,"1270":5,"1271":1,"1272":1,"1281":1,"1284":1,"1286":21,"1287":1,"1300":12,"1301":2,"1302":2,"1309":3,"1311":26,"1313":1,"1316":1,"1320":1,"1323":10,"1324":35,"1325":1,"1333":1,"1339":8,"1340":1,"1350":3,"1351":2,"1359":23,"1360":1,"1365":1,"1369":4,"1370":1,"1380":1,"1381":1,"1395":10,"1396":56,"1397":1,"1402":10,"1403":1,"1411":1,"1415":17,"1416":3,"1417":8,"1418":1,"1422":1,"1428":1,"1435":1,"1436":98,"1437":1,"1438":65,"1447":1,"1449":1,"1450":1,"1453":1,"1454":1,"1455":5,"1465":1,"1467":8,"1471":1,"1474":1,"1475":1,"1476":2,"1481":1,"1485":1,"1487":1,"1489":1,"1490":2,"1492":3,"1496":1,"1524":1,"1526":12,"1532":1,"1533":1,"1535":1,"1577":4,"1583":1,"1585":2,"1591":5,"1596":1,"1612":1,"1626":1,"1627":1,"1632":1,"1639":4,"1645":1,"1653":1,"1664":1,"1670":1,"1685":1,"1686":2,"1764":1,"1810":1,"1821":1,"1825":1,"1843":1,"1855":1,"1876":1,"1891":1,"1910":1,"1916":1,"1923":1,"1929":1,"2002":2,"2003":1,"2020":1,"2035":1,"2093":1,"2100":1,"2120":1,"2129":1,"2143":1,"2144":1,"2148":1,"2152":1,"2160":1,"2169":1,"2170":1,"2176":1,"2185":2,"2191":1}}],["coverage",{"0":{"138":1,"1496":1,"1499":1,"1643":1,"2059":1},"1":{"1495":1,"1496":1,"1497":1,"1498":1,"1499":1,"1500":1,"1501":1},"2":{"1455":1,"1461":1},"3":{"0":7,"67":1,"71":1,"74":1,"115":1,"122":1,"127":2,"130":1,"132":1,"138":2,"265":5,"267":3,"269":1,"305":1,"312":1,"361":1,"365":1,"373":1,"547":1,"551":1,"566":1,"572":1,"574":1,"593":1,"607":4,"608":1,"609":1,"619":1,"620":1,"717":1,"729":1,"782":1,"837":1,"840":1,"863":2,"874":1,"891":1,"892":2,"914":2,"918":1,"982":1,"990":1,"1020":1,"1037":1,"1066":1,"1076":1,"1085":1,"1192":2,"1194":1,"1212":2,"1213":1,"1216":2,"1237":1,"1270":1,"1271":1,"1281":1,"1286":3,"1300":9,"1311":15,"1339":1,"1350":2,"1369":2,"1395":2,"1396":1,"1415":1,"1417":1,"1434":1,"1436":63,"1438":4,"1453":4,"1455":20,"1456":2,"1459":2,"1460":1,"1461":2,"1463":1,"1467":2,"1469":1,"1486":5,"1487":1,"1488":2,"1489":2,"1490":2,"1492":10,"1493":1,"1495":1,"1496":13,"1497":1,"1500":1,"1525":1,"1526":3,"1534":3,"1535":1,"1551":1,"1565":2,"1576":2,"1577":8,"1581":1,"1582":1,"1586":1,"1591":6,"1595":1,"1596":1,"1597":1,"1600":1,"1611":3,"1642":1,"1643":1,"1661":1,"1671":1,"1673":1,"1799":1,"1885":1,"1891":1,"1964":1,"2035":1,"2049":1,"2051":2,"2058":1,"2059":4,"2060":2,"2061":2,"2087":2,"2160":1,"2222":2}}],["coercing",{"3":{"1237":1}}],["coerced",{"3":{"1237":1,"1286":1,"1300":1,"1311":1}}],["coerces",{"3":{"1236":1,"1237":1,"1259":2}}],["coexisted",{"3":{"1453":1}}],["coexists",{"3":{"1402":1}}],["coexist",{"3":{"0":1,"59":1,"111":1,"293":1,"448":2,"1052":1,"1229":1,"1300":1,"1304":1,"1323":1,"1359":1,"1396":1,"1416":1,"1436":1,"1545":1,"1806":1,"1816":1,"2131":1,"2133":2,"2135":1,"2141":1}}],["coined",{"3":{"1415":2}}],["coining",{"3":{"1409":1,"1415":1}}],["coincides",{"3":{"1380":1}}],["coincide",{"3":{"1324":1}}],["coincidentally",{"3":{"1300":1,"1311":1}}],["coin",{"3":{"1126":1,"1907":1,"2030":1}}],["cohesion",{"3":{"1191":1,"1200":1,"1314":1,"1323":1,"1359":3,"1396":2,"1415":1,"1436":12,"1497":1,"1517":1,"1525":1,"1526":1,"1534":1,"1535":1,"1571":1,"1577":4,"1582":1,"1586":1,"1591":1,"1671":1,"1932":1,"1941":1,"2049":1,"2096":1,"2116":1}}],["cohesive",{"3":{"1003":1,"1201":1,"1212":1,"1300":2,"1323":1,"1352":1,"1395":1,"1396":1,"1416":1,"1436":5,"1496":1,"1526":2,"1534":1,"1542":2,"1555":1,"1572":1,"1591":1,"1941":1,"2232":1}}],["coherence",{"3":{"302":1,"896":1,"1311":6,"1324":1,"1923":1,"2140":1,"2158":1}}],["coherently",{"3":{"1359":1,"1417":1}}],["coherent",{"0":{"2011":1},"3":{"0":1,"98":1,"369":1,"398":1,"1270":2,"1301":1,"1324":7,"1339":1,"1359":1,"1381":1,"1395":1,"1415":1,"1416":2,"1417":6,"1436":2,"1454":1,"1557":1,"1571":1,"1916":1,"1924":1,"2026":1,"2114":1,"2234":1}}],["codified",{"3":{"1247":1,"1339":1}}],["coding",{"3":{"243":1,"254":1,"1242":1,"1247":1,"1300":1,"1311":2,"1324":1,"1341":1,"1350":2,"1359":2,"1380":1,"1395":2,"1396":1,"1415":3,"1417":1,"1436":4,"1475":1,"1570":1,"1916":1}}],["codeowners",{"3":{"1673":1}}],["codebehinds",{"3":{"1436":3}}],["codebases",{"0":{"1503":1},"3":{"1211":1,"1212":1,"1300":1,"1359":1,"1500":1,"1878":1,"2040":1,"2043":1,"2056":1,"2172":1}}],["codebase",{"0":{"1212":1,"2232":1},"3":{"131":1,"151":1,"469":1,"725":1,"800":1,"801":1,"804":1,"805":1,"1052":1,"1124":1,"1140":1,"1190":1,"1210":1,"1212":1,"1214":3,"1216":1,"1217":1,"1218":1,"1221":1,"1229":7,"1231":1,"1236":1,"1237":1,"1247":3,"1248":1,"1259":1,"1270":6,"1271":3,"1272":1,"1281":1,"1286":7,"1300":13,"1301":3,"1302":1,"1309":2,"1310":2,"1311":2,"1312":1,"1323":4,"1324":5,"1329":1,"1339":8,"1340":1,"1350":2,"1351":1,"1359":18,"1363":1,"1368":1,"1369":6,"1380":7,"1395":3,"1396":7,"1402":4,"1410":1,"1415":2,"1416":4,"1417":4,"1427":1,"1428":1,"1431":2,"1436":14,"1485":1,"1489":1,"1491":1,"1492":1,"1536":1,"1552":1,"1661":1,"1674":1,"1782":1,"1786":1,"1794":1,"1805":1,"1828":1,"1831":1,"1848":1,"1854":1,"1927":1,"1960":1,"1971":1,"2017":1,"2050":1,"2051":1,"2077":1,"2089":1,"2101":1,"2141":1,"2148":1,"2232":1,"2235":1}}],["codereusedacrossbranchesofonetype",{"2":{"1436":1},"3":{"1436":2}}],["codepath",{"3":{"1395":1}}],["codecoverage",{"2":{"1611":1},"3":{"1611":1}}],["codec",{"3":{"1228":1,"1312":2,"1395":3,"1438":1}}],["code=true",{"3":{"1453":1}}],["code=false",{"3":{"1453":1}}],["code=",{"3":{"423":1,"1416":1,"1417":1,"1975":1}}],["codesignprovision",{"3":{"1481":1}}],["codesignentitlements",{"2":{"1481":1},"3":{"1481":1}}],["codes",{"3":{"0":4,"201":1,"265":1,"266":1,"341":1,"343":1,"419":2,"538":1,"576":1,"609":1,"759":1,"790":1,"794":1,"1028":1,"1058":1,"1059":1,"1212":1,"1217":1,"1229":2,"1235":1,"1237":3,"1259":1,"1263":1,"1270":2,"1271":9,"1286":2,"1293":6,"1300":24,"1309":1,"1311":10,"1312":1,"1323":9,"1324":6,"1337":1,"1339":2,"1344":1,"1350":4,"1359":31,"1375":1,"1380":4,"1395":3,"1396":16,"1402":1,"1404":1,"1415":6,"1436":28,"1438":1,"1472":1,"1489":1,"1496":1,"1546":1,"1577":2,"1582":2,"1583":1,"1591":1,"1596":1,"1639":1,"1641":6,"1666":1,"1683":1,"1685":1,"1686":3,"1727":1,"1748":1,"1753":1,"1876":1,"1925":1,"1930":1,"1977":1,"2078":1,"2120":1,"2160":2,"2166":1,"2167":1,"2168":1,"2169":1,"2200":3,"2204":1,"2234":1}}],["coded",{"1":{"787":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"794":1,"795":1},"3":{"0":1,"32":1,"88":1,"109":2,"117":1,"173":1,"265":3,"447":1,"787":1,"790":1,"794":1,"827":1,"861":1,"1270":1,"1271":2,"1286":3,"1300":6,"1301":6,"1309":2,"1311":6,"1312":3,"1323":2,"1324":9,"1339":4,"1350":2,"1359":21,"1369":2,"1395":2,"1396":3,"1402":3,"1427":1,"1436":9,"1438":1,"1465":1,"1480":1,"1488":1,"1489":2,"1526":2,"1547":1,"1564":3,"1577":2,"1591":2,"1596":1,"1597":2,"1653":3,"1654":1,"1666":1,"1702":1,"1821":1,"1886":1,"1927":1,"2085":1,"2132":1,"2171":1,"2205":1}}],["code",{"0":{"720":1,"1214":1,"1552":1,"1613":1,"1791":1,"1842":1,"1989":1,"2102":1},"1":{"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"613":1,"614":1,"1462":1,"1463":1,"1464":1,"1465":1,"1466":1,"1467":1,"1468":1,"1469":1,"1470":1,"2136":1,"2137":1,"2138":1,"2139":1,"2140":1,"2141":1},"2":{"107":1,"264":1,"266":1,"269":1,"276":1,"301":1,"562":1,"564":1,"567":1,"604":1,"626":1,"660":1,"1459":1,"1976":1,"2088":1},"3":{"0":32,"1":1,"6":1,"21":1,"24":1,"27":2,"32":1,"51":1,"52":1,"53":1,"57":2,"59":2,"60":1,"63":2,"74":1,"93":1,"107":2,"109":11,"110":1,"111":1,"118":1,"122":1,"125":1,"128":2,"135":4,"136":3,"145":1,"149":1,"151":1,"157":3,"160":1,"165":1,"167":2,"171":2,"177":1,"180":2,"186":1,"188":1,"190":1,"217":1,"220":1,"224":1,"225":1,"226":1,"230":1,"242":1,"243":3,"244":1,"248":1,"249":2,"258":2,"264":1,"265":6,"266":2,"267":1,"268":1,"269":1,"276":1,"285":1,"290":1,"292":1,"299":1,"300":1,"301":2,"305":1,"306":2,"310":3,"316":1,"317":1,"322":1,"325":1,"326":1,"328":1,"335":1,"341":2,"342":1,"343":2,"350":8,"351":3,"352":2,"353":1,"354":1,"359":2,"360":1,"365":1,"370":1,"373":1,"381":1,"383":2,"391":1,"397":1,"401":1,"409":1,"412":1,"415":1,"418":1,"419":1,"420":5,"421":2,"422":1,"423":2,"424":1,"425":1,"426":1,"428":2,"433":1,"434":1,"435":1,"448":1,"451":1,"452":1,"459":2,"465":1,"472":1,"481":1,"482":3,"483":2,"486":1,"488":1,"489":2,"490":5,"491":2,"492":2,"493":3,"494":1,"495":1,"497":3,"502":2,"506":1,"507":1,"508":1,"511":1,"517":1,"518":1,"530":1,"536":1,"537":1,"540":1,"543":2,"545":4,"546":2,"549":1,"550":1,"555":1,"557":1,"560":1,"562":1,"563":1,"564":2,"565":1,"566":1,"567":1,"573":1,"582":2,"583":2,"584":2,"585":1,"586":1,"590":1,"591":1,"592":2,"593":1,"599":2,"604":2,"606":1,"609":1,"617":2,"618":1,"626":5,"633":2,"635":1,"638":2,"639":1,"640":5,"642":2,"649":1,"657":8,"658":1,"659":1,"660":2,"673":1,"674":4,"676":1,"681":2,"682":1,"683":2,"684":1,"689":2,"691":3,"692":2,"698":1,"700":2,"708":2,"713":1,"716":1,"725":1,"732":1,"733":2,"735":1,"736":1,"741":4,"742":1,"744":1,"749":2,"751":1,"757":4,"758":1,"759":1,"765":1,"766":2,"789":3,"790":4,"791":1,"794":1,"799":1,"800":1,"811":1,"812":1,"819":1,"825":1,"827":2,"829":1,"831":1,"832":2,"833":2,"836":1,"837":2,"839":2,"840":3,"845":1,"846":1,"856":1,"873":2,"876":1,"877":2,"880":1,"882":1,"884":1,"897":2,"905":2,"909":1,"914":1,"916":1,"932":1,"933":1,"934":1,"939":2,"940":1,"946":2,"948":2,"953":1,"963":1,"964":4,"971":1,"973":1,"976":2,"979":1,"980":1,"988":3,"990":2,"999":1,"1003":1,"1004":5,"1005":2,"1014":1,"1018":3,"1019":6,"1021":1,"1029":1,"1033":1,"1040":1,"1043":1,"1045":1,"1051":1,"1058":2,"1059":4,"1060":3,"1066":1,"1068":1,"1074":1,"1075":1,"1082":1,"1091":3,"1092":2,"1093":1,"1095":1,"1100":1,"1108":1,"1124":1,"1126":1,"1132":1,"1133":1,"1134":1,"1135":1,"1140":1,"1150":1,"1161":4,"1163":1,"1186":1,"1190":5,"1192":1,"1193":2,"1212":25,"1214":2,"1216":3,"1217":1,"1219":2,"1220":1,"1221":2,"1225":1,"1229":21,"1231":1,"1234":3,"1235":1,"1237":45,"1241":1,"1247":19,"1248":1,"1257":2,"1258":1,"1259":23,"1263":4,"1265":2,"1270":30,"1271":53,"1275":1,"1282":1,"1286":82,"1289":3,"1293":7,"1296":1,"1300":165,"1301":24,"1302":1,"1303":1,"1305":2,"1308":1,"1309":26,"1310":10,"1311":126,"1312":26,"1313":2,"1314":1,"1315":1,"1320":1,"1322":4,"1323":97,"1324":93,"1325":3,"1329":1,"1333":1,"1338":2,"1339":36,"1342":2,"1343":1,"1344":3,"1345":1,"1347":4,"1348":1,"1349":1,"1350":41,"1352":2,"1353":5,"1355":2,"1358":3,"1359":306,"1364":2,"1365":7,"1369":19,"1370":2,"1371":2,"1375":1,"1377":2,"1379":1,"1380":38,"1382":3,"1384":2,"1385":2,"1388":2,"1389":1,"1394":1,"1395":192,"1396":169,"1397":1,"1399":2,"1402":70,"1403":1,"1406":1,"1407":1,"1409":1,"1412":1,"1413":1,"1414":1,"1415":87,"1416":13,"1417":64,"1424":1,"1427":7,"1429":1,"1431":7,"1436":223,"1437":1,"1438":7,"1441":3,"1442":1,"1443":1,"1445":2,"1446":2,"1447":1,"1449":2,"1450":1,"1451":1,"1452":2,"1453":10,"1455":30,"1459":20,"1460":2,"1461":3,"1462":2,"1463":4,"1467":21,"1474":3,"1475":4,"1476":1,"1477":1,"1481":1,"1482":1,"1486":3,"1487":1,"1488":2,"1489":9,"1491":2,"1492":17,"1496":34,"1497":1,"1499":2,"1500":1,"1509":3,"1515":1,"1516":1,"1518":1,"1521":1,"1524":3,"1525":1,"1526":10,"1530":2,"1531":5,"1532":3,"1533":1,"1534":3,"1535":5,"1537":1,"1538":2,"1539":1,"1542":1,"1547":1,"1548":1,"1552":2,"1553":1,"1554":1,"1555":1,"1560":1,"1571":3,"1572":1,"1574":1,"1577":11,"1581":1,"1582":1,"1586":2,"1589":1,"1591":11,"1595":1,"1596":3,"1597":2,"1598":1,"1600":4,"1602":1,"1626":2,"1627":1,"1630":2,"1631":3,"1640":1,"1641":2,"1646":1,"1651":2,"1653":3,"1656":3,"1658":1,"1661":2,"1662":1,"1663":2,"1666":3,"1669":1,"1671":3,"1673":2,"1676":1,"1681":2,"1683":1,"1685":4,"1686":5,"1688":1,"1700":1,"1702":1,"1703":1,"1705":1,"1708":1,"1720":1,"1724":3,"1725":1,"1726":1,"1727":2,"1755":1,"1764":1,"1770":1,"1777":1,"1781":1,"1782":1,"1783":2,"1784":1,"1789":1,"1790":5,"1793":2,"1794":1,"1796":1,"1800":1,"1802":1,"1805":5,"1806":1,"1810":2,"1811":1,"1815":4,"1817":2,"1819":2,"1822":1,"1826":1,"1827":1,"1831":3,"1842":3,"1847":2,"1849":3,"1850":1,"1853":4,"1856":2,"1858":1,"1864":1,"1865":1,"1866":1,"1868":2,"1871":1,"1873":1,"1875":1,"1876":1,"1877":1,"1878":2,"1881":1,"1884":1,"1888":1,"1893":1,"1896":1,"1898":1,"1899":2,"1900":1,"1902":1,"1904":2,"1908":2,"1909":3,"1911":1,"1915":3,"1916":2,"1920":1,"1923":2,"1924":1,"1927":2,"1938":1,"1944":3,"1948":1,"1950":1,"1952":2,"1955":3,"1956":1,"1957":1,"1958":1,"1959":2,"1962":1,"1964":1,"1972":1,"1973":1,"1975":10,"1976":6,"1977":1,"1978":2,"1979":4,"1982":2,"1990":1,"1996":1,"2001":1,"2002":2,"2004":1,"2011":2,"2014":3,"2015":1,"2016":2,"2017":2,"2018":1,"2021":2,"2025":1,"2027":2,"2029":1,"2031":1,"2035":1,"2037":3,"2039":2,"2041":1,"2042":1,"2044":8,"2045":2,"2046":3,"2047":1,"2048":1,"2052":1,"2056":1,"2059":2,"2064":1,"2072":1,"2077":1,"2080":2,"2085":8,"2088":3,"2089":2,"2090":1,"2098":1,"2099":3,"2100":1,"2101":2,"2102":1,"2110":2,"2113":2,"2114":2,"2118":1,"2123":2,"2125":1,"2126":1,"2131":1,"2135":3,"2136":2,"2137":2,"2138":1,"2139":3,"2144":2,"2148":3,"2151":1,"2156":1,"2158":1,"2160":2,"2162":2,"2168":2,"2171":4,"2173":1,"2178":1,"2180":1,"2181":2,"2182":3,"2186":2,"2198":6,"2199":2,"2201":2,"2202":2,"2204":2,"2205":2,"2208":1,"2215":1,"2221":2,"2222":4,"2223":1,"2227":3,"2229":1,"2232":2,"2233":1,"2234":6,"2236":2,"2241":2,"2245":1}}],["codeanalysistreatwarningsaserrors",{"2":{"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"981":1,"2087":1},"3":{"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"981":1,"2087":1}}],["codeanalysis",{"2":{"0":1,"135":1,"137":1,"138":1,"1229":1,"1270":1,"1324":1,"1415":1,"2102":1},"3":{"0":1,"135":2,"137":1,"138":1,"1229":1,"1270":2,"1300":3,"1324":4,"1396":1,"1415":1,"1436":1,"2102":1}}],["coached",{"3":{"2222":1}}],["coalesced",{"3":{"1286":1}}],["coalesces",{"3":{"1100":1,"1286":2,"1359":1,"1436":1}}],["coalesce",{"3":{"518":1,"1300":2,"1323":1,"1324":1,"1380":1,"1396":2,"1415":1}}],["coalescing",{"3":{"0":1,"519":1,"1229":1,"1237":1,"1286":1,"1311":1,"1323":2,"1324":3,"1350":1,"1415":2,"1436":1}}],["coarseness",{"3":{"2003":1}}],["coarselocationonly",{"3":{"1417":2}}],["coarse",{"2":{"426":1},"3":{"177":1,"178":2,"185":1,"283":1,"426":1,"572":1,"574":1,"872":1,"1177":1,"1300":1,"1350":2,"1396":1,"1402":1,"1415":1,"1417":7,"1431":1,"1436":3,"1537":1,"1591":1,"1596":1,"1597":1,"1876":1,"2002":3}}],["coarser",{"3":{"60":1,"784":1,"1311":1,"1417":1}}],["copilot",{"3":{"2215":1,"2221":1,"2222":2,"2226":1,"2227":1}}],["copied",{"3":{"0":1,"24":2,"27":1,"110":1,"216":1,"359":1,"450":1,"638":1,"640":1,"658":2,"698":1,"715":1,"750":1,"791":1,"836":1,"955":1,"972":3,"974":1,"1018":2,"1067":1,"1107":1,"1167":1,"1212":1,"1255":1,"1259":4,"1271":1,"1278":1,"1286":4,"1300":1,"1309":1,"1311":1,"1322":1,"1324":4,"1339":5,"1350":4,"1359":5,"1369":1,"1395":3,"1398":1,"1402":2,"1415":3,"1416":2,"1417":4,"1427":1,"1430":1,"1435":2,"1436":2,"1438":1,"1445":1,"1455":1,"1467":1,"1473":1,"1528":1,"1579":1,"1591":1,"1630":1,"1656":1,"1781":1,"1813":1,"1817":1,"1828":1,"1898":1,"1992":1,"2012":1,"2038":1,"2044":2,"2090":1,"2131":1,"2134":1,"2144":1,"2150":1}}],["copies",{"3":{"0":7,"94":2,"95":1,"145":1,"219":1,"325":1,"418":1,"497":1,"511":3,"600":1,"624":1,"633":1,"707":1,"708":1,"721":1,"729":1,"831":2,"832":2,"872":2,"880":1,"882":1,"884":1,"935":1,"954":1,"962":1,"1024":1,"1025":1,"1030":1,"1053":1,"1091":1,"1142":1,"1152":1,"1168":1,"1219":1,"1229":1,"1233":1,"1237":3,"1247":2,"1259":4,"1270":3,"1271":2,"1286":11,"1300":4,"1301":2,"1310":1,"1311":4,"1312":2,"1322":1,"1323":11,"1324":9,"1336":1,"1339":8,"1359":16,"1380":2,"1384":1,"1395":26,"1396":15,"1402":1,"1415":13,"1417":7,"1425":1,"1426":1,"1427":4,"1436":6,"1438":2,"1443":1,"1445":6,"1459":1,"1460":1,"1471":1,"1475":3,"1483":1,"1496":8,"1686":1,"1810":1,"1894":1,"1923":1,"1948":1,"2020":1,"2043":3,"2072":2,"2126":1,"2150":1,"2178":1,"2234":1}}],["cope",{"3":{"1359":3}}],["copes",{"3":{"1324":1,"1359":1}}],["copytext",{"3":{"1417":3}}],["copywifiasync",{"3":{"1395":1}}],["copyonly",{"2":{"635":1,"1729":1},"3":{"635":1,"1729":1}}],["copying",{"3":{"132":1,"698":1,"758":1,"906":1,"1170":1,"1229":2,"1251":1,"1286":3,"1300":4,"1311":1,"1323":2,"1324":1,"1339":2,"1350":2,"1359":5,"1395":1,"1396":1,"1399":1,"1402":1,"1413":1,"1415":2,"1435":1,"1436":3,"1445":2,"1476":1,"1577":1,"1781":1,"2033":1,"2192":1,"2205":1}}],["copy",{"1":{"1828":1,"1829":1,"1830":1,"1831":1,"1832":1,"1833":1,"1834":1},"2":{"563":1,"759":1,"868":1},"3":{"0":10,"122":1,"123":1,"215":1,"219":1,"220":1,"246":1,"290":1,"296":1,"318":1,"320":1,"325":1,"359":1,"365":1,"374":1,"390":1,"451":1,"460":1,"511":1,"556":1,"563":1,"566":1,"598":1,"601":2,"610":1,"611":1,"632":3,"633":2,"634":1,"640":1,"650":1,"674":2,"690":1,"707":1,"724":2,"725":1,"733":4,"735":2,"750":1,"757":1,"759":1,"782":1,"784":1,"790":1,"792":1,"813":1,"821":1,"826":1,"827":3,"829":2,"832":2,"834":1,"847":1,"854":1,"855":1,"856":1,"868":3,"869":1,"872":2,"926":1,"973":2,"1019":1,"1058":1,"1065":1,"1066":1,"1068":2,"1091":2,"1107":1,"1122":1,"1124":1,"1126":1,"1167":2,"1184":2,"1185":1,"1212":2,"1229":4,"1231":1,"1236":1,"1237":3,"1239":1,"1247":4,"1254":1,"1259":3,"1267":1,"1270":3,"1271":7,"1272":1,"1274":1,"1275":1,"1277":1,"1286":19,"1300":20,"1301":11,"1302":1,"1309":4,"1311":15,"1323":13,"1324":25,"1329":1,"1337":1,"1338":1,"1339":11,"1350":5,"1355":1,"1356":1,"1359":30,"1373":1,"1380":3,"1384":1,"1393":1,"1395":29,"1396":35,"1402":4,"1415":16,"1416":2,"1417":24,"1426":2,"1427":2,"1431":1,"1436":19,"1438":3,"1442":1,"1443":2,"1445":3,"1453":2,"1455":4,"1459":2,"1460":4,"1461":1,"1467":2,"1468":2,"1473":2,"1474":5,"1475":8,"1476":1,"1478":2,"1482":2,"1484":1,"1488":1,"1489":1,"1492":3,"1496":4,"1501":1,"1526":1,"1555":1,"1627":1,"1631":1,"1641":1,"1649":2,"1650":1,"1653":1,"1654":1,"1658":1,"1664":1,"1672":1,"1673":1,"1684":1,"1685":1,"1703":1,"1705":1,"1708":1,"1710":3,"1724":1,"1728":1,"1730":1,"1731":1,"1751":1,"1761":1,"1764":1,"1765":1,"1769":1,"1779":1,"1782":1,"1810":1,"1813":1,"1818":1,"1821":1,"1827":1,"1828":2,"1833":4,"1834":3,"1839":1,"1851":1,"1877":1,"1893":2,"1896":1,"1915":1,"1920":1,"1922":1,"1923":1,"1924":1,"1968":4,"1972":2,"1975":1,"1983":1,"2001":2,"2007":1,"2011":1,"2015":1,"2025":1,"2028":1,"2035":3,"2057":1,"2061":1,"2072":1,"2074":1,"2082":1,"2099":1,"2103":1,"2113":1,"2118":1,"2119":2,"2121":1,"2136":1,"2137":1,"2141":1,"2145":1,"2149":2,"2150":1,"2152":1,"2154":1,"2155":1,"2158":1,"2178":2,"2208":1,"2234":2,"2238":1}}],["co",{"3":{"0":1,"60":1,"265":1,"266":1,"1004":1,"1116":1,"1237":1,"1247":2,"1270":2,"1271":1,"1286":1,"1309":3,"1311":1,"1323":1,"1324":4,"1331":1,"1339":2,"1342":1,"1344":1,"1350":2,"1352":1,"1357":1,"1359":3,"1370":1,"1374":1,"1377":1,"1378":2,"1380":1,"1394":1,"1395":7,"1396":4,"1402":2,"1405":1,"1415":1,"1416":4,"1431":1,"1436":12,"1441":1,"1577":3,"1591":1,"1648":1,"1651":1,"1653":1,"1655":1,"1856":1,"1865":1,"1867":1,"2044":1,"2085":1}}],["cooperation",{"3":{"1286":1}}],["cooperative",{"3":{"1270":1}}],["cooperating",{"3":{"352":1,"1323":1,"1334":1,"1761":1,"1815":1,"1849":1,"1935":1,"1978":1}}],["cooperate",{"3":{"1238":1,"1259":1,"1350":1,"1415":1}}],["cooldown",{"3":{"344":1,"1639":2}}],["coordinating",{"3":{"1286":1,"2045":1}}],["coordination",{"3":{"0":1,"170":1,"810":1,"811":1,"1286":2,"1309":1,"1324":2,"1339":1,"1359":1,"1849":1}}],["coordinate",{"3":{"1259":1,"1359":1,"1417":4,"1436":2,"2053":1,"2109":1}}],["coordinates",{"3":{"255":1,"439":1,"809":1,"810":1,"883":1,"1286":5,"1323":2,"1324":1,"1340":1,"1350":1,"1417":8,"1459":1,"1467":1,"1472":1,"1923":1,"2126":2,"2127":1}}],["coordinated",{"3":{"30":1,"1011":1,"1272":1,"1300":1,"1301":1,"1309":1,"1323":1,"1324":2,"1436":2,"1526":1,"1569":1,"1572":1,"1576":1,"1577":1,"1894":1,"2240":1,"2242":1}}],["coordinator",{"3":{"0":3,"808":1,"809":3,"810":7,"811":1,"812":1,"813":1,"814":1,"815":2,"1147":1,"1212":1,"1278":2,"1280":1,"1286":2,"1346":1,"1396":11,"1438":1,"1849":1,"2170":2}}],["cookiename",{"3":{"1436":1}}],["cookieoptions",{"3":{"1300":1}}],["cookietokenreadertests",{"3":{"1199":1,"1207":2,"1300":1}}],["cookietokenreader",{"2":{"1298":1},"3":{"1199":9,"1203":1,"1207":2,"1298":5,"1300":9,"1311":3,"1324":5,"1968":1}}],["cookierequestcultureprovider",{"3":{"265":1,"1417":1}}],["cookiesessionrefreshmiddlewaretests",{"3":{"1199":1,"1207":3,"1300":2}}],["cookiesessionrefreshmiddlewareextensions",{"2":{"1298":1},"3":{"1199":2,"1203":1,"1207":1,"1298":1,"1300":2}}],["cookiesessionrefreshmiddleware",{"2":{"1298":1,"1968":1},"3":{"1199":3,"1203":1,"1207":3,"1208":1,"1298":4,"1300":8,"1582":1,"1968":1}}],["cookiesessionrefreshertests",{"3":{"1199":1,"1207":5,"1300":1}}],["cookiesessionrefresher",{"2":{"207":1,"1298":1,"1968":1},"3":{"207":1,"1183":1,"1184":1,"1185":1,"1199":4,"1203":1,"1207":5,"1287":1,"1298":17,"1300":26,"1311":3,"1582":1,"1968":1}}],["cookies",{"0":{"1298":1,"1968":1},"3":{"0":4,"207":3,"208":1,"209":1,"349":1,"351":1,"355":1,"507":1,"558":1,"664":1,"667":1,"670":1,"1108":1,"1109":1,"1183":1,"1184":5,"1185":1,"1212":2,"1298":2,"1300":31,"1311":1,"1324":35,"1336":2,"1339":4,"1436":2,"1438":3,"1442":1,"1467":1,"1496":1,"1511":1,"1526":1,"1577":1,"1660":1,"1968":9,"1969":2,"1970":1,"1972":2,"1974":1,"2234":2}}],["cookie",{"1":{"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"1966":1,"1967":1,"1968":1,"1969":1,"1970":1,"1971":1,"1972":1,"2083":1,"2084":1,"2085":1,"2086":1,"2087":1,"2088":1},"3":{"0":11,"204":1,"207":6,"208":3,"209":5,"221":1,"265":11,"266":2,"269":2,"272":1,"273":9,"274":1,"277":2,"287":1,"350":4,"351":1,"352":1,"388":1,"458":2,"462":1,"506":2,"507":11,"508":4,"509":1,"510":1,"514":3,"555":2,"556":2,"557":1,"558":1,"560":1,"616":1,"618":1,"664":3,"665":3,"668":1,"774":1,"827":1,"1107":1,"1108":2,"1111":1,"1182":1,"1183":4,"1184":9,"1185":3,"1186":1,"1187":4,"1188":2,"1189":1,"1192":1,"1202":1,"1203":1,"1212":3,"1287":2,"1298":6,"1300":66,"1311":19,"1323":1,"1324":114,"1336":1,"1339":3,"1395":3,"1406":1,"1415":4,"1416":4,"1417":3,"1433":1,"1434":1,"1436":25,"1438":6,"1442":2,"1467":3,"1487":1,"1488":1,"1496":4,"1513":2,"1525":1,"1526":2,"1531":1,"1534":4,"1535":1,"1577":3,"1582":1,"1586":1,"1590":1,"1591":3,"1639":1,"1641":11,"1643":1,"1660":1,"1667":3,"1668":1,"1669":3,"1759":1,"1761":2,"1779":1,"1898":1,"1922":1,"1965":1,"1966":2,"1967":2,"1968":8,"1969":2,"1971":5,"1972":9,"1975":6,"1977":1,"1979":1,"2082":1,"2083":3,"2084":3,"2085":10,"2086":1,"2087":4,"2088":5,"2210":1,"2212":1,"2234":4}}],["cosmetic",{"3":{"202":1,"311":1,"926":1,"1123":1,"1241":1,"1247":1,"1271":1,"1286":3,"1310":1,"1323":1,"1324":1,"1327":1,"1339":1,"1347":1,"1359":3,"1384":1,"1391":1,"1395":2,"1396":2,"1415":1,"1417":1,"1436":2,"1496":1,"1879":1,"1926":1,"2122":1}}],["cosmosindexedentity",{"3":{"1199":3,"1207":1}}],["cosmosintidvaluegeneratortests",{"3":{"1199":1,"1207":2,"1286":2}}],["cosmosintidvaluegenerator",{"2":{"166":1,"1664":1,"1856":1},"3":{"166":2,"1199":3,"1203":1,"1207":2,"1282":2,"1286":14,"1664":1,"1856":1}}],["cosmosdatasourceengine",{"2":{"1280":1,"1286":1},"3":{"1175":2,"1177":1,"1198":1,"1199":2,"1203":1,"1207":2,"1280":5,"1282":2,"1286":18,"1300":1}}],["cosmosdatabasenameof",{"3":{"1286":1}}],["cosmosdatabasename",{"3":{"166":1,"1286":12,"1339":1,"1441":1}}],["cosmosdb",{"2":{"170":1,"889":1,"1174":1,"1856":1,"1857":1,"1860":1},"3":{"166":1,"170":1,"889":1,"1034":1,"1174":1,"1213":1,"1286":12,"1323":1,"1436":1,"1856":1,"1857":1,"1860":1}}],["cosmosdbcontexttests",{"3":{"1199":1,"1207":2,"1286":2,"1438":2}}],["cosmosdbcontext",{"2":{"26":1,"47":1,"200":1,"343":1,"698":1,"701":1,"720":1,"1510":1,"1857":1,"1861":1},"3":{"26":1,"47":1,"166":3,"171":1,"200":2,"343":2,"345":1,"698":1,"701":1,"715":2,"720":1,"988":1,"1042":1,"1198":1,"1199":3,"1203":1,"1207":2,"1212":2,"1272":1,"1273":2,"1274":1,"1286":14,"1339":1,"1510":1,"1664":1,"1849":1,"1857":1,"1861":1}}],["cosmosconnectionstring",{"3":{"166":1,"1286":4,"1441":1}}],["cosmosconfigurationportabilitytests",{"2":{"164":1},"3":{"164":1,"1198":1,"1199":2,"1207":7,"1286":4,"1496":3}}],["cosmos",{"3":{"0":12,"10":3,"26":1,"45":1,"164":1,"166":7,"168":4,"169":1,"170":1,"171":2,"195":1,"200":2,"290":1,"296":1,"343":2,"345":1,"715":1,"717":1,"721":1,"889":1,"890":1,"891":2,"905":1,"931":1,"988":2,"990":2,"1004":1,"1033":2,"1036":1,"1042":1,"1045":1,"1050":1,"1083":2,"1085":1,"1133":1,"1134":1,"1135":1,"1144":1,"1175":3,"1176":1,"1177":2,"1179":1,"1212":9,"1213":2,"1237":1,"1239":1,"1247":6,"1252":1,"1259":4,"1273":1,"1274":1,"1276":1,"1279":3,"1280":2,"1281":5,"1282":4,"1286":97,"1300":1,"1310":1,"1311":4,"1317":1,"1320":1,"1321":1,"1323":4,"1326":1,"1339":2,"1359":1,"1361":1,"1369":2,"1380":1,"1396":2,"1415":1,"1436":5,"1438":3,"1441":4,"1489":1,"1496":1,"1500":3,"1510":1,"1526":2,"1577":1,"1585":2,"1752":1,"1763":1,"1774":1,"1815":1,"1840":1,"1849":1,"1853":1,"1854":4,"1855":1,"1856":3,"1857":1,"1858":5,"1859":3,"1860":6,"1861":8,"1862":1,"1864":1,"1872":1,"1876":2,"1990":1,"2065":1,"2066":1,"2215":1,"2221":2,"2222":1,"2232":1,"2234":1}}],["costcenter",{"3":{"1577":1,"1591":1}}],["costly",{"3":{"1436":1}}],["costtagconventiontests",{"3":{"1199":1,"1207":2,"1436":4,"1467":2,"1525":1,"1526":2,"1535":1,"1591":1}}],["costing",{"3":{"765":1,"856":1,"1300":1,"1323":1,"1324":1,"1396":1,"1438":1}}],["costs",{"0":{"1333":1},"3":{"0":23,"1":1,"24":2,"26":1,"41":1,"92":1,"95":1,"108":1,"111":1,"135":2,"136":1,"160":1,"195":1,"196":1,"233":1,"234":1,"237":2,"255":1,"267":2,"350":1,"360":2,"400":1,"401":1,"402":1,"435":2,"442":1,"448":1,"459":3,"461":1,"483":1,"529":1,"549":1,"551":1,"565":1,"619":1,"628":1,"635":1,"640":1,"659":1,"681":1,"683":1,"690":1,"691":1,"715":1,"726":2,"733":1,"735":1,"747":1,"751":2,"759":1,"767":2,"768":1,"775":1,"791":1,"792":1,"797":2,"827":2,"830":1,"853":1,"856":1,"872":1,"904":1,"906":2,"923":1,"931":1,"932":2,"946":1,"965":2,"982":1,"998":1,"1005":1,"1019":2,"1020":1,"1027":1,"1051":1,"1099":1,"1109":1,"1117":1,"1143":1,"1153":1,"1228":2,"1229":2,"1246":1,"1247":6,"1259":5,"1270":4,"1271":1,"1278":1,"1286":13,"1294":1,"1300":13,"1301":1,"1307":2,"1309":1,"1310":3,"1311":5,"1323":8,"1324":11,"1332":1,"1339":11,"1359":21,"1369":1,"1380":3,"1385":1,"1395":13,"1396":12,"1402":3,"1415":6,"1417":4,"1422":1,"1435":2,"1436":5,"1438":1,"1440":1,"1443":1,"1455":7,"1457":2,"1465":1,"1467":4,"1474":1,"1490":1,"1492":1,"1526":1,"1534":1,"1553":1,"1631":1,"1651":1,"1652":1,"1663":1,"1672":1,"1717":1,"1721":1,"1724":1,"1750":1,"1765":1,"1773":1,"1790":1,"1792":1,"1811":1,"1839":1,"1842":1,"1843":1,"1849":1,"1851":1,"1858":1,"1876":1,"1902":1,"1923":2,"1942":1,"1971":1,"1972":2,"1977":1,"1978":1,"1979":1,"1984":1,"1989":1,"1991":1,"2001":1,"2008":1,"2014":1,"2045":1,"2068":1,"2089":1,"2133":1,"2152":1,"2158":1,"2160":1,"2168":1,"2171":1,"2173":1,"2176":1,"2183":1,"2195":1,"2196":1,"2198":1,"2205":1,"2234":1,"2241":1}}],["cost",{"0":{"1228":1,"1425":1,"1457":1,"1568":1,"1677":1,"1679":1,"2048":1},"1":{"763":1,"764":1,"765":1,"766":1,"767":1,"768":1,"769":1,"770":1,"1676":1,"1677":1,"1678":1,"1679":1,"1680":1},"2":{"1467":1},"3":{"0":14,"1":1,"20":1,"26":1,"48":1,"58":1,"68":1,"86":1,"102":2,"111":1,"125":2,"137":2,"138":1,"139":1,"140":1,"150":1,"151":1,"160":1,"167":1,"168":2,"178":1,"200":1,"216":1,"235":1,"237":1,"245":2,"246":1,"267":2,"274":1,"279":1,"283":1,"284":1,"291":1,"305":1,"312":1,"331":1,"351":1,"353":1,"360":1,"372":1,"395":6,"396":2,"397":5,"398":2,"399":4,"400":1,"402":1,"403":2,"404":3,"405":1,"406":2,"407":1,"408":1,"409":2,"425":1,"426":1,"460":1,"469":1,"471":1,"472":1,"481":1,"511":1,"535":1,"541":1,"549":1,"551":1,"556":1,"566":1,"573":1,"590":1,"592":3,"593":2,"595":4,"601":1,"608":1,"609":1,"614":1,"619":1,"620":1,"625":3,"626":1,"627":2,"628":1,"635":1,"641":1,"650":1,"656":1,"658":1,"676":1,"684":1,"690":1,"691":1,"707":1,"708":2,"716":2,"725":1,"727":1,"732":1,"733":3,"742":1,"756":1,"763":1,"764":3,"765":2,"766":38,"768":11,"769":4,"798":1,"799":2,"800":1,"801":2,"811":1,"812":2,"820":2,"827":2,"828":1,"829":1,"834":1,"848":1,"855":1,"861":1,"862":1,"863":1,"865":2,"871":1,"882":1,"883":1,"891":1,"899":1,"907":1,"915":2,"917":1,"918":1,"926":1,"931":1,"933":1,"940":1,"948":2,"968":1,"971":1,"973":1,"974":1,"979":1,"981":1,"982":1,"989":1,"998":1,"1008":1,"1011":2,"1012":1,"1013":1,"1017":1,"1018":2,"1019":2,"1020":1,"1025":1,"1028":1,"1036":1,"1043":1,"1044":1,"1051":1,"1061":1,"1068":1,"1069":1,"1074":1,"1075":2,"1076":1,"1077":2,"1085":1,"1093":1,"1101":2,"1116":1,"1117":1,"1119":2,"1126":2,"1147":1,"1152":2,"1153":1,"1154":2,"1162":1,"1170":1,"1178":1,"1192":1,"1212":3,"1216":1,"1232":2,"1237":3,"1247":8,"1254":1,"1255":1,"1256":1,"1259":19,"1263":1,"1270":9,"1275":1,"1283":1,"1286":20,"1300":11,"1301":3,"1309":3,"1310":3,"1311":11,"1312":1,"1323":14,"1324":16,"1327":1,"1329":1,"1333":3,"1334":1,"1337":2,"1338":1,"1339":32,"1342":1,"1349":1,"1350":9,"1359":20,"1366":1,"1367":1,"1369":1,"1376":1,"1380":5,"1392":1,"1395":11,"1396":14,"1401":1,"1402":9,"1413":1,"1415":6,"1417":2,"1418":1,"1421":2,"1422":1,"1425":2,"1427":8,"1430":1,"1435":1,"1436":9,"1438":5,"1442":1,"1443":5,"1446":1,"1447":4,"1450":1,"1451":1,"1452":1,"1454":1,"1455":12,"1456":1,"1457":17,"1459":3,"1460":5,"1461":5,"1463":1,"1465":5,"1467":31,"1469":2,"1475":3,"1476":7,"1478":3,"1483":1,"1486":2,"1489":2,"1490":1,"1492":2,"1496":7,"1499":1,"1523":1,"1525":3,"1526":15,"1530":1,"1531":2,"1532":2,"1534":4,"1535":2,"1550":2,"1553":2,"1554":1,"1568":5,"1571":1,"1572":1,"1574":1,"1575":8,"1577":17,"1578":1,"1581":1,"1583":1,"1584":2,"1585":9,"1590":1,"1591":8,"1597":2,"1599":4,"1600":3,"1602":1,"1638":1,"1641":2,"1660":1,"1668":2,"1670":2,"1674":2,"1676":5,"1677":2,"1678":1,"1679":5,"1680":1,"1697":1,"1708":1,"1796":1,"1799":2,"1804":1,"1806":1,"1809":1,"1821":1,"1823":1,"1826":1,"1839":2,"1864":1,"1867":1,"1876":1,"1885":3,"1896":1,"1909":2,"1910":1,"1923":1,"1925":1,"1932":1,"1933":1,"1940":2,"1958":2,"1984":1,"1987":1,"1989":1,"2002":3,"2007":1,"2012":1,"2015":1,"2025":1,"2033":1,"2036":1,"2038":1,"2047":1,"2048":1,"2049":2,"2050":1,"2055":1,"2056":1,"2057":1,"2058":1,"2060":2,"2061":1,"2066":1,"2069":2,"2077":1,"2088":1,"2089":1,"2114":1,"2116":2,"2128":1,"2129":1,"2137":1,"2146":1,"2150":2,"2154":1,"2156":1,"2157":1,"2158":2,"2159":1,"2161":4,"2162":1,"2164":2,"2167":1,"2172":2,"2173":1,"2174":1,"2176":1,"2179":1,"2181":1,"2191":1,"2194":1,"2205":1,"2222":1,"2234":2,"2242":1}}],["col",{"3":{"1175":5,"1526":1}}],["colocating",{"3":{"1350":1}}],["colon",{"3":{"564":1,"1324":2,"1339":2,"1359":1,"1384":1,"1395":1,"1442":1}}],["coloured",{"3":{"1436":1}}],["colour",{"3":{"0":1,"756":1,"905":1,"910":1,"1324":1,"1396":1,"1436":1}}],["colored",{"3":{"2077":1}}],["colors",{"3":{"1324":6,"1385":1,"1395":2,"1416":1,"1480":2,"1577":1,"1582":1,"2077":3,"2081":1}}],["color",{"3":{"0":1,"273":2,"1311":1,"1324":16,"1385":3,"1395":11,"1436":1,"1489":1,"1558":2,"1591":1,"1600":1,"1644":1,"1669":1,"1671":1,"2077":3,"2081":1,"2083":1,"2085":1,"2088":1,"2109":1}}],["colder",{"3":{"1417":3}}],["cold",{"0":{"1334":1},"1":{"232":1,"233":1,"234":1,"235":1,"236":1,"237":1,"238":1,"239":1},"3":{"0":2,"25":1,"31":1,"33":1,"100":1,"232":1,"234":1,"236":4,"239":1,"246":1,"390":1,"413":1,"556":2,"559":1,"717":1,"733":1,"735":1,"762":1,"867":1,"869":1,"875":1,"881":1,"1059":1,"1067":1,"1069":1,"1270":1,"1286":1,"1287":1,"1288":1,"1298":2,"1300":2,"1301":1,"1304":1,"1309":1,"1324":6,"1339":8,"1359":1,"1379":1,"1380":3,"1393":1,"1395":2,"1396":3,"1415":3,"1416":8,"1417":11,"1430":1,"1436":2,"1438":1,"1441":1,"1443":3,"1445":1,"1447":1,"1449":2,"1450":1,"1456":2,"1467":4,"1490":3,"1534":1,"1577":1,"1668":1,"1669":1,"1707":1,"1800":1,"1934":1,"2008":3,"2123":1,"2160":1,"2201":1,"2205":2}}],["colleague",{"3":{"1116":1,"1342":1,"1350":1,"1357":1,"1359":1}}],["collectively",{"3":{"1461":1}}],["collecting",{"3":{"1247":1,"1253":1,"1271":1,"1324":1,"1339":2,"1359":1,"1435":1,"1436":8,"1455":1}}],["collectionincludecache",{"3":{"1286":1}}],["collectiondefinition",{"3":{"640":1,"1339":2,"1436":4,"1438":1,"1488":1}}],["collectionresulttests",{"3":{"1199":1,"1207":2}}],["collectionresult",{"2":{"1217":1,"1227":1,"1228":1,"1805":1},"3":{"549":1,"1199":34,"1203":1,"1207":1,"1217":1,"1227":1,"1228":1,"1229":10,"1311":4,"1324":3,"1371":1,"1380":3,"1382":1,"1395":2,"1805":1,"1988":1}}],["collections",{"2":{"1229":1},"3":{"0":1,"545":1,"551":1,"926":1,"1050":1,"1115":1,"1117":1,"1212":1,"1229":2,"1237":4,"1243":2,"1247":19,"1259":2,"1265":2,"1270":2,"1279":1,"1286":10,"1300":4,"1309":1,"1310":5,"1311":2,"1312":1,"1323":1,"1324":5,"1339":2,"1343":5,"1346":1,"1350":20,"1352":1,"1353":1,"1359":36,"1395":15,"1396":3,"1402":4,"1415":4,"1436":3,"1526":1,"1639":2,"1863":1,"1865":1,"2235":1}}],["collection",{"2":{"1953":1},"3":{"0":3,"10":1,"11":1,"81":1,"122":1,"265":1,"317":1,"318":4,"319":1,"320":1,"321":1,"324":1,"544":1,"545":1,"548":1,"551":1,"572":1,"583":2,"598":1,"651":1,"676":1,"741":1,"743":2,"921":1,"926":2,"1067":2,"1107":1,"1108":1,"1116":1,"1117":1,"1168":2,"1212":1,"1217":1,"1221":2,"1229":6,"1230":1,"1231":4,"1234":1,"1237":14,"1240":1,"1243":2,"1244":2,"1247":6,"1259":1,"1260":1,"1262":1,"1265":4,"1270":9,"1271":1,"1276":2,"1278":1,"1282":1,"1286":26,"1297":1,"1300":10,"1309":9,"1310":17,"1311":25,"1312":1,"1316":1,"1320":2,"1323":13,"1324":13,"1328":3,"1337":1,"1339":22,"1342":2,"1343":2,"1350":61,"1353":1,"1355":1,"1359":128,"1362":1,"1369":10,"1380":10,"1395":18,"1396":30,"1402":15,"1415":13,"1417":6,"1421":1,"1428":1,"1429":2,"1430":3,"1433":1,"1436":74,"1437":1,"1438":6,"1449":1,"1453":2,"1455":2,"1465":1,"1467":1,"1486":1,"1488":6,"1491":1,"1496":1,"1577":2,"1591":1,"1611":1,"1629":1,"1631":2,"1632":1,"1635":1,"1638":2,"1651":3,"1662":2,"1666":1,"1677":1,"1683":1,"1684":1,"1686":4,"1701":3,"1719":1,"1727":2,"1728":2,"1729":1,"1730":3,"1747":1,"1748":2,"1749":1,"1755":1,"1761":1,"1764":2,"1765":2,"1776":1,"1805":1,"1810":2,"1815":1,"1824":1,"1826":2,"1830":2,"1856":1,"1865":1,"1883":2,"1898":2,"1922":1,"1953":2,"1975":1,"1988":3,"1995":4,"1996":3,"1998":2,"2056":1,"2057":3,"2092":1,"2093":1,"2234":1,"2235":1}}],["collectasync",{"3":{"861":1,"1433":1,"1436":3}}],["collects",{"3":{"760":1,"861":1,"1091":1,"1161":1,"1229":1,"1247":1,"1259":3,"1286":4,"1300":2,"1301":1,"1310":2,"1311":1,"1323":1,"1324":1,"1339":1,"1350":1,"1359":5,"1369":1,"1395":6,"1396":2,"1402":1,"1415":1,"1427":1,"1431":1,"1435":1,"1436":9,"1438":1,"1454":1,"1455":1,"1456":1,"1488":2,"1492":2,"1639":2,"1844":1,"1865":1,"2044":1,"2059":1,"2170":1,"2178":1}}],["collect",{"3":{"539":1,"1270":1,"1310":1,"1339":2,"1359":1,"1397":1,"1415":1,"1431":1,"1436":4,"1455":1,"1456":2,"1489":1,"1490":1,"1770":1,"1868":1,"1975":1,"2151":1}}],["collected",{"3":{"352":1,"538":1,"725":1,"792":1,"972":1,"1218":1,"1270":1,"1271":1,"1286":3,"1300":2,"1315":1,"1323":3,"1324":1,"1339":3,"1350":2,"1359":2,"1395":1,"1396":1,"1436":8,"1456":1,"1567":1,"1769":1,"1804":1,"1978":1,"2143":1}}],["collector",{"3":{"0":1,"861":3,"1436":6,"1488":1,"1497":1,"1671":1}}],["colliding",{"3":{"312":1,"610":1,"1286":1,"1311":2,"1312":1,"1323":1,"1324":2,"1339":1,"1350":1,"1359":4,"1395":2,"1402":1,"1436":4}}],["collided",{"3":{"1401":1}}],["collides",{"3":{"295":1,"1339":1,"1396":2,"1436":2,"1441":1,"1496":1}}],["collide",{"3":{"99":1,"246":1,"996":1,"998":1,"1286":1,"1297":1,"1300":1,"1309":1,"1311":1,"1323":4,"1324":1,"1331":1,"1339":1,"1350":3,"1352":1,"1359":4,"1362":1,"1364":1,"1369":3,"1380":2,"1395":2,"1396":4,"1402":3,"1415":1,"1429":1,"1436":4,"1438":2,"1474":1,"1478":1,"1639":1,"1684":1,"1731":1,"1920":1,"1977":1,"2099":1}}],["collisions",{"3":{"1267":1,"1270":1,"1300":1,"1301":2,"1359":1,"1395":1,"1488":1,"1639":2}}],["collision",{"3":{"0":1,"157":1,"340":1,"342":1,"733":1,"891":1,"905":1,"999":1,"1191":1,"1270":2,"1283":1,"1286":5,"1300":2,"1323":1,"1350":1,"1359":10,"1369":1,"1395":2,"1396":1,"1402":1,"1416":1,"1417":1,"1436":16,"1475":1,"1478":1,"1496":2,"1869":1,"1876":1,"1908":1,"2066":1}}],["collateral",{"3":{"2025":1}}],["collation",{"3":{"1350":1,"1359":5}}],["collaborate",{"3":{"1359":1,"1396":1,"1415":1,"1436":1}}],["collaborates",{"3":{"1355":1}}],["collaborations",{"3":{"1378":1}}],["collaboration",{"3":{"1309":1,"1436":1,"2221":1}}],["collaborating",{"3":{"1286":1,"1523":1,"1588":1}}],["collaborators",{"0":{"1385":1},"3":{"1057":1,"1270":1,"1286":2,"1300":1,"1311":1,"1323":4,"1324":1,"1339":1,"1359":7,"1381":1,"1385":1,"1395":5,"1396":1,"1402":1,"1436":12,"1438":2,"1489":1,"2198":1,"2204":1}}],["collaborator",{"3":{"0":1,"534":1,"539":1,"1025":1,"1060":1,"1286":2,"1293":1,"1323":1,"1359":1,"1395":4,"1396":4,"1415":1,"1436":16,"2198":1,"2204":1,"2205":1}}],["collapsible",{"3":{"649":1,"1324":2,"1395":1}}],["collapsing",{"3":{"0":1,"63":1,"283":1,"386":1,"675":1,"783":1,"964":1,"1124":1,"1220":1,"1229":1,"1247":1,"1259":1,"1270":1,"1279":2,"1286":4,"1300":7,"1311":3,"1323":1,"1324":7,"1337":1,"1339":3,"1359":7,"1380":1,"1395":3,"1396":1,"1402":2,"1416":1,"1417":3,"1436":3,"1534":1,"1670":1,"1805":1,"2025":1,"2169":1}}],["collapsed",{"3":{"60":1,"791":1,"882":1,"1204":1,"1247":1,"1286":5,"1295":1,"1298":1,"1300":1,"1311":1,"1324":1,"1350":1,"1359":1,"1395":3,"1396":1,"1436":1,"1496":1,"1534":1,"2027":1}}],["collapse",{"3":{"0":2,"111":1,"137":1,"164":1,"166":3,"170":1,"179":1,"333":1,"507":1,"680":1,"693":1,"881":1,"945":1,"996":2,"1247":1,"1259":1,"1270":2,"1279":3,"1285":1,"1286":16,"1292":1,"1300":9,"1301":1,"1322":1,"1323":1,"1324":9,"1339":4,"1359":2,"1395":5,"1396":6,"1415":1,"1417":7,"1429":1,"1436":8,"1438":1,"1443":1,"1447":2,"1467":2,"1489":1,"1490":1,"1531":1,"1534":2,"1652":2,"1664":2,"1712":1,"1790":1,"1849":3,"1852":1,"1853":1,"1981":1,"2025":1,"2054":1}}],["collapses",{"3":{"0":2,"47":1,"459":1,"490":1,"513":1,"592":1,"690":1,"790":1,"827":1,"854":1,"905":1,"996":1,"1116":1,"1212":1,"1225":1,"1237":1,"1247":1,"1259":1,"1270":3,"1271":1,"1281":1,"1285":1,"1286":11,"1294":2,"1300":3,"1309":2,"1311":5,"1322":1,"1323":3,"1324":4,"1326":1,"1338":1,"1339":5,"1350":3,"1359":7,"1395":6,"1396":11,"1415":4,"1417":2,"1436":4,"1438":1,"1441":1,"1455":1,"1534":1,"1631":1,"1641":2,"1652":1,"1662":1,"1667":1,"1684":1,"1765":1,"1790":1,"1847":1,"1849":3,"1858":1,"1870":1,"1909":1,"1922":1,"2030":1,"2041":1,"2048":1,"2049":1,"2168":1}}],["columnprefix",{"3":{"1286":3}}],["columnname",{"3":{"1286":2}}],["columnwidth",{"3":{"1199":5,"1203":1,"1207":2,"1259":2,"1277":2,"1286":6,"1496":1}}],["column",{"0":{"2146":1},"3":{"0":11,"26":2,"275":1,"311":1,"330":1,"333":2,"337":2,"341":2,"343":1,"358":1,"359":4,"360":3,"361":4,"363":2,"364":1,"365":1,"499":1,"501":1,"549":3,"564":1,"566":2,"655":1,"656":1,"657":7,"659":1,"690":1,"691":1,"696":1,"697":1,"698":2,"703":4,"717":1,"721":1,"741":2,"743":1,"744":1,"766":1,"809":2,"811":1,"812":1,"881":2,"889":5,"890":1,"892":1,"903":1,"904":1,"905":1,"906":1,"907":1,"910":2,"964":4,"965":1,"966":1,"1018":3,"1020":2,"1033":1,"1035":1,"1050":5,"1051":2,"1052":3,"1053":1,"1058":1,"1085":1,"1135":1,"1175":4,"1228":1,"1229":3,"1234":1,"1237":8,"1239":1,"1241":2,"1242":4,"1243":1,"1244":3,"1247":25,"1259":3,"1260":1,"1270":1,"1271":3,"1276":3,"1277":1,"1278":1,"1280":2,"1281":4,"1282":1,"1283":1,"1284":2,"1286":121,"1290":2,"1291":1,"1297":1,"1300":8,"1309":8,"1310":1,"1311":13,"1318":1,"1323":7,"1324":10,"1342":3,"1344":1,"1350":25,"1354":1,"1359":66,"1362":7,"1369":34,"1375":1,"1380":16,"1383":2,"1392":1,"1395":28,"1396":27,"1398":1,"1402":2,"1405":1,"1408":1,"1414":1,"1415":29,"1436":15,"1438":4,"1445":1,"1455":2,"1460":1,"1489":1,"1492":1,"1496":3,"1526":1,"1577":2,"1591":3,"1600":1,"1630":2,"1631":1,"1639":4,"1640":3,"1641":1,"1663":1,"1672":1,"1675":1,"1683":1,"1686":1,"1713":1,"1723":1,"1727":4,"1749":1,"1750":2,"1767":1,"1769":1,"1810":1,"1815":2,"1849":1,"1851":1,"1856":1,"1858":1,"1862":1,"1875":1,"1876":2,"1877":1,"1903":1,"1933":1,"1934":2,"1940":1,"1986":1,"1988":1,"1991":1,"1992":1,"2066":2,"2072":2,"2083":2,"2085":1,"2086":1,"2087":2,"2088":1,"2142":2,"2143":3,"2144":3,"2145":3,"2146":4,"2147":4,"2148":6,"2188":1,"2196":1,"2234":2}}],["columns",{"1":{"2142":1,"2143":1,"2144":1,"2145":1,"2146":1,"2147":1,"2148":1},"3":{"0":6,"26":3,"41":1,"166":1,"313":1,"328":1,"330":1,"341":1,"348":1,"350":3,"352":1,"358":3,"359":1,"360":1,"361":1,"549":1,"564":3,"657":2,"658":1,"660":1,"715":1,"717":1,"741":3,"742":2,"799":1,"802":1,"853":2,"891":1,"905":1,"907":1,"950":1,"1024":2,"1026":3,"1030":1,"1043":1,"1060":1,"1061":1,"1074":1,"1075":1,"1116":1,"1133":1,"1175":1,"1212":2,"1234":1,"1237":3,"1239":1,"1241":2,"1242":1,"1243":1,"1244":1,"1245":1,"1247":7,"1251":1,"1253":2,"1259":6,"1269":1,"1270":2,"1277":1,"1280":1,"1281":2,"1286":26,"1300":4,"1309":5,"1311":7,"1312":2,"1323":3,"1324":2,"1350":7,"1359":8,"1362":1,"1363":1,"1369":14,"1380":1,"1395":7,"1396":16,"1401":1,"1402":1,"1406":1,"1407":1,"1412":1,"1415":20,"1436":2,"1438":2,"1467":1,"1496":1,"1524":1,"1526":1,"1531":1,"1591":1,"1607":1,"1641":1,"1656":1,"1664":2,"1666":1,"1671":1,"1675":1,"1685":2,"1686":1,"1741":1,"1810":1,"1815":1,"1866":1,"1903":1,"1977":1,"1978":2,"1988":1,"2011":1,"2074":1,"2082":1,"2087":1,"2141":1,"2142":2,"2143":1,"2145":1,"2147":4,"2148":2,"2155":1,"2188":1,"2194":1,"2200":1,"2210":2,"2234":1}}],["courtesy",{"3":{"1389":1,"1396":1}}],["courses",{"3":{"2227":1}}],["course",{"3":{"1323":1}}],["cousin",{"3":{"1230":1,"1270":1,"1359":1}}],["coupon",{"2":{"2089":1,"2092":1,"2095":1},"3":{"0":1,"1028":1,"2089":1,"2092":1,"2095":1}}],["couple",{"3":{"92":1,"1211":1,"1300":2,"1312":1,"1323":1,"1359":2,"1396":1,"1436":2,"1689":1,"1781":1,"1868":1,"1903":1,"1965":1,"2017":1}}],["couples",{"3":{"0":1,"116":1,"185":1,"544":1,"1300":1,"1436":1,"1540":1,"1546":1,"1863":1,"1894":1,"1960":1,"1992":1}}],["coupled",{"3":{"0":2,"265":1,"329":1,"545":1,"547":1,"585":1,"1069":1,"1077":1,"1271":1,"1289":1,"1300":1,"1324":1,"1339":1,"1359":2,"1436":7,"1489":1,"1815":1,"1863":1,"1932":1,"1961":1,"1991":1,"2028":1,"2029":1,"2081":1,"2234":1}}],["couplings",{"3":{"1789":1}}],["coupling",{"3":{"0":1,"33":1,"52":1,"102":1,"135":1,"159":1,"226":1,"255":1,"458":1,"547":1,"549":1,"628":1,"827":1,"924":1,"1011":1,"1012":1,"1202":1,"1203":1,"1229":1,"1236":1,"1237":2,"1259":3,"1271":1,"1300":1,"1309":1,"1311":3,"1313":1,"1323":2,"1336":1,"1339":2,"1350":4,"1359":3,"1391":1,"1396":3,"1415":1,"1416":4,"1431":1,"1436":17,"1442":1,"1455":1,"1496":1,"1526":1,"1534":1,"1542":2,"1545":1,"1571":3,"1591":1,"1638":1,"1661":1,"1727":1,"1792":1,"1800":1,"1816":1,"1829":1,"1847":1,"1848":1,"1854":1,"1864":1,"1951":1,"1952":2}}],["could",{"3":{"0":4,"19":1,"20":1,"21":2,"22":1,"72":1,"109":1,"111":1,"120":1,"135":1,"142":1,"170":1,"188":1,"213":1,"228":1,"235":1,"245":1,"246":1,"248":1,"254":1,"256":1,"265":2,"266":1,"318":1,"335":1,"391":1,"419":1,"448":1,"451":1,"490":1,"528":1,"529":1,"536":3,"537":1,"538":1,"539":1,"558":1,"612":1,"627":2,"664":1,"674":1,"696":1,"725":2,"749":1,"760":1,"800":1,"801":2,"826":2,"827":1,"833":1,"838":1,"853":1,"889":1,"897":1,"898":1,"905":3,"907":1,"915":1,"922":1,"926":1,"939":1,"945":2,"947":1,"956":1,"971":1,"979":1,"988":1,"1017":1,"1018":1,"1019":2,"1026":1,"1059":1,"1067":1,"1100":1,"1116":1,"1128":1,"1174":1,"1219":1,"1222":1,"1223":1,"1229":3,"1233":1,"1237":5,"1242":1,"1247":3,"1252":1,"1253":1,"1259":3,"1265":1,"1270":2,"1271":1,"1274":1,"1286":15,"1292":1,"1299":1,"1300":21,"1301":3,"1304":1,"1309":5,"1311":13,"1312":2,"1323":16,"1324":20,"1332":1,"1339":8,"1350":2,"1357":1,"1359":31,"1369":2,"1380":3,"1384":1,"1390":1,"1395":12,"1396":31,"1402":6,"1409":1,"1415":18,"1417":5,"1436":26,"1438":2,"1440":1,"1446":1,"1447":1,"1454":3,"1455":1,"1467":4,"1473":1,"1474":1,"1475":1,"1488":2,"1492":1,"1495":1,"1496":1,"1546":1,"1596":1,"1638":2,"1639":3,"1641":1,"1685":1,"1689":1,"1699":1,"1727":1,"1755":1,"1765":1,"1780":1,"1806":1,"1807":2,"1822":1,"1824":1,"1881":1,"1898":1,"1918":1,"1924":1,"1970":1,"1985":1,"1996":1,"2013":1,"2020":1,"2031":1,"2063":1,"2067":1,"2075":1,"2087":1,"2091":1,"2126":1,"2131":2,"2133":1,"2163":1,"2165":1,"2166":1,"2168":1,"2169":1,"2170":1,"2171":1,"2202":1}}],["county",{"3":{"2222":2}}],["countfollowedbyplural",{"3":{"1436":1}}],["countoccurrences",{"3":{"1436":1}}],["countinvalid",{"3":{"1402":1}}],["countingmessagebus",{"3":{"1199":2,"1207":3,"1436":1,"1487":1}}],["countingqueryableexecutor",{"3":{"1199":3,"1207":1}}],["countingsweep",{"3":{"1199":2,"1207":1,"1323":1}}],["countingallocator",{"3":{"1199":2,"1207":1}}],["countingfailurehandler",{"3":{"1199":2,"1207":1}}],["countingcheck",{"3":{"1199":2,"1207":1}}],["counting",{"3":{"0":3,"27":1,"125":1,"280":1,"284":1,"476":1,"477":1,"593":1,"631":1,"782":1,"799":2,"803":2,"804":1,"805":1,"1004":1,"1005":1,"1018":1,"1240":1,"1245":1,"1247":3,"1256":1,"1259":1,"1270":3,"1278":1,"1286":2,"1300":2,"1307":1,"1309":2,"1311":2,"1323":1,"1324":3,"1339":1,"1350":3,"1354":1,"1355":1,"1359":5,"1395":1,"1396":6,"1402":1,"1415":1,"1436":6,"1438":2,"1447":1,"2029":1,"2044":1,"2049":1,"2108":1,"2170":1}}],["countcategoryitems",{"3":{"1359":4}}],["countries",{"3":{"1324":1}}],["countrymaxlength",{"3":{"1237":1,"1271":1}}],["country",{"3":{"1237":1,"1271":4,"1286":1,"1324":1,"1427":1,"1764":1}}],["countryrules",{"3":{"1199":3,"1203":1,"1207":1,"1271":5,"1829":1}}],["countunpaginatedasync",{"2":{"1243":1},"3":{"1243":1,"1247":2}}],["countable",{"3":{"898":1,"1396":3,"1399":1}}],["countasync",{"2":{"546":1},"3":{"0":1,"545":1,"546":1,"549":1,"550":1,"552":1,"1247":1,"1286":16,"1309":3,"1396":5,"1402":2,"1415":1,"1436":3,"1815":5}}],["countdown",{"3":{"556":1,"1350":1,"1393":2,"1395":9,"1416":1,"1438":1,"1737":1}}],["countbyasync",{"3":{"543":1,"545":1,"551":1,"1286":10,"1359":2,"1396":3,"1815":1}}],["countpendingasync",{"2":{"24":1,"409":1,"2159":1,"2193":1},"3":{"24":1,"397":1,"409":1,"1259":3,"1286":4,"1323":1,"2159":1,"2193":1}}],["counterexample",{"3":{"1436":1}}],["countermeasure",{"3":{"1300":1}}],["counterweights",{"3":{"1118":1}}],["counterweight",{"3":{"530":1,"974":1,"1359":1,"1396":1,"1467":1,"2183":1}}],["counterparts",{"3":{"982":1,"1229":1,"1301":1,"1312":1,"1320":1,"1339":1,"1350":1,"1359":2,"1392":1,"1402":1,"1415":1,"1496":1}}],["counterpart",{"3":{"0":2,"143":1,"230":1,"265":1,"313":1,"362":2,"514":1,"543":1,"550":1,"591":1,"595":1,"707":1,"748":1,"749":1,"766":1,"842":1,"950":1,"980":1,"1212":1,"1229":2,"1237":2,"1259":3,"1269":1,"1270":3,"1271":1,"1275":1,"1286":13,"1300":3,"1306":1,"1309":5,"1311":4,"1312":2,"1323":3,"1324":9,"1339":3,"1342":1,"1350":7,"1352":1,"1359":14,"1380":1,"1395":8,"1396":5,"1402":5,"1415":2,"1416":1,"1417":6,"1431":1,"1433":1,"1436":24,"1444":1,"1455":1,"1488":2,"1489":1,"1554":1,"1910":1,"2079":1}}],["counters",{"0":{"2179":1},"3":{"0":3,"124":1,"173":1,"177":1,"178":1,"245":1,"248":1,"255":2,"279":1,"283":2,"285":1,"286":2,"287":1,"379":1,"400":3,"404":1,"408":1,"609":1,"698":1,"700":1,"707":1,"732":1,"734":1,"737":1,"855":1,"899":1,"1016":1,"1018":2,"1020":1,"1089":1,"1090":1,"1093":1,"1268":2,"1270":6,"1286":3,"1289":1,"1292":1,"1294":1,"1300":5,"1301":5,"1311":3,"1317":1,"1323":1,"1350":1,"1359":3,"1395":1,"1396":1,"1418":1,"1425":2,"1427":3,"1435":1,"1438":4,"1442":3,"1443":2,"1467":1,"1577":1,"1641":3,"1665":1,"1666":1,"1667":1,"1765":1,"1767":1,"1915":1,"1920":1,"1923":1,"1935":1,"1941":1,"2002":2,"2007":3,"2156":1,"2158":5,"2159":1,"2162":3,"2182":1,"2193":1}}],["counter",{"3":{"0":8,"121":1,"126":1,"157":1,"241":1,"242":1,"245":5,"247":1,"248":2,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":2,"257":1,"279":4,"283":1,"284":1,"285":1,"395":2,"397":2,"398":1,"399":2,"406":1,"407":1,"518":1,"608":1,"707":2,"731":1,"732":2,"733":2,"734":1,"735":1,"736":2,"818":1,"819":2,"823":1,"827":1,"849":1,"854":2,"896":1,"897":2,"898":1,"899":1,"996":1,"997":1,"1074":1,"1090":1,"1092":1,"1093":1,"1100":1,"1101":1,"1102":1,"1126":1,"1150":1,"1212":2,"1247":11,"1256":3,"1259":3,"1267":1,"1270":6,"1282":1,"1286":4,"1292":2,"1294":3,"1295":1,"1300":18,"1301":17,"1309":1,"1311":26,"1317":1,"1323":20,"1324":24,"1337":1,"1339":4,"1344":1,"1350":5,"1359":6,"1395":18,"1396":3,"1402":5,"1415":4,"1416":1,"1427":2,"1429":1,"1436":4,"1438":4,"1453":1,"1488":1,"1490":1,"1496":1,"1577":1,"1641":5,"1765":1,"1767":1,"1843":2,"1849":1,"1903":1,"1904":1,"1915":2,"1916":1,"1922":1,"1947":1,"2000":1,"2001":2,"2002":6,"2003":3,"2007":2,"2011":1,"2056":1,"2144":1,"2158":7,"2161":1,"2182":1,"2198":1}}],["counted",{"3":{"0":5,"121":1,"126":1,"130":1,"135":1,"138":2,"139":1,"175":1,"255":1,"279":1,"383":1,"408":1,"423":1,"474":1,"484":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"556":1,"575":1,"577":1,"655":1,"672":3,"798":1,"799":2,"801":1,"803":1,"805":1,"832":1,"916":1,"996":1,"1091":2,"1093":1,"1247":1,"1256":1,"1259":1,"1263":2,"1267":1,"1270":2,"1286":1,"1300":3,"1311":7,"1323":1,"1324":4,"1339":1,"1350":1,"1357":1,"1359":13,"1396":7,"1400":1,"1402":4,"1416":1,"1422":1,"1436":2,"1438":1,"1442":1,"1487":1,"1489":1,"1496":3,"1585":1,"1639":1,"1669":1,"1764":1,"1817":1,"1909":1,"1911":1,"1919":1,"1922":2,"1923":1,"1949":2,"1983":1,"2001":2,"2176":1,"2181":1,"2198":1}}],["countsthedatacarryingcommands",{"3":{"1436":3}}],["countstheliteralcatalog",{"3":{"1436":2}}],["countsbyquestion",{"3":{"1402":1}}],["countsbypolloption",{"3":{"1402":1}}],["countscoredsince",{"3":{"1395":5}}],["countsessionspercategoryitem",{"3":{"1359":4}}],["counts",{"0":{"137":1,"140":1,"1205":1,"1206":1,"1734":1},"3":{"0":6,"24":1,"73":2,"74":1,"125":1,"130":3,"135":4,"136":1,"137":2,"140":1,"157":1,"184":1,"228":1,"235":1,"255":2,"280":1,"281":1,"319":1,"386":1,"390":1,"395":1,"397":1,"399":1,"400":2,"474":2,"475":1,"477":2,"480":1,"483":1,"486":1,"487":2,"488":1,"489":1,"490":1,"491":3,"492":1,"493":1,"494":1,"495":3,"524":1,"526":1,"530":1,"538":2,"545":1,"577":1,"585":1,"597":1,"604":2,"607":2,"609":1,"616":3,"621":1,"629":1,"634":1,"649":1,"677":1,"706":1,"733":1,"741":1,"780":3,"819":1,"827":1,"832":1,"836":1,"883":1,"888":1,"889":1,"896":1,"972":1,"974":1,"978":1,"983":1,"986":1,"1004":3,"1006":1,"1091":1,"1093":1,"1124":1,"1150":1,"1152":1,"1168":1,"1186":1,"1212":1,"1237":1,"1247":2,"1256":1,"1259":5,"1270":1,"1271":2,"1273":1,"1275":1,"1286":9,"1289":2,"1300":4,"1301":3,"1304":1,"1309":3,"1311":7,"1323":6,"1324":15,"1333":1,"1334":1,"1339":8,"1347":4,"1349":1,"1350":18,"1355":1,"1359":34,"1366":1,"1379":1,"1380":6,"1388":2,"1390":3,"1391":1,"1395":12,"1396":17,"1399":1,"1401":1,"1402":22,"1415":5,"1416":2,"1417":2,"1423":1,"1427":1,"1430":1,"1435":1,"1436":37,"1438":2,"1453":1,"1455":3,"1467":2,"1474":1,"1476":1,"1484":1,"1485":1,"1487":3,"1490":1,"1492":1,"1494":1,"1495":1,"1496":18,"1498":1,"1535":1,"1573":1,"1577":1,"1582":2,"1591":1,"1599":1,"1632":3,"1637":1,"1639":1,"1641":3,"1654":1,"1659":1,"1665":2,"1668":1,"1669":1,"1673":2,"1674":1,"1675":1,"1815":1,"1882":1,"1904":1,"1917":1,"1922":1,"1923":1,"1937":1,"1949":1,"1982":1,"1998":1,"2001":3,"2003":2,"2025":2,"2035":1,"2050":1,"2066":1,"2161":1,"2172":1,"2174":1,"2176":1,"2177":1,"2181":1,"2194":1,"2198":1,"2234":2}}],["count",{"0":{"1128":1,"1797":1,"2052":1},"2":{"20":1,"80":1,"82":1,"121":1,"126":1,"397":1,"819":1,"821":1,"1256":1,"1268":2,"1310":1,"1354":1,"1442":1,"1665":1,"1843":1,"2033":1,"2158":2,"2161":1,"2193":2},"3":{"0":25,"3":1,"20":1,"24":1,"71":1,"80":1,"82":1,"100":1,"121":1,"125":1,"126":1,"130":2,"135":1,"136":2,"137":2,"138":1,"140":1,"141":1,"142":3,"146":1,"147":1,"152":1,"160":1,"178":1,"195":1,"203":1,"225":1,"254":1,"255":1,"258":1,"260":2,"310":1,"311":1,"335":1,"379":1,"390":2,"392":2,"393":1,"395":2,"397":3,"408":1,"409":1,"418":1,"423":1,"426":3,"452":2,"453":1,"468":1,"475":1,"476":1,"492":2,"493":2,"494":2,"495":1,"522":2,"523":2,"524":4,"526":1,"527":1,"528":1,"549":2,"550":2,"554":3,"572":2,"589":1,"592":1,"607":1,"608":1,"609":6,"610":1,"611":2,"616":3,"624":1,"631":3,"634":1,"635":3,"640":1,"655":1,"672":1,"696":1,"699":1,"700":2,"759":1,"768":1,"775":1,"797":3,"799":4,"800":1,"801":1,"803":1,"804":1,"805":2,"819":5,"820":1,"821":1,"860":1,"862":1,"883":2,"884":2,"896":1,"897":1,"899":1,"905":2,"906":1,"914":1,"937":1,"946":2,"948":1,"952":2,"959":1,"972":1,"975":1,"986":2,"991":1,"996":2,"999":1,"1004":2,"1005":1,"1018":1,"1020":2,"1042":1,"1048":1,"1049":1,"1054":1,"1055":1,"1069":1,"1073":1,"1078":1,"1100":2,"1116":1,"1118":1,"1122":1,"1124":4,"1125":3,"1126":1,"1136":1,"1178":1,"1192":2,"1196":1,"1202":1,"1205":1,"1211":1,"1212":2,"1221":1,"1228":3,"1229":11,"1237":4,"1240":2,"1243":4,"1247":13,"1253":1,"1256":3,"1259":10,"1264":1,"1268":2,"1270":10,"1271":1,"1275":1,"1278":1,"1286":30,"1300":13,"1301":3,"1303":1,"1306":3,"1309":30,"1310":3,"1311":11,"1315":1,"1317":1,"1318":1,"1323":15,"1324":63,"1330":1,"1337":2,"1339":9,"1347":1,"1350":13,"1354":1,"1355":1,"1357":1,"1358":1,"1359":62,"1369":1,"1371":1,"1375":1,"1380":4,"1389":1,"1395":55,"1396":83,"1399":4,"1401":4,"1402":78,"1406":1,"1415":6,"1416":2,"1422":1,"1425":1,"1427":4,"1431":2,"1435":1,"1436":98,"1438":6,"1442":2,"1443":1,"1446":1,"1453":8,"1454":2,"1455":2,"1456":1,"1458":2,"1461":1,"1467":2,"1473":1,"1474":2,"1475":2,"1476":2,"1478":1,"1486":1,"1487":1,"1488":1,"1489":4,"1496":20,"1500":1,"1503":1,"1515":1,"1521":1,"1524":1,"1525":1,"1526":5,"1531":3,"1534":2,"1535":1,"1547":1,"1577":6,"1582":1,"1591":2,"1595":1,"1596":2,"1597":1,"1600":1,"1607":1,"1611":1,"1612":1,"1617":1,"1632":8,"1641":3,"1646":1,"1649":1,"1665":3,"1673":1,"1675":2,"1692":1,"1709":1,"1729":1,"1732":1,"1741":1,"1750":3,"1764":1,"1765":1,"1767":2,"1773":2,"1780":1,"1796":1,"1818":1,"1841":1,"1843":1,"1874":1,"1879":1,"1881":1,"1885":1,"1902":3,"1904":1,"1905":1,"1912":1,"1919":2,"1937":1,"1940":1,"1942":1,"1946":1,"1950":1,"1982":1,"1986":1,"1988":1,"1999":1,"2000":1,"2001":5,"2003":1,"2019":1,"2028":2,"2033":3,"2043":1,"2044":3,"2046":1,"2047":2,"2048":1,"2052":1,"2056":1,"2061":1,"2072":1,"2084":1,"2108":1,"2114":1,"2115":1,"2118":1,"2128":1,"2158":8,"2159":1,"2160":2,"2161":1,"2176":1,"2179":1,"2182":2,"2184":1,"2193":4,"2195":1,"2234":3}}],["comfort",{"3":{"1800":1}}],["comfortable",{"3":{"1153":1,"1324":2,"1559":1,"1591":1,"1596":1,"1597":1}}],["comfortably",{"3":{"907":1,"996":1,"1270":1,"1275":1,"1323":1,"1324":1,"1396":1,"1402":1,"1436":1,"1467":1}}],["coming",{"3":{"0":1,"24":1,"1040":1,"1259":1,"1286":2,"1307":1,"1395":1,"1417":1,"1786":1,"2059":1}}],["com",{"2":{"1481":1},"3":{"0":2,"528":1,"640":1,"855":2,"868":2,"1292":2,"1300":7,"1324":3,"1339":1,"1347":1,"1351":1,"1358":1,"1359":6,"1365":1,"1369":2,"1395":6,"1415":1,"1417":2,"1436":7,"1441":1,"1445":2,"1465":1,"1472":1,"1481":2,"1631":2,"1787":1,"1793":1,"1802":1,"1807":1,"1812":1,"1817":1,"1827":1,"1834":1,"1846":1,"1853":1,"1862":1,"1868":1,"1877":1,"1886":1,"1892":1,"1899":1,"1905":1,"1912":1,"1924":1,"1930":1,"1941":1,"1950":1,"1959":1,"1965":1,"1972":1,"1979":1,"1985":1,"1992":1,"1998":1,"2003":1,"2015":1,"2029":1,"2039":1,"2050":1,"2061":1,"2071":1,"2082":1,"2088":1,"2100":1,"2110":1,"2117":1,"2125":1,"2130":1,"2135":1,"2141":1,"2148":1,"2155":1,"2162":1,"2171":1,"2182":1,"2195":1,"2205":1,"2213":1,"2222":2,"2223":1,"2242":2,"2246":1}}],["combobox",{"3":{"0":1,"618":2,"620":2,"651":1,"1436":4,"1488":3,"1591":1,"1741":1,"2058":1}}],["combinable",{"3":{"1286":1}}],["combinations",{"3":{"932":1,"946":1,"1286":1,"1324":1,"1641":1}}],["combination",{"3":{"0":1,"92":1,"148":1,"556":1,"684":1,"872":1,"931":1,"1091":1,"1092":1,"1141":1,"1212":1,"1237":1,"1247":2,"1286":1,"1300":1,"1311":1,"1324":1,"1343":1,"1350":1,"1359":3,"1395":1,"1396":3,"1415":1,"1417":1,"1436":2,"1438":1,"1491":1,"1529":1,"1631":1,"1842":1,"1844":1,"1947":1,"2127":1,"2178":1}}],["combinatorial",{"3":{"146":1}}],["combinators",{"3":{"0":1,"109":1,"110":1,"111":1,"547":2,"549":2,"550":1,"1219":1,"1220":1,"1229":8,"1239":1,"1247":10,"1805":2,"1807":1,"1815":1,"1817":1}}],["combinator",{"3":{"0":1,"107":1,"109":2,"545":1,"1217":1,"1220":2,"1229":5,"1247":8,"1662":1,"1805":1,"1807":1,"1815":1}}],["combiningacute",{"3":{"1324":1}}],["combining",{"3":{"1220":1,"1229":1,"1231":2,"1237":1,"1247":1,"1286":2,"1324":2,"1336":1,"1339":2,"1343":1,"1350":2,"1359":1,"1415":1,"1417":1,"1436":2,"1814":1}}],["combines",{"3":{"964":1,"1270":2,"1278":1,"1300":1,"1309":2,"1339":1,"1350":5,"1359":12,"1395":1,"1396":1,"1398":1,"1402":4,"1415":3,"1417":2,"1436":1,"1488":1}}],["combine",{"2":{"43":1,"110":1,"1169":1,"1170":1,"1220":1,"1222":1,"1224":1,"1343":1,"1701":1,"1807":1},"3":{"0":3,"39":3,"43":2,"109":1,"110":1,"545":1,"549":1,"657":1,"1168":6,"1169":2,"1170":2,"1220":2,"1222":1,"1224":1,"1229":5,"1234":1,"1237":8,"1239":1,"1244":1,"1247":7,"1271":1,"1309":4,"1311":2,"1312":2,"1324":2,"1342":1,"1343":3,"1344":1,"1350":35,"1359":4,"1395":8,"1396":10,"1402":5,"1405":1,"1415":4,"1427":1,"1436":5,"1526":1,"1651":1,"1662":2,"1685":3,"1701":1,"1805":1,"1806":1,"1807":2,"1810":3,"1815":1,"1817":1,"1927":1,"1962":1}}],["combined",{"3":{"0":1,"43":1,"57":1,"59":4,"60":1,"62":1,"63":1,"166":1,"195":1,"350":1,"483":1,"487":1,"488":1,"489":1,"490":1,"491":2,"492":2,"493":2,"494":2,"495":2,"547":1,"562":1,"582":1,"584":1,"743":1,"790":1,"889":1,"890":1,"1239":1,"1247":1,"1270":3,"1286":4,"1289":1,"1324":2,"1339":1,"1344":1,"1350":6,"1359":8,"1395":3,"1396":2,"1402":7,"1415":1,"1436":4,"1438":1,"1441":1,"1446":1,"1455":1,"1456":1,"1467":1,"1486":2,"1487":1,"1496":2,"1526":1,"1619":1,"1651":1,"1673":1,"1765":1,"1775":1,"1817":1,"1859":1,"1884":1,"2027":1}}],["computation",{"3":{"681":1,"1026":1,"1027":1,"1350":1,"1359":3,"1395":3,"1396":2,"1436":1,"1500":1,"1804":1}}],["computing",{"3":{"629":1,"1019":1,"1259":1,"1267":1,"1286":2,"1300":2,"1324":1,"1339":2,"1350":1,"1359":3,"1369":1,"1402":4,"1417":1,"1436":2}}],["computer",{"3":{"1913":1,"2224":1}}],["computerequestbodyhashasync",{"3":{"1311":2}}],["computeretrybackoffseconds",{"2":{"19":2,"1042":2,"1259":1,"1275":1,"2190":1},"3":{"19":2,"1042":2,"1259":3,"1275":1,"1286":2,"2190":1}}],["computeancestors",{"3":{"1436":1}}],["computeoptions",{"3":{"1395":3}}],["computelivewindowutc",{"3":{"1359":1}}],["computelegacyhash",{"2":{"945":1},"3":{"0":1,"310":1,"945":1,"946":1}}],["computecategorydistribution",{"3":{"1359":1}}],["computevirtualwindow",{"3":{"1324":1}}],["computewaittime",{"2":{"1042":1,"1254":1},"3":{"1042":1,"1254":1,"1259":3,"1275":1,"1286":7,"1323":1}}],["compute",{"3":{"707":1,"973":1,"1267":1,"1279":1,"1311":2,"1315":1,"1323":2,"1324":1,"1350":2,"1352":1,"1355":1,"1359":5,"1395":1,"1396":4,"1402":2,"1417":3,"1436":2,"1446":1,"1467":4,"1568":1,"1677":2,"1678":2,"1879":1,"1881":1,"1920":2,"2157":1,"2182":1}}],["computespeakerlocality",{"3":{"1359":1}}],["computespeakeroverlap",{"3":{"1359":2}}],["computes",{"3":{"583":1,"626":1,"1091":1,"1212":1,"1229":1,"1242":1,"1247":3,"1259":1,"1263":1,"1267":1,"1270":4,"1286":9,"1300":3,"1310":1,"1311":1,"1323":2,"1324":7,"1339":5,"1350":1,"1352":1,"1359":13,"1373":1,"1380":1,"1395":3,"1396":5,"1401":2,"1402":7,"1417":4,"1431":1,"1436":12,"1496":1,"1920":1,"2151":2,"2169":1}}],["computepbkdf2hash",{"3":{"310":1,"946":1,"1300":1}}],["computedhash",{"3":{"1300":1}}],["computed",{"0":{"1798":1},"2":{"1902":1},"3":{"0":3,"19":1,"157":1,"159":1,"219":1,"335":1,"633":1,"650":1,"905":1,"926":1,"990":1,"1018":1,"1026":2,"1091":1,"1191":1,"1192":1,"1193":1,"1200":1,"1227":1,"1229":2,"1237":2,"1247":5,"1254":1,"1259":3,"1267":1,"1269":1,"1270":8,"1286":12,"1300":9,"1309":1,"1310":4,"1311":4,"1323":3,"1324":14,"1331":1,"1332":1,"1339":4,"1342":3,"1350":12,"1352":1,"1354":2,"1359":23,"1362":1,"1369":8,"1383":2,"1391":1,"1395":22,"1396":18,"1402":11,"1409":1,"1412":1,"1415":11,"1417":1,"1426":1,"1427":1,"1436":7,"1438":1,"1467":1,"1480":1,"1496":1,"1577":1,"1585":1,"1592":1,"1630":6,"1631":1,"1639":2,"1640":3,"1641":3,"1686":3,"1749":2,"1764":5,"1765":1,"1767":2,"1805":1,"1840":1,"1867":1,"1902":1,"1920":1,"1948":1,"1988":1,"2178":1,"2182":1}}],["complains",{"3":{"1907":1,"1923":1}}],["complaint",{"3":{"1323":1}}],["comply",{"3":{"1436":1}}],["compliment",{"3":{"2202":1}}],["complication",{"3":{"1359":1}}],["compliance",{"0":{"1567":1,"1672":1},"3":{"716":1,"971":1,"972":1,"973":1,"976":1,"1168":1,"1207":2,"1216":1,"1232":1,"1236":1,"1237":6,"1253":1,"1259":2,"1269":1,"1270":3,"1276":1,"1283":1,"1286":14,"1299":1,"1300":4,"1308":1,"1309":5,"1311":2,"1317":1,"1323":8,"1324":2,"1350":1,"1353":1,"1355":1,"1359":4,"1380":2,"1395":2,"1396":32,"1402":3,"1403":1,"1405":1,"1410":2,"1415":25,"1417":5,"1436":24,"1438":2,"1454":1,"1461":1,"1479":1,"1480":3,"1483":1,"1489":1,"1493":1,"1499":1,"1526":1,"1534":1,"1535":1,"1569":1,"1575":1,"1577":2,"1581":1,"1582":1,"1583":1,"1584":1,"1591":1,"1597":1,"1672":1,"1678":1,"1784":1,"1796":1,"1799":1,"1800":1,"1801":1,"1845":2,"1846":1,"2044":1,"2063":1,"2069":1,"2143":1}}],["compliantstringfixtureid",{"3":{"1199":2,"1207":1,"1436":5}}],["compliantfixtureid",{"3":{"1199":2,"1207":1,"1436":8}}],["compliantfixtureservice",{"3":{"1199":2,"1207":1,"1436":3}}],["compliant",{"3":{"38":1,"41":1,"1050":1,"1168":1,"1300":1,"1403":1,"1436":17,"1480":1,"2062":1,"2070":1}}],["complexities",{"3":{"1639":1}}],["complexity",{"3":{"61":1,"68":1,"87":1,"1214":1,"1237":1,"1247":1,"1254":1,"1271":3,"1287":1,"1294":1,"1300":5,"1301":1,"1312":1,"1323":2,"1324":5,"1359":1,"1395":1,"1415":2,"1639":1,"1641":2,"1767":1,"1792":1,"1832":1,"1833":1,"1899":1,"1940":1,"2028":2,"2038":1}}],["complex",{"3":{"1052":1,"1055":1,"1286":1,"1300":1,"1359":2,"2081":1}}],["complementary",{"3":{"541":1,"624":1,"626":2,"1247":1,"1300":1,"1339":1,"1359":1,"1396":1,"1436":3,"1463":1,"1486":2,"1492":1,"1493":1,"1605":1,"1739":1,"1977":1,"1999":1,"2042":1,"2078":1,"2166":1}}],["complementing",{"3":{"503":1,"1311":1,"1402":1}}],["complements",{"0":{"1890":1},"3":{"122":1,"282":1,"321":1,"370":1,"579":1,"758":1,"766":1,"770":1,"1309":1,"1311":1,"1312":1,"1324":1,"1396":1,"1436":5,"1438":1,"1455":2,"1457":1,"1463":1,"1560":1,"1563":1,"1565":1,"1611":1,"1642":1,"1706":1,"1892":1,"2095":1}}],["complement",{"3":{"0":1,"626":1,"860":1,"1259":1,"1339":1,"1395":1,"1396":1,"1436":2,"1455":3,"1461":1,"1486":1,"1525":1,"1526":1,"1531":1,"1591":1,"1596":1,"1600":1,"1605":1,"1739":1,"1832":1}}],["completing",{"3":{"920":1,"1311":1,"1324":2,"1359":2,"1395":4,"1396":1,"1411":1,"1417":2,"1467":1,"1474":1,"2129":1,"2234":1}}],["completions",{"1":{"1056":1,"1057":1,"1058":1,"1059":1,"1060":1,"1061":1,"1062":1,"1063":1,"2172":1,"2173":1,"2174":1,"2175":1,"2176":1,"2177":1,"2178":1,"2179":1,"2180":1,"2181":1,"2182":1},"3":{"0":1,"1056":1,"1059":1,"1062":1,"1212":1,"1270":1,"1275":1,"1287":1,"1300":7,"1323":2,"1415":1,"1779":2,"2171":2,"2172":1,"2195":1,"2204":1,"2205":1,"2211":1,"2234":1}}],["completion",{"3":{"0":4,"189":1,"348":1,"350":1,"353":3,"419":2,"420":2,"422":1,"423":2,"426":1,"428":1,"430":1,"1091":1,"1107":1,"1108":1,"1112":1,"1270":6,"1286":1,"1300":3,"1311":2,"1323":3,"1324":12,"1339":5,"1380":1,"1390":1,"1395":4,"1415":2,"1416":2,"1417":16,"1421":1,"1427":1,"1436":2,"1667":2,"1669":1,"1898":1,"1975":1,"1976":2,"2172":1,"2174":1,"2234":1}}],["completable",{"3":{"681":1,"684":1}}],["completeenrollmentasync",{"2":{"1293":1},"3":{"1293":1,"1300":2,"1323":1}}],["completely",{"3":{"922":1,"1265":1,"1286":2,"1300":1,"1311":1,"1316":1,"1323":2,"1324":1,"1467":1,"1815":1,"1824":1,"1835":1,"2000":2,"2100":1,"2160":1}}],["complete",{"0":{"926":1},"2":{"161":1},"3":{"0":6,"39":1,"109":1,"160":1,"161":1,"164":1,"168":1,"181":1,"212":1,"214":1,"215":1,"216":1,"217":1,"265":1,"272":1,"273":1,"360":1,"361":1,"420":3,"423":1,"428":1,"434":1,"440":1,"537":1,"574":1,"577":1,"585":2,"597":1,"632":1,"649":1,"675":1,"682":1,"741":1,"743":1,"774":1,"811":1,"916":1,"920":1,"963":1,"965":1,"1049":1,"1108":1,"1212":1,"1219":1,"1229":1,"1247":1,"1259":2,"1265":1,"1286":2,"1300":9,"1309":2,"1311":8,"1322":1,"1323":8,"1324":10,"1326":1,"1330":1,"1336":2,"1339":7,"1340":1,"1350":3,"1352":1,"1357":1,"1359":10,"1369":6,"1395":6,"1396":4,"1406":1,"1409":1,"1410":1,"1411":1,"1415":9,"1416":2,"1417":9,"1427":1,"1432":1,"1436":8,"1442":1,"1443":1,"1444":1,"1453":1,"1456":1,"1468":1,"1472":1,"1477":1,"1485":1,"1488":1,"1489":1,"1496":1,"1497":1,"1526":1,"1531":1,"1532":2,"1575":1,"1577":3,"1582":1,"1591":1,"1599":2,"1611":1,"1632":1,"1653":1,"1654":1,"1658":1,"1661":1,"1670":1,"1687":1,"1705":1,"1750":1,"1765":1,"1849":1,"1891":1,"1898":1,"1931":1,"1932":1,"1936":1,"1941":1,"1964":1,"1976":2,"2002":1,"2035":1,"2085":2,"2087":1,"2128":1,"2145":1,"2151":2,"2154":1,"2155":1,"2202":1,"2203":1,"2210":1,"2233":1,"2235":1}}],["completes",{"3":{"0":2,"235":2,"539":1,"844":1,"897":1,"925":1,"1018":1,"1212":1,"1259":2,"1286":2,"1300":3,"1311":2,"1318":1,"1323":1,"1324":5,"1334":1,"1339":4,"1350":1,"1357":1,"1359":9,"1376":1,"1380":1,"1395":2,"1402":1,"1415":1,"1417":4,"1436":4,"1438":1,"1443":1,"1453":1,"1467":1,"1707":1,"1755":2,"1784":1,"2069":1,"2140":1,"2192":1,"2234":1}}],["completeness",{"3":{"0":2,"265":2,"399":1,"574":1,"725":1,"727":1,"838":2,"840":2,"1311":2,"1369":3,"1396":1,"1415":1,"1436":11,"1438":2,"1592":1,"1630":1,"1638":1,"1653":1,"1669":1,"1671":2,"2088":1,"2161":1}}],["completeasync",{"2":{"202":1,"350":1,"355":1,"419":2,"423":1,"1910":1,"1975":2,"1976":1},"3":{"0":2,"24":1,"195":1,"201":4,"202":1,"350":3,"355":1,"418":1,"419":2,"420":1,"423":1,"1258":2,"1259":9,"1286":1,"1311":2,"1323":1,"1415":1,"1416":1,"1910":1,"1975":2,"1976":1}}],["completedstable",{"3":{"1395":3}}],["completedall",{"3":{"1395":3}}],["completedtask",{"3":{"1259":3,"1270":1,"1286":3,"1309":2,"1310":3,"1311":3,"1323":5,"1324":2,"1339":1,"1395":1,"1417":16,"1436":6,"1865":1}}],["completed",{"2":{"719":1,"790":1,"1765":1,"1770":1,"1821":1},"3":{"0":2,"237":1,"352":1,"397":1,"539":1,"626":3,"628":2,"719":1,"790":2,"792":1,"794":1,"795":1,"809":1,"821":1,"823":1,"988":1,"1042":1,"1048":1,"1086":1,"1212":1,"1251":1,"1259":1,"1263":2,"1270":4,"1275":1,"1286":5,"1300":1,"1310":1,"1311":1,"1318":1,"1323":8,"1324":8,"1339":1,"1350":2,"1359":8,"1380":1,"1395":2,"1396":4,"1415":3,"1417":14,"1423":1,"1427":5,"1436":2,"1455":1,"1467":4,"1470":1,"1471":1,"1474":1,"1492":1,"1591":2,"1640":1,"1765":1,"1769":1,"1770":1,"1821":1,"1978":1,"2167":1,"2222":1}}],["comprehensive",{"3":{"2042":1,"2061":1}}],["compressible",{"3":{"442":1}}],["compressionlevel",{"3":{"1311":2}}],["compression",{"3":{"0":1,"749":1,"1311":7,"1379":1,"1436":1}}],["compressed",{"3":{"0":1,"438":1,"442":1,"591":1,"1323":3,"1560":1,"2128":1}}],["compromises",{"3":{"1311":2}}],["compromise",{"3":{"500":1,"904":2,"906":1,"1270":2,"1300":1,"1301":1,"1323":1,"1350":1,"1436":1,"1639":1}}],["compromised",{"3":{"32":1,"358":1,"602":1,"642":1,"904":1,"1212":1,"1288":1,"1300":2,"1406":1,"1415":1,"1453":1,"1467":2}}],["compilable",{"3":{"1417":1,"1436":1}}],["compilation",{"3":{"6":1,"576":1,"1213":1,"1247":1,"1310":1,"1324":1,"1359":4,"1396":1,"1417":1,"1673":1,"1955":2,"2042":1}}],["compiling",{"3":{"0":1,"908":1,"921":1,"979":1,"1059":1,"1091":1,"1134":1,"1247":1,"1268":1,"1270":2,"1290":1,"1301":1,"1305":1,"1309":2,"1311":1,"1324":3,"1353":1,"1359":2,"1417":1,"1427":1,"1436":6,"1453":1,"1727":1,"1915":1,"2096":1,"2198":1}}],["compiles",{"3":{"26":1,"53":1,"160":1,"373":1,"634":1,"697":1,"799":1,"801":1,"872":1,"920":1,"938":2,"980":1,"1066":1,"1132":2,"1237":1,"1239":1,"1247":5,"1259":3,"1270":5,"1301":1,"1310":1,"1312":1,"1324":1,"1350":1,"1359":19,"1369":1,"1395":4,"1396":1,"1415":2,"1416":4,"1417":5,"1427":3,"1430":1,"1431":1,"1436":15,"1611":4,"1656":1,"1663":1,"1685":1,"1730":1,"1736":1,"1737":1,"1790":1,"1800":1,"1810":1,"1815":1,"1825":2,"1830":1,"1863":1,"1952":1,"2018":1,"2044":1,"2045":1,"2057":1,"2061":1,"2099":1,"2202":1}}],["compiledpermission",{"3":{"1436":1}}],["compiledpermissions",{"3":{"1300":2}}],["compiledexpressioncache",{"3":{"1310":1}}],["compiled",{"0":{"2057":1},"3":{"0":6,"132":1,"184":2,"186":1,"330":1,"333":1,"359":1,"365":1,"422":1,"426":1,"454":1,"545":1,"546":1,"576":1,"591":1,"592":1,"595":1,"674":2,"699":1,"707":1,"848":1,"869":1,"946":1,"979":1,"980":1,"982":1,"983":1,"1057":1,"1058":1,"1059":6,"1060":1,"1061":1,"1063":1,"1067":1,"1161":2,"1213":1,"1214":1,"1237":1,"1238":1,"1241":1,"1242":3,"1247":18,"1252":1,"1259":2,"1276":1,"1278":3,"1283":1,"1286":18,"1297":3,"1300":37,"1304":1,"1305":1,"1309":5,"1310":7,"1311":5,"1319":1,"1323":8,"1324":18,"1341":1,"1348":1,"1350":1,"1353":1,"1359":12,"1380":3,"1395":2,"1396":6,"1409":2,"1414":1,"1415":4,"1416":2,"1417":2,"1427":1,"1428":1,"1431":1,"1432":1,"1436":68,"1438":2,"1445":1,"1455":1,"1466":1,"1486":2,"1489":2,"1491":1,"1504":1,"1531":1,"1577":4,"1626":2,"1665":1,"1670":1,"1671":1,"1675":1,"1782":1,"1850":1,"1851":2,"1865":1,"1902":1,"1923":1,"1945":1,"1956":1,"1962":2,"1963":2,"1964":1,"1988":1,"1989":1,"2013":1,"2029":1,"2042":2,"2043":1,"2048":1,"2055":1,"2102":1,"2144":1,"2196":1,"2201":4,"2202":3,"2205":3}}],["compilergeneratedattribute",{"3":{"1436":2}}],["compilerswitchexpressionthrow",{"3":{"1436":2}}],["compilerservices",{"3":{"980":1,"1312":1,"1436":3}}],["compiler",{"3":{"0":5,"81":1,"135":2,"160":2,"459":1,"465":1,"472":1,"547":1,"620":1,"633":1,"657":1,"784":1,"798":1,"799":1,"800":1,"821":1,"839":1,"840":2,"955":1,"956":1,"971":1,"980":3,"981":2,"982":1,"1004":1,"1005":1,"1036":2,"1050":1,"1052":1,"1161":1,"1162":1,"1174":1,"1212":1,"1218":1,"1229":1,"1234":1,"1237":1,"1247":1,"1259":1,"1270":8,"1286":7,"1300":7,"1310":1,"1311":5,"1312":1,"1323":2,"1324":6,"1339":5,"1359":16,"1369":1,"1395":1,"1396":5,"1402":2,"1415":3,"1416":1,"1417":2,"1436":58,"1449":1,"1450":1,"1488":1,"1500":1,"1737":1,"1803":1,"1804":1,"1810":2,"1833":1,"1888":1,"1892":1,"1919":1,"1951":2,"1955":1,"1956":1,"1957":1,"1959":1,"1997":1}}],["compile",{"0":{"576":1,"2042":1,"2108":1},"1":{"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1956":1,"1957":1,"1958":1,"1959":1},"3":{"0":7,"3":1,"5":1,"6":1,"130":1,"132":1,"133":1,"135":2,"136":1,"265":1,"310":1,"312":1,"412":1,"413":1,"422":1,"425":1,"461":1,"469":1,"472":2,"570":1,"590":1,"592":1,"599":1,"604":1,"609":1,"633":1,"650":1,"698":3,"798":1,"801":1,"838":1,"839":1,"846":1,"848":1,"869":1,"871":1,"882":1,"883":2,"923":1,"926":2,"933":1,"939":1,"948":1,"966":1,"1004":1,"1033":1,"1050":2,"1052":1,"1067":1,"1091":1,"1093":1,"1133":1,"1135":1,"1212":5,"1213":2,"1214":2,"1229":1,"1232":1,"1237":2,"1242":1,"1247":4,"1259":4,"1270":3,"1271":1,"1286":10,"1291":1,"1300":16,"1301":2,"1309":3,"1310":2,"1311":8,"1323":7,"1324":11,"1339":5,"1343":1,"1350":4,"1353":3,"1359":46,"1380":3,"1381":1,"1395":5,"1396":13,"1401":1,"1402":3,"1405":1,"1415":12,"1416":3,"1417":4,"1424":1,"1427":2,"1431":3,"1436":50,"1438":1,"1453":1,"1455":1,"1467":2,"1489":5,"1491":2,"1494":1,"1504":1,"1575":1,"1576":1,"1577":12,"1581":1,"1582":3,"1583":1,"1584":1,"1585":2,"1586":1,"1591":1,"1611":1,"1650":1,"1651":1,"1660":1,"1662":1,"1671":1,"1685":1,"1686":1,"1701":1,"1722":1,"1727":2,"1728":2,"1729":1,"1730":1,"1782":1,"1784":1,"1810":1,"1851":1,"1865":1,"1888":2,"1949":1,"1950":1,"1951":2,"1952":2,"1953":1,"1955":2,"1958":1,"1959":3,"1990":1,"2042":2,"2045":2,"2050":1,"2073":1,"2079":1,"2087":1,"2099":1,"2102":2,"2108":2,"2110":2,"2118":2,"2122":1,"2160":1,"2210":1,"2216":1,"2232":1,"2234":1}}],["company",{"3":{"1359":1,"2222":1}}],["companions",{"3":{"1247":1,"1286":1,"1324":1,"1436":1}}],["companion",{"0":{"1195":1},"3":{"39":1,"66":1,"72":1,"73":1,"78":1,"170":1,"207":1,"406":1,"424":1,"622":1,"659":1,"718":1,"782":1,"825":1,"1147":1,"1190":1,"1237":1,"1241":1,"1247":2,"1259":2,"1270":2,"1285":1,"1286":1,"1300":2,"1311":3,"1323":12,"1324":1,"1350":4,"1359":2,"1380":1,"1391":1,"1395":1,"1396":4,"1415":2,"1416":1,"1427":1,"1428":1,"1436":11,"1438":1,"1459":1,"1474":1,"1476":1,"1479":1,"1481":1,"1486":1,"1487":1,"1488":1,"1492":1,"1577":1,"1602":1,"1626":1,"1658":1,"1674":1,"1756":1,"1855":1,"1968":1,"2078":1,"2230":1,"2236":1}}],["compacthtml",{"3":{"1436":2}}],["compact",{"3":{"881":1,"1223":1,"1229":2,"1233":1,"1286":1,"1289":1,"1292":1,"1300":4,"1311":2,"1324":4,"1328":1,"1344":1,"1350":1,"1359":3,"1384":1,"1392":1,"1395":2,"1396":3,"1402":4,"1403":1,"1416":2,"1433":1,"1436":1,"1559":1,"1591":1,"1596":1,"1597":1}}],["compacted",{"3":{"618":1,"1488":1,"2058":1}}],["compatibility",{"1":{"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1},"3":{"79":1,"99":1,"146":1,"148":1,"151":1,"307":1,"365":1,"556":1,"558":1,"565":1,"566":1,"799":1,"950":1,"965":1,"1033":1,"1211":1,"1229":1,"1247":1,"1259":4,"1286":2,"1300":3,"1323":1,"1324":2,"1339":1,"1350":2,"1359":2,"1436":3,"1455":1,"1504":1,"1546":1,"1732":1,"1748":1,"1889":2,"1892":1,"2114":1}}],["compatible",{"3":{"0":1,"78":1,"136":1,"149":1,"215":1,"412":1,"435":1,"511":1,"568":1,"626":1,"680":1,"681":1,"689":1,"734":1,"757":1,"762":1,"954":1,"1061":1,"1091":1,"1213":2,"1259":1,"1286":3,"1300":1,"1311":1,"1324":1,"1339":1,"1359":1,"1395":1,"1419":1,"1427":1,"1432":1,"1455":1,"1464":1,"1467":1,"1488":1,"1534":1,"1544":1,"1577":2,"1733":1,"1889":1,"2005":1,"2122":1,"2204":2}}],["comparability",{"3":{"1802":1}}],["comparable",{"3":{"735":1,"766":1,"1012":1,"1014":1,"1286":1,"1350":2,"1359":2,"1396":1,"1417":1,"1436":1,"1536":2,"1537":1,"1592":1,"1794":1,"1795":1,"1862":1}}],["comparator",{"3":{"1402":1}}],["comparatively",{"3":{"108":1,"1804":1}}],["comparing",{"3":{"619":1,"964":1,"972":1,"1018":1,"1019":1,"1033":1,"1229":1,"1286":4,"1290":1,"1300":3,"1301":1,"1311":1,"1323":3,"1324":3,"1350":1,"1359":7,"1366":1,"1373":1,"1375":1,"1395":3,"1396":2,"1402":1,"1415":1,"1436":6,"1453":1,"1490":1,"1492":1,"1639":1,"1798":1,"1996":1,"2044":1,"2048":1,"2246":1}}],["comparisons",{"3":{"1241":2,"1247":7,"1273":1,"1286":4,"1359":10,"1396":2,"1496":1,"1630":1,"1631":1,"1635":1,"1637":1,"1639":1}}],["comparison",{"0":{"1528":1,"1579":1,"1593":1},"3":{"0":3,"150":1,"178":1,"179":1,"243":1,"261":1,"279":1,"309":2,"310":1,"311":1,"322":1,"342":1,"627":1,"766":1,"827":2,"838":1,"854":1,"889":1,"946":3,"954":1,"970":1,"972":3,"973":1,"975":1,"997":1,"1020":2,"1033":1,"1038":1,"1074":1,"1161":1,"1184":1,"1229":1,"1237":4,"1247":5,"1259":1,"1270":1,"1271":4,"1281":1,"1286":11,"1294":1,"1295":1,"1300":19,"1301":1,"1311":3,"1323":1,"1324":8,"1337":1,"1339":8,"1350":4,"1352":2,"1355":1,"1359":28,"1369":1,"1395":2,"1396":7,"1402":2,"1415":8,"1417":1,"1427":1,"1436":21,"1438":2,"1522":1,"1587":1,"1630":1,"1631":1,"1673":1,"1765":1,"1872":2,"1874":1,"1877":3,"1899":1,"1900":1,"1902":4,"1905":1,"1997":1,"2075":1,"2109":1,"2234":1}}],["comparemembers",{"3":{"1436":1}}],["comparebyscorethenindex",{"3":{"1359":1}}],["compareexchange",{"2":{"1337":1},"3":{"1337":1,"1339":2}}],["compareto",{"3":{"1286":2}}],["comparers",{"3":{"1300":1}}],["comparertype",{"3":{"1050":1,"1286":2}}],["comparer",{"3":{"585":1,"1050":1,"1212":1,"1222":1,"1229":1,"1237":2,"1247":1,"1286":8,"1300":7,"1324":3,"1339":1,"1359":6,"1395":1,"1396":2,"1431":1,"1436":4,"1438":2,"1496":1}}],["compared",{"0":{"1902":1},"3":{"0":1,"186":1,"499":1,"591":1,"592":1,"628":1,"649":1,"838":1,"946":2,"948":1,"974":1,"1247":3,"1270":2,"1279":1,"1286":3,"1300":8,"1301":1,"1323":2,"1324":2,"1339":1,"1350":1,"1359":4,"1369":1,"1395":1,"1396":4,"1398":1,"1415":1,"1417":1,"1436":7,"1438":1,"1492":1,"1496":1,"1631":1,"1641":1,"1699":1,"1767":1,"1962":2,"2048":1}}],["compares",{"3":{"0":2,"136":1,"318":1,"320":1,"341":1,"350":1,"363":1,"572":1,"608":1,"633":1,"715":1,"727":1,"827":1,"872":1,"889":1,"964":1,"1050":1,"1186":1,"1234":1,"1237":2,"1241":1,"1247":2,"1266":1,"1270":1,"1271":1,"1286":9,"1289":1,"1293":1,"1297":1,"1300":13,"1323":4,"1324":8,"1337":1,"1339":2,"1350":4,"1353":1,"1359":12,"1369":1,"1380":2,"1395":7,"1396":3,"1415":7,"1432":1,"1435":1,"1436":16,"1438":3,"1455":1,"1456":1,"1467":1,"1488":1,"1490":1,"1727":1,"1839":1,"1902":3,"1995":1,"1997":1,"2025":1,"2047":1,"2048":1,"2060":1,"2109":1,"2146":1}}],["compare",{"2":{"549":1},"3":{"0":3,"157":1,"310":1,"318":1,"319":1,"342":2,"343":1,"344":1,"484":1,"490":1,"491":1,"492":1,"493":1,"549":1,"633":1,"838":1,"857":1,"862":1,"973":1,"996":2,"1212":1,"1229":2,"1237":7,"1270":4,"1286":9,"1292":1,"1297":1,"1300":6,"1309":1,"1310":1,"1311":2,"1316":1,"1323":5,"1324":11,"1339":1,"1350":3,"1359":15,"1369":2,"1380":2,"1395":4,"1396":5,"1402":1,"1405":1,"1415":3,"1417":1,"1436":20,"1438":1,"1455":1,"1537":1,"1577":2,"1668":1,"1749":1,"1803":1,"1810":1,"1871":1,"1872":2,"1876":1,"1877":2,"1905":2,"1908":1,"1909":1,"1912":2,"1995":3,"2186":1}}],["compensated",{"3":{"1359":1}}],["compensate",{"3":{"536":1,"1324":1,"2169":1,"2171":1}}],["compensates",{"3":{"536":1,"1416":1,"1436":1,"1749":1}}],["compensating",{"3":{"0":4,"49":1,"166":1,"293":1,"534":2,"536":7,"538":2,"776":1,"809":3,"810":2,"1212":2,"1281":2,"1286":6,"1309":1,"1359":1,"1369":1,"1396":2,"1415":1,"1436":2,"1477":1,"1526":1,"1534":2,"1596":1,"1749":2,"1765":1,"1792":1,"1849":1,"1852":1,"1858":2,"1866":1,"2115":1,"2165":4,"2166":1,"2167":1,"2170":4,"2171":1,"2191":1,"2208":1,"2234":2}}],["compensations",{"3":{"541":1}}],["compensation",{"0":{"2165":1},"1":{"533":1,"534":1,"535":1,"536":1,"537":1,"538":1,"539":1,"540":1,"541":1,"2163":1,"2164":1,"2165":1,"2166":1,"2167":1,"2168":1,"2169":1,"2170":1,"2171":1},"3":{"0":4,"533":1,"534":2,"536":4,"537":1,"538":3,"539":1,"541":2,"793":1,"809":1,"810":1,"813":2,"815":1,"896":2,"901":1,"926":1,"987":2,"992":1,"1012":1,"1093":1,"1147":1,"1212":2,"1286":1,"1359":1,"1526":1,"1547":2,"1572":1,"1577":1,"1591":2,"1665":1,"1749":1,"1755":1,"1779":2,"2162":2,"2163":2,"2165":2,"2167":1,"2169":3,"2170":2,"2171":3,"2182":1,"2208":1,"2217":1,"2234":1}}],["competition",{"3":{"1396":2}}],["competitors",{"3":{"1286":1,"2146":1}}],["competing",{"3":{"0":1,"341":1,"342":2,"1286":2,"1323":2,"1417":1,"1436":2,"1453":1,"1455":1,"1651":1,"1875":1,"1877":1,"2166":1}}],["competencies",{"0":{"2221":1}}],["competent",{"3":{"708":1}}],["competes",{"3":{"905":1,"1323":1,"1369":1}}],["compete",{"3":{"517":1,"1258":2,"1259":2,"1270":1,"1317":1,"1323":1,"1359":3,"1459":1}}],["compound",{"3":{"1259":1,"1339":1,"1687":1}}],["compounds",{"3":{"1259":1,"1324":1}}],["compounding",{"3":{"872":1}}],["composability",{"3":{"546":1,"1154":1,"1359":1}}],["composable",{"1":{"1813":1,"1814":1,"1815":1,"1816":1,"1817":1},"3":{"0":1,"110":1,"544":1,"1202":1,"1203":1,"1229":2,"1247":2,"1265":1,"1270":1,"1271":1,"1286":1,"1309":1,"1350":1,"1359":4,"1396":1,"1416":1,"1427":1,"1662":1,"1812":1,"1813":2,"1814":1,"1817":1,"1832":1,"1998":2,"2208":1}}],["composing",{"3":{"43":1,"545":1,"550":1,"552":1,"749":1,"826":1,"1018":1,"1227":1,"1239":1,"1247":3,"1271":1,"1286":1,"1299":1,"1300":2,"1301":1,"1316":1,"1323":1,"1324":8,"1339":1,"1347":1,"1350":1,"1359":9,"1395":1,"1396":1,"1415":2,"1427":1,"1436":2,"1479":1,"1480":1,"1805":1,"1815":1,"1833":1,"1992":1}}],["compositor",{"0":{"1480":1}}],["compositeformat",{"3":{"1369":1}}],["compositekeything",{"3":{"1199":3,"1207":1}}],["composites",{"3":{"0":1,"545":1,"547":1,"549":1,"1234":1,"1247":6,"1395":1}}],["composite",{"3":{"0":2,"265":1,"268":1,"368":1,"370":2,"374":1,"375":1,"545":2,"546":1,"549":1,"550":2,"551":1,"564":1,"591":1,"594":1,"599":1,"624":1,"626":2,"629":1,"644":1,"1247":4,"1269":1,"1270":1,"1271":6,"1278":1,"1286":6,"1300":1,"1324":1,"1347":2,"1350":7,"1359":21,"1362":4,"1369":11,"1376":1,"1380":1,"1387":1,"1395":13,"1396":6,"1412":1,"1415":2,"1417":1,"1453":1,"1454":2,"1455":1,"1467":1,"1475":1,"1492":1,"1531":1,"1577":1,"1582":1,"1640":1,"1666":1,"1829":1,"2035":1,"2138":1,"2234":1}}],["compositional",{"3":{"1286":1}}],["compositiontestentity",{"3":{"1199":4,"1207":1}}],["composition",{"0":{"1316":1,"1322":1,"1354":1,"1449":1,"1486":1,"1935":1,"2057":1},"1":{"580":1,"581":1,"582":1,"583":1,"584":1,"585":1,"586":1,"587":1,"646":1,"647":1,"648":1,"649":1,"650":1,"651":1,"652":1,"653":1,"1313":1,"1314":1,"1315":1,"1316":1,"1317":1,"1318":1,"1319":1,"1320":1,"1321":1,"1322":1,"1323":1,"1416":1,"1485":1,"1486":1,"1487":1,"1488":1,"1489":1,"1490":1,"1491":1,"1492":1,"1493":1,"1494":1},"3":{"0":9,"115":2,"122":1,"123":1,"135":1,"265":1,"326":1,"543":4,"545":1,"547":1,"549":3,"550":3,"580":1,"582":2,"583":2,"584":2,"585":1,"587":1,"591":1,"646":1,"650":1,"651":1,"680":1,"682":1,"749":1,"825":1,"826":1,"847":1,"856":1,"881":1,"890":1,"913":1,"914":2,"980":1,"984":1,"1016":2,"1018":3,"1021":1,"1066":1,"1192":7,"1202":7,"1203":7,"1212":3,"1229":3,"1247":12,"1260":1,"1269":2,"1270":4,"1271":5,"1276":1,"1285":1,"1286":19,"1300":1,"1301":3,"1302":1,"1307":1,"1309":15,"1310":2,"1311":12,"1312":2,"1313":4,"1314":1,"1317":1,"1320":4,"1321":1,"1322":2,"1323":21,"1324":17,"1328":1,"1329":1,"1339":6,"1340":1,"1348":1,"1350":2,"1352":1,"1353":1,"1354":1,"1359":43,"1368":1,"1369":5,"1370":1,"1379":1,"1380":10,"1381":1,"1392":1,"1395":7,"1396":14,"1400":1,"1402":3,"1403":1,"1413":1,"1415":11,"1416":17,"1417":21,"1418":1,"1421":1,"1427":2,"1428":1,"1436":21,"1438":4,"1449":2,"1485":1,"1487":1,"1488":2,"1490":1,"1492":2,"1496":11,"1513":1,"1526":3,"1555":2,"1577":3,"1586":1,"1641":1,"1650":1,"1660":1,"1662":4,"1790":1,"1791":1,"1815":1,"1829":1,"1833":2,"1834":2,"1884":1,"1886":1,"1915":1,"1923":1,"1924":1,"1935":1,"1941":2,"1944":1,"1948":1,"1956":1,"2033":1,"2061":1,"2076":1,"2079":1,"2117":1,"2121":1,"2125":2,"2174":1,"2229":1,"2234":3}}],["composeconnectionstring",{"3":{"1436":4}}],["composeconfirmationlink",{"3":{"1323":1}}],["composemessage",{"3":{"1286":1}}],["composer",{"3":{"1247":2,"1380":2,"1389":1,"1395":14,"1436":2}}],["composers",{"3":{"1247":2,"1395":1,"1438":1}}],["composeresetlink",{"2":{"857":1},"3":{"854":1,"857":1,"1323":3}}],["composebody",{"3":{"854":1,"1323":2}}],["composeadminconnectionstring",{"2":{"640":1},"3":{"640":1,"1436":1}}],["composedpipeline",{"2":{"121":1,"127":1},"3":{"121":1,"127":1,"1436":2}}],["composed",{"0":{"1317":1,"1829":1},"3":{"0":5,"109":1,"117":1,"265":1,"319":1,"443":1,"544":1,"545":1,"546":1,"547":1,"549":3,"573":1,"599":1,"657":1,"698":1,"699":1,"854":1,"1091":1,"1094":1,"1150":1,"1168":1,"1237":1,"1239":3,"1247":8,"1262":1,"1269":1,"1270":4,"1271":3,"1272":1,"1276":1,"1286":3,"1294":1,"1300":2,"1306":1,"1309":2,"1311":1,"1323":3,"1324":7,"1325":1,"1339":3,"1350":3,"1353":2,"1359":24,"1369":2,"1380":5,"1381":1,"1394":1,"1395":11,"1396":4,"1402":2,"1416":3,"1417":3,"1425":1,"1427":1,"1435":1,"1436":5,"1438":2,"1455":2,"1467":2,"1479":1,"1480":2,"1486":1,"1496":1,"1509":1,"1526":1,"1555":1,"1577":1,"1631":1,"1651":1,"1669":1,"1685":1,"1701":1,"1737":1,"1810":1,"1814":1,"1815":4,"1816":1,"1817":1,"1818":1,"1821":1,"1827":1,"1828":1,"1851":1,"1883":1,"1915":1}}],["composesubject",{"3":{"854":1,"1323":2}}],["composes",{"3":{"0":5,"39":1,"103":1,"109":2,"115":1,"188":1,"246":1,"265":1,"317":1,"319":1,"331":2,"351":1,"545":2,"571":1,"648":1,"657":1,"701":2,"702":1,"827":2,"896":1,"913":1,"917":1,"1018":2,"1089":1,"1154":1,"1168":1,"1212":3,"1220":1,"1229":3,"1232":1,"1237":1,"1238":1,"1246":1,"1247":3,"1267":1,"1270":3,"1271":3,"1276":1,"1284":1,"1286":16,"1300":3,"1309":5,"1311":2,"1312":1,"1313":2,"1318":1,"1323":1,"1324":16,"1337":1,"1338":1,"1339":1,"1349":1,"1350":8,"1353":1,"1359":20,"1360":1,"1366":1,"1368":1,"1369":4,"1380":2,"1389":1,"1395":18,"1396":6,"1412":1,"1415":4,"1416":3,"1417":4,"1418":1,"1427":4,"1435":1,"1436":7,"1438":1,"1467":1,"1492":2,"1507":1,"1526":2,"1577":1,"1632":1,"1653":1,"1663":1,"1672":1,"1702":1,"1805":2,"1810":1,"1815":2,"1824":1,"1825":1,"1828":1,"1851":1,"1883":1,"1920":1,"1964":1,"1993":1,"2182":2,"2232":1,"2234":1}}],["compose",{"0":{"1480":1,"1506":1,"1653":1},"1":{"1828":1,"1829":1,"1830":1,"1831":1,"1832":1,"1833":1,"1834":1},"3":{"0":2,"109":1,"117":1,"187":1,"319":1,"545":1,"618":1,"649":1,"698":1,"749":2,"819":1,"1018":1,"1091":1,"1202":1,"1203":1,"1212":1,"1232":1,"1237":3,"1238":1,"1247":2,"1259":1,"1262":1,"1269":1,"1270":3,"1271":1,"1278":1,"1286":7,"1300":3,"1309":2,"1311":2,"1313":1,"1323":5,"1324":7,"1339":2,"1350":1,"1353":1,"1358":1,"1359":5,"1368":1,"1369":1,"1380":1,"1391":1,"1395":2,"1396":2,"1402":4,"1415":1,"1416":1,"1417":1,"1422":1,"1427":2,"1436":7,"1440":1,"1450":1,"1471":1,"1479":2,"1480":18,"1482":1,"1483":1,"1555":1,"1653":1,"1662":1,"1667":1,"1718":1,"1727":1,"1779":1,"1815":1,"1817":2,"1824":1,"1828":2,"1834":2,"1855":1,"1995":1,"1998":1,"2006":1,"2039":1,"2082":1,"2172":1,"2208":1,"2229":1}}],["componentparameters",{"3":{"1436":1}}],["componentization",{"3":{"1417":1}}],["componenttype",{"3":{"1324":1,"1395":1,"1416":4}}],["componentbase",{"3":{"1324":11,"1383":1,"1395":2,"1396":2,"1415":4}}],["componentmodel",{"3":{"1259":1,"1286":4,"1300":11,"1309":2,"1311":2,"1323":4,"1324":12,"1339":3,"1395":10,"1396":2,"1427":2,"1436":1}}],["componentspage",{"3":{"1643":1,"1714":1}}],["componentspagee2etests",{"3":{"618":1,"1199":1,"1207":2,"1436":2,"1577":2,"1643":1,"1714":1}}],["componentsgallery",{"3":{"1324":1,"1436":1}}],["componentssnapshottests",{"3":{"1199":3,"1207":6,"1417":1,"1436":3,"1438":4,"1525":1,"1526":2,"1531":1,"1535":1}}],["components",{"1":{"1324":1},"2":{"650":1,"1324":2,"1395":1,"1416":1},"3":{"0":3,"88":1,"109":2,"135":1,"265":1,"273":1,"275":1,"370":1,"412":1,"413":4,"415":1,"426":1,"490":1,"556":7,"560":1,"618":1,"648":1,"649":2,"650":2,"651":2,"653":1,"682":2,"861":2,"863":1,"864":1,"931":1,"954":1,"1004":1,"1018":1,"1059":5,"1062":1,"1119":1,"1184":1,"1202":1,"1203":9,"1207":94,"1212":1,"1213":1,"1229":2,"1279":1,"1286":2,"1300":1,"1311":3,"1323":1,"1324":99,"1339":1,"1381":1,"1389":2,"1395":32,"1396":15,"1402":2,"1414":1,"1415":5,"1416":16,"1417":61,"1426":1,"1428":1,"1432":3,"1433":1,"1434":2,"1436":42,"1437":4,"1438":16,"1453":1,"1454":1,"1486":1,"1487":2,"1488":3,"1491":1,"1496":1,"1525":1,"1526":4,"1530":1,"1531":2,"1532":1,"1535":1,"1555":7,"1556":2,"1557":1,"1564":1,"1572":2,"1577":10,"1586":4,"1591":1,"1597":1,"1641":2,"1643":2,"1644":3,"1653":2,"1669":2,"1687":3,"1760":1,"1898":1,"2044":1,"2055":1,"2060":1,"2075":1,"2077":2,"2079":2,"2080":1,"2081":1,"2082":1,"2118":1,"2120":1,"2121":1,"2123":2,"2124":1,"2178":1,"2204":1,"2229":1}}],["component",{"0":{"1432":1,"1555":1,"2080":1},"1":{"951":1,"952":1,"953":1,"954":1,"955":1,"956":1,"957":1,"958":1,"959":1,"960":1},"2":{"1381":1},"3":{"0":12,"88":1,"109":4,"135":4,"139":2,"165":1,"189":1,"201":1,"265":2,"266":2,"267":1,"273":5,"275":1,"374":1,"375":1,"397":1,"407":1,"412":1,"413":1,"423":1,"427":1,"482":3,"484":1,"511":1,"556":3,"577":1,"647":1,"649":7,"650":1,"651":1,"682":3,"683":3,"684":1,"689":1,"694":1,"827":2,"881":1,"910":1,"915":1,"931":1,"951":1,"952":1,"953":4,"954":6,"955":2,"956":3,"957":1,"960":2,"996":1,"999":1,"1004":2,"1057":1,"1059":2,"1201":1,"1202":1,"1203":1,"1212":4,"1213":2,"1216":1,"1229":1,"1237":1,"1280":1,"1286":3,"1300":2,"1309":1,"1310":1,"1311":9,"1323":3,"1324":180,"1333":1,"1339":4,"1350":2,"1359":3,"1381":2,"1383":1,"1384":1,"1385":1,"1387":1,"1389":3,"1390":1,"1391":1,"1393":1,"1395":118,"1396":42,"1402":16,"1409":1,"1414":2,"1415":7,"1416":22,"1417":102,"1426":1,"1427":1,"1428":2,"1429":1,"1431":1,"1432":3,"1434":1,"1436":79,"1437":5,"1438":9,"1443":1,"1447":1,"1450":1,"1455":3,"1461":1,"1465":1,"1467":4,"1474":2,"1476":1,"1487":1,"1488":4,"1491":5,"1496":3,"1497":1,"1499":1,"1513":1,"1526":5,"1530":1,"1531":2,"1532":1,"1536":1,"1544":1,"1555":2,"1556":2,"1557":3,"1565":2,"1572":2,"1577":3,"1586":1,"1591":1,"1627":1,"1643":1,"1645":1,"1653":2,"1660":2,"1669":6,"1671":2,"1702":2,"1711":1,"1714":1,"1750":1,"1759":2,"1773":1,"1796":1,"1865":1,"1868":1,"2044":2,"2055":1,"2056":1,"2060":1,"2074":2,"2077":1,"2079":2,"2080":2,"2081":3,"2082":3,"2085":4,"2087":1,"2088":1,"2118":4,"2119":2,"2120":2,"2121":2,"2123":2,"2125":3,"2149":1,"2158":2,"2204":1,"2232":1,"2234":2}}],["comes",{"3":{"0":3,"101":1,"195":2,"229":1,"318":1,"360":1,"402":1,"413":1,"446":1,"572":1,"599":1,"601":1,"635":1,"651":1,"665":1,"673":1,"678":1,"690":1,"692":1,"697":1,"716":1,"726":1,"741":2,"766":1,"768":1,"818":1,"905":1,"915":1,"939":1,"953":1,"972":1,"982":1,"988":1,"996":1,"1018":1,"1042":1,"1050":1,"1115":1,"1184":1,"1225":1,"1228":1,"1229":1,"1237":2,"1244":2,"1247":2,"1254":1,"1255":1,"1259":3,"1270":3,"1271":1,"1275":2,"1286":20,"1294":1,"1300":9,"1301":4,"1309":7,"1311":10,"1312":1,"1323":5,"1324":13,"1332":1,"1336":1,"1339":3,"1350":5,"1359":37,"1364":1,"1369":3,"1373":1,"1380":3,"1388":1,"1395":28,"1396":22,"1402":6,"1415":9,"1417":3,"1419":1,"1422":1,"1425":1,"1435":1,"1436":5,"1438":2,"1441":1,"1447":1,"1451":1,"1455":1,"1460":1,"1466":1,"1467":1,"1474":1,"1477":1,"1484":1,"1491":1,"1492":1,"1498":1,"1591":1,"1627":1,"1653":1,"1702":2,"1710":1,"1727":1,"1805":1,"1825":1,"1837":1,"1923":1,"1927":1,"1948":1,"1951":1,"1954":1,"1982":1,"1985":1,"1990":1,"1995":1,"1998":1,"2006":1,"2012":1,"2016":1,"2019":2,"2020":1,"2035":1,"2076":1,"2098":2,"2113":1,"2114":1,"2142":1,"2148":1,"2163":1,"2167":2,"2170":1,"2186":1}}],["come",{"0":{"140":1,"1442":1,"1787":1},"3":{"0":2,"95":1,"135":1,"219":1,"265":1,"273":1,"282":1,"329":1,"360":1,"372":1,"397":1,"400":1,"401":1,"402":1,"529":1,"544":1,"583":1,"617":1,"626":1,"633":1,"640":1,"649":1,"657":1,"703":1,"726":1,"741":2,"774":1,"818":1,"827":1,"889":1,"905":1,"907":1,"913":1,"914":1,"954":1,"1069":1,"1090":1,"1092":1,"1099":1,"1124":2,"1186":1,"1194":1,"1195":2,"1211":1,"1217":1,"1231":1,"1237":1,"1241":1,"1242":1,"1247":4,"1256":1,"1259":4,"1262":1,"1271":1,"1286":17,"1289":1,"1300":2,"1306":1,"1309":3,"1311":3,"1312":1,"1315":1,"1316":1,"1323":2,"1324":18,"1328":1,"1331":1,"1332":1,"1339":12,"1343":1,"1344":1,"1345":1,"1350":9,"1354":1,"1359":6,"1369":2,"1384":1,"1388":1,"1395":13,"1396":9,"1399":1,"1402":7,"1409":1,"1410":1,"1414":2,"1415":5,"1416":2,"1417":5,"1425":1,"1427":2,"1433":1,"1436":12,"1438":3,"1441":1,"1442":2,"1443":2,"1445":1,"1449":1,"1454":1,"1455":1,"1467":1,"1485":1,"1489":1,"1492":1,"1503":1,"1510":1,"1627":1,"1631":2,"1646":1,"1651":1,"1677":1,"1702":1,"1730":1,"1731":1,"1760":1,"1761":1,"1765":1,"1826":1,"1829":1,"1843":1,"1851":1,"1881":1,"1982":1,"1985":1,"1986":1,"1987":1,"2003":1,"2020":1,"2054":1,"2078":1,"2083":1,"2093":1,"2114":1,"2130":1,"2144":1,"2158":1}}],["commodity",{"3":{"1436":1,"1900":1}}],["commons",{"3":{"1436":2}}],["commontags",{"2":{"1469":1},"3":{"1436":1,"1465":1,"1467":2,"1469":1,"1526":1,"1535":1,"1591":1}}],["commonest",{"3":{"1270":1}}],["commonauditdeletioncolumnsandoutboxordering",{"3":{"1209":6}}],["commonarchitecturemap",{"2":{"80":1,"132":1,"1161":1,"1891":1,"2105":1},"3":{"80":2,"132":1,"1161":1,"1199":36,"1207":2,"1323":2,"1324":2,"1436":84,"1487":1,"1489":4,"1577":1,"1891":1,"2105":1}}],["commonv1141pushnotificationdedupindexsoftdeletefilter",{"3":{"1209":2,"1286":1}}],["commonv1120outboxleaseandsoftdeleteindexfilters",{"3":{"564":1,"891":4,"1209":8}}],["commonvalidationrules",{"3":{"1207":12,"1271":37,"1289":1,"1300":5,"1359":67,"1436":2,"1496":2,"1586":1,"1829":1}}],["commonvalidationrulestests",{"3":{"1199":1,"1207":8,"1271":4}}],["commoninvariantstests",{"3":{"1199":1,"1207":3,"1237":1}}],["commoninvariants",{"2":{"1271":1,"1350":2,"1359":1,"1402":1,"1405":1,"2087":1},"3":{"1199":26,"1203":1,"1207":2,"1230":1,"1234":3,"1237":28,"1271":9,"1309":6,"1311":2,"1344":1,"1350":42,"1359":15,"1396":11,"1402":18,"1405":1,"1415":7,"1436":1,"1662":1,"1685":1,"2087":2}}],["commonly",{"3":{"122":1,"1263":1,"1270":1,"1271":1,"1282":1,"1291":1,"1295":1,"2016":1}}],["commonforwardedheaderstests",{"3":{"1199":1,"1207":2}}],["commonforwardedheadersextensions",{"3":{"220":1,"749":2,"1124":1,"1186":1,"1199":1,"1203":1,"1207":2,"1208":1,"1311":7,"1496":1}}],["commonforwardedheaders",{"2":{"220":1,"747":1,"749":1,"1124":1},"3":{"0":1,"220":2,"747":1,"749":4,"751":2,"1124":3,"1199":4,"1203":1,"1207":2,"1311":16,"1496":1}}],["common",{"0":{"95":1,"465":1,"1442":1,"1443":1,"1444":1,"1453":1,"1454":1,"1602":1,"1799":1,"1838":1,"2023":1,"2229":1},"1":{"936":1,"937":1,"938":1,"939":1,"940":1,"941":1,"942":1,"1088":1,"1089":1,"1090":1,"1091":1,"1092":1,"1093":1,"1094":1,"1095":1,"1096":1,"1190":1,"1191":1,"1192":1,"1193":1,"1194":1,"1195":1,"1324":1,"1418":1,"1419":1,"1420":1,"1421":1,"1422":1,"1423":1,"1424":1,"1425":1,"1426":1,"1427":1,"1573":1,"1574":1,"1575":1,"1576":1,"1577":1,"1578":1,"1579":1,"1580":1,"1581":1,"1582":1,"1583":1,"1584":1,"1585":1,"1586":1,"1646":1,"1647":1,"1648":1,"1649":1,"1650":1,"1651":1,"1652":1,"1653":1,"1654":1,"1655":1,"1656":1,"1657":1,"1658":1,"1659":1,"1660":1,"1661":1,"1662":1,"1663":1,"1664":1,"1665":1,"1666":1,"1667":1,"1668":1,"1669":1,"1670":1,"1671":1,"1672":1,"1673":1,"1674":1,"1675":1,"1692":1,"1693":1,"1694":1,"1695":1,"1696":1,"1697":1,"1698":1,"1699":1,"1700":1,"1701":1,"1702":1,"1703":1,"1704":1,"1705":1,"1717":1,"1718":1,"1719":1,"1720":1,"1721":1,"1722":1,"1723":1,"1724":1,"1725":1,"1778":1,"1779":1},"2":{"24":1,"39":3,"53":1,"61":2,"67":1,"68":1,"70":1,"78":1,"85":1,"99":1,"100":1,"107":2,"109":1,"111":1,"117":1,"124":1,"126":1,"130":1,"132":2,"135":2,"137":1,"138":1,"139":3,"140":1,"141":6,"142":6,"145":2,"147":1,"150":1,"152":2,"160":1,"180":1,"186":1,"190":1,"207":2,"214":2,"216":1,"225":2,"241":2,"247":1,"250":1,"252":1,"255":2,"258":1,"259":2,"261":1,"265":1,"268":3,"273":1,"281":2,"310":1,"359":2,"370":1,"373":1,"388":1,"395":4,"400":7,"404":2,"406":1,"408":1,"412":1,"436":1,"460":1,"481":1,"482":3,"486":3,"487":3,"488":3,"489":3,"490":3,"491":3,"492":3,"493":3,"494":3,"495":3,"509":6,"511":3,"514":1,"526":1,"527":2,"528":3,"558":1,"572":2,"576":1,"577":1,"578":2,"591":1,"617":1,"618":1,"634":1,"635":1,"638":3,"648":1,"649":2,"681":1,"683":1,"684":1,"686":2,"731":1,"733":1,"789":1,"821":1,"822":3,"823":3,"825":2,"826":3,"832":1,"836":1,"838":1,"840":1,"861":1,"880":1,"897":2,"899":1,"906":1,"912":1,"914":1,"917":1,"936":1,"938":2,"939":6,"941":2,"942":1,"953":1,"954":1,"957":1,"963":1,"966":1,"982":1,"984":1,"1004":2,"1012":1,"1016":1,"1036":3,"1044":1,"1051":1,"1057":1,"1058":1,"1062":1,"1066":1,"1067":2,"1068":3,"1069":1,"1074":1,"1089":3,"1090":1,"1091":1,"1093":1,"1124":2,"1161":2,"1191":1,"1192":1,"1194":1,"1200":1,"1201":1,"1203":2,"1211":1,"1213":5,"1214":1,"1215":2,"1217":1,"1222":1,"1229":3,"1230":2,"1236":1,"1237":3,"1247":3,"1256":1,"1259":6,"1264":1,"1268":1,"1270":6,"1271":1,"1275":1,"1286":5,"1287":2,"1300":2,"1301":3,"1309":2,"1310":2,"1317":1,"1321":1,"1323":5,"1324":1,"1325":5,"1326":1,"1327":1,"1328":1,"1329":1,"1330":1,"1333":1,"1336":1,"1337":1,"1339":1,"1341":1,"1351":1,"1386":1,"1414":1,"1416":3,"1417":9,"1418":4,"1425":1,"1428":1,"1430":3,"1434":3,"1436":2,"1437":4,"1438":1,"1439":1,"1445":1,"1451":1,"1452":1,"1453":3,"1454":2,"1456":1,"1460":1,"1476":1,"1480":1,"1487":3,"1488":1,"1490":2,"1496":3,"1497":2,"1503":8,"1509":1,"1513":2,"1523":1,"1525":1,"1526":1,"1527":2,"1535":1,"1576":1,"1577":1,"1578":1,"1585":3,"1599":1,"1605":1,"1615":2,"1642":1,"1643":1,"1648":1,"1650":5,"1653":2,"1654":1,"1656":2,"1660":12,"1661":1,"1675":1,"1677":1,"1693":1,"1702":5,"1711":1,"1732":1,"1739":1,"1741":1,"1761":1,"1781":1,"1782":2,"1790":1,"1793":1,"1805":1,"1807":1,"1810":1,"1812":1,"1815":1,"1817":1,"1827":1,"1828":1,"1829":1,"1834":1,"1843":1,"1846":1,"1853":1,"1862":1,"1865":1,"1868":1,"1877":1,"1886":1,"1892":1,"1895":1,"1896":1,"1899":1,"1902":2,"1905":1,"1912":1,"1919":1,"1922":1,"1924":1,"1930":1,"1935":1,"1941":1,"1950":1,"1953":1,"1959":1,"1962":1,"1965":1,"1972":1,"1975":1,"1979":1,"1985":1,"1992":1,"1998":1,"2003":1,"2005":2,"2007":9,"2009":1,"2011":1,"2014":8,"2015":3,"2017":1,"2023":1,"2025":1,"2029":2,"2031":1,"2039":1,"2043":1,"2045":1,"2047":1,"2050":1,"2056":2,"2058":1,"2060":2,"2061":1,"2064":1,"2072":1,"2073":2,"2079":1,"2082":1,"2088":1,"2102":2,"2103":1,"2110":1,"2113":1,"2117":1,"2118":1,"2122":3,"2125":1,"2130":1,"2135":1,"2141":1,"2144":1,"2148":1,"2151":1,"2153":1,"2154":1,"2155":1,"2158":1,"2159":3,"2162":9,"2171":1,"2174":3,"2178":1,"2179":1,"2180":1,"2182":2,"2193":1,"2195":2,"2204":1,"2205":1,"2213":1},"3":{"0":96,"4":1,"5":1,"11":1,"15":4,"17":4,"18":1,"19":3,"22":2,"23":1,"24":11,"25":9,"26":18,"27":17,"31":5,"34":2,"39":9,"43":4,"46":1,"53":3,"54":2,"59":2,"61":4,"63":2,"67":1,"68":7,"69":1,"70":5,"71":4,"72":6,"74":14,"76":1,"78":2,"79":2,"80":6,"81":10,"82":4,"85":1,"95":3,"98":2,"99":3,"100":5,"103":5,"107":2,"108":1,"109":42,"110":1,"111":5,"115":1,"117":7,"121":10,"122":5,"123":10,"124":1,"125":10,"126":7,"128":4,"130":6,"132":4,"133":1,"134":1,"135":25,"136":7,"137":6,"138":5,"139":6,"140":4,"141":7,"142":14,"145":5,"146":3,"147":23,"149":2,"150":11,"152":5,"157":5,"160":8,"161":6,"164":2,"166":10,"168":1,"170":3,"171":3,"173":1,"175":5,"178":6,"179":11,"180":5,"181":2,"186":18,"189":11,"190":12,"193":2,"196":5,"197":1,"198":7,"200":4,"201":3,"202":14,"203":2,"207":2,"208":1,"214":4,"216":5,"217":2,"218":2,"219":6,"220":8,"225":9,"228":8,"230":8,"231":8,"235":12,"237":2,"238":1,"241":2,"243":28,"245":8,"246":17,"247":1,"250":2,"251":1,"252":3,"254":1,"255":11,"256":8,"257":2,"258":8,"259":13,"260":3,"261":5,"265":30,"268":5,"272":1,"273":3,"275":1,"281":3,"284":7,"285":6,"286":1,"290":2,"295":6,"296":2,"300":4,"301":1,"303":8,"305":14,"306":8,"310":6,"312":1,"314":6,"318":9,"325":3,"326":2,"328":1,"330":8,"331":1,"333":12,"336":1,"337":4,"341":29,"342":2,"343":6,"344":11,"345":2,"350":2,"352":2,"353":8,"359":6,"365":2,"366":1,"368":1,"369":2,"370":4,"373":10,"374":2,"375":2,"384":11,"388":1,"390":2,"391":6,"392":2,"395":6,"397":11,"400":16,"401":5,"402":3,"404":7,"406":1,"407":12,"408":8,"409":6,"412":2,"413":14,"414":1,"415":3,"416":2,"418":6,"419":1,"420":3,"423":4,"424":1,"426":4,"427":3,"428":7,"430":4,"434":3,"436":3,"442":3,"443":4,"444":4,"448":8,"450":3,"453":1,"454":2,"457":1,"459":16,"460":2,"463":6,"464":6,"465":4,"466":1,"468":3,"469":9,"470":12,"475":6,"476":8,"477":13,"481":2,"482":6,"484":2,"486":25,"487":14,"488":8,"489":15,"490":19,"491":15,"492":15,"493":15,"494":4,"495":9,"497":13,"498":1,"499":4,"502":3,"507":30,"509":12,"511":9,"512":2,"513":6,"514":5,"522":2,"523":4,"524":2,"526":3,"527":4,"528":6,"530":1,"531":3,"532":1,"534":1,"536":17,"538":2,"539":3,"540":4,"543":1,"544":2,"545":13,"547":1,"549":6,"550":2,"552":3,"556":16,"558":2,"562":1,"564":4,"566":1,"570":2,"572":13,"576":9,"577":8,"578":2,"579":1,"583":20,"585":2,"586":6,"587":2,"590":1,"591":13,"592":2,"593":3,"594":1,"597":1,"599":6,"601":3,"603":2,"604":1,"609":5,"617":2,"618":12,"620":1,"621":1,"622":1,"624":1,"626":18,"628":2,"629":5,"632":2,"633":2,"634":5,"635":2,"638":4,"640":15,"642":2,"644":2,"648":1,"649":27,"650":1,"652":2,"656":2,"657":9,"665":9,"668":2,"669":1,"674":68,"675":4,"676":18,"677":1,"681":2,"682":6,"683":2,"684":1,"685":1,"686":2,"688":1,"689":1,"690":1,"691":1,"692":2,"693":1,"696":2,"697":3,"698":30,"700":3,"702":18,"703":13,"705":1,"706":2,"707":8,"713":1,"715":10,"720":6,"723":1,"724":4,"725":8,"727":4,"731":1,"732":2,"733":11,"736":9,"739":1,"740":4,"741":9,"742":1,"744":1,"747":1,"749":6,"766":2,"774":6,"776":7,"782":14,"789":3,"790":1,"792":3,"798":12,"799":9,"803":4,"804":5,"805":3,"806":3,"809":3,"810":1,"813":2,"814":2,"818":2,"819":34,"821":1,"822":8,"823":3,"825":5,"826":6,"827":20,"830":5,"831":2,"832":9,"833":14,"836":1,"837":2,"838":5,"840":1,"846":5,"849":5,"850":2,"854":4,"857":7,"860":1,"861":10,"863":3,"864":1,"865":1,"880":3,"881":36,"883":5,"884":4,"888":4,"890":2,"892":2,"897":15,"899":1,"900":2,"904":2,"905":23,"906":14,"907":2,"908":7,"912":2,"913":14,"914":5,"915":2,"917":4,"920":1,"921":3,"922":9,"923":1,"926":5,"930":1,"931":7,"936":1,"938":3,"939":10,"940":1,"941":2,"942":1,"945":1,"946":18,"949":1,"950":1,"953":2,"954":25,"955":1,"956":5,"957":1,"958":4,"959":6,"960":6,"963":7,"964":14,"966":3,"971":2,"972":12,"975":7,"979":9,"980":11,"982":3,"983":1,"984":1,"987":4,"988":4,"990":2,"991":1,"995":6,"996":9,"999":3,"1003":5,"1004":19,"1006":5,"1007":3,"1010":2,"1012":7,"1014":1,"1016":3,"1018":6,"1034":21,"1036":3,"1037":2,"1041":8,"1042":38,"1043":2,"1044":7,"1045":4,"1049":7,"1050":38,"1051":1,"1052":4,"1054":4,"1055":4,"1057":2,"1058":8,"1059":58,"1062":4,"1066":9,"1067":20,"1068":5,"1069":6,"1070":3,"1073":2,"1074":19,"1075":4,"1077":1,"1078":2,"1082":4,"1083":6,"1085":3,"1086":2,"1088":1,"1089":10,"1090":1,"1091":38,"1093":3,"1094":2,"1095":2,"1100":4,"1103":4,"1108":15,"1116":6,"1117":1,"1119":4,"1122":2,"1123":7,"1124":27,"1125":7,"1126":6,"1127":3,"1128":4,"1132":4,"1133":12,"1135":1,"1136":1,"1137":1,"1140":14,"1150":16,"1160":7,"1161":7,"1163":1,"1164":1,"1168":22,"1170":1,"1171":1,"1173":1,"1174":4,"1175":54,"1176":1,"1180":1,"1182":3,"1183":8,"1184":40,"1185":3,"1186":4,"1187":2,"1189":1,"1190":1,"1191":5,"1192":9,"1194":1,"1195":4,"1199":3206,"1200":2,"1201":6,"1202":6,"1203":1243,"1204":3,"1206":45,"1207":10164,"1208":192,"1211":11,"1212":19,"1213":8,"1214":8,"1215":4,"1216":1,"1217":1,"1219":6,"1220":3,"1221":1,"1222":7,"1223":4,"1224":2,"1225":7,"1226":4,"1227":6,"1228":4,"1229":131,"1230":3,"1231":12,"1232":10,"1233":14,"1234":24,"1235":4,"1236":19,"1237":287,"1238":1,"1239":17,"1240":8,"1241":12,"1242":4,"1243":10,"1244":4,"1245":2,"1246":6,"1247":318,"1249":9,"1250":2,"1251":3,"1252":4,"1253":1,"1254":4,"1255":1,"1256":3,"1257":10,"1258":5,"1259":281,"1261":4,"1262":12,"1263":4,"1264":5,"1265":4,"1266":2,"1267":10,"1268":4,"1269":4,"1270":427,"1271":150,"1273":10,"1274":4,"1275":5,"1276":16,"1277":8,"1278":18,"1279":18,"1280":3,"1281":6,"1282":6,"1283":4,"1284":4,"1285":14,"1286":1513,"1287":2,"1288":16,"1289":19,"1290":22,"1291":24,"1292":12,"1293":18,"1294":18,"1295":12,"1296":10,"1297":60,"1298":12,"1299":4,"1300":2115,"1301":142,"1302":13,"1303":17,"1304":10,"1305":10,"1306":16,"1307":18,"1308":10,"1309":362,"1310":104,"1311":829,"1312":84,"1314":2,"1315":10,"1316":22,"1317":23,"1318":15,"1319":7,"1320":57,"1321":5,"1322":29,"1323":730,"1324":1580,"1325":14,"1326":5,"1327":5,"1328":5,"1329":3,"1330":11,"1331":2,"1332":15,"1333":22,"1334":14,"1335":2,"1336":7,"1337":15,"1338":16,"1339":483,"1341":4,"1342":1,"1348":1,"1350":79,"1351":1,"1352":1,"1353":2,"1354":1,"1359":505,"1361":2,"1362":4,"1363":4,"1366":2,"1368":1,"1369":23,"1371":2,"1372":6,"1376":1,"1378":3,"1379":2,"1380":62,"1381":1,"1382":1,"1383":5,"1384":7,"1386":7,"1387":3,"1388":2,"1389":1,"1392":1,"1395":163,"1396":152,"1399":1,"1400":1,"1402":39,"1404":2,"1414":5,"1415":184,"1416":39,"1417":792,"1418":6,"1419":4,"1420":12,"1421":2,"1422":6,"1423":11,"1424":10,"1425":8,"1426":2,"1427":165,"1428":11,"1429":9,"1430":18,"1431":37,"1432":9,"1433":21,"1434":13,"1435":14,"1436":3272,"1437":49,"1438":95,"1439":2,"1441":21,"1442":17,"1443":38,"1444":4,"1445":3,"1447":10,"1448":1,"1449":6,"1450":1,"1451":2,"1452":2,"1453":14,"1454":12,"1455":11,"1456":3,"1459":22,"1460":7,"1461":3,"1467":35,"1470":1,"1474":1,"1475":4,"1476":1,"1480":2,"1481":1,"1484":1,"1485":2,"1486":26,"1487":40,"1488":74,"1489":43,"1490":14,"1491":3,"1492":38,"1496":343,"1497":2,"1498":2,"1500":2,"1503":12,"1504":1,"1505":2,"1509":1,"1513":2,"1514":1,"1517":1,"1520":1,"1521":1,"1522":2,"1523":2,"1524":2,"1525":3,"1526":69,"1527":4,"1529":1,"1531":15,"1532":1,"1534":5,"1535":8,"1544":1,"1550":1,"1555":1,"1569":1,"1570":1,"1573":3,"1574":1,"1575":1,"1576":2,"1577":108,"1578":2,"1580":1,"1581":1,"1582":35,"1583":8,"1584":1,"1585":8,"1586":14,"1587":2,"1588":1,"1589":3,"1591":40,"1592":1,"1593":1,"1594":2,"1595":3,"1596":15,"1597":3,"1598":1,"1599":4,"1600":8,"1601":1,"1605":1,"1611":1,"1615":2,"1619":4,"1627":5,"1631":1,"1641":3,"1642":1,"1643":1,"1646":3,"1648":11,"1649":3,"1650":6,"1653":16,"1654":2,"1655":3,"1656":2,"1658":1,"1659":2,"1660":17,"1661":1,"1675":3,"1676":1,"1677":2,"1681":1,"1682":1,"1692":2,"1693":3,"1695":2,"1699":1,"1702":7,"1703":1,"1706":1,"1707":1,"1708":1,"1711":1,"1712":2,"1717":1,"1726":1,"1727":4,"1731":1,"1732":2,"1736":1,"1739":1,"1741":1,"1761":4,"1764":3,"1770":2,"1775":1,"1778":2,"1780":1,"1781":2,"1782":3,"1784":1,"1785":1,"1787":2,"1788":1,"1790":3,"1793":4,"1794":1,"1799":2,"1801":1,"1802":4,"1803":2,"1805":3,"1806":1,"1807":3,"1808":1,"1810":8,"1812":3,"1815":4,"1817":3,"1820":1,"1826":1,"1827":4,"1828":2,"1829":2,"1833":1,"1834":4,"1838":2,"1843":1,"1846":4,"1847":1,"1853":3,"1854":1,"1860":1,"1861":1,"1862":4,"1865":2,"1868":4,"1877":4,"1879":1,"1880":1,"1886":3,"1889":1,"1891":4,"1892":4,"1894":1,"1895":3,"1896":1,"1897":1,"1899":3,"1902":4,"1903":1,"1905":4,"1906":1,"1909":2,"1910":1,"1912":3,"1913":1,"1919":1,"1922":2,"1923":1,"1924":4,"1927":2,"1929":1,"1930":5,"1931":2,"1935":1,"1939":1,"1941":4,"1942":1,"1947":1,"1950":3,"1951":1,"1953":1,"1955":2,"1959":3,"1961":1,"1962":1,"1963":1,"1965":4,"1968":3,"1972":4,"1975":1,"1979":4,"1981":1,"1982":2,"1985":4,"1992":4,"1994":1,"1995":7,"1996":1,"1998":4,"2000":1,"2001":13,"2002":1,"2003":4,"2004":2,"2005":3,"2007":12,"2009":1,"2011":2,"2014":9,"2015":6,"2016":2,"2017":1,"2023":1,"2025":3,"2029":4,"2031":1,"2035":1,"2037":1,"2039":3,"2040":2,"2042":5,"2043":6,"2044":1,"2045":10,"2047":3,"2048":2,"2050":4,"2051":2,"2053":1,"2056":7,"2058":2,"2060":3,"2061":4,"2062":1,"2063":1,"2064":1,"2065":2,"2066":1,"2068":5,"2071":2,"2072":1,"2073":2,"2077":1,"2079":1,"2082":3,"2083":1,"2085":17,"2087":10,"2088":3,"2089":1,"2091":1,"2100":4,"2101":1,"2102":4,"2103":3,"2107":1,"2108":3,"2109":1,"2110":7,"2111":1,"2113":4,"2114":3,"2115":1,"2116":1,"2117":4,"2118":1,"2119":1,"2121":2,"2122":5,"2124":3,"2125":6,"2126":1,"2129":2,"2130":3,"2133":6,"2135":4,"2136":2,"2138":1,"2139":1,"2140":2,"2141":3,"2142":1,"2144":1,"2148":4,"2151":3,"2152":6,"2153":1,"2154":1,"2155":5,"2156":1,"2158":10,"2159":3,"2162":13,"2165":1,"2169":2,"2171":4,"2173":2,"2174":8,"2178":1,"2179":1,"2180":3,"2181":4,"2182":7,"2184":2,"2193":1,"2195":5,"2197":2,"2204":1,"2205":4,"2206":3,"2213":3,"2223":1,"2229":23,"2231":1,"2233":1,"2234":6,"2236":3}}],["communities",{"3":{"2240":1}}],["communitytoolkit",{"3":{"1416":2,"1417":2}}],["community",{"1":{"2240":1,"2241":1,"2242":1,"2243":1,"2244":1,"2245":1},"2":{"1364":1},"3":{"0":2,"150":2,"1035":1,"1075":1,"1077":1,"1079":1,"1340":1,"1342":3,"1350":11,"1364":2,"1369":7,"1384":1,"1392":1,"1395":4,"1417":1,"1629":1,"1631":5,"2217":1,"2218":2,"2227":1,"2240":2,"2241":1,"2242":3,"2243":1,"2247":1}}],["communicate",{"3":{"1359":1,"1772":1}}],["communicates",{"3":{"1237":1}}],["communication",{"0":{"1772":1},"3":{"59":1,"1350":1,"1359":2,"1436":1,"1489":1,"1544":1,"1556":1,"1770":1}}],["commas",{"3":{"1436":4}}],["comma",{"3":{"26":1,"219":1,"330":1,"633":1,"972":1,"974":1,"1241":1,"1247":7,"1253":1,"1259":1,"1300":3,"1311":1,"1312":2,"1318":1,"1323":2,"1324":2,"1380":2,"1436":6,"1496":1,"1988":1}}],["command+handler",{"3":{"1591":1}}],["command+handler+request+validator+mapper",{"3":{"1591":1}}],["command+validator+handler+dto",{"3":{"1526":1}}],["commandorrequestsuffix",{"3":{"1436":1}}],["commandwithitsownvalidator",{"3":{"1436":2}}],["commandwithnovalidation",{"3":{"1436":2}}],["commandcoveredthroughtherequestbridge",{"3":{"1436":3}}],["commandinventory",{"3":{"1436":5}}],["commandpipeline",{"3":{"1436":2}}],["commandflags",{"3":{"1323":1}}],["commandtype",{"3":{"1286":4,"1323":2,"2188":1}}],["commandtypecache",{"3":{"1286":2}}],["commandtimeout",{"3":{"1286":3}}],["commandtimeoutseconds",{"2":{"71":1,"2033":1},"3":{"71":1,"819":1,"1286":4,"1320":1,"1664":1,"2033":1}}],["commandhandlers",{"3":{"1436":1}}],["commandhandlersreturnresult",{"3":{"1436":1}}],["commandhandleraskingforthewriterepository",{"3":{"1436":2}}],["commandhandler",{"3":{"1270":1}}],["commandvalidators",{"3":{"1207":1,"1415":1,"1436":12,"1489":1}}],["commandvalidatorfixtures",{"3":{"1207":48,"1436":52}}],["commandvalidatortests",{"3":{"1207":4,"1359":7}}],["commandvalidatorcoveragefitnesstests",{"2":{"1489":1},"3":{"1199":1,"1207":3,"1436":14,"1489":1}}],["commandvalidatorcoveragetests",{"3":{"128":2,"1199":1,"1207":2,"1300":2,"1359":1,"1415":6,"1436":6,"1489":2}}],["commandvalidatorcoveragetestsbase",{"2":{"117":1,"128":1},"3":{"117":2,"128":2,"1199":2,"1207":2,"1436":11}}],["commanddecoratorpipelinetests",{"3":{"1199":1,"1207":6,"1270":1}}],["commandduration",{"2":{"397":1},"3":{"397":1,"1270":3}}],["commandname",{"3":{"405":1,"1270":5,"1311":1}}],["commandrequestvalidatortests",{"3":{"1199":1,"1207":7,"1271":1}}],["commandrequestvalidator",{"2":{"117":1,"128":1,"922":1,"1666":1,"1830":1,"1834":1},"3":{"0":2,"117":1,"128":1,"922":2,"1199":6,"1203":1,"1207":2,"1263":1,"1270":5,"1271":10,"1300":4,"1316":1,"1322":1,"1323":4,"1359":6,"1415":10,"1436":4,"1666":1,"1830":3,"1834":1}}],["commandsandqueries",{"3":{"1436":2}}],["commandshavevalidators",{"3":{"1436":2}}],["commands",{"1":{"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":1,"1039":1,"1040":1,"1041":1,"1042":1,"1043":1,"1044":1,"1045":1,"1046":1,"1260":1,"1261":1,"1262":1,"1263":1,"1264":1,"1265":1,"1266":1,"1267":1,"1268":1,"1269":1,"1270":1,"2136":1,"2137":1,"2138":1,"2139":1,"2140":1,"2141":1,"2183":1,"2184":1,"2185":1,"2186":1,"2187":1,"2188":1,"2189":1,"2190":1,"2191":1,"2192":1,"2193":1,"2194":1,"2195":1},"2":{"1442":1,"2193":4},"3":{"0":7,"115":1,"116":1,"117":1,"121":2,"122":2,"126":2,"223":1,"236":1,"388":1,"422":1,"426":1,"516":1,"518":2,"522":2,"523":1,"599":1,"672":1,"750":1,"753":1,"919":1,"926":1,"988":2,"991":1,"1012":1,"1014":1,"1028":1,"1039":1,"1043":1,"1044":1,"1082":1,"1085":1,"1100":1,"1192":2,"1193":1,"1202":2,"1203":2,"1212":4,"1229":1,"1259":1,"1260":1,"1261":1,"1263":2,"1264":2,"1265":1,"1267":1,"1270":25,"1271":7,"1286":14,"1301":1,"1309":1,"1311":4,"1322":1,"1323":4,"1324":1,"1339":6,"1350":5,"1352":3,"1357":1,"1359":16,"1369":1,"1371":1,"1378":1,"1380":4,"1399":1,"1402":5,"1415":5,"1436":30,"1438":1,"1442":1,"1446":1,"1465":1,"1467":1,"1470":3,"1489":1,"1496":2,"1497":1,"1506":1,"1507":1,"1526":1,"1543":2,"1570":2,"1577":1,"1651":1,"1660":1,"1662":2,"1666":2,"1668":1,"1671":1,"1682":1,"1686":1,"1700":1,"1721":1,"1727":1,"1730":1,"1753":1,"1774":1,"1779":2,"1820":1,"1821":1,"1828":1,"1830":2,"1918":1,"1946":1,"1947":1,"2013":1,"2037":1,"2061":1,"2090":1,"2091":1,"2098":3,"2099":1,"2113":1,"2130":1,"2135":2,"2136":2,"2138":1,"2140":1,"2141":1,"2148":1,"2167":1,"2182":2,"2183":1,"2189":1,"2193":4,"2194":2,"2195":1,"2205":1,"2208":2,"2232":1,"2234":2}}],["command",{"0":{"1275":1,"1357":1,"1440":1,"1730":1,"1830":1,"2006":1,"2094":1,"2165":1},"1":{"2004":1,"2005":1,"2006":1,"2007":1,"2008":1,"2009":1,"2010":1,"2011":1,"2012":1,"2013":1,"2014":1,"2015":1,"2089":1,"2090":1,"2091":1,"2092":1,"2093":1,"2094":1,"2095":1,"2096":1,"2097":1,"2098":1,"2099":1,"2100":1},"2":{"1370":1,"1823":1,"1871":1,"2187":1},"3":{"0":24,"24":1,"26":1,"27":2,"71":1,"92":1,"109":1,"113":1,"115":1,"117":3,"121":2,"122":7,"125":1,"126":1,"127":1,"128":1,"157":1,"225":1,"229":1,"230":2,"234":2,"235":3,"236":1,"245":1,"259":1,"299":2,"300":1,"341":1,"373":2,"383":2,"396":1,"397":4,"404":2,"405":4,"406":1,"408":1,"434":1,"438":1,"441":1,"444":1,"459":2,"466":1,"486":1,"490":2,"491":1,"492":1,"493":1,"516":1,"518":4,"522":3,"523":3,"528":1,"534":1,"536":4,"537":1,"539":2,"540":1,"541":2,"633":3,"690":1,"714":1,"735":1,"790":1,"794":2,"808":1,"809":1,"810":1,"813":1,"815":1,"854":1,"869":2,"876":2,"896":1,"897":2,"898":2,"900":1,"920":6,"921":2,"922":10,"923":5,"925":2,"926":20,"927":1,"986":1,"987":2,"988":2,"991":1,"994":1,"995":1,"1003":1,"1010":1,"1011":2,"1013":2,"1016":1,"1018":2,"1019":1,"1022":2,"1024":1,"1030":1,"1034":1,"1042":6,"1043":1,"1044":4,"1046":1,"1068":1,"1086":1,"1099":1,"1100":5,"1101":1,"1102":2,"1104":1,"1116":2,"1132":2,"1133":2,"1150":1,"1175":1,"1177":1,"1202":1,"1203":1,"1212":4,"1213":2,"1217":1,"1218":1,"1224":1,"1233":2,"1237":1,"1238":1,"1246":1,"1247":7,"1252":2,"1259":7,"1260":4,"1262":1,"1263":13,"1264":4,"1265":10,"1266":1,"1267":4,"1268":2,"1270":240,"1271":25,"1273":2,"1275":7,"1276":1,"1277":1,"1278":1,"1286":76,"1289":1,"1297":1,"1300":20,"1301":8,"1304":3,"1306":1,"1307":1,"1309":32,"1311":22,"1312":1,"1313":2,"1316":5,"1318":10,"1322":4,"1323":95,"1332":1,"1339":9,"1346":1,"1347":3,"1349":1,"1350":18,"1352":4,"1354":2,"1357":7,"1358":1,"1359":419,"1367":2,"1369":14,"1370":1,"1373":1,"1374":4,"1375":1,"1376":1,"1380":43,"1390":2,"1395":7,"1396":53,"1399":3,"1402":75,"1403":1,"1406":1,"1407":3,"1410":1,"1411":2,"1415":109,"1431":4,"1436":146,"1437":5,"1438":4,"1440":3,"1442":2,"1443":2,"1445":1,"1446":1,"1450":1,"1453":1,"1454":1,"1455":2,"1458":3,"1464":1,"1465":2,"1467":3,"1475":2,"1478":2,"1483":1,"1487":1,"1488":1,"1489":3,"1492":1,"1496":10,"1508":1,"1526":2,"1534":1,"1542":1,"1547":1,"1548":1,"1570":2,"1572":1,"1577":6,"1585":1,"1591":3,"1602":1,"1631":1,"1646":1,"1650":1,"1651":11,"1654":1,"1658":2,"1661":4,"1662":2,"1666":1,"1668":1,"1671":1,"1683":1,"1685":7,"1686":2,"1689":1,"1691":1,"1692":2,"1694":1,"1697":2,"1701":5,"1702":4,"1719":1,"1726":2,"1727":7,"1729":2,"1730":3,"1765":1,"1774":3,"1779":1,"1781":1,"1803":1,"1817":1,"1818":2,"1821":5,"1822":2,"1823":5,"1825":1,"1826":1,"1827":3,"1828":3,"1830":8,"1831":2,"1833":1,"1834":2,"1840":2,"1857":1,"1871":1,"1875":1,"1879":1,"1883":3,"1913":2,"1914":1,"1918":6,"1920":5,"1923":2,"1933":2,"1934":1,"1944":3,"1946":2,"1947":1,"1948":1,"1950":2,"1962":1,"1990":1,"2003":1,"2004":2,"2005":1,"2006":1,"2007":2,"2011":3,"2013":1,"2014":2,"2031":1,"2037":1,"2044":1,"2049":1,"2089":2,"2094":2,"2095":1,"2097":1,"2098":5,"2099":2,"2100":2,"2107":1,"2113":1,"2129":1,"2135":1,"2138":4,"2139":1,"2140":3,"2141":1,"2156":1,"2158":2,"2159":2,"2165":2,"2169":2,"2170":1,"2171":3,"2183":1,"2185":3,"2186":3,"2187":2,"2188":2,"2189":2,"2190":2,"2191":4,"2192":5,"2193":1,"2194":5,"2195":2,"2208":1,"2211":2,"2212":1,"2213":1,"2229":1,"2232":1,"2234":2}}],["commerce",{"0":{"1603":1},"3":{"1520":1,"1588":1,"1601":1,"1661":1,"1673":2,"1681":1,"1763":2,"1785":1,"2005":1,"2112":1,"2117":1,"2223":1,"2230":2,"2233":1}}],["commercially",{"3":{"1380":1,"1454":1}}],["commercial",{"3":{"0":5,"145":1,"146":1,"147":1,"150":1,"650":1,"683":1,"810":1,"1074":1,"1075":2,"1077":1,"1079":1,"1213":1,"1259":1,"1323":1,"1342":2,"1350":1,"1369":1,"1380":1,"1384":1,"1392":1,"1395":3,"1431":1,"1436":3,"1489":1,"1491":1,"1569":1,"1576":1,"1577":1,"1631":1,"1649":1,"1671":1,"1673":1,"1738":1,"2170":1,"2228":1,"2236":1}}],["commentid",{"3":{"1651":1}}],["commenting",{"3":{"627":1,"1459":1}}],["commentary",{"3":{"1270":1}}],["commentedoutgrid",{"3":{"1436":1}}],["commented",{"3":{"0":1,"142":1,"1212":2,"1259":3,"1286":1,"1300":2,"1309":1,"1323":1,"1324":1,"1339":2,"1359":1,"1369":2,"1396":1,"1417":2,"1436":11,"2232":1,"2234":1}}],["comment",{"2":{"429":1,"1459":3},"3":{"0":3,"93":1,"95":2,"104":2,"109":1,"137":1,"138":1,"140":1,"142":1,"147":2,"148":1,"149":1,"152":1,"245":1,"250":1,"251":1,"256":4,"257":1,"258":1,"259":1,"275":1,"276":1,"291":1,"322":1,"370":1,"371":1,"372":1,"373":2,"374":1,"390":1,"393":2,"422":1,"424":1,"425":2,"426":2,"428":3,"429":3,"448":3,"453":1,"454":1,"459":1,"464":1,"468":1,"470":1,"476":1,"478":1,"490":1,"491":1,"492":2,"493":1,"512":1,"528":1,"530":1,"531":1,"540":1,"543":1,"547":1,"556":1,"559":1,"564":1,"576":1,"593":1,"626":1,"627":1,"629":1,"636":1,"638":2,"640":1,"669":1,"674":2,"676":1,"682":1,"685":1,"703":1,"741":1,"743":1,"749":6,"750":1,"751":1,"757":1,"765":1,"766":1,"769":1,"774":1,"777":1,"819":1,"833":3,"837":4,"839":4,"841":2,"847":1,"870":1,"871":1,"876":4,"877":1,"954":1,"982":1,"1019":1,"1074":4,"1075":1,"1076":1,"1116":2,"1124":1,"1133":1,"1135":1,"1161":1,"1162":1,"1168":1,"1212":1,"1213":1,"1219":1,"1222":1,"1227":1,"1228":1,"1229":21,"1231":1,"1232":1,"1233":1,"1235":1,"1237":30,"1239":1,"1243":1,"1246":2,"1247":45,"1259":60,"1270":48,"1271":9,"1273":3,"1275":1,"1277":1,"1278":2,"1280":1,"1283":3,"1284":2,"1286":176,"1300":189,"1301":5,"1309":51,"1310":4,"1311":85,"1312":8,"1316":2,"1317":1,"1323":54,"1324":265,"1326":2,"1327":1,"1328":1,"1329":1,"1330":2,"1332":3,"1333":2,"1339":170,"1342":3,"1343":2,"1346":1,"1347":1,"1350":88,"1356":1,"1359":167,"1362":1,"1364":2,"1365":1,"1366":1,"1367":1,"1368":1,"1369":33,"1380":49,"1389":1,"1395":176,"1396":225,"1401":1,"1402":95,"1405":1,"1414":1,"1415":115,"1416":25,"1417":51,"1419":1,"1422":1,"1423":1,"1427":5,"1436":177,"1438":1,"1441":10,"1442":3,"1443":6,"1444":2,"1445":10,"1447":3,"1451":4,"1452":1,"1453":12,"1454":3,"1455":35,"1456":3,"1457":2,"1458":2,"1459":11,"1460":4,"1463":1,"1465":3,"1467":37,"1472":2,"1473":3,"1475":6,"1478":1,"1479":1,"1480":1,"1483":1,"1486":2,"1488":5,"1489":6,"1490":2,"1491":1,"1492":6,"1496":12,"1526":2,"1577":2,"1585":1,"1589":2,"1591":4,"1596":4,"1630":2,"1651":2,"1653":1,"1685":5,"1686":6,"1727":1,"1728":1,"1738":1,"1782":1,"1790":1,"1801":2,"1810":1,"1815":1,"1816":1,"1821":1,"1856":1,"1877":1,"1886":1,"1889":1,"1896":1,"1902":1,"1945":1,"2001":2,"2005":1,"2025":1,"2040":1,"2045":1,"2049":3,"2050":2,"2058":1,"2077":2,"2087":1,"2100":1,"2101":1,"2106":1,"2114":1,"2119":1,"2124":1,"2128":2,"2133":1,"2158":1,"2159":1,"2160":1,"2161":1,"2163":1,"2165":1,"2166":4,"2167":1,"2168":2,"2169":2,"2170":1,"2174":1,"2177":2,"2180":1,"2198":1,"2199":1}}],["comments",{"2":{"1730":1},"3":{"0":1,"119":1,"121":1,"147":1,"220":1,"256":1,"276":1,"286":1,"290":1,"296":1,"390":2,"393":1,"468":1,"526":1,"543":1,"545":1,"547":1,"556":1,"616":1,"626":4,"629":1,"642":1,"700":1,"750":1,"751":1,"833":1,"868":1,"869":1,"875":1,"982":1,"986":1,"989":1,"1129":1,"1219":1,"1226":1,"1229":1,"1237":2,"1259":2,"1262":1,"1270":1,"1286":9,"1300":10,"1301":2,"1309":3,"1311":5,"1324":9,"1338":1,"1339":9,"1344":1,"1350":6,"1359":9,"1380":6,"1395":5,"1396":11,"1402":6,"1415":3,"1416":2,"1417":1,"1427":1,"1436":10,"1438":1,"1443":1,"1451":2,"1467":1,"1470":3,"1475":1,"1476":1,"1486":1,"1496":3,"1507":1,"1552":1,"1577":2,"1585":1,"1629":1,"1651":2,"1653":1,"1676":1,"1686":1,"1701":3,"1730":1,"1816":1,"1826":2,"1827":1,"1896":2,"1996":1,"2014":1,"2044":1,"2050":1,"2158":1}}],["commitfailingdbcontext",{"3":{"1198":1,"1199":3,"1207":1,"1496":1}}],["commitments",{"3":{"1396":1}}],["commitment",{"3":{"168":1,"971":1,"1212":1,"1237":1,"1369":1,"1396":2,"2034":1,"2044":1}}],["committransaction",{"2":{"1822":1},"3":{"1286":4,"1822":1}}],["committable",{"3":{"1277":1}}],["committee",{"3":{"1017":1,"1366":1,"1369":1,"1395":1,"2242":1}}],["committedsources",{"2":{"1840":1,"1852":1},"3":{"988":1,"1286":1,"1840":1,"1852":1}}],["committed",{"0":{"451":1,"577":1,"1466":1},"1":{"588":1,"589":1,"590":1,"591":1,"592":1,"593":1,"594":1,"595":1},"3":{"0":8,"24":1,"120":2,"130":1,"135":2,"201":2,"225":1,"255":1,"369":1,"370":3,"371":1,"373":1,"390":1,"444":1,"446":1,"451":4,"452":2,"453":1,"454":2,"459":1,"461":1,"465":1,"535":1,"536":3,"537":1,"570":1,"572":2,"573":1,"577":2,"588":1,"591":4,"592":1,"692":1,"715":1,"765":1,"770":1,"782":1,"793":1,"809":1,"860":1,"865":1,"869":1,"876":2,"896":1,"897":3,"972":1,"973":1,"974":1,"976":1,"988":3,"989":1,"990":1,"1044":2,"1067":2,"1142":1,"1212":2,"1229":1,"1247":3,"1251":1,"1258":1,"1259":12,"1263":3,"1270":6,"1275":1,"1278":2,"1286":13,"1301":1,"1304":1,"1309":1,"1311":4,"1318":1,"1323":5,"1324":1,"1357":1,"1358":2,"1359":4,"1395":2,"1396":2,"1399":1,"1402":7,"1415":5,"1428":1,"1429":2,"1431":2,"1432":1,"1435":1,"1436":29,"1438":7,"1445":1,"1449":1,"1453":5,"1454":2,"1455":5,"1456":1,"1459":1,"1460":1,"1461":1,"1479":1,"1486":1,"1488":4,"1490":2,"1492":4,"1496":1,"1524":1,"1525":1,"1526":6,"1531":5,"1532":2,"1534":1,"1535":1,"1548":1,"1576":1,"1577":11,"1586":1,"1591":4,"1663":1,"1664":1,"1668":1,"1673":2,"1685":2,"1738":1,"1749":1,"1765":2,"1769":1,"1770":1,"1784":1,"1794":1,"1800":1,"1801":1,"1821":1,"1822":2,"1837":1,"1839":1,"1840":2,"1910":1,"1918":5,"1923":2,"1929":1,"1930":2,"1933":1,"1940":1,"1946":1,"1948":1,"2045":3,"2048":3,"2050":2,"2056":1,"2060":1,"2063":1,"2081":1,"2102":1,"2134":2,"2163":2,"2166":2,"2167":1,"2169":2,"2171":1,"2194":1,"2213":1,"2217":1,"2234":3}}],["committing",{"3":{"0":1,"986":1,"988":1,"1212":1,"1259":1,"1278":1,"1286":3,"1300":2,"1359":2,"1402":3,"1410":1,"1455":1,"1459":1,"1526":1,"1840":1,"1929":1,"2045":1,"2068":1,"2169":1}}],["commit",{"0":{"452":1,"1840":1},"1":{"985":1,"986":1,"987":1,"988":1,"989":1,"990":1,"991":1,"992":1},"3":{"0":23,"15":1,"20":2,"27":2,"91":1,"94":1,"115":1,"120":2,"147":1,"195":1,"226":1,"350":1,"368":1,"373":2,"374":1,"383":3,"424":2,"425":2,"426":1,"444":2,"459":2,"463":1,"465":2,"466":1,"516":1,"518":4,"521":3,"522":3,"523":2,"524":2,"530":1,"534":1,"535":1,"536":3,"537":1,"538":2,"539":1,"540":1,"541":1,"563":2,"577":1,"620":1,"628":1,"629":1,"633":1,"642":1,"692":1,"714":2,"715":1,"716":1,"758":1,"759":1,"781":1,"782":1,"809":1,"863":2,"868":1,"870":2,"875":1,"897":5,"898":1,"900":2,"931":1,"933":1,"985":1,"986":2,"987":2,"988":26,"989":7,"990":6,"991":4,"992":3,"1019":1,"1042":2,"1043":1,"1044":1,"1100":3,"1104":3,"1116":4,"1118":2,"1185":1,"1212":2,"1233":1,"1252":2,"1254":1,"1259":7,"1262":1,"1263":2,"1265":1,"1270":12,"1273":1,"1274":1,"1278":7,"1286":45,"1289":2,"1290":1,"1300":4,"1301":1,"1309":2,"1311":1,"1318":3,"1323":6,"1352":1,"1355":1,"1357":2,"1358":1,"1359":36,"1369":1,"1395":1,"1396":7,"1399":1,"1402":20,"1406":1,"1410":2,"1415":27,"1436":10,"1438":3,"1452":1,"1454":5,"1455":5,"1459":2,"1473":6,"1475":1,"1478":4,"1483":1,"1492":1,"1496":45,"1508":1,"1524":1,"1526":1,"1534":1,"1577":1,"1591":6,"1600":3,"1627":2,"1631":1,"1651":6,"1653":1,"1655":1,"1662":1,"1664":2,"1665":2,"1667":1,"1672":1,"1673":1,"1685":1,"1686":1,"1699":1,"1721":1,"1727":2,"1733":1,"1749":2,"1761":2,"1765":3,"1769":1,"1774":1,"1801":2,"1819":1,"1822":1,"1827":1,"1837":1,"1838":2,"1839":1,"1840":14,"1845":1,"1847":1,"1852":4,"1853":1,"1861":1,"1888":1,"1941":1,"1944":3,"1950":2,"1958":1,"1977":1,"1986":1,"2021":1,"2056":1,"2058":2,"2091":1,"2098":1,"2115":1,"2134":1,"2162":1,"2163":2,"2164":1,"2165":2,"2166":2,"2170":3,"2171":3,"2187":3,"2194":2,"2195":1,"2234":2}}],["commits",{"0":{"1212":1,"2232":1},"3":{"0":3,"24":1,"94":1,"193":1,"195":1,"201":1,"352":1,"424":1,"444":1,"446":1,"452":2,"466":1,"517":1,"535":1,"536":2,"538":1,"539":3,"562":1,"564":2,"744":1,"793":1,"897":1,"900":1,"988":2,"1041":2,"1116":1,"1142":1,"1174":1,"1182":1,"1210":1,"1214":1,"1252":1,"1258":1,"1259":4,"1263":1,"1270":1,"1272":1,"1275":1,"1278":2,"1286":9,"1300":3,"1311":1,"1318":1,"1323":5,"1324":2,"1350":1,"1352":1,"1358":1,"1359":11,"1396":2,"1402":6,"1405":1,"1410":2,"1415":8,"1431":1,"1436":2,"1438":2,"1453":1,"1473":1,"1478":1,"1490":1,"1492":1,"1496":11,"1506":1,"1526":1,"1651":1,"1655":1,"1673":1,"1765":1,"1800":1,"1819":1,"1822":1,"1835":1,"1838":1,"1839":1,"1840":2,"1845":1,"1852":1,"1910":1,"1911":1,"1924":1,"1933":2,"1940":1,"1950":1,"1978":1,"2064":1,"2093":1,"2129":1,"2163":1,"2165":2,"2166":1,"2170":1,"2171":2,"2183":2,"2185":1,"2202":1}}],["corner",{"3":{"1847":1}}],["cornerstone",{"3":{"1779":1}}],["corporate",{"3":{"1324":1}}],["corpus",{"0":{"1435":1},"3":{"309":1,"945":2,"1016":1,"1018":5,"1019":5,"1020":2,"1091":3,"1092":2,"1093":1,"1300":1,"1427":10,"1428":1,"1435":7,"1437":1,"1438":3,"1492":5,"1496":4,"1577":1,"2173":1,"2178":2,"2181":1,"2182":1}}],["corollary",{"3":{"1237":1,"1998":1}}],["corspolicyallowall",{"2":{"774":1,"1108":1},"3":{"774":1,"1108":1,"1311":1}}],["corspolicyallowspecificorigins",{"2":{"774":1,"1108":1},"3":{"774":1,"1108":1,"1311":1}}],["cors",{"0":{"1336":1},"2":{"774":1,"776":1,"777":1},"3":{"0":5,"59":1,"60":1,"572":1,"749":1,"773":2,"774":6,"775":1,"776":3,"777":1,"778":4,"826":3,"834":1,"1107":1,"1108":1,"1109":1,"1111":1,"1112":1,"1184":2,"1185":1,"1187":2,"1189":1,"1212":1,"1311":10,"1324":7,"1336":4,"1338":4,"1339":9,"1379":1,"1429":1,"1436":3,"1438":1,"1443":1,"1447":2,"1467":2,"1488":1,"1653":1,"1666":1,"1670":1,"1671":1,"1673":1,"1687":1,"1702":1,"1898":2,"1904":1,"1969":1,"2024":2,"2056":1,"2153":1,"2234":1}}],["corrupting",{"3":{"1309":1,"1479":1}}],["corruption",{"3":{"0":1,"51":1,"53":2,"68":1,"1012":1,"1312":3,"1358":1,"1359":1,"1467":1,"1474":2,"1526":1,"1532":1,"1544":1,"1577":1,"1586":1,"1591":1,"1630":1,"1639":1,"1663":1,"1709":1,"2034":1,"2166":1}}],["corrupted",{"3":{"360":1,"692":1,"1226":1,"1229":1,"1396":1,"1412":1,"1415":1,"1438":1,"1467":1,"2144":1}}],["corrupt",{"3":{"312":1,"743":1,"947":1,"1223":1,"1229":2,"1237":1,"1300":1,"1311":1,"1312":2,"1324":2,"1395":2,"1402":1,"1417":5}}],["correspond",{"3":{"1369":1,"1396":1}}],["correspondence",{"3":{"1359":1}}],["corresponds",{"3":{"1339":1,"1396":1,"1641":2}}],["corresponding",{"3":{"838":1,"1237":1,"1247":1,"1270":1,"1271":1,"1279":1,"1286":1,"1300":1,"1323":1,"1324":3,"1359":1,"1395":1,"1417":1,"1436":4,"1466":1,"1517":1,"1627":1,"1641":1,"1654":1,"1765":1}}],["correspondingly",{"3":{"0":1,"549":1,"551":1,"1324":1,"2042":1}}],["correctfollowing",{"3":{"1526":1}}],["correcting",{"3":{"1396":1,"1455":1,"1460":1,"1496":1,"1776":1}}],["correction",{"3":{"22":1,"115":1,"137":2,"251":1,"254":1,"256":1,"260":1,"261":1,"323":1,"364":1,"365":1,"423":1,"424":1,"428":2,"490":1,"492":1,"493":1,"567":1,"616":1,"682":1,"684":1,"876":1,"1156":1,"1270":1,"1271":1,"1300":1,"1324":2,"1339":1,"1359":1,"1396":1,"1438":1,"1455":1,"1496":2,"1534":1,"1631":1,"1639":1,"1749":1,"1765":2,"1767":2,"1769":2,"1770":1,"1776":1}}],["corrections",{"3":{"21":1,"248":1,"259":1,"335":1,"383":1,"497":2,"764":1,"833":1,"857":1,"1040":1,"1496":6,"2234":1}}],["correctable",{"3":{"1323":1,"1766":1}}],["correctamente",{"3":{"265":1}}],["corrects",{"3":{"137":1,"138":1,"141":1,"171":1,"275":1,"616":1,"909":1,"1324":2,"1359":1,"1396":1,"1415":1,"1436":1,"1765":1}}],["correct",{"3":{"0":1,"20":1,"110":1,"119":1,"134":1,"136":1,"137":1,"157":1,"159":1,"196":1,"224":1,"235":1,"242":1,"243":1,"244":1,"251":1,"252":2,"254":2,"266":2,"281":1,"319":1,"320":1,"343":1,"360":1,"363":1,"391":1,"395":2,"490":1,"492":1,"493":1,"509":1,"534":1,"537":1,"539":1,"611":1,"633":1,"664":1,"665":1,"692":1,"699":1,"716":1,"735":1,"742":2,"743":1,"748":1,"768":1,"801":1,"809":1,"811":1,"818":1,"820":1,"821":1,"826":1,"827":1,"828":2,"829":1,"830":1,"837":1,"876":1,"890":1,"924":1,"930":1,"932":1,"933":1,"946":2,"948":1,"955":1,"965":2,"972":1,"989":2,"996":1,"998":1,"1019":1,"1093":1,"1100":1,"1118":1,"1135":1,"1160":1,"1169":1,"1212":1,"1219":1,"1229":2,"1237":1,"1247":6,"1252":1,"1259":5,"1260":1,"1270":6,"1286":23,"1300":10,"1301":1,"1309":2,"1311":6,"1312":1,"1323":8,"1324":12,"1339":6,"1350":3,"1359":16,"1369":1,"1380":1,"1395":5,"1396":10,"1402":3,"1415":8,"1417":15,"1436":20,"1441":1,"1442":1,"1443":1,"1455":5,"1467":2,"1474":1,"1477":1,"1479":1,"1489":3,"1496":3,"1498":3,"1548":1,"1558":1,"1563":1,"1577":2,"1585":1,"1591":1,"1596":1,"1631":1,"1637":1,"1638":2,"1639":1,"1640":1,"1651":1,"1654":1,"1666":1,"1685":1,"1686":2,"1708":1,"1746":1,"1749":1,"1750":1,"1765":1,"1767":1,"1768":1,"1785":1,"1805":1,"1825":1,"1826":1,"1833":1,"1838":1,"1843":2,"1844":2,"1845":1,"1852":1,"1870":1,"1884":1,"1885":1,"1894":1,"1895":1,"1898":1,"1904":1,"1910":2,"1911":1,"1913":1,"1914":1,"1927":1,"1942":1,"1947":1,"1949":1,"1997":1,"2027":1,"2035":2,"2050":1,"2051":1,"2062":2,"2068":1,"2070":1,"2076":1,"2098":1,"2109":1,"2115":1,"2120":1,"2129":1,"2144":1,"2167":1,"2170":1,"2194":1}}],["correctly",{"3":{"0":2,"160":1,"235":1,"507":1,"550":1,"571":1,"573":2,"790":1,"849":1,"904":1,"1246":1,"1247":1,"1275":1,"1286":4,"1297":1,"1300":3,"1301":1,"1311":3,"1323":4,"1324":1,"1339":2,"1353":1,"1359":6,"1369":1,"1395":2,"1396":3,"1416":1,"1417":2,"1427":1,"1429":1,"1436":15,"1437":1,"1438":1,"1457":1,"1466":1,"1496":1,"1556":2,"1564":1,"1638":1,"1671":1,"1685":1,"1686":1,"1708":1,"1815":1,"1909":1,"1923":1,"1940":1,"2056":1,"2072":1,"2087":1}}],["correctness",{"0":{"1879":1},"3":{"0":2,"20":1,"227":2,"244":1,"291":1,"295":1,"312":1,"320":1,"483":1,"538":1,"549":2,"566":1,"633":1,"642":1,"666":1,"698":1,"708":1,"733":1,"743":1,"827":1,"855":1,"996":2,"997":1,"1154":1,"1247":2,"1259":2,"1263":1,"1270":5,"1286":5,"1300":4,"1301":5,"1309":1,"1310":1,"1311":1,"1323":2,"1324":6,"1339":3,"1350":1,"1359":8,"1380":2,"1395":4,"1396":6,"1402":2,"1410":1,"1415":4,"1417":2,"1427":1,"1436":2,"1437":1,"1476":1,"1492":1,"1534":1,"1556":2,"1707":1,"1708":2,"1819":1,"1821":1,"1826":1,"1841":1,"1876":1,"1878":1,"1881":1,"1886":2,"1915":1,"1916":1,"1921":2,"1923":1,"1924":1,"1940":1,"1947":1,"1970":1,"1997":1,"2143":1,"2170":1}}],["corrected",{"3":{"0":2,"27":1,"43":1,"57":1,"63":1,"74":1,"82":1,"94":1,"130":3,"137":1,"140":1,"145":2,"161":1,"173":1,"181":1,"203":1,"220":1,"231":1,"256":2,"258":1,"263":1,"268":1,"273":1,"279":2,"285":1,"298":1,"345":1,"348":2,"365":1,"375":1,"407":1,"418":4,"426":1,"444":1,"446":2,"464":1,"465":1,"466":1,"468":3,"492":1,"502":1,"514":1,"526":1,"531":2,"534":5,"540":1,"549":1,"554":1,"578":1,"586":1,"589":1,"604":1,"607":2,"624":2,"638":1,"660":1,"672":1,"680":1,"685":1,"688":1,"693":1,"696":2,"713":1,"723":2,"736":1,"744":1,"761":1,"764":1,"777":1,"780":1,"797":1,"803":1,"806":1,"822":1,"833":1,"841":1,"857":1,"864":1,"877":1,"892":1,"900":1,"909":1,"917":1,"927":1,"960":1,"962":1,"986":1,"1010":1,"1029":1,"1037":1,"1048":1,"1055":1,"1070":1,"1103":1,"1324":3,"1438":1,"1455":1,"1496":22,"1500":2,"1767":1,"1769":1,"2087":1,"2234":2}}],["correlatable",{"3":{"1350":1}}],["correlating",{"3":{"1339":2,"1345":1,"1641":1}}],["correlationheader",{"3":{"1436":1}}],["correlationcontexttests",{"3":{"1199":1,"1207":2}}],["correlationcontext",{"3":{"1199":7,"1203":1,"1207":2,"1259":1,"1270":1,"1286":3,"1311":10,"1323":1}}],["correlation",{"0":{"1337":1},"3":{"0":9,"26":3,"59":1,"125":1,"193":1,"202":3,"395":2,"397":3,"398":2,"400":2,"407":1,"409":1,"572":1,"608":1,"664":1,"707":1,"714":1,"716":1,"749":1,"808":1,"810":1,"813":1,"815":1,"825":1,"826":5,"827":3,"829":1,"834":1,"899":1,"916":1,"1042":1,"1202":1,"1203":1,"1212":2,"1251":1,"1253":3,"1259":5,"1263":1,"1270":5,"1275":1,"1277":2,"1286":12,"1300":4,"1311":24,"1318":1,"1323":6,"1325":1,"1337":1,"1338":1,"1339":9,"1350":1,"1396":1,"1402":3,"1436":6,"1438":3,"1447":1,"1487":1,"1488":1,"1544":1,"1550":2,"1572":1,"1577":1,"1591":1,"1660":1,"1670":3,"1671":1,"1821":1,"1851":1,"2011":2,"2025":2,"2029":1,"2056":1,"2157":1,"2170":1,"2195":1,"2217":1,"2234":2}}],["correlationidmiddlewaretests",{"3":{"1199":1,"1207":2}}],["correlationidmiddleware",{"2":{"400":1,"409":1,"826":1,"2011":1,"2015":1,"2025":1},"3":{"397":8,"400":1,"409":2,"698":1,"826":2,"1199":3,"1203":1,"1207":2,"1286":1,"1311":13,"1337":1,"1339":2,"1438":1,"2011":1,"2015":1,"2025":1}}],["correlationid",{"2":{"15":1,"26":1,"810":1,"2188":1},"3":{"0":1,"15":1,"26":1,"715":1,"810":1,"1259":6,"1263":1,"1270":7,"1286":8,"1300":1,"1311":8,"1323":3,"1436":1,"1666":1,"2188":1}}],["correlate",{"3":{"813":1,"1323":1,"1396":3,"1402":4,"2195":1}}],["correlates",{"3":{"0":1,"856":1,"1286":1,"1665":1}}],["correlated",{"3":{"0":1,"24":1,"1255":1,"1259":1,"1270":4,"1309":1,"1401":1,"1402":2}}],["corelayers",{"2":{"1489":1},"3":{"1436":2,"1489":1}}],["cores",{"3":{"875":1,"1467":2}}],["corepublicresources",{"2":{"574":1},"3":{"574":1,"1436":3,"1488":1}}],["core",{"0":{"1506":1,"1643":1,"1662":1,"1764":1,"2208":1,"2221":1},"1":{"858":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"865":1,"936":1,"937":1,"938":1,"939":1,"940":1,"941":1,"942":1,"1272":1,"1273":1,"1274":1,"1275":1,"1276":1,"1277":1,"1278":1,"1279":1,"1280":1,"1281":1,"1282":1,"1283":1,"1284":1,"1285":1,"1286":1,"1863":1,"1864":1,"1865":1,"1866":1,"1867":1,"1868":1,"2142":1,"2143":1,"2144":1,"2145":1,"2146":1,"2147":1,"2148":1},"2":{"145":1,"147":1,"149":1,"152":1,"810":1,"960":1,"1067":1,"1074":1,"1075":1,"1225":1,"1426":1,"2178":1},"3":{"0":8,"10":1,"15":3,"24":5,"25":4,"26":9,"27":4,"31":1,"38":1,"39":4,"43":2,"54":1,"59":2,"62":1,"63":1,"68":2,"70":1,"71":3,"72":2,"74":5,"79":1,"80":1,"81":2,"82":1,"100":1,"109":8,"110":1,"111":2,"117":1,"121":3,"122":2,"123":4,"125":3,"126":3,"142":1,"145":4,"147":3,"149":1,"150":3,"152":1,"157":1,"161":1,"164":1,"166":8,"170":3,"171":2,"174":1,"185":1,"186":3,"190":1,"193":1,"196":2,"198":3,"200":2,"201":1,"202":7,"203":1,"207":1,"228":4,"230":4,"231":4,"235":1,"243":1,"246":6,"255":2,"265":2,"284":2,"285":3,"290":1,"291":1,"292":1,"295":2,"303":2,"305":5,"306":1,"310":3,"312":1,"314":2,"318":2,"328":1,"330":7,"331":1,"333":5,"336":1,"337":3,"341":8,"343":2,"344":6,"352":1,"353":2,"358":1,"359":5,"365":1,"370":1,"384":5,"387":2,"391":2,"395":2,"396":1,"397":10,"398":1,"400":1,"404":2,"405":1,"407":2,"408":1,"409":2,"411":1,"415":1,"442":1,"443":2,"444":2,"448":1,"451":1,"459":5,"463":2,"465":2,"469":4,"470":6,"471":1,"475":2,"476":3,"477":4,"481":1,"482":1,"497":6,"498":1,"499":4,"502":2,"522":1,"523":2,"524":1,"536":4,"539":1,"544":3,"545":9,"549":3,"550":1,"551":1,"552":1,"556":1,"558":1,"562":1,"563":1,"564":2,"572":1,"576":1,"583":6,"586":3,"591":1,"592":1,"593":1,"640":4,"644":1,"656":1,"657":5,"664":1,"665":1,"674":16,"676":7,"692":1,"697":1,"698":13,"700":1,"702":9,"703":6,"706":1,"707":3,"715":5,"720":3,"724":2,"725":2,"727":1,"732":1,"733":4,"736":3,"740":1,"741":4,"748":1,"782":3,"798":5,"799":4,"800":1,"804":1,"809":1,"810":2,"813":1,"818":1,"819":12,"822":1,"826":1,"831":1,"833":1,"837":1,"840":1,"846":4,"849":1,"850":1,"853":1,"854":3,"857":3,"858":1,"860":2,"861":2,"862":1,"881":2,"888":2,"890":1,"892":1,"897":2,"904":1,"905":4,"906":4,"908":3,"914":1,"915":1,"916":1,"917":1,"921":1,"922":8,"923":1,"926":5,"930":1,"931":7,"936":1,"939":1,"946":7,"953":1,"960":1,"962":1,"963":4,"964":5,"979":2,"987":3,"988":1,"995":3,"996":2,"999":1,"1004":2,"1018":2,"1034":8,"1036":1,"1037":1,"1041":4,"1042":19,"1043":1,"1044":2,"1045":2,"1049":4,"1050":13,"1052":2,"1055":2,"1058":3,"1059":20,"1067":1,"1074":4,"1075":2,"1081":1,"1082":3,"1083":2,"1086":1,"1091":7,"1100":2,"1103":1,"1107":1,"1108":3,"1116":2,"1119":1,"1124":1,"1132":1,"1133":5,"1140":7,"1150":5,"1160":1,"1168":4,"1174":1,"1175":26,"1192":1,"1202":3,"1203":3,"1211":1,"1212":5,"1213":4,"1217":2,"1219":3,"1220":1,"1222":1,"1223":2,"1225":3,"1226":3,"1227":2,"1228":2,"1229":36,"1230":1,"1231":7,"1232":5,"1233":8,"1234":12,"1235":1,"1236":7,"1237":97,"1239":7,"1240":4,"1241":7,"1242":2,"1243":6,"1244":2,"1246":4,"1247":119,"1249":1,"1251":1,"1259":63,"1260":1,"1261":2,"1262":4,"1263":2,"1264":2,"1265":3,"1266":1,"1267":5,"1268":1,"1269":1,"1270":141,"1271":56,"1272":2,"1273":5,"1274":2,"1275":2,"1276":8,"1277":4,"1278":10,"1279":9,"1280":1,"1281":4,"1282":1,"1283":2,"1284":2,"1285":7,"1286":625,"1288":5,"1289":9,"1290":10,"1291":12,"1292":6,"1293":9,"1294":8,"1295":6,"1296":5,"1297":17,"1299":2,"1300":603,"1301":51,"1302":6,"1303":8,"1304":4,"1305":5,"1306":7,"1307":9,"1308":2,"1309":122,"1310":46,"1311":89,"1312":14,"1314":1,"1315":3,"1316":9,"1317":9,"1318":7,"1319":2,"1320":24,"1321":2,"1322":14,"1323":234,"1324":29,"1330":3,"1332":1,"1333":3,"1336":1,"1337":1,"1338":1,"1339":45,"1341":1,"1343":2,"1350":31,"1351":1,"1352":1,"1359":223,"1360":1,"1361":1,"1362":2,"1363":1,"1369":12,"1380":14,"1395":5,"1396":84,"1402":17,"1414":1,"1415":75,"1416":5,"1417":3,"1418":1,"1419":2,"1420":6,"1421":1,"1422":3,"1423":5,"1424":5,"1425":3,"1426":2,"1427":39,"1430":2,"1431":1,"1433":3,"1435":4,"1436":85,"1437":8,"1438":13,"1441":2,"1442":3,"1443":7,"1447":1,"1451":1,"1453":1,"1454":1,"1456":2,"1461":1,"1465":1,"1467":6,"1486":5,"1487":2,"1488":4,"1489":3,"1490":2,"1496":25,"1497":1,"1526":3,"1531":2,"1534":1,"1535":1,"1559":1,"1560":1,"1576":2,"1577":13,"1582":3,"1583":1,"1585":2,"1586":2,"1591":1,"1596":1,"1599":1,"1602":1,"1605":1,"1629":1,"1630":1,"1640":1,"1641":1,"1642":1,"1643":1,"1646":1,"1648":1,"1653":1,"1660":9,"1661":1,"1664":1,"1668":1,"1671":2,"1677":1,"1682":1,"1692":1,"1693":2,"1707":1,"1708":1,"1739":1,"1752":1,"1779":2,"1782":1,"1790":1,"1793":1,"1805":2,"1806":1,"1807":1,"1810":3,"1811":1,"1813":1,"1815":6,"1817":2,"1825":1,"1829":1,"1853":1,"1862":2,"1863":2,"1864":1,"1868":1,"1895":1,"1896":1,"1898":1,"1903":1,"1922":1,"1929":1,"1934":1,"1940":1,"1970":1,"1988":1,"1989":1,"1990":1,"1995":2,"1999":1,"2001":6,"2003":1,"2007":2,"2011":2,"2017":2,"2027":1,"2029":2,"2033":1,"2040":1,"2041":1,"2044":2,"2051":1,"2054":1,"2056":2,"2060":1,"2062":1,"2065":2,"2066":1,"2068":4,"2073":1,"2081":1,"2101":1,"2106":2,"2109":1,"2141":1,"2142":3,"2144":1,"2148":3,"2155":2,"2156":1,"2158":3,"2160":1,"2162":1,"2178":1,"2209":1,"2210":1,"2213":1,"2217":1,"2221":3,"2222":1,"2227":1,"2229":4,"2234":4,"2236":1,"2238":1}}],["cone",{"1":{"2051":1,"2052":1,"2053":1,"2054":1,"2055":1,"2056":1,"2057":1,"2058":1,"2059":1,"2060":1,"2061":1},"3":{"2051":2,"2061":1,"2212":1}}],["conviction",{"3":{"2040":1}}],["convey",{"3":{"1396":1}}],["conveyed",{"3":{"1359":1,"1558":1}}],["conveys",{"3":{"332":1,"1991":1}}],["convene",{"3":{"2242":1}}],["convenient",{"3":{"1051":1,"1286":1,"1324":1,"1339":1,"1380":2,"1395":1,"1396":1,"1415":1,"1417":1,"1436":3,"1801":1,"1955":1,"1984":1,"2040":1,"2041":1}}],["conveniences",{"3":{"1270":1,"1395":1,"1436":1,"1805":1}}],["convenience",{"3":{"0":1,"318":1,"501":1,"782":1,"826":1,"1144":1,"1229":1,"1237":1,"1244":2,"1247":1,"1270":2,"1278":1,"1286":4,"1300":1,"1301":1,"1309":1,"1311":2,"1315":1,"1323":1,"1324":7,"1350":1,"1359":1,"1369":1,"1395":1,"1396":3,"1402":3,"1415":1,"1416":1,"1417":2,"1436":9,"1627":1,"1640":2,"1641":1,"1885":1,"1915":1,"1952":1,"1956":1,"1959":2,"1989":1,"1995":1,"2014":1,"2180":1}}],["conventiontests",{"3":{"1436":1}}],["conventionforeignkeysrestrictdeletes",{"3":{"1436":4}}],["conventiondeletes",{"2":{"1083":1},"3":{"1083":1,"1436":3}}],["conventionally",{"3":{"1237":1}}],["conventional",{"3":{"318":1,"657":1,"853":1,"1226":1,"1270":2,"1286":1,"1300":2,"1311":1,"1323":4,"1324":1,"1339":2,"1341":1,"1350":1,"1359":2,"1362":1,"1369":2,"1395":1,"1396":3,"1415":1,"1423":1,"1436":3,"1442":1,"2076":1,"2234":1}}],["conventionsource",{"3":{"1286":2}}],["conventions",{"0":{"1214":1,"1281":1},"1":{"1210":1,"1211":1,"1212":1,"1213":1,"1214":1,"1215":1,"1216":1},"3":{"0":1,"40":1,"164":1,"169":1,"707":1,"711":1,"801":1,"888":1,"889":1,"890":1,"891":1,"1004":2,"1020":1,"1035":1,"1050":2,"1051":1,"1083":2,"1086":1,"1090":1,"1174":1,"1176":1,"1178":1,"1192":2,"1202":1,"1203":6,"1207":46,"1210":1,"1212":1,"1229":1,"1247":2,"1259":3,"1270":1,"1271":1,"1272":1,"1273":1,"1280":2,"1281":7,"1282":1,"1286":37,"1300":9,"1310":1,"1311":4,"1324":1,"1350":1,"1362":2,"1369":1,"1380":7,"1396":7,"1403":1,"1415":3,"1427":2,"1431":2,"1436":9,"1437":6,"1438":3,"1452":1,"1488":1,"1489":2,"1496":1,"1526":1,"1537":2,"1546":1,"1552":2,"1557":1,"1571":2,"1574":1,"1577":1,"1591":1,"1654":1,"1671":3,"1687":1,"1690":1,"1701":1,"1702":1,"1775":1,"1797":1,"1811":1,"1856":1,"1952":1,"1958":1,"2064":1,"2065":1,"2066":1,"2090":2,"2100":1,"2106":3,"2213":1}}],["convention",{"0":{"1883":1,"1952":1},"1":{"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"1001":1,"1002":1,"1003":1,"1004":1,"1005":1,"1006":1,"1007":1,"1008":1},"2":{"1083":1,"2065":1},"3":{"0":22,"3":1,"4":1,"5":1,"6":1,"47":1,"53":2,"76":2,"79":1,"80":2,"89":1,"107":1,"117":1,"122":1,"134":1,"139":1,"140":1,"141":1,"142":1,"147":1,"162":1,"167":1,"169":1,"175":1,"216":1,"279":1,"283":1,"299":1,"301":1,"302":1,"305":1,"342":1,"343":1,"360":1,"381":1,"382":1,"388":1,"455":1,"469":1,"472":1,"473":1,"482":1,"483":1,"550":1,"564":1,"565":2,"583":1,"585":1,"620":1,"676":1,"713":1,"718":1,"726":1,"741":1,"743":1,"782":1,"784":1,"785":2,"801":2,"802":1,"845":1,"887":1,"888":1,"889":11,"890":3,"891":2,"892":1,"893":2,"899":1,"916":1,"922":1,"924":2,"947":1,"948":1,"956":1,"989":1,"1001":1,"1003":1,"1004":2,"1005":1,"1008":1,"1018":1,"1019":2,"1034":4,"1035":1,"1050":3,"1051":4,"1052":1,"1083":8,"1084":2,"1085":1,"1087":1,"1091":1,"1134":1,"1137":1,"1160":2,"1162":1,"1164":1,"1168":2,"1171":1,"1192":2,"1210":1,"1212":1,"1214":1,"1229":1,"1237":4,"1239":1,"1247":8,"1249":2,"1255":1,"1259":7,"1270":14,"1271":9,"1281":14,"1286":68,"1300":38,"1301":1,"1309":3,"1310":1,"1311":23,"1312":2,"1315":1,"1316":1,"1323":19,"1324":18,"1335":1,"1339":2,"1350":12,"1353":1,"1354":1,"1359":83,"1362":4,"1369":12,"1380":5,"1395":11,"1396":45,"1400":1,"1402":14,"1415":31,"1416":3,"1417":3,"1418":1,"1425":1,"1427":1,"1431":3,"1436":90,"1437":1,"1438":3,"1455":2,"1461":1,"1467":3,"1473":1,"1488":1,"1489":2,"1492":1,"1493":1,"1496":3,"1497":1,"1500":1,"1526":3,"1539":1,"1541":1,"1545":1,"1575":2,"1577":6,"1584":1,"1585":1,"1586":2,"1591":2,"1596":1,"1630":1,"1631":1,"1632":1,"1649":2,"1651":4,"1656":3,"1661":1,"1662":1,"1664":1,"1672":1,"1673":1,"1685":1,"1686":1,"1701":1,"1703":1,"1720":1,"1730":1,"1736":1,"1790":1,"1792":1,"1793":1,"1794":1,"1800":1,"1802":2,"1810":4,"1811":1,"1830":3,"1849":2,"1856":1,"1858":3,"1860":1,"1875":1,"1877":1,"1882":1,"1883":1,"1886":1,"1889":1,"1891":1,"1902":1,"1949":1,"1951":2,"1952":3,"1954":1,"1956":1,"1958":2,"1959":2,"2001":2,"2014":1,"2032":1,"2040":2,"2044":3,"2046":1,"2050":1,"2054":1,"2064":1,"2065":2,"2066":2,"2095":1,"2097":1,"2099":1,"2102":1,"2109":1,"2139":1,"2140":1,"2152":1,"2154":1,"2165":1,"2170":1,"2179":1,"2234":3}}],["conversely",{"3":{"1396":1,"1550":1}}],["conversation",{"3":{"1359":1,"1423":1,"1427":1}}],["conversion",{"3":{"0":1,"109":1,"111":1,"360":1,"545":1,"547":1,"550":1,"657":1,"698":1,"1237":5,"1269":1,"1270":2,"1271":1,"1281":1,"1286":4,"1300":6,"1311":1,"1324":1,"1339":1,"1350":4,"1356":1,"1359":15,"1369":9,"1395":13,"1396":4,"1415":3,"1417":1,"1427":1,"1438":2,"1577":1,"1639":1,"2148":1}}],["conversions",{"3":{"0":1,"110":1,"657":1,"798":1,"806":1,"964":2,"1034":1,"1050":2,"1191":1,"1203":11,"1207":56,"1220":1,"1229":1,"1237":4,"1273":1,"1277":1,"1281":1,"1282":4,"1286":32,"1362":1,"1369":1,"1395":1,"1496":3,"1662":1,"1805":2}}],["converge",{"3":{"539":1,"838":1,"840":1,"881":1,"1311":1,"1324":3,"1369":1,"1396":2,"1402":2,"1411":1,"1415":2,"1441":1,"2168":1,"2169":1}}],["convergence",{"3":{"260":1,"840":1,"1415":1,"1465":1}}],["converges",{"3":{"109":1,"1417":1,"1436":1,"1765":3,"1806":1,"2062":1}}],["converged",{"0":{"91":1},"3":{"0":2,"97":1,"101":1,"148":1,"755":1,"1090":1,"1599":1,"2026":1}}],["converttimefromutc",{"2":{"1639":1},"3":{"1639":1}}],["converttimetoutc",{"2":{"1348":1},"3":{"1348":1,"1350":2,"1395":1}}],["convertto",{"3":{"1300":1}}],["convertfrom",{"3":{"1300":2}}],["convertfromrsasecuritykey",{"2":{"1300":1},"3":{"1300":1}}],["convertfrominvariantstring",{"3":{"1286":1}}],["convertname",{"3":{"1247":1}}],["convertible",{"3":{"1237":1}}],["converting",{"3":{"0":1,"110":1,"826":1,"964":1,"1237":2,"1270":3,"1311":3,"1323":1,"1339":1,"1350":2,"1359":1,"1378":1,"1396":3,"1427":1,"1436":1,"1770":1}}],["converted",{"3":{"881":1,"964":1,"1050":1,"1234":1,"1235":1,"1244":1,"1270":1,"1286":3,"1289":1,"1300":1,"1312":1,"1323":2,"1324":1,"1348":1,"1350":2,"1359":4,"1380":1,"1395":3,"1396":2,"1402":1,"1415":4,"1639":1,"2069":1,"2187":1}}],["convertertype",{"3":{"1050":1,"1286":2,"1300":1}}],["converters",{"2":{"964":1,"1235":1},"3":{"0":3,"472":1,"656":1,"658":1,"659":3,"800":1,"963":1,"964":4,"1050":2,"1051":1,"1192":1,"1202":1,"1203":1,"1212":1,"1223":1,"1229":7,"1235":1,"1237":2,"1272":1,"1282":1,"1286":2,"1311":6,"1431":1,"1436":1,"1496":1,"1662":3}}],["converter",{"0":{"2144":1},"1":{"356":1,"357":1,"358":1,"359":1,"360":1,"361":1,"362":1,"363":1,"364":1,"365":1,"366":1},"3":{"0":2,"356":1,"357":1,"358":2,"359":10,"361":4,"362":2,"363":2,"364":1,"365":8,"366":1,"470":1,"471":1,"605":1,"655":1,"656":1,"657":4,"659":1,"660":1,"798":2,"800":1,"806":1,"963":2,"964":7,"965":3,"967":1,"1034":1,"1035":1,"1050":4,"1051":2,"1052":2,"1055":2,"1192":1,"1212":1,"1223":3,"1229":7,"1237":10,"1241":1,"1247":1,"1270":1,"1272":1,"1281":1,"1284":2,"1286":45,"1300":10,"1309":3,"1311":10,"1350":1,"1369":7,"1396":1,"1415":6,"1436":5,"1496":1,"1498":1,"1577":1,"1903":3,"2064":2,"2142":2,"2144":8,"2145":4,"2146":2,"2147":1,"2234":1}}],["convert",{"3":{"461":1,"905":2,"1077":1,"1300":9,"1309":1,"1311":1,"1324":2,"1332":1,"1339":1,"1359":1,"1395":2,"1427":1,"1436":2,"1525":1,"1576":1,"1585":1,"1768":1,"1802":1}}],["converts",{"3":{"0":3,"87":1,"109":4,"122":1,"235":1,"295":1,"610":1,"627":1,"675":1,"726":1,"758":1,"767":1,"820":1,"881":1,"947":1,"964":1,"1034":1,"1050":2,"1052":1,"1055":1,"1143":1,"1225":1,"1226":1,"1229":1,"1237":1,"1244":1,"1247":6,"1270":3,"1271":2,"1300":3,"1309":2,"1311":4,"1315":1,"1323":1,"1324":7,"1332":1,"1339":4,"1350":3,"1358":1,"1359":8,"1369":2,"1380":1,"1395":10,"1396":8,"1415":7,"1417":1,"1436":2,"1443":1,"1475":1,"1489":2,"1702":2,"1765":1,"1831":1,"2013":1,"2033":1,"2039":2,"2205":1}}],["condensed",{"3":{"2001":1,"2009":1,"2086":1,"2158":1}}],["conduct",{"3":{"1673":1}}],["conditioned",{"3":{"631":1,"633":2,"1286":1,"1535":1,"1591":1,"1874":1}}],["conditions",{"3":{"140":1,"188":1,"341":1,"549":1,"626":1,"766":1,"1073":1,"1247":1,"1270":3,"1274":1,"1310":1,"1311":3,"1324":2,"1359":4,"1369":1,"1395":1,"1417":1,"1455":1,"1463":1,"1918":1,"1964":1,"2198":1,"2205":1}}],["condition",{"3":{"1":1,"135":1,"138":2,"141":1,"195":1,"200":1,"201":1,"319":1,"342":1,"343":1,"474":2,"529":1,"567":1,"624":1,"626":4,"628":1,"629":1,"633":2,"684":1,"757":1,"764":2,"766":2,"797":1,"798":1,"800":1,"808":1,"809":1,"813":1,"831":1,"863":1,"922":1,"931":1,"997":1,"998":1,"1067":1,"1139":1,"1149":1,"1220":1,"1247":3,"1270":1,"1286":4,"1300":1,"1309":1,"1311":3,"1323":1,"1324":3,"1328":1,"1339":1,"1358":1,"1359":10,"1395":4,"1396":4,"1415":1,"1416":1,"1417":2,"1429":1,"1430":1,"1433":1,"1436":9,"1441":1,"1443":1,"1444":2,"1449":1,"1453":1,"1454":1,"1455":7,"1459":1,"1467":1,"1475":1,"1486":1,"1492":5,"1524":1,"1525":1,"1526":3,"1531":1,"1591":5,"1596":1,"1599":1,"1600":1,"1640":1,"1653":1,"1687":1,"1876":2,"2057":1}}],["conditionality",{"3":{"1531":1}}],["conditionalweaktable",{"2":{"1274":1},"3":{"1274":1,"1286":9,"1323":1}}],["conditionalwrite",{"3":{"1270":1}}],["conditionalwriteroottouchtests",{"3":{"1199":1,"1207":2}}],["conditionalwriteconventiontests",{"3":{"1199":2,"1207":4,"1311":2,"1380":3,"1437":2,"1438":4}}],["conditionals",{"3":{"1247":1,"1286":1,"1324":1,"1350":1,"1396":1,"1761":1}}],["conditionally",{"3":{"245":1,"674":1,"996":1,"1176":1,"1180":1,"1259":1,"1278":1,"1286":3,"1311":2,"1324":3,"1339":1,"1359":2,"1364":1,"1395":1,"1396":2,"1416":1,"1455":1,"1466":1,"1467":1,"1526":1,"1577":1,"1773":1,"1814":1,"1958":1,"2013":1,"2181":1}}],["conditional",{"0":{"1375":1},"3":{"0":8,"6":2,"109":1,"259":1,"260":1,"261":1,"339":1,"340":1,"341":1,"342":2,"343":2,"344":1,"401":1,"413":1,"535":1,"556":1,"599":3,"609":1,"624":3,"626":1,"703":1,"749":1,"764":1,"809":1,"879":1,"905":2,"920":1,"921":1,"922":2,"995":1,"996":2,"998":1,"1108":1,"1110":1,"1212":2,"1237":3,"1255":1,"1259":1,"1265":1,"1270":7,"1275":1,"1278":1,"1286":13,"1290":1,"1300":11,"1306":1,"1309":3,"1310":1,"1311":14,"1316":1,"1323":4,"1324":8,"1333":1,"1339":3,"1350":2,"1359":48,"1373":1,"1375":1,"1380":12,"1389":1,"1395":15,"1396":12,"1402":6,"1415":2,"1416":2,"1417":3,"1419":1,"1421":1,"1427":2,"1436":4,"1437":2,"1438":2,"1443":1,"1455":3,"1467":8,"1469":1,"1526":2,"1531":2,"1532":1,"1565":1,"1577":2,"1590":1,"1591":1,"1600":1,"1631":1,"1640":1,"1651":1,"1685":1,"1702":1,"1727":1,"1748":2,"1749":1,"1765":3,"1856":1,"1871":2,"1874":2,"1876":3,"1898":2,"1952":2,"1955":1,"1958":1,"1982":1,"2125":1,"2160":1,"2163":1,"2187":1,"2234":1}}],["conn",{"3":{"1467":1,"1496":1,"1577":1}}],["connectasync",{"3":{"1339":1}}],["connecttimeout",{"3":{"1324":1,"1339":1}}],["connecting",{"3":{"1190":1,"1324":1,"1438":1,"1455":1}}],["connectivitychangedeventargs",{"3":{"1417":1}}],["connectivitychanged",{"3":{"1417":7}}],["connectivity",{"3":{"291":1,"412":1,"413":1,"1192":1,"1202":1,"1203":1,"1324":1,"1337":1,"1395":1,"1417":15,"1455":1,"1496":1,"1669":1,"2120":1}}],["connectionfactory",{"3":{"1324":2}}],["connectionid",{"3":{"1309":1}}],["connectionidentityincludesdatabasename",{"2":{"1279":1},"3":{"1279":1,"1286":3}}],["connectionmode",{"3":{"1286":2}}],["connectionmultiplexer",{"2":{"1301":1},"3":{"733":1,"1301":4,"1339":2}}],["connectionname",{"3":{"243":1,"1301":1,"1332":2,"1339":5}}],["connectionsperuser",{"3":{"1309":1,"1323":1}}],["connectionstringexpression",{"2":{"1327":1},"3":{"1327":1,"1339":2}}],["connectionstringfor",{"3":{"1286":7}}],["connectionstringrequired",{"2":{"1175":1,"1280":1},"3":{"1175":1,"1280":1,"1286":4}}],["connectionstringsettingstests",{"3":{"1199":1,"1207":1}}],["connectionstringsettings",{"2":{"1175":1,"1272":1,"1279":1,"1320":1},"3":{"674":1,"1175":3,"1177":1,"1199":27,"1203":1,"1207":2,"1272":1,"1279":2,"1286":29,"1320":4,"1323":3}}],["connectionstringsettingsvalidatortests",{"3":{"1199":1,"1207":2,"1286":1,"1438":2}}],["connectionstringsettingsvalidator",{"2":{"170":1,"676":1,"1279":1,"1320":1},"3":{"170":2,"676":2,"1199":3,"1203":1,"1207":2,"1279":2,"1286":31,"1320":4,"1323":2}}],["connectionstrings",{"2":{"640":1,"1332":1,"1441":1,"1446":1,"1652":1,"1722":1,"1729":1},"3":{"166":1,"640":3,"676":1,"1034":1,"1279":3,"1286":18,"1323":6,"1332":1,"1335":2,"1339":4,"1436":2,"1441":1,"1443":1,"1446":1,"1467":2,"1652":1,"1722":1,"1729":1}}],["connectionstring",{"2":{"440":1,"601":1,"604":1,"640":1,"644":1},"3":{"0":1,"170":1,"434":1,"440":1,"601":1,"604":1,"640":3,"644":1,"1067":1,"1286":10,"1323":13,"1339":3,"1429":1,"1436":2,"1441":1,"1467":2,"2128":1}}],["connections",{"0":{"2012":1},"2":{"1443":1,"1677":1},"3":{"0":3,"174":1,"223":1,"378":1,"382":1,"384":1,"608":1,"818":1,"1035":1,"1124":1,"1273":1,"1286":3,"1296":1,"1300":1,"1302":2,"1307":2,"1309":5,"1323":3,"1324":4,"1329":2,"1339":2,"1436":3,"1443":3,"1467":4,"1474":1,"1490":1,"1653":1,"1667":1,"1677":1,"1840":1,"1945":2,"1949":1,"2012":1,"2015":1,"2076":1,"2160":1}}],["connectionaborted",{"2":{"135":1},"3":{"0":1,"135":2,"1309":3,"1436":3}}],["connection",{"2":{"175":1,"397":1,"914":1,"1333":1,"1337":1,"1443":1,"1446":1,"1467":1,"2011":1,"2158":1,"2161":1},"3":{"0":11,"71":1,"72":1,"100":2,"109":1,"155":1,"159":1,"164":2,"166":2,"168":1,"170":4,"171":1,"175":1,"179":1,"225":1,"227":1,"228":3,"234":2,"235":4,"236":1,"237":2,"241":1,"243":2,"245":1,"259":2,"260":2,"261":1,"358":1,"379":2,"380":2,"381":2,"384":2,"390":1,"392":1,"397":2,"572":1,"598":3,"599":7,"601":2,"602":1,"604":1,"605":1,"608":2,"610":1,"633":1,"640":5,"642":1,"643":2,"644":1,"673":1,"698":3,"699":1,"700":2,"733":1,"736":1,"742":1,"749":1,"819":2,"820":1,"827":1,"830":1,"832":1,"881":1,"905":1,"914":5,"988":2,"996":2,"998":1,"1034":3,"1036":1,"1043":1,"1066":1,"1067":1,"1123":2,"1133":1,"1150":1,"1175":4,"1176":1,"1192":1,"1212":3,"1225":1,"1259":2,"1273":1,"1276":1,"1278":2,"1279":7,"1280":4,"1284":1,"1286":112,"1299":1,"1300":11,"1301":3,"1307":5,"1309":19,"1311":17,"1312":5,"1320":3,"1323":30,"1324":41,"1326":3,"1328":2,"1329":2,"1330":1,"1332":4,"1333":1,"1334":3,"1335":1,"1337":1,"1338":1,"1339":63,"1349":1,"1378":1,"1379":1,"1380":4,"1395":2,"1396":6,"1400":2,"1402":1,"1415":2,"1416":2,"1417":3,"1429":6,"1430":4,"1436":33,"1438":6,"1441":3,"1442":3,"1443":7,"1444":3,"1446":2,"1447":4,"1449":1,"1451":1,"1455":1,"1460":1,"1467":26,"1473":2,"1474":2,"1477":3,"1481":2,"1486":1,"1488":4,"1490":1,"1492":1,"1496":2,"1526":1,"1548":1,"1591":1,"1652":3,"1653":2,"1663":1,"1664":3,"1668":2,"1670":2,"1671":1,"1677":3,"1684":4,"1688":1,"1697":1,"1702":1,"1719":2,"1720":1,"1724":1,"1727":1,"1790":2,"1806":1,"1847":1,"1849":4,"1851":1,"1853":1,"1857":1,"1906":1,"1916":2,"1923":2,"1927":1,"1935":6,"1940":1,"1942":2,"1943":1,"1944":2,"1945":5,"1949":1,"1950":1,"2001":2,"2003":1,"2004":1,"2008":1,"2009":3,"2011":1,"2012":1,"2013":1,"2032":1,"2033":1,"2054":1,"2057":2,"2120":1,"2129":1,"2142":1,"2143":1,"2154":1,"2158":2,"2160":3,"2161":1,"2162":1,"2195":1,"2232":1,"2234":2}}],["connect",{"3":{"212":1,"213":1,"214":3,"215":1,"216":2,"219":4,"225":1,"1193":1,"1300":1,"1311":2,"1312":2,"1324":14,"1339":8,"1340":1,"1342":1,"1350":3,"1359":1,"1364":1,"1369":1,"1392":1,"1395":1,"1438":3,"1441":1,"1446":1,"1452":1,"1467":2,"1477":1,"1525":1,"1526":2,"1636":1,"2031":1,"2149":1,"2150":1,"2152":5,"2154":1,"2155":2,"2246":1}}],["connects",{"3":{"0":1,"272":1,"382":1,"1184":1,"1324":1,"1359":1,"1397":1,"1436":3,"1467":2,"1473":1,"1489":1,"1596":1,"1949":1,"2048":1}}],["connected",{"3":{"0":3,"135":2,"139":1,"193":1,"200":2,"224":1,"226":1,"227":1,"272":1,"433":1,"1123":1,"1237":1,"1257":1,"1286":1,"1302":1,"1304":1,"1307":1,"1309":7,"1311":1,"1324":2,"1395":2,"1396":1,"1402":2,"1415":1,"1436":9,"1438":2,"1932":1,"1936":1,"1940":1,"1946":1,"2040":1}}],["conjure",{"3":{"1415":1}}],["conjunction",{"3":{"1324":1}}],["conjunct",{"3":{"1237":1}}],["conjoined",{"3":{"1237":1}}],["concise",{"3":{"1311":1}}],["concretions",{"3":{"1309":1,"1538":1}}],["concretion",{"3":{"1309":2}}],["concretes",{"3":{"1436":1}}],["concreteenginebranching",{"3":{"1436":3}}],["concreteclasses",{"3":{"1436":11}}],["concretely",{"3":{"1271":1,"1286":1,"1312":1,"1324":1,"1359":5,"1396":1,"1417":1,"1436":1,"1790":1,"2017":1}}],["concretedomainexception",{"3":{"1199":2,"1207":1}}],["concrete",{"0":{"1957":1},"3":{"0":3,"5":1,"7":1,"47":1,"76":2,"78":1,"80":3,"81":1,"117":1,"136":1,"151":1,"160":1,"166":1,"185":1,"189":1,"243":1,"255":1,"318":1,"329":1,"331":1,"405":1,"449":1,"468":1,"469":1,"470":2,"474":1,"477":1,"518":1,"543":1,"545":1,"583":1,"657":1,"674":2,"675":1,"714":1,"725":3,"726":1,"782":1,"799":1,"848":1,"914":1,"921":1,"922":2,"926":1,"963":2,"964":3,"965":2,"966":1,"1058":1,"1060":2,"1100":2,"1168":4,"1169":1,"1170":1,"1212":9,"1217":1,"1223":1,"1226":1,"1229":6,"1230":1,"1231":2,"1234":1,"1235":1,"1236":1,"1237":11,"1239":2,"1240":1,"1244":1,"1247":12,"1249":1,"1257":1,"1259":14,"1261":1,"1262":1,"1265":1,"1266":1,"1270":7,"1271":1,"1278":1,"1282":2,"1286":40,"1287":1,"1288":1,"1289":2,"1300":20,"1301":1,"1302":1,"1303":1,"1309":11,"1310":9,"1311":21,"1312":2,"1315":2,"1316":1,"1320":1,"1322":1,"1323":27,"1324":9,"1331":1,"1332":1,"1333":1,"1334":1,"1339":3,"1350":8,"1352":1,"1354":1,"1359":86,"1360":1,"1363":2,"1366":1,"1369":8,"1370":1,"1371":1,"1380":7,"1381":1,"1383":1,"1395":28,"1396":20,"1402":1,"1412":1,"1415":17,"1417":6,"1421":1,"1427":3,"1428":2,"1429":1,"1436":81,"1438":1,"1455":2,"1465":1,"1488":2,"1489":2,"1490":1,"1491":1,"1496":2,"1498":1,"1526":1,"1536":1,"1538":1,"1577":2,"1585":2,"1634":1,"1646":1,"1651":3,"1656":1,"1666":1,"1697":1,"1700":2,"1719":1,"1797":1,"1804":1,"1806":1,"1810":3,"1815":1,"1820":1,"1824":1,"1829":1,"1848":1,"1849":1,"1856":2,"1871":1,"1879":1,"1881":1,"1883":1,"1889":1,"1891":3,"1895":1,"1915":1,"1922":1,"1929":3,"1930":3,"1931":2,"1941":1,"1952":1,"1953":1,"1987":1,"1988":1,"2072":1,"2074":1,"2076":1,"2080":1,"2081":1,"2082":2,"2173":1,"2232":1}}],["concat",{"3":{"1270":2,"1300":1,"1301":2,"1323":1,"1395":2,"1467":1,"1496":3}}],["concatenating",{"3":{"1132":1,"1324":1,"1350":1}}],["concatenation",{"3":{"86":1,"265":2,"1018":1,"1247":2,"1286":1,"1311":1,"1324":1,"1359":1,"1436":4,"1526":1,"1564":1}}],["concatenates",{"3":{"219":1,"359":1,"651":1,"1242":1,"1286":1,"1324":1,"1339":1,"1359":1,"1395":2,"1396":1,"1422":1,"1427":1}}],["concatenated",{"3":{"0":2,"230":1,"665":1,"1018":1,"1133":2,"1135":2,"1212":1,"1241":1,"1247":1,"1286":2,"1300":2,"1324":3,"1359":1,"1395":1,"1396":1,"1416":1,"1431":1,"1436":4,"1553":1,"1564":1,"1815":1,"1989":1,"1990":2,"2044":1}}],["concluding",{"3":{"486":1,"1467":1,"1476":1}}],["concluded",{"3":{"626":2,"640":1,"1075":1,"1438":1,"1455":2,"1475":1,"1492":1,"1526":2}}],["concludes",{"3":{"529":1,"1395":1,"1445":1,"1455":1,"1456":1,"1630":1}}],["conclude",{"3":{"230":1,"626":2,"820":1,"1286":1,"1455":2,"1492":1,"1526":1,"2033":1}}],["conclusions",{"3":{"624":1,"640":1}}],["conclusion",{"3":{"0":2,"122":1,"230":1,"241":1,"256":1,"624":3,"626":2,"627":1,"640":1,"803":1,"804":1,"1051":1,"1090":1,"1263":1,"1270":2,"1300":1,"1309":1,"1359":2,"1455":4,"1456":1,"1492":2,"1821":1,"1952":1,"2172":1,"2191":1}}],["concentrating",{"3":{"1286":1,"1300":1,"1323":1,"1369":1}}],["concentrate",{"3":{"1638":1}}],["concentrates",{"3":{"799":1,"802":1,"1053":1,"1110":1,"1416":2,"1898":1}}],["concentrated",{"3":{"799":1,"1286":1}}],["concert",{"3":{"1270":1}}],["concerned",{"3":{"1300":2,"1940":1}}],["concern",{"0":{"1879":1},"3":{"40":1,"49":1,"70":1,"73":1,"117":1,"119":1,"134":1,"139":1,"156":1,"162":2,"176":1,"177":1,"188":1,"223":1,"302":1,"317":1,"340":1,"342":1,"346":1,"351":1,"413":1,"416":1,"447":1,"648":1,"673":1,"683":1,"692":2,"698":1,"699":1,"714":1,"717":1,"827":2,"846":1,"1091":1,"1191":1,"1192":1,"1194":1,"1200":1,"1201":1,"1229":1,"1259":2,"1260":1,"1264":1,"1267":1,"1270":8,"1271":1,"1282":1,"1286":7,"1300":7,"1309":3,"1311":9,"1312":2,"1316":1,"1323":7,"1324":8,"1339":3,"1353":1,"1359":18,"1360":1,"1369":2,"1380":9,"1387":1,"1395":12,"1396":7,"1402":5,"1415":7,"1417":6,"1422":1,"1423":1,"1427":1,"1436":16,"1490":2,"1496":3,"1507":2,"1511":1,"1515":1,"1554":1,"1577":3,"1601":1,"1638":3,"1640":1,"1641":1,"1753":1,"1815":1,"1819":1,"1821":1,"1823":1,"1826":2,"1827":4,"1831":1,"1834":1,"1852":1,"1871":1,"1886":1,"1914":1,"1915":1,"1927":1,"1928":1,"1964":1,"1969":1,"1974":1,"1993":3,"2002":1,"2032":1,"2072":1,"2074":1,"2109":1,"2132":1,"2136":2,"2140":1,"2141":2,"2150":1,"2177":1,"2182":2}}],["concerns",{"0":{"1753":1,"2064":1},"3":{"0":1,"39":1,"61":1,"116":3,"117":2,"194":1,"255":1,"611":1,"673":1,"826":2,"1011":1,"1013":1,"1076":1,"1191":1,"1195":1,"1200":1,"1212":1,"1231":1,"1232":1,"1237":2,"1259":1,"1260":1,"1261":1,"1270":3,"1286":6,"1300":2,"1301":1,"1311":11,"1312":2,"1313":1,"1323":1,"1324":6,"1325":1,"1339":2,"1347":1,"1359":8,"1360":1,"1380":2,"1395":2,"1396":8,"1415":2,"1416":1,"1417":8,"1436":3,"1490":1,"1505":1,"1526":1,"1534":1,"1536":2,"1538":1,"1540":1,"1542":1,"1547":1,"1551":1,"1555":1,"1565":1,"1575":1,"1599":1,"1638":2,"1641":1,"1664":1,"1680":1,"1780":1,"1796":3,"1807":1,"1810":1,"1818":2,"1819":1,"1820":1,"1826":1,"1827":2,"1933":1,"2024":1,"2064":1,"2071":1,"2074":1,"2076":1,"2098":1,"2141":1,"2210":1,"2232":1}}],["concession",{"3":{"557":1,"1436":1}}],["conceptual",{"3":{"1259":1,"1339":1,"1638":1}}],["conceptually",{"3":{"1201":1,"1259":1,"1300":1,"1323":1,"1339":2,"1436":1}}],["concepts",{"1":{"1210":1,"1211":1,"1212":1,"1213":1,"1214":1,"1215":1,"1216":1},"3":{"1192":1,"1210":1,"1212":1,"1213":1,"1230":1,"1234":1,"1247":1,"1286":2,"1300":1,"1309":1,"1359":1,"1369":1,"1395":1,"1502":1,"1541":1,"1867":1,"1958":1,"2232":1}}],["concept",{"1":{"1502":1,"1503":1,"1504":1,"1505":1,"1506":1,"1507":1,"1508":1,"1509":1,"1510":1,"1511":1,"1512":1,"1513":1,"1514":1,"1515":1,"1516":1,"1517":1},"3":{"0":1,"319":1,"690":1,"1004":1,"1074":1,"1190":1,"1193":1,"1217":1,"1229":18,"1237":40,"1247":43,"1259":45,"1270":61,"1271":11,"1286":191,"1300":176,"1301":13,"1309":61,"1310":12,"1311":104,"1312":7,"1323":104,"1324":184,"1339":75,"1350":118,"1359":398,"1369":43,"1380":65,"1395":171,"1396":240,"1402":107,"1415":134,"1416":21,"1417":104,"1427":26,"1436":442,"1496":12,"1502":1,"1718":1,"1727":1,"1776":1,"1814":1}}],["concurrencyconflictdetector",{"2":{"1359":1},"3":{"1359":2}}],["concurrencyconventiontests",{"3":{"341":2,"1199":2,"1207":4,"1436":38,"1489":2,"1526":1,"1577":1,"1591":1}}],["concurrencyconventiontestsbase",{"2":{"341":1,"1651":1,"1654":1,"1875":1},"3":{"341":2,"1199":3,"1207":2,"1311":1,"1436":10,"1651":1,"1654":1,"1875":1}}],["concurrencylimiter",{"3":{"1324":1}}],["concurrencylimiteroptions",{"3":{"1324":1,"1339":1}}],["concurrencytokenrequest",{"3":{"1496":2}}],["concurrencytrackingtokenstorage",{"3":{"1199":2,"1207":1}}],["concurrencytagof",{"3":{"341":1,"881":1,"1311":1,"1324":2}}],["concurrencypartitionkey",{"3":{"1324":1}}],["concurrencypartition",{"3":{"827":1,"1324":1,"1337":1,"1339":2}}],["concurrencyetagtests",{"3":{"1199":1,"1207":2,"1300":2,"1438":1}}],["concurrencyetag",{"2":{"341":1,"881":1},"3":{"341":5,"881":1,"1199":17,"1203":1,"1207":2,"1300":20,"1311":8,"1324":2,"1350":2,"1382":1,"1389":1,"1395":7,"1396":5,"1438":1,"1496":3,"1662":1}}],["concurrency",{"0":{"1909":1},"1":{"338":1,"339":1,"340":1,"341":1,"342":1,"343":1,"344":1,"345":1,"346":1,"1869":1,"1870":1,"1871":1,"1872":1,"1873":1,"1874":1,"1875":1,"1876":1,"1877":1},"2":{"341":3,"1873":1},"3":{"0":10,"109":1,"136":1,"195":1,"201":1,"338":1,"339":1,"340":2,"341":5,"342":1,"343":5,"345":2,"346":1,"536":2,"538":1,"539":1,"544":1,"548":1,"792":1,"827":4,"828":2,"830":1,"831":1,"832":1,"833":1,"856":1,"881":1,"885":1,"905":1,"920":1,"921":2,"923":1,"926":1,"995":1,"996":2,"998":1,"1030":1,"1035":2,"1122":1,"1124":6,"1128":3,"1140":1,"1150":1,"1151":1,"1152":1,"1153":1,"1154":1,"1155":2,"1186":1,"1188":1,"1192":1,"1203":7,"1207":22,"1212":4,"1230":1,"1231":3,"1237":6,"1265":3,"1270":12,"1273":1,"1275":2,"1278":1,"1280":1,"1281":1,"1286":38,"1290":1,"1300":22,"1301":4,"1311":28,"1316":2,"1317":1,"1323":14,"1324":15,"1339":5,"1350":22,"1352":1,"1358":2,"1359":59,"1361":1,"1362":1,"1368":1,"1369":5,"1380":4,"1395":33,"1396":10,"1399":1,"1401":1,"1402":18,"1416":1,"1417":1,"1431":1,"1436":8,"1438":8,"1447":1,"1453":1,"1455":2,"1456":1,"1459":1,"1460":1,"1461":2,"1475":2,"1489":1,"1492":1,"1496":5,"1525":1,"1526":3,"1534":1,"1535":1,"1545":2,"1577":3,"1586":1,"1591":5,"1596":1,"1614":1,"1618":1,"1631":1,"1635":2,"1638":2,"1639":2,"1651":2,"1664":3,"1670":1,"1671":1,"1685":2,"1707":1,"1720":1,"1765":1,"1779":1,"1805":1,"1810":1,"1823":1,"1830":1,"1861":3,"1868":1,"1869":3,"1870":2,"1871":2,"1873":3,"1876":5,"1877":3,"1927":1,"2001":5,"2003":2,"2025":3,"2060":2,"2106":1,"2166":2,"2169":1,"2170":1,"2171":1,"2188":2,"2195":1,"2209":1,"2234":1}}],["concurrentrequests",{"3":{"1467":1}}],["concurrentmessagelimit",{"2":{"1582":1,"1707":1},"3":{"1323":5,"1577":1,"1582":1,"1591":1,"1707":1}}],["concurrentdictionary",{"2":{"996":1,"1236":1,"1909":1,"1916":1},"3":{"243":1,"996":1,"1236":1,"1237":1,"1241":1,"1247":8,"1259":7,"1270":2,"1286":11,"1300":4,"1301":5,"1309":3,"1310":3,"1316":1,"1323":5,"1324":1,"1417":3,"1496":1,"1909":1,"1916":1}}],["concurrently",{"3":{"0":1,"380":1,"832":1,"868":1,"1124":1,"1270":4,"1286":1,"1311":3,"1324":2,"1339":1,"1359":3,"1369":1,"1395":1,"1417":2,"1436":2,"1455":3,"1909":2,"1945":1,"2171":1}}],["concurrent",{"3":{"0":3,"58":1,"62":1,"178":1,"195":1,"201":1,"223":1,"225":1,"245":1,"286":1,"340":1,"344":1,"390":2,"436":1,"501":1,"507":2,"508":1,"513":1,"517":1,"536":2,"540":1,"541":1,"690":1,"721":1,"830":1,"854":1,"857":1,"996":1,"1125":1,"1155":1,"1237":1,"1247":4,"1258":1,"1259":6,"1270":5,"1274":1,"1286":14,"1289":1,"1298":1,"1300":17,"1301":4,"1304":1,"1307":1,"1309":3,"1310":2,"1311":3,"1323":4,"1324":14,"1326":1,"1339":2,"1350":2,"1352":4,"1358":1,"1359":23,"1369":2,"1382":1,"1395":8,"1396":14,"1399":1,"1402":6,"1415":1,"1416":1,"1417":3,"1427":1,"1436":3,"1438":2,"1443":1,"1458":1,"1467":2,"1474":1,"1492":1,"1529":1,"1534":1,"1577":2,"1630":1,"1638":2,"1639":2,"1651":1,"1708":1,"1748":1,"1749":1,"1765":2,"1774":1,"1868":1,"1877":1,"1909":1,"1934":2,"2002":1,"2166":2,"2167":1,"2169":1,"2171":2}}],["confuse",{"3":{"1300":1,"1301":1,"1350":1}}],["confused",{"3":{"1286":1,"1436":3,"1561":1,"1950":1}}],["confusing",{"3":{"692":1,"933":1,"1300":1,"1415":2,"1427":1,"1436":2,"1489":1,"1492":1}}],["confusion",{"3":{"370":1,"1300":1,"1311":1,"1537":1,"1576":1,"1577":1,"1640":1,"1667":1,"1673":1,"1897":1,"1899":1,"2127":1,"2130":1,"2204":1}}],["conforminggrid",{"3":{"1436":3}}],["conformingmarkup",{"3":{"1436":1}}],["conforming",{"3":{"1436":3,"1664":1}}],["conform",{"3":{"1436":1,"1639":1}}],["conformanttests",{"3":{"1198":1,"1199":4,"1207":2,"1436":19,"1496":1}}],["conformant",{"3":{"674":1,"785":1,"1436":2}}],["conformance",{"1":{"569":1,"570":1,"571":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"578":1,"579":1},"2":{"572":1,"579":1},"3":{"0":2,"115":1,"121":1,"124":1,"126":1,"143":1,"217":1,"218":2,"448":1,"450":1,"459":1,"464":1,"569":1,"571":1,"572":8,"573":1,"577":1,"579":2,"617":2,"618":1,"619":2,"622":1,"749":1,"773":1,"776":1,"778":1,"842":1,"953":2,"955":1,"957":1,"1207":34,"1212":1,"1262":2,"1311":5,"1324":1,"1428":2,"1436":75,"1438":1,"1485":1,"1487":1,"1488":5,"1489":2,"1492":3,"1494":1,"1524":1,"1531":1,"1558":1,"1571":1,"1591":1,"1660":1,"1671":2,"1825":1,"1826":1,"1827":1,"2041":1,"2042":1,"2056":2,"2061":1,"2133":1,"2134":1,"2234":2}}],["confounds",{"3":{"610":1}}],["confound",{"3":{"609":1,"1436":1,"1467":1,"1474":1}}],["confers",{"3":{"1300":1,"1963":2,"1965":2}}],["confer",{"3":{"186":1,"1270":1,"1300":1,"1961":1}}],["conferencedbcontext",{"2":{"1849":1},"3":{"1849":1}}],["conference→engagement",{"3":{"1534":1,"1611":1,"1612":1}}],["conference→engagement→notification→conference",{"3":{"1526":1}}],["conference↔engagement",{"3":{"1526":1}}],["conferenceimage",{"3":{"1467":1}}],["conferenceintegrationtestbase",{"3":{"1199":32,"1207":2,"1300":1}}],["conferenceintegrationtestcollection",{"3":{"1199":5,"1207":2}}],["conferenceintegrationtestfixture",{"3":{"1199":37,"1207":2,"1436":1}}],["conferenceevent",{"3":{"1359":2}}],["conferenceentityconfigurationtests",{"3":{"1199":1,"1207":4,"1437":1,"1438":1}}],["conferenceerrorresourcestests",{"3":{"1199":1,"1207":2,"1380":2,"1437":1,"1438":1}}],["conferenceerrorresources",{"2":{"1377":1},"3":{"1199":2,"1203":1,"1207":2,"1311":1,"1377":3,"1380":7,"1496":1}}],["conferencecachetag",{"3":{"1380":1}}],["conferencecache",{"2":{"1376":1},"3":{"1359":1,"1376":1,"1379":1,"1380":3}}],["conferencecategories",{"3":{"1359":4,"1380":3,"1395":9,"1447":1,"1627":1,"1632":2,"1640":2}}],["conferencecategoriescontrollertests",{"3":{"1199":1,"1207":2}}],["conferencecategoriescontroller",{"2":{"1371":1,"1372":1},"3":{"1199":3,"1203":1,"1207":2,"1311":2,"1350":3,"1359":21,"1371":2,"1372":2,"1373":1,"1375":1,"1380":8}}],["conferencecategoryformfields",{"3":{"1395":4}}],["conferencecategoryformmodel",{"2":{"1384":1},"3":{"1199":3,"1203":1,"1207":2,"1384":2,"1395":8}}],["conferencecategory",{"3":{"1380":2,"1395":40,"1496":1}}],["conferencecategoryidentifiertype",{"3":{"1350":6,"1359":17,"1380":2,"1395":7}}],["conferencecategoryitemspanel",{"2":{"1385":1},"3":{"1199":1,"1203":1,"1207":2,"1385":2,"1395":20}}],["conferencecategoryitemeditmodel",{"2":{"1384":1},"3":{"1199":2,"1203":1,"1207":2,"1384":2,"1395":7}}],["conferencecategoryvalidationrules",{"3":{"1207":3,"1350":2,"1359":17}}],["conferencecategoryvalidationrulestests",{"3":{"1199":1,"1207":6}}],["conferencecategoryconfiguration",{"2":{"1362":1},"3":{"1199":2,"1203":1,"1207":2,"1350":4,"1362":2,"1369":3}}],["conferencecategorycreaterequestvalidatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["conferencecategorycreaterequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":12}}],["conferencecategorycreaterequestmapper",{"3":{"1199":1,"1203":1,"1207":2,"1359":11}}],["conferencecategorycreaterequest",{"3":{"1199":9,"1203":1,"1207":2,"1270":1,"1359":18,"1380":2}}],["conferencecategorycreate",{"3":{"1199":1,"1203":1,"1207":2,"1395":20}}],["conferencecategorycreatemodel",{"3":{"1199":2,"1203":1,"1207":2,"1395":7}}],["conferencecategorycreatepage",{"3":{"1199":5,"1207":2}}],["conferencecategorynavigationpopulatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["conferencecategorynavigationpopulator",{"3":{"1199":3,"1203":1,"1207":2,"1310":1,"1354":1,"1359":8}}],["conferencecategoryentityqueryservicetests",{"3":{"1199":1,"1207":2,"1359":2}}],["conferencecategoryentityqueryservice",{"3":{"1199":3,"1203":1,"1207":2,"1350":2,"1354":2,"1359":11}}],["conferencecategoryeditmodel",{"3":{"1199":2,"1203":1,"1207":2,"1395":5}}],["conferencecategoryupdateappliertests",{"3":{"1199":1,"1207":2,"1359":2}}],["conferencecategoryupdateapplier",{"3":{"1199":2,"1203":1,"1207":2,"1270":1,"1354":1,"1359":5}}],["conferencecategoryupdaterequestvalidatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["conferencecategoryupdaterequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":6}}],["conferencecategoryupdaterequest",{"3":{"1199":9,"1203":1,"1207":2,"1359":12,"1380":1}}],["conferencecategorytitlerules",{"3":{"1199":4,"1203":1,"1207":1,"1359":9}}],["conferencecategorylist",{"2":{"1383":1},"3":{"1199":1,"1203":1,"1207":2,"1324":2,"1350":1,"1383":2,"1395":16}}],["conferencecategorylistpage",{"3":{"1199":3,"1207":2}}],["conferencecategorydetails",{"2":{"1395":1},"3":{"1395":1}}],["conferencecategorydetail",{"2":{"1384":1},"3":{"1199":1,"1203":1,"1207":2,"1384":2,"1395":22}}],["conferencecategorydetailpage",{"3":{"1199":4,"1207":2}}],["conferencecategorydtomappertests",{"3":{"1199":1,"1207":2}}],["conferencecategorydtomapper",{"3":{"1199":7,"1203":1,"1207":2,"1350":2,"1359":8}}],["conferencecategorydtotests",{"3":{"1199":1,"1207":2}}],["conferencecategorydto",{"3":{"1199":21,"1203":1,"1207":2,"1347":2,"1350":11,"1359":13,"1380":1,"1395":19}}],["conferencecategoryservice",{"2":{"1382":1},"3":{"881":1,"1199":1,"1203":1,"1207":2,"1382":3,"1395":6}}],["conferencecrudregistrationtests",{"3":{"1199":1,"1207":2,"1270":2,"1359":2,"1438":2}}],["conferencecrossservicefactory",{"3":{"1199":2,"1207":2,"1436":2}}],["conferencetestwebapplicationfactory",{"3":{"1199":2,"1207":2,"1436":2}}],["conferencetestdbcontext",{"3":{"1199":2,"1207":1}}],["conferencetrackinfo",{"2":{"1393":1},"3":{"1199":2,"1203":1,"1207":1,"1393":1,"1395":4,"1496":2}}],["conferenceaiguardrailsregistrationtests",{"2":{"1435":1,"1487":1,"1526":1},"3":{"1199":1,"1207":3,"1369":1,"1435":2,"1437":1,"1487":1,"1526":2,"1535":1}}],["conferenceroutepaths",{"2":{"1394":1,"1395":2},"3":{"1199":39,"1203":1,"1207":2,"1324":1,"1394":4,"1395":71,"1396":5,"1416":1}}],["conferencereadaudience",{"2":{"243":1,"388":1,"1307":1,"1348":1,"1373":1,"1379":1,"1391":1,"1922":1},"3":{"243":1,"388":2,"1199":6,"1203":1,"1207":2,"1307":1,"1309":2,"1348":4,"1350":7,"1373":2,"1379":1,"1380":7,"1391":1,"1395":6,"1496":2,"1922":1}}],["conferences",{"0":{"2242":1},"3":{"683":1,"1395":2,"2112":1,"2214":1,"2218":2,"2242":1,"2243":1,"2245":1,"2247":2}}],["conferenceuimodule",{"3":{"649":1,"1199":2,"1203":1,"1207":2,"1324":2,"1395":18,"1526":3}}],["conferenceuihostapplicationfactory",{"2":{"218":1,"2056":1},"3":{"218":2,"572":1,"575":1,"1199":7,"1207":2,"1437":2,"1487":1,"2056":1}}],["conferencepubliccache",{"2":{"386":1,"392":1},"3":{"386":1,"392":1,"1350":1,"1379":1,"1380":1,"1496":1}}],["conferencepermissiongrantstests",{"3":{"1199":1,"1207":2,"1437":1,"1487":1,"1496":1}}],["conferencepermissiongrants",{"2":{"1348":1,"1373":1,"1377":2},"3":{"186":1,"1116":2,"1119":1,"1199":3,"1203":1,"1207":2,"1348":5,"1350":6,"1373":1,"1377":5,"1380":5,"1415":1,"1496":2,"1526":1}}],["conferencepermissions",{"2":{"188":1,"1018":1,"1192":1,"1264":1,"1348":1,"1372":1,"1373":2,"1376":1,"1377":1,"1380":1,"1964":1},"3":{"186":1,"188":1,"1018":1,"1116":1,"1192":1,"1199":30,"1203":1,"1207":2,"1264":1,"1347":2,"1348":7,"1350":16,"1359":8,"1372":1,"1373":6,"1376":1,"1377":2,"1380":46,"1395":1,"1496":3,"1964":1}}],["conferencefeatures",{"2":{"300":1,"1018":1,"1021":1,"1099":1,"1103":1,"2138":1,"2140":1},"3":{"300":1,"1018":1,"1021":1,"1099":1,"1103":1,"1199":5,"1203":1,"1207":2,"1270":1,"1300":1,"1347":7,"1350":10,"1359":5,"1380":2,"1396":1,"1496":2,"1535":1,"2138":2,"2140":1}}],["conferencemodule",{"2":{"1314":1,"1349":1,"1370":1,"1880":1,"1884":1},"3":{"583":3,"585":1,"1199":3,"1203":1,"1207":2,"1314":4,"1323":3,"1349":2,"1350":7,"1359":1,"1369":1,"1370":1,"1377":4,"1380":11,"1436":2,"1880":1,"1884":1}}],["conferencemoduleseeder",{"2":{"1364":1,"1370":1,"1377":1},"3":{"295":1,"1199":1,"1203":1,"1207":2,"1323":2,"1364":3,"1369":4,"1370":1,"1377":3,"1380":8}}],["conferencemoduledbseedertests",{"3":{"1199":1,"1207":3,"1369":6,"1438":1}}],["conferencemoduledbseeder",{"2":{"295":1,"1364":1,"1377":1},"3":{"295":2,"1199":3,"1203":1,"1207":2,"1286":2,"1350":4,"1359":1,"1364":12,"1369":9,"1377":1,"1380":3,"1496":1}}],["conference",{"0":{"1377":1,"1378":1,"1402":1,"1604":1},"1":{"1340":1,"1341":1,"1342":1,"1343":1,"1344":1,"1345":1,"1346":1,"1347":1,"1348":1,"1349":1,"1350":1,"1351":1,"1352":1,"1353":1,"1354":1,"1355":1,"1356":1,"1357":1,"1358":1,"1359":1,"1360":1,"1361":1,"1362":1,"1363":1,"1364":1,"1365":1,"1366":1,"1367":1,"1368":1,"1369":1,"1370":1,"1371":1,"1372":1,"1373":1,"1374":1,"1375":1,"1376":1,"1377":1,"1378":1,"1379":1,"1380":1,"1381":1,"1382":1,"1383":1,"1384":1,"1385":1,"1386":1,"1387":1,"1388":1,"1389":1,"1390":1,"1391":1,"1392":1,"1393":1,"1394":1,"1395":1,"1628":1,"1629":1,"1630":1,"1631":1,"1632":1,"1633":1,"1634":1,"1635":1,"1636":1,"1637":1,"1638":1,"1639":1,"1640":1,"1641":1,"2111":1,"2112":1,"2113":1,"2114":1,"2115":1,"2116":1,"2117":1},"2":{"47":1,"59":1,"536":1,"564":1,"1116":1,"1203":1,"1207":8,"1271":1,"1340":1,"1341":3,"1344":1,"1347":1,"1349":1,"1350":6,"1359":4,"1363":1,"1367":1,"1369":2,"1370":3,"1378":1,"1379":2,"1380":7,"1381":1,"1395":6,"1427":1,"1435":1,"1437":2,"1438":1,"1442":1,"1445":1,"1464":1,"1473":1,"1474":1,"1486":1,"1487":2,"1496":1,"1525":1,"1613":1,"1615":1,"1631":1,"2031":1,"2035":1,"2036":1,"2037":1,"2039":1,"2113":1},"3":{"0":11,"31":1,"47":1,"52":2,"55":1,"58":4,"59":2,"60":1,"61":1,"62":2,"63":1,"68":1,"77":2,"80":1,"85":1,"86":1,"93":4,"95":1,"97":1,"99":1,"104":1,"117":2,"128":3,"164":1,"165":1,"175":2,"181":2,"184":1,"186":6,"187":1,"195":4,"203":2,"235":2,"238":1,"241":1,"243":10,"245":2,"249":1,"250":2,"251":2,"252":2,"254":2,"257":2,"259":2,"260":6,"261":3,"291":1,"295":5,"325":6,"341":1,"344":2,"350":2,"353":3,"379":1,"387":2,"388":5,"390":6,"392":3,"393":1,"401":2,"433":1,"434":1,"435":1,"446":1,"448":6,"452":1,"453":1,"454":1,"468":3,"470":6,"472":1,"475":8,"476":4,"477":6,"478":6,"487":1,"491":2,"492":3,"493":3,"494":2,"495":2,"520":1,"536":3,"545":13,"550":3,"551":1,"552":1,"554":1,"556":4,"559":2,"564":1,"572":6,"578":1,"583":13,"585":4,"599":2,"602":1,"640":2,"643":1,"649":3,"657":10,"665":1,"674":2,"681":1,"689":1,"690":5,"691":2,"692":1,"715":1,"733":1,"743":3,"744":2,"749":2,"752":1,"757":2,"765":1,"766":1,"774":2,"780":3,"782":8,"798":5,"803":5,"805":5,"827":1,"831":2,"832":1,"837":4,"838":2,"839":1,"841":1,"868":2,"869":7,"870":2,"872":1,"875":3,"876":1,"877":2,"881":5,"891":1,"914":2,"920":1,"924":3,"926":3,"927":1,"954":7,"956":3,"958":3,"960":1,"980":2,"988":1,"991":1,"995":3,"998":2,"999":1,"1004":7,"1017":5,"1018":16,"1021":2,"1022":1,"1049":4,"1054":5,"1082":4,"1085":1,"1090":5,"1093":2,"1094":5,"1095":2,"1099":4,"1102":1,"1103":2,"1115":1,"1116":33,"1117":1,"1118":2,"1119":1,"1124":2,"1125":1,"1140":1,"1150":2,"1168":2,"1192":10,"1194":2,"1199":1121,"1201":2,"1202":15,"1203":736,"1206":16,"1207":3461,"1208":13,"1209":48,"1211":3,"1212":8,"1237":26,"1239":10,"1242":2,"1247":25,"1259":2,"1262":1,"1264":4,"1270":47,"1271":29,"1284":1,"1286":49,"1300":28,"1301":14,"1304":1,"1305":1,"1307":2,"1309":2,"1310":31,"1311":57,"1312":27,"1314":7,"1318":2,"1323":30,"1324":50,"1325":1,"1326":2,"1328":3,"1331":1,"1332":4,"1333":1,"1334":2,"1335":1,"1339":21,"1340":5,"1341":17,"1342":25,"1344":14,"1345":12,"1346":2,"1347":36,"1348":18,"1349":35,"1350":865,"1351":7,"1352":19,"1353":21,"1354":11,"1355":11,"1356":5,"1357":4,"1358":5,"1359":2879,"1360":5,"1361":3,"1362":2,"1363":5,"1364":9,"1365":2,"1366":5,"1367":6,"1368":4,"1369":234,"1370":9,"1371":14,"1372":2,"1373":11,"1374":2,"1375":4,"1376":4,"1377":16,"1378":19,"1379":9,"1380":522,"1381":8,"1382":2,"1383":2,"1384":1,"1386":1,"1389":2,"1390":4,"1391":2,"1392":1,"1393":2,"1394":2,"1395":1049,"1396":252,"1397":1,"1401":4,"1402":76,"1405":1,"1406":4,"1413":2,"1415":39,"1416":28,"1417":10,"1426":2,"1427":23,"1435":12,"1436":73,"1437":49,"1438":59,"1441":9,"1442":17,"1443":1,"1445":2,"1446":3,"1447":8,"1448":1,"1449":2,"1455":5,"1456":3,"1457":5,"1458":10,"1460":1,"1462":1,"1464":3,"1465":2,"1467":40,"1473":3,"1474":7,"1476":2,"1486":4,"1487":15,"1488":3,"1489":4,"1490":3,"1492":6,"1496":87,"1500":2,"1514":2,"1517":1,"1520":1,"1523":3,"1525":4,"1526":58,"1529":1,"1530":1,"1531":4,"1532":2,"1534":5,"1535":7,"1582":1,"1596":1,"1601":1,"1611":11,"1612":1,"1613":2,"1615":1,"1617":1,"1618":1,"1619":1,"1621":2,"1622":1,"1625":2,"1626":3,"1627":12,"1628":1,"1629":8,"1630":10,"1631":10,"1632":6,"1634":22,"1635":1,"1636":1,"1637":5,"1638":51,"1639":3,"1640":4,"1641":4,"1650":1,"1656":1,"1673":1,"1678":2,"1785":1,"1855":1,"1859":1,"1860":1,"1865":1,"1869":1,"1874":2,"1880":2,"1882":1,"1884":2,"1922":6,"1936":1,"1942":2,"1961":1,"1962":1,"1963":2,"1996":3,"2005":1,"2007":1,"2009":2,"2010":1,"2017":1,"2020":1,"2022":1,"2023":2,"2025":1,"2031":3,"2034":2,"2035":2,"2036":1,"2037":2,"2039":1,"2056":1,"2089":1,"2111":1,"2112":3,"2113":1,"2115":2,"2117":1,"2125":1,"2129":2,"2133":7,"2134":3,"2138":1,"2140":1,"2158":1,"2181":5,"2212":1,"2216":3,"2218":2,"2223":4,"2230":6,"2233":1,"2241":4,"2242":5,"2246":1}}],["conflate",{"3":{"1218":1,"1641":1}}],["conflated",{"3":{"486":1,"1013":1}}],["conflates",{"3":{"108":1,"176":1,"829":1,"1229":1,"1311":1,"1804":1,"2000":1}}],["conflating",{"3":{"40":1,"1380":1,"1396":1,"1436":1,"1815":1,"1817":1,"1860":1,"2015":1,"2070":1,"2132":1}}],["conflictkindinflight",{"3":{"1311":1}}],["conflictkindbodymismatch",{"3":{"1311":1}}],["conflictkindtag",{"3":{"1311":1}}],["conflicts",{"3":{"38":1,"1286":4,"1639":1,"2071":1}}],["conflicting",{"3":{"0":1,"340":1,"633":1,"888":1,"1279":1,"1286":6,"1311":1,"1611":1,"1651":1,"1684":1,"1876":1,"2066":1,"2099":1}}],["conflict",{"0":{"1872":1},"1":{"2062":1,"2063":1,"2064":1,"2065":1,"2066":1,"2067":1,"2068":1,"2069":1,"2070":1,"2071":1},"2":{"1806":1,"1873":1,"1876":1},"3":{"0":2,"108":1,"109":4,"157":1,"339":1,"342":3,"343":3,"344":1,"348":1,"350":1,"539":2,"996":1,"998":1,"1019":1,"1147":1,"1219":1,"1222":1,"1229":4,"1237":2,"1286":11,"1289":2,"1300":4,"1311":19,"1312":1,"1323":1,"1347":1,"1350":3,"1358":1,"1359":12,"1368":1,"1380":1,"1395":3,"1396":11,"1399":1,"1402":3,"1406":1,"1415":3,"1427":1,"1436":6,"1438":2,"1443":1,"1455":1,"1467":1,"1487":1,"1488":1,"1567":1,"1632":1,"1639":1,"1640":2,"1641":2,"1651":2,"1662":1,"1664":1,"1747":1,"1774":1,"1784":1,"1799":1,"1805":2,"1806":2,"1873":4,"1874":2,"1876":5,"1877":2,"1909":1,"1926":2,"1934":1,"1954":1,"2007":1,"2061":1,"2062":3,"2063":1,"2158":1,"2165":1,"2212":1}}],["confining",{"3":{"1369":1}}],["confines",{"3":{"1431":1}}],["confine",{"3":{"1311":1}}],["confined",{"3":{"0":1,"493":1,"495":1,"557":1,"799":1,"979":1,"980":1,"1126":1,"1324":1,"1339":1,"1369":1,"1396":1,"1417":1,"1436":4,"1724":1,"2234":1}}],["confident",{"3":{"1496":2,"1794":1}}],["confidential",{"3":{"360":1,"1323":1,"2144":1}}],["confidentiality",{"3":{"358":1,"359":1,"360":2,"363":1,"1286":1,"1903":1,"2143":1,"2144":2,"2148":1}}],["confidence",{"3":{"593":1,"2030":1,"2044":1,"2051":1}}],["confirmnewpasswordfield",{"3":{"1436":1}}],["confirmdeleteasync",{"3":{"1433":1,"1436":1,"1488":1}}],["confirmpasswordfield",{"3":{"1436":1}}],["confirmpassword",{"3":{"1324":6}}],["confirmtext",{"3":{"1324":2}}],["confirmtwofactorenrollmenthandlerbase",{"2":{"1300":1,"1322":1,"2200":1},"3":{"1199":2,"1203":1,"1207":2,"1300":4,"1322":3,"1323":5,"1496":1,"2200":1}}],["confirmsonceandreportssuccess",{"3":{"1436":1}}],["confirms",{"3":{"790":1,"1300":1,"1324":3,"1359":4,"1369":1,"1395":4,"1396":2,"1401":1,"1402":2,"1415":1,"1417":1,"1436":6,"1455":1,"1457":1,"1496":2,"1499":1,"1765":1,"2176":1,"2181":1}}],["confirming",{"3":{"676":1,"1259":1,"1295":1,"1300":1,"1323":1,"1324":2,"1380":1,"1396":1,"1415":2}}],["confirmableauthenticationservice",{"3":{"1199":2,"1207":1}}],["confirmableauthuser",{"3":{"1199":3,"1207":1}}],["confirmableuser",{"3":{"1199":4,"1207":1}}],["confirmable",{"3":{"907":1,"1092":1,"1553":1}}],["confirmasync",{"3":{"649":1,"1324":5,"1415":1}}],["confirmationalert",{"3":{"1436":2}}],["confirmations",{"3":{"1436":1,"1742":1}}],["confirmationservice",{"2":{"1324":1},"3":{"1324":3}}],["confirmationstate",{"3":{"1199":2,"1203":1,"1207":1,"1324":4,"1496":1}}],["confirmationthrottled",{"3":{"1300":1}}],["confirmationurl",{"3":{"1300":1,"1761":1}}],["confirmation",{"0":{"1295":1,"1408":1},"1":{"2196":1,"2197":1,"2198":1,"2199":1,"2200":1,"2201":1,"2202":1,"2203":1,"2204":1,"2205":1},"2":{"1761":1},"3":{"0":5,"173":1,"175":2,"176":1,"177":1,"230":1,"348":1,"350":2,"535":2,"618":1,"650":2,"672":1,"733":1,"735":1,"907":1,"1057":1,"1058":2,"1059":6,"1060":1,"1062":1,"1063":1,"1092":1,"1192":1,"1212":1,"1287":2,"1289":1,"1295":2,"1300":26,"1301":5,"1322":1,"1323":7,"1324":25,"1350":3,"1395":10,"1396":3,"1402":2,"1403":1,"1405":1,"1414":1,"1415":24,"1417":1,"1422":1,"1427":7,"1433":1,"1436":12,"1438":1,"1467":1,"1487":1,"1496":7,"1553":1,"1570":1,"1577":1,"1627":3,"1633":1,"1641":1,"1643":1,"1653":1,"1669":1,"1749":1,"1755":1,"1761":3,"1763":1,"1764":1,"1765":1,"1767":1,"1769":1,"1771":1,"1776":2,"1779":1,"1835":1,"1898":1,"1915":1,"1920":1,"1964":1,"1977":1,"2002":1,"2013":1,"2163":3,"2169":1,"2171":1,"2176":1,"2195":1,"2196":3,"2200":2,"2204":3,"2205":1,"2210":2,"2213":1}}],["confirmemailasync",{"3":{"1324":3,"1415":1,"1436":1}}],["confirmemailhandlertests",{"3":{"1199":1,"1207":2,"1300":1,"1415":2}}],["confirmemailhandler",{"2":{"1408":1},"3":{"1199":2,"1203":1,"1207":2,"1300":1,"1323":1,"1324":1,"1408":2,"1415":5,"1496":1}}],["confirmemailhandlerbase",{"2":{"2200":1},"3":{"1199":3,"1203":1,"1207":2,"1300":6,"1322":4,"1323":5,"1415":3,"1496":1,"2200":1}}],["confirmemailpagetests",{"3":{"1199":1,"1207":2,"1436":1}}],["confirmemailpagetestsbase",{"2":{"577":1,"960":1,"1432":1},"3":{"0":1,"577":2,"960":1,"1199":3,"1207":2,"1324":2,"1432":3,"1436":2,"2056":1}}],["confirmemailcommand",{"2":{"1408":1},"3":{"1199":5,"1203":1,"1207":2,"1300":2,"1324":1,"1408":2,"1415":8,"1436":1}}],["confirmemailrequestvalidator",{"2":{"1295":1},"3":{"1199":1,"1203":1,"1207":1,"1295":1,"1300":3}}],["confirmemailrequest",{"3":{"1199":10,"1203":1,"1207":1,"1295":1,"1300":2,"1323":1,"1324":1,"1415":3}}],["confirmemail",{"2":{"1062":1},"3":{"577":1,"1059":1,"1062":2,"1199":2,"1203":3,"1207":9,"1295":1,"1300":3,"1323":2,"1324":12,"1408":2,"1414":1,"1415":8,"1436":2,"1496":2,"1526":2,"1591":1,"1627":1,"1761":1,"2204":1}}],["confirmemailtests",{"3":{"577":2,"578":2,"1199":1,"1207":2,"1436":1}}],["confirmedtoolspropertykey",{"3":{"1427":1}}],["confirmed",{"2":{"1422":1},"3":{"193":1,"254":1,"350":2,"353":1,"490":1,"799":1,"905":1,"909":1,"947":1,"1012":1,"1059":1,"1091":1,"1196":1,"1295":1,"1300":6,"1322":1,"1323":7,"1324":9,"1395":2,"1396":4,"1405":1,"1406":1,"1408":1,"1415":10,"1422":2,"1427":6,"1436":2,"1477":1,"1496":17,"1526":1,"1561":1,"1630":2,"1631":1,"1633":1,"1667":1,"1675":1,"1755":1,"1764":1,"1772":1,"1777":1,"1846":1,"1973":1,"1977":1,"2171":1,"2200":2}}],["confirm",{"3":{"0":1,"140":1,"175":1,"570":1,"577":1,"794":1,"907":1,"1059":1,"1062":1,"1116":1,"1235":1,"1286":1,"1300":2,"1311":1,"1322":1,"1323":7,"1324":14,"1350":3,"1357":1,"1359":3,"1372":1,"1380":5,"1383":1,"1395":15,"1396":4,"1402":1,"1414":2,"1415":8,"1417":2,"1432":2,"1436":10,"1467":1,"1474":1,"1478":2,"1488":1,"1489":1,"1526":2,"1532":1,"1586":1,"1591":2,"1596":1,"1600":1,"1607":1,"1608":1,"1627":1,"1631":1,"1653":1,"1657":1,"1697":1,"1698":1,"1710":1,"1741":1,"1742":2,"1755":1,"1761":1,"1768":1,"1770":1,"1776":2,"1996":1,"2171":1,"2198":1,"2204":1}}],["configfilter",{"3":{"1496":1}}],["configkey",{"3":{"1339":4,"1415":3}}],["configs",{"3":{"1192":1,"1361":1,"1362":1,"1496":1,"1500":1,"1853":1}}],["config",{"0":{"1361":1,"1362":1},"1":{"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1},"2":{"369":1,"370":1,"372":1,"527":1,"632":1,"764":1,"869":1,"938":1,"1649":1},"3":{"0":14,"34":1,"60":1,"93":1,"95":1,"117":1,"164":1,"189":1,"225":1,"297":1,"300":2,"348":1,"350":1,"369":1,"370":5,"372":2,"418":2,"419":1,"420":1,"422":1,"428":1,"429":1,"484":1,"490":1,"491":1,"492":1,"493":1,"527":1,"556":1,"557":1,"619":1,"632":1,"633":5,"635":1,"674":1,"677":1,"749":1,"764":1,"766":1,"826":1,"827":1,"829":2,"840":2,"869":2,"914":1,"938":1,"1012":1,"1034":1,"1037":1,"1059":3,"1075":1,"1184":1,"1192":5,"1212":7,"1241":2,"1247":5,"1270":2,"1300":12,"1307":1,"1309":1,"1311":7,"1314":1,"1315":1,"1320":2,"1323":2,"1324":17,"1336":2,"1338":2,"1339":15,"1349":1,"1350":1,"1362":2,"1369":1,"1380":2,"1415":1,"1416":8,"1427":1,"1429":1,"1431":1,"1436":11,"1437":1,"1438":8,"1441":1,"1447":3,"1451":1,"1455":3,"1467":1,"1487":2,"1488":2,"1496":5,"1500":1,"1510":1,"1521":1,"1526":5,"1534":1,"1548":2,"1553":1,"1554":3,"1563":1,"1569":1,"1572":1,"1576":1,"1577":4,"1583":1,"1590":1,"1591":4,"1611":1,"1614":1,"1619":1,"1649":1,"1653":2,"1661":1,"1665":1,"1666":1,"1790":1,"1821":1,"1842":1,"1849":1,"1850":1,"1853":1,"1854":1,"1857":1,"1882":2,"1893":1,"1894":1,"1898":1,"1899":2,"1904":1,"1958":1,"1965":1,"1975":1,"1976":2,"1979":1,"1989":2,"2002":1,"2003":1,"2009":1,"2012":2,"2024":1,"2096":1,"2138":1,"2140":1,"2141":2,"2144":1,"2152":1,"2222":1,"2234":2}}],["configuring",{"3":{"402":1,"1286":1,"1300":1,"1301":1,"1311":1,"1320":1,"1324":1,"1339":1,"1467":1}}],["configurability",{"3":{"776":1}}],["configurablewarmuptask",{"3":{"1199":2,"1207":1}}],["configurable",{"0":{"1708":1},"3":{"0":4,"157":1,"189":1,"279":1,"312":1,"318":1,"381":1,"425":1,"461":1,"834":1,"883":1,"905":1,"1286":3,"1293":1,"1297":1,"1300":4,"1301":1,"1311":3,"1323":1,"1324":1,"1339":4,"1350":2,"1359":1,"1424":1,"1427":1,"1436":1,"1496":1,"1577":1,"1669":1,"1670":1,"1671":1,"1708":1,"1752":1,"1767":2,"1945":1,"1950":1,"1995":1,"2200":1}}],["configurator",{"3":{"572":1,"1259":1,"1311":1,"1323":2,"1339":5}}],["configurationchanges",{"3":{"1416":3}}],["configurationkey",{"3":{"1323":2}}],["configurationassemblies",{"3":{"1286":2}}],["configurationbuilder",{"3":{"1050":1,"1286":2,"1436":1}}],["configurationoauthuisettings",{"2":{"350":1},"3":{"350":1,"1199":2,"1203":1,"1207":2,"1311":1,"1324":8,"1416":2,"1496":1}}],["configurationmanager",{"2":{"237":1,"1335":1},"3":{"237":1,"665":1,"1335":1,"1339":2,"1429":1,"1436":1,"1438":1,"1442":1,"1443":1,"1611":1,"1613":1}}],["configurationsource",{"3":{"1286":3}}],["configurations",{"0":{"1363":1},"3":{"10":1,"97":1,"135":1,"633":1,"657":1,"889":1,"891":1,"1034":1,"1192":1,"1202":1,"1203":1,"1213":1,"1234":1,"1237":5,"1247":1,"1271":2,"1273":1,"1279":1,"1281":1,"1282":2,"1286":34,"1308":1,"1310":1,"1316":1,"1319":1,"1323":2,"1350":1,"1360":1,"1363":2,"1369":8,"1396":6,"1401":1,"1409":1,"1415":1,"1436":4,"1438":2,"1467":1,"1496":1,"1641":1,"1650":1,"1651":2,"1652":1,"1722":1,"1727":2,"1728":1,"1774":1,"1849":1,"1932":1,"2054":1}}],["configuration",{"0":{"1282":1,"1320":1,"1335":2,"1419":1,"1850":1,"1856":1,"2013":1},"1":{"671":1,"672":1,"673":1,"674":1,"675":1,"676":1,"677":1,"678":1,"835":1,"836":1,"837":1,"838":1,"839":1,"840":1,"841":1,"842":1,"1313":1,"1314":1,"1315":1,"1316":1,"1317":1,"1318":1,"1319":1,"1320":1,"1321":1,"1322":1,"1323":1},"2":{"261":1,"440":1,"696":1,"705":1,"713":1,"776":1,"832":1,"914":1,"979":1,"1061":1,"1311":1,"1324":1,"1335":1,"1339":1,"1417":1,"1773":1,"1839":1,"1916":1,"1936":1,"2096":1,"2129":1,"2153":1},"3":{"0":19,"25":1,"30":1,"31":7,"32":1,"46":1,"47":2,"57":3,"59":3,"60":1,"63":1,"72":1,"73":1,"95":4,"96":1,"98":1,"140":1,"150":1,"164":2,"166":6,"167":3,"170":1,"182":1,"186":1,"198":1,"200":2,"213":1,"214":2,"216":1,"219":1,"225":2,"228":1,"231":1,"235":1,"243":3,"261":1,"280":1,"290":1,"295":1,"300":1,"301":1,"302":1,"318":1,"330":2,"358":1,"359":3,"361":2,"365":2,"373":1,"384":1,"395":2,"401":1,"407":1,"409":1,"413":1,"415":1,"421":1,"422":1,"425":1,"432":1,"434":2,"440":1,"451":1,"470":1,"501":1,"529":1,"530":1,"536":2,"539":1,"556":1,"583":5,"584":1,"585":3,"586":1,"597":1,"598":1,"599":7,"601":3,"603":1,"633":1,"640":1,"641":1,"642":1,"644":1,"650":1,"651":1,"657":2,"658":1,"659":1,"663":1,"665":3,"666":1,"667":1,"671":1,"673":2,"674":6,"676":3,"678":1,"690":1,"691":1,"696":1,"698":3,"700":1,"705":1,"707":3,"708":2,"713":1,"715":1,"733":1,"750":1,"765":1,"767":1,"770":1,"774":2,"776":2,"778":1,"790":1,"791":1,"792":2,"795":2,"810":1,"819":1,"823":1,"827":9,"829":5,"831":1,"832":7,"833":2,"835":1,"836":2,"838":9,"839":4,"840":4,"842":3,"846":1,"854":1,"863":1,"876":1,"883":1,"889":3,"890":4,"891":3,"905":1,"914":2,"916":2,"929":2,"931":2,"933":1,"934":1,"945":1,"947":1,"948":1,"954":1,"973":1,"976":1,"979":5,"998":1,"999":1,"1004":1,"1018":4,"1033":2,"1034":4,"1040":1,"1043":1,"1059":1,"1060":1,"1061":2,"1068":1,"1075":1,"1078":1,"1083":2,"1084":1,"1085":1,"1089":1,"1091":7,"1092":2,"1094":3,"1108":1,"1109":1,"1124":2,"1126":1,"1127":1,"1149":1,"1175":4,"1178":1,"1184":1,"1192":1,"1202":1,"1203":19,"1207":129,"1208":2,"1212":11,"1232":3,"1237":14,"1243":1,"1247":5,"1257":1,"1259":13,"1264":1,"1270":8,"1271":4,"1272":2,"1273":3,"1276":2,"1279":6,"1280":1,"1281":3,"1282":5,"1283":1,"1284":1,"1286":214,"1288":2,"1294":1,"1297":1,"1300":28,"1301":15,"1302":1,"1304":2,"1307":2,"1309":21,"1310":2,"1311":47,"1312":1,"1313":2,"1314":1,"1315":4,"1316":1,"1317":3,"1320":7,"1321":2,"1323":81,"1324":84,"1325":1,"1326":2,"1331":1,"1333":2,"1334":1,"1335":4,"1337":1,"1338":6,"1339":123,"1344":1,"1350":16,"1359":23,"1361":2,"1362":2,"1363":2,"1366":2,"1369":33,"1379":2,"1380":4,"1395":3,"1396":54,"1402":4,"1403":1,"1404":1,"1406":2,"1407":1,"1412":1,"1415":30,"1416":16,"1417":18,"1419":1,"1420":3,"1421":1,"1423":1,"1424":2,"1427":10,"1429":3,"1431":1,"1433":1,"1436":41,"1437":3,"1438":17,"1441":2,"1442":9,"1443":2,"1444":1,"1446":1,"1447":5,"1450":1,"1455":1,"1457":1,"1467":15,"1468":1,"1469":1,"1470":1,"1472":1,"1477":1,"1481":1,"1484":1,"1487":3,"1488":4,"1489":2,"1492":1,"1496":5,"1509":1,"1526":5,"1547":1,"1554":2,"1577":7,"1626":1,"1629":1,"1631":3,"1639":3,"1641":1,"1651":1,"1652":2,"1656":2,"1660":1,"1661":1,"1663":1,"1664":3,"1667":3,"1668":1,"1670":3,"1671":1,"1675":1,"1720":1,"1721":1,"1724":3,"1727":4,"1728":1,"1734":1,"1764":1,"1770":2,"1773":1,"1783":1,"1788":1,"1790":1,"1830":1,"1839":2,"1847":1,"1849":5,"1850":1,"1851":1,"1854":2,"1856":4,"1857":4,"1858":1,"1860":2,"1862":2,"1872":1,"1881":2,"1882":5,"1898":1,"1902":1,"1903":1,"1916":2,"1922":1,"1935":1,"1936":3,"1941":1,"1944":1,"1952":2,"1970":1,"1983":1,"1998":1,"2001":3,"2002":1,"2011":1,"2012":1,"2013":1,"2014":1,"2015":2,"2020":1,"2021":1,"2025":4,"2026":1,"2027":1,"2028":2,"2029":2,"2049":1,"2054":1,"2065":2,"2096":1,"2128":2,"2129":1,"2138":1,"2144":2,"2145":1,"2147":1,"2151":2,"2152":1,"2153":2,"2154":1,"2162":1,"2168":1,"2169":2,"2174":2,"2175":1,"2176":1,"2182":1,"2198":1,"2201":1,"2205":1,"2232":2,"2234":4}}],["configuretestservices",{"3":{"1436":1}}],["configuretestenvironment",{"2":{"1429":1},"3":{"1429":1,"1436":2,"1488":1,"1490":1}}],["configuretestfeatureflags",{"2":{"1429":1,"1671":1},"3":{"1429":1,"1436":2,"1488":1,"1671":1}}],["configurerouteasync",{"3":{"1339":2}}],["configurerefreshsessions",{"2":{"1283":1},"3":{"1283":1,"1286":3}}],["configurereceiveendpoint",{"3":{"640":1,"1436":1}}],["configureclusterasync",{"3":{"1339":2}}],["configureconnection",{"3":{"1324":3}}],["configureconsumers",{"3":{"1259":1}}],["configureconcurrencytokens",{"2":{"341":1,"343":1,"1872":1,"1876":1,"2166":1},"3":{"341":1,"343":1,"1286":1,"1526":1,"1577":1,"1872":2,"1876":1,"2166":1}}],["configureconventions",{"2":{"0":1,"798":1,"806":1,"889":1,"1034":1,"1050":1,"1052":1,"1083":1,"1086":1,"1212":1},"3":{"0":2,"798":1,"806":1,"889":1,"1034":1,"1050":1,"1052":1,"1083":1,"1086":1,"1212":1,"1281":2,"1286":11,"1810":1}}],["configurekestrel",{"3":{"1339":3}}],["configureprimaryhttpmessagehandler",{"3":{"1339":2}}],["configurepermissiongrants",{"2":{"1286":1},"3":{"1286":4}}],["configurefallback",{"3":{"1300":3}}],["configurewarnings",{"3":{"1286":2}}],["configureinprocesstokenvalidation",{"2":{"1429":1,"1488":1},"3":{"1429":1,"1436":3,"1438":1,"1488":1}}],["configureinternalcommands",{"2":{"1042":1,"1045":1},"3":{"1042":1,"1045":1,"1286":1}}],["configureinbox",{"3":{"200":1,"1259":1,"1286":1}}],["configureoptions",{"3":{"1300":1}}],["configureopentelemetry",{"2":{"401":1,"1089":1,"1329":1,"1677":1,"2162":1},"3":{"397":1,"401":1,"1089":1,"1259":1,"1311":1,"1323":1,"1329":1,"1333":1,"1339":6,"1438":1,"1443":2,"1467":1,"1577":1,"1677":3,"2158":2,"2162":1}}],["configureoutbox",{"2":{"931":1,"934":1},"3":{"931":1,"934":1,"1286":1}}],["configureessentials",{"3":{"1416":2}}],["configureemulatorhost",{"3":{"640":1,"1323":3}}],["configureendpoints",{"2":{"642":1},"3":{"640":2,"642":1,"1323":2}}],["configureendpointswithhealthprobe",{"2":{"98":1,"1379":1,"1413":1,"1441":1,"1670":1},"3":{"0":1,"95":1,"96":1,"98":2,"1331":1,"1339":4,"1379":1,"1396":1,"1413":1,"1441":1,"1442":1,"1670":1}}],["configureendpointdefaults",{"2":{"95":1,"98":1},"3":{"95":1,"98":2,"1339":1}}],["configureapplicationpartmanager",{"3":{"1311":1}}],["configureappconfiguration",{"2":{"914":1},"3":{"914":1,"1436":1,"1490":1}}],["configureall",{"3":{"1311":5,"1324":2}}],["configureaudittrail",{"2":{"720":1},"3":{"715":2,"720":1,"1286":4}}],["configureaspnetcoremetrics",{"2":{"397":1,"409":1,"2158":1},"3":{"397":1,"409":1,"1443":1,"2158":1}}],["configureawait",{"1":{"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1},"2":{"481":1,"482":1,"483":1,"484":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1},"3":{"0":3,"479":1,"481":3,"482":2,"483":1,"484":2,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":2,"493":2,"494":2,"495":1,"1212":1,"1229":1,"1247":1,"1259":1,"1286":1,"1300":1,"1309":1,"1310":1,"1312":1,"1323":4,"1324":2,"1339":1,"1359":6,"1369":1,"1380":3,"1402":1,"1415":1,"1417":1,"1436":4,"2234":2}}],["configuremetrics",{"2":{"395":1,"407":1,"409":1},"3":{"395":1,"407":1,"409":1,"1333":1,"1339":3,"2158":1}}],["configurehttp2withhealthprobe",{"3":{"93":1,"94":1}}],["configurehttpclientdefaults",{"2":{"67":1,"100":1,"883":1,"1329":1,"1707":1},"3":{"67":1,"100":1,"883":1,"1312":2,"1329":1,"1339":7,"1441":1,"1443":1,"1707":1}}],["configuresharedenvironment",{"3":{"1436":1}}],["configuresensitivedatalogging",{"3":{"1286":4}}],["configureservices",{"2":{"1488":1},"3":{"572":1,"1436":5,"1488":1,"1490":1}}],["configurescheduler",{"2":{"710":1,"1036":1},"3":{"707":1,"710":1,"1036":1,"1286":1,"1323":1}}],["configures",{"3":{"70":1,"93":1,"164":1,"170":8,"186":1,"214":2,"318":1,"324":1,"341":1,"352":1,"446":1,"448":1,"454":1,"640":2,"674":1,"766":1,"819":1,"832":1,"918":1,"1034":1,"1036":1,"1273":1,"1286":16,"1300":7,"1301":3,"1309":3,"1311":6,"1323":6,"1324":6,"1339":2,"1369":1,"1396":2,"1415":1,"1417":2,"1427":1,"1436":6,"1443":2,"1490":1,"1526":1,"1577":1,"1582":1,"1670":1,"1671":1,"1708":1,"1721":1,"1851":1,"1857":1,"1996":1,"2007":1,"2015":1,"2031":1,"2032":1,"2056":1,"2124":1,"2134":1,"2152":1,"2181":1}}],["configure",{"2":{"1824":1},"3":{"0":2,"164":1,"170":1,"214":2,"215":1,"318":1,"401":1,"459":1,"464":2,"640":1,"674":1,"698":1,"733":3,"747":1,"749":4,"751":3,"914":1,"916":1,"997":1,"1188":1,"1279":1,"1286":29,"1300":7,"1301":2,"1309":2,"1311":15,"1316":1,"1323":4,"1324":5,"1333":1,"1339":16,"1362":2,"1369":12,"1395":1,"1396":15,"1415":1,"1416":1,"1417":1,"1424":1,"1429":2,"1436":9,"1438":1,"1443":2,"1488":2,"1490":1,"1496":1,"1685":1,"1724":1,"1824":1,"1825":1,"1845":1,"1856":1,"1857":2,"1978":1,"1996":1,"2012":1,"2032":1,"2115":1,"2151":2,"2153":1,"2154":1}}],["configuredasyncdisposable",{"3":{"1436":1}}],["configuredatagridlistpagehost",{"2":{"954":1,"959":1,"960":1,"1432":1},"3":{"0":1,"954":1,"959":1,"960":1,"1432":1,"1436":3,"1488":1}}],["configuredpatternoptions",{"2":{"1427":1},"3":{"1427":2}}],["configuredprovider",{"2":{"1094":1},"3":{"1094":1,"1427":1}}],["configuredvalue",{"3":{"1415":1}}],["configuredengines",{"3":{"1286":3}}],["configured",{"0":{"2007":1},"3":{"0":10,"31":2,"73":1,"95":1,"100":1,"101":1,"135":1,"139":1,"157":1,"158":1,"159":1,"170":3,"175":2,"177":1,"178":1,"179":2,"186":1,"200":1,"214":1,"225":2,"235":1,"241":1,"243":2,"245":1,"249":1,"261":1,"265":1,"279":1,"280":1,"283":1,"285":1,"300":1,"303":1,"320":3,"330":1,"337":1,"343":2,"346":1,"349":1,"350":2,"351":1,"355":1,"381":1,"398":1,"406":1,"413":1,"448":1,"464":1,"499":1,"501":3,"524":1,"530":1,"536":2,"538":1,"575":1,"601":1,"640":1,"641":1,"665":2,"668":1,"674":1,"675":1,"676":3,"690":1,"698":1,"740":1,"741":2,"742":1,"776":1,"789":2,"790":5,"792":2,"794":1,"818":1,"819":1,"821":1,"827":6,"829":1,"838":1,"841":1,"849":1,"869":1,"906":1,"915":1,"930":1,"931":1,"996":1,"1017":1,"1018":2,"1034":1,"1042":1,"1059":1,"1083":3,"1089":2,"1091":4,"1092":2,"1108":2,"1116":2,"1126":1,"1150":1,"1184":1,"1188":1,"1212":1,"1237":2,"1247":1,"1251":1,"1258":1,"1259":7,"1269":1,"1270":4,"1271":2,"1276":1,"1279":2,"1280":1,"1281":2,"1283":1,"1285":1,"1286":56,"1288":3,"1293":1,"1294":1,"1297":1,"1300":34,"1301":13,"1302":2,"1307":1,"1309":10,"1310":1,"1311":34,"1313":1,"1320":4,"1323":19,"1324":26,"1333":1,"1336":1,"1337":4,"1339":21,"1350":4,"1357":1,"1358":1,"1359":11,"1365":1,"1366":1,"1368":1,"1369":7,"1379":2,"1380":2,"1395":4,"1396":36,"1400":1,"1402":2,"1406":1,"1413":1,"1415":9,"1417":7,"1418":1,"1424":1,"1425":2,"1427":10,"1433":1,"1436":15,"1438":8,"1441":1,"1445":1,"1447":1,"1455":2,"1456":1,"1458":1,"1459":1,"1465":1,"1467":7,"1488":4,"1489":1,"1492":1,"1526":1,"1531":1,"1548":1,"1563":1,"1577":3,"1591":1,"1631":3,"1632":1,"1635":1,"1637":1,"1639":1,"1641":3,"1653":1,"1663":1,"1664":3,"1667":1,"1670":2,"1672":1,"1675":3,"1684":1,"1700":1,"1708":1,"1719":1,"1721":1,"1723":1,"1727":1,"1728":1,"1765":1,"1770":1,"1801":1,"1829":1,"1842":1,"1847":1,"1851":1,"1853":1,"1860":1,"1872":1,"1896":1,"1916":1,"1921":1,"1923":1,"1928":1,"1933":1,"1944":2,"1974":2,"1975":1,"1976":1,"1979":1,"1982":1,"1984":1,"1988":1,"1995":1,"1997":3,"2002":1,"2013":2,"2025":1,"2028":2,"2029":1,"2031":1,"2033":1,"2056":1,"2059":1,"2065":2,"2131":1,"2134":1,"2140":1,"2152":1,"2166":1,"2168":4,"2169":1,"2170":1,"2176":1,"2177":1,"2179":1,"2201":1,"2234":1}}],["configurebrokertransport",{"2":{"150":1,"638":1,"819":1,"822":1,"1075":1,"1707":1},"3":{"0":2,"150":1,"638":1,"640":2,"819":1,"822":1,"1075":1,"1323":6,"1707":2}}],["conspicuously",{"3":{"1396":1}}],["conspicuous",{"3":{"1286":1}}],["consolidating",{"3":{"1415":1,"2074":1}}],["consolidation",{"3":{"1286":1,"1311":1,"1395":1,"1496":4,"1600":1}}],["consolidated",{"3":{"1259":1,"1271":1,"1311":1,"1486":1,"1487":1,"1496":3,"1526":1}}],["consolidates",{"3":{"782":1,"1311":1,"1350":2,"1676":1}}],["consolidate",{"3":{"435":1,"782":1}}],["consoles",{"3":{"1481":1}}],["console",{"2":{"1550":1},"3":{"214":1,"401":1,"481":1,"776":1,"914":2,"1041":1,"1044":1,"1323":2,"1324":2,"1333":1,"1339":2,"1395":7,"1446":1,"1447":1,"1451":1,"1467":1,"1475":1,"1480":4,"1550":1,"2006":2,"2014":1,"2149":1,"2152":1,"2168":1}}],["consciously",{"3":{"1436":2,"1521":1}}],["conscious",{"3":{"87":1,"1252":1,"1300":1,"1526":1,"1566":1,"1571":1,"1709":1}}],["conserving",{"3":{"1417":2}}],["conserve",{"3":{"1417":1}}],["conservative",{"3":{"529":1,"1237":1,"1286":3,"1301":2,"1350":1,"1417":3,"1455":1,"1916":1,"1982":1}}],["consented",{"3":{"1396":1}}],["consent",{"3":{"1396":2,"1417":1,"1567":1,"1574":1,"1575":3,"1577":2,"1581":1,"1582":2,"1584":1,"1591":1,"1597":1,"1799":1}}],["consensus",{"3":{"0":1,"996":1,"1270":1,"1909":1}}],["consequently",{"3":{"1301":1,"1369":1,"1396":1}}],["consequentialpropertykey",{"3":{"1427":1}}],["consequentially",{"3":{"1229":1}}],["consequential",{"2":{"1422":1},"3":{"1012":1,"1091":1,"1092":1,"1095":2,"1396":1,"1422":2,"1427":6,"1496":1,"1526":1,"1553":1,"1577":1,"2176":1,"2181":1}}],["consequences",{"0":{"435":1,"441":1,"1094":1,"1179":1,"1188":1},"3":{"0":2,"101":1,"123":1,"178":1,"436":1,"444":1,"527":1,"555":1,"629":1,"891":1,"1034":1,"1089":2,"1259":1,"1286":2,"1309":1,"1323":2,"1350":1,"1359":3,"1372":1,"1380":1,"1395":1,"1415":2,"1417":1,"1436":1,"1482":1,"1486":1,"1571":1,"1673":1,"1810":1,"1918":1,"1948":1,"1949":1,"1982":1,"2129":1}}],["consequence",{"3":{"0":3,"23":1,"24":1,"27":1,"96":1,"122":1,"200":1,"201":1,"353":1,"359":1,"390":1,"415":1,"543":3,"549":1,"611":2,"643":1,"659":1,"706":1,"790":1,"793":1,"829":2,"875":1,"914":1,"931":1,"941":1,"988":1,"1050":1,"1059":1,"1082":1,"1229":1,"1231":1,"1247":1,"1252":1,"1259":3,"1270":2,"1271":1,"1286":6,"1297":1,"1300":8,"1301":1,"1309":2,"1311":6,"1323":5,"1324":4,"1339":4,"1350":4,"1355":1,"1358":1,"1359":8,"1369":3,"1380":3,"1395":6,"1396":12,"1415":7,"1416":1,"1417":1,"1436":9,"1438":1,"1459":1,"1467":3,"1472":1,"1475":2,"1651":1,"1686":2,"1849":1,"1861":1,"1886":1,"1910":1,"1947":1,"1982":1,"2036":1,"2043":1,"2067":1,"2160":1,"2165":1,"2166":1,"2167":1,"2168":1}}],["consecutivefailures",{"2":{"1338":1},"3":{"827":1,"1338":1,"1339":1,"1395":1}}],["consecutive",{"3":{"281":1,"459":1,"609":1,"799":1,"803":1,"1003":1,"1006":1,"1007":1,"1048":1,"1054":2,"1242":1,"1247":1,"1285":1,"1286":1,"1292":1,"1307":1,"1324":1,"1390":2,"1395":5,"1415":1,"1438":1,"1456":1,"1474":1,"1492":1,"1641":1,"1716":1,"2001":1}}],["consultant",{"3":{"1395":1}}],["consulted",{"3":{"443":1,"1058":1,"1116":1,"1184":1,"1247":1,"1285":1,"1286":2,"1300":2,"1311":2,"1323":1,"1324":2,"1331":1,"1339":2,"1359":3,"1391":1,"1395":2,"1415":1,"1427":1,"1432":1,"1995":1,"2201":1}}],["consults",{"3":{"249":1,"295":1,"365":1,"384":1,"420":1,"819":1,"827":1,"885":1,"1117":1,"1189":1,"1237":1,"1242":1,"1247":1,"1286":3,"1307":1,"1311":4,"1323":1,"1324":2,"1359":2,"1406":1,"1436":1,"1670":1,"1843":1,"1945":1,"1976":1,"2144":1}}],["consult",{"3":{"0":1,"245":1,"318":1,"819":1,"846":1,"1025":1,"1212":1,"1236":1,"1286":2,"1301":1,"1309":1,"1350":1,"1359":1,"1417":1,"1427":1,"1474":2,"1476":1,"1478":1,"1998":1}}],["consulting",{"3":{"0":1,"1686":1}}],["consumable",{"3":{"955":1,"1350":1,"1438":1}}],["consumption",{"3":{"31":1,"195":1,"234":1,"373":1,"530":1,"543":2,"576":1,"674":1,"692":1,"941":1,"954":1,"1300":3,"1301":2,"1323":1,"1339":3,"1396":2,"1443":2,"1450":1,"1453":1,"1454":1,"1467":3,"1488":1,"1489":1,"1577":1,"1665":1,"1675":1,"1677":1,"1678":1,"1915":1,"2012":1,"2013":1,"2060":1}}],["consuming",{"0":{"1258":1},"3":{"0":2,"26":1,"53":2,"68":1,"72":1,"81":1,"195":2,"197":1,"200":1,"201":1,"202":1,"203":1,"273":1,"309":1,"370":1,"382":1,"390":1,"470":1,"498":1,"518":1,"557":1,"571":1,"572":1,"585":1,"617":1,"702":1,"921":1,"945":1,"956":2,"958":1,"960":1,"1024":1,"1067":1,"1100":1,"1229":1,"1231":1,"1270":5,"1286":2,"1300":8,"1304":2,"1308":1,"1309":10,"1311":2,"1312":3,"1323":5,"1324":9,"1326":2,"1327":1,"1339":7,"1350":1,"1359":1,"1395":4,"1396":3,"1415":3,"1417":4,"1427":1,"1430":1,"1432":1,"1436":3,"1444":1,"1474":1,"1500":1,"1526":1,"1574":1,"1577":2,"1588":1,"1651":1,"1663":1,"1736":1,"1784":1,"1799":1,"1810":1,"1898":1,"1933":1,"1949":1,"1958":1,"1981":1,"2010":1,"2013":1,"2034":1,"2035":1,"2056":1,"2085":1,"2113":1,"2158":1,"2160":1,"2190":1}}],["consumecontext",{"3":{"150":1,"1259":1,"1323":1}}],["consumesthetokenbeforesaving",{"3":{"1323":1}}],["consumes",{"3":{"0":1,"59":1,"124":1,"195":6,"203":1,"375":1,"391":1,"483":1,"507":1,"508":1,"543":1,"585":2,"587":1,"665":1,"694":1,"751":1,"880":1,"990":1,"1200":1,"1236":1,"1247":1,"1259":5,"1266":1,"1270":1,"1286":3,"1294":1,"1300":4,"1309":2,"1310":2,"1311":4,"1312":1,"1322":1,"1323":1,"1324":5,"1332":1,"1339":3,"1341":1,"1349":1,"1350":1,"1359":10,"1369":1,"1378":1,"1396":13,"1402":1,"1415":2,"1416":1,"1417":8,"1427":1,"1436":4,"1438":3,"1441":1,"1451":1,"1455":2,"1460":1,"1467":2,"1472":1,"1475":1,"1488":2,"1489":2,"1496":1,"1526":2,"1531":1,"1599":1,"1641":1,"1748":1,"1765":1,"1843":1,"1874":1,"1884":1,"1922":1,"1955":1,"1963":1,"2005":1,"2123":1,"2192":1}}],["consumed",{"3":{"0":3,"146":1,"177":1,"202":2,"223":1,"265":1,"368":1,"374":1,"383":1,"481":1,"545":1,"549":1,"692":1,"733":1,"829":1,"856":1,"1124":1,"1144":1,"1212":1,"1237":5,"1240":1,"1247":6,"1249":1,"1259":10,"1260":1,"1270":7,"1286":24,"1291":1,"1300":36,"1301":6,"1309":9,"1310":3,"1311":9,"1320":1,"1323":11,"1324":31,"1334":1,"1339":17,"1344":1,"1345":1,"1350":22,"1359":22,"1380":27,"1395":14,"1396":39,"1402":14,"1415":12,"1416":4,"1417":38,"1427":4,"1432":1,"1436":14,"1437":1,"1438":1,"1443":1,"1453":1,"1455":2,"1456":1,"1467":1,"1488":2,"1492":1,"1496":1,"1525":1,"1526":3,"1527":1,"1535":1,"1555":1,"1591":2,"1638":2,"1641":2,"1748":1,"2056":1,"2103":1,"2223":1,"2230":1}}],["consume",{"3":{"0":5,"21":1,"109":1,"145":1,"150":2,"194":2,"195":2,"196":1,"199":1,"201":1,"202":1,"247":1,"369":1,"391":1,"535":1,"548":1,"599":1,"626":1,"656":1,"815":1,"818":2,"819":1,"823":1,"832":1,"1042":1,"1044":1,"1074":1,"1076":1,"1091":1,"1122":1,"1140":1,"1147":1,"1225":1,"1229":1,"1237":1,"1247":1,"1259":6,"1269":1,"1270":2,"1271":3,"1286":1,"1300":9,"1309":1,"1312":1,"1318":1,"1323":7,"1324":6,"1325":1,"1326":1,"1339":2,"1350":3,"1359":4,"1389":1,"1395":2,"1396":2,"1402":1,"1408":1,"1413":1,"1415":2,"1417":4,"1428":1,"1431":1,"1433":1,"1435":1,"1436":5,"1438":3,"1444":1,"1467":1,"1488":1,"1503":1,"1577":1,"1582":1,"1591":1,"1638":1,"1648":1,"1649":1,"1669":1,"1724":1,"1765":1,"1784":1,"1843":2,"1887":1,"1910":1,"2001":1,"2043":1,"2111":1,"2158":1,"2164":1,"2190":1,"2194":1}}],["consumermodule",{"3":{"1323":1}}],["consumerecoverycodeasync",{"3":{"1300":2}}],["consumeroriginrestore",{"2":{"150":1,"202":1,"1074":1,"1253":1},"3":{"145":1,"150":3,"202":4,"702":1,"1074":1,"1199":3,"1203":1,"1207":2,"1253":1,"1259":2,"1300":2,"1313":1,"1318":4,"1323":9,"1496":2}}],["consumers",{"0":{"452":1,"1709":1,"1882":1,"2056":1},"2":{"1259":1,"1323":1},"3":{"0":23,"27":1,"32":1,"41":2,"62":1,"68":1,"69":1,"71":1,"76":1,"77":1,"78":4,"79":1,"91":1,"109":1,"110":1,"118":1,"119":1,"122":1,"127":1,"133":1,"135":2,"136":1,"143":1,"145":2,"146":1,"147":1,"148":1,"150":8,"151":1,"156":1,"160":1,"162":1,"166":1,"201":1,"202":6,"255":4,"256":1,"259":1,"264":1,"312":1,"341":1,"342":1,"359":1,"369":1,"370":1,"375":1,"390":1,"391":1,"435":1,"446":1,"447":1,"451":1,"452":1,"470":1,"490":1,"491":1,"527":1,"530":1,"543":1,"549":1,"550":1,"552":1,"570":1,"572":1,"573":1,"574":2,"576":1,"577":2,"579":1,"591":1,"593":1,"598":1,"600":1,"607":2,"609":3,"638":4,"640":2,"665":2,"668":1,"682":1,"692":1,"698":2,"700":1,"702":2,"715":1,"723":1,"724":1,"725":1,"731":1,"733":1,"736":1,"739":2,"742":1,"743":2,"799":1,"800":1,"819":2,"820":1,"821":1,"825":3,"827":3,"829":1,"832":2,"833":1,"836":1,"845":1,"846":1,"849":1,"854":1,"856":1,"867":2,"870":1,"873":1,"876":1,"891":2,"912":1,"914":1,"918":1,"922":1,"948":1,"956":1,"958":1,"963":1,"980":1,"981":1,"998":1,"1004":3,"1007":1,"1008":1,"1044":1,"1058":1,"1059":4,"1061":1,"1074":3,"1085":1,"1092":1,"1140":1,"1176":1,"1177":1,"1178":1,"1192":1,"1193":1,"1203":6,"1207":58,"1208":1,"1212":3,"1229":1,"1234":1,"1237":5,"1247":4,"1257":1,"1258":4,"1259":27,"1270":6,"1271":2,"1280":1,"1284":1,"1285":1,"1286":17,"1299":1,"1300":8,"1301":1,"1309":3,"1310":3,"1311":8,"1312":2,"1313":1,"1317":4,"1318":3,"1320":1,"1323":29,"1324":15,"1339":6,"1350":7,"1359":4,"1369":2,"1380":6,"1395":2,"1396":17,"1402":5,"1413":1,"1415":8,"1417":4,"1427":1,"1431":1,"1436":32,"1438":6,"1441":1,"1443":1,"1447":1,"1453":2,"1454":1,"1467":2,"1469":1,"1488":1,"1489":2,"1491":2,"1492":1,"1496":2,"1498":1,"1508":1,"1526":1,"1528":1,"1543":2,"1546":1,"1547":1,"1551":1,"1569":3,"1570":1,"1572":1,"1575":2,"1577":5,"1579":1,"1581":1,"1582":2,"1583":1,"1585":7,"1589":1,"1591":1,"1596":1,"1599":2,"1631":1,"1632":2,"1639":1,"1641":1,"1660":1,"1673":2,"1674":1,"1676":1,"1677":1,"1686":1,"1699":1,"1706":1,"1711":1,"1736":1,"1769":2,"1770":1,"1805":1,"1846":1,"1875":1,"1886":1,"1887":2,"1889":3,"1890":2,"1891":1,"1892":3,"1911":1,"1912":2,"1920":1,"1974":1,"2005":1,"2028":1,"2043":1,"2048":1,"2056":2,"2061":1,"2067":1,"2070":1,"2114":1,"2115":1,"2116":1,"2117":1,"2132":1,"2158":1,"2164":2,"2184":2,"2204":4,"2205":1,"2234":1}}],["consumer",{"0":{"451":1,"1258":1,"1678":1,"1736":1,"1843":1},"1":{"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"202":1,"203":1},"3":{"0":48,"15":2,"17":1,"24":2,"25":2,"26":1,"27":2,"38":1,"39":2,"41":3,"59":1,"61":1,"62":2,"66":1,"67":1,"68":1,"70":1,"72":2,"73":1,"77":1,"78":1,"80":4,"81":1,"91":2,"95":1,"97":1,"98":1,"100":1,"101":1,"109":1,"111":2,"116":1,"117":1,"124":1,"127":1,"132":1,"134":1,"135":4,"136":5,"137":2,"145":2,"147":1,"149":1,"150":1,"151":2,"152":1,"160":2,"175":1,"189":1,"192":1,"193":2,"194":3,"195":4,"196":1,"197":1,"198":4,"199":2,"201":1,"202":3,"203":3,"225":1,"226":1,"241":1,"247":1,"255":8,"256":1,"258":1,"265":1,"273":1,"279":1,"283":1,"305":1,"311":1,"340":1,"344":1,"346":1,"359":1,"361":1,"369":1,"373":1,"374":2,"376":1,"391":1,"401":1,"412":1,"418":1,"432":1,"438":1,"439":1,"440":1,"441":1,"443":1,"448":2,"450":1,"451":3,"455":1,"457":1,"465":1,"474":1,"480":1,"481":1,"483":2,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":2,"495":1,"527":1,"528":1,"530":1,"543":2,"545":2,"549":1,"550":1,"551":3,"564":4,"572":3,"573":1,"574":1,"576":1,"577":2,"578":1,"583":1,"594":2,"598":1,"599":2,"605":1,"607":3,"609":6,"610":2,"611":2,"614":1,"616":2,"618":2,"619":1,"620":1,"624":1,"626":2,"629":1,"640":1,"641":1,"645":1,"659":1,"660":1,"672":1,"674":4,"675":1,"676":1,"684":2,"689":1,"690":2,"691":3,"696":2,"697":1,"698":2,"700":1,"707":2,"708":1,"714":2,"715":2,"716":2,"717":2,"721":1,"723":1,"724":1,"725":3,"727":3,"729":1,"733":1,"737":1,"740":1,"741":3,"742":2,"743":2,"747":1,"749":1,"751":2,"759":1,"780":2,"782":2,"783":1,"786":1,"789":1,"799":1,"802":1,"818":1,"819":7,"820":2,"821":2,"825":2,"827":6,"829":2,"832":1,"833":3,"836":3,"839":1,"840":1,"844":1,"845":2,"846":2,"847":1,"848":4,"849":1,"853":3,"854":2,"855":1,"861":1,"862":1,"865":1,"881":1,"889":2,"891":2,"903":1,"905":5,"907":6,"908":1,"910":2,"913":1,"914":2,"920":1,"923":1,"924":1,"926":3,"927":1,"930":1,"931":1,"935":1,"937":1,"939":1,"940":1,"941":3,"942":1,"954":2,"957":1,"958":1,"959":1,"963":1,"964":1,"965":1,"966":1,"972":1,"973":1,"974":1,"976":1,"979":1,"980":1,"982":1,"984":1,"986":1,"988":2,"994":1,"996":3,"999":1,"1000":1,"1003":1,"1004":2,"1006":1,"1008":1,"1012":2,"1016":1,"1033":2,"1034":2,"1035":1,"1036":1,"1037":1,"1043":1,"1044":1,"1049":1,"1050":6,"1051":2,"1052":1,"1058":2,"1059":6,"1060":1,"1061":4,"1065":2,"1067":3,"1068":4,"1069":3,"1070":2,"1074":3,"1075":5,"1076":1,"1077":3,"1078":1,"1089":2,"1091":1,"1093":3,"1096":1,"1117":2,"1160":1,"1162":1,"1177":2,"1178":1,"1179":1,"1185":1,"1188":1,"1195":1,"1202":1,"1203":1,"1211":1,"1212":10,"1228":1,"1229":3,"1233":1,"1237":5,"1241":1,"1247":10,"1248":1,"1249":2,"1256":1,"1258":6,"1259":81,"1261":1,"1262":1,"1269":3,"1270":15,"1271":8,"1273":2,"1274":1,"1280":1,"1286":43,"1290":1,"1291":1,"1300":25,"1301":1,"1309":10,"1310":1,"1311":30,"1312":10,"1315":1,"1317":3,"1318":2,"1320":1,"1323":60,"1324":56,"1326":1,"1339":31,"1345":1,"1348":1,"1349":1,"1350":28,"1359":19,"1369":1,"1378":1,"1379":1,"1380":9,"1381":2,"1386":1,"1395":6,"1396":48,"1398":1,"1402":10,"1406":1,"1412":1,"1413":1,"1415":17,"1416":1,"1417":14,"1418":1,"1421":1,"1427":6,"1428":2,"1429":2,"1430":1,"1431":4,"1432":1,"1433":1,"1436":178,"1437":4,"1438":12,"1441":3,"1442":1,"1443":5,"1451":1,"1453":3,"1454":4,"1455":2,"1460":1,"1461":1,"1465":1,"1467":3,"1476":3,"1487":2,"1488":4,"1489":2,"1490":1,"1492":7,"1493":1,"1496":8,"1503":1,"1526":2,"1528":1,"1543":1,"1546":2,"1547":5,"1551":1,"1572":1,"1574":3,"1575":10,"1576":2,"1577":28,"1578":1,"1579":1,"1581":3,"1582":7,"1583":1,"1584":2,"1585":10,"1586":2,"1589":2,"1591":4,"1593":1,"1596":3,"1597":1,"1599":1,"1611":2,"1631":1,"1632":11,"1645":2,"1656":1,"1659":1,"1660":1,"1662":1,"1664":2,"1665":4,"1666":2,"1671":2,"1673":4,"1674":1,"1675":1,"1676":1,"1677":1,"1678":1,"1679":2,"1680":1,"1685":1,"1686":2,"1706":1,"1707":5,"1708":1,"1721":1,"1727":2,"1732":1,"1734":1,"1735":1,"1749":1,"1751":3,"1764":1,"1765":1,"1769":7,"1772":1,"1784":1,"1800":1,"1810":3,"1815":2,"1826":1,"1843":5,"1845":2,"1856":2,"1865":1,"1870":1,"1886":1,"1887":2,"1888":4,"1889":7,"1890":3,"1891":6,"1892":1,"1903":1,"1906":1,"1910":5,"1911":2,"1912":1,"1919":1,"1921":1,"1922":2,"1923":3,"1926":1,"1927":1,"1929":2,"1930":1,"1948":1,"1949":1,"1970":1,"2006":1,"2007":3,"2010":1,"2018":1,"2026":2,"2043":1,"2045":1,"2047":2,"2056":2,"2057":1,"2058":1,"2060":1,"2061":1,"2064":2,"2066":1,"2069":1,"2070":3,"2071":1,"2074":1,"2076":2,"2079":1,"2085":1,"2087":2,"2089":1,"2109":3,"2111":1,"2114":3,"2116":2,"2126":1,"2128":2,"2129":2,"2133":2,"2135":1,"2152":1,"2158":2,"2168":1,"2175":1,"2181":2,"2184":1,"2196":1,"2198":1,"2199":1,"2200":2,"2203":2,"2204":1,"2205":1,"2234":5}}],["consts",{"3":{"1395":2,"1396":2}}],["const",{"2":{"2077":1},"3":{"256":1,"258":1,"305":1,"310":1,"897":1,"946":1,"1229":1,"1237":1,"1242":1,"1243":1,"1247":4,"1270":6,"1271":1,"1286":8,"1300":30,"1301":3,"1304":1,"1309":12,"1311":9,"1312":2,"1323":3,"1324":13,"1339":22,"1344":2,"1348":1,"1350":16,"1359":11,"1369":1,"1384":1,"1395":3,"1396":16,"1402":12,"1405":1,"1415":14,"1416":1,"1417":2,"1427":2,"1436":12,"1577":1,"1653":1,"2077":1}}],["constantexpression",{"3":{"1241":1,"1247":1,"1286":1,"1989":1}}],["constantly",{"3":{"656":1,"661":1,"1324":1,"1570":1,"2051":1,"2061":2}}],["constants",{"3":{"0":1,"186":2,"188":1,"202":1,"300":1,"310":1,"318":1,"359":1,"657":1,"731":1,"749":1,"859":1,"861":2,"883":1,"905":1,"946":2,"1067":1,"1068":1,"1184":1,"1212":1,"1214":1,"1229":4,"1234":2,"1237":10,"1247":2,"1270":1,"1271":6,"1286":13,"1290":1,"1300":20,"1309":10,"1311":14,"1323":7,"1324":36,"1325":1,"1326":2,"1330":1,"1332":2,"1333":1,"1339":22,"1341":1,"1344":2,"1350":66,"1359":14,"1362":1,"1369":7,"1373":1,"1380":2,"1384":1,"1390":1,"1395":18,"1396":23,"1402":12,"1404":1,"1405":1,"1412":1,"1414":1,"1415":22,"1416":7,"1417":4,"1427":1,"1430":1,"1436":40,"1438":2,"1444":1,"1496":1,"1526":2,"1577":1,"1653":1,"1677":1,"1685":1,"1810":2,"1829":2,"1833":1,"1834":1,"1902":1,"1944":2,"1964":1,"1968":1,"1989":1,"2057":1,"2077":1,"2138":1,"2140":1,"2141":1,"2144":1}}],["constant",{"0":{"1902":1},"3":{"0":3,"24":1,"100":1,"179":1,"186":3,"213":1,"214":1,"217":1,"280":1,"305":3,"310":1,"312":1,"318":1,"391":1,"413":1,"418":1,"422":1,"423":2,"425":1,"457":1,"459":1,"463":1,"609":1,"619":2,"620":1,"697":1,"698":3,"699":1,"702":1,"740":1,"751":1,"790":1,"793":1,"827":4,"856":1,"880":1,"881":2,"885":1,"897":2,"905":2,"945":1,"946":3,"948":2,"980":1,"1017":1,"1018":4,"1067":1,"1090":1,"1094":1,"1095":1,"1100":1,"1134":1,"1161":1,"1175":1,"1212":2,"1232":1,"1233":1,"1237":6,"1247":5,"1255":1,"1259":4,"1267":1,"1270":1,"1271":15,"1276":2,"1286":18,"1288":1,"1290":1,"1292":2,"1294":1,"1295":2,"1297":1,"1300":28,"1303":1,"1305":1,"1309":11,"1311":19,"1312":2,"1323":17,"1324":16,"1326":2,"1328":1,"1330":1,"1333":3,"1336":1,"1337":2,"1339":14,"1344":4,"1348":1,"1350":27,"1353":1,"1359":73,"1366":3,"1367":1,"1369":7,"1380":1,"1384":1,"1389":1,"1393":1,"1395":28,"1396":23,"1398":1,"1399":1,"1402":19,"1405":1,"1415":9,"1416":5,"1417":29,"1423":1,"1427":1,"1431":1,"1436":35,"1441":1,"1443":2,"1488":1,"1526":1,"1641":2,"1651":1,"1667":1,"1668":1,"1670":1,"1683":1,"1712":1,"1727":2,"1765":2,"1767":1,"1771":1,"1833":1,"1851":2,"1902":3,"1904":1,"1905":2,"1916":2,"1919":1,"1935":1,"1958":1,"1982":1,"2025":1,"2057":1,"2058":1,"2075":1,"2077":1,"2120":1,"2125":1,"2140":4,"2149":1,"2150":1,"2151":1,"2155":1,"2195":1,"2241":1}}],["constrain",{"3":{"95":1,"725":1,"774":1,"1025":1,"1286":1,"1311":1,"1339":1,"1350":1,"1359":6,"1415":1,"2143":1}}],["constrains",{"3":{"71":1,"95":1,"216":1,"372":1,"427":1,"469":1,"470":1,"568":1,"630":1,"675":1,"732":1,"801":1,"804":1,"819":1,"889":1,"1049":1,"1232":1,"1237":2,"1270":1,"1271":1,"1281":1,"1286":2,"1291":1,"1300":2,"1309":3,"1311":1,"1312":1,"1323":1,"1339":1,"1359":11,"1375":1,"1395":1,"1396":3,"1415":5,"1436":1,"1475":1,"1810":1,"2033":1,"2066":1,"2154":1}}],["constrained",{"3":{"0":1,"782":1,"1018":2,"1050":1,"1090":1,"1212":1,"1231":2,"1237":3,"1247":4,"1259":7,"1270":9,"1271":5,"1286":11,"1297":1,"1300":4,"1310":1,"1311":5,"1323":10,"1324":4,"1350":2,"1353":2,"1359":22,"1366":1,"1369":1,"1395":3,"1402":1,"1417":1,"1436":5,"1496":1,"1526":1,"1953":1}}],["constraining",{"3":{"0":1,"1093":1,"1237":1,"1270":2,"1286":1,"1323":1,"1359":1,"2181":1}}],["constraints",{"0":{"1635":1,"1675":1},"3":{"0":1,"47":1,"61":1,"62":1,"92":1,"166":1,"168":1,"412":1,"657":1,"681":1,"725":1,"732":1,"848":1,"921":1,"1074":1,"1083":1,"1085":1,"1196":1,"1237":1,"1247":4,"1259":1,"1270":7,"1281":1,"1286":12,"1309":1,"1310":1,"1311":9,"1323":11,"1324":2,"1339":1,"1350":1,"1359":15,"1369":2,"1396":2,"1402":1,"1415":1,"1416":2,"1417":6,"1431":1,"1436":4,"1473":1,"1569":1,"1602":1,"1632":8,"1635":2,"1639":1,"1640":2,"1641":1,"1652":1,"1953":1,"1967":1,"2065":1}}],["constraint",{"3":{"0":4,"62":1,"92":1,"101":1,"109":1,"119":1,"145":1,"150":1,"159":1,"345":1,"363":1,"364":1,"411":1,"415":1,"464":1,"476":1,"641":1,"657":1,"691":1,"692":1,"723":1,"759":1,"792":1,"808":1,"810":1,"811":1,"814":1,"818":1,"825":1,"826":2,"827":1,"869":1,"915":1,"955":1,"1036":1,"1082":2,"1137":1,"1237":5,"1239":1,"1247":16,"1259":7,"1260":1,"1269":1,"1270":24,"1271":1,"1284":1,"1286":52,"1291":2,"1300":23,"1309":2,"1310":6,"1311":17,"1319":1,"1322":1,"1323":22,"1324":13,"1339":6,"1344":1,"1350":5,"1352":1,"1353":1,"1357":1,"1359":69,"1368":1,"1369":3,"1395":3,"1396":22,"1402":4,"1415":9,"1417":4,"1436":13,"1438":1,"1465":1,"1467":5,"1478":1,"1488":1,"1489":1,"1534":1,"1585":3,"1591":1,"1631":2,"1635":3,"1638":2,"1639":2,"1641":1,"1663":2,"1675":1,"1724":1,"1748":1,"1760":1,"1765":1,"1792":1,"1810":1,"1811":1,"1815":1,"1824":2,"1826":1,"1830":1,"1849":1,"1853":3,"1858":2,"1862":1,"1866":1,"1873":1,"1876":2,"1911":1,"1916":1,"1919":1,"1927":1,"1949":1,"1958":1,"1988":1,"1989":1,"2025":1,"2026":1,"2071":1,"2073":2,"2097":1,"2114":1,"2118":1,"2152":1,"2194":1}}],["constructevent",{"2":{"1765":1,"1770":1},"3":{"1765":1,"1770":1}}],["constructedexceptiontype",{"3":{"1436":2}}],["constructed",{"3":{"0":2,"72":1,"73":1,"109":1,"359":1,"365":1,"549":1,"572":1,"585":1,"657":1,"665":1,"674":1,"698":1,"733":1,"741":1,"784":1,"861":1,"922":2,"926":1,"1016":1,"1107":1,"1110":1,"1212":1,"1229":2,"1234":1,"1237":4,"1244":1,"1246":1,"1247":7,"1259":2,"1262":1,"1270":3,"1271":1,"1273":1,"1274":1,"1286":27,"1300":14,"1301":2,"1309":5,"1310":6,"1311":7,"1323":11,"1324":12,"1339":9,"1343":1,"1350":5,"1359":77,"1364":1,"1368":2,"1380":1,"1395":8,"1396":15,"1402":10,"1415":12,"1416":1,"1417":7,"1429":1,"1432":1,"1436":42,"1438":1,"1488":2,"1541":1,"1810":1,"1812":1,"1826":1,"1830":1,"1865":1,"1898":1,"2056":1,"2232":1}}],["construct",{"3":{"725":1,"726":1,"1018":1,"1060":1,"1229":1,"1237":1,"1247":1,"1270":1,"1271":2,"1286":5,"1300":2,"1309":2,"1311":1,"1323":1,"1324":3,"1339":2,"1350":6,"1359":6,"1396":2,"1415":1,"1427":1,"1436":13,"1441":1,"1631":1,"1651":1,"1809":1,"2172":1}}],["constructible",{"3":{"1286":2,"1323":1}}],["constructing",{"3":{"361":1,"435":1,"782":1,"1247":1,"1259":3,"1270":1,"1286":3,"1309":2,"1311":6,"1343":1,"1359":2,"1405":1,"1415":1,"1427":1,"1436":4,"2144":1}}],["constructions",{"3":{"837":1,"1359":1}}],["construction",{"0":{"1221":1},"3":{"0":9,"20":1,"24":1,"60":1,"71":1,"79":1,"121":1,"123":1,"219":1,"234":1,"248":1,"255":1,"291":1,"295":1,"359":4,"361":1,"545":1,"546":1,"547":1,"549":2,"552":1,"574":2,"640":1,"655":1,"657":1,"667":1,"683":1,"690":1,"698":2,"715":1,"743":1,"750":1,"829":2,"834":1,"846":2,"881":1,"891":1,"926":1,"1018":1,"1020":1,"1034":1,"1051":1,"1085":1,"1090":1,"1091":2,"1124":1,"1160":1,"1163":1,"1168":3,"1169":1,"1212":2,"1220":1,"1221":1,"1223":1,"1228":1,"1229":5,"1231":1,"1233":1,"1237":10,"1247":5,"1249":1,"1253":1,"1255":1,"1258":1,"1259":10,"1267":1,"1270":5,"1271":1,"1274":1,"1278":1,"1279":1,"1284":1,"1286":32,"1300":10,"1301":6,"1302":1,"1309":3,"1310":1,"1311":17,"1320":1,"1323":15,"1324":11,"1339":2,"1347":1,"1350":8,"1359":22,"1369":1,"1380":3,"1395":7,"1396":17,"1402":5,"1415":5,"1417":9,"1420":1,"1421":1,"1423":1,"1427":2,"1436":17,"1455":1,"1474":1,"1488":1,"1489":1,"1496":1,"1498":1,"1539":1,"1548":1,"1577":1,"1591":1,"1665":1,"1685":1,"1764":1,"1765":1,"1767":1,"1809":1,"1810":2,"1811":1,"1812":1,"1825":1,"1829":1,"1833":1,"1839":1,"1889":1,"1920":1,"1923":1,"1924":1,"1955":1,"2001":1,"2025":1,"2053":1,"2075":1,"2092":1,"2128":1,"2144":2,"2145":1,"2147":1,"2152":2,"2175":1,"2177":1,"2201":1}}],["constructs",{"3":{"166":1,"230":1,"556":1,"703":1,"861":1,"885":1,"922":1,"1016":1,"1018":1,"1035":1,"1090":1,"1229":1,"1247":1,"1259":3,"1265":1,"1270":4,"1271":3,"1286":10,"1297":1,"1300":1,"1301":1,"1309":2,"1311":10,"1315":2,"1323":3,"1324":3,"1339":9,"1350":7,"1359":13,"1369":3,"1377":1,"1380":4,"1395":2,"1396":2,"1402":7,"1415":5,"1416":1,"1417":4,"1427":2,"1436":20,"1438":1,"1491":1,"1591":1,"1685":1,"1938":1}}],["constructorarity",{"3":{"1436":1}}],["constructorinfo",{"3":{"1436":1}}],["constructordependencies",{"3":{"1207":2,"1436":3,"1577":1,"1582":1,"1583":1,"1584":1,"1586":1}}],["constructordependencyfixtures",{"3":{"1207":18,"1436":28}}],["constructordependencycounttests",{"2":{"1591":1},"3":{"1199":1,"1207":2,"1359":1,"1371":1,"1380":3,"1415":1,"1436":10,"1489":1,"1496":2,"1526":1,"1534":2,"1535":1,"1591":2,"1597":1,"1599":1}}],["constructordependencycounttestsbasetests",{"2":{"1431":1},"3":{"1199":1,"1207":7,"1431":3,"1436":38,"1577":1}}],["constructordependencycounttestsbase",{"2":{"1431":1,"1489":1,"1654":1},"3":{"1199":6,"1207":2,"1431":3,"1436":32,"1489":1,"1496":1,"1654":1}}],["constructors",{"3":{"497":1,"499":1,"674":1,"964":1,"1221":1,"1223":1,"1226":2,"1229":13,"1247":2,"1271":2,"1286":3,"1309":5,"1311":1,"1312":6,"1339":1,"1350":10,"1359":1,"1396":4,"1402":2,"1415":1,"1423":1,"1427":3,"1436":15,"1438":1,"1526":1,"1538":1,"1586":1,"1651":1,"1805":1,"1811":1,"1812":1,"2106":1,"2144":1}}],["constructor",{"0":{"2092":1},"3":{"0":4,"122":1,"135":1,"160":1,"168":1,"230":1,"243":1,"245":1,"258":1,"281":2,"310":1,"314":1,"318":1,"323":1,"330":1,"359":3,"365":1,"388":1,"389":1,"435":1,"459":3,"465":2,"466":1,"474":1,"497":1,"499":1,"524":1,"545":2,"549":1,"578":1,"585":1,"633":3,"640":1,"642":1,"657":4,"673":1,"674":4,"676":1,"680":1,"692":1,"731":2,"733":2,"799":1,"801":2,"803":2,"827":1,"837":1,"838":1,"846":1,"854":1,"857":1,"881":1,"908":1,"909":1,"954":1,"964":1,"972":1,"994":1,"996":3,"999":1,"1054":1,"1059":3,"1061":1,"1089":1,"1090":1,"1091":1,"1094":1,"1167":1,"1168":4,"1169":1,"1193":1,"1212":1,"1221":1,"1227":3,"1228":1,"1229":17,"1231":1,"1234":2,"1237":12,"1240":1,"1244":2,"1247":24,"1252":1,"1259":19,"1261":1,"1267":1,"1268":1,"1269":2,"1270":24,"1271":13,"1273":1,"1278":1,"1286":104,"1288":1,"1289":2,"1293":1,"1300":76,"1301":12,"1307":1,"1309":36,"1310":8,"1311":27,"1312":6,"1316":1,"1317":1,"1320":1,"1323":47,"1324":59,"1336":2,"1339":28,"1342":1,"1343":2,"1350":34,"1353":1,"1359":219,"1363":1,"1369":9,"1371":2,"1378":1,"1380":16,"1395":26,"1396":44,"1399":1,"1402":25,"1405":2,"1406":1,"1407":1,"1415":48,"1416":8,"1417":37,"1423":1,"1426":1,"1427":15,"1436":110,"1438":5,"1488":3,"1489":1,"1496":4,"1525":1,"1526":1,"1534":1,"1535":1,"1577":2,"1582":1,"1583":1,"1584":1,"1586":1,"1588":1,"1591":2,"1597":1,"1599":1,"1600":1,"1668":1,"1671":1,"1673":1,"1685":2,"1689":1,"1699":1,"1702":1,"1727":1,"1810":5,"1811":4,"1812":1,"1820":1,"1829":1,"1830":1,"1945":1,"1983":2,"1995":1,"2001":3,"2025":1,"2089":1,"2091":3,"2092":2,"2100":1,"2144":1,"2151":2,"2178":1,"2196":1,"2198":1,"2204":3,"2205":1,"2234":1}}],["consists",{"3":{"1359":1}}],["consistency",{"0":{"1557":1},"3":{"0":1,"47":1,"49":1,"60":1,"61":1,"68":1,"166":1,"168":1,"169":1,"171":1,"273":1,"350":1,"535":1,"536":1,"784":1,"809":1,"971":1,"981":1,"1147":1,"1212":1,"1216":1,"1231":1,"1237":3,"1256":1,"1259":1,"1270":1,"1278":1,"1286":3,"1300":1,"1301":1,"1309":2,"1323":1,"1324":5,"1350":9,"1359":4,"1395":1,"1396":3,"1402":3,"1413":1,"1415":3,"1431":2,"1436":3,"1473":1,"1499":1,"1510":1,"1526":1,"1535":1,"1537":1,"1543":1,"1544":1,"1545":2,"1557":1,"1571":1,"1577":2,"1581":1,"1582":1,"1583":1,"1591":1,"1595":1,"1597":1,"1637":1,"1638":6,"1639":2,"1656":1,"1664":1,"1792":1,"1796":1,"1798":1,"1810":1,"1845":1,"1846":1,"1847":1,"1849":1,"1852":2,"1853":2,"1861":1,"1866":1,"1921":1,"1933":1,"2028":1,"2036":1,"2077":1,"2081":1,"2100":1,"2115":1,"2164":1,"2170":1,"2171":1,"2232":1,"2234":1}}],["consistently",{"3":{"102":1,"264":1,"578":1,"1216":1,"1270":2,"1271":1,"1300":2,"1311":1,"1323":2,"1324":3,"1359":7,"1395":2,"1486":1,"1526":2,"1537":1,"1539":1,"1545":1,"1552":1,"1557":1,"1572":1,"1577":1,"1591":1,"1631":1,"1797":1,"1802":1}}],["consistent",{"3":{"0":1,"7":1,"121":1,"136":1,"159":1,"195":1,"200":1,"244":1,"251":1,"252":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"298":1,"302":1,"303":3,"332":1,"471":1,"484":1,"491":1,"492":1,"493":1,"509":1,"564":1,"644":1,"1118":1,"1167":1,"1218":1,"1226":1,"1229":5,"1237":4,"1247":2,"1259":1,"1271":1,"1286":2,"1300":6,"1309":3,"1311":7,"1312":2,"1323":3,"1324":5,"1339":1,"1340":1,"1349":1,"1350":5,"1355":1,"1359":15,"1369":1,"1370":1,"1380":1,"1395":5,"1396":4,"1402":4,"1403":1,"1413":1,"1415":3,"1417":3,"1429":1,"1433":1,"1436":10,"1441":1,"1488":1,"1489":1,"1492":1,"1526":3,"1537":1,"1546":2,"1552":1,"1561":2,"1562":1,"1564":1,"1570":1,"1577":2,"1591":1,"1630":1,"1635":1,"1639":2,"1641":1,"1671":1,"1679":1,"1797":1,"1805":1,"1831":1,"1832":1,"1926":1,"1939":1,"1991":1,"2056":1,"2083":1,"2140":1}}],["consideration",{"3":{"1417":1,"1630":1,"1631":1,"1639":1,"1640":1}}],["considerations",{"3":{"209":1}}],["consider",{"3":{"1359":1,"1435":1,"1755":1,"1776":1}}],["considers",{"3":{"675":1,"1259":1,"1286":1,"1311":1,"1324":1,"1339":1,"1639":1}}],["considered",{"3":{"0":1,"1":2,"387":1,"469":1,"470":1,"656":1,"733":1,"797":1,"800":1,"819":1,"1051":1,"1060":1,"1068":1,"1226":1,"1286":1,"1339":1,"1359":1,"1380":2,"1395":1,"1396":2,"1415":1,"1568":1,"1631":1}}],["contorted",{"3":{"1359":1}}],["contoso",{"2":{"1646":1,"1649":1,"1650":5,"1657":1,"1697":2,"1699":1,"1727":2,"1728":2,"2091":1},"3":{"556":1,"633":1,"1646":1,"1649":1,"1650":5,"1653":3,"1654":2,"1656":3,"1657":2,"1697":3,"1699":1,"1719":1,"1727":4,"1728":2,"2091":1}}],["contactfragments",{"3":{"1436":1}}],["contacts",{"3":{"1359":1,"1395":2}}],["contact",{"1":{"2246":1,"2247":1},"2":{"1237":1,"1271":1},"3":{"103":1,"390":1,"657":1,"1016":1,"1018":3,"1019":1,"1091":1,"1093":1,"1203":6,"1207":20,"1229":2,"1234":6,"1237":12,"1271":8,"1286":2,"1311":1,"1323":1,"1342":1,"1350":3,"1359":8,"1366":1,"1369":1,"1380":1,"1395":1,"1417":1,"1423":1,"1427":1,"1435":2,"1436":1,"1453":1,"1492":1,"1496":2,"1526":2,"1577":1,"1639":2,"1751":1,"1770":1,"1772":1,"1829":1,"1873":1,"2111":1,"2160":1,"2177":1,"2181":1,"2219":1,"2246":1}}],["contain",{"2":{"1730":1},"3":{"38":1,"258":1,"359":1,"401":1,"523":1,"568":1,"584":1,"1215":1,"1228":1,"1229":2,"1256":1,"1259":3,"1275":1,"1286":3,"1300":1,"1323":2,"1324":4,"1339":2,"1359":6,"1380":1,"1395":1,"1396":1,"1402":1,"1415":2,"1436":21,"1438":1,"1442":1,"1455":2,"1479":1,"1489":2,"1639":1,"1701":1,"1730":1,"1765":1,"1767":2,"1771":1,"1845":1,"1908":1,"2059":1,"2067":1}}],["containing",{"3":{"24":1,"177":1,"609":1,"633":1,"725":1,"980":1,"1228":1,"1237":2,"1255":1,"1270":1,"1298":1,"1300":2,"1309":2,"1311":1,"1324":4,"1339":2,"1359":6,"1395":1,"1396":1,"1415":1,"1417":1,"1436":16,"1458":1,"1488":1,"1639":2,"1641":3}}],["containment",{"3":{"0":1,"970":1,"975":1,"1018":1,"1020":1,"1036":1,"1247":1,"1324":1,"1359":4,"1369":1,"1396":1,"1671":1,"2234":1}}],["containsingle",{"3":{"1436":1}}],["containsanyexcept",{"3":{"1309":1}}],["containspredicate",{"3":{"1286":4,"1415":1}}],["containsregionclaim",{"2":{"972":1,"975":1},"3":{"972":2,"975":1,"1436":7}}],["contains",{"2":{"1239":1,"1859":1},"3":{"0":1,"94":1,"126":1,"135":1,"293":1,"459":1,"524":1,"583":1,"609":1,"741":1,"827":1,"926":1,"980":1,"981":1,"1018":1,"1085":1,"1234":2,"1237":4,"1239":2,"1241":3,"1247":20,"1259":2,"1265":1,"1270":3,"1286":11,"1300":5,"1310":2,"1311":3,"1323":4,"1324":3,"1339":3,"1350":3,"1359":44,"1369":2,"1380":1,"1395":18,"1396":7,"1402":3,"1415":5,"1417":1,"1436":50,"1438":1,"1442":1,"1447":1,"1454":2,"1455":1,"1459":1,"1466":1,"1467":2,"1471":1,"1486":1,"1526":1,"1596":1,"1598":1,"1599":1,"1600":1,"1640":3,"1641":1,"1651":1,"1735":1,"1736":1,"1749":1,"1755":1,"1761":1,"1764":4,"1829":1,"1849":1,"1859":2}}],["contained",{"3":{"0":1,"165":1,"196":1,"341":1,"389":1,"826":1,"837":1,"853":1,"945":1,"1033":1,"1145":1,"1155":1,"1237":2,"1271":1,"1300":1,"1301":1,"1309":2,"1310":2,"1311":1,"1323":1,"1324":2,"1339":1,"1350":5,"1359":5,"1366":1,"1380":1,"1395":2,"1396":2,"1402":5,"1407":1,"1415":1,"1416":1,"1436":3,"1486":1,"1496":1}}],["containerization",{"3":{"1554":1}}],["containerized",{"3":{"1311":1,"1339":1}}],["containerregistry",{"3":{"1465":1}}],["containerregistryloginevents",{"2":{"1465":1},"3":{"1465":1}}],["containerregistryrepositoryevents",{"2":{"1465":1},"3":{"1465":1}}],["containerresource",{"3":{"1339":1}}],["containerlifetime",{"2":{"1441":1},"3":{"1339":1,"1441":1}}],["containername",{"2":{"440":1},"3":{"440":1,"1323":2,"1467":1}}],["containerstarttimeout",{"3":{"640":1,"1436":2}}],["containers",{"1":{"1439":1,"1440":1,"1441":1,"1442":1,"1443":1,"1444":1,"1445":1,"1446":1,"1447":1,"1448":1,"1449":1,"1450":1,"1451":1},"3":{"0":2,"10":1,"62":1,"599":1,"869":1,"914":1,"915":1,"1069":1,"1325":1,"1332":1,"1359":1,"1436":2,"1439":2,"1441":2,"1445":1,"1449":1,"1450":1,"1462":1,"1467":5,"1468":1,"1487":1,"1490":2,"1861":1,"2005":1,"2009":1,"2014":1,"2215":1}}],["containerappconsolelogs",{"2":{"1476":1},"3":{"1467":1,"1476":1,"1591":1}}],["containerapps",{"3":{"1436":1,"1467":1}}],["containerappsystemlogs",{"2":{"609":1,"1465":1,"1476":1},"3":{"609":1,"1465":1,"1467":1,"1476":1}}],["containerappdeclaration",{"3":{"1436":1}}],["containerapp",{"2":{"563":1,"757":1,"1464":1},"3":{"0":1,"563":1,"757":1,"1212":1,"1464":7,"1474":1,"1476":1}}],["container",{"0":{"1385":1},"1":{"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"866":1,"867":1,"868":1,"869":1,"870":1,"871":1,"872":1,"873":1,"874":1,"875":1,"876":1,"877":1},"3":{"0":19,"8":1,"10":2,"31":1,"47":1,"61":1,"63":1,"91":2,"92":2,"93":1,"94":1,"95":1,"97":1,"98":2,"100":1,"102":1,"137":1,"159":1,"166":3,"168":1,"175":1,"202":1,"217":1,"234":2,"235":1,"242":1,"245":1,"291":3,"292":1,"374":1,"401":4,"402":1,"405":1,"413":1,"422":1,"440":2,"441":1,"443":1,"444":1,"451":1,"517":1,"527":1,"545":2,"550":1,"563":1,"564":1,"582":1,"583":1,"584":1,"585":1,"598":1,"599":2,"603":1,"626":1,"633":2,"639":1,"640":8,"641":1,"642":2,"643":1,"665":5,"666":2,"667":1,"669":2,"670":1,"733":2,"751":1,"756":2,"757":1,"758":1,"759":1,"764":1,"765":1,"766":3,"774":2,"783":1,"784":1,"790":1,"791":1,"792":1,"818":1,"820":1,"826":1,"827":5,"833":1,"837":1,"838":1,"866":1,"867":1,"868":1,"869":2,"870":1,"871":1,"872":1,"875":3,"913":2,"914":1,"915":1,"916":1,"924":1,"931":1,"971":1,"980":2,"995":1,"1004":1,"1017":3,"1022":1,"1034":1,"1037":1,"1052":1,"1067":3,"1069":1,"1101":1,"1107":1,"1116":6,"1117":1,"1118":3,"1123":2,"1124":2,"1125":4,"1154":1,"1156":1,"1175":1,"1176":2,"1178":2,"1192":1,"1202":1,"1203":1,"1212":5,"1244":1,"1247":1,"1259":4,"1261":1,"1269":1,"1270":2,"1271":3,"1280":2,"1282":1,"1284":1,"1285":1,"1286":34,"1300":3,"1301":9,"1307":1,"1309":10,"1310":1,"1311":11,"1312":2,"1315":2,"1316":1,"1322":2,"1323":22,"1324":19,"1325":2,"1326":2,"1327":2,"1331":1,"1332":2,"1333":1,"1337":1,"1339":39,"1340":1,"1342":1,"1350":4,"1357":3,"1359":8,"1369":1,"1378":1,"1380":1,"1385":1,"1395":14,"1396":6,"1401":1,"1402":15,"1415":5,"1416":4,"1417":11,"1421":1,"1427":3,"1429":1,"1430":1,"1436":38,"1438":8,"1440":2,"1441":6,"1442":2,"1443":5,"1444":4,"1445":3,"1446":7,"1447":15,"1449":1,"1450":1,"1455":13,"1457":4,"1458":1,"1463":1,"1464":1,"1465":6,"1467":55,"1469":2,"1472":2,"1473":3,"1474":3,"1476":2,"1477":2,"1478":1,"1481":1,"1484":1,"1486":1,"1487":2,"1488":2,"1489":2,"1490":1,"1496":2,"1524":1,"1525":1,"1526":4,"1534":2,"1535":1,"1555":1,"1577":2,"1589":2,"1591":4,"1595":1,"1597":1,"1611":2,"1612":1,"1616":1,"1617":1,"1631":2,"1639":1,"1641":1,"1648":2,"1653":1,"1654":1,"1670":4,"1677":2,"1682":1,"1689":2,"1692":1,"1693":1,"1718":4,"1724":1,"1752":1,"1763":1,"1774":1,"1792":1,"1810":1,"1820":1,"1827":1,"1843":1,"1854":1,"1856":2,"1864":1,"1868":1,"1879":1,"1883":1,"1886":1,"1916":1,"1923":1,"1938":1,"1956":1,"1970":2,"1990":1,"2001":3,"2005":1,"2007":1,"2009":1,"2011":1,"2012":1,"2014":3,"2020":1,"2022":1,"2025":1,"2026":4,"2034":2,"2038":1,"2044":1,"2054":2,"2057":1,"2060":2,"2061":2,"2112":2,"2115":1,"2128":5,"2129":1,"2130":2,"2159":1,"2175":1,"2177":1,"2182":1,"2186":1,"2192":1,"2195":1,"2215":1,"2221":1,"2223":1,"2231":1,"2234":5,"2241":1,"2245":1}}],["contrived",{"3":{"2115":1}}],["contributions",{"3":{"1324":2,"1672":1}}],["contribution",{"3":{"650":1,"1270":1,"1297":1,"1300":1,"1309":1,"1324":1,"1359":3,"1369":1,"1380":1,"1415":5,"1416":1,"1436":9,"2079":1}}],["contributing",{"3":{"135":1,"483":1,"563":3,"564":7,"591":3,"593":1,"594":1,"618":1,"621":1,"626":5,"724":1,"756":3,"766":3,"1091":2,"1300":2,"1323":3,"1339":1,"1350":1,"1357":1,"1380":1,"1395":1,"1416":1,"1436":2,"1459":2,"1486":3,"1492":4,"1496":1,"1513":1,"1526":6,"1577":7,"1582":2,"1586":1,"1591":3,"1600":1}}],["contributed",{"3":{"186":1,"1300":3,"1311":1,"1324":3,"1396":3,"1442":1,"1962":1,"2079":1}}],["contribute",{"3":{"166":1,"648":1,"650":1,"1178":1,"1286":2,"1300":1,"1323":1,"1324":1,"1339":2,"1359":1,"1380":1,"1396":4,"1415":1,"1416":1,"1436":1,"1443":2,"1467":1,"1487":1,"1627":1,"1884":1}}],["contributes",{"3":{"166":2,"171":1,"187":1,"552":1,"585":1,"649":2,"651":1,"725":1,"728":1,"846":1,"1212":1,"1254":1,"1259":2,"1271":3,"1275":1,"1286":5,"1297":1,"1300":1,"1311":1,"1312":6,"1314":1,"1315":1,"1316":1,"1317":1,"1323":4,"1324":9,"1332":1,"1339":1,"1359":15,"1369":1,"1379":2,"1395":6,"1396":4,"1402":1,"1404":1,"1410":1,"1412":1,"1414":1,"1415":9,"1416":3,"1436":9,"1438":2,"1442":1,"1443":1,"1467":1,"1761":1,"1882":1,"1935":1,"2045":1,"2079":1,"2165":1,"2234":1}}],["contributors",{"3":{"756":1,"1299":1,"1300":2,"1317":1,"1323":1,"1415":1,"1577":1,"1582":1,"2041":1,"2069":1}}],["contributor",{"2":{"2129":1},"3":{"0":1,"441":1,"599":1,"628":1,"665":2,"1116":1,"1119":1,"1299":2,"1300":4,"1323":4,"1339":1,"1415":2,"1416":1,"1467":4,"1472":2,"1474":1,"1475":1,"1477":1,"1571":1,"2042":1,"2049":1,"2050":1,"2061":1,"2129":1,"2199":1,"2240":1}}],["contravariance",{"3":{"1259":1,"1270":2,"1310":2}}],["contravariant",{"3":{"1259":2,"1261":1,"1270":4,"1310":1}}],["contradict",{"3":{"1395":1,"1571":1,"1585":1,"1765":1}}],["contradicts",{"3":{"1270":1}}],["contradictory",{"3":{"790":1,"1436":1}}],["contradicted",{"3":{"761":1,"972":1,"1436":1,"1489":1}}],["contradicting",{"3":{"364":1,"972":1}}],["contradiction",{"3":{"256":1,"828":1,"888":1,"1417":1,"1427":1,"1436":1}}],["contrasted",{"3":{"1395":1}}],["contrasting",{"3":{"1324":1,"1395":2,"1396":2}}],["contrasts",{"3":{"455":1,"967":1,"1247":1,"1259":1,"1427":1}}],["contrast",{"3":{"0":1,"24":1,"93":1,"473":1,"617":1,"618":1,"619":1,"621":1,"622":1,"1237":3,"1259":1,"1270":1,"1286":2,"1300":2,"1309":5,"1312":1,"1323":2,"1324":13,"1339":1,"1350":4,"1359":14,"1369":3,"1374":1,"1380":1,"1395":4,"1396":15,"1402":1,"1415":4,"1416":1,"1417":2,"1427":1,"1434":1,"1436":8,"1526":2,"1558":2,"1577":3,"1586":1,"1591":1,"1605":1,"1644":1,"1645":2,"1739":1,"2077":1,"2081":1,"2204":1}}],["contracted",{"3":{"1324":1}}],["contracttype",{"3":{"1247":1}}],["contractnames",{"3":{"1247":2}}],["contractually",{"3":{"1324":1,"1417":1,"1436":1}}],["contractual",{"3":{"1237":1,"1338":1,"1359":1,"1380":1,"1567":1,"1929":1}}],["contractimplementationtests",{"3":{"1199":2,"1207":4,"1436":17,"1489":3}}],["contractimplementationtestsbase",{"2":{"1663":1},"3":{"1199":3,"1207":2,"1312":3,"1436":10,"1663":1}}],["contract",{"0":{"451":1,"1266":1,"1270":1,"1314":1,"1419":1,"1436":1,"1546":1,"1640":1,"1916":1,"1928":1,"1948":1,"1988":1,"2045":1,"2046":1,"2058":1,"2119":1,"2133":1,"2168":1,"2178":1},"1":{"327":1,"328":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"542":1,"543":1,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"550":1,"551":1,"552":1,"561":1,"562":1,"563":1,"564":1,"565":1,"566":1,"567":1,"568":1,"580":1,"581":1,"582":1,"583":1,"584":1,"585":1,"586":1,"587":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1,"671":1,"672":1,"673":1,"674":1,"675":1,"676":1,"677":1,"678":1,"722":1,"723":1,"724":1,"725":1,"726":1,"727":1,"728":1,"729":1,"858":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"865":1,"878":1,"879":1,"880":1,"881":1,"882":1,"883":1,"884":1,"885":1,"894":1,"895":1,"896":1,"897":1,"898":1,"899":1,"900":1,"901":1,"985":1,"986":1,"987":1,"988":1,"989":1,"990":1,"991":1,"992":1,"1165":1,"1166":1,"1167":1,"1168":1,"1169":1,"1170":1,"1171":1,"1311":1,"1986":1,"1987":1,"1988":1,"1989":1,"1990":1,"1991":1,"1992":1},"2":{"633":1,"636":1,"1266":1,"1370":1},"3":{"0":57,"24":5,"26":1,"37":1,"53":3,"54":3,"67":1,"76":1,"79":1,"81":6,"91":1,"107":1,"109":1,"110":1,"113":1,"122":1,"130":1,"135":3,"136":6,"143":1,"160":1,"178":1,"182":1,"193":1,"201":2,"202":3,"226":1,"230":1,"247":1,"255":4,"256":2,"265":1,"293":2,"296":1,"327":1,"328":1,"329":2,"330":1,"331":3,"332":2,"333":3,"335":1,"342":1,"376":1,"381":1,"384":1,"388":1,"411":1,"413":5,"415":1,"416":1,"420":2,"440":1,"443":1,"448":5,"449":1,"450":4,"452":1,"454":1,"469":1,"470":2,"473":1,"477":1,"542":1,"544":3,"545":1,"548":3,"549":4,"550":1,"551":1,"561":1,"564":7,"566":1,"568":1,"571":2,"572":22,"573":1,"574":3,"577":2,"579":2,"580":1,"582":1,"583":2,"584":2,"586":1,"595":1,"608":1,"615":1,"617":1,"618":1,"619":2,"620":1,"624":1,"626":1,"629":1,"631":3,"633":6,"634":1,"635":1,"636":3,"640":2,"648":2,"649":3,"650":2,"651":1,"653":1,"657":2,"658":1,"659":1,"671":1,"674":3,"675":1,"678":3,"682":3,"683":1,"684":1,"686":1,"699":1,"701":1,"707":2,"722":1,"725":4,"726":3,"729":1,"733":1,"735":1,"739":1,"741":3,"742":2,"743":2,"744":1,"745":3,"751":2,"756":2,"759":1,"761":1,"766":1,"776":1,"778":1,"780":1,"781":1,"782":3,"783":1,"784":1,"789":1,"790":2,"792":1,"793":1,"794":1,"795":1,"798":1,"800":1,"817":1,"823":1,"827":3,"834":1,"845":1,"846":4,"847":1,"849":1,"853":1,"854":1,"855":1,"856":1,"858":1,"862":1,"878":1,"879":1,"880":3,"881":3,"884":1,"885":1,"891":3,"892":1,"893":2,"894":1,"896":1,"897":5,"901":1,"904":1,"905":5,"907":3,"914":1,"924":1,"926":1,"931":1,"932":2,"935":1,"939":1,"963":1,"964":2,"965":1,"966":1,"973":1,"980":2,"984":1,"985":1,"987":2,"988":2,"990":2,"992":1,"996":4,"997":1,"998":2,"999":1,"1003":1,"1008":1,"1012":6,"1016":1,"1017":1,"1018":10,"1019":2,"1020":2,"1022":2,"1030":3,"1042":2,"1044":1,"1050":3,"1051":1,"1053":2,"1058":1,"1059":2,"1060":2,"1063":1,"1077":2,"1079":1,"1089":1,"1090":2,"1091":3,"1092":1,"1093":1,"1095":1,"1096":1,"1120":1,"1124":1,"1126":1,"1132":1,"1133":1,"1134":2,"1135":1,"1145":1,"1150":1,"1152":1,"1154":1,"1155":1,"1165":1,"1167":2,"1168":1,"1169":1,"1170":1,"1171":3,"1174":1,"1175":1,"1177":1,"1192":6,"1202":2,"1203":2,"1207":18,"1212":17,"1216":1,"1218":1,"1222":1,"1225":1,"1226":1,"1228":1,"1229":20,"1231":2,"1233":2,"1235":2,"1236":1,"1237":41,"1238":1,"1241":8,"1242":7,"1243":2,"1244":3,"1245":2,"1247":53,"1249":6,"1252":2,"1254":1,"1258":2,"1259":38,"1260":1,"1266":1,"1269":2,"1270":56,"1271":13,"1272":1,"1274":1,"1275":1,"1276":2,"1278":3,"1280":1,"1285":1,"1286":79,"1290":1,"1291":2,"1293":1,"1295":1,"1300":112,"1301":7,"1304":2,"1305":1,"1307":1,"1309":52,"1310":4,"1311":113,"1312":24,"1313":2,"1314":1,"1316":1,"1317":3,"1318":3,"1322":1,"1323":83,"1324":175,"1326":1,"1332":1,"1339":32,"1347":2,"1348":2,"1349":1,"1350":94,"1353":2,"1359":238,"1362":1,"1366":7,"1369":10,"1370":4,"1371":1,"1374":1,"1375":2,"1376":1,"1378":3,"1380":73,"1382":5,"1389":1,"1392":1,"1393":1,"1395":117,"1396":205,"1399":1,"1401":2,"1402":59,"1403":1,"1404":2,"1405":1,"1406":1,"1409":2,"1415":66,"1416":13,"1417":139,"1418":3,"1419":1,"1420":1,"1425":1,"1427":12,"1428":1,"1429":1,"1431":10,"1433":1,"1435":4,"1436":337,"1437":3,"1438":30,"1441":1,"1449":2,"1450":1,"1451":1,"1455":10,"1459":2,"1461":3,"1463":1,"1467":1,"1487":3,"1488":11,"1489":2,"1492":4,"1493":1,"1494":1,"1496":13,"1497":2,"1499":1,"1500":1,"1503":1,"1513":1,"1524":4,"1525":1,"1526":15,"1530":2,"1531":6,"1532":2,"1534":1,"1535":3,"1542":1,"1544":1,"1545":3,"1546":2,"1547":2,"1551":2,"1577":15,"1582":1,"1585":1,"1586":3,"1591":8,"1596":1,"1599":1,"1600":4,"1632":1,"1638":1,"1639":1,"1640":1,"1641":1,"1651":1,"1654":3,"1657":1,"1661":1,"1662":2,"1663":1,"1664":2,"1665":2,"1666":1,"1668":1,"1669":2,"1670":1,"1671":3,"1675":1,"1686":1,"1689":1,"1690":1,"1699":1,"1701":1,"1704":1,"1711":1,"1720":1,"1727":1,"1729":1,"1734":1,"1749":1,"1765":1,"1766":1,"1769":3,"1779":1,"1796":1,"1805":2,"1806":1,"1810":5,"1812":1,"1815":5,"1817":1,"1829":2,"1834":1,"1840":2,"1856":1,"1871":2,"1875":1,"1880":1,"1883":1,"1885":1,"1887":2,"1888":2,"1889":5,"1890":1,"1891":1,"1892":1,"1906":2,"1908":2,"1909":1,"1911":2,"1915":1,"1916":1,"1920":1,"1922":1,"1923":1,"1924":1,"1925":2,"1926":2,"1929":7,"1930":5,"1943":1,"1944":2,"1947":2,"1949":2,"1950":3,"1953":1,"1955":1,"1982":1,"1986":2,"1987":1,"1988":2,"1990":1,"1991":3,"1992":3,"2001":2,"2013":1,"2015":1,"2016":1,"2018":1,"2029":1,"2045":6,"2049":1,"2050":1,"2056":5,"2058":3,"2064":1,"2073":1,"2076":1,"2079":1,"2082":1,"2087":1,"2091":1,"2100":1,"2103":1,"2109":2,"2114":1,"2116":1,"2119":2,"2120":2,"2124":2,"2125":6,"2128":3,"2130":2,"2131":1,"2133":4,"2134":5,"2135":1,"2141":1,"2168":2,"2169":1,"2173":1,"2178":4,"2181":1,"2185":1,"2186":1,"2187":1,"2191":1,"2194":1,"2195":1,"2201":1,"2204":1,"2205":1,"2210":1,"2222":1,"2232":1,"2234":20}}],["contractshapefixtures",{"3":{"1207":24,"1436":35}}],["contracts",{"0":{"1269":1,"1285":1,"1349":1,"2018":1},"1":{"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"1312":1,"1340":1,"1341":1,"1342":1,"1343":1,"1344":1,"1345":1,"1346":1,"1347":1,"1348":1,"1349":1,"1350":1,"1370":1,"1371":1,"1372":1,"1373":1,"1374":1,"1375":1,"1376":1,"1377":1,"1378":1,"1379":1,"1380":1,"1417":1},"2":{"53":1,"95":1,"1270":1,"1370":1,"1378":1,"1404":1,"1500":1,"1649":1,"1703":1,"1792":1,"1793":1,"2018":1,"2029":1},"3":{"0":9,"50":1,"51":1,"53":2,"54":1,"59":1,"80":2,"81":3,"82":1,"95":2,"96":1,"109":6,"136":4,"139":3,"142":1,"150":1,"339":1,"411":1,"413":2,"414":1,"434":1,"493":1,"571":1,"583":2,"587":1,"614":1,"617":1,"649":2,"657":2,"782":3,"846":1,"849":1,"914":1,"953":2,"955":2,"1006":2,"1024":2,"1026":4,"1027":1,"1059":2,"1067":1,"1074":1,"1091":3,"1192":11,"1199":11,"1202":12,"1203":28,"1206":4,"1207":102,"1208":8,"1212":5,"1227":1,"1229":2,"1230":1,"1247":2,"1248":1,"1259":4,"1260":3,"1261":2,"1269":2,"1270":20,"1271":5,"1272":1,"1285":1,"1286":5,"1287":3,"1291":2,"1293":2,"1300":3,"1303":1,"1304":1,"1307":2,"1309":33,"1311":8,"1312":38,"1320":1,"1322":2,"1323":4,"1324":5,"1339":1,"1340":2,"1341":1,"1347":3,"1350":22,"1352":1,"1353":1,"1355":1,"1359":23,"1369":3,"1370":3,"1378":6,"1380":23,"1395":11,"1396":51,"1400":1,"1402":9,"1404":1,"1409":1,"1413":4,"1415":19,"1416":3,"1417":18,"1418":1,"1424":1,"1427":7,"1431":11,"1436":201,"1437":2,"1438":4,"1441":1,"1446":1,"1450":1,"1455":5,"1476":1,"1487":1,"1488":1,"1489":6,"1492":2,"1493":1,"1496":17,"1497":1,"1498":1,"1500":3,"1524":1,"1526":4,"1531":1,"1544":3,"1546":3,"1555":1,"1576":2,"1577":7,"1585":2,"1586":1,"1591":3,"1599":1,"1649":1,"1656":5,"1659":1,"1660":2,"1663":2,"1665":1,"1669":1,"1671":1,"1685":2,"1686":1,"1687":1,"1703":1,"1769":1,"1772":1,"1781":1,"1783":1,"1790":3,"1792":1,"1793":1,"1888":1,"1929":1,"1930":1,"1943":1,"1953":1,"1956":1,"1959":1,"2018":2,"2029":1,"2031":1,"2042":1,"2045":9,"2056":1,"2057":2,"2061":1,"2069":1,"2113":1,"2117":1,"2118":2,"2119":1,"2120":3,"2124":1,"2210":1,"2216":1,"2223":1,"2229":3,"2234":3}}],["controlling",{"3":{"1300":4,"1359":1}}],["controllable",{"3":{"1259":1,"1286":1}}],["controlled",{"3":{"439":1,"1107":1,"1212":1,"1247":3,"1286":2,"1311":2,"1324":1,"1359":5,"1395":1,"1402":2,"1417":3,"1436":4,"1438":1,"1443":1,"1522":1,"1553":1,"1560":1,"1569":1,"1573":1,"1577":1,"1587":1,"1637":1,"1799":1,"1897":1,"2035":1,"2126":2}}],["controllerparameterdescriptor",{"3":{"1311":1}}],["controllerbase",{"3":{"1311":1,"1436":21}}],["controllerfeature",{"3":{"1311":1}}],["controllerconventiontests",{"3":{"1199":1,"1207":2,"1436":5,"1489":1}}],["controllerconventiontestsbase",{"2":{"1654":1},"3":{"1199":2,"1207":2,"1436":5,"1654":1}}],["controllermocks",{"3":{"1199":7,"1207":6}}],["controller",{"0":{"1371":1,"1372":1},"2":{"450":1,"455":1,"727":1},"3":{"0":7,"42":1,"121":1,"124":1,"160":1,"173":1,"186":1,"189":1,"258":1,"299":1,"300":1,"301":1,"302":1,"318":5,"320":3,"321":1,"325":3,"326":1,"329":2,"330":4,"331":1,"332":1,"341":1,"346":1,"350":1,"351":1,"352":2,"391":2,"448":1,"450":1,"454":1,"455":3,"549":1,"571":2,"572":1,"583":1,"585":2,"690":2,"715":1,"723":2,"725":8,"726":1,"727":1,"729":1,"739":2,"740":1,"741":4,"743":5,"744":2,"751":1,"790":1,"838":1,"854":2,"880":1,"900":1,"920":2,"921":2,"922":3,"924":1,"938":1,"1018":1,"1049":1,"1059":2,"1060":1,"1116":2,"1117":1,"1118":2,"1192":1,"1202":1,"1203":1,"1212":1,"1217":1,"1218":1,"1224":2,"1227":1,"1229":4,"1237":1,"1238":1,"1239":1,"1245":2,"1247":6,"1265":1,"1270":6,"1271":2,"1275":1,"1286":1,"1289":1,"1292":1,"1297":2,"1300":24,"1301":1,"1304":1,"1306":1,"1309":18,"1311":110,"1323":4,"1324":2,"1339":1,"1347":2,"1350":12,"1352":1,"1353":1,"1357":1,"1359":121,"1369":1,"1370":1,"1371":5,"1372":3,"1373":3,"1374":3,"1375":2,"1376":3,"1379":1,"1380":122,"1388":1,"1389":1,"1395":8,"1396":42,"1402":19,"1407":2,"1408":1,"1409":2,"1414":1,"1415":47,"1431":1,"1436":87,"1437":3,"1438":11,"1443":1,"1447":1,"1487":3,"1488":2,"1496":6,"1526":3,"1534":1,"1576":1,"1577":2,"1591":2,"1627":1,"1631":3,"1632":3,"1639":2,"1640":2,"1647":2,"1650":3,"1651":4,"1654":1,"1660":1,"1666":1,"1667":2,"1671":1,"1698":1,"1700":1,"1702":3,"1703":1,"1721":1,"1724":1,"1727":4,"1730":1,"1747":2,"1748":1,"1749":3,"1765":2,"1771":1,"1803":1,"1805":2,"1807":1,"1814":2,"1815":1,"1908":1,"1927":3,"1928":1,"1934":1,"1936":1,"1937":1,"1960":1,"1963":1,"1965":1,"1975":1,"1978":2,"1985":1,"1986":1,"1987":1,"1988":3,"1991":1,"1992":1,"1995":4,"1996":4,"1997":3,"1998":1,"2001":1,"2056":1,"2070":1,"2071":1,"2089":1,"2106":1,"2126":2,"2127":1,"2133":1,"2139":2,"2140":1,"2169":1,"2204":1,"2205":1,"2234":1}}],["controllersinheritapicontrollerbase",{"3":{"1436":1}}],["controllersaresealed",{"3":{"1436":1}}],["controllersdonotdependonentityframeworkcore",{"3":{"1436":1}}],["controllersdonotdependoninfrastructure",{"3":{"1436":1}}],["controllersexemptfromapicontrollerbase",{"3":{"1436":2}}],["controllers",{"1":{"327":1,"328":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"1986":1,"1987":1,"1988":1,"1989":1,"1990":1,"1991":1,"1992":1},"2":{"751":1,"1207":1,"1380":7,"1436":1},"3":{"0":5,"42":1,"59":1,"109":1,"132":1,"136":3,"137":1,"155":1,"160":3,"161":2,"186":1,"187":1,"243":2,"300":2,"306":1,"318":7,"320":1,"324":1,"325":5,"326":1,"327":1,"330":2,"334":1,"337":1,"341":2,"384":1,"391":1,"419":1,"423":1,"426":1,"428":1,"447":1,"448":5,"473":1,"545":3,"550":1,"585":2,"674":1,"690":2,"692":1,"725":4,"733":1,"740":1,"741":3,"743":9,"749":3,"751":4,"773":1,"775":1,"789":1,"790":1,"793":1,"826":2,"837":1,"839":1,"841":1,"854":1,"897":2,"900":1,"905":1,"906":1,"909":1,"921":1,"922":1,"923":2,"1004":3,"1018":1,"1026":2,"1028":1,"1049":1,"1059":4,"1060":1,"1099":1,"1103":1,"1116":1,"1192":1,"1202":1,"1203":74,"1207":376,"1212":3,"1213":2,"1224":1,"1227":1,"1229":5,"1236":1,"1239":2,"1244":1,"1245":1,"1247":11,"1270":6,"1286":1,"1290":1,"1294":1,"1297":1,"1300":63,"1301":2,"1302":1,"1303":1,"1304":1,"1306":1,"1308":3,"1309":28,"1311":127,"1323":15,"1339":2,"1347":2,"1348":1,"1350":11,"1351":1,"1359":173,"1367":1,"1369":1,"1370":2,"1371":10,"1372":13,"1373":4,"1374":3,"1375":1,"1376":1,"1380":141,"1386":1,"1390":1,"1395":10,"1396":52,"1402":31,"1403":1,"1404":1,"1406":1,"1408":1,"1410":1,"1415":55,"1416":1,"1431":3,"1436":69,"1437":2,"1438":21,"1447":1,"1467":2,"1487":2,"1489":2,"1496":11,"1526":3,"1535":3,"1540":1,"1577":3,"1582":2,"1586":1,"1591":5,"1597":1,"1599":2,"1600":1,"1635":1,"1656":1,"1666":4,"1673":1,"1685":1,"1686":1,"1753":1,"1765":4,"1779":1,"1812":1,"1813":2,"1815":2,"1825":1,"1874":3,"1898":1,"1922":1,"1928":1,"1929":2,"1932":2,"1938":2,"1941":1,"1961":1,"1985":1,"1986":2,"1992":1,"1996":11,"1998":1,"2001":3,"2002":1,"2024":1,"2025":1,"2112":1,"2133":2,"2134":1,"2139":1,"2210":1,"2229":1,"2234":1}}],["controls",{"0":{"2001":1},"1":{"1999":1,"2000":1,"2001":1,"2002":1,"2003":1},"2":{"682":1,"2122":1},"3":{"0":1,"227":1,"273":1,"369":1,"370":2,"373":1,"413":1,"592":1,"682":1,"685":1,"825":1,"830":1,"1126":1,"1229":1,"1286":1,"1300":1,"1311":4,"1323":2,"1324":3,"1339":1,"1359":4,"1389":1,"1395":4,"1396":1,"1402":2,"1415":2,"1417":3,"1436":8,"1438":1,"1467":2,"1477":1,"1526":1,"1534":2,"1557":1,"1572":1,"1577":1,"1607":1,"1626":1,"1631":3,"1637":1,"1677":1,"1714":1,"1741":1,"1750":1,"1768":1,"1773":1,"1999":2,"2000":1,"2001":1,"2002":1,"2003":2,"2044":1,"2085":1,"2111":1,"2122":1,"2198":1,"2210":1}}],["control",{"0":{"1804":1},"1":{"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"1803":1,"1804":1,"1805":1,"1806":1,"1807":1},"3":{"0":4,"106":1,"174":1,"175":1,"176":1,"177":3,"178":1,"179":1,"185":1,"212":1,"217":1,"221":1,"293":1,"296":1,"343":1,"358":2,"362":1,"376":1,"403":1,"427":2,"443":1,"595":1,"627":1,"699":1,"734":1,"743":1,"745":1,"756":1,"758":2,"765":1,"767":2,"768":1,"770":1,"776":2,"789":1,"876":2,"947":1,"1019":1,"1067":1,"1116":3,"1185":1,"1186":1,"1187":1,"1218":1,"1220":1,"1226":1,"1229":4,"1237":6,"1247":1,"1259":2,"1270":2,"1271":1,"1275":1,"1284":1,"1285":1,"1286":2,"1300":5,"1301":1,"1308":1,"1309":1,"1311":3,"1322":1,"1323":4,"1324":13,"1326":1,"1339":9,"1347":2,"1350":1,"1359":11,"1369":1,"1384":1,"1389":1,"1395":16,"1396":8,"1402":1,"1415":3,"1416":5,"1417":13,"1423":1,"1436":38,"1440":1,"1443":1,"1444":1,"1455":2,"1462":1,"1467":5,"1475":1,"1488":1,"1490":1,"1496":1,"1539":1,"1548":1,"1550":1,"1555":1,"1568":1,"1591":1,"1596":1,"1607":1,"1629":1,"1631":2,"1641":1,"1644":1,"1653":2,"1662":1,"1664":1,"1665":1,"1672":1,"1689":1,"1698":1,"1714":1,"1741":1,"1786":1,"1802":1,"1803":2,"1805":1,"1807":1,"1816":1,"1870":1,"1903":1,"1969":2,"1971":1,"1973":1,"2000":5,"2001":1,"2002":4,"2003":3,"2006":3,"2014":1,"2075":2,"2086":1,"2128":2,"2142":1,"2143":3,"2145":1,"2146":1,"2147":1,"2151":1,"2157":1,"2168":1,"2188":1,"2205":1,"2208":1,"2230":1}}],["contested",{"3":{"714":1,"1436":3}}],["contending",{"3":{"1948":1}}],["contends",{"3":{"1415":1}}],["contenders",{"3":{"1247":1}}],["contended",{"3":{"857":1,"1300":2,"1436":1,"1488":2}}],["contend",{"3":{"519":1,"708":1,"1359":1,"1402":2,"1630":1,"1638":1}}],["contentful",{"3":{"1395":1}}],["contentfilter",{"2":{"1366":1},"3":{"1018":1,"1366":1,"1369":1}}],["contentpage",{"3":{"1324":2,"1417":5}}],["contentpolicyregistrationtests",{"3":{"1199":1,"1207":2,"1577":1}}],["contentpolicyinjectionmode",{"3":{"1091":2,"1199":5,"1203":1,"1207":2,"1424":2,"1427":8}}],["contentpolicy",{"3":{"1021":1,"1089":1,"1091":1,"1093":1,"1366":1,"1424":1,"1427":3,"1526":2,"1577":1}}],["contentpolicyguardrailtests",{"2":{"1435":1},"3":{"1093":1,"1199":1,"1207":2,"1427":1,"1435":2,"1437":1,"1577":1}}],["contentpolicyguardrail",{"2":{"1021":1,"1089":1,"1094":1,"1095":1,"1366":1,"1368":1,"1427":1,"1586":1,"2177":1},"3":{"1018":2,"1021":1,"1089":1,"1091":6,"1093":2,"1094":1,"1095":1,"1198":1,"1199":6,"1203":1,"1207":2,"1366":1,"1368":1,"1424":3,"1427":24,"1496":1,"1526":2,"1577":2,"1585":2,"1586":1,"2177":2}}],["contentpolicysettings",{"2":{"676":1,"677":1,"1424":1,"1427":1},"3":{"674":1,"676":2,"677":1,"1091":5,"1093":1,"1198":1,"1199":5,"1203":1,"1207":2,"1424":3,"1427":17,"1526":1,"1577":1,"1585":1,"2177":1}}],["contentresult",{"3":{"1311":1}}],["contenttypemaxlength",{"2":{"1369":1},"3":{"1350":2,"1369":1}}],["contenttype=",{"3":{"1324":1}}],["contenttype",{"3":{"1286":2,"1323":6,"1324":2,"1350":3,"1369":2,"1415":1,"1417":6,"1436":1}}],["contentdisposition",{"3":{"1286":1,"1323":1}}],["contentsimilaritydto",{"3":{"1199":4,"1203":1,"1207":3,"1347":2,"1350":6,"1359":2,"1380":1}}],["contents",{"2":{"626":1},"3":{"626":1,"715":1,"766":2,"874":1,"1003":1,"1019":1,"1192":3,"1237":2,"1279":1,"1300":1,"1324":4,"1359":1,"1415":1,"1436":1,"1454":2,"1459":1,"1471":1,"1473":1,"1475":2,"1492":1,"1496":1,"1768":1}}],["contentsecuritypolicyreportonly",{"3":{"1339":1}}],["contentsecuritypolicy",{"2":{"214":1,"216":1,"1577":1,"2151":1},"3":{"214":1,"216":1,"1339":3,"1577":2,"2151":1}}],["contention",{"3":{"558":1,"863":2,"996":1,"1150":1,"1153":1,"1278":1,"1286":2,"1359":2,"1402":2,"1436":1,"1456":1,"1545":1,"1630":1,"1635":1,"1638":7,"1688":1,"1909":1}}],["contentmanagement",{"2":{"184":1,"1963":1},"3":{"184":1,"186":1,"1116":1,"1348":2,"1350":4,"1377":1,"1380":7,"1631":2,"1963":1}}],["contenteditors",{"3":{"1359":2,"1627":1}}],["contenteditor",{"2":{"187":1,"386":1,"388":1,"1348":1,"1621":1,"1626":1,"1630":1,"1633":1,"1635":1,"1637":1,"1638":1,"1960":1},"3":{"0":1,"186":1,"187":1,"386":1,"388":1,"1116":1,"1300":1,"1307":1,"1348":2,"1350":4,"1359":5,"1373":2,"1377":1,"1380":7,"1395":2,"1396":2,"1405":1,"1409":1,"1415":9,"1496":2,"1526":1,"1621":4,"1626":1,"1627":2,"1630":4,"1631":6,"1632":1,"1633":1,"1635":2,"1637":2,"1638":5,"1640":2,"1922":1,"1960":2,"1963":1}}],["content",{"0":{"1359":1,"1424":1},"1":{"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1},"2":{"443":1,"1285":1},"3":{"0":7,"90":1,"103":2,"139":1,"142":1,"157":1,"173":1,"175":1,"179":1,"185":1,"213":3,"214":3,"219":1,"384":1,"440":2,"443":3,"454":1,"478":1,"497":1,"529":1,"572":1,"574":1,"575":1,"633":1,"651":1,"664":1,"688":1,"693":1,"720":1,"725":3,"738":1,"740":2,"741":3,"747":1,"749":2,"757":1,"764":1,"774":1,"809":1,"813":1,"832":1,"869":1,"909":1,"1010":1,"1011":1,"1012":1,"1016":1,"1089":3,"1091":3,"1093":3,"1095":2,"1114":1,"1115":1,"1116":6,"1118":2,"1186":2,"1192":1,"1212":1,"1237":2,"1259":1,"1270":1,"1283":1,"1285":5,"1286":28,"1300":3,"1301":1,"1306":1,"1309":9,"1310":1,"1311":19,"1323":12,"1324":28,"1336":3,"1339":9,"1347":1,"1348":1,"1350":19,"1357":1,"1359":40,"1366":1,"1369":1,"1376":2,"1380":14,"1390":1,"1393":1,"1394":1,"1395":26,"1396":9,"1399":1,"1402":17,"1411":2,"1415":28,"1416":11,"1417":6,"1418":2,"1423":2,"1424":4,"1427":18,"1432":2,"1436":35,"1437":1,"1438":4,"1443":2,"1455":2,"1458":1,"1467":1,"1487":1,"1488":1,"1489":1,"1496":5,"1526":2,"1531":1,"1532":1,"1553":3,"1559":2,"1563":3,"1572":1,"1577":2,"1586":1,"1600":1,"1607":1,"1630":2,"1631":4,"1632":1,"1637":2,"1638":4,"1639":2,"1640":3,"1641":2,"1644":1,"1646":1,"1702":1,"1705":1,"1713":2,"1731":1,"1741":1,"1749":1,"1764":1,"1765":1,"1781":1,"1815":1,"1825":1,"1871":1,"1909":1,"1922":1,"1960":1,"1961":1,"1964":1,"1965":1,"1971":1,"2001":3,"2012":3,"2013":1,"2056":1,"2077":2,"2127":3,"2128":5,"2130":2,"2149":2,"2150":2,"2151":3,"2152":1,"2155":1,"2177":1,"2181":4,"2182":1,"2234":3,"2242":1}}],["contextual",{"3":{"1395":1}}],["contextkey",{"3":{"1286":1}}],["contexts",{"0":{"1514":1},"3":{"0":1,"166":1,"591":2,"593":1,"618":1,"703":1,"988":1,"1035":2,"1175":1,"1226":1,"1237":1,"1259":1,"1278":1,"1283":1,"1286":15,"1324":1,"1359":2,"1396":1,"1415":2,"1417":1,"1436":2,"1443":1,"1453":1,"1486":1,"1487":1,"1490":1,"1492":1,"1496":1,"1526":1,"1541":1,"1544":1,"1545":1,"1577":6,"1582":2,"1583":1,"1584":1,"1638":2,"1639":1,"1660":1,"1664":1,"1697":1,"1700":1,"1719":1,"1800":1,"1811":1,"1849":1,"2011":1,"2112":1,"2115":1,"2117":1,"2241":1}}],["context",{"0":{"4":1,"10":1,"16":1,"30":1,"38":1,"46":1,"52":1,"58":1,"67":1,"77":1,"85":1,"97":1,"108":1,"116":1,"131":1,"146":1,"156":1,"165":1,"174":1,"185":1,"194":1,"206":1,"213":1,"224":1,"234":1,"242":1,"264":1,"272":1,"280":1,"290":1,"299":1,"309":1,"317":1,"329":1,"340":1,"349":1,"358":1,"369":1,"379":1,"387":1,"396":1,"412":1,"419":1,"433":1,"439":1,"447":1,"458":1,"469":1,"481":1,"498":1,"506":1,"517":1,"527":1,"535":1,"544":1,"555":1,"563":1,"571":1,"582":1,"590":1,"598":1,"608":1,"617":1,"625":1,"632":1,"639":1,"648":1,"656":1,"664":1,"673":1,"681":1,"689":1,"697":1,"706":1,"714":1,"724":1,"732":1,"740":1,"748":1,"756":1,"765":1,"773":1,"781":1,"789":1,"798":1,"809":1,"818":1,"826":1,"837":1,"845":1,"853":1,"860":1,"868":1,"880":1,"888":1,"896":1,"904":1,"913":1,"921":1,"930":1,"938":1,"945":1,"953":1,"963":1,"971":1,"979":1,"987":1,"995":1,"1003":1,"1011":1,"1017":1,"1025":1,"1033":1,"1041":1,"1049":1,"1058":1,"1066":1,"1074":1,"1082":1,"1090":1,"1099":1,"1107":1,"1115":1,"1123":1,"1132":1,"1140":1,"1150":1,"1160":1,"1167":1,"1174":1,"1183":1,"1195":1,"1273":1,"1318":1,"1341":1,"1363":1,"1404":1,"1405":1,"1482":1,"1503":1,"1849":1},"2":{"135":1,"459":1,"740":1,"1175":1,"1233":1,"1300":1,"1464":1},"3":{"0":24,"1":1,"15":2,"26":2,"27":3,"45":3,"47":2,"62":1,"135":2,"145":1,"150":1,"160":1,"164":1,"165":1,"166":2,"167":1,"193":1,"200":1,"201":1,"202":5,"229":1,"233":1,"265":1,"279":1,"296":1,"298":1,"302":2,"303":4,"340":1,"346":1,"359":3,"365":2,"366":1,"375":1,"392":1,"393":1,"395":1,"397":1,"400":1,"423":1,"459":1,"468":1,"470":1,"477":1,"481":5,"482":2,"483":3,"485":1,"490":2,"526":1,"539":1,"545":1,"555":1,"564":1,"578":1,"582":1,"587":1,"591":1,"593":1,"647":1,"660":1,"669":1,"696":1,"697":1,"698":12,"699":2,"700":2,"702":7,"707":2,"715":1,"716":2,"720":1,"731":1,"740":1,"748":1,"761":2,"794":1,"797":1,"804":1,"806":1,"825":1,"826":1,"827":1,"833":1,"836":1,"875":1,"877":2,"889":3,"893":1,"898":1,"905":5,"906":1,"910":2,"920":1,"926":11,"931":1,"962":1,"967":3,"988":9,"990":2,"991":1,"1007":1,"1019":1,"1021":1,"1032":1,"1033":2,"1034":4,"1035":1,"1036":3,"1038":2,"1040":1,"1042":6,"1050":4,"1053":1,"1054":1,"1059":2,"1061":1,"1062":1,"1083":3,"1084":2,"1086":1,"1087":1,"1089":1,"1093":1,"1103":1,"1107":1,"1110":1,"1128":1,"1133":1,"1137":2,"1150":1,"1173":1,"1174":3,"1175":5,"1177":1,"1180":1,"1192":2,"1201":1,"1202":4,"1203":11,"1207":32,"1212":4,"1219":1,"1229":5,"1233":1,"1237":4,"1247":1,"1249":1,"1252":2,"1253":3,"1254":1,"1256":1,"1257":2,"1258":1,"1259":50,"1270":33,"1271":1,"1273":9,"1274":8,"1275":2,"1276":4,"1277":1,"1278":12,"1280":1,"1281":2,"1283":1,"1284":1,"1286":275,"1296":2,"1297":1,"1300":49,"1309":17,"1310":2,"1311":33,"1312":8,"1313":1,"1316":1,"1317":1,"1318":5,"1319":1,"1323":35,"1324":23,"1326":1,"1333":1,"1336":1,"1339":31,"1340":1,"1341":1,"1343":1,"1345":2,"1350":14,"1357":1,"1359":64,"1363":4,"1369":11,"1370":1,"1378":1,"1380":11,"1395":3,"1396":24,"1397":1,"1402":5,"1403":1,"1404":2,"1405":1,"1406":2,"1410":1,"1412":1,"1415":31,"1417":7,"1427":1,"1433":1,"1436":38,"1437":1,"1438":7,"1441":1,"1453":2,"1455":1,"1456":1,"1457":1,"1464":2,"1471":1,"1488":1,"1489":1,"1496":3,"1510":1,"1526":2,"1534":2,"1541":1,"1543":1,"1556":1,"1561":1,"1571":1,"1575":1,"1577":6,"1581":1,"1586":1,"1607":1,"1629":1,"1630":8,"1631":3,"1632":2,"1634":7,"1635":2,"1638":11,"1639":9,"1641":1,"1651":4,"1652":3,"1664":2,"1665":2,"1666":1,"1670":1,"1673":1,"1697":3,"1700":1,"1719":2,"1720":1,"1727":1,"1728":2,"1741":1,"1751":1,"1790":1,"1800":1,"1801":1,"1805":1,"1810":2,"1832":1,"1840":2,"1849":7,"1851":6,"1853":1,"1861":1,"1869":1,"1872":2,"1876":1,"1898":1,"1923":1,"1930":1,"1931":2,"1941":1,"2052":2,"2054":1,"2115":1,"2121":1,"2140":1,"2144":3,"2159":1,"2167":1,"2171":1,"2181":1,"2187":3,"2188":1,"2195":1,"2201":2,"2234":5,"2241":1}}],["contiguous",{"3":{"1312":2}}],["contiguously",{"3":{"0":1}}],["continuing",{"3":{"1324":1,"1339":2,"1396":1,"1447":1}}],["continuity",{"0":{"1566":1},"1":{"1706":1,"1707":1,"1708":1,"1709":1,"1710":1},"2":{"1330":1,"1367":1},"3":{"399":1,"1216":1,"1233":1,"1237":1,"1247":2,"1258":1,"1259":15,"1263":1,"1270":7,"1286":18,"1300":5,"1301":1,"1304":1,"1307":1,"1309":10,"1311":10,"1312":7,"1323":15,"1324":24,"1330":2,"1334":1,"1338":1,"1339":25,"1350":2,"1352":1,"1357":1,"1359":17,"1365":1,"1367":1,"1369":2,"1380":7,"1395":25,"1396":35,"1402":8,"1415":15,"1416":2,"1417":20,"1427":1,"1435":1,"1436":11,"1441":2,"1450":1,"1455":4,"1458":1,"1461":1,"1467":2,"1469":1,"1474":1,"1475":1,"1483":1,"1499":1,"1526":1,"1535":1,"1575":1,"1577":1,"1581":1,"1582":1,"1583":1,"1591":1,"1600":1,"1602":1,"1674":1,"1706":1,"1796":1,"2030":1,"2164":1}}],["continuation",{"3":{"1300":1,"1312":6,"1417":1,"1436":1,"2188":1}}],["continuations",{"3":{"482":1,"1805":1}}],["continuous",{"3":{"68":1,"1300":1,"1417":1,"1452":1,"1453":1,"1455":1,"1709":1}}],["continuously",{"3":{"0":1,"62":1,"390":1,"501":1,"1153":1,"1286":1,"1324":1,"1436":1,"1475":1,"1984":1,"2227":1}}],["continued",{"3":{"1417":1,"1455":1}}],["continueuseractivity",{"3":{"1416":2}}],["continue",{"2":{"889":1},"3":{"0":2,"375":1,"491":1,"583":1,"618":1,"624":1,"626":3,"633":1,"638":1,"640":1,"642":1,"757":1,"873":1,"876":2,"877":2,"889":1,"913":1,"914":1,"917":1,"1034":1,"1037":1,"1069":2,"1075":1,"1259":3,"1270":1,"1286":3,"1300":1,"1311":2,"1328":1,"1334":1,"1339":6,"1359":1,"1369":4,"1390":1,"1395":5,"1396":1,"1438":1,"1441":1,"1445":2,"1446":1,"1449":1,"1450":1,"1453":1,"1455":5,"1456":1,"1459":1,"1460":1,"1465":1,"1467":1,"1490":4,"1492":4,"1526":5,"1534":1,"1577":7,"1591":1,"1599":1,"1600":1,"1750":1,"1773":1,"2196":1}}],["continues",{"3":{"0":1,"47":1,"141":1,"516":1,"897":1,"1259":2,"1286":1,"1300":4,"1311":2,"1323":4,"1339":1,"1359":1,"1396":1,"1445":1}}],["dhl",{"3":{"1749":1,"1765":1}}],["d1cae3ed",{"3":{"1591":1}}],["d5297706",{"3":{"1496":1}}],["d5fd0e9",{"2":{"424":1},"3":{"424":1}}],["d4824b36",{"3":{"1496":1}}],["d4",{"3":{"1436":1}}],["dwarf",{"3":{"1467":1}}],["dwarfs",{"3":{"1292":1}}],["dwelling",{"3":{"1436":1}}],["dp",{"3":{"2226":1}}],["dpi",{"3":{"1416":1}}],["dpapi",{"3":{"1416":1,"1417":2}}],["dcp",{"3":{"1311":3,"1490":1}}],["d841f798",{"3":{"1496":1}}],["d8",{"3":{"1286":1,"2128":1}}],["dst",{"3":{"1300":1,"1350":2,"1356":1,"1359":3,"1369":1,"1396":2}}],["dsl",{"3":{"1241":1,"1660":1,"1670":1,"1989":2,"1990":1}}],["dsar",{"1":{"722":1,"723":1,"724":1,"725":1,"726":1,"727":1,"728":1,"729":1},"3":{"0":1,"696":1,"722":1,"727":1,"1212":2,"1300":1,"1311":2,"1438":2,"1575":1,"1577":2,"1582":1,"1672":1,"2234":1}}],["dtend",{"3":{"1300":1}}],["dtstart",{"3":{"1300":1}}],["dtstamp",{"2":{"1356":1},"3":{"1300":4,"1356":1}}],["dt",{"3":{"1247":2}}],["dtu",{"3":{"767":1,"1446":1,"1457":1,"1467":1,"1473":1,"1478":1,"1483":1,"1484":1}}],["dtoorlookupsuffix",{"3":{"1436":1}}],["dtoprojector",{"3":{"1247":1,"1270":1}}],["dtomapper",{"2":{"331":1},"3":{"331":1,"1193":1,"1244":1,"1247":2,"1270":1,"1309":1,"1311":1,"1359":16,"1396":1,"1402":4,"1497":1,"1651":1}}],["dtotoentitypropertymap",{"2":{"331":1,"332":1,"333":1,"335":1,"1244":1,"1988":1,"1991":1},"3":{"331":1,"332":1,"333":1,"335":1,"1244":1,"1247":14,"1359":7,"1988":1,"1991":1}}],["dtosandrequests",{"3":{"1436":1}}],["dtos",{"2":{"1207":1,"1359":2,"1396":1,"1402":1},"3":{"4":1,"331":1,"340":1,"341":2,"549":1,"558":1,"657":2,"674":1,"799":1,"1026":1,"1049":1,"1168":1,"1192":2,"1202":2,"1203":30,"1207":98,"1244":1,"1245":1,"1247":3,"1270":5,"1271":1,"1286":2,"1289":1,"1300":8,"1309":13,"1311":15,"1312":2,"1323":1,"1324":2,"1341":2,"1347":1,"1350":35,"1353":4,"1359":67,"1374":2,"1380":3,"1395":4,"1396":18,"1401":1,"1402":13,"1404":2,"1415":6,"1431":1,"1436":15,"1438":3,"1455":1,"1489":2,"1496":2,"1526":2,"1532":1,"1542":1,"1546":1,"1630":2,"1631":1,"1639":1,"1650":1,"1671":1,"1857":1,"1871":1,"1929":1,"1988":1,"2073":1,"2080":1,"2144":1,"2229":1,"2234":1}}],["dto",{"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"1311":1,"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1956":1,"1957":1,"1958":1,"1959":1},"2":{"1955":1},"3":{"0":8,"2":1,"3":3,"5":1,"7":1,"42":1,"330":1,"331":3,"332":1,"333":2,"334":1,"335":1,"341":2,"342":1,"343":1,"360":1,"473":1,"543":1,"545":1,"549":1,"657":1,"690":1,"725":1,"741":1,"742":1,"799":1,"881":5,"882":1,"883":3,"922":1,"923":1,"926":9,"927":1,"1026":1,"1028":1,"1049":1,"1050":3,"1059":2,"1060":1,"1133":1,"1168":4,"1170":1,"1192":1,"1202":2,"1203":2,"1212":3,"1213":1,"1227":1,"1229":2,"1237":1,"1238":1,"1241":4,"1242":2,"1243":1,"1244":4,"1247":25,"1260":3,"1262":2,"1263":1,"1265":5,"1266":1,"1269":1,"1270":35,"1271":6,"1286":7,"1297":1,"1300":20,"1304":1,"1309":20,"1310":1,"1311":50,"1312":2,"1316":1,"1323":12,"1324":28,"1340":1,"1344":3,"1347":1,"1348":1,"1350":91,"1352":1,"1353":1,"1354":2,"1356":1,"1359":168,"1370":1,"1375":1,"1380":4,"1382":3,"1384":2,"1389":1,"1395":70,"1396":49,"1398":2,"1401":2,"1402":33,"1409":1,"1410":1,"1415":36,"1416":3,"1436":13,"1437":4,"1438":6,"1487":2,"1496":7,"1526":3,"1542":1,"1577":3,"1591":1,"1639":1,"1651":1,"1662":2,"1666":1,"1683":1,"1684":1,"1686":1,"1702":2,"1720":1,"1727":4,"1728":1,"1749":1,"1750":1,"1779":1,"1810":4,"1815":2,"1830":1,"1868":1,"1874":2,"1883":2,"1933":2,"1950":1,"1951":2,"1952":1,"1953":7,"1954":1,"1955":7,"1956":2,"1957":2,"1959":1,"1988":2,"1991":2,"1992":4,"2053":1,"2082":1,"2097":2,"2210":2,"2232":1,"2234":1}}],["dml",{"0":{"719":1},"3":{"719":1,"1436":1,"1467":1,"1496":1}}],["dd0b6a9",{"3":{"1496":1}}],["ddl",{"3":{"1467":1,"1477":1,"1719":1,"1727":1}}],["dd",{"3":{"305":1,"1018":1,"1300":2,"1350":2,"1359":1,"1369":2,"1436":6,"1492":1,"1609":1,"1710":1,"1743":1,"2140":1}}],["ddd",{"0":{"1638":1},"3":{"0":1,"469":1,"781":1,"1049":1,"1117":1,"1201":1,"1202":1,"1203":1,"1211":1,"1212":1,"1230":1,"1231":2,"1237":10,"1247":3,"1259":1,"1270":4,"1271":1,"1286":4,"1300":5,"1309":5,"1310":1,"1311":2,"1323":3,"1340":1,"1350":9,"1359":28,"1369":6,"1380":3,"1396":9,"1402":13,"1415":5,"1431":1,"1436":29,"1489":3,"1506":1,"1523":1,"1536":1,"1577":2,"1581":1,"1582":1,"1583":1,"1588":1,"1590":1,"1637":1,"1638":1,"1639":2,"1640":1,"1646":1,"1659":1,"1662":2,"1692":1,"1763":1,"1780":1,"1781":1,"1810":1,"1811":2,"2049":1,"2092":1,"2116":1,"2117":1,"2206":1,"2215":1,"2218":1,"2223":1,"2229":1,"2245":1,"2247":1}}],["d32",{"3":{"91":1}}],["dlls",{"3":{"1436":1}}],["dll",{"2":{"1445":6},"3":{"0":1,"869":1,"939":1,"1436":1,"1445":7}}],["d",{"3":{"0":1,"67":1,"91":1,"373":1,"585":1,"1126":1,"1237":1,"1300":3,"1307":1,"1323":1,"1324":4,"1350":1,"1359":30,"1375":1,"1377":1,"1380":1,"1396":1,"1417":1,"1427":1,"1436":9,"1454":1,"1526":1,"1566":1,"1577":1,"1591":1,"1611":1,"1632":1,"1715":1,"1765":1,"1935":1}}],["dynamiccode",{"3":{"1436":2}}],["dynamiccomponent",{"2":{"1324":1},"3":{"649":1,"1324":1}}],["dynamicerrors",{"3":{"1199":2,"1207":1,"1436":7}}],["dynamicqueryconfig",{"2":{"1247":1,"1989":1},"3":{"1199":9,"1203":1,"1207":2,"1241":4,"1247":19,"1496":2,"1989":1}}],["dynamically",{"3":{"329":1,"545":1,"1018":1,"1247":2,"1324":2,"1436":1,"1441":1,"1455":1,"1458":1,"1486":1,"1489":1,"1750":1,"1773":1,"1991":1}}],["dynamic",{"0":{"1241":1},"1":{"327":1,"328":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"1986":1,"1987":1,"1988":1,"1989":1,"1990":1,"1991":1,"1992":1},"3":{"0":1,"95":1,"215":1,"235":1,"327":1,"329":1,"330":2,"331":2,"332":1,"335":1,"545":1,"548":1,"549":1,"591":1,"593":1,"740":1,"766":1,"880":1,"881":1,"1192":1,"1202":1,"1203":1,"1212":1,"1213":2,"1238":3,"1241":4,"1242":1,"1243":2,"1245":1,"1247":39,"1259":1,"1286":1,"1310":1,"1311":3,"1324":3,"1331":1,"1336":1,"1339":10,"1342":1,"1350":1,"1359":3,"1362":1,"1369":1,"1371":1,"1380":1,"1395":3,"1396":8,"1402":1,"1407":1,"1416":1,"1436":6,"1437":1,"1438":4,"1441":3,"1444":1,"1496":3,"1585":1,"1666":1,"1720":1,"1779":1,"1815":3,"1816":2,"1817":1,"1928":1,"1986":2,"1988":2,"1989":1,"1991":1,"1992":2,"2012":1,"2155":3,"2210":1,"2222":1}}],["dade",{"3":{"2222":1}}],["dast",{"3":{"2221":1}}],["dashed",{"3":{"1758":1}}],["dashes",{"3":{"1286":1}}],["dash",{"3":{"1335":1,"1339":1,"1395":2,"1438":1,"1467":2}}],["dashboard",{"2":{"1449":1,"1460":1},"3":{"0":3,"126":1,"390":1,"397":2,"407":1,"556":1,"618":1,"707":1,"709":1,"792":1,"861":1,"898":1,"913":3,"914":2,"915":2,"916":1,"917":1,"918":1,"1017":2,"1018":2,"1020":1,"1043":2,"1067":1,"1091":1,"1092":2,"1116":1,"1212":1,"1213":1,"1259":1,"1270":3,"1311":1,"1312":1,"1323":1,"1333":1,"1339":3,"1340":1,"1347":4,"1350":20,"1359":22,"1366":1,"1376":1,"1380":9,"1385":3,"1388":1,"1389":1,"1395":49,"1396":13,"1402":1,"1425":2,"1427":3,"1435":1,"1436":1,"1438":5,"1439":1,"1440":2,"1441":1,"1443":2,"1446":1,"1449":1,"1460":1,"1476":6,"1483":1,"1488":1,"1490":2,"1524":1,"1526":1,"1532":1,"1608":1,"1621":1,"1624":1,"1625":1,"1626":2,"1627":4,"1632":3,"1640":2,"1653":4,"1657":2,"1689":1,"1698":2,"1700":2,"1704":1,"1724":1,"1755":1,"1911":1,"1948":1,"2004":3,"2006":3,"2011":6,"2015":2,"2047":1,"2048":1,"2156":2,"2158":2,"2159":1,"2160":1,"2162":1,"2168":1,"2179":2,"2231":1}}],["dashboards",{"1":{"911":1,"912":1,"913":1,"914":1,"915":1,"916":1,"917":1,"918":1},"3":{"0":1,"402":1,"409":1,"911":1,"1212":1,"1301":1,"1317":1,"1323":1,"1324":1,"1332":1,"1333":1,"1339":1,"1436":3,"1438":2,"1443":2,"1467":1,"1482":1,"1487":1,"1550":1,"1570":1,"1574":1,"1577":2,"1578":1,"1582":1,"1583":1,"1677":1,"2008":1,"2011":1,"2161":1,"2234":1}}],["damaging",{"3":{"1900":1}}],["damage",{"3":{"237":1,"293":1,"818":1,"1324":2,"1339":1,"1359":1,"1396":1,"1980":1}}],["dangling",{"3":{"1323":1,"1359":2,"1383":1,"1395":3,"1415":1,"1639":1,"1852":1}}],["danger",{"3":{"1286":1}}],["dangerously",{"3":{"1301":1}}],["dangerousacceptanyservercertificatevalidator",{"3":{"1286":1}}],["dangerous",{"3":{"932":1,"1107":1,"1132":1,"1133":1,"1300":1,"1359":3,"1465":1,"1467":1,"1473":1,"1489":1,"1840":1,"1919":1,"2045":1,"2196":1}}],["dance",{"3":{"1109":1,"1286":2,"1311":1,"1324":1,"1343":1,"1352":1,"1396":3,"1398":1,"1402":3,"1415":1,"1973":1,"1979":1,"2129":1}}],["daemon",{"3":{"625":1,"642":1,"1339":1,"1430":1,"1436":5,"1438":1,"1449":1,"1455":1,"1460":1,"1486":2,"1490":2}}],["dailyquotagb",{"2":{"719":1,"1465":1,"1469":1},"3":{"719":1,"1465":3,"1467":2,"1469":1}}],["daily",{"3":{"0":1,"395":1,"401":1,"403":2,"709":1,"719":2,"1270":1,"1286":2,"1333":1,"1339":1,"1442":1,"1443":1,"1445":1,"1451":1,"1455":3,"1461":1,"1465":6,"1467":6,"1469":1,"1496":1,"1591":1,"1860":1,"1929":1,"2160":1}}],["dateless",{"3":{"1436":1}}],["dateformat",{"3":{"1395":1}}],["dateonly",{"3":{"1234":1,"1237":6,"1300":3,"1350":4,"1359":8,"1369":1,"1395":4,"1436":11,"1630":3,"1631":1,"1640":4}}],["dateoccurred",{"2":{"77":1,"1160":1,"1162":1,"1163":1,"1585":1,"1888":1,"1889":1},"3":{"0":2,"77":1,"782":1,"846":1,"1160":1,"1161":1,"1162":1,"1163":1,"1212":2,"1247":3,"1249":2,"1259":8,"1269":1,"1270":2,"1350":2,"1396":2,"1436":6,"1438":1,"1496":1,"1577":1,"1585":1,"1888":1,"1889":1}}],["dates",{"3":{"86":2,"265":1,"490":1,"493":1,"656":1,"1073":1,"1074":2,"1237":1,"1308":1,"1309":3,"1350":1,"1359":5,"1369":3,"1387":1,"1395":6,"1396":5,"1415":1,"1438":1,"1564":1,"1591":1,"1630":1,"1631":1,"1764":1,"1776":1}}],["datetimetoday",{"3":{"1436":2}}],["datetimestyles",{"3":{"1247":2,"1300":1,"1309":3,"1312":1,"1396":2}}],["datetimekind",{"3":{"1237":1,"1247":1,"1286":6,"1309":2,"1312":3,"1359":1,"1369":2,"1396":4,"1415":2,"1436":1,"1438":4}}],["datetimefilterstrategytests",{"3":{"1199":1,"1207":3}}],["datetimefilterstrategy",{"2":{"1241":1,"1815":1},"3":{"1199":3,"1203":1,"1207":2,"1241":5,"1247":9,"1815":1}}],["datetimeoffset",{"2":{"1161":1,"2044":1},"3":{"1161":2,"1212":1,"1286":3,"1300":6,"1311":1,"1323":4,"1324":2,"1339":3,"1350":4,"1359":4,"1380":2,"1395":2,"1396":18,"1415":3,"1417":4,"1431":1,"1436":12,"1631":1,"1639":1,"2044":2}}],["datetime",{"2":{"708":1,"1033":1,"1160":2,"2053":1},"3":{"0":1,"330":1,"708":1,"1033":1,"1034":2,"1160":3,"1161":5,"1212":1,"1237":6,"1247":7,"1259":6,"1273":1,"1286":17,"1300":11,"1309":8,"1311":1,"1312":6,"1323":12,"1324":4,"1342":2,"1350":21,"1359":12,"1362":1,"1369":1,"1378":1,"1380":4,"1395":11,"1396":21,"1402":3,"1415":13,"1416":1,"1431":2,"1436":42,"1438":1,"1453":1,"1490":1,"1496":4,"1526":1,"1577":2,"1591":1,"1631":2,"1635":2,"1639":2,"1640":4,"1641":1,"1937":1,"1988":1,"2044":3,"2053":1}}],["datetimerangetests",{"3":{"1199":1,"1207":2,"1237":1}}],["datetimerange",{"2":{"659":1,"660":1},"3":{"0":1,"657":9,"659":3,"660":1,"1199":3,"1203":1,"1207":2,"1230":1,"1234":4,"1237":10,"1630":1,"1631":1,"1635":1,"1662":1}}],["datediff",{"3":{"1362":1,"1369":2}}],["dated",{"3":{"0":1,"104":1,"138":2,"139":3,"140":1,"141":1,"142":1,"371":1,"409":1,"429":1,"486":1,"767":1,"869":1,"1018":1,"1021":1,"1042":1,"1045":1,"1075":1,"1077":1,"1090":1,"1212":1,"1324":1,"1339":1,"1350":1,"1359":1,"1366":1,"1369":1,"1417":2,"1436":2,"1438":1,"1477":1,"1492":1,"1496":1,"1526":2,"1530":1,"1531":1,"1533":1,"1535":1,"1577":1,"1589":1,"1591":3,"1595":1,"1596":2,"1597":1,"1598":1,"1605":1,"1610":1,"1672":1,"1739":1,"1744":1,"2187":1}}],["daterangetests",{"3":{"1199":1,"1207":2}}],["daterange",{"2":{"659":1,"660":1},"3":{"0":1,"657":9,"659":3,"660":1,"1199":3,"1203":1,"1207":2,"1230":1,"1234":7,"1237":15,"1311":1,"1350":1,"1359":1,"1438":1,"1496":1,"1577":1,"1630":1,"1631":2,"1635":2,"1662":1,"1810":1}}],["date",{"3":{"0":2,"1":3,"136":2,"138":1,"139":1,"252":1,"254":1,"259":1,"298":2,"305":7,"349":1,"492":1,"540":2,"624":1,"627":1,"717":1,"825":1,"867":1,"1018":1,"1220":1,"1237":1,"1247":1,"1286":2,"1300":12,"1309":3,"1311":1,"1323":1,"1347":1,"1350":7,"1352":3,"1359":20,"1362":1,"1364":1,"1369":4,"1380":1,"1393":3,"1395":33,"1396":9,"1415":3,"1431":2,"1436":24,"1453":1,"1455":2,"1467":1,"1474":1,"1475":1,"1477":1,"1496":1,"1526":1,"1564":1,"1591":1,"1609":1,"1630":1,"1631":8,"1635":3,"1639":1,"1710":1,"1743":1,"1764":2,"1765":1,"1767":1,"1769":2,"1814":1,"2004":1,"2087":1,"2140":4,"2234":1}}],["datacimex",{"3":{"2222":1}}],["datacontractattribute",{"3":{"1300":1}}],["datacontractserializer",{"2":{"657":1},"3":{"657":1}}],["datacontract",{"2":{"659":1,"963":1},"3":{"0":2,"657":1,"659":1,"725":1,"963":1,"964":2,"1227":1,"1229":7,"1234":1,"1237":5,"1300":1,"1311":1,"1805":1}}],["dataresidency",{"3":{"1489":1}}],["dataresidencytests",{"2":{"972":1,"1525":1},"3":{"971":1,"972":5,"974":2,"1199":1,"1207":2,"1436":9,"1489":1,"1493":1,"1525":1,"1526":2,"1535":1,"1591":1}}],["dataresidencytestsbasetests",{"3":{"972":2,"975":1,"1199":1,"1207":3,"1436":9,"1577":1,"1582":1}}],["dataresidencytestsbase",{"2":{"972":1,"975":1,"1575":1,"2043":1,"2044":1},"3":{"0":1,"972":2,"973":1,"974":2,"975":2,"1199":3,"1207":2,"1212":1,"1431":1,"1436":16,"1496":2,"1575":1,"1577":1,"1582":1,"1654":1,"2043":1,"2044":1}}],["dataannotation",{"3":{"1395":1}}],["dataannotationsmodelvalidator",{"2":{"1384":1},"3":{"1199":27,"1203":1,"1207":2,"1324":24,"1384":1,"1395":19,"1396":4}}],["dataannotations",{"3":{"117":1,"128":2,"819":1,"1259":1,"1271":1,"1286":3,"1300":9,"1309":3,"1311":2,"1320":1,"1323":6,"1324":24,"1339":3,"1384":1,"1395":29,"1396":3,"1427":2,"1436":2,"1591":2,"1596":2,"1597":1,"1600":1}}],["datagrid",{"3":{"1324":3,"1395":1,"1396":2,"1524":2,"1526":1,"1530":1,"1531":2}}],["datagridlistpagebasetests",{"2":{"2081":1},"3":{"1199":1,"1207":5,"1324":1,"1436":1,"2081":1}}],["datagridlistpagebase",{"0":{"2074":1},"2":{"151":1,"556":1,"558":1,"559":1,"879":1,"884":1,"885":1,"1383":1,"1586":1,"1597":1,"1669":1,"1715":1,"2074":1,"2075":1,"2078":1,"2081":1,"2082":1},"3":{"0":2,"151":1,"556":14,"558":2,"559":4,"879":1,"881":4,"883":1,"884":2,"885":1,"1199":12,"1203":1,"1207":3,"1212":1,"1324":50,"1383":1,"1395":18,"1396":2,"1415":2,"1436":4,"1524":1,"1526":7,"1531":1,"1532":1,"1577":6,"1586":3,"1591":1,"1596":1,"1597":1,"1669":1,"1715":1,"2074":1,"2075":1,"2078":1,"2081":2,"2082":1}}],["dataintegritytests",{"3":{"1199":1,"1207":2,"1438":1}}],["datapoints",{"3":{"914":1,"1443":1,"1467":2}}],["dataprotectionkek",{"3":{"1467":1}}],["dataprotectionkeyscontainer",{"3":{"1467":1}}],["dataprotectionkeyvaultkeyuri",{"2":{"602":1,"604":1,"668":1},"3":{"0":1,"602":1,"604":1,"668":1,"1467":1}}],["dataprotectionstorage",{"3":{"665":1}}],["dataprotectionstorageready",{"2":{"604":1,"663":1,"665":1,"668":1,"1970":1},"3":{"0":1,"604":1,"663":1,"665":2,"668":1,"1970":1}}],["dataprotectionextensionstests",{"3":{"665":1,"1199":1,"1207":2,"1339":1,"1438":2}}],["dataprotectionextensions",{"3":{"665":4,"668":1,"1199":1,"1203":1,"1207":2,"1336":2,"1339":5,"1442":3,"1467":2}}],["dataprotection",{"1":{"662":1,"663":1,"664":1,"665":1,"666":1,"667":1,"668":1,"669":1,"670":1},"2":{"665":2,"668":1,"1339":1},"3":{"0":3,"425":1,"662":1,"664":2,"665":14,"667":2,"668":3,"669":1,"1207":3,"1212":1,"1324":1,"1325":1,"1336":3,"1339":8,"1438":2,"1442":5,"1445":1,"1467":21,"1469":1,"1496":2,"1970":4,"1972":1,"2234":2}}],["datamatrix",{"3":{"682":1,"685":1,"1417":1}}],["datamemberattribute",{"3":{"1300":1}}],["datamember",{"2":{"659":1},"3":{"0":1,"657":1,"659":1,"964":2,"1227":1,"1229":7,"1234":1,"1237":7,"1300":2,"1805":1}}],["datahost",{"3":{"423":1}}],["datasets",{"3":{"1560":1}}],["datasetrowcount",{"3":{"1436":1}}],["datasubject",{"2":{"1436":1},"3":{"1436":1}}],["datasubjectsample",{"3":{"1199":2,"1207":1,"1436":3,"1496":1,"1577":1}}],["datastorageregion",{"3":{"972":1,"1436":3,"2044":1}}],["datascheme",{"3":{"423":1,"1416":1}}],["datasource=",{"3":{"1436":2}}],["datasource=name",{"3":{"1286":1}}],["datasourcemodelcachekeyfactory",{"2":{"1201":1,"1273":1,"1849":1,"1853":1},"3":{"1198":1,"1199":3,"1201":1,"1203":1,"1207":2,"1273":2,"1286":6,"1396":1,"1498":1,"1849":1,"1853":1}}],["datasourcebranchingfitnesstests",{"2":{"1177":1,"1179":1,"1212":1,"1856":1},"3":{"1175":1,"1177":1,"1179":1,"1199":1,"1207":3,"1212":1,"1286":11,"1436":6,"1496":1,"1856":1}}],["datasourceenginecapabilities",{"2":{"1175":1,"1274":1,"1280":1},"3":{"1175":2,"1176":1,"1177":1,"1178":2,"1199":7,"1203":1,"1207":2,"1274":1,"1280":4,"1286":18,"1496":1}}],["datasourceengines",{"2":{"1179":1,"1510":1,"1586":1,"1856":1},"3":{"0":1,"1175":3,"1176":2,"1177":1,"1178":1,"1179":2,"1192":1,"1198":1,"1199":13,"1203":1,"1207":2,"1212":1,"1272":1,"1273":1,"1280":2,"1286":62,"1436":1,"1496":1,"1510":1,"1577":1,"1586":1,"1856":3}}],["datasourceentrysettings",{"2":{"1279":1,"1323":1},"3":{"166":2,"171":1,"1175":2,"1199":22,"1203":1,"1207":2,"1279":2,"1286":21,"1320":2,"1323":4,"1436":1}}],["datasourcessettings",{"2":{"1272":1},"3":{"674":1,"1199":17,"1203":1,"1207":2,"1272":1,"1279":2,"1286":19,"1320":2,"1323":3}}],["datasourceservicetests",{"3":{"1199":1,"1207":3,"1286":1}}],["datasourceserviceadditionaltests",{"3":{"1199":1,"1207":4,"1286":1}}],["datasourceservice",{"3":{"166":1,"1175":1,"1199":4,"1203":1,"1207":2,"1247":1,"1279":3,"1280":1,"1286":15,"1323":3}}],["datasources",{"2":{"170":1,"1441":1,"1473":1,"1490":1,"1614":1,"1652":1,"1701":1,"1722":1,"1729":1,"1731":1,"2099":1},"3":{"47":1,"166":6,"170":5,"633":1,"676":2,"698":4,"703":1,"1004":1,"1034":2,"1067":1,"1175":13,"1203":26,"1207":148,"1276":2,"1279":12,"1280":1,"1286":127,"1300":2,"1311":2,"1320":6,"1323":5,"1326":1,"1328":1,"1332":1,"1339":7,"1359":1,"1429":1,"1436":8,"1438":2,"1441":5,"1443":1,"1446":1,"1473":1,"1490":2,"1496":1,"1577":1,"1586":1,"1614":1,"1652":3,"1684":2,"1701":1,"1719":1,"1722":1,"1727":1,"1728":1,"1729":1,"1731":1,"1790":1,"1849":2,"2009":1,"2099":1}}],["datasourceresolvertests",{"2":{"164":1},"3":{"164":1,"170":2,"1199":1,"1207":2,"1286":12}}],["datasourceresolver",{"2":{"46":1,"47":1,"991":1,"1033":1,"1321":1,"1790":1,"1849":1,"1853":1},"3":{"46":1,"47":1,"166":4,"170":2,"171":1,"991":1,"1033":1,"1175":2,"1199":14,"1203":1,"1207":3,"1279":3,"1284":1,"1286":121,"1321":1,"1323":2,"1326":1,"1339":1,"1436":3,"1438":1,"1534":1,"1790":1,"1849":2,"1853":1}}],["datasourcename",{"2":{"910":1,"2201":1},"3":{"0":1,"905":4,"910":1,"1059":1,"1061":1,"1273":1,"1283":2,"1286":11,"1290":1,"1297":1,"1300":3,"1323":1,"1436":1,"2201":1}}],["datasourcekey",{"2":{"165":1,"169":1,"697":1,"699":1,"701":1},"3":{"0":1,"47":1,"165":1,"166":2,"169":1,"697":1,"698":1,"699":1,"701":1,"1199":95,"1203":1,"1207":2,"1212":1,"1259":2,"1278":2,"1279":3,"1286":77,"1311":1,"1323":1,"1436":6,"1664":1,"1790":1,"1849":3,"1851":1,"1857":1}}],["datasource",{"2":{"889":1,"1174":1,"1179":1,"1321":1,"1361":1,"1510":1,"1856":2,"1857":1,"1860":1},"3":{"0":4,"24":3,"166":3,"170":3,"195":1,"201":1,"889":1,"905":1,"1034":2,"1036":1,"1174":1,"1175":3,"1179":1,"1199":104,"1203":1,"1207":1,"1212":3,"1259":11,"1270":1,"1277":1,"1279":1,"1280":3,"1282":1,"1284":1,"1286":91,"1311":1,"1317":1,"1321":1,"1323":17,"1339":2,"1361":1,"1369":3,"1396":2,"1436":14,"1441":1,"1510":1,"1664":1,"1774":1,"1856":4,"1857":1,"1860":1}}],["dataexport",{"2":{"723":1,"725":1,"727":1,"1299":1,"1410":1,"1672":1},"3":{"0":1,"723":1,"725":1,"727":1,"1203":8,"1207":16,"1299":1,"1300":4,"1311":4,"1410":2,"1415":24,"1577":1,"1672":1}}],["dataexportcontrollerbasetests",{"3":{"1199":1,"1207":6,"1311":2,"1438":2}}],["dataexportcontrollerbase",{"2":{"723":1,"725":1,"728":1,"1060":1,"1299":1,"1672":1},"3":{"0":1,"723":2,"725":4,"728":1,"1060":1,"1199":4,"1203":1,"1207":2,"1299":1,"1300":7,"1311":9,"1323":4,"1410":1,"1415":13,"1496":1,"1577":1,"1672":1}}],["data",{"0":{"1299":1,"1357":1,"1364":1,"1545":1,"1556":1,"1567":1,"1664":1,"1777":1,"2076":1,"2209":1},"1":{"542":1,"543":1,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"550":1,"551":1,"552":1,"722":1,"723":1,"724":1,"725":1,"726":1,"727":1,"728":1,"729":1,"878":1,"879":1,"880":1,"881":1,"882":1,"883":1,"884":1,"885":1,"969":1,"970":1,"971":1,"972":1,"973":1,"974":1,"975":1,"976":1,"1172":1,"1173":1,"1174":1,"1175":1,"1176":1,"1177":1,"1178":1,"1179":1,"1180":1},"2":{"1477":1,"1492":1},"3":{"0":25,"12":1,"24":2,"38":7,"39":9,"40":1,"41":5,"42":1,"46":2,"47":1,"48":1,"68":1,"69":1,"80":1,"95":2,"96":2,"117":1,"120":1,"122":1,"128":1,"135":1,"165":1,"167":2,"184":1,"188":1,"195":1,"208":1,"214":1,"219":1,"235":1,"245":1,"248":1,"267":1,"273":1,"275":1,"290":1,"295":4,"310":1,"314":1,"317":2,"318":1,"358":5,"359":2,"360":2,"362":1,"365":2,"388":1,"398":1,"399":1,"402":1,"403":2,"409":1,"428":1,"435":1,"440":1,"441":2,"459":1,"464":1,"537":1,"539":1,"542":1,"545":2,"549":2,"550":1,"555":1,"556":1,"557":1,"572":1,"583":1,"585":1,"587":1,"591":1,"597":1,"598":1,"602":1,"604":1,"605":1,"609":2,"610":1,"612":1,"618":1,"650":1,"659":1,"664":1,"665":3,"666":2,"670":1,"674":1,"676":2,"682":1,"684":1,"689":1,"690":2,"697":3,"698":1,"699":2,"700":3,"707":1,"714":3,"715":3,"716":2,"722":1,"724":6,"725":10,"726":2,"727":4,"728":1,"742":1,"743":1,"745":1,"747":1,"749":1,"757":1,"758":1,"759":1,"798":1,"810":1,"827":2,"838":1,"839":2,"853":1,"855":1,"878":1,"880":1,"881":2,"884":1,"885":1,"896":2,"905":2,"906":1,"907":1,"920":1,"945":1,"947":1,"948":1,"963":1,"964":2,"966":1,"969":1,"971":2,"972":1,"974":1,"987":2,"988":1,"992":1,"1004":1,"1011":1,"1012":1,"1018":1,"1019":1,"1020":1,"1026":1,"1028":1,"1044":2,"1059":2,"1060":1,"1069":1,"1082":2,"1107":1,"1108":1,"1110":1,"1116":3,"1118":1,"1132":1,"1142":2,"1143":1,"1172":1,"1184":2,"1185":2,"1192":4,"1201":1,"1202":3,"1203":3,"1207":8,"1212":10,"1216":3,"1218":1,"1229":8,"1231":1,"1232":2,"1233":2,"1236":8,"1237":45,"1238":1,"1239":2,"1240":1,"1242":1,"1243":3,"1247":18,"1251":2,"1256":2,"1257":1,"1259":30,"1263":2,"1264":1,"1267":1,"1269":1,"1270":28,"1271":3,"1272":4,"1273":1,"1275":1,"1276":1,"1277":4,"1283":4,"1284":3,"1285":1,"1286":201,"1290":2,"1293":1,"1297":1,"1299":2,"1300":81,"1301":10,"1304":1,"1306":1,"1307":2,"1308":3,"1309":43,"1310":15,"1311":46,"1312":2,"1313":1,"1315":1,"1316":1,"1317":2,"1318":1,"1320":2,"1322":1,"1323":77,"1324":90,"1326":2,"1328":2,"1339":28,"1343":2,"1344":2,"1347":1,"1350":59,"1352":1,"1353":5,"1355":2,"1356":1,"1357":2,"1358":1,"1359":157,"1361":1,"1363":1,"1364":1,"1366":1,"1369":36,"1372":1,"1373":1,"1375":1,"1378":1,"1380":24,"1381":1,"1383":1,"1385":2,"1390":1,"1391":1,"1392":1,"1393":1,"1395":95,"1396":153,"1399":1,"1400":2,"1401":1,"1402":50,"1403":2,"1410":5,"1412":1,"1415":105,"1416":4,"1417":13,"1420":1,"1423":2,"1427":3,"1429":2,"1431":2,"1433":4,"1436":161,"1437":1,"1438":21,"1441":3,"1443":1,"1444":1,"1449":3,"1454":1,"1455":4,"1456":2,"1461":1,"1462":1,"1465":2,"1467":26,"1469":1,"1473":5,"1474":4,"1475":1,"1476":2,"1477":4,"1478":8,"1479":1,"1481":1,"1482":2,"1483":1,"1484":1,"1487":3,"1488":6,"1489":7,"1490":1,"1492":2,"1493":1,"1496":6,"1497":1,"1499":3,"1508":1,"1524":2,"1525":2,"1526":6,"1530":1,"1531":1,"1534":3,"1535":2,"1540":1,"1544":2,"1545":1,"1548":2,"1549":2,"1553":1,"1555":4,"1556":2,"1559":2,"1560":1,"1561":2,"1563":1,"1567":5,"1568":1,"1572":4,"1575":1,"1577":6,"1581":1,"1582":2,"1584":1,"1585":1,"1586":3,"1590":1,"1591":5,"1597":2,"1600":2,"1602":1,"1607":2,"1621":1,"1629":5,"1630":8,"1631":8,"1632":12,"1634":1,"1635":1,"1636":3,"1637":2,"1638":4,"1639":12,"1640":2,"1641":4,"1649":1,"1654":1,"1660":2,"1662":1,"1663":1,"1664":1,"1665":2,"1666":1,"1667":1,"1670":1,"1671":1,"1672":3,"1677":1,"1685":1,"1686":1,"1702":1,"1707":3,"1709":1,"1713":1,"1714":1,"1718":1,"1722":1,"1727":1,"1729":1,"1734":1,"1741":2,"1746":1,"1747":4,"1748":1,"1751":2,"1753":1,"1757":1,"1759":1,"1764":2,"1765":6,"1772":1,"1774":2,"1776":1,"1777":2,"1779":1,"1783":1,"1790":4,"1792":1,"1793":2,"1795":2,"1796":3,"1799":1,"1800":1,"1804":1,"1805":1,"1807":1,"1808":1,"1810":1,"1812":1,"1813":1,"1815":1,"1817":1,"1825":1,"1832":4,"1836":1,"1838":2,"1839":3,"1848":1,"1849":1,"1852":1,"1853":1,"1855":2,"1857":1,"1859":1,"1861":1,"1862":1,"1863":2,"1865":1,"1868":2,"1870":1,"1872":1,"1873":1,"1902":1,"1903":1,"1920":2,"1922":2,"1923":3,"1924":1,"1942":1,"1948":1,"1950":1,"1951":1,"1953":2,"1954":1,"1957":1,"1959":1,"1968":1,"1969":1,"1988":1,"1994":1,"1995":1,"1998":2,"2011":1,"2013":2,"2014":1,"2023":1,"2030":1,"2034":2,"2035":2,"2037":1,"2039":1,"2041":1,"2044":1,"2048":1,"2054":3,"2056":2,"2057":1,"2058":1,"2060":1,"2062":4,"2063":2,"2064":8,"2065":1,"2067":4,"2069":4,"2070":6,"2071":4,"2072":1,"2074":2,"2075":2,"2078":1,"2082":1,"2087":1,"2093":2,"2100":1,"2113":1,"2116":1,"2127":2,"2128":4,"2129":2,"2130":2,"2142":4,"2143":6,"2144":3,"2145":1,"2148":3,"2152":1,"2158":1,"2160":1,"2161":2,"2162":1,"2166":1,"2173":1,"2177":1,"2193":1,"2194":2,"2201":1,"2202":2,"2205":1,"2209":1,"2216":1,"2221":3,"2222":4,"2226":1,"2232":1,"2234":9,"2238":1,"2243":1}}],["databasecreated",{"3":{"1436":1}}],["databaseauditingpolicy",{"3":{"1436":1}}],["databasefacade",{"3":{"1311":1}}],["databaserestoredrilltests",{"2":{"1707":1},"3":{"1199":1,"1207":3,"1438":1,"1577":2,"1586":1,"1707":3}}],["databaseinitializationextensionstests",{"2":{"1496":1},"3":{"1198":1,"1199":2,"1207":7,"1286":1,"1311":2,"1323":3,"1496":2}}],["databaseinitializationextensions",{"2":{"290":1,"1034":1},"3":{"290":2,"295":1,"296":1,"453":1,"583":1,"1034":2,"1199":1,"1203":1,"1207":2,"1208":2,"1286":15,"1311":5,"1323":8,"1369":2,"1415":1,"1577":1}}],["databaseinitstrategy",{"2":{"290":1,"291":2,"295":1,"296":1,"563":1,"1467":1,"1614":1,"1652":1,"1664":1,"1719":1},"3":{"290":1,"291":2,"295":1,"296":1,"563":1,"698":1,"1311":1,"1320":1,"1323":3,"1467":1,"1490":1,"1614":1,"1652":1,"1664":1,"1719":1}}],["databaseinitstrategy=migrate",{"3":{"0":1,"572":1,"1212":1,"1455":1,"1476":1}}],["databasenameprefix",{"3":{"1436":1,"1488":1,"1490":1}}],["databasename",{"2":{"1446":1},"3":{"195":1,"201":1,"1259":8,"1286":4,"1436":2,"1441":1,"1446":1,"1684":1,"1728":1}}],["databases",{"0":{"1614":1,"2054":1},"1":{"1854":1,"1855":1,"1856":1,"1857":1,"1858":1,"1859":1,"1860":1,"1861":1,"1862":1},"3":{"0":3,"10":1,"47":2,"49":1,"61":1,"67":1,"165":1,"166":2,"295":1,"390":1,"439":1,"628":1,"676":1,"717":1,"719":1,"762":1,"766":2,"913":1,"971":1,"1025":1,"1042":1,"1059":1,"1061":1,"1212":1,"1259":4,"1273":1,"1275":1,"1276":1,"1278":1,"1279":2,"1286":33,"1310":1,"1311":1,"1320":1,"1323":3,"1325":1,"1326":1,"1332":1,"1350":1,"1359":7,"1369":2,"1380":2,"1396":4,"1402":1,"1415":2,"1429":1,"1430":1,"1436":12,"1439":1,"1440":1,"1441":2,"1446":2,"1449":1,"1455":2,"1460":3,"1461":1,"1467":11,"1469":5,"1471":3,"1473":4,"1474":4,"1475":6,"1477":2,"1478":3,"1482":3,"1496":1,"1525":2,"1526":3,"1535":1,"1589":1,"1591":2,"1596":1,"1600":1,"1652":1,"1664":1,"1670":1,"1678":1,"1684":1,"1688":1,"1689":2,"1698":1,"1710":1,"1724":1,"1783":1,"1792":1,"1847":4,"1849":3,"1852":1,"1853":2,"1854":1,"1855":1,"1858":1,"1860":1,"1862":1,"1864":1,"2004":1,"2005":1,"2006":1,"2009":1,"2015":1,"2028":1,"2035":3,"2037":1,"2038":2,"2039":2,"2054":2,"2061":1,"2069":1,"2111":1,"2194":1,"2201":1,"2209":1,"2231":1}}],["database",{"0":{"1273":1,"1279":1,"1283":1,"1429":1,"1473":1,"1510":1,"1849":1,"1871":1,"2036":1,"2166":1},"1":{"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"1847":1,"1848":1,"1849":1,"1850":1,"1851":1,"1852":1,"1853":1,"1869":1,"1870":1,"1871":1,"1872":1,"1873":1,"1874":1,"1875":1,"1876":1,"1877":1},"2":{"291":1,"1133":1,"1273":1,"1461":1,"1467":3,"1475":3},"3":{"0":27,"10":3,"17":1,"24":1,"38":1,"41":1,"44":1,"45":4,"46":2,"47":7,"48":1,"49":1,"58":1,"59":1,"61":1,"64":1,"66":2,"67":1,"71":3,"73":1,"77":1,"94":1,"109":1,"135":1,"153":1,"158":1,"165":2,"166":10,"167":1,"169":1,"170":2,"171":1,"174":1,"176":1,"195":3,"196":2,"197":1,"199":1,"201":2,"202":2,"218":1,"255":1,"290":2,"291":3,"292":2,"293":2,"294":2,"295":2,"296":1,"330":1,"331":1,"341":3,"342":2,"343":2,"350":2,"358":4,"359":1,"390":1,"391":1,"403":1,"451":1,"458":2,"459":4,"460":1,"461":2,"471":1,"473":1,"500":1,"501":1,"535":3,"536":1,"537":4,"538":1,"541":1,"544":1,"545":1,"546":2,"548":1,"549":1,"551":2,"563":1,"565":1,"568":2,"572":3,"573":1,"574":1,"575":1,"582":1,"583":1,"587":1,"598":1,"599":3,"600":1,"601":1,"605":1,"625":1,"628":1,"631":2,"632":1,"633":6,"645":1,"676":1,"688":1,"690":2,"691":1,"692":1,"697":2,"698":4,"700":1,"702":5,"703":1,"707":3,"708":1,"709":2,"711":1,"713":1,"714":3,"715":3,"716":1,"717":1,"718":2,"719":4,"735":2,"742":1,"743":1,"756":1,"758":1,"759":1,"765":1,"766":2,"767":1,"769":1,"782":1,"793":1,"799":1,"805":1,"809":1,"810":1,"815":1,"817":1,"819":5,"820":2,"821":2,"823":1,"853":1,"856":1,"888":1,"889":1,"890":1,"891":2,"893":1,"897":1,"904":1,"905":3,"906":2,"907":1,"913":1,"918":2,"922":1,"930":1,"932":1,"933":1,"972":1,"974":1,"987":3,"988":1,"990":1,"992":2,"995":2,"996":1,"1000":2,"1018":1,"1030":1,"1032":1,"1033":3,"1034":5,"1036":1,"1037":1,"1038":1,"1043":2,"1050":1,"1052":1,"1059":1,"1061":1,"1066":1,"1067":2,"1068":1,"1074":1,"1082":2,"1083":3,"1085":3,"1116":1,"1120":1,"1133":1,"1135":1,"1137":1,"1140":1,"1145":1,"1149":1,"1150":5,"1151":1,"1152":1,"1153":1,"1173":1,"1192":1,"1202":3,"1203":3,"1212":6,"1213":2,"1228":1,"1229":2,"1230":1,"1231":2,"1236":2,"1237":11,"1238":2,"1239":2,"1242":1,"1243":2,"1244":1,"1247":16,"1248":1,"1251":2,"1253":3,"1254":4,"1256":1,"1259":33,"1263":2,"1269":1,"1270":17,"1271":3,"1272":3,"1273":5,"1274":1,"1275":2,"1276":4,"1277":2,"1278":5,"1279":10,"1280":1,"1281":5,"1282":3,"1283":5,"1284":2,"1286":292,"1290":3,"1292":1,"1297":2,"1300":29,"1301":2,"1303":1,"1309":15,"1310":9,"1311":32,"1313":1,"1316":1,"1320":7,"1321":2,"1323":47,"1324":1,"1325":1,"1326":3,"1328":1,"1332":5,"1333":1,"1339":27,"1342":7,"1343":2,"1344":1,"1350":52,"1354":2,"1355":3,"1357":2,"1359":112,"1360":1,"1361":2,"1362":2,"1363":3,"1364":1,"1365":1,"1367":1,"1369":31,"1379":1,"1380":4,"1395":8,"1396":89,"1399":1,"1401":2,"1402":22,"1404":1,"1405":1,"1406":1,"1409":1,"1410":1,"1412":1,"1413":2,"1415":46,"1417":1,"1428":1,"1429":10,"1431":1,"1436":70,"1437":2,"1438":16,"1441":13,"1443":5,"1446":3,"1449":3,"1451":1,"1453":4,"1455":4,"1457":1,"1460":6,"1461":1,"1462":1,"1463":1,"1467":45,"1469":2,"1471":3,"1473":10,"1474":12,"1475":18,"1476":4,"1477":4,"1478":11,"1482":7,"1483":3,"1484":1,"1486":1,"1487":1,"1488":7,"1490":8,"1491":2,"1492":5,"1510":1,"1523":1,"1524":1,"1534":5,"1541":1,"1544":2,"1545":2,"1547":1,"1568":1,"1572":1,"1576":1,"1577":1,"1588":1,"1590":1,"1591":4,"1596":2,"1597":1,"1600":1,"1602":1,"1630":3,"1631":6,"1637":2,"1638":3,"1639":6,"1640":1,"1641":4,"1650":1,"1651":4,"1652":4,"1653":7,"1654":2,"1656":2,"1661":5,"1662":4,"1663":3,"1664":5,"1667":3,"1668":1,"1670":2,"1671":3,"1674":1,"1675":5,"1678":1,"1683":1,"1684":10,"1685":3,"1686":3,"1688":2,"1689":1,"1692":2,"1695":1,"1696":1,"1697":5,"1698":1,"1700":2,"1701":2,"1704":2,"1705":1,"1706":1,"1707":1,"1708":1,"1717":1,"1718":4,"1719":2,"1721":3,"1722":3,"1724":3,"1726":2,"1727":12,"1728":6,"1729":5,"1731":2,"1748":2,"1749":1,"1764":1,"1765":1,"1767":1,"1774":2,"1778":1,"1779":1,"1780":1,"1781":1,"1783":2,"1785":1,"1786":1,"1789":1,"1790":4,"1792":1,"1793":3,"1796":1,"1800":1,"1806":1,"1808":1,"1810":1,"1814":1,"1815":3,"1817":2,"1821":4,"1825":1,"1831":1,"1832":2,"1835":2,"1837":1,"1839":1,"1840":2,"1841":2,"1846":1,"1847":6,"1848":3,"1849":11,"1851":3,"1852":1,"1853":11,"1854":1,"1855":5,"1857":1,"1858":3,"1860":1,"1862":1,"1863":2,"1864":3,"1866":1,"1867":1,"1868":4,"1869":2,"1871":2,"1872":1,"1873":1,"1875":1,"1876":2,"1877":2,"1886":1,"1887":1,"1898":1,"1900":1,"1901":1,"1903":2,"1913":1,"1920":1,"1921":1,"1922":2,"1923":2,"1933":2,"1934":1,"1937":1,"1940":1,"1941":1,"1946":2,"1948":3,"1951":1,"1954":2,"1965":1,"1980":2,"1982":1,"1984":1,"1985":1,"1987":1,"1988":2,"1990":2,"1992":1,"2000":1,"2009":4,"2028":1,"2033":3,"2035":5,"2036":6,"2037":3,"2038":4,"2039":2,"2048":1,"2050":1,"2051":2,"2053":1,"2054":3,"2055":1,"2056":4,"2057":2,"2061":2,"2062":1,"2065":2,"2066":2,"2073":1,"2091":1,"2099":3,"2113":2,"2115":2,"2117":1,"2130":1,"2137":1,"2142":6,"2143":4,"2146":2,"2148":4,"2163":3,"2164":2,"2166":2,"2167":1,"2170":1,"2171":4,"2172":1,"2182":1,"2187":1,"2193":1,"2195":3,"2209":3,"2216":1,"2222":3,"2223":1,"2232":3,"2234":4,"2245":1}}],["darkened",{"3":{"2077":1}}],["darkens",{"3":{"1324":2}}],["darkerror",{"3":{"1324":3}}],["darkactiondefault",{"3":{"1324":1}}],["darkbackground",{"3":{"1324":2}}],["darkwarning",{"3":{"1324":1}}],["darksurface",{"3":{"1324":2}}],["darksuccess",{"3":{"1324":1}}],["darksecondarylighten",{"3":{"1324":1}}],["darksecondarydarken",{"3":{"1324":1}}],["darkinfo",{"3":{"1324":2}}],["darktextsecondary",{"3":{"1324":1}}],["darktertiary",{"3":{"1324":1}}],["darktheme",{"3":{"1237":1,"1415":2}}],["darkprimarylighten",{"3":{"1324":1}}],["darkmodee2etests",{"2":{"1643":1,"1645":1},"3":{"618":1,"1199":1,"1207":2,"1324":2,"1436":1,"1577":4,"1586":2,"1643":1,"1645":1}}],["dark",{"1":{"270":1,"271":1,"272":1,"273":1,"274":1,"275":1,"276":1,"277":1,"2083":1,"2084":1,"2085":1,"2086":1,"2087":1,"2088":1},"3":{"0":3,"270":1,"272":1,"273":2,"274":1,"275":1,"299":1,"396":1,"555":2,"556":1,"558":2,"618":4,"622":3,"1192":1,"1212":1,"1234":1,"1237":2,"1300":1,"1311":1,"1324":27,"1333":1,"1339":3,"1402":2,"1405":1,"1415":5,"1416":2,"1436":6,"1438":2,"1480":1,"1487":1,"1496":2,"1499":1,"1513":1,"1526":2,"1557":1,"1577":12,"1586":2,"1591":2,"1596":2,"1608":1,"1643":5,"1645":6,"1653":1,"1669":1,"1742":1,"2077":3,"2081":4,"2082":1,"2083":4,"2085":2,"2088":3,"2136":2,"2162":1,"2212":1,"2234":2}}],["dayoffset",{"3":{"1369":2}}],["daylight",{"3":{"709":1,"1269":1,"1270":1,"1438":1}}],["days",{"2":{"629":1},"3":{"0":5,"38":1,"41":1,"93":1,"489":1,"499":2,"501":2,"502":1,"513":1,"591":2,"626":2,"627":1,"628":1,"629":2,"642":1,"706":1,"767":1,"805":2,"905":1,"1020":2,"1150":1,"1212":1,"1259":1,"1288":1,"1300":5,"1323":2,"1324":1,"1410":1,"1417":1,"1427":2,"1436":1,"1445":1,"1453":1,"1455":6,"1459":1,"1460":1,"1461":2,"1465":5,"1467":7,"1474":3,"1475":3,"1476":4,"1478":1,"1490":1,"1525":1,"1526":2,"1534":1,"1589":1,"1591":2,"1596":2,"1599":2,"1631":1,"1637":1,"1638":1,"1641":3,"1747":1,"1765":1,"1767":1,"1845":1,"1982":1,"2062":1,"2064":1,"2067":1}}],["day",{"0":{"1476":1},"1":{"270":1,"271":1,"272":1,"273":1,"274":1,"275":1,"276":1,"277":1},"3":{"0":5,"41":1,"130":1,"186":1,"243":2,"265":1,"270":1,"273":1,"275":1,"311":1,"379":1,"387":1,"390":1,"423":1,"424":1,"491":2,"492":1,"501":1,"520":1,"529":1,"566":1,"594":1,"609":2,"626":1,"628":2,"689":1,"690":1,"706":2,"707":1,"708":1,"717":1,"726":1,"757":1,"765":1,"766":2,"767":1,"781":1,"785":1,"792":1,"831":1,"832":1,"848":1,"907":2,"916":1,"1003":1,"1013":2,"1018":1,"1020":1,"1082":1,"1085":1,"1102":1,"1124":1,"1125":1,"1134":1,"1143":1,"1150":1,"1154":1,"1162":1,"1183":1,"1192":1,"1212":1,"1237":4,"1247":1,"1270":2,"1288":1,"1295":1,"1298":1,"1300":5,"1301":1,"1309":2,"1323":1,"1324":3,"1339":1,"1348":1,"1349":1,"1350":3,"1356":1,"1359":5,"1369":2,"1378":1,"1379":1,"1380":2,"1393":1,"1395":12,"1396":23,"1397":1,"1401":1,"1402":9,"1416":3,"1435":1,"1436":5,"1438":6,"1455":6,"1456":1,"1457":3,"1458":3,"1459":1,"1462":1,"1465":12,"1467":15,"1469":1,"1471":1,"1474":2,"1475":1,"1476":2,"1482":2,"1487":1,"1490":1,"1492":3,"1496":14,"1499":1,"1513":1,"1514":1,"1525":3,"1526":6,"1529":2,"1530":1,"1531":2,"1532":1,"1534":1,"1552":2,"1577":1,"1585":1,"1589":1,"1591":5,"1626":2,"1627":1,"1629":3,"1630":5,"1631":1,"1641":1,"1663":1,"1675":1,"1678":1,"1695":1,"1698":1,"1764":1,"1765":1,"1767":2,"1783":1,"1788":2,"1789":1,"1790":1,"1795":1,"1800":1,"1847":2,"1853":1,"1854":1,"1862":1,"1863":1,"1864":1,"1870":1,"1894":1,"1900":2,"1905":1,"1922":1,"1925":1,"1942":1,"1948":2,"1951":1,"1958":2,"1960":1,"1963":1,"1980":1,"1982":1,"1984":4,"1986":1,"2004":1,"2016":2,"2017":1,"2029":1,"2034":1,"2035":1,"2057":1,"2058":1,"2070":1,"2077":1,"2082":1,"2083":1,"2088":1,"2089":1,"2099":1,"2100":1,"2101":1,"2112":1,"2135":3,"2140":1,"2148":1,"2160":1,"2182":2,"2195":1,"2208":1,"2222":1,"2230":1,"2234":1,"2240":1,"2241":2,"2242":2}}],["dns",{"3":{"0":1,"100":1,"109":1,"234":1,"235":1,"881":1,"1187":1,"1225":1,"1312":2,"1324":1,"1329":1,"1334":1,"1339":7,"1395":2,"1396":2,"1415":1,"1443":2,"1447":1,"1467":4,"1632":1,"1640":1,"1653":1,"1702":1,"2031":1}}],["duties",{"3":{"1366":2}}],["duty",{"3":{"757":1,"1270":1,"1300":1,"1402":1,"2064":1}}],["duplexstreamingserverhandler",{"3":{"1312":1}}],["duplex",{"3":{"1312":3}}],["duplicating",{"3":{"186":1,"273":1,"282":1,"351":1,"423":1,"767":1,"914":1,"1229":1,"1259":2,"1270":2,"1286":3,"1309":1,"1311":3,"1323":2,"1324":3,"1337":1,"1350":1,"1359":4,"1380":1,"1395":4,"1396":2,"1402":2,"1415":1,"1416":1,"1436":3,"1557":1,"2085":1}}],["duplication",{"3":{"133":1,"135":1,"255":1,"325":1,"405":1,"651":2,"681":1,"724":1,"819":1,"837":1,"1011":1,"1043":1,"1061":1,"1220":1,"1247":1,"1259":1,"1270":1,"1286":1,"1300":3,"1301":1,"1309":1,"1311":3,"1323":1,"1324":6,"1339":6,"1359":11,"1369":1,"1395":5,"1396":2,"1402":1,"1415":4,"1427":1,"1436":2,"1496":1,"1526":2,"1917":1,"2043":1,"2077":1,"2079":2,"2082":1,"2100":1,"2134":1,"2194":1,"2200":1}}],["duplicate→409",{"3":{"1611":1}}],["duplicatecode",{"3":{"1436":3}}],["duplicateticketerrors",{"3":{"1199":2,"1207":1,"1436":11}}],["duplicated",{"3":{"0":1,"61":1,"219":1,"255":1,"399":1,"400":1,"404":1,"463":1,"490":1,"534":1,"538":1,"558":1,"609":1,"819":1,"829":1,"834":1,"837":1,"839":1,"848":1,"899":1,"996":1,"1011":1,"1043":1,"1059":1,"1118":1,"1224":1,"1229":1,"1247":2,"1259":2,"1268":1,"1270":6,"1271":2,"1300":2,"1301":1,"1309":1,"1311":2,"1312":1,"1323":2,"1324":6,"1339":5,"1350":4,"1359":15,"1380":1,"1389":1,"1395":6,"1396":5,"1402":3,"1415":4,"1436":3,"1443":1,"1446":1,"1453":1,"1467":1,"1496":4,"1542":1,"1551":1,"1565":2,"1582":1,"1632":1,"1830":1,"1929":1,"2014":1,"2056":1,"2075":2,"2152":1,"2159":1,"2161":2,"2170":1}}],["duplicates",{"3":{"0":2,"159":3,"162":1,"549":1,"649":1,"811":1,"846":1,"891":2,"915":2,"988":1,"989":1,"995":1,"1140":1,"1237":1,"1240":1,"1258":1,"1259":2,"1270":1,"1271":2,"1286":2,"1300":3,"1311":5,"1323":3,"1324":2,"1338":1,"1339":2,"1350":3,"1359":3,"1369":1,"1394":1,"1395":5,"1396":1,"1402":2,"1415":1,"1417":1,"1436":1,"1454":1,"1496":6,"1526":1,"1577":1,"1631":5,"1639":1,"1765":1,"1840":1,"1845":1,"1870":1,"1909":6,"1910":1,"1911":2,"1912":4,"1988":1}}],["duplicate",{"3":{"0":8,"18":1,"24":3,"156":1,"157":2,"159":1,"195":3,"197":1,"198":1,"201":5,"295":1,"330":1,"465":2,"508":1,"518":1,"528":1,"529":1,"557":1,"558":1,"610":1,"688":1,"691":1,"692":2,"749":1,"790":1,"821":1,"834":1,"871":1,"890":1,"897":1,"905":1,"966":1,"988":1,"996":5,"998":1,"1018":1,"1020":1,"1022":1,"1043":1,"1099":1,"1100":1,"1142":1,"1147":1,"1212":2,"1229":1,"1231":1,"1237":1,"1247":6,"1251":1,"1254":1,"1258":2,"1259":14,"1265":1,"1269":1,"1270":8,"1271":1,"1284":1,"1286":19,"1288":1,"1289":1,"1290":1,"1297":1,"1300":11,"1309":5,"1310":1,"1311":14,"1312":2,"1317":1,"1323":10,"1324":14,"1328":1,"1339":8,"1343":2,"1347":1,"1350":15,"1359":47,"1367":1,"1369":2,"1376":1,"1380":7,"1389":1,"1395":7,"1396":26,"1402":6,"1415":2,"1417":2,"1431":1,"1436":17,"1438":5,"1441":1,"1454":1,"1467":2,"1472":1,"1473":1,"1488":1,"1496":16,"1535":1,"1547":2,"1566":1,"1577":1,"1631":3,"1632":2,"1640":1,"1661":1,"1665":1,"1666":1,"1749":1,"1765":2,"1767":1,"1769":1,"1774":2,"1832":1,"1840":2,"1845":1,"1846":1,"1876":1,"1889":1,"1890":1,"1905":1,"1907":1,"1909":4,"1910":2,"1911":3,"1912":3,"1947":1,"1988":1,"1992":1,"2001":1,"2164":1,"2167":1,"2168":1,"2184":1,"2192":1}}],["dumb",{"3":{"1350":1,"1395":1,"1555":1,"1577":1,"1586":1}}],["dumber",{"3":{"1324":1}}],["dummybearerauthority",{"3":{"1436":1}}],["dummy",{"3":{"946":1,"949":1,"1436":1,"1490":1}}],["dumped",{"3":{"1894":1}}],["dumping",{"3":{"1311":1,"1324":1,"1416":1,"1540":1}}],["dump",{"3":{"854":1,"904":1,"1244":1,"1294":1,"1300":2,"1324":1,"1396":1,"1577":1,"1985":1}}],["dueon",{"3":{"1323":1}}],["due",{"2":{"2193":1},"3":{"0":2,"539":2,"707":3,"709":1,"813":1,"1040":2,"1042":3,"1045":2,"1275":4,"1286":13,"1317":1,"1323":15,"1396":1,"1436":1,"1467":1,"1631":1,"1639":1,"1948":1,"2158":2,"2187":2,"2190":2,"2193":2,"2195":1}}],["durably",{"3":{"1251":1,"1402":3,"1415":1,"1436":1}}],["durable",{"0":{"1357":1,"1367":1},"1":{"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"2183":1,"2184":1,"2185":1,"2186":1,"2187":1,"2188":1,"2189":1,"2190":1,"2191":1,"2192":1,"2193":1,"2194":1,"2195":1},"3":{"0":12,"222":1,"223":1,"225":4,"229":1,"230":3,"379":1,"380":1,"382":1,"404":1,"406":1,"422":1,"433":1,"438":1,"440":1,"459":1,"466":1,"516":1,"517":1,"518":1,"521":1,"522":1,"523":1,"524":1,"536":1,"541":1,"706":2,"711":1,"809":1,"810":2,"813":1,"815":1,"856":1,"897":2,"898":1,"901":1,"933":1,"987":1,"988":3,"989":2,"990":1,"995":2,"996":2,"1000":1,"1018":1,"1022":1,"1024":1,"1030":1,"1044":2,"1074":1,"1075":2,"1076":1,"1099":1,"1100":2,"1102":1,"1104":1,"1116":1,"1120":1,"1142":1,"1152":1,"1154":1,"1192":1,"1212":4,"1247":1,"1259":1,"1272":1,"1274":1,"1278":1,"1286":13,"1300":2,"1302":1,"1304":1,"1309":10,"1323":7,"1324":5,"1350":1,"1352":1,"1357":2,"1359":7,"1360":1,"1369":1,"1376":1,"1380":8,"1390":1,"1396":1,"1397":2,"1398":1,"1400":1,"1402":3,"1408":1,"1410":1,"1411":2,"1415":11,"1417":2,"1438":2,"1455":1,"1476":1,"1496":2,"1512":2,"1631":1,"1665":1,"1675":1,"1735":1,"1779":2,"1789":1,"1790":1,"1800":1,"1837":1,"1840":5,"1842":1,"1843":1,"1861":2,"1910":2,"1912":1,"1932":1,"1933":3,"1935":2,"1937":1,"1940":2,"1941":2,"1942":3,"1943":3,"1944":1,"1947":3,"1948":2,"1949":4,"1950":7,"1981":1,"2007":1,"2021":1,"2083":1,"2093":1,"2128":1,"2129":1,"2130":1,"2140":1,"2158":1,"2167":3,"2170":1,"2171":1,"2182":2,"2183":2,"2185":1,"2192":1,"2194":1,"2195":2,"2205":1,"2208":2,"2234":3}}],["durability",{"3":{"0":1,"230":2,"444":1,"711":1,"933":1,"987":1,"1018":1,"1140":1,"1259":2,"1270":1,"1286":1,"1302":1,"1359":4,"1367":2,"1369":1,"1380":1,"1396":1,"1417":1,"1474":2,"1845":1,"1933":1,"2093":1}}],["durationmeasurement",{"3":{"1199":2,"1207":1,"1435":1}}],["durationms",{"3":{"609":1,"1467":1}}],["durationthreshold",{"3":{"861":1}}],["durations",{"3":{"731":1,"733":1,"1259":1,"1359":1}}],["durationhistogram",{"3":{"707":1,"1286":1,"1323":1}}],["duration",{"2":{"402":1,"407":3,"409":1,"1089":1,"1425":2,"1640":1,"2158":1,"2161":1,"2179":2,"2193":1},"3":{"0":6,"72":2,"100":1,"115":1,"125":2,"243":1,"395":4,"397":4,"398":1,"402":1,"404":1,"405":1,"407":5,"408":2,"409":1,"608":2,"609":1,"707":1,"709":2,"743":1,"856":1,"996":1,"1089":1,"1091":1,"1234":2,"1237":1,"1259":3,"1263":2,"1267":1,"1268":1,"1270":18,"1275":1,"1286":4,"1290":1,"1300":2,"1301":2,"1311":3,"1317":1,"1323":7,"1324":2,"1330":1,"1333":1,"1339":10,"1342":2,"1344":2,"1350":5,"1359":3,"1362":1,"1369":5,"1395":3,"1415":1,"1417":9,"1425":4,"1427":10,"1436":1,"1441":1,"1443":2,"1460":1,"1466":1,"1467":5,"1474":2,"1475":1,"1526":1,"1577":1,"1630":1,"1631":3,"1632":1,"1635":2,"1638":1,"1640":1,"1641":1,"1651":1,"1664":1,"1677":1,"1709":1,"1821":1,"1841":1,"1909":1,"1917":1,"1920":1,"1948":1,"2007":2,"2011":1,"2098":1,"2158":9,"2160":3,"2161":2,"2162":1,"2179":4,"2193":1,"2217":1,"2234":1}}],["during",{"3":{"0":2,"17":1,"19":1,"21":1,"71":1,"120":1,"159":1,"207":2,"235":1,"261":1,"267":1,"273":1,"293":1,"332":1,"383":1,"506":1,"507":1,"555":1,"556":1,"558":1,"560":1,"599":1,"649":1,"664":1,"733":2,"743":1,"749":1,"762":1,"768":1,"811":1,"819":1,"820":1,"827":1,"848":1,"881":1,"915":1,"954":1,"1152":1,"1154":1,"1233":1,"1237":5,"1259":3,"1265":1,"1270":2,"1271":1,"1274":1,"1286":12,"1288":2,"1298":1,"1300":8,"1309":1,"1311":2,"1312":2,"1323":4,"1324":32,"1338":1,"1339":8,"1347":1,"1350":7,"1359":8,"1367":1,"1380":1,"1391":1,"1393":1,"1395":7,"1396":10,"1402":9,"1408":1,"1415":5,"1416":4,"1417":13,"1427":2,"1432":1,"1433":1,"1436":9,"1438":2,"1441":2,"1443":1,"1455":1,"1456":1,"1467":1,"1468":1,"1475":2,"1482":1,"1488":2,"1534":1,"1582":1,"1630":6,"1631":6,"1632":3,"1633":1,"1634":1,"1636":1,"1637":1,"1638":7,"1639":7,"1641":1,"1700":1,"1708":1,"1755":1,"1912":1,"1968":1,"1972":1,"2010":1,"2017":1,"2031":2,"2078":1,"2087":1,"2121":1,"2137":1,"2167":1,"2234":1}}],["duality",{"3":{"1359":1}}],["dual",{"0":{"1508":1},"1":{"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1,"525":1,"526":1,"527":1,"528":1,"529":1,"530":1,"531":1,"532":1,"1248":1,"1249":1,"1250":1,"1251":1,"1252":1,"1253":1,"1254":1,"1255":1,"1256":1,"1257":1,"1258":1,"1259":1},"3":{"0":3,"14":1,"17":1,"20":1,"21":1,"22":1,"24":1,"26":1,"27":1,"64":1,"143":1,"209":1,"229":1,"297":1,"397":1,"498":1,"525":1,"532":1,"680":1,"874":1,"935":1,"942":1,"945":2,"984":1,"1004":1,"1008":1,"1043":1,"1192":2,"1202":2,"1203":2,"1212":3,"1213":1,"1237":3,"1247":3,"1248":1,"1259":5,"1270":3,"1286":1,"1287":1,"1289":1,"1300":3,"1311":2,"1312":1,"1324":1,"1345":1,"1350":1,"1359":1,"1369":1,"1395":1,"1396":1,"1402":1,"1415":2,"1436":4,"1443":2,"1450":1,"1455":1,"1467":2,"1496":2,"1508":1,"1543":1,"1548":1,"1571":2,"1574":1,"1576":1,"1577":2,"1585":1,"1586":1,"1591":1,"1835":2,"1838":1,"1842":1,"1846":2,"1896":3,"1898":1,"1972":1,"2015":1,"2183":1,"2223":1,"2232":1,"2234":2}}],["dbs",{"3":{"1473":4,"1496":1,"1526":1,"1535":1,"1566":1,"1570":1,"1590":1,"1591":3,"1596":1,"1599":1,"1678":1}}],["dbseedertests",{"3":{"1199":1,"1207":3,"1286":2}}],["dbseeder",{"2":{"295":1,"1364":1},"3":{"295":2,"1199":4,"1203":1,"1207":2,"1284":2,"1286":9,"1364":1,"1369":4,"1415":2}}],["dbsets",{"0":{"1363":1}}],["dbsetremovingfixture",{"3":{"1199":2,"1207":1,"1436":10}}],["dbset",{"2":{"544":1,"1360":1,"1700":1,"1719":1},"3":{"39":1,"544":1,"545":1,"1259":1,"1278":1,"1286":10,"1360":1,"1363":4,"1369":16,"1396":6,"1415":1,"1436":17,"1496":1,"1651":1,"1685":1,"1686":2,"1697":1,"1700":1,"1719":1,"1844":1}}],["dbname",{"3":{"1436":1}}],["dbconnectionstringbuilder",{"3":{"1286":1}}],["dbcontextattribute",{"3":{"1323":1}}],["dbcontextarg",{"3":{"1286":2}}],["dbcontextoptionsbuilder",{"3":{"1436":3}}],["dbcontextoptions",{"2":{"1369":1},"3":{"1286":3,"1369":4,"1396":2,"1415":1}}],["dbcontexts",{"2":{"1286":1,"1500":1},"3":{"26":2,"71":1,"166":2,"171":1,"200":2,"203":1,"295":2,"310":3,"314":1,"341":1,"343":1,"470":1,"536":2,"540":1,"674":1,"697":1,"698":5,"700":1,"702":2,"703":4,"707":2,"710":1,"715":2,"798":1,"819":2,"888":1,"889":1,"905":2,"931":1,"946":1,"987":2,"988":2,"1034":6,"1042":4,"1050":1,"1059":1,"1061":1,"1083":1,"1133":1,"1140":3,"1146":1,"1150":1,"1175":4,"1203":26,"1207":164,"1208":1,"1212":1,"1232":1,"1237":3,"1251":1,"1259":2,"1263":1,"1273":6,"1278":2,"1282":1,"1284":2,"1286":112,"1300":6,"1311":1,"1318":1,"1323":1,"1350":1,"1359":2,"1363":2,"1364":1,"1369":11,"1396":8,"1404":1,"1412":1,"1415":7,"1438":5,"1496":3,"1500":1,"1577":2,"2065":1,"2066":1}}],["dbcontextfactorytests",{"3":{"1199":1,"1207":2}}],["dbcontextfactorytenanttests",{"3":{"1199":1,"1207":3,"1323":1}}],["dbcontextfactorytransactiontests",{"3":{"988":1,"1199":1,"1207":6,"1286":1,"1438":1}}],["dbcontextfactorysaveintegritytests",{"3":{"1199":1,"1207":6,"1286":2,"1438":2}}],["dbcontextfactorymigrationtargettests",{"3":{"1199":1,"1207":4,"1286":2,"1323":2,"1438":2}}],["dbcontextfactoryadditionaltests",{"3":{"1199":1,"1207":4}}],["dbcontextfactorycommitambiguitytests",{"3":{"988":1,"1199":1,"1207":8,"1286":4,"1438":2,"1496":1}}],["dbcontextfactory",{"2":{"46":1,"71":1,"120":1,"170":1,"700":1,"987":1,"991":1,"1133":1,"1135":1,"1253":1,"1321":1,"1840":1,"1851":1,"1852":1},"3":{"0":1,"26":1,"46":1,"71":1,"120":1,"170":1,"536":1,"538":1,"540":2,"698":3,"700":2,"702":1,"703":1,"819":2,"822":1,"987":2,"988":7,"990":2,"991":2,"1133":2,"1135":1,"1136":1,"1175":3,"1199":13,"1203":1,"1207":2,"1252":1,"1253":2,"1259":2,"1263":6,"1270":9,"1274":2,"1278":6,"1280":2,"1286":125,"1300":4,"1318":1,"1321":1,"1323":6,"1359":4,"1436":4,"1437":1,"1438":3,"1453":1,"1486":1,"1487":1,"1490":1,"1496":3,"1577":2,"1840":2,"1849":1,"1851":1,"1852":1,"2166":1,"2167":2,"2194":1}}],["dbcontext",{"0":{"1652":1},"2":{"21":1,"39":1,"365":1,"875":1,"1033":1,"1083":1,"1251":1,"1319":1,"1360":1,"1540":1,"1821":1,"1847":1},"3":{"0":1,"21":1,"39":1,"47":1,"48":1,"59":1,"122":1,"359":1,"365":1,"574":1,"707":1,"875":1,"1033":1,"1083":1,"1192":1,"1201":1,"1202":1,"1203":1,"1212":1,"1213":1,"1237":1,"1251":1,"1259":1,"1263":1,"1265":1,"1270":3,"1271":1,"1273":1,"1278":1,"1286":42,"1290":1,"1300":1,"1310":1,"1319":1,"1322":1,"1323":6,"1337":1,"1339":1,"1350":1,"1352":1,"1359":5,"1360":1,"1363":1,"1369":1,"1396":6,"1415":3,"1436":11,"1437":1,"1438":1,"1447":1,"1467":2,"1497":1,"1540":1,"1650":1,"1651":1,"1653":1,"1656":1,"1658":1,"1700":1,"1821":1,"1847":1,"1857":1,"2024":1,"2101":1,"2144":1}}],["dba",{"3":{"0":1,"1082":1,"1246":1,"2143":1,"2222":1}}],["dbo",{"2":{"719":1,"1446":1,"1469":1,"1473":1},"3":{"0":2,"719":3,"1259":2,"1286":16,"1300":1,"1323":1,"1369":1,"1415":1,"1436":4,"1438":2,"1446":1,"1467":3,"1469":1,"1473":2,"1577":1,"1684":1}}],["dbupdateconcurrencyexception",{"2":{"341":1,"343":1,"344":1,"345":1,"388":1,"393":1,"536":1,"1379":1,"1872":1,"1873":1,"1874":1,"2166":1,"2169":1},"3":{"341":2,"343":1,"344":1,"345":1,"388":1,"393":1,"536":2,"1237":2,"1286":7,"1311":3,"1359":2,"1379":1,"1872":1,"1873":2,"1874":1,"2166":1,"2169":1}}],["dbupdateexception",{"2":{"201":1,"342":1,"343":1,"345":1,"1311":1,"1873":1,"1876":1,"1934":1},"3":{"109":1,"195":1,"201":1,"342":1,"343":1,"345":1,"1259":3,"1286":4,"1289":1,"1300":1,"1309":1,"1311":5,"1359":2,"1369":2,"1396":1,"1873":3,"1876":1,"1934":1}}],["dbupdateexceptionhandler",{"2":{"125":1,"342":1,"343":1,"345":1,"1873":1,"1927":1},"3":{"0":1,"109":2,"125":2,"342":2,"343":2,"345":1,"407":1,"1199":4,"1203":1,"1207":2,"1311":13,"1774":1,"1873":1,"1927":1}}],["dbupdate",{"2":{"1806":1},"3":{"0":1,"1311":2,"1753":1,"1806":1}}],["db",{"1":{"695":1,"696":1,"697":1,"698":1,"699":1,"700":1,"701":1,"702":1,"703":1},"2":{"1477":1,"1589":1,"1597":1,"1719":1},"3":{"0":9,"10":2,"12":1,"18":1,"48":1,"68":1,"93":1,"94":1,"109":1,"117":1,"164":1,"265":2,"273":1,"318":1,"350":1,"545":1,"590":1,"593":1,"695":1,"698":1,"699":1,"700":1,"1033":1,"1133":1,"1134":1,"1175":1,"1212":8,"1237":1,"1247":3,"1274":1,"1279":1,"1286":8,"1323":2,"1326":1,"1339":1,"1350":1,"1359":1,"1380":2,"1415":2,"1436":1,"1438":4,"1441":1,"1446":1,"1455":1,"1456":1,"1467":6,"1469":1,"1471":1,"1473":1,"1474":6,"1475":3,"1476":1,"1477":3,"1478":5,"1482":1,"1490":2,"1491":1,"1494":1,"1525":1,"1526":3,"1534":3,"1543":1,"1544":1,"1549":1,"1577":1,"1589":1,"1591":1,"1596":1,"1597":1,"1599":2,"1600":2,"1611":2,"1614":1,"1618":1,"1651":1,"1652":1,"1653":2,"1654":1,"1657":2,"1666":1,"1677":1,"1700":1,"1707":1,"1709":1,"1710":1,"1719":1,"1752":1,"1753":1,"1763":1,"1774":1,"1775":1,"1815":1,"1854":2,"1855":1,"1856":1,"1990":1,"2009":1,"2034":1,"2035":3,"2037":1,"2098":1,"2215":1,"2221":2,"2222":1,"2232":1,"2234":2}}],["diluted",{"3":{"2059":1}}],["dilutes",{"3":{"1492":1}}],["dichotomy",{"3":{"1955":1}}],["dictating",{"3":{"1417":1}}],["dictations",{"3":{"1417":1}}],["dictation",{"3":{"1402":10,"1417":5}}],["dictated",{"3":{"1323":2,"1416":1}}],["dictates",{"3":{"1300":1,"1339":1}}],["dictionaries",{"3":{"1286":1,"1300":1,"1311":1,"1324":1,"1385":1,"1395":5,"1415":1,"1436":2}}],["dictionary",{"3":{"0":2,"109":2,"111":1,"157":1,"201":2,"243":1,"248":2,"330":1,"341":1,"359":1,"365":1,"583":2,"585":1,"674":1,"741":1,"881":1,"990":1,"1050":4,"1175":1,"1178":2,"1229":1,"1231":1,"1237":4,"1241":3,"1242":1,"1243":1,"1247":9,"1259":2,"1270":11,"1279":2,"1280":1,"1286":30,"1300":14,"1307":1,"1309":6,"1310":2,"1311":10,"1315":1,"1320":3,"1323":12,"1324":30,"1339":6,"1350":1,"1359":33,"1380":6,"1387":1,"1395":58,"1396":23,"1402":4,"1415":4,"1417":4,"1436":11,"1438":1,"1632":2,"1640":1,"1651":1,"1805":1,"1810":1,"1874":1,"1882":1,"1912":1,"1927":1,"1988":2,"1992":1,"2078":1,"2144":1,"2145":1}}],["dip",{"3":{"1311":3,"1323":3,"1396":1,"1436":2,"1526":1,"1538":2,"1577":2,"1582":1,"1584":1}}],["dirties",{"3":{"1455":2,"1651":1}}],["dirtied",{"3":{"1286":1}}],["dirtying",{"3":{"1455":1}}],["dirty",{"3":{"1265":1,"1270":1,"1286":1,"1324":5,"1384":2,"1395":13,"1396":1,"1436":1,"1445":1,"1450":1,"1455":4,"1461":1,"1489":1,"1496":1,"1526":1,"1561":3,"1572":1,"1573":1,"1577":1,"1586":1,"1591":2,"1596":1,"1871":1,"2046":1}}],["dir",{"2":{"861":1,"863":1,"1456":1,"1492":1},"3":{"861":2,"863":1,"1433":1,"1436":2,"1456":1,"1492":1,"1591":1}}],["directreadsofeitherclocktype",{"3":{"1436":2}}],["directed",{"3":{"1431":1,"1436":3,"1441":1,"1489":1,"1769":1,"2010":1}}],["directsave",{"3":{"1436":1}}],["directsavinghandler",{"3":{"1199":2,"1207":1,"1436":5}}],["directs",{"3":{"31":1,"359":1,"545":1,"605":1,"782":1,"1300":1}}],["directories",{"3":{"0":2,"141":1,"1005":1,"1133":1,"1135":1,"1352":1,"1436":4,"1990":1,"2044":1}}],["directory",{"2":{"53":1,"141":1,"145":1,"146":1,"147":1,"149":1,"152":1,"369":1,"370":2,"371":1,"373":1,"452":1,"468":1,"470":1,"478":1,"526":1,"528":1,"631":1,"632":3,"707":1,"733":1,"869":1,"939":1,"979":1,"980":1,"981":1,"983":1,"984":1,"1069":1,"1074":1,"1076":1,"1214":1,"1445":1,"1453":1,"1454":2,"1455":1,"1459":1,"1460":1,"1464":1,"1477":1,"1491":1,"1648":1,"1649":2,"1655":1,"1656":1,"1684":1,"1685":1,"1700":1,"1703":1,"1728":1,"1738":1,"2018":1,"2042":1,"2043":1,"2089":1,"2099":1,"2114":1},"3":{"0":6,"53":1,"135":5,"138":2,"139":1,"140":1,"141":1,"142":3,"145":2,"146":1,"147":7,"149":1,"150":2,"152":5,"268":1,"369":1,"370":8,"371":2,"373":1,"375":1,"413":1,"451":1,"452":7,"468":2,"470":4,"478":3,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"526":2,"528":1,"545":1,"564":1,"578":3,"591":1,"599":2,"618":1,"621":1,"631":1,"632":5,"665":3,"669":1,"682":1,"685":1,"707":1,"733":1,"810":1,"814":1,"825":4,"861":3,"864":1,"869":1,"881":1,"913":3,"939":1,"954":3,"956":4,"958":4,"959":3,"972":3,"979":5,"980":7,"981":3,"982":1,"983":1,"984":1,"990":1,"1004":1,"1069":2,"1070":1,"1074":4,"1075":1,"1076":1,"1078":4,"1091":3,"1212":1,"1213":4,"1214":2,"1270":1,"1286":1,"1309":1,"1311":1,"1312":3,"1324":2,"1350":2,"1359":2,"1380":1,"1395":2,"1396":1,"1417":11,"1427":2,"1431":1,"1433":1,"1436":43,"1445":1,"1453":3,"1454":7,"1455":4,"1456":4,"1458":1,"1459":3,"1460":1,"1464":3,"1466":1,"1467":2,"1477":2,"1479":2,"1486":1,"1488":1,"1489":2,"1490":2,"1491":1,"1496":9,"1515":1,"1523":1,"1526":5,"1527":1,"1535":3,"1576":2,"1577":6,"1586":3,"1591":8,"1596":1,"1600":3,"1648":1,"1649":3,"1655":1,"1656":3,"1684":1,"1685":1,"1686":1,"1700":1,"1703":1,"1726":1,"1728":1,"1738":1,"1810":1,"2018":1,"2042":1,"2043":1,"2048":1,"2054":1,"2087":2,"2089":1,"2099":1,"2114":1,"2133":1,"2222":1}}],["directionalprefixes",{"3":{"1436":1}}],["directional",{"3":{"91":1,"97":1,"98":1,"100":1,"972":1,"974":1,"975":3,"1436":5,"1620":1,"1756":1,"2026":2}}],["direction",{"0":{"1322":1},"3":{"0":2,"141":1,"193":2,"335":1,"401":1,"402":1,"404":1,"486":1,"520":1,"566":1,"691":2,"743":1,"776":2,"813":1,"931":1,"932":1,"1004":1,"1059":1,"1091":2,"1093":1,"1123":1,"1124":1,"1212":1,"1225":1,"1229":1,"1243":1,"1244":1,"1247":3,"1250":1,"1265":1,"1270":2,"1283":1,"1286":8,"1300":2,"1301":4,"1309":1,"1310":2,"1311":2,"1312":1,"1323":1,"1324":9,"1339":1,"1341":2,"1350":2,"1355":2,"1359":34,"1369":1,"1384":1,"1395":5,"1396":7,"1402":2,"1415":5,"1416":3,"1417":2,"1422":1,"1436":17,"1443":1,"1448":1,"1467":1,"1476":3,"1489":1,"1505":1,"1517":1,"1526":1,"1534":1,"1592":1,"1842":1,"1955":1,"2002":1,"2023":1,"2044":1,"2047":1,"2150":2,"2162":1,"2181":1,"2183":1,"2194":1,"2201":1,"2205":1}}],["directions",{"3":{"0":2,"24":1,"170":1,"180":1,"201":1,"235":1,"359":2,"608":1,"627":1,"718":1,"766":1,"838":1,"861":1,"890":1,"931":1,"946":1,"972":1,"997":1,"1091":1,"1134":1,"1211":1,"1212":1,"1233":1,"1257":1,"1286":2,"1300":1,"1311":1,"1312":1,"1323":2,"1324":4,"1350":1,"1359":3,"1391":1,"1392":1,"1395":4,"1396":3,"1402":1,"1415":2,"1417":2,"1421":1,"1431":2,"1435":1,"1436":10,"1438":2,"1453":1,"1455":4,"1465":1,"1467":1,"1476":1,"1481":1,"1489":1,"1492":2,"1577":1,"1663":1,"1670":1,"1799":1,"1854":1,"1910":1,"1957":2,"1981":1,"2001":1,"2025":1,"2045":2,"2046":2,"2047":1,"2050":1,"2144":2,"2184":1}}],["directives",{"3":{"212":1,"214":2,"219":1,"1059":1,"1062":1,"1286":5,"1311":1,"1323":1,"1324":4,"1336":1,"1339":2,"1350":1,"1359":1,"1396":2,"1415":3,"1416":1,"1443":1,"1577":1,"1591":1,"1653":1,"1689":1,"2151":2,"2152":2}}],["directive",{"3":{"0":1,"214":2,"215":1,"219":2,"676":1,"938":1,"1057":1,"1059":1,"1324":13,"1339":2,"1395":5,"1396":1,"1402":1,"1415":2,"1577":1,"1699":1,"1727":1,"2152":4,"2155":2,"2234":1}}],["directapitokenrefreshertests",{"3":{"1199":1,"1207":3,"1324":4}}],["directapitokenrefresher",{"2":{"507":1,"510":1,"511":1,"513":1,"514":1},"3":{"0":1,"507":8,"510":1,"511":1,"513":3,"514":3,"1199":4,"1203":1,"1207":2,"1300":1,"1324":13,"1416":3}}],["directly",{"3":{"0":6,"15":1,"31":2,"59":2,"63":1,"81":1,"94":1,"96":1,"97":1,"98":1,"100":1,"117":1,"166":1,"186":1,"206":1,"230":1,"235":1,"237":2,"241":1,"247":1,"280":1,"281":1,"304":1,"326":1,"341":1,"370":1,"390":1,"418":1,"428":1,"439":1,"497":1,"507":1,"523":1,"535":1,"536":1,"556":1,"566":1,"572":1,"576":1,"583":1,"599":1,"618":1,"649":1,"651":1,"672":1,"674":4,"698":1,"700":1,"703":1,"707":1,"733":1,"751":2,"758":1,"767":1,"782":2,"831":1,"861":1,"881":5,"905":1,"912":1,"921":1,"924":1,"953":1,"954":3,"956":1,"960":1,"964":1,"979":1,"987":1,"988":1,"1004":2,"1019":1,"1054":1,"1066":1,"1068":1,"1100":1,"1107":1,"1110":1,"1116":1,"1129":1,"1134":1,"1168":1,"1170":1,"1184":1,"1211":1,"1212":1,"1214":2,"1221":1,"1229":4,"1237":5,"1246":1,"1247":13,"1248":1,"1259":17,"1263":1,"1269":1,"1270":11,"1271":5,"1273":1,"1274":1,"1278":1,"1279":2,"1286":68,"1293":1,"1297":1,"1300":39,"1301":6,"1309":10,"1310":2,"1311":22,"1312":4,"1320":2,"1323":26,"1324":37,"1325":1,"1330":1,"1339":22,"1350":27,"1351":1,"1353":1,"1355":1,"1356":1,"1359":87,"1362":1,"1369":11,"1374":1,"1380":12,"1383":1,"1384":1,"1395":23,"1396":26,"1399":1,"1400":1,"1402":6,"1408":1,"1415":20,"1416":5,"1417":20,"1427":2,"1430":1,"1432":1,"1434":1,"1436":112,"1437":1,"1438":7,"1441":3,"1443":1,"1445":2,"1446":2,"1447":1,"1449":1,"1453":1,"1454":2,"1455":3,"1456":1,"1457":3,"1460":3,"1464":1,"1465":1,"1466":1,"1467":3,"1472":1,"1473":1,"1475":1,"1479":1,"1480":1,"1486":2,"1488":1,"1490":1,"1491":2,"1492":1,"1496":4,"1501":1,"1526":1,"1527":1,"1534":1,"1540":1,"1541":1,"1546":1,"1547":1,"1578":1,"1592":1,"1596":1,"1631":2,"1641":1,"1648":1,"1651":1,"1653":1,"1656":1,"1666":1,"1671":1,"1685":1,"1686":1,"1698":1,"1701":1,"1702":1,"1730":1,"1749":2,"1765":1,"1766":1,"1772":1,"1781":1,"1783":1,"1789":1,"1790":2,"1804":1,"1808":1,"1810":1,"1815":1,"1816":1,"1821":1,"1830":1,"1842":1,"1844":1,"1857":1,"1863":1,"1874":1,"1890":1,"1896":1,"1898":1,"1915":1,"1920":1,"1923":1,"1946":1,"1954":1,"1962":1,"1968":1,"1990":1,"1993":1,"1996":1,"2001":1,"2002":1,"2024":1,"2026":1,"2031":1,"2042":1,"2044":1,"2057":1,"2071":1,"2073":1,"2076":1,"2078":1,"2089":1,"2093":1,"2128":1,"2154":1,"2157":1,"2158":1,"2167":1,"2169":1,"2234":1,"2241":1}}],["direct",{"3":{"0":9,"27":1,"33":1,"39":1,"41":1,"91":2,"93":3,"98":2,"100":1,"104":1,"137":1,"140":1,"150":1,"230":2,"245":1,"260":1,"330":1,"370":1,"506":1,"507":1,"509":1,"665":1,"698":1,"700":1,"884":1,"913":1,"931":1,"954":1,"956":1,"958":2,"981":1,"986":1,"988":2,"1004":2,"1005":1,"1036":1,"1125":1,"1161":1,"1212":1,"1229":3,"1237":1,"1243":1,"1247":1,"1259":3,"1268":1,"1271":3,"1273":1,"1286":9,"1300":2,"1301":2,"1309":4,"1311":2,"1323":3,"1324":9,"1339":3,"1344":1,"1349":1,"1350":3,"1353":1,"1355":1,"1359":16,"1364":1,"1369":3,"1380":1,"1396":3,"1415":2,"1417":1,"1431":1,"1436":38,"1438":1,"1441":1,"1453":1,"1467":1,"1488":1,"1489":2,"1491":1,"1496":1,"1504":1,"1544":1,"1555":1,"1567":1,"1577":1,"1611":1,"1632":1,"1634":2,"1638":1,"1639":1,"1662":1,"1671":2,"1750":1,"1773":1,"1789":1,"1790":1,"1899":1,"1910":1,"1920":1,"1988":1,"1994":1,"2016":1,"2026":1,"2033":1,"2036":1,"2042":2,"2049":1,"2062":1,"2065":1,"2081":1,"2138":1,"2242":1}}],["dim",{"3":{"691":1}}],["dimensional",{"3":{"1417":2,"1795":1}}],["dimensions",{"3":{"442":1,"766":1,"768":1,"1270":1,"1323":3,"1359":2,"1369":1,"1425":2,"1427":4,"1474":1,"1599":1,"1795":2,"2049":1,"2130":1,"2179":3,"2182":1}}],["dimension",{"3":{"438":1,"442":1,"740":1,"1093":1,"1270":3,"1286":1,"1323":1,"1350":1,"1359":2,"1396":1,"1436":1,"1467":2,"1479":1,"1637":1,"1638":1,"1987":1}}],["dietary",{"3":{"1350":3}}],["die",{"3":{"1270":1,"1311":1,"1323":1,"1455":1,"2004":1,"2072":1}}],["died",{"3":{"565":1,"1300":1,"1323":2,"1402":1,"1410":1,"1415":1,"1436":2,"1441":1,"1729":1,"1909":1,"1982":1}}],["dies",{"3":{"20":1,"707":1,"855":1,"996":2,"1044":1,"1115":1,"1255":1,"1259":1,"1270":2,"1275":1,"1301":1,"1318":1,"1323":5,"1359":4,"1369":1,"1396":1,"1417":1,"1670":1,"1765":1,"1841":1,"2046":1,"2183":1,"2191":1,"2194":1}}],["div",{"2":{"1558":1,"1643":1},"3":{"1324":1,"1396":1,"1417":1,"1558":2}}],["dives",{"0":{"2217":1},"3":{"2206":1,"2228":1,"2238":1,"2247":1}}],["diverted",{"3":{"1438":1,"1496":1}}],["diversity3",{"3":{"1395":1}}],["diverging",{"3":{"785":1,"1311":1,"1395":1}}],["diverged",{"3":{"837":1,"1324":1,"1339":1,"1459":1,"2072":1,"2082":1}}],["divergent",{"3":{"511":1,"642":1,"1286":1,"1301":1,"1402":1,"1416":1,"1569":2}}],["divergence",{"3":{"0":1,"216":1,"290":1,"342":1,"484":1,"549":1,"585":1,"831":1,"840":2,"1042":2,"1044":1,"1270":2,"1286":1,"1323":3,"1324":1,"1327":1,"1339":2,"1359":1,"1396":1,"1415":1,"1436":1,"1438":1,"2154":1,"2190":1,"2194":1}}],["divergences",{"3":{"0":1,"912":1,"1415":1}}],["diverges",{"3":{"325":1,"665":1,"707":1,"766":1,"1116":1,"1323":1,"1324":1,"1436":2,"1455":2,"1528":1,"1570":1,"1579":1}}],["diverge",{"3":{"0":1,"290":1,"609":1,"640":1,"698":1,"766":1,"1034":1,"1058":1,"1270":2,"1271":1,"1286":1,"1324":3,"1350":1,"1359":7,"1379":1,"1395":2,"1396":2,"1415":1,"1436":1,"1440":1,"1454":1,"1467":1,"1838":1,"1923":1,"2044":1,"2115":1,"2195":1}}],["dive",{"0":{"2237":1,"2239":1},"3":{"1194":1,"1359":1,"1779":45,"1783":1,"1790":1,"1821":1,"1828":1,"1914":1,"1920":1,"1935":1,"2031":2,"2162":1,"2234":1}}],["diving",{"3":{"1463":1}}],["dividing",{"3":{"1350":1,"1359":1,"1800":2}}],["divide",{"3":{"1396":1,"1436":1,"1467":1}}],["dividers",{"3":{"1324":1}}],["divider",{"3":{"1324":5}}],["divided",{"3":{"1300":1,"1311":1,"1359":1,"1798":1}}],["divides",{"3":{"591":1,"1311":2,"1359":1,"2048":1}}],["division",{"3":{"423":1,"426":1,"628":1,"1090":1,"1229":1,"1257":1,"1259":2,"1286":3,"1300":2,"1323":1,"1324":1,"1339":1,"1345":1,"1359":1,"1369":1,"1380":1,"1395":4,"1396":1,"1402":2,"1406":1,"1415":2,"1436":1,"1934":1,"2070":1,"2115":1}}],["diamond",{"3":{"1247":1,"1270":1}}],["dialling",{"3":{"1402":1}}],["dialing",{"3":{"1400":1}}],["dialed",{"3":{"1309":1}}],["dialects",{"3":{"1176":1,"1396":1,"1925":1}}],["dialect",{"3":{"1175":4,"1176":2,"1178":1,"1280":3,"1286":9,"1359":1,"1862":1,"1928":2,"1986":1}}],["dials",{"3":{"1301":1,"1339":1,"1444":1}}],["dial",{"3":{"1286":1,"1301":1}}],["dialogs",{"3":{"649":1,"650":1,"1213":1,"1324":5,"1415":1,"1559":1,"1607":2,"1669":1,"1741":2}}],["dialog",{"2":{"1687":1},"3":{"265":1,"650":1,"907":1,"954":1,"955":1,"1324":15,"1395":9,"1396":1,"1402":2,"1417":2,"1432":2,"1436":9,"1488":1,"1496":1,"1558":1,"1607":1,"1608":1,"1669":2,"1671":1,"1687":2,"1741":1,"1742":2,"1750":1,"1760":2}}],["diagram",{"0":{"2041":1},"3":{"122":1,"1262":1,"1270":1,"1324":1,"1496":3,"1502":1,"1526":1,"1591":2,"1620":1,"1627":1,"1756":1,"1761":1,"1793":2,"1821":1,"2040":2,"2050":1,"2101":5,"2107":1,"2110":1,"2174":1}}],["diagrams",{"3":{"121":1,"1502":2,"1517":2,"1562":1,"1571":1,"1626":2,"1860":1,"2111":1}}],["diagnosability",{"3":{"1436":1}}],["diagnosable",{"3":{"0":1,"862":1,"1085":1,"1297":1,"1311":1,"1436":1,"1456":2}}],["diagnosing",{"3":{"1339":1}}],["diagnosis",{"3":{"20":1,"1259":1,"1286":1,"1324":1,"1339":1,"1415":1}}],["diagnosed",{"3":{"401":1,"1324":1,"1339":1,"1436":2}}],["diagnose",{"3":{"24":1,"390":1,"1324":1,"1467":1,"1665":1,"2057":1}}],["diagnostically",{"3":{"1311":1}}],["diagnostics",{"2":{"1229":1,"1270":1,"1324":1,"1339":1,"1415":1},"3":{"39":1,"135":2,"341":1,"395":1,"403":1,"483":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"633":1,"861":1,"863":1,"1229":1,"1247":1,"1259":6,"1270":7,"1286":4,"1300":4,"1311":6,"1323":4,"1324":4,"1333":1,"1339":11,"1359":2,"1396":2,"1402":1,"1415":1,"1417":2,"1427":5,"1436":5,"1456":2,"1490":1,"1640":1,"1670":1,"1958":1}}],["diagnostic",{"2":{"135":1,"490":1,"491":1,"492":1,"493":1,"1526":1},"3":{"0":1,"109":1,"135":2,"265":1,"403":2,"405":1,"406":1,"490":2,"491":2,"492":2,"493":2,"574":1,"633":1,"719":2,"1126":1,"1247":1,"1270":1,"1286":3,"1300":1,"1311":3,"1324":2,"1339":1,"1359":6,"1396":2,"1402":1,"1415":4,"1436":5,"1459":1,"1465":1,"1467":6,"1489":1,"1591":1,"2104":1}}],["digits",{"3":{"972":1,"1018":1,"1237":1,"1286":1,"1293":1,"1300":3,"1305":1,"1309":1,"1311":1,"1324":1,"1347":1,"1350":1,"1353":1,"1359":2,"1369":1,"1395":3,"1396":3,"1417":1,"1631":1,"2200":1}}],["digital",{"3":{"424":1,"426":1,"1311":4}}],["digit",{"3":{"235":1,"972":1,"974":1,"975":1,"1020":1,"1271":2,"1289":1,"1300":7,"1323":1,"1324":7,"1339":1,"1359":2,"1417":1,"1427":2,"1436":9,"1438":2,"1443":1,"1465":1,"1641":1,"1829":1}}],["digests",{"3":{"0":1,"877":1,"906":1,"1300":6,"1982":1,"2237":1,"2239":1}}],["digest",{"3":{"0":5,"373":1,"867":1,"868":1,"870":2,"872":1,"873":2,"876":1,"877":1,"905":4,"906":1,"907":1,"945":1,"946":6,"948":1,"1212":3,"1283":1,"1286":4,"1290":1,"1300":15,"1436":4,"1438":2,"1445":8,"1450":1,"1455":1,"1458":2,"1667":2,"1672":1,"1900":1,"1902":4,"1980":1,"1982":4,"1985":1}}],["didactic",{"3":{"635":1}}],["didn",{"3":{"60":1,"61":1,"1556":2}}],["did",{"3":{"0":1,"21":1,"24":2,"42":1,"96":1,"115":1,"126":1,"141":1,"149":1,"157":1,"158":1,"160":1,"175":1,"201":1,"202":1,"203":1,"230":1,"242":1,"243":1,"245":1,"249":2,"256":2,"258":1,"259":1,"260":1,"283":2,"322":1,"333":1,"335":1,"341":1,"342":1,"343":1,"350":1,"353":2,"363":1,"365":2,"374":1,"390":1,"402":1,"433":1,"475":1,"476":1,"477":1,"478":1,"486":2,"487":1,"488":2,"489":1,"490":2,"491":1,"492":1,"511":1,"517":1,"524":1,"536":1,"539":1,"549":1,"550":1,"551":1,"583":1,"586":1,"626":1,"628":1,"635":1,"638":1,"642":1,"648":1,"675":1,"681":1,"689":1,"700":1,"702":1,"709":2,"724":1,"725":1,"726":1,"733":1,"735":1,"740":1,"743":1,"789":1,"798":1,"812":1,"832":1,"867":1,"877":1,"889":1,"891":1,"905":1,"907":1,"908":1,"926":3,"938":1,"988":3,"1006":1,"1051":3,"1066":1,"1067":1,"1069":1,"1091":1,"1092":1,"1124":1,"1142":1,"1212":1,"1232":1,"1237":1,"1241":1,"1244":1,"1247":3,"1250":1,"1258":1,"1259":6,"1265":1,"1266":1,"1270":4,"1275":1,"1277":1,"1286":18,"1293":1,"1300":4,"1301":3,"1309":5,"1311":7,"1312":1,"1315":1,"1318":2,"1323":7,"1324":22,"1328":2,"1339":7,"1344":1,"1350":4,"1358":1,"1359":6,"1366":1,"1367":1,"1369":2,"1391":1,"1395":11,"1396":12,"1402":2,"1408":1,"1415":9,"1417":12,"1418":2,"1425":1,"1427":3,"1430":1,"1436":5,"1438":2,"1442":1,"1443":2,"1449":2,"1451":1,"1455":6,"1467":4,"1474":1,"1475":1,"1476":1,"1478":1,"1490":1,"1492":2,"1496":3,"1526":1,"1684":1,"1686":1,"1697":1,"1728":1,"1730":1,"1780":2,"1801":1,"1809":1,"1840":1,"1845":1,"1851":1,"1863":1,"1869":1,"1876":1,"1881":1,"1892":1,"1899":1,"1900":1,"1906":1,"1910":1,"1918":2,"1922":1,"1959":1,"1965":1,"1998":1,"2002":1,"2013":1,"2057":1,"2063":1,"2083":1,"2097":1,"2100":1,"2126":2,"2150":1,"2158":1,"2162":1,"2168":1,"2172":1,"2179":1,"2182":2,"2188":1,"2190":1,"2199":2,"2201":1}}],["di",{"0":{"1368":1,"1824":1,"2097":1},"1":{"977":1,"978":1,"979":1,"980":1,"981":1,"982":1,"983":1,"984":1},"3":{"0":6,"27":1,"119":1,"155":1,"157":2,"200":1,"241":1,"258":1,"341":1,"343":1,"359":1,"395":1,"401":3,"435":1,"483":1,"536":1,"550":1,"583":1,"632":1,"649":1,"651":1,"725":1,"797":1,"798":1,"802":1,"827":1,"920":1,"926":1,"977":1,"979":1,"980":3,"983":2,"997":1,"1042":1,"1051":1,"1059":2,"1175":1,"1176":1,"1178":2,"1192":3,"1202":2,"1203":2,"1212":2,"1213":1,"1214":1,"1237":1,"1244":1,"1247":3,"1254":1,"1257":1,"1259":10,"1265":2,"1269":1,"1270":16,"1271":1,"1273":1,"1274":1,"1275":2,"1280":2,"1283":1,"1284":1,"1286":36,"1294":1,"1300":13,"1301":3,"1302":1,"1309":21,"1310":4,"1311":28,"1312":2,"1313":1,"1314":1,"1315":1,"1316":1,"1323":13,"1324":31,"1332":1,"1333":1,"1339":9,"1350":5,"1352":1,"1355":2,"1357":1,"1359":29,"1360":1,"1368":1,"1369":4,"1370":1,"1380":8,"1395":7,"1396":22,"1399":1,"1402":9,"1411":1,"1413":1,"1415":21,"1416":7,"1417":19,"1418":1,"1421":1,"1422":1,"1427":6,"1429":1,"1431":1,"1436":24,"1437":1,"1438":7,"1488":1,"1489":1,"1496":2,"1513":1,"1526":1,"1538":1,"1540":1,"1577":1,"1582":1,"1585":2,"1591":1,"1638":1,"1650":3,"1651":3,"1653":2,"1656":1,"1658":1,"1661":1,"1665":1,"1668":1,"1701":1,"1730":1,"1748":1,"1765":1,"1791":1,"1826":2,"1827":2,"1830":1,"1856":1,"1874":1,"1881":1,"1886":1,"1908":1,"1909":1,"1915":1,"1948":1,"1956":1,"2017":1,"2076":1,"2087":1,"2097":1,"2100":2,"2117":1,"2144":1,"2165":2,"2171":1,"2182":1,"2190":1,"2200":1,"2204":2,"2234":2}}],["diffing",{"3":{"1436":1,"2081":1}}],["diffed",{"3":{"721":1,"767":1,"1311":1,"1415":1,"1930":1}}],["differed",{"3":{"724":1,"1438":1}}],["differences",{"3":{"0":2,"219":1,"454":1,"624":1,"629":1,"636":1,"769":1,"868":1,"1034":1,"1126":1,"1270":1,"1286":3,"1309":1,"1310":1,"1323":1,"1324":1,"1350":1,"1373":1,"1380":1,"1395":5,"1396":1,"1399":1,"1417":1,"1436":2,"1438":1,"1467":2,"2031":1}}],["difference",{"3":{"0":2,"24":1,"175":1,"218":1,"245":1,"266":1,"388":1,"425":1,"497":1,"499":1,"522":1,"539":1,"573":1,"577":1,"584":1,"592":1,"599":1,"603":1,"626":1,"633":2,"639":1,"641":2,"716":1,"723":1,"726":1,"800":1,"820":2,"825":1,"827":1,"831":1,"838":1,"839":1,"840":1,"996":1,"1034":1,"1040":1,"1051":1,"1052":1,"1099":1,"1132":1,"1150":1,"1212":1,"1229":1,"1237":2,"1247":3,"1257":1,"1259":1,"1263":1,"1270":3,"1271":1,"1286":6,"1300":4,"1301":1,"1307":1,"1309":1,"1311":2,"1323":2,"1324":8,"1339":3,"1342":1,"1350":7,"1359":31,"1362":1,"1369":2,"1380":4,"1383":1,"1395":6,"1396":12,"1402":3,"1415":6,"1416":2,"1417":4,"1436":19,"1455":1,"1459":1,"1467":1,"1489":1,"1497":1,"1537":1,"1631":1,"1685":1,"1727":1,"1728":1,"1782":1,"1817":1,"1824":1,"1861":1,"1879":1,"1926":1,"1930":1,"1943":2,"2008":1,"2031":1,"2040":1,"2056":1,"2082":1,"2107":1,"2112":1,"2121":1,"2135":1,"2176":1,"2186":1,"2189":1,"2198":1,"2202":2}}],["differentcurrencies",{"2":{"1585":1},"3":{"1585":2}}],["differentiation",{"3":{"1396":1}}],["differently",{"3":{"153":1,"160":1,"303":1,"341":1,"447":1,"520":1,"574":1,"603":1,"651":1,"819":1,"828":1,"829":1,"840":1,"854":1,"906":1,"924":1,"933":1,"996":1,"1060":1,"1117":1,"1124":1,"1174":1,"1176":1,"1247":1,"1259":1,"1286":4,"1300":8,"1301":3,"1311":1,"1323":4,"1324":6,"1339":2,"1343":1,"1350":2,"1359":5,"1369":1,"1380":1,"1396":1,"1402":1,"1415":1,"1435":1,"1436":7,"1455":1,"1727":1,"1730":1,"1748":1,"1819":1,"1874":1,"1909":1,"2070":1,"2132":1,"2200":1,"2230":1}}],["different",{"0":{"719":1,"1228":1,"1295":1,"1782":1},"3":{"0":11,"10":1,"24":1,"26":1,"68":1,"77":1,"91":1,"95":1,"97":1,"135":2,"136":1,"137":1,"147":1,"156":1,"157":1,"159":3,"161":1,"166":2,"177":1,"186":1,"195":1,"201":1,"202":1,"216":1,"217":1,"225":1,"227":1,"236":1,"242":3,"244":3,"248":1,"255":3,"256":1,"266":1,"274":1,"283":1,"299":1,"301":1,"317":2,"318":2,"320":1,"340":1,"350":1,"353":1,"359":2,"388":1,"390":1,"401":1,"447":2,"457":1,"465":1,"474":1,"483":1,"500":1,"506":2,"509":1,"528":1,"530":1,"537":1,"556":1,"574":1,"577":1,"608":1,"609":2,"617":2,"619":1,"626":1,"634":2,"639":1,"640":1,"650":1,"651":1,"666":2,"684":1,"689":1,"690":1,"692":1,"697":1,"698":1,"699":1,"702":1,"707":1,"713":1,"714":1,"715":1,"718":1,"726":2,"732":2,"733":1,"740":1,"741":2,"749":1,"758":1,"773":1,"774":1,"790":1,"791":1,"799":1,"809":1,"820":3,"821":1,"827":4,"829":4,"830":1,"832":2,"856":1,"869":1,"888":1,"890":1,"891":1,"899":1,"956":1,"957":1,"974":1,"980":2,"989":1,"995":2,"997":1,"1011":1,"1014":1,"1018":3,"1021":1,"1028":1,"1033":1,"1035":1,"1043":4,"1049":1,"1067":1,"1079":1,"1091":2,"1092":1,"1099":1,"1116":1,"1124":1,"1125":1,"1126":2,"1134":1,"1144":1,"1183":1,"1212":1,"1229":1,"1232":1,"1236":1,"1237":3,"1239":1,"1240":1,"1242":1,"1247":9,"1259":9,"1261":1,"1267":3,"1270":9,"1271":2,"1273":1,"1276":1,"1279":1,"1281":1,"1284":1,"1286":35,"1289":1,"1290":1,"1297":1,"1300":17,"1301":7,"1302":1,"1306":1,"1307":1,"1309":4,"1310":7,"1311":13,"1312":1,"1323":22,"1324":33,"1327":2,"1339":20,"1343":2,"1345":1,"1350":11,"1351":1,"1353":1,"1355":1,"1359":73,"1362":1,"1368":1,"1369":5,"1372":1,"1375":1,"1379":1,"1380":12,"1389":2,"1391":1,"1395":22,"1396":41,"1402":5,"1406":1,"1409":1,"1415":21,"1416":4,"1417":14,"1419":1,"1423":2,"1427":4,"1430":1,"1431":1,"1435":3,"1436":64,"1438":2,"1441":1,"1442":1,"1443":1,"1446":1,"1447":1,"1455":4,"1458":1,"1459":1,"1460":1,"1462":1,"1467":2,"1471":1,"1472":1,"1475":2,"1485":1,"1486":1,"1488":3,"1489":2,"1492":3,"1496":6,"1498":2,"1536":1,"1537":1,"1570":1,"1627":1,"1630":3,"1638":1,"1639":5,"1641":4,"1701":1,"1719":1,"1781":1,"1794":1,"1797":1,"1804":2,"1816":2,"1820":1,"1822":1,"1825":1,"1828":1,"1832":1,"1839":1,"1845":1,"1849":4,"1851":1,"1853":1,"1858":1,"1860":1,"1862":2,"1863":1,"1864":1,"1865":1,"1866":1,"1870":1,"1887":1,"1888":3,"1890":2,"1896":1,"1902":1,"1908":5,"1909":2,"1911":3,"1912":1,"1916":1,"1922":2,"1923":2,"1925":2,"1934":2,"1950":1,"1952":1,"1953":2,"1959":2,"1960":1,"1962":1,"1964":1,"1977":1,"1982":1,"1986":2,"1993":2,"1995":3,"1996":1,"1998":1,"2000":3,"2001":1,"2002":2,"2025":1,"2034":1,"2037":1,"2038":1,"2042":2,"2043":1,"2044":2,"2048":1,"2064":1,"2071":2,"2072":1,"2075":1,"2079":1,"2084":2,"2088":1,"2111":3,"2112":1,"2115":4,"2116":2,"2132":2,"2135":1,"2136":1,"2144":2,"2146":1,"2154":1,"2158":1,"2166":1,"2169":2,"2176":1,"2194":4,"2195":3,"2201":1}}],["differ",{"3":{"0":2,"32":1,"97":1,"202":1,"244":1,"282":1,"318":1,"359":1,"491":1,"558":2,"626":1,"633":1,"640":1,"641":1,"642":1,"667":1,"689":1,"691":1,"764":1,"766":1,"827":1,"828":1,"829":1,"831":1,"877":1,"889":1,"973":1,"980":1,"1035":1,"1042":1,"1058":1,"1116":1,"1124":1,"1127":1,"1132":1,"1175":1,"1212":1,"1229":1,"1247":3,"1249":1,"1263":1,"1270":2,"1271":1,"1280":1,"1286":5,"1300":1,"1301":1,"1309":2,"1311":4,"1323":6,"1324":4,"1339":5,"1350":1,"1359":6,"1369":1,"1392":1,"1395":7,"1396":5,"1402":1,"1406":1,"1415":2,"1416":1,"1417":5,"1436":20,"1447":1,"1466":1,"1467":3,"1489":1,"1496":2,"1667":1,"1686":1,"1712":1,"1861":1,"1947":1,"2000":1,"2080":1,"2176":1,"2190":1,"2232":1}}],["differs",{"3":{"0":1,"27":1,"30":1,"62":1,"91":1,"93":1,"126":1,"195":1,"452":1,"472":1,"585":1,"618":1,"640":1,"668":2,"698":1,"766":1,"783":1,"819":1,"828":2,"831":1,"916":1,"982":1,"1035":1,"1037":1,"1212":1,"1247":2,"1249":1,"1259":1,"1262":1,"1270":1,"1271":1,"1280":1,"1286":9,"1295":1,"1300":2,"1309":1,"1310":2,"1311":4,"1320":1,"1323":2,"1324":9,"1338":1,"1339":2,"1350":2,"1359":7,"1369":1,"1372":1,"1380":3,"1395":9,"1396":19,"1399":1,"1402":1,"1415":7,"1416":2,"1417":2,"1427":2,"1429":1,"1436":16,"1441":1,"1442":1,"1447":1,"1455":1,"1456":1,"1459":1,"1467":1,"1475":1,"1485":1,"1486":1,"1490":1,"1641":1,"1656":1,"1769":3,"1791":1,"1826":1,"1861":1,"1922":1,"1934":1,"1976":1,"1977":1,"1997":1,"2033":1,"2058":1,"2078":1,"2080":2,"2085":1,"2128":1}}],["differing",{"3":{"0":1,"1034":1,"1212":1,"1237":1,"1300":1,"1311":1,"1323":3,"1324":2,"1350":2,"1359":1,"1395":2,"1396":1,"1415":1,"1436":5,"1902":1}}],["diffable",{"3":{"610":1,"708":1,"2134":1}}],["diffs",{"3":{"0":1,"1212":2,"1237":1,"1274":1,"1286":2,"1300":1,"1431":1,"1436":1,"1438":2,"1455":1,"1492":1,"1534":1,"1577":1,"1663":1,"1929":2,"1930":2,"2045":1,"2046":1,"2060":1,"2081":1,"2234":1}}],["diff",{"2":{"452":1,"566":1},"3":{"0":6,"135":1,"160":1,"451":2,"452":1,"562":1,"564":2,"565":1,"566":7,"567":1,"572":1,"573":1,"592":1,"608":1,"619":1,"714":2,"715":2,"716":1,"750":1,"766":2,"838":1,"840":2,"863":1,"964":1,"972":1,"981":2,"982":2,"1005":1,"1019":2,"1020":1,"1177":1,"1178":1,"1270":1,"1286":5,"1300":2,"1323":1,"1359":1,"1380":1,"1396":1,"1427":1,"1436":16,"1445":1,"1453":2,"1455":12,"1459":1,"1463":3,"1486":2,"1492":3,"1496":5,"1524":3,"1526":1,"1530":1,"1531":4,"1532":1,"1546":1,"1577":2,"1586":1,"1591":1,"1661":1,"1673":1,"1684":1,"1729":1,"1825":1,"1839":1,"1876":1,"2044":1,"2048":1,"2160":1,"2197":1,"2202":1}}],["disguise",{"3":{"2130":1}}],["disguised",{"3":{"1395":1}}],["dissolves",{"3":{"1955":1}}],["dissolved",{"3":{"130":1,"135":1,"139":1,"1004":1,"1436":1,"1496":1}}],["dismissquestionasync",{"3":{"1402":1}}],["dismissasync",{"3":{"1396":2,"1402":1}}],["dismissals",{"3":{"1417":2}}],["dismissal",{"3":{"1324":1,"1399":1,"1402":3,"1417":1}}],["dismiss",{"3":{"1396":2,"1397":1,"1398":1,"1402":15,"1415":1,"1526":1}}],["dismisses",{"3":{"1324":1,"1632":1}}],["dismissed",{"3":{"1324":4,"1395":1,"1396":1,"1398":1,"1399":1,"1401":1,"1402":17,"1417":2,"1630":1,"1632":1}}],["dismissing",{"3":{"649":1,"1324":2,"1402":1,"1632":1}}],["disjunction",{"3":{"1324":1}}],["disjunctive",{"3":{"1247":1}}],["disjoint",{"3":{"0":2,"241":1,"247":1,"253":1,"731":1,"733":3,"734":1,"736":1,"737":1,"827":1,"1212":1,"1286":1,"1300":1,"1301":3,"1311":1,"1324":1,"1359":1,"1379":1,"1436":1,"1438":1,"1668":1,"1916":1,"2234":1}}],["disqualifies",{"3":{"1244":1}}],["disqualify",{"3":{"335":1,"336":1,"1244":2,"1247":3,"1270":1,"1309":1,"1310":1}}],["disqualifying",{"3":{"335":1,"1244":1,"1247":1}}],["disregard",{"3":{"1091":1,"1427":1}}],["disincentive",{"3":{"692":1}}],["disk",{"3":{"401":1,"451":1,"1124":1,"1163":1,"1300":1,"1324":1,"1339":1,"1369":1,"1416":2,"1417":1,"1427":1,"1435":1,"1436":12,"1453":1,"1459":1,"1468":1,"1486":1,"1496":2,"2134":1,"2142":2,"2146":1,"2148":1}}],["disabilities",{"3":{"1629":1}}],["disabling",{"0":{"1882":1},"3":{"0":1,"557":1,"1259":1,"1286":1,"1300":5,"1311":2,"1323":2,"1339":2,"1396":1,"1433":1,"1436":1,"1465":1,"1467":1,"1490":1,"1724":1}}],["disableforunsafehttpmethods",{"3":{"1339":2}}],["disablefor",{"3":{"1339":3}}],["disablement",{"3":{"1323":1,"2168":1}}],["disableantiforgery",{"3":{"1300":1,"1324":2}}],["disableasync",{"3":{"1293":1,"1300":1,"1323":2}}],["disableaspnetcoremetrics=true",{"3":{"1443":1,"1446":1}}],["disableaspnetcoremetrics",{"2":{"397":1},"3":{"0":1,"395":1,"397":2,"409":1,"1443":1,"1467":1,"1496":1,"2011":1,"2158":1,"2161":1,"2162":1}}],["disabletwofactorhandlerbase",{"2":{"1322":1,"2200":1},"3":{"1199":2,"1203":1,"1207":2,"1300":2,"1322":3,"1323":4,"1496":1,"2200":1}}],["disablelocalcacheread",{"3":{"733":2,"1301":1}}],["disablelocalcachewrite",{"2":{"733":1},"3":{"733":2,"1301":1}}],["disableunderlyingdata",{"2":{"733":1,"734":1,"1301":1},"3":{"733":1,"734":1,"1301":1}}],["disablehealthchecks",{"2":{"245":1,"1332":1},"3":{"245":1,"1332":1,"1339":4,"1442":1}}],["disablehttpclientmetrics=true",{"3":{"1443":1,"1446":1,"1677":1}}],["disablehttpclientmetrics",{"2":{"1476":1,"1668":1},"3":{"0":1,"395":1,"397":1,"407":1,"1333":1,"1339":1,"1443":1,"1467":1,"1476":1,"1577":1,"1668":1,"2011":1,"2158":1,"2162":1}}],["disable",{"2":{"1552":1,"1845":1},"3":{"0":2,"19":1,"39":1,"207":1,"259":1,"388":1,"600":1,"774":1,"789":1,"907":1,"1059":1,"1060":1,"1212":1,"1237":4,"1286":3,"1300":11,"1301":1,"1309":3,"1311":6,"1323":4,"1324":2,"1339":7,"1359":1,"1379":1,"1402":1,"1415":1,"1417":3,"1436":2,"1455":1,"1466":1,"1467":1,"1496":1,"1524":1,"1552":1,"1596":1,"1845":1,"1882":1,"1886":1,"1969":1,"2038":1,"2067":1,"2096":1,"2110":1,"2161":1,"2168":1,"2171":1,"2201":1,"2234":1}}],["disablescrolltracking",{"3":{"1324":1}}],["disables",{"3":{"0":1,"60":1,"236":1,"481":1,"583":1,"618":1,"620":1,"690":1,"827":1,"905":1,"917":1,"1109":1,"1211":1,"1256":1,"1259":1,"1300":1,"1301":1,"1309":1,"1311":1,"1314":1,"1323":3,"1324":4,"1339":3,"1395":1,"1402":4,"1415":1,"1436":1,"1454":1,"1455":1,"1467":3,"1488":1,"1591":1,"1631":1,"1639":1,"1878":1,"1882":1,"1885":1,"2058":1,"2205":1}}],["disableruntimemetrics=true",{"3":{"1443":1,"1446":1,"1677":1}}],["disableruntimemetrics",{"2":{"1476":1,"1668":1},"3":{"0":1,"395":1,"397":1,"1333":1,"1339":1,"1443":1,"1467":1,"1476":1,"1577":1,"1668":1,"2011":1,"2158":1,"2162":1}}],["disabledstubhook",{"3":{"1436":1}}],["disabledsessionbookmarkvalidationservice",{"2":{"583":1,"1314":1,"1349":1,"1377":1},"3":{"583":2,"585":1,"1199":2,"1203":1,"1207":2,"1314":1,"1349":3,"1350":11,"1377":1,"1380":3,"1415":1}}],["disabled=",{"3":{"1324":1}}],["disabledmodulenames",{"2":{"1315":1,"1882":1},"3":{"1315":1,"1323":2,"1882":1}}],["disabledfakeexportservice",{"3":{"1199":3,"1207":1,"1436":6}}],["disabledfeaturehandlertests",{"3":{"1199":1,"1207":2}}],["disabledfeaturehandler",{"2":{"306":1,"1928":1,"2139":1,"2141":1},"3":{"0":1,"300":2,"306":2,"1199":4,"1203":1,"1207":2,"1311":14,"1396":2,"1928":1,"2139":4,"2141":1}}],["disabledusernotificationexportservice",{"2":{"1308":1},"3":{"585":1,"1199":3,"1203":1,"1207":2,"1308":1,"1309":9,"1415":1,"1438":1}}],["disableduserengagementexportservice",{"3":{"585":1,"1199":2,"1203":1,"1207":2,"1396":9}}],["disabledusersalesexportservice",{"2":{"583":1},"3":{"583":2,"585":1}}],["disabledattendeequeryservicetests",{"3":{"1199":1,"1207":2,"1487":1}}],["disabledattendeequeryservice",{"2":{"586":1,"1412":1},"3":{"585":1,"586":1,"1199":3,"1203":1,"1207":2,"1350":1,"1412":2,"1415":9}}],["disabledbookmarkcountservicetests",{"3":{"1199":1,"1207":2,"1487":1}}],["disabledbookmarkcountservice",{"2":{"1882":1},"3":{"585":1,"1199":3,"1203":1,"1207":2,"1323":1,"1350":1,"1359":3,"1396":11,"1415":1,"1882":1}}],["disabledcustomerservice",{"3":{"583":2}}],["disabledproductvariantservice",{"2":{"583":1,"1751":1,"1772":1},"3":{"583":2,"1751":1,"1772":1}}],["disabledeventlivevalidationservicetests",{"3":{"1199":1,"1207":2,"1437":1}}],["disabledeventlivevalidationservice",{"2":{"583":1,"1314":1,"1349":1,"1377":1},"3":{"583":2,"585":1,"1199":3,"1203":1,"1207":2,"1314":1,"1349":3,"1350":19,"1359":1,"1377":1,"1380":3,"1496":1}}],["disabled",{"0":{"1412":1,"2139":1,"2198":1},"2":{"300":1,"306":1,"2139":1},"3":{"0":5,"15":1,"31":1,"53":3,"59":2,"63":2,"124":1,"299":1,"300":3,"301":1,"302":1,"304":2,"306":3,"397":1,"482":1,"556":1,"565":1,"582":2,"583":10,"584":1,"585":11,"587":2,"607":1,"725":1,"729":1,"789":1,"790":1,"792":1,"827":1,"914":1,"931":2,"932":1,"1018":2,"1060":1,"1093":1,"1212":2,"1257":1,"1258":1,"1259":3,"1263":3,"1270":11,"1284":1,"1286":8,"1288":1,"1300":2,"1308":1,"1309":11,"1311":22,"1312":2,"1313":1,"1314":3,"1315":3,"1318":1,"1320":2,"1323":20,"1324":6,"1339":5,"1341":2,"1349":2,"1350":12,"1359":3,"1366":1,"1369":3,"1378":1,"1380":5,"1391":1,"1395":10,"1396":23,"1398":1,"1402":5,"1412":1,"1413":1,"1415":5,"1417":1,"1420":1,"1421":1,"1427":2,"1431":1,"1436":13,"1437":1,"1438":1,"1455":1,"1459":1,"1465":1,"1467":2,"1469":1,"1470":1,"1472":1,"1474":1,"1487":3,"1488":1,"1489":1,"1504":1,"1508":1,"1526":2,"1535":1,"1551":1,"1552":1,"1561":2,"1577":1,"1626":2,"1653":1,"1661":1,"1662":2,"1666":3,"1671":1,"1720":1,"1751":1,"1770":1,"1772":1,"1790":2,"1821":1,"1842":1,"1882":8,"1884":1,"1886":1,"1896":1,"1928":2,"2020":2,"2052":1,"2096":1,"2136":1,"2137":1,"2138":3,"2139":2,"2140":1,"2141":4,"2158":1,"2168":1,"2175":1,"2182":2,"2198":1,"2205":1,"2234":2}}],["disallowed",{"3":{"1359":2,"1423":1,"2177":1}}],["disambiguated",{"3":{"1416":1}}],["disambiguates",{"3":{"1396":1}}],["disambiguate",{"3":{"1339":1,"1415":3,"1436":1}}],["disambiguation",{"3":{"1339":2,"1436":2,"1496":1}}],["disarmed",{"3":{"1300":1}}],["disarm",{"3":{"1300":2}}],["disarms",{"3":{"819":1,"905":1,"1300":2,"1843":1}}],["disappearance",{"3":{"1417":1}}],["disappears",{"3":{"818":1,"840":1,"1247":1,"1286":1,"1324":1,"1339":1,"1350":1,"1395":1,"1436":4,"1442":1,"1467":1,"1727":1,"1858":1,"1995":1,"2078":1}}],["disappear",{"3":{"303":1,"1247":1,"1309":1,"1367":1,"1433":1,"1436":1,"1438":1,"2195":1}}],["disappearing",{"3":{"137":1,"1417":1,"1436":1}}],["disappeared",{"3":{"135":1,"454":1,"1436":1,"1474":1,"1673":1}}],["disaster",{"0":{"1474":1},"3":{"68":1,"601":1,"602":1,"608":1,"609":1,"614":1,"971":1,"972":1,"1192":1,"1436":1,"1438":1,"1466":1,"1467":4,"1470":1,"1471":3,"1472":3,"1474":35,"1475":1,"1476":2,"1478":1,"1482":3,"1483":3,"1484":2,"1496":1,"1525":2,"1526":1,"1534":2,"1535":1,"1566":2,"1590":1,"1591":2,"1599":1,"1706":1,"1707":1,"1709":1,"1852":1,"2034":1,"2035":1,"2044":1}}],["disagreeing",{"3":{"940":1,"1270":1,"1309":1,"1324":2,"1348":1,"1916":1,"2012":1,"2066":1}}],["disagrees",{"3":{"890":1,"905":1,"1093":1,"1269":1,"1286":2,"1300":1,"1309":1,"1396":1,"1436":1,"1453":1,"1496":1,"1561":1,"2047":1,"2181":1}}],["disagree",{"3":{"0":1,"136":1,"530":1,"556":1,"617":1,"742":1,"811":1,"827":1,"889":1,"905":1,"926":1,"1026":1,"1034":1,"1079":1,"1142":1,"1178":1,"1190":1,"1241":1,"1247":2,"1251":1,"1270":2,"1271":3,"1281":1,"1286":7,"1288":1,"1300":10,"1309":1,"1311":2,"1312":1,"1322":1,"1323":2,"1324":4,"1350":2,"1352":1,"1359":13,"1366":1,"1369":1,"1372":1,"1395":3,"1396":5,"1402":6,"1409":1,"1415":5,"1417":1,"1436":7,"1438":1,"1488":1,"1648":1,"1695":1,"1722":1,"1729":1,"1767":1,"1829":1,"1924":1,"2025":1,"2066":1,"2075":1}}],["disagreed",{"3":{"0":1,"335":1,"837":1,"1323":1,"1339":1,"1359":1,"1415":1}}],["disagreement",{"3":{"0":1,"691":1,"1266":1,"1270":4,"1300":1,"1436":1,"1722":1,"1729":1}}],["disclaims",{"3":{"1591":1}}],["discloses",{"3":{"1247":1,"1641":1,"1765":1}}],["disclose",{"3":{"856":1,"1300":1}}],["disclosed",{"3":{"854":1,"1396":1}}],["disclosure",{"3":{"388":1,"1191":1,"1200":1,"1270":1,"1311":1,"1359":2,"1396":5,"1922":1}}],["discharges",{"3":{"1395":1}}],["discharge",{"3":{"1323":1}}],["discharged",{"3":{"0":1,"1010":2,"1395":1}}],["discussion",{"3":{"1350":1,"1359":1,"1467":1}}],["discuss",{"3":{"1311":1}}],["discussed",{"3":{"256":1,"1395":1}}],["discrete",{"3":{"1380":1}}],["discrepancy",{"3":{"1190":1}}],["discriminating",{"3":{"1436":2}}],["discrimination",{"3":{"100":1,"1436":13,"1631":1}}],["discriminate",{"3":{"1359":1}}],["discriminates",{"3":{"1270":2,"1436":3}}],["discriminated",{"3":{"920":1,"926":1,"1265":1,"1270":4,"1323":1,"1396":1,"1415":1,"1959":1}}],["discriminators",{"3":{"1350":1,"1369":1}}],["discriminator",{"1":{"779":1,"780":1,"781":1,"782":1,"783":1,"784":1,"785":1,"786":1},"3":{"0":3,"665":4,"667":2,"669":1,"697":1,"733":1,"779":1,"780":1,"782":10,"783":1,"784":1,"786":1,"923":1,"926":3,"963":1,"964":2,"968":1,"1212":2,"1233":1,"1237":2,"1270":1,"1286":2,"1301":1,"1309":1,"1336":1,"1339":1,"1350":7,"1355":1,"1359":5,"1369":1,"1395":1,"1396":16,"1398":1,"1402":2,"1769":1,"1970":1,"1972":1,"2234":2}}],["disciplines",{"3":{"1396":1}}],["disciplined",{"3":{"537":1,"1286":1,"1417":1,"1526":1,"2163":1}}],["discipline",{"0":{"1221":1,"1919":1},"1":{"2072":1,"2073":1,"2074":1,"2075":1,"2076":1,"2077":1,"2078":1,"2079":1,"2080":1,"2081":1,"2082":1},"3":{"0":1,"41":1,"69":1,"79":1,"80":1,"133":1,"135":1,"136":1,"148":1,"162":1,"196":1,"342":1,"346":1,"370":1,"376":1,"398":2,"414":1,"415":1,"449":1,"472":1,"537":1,"549":1,"565":1,"568":1,"592":1,"610":1,"620":1,"622":1,"658":1,"676":1,"700":1,"702":1,"729":1,"750":1,"801":1,"839":1,"842":1,"844":1,"845":2,"847":1,"863":1,"865":1,"882":1,"890":1,"955":1,"990":1,"1012":1,"1044":1,"1076":1,"1223":1,"1229":4,"1237":2,"1254":1,"1259":1,"1270":1,"1286":6,"1300":4,"1303":1,"1311":7,"1317":1,"1320":2,"1323":3,"1324":3,"1339":1,"1346":1,"1350":2,"1352":1,"1359":13,"1369":5,"1374":1,"1384":1,"1386":1,"1395":4,"1396":12,"1398":1,"1402":2,"1415":4,"1417":5,"1436":40,"1455":2,"1467":2,"1526":1,"1538":1,"1555":1,"1575":1,"1576":1,"1577":2,"1671":1,"1795":1,"1805":1,"1833":1,"1834":1,"1851":1,"1853":1,"1859":1,"1875":1,"1885":1,"1889":2,"1891":2,"1910":1,"1924":2,"1935":1,"1936":1,"1941":1,"1944":1,"1949":1,"1954":1,"1972":1,"2035":1,"2039":1,"2045":1,"2071":1,"2072":2,"2100":1,"2109":1,"2122":1,"2133":1,"2158":1,"2161":1,"2166":1,"2192":1,"2194":1,"2212":1,"2214":1}}],["discourage",{"3":{"1570":1}}],["discouraging",{"3":{"530":1}}],["discounted",{"3":{"1028":1,"1742":1,"1748":1,"1749":1,"1750":2,"1764":2,"1765":1,"1767":1,"1768":1,"1773":1,"1776":1}}],["discount",{"3":{"0":2,"387":1,"390":2,"392":2,"1026":8,"1027":2,"1028":5,"1029":1,"1030":3,"1160":1,"1212":1,"1746":6,"1748":11,"1750":5,"1764":4,"1765":1,"1767":14,"1768":1,"1769":2,"1773":1,"1832":1,"1922":1}}],["discounting",{"3":{"0":1,"1026":1,"1767":1}}],["discounts",{"3":{"0":1,"1768":1}}],["disconnection",{"3":{"1640":1}}],["disconnects",{"3":{"1324":2}}],["disconnect",{"3":{"109":1,"612":1,"1311":1,"1324":3,"1438":1,"1669":1,"1927":1}}],["disconnectedcircuit",{"3":{"1416":1}}],["disconnectedcircuitretentionperiod",{"2":{"1123":1,"2001":1},"3":{"1123":1,"1324":1,"2001":1}}],["disconnectedcircuitretentionseconds",{"2":{"830":1,"831":1,"832":1},"3":{"830":1,"831":1,"832":1,"1324":2}}],["disconnectedcircuitmaxretained",{"2":{"830":1,"831":1,"832":1,"1123":1,"1124":1,"2001":1},"3":{"830":1,"831":1,"832":1,"1123":1,"1124":1,"1324":4,"2001":1}}],["disconnected",{"3":{"0":2,"507":1,"608":1,"831":1,"1124":1,"1247":1,"1286":1,"1311":3,"1324":13,"1416":1,"1417":1,"1438":1,"1640":1,"2160":1}}],["discoverrunbookalertheadings",{"3":{"1436":1}}],["discoverroutedpages",{"3":{"1436":1}}],["discoverdocumentedroutes",{"3":{"1436":1}}],["discovermembers",{"3":{"964":1,"1237":2}}],["discoveralertspecs",{"3":{"1436":1}}],["discoverability",{"3":{"227":1,"1270":1}}],["discoverable",{"3":{"86":1,"450":1,"555":1,"609":1,"1259":1,"1286":4,"1300":1,"1311":1,"1323":2,"1324":1,"1339":1,"1350":1,"1359":2,"1396":1,"1415":3,"1436":2,"1460":1,"1539":1,"1564":1,"1570":1,"1571":1,"2134":1}}],["discoverandregister",{"2":{"117":1,"633":1,"636":1,"1315":1,"1378":1,"1413":1,"1881":1,"1883":1,"2099":1,"2100":1},"3":{"117":2,"583":2,"633":1,"636":1,"1309":1,"1311":3,"1315":1,"1323":4,"1378":1,"1380":2,"1396":2,"1413":1,"1415":1,"1881":3,"1883":1,"2099":1,"2100":1}}],["discovering",{"3":{"69":1,"908":1,"965":1,"1051":1,"1270":1,"1323":1,"1324":1,"1330":1,"1359":2,"1436":1,"1440":1,"2047":1,"2205":1}}],["discovers",{"3":{"63":1,"135":1,"295":1,"584":1,"586":1,"609":1,"649":1,"905":1,"1212":1,"1259":1,"1286":3,"1300":1,"1309":1,"1311":3,"1313":1,"1323":2,"1324":1,"1339":1,"1359":2,"1377":1,"1380":1,"1396":3,"1415":5,"1416":1,"1434":1,"1436":7,"1453":1,"1458":1,"1476":1,"1486":1,"1492":1,"1662":1,"1671":1,"1684":2,"1728":1,"1729":1,"1810":1,"1878":1,"1886":1,"1934":1,"2096":1,"2107":1}}],["discovered",{"1":{"1878":1,"1879":1,"1880":1,"1881":1,"1882":1,"1883":1,"1884":1,"1885":1,"1886":1},"3":{"0":2,"53":1,"59":1,"63":1,"446":1,"454":1,"583":2,"609":1,"619":1,"648":1,"673":2,"792":1,"840":1,"964":1,"1051":1,"1082":1,"1084":1,"1135":1,"1212":1,"1235":1,"1237":2,"1259":3,"1270":3,"1286":7,"1309":4,"1311":2,"1315":1,"1323":6,"1324":2,"1339":1,"1359":16,"1369":2,"1380":1,"1396":8,"1402":5,"1415":9,"1416":1,"1417":1,"1427":1,"1431":1,"1436":30,"1438":1,"1441":2,"1467":2,"1476":2,"1486":1,"1509":1,"1544":1,"1550":1,"1651":2,"1653":1,"1790":1,"1877":1,"1878":1,"1883":1,"1884":1,"1951":1,"2020":1,"2046":2,"2047":1,"2059":1,"2079":1,"2095":1,"2205":1,"2209":1,"2216":1,"2234":1}}],["discover",{"3":{"0":1,"57":1,"62":1,"401":1,"536":1,"583":1,"610":1,"1052":1,"1067":1,"1092":1,"1237":1,"1259":1,"1275":1,"1286":1,"1309":1,"1310":1,"1311":1,"1313":1,"1323":3,"1324":2,"1339":1,"1354":1,"1369":2,"1380":1,"1395":3,"1438":1,"1458":1,"1467":1,"1626":1,"1789":1,"1830":1,"2028":1,"2109":1,"2131":1,"2137":1,"2160":1,"2165":1,"2170":1}}],["discovery",{"0":{"1315":1,"1896":1,"1956":1},"1":{"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"1893":1,"1894":1,"1895":1,"1896":1,"1897":1,"1898":1,"1899":1},"3":{"0":9,"28":1,"30":1,"31":8,"32":3,"33":5,"35":2,"53":1,"55":1,"61":1,"91":1,"92":3,"93":1,"95":1,"96":1,"97":1,"98":5,"102":1,"105":1,"132":1,"175":1,"182":1,"234":1,"235":3,"237":1,"239":1,"401":1,"448":1,"527":1,"583":3,"584":2,"585":1,"609":1,"628":1,"650":1,"749":2,"751":1,"758":1,"827":5,"834":1,"837":1,"838":2,"868":1,"913":2,"963":1,"966":1,"967":1,"1018":1,"1052":1,"1066":1,"1184":1,"1202":1,"1203":1,"1212":7,"1215":1,"1281":1,"1282":1,"1286":17,"1288":2,"1300":1,"1309":3,"1310":2,"1311":35,"1312":7,"1315":4,"1316":1,"1323":9,"1324":12,"1325":1,"1328":1,"1329":1,"1333":1,"1334":2,"1337":1,"1339":20,"1350":2,"1359":6,"1369":3,"1378":1,"1379":1,"1380":10,"1396":3,"1415":5,"1416":1,"1436":17,"1437":1,"1438":4,"1439":1,"1441":11,"1442":1,"1444":1,"1446":2,"1447":3,"1450":2,"1454":1,"1455":2,"1460":1,"1467":7,"1469":1,"1475":1,"1486":2,"1488":1,"1489":4,"1492":1,"1526":1,"1547":1,"1576":1,"1577":3,"1641":1,"1647":1,"1653":1,"1656":1,"1660":2,"1663":3,"1667":2,"1670":2,"1671":1,"1677":1,"1687":1,"1702":1,"1707":1,"1718":1,"1724":2,"1727":1,"1772":2,"1773":1,"1785":1,"1790":1,"1792":1,"1825":1,"1881":3,"1885":1,"1892":1,"1893":1,"1895":1,"1896":2,"1897":1,"1898":2,"1899":5,"1904":1,"1956":1,"1959":1,"2001":1,"2003":1,"2005":2,"2007":1,"2008":1,"2010":2,"2015":3,"2020":2,"2023":2,"2024":2,"2025":2,"2026":1,"2028":1,"2031":1,"2047":1,"2057":1,"2059":1,"2079":1,"2099":1,"2110":1,"2113":1,"2133":1,"2134":3,"2135":2,"2210":1,"2232":1,"2234":1}}],["discardunstartedconnectionasync",{"3":{"1324":1}}],["discardabandonedcapture",{"2":{"715":1,"1274":1},"3":{"715":1,"1274":1,"1286":3}}],["discarding",{"3":{"518":1,"707":1,"1270":1,"1278":1,"1286":1,"1300":1,"1311":1,"1324":3,"1417":4,"1436":2,"1840":1,"1947":1}}],["discards",{"3":{"21":1,"201":1,"255":1,"265":1,"520":1,"538":1,"540":1,"690":1,"1259":2,"1271":1,"1286":3,"1309":1,"1323":3,"1324":9,"1346":1,"1359":1,"1390":1,"1396":4,"1402":3,"1415":1,"1417":1,"1438":1,"1476":1,"1481":1,"1667":1,"2167":1,"2170":1}}],["discarded",{"3":{"0":2,"21":1,"534":1,"539":1,"640":1,"716":1,"854":1,"863":1,"991":1,"1100":1,"1229":1,"1259":1,"1286":2,"1294":1,"1300":4,"1309":1,"1311":2,"1323":1,"1324":7,"1350":1,"1359":7,"1395":1,"1396":3,"1402":1,"1415":1,"1416":1,"1417":3,"1436":1,"1492":1,"1641":2,"1767":1,"1822":1,"1947":1,"1949":1,"2185":1}}],["discard",{"3":{"0":1,"715":1,"721":1,"988":1,"1101":1,"1233":1,"1237":1,"1259":1,"1270":1,"1278":1,"1311":1,"1324":4,"1359":2,"1369":1,"1395":2,"1396":6,"1400":1,"1402":2,"1416":1,"1417":1,"1436":6,"1438":1,"1526":1,"1531":1,"1547":1,"1589":1,"1595":1,"1596":2,"1598":1,"1686":1,"1851":1}}],["distant",{"3":{"1311":1,"1359":1}}],["distancekmto",{"3":{"1395":1,"1417":2}}],["distance",{"3":{"632":1,"1379":1,"1395":4,"1417":6,"1436":1,"1438":1,"1556":1,"1922":1}}],["distorts",{"3":{"1286":1}}],["disturbs",{"3":{"1380":3,"1765":1}}],["disturbed",{"3":{"1323":1}}],["disturbing",{"3":{"1311":2,"1359":2,"1395":1,"1402":1,"1436":1}}],["disturb",{"3":{"1079":1,"1311":1}}],["distilled",{"0":{"1679":1},"3":{"601":1,"1470":1,"1502":1,"1679":1}}],["distinguishable",{"3":{"790":1,"907":1,"926":1,"1093":1,"1259":1,"1270":4,"1309":1,"1311":2,"1323":2,"1324":4,"1359":5,"1395":2,"1396":7,"1415":1,"1436":1,"1496":1,"2181":1}}],["distinguishing",{"3":{"309":1,"1259":1,"1310":1,"1311":1,"1324":1,"1339":1,"1350":2,"1359":4,"1380":1,"1395":2,"1396":4,"1436":2}}],["distinguish",{"3":{"158":1,"343":1,"612":1,"1286":1,"1300":4,"1301":1,"1311":2,"1320":1,"1323":3,"1324":3,"1359":5,"1395":4,"1396":4,"1402":1,"1415":1,"1417":1,"1436":8,"1438":1,"1498":1,"1630":1,"1982":1}}],["distinguished",{"3":{"111":1,"1270":1,"1342":1,"1350":1,"1359":1,"1396":3,"1556":1,"1637":1}}],["distinguishes",{"3":{"10":1,"536":1,"549":1,"676":1,"700":1,"758":1,"803":1,"805":1,"881":1,"922":1,"1237":1,"1259":1,"1265":1,"1286":2,"1300":2,"1323":1,"1324":2,"1359":3,"1380":1,"1383":1,"1395":9,"1396":4,"1402":1,"1415":2,"1436":5,"1672":1,"1821":1}}],["distincterrorcodecount",{"3":{"1436":3}}],["distinctcodecount",{"3":{"1436":2}}],["distincts",{"3":{"1359":1}}],["distinctness",{"3":{"1286":1}}],["distinctly",{"3":{"1286":1,"1323":3,"1324":1,"1369":1,"1395":1,"1396":1,"1939":1}}],["distinctby",{"3":{"1271":1,"1395":2,"1830":1}}],["distinctive",{"3":{"1247":1,"1350":2,"1395":1,"1396":1,"1436":2}}],["distinctions",{"3":{"1396":4}}],["distinction",{"3":{"0":2,"136":1,"187":1,"691":1,"837":1,"855":1,"882":1,"906":1,"1225":1,"1247":1,"1249":1,"1259":3,"1270":1,"1286":5,"1300":4,"1309":3,"1323":1,"1324":2,"1339":2,"1348":1,"1350":4,"1359":3,"1380":2,"1395":2,"1396":4,"1402":1,"1415":2,"1417":4,"1422":1,"1428":1,"1430":1,"1436":8,"1456":2,"1460":1,"1476":1,"1489":1,"1577":1,"1651":1,"1956":1,"1982":1,"2045":1}}],["distinct",{"0":{"1206":1},"2":{"647":1},"3":{"0":7,"19":1,"92":1,"135":1,"157":1,"162":2,"166":2,"174":2,"225":1,"229":1,"242":1,"248":1,"284":1,"312":1,"340":1,"346":2,"358":1,"359":1,"470":1,"472":1,"587":1,"607":1,"610":1,"612":1,"618":1,"619":1,"647":1,"651":1,"690":1,"699":1,"741":1,"828":1,"1132":1,"1134":1,"1191":2,"1192":1,"1196":1,"1197":1,"1200":1,"1202":1,"1204":1,"1206":1,"1231":1,"1237":3,"1241":2,"1242":1,"1247":3,"1259":2,"1261":1,"1271":2,"1279":1,"1286":16,"1300":6,"1301":2,"1302":1,"1309":5,"1310":5,"1311":6,"1323":6,"1324":12,"1325":1,"1332":1,"1339":3,"1347":1,"1350":5,"1351":1,"1359":29,"1369":2,"1380":3,"1395":9,"1396":24,"1397":1,"1402":4,"1406":1,"1415":3,"1416":2,"1417":9,"1431":1,"1436":29,"1438":2,"1443":1,"1467":2,"1487":1,"1496":32,"1499":1,"1531":1,"1543":1,"1631":2,"1652":1,"1665":1,"1670":1,"1685":1,"1702":1,"1707":1,"1747":1,"1765":1,"1865":1,"1870":1,"1900":1,"1933":1,"1989":2,"2047":1,"2143":1,"2198":1}}],["distrust",{"3":{"940":1}}],["distro",{"3":{"395":1,"397":1,"402":1,"1333":2,"1339":5,"1438":1,"1443":4,"1446":1,"1467":3,"1668":1,"2011":2,"2156":1,"2158":1,"2159":1,"2162":2}}],["distributing",{"3":{"2029":1}}],["distributions",{"3":{"1350":2}}],["distribution",{"0":{"1197":1},"3":{"33":1,"530":1,"598":1,"1300":1,"1311":1,"1350":4,"1359":12,"1376":1,"1380":1,"1390":1,"1395":2,"1416":1,"1425":1,"1427":2,"1535":1,"1585":1,"1632":1,"1640":1,"1894":1}}],["distributedapplicationbuilder",{"3":{"1438":1}}],["distributedapplication",{"2":{"1430":1,"2057":1},"3":{"1339":1,"1430":1,"1489":1,"2057":1}}],["distributedapplicationtestingbuilder",{"2":{"912":1,"913":2,"914":1,"1066":1,"1067":1,"1069":1,"1212":1,"1612":1},"3":{"0":2,"912":1,"913":2,"914":1,"1066":1,"1067":1,"1069":1,"1212":1,"1612":1}}],["distributedcontextpropagator",{"3":{"1324":1}}],["distributedcacheentryoptions",{"2":{"243":1,"254":1},"3":{"243":1,"254":1,"1301":5}}],["distributedcache",{"3":{"0":1,"1091":1}}],["distributedcacheservicetests",{"3":{"1199":1,"1207":3,"1301":2,"1496":1}}],["distributedcacheserviceredistests",{"2":{"1301":1},"3":{"1199":1,"1207":2,"1301":3,"1438":2,"1496":1}}],["distributedcacheservice",{"2":{"245":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"256":1,"257":1,"259":1,"261":1,"285":1,"286":1,"731":1,"733":1,"736":1,"1442":1,"1453":1,"1486":1,"1916":1,"1923":1},"3":{"0":1,"243":2,"245":4,"248":2,"249":1,"250":1,"251":3,"252":2,"253":1,"254":3,"256":4,"257":2,"259":2,"261":1,"285":1,"286":1,"731":1,"732":1,"733":3,"736":1,"1199":8,"1203":1,"1207":2,"1229":4,"1300":1,"1301":63,"1323":2,"1339":2,"1438":2,"1442":1,"1453":1,"1467":1,"1486":1,"1487":1,"1496":1,"1577":2,"1916":2,"1923":1}}],["distributedlock",{"3":{"1300":1,"1577":1}}],["distributed",{"0":{"2009":1},"1":{"2004":1,"2005":1,"2006":1,"2007":1,"2008":1,"2009":1,"2010":1,"2011":1,"2012":1,"2013":1,"2014":1,"2015":1},"2":{"182":1,"2002":1},"3":{"0":5,"25":1,"61":1,"135":1,"157":2,"158":1,"159":1,"162":1,"173":1,"177":1,"178":5,"182":2,"235":2,"241":1,"243":5,"244":2,"245":4,"246":1,"253":1,"259":1,"261":1,"282":1,"283":3,"398":2,"461":1,"516":1,"517":1,"520":1,"535":1,"538":1,"732":1,"788":1,"792":1,"794":1,"852":1,"995":1,"1000":1,"1011":1,"1012":1,"1091":1,"1202":1,"1203":1,"1212":1,"1213":2,"1223":1,"1229":3,"1257":1,"1259":4,"1270":2,"1286":1,"1294":1,"1300":8,"1301":26,"1311":20,"1312":2,"1320":1,"1323":4,"1325":1,"1332":2,"1339":6,"1358":1,"1359":4,"1369":2,"1379":1,"1421":1,"1427":3,"1438":2,"1440":1,"1441":1,"1442":2,"1443":1,"1454":1,"1465":1,"1467":3,"1496":2,"1526":1,"1534":2,"1544":2,"1547":1,"1550":1,"1577":2,"1586":1,"1639":1,"1656":1,"1666":2,"1668":2,"1675":1,"1789":1,"1792":1,"1845":1,"1846":1,"1847":1,"1849":2,"1852":1,"1853":1,"1894":1,"1909":1,"1910":1,"1912":2,"1915":1,"1916":6,"1917":1,"1920":2,"1923":3,"1934":1,"1947":1,"2002":5,"2003":1,"2004":3,"2006":1,"2008":1,"2011":1,"2015":1,"2020":1,"2028":1,"2069":1,"2157":1,"2162":1,"2170":1,"2171":1,"2195":1,"2211":1}}],["disprove",{"3":{"2241":1}}],["dispensation",{"3":{"1534":1}}],["disputed",{"3":{"1396":1}}],["displacing",{"3":{"1311":1,"1323":1,"1975":1}}],["displace",{"3":{"1359":1}}],["displaces",{"3":{"1311":1,"1417":1}}],["displaced",{"3":{"624":2,"1184":1,"1396":1,"1475":1,"1922":1}}],["displaying",{"3":{"1324":1,"1436":1}}],["displaynameunavailable",{"3":{"1396":1}}],["displaynamemaxlength",{"3":{"1396":5}}],["displayname",{"3":{"690":1,"1300":1,"1339":1,"1359":1,"1395":1,"1396":25,"1410":1,"1415":1,"1436":1}}],["displaystatus",{"3":{"1324":1}}],["displays",{"3":{"690":1,"1350":2,"1437":1,"1631":1,"1639":1,"1666":1}}],["displayed",{"3":{"135":1,"265":1,"1324":3,"1350":1,"1359":2,"1395":5,"1402":1,"1629":1,"1630":7,"1631":5,"1637":1}}],["display",{"0":{"1387":1},"1":{"679":1,"680":1,"681":1,"682":1,"683":1,"684":1,"685":1,"686":1},"3":{"0":2,"135":1,"265":2,"402":1,"679":1,"682":2,"683":1,"688":1,"690":2,"691":1,"897":1,"963":1,"964":1,"990":1,"1027":1,"1028":1,"1212":1,"1235":1,"1237":2,"1247":1,"1278":2,"1286":3,"1293":1,"1295":1,"1300":3,"1311":6,"1314":1,"1323":2,"1324":12,"1333":1,"1339":7,"1342":1,"1344":2,"1350":36,"1353":1,"1359":30,"1369":2,"1380":1,"1387":1,"1395":52,"1396":35,"1402":11,"1415":3,"1416":1,"1417":2,"1427":1,"1436":3,"1438":2,"1443":1,"1488":1,"1577":1,"1591":1,"1630":11,"1631":6,"1633":1,"1637":2,"1639":3,"1640":4,"1641":3,"1656":1,"1669":1,"1748":2,"1750":3,"1764":2,"1765":2,"1776":1,"2003":1,"2077":1,"2096":1,"2152":2,"2234":1}}],["disposables",{"3":{"1324":1,"1396":1}}],["disposable",{"3":{"1247":2,"1273":1,"1286":1,"1300":2,"1323":2,"1324":3,"1339":2,"1396":8,"1400":1,"1415":2,"1417":2,"1436":2}}],["disposal",{"3":{"572":1,"881":1,"916":1,"996":1,"998":1,"1270":2,"1286":7,"1323":2,"1324":22,"1389":1,"1395":32,"1396":10,"1402":11,"1415":1,"1417":3,"1436":4,"1438":2,"1488":2,"1490":2,"1849":1,"1897":1,"2056":1,"2074":1}}],["disposing",{"3":{"996":1,"1270":2,"1286":1,"1300":1,"1323":3,"1324":9,"1339":1,"1395":4,"1396":5,"1417":2,"1425":1,"1427":2,"1436":1,"1668":1,"2179":1}}],["dispositiontype",{"3":{"1286":1}}],["disposition",{"3":{"0":1,"443":1,"725":3,"741":2,"1116":2,"1285":1,"1286":7,"1311":2,"1350":1,"1357":1,"1417":1,"1631":1,"2128":1}}],["disposehostsasync",{"3":{"1436":1}}],["disposehandler",{"3":{"1324":1,"1339":2,"1436":3}}],["disposetrackingresponse",{"3":{"1199":2,"1207":1}}],["disposes",{"3":{"401":1,"1259":2,"1286":3,"1300":1,"1302":1,"1311":1,"1323":1,"1324":18,"1339":3,"1395":6,"1396":4,"1402":10,"1415":4,"1417":8,"1427":2,"1429":1,"1436":8,"1438":1,"1488":3,"1491":1,"1938":1,"2057":1,"2072":1}}],["disposed",{"3":{"109":1,"524":1,"1259":2,"1270":4,"1273":1,"1274":1,"1286":4,"1288":1,"1300":2,"1309":1,"1323":3,"1324":42,"1339":3,"1359":1,"1395":16,"1396":9,"1415":1,"1417":1,"1425":1,"1427":1,"1432":1,"1436":3,"1526":1,"1577":3,"1702":1,"2074":2,"2076":1,"2081":1,"2179":1}}],["disposeasync",{"2":{"1491":2},"3":{"0":1,"135":1,"1067":1,"1286":3,"1323":2,"1324":8,"1339":1,"1396":4,"1402":5,"1417":2,"1429":2,"1436":9,"1488":3,"1491":2}}],["dispose",{"3":{"0":1,"135":1,"401":1,"996":1,"1246":1,"1247":2,"1259":3,"1286":8,"1300":5,"1311":1,"1323":2,"1324":41,"1339":5,"1384":1,"1395":24,"1396":15,"1415":1,"1417":14,"1427":2,"1432":1,"1436":6,"1442":1,"1577":2,"1591":2,"1611":1,"2072":1}}],["dispatchchanneleventasync",{"3":{"1324":3}}],["dispatchcache",{"3":{"1259":1,"1323":1}}],["dispatchable",{"3":{"1359":4}}],["dispatchandfinalizeasync",{"2":{"1274":1},"3":{"1274":1,"1286":3}}],["dispatchasync",{"3":{"1259":6,"1286":2,"1436":2}}],["dispatchtohandlersasync",{"3":{"1259":1}}],["dispatchmessagesasync",{"2":{"2167":1},"3":{"1259":2,"2167":1}}],["dispatchfailed",{"2":{"897":1},"3":{"897":1,"1247":5}}],["dispatchlaghistogram",{"3":{"707":1,"1259":3}}],["dispatching",{"3":{"18":1,"20":1,"58":1,"230":1,"767":1,"881":1,"1252":1,"1255":1,"1257":1,"1259":7,"1274":1,"1278":1,"1286":2,"1323":1,"1345":1,"1350":1,"1359":1,"1375":1,"1380":4,"1396":1,"1402":1,"1436":1,"1438":1,"1489":1,"1577":1,"1841":2}}],["dispatched",{"3":{"15":1,"16":1,"17":1,"18":3,"19":1,"20":1,"21":1,"26":1,"230":1,"291":1,"642":1,"692":1,"702":1,"781":1,"786":1,"1140":1,"1237":2,"1249":1,"1251":1,"1252":3,"1256":1,"1259":16,"1271":1,"1286":5,"1289":1,"1300":1,"1309":4,"1350":15,"1352":1,"1359":13,"1395":1,"1396":7,"1402":21,"1415":9,"1508":2,"1577":1,"1631":1,"1634":1,"1637":1,"1638":1,"1639":1,"1651":1,"1677":1,"1719":1,"1721":1,"1789":1,"1838":1,"1861":1}}],["dispatches",{"0":{"1842":1},"2":{"1370":1},"3":{"0":1,"15":1,"24":1,"166":1,"225":2,"230":1,"265":1,"536":1,"538":1,"846":1,"930":1,"931":1,"1011":1,"1042":1,"1233":1,"1237":2,"1247":1,"1252":1,"1257":2,"1259":20,"1286":7,"1311":8,"1312":1,"1317":1,"1323":1,"1324":3,"1344":1,"1350":1,"1359":6,"1370":1,"1375":1,"1380":33,"1395":4,"1396":9,"1402":2,"1408":1,"1415":5,"1416":1,"1431":1,"1436":4,"1508":1,"1783":1,"1815":1,"2027":1,"2093":1,"2139":1,"2158":1,"2165":1,"2167":3,"2190":1}}],["dispatcher",{"3":{"0":1,"81":1,"135":1,"418":1,"420":1,"428":1,"538":1,"784":1,"1042":1,"1140":1,"1192":1,"1202":1,"1203":1,"1237":1,"1241":1,"1247":2,"1248":1,"1252":1,"1256":1,"1257":1,"1259":19,"1262":1,"1270":1,"1274":1,"1286":6,"1309":1,"1311":3,"1396":3,"1402":2,"1415":1,"1416":9,"1417":11,"1436":3,"1487":2,"1526":1,"1539":1,"1543":1,"1577":1,"1665":1,"1669":1,"1889":1,"2123":1,"2167":2,"2170":1,"2184":1,"2188":1}}],["dispatch",{"0":{"1247":1,"1252":1,"1508":1},"1":{"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"1248":1,"1249":1,"1250":1,"1251":1,"1252":1,"1253":1,"1254":1,"1255":1,"1256":1,"1257":1,"1258":1,"1259":1},"2":{"24":1,"400":1,"626":1,"766":1,"768":1,"897":1,"899":1,"901":1,"1399":1,"1456":1,"1457":1,"1458":1,"1474":1,"1475":2,"1589":1,"1599":1,"1919":1,"1946":1,"2035":1,"2158":1},"3":{"0":14,"14":1,"15":2,"16":2,"17":3,"18":3,"19":1,"20":6,"21":4,"22":1,"24":3,"25":1,"26":2,"27":3,"64":1,"71":1,"113":1,"115":1,"120":3,"168":1,"171":1,"196":1,"200":1,"229":1,"314":1,"383":1,"400":1,"518":1,"626":5,"639":1,"692":1,"707":1,"766":1,"768":1,"819":1,"845":1,"846":1,"863":1,"881":5,"897":2,"899":1,"901":1,"931":2,"933":2,"935":1,"987":1,"988":3,"989":1,"992":1,"1010":1,"1011":1,"1013":2,"1075":1,"1076":1,"1192":2,"1202":1,"1203":1,"1212":3,"1230":1,"1233":3,"1237":7,"1241":2,"1247":6,"1248":2,"1249":1,"1251":2,"1254":1,"1255":1,"1257":2,"1259":44,"1263":1,"1270":7,"1274":5,"1278":1,"1286":24,"1300":3,"1311":5,"1323":6,"1324":6,"1345":1,"1350":3,"1359":4,"1369":3,"1375":1,"1380":4,"1395":5,"1396":18,"1399":2,"1402":7,"1406":1,"1412":1,"1415":8,"1417":5,"1436":9,"1438":2,"1443":1,"1446":1,"1452":1,"1455":8,"1456":6,"1457":1,"1458":1,"1460":10,"1473":1,"1474":1,"1475":10,"1483":1,"1490":2,"1492":3,"1496":2,"1498":1,"1508":1,"1524":1,"1526":4,"1531":1,"1534":1,"1538":1,"1543":1,"1571":1,"1577":2,"1582":1,"1583":1,"1589":1,"1591":4,"1596":2,"1599":1,"1600":2,"1611":2,"1634":1,"1638":1,"1662":1,"1665":3,"1721":1,"1749":1,"1838":3,"1840":2,"1842":1,"1846":3,"1851":1,"1919":1,"1944":1,"1946":1,"1950":1,"2007":1,"2021":1,"2033":1,"2035":1,"2076":1,"2158":3,"2161":1,"2167":1,"2223":1,"2234":2}}],["douglasville",{"3":{"2246":1}}],["douglas",{"3":{"2222":1}}],["doubly",{"3":{"1161":1,"1417":1,"1455":1,"1526":1,"1591":1}}],["doubling",{"3":{"178":1,"390":1,"741":1,"1270":1,"1311":1,"1324":3,"1350":1,"1396":1,"1417":1,"1496":1}}],["doublebooked",{"3":{"1359":1,"1436":1}}],["doublebookederror",{"3":{"1359":2}}],["doubled",{"0":{"141":1},"3":{"0":1,"125":1,"551":1,"556":1,"559":2,"982":1,"1214":1,"1311":1,"1359":1,"1489":1,"1494":1,"2044":1}}],["doubles",{"3":{"0":1,"195":1,"282":1,"782":2,"838":1,"848":1,"875":1,"954":1,"955":1,"1060":1,"1237":1,"1269":2,"1270":3,"1286":1,"1300":3,"1311":2,"1318":1,"1323":2,"1324":3,"1339":1,"1350":1,"1359":3,"1369":1,"1395":2,"1396":1,"1400":1,"1402":1,"1403":1,"1436":5,"1437":2,"1459":1,"1467":1,"1488":2,"1496":2,"1651":1,"1654":1,"1660":1,"1671":1,"1673":1,"1932":1,"1942":1,"1965":1,"2056":1}}],["double",{"0":{"2078":1},"3":{"0":8,"20":1,"122":1,"156":2,"157":2,"160":1,"195":1,"201":1,"379":1,"493":1,"494":1,"495":1,"497":2,"501":1,"502":1,"517":1,"536":2,"538":1,"556":2,"557":2,"558":1,"647":1,"690":1,"692":1,"733":1,"743":2,"827":1,"829":1,"905":1,"953":1,"954":3,"955":1,"956":1,"960":1,"997":1,"1042":1,"1174":1,"1175":1,"1212":1,"1231":1,"1237":2,"1247":1,"1255":1,"1259":2,"1265":1,"1267":1,"1270":11,"1271":1,"1286":14,"1288":1,"1296":1,"1298":1,"1300":12,"1301":4,"1309":1,"1311":13,"1312":2,"1323":10,"1324":14,"1335":1,"1339":5,"1350":4,"1352":1,"1359":16,"1369":3,"1380":2,"1395":1,"1396":5,"1402":3,"1412":1,"1415":2,"1417":8,"1427":1,"1429":1,"1432":2,"1436":20,"1438":3,"1467":1,"1488":2,"1494":1,"1496":1,"1526":1,"1534":3,"1561":2,"1591":1,"1667":1,"1668":1,"1671":1,"1749":1,"1810":2,"1841":1,"1906":1,"1909":1,"1911":1,"1912":1,"1915":1,"1917":1,"1984":1,"1985":1,"2062":1,"2167":1,"2169":1,"2234":1}}],["dodge",{"3":{"1801":1,"2188":1}}],["dollar",{"3":{"1534":1}}],["dollars",{"3":{"1324":1,"1457":1}}],["dogfooding",{"3":{"1487":1,"1488":1}}],["dogfoods",{"3":{"572":1,"707":1,"715":1}}],["doasync",{"3":{"1436":1}}],["doomed",{"3":{"1286":1,"1324":2,"1396":1,"1417":1,"1438":1}}],["doors",{"3":{"1350":1,"1359":1,"2068":1}}],["door",{"3":{"0":1,"443":1,"544":1,"689":4,"690":1,"691":2,"827":1,"1115":1,"1123":1,"1125":1,"1132":1,"1133":1,"1134":1,"1212":1,"1237":1,"1247":1,"1300":1,"1311":1,"1339":1,"1350":1,"1359":16,"1393":1,"1395":1,"1396":27,"1402":1,"1415":1,"1416":1,"1467":1,"1627":2,"1629":1,"1631":2,"1701":1,"1780":1,"1783":1,"1990":2,"2001":1,"2027":1,"2068":2,"2071":1,"2092":1,"2139":1,"2141":1}}],["dormant",{"3":{"691":1,"1087":1,"1264":1,"1359":1,"1396":6,"1401":1,"1402":1,"1417":2,"1524":1,"1526":2,"1534":1,"1823":1,"1860":1}}],["dozens",{"3":{"1005":1,"1124":1,"1286":1,"1313":1,"1352":1,"1359":1,"1395":2,"1396":1,"1436":1,"1958":1,"1986":1,"2081":1}}],["dozen",{"3":{"527":1,"673":1,"1035":1,"1314":1,"1324":1,"1339":1,"1353":1,"1395":3,"1396":3,"1401":2,"1402":2,"1436":2,"1828":1,"1880":1,"2204":1}}],["dominant",{"3":{"1229":1,"1361":1,"1456":1,"1490":1,"1496":3,"1505":1,"1517":1}}],["dominates",{"3":{"1247":1,"1496":1,"1677":1}}],["dominated",{"3":{"1067":1,"1287":1,"1395":1,"1455":2,"1492":2}}],["dominate",{"3":{"396":1,"1259":1,"1286":1,"1339":1,"1443":1,"1467":1,"1677":1,"1841":1,"2011":1,"2159":1}}],["dom",{"3":{"506":2,"507":1,"508":1,"1187":1,"1324":8,"1395":1,"1416":1,"1417":1,"1432":1,"1436":6,"1456":1,"1488":1,"1531":1,"2075":1,"2081":1}}],["domainpurity",{"3":{"1576":1,"1577":1}}],["domainpuritytests",{"2":{"1525":1,"2050":1},"3":{"1199":2,"1207":4,"1436":13,"1489":5,"1493":1,"1525":1,"1526":1,"1576":1,"1577":1,"1591":1,"1600":1,"2044":1,"2050":1}}],["domainpuritytestsbase",{"2":{"2043":1,"2106":1,"2110":1},"3":{"1199":3,"1207":2,"1431":1,"1436":9,"1489":1,"1654":1,"2043":1,"2106":1,"2110":1}}],["domainorinfrastructure",{"3":{"1436":1}}],["domainfactories",{"3":{"1436":2,"1489":1}}],["domainfactoriesreturnresult",{"2":{"657":1,"1586":1},"3":{"657":1,"1431":1,"1436":1,"1577":1,"1586":1}}],["domainassemblylocations",{"3":{"1436":1}}],["domainaggregaterootshavenopublicconstructors",{"2":{"1577":1},"3":{"1436":1,"1577":1}}],["domainandapplicationdonotreadtheclock",{"2":{"1161":1},"3":{"1161":1,"1436":6}}],["domainandapplication",{"2":{"1161":1,"1436":1},"3":{"1161":1,"1436":2}}],["domaindoesnotdependonapplication",{"3":{"1436":1}}],["domainindex",{"3":{"1300":1}}],["domaininvariantviolationexception",{"2":{"109":1,"881":1,"1217":1,"1226":1,"1229":1,"1806":1},"3":{"0":2,"109":1,"881":1,"1199":4,"1203":1,"1207":2,"1217":1,"1226":3,"1229":7,"1300":1,"1324":1,"1806":1}}],["domainhelpertests",{"3":{"1199":1,"1207":2,"1237":2}}],["domainhelper",{"3":{"980":1,"982":1,"1199":1,"1203":1,"1207":2,"1208":1,"1214":1,"1230":2,"1236":7,"1237":7,"1395":11,"1396":3}}],["domainthrowfixtures",{"3":{"1207":24,"1436":27}}],["domainthrowfitnesstests",{"3":{"1199":1,"1207":3,"1436":27,"1489":1}}],["domainthrowtests",{"3":{"1199":1,"1207":2,"1436":6,"1489":1}}],["domainthrowtestsbase",{"3":{"1199":2,"1207":2,"1436":7}}],["domainthrows",{"3":{"980":1,"982":1,"1207":1,"1436":10,"1489":1}}],["domainthrowsonlyargumentguards",{"2":{"980":1,"983":1},"3":{"980":1,"983":1,"1436":7}}],["domaintypes",{"3":{"81":1,"1436":2}}],["domains",{"3":{"418":1,"420":1,"422":1,"1168":3,"1416":1,"1436":4,"1481":2,"1599":1,"1629":1,"2111":2,"2112":1,"2116":1}}],["domainentityproperties",{"3":{"1436":1}}],["domainentitystate",{"2":{"963":1,"968":1,"1233":1,"1249":1,"1340":1,"1355":1,"1398":1,"1685":1},"3":{"0":2,"690":1,"782":6,"963":2,"964":2,"968":1,"1199":75,"1203":1,"1207":2,"1212":1,"1230":1,"1233":2,"1237":3,"1249":1,"1259":6,"1300":1,"1340":1,"1345":1,"1350":38,"1355":1,"1359":23,"1396":18,"1398":1,"1402":15,"1631":3,"1633":1,"1634":15,"1639":1,"1665":1,"1685":1,"1769":1}}],["domainentities",{"3":{"1436":2}}],["domainexposesaggregateroots",{"3":{"1431":1,"1577":1}}],["domainexceptiontests",{"3":{"1199":1,"1207":3,"1229":1}}],["domainexception",{"2":{"1217":1,"1226":1,"1640":1},"3":{"109":1,"1199":6,"1203":1,"1207":2,"1217":1,"1226":6,"1229":12,"1311":4,"1436":1,"1640":2}}],["domainexceptionhandler",{"2":{"1226":1,"1927":1},"3":{"109":2,"1199":4,"1203":1,"1207":2,"1226":1,"1229":6,"1311":9,"1774":1,"1927":1}}],["domaineventcaptureexclusiontests",{"3":{"1199":1,"1207":6,"1286":2,"1438":2}}],["domaineventoccurrencestamp",{"2":{"1161":1},"3":{"1161":1}}],["domaineventsavefixtures",{"3":{"1207":27,"1436":34}}],["domaineventsavechangesinterceptoroutboxdisabledtests",{"3":{"1199":1,"1207":2,"1286":2}}],["domaineventsavechangesinterceptoroutboxroutingtests",{"3":{"1199":2,"1207":9,"1237":1,"1286":2}}],["domaineventsavechangesinterceptortests",{"3":{"1199":1,"1207":6,"1286":2}}],["domaineventsavechangesinterceptor",{"2":{"20":1,"120":1,"540":1,"715":1,"931":1,"1201":1,"1233":1,"1251":1,"1274":1,"1286":1},"3":{"0":1,"20":1,"26":1,"120":1,"166":1,"536":1,"538":1,"540":1,"715":3,"931":2,"988":2,"1175":1,"1198":1,"1199":59,"1201":1,"1203":1,"1207":5,"1233":6,"1237":6,"1251":4,"1252":3,"1253":1,"1254":1,"1259":17,"1270":1,"1274":3,"1280":1,"1286":32,"1323":1,"1350":2,"1436":7,"1496":4,"1498":1,"2167":2,"2170":1}}],["domainevents",{"2":{"1161":1,"1207":2,"1350":6,"1396":1,"1402":1,"1415":1},"3":{"81":1,"255":1,"536":2,"782":19,"784":2,"1026":1,"1160":1,"1161":1,"1203":33,"1207":98,"1231":1,"1237":5,"1247":1,"1249":4,"1252":2,"1259":20,"1270":1,"1282":1,"1286":6,"1309":3,"1342":1,"1345":5,"1350":45,"1359":2,"1369":1,"1396":10,"1402":9,"1415":5,"1436":8,"1438":2,"1496":1,"1577":2,"1686":1,"1769":1,"1810":1,"1856":1}}],["domainevent",{"3":{"26":2,"782":1,"1259":2,"1286":1,"1396":3,"2191":1}}],["domaineventhandlers",{"3":{"230":1,"390":1,"522":2,"545":2,"690":1,"782":5,"897":3,"1026":1,"1100":2,"1203":5,"1207":28,"1237":2,"1247":4,"1259":1,"1309":1,"1350":2,"1355":1,"1359":2,"1396":8,"1399":2,"1402":5,"1436":3,"1438":2,"1496":2,"1526":1,"1651":1,"1765":3}}],["domaineventhandlersavefitnesstests",{"3":{"1199":1,"1207":3,"1436":20,"1489":1}}],["domaineventhandlersavetests",{"3":{"27":2,"1199":1,"1207":2,"1436":6,"1489":1}}],["domaineventhandlersavetestsbase",{"3":{"17":2,"27":1,"1199":2,"1207":2,"1436":9}}],["domaineventhandlersaves",{"3":{"17":1,"27":1,"1207":1,"1436":13,"1489":1}}],["domaineventhandlersdonotsave",{"2":{"17":1,"27":1},"3":{"17":1,"27":1,"1436":7}}],["domaineventdispatchertests",{"3":{"1199":1,"1207":7}}],["domaineventdispatcheradditionaltests",{"3":{"1199":1,"1207":13}}],["domaineventdispatcher",{"2":{"17":1,"846":1,"848":1,"1252":1,"1269":1,"1651":1},"3":{"0":1,"17":1,"538":1,"846":1,"848":1,"1140":1,"1199":9,"1203":1,"1207":2,"1247":2,"1252":4,"1259":36,"1269":1,"1270":3,"1323":3,"1350":4,"1359":1,"1396":1,"1436":2,"1438":1,"1577":1,"1651":1,"2170":1}}],["domain",{"0":{"1233":1,"1345":1,"1346":1,"1355":1,"1541":1,"1630":1,"1687":1,"1769":1,"1832":1,"2093":1,"2177":1},"1":{"654":1,"655":1,"656":1,"657":1,"658":1,"659":1,"660":1,"661":1,"1158":1,"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1,"1230":1,"1231":1,"1232":1,"1233":1,"1234":1,"1235":1,"1236":1,"1237":1,"1248":1,"1249":1,"1250":1,"1251":1,"1252":1,"1253":1,"1254":1,"1255":1,"1256":1,"1257":1,"1258":1,"1259":1,"1340":1,"1341":1,"1342":1,"1343":1,"1344":1,"1345":1,"1346":1,"1347":1,"1348":1,"1349":1,"1350":1,"1808":1,"1809":1,"1810":1,"1811":1,"1812":1},"2":{"39":3,"146":1,"1006":1,"1161":1,"1207":2,"1230":1,"1236":1,"1237":1,"1321":1,"1341":3,"1350":6,"1396":2,"1402":2,"1404":1,"1415":1,"1436":1,"1650":2,"1660":1,"1781":1,"1931":1,"2064":1},"3":{"0":23,"4":1,"15":1,"16":1,"17":2,"18":1,"19":1,"20":1,"24":2,"26":1,"27":2,"39":11,"40":1,"43":3,"52":1,"53":1,"54":2,"58":2,"59":2,"60":2,"62":1,"76":1,"80":3,"81":7,"108":1,"109":4,"110":2,"115":1,"117":1,"120":1,"124":1,"128":1,"131":2,"139":1,"146":1,"150":1,"156":2,"165":1,"167":1,"168":1,"185":1,"194":1,"224":1,"225":3,"226":1,"230":1,"255":1,"265":2,"318":1,"332":1,"341":5,"342":2,"350":1,"353":1,"359":1,"360":1,"370":1,"383":1,"391":1,"422":2,"469":2,"470":4,"473":1,"475":2,"476":3,"477":2,"497":5,"499":3,"502":2,"518":2,"522":2,"536":7,"537":1,"545":3,"546":1,"549":5,"556":1,"558":1,"572":4,"576":1,"584":1,"591":1,"592":1,"593":1,"634":1,"640":1,"654":1,"655":1,"656":1,"657":11,"658":1,"659":1,"690":5,"692":1,"698":3,"707":1,"715":2,"718":1,"781":1,"782":24,"783":1,"784":2,"785":1,"791":1,"798":2,"799":2,"802":1,"809":1,"810":1,"846":2,"881":1,"882":1,"883":1,"888":1,"897":1,"900":1,"904":1,"905":1,"906":1,"921":1,"922":1,"926":1,"930":1,"933":1,"939":1,"954":1,"963":3,"966":1,"971":1,"980":4,"982":2,"1004":8,"1006":1,"1018":1,"1024":1,"1025":2,"1026":4,"1027":2,"1029":1,"1033":1,"1034":1,"1037":1,"1041":1,"1049":1,"1050":5,"1051":1,"1052":1,"1054":1,"1055":1,"1058":1,"1059":4,"1074":2,"1078":1,"1082":1,"1083":4,"1085":1,"1091":3,"1093":1,"1100":1,"1104":1,"1116":4,"1140":4,"1141":2,"1142":1,"1147":1,"1150":1,"1158":1,"1160":3,"1161":14,"1162":1,"1168":26,"1169":1,"1170":2,"1171":1,"1183":1,"1185":1,"1187":2,"1191":1,"1192":5,"1194":2,"1198":18,"1199":252,"1200":1,"1201":4,"1202":8,"1203":151,"1206":8,"1207":883,"1208":2,"1211":5,"1212":15,"1213":1,"1214":2,"1216":1,"1217":1,"1220":1,"1224":1,"1226":1,"1229":11,"1230":6,"1231":10,"1232":4,"1233":5,"1234":3,"1235":1,"1236":6,"1237":160,"1238":2,"1239":9,"1240":1,"1247":69,"1248":2,"1249":14,"1252":2,"1257":2,"1259":63,"1262":2,"1263":1,"1265":3,"1270":19,"1271":25,"1272":2,"1274":2,"1275":1,"1278":1,"1280":1,"1281":1,"1285":1,"1286":97,"1290":1,"1291":5,"1293":1,"1295":1,"1297":1,"1300":71,"1302":1,"1303":6,"1304":1,"1305":2,"1306":2,"1309":63,"1310":25,"1311":41,"1312":8,"1313":1,"1316":1,"1319":2,"1321":1,"1323":38,"1324":12,"1339":1,"1340":6,"1341":13,"1342":12,"1343":3,"1344":16,"1345":9,"1346":4,"1347":1,"1349":2,"1350":365,"1351":3,"1352":3,"1353":2,"1354":1,"1355":4,"1356":1,"1358":2,"1359":504,"1360":4,"1361":3,"1362":1,"1363":1,"1369":34,"1370":1,"1375":1,"1377":1,"1378":1,"1379":1,"1380":28,"1395":18,"1396":176,"1397":2,"1398":3,"1399":3,"1402":113,"1403":1,"1404":7,"1405":6,"1409":1,"1410":1,"1412":1,"1413":1,"1415":119,"1416":1,"1417":7,"1427":1,"1429":2,"1431":14,"1436":459,"1437":9,"1438":17,"1455":2,"1486":1,"1487":7,"1488":1,"1489":28,"1492":1,"1493":1,"1496":39,"1498":1,"1499":1,"1503":1,"1504":2,"1505":1,"1506":1,"1508":2,"1526":17,"1535":4,"1538":1,"1539":2,"1540":5,"1541":2,"1544":1,"1546":2,"1551":2,"1553":1,"1572":1,"1575":1,"1576":2,"1577":25,"1581":1,"1582":5,"1583":1,"1585":3,"1586":2,"1591":5,"1600":1,"1631":8,"1632":9,"1633":1,"1634":6,"1637":2,"1638":11,"1639":9,"1640":1,"1641":3,"1647":1,"1650":5,"1651":5,"1653":2,"1654":4,"1656":1,"1660":3,"1661":1,"1662":5,"1663":2,"1665":2,"1666":1,"1671":3,"1681":2,"1683":1,"1685":8,"1686":8,"1687":2,"1689":1,"1693":1,"1700":1,"1701":3,"1719":1,"1724":1,"1727":4,"1730":2,"1747":4,"1748":2,"1749":2,"1751":1,"1753":1,"1755":1,"1763":1,"1764":13,"1765":12,"1769":4,"1770":1,"1772":1,"1775":2,"1776":2,"1779":1,"1781":2,"1782":1,"1783":1,"1789":1,"1790":2,"1796":1,"1800":1,"1803":1,"1805":4,"1806":2,"1807":1,"1808":4,"1809":1,"1810":9,"1812":5,"1815":3,"1822":2,"1829":2,"1831":3,"1832":7,"1833":4,"1834":3,"1838":5,"1839":1,"1842":1,"1844":1,"1851":1,"1853":1,"1854":3,"1856":1,"1861":1,"1862":1,"1864":1,"1865":2,"1871":2,"1877":1,"1883":1,"1884":1,"1891":1,"1922":1,"1929":1,"1931":2,"1932":2,"1933":1,"1934":1,"1937":2,"1941":1,"1944":2,"1946":1,"1950":2,"1951":2,"1953":2,"1954":2,"1991":1,"1995":1,"2017":2,"2021":1,"2029":1,"2040":2,"2041":2,"2043":1,"2044":9,"2052":1,"2053":2,"2055":1,"2064":3,"2065":2,"2073":2,"2076":1,"2085":3,"2087":3,"2088":1,"2089":1,"2090":1,"2092":3,"2093":3,"2095":1,"2097":1,"2099":1,"2100":3,"2101":2,"2102":1,"2103":1,"2106":6,"2107":2,"2111":1,"2112":4,"2113":2,"2115":2,"2116":3,"2127":1,"2141":1,"2144":1,"2165":2,"2166":2,"2167":2,"2171":1,"2172":1,"2173":1,"2177":2,"2180":2,"2181":1,"2182":2,"2185":1,"2188":1,"2191":1,"2208":2,"2215":1,"2216":1,"2219":1,"2220":1,"2221":1,"2229":6,"2232":5,"2234":4,"2241":2}}],["dosomething",{"3":{"1415":1}}],["dossier",{"3":{"1300":1}}],["dos",{"3":{"283":3,"1339":1,"2003":1}}],["dots",{"3":{"1116":1,"1285":1,"1286":1,"1311":2}}],["dot",{"3":{"564":1,"1241":1,"1247":1,"1286":1,"1300":1,"1350":1,"1436":2}}],["dotted",{"3":{"265":1,"333":1,"1126":1,"1241":3,"1247":11,"1270":1,"1300":1,"1311":1,"1324":6,"1359":4,"1436":1,"1666":1}}],["dotnetref",{"3":{"1324":2}}],["dotnetobjectreference",{"3":{"1324":7,"1417":3}}],["dotnet",{"2":{"132":1,"135":1,"291":1,"371":1,"372":1,"373":1,"374":1,"451":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"495":1,"527":1,"563":1,"634":1,"635":1,"675":1,"869":1,"906":1,"930":1,"932":1,"938":1,"1004":1,"1044":1,"1066":1,"1190":1,"1325":1,"1439":1,"1526":1,"1606":1,"1646":1,"1648":1,"1652":1,"1655":1,"1657":1,"1661":1,"1681":1,"1682":1,"1688":1,"1690":1,"1693":1,"1704":1,"1717":1,"1718":1,"1719":1,"1726":1,"1729":1,"1730":1,"1740":1,"1787":1,"1793":1,"1807":1,"1812":1,"1827":1,"1846":1,"1853":1,"1862":1,"1868":1,"1877":1,"1886":1,"1892":1,"1899":1,"1905":1,"1912":1,"1924":1,"1930":1,"1941":1,"1950":1,"1959":1,"1965":1,"1972":1,"1979":1,"1985":1,"1998":1,"2003":1,"2004":1,"2005":1,"2029":1,"2039":1,"2061":1,"2082":1,"2089":1,"2091":1,"2100":1,"2103":1,"2109":1,"2110":1,"2117":1,"2125":1,"2130":1,"2135":1,"2141":1,"2148":1,"2155":1,"2171":1,"2194":1,"2195":1,"2205":1,"2212":1,"2213":1},"3":{"0":7,"132":1,"135":2,"140":1,"291":2,"370":2,"371":1,"372":1,"373":4,"374":1,"397":1,"451":1,"483":1,"486":1,"487":1,"488":1,"489":1,"490":3,"491":3,"492":3,"493":4,"495":1,"527":1,"528":2,"563":1,"564":1,"599":1,"626":1,"632":1,"633":6,"634":1,"635":2,"675":1,"696":1,"698":1,"707":1,"715":1,"782":1,"861":1,"868":2,"869":2,"906":1,"914":2,"930":1,"932":1,"938":1,"982":1,"1004":1,"1044":1,"1066":1,"1067":1,"1069":1,"1190":1,"1212":2,"1214":1,"1273":1,"1284":3,"1286":18,"1300":1,"1311":1,"1323":3,"1325":1,"1326":1,"1328":1,"1339":1,"1430":1,"1436":5,"1439":1,"1441":1,"1445":12,"1449":1,"1453":7,"1454":5,"1455":6,"1456":1,"1459":4,"1461":1,"1464":2,"1467":1,"1486":4,"1487":1,"1490":3,"1492":3,"1526":2,"1577":1,"1591":1,"1606":1,"1646":1,"1648":3,"1649":2,"1650":2,"1651":2,"1652":2,"1654":2,"1655":2,"1657":4,"1661":3,"1664":1,"1677":1,"1681":1,"1682":3,"1684":1,"1686":1,"1688":1,"1690":2,"1693":2,"1697":1,"1701":2,"1704":4,"1717":1,"1718":4,"1719":3,"1726":2,"1727":3,"1728":2,"1729":2,"1730":1,"1740":1,"1781":1,"1787":2,"1793":1,"1807":1,"1812":1,"1817":1,"1827":1,"1834":1,"1846":1,"1853":1,"1862":1,"1868":1,"1877":1,"1886":1,"1892":1,"1899":1,"1905":1,"1912":1,"1924":1,"1930":1,"1941":1,"1950":1,"1959":1,"1965":1,"1972":1,"1979":1,"1985":1,"1992":1,"1998":1,"2003":1,"2004":1,"2005":2,"2015":2,"2029":1,"2039":1,"2059":1,"2061":1,"2082":1,"2088":1,"2089":1,"2091":1,"2099":2,"2100":2,"2103":3,"2109":1,"2110":1,"2117":1,"2125":1,"2130":1,"2135":1,"2141":1,"2148":1,"2155":1,"2158":1,"2162":1,"2171":1,"2182":1,"2194":1,"2195":1,"2205":1,"2212":1,"2213":1,"2234":1}}],["doing",{"3":{"72":1,"225":1,"236":1,"237":1,"373":1,"539":2,"549":1,"592":1,"633":1,"698":2,"757":1,"831":1,"867":1,"898":2,"1067":1,"1233":1,"1259":2,"1262":1,"1270":1,"1286":7,"1290":1,"1300":3,"1301":1,"1309":2,"1311":2,"1312":1,"1323":4,"1324":6,"1339":4,"1348":1,"1350":3,"1352":1,"1356":1,"1359":7,"1369":1,"1395":3,"1396":6,"1402":1,"1415":1,"1417":7,"1427":1,"1436":5,"1441":1,"1442":1,"1444":1,"1455":1,"1470":1,"1832":1,"2074":1,"2083":1,"2099":1,"2132":1,"2211":1}}],["donor",{"3":{"1496":1}}],["donotcoverthatpair",{"3":{"1436":1}}],["donotexceedconstructordependencyceiling",{"3":{"1436":21}}],["done",{"1":{"1900":1,"1901":1,"1902":1,"1903":1,"1904":1,"1905":1},"3":{"401":1,"435":1,"526":1,"709":1,"856":1,"857":1,"1124":1,"1237":1,"1239":1,"1270":3,"1286":2,"1304":1,"1309":1,"1310":1,"1311":1,"1318":1,"1324":6,"1339":1,"1359":1,"1395":3,"1402":1,"1417":1,"1436":1,"1496":1,"1529":1,"1531":1,"1575":2,"1589":1,"1596":1,"1611":1,"1641":1,"1651":1,"1664":1,"1701":1,"1728":1,"1779":1,"1840":1,"1879":1,"1899":1,"1900":1,"1935":1,"1937":1,"2001":1,"2099":1,"2103":1,"2131":1,"2171":1,"2196":1,"2210":1}}],["don",{"1":{"1828":1,"1829":1,"1830":1,"1831":1,"1832":1,"1833":1,"1834":1,"2126":1,"2127":1,"2128":1,"2129":1,"2130":1},"3":{"47":1,"1311":1,"1467":1,"1474":1,"1561":1,"1569":1,"1591":1,"1638":1,"1651":1,"1654":1,"1779":2,"1828":1,"1972":1,"2082":1,"2125":1,"2126":1,"2135":1,"2208":1,"2212":1}}],["docresource",{"3":{"1436":1}}],["doc",{"3":{"33":1,"68":2,"98":1,"135":1,"138":1,"139":3,"142":1,"251":1,"256":3,"257":1,"258":1,"322":1,"359":1,"364":1,"448":1,"453":1,"468":2,"476":1,"492":1,"543":1,"625":1,"682":1,"700":1,"751":1,"782":4,"784":1,"801":1,"819":1,"827":1,"837":1,"971":1,"976":1,"988":1,"990":1,"1003":1,"1074":1,"1190":1,"1219":2,"1226":1,"1228":1,"1229":15,"1231":1,"1232":1,"1233":1,"1235":1,"1237":30,"1239":1,"1247":47,"1259":70,"1262":1,"1263":1,"1264":1,"1269":1,"1270":59,"1271":12,"1273":1,"1274":1,"1275":1,"1277":1,"1278":3,"1280":1,"1283":3,"1284":2,"1286":152,"1300":127,"1301":5,"1309":52,"1310":3,"1311":95,"1312":8,"1315":1,"1316":1,"1317":1,"1323":69,"1324":184,"1326":1,"1327":1,"1330":2,"1332":2,"1333":1,"1339":148,"1342":2,"1347":1,"1350":100,"1359":101,"1369":3,"1380":63,"1391":1,"1395":159,"1396":171,"1402":74,"1415":103,"1416":3,"1417":55,"1419":1,"1422":1,"1423":1,"1427":6,"1431":1,"1436":311,"1443":1,"1451":1,"1488":3,"1489":3,"1490":1,"1496":8,"1526":4,"1534":2,"1585":1,"1586":2,"1591":2,"1596":1,"1597":1,"1600":1,"1685":1,"1686":5,"1815":1,"1821":1,"1856":1,"1896":3,"1995":1,"1996":1,"2001":1,"2005":1,"2040":1,"2042":1,"2044":2,"2045":1,"2046":5,"2049":1,"2068":1,"2087":1,"2106":1,"2114":1,"2119":1,"2124":1,"2131":1,"2151":1,"2152":1,"2158":1,"2161":1,"2166":2}}],["docs",{"0":{"1481":1},"3":{"1":2,"70":1,"99":1,"135":1,"140":1,"142":1,"147":2,"324":1,"358":2,"361":1,"362":1,"366":1,"370":1,"422":1,"423":1,"424":1,"425":1,"426":2,"490":1,"491":1,"492":1,"493":1,"495":1,"564":1,"582":1,"590":2,"599":1,"626":2,"756":2,"765":1,"766":1,"773":2,"860":1,"914":1,"1003":1,"1011":1,"1012":3,"1017":1,"1090":2,"1094":1,"1095":1,"1190":1,"1212":2,"1216":2,"1237":2,"1270":3,"1300":9,"1309":1,"1311":3,"1323":3,"1324":23,"1350":5,"1359":13,"1380":7,"1395":9,"1396":9,"1402":3,"1416":1,"1417":5,"1428":1,"1430":2,"1436":10,"1453":6,"1455":4,"1459":1,"1460":1,"1461":1,"1470":1,"1481":2,"1482":1,"1483":1,"1496":2,"1501":1,"1502":1,"1515":1,"1522":1,"1525":1,"1526":8,"1528":1,"1531":1,"1534":1,"1535":1,"1571":3,"1572":1,"1573":1,"1575":1,"1576":2,"1577":15,"1579":1,"1581":1,"1582":3,"1583":1,"1586":2,"1587":1,"1591":2,"1593":1,"1594":1,"1596":1,"1600":1,"1663":1,"1793":2,"1802":1,"1807":1,"1815":1,"1827":2,"1846":1,"1853":1,"1868":1,"1877":1,"1886":1,"1892":2,"1899":1,"1905":1,"1909":2,"1923":1,"1930":1,"1950":1,"1965":1,"1972":1,"1979":1,"1985":1,"1992":1,"1998":1,"2001":2,"2002":2,"2003":2,"2071":1,"2088":2,"2100":2,"2110":1,"2114":1,"2117":1,"2119":1,"2120":1,"2122":1,"2130":1,"2135":1,"2153":1,"2155":1,"2160":1,"2162":1,"2171":1,"2174":1,"2182":1,"2195":1,"2205":1,"2213":1,"2236":1}}],["docx",{"3":{"0":1,"443":1,"1116":2,"1285":1,"1347":1,"1350":1,"1395":1,"1631":1}}],["documentlanguagetests",{"3":{"1199":1,"1207":2,"1438":2}}],["documentformats",{"2":{"1285":1},"3":{"1199":5,"1203":1,"1207":1,"1285":1,"1286":5,"1359":2}}],["documentname",{"3":{"448":1,"1311":2,"2133":1}}],["documentingly",{"3":{"1350":1}}],["documenting",{"3":{"101":1,"251":1,"254":1,"257":1,"332":1,"557":1,"699":1,"805":1,"1247":1,"1286":2,"1300":1,"1311":2,"1323":2,"1324":1,"1339":3,"1380":1,"1396":1,"1496":1,"1552":1,"1591":1,"1659":1,"1991":1}}],["documentation",{"0":{"1571":1,"1674":1,"2046":1},"3":{"69":1,"135":1,"200":3,"230":1,"359":1,"364":2,"365":2,"425":1,"426":2,"459":1,"465":1,"466":1,"472":1,"529":2,"545":1,"547":1,"549":1,"593":1,"627":1,"862":1,"982":1,"986":1,"1006":1,"1011":1,"1012":1,"1067":1,"1070":1,"1092":1,"1108":2,"1124":2,"1133":1,"1161":1,"1216":1,"1221":1,"1229":1,"1237":3,"1247":1,"1270":3,"1271":1,"1286":1,"1300":4,"1309":3,"1311":6,"1312":2,"1322":1,"1323":1,"1324":3,"1339":5,"1350":3,"1352":1,"1359":9,"1369":2,"1395":2,"1396":5,"1415":2,"1428":1,"1436":49,"1447":1,"1453":1,"1457":1,"1459":1,"1486":1,"1489":1,"1492":1,"1493":1,"1496":1,"1499":1,"1571":1,"1582":1,"1585":1,"1591":1,"1592":1,"1601":1,"1686":1,"1796":1,"1941":1,"2015":1,"2046":1,"2048":1,"2057":2,"2144":1,"2146":1,"2165":1,"2167":3,"2168":2,"2169":2,"2176":1,"2177":1,"2179":1,"2180":1,"2182":1,"2191":2,"2198":1,"2204":1,"2235":1}}],["documentcontentsniffertests",{"3":{"1199":1,"1207":2,"1286":1}}],["documentcontentsniffer",{"2":{"443":1,"1116":1,"1285":1,"1357":1},"3":{"0":1,"443":2,"1116":2,"1199":4,"1203":1,"1207":3,"1212":1,"1285":2,"1286":20,"1347":1,"1350":1,"1357":1,"1359":5,"1496":2}}],["documents",{"0":{"452":1,"577":1},"2":{"452":1,"453":1},"3":{"0":4,"68":1,"121":1,"135":1,"189":1,"256":1,"290":1,"365":1,"418":1,"443":1,"446":1,"448":1,"451":2,"452":2,"453":1,"454":3,"570":1,"572":1,"573":1,"631":1,"635":1,"651":1,"744":1,"749":1,"756":1,"827":1,"946":1,"973":1,"979":1,"990":1,"996":1,"1016":1,"1050":1,"1114":1,"1126":1,"1133":1,"1229":3,"1247":2,"1259":2,"1270":3,"1271":1,"1278":1,"1286":9,"1300":9,"1310":1,"1311":13,"1323":6,"1324":9,"1339":6,"1352":1,"1359":14,"1369":1,"1380":2,"1395":6,"1396":12,"1399":1,"1402":2,"1406":1,"1410":1,"1415":4,"1416":2,"1417":8,"1427":2,"1436":11,"1453":1,"1455":4,"1458":1,"1467":2,"1473":1,"1474":2,"1496":2,"1500":1,"1524":1,"1526":2,"1531":2,"1575":1,"1577":2,"1586":1,"1596":1,"1640":1,"1651":1,"1653":1,"1670":1,"1679":1,"1684":1,"1686":1,"1698":1,"1701":1,"1861":1,"1883":1,"2134":1,"2234":1,"2235":1}}],["document",{"0":{"454":1,"1895":1},"1":{"1762":1,"1763":1,"1764":1,"1765":1,"1766":1,"1767":1,"1768":1,"1769":1,"1770":1,"1771":1,"1772":1,"1773":1,"1774":1,"1775":1,"1776":1,"1777":1},"2":{"450":1,"2135":1},"3":{"0":2,"31":3,"32":1,"102":1,"165":1,"166":2,"234":1,"239":1,"371":1,"395":2,"415":1,"418":1,"423":1,"424":1,"438":1,"443":2,"446":5,"448":4,"450":4,"451":4,"452":2,"453":1,"454":5,"472":1,"487":1,"490":1,"564":1,"570":1,"571":2,"572":2,"573":2,"577":3,"585":1,"625":1,"626":1,"724":1,"725":3,"726":2,"727":1,"743":1,"882":1,"905":1,"910":1,"974":1,"976":1,"1010":1,"1011":1,"1013":1,"1021":1,"1050":3,"1114":1,"1115":1,"1116":1,"1117":1,"1120":1,"1212":1,"1213":1,"1270":1,"1273":1,"1285":3,"1286":14,"1288":3,"1299":1,"1300":16,"1309":2,"1311":47,"1322":1,"1323":12,"1324":20,"1339":2,"1356":3,"1359":16,"1369":1,"1380":2,"1396":20,"1399":1,"1404":1,"1406":1,"1410":2,"1415":20,"1417":7,"1433":2,"1436":25,"1438":3,"1439":1,"1441":1,"1447":1,"1455":1,"1467":2,"1470":1,"1474":1,"1475":1,"1478":1,"1481":2,"1485":1,"1488":4,"1496":1,"1521":1,"1524":4,"1526":2,"1530":1,"1531":5,"1532":1,"1545":1,"1576":1,"1577":2,"1585":1,"1599":1,"1620":1,"1631":2,"1640":1,"1666":2,"1669":1,"1672":1,"1676":1,"1711":1,"1717":1,"1755":1,"1756":1,"1762":1,"1765":1,"1772":2,"1825":1,"1845":1,"1854":1,"1858":1,"1862":1,"1896":2,"1899":2,"1929":5,"1930":1,"2008":1,"2034":1,"2056":1,"2101":1,"2124":1,"2133":2,"2134":11,"2135":1,"2222":1,"2234":1,"2235":1}}],["documented",{"3":{"0":10,"37":1,"53":1,"107":1,"118":1,"122":1,"136":1,"178":1,"189":1,"200":2,"216":2,"237":1,"245":1,"248":1,"253":1,"291":1,"329":1,"333":1,"348":2,"359":1,"363":1,"415":1,"441":1,"450":1,"465":1,"484":1,"526":1,"527":1,"528":1,"545":1,"564":1,"571":1,"583":1,"599":1,"601":1,"602":1,"617":1,"620":1,"631":3,"635":1,"640":2,"657":1,"659":1,"674":1,"682":1,"690":1,"698":1,"732":1,"748":1,"749":1,"750":1,"808":1,"861":1,"897":2,"901":1,"907":2,"926":1,"930":1,"931":1,"932":1,"964":2,"966":2,"972":1,"973":1,"980":2,"981":1,"986":1,"988":1,"991":1,"1004":1,"1005":1,"1006":1,"1018":1,"1050":1,"1091":1,"1108":1,"1125":1,"1134":1,"1139":1,"1140":1,"1149":1,"1161":1,"1162":1,"1169":1,"1175":1,"1211":1,"1212":2,"1229":2,"1231":1,"1235":1,"1237":9,"1242":1,"1244":2,"1247":2,"1254":1,"1255":1,"1259":10,"1269":1,"1270":18,"1271":3,"1276":1,"1284":1,"1285":1,"1286":37,"1292":1,"1296":1,"1300":27,"1301":2,"1309":8,"1311":10,"1312":5,"1313":2,"1316":1,"1317":1,"1321":2,"1323":23,"1324":32,"1329":1,"1331":1,"1332":1,"1339":11,"1343":1,"1348":1,"1350":9,"1355":1,"1357":1,"1359":44,"1364":1,"1366":1,"1369":1,"1380":3,"1384":1,"1395":16,"1396":23,"1402":12,"1412":1,"1415":27,"1416":4,"1417":22,"1419":1,"1431":1,"1433":2,"1436":34,"1438":1,"1441":1,"1442":2,"1443":1,"1445":1,"1450":1,"1453":2,"1454":1,"1455":1,"1467":4,"1470":1,"1472":1,"1473":1,"1474":2,"1475":1,"1481":1,"1483":1,"1488":3,"1489":1,"1491":1,"1496":12,"1500":1,"1524":1,"1526":13,"1531":1,"1532":1,"1534":3,"1535":1,"1537":1,"1543":1,"1545":1,"1546":2,"1547":1,"1548":1,"1562":2,"1566":4,"1570":2,"1571":3,"1575":1,"1576":1,"1577":21,"1581":1,"1582":1,"1583":1,"1584":1,"1585":8,"1591":5,"1599":1,"1600":1,"1632":1,"1638":1,"1639":1,"1640":1,"1641":1,"1642":1,"1647":1,"1656":1,"1665":1,"1670":1,"1671":1,"1673":2,"1675":1,"1686":1,"1709":1,"1797":1,"1801":1,"1815":1,"1821":1,"1826":1,"1842":1,"1904":1,"1910":1,"2002":1,"2031":1,"2034":1,"2035":2,"2037":1,"2046":1,"2056":1,"2062":1,"2076":1,"2090":1,"2121":1,"2129":1,"2151":1,"2152":1,"2154":1,"2161":1,"2164":1,"2166":1,"2174":1,"2176":1,"2184":1,"2197":1,"2201":1,"2218":1,"2223":1,"2231":1,"2234":4,"2244":1}}],["dockeravailabilitytests",{"3":{"1199":1,"1207":2,"1487":1}}],["dockeravailability",{"3":{"1067":1,"1199":3,"1207":2,"1428":1,"1430":4,"1488":2}}],["dockerfile",{"3":{"867":1,"868":6,"869":19,"870":4,"872":3,"873":6,"876":14,"877":6,"1445":37,"1450":6,"1455":2,"1464":8,"1496":2}}],["dockerfiles",{"0":{"1445":1},"3":{"0":1,"868":1,"869":1,"871":1,"877":3,"1212":1,"1445":3,"1450":2,"1455":1,"1464":1}}],["docker",{"0":{"2054":1},"1":{"2051":1,"2052":1,"2053":1,"2054":1,"2055":1,"2056":1,"2057":1,"2058":1,"2059":1,"2060":1,"2061":1},"2":{"373":1,"869":1,"871":1,"1069":1},"3":{"0":3,"149":1,"152":1,"373":1,"625":1,"627":1,"642":1,"868":1,"869":1,"871":1,"873":1,"914":1,"915":1,"935":1,"1034":1,"1067":1,"1069":3,"1074":1,"1078":1,"1328":2,"1339":5,"1430":5,"1436":6,"1437":1,"1438":6,"1439":1,"1440":1,"1445":2,"1449":2,"1453":1,"1455":6,"1458":1,"1460":1,"1464":2,"1465":1,"1486":3,"1487":2,"1488":1,"1490":5,"1492":5,"1591":1,"1599":1,"1602":1,"1611":3,"1614":1,"1616":1,"1648":1,"1661":1,"1682":1,"1689":1,"1692":1,"1693":1,"1717":1,"1718":3,"1785":1,"2005":1,"2006":1,"2014":1,"2050":1,"2051":4,"2054":1,"2060":1,"2061":2,"2212":1,"2215":1,"2220":1,"2221":1}}],["downscale",{"3":{"1457":1}}],["downside",{"3":{"1441":1}}],["downstreamcheckprefix",{"3":{"1436":2}}],["downstreamreadinesscache",{"2":{"833":1},"3":{"830":1,"833":1}}],["downstreamservices",{"3":{"1436":1}}],["downstreamservicehealthcheck",{"2":{"402":1,"1443":1},"3":{"402":1,"827":1,"1199":3,"1203":1,"1207":2,"1333":1,"1337":2,"1339":12,"1443":1,"1496":2}}],["downstreams",{"3":{"99":2,"827":1,"1339":3,"1436":2,"2025":1}}],["downstreamprobeversion",{"2":{"99":2,"1447":1},"3":{"99":2,"1199":4,"1203":1,"1207":1,"1337":1,"1339":7,"1447":1}}],["downstream",{"0":{"99":1,"1337":1,"1678":1},"3":{"0":5,"25":1,"35":1,"53":1,"59":1,"97":1,"99":5,"100":1,"101":1,"146":1,"174":1,"349":1,"351":1,"369":1,"402":1,"459":1,"529":1,"572":2,"757":2,"761":2,"783":1,"826":2,"827":10,"828":2,"829":3,"830":1,"833":1,"834":1,"1066":1,"1068":1,"1212":2,"1247":2,"1252":1,"1259":1,"1263":1,"1270":1,"1271":2,"1283":1,"1284":1,"1286":6,"1296":1,"1300":4,"1301":1,"1309":4,"1311":19,"1312":6,"1323":8,"1324":6,"1325":1,"1328":3,"1329":1,"1332":2,"1337":8,"1338":2,"1339":47,"1344":1,"1350":6,"1359":14,"1395":1,"1396":7,"1402":8,"1409":1,"1415":4,"1416":1,"1417":3,"1427":4,"1429":1,"1430":1,"1433":2,"1436":21,"1438":4,"1441":2,"1442":1,"1443":1,"1447":12,"1450":1,"1453":2,"1455":1,"1467":6,"1472":1,"1476":1,"1487":1,"1488":8,"1544":1,"1575":3,"1577":2,"1578":1,"1582":1,"1583":1,"1585":1,"1670":1,"1671":1,"1677":1,"1784":1,"1811":1,"1812":1,"1821":1,"1836":1,"1852":1,"1895":1,"1954":1,"1974":2,"1977":1,"1979":2,"2008":1,"2011":1,"2020":1,"2025":2,"2029":1,"2056":1,"2057":1,"2068":1,"2116":2,"2117":2,"2129":1,"2138":1,"2174":1}}],["downward",{"3":{"1311":1,"1436":1}}],["downcasts",{"3":{"1270":1}}],["downgrading",{"3":{"641":1}}],["downgrades",{"3":{"1447":1}}],["downgraded",{"3":{"342":1,"1229":1,"1271":1,"1311":1,"1312":2,"1334":1,"1438":1,"1473":1,"1478":2,"1927":1}}],["downgrade",{"0":{"1478":2},"3":{"0":1,"98":1,"109":1,"235":1,"768":1,"790":1,"1067":1,"1192":1,"1222":1,"1229":1,"1300":1,"1327":1,"1339":3,"1380":1,"1436":2,"1443":1,"1444":1,"1466":1,"1467":3,"1470":1,"1473":2,"1478":7,"1482":3,"1483":2,"1484":2,"1591":1,"2026":1}}],["down",{"0":{"2011":1},"2":{"565":1},"3":{"0":7,"1":1,"58":1,"81":1,"100":1,"159":1,"234":1,"235":1,"256":1,"257":1,"293":1,"310":2,"351":1,"364":1,"413":1,"424":1,"475":1,"476":1,"490":4,"492":1,"494":1,"517":1,"543":1,"545":1,"546":1,"556":1,"563":1,"564":4,"565":1,"633":1,"640":1,"666":1,"684":1,"692":1,"700":1,"702":1,"707":1,"726":1,"749":1,"756":2,"757":1,"765":1,"766":1,"767":1,"821":1,"827":1,"853":1,"854":1,"859":1,"861":2,"868":1,"871":1,"881":1,"884":1,"912":1,"953":1,"963":1,"1003":1,"1004":1,"1018":2,"1019":1,"1050":1,"1082":1,"1084":1,"1091":1,"1101":1,"1118":1,"1133":1,"1152":1,"1186":1,"1229":3,"1235":1,"1238":1,"1247":5,"1259":3,"1270":5,"1286":7,"1300":5,"1307":1,"1309":5,"1310":1,"1311":2,"1321":1,"1323":6,"1324":25,"1333":1,"1334":1,"1339":12,"1350":5,"1352":1,"1358":1,"1359":16,"1369":4,"1373":2,"1380":1,"1395":22,"1396":15,"1402":6,"1415":3,"1416":5,"1417":12,"1422":1,"1427":2,"1436":27,"1438":3,"1441":1,"1443":1,"1445":1,"1447":4,"1455":6,"1467":4,"1476":2,"1478":1,"1480":1,"1524":1,"1531":1,"1537":1,"1556":1,"1566":1,"1686":1,"1726":1,"1731":1,"1748":1,"1749":1,"1765":1,"1784":1,"1797":1,"1799":3,"1801":1,"1810":1,"1825":2,"1827":2,"1837":1,"1856":1,"1864":2,"1909":1,"1911":1,"1912":3,"1944":1,"1946":2,"1948":1,"1971":1,"1972":1,"2001":2,"2008":1,"2029":1,"2033":1,"2035":1,"2038":1,"2039":2,"2041":1,"2044":1,"2045":1,"2057":1,"2058":1,"2063":1,"2065":1,"2069":1,"2071":1,"2072":1,"2091":1,"2120":1,"2167":3,"2171":3,"2176":1,"2191":1,"2194":1,"2200":1}}],["downloading",{"3":{"1359":1}}],["downloadable",{"3":{"1309":1}}],["downloaded",{"3":{"0":1,"555":1,"556":1,"743":1,"1116":1,"1118":1,"1342":1,"1350":1,"1416":1,"1454":1,"1456":1,"1467":1,"2069":1}}],["downloads",{"3":{"0":2,"527":1,"557":1,"1116":1,"1117":1,"1182":1,"1184":1,"1286":2,"1359":1,"1389":1,"1416":1,"1631":1,"2084":1,"2152":1}}],["download",{"3":{"0":1,"527":1,"530":1,"556":1,"725":2,"1116":1,"1117":1,"1184":1,"1285":1,"1286":3,"1300":1,"1311":3,"1323":1,"1324":10,"1344":1,"1350":2,"1357":1,"1359":2,"1380":1,"1395":2,"1410":1,"1415":3,"1438":2,"1455":1,"1467":1,"1669":1,"1672":1,"2219":1}}],["downtime",{"3":{"0":1,"361":1,"365":1,"1284":1,"1545":1,"1664":1,"1672":1,"2147":1,"2148":1}}],["do",{"0":{"1303":1,"1422":1,"1956":1,"2056":1},"1":{"2183":1,"2184":1,"2185":1,"2186":1,"2187":1,"2188":1,"2189":1,"2190":1,"2191":1,"2192":1,"2193":1,"2194":1,"2195":1},"3":{"0":3,"15":1,"17":1,"18":1,"24":1,"27":1,"47":1,"62":1,"63":1,"91":1,"97":1,"100":2,"102":1,"108":1,"109":2,"110":1,"115":1,"122":1,"123":1,"133":2,"146":1,"147":2,"156":1,"158":1,"170":1,"175":1,"176":1,"185":1,"187":1,"224":1,"228":1,"234":1,"235":1,"236":1,"243":1,"245":2,"255":1,"256":1,"265":2,"283":3,"306":1,"317":1,"319":1,"335":1,"345":1,"351":1,"353":1,"401":1,"408":1,"449":1,"450":1,"451":2,"459":3,"461":1,"466":1,"473":1,"481":2,"482":1,"497":1,"502":1,"518":2,"539":1,"541":1,"549":1,"557":1,"566":1,"573":1,"592":1,"611":1,"622":1,"625":2,"626":1,"642":1,"658":1,"665":2,"676":1,"681":1,"683":1,"684":1,"689":2,"692":1,"698":1,"725":2,"735":1,"743":2,"748":1,"749":1,"751":2,"757":1,"782":2,"783":1,"789":1,"790":1,"800":1,"802":1,"803":1,"811":1,"819":1,"821":1,"827":2,"829":1,"838":1,"861":1,"868":1,"869":2,"873":1,"875":1,"877":1,"889":1,"896":1,"897":2,"905":2,"907":1,"912":1,"914":1,"923":1,"926":2,"966":1,"971":1,"982":1,"987":1,"988":1,"989":1,"995":1,"996":1,"1019":1,"1020":1,"1026":1,"1034":1,"1041":2,"1049":1,"1053":1,"1090":1,"1091":2,"1116":1,"1117":1,"1120":1,"1141":1,"1151":2,"1168":1,"1170":1,"1174":1,"1184":1,"1229":2,"1235":1,"1237":4,"1239":2,"1240":1,"1241":1,"1244":2,"1247":9,"1248":2,"1249":1,"1253":2,"1256":1,"1258":1,"1259":8,"1269":1,"1270":14,"1271":3,"1276":1,"1278":2,"1286":38,"1287":1,"1290":1,"1297":1,"1300":15,"1301":8,"1303":1,"1309":6,"1310":5,"1311":23,"1312":1,"1313":1,"1317":1,"1318":1,"1323":20,"1324":22,"1332":2,"1339":15,"1342":1,"1345":1,"1348":1,"1350":21,"1352":2,"1353":1,"1354":1,"1357":1,"1358":1,"1359":37,"1369":3,"1373":1,"1377":1,"1380":10,"1385":1,"1387":1,"1395":15,"1396":31,"1399":1,"1401":2,"1402":8,"1403":1,"1415":10,"1416":4,"1417":34,"1418":2,"1423":1,"1427":3,"1431":1,"1432":1,"1435":1,"1436":63,"1438":3,"1442":2,"1443":2,"1444":1,"1445":1,"1453":2,"1454":1,"1455":2,"1467":3,"1470":1,"1471":1,"1472":2,"1473":1,"1474":1,"1475":3,"1476":2,"1488":2,"1489":2,"1490":3,"1491":2,"1492":1,"1496":1,"1503":1,"1513":1,"1526":1,"1532":1,"1534":3,"1539":1,"1553":2,"1572":5,"1586":1,"1596":2,"1600":1,"1630":1,"1631":1,"1632":1,"1635":1,"1638":2,"1641":2,"1646":1,"1649":1,"1651":1,"1675":1,"1676":1,"1682":1,"1683":1,"1684":1,"1685":1,"1692":1,"1693":1,"1701":1,"1706":1,"1723":1,"1724":1,"1727":1,"1728":2,"1729":1,"1730":1,"1735":1,"1741":1,"1748":1,"1749":1,"1759":1,"1767":2,"1769":1,"1779":1,"1782":1,"1788":1,"1793":2,"1794":1,"1797":1,"1799":1,"1800":1,"1802":2,"1804":1,"1805":1,"1807":2,"1810":1,"1812":1,"1815":2,"1817":1,"1819":2,"1825":1,"1826":2,"1836":2,"1845":1,"1846":2,"1847":1,"1849":1,"1850":1,"1851":1,"1857":3,"1860":1,"1862":1,"1867":2,"1868":1,"1871":1,"1876":2,"1877":2,"1881":1,"1883":1,"1888":1,"1891":1,"1898":3,"1899":2,"1902":1,"1904":1,"1909":1,"1912":1,"1915":1,"1920":1,"1923":1,"1924":1,"1927":1,"1930":1,"1932":1,"1939":1,"1946":2,"1947":1,"1950":3,"1953":1,"1956":1,"1959":2,"1960":3,"1961":1,"1962":1,"1965":1,"1966":1,"1968":1,"1970":1,"1973":1,"1975":1,"1981":2,"1982":1,"1986":1,"1992":1,"1993":1,"1994":2,"1995":2,"1997":1,"1998":2,"1999":2,"2001":1,"2002":2,"2003":2,"2012":1,"2025":2,"2033":1,"2041":2,"2043":2,"2044":1,"2048":2,"2049":1,"2056":1,"2061":1,"2064":2,"2065":1,"2071":2,"2079":1,"2082":1,"2087":1,"2088":1,"2093":1,"2095":1,"2096":1,"2099":2,"2102":2,"2103":1,"2109":3,"2111":1,"2118":1,"2120":2,"2121":1,"2130":1,"2133":1,"2136":1,"2137":1,"2138":1,"2141":1,"2144":1,"2155":1,"2156":1,"2157":2,"2158":1,"2163":4,"2167":1,"2168":1,"2169":1,"2172":1,"2173":2,"2182":4,"2183":3,"2184":1,"2185":3,"2197":2,"2198":1,"2201":1,"2204":1,"2205":3,"2208":1}}],["doesn",{"3":{"1557":1,"1563":1,"1566":1,"1749":1,"1755":1,"1776":1}}],["doesnotcalltheservice",{"3":{"1436":1}}],["doesnotcalltheserviceandshowstheform",{"3":{"1436":1}}],["doesnotleakpseudosentinel",{"3":{"1436":1}}],["doesnotflag",{"3":{"1436":1}}],["doesnotreport",{"3":{"1436":6}}],["doesnotshareitsduplicateguardacrossbuilders",{"3":{"1339":1}}],["doesnotthrowandcommitsonce",{"3":{"988":1}}],["doesnotuserawqueryablesurfaces",{"2":{"0":1,"700":1,"1815":1},"3":{"0":1,"545":1,"700":1,"1436":2,"1815":1}}],["does",{"0":{"1265":1,"1424":1,"1677":1,"1797":1,"1838":1,"2189":1},"2":{"2135":1},"3":{"0":27,"15":1,"17":1,"19":1,"20":1,"21":1,"23":1,"24":1,"26":2,"27":1,"31":1,"32":2,"39":4,"41":1,"49":1,"62":1,"68":1,"71":1,"72":1,"80":1,"81":2,"91":1,"95":1,"96":1,"109":7,"111":2,"117":1,"121":1,"122":2,"124":1,"126":2,"128":1,"131":1,"135":3,"136":2,"137":1,"147":1,"148":1,"150":1,"158":1,"160":2,"161":1,"164":1,"170":1,"175":1,"178":1,"180":1,"181":1,"185":1,"186":1,"187":1,"188":1,"193":1,"195":2,"197":1,"200":2,"202":2,"206":1,"207":1,"208":1,"209":1,"216":2,"225":1,"234":1,"236":1,"237":4,"242":1,"243":2,"245":3,"253":1,"255":2,"256":2,"260":1,"265":6,"266":1,"273":1,"275":1,"280":1,"282":1,"283":3,"291":2,"299":1,"300":1,"304":1,"305":1,"306":2,"310":2,"311":1,"312":1,"318":6,"320":1,"325":1,"330":1,"333":1,"341":4,"342":1,"343":4,"344":1,"350":4,"353":1,"365":2,"366":1,"369":2,"370":1,"371":1,"372":1,"380":3,"384":1,"388":3,"389":1,"391":1,"396":1,"397":3,"400":1,"404":2,"405":1,"416":1,"420":1,"422":1,"428":1,"442":2,"443":1,"444":1,"448":3,"450":1,"459":1,"460":1,"463":1,"470":1,"490":2,"491":1,"492":1,"493":1,"499":2,"509":1,"517":2,"520":2,"523":1,"526":1,"527":1,"528":1,"535":1,"536":2,"538":1,"539":2,"543":1,"544":1,"547":1,"549":1,"550":1,"551":1,"552":1,"556":2,"558":3,"563":1,"564":4,"572":1,"573":2,"574":1,"582":1,"583":2,"585":3,"591":1,"592":2,"593":4,"598":1,"599":2,"600":2,"601":1,"602":1,"607":3,"608":1,"609":6,"610":1,"611":3,"618":1,"620":2,"624":1,"626":4,"628":2,"633":2,"635":3,"640":2,"642":2,"649":3,"651":1,"657":2,"660":1,"664":1,"665":1,"666":1,"668":2,"673":1,"674":3,"676":2,"678":2,"682":3,"684":1,"685":1,"689":2,"691":1,"692":1,"693":1,"697":2,"698":3,"699":1,"700":1,"705":1,"707":2,"708":2,"709":1,"711":1,"714":2,"715":2,"716":1,"717":1,"718":1,"723":1,"724":1,"725":5,"726":3,"733":2,"735":1,"736":1,"740":2,"741":1,"742":1,"743":3,"748":2,"749":3,"751":1,"757":1,"759":1,"764":2,"765":2,"766":4,"767":1,"768":2,"770":1,"774":1,"775":1,"776":1,"781":1,"782":2,"784":1,"789":4,"790":3,"792":1,"793":2,"794":1,"795":2,"799":1,"800":2,"809":1,"810":3,"811":1,"812":1,"813":1,"815":1,"818":1,"819":3,"820":1,"821":1,"825":2,"826":1,"827":8,"829":2,"830":1,"831":1,"833":1,"834":1,"836":2,"837":1,"838":1,"840":1,"842":1,"849":2,"853":2,"854":1,"856":2,"860":1,"863":2,"869":2,"870":1,"873":2,"875":1,"876":2,"881":2,"883":2,"885":1,"888":2,"889":1,"890":2,"891":2,"896":1,"897":1,"899":2,"905":5,"907":1,"910":1,"913":1,"914":1,"915":1,"923":2,"924":1,"926":4,"931":1,"932":1,"937":1,"946":2,"947":1,"953":1,"954":1,"956":2,"958":1,"960":1,"963":2,"965":2,"966":1,"971":2,"972":4,"973":1,"979":1,"980":1,"982":3,"990":2,"992":2,"995":5,"996":3,"1006":1,"1013":1,"1018":3,"1020":2,"1025":1,"1026":1,"1028":1,"1034":2,"1035":2,"1036":1,"1041":1,"1042":2,"1050":4,"1052":4,"1053":1,"1059":1,"1061":1,"1062":1,"1066":1,"1067":1,"1069":2,"1070":1,"1074":2,"1075":1,"1076":1,"1077":1,"1079":2,"1082":1,"1084":1,"1090":4,"1091":6,"1092":1,"1093":1,"1100":2,"1102":2,"1107":1,"1108":2,"1110":1,"1115":1,"1116":1,"1117":1,"1119":1,"1123":1,"1124":4,"1125":1,"1132":1,"1133":2,"1134":2,"1135":2,"1142":1,"1152":1,"1157":1,"1160":1,"1161":2,"1163":1,"1168":3,"1182":1,"1183":2,"1184":1,"1186":1,"1188":1,"1193":1,"1212":4,"1216":1,"1217":1,"1218":1,"1220":1,"1223":1,"1225":1,"1226":1,"1228":2,"1229":16,"1231":1,"1232":1,"1233":1,"1235":6,"1237":26,"1240":1,"1241":5,"1242":2,"1243":1,"1244":1,"1247":32,"1248":2,"1251":1,"1252":2,"1256":1,"1258":1,"1259":23,"1260":1,"1261":2,"1263":3,"1264":4,"1265":2,"1266":1,"1267":2,"1270":49,"1271":12,"1273":3,"1274":1,"1275":3,"1278":2,"1279":2,"1281":1,"1283":1,"1286":123,"1287":1,"1288":1,"1289":4,"1290":3,"1291":1,"1293":3,"1294":2,"1295":2,"1296":1,"1297":1,"1300":86,"1301":13,"1304":2,"1307":4,"1308":2,"1309":23,"1310":8,"1311":67,"1312":9,"1313":2,"1315":4,"1317":2,"1318":3,"1320":6,"1322":1,"1323":69,"1324":125,"1327":1,"1328":2,"1330":1,"1332":1,"1333":1,"1335":1,"1336":1,"1337":1,"1338":1,"1339":54,"1340":1,"1341":1,"1342":1,"1343":1,"1344":3,"1345":1,"1346":1,"1348":2,"1349":2,"1350":50,"1352":4,"1353":2,"1355":2,"1357":1,"1358":3,"1359":220,"1362":3,"1363":2,"1365":2,"1366":2,"1369":27,"1372":1,"1373":1,"1375":1,"1376":1,"1378":2,"1380":27,"1389":3,"1390":2,"1395":107,"1396":122,"1398":1,"1400":7,"1402":41,"1405":5,"1406":2,"1408":2,"1409":2,"1410":3,"1413":1,"1415":70,"1416":12,"1417":47,"1418":2,"1423":2,"1424":2,"1425":1,"1426":1,"1427":17,"1428":1,"1429":1,"1431":4,"1432":1,"1433":3,"1435":5,"1436":206,"1438":13,"1441":5,"1442":2,"1443":3,"1445":3,"1446":2,"1447":4,"1449":1,"1453":5,"1454":2,"1455":26,"1456":4,"1457":2,"1458":1,"1459":2,"1460":5,"1461":1,"1465":2,"1467":29,"1471":1,"1473":1,"1475":9,"1476":5,"1478":2,"1480":2,"1481":4,"1483":2,"1488":6,"1489":10,"1490":8,"1491":1,"1492":10,"1496":3,"1524":1,"1525":1,"1526":5,"1528":1,"1531":2,"1532":1,"1534":5,"1553":1,"1572":3,"1577":2,"1579":1,"1582":1,"1585":2,"1591":2,"1596":1,"1599":4,"1608":1,"1627":1,"1630":1,"1631":6,"1632":1,"1635":2,"1636":1,"1638":10,"1639":13,"1640":3,"1641":3,"1646":1,"1649":1,"1651":4,"1653":5,"1655":1,"1664":1,"1668":1,"1670":1,"1675":1,"1677":4,"1683":1,"1684":4,"1685":2,"1686":2,"1688":1,"1691":1,"1699":1,"1700":1,"1701":2,"1702":1,"1703":1,"1709":1,"1717":1,"1723":3,"1724":1,"1725":1,"1726":1,"1727":6,"1728":2,"1729":1,"1730":1,"1742":1,"1748":1,"1749":1,"1750":1,"1751":1,"1760":1,"1761":1,"1764":1,"1765":5,"1769":1,"1776":1,"1782":1,"1783":1,"1790":4,"1792":1,"1793":2,"1799":1,"1801":1,"1802":1,"1803":4,"1804":1,"1805":3,"1810":4,"1813":1,"1815":1,"1820":2,"1821":1,"1823":1,"1824":2,"1825":2,"1828":1,"1832":5,"1833":2,"1836":1,"1837":2,"1838":1,"1839":1,"1841":2,"1842":1,"1843":2,"1844":2,"1845":1,"1847":1,"1849":3,"1851":1,"1852":2,"1854":1,"1856":1,"1857":4,"1859":4,"1861":1,"1864":1,"1865":1,"1866":1,"1867":1,"1868":1,"1869":1,"1870":2,"1871":1,"1874":1,"1875":1,"1876":3,"1879":2,"1880":1,"1881":2,"1882":3,"1883":3,"1885":1,"1887":1,"1890":1,"1891":2,"1896":2,"1900":1,"1901":1,"1905":1,"1907":2,"1908":2,"1912":1,"1913":1,"1914":1,"1915":1,"1916":1,"1917":2,"1919":2,"1922":6,"1923":3,"1926":1,"1927":2,"1928":1,"1930":1,"1931":1,"1933":3,"1935":2,"1936":1,"1938":1,"1940":2,"1941":1,"1943":1,"1945":1,"1946":2,"1952":1,"1955":1,"1958":2,"1960":1,"1961":1,"1962":3,"1964":1,"1965":2,"1966":1,"1968":2,"1969":1,"1971":1,"1976":2,"1977":1,"1978":1,"1979":1,"1982":2,"1984":2,"1985":1,"1988":3,"1990":1,"1995":4,"1996":7,"1997":3,"1999":1,"2000":1,"2001":4,"2002":3,"2003":1,"2004":1,"2008":2,"2009":2,"2011":1,"2012":1,"2017":2,"2021":2,"2022":1,"2025":3,"2026":1,"2029":1,"2031":1,"2032":1,"2033":3,"2035":1,"2036":1,"2037":1,"2038":1,"2039":1,"2042":2,"2044":1,"2045":3,"2047":2,"2048":3,"2049":1,"2054":1,"2056":1,"2057":1,"2058":1,"2062":2,"2064":1,"2066":1,"2067":1,"2068":2,"2070":1,"2072":4,"2074":4,"2075":1,"2076":1,"2078":1,"2079":1,"2081":1,"2082":1,"2083":1,"2084":1,"2085":1,"2087":4,"2091":1,"2094":3,"2095":1,"2099":1,"2100":2,"2101":2,"2102":1,"2107":1,"2108":1,"2110":1,"2111":1,"2113":1,"2115":1,"2116":2,"2120":1,"2124":2,"2128":5,"2129":1,"2133":1,"2134":3,"2135":1,"2136":1,"2138":1,"2141":1,"2144":1,"2145":1,"2150":2,"2152":4,"2154":1,"2156":2,"2157":1,"2158":2,"2162":1,"2164":1,"2165":3,"2166":2,"2168":2,"2169":2,"2170":2,"2173":1,"2174":1,"2176":1,"2177":1,"2181":2,"2182":1,"2183":2,"2185":3,"2187":1,"2188":1,"2194":3,"2195":1,"2197":1,"2199":1,"2234":1}}],["drudgery",{"3":{"1359":1}}],["dry",{"3":{"1229":1,"1237":1,"1271":1,"1300":1,"1323":1,"1350":1,"1436":1,"1496":2,"2072":1}}],["drown",{"3":{"1527":1}}],["drove",{"3":{"1021":1,"1347":1,"1350":1,"1368":1,"1369":1,"1492":1}}],["droplink",{"3":{"1359":1}}],["dropdatabaseasync",{"3":{"1436":1}}],["dropdeferred",{"2":{"1286":1},"3":{"1274":1,"1286":4,"1840":1}}],["dropdowns",{"3":{"1244":1,"1247":2,"1286":1,"1311":1,"1324":2,"1344":1,"1350":1,"1371":1,"1395":1,"1640":1,"1748":2,"2076":1}}],["dropdown",{"3":{"329":1,"330":1,"1311":4,"1380":1,"1395":5,"1632":1,"1773":1,"1987":1,"1988":1}}],["dropforeignkey",{"2":{"566":1},"3":{"566":1}}],["dropindex",{"2":{"293":1},"3":{"0":2,"293":1,"564":4,"1455":2}}],["droptable",{"2":{"293":1},"3":{"0":1,"293":1,"564":2,"1455":2}}],["dropcolumn",{"2":{"293":1,"563":1},"3":{"0":1,"293":1,"563":1,"564":2,"1455":2}}],["dropschema",{"2":{"566":1},"3":{"566":1}}],["drops",{"3":{"0":5,"20":1,"120":1,"132":1,"150":1,"243":2,"261":1,"383":2,"395":1,"397":3,"398":1,"399":1,"409":1,"505":1,"511":2,"512":1,"543":2,"549":1,"564":1,"565":1,"572":1,"583":1,"586":1,"591":1,"609":1,"633":2,"640":1,"649":1,"674":1,"675":1,"698":1,"700":1,"709":1,"775":1,"831":1,"867":1,"870":1,"881":1,"891":2,"897":1,"917":1,"930":1,"988":2,"1042":1,"1102":1,"1124":2,"1184":1,"1191":1,"1212":1,"1215":1,"1229":1,"1240":1,"1247":4,"1265":1,"1271":1,"1276":1,"1278":1,"1281":2,"1286":10,"1300":1,"1309":1,"1310":1,"1311":5,"1312":3,"1315":1,"1323":4,"1324":15,"1333":1,"1339":1,"1350":5,"1359":16,"1362":1,"1369":1,"1375":1,"1380":5,"1395":8,"1396":10,"1415":3,"1416":1,"1417":5,"1429":1,"1436":22,"1438":3,"1443":3,"1445":1,"1454":1,"1455":1,"1460":1,"1466":1,"1467":5,"1474":1,"1478":1,"1488":1,"1491":1,"1492":1,"1496":1,"1545":1,"1591":1,"1600":1,"1666":1,"1683":3,"1685":1,"1727":3,"1748":1,"1767":1,"1785":1,"1841":1,"1851":1,"1859":1,"1866":1,"1876":1,"1881":1,"1918":1,"1922":2,"1944":1,"1948":1,"1950":1,"2002":1,"2048":1,"2056":1,"2059":1,"2077":1,"2088":1,"2123":1,"2158":2,"2159":1,"2160":1,"2162":1,"2187":1,"2190":1}}],["dropoldest",{"2":{"383":1,"518":1,"520":1,"1099":1,"1100":1,"1101":1,"1102":1,"1947":1,"2185":1},"3":{"0":4,"383":1,"518":2,"520":1,"1099":1,"1100":3,"1101":1,"1102":1,"1212":2,"1396":7,"1400":2,"1944":1,"1947":2,"2185":2}}],["drop",{"0":{"1478":1},"2":{"1333":1,"1443":1},"3":{"0":5,"383":1,"395":1,"397":1,"551":1,"564":1,"565":2,"566":3,"573":1,"617":1,"698":1,"732":1,"741":1,"869":1,"871":1,"890":1,"893":1,"897":1,"905":1,"907":2,"910":1,"916":1,"932":1,"1019":1,"1085":1,"1100":1,"1101":1,"1124":1,"1247":2,"1257":1,"1259":2,"1270":2,"1274":1,"1286":8,"1290":1,"1300":2,"1301":2,"1311":3,"1312":1,"1323":1,"1324":10,"1333":3,"1337":1,"1339":7,"1359":3,"1369":1,"1380":2,"1386":1,"1395":9,"1396":5,"1400":1,"1402":2,"1415":1,"1417":4,"1428":1,"1436":10,"1438":1,"1443":3,"1445":1,"1455":1,"1456":1,"1463":1,"1467":7,"1470":1,"1471":1,"1473":1,"1478":4,"1480":1,"1482":2,"1483":2,"1484":1,"1490":2,"1496":5,"1524":1,"1534":2,"1545":1,"1577":1,"1591":1,"1596":2,"1611":1,"1617":1,"1653":2,"1668":1,"1669":1,"1677":1,"1684":1,"1687":1,"1688":1,"1689":1,"1702":1,"1727":1,"1765":1,"1812":1,"1853":1,"1862":1,"1922":1,"1924":1,"1940":1,"1944":2,"1947":1,"1950":2,"1958":1,"1959":1,"1973":1,"2011":2,"2025":1,"2027":1,"2046":1,"2144":1,"2158":4,"2162":4,"2195":1,"2199":1,"2234":1}}],["droppable",{"3":{"2003":1}}],["dropprimarykey",{"2":{"566":1},"3":{"566":1}}],["dropping",{"3":{"0":3,"24":1,"26":1,"175":1,"196":1,"402":1,"512":1,"545":1,"549":1,"607":1,"633":1,"698":1,"749":1,"838":1,"869":1,"988":1,"989":1,"1012":1,"1028":1,"1241":2,"1247":2,"1257":1,"1259":2,"1270":1,"1286":3,"1300":1,"1311":3,"1323":1,"1324":2,"1339":2,"1355":1,"1359":7,"1380":1,"1395":1,"1396":4,"1416":2,"1417":2,"1427":2,"1438":1,"1443":1,"1467":3,"1473":1,"1489":2,"1490":1,"1526":1,"1705":1,"1727":1,"1815":1,"1947":1,"2002":1,"2189":1}}],["droppedcount",{"2":{"383":1,"1949":1},"3":{"383":1,"1100":1,"1396":4,"1944":1,"1949":1}}],["dropped",{"3":{"0":5,"1":2,"17":1,"19":1,"26":1,"45":1,"47":1,"72":1,"109":1,"110":1,"175":1,"265":1,"279":1,"312":1,"324":1,"335":1,"353":1,"383":1,"386":1,"397":2,"398":1,"399":1,"407":2,"409":1,"427":1,"428":1,"468":1,"518":2,"526":1,"534":1,"535":1,"538":1,"592":1,"607":1,"633":1,"638":1,"664":1,"703":1,"764":2,"766":2,"856":1,"881":1,"914":1,"916":1,"931":1,"988":2,"991":1,"1116":1,"1117":1,"1119":1,"1123":1,"1139":1,"1144":1,"1149":1,"1163":1,"1191":1,"1196":2,"1202":1,"1212":1,"1241":2,"1247":2,"1252":1,"1263":2,"1270":2,"1286":6,"1300":2,"1301":3,"1309":1,"1311":7,"1323":2,"1324":11,"1339":5,"1359":11,"1379":1,"1380":1,"1395":7,"1396":11,"1399":1,"1402":2,"1415":4,"1416":4,"1417":4,"1427":2,"1436":6,"1438":4,"1441":1,"1443":1,"1459":1,"1467":4,"1469":1,"1473":1,"1475":1,"1478":1,"1488":2,"1492":1,"1496":26,"1500":1,"1547":1,"1639":1,"1664":1,"1677":2,"1697":1,"1702":1,"1806":1,"1813":1,"1814":1,"1840":3,"1922":1,"1929":1,"1944":1,"1988":1,"2001":2,"2003":1,"2011":1,"2091":1,"2158":2,"2166":1,"2170":1,"2184":1}}],["dressed",{"3":{"1019":1}}],["drew",{"3":{"571":1}}],["drama",{"3":{"2163":1,"2168":1}}],["dragging",{"3":{"1286":1,"1301":1,"1324":1,"1359":1,"1395":1,"1396":1,"1404":1,"1436":1,"1455":1,"1805":1}}],["dragged",{"3":{"608":1,"1217":1,"1467":1,"2160":1}}],["drags",{"3":{"673":1,"1067":1,"1286":2,"1311":1,"1325":1,"1350":1,"1436":1,"1438":1,"1459":1,"1585":1,"1863":1,"2005":1,"2075":1,"2174":1}}],["drag",{"3":{"640":1,"1061":1,"1286":1,"1300":1,"1306":1,"1309":1,"1436":3,"1459":1,"2073":1}}],["drafts",{"3":{"464":1}}],["draft",{"2":{"384":1},"3":{"384":1,"1350":1,"1380":2,"1384":1,"1389":2,"1395":5,"1396":3,"1398":1,"1399":1,"1402":20,"1436":1,"1630":1,"1632":2}}],["draw",{"3":{"799":1,"1286":2,"1300":3,"1301":1,"1309":1,"1324":1,"1350":2,"1395":2,"1396":2,"1402":1,"1417":3,"1572":1,"1788":1,"1793":1,"2003":1,"2148":1,"2205":1,"2243":1}}],["drawing",{"2":{"681":1,"1480":2},"3":{"681":1,"1415":1,"1436":1,"1480":3}}],["drawericon",{"3":{"1324":1}}],["drawertext",{"3":{"1324":1}}],["drawerbackground",{"3":{"1324":1}}],["drawers",{"3":{"650":1,"1324":1}}],["drawer",{"3":{"648":1,"649":1,"1324":3,"1577":1,"1591":1,"1600":2,"1669":1,"1712":1,"1713":2,"1714":1,"1741":1,"1742":2,"1750":2,"1759":1,"1768":1,"1773":1,"2079":1}}],["draws",{"3":{"310":1,"359":1,"499":1,"946":1,"1059":2,"1259":3,"1262":1,"1270":1,"1286":6,"1300":3,"1309":1,"1311":2,"1323":2,"1324":3,"1339":2,"1350":1,"1359":3,"1369":2,"1380":1,"1395":1,"1396":2,"1415":2,"1417":2,"1433":1,"1436":1,"1455":1,"1982":1,"2056":1,"2144":1,"2203":1}}],["drawn",{"3":{"24":1,"136":1,"1262":1,"1286":2,"1300":1,"1311":1,"1323":1,"1324":1,"1359":1,"1369":1,"1396":1,"1417":1,"1487":1,"1494":1,"1517":1,"1631":1,"1793":1,"2000":1,"2045":1,"2101":1,"2138":1,"2241":1}}],["drainallasync",{"3":{"1259":2,"1275":1,"1286":2}}],["drainable",{"3":{"1237":1}}],["drainers",{"3":{"1436":1}}],["drainer",{"3":{"1248":1}}],["drained",{"3":{"0":1,"78":1,"702":1,"845":1,"848":1,"849":1,"1068":1,"1237":1,"1254":1,"1259":4,"1286":2,"1323":2,"1380":1,"1396":1,"1402":1,"1415":1,"1436":1,"1478":1,"1808":1,"1842":1,"1889":1,"1890":1,"1891":1,"1947":1}}],["draining",{"3":{"256":1,"573":1,"847":2,"1257":2,"1259":2,"1275":1,"1286":1,"1323":1,"1367":1,"1417":1,"1438":1,"1665":1,"1891":1,"1945":1}}],["drain",{"0":{"2190":1},"1":{"515":1,"516":1,"517":1,"518":1,"519":1,"520":1,"521":1,"522":1,"523":1,"524":1,"1097":1,"1098":1,"1099":1,"1100":1,"1101":1,"1102":1,"1103":1,"1104":1},"3":{"0":6,"15":1,"20":1,"24":1,"78":1,"383":1,"515":1,"516":1,"517":1,"518":6,"520":1,"541":1,"573":1,"706":2,"709":1,"897":1,"1016":1,"1018":1,"1022":1,"1043":1,"1068":1,"1097":1,"1100":4,"1101":1,"1102":1,"1150":1,"1152":1,"1157":1,"1212":2,"1233":1,"1237":1,"1259":7,"1275":4,"1286":4,"1307":2,"1309":4,"1318":1,"1323":1,"1339":2,"1367":1,"1368":1,"1369":1,"1396":20,"1400":1,"1402":9,"1417":1,"1436":4,"1438":1,"1467":2,"1492":3,"1496":1,"1525":1,"1577":1,"1665":1,"1675":1,"1839":1,"1846":1,"1889":1,"1892":1,"1944":2,"1946":1,"1947":2,"1949":2,"1950":2,"2156":1,"2158":2,"2162":2,"2185":1,"2189":1,"2190":1,"2195":1,"2234":2}}],["drains10000messages",{"3":{"1492":1}}],["drainsource",{"3":{"1286":1}}],["drains",{"3":{"0":2,"25":1,"27":1,"47":1,"124":1,"193":1,"198":1,"255":1,"413":1,"518":1,"571":1,"583":1,"673":1,"698":1,"701":1,"703":1,"1034":1,"1037":1,"1041":1,"1100":1,"1140":1,"1212":1,"1237":1,"1254":2,"1257":1,"1258":1,"1259":8,"1273":1,"1275":3,"1286":8,"1318":1,"1323":4,"1324":1,"1396":2,"1399":1,"1402":1,"1415":1,"1416":1,"1417":6,"1436":2,"1438":2,"1526":1,"1577":1,"1665":1,"1790":1,"1812":1,"1837":1,"1841":2,"1851":2,"2013":1,"2123":1,"2159":1,"2162":1,"2185":1}}],["dr",{"0":{"1474":1,"1475":2,"2037":1},"3":{"0":3,"68":2,"69":1,"70":1,"87":1,"625":4,"626":5,"628":4,"756":1,"971":1,"972":1,"973":1,"974":1,"1212":3,"1452":1,"1455":2,"1460":15,"1461":2,"1463":1,"1467":1,"1471":3,"1473":1,"1474":7,"1475":63,"1476":1,"1482":4,"1483":8,"1484":2,"1486":2,"1496":6,"1525":3,"1526":10,"1534":1,"1535":2,"1588":1,"1590":3,"1591":9,"1596":1,"1600":3,"1706":2,"1710":2,"2035":4,"2038":1,"2039":1,"2234":1}}],["drilling",{"3":{"1526":1,"1555":1}}],["drills",{"3":{"1474":1,"1707":1,"2039":1}}],["drillresult",{"3":{"1199":2,"1207":1}}],["drill",{"0":{"1475":3,"1710":1},"2":{"1475":3},"3":{"0":2,"68":1,"69":1,"70":1,"625":7,"626":3,"627":1,"628":3,"630":1,"1212":1,"1438":1,"1452":1,"1455":1,"1460":23,"1461":2,"1467":1,"1471":4,"1474":16,"1475":91,"1482":6,"1483":11,"1484":4,"1496":7,"1525":3,"1526":8,"1535":2,"1575":1,"1577":3,"1582":1,"1586":1,"1590":2,"1591":7,"1600":2,"1670":1,"1674":1,"1706":4,"1707":5,"1709":4,"1710":5,"1800":1,"2030":1,"2035":12,"2036":1,"2038":4,"2039":4,"2148":1,"2234":1}}],["drilled",{"0":{"2035":1},"1":{"2030":1,"2031":1,"2032":1,"2033":1,"2034":1,"2035":1,"2036":1,"2037":1,"2038":1,"2039":1},"3":{"0":1,"68":2,"69":1,"71":1,"294":1,"568":1,"608":1,"614":1,"625":1,"630":1,"758":1,"762":1,"1212":1,"1467":1,"1474":1,"1475":1,"1525":1,"1526":1,"1535":1,"1588":1,"1590":1,"1591":1,"1600":1,"2029":1,"2030":3,"2035":2,"2038":2,"2039":1,"2211":1,"2234":1}}],["driving",{"3":{"0":2,"39":1,"572":1,"650":1,"1018":1,"1229":1,"1259":1,"1286":2,"1300":1,"1311":1,"1324":3,"1339":1,"1402":1,"1417":2,"1431":1,"1436":9,"1437":1,"1438":1,"1577":1,"2000":1,"2055":1}}],["drive",{"3":{"864":1,"953":1,"1162":1,"1229":3,"1230":1,"1248":1,"1256":1,"1259":4,"1286":4,"1317":1,"1320":1,"1323":1,"1324":7,"1335":1,"1339":1,"1342":1,"1350":1,"1359":4,"1369":1,"1396":3,"1402":1,"1415":1,"1417":1,"1428":1,"1436":7,"1438":1,"1487":1,"1489":2,"1513":1,"1526":1,"1566":1,"1591":1,"1868":1,"1948":1,"2081":1,"2171":1,"2241":1}}],["driven",{"0":{"1355":1,"1508":1,"1541":1,"1543":1},"1":{"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1},"3":{"0":5,"96":1,"117":2,"126":1,"136":1,"142":1,"157":1,"165":1,"200":1,"297":1,"359":1,"365":1,"402":1,"507":1,"549":1,"564":1,"572":1,"574":1,"599":1,"690":1,"706":2,"759":1,"838":1,"856":1,"881":2,"916":1,"923":1,"927":1,"947":1,"1012":1,"1050":1,"1124":2,"1194":1,"1202":1,"1203":1,"1212":3,"1213":1,"1216":2,"1225":1,"1230":1,"1231":2,"1234":1,"1236":1,"1237":11,"1238":1,"1239":1,"1245":1,"1247":5,"1249":1,"1259":28,"1260":1,"1269":2,"1270":10,"1271":2,"1281":1,"1286":23,"1300":2,"1304":1,"1309":17,"1311":7,"1312":3,"1316":1,"1317":1,"1323":12,"1324":21,"1326":1,"1333":1,"1339":2,"1340":1,"1343":1,"1345":1,"1346":1,"1350":52,"1352":1,"1355":1,"1359":85,"1369":1,"1370":1,"1380":9,"1383":1,"1384":1,"1390":1,"1395":7,"1396":38,"1402":25,"1403":1,"1405":1,"1413":1,"1415":26,"1416":1,"1417":10,"1421":1,"1427":1,"1435":1,"1436":63,"1437":1,"1438":8,"1441":2,"1443":2,"1446":2,"1450":2,"1454":1,"1455":1,"1463":1,"1467":1,"1476":1,"1487":1,"1488":3,"1489":3,"1493":1,"1496":5,"1499":2,"1512":1,"1525":1,"1526":3,"1535":2,"1546":1,"1547":1,"1551":1,"1557":1,"1568":1,"1577":6,"1581":1,"1582":1,"1583":1,"1585":1,"1586":1,"1591":3,"1597":1,"1600":1,"1621":1,"1627":1,"1638":1,"1652":1,"1664":1,"1668":1,"1752":1,"1796":2,"1800":1,"1812":1,"1815":2,"1821":1,"1862":1,"1888":1,"1892":2,"1929":3,"1933":1,"1948":1,"1956":1,"2014":1,"2044":1,"2046":1,"2049":1,"2074":1,"2081":1,"2098":1,"2100":1,"2116":1,"2144":1,"2164":1,"2169":1,"2184":1,"2214":1,"2215":3,"2218":1,"2219":1,"2220":2,"2221":2,"2232":2,"2240":1,"2241":2,"2242":2}}],["drives",{"3":{"0":1,"70":1,"142":1,"166":1,"176":1,"239":1,"330":1,"536":2,"572":2,"625":1,"627":1,"657":1,"832":1,"838":1,"859":1,"861":3,"863":1,"864":1,"907":2,"925":1,"954":1,"1217":1,"1229":3,"1274":1,"1286":7,"1300":2,"1310":2,"1311":7,"1315":1,"1323":4,"1324":12,"1337":1,"1339":6,"1342":1,"1350":8,"1359":9,"1369":2,"1380":5,"1395":4,"1396":9,"1402":1,"1406":2,"1415":2,"1416":2,"1417":4,"1425":1,"1427":1,"1428":1,"1433":2,"1435":1,"1436":28,"1438":12,"1456":1,"1487":1,"1488":2,"1489":1,"1490":1,"1492":1,"1513":1,"1611":2,"1650":1,"1664":1,"1726":1,"1732":1,"1765":1,"1805":1,"1865":1,"1881":1,"1988":1,"2025":1,"2032":1,"2045":1,"2056":2,"2077":1,"2179":1}}],["driver",{"3":{"0":1,"96":1,"388":1,"1436":4,"1455":2,"1496":1}}],["drifting",{"3":{"148":1,"841":1,"1247":1,"1259":1,"1271":1,"1300":1,"1301":1,"1309":2,"1311":2,"1324":2,"1332":1,"1339":2,"1359":5,"1369":1,"1380":1,"1395":1,"1402":2,"1415":1,"1417":1,"1431":1,"1436":9,"1441":1,"1443":1,"1475":1,"2032":1,"2043":1,"2082":1,"2099":1}}],["drift",{"3":{"0":5,"26":1,"57":1,"61":1,"70":1,"94":1,"100":1,"126":1,"130":2,"136":1,"137":1,"138":1,"215":1,"242":1,"256":1,"265":1,"291":1,"293":1,"296":2,"331":1,"341":1,"372":1,"373":1,"426":1,"449":1,"484":1,"493":1,"511":1,"526":1,"529":1,"530":1,"545":1,"558":1,"567":1,"608":1,"619":1,"634":2,"658":1,"691":1,"734":2,"764":2,"766":8,"767":3,"768":2,"783":1,"784":1,"821":1,"831":1,"832":1,"836":1,"838":2,"839":1,"872":1,"883":1,"940":1,"973":1,"1006":1,"1014":1,"1018":3,"1019":2,"1020":1,"1101":1,"1124":1,"1212":2,"1224":1,"1227":1,"1229":3,"1237":1,"1240":1,"1253":1,"1262":1,"1270":3,"1271":2,"1278":1,"1286":6,"1300":12,"1301":2,"1305":1,"1309":4,"1311":9,"1312":1,"1320":1,"1323":3,"1324":12,"1330":2,"1336":1,"1339":9,"1350":9,"1356":1,"1358":1,"1359":39,"1366":1,"1369":2,"1372":1,"1380":2,"1384":1,"1395":10,"1396":17,"1398":1,"1402":9,"1405":1,"1409":1,"1415":4,"1416":2,"1427":2,"1431":2,"1436":38,"1438":2,"1441":1,"1442":1,"1443":1,"1449":1,"1453":2,"1454":3,"1455":6,"1457":4,"1461":2,"1467":3,"1469":2,"1476":2,"1479":1,"1489":3,"1490":1,"1492":1,"1496":31,"1500":1,"1524":1,"1525":1,"1526":12,"1528":1,"1531":1,"1535":1,"1545":1,"1546":1,"1553":1,"1554":2,"1562":1,"1576":1,"1577":8,"1579":1,"1582":1,"1585":1,"1586":1,"1591":7,"1592":1,"1600":1,"1614":1,"1654":1,"1666":1,"1671":2,"1673":1,"1677":1,"1686":1,"1731":1,"1805":1,"1809":1,"1818":1,"1819":1,"1827":1,"1828":1,"1830":1,"1834":1,"1928":1,"1929":1,"1987":2,"1992":1,"2007":1,"2012":1,"2015":1,"2025":1,"2043":2,"2044":1,"2050":1,"2075":1,"2077":2,"2081":1,"2085":1,"2132":1,"2133":1,"2137":1,"2155":1,"2160":1,"2161":1,"2178":1,"2195":1}}],["driftedmarkedcommandhandler",{"3":{"1199":2,"1207":1}}],["driftedmarkedcommand",{"3":{"1199":3,"1207":1,"1270":1}}],["driftedtests",{"3":{"1198":1,"1199":4,"1207":2,"1436":24,"1496":2}}],["drifted",{"3":{"0":2,"136":2,"137":1,"140":1,"142":1,"161":1,"213":1,"251":1,"252":2,"254":2,"257":1,"258":1,"259":1,"291":1,"373":1,"466":1,"609":1,"644":1,"648":1,"744":1,"857":1,"876":2,"952":1,"959":1,"1020":1,"1322":1,"1323":1,"1324":3,"1330":1,"1339":1,"1350":1,"1380":1,"1384":1,"1396":1,"1431":1,"1436":20,"1460":1,"1474":1,"1476":1,"1487":1,"1489":2,"1490":1,"1496":9,"1500":1,"2045":2,"2047":1,"2150":1}}],["drifts",{"3":{"0":1,"185":1,"329":1,"517":1,"634":1,"706":1,"791":1,"973":1,"1006":1,"1237":1,"1396":1,"1415":1,"1436":6,"1453":1,"1662":1,"1673":1,"1701":1,"1730":1,"1834":1,"1948":1,"1960":2,"1986":1,"1992":1,"2051":1,"2099":1,"2149":1,"2157":1}}],["degenerate",{"3":{"1247":1,"1324":1}}],["degrees",{"3":{"1315":1,"1417":2}}],["degree",{"3":{"583":2,"1315":2,"1323":2,"1417":1,"1881":3}}],["degradable",{"3":{"1311":2,"1670":1}}],["degradationwarned",{"3":{"1323":2}}],["degradation",{"3":{"68":1,"71":1,"182":1,"235":2,"413":1,"682":1,"725":1,"727":1,"898":1,"901":1,"996":2,"1259":1,"1270":1,"1286":1,"1300":4,"1301":1,"1309":3,"1311":3,"1316":1,"1323":6,"1324":5,"1332":2,"1339":3,"1349":1,"1350":4,"1358":1,"1359":4,"1369":2,"1395":2,"1396":5,"1415":1,"1416":1,"1417":17,"1438":4,"1443":3,"1450":1,"1467":1,"1524":2,"1526":2,"1544":1,"1559":1,"1566":1,"1577":1,"1638":1,"1707":2,"1910":1,"1912":1,"2008":1,"2069":1,"2164":1}}],["degrading",{"3":{"212":1,"601":1,"684":1,"700":1,"1237":1,"1284":1,"1286":1,"1300":2,"1311":1,"1324":2,"1339":1,"1350":1,"1359":2,"1380":2,"1391":1,"1396":1,"1401":1,"1402":1,"1415":1,"1417":1,"1455":1,"1467":1,"1851":1,"1859":1,"1927":1,"2019":1,"2199":1}}],["degradeforeignkey",{"3":{"1286":2}}],["degradetestcontext",{"3":{"1199":2,"1207":1}}],["degradecustomer",{"3":{"1198":1,"1199":4,"1207":1}}],["degradeorder",{"3":{"1198":1,"1199":4,"1207":1}}],["degraded",{"2":{"157":1,"159":1,"161":1,"1909":1,"1911":1},"3":{"157":2,"159":1,"161":1,"440":1,"583":2,"585":1,"603":1,"676":1,"726":1,"821":1,"932":1,"997":1,"1247":1,"1270":1,"1286":1,"1300":1,"1301":2,"1304":1,"1309":2,"1311":9,"1323":7,"1337":3,"1339":5,"1396":1,"1415":1,"1417":10,"1436":2,"1443":1,"1577":1,"1627":1,"1666":1,"1858":1,"1859":1,"1909":2,"1911":1,"1934":1,"2007":1,"2014":1,"2128":1,"2158":1}}],["degrade",{"3":{"49":1,"166":1,"167":1,"168":1,"169":1,"413":1,"585":1,"665":1,"724":1,"997":1,"1083":1,"1086":1,"1212":2,"1228":1,"1247":1,"1270":3,"1286":4,"1301":1,"1309":1,"1311":1,"1323":3,"1324":3,"1339":1,"1356":1,"1359":6,"1377":1,"1380":1,"1395":3,"1396":7,"1415":3,"1417":6,"1436":1,"1438":4,"1467":2,"1500":1,"1510":1,"1531":1,"1663":1,"1708":1,"1849":1,"1860":1,"1862":1,"1864":1,"1868":1,"1970":1,"2054":1,"2081":1,"2121":1,"2128":1,"2232":1}}],["degradesgracefully",{"3":{"1707":1}}],["degradestotheplaininbox",{"3":{"1436":1}}],["degrades",{"0":{"2069":1},"3":{"0":2,"178":1,"235":1,"255":1,"266":1,"350":1,"391":1,"461":2,"507":1,"511":1,"584":1,"792":1,"854":1,"896":1,"905":1,"995":1,"1212":1,"1229":1,"1236":1,"1237":1,"1247":2,"1250":1,"1259":2,"1264":1,"1266":1,"1270":2,"1283":1,"1285":1,"1286":5,"1290":1,"1299":1,"1300":9,"1301":5,"1309":1,"1311":4,"1312":2,"1322":1,"1323":8,"1324":5,"1328":1,"1332":1,"1339":5,"1350":1,"1359":10,"1378":1,"1380":4,"1395":14,"1396":7,"1401":1,"1402":3,"1410":1,"1415":6,"1416":2,"1417":14,"1438":2,"1443":2,"1444":1,"1467":1,"1476":1,"1534":1,"1641":1,"1666":1,"1668":1,"1685":1,"1708":1,"1729":1,"1751":1,"1772":1,"1790":1,"1858":1,"1917":1,"1922":1,"1923":1,"1924":1,"1952":1,"1977":1,"1982":1,"1992":1,"2002":1,"2008":1,"2069":1,"2085":1,"2088":1,"2120":1,"2121":1,"2125":1,"2234":1}}],["dequeued",{"3":{"1323":1}}],["deque",{"2":{"1453":1},"3":{"1213":1,"1436":2,"1488":1}}],["dereferenced",{"3":{"1359":1,"2133":1}}],["dereference",{"3":{"1300":1,"1324":1,"1372":1,"1396":1,"1467":1}}],["dereferences",{"3":{"448":1,"1311":1,"1359":3,"1436":2}}],["dereferencing",{"3":{"1300":1,"1436":1}}],["deregistration",{"3":{"1247":1}}],["derivable",{"3":{"1396":1,"1436":1,"1638":1}}],["derivatives",{"3":{"1599":1}}],["derivative",{"3":{"741":1,"743":1,"1050":1,"1051":1,"1235":2,"1237":2,"1395":2}}],["derivations",{"3":{"0":1,"963":1,"964":1,"1227":1,"1286":1,"1359":1,"1805":1}}],["derivation",{"3":{"0":2,"279":1,"309":2,"539":1,"946":1,"963":1,"1004":1,"1006":1,"1018":1,"1282":1,"1289":1,"1300":10,"1311":1,"1395":2,"1396":3,"1436":5,"1453":1,"1454":1,"1856":1,"1902":2}}],["deriving",{"3":{"0":1,"32":1,"202":1,"218":1,"634":1,"723":1,"725":1,"739":1,"742":1,"782":2,"854":1,"883":1,"932":1,"946":1,"963":3,"966":1,"1026":1,"1042":1,"1092":1,"1237":1,"1239":1,"1259":1,"1270":2,"1279":1,"1286":13,"1300":4,"1309":3,"1311":2,"1323":1,"1324":2,"1350":3,"1359":11,"1369":2,"1380":1,"1382":1,"1395":5,"1396":2,"1402":2,"1415":3,"1416":1,"1436":20,"1441":2,"1467":1,"2056":1,"2082":1,"2178":1,"2186":1}}],["derivequestionentity",{"3":{"1359":1}}],["derive",{"3":{"0":1,"111":1,"305":1,"459":1,"465":1,"540":1,"651":1,"657":1,"780":2,"782":1,"784":1,"881":3,"954":1,"956":1,"960":1,"963":1,"1034":1,"1058":1,"1212":3,"1229":2,"1235":1,"1237":2,"1247":2,"1252":1,"1259":5,"1270":1,"1271":1,"1282":1,"1286":2,"1300":6,"1301":1,"1309":2,"1311":2,"1313":1,"1317":1,"1323":6,"1324":5,"1339":2,"1342":1,"1345":2,"1350":5,"1353":1,"1359":4,"1361":1,"1369":1,"1371":2,"1380":2,"1383":1,"1395":6,"1396":7,"1399":1,"1402":4,"1415":1,"1417":1,"1436":6,"1454":2,"1585":1,"1663":1,"1769":2,"1856":1,"1857":1,"1886":1,"1925":1,"1927":1,"2031":1,"2200":1}}],["derivedoverride",{"3":{"2001":1}}],["derivedatasourcekey",{"3":{"1286":2}}],["derivedupdatecommandtests",{"2":{"926":1},"3":{"926":1,"1199":1,"1207":1}}],["derived",{"1":{"631":1,"632":1,"633":1,"634":1,"635":1,"636":1},"3":{"0":5,"135":1,"147":1,"175":1,"186":1,"208":1,"235":1,"273":1,"328":1,"350":1,"507":1,"539":1,"585":1,"609":2,"631":1,"633":1,"780":2,"922":1,"923":1,"926":2,"927":1,"946":2,"954":1,"964":1,"1004":1,"1017":1,"1018":1,"1026":1,"1034":1,"1037":1,"1116":1,"1125":1,"1161":1,"1212":1,"1221":1,"1229":5,"1235":1,"1237":13,"1240":1,"1242":1,"1244":1,"1247":3,"1256":1,"1259":5,"1263":1,"1265":5,"1270":17,"1271":1,"1286":12,"1291":1,"1300":21,"1309":1,"1310":3,"1311":12,"1312":1,"1317":1,"1321":1,"1323":9,"1324":13,"1326":1,"1339":9,"1342":1,"1347":1,"1348":1,"1350":5,"1354":2,"1359":21,"1362":1,"1369":6,"1372":1,"1380":1,"1383":1,"1385":1,"1395":28,"1396":15,"1402":6,"1415":5,"1416":1,"1417":3,"1427":3,"1431":2,"1436":44,"1438":4,"1441":2,"1443":1,"1454":1,"1455":1,"1465":1,"1467":2,"1470":1,"1476":1,"1488":1,"1492":1,"1496":5,"1529":1,"1538":1,"1571":1,"1580":1,"1594":1,"1630":4,"1631":2,"1635":1,"1640":1,"1651":1,"1658":1,"1666":2,"1667":1,"1684":1,"1695":1,"1705":1,"1715":1,"1727":2,"1755":1,"1764":5,"1765":1,"1767":2,"1777":1,"1805":1,"1810":1,"1849":2,"1856":1,"1880":1,"1965":2,"1982":1,"2001":3,"2044":1,"2047":1,"2077":1,"2085":1,"2091":1,"2112":1,"2234":1}}],["derivesfrombaseentity",{"3":{"1436":2}}],["derives",{"3":{"0":6,"25":1,"81":1,"109":1,"166":1,"231":1,"310":1,"370":1,"459":1,"499":1,"501":1,"534":1,"536":2,"545":1,"549":1,"575":1,"585":1,"618":1,"741":1,"751":1,"879":1,"884":1,"905":1,"909":1,"922":1,"925":1,"926":2,"944":1,"946":1,"954":1,"964":1,"972":1,"974":1,"1004":1,"1036":1,"1050":1,"1140":1,"1212":1,"1213":1,"1229":1,"1237":3,"1259":4,"1270":2,"1271":2,"1276":1,"1286":17,"1288":2,"1292":1,"1297":1,"1300":9,"1309":4,"1310":1,"1311":10,"1318":1,"1323":5,"1324":6,"1328":1,"1339":2,"1342":1,"1350":6,"1352":2,"1355":2,"1357":2,"1359":29,"1364":1,"1369":2,"1371":1,"1379":1,"1380":5,"1388":1,"1389":1,"1395":8,"1396":4,"1402":4,"1415":2,"1416":1,"1417":1,"1427":1,"1431":2,"1436":28,"1449":1,"1454":2,"1488":2,"1492":1,"1810":1,"1902":2,"1908":1,"2044":1,"2056":1,"2074":1,"2076":1,"2165":1,"2167":1,"2169":1}}],["deal",{"3":{"1350":1,"1931":1}}],["deactivation",{"3":{"497":2,"499":1,"1755":2,"1776":1}}],["deactivating",{"3":{"458":1}}],["deactivate",{"2":{"497":1,"1755":1,"1776":1},"3":{"497":1,"499":1,"1324":1,"1436":2,"1755":1,"1769":1,"1776":1}}],["deactivated",{"3":{"284":1,"460":1,"499":1,"1300":2,"1417":1,"1455":1,"1461":1,"1747":2,"1983":1,"2068":1}}],["death",{"3":{"444":1,"2129":1}}],["deadletterasync",{"3":{"1286":1}}],["deadletteredon",{"2":{"2188":1},"3":{"1286":5,"1323":2,"2188":1}}],["deadlettered",{"2":{"1273":1},"3":{"1273":1}}],["deadlettercounter",{"3":{"707":1,"1259":2,"1286":1}}],["deadletterretentiondays",{"2":{"818":1,"1256":1},"3":{"0":2,"20":1,"24":1,"818":1,"1256":1,"1259":1,"1286":1,"1467":1,"1496":1,"1577":1,"1845":1}}],["deadlocking",{"3":{"1493":1}}],["deadlock",{"0":{"1328":1},"3":{"55":1,"481":1,"1066":1,"1068":1,"1286":1,"1301":1,"1312":1,"1328":2,"1339":1,"1378":1,"1441":3,"1492":1,"1549":1,"1670":1,"1684":1,"1792":1,"2010":1,"2031":1,"2057":1}}],["deadlocks",{"3":{"0":1,"483":1,"1212":1,"1300":1,"1430":1,"1653":1,"1700":1,"2023":1}}],["deadlineexceeded",{"3":{"100":1,"1396":1}}],["deadlinescheduler",{"2":{"814":1},"3":{"814":1}}],["deadlines",{"3":{"0":1,"810":1,"1160":1,"1212":1,"1380":1,"2170":1,"2171":1}}],["deadline",{"0":{"539":1,"813":1},"3":{"0":5,"237":1,"534":2,"536":2,"538":2,"539":8,"541":2,"724":1,"725":1,"808":1,"809":2,"810":3,"812":1,"813":3,"815":2,"1067":1,"1153":1,"1212":2,"1286":1,"1300":2,"1307":1,"1309":2,"1312":3,"1323":2,"1359":1,"1378":2,"1380":10,"1396":8,"1413":1,"1415":4,"1430":1,"1433":1,"1436":4,"1438":1,"1449":1,"1467":1,"1476":1,"1481":1,"1496":1,"1600":1,"1780":1,"1790":1,"1927":1,"1946":1,"2163":2,"2167":1,"2169":4,"2170":3,"2171":1,"2234":1}}],["dead",{"0":{"1256":1},"2":{"20":1,"397":1,"1256":1,"1442":1,"2193":1},"3":{"0":11,"15":4,"17":1,"19":2,"20":3,"21":1,"22":2,"23":1,"24":7,"26":1,"27":3,"71":1,"122":1,"125":1,"195":1,"223":1,"229":1,"230":3,"305":1,"310":1,"395":4,"396":1,"397":3,"398":1,"399":2,"404":2,"406":1,"409":1,"413":2,"444":1,"464":2,"465":1,"497":1,"536":1,"537":1,"539":1,"607":1,"608":1,"609":4,"611":2,"627":1,"708":1,"709":1,"751":1,"756":1,"791":1,"810":2,"815":1,"817":1,"818":2,"819":1,"820":1,"823":1,"848":1,"849":2,"896":1,"907":1,"935":1,"963":1,"1011":1,"1012":1,"1041":1,"1042":3,"1044":1,"1046":1,"1075":1,"1076":1,"1099":1,"1100":1,"1144":1,"1212":2,"1233":2,"1237":4,"1247":1,"1255":1,"1256":6,"1258":1,"1259":36,"1270":1,"1271":3,"1275":3,"1286":16,"1300":6,"1301":2,"1309":2,"1311":7,"1317":1,"1318":2,"1323":15,"1324":10,"1330":1,"1339":2,"1355":1,"1359":7,"1391":2,"1392":1,"1395":9,"1396":9,"1402":1,"1415":3,"1417":10,"1436":11,"1438":5,"1442":1,"1443":1,"1456":1,"1465":1,"1467":4,"1469":1,"1476":3,"1482":1,"1489":1,"1496":5,"1524":1,"1526":5,"1531":2,"1547":3,"1552":1,"1572":1,"1577":2,"1589":1,"1591":4,"1596":3,"1599":1,"1615":1,"1617":1,"1661":1,"1665":4,"1677":1,"1841":1,"1843":1,"1845":1,"1910":1,"1922":1,"1923":2,"1944":1,"1950":1,"1984":2,"2007":1,"2008":1,"2033":2,"2123":1,"2156":1,"2158":4,"2160":1,"2161":1,"2167":2,"2169":1,"2171":1,"2184":4,"2185":1,"2189":1,"2192":1,"2193":3,"2195":4}}],["de",{"3":{"219":1,"649":1,"651":1,"1059":1,"1140":1,"1270":1,"1271":2,"1286":2,"1300":3,"1311":3,"1323":2,"1324":4,"1339":2,"1359":5,"1369":1,"1395":4,"1415":2,"1433":1,"1436":3,"1496":1,"1526":1,"1686":4,"1765":1,"1830":1,"2152":1}}],["detour",{"3":{"1323":2}}],["determinable",{"0":{"1451":1,"1470":1,"1484":1,"1500":1},"3":{"530":1,"599":1,"629":1,"665":1,"1190":1,"1237":1,"1247":1,"1259":2,"1286":8,"1300":2,"1311":5,"1312":1,"1323":10,"1324":5,"1339":8,"1359":14,"1369":2,"1380":4,"1395":7,"1396":7,"1402":2,"1415":9,"1416":5,"1417":9,"1436":3,"1458":1,"1467":1,"1470":2,"1496":1}}],["determinism",{"3":{"360":1,"364":1,"1286":3,"1300":2,"1359":1,"1436":1,"1438":1,"1465":1,"2146":1}}],["deterministically",{"3":{"543":1,"549":1,"905":1,"954":1,"1256":1,"1259":3,"1263":1,"1270":1,"1300":1,"1301":1,"1306":1,"1312":1,"1323":1,"1324":1,"1364":1,"1383":1,"1395":1,"1396":2,"1417":2,"1427":1,"1436":3,"1438":1,"1454":1,"1488":1,"1592":1}}],["deterministic",{"3":{"0":1,"23":1,"157":1,"295":1,"359":2,"360":1,"361":2,"363":2,"545":1,"549":1,"551":1,"591":1,"592":2,"721":1,"742":1,"905":1,"907":1,"1019":2,"1163":1,"1227":1,"1229":2,"1284":2,"1286":10,"1290":1,"1300":6,"1309":1,"1311":3,"1323":1,"1324":2,"1350":2,"1355":1,"1359":6,"1369":1,"1380":1,"1392":2,"1395":6,"1396":3,"1402":2,"1415":1,"1417":1,"1427":2,"1428":1,"1432":1,"1435":3,"1436":13,"1438":3,"1455":4,"1465":1,"1479":2,"1488":1,"1492":3,"1496":1,"1526":1,"1551":1,"1577":2,"1590":1,"1591":1,"1675":1,"1805":1,"1982":1,"2053":1,"2061":1,"2144":2,"2146":1,"2147":1,"2148":1,"2172":1}}],["determine",{"3":{"1395":1,"1415":1,"1454":1,"1631":1,"1776":1}}],["determined",{"3":{"283":1,"990":1,"1286":1,"1324":1,"1492":1,"1495":1,"1631":1,"1641":1,"2002":1}}],["determines",{"3":{"20":1,"162":1,"389":1,"1286":2,"1395":1,"1630":4,"1639":1,"2003":1,"2052":1}}],["detectability",{"3":{"1981":1}}],["detectable",{"3":{"498":1,"906":1,"907":1,"1270":1,"1286":1,"1300":1,"1359":1,"1366":1,"1369":2,"1436":1,"1500":1}}],["detectchanges",{"3":{"1273":1,"1286":2,"1585":1}}],["detectchangesscope",{"3":{"1199":2,"1203":1,"1207":1,"1273":1,"1286":3,"1496":1}}],["detectchangesonce",{"3":{"715":1,"1273":1,"1286":3}}],["detect",{"2":{"443":1},"3":{"443":1,"1116":1,"1259":1,"1270":2,"1273":1,"1286":7,"1300":1,"1324":1,"1339":1,"1350":1,"1359":5,"1396":1,"1417":1,"1436":1,"1467":1,"1833":1,"1877":1}}],["detector",{"3":{"305":1,"339":1,"344":1,"1020":1,"1283":1,"1286":3,"1309":1,"1323":1,"1359":1,"1368":2,"1396":5,"1402":1,"1424":1,"1436":21,"1438":1,"1467":2,"1526":1,"1531":1,"1532":1,"1577":1,"1707":1,"1985":3}}],["detects",{"3":{"291":1,"948":1,"974":1,"1237":1,"1274":1,"1286":3,"1300":2,"1324":2,"1332":1,"1339":4,"1352":1,"1359":1,"1380":1,"1395":1,"1396":1,"1417":1,"1430":2,"1431":1,"1436":5,"1457":2,"1661":1,"1728":1,"1729":1,"1876":1,"1903":1}}],["detected",{"3":{"0":1,"259":1,"382":1,"741":1,"792":1,"1067":1,"1168":1,"1286":2,"1311":2,"1324":1,"1339":3,"1350":1,"1366":1,"1417":1,"1436":2,"1443":1,"1455":1,"1571":1,"1729":1}}],["detecting",{"3":{"0":1,"593":2,"733":1,"1068":1,"1284":1,"1359":1,"1436":1,"1591":1,"1729":1}}],["detectiontestdbcontext",{"3":{"1199":2,"1207":1}}],["detection",{"1":{"496":1,"497":1,"498":1,"499":1,"500":1,"501":1,"502":1,"503":1,"1980":1,"1981":1,"1982":1,"1983":1,"1984":1,"1985":1},"3":{"0":3,"403":1,"496":1,"497":1,"498":1,"499":1,"500":2,"501":2,"506":1,"510":1,"608":1,"609":1,"612":1,"614":1,"692":1,"715":2,"733":2,"759":1,"762":1,"801":1,"804":1,"903":1,"904":1,"905":3,"907":3,"910":1,"1058":1,"1192":1,"1212":1,"1237":1,"1247":1,"1259":2,"1270":2,"1273":1,"1283":1,"1286":15,"1287":1,"1290":2,"1300":17,"1323":4,"1324":6,"1338":1,"1339":3,"1359":1,"1396":1,"1406":1,"1415":3,"1417":13,"1433":1,"1436":9,"1437":1,"1438":3,"1455":1,"1461":1,"1467":3,"1469":1,"1476":1,"1486":1,"1496":2,"1526":1,"1531":1,"1532":1,"1585":1,"1639":1,"1641":3,"1660":1,"1712":1,"1722":1,"1729":1,"1765":1,"1779":1,"1979":1,"1980":1,"1981":1,"1982":2,"1983":1,"1984":1,"1985":1,"2148":1,"2196":1,"2210":1,"2222":1,"2234":1}}],["detachobserverasync",{"3":{"1324":1}}],["detaching",{"3":{"1324":1,"1359":1,"1395":1,"1436":1}}],["detached",{"3":{"235":1,"237":1,"898":1,"1251":1,"1259":1,"1286":4,"1339":2,"1350":1,"1359":1,"1454":1}}],["detaches",{"3":{"0":1,"201":2,"1259":1,"1274":1,"1286":1,"1324":1,"1359":3}}],["detach",{"3":{"24":1,"1286":1,"1324":3,"1359":3}}],["detailpage",{"3":{"1496":1}}],["detailpagebasetests",{"3":{"1199":1,"1207":3,"1324":1}}],["detailpagebase",{"3":{"1192":1,"1199":2,"1203":1,"1207":2,"1324":4,"1384":3,"1395":22,"1496":4}}],["detailhref",{"3":{"1324":1}}],["detailed",{"3":{"1312":2,"1313":1,"1324":1,"1340":1,"1441":1,"1630":1,"1641":1,"1663":1,"1764":1}}],["detail",{"0":{"1384":1,"1822":1,"1872":1,"1909":1},"2":{"1926":1},"3":{"0":1,"1":1,"62":1,"72":1,"109":4,"261":1,"342":1,"556":2,"557":1,"559":1,"699":1,"725":1,"748":1,"806":1,"861":2,"905":1,"988":1,"1016":1,"1018":2,"1026":1,"1082":1,"1093":1,"1116":1,"1190":1,"1229":2,"1237":3,"1246":1,"1247":9,"1252":1,"1259":4,"1270":5,"1271":1,"1275":1,"1286":15,"1290":1,"1300":10,"1301":1,"1309":5,"1311":27,"1312":9,"1314":1,"1323":6,"1324":30,"1333":1,"1339":7,"1345":1,"1350":8,"1359":21,"1363":1,"1366":1,"1369":3,"1380":7,"1384":4,"1385":3,"1386":1,"1387":2,"1388":5,"1389":2,"1391":1,"1392":2,"1395":89,"1396":18,"1399":1,"1402":6,"1410":2,"1415":14,"1416":1,"1417":7,"1436":18,"1438":2,"1443":1,"1453":1,"1455":1,"1467":1,"1476":2,"1479":1,"1481":1,"1487":1,"1496":3,"1524":1,"1526":2,"1531":1,"1535":2,"1591":2,"1600":2,"1627":12,"1631":1,"1632":2,"1635":2,"1636":2,"1639":2,"1640":2,"1641":1,"1686":2,"1700":1,"1713":1,"1723":1,"1748":1,"1750":7,"1758":2,"1759":1,"1760":2,"1768":2,"1773":2,"1790":1,"1806":1,"1830":1,"1851":1,"1873":1,"1905":1,"1909":1,"1926":1,"1939":1,"1988":1,"2043":1,"2044":1,"2046":1,"2056":1,"2059":1,"2096":1,"2128":1,"2138":1,"2152":1,"2176":1,"2177":1,"2181":1,"2195":1}}],["detailsurl",{"3":{"1395":4}}],["details",{"1":{"1925":1,"1926":1,"1927":1,"1928":1,"1929":1,"1930":1},"3":{"0":2,"175":1,"341":2,"343":1,"409":1,"453":1,"497":1,"572":4,"574":4,"578":2,"657":1,"741":1,"819":1,"1018":1,"1019":1,"1091":1,"1212":1,"1221":1,"1224":1,"1226":1,"1227":1,"1229":6,"1247":1,"1251":1,"1259":2,"1263":1,"1270":1,"1271":1,"1276":1,"1286":5,"1300":3,"1301":1,"1311":16,"1312":1,"1323":1,"1324":6,"1328":1,"1339":2,"1340":1,"1347":1,"1349":1,"1350":2,"1355":1,"1359":9,"1369":1,"1380":2,"1383":1,"1395":12,"1396":8,"1402":8,"1406":1,"1415":2,"1421":1,"1423":1,"1427":1,"1435":2,"1436":4,"1438":2,"1442":1,"1443":1,"1449":1,"1454":1,"1455":2,"1459":1,"1487":1,"1488":1,"1489":2,"1492":1,"1526":2,"1546":1,"1551":1,"1591":2,"1630":3,"1631":3,"1640":1,"1651":1,"1653":1,"1685":1,"1751":1,"1765":1,"1768":4,"1770":2,"1772":1,"1773":1,"1779":1,"1839":1,"1841":1,"1859":1,"1873":1,"1874":1,"1908":1,"1919":1,"1924":1,"1925":1,"1926":1,"1927":3,"1930":1,"1988":1,"2020":1,"2056":1,"2069":1,"2074":1,"2076":1,"2077":1,"2133":1,"2177":1,"2189":1,"2199":1,"2210":1}}],["deeply",{"3":{"1395":1}}],["deeplinkroute",{"3":{"1396":2,"1417":5}}],["deeplinkrouteshapetests",{"3":{"1199":1,"1207":2,"1417":1}}],["deeplinkrouteeventargs",{"3":{"1199":4,"1203":1,"1207":2,"1417":12}}],["deeplinkrouteguard",{"2":{"418":1,"428":1},"3":{"418":1,"428":2}}],["deeplinkdispatchertests",{"3":{"1199":1,"1207":2,"1417":1}}],["deeplinkdispatcher",{"2":{"418":1,"427":1,"428":1,"430":1,"1416":1,"2120":1,"2123":1},"3":{"0":1,"418":1,"427":2,"428":2,"430":2,"1199":7,"1203":1,"1207":2,"1416":8,"1417":17,"1496":2,"2120":1,"2123":2}}],["deeplinklistenertests",{"3":{"1199":1,"1207":2,"1417":1}}],["deeplinklistener",{"2":{"2123":1},"3":{"0":1,"413":1,"1416":5,"1417":10,"1599":2,"2123":1}}],["deepens",{"3":{"2116":1}}],["deepen",{"3":{"1436":1}}],["deepest",{"3":{"1247":1,"1359":1,"2137":1}}],["deeper",{"3":{"237":1,"1247":1,"1311":1,"1334":1,"1359":3,"1381":1,"1402":1,"1416":1,"1427":1,"1436":4,"1475":1,"1572":1,"1577":1,"1821":1,"1864":1,"1960":1,"2035":1}}],["deep",{"0":{"2123":1,"2217":1,"2237":1,"2239":1},"1":{"417":1,"418":1,"419":1,"420":1,"421":1,"422":1,"423":1,"424":1,"425":1,"426":1,"427":1,"428":1,"429":1,"430":1},"3":{"0":3,"1":1,"121":1,"122":1,"206":1,"208":1,"353":1,"399":1,"413":1,"417":1,"418":1,"424":1,"549":1,"616":1,"618":1,"649":1,"690":1,"854":1,"872":1,"883":1,"1184":1,"1185":1,"1187":1,"1192":2,"1194":1,"1202":1,"1203":1,"1212":1,"1228":1,"1229":4,"1247":1,"1286":3,"1294":1,"1298":1,"1300":2,"1309":1,"1311":2,"1323":3,"1324":19,"1350":4,"1359":1,"1391":1,"1395":3,"1396":14,"1402":1,"1416":14,"1417":22,"1436":4,"1445":1,"1492":1,"1496":3,"1526":1,"1555":2,"1562":1,"1577":2,"1585":1,"1591":1,"1599":2,"1626":1,"1627":1,"1641":2,"1645":1,"1664":1,"1666":1,"1669":3,"1759":1,"1760":1,"1761":1,"1765":1,"1779":45,"1783":1,"1786":1,"1790":1,"1821":2,"1826":1,"1828":1,"1914":1,"1920":1,"1935":1,"1966":1,"1969":1,"1975":1,"1976":1,"1978":1,"2031":2,"2042":1,"2060":2,"2061":2,"2078":1,"2082":1,"2123":2,"2161":1,"2162":1,"2206":1,"2220":1,"2228":1,"2234":2,"2238":1,"2247":1}}],["debe",{"3":{"1685":1,"1686":2}}],["debounce",{"3":{"1591":1}}],["debounceinterval=",{"3":{"1396":1}}],["debounces",{"3":{"1395":1}}],["debounced",{"3":{"881":1,"1324":2,"1385":1,"1395":2,"1526":1,"1560":1,"2074":1}}],["debuggable",{"3":{"1286":1,"1417":1}}],["debuggability",{"3":{"6":1,"1952":1}}],["debugger",{"3":{"1259":1,"1339":1,"1415":1}}],["debugging",{"3":{"399":1,"402":1,"407":1,"641":1,"1259":1,"1311":1,"1333":1,"1339":2,"1415":1,"1430":1,"1436":1,"1438":1,"1443":1,"1488":1,"1641":1,"1913":1,"2161":2}}],["debug",{"3":{"0":1,"401":1,"1109":1,"1256":1,"1259":4,"1263":1,"1270":6,"1271":1,"1286":2,"1311":4,"1323":4,"1324":2,"1333":1,"1339":1,"1396":7,"1402":2,"1416":9,"1436":1,"1444":1,"1481":1,"1575":1,"1577":3,"1582":1,"1585":1,"1648":3,"1655":1,"1677":2,"1894":1,"1917":1,"1952":1}}],["debt",{"3":{"0":2,"298":1,"302":2,"607":1,"674":1,"1011":1,"1012":1,"1014":1,"1300":4,"1350":1,"1396":1,"1436":6,"1496":1,"1522":1,"1526":1,"1529":1,"1534":1,"1571":1,"1591":1,"2140":2}}],["density",{"0":{"1715":1},"3":{"881":1,"1324":13,"1416":2,"1524":4,"1526":3,"1530":1,"1531":3,"1532":1,"1533":1,"1557":1,"1559":1,"1577":1,"1591":1,"1596":3,"1597":2,"1669":1,"1715":1,"2081":1}}],["dense=",{"3":{"1524":1,"1526":2,"1531":1,"1532":1,"1591":1,"1596":1,"1597":1,"1715":1}}],["densegrid",{"2":{"1524":1,"1531":1,"1532":1,"1595":1,"1597":1,"1715":1},"3":{"1324":4,"1524":2,"1526":2,"1531":1,"1532":1,"1577":3,"1595":1,"1596":1,"1597":1,"1715":2}}],["densest",{"3":{"1286":1,"1324":1}}],["denser",{"3":{"691":1,"1324":1}}],["dense",{"2":{"1524":1},"3":{"650":1,"1237":1,"1256":1,"1324":4,"1380":2,"1396":1,"1524":1,"1559":1}}],["denormalize",{"3":{"1396":1,"1769":1}}],["denormalized",{"3":{"1030":1,"1117":1,"1342":1,"1346":1,"1350":2,"1359":2,"1380":1,"1395":5,"1398":1,"1402":3,"1415":2,"1630":2,"1750":1,"1751":2,"1769":2,"1773":1}}],["denormalization",{"3":{"1395":1,"1396":1,"1635":1,"1686":1}}],["denormalizationbackfillservice",{"3":{"674":1}}],["denormalizing",{"3":{"1350":1,"1395":1,"1402":1,"1638":1}}],["denominators",{"3":{"1012":4,"1527":3,"1537":1,"1553":1,"1578":3,"1591":1,"1592":4,"1594":1,"1599":1,"2173":1}}],["denominator",{"3":{"0":1,"1014":1,"1324":1,"1436":1,"1536":1}}],["denies",{"3":{"126":2,"188":1,"318":2,"1059":1,"1264":2,"1270":5,"1297":1,"1300":6,"1339":1,"1359":3,"1417":3,"1667":2,"1821":1,"1964":1,"1995":2,"1998":1,"2199":2}}],["denied",{"2":{"121":1,"126":1,"1268":1,"1422":1,"2158":1},"3":{"0":3,"121":1,"126":1,"317":1,"318":2,"440":1,"682":2,"729":1,"960":1,"1091":1,"1212":1,"1263":1,"1268":1,"1270":7,"1271":5,"1275":1,"1283":1,"1297":2,"1300":4,"1316":1,"1323":1,"1359":1,"1380":1,"1395":1,"1396":6,"1417":12,"1422":2,"1427":1,"1436":2,"1507":1,"1535":1,"1570":1,"1611":1,"1662":1,"1721":1,"1821":3,"1995":2,"2007":1,"2098":1,"2128":1,"2158":1}}],["denials",{"3":{"121":1,"126":3,"1263":1,"1270":1,"1998":1}}],["denial",{"3":{"0":1,"121":1,"126":2,"318":1,"793":1,"952":1,"954":1,"956":1,"960":1,"1263":1,"1270":7,"1300":4,"1323":1,"1359":1,"1396":1,"1402":1,"1417":10,"1436":2,"1577":1,"1821":1,"1996":1,"2002":1,"2098":1,"2119":1}}],["denying",{"3":{"1268":1,"1270":3,"1299":1,"1300":3,"1323":1,"1339":1,"1599":1,"2158":1}}],["denylist",{"3":{"0":1,"972":3,"973":2,"974":1,"975":1,"1212":1,"1324":2}}],["deny",{"0":{"2201":1},"2":{"2149":1},"3":{"0":3,"126":1,"184":1,"214":1,"318":3,"322":1,"324":1,"326":1,"458":1,"954":1,"956":1,"960":1,"1059":2,"1060":2,"1263":1,"1270":1,"1271":1,"1297":1,"1300":7,"1311":1,"1323":1,"1336":1,"1339":1,"1344":1,"1348":1,"1357":1,"1359":2,"1379":1,"1380":1,"1409":1,"1415":1,"1432":1,"1436":4,"1443":1,"1467":1,"1526":1,"1631":1,"1995":1,"1996":1,"1997":1,"2149":1,"2151":1,"2201":1,"2205":1,"2241":1}}],["demos",{"3":{"2111":1}}],["demonstrably",{"3":{"1765":1}}],["demonstrable",{"3":{"1286":1}}],["demonstrating",{"3":{"2223":1}}],["demonstration",{"3":{"1270":1,"1271":1,"1339":1,"1352":1,"1359":1}}],["demonstrator",{"3":{"1534":1}}],["demonstrates",{"3":{"551":1,"620":1,"698":1,"1058":1,"1300":1,"1311":1,"1324":1,"1359":4,"1376":1,"1436":3,"1487":1,"1721":1,"2058":1,"2228":1}}],["demonstrated",{"3":{"0":2,"941":1,"966":1,"1090":1,"1402":1,"1577":1,"1591":2,"1706":1,"1707":1,"2111":1}}],["demonstrate",{"3":{"0":1,"62":1,"449":1,"651":1,"1339":1,"1488":1,"1575":1,"1576":1,"1884":1,"2115":2,"2131":1,"2135":1,"2216":1}}],["demote",{"3":{"1300":1,"1311":1,"1339":1}}],["demoted",{"3":{"619":1,"743":1,"1289":1,"1324":2,"2058":1}}],["demotion",{"3":{"1270":1}}],["demoting",{"3":{"1270":1,"1414":1}}],["demo",{"3":{"698":1,"1437":1,"1698":1,"1777":1,"1789":1,"1796":1,"1958":1,"1966":1,"1973":1}}],["demanded",{"0":{"1871":1},"3":{"1237":1,"1300":1,"1415":1}}],["demands",{"3":{"147":2,"150":1,"265":1,"626":1,"674":2,"709":1,"1229":1,"1259":1,"1300":3,"1301":1,"1311":1,"1322":1,"1324":2,"1327":1,"1350":1,"1359":2,"1415":2,"1416":1,"1426":1,"1436":5,"1454":1,"1455":2,"1459":1,"1526":1,"1675":1,"1794":1,"2013":2,"2036":1}}],["demand",{"0":{"1327":1},"3":{"0":2,"86":1,"126":1,"186":1,"471":1,"499":1,"507":1,"591":1,"1060":1,"1125":1,"1229":1,"1237":1,"1247":2,"1263":1,"1270":1,"1286":3,"1297":3,"1300":5,"1311":3,"1318":1,"1323":1,"1324":6,"1327":1,"1342":1,"1350":1,"1359":1,"1395":2,"1396":1,"1415":1,"1436":4,"1438":1,"1440":1,"1455":2,"1459":2,"1460":1,"1475":1,"1482":1,"1492":1,"1577":1,"1589":1,"1802":1,"1821":1,"1877":1,"1962":1,"1965":2,"2014":1,"2035":1,"2048":1,"2143":1,"2164":1,"2182":2,"2201":1,"2234":1}}],["deflated",{"3":{"1492":1}}],["deflate",{"3":{"1455":1}}],["deflating",{"3":{"1455":1}}],["defining",{"3":{"1300":8,"1309":2,"1324":1,"1339":2,"1359":2,"1396":1,"1415":1,"1436":18,"1577":1,"1639":1,"1916":1,"1949":1,"2029":1,"2161":1}}],["definingprojectname",{"3":{"1067":1}}],["definitive",{"3":{"1359":1}}],["definitions",{"3":{"53":1,"54":1,"471":1,"881":1,"1266":1,"1281":1,"1286":2,"1301":1,"1312":1,"1324":1,"1350":1,"1359":6,"1380":1,"1396":2,"1436":4,"1447":1,"1494":1,"1632":1,"1858":1,"1962":1,"1995":1}}],["definition",{"0":{"1464":1},"2":{"1730":1},"3":{"33":1,"428":1,"619":1,"767":1,"810":1,"1102":1,"1117":1,"1160":1,"1229":1,"1231":1,"1237":1,"1239":1,"1247":1,"1259":1,"1270":3,"1271":1,"1286":3,"1300":5,"1309":1,"1311":2,"1312":1,"1324":10,"1339":4,"1347":1,"1350":8,"1359":27,"1369":4,"1380":1,"1396":4,"1415":5,"1417":1,"1433":1,"1436":15,"1467":2,"1586":1,"1631":1,"1637":1,"1638":1,"1641":1,"1701":1,"1730":1,"1802":1,"1829":1,"1962":1,"1980":1}}],["definite",{"3":{"1350":2,"1427":1}}],["definitely",{"3":{"1270":1,"1350":2,"1888":1}}],["definelayers",{"2":{"2105":1},"3":{"1431":1,"1436":24,"2105":1}}],["define",{"0":{"2018":1,"2092":1},"3":{"342":1,"449":1,"988":1,"1229":3,"1237":1,"1247":1,"1286":1,"1300":1,"1311":2,"1323":1,"1324":1,"1333":1,"1350":2,"1359":1,"1369":1,"1436":2,"1443":1,"1576":1,"1638":1,"1639":2,"1656":1,"1709":1,"1827":1,"1955":1,"1998":1,"2014":1,"2016":1,"2050":1,"2125":1,"2158":1}}],["defined",{"0":{"2043":1},"3":{"0":2,"11":1,"54":1,"215":1,"272":1,"331":1,"350":1,"352":1,"395":2,"404":1,"426":1,"428":1,"608":1,"749":1,"790":1,"850":1,"860":1,"861":2,"862":1,"881":1,"991":1,"1124":1,"1237":1,"1240":1,"1257":1,"1259":2,"1271":2,"1276":1,"1286":5,"1289":1,"1300":5,"1301":2,"1309":4,"1311":5,"1312":1,"1320":1,"1323":1,"1324":5,"1336":1,"1339":5,"1350":1,"1352":1,"1359":23,"1395":7,"1396":2,"1402":3,"1409":1,"1415":3,"1417":3,"1436":2,"1457":1,"1458":2,"1479":1,"1480":1,"1488":1,"1526":2,"1542":1,"1547":1,"1556":1,"1559":1,"1566":3,"1567":1,"1572":1,"1577":1,"1582":1,"1591":2,"1631":3,"1634":1,"1706":1,"1714":1,"1764":1,"1790":1,"1915":1,"1929":2,"2017":1,"2056":1,"2075":1,"2113":1,"2149":1,"2155":1,"2184":1,"2222":1}}],["definescope",{"3":{"1270":2}}],["defines",{"3":{"0":1,"125":1,"175":1,"184":3,"186":5,"256":1,"342":1,"350":1,"406":1,"407":1,"452":1,"536":1,"558":1,"564":1,"571":1,"614":1,"707":1,"870":1,"897":1,"1016":1,"1018":1,"1212":1,"1234":1,"1236":1,"1237":2,"1286":2,"1300":5,"1301":1,"1303":1,"1309":3,"1312":1,"1323":1,"1324":5,"1359":2,"1369":1,"1380":1,"1395":2,"1396":2,"1409":1,"1415":5,"1416":1,"1417":1,"1436":6,"1443":1,"1474":1,"1489":1,"1536":1,"1540":1,"1577":1,"1638":1,"1639":2,"1641":1,"1810":1,"1932":1,"1963":4,"1978":1,"2040":1,"2043":1,"2077":1,"2085":1,"2119":1,"2158":1,"2167":1,"2232":1}}],["defeated",{"3":{"716":1,"1359":1,"1436":1}}],["defeating",{"0":{"1334":1},"3":{"157":1,"591":1,"593":1,"1270":1,"1415":1,"1492":1}}],["defeat",{"3":{"151":1,"528":1,"741":1,"941":1,"1093":1,"1300":1,"1311":2,"1312":1,"1323":1,"1324":1,"1417":1,"1436":1,"1441":1,"1667":1,"1975":1,"2020":1}}],["defeats",{"3":{"100":1,"235":1,"360":1,"998":1,"1300":1,"1311":1,"1312":1,"1339":1,"1423":1,"1427":1,"1431":1,"1436":1,"1576":1,"1909":1,"2031":1,"2130":1}}],["defer",{"3":{"459":1,"614":1,"810":1,"1286":1,"1323":1,"1339":2,"1402":1,"1416":1,"1434":1,"1436":1,"1498":1,"2195":1}}],["defersessionpersist",{"3":{"1324":1}}],["defers",{"3":{"20":1,"609":1,"675":1,"815":1,"821":1,"918":1,"1116":1,"1271":2,"1286":1,"1300":2,"1311":2,"1339":1,"1356":1,"1359":1,"1395":1,"1408":1,"1415":6,"1416":1,"1417":1,"1422":1,"1436":1,"1476":1,"1582":1,"1722":1,"1950":1,"1959":1,"2013":1}}],["deferring",{"3":{"735":1,"801":1,"989":1,"1286":1,"1311":2,"1323":1,"1324":3,"1339":1,"1415":1,"1416":1,"1427":1}}],["deferrals",{"3":{"1286":1,"1571":1,"1594":1}}],["deferral",{"3":{"0":7,"468":1,"469":1,"473":1,"474":2,"518":1,"521":1,"522":1,"726":1,"797":3,"798":2,"799":2,"800":1,"808":2,"810":1,"811":1,"812":2,"813":1,"827":1,"914":1,"917":1,"1048":1,"1051":1,"1053":1,"1054":1,"1100":1,"1104":1,"1212":1,"1324":2,"1396":2,"1577":1,"2170":2,"2234":1}}],["deferredtable",{"3":{"1286":2}}],["deferreddispatch",{"2":{"1233":1,"1498":1},"3":{"1198":1,"1199":2,"1203":1,"1207":1,"1233":1,"1274":1,"1286":5,"1496":2,"1498":2}}],["deferred",{"0":{"1275":1,"1318":1,"2186":1},"1":{"796":1,"797":1,"798":1,"799":1,"800":1,"801":1,"802":1,"803":1,"804":1,"805":1,"806":1,"807":1,"808":1,"809":1,"810":1,"811":1,"812":1,"813":1,"814":1,"815":1},"3":{"0":16,"20":1,"26":1,"68":1,"100":1,"111":1,"120":2,"125":1,"383":1,"468":2,"470":1,"474":1,"518":1,"541":1,"601":1,"680":2,"692":1,"698":1,"725":1,"727":1,"729":1,"733":1,"741":1,"796":1,"799":1,"804":1,"807":1,"827":1,"881":1,"914":1,"988":5,"992":1,"1042":2,"1044":1,"1046":1,"1048":1,"1049":1,"1051":1,"1117":3,"1192":1,"1212":3,"1217":1,"1229":1,"1233":1,"1237":1,"1252":1,"1263":2,"1264":2,"1270":5,"1272":1,"1275":3,"1278":2,"1286":20,"1297":1,"1300":2,"1311":1,"1313":1,"1318":3,"1323":7,"1324":2,"1339":1,"1350":1,"1357":1,"1359":7,"1395":1,"1396":3,"1399":1,"1402":2,"1415":1,"1416":3,"1417":2,"1433":1,"1436":2,"1467":1,"1508":1,"1524":2,"1526":3,"1529":1,"1530":1,"1532":1,"1534":2,"1577":3,"1578":1,"1582":2,"1585":7,"1599":3,"1611":3,"1612":1,"1631":1,"1640":2,"1651":1,"1688":1,"1822":1,"1840":2,"1944":1,"2016":1,"2186":2,"2188":1,"2195":4,"2234":2}}],["defensiveness",{"3":{"1396":1}}],["defensive",{"3":{"359":1,"365":1,"1247":1,"1286":6,"1297":1,"1300":3,"1301":1,"1311":6,"1324":3,"1339":1,"1350":2,"1359":5,"1415":1,"1417":1,"1443":1,"1881":1,"2128":1,"2145":1}}],["defensively",{"3":{"359":1,"1286":1,"1324":1,"1395":2,"1396":1,"1416":2,"1427":1,"1436":1,"1911":1,"1925":1,"1986":1}}],["defensible",{"3":{"0":1,"691":1,"699":1,"821":1,"862":1,"898":1,"1220":1,"1396":1,"1436":1,"1526":1,"1531":1,"1912":1,"1972":1}}],["defenses",{"3":{"1300":1,"1324":1,"1436":1,"1553":1,"1576":1,"1825":1}}],["defense",{"0":{"1903":1},"3":{"207":1,"370":1,"390":1,"973":1,"1185":1,"1247":4,"1263":1,"1270":2,"1285":1,"1286":1,"1300":5,"1309":1,"1311":4,"1324":6,"1336":1,"1369":1,"1396":1,"1402":1,"1415":3,"1427":1,"1436":1,"1548":1,"1577":1,"1627":1,"1667":1,"1673":1,"1757":1,"1823":1,"1969":1,"2041":1,"2075":1,"2128":1,"2181":1,"2203":1}}],["defences",{"3":{"280":1,"1339":1}}],["defence",{"2":{"1365":1},"3":{"0":1,"128":1,"443":1,"725":1,"757":1,"758":1,"1019":1,"1020":1,"1115":1,"1116":1,"1118":1,"1124":2,"1300":1,"1311":1,"1324":1,"1339":3,"1365":1,"1369":1,"1395":1,"1415":2,"1455":1,"1467":2,"1475":1,"1492":1,"2001":2,"2002":1,"2150":1}}],["defending",{"1":{"1999":1,"2000":1,"2001":1,"2002":1,"2003":1},"3":{"1229":1,"1339":1,"1415":1,"1779":1,"1998":1,"1999":1,"2210":2}}],["defend",{"3":{"1125":1,"1286":1,"1309":1,"1396":1,"1436":1,"1438":3,"1900":1}}],["defended",{"3":{"659":1,"868":1,"1224":1,"1300":1,"1395":1,"1402":1,"1415":1,"1436":6,"1526":1,"1826":1}}],["defenderforstoragesettings",{"2":{"1470":1},"3":{"1116":1,"1119":1,"1467":1,"1470":1}}],["defender",{"3":{"0":1,"403":1,"1116":2,"1118":1,"1467":1}}],["defends",{"3":{"0":1,"1124":1,"1249":1,"1339":1,"1359":1,"1436":3,"1567":1,"2143":1}}],["defect",{"3":{"0":1,"46":1,"135":1,"249":1,"390":2,"415":1,"474":1,"549":2,"619":1,"799":1,"800":2,"801":2,"803":1,"856":1,"890":1,"955":1,"966":1,"1004":1,"1049":1,"1050":1,"1247":1,"1270":2,"1286":3,"1300":1,"1301":1,"1311":2,"1324":6,"1339":1,"1350":1,"1356":1,"1359":8,"1395":3,"1396":1,"1402":1,"1417":1,"1436":25,"1438":2,"1467":1,"1473":1,"1535":1,"1586":1,"1591":1,"1597":1,"1599":3,"1610":1,"1643":2,"1671":1,"1675":1,"1744":1,"1799":1,"1841":1,"1909":1,"2064":1,"2185":1}}],["defects",{"3":{"0":1,"157":1,"517":1,"1300":2,"1311":1,"1324":1,"1402":1,"1909":1,"2052":2}}],["defaultkeyid",{"3":{"1436":1,"1488":1}}],["defaultkeyversion",{"3":{"1286":1}}],["defaultinterval",{"3":{"1436":1}}],["defaulting",{"3":{"0":5,"178":1,"226":1,"229":1,"243":1,"255":1,"274":1,"333":1,"351":1,"421":1,"539":1,"549":2,"640":1,"819":1,"820":1,"922":1,"973":1,"1116":1,"1184":1,"1229":1,"1237":1,"1241":1,"1243":1,"1247":4,"1249":1,"1257":1,"1259":4,"1267":1,"1270":2,"1271":3,"1273":1,"1277":2,"1279":1,"1286":14,"1300":11,"1301":3,"1309":5,"1311":5,"1317":1,"1323":14,"1324":17,"1326":1,"1332":1,"1336":1,"1338":1,"1339":6,"1350":10,"1359":10,"1366":1,"1376":1,"1380":2,"1387":1,"1392":1,"1395":8,"1396":9,"1402":1,"1412":1,"1415":2,"1419":3,"1423":1,"1424":1,"1427":1,"1433":1,"1436":19,"1441":1,"1455":1,"1465":1,"1467":3,"1470":1,"1474":1,"1476":1,"1484":1,"1488":1,"1684":1,"1695":1,"1922":1,"1970":1,"2175":3,"2234":1}}],["defaultissuer",{"3":{"1436":1,"1488":1}}],["defaultleadminutes",{"3":{"1396":2}}],["defaultlocalizationinterceptor",{"3":{"265":1,"1324":2}}],["defaultversionpolicy",{"3":{"1339":1}}],["defaultrouteheadername",{"3":{"1339":1}}],["defaultredactionplaceholder",{"3":{"1427":1}}],["defaultrequestversion",{"3":{"1339":1}}],["defaultrequestheaders",{"3":{"1324":4}}],["defaultretryafter",{"3":{"1324":1}}],["defaultretrydelay",{"3":{"1324":1}}],["defaultresolutionorder",{"3":{"1286":1}}],["defaultculture",{"3":{"1436":1}}],["defaultclusterheadername",{"3":{"1339":1}}],["defaultcleartextport",{"3":{"95":2,"1339":2}}],["defaultconnectionname",{"3":{"1339":3}}],["defaultbaseaddress",{"3":{"1436":3}}],["defaultbaseurl",{"3":{"1436":1,"1488":1}}],["defaultbackoff",{"3":{"1324":1,"1396":1}}],["defaultbrokerresourcename",{"2":{"1326":1},"3":{"1326":1,"1339":1,"1441":1}}],["defaultborderradius",{"3":{"1324":1}}],["defaultjwkspath",{"3":{"1311":2}}],["defaulthttpcontext",{"3":{"1311":1}}],["defaultheaders",{"3":{"1311":3}}],["defaultmaxoutputtokens",{"3":{"1427":1}}],["defaultmaxexportrows",{"3":{"741":1,"1311":1,"1323":1}}],["defaultmaildevresourcename",{"3":{"1339":1}}],["defaultmessagetimetolive",{"3":{"1323":1,"1436":1}}],["defaultmessage",{"3":{"1286":2}}],["defaultpassword",{"3":{"1436":3}}],["defaultprivatekeypem",{"3":{"1429":1,"1436":1,"1488":1}}],["defaultprobepath",{"2":{"99":1},"3":{"99":1,"1339":3,"1441":1}}],["defaultprotocols",{"3":{"95":1,"1331":1,"1339":4}}],["defaultpublickeypem",{"3":{"1429":1,"1436":1,"1488":1}}],["defaultport",{"3":{"1339":2}}],["defaultpopulatelocktimeout",{"3":{"1270":1,"1323":3}}],["defaultwidth",{"3":{"1270":1,"1300":2}}],["defaultname",{"3":{"1259":2,"1286":8,"1323":1}}],["defaultdocumentname",{"3":{"1311":1}}],["defaultdatasourceresolver",{"3":{"1199":12,"1207":1}}],["defaultduration",{"2":{"243":1,"254":1,"257":1,"736":1,"1708":1,"1916":2},"3":{"243":2,"254":3,"257":2,"733":1,"736":1,"1301":20,"1496":1,"1708":2,"1916":2}}],["defaultoidcdiscoverypath",{"3":{"1311":1}}],["defaultoauthuisettings",{"3":{"1199":2,"1203":1,"1207":2,"1324":7,"1416":1}}],["defaultoptions",{"2":{"1091":1},"3":{"1091":1,"1427":1}}],["default=warning",{"3":{"790":1,"1442":1}}],["defaulttitlefor",{"3":{"1395":1}}],["defaulttimeout",{"3":{"1324":3,"1427":1,"1436":4,"1488":1}}],["defaulttooauthauthentication",{"3":{"1467":1}}],["defaulttoautonegotiation",{"3":{"1339":2}}],["defaulttokenissuingpaths",{"3":{"1324":1}}],["defaultthreadcurrentuiculture",{"3":{"1324":1,"1417":1}}],["defaultthreadcurrentculture",{"3":{"1324":1,"1417":1}}],["defaultthreadcurrent",{"2":{"265":1},"3":{"265":2,"1324":1}}],["defaultttl",{"3":{"243":1,"1324":4}}],["defaultemail",{"3":{"1436":3}}],["defaultemulatorimage",{"3":{"640":1,"1436":1}}],["defaultendpointname",{"3":{"1339":2}}],["defaultenginedbcontextfactories",{"3":{"1496":1}}],["defaultengine",{"3":{"1286":2}}],["defaultentityconfigurationassemblyprovider",{"2":{"1203":1,"1282":1,"1323":1},"3":{"1199":3,"1203":1,"1207":2,"1282":3,"1286":11,"1323":1,"1436":1}}],["defaultentityconfigurationassemblyprovidertests",{"2":{"1199":1},"3":{"1199":1,"1207":2,"1286":1}}],["defaultexcludedpathprefixes",{"3":{"1286":1}}],["defaultexporttestcontroller",{"3":{"1199":2,"1207":1}}],["defaultexpiration",{"2":{"243":1,"254":1,"257":1},"3":{"243":1,"254":3,"257":1,"1301":4,"1311":3}}],["defaultexemptpathprefixes",{"2":{"189":1},"3":{"189":1,"1300":3}}],["defaulted",{"3":{"0":1,"583":1,"649":1,"650":1,"768":1,"827":1,"837":1,"861":1,"862":1,"1018":1,"1034":1,"1212":1,"1247":1,"1253":1,"1258":1,"1259":7,"1265":2,"1270":4,"1284":1,"1286":7,"1300":1,"1301":1,"1307":1,"1309":4,"1311":3,"1323":1,"1324":9,"1339":1,"1344":1,"1349":1,"1350":7,"1359":12,"1395":5,"1396":19,"1402":2,"1415":3,"1417":2,"1436":6,"1918":1,"1945":1,"2198":1,"2205":1}}],["defaultaction",{"3":{"1467":1}}],["defaultauthorizationservice",{"2":{"954":1,"956":1,"960":1,"1432":1},"3":{"954":1,"956":1,"960":1,"1432":1,"1436":6}}],["defaultauthorizationpolicyprovider",{"2":{"186":1,"1962":1},"3":{"186":1,"1300":2,"1962":1}}],["defaultapiversion",{"2":{"446":1},"3":{"446":1,"448":1,"1311":1,"2133":1}}],["defaultazurecredential",{"2":{"441":1,"598":1,"599":1,"664":1,"665":1,"670":1,"1335":1,"1336":1,"1442":1,"1970":1,"2128":1,"2129":1},"3":{"0":2,"440":1,"441":1,"598":1,"599":1,"664":1,"665":1,"670":1,"1212":1,"1323":4,"1335":1,"1336":1,"1339":6,"1442":1,"1467":6,"1577":1,"1970":1,"2128":1,"2129":1}}],["defaultstothederivedtypesassembly",{"3":{"1436":1}}],["defaultsettings",{"3":{"1577":1}}],["defaultservicebusemulatorresourcename",{"3":{"1339":1}}],["defaultseed",{"3":{"1199":2,"1203":1,"1207":1,"1279":1,"1286":3}}],["defaultsmtpport",{"3":{"1323":2}}],["defaultsortcolumn",{"3":{"1380":1}}],["defaultsort",{"3":{"1247":1}}],["defaultsspecification",{"3":{"1199":2,"1207":1}}],["defaultsqlserverdbcontextfactory",{"2":{"703":1},"3":{"703":1}}],["defaults",{"0":{"1442":1,"1443":1,"1678":1,"2121":1},"1":{"1325":1,"1326":1,"1327":1,"1328":1,"1329":1,"1330":1,"1331":1,"1332":1,"1333":1,"1334":1,"1335":1,"1336":1,"1337":1,"1338":1,"1339":1},"2":{"150":1},"3":{"0":15,"19":2,"22":1,"23":1,"25":1,"27":1,"31":3,"66":1,"68":1,"72":1,"73":1,"74":2,"95":3,"98":2,"100":3,"102":1,"145":1,"146":1,"147":1,"150":1,"168":1,"177":1,"189":1,"193":1,"198":1,"202":1,"217":1,"219":1,"225":2,"228":1,"230":1,"235":1,"243":2,"246":1,"255":1,"258":1,"263":1,"265":4,"314":1,"318":2,"325":1,"333":1,"335":1,"350":1,"384":1,"395":4,"397":3,"400":1,"402":1,"404":1,"406":2,"413":2,"414":1,"416":1,"434":2,"482":1,"536":1,"538":1,"539":1,"583":3,"585":2,"599":1,"600":1,"609":2,"622":1,"635":1,"640":2,"657":1,"668":1,"674":3,"690":1,"699":1,"720":1,"733":2,"736":1,"749":1,"809":1,"819":3,"821":1,"827":5,"832":2,"833":1,"837":1,"861":5,"862":1,"863":1,"897":1,"905":2,"913":2,"931":1,"954":1,"956":1,"957":1,"994":1,"998":1,"1004":1,"1018":3,"1026":1,"1042":1,"1045":1,"1050":1,"1059":1,"1067":1,"1082":1,"1089":1,"1091":1,"1092":1,"1093":1,"1094":1,"1119":1,"1124":3,"1135":1,"1160":1,"1175":1,"1192":1,"1202":1,"1203":1,"1212":3,"1237":1,"1241":2,"1244":3,"1247":7,"1249":3,"1257":1,"1258":1,"1259":11,"1270":4,"1271":1,"1275":1,"1276":2,"1277":1,"1284":1,"1285":1,"1286":24,"1288":1,"1293":1,"1297":2,"1300":38,"1301":11,"1302":1,"1309":5,"1311":26,"1312":3,"1320":2,"1323":22,"1324":42,"1325":2,"1326":1,"1330":2,"1333":1,"1335":1,"1337":1,"1338":3,"1339":82,"1350":8,"1355":1,"1359":28,"1364":1,"1368":1,"1369":4,"1372":1,"1380":2,"1384":1,"1393":1,"1395":17,"1396":13,"1402":2,"1415":10,"1416":5,"1417":24,"1420":1,"1427":6,"1429":1,"1433":1,"1435":1,"1436":50,"1437":1,"1438":10,"1439":2,"1441":1,"1442":1,"1443":6,"1444":1,"1446":1,"1447":5,"1455":2,"1458":1,"1466":1,"1467":6,"1470":3,"1475":1,"1477":1,"1481":3,"1487":1,"1488":2,"1490":1,"1491":1,"1496":5,"1537":1,"1555":1,"1557":1,"1561":1,"1577":3,"1582":1,"1591":1,"1596":1,"1631":2,"1640":1,"1656":1,"1660":4,"1662":1,"1663":3,"1670":3,"1674":1,"1676":1,"1707":1,"1734":1,"1798":1,"1801":1,"1825":1,"1842":1,"1843":1,"1876":1,"1895":1,"1908":1,"1916":2,"1921":1,"1923":1,"1936":1,"1969":1,"1970":1,"1989":1,"1995":2,"1996":1,"2001":2,"2002":2,"2012":1,"2013":1,"2015":3,"2019":1,"2031":2,"2032":2,"2038":1,"2039":1,"2044":1,"2047":1,"2063":1,"2077":1,"2085":1,"2121":1,"2124":3,"2125":2,"2133":1,"2151":1,"2157":1,"2158":2,"2160":1,"2161":1,"2162":1,"2169":1,"2170":1,"2177":1,"2181":1,"2190":1,"2200":2,"2201":1,"2229":1}}],["default",{"0":{"1327":1,"2065":1,"2120":1},"1":{"961":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1,"1047":1,"1048":1,"1049":1,"1050":1,"1051":1,"1052":1,"1053":1,"1054":1,"1055":1,"1080":1,"1081":1,"1082":1,"1083":1,"1084":1,"1085":1,"1086":1,"1087":1,"2156":1,"2157":1,"2158":1,"2159":1,"2160":1,"2161":1,"2162":1},"2":{"511":1,"513":1,"916":1,"1041":1,"1261":1,"1386":1,"1423":1,"1467":1,"1652":1},"3":{"0":76,"5":1,"7":2,"15":2,"17":3,"19":3,"20":1,"24":1,"25":1,"26":1,"27":1,"29":1,"31":4,"32":2,"38":1,"39":3,"41":1,"47":2,"55":1,"62":1,"67":1,"68":1,"71":1,"72":2,"73":2,"78":4,"79":2,"91":2,"92":4,"93":3,"94":1,"95":1,"96":5,"97":1,"98":7,"99":2,"100":1,"101":2,"102":2,"109":1,"121":1,"135":1,"147":1,"150":1,"152":1,"157":1,"158":1,"159":1,"165":1,"166":6,"170":2,"173":1,"175":7,"177":1,"178":5,"179":3,"184":1,"185":1,"186":2,"189":2,"193":1,"195":3,"200":4,"201":3,"203":1,"212":1,"214":6,"215":3,"216":4,"219":5,"220":2,"225":3,"226":1,"227":2,"228":2,"229":1,"230":2,"231":1,"233":1,"235":2,"236":1,"241":2,"243":5,"244":1,"245":2,"248":1,"249":1,"252":1,"254":2,"255":3,"258":1,"265":4,"273":2,"279":2,"280":3,"281":2,"283":1,"290":1,"302":1,"310":1,"318":8,"320":1,"322":1,"324":1,"326":1,"329":1,"330":1,"332":1,"335":2,"340":1,"344":1,"350":7,"351":1,"352":1,"353":1,"360":1,"369":1,"380":2,"381":1,"384":1,"386":2,"387":4,"388":3,"389":1,"395":2,"397":3,"398":1,"402":2,"407":1,"413":1,"414":1,"415":1,"420":2,"422":1,"432":1,"434":2,"436":2,"440":2,"443":1,"444":1,"446":1,"447":1,"448":3,"449":2,"458":1,"468":1,"499":4,"501":3,"502":1,"507":1,"511":1,"513":1,"520":1,"527":1,"549":1,"556":2,"572":1,"573":1,"578":1,"583":3,"584":1,"599":4,"602":1,"609":3,"626":2,"633":2,"635":1,"640":2,"642":1,"644":1,"649":1,"650":1,"656":1,"657":2,"660":1,"661":1,"664":1,"665":6,"666":1,"667":4,"668":6,"674":3,"682":4,"690":1,"691":1,"698":5,"699":2,"700":1,"707":6,"708":1,"709":4,"711":1,"713":1,"715":1,"731":2,"733":7,"734":1,"736":1,"737":1,"740":1,"741":4,"743":4,"749":2,"774":3,"775":2,"781":1,"782":1,"784":1,"790":1,"791":1,"793":1,"798":1,"804":1,"819":2,"820":2,"821":1,"826":2,"827":8,"829":1,"830":2,"831":1,"832":1,"837":1,"838":2,"841":1,"846":2,"854":2,"857":2,"861":2,"868":1,"881":3,"890":1,"897":2,"900":1,"905":8,"907":1,"912":1,"913":1,"914":1,"915":2,"916":1,"922":1,"924":1,"926":2,"932":1,"933":1,"935":2,"946":1,"953":1,"954":5,"956":2,"960":1,"961":1,"962":1,"964":4,"965":3,"966":1,"968":1,"971":1,"972":3,"974":1,"988":3,"991":1,"998":1,"999":2,"1004":1,"1006":1,"1012":2,"1018":3,"1020":1,"1033":1,"1034":1,"1035":1,"1036":1,"1040":1,"1041":1,"1044":1,"1047":1,"1049":3,"1050":5,"1052":1,"1053":1,"1054":1,"1055":1,"1059":2,"1061":1,"1067":1,"1069":1,"1080":1,"1081":1,"1082":2,"1083":2,"1084":1,"1089":3,"1090":1,"1091":5,"1092":1,"1094":1,"1108":1,"1109":1,"1114":1,"1116":4,"1117":1,"1118":1,"1119":2,"1122":1,"1124":7,"1127":1,"1133":2,"1134":1,"1135":4,"1161":1,"1168":1,"1175":5,"1177":1,"1179":1,"1184":2,"1188":1,"1212":9,"1223":1,"1229":7,"1231":2,"1232":1,"1235":1,"1236":2,"1237":24,"1241":2,"1242":1,"1244":2,"1247":21,"1249":1,"1253":1,"1254":2,"1255":1,"1256":4,"1257":1,"1258":2,"1259":56,"1261":1,"1263":1,"1264":1,"1267":2,"1269":2,"1270":50,"1271":10,"1273":2,"1274":1,"1275":1,"1276":3,"1277":1,"1279":9,"1280":1,"1281":3,"1285":1,"1286":210,"1287":1,"1288":7,"1289":2,"1290":4,"1292":3,"1294":3,"1295":1,"1296":1,"1297":4,"1300":118,"1301":83,"1302":4,"1304":2,"1305":1,"1307":3,"1308":1,"1309":64,"1310":2,"1311":105,"1312":2,"1313":1,"1314":1,"1317":1,"1318":2,"1320":15,"1321":1,"1322":1,"1323":102,"1324":153,"1326":4,"1328":3,"1331":3,"1333":3,"1334":2,"1335":2,"1336":4,"1338":5,"1339":89,"1342":1,"1343":2,"1344":2,"1349":3,"1350":37,"1353":1,"1354":1,"1355":1,"1359":149,"1365":1,"1369":18,"1372":1,"1373":1,"1378":2,"1379":5,"1380":18,"1383":2,"1386":1,"1389":2,"1392":3,"1393":1,"1395":89,"1396":54,"1398":1,"1399":1,"1400":2,"1402":40,"1405":2,"1406":1,"1407":1,"1408":1,"1415":27,"1416":14,"1417":270,"1421":2,"1423":3,"1424":1,"1427":14,"1430":2,"1431":3,"1432":2,"1433":3,"1436":221,"1438":13,"1440":1,"1441":12,"1442":4,"1443":9,"1444":3,"1446":5,"1447":3,"1449":1,"1450":1,"1453":5,"1454":1,"1455":10,"1456":2,"1458":1,"1465":2,"1466":3,"1467":33,"1470":1,"1472":1,"1474":2,"1475":6,"1476":1,"1477":3,"1481":2,"1484":1,"1488":8,"1489":2,"1492":1,"1496":8,"1526":7,"1527":1,"1534":1,"1537":1,"1538":1,"1539":1,"1540":1,"1541":1,"1542":1,"1543":1,"1544":1,"1545":1,"1546":1,"1547":1,"1548":1,"1549":1,"1550":1,"1551":1,"1552":1,"1553":1,"1554":1,"1555":1,"1556":1,"1557":1,"1558":1,"1559":1,"1560":1,"1561":1,"1562":1,"1563":2,"1564":1,"1565":1,"1566":1,"1567":2,"1568":1,"1569":1,"1570":1,"1571":1,"1574":1,"1575":1,"1577":22,"1578":1,"1581":1,"1582":1,"1583":3,"1585":3,"1586":2,"1591":1,"1592":2,"1596":1,"1600":1,"1621":2,"1627":1,"1630":8,"1631":4,"1632":1,"1633":1,"1637":2,"1638":1,"1639":3,"1640":6,"1641":4,"1652":2,"1653":1,"1662":1,"1663":1,"1664":1,"1667":2,"1668":3,"1669":1,"1670":2,"1677":7,"1684":4,"1685":1,"1697":1,"1704":1,"1707":1,"1708":3,"1718":2,"1719":1,"1721":1,"1727":2,"1728":1,"1731":2,"1734":2,"1757":1,"1767":3,"1770":2,"1774":1,"1779":1,"1790":1,"1810":3,"1811":1,"1826":1,"1839":2,"1841":4,"1842":1,"1843":3,"1844":1,"1845":3,"1849":3,"1851":1,"1853":1,"1856":1,"1862":1,"1869":2,"1880":1,"1881":1,"1882":1,"1889":6,"1892":1,"1896":2,"1898":1,"1904":1,"1905":1,"1906":1,"1908":1,"1910":2,"1911":1,"1912":1,"1915":3,"1916":2,"1917":1,"1920":2,"1921":1,"1922":7,"1923":1,"1925":1,"1933":2,"1934":1,"1935":1,"1938":1,"1941":1,"1942":1,"1944":1,"1945":3,"1946":1,"1948":2,"1950":1,"1952":1,"1953":2,"1965":1,"1968":1,"1969":1,"1970":2,"1971":1,"1975":2,"1976":1,"1977":2,"1978":2,"1979":2,"1982":6,"1984":3,"1987":1,"1989":1,"1990":1,"1991":2,"1995":5,"1996":2,"1997":4,"1998":2,"2001":8,"2002":2,"2003":1,"2007":1,"2009":1,"2010":1,"2011":2,"2012":1,"2013":1,"2014":1,"2025":1,"2026":3,"2031":1,"2032":1,"2044":1,"2047":3,"2056":1,"2057":1,"2062":1,"2064":3,"2065":3,"2067":1,"2068":1,"2070":1,"2071":1,"2077":2,"2078":1,"2079":1,"2084":1,"2085":4,"2088":1,"2091":1,"2096":1,"2100":1,"2120":6,"2121":2,"2123":1,"2125":3,"2128":3,"2129":1,"2130":2,"2131":2,"2132":2,"2133":3,"2135":3,"2140":1,"2144":1,"2151":6,"2152":6,"2153":1,"2154":4,"2155":4,"2156":3,"2157":1,"2158":1,"2159":1,"2160":1,"2162":1,"2168":1,"2171":2,"2177":3,"2182":2,"2189":1,"2194":1,"2198":1,"2199":1,"2201":2,"2204":1,"2205":1,"2211":1,"2217":1,"2234":6}}],["deducted",{"3":{"1526":1,"1577":1}}],["deduction",{"3":{"1524":1,"1526":2,"1591":2,"1599":1,"1610":1,"1744":1}}],["deductions",{"3":{"1524":1,"1526":1}}],["dedupable",{"3":{"881":1}}],["dedupkeyindex",{"3":{"1286":1}}],["dedupkeymaxlength",{"3":{"1286":2,"1309":1}}],["dedupkey",{"2":{"231":1,"890":1,"892":1,"1934":1,"1941":1},"3":{"225":2,"231":1,"889":2,"890":1,"892":1,"1175":1,"1286":8,"1304":4,"1309":16,"1933":3,"1934":2,"1941":1}}],["dedupes",{"3":{"1237":1,"1324":1}}],["dedupe",{"3":{"220":1,"1237":1,"1396":1}}],["deduped",{"3":{"197":1,"789":1,"1396":2}}],["deduping",{"3":{"194":2,"1259":1,"1438":1}}],["deduplicate",{"3":{"538":1,"1311":2,"1396":1,"1721":1,"1933":1,"1941":1,"2170":1}}],["deduplicates",{"3":{"199":1,"517":1,"518":1,"645":1,"1286":1,"1300":2,"1301":1,"1311":1,"1324":1,"1339":1,"1376":1,"1415":1}}],["deduplicated",{"3":{"0":1,"109":1,"157":1,"160":1,"166":1,"225":1,"827":1,"1100":1,"1276":1,"1286":1,"1300":2,"1311":3,"1380":1,"1395":1,"1416":1,"1496":2,"1910":1}}],["deduplication",{"3":{"157":1,"158":1,"231":1,"846":1,"1018":1,"1247":2,"1249":2,"1259":7,"1269":1,"1270":3,"1303":1,"1309":5,"1311":6,"1317":1,"1324":3,"1339":1,"1350":1,"1380":1,"1436":1,"1443":1,"1496":1,"1889":1,"1909":1,"1933":1,"1940":1,"1941":1}}],["deduplicating",{"3":{"0":2,"109":1,"156":1,"1100":1,"1324":1,"1332":1,"1380":1}}],["dedup",{"0":{"1934":1},"3":{"0":8,"24":1,"194":1,"195":2,"196":2,"197":4,"200":1,"201":4,"202":2,"223":2,"516":1,"518":2,"519":1,"520":1,"524":2,"541":1,"694":1,"702":1,"786":1,"795":1,"815":1,"817":1,"823":1,"847":1,"889":2,"892":1,"930":1,"1074":1,"1099":1,"1104":1,"1212":1,"1237":1,"1247":1,"1249":1,"1258":2,"1259":14,"1286":3,"1304":4,"1309":12,"1323":6,"1324":1,"1350":1,"1359":1,"1380":1,"1396":1,"1438":1,"1496":1,"1508":1,"1526":1,"1577":2,"1586":1,"1665":1,"1910":2,"1911":1,"1933":4,"1934":1,"1940":1,"2168":1}}],["dedups",{"3":{"0":3,"195":2,"255":1,"340":2,"346":2,"538":1,"541":1,"846":1,"882":1,"1212":2,"1259":2,"1270":1,"1395":1,"1496":1,"1526":1,"1665":1,"1845":1,"1870":2,"1910":1,"1922":1,"2166":2,"2234":2}}],["dedicated",{"1":{"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1},"3":{"0":9,"51":1,"91":3,"92":2,"93":3,"94":3,"96":1,"98":1,"99":1,"100":1,"186":1,"195":1,"229":2,"343":1,"350":1,"395":1,"403":1,"407":1,"413":2,"536":1,"591":1,"593":1,"612":1,"618":1,"638":1,"640":2,"649":1,"663":1,"665":1,"666":1,"669":1,"698":1,"738":1,"741":1,"825":1,"846":1,"847":1,"939":1,"1069":1,"1212":4,"1215":1,"1241":1,"1247":2,"1258":1,"1270":1,"1271":2,"1275":1,"1286":8,"1307":1,"1309":6,"1311":3,"1312":1,"1323":3,"1324":4,"1328":1,"1331":1,"1339":8,"1350":3,"1359":6,"1376":1,"1379":1,"1380":4,"1395":5,"1396":4,"1400":1,"1402":2,"1415":5,"1417":4,"1427":1,"1431":1,"1436":3,"1438":2,"1441":1,"1442":1,"1446":1,"1449":1,"1467":4,"1486":1,"1487":1,"1492":1,"1503":1,"1509":1,"1526":3,"1534":2,"1577":1,"1585":2,"1599":1,"1639":1,"1641":2,"1660":1,"1661":1,"1666":1,"1670":1,"1732":1,"1750":1,"1773":1,"1842":1,"1851":1,"1929":2,"1930":2,"1946":1,"1963":1,"1975":1,"2020":1,"2026":2,"2048":1,"2085":1,"2104":1,"2122":1,"2158":1,"2169":1,"2234":2}}],["deprovisioned",{"3":{"1568":1}}],["deprecation",{"0":{"1737":1},"3":{"447":1,"448":1,"1006":1,"1017":1,"1019":1,"1020":1,"1311":1,"1376":1,"1435":1,"1438":1,"1453":1,"1455":1,"1492":1,"2131":1,"2132":1,"2133":1,"2135":2}}],["deprecate",{"3":{"447":1,"449":1,"940":1,"2132":1,"2135":1}}],["deprecatedversions",{"3":{"1311":1}}],["deprecated",{"3":{"0":4,"109":1,"448":5,"449":2,"528":1,"572":1,"881":1,"1212":1,"1300":1,"1311":11,"1376":3,"1380":4,"1436":5,"1459":2,"1488":2,"1526":2,"1535":1,"1591":1,"2056":1,"2133":5,"2135":3,"2234":1}}],["depersonalizes",{"3":{"1402":1}}],["dependable",{"3":{"1311":1}}],["dependabot",{"2":{"149":1,"152":1,"1078":1},"3":{"0":2,"145":1,"147":2,"148":1,"149":6,"150":1,"152":4,"373":2,"870":1,"873":1,"1074":5,"1075":1,"1078":3,"1459":7,"1576":2,"1577":2,"1586":2,"1673":1}}],["dependants",{"3":{"1237":1}}],["depended",{"3":{"1034":1,"1191":1,"1200":1,"1323":2,"1415":1,"1505":1,"1881":1}}],["dependence",{"3":{"1324":1,"1359":1,"1396":1,"1402":1,"2003":1}}],["dependencies",{"2":{"584":1,"585":1,"1314":1,"1880":1,"1881":1,"2096":1,"2100":1},"3":{"0":1,"59":1,"122":1,"145":1,"146":1,"168":1,"237":1,"265":1,"371":1,"376":1,"583":5,"584":1,"585":6,"608":1,"609":1,"665":1,"708":1,"733":1,"742":1,"939":2,"940":2,"990":1,"1191":2,"1196":2,"1199":1,"1211":1,"1214":1,"1229":1,"1237":1,"1247":1,"1259":2,"1270":1,"1271":2,"1286":5,"1300":4,"1301":1,"1308":1,"1309":2,"1310":2,"1311":5,"1312":1,"1314":2,"1315":2,"1323":11,"1324":2,"1325":1,"1339":2,"1359":10,"1360":1,"1371":1,"1380":4,"1393":1,"1395":1,"1396":20,"1402":3,"1406":1,"1415":17,"1417":4,"1431":1,"1432":1,"1436":36,"1445":1,"1454":2,"1467":1,"1475":1,"1489":2,"1496":2,"1504":1,"1538":1,"1540":1,"1551":2,"1552":2,"1569":3,"1570":1,"1577":1,"1591":1,"1597":1,"1600":1,"1638":1,"1653":1,"1671":2,"1693":1,"1709":1,"1775":1,"1781":1,"1878":1,"1879":1,"1880":2,"1881":3,"1886":2,"1948":1,"1964":1,"2042":1,"2089":1,"2096":4,"2097":1,"2100":2,"2160":1,"2166":1,"2232":1}}],["dependencyversion",{"3":{"1576":1,"1577":1}}],["dependencyversiontests",{"2":{"1214":1,"1454":1,"1801":1,"2043":1,"2049":1},"3":{"147":1,"1074":1,"1199":1,"1207":2,"1214":1,"1436":10,"1454":1,"1489":3,"1491":2,"1493":1,"1577":1,"1801":1,"2043":1,"2049":1}}],["dependencyversiontestsbase",{"2":{"147":1,"1075":1,"1671":1},"3":{"0":1,"147":2,"150":1,"1074":1,"1075":1,"1199":2,"1207":2,"1212":1,"1431":5,"1436":7,"1489":2,"1491":1,"1576":1,"1577":1,"1586":1,"1671":1}}],["dependencycycles",{"3":{"1436":1}}],["dependencymodule",{"3":{"1323":2}}],["dependencyinjectionoutboxgatetests",{"3":{"1199":1,"1207":2,"1438":2}}],["dependencyinjectionbrokermessagingtests",{"2":{"1496":1},"3":{"1199":1,"1207":4,"1496":1,"1577":1}}],["dependencyinjectionadditionaltests",{"3":{"1199":1,"1207":2}}],["dependencyinjectionasserttests",{"3":{"1199":1,"1207":4,"1436":1,"1438":1,"1487":1}}],["dependencyinjectionassert",{"2":{"1497":1},"3":{"1199":4,"1207":2,"1428":1,"1436":7,"1438":1,"1488":2,"1496":1,"1497":1}}],["dependencyinjectionpushnotificationstests",{"3":{"1199":1,"1207":2}}],["dependencyinjectioninfrastructuretests",{"3":{"1175":1,"1199":1,"1207":2,"1286":3}}],["dependencyinjectiontests",{"2":{"1262":1},"3":{"996":1,"1199":6,"1207":13,"1262":2,"1270":1,"1323":1,"1436":6,"1438":1,"1487":1}}],["dependencyinjection",{"2":{"115":4,"145":1,"152":1,"203":1,"220":1,"354":1,"378":1,"514":1,"543":2,"552":1,"644":1,"652":1,"677":1,"696":1,"703":1,"736":1,"794":1,"822":1,"884":1,"917":1,"929":1,"991":1,"999":1,"1062":1,"1074":1,"1078":2,"1214":1,"1247":1,"1262":2,"1270":1,"1312":1,"1365":1,"1368":1,"1369":1,"1414":1,"1427":1,"1500":2,"1685":1,"1771":1},"3":{"24":1,"25":2,"27":4,"53":1,"68":3,"74":2,"96":1,"100":1,"109":1,"111":1,"112":1,"115":4,"121":1,"122":9,"126":1,"145":2,"150":4,"152":2,"180":1,"186":5,"193":1,"196":1,"198":1,"200":1,"201":1,"203":3,"216":2,"219":1,"220":2,"225":2,"228":1,"230":1,"231":2,"243":5,"245":1,"250":1,"251":1,"252":1,"254":1,"256":1,"257":1,"258":2,"259":3,"260":3,"261":4,"285":1,"300":1,"303":1,"306":1,"310":2,"318":7,"324":2,"326":1,"343":1,"352":1,"354":1,"378":1,"384":1,"413":6,"415":1,"434":2,"436":2,"459":2,"463":2,"464":2,"465":2,"466":2,"507":8,"511":3,"513":2,"514":1,"536":2,"543":3,"545":1,"549":2,"552":2,"583":2,"585":1,"640":7,"642":2,"644":2,"649":4,"652":1,"656":1,"657":1,"660":2,"674":23,"675":1,"676":5,"677":2,"682":1,"696":1,"698":1,"703":1,"707":1,"710":1,"715":2,"720":3,"725":1,"733":3,"736":3,"740":1,"790":1,"792":1,"794":1,"798":1,"804":1,"806":1,"819":3,"821":1,"822":3,"827":1,"846":1,"850":2,"881":1,"884":1,"905":2,"915":1,"917":1,"922":3,"924":4,"926":4,"927":3,"929":1,"931":4,"934":2,"946":1,"949":1,"954":2,"955":1,"960":1,"964":2,"965":1,"967":1,"979":6,"980":29,"982":5,"983":4,"988":1,"991":1,"996":5,"999":1,"1018":8,"1021":2,"1042":1,"1050":2,"1055":1,"1059":6,"1062":1,"1074":1,"1075":1,"1078":2,"1090":1,"1091":10,"1092":1,"1093":2,"1094":1,"1095":1,"1100":2,"1103":2,"1108":1,"1111":1,"1116":1,"1133":1,"1136":1,"1175":1,"1176":1,"1177":1,"1184":3,"1199":30,"1203":29,"1207":79,"1208":40,"1212":1,"1214":1,"1229":1,"1232":2,"1237":9,"1247":6,"1257":5,"1258":1,"1259":38,"1262":28,"1263":12,"1265":7,"1269":3,"1270":90,"1271":9,"1286":105,"1290":2,"1294":1,"1297":6,"1300":90,"1301":56,"1302":3,"1304":3,"1306":1,"1307":4,"1308":3,"1309":73,"1310":8,"1311":70,"1312":26,"1313":1,"1316":43,"1317":11,"1318":5,"1319":2,"1320":14,"1322":1,"1323":162,"1324":142,"1339":14,"1350":9,"1352":1,"1354":8,"1359":234,"1365":2,"1366":2,"1367":2,"1368":7,"1369":10,"1377":4,"1378":3,"1380":26,"1395":60,"1396":136,"1400":1,"1402":13,"1404":3,"1406":1,"1410":1,"1413":2,"1414":3,"1415":97,"1417":253,"1419":1,"1420":2,"1421":4,"1425":3,"1427":41,"1436":13,"1438":5,"1441":6,"1442":2,"1496":26,"1500":2,"1526":7,"1531":1,"1576":1,"1577":11,"1582":1,"1583":1,"1585":1,"1586":2,"1591":3,"1600":1,"1651":1,"1685":1,"1686":1,"1707":2,"1771":1,"1982":3,"1995":4,"1996":1,"2001":2,"2087":2,"2120":2,"2121":2,"2124":3,"2128":4,"2138":2,"2140":1,"2152":2,"2154":1,"2165":1,"2168":1,"2169":1,"2174":7,"2175":1,"2177":2,"2178":1,"2181":5,"2200":1,"2201":3,"2204":1}}],["dependency",{"0":{"1402":1,"1435":1,"1504":1,"1505":1,"1569":1},"1":{"1196":1,"1197":1,"1198":1,"1199":1,"2172":1,"2173":1,"2174":1,"2175":1,"2176":1,"2177":1,"2178":1,"2179":1,"2180":1,"2181":1,"2182":1},"3":{"0":6,"23":2,"33":1,"68":1,"71":1,"72":1,"73":1,"111":1,"122":1,"130":1,"135":2,"145":4,"147":1,"220":1,"227":1,"230":3,"234":2,"235":9,"236":1,"237":2,"263":1,"265":1,"281":1,"310":1,"312":1,"343":1,"369":3,"370":2,"372":1,"376":2,"381":1,"397":1,"403":1,"405":1,"408":1,"415":1,"440":1,"441":1,"454":1,"459":2,"465":1,"509":1,"545":2,"546":1,"547":1,"583":7,"584":1,"585":1,"591":1,"599":1,"601":1,"603":1,"607":1,"609":7,"611":1,"612":1,"665":1,"666":1,"682":1,"684":2,"707":3,"708":1,"734":1,"741":2,"745":1,"801":1,"811":1,"818":1,"821":1,"827":2,"828":1,"830":1,"861":1,"914":1,"939":1,"941":1,"954":2,"980":1,"994":1,"996":4,"999":1,"1018":1,"1036":1,"1043":1,"1050":1,"1051":3,"1059":1,"1066":1,"1067":2,"1068":2,"1069":1,"1075":2,"1077":1,"1090":1,"1091":1,"1092":3,"1093":1,"1117":2,"1124":1,"1135":1,"1162":1,"1179":1,"1185":1,"1191":4,"1192":1,"1194":1,"1195":1,"1196":1,"1200":2,"1201":1,"1210":1,"1211":3,"1212":2,"1214":1,"1216":1,"1229":1,"1230":2,"1237":2,"1244":1,"1247":6,"1250":1,"1256":2,"1259":10,"1270":14,"1271":2,"1275":1,"1285":2,"1286":23,"1287":1,"1289":2,"1293":1,"1297":1,"1300":27,"1301":7,"1303":1,"1307":1,"1308":1,"1309":20,"1310":4,"1311":18,"1313":1,"1315":6,"1320":2,"1323":38,"1324":35,"1328":2,"1331":1,"1332":3,"1333":2,"1335":2,"1336":1,"1337":2,"1339":38,"1347":1,"1349":1,"1350":12,"1358":1,"1359":44,"1369":11,"1377":1,"1380":17,"1391":2,"1395":11,"1396":35,"1400":1,"1402":8,"1403":1,"1406":1,"1407":1,"1415":15,"1416":5,"1417":22,"1418":2,"1419":1,"1422":1,"1427":15,"1428":1,"1429":1,"1430":1,"1431":3,"1432":2,"1435":2,"1436":100,"1438":4,"1441":1,"1442":1,"1443":6,"1445":1,"1446":1,"1449":1,"1450":2,"1452":1,"1453":5,"1454":3,"1455":4,"1459":3,"1461":1,"1465":2,"1467":10,"1469":1,"1474":1,"1475":1,"1476":6,"1483":1,"1488":1,"1489":3,"1490":1,"1491":1,"1492":1,"1493":1,"1496":6,"1498":1,"1499":1,"1500":1,"1501":1,"1502":2,"1517":1,"1525":1,"1526":3,"1534":2,"1535":1,"1540":1,"1544":1,"1548":1,"1550":1,"1551":1,"1553":1,"1563":1,"1566":2,"1569":2,"1571":2,"1572":1,"1576":1,"1577":9,"1582":1,"1585":1,"1586":2,"1591":3,"1599":1,"1600":1,"1611":1,"1653":1,"1654":1,"1660":1,"1662":1,"1663":1,"1670":3,"1671":1,"1673":2,"1677":2,"1709":1,"1738":1,"1751":2,"1772":2,"1779":1,"1782":1,"1785":1,"1796":1,"1800":1,"1805":1,"1807":1,"1815":4,"1831":1,"1833":2,"1841":2,"1843":1,"1865":1,"1877":1,"1878":2,"1881":4,"1882":4,"1883":1,"1885":1,"1886":1,"1934":1,"1935":1,"1940":1,"1945":1,"1948":1,"1970":1,"1971":1,"2001":1,"2008":2,"2009":1,"2011":3,"2015":2,"2025":1,"2031":1,"2038":1,"2040":2,"2041":2,"2042":3,"2044":2,"2048":1,"2049":2,"2050":3,"2054":1,"2055":1,"2057":1,"2073":1,"2081":2,"2100":1,"2101":1,"2106":1,"2128":2,"2129":2,"2137":1,"2158":1,"2159":2,"2160":2,"2171":3,"2172":4,"2173":1,"2175":1,"2176":2,"2180":1,"2181":1,"2182":4,"2195":1,"2211":1,"2232":1,"2234":2}}],["dependentforeignkey",{"3":{"1247":1,"1359":2}}],["dependents",{"3":{"0":1,"543":2,"547":1,"549":1,"1286":2,"1315":2,"1323":1,"1339":1,"2009":1}}],["dependent",{"2":{"1239":1,"1859":1},"3":{"0":2,"386":1,"387":1,"388":1,"392":1,"461":1,"462":1,"487":1,"550":1,"551":1,"582":1,"583":2,"584":1,"585":1,"692":1,"1029":1,"1066":1,"1162":1,"1191":1,"1196":1,"1199":2,"1207":1,"1237":1,"1239":3,"1247":6,"1271":1,"1315":1,"1323":4,"1324":3,"1328":1,"1339":3,"1350":1,"1359":9,"1375":1,"1380":1,"1392":1,"1395":5,"1396":2,"1402":1,"1417":2,"1436":5,"1438":5,"1441":1,"1444":1,"1486":1,"1490":1,"1492":1,"1689":1,"1859":1,"1881":2,"1922":1,"2051":1,"2053":1,"2061":1,"2234":1}}],["depend",{"0":{"2073":1},"2":{"1504":1},"3":{"54":1,"69":1,"185":1,"226":1,"265":1,"310":1,"389":1,"415":1,"509":1,"536":1,"555":1,"585":1,"592":1,"651":1,"698":2,"716":1,"862":1,"987":1,"1060":1,"1187":1,"1211":1,"1214":1,"1222":1,"1229":1,"1247":4,"1259":2,"1269":2,"1270":7,"1275":1,"1278":1,"1286":9,"1300":9,"1301":1,"1309":3,"1311":5,"1312":1,"1316":1,"1317":1,"1323":5,"1324":8,"1330":1,"1339":4,"1350":5,"1359":3,"1369":2,"1377":1,"1395":7,"1396":6,"1415":3,"1416":1,"1417":7,"1427":1,"1431":1,"1433":1,"1436":22,"1438":4,"1441":1,"1443":1,"1453":1,"1489":4,"1492":1,"1504":1,"1538":2,"1585":1,"1638":1,"1660":1,"1781":1,"1832":1,"1841":1,"1861":1,"1880":2,"1881":1,"1882":1,"1894":1,"1908":1,"1946":1,"1961":1,"2040":1,"2043":1,"2044":1,"2048":1,"2071":1,"2106":2}}],["depending",{"3":{"0":1,"244":1,"397":1,"507":1,"513":1,"547":1,"1035":1,"1126":1,"1237":1,"1259":1,"1286":5,"1300":4,"1303":1,"1309":1,"1311":1,"1324":1,"1339":2,"1350":1,"1359":3,"1369":2,"1380":2,"1395":3,"1396":5,"1402":2,"1415":1,"1436":3,"1456":1,"1596":1,"1727":1,"1781":1,"1850":1,"1898":1,"1902":1,"2044":1,"2158":2}}],["dependson",{"3":{"1467":1}}],["dependsonconstanttimecomparison",{"3":{"1436":1}}],["dependsonaslowkeyderivationfunction",{"3":{"1436":1}}],["depends",{"3":{"0":3,"24":1,"54":1,"123":1,"131":1,"159":1,"166":1,"177":1,"236":1,"243":1,"259":1,"303":1,"320":1,"342":1,"349":1,"372":1,"399":1,"460":1,"461":1,"494":1,"507":3,"509":1,"511":2,"513":2,"543":1,"544":1,"549":1,"556":1,"566":1,"574":1,"584":1,"599":1,"642":1,"667":1,"676":1,"682":1,"707":1,"709":1,"720":1,"727":1,"742":1,"748":1,"749":1,"753":3,"756":1,"801":1,"809":2,"827":3,"829":1,"890":1,"905":1,"926":1,"946":2,"988":1,"1020":1,"1059":1,"1091":1,"1093":1,"1170":1,"1191":1,"1193":1,"1200":1,"1211":3,"1212":1,"1229":16,"1237":36,"1241":1,"1247":46,"1257":1,"1259":41,"1269":1,"1270":64,"1271":11,"1273":1,"1285":1,"1286":188,"1292":1,"1300":176,"1301":17,"1307":1,"1309":68,"1310":14,"1311":95,"1312":11,"1320":1,"1323":96,"1324":186,"1339":69,"1341":1,"1346":1,"1349":1,"1350":114,"1351":1,"1359":385,"1369":32,"1380":55,"1382":1,"1383":1,"1395":170,"1396":214,"1402":89,"1404":1,"1413":1,"1415":113,"1416":20,"1417":116,"1423":1,"1427":31,"1436":437,"1456":2,"1460":1,"1465":2,"1467":1,"1489":1,"1490":1,"1498":1,"1503":1,"1553":1,"1577":1,"1660":1,"1666":1,"1684":1,"1781":1,"1791":1,"1793":1,"1844":1,"1846":1,"1849":1,"1863":1,"1878":1,"1883":1,"1896":1,"1915":2,"1924":1,"1935":1,"2001":1,"2002":2,"2080":1,"2096":2,"2100":1,"2101":2,"2102":1,"2119":1,"2124":1,"2125":1,"2177":1,"2180":1,"2193":1,"2201":1,"2234":1}}],["deps",{"3":{"1192":1,"1199":1,"1456":2,"1496":9}}],["departure",{"3":{"725":1}}],["departs",{"3":{"698":1,"1300":1,"1416":1}}],["depthbound",{"3":{"1436":2}}],["depthorinsightquality",{"3":{"1369":1}}],["depthorinsightqualityscore",{"3":{"1350":1,"1359":1,"1369":1}}],["depth",{"0":{"1903":1},"2":{"24":1,"1365":1,"2193":1},"3":{"0":1,"24":1,"27":2,"119":1,"207":1,"328":1,"333":1,"562":1,"566":2,"567":1,"650":1,"707":2,"725":1,"883":1,"1116":1,"1124":1,"1185":1,"1228":2,"1229":1,"1241":1,"1242":1,"1247":4,"1256":1,"1259":11,"1263":1,"1270":2,"1275":1,"1286":6,"1300":2,"1311":5,"1324":4,"1336":1,"1339":3,"1350":1,"1359":1,"1365":1,"1366":1,"1369":1,"1395":1,"1396":1,"1402":1,"1415":4,"1417":1,"1436":17,"1453":2,"1454":1,"1455":2,"1467":2,"1475":1,"1476":1,"1480":1,"1548":1,"1590":1,"1627":1,"1639":2,"1640":1,"1658":1,"1665":1,"1692":1,"1757":1,"1815":1,"1821":1,"1823":1,"1826":1,"1827":1,"1969":1,"2001":1,"2007":1,"2124":1,"2128":1,"2150":1,"2158":3,"2159":2,"2161":1,"2193":2,"2195":2}}],["deploynotificationhub=false",{"3":{"1481":1}}],["deploynotificationhub",{"2":{"1470":1,"1481":1,"1484":1},"3":{"1467":4,"1470":1,"1481":1,"1484":1}}],["deployability",{"3":{"1323":1,"1544":1,"1577":1,"1589":1,"1596":1,"1597":1}}],["deployable",{"3":{"46":1,"597":1,"599":2,"603":1,"610":1,"838":1,"868":1,"1237":1,"1396":1,"1436":2,"1439":1,"1445":1,"1450":1,"1455":1,"1464":1,"1467":2,"1477":2,"1544":1,"1788":2,"1793":1,"2112":1}}],["deployables",{"3":{"0":1,"61":1,"62":1,"599":1,"1339":2,"1436":1,"1442":1,"1467":3,"1792":1,"2028":1}}],["deploying",{"3":{"626":1,"1044":1,"1427":1,"1455":1,"1467":1,"1577":1,"2194":1}}],["deployers",{"3":{"1577":1,"1582":1}}],["deployer",{"3":{"69":1,"1578":1,"1583":1,"1680":1}}],["deployed",{"2":{"1331":1},"3":{"0":10,"18":1,"26":1,"58":1,"62":1,"79":1,"91":1,"95":1,"96":1,"136":2,"155":1,"159":1,"195":1,"259":1,"361":1,"390":1,"395":1,"396":1,"397":2,"459":1,"509":1,"550":1,"564":1,"591":2,"598":1,"599":1,"607":2,"609":2,"611":5,"618":1,"620":1,"625":1,"626":2,"629":1,"665":1,"667":3,"676":1,"690":1,"713":1,"725":1,"732":1,"757":1,"758":1,"765":1,"766":1,"773":1,"776":1,"827":2,"860":1,"861":2,"863":1,"913":1,"914":1,"915":1,"918":1,"933":1,"971":1,"972":2,"995":1,"1017":1,"1018":2,"1021":1,"1040":1,"1058":1,"1060":1,"1066":1,"1082":1,"1085":1,"1107":1,"1108":1,"1109":1,"1118":2,"1119":1,"1124":1,"1135":1,"1143":1,"1147":1,"1254":2,"1259":5,"1270":10,"1286":6,"1293":1,"1300":2,"1301":6,"1309":2,"1311":3,"1313":1,"1323":3,"1324":2,"1331":1,"1333":1,"1335":1,"1339":14,"1350":3,"1359":3,"1368":1,"1369":4,"1396":3,"1401":1,"1402":3,"1415":2,"1427":1,"1434":1,"1435":1,"1436":13,"1437":1,"1438":2,"1441":2,"1442":2,"1443":2,"1445":2,"1455":1,"1465":4,"1467":4,"1474":1,"1477":2,"1478":2,"1481":1,"1484":1,"1486":1,"1489":1,"1492":2,"1496":2,"1500":2,"1526":4,"1531":1,"1577":1,"1596":2,"1641":1,"1671":1,"1672":1,"1673":1,"1677":1,"1679":1,"1718":1,"1723":1,"1785":2,"1841":1,"1845":1,"1848":1,"1855":1,"1861":1,"1886":1,"1887":2,"1888":2,"1892":3,"1896":1,"1898":2,"1899":1,"1909":1,"1916":1,"1923":2,"1924":1,"1970":1,"2011":1,"2044":2,"2045":2,"2048":2,"2058":1,"2112":1,"2145":1,"2156":1,"2158":1,"2160":1,"2196":3,"2200":1,"2216":1,"2223":2,"2230":1,"2231":1}}],["deploymentmode",{"2":{"1470":1},"3":{"1470":1}}],["deploymentparameters",{"2":{"1466":1},"3":{"1466":1}}],["deployment",{"0":{"1466":1,"1468":1,"1554":1},"1":{"1462":1,"1463":1,"1464":1,"1465":1,"1466":1,"1467":1,"1468":1,"1469":1,"1470":1},"2":{"1331":1,"1335":1,"1575":1,"1674":1},"3":{"0":3,"31":1,"32":1,"46":1,"47":1,"55":1,"158":1,"159":1,"168":2,"174":1,"177":2,"193":1,"196":1,"216":1,"227":1,"234":1,"242":1,"243":1,"244":1,"245":1,"255":1,"283":1,"312":1,"343":1,"360":1,"361":1,"386":1,"397":1,"398":1,"403":1,"526":1,"598":1,"599":6,"600":1,"601":2,"608":1,"609":2,"611":3,"612":1,"640":1,"641":2,"650":1,"664":1,"665":4,"666":1,"667":1,"675":1,"700":2,"756":1,"790":1,"792":1,"820":1,"821":1,"827":6,"837":1,"838":1,"839":1,"870":1,"871":1,"915":1,"930":1,"933":1,"948":1,"972":2,"1042":1,"1044":1,"1059":1,"1076":1,"1092":1,"1109":1,"1192":1,"1216":1,"1237":1,"1255":2,"1257":1,"1259":8,"1286":9,"1300":10,"1301":3,"1309":1,"1311":13,"1320":3,"1323":21,"1324":14,"1331":2,"1332":2,"1333":1,"1334":1,"1335":1,"1336":1,"1337":1,"1338":2,"1339":22,"1350":2,"1357":1,"1358":1,"1380":2,"1391":1,"1395":3,"1396":10,"1400":1,"1402":1,"1415":2,"1416":1,"1417":1,"1424":1,"1427":3,"1429":1,"1431":1,"1436":17,"1438":1,"1441":2,"1442":1,"1443":1,"1445":1,"1446":1,"1450":1,"1453":3,"1454":2,"1455":8,"1461":2,"1462":2,"1463":2,"1466":1,"1467":22,"1468":1,"1469":1,"1470":2,"1472":3,"1474":1,"1475":1,"1476":2,"1481":1,"1483":1,"1486":1,"1488":1,"1489":2,"1492":1,"1493":1,"1496":4,"1499":1,"1525":1,"1526":2,"1534":1,"1535":1,"1554":1,"1574":1,"1575":4,"1577":21,"1578":1,"1581":2,"1582":4,"1583":2,"1584":1,"1586":3,"1591":1,"1599":1,"1600":1,"1630":1,"1670":2,"1674":2,"1677":2,"1678":1,"1706":1,"1723":2,"1724":1,"1784":1,"1796":1,"1799":1,"1800":3,"1842":2,"1843":1,"1849":2,"1852":1,"1893":1,"1898":1,"1899":1,"1904":2,"1911":1,"1915":1,"1917":1,"1936":1,"1940":1,"1970":1,"2000":1,"2002":3,"2011":1,"2023":1,"2037":1,"2047":1,"2111":1,"2115":2,"2143":1,"2152":2,"2154":1,"2158":1,"2159":1,"2160":4,"2162":1,"2194":2,"2234":1}}],["deployments",{"3":{"0":1,"224":1,"246":1,"382":1,"395":1,"397":1,"409":1,"434":1,"584":1,"698":1,"811":1,"973":1,"990":1,"1152":1,"1154":1,"1259":1,"1300":1,"1301":1,"1311":1,"1323":2,"1443":1,"1453":1,"1454":1,"1475":1,"1554":1,"1898":1,"1923":1,"1949":1,"2111":2,"2116":1,"2117":1}}],["deploys",{"3":{"0":2,"67":1,"403":2,"564":2,"590":1,"627":1,"766":1,"768":1,"863":1,"865":1,"869":1,"916":1,"1091":1,"1212":1,"1436":1,"1445":1,"1455":4,"1465":2,"1467":2,"1470":1,"1472":1,"1475":1,"1525":1,"1526":3,"1531":1,"1534":2,"1535":1,"1554":1,"1588":1,"1596":1,"1889":1}}],["deploy",{"0":{"1455":1,"1466":1,"2037":1,"2191":1},"1":{"623":1,"624":1,"625":1,"626":1,"627":1,"628":1,"629":1,"630":1,"763":1,"764":1,"765":1,"766":1,"767":1,"768":1,"769":1,"770":1,"858":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"865":1},"2":{"63":1,"291":1,"296":1,"375":1,"452":1,"567":1,"589":1,"594":1,"597":1,"604":1,"616":1,"620":1,"621":1,"624":2,"625":1,"626":1,"628":1,"629":2,"642":1,"668":1,"755":1,"756":2,"761":2,"764":2,"766":1,"767":2,"768":3,"769":1,"770":1,"863":1,"864":1,"867":1,"877":1,"975":1,"1075":1,"1457":1,"1458":1,"1460":2,"1461":2,"1462":1,"1463":2,"1470":1,"1475":1,"1478":1,"1482":1,"1524":1,"1525":1,"1531":1,"1532":1,"1598":1,"2035":1},"3":{"0":35,"25":1,"58":2,"60":1,"62":5,"63":2,"145":2,"150":2,"228":1,"234":1,"246":1,"290":1,"291":14,"292":1,"293":3,"295":1,"296":1,"299":1,"300":1,"301":1,"310":1,"360":1,"365":1,"374":1,"375":4,"405":1,"451":1,"452":3,"453":1,"517":1,"558":1,"563":9,"564":18,"565":1,"566":7,"567":3,"573":2,"589":2,"591":13,"594":3,"595":1,"597":1,"599":8,"600":2,"601":3,"602":1,"604":1,"609":1,"616":4,"618":5,"619":1,"620":6,"621":1,"623":1,"624":10,"625":11,"626":56,"627":10,"628":11,"629":12,"630":2,"638":1,"639":1,"640":6,"641":1,"642":5,"644":1,"665":3,"668":3,"669":3,"698":1,"706":1,"708":1,"718":1,"732":1,"733":1,"755":2,"756":10,"757":36,"758":6,"759":8,"760":5,"761":5,"762":1,"763":1,"764":5,"765":2,"766":23,"767":5,"768":9,"769":2,"770":2,"774":1,"776":1,"827":2,"840":1,"858":1,"860":1,"861":6,"862":1,"863":6,"864":2,"865":2,"867":1,"868":3,"869":4,"870":7,"871":1,"872":1,"873":3,"874":1,"875":2,"876":1,"877":4,"907":1,"914":1,"915":2,"917":1,"953":1,"971":3,"972":4,"973":2,"974":2,"975":1,"976":1,"1017":1,"1018":6,"1019":1,"1020":2,"1058":1,"1075":3,"1101":1,"1116":1,"1119":1,"1192":1,"1212":10,"1215":1,"1247":1,"1286":1,"1300":1,"1301":2,"1309":3,"1311":2,"1312":2,"1318":1,"1323":2,"1324":1,"1328":1,"1339":2,"1357":1,"1359":4,"1366":1,"1380":1,"1396":6,"1409":1,"1414":1,"1415":2,"1436":19,"1438":6,"1445":20,"1446":1,"1449":2,"1450":2,"1452":2,"1453":1,"1454":1,"1455":249,"1456":14,"1457":13,"1458":2,"1459":6,"1460":12,"1461":19,"1462":2,"1463":16,"1464":4,"1465":21,"1466":15,"1467":52,"1468":3,"1469":3,"1470":8,"1472":10,"1474":15,"1475":29,"1476":9,"1477":7,"1478":3,"1481":1,"1482":7,"1484":3,"1485":1,"1486":31,"1489":1,"1490":11,"1491":2,"1492":70,"1493":1,"1494":1,"1496":16,"1509":1,"1523":1,"1524":9,"1525":7,"1526":75,"1530":1,"1531":14,"1532":1,"1533":3,"1534":12,"1535":14,"1544":3,"1545":1,"1547":1,"1554":3,"1570":2,"1575":3,"1577":6,"1581":1,"1582":3,"1583":1,"1584":1,"1588":2,"1589":10,"1590":4,"1591":80,"1595":2,"1596":24,"1597":3,"1598":2,"1599":10,"1600":16,"1611":6,"1631":1,"1670":2,"1724":1,"1739":2,"1775":1,"1784":1,"1842":1,"1884":1,"1887":1,"1888":1,"1889":2,"1916":1,"1947":1,"1948":1,"1964":1,"2004":1,"2035":6,"2037":3,"2038":2,"2044":1,"2057":1,"2058":3,"2107":1,"2112":1,"2114":1,"2134":2,"2136":1,"2144":1,"2148":1,"2149":1,"2156":1,"2183":1,"2192":1,"2196":1,"2201":1,"2234":11}}],["devops",{"0":{"1554":1},"2":{"1335":1},"3":{"1192":6,"1194":2,"1212":25,"1216":2,"1259":1,"1286":3,"1300":3,"1309":1,"1311":7,"1323":7,"1324":3,"1331":1,"1332":1,"1334":1,"1335":1,"1339":13,"1357":1,"1358":1,"1369":1,"1380":1,"1396":4,"1415":1,"1416":1,"1417":1,"1427":1,"1436":6,"1441":1,"1445":1,"1446":1,"1450":1,"1453":1,"1454":1,"1455":4,"1461":1,"1462":1,"1463":1,"1467":1,"1469":1,"1472":1,"1475":1,"1477":1,"1481":1,"1483":1,"1486":1,"1489":1,"1492":1,"1493":1,"1494":2,"1496":67,"1497":1,"1499":11,"1526":1,"1535":1,"1577":1,"1581":1,"1582":1,"1583":1,"1584":1,"1590":1,"1591":1,"1600":1,"1674":1,"1796":1,"1800":1,"2015":1,"2039":1,"2215":2,"2219":1,"2220":1,"2221":2,"2222":2}}],["develop",{"3":{"1570":1,"1648":1,"1661":1}}],["developing",{"3":{"1537":1,"1797":1,"2222":1}}],["developed",{"3":{"1499":22,"1572":1,"2222":2}}],["developercertificate",{"2":{"1328":1,"1449":1},"3":{"1328":1,"1339":1,"1430":1,"1449":1}}],["developercertificateavailabilitytests",{"3":{"1199":1,"1207":2,"1487":1}}],["developercertificateavailability",{"2":{"1067":1,"1428":1,"1430":1,"1488":1},"3":{"1067":3,"1199":3,"1207":2,"1428":1,"1430":2,"1488":2}}],["developers",{"1":{"1628":1,"1629":1,"1630":1,"1631":1,"1632":1,"1633":1,"1634":1,"1635":1,"1636":1,"1637":1,"1638":1,"1639":1,"1640":1,"1641":1},"3":{"86":1,"527":1,"566":1,"1211":1,"1311":1,"1340":1,"1364":3,"1369":4,"1395":2,"1416":2,"1455":1,"1523":1,"1570":1,"1628":1,"1629":1,"1637":1,"1638":1,"1785":1,"2005":1,"2051":1,"2097":1,"2112":1,"2216":1,"2218":1,"2223":1,"2241":2,"2242":3,"2244":1}}],["developer",{"0":{"1570":1},"2":{"1327":1},"3":{"0":1,"265":1,"350":1,"486":1,"576":1,"640":2,"641":2,"642":1,"650":1,"665":2,"819":1,"820":1,"914":2,"916":1,"930":1,"932":1,"982":1,"1012":1,"1067":1,"1069":1,"1091":1,"1109":1,"1161":1,"1216":1,"1237":1,"1259":1,"1270":1,"1271":1,"1286":3,"1311":4,"1323":8,"1324":4,"1326":1,"1327":1,"1328":1,"1335":2,"1336":1,"1339":12,"1354":1,"1359":1,"1396":5,"1415":1,"1416":2,"1417":4,"1427":1,"1436":23,"1440":2,"1441":2,"1442":1,"1446":1,"1449":1,"1450":1,"1453":1,"1455":1,"1456":1,"1461":1,"1464":5,"1481":1,"1482":2,"1486":1,"1488":1,"1489":1,"1490":1,"1492":1,"1493":1,"1499":1,"1526":1,"1535":1,"1553":1,"1554":1,"1577":1,"1581":1,"1582":1,"1583":1,"1591":1,"1597":1,"1796":1,"1843":1,"1885":1,"1894":1,"1956":1,"1970":1,"2031":1,"2108":1,"2222":2,"2227":1,"2240":1}}],["development",{"0":{"2227":1},"2":{"92":1,"95":1,"96":1,"102":1,"573":1,"1429":1,"1490":1},"3":{"0":4,"31":2,"92":1,"93":1,"95":3,"96":1,"102":1,"104":1,"212":1,"214":2,"218":1,"219":2,"265":4,"290":1,"296":1,"397":1,"401":1,"451":1,"452":1,"573":1,"638":1,"639":1,"640":1,"666":1,"667":1,"774":3,"775":1,"790":1,"914":1,"915":1,"1066":1,"1067":1,"1068":1,"1091":1,"1108":7,"1110":1,"1112":1,"1183":1,"1212":1,"1259":1,"1273":2,"1284":1,"1286":13,"1298":1,"1300":2,"1309":2,"1311":22,"1320":4,"1323":13,"1324":8,"1333":1,"1336":2,"1339":10,"1380":1,"1395":1,"1396":1,"1412":1,"1415":4,"1416":1,"1417":1,"1421":2,"1427":3,"1429":2,"1430":1,"1434":1,"1436":6,"1438":3,"1441":3,"1443":3,"1453":1,"1460":1,"1467":1,"1486":1,"1487":1,"1488":2,"1489":1,"1490":3,"1591":1,"1631":1,"1640":1,"1653":1,"1655":1,"1661":1,"1663":1,"1664":1,"1666":1,"1667":2,"1719":1,"1723":1,"1842":1,"1843":1,"1898":7,"1904":2,"1925":1,"1968":1,"2017":1,"2029":1,"2085":1,"2128":1,"2134":1,"2151":1,"2152":2,"2158":1,"2174":2,"2215":2,"2220":1,"2221":1,"2223":1,"2227":1,"2242":1,"2245":1}}],["deviates",{"3":{"1370":1}}],["deviate",{"3":{"1359":1}}],["deviations",{"0":{"1376":1},"3":{"470":1,"1169":1,"1311":1,"1396":1}}],["deviation",{"3":{"0":1,"107":1,"109":1,"111":2,"1237":1,"1300":1,"1309":2,"1311":3,"1324":3,"1350":1,"1417":1,"1436":1,"1638":1}}],["devicetestchecklist",{"3":{"1481":1}}],["devicetype",{"3":{"1300":1,"1415":2,"1630":1,"1641":1}}],["deviceownerauthentication",{"3":{"1417":1}}],["devicecredential",{"3":{"1417":1}}],["devicecapabilitiesinitializer",{"2":{"413":1},"3":{"413":1,"1199":2,"1203":1,"1207":2,"1417":22}}],["devicefieldmaxlength",{"2":{"1405":1},"3":{"1405":1,"1415":3}}],["deviceformfactor",{"3":{"1300":1,"1415":2,"1630":1,"1641":1}}],["devicename",{"3":{"1300":1,"1415":2,"1630":1,"1641":1}}],["devicemanufacturer",{"3":{"1300":1,"1415":3,"1630":1,"1641":1}}],["devicemodel",{"3":{"1300":1,"1415":3,"1630":1,"1641":1}}],["deviceprefs",{"3":{"1417":6}}],["devicepreferencekeys",{"3":{"1199":3,"1203":1,"1207":2,"1417":13}}],["deviceplatform",{"3":{"1300":1,"1415":2,"1417":4,"1630":1,"1641":1}}],["deviceid",{"3":{"1300":1,"1415":3,"1630":1,"1641":6}}],["deviceinstallationrequest",{"2":{"1303":1,"1308":1},"3":{"1199":6,"1203":1,"1207":2,"1286":2,"1303":1,"1308":2,"1309":9,"1323":3,"1496":2}}],["deviceinfo",{"2":{"682":1},"3":{"682":1,"1417":11,"1641":1}}],["deviceuimodule",{"2":{"1626":1},"3":{"649":2,"652":1,"1199":2,"1203":1,"1207":2,"1324":6,"1416":18,"1496":1,"1599":2,"1626":1,"1627":1}}],["devicesettings",{"3":{"1396":1,"1416":1}}],["devicestorage",{"2":{"1417":1},"3":{"416":1,"1203":9,"1207":18,"1417":34,"2120":1}}],["devicestatus",{"2":{"1417":2},"3":{"416":1,"1203":13,"1207":26,"1417":39,"2120":2}}],["devices",{"0":{"1713":1,"1936":1},"3":{"0":2,"186":1,"225":1,"274":1,"434":1,"616":1,"618":1,"903":1,"905":2,"906":2,"907":1,"910":1,"1212":1,"1286":1,"1300":5,"1302":1,"1309":4,"1311":2,"1323":3,"1324":15,"1395":1,"1415":2,"1416":1,"1417":10,"1436":3,"1438":1,"1467":1,"1559":1,"1641":1,"1666":1,"1747":1,"1932":1,"1933":1,"1936":2,"1938":1,"1982":2,"1984":1,"2083":1,"2222":1}}],["devicescontrollertests",{"3":{"1199":1,"1207":2,"1309":2}}],["devicescontroller",{"2":{"1302":1,"1936":1,"1938":1,"1941":1},"3":{"0":1,"188":1,"434":1,"1199":2,"1203":1,"1207":2,"1286":4,"1302":1,"1303":1,"1308":3,"1309":10,"1311":1,"1323":4,"1496":3,"1936":1,"1938":1,"1941":1,"2139":1}}],["device",{"0":{"1290":1,"1308":1,"1559":1,"1982":1},"1":{"410":1,"411":1,"412":1,"413":1,"414":1,"415":1,"416":1,"679":1,"680":1,"681":1,"682":1,"683":1,"684":1,"685":1,"686":1,"902":2,"903":2,"904":2,"905":2,"906":2,"907":2,"908":2,"909":2,"910":2,"1417":1,"1980":1,"1981":1,"1982":1,"1983":1,"1984":1,"1985":1,"2118":1,"2119":1,"2120":1,"2121":1,"2122":1,"2123":1,"2124":1,"2125":1},"3":{"0":12,"188":1,"265":4,"266":1,"267":1,"273":1,"350":1,"353":1,"410":1,"411":1,"412":1,"413":1,"422":1,"426":1,"427":1,"433":2,"434":1,"435":3,"497":2,"499":1,"500":1,"501":5,"510":1,"556":1,"618":2,"649":1,"650":1,"653":1,"679":1,"681":2,"683":1,"686":1,"689":1,"691":2,"736":1,"902":2,"903":3,"904":3,"905":12,"906":7,"907":3,"910":1,"954":1,"1192":3,"1195":1,"1202":2,"1203":2,"1212":5,"1216":1,"1283":2,"1285":1,"1286":9,"1287":2,"1289":2,"1290":5,"1291":1,"1296":1,"1300":55,"1302":1,"1308":2,"1309":8,"1311":15,"1322":1,"1323":12,"1324":59,"1350":2,"1359":2,"1381":2,"1391":3,"1395":16,"1396":19,"1402":1,"1405":2,"1409":1,"1412":1,"1415":20,"1416":25,"1417":131,"1427":1,"1436":11,"1438":8,"1479":3,"1481":2,"1482":1,"1489":1,"1490":1,"1491":1,"1496":11,"1499":1,"1505":1,"1511":1,"1517":1,"1577":3,"1585":2,"1599":1,"1626":2,"1627":1,"1629":1,"1630":5,"1631":2,"1632":1,"1641":29,"1659":1,"1660":1,"1667":3,"1668":1,"1669":6,"1672":1,"1711":1,"1779":3,"1796":1,"1936":3,"1938":1,"1940":1,"1976":1,"1977":1,"1979":1,"1980":2,"1982":8,"1984":5,"1985":6,"2075":1,"2084":1,"2085":1,"2088":1,"2117":1,"2118":2,"2119":2,"2120":1,"2122":1,"2125":3,"2139":1,"2210":1,"2212":2,"2234":4}}],["dev",{"0":{"1364":1},"1":{"637":1,"638":1,"639":1,"640":1,"641":1,"642":1,"643":1,"644":1,"645":1,"1105":1,"1106":1,"1107":1,"1108":1,"1109":1,"1110":1,"1111":1,"1112":1},"3":{"0":6,"92":1,"95":2,"96":1,"102":1,"104":1,"290":1,"349":1,"351":1,"450":2,"451":1,"556":1,"557":1,"637":1,"643":1,"818":1,"820":1,"838":1,"1067":1,"1069":1,"1105":1,"1116":1,"1212":2,"1257":1,"1286":1,"1300":1,"1311":2,"1323":2,"1339":2,"1364":2,"1369":3,"1416":3,"1421":1,"1430":1,"1436":2,"1441":3,"1442":1,"1449":1,"1455":1,"1456":2,"1488":1,"1490":1,"1492":1,"1554":1,"1568":1,"1570":3,"1577":1,"1611":1,"1718":1,"1727":1,"1898":2,"1899":1,"1904":1,"1974":1,"2056":1,"2134":1,"2135":1,"2234":2}}],["december",{"3":{"2222":2}}],["decaying",{"3":{"1436":1}}],["decays",{"3":{"1005":1,"1019":1,"1436":1}}],["decade",{"3":{"1436":1}}],["deck",{"3":{"1115":2,"1117":1,"1118":1,"1340":1,"1342":1,"1350":2,"1357":1,"1389":2,"1395":2,"2241":1}}],["decks",{"3":{"0":1,"443":1,"1373":1,"1380":1,"1389":1,"1467":2,"1640":1}}],["decreasing",{"3":{"1767":1}}],["decreaseinventory",{"3":{"1746":1,"1749":2,"1769":1}}],["decreaseinventoryhandler",{"3":{"1270":1}}],["decreaseinventoryapplier",{"3":{"1270":1}}],["decrease",{"3":{"1270":1,"1496":1,"1742":2,"1746":1,"1749":1,"1767":1,"1768":1}}],["decreaseorderapplier",{"3":{"1199":3,"1207":1}}],["decreased",{"3":{"926":1,"1270":1}}],["decrementasync",{"2":{"1765":1},"3":{"1765":1}}],["decrementing",{"3":{"1323":1}}],["decremented",{"3":{"1125":1,"1324":1,"1835":1,"2163":1}}],["decrements",{"3":{"535":1,"1309":1,"1324":2,"1591":2,"1749":2,"1765":1,"2163":2,"2166":1}}],["decrement",{"3":{"201":1,"535":1,"1286":2,"1309":2,"1315":1,"1324":4,"1600":2,"1749":1,"1881":1,"2163":2,"2166":1}}],["decryptable",{"3":{"667":1}}],["decrypted",{"3":{"664":2,"1336":1,"1339":2,"1442":1,"1970":2}}],["decryption",{"3":{"359":1,"365":1,"665":1,"667":1,"670":1,"1284":1,"1286":1,"1339":1,"1442":1,"2144":1}}],["decrypting",{"3":{"359":2,"2144":2,"2148":1}}],["decrypts",{"3":{"358":2,"359":1,"361":1,"1286":4,"1903":1,"2142":2,"2144":1}}],["decrypt",{"2":{"359":1,"360":1,"2144":1},"3":{"0":1,"359":4,"360":2,"361":1,"1212":1,"1286":4,"1970":1,"2144":4,"2145":1,"2234":1}}],["declining",{"3":{"649":1,"827":1,"828":1,"1324":1,"1339":1,"1350":1,"1396":1,"1415":2,"1417":1}}],["declinequeue",{"3":{"1350":1,"1359":4,"1395":1}}],["decline",{"2":{"1633":1},"3":{"0":1,"742":1,"827":3,"840":1,"915":1,"979":1,"1311":1,"1324":1,"1344":1,"1350":1,"1417":1,"1455":1,"1492":1,"1630":2,"1631":3,"1632":1,"1633":1,"1635":2,"1640":1,"2137":1,"2141":1}}],["declinedsessions",{"3":{"1350":1}}],["declined",{"2":{"1633":1},"3":{"0":2,"151":1,"245":1,"286":1,"405":1,"539":1,"543":1,"659":1,"785":1,"800":1,"827":1,"832":1,"947":1,"1035":1,"1051":3,"1141":1,"1212":1,"1311":1,"1339":1,"1344":1,"1347":1,"1350":3,"1359":27,"1375":1,"1380":2,"1395":1,"1396":3,"1630":1,"1631":2,"1633":1,"1635":2,"1639":2,"2033":1}}],["declines",{"1":{"824":1,"825":1,"826":1,"827":1,"828":1,"829":1,"830":1,"831":1,"832":1,"833":1,"834":1},"3":{"0":2,"692":1,"706":1,"742":1,"745":1,"824":1,"825":1,"827":1,"834":1,"840":1,"948":1,"964":1,"968":1,"1017":1,"1212":1,"1301":1,"1311":1,"1324":1,"1337":1,"1339":3,"1395":1,"1422":1,"1948":1,"2029":1,"2234":1}}],["declarable",{"3":{"1286":1}}],["declaratively",{"3":{"1237":1,"1321":1,"1350":1,"1359":3,"1396":1,"1411":1,"1465":1,"1662":1}}],["declarative",{"3":{"12":1,"838":1,"1237":1,"1247":1,"1264":1,"1270":1,"1286":4,"1297":1,"1309":1,"1310":2,"1323":5,"1324":3,"1359":11,"1369":1,"1380":5,"1396":3,"1402":3,"1415":2,"1416":1,"1436":2,"1662":1,"1668":1,"1865":1,"1867":1,"1868":1,"1952":1,"1955":1,"2068":1,"2231":1}}],["declarativenavigationpopulatortests",{"3":{"1199":1,"1207":3}}],["declarativenavigationpopulator",{"2":{"11":1,"12":1,"1865":1},"3":{"11":1,"12":1,"1199":19,"1203":1,"1207":2,"1310":16,"1359":29,"1402":3,"1865":1}}],["declarationfailure",{"3":{"1436":2}}],["declarationrule",{"2":{"1436":2},"3":{"1436":6}}],["declaration",{"0":{"1384":1},"3":{"0":3,"102":1,"126":1,"130":4,"135":1,"138":1,"139":1,"141":1,"142":2,"160":2,"166":1,"184":1,"251":2,"256":2,"257":1,"336":1,"364":1,"388":1,"413":1,"428":1,"454":1,"463":1,"464":1,"471":1,"492":1,"543":1,"550":1,"585":4,"609":1,"618":1,"633":1,"682":1,"683":1,"726":1,"741":1,"819":1,"821":1,"827":1,"832":1,"834":1,"838":1,"848":1,"889":1,"906":1,"923":1,"954":1,"966":1,"967":1,"980":1,"981":3,"982":1,"1050":1,"1051":1,"1052":1,"1124":1,"1146":1,"1156":1,"1184":1,"1204":1,"1212":1,"1229":3,"1237":6,"1247":4,"1270":15,"1286":20,"1300":7,"1301":1,"1309":1,"1310":3,"1311":10,"1312":1,"1323":18,"1324":15,"1326":1,"1331":1,"1339":1,"1350":7,"1353":1,"1357":1,"1359":38,"1366":1,"1369":8,"1375":1,"1376":1,"1380":2,"1395":11,"1396":15,"1402":1,"1415":17,"1416":1,"1417":6,"1431":1,"1436":50,"1441":3,"1443":1,"1451":1,"1455":1,"1457":1,"1473":1,"1488":1,"1496":10,"1500":3,"1600":1,"1882":1,"1962":1,"2009":1,"2043":1,"2058":1,"2091":1,"2234":1}}],["declarations",{"2":{"1214":1},"3":{"0":4,"11":1,"130":2,"135":2,"136":1,"138":2,"139":1,"141":4,"142":1,"395":1,"531":1,"543":2,"550":2,"551":1,"572":1,"583":1,"607":1,"610":1,"621":1,"681":1,"966":1,"967":1,"980":1,"999":1,"1052":1,"1055":1,"1205":1,"1214":1,"1233":1,"1237":1,"1270":2,"1286":2,"1311":1,"1323":1,"1324":1,"1350":1,"1359":2,"1369":2,"1396":1,"1415":3,"1417":1,"1436":11,"1441":1,"1483":1,"1488":1,"1489":1,"1577":2,"1582":1,"1881":1,"2045":1,"2056":1,"2081":2}}],["declaringentitytype",{"3":{"1247":1,"1310":2}}],["declaringtype",{"2":{"10":1},"3":{"10":1,"1310":1,"1436":3,"1865":1}}],["declaring",{"0":{"1266":1,"1326":1},"3":{"0":2,"24":1,"39":2,"109":1,"131":1,"132":1,"330":1,"471":1,"584":1,"611":1,"642":1,"650":1,"676":1,"782":1,"829":1,"889":1,"1019":1,"1051":1,"1055":1,"1116":1,"1161":3,"1196":1,"1236":1,"1237":1,"1241":1,"1247":3,"1249":1,"1256":1,"1259":4,"1264":1,"1270":4,"1271":1,"1276":1,"1282":1,"1285":1,"1286":13,"1297":1,"1300":7,"1309":1,"1310":5,"1311":3,"1323":6,"1324":6,"1339":1,"1350":3,"1359":27,"1369":2,"1373":1,"1380":3,"1389":1,"1395":2,"1396":4,"1402":2,"1412":1,"1415":6,"1417":1,"1431":1,"1436":29,"1441":1,"1447":1,"1451":1,"1467":4,"1478":1,"1489":1,"1698":1,"1810":1,"1821":1,"1834":1,"1884":1,"1995":1,"2034":1,"2064":1,"2128":1}}],["declareatleastonehandler",{"3":{"1436":1}}],["declareanauthorizationdecision",{"2":{"189":1},"3":{"189":1,"1300":1,"1436":3}}],["declare",{"3":{"0":5,"5":1,"24":1,"59":1,"68":1,"71":1,"91":1,"95":1,"117":2,"136":1,"145":2,"147":2,"149":1,"155":1,"160":2,"162":1,"166":2,"184":2,"186":2,"189":1,"243":2,"265":2,"373":1,"448":1,"530":1,"602":1,"607":1,"609":2,"651":1,"674":2,"782":1,"784":1,"825":1,"827":2,"838":2,"846":1,"881":1,"889":1,"922":1,"923":1,"946":1,"963":1,"964":1,"976":1,"1054":1,"1059":1,"1074":1,"1085":1,"1116":1,"1117":1,"1237":4,"1242":1,"1247":3,"1255":1,"1259":4,"1266":1,"1270":8,"1279":2,"1286":18,"1300":9,"1301":1,"1309":2,"1310":1,"1320":1,"1323":2,"1324":10,"1338":1,"1339":2,"1345":1,"1349":1,"1350":1,"1359":14,"1362":2,"1363":1,"1369":3,"1374":3,"1380":3,"1384":1,"1395":2,"1396":4,"1402":2,"1406":1,"1409":1,"1415":7,"1416":1,"1417":3,"1431":2,"1436":29,"1455":1,"1474":1,"1489":3,"1491":1,"1600":1,"1627":1,"1653":1,"1654":1,"1667":2,"1697":1,"1719":1,"1721":1,"1753":1,"1827":2,"1872":1,"1879":1,"1886":1,"1953":1,"1955":1,"1961":1,"1962":1,"1965":1,"1995":1,"1998":1,"2015":1,"2023":1,"2034":1,"2036":1,"2038":1,"2039":2,"2047":1,"2082":1,"2087":1,"2100":2,"2105":1,"2116":1,"2128":1,"2134":1,"2138":1,"2160":1}}],["declaredpublicproperties",{"3":{"1436":1}}],["declaredengines",{"3":{"1286":1}}],["declaredresulttype",{"3":{"1270":3}}],["declarednamecache",{"3":{"1259":1,"1286":1}}],["declaredonly",{"2":{"966":1},"3":{"0":1,"135":1,"964":1,"966":1,"1212":1,"1237":2,"1324":1,"1436":8}}],["declared",{"0":{"2034":1},"3":{"0":12,"24":1,"31":1,"57":1,"76":1,"78":1,"81":3,"92":1,"93":1,"95":1,"96":1,"102":1,"135":6,"136":1,"138":1,"139":1,"155":1,"160":1,"166":1,"184":1,"185":1,"188":1,"225":1,"258":1,"260":1,"284":1,"290":1,"326":1,"330":1,"341":1,"346":1,"386":1,"388":1,"397":2,"409":1,"418":1,"423":2,"428":1,"430":1,"440":1,"443":1,"448":1,"470":1,"472":1,"473":1,"545":2,"549":1,"583":4,"607":2,"609":2,"612":2,"635":1,"649":1,"651":1,"657":2,"749":1,"764":1,"765":2,"766":2,"782":1,"790":1,"801":1,"827":2,"831":1,"836":1,"838":1,"846":1,"847":2,"848":2,"849":1,"875":1,"889":1,"891":1,"964":1,"966":3,"971":1,"979":1,"980":1,"990":1,"995":2,"1018":2,"1019":1,"1034":2,"1035":1,"1052":1,"1067":3,"1075":1,"1083":1,"1116":3,"1119":1,"1161":1,"1170":1,"1191":1,"1212":2,"1214":1,"1229":2,"1233":1,"1235":2,"1237":16,"1239":1,"1240":1,"1241":1,"1247":17,"1250":2,"1259":5,"1260":1,"1263":2,"1264":1,"1266":1,"1269":2,"1270":18,"1271":4,"1276":1,"1277":1,"1281":4,"1285":2,"1286":88,"1297":1,"1300":20,"1303":1,"1307":1,"1309":12,"1310":4,"1311":24,"1312":2,"1315":2,"1323":23,"1324":25,"1339":9,"1344":3,"1345":1,"1347":3,"1350":33,"1353":1,"1358":2,"1359":115,"1362":1,"1369":5,"1373":3,"1380":15,"1395":25,"1396":31,"1398":1,"1402":11,"1405":1,"1406":1,"1411":1,"1415":21,"1416":7,"1417":4,"1427":2,"1428":1,"1430":1,"1431":3,"1435":1,"1436":89,"1438":3,"1441":5,"1442":1,"1443":1,"1444":1,"1446":1,"1450":1,"1458":1,"1459":1,"1463":2,"1464":1,"1467":15,"1474":1,"1476":3,"1481":1,"1488":1,"1489":5,"1500":1,"1513":1,"1526":1,"1534":1,"1547":1,"1577":1,"1591":3,"1597":1,"1599":1,"1631":1,"1662":1,"1670":1,"1671":1,"1673":1,"1686":1,"1731":1,"1810":1,"1815":1,"1819":1,"1830":1,"1849":1,"1856":1,"1857":1,"1880":1,"1881":1,"1882":1,"1886":2,"1889":1,"1891":2,"1922":1,"1939":1,"1953":1,"1964":1,"1995":1,"1997":1,"2001":2,"2004":1,"2010":1,"2030":2,"2034":2,"2035":6,"2038":3,"2039":2,"2045":1,"2047":1,"2066":1,"2077":2,"2082":1,"2096":1,"2127":1,"2128":3,"2130":2,"2133":1,"2140":1,"2158":2,"2162":1,"2176":1,"2234":3}}],["declaresauthorizationanywhere",{"3":{"1436":1}}],["declareseveryexpectedlayer",{"3":{"1436":2,"1489":1}}],["declarespii",{"2":{"1436":1},"3":{"1436":1}}],["declares",{"0":{"1880":1},"3":{"0":12,"5":1,"7":1,"37":1,"42":1,"47":1,"59":1,"78":1,"80":1,"81":2,"94":1,"95":2,"98":1,"115":1,"121":2,"122":1,"128":1,"146":1,"147":1,"155":1,"157":1,"160":1,"180":2,"185":1,"186":4,"187":1,"189":2,"190":1,"298":1,"305":1,"310":2,"325":1,"341":1,"370":1,"408":1,"426":1,"442":1,"448":2,"468":4,"470":2,"475":2,"476":1,"477":1,"478":1,"486":1,"497":1,"523":3,"545":2,"549":2,"551":2,"552":1,"556":3,"576":1,"582":1,"583":7,"585":1,"599":2,"609":3,"611":1,"626":1,"631":2,"633":2,"640":2,"643":2,"650":1,"676":1,"698":2,"707":1,"725":2,"733":1,"764":1,"766":1,"767":1,"768":1,"783":1,"798":5,"804":2,"825":1,"827":6,"838":4,"842":2,"881":2,"889":1,"891":1,"914":1,"922":1,"954":1,"956":1,"959":1,"963":2,"964":1,"966":1,"972":2,"973":1,"980":3,"983":1,"1018":2,"1033":2,"1050":7,"1052":1,"1054":1,"1067":2,"1100":1,"1116":1,"1133":5,"1155":1,"1156":1,"1161":1,"1168":1,"1227":1,"1229":3,"1230":1,"1231":2,"1232":1,"1237":5,"1241":6,"1244":2,"1249":1,"1250":1,"1259":6,"1269":1,"1270":51,"1271":7,"1274":1,"1275":1,"1276":2,"1279":2,"1281":1,"1286":31,"1300":15,"1301":3,"1304":1,"1308":1,"1309":4,"1310":5,"1311":13,"1312":1,"1318":1,"1320":1,"1321":1,"1322":1,"1323":11,"1324":13,"1325":1,"1326":2,"1327":2,"1328":1,"1331":1,"1332":1,"1338":2,"1339":15,"1350":3,"1353":1,"1359":85,"1360":2,"1362":3,"1363":1,"1366":1,"1369":9,"1371":1,"1372":1,"1373":1,"1374":2,"1376":1,"1380":6,"1384":2,"1389":1,"1391":1,"1393":1,"1395":23,"1396":24,"1401":1,"1402":7,"1406":1,"1407":1,"1409":2,"1415":22,"1416":6,"1417":7,"1427":2,"1430":1,"1431":1,"1436":100,"1438":7,"1441":3,"1445":1,"1447":3,"1449":1,"1451":1,"1454":3,"1455":2,"1460":1,"1464":1,"1467":9,"1470":1,"1472":1,"1473":1,"1475":2,"1476":1,"1484":1,"1489":6,"1490":1,"1492":1,"1496":2,"1526":1,"1577":2,"1591":1,"1596":1,"1627":2,"1649":2,"1651":1,"1653":2,"1662":1,"1667":1,"1673":1,"1685":1,"1703":2,"1718":1,"1727":1,"1751":1,"1765":1,"1772":1,"1810":5,"1815":3,"1823":1,"1826":1,"1828":1,"1829":2,"1857":1,"1860":1,"1861":2,"1865":1,"1872":3,"1876":1,"1877":1,"1878":1,"1880":2,"1889":1,"1891":1,"1898":1,"1916":1,"1922":1,"1933":1,"1944":1,"1953":1,"1960":1,"1962":1,"1963":2,"1988":1,"1995":1,"1996":2,"2001":2,"2009":2,"2025":1,"2026":2,"2043":2,"2047":2,"2066":1,"2072":1,"2074":1,"2085":1,"2089":1,"2106":3,"2133":2,"2141":1,"2152":1,"2159":1,"2160":1,"2192":1,"2205":1,"2234":1}}],["decommission",{"3":{"1463":1,"1467":1}}],["decomposition",{"3":{"1395":4,"1402":3,"1600":1}}],["decomposed",{"3":{"1311":1,"1395":1,"1638":1}}],["decompression",{"3":{"1323":2,"1324":3,"2128":1}}],["decoupling",{"3":{"1270":1,"1300":1,"1359":1,"1402":1,"1416":1,"1526":1,"1539":1,"1577":1,"1591":1,"1831":1,"2136":1}}],["decouples",{"3":{"332":1,"1311":1,"1323":2,"1350":1,"1396":1,"1438":1,"1665":1,"1837":1,"1964":1,"1965":1,"1991":1}}],["decouple",{"1":{"1863":1,"1864":1,"1865":1,"1866":1,"1867":1,"1868":1},"3":{"187":1,"299":1,"1347":1,"1863":1,"2209":1}}],["decoupled",{"1":{"1310":1},"3":{"186":1,"301":1,"399":1,"404":1,"1192":1,"1202":1,"1203":1,"1259":1,"1309":1,"1310":2,"1311":2,"1323":2,"1324":3,"1339":1,"1350":3,"1359":1,"1374":1,"1380":1,"1395":1,"1396":1,"1402":1,"1415":1,"1417":1,"1441":1,"1538":1,"1546":1,"1554":1,"1670":1,"1993":1,"2159":1,"2161":1}}],["deconstructs",{"3":{"1436":1}}],["deconstruction",{"3":{"1300":2,"1324":1}}],["deconstruct",{"3":{"1050":1,"1234":1,"1237":1,"1286":1,"1300":1,"1436":1}}],["decodable",{"3":{"1874":1}}],["decoding",{"3":{"442":1,"1186":1,"1228":1,"1300":3,"1323":2,"1359":1,"1380":2,"1417":1,"2128":1}}],["decoderoptions",{"3":{"1323":1,"2128":1}}],["decoder",{"3":{"683":1,"1229":1,"1311":1,"1312":7,"1378":2,"1380":3,"1396":2}}],["decoded",{"3":{"341":1,"346":1,"438":1,"442":1,"682":1,"684":1,"922":1,"1229":2,"1300":1,"1311":2,"1312":1,"1323":2,"1324":1,"1359":6,"1380":1,"1396":1,"1417":6,"1651":1,"1877":1,"2128":4,"2130":1}}],["decode",{"3":{"0":1,"359":1,"360":2,"365":1,"440":1,"442":1,"681":1,"682":1,"1115":1,"1116":1,"1229":1,"1247":2,"1286":6,"1300":2,"1311":1,"1312":2,"1323":5,"1380":2,"1417":4,"1438":2,"1496":1,"2128":4,"2130":4,"2145":1}}],["decodes",{"3":{"0":1,"341":1,"682":1,"683":1,"684":1,"922":1,"1241":1,"1247":2,"1271":1,"1300":3,"1311":4,"1312":2,"1323":2,"1380":1,"1396":2,"1417":1,"1874":1,"2128":1,"2144":1}}],["decoratable",{"3":{"1924":1}}],["decorate",{"3":{"1311":1,"1323":1,"1324":5,"1380":1,"1396":2,"1436":1}}],["decoratedentity",{"3":{"1199":2,"1207":1}}],["decorated",{"3":{"330":1,"1286":3,"1311":1,"1323":1,"1339":1,"1342":1,"1343":1,"1350":2,"1359":5,"1379":1,"1380":1,"1395":1,"1396":2,"1436":3,"1488":1,"1489":1,"1540":1,"1966":1,"1988":1,"2056":1,"2097":1}}],["decorates",{"3":{"0":1,"122":1,"175":2,"1042":1,"1059":1,"1091":1,"1286":1,"1297":1,"1300":1,"1318":1,"1323":2,"1324":1,"1380":1,"1396":1,"1421":1,"1488":1,"1963":1,"2174":1,"2188":1,"2201":1}}],["decorating",{"3":{"1286":2,"1324":2}}],["decoration",{"3":{"117":1,"122":2,"175":1,"415":1,"592":1,"681":1,"1045":1,"1270":1,"1286":3,"1290":1,"1300":1,"1316":1,"1323":3,"1339":1,"1359":4,"1380":1,"1395":5,"1396":4,"1415":1,"1417":3,"1436":6,"1489":1,"1686":1,"1698":1,"1701":1,"1827":2,"1911":1,"2119":1,"2124":1,"2174":1}}],["decoratively",{"3":{"1270":1,"1286":1}}],["decorative",{"3":{"0":1,"195":1,"305":1,"342":1,"684":1,"774":1,"1229":1,"1259":1,"1324":3,"1359":1,"1417":1,"2031":1}}],["decoratorpipelineseal",{"3":{"1199":2,"1203":1,"1207":1,"1313":1,"1316":1,"1323":7,"1496":1}}],["decoratorpipelineordertests",{"2":{"127":1,"1600":1,"2100":1},"3":{"121":4,"127":3,"572":4,"1199":3,"1207":8,"1262":3,"1316":1,"1323":4,"1415":2,"1436":11,"1438":2,"1487":1,"1488":3,"1489":3,"1600":1,"2100":1}}],["decoratorpipelineordertestsbase",{"2":{"121":1,"122":1,"126":1,"572":1,"579":1,"749":1,"1262":1,"1428":1,"1507":1,"2056":1},"3":{"0":1,"122":1,"126":1,"572":6,"574":1,"579":1,"749":1,"1199":3,"1207":2,"1262":5,"1428":1,"1436":17,"1438":1,"1488":2,"1489":1,"1496":1,"1507":1,"2056":2}}],["decorators",{"2":{"1270":1},"3":{"0":8,"115":4,"117":4,"119":1,"121":5,"122":5,"123":3,"125":3,"126":7,"127":1,"186":1,"242":1,"243":1,"246":3,"247":1,"300":2,"306":1,"395":2,"397":4,"406":1,"407":3,"522":1,"523":1,"571":1,"572":1,"674":1,"698":2,"701":1,"702":1,"732":1,"733":2,"735":1,"737":1,"827":1,"923":1,"987":1,"1004":2,"1058":1,"1059":3,"1100":1,"1192":1,"1203":21,"1207":208,"1212":2,"1223":1,"1229":1,"1246":2,"1260":2,"1261":1,"1262":5,"1263":16,"1264":3,"1265":1,"1266":1,"1267":4,"1268":3,"1270":97,"1271":11,"1275":1,"1284":1,"1286":5,"1297":1,"1300":12,"1301":12,"1309":2,"1311":6,"1313":1,"1316":2,"1318":1,"1323":18,"1324":1,"1339":1,"1359":16,"1396":1,"1402":1,"1415":3,"1427":1,"1436":8,"1437":1,"1438":10,"1496":2,"1526":1,"1538":1,"1542":1,"1566":1,"1577":3,"1651":1,"1653":1,"1700":1,"1717":1,"1774":1,"1818":1,"1821":3,"1823":1,"1824":2,"1825":1,"1826":3,"1827":1,"1851":1,"1879":2,"1883":3,"1886":1,"1914":1,"1915":2,"1919":1,"1920":3,"1922":1,"1923":1,"1924":2,"2011":1,"2097":1,"2138":2,"2158":2,"2201":1}}],["decorator",{"0":{"1507":1,"2098":1,"2138":1},"1":{"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"1260":1,"1261":1,"1262":1,"1263":1,"1264":1,"1265":1,"1266":1,"1267":1,"1268":1,"1269":1,"1270":1,"1818":1,"1819":1,"1820":1,"1821":1,"1822":1,"1823":1,"1824":1,"1825":1,"1826":1,"1827":1},"3":{"0":15,"113":1,"114":1,"115":6,"117":3,"119":1,"120":1,"122":4,"123":2,"124":4,"125":3,"126":2,"128":3,"135":2,"143":1,"184":1,"242":1,"265":2,"299":2,"300":1,"303":1,"304":1,"383":1,"395":3,"397":1,"398":2,"406":1,"407":2,"409":1,"518":1,"521":1,"550":1,"571":1,"572":6,"573":2,"574":5,"578":1,"579":1,"692":1,"699":1,"700":1,"714":1,"716":1,"733":3,"735":2,"748":1,"749":1,"750":1,"753":1,"790":1,"905":1,"907":1,"909":1,"922":1,"923":1,"924":1,"925":1,"987":1,"992":1,"1042":1,"1043":2,"1046":1,"1104":1,"1192":4,"1202":3,"1203":3,"1212":7,"1213":3,"1223":1,"1229":2,"1237":1,"1246":2,"1247":1,"1259":1,"1260":5,"1261":4,"1262":1,"1263":2,"1264":3,"1266":1,"1267":4,"1268":2,"1269":1,"1270":98,"1271":9,"1278":1,"1286":22,"1300":7,"1301":4,"1309":11,"1311":7,"1313":1,"1315":1,"1316":2,"1318":2,"1320":2,"1323":27,"1324":10,"1339":1,"1347":1,"1350":2,"1352":1,"1359":68,"1380":2,"1395":1,"1396":9,"1402":13,"1406":1,"1415":26,"1418":1,"1427":3,"1431":1,"1436":36,"1437":1,"1438":2,"1487":2,"1488":3,"1496":3,"1506":1,"1507":1,"1526":2,"1534":1,"1539":2,"1543":1,"1577":7,"1585":2,"1591":1,"1651":5,"1654":1,"1660":1,"1662":2,"1671":1,"1720":1,"1730":1,"1774":1,"1779":1,"1786":1,"1817":1,"1818":3,"1819":1,"1820":3,"1821":4,"1822":1,"1823":3,"1825":3,"1826":2,"1827":4,"1828":1,"1831":2,"1832":1,"1881":1,"1883":1,"1886":1,"1914":1,"1915":2,"1916":1,"1917":1,"1918":5,"1920":2,"1924":2,"1944":1,"1962":1,"2089":1,"2099":1,"2100":2,"2113":1,"2136":3,"2138":4,"2139":1,"2140":1,"2141":1,"2158":2,"2162":1,"2168":1,"2182":2,"2183":1,"2184":1,"2186":1,"2188":1,"2192":2,"2195":1,"2196":1,"2208":1,"2229":3,"2232":1,"2234":3,"2241":1}}],["decisively",{"3":{"1350":1}}],["decisive",{"3":{"827":1,"1350":1}}],["decisionsupport",{"3":{"493":1,"494":1,"495":1,"995":1,"1018":2,"1082":1,"1099":1,"1203":34,"1207":86,"1264":1,"1270":2,"1286":1,"1347":5,"1350":27,"1359":71,"1367":1,"1369":2,"1390":1,"1395":1,"1438":4,"1442":1,"1496":3,"1526":1}}],["decisions",{"0":{"1201":1,"1648":1},"3":{"0":3,"64":1,"175":1,"242":1,"265":1,"387":1,"555":1,"618":1,"664":1,"724":1,"726":1,"736":1,"775":1,"825":1,"827":1,"867":1,"868":1,"905":1,"912":1,"975":1,"1016":1,"1021":1,"1051":1,"1093":1,"1109":1,"1162":1,"1270":1,"1271":1,"1286":5,"1287":1,"1300":7,"1302":1,"1311":10,"1312":2,"1323":3,"1324":4,"1330":1,"1339":2,"1350":1,"1359":6,"1369":1,"1380":1,"1389":1,"1393":1,"1395":3,"1396":8,"1409":1,"1415":5,"1417":4,"1427":1,"1429":1,"1436":7,"1438":1,"1455":4,"1457":1,"1467":2,"1471":2,"1476":1,"1488":1,"1489":2,"1492":1,"1521":1,"1534":1,"1552":1,"1571":3,"1572":1,"1585":3,"1638":1,"1639":1,"1640":1,"1686":1,"1708":1,"1727":2,"1755":1,"1778":1,"1863":1,"1874":1,"1900":1,"1947":2,"2001":1,"2030":1,"2039":1,"2152":1,"2174":1,"2193":1,"2201":1,"2217":1,"2222":1,"2223":1,"2234":1,"2238":1}}],["decision",{"0":{"5":1,"11":1,"17":1,"31":1,"39":1,"47":1,"53":1,"59":1,"68":1,"78":1,"86":1,"98":1,"109":1,"117":1,"132":1,"147":1,"157":1,"166":1,"175":1,"186":1,"195":1,"207":1,"214":1,"225":1,"235":1,"243":1,"265":1,"273":1,"281":1,"291":1,"300":1,"310":1,"318":1,"330":1,"341":1,"350":1,"359":1,"370":1,"380":1,"388":1,"397":1,"413":1,"420":1,"434":1,"440":1,"448":1,"459":1,"470":1,"482":1,"499":1,"507":1,"518":1,"528":1,"536":1,"545":1,"556":1,"564":1,"572":1,"583":1,"591":1,"599":1,"609":1,"618":1,"626":1,"633":1,"640":1,"649":1,"657":1,"665":1,"674":1,"682":1,"690":1,"698":1,"707":1,"715":1,"725":1,"733":1,"741":1,"749":1,"757":1,"766":1,"774":1,"782":1,"790":1,"799":1,"810":1,"819":1,"827":1,"838":1,"846":1,"854":1,"861":1,"869":1,"881":1,"889":1,"897":1,"905":1,"914":1,"922":1,"931":1,"939":1,"946":1,"954":1,"964":1,"972":1,"980":1,"988":1,"996":1,"1004":1,"1012":1,"1018":1,"1026":1,"1034":1,"1042":1,"1050":1,"1059":1,"1067":1,"1075":1,"1083":1,"1091":1,"1100":1,"1108":1,"1116":1,"1124":1,"1133":1,"1141":1,"1151":1,"1161":1,"1168":1,"1175":1,"1184":1,"1347":1,"1359":1,"1376":1,"1390":1,"2234":1},"1":{"0":1,"1":1},"3":{"0":18,"1":3,"3":1,"21":1,"22":2,"23":2,"24":2,"27":2,"34":1,"43":2,"57":2,"67":1,"71":3,"72":2,"73":2,"74":2,"81":1,"82":1,"85":1,"87":1,"104":1,"109":1,"112":1,"115":1,"121":1,"125":1,"128":2,"130":2,"135":3,"136":1,"137":2,"138":1,"139":1,"140":2,"141":1,"142":1,"145":1,"147":1,"149":1,"150":2,"151":1,"152":1,"155":2,"160":2,"161":1,"164":4,"165":1,"167":1,"170":1,"171":2,"173":1,"174":1,"175":1,"178":1,"181":2,"187":1,"190":1,"200":4,"201":1,"203":2,"219":2,"220":2,"230":1,"231":1,"233":5,"238":1,"245":2,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":3,"257":1,"258":3,"259":3,"260":2,"261":1,"264":1,"265":5,"267":2,"268":6,"269":1,"272":1,"275":1,"276":1,"279":1,"295":2,"296":2,"303":1,"306":4,"308":1,"310":1,"314":1,"317":1,"326":1,"329":1,"336":1,"337":2,"345":1,"354":2,"358":2,"364":2,"365":2,"366":1,"369":1,"375":3,"382":1,"383":1,"386":1,"390":1,"392":1,"393":2,"396":1,"399":1,"400":2,"409":3,"416":2,"419":1,"423":4,"424":1,"425":1,"426":2,"428":2,"429":1,"430":2,"436":1,"444":1,"447":1,"453":3,"454":1,"455":1,"463":3,"464":2,"465":1,"466":4,"468":4,"469":1,"472":1,"473":1,"474":3,"475":2,"476":3,"477":4,"478":3,"483":1,"486":2,"490":1,"495":1,"497":1,"502":1,"508":1,"511":1,"514":2,"516":1,"519":1,"520":1,"522":2,"523":1,"524":1,"526":2,"528":1,"530":1,"531":1,"534":1,"535":1,"536":1,"537":1,"540":1,"543":6,"549":3,"551":2,"552":2,"555":1,"557":1,"559":1,"560":2,"562":1,"567":1,"571":1,"574":1,"578":2,"582":1,"586":1,"591":1,"594":2,"601":1,"604":1,"607":7,"608":1,"611":1,"613":1,"616":4,"621":1,"627":1,"629":3,"632":1,"636":2,"638":1,"642":1,"644":1,"652":1,"656":1,"660":2,"667":1,"669":2,"677":1,"685":1,"688":3,"693":2,"696":1,"703":1,"706":1,"709":1,"710":1,"715":1,"716":1,"719":1,"720":1,"728":1,"731":1,"733":1,"734":1,"737":1,"744":1,"748":2,"751":1,"752":1,"758":1,"761":1,"769":2,"773":1,"775":1,"777":1,"790":2,"794":2,"795":1,"798":1,"800":2,"801":1,"802":2,"803":1,"804":1,"805":1,"806":1,"810":1,"814":1,"819":2,"820":1,"822":2,"825":6,"827":4,"828":1,"829":2,"831":3,"832":1,"833":1,"836":3,"839":2,"841":1,"849":2,"850":2,"853":1,"856":1,"857":2,"864":2,"865":1,"867":2,"869":1,"871":2,"874":1,"875":2,"877":3,"884":1,"892":2,"896":1,"900":1,"905":1,"907":1,"909":1,"912":1,"913":1,"914":1,"915":1,"916":1,"917":1,"924":1,"926":2,"927":2,"929":1,"932":1,"934":4,"944":2,"949":2,"955":1,"958":1,"959":1,"960":2,"963":1,"964":2,"966":1,"967":2,"968":2,"979":1,"980":1,"983":1,"987":1,"988":1,"991":1,"997":1,"1003":1,"1004":1,"1006":1,"1007":1,"1012":1,"1013":1,"1016":1,"1018":1,"1027":1,"1029":1,"1032":1,"1033":1,"1037":2,"1042":1,"1044":3,"1045":2,"1046":1,"1048":1,"1052":1,"1053":1,"1054":3,"1055":1,"1057":1,"1059":2,"1067":1,"1068":1,"1070":3,"1073":2,"1074":1,"1075":3,"1076":1,"1077":1,"1078":2,"1079":2,"1081":1,"1082":1,"1083":2,"1085":1,"1086":1,"1095":1,"1101":1,"1103":1,"1111":1,"1116":1,"1119":1,"1128":3,"1134":1,"1136":1,"1140":1,"1146":1,"1155":1,"1156":1,"1173":1,"1175":1,"1182":1,"1192":1,"1202":1,"1203":1,"1212":3,"1217":1,"1218":1,"1229":3,"1231":1,"1232":2,"1235":1,"1236":1,"1237":13,"1239":1,"1240":1,"1244":2,"1247":1,"1259":12,"1260":4,"1263":2,"1269":1,"1270":12,"1271":1,"1273":3,"1281":2,"1285":2,"1286":38,"1287":1,"1300":26,"1301":5,"1303":1,"1309":6,"1310":3,"1311":22,"1312":2,"1315":1,"1320":1,"1322":2,"1323":30,"1324":38,"1329":1,"1334":1,"1337":1,"1339":29,"1340":1,"1342":1,"1343":1,"1350":14,"1351":1,"1352":2,"1355":1,"1357":1,"1359":54,"1369":2,"1373":1,"1376":1,"1380":7,"1390":1,"1395":30,"1396":42,"1397":1,"1402":19,"1407":1,"1413":1,"1415":17,"1416":3,"1417":5,"1418":1,"1422":1,"1424":1,"1427":1,"1430":1,"1436":41,"1440":1,"1452":1,"1455":3,"1462":1,"1465":1,"1467":6,"1472":1,"1473":1,"1475":1,"1476":1,"1482":1,"1483":1,"1485":1,"1488":2,"1489":1,"1496":3,"1521":1,"1524":1,"1526":6,"1530":1,"1532":1,"1534":3,"1536":1,"1545":2,"1571":1,"1575":2,"1577":6,"1582":1,"1583":1,"1585":2,"1589":1,"1591":1,"1599":3,"1604":1,"1632":2,"1639":2,"1640":2,"1641":1,"1656":1,"1673":1,"1674":1,"1686":2,"1687":1,"1706":1,"1722":1,"1727":1,"1747":4,"1749":2,"1765":1,"1787":1,"1788":1,"1792":1,"1799":2,"1801":1,"1802":1,"1811":1,"1822":2,"1823":1,"1825":1,"1827":1,"1841":2,"1842":1,"1845":1,"1848":1,"1854":1,"1856":1,"1862":2,"1876":1,"1877":1,"1889":1,"1890":1,"1903":1,"1910":1,"1921":1,"1927":2,"1930":1,"1935":2,"1941":1,"1943":1,"1947":2,"1949":1,"1951":2,"1963":1,"1965":1,"1971":1,"1979":1,"1982":1,"2000":1,"2001":1,"2002":1,"2003":1,"2025":1,"2029":1,"2033":1,"2034":1,"2036":1,"2039":1,"2044":1,"2048":1,"2049":1,"2054":1,"2065":2,"2069":1,"2071":1,"2083":1,"2085":1,"2087":2,"2110":1,"2130":1,"2132":1,"2133":1,"2135":1,"2147":1,"2153":1,"2155":1,"2158":1,"2160":2,"2162":1,"2163":1,"2166":1,"2167":1,"2168":1,"2171":1,"2182":1,"2183":1,"2186":2,"2194":4,"2195":1,"2198":1,"2205":2,"2214":1,"2228":1,"2233":1,"2234":5,"2235":2,"2241":1,"2244":1,"2247":1}}],["decimals",{"3":{"1324":1,"1359":1,"1436":1,"1767":1}}],["decimalfilterstrategytests",{"3":{"1199":1,"1207":3}}],["decimalfilterstrategy",{"2":{"1241":1},"3":{"1199":2,"1203":1,"1207":2,"1241":4,"1247":9}}],["decimal",{"2":{"656":1,"1541":1,"1764":1},"3":{"330":1,"656":1,"657":2,"692":1,"717":1,"1192":1,"1234":1,"1237":3,"1247":11,"1271":1,"1286":6,"1300":2,"1312":7,"1323":1,"1324":10,"1342":1,"1350":3,"1359":2,"1362":1,"1366":1,"1369":9,"1395":4,"1396":2,"1417":1,"1436":5,"1438":1,"1496":3,"1541":1,"1600":2,"1685":5,"1686":1,"1764":3,"1810":2,"1988":1}}],["decidable",{"3":{"1416":1}}],["decide",{"0":{"1257":1},"3":{"0":1,"69":1,"150":1,"244":1,"299":1,"305":1,"536":1,"539":1,"681":1,"765":1,"827":1,"898":1,"987":1,"1018":1,"1033":1,"1035":1,"1100":1,"1107":1,"1115":1,"1187":1,"1236":1,"1237":1,"1244":1,"1247":2,"1249":1,"1259":3,"1278":1,"1286":9,"1296":1,"1300":6,"1309":2,"1311":2,"1323":6,"1324":7,"1339":2,"1350":5,"1351":1,"1359":7,"1361":1,"1368":1,"1369":2,"1380":3,"1395":7,"1396":4,"1402":2,"1415":2,"1417":4,"1423":1,"1426":1,"1427":3,"1436":5,"1467":1,"1485":1,"1639":1,"1648":1,"1670":1,"1686":1,"1717":1,"1727":2,"1853":1,"1873":1,"1876":1,"1877":1,"1898":1,"1912":1,"1950":1,"1959":1,"2070":1,"2145":1,"2161":1,"2171":2,"2192":1,"2195":2}}],["decides",{"3":{"0":2,"179":1,"201":1,"225":1,"243":1,"253":1,"258":1,"299":1,"318":1,"336":1,"343":1,"407":1,"535":1,"539":1,"540":1,"544":1,"563":1,"568":1,"571":1,"582":1,"583":1,"598":2,"605":1,"630":1,"639":3,"648":1,"653":1,"664":3,"673":2,"678":2,"689":1,"691":1,"734":1,"741":2,"748":1,"765":1,"770":1,"774":1,"781":3,"783":1,"784":1,"785":1,"786":1,"789":5,"791":1,"813":1,"888":1,"893":1,"896":1,"899":1,"924":1,"945":1,"953":1,"987":1,"1085":1,"1092":1,"1101":1,"1127":1,"1212":1,"1237":3,"1238":1,"1243":1,"1244":1,"1247":5,"1250":1,"1252":1,"1259":7,"1270":2,"1273":1,"1277":1,"1280":3,"1286":19,"1287":1,"1289":1,"1299":1,"1300":14,"1301":2,"1304":1,"1309":2,"1310":6,"1311":6,"1312":1,"1318":1,"1323":8,"1324":10,"1336":1,"1339":4,"1350":4,"1357":1,"1359":19,"1369":2,"1372":1,"1373":1,"1380":2,"1389":1,"1391":2,"1395":12,"1396":9,"1401":1,"1402":4,"1406":1,"1409":1,"1414":1,"1415":4,"1417":3,"1419":1,"1431":1,"1436":7,"1438":4,"1455":1,"1462":1,"1467":2,"1470":1,"1492":1,"1508":1,"1640":1,"1728":1,"1750":1,"1810":1,"1826":1,"1838":1,"1840":2,"1845":1,"1854":1,"1865":1,"1872":1,"1874":1,"1897":1,"1902":1,"1920":1,"1921":1,"1933":1,"1947":1,"1977":1,"1981":1,"1982":2,"1989":1,"1992":1,"2011":1,"2087":1,"2158":2,"2160":1,"2164":1,"2193":1,"2197":1,"2198":1}}],["decided",{"3":{"0":12,"125":1,"145":1,"200":1,"225":1,"255":1,"309":1,"360":1,"380":1,"443":1,"497":1,"498":1,"517":1,"538":1,"541":1,"598":1,"599":1,"608":1,"625":1,"648":1,"664":1,"673":1,"681":1,"683":1,"717":1,"724":2,"728":1,"731":1,"744":1,"790":1,"798":1,"809":1,"852":1,"870":1,"876":1,"880":2,"903":1,"926":1,"953":1,"992":1,"1012":1,"1028":1,"1075":1,"1116":1,"1117":2,"1229":1,"1237":1,"1241":1,"1243":1,"1259":2,"1265":2,"1270":4,"1281":1,"1286":5,"1300":7,"1301":2,"1309":1,"1324":8,"1336":1,"1339":2,"1342":1,"1347":1,"1348":1,"1350":7,"1357":1,"1359":17,"1361":1,"1369":2,"1395":6,"1396":9,"1399":1,"1401":1,"1402":3,"1415":2,"1417":4,"1421":1,"1422":1,"1425":1,"1436":5,"1475":1,"1526":1,"1545":1,"1547":1,"1666":1,"1727":1,"1748":1,"1822":1,"1933":2,"1960":1,"2034":1,"2068":1,"2128":1,"2137":1,"2170":1,"2179":1,"2183":1,"2234":1}}],["deciding",{"3":{"0":1,"109":1,"544":1,"555":1,"582":1,"598":1,"764":1,"775":1,"783":1,"805":1,"987":1,"1229":1,"1237":2,"1285":1,"1286":4,"1311":1,"1339":1,"1359":3,"1395":1,"1396":1,"1402":1,"1417":3,"1418":1,"1436":1,"1811":1,"1956":1,"1972":1,"2185":1}}],["del",{"3":{"1301":2,"1323":2,"1685":6,"1686":6}}],["delaying",{"3":{"1324":2}}],["delays",{"3":{"27":1,"520":1,"709":1,"883":1,"916":1,"1102":1,"1259":1,"1270":1,"1323":1,"1324":2,"1436":1,"1942":1,"2053":1}}],["delay",{"2":{"1162":1,"2187":1},"3":{"18":3,"71":1,"72":1,"293":1,"536":1,"819":1,"1042":2,"1162":1,"1254":2,"1259":8,"1270":3,"1275":2,"1286":7,"1317":1,"1323":14,"1324":2,"1330":1,"1339":1,"1395":2,"1430":1,"1436":7,"1438":1,"1488":1,"1664":1,"1840":1,"1845":1,"1852":1,"2033":1,"2169":2,"2187":1,"2190":3}}],["delayed",{"2":{"818":1,"1843":1},"3":{"0":3,"150":1,"627":1,"640":1,"642":1,"735":1,"818":1,"819":1,"820":1,"821":2,"1075":1,"1076":1,"1263":1,"1270":5,"1323":3,"1339":1,"1467":1,"1641":1,"1665":1,"1749":1,"1843":1,"1922":1,"1923":1}}],["deltas",{"3":{"0":1,"914":1,"1213":1,"1436":1}}],["delta",{"2":{"1689":1,"1699":1},"3":{"0":1,"480":1,"482":1,"484":2,"490":1,"491":1,"492":1,"493":2,"494":2,"495":1,"631":2,"633":2,"635":1,"665":1,"666":1,"832":1,"1212":1,"1300":1,"1353":1,"1359":34,"1402":2,"1488":2,"1490":2,"1496":13,"1575":5,"1576":5,"1689":1,"1699":1,"1727":2}}],["delegatingchatclient",{"2":{"1418":1,"1422":1,"1423":1,"1427":1,"2176":1,"2182":1},"3":{"1418":1,"1422":1,"1423":1,"1427":8,"2176":1,"2182":1}}],["delegatinghandler",{"3":{"1311":1,"1312":1,"1324":9}}],["delegating",{"3":{"0":1,"507":1,"508":1,"513":1,"926":1,"1034":1,"1042":2,"1091":2,"1192":1,"1212":1,"1229":5,"1231":1,"1237":1,"1241":1,"1244":1,"1247":1,"1256":1,"1259":1,"1262":1,"1269":1,"1270":1,"1271":2,"1286":3,"1290":2,"1300":5,"1309":2,"1310":3,"1311":2,"1324":13,"1339":3,"1343":1,"1350":7,"1355":1,"1359":14,"1376":1,"1380":3,"1395":8,"1396":6,"1399":1,"1402":3,"1405":1,"1410":1,"1413":1,"1415":2,"1417":3,"1418":1,"1427":2,"1431":1,"1436":45,"1496":1,"1957":1,"2076":1,"2172":1,"2182":1,"2190":1}}],["delegation",{"3":{"0":1,"267":1,"640":1,"777":1,"825":2,"827":1,"833":2,"922":1,"1237":3,"1240":1,"1259":1,"1270":1,"1286":5,"1300":2,"1310":1,"1339":4,"1350":3,"1352":1,"1359":5,"1372":1,"1380":2,"1395":2,"1396":2,"1402":2,"1467":1}}],["delegations",{"3":{"0":1,"825":1,"829":1,"1286":1,"1395":1,"1396":2}}],["delegatescheduledjob",{"3":{"1199":2,"1207":1}}],["delegates",{"3":{"0":2,"19":1,"27":1,"53":1,"109":1,"318":2,"326":1,"331":1,"459":1,"513":1,"536":1,"545":1,"549":1,"640":1,"680":1,"682":1,"686":1,"774":1,"814":1,"827":2,"1050":1,"1220":1,"1229":4,"1237":9,"1243":1,"1244":1,"1247":17,"1259":5,"1261":1,"1270":1,"1271":1,"1273":1,"1278":1,"1286":13,"1290":1,"1298":1,"1300":8,"1301":1,"1307":1,"1309":4,"1310":3,"1311":8,"1312":2,"1323":4,"1324":10,"1339":4,"1348":2,"1350":17,"1355":1,"1359":27,"1369":1,"1380":11,"1395":19,"1396":7,"1402":5,"1415":7,"1416":7,"1417":13,"1421":1,"1427":3,"1431":1,"1436":28,"1438":2,"1488":1,"1653":1,"1820":1,"1946":1,"1996":2,"2001":1,"2169":1,"2198":1}}],["delegated",{"3":{"0":1,"295":1,"320":1,"827":3,"829":1,"1286":3,"1323":3,"1339":1,"1350":1,"1353":1,"1354":1,"1359":3,"1369":1,"1383":1,"1395":3,"1396":3,"1402":1,"1415":1,"1417":1,"1575":1,"1963":1,"1997":1}}],["delegate",{"3":{"0":2,"11":1,"15":1,"21":1,"27":2,"109":4,"115":1,"135":1,"214":1,"326":1,"459":2,"534":1,"536":2,"539":2,"540":1,"545":1,"591":1,"592":1,"595":1,"675":1,"676":1,"677":1,"684":1,"749":1,"751":1,"819":1,"881":2,"987":2,"988":4,"989":1,"990":3,"1203":2,"1205":1,"1207":2,"1212":1,"1223":1,"1229":9,"1234":1,"1239":2,"1247":11,"1252":1,"1259":3,"1268":2,"1270":16,"1286":19,"1300":9,"1301":1,"1310":8,"1311":17,"1324":45,"1327":2,"1339":16,"1350":5,"1353":1,"1359":19,"1372":1,"1380":4,"1383":1,"1395":58,"1396":16,"1402":4,"1415":2,"1416":11,"1417":3,"1430":1,"1432":1,"1436":50,"1438":1,"1441":2,"1488":1,"1496":1,"1664":1,"1665":1,"1670":1,"1685":1,"1805":2,"1815":1,"1821":1,"1824":1,"1825":1,"1840":2,"1881":2,"2048":1,"2138":2,"2151":1,"2153":1,"2163":2,"2166":3}}],["deletable",{"3":{"312":1,"889":3,"890":1,"891":2,"1237":2,"1270":1,"1276":1,"1281":1,"1286":8,"1362":1,"1369":1,"1396":2,"1415":1,"1851":1}}],["deleting",{"3":{"0":4,"39":1,"40":1,"59":1,"248":1,"434":1,"440":1,"444":1,"459":1,"461":1,"462":1,"528":1,"781":1,"847":1,"907":1,"965":1,"997":1,"1059":1,"1116":2,"1231":1,"1237":2,"1281":2,"1286":3,"1300":4,"1301":1,"1308":1,"1311":2,"1318":1,"1323":4,"1324":2,"1346":1,"1350":4,"1352":1,"1359":13,"1362":1,"1369":1,"1380":1,"1396":1,"1402":4,"1410":1,"1415":3,"1436":8,"1467":3,"1473":1,"1489":1,"1631":6,"1635":3,"1638":1,"1639":10,"1641":1,"1727":1,"1755":1,"1776":1,"1889":1,"1950":1,"2001":1,"2068":1,"2071":1,"2109":1,"2128":1,"2202":1}}],["deletions",{"3":{"461":1,"1120":1,"1359":1,"1396":1,"1402":1,"1415":1,"1496":1}}],["deletion",{"3":{"0":3,"24":1,"38":3,"39":1,"438":1,"444":2,"458":2,"459":1,"462":1,"530":1,"618":1,"724":2,"725":1,"790":1,"791":2,"794":1,"832":1,"888":1,"947":1,"948":1,"1140":1,"1231":1,"1232":1,"1237":4,"1275":1,"1286":2,"1300":4,"1311":1,"1323":4,"1350":1,"1354":1,"1359":12,"1395":2,"1396":5,"1402":4,"1410":1,"1411":4,"1415":17,"1436":5,"1453":1,"1469":1,"1483":1,"1488":1,"1496":4,"1567":2,"1577":1,"1631":2,"1632":4,"1634":2,"1637":1,"1638":9,"1641":1,"1755":1,"1776":2,"1810":1,"1923":1,"1996":1,"2062":2,"2099":1,"2129":2,"2130":1,"2169":1,"2205":1}}],["delete+anonymize",{"3":{"1591":1}}],["deleteoverridethatonlydeletesitself",{"3":{"1436":1}}],["deletewhileopen",{"3":{"1402":1}}],["deletewithconfirmationasync",{"2":{"649":1,"1395":1},"3":{"649":1,"1324":3,"1395":6}}],["deleteroomasync",{"3":{"1395":2}}],["deletequestionasync",{"3":{"1395":2}}],["deleteproduct",{"3":{"1436":1}}],["deleteproducthandlertests",{"3":{"1685":1}}],["deleteproducthandler",{"2":{"924":1,"927":1},"3":{"924":1,"927":1}}],["deletepollasync",{"3":{"1402":1}}],["deletepartnerasync",{"3":{"1395":2}}],["deleteitemasync",{"3":{"1395":1}}],["deletefailed",{"3":{"1323":3,"1324":2}}],["deleteforbidden",{"3":{"1323":2}}],["deletehandler",{"3":{"1311":3,"1359":1}}],["deletelivepollhandlertests",{"3":{"1199":1,"1207":2,"1438":1}}],["deletelivepollhandler",{"3":{"1199":3,"1203":1,"1207":2,"1270":2,"1396":3,"1402":4}}],["deletebookmarkasync",{"3":{"1396":2}}],["deleteblobifexistsasync",{"3":{"1323":1}}],["deleteblobinternalcommandhandlerbasetests",{"3":{"1199":1,"1207":4}}],["deleteblobinternalcommandhandlerbase",{"2":{"1313":1,"1318":1,"1411":1,"2129":1},"3":{"1199":4,"1203":1,"1207":2,"1286":3,"1313":1,"1318":4,"1323":6,"1357":1,"1359":6,"1411":1,"1415":6,"1496":1,"2129":2}}],["deletebatchsize",{"3":{"1301":3}}],["deletebyidasync",{"3":{"881":1,"1324":3,"1395":5}}],["deletebehaviortestdbcontext",{"3":{"1199":2,"1207":1}}],["deletebehaviorconventiontests",{"3":{"1083":3,"1085":1,"1199":2,"1207":10,"1286":1,"1436":31,"1489":1,"1526":1}}],["deletebehaviorconventiontestsbase",{"2":{"1083":1,"1281":1,"1431":1,"2065":1},"3":{"0":1,"1083":2,"1199":3,"1207":2,"1281":1,"1286":1,"1431":3,"1436":8,"2065":2}}],["deletebehavior",{"2":{"1083":2,"1281":1,"2065":2},"3":{"1083":3,"1207":2,"1281":2,"1286":5,"1362":1,"1369":3,"1436":8,"1489":1,"2065":2}}],["deletebehaviorsourceannotation",{"3":{"1286":1}}],["deletebehaviorsource",{"3":{"0":1,"1083":1,"1281":1,"1286":1,"1431":1,"1436":3,"2065":1}}],["deletecategoryasync",{"3":{"1395":1}}],["deletecategoryhandler",{"2":{"924":1},"3":{"924":1,"1270":2}}],["deleteconfirm",{"3":{"1324":1,"1395":5,"1402":1}}],["deleteconfirmationtests",{"3":{"1199":1,"1207":2}}],["deleteconfirmation",{"3":{"649":1,"1324":5,"1395":21,"1402":2,"1577":1}}],["deleteconferencecategoryhandlertests",{"3":{"1199":1,"1207":2,"1438":1}}],["deleteconferencecategoryhandler",{"3":{"1199":3,"1203":1,"1207":2,"1270":2,"1359":9}}],["deletechildren",{"2":{"37":1,"39":1,"43":1,"1168":1,"1343":1},"3":{"37":1,"39":2,"43":1,"1168":1,"1231":1,"1237":2,"1343":1,"1350":8,"1359":2,"1402":3,"1436":7,"1577":1,"1586":1,"1662":1,"1810":1}}],["deleteuserasync",{"3":{"1324":1}}],["deleteusercommand",{"3":{"988":1,"1199":5,"1203":1,"1207":2,"1323":6,"1410":2,"1415":6}}],["deleteuserhandlertests",{"3":{"1199":1,"1207":2}}],["deleteuserhandler",{"2":{"463":1},"3":{"444":1,"459":3,"463":3,"464":2,"465":2,"466":2,"1199":2,"1203":1,"1207":2,"1286":1,"1323":7,"1410":2,"1415":19,"1496":4,"1526":1,"1535":2,"1591":1,"1600":1,"2129":1}}],["deleteuserhandlerbasetests",{"3":{"497":1,"1199":1,"1207":4,"1323":1,"1438":2}}],["deleteuserhandlerbase",{"2":{"457":1,"459":1,"461":1,"465":1,"466":1,"724":1,"728":1,"1291":1,"1403":1,"1672":1},"3":{"0":1,"457":1,"459":6,"461":3,"465":6,"466":1,"724":3,"725":3,"728":1,"910":1,"1199":3,"1203":1,"1207":2,"1286":2,"1291":2,"1300":7,"1322":2,"1323":8,"1403":1,"1410":1,"1415":11,"1496":4,"1577":1,"1672":1,"2068":4}}],["deleteuser",{"2":{"1323":1},"3":{"444":1,"459":3,"463":2,"465":3,"466":1,"724":1,"910":1,"988":1,"1203":3,"1207":8,"1286":1,"1291":1,"1300":5,"1322":1,"1323":12,"1410":1,"1415":7,"1496":1,"1500":1,"1526":1,"1577":1,"2068":1}}],["deleteaccountasync",{"3":{"1415":1}}],["deleteactivityasync",{"3":{"1395":2}}],["deleteanswerasync",{"3":{"1395":6,"1396":8}}],["deleteall",{"2":{"1346":1},"3":{"1346":1,"1350":4}}],["deleteavatarblob",{"2":{"444":1,"1411":1},"3":{"444":2,"1203":3,"1207":8,"1318":1,"1323":2,"1410":1,"1411":1,"1415":6}}],["deleteavatarblobinternalcommandvalidator",{"2":{"1411":1},"3":{"1199":1,"1203":1,"1207":2,"1411":2,"1415":4}}],["deleteavatarblobinternalcommandhandlertests",{"3":{"1199":1,"1207":2}}],["deleteavatarblobinternalcommandhandler",{"2":{"1411":1,"2129":1},"3":{"1199":2,"1203":1,"1207":2,"1286":2,"1318":1,"1323":3,"1411":2,"1415":7,"2129":2}}],["deleteavatarblobinternalcommand",{"2":{"440":1,"444":1,"1410":1,"1411":1,"2128":1,"2129":1},"3":{"440":1,"444":2,"1199":10,"1203":1,"1207":2,"1323":2,"1410":2,"1411":2,"1415":20,"1496":1,"2128":1,"2129":1}}],["deleteasync",{"2":{"318":1,"326":1,"434":1,"1386":1},"3":{"318":1,"326":1,"434":1,"881":2,"1286":4,"1301":2,"1309":2,"1311":4,"1323":6,"1324":4,"1359":7,"1380":18,"1382":2,"1386":1,"1389":1,"1395":29,"1396":5,"1402":2,"1415":7,"1429":1,"1436":1,"1488":1,"1496":1,"1996":1,"2056":1,"2076":1,"2128":1}}],["deleteeventasync",{"3":{"1395":2}}],["deleteeventhandlertests",{"3":{"1199":1,"1207":2,"1350":2,"1359":2}}],["deleteeventhandler",{"3":{"1116":1,"1199":2,"1203":1,"1207":2,"1323":1,"1350":4,"1352":9,"1359":11,"1496":2}}],["deleteentitycommand",{"2":{"1265":1},"3":{"1199":45,"1203":1,"1207":2,"1260":1,"1265":6,"1270":6,"1311":3,"1359":5,"1380":8,"1396":6,"1402":3,"1436":1,"1922":1}}],["deleteentityhandlertests",{"3":{"1199":1,"1207":3,"1270":1}}],["deleteentityhandlerextensiontests",{"2":{"926":1},"3":{"926":1,"1199":1,"1207":1}}],["deleteentityhandler",{"2":{"920":1,"1265":1},"3":{"0":1,"920":1,"926":3,"1199":11,"1203":1,"1207":2,"1260":1,"1265":8,"1270":7,"1286":2,"1323":2,"1352":1,"1359":29,"1396":2,"1402":8,"1577":2}}],["deleteerror",{"3":{"265":1,"1324":2}}],["deletesponsorasync",{"3":{"1395":2}}],["deletespeakerasync",{"3":{"1395":2}}],["deletespeakercommand",{"3":{"1270":1}}],["deletesessionasync",{"3":{"1395":1}}],["deletesessionassetcommandvalidator",{"3":{"1199":1,"1203":1,"1207":2,"1359":3}}],["deletesessionassetcommand",{"3":{"1199":6,"1203":1,"1207":2,"1359":7,"1380":1}}],["deletesessionassethandlertests",{"3":{"1199":1,"1207":2}}],["deletesessionassethandler",{"3":{"1116":1,"1199":2,"1203":1,"1207":2,"1323":1,"1350":1,"1357":2,"1359":9,"1496":1}}],["deletesessionassetblobinternalcommandhandler",{"2":{"1203":1,"1323":1,"1415":1},"3":{"1199":2,"1203":1,"1207":2,"1286":2,"1318":1,"1323":3,"1357":2,"1359":6,"1415":1}}],["deletesessionassetblobinternalcommandhandlertests",{"2":{"1199":1,"1207":1},"3":{"1199":1,"1207":2}}],["deletesessionassetblobinternalcommandvalidator",{"2":{"1199":1,"1203":1},"3":{"1199":2,"1203":1,"1207":2,"1359":5}}],["deletesessionassetblobinternalcommand",{"2":{"1496":1},"3":{"536":1,"1116":1,"1199":10,"1203":1,"1207":2,"1323":2,"1357":3,"1359":15,"1496":1}}],["deletesessionassetblob",{"2":{"536":1,"1116":1,"1631":1},"3":{"0":1,"536":2,"1116":2,"1203":3,"1207":6,"1286":1,"1318":1,"1323":2,"1357":1,"1359":6,"1631":1}}],["deletesessioncommand",{"3":{"1270":1}}],["deletesessionhandlertests",{"3":{"1199":1,"1207":2,"1350":1,"1359":2}}],["deletesessionhandler",{"3":{"1116":1,"1199":3,"1203":1,"1207":2,"1270":2,"1323":1,"1359":10,"1496":1}}],["deletes",{"3":{"0":1,"39":2,"435":1,"458":1,"459":1,"490":1,"592":1,"690":1,"698":1,"733":1,"790":1,"792":2,"831":1,"881":2,"905":1,"996":1,"1061":1,"1082":2,"1086":1,"1116":1,"1168":1,"1229":1,"1270":4,"1275":1,"1281":1,"1283":1,"1285":1,"1286":6,"1294":1,"1300":7,"1301":9,"1323":7,"1324":4,"1343":1,"1346":1,"1350":7,"1357":1,"1359":13,"1369":4,"1380":1,"1395":13,"1396":17,"1402":9,"1415":7,"1417":2,"1422":1,"1436":13,"1438":1,"1445":1,"1455":2,"1460":4,"1463":1,"1465":3,"1467":3,"1472":1,"1475":3,"1489":1,"1496":1,"1545":1,"1577":1,"1630":1,"1631":5,"1632":6,"1635":4,"1639":9,"1640":1,"1664":1,"1682":1,"1707":1,"1747":1,"1749":2,"1765":1,"1845":1,"1936":1,"1968":1,"1984":1,"2035":1,"2064":1,"2128":1,"2130":1,"2204":1}}],["deletedvote",{"3":{"1402":1}}],["deletedbookmark",{"3":{"1396":2}}],["deletedbynamespecification",{"3":{"1199":2,"1207":1}}],["deletedby",{"2":{"37":1,"41":1},"3":{"37":1,"39":1,"41":1,"1231":1,"1237":4,"1286":1}}],["deletedon",{"2":{"37":1,"41":1},"3":{"37":1,"39":1,"41":1,"1231":2,"1237":5,"1274":1,"1286":2,"1415":1,"1664":1,"1810":1}}],["deleted",{"1":{"456":1,"457":1,"458":1,"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1},"2":{"781":1,"785":1,"1082":1,"1355":1},"3":{"0":15,"39":3,"41":2,"62":1,"109":1,"135":1,"264":1,"308":1,"441":2,"456":1,"457":1,"458":1,"459":11,"461":4,"463":2,"465":3,"468":1,"503":1,"529":1,"538":1,"545":1,"551":1,"562":1,"607":1,"690":1,"698":2,"707":1,"715":1,"716":2,"717":1,"721":1,"748":1,"749":2,"781":1,"782":6,"784":1,"785":1,"790":1,"832":1,"833":1,"838":1,"848":1,"881":1,"888":1,"889":3,"890":4,"891":3,"905":2,"910":1,"926":1,"945":1,"966":1,"972":1,"1033":1,"1034":1,"1082":1,"1116":1,"1168":2,"1192":1,"1212":5,"1229":1,"1231":7,"1232":1,"1233":1,"1237":17,"1240":1,"1247":4,"1249":1,"1259":4,"1270":1,"1274":1,"1276":1,"1277":1,"1281":1,"1283":2,"1286":43,"1287":1,"1289":3,"1300":15,"1301":1,"1304":1,"1309":1,"1311":10,"1323":14,"1342":1,"1343":3,"1345":2,"1346":3,"1347":1,"1350":58,"1352":2,"1355":1,"1357":1,"1358":1,"1359":87,"1362":1,"1369":9,"1380":1,"1395":1,"1396":54,"1398":3,"1402":33,"1406":1,"1409":1,"1410":1,"1415":23,"1417":1,"1436":19,"1438":3,"1442":1,"1451":1,"1456":2,"1467":1,"1471":1,"1473":3,"1475":2,"1479":1,"1486":1,"1490":1,"1496":19,"1611":1,"1630":3,"1631":12,"1632":9,"1633":4,"1634":25,"1635":4,"1636":1,"1637":1,"1638":15,"1639":34,"1640":6,"1641":2,"1653":1,"1664":1,"1667":3,"1672":2,"1675":2,"1684":1,"1685":2,"1698":1,"1704":1,"1719":1,"1728":1,"1747":1,"1748":6,"1749":1,"1755":1,"1764":2,"1765":3,"1767":1,"1769":12,"1776":2,"1810":1,"1825":2,"1839":1,"1851":2,"1891":1,"1898":1,"1920":1,"1923":1,"2046":1,"2062":4,"2066":4,"2068":7,"2071":1,"2100":1,"2129":2,"2160":1,"2166":1,"2232":1,"2234":3}}],["delete",{"0":{"1386":1,"2065":1},"1":{"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"886":1,"887":1,"888":1,"889":1,"890":1,"891":1,"892":1,"893":1,"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":1,"1080":1,"1081":1,"1082":1,"1083":1,"1084":1,"1085":1,"1086":1,"1087":1,"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1956":1,"1957":1,"1958":1,"1959":1,"2062":1,"2063":1,"2064":1,"2065":1,"2066":1,"2067":1,"2068":1,"2069":1,"2070":1,"2071":1},"2":{"38":1,"40":1,"43":1,"207":1,"458":1,"718":1,"719":1,"1082":1,"1140":1,"1478":1,"1687":1,"1746":1,"1936":1,"2035":1,"2062":1,"2065":1,"2205":1},"3":{"0":26,"36":1,"37":1,"38":5,"39":5,"40":2,"41":2,"43":2,"59":1,"157":1,"207":2,"243":1,"245":1,"257":1,"265":1,"291":1,"305":1,"313":1,"318":2,"326":1,"328":1,"329":1,"341":1,"346":1,"358":1,"361":1,"362":2,"366":1,"434":4,"435":2,"440":2,"458":3,"459":4,"461":1,"462":2,"463":1,"464":1,"466":1,"497":1,"499":1,"534":1,"549":1,"550":1,"609":1,"610":1,"611":1,"633":1,"640":1,"642":1,"690":1,"698":3,"699":2,"700":1,"707":1,"710":1,"713":1,"714":1,"715":1,"716":2,"718":1,"719":1,"721":1,"723":1,"725":1,"733":3,"774":1,"782":2,"790":1,"791":1,"853":1,"886":1,"888":3,"889":3,"890":2,"891":1,"893":1,"905":1,"907":1,"910":1,"919":1,"920":1,"921":1,"922":3,"924":2,"925":1,"926":5,"950":1,"996":1,"1033":1,"1059":1,"1061":1,"1063":1,"1069":1,"1080":1,"1081":1,"1082":6,"1083":3,"1084":3,"1085":2,"1086":2,"1087":1,"1116":8,"1117":1,"1118":2,"1120":2,"1140":1,"1141":1,"1142":1,"1146":1,"1147":1,"1168":4,"1170":1,"1174":2,"1175":5,"1180":1,"1192":1,"1201":2,"1202":1,"1203":8,"1207":18,"1212":9,"1213":1,"1230":2,"1231":9,"1232":2,"1236":2,"1237":37,"1240":1,"1244":1,"1247":7,"1259":2,"1260":2,"1265":5,"1270":27,"1272":1,"1273":1,"1274":2,"1275":1,"1276":1,"1277":1,"1278":2,"1280":2,"1281":5,"1286":93,"1290":1,"1291":3,"1300":35,"1301":13,"1306":1,"1308":3,"1309":8,"1311":18,"1316":1,"1318":2,"1323":44,"1324":20,"1339":4,"1340":1,"1342":5,"1343":6,"1344":1,"1345":2,"1346":4,"1350":97,"1352":2,"1353":1,"1354":3,"1355":3,"1357":4,"1359":192,"1361":1,"1362":3,"1363":1,"1369":25,"1371":4,"1373":1,"1375":1,"1380":25,"1383":1,"1386":1,"1388":2,"1392":1,"1395":95,"1396":101,"1398":3,"1402":63,"1405":7,"1406":2,"1410":2,"1411":1,"1412":2,"1414":1,"1415":69,"1417":6,"1431":3,"1436":149,"1438":20,"1446":1,"1453":2,"1455":1,"1465":3,"1467":3,"1469":1,"1473":1,"1474":2,"1475":1,"1478":4,"1487":2,"1488":1,"1489":2,"1490":3,"1496":4,"1526":4,"1535":1,"1545":2,"1567":4,"1570":1,"1572":1,"1577":7,"1586":2,"1591":1,"1607":1,"1608":1,"1611":1,"1612":1,"1614":1,"1618":2,"1630":3,"1631":8,"1632":40,"1633":2,"1635":9,"1637":1,"1638":6,"1639":14,"1640":3,"1641":1,"1643":1,"1644":1,"1651":5,"1657":1,"1662":1,"1664":1,"1666":2,"1667":1,"1668":1,"1669":1,"1671":3,"1672":2,"1684":1,"1685":5,"1686":7,"1687":2,"1689":1,"1699":1,"1700":1,"1701":1,"1710":1,"1717":1,"1720":3,"1727":4,"1729":1,"1741":1,"1742":4,"1746":13,"1747":6,"1748":17,"1749":1,"1750":2,"1751":1,"1765":4,"1768":2,"1769":16,"1779":2,"1784":1,"1795":2,"1796":1,"1799":1,"1810":7,"1812":1,"1815":1,"1839":1,"1851":2,"1856":1,"1909":1,"1912":1,"1915":1,"1916":1,"1922":2,"1923":1,"1936":1,"1951":1,"1964":1,"1986":1,"1987":1,"1992":1,"1996":2,"2035":1,"2048":1,"2061":1,"2062":9,"2063":1,"2064":7,"2065":6,"2066":5,"2068":3,"2070":1,"2071":7,"2091":1,"2092":1,"2100":1,"2128":2,"2129":2,"2140":1,"2166":1,"2168":1,"2169":1,"2170":2,"2188":1,"2204":2,"2205":1,"2210":1,"2212":1,"2223":1,"2232":2,"2234":7}}],["delimiting",{"3":{"1089":1,"1093":1,"2181":1}}],["delimiters",{"3":{"1019":1,"1324":1}}],["delimiter",{"3":{"1018":1,"1019":1,"1020":1,"1301":1,"1324":1,"1366":1,"1455":1}}],["delimited",{"3":{"0":1,"1017":1,"1018":2,"1090":1,"1212":1,"1339":1,"1366":2,"1369":1,"1435":1,"1438":1,"1492":1,"1496":1,"1526":1}}],["delimit",{"3":{"1018":1}}],["deliberateness",{"3":{"1436":1}}],["deliberate",{"0":{"1497":1,"1534":1,"1585":1,"1599":1},"3":{"0":5,"42":1,"53":1,"61":1,"81":1,"85":1,"122":2,"126":1,"135":1,"136":1,"149":1,"157":1,"175":2,"178":1,"189":1,"201":1,"230":1,"237":1,"255":1,"264":1,"265":1,"267":1,"302":1,"359":1,"361":1,"365":1,"372":1,"374":1,"382":1,"388":1,"391":1,"408":1,"446":1,"461":1,"469":1,"473":1,"536":1,"545":1,"566":1,"585":1,"607":1,"609":1,"628":1,"629":1,"661":1,"715":1,"725":1,"735":1,"743":1,"751":1,"764":1,"766":2,"767":1,"776":1,"785":1,"790":1,"792":2,"793":1,"802":1,"821":1,"825":1,"827":1,"831":1,"832":1,"840":1,"872":1,"897":1,"906":1,"913":1,"922":1,"931":1,"932":1,"941":1,"988":1,"996":1,"998":1,"1018":1,"1042":1,"1043":1,"1044":1,"1052":1,"1061":1,"1077":1,"1082":1,"1116":1,"1126":1,"1135":1,"1162":1,"1211":1,"1212":2,"1229":3,"1230":1,"1236":1,"1237":11,"1239":1,"1242":1,"1244":1,"1247":8,"1254":1,"1257":2,"1259":13,"1263":3,"1264":1,"1265":1,"1267":1,"1270":8,"1271":4,"1276":1,"1286":46,"1298":1,"1300":19,"1301":3,"1304":1,"1307":1,"1309":4,"1310":1,"1311":19,"1312":6,"1316":1,"1322":1,"1323":21,"1324":28,"1327":1,"1332":1,"1333":1,"1337":1,"1339":28,"1341":1,"1344":1,"1347":1,"1350":6,"1352":2,"1353":1,"1358":1,"1359":47,"1361":1,"1369":4,"1372":1,"1378":1,"1380":7,"1383":1,"1387":1,"1394":1,"1395":26,"1396":31,"1399":1,"1402":9,"1414":1,"1415":13,"1416":3,"1417":15,"1421":1,"1427":1,"1431":1,"1434":1,"1436":51,"1438":2,"1441":3,"1443":1,"1447":1,"1453":2,"1455":3,"1456":1,"1457":1,"1467":6,"1473":1,"1474":1,"1483":1,"1487":2,"1489":2,"1491":1,"1492":1,"1495":1,"1496":2,"1500":1,"1504":2,"1526":3,"1530":1,"1531":4,"1532":2,"1534":3,"1545":1,"1547":1,"1555":1,"1569":1,"1575":1,"1577":4,"1581":1,"1582":2,"1583":1,"1584":1,"1585":1,"1586":1,"1589":1,"1591":5,"1596":3,"1597":3,"1599":2,"1638":2,"1640":1,"1641":1,"1653":1,"1654":2,"1708":1,"1722":1,"1735":1,"1805":1,"1811":1,"1815":1,"1821":3,"1827":1,"1833":1,"1840":1,"1861":1,"1867":1,"1876":1,"1898":1,"1902":1,"1904":1,"1909":1,"1915":1,"1918":1,"1920":1,"1923":2,"1933":1,"1940":1,"1948":1,"1949":1,"1953":1,"1963":1,"1977":1,"1982":1,"1984":1,"1989":1,"1995":1,"2001":2,"2002":2,"2010":1,"2013":1,"2014":1,"2020":2,"2025":1,"2028":1,"2031":2,"2033":1,"2042":1,"2044":1,"2065":3,"2067":1,"2073":1,"2077":1,"2083":1,"2100":1,"2113":1,"2119":1,"2129":1,"2134":1,"2144":1,"2145":1,"2156":1,"2157":1,"2158":1,"2160":1,"2161":1,"2167":1,"2168":1,"2169":1,"2179":1,"2194":2,"2200":1,"2234":2}}],["deliberately",{"0":{"1368":1,"1389":1,"1721":1,"1902":1},"3":{"0":35,"23":1,"24":2,"26":1,"31":1,"45":1,"55":1,"62":1,"66":1,"68":1,"92":1,"97":1,"100":1,"109":2,"122":1,"124":1,"125":1,"135":3,"136":2,"142":1,"143":1,"147":1,"149":1,"164":1,"173":1,"178":1,"188":1,"200":1,"207":1,"219":1,"230":2,"235":1,"237":1,"243":1,"245":1,"248":2,"256":1,"265":5,"267":1,"273":1,"283":1,"290":1,"291":1,"309":1,"312":1,"314":1,"318":1,"322":1,"328":1,"353":1,"355":1,"358":1,"359":1,"365":1,"369":1,"372":1,"373":1,"379":1,"401":1,"402":1,"403":1,"413":2,"435":1,"448":3,"455":1,"459":2,"470":1,"474":1,"482":1,"494":1,"500":1,"501":2,"509":1,"517":1,"530":1,"535":1,"545":2,"546":1,"547":1,"549":5,"550":2,"556":1,"558":2,"564":1,"572":2,"576":1,"583":1,"591":2,"592":1,"593":1,"599":1,"600":2,"602":1,"603":1,"607":1,"609":1,"618":2,"620":1,"625":1,"626":1,"632":1,"633":1,"641":1,"649":1,"657":1,"665":6,"672":3,"682":1,"690":2,"692":1,"698":2,"700":1,"703":1,"707":1,"715":1,"725":1,"733":1,"741":2,"749":1,"751":1,"753":1,"757":1,"765":1,"766":2,"774":1,"778":1,"782":2,"786":1,"790":3,"795":1,"800":1,"819":2,"820":1,"825":1,"826":1,"827":4,"834":1,"836":1,"837":1,"848":1,"854":1,"869":2,"873":1,"881":1,"883":1,"889":1,"897":2,"904":1,"905":4,"907":3,"914":1,"926":2,"933":1,"939":1,"947":1,"963":1,"964":1,"971":1,"972":1,"988":5,"995":1,"998":1,"999":1,"1005":1,"1012":1,"1018":1,"1020":1,"1034":1,"1041":1,"1042":2,"1046":1,"1050":2,"1051":1,"1053":1,"1059":1,"1066":1,"1067":1,"1069":1,"1083":1,"1093":1,"1099":1,"1118":1,"1124":3,"1133":1,"1212":8,"1213":1,"1215":1,"1217":1,"1222":1,"1228":2,"1229":4,"1231":2,"1232":1,"1233":1,"1234":1,"1235":1,"1237":10,"1239":1,"1240":1,"1242":1,"1244":1,"1247":13,"1252":2,"1253":1,"1254":1,"1259":14,"1261":1,"1263":1,"1265":1,"1267":2,"1269":1,"1270":25,"1271":1,"1273":4,"1275":1,"1276":1,"1278":2,"1279":2,"1281":1,"1285":1,"1286":78,"1289":3,"1290":3,"1291":2,"1292":1,"1293":1,"1294":2,"1298":1,"1300":42,"1301":11,"1304":3,"1305":1,"1306":1,"1308":1,"1309":18,"1310":3,"1311":53,"1312":3,"1314":1,"1315":2,"1317":2,"1318":3,"1319":1,"1320":1,"1322":1,"1323":37,"1324":58,"1325":1,"1328":2,"1330":2,"1332":1,"1335":1,"1336":2,"1337":1,"1338":1,"1339":28,"1340":1,"1342":3,"1343":3,"1349":1,"1350":21,"1353":2,"1355":2,"1357":1,"1359":87,"1362":2,"1363":1,"1364":1,"1365":1,"1366":1,"1369":17,"1372":1,"1374":1,"1375":1,"1377":2,"1378":1,"1380":10,"1383":1,"1389":1,"1391":1,"1394":1,"1395":29,"1396":69,"1397":1,"1398":1,"1399":2,"1400":1,"1402":27,"1404":1,"1405":2,"1406":2,"1408":1,"1409":1,"1410":2,"1412":2,"1413":1,"1414":1,"1415":33,"1416":8,"1417":36,"1421":1,"1422":1,"1423":1,"1424":1,"1425":1,"1427":4,"1429":1,"1430":3,"1431":3,"1433":3,"1434":1,"1435":2,"1436":142,"1438":16,"1441":3,"1442":1,"1443":4,"1445":1,"1446":1,"1447":2,"1448":1,"1453":3,"1454":1,"1455":7,"1458":1,"1459":1,"1460":2,"1465":3,"1467":16,"1472":1,"1473":1,"1474":2,"1475":2,"1476":1,"1477":2,"1478":1,"1481":1,"1486":3,"1487":1,"1488":2,"1489":8,"1490":1,"1491":1,"1492":7,"1496":3,"1507":2,"1512":1,"1526":7,"1530":1,"1531":1,"1532":1,"1534":1,"1537":1,"1550":1,"1556":1,"1577":6,"1585":1,"1586":1,"1589":1,"1591":2,"1596":1,"1602":1,"1630":1,"1631":1,"1632":1,"1639":1,"1640":1,"1641":2,"1652":1,"1653":1,"1654":1,"1655":1,"1661":2,"1665":1,"1670":2,"1684":1,"1686":2,"1689":1,"1692":1,"1699":1,"1701":1,"1707":1,"1723":1,"1727":2,"1729":1,"1731":1,"1735":1,"1748":1,"1749":2,"1761":1,"1764":2,"1765":4,"1766":1,"1771":1,"1792":1,"1795":1,"1797":1,"1799":1,"1806":1,"1810":1,"1815":3,"1823":1,"1833":1,"1838":1,"1839":1,"1841":1,"1843":1,"1845":1,"1849":1,"1852":1,"1855":1,"1856":1,"1858":1,"1860":1,"1873":1,"1876":1,"1880":1,"1891":1,"1896":1,"1897":1,"1898":1,"1902":1,"1909":1,"1911":1,"1916":1,"1917":1,"1918":1,"1922":1,"1923":2,"1924":1,"1927":2,"1929":1,"1933":1,"1934":1,"1935":1,"1942":1,"1952":1,"1955":1,"1968":1,"1969":1,"1970":1,"1982":1,"1984":1,"1991":1,"1995":2,"1996":1,"1999":1,"2002":3,"2003":1,"2005":1,"2008":1,"2011":1,"2025":1,"2030":1,"2031":1,"2035":1,"2045":3,"2048":1,"2051":1,"2055":1,"2058":1,"2060":1,"2064":1,"2065":1,"2069":3,"2070":1,"2079":1,"2084":1,"2087":2,"2091":1,"2100":1,"2109":1,"2115":1,"2121":1,"2122":1,"2128":1,"2140":1,"2143":1,"2144":1,"2147":1,"2153":1,"2158":2,"2159":1,"2160":1,"2161":1,"2165":1,"2166":1,"2169":2,"2173":1,"2177":1,"2179":1,"2182":1,"2185":1,"2186":1,"2188":1,"2190":1,"2193":1,"2194":1,"2200":1,"2202":1,"2230":1,"2234":1}}],["deliverorderhandler",{"2":{"1875":1},"3":{"1765":1,"1875":1}}],["deliverat",{"3":{"1396":6,"1417":2}}],["deliverable",{"3":{"0":1,"24":1,"528":1,"800":1,"811":1,"1259":1,"1766":1}}],["deliveries",{"3":{"536":1,"702":1,"789":2,"1258":1,"1259":1,"1309":1,"1577":1,"1748":2,"1749":1,"1765":1,"1776":1,"2166":2,"2168":2,"2171":1}}],["delivering",{"3":{"391":1,"1300":1,"1339":1,"1396":1,"2164":1,"2215":1,"2219":1,"2220":1,"2222":2}}],["delivers",{"3":{"96":1,"896":1,"926":1,"988":1,"1091":1,"1212":1,"1247":1,"1270":1,"1286":3,"1309":1,"1324":1,"1345":1,"1350":1,"1359":1,"1415":1,"1416":1,"1467":1,"1665":1,"2179":1}}],["deliver",{"2":{"1771":1},"3":{"18":1,"91":1,"224":1,"225":1,"1101":1,"1212":1,"1229":1,"1254":1,"1257":1,"1259":1,"1286":1,"1300":1,"1302":1,"1309":1,"1323":1,"1324":1,"1396":1,"1425":1,"1746":2,"1749":2,"1765":3,"1771":1,"1775":1,"1837":1,"1846":1,"1933":2,"1941":1,"2026":1,"2216":1,"2222":1}}],["deliveredstate",{"3":{"1767":1}}],["deliveredon",{"3":{"1764":1,"1769":1}}],["delivered",{"3":{"0":2,"26":2,"27":2,"91":1,"120":1,"193":1,"202":1,"370":1,"725":1,"726":1,"854":1,"955":1,"1116":1,"1140":1,"1237":1,"1249":1,"1253":1,"1254":1,"1255":1,"1259":9,"1270":1,"1285":1,"1286":6,"1304":1,"1309":2,"1317":1,"1323":5,"1324":1,"1359":1,"1396":2,"1417":1,"1436":2,"1438":1,"1467":2,"1631":1,"1637":1,"1651":1,"1657":1,"1686":1,"1748":2,"1749":4,"1751":1,"1755":1,"1759":1,"1764":3,"1765":6,"1766":2,"1767":2,"1768":3,"1769":1,"1776":2,"1840":1,"1842":1,"1845":1,"1890":1,"1933":1,"1940":1,"1941":1,"2093":1,"2158":1,"2169":1,"2197":1,"2205":1,"2222":1,"2232":1}}],["delivery",{"0":{"1253":1,"1255":1,"1837":1,"1841":1,"2168":1},"1":{"431":1,"432":1,"433":1,"434":1,"435":1,"436":1},"3":{"0":9,"18":1,"20":1,"24":3,"26":1,"40":1,"67":1,"68":1,"80":1,"135":1,"156":1,"194":1,"195":1,"199":1,"201":2,"224":1,"225":5,"226":1,"228":1,"230":5,"255":3,"380":1,"383":1,"431":1,"433":1,"434":1,"435":2,"436":1,"518":1,"536":2,"540":2,"541":1,"605":1,"611":1,"640":1,"694":1,"696":1,"698":1,"702":3,"726":1,"757":1,"759":1,"761":1,"789":1,"790":4,"791":1,"792":3,"795":1,"815":1,"818":2,"820":2,"845":1,"846":2,"847":1,"849":1,"856":1,"896":1,"901":1,"930":1,"931":1,"933":1,"957":1,"988":1,"989":1,"1011":2,"1012":2,"1100":1,"1140":1,"1142":1,"1143":1,"1144":1,"1147":1,"1212":2,"1237":5,"1247":1,"1252":3,"1253":2,"1254":1,"1255":1,"1256":2,"1257":2,"1258":1,"1259":51,"1269":1,"1270":3,"1274":1,"1285":2,"1286":10,"1302":1,"1304":3,"1307":1,"1309":33,"1311":3,"1313":1,"1316":1,"1320":1,"1323":14,"1324":2,"1350":4,"1355":3,"1359":10,"1380":1,"1396":19,"1397":1,"1402":5,"1413":2,"1415":10,"1417":10,"1436":5,"1437":1,"1438":5,"1455":1,"1460":1,"1467":1,"1492":1,"1508":1,"1526":1,"1547":1,"1554":1,"1566":1,"1572":1,"1577":1,"1641":3,"1660":1,"1665":1,"1669":1,"1749":1,"1750":1,"1755":1,"1759":1,"1763":2,"1764":2,"1765":2,"1767":4,"1768":1,"1769":1,"1770":1,"1771":1,"1776":3,"1790":3,"1837":1,"1838":1,"1841":1,"1842":3,"1843":1,"1845":1,"1846":1,"1851":2,"1889":1,"1890":1,"1892":3,"1910":1,"1912":3,"1922":1,"1923":1,"1932":2,"1933":8,"1934":1,"1936":1,"1940":6,"1941":3,"1943":2,"1944":1,"1949":2,"1950":1,"2021":1,"2028":1,"2033":1,"2067":1,"2093":1,"2166":1,"2167":4,"2168":2,"2169":1,"2170":1,"2171":3,"2184":1,"2191":1,"2214":1,"2215":1,"2222":2,"2227":1,"2234":2}}],["desde",{"3":{"1686":1}}],["desk",{"3":{"1396":4,"1630":1}}],["desktops",{"3":{"741":1}}],["desktop",{"0":{"1669":1},"3":{"618":1,"1324":13,"1385":1,"1395":12,"1396":1,"1416":2,"1417":7,"1436":3,"1438":1,"1480":1,"1559":2,"1648":1,"1669":1,"1675":1,"1682":1,"1693":1,"1712":2,"1713":2,"1718":2,"2074":2,"2075":3,"2081":1,"2121":1}}],["desired",{"3":{"1300":3,"1323":1,"1324":1,"1402":2,"1417":1,"1764":2,"1776":1}}],["desire",{"3":{"1145":1}}],["designs",{"3":{"1800":1,"1802":1}}],["designsqliteentityconfiguration",{"3":{"1199":1,"1207":1}}],["designsqliteentity",{"3":{"1199":3,"1207":1}}],["designated",{"3":{"1664":1}}],["designation",{"3":{"1629":2}}],["designalphaentityconfiguration",{"3":{"1199":1,"1207":1}}],["designalphaentity",{"3":{"1199":3,"1207":1}}],["designing",{"3":{"1396":2,"1811":1,"2215":1,"2219":1,"2220":1}}],["designtimesqlitedbcontextfactory",{"2":{"1722":1,"1727":1,"1728":1,"1731":1},"3":{"1722":1,"1727":1,"1728":1,"1731":1}}],["designtimesqlserverdbcontextfactory",{"3":{"1209":4,"1286":6,"1359":1,"1369":1,"1396":2,"1415":3,"1496":1}}],["designtimeconnection",{"3":{"1436":1}}],["designtime",{"3":{"1286":3}}],["designtimedatabaseinitializationtests",{"3":{"1199":1,"1207":2,"1438":2}}],["designtimedbcontexthelpertests",{"3":{"1199":1,"1207":10,"1286":2}}],["designtimedbcontexthelper",{"2":{"696":1,"698":1,"703":1,"707":1,"715":1,"1034":1,"1284":1},"3":{"696":2,"698":2,"703":3,"707":2,"710":1,"715":1,"905":2,"909":1,"1034":2,"1199":4,"1203":1,"1207":4,"1284":2,"1286":44,"1300":2,"1323":2,"1436":3}}],["designtimedbcontextoptions",{"2":{"0":1,"707":1,"905":1,"1284":1},"3":{"0":1,"707":2,"905":3,"907":1,"1199":3,"1203":1,"1207":2,"1284":2,"1286":14,"1496":1}}],["designpostgresqlentityconfiguration",{"3":{"1199":1,"1207":1}}],["designpostgresqlentity",{"3":{"1199":3,"1207":1}}],["designbetaentityconfiguration",{"3":{"1199":1,"1207":1}}],["designbetaentity",{"3":{"1199":3,"1207":1}}],["designed",{"3":{"139":1,"272":1,"319":1,"550":1,"611":1,"692":1,"1229":1,"1270":1,"1286":3,"1300":3,"1311":1,"1323":3,"1324":1,"1369":2,"1395":1,"1396":2,"1417":4,"1436":1,"1561":1,"1591":1,"1632":1,"1641":1,"1900":1,"1994":1,"2063":1,"2142":1,"2145":1,"2147":1,"2222":1,"2223":1}}],["designer",{"3":{"0":1,"564":1,"567":1,"1004":1,"1209":65,"1323":1,"1436":2,"1455":1,"1497":1}}],["design",{"0":{"1201":1,"1284":1,"1539":1,"1541":1,"1543":1,"1546":1,"1555":1,"1557":1,"1559":1,"1680":1},"1":{"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"1711":1,"1712":1,"1713":1,"1714":1,"1715":1,"1716":1,"1942":1,"1943":1,"1944":1,"1945":1,"1946":1,"1947":1,"1948":1,"1949":1,"1950":1},"2":{"1261":1,"1346":1,"1381":1,"1418":1},"3":{"0":10,"24":1,"27":1,"41":1,"59":1,"83":1,"99":1,"135":1,"141":1,"145":1,"159":1,"201":1,"209":1,"225":1,"230":1,"235":1,"244":1,"263":1,"267":1,"274":1,"282":1,"308":1,"311":1,"312":1,"318":1,"340":1,"350":1,"359":2,"365":1,"387":2,"399":2,"419":1,"435":1,"441":1,"451":2,"452":2,"453":1,"464":1,"465":1,"468":1,"470":1,"472":1,"490":1,"501":1,"585":1,"590":1,"607":1,"611":1,"618":1,"632":1,"633":1,"634":1,"640":1,"649":1,"650":1,"667":1,"698":2,"700":1,"703":2,"706":1,"707":5,"710":1,"727":1,"732":1,"733":1,"766":1,"792":1,"803":1,"809":1,"810":3,"811":2,"812":2,"818":1,"825":1,"827":2,"830":1,"840":1,"855":1,"867":1,"876":2,"882":1,"905":4,"907":4,"909":1,"914":1,"916":2,"926":1,"945":1,"950":1,"964":1,"966":1,"1000":1,"1020":1,"1033":2,"1034":2,"1036":1,"1043":1,"1053":1,"1059":2,"1063":1,"1074":1,"1084":1,"1107":1,"1110":1,"1175":1,"1177":1,"1182":1,"1183":1,"1193":1,"1202":1,"1203":5,"1207":8,"1212":1,"1213":1,"1214":1,"1216":6,"1218":2,"1222":1,"1225":1,"1226":1,"1228":1,"1229":19,"1230":1,"1231":1,"1233":1,"1234":1,"1235":1,"1236":1,"1237":20,"1239":2,"1240":1,"1241":1,"1245":1,"1247":15,"1248":1,"1249":1,"1252":2,"1253":1,"1259":14,"1261":1,"1263":1,"1264":1,"1266":2,"1270":27,"1271":11,"1272":1,"1273":4,"1278":1,"1282":1,"1284":4,"1286":92,"1288":1,"1300":46,"1301":5,"1302":1,"1309":20,"1310":12,"1311":62,"1312":9,"1314":1,"1317":1,"1320":1,"1322":1,"1323":27,"1324":95,"1328":1,"1333":1,"1335":1,"1337":2,"1339":22,"1340":1,"1343":1,"1346":1,"1347":1,"1350":59,"1353":1,"1356":1,"1358":1,"1359":156,"1369":2,"1370":1,"1376":1,"1377":1,"1380":36,"1381":1,"1382":1,"1389":3,"1395":51,"1396":103,"1397":1,"1398":1,"1402":31,"1403":1,"1405":1,"1406":3,"1407":1,"1408":1,"1415":39,"1416":6,"1417":29,"1418":1,"1427":3,"1429":2,"1431":2,"1436":97,"1438":1,"1447":1,"1453":1,"1455":6,"1460":2,"1467":1,"1471":1,"1473":1,"1474":1,"1478":1,"1481":1,"1488":3,"1489":1,"1491":1,"1492":1,"1493":3,"1496":5,"1499":5,"1500":1,"1524":1,"1526":8,"1530":1,"1531":1,"1532":2,"1534":3,"1535":4,"1537":1,"1538":1,"1546":1,"1551":1,"1557":1,"1559":1,"1562":2,"1564":1,"1568":1,"1572":1,"1574":1,"1576":1,"1577":9,"1581":2,"1582":5,"1583":2,"1585":5,"1586":2,"1591":6,"1595":1,"1596":1,"1597":2,"1599":3,"1600":3,"1602":1,"1630":2,"1638":2,"1639":1,"1640":1,"1641":1,"1651":1,"1652":2,"1653":1,"1664":1,"1667":1,"1674":1,"1675":1,"1684":1,"1689":2,"1697":2,"1698":1,"1711":1,"1714":1,"1719":3,"1727":2,"1749":1,"1779":1,"1784":1,"1789":1,"1796":7,"1797":1,"1800":5,"1812":1,"1816":1,"1827":2,"1829":1,"1842":1,"1846":1,"1851":1,"1852":1,"1853":2,"1854":1,"1885":2,"1896":1,"1898":1,"1903":1,"1911":2,"1920":2,"1923":4,"1924":1,"1929":2,"1930":1,"1933":1,"1935":1,"1942":1,"1943":1,"1947":1,"1950":1,"1953":2,"1959":1,"1962":1,"1967":1,"1968":1,"1969":1,"1970":1,"1971":1,"1972":1,"1978":1,"1981":1,"1982":1,"1984":1,"2001":1,"2025":1,"2035":1,"2038":1,"2049":2,"2050":1,"2053":2,"2057":1,"2068":1,"2070":1,"2073":1,"2081":3,"2082":2,"2087":1,"2088":1,"2098":1,"2100":2,"2103":1,"2108":1,"2116":2,"2118":1,"2119":1,"2129":2,"2131":1,"2133":2,"2135":1,"2144":1,"2148":1,"2152":1,"2161":1,"2164":1,"2166":1,"2167":1,"2174":1,"2181":1,"2184":1,"2187":1,"2195":1,"2197":1,"2200":1,"2205":2,"2210":1,"2214":1,"2215":2,"2219":1,"2220":1,"2221":3,"2222":2,"2228":1,"2232":1,"2234":2,"2241":3}}],["desynchronize",{"3":{"609":1,"1350":1,"1359":3,"1417":1}}],["deserve",{"3":{"842":1,"1300":1,"1348":1,"1489":1,"1804":1,"1953":1,"2142":1}}],["deserves",{"3":{"290":1,"784":1,"898":1,"1286":1,"1300":1,"1359":3,"1406":1,"1817":1,"1834":1}}],["deserializable",{"3":{"1311":1}}],["deserialization",{"3":{"255":1,"1229":2,"1237":1,"1259":1,"1286":1,"1311":1,"1324":1,"1342":1,"1344":1,"1350":1,"1358":1,"1359":2,"1396":2,"1436":1}}],["deserializing",{"3":{"1237":1,"1324":1,"1395":1,"1396":1,"1438":1}}],["deserializecommand",{"3":{"1286":1}}],["deserializer",{"3":{"1223":1,"1229":1,"1343":1,"1350":1}}],["deserializeevent",{"2":{"848":1,"849":1,"850":1},"3":{"848":1,"849":1,"850":1,"1259":2}}],["deserializes",{"3":{"109":1,"1042":1,"1227":1,"1229":2,"1237":1,"1249":1,"1259":3,"1286":1,"1300":3,"1309":1,"1311":1,"1324":2,"1350":1,"1359":5,"1365":1,"1366":1,"1369":4,"1396":3,"1415":1,"1416":1,"1417":5,"1436":13,"1887":1,"1946":1,"2188":1,"2190":1}}],["deserialize",{"2":{"1366":1},"3":{"78":1,"382":1,"732":1,"845":1,"1229":1,"1237":1,"1259":3,"1300":1,"1301":5,"1324":2,"1366":2,"1369":1,"1396":6,"1415":1,"1416":3,"1417":2,"1427":3,"1438":1,"1889":1,"1949":1}}],["deserialized",{"3":{"26":1,"784":1,"1033":1,"1229":1,"1237":1,"1249":1,"1252":1,"1253":1,"1270":1,"1286":1,"1301":1,"1324":3,"1359":1,"1369":1,"1395":1,"1396":6,"1415":2,"1416":2,"1436":1}}],["despiteframeworkevents",{"3":{"1436":1}}],["despite",{"3":{"135":1,"208":1,"1247":1,"1259":1,"1323":3,"1350":1,"1359":1,"1396":1,"1436":3,"1443":1,"1488":1,"1496":2,"1638":1}}],["descent",{"3":{"1436":1}}],["descended",{"3":{"2011":1}}],["descendant",{"3":{"1333":1,"1380":1}}],["descendants",{"3":{"402":3,"1333":1,"1339":4,"1436":1,"1443":3,"2011":1}}],["descend",{"3":{"1309":1}}],["descends",{"3":{"373":1,"1436":1}}],["descending",{"3":{"27":1,"330":1,"549":3,"1228":1,"1229":2,"1240":1,"1247":5,"1270":2,"1286":8,"1309":5,"1311":1,"1324":2,"1350":1,"1359":5,"1396":2,"1402":4,"1415":1,"1436":3,"1532":1,"1640":1,"1988":1}}],["desc",{"3":{"1242":1,"1247":4,"1286":1,"1324":3,"1415":3,"1597":2,"1598":2,"1640":1}}],["descripción",{"3":{"1685":2}}],["descriptive",{"3":{"1175":1,"1214":1,"1280":1,"1286":6,"1320":1,"1359":1,"1369":1,"1402":2,"1417":1,"1630":1,"1639":1,"1764":1,"1782":1,"1856":1,"2042":1,"2102":1,"2108":1}}],["descriptionquality",{"3":{"1369":1}}],["descriptionqualityscore",{"3":{"1350":1,"1359":1,"1369":1}}],["descriptionmaxlength",{"2":{"1344":1,"1353":1},"3":{"1344":1,"1350":9,"1353":1,"1359":10,"1369":2,"1384":1,"1395":2}}],["descriptions",{"3":{"448":2,"677":1,"839":1,"1311":2,"1417":1,"1637":1,"2133":1}}],["description",{"2":{"528":1,"1017":1,"1685":2},"3":{"0":1,"43":1,"57":1,"96":1,"115":1,"244":1,"245":1,"360":3,"425":1,"428":1,"466":1,"512":1,"528":1,"609":1,"626":1,"633":1,"684":1,"790":1,"792":1,"837":1,"839":2,"921":1,"1017":2,"1184":1,"1247":1,"1270":1,"1286":1,"1300":5,"1311":5,"1324":4,"1339":5,"1350":16,"1359":54,"1366":1,"1369":7,"1393":1,"1395":13,"1396":1,"1417":11,"1427":3,"1435":1,"1436":4,"1467":6,"1474":1,"1476":1,"1488":1,"1496":3,"1500":1,"1630":7,"1631":1,"1635":3,"1641":6,"1661":1,"1682":1,"1685":6,"1687":2,"1697":1,"1727":4,"1728":1,"1729":1,"1746":2,"1748":2,"1750":1,"1764":26,"1767":6,"1768":3,"1769":1,"1771":1,"1773":1,"1775":1,"2091":1,"2099":1,"2148":1,"2160":1,"2168":1}}],["descriptors",{"3":{"12":1,"448":1,"583":1,"651":1,"1018":1,"1236":1,"1310":12,"1315":1,"1323":4,"1324":1,"1339":3,"1350":4,"1359":10,"1368":1,"1369":1,"1417":1,"1421":1,"1424":1,"1427":2,"1436":2,"1437":1,"1526":1,"2177":1}}],["descriptor",{"3":{"11":1,"122":2,"448":1,"649":3,"650":1,"1230":1,"1236":1,"1247":1,"1262":1,"1286":9,"1300":2,"1309":3,"1310":26,"1311":2,"1316":1,"1323":8,"1324":11,"1350":7,"1359":45,"1378":1,"1380":1,"1395":6,"1396":8,"1402":8,"1404":1,"1412":1,"1414":2,"1415":8,"1416":2,"1417":1,"1421":2,"1427":4,"1436":4,"1666":1,"1669":1,"1865":1,"2133":1,"2135":1}}],["describable",{"3":{"1417":1}}],["describing",{"3":{"359":1,"360":1,"497":1,"518":1,"534":1,"545":1,"551":1,"638":1,"684":1,"691":1,"944":1,"1100":1,"1229":1,"1237":1,"1247":1,"1277":1,"1283":1,"1286":8,"1300":3,"1309":4,"1310":1,"1311":4,"1323":4,"1324":1,"1339":2,"1350":4,"1359":3,"1380":1,"1395":2,"1396":3,"1402":1,"1415":1,"1417":3,"1427":2,"1436":4,"1462":1,"1631":2,"1949":1,"2049":1,"2144":1,"2148":3}}],["describeprotofile",{"3":{"1436":2}}],["describemember",{"3":{"1436":3}}],["describemismatch",{"3":{"1427":5}}],["describefailure",{"3":{"1395":2,"1427":1}}],["describeseverycorepublicresource",{"3":{"1436":1}}],["describesize",{"3":{"1395":2}}],["describes",{"3":{"0":1,"15":1,"93":1,"135":2,"139":1,"170":1,"171":1,"178":1,"201":1,"252":1,"256":1,"257":1,"258":1,"296":1,"305":1,"325":2,"335":1,"373":1,"375":1,"395":1,"400":1,"422":1,"424":1,"513":1,"522":1,"539":1,"549":1,"572":1,"578":1,"642":1,"714":1,"715":1,"736":1,"769":1,"794":1,"813":1,"833":1,"836":1,"837":1,"839":2,"870":1,"874":1,"876":1,"939":1,"980":1,"999":1,"1006":1,"1018":1,"1021":1,"1050":1,"1085":1,"1119":1,"1176":1,"1178":1,"1229":2,"1237":3,"1247":3,"1259":2,"1270":2,"1271":1,"1273":1,"1286":14,"1300":2,"1309":2,"1310":2,"1311":3,"1323":3,"1324":2,"1339":6,"1350":3,"1359":5,"1395":3,"1396":3,"1402":6,"1415":6,"1431":1,"1436":11,"1458":1,"1467":1,"1474":1,"1476":1,"1477":1,"1481":1,"1488":1,"1496":1,"1526":2,"1591":1,"1639":1,"1652":1,"1692":1,"1727":1,"1839":2,"1844":1,"2025":1,"2044":1,"2052":1,"2056":1,"2103":1,"2167":1,"2234":1}}],["describedevice",{"3":{"1324":3}}],["described",{"3":{"0":1,"20":1,"22":1,"29":1,"66":1,"95":1,"135":1,"138":2,"141":1,"142":1,"161":1,"249":1,"254":1,"258":1,"268":1,"322":1,"336":1,"340":1,"368":1,"423":1,"451":1,"463":2,"474":1,"497":1,"512":1,"534":2,"543":1,"549":1,"562":1,"566":1,"572":1,"607":1,"624":1,"638":1,"764":1,"825":1,"837":2,"864":1,"867":1,"874":1,"881":1,"980":1,"986":1,"1174":1,"1191":1,"1229":1,"1230":1,"1237":2,"1238":1,"1247":2,"1259":2,"1269":1,"1270":9,"1271":2,"1278":1,"1284":1,"1286":10,"1297":1,"1300":3,"1301":1,"1308":1,"1309":3,"1310":1,"1311":5,"1315":1,"1316":1,"1322":1,"1323":4,"1324":8,"1339":4,"1342":1,"1350":3,"1352":2,"1359":18,"1369":6,"1380":8,"1395":13,"1396":8,"1402":2,"1415":3,"1416":3,"1417":2,"1436":13,"1443":1,"1447":1,"1455":2,"1458":1,"1459":1,"1465":1,"1467":6,"1475":1,"1476":1,"1487":1,"1492":1,"1496":3,"1500":1,"1526":1,"1591":1,"1639":1,"1653":1,"1688":1,"1689":1,"1702":1,"1706":1,"1707":1,"1755":1,"1769":1,"1777":1,"1865":1,"1883":1,"1934":1,"2049":1,"2108":1,"2153":1,"2234":1}}],["describe",{"2":{"1266":1},"3":{"0":1,"27":1,"93":1,"130":1,"138":1,"257":1,"279":1,"306":1,"326":1,"360":1,"375":1,"395":1,"421":1,"497":1,"506":1,"552":1,"685":1,"688":1,"751":1,"820":1,"825":1,"861":1,"863":1,"876":1,"912":1,"1089":1,"1091":1,"1123":1,"1230":1,"1237":1,"1244":1,"1247":1,"1259":1,"1260":1,"1266":1,"1270":7,"1274":1,"1275":1,"1277":1,"1285":1,"1286":9,"1300":11,"1301":2,"1309":1,"1311":1,"1339":2,"1359":4,"1380":1,"1395":1,"1396":1,"1415":1,"1417":6,"1426":1,"1427":1,"1436":5,"1489":1,"1571":1,"1601":1,"1639":1,"1697":2,"1701":1,"1723":1,"1729":1,"1815":1,"1868":1,"2178":1,"2184":1}}],["destruction",{"3":{"1416":1,"1810":1}}],["destructive",{"3":{"0":1,"293":1,"565":1,"566":3,"759":1,"907":1,"1237":1,"1286":1,"1300":1,"1324":6,"1415":1,"1436":1,"1455":1,"1526":1,"1561":1,"1570":1,"1590":1,"1591":1,"2065":1}}],["destructured",{"3":{"1324":1}}],["destructures",{"3":{"1300":1,"1359":1,"1395":3}}],["destructuring",{"3":{"1237":1,"1395":1,"2064":1}}],["destroyed",{"3":{"1359":1,"1436":4}}],["destroying",{"3":{"1300":1,"1416":1}}],["destroys",{"3":{"853":1,"1236":1,"1275":1,"1286":1,"1359":1,"1395":1,"1415":1,"1416":1,"1456":1,"2065":1}}],["destroy",{"3":{"790":1,"1259":1,"1300":1,"1323":2,"1467":1,"2168":1}}],["destinationheader",{"3":{"1436":1}}],["destinationtype",{"3":{"1300":1}}],["destinations",{"3":{"420":1,"810":1,"837":1,"838":1,"1144":1,"1339":2,"1395":1,"1417":2,"1436":1}}],["destination",{"3":{"0":7,"57":1,"825":1,"827":9,"829":4,"833":2,"837":2,"838":2,"839":3,"842":1,"1212":1,"1324":4,"1325":1,"1338":3,"1339":15,"1395":1,"1416":1,"1436":5,"1438":3,"1441":1,"1447":6,"1465":1,"1607":1,"1741":1,"1976":1,"2025":1}}],["a641126d",{"3":{"1475":1}}],["a85d00",{"3":{"1324":4}}],["a1b2c3d4",{"3":{"1286":1}}],["a11y",{"0":{"1558":1},"3":{"618":1,"619":1,"1216":1,"1436":7,"1438":1,"1488":1,"1490":1,"1491":1,"1493":1,"1499":1,"1526":2,"1530":1,"1532":1,"1533":1,"1534":1,"1558":1,"1565":1,"1577":2,"1586":1,"1591":1,"1595":2,"1596":1,"1597":1,"1598":1,"1605":1,"1739":1}}],["akka",{"2":{"1150":1},"3":{"1150":1}}],["aot",{"3":{"869":1,"1417":4}}],["awesomeassertions",{"2":{"960":1},"3":{"960":1,"1213":1,"1436":50,"1654":1,"2059":1}}],["awk",{"3":{"564":1,"1455":2}}],["awkwardly",{"3":{"1816":1,"1952":1}}],["awkward",{"3":{"6":1,"506":1,"1270":1,"1395":1,"1396":1,"1436":1,"1491":1,"1641":1,"1844":1,"1955":1,"2168":1,"2196":1}}],["aws",{"3":{"175":1}}],["awayfromzero",{"3":{"1600":1}}],["away",{"3":{"0":1,"24":1,"160":1,"499":1,"501":1,"558":1,"683":1,"691":1,"773":1,"812":1,"863":1,"881":1,"882":1,"897":2,"903":1,"905":1,"907":1,"948":1,"965":1,"1020":1,"1107":1,"1142":1,"1162":1,"1185":1,"1237":3,"1247":1,"1259":1,"1270":2,"1286":2,"1297":1,"1300":1,"1311":2,"1312":1,"1323":3,"1324":14,"1339":1,"1355":1,"1359":9,"1362":1,"1369":3,"1390":1,"1395":5,"1396":13,"1402":2,"1409":1,"1415":2,"1417":6,"1424":1,"1431":1,"1436":21,"1444":1,"1453":1,"1455":1,"1486":1,"1488":2,"1561":1,"1651":1,"1654":1,"1663":1,"1727":1,"1737":1,"1767":1,"1819":1,"1918":1,"1971":1,"1974":1,"1982":1,"1985":3,"1987":1,"1990":1,"2148":1,"2215":1}}],["awardable",{"3":{"1438":1,"1527":1,"1578":1,"1592":1}}],["awardasync",{"3":{"690":1,"1396":3,"1436":3}}],["awardcount",{"3":{"1396":1}}],["awardcall",{"3":{"1199":2,"1207":1}}],["awarded",{"3":{"1396":13,"1415":2,"1438":2,"1631":4,"1639":2}}],["awarder",{"3":{"1350":1,"1396":17,"1436":3,"1487":1}}],["awardermocks",{"3":{"1199":2,"1207":1}}],["awarding",{"3":{"691":1,"1415":1,"1436":1}}],["awards",{"3":{"0":1,"1350":2,"1359":1,"1396":13,"1438":1,"1490":1,"1631":5}}],["award",{"3":{"0":1,"688":1,"690":2,"691":3,"692":5,"693":1,"782":1,"1349":1,"1350":2,"1359":6,"1396":75,"1415":2,"1436":1,"1438":2,"1487":1,"1631":6,"1639":4}}],["awareness",{"3":{"27":1,"698":1,"1309":2,"1311":1,"1416":2,"1417":3,"1554":1,"1577":1,"1635":1,"2106":1,"2191":1}}],["aware",{"3":{"0":8,"86":2,"93":1,"94":1,"100":1,"136":1,"160":1,"164":1,"166":1,"265":1,"709":1,"819":1,"883":1,"920":1,"926":3,"1034":1,"1046":1,"1191":1,"1192":2,"1196":1,"1202":1,"1203":1,"1212":2,"1241":1,"1242":2,"1247":1,"1267":1,"1270":11,"1271":1,"1282":1,"1286":18,"1289":2,"1297":1,"1300":5,"1309":1,"1311":3,"1315":1,"1323":4,"1324":8,"1331":1,"1339":3,"1350":6,"1354":1,"1356":1,"1359":6,"1380":3,"1394":1,"1395":6,"1396":8,"1416":1,"1417":3,"1436":1,"1438":4,"1444":1,"1446":1,"1461":1,"1467":2,"1496":2,"1500":2,"1526":2,"1534":2,"1562":1,"1564":1,"1577":1,"1586":1,"1591":3,"1596":1,"1600":2,"1660":2,"1666":1,"1670":1,"1671":1,"1673":1,"1815":1,"1829":1,"1856":2,"1857":1,"1860":1,"1862":1,"1882":1,"1883":1,"2029":1,"2056":1}}],["awaiter",{"3":{"1324":1}}],["awaited",{"3":{"0":2,"235":1,"383":1,"435":1,"436":1,"854":1,"896":1,"897":1,"901":1,"1067":1,"1229":2,"1247":1,"1259":2,"1270":3,"1286":1,"1310":2,"1311":1,"1323":1,"1324":6,"1372":1,"1380":3,"1383":1,"1395":8,"1396":2,"1402":2,"1415":1,"1417":3,"1430":2,"1436":1,"1449":1,"1770":1,"1947":1,"2057":2,"2169":1}}],["awaitable",{"3":{"135":2,"1417":1,"1436":4}}],["awaiting",{"3":{"24":1,"514":1,"707":1,"809":1,"898":1,"1220":1,"1229":2,"1270":1,"1286":3,"1300":2,"1301":3,"1311":1,"1323":2,"1324":6,"1334":1,"1395":1,"1396":3,"1402":3,"1416":1,"1417":4,"1425":1,"1436":2,"1805":1,"1946":1}}],["await",{"2":{"488":1,"494":1,"495":1,"1954":1},"3":{"0":3,"109":1,"481":1,"483":1,"484":1,"486":4,"487":1,"488":1,"489":2,"490":4,"491":5,"492":5,"493":6,"494":6,"495":3,"519":1,"743":1,"996":2,"1101":1,"1212":1,"1220":1,"1229":4,"1247":3,"1259":5,"1263":1,"1270":5,"1274":1,"1286":1,"1300":3,"1301":1,"1309":2,"1311":10,"1312":1,"1323":5,"1324":21,"1328":1,"1339":3,"1359":15,"1369":1,"1380":2,"1383":1,"1395":29,"1396":13,"1400":1,"1402":4,"1415":7,"1417":5,"1425":1,"1427":1,"1436":17,"1438":1,"1805":1,"1946":1,"1954":1,"2136":1,"2179":1,"2234":2}}],["awaits",{"3":{"0":1,"109":1,"230":1,"295":1,"481":1,"482":1,"486":1,"490":1,"491":2,"492":2,"493":1,"494":1,"522":3,"523":4,"524":2,"897":1,"926":1,"988":1,"1100":2,"1212":2,"1220":1,"1229":2,"1246":1,"1247":2,"1259":6,"1263":1,"1270":9,"1286":2,"1300":5,"1301":1,"1309":11,"1310":2,"1311":6,"1323":3,"1324":14,"1339":2,"1359":6,"1369":1,"1378":1,"1380":4,"1391":1,"1395":24,"1396":10,"1399":1,"1402":3,"1415":5,"1416":2,"1417":10,"1427":1,"1436":6,"1805":1,"1836":1,"1919":1,"1946":1,"2057":1}}],["afraid",{"3":{"1853":1}}],["afford",{"3":{"1058":1,"1300":1,"1323":1,"1324":1,"1455":1,"1950":2}}],["affordances",{"3":{"1324":4,"1369":1,"1395":3,"1415":1,"1417":6,"1436":2,"1559":1,"1761":2,"2128":1}}],["affordance",{"3":{"109":1,"413":1,"439":1,"440":1,"681":1,"682":1,"685":1,"1286":1,"1300":1,"1323":1,"1324":9,"1350":1,"1359":2,"1369":1,"1375":1,"1380":3,"1384":1,"1391":1,"1392":1,"1395":14,"1402":2,"1415":1,"1416":1,"1417":32,"1436":6,"1438":1,"1577":1,"1714":1,"1742":1,"1765":1,"1904":1,"2120":1,"2128":1}}],["affordable",{"3":{"0":1,"365":1,"608":1,"627":1,"1286":1,"1311":1,"1359":1,"1396":2,"1436":1}}],["affecting",{"3":{"1455":1,"1481":1,"1531":1,"1534":1,"2057":1}}],["affects",{"3":{"905":2,"1267":1,"1270":1,"1286":3,"1300":1,"1311":1,"1339":2,"1350":1,"1427":1,"1675":1,"1872":1}}],["affect",{"3":{"682":1,"1264":1,"1359":1,"1395":1,"1415":1,"1417":1,"1455":1,"1476":1}}],["affected",{"3":{"185":1,"387":1,"448":1,"990":1,"1021":1,"1249":1,"1259":1,"1270":1,"1286":5,"1324":1,"1339":1,"1395":1,"1401":1,"1402":6,"1436":1,"1496":3,"1631":1,"1638":1,"1735":1,"2197":1}}],["affinity",{"3":{"664":3,"996":1,"1339":1,"1467":2}}],["afternoon",{"3":{"1973":1,"2050":1,"2069":1,"2173":1}}],["aftersimulateddataloss",{"3":{"1707":1}}],["afterthought",{"3":{"528":1,"1090":1,"1324":1,"1359":1,"1396":1,"1415":1,"1417":1,"1937":1,"2143":1,"2162":1}}],["aftercommit",{"2":{"465":1,"466":1},"3":{"459":2,"465":1,"466":2,"1323":6,"1415":1}}],["afterward",{"3":{"159":1,"1259":1,"1286":1,"1323":2,"1359":1,"1402":1,"1966":1}}],["afterwards",{"3":{"0":1,"24":1,"25":1,"122":1,"198":1,"216":1,"360":1,"538":1,"549":1,"689":1,"702":2,"765":1,"954":1,"988":1,"1237":3,"1243":1,"1259":2,"1270":3,"1275":1,"1286":7,"1290":1,"1300":4,"1309":1,"1311":2,"1316":1,"1323":6,"1324":9,"1339":1,"1346":1,"1350":2,"1359":6,"1369":1,"1380":1,"1392":1,"1395":7,"1396":5,"1402":3,"1417":2,"1429":1,"1436":6,"1463":1,"1478":1,"1488":1,"1662":1,"1686":1,"1689":1,"1727":2,"1824":1,"1840":1,"2144":1,"2152":1,"2165":1,"2169":1,"2200":1}}],["after",{"0":{"1610":1,"1744":1,"2121":1},"2":{"1704":1},"3":{"0":22,"16":1,"17":3,"18":2,"20":2,"21":2,"24":1,"25":1,"27":2,"33":1,"68":1,"78":1,"99":1,"112":1,"115":1,"117":1,"119":1,"120":2,"122":1,"124":1,"135":2,"145":1,"157":1,"159":1,"160":1,"175":1,"182":2,"186":2,"188":1,"194":1,"195":2,"196":2,"197":1,"199":1,"201":6,"202":2,"220":1,"225":1,"229":1,"235":1,"248":1,"255":1,"258":1,"265":2,"273":2,"279":2,"284":1,"295":2,"330":1,"341":2,"355":1,"365":1,"371":1,"374":1,"382":1,"383":2,"384":1,"388":1,"391":1,"392":1,"412":1,"413":2,"418":1,"424":1,"433":1,"434":2,"442":1,"444":1,"451":1,"452":2,"459":4,"463":2,"464":2,"465":1,"468":2,"494":1,"499":2,"507":1,"514":1,"517":1,"518":2,"522":1,"524":1,"528":1,"530":1,"536":3,"537":2,"538":2,"539":3,"541":1,"543":1,"547":1,"549":1,"550":2,"556":1,"558":1,"565":1,"566":1,"572":1,"583":1,"584":1,"587":1,"590":1,"595":1,"609":2,"612":1,"624":1,"626":2,"628":1,"638":2,"639":1,"640":1,"649":1,"665":2,"672":2,"674":1,"675":1,"681":1,"682":1,"686":1,"692":1,"693":1,"696":1,"698":2,"703":1,"707":2,"714":1,"715":1,"716":1,"741":3,"748":1,"749":5,"751":2,"753":2,"756":1,"757":3,"758":1,"767":1,"774":1,"781":1,"782":1,"785":1,"791":1,"793":1,"794":1,"812":1,"813":1,"818":1,"821":1,"827":1,"828":1,"844":1,"846":1,"849":1,"857":2,"860":1,"861":2,"865":1,"874":1,"881":3,"889":1,"891":1,"897":2,"900":1,"904":2,"908":2,"909":1,"916":1,"922":1,"924":1,"953":1,"954":2,"956":1,"960":1,"966":1,"988":8,"989":1,"990":1,"991":2,"998":2,"1006":1,"1018":1,"1028":1,"1029":1,"1034":1,"1041":1,"1042":1,"1044":2,"1050":1,"1051":1,"1052":1,"1059":1,"1069":1,"1083":1,"1086":1,"1091":1,"1093":1,"1100":1,"1116":4,"1118":1,"1124":2,"1125":1,"1129":1,"1133":1,"1134":1,"1140":1,"1184":1,"1185":1,"1186":1,"1187":1,"1188":4,"1191":1,"1195":1,"1200":1,"1212":4,"1215":1,"1228":1,"1229":8,"1232":1,"1233":2,"1237":9,"1239":1,"1241":2,"1244":1,"1247":16,"1249":1,"1251":1,"1252":2,"1254":4,"1258":2,"1259":39,"1262":2,"1263":3,"1264":2,"1265":1,"1269":3,"1270":31,"1271":3,"1274":2,"1275":1,"1278":2,"1279":1,"1281":3,"1284":1,"1286":76,"1288":1,"1289":1,"1292":1,"1293":2,"1294":1,"1297":1,"1298":1,"1300":51,"1301":8,"1308":1,"1309":16,"1310":5,"1311":39,"1312":3,"1315":2,"1316":2,"1317":1,"1318":1,"1320":1,"1323":57,"1324":98,"1332":1,"1334":1,"1335":1,"1338":1,"1339":31,"1342":1,"1343":1,"1347":1,"1350":21,"1352":1,"1354":1,"1355":2,"1357":1,"1358":1,"1359":122,"1364":3,"1369":11,"1375":1,"1378":1,"1379":1,"1380":17,"1392":1,"1395":46,"1396":36,"1399":3,"1402":27,"1405":1,"1406":3,"1407":1,"1408":1,"1410":1,"1413":1,"1415":40,"1416":18,"1417":41,"1422":1,"1423":1,"1425":3,"1427":5,"1429":1,"1430":1,"1432":2,"1433":1,"1436":60,"1438":11,"1441":2,"1445":2,"1447":1,"1451":1,"1454":3,"1455":10,"1456":2,"1457":3,"1460":1,"1465":3,"1466":1,"1467":10,"1472":1,"1473":1,"1474":2,"1475":2,"1478":2,"1480":1,"1481":1,"1482":1,"1486":1,"1488":8,"1489":1,"1490":2,"1491":1,"1492":3,"1496":15,"1508":2,"1526":1,"1534":1,"1547":1,"1554":1,"1558":1,"1566":1,"1568":2,"1572":1,"1630":2,"1631":7,"1632":2,"1634":1,"1635":4,"1637":1,"1638":2,"1639":11,"1641":4,"1643":1,"1644":1,"1648":1,"1651":6,"1654":1,"1655":1,"1657":1,"1662":1,"1665":4,"1667":2,"1668":1,"1673":1,"1675":1,"1677":1,"1679":1,"1685":3,"1686":2,"1690":4,"1692":1,"1701":1,"1702":1,"1704":1,"1705":1,"1707":2,"1710":1,"1716":1,"1727":5,"1729":1,"1730":1,"1749":1,"1750":1,"1755":1,"1765":2,"1767":6,"1769":1,"1773":1,"1805":1,"1806":1,"1814":1,"1818":1,"1819":2,"1821":2,"1822":1,"1824":1,"1826":1,"1827":1,"1839":4,"1840":4,"1841":1,"1843":2,"1846":1,"1851":2,"1852":1,"1866":1,"1871":1,"1874":1,"1881":1,"1883":1,"1886":1,"1889":2,"1892":1,"1900":1,"1903":1,"1909":3,"1911":2,"1912":1,"1918":2,"1923":1,"1924":1,"1933":1,"1936":1,"1944":2,"1945":2,"1946":1,"1948":2,"1949":1,"1950":1,"1962":1,"1964":1,"1966":1,"1968":2,"1982":2,"1984":1,"1999":1,"2001":3,"2002":1,"2013":1,"2020":3,"2021":1,"2035":1,"2039":1,"2052":2,"2059":1,"2064":1,"2067":1,"2068":3,"2074":2,"2075":1,"2080":1,"2087":1,"2088":1,"2089":1,"2092":1,"2096":1,"2097":4,"2100":3,"2115":1,"2121":2,"2123":1,"2125":2,"2129":2,"2130":1,"2133":1,"2145":1,"2154":1,"2165":4,"2166":1,"2167":1,"2168":1,"2170":2,"2171":3,"2176":1,"2179":1,"2181":1,"2183":1,"2187":2,"2191":1,"2192":2,"2193":1,"2194":2,"2195":1,"2198":1,"2201":2,"2202":2,"2205":1,"2234":1}}],["avg",{"3":{"1467":1,"1764":1,"1767":1}}],["averse",{"3":{"1237":1}}],["averaged",{"3":{"1350":1,"1467":1}}],["averagerating",{"3":{"1350":1,"1359":1,"1764":1}}],["averages",{"3":{"875":1,"1350":2,"1395":1}}],["average",{"3":{"608":1,"609":1,"1324":1,"1350":3,"1359":1,"1395":2,"1455":1,"1467":4,"1474":2,"1492":1,"1764":1,"1765":2,"2160":1}}],["averaging",{"3":{"608":1,"609":1,"1467":1,"2160":2}}],["av0030",{"3":{"454":1,"1311":1}}],["av0024",{"3":{"448":1,"1311":1,"2133":1}}],["av0011",{"3":{"448":1,"1311":1,"2133":1}}],["avoidance",{"0":{"1328":1},"3":{"1310":1,"1359":2,"1396":2,"1635":1}}],["avoidable",{"3":{"1247":1,"1300":1,"1323":2,"1324":4,"1359":2,"1395":2,"1417":1}}],["avoiding",{"3":{"1041":1,"1309":1,"1311":2,"1339":1,"1359":3,"1395":1,"1396":1,"1402":1,"1417":1,"1436":1,"1441":1,"1447":1,"1453":1,"1630":1,"2185":1}}],["avoids",{"3":{"182":1,"209":1,"226":1,"266":1,"360":1,"508":1,"529":1,"547":1,"666":1,"741":1,"935":1,"1069":1,"1212":1,"1220":1,"1237":5,"1247":1,"1252":1,"1259":3,"1270":7,"1286":4,"1300":4,"1301":2,"1309":1,"1311":4,"1323":1,"1324":8,"1329":1,"1339":5,"1350":5,"1359":15,"1369":1,"1395":6,"1396":3,"1402":6,"1415":3,"1416":1,"1417":7,"1427":1,"1436":5,"1443":2,"1450":1,"1454":1,"1488":1,"1490":1,"1492":1,"1526":2,"1639":2,"1677":1,"1684":1,"1805":1,"2010":1}}],["avoid",{"3":{"3":1,"11":1,"55":1,"151":1,"272":1,"381":1,"415":1,"458":1,"460":1,"549":1,"556":1,"558":1,"559":1,"592":1,"792":1,"848":1,"924":1,"1005":1,"1229":1,"1244":1,"1247":3,"1248":1,"1270":2,"1286":9,"1300":8,"1307":1,"1309":1,"1311":1,"1323":1,"1324":2,"1339":1,"1350":1,"1359":2,"1380":1,"1396":3,"1402":6,"1415":1,"1416":1,"1417":1,"1427":1,"1456":1,"1467":1,"1476":1,"1526":1,"1556":1,"1560":1,"1565":1,"1611":1,"1639":2,"1640":1,"1761":1,"1792":1,"1864":1,"1954":1,"1958":1,"1959":1,"1981":1,"1989":1,"2014":1,"2036":1,"2051":1}}],["avoided",{"3":{"0":1,"472":1,"549":1,"691":1,"800":2,"941":1,"1237":2,"1270":1,"1286":1,"1324":3,"1359":1,"1369":1,"1395":1,"1396":2,"1402":1,"1416":1,"1417":1,"1815":1}}],["avaluethatisnotafixedpluralsentence",{"3":{"1436":2}}],["avatarblobname",{"3":{"1415":1}}],["avatarurl",{"2":{"2064":1},"3":{"1237":2,"1415":15,"1631":1,"2064":1}}],["avatar",{"2":{"1411":1},"3":{"0":3,"403":1,"438":3,"439":1,"440":3,"441":2,"443":2,"444":3,"459":1,"465":1,"466":2,"599":1,"665":1,"666":1,"725":1,"926":3,"1114":1,"1115":2,"1118":1,"1120":1,"1192":1,"1265":1,"1270":3,"1286":7,"1323":6,"1395":2,"1403":1,"1405":1,"1406":1,"1410":1,"1411":4,"1414":2,"1415":76,"1417":10,"1436":2,"1438":1,"1467":7,"1472":1,"1474":1,"1481":3,"1491":1,"1496":2,"1631":4,"1640":4,"1748":1,"2064":1,"2118":1,"2126":2,"2127":1,"2128":7,"2129":7,"2130":2}}],["avatarsize",{"3":{"1415":2}}],["avatars",{"0":{"1411":1},"1":{"437":1,"438":1,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1},"3":{"0":2,"437":1,"440":2,"441":1,"443":3,"598":1,"665":1,"1116":2,"1118":1,"1212":1,"1286":2,"1318":1,"1395":2,"1415":2,"1417":3,"1467":7,"1496":2,"1631":2,"1636":1,"1640":1,"1765":1,"2128":5,"2129":3,"2130":1,"2234":2}}],["availability",{"3":{"0":3,"92":1,"236":2,"237":1,"283":1,"353":1,"402":1,"461":1,"530":1,"607":1,"609":6,"611":2,"681":1,"768":1,"793":1,"798":1,"914":1,"1187":1,"1300":2,"1324":5,"1332":1,"1334":1,"1339":6,"1395":1,"1402":1,"1416":2,"1417":5,"1436":1,"1443":1,"1447":2,"1455":1,"1467":13,"1469":1,"1474":2,"1476":1,"1630":1,"1639":1,"1672":1,"1677":1,"1707":1,"1708":1,"1709":1,"1776":1,"1911":1,"2002":1,"2011":1,"2069":1,"2124":1,"2160":1}}],["availabledestinationspolicy",{"3":{"1339":1}}],["available=false",{"3":{"1323":1}}],["availablequantity",{"2":{"1591":1,"1749":1},"3":{"1286":1,"1591":1,"1749":1,"1764":2}}],["available",{"2":{"727":1,"1299":1,"2069":1},"3":{"0":4,"7":1,"62":1,"111":1,"137":1,"159":1,"265":2,"280":1,"300":3,"303":1,"306":2,"361":1,"506":1,"527":1,"528":2,"537":1,"549":1,"556":1,"681":1,"691":1,"706":1,"725":3,"727":1,"741":1,"800":1,"818":1,"827":1,"840":2,"853":1,"914":1,"972":1,"1074":1,"1116":1,"1187":1,"1212":1,"1229":3,"1237":1,"1271":1,"1286":10,"1299":1,"1300":11,"1301":5,"1309":3,"1311":6,"1316":1,"1322":1,"1323":7,"1324":15,"1327":1,"1339":3,"1350":2,"1359":4,"1369":3,"1380":1,"1392":1,"1395":5,"1396":10,"1410":1,"1415":5,"1417":15,"1427":1,"1436":5,"1440":1,"1441":1,"1456":1,"1459":1,"1467":1,"1474":1,"1480":1,"1486":1,"1488":1,"1490":1,"1570":1,"1575":1,"1577":2,"1626":1,"1630":4,"1631":4,"1632":1,"1639":3,"1640":1,"1662":1,"1764":1,"1765":1,"1767":2,"1769":4,"1776":2,"1799":1,"1854":1,"1905":1,"1912":1,"1916":1,"2069":1,"2139":2,"2145":1,"2236":1}}],["azd",{"0":{"1464":1},"3":{"1464":8}}],["az",{"3":{"0":2,"563":1,"757":2,"759":1,"764":1,"766":3,"767":1,"768":2,"1116":1,"1119":1,"1212":1,"1441":1,"1445":1,"1455":2,"1465":2,"1467":5,"1470":1,"1472":5,"1473":1,"1474":7,"1475":6,"1476":1,"1478":5,"1481":2,"1482":1,"1484":2,"1577":2,"1582":1,"1583":1,"2035":3,"2037":1,"2226":4}}],["azurite",{"3":{"0":1,"440":1,"1323":3,"2128":1}}],["azuremessaging",{"3":{"1585":1}}],["azuremonitor",{"2":{"914":1},"3":{"914":1,"1438":1,"1443":1,"1446":1,"1467":3}}],["azureadtokenexchange",{"3":{"1472":1}}],["azureadonlyauthentication",{"2":{"599":1,"1477":1,"1534":1},"3":{"0":1,"599":1,"1467":1,"1477":1,"1526":2,"1534":1}}],["azurecontainerapps",{"3":{"1436":2}}],["azurecosmosdbdatabaseresource",{"2":{"1441":1},"3":{"1339":1,"1441":1}}],["azureclientidenv",{"2":{"603":1},"3":{"603":1}}],["azurekeyvaultconfigurationoptions",{"3":{"1339":2}}],["azurenotificationhubnativepushsender",{"2":{"1313":1,"1320":1,"1932":1,"1936":1},"3":{"1199":2,"1203":1,"1207":2,"1286":1,"1313":1,"1320":1,"1323":10,"1496":2,"1932":1,"1936":1}}],["azurenotificationhubdeviceregistrartests",{"3":{"1199":1,"1207":2,"1323":1,"1438":1}}],["azurenotificationhubdeviceregistrar",{"2":{"1313":1,"1320":1,"1932":1,"1936":1},"3":{"435":1,"1199":3,"1203":1,"1207":2,"1286":1,"1313":1,"1320":1,"1323":17,"1438":1,"1932":1,"1936":1}}],["azureservicebus",{"2":{"1842":1},"3":{"640":1,"1320":1,"1323":1,"1446":1,"1467":2,"1842":1}}],["azureservicebustransport",{"2":{"150":1},"3":{"150":1}}],["azureblobfilestorageservice",{"2":{"443":1,"1119":1,"1313":1,"1320":1,"2128":1},"3":{"443":2,"1116":2,"1119":2,"1199":2,"1203":1,"1207":2,"1286":2,"1313":1,"1320":1,"1323":13,"1496":1,"2128":2}}],["azure",{"0":{"1464":1,"1472":2},"1":{"1462":1,"1463":1,"1464":1,"1465":1,"1466":1,"1467":1,"1468":1,"1469":1,"1470":1,"2156":1,"2157":1,"2158":1,"2159":1,"2160":1,"2161":1,"2162":1},"2":{"145":1,"147":1,"149":1,"150":1,"152":1,"599":1,"601":1,"603":1,"665":1,"667":1,"669":1,"766":1,"810":1,"1074":1,"1075":2,"1077":1,"1078":1,"1339":2,"1462":1,"1463":1,"1464":1,"1468":3,"1470":2,"1472":2,"1475":1,"1477":1,"2180":1},"3":{"0":15,"31":1,"47":1,"59":1,"61":1,"62":1,"91":1,"97":1,"98":1,"145":4,"147":2,"149":1,"150":3,"152":1,"159":1,"175":1,"201":1,"234":2,"245":1,"259":1,"291":1,"359":1,"390":1,"395":1,"397":2,"401":1,"402":1,"422":1,"434":2,"439":1,"440":1,"517":1,"599":4,"601":1,"603":1,"609":1,"611":2,"624":1,"625":1,"626":2,"627":1,"638":1,"639":1,"640":5,"641":2,"642":1,"665":9,"666":2,"667":2,"669":1,"756":2,"757":1,"765":1,"766":2,"768":2,"790":1,"810":2,"818":1,"819":1,"821":1,"823":1,"826":1,"827":1,"838":1,"868":1,"913":1,"914":1,"972":3,"973":1,"974":2,"975":1,"976":1,"1020":1,"1033":1,"1043":1,"1068":1,"1074":1,"1075":4,"1077":1,"1078":1,"1091":1,"1101":1,"1192":1,"1202":1,"1203":1,"1211":1,"1212":6,"1213":5,"1257":1,"1259":3,"1285":1,"1286":5,"1302":1,"1309":1,"1311":4,"1313":1,"1318":1,"1320":1,"1323":33,"1325":1,"1327":1,"1332":1,"1333":4,"1335":4,"1336":1,"1339":48,"1359":1,"1369":1,"1379":1,"1415":1,"1436":13,"1437":1,"1438":4,"1440":1,"1441":4,"1442":8,"1443":7,"1444":2,"1446":8,"1447":2,"1450":2,"1451":1,"1455":20,"1457":3,"1458":2,"1460":6,"1461":1,"1462":4,"1463":3,"1464":10,"1465":5,"1467":38,"1468":3,"1470":3,"1471":2,"1472":29,"1473":3,"1474":6,"1475":12,"1476":2,"1477":1,"1482":1,"1483":3,"1484":3,"1487":1,"1488":1,"1489":2,"1490":1,"1496":1,"1526":2,"1534":1,"1570":1,"1575":1,"1577":3,"1582":1,"1585":1,"1589":1,"1591":1,"1596":1,"1597":1,"1663":2,"1665":1,"1668":2,"1669":1,"1670":3,"1673":1,"1677":1,"1679":1,"1707":2,"1721":1,"1752":1,"1779":1,"1785":1,"1790":1,"1792":1,"1842":2,"1843":1,"1845":1,"1936":2,"1970":2,"2007":1,"2009":2,"2011":3,"2012":1,"2014":2,"2015":1,"2021":1,"2022":1,"2026":3,"2034":1,"2035":2,"2047":1,"2111":1,"2112":1,"2115":1,"2125":1,"2126":1,"2128":1,"2130":1,"2144":1,"2155":2,"2156":3,"2158":2,"2159":1,"2160":3,"2162":3,"2171":1,"2180":1,"2211":1,"2214":1,"2215":2,"2216":1,"2217":1,"2219":1,"2220":1,"2221":2,"2222":4,"2223":2,"2226":6,"2230":1,"2231":1,"2234":5,"2241":1,"2242":1,"2243":2,"2245":1,"2246":1}}],["a+aa",{"3":{"0":1}}],["aab",{"3":{"1481":1}}],["aad",{"2":{"1470":2,"1477":2},"3":{"1455":2,"1470":2,"1472":1,"1477":6,"1591":1}}],["aadsts700213",{"3":{"1455":1,"1467":1}}],["aasa",{"3":{"1212":1,"1481":1}}],["aa8297fb",{"3":{"1174":1}}],["aaaaaaaab9e=",{"3":{"1300":1,"1395":1}}],["aaa",{"3":{"620":1,"1714":1}}],["aa",{"0":{"1643":1},"1":{"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1},"3":{"0":1,"615":1,"617":1,"618":3,"619":1,"651":1,"865":1,"906":1,"953":1,"1212":1,"1213":1,"1324":7,"1396":1,"1414":1,"1433":2,"1436":4,"1438":2,"1461":1,"1487":1,"1488":4,"1490":1,"1494":1,"1526":1,"1531":1,"1535":1,"1558":2,"1577":8,"1591":2,"1596":1,"1605":1,"1642":1,"1644":1,"1645":1,"1669":1,"1671":1,"1674":1,"1714":1,"1716":1,"1739":1,"2056":1,"2058":4,"2061":1,"2077":1,"2081":2,"2215":1,"2223":1,"2234":1}}],["aieval",{"3":{"1492":1}}],["aiapikey",{"3":{"1455":1,"1466":1,"1467":3,"1470":1}}],["aitool",{"3":{"1427":5}}],["aitelemetryexporttests",{"3":{"1199":1,"1207":2,"1435":3}}],["aitelemetryname",{"2":{"408":1},"3":{"408":1,"1333":1,"1339":4}}],["aireadydotnet",{"3":{"1395":1}}],["airtight",{"3":{"1221":1,"1292":1,"1359":1}}],["aijsonutilities",{"2":{"1091":1,"1427":1},"3":{"1091":1,"1427":2}}],["aiproviderselectiontests",{"3":{"1199":1,"1207":3,"1427":1,"1487":1}}],["aiprovider",{"3":{"1089":1,"1094":1,"1427":1,"1496":2}}],["aiprovidervalidator",{"2":{"676":1,"2174":1},"3":{"676":2,"677":1,"1091":4,"1093":1,"1199":2,"1203":1,"1207":2,"1420":2,"1421":1,"1427":22,"2174":2,"2181":1}}],["aiservicecollectionextensions",{"2":{"1427":1},"3":{"1199":1,"1203":1,"1207":1,"1421":1,"1427":12,"1496":2}}],["aiservicecollectionextensionstests",{"3":{"1199":1,"1207":2,"1427":1,"1487":1}}],["aisettingstests",{"3":{"1199":1,"1207":2,"1487":1}}],["aisettings",{"2":{"1095":1,"1096":1,"1419":1,"2175":1},"3":{"674":1,"676":3,"1091":5,"1095":2,"1096":1,"1199":15,"1203":1,"1207":2,"1419":8,"1420":1,"1427":46,"1496":3,"1526":2,"1577":1,"1585":1,"2175":2,"2177":1}}],["aiscoring",{"3":{"1359":1}}],["aiscoringservice",{"3":{"1350":2,"1359":1}}],["aiscoringtokenceiling",{"2":{"609":1,"1469":1},"3":{"609":1,"1018":1,"1467":3,"1469":1}}],["aiscorelookup",{"3":{"1395":4}}],["aiscores",{"3":{"1350":3,"1395":4}}],["aiscoreresponse",{"3":{"1018":1,"1021":1,"1199":3,"1203":1,"1207":2,"1366":5,"1369":10,"1526":2}}],["aids",{"3":{"1630":1}}],["aidependencyisolationtests",{"3":{"1199":2,"1207":4,"1427":3,"1436":13,"1526":2,"1577":2}}],["aidependencyisolationtestsbase",{"2":{"1091":1,"1096":1,"1435":1,"2180":1,"2182":1},"3":{"0":1,"1091":2,"1096":1,"1199":3,"1207":2,"1339":1,"1431":3,"1435":1,"1436":9,"2180":2,"2182":1}}],["aid",{"3":{"265":1,"1109":1,"1110":1,"1864":1}}],["aiming",{"3":{"1474":1}}],["aimed",{"0":{"2047":1},"3":{"997":1,"1093":1,"1369":2,"1396":1,"1424":1,"1436":1,"1450":1,"1467":1,"2045":1,"2164":1}}],["aim",{"3":{"91":1,"1134":1,"1981":1,"2049":1}}],["aiusagemeter",{"2":{"408":1,"2182":1},"3":{"0":1,"404":1,"408":3,"1089":1,"1091":2,"1199":7,"1203":1,"1207":2,"1418":1,"1425":3,"1427":26,"1442":1,"1496":3,"1526":1,"1577":1,"2179":3,"2182":1}}],["ai",{"0":{"408":1,"1347":1,"1359":1,"1366":1,"1435":1,"1553":1},"1":{"1015":1,"1016":1,"1017":1,"1018":1,"1019":1,"1020":1,"1021":1,"1022":1,"1088":1,"1089":1,"1090":1,"1091":1,"1092":1,"1093":1,"1094":1,"1095":1,"1096":1,"1418":1,"1419":1,"1420":1,"1421":1,"1422":1,"1423":1,"1424":1,"1425":1,"1426":1,"1427":1},"2":{"141":1,"142":3,"395":1,"404":1,"406":1,"408":1,"1012":1,"1016":1,"1017":1,"1020":1,"1089":4,"1090":2,"1091":2,"1093":1,"1211":2,"1213":3,"1366":1,"1418":4,"1425":5,"1427":3,"1503":4,"1527":1,"1578":1,"1781":3,"2007":1,"2174":3,"2178":1,"2179":6,"2180":3,"2182":2},"3":{"0":22,"74":4,"135":1,"141":1,"142":4,"395":3,"404":3,"406":1,"408":5,"517":1,"607":3,"609":8,"624":2,"626":3,"672":1,"674":2,"676":5,"755":1,"756":2,"764":1,"766":1,"980":7,"983":2,"994":1,"995":1,"996":1,"1011":1,"1012":5,"1013":1,"1015":1,"1016":3,"1017":7,"1018":16,"1019":1,"1020":2,"1021":1,"1022":1,"1088":1,"1089":12,"1090":6,"1091":46,"1092":1,"1093":6,"1094":3,"1095":1,"1096":1,"1099":1,"1108":2,"1111":1,"1112":1,"1192":3,"1195":1,"1198":2,"1199":69,"1202":3,"1203":36,"1206":5,"1207":208,"1208":8,"1211":6,"1212":4,"1213":5,"1216":1,"1270":3,"1286":1,"1333":5,"1339":9,"1340":1,"1342":1,"1347":2,"1350":14,"1351":1,"1354":1,"1359":29,"1360":3,"1362":1,"1364":3,"1365":1,"1366":11,"1367":1,"1368":5,"1369":26,"1376":1,"1380":1,"1390":2,"1395":18,"1417":1,"1418":7,"1419":5,"1420":6,"1421":3,"1422":5,"1423":5,"1424":6,"1425":13,"1426":1,"1427":177,"1428":2,"1431":3,"1435":11,"1436":18,"1437":9,"1438":5,"1442":6,"1455":14,"1459":1,"1461":2,"1463":4,"1466":3,"1467":22,"1469":2,"1470":1,"1485":1,"1486":8,"1487":7,"1488":1,"1489":1,"1492":9,"1493":1,"1496":26,"1499":1,"1503":5,"1505":1,"1517":1,"1519":1,"1526":26,"1527":4,"1534":1,"1535":1,"1536":1,"1553":2,"1570":1,"1577":10,"1578":3,"1585":2,"1586":2,"1591":1,"1592":1,"1599":1,"1625":1,"1632":2,"1640":1,"1673":1,"1781":7,"1784":1,"1796":1,"1799":1,"1898":1,"1947":1,"2007":4,"2013":1,"2014":1,"2047":1,"2056":2,"2113":4,"2138":1,"2158":1,"2160":3,"2162":1,"2172":1,"2173":1,"2174":10,"2175":2,"2176":4,"2177":1,"2178":2,"2179":6,"2180":3,"2181":8,"2182":5,"2192":1,"2215":3,"2216":1,"2218":1,"2220":2,"2221":1,"2222":4,"2223":2,"2226":4,"2227":1,"2229":5,"2230":1,"2234":3,"2240":1,"2241":6,"2242":2,"2245":1}}],["aesthetic",{"3":{"839":1}}],["aesgcm",{"2":{"359":1,"360":1,"2144":2},"3":{"359":3,"360":1,"1286":2,"2144":4}}],["aes",{"1":{"356":1,"357":1,"358":1,"359":1,"360":1,"361":1,"362":1,"363":1,"364":1,"365":1,"366":1,"2142":1,"2143":1,"2144":1,"2145":1,"2146":1,"2147":1,"2148":1},"3":{"0":3,"39":1,"356":1,"359":2,"360":1,"361":2,"365":1,"1212":1,"1236":1,"1237":1,"1284":2,"1286":3,"1575":1,"1577":2,"1664":1,"1672":1,"1903":1,"1905":2,"2064":1,"2141":1,"2142":2,"2144":2,"2145":1,"2147":1,"2148":2,"2155":1,"2210":1,"2234":1}}],["axecore",{"2":{"1453":1},"3":{"1213":1,"1436":2,"1488":1}}],["axerunoptions",{"2":{"618":1},"3":{"618":1,"1436":2}}],["axe",{"0":{"1643":1},"3":{"0":2,"617":2,"618":3,"620":3,"1212":1,"1213":1,"1324":1,"1414":1,"1415":1,"1433":2,"1434":3,"1436":14,"1438":5,"1461":1,"1486":1,"1487":1,"1488":5,"1490":1,"1492":2,"1524":1,"1526":6,"1531":3,"1532":1,"1535":2,"1558":1,"1565":1,"1577":11,"1585":1,"1586":1,"1589":2,"1591":3,"1596":5,"1600":2,"1605":2,"1608":1,"1642":1,"1643":2,"1644":1,"1645":2,"1660":1,"1669":1,"1671":1,"1674":1,"1716":1,"1739":2,"1742":1,"2056":1,"2058":4,"2061":1,"2081":2,"2215":1,"2223":1,"2234":1}}],["axeoptions",{"2":{"618":2,"1488":1,"2058":1},"3":{"0":1,"618":5,"620":2,"1199":17,"1207":2,"1212":1,"1428":1,"1433":6,"1436":18,"1488":7,"1493":1,"1577":1,"1591":2,"2058":2}}],["axes",{"0":{"1191":1,"1517":1,"1784":1,"1797":1,"1799":1,"1855":1},"3":{"0":1,"635":1,"697":1,"776":1,"1191":1,"1200":1,"1216":1,"1286":3,"1323":2,"1447":1,"1467":1,"1516":1,"1517":1,"1529":2,"1537":2,"1577":1,"1580":1,"1592":1,"1594":1,"1661":1,"1684":1,"1686":1,"1699":1,"1731":1,"1784":2,"1794":2,"1797":1,"1799":1,"1801":1,"1802":1,"1855":1,"2233":1}}],["axis",{"0":{"1851":1,"2233":1},"3":{"0":5,"45":2,"81":1,"164":2,"165":2,"166":2,"169":2,"317":1,"318":1,"447":3,"455":1,"582":1,"587":1,"633":1,"683":1,"697":1,"701":2,"721":1,"729":1,"743":1,"774":1,"775":1,"924":1,"1034":2,"1038":1,"1079":1,"1087":1,"1191":2,"1192":2,"1200":1,"1219":1,"1229":1,"1286":10,"1300":2,"1310":1,"1323":1,"1324":1,"1339":1,"1396":3,"1427":1,"1436":5,"1452":1,"1489":1,"1505":1,"1523":2,"1526":3,"1529":1,"1537":1,"1568":1,"1574":2,"1575":1,"1577":4,"1578":1,"1580":1,"1584":1,"1588":2,"1591":3,"1592":5,"1594":1,"1683":4,"1684":1,"1687":1,"1701":1,"1727":8,"1728":1,"1729":1,"1731":1,"1784":1,"1798":2,"1802":1,"1805":1,"1851":2,"1853":2,"1855":4,"1860":1,"1902":1,"1903":1,"1992":1,"1993":1,"1994":1,"1996":1,"1997":1,"1998":2,"2063":2,"2071":2,"2091":1,"2116":2,"2132":4,"2134":1,"2135":3,"2234":1}}],["augments",{"3":{"1339":1}}],["augment",{"3":{"1286":1}}],["augmented",{"3":{"1229":1,"2222":1}}],["august",{"3":{"804":1,"1049":1,"1051":1,"1054":1,"1074":1,"1467":1,"1474":1,"2222":1}}],["audible",{"3":{"1259":1}}],["audio",{"3":{"426":1,"1417":1}}],["audiences",{"3":{"227":1,"1309":1,"1348":1,"1380":1,"1395":4,"1396":2,"1402":1,"1935":1}}],["audience",{"3":{"0":2,"31":1,"86":2,"225":1,"226":1,"227":1,"303":1,"325":1,"378":1,"384":1,"386":4,"388":3,"391":2,"392":1,"434":1,"435":1,"499":2,"674":1,"820":1,"1124":1,"1202":1,"1203":1,"1300":4,"1307":1,"1309":11,"1311":6,"1323":4,"1324":10,"1348":1,"1350":7,"1359":4,"1372":2,"1373":1,"1379":1,"1380":28,"1391":1,"1393":1,"1395":36,"1396":2,"1397":1,"1399":1,"1402":2,"1406":3,"1415":13,"1416":1,"1436":3,"1438":2,"1472":1,"1488":2,"1496":2,"1576":1,"1630":1,"1637":1,"1922":3,"1933":1,"1940":1,"1982":2,"1985":1,"2013":1,"2138":1,"2140":1}}],["auditor",{"3":{"1844":1}}],["audit+coverage",{"3":{"1577":1}}],["audit+sbom+licence",{"3":{"1526":1}}],["auditactionsandgroups",{"3":{"1467":1}}],["auditableaggregaterootentity<",{"3":{"1286":1,"1369":1}}],["auditableaggregaterootentitytests",{"3":{"1199":1,"1207":4,"1237":1}}],["auditableaggregaterootentityadditionaltests",{"2":{"1237":1},"3":{"1199":1,"1207":7,"1237":3}}],["auditableaggregaterootentity",{"2":{"39":1,"43":1,"459":1,"470":1,"725":1,"1168":1,"1230":1,"1231":1,"1251":1,"1340":1,"1342":1,"1398":1,"1403":1,"1651":1,"1662":1,"1810":1,"1812":1,"1838":1,"2092":1,"2093":1,"2113":1},"3":{"0":1,"39":2,"43":2,"459":1,"470":2,"725":1,"1168":4,"1199":114,"1203":1,"1207":2,"1212":1,"1230":1,"1231":9,"1237":24,"1251":1,"1259":1,"1270":8,"1286":12,"1300":5,"1309":3,"1311":4,"1323":12,"1340":1,"1342":1,"1350":21,"1359":6,"1369":1,"1396":6,"1398":1,"1402":5,"1403":1,"1415":2,"1436":23,"1438":1,"1496":3,"1577":2,"1586":1,"1651":1,"1662":1,"1810":2,"1812":1,"1838":1,"2092":2,"2093":1,"2113":1}}],["auditablebaseentity<",{"3":{"1237":1}}],["auditablebaseentitytests",{"3":{"1199":1,"1207":3,"1237":1}}],["auditablebaseentityadditionaltests",{"3":{"1199":1,"1207":3,"1237":1}}],["auditablebaseentity",{"2":{"38":1,"346":1,"458":1,"470":1,"714":1,"1035":1,"1140":1,"1168":1,"1230":1,"1231":1,"1232":1,"1291":1,"1342":1,"1812":1,"1871":1,"1953":1,"2062":1,"2092":1},"3":{"0":1,"38":1,"39":3,"341":2,"346":1,"458":1,"470":2,"536":1,"714":1,"1035":1,"1140":2,"1168":2,"1199":152,"1203":1,"1207":2,"1212":1,"1230":1,"1231":9,"1232":1,"1237":34,"1239":1,"1247":11,"1270":3,"1286":30,"1291":1,"1300":2,"1310":4,"1311":6,"1323":3,"1342":1,"1350":15,"1359":2,"1402":2,"1415":1,"1436":18,"1438":1,"1577":1,"1651":2,"1662":1,"1810":1,"1812":1,"1815":1,"1871":1,"1953":1,"2062":1,"2092":1,"2166":1}}],["auditable",{"3":{"0":2,"41":1,"230":1,"341":4,"343":1,"345":1,"370":1,"470":1,"536":2,"628":1,"675":1,"715":1,"862":1,"1034":1,"1084":1,"1150":1,"1237":4,"1270":4,"1286":4,"1300":1,"1301":1,"1317":1,"1323":1,"1324":1,"1350":2,"1358":1,"1359":5,"1363":1,"1369":1,"1396":4,"1402":1,"1415":1,"1436":7,"1567":1,"1569":1,"1577":1,"1630":1,"1631":1,"1664":1,"1872":1,"1875":1,"1876":1,"1877":1,"1898":1,"2166":2,"2188":1}}],["auditevent",{"3":{"1465":1,"1467":1}}],["auditedthing",{"3":{"1199":4,"1207":1}}],["audited",{"3":{"230":1,"373":1,"441":1,"667":1,"713":1,"715":2,"716":1,"717":2,"1083":1,"1214":1,"1281":1,"1286":5,"1300":1,"1396":1,"1415":2,"1446":1,"1453":1,"1467":2,"1489":2,"1552":1,"1563":1,"1572":1,"1738":1,"1764":1,"1839":1,"1971":1,"2129":1}}],["audittrailtableenabled",{"3":{"1286":1}}],["audittrailtestharness",{"3":{"1199":4,"1207":10}}],["audittrailtestcontext",{"3":{"1198":1,"1199":5,"1207":1}}],["audittrailreadertests",{"3":{"1199":1,"1207":2,"1286":1,"1438":1}}],["audittrailreader",{"2":{"1277":1},"3":{"1199":4,"1203":1,"1207":2,"1269":1,"1270":6,"1277":2,"1286":21,"1317":1,"1323":3,"1438":1}}],["audittrailmodelgatetests",{"3":{"1191":1,"1199":1,"1207":4,"1286":4,"1496":1}}],["audittraildatabases",{"3":{"1436":2}}],["audittraildatabasenames",{"2":{"719":1},"3":{"719":1,"1436":2,"1467":1}}],["audittraildmlauditing",{"2":{"719":1},"3":{"719":1,"1467":1}}],["audittraildiagnostics",{"2":{"719":1},"3":{"719":1,"1467":1}}],["audittrailentrydtotests",{"3":{"1199":1,"1207":2}}],["audittrailentrydto",{"3":{"1199":4,"1203":1,"1207":2,"1270":1,"1286":3,"1317":1,"1323":4}}],["audittrailentry",{"2":{"720":1,"1232":1,"1277":1,"1839":1},"3":{"715":2,"720":1,"905":1,"1199":12,"1203":1,"1207":2,"1232":1,"1237":1,"1270":1,"1273":1,"1277":2,"1286":22,"1290":1,"1300":1,"1311":1,"1323":1,"1496":1,"1839":2}}],["audittrailentries",{"2":{"715":2,"719":1,"720":1,"1273":2,"1277":1,"1446":1,"1469":1,"1839":1},"3":{"0":3,"715":3,"719":3,"720":1,"1212":2,"1273":2,"1277":1,"1286":8,"1436":4,"1446":1,"1467":3,"1469":1,"1839":1}}],["audittrailsavechangesinterceptortests",{"3":{"1199":1,"1207":2,"1237":2,"1286":1,"1438":2}}],["audittrailsavechangesinterceptor",{"2":{"715":1,"1232":1,"1236":1,"1269":1,"1277":1,"1317":1,"1839":1},"3":{"715":2,"720":3,"1198":1,"1199":8,"1203":1,"1207":4,"1232":1,"1236":2,"1237":11,"1269":1,"1277":3,"1286":40,"1317":1,"1323":2,"1496":2,"1577":1,"1839":1}}],["audittrailsettings",{"2":{"721":1,"1272":1,"1277":1},"3":{"674":1,"715":1,"720":1,"721":1,"1199":11,"1203":1,"1207":2,"1237":5,"1272":1,"1277":2,"1286":20,"1317":1,"1320":4,"1323":2,"1577":1}}],["audittrailcleanupjobtests",{"3":{"1199":1,"1207":2,"1286":2,"1438":2}}],["audittrailcleanupjob",{"2":{"720":1,"1277":1,"1839":1},"3":{"707":1,"715":2,"720":1,"1082":1,"1086":1,"1199":4,"1203":1,"1207":2,"1270":3,"1277":2,"1286":32,"1323":2,"1436":3,"1442":3,"1839":1}}],["audittrail",{"2":{"1286":1},"3":{"170":1,"713":1,"715":3,"720":3,"1082":1,"1191":1,"1203":7,"1207":46,"1232":1,"1236":1,"1237":6,"1270":5,"1273":1,"1277":6,"1286":31,"1311":1,"1320":1,"1323":4,"1438":3,"1442":1,"1487":1,"1496":2,"1585":1,"1839":2}}],["audit=all",{"3":{"147":1,"1576":1,"1577":2,"1586":1}}],["auditsources",{"2":{"1649":1},"3":{"1526":1,"1591":1,"1649":1}}],["auditstampfidelitytests",{"3":{"1199":1,"1207":2}}],["audits",{"3":{"130":1,"139":1,"1459":1,"1467":1,"1531":1}}],["auditsavechangesinterceptortests",{"3":{"1199":1,"1207":6,"1286":2,"1436":1}}],["auditsavechangesinterceptor",{"2":{"39":1,"43":1,"343":1,"714":1,"715":1,"1201":1,"1231":1,"1274":1,"1872":1},"3":{"39":3,"43":1,"343":2,"345":1,"714":1,"715":2,"1082":1,"1086":1,"1175":1,"1198":1,"1199":55,"1201":1,"1203":1,"1207":2,"1231":4,"1237":5,"1274":2,"1286":14,"1323":1,"1436":3,"1498":1,"1577":1,"1810":1,"1872":1}}],["auditingsettings",{"3":{"1436":1,"1467":1}}],["auditing",{"3":{"0":3,"395":1,"403":1,"642":1,"713":2,"714":1,"718":2,"719":3,"720":1,"1203":1,"1207":4,"1286":1,"1323":2,"1350":1,"1359":1,"1396":1,"1436":2,"1467":6,"1469":1,"1496":1,"1569":1,"1591":1,"1978":1}}],["audit",{"0":{"1277":1,"1459":1,"1501":1},"1":{"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1,"712":1,"713":1,"714":1,"715":1,"716":1,"717":1,"718":1,"719":1,"720":1,"721":1,"1495":1,"1496":1,"1497":1,"1498":1,"1499":1,"1500":1,"1501":1},"3":{"0":8,"26":1,"38":1,"39":4,"40":3,"137":1,"139":1,"140":1,"159":1,"166":1,"170":1,"188":1,"195":1,"197":1,"200":1,"225":2,"230":1,"245":2,"249":1,"265":1,"283":1,"302":1,"304":1,"318":2,"320":1,"322":1,"336":1,"337":1,"341":2,"346":1,"352":1,"361":1,"367":1,"368":1,"369":1,"370":4,"371":5,"372":4,"373":1,"374":3,"375":3,"390":1,"403":1,"423":1,"424":1,"425":1,"426":1,"428":1,"430":1,"434":1,"450":1,"458":1,"461":1,"470":1,"486":1,"530":2,"531":2,"532":1,"545":1,"573":1,"574":1,"590":1,"591":1,"600":1,"601":1,"611":1,"625":1,"667":1,"692":1,"696":1,"698":2,"711":1,"712":1,"715":3,"716":4,"717":1,"718":1,"719":1,"727":1,"737":1,"782":1,"785":1,"820":1,"825":1,"829":1,"874":1,"905":1,"1006":1,"1033":1,"1034":3,"1041":1,"1082":2,"1083":1,"1085":2,"1086":1,"1140":2,"1141":1,"1142":1,"1145":2,"1163":1,"1168":2,"1174":1,"1192":3,"1194":1,"1201":3,"1202":1,"1203":1,"1212":9,"1213":1,"1216":1,"1230":2,"1231":3,"1236":2,"1237":22,"1239":2,"1241":1,"1247":6,"1253":2,"1259":6,"1270":2,"1272":1,"1273":2,"1274":2,"1275":3,"1276":1,"1278":1,"1280":1,"1281":1,"1284":1,"1286":61,"1290":1,"1300":13,"1303":1,"1304":4,"1306":1,"1309":11,"1311":4,"1322":1,"1323":12,"1342":2,"1350":9,"1359":11,"1361":1,"1363":1,"1369":4,"1379":1,"1380":3,"1395":1,"1396":21,"1402":2,"1405":1,"1410":2,"1412":1,"1415":15,"1423":1,"1427":1,"1433":1,"1436":28,"1438":5,"1446":2,"1452":1,"1453":7,"1454":3,"1455":2,"1459":20,"1460":2,"1461":4,"1465":6,"1467":10,"1495":2,"1496":13,"1512":1,"1525":1,"1526":13,"1531":5,"1532":1,"1534":1,"1535":2,"1545":2,"1548":2,"1554":1,"1567":2,"1569":2,"1577":11,"1582":2,"1585":3,"1586":2,"1591":14,"1596":3,"1597":1,"1600":4,"1634":1,"1641":1,"1649":1,"1651":2,"1653":1,"1657":1,"1660":1,"1662":1,"1664":3,"1672":4,"1673":1,"1675":1,"1677":1,"1685":1,"1686":1,"1698":1,"1704":1,"1717":1,"1719":1,"1720":2,"1748":1,"1749":1,"1780":1,"1794":1,"1800":1,"1810":2,"1812":1,"1815":2,"1838":1,"1839":4,"1844":2,"1851":1,"1876":1,"1923":1,"1933":7,"1934":1,"1935":1,"1940":2,"1941":1,"1964":1,"1996":1,"1997":1,"2013":1,"2050":1,"2053":1,"2062":2,"2064":3,"2070":2,"2071":4,"2092":1,"2093":1,"2134":1,"2140":1,"2142":1,"2147":2,"2185":1,"2188":1,"2223":1,"2229":1,"2232":3,"2234":2}}],["autonomously",{"3":{"1632":1}}],["autonomous",{"3":{"1632":1}}],["autonomy",{"3":{"46":1,"48":1,"1436":1,"1467":3,"1852":1}}],["autorotate",{"3":{"1417":1}}],["autoreplenishment",{"3":{"1339":2}}],["autoawesome",{"3":{"1395":1}}],["autoinclude",{"3":{"1359":1}}],["autoincrement",{"3":{"1323":1}}],["autoincrementing",{"3":{"1323":1}}],["autoorient",{"3":{"1323":1}}],["autodeleteonidle",{"3":{"1323":1,"1436":1}}],["autodetectchangesenabled",{"3":{"1286":2}}],["autocompletes",{"3":{"1324":2}}],["autocomplete",{"3":{"1311":2,"1395":1,"1640":1}}],["autocrlf",{"2":{"1426":1,"2178":1},"3":{"1091":1,"1426":1,"1427":1,"2178":1}}],["automitigate",{"3":{"609":2,"1018":1,"1467":4}}],["automatable",{"3":{"1436":1,"1657":1,"1704":1}}],["automates",{"3":{"1577":1,"1846":1}}],["automate",{"3":{"758":1,"762":1,"1481":1,"1530":1,"1531":1,"1532":1,"1576":1}}],["automated",{"0":{"1608":1,"1643":1,"1742":1},"3":{"132":1,"282":1,"293":1,"361":1,"372":1,"528":1,"641":1,"696":1,"700":1,"756":1,"759":1,"791":1,"792":1,"821":1,"1192":1,"1359":1,"1395":1,"1436":3,"1438":2,"1453":2,"1454":1,"1455":1,"1457":1,"1459":3,"1461":1,"1467":1,"1471":1,"1472":1,"1486":1,"1488":1,"1491":1,"1496":1,"1524":2,"1525":1,"1526":4,"1530":1,"1531":4,"1533":1,"1554":2,"1558":1,"1565":1,"1566":1,"1568":1,"1572":2,"1577":3,"1581":1,"1582":1,"1584":1,"1585":1,"1591":4,"1605":1,"1631":1,"1642":1,"1645":1,"1678":1,"1739":1,"1741":1,"1800":1,"1843":1,"2003":1,"2035":1,"2101":1,"2147":1,"2168":2,"2222":2,"2223":1}}],["automating",{"3":{"1526":1,"1576":1}}],["automation",{"0":{"1459":1},"3":{"483":1,"490":1,"620":1,"1452":2,"1475":1,"1487":1,"1548":1,"1570":1,"1576":1,"1605":2,"1642":1,"1644":1,"1680":1,"1739":2,"2037":1,"2061":1}}],["automatically",{"3":{"12":1,"122":1,"141":1,"235":1,"265":1,"283":1,"547":1,"698":1,"739":1,"883":1,"889":1,"1216":1,"1229":1,"1237":2,"1259":1,"1263":1,"1264":1,"1270":1,"1271":1,"1274":1,"1286":4,"1301":1,"1309":1,"1310":1,"1311":5,"1312":1,"1316":1,"1323":1,"1324":3,"1339":2,"1350":1,"1359":4,"1362":1,"1368":1,"1369":1,"1395":2,"1396":4,"1402":2,"1415":1,"1417":1,"1427":1,"1431":1,"1436":6,"1440":1,"1443":2,"1454":1,"1457":2,"1465":1,"1467":2,"1489":1,"1490":1,"1526":7,"1537":1,"1551":1,"1571":1,"1575":1,"1577":7,"1582":1,"1584":3,"1591":1,"1633":1,"1635":2,"1639":3,"1653":1,"1663":1,"1666":1,"1707":2,"1724":1,"1767":1,"1784":2,"1797":1,"1799":1,"1800":1,"1849":1,"1862":1,"1866":1,"1868":1,"1913":1,"1924":1,"1945":1,"2001":1,"2006":1,"2012":1,"2020":1,"2036":1,"2042":1,"2092":1,"2095":1,"2098":1,"2100":1,"2166":1}}],["automatic",{"1":{"754":1,"755":1,"756":1,"757":1,"758":1,"759":1,"760":1,"761":1,"762":1},"3":{"0":4,"135":1,"175":1,"312":1,"320":1,"361":1,"380":1,"659":1,"715":1,"734":1,"741":1,"754":1,"757":1,"819":1,"874":1,"889":1,"1034":1,"1212":1,"1236":1,"1237":3,"1247":1,"1259":1,"1270":3,"1281":1,"1286":8,"1301":2,"1309":1,"1311":3,"1322":1,"1323":4,"1324":7,"1339":1,"1349":1,"1350":1,"1359":2,"1400":1,"1415":5,"1436":4,"1438":1,"1455":3,"1459":1,"1525":1,"1526":1,"1577":2,"1592":2,"1630":1,"1641":7,"1664":1,"1665":1,"1668":1,"1670":1,"1765":1,"1800":1,"1838":1,"1843":1,"1845":1,"1907":1,"1945":1,"1997":1,"2049":1,"2066":1,"2144":1,"2147":1,"2223":1,"2234":1}}],["automapper",{"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1956":1,"1957":1,"1958":1,"1959":1},"3":{"0":1,"2":1,"3":1,"4":1,"1212":1,"1213":1,"1347":1,"1353":1,"1359":1,"1489":1,"1577":1,"1779":1,"1950":1,"1951":4,"1955":1,"1956":1,"1958":4,"1959":2,"2044":1,"2210":1,"2234":1}}],["autoverify",{"3":{"0":1,"418":1,"420":1,"423":1,"1416":1}}],["auto",{"0":{"1956":1,"2037":1},"2":{"99":1,"1447":1},"3":{"0":9,"53":1,"91":1,"99":1,"117":1,"166":1,"241":1,"243":1,"244":1,"253":1,"259":2,"290":1,"291":1,"293":1,"295":1,"342":1,"348":1,"350":1,"352":1,"353":1,"396":3,"398":2,"423":1,"440":1,"549":1,"640":1,"757":2,"759":1,"766":1,"767":1,"788":1,"790":3,"791":1,"793":1,"820":1,"1004":1,"1123":1,"1125":1,"1129":1,"1212":3,"1244":1,"1247":2,"1259":3,"1269":1,"1270":7,"1271":3,"1273":1,"1281":1,"1286":8,"1300":2,"1301":1,"1309":1,"1311":2,"1312":1,"1323":3,"1324":6,"1333":1,"1337":3,"1338":1,"1339":9,"1350":1,"1355":4,"1356":1,"1359":9,"1369":1,"1379":1,"1380":2,"1395":3,"1396":6,"1399":1,"1402":7,"1406":3,"1413":1,"1415":19,"1416":4,"1417":12,"1433":1,"1436":21,"1438":4,"1443":1,"1447":1,"1455":1,"1467":5,"1490":1,"1496":1,"1510":1,"1526":4,"1535":1,"1566":1,"1572":1,"1577":4,"1588":1,"1590":1,"1591":2,"1611":2,"1612":1,"1627":1,"1639":5,"1641":2,"1651":2,"1656":1,"1662":1,"1663":1,"1671":1,"1747":1,"1749":1,"1751":1,"1754":1,"1767":1,"1769":1,"1790":1,"1811":1,"1830":1,"1858":1,"1871":1,"1883":1,"1916":1,"1959":2,"1977":1,"2001":1,"2018":1,"2029":1,"2064":1,"2095":1,"2097":1,"2115":2,"2130":2,"2156":3,"2158":2,"2162":3,"2168":1,"2232":1,"2234":1}}],["authfailurespikealert",{"2":{"2160":1},"3":{"2160":1}}],["authresult",{"3":{"1641":1}}],["authresponse",{"3":{"1199":3,"1207":1}}],["authz",{"3":{"1526":3,"1535":1,"1548":1,"1577":2,"1591":1,"1611":2,"1616":1,"1617":1}}],["authn",{"3":{"1526":1,"1548":1,"1577":1}}],["authpagepath",{"3":{"1488":1}}],["authprovider",{"3":{"1436":3}}],["authpreferencestests",{"3":{"1199":1,"1207":3}}],["authunavailable",{"3":{"1436":1}}],["authuiservicetests",{"3":{"1199":1,"1207":2,"1324":6}}],["authuiservice",{"2":{"418":1,"2080":1},"3":{"243":2,"258":2,"259":1,"261":1,"418":1,"420":1,"423":1,"426":1,"428":1,"430":1,"434":2,"436":1,"905":2,"909":1,"1199":3,"1203":1,"1207":2,"1300":7,"1324":47,"1436":3,"1496":1,"2080":1}}],["auth=1",{"3":{"1434":1,"1436":1}}],["authgracetimeout",{"3":{"1433":1,"1436":2}}],["authtimeout",{"3":{"1433":1,"1436":2}}],["authtightpolicyname",{"3":{"1326":1,"1339":1,"1444":1}}],["authsucceededwithingraceasync",{"2":{"1433":1},"3":{"1433":1,"1436":1,"1488":1}}],["authservice",{"3":{"1415":1}}],["authsessionissuer",{"3":{"1192":1,"1199":6,"1203":1,"1207":4,"1287":1,"1290":23,"1300":32,"1496":4,"1982":15,"1984":3}}],["authstateprovider",{"2":{"1415":1},"3":{"1415":2,"1641":1}}],["authstate",{"3":{"1395":1,"1396":1,"1402":2}}],["authipratelimitpartition",{"3":{"1311":4}}],["authippermitlimit",{"2":{"178":1,"1599":1,"2002":1},"3":{"175":1,"178":1,"1311":5,"1599":1,"2002":1}}],["authmodelvalidationtests",{"3":{"1199":1,"1207":2,"1324":2}}],["authoutcomerulestests",{"3":{"1199":1,"1207":2,"1436":4,"1438":2}}],["authoutcomerules",{"3":{"1199":3,"1207":3,"1428":1,"1433":4,"1436":9,"1488":6}}],["authoutcome",{"3":{"1199":4,"1207":1,"1433":1,"1436":4,"1488":1}}],["authoruserid",{"3":{"1686":3}}],["authorname",{"3":{"1427":1}}],["authorship",{"3":{"1359":3,"1402":1}}],["authors",{"3":{"123":1,"557":1,"748":1,"750":1,"846":1,"990":1,"1270":1,"1271":2,"1286":1,"1369":1,"1396":1,"1402":1,"1417":1,"1436":1,"1496":1,"1737":1,"1830":1}}],["authored",{"3":{"0":1,"122":1,"333":1,"881":1,"887":1,"889":1,"890":2,"891":1,"972":1,"973":1,"976":1,"1006":1,"1081":1,"1085":1,"1117":1,"1212":2,"1238":2,"1241":4,"1242":4,"1245":1,"1247":10,"1263":1,"1270":1,"1271":2,"1281":3,"1286":10,"1310":1,"1311":1,"1324":1,"1339":2,"1342":1,"1350":2,"1359":3,"1362":1,"1395":4,"1396":7,"1398":1,"1402":8,"1415":3,"1416":3,"1433":1,"1436":13,"1496":39,"1498":1,"1513":1,"1576":1,"1577":1,"1630":1,"1664":1,"1815":1,"1816":2,"1817":1,"2222":1,"2223":1,"2232":1,"2234":1}}],["author",{"3":{"0":2,"135":1,"136":1,"194":1,"196":1,"295":1,"333":1,"342":1,"472":1,"538":1,"676":1,"716":1,"732":1,"799":1,"846":1,"847":2,"880":1,"889":1,"890":1,"912":1,"1004":1,"1005":1,"1006":1,"1135":1,"1152":1,"1237":1,"1247":6,"1258":1,"1259":1,"1267":1,"1270":3,"1271":1,"1286":3,"1310":1,"1311":1,"1313":1,"1323":2,"1339":1,"1350":1,"1359":6,"1369":1,"1380":1,"1396":2,"1398":1,"1402":17,"1417":1,"1436":12,"1438":1,"1455":1,"1474":1,"1488":1,"1491":1,"1496":19,"1632":3,"1889":1,"1987":1,"2041":1,"2044":1,"2079":1,"2111":2,"2170":1}}],["authoring",{"3":{"384":1,"1270":1,"1402":8,"1436":1,"1496":24,"1526":1,"1534":1,"1631":1}}],["authoritative",{"3":{"0":2,"145":1,"146":1,"147":1,"150":1,"395":1,"397":1,"400":1,"404":1,"407":1,"408":1,"509":1,"536":2,"537":1,"638":1,"640":1,"642":1,"937":1,"1073":1,"1075":1,"1093":1,"1155":1,"1271":1,"1300":2,"1311":1,"1324":8,"1333":2,"1339":2,"1350":1,"1395":5,"1396":8,"1402":3,"1415":1,"1436":3,"1438":2,"1443":2,"1453":1,"1454":1,"1455":2,"1460":1,"1474":1,"1490":1,"1492":1,"1526":1,"1531":1,"1535":1,"1561":1,"1600":1,"1639":1,"1646":1,"1654":1,"1675":1,"1692":1,"1732":1,"2011":1,"2114":1,"2158":1,"2162":2,"2169":1,"2171":1,"2181":1}}],["authority",{"2":{"1326":1,"1441":1,"1444":1,"1467":1,"1613":1,"2010":1},"3":{"0":2,"31":6,"59":1,"91":3,"93":4,"98":2,"100":1,"101":1,"104":1,"235":3,"236":1,"237":1,"451":1,"825":1,"827":3,"828":1,"834":1,"1018":1,"1044":1,"1118":2,"1152":1,"1212":1,"1286":3,"1300":2,"1311":20,"1312":1,"1323":1,"1324":12,"1326":1,"1334":2,"1339":5,"1347":1,"1350":3,"1359":3,"1395":2,"1396":6,"1402":1,"1415":1,"1427":1,"1429":2,"1436":6,"1438":2,"1441":1,"1443":3,"1444":1,"1467":5,"1611":1,"1613":3,"1626":1,"1650":1,"1663":1,"1667":1,"1703":1,"1724":1,"1896":4,"1898":1,"1899":1,"1904":1,"2010":1,"2025":1,"2026":1,"2080":1,"2194":1,"2205":1}}],["authorizable",{"3":{"1396":1}}],["authorizationpolicies",{"3":{"1496":1}}],["authorizationpolicy",{"3":{"189":1,"827":1,"1300":3,"1447":3,"1703":1}}],["authorizationheader",{"3":{"1312":1}}],["authorizationhandlercontext",{"3":{"1300":1}}],["authorizationhandler",{"3":{"1300":3}}],["authorizationmultifactordecoratortests",{"2":{"1270":1},"3":{"1199":1,"1207":5,"1264":1,"1270":1}}],["authorizationtests",{"3":{"1199":1,"1207":2,"1436":3,"1438":2}}],["authorizationtestsbase",{"3":{"1199":2,"1207":2,"1428":1,"1433":3,"1436":8,"1438":1,"1488":1,"1496":2}}],["authorizationoptions",{"2":{"189":1},"3":{"189":1,"1300":4}}],["authorizationextensionstests",{"3":{"1199":1,"1207":2}}],["authorizationextensions",{"2":{"1300":1},"3":{"186":1,"189":2,"190":1,"707":1,"710":1,"980":1,"1059":1,"1199":1,"1203":1,"1207":2,"1208":1,"1287":1,"1297":10,"1300":40,"1496":1,"1577":1}}],["authorizationquerydecoratortests",{"3":{"1199":1,"1207":4,"1270":3}}],["authorizationquerydecorator",{"2":{"126":1,"1260":1,"1263":1,"1297":1},"3":{"121":2,"126":2,"1199":4,"1203":1,"1207":2,"1260":1,"1263":4,"1270":16,"1297":1,"1323":1,"1436":1,"1496":1}}],["authorizationdenied",{"2":{"121":1},"3":{"121":1,"1270":1}}],["authorizationcommanddecoratortests",{"3":{"1199":1,"1207":5,"1270":3,"1438":2}}],["authorizationcommanddecorator",{"2":{"121":1,"126":1,"1260":1,"1263":1,"1297":1,"1316":1},"3":{"121":3,"126":3,"1199":4,"1203":1,"1207":2,"1260":1,"1263":4,"1268":1,"1270":22,"1297":1,"1300":1,"1316":1,"1323":1,"1436":1,"1496":1}}],["authorizationgate",{"2":{"115":1,"126":1,"1821":1,"1962":1,"1965":1},"3":{"0":1,"115":1,"126":8,"186":2,"923":1,"927":1,"1059":4,"1199":3,"1203":1,"1207":2,"1260":1,"1263":10,"1270":20,"1496":2,"1821":1,"1962":1,"1965":1}}],["authorization",{"0":{"1297":1,"1348":1,"1353":1,"1357":1,"1373":1,"1402":1,"1511":1,"1667":1,"1761":1,"1771":1},"1":{"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"326":1,"1287":1,"1288":1,"1289":1,"1290":1,"1291":1,"1292":1,"1293":1,"1294":1,"1295":1,"1296":1,"1297":1,"1298":1,"1299":1,"1300":1,"1960":1,"1961":1,"1962":1,"1963":1,"1964":1,"1965":1,"1993":1,"1994":1,"1995":1,"1996":1,"1997":1,"1998":1},"2":{"121":1,"126":1,"206":1,"227":1,"387":1,"388":1,"389":1,"826":1,"1004":1,"1263":2,"1268":1,"1271":1,"1309":1,"1395":1,"1472":1,"1966":1,"1972":1,"2020":1,"2158":1},"3":{"0":24,"31":1,"57":1,"59":3,"95":1,"115":2,"117":1,"121":5,"122":3,"124":2,"126":6,"183":1,"186":8,"189":5,"190":1,"206":1,"217":1,"227":1,"243":1,"304":1,"315":1,"317":1,"318":7,"321":1,"324":1,"325":2,"326":1,"387":1,"388":3,"389":1,"443":1,"459":2,"464":3,"466":1,"507":1,"544":1,"546":2,"612":1,"640":1,"643":2,"651":1,"674":1,"690":1,"707":1,"715":1,"725":1,"739":1,"743":1,"748":1,"749":3,"753":1,"757":1,"774":1,"825":3,"826":1,"827":6,"906":1,"907":1,"952":1,"954":1,"956":1,"960":2,"980":3,"1004":1,"1012":1,"1026":1,"1042":1,"1043":1,"1044":1,"1058":3,"1059":4,"1061":1,"1115":1,"1116":3,"1117":2,"1118":1,"1184":2,"1192":2,"1202":2,"1203":27,"1207":78,"1208":3,"1212":5,"1213":1,"1238":1,"1239":1,"1245":1,"1247":5,"1253":1,"1259":1,"1260":2,"1263":5,"1264":1,"1268":2,"1270":25,"1271":4,"1275":2,"1283":2,"1286":8,"1287":5,"1296":1,"1297":16,"1298":1,"1300":215,"1301":3,"1304":3,"1309":18,"1311":22,"1312":9,"1316":3,"1318":1,"1323":15,"1324":28,"1339":2,"1342":1,"1348":4,"1350":16,"1353":3,"1354":1,"1357":2,"1359":53,"1372":1,"1373":4,"1375":1,"1377":1,"1379":1,"1380":39,"1395":12,"1396":24,"1402":23,"1403":1,"1404":2,"1405":1,"1406":1,"1409":1,"1410":2,"1414":1,"1415":37,"1417":3,"1427":3,"1436":50,"1437":7,"1438":11,"1447":1,"1455":1,"1467":8,"1472":2,"1481":1,"1487":2,"1488":2,"1496":12,"1497":1,"1507":3,"1511":1,"1526":4,"1534":1,"1535":2,"1548":3,"1562":1,"1563":2,"1572":2,"1575":2,"1577":5,"1582":1,"1589":1,"1591":2,"1595":1,"1596":2,"1600":2,"1621":1,"1626":1,"1627":1,"1629":1,"1630":1,"1632":1,"1638":4,"1639":3,"1640":1,"1641":4,"1660":1,"1662":2,"1666":1,"1667":4,"1671":2,"1672":1,"1698":2,"1720":1,"1747":2,"1753":1,"1757":1,"1759":1,"1775":1,"1779":2,"1813":2,"1814":1,"1815":2,"1816":1,"1817":2,"1821":3,"1825":1,"1826":1,"1827":1,"1902":1,"1903":1,"1904":1,"1922":2,"1938":1,"1940":1,"1959":1,"1960":1,"1961":2,"1963":1,"1965":5,"1966":1,"1972":1,"1992":1,"1993":2,"1994":2,"1995":4,"1998":3,"2007":1,"2020":2,"2037":1,"2056":1,"2068":1,"2098":1,"2113":2,"2115":1,"2138":2,"2151":1,"2158":2,"2186":1,"2188":1,"2194":1,"2195":2,"2196":1,"2197":3,"2201":2,"2204":1,"2210":3,"2222":1,"2229":1,"2232":1,"2234":2}}],["authorizing",{"3":{"209":1,"1359":1}}],["authorizeview",{"2":{"509":1,"650":1,"953":1,"960":1,"1758":1,"1761":1,"2080":1},"3":{"507":1,"509":1,"650":1,"1324":3,"1396":1,"1436":1,"1591":1,"1641":1,"1671":1,"1758":2,"1761":1,"2080":1}}],["authorizer",{"3":{"378":1,"1309":3,"1945":1}}],["authorizerouteview",{"2":{"189":1,"649":1,"651":1,"652":1},"3":{"189":1,"649":1,"651":1,"652":1,"1300":1,"1436":3}}],["authorizeattribute",{"3":{"186":1,"1297":1,"1300":3,"1431":1,"1436":2,"1962":1}}],["authorizesessionwriteasync",{"3":{"1359":9}}],["authorizes",{"3":{"0":1,"191":1,"530":1,"749":1,"1059":1,"1300":6,"1311":1,"1322":1,"1323":1,"1324":1,"1357":1,"1359":6,"1402":4,"1415":1,"1627":2,"1968":1,"1994":1,"2204":1}}],["authorize",{"2":{"185":1,"188":1,"206":1,"207":1,"208":1,"555":1,"557":1,"906":1,"910":1,"1626":1,"1703":1,"1724":1,"1757":1,"1758":1,"1759":1,"1760":1,"1761":1,"1823":1,"1898":1,"1960":1,"1964":1,"1965":1,"1966":1,"1967":1,"1972":1,"2046":1},"3":{"0":2,"185":2,"186":1,"188":1,"206":2,"207":1,"208":1,"225":1,"235":1,"434":1,"529":1,"530":1,"555":1,"557":1,"618":1,"690":1,"707":1,"724":1,"725":2,"905":2,"906":1,"907":1,"910":1,"1116":1,"1212":1,"1247":1,"1263":1,"1270":4,"1298":1,"1300":11,"1306":1,"1307":1,"1309":6,"1311":10,"1323":4,"1324":7,"1334":1,"1339":1,"1350":4,"1357":1,"1359":5,"1373":6,"1375":1,"1377":1,"1380":14,"1388":2,"1391":1,"1395":16,"1396":18,"1402":6,"1414":1,"1415":14,"1416":1,"1417":3,"1427":3,"1431":2,"1432":1,"1434":1,"1436":30,"1438":2,"1488":1,"1526":1,"1534":1,"1577":2,"1591":4,"1596":1,"1599":1,"1600":1,"1626":1,"1627":9,"1640":1,"1641":1,"1650":1,"1651":1,"1703":1,"1724":1,"1747":3,"1749":1,"1757":1,"1758":1,"1759":1,"1760":2,"1761":3,"1765":1,"1823":1,"1825":1,"1898":1,"1935":1,"1948":1,"1960":4,"1964":2,"1965":2,"1966":3,"1967":1,"1968":1,"1971":1,"1972":2,"2046":2,"2234":1}}],["authorizedsessionids",{"3":{"1359":1}}],["authorized",{"3":{"0":3,"95":1,"96":1,"98":1,"384":1,"528":1,"599":1,"960":1,"1092":1,"1286":2,"1300":3,"1309":1,"1324":1,"1359":2,"1396":2,"1415":1,"1436":4,"1467":1,"1474":1,"1548":1,"1553":1,"1672":1,"1821":1,"1994":1,"2181":1}}],["autherrorcodes",{"3":{"1199":3,"1203":1,"1207":2,"1295":3,"1300":5,"1496":1}}],["authentic",{"3":{"1489":1}}],["authenticity",{"3":{"790":1,"1300":1}}],["authenticators",{"3":{"1417":2}}],["authenticator",{"3":{"1059":2,"1293":2,"1300":7,"1311":1,"1322":1,"1323":4,"1417":2,"2198":2,"2200":2,"2205":1}}],["authenticating",{"3":{"0":1,"348":1,"353":1,"1300":1,"1312":1,"1324":1,"1339":1,"1436":1,"1902":1}}],["authenticationcallback",{"3":{"1417":1}}],["authenticationtype",{"3":{"1323":4,"1436":1}}],["authenticationticket",{"3":{"1300":1,"1436":1}}],["authenticationproperties",{"2":{"1312":1},"3":{"1311":2,"1312":1}}],["authenticationheadervalue",{"2":{"1311":1,"1324":1},"3":{"1311":2,"1324":3}}],["authenticationhandler",{"3":{"1300":2,"1436":1}}],["authenticationbuilder",{"2":{"1208":1},"3":{"1208":1,"1300":3}}],["authenticationvalidatorstests",{"3":{"1199":1,"1207":2}}],["authenticationvalidators",{"2":{"1289":1},"3":{"1199":12,"1203":1,"1207":2,"1287":1,"1289":3,"1300":9,"1406":1,"1415":5,"1496":2}}],["authenticationrequest",{"2":{"1289":1},"3":{"1199":1,"1203":1,"1207":2,"1289":1,"1300":8}}],["authenticationresponse",{"2":{"420":1,"426":1,"1289":1,"1977":1},"3":{"350":1,"1199":31,"1203":1,"1207":2,"1289":1,"1300":18,"1311":3,"1324":4,"1415":2,"1436":1,"1977":1}}],["authenticationservicesettings",{"3":{"1300":1,"1415":2,"1436":1,"1496":2}}],["authenticationservicetests",{"3":{"1199":1,"1207":3,"1300":1,"1436":1}}],["authenticationserviceidentitycompletionstests",{"2":{"1199":1,"1300":1},"3":{"1199":1,"1207":7,"1300":2,"1436":1}}],["authenticationservice",{"2":{"283":1,"310":1,"314":1,"354":1,"502":1,"672":1,"949":1,"988":1,"1192":1,"1289":1,"1407":1,"1408":1,"1534":1,"1597":1,"1599":1,"1978":1,"1983":1},"3":{"281":1,"283":1,"310":5,"314":1,"350":17,"352":2,"353":1,"354":1,"497":2,"499":13,"502":2,"545":1,"552":1,"672":1,"674":4,"946":2,"949":1,"988":2,"1192":1,"1199":5,"1203":1,"1207":2,"1289":1,"1300":14,"1311":1,"1405":1,"1406":7,"1407":1,"1408":1,"1413":2,"1415":36,"1436":4,"1489":1,"1496":6,"1526":2,"1534":2,"1591":3,"1597":2,"1599":2,"1765":2,"1896":1,"1978":1,"1983":4,"2001":2}}],["authenticationservicebasetests",{"3":{"906":1,"1199":1,"1207":6,"1300":2,"1436":1}}],["authenticationservicebase",{"2":{"279":1,"281":1,"283":1,"284":1,"285":1,"310":1,"353":1,"470":1,"476":1,"498":1,"502":1,"503":1,"725":1,"949":1,"1058":1,"1060":1,"1061":1,"1192":1,"1289":1,"1293":1,"1403":1,"1667":1,"1896":1,"2198":1,"2205":1},"3":{"0":3,"279":1,"283":1,"284":2,"285":1,"310":4,"353":2,"470":2,"476":2,"497":2,"498":2,"499":21,"500":1,"501":2,"502":3,"503":1,"674":2,"725":1,"905":10,"906":1,"907":4,"909":1,"910":1,"946":1,"949":1,"1058":2,"1059":3,"1060":1,"1061":1,"1192":1,"1199":5,"1203":1,"1207":2,"1270":1,"1271":2,"1286":2,"1287":1,"1289":34,"1290":5,"1293":1,"1300":66,"1403":1,"1406":1,"1415":2,"1436":3,"1489":1,"1496":5,"1577":2,"1582":1,"1583":1,"1586":1,"1667":1,"1896":1,"1982":10,"1983":1,"2001":1,"2198":2,"2199":2,"2204":1,"2205":1}}],["authenticationstatetask",{"3":{"1395":1}}],["authenticationstate",{"3":{"0":1,"954":1,"1324":2,"1395":1,"1396":1,"1402":2,"1432":1,"1436":6,"1488":1,"1491":2}}],["authenticationstateprovider",{"2":{"508":1,"953":1,"954":1,"1432":1,"1491":1,"1641":1},"3":{"0":1,"508":1,"953":1,"954":2,"1324":8,"1395":2,"1415":2,"1432":1,"1436":9,"1488":1,"1491":1,"1641":1}}],["authentication=active",{"3":{"0":1,"599":1,"1467":1,"1477":1}}],["authentication",{"0":{"1289":1,"1406":1,"1511":1,"1641":1},"1":{"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"286":1,"287":1,"504":1,"505":1,"506":1,"507":1,"508":1,"509":1,"510":1,"511":1,"512":1,"513":1,"514":1,"1287":1,"1288":1,"1289":1,"1290":1,"1291":1,"1292":1,"1293":1,"1294":1,"1295":1,"1296":1,"1297":1,"1298":1,"1299":1,"1300":1},"2":{"776":1,"833":1,"1293":2,"1295":2,"1311":1,"1312":1,"1322":1,"1326":1,"1441":1,"1444":1,"1467":4,"2010":1},"3":{"0":7,"26":1,"31":4,"34":1,"59":1,"160":1,"173":1,"175":1,"177":1,"178":1,"182":1,"186":1,"202":1,"204":1,"206":1,"207":1,"235":2,"278":1,"280":1,"313":2,"350":1,"352":1,"359":1,"363":1,"364":1,"365":1,"403":1,"422":1,"457":1,"458":1,"459":2,"462":2,"464":3,"466":1,"500":1,"504":1,"506":1,"528":1,"555":1,"599":2,"602":1,"612":1,"618":1,"665":1,"666":1,"674":1,"698":1,"719":2,"748":2,"749":6,"753":3,"774":1,"776":1,"778":1,"792":1,"827":4,"833":1,"852":1,"950":2,"980":2,"1011":1,"1012":1,"1058":1,"1059":3,"1061":1,"1108":1,"1111":1,"1184":1,"1192":1,"1202":1,"1203":3,"1207":7,"1208":2,"1212":1,"1213":2,"1253":1,"1259":1,"1270":3,"1271":1,"1273":1,"1283":1,"1284":1,"1286":5,"1287":2,"1290":1,"1293":4,"1295":4,"1298":2,"1300":49,"1301":2,"1311":50,"1312":4,"1320":2,"1322":1,"1323":3,"1324":13,"1326":1,"1334":2,"1335":1,"1336":1,"1339":7,"1380":2,"1391":1,"1395":7,"1396":7,"1402":1,"1406":1,"1408":1,"1415":14,"1416":3,"1417":3,"1432":1,"1434":1,"1436":33,"1437":1,"1441":1,"1442":1,"1443":2,"1444":1,"1465":1,"1467":8,"1488":2,"1496":5,"1526":1,"1548":2,"1575":1,"1622":1,"1626":2,"1627":2,"1629":4,"1630":1,"1631":5,"1632":3,"1635":1,"1638":2,"1639":1,"1640":2,"1641":9,"1647":1,"1650":2,"1666":1,"1669":1,"1671":1,"1703":2,"1721":1,"1724":1,"1747":1,"1758":1,"1763":2,"1764":1,"1765":2,"1767":1,"1825":5,"1898":1,"1899":1,"1902":1,"1904":1,"1970":1,"1972":3,"1975":1,"1982":1,"1985":1,"2000":1,"2001":3,"2002":2,"2003":2,"2010":1,"2068":2,"2144":2,"2146":1,"2168":1,"2170":1,"2188":1,"2196":2,"2197":1,"2205":2,"2210":1,"2222":2,"2223":1,"2234":2}}],["authenticateasspeaker",{"3":{"1488":1}}],["authenticateasattendee",{"3":{"1488":1,"1491":1}}],["authenticateasorganizer",{"3":{"1488":1}}],["authenticateasync",{"2":{"420":1,"430":1,"2119":1},"3":{"420":1,"426":1,"428":1,"430":1,"1324":3,"1415":1,"1416":1,"1417":6,"2119":1}}],["authenticateresult",{"3":{"1300":1,"1312":1,"1415":1,"1436":2}}],["authenticateresultfeaturestub",{"3":{"1199":2,"1207":1}}],["authenticate",{"3":{"30":1,"279":1,"284":1,"527":1,"601":1,"789":1,"905":1,"946":1,"947":1,"1300":3,"1309":1,"1324":3,"1415":1,"1417":1,"1455":2,"1467":2,"1591":1,"1632":1,"1641":3,"1768":1,"1982":1,"2129":1,"2148":1,"2168":1}}],["authenticateduser",{"3":{"1436":2}}],["authenticateduserpath",{"3":{"1433":1,"1436":1}}],["authenticatedpage",{"3":{"1436":1}}],["authenticatedservicebaseretrytests",{"3":{"1199":1,"1207":3}}],["authenticatedservicebase",{"2":{"879":1,"881":1,"883":1,"884":1,"1388":1,"1389":1,"1395":1,"1414":1,"1668":1,"2076":1,"2082":1},"3":{"0":3,"827":2,"879":1,"881":6,"883":2,"884":2,"1199":25,"1203":1,"1207":2,"1212":1,"1324":64,"1339":2,"1388":1,"1389":1,"1395":19,"1396":20,"1402":1,"1414":1,"1415":1,"1496":2,"1600":1,"1668":1,"2076":1,"2082":1}}],["authenticated",{"0":{"1298":1,"1391":1,"1623":1,"1759":1,"1922":1,"2001":1},"1":{"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1,"181":1,"182":1,"385":1,"386":1,"387":1,"388":1,"389":1,"390":1,"391":1,"392":1,"393":1},"3":{"0":8,"26":1,"31":1,"172":1,"175":5,"176":1,"177":2,"178":1,"179":1,"181":2,"182":1,"184":1,"188":1,"189":1,"191":1,"228":1,"234":1,"237":1,"243":2,"244":1,"247":1,"259":1,"265":1,"273":1,"280":2,"282":1,"334":1,"359":3,"360":2,"384":1,"385":1,"387":2,"388":1,"390":1,"434":1,"458":2,"459":2,"460":1,"461":1,"462":1,"507":1,"556":1,"649":1,"690":1,"725":1,"727":1,"749":1,"759":1,"825":1,"853":1,"945":1,"960":1,"1192":1,"1212":4,"1253":1,"1271":2,"1284":1,"1286":7,"1287":1,"1288":1,"1296":1,"1297":1,"1300":16,"1304":1,"1306":1,"1308":1,"1309":15,"1311":23,"1312":3,"1323":7,"1324":23,"1336":1,"1339":4,"1350":3,"1357":1,"1359":12,"1373":1,"1380":4,"1391":1,"1395":16,"1396":27,"1401":1,"1402":5,"1406":1,"1407":1,"1414":1,"1415":15,"1417":9,"1431":1,"1432":2,"1436":17,"1438":6,"1443":1,"1455":1,"1465":1,"1488":1,"1496":2,"1526":4,"1534":3,"1535":1,"1548":1,"1572":1,"1577":1,"1591":1,"1611":1,"1621":5,"1625":1,"1626":1,"1627":3,"1629":1,"1631":7,"1632":18,"1638":2,"1639":6,"1640":3,"1641":6,"1672":1,"1698":1,"1747":3,"1748":2,"1749":10,"1750":2,"1757":3,"1765":3,"1768":3,"1771":1,"1773":1,"1825":2,"1903":1,"1905":1,"1922":3,"1923":2,"1924":1,"1936":1,"1937":1,"1938":1,"1945":1,"1963":1,"1968":1,"1972":1,"1993":1,"1998":1,"1999":1,"2000":2,"2001":5,"2002":3,"2003":3,"2008":1,"2068":1,"2085":1,"2144":2,"2148":5,"2168":1,"2171":1,"2234":5}}],["authenticates",{"3":{"0":5,"59":1,"207":1,"227":1,"350":1,"598":1,"599":1,"601":1,"665":1,"825":1,"905":1,"972":1,"1183":1,"1185":1,"1290":1,"1300":5,"1309":1,"1311":3,"1323":1,"1324":4,"1339":3,"1406":1,"1415":2,"1434":1,"1436":2,"1447":1,"1455":1,"1459":1,"1465":1,"1467":3,"1472":1,"1547":1,"1641":1,"1667":1,"1732":1,"1902":1,"1905":1,"1966":1,"1968":1,"1975":1,"1982":1,"1994":1,"2001":1,"2128":1}}],["authclaimtypes",{"2":{"186":1,"303":1,"649":1,"1296":1,"2140":1,"2199":1},"3":{"126":1,"186":3,"303":2,"649":1,"905":4,"907":1,"1059":3,"1199":34,"1203":1,"1207":2,"1270":3,"1287":1,"1293":4,"1296":5,"1300":30,"1323":1,"1436":3,"1496":1,"2140":2,"2199":3}}],["authcontrollertests",{"3":{"1199":1,"1207":2}}],["authcontroller",{"2":{"1747":2},"3":{"0":1,"854":1,"1199":2,"1203":1,"1207":2,"1300":1,"1311":8,"1323":5,"1406":3,"1407":2,"1408":1,"1415":31,"1436":1,"1496":3,"1747":2,"2001":2}}],["authcontrollerbaseratelimittests",{"2":{"2001":1,"2002":1},"3":{"1199":1,"1207":3,"1311":1,"1438":2,"1496":2,"2001":2,"2002":2}}],["authcontrollerbasetests",{"3":{"906":1,"909":1,"1199":1,"1207":3,"1311":1}}],["authcontrollerbase",{"2":{"160":1,"161":1,"280":1,"1599":1,"1600":1,"2001":1,"2003":1},"3":{"0":4,"160":2,"161":2,"175":1,"280":1,"854":1,"905":6,"1199":6,"1203":1,"1207":2,"1290":4,"1300":15,"1311":30,"1406":1,"1415":2,"1436":3,"1496":3,"1599":1,"1600":1,"2003":1}}],["authdelegatinghandlertests",{"3":{"1199":1,"1207":2,"1324":2}}],["authdelegatinghandler",{"2":{"387":1,"514":1,"1183":1},"3":{"0":1,"387":1,"507":6,"514":3,"881":1,"1183":2,"1199":6,"1203":1,"1207":2,"1324":20,"1436":3}}],["auth",{"0":{"1667":1,"2210":1},"1":{"1893":1,"1894":1,"1895":1,"1896":1,"1897":1,"1898":1,"1899":1,"1966":1,"1967":1,"1968":1,"1969":1,"1970":1,"1971":1,"1972":1},"2":{"186":1,"190":1,"207":2,"281":2,"284":1,"350":5,"352":3,"353":2,"354":3,"511":2,"854":1,"1062":1,"1295":1,"1300":2,"1406":2,"1582":1,"1583":1,"1641":1,"1761":1,"1962":1,"1977":4,"1978":1},"3":{"0":31,"29":1,"31":2,"53":1,"59":1,"60":1,"121":1,"126":2,"136":1,"155":1,"157":1,"160":1,"161":2,"162":1,"173":5,"175":4,"176":1,"177":2,"178":3,"179":5,"180":8,"181":1,"182":2,"186":4,"190":2,"207":7,"209":3,"210":1,"217":1,"221":1,"227":1,"229":2,"236":1,"239":1,"243":2,"246":1,"279":2,"280":3,"281":3,"282":2,"284":3,"287":2,"303":2,"310":1,"318":1,"349":1,"350":7,"352":5,"353":4,"354":3,"379":1,"389":1,"403":1,"415":2,"416":1,"418":1,"420":6,"423":3,"426":3,"428":5,"430":2,"433":1,"434":1,"440":1,"459":2,"463":1,"470":1,"476":1,"497":4,"498":1,"499":4,"502":1,"506":1,"507":17,"508":3,"509":2,"510":2,"511":2,"513":2,"514":2,"536":2,"555":3,"556":2,"557":1,"599":1,"600":1,"608":1,"609":2,"611":1,"612":1,"616":1,"643":1,"649":5,"664":1,"666":1,"668":1,"670":1,"674":9,"676":1,"736":1,"757":1,"758":1,"775":1,"809":2,"827":2,"833":1,"834":1,"853":1,"854":6,"856":1,"857":1,"904":1,"905":30,"906":11,"907":2,"908":1,"909":4,"926":1,"946":4,"963":1,"980":1,"988":1,"996":1,"999":1,"1006":2,"1058":3,"1059":36,"1062":2,"1082":2,"1183":1,"1184":9,"1185":1,"1186":1,"1192":4,"1194":1,"1201":1,"1202":2,"1203":152,"1207":547,"1208":2,"1212":9,"1213":1,"1237":4,"1270":3,"1271":5,"1273":1,"1283":8,"1286":36,"1287":1,"1288":6,"1289":8,"1290":8,"1291":6,"1292":7,"1293":9,"1294":5,"1295":7,"1296":3,"1297":20,"1298":4,"1300":519,"1301":10,"1304":1,"1311":49,"1312":4,"1313":1,"1316":1,"1320":3,"1322":2,"1323":19,"1324":301,"1326":1,"1336":1,"1338":1,"1339":16,"1350":4,"1359":2,"1380":1,"1391":1,"1395":9,"1396":10,"1402":2,"1403":1,"1406":3,"1407":4,"1408":3,"1415":45,"1416":5,"1417":43,"1428":1,"1429":2,"1430":1,"1432":2,"1433":2,"1434":2,"1436":78,"1437":2,"1438":33,"1440":1,"1441":1,"1442":2,"1444":2,"1447":10,"1453":1,"1454":1,"1455":4,"1456":3,"1458":1,"1467":11,"1477":6,"1481":1,"1482":1,"1484":1,"1487":2,"1488":7,"1496":24,"1511":1,"1524":1,"1526":7,"1534":3,"1535":1,"1562":1,"1563":2,"1571":1,"1577":13,"1582":8,"1583":2,"1586":3,"1591":5,"1611":3,"1612":1,"1617":2,"1618":1,"1619":2,"1627":2,"1632":10,"1638":1,"1639":1,"1640":3,"1641":26,"1642":1,"1644":1,"1647":2,"1650":1,"1653":1,"1656":1,"1658":1,"1660":3,"1663":1,"1666":1,"1667":2,"1669":3,"1689":1,"1698":2,"1712":1,"1746":6,"1747":10,"1748":5,"1749":3,"1750":1,"1757":1,"1759":1,"1761":3,"1765":7,"1767":1,"1771":3,"1778":1,"1779":3,"1780":1,"1783":1,"1786":1,"1790":2,"1793":1,"1892":1,"1893":1,"1899":1,"1923":1,"1942":1,"1962":1,"1965":1,"1966":2,"1967":1,"1968":7,"1969":1,"1971":1,"1972":5,"1974":1,"1975":4,"1976":1,"1977":4,"1978":2,"1982":1,"1995":1,"1998":1,"2000":1,"2001":7,"2002":4,"2003":1,"2010":1,"2016":1,"2024":1,"2026":1,"2029":1,"2037":2,"2046":1,"2056":2,"2068":3,"2076":1,"2080":3,"2082":1,"2085":1,"2087":1,"2112":2,"2116":1,"2120":1,"2124":1,"2151":1,"2160":1,"2200":1,"2201":3,"2204":1,"2210":3,"2229":1,"2230":1,"2232":1,"2234":3,"2245":1}}],["abbreviates",{"3":{"1681":1}}],["abbreviated",{"3":{"1496":1}}],["abbreviating",{"3":{"1339":1}}],["abi",{"3":{"1417":1}}],["ability",{"3":{"58":1,"726":1,"1237":1,"1311":1,"1323":1,"1339":1,"1369":1,"1396":1,"1415":1,"1443":1,"1985":1}}],["able",{"3":{"380":1,"447":1,"549":1,"691":1,"760":1,"811":1,"829":1,"989":1,"1042":1,"1237":1,"1238":1,"1259":1,"1279":1,"1286":3,"1300":4,"1301":1,"1311":1,"1323":1,"1324":3,"1339":3,"1359":1,"1366":1,"1395":3,"1396":6,"1410":1,"1415":4,"1430":1,"1435":1,"1436":1,"1438":3,"1439":1,"1441":1,"1467":1,"1487":1,"1677":1,"1840":1,"1942":1,"1943":1,"1967":1,"1981":1,"1984":1,"2057":1,"2132":1,"2136":1,"2194":1}}],["abcdefghijklmnopqrstuvwxyz0123456789",{"3":{"1309":1}}],["abc",{"3":{"335":1,"1237":1,"1241":2,"1247":2}}],["abuse",{"3":{"175":1,"381":1,"827":1,"1125":1,"1126":1,"1324":3,"1326":1,"1339":3,"1396":3,"1402":1,"1416":1,"1444":1,"1534":1,"1599":1,"1640":1,"1641":1,"1945":1}}],["abuser",{"3":{"174":1,"1999":1,"2000":1}}],["abusive",{"3":{"174":1,"1402":1,"1999":1}}],["abac",{"3":{"0":1,"188":1,"320":1,"1577":1,"1583":1,"1964":1,"1997":2,"1998":1}}],["abandonaftercommitfailure",{"2":{"988":1},"3":{"988":2,"1286":2}}],["abandoning",{"3":{"332":1,"751":1,"923":1,"1324":1,"1390":1,"1417":1,"1991":1}}],["abandons",{"3":{"24":1,"237":1,"538":1,"1293":1,"1339":2,"1395":2,"1845":1}}],["abandoned",{"3":{"21":1,"24":1,"109":2,"235":1,"352":1,"793":1,"897":1,"1247":1,"1259":2,"1285":1,"1286":5,"1300":2,"1324":4,"1339":1,"1395":2,"1399":1,"1402":3,"1436":4,"1467":1,"1591":1,"1759":1,"1910":1,"1919":1,"1927":1,"1978":1,"2170":1,"2171":1}}],["abandon",{"3":{"0":1,"24":1,"27":1,"201":4,"255":1,"757":1,"1247":1,"1258":2,"1259":6,"1311":1,"1323":1,"1359":1,"1438":1,"1455":1,"1910":1,"1922":1}}],["aborterror",{"3":{"1417":1}}],["aborted",{"3":{"109":1,"1263":1,"1270":1,"1278":1,"1286":2,"1300":2,"1304":1,"1307":1,"1309":1,"1312":1,"1323":1,"1346":1,"1359":1,"1436":2,"1934":1,"1945":1}}],["aborting",{"3":{"757":1,"1301":1,"1324":1,"1358":1,"1359":2,"1369":1,"1396":1,"1438":1,"1804":1}}],["abort",{"3":{"72":1,"109":1,"1286":2,"1311":2,"1324":1,"1350":1,"1359":5,"1366":1,"1369":1,"1396":1,"1415":1,"1417":2,"1438":1,"1447":1,"1671":1,"1806":1,"1941":1}}],["aborts",{"3":{"43":2,"790":1,"881":1,"1042":1,"1259":1,"1315":1,"1323":4,"1339":1,"1350":1,"1359":3,"1396":2,"1415":2,"1684":1,"1881":1,"2187":1}}],["about",{"0":{"2057":1},"3":{"0":9,"19":3,"23":1,"32":1,"58":1,"60":1,"71":1,"72":1,"73":1,"74":2,"100":1,"104":1,"110":1,"125":1,"140":1,"142":1,"145":1,"150":1,"156":2,"160":2,"175":1,"193":1,"200":1,"254":1,"255":2,"284":1,"317":1,"358":1,"360":1,"365":1,"383":1,"390":3,"414":1,"423":1,"425":1,"428":1,"460":1,"477":1,"486":1,"491":1,"527":1,"536":1,"539":1,"543":2,"555":1,"563":1,"564":1,"566":1,"567":1,"585":1,"587":1,"589":1,"590":2,"617":1,"625":1,"628":1,"629":1,"632":1,"633":1,"676":2,"681":1,"683":1,"689":1,"698":1,"699":1,"702":1,"707":2,"708":1,"716":3,"724":1,"740":2,"742":1,"750":1,"751":1,"757":1,"759":2,"760":1,"764":1,"768":2,"784":1,"793":2,"798":2,"804":1,"805":1,"819":1,"820":1,"827":4,"838":3,"848":1,"854":1,"862":2,"869":1,"871":1,"880":1,"889":2,"890":1,"893":1,"897":2,"898":1,"900":1,"906":1,"914":1,"926":2,"930":1,"933":1,"938":1,"940":1,"953":1,"956":1,"963":1,"964":2,"971":1,"972":1,"976":1,"980":1,"981":2,"984":1,"998":1,"1007":1,"1018":1,"1027":1,"1033":3,"1035":1,"1049":2,"1050":1,"1051":2,"1066":1,"1067":2,"1068":1,"1077":1,"1085":1,"1089":1,"1093":1,"1116":1,"1118":1,"1125":1,"1142":1,"1154":1,"1155":1,"1176":2,"1194":1,"1212":1,"1229":3,"1237":3,"1239":1,"1241":1,"1247":3,"1252":2,"1254":2,"1259":6,"1264":1,"1265":1,"1267":1,"1269":1,"1270":10,"1273":1,"1276":1,"1277":1,"1280":1,"1286":29,"1289":1,"1295":1,"1296":1,"1300":31,"1301":4,"1309":4,"1310":1,"1311":10,"1312":2,"1318":2,"1322":2,"1323":20,"1324":42,"1337":2,"1338":1,"1339":13,"1340":1,"1341":1,"1347":1,"1348":2,"1350":9,"1355":1,"1359":53,"1366":2,"1369":6,"1371":1,"1372":1,"1380":5,"1395":16,"1396":42,"1397":1,"1399":1,"1402":13,"1415":28,"1416":3,"1417":10,"1427":2,"1429":1,"1430":1,"1433":1,"1436":70,"1438":1,"1440":1,"1443":1,"1445":2,"1446":1,"1447":2,"1449":1,"1451":1,"1453":4,"1454":2,"1455":6,"1456":2,"1459":1,"1460":1,"1465":5,"1467":13,"1472":1,"1473":1,"1474":7,"1475":1,"1476":3,"1478":1,"1484":1,"1488":1,"1489":2,"1490":3,"1492":5,"1496":2,"1526":1,"1529":1,"1553":1,"1586":1,"1630":1,"1638":1,"1641":1,"1649":1,"1650":1,"1651":1,"1654":1,"1685":1,"1686":3,"1692":1,"1699":1,"1700":1,"1708":1,"1725":1,"1726":1,"1727":1,"1729":2,"1732":1,"1765":1,"1782":1,"1792":1,"1794":1,"1801":1,"1803":3,"1808":1,"1810":1,"1824":1,"1828":1,"1835":1,"1843":1,"1855":1,"1856":1,"1863":1,"1870":1,"1874":1,"1886":1,"1890":1,"1902":2,"1903":1,"1907":1,"1909":1,"1911":1,"1916":1,"1919":1,"1922":1,"1932":1,"1944":1,"1948":2,"1950":1,"1952":1,"1953":1,"1954":1,"1956":1,"1964":1,"1971":1,"1973":1,"1978":1,"1982":2,"1993":2,"1995":1,"1997":1,"1999":1,"2001":2,"2002":1,"2003":1,"2030":1,"2031":1,"2032":1,"2034":4,"2037":1,"2038":1,"2042":1,"2043":1,"2044":2,"2046":1,"2048":2,"2051":1,"2054":1,"2059":2,"2060":3,"2061":1,"2066":1,"2069":1,"2077":1,"2088":1,"2089":3,"2093":1,"2098":1,"2101":1,"2102":1,"2103":1,"2111":1,"2116":1,"2118":1,"2120":1,"2125":1,"2129":1,"2134":1,"2137":1,"2140":1,"2144":1,"2153":1,"2158":2,"2159":1,"2160":1,"2167":2,"2168":1,"2169":3,"2176":1,"2179":1,"2181":1,"2182":1,"2183":1,"2185":1,"2186":1,"2187":1,"2192":1,"2193":1,"2195":1,"2196":2,"2199":1,"2200":2,"2202":1,"2214":1,"2234":1,"2241":1}}],["abovethroughputfloor",{"3":{"1492":1}}],["above",{"3":{"0":3,"1":1,"20":1,"22":2,"27":1,"62":1,"71":1,"93":3,"94":2,"95":2,"97":1,"98":2,"99":1,"100":2,"101":1,"104":1,"121":2,"122":1,"128":1,"131":1,"135":6,"136":3,"137":3,"138":3,"139":1,"142":1,"151":1,"160":2,"166":1,"175":2,"178":2,"179":1,"180":1,"181":1,"200":6,"218":1,"219":2,"230":1,"231":1,"237":1,"243":2,"245":3,"247":1,"248":1,"249":1,"250":1,"251":1,"253":1,"256":1,"257":1,"258":2,"265":1,"276":1,"291":1,"295":2,"303":2,"325":2,"330":2,"336":2,"337":1,"359":1,"364":1,"365":2,"374":1,"391":1,"392":2,"395":3,"400":1,"401":1,"403":1,"407":1,"415":1,"418":1,"423":1,"424":1,"425":2,"426":3,"428":1,"429":1,"441":1,"443":1,"444":1,"448":3,"450":1,"451":1,"471":1,"474":1,"475":2,"476":1,"477":3,"493":1,"497":2,"507":1,"511":1,"512":2,"523":3,"524":1,"528":1,"536":1,"540":1,"548":1,"549":3,"550":1,"551":4,"555":1,"556":1,"560":1,"566":2,"567":1,"572":2,"574":1,"575":2,"576":1,"577":1,"578":1,"584":1,"591":1,"592":1,"603":1,"604":1,"607":1,"609":3,"612":1,"613":2,"616":1,"626":2,"633":1,"635":1,"638":1,"642":2,"660":1,"665":1,"668":1,"669":1,"674":2,"675":1,"676":1,"688":1,"691":1,"702":1,"716":1,"719":1,"731":1,"733":1,"750":1,"751":1,"766":1,"767":1,"774":1,"790":1,"799":1,"801":1,"811":1,"812":1,"814":1,"819":2,"825":2,"826":1,"827":6,"829":1,"831":2,"833":1,"837":1,"839":1,"849":1,"860":1,"870":1,"874":1,"876":1,"891":1,"899":1,"906":1,"909":1,"914":1,"915":1,"926":2,"931":1,"954":1,"957":1,"975":1,"996":1,"1003":1,"1008":1,"1018":1,"1020":2,"1026":1,"1036":1,"1059":1,"1060":1,"1074":1,"1076":1,"1077":1,"1094":1,"1102":1,"1117":1,"1124":2,"1125":1,"1127":1,"1128":1,"1178":1,"1184":1,"1188":1,"1211":1,"1212":1,"1223":1,"1229":3,"1236":1,"1237":9,"1240":1,"1243":1,"1247":5,"1259":7,"1262":2,"1266":1,"1269":1,"1270":15,"1271":1,"1275":1,"1281":1,"1286":14,"1300":14,"1301":5,"1309":13,"1310":1,"1311":11,"1312":2,"1314":1,"1315":1,"1323":26,"1324":42,"1326":1,"1329":1,"1333":1,"1337":1,"1339":30,"1346":1,"1350":14,"1353":1,"1358":1,"1359":76,"1362":1,"1364":1,"1365":1,"1369":20,"1372":1,"1380":18,"1387":1,"1392":1,"1395":30,"1396":53,"1402":7,"1414":1,"1415":34,"1416":2,"1417":10,"1427":2,"1430":1,"1431":1,"1435":1,"1436":44,"1438":4,"1440":1,"1441":1,"1442":1,"1443":2,"1444":4,"1445":4,"1446":1,"1447":5,"1449":2,"1453":1,"1454":1,"1455":6,"1456":1,"1458":2,"1459":1,"1460":2,"1465":5,"1467":26,"1474":3,"1475":3,"1476":1,"1478":1,"1479":1,"1487":3,"1488":5,"1489":3,"1490":2,"1491":1,"1492":4,"1496":15,"1504":1,"1517":1,"1532":1,"1534":2,"1577":1,"1582":1,"1591":3,"1599":1,"1610":1,"1611":2,"1619":1,"1627":2,"1636":1,"1640":1,"1644":1,"1645":2,"1653":1,"1658":1,"1660":1,"1673":1,"1675":1,"1678":1,"1685":1,"1686":2,"1687":1,"1689":1,"1699":1,"1701":1,"1708":1,"1720":1,"1723":1,"1724":1,"1725":1,"1727":4,"1728":1,"1744":1,"1748":1,"1749":1,"1750":1,"1755":1,"1760":1,"1761":1,"1769":1,"1777":1,"1781":1,"1785":1,"1791":1,"1810":1,"1814":1,"1840":1,"1842":1,"1844":1,"1849":1,"1851":1,"1854":1,"1856":1,"1859":1,"1860":1,"1861":1,"1868":1,"1898":3,"1911":1,"1914":1,"1916":1,"1919":1,"1920":2,"1923":1,"1929":1,"1930":1,"1934":1,"1948":1,"1952":1,"1970":1,"1976":1,"1988":1,"1990":1,"2001":2,"2014":1,"2025":1,"2045":1,"2046":1,"2048":2,"2049":1,"2054":2,"2056":1,"2057":1,"2059":1,"2065":1,"2070":1,"2075":1,"2080":2,"2086":1,"2091":1,"2096":1,"2097":1,"2101":1,"2102":2,"2124":1,"2133":1,"2134":1,"2144":1,"2148":1,"2153":1,"2160":1,"2167":2,"2168":2,"2169":2,"2170":3,"2176":1,"2197":1,"2200":1,"2203":1,"2234":1}}],["abs",{"3":{"1300":2,"1324":1}}],["abstain",{"3":{"1300":1}}],["abstains",{"3":{"1300":1}}],["abstaining",{"3":{"1300":1}}],["abstractlocalizationinterceptor",{"3":{"1324":3}}],["abstracted",{"3":{"1324":2,"1641":1}}],["abstractvalidator",{"2":{"1353":1,"1829":1,"1830":1},"3":{"1271":13,"1300":9,"1309":1,"1353":1,"1359":102,"1396":2,"1402":8,"1415":4,"1436":7,"1829":2,"1830":1}}],["abstracting",{"3":{"1247":1,"1324":1}}],["abstraction",{"0":{"1915":1},"1":{"410":1,"411":1,"412":1,"413":1,"414":1,"415":1,"416":1,"1417":1},"3":{"0":5,"13":1,"39":1,"150":1,"225":1,"226":1,"230":1,"243":1,"248":1,"319":1,"359":1,"361":1,"380":1,"381":1,"410":1,"439":1,"459":1,"460":1,"507":1,"510":1,"513":1,"640":2,"707":1,"732":1,"799":1,"810":1,"815":1,"827":1,"846":2,"1033":1,"1059":1,"1075":1,"1090":1,"1091":1,"1092":1,"1120":1,"1133":1,"1192":3,"1202":3,"1203":3,"1212":1,"1213":2,"1243":1,"1247":3,"1259":2,"1270":4,"1271":1,"1286":18,"1300":13,"1301":5,"1303":1,"1309":5,"1310":2,"1311":9,"1316":1,"1323":3,"1324":10,"1339":4,"1350":2,"1355":1,"1359":15,"1369":1,"1395":5,"1396":16,"1402":1,"1414":1,"1415":3,"1416":2,"1417":12,"1427":5,"1429":1,"1436":27,"1438":1,"1490":1,"1491":1,"1496":2,"1526":1,"1599":1,"1641":1,"1669":1,"1790":1,"1815":3,"1817":1,"1842":1,"1867":1,"1936":1,"1946":1,"1948":1,"1950":1,"1995":1,"2002":1,"2029":1,"2080":1,"2118":2,"2119":1,"2120":1,"2122":1,"2125":1,"2128":1,"2144":1,"2147":1,"2155":1,"2182":1,"2195":1,"2234":3}}],["abstractions",{"2":{"109":1,"1229":1,"1653":1,"1702":1},"3":{"0":2,"39":1,"43":1,"109":6,"166":1,"225":1,"226":1,"230":1,"434":1,"506":1,"507":1,"508":1,"549":1,"725":1,"1050":1,"1074":1,"1090":1,"1168":1,"1203":12,"1207":40,"1212":1,"1219":3,"1220":1,"1222":1,"1227":1,"1228":1,"1229":25,"1237":2,"1270":4,"1271":6,"1278":1,"1286":9,"1300":9,"1301":1,"1302":2,"1309":6,"1310":1,"1311":2,"1312":8,"1323":2,"1324":8,"1339":1,"1350":5,"1351":1,"1359":21,"1369":1,"1381":1,"1395":5,"1396":10,"1402":3,"1415":5,"1436":21,"1438":2,"1489":2,"1496":1,"1509":1,"1538":1,"1577":3,"1653":1,"1656":1,"1660":1,"1702":1,"1789":1,"1793":1,"2017":1,"2027":1,"2029":2,"2044":1,"2113":1,"2229":1,"2232":1}}],["abstractfitnesscontrollerbase",{"3":{"1199":3,"1207":1,"1436":6}}],["abstractanonymousfixturecontrollerbase",{"3":{"1199":4,"1207":1,"1436":5}}],["abstracts",{"3":{"434":1,"507":2,"1324":1,"1416":1,"1417":2,"1496":1}}],["abstract",{"2":{"1051":1},"3":{"0":13,"47":1,"130":1,"132":1,"135":1,"136":1,"137":1,"140":1,"160":1,"166":1,"255":1,"314":1,"443":1,"536":1,"545":1,"549":2,"572":3,"583":1,"657":2,"723":1,"725":3,"726":2,"800":1,"881":1,"905":1,"907":1,"926":2,"953":1,"972":3,"973":1,"975":2,"1033":1,"1050":3,"1051":1,"1052":1,"1059":1,"1083":1,"1087":1,"1114":1,"1116":1,"1117":1,"1119":1,"1161":1,"1168":2,"1169":1,"1170":1,"1192":1,"1202":1,"1203":1,"1212":4,"1214":1,"1226":1,"1229":4,"1234":1,"1237":10,"1239":2,"1247":8,"1259":19,"1265":4,"1270":21,"1272":1,"1273":2,"1284":1,"1286":30,"1287":1,"1289":2,"1294":1,"1300":15,"1301":1,"1311":24,"1322":1,"1323":38,"1324":11,"1334":1,"1339":6,"1359":30,"1360":1,"1363":2,"1369":5,"1380":1,"1384":1,"1395":23,"1396":6,"1412":1,"1415":14,"1417":2,"1427":2,"1428":1,"1429":1,"1431":4,"1433":1,"1436":193,"1488":8,"1489":1,"1496":1,"1510":1,"1526":2,"1539":1,"1565":1,"1576":1,"1577":4,"1650":1,"1651":2,"1658":1,"1664":1,"1671":1,"1697":1,"1700":1,"1719":1,"1734":1,"1782":1,"1810":2,"1815":2,"1833":1,"1849":1,"1857":1,"1869":1,"1931":1,"2043":1,"2056":2,"2074":1,"2076":1,"2103":2,"2104":1,"2113":1,"2116":2,"2128":1,"2180":2,"2234":1}}],["absexp",{"3":{"245":1,"1301":1,"1438":1}}],["absent",{"1":{"807":1,"808":1,"809":1,"810":1,"811":1,"812":1,"813":1,"814":1,"815":1},"3":{"0":7,"66":1,"74":1,"135":1,"157":1,"158":1,"160":2,"177":1,"178":1,"259":1,"265":1,"303":1,"318":1,"343":1,"397":3,"402":1,"404":1,"409":1,"413":1,"415":1,"468":1,"469":1,"486":1,"490":1,"491":1,"492":1,"493":1,"501":1,"545":1,"583":1,"585":2,"599":2,"608":2,"610":1,"632":1,"658":1,"665":2,"673":1,"674":4,"684":1,"702":1,"703":1,"713":1,"726":1,"727":1,"741":1,"789":1,"798":1,"799":1,"807":1,"808":1,"809":3,"813":2,"827":3,"829":1,"904":1,"905":2,"915":1,"926":2,"946":1,"964":1,"972":1,"974":1,"997":1,"999":1,"1018":1,"1020":1,"1033":1,"1091":1,"1093":1,"1108":1,"1109":1,"1212":2,"1253":1,"1259":4,"1264":1,"1270":5,"1271":1,"1275":1,"1281":1,"1286":22,"1291":1,"1300":19,"1301":2,"1304":1,"1309":8,"1311":13,"1312":2,"1315":1,"1320":1,"1323":15,"1324":19,"1326":1,"1328":1,"1332":2,"1333":1,"1335":1,"1336":1,"1339":19,"1342":1,"1343":1,"1344":1,"1350":15,"1353":1,"1359":38,"1368":2,"1369":4,"1377":1,"1380":5,"1391":2,"1395":13,"1396":22,"1402":6,"1406":3,"1415":16,"1416":1,"1417":17,"1425":1,"1427":3,"1430":1,"1431":1,"1432":1,"1435":2,"1436":52,"1438":2,"1441":2,"1442":4,"1443":1,"1450":1,"1451":1,"1455":2,"1463":1,"1467":5,"1472":2,"1486":2,"1488":2,"1489":1,"1490":1,"1492":1,"1496":3,"1526":1,"1534":1,"1537":1,"1571":1,"1575":1,"1577":4,"1582":2,"1583":1,"1584":2,"1591":2,"1596":1,"1600":1,"1612":1,"1631":1,"1635":1,"1639":3,"1670":1,"1684":1,"1749":1,"1797":1,"1823":1,"1856":1,"1881":1,"1898":1,"1923":1,"1927":1,"1934":1,"1941":1,"1948":1,"1970":1,"1975":1,"1982":1,"1984":1,"1995":2,"2009":1,"2011":1,"2013":1,"2048":1,"2069":1,"2120":1,"2122":1,"2158":3,"2160":2,"2177":1,"2179":1,"2181":1,"2182":1,"2198":1,"2205":1,"2234":2}}],["absences",{"3":{"915":1,"1359":1,"1436":1,"2179":1}}],["absence",{"0":{"2175":1},"3":{"0":6,"109":1,"126":1,"136":1,"160":1,"189":1,"233":1,"401":1,"404":1,"468":1,"487":1,"583":3,"585":2,"592":1,"626":2,"627":1,"629":1,"643":1,"674":1,"690":1,"696":1,"698":1,"768":1,"800":1,"811":1,"813":1,"814":1,"838":1,"861":1,"876":1,"912":1,"913":1,"916":1,"931":1,"972":1,"994":1,"1033":1,"1050":1,"1052":1,"1059":2,"1092":1,"1093":1,"1141":1,"1150":1,"1212":1,"1225":1,"1247":1,"1259":2,"1264":1,"1270":1,"1274":1,"1277":1,"1286":6,"1296":1,"1300":3,"1301":1,"1323":3,"1324":5,"1339":3,"1350":9,"1359":11,"1380":1,"1395":5,"1396":9,"1415":3,"1417":7,"1421":1,"1427":1,"1436":10,"1447":1,"1467":1,"1476":1,"1585":1,"1674":1,"1685":1,"1702":1,"1708":1,"1731":1,"1794":1,"1795":1,"1821":1,"2002":1,"2177":1,"2181":1,"2182":1,"2195":1,"2199":1,"2201":1,"2205":1,"2234":1}}],["absorbing",{"3":{"1339":1,"1577":1}}],["absorbed",{"3":{"235":1,"743":1,"800":1,"883":1,"1150":1,"1258":1,"1259":3,"1323":1,"1324":2,"1350":1,"1359":2,"1380":1,"1396":4,"1402":1,"1436":1,"1450":1,"1496":1,"2038":1,"2114":1}}],["absorb",{"3":{"33":1,"111":1,"390":1,"609":1,"642":1,"799":1,"1157":1,"1259":1,"1270":1,"1300":1,"1301":1,"1311":2,"1402":1,"1417":1,"1467":1,"1534":1,"1947":1,"2028":1,"2167":1}}],["absorbs",{"3":{"18":1,"141":1,"162":1,"201":1,"239":1,"244":2,"735":1,"863":1,"897":1,"1254":1,"1300":1,"1327":1,"1339":2,"1395":1,"1444":1,"1456":1,"1475":1,"1571":1,"1671":1,"1806":1,"1922":1,"2043":1}}],["absorption",{"3":{"0":1,"201":1}}],["absolutepath",{"3":{"1339":1,"1436":5}}],["absolutes",{"3":{"1324":1}}],["absoluteuri",{"3":{"1324":1,"1415":1}}],["absoluteurl",{"3":{"1324":2,"1384":1,"1395":12}}],["absoluteurlrules<",{"3":{"1271":2}}],["absoluteurlrules",{"3":{"1199":12,"1203":1,"1207":1,"1271":5,"1324":2,"1353":1,"1359":28,"1829":1}}],["absoluteurlattributetests",{"3":{"1199":1,"1207":5,"1438":2}}],["absoluteurlattribute",{"2":{"1669":1},"3":{"1199":1,"1203":1,"1207":2,"1271":3,"1324":8,"1395":7,"1669":1}}],["absoluteexpirationrelativetonow",{"2":{"243":1,"254":1,"257":1,"1301":1},"3":{"243":1,"254":1,"257":1,"1301":3}}],["absolutely",{"3":{"0":1,"591":1,"1492":1,"2048":1,"2050":1,"2234":1}}],["absolute",{"3":{"0":4,"219":1,"243":1,"350":1,"420":1,"500":2,"501":2,"590":1,"591":2,"592":3,"631":1,"860":3,"862":2,"1116":1,"1184":1,"1212":2,"1237":3,"1271":3,"1286":1,"1300":2,"1301":2,"1311":1,"1323":7,"1324":34,"1334":1,"1339":6,"1344":1,"1350":4,"1359":29,"1369":1,"1388":1,"1395":6,"1396":1,"1417":5,"1427":2,"1436":4,"1438":1,"1443":1,"1467":1,"1492":5,"1496":1,"1526":1,"1631":4,"1640":1,"1666":1,"1708":1,"1749":1,"1764":1,"1765":1,"1767":1,"1976":1,"1984":2,"1985":1,"2048":4,"2128":1,"2175":1}}],["apm",{"3":{"1894":1}}],["aps",{"3":{"1323":3,"1417":1}}],["apache",{"3":{"0":1,"440":1,"1075":1,"1577":1,"1673":1,"1780":1,"1787":1,"1793":1,"1802":1,"1807":1,"1812":1,"1817":1,"1827":1,"1834":1,"1846":1,"1853":1,"1862":1,"1868":1,"1877":1,"1886":1,"1892":1,"1899":1,"1905":1,"1912":1,"1924":1,"1930":1,"1941":1,"1950":1,"1959":1,"1965":1,"1972":1,"1979":1,"1985":1,"1992":1,"1998":1,"2003":1,"2015":1,"2029":1,"2039":1,"2050":1,"2061":1,"2071":1,"2082":1,"2088":1,"2100":1,"2110":1,"2117":1,"2125":1,"2129":1,"2141":1,"2148":1,"2155":1,"2206":1,"2213":1,"2218":1,"2231":1,"2236":1,"2244":1}}],["apart",{"3":{"0":2,"23":1,"62":1,"109":1,"235":1,"397":1,"449":1,"626":2,"629":1,"648":1,"691":1,"767":1,"783":1,"784":1,"799":1,"881":1,"974":1,"1059":1,"1068":1,"1083":1,"1124":1,"1126":1,"1191":1,"1211":1,"1237":3,"1238":1,"1240":1,"1247":2,"1259":1,"1270":3,"1271":2,"1280":1,"1281":1,"1286":5,"1290":1,"1299":1,"1300":8,"1301":3,"1305":1,"1309":4,"1311":3,"1323":3,"1324":10,"1325":1,"1332":1,"1339":5,"1350":5,"1358":2,"1359":25,"1369":1,"1371":1,"1380":2,"1395":10,"1396":18,"1398":1,"1402":6,"1405":1,"1410":1,"1415":7,"1416":1,"1417":3,"1436":6,"1438":2,"1441":1,"1443":2,"1458":1,"1459":2,"1487":1,"1488":1,"1496":1,"1503":1,"1653":1,"1677":1,"1748":1,"1805":1,"1834":1,"1856":1,"1948":1,"1982":1,"1985":1,"1995":1,"2056":1,"2085":1,"2132":1,"2133":1}}],["april",{"3":{"0":1,"1074":1}}],["apnsplatform",{"3":{"1309":1}}],["apnspushdevicetokenprovider",{"2":{"434":1,"436":1},"3":{"434":2,"436":2,"1416":1,"1417":4}}],["apnstokenbridge",{"2":{"436":1},"3":{"436":1,"1416":3,"1417":1}}],["apns",{"3":{"0":2,"413":1,"432":1,"433":2,"434":1,"435":1,"436":1,"1286":1,"1308":1,"1309":3,"1323":7,"1416":6,"1417":15,"1467":1,"1481":1,"1496":1,"1669":2,"1932":1,"1936":1,"1940":1,"2124":1,"2234":1}}],["api1",{"3":{"1994":1}}],["apibase",{"3":{"1417":1}}],["apibaseaddress",{"3":{"1311":1}}],["api=1",{"3":{"1417":1}}],["apiuri",{"3":{"1324":1}}],["apiuserpreferencereader",{"3":{"1199":2,"1203":1,"1207":2,"1300":2,"1324":11,"1496":1}}],["apiuserpreferencewritertests",{"3":{"1199":1,"1207":2,"1324":1,"1438":2}}],["apiuserpreferencewriter",{"3":{"1199":3,"1203":1,"1207":3,"1300":2,"1324":31}}],["apioptions",{"3":{"1324":2}}],["apiece",{"3":{"1396":1}}],["apiexplorer",{"2":{"2133":1},"3":{"1311":1,"2133":1}}],["apiexplorersettings",{"3":{"1311":1}}],["apiendpoint",{"2":{"1188":1},"3":{"1184":2,"1188":1,"1324":30,"1416":2,"1436":3,"1441":1,"1489":1,"2152":1}}],["apidesign",{"3":{"1286":1,"1324":1}}],["apidescription",{"2":{"451":1,"452":1},"3":{"451":1,"452":1,"1311":1}}],["apifiledownloadbuttontests",{"3":{"1199":1,"1207":2,"1324":1,"1438":2}}],["apifiledownloadbutton",{"3":{"1184":2,"1199":2,"1203":1,"1207":2,"1324":12,"1436":3}}],["apikeycredential",{"2":{"1420":1},"3":{"1420":1,"1427":2}}],["apikey",{"2":{"1017":1},"3":{"1017":2,"1091":2,"1096":1,"1419":3,"1427":7,"1467":2,"1492":1,"2175":2}}],["apiparameterdescription",{"2":{"448":1,"2133":1},"3":{"448":1,"2133":1}}],["apiparameterdescriptorbackfillprovidertests",{"3":{"1199":1,"1207":4}}],["apiparameterdescriptorbackfillprovider",{"2":{"448":1,"2133":1},"3":{"0":1,"448":2,"1199":3,"1203":1,"1207":2,"1311":11,"2133":2}}],["apiversioningtests",{"3":{"448":3,"572":3,"1199":1,"1207":2,"1436":2,"1488":1,"1526":1,"1535":1,"1591":1,"2133":2}}],["apiversion",{"2":{"450":1,"455":1,"1753":1,"1978":1,"2134":1},"3":{"330":1,"350":1,"448":4,"450":1,"455":2,"1309":2,"1311":7,"1376":3,"1380":5,"1415":5,"1436":3,"1489":1,"1496":1,"1526":1,"1591":2,"1753":1,"1978":1,"1988":1,"2133":3,"2134":2}}],["apicontrollerattribute",{"3":{"1436":1}}],["apicontroller",{"2":{"455":1,"1978":1},"3":{"330":1,"350":1,"455":1,"1309":1,"1311":7,"1380":2,"1415":4,"1436":2,"1978":1,"1988":1}}],["apicontrollerbasetests",{"3":{"1199":2,"1207":3,"1311":2}}],["apicontrollerbase",{"2":{"109":1,"111":1,"265":1,"300":1,"1224":1,"1498":1,"1805":1,"1930":1,"2019":1},"3":{"109":6,"111":1,"265":1,"300":2,"306":1,"1199":31,"1203":1,"1207":2,"1224":5,"1229":4,"1270":1,"1300":1,"1309":4,"1311":38,"1312":3,"1323":1,"1371":2,"1380":8,"1396":6,"1402":3,"1415":4,"1436":11,"1438":1,"1487":1,"1489":1,"1496":2,"1498":1,"1805":1,"1927":1,"1930":1,"2019":1}}],["apiclientname",{"3":{"1324":4}}],["apiclientregistrationtests",{"3":{"1199":1,"1207":2,"1324":1}}],["apiclient",{"3":{"0":2,"265":1,"507":1,"514":1,"881":1,"883":1,"1183":1,"1184":2,"1324":38,"1395":2,"1396":7,"1416":3,"1417":3,"1436":4,"1438":1,"2076":1}}],["apisectionname",{"2":{"1324":1},"3":{"1324":3}}],["apisettings",{"2":{"216":1,"219":1,"1184":1,"2154":1},"3":{"214":1,"216":2,"219":1,"649":1,"674":1,"881":1,"1184":2,"1188":1,"1199":24,"1203":1,"1207":2,"1324":29,"1417":1,"1436":1,"1496":1,"1653":1,"2152":2,"2154":2}}],["apis",{"1":{"1906":1,"1907":1,"1908":1,"1909":1,"1910":1,"1911":1,"1912":1},"3":{"0":1,"412":1,"447":1,"774":1,"1050":1,"1311":1,"1324":1,"1339":2,"1350":1,"1369":1,"1380":1,"1396":1,"1415":2,"1417":4,"1436":4,"1546":1,"1548":1,"1627":1,"1735":1,"1906":1,"1926":1,"1994":1,"2044":1,"2118":1,"2131":1,"2132":1,"2135":1,"2210":1}}],["api",{"0":{"138":1,"1546":1,"1640":1,"1666":1,"2168":1,"2203":1,"2210":1},"1":{"445":1,"446":1,"447":1,"448":1,"449":1,"450":1,"451":1,"452":1,"453":1,"454":1,"455":1,"1181":1,"1182":1,"1183":1,"1184":1,"1185":1,"1186":1,"1187":1,"1188":1,"1189":1,"1311":1,"1370":1,"1371":1,"1372":1,"1373":1,"1374":1,"1375":1,"1376":1,"1377":1,"1378":1,"1379":1,"1380":1,"1999":1,"2000":1,"2001":1,"2002":1,"2003":1,"2131":1,"2132":1,"2133":1,"2134":1,"2135":1},"2":{"61":1,"160":1,"207":1,"250":1,"252":1,"388":1,"460":1,"509":1,"527":1,"789":1,"826":1,"938":1,"1020":2,"1207":1,"1271":1,"1336":1,"1370":1,"1380":7,"1455":1,"1466":1,"1470":1,"1472":1,"1489":1,"1504":1,"1615":1,"1648":1,"1650":2,"1653":1,"1702":1,"1793":1,"1807":1,"1812":1,"1817":1,"1827":1,"1846":1,"1853":1,"1868":1,"1877":1,"1886":1,"1892":1,"1899":1,"1912":1,"1924":1,"1930":1,"1941":1,"1965":1,"1972":1,"1975":1,"1979":1,"1992":1,"1998":1,"2003":1,"2015":1,"2117":1,"2135":1,"2171":1,"2182":1,"2195":1,"2205":1,"2213":1},"3":{"0":26,"4":1,"31":1,"34":1,"42":1,"58":1,"59":1,"61":1,"81":2,"99":1,"103":2,"109":15,"110":1,"111":2,"113":1,"125":2,"130":4,"135":7,"138":1,"139":1,"140":1,"141":1,"142":2,"143":1,"147":1,"150":1,"157":2,"160":5,"161":2,"166":1,"175":3,"178":3,"179":3,"181":1,"186":11,"189":4,"190":2,"206":2,"207":5,"208":2,"209":4,"210":1,"212":1,"213":2,"214":2,"215":1,"216":2,"220":2,"225":1,"235":1,"238":1,"241":1,"243":17,"245":1,"246":1,"250":1,"252":1,"255":4,"256":4,"258":4,"259":3,"265":6,"290":1,"295":2,"296":1,"300":3,"301":1,"303":2,"306":3,"318":13,"325":3,"330":4,"332":1,"337":1,"341":6,"342":1,"343":1,"345":1,"350":1,"352":3,"354":1,"384":2,"386":1,"387":1,"388":3,"391":2,"397":1,"400":1,"407":2,"409":1,"418":2,"419":2,"423":2,"424":1,"426":1,"428":1,"434":3,"445":1,"446":1,"448":20,"449":1,"450":1,"453":1,"454":2,"458":1,"459":4,"460":1,"463":1,"464":2,"470":1,"483":1,"506":3,"507":3,"509":3,"511":2,"517":2,"527":2,"528":6,"539":1,"540":1,"545":3,"549":1,"550":1,"551":1,"556":2,"558":2,"571":2,"572":1,"576":1,"579":1,"583":13,"585":1,"586":2,"591":1,"626":3,"627":2,"628":1,"629":1,"635":1,"656":1,"657":4,"660":1,"674":11,"675":2,"676":2,"690":1,"691":1,"692":1,"698":3,"707":1,"723":1,"725":6,"727":1,"728":1,"733":2,"734":1,"740":3,"741":6,"743":3,"744":1,"749":4,"751":1,"773":2,"774":4,"775":1,"776":2,"789":3,"790":2,"793":1,"799":1,"803":1,"826":1,"827":4,"829":1,"833":1,"854":1,"880":2,"881":6,"882":1,"883":1,"897":3,"905":1,"906":1,"921":1,"922":1,"938":2,"939":1,"940":1,"942":1,"956":1,"960":1,"963":1,"964":3,"965":1,"966":1,"968":1,"972":1,"975":1,"976":1,"979":2,"980":20,"981":1,"982":1,"983":1,"984":1,"995":1,"996":3,"999":1,"1003":1,"1004":7,"1006":3,"1007":1,"1008":2,"1011":1,"1012":1,"1017":2,"1018":3,"1020":2,"1026":2,"1034":2,"1035":1,"1049":1,"1050":5,"1052":2,"1053":1,"1055":2,"1058":1,"1059":3,"1061":2,"1067":2,"1076":1,"1078":1,"1091":1,"1099":2,"1103":1,"1108":2,"1116":3,"1117":1,"1119":1,"1124":4,"1150":2,"1161":1,"1163":1,"1170":1,"1174":1,"1175":1,"1176":1,"1181":1,"1182":1,"1183":5,"1184":9,"1185":3,"1186":6,"1187":5,"1188":2,"1192":5,"1198":6,"1199":408,"1201":2,"1202":6,"1203":206,"1206":10,"1207":1344,"1208":60,"1211":3,"1212":11,"1213":4,"1216":1,"1218":1,"1222":2,"1224":1,"1225":1,"1226":1,"1227":2,"1229":30,"1234":1,"1235":1,"1237":21,"1239":1,"1241":2,"1245":2,"1247":26,"1249":2,"1259":13,"1266":1,"1269":2,"1270":23,"1271":11,"1281":1,"1285":1,"1286":36,"1287":2,"1288":3,"1289":1,"1290":1,"1294":1,"1297":14,"1298":9,"1300":422,"1301":14,"1303":1,"1304":4,"1306":1,"1308":6,"1309":59,"1310":1,"1311":540,"1312":9,"1314":1,"1315":3,"1320":2,"1323":63,"1324":214,"1336":2,"1337":2,"1338":1,"1339":23,"1341":2,"1347":6,"1348":1,"1349":1,"1350":59,"1351":1,"1353":1,"1358":6,"1359":299,"1364":3,"1365":1,"1367":1,"1369":9,"1370":5,"1371":7,"1372":2,"1373":2,"1374":1,"1376":5,"1377":8,"1379":2,"1380":254,"1382":5,"1384":1,"1387":4,"1389":6,"1390":2,"1391":2,"1395":84,"1396":229,"1401":1,"1402":77,"1403":1,"1404":1,"1406":4,"1408":1,"1409":1,"1410":1,"1411":1,"1412":1,"1414":2,"1415":182,"1416":8,"1417":32,"1420":1,"1421":1,"1425":1,"1427":3,"1431":3,"1435":2,"1436":290,"1437":19,"1438":27,"1441":5,"1443":2,"1444":1,"1447":2,"1454":3,"1455":9,"1466":2,"1467":9,"1470":1,"1472":3,"1475":1,"1481":4,"1486":4,"1487":6,"1488":3,"1489":10,"1492":6,"1493":1,"1496":52,"1499":1,"1503":1,"1504":1,"1509":1,"1513":2,"1524":1,"1526":13,"1530":1,"1531":2,"1532":1,"1534":1,"1535":3,"1540":1,"1546":2,"1547":1,"1551":1,"1563":1,"1577":22,"1582":5,"1583":1,"1585":3,"1586":2,"1591":8,"1596":1,"1597":1,"1600":1,"1602":1,"1611":1,"1615":1,"1619":1,"1627":4,"1630":2,"1631":7,"1632":76,"1635":1,"1636":2,"1638":1,"1639":21,"1640":27,"1641":10,"1647":2,"1648":1,"1650":2,"1651":3,"1653":10,"1656":1,"1660":3,"1661":1,"1662":1,"1663":1,"1665":1,"1666":1,"1669":3,"1670":1,"1673":3,"1675":1,"1681":1,"1685":3,"1686":2,"1687":1,"1689":1,"1693":1,"1698":3,"1702":4,"1707":1,"1718":3,"1719":9,"1722":1,"1724":2,"1727":4,"1728":2,"1729":2,"1732":1,"1736":2,"1737":1,"1749":1,"1750":1,"1753":3,"1755":1,"1761":2,"1765":5,"1770":2,"1771":1,"1773":1,"1776":1,"1779":4,"1781":2,"1793":1,"1796":1,"1805":2,"1807":1,"1810":1,"1812":1,"1817":1,"1821":1,"1827":1,"1831":1,"1834":1,"1844":1,"1846":1,"1853":1,"1868":1,"1871":1,"1877":1,"1883":1,"1886":1,"1892":1,"1895":1,"1898":2,"1899":1,"1912":3,"1913":1,"1919":1,"1921":1,"1922":3,"1924":1,"1927":1,"1928":2,"1929":3,"1930":3,"1931":1,"1932":2,"1941":1,"1951":1,"1959":2,"1965":1,"1966":2,"1967":2,"1968":12,"1971":8,"1972":8,"1975":1,"1979":1,"1985":1,"1988":2,"1991":2,"1992":4,"1994":1,"1995":6,"1996":7,"1998":4,"1999":1,"2001":6,"2002":1,"2003":2,"2005":1,"2013":4,"2015":1,"2022":1,"2025":1,"2044":2,"2056":1,"2068":1,"2072":1,"2073":1,"2076":1,"2082":1,"2083":1,"2085":4,"2090":1,"2091":1,"2097":1,"2099":1,"2103":1,"2106":2,"2107":1,"2108":1,"2109":1,"2113":1,"2117":1,"2130":1,"2131":2,"2132":1,"2133":10,"2135":5,"2138":1,"2139":1,"2140":1,"2141":1,"2149":2,"2151":1,"2152":6,"2154":2,"2155":3,"2158":1,"2171":1,"2182":1,"2195":1,"2196":1,"2202":1,"2205":1,"2210":1,"2212":2,"2213":1,"2215":1,"2221":2,"2222":4,"2227":1,"2229":4,"2234":2,"2238":1,"2241":1}}],["app→db",{"3":{"1526":1}}],["apptraces",{"3":{"1467":3,"1476":1}}],["appthemebinding",{"3":{"1416":1}}],["apptheme",{"3":{"1416":2}}],["appxmanifest",{"3":{"1416":2}}],["appwidgetmanager",{"3":{"1416":1}}],["appwidgetprovider",{"3":{"1416":1}}],["appicon",{"3":{"1416":1}}],["appcontext",{"2":{"1035":1},"3":{"1034":1,"1035":1,"1427":2,"1436":1,"1489":1}}],["apparent",{"3":{"1214":1}}],["appaction",{"3":{"1416":3}}],["appactions",{"3":{"1416":5}}],["appactionsinitializer",{"2":{"428":1},"3":{"428":1,"1199":2,"1203":1,"1207":2,"1416":17}}],["appactionroutemaptests",{"3":{"1199":1,"1207":2,"1324":2,"1416":2,"1438":1}}],["appactionroutemap",{"2":{"428":1},"3":{"428":1,"1199":4,"1203":1,"1207":2,"1416":18}}],["appassociationendpointtests",{"3":{"1199":1,"1207":2,"1311":2}}],["appassociationendpointextensions",{"3":{"418":2,"423":1,"424":1,"1199":2,"1203":1,"1207":2,"1208":1,"1311":7,"1496":1}}],["appassociation",{"2":{"429":1},"3":{"418":2,"423":1,"424":1,"425":1,"426":1,"428":2,"429":2,"1311":2,"1481":1}}],["appassociationoptions",{"2":{"418":1,"425":1,"426":1,"428":1},"3":{"418":1,"425":1,"426":1,"428":1,"429":1,"1199":3,"1203":1,"1207":2,"1311":12,"1496":1}}],["appassembly",{"3":{"0":1,"649":1,"905":1,"1416":1}}],["appdatadirectory",{"3":{"1417":1}}],["appdelegate",{"3":{"1199":2,"1203":1,"1207":4,"1212":1,"1416":24,"1417":3,"1496":4}}],["appdependencies",{"2":{"1476":1},"3":{"402":1,"1333":1,"1339":2,"1443":1,"1446":1,"1447":1,"1467":4,"1476":1,"1677":2}}],["appdomainsource",{"3":{"1417":1}}],["appdomain",{"2":{"413":1},"3":{"413":1,"1212":1,"1286":5,"1311":1,"1315":2,"1323":1,"1416":2,"1417":5,"1881":1}}],["appraisal",{"3":{"2222":1}}],["appraiser",{"3":{"2222":1}}],["appresumedeventargs",{"3":{"1199":4,"1203":1,"1207":2,"1417":10,"1496":1}}],["apprendermode",{"3":{"556":1}}],["apprequests",{"2":{"612":1,"1450":1,"1451":1},"3":{"402":1,"612":1,"1333":1,"1339":2,"1443":3,"1446":1,"1447":1,"1450":1,"1451":1,"1467":7,"1476":1,"1677":1,"2011":1}}],["approvals",{"3":{"1455":1}}],["approval",{"3":{"1402":2,"1436":3,"1457":1,"1461":1,"1467":1,"1641":1,"1765":1}}],["approving",{"3":{"1350":1,"1396":1,"1399":1,"1402":1,"1426":1,"1459":1,"1632":1}}],["approvequestionasync",{"3":{"1402":1}}],["approveasync",{"3":{"1396":2,"1402":1}}],["approve",{"3":{"1396":2,"1397":1,"1398":1,"1402":17,"1436":1,"1526":1}}],["approves",{"3":{"1349":1,"1350":1,"1402":1,"1632":1}}],["approver",{"3":{"628":1}}],["approvedquestions",{"3":{"1402":2}}],["approved",{"3":{"522":1,"523":1,"524":1,"1100":1,"1286":1,"1311":1,"1349":1,"1350":4,"1396":4,"1398":2,"1399":1,"1401":3,"1402":46,"1436":1,"1496":16,"1630":2,"1632":8,"2044":1}}],["approximation",{"3":{"1286":1,"1427":1,"1500":2,"2060":1}}],["approximates",{"3":{"1436":1}}],["approximated",{"3":{"1436":1}}],["approximate",{"3":{"827":1,"1339":1,"1417":4,"1427":1,"1591":1}}],["approlename",{"3":{"609":1,"1467":1}}],["appropriately",{"3":{"1237":1,"1562":1}}],["appropriate",{"3":{"86":1,"1286":1,"1324":1,"1350":1,"1416":1,"1417":1,"1539":1,"1549":1,"1568":1,"1632":2,"1639":2,"1765":1}}],["approachingquota",{"2":{"403":1,"612":1},"3":{"403":1,"612":1}}],["approach",{"3":{"69":1,"79":1,"131":1,"455":1,"1060":1,"1259":1,"1286":1,"1395":1,"1436":7,"1445":1,"1638":1,"1639":1,"1819":1,"1830":1,"1889":1}}],["approaches",{"3":{"4":1,"1153":1,"1323":1,"1324":1,"1396":1,"1943":1}}],["appbarbackground",{"3":{"1324":1}}],["appbarcomponenttypes",{"2":{"649":1,"650":1},"3":{"649":2,"650":1,"1324":3,"1395":1}}],["appbar",{"3":{"273":1,"1436":2,"2085":1}}],["appmetrics",{"3":{"0":1,"914":1,"1443":2,"1451":1,"1467":9,"1476":1,"1677":2}}],["appetite",{"3":{"2033":1}}],["appearance",{"3":{"1212":1,"1324":1,"2232":1}}],["appearing",{"3":{"629":1,"827":1,"840":1,"1369":2,"1396":1,"1417":1,"1436":7,"1468":1,"1488":2}}],["appeared",{"3":{"254":1,"454":1,"1324":2,"1492":1,"2121":1}}],["appear",{"3":{"37":1,"303":1,"502":1,"564":1,"799":1,"812":1,"964":1,"1116":1,"1247":2,"1270":1,"1285":1,"1286":5,"1300":3,"1309":1,"1311":1,"1323":3,"1324":4,"1339":3,"1350":2,"1359":6,"1395":7,"1396":6,"1402":2,"1404":1,"1415":2,"1416":3,"1417":4,"1433":1,"1436":28,"1438":4,"1441":1,"1467":3,"1470":1,"1489":1,"1496":1,"1499":1,"1625":1,"1626":2,"1627":1,"1631":1,"1700":1,"1760":1,"1764":1,"2017":1}}],["appears",{"3":{"0":5,"95":1,"265":1,"349":1,"390":1,"420":1,"450":1,"470":1,"490":1,"491":1,"492":2,"493":1,"545":1,"547":1,"549":1,"550":1,"556":1,"599":1,"634":1,"639":1,"649":1,"676":2,"700":1,"773":1,"782":1,"810":1,"827":3,"832":1,"833":1,"838":1,"881":1,"891":1,"963":1,"980":1,"1004":1,"1026":1,"1079":1,"1082":1,"1085":1,"1109":1,"1116":1,"1155":1,"1190":1,"1191":1,"1193":1,"1200":1,"1202":1,"1229":2,"1242":2,"1247":2,"1270":2,"1273":1,"1286":5,"1289":1,"1300":7,"1309":1,"1311":4,"1312":1,"1323":3,"1324":5,"1339":4,"1350":3,"1358":1,"1359":15,"1369":1,"1380":2,"1395":4,"1396":7,"1402":1,"1413":1,"1415":5,"1417":4,"1425":1,"1433":2,"1436":22,"1438":2,"1443":1,"1456":1,"1467":2,"1469":1,"1489":1,"1496":3,"1526":1,"1577":2,"1582":1,"1583":1,"1626":1,"1627":1,"1630":1,"1631":2,"1632":1,"1639":1,"1651":1,"1653":2,"1654":1,"1663":1,"1698":1,"1749":1,"1815":1,"1881":1,"1913":1,"1970":1,"1994":1,"2066":1,"2134":1,"2161":1,"2182":1}}],["appendix",{"0":{"1572":1}}],["appending",{"3":{"749":1,"889":1,"890":2,"1267":1,"1270":1,"1281":1,"1286":4,"1300":1,"1322":1,"1324":1,"1339":2,"1359":1,"1369":1,"1395":1,"1396":1,"1411":1,"1415":1,"1436":2,"1826":1,"2234":1}}],["appendquery",{"3":{"1311":2}}],["appendevent",{"3":{"1300":1}}],["appended",{"3":{"0":4,"21":1,"122":1,"166":1,"545":1,"566":1,"583":1,"601":1,"665":1,"889":1,"890":2,"1034":1,"1140":1,"1174":1,"1195":1,"1212":1,"1242":1,"1247":2,"1270":1,"1279":1,"1286":2,"1300":3,"1311":3,"1312":1,"1323":2,"1324":5,"1339":2,"1359":1,"1369":1,"1395":1,"1415":1,"1417":1,"1436":4,"1438":2,"1455":3,"1466":4,"1661":1,"1664":1,"1701":1,"1729":1,"1749":1,"1766":1,"1779":3,"1920":1,"2091":1}}],["appendline",{"3":{"1300":2,"1496":1}}],["appendable",{"3":{"1237":1}}],["appends",{"3":{"0":1,"123":1,"177":1,"219":1,"246":1,"350":1,"549":1,"633":1,"887":1,"891":1,"905":1,"1133":1,"1237":1,"1247":3,"1267":1,"1269":1,"1270":1,"1282":1,"1286":6,"1300":10,"1311":6,"1323":2,"1324":10,"1339":2,"1359":6,"1380":5,"1383":1,"1386":1,"1388":1,"1389":1,"1395":4,"1396":1,"1402":2,"1412":1,"1415":6,"1416":5,"1417":3,"1436":6,"1489":1,"1666":1,"1727":1,"1840":1,"1852":1,"1920":1,"1988":1,"2066":1,"2199":1,"2234":1}}],["append",{"3":{"0":1,"137":1,"138":1,"139":1,"140":1,"265":1,"420":1,"633":1,"690":1,"692":1,"719":1,"784":1,"889":1,"891":1,"1140":1,"1142":2,"1144":1,"1179":1,"1192":1,"1212":1,"1242":1,"1281":1,"1286":6,"1300":5,"1311":1,"1323":1,"1324":6,"1359":1,"1395":1,"1396":8,"1436":1,"1467":1,"1496":4,"1629":1,"1631":1,"1638":1,"1839":1,"1975":1,"2234":1}}],["apphostbicepparitytests",{"3":{"1199":1,"1207":2,"1437":2,"1438":2,"1487":1,"1489":2,"1493":1}}],["apphostenvironmentrequirement",{"2":{"1069":1,"1428":1,"1430":1},"3":{"1069":1,"1199":6,"1207":2,"1339":3,"1428":1,"1430":2,"1488":2}}],["apphostenvironmentgatetests",{"3":{"1199":1,"1207":2,"1487":1}}],["apphostenvironmentgate",{"2":{"1067":1,"1430":1,"1449":1,"2057":1},"3":{"1067":3,"1199":3,"1207":2,"1428":1,"1430":4,"1449":1,"1488":2,"2057":1}}],["apphostprobepathstests",{"3":{"1199":1,"1207":2,"1487":1}}],["apphostprobepaths",{"3":{"1067":1,"1199":5,"1207":2,"1428":1,"1430":2,"1488":2}}],["apphostreadinessbudgettests",{"3":{"1199":1,"1207":2,"1487":1}}],["apphostreadinessbudget",{"2":{"1430":1},"3":{"1067":1,"1199":5,"1207":2,"1339":2,"1428":1,"1430":2,"1449":2,"1488":2}}],["apphostcompositionsmoketests",{"3":{"914":1,"1067":1,"1069":1,"1487":1,"1496":1}}],["apphosttestbase",{"2":{"2057":1},"3":{"914":1,"1067":3,"1069":1,"1199":3,"1207":2,"1328":1,"1339":1,"1428":1,"1430":2,"1449":4,"1488":2,"2056":1,"2057":1}}],["apphosttests",{"2":{"1430":1,"1437":1,"1487":1,"1488":1,"1496":1},"3":{"913":2,"917":1,"1067":2,"1069":1,"1199":3,"1203":1,"1206":1,"1207":9,"1430":2,"1437":1,"1486":1,"1487":1,"1488":1,"1496":1}}],["apphostfixturebase",{"2":{"912":1,"1069":1,"1328":1,"1460":1,"2057":1},"3":{"912":1,"913":1,"914":2,"1067":5,"1069":1,"1070":1,"1199":5,"1207":4,"1212":1,"1328":1,"1339":5,"1428":1,"1430":8,"1436":3,"1449":5,"1460":1,"1488":4,"1490":1,"1496":1,"2056":1,"2057":1}}],["apphosts",{"3":{"99":1,"555":1,"556":1,"559":1,"1339":1,"1444":1,"1487":1}}],["apphost",{"0":{"1430":1,"1441":1,"1444":1,"1449":1,"2009":1,"2023":1,"2057":1},"1":{"1064":1,"1065":1,"1066":1,"1067":1,"1068":1,"1069":1,"1070":1,"1071":1},"2":{"913":1,"914":1,"1069":2,"1325":1,"1328":1,"1449":1,"1492":1,"1657":1,"2057":1},"3":{"0":13,"31":2,"55":1,"59":2,"63":2,"92":1,"93":2,"95":2,"96":2,"98":2,"99":1,"104":2,"164":1,"166":1,"350":2,"373":1,"554":3,"556":2,"557":1,"624":1,"626":1,"629":1,"632":3,"633":4,"638":3,"640":13,"641":1,"642":4,"644":5,"837":3,"838":2,"839":2,"841":1,"854":2,"857":2,"912":2,"913":12,"914":8,"915":1,"916":2,"917":5,"918":1,"939":1,"980":1,"1033":1,"1034":1,"1037":1,"1038":1,"1064":1,"1065":1,"1066":5,"1067":14,"1068":1,"1069":7,"1070":1,"1150":2,"1192":2,"1199":4,"1202":1,"1203":5,"1206":2,"1207":12,"1208":2,"1212":5,"1213":1,"1309":3,"1311":5,"1312":2,"1323":3,"1325":3,"1326":10,"1327":2,"1328":5,"1334":1,"1339":86,"1363":1,"1364":2,"1369":3,"1377":2,"1378":2,"1380":5,"1396":4,"1407":2,"1412":1,"1415":5,"1428":1,"1430":8,"1436":7,"1437":6,"1438":5,"1439":1,"1440":3,"1441":26,"1442":2,"1444":11,"1445":1,"1446":5,"1448":1,"1449":7,"1450":1,"1451":3,"1453":7,"1455":4,"1456":6,"1460":3,"1461":2,"1464":1,"1467":2,"1486":4,"1487":5,"1488":5,"1489":5,"1490":13,"1492":6,"1493":1,"1496":6,"1503":1,"1526":9,"1535":1,"1570":1,"1577":4,"1582":1,"1596":2,"1606":1,"1627":2,"1641":1,"1653":8,"1656":1,"1657":1,"1660":1,"1661":1,"1663":1,"1670":2,"1683":1,"1684":2,"1689":1,"1692":1,"1698":1,"1700":2,"1718":5,"1720":1,"1724":1,"1727":7,"1728":1,"1729":2,"1740":1,"1792":1,"1842":1,"1896":1,"1899":1,"1978":1,"2005":2,"2006":2,"2009":5,"2010":1,"2014":1,"2015":5,"2023":1,"2024":1,"2029":1,"2031":1,"2056":2,"2057":5,"2060":1,"2061":1,"2091":2,"2099":1,"2229":1,"2234":4}}],["app",{"0":{"1291":1,"1727":1,"1937":1,"2009":1,"2115":1},"1":{"417":1,"418":1,"419":1,"420":1,"421":1,"422":1,"423":1,"424":1,"425":1,"426":1,"427":1,"428":1,"429":1,"430":1,"631":1,"632":1,"633":1,"634":1,"635":1,"636":1,"1302":1,"1303":1,"1304":1,"1305":1,"1306":1,"1307":1,"1308":1,"1309":1,"1692":1,"1693":1,"1694":1,"1695":1,"1696":1,"1697":1,"1698":1,"1699":1,"1700":1,"1701":1,"1702":1,"1703":1,"1704":1,"1705":1,"1726":1,"1727":1,"1728":1,"1729":1,"1730":1,"1731":1,"1931":1,"1932":1,"1933":1,"1934":1,"1935":1,"1936":1,"1937":1,"1938":1,"1939":1,"1940":1,"1941":1,"2004":1,"2005":1,"2006":1,"2007":1,"2008":1,"2009":1,"2010":1,"2011":1,"2012":1,"2013":1,"2014":1,"2015":1},"2":{"220":1,"254":1,"256":1,"258":1,"418":1,"425":1,"426":1,"428":1,"454":1,"464":2,"466":1,"554":1,"555":1,"559":1,"648":1,"674":1,"760":1,"774":1,"776":1,"1091":1,"1613":1,"1699":1,"1727":1,"1787":1,"1921":1,"2005":1,"2077":1,"2091":1,"2134":1,"2153":1},"3":{"0":40,"38":1,"39":1,"46":1,"60":1,"68":2,"72":1,"85":1,"92":1,"93":1,"94":2,"95":2,"96":1,"98":1,"101":1,"102":3,"145":2,"147":3,"175":3,"180":1,"186":3,"208":2,"213":2,"215":1,"216":3,"217":1,"219":3,"220":1,"223":2,"224":1,"225":2,"226":1,"230":2,"235":3,"237":1,"241":1,"242":1,"243":3,"254":1,"256":1,"258":2,"259":1,"261":1,"264":1,"265":4,"267":1,"272":1,"273":3,"276":1,"281":1,"284":1,"293":1,"309":1,"310":4,"311":1,"314":3,"349":1,"350":6,"351":3,"352":1,"355":1,"360":1,"378":1,"381":1,"382":1,"405":1,"413":7,"414":1,"417":1,"418":6,"419":8,"420":4,"422":4,"423":3,"424":1,"425":1,"426":2,"427":5,"428":4,"429":1,"433":1,"435":1,"440":1,"441":1,"454":1,"457":1,"459":10,"460":2,"461":2,"463":5,"464":4,"465":5,"466":1,"470":1,"497":3,"498":3,"499":6,"500":1,"511":4,"512":1,"545":1,"551":2,"554":1,"555":2,"556":17,"559":2,"562":1,"563":1,"564":1,"566":1,"576":1,"598":8,"599":10,"600":1,"601":6,"603":1,"617":1,"618":2,"619":1,"620":1,"626":2,"631":5,"632":1,"633":13,"634":1,"635":7,"638":2,"640":5,"641":1,"643":4,"648":2,"649":2,"650":4,"659":1,"664":2,"667":1,"672":1,"674":1,"681":2,"682":1,"683":3,"723":2,"724":8,"725":11,"726":3,"727":3,"749":6,"757":9,"758":1,"759":6,"760":1,"764":1,"765":2,"766":1,"767":1,"768":1,"774":5,"776":1,"782":1,"790":1,"793":1,"827":1,"828":1,"832":3,"833":2,"837":1,"854":3,"857":1,"861":1,"862":1,"863":2,"873":1,"904":1,"905":1,"912":1,"913":2,"914":7,"915":3,"917":1,"918":2,"932":2,"938":1,"941":1,"946":1,"954":1,"959":1,"971":1,"995":1,"998":1,"1017":2,"1018":1,"1022":1,"1034":1,"1036":1,"1037":1,"1058":4,"1059":10,"1060":2,"1063":1,"1067":1,"1083":1,"1091":1,"1092":1,"1093":1,"1117":2,"1125":1,"1126":1,"1150":1,"1154":1,"1156":1,"1163":1,"1178":1,"1184":2,"1186":1,"1190":2,"1192":4,"1194":1,"1199":3,"1202":4,"1203":6,"1207":4,"1208":13,"1211":1,"1212":8,"1237":1,"1270":9,"1271":1,"1283":1,"1284":3,"1286":20,"1287":1,"1288":1,"1289":11,"1290":1,"1291":4,"1292":1,"1293":8,"1295":1,"1296":1,"1297":3,"1298":1,"1299":2,"1300":123,"1301":3,"1302":4,"1304":1,"1308":1,"1309":24,"1310":1,"1311":92,"1312":1,"1320":2,"1322":10,"1323":88,"1324":152,"1325":1,"1326":1,"1332":1,"1333":1,"1338":1,"1339":36,"1350":5,"1352":1,"1359":5,"1364":1,"1369":3,"1380":3,"1395":16,"1396":5,"1409":1,"1415":46,"1416":142,"1417":161,"1421":1,"1425":1,"1427":1,"1428":1,"1433":3,"1434":1,"1436":64,"1438":7,"1441":1,"1442":1,"1443":5,"1445":7,"1446":1,"1447":3,"1455":14,"1456":1,"1457":4,"1459":2,"1463":1,"1464":1,"1465":2,"1467":62,"1468":1,"1469":1,"1470":1,"1472":2,"1473":4,"1474":7,"1476":3,"1477":4,"1478":1,"1479":1,"1480":1,"1481":6,"1487":1,"1488":7,"1489":5,"1490":2,"1492":3,"1496":15,"1500":1,"1512":1,"1524":1,"1526":9,"1531":2,"1534":1,"1550":2,"1562":1,"1565":1,"1577":7,"1582":1,"1583":1,"1585":2,"1586":1,"1589":4,"1590":1,"1591":9,"1595":1,"1596":6,"1597":2,"1599":2,"1600":1,"1601":2,"1602":1,"1606":1,"1611":2,"1613":1,"1641":6,"1646":5,"1647":1,"1648":5,"1649":1,"1650":2,"1651":8,"1653":2,"1654":5,"1655":4,"1656":1,"1657":1,"1658":2,"1661":8,"1666":1,"1667":4,"1669":4,"1670":4,"1671":1,"1673":1,"1674":1,"1677":1,"1681":1,"1684":1,"1685":1,"1686":1,"1687":1,"1688":1,"1689":1,"1690":1,"1691":1,"1692":3,"1694":1,"1695":1,"1696":1,"1698":1,"1699":1,"1701":1,"1702":1,"1704":1,"1705":2,"1706":1,"1707":1,"1709":4,"1714":1,"1717":3,"1718":3,"1719":1,"1720":1,"1721":1,"1722":2,"1723":2,"1725":1,"1726":5,"1727":7,"1728":3,"1729":4,"1730":2,"1731":2,"1740":1,"1750":2,"1773":2,"1781":2,"1782":1,"1784":1,"1785":2,"1787":2,"1810":1,"1825":1,"1884":1,"1896":2,"1901":1,"1921":2,"1922":1,"1930":1,"1931":1,"1932":1,"1933":4,"1936":1,"1945":1,"1949":1,"1953":1,"1964":1,"1966":4,"1970":1,"1972":1,"1973":3,"1974":2,"1975":2,"1976":3,"1977":1,"1978":3,"1979":2,"1981":1,"1982":2,"1983":1,"2002":3,"2003":2,"2004":2,"2005":5,"2007":2,"2008":1,"2013":1,"2015":1,"2022":1,"2026":1,"2034":3,"2035":2,"2037":2,"2043":1,"2044":2,"2056":1,"2058":2,"2061":1,"2062":2,"2064":1,"2069":2,"2072":1,"2074":1,"2075":1,"2077":6,"2079":3,"2083":1,"2084":1,"2085":4,"2087":1,"2088":1,"2089":1,"2091":3,"2099":1,"2100":3,"2103":2,"2109":2,"2113":5,"2115":1,"2116":1,"2117":3,"2118":2,"2123":10,"2126":1,"2128":1,"2129":3,"2130":1,"2134":1,"2139":1,"2149":4,"2152":2,"2153":3,"2154":2,"2155":1,"2157":1,"2158":1,"2159":1,"2160":1,"2162":3,"2180":2,"2196":1,"2197":1,"2198":2,"2199":2,"2200":4,"2203":4,"2204":2,"2205":1,"2210":1,"2211":1,"2212":2,"2215":1,"2221":1,"2222":2,"2223":4,"2229":1,"2230":2,"2233":2,"2234":11,"2236":3,"2241":5}}],["applogsconfiguration",{"2":{"1465":1},"3":{"1465":1,"1467":1}}],["applockkeymigration",{"3":{"1496":1}}],["applock",{"3":{"1417":1}}],["applockenabled",{"3":{"1324":1,"1417":3}}],["appleoauthprivatekeypem",{"3":{"1467":1}}],["applenotification",{"3":{"1323":1}}],["applelogin",{"3":{"1311":1}}],["appleappsiteassociationpath",{"3":{"1311":1}}],["appleappid",{"2":{"429":1},"3":{"428":1,"429":1,"1311":1}}],["appleapplinkcomponents",{"2":{"428":1,"429":1},"3":{"428":1,"429":1,"1311":1}}],["appleenabled",{"3":{"0":1,"350":1,"1324":1}}],["apple",{"1":{"347":1,"348":1,"349":1,"350":1,"351":1,"352":1,"353":1,"354":1,"355":1,"1973":1,"1974":1,"1975":1,"1976":1,"1977":1,"1978":1,"1979":1},"2":{"1468":1},"3":{"0":3,"347":1,"348":1,"349":1,"350":8,"419":1,"420":1,"426":1,"1212":1,"1300":1,"1311":22,"1406":2,"1415":2,"1416":1,"1417":1,"1455":1,"1459":2,"1466":2,"1467":3,"1468":1,"1481":2,"1526":1,"1591":1,"1666":1,"1667":2,"1779":1,"1973":3,"1974":1,"1975":9,"1979":1,"2123":1,"2210":1}}],["applyupvoteasync",{"3":{"1402":2}}],["applyvoteasync",{"3":{"1402":2}}],["applydeeplinktarget",{"3":{"1324":1}}],["applyfreshdashboard",{"3":{"1395":5}}],["applyfragment",{"3":{"1324":1}}],["applyfiltertouniqueindexes",{"3":{"1286":1}}],["applyfilters",{"2":{"330":1,"335":1,"591":1,"593":1,"1243":1,"1988":1},"3":{"330":1,"335":1,"591":1,"593":1,"1241":1,"1243":1,"1247":7,"1395":16,"1415":4,"1815":1,"1988":1}}],["applyfieldselection",{"2":{"330":1,"1242":1,"1988":1},"3":{"330":1,"1242":2,"1247":3,"1988":1}}],["applyrestoredstate",{"3":{"1324":1}}],["applyrefreshsessionconfiguration",{"2":{"905":1,"1290":1},"3":{"905":1,"1286":2,"1290":1,"1300":2}}],["applycurrentpagefromurl",{"3":{"1324":1}}],["applyconfiguration",{"3":{"1286":7}}],["applyconfigurationsforentitiesincontext",{"2":{"1034":1},"3":{"1034":1,"1286":11,"1396":1}}],["applyeventdatedefaults",{"3":{"1395":1}}],["applyeventfilter",{"2":{"1392":1},"3":{"1383":1,"1392":1,"1395":9}}],["applyemulatorentityquotas",{"3":{"1323":1}}],["applyengineconventions",{"2":{"1176":1,"1280":1,"1286":1},"3":{"1176":1,"1280":1,"1282":1,"1286":6,"1369":1,"1856":1}}],["applybackpressure",{"3":{"1323":5,"1577":1}}],["applybetween",{"3":{"1247":5}}],["applynonestrategytotenantasync",{"3":{"1311":2}}],["applyall",{"3":{"1396":2,"1415":2}}],["applyallconfigurations",{"3":{"1282":1,"1286":4}}],["applyadditionalfilters",{"3":{"1395":2}}],["applyaiscorefilters",{"3":{"1395":2}}],["applyasync",{"2":{"2085":1},"3":{"0":1,"922":1,"1212":1,"1270":5,"1324":3,"1359":5,"1417":1,"2085":1}}],["applykeyandtablemapping",{"2":{"1286":1},"3":{"1282":1,"1286":10,"1856":1}}],["applyorderingstep",{"3":{"1286":3}}],["applyordering",{"3":{"1247":1,"1286":4}}],["applyincludes",{"2":{"1278":1},"3":{"1278":1,"1286":4}}],["applyincludescriteriaandfilters",{"2":{"1243":1},"3":{"1243":1,"1247":2,"1310":1}}],["applyin",{"3":{"1247":10}}],["applyinorrange",{"3":{"1247":4}}],["applying",{"3":{"0":1,"41":1,"135":1,"178":1,"248":1,"265":1,"291":1,"295":1,"318":1,"363":1,"388":1,"499":1,"633":1,"918":1,"1233":1,"1245":1,"1247":1,"1259":1,"1270":1,"1286":2,"1300":2,"1301":2,"1311":1,"1324":2,"1347":1,"1355":1,"1359":4,"1374":1,"1380":4,"1395":2,"1396":5,"1402":2,"1409":1,"1415":1,"1436":1,"1447":1,"1455":2,"1459":1,"1492":1,"1664":1,"1729":1,"1767":1,"1769":1,"1830":1,"1871":1,"2001":2,"2189":1,"2242":1}}],["applysettingsasync",{"3":{"1396":2}}],["applysearchterm",{"3":{"1396":1}}],["applyspeakerfilters",{"3":{"1395":1}}],["applystoredpreferencesandnavigateasync",{"2":{"2085":1},"3":{"1324":2,"2085":1}}],["applyshape",{"3":{"1240":1,"1247":1,"1286":7}}],["applysoftdeletefilters",{"2":{"697":1,"1146":1},"3":{"697":1,"698":1,"1146":1,"1286":2,"1526":1,"1577":1}}],["applysorting",{"2":{"330":1,"549":1,"552":1,"1243":1,"1988":1},"3":{"330":1,"549":1,"552":1,"1242":1,"1243":1,"1247":7,"1359":1,"1415":4,"1988":1}}],["applytenant",{"3":{"1286":2}}],["applytenantfilters",{"2":{"1232":1,"1851":1},"3":{"698":2,"1232":1,"1237":1,"1286":4,"1851":1}}],["applytoprocess",{"3":{"1417":8}}],["applyto",{"2":{"1026":1},"3":{"1026":1,"1767":1}}],["applypermissiongrantconfiguration",{"3":{"1286":2}}],["applypresenceorset",{"3":{"1247":2}}],["applypipeline",{"2":{"466":1,"703":1,"752":1},"3":{"459":1,"464":1,"466":1,"698":1,"703":1,"752":1,"1311":5}}],["applypaging",{"2":{"337":1},"3":{"330":1,"337":1,"549":1,"740":1,"1240":1,"1243":1,"1247":5,"1436":1}}],["apply",{"0":{"1793":1,"1802":1,"1807":1,"1812":1,"1817":1,"1827":1,"1834":1,"1846":1,"1853":1,"1862":1,"1868":1,"1877":1,"1886":1,"1892":1,"1899":1,"1905":1,"1912":1,"1924":1,"1930":1,"1941":1,"1950":1,"1959":1,"1965":1,"1972":1,"1979":1,"1985":1,"1992":1,"1998":1,"2003":1,"2015":1,"2029":1,"2039":1,"2050":1,"2061":1,"2071":1,"2082":1,"2088":1,"2110":1,"2125":1,"2130":1,"2135":1,"2141":1,"2148":1,"2155":1,"2162":1,"2171":1,"2182":1,"2195":1,"2205":1},"2":{"202":1,"1050":1,"1304":1,"1377":1,"1406":1,"1810":1},"3":{"0":3,"100":1,"175":2,"201":1,"202":2,"230":1,"255":1,"265":1,"290":3,"291":3,"292":1,"318":1,"390":1,"538":1,"572":1,"574":1,"740":1,"770":1,"789":1,"827":1,"845":1,"914":1,"922":1,"923":1,"1005":1,"1013":1,"1027":1,"1034":1,"1050":1,"1091":1,"1124":1,"1170":1,"1212":2,"1237":1,"1241":3,"1243":2,"1244":1,"1247":22,"1259":1,"1261":1,"1265":1,"1270":9,"1271":2,"1279":1,"1280":1,"1281":1,"1286":30,"1300":7,"1301":2,"1304":3,"1309":7,"1310":1,"1311":5,"1312":1,"1320":1,"1323":20,"1324":9,"1339":9,"1344":1,"1348":2,"1350":4,"1351":1,"1353":2,"1359":32,"1366":1,"1369":3,"1377":3,"1380":8,"1390":1,"1395":8,"1396":25,"1402":9,"1406":1,"1415":11,"1417":2,"1426":1,"1427":4,"1436":26,"1438":1,"1447":2,"1453":1,"1455":2,"1478":1,"1488":3,"1496":3,"1577":2,"1584":1,"1586":1,"1632":1,"1635":1,"1639":1,"1640":3,"1646":1,"1661":1,"1689":1,"1719":1,"1765":1,"1768":1,"1799":1,"1806":1,"1810":1,"1814":1,"1820":1,"1844":2,"1879":1,"1902":1,"1922":2,"1924":1,"1962":2,"1996":1,"2001":1,"2056":1,"2170":1,"2178":1,"2195":1,"2206":1}}],["applifecycle",{"3":{"1324":4}}],["applifecyclenotifier",{"2":{"2120":1},"3":{"1199":3,"1203":1,"1207":2,"1417":14,"1496":2,"2120":1}}],["appliable",{"3":{"1311":2}}],["applinks",{"3":{"426":1,"1311":3,"1416":1,"1436":3}}],["applicable",{"3":{"1311":2,"1323":1,"1436":2,"1554":1,"1640":1,"1641":1,"1771":1,"2103":1}}],["applicability",{"0":{"62":1},"3":{"1526":1,"1527":1,"1553":1,"1577":1,"1578":1,"2173":1}}],["application+infrastructure+api",{"3":{"1653":1}}],["applicationmodel",{"2":{"1416":1},"3":{"1339":2,"1416":2}}],["applicationpart",{"3":{"1311":1}}],["applicationpipelinecompositiontests",{"3":{"1199":1,"1207":7,"1270":1,"1316":1,"1323":5,"1438":2}}],["applicationnamekey",{"3":{"1323":1}}],["applicationname=",{"3":{"665":1}}],["applicationname",{"2":{"998":1,"999":1},"3":{"665":1,"667":1,"998":1,"999":1,"1323":3,"1336":1,"1339":3,"1467":2}}],["applicationnamespacetests",{"3":{"1199":1,"1207":2,"1323":1}}],["applicationnamespace",{"2":{"25":1,"198":1},"3":{"25":2,"198":2,"228":1,"384":1,"998":1,"999":1,"1199":3,"1203":1,"1207":2,"1301":12,"1313":1,"1320":4,"1323":5,"1496":2}}],["applicationid",{"2":{"424":1},"3":{"424":1,"1311":1}}],["applicationinsights",{"2":{"397":1,"914":1,"1333":1,"1443":1,"1446":1,"1467":1,"2011":1,"2158":1,"2161":1},"3":{"397":1,"914":1,"1333":1,"1339":1,"1443":1,"1446":1,"1467":2,"2011":1,"2158":1,"2161":1}}],["applicationurl",{"3":{"95":2}}],["applicationsourcedirectories",{"3":{"1436":4,"1489":1}}],["applicationservices",{"3":{"1436":5}}],["applicationsettingstests",{"3":{"1199":1,"1207":2}}],["applicationsettings",{"2":{"290":1,"291":1,"330":1,"741":1,"1245":1,"1314":1,"1315":1,"1467":1,"1652":1,"1880":1,"1988":2,"2013":1,"2096":1},"3":{"0":1,"290":1,"291":1,"330":1,"583":1,"674":1,"741":4,"1199":46,"1203":1,"1207":2,"1245":1,"1286":5,"1309":8,"1311":17,"1313":1,"1314":2,"1315":1,"1320":3,"1323":15,"1324":1,"1359":4,"1380":8,"1395":1,"1396":11,"1415":11,"1436":2,"1455":1,"1467":1,"1577":1,"1652":1,"1880":1,"1988":2,"2013":1,"2096":1}}],["applicationstate",{"3":{"1324":1}}],["applicationstarted",{"3":{"235":1,"1334":1,"1339":2,"1436":1}}],["applicationstopped",{"3":{"572":1,"1436":3,"1438":1,"1488":1,"1526":1,"2056":1}}],["applicationstopping",{"3":{"572":1,"1436":3,"1438":1,"1488":1,"1526":1,"2056":1}}],["applications",{"0":{"2230":1},"3":{"0":1,"25":1,"85":1,"228":1,"246":1,"257":1,"259":1,"481":2,"482":1,"543":1,"545":1,"550":2,"551":1,"555":1,"665":1,"698":1,"699":1,"742":1,"773":1,"774":1,"868":1,"869":1,"872":1,"880":1,"920":1,"926":1,"945":1,"1081":1,"1082":2,"1083":1,"1091":1,"1229":1,"1237":1,"1259":2,"1286":2,"1300":4,"1301":4,"1323":2,"1324":1,"1332":1,"1339":1,"1415":5,"1416":1,"1424":1,"1436":2,"1478":1,"1673":1,"1717":1,"1815":2,"1825":1,"1920":1,"1935":1,"2111":2,"2117":1,"2222":2,"2226":1,"2228":2,"2229":1,"2236":1,"2241":1}}],["application",{"0":{"1269":1,"1467":1,"1553":1},"1":{"646":1,"647":1,"648":1,"649":1,"650":1,"651":1,"652":1,"653":1,"1158":1,"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1,"1351":1,"1352":1,"1353":1,"1354":1,"1355":1,"1356":1,"1357":1,"1358":1,"1359":1,"1416":1},"2":{"117":1,"225":1,"281":1,"310":1,"576":1,"1207":4,"1211":1,"1247":3,"1259":2,"1264":1,"1270":6,"1300":1,"1301":1,"1310":2,"1323":3,"1349":1,"1351":1,"1359":4,"1396":3,"1402":1,"1404":1,"1415":1,"1418":1,"1436":1,"1437":1,"1453":1,"1454":1,"1487":1,"1650":2,"1660":1,"1781":1,"1815":1,"1828":1,"1834":1,"1865":1,"1896":1,"1902":1,"1920":1,"1931":1,"1953":1,"1959":1,"1985":1,"2017":1,"2141":1},"3":{"0":33,"10":1,"15":1,"18":1,"24":1,"25":3,"27":2,"39":1,"47":1,"49":1,"52":2,"53":1,"54":2,"58":1,"59":3,"62":1,"63":1,"71":1,"81":1,"90":1,"103":1,"109":2,"110":1,"117":2,"121":2,"122":3,"123":4,"125":2,"126":2,"128":1,"131":1,"135":1,"150":3,"165":1,"166":1,"167":1,"175":1,"179":1,"186":1,"193":1,"198":4,"203":1,"223":1,"225":4,"226":1,"228":2,"230":7,"231":1,"241":1,"242":2,"243":4,"244":1,"245":2,"246":6,"255":1,"256":1,"281":2,"284":1,"285":1,"295":1,"300":1,"306":1,"310":5,"314":1,"318":4,"326":1,"328":1,"330":5,"331":1,"333":4,"335":1,"336":1,"337":3,"341":4,"343":1,"344":6,"350":1,"352":3,"353":4,"358":3,"359":3,"360":2,"365":1,"378":1,"380":1,"381":2,"384":4,"390":1,"391":3,"395":1,"396":1,"397":5,"399":1,"400":1,"401":3,"407":2,"408":1,"434":2,"440":2,"443":1,"444":2,"448":1,"459":11,"461":1,"463":7,"464":2,"465":6,"466":3,"470":1,"476":1,"481":2,"482":2,"483":1,"490":1,"493":3,"494":2,"495":2,"497":8,"498":1,"499":3,"502":2,"506":1,"508":1,"522":2,"523":3,"524":2,"535":1,"536":3,"539":3,"544":4,"545":26,"547":1,"549":6,"550":2,"551":5,"552":5,"555":1,"556":2,"558":1,"566":1,"572":2,"576":1,"582":1,"583":6,"584":1,"585":1,"586":3,"591":1,"593":2,"601":3,"602":1,"604":1,"633":2,"640":2,"646":1,"648":1,"649":1,"657":2,"665":2,"674":16,"676":1,"677":1,"690":3,"692":2,"698":1,"707":2,"708":1,"714":2,"715":1,"718":2,"723":1,"724":4,"725":6,"726":1,"727":1,"728":1,"729":1,"733":1,"736":1,"740":1,"741":4,"749":2,"782":6,"789":2,"790":4,"791":1,"793":2,"794":1,"795":1,"799":2,"813":2,"819":1,"827":4,"828":1,"845":1,"846":6,"848":2,"849":1,"850":1,"854":2,"857":2,"870":1,"875":1,"881":1,"888":1,"890":1,"897":6,"899":1,"900":1,"905":9,"906":2,"907":1,"908":3,"910":1,"914":1,"921":3,"922":8,"923":1,"924":4,"926":12,"927":1,"930":2,"932":1,"933":1,"938":2,"939":2,"940":1,"941":1,"946":5,"954":1,"956":1,"960":1,"979":1,"980":12,"982":2,"983":1,"987":3,"988":4,"994":1,"995":1,"996":4,"998":2,"999":1,"1004":8,"1006":1,"1012":1,"1017":2,"1018":3,"1020":1,"1022":1,"1025":2,"1026":2,"1033":1,"1034":1,"1035":1,"1036":1,"1037":1,"1038":1,"1041":1,"1042":3,"1049":1,"1050":3,"1051":1,"1058":1,"1059":7,"1067":1,"1068":1,"1069":1,"1074":5,"1078":1,"1082":2,"1090":2,"1091":7,"1093":2,"1099":1,"1100":5,"1116":3,"1119":1,"1133":6,"1140":1,"1142":1,"1150":3,"1158":1,"1161":5,"1168":4,"1170":1,"1174":1,"1175":1,"1192":2,"1194":1,"1199":1475,"1201":2,"1202":4,"1203":779,"1206":10,"1207":4571,"1208":22,"1211":4,"1212":12,"1213":2,"1214":1,"1216":2,"1223":1,"1224":1,"1229":12,"1230":1,"1236":1,"1237":14,"1238":3,"1239":6,"1240":1,"1241":5,"1242":3,"1243":6,"1244":2,"1246":4,"1247":161,"1248":2,"1249":1,"1252":3,"1256":1,"1257":6,"1258":1,"1259":63,"1260":2,"1261":3,"1262":3,"1263":1,"1264":11,"1265":3,"1266":1,"1267":5,"1268":2,"1269":4,"1270":311,"1271":101,"1272":1,"1276":1,"1278":5,"1279":3,"1282":1,"1285":9,"1286":234,"1288":1,"1289":7,"1290":3,"1291":6,"1292":3,"1293":5,"1294":6,"1295":3,"1296":1,"1297":8,"1300":356,"1301":48,"1302":4,"1303":4,"1304":5,"1305":1,"1306":6,"1307":1,"1308":5,"1309":161,"1310":87,"1311":71,"1312":8,"1313":3,"1314":2,"1315":4,"1316":11,"1317":1,"1318":6,"1319":3,"1320":14,"1322":14,"1323":290,"1324":22,"1325":1,"1333":2,"1336":1,"1337":2,"1339":13,"1340":1,"1341":2,"1346":1,"1347":4,"1348":1,"1349":2,"1350":83,"1351":4,"1352":20,"1353":21,"1354":10,"1355":9,"1356":4,"1357":4,"1358":3,"1359":1975,"1360":1,"1361":1,"1365":2,"1366":1,"1367":5,"1369":29,"1370":1,"1374":2,"1377":1,"1379":1,"1380":22,"1389":1,"1390":1,"1395":9,"1396":309,"1398":1,"1399":1,"1400":3,"1401":1,"1402":195,"1404":3,"1405":2,"1406":3,"1407":1,"1409":2,"1410":3,"1411":1,"1413":2,"1415":301,"1416":23,"1417":7,"1418":1,"1421":1,"1423":3,"1424":2,"1427":10,"1429":2,"1430":2,"1431":3,"1435":1,"1436":247,"1437":6,"1438":23,"1440":1,"1441":1,"1442":3,"1443":4,"1446":1,"1452":1,"1453":1,"1454":2,"1455":7,"1460":1,"1461":1,"1462":1,"1465":3,"1467":20,"1469":1,"1471":1,"1473":1,"1486":1,"1487":6,"1488":1,"1489":22,"1490":1,"1492":2,"1496":62,"1499":1,"1503":1,"1504":1,"1509":1,"1519":2,"1526":15,"1527":2,"1534":2,"1535":1,"1536":3,"1538":1,"1540":4,"1551":1,"1553":2,"1555":2,"1572":2,"1575":1,"1576":2,"1577":30,"1578":2,"1582":3,"1586":2,"1591":14,"1592":1,"1599":1,"1600":3,"1602":1,"1620":1,"1639":1,"1646":1,"1650":4,"1651":5,"1653":1,"1654":3,"1656":3,"1660":2,"1661":1,"1662":2,"1663":2,"1666":1,"1669":1,"1670":3,"1671":2,"1673":1,"1679":1,"1681":1,"1685":11,"1686":8,"1687":1,"1693":2,"1718":1,"1719":1,"1720":1,"1724":1,"1731":1,"1748":1,"1756":1,"1765":21,"1781":5,"1783":1,"1784":1,"1789":1,"1790":3,"1792":1,"1793":2,"1796":2,"1799":1,"1805":1,"1810":2,"1813":1,"1815":9,"1817":2,"1820":1,"1824":2,"1828":1,"1830":1,"1831":1,"1833":1,"1834":1,"1840":1,"1842":2,"1852":1,"1854":2,"1864":1,"1865":4,"1866":1,"1875":1,"1876":1,"1877":1,"1883":1,"1884":1,"1896":1,"1902":2,"1915":2,"1916":1,"1919":1,"1920":2,"1922":1,"1926":1,"1929":1,"1931":2,"1932":2,"1933":1,"1934":2,"1935":2,"1936":1,"1940":1,"1941":1,"1944":1,"1948":1,"1953":1,"1955":1,"1956":1,"1959":1,"1961":1,"1962":1,"1963":1,"1970":1,"1972":1,"1985":1,"1995":1,"1996":1,"1998":1,"1999":1,"2001":5,"2004":1,"2006":1,"2007":1,"2011":1,"2015":1,"2016":2,"2017":4,"2018":1,"2025":1,"2029":1,"2035":1,"2037":1,"2043":1,"2044":9,"2052":1,"2053":1,"2056":1,"2057":2,"2062":1,"2064":1,"2066":1,"2068":4,"2073":1,"2079":1,"2082":1,"2090":1,"2097":1,"2101":2,"2103":1,"2106":5,"2112":2,"2113":2,"2128":1,"2134":1,"2141":1,"2142":2,"2143":3,"2144":2,"2146":3,"2156":1,"2158":1,"2159":1,"2165":1,"2168":2,"2171":1,"2172":1,"2173":2,"2177":3,"2179":1,"2181":1,"2182":2,"2195":1,"2216":1,"2221":1,"2222":3,"2223":1,"2229":5,"2232":3,"2234":4,"2242":2}}],["applicationdbcontexteffactory",{"3":{"1496":1}}],["applicationdbcontexttests",{"3":{"1199":1,"1207":4}}],["applicationdbcontexttenantfiltertests",{"3":{"1199":1,"1207":2,"1286":3,"1438":2}}],["applicationdbcontext",{"2":{"0":1,"26":1,"47":1,"200":1,"201":1,"345":1,"696":1,"703":1,"713":1,"715":2,"720":1,"798":1,"806":1,"889":1,"892":1,"893":1,"1033":1,"1036":1,"1042":1,"1050":1,"1083":1,"1086":1,"1174":1,"1175":2,"1192":1,"1201":1,"1212":1,"1259":1,"1272":1,"1276":1,"1286":2,"1363":1,"1412":1,"1510":1,"1517":1,"1664":1,"1849":1,"1857":1,"2065":1,"2066":1,"2201":1},"3":{"0":3,"26":3,"47":1,"166":1,"200":4,"201":1,"203":1,"341":1,"345":1,"536":1,"540":1,"696":2,"697":1,"698":6,"702":1,"703":2,"707":1,"710":2,"713":1,"715":4,"720":3,"798":2,"806":2,"888":1,"889":3,"892":1,"893":1,"905":3,"907":1,"931":1,"934":1,"1033":1,"1034":3,"1036":1,"1037":1,"1042":4,"1050":2,"1055":1,"1059":2,"1061":1,"1062":1,"1083":2,"1086":2,"1140":3,"1146":1,"1150":1,"1156":1,"1174":1,"1175":4,"1192":1,"1198":1,"1199":109,"1201":1,"1202":1,"1203":2,"1207":3,"1212":3,"1232":4,"1233":1,"1237":10,"1251":2,"1253":2,"1258":2,"1259":16,"1272":1,"1273":10,"1274":1,"1276":2,"1278":1,"1281":6,"1282":1,"1283":1,"1286":170,"1300":7,"1323":13,"1359":1,"1363":2,"1369":9,"1396":9,"1412":1,"1415":2,"1436":8,"1437":2,"1496":5,"1498":1,"1510":1,"1517":1,"1526":1,"1577":3,"1651":1,"1664":1,"1810":1,"1849":1,"1857":1,"2065":2,"2066":2,"2166":1,"2201":2}}],["applicationlayers",{"3":{"1436":1}}],["applicationlayersdeclarehandlers",{"3":{"1436":1}}],["applicationlayer",{"2":{"0":1,"700":1,"1815":1},"3":{"0":1,"545":1,"700":1,"1436":5,"1815":1}}],["appliedid",{"3":{"1324":2}}],["applied",{"0":{"2144":1},"2":{"1140":1},"3":{"0":1,"23":3,"24":2,"27":1,"67":1,"72":1,"80":1,"98":1,"103":1,"116":1,"135":1,"136":1,"156":1,"179":2,"186":2,"200":1,"212":1,"231":1,"235":1,"237":1,"246":1,"248":1,"265":1,"292":1,"293":1,"318":1,"335":3,"343":1,"359":2,"361":1,"371":1,"376":1,"384":1,"400":1,"401":2,"403":1,"427":1,"430":1,"440":1,"459":1,"461":1,"464":1,"478":1,"483":2,"485":1,"535":1,"539":1,"548":1,"552":1,"557":1,"595":1,"640":1,"657":3,"658":1,"659":1,"666":1,"690":1,"697":1,"698":1,"707":2,"715":1,"740":1,"741":1,"751":1,"759":1,"766":1,"769":1,"798":1,"806":1,"827":2,"829":1,"830":1,"831":1,"832":1,"837":1,"838":1,"865":2,"872":2,"876":1,"883":1,"890":1,"905":1,"907":1,"988":1,"996":1,"1018":1,"1028":1,"1042":1,"1059":1,"1100":1,"1116":1,"1119":1,"1124":1,"1137":1,"1140":1,"1191":1,"1229":1,"1232":1,"1237":8,"1239":1,"1240":1,"1241":2,"1242":1,"1243":3,"1244":1,"1247":10,"1259":4,"1261":1,"1265":1,"1267":1,"1270":7,"1271":6,"1273":3,"1275":1,"1277":1,"1279":1,"1286":42,"1297":1,"1299":1,"1300":19,"1301":4,"1309":7,"1310":2,"1311":20,"1312":5,"1318":1,"1320":1,"1323":13,"1324":20,"1325":1,"1326":1,"1327":1,"1328":1,"1330":1,"1334":1,"1336":1,"1337":1,"1339":18,"1340":1,"1343":1,"1347":1,"1350":12,"1352":2,"1353":1,"1359":67,"1362":2,"1363":1,"1369":7,"1373":1,"1374":1,"1380":8,"1389":1,"1395":13,"1396":33,"1399":1,"1401":1,"1402":11,"1410":1,"1415":8,"1417":8,"1423":1,"1427":3,"1435":1,"1436":36,"1438":6,"1440":1,"1441":1,"1443":2,"1447":1,"1453":1,"1455":1,"1457":1,"1461":1,"1463":1,"1465":1,"1467":6,"1469":1,"1472":1,"1473":1,"1474":1,"1478":1,"1481":1,"1488":2,"1489":1,"1492":2,"1496":4,"1525":1,"1526":5,"1531":2,"1534":1,"1537":4,"1539":1,"1545":2,"1552":1,"1566":1,"1577":6,"1591":2,"1637":2,"1647":1,"1665":1,"1666":1,"1675":1,"1689":1,"1707":1,"1764":1,"1765":4,"1767":1,"1771":1,"1774":1,"1784":1,"1797":1,"1814":1,"1820":1,"1839":1,"1840":1,"1844":1,"1851":1,"1852":1,"1869":1,"1874":1,"1876":1,"1920":3,"1946":1,"1954":1,"1995":1,"2002":1,"2031":1,"2032":1,"2034":1,"2038":1,"2039":1,"2064":1,"2072":1,"2076":1,"2082":2,"2113":1,"2136":1,"2149":1,"2164":1,"2176":1,"2179":1,"2187":1,"2190":1,"2194":1,"2234":1}}],["appliertype",{"3":{"1270":1}}],["appliers",{"3":{"1262":1,"1265":1,"1270":1,"1316":1,"1323":2,"1359":1,"1662":1,"1875":1,"1883":1,"2097":1}}],["applier",{"3":{"0":3,"263":1,"265":2,"291":1,"293":1,"328":1,"920":2,"922":2,"923":1,"924":2,"925":1,"926":8,"1260":1,"1265":3,"1270":28,"1286":2,"1301":2,"1323":1,"1324":4,"1354":1,"1359":37,"1417":3,"1436":1,"1455":2,"1496":2,"1871":1,"1956":1}}],["appliesto",{"3":{"1369":2}}],["applies",{"0":{"1920":1},"1":{"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1},"3":{"0":8,"80":1,"95":1,"100":2,"117":1,"130":1,"152":1,"162":1,"166":1,"173":2,"175":1,"193":1,"195":1,"243":1,"280":1,"288":1,"291":2,"292":1,"295":1,"318":3,"333":1,"340":1,"341":1,"345":1,"359":1,"370":1,"392":1,"397":1,"404":1,"458":1,"501":1,"511":1,"536":2,"549":1,"550":1,"551":2,"556":2,"562":1,"563":2,"564":2,"568":2,"572":1,"592":3,"607":1,"611":1,"618":1,"622":1,"628":1,"631":1,"634":2,"635":1,"640":1,"651":2,"674":1,"676":1,"684":1,"691":1,"698":1,"701":2,"711":1,"728":1,"733":1,"741":1,"743":1,"744":1,"749":4,"757":1,"768":1,"774":2,"817":1,"818":1,"838":1,"842":1,"846":1,"847":2,"875":1,"876":1,"883":1,"889":1,"891":1,"917":1,"926":1,"963":1,"965":1,"972":2,"973":1,"1000":1,"1017":1,"1018":1,"1034":1,"1037":1,"1044":1,"1049":1,"1050":1,"1052":2,"1059":1,"1074":1,"1108":1,"1116":2,"1124":1,"1127":1,"1128":1,"1134":1,"1162":1,"1193":1,"1212":3,"1229":3,"1237":4,"1240":1,"1243":1,"1244":2,"1247":13,"1253":1,"1259":29,"1261":1,"1262":1,"1270":9,"1271":6,"1273":3,"1275":2,"1276":1,"1282":1,"1286":49,"1292":1,"1300":33,"1301":3,"1304":2,"1306":1,"1309":2,"1310":2,"1311":33,"1312":4,"1314":1,"1318":2,"1323":28,"1324":59,"1328":1,"1329":1,"1331":1,"1333":1,"1338":1,"1339":17,"1348":2,"1350":17,"1353":1,"1357":1,"1359":61,"1363":1,"1366":1,"1369":6,"1373":1,"1378":1,"1380":8,"1395":27,"1396":40,"1401":3,"1402":22,"1406":1,"1409":1,"1414":1,"1415":14,"1416":14,"1417":14,"1418":1,"1421":1,"1422":1,"1427":4,"1433":1,"1436":67,"1438":5,"1441":2,"1442":1,"1443":2,"1447":1,"1453":1,"1454":1,"1455":2,"1457":1,"1467":4,"1470":1,"1477":1,"1479":1,"1488":1,"1489":1,"1490":1,"1492":2,"1496":2,"1510":1,"1577":2,"1627":1,"1631":1,"1639":3,"1640":2,"1641":1,"1650":1,"1652":1,"1664":1,"1666":1,"1667":1,"1673":1,"1701":1,"1719":1,"1728":1,"1730":1,"1750":1,"1755":1,"1776":1,"1815":2,"1821":2,"1830":1,"1843":2,"1856":1,"1869":1,"1892":1,"1898":1,"1903":1,"1910":1,"1923":1,"1928":1,"1935":1,"1953":1,"1995":4,"1996":1,"1998":1,"2001":1,"2013":1,"2026":1,"2046":1,"2058":1,"2070":1,"2085":1,"2099":1,"2100":1,"2113":1,"2128":3,"2136":1,"2138":1,"2158":1,"2162":1,"2169":1,"2177":1,"2194":1,"2195":2,"2201":1,"2234":2}}],["appsidentity",{"3":{"1467":3}}],["appsec",{"3":{"1339":1}}],["appsetting",{"3":{"312":1,"948":1}}],["appsettingsalt",{"3":{"1416":1}}],["appsettings",{"2":{"92":1,"95":1,"96":1,"102":2,"418":1,"422":1,"534":1,"584":1,"794":1,"836":1,"837":1,"838":1,"840":1,"841":1,"857":1,"933":1,"1066":1,"1107":1,"1128":1,"1178":1,"1429":1,"1481":1,"1490":1,"1656":1,"1684":1,"1701":1,"1719":1,"1720":1,"1722":1,"1723":1,"1729":1,"1850":1,"2099":1},"3":{"0":1,"59":1,"63":1,"92":3,"95":4,"96":2,"98":1,"102":2,"104":1,"179":1,"180":3,"195":7,"418":3,"422":2,"423":1,"424":1,"425":1,"426":4,"428":2,"429":3,"534":2,"536":1,"539":1,"540":1,"583":6,"584":1,"585":3,"633":1,"639":1,"641":1,"690":1,"691":1,"725":2,"727":1,"774":4,"776":1,"790":2,"792":1,"794":1,"827":9,"831":1,"832":13,"833":4,"836":1,"837":1,"838":11,"839":1,"840":2,"841":1,"854":4,"857":1,"933":1,"998":1,"999":1,"1017":1,"1018":4,"1021":1,"1066":1,"1091":1,"1107":1,"1116":1,"1124":9,"1125":1,"1126":1,"1128":1,"1178":1,"1184":1,"1286":7,"1300":5,"1301":3,"1309":1,"1311":2,"1312":2,"1313":1,"1320":1,"1323":3,"1324":3,"1337":1,"1338":2,"1339":22,"1380":18,"1395":1,"1396":6,"1407":1,"1415":3,"1416":14,"1417":1,"1419":1,"1427":1,"1429":1,"1430":1,"1436":10,"1438":1,"1441":5,"1446":1,"1447":26,"1450":2,"1467":4,"1481":2,"1488":2,"1490":1,"1496":4,"1526":10,"1531":1,"1532":1,"1535":1,"1548":1,"1591":4,"1627":3,"1656":1,"1684":2,"1701":1,"1719":1,"1720":1,"1722":1,"1723":1,"1728":1,"1729":1,"1761":1,"1849":1,"1850":1,"2099":1,"2152":1,"2169":1,"2175":1}}],["apps",{"0":{"94":1,"719":1,"1785":1,"1983":1,"2112":1,"2153":1},"1":{"1717":1,"1718":1,"1719":1,"1720":1,"1721":1,"1722":1,"1723":1,"1724":1,"1725":1,"2111":1,"2112":1,"2113":1,"2114":1,"2115":1,"2116":1,"2117":1},"2":{"759":1},"3":{"0":25,"31":1,"61":1,"62":1,"63":1,"91":1,"93":1,"94":2,"96":1,"97":2,"98":2,"104":1,"146":2,"147":1,"148":1,"175":2,"184":1,"206":2,"207":1,"208":1,"213":1,"214":2,"216":1,"233":1,"234":2,"235":1,"243":1,"245":1,"265":1,"283":2,"290":1,"291":1,"293":1,"299":1,"310":3,"314":2,"369":1,"390":2,"392":1,"395":1,"402":1,"412":1,"422":2,"457":2,"459":2,"463":1,"465":1,"483":1,"490":2,"491":1,"492":1,"493":1,"494":1,"497":3,"499":3,"500":1,"511":1,"517":1,"551":1,"552":1,"555":1,"556":2,"597":1,"599":9,"600":2,"602":1,"603":3,"618":1,"620":1,"625":1,"626":2,"629":3,"640":1,"648":1,"649":1,"650":1,"656":1,"665":3,"713":1,"718":1,"719":1,"724":2,"725":3,"726":2,"727":1,"748":1,"749":1,"756":2,"757":5,"759":2,"760":3,"764":1,"765":1,"766":2,"780":3,"784":1,"791":1,"826":1,"827":3,"832":1,"833":1,"838":1,"853":1,"854":1,"855":1,"857":1,"860":1,"861":3,"862":1,"863":3,"865":1,"867":2,"869":3,"875":2,"882":1,"913":1,"971":2,"972":2,"995":1,"996":1,"1058":3,"1060":2,"1101":1,"1123":1,"1124":1,"1154":1,"1156":1,"1202":1,"1203":1,"1212":5,"1237":4,"1247":4,"1259":2,"1264":1,"1270":7,"1271":2,"1286":12,"1295":1,"1300":13,"1309":4,"1311":12,"1313":1,"1322":2,"1323":21,"1324":14,"1325":1,"1339":26,"1359":1,"1415":2,"1416":1,"1417":8,"1433":1,"1436":21,"1438":4,"1442":1,"1443":5,"1447":8,"1455":9,"1465":2,"1467":46,"1469":2,"1472":1,"1473":1,"1474":6,"1477":5,"1478":1,"1486":2,"1488":1,"1492":3,"1496":2,"1524":1,"1525":1,"1526":4,"1534":2,"1535":1,"1555":1,"1565":1,"1574":1,"1575":2,"1577":3,"1582":1,"1589":2,"1591":1,"1596":1,"1602":1,"1645":1,"1646":1,"1650":1,"1658":1,"1661":2,"1670":1,"1673":1,"1674":1,"1676":1,"1677":3,"1692":1,"1705":2,"1706":1,"1717":1,"1718":1,"1726":1,"1727":1,"1779":1,"1784":2,"1785":1,"1792":1,"1799":1,"1811":1,"1839":1,"1875":2,"1900":1,"1903":1,"1904":1,"1909":1,"1958":1,"1962":1,"1963":2,"1968":3,"1969":1,"1972":1,"1982":1,"2001":2,"2002":1,"2007":2,"2011":1,"2012":1,"2022":1,"2026":3,"2034":2,"2038":1,"2044":2,"2048":1,"2056":1,"2060":1,"2079":1,"2085":1,"2089":1,"2110":1,"2111":3,"2112":1,"2113":2,"2114":1,"2115":2,"2116":3,"2125":1,"2140":1,"2149":1,"2152":2,"2154":1,"2155":1,"2160":2,"2196":3,"2200":2,"2204":1,"2205":1,"2212":2,"2215":1,"2216":1,"2221":1,"2223":1,"2230":1,"2231":1,"2234":1,"2241":1,"2245":1,"2247":1}}],["agile",{"3":{"2221":1,"2222":1}}],["aggregator",{"3":{"1308":1,"1309":4}}],["aggregating",{"3":{"1259":2,"1309":1,"1332":1,"1350":3,"1359":1,"1396":2}}],["aggregation",{"3":{"692":1,"1229":1,"1278":1,"1286":3,"1309":5,"1312":1,"1350":1,"1359":5,"1369":1,"1395":2,"1396":3,"1415":1,"1438":1,"1441":1,"1448":1,"2069":1}}],["aggregations",{"3":{"545":1,"547":1,"1396":1,"1436":1}}],["aggregatewithoutdeleteoverride",{"3":{"1436":1}}],["aggregatewithnochildentities",{"3":{"1436":2}}],["aggregateroots",{"2":{"1489":1},"3":{"1436":6,"1489":3}}],["aggregaterootshaveresultfactory",{"2":{"1577":1},"3":{"1431":1,"1577":1}}],["aggregaterootentity",{"3":{"1286":1}}],["aggregaterootentitycontrollerbasetests",{"3":{"1199":1,"1207":6,"1311":2}}],["aggregaterootentitycontrollerbase",{"2":{"318":1,"328":1,"921":1,"922":1,"925":1,"1666":1,"1992":1},"3":{"0":2,"318":1,"328":1,"330":5,"332":1,"334":1,"921":3,"922":1,"925":1,"1199":11,"1203":1,"1207":2,"1270":4,"1311":15,"1359":5,"1371":1,"1380":10,"1436":2,"1666":1,"1988":1,"1992":1}}],["aggregateconvention",{"3":{"1576":1,"1577":1}}],["aggregateconventiontests",{"2":{"1811":1,"2049":1},"3":{"1168":1,"1199":1,"1207":2,"1436":9,"1489":3,"1493":1,"1577":2,"1811":1,"2049":1}}],["aggregateconventiontestsbase",{"2":{"1168":1,"1810":1},"3":{"1168":2,"1199":2,"1207":2,"1431":4,"1436":28,"1489":1,"1496":1,"1577":1,"1586":1,"1810":1}}],["aggregatecapture",{"3":{"1199":3,"1203":1,"1207":1,"1274":1,"1286":5,"1496":2}}],["aggregated",{"3":{"107":1,"1017":1,"1220":1,"1286":2,"1350":2,"1359":2,"1380":2,"1395":2,"1396":3,"1415":1,"1427":1,"1535":1,"1641":2,"1765":1}}],["aggregate",{"0":{"1233":1,"1291":1,"1343":1,"1346":1,"1405":1,"2092":1},"1":{"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":1,"1165":1,"1166":1,"1167":1,"1168":1,"1169":1,"1170":1,"1171":1},"2":{"1381":1},"3":{"0":27,"16":1,"17":1,"18":1,"21":4,"24":3,"39":4,"41":1,"42":1,"107":1,"109":1,"110":2,"164":1,"165":3,"166":1,"167":2,"168":1,"171":1,"175":1,"181":1,"225":1,"227":1,"230":1,"283":1,"314":1,"339":1,"340":1,"341":5,"342":1,"344":1,"350":2,"353":2,"402":1,"413":1,"443":1,"444":1,"459":2,"460":1,"466":1,"468":1,"470":2,"476":1,"497":2,"499":3,"536":2,"537":2,"541":1,"545":1,"551":1,"572":1,"609":1,"633":4,"636":1,"639":1,"656":1,"657":2,"658":1,"661":1,"688":1,"690":3,"691":1,"707":1,"724":1,"725":3,"726":1,"781":1,"782":2,"785":1,"799":1,"809":4,"810":3,"813":3,"815":2,"856":1,"881":1,"904":1,"905":1,"907":1,"919":1,"920":1,"921":7,"922":8,"923":4,"924":7,"925":1,"926":14,"930":1,"1004":10,"1006":1,"1025":1,"1026":1,"1027":1,"1028":1,"1041":2,"1042":1,"1043":1,"1052":1,"1058":1,"1082":2,"1114":1,"1116":3,"1117":2,"1120":1,"1140":5,"1141":1,"1142":5,"1143":2,"1144":2,"1145":1,"1147":1,"1150":1,"1160":1,"1161":1,"1165":1,"1167":1,"1168":6,"1169":1,"1170":2,"1171":1,"1191":1,"1192":2,"1201":1,"1202":3,"1203":3,"1212":11,"1220":1,"1222":1,"1224":1,"1226":1,"1229":5,"1230":1,"1231":4,"1233":9,"1237":44,"1240":1,"1247":4,"1248":2,"1249":2,"1251":3,"1255":1,"1259":16,"1260":1,"1265":12,"1270":85,"1272":1,"1274":4,"1275":1,"1278":2,"1281":1,"1283":1,"1286":57,"1287":1,"1289":1,"1290":1,"1291":1,"1293":1,"1294":1,"1295":1,"1300":30,"1301":1,"1304":3,"1309":28,"1311":22,"1312":2,"1318":1,"1322":2,"1323":47,"1324":5,"1328":1,"1339":2,"1340":3,"1341":1,"1342":6,"1343":2,"1344":2,"1345":2,"1346":3,"1347":1,"1349":1,"1350":156,"1352":4,"1353":5,"1354":6,"1355":3,"1357":2,"1359":430,"1366":1,"1369":26,"1371":3,"1374":1,"1380":45,"1385":1,"1386":2,"1395":30,"1396":107,"1398":3,"1399":1,"1402":56,"1403":2,"1404":1,"1405":5,"1406":1,"1407":1,"1408":2,"1409":1,"1410":2,"1411":1,"1413":1,"1415":65,"1431":3,"1436":76,"1437":2,"1438":8,"1441":2,"1442":1,"1443":1,"1447":4,"1450":1,"1453":1,"1467":4,"1487":5,"1488":1,"1489":6,"1490":2,"1496":6,"1498":1,"1517":1,"1526":5,"1541":1,"1545":1,"1547":1,"1577":5,"1582":1,"1583":1,"1585":3,"1586":2,"1591":3,"1630":18,"1631":9,"1632":17,"1634":1,"1635":8,"1637":2,"1638":27,"1639":5,"1640":6,"1641":1,"1646":1,"1647":1,"1650":1,"1651":6,"1654":1,"1660":1,"1661":1,"1662":2,"1665":2,"1666":1,"1671":1,"1677":1,"1683":1,"1685":6,"1686":6,"1689":1,"1695":2,"1697":2,"1699":1,"1700":1,"1701":5,"1704":1,"1719":2,"1720":1,"1727":16,"1728":5,"1729":4,"1730":8,"1747":1,"1748":1,"1749":3,"1750":1,"1764":2,"1765":2,"1769":1,"1773":1,"1805":1,"1807":1,"1810":8,"1811":3,"1812":1,"1836":1,"1838":3,"1842":1,"1856":1,"1861":1,"1869":1,"1871":3,"1875":2,"1876":4,"1922":1,"1927":1,"1933":3,"1934":1,"1937":2,"1948":1,"1953":1,"1977":2,"1982":1,"1985":1,"2002":1,"2011":1,"2021":2,"2044":1,"2064":2,"2065":1,"2067":1,"2068":1,"2070":1,"2085":1,"2087":1,"2089":3,"2091":3,"2092":4,"2093":4,"2094":1,"2099":1,"2100":2,"2106":1,"2112":3,"2116":1,"2119":1,"2125":1,"2166":2,"2169":1,"2170":1,"2171":1,"2183":1,"2185":3,"2194":2,"2195":1,"2200":2,"2229":1,"2234":3}}],["aggregatescascadesoftdeletetochildren",{"3":{"1436":14}}],["aggregateswithchildcollections",{"3":{"1436":2}}],["aggregates",{"0":{"1342":1,"1398":1},"1":{"1230":1,"1231":1,"1232":1,"1233":1,"1234":1,"1235":1,"1236":1,"1237":1,"1808":1,"1809":1,"1810":1,"1811":1,"1812":1},"3":{"0":2,"39":2,"95":1,"109":1,"383":1,"497":3,"691":1,"698":1,"781":1,"921":1,"922":1,"924":1,"1058":1,"1066":1,"1068":1,"1140":2,"1141":1,"1168":2,"1169":1,"1192":1,"1202":2,"1203":2,"1212":3,"1222":1,"1229":2,"1230":1,"1237":12,"1247":1,"1251":1,"1254":1,"1259":4,"1270":2,"1274":1,"1275":1,"1286":12,"1291":1,"1300":4,"1302":1,"1303":2,"1309":2,"1311":2,"1323":4,"1324":1,"1328":1,"1339":1,"1340":1,"1341":1,"1342":3,"1345":1,"1346":4,"1350":10,"1351":1,"1352":6,"1354":1,"1359":46,"1371":1,"1380":3,"1388":1,"1396":19,"1398":2,"1399":1,"1401":1,"1402":7,"1430":1,"1436":13,"1438":3,"1441":2,"1443":1,"1467":2,"1476":1,"1487":1,"1496":4,"1526":2,"1534":1,"1541":5,"1547":2,"1577":1,"1585":1,"1600":1,"1630":1,"1635":2,"1638":2,"1639":1,"1651":1,"1671":1,"1681":1,"1689":1,"1720":1,"1765":1,"1808":1,"1811":1,"1812":1,"1815":1,"1838":1,"1932":1,"1937":1,"2057":1,"2106":1,"2112":1,"2188":1,"2208":1,"2229":1,"2232":1,"2241":1}}],["aggressive",{"3":{"501":1,"907":1,"1984":1,"1985":1}}],["agreeing",{"3":{"1270":2,"1286":2,"1300":1,"1323":1,"1324":1,"1380":2,"1415":1,"1436":1}}],["agreeingmarkedqueryhandler",{"3":{"1199":2,"1207":1}}],["agreeingmarkedquery",{"3":{"1199":2,"1207":1}}],["agreeingmarkedcommandhandler",{"3":{"1199":2,"1207":1}}],["agreeingmarkedcommand",{"3":{"1199":2,"1207":1,"1270":1}}],["agrees",{"3":{"650":1,"703":1,"839":1,"974":1,"1229":1,"1324":1,"1402":1,"2040":2}}],["agreement",{"3":{"265":1,"301":1,"560":1,"781":1,"1005":1,"1270":1,"1286":1,"1300":1,"1301":1,"1324":2,"1339":1,"1359":2,"1395":2,"1396":1,"1436":2,"1653":1,"2088":1,"2140":1}}],["agreed",{"3":{"77":1,"648":1,"1270":1,"1300":1,"1324":1,"1359":3,"1395":1,"1396":3}}],["agree",{"3":{"0":2,"109":1,"217":1,"220":1,"243":1,"265":1,"272":1,"302":1,"443":1,"539":1,"540":1,"558":1,"611":1,"889":1,"890":1,"905":1,"907":1,"954":1,"956":1,"959":1,"1018":1,"1116":1,"1176":1,"1229":1,"1237":1,"1247":3,"1259":1,"1267":1,"1270":2,"1271":1,"1279":1,"1285":1,"1286":10,"1300":12,"1301":2,"1309":3,"1311":5,"1312":1,"1323":3,"1324":12,"1339":2,"1347":1,"1359":12,"1369":1,"1380":2,"1395":2,"1402":7,"1415":3,"1417":3,"1436":5,"1467":1,"1597":1,"1631":1,"1640":1,"1697":1,"1829":1,"1833":1,"1927":1,"1937":1,"1953":1,"2025":1,"2047":1,"2084":1,"2085":1,"2137":1,"2139":1,"2169":1}}],["ago",{"2":{"1475":1},"3":{"0":2,"535":1,"539":1,"905":3,"1247":1,"1286":2,"1359":2,"1436":2,"1455":1,"1465":2,"1475":2,"1844":1,"1887":1,"2163":2}}],["again",{"1":{"796":1,"797":1,"798":1,"799":1,"800":1,"801":1,"802":1,"803":1,"804":1,"805":1,"806":1,"1835":1,"1836":1,"1837":1,"1838":1,"1839":1,"1840":1,"1841":1,"1842":1,"1843":1,"1844":1,"1845":1,"1846":1},"3":{"0":3,"21":1,"130":2,"178":1,"251":2,"252":1,"254":1,"295":1,"335":1,"390":1,"395":2,"418":1,"425":1,"426":1,"443":1,"468":2,"488":1,"489":1,"508":1,"520":1,"524":1,"534":1,"539":1,"543":1,"551":1,"552":1,"607":1,"624":1,"696":1,"758":1,"776":1,"792":1,"796":1,"797":1,"799":1,"800":1,"819":1,"825":1,"827":1,"861":1,"869":1,"876":1,"905":1,"907":1,"934":1,"996":1,"1014":1,"1018":1,"1024":1,"1043":1,"1044":1,"1049":1,"1090":1,"1094":1,"1117":1,"1144":1,"1212":1,"1227":1,"1229":1,"1237":1,"1239":1,"1242":1,"1247":2,"1251":1,"1253":1,"1259":5,"1269":1,"1270":6,"1271":1,"1275":1,"1283":1,"1286":15,"1300":6,"1301":1,"1304":2,"1306":1,"1309":3,"1311":10,"1320":1,"1323":8,"1324":19,"1332":1,"1333":1,"1338":1,"1339":3,"1350":2,"1359":16,"1362":1,"1366":1,"1369":5,"1380":4,"1390":1,"1391":1,"1395":15,"1396":20,"1402":10,"1410":1,"1415":9,"1416":2,"1417":5,"1426":1,"1436":11,"1438":2,"1453":1,"1454":2,"1465":1,"1467":1,"1481":1,"1488":1,"1492":1,"1496":2,"1591":1,"1632":2,"1640":1,"1684":1,"1685":1,"1686":1,"1749":2,"1765":2,"1769":1,"1815":1,"1835":1,"1851":1,"1908":1,"1924":1,"1950":1,"1975":1,"1993":1,"2002":1,"2027":1,"2072":2,"2077":1,"2084":1,"2085":2,"2149":1,"2165":1,"2167":1,"2173":1,"2192":2,"2194":1,"2208":1,"2234":1}}],["against",{"0":{"1952":1,"2169":1},"1":{"1780":1,"1781":1,"1782":1,"1783":1,"1784":1,"1785":1,"1786":1,"1787":1,"1794":1,"1795":1,"1796":1,"1797":1,"1798":1,"1799":1,"1800":1,"1801":1,"1802":1},"3":{"0":37,"21":1,"31":2,"42":1,"53":1,"57":2,"62":1,"63":1,"80":1,"82":1,"90":1,"92":1,"98":1,"99":2,"100":1,"109":3,"121":1,"125":1,"128":1,"130":1,"135":3,"136":3,"137":3,"139":1,"143":1,"147":1,"150":2,"151":1,"159":1,"179":1,"182":1,"185":1,"186":1,"189":1,"196":1,"201":1,"206":1,"217":1,"220":1,"225":1,"234":1,"235":2,"245":2,"249":1,"250":1,"251":1,"252":1,"255":1,"257":1,"265":6,"280":1,"282":1,"284":2,"286":2,"295":1,"312":1,"314":1,"320":2,"322":1,"328":1,"333":1,"341":1,"342":1,"344":1,"350":1,"363":1,"365":1,"370":1,"371":1,"380":1,"405":1,"409":1,"427":1,"439":1,"446":1,"447":1,"451":1,"458":1,"459":1,"463":1,"464":1,"465":1,"466":1,"468":1,"472":2,"478":1,"486":1,"489":1,"497":3,"499":3,"502":1,"507":1,"510":1,"511":1,"536":2,"537":1,"538":2,"539":1,"543":1,"556":2,"563":1,"564":2,"566":1,"572":7,"573":1,"576":2,"577":1,"583":1,"585":3,"586":1,"591":3,"592":2,"593":1,"599":1,"608":1,"609":5,"610":1,"611":3,"618":1,"620":1,"625":1,"626":6,"628":1,"631":2,"632":1,"633":5,"640":3,"649":1,"657":1,"665":1,"682":1,"696":1,"698":2,"713":1,"715":2,"717":1,"718":1,"727":1,"733":2,"740":1,"743":1,"756":1,"759":2,"760":1,"765":3,"767":1,"768":2,"797":1,"798":1,"799":1,"804":1,"805":1,"810":2,"811":1,"812":1,"813":1,"818":1,"820":1,"821":1,"825":3,"827":3,"828":1,"832":1,"833":1,"837":1,"838":2,"842":2,"845":1,"859":1,"860":2,"861":4,"862":3,"863":2,"875":1,"876":1,"881":1,"890":1,"897":1,"905":3,"906":1,"910":1,"912":1,"914":1,"917":1,"918":1,"926":3,"930":1,"933":1,"941":1,"946":2,"948":1,"953":1,"954":1,"955":1,"966":1,"971":1,"973":1,"974":1,"976":1,"982":2,"983":1,"988":1,"989":1,"998":2,"1004":1,"1011":1,"1012":4,"1014":2,"1016":1,"1018":6,"1020":1,"1026":3,"1028":1,"1034":2,"1036":1,"1044":1,"1050":2,"1052":1,"1054":2,"1055":1,"1059":3,"1061":1,"1066":1,"1067":6,"1069":1,"1075":1,"1076":2,"1082":1,"1089":1,"1091":2,"1092":1,"1108":2,"1116":1,"1124":1,"1125":1,"1126":1,"1135":1,"1140":1,"1161":1,"1184":1,"1186":2,"1196":1,"1210":1,"1212":4,"1213":3,"1214":1,"1216":3,"1224":1,"1229":1,"1237":5,"1238":1,"1240":1,"1241":1,"1243":1,"1244":4,"1247":19,"1249":1,"1252":1,"1254":2,"1256":2,"1258":2,"1259":10,"1262":1,"1263":1,"1265":1,"1266":1,"1267":2,"1269":1,"1270":32,"1271":3,"1273":1,"1275":1,"1276":1,"1278":2,"1281":2,"1283":1,"1284":1,"1285":1,"1286":76,"1288":1,"1289":2,"1290":1,"1293":2,"1297":2,"1298":1,"1300":76,"1301":14,"1304":1,"1306":1,"1307":1,"1309":13,"1310":6,"1311":30,"1312":2,"1315":1,"1317":3,"1323":41,"1324":77,"1326":2,"1328":3,"1330":1,"1332":2,"1334":1,"1337":2,"1339":42,"1340":1,"1342":2,"1344":2,"1346":1,"1347":3,"1350":27,"1352":1,"1353":2,"1357":2,"1358":2,"1359":138,"1365":2,"1366":2,"1369":10,"1372":1,"1373":5,"1375":1,"1377":1,"1380":13,"1382":1,"1383":2,"1384":1,"1385":1,"1388":1,"1390":1,"1391":1,"1394":1,"1395":61,"1396":46,"1398":1,"1399":1,"1402":19,"1405":1,"1413":1,"1414":2,"1415":31,"1416":6,"1417":21,"1418":1,"1419":1,"1420":1,"1421":1,"1427":10,"1428":2,"1429":1,"1430":1,"1431":7,"1432":2,"1434":1,"1435":4,"1436":241,"1437":6,"1438":30,"1441":1,"1442":3,"1443":3,"1445":4,"1446":3,"1447":1,"1448":1,"1449":2,"1450":1,"1453":10,"1455":8,"1456":3,"1458":4,"1460":3,"1461":1,"1462":1,"1465":4,"1467":20,"1469":1,"1471":1,"1474":3,"1475":3,"1476":4,"1477":1,"1480":1,"1481":1,"1484":2,"1486":4,"1487":9,"1488":7,"1489":7,"1490":10,"1492":11,"1495":1,"1496":52,"1499":1,"1504":1,"1516":1,"1519":1,"1522":1,"1524":1,"1525":1,"1526":8,"1527":2,"1531":3,"1534":2,"1536":2,"1537":1,"1545":1,"1548":1,"1549":1,"1551":1,"1567":1,"1572":2,"1573":1,"1574":1,"1575":1,"1577":14,"1578":1,"1582":2,"1587":1,"1589":1,"1591":4,"1592":1,"1596":3,"1599":2,"1600":1,"1606":1,"1611":2,"1631":4,"1632":2,"1639":2,"1640":2,"1641":5,"1643":1,"1648":1,"1649":1,"1653":5,"1654":2,"1656":1,"1659":1,"1661":2,"1663":1,"1666":1,"1667":3,"1668":1,"1669":1,"1671":4,"1672":2,"1673":2,"1675":1,"1683":1,"1684":1,"1685":1,"1695":2,"1696":1,"1698":1,"1706":1,"1707":3,"1716":2,"1719":2,"1720":1,"1722":2,"1727":6,"1728":2,"1729":2,"1731":3,"1736":1,"1740":1,"1747":1,"1748":2,"1749":2,"1750":2,"1765":6,"1767":2,"1779":1,"1780":3,"1782":1,"1783":1,"1784":2,"1790":2,"1793":1,"1794":2,"1795":1,"1797":1,"1800":1,"1801":1,"1802":2,"1810":2,"1812":1,"1815":4,"1816":1,"1817":2,"1822":1,"1826":1,"1839":1,"1840":1,"1847":1,"1852":1,"1859":1,"1861":1,"1863":1,"1871":1,"1882":1,"1889":1,"1891":2,"1895":1,"1897":2,"1898":2,"1899":2,"1900":1,"1901":1,"1902":1,"1909":1,"1911":1,"1915":1,"1918":2,"1919":2,"1920":1,"1923":1,"1925":1,"1927":1,"1929":1,"1930":1,"1934":1,"1944":1,"1945":1,"1948":1,"1950":1,"1962":1,"1966":1,"1974":1,"1982":2,"1983":1,"1990":1,"1991":1,"1997":2,"2000":2,"2001":1,"2002":2,"2003":1,"2009":1,"2010":1,"2022":1,"2025":2,"2026":1,"2035":4,"2041":1,"2042":2,"2045":4,"2046":4,"2047":2,"2048":6,"2049":1,"2054":3,"2056":3,"2058":2,"2060":4,"2063":1,"2068":1,"2069":1,"2074":1,"2076":1,"2081":3,"2084":1,"2085":2,"2087":1,"2088":1,"2089":1,"2091":2,"2098":2,"2099":1,"2102":2,"2106":1,"2110":1,"2116":1,"2119":1,"2125":1,"2128":2,"2129":1,"2131":1,"2132":1,"2143":1,"2146":2,"2147":1,"2151":1,"2154":1,"2157":1,"2159":1,"2160":3,"2166":2,"2169":2,"2170":2,"2176":1,"2178":1,"2182":1,"2187":1,"2188":1,"2190":1,"2194":1,"2198":1,"2200":1,"2206":1,"2207":2,"2216":1,"2222":1,"2233":1,"2234":3,"2236":1,"2247":1}}],["agnostic",{"0":{"1361":1},"3":{"0":1,"59":1,"109":1,"110":1,"118":1,"164":1,"166":1,"167":1,"177":1,"265":2,"507":1,"690":1,"774":1,"1068":1,"1192":1,"1212":1,"1217":1,"1229":1,"1247":1,"1248":1,"1259":3,"1271":1,"1278":1,"1286":7,"1300":2,"1301":2,"1309":1,"1311":4,"1312":2,"1323":1,"1324":6,"1332":1,"1339":1,"1350":1,"1351":1,"1359":6,"1360":1,"1395":1,"1396":5,"1402":2,"1412":1,"1415":5,"1416":2,"1417":7,"1427":1,"1436":5,"1438":1,"1445":1,"1496":2,"1510":1,"1576":1,"1651":1,"1653":1,"1663":1,"1720":1,"1765":1,"1783":1,"1790":1,"1793":2,"1805":1,"1926":1,"1933":1,"1935":1,"1937":1,"2002":1,"2017":1,"2081":1,"2085":1,"2087":1,"2088":1,"2106":1,"2229":1,"2232":1}}],["aged",{"3":{"1465":1}}],["agerangespec",{"3":{"1199":2,"1207":1}}],["agegreaterthanspecification",{"3":{"1199":2,"1207":1}}],["agegreaterthanspec",{"3":{"1199":2,"1207":1}}],["agenda",{"3":{"387":1,"1309":5,"1350":1,"1351":1,"1358":1,"1359":4,"1369":2,"1436":3,"1438":1,"1489":1,"1631":1,"1922":2}}],["agents",{"2":{"636":1,"2050":1},"3":{"633":1,"636":2,"914":1,"917":1,"1004":1,"1007":1,"1167":1,"1212":1,"1496":1,"1526":3,"1531":1,"1570":1,"1577":2,"1591":1,"1895":1,"2042":1,"2050":1,"2241":2}}],["agentic",{"3":{"0":1,"1570":1,"1591":1,"2241":1}}],["agent",{"3":{"0":2,"1":1,"774":2,"905":1,"1013":1,"1067":1,"1069":1,"1090":2,"1169":1,"1283":1,"1286":2,"1300":3,"1311":1,"1324":2,"1339":1,"1395":1,"1406":1,"1415":2,"1430":1,"1436":5,"1438":1,"1449":1,"1465":1,"1553":3,"1577":2,"1582":1,"2173":1,"2223":1,"2241":5}}],["age=",{"3":{"1436":1}}],["age=0",{"3":{"217":1,"1324":1,"1339":1,"2151":1}}],["age=31536000",{"3":{"214":1,"1339":1,"1359":1,"2151":1}}],["ages",{"3":{"0":1,"903":1,"905":2,"907":1,"930":1,"1259":1,"1311":1,"1339":1,"1455":1,"1591":1,"1801":1}}],["age",{"2":{"24":1,"2158":1,"2193":1},"3":{"0":2,"15":1,"24":3,"200":1,"501":1,"536":2,"538":1,"540":1,"572":1,"591":1,"594":1,"625":1,"626":3,"627":1,"628":1,"629":1,"707":2,"733":1,"735":1,"809":1,"1256":1,"1259":5,"1286":3,"1298":1,"1300":1,"1301":2,"1324":5,"1395":2,"1445":1,"1455":1,"1460":1,"1465":1,"1467":1,"1475":2,"1476":1,"1488":1,"1665":1,"1982":1,"1984":2,"1985":1,"2007":1,"2056":1,"2158":3,"2161":1,"2169":2,"2170":1,"2193":3}}],["ahead",{"3":{"0":3,"62":1,"107":1,"109":1,"111":1,"170":1,"202":2,"214":1,"217":1,"265":1,"284":1,"290":1,"296":1,"348":1,"350":1,"353":1,"401":1,"459":1,"462":1,"464":1,"465":1,"534":1,"749":1,"751":1,"790":2,"848":1,"988":2,"1012":1,"1076":1,"1117":1,"1259":2,"1264":1,"1265":1,"1267":1,"1270":2,"1286":9,"1300":1,"1311":5,"1323":2,"1324":3,"1333":1,"1339":3,"1344":1,"1359":21,"1369":2,"1383":1,"1395":3,"1396":6,"1402":2,"1415":2,"1416":1,"1417":1,"1436":4,"1455":2,"1489":1,"1496":2,"1686":1,"1799":1,"1821":1,"1825":1,"1852":1,"1888":1,"1891":1,"1920":1,"1977":1,"2124":1,"2128":1,"2158":1,"2159":1}}],["amd64",{"3":{"1465":1}}],["am",{"0":{"2063":1},"3":{"1396":1,"1415":1,"1416":1,"1417":4,"1436":1,"2080":1,"2118":2,"2138":1,"2215":2}}],["amber",{"3":{"1324":2}}],["ambiguities",{"3":{"1639":1}}],["ambiguity",{"1":{"985":1,"986":1,"987":1,"988":1,"989":1,"990":1,"991":1,"992":1},"3":{"0":1,"109":1,"361":1,"592":1,"629":1,"985":1,"987":1,"988":5,"989":1,"990":1,"991":1,"1270":1,"1286":5,"1293":1,"1300":1,"1359":1,"1369":1,"1380":1,"1395":1,"1436":1,"1454":1,"1577":1,"1664":1,"1840":1,"2234":1}}],["ambiguousmatchexception",{"3":{"1324":2}}],["ambiguoussource",{"2":{"1840":1,"1852":1},"3":{"988":1,"1286":1,"1840":1,"1852":1}}],["ambiguous",{"0":{"1840":1},"3":{"0":1,"109":1,"318":1,"320":1,"324":1,"325":1,"326":1,"617":1,"709":1,"861":1,"988":3,"992":1,"1191":1,"1196":1,"1270":3,"1278":1,"1286":5,"1323":1,"1324":2,"1350":1,"1359":3,"1380":1,"1395":1,"1415":4,"1436":5,"1496":16,"1500":1,"1611":1,"1661":1,"1664":1,"1729":1,"1840":2,"1852":1}}],["ambiently",{"3":{"1286":1}}],["ambienthandler",{"3":{"1247":2}}],["ambientscope",{"2":{"1246":1},"3":{"1199":2,"1203":1,"1207":1,"1246":1,"1247":3,"1496":1}}],["ambientorigin",{"2":{"26":1,"202":1,"702":1,"1040":1,"1042":1,"1253":1,"1318":1,"2188":1,"2195":1},"3":{"0":1,"26":4,"202":3,"702":2,"1040":1,"1042":3,"1199":6,"1203":1,"1207":2,"1253":1,"1259":5,"1286":6,"1313":1,"1318":6,"1323":14,"1496":2,"2188":1,"2195":1}}],["ambient",{"1":{"1158":1,"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1},"3":{"0":3,"15":1,"202":1,"359":1,"365":1,"372":1,"583":1,"585":1,"899":1,"905":1,"926":1,"988":1,"1158":1,"1161":1,"1212":2,"1229":1,"1237":2,"1246":2,"1247":4,"1251":1,"1253":2,"1259":10,"1263":2,"1265":1,"1270":10,"1271":2,"1274":1,"1277":1,"1278":1,"1286":20,"1296":1,"1300":5,"1306":1,"1309":7,"1311":5,"1313":1,"1318":2,"1323":5,"1324":11,"1350":3,"1352":1,"1359":23,"1395":1,"1396":8,"1402":2,"1412":1,"1415":2,"1417":1,"1436":12,"1496":1,"1526":1,"1577":1,"1585":1,"1591":2,"1664":1,"1840":1,"2044":1,"2050":1,"2061":1,"2137":1,"2144":1,"2234":1}}],["america",{"3":{"1350":1,"1359":2,"1364":1,"1369":1,"1384":1,"1395":3,"1438":1,"1630":1,"1631":1,"1637":1,"2222":1}}],["american",{"3":{"1020":1,"1091":1,"1424":1}}],["amends",{"1":{"730":1,"731":1,"732":1,"733":1,"734":1,"735":1,"736":1,"737":1},"3":{"0":5,"247":2,"432":1,"730":1,"731":1,"817":1,"836":1,"929":1,"1212":5,"2033":1,"2234":2}}],["amendments",{"3":{"66":1,"72":1,"827":1,"1339":1}}],["amendment",{"0":{"81":1},"3":{"0":1,"76":1,"81":2,"82":1,"230":1,"241":1,"243":1,"249":1,"258":1,"395":1,"409":1,"411":2,"438":1,"825":2,"827":2,"1079":1,"1339":1,"1455":1,"1458":1,"1467":1,"1600":1,"1748":1,"1755":1,"1765":1,"2026":1}}],["amended",{"0":{"401":1,"402":1,"407":1},"3":{"0":16,"15":1,"57":1,"66":1,"76":1,"145":7,"184":1,"223":1,"241":3,"243":3,"244":1,"253":1,"263":1,"265":2,"328":2,"386":6,"395":14,"397":1,"408":1,"409":1,"411":1,"439":1,"446":1,"526":2,"534":3,"680":2,"688":2,"691":1,"737":1,"817":1,"842":1,"1073":1,"1212":1,"1496":1,"1577":1,"1631":1,"2021":1}}],["amqpendpoint",{"3":{"1339":1}}],["amqpendpointname",{"3":{"1339":1}}],["amqptargetport",{"3":{"1339":1}}],["amqp",{"3":{"626":1,"640":1,"1075":1,"1323":2,"1327":1,"1339":5,"1436":3,"1438":2,"1444":1,"1455":1}}],["amplify",{"3":{"2038":1}}],["amplifies",{"3":{"2008":1}}],["amplified",{"3":{"1339":1}}],["amplifier",{"3":{"369":1,"1311":1,"1324":1}}],["amplification",{"3":{"227":1,"717":1,"792":1,"1259":1,"1324":1,"1332":1,"1339":1,"1940":1}}],["ample",{"3":{"361":1,"1286":1,"1300":1,"2147":1}}],["amortized",{"3":{"1534":1}}],["amortizes",{"3":{"459":1}}],["amortises",{"3":{"1247":1}}],["amounts",{"3":{"1229":1,"1237":1,"1324":4,"1767":1}}],["amount",{"2":{"660":1},"3":{"284":1,"536":1,"592":1,"657":5,"658":1,"660":1,"683":1,"1026":2,"1027":1,"1234":1,"1237":6,"1247":1,"1282":1,"1286":3,"1312":2,"1324":6,"1389":1,"1395":3,"1396":3,"1402":1,"1415":1,"1436":5,"1467":1,"1749":2,"1764":3,"1765":2,"1767":3,"1770":1,"1776":1,"1810":1,"1909":1,"1941":1,"2048":1,"2075":1,"2169":2}}],["among",{"3":{"0":2,"111":1,"132":1,"175":1,"386":1,"549":1,"551":1,"577":1,"591":1,"628":1,"633":1,"655":1,"743":1,"765":1,"766":1,"891":1,"1116":1,"1124":1,"1196":1,"1213":1,"1229":1,"1237":1,"1239":1,"1243":1,"1247":1,"1270":1,"1286":2,"1309":1,"1323":2,"1324":2,"1339":1,"1350":2,"1359":5,"1369":3,"1395":1,"1404":1,"1406":1,"1415":2,"1417":2,"1427":1,"1436":3,"1467":1,"1469":1,"1496":8,"1526":1,"1582":1,"1583":1,"1631":1,"1635":1,"1722":1,"1824":1,"1839":1,"1898":1,"1910":1,"1927":1,"1951":1,"1963":1,"2001":1,"2044":1,"2089":1}}],["amr",{"2":{"2199":1},"3":{"0":1,"1059":1,"1300":1,"2199":1}}],["ac5b175",{"3":{"1496":1}}],["acompiledpermission",{"3":{"1436":1}}],["acontrollerthatinheritsitsdecisionfromanabstractbase",{"3":{"1436":3}}],["acountinafixedpluralsentence",{"3":{"1436":2}}],["achieved",{"3":{"1339":1,"1395":1}}],["achieves",{"3":{"809":1}}],["acute",{"3":{"1324":1}}],["acme",{"2":{"1718":1,"1723":1},"3":{"1270":1,"1718":1,"1719":2,"1723":1,"1851":1,"1920":3}}],["acyclicfixtures",{"3":{"1207":1,"1436":2}}],["acyclicconsumer",{"3":{"1199":1,"1207":1,"1436":3}}],["acyclicity",{"3":{"846":1,"1247":1,"1270":1,"1436":4,"1671":1}}],["acyclic",{"3":{"507":1,"513":1,"1207":2,"1286":1,"1324":2,"1417":3,"1431":1,"1436":7,"1572":1}}],["acquiring",{"3":{"707":1,"1270":1,"1298":1,"1300":3,"1324":1,"1339":1,"1395":1,"1909":1,"1912":1}}],["acquireasynccore",{"3":{"1311":2}}],["acquireasync",{"3":{"1270":3,"1300":3,"1301":1}}],["acquireaccesstokenasync",{"2":{"507":1},"3":{"507":1,"1324":7,"1417":1,"1436":1}}],["acquires",{"3":{"0":1,"510":1,"524":1,"549":1,"996":1,"1145":1,"1300":1,"1301":2,"1311":1,"1324":3,"1396":1}}],["acquire",{"3":{"0":1,"157":2,"827":1,"863":1,"996":2,"998":1,"1270":2,"1286":1,"1300":2,"1301":1,"1311":1,"1316":1,"1323":7,"1324":3,"1402":1,"1417":1,"1436":1,"1438":1,"1577":2,"1909":1,"2176":1}}],["acquired",{"3":{"0":1,"688":1,"1300":1,"1311":6,"1323":1,"1324":4,"1436":1}}],["acquisitions",{"3":{"507":1}}],["acquisition",{"3":{"506":1,"507":1,"513":2,"550":1,"551":1,"996":3,"997":1,"1269":1,"1300":1,"1311":1,"1316":1,"1323":9,"1324":8,"1417":2,"1669":1,"1909":2}}],["acknowledging",{"3":{"1306":1,"1396":1,"1933":1}}],["acknowledge",{"3":{"1417":1}}],["acknowledges",{"3":{"1396":1,"2171":1}}],["acknowledgement",{"3":{"988":1,"1286":1,"1339":1,"1380":1,"1438":1,"1840":1}}],["acknowledged",{"3":{"790":1,"794":1,"1323":1,"1359":1,"1402":1,"1415":1}}],["acks",{"3":{"1259":2,"1323":1}}],["acked",{"3":{"1258":1,"1259":1,"1311":2,"1355":2,"1359":1,"1396":1,"1402":1,"1413":1,"1415":1,"1910":1}}],["acking",{"3":{"195":1,"1259":1,"1396":2}}],["ack",{"3":{"194":1,"201":2,"1259":2,"1323":2}}],["acl",{"3":{"0":1,"1576":1,"1577":1}}],["acted",{"3":{"1237":1,"1286":1,"1324":1,"1350":1,"1395":1,"1402":2}}],["acts",{"3":{"435":1,"538":1,"601":1,"741":1,"793":1,"813":1,"821":1,"1228":1,"1233":1,"1286":1,"1311":1,"1318":1,"1323":1,"1324":1,"1359":2,"1402":1,"1415":2,"1436":2,"1438":1,"1455":1,"1473":1,"1478":1,"1651":1,"1822":1,"1840":1,"1843":1,"1912":1,"2135":1,"2167":1,"2170":1}}],["actual",{"2":{"1457":1,"1458":1},"3":{"93":1,"235":1,"265":1,"368":1,"529":1,"666":1,"707":1,"765":1,"767":1,"800":1,"839":1,"1237":1,"1241":1,"1247":2,"1251":1,"1259":1,"1270":1,"1271":1,"1281":1,"1285":1,"1286":7,"1300":6,"1307":1,"1310":1,"1311":1,"1323":7,"1324":5,"1339":2,"1350":1,"1359":5,"1369":3,"1380":1,"1395":5,"1396":7,"1402":2,"1415":5,"1416":1,"1417":3,"1427":1,"1429":1,"1436":10,"1438":1,"1441":1,"1455":1,"1457":2,"1458":2,"1466":1,"1467":1,"1488":1,"1496":3,"1498":1,"1567":1,"1591":2,"1653":1,"1686":1,"1764":1,"1815":1,"1817":1,"1818":1,"1865":1,"1927":1,"2043":1,"2054":1,"2128":1,"2196":1}}],["actually",{"0":{"1363":1,"1399":1,"1425":1,"1872":1,"1883":1,"1909":1,"2113":1,"2146":1},"1":{"1794":1,"1795":1,"1796":1,"1797":1,"1798":1,"1799":1,"1800":1,"1801":1,"1802":1,"1951":1,"1952":1,"1953":1,"1954":1,"1955":1,"1956":1,"1957":1,"1958":1,"1959":1,"2030":1,"2031":1,"2032":1,"2033":1,"2034":1,"2035":1,"2036":1,"2037":1,"2038":1,"2039":1},"3":{"0":2,"10":1,"21":1,"38":1,"70":1,"103":1,"109":1,"115":1,"125":1,"126":1,"130":1,"136":1,"150":1,"157":2,"177":1,"200":1,"215":1,"259":1,"286":1,"318":1,"335":2,"342":1,"343":1,"359":1,"369":1,"371":1,"373":1,"395":1,"401":1,"407":1,"428":1,"447":1,"461":2,"463":1,"506":1,"526":2,"543":2,"549":1,"564":1,"572":1,"585":1,"592":2,"601":1,"607":1,"626":1,"627":1,"630":1,"638":1,"639":1,"642":1,"650":1,"674":1,"682":1,"689":2,"690":1,"691":1,"714":1,"716":1,"718":1,"741":1,"758":1,"767":1,"773":1,"774":1,"789":1,"791":1,"797":1,"832":1,"836":1,"838":1,"861":1,"873":1,"876":1,"881":1,"905":1,"906":1,"914":1,"946":1,"962":1,"963":1,"971":1,"972":2,"1033":1,"1041":1,"1074":1,"1084":1,"1123":1,"1142":1,"1147":1,"1162":1,"1176":1,"1190":1,"1212":1,"1220":1,"1229":2,"1231":2,"1237":1,"1244":2,"1247":6,"1253":1,"1259":5,"1263":1,"1267":1,"1270":9,"1271":1,"1276":1,"1277":1,"1286":42,"1300":16,"1301":3,"1302":1,"1309":5,"1310":4,"1311":17,"1312":3,"1317":1,"1323":23,"1324":28,"1339":18,"1344":1,"1350":14,"1351":1,"1352":1,"1359":45,"1363":1,"1369":7,"1379":1,"1380":7,"1381":1,"1389":2,"1392":1,"1395":28,"1396":33,"1397":1,"1398":1,"1402":13,"1405":1,"1414":1,"1415":24,"1416":8,"1417":12,"1421":1,"1424":1,"1425":1,"1427":4,"1431":3,"1432":2,"1435":2,"1436":77,"1438":8,"1443":1,"1448":1,"1449":1,"1451":1,"1453":1,"1454":1,"1455":5,"1458":1,"1461":1,"1467":3,"1470":3,"1471":1,"1476":1,"1484":1,"1486":1,"1488":2,"1489":5,"1490":3,"1491":1,"1492":1,"1496":2,"1500":1,"1537":1,"1566":1,"1572":1,"1605":1,"1651":1,"1665":1,"1684":1,"1685":2,"1686":1,"1701":1,"1710":1,"1721":1,"1726":1,"1730":1,"1739":1,"1749":1,"1764":1,"1767":1,"1769":5,"1783":1,"1784":1,"1788":1,"1793":2,"1794":1,"1796":2,"1810":1,"1813":1,"1818":1,"1821":1,"1825":1,"1852":1,"1857":1,"1860":1,"1865":1,"1867":1,"1876":2,"1877":1,"1895":1,"1908":1,"1909":1,"1916":1,"1920":1,"1929":1,"1930":1,"1931":1,"1950":1,"1951":1,"1953":2,"1955":1,"1960":1,"1965":1,"1968":1,"1973":1,"1980":1,"1995":1,"1999":1,"2001":1,"2003":1,"2011":1,"2013":1,"2014":1,"2028":1,"2030":3,"2032":1,"2034":1,"2039":1,"2042":1,"2043":1,"2044":1,"2045":1,"2046":1,"2049":1,"2054":1,"2056":2,"2060":1,"2061":1,"2072":1,"2079":1,"2084":1,"2089":1,"2100":1,"2106":1,"2107":1,"2111":1,"2116":1,"2121":1,"2128":1,"2130":2,"2131":1,"2143":1,"2144":1,"2147":1,"2149":1,"2152":1,"2153":1,"2155":1,"2156":1,"2158":1,"2162":3,"2171":2,"2179":1,"2185":1,"2193":1,"2205":1,"2207":1,"2210":1,"2211":1,"2234":1}}],["act",{"0":{"1236":1},"3":{"39":1,"81":1,"120":1,"202":1,"215":1,"225":1,"231":1,"830":1,"888":1,"898":1,"905":2,"989":2,"1005":1,"1051":1,"1067":2,"1091":1,"1175":1,"1186":1,"1252":1,"1259":2,"1265":1,"1270":2,"1280":1,"1286":8,"1289":1,"1300":2,"1304":1,"1309":2,"1311":1,"1313":1,"1318":1,"1323":1,"1324":4,"1327":1,"1339":2,"1342":1,"1350":2,"1357":1,"1358":1,"1359":11,"1376":1,"1380":1,"1396":5,"1402":5,"1415":4,"1427":2,"1430":1,"1436":7,"1438":2,"1441":1,"1478":5,"1485":1,"1639":1,"1654":1,"1771":1,"1824":1,"1873":1,"1877":1,"1908":1,"1934":1,"1940":1,"1941":1,"1971":1,"2034":1,"2057":1,"2066":1,"2154":1,"2172":1,"2176":1,"2192":1}}],["actors",{"0":{"1621":1,"1757":1},"3":{"1152":1,"1154":1,"1350":1,"1438":1,"1632":21,"1638":1,"1641":6}}],["actor",{"1":{"1148":1,"1149":1,"1150":1,"1151":1,"1152":1,"1153":1,"1154":1,"1155":1,"1156":1,"1157":1},"2":{"1150":1},"3":{"0":1,"340":1,"718":1,"1148":1,"1149":1,"1150":7,"1151":2,"1152":2,"1153":1,"1154":2,"1155":1,"1212":2,"1300":4,"1359":5,"1395":1,"1396":2,"1436":1,"1438":1,"1459":1,"1496":1,"1526":1,"1562":2,"1591":1,"1620":2,"1621":1,"1626":1,"1632":5,"1639":1,"1756":3,"1757":1,"1761":2,"1768":2,"1844":1,"1869":1,"2234":1}}],["actingspeakerid",{"2":{"1357":1},"3":{"1357":1,"1359":14,"1373":1,"1380":5}}],["acting",{"3":{"290":1,"797":1,"802":1,"1274":1,"1286":1,"1300":2,"1324":1,"1359":7,"1377":1,"1396":1,"1402":1,"1415":4,"1417":2,"1438":1,"1765":1}}],["activitiescontrollertests",{"3":{"1199":1,"1207":2,"1438":2}}],["activitiescontroller",{"3":{"1199":4,"1203":1,"1207":2,"1350":4,"1359":21,"1371":2,"1372":3,"1373":3,"1375":2,"1380":11,"1436":1}}],["activitiescache",{"2":{"386":1},"3":{"386":1,"1350":1,"1379":1,"1380":2}}],["activitiesmanage",{"2":{"184":1},"3":{"184":1,"1350":2,"1359":2,"1373":1,"1380":2}}],["activities",{"0":{"1392":1},"2":{"1359":1,"1380":1,"1395":1},"3":{"15":1,"186":1,"418":1,"836":1,"881":1,"1004":1,"1043":1,"1203":36,"1207":96,"1270":2,"1271":1,"1342":4,"1346":2,"1347":1,"1348":2,"1350":30,"1351":2,"1352":3,"1353":2,"1359":114,"1361":1,"1362":1,"1363":1,"1364":1,"1369":11,"1375":1,"1380":8,"1381":1,"1382":3,"1383":5,"1384":3,"1391":1,"1392":5,"1395":48,"1415":1,"1436":1,"1437":1,"1438":5,"1447":1,"1526":4,"1621":1,"1625":1,"1626":3,"1627":7,"1639":1,"2112":1,"2194":1,"2234":1}}],["activitylabel",{"3":{"1396":2}}],["activitylistener",{"3":{"1339":2}}],["activitylist",{"2":{"1627":1},"3":{"1199":1,"1203":1,"1207":2,"1324":2,"1350":2,"1383":4,"1392":2,"1395":12,"1627":1}}],["activitykind",{"3":{"1339":4}}],["activityvalidationrules",{"3":{"1207":9,"1271":1,"1350":1,"1353":1,"1359":44}}],["activityvenueurlrules",{"3":{"1199":2,"1203":1,"1207":1,"1271":1,"1359":4}}],["activityvenuenamerules",{"3":{"1199":2,"1203":1,"1207":1,"1359":2}}],["activityvenueaddressrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":2}}],["activitynavigationpopulatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["activitynavigationpopulator",{"3":{"1199":3,"1203":1,"1207":2,"1350":1,"1354":1,"1359":10}}],["activitynamerules",{"3":{"1199":2,"1203":1,"1207":1,"1350":1,"1359":5}}],["activitybuilder",{"3":{"1199":3,"1207":2,"1436":1,"1438":1}}],["activityupdateappliertests",{"3":{"1199":1,"1207":2}}],["activityupdateapplier",{"3":{"1199":2,"1203":1,"1207":2,"1270":2,"1354":1,"1359":7}}],["activityupdaterequestvalidatortests",{"3":{"1199":1,"1207":2}}],["activityupdaterequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":11}}],["activityupdaterequest",{"3":{"1199":9,"1203":1,"1207":2,"1350":1,"1359":15,"1380":1}}],["activityformfields",{"3":{"1350":1,"1395":2}}],["activityformmodel",{"3":{"1199":3,"1203":1,"1207":2,"1350":1,"1384":2,"1395":9}}],["activityfieldrules",{"3":{"1199":3,"1203":1,"1207":1,"1353":1,"1359":18}}],["activitydetails",{"2":{"1394":1},"3":{"1394":1,"1395":1}}],["activitydetailtests",{"3":{"1199":1,"1207":2}}],["activitydetail",{"2":{"1392":1,"1627":1},"3":{"1199":2,"1203":1,"1207":2,"1350":1,"1384":2,"1392":2,"1395":20,"1627":1}}],["activitydescriptionrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":7}}],["activitydtomappertests",{"3":{"1199":1,"1207":2,"1359":2}}],["activitydtomapper",{"3":{"1199":5,"1203":1,"1207":2,"1350":3,"1353":1,"1359":10}}],["activitydto",{"3":{"1199":20,"1203":1,"1207":2,"1347":2,"1350":16,"1359":14,"1380":1,"1382":1,"1395":14}}],["activityid",{"3":{"1350":2}}],["activityidentifiertype",{"2":{"468":1,"475":1,"803":1},"3":{"468":1,"475":1,"803":1,"1350":3,"1359":5,"1395":4}}],["activityinvariantstests",{"3":{"1199":1,"1207":2,"1438":1}}],["activityinvariants",{"2":{"1344":1,"1362":1},"3":{"1199":12,"1203":1,"1207":2,"1344":4,"1350":10,"1359":29,"1362":1,"1369":5}}],["activityevent",{"3":{"1369":1}}],["activityeventidrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":12}}],["activityeditmodel",{"3":{"1199":3,"1203":1,"1207":2,"1395":6}}],["activitycontext",{"3":{"1259":1}}],["activityconfiguration",{"2":{"1361":1},"3":{"1199":1,"1203":1,"1207":2,"1350":3,"1361":2,"1362":5,"1369":4}}],["activitycreatetests",{"3":{"1199":1,"1207":2,"1436":1}}],["activitycreate",{"2":{"1392":1,"1627":1},"3":{"1199":2,"1203":1,"1207":2,"1350":3,"1392":2,"1395":19,"1526":1,"1627":1}}],["activitycreaterequestvalidatortests",{"3":{"1199":1,"1207":2,"1359":2}}],["activitycreaterequestvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":18}}],["activitycreaterequestmapper",{"3":{"1199":1,"1203":1,"1207":2,"1359":9}}],["activitycreaterequest",{"3":{"1199":10,"1203":1,"1207":2,"1270":1,"1350":1,"1359":23,"1380":1}}],["activitycreatemodel",{"3":{"1199":4,"1203":1,"1207":2,"1395":5}}],["activitychanged",{"2":{"780":1},"3":{"780":1,"782":1,"1199":3,"1203":1,"1207":2,"1345":1,"1350":10,"1359":2}}],["activitysortorderrules",{"3":{"1199":2,"1203":1,"1207":1,"1359":4}}],["activitysource",{"2":{"405":1,"1096":1},"3":{"405":1,"1096":1,"1286":1,"1427":1,"1442":1}}],["activityservice",{"3":{"881":1,"1199":5,"1203":1,"1207":2,"1382":3,"1395":19}}],["activitytraceflags",{"2":{"1333":1},"3":{"1333":2,"1339":4,"1443":1}}],["activitytests",{"3":{"1199":1,"1207":2,"1438":1}}],["activitytimerangerules",{"3":{"1199":2,"1203":1,"1207":1,"1353":2,"1359":7}}],["activitytimeoutheader",{"3":{"1436":1}}],["activitytimeout",{"2":{"837":1,"838":1},"3":{"837":1,"838":2,"1339":1,"1447":2}}],["activitytype",{"3":{"0":1,"690":1,"1212":1,"1396":25,"1415":3,"1631":1}}],["activity",{"2":{"692":1,"924":1,"1346":1,"1425":1},"3":{"0":1,"18":1,"395":2,"397":1,"399":2,"404":2,"406":1,"427":2,"428":1,"690":1,"692":3,"725":1,"827":1,"836":1,"837":1,"838":2,"842":1,"924":1,"1091":2,"1184":1,"1192":1,"1199":44,"1203":1,"1207":2,"1253":1,"1256":2,"1259":9,"1270":2,"1275":1,"1277":1,"1286":8,"1311":5,"1324":1,"1333":4,"1337":1,"1338":2,"1339":31,"1340":1,"1342":12,"1343":4,"1346":3,"1350":57,"1351":1,"1352":3,"1354":1,"1359":115,"1361":1,"1369":9,"1375":1,"1380":7,"1387":1,"1391":1,"1392":2,"1395":28,"1396":48,"1415":4,"1416":17,"1417":3,"1421":1,"1425":4,"1427":10,"1435":1,"1436":2,"1438":12,"1442":1,"1443":2,"1447":1,"1496":3,"1526":5,"1535":1,"1626":2,"1627":2,"1629":1,"1631":5,"1638":2,"1639":1,"1656":1,"1677":1,"1841":1,"2007":1,"2011":1,"2025":1,"2158":2,"2159":4,"2161":2,"2162":1,"2174":1}}],["activatable",{"3":{"1324":3}}],["activating",{"3":{"1286":1,"1293":1,"1300":1,"1322":1,"1417":1,"1436":1}}],["activationfailed",{"3":{"1455":1}}],["activations",{"3":{"1286":1}}],["activation",{"3":{"0":2,"558":1,"607":2,"609":4,"611":2,"755":1,"757":3,"758":1,"759":4,"760":3,"1150":1,"1270":1,"1286":4,"1300":1,"1323":1,"1396":4,"1416":8,"1417":2,"1436":2,"1442":1,"1455":6,"1461":4,"1465":2,"1467":7,"1469":3,"1474":2,"1476":3,"1477":1,"1482":1,"1496":1,"1591":1,"1764":1,"2037":2,"2039":1,"2160":1}}],["activatorutilities",{"3":{"1286":10}}],["activator",{"2":{"583":1,"585":1,"1315":1},"3":{"583":1,"585":1,"1229":2,"1237":1,"1247":1,"1286":3,"1300":2,"1315":1,"1323":1,"1436":1}}],["activate",{"3":{"1270":1,"1297":1,"1300":1,"1323":2,"1416":1,"1417":1,"1467":1}}],["activates",{"3":{"99":1,"234":1,"1278":1,"1286":1,"1293":1,"1300":1,"1311":1,"1322":1,"1417":3,"1431":3,"1436":3,"1441":1,"1443":1,"1455":2,"1591":1}}],["activated",{"3":{"0":1,"757":1,"760":1,"1432":1,"1436":3}}],["activeprobepath",{"3":{"1436":2}}],["activeprobetimeout",{"3":{"1436":1}}],["activeprobeinterval",{"3":{"1436":1}}],["activeutterance",{"3":{"1417":2}}],["activevote",{"3":{"1402":1}}],["activehealthcheckconfig",{"3":{"1339":3}}],["activehealthchecksexpected",{"2":{"578":1,"2056":1},"3":{"572":2,"578":1,"1436":5,"2056":1}}],["activecircuits",{"3":{"1324":4}}],["activespec",{"3":{"1199":2,"1207":1,"1496":1}}],["activerevisionsmode",{"2":{"757":1},"3":{"757":1,"1467":1}}],["actively",{"3":{"162":1,"174":1,"500":1,"1270":2,"1311":1,"1417":1,"1436":1,"1465":1,"1467":2,"1476":1,"1478":1,"1537":1,"1599":1,"2046":1}}],["active",{"1":{"456":1,"457":1,"458":1,"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1},"2":{"759":1},"3":{"0":7,"39":1,"40":1,"100":1,"120":1,"175":1,"195":1,"236":1,"265":4,"371":1,"372":1,"381":1,"390":1,"397":1,"402":2,"456":1,"458":1,"501":1,"545":1,"551":1,"572":5,"575":1,"578":2,"690":1,"715":1,"757":1,"759":1,"825":1,"827":5,"829":1,"831":1,"832":2,"833":6,"1026":3,"1042":2,"1124":2,"1125":1,"1168":2,"1231":1,"1237":1,"1247":2,"1274":1,"1286":14,"1293":1,"1294":1,"1300":15,"1309":1,"1311":2,"1312":2,"1318":2,"1323":3,"1324":28,"1329":1,"1330":1,"1333":2,"1338":2,"1339":24,"1350":7,"1355":2,"1359":13,"1385":1,"1395":17,"1396":38,"1398":2,"1400":1,"1401":1,"1402":30,"1413":1,"1415":6,"1417":8,"1424":1,"1436":21,"1438":1,"1443":6,"1447":4,"1450":1,"1451":1,"1455":2,"1467":4,"1477":1,"1488":1,"1526":5,"1534":1,"1562":1,"1590":1,"1591":1,"1600":1,"1627":1,"1630":3,"1631":3,"1632":2,"1633":1,"1635":2,"1639":7,"1640":1,"1641":2,"1643":1,"1653":1,"1663":1,"1667":1,"1671":1,"1677":2,"1747":2,"1749":3,"1750":3,"1761":1,"1764":2,"1765":6,"1767":5,"1768":1,"1769":1,"1773":2,"1810":1,"1861":1,"1984":1,"2011":1,"2031":1,"2056":2,"2064":1,"2071":1,"2085":1,"2087":1,"2088":1,"2158":1,"2160":1,"2187":2,"2222":1,"2240":2,"2243":1}}],["actiongroup",{"3":{"1577":1}}],["actionability",{"3":{"1436":1}}],["actionabletakeaways",{"3":{"1369":1}}],["actionabletakeawaysscore",{"3":{"1350":1,"1359":1,"1369":1}}],["actionable",{"3":{"1067":1,"1286":1,"1301":1,"1309":1,"1311":1,"1323":1,"1324":3,"1350":2,"1359":5,"1402":2,"1436":6,"1453":1,"1455":2,"1466":1,"1467":1,"1472":1,"1479":1,"1802":1,"2198":2,"2205":1}}],["actionview",{"3":{"1416":3}}],["actionid",{"3":{"1416":1}}],["actioned",{"3":{"1396":1}}],["action<",{"3":{"1395":1}}],["actioncolor",{"3":{"1324":1}}],["actiontext",{"3":{"1324":2}}],["actiondescriptor",{"2":{"1300":1},"3":{"1300":1}}],["actionresult",{"2":{"1227":1},"3":{"1227":1,"1311":1,"1380":1,"1415":2}}],["actions",{"1":{"1993":1,"1994":1,"1995":1,"1996":1,"1997":1,"1998":1},"2":{"626":1},"3":{"0":6,"149":1,"161":1,"175":2,"189":1,"273":1,"318":1,"324":1,"340":1,"343":1,"368":1,"370":2,"371":2,"372":2,"373":2,"374":5,"375":3,"413":1,"419":1,"448":1,"459":1,"591":2,"594":1,"626":17,"627":2,"628":2,"629":4,"692":1,"719":2,"725":1,"743":2,"854":1,"1012":1,"1074":1,"1116":1,"1247":1,"1270":1,"1286":4,"1294":1,"1300":6,"1309":5,"1311":25,"1323":5,"1324":16,"1350":3,"1359":11,"1369":1,"1371":2,"1372":1,"1373":1,"1375":1,"1380":19,"1395":4,"1396":5,"1402":9,"1406":2,"1407":2,"1408":1,"1409":1,"1414":2,"1415":18,"1416":7,"1417":4,"1432":1,"1436":14,"1438":1,"1452":1,"1453":5,"1454":5,"1455":4,"1456":2,"1457":1,"1459":2,"1461":2,"1465":1,"1466":1,"1467":6,"1468":1,"1472":2,"1474":1,"1475":8,"1482":1,"1483":1,"1484":3,"1488":2,"1491":1,"1492":2,"1496":11,"1526":3,"1531":2,"1534":1,"1553":1,"1559":2,"1561":1,"1577":4,"1582":2,"1583":1,"1585":1,"1586":1,"1591":2,"1599":2,"1626":2,"1627":1,"1630":1,"1631":4,"1632":13,"1633":1,"1641":2,"1747":1,"1749":1,"1750":3,"1760":2,"1870":1,"1874":1,"1875":1,"1876":1,"1898":1,"1925":1,"1930":1,"1992":1,"1993":1,"1996":1,"2001":1,"2002":2,"2085":2,"2133":1,"2160":1,"2210":1,"2221":1}}],["action",{"0":{"1350":1,"1372":1},"1":{"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"326":1},"2":{"1370":1,"1919":1},"3":{"0":11,"24":1,"77":1,"136":1,"155":2,"157":8,"159":1,"160":8,"175":2,"197":1,"209":1,"214":1,"219":1,"226":1,"265":2,"299":1,"300":1,"315":1,"318":14,"319":1,"325":1,"326":1,"330":2,"332":1,"334":1,"340":1,"341":5,"343":2,"345":1,"368":1,"370":12,"371":2,"372":3,"374":3,"375":7,"428":1,"444":1,"448":1,"450":1,"523":1,"528":1,"530":1,"534":1,"536":3,"538":2,"591":4,"594":3,"609":2,"611":1,"624":1,"626":22,"628":2,"629":5,"643":1,"644":1,"674":1,"690":1,"694":1,"723":1,"725":4,"726":1,"729":1,"733":1,"741":2,"744":1,"749":1,"788":1,"793":1,"809":1,"868":1,"869":1,"873":1,"881":1,"883":1,"897":4,"903":1,"905":2,"907":2,"914":1,"921":1,"922":3,"923":1,"995":1,"996":1,"1019":1,"1116":1,"1117":1,"1118":1,"1212":4,"1217":1,"1218":1,"1220":2,"1229":4,"1237":2,"1244":1,"1247":10,"1249":1,"1259":2,"1264":1,"1270":2,"1286":6,"1297":4,"1300":33,"1301":2,"1304":1,"1306":1,"1309":13,"1310":2,"1311":82,"1316":1,"1323":9,"1324":28,"1339":6,"1350":6,"1359":68,"1369":1,"1370":1,"1371":2,"1372":5,"1373":6,"1374":3,"1375":5,"1376":2,"1380":61,"1385":1,"1391":2,"1392":2,"1395":29,"1396":37,"1399":2,"1402":42,"1408":1,"1409":2,"1410":2,"1415":34,"1416":15,"1417":6,"1431":2,"1436":51,"1438":4,"1452":2,"1453":8,"1454":4,"1455":2,"1459":8,"1467":9,"1470":2,"1474":1,"1475":11,"1476":3,"1484":1,"1488":1,"1489":1,"1490":1,"1492":5,"1496":5,"1526":5,"1530":1,"1531":1,"1534":1,"1553":1,"1556":1,"1577":4,"1581":2,"1582":4,"1583":1,"1586":1,"1589":1,"1591":3,"1595":1,"1596":1,"1627":1,"1631":3,"1632":23,"1633":1,"1634":1,"1638":1,"1639":2,"1651":2,"1653":1,"1666":1,"1667":1,"1685":5,"1686":6,"1727":2,"1730":1,"1748":1,"1764":1,"1776":1,"1803":1,"1805":3,"1814":1,"1870":1,"1871":2,"1873":2,"1874":7,"1875":2,"1876":4,"1877":1,"1888":1,"1908":6,"1909":4,"1911":1,"1912":1,"1919":3,"1946":1,"1971":1,"1988":2,"1991":1,"1992":1,"1993":1,"1994":1,"1995":9,"1996":3,"1998":3,"2035":1,"2123":1,"2133":1,"2134":1,"2139":2,"2151":1,"2152":1,"2160":1,"2165":3,"2168":1,"2170":2,"2171":1,"2234":1}}],["acrname",{"2":{"1465":1},"3":{"1455":1,"1465":4,"1466":2,"1467":1}}],["acrpurgetask",{"3":{"1465":1}}],["acrpush",{"3":{"1455":1,"1465":2,"1472":2}}],["acrpull",{"3":{"601":1,"1455":1,"1465":1,"1467":1,"1470":1}}],["acrloginserver",{"2":{"1455":1,"1465":1},"3":{"1455":1,"1465":1,"1467":1}}],["acr",{"2":{"1463":1},"3":{"0":1,"599":2,"600":1,"756":1,"757":1,"868":1,"1445":3,"1455":11,"1461":2,"1465":10,"1466":1,"1467":8,"1469":1,"1472":1,"1474":2,"1496":1,"1526":1,"1535":1,"1577":1,"1591":1,"2034":2,"2038":1}}],["acrosstwotypes",{"3":{"1436":3}}],["across",{"1":{"504":1,"505":1,"506":1,"507":1,"508":1,"509":1,"510":1,"511":1,"512":1,"513":1,"514":1,"1925":1,"1926":1,"1927":1,"1928":1,"1929":1,"1930":1},"3":{"0":33,"3":3,"7":1,"19":1,"23":1,"24":3,"26":1,"39":1,"49":2,"80":3,"92":1,"109":2,"126":1,"128":1,"130":1,"135":4,"136":2,"137":3,"138":2,"139":2,"141":3,"142":3,"145":2,"146":1,"147":1,"148":1,"150":2,"157":3,"158":2,"168":3,"169":1,"177":1,"178":1,"184":1,"186":1,"187":1,"199":2,"227":1,"265":1,"272":1,"274":1,"280":1,"298":1,"302":1,"303":1,"311":1,"312":1,"313":1,"320":1,"349":1,"352":1,"358":1,"359":1,"360":1,"391":1,"397":1,"400":1,"418":2,"421":1,"448":1,"451":1,"454":1,"457":1,"461":3,"468":2,"474":1,"475":2,"476":1,"477":1,"483":1,"484":2,"486":1,"487":5,"488":6,"489":7,"490":11,"491":9,"492":8,"493":10,"494":11,"495":9,"497":1,"499":1,"504":1,"506":1,"509":1,"511":1,"524":1,"528":1,"543":1,"545":1,"547":1,"550":2,"551":2,"552":1,"556":2,"557":1,"574":1,"583":1,"593":1,"610":1,"616":4,"617":1,"618":3,"628":1,"633":2,"650":1,"674":2,"675":1,"677":1,"690":1,"696":2,"698":1,"699":1,"700":1,"702":2,"707":2,"709":1,"717":1,"724":1,"727":1,"729":1,"733":3,"735":1,"757":2,"764":2,"780":4,"782":1,"783":1,"784":1,"790":1,"793":1,"798":3,"799":2,"800":1,"803":3,"804":3,"805":3,"806":1,"810":1,"819":1,"821":3,"823":2,"827":5,"837":1,"846":1,"867":1,"880":2,"881":1,"882":1,"883":1,"885":1,"889":1,"891":1,"905":2,"931":1,"946":1,"948":1,"950":1,"954":1,"955":1,"958":1,"963":1,"964":2,"965":1,"966":1,"973":1,"980":7,"981":2,"982":1,"983":1,"988":1,"996":2,"998":1,"1004":2,"1006":1,"1011":1,"1014":1,"1020":3,"1025":1,"1027":1,"1036":1,"1049":2,"1050":3,"1051":2,"1052":1,"1054":2,"1059":1,"1060":1,"1062":1,"1067":1,"1074":1,"1076":1,"1082":1,"1092":2,"1094":1,"1099":1,"1100":2,"1133":2,"1134":1,"1136":1,"1150":1,"1154":1,"1157":1,"1189":1,"1194":1,"1200":1,"1201":1,"1202":1,"1212":6,"1229":8,"1230":1,"1231":1,"1233":2,"1234":1,"1237":15,"1239":1,"1243":2,"1247":15,"1248":1,"1253":2,"1256":1,"1257":2,"1259":19,"1260":1,"1267":2,"1269":4,"1270":17,"1271":8,"1276":3,"1278":1,"1279":1,"1281":1,"1283":1,"1284":1,"1286":54,"1287":1,"1289":1,"1296":1,"1298":2,"1300":27,"1301":12,"1302":1,"1304":1,"1308":1,"1309":8,"1310":4,"1311":39,"1312":8,"1316":1,"1317":1,"1318":1,"1323":30,"1324":43,"1333":1,"1336":1,"1339":12,"1340":2,"1342":2,"1347":1,"1348":1,"1350":24,"1351":1,"1352":1,"1353":1,"1359":41,"1364":1,"1369":9,"1375":1,"1378":1,"1380":8,"1381":1,"1395":17,"1396":46,"1401":1,"1402":20,"1403":2,"1406":2,"1410":1,"1415":23,"1416":6,"1417":33,"1424":1,"1427":1,"1428":1,"1431":2,"1436":87,"1438":13,"1441":2,"1442":2,"1447":1,"1454":1,"1455":4,"1456":1,"1459":1,"1460":1,"1461":3,"1463":1,"1464":1,"1465":3,"1467":6,"1474":2,"1475":1,"1486":1,"1487":6,"1488":2,"1489":5,"1492":1,"1496":41,"1498":2,"1499":1,"1513":1,"1514":1,"1519":1,"1525":3,"1526":14,"1532":1,"1533":1,"1534":3,"1535":2,"1536":1,"1542":1,"1544":2,"1550":2,"1551":1,"1556":1,"1557":1,"1559":1,"1565":1,"1567":1,"1569":2,"1571":1,"1576":2,"1577":11,"1582":1,"1583":1,"1584":1,"1591":4,"1592":1,"1600":3,"1629":1,"1630":3,"1631":2,"1638":4,"1640":3,"1641":3,"1648":1,"1649":1,"1650":1,"1660":1,"1661":1,"1664":2,"1665":1,"1666":1,"1667":1,"1669":1,"1671":3,"1672":1,"1673":3,"1675":1,"1677":1,"1683":1,"1694":1,"1701":1,"1714":1,"1723":1,"1726":1,"1736":1,"1747":2,"1750":1,"1767":2,"1768":2,"1769":1,"1772":1,"1779":1,"1782":1,"1784":1,"1788":1,"1790":1,"1792":1,"1793":1,"1795":3,"1796":1,"1799":1,"1813":1,"1815":3,"1823":1,"1829":2,"1832":1,"1839":1,"1842":1,"1843":3,"1845":1,"1849":1,"1850":1,"1851":1,"1852":3,"1853":2,"1859":3,"1860":1,"1861":4,"1865":1,"1866":1,"1868":1,"1874":3,"1875":1,"1893":1,"1894":1,"1895":1,"1898":1,"1899":1,"1908":3,"1911":1,"1912":3,"1913":1,"1920":1,"1923":1,"1924":3,"1925":2,"1927":1,"1930":3,"1931":1,"1935":1,"1940":2,"1948":1,"1950":1,"1958":1,"1960":2,"1961":1,"1963":1,"1965":1,"1976":1,"1978":1,"1979":1,"1982":1,"1987":1,"1991":1,"1994":1,"1996":1,"1997":1,"1999":1,"2002":2,"2007":1,"2011":1,"2012":1,"2014":1,"2019":1,"2025":1,"2026":1,"2035":1,"2038":1,"2040":1,"2043":2,"2044":1,"2049":1,"2050":1,"2056":2,"2058":2,"2067":1,"2069":1,"2075":1,"2077":1,"2081":2,"2082":1,"2083":4,"2099":1,"2102":1,"2103":2,"2106":1,"2112":1,"2113":1,"2116":1,"2133":1,"2140":2,"2145":1,"2157":1,"2158":1,"2159":1,"2161":1,"2163":1,"2170":1,"2174":1,"2176":1,"2179":2,"2180":1,"2182":1,"2189":1,"2204":1,"2210":2,"2222":7,"2232":1,"2234":2,"2240":1,"2242":1,"2246":1}}],["acc",{"3":{"1455":1,"1463":1,"1467":1,"1470":1,"1471":1,"1472":2,"1473":1,"1474":1,"1475":1}}],["accrete",{"3":{"1475":1}}],["accreted",{"3":{"1436":1,"1792":1}}],["accrue",{"3":{"1396":1}}],["accrues",{"3":{"800":1}}],["accruing",{"3":{"692":1}}],["according",{"3":{"1089":1,"1282":1,"1300":1,"1311":1,"1324":1}}],["accordingly",{"3":{"298":2,"511":1,"512":1,"744":1,"892":1,"967":1,"1304":1,"1359":2,"1446":1,"1496":3,"2038":1}}],["accomplish",{"3":{"1626":1}}],["accompany",{"3":{"1323":1}}],["accompanying",{"3":{"372":1,"1417":1}}],["accommodates",{"3":{"1631":1}}],["accommodate",{"3":{"1237":1,"1436":2}}],["accommodations",{"3":{"1300":1,"1630":1,"1631":1}}],["accommodation",{"3":{"988":1}}],["accountlocked",{"3":{"1415":1}}],["accountname",{"3":{"1300":1}}],["accounterased",{"3":{"1396":2}}],["accountendpoint",{"3":{"1286":1}}],["accountentity",{"3":{"1199":3,"1207":1}}],["accounted",{"3":{"178":1,"402":1,"1333":1,"1339":1,"1436":1,"1443":1}}],["accountdeletiontests",{"3":{"1199":1,"1207":2}}],["accountdto",{"3":{"1199":3,"1207":1}}],["accounting",{"3":{"1101":1,"1270":2,"1396":1,"1436":5}}],["accounts",{"0":{"1409":1},"2":{"314":1},"3":{"314":1,"350":2,"352":1,"355":1,"487":1,"488":1,"489":1,"490":1,"1286":6,"1289":1,"1293":2,"1300":5,"1311":2,"1322":2,"1324":1,"1326":1,"1396":3,"1408":1,"1410":1,"1412":1,"1415":23,"1417":1,"1436":2,"1441":3,"1444":1,"1456":1,"1490":1,"1529":1,"1595":1,"1596":2,"1638":1,"1641":3,"1664":1,"1667":1,"1769":1,"1977":1,"1978":1,"2000":1}}],["accountability",{"3":{"40":1,"1237":1,"1567":1,"2064":1}}],["account",{"3":{"0":12,"126":1,"160":1,"174":1,"175":1,"176":1,"230":1,"243":1,"279":2,"280":2,"282":1,"283":1,"284":7,"286":1,"310":2,"348":4,"349":1,"350":11,"351":3,"352":5,"353":11,"403":2,"433":1,"435":1,"438":1,"441":1,"458":4,"459":8,"460":2,"465":1,"493":1,"497":4,"498":1,"499":4,"500":1,"524":1,"527":2,"528":1,"530":3,"602":1,"618":1,"649":1,"663":1,"665":7,"666":6,"667":1,"669":2,"670":2,"690":1,"724":1,"725":1,"727":1,"734":1,"749":1,"790":1,"792":2,"853":3,"854":4,"855":1,"857":1,"904":2,"905":5,"906":1,"908":2,"946":2,"948":1,"950":1,"1059":2,"1116":3,"1119":1,"1212":1,"1237":2,"1264":1,"1270":1,"1271":1,"1279":1,"1283":1,"1284":2,"1286":20,"1287":1,"1289":3,"1290":3,"1291":2,"1293":4,"1294":3,"1295":2,"1300":105,"1307":1,"1309":2,"1311":24,"1322":6,"1323":76,"1324":35,"1332":1,"1339":1,"1350":1,"1355":2,"1359":9,"1382":1,"1395":3,"1396":17,"1402":6,"1403":1,"1405":5,"1406":12,"1407":1,"1408":3,"1409":5,"1410":3,"1411":2,"1412":1,"1414":5,"1415":142,"1417":7,"1432":1,"1436":22,"1437":1,"1438":5,"1455":1,"1467":16,"1470":2,"1473":1,"1478":1,"1481":2,"1484":1,"1488":2,"1496":1,"1596":4,"1597":1,"1600":1,"1608":1,"1621":2,"1626":1,"1627":3,"1631":1,"1632":9,"1634":2,"1639":2,"1641":24,"1667":5,"1672":1,"1675":1,"1746":1,"1747":4,"1755":1,"1764":3,"1765":7,"1767":1,"1768":2,"1771":1,"1777":2,"1821":1,"1825":1,"1900":1,"1902":1,"1940":1,"1945":1,"1962":1,"1970":2,"1973":3,"1975":1,"1977":12,"1978":6,"1979":5,"1980":1,"1982":4,"1983":1,"1984":1,"1999":2,"2000":2,"2001":2,"2002":3,"2003":5,"2011":1,"2037":2,"2039":1,"2064":2,"2068":5,"2069":1,"2129":2,"2163":1,"2198":3,"2199":2,"2200":2,"2205":1,"2222":1,"2234":1}}],["accumulation",{"3":{"1020":1,"1300":2,"1395":2,"1415":1,"1427":1,"1685":1}}],["accumulating",{"3":{"861":1,"1270":1,"1271":2,"1286":1,"1300":1,"1323":5,"1383":1,"1396":2,"1423":1,"1427":1,"1436":3,"2192":1}}],["accumulators",{"3":{"1359":2}}],["accumulator",{"3":{"658":1,"1234":1,"1237":2,"1300":1,"1324":1}}],["accumulated",{"3":{"657":1,"826":1,"1259":1,"1286":2,"1301":1,"1310":1,"1324":4,"1395":10,"1396":1,"1433":1,"1436":2,"1473":1,"1552":1}}],["accumulate",{"3":{"657":1,"707":1,"717":1,"750":1,"757":1,"846":1,"1093":1,"1237":1,"1247":1,"1256":1,"1271":1,"1286":2,"1300":1,"1301":1,"1316":1,"1323":1,"1324":2,"1359":1,"1396":1,"1402":1,"1409":1,"1415":3,"1427":1,"1436":1,"1845":1}}],["accumulates",{"3":{"26":1,"186":1,"329":1,"1005":1,"1123":3,"1237":2,"1286":1,"1309":3,"1311":1,"1317":1,"1324":1,"1358":1,"1359":1,"1395":1,"1402":1,"1416":1,"1423":1,"1425":1,"1436":1,"1465":1,"1685":1,"1687":1,"1962":1,"1986":1,"2001":1,"2177":1}}],["accuracy",{"3":{"250":1,"1019":1,"1191":1,"1196":1,"1341":1,"1359":1,"1417":2,"1500":1}}],["accurately",{"3":{"190":1}}],["accurate",{"3":{"71":1,"245":1,"632":1,"768":1,"1324":2,"1417":1,"1427":2,"1500":1,"2100":1}}],["accidents",{"3":{"1949":1}}],["accidentally",{"3":{"386":1,"619":1,"1219":1,"1221":1,"1229":1,"1247":1,"1259":1,"1271":3,"1286":3,"1300":1,"1301":1,"1311":3,"1323":1,"1324":4,"1350":3,"1359":5,"1369":1,"1380":1,"1395":3,"1396":1,"1415":3,"1417":1,"1427":1,"1436":4,"1455":1,"1488":1,"1489":1,"1638":1,"1805":1,"1953":1,"2017":1}}],["accidental",{"3":{"68":1,"265":1,"768":1,"1286":3,"1309":1,"1310":1,"1350":2,"1359":2,"1369":1,"1395":1,"1396":3,"1415":1,"1436":3,"1454":1,"1474":1,"1489":1,"1526":1,"1552":1,"1556":1,"1569":1,"1638":1,"1686":1,"1709":1,"2034":1,"2190":1}}],["accident",{"3":{"0":1,"22":1,"25":1,"131":1,"236":1,"255":1,"558":1,"642":1,"700":1,"827":1,"832":1,"855":1,"907":1,"913":1,"1085":1,"1109":1,"1124":1,"1135":1,"1163":1,"1237":1,"1259":2,"1270":1,"1286":7,"1300":4,"1301":1,"1309":1,"1320":1,"1323":4,"1324":5,"1330":1,"1339":5,"1350":1,"1359":1,"1395":2,"1396":3,"1415":1,"1417":1,"1421":1,"1427":1,"1438":1,"1444":1,"1474":1,"1489":1,"1819":1,"1827":1,"1841":1,"1851":1,"1923":1,"1996":2,"2034":1,"2102":1,"2159":1,"2198":1}}],["accelerate",{"3":{"2227":1}}],["accelerated",{"3":{"461":1}}],["accent",{"3":{"1324":5,"1395":2,"1436":2,"1526":1,"1591":1,"1595":1,"1596":2,"1597":1}}],["accented",{"3":{"741":1,"1271":1,"1289":1,"1300":1,"1311":1,"1312":2,"1324":5,"1436":4,"1438":1,"1577":1,"1591":1,"1596":1}}],["accents",{"3":{"265":1,"1311":1,"1324":3,"1395":1}}],["accessing",{"3":{"1627":1}}],["accessiblelabel",{"3":{"1324":1}}],["accessible",{"3":{"617":1,"618":1,"619":1,"682":1,"954":1,"1026":1,"1324":7,"1415":1,"1432":1,"1436":9,"1438":1,"1455":1,"1488":1,"1491":1,"1607":1,"1620":1,"1622":1,"1630":1,"1631":2,"1632":3,"1640":1,"1641":1,"1643":1,"1644":1,"1741":2,"1750":2,"1756":1,"1758":1,"1773":2,"2058":1,"2230":1}}],["accessibilityinfomaxlength",{"3":{"1350":3,"1359":2,"1395":1}}],["accessibilityinfo",{"2":{"1631":1},"3":{"1350":4,"1359":11,"1369":3,"1380":2,"1395":5,"1496":1,"1630":2,"1631":2}}],["accessibilitytests",{"0":{"1608":1,"1742":1},"2":{"620":1,"621":1,"1596":1},"3":{"618":2,"620":1,"621":1,"1199":1,"1207":2,"1414":1,"1436":2,"1438":2,"1487":2,"1490":4,"1526":2,"1531":1,"1532":1,"1535":1,"1591":2,"1596":2,"1600":1,"1605":1,"1739":1}}],["accessibility",{"0":{"1433":1,"1558":1,"2058":1},"1":{"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1,"1605":1,"1606":1,"1607":1,"1608":1,"1609":1,"1610":1,"1642":1,"1643":1,"1644":1,"1645":1,"1739":1,"1740":1,"1741":1,"1742":1,"1743":1,"1744":1},"2":{"1417":1},"3":{"0":1,"276":1,"416":1,"615":1,"617":4,"618":1,"619":1,"620":2,"622":2,"860":1,"861":1,"862":1,"863":2,"955":1,"1170":1,"1202":1,"1203":5,"1207":8,"1213":1,"1214":1,"1216":1,"1324":14,"1350":4,"1359":14,"1369":3,"1380":5,"1395":7,"1396":6,"1402":1,"1414":1,"1415":3,"1417":35,"1428":2,"1433":3,"1436":26,"1438":3,"1453":1,"1461":1,"1488":4,"1490":1,"1491":1,"1492":1,"1493":1,"1496":1,"1499":1,"1524":1,"1526":3,"1530":1,"1531":2,"1532":1,"1533":2,"1535":1,"1558":1,"1561":1,"1565":1,"1574":1,"1577":4,"1585":1,"1586":1,"1588":1,"1589":3,"1591":3,"1595":2,"1596":2,"1597":1,"1598":2,"1602":1,"1605":1,"1629":1,"1630":2,"1631":2,"1637":2,"1642":2,"1669":3,"1671":2,"1673":1,"1674":1,"1739":1,"1796":1,"2077":1,"2109":1,"2215":1,"2223":1,"2234":1}}],["accessibilityviolationexception",{"2":{"618":1,"1428":1,"1433":1,"2058":1},"3":{"0":1,"618":2,"1199":2,"1207":2,"1428":1,"1433":2,"1436":6,"1488":3,"2058":1}}],["accessed",{"3":{"1436":1}}],["accesses",{"3":{"1324":1}}],["accesscoarselocation",{"3":{"1417":2}}],["accessservice",{"3":{"1359":5}}],["accessdenied",{"3":{"1300":1}}],["accessdeniedmessage",{"3":{"1271":3}}],["accesstokenkey",{"3":{"1417":1}}],["accesstokenname",{"3":{"1312":1}}],["accesstokenlifetime",{"3":{"1300":5}}],["accesstokencookiename",{"3":{"1300":1}}],["accesstokenexpiry",{"3":{"1300":4,"1968":1}}],["accesstokenexpirationminutes",{"2":{"499":1,"1982":1},"3":{"499":1,"1300":3,"1982":1}}],["accesstoken",{"3":{"1184":1,"1300":9,"1311":1,"1324":18,"1417":1,"1436":7,"1641":2,"1968":1}}],["accesstokenprovider",{"2":{"1183":1},"3":{"1183":1,"1324":1,"1436":3}}],["accessorcache",{"3":{"1247":2}}],["accessors",{"3":{"135":2,"547":2,"657":1,"660":1,"674":1,"741":1,"1247":2,"1259":2,"1270":1,"1278":1,"1286":1,"1300":1,"1311":1,"1324":3,"1350":4,"1359":2,"1395":4,"1417":2,"1431":1,"1436":8}}],["accessor",{"3":{"26":1,"298":1,"303":2,"304":1,"549":1,"699":1,"1163":1,"1227":1,"1228":1,"1229":3,"1231":1,"1234":1,"1237":1,"1242":1,"1247":3,"1253":1,"1271":1,"1277":1,"1286":11,"1300":2,"1311":8,"1324":2,"1339":3,"1348":1,"1350":4,"1359":24,"1395":5,"1396":1,"1417":4,"1436":3,"1526":1,"1535":1,"1586":1,"1591":1,"1611":1,"1810":1,"2138":1,"2140":2}}],["access",{"0":{"2076":1},"1":{"496":1,"497":1,"498":1,"499":1,"500":1,"501":1,"502":1,"503":1,"542":1,"543":1,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"550":1,"551":1,"552":1,"878":1,"879":1,"880":1,"881":1,"882":1,"883":1,"884":1,"885":1},"2":{"207":1,"227":1,"229":1,"426":3,"511":1,"1761":1},"3":{"0":9,"31":2,"39":1,"41":1,"165":1,"166":1,"167":1,"171":1,"185":1,"186":1,"206":2,"207":6,"227":1,"229":1,"320":1,"350":2,"359":1,"403":2,"426":3,"458":2,"459":1,"461":1,"496":1,"498":3,"499":6,"500":3,"501":1,"503":2,"505":1,"506":3,"507":9,"508":1,"511":1,"512":2,"514":1,"527":1,"542":1,"545":2,"549":1,"605":1,"632":1,"718":1,"724":2,"727":1,"776":1,"798":1,"878":1,"880":1,"881":2,"884":1,"903":1,"904":1,"905":4,"906":1,"910":2,"973":1,"1059":1,"1117":1,"1133":1,"1168":3,"1170":1,"1183":2,"1184":3,"1187":1,"1196":1,"1212":3,"1228":1,"1229":1,"1239":1,"1241":1,"1247":8,"1271":4,"1272":1,"1276":1,"1279":1,"1286":14,"1288":2,"1289":2,"1290":2,"1297":2,"1298":5,"1300":86,"1301":1,"1304":1,"1306":1,"1309":6,"1311":18,"1312":5,"1322":2,"1323":12,"1324":68,"1339":1,"1347":1,"1348":1,"1350":3,"1359":7,"1362":2,"1369":5,"1380":4,"1381":1,"1395":10,"1396":19,"1406":1,"1408":1,"1409":1,"1410":1,"1415":19,"1417":14,"1427":1,"1436":15,"1438":4,"1445":1,"1454":1,"1455":1,"1457":1,"1459":1,"1460":1,"1467":6,"1477":1,"1487":1,"1496":1,"1524":3,"1526":4,"1534":1,"1535":2,"1544":1,"1548":1,"1555":1,"1562":1,"1567":3,"1577":2,"1582":2,"1590":1,"1591":2,"1599":1,"1611":2,"1621":2,"1623":1,"1624":1,"1627":1,"1630":2,"1631":1,"1632":2,"1635":1,"1637":3,"1638":1,"1639":2,"1640":1,"1641":14,"1648":1,"1653":1,"1667":2,"1747":3,"1753":1,"1757":2,"1761":1,"1764":1,"1765":2,"1767":2,"1769":1,"1771":2,"1772":1,"1815":3,"1849":1,"1857":1,"1923":1,"1962":1,"1965":1,"1966":3,"1968":9,"1972":1,"1973":2,"1975":3,"1980":3,"1981":1,"1982":10,"1984":1,"1985":4,"1989":1,"1997":1,"2064":2,"2068":4,"2070":1,"2071":1,"2076":1,"2128":1,"2130":1,"2143":1,"2202":1,"2205":1,"2230":1,"2234":2,"2242":1}}],["acceptverbs",{"3":{"1436":2}}],["accepturl",{"3":{"1359":1}}],["acceptqueuesessions",{"3":{"1350":1}}],["acceptqueuesessioncount",{"3":{"1350":1}}],["acceptqueuecount",{"3":{"1350":1}}],["acceptqueue",{"3":{"1350":1,"1359":17,"1395":1}}],["acceptlanguage",{"3":{"1324":1}}],["accepttimesteponceasync",{"3":{"1300":2}}],["acceptattribute",{"3":{"1350":1,"1359":2}}],["acceptable",{"3":{"149":1,"435":1,"507":1,"530":1,"791":1,"990":1,"1116":1,"1229":1,"1237":1,"1286":1,"1300":3,"1301":1,"1309":1,"1324":4,"1359":3,"1396":2,"1436":2,"1455":1,"1467":1,"1630":1,"1638":3,"1639":1,"1898":1,"1947":1,"1971":1,"2168":1}}],["acceptances",{"3":{"1359":1}}],["acceptance",{"1":{"787":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"794":1,"795":1},"3":{"0":2,"68":1,"87":1,"305":1,"390":1,"454":1,"562":1,"621":1,"787":1,"790":3,"791":1,"792":2,"794":1,"857":3,"946":1,"976":1,"1020":1,"1212":1,"1300":2,"1359":6,"1369":1,"1376":1,"1380":1,"1402":1,"1477":1,"1526":1,"1566":2,"1585":1,"1599":1,"1630":2,"1631":1,"1709":1,"2034":1,"2129":1,"2168":2,"2170":1,"2171":2,"2192":1}}],["accepting",{"3":{"0":1,"291":1,"690":1,"767":1,"1247":2,"1267":1,"1270":3,"1300":2,"1301":1,"1311":3,"1324":4,"1350":2,"1359":4,"1395":2,"1396":3,"1400":1,"1413":1,"1427":1,"1436":2,"1455":1,"1953":1,"1957":1,"2034":1,"2039":1,"2127":1}}],["acceptsdirectandinheritedandoptedoutdeclarations",{"3":{"1436":2}}],["accepts",{"3":{"0":3,"68":1,"72":1,"81":1,"93":1,"136":1,"170":1,"198":1,"237":1,"303":1,"312":1,"335":1,"341":1,"350":1,"374":1,"402":1,"427":1,"443":1,"469":1,"535":1,"536":1,"540":1,"541":1,"620":1,"674":1,"690":1,"740":1,"741":1,"761":1,"764":1,"766":2,"769":1,"773":1,"785":1,"863":1,"975":1,"1017":1,"1033":1,"1044":1,"1100":1,"1116":1,"1133":1,"1135":1,"1176":1,"1184":2,"1229":1,"1237":1,"1242":1,"1247":3,"1264":1,"1270":2,"1271":2,"1286":14,"1297":1,"1300":7,"1309":5,"1310":1,"1311":7,"1312":1,"1323":3,"1324":10,"1327":1,"1339":3,"1350":3,"1359":10,"1369":1,"1384":2,"1395":16,"1396":6,"1402":3,"1414":1,"1415":5,"1416":1,"1417":3,"1427":1,"1430":1,"1436":32,"1438":2,"1441":1,"1455":1,"1467":2,"1492":1,"1526":2,"1531":1,"1577":1,"1591":2,"1596":2,"1600":1,"1631":1,"1640":1,"1653":1,"1685":1,"1765":1,"1843":1,"1912":1,"1927":1,"1950":1,"1958":1,"1962":1,"1968":1,"2034":1,"2037":1,"2038":1,"2045":1,"2128":2,"2164":1,"2169":1,"2194":1}}],["accept",{"2":{"742":1,"745":1,"1633":1},"3":{"0":3,"98":1,"103":1,"135":1,"265":4,"293":1,"309":1,"370":2,"371":3,"372":1,"375":1,"404":1,"440":1,"517":1,"520":1,"618":1,"733":1,"740":4,"742":2,"743":1,"745":1,"773":1,"775":1,"790":1,"826":1,"881":1,"1018":1,"1059":1,"1160":1,"1212":2,"1231":1,"1247":1,"1270":2,"1271":1,"1286":7,"1298":1,"1300":10,"1306":1,"1309":1,"1311":6,"1323":3,"1324":7,"1339":1,"1343":1,"1344":1,"1347":2,"1348":1,"1350":12,"1351":1,"1358":1,"1359":11,"1366":1,"1369":2,"1380":2,"1396":3,"1402":1,"1415":1,"1417":3,"1436":16,"1438":1,"1444":1,"1453":1,"1454":1,"1455":2,"1459":1,"1472":1,"1474":1,"1492":1,"1534":1,"1577":1,"1589":1,"1591":1,"1600":1,"1630":2,"1631":4,"1632":1,"1633":1,"1635":2,"1640":1,"1666":1,"1765":1,"1912":1,"1924":1,"1937":1,"1954":1,"1965":2,"1968":1,"1990":1,"2085":1,"2088":2,"2128":1,"2130":1,"2167":1,"2169":1,"2171":1,"2234":1}}],["acceptedsessions",{"3":{"1350":1}}],["acceptedsessioncount",{"3":{"1350":1}}],["acceptedcount",{"3":{"1350":1}}],["accepted",{"0":{"139":1,"1534":1,"1585":1,"1599":1},"2":{"1099":1,"1103":1,"1367":1,"1633":1,"2192":1},"3":{"0":10,"1":1,"3":1,"9":1,"15":1,"17":1,"27":1,"29":1,"37":1,"45":1,"51":1,"57":1,"66":1,"76":1,"80":1,"84":1,"88":1,"90":1,"107":1,"115":1,"130":2,"135":5,"136":1,"139":3,"145":1,"155":1,"164":1,"173":1,"177":1,"178":1,"184":1,"193":1,"205":1,"212":1,"223":1,"230":1,"233":1,"241":1,"245":2,"248":1,"249":1,"263":1,"267":2,"271":1,"279":2,"283":1,"286":1,"289":1,"295":1,"298":1,"308":1,"316":1,"328":1,"339":1,"344":1,"348":1,"357":1,"368":1,"370":2,"371":2,"372":1,"373":1,"378":1,"386":2,"390":1,"395":1,"411":1,"415":3,"418":1,"422":1,"432":1,"438":1,"441":1,"446":1,"457":1,"461":1,"468":1,"480":1,"497":1,"505":1,"516":1,"520":1,"526":1,"530":1,"534":1,"543":2,"544":1,"545":1,"547":2,"554":1,"555":1,"562":1,"566":1,"570":1,"581":1,"585":1,"589":1,"597":1,"607":1,"616":1,"620":1,"624":1,"631":1,"638":1,"647":1,"651":1,"655":1,"663":1,"672":1,"674":1,"680":1,"688":1,"690":1,"696":1,"705":1,"713":1,"723":1,"731":1,"733":1,"739":1,"747":1,"748":1,"751":3,"755":1,"756":1,"758":1,"764":1,"766":2,"772":1,"775":1,"776":1,"780":1,"788":1,"790":2,"797":2,"808":2,"815":1,"817":1,"825":1,"827":2,"836":1,"844":1,"848":1,"852":1,"856":1,"859":1,"867":1,"879":1,"887":1,"895":1,"903":1,"907":1,"912":1,"920":1,"929":1,"933":1,"937":1,"944":1,"952":1,"962":1,"970":1,"978":1,"986":1,"994":1,"996":1,"1002":1,"1010":1,"1012":1,"1016":1,"1024":1,"1028":1,"1032":1,"1036":1,"1040":1,"1048":1,"1052":1,"1057":1,"1065":1,"1073":1,"1081":1,"1089":1,"1098":1,"1099":1,"1102":1,"1103":2,"1106":1,"1108":1,"1114":1,"1116":1,"1118":2,"1122":1,"1126":1,"1131":1,"1139":2,"1149":1,"1159":1,"1166":1,"1173":1,"1182":1,"1212":4,"1247":2,"1270":1,"1285":2,"1286":3,"1293":1,"1300":19,"1301":6,"1309":2,"1311":5,"1322":1,"1323":9,"1324":10,"1328":1,"1339":7,"1344":2,"1347":1,"1350":12,"1351":1,"1352":1,"1353":2,"1357":1,"1359":74,"1367":1,"1369":2,"1375":1,"1376":1,"1380":7,"1390":1,"1395":10,"1396":9,"1399":1,"1402":4,"1415":13,"1417":4,"1430":2,"1436":15,"1438":2,"1453":1,"1455":1,"1459":1,"1474":2,"1476":1,"1477":1,"1483":1,"1496":1,"1515":1,"1521":1,"1524":2,"1526":6,"1530":1,"1531":4,"1532":3,"1534":8,"1554":1,"1572":1,"1575":3,"1576":1,"1577":3,"1581":3,"1582":1,"1583":2,"1584":2,"1585":6,"1586":1,"1589":3,"1591":10,"1595":3,"1596":6,"1597":4,"1598":1,"1599":3,"1600":1,"1630":3,"1631":10,"1632":5,"1633":2,"1635":2,"1638":3,"1640":4,"1641":3,"1741":2,"1764":1,"1765":1,"1767":2,"1768":1,"1815":2,"1889":1,"1915":1,"1920":1,"2002":2,"2033":1,"2039":1,"2124":2,"2128":1,"2129":1,"2160":1,"2168":2,"2192":2,"2193":1,"2200":1,"2234":48}}],["aca",{"0":{"1334":1},"3":{"0":3,"91":3,"92":2,"93":2,"95":1,"96":2,"98":2,"99":1,"100":2,"102":3,"293":1,"757":2,"827":1,"829":1,"913":2,"914":2,"1312":1,"1325":1,"1329":1,"1331":1,"1334":1,"1339":8,"1379":1,"1441":2,"1443":5,"1446":2,"1450":2,"1467":16,"1476":1,"1534":1,"1577":1,"1707":1}}],["alquimia",{"3":{"2222":1}}],["aloud",{"3":{"1395":1,"1417":7}}],["along",{"0":{"2236":1},"3":{"58":1,"81":1,"165":1,"186":1,"573":1,"616":1,"657":1,"697":1,"700":1,"711":1,"744":2,"778":1,"798":1,"826":1,"981":1,"991":1,"1175":1,"1178":1,"1217":1,"1251":1,"1259":3,"1271":2,"1280":1,"1286":5,"1293":1,"1297":1,"1300":2,"1301":2,"1304":1,"1312":2,"1323":1,"1324":2,"1343":1,"1350":7,"1359":7,"1395":4,"1396":8,"1402":4,"1404":1,"1409":1,"1415":2,"1436":4,"1441":1,"1443":1,"1455":1,"1465":1,"1467":2,"1486":1,"1492":1,"1805":1,"1843":1,"1891":1,"1938":1,"1977":1,"2000":1,"2020":2,"2073":1,"2098":1,"2168":1,"2185":1}}],["alongside",{"3":{"0":4,"31":1,"71":1,"78":1,"91":1,"95":1,"173":1,"195":1,"219":1,"225":1,"272":1,"312":1,"319":1,"341":1,"350":1,"363":1,"406":1,"418":1,"449":1,"470":1,"499":1,"534":1,"545":1,"549":1,"563":1,"572":1,"599":1,"609":2,"611":1,"617":1,"642":1,"643":1,"647":1,"657":1,"665":1,"696":1,"728":1,"785":1,"790":2,"804":1,"832":1,"892":1,"905":1,"926":1,"932":1,"960":1,"982":1,"1027":1,"1042":1,"1059":1,"1069":1,"1075":1,"1104":1,"1116":1,"1232":1,"1237":2,"1247":2,"1259":4,"1262":1,"1270":2,"1271":2,"1286":19,"1288":1,"1290":1,"1300":20,"1301":6,"1309":3,"1311":13,"1312":2,"1316":1,"1323":10,"1324":17,"1332":1,"1333":1,"1336":1,"1339":9,"1342":1,"1347":1,"1350":10,"1353":1,"1359":25,"1366":1,"1369":6,"1374":3,"1380":5,"1395":23,"1396":10,"1398":1,"1400":1,"1402":2,"1403":1,"1409":1,"1415":9,"1416":1,"1417":10,"1427":3,"1428":1,"1432":1,"1434":1,"1436":18,"1438":5,"1441":1,"1442":2,"1443":2,"1445":1,"1455":1,"1467":8,"1475":1,"1487":1,"1488":2,"1489":1,"1496":3,"1526":1,"1531":1,"1537":1,"1546":1,"1570":1,"1577":2,"1585":1,"1627":1,"1630":3,"1631":5,"1639":1,"1640":1,"1655":1,"1663":1,"1686":1,"1699":1,"1715":1,"1737":1,"1755":1,"1761":1,"1764":1,"1769":1,"1770":1,"1771":1,"1815":1,"1927":1,"1929":1,"1933":1,"1944":1,"1946":1,"1956":1,"1981":1,"1982":1,"2001":1,"2007":1,"2014":1,"2025":1,"2102":1,"2128":1,"2135":1,"2152":1,"2168":1,"2175":1,"2234":1}}],["alone",{"3":{"0":12,"23":1,"24":2,"38":1,"54":1,"57":1,"63":1,"69":1,"73":1,"74":1,"81":1,"95":1,"135":2,"180":1,"186":2,"203":1,"207":1,"255":1,"265":1,"268":1,"285":1,"312":1,"314":1,"318":1,"324":1,"325":1,"341":1,"386":1,"390":1,"391":1,"399":1,"409":1,"426":1,"434":1,"449":1,"452":1,"465":1,"497":1,"523":1,"536":2,"539":2,"547":1,"549":3,"589":1,"593":1,"601":1,"607":1,"616":1,"624":1,"635":1,"638":1,"655":1,"674":1,"675":1,"707":1,"733":1,"758":1,"766":1,"767":1,"789":1,"794":1,"799":1,"806":1,"826":1,"827":1,"828":1,"830":1,"849":1,"854":1,"883":1,"889":1,"891":1,"897":1,"905":2,"906":2,"907":1,"926":1,"938":1,"939":1,"972":1,"988":1,"994":1,"1018":1,"1026":2,"1059":2,"1061":1,"1065":1,"1067":1,"1074":1,"1083":1,"1091":3,"1094":1,"1116":1,"1124":1,"1127":1,"1128":1,"1134":1,"1212":1,"1225":1,"1229":4,"1237":6,"1242":1,"1247":1,"1259":3,"1263":1,"1270":5,"1271":1,"1281":2,"1286":28,"1290":3,"1300":10,"1301":6,"1309":5,"1310":1,"1311":11,"1312":1,"1320":1,"1322":1,"1323":13,"1324":18,"1332":1,"1339":12,"1349":1,"1350":9,"1359":28,"1362":1,"1369":2,"1377":1,"1379":1,"1380":2,"1395":4,"1396":15,"1402":6,"1406":1,"1415":6,"1416":1,"1417":7,"1424":1,"1427":4,"1433":1,"1436":33,"1438":5,"1447":2,"1455":1,"1458":1,"1467":4,"1470":1,"1474":1,"1477":1,"1481":1,"1492":2,"1496":3,"1507":1,"1526":1,"1548":1,"1558":1,"1577":3,"1591":2,"1638":1,"1641":1,"1651":1,"1670":1,"1685":1,"1688":1,"1727":1,"1730":1,"1742":1,"1749":1,"1765":1,"1773":1,"1786":1,"1794":1,"1805":1,"1815":1,"1832":1,"1849":1,"1871":2,"1933":3,"1936":1,"1969":1,"1982":3,"1984":2,"1985":4,"1989":1,"2002":1,"2009":1,"2039":1,"2045":1,"2059":1,"2065":1,"2143":1,"2161":1,"2162":1,"2181":1}}],["alarm",{"3":{"1417":1,"1467":1,"1476":2,"1525":1,"1526":1}}],["alarms",{"3":{"1417":1}}],["alarming",{"3":{"1324":1,"1436":1,"1968":1}}],["alan",{"3":{"1364":1,"1369":2}}],["alb",{"3":{"175":1}}],["alpine",{"3":{"1438":1}}],["alpha",{"3":{"1324":1,"1417":2,"1480":1}}],["alphanumeric",{"3":{"1271":1,"1300":1,"1324":2,"1436":2}}],["alphabetical",{"3":{"1436":1,"1639":1,"1640":1}}],["alphabetically",{"3":{"166":1,"1034":1,"1279":1,"1286":5,"1395":2,"1436":1,"1654":1}}],["alphabet",{"3":{"1059":1,"1286":2,"1293":1,"1300":1,"1436":1,"1631":1}}],["alpn",{"1":{"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1},"3":{"0":1,"31":1,"53":1,"89":1,"91":2,"97":2,"98":8,"99":1,"100":1,"1067":1,"1326":1,"1337":1,"1339":5,"1379":1,"1430":1,"1441":1,"1444":1,"1447":1,"1467":1,"1656":1,"2010":1,"2026":3}}],["almost",{"0":{"1371":1,"2073":1},"3":{"58":1,"265":1,"331":1,"386":1,"396":1,"740":1,"805":1,"881":1,"965":1,"1006":2,"1132":1,"1217":1,"1259":1,"1261":1,"1287":1,"1310":1,"1311":1,"1323":2,"1324":3,"1339":1,"1340":1,"1370":1,"1371":1,"1379":1,"1380":3,"1396":2,"1403":1,"1415":2,"1423":1,"1436":3,"1447":1,"1453":1,"1455":1,"1465":1,"1467":1,"1491":1,"1527":1,"1537":1,"1578":1,"1592":1,"1682":1,"1686":1,"1788":1,"1797":1,"1800":1,"1802":1,"1810":1,"1820":1,"1854":2,"1900":2,"1909":1,"1913":1,"1951":2,"1987":2,"2001":1,"2030":1,"2040":1,"2051":1,"2062":1,"2072":1,"2131":1,"2136":1,"2156":2}}],["algebra",{"3":{"1359":2}}],["alg=rs256",{"3":{"1300":1}}],["alg",{"2":{"31":1,"1897":1,"1899":1},"3":{"0":1,"31":1,"1184":1,"1300":4,"1576":2,"1577":1,"1897":4,"1899":1,"1968":1}}],["algorithms",{"3":{"178":1,"1895":1,"1899":1}}],["algorithm",{"0":{"1881":1,"1897":1},"3":{"0":4,"31":2,"32":1,"173":1,"178":1,"279":1,"280":1,"309":1,"310":1,"311":2,"312":1,"360":1,"499":2,"503":1,"674":1,"945":1,"946":2,"947":2,"963":2,"1212":1,"1237":1,"1247":1,"1287":1,"1288":2,"1291":1,"1292":3,"1300":22,"1301":3,"1311":18,"1315":1,"1323":3,"1350":2,"1359":4,"1395":4,"1436":3,"1438":1,"1467":1,"1488":2,"1496":2,"1526":1,"1577":2,"1596":1,"1653":1,"1667":3,"1772":1,"1878":1,"1881":1,"1886":1,"1897":4,"1899":3,"1902":6,"1903":1,"1904":1,"1905":1,"1982":3,"1985":2,"2013":1,"2096":1,"2145":1}}],["altitudes",{"3":{"1832":1,"1833":1,"1834":1}}],["altitude",{"0":{"1832":1},"3":{"1832":1,"1833":1,"2100":1}}],["alt",{"2":{"1606":1,"1740":1},"3":{"1324":1,"1395":1,"1415":1,"1438":1,"1491":1,"1558":1,"1606":1,"1740":1}}],["alt=",{"3":{"1324":1,"1395":1}}],["altogether",{"3":{"740":1,"1247":1,"1311":1,"1359":2,"1373":1,"1478":1}}],["alters",{"3":{"1427":1,"1734":1}}],["altered",{"3":{"1286":1,"1324":1,"1391":1,"1436":1}}],["alter",{"3":{"620":1,"1286":1,"1427":1,"1477":1,"1639":1}}],["altercolumn",{"2":{"566":1},"3":{"566":1}}],["alternation",{"3":{"626":1,"1309":1}}],["alternating",{"3":{"625":1,"626":2,"1456":3,"1461":1,"1492":1,"1493":1,"1534":1,"1599":1}}],["alternatives",{"0":{"151":1,"286":1,"405":1,"785":1,"1144":1,"1154":1,"1178":1,"1187":1},"3":{"1":2,"255":1,"256":1,"989":1,"1035":1,"1043":1,"1051":1,"1117":1,"1133":1,"1324":1,"1436":2,"1559":1,"1729":1,"2069":1}}],["alternative",{"3":{"0":4,"1":1,"99":1,"137":1,"255":1,"283":1,"343":1,"401":1,"461":1,"468":1,"469":1,"470":1,"474":1,"541":1,"551":1,"557":1,"627":1,"635":1,"676":1,"683":1,"699":1,"733":1,"792":1,"797":1,"799":3,"803":1,"804":1,"805":1,"809":1,"815":2,"828":1,"829":1,"855":1,"856":1,"871":1,"889":1,"901":1,"907":1,"924":1,"930":1,"947":1,"965":1,"981":2,"989":1,"1000":1,"1051":1,"1090":1,"1139":1,"1140":1,"1149":1,"1212":1,"1229":2,"1237":2,"1247":3,"1259":1,"1270":2,"1271":1,"1286":9,"1300":6,"1301":1,"1309":1,"1311":2,"1323":7,"1324":5,"1339":5,"1359":10,"1369":2,"1380":1,"1395":5,"1396":8,"1417":4,"1436":7,"1441":1,"1455":1,"1477":1,"1524":1,"1526":1,"1531":1,"1534":1,"1545":1,"1559":1,"1577":1,"1638":1,"1752":1,"1754":1,"1763":1,"1774":2,"1810":1,"1812":1,"1815":1,"1911":1,"1951":1,"2025":1,"2077":1,"2152":1}}],["alternates",{"3":{"109":1,"1526":1}}],["alternate",{"3":{"109":1,"1220":1,"1229":1,"1286":1,"1436":2,"1438":1,"1492":1,"1632":13,"1641":5}}],["although",{"3":{"540":1,"1259":1,"1324":1,"1350":1,"1359":1,"1396":2,"1524":1,"1536":1,"1577":2,"1596":2}}],["alttext",{"3":{"0":1,"682":1,"1395":1,"1396":1}}],["alertkeyregex",{"3":{"1436":1}}],["alertable",{"3":{"1311":1,"1359":1}}],["alertemailaddress",{"2":{"1466":1,"1472":1,"1474":1},"3":{"609":1,"1455":1,"1466":1,"1467":2,"1472":1,"1474":1,"1600":1,"2160":1}}],["alerted",{"3":{"403":2,"612":1,"1017":1,"1018":1,"1212":1}}],["alerting",{"1":{"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"613":1,"614":1},"3":{"0":2,"125":1,"606":1,"765":1,"770":1,"1212":1,"1259":1,"1324":1,"1436":1,"1467":4,"1474":1,"1476":1,"1482":1,"1550":1,"1575":1,"1577":2,"1583":1,"1586":1,"1706":1,"2047":1,"2160":1,"2222":1,"2234":1}}],["alertseverityregex",{"3":{"1436":1}}],["alerts",{"3":{"0":6,"395":1,"403":1,"409":1,"607":3,"608":2,"609":10,"610":1,"611":5,"614":1,"759":1,"770":1,"791":1,"899":1,"914":1,"971":1,"1259":1,"1323":1,"1396":2,"1431":1,"1436":11,"1455":3,"1456":1,"1457":1,"1458":1,"1462":1,"1467":8,"1469":2,"1472":1,"1474":3,"1476":8,"1482":1,"1483":1,"1525":1,"1526":3,"1550":1,"1553":1,"1568":1,"1577":1,"1582":2,"1583":1,"1591":3,"1670":2,"1676":1,"1678":1,"1679":1,"1706":1,"1709":1,"2047":2,"2160":5,"2162":2,"2234":1}}],["alert",{"0":{"1476":1,"2047":1},"1":{"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"613":1,"614":1},"2":{"607":1,"1474":1},"3":{"0":10,"24":1,"109":1,"125":1,"224":1,"255":1,"395":1,"400":1,"403":1,"407":1,"409":1,"606":1,"607":7,"608":6,"609":26,"610":5,"611":5,"612":3,"613":2,"649":1,"759":1,"765":1,"821":1,"823":1,"896":1,"901":1,"914":4,"916":1,"918":1,"971":1,"976":1,"1016":3,"1018":3,"1019":4,"1020":2,"1090":1,"1093":1,"1096":1,"1102":1,"1199":2,"1207":1,"1212":1,"1256":1,"1259":1,"1270":1,"1286":1,"1311":3,"1323":5,"1324":6,"1359":1,"1389":1,"1395":3,"1396":4,"1402":3,"1431":2,"1433":1,"1436":54,"1442":2,"1443":3,"1447":1,"1455":1,"1462":1,"1463":1,"1465":2,"1466":3,"1467":32,"1469":2,"1470":1,"1471":1,"1472":3,"1474":11,"1476":23,"1482":3,"1483":3,"1484":1,"1488":4,"1489":2,"1493":1,"1496":2,"1523":1,"1524":7,"1526":10,"1530":1,"1531":4,"1532":1,"1533":1,"1535":2,"1547":1,"1577":4,"1589":3,"1591":7,"1595":1,"1596":5,"1597":1,"1598":1,"1600":2,"1607":1,"1627":1,"1641":1,"1643":1,"1645":1,"1670":1,"1671":1,"1678":1,"1709":3,"1741":1,"1843":1,"1909":1,"1911":1,"1919":1,"1946":1,"2044":1,"2047":8,"2050":1,"2081":1,"2158":4,"2160":12,"2234":2}}],["align",{"3":{"1526":1,"1544":1,"2036":1}}],["aligns",{"3":{"1286":1}}],["alignment",{"3":{"147":1,"1300":1,"1323":1,"1359":1,"1496":3,"1526":1,"1639":1}}],["aligned",{"3":{"32":1,"86":1,"642":1,"650":1,"1286":1,"1298":1,"1300":2,"1306":1,"1311":2,"1324":1,"1350":1,"1359":2,"1396":2,"1416":1,"1417":1,"1534":1,"1535":1,"1564":1,"1712":1}}],["aliased",{"3":{"186":1,"1052":1,"1054":1,"1286":1,"1311":1,"1323":1,"1359":2,"1396":1,"1398":1,"1415":4,"1416":3,"1436":1}}],["aliases",{"0":{"1939":1},"1":{"467":1,"468":1,"469":1,"470":1,"471":1,"472":1,"473":1,"474":1,"475":1,"476":1,"477":1,"478":1,"796":1,"797":1,"798":1,"799":1,"800":1,"801":1,"802":1,"803":1,"804":1,"805":1,"806":1,"1047":1,"1048":1,"1049":1,"1050":1,"1051":1,"1052":1,"1053":1,"1054":1,"1055":1},"3":{"0":11,"467":1,"468":8,"470":3,"471":1,"472":3,"473":1,"474":1,"475":3,"476":3,"477":3,"478":3,"548":1,"633":1,"656":1,"660":1,"661":2,"796":1,"797":2,"798":3,"799":4,"805":1,"1047":1,"1049":4,"1050":3,"1051":2,"1054":2,"1055":1,"1192":1,"1196":1,"1202":1,"1203":1,"1212":7,"1231":2,"1281":1,"1286":3,"1300":2,"1309":7,"1311":2,"1344":1,"1350":42,"1359":38,"1369":1,"1380":10,"1394":1,"1395":31,"1396":32,"1402":23,"1409":2,"1415":4,"1416":1,"1431":1,"1436":4,"1455":1,"1489":1,"1496":1,"1541":1,"1577":1,"1591":1,"1650":1,"1651":1,"1662":2,"1685":1,"1686":1,"1689":1,"1727":1,"1810":4,"1812":1,"1939":2,"1941":1,"2091":1,"2232":1,"2234":4}}],["aliasing",{"3":{"0":1,"844":1,"848":1,"1415":1,"1891":1}}],["alias",{"3":{"0":2,"295":1,"342":1,"468":7,"469":2,"470":7,"471":1,"472":5,"474":1,"475":3,"476":3,"477":3,"478":3,"547":1,"633":2,"656":1,"675":1,"676":1,"698":1,"701":1,"797":4,"798":2,"799":3,"800":1,"801":1,"802":1,"803":6,"804":4,"805":4,"905":1,"910":1,"1048":2,"1049":1,"1051":1,"1053":1,"1054":2,"1175":1,"1177":1,"1196":1,"1212":3,"1231":2,"1237":11,"1247":3,"1259":2,"1271":1,"1286":13,"1296":1,"1300":27,"1301":1,"1309":12,"1311":4,"1323":9,"1324":5,"1338":1,"1339":1,"1344":1,"1350":36,"1359":64,"1369":2,"1380":10,"1382":1,"1395":28,"1396":40,"1398":1,"1402":11,"1404":1,"1415":22,"1416":1,"1436":7,"1447":1,"1465":1,"1480":1,"1496":1,"1526":1,"1611":1,"1649":5,"1650":1,"1651":1,"1661":1,"1684":2,"1685":1,"1695":1,"1699":2,"1700":2,"1701":1,"1727":5,"1728":3,"1810":4,"1816":1,"1963":1,"2091":2,"2099":2,"2232":1,"2234":2}}],["alike",{"3":{"0":2,"201":1,"243":1,"460":1,"490":1,"491":1,"492":1,"640":1,"827":1,"972":1,"1050":1,"1237":1,"1247":2,"1259":1,"1271":1,"1281":1,"1286":4,"1294":1,"1300":2,"1307":1,"1324":1,"1329":1,"1339":2,"1344":1,"1350":1,"1380":1,"1395":2,"1396":1,"1402":1,"1415":1,"1436":4,"1447":1,"1456":1,"1475":1,"1577":1,"1631":1,"1637":1,"1662":1,"1666":1,"1761":1,"1922":1,"2137":1,"2158":1}}],["aliveresponse",{"3":{"1436":1}}],["alive",{"2":{"1337":1},"3":{"0":7,"94":1,"99":4,"100":1,"175":1,"233":1,"235":1,"238":1,"239":1,"399":1,"402":2,"404":1,"572":1,"698":1,"757":1,"761":1,"827":6,"829":3,"830":1,"832":1,"833":1,"848":1,"849":1,"913":1,"1066":1,"1068":1,"1144":1,"1186":1,"1276":1,"1286":2,"1300":3,"1301":3,"1311":1,"1312":2,"1324":5,"1328":5,"1329":1,"1330":1,"1332":5,"1333":2,"1337":3,"1338":1,"1339":36,"1343":1,"1359":1,"1395":1,"1396":1,"1415":1,"1416":3,"1417":3,"1430":3,"1436":4,"1438":1,"1441":6,"1443":4,"1445":1,"1446":2,"1447":4,"1450":2,"1455":1,"1467":8,"1488":2,"1490":1,"1550":1,"1591":1,"1668":1,"1669":1,"1670":2,"1677":3,"1719":1,"1720":1,"1727":1,"1891":1,"2001":1,"2008":1,"2011":1,"2015":1,"2025":3,"2039":2,"2056":1,"2057":1,"2161":1}}],["alsoanalyzesqueryspecifications",{"3":{"1436":2}}],["alsoliftwhen",{"3":{"1326":2,"1339":3,"1441":1,"1444":4}}],["also",{"0":{"576":1,"1247":1},"3":{"0":24,"5":1,"19":1,"21":2,"24":2,"30":2,"46":1,"57":1,"62":1,"71":1,"72":1,"73":1,"74":1,"98":3,"100":1,"103":1,"109":1,"110":1,"122":2,"125":1,"126":1,"127":1,"136":1,"145":1,"147":1,"150":1,"152":2,"157":2,"161":1,"164":1,"166":1,"168":1,"175":2,"182":1,"188":1,"189":1,"193":1,"197":1,"200":1,"201":1,"212":2,"214":1,"225":2,"229":1,"234":2,"235":1,"241":1,"242":1,"248":2,"250":1,"255":2,"256":1,"258":1,"265":1,"279":1,"280":1,"283":1,"284":1,"295":1,"318":1,"320":1,"326":1,"328":1,"349":1,"350":1,"352":1,"364":1,"370":1,"374":2,"375":1,"390":1,"395":1,"397":1,"399":1,"402":1,"426":1,"433":1,"436":1,"446":1,"448":2,"452":1,"453":1,"458":2,"459":1,"462":1,"468":1,"475":1,"497":1,"499":2,"502":1,"505":1,"514":1,"526":1,"528":1,"529":1,"530":2,"531":1,"536":1,"538":2,"539":1,"540":1,"545":3,"547":2,"549":1,"550":2,"551":2,"552":1,"554":1,"556":1,"564":1,"570":1,"575":1,"576":1,"583":1,"598":1,"599":1,"607":2,"609":2,"612":1,"624":2,"626":1,"628":2,"633":2,"634":1,"649":1,"651":2,"652":1,"655":1,"657":3,"664":1,"665":1,"676":1,"690":1,"691":1,"692":1,"702":1,"708":1,"715":1,"717":1,"720":1,"732":1,"733":2,"735":1,"736":1,"743":1,"744":1,"759":1,"764":1,"765":1,"766":2,"774":1,"775":1,"781":1,"782":2,"790":1,"792":1,"798":1,"799":1,"809":1,"812":1,"817":1,"818":2,"821":2,"822":1,"825":1,"826":1,"827":1,"829":1,"833":3,"840":1,"846":1,"848":1,"854":1,"857":1,"863":2,"864":1,"868":2,"871":1,"877":1,"891":1,"907":1,"909":1,"913":1,"917":2,"920":1,"922":1,"926":1,"927":1,"934":1,"938":1,"940":1,"946":1,"954":2,"960":2,"963":1,"967":1,"971":1,"988":1,"1004":3,"1011":1,"1018":2,"1020":1,"1021":1,"1029":1,"1043":1,"1045":1,"1066":1,"1068":1,"1074":1,"1078":2,"1086":1,"1089":1,"1093":2,"1095":1,"1115":1,"1118":1,"1124":3,"1128":1,"1132":1,"1133":1,"1136":1,"1140":1,"1152":1,"1160":1,"1168":1,"1169":1,"1170":1,"1174":2,"1216":1,"1220":1,"1227":1,"1229":7,"1231":2,"1233":1,"1234":2,"1235":1,"1236":2,"1237":15,"1239":1,"1240":1,"1242":1,"1247":13,"1252":1,"1255":1,"1256":2,"1258":3,"1259":15,"1263":3,"1264":1,"1265":1,"1267":1,"1270":33,"1271":6,"1272":1,"1273":3,"1274":3,"1275":1,"1276":1,"1277":2,"1278":5,"1279":2,"1285":1,"1286":62,"1287":1,"1289":2,"1294":1,"1300":51,"1301":11,"1304":1,"1305":1,"1307":2,"1309":19,"1310":4,"1311":44,"1312":8,"1313":1,"1315":2,"1316":3,"1317":2,"1318":1,"1320":1,"1322":2,"1323":53,"1324":82,"1326":1,"1328":1,"1333":2,"1336":1,"1337":2,"1339":40,"1342":4,"1343":2,"1344":1,"1345":1,"1346":1,"1347":4,"1349":2,"1350":42,"1352":1,"1355":4,"1359":110,"1362":2,"1365":1,"1366":1,"1368":1,"1369":8,"1371":1,"1373":2,"1375":1,"1376":3,"1378":1,"1379":1,"1380":16,"1387":1,"1391":1,"1395":56,"1396":65,"1397":1,"1398":1,"1399":2,"1400":1,"1401":1,"1402":24,"1405":1,"1408":1,"1411":2,"1415":33,"1416":9,"1417":26,"1418":1,"1422":1,"1424":1,"1425":1,"1427":5,"1429":1,"1431":2,"1434":3,"1435":1,"1436":85,"1438":7,"1441":3,"1442":2,"1443":6,"1444":1,"1446":2,"1447":1,"1449":2,"1453":1,"1454":1,"1455":5,"1456":1,"1457":3,"1458":1,"1459":1,"1460":3,"1462":1,"1463":1,"1465":3,"1466":2,"1467":27,"1472":2,"1474":3,"1476":2,"1477":1,"1480":1,"1481":1,"1486":1,"1487":2,"1488":1,"1489":3,"1490":4,"1492":4,"1496":12,"1499":5,"1508":1,"1509":1,"1512":1,"1526":4,"1531":1,"1532":1,"1534":1,"1536":1,"1554":1,"1577":5,"1582":1,"1583":3,"1585":1,"1591":2,"1596":2,"1597":2,"1599":1,"1611":1,"1626":1,"1631":2,"1632":2,"1639":1,"1640":1,"1641":5,"1646":1,"1651":3,"1653":3,"1656":1,"1668":1,"1671":1,"1673":1,"1677":1,"1680":1,"1684":2,"1687":1,"1692":1,"1695":1,"1714":1,"1720":1,"1724":1,"1726":1,"1727":3,"1729":3,"1731":1,"1749":1,"1750":1,"1765":2,"1795":1,"1799":1,"1810":2,"1815":1,"1821":2,"1822":1,"1829":1,"1832":1,"1837":1,"1839":1,"1841":1,"1842":1,"1843":1,"1845":2,"1856":1,"1864":1,"1881":2,"1882":2,"1883":1,"1884":1,"1885":1,"1886":1,"1890":1,"1893":2,"1897":2,"1899":1,"1902":1,"1908":1,"1910":1,"1915":1,"1920":1,"1922":1,"1927":1,"1935":1,"1944":1,"1946":1,"1948":2,"1953":1,"1962":1,"1963":2,"1964":1,"1970":1,"1971":1,"1972":1,"1975":1,"1977":1,"1987":1,"1995":1,"1996":1,"2001":1,"2007":2,"2009":2,"2013":1,"2014":2,"2018":1,"2025":1,"2030":1,"2033":1,"2035":3,"2038":1,"2043":2,"2044":2,"2046":1,"2047":1,"2054":1,"2056":1,"2057":2,"2062":1,"2064":1,"2068":1,"2091":1,"2098":1,"2100":1,"2108":1,"2109":1,"2111":1,"2115":1,"2123":1,"2133":1,"2134":1,"2137":1,"2139":1,"2140":2,"2144":2,"2145":1,"2146":1,"2152":1,"2158":1,"2163":1,"2167":1,"2168":2,"2170":3,"2176":1,"2181":1,"2183":1,"2187":1,"2190":1,"2191":1,"2195":1,"2204":1,"2206":1,"2216":1,"2218":1,"2223":1,"2238":1}}],["allcarrytypeconstraints",{"3":{"1436":1}}],["allmetrics",{"3":{"1465":1,"1467":1}}],["allmmcacommonpackages",{"3":{"1436":2}}],["allmarkedread",{"3":{"1324":1}}],["allbyvalue",{"3":{"1415":1}}],["allfailed",{"3":{"1359":1}}],["allknownstatuses",{"3":{"1350":1}}],["allerrors",{"3":{"1229":1}}],["allspecification",{"3":{"1199":2,"1207":1}}],["allocator",{"3":{"1438":1}}],["allocate",{"3":{"1222":1,"1229":1,"1286":2,"1323":2,"1324":1,"1339":1,"1359":4,"2168":1}}],["allocates",{"3":{"1220":1,"1221":1,"1237":2,"1246":1,"1247":5,"1259":2,"1270":2,"1279":1,"1286":1,"1300":2,"1301":1,"1310":1,"1311":3,"1328":1,"1339":1,"1350":1,"1359":10,"1380":1,"1395":3,"1639":1}}],["allocated",{"3":{"438":1,"1221":1,"1229":3,"1237":1,"1247":3,"1270":5,"1271":1,"1286":1,"1300":1,"1301":1,"1311":2,"1323":2,"1339":5,"1359":3,"1395":4,"1396":1,"1436":2,"1438":1,"1441":1,"1639":2,"2128":1}}],["allocationceilingsbytes",{"2":{"591":1},"3":{"591":1}}],["allocation",{"3":{"0":1,"442":1,"471":1,"591":3,"592":1,"593":1,"595":1,"1212":1,"1213":1,"1220":1,"1229":5,"1237":3,"1244":1,"1247":9,"1259":3,"1263":1,"1270":4,"1286":5,"1300":13,"1301":2,"1309":1,"1311":5,"1312":1,"1323":5,"1324":2,"1328":1,"1339":6,"1350":1,"1359":19,"1380":1,"1395":3,"1396":2,"1402":2,"1415":2,"1416":1,"1417":3,"1423":1,"1427":1,"1436":4,"1438":1,"1441":1,"1467":1,"1492":1,"1577":4,"1639":1,"1668":1,"1800":1,"1805":1,"1821":1,"1923":1,"2048":1,"2198":1}}],["allocations",{"3":{"0":2,"589":1,"591":1,"592":1,"593":1,"860":1,"1237":1,"1492":1,"2048":1,"2049":1,"2050":1,"2234":1}}],["allocating",{"3":{"0":1,"1219":1,"1286":2,"1300":1,"1311":1,"1323":1,"1350":1,"1359":2}}],["allowinsecure",{"3":{"1467":3}}],["allowing",{"3":{"1286":1,"1309":1,"1323":1,"1336":1,"1339":2,"1359":1,"1369":1,"1396":1,"1415":1,"1417":1,"1455":1,"1467":1,"1776":1}}],["allowreadingfromstring",{"3":{"1359":1}}],["allowresponsebuffering",{"2":{"838":1},"3":{"838":1,"1339":1}}],["allowunscopedexport",{"2":{"1997":1},"3":{"1300":1,"1311":3,"1372":1,"1380":24,"1496":2,"1988":1,"1996":4,"1997":1}}],["allowwriteablefields",{"3":{"1247":7}}],["allowmultiple",{"3":{"1237":3,"1300":2,"1310":3,"1323":3,"1324":2}}],["allowmissingownerattribute",{"2":{"1297":1},"3":{"318":1,"1199":3,"1203":1,"1207":2,"1297":4,"1300":9,"1496":2,"1995":2}}],["allowmissingowner",{"2":{"322":1,"326":1,"1997":1,"1998":1},"3":{"318":4,"322":1,"324":1,"326":1,"1300":1,"1667":1,"1995":1,"1996":1,"1997":1,"1998":1}}],["allowazureservices",{"3":{"1467":1,"1477":1,"1524":1,"1526":2,"1534":1,"1591":1}}],["allowautoredirect",{"3":{"1324":1}}],["allowall",{"3":{"774":2}}],["allowanyorigin",{"2":{"775":1},"3":{"774":1,"775":1,"1339":1}}],["allowanymethod",{"2":{"774":1},"3":{"774":2,"1339":1}}],["allowanyheader",{"2":{"774":1},"3":{"774":2,"1339":1}}],["allowanonymousattribute",{"3":{"1436":3}}],["allowanonymous",{"2":{"387":1,"388":1,"453":1,"454":1,"1062":1,"1376":1,"1532":1,"1589":1,"1632":1,"1647":1,"1650":1,"1689":1,"1698":1,"1703":1,"1721":1,"1758":1,"1761":1,"1898":1,"2134":1},"3":{"0":2,"189":3,"243":1,"387":1,"388":1,"448":2,"453":1,"454":1,"790":1,"854":1,"1062":1,"1116":1,"1212":1,"1294":1,"1300":7,"1307":1,"1309":1,"1311":15,"1323":1,"1324":5,"1339":2,"1350":1,"1359":15,"1371":1,"1373":3,"1375":1,"1376":1,"1379":1,"1380":24,"1396":4,"1408":1,"1415":5,"1416":1,"1436":26,"1438":1,"1489":1,"1526":1,"1532":1,"1534":1,"1589":1,"1591":1,"1596":1,"1627":1,"1631":2,"1632":3,"1641":4,"1647":1,"1650":1,"1651":1,"1689":1,"1698":3,"1703":1,"1721":1,"1747":3,"1748":9,"1749":1,"1758":1,"1761":1,"1898":3,"1922":3,"1923":1,"1963":1,"2133":1,"2134":1}}],["allowances",{"3":{"1436":1}}],["allowance",{"3":{"0":2,"135":2,"136":1,"139":3,"216":1,"219":1,"1067":1,"1126":1,"1263":1,"1298":1,"1311":5,"1324":3,"1337":1,"1339":1,"1416":1,"1430":1,"1436":15,"1438":1,"1449":1,"1465":2,"1488":1,"1492":1,"1675":1,"2077":1,"2152":1,"2154":1}}],["allowcredentials",{"2":{"774":1,"775":1},"3":{"774":2,"775":1,"1311":1,"1339":2}}],["allowcachelookup",{"2":{"740":1},"3":{"740":1,"1311":1}}],["allowcachestorage",{"2":{"740":1},"3":{"740":1,"1311":1,"1380":2}}],["allowblobpublicaccess",{"3":{"665":1}}],["allowdistributed",{"2":{"178":1},"3":{"178":1,"1311":6,"2001":1}}],["allowtools",{"2":{"1419":1,"2175":1},"3":{"0":1,"1089":1,"1091":2,"1093":1,"1419":1,"1421":1,"1422":2,"1427":7,"1526":1,"1577":1,"2175":1,"2176":1,"2181":2}}],["allowsharedkeyaccess",{"3":{"1467":1}}],["allowspecificorigins",{"2":{"774":1},"3":{"774":1}}],["allowsclientkey",{"2":{"333":1},"3":{"333":1,"1241":1,"1247":3}}],["allows",{"3":{"0":1,"11":1,"110":1,"126":1,"360":1,"412":1,"530":1,"626":1,"742":1,"774":2,"775":1,"776":1,"853":1,"926":1,"1026":1,"1029":1,"1091":1,"1150":1,"1196":1,"1239":1,"1263":1,"1270":1,"1271":1,"1286":2,"1300":2,"1311":3,"1324":5,"1339":5,"1348":1,"1350":1,"1359":3,"1369":2,"1380":3,"1409":1,"1415":1,"1423":1,"1424":2,"1427":2,"1436":4,"1447":1,"1457":1,"1458":1,"1467":2,"1517":1,"1591":1,"1630":1,"1640":1,"1678":1,"1687":1,"1749":1,"1765":1,"1934":1,"2026":1,"2144":1,"2176":1,"2177":1,"2181":2}}],["allowlisting",{"3":{"1436":4}}],["allowlistedcollaborator",{"3":{"1436":3}}],["allowlistedcommand",{"3":{"1436":2}}],["allowlistedhandler",{"3":{"1436":2}}],["allowlistednamespace",{"3":{"1436":5}}],["allowlistedtype",{"3":{"1436":7}}],["allowlisted",{"3":{"547":1,"1311":1,"1416":1,"1417":1,"1436":14,"1816":1}}],["allowlists",{"3":{"27":2,"1161":1,"1311":4,"1436":9}}],["allowlist",{"3":{"0":4,"17":1,"27":1,"39":2,"41":1,"109":1,"265":4,"350":2,"418":2,"420":4,"421":1,"426":1,"552":1,"1061":1,"1063":1,"1161":4,"1162":2,"1164":1,"1311":8,"1324":4,"1405":1,"1415":4,"1416":3,"1417":2,"1436":103,"1438":1,"1526":1,"1534":1,"1577":1,"1591":1,"1599":1,"1600":1,"1653":1,"1976":1,"2044":1,"2085":2,"2087":1,"2088":1,"2204":2}}],["allow",{"1":{"771":1,"772":1,"773":1,"774":1,"775":1,"776":1,"777":1,"778":1},"3":{"0":3,"128":1,"175":1,"177":1,"189":3,"219":3,"265":1,"350":1,"355":1,"418":1,"423":1,"427":1,"428":2,"626":1,"749":1,"766":1,"771":1,"773":1,"774":4,"775":2,"776":4,"778":1,"1107":1,"1108":1,"1111":1,"1116":2,"1124":1,"1127":1,"1175":2,"1179":1,"1212":2,"1241":2,"1243":1,"1247":5,"1270":1,"1271":1,"1285":1,"1286":5,"1300":1,"1309":1,"1311":1,"1323":1,"1324":2,"1336":3,"1338":2,"1339":8,"1342":1,"1344":2,"1347":1,"1350":4,"1351":1,"1353":5,"1356":1,"1359":22,"1366":1,"1369":3,"1380":2,"1391":1,"1394":1,"1395":6,"1396":4,"1402":2,"1416":2,"1417":2,"1423":1,"1427":9,"1436":46,"1438":1,"1443":2,"1455":1,"1467":3,"1488":1,"1496":1,"1526":2,"1534":1,"1577":1,"1591":1,"1600":1,"1631":2,"1635":1,"1637":1,"1640":1,"1653":1,"1666":1,"1671":4,"1673":1,"1727":1,"1815":1,"1817":1,"1856":2,"1898":5,"1989":1,"2150":1,"2153":1,"2177":1,"2205":1,"2234":2}}],["allowedpurgetypes",{"3":{"1436":3}}],["allowedpublicimplementations",{"3":{"1436":2}}],["allowedhandlers",{"3":{"1436":4}}],["allowedharddeletetypes",{"2":{"1061":1},"3":{"39":1,"1061":1,"1436":4}}],["allowedthrowingtypes",{"3":{"1436":2}}],["allowedsharedcodes",{"3":{"1436":3}}],["allowedsavingtypes",{"3":{"1436":2}}],["allowedstaticmembers",{"2":{"884":1},"3":{"881":1,"884":1,"1436":4}}],["allowedunvalidatedcommands",{"3":{"1436":3}}],["allowedanonymousendpoints",{"3":{"1436":10}}],["allowedauthenticators",{"3":{"1417":1}}],["allowedfileextensions",{"3":{"1350":4,"1359":2}}],["allowedfiles",{"2":{"546":1,"1134":1,"1135":1,"1136":1,"1990":1},"3":{"0":3,"545":2,"546":1,"1133":1,"1134":1,"1135":2,"1136":1,"1436":12,"1489":1,"1815":2,"1990":1,"2044":1}}],["allowedcodeprefixes",{"3":{"1436":2}}],["allowedcascadeexempttypes",{"3":{"1436":2}}],["allowedchars",{"3":{"1309":2}}],["allowedclockreaders",{"2":{"1161":1},"3":{"1161":2,"1431":1,"1436":1,"2044":1}}],["allowedcyclenamespaces",{"3":{"0":1,"135":2,"1436":6}}],["allowedorigins",{"2":{"774":1},"3":{"0":2,"774":5,"775":1,"776":2,"778":1,"1311":1,"1336":1,"1339":3,"1443":1}}],["allowedreturnurlschemes",{"3":{"0":1,"350":1,"420":1,"428":1,"429":1,"1311":1,"1416":1,"1417":1,"1976":1}}],["allowed",{"0":{"1422":1,"2073":1},"3":{"0":2,"81":1,"135":1,"333":1,"384":1,"390":1,"540":1,"766":1,"773":1,"774":1,"791":1,"896":1,"897":1,"914":1,"926":1,"1067":1,"1091":1,"1168":1,"1178":1,"1184":2,"1191":1,"1200":1,"1229":1,"1237":2,"1239":1,"1246":1,"1257":1,"1259":1,"1270":2,"1285":1,"1286":11,"1297":1,"1300":6,"1311":5,"1323":3,"1324":4,"1339":5,"1350":7,"1359":10,"1380":3,"1395":3,"1396":8,"1398":2,"1399":2,"1402":7,"1415":2,"1417":3,"1418":1,"1422":1,"1427":2,"1431":1,"1436":17,"1438":1,"1467":1,"1489":1,"1498":1,"1561":1,"1640":1,"1721":1,"1749":1,"1755":1,"1765":1,"1767":3,"1813":1,"1815":3,"1817":1,"1821":1,"1851":1,"1892":1,"1899":1,"1932":1,"1934":1,"1960":1,"1993":2,"2044":3,"2073":1,"2149":1,"2152":1}}],["all",{"0":{"1339":1,"1395":1,"1790":1,"1938":1,"2120":1,"2180":1},"2":{"184":1,"659":1,"1373":1},"3":{"0":68,"12":2,"23":2,"24":2,"26":1,"31":2,"46":1,"51":1,"54":1,"58":1,"59":1,"62":2,"73":1,"76":1,"78":2,"93":3,"95":1,"99":2,"107":1,"109":6,"111":3,"115":1,"118":1,"122":3,"125":1,"126":1,"133":1,"135":2,"138":1,"140":1,"142":1,"146":1,"147":3,"148":2,"149":1,"150":2,"152":2,"156":1,"157":1,"164":1,"165":1,"166":2,"168":1,"170":4,"174":1,"175":2,"176":1,"177":1,"179":3,"180":5,"184":2,"186":9,"189":1,"195":3,"201":2,"203":1,"207":1,"214":1,"215":1,"217":1,"219":2,"224":1,"225":1,"234":1,"237":1,"241":3,"242":1,"243":1,"245":3,"251":1,"253":1,"254":3,"255":1,"256":4,"257":2,"258":1,"259":4,"260":1,"261":1,"263":1,"265":6,"267":1,"279":1,"280":1,"283":2,"284":1,"291":1,"314":1,"319":1,"328":1,"330":1,"332":1,"335":1,"341":2,"343":2,"346":1,"350":1,"359":2,"373":1,"390":1,"396":1,"397":4,"398":1,"399":1,"400":1,"401":2,"402":1,"409":1,"412":1,"413":1,"414":1,"415":1,"419":1,"420":1,"425":1,"426":1,"427":1,"440":1,"454":1,"459":1,"464":2,"465":1,"471":1,"472":1,"477":1,"486":2,"487":1,"488":4,"489":4,"490":4,"491":3,"492":4,"493":1,"494":2,"499":1,"505":1,"506":2,"507":1,"508":1,"509":1,"511":1,"512":1,"513":1,"514":1,"522":1,"523":1,"531":1,"536":1,"537":1,"538":2,"539":1,"540":1,"544":1,"545":3,"546":1,"547":1,"549":5,"551":1,"555":2,"556":1,"566":1,"572":8,"574":1,"576":1,"577":1,"578":3,"582":1,"583":1,"585":2,"590":1,"591":2,"592":1,"593":1,"599":4,"600":2,"602":2,"603":2,"607":1,"609":6,"611":5,"612":1,"616":1,"618":3,"619":1,"620":1,"624":1,"626":5,"627":1,"628":1,"633":2,"635":4,"638":1,"640":2,"643":1,"644":1,"645":1,"649":1,"655":1,"657":3,"659":1,"660":1,"665":5,"666":1,"672":3,"674":6,"682":2,"683":2,"690":5,"692":1,"693":1,"696":1,"697":1,"698":2,"699":3,"700":1,"702":1,"707":1,"709":1,"714":1,"715":1,"716":1,"717":2,"720":1,"725":1,"733":1,"739":1,"740":2,"743":4,"747":1,"748":1,"749":2,"751":3,"759":1,"764":1,"766":3,"767":1,"768":1,"773":1,"774":1,"776":1,"781":1,"782":2,"784":1,"790":3,"793":1,"794":1,"798":2,"799":4,"800":2,"803":1,"809":2,"810":3,"814":1,"820":1,"821":1,"825":1,"826":2,"827":6,"829":2,"832":2,"837":2,"838":3,"840":3,"842":1,"853":3,"856":1,"859":1,"860":2,"861":3,"863":2,"867":1,"868":1,"869":1,"870":3,"872":1,"875":1,"877":1,"881":5,"889":1,"891":1,"892":1,"896":1,"905":6,"906":3,"914":1,"915":1,"920":1,"923":2,"924":1,"926":1,"930":1,"932":1,"933":1,"935":1,"940":1,"941":1,"946":1,"954":1,"955":1,"956":1,"958":1,"959":2,"963":1,"964":4,"972":1,"979":2,"980":2,"986":1,"987":2,"988":1,"995":1,"996":1,"998":2,"1004":3,"1005":1,"1006":2,"1010":1,"1012":1,"1013":1,"1014":1,"1016":1,"1018":3,"1021":1,"1026":2,"1033":1,"1036":2,"1041":1,"1043":1,"1044":1,"1050":2,"1051":1,"1052":1,"1054":2,"1055":2,"1059":1,"1060":1,"1070":1,"1074":3,"1075":2,"1078":1,"1081":2,"1083":1,"1084":1,"1085":1,"1091":1,"1092":2,"1107":1,"1109":1,"1115":2,"1116":1,"1124":1,"1132":1,"1133":1,"1134":1,"1135":1,"1136":1,"1137":1,"1150":1,"1152":1,"1168":2,"1169":1,"1171":1,"1175":2,"1184":1,"1191":1,"1192":1,"1196":1,"1200":1,"1201":1,"1202":1,"1203":1,"1211":1,"1212":9,"1213":1,"1214":4,"1220":3,"1222":1,"1224":2,"1225":1,"1227":1,"1229":11,"1230":1,"1231":1,"1232":4,"1234":3,"1235":1,"1237":21,"1239":1,"1241":2,"1242":1,"1243":3,"1246":1,"1247":36,"1248":1,"1249":1,"1252":5,"1257":3,"1258":2,"1259":40,"1263":4,"1264":1,"1265":3,"1267":1,"1268":1,"1270":44,"1271":15,"1273":1,"1274":1,"1275":3,"1277":2,"1279":1,"1281":2,"1282":2,"1283":1,"1285":4,"1286":144,"1287":2,"1289":2,"1290":1,"1292":1,"1294":2,"1297":2,"1300":72,"1301":20,"1302":1,"1306":1,"1307":1,"1309":26,"1310":12,"1311":89,"1312":16,"1314":1,"1315":1,"1318":2,"1320":3,"1323":57,"1324":132,"1325":3,"1326":4,"1330":1,"1332":2,"1333":6,"1334":1,"1335":2,"1338":4,"1339":89,"1341":1,"1342":3,"1343":2,"1344":1,"1347":2,"1348":3,"1349":4,"1350":91,"1352":4,"1353":1,"1354":1,"1357":1,"1358":2,"1359":219,"1360":1,"1361":1,"1362":4,"1364":1,"1365":1,"1366":1,"1368":1,"1369":35,"1371":1,"1373":2,"1374":1,"1375":1,"1376":1,"1377":2,"1378":1,"1379":3,"1380":53,"1382":1,"1383":3,"1384":2,"1385":3,"1388":1,"1389":1,"1390":2,"1391":4,"1392":1,"1394":1,"1395":114,"1396":145,"1399":3,"1402":41,"1406":3,"1408":1,"1409":3,"1411":1,"1414":3,"1415":73,"1416":18,"1417":57,"1418":1,"1419":1,"1421":1,"1422":2,"1423":1,"1425":1,"1427":7,"1428":1,"1429":2,"1430":1,"1431":2,"1432":2,"1433":1,"1436":242,"1438":17,"1440":1,"1441":12,"1442":3,"1443":9,"1444":3,"1445":7,"1446":3,"1447":10,"1448":1,"1449":1,"1450":2,"1453":5,"1454":6,"1455":17,"1456":3,"1460":3,"1461":2,"1463":1,"1465":4,"1466":1,"1467":53,"1473":2,"1474":6,"1475":2,"1476":5,"1477":6,"1478":1,"1480":2,"1486":6,"1487":3,"1488":15,"1489":7,"1490":10,"1491":4,"1492":11,"1495":2,"1496":46,"1498":2,"1499":1,"1500":1,"1503":1,"1504":1,"1509":1,"1514":1,"1519":1,"1525":3,"1526":21,"1528":1,"1531":2,"1534":4,"1535":6,"1537":2,"1541":1,"1561":1,"1563":1,"1569":3,"1576":2,"1577":12,"1578":1,"1579":1,"1582":1,"1585":2,"1586":1,"1587":1,"1589":2,"1591":21,"1593":1,"1594":1,"1596":6,"1597":1,"1599":1,"1600":3,"1611":1,"1622":1,"1623":1,"1624":1,"1625":1,"1626":1,"1627":4,"1629":2,"1630":11,"1631":16,"1632":16,"1633":4,"1634":2,"1635":8,"1636":1,"1637":3,"1638":7,"1639":10,"1640":11,"1641":12,"1644":1,"1646":2,"1651":2,"1652":2,"1653":2,"1654":3,"1657":1,"1661":2,"1663":1,"1665":1,"1666":2,"1667":1,"1670":1,"1671":2,"1673":2,"1675":1,"1681":1,"1682":1,"1683":1,"1684":1,"1685":4,"1686":7,"1687":1,"1691":1,"1693":1,"1694":1,"1696":1,"1701":1,"1704":1,"1705":1,"1707":1,"1708":1,"1716":1,"1718":1,"1719":2,"1720":3,"1721":1,"1725":1,"1726":2,"1727":6,"1728":3,"1729":2,"1736":1,"1738":1,"1746":1,"1747":1,"1748":3,"1749":7,"1750":3,"1753":6,"1754":1,"1755":1,"1759":2,"1760":2,"1764":2,"1765":10,"1767":4,"1768":6,"1769":4,"1771":1,"1773":1,"1774":3,"1775":1,"1776":2,"1777":3,"1779":5,"1780":1,"1781":1,"1784":4,"1788":1,"1789":1,"1794":1,"1796":1,"1799":2,"1800":1,"1801":1,"1802":1,"1805":4,"1806":1,"1807":1,"1808":2,"1811":1,"1815":5,"1821":2,"1825":1,"1829":1,"1830":1,"1833":1,"1839":1,"1840":1,"1841":1,"1842":1,"1849":2,"1851":2,"1852":1,"1854":1,"1856":2,"1857":1,"1859":3,"1860":3,"1861":2,"1864":1,"1865":2,"1869":1,"1874":1,"1875":1,"1876":2,"1881":2,"1882":1,"1883":1,"1884":3,"1888":1,"1894":1,"1895":1,"1898":1,"1900":1,"1903":1,"1904":1,"1908":1,"1909":2,"1916":1,"1920":1,"1923":2,"1927":2,"1931":1,"1932":3,"1933":1,"1935":2,"1938":1,"1940":1,"1941":1,"1942":1,"1944":1,"1945":1,"1946":3,"1947":2,"1948":1,"1949":1,"1952":1,"1953":1,"1954":1,"1956":1,"1960":2,"1962":2,"1963":2,"1968":1,"1970":2,"1975":2,"1977":2,"1978":1,"1979":1,"1982":1,"1985":2,"1987":1,"1988":2,"1989":1,"1991":1,"1993":1,"1996":2,"1998":1,"1999":2,"2000":3,"2001":2,"2002":2,"2003":1,"2004":1,"2008":1,"2011":1,"2019":1,"2020":2,"2025":1,"2030":1,"2031":2,"2033":1,"2034":1,"2035":2,"2037":2,"2038":1,"2039":1,"2043":2,"2044":3,"2047":1,"2048":1,"2054":1,"2055":1,"2056":2,"2058":2,"2064":3,"2069":1,"2071":1,"2072":1,"2073":1,"2074":1,"2075":2,"2079":1,"2080":1,"2081":2,"2085":3,"2087":1,"2088":1,"2089":1,"2091":1,"2092":1,"2096":1,"2099":3,"2100":1,"2110":1,"2113":1,"2114":1,"2119":3,"2120":3,"2122":1,"2123":3,"2126":1,"2130":1,"2133":1,"2140":2,"2144":1,"2145":1,"2149":1,"2150":2,"2151":1,"2152":2,"2153":1,"2156":2,"2158":10,"2160":4,"2161":1,"2162":1,"2163":1,"2169":3,"2170":1,"2171":1,"2172":1,"2173":1,"2174":3,"2175":1,"2176":2,"2178":1,"2179":1,"2180":1,"2181":1,"2182":3,"2187":1,"2191":1,"2194":1,"2196":1,"2198":2,"2199":1,"2206":1,"2212":1,"2217":1,"2222":2,"2230":1,"2232":1,"2234":2,"2236":2,"2244":1}}],["alreadyhaveaccountlink",{"3":{"1436":1}}],["alreadyanswered",{"3":{"1402":1}}],["alreadyvisited",{"3":{"1396":7}}],["alreadyreviewed",{"3":{"1765":1,"1767":1}}],["alreadyrevoked",{"3":{"1300":1}}],["alreadyrecorded",{"3":{"1396":9}}],["alreadyunpublished",{"3":{"1350":1,"1359":2}}],["alreadylinked",{"3":{"1350":1,"1359":1}}],["alreadypublished",{"3":{"1343":1,"1344":1,"1350":1,"1359":2,"1380":1}}],["alreadyprocessedasync",{"2":{"195":1,"201":1,"1258":1},"3":{"195":2,"201":1,"1258":1,"1259":6}}],["alreadyclosed",{"3":{"1300":1,"1436":6}}],["alreadyclaimed",{"3":{"1300":1}}],["alreadycheckedin",{"3":{"690":1,"1396":17}}],["alreadysoftdeletefilteredentity",{"3":{"1199":3,"1207":1}}],["alreadydeleted",{"2":{"1219":1,"2062":1},"3":{"39":1,"1219":1,"1229":1,"1237":1,"1323":1,"1359":1,"1810":1,"2062":1}}],["already",{"3":{"0":30,"18":1,"24":4,"26":3,"27":2,"39":3,"46":1,"53":1,"54":1,"58":1,"60":3,"67":1,"69":1,"71":4,"72":3,"73":1,"81":2,"95":2,"99":1,"100":2,"102":1,"109":2,"110":1,"113":1,"115":1,"120":2,"122":3,"123":2,"127":1,"130":1,"131":1,"135":4,"136":1,"140":1,"142":1,"147":1,"148":1,"150":2,"158":1,"160":1,"164":1,"165":1,"166":1,"167":1,"175":1,"176":1,"178":3,"179":2,"180":1,"184":1,"186":1,"189":2,"194":2,"195":1,"198":1,"200":4,"201":2,"202":2,"207":1,"214":1,"225":3,"228":1,"230":1,"237":1,"246":1,"255":2,"256":1,"259":1,"260":1,"264":1,"265":3,"266":2,"273":1,"274":2,"292":1,"295":1,"299":1,"309":1,"310":1,"314":1,"317":1,"318":2,"340":2,"341":1,"342":1,"349":1,"350":3,"351":1,"352":1,"353":2,"358":2,"362":1,"369":1,"370":1,"382":1,"383":2,"390":1,"391":1,"392":1,"398":1,"400":2,"401":2,"402":1,"404":2,"405":3,"407":1,"408":1,"412":1,"413":1,"415":1,"420":1,"423":1,"424":1,"448":1,"458":2,"459":5,"461":2,"465":2,"471":1,"483":1,"499":1,"500":1,"508":1,"517":2,"519":1,"527":2,"528":1,"534":2,"535":1,"536":6,"537":4,"538":1,"539":2,"544":2,"549":2,"555":1,"556":1,"558":1,"563":1,"564":1,"565":1,"566":1,"573":1,"578":1,"583":1,"599":3,"600":1,"601":1,"603":1,"609":3,"618":1,"627":1,"633":2,"640":1,"641":1,"647":1,"648":1,"650":2,"657":1,"658":1,"665":3,"666":1,"673":1,"675":1,"681":1,"682":1,"683":1,"689":1,"691":2,"692":1,"697":1,"698":4,"702":3,"706":1,"707":4,"708":2,"710":1,"714":1,"715":1,"716":1,"718":1,"724":1,"725":3,"726":1,"733":2,"734":1,"735":1,"740":1,"741":4,"742":1,"743":1,"748":1,"750":1,"756":1,"757":1,"765":2,"767":1,"773":1,"789":1,"790":4,"792":1,"793":1,"794":1,"800":1,"801":1,"803":1,"809":1,"810":4,"811":2,"813":1,"818":1,"819":3,"820":2,"826":1,"827":7,"828":1,"829":1,"832":2,"833":1,"837":1,"838":1,"839":2,"846":1,"847":2,"848":1,"849":1,"853":2,"854":1,"856":1,"860":2,"862":1,"864":1,"865":1,"870":1,"872":1,"877":1,"882":2,"883":1,"884":1,"889":2,"890":2,"891":1,"896":2,"897":2,"905":8,"906":2,"912":1,"914":4,"921":2,"922":3,"926":3,"930":1,"931":1,"932":2,"933":1,"934":1,"940":1,"945":1,"947":1,"964":1,"965":1,"971":2,"973":1,"980":1,"981":1,"982":2,"988":5,"989":3,"995":1,"996":5,"997":2,"1003":1,"1004":1,"1011":2,"1013":1,"1017":1,"1018":2,"1019":1,"1025":1,"1033":1,"1034":1,"1035":1,"1040":1,"1041":1,"1042":2,"1043":3,"1044":2,"1049":1,"1055":1,"1058":3,"1059":5,"1060":2,"1061":1,"1066":2,"1067":2,"1068":2,"1073":1,"1074":1,"1075":2,"1077":1,"1082":2,"1083":1,"1084":1,"1085":1,"1090":1,"1093":1,"1115":2,"1116":4,"1117":2,"1123":1,"1125":3,"1135":1,"1140":1,"1142":2,"1143":1,"1145":2,"1150":1,"1152":1,"1154":1,"1155":1,"1157":1,"1160":1,"1162":1,"1178":1,"1183":1,"1185":1,"1187":1,"1190":1,"1196":1,"1212":1,"1218":1,"1220":2,"1227":1,"1228":1,"1229":11,"1231":2,"1233":1,"1237":10,"1239":2,"1241":1,"1242":2,"1247":21,"1249":1,"1250":1,"1253":1,"1255":1,"1256":2,"1257":1,"1258":2,"1259":34,"1262":2,"1263":3,"1265":3,"1267":2,"1270":40,"1271":4,"1274":3,"1275":3,"1276":1,"1278":2,"1281":7,"1286":105,"1288":1,"1289":1,"1290":2,"1292":1,"1300":52,"1301":10,"1304":1,"1307":1,"1309":19,"1310":4,"1311":58,"1312":9,"1315":2,"1316":1,"1318":1,"1320":1,"1322":2,"1323":58,"1324":89,"1328":1,"1330":2,"1335":1,"1337":2,"1338":1,"1339":42,"1343":2,"1345":1,"1346":1,"1347":1,"1350":23,"1353":2,"1354":1,"1355":3,"1357":1,"1358":2,"1359":122,"1362":1,"1363":1,"1365":1,"1366":1,"1369":13,"1371":2,"1372":2,"1376":2,"1378":2,"1380":21,"1385":1,"1389":1,"1390":1,"1395":49,"1396":92,"1399":1,"1400":2,"1401":1,"1402":33,"1406":2,"1407":3,"1408":5,"1409":2,"1410":1,"1411":1,"1413":2,"1414":1,"1415":66,"1416":9,"1417":37,"1420":1,"1421":1,"1422":1,"1423":1,"1425":1,"1426":1,"1427":13,"1429":2,"1436":64,"1438":6,"1441":2,"1442":2,"1443":2,"1445":2,"1446":1,"1447":3,"1448":1,"1453":2,"1454":3,"1455":10,"1456":2,"1459":4,"1465":2,"1467":17,"1472":2,"1473":1,"1474":1,"1475":1,"1477":1,"1479":1,"1486":1,"1488":2,"1492":2,"1496":14,"1507":1,"1531":1,"1577":2,"1596":2,"1627":1,"1631":5,"1632":8,"1638":1,"1640":1,"1641":8,"1646":1,"1648":1,"1649":2,"1651":1,"1653":1,"1656":1,"1661":1,"1664":1,"1672":1,"1684":2,"1685":5,"1686":12,"1687":1,"1689":1,"1692":1,"1697":1,"1700":1,"1701":5,"1702":2,"1703":1,"1708":1,"1719":1,"1720":1,"1723":1,"1724":2,"1728":1,"1729":2,"1739":1,"1747":2,"1748":3,"1749":4,"1755":1,"1764":2,"1765":7,"1766":1,"1767":2,"1768":1,"1770":1,"1776":1,"1781":1,"1788":1,"1790":1,"1800":1,"1804":1,"1805":2,"1809":1,"1821":2,"1823":1,"1824":1,"1832":2,"1840":3,"1843":1,"1844":1,"1847":1,"1849":1,"1851":3,"1870":1,"1873":1,"1879":1,"1881":1,"1883":1,"1887":2,"1890":1,"1891":1,"1892":1,"1897":1,"1904":1,"1908":2,"1909":1,"1910":2,"1916":2,"1918":1,"1920":1,"1922":1,"1923":3,"1924":1,"1933":2,"1941":1,"1944":1,"1946":1,"1948":3,"1950":2,"1953":1,"1954":1,"1967":1,"1968":2,"1975":1,"1976":1,"1977":5,"1978":2,"1979":5,"1982":3,"1984":1,"1989":1,"1990":1,"1995":1,"1996":2,"1998":2,"2001":3,"2002":1,"2013":1,"2017":1,"2018":1,"2025":1,"2029":1,"2031":2,"2033":3,"2047":1,"2064":1,"2065":1,"2066":3,"2068":2,"2069":1,"2071":1,"2078":1,"2083":1,"2085":3,"2089":1,"2091":1,"2094":1,"2097":2,"2098":1,"2099":1,"2100":1,"2103":1,"2119":1,"2120":2,"2133":1,"2134":1,"2136":1,"2137":1,"2138":1,"2141":1,"2142":1,"2143":1,"2145":1,"2152":1,"2156":1,"2158":3,"2162":1,"2163":1,"2165":3,"2166":1,"2167":4,"2169":2,"2170":5,"2171":2,"2177":1,"2179":1,"2182":1,"2184":1,"2186":1,"2189":2,"2192":2,"2193":1,"2194":1,"2195":2,"2196":3,"2200":1,"2201":1,"2217":1,"2234":1,"2236":1}}],["alwaysonline",{"3":{"1417":1}}],["alwaysonlineconnectivitystatusservice",{"2":{"2120":1},"3":{"1199":5,"1203":1,"1207":2,"1417":14,"2120":2}}],["alwaysbypassedprefixes",{"3":{"1339":1}}],["alwaysfailsvalidator",{"3":{"1199":2,"1207":1}}],["alwaysretryexecutionstrategy",{"3":{"1199":2,"1207":1}}],["always",{"0":{"1364":1},"1":{"928":1,"929":1,"930":1,"931":1,"932":1,"933":1,"934":1,"935":1},"2":{"1483":1},"3":{"0":9,"24":1,"53":1,"58":1,"78":1,"123":1,"140":1,"160":1,"175":2,"202":1,"221":1,"230":2,"231":1,"243":2,"245":1,"255":1,"256":1,"258":1,"267":1,"272":1,"280":1,"310":2,"334":1,"339":1,"344":1,"349":1,"353":1,"359":1,"363":1,"383":1,"388":1,"401":1,"404":1,"407":1,"413":1,"420":1,"440":1,"501":1,"511":1,"513":1,"518":1,"536":1,"549":1,"564":1,"565":1,"583":2,"585":1,"593":1,"599":1,"609":1,"620":1,"626":2,"657":1,"684":1,"690":2,"698":2,"749":2,"766":1,"784":1,"818":1,"819":1,"827":1,"848":1,"856":1,"863":1,"881":1,"905":1,"924":1,"926":2,"928":1,"946":1,"1033":1,"1034":2,"1042":1,"1046":1,"1061":1,"1067":1,"1099":1,"1100":1,"1108":1,"1117":1,"1123":1,"1175":1,"1176":1,"1211":1,"1212":3,"1214":1,"1215":1,"1221":1,"1227":1,"1229":3,"1237":5,"1240":1,"1247":4,"1253":1,"1255":1,"1259":9,"1261":1,"1263":1,"1269":1,"1270":8,"1271":3,"1276":1,"1278":1,"1279":1,"1280":1,"1286":43,"1291":1,"1300":20,"1301":10,"1302":1,"1309":11,"1310":4,"1311":35,"1312":5,"1315":1,"1320":2,"1323":22,"1324":21,"1332":1,"1333":1,"1337":1,"1339":19,"1348":1,"1349":1,"1350":16,"1359":27,"1364":1,"1366":1,"1369":3,"1380":3,"1383":1,"1384":1,"1386":1,"1387":1,"1388":1,"1391":2,"1395":27,"1396":23,"1402":11,"1406":1,"1408":1,"1415":15,"1416":2,"1417":21,"1423":1,"1427":4,"1430":1,"1431":2,"1433":1,"1435":1,"1436":30,"1438":5,"1440":1,"1441":1,"1444":1,"1447":2,"1454":1,"1455":4,"1456":3,"1460":2,"1466":1,"1467":2,"1470":1,"1475":3,"1478":1,"1483":1,"1486":3,"1488":3,"1489":1,"1490":1,"1492":2,"1496":1,"1503":1,"1526":3,"1531":1,"1534":1,"1577":1,"1607":2,"1627":1,"1630":1,"1631":3,"1639":1,"1640":1,"1641":2,"1649":1,"1652":1,"1653":2,"1670":1,"1684":1,"1686":1,"1697":1,"1700":1,"1701":1,"1730":1,"1737":1,"1741":2,"1761":1,"1768":1,"1769":1,"1781":1,"1800":1,"1805":1,"1815":1,"1820":1,"1825":1,"1843":2,"1849":1,"1860":1,"1865":1,"1867":1,"1871":1,"1876":2,"1877":2,"1878":1,"1881":1,"1882":1,"1889":1,"1898":1,"1900":1,"1902":2,"1922":2,"1927":1,"1933":1,"1934":1,"1938":1,"1944":1,"1947":1,"1949":1,"1963":1,"1974":1,"1976":1,"1984":2,"1992":1,"1994":1,"2001":1,"2004":1,"2011":1,"2020":1,"2025":1,"2045":1,"2047":2,"2050":1,"2058":1,"2065":1,"2093":1,"2096":1,"2120":2,"2121":1,"2125":2,"2128":1,"2131":1,"2136":1,"2144":1,"2185":1,"2186":1,"2204":1,"2234":2}}],["asleep",{"3":{"1479":1}}],["aswellformedopenapidescribingtheapisurface",{"3":{"1436":1}}],["asreadonly",{"2":{"1343":1},"3":{"1343":1,"1350":3,"1369":1,"1396":1,"1402":1}}],["asreadonlylist",{"3":{"1324":1}}],["astronomically",{"3":{"1902":1}}],["astracking",{"2":{"2166":1},"3":{"0":1,"549":1,"551":1,"926":1,"1240":1,"1244":1,"1247":3,"1270":6,"1286":16,"1310":3,"1311":1,"1350":1,"1359":48,"1369":3,"1396":10,"1402":5,"1415":5,"1577":1,"1591":1,"2166":1}}],["asterisk",{"3":{"1324":2,"1395":1}}],["asnotracking",{"3":{"1259":1,"1286":6,"1306":1,"1526":1,"1577":2,"1591":1}}],["ascends",{"3":{"1286":1}}],["ascending",{"3":{"330":1,"549":3,"1175":1,"1191":1,"1200":1,"1211":1,"1242":1,"1247":2,"1286":7,"1311":1,"1324":2,"1339":1,"1344":1,"1350":3,"1359":4,"1392":1,"1395":17,"1396":1,"1402":1,"1438":1,"1498":2,"1532":1,"1631":4,"1639":2,"1640":15,"1988":2}}],["ascii",{"3":{"1286":7,"1300":1,"1305":1,"1309":1,"1312":5,"1324":3,"1347":1,"1350":1,"1396":3,"1415":1,"1417":1,"1436":9,"1438":2,"1496":1,"1821":1,"1927":1}}],["asc",{"3":{"1242":1,"1247":4,"1286":1,"1395":5,"1396":1,"1597":1,"1598":1,"1640":1}}],["asitsfallback",{"3":{"1436":2}}],["asimplementedinterfaces",{"3":{"1395":4,"1415":1}}],["asia",{"3":{"1350":1}}],["aside",{"3":{"556":1,"1311":1,"1655":1}}],["asichatclient",{"2":{"1420":1},"3":{"0":1,"1091":2,"1420":2,"1427":5,"2174":1}}],["asker",{"3":{"1396":3,"1402":1}}],["asked",{"3":{"0":2,"24":1,"73":1,"108":1,"350":1,"365":1,"402":1,"529":1,"537":1,"549":1,"691":1,"714":1,"727":1,"733":1,"740":1,"924":1,"939":1,"1020":1,"1026":1,"1027":1,"1028":1,"1043":1,"1058":1,"1066":1,"1091":1,"1092":1,"1093":1,"1116":1,"1142":1,"1229":1,"1238":1,"1241":1,"1243":1,"1244":1,"1245":1,"1246":1,"1247":5,"1254":1,"1259":5,"1270":3,"1271":1,"1272":1,"1275":1,"1286":8,"1295":1,"1300":1,"1306":1,"1309":1,"1310":2,"1311":2,"1323":2,"1324":11,"1328":1,"1339":1,"1350":4,"1359":13,"1369":1,"1389":1,"1395":3,"1396":6,"1405":1,"1415":6,"1416":1,"1417":4,"1424":1,"1427":2,"1436":3,"1438":1,"1443":1,"1450":1,"1459":1,"1467":1,"1630":1,"1639":2,"1682":1,"1727":2,"1804":1,"1814":1,"1815":1,"1863":1,"1947":1,"1962":1,"1975":1,"1977":1,"2044":1,"2179":1,"2196":1}}],["ask",{"3":{"527":1,"536":1,"549":1,"649":1,"675":1,"684":1,"716":1,"725":2,"741":1,"798":1,"1019":1,"1237":2,"1244":1,"1247":3,"1259":1,"1270":2,"1273":2,"1277":1,"1278":1,"1283":1,"1286":10,"1300":7,"1301":2,"1309":3,"1311":1,"1323":2,"1324":9,"1328":1,"1339":4,"1359":6,"1369":1,"1373":1,"1380":2,"1391":1,"1395":5,"1396":9,"1403":1,"1415":4,"1416":2,"1417":4,"1427":1,"1436":9,"1455":1,"1632":1,"1686":2,"1697":1,"1768":1,"1794":1,"1796":1,"1802":1,"1815":1,"1840":1,"1844":1,"1916":1,"1950":1,"1973":1,"2057":1,"2069":1,"2100":2,"2112":1,"2118":1,"2126":1,"2172":1}}],["asking",{"3":{"24":1,"123":1,"254":1,"389":1,"508":1,"557":1,"690":1,"740":1,"741":1,"757":1,"758":1,"782":1,"819":1,"881":1,"890":1,"899":1,"932":1,"1024":1,"1229":1,"1232":1,"1237":2,"1240":1,"1247":2,"1259":2,"1267":1,"1276":1,"1277":1,"1286":15,"1300":1,"1301":1,"1323":2,"1324":1,"1350":1,"1359":15,"1380":1,"1386":1,"1395":6,"1402":1,"1415":1,"1417":2,"1422":1,"1436":1,"1438":1,"1455":1,"1534":1,"1585":1,"1631":1,"1639":1,"1664":1,"1749":1,"1765":1,"1920":1,"1945":1,"2033":1,"2049":1,"2056":1,"2077":1,"2171":1,"2176":1,"2197":1}}],["asksforafreshlinkandsayssowithoutconfirmingtheaccountexists",{"3":{"1436":1}}],["asks",{"3":{"0":1,"10":1,"24":1,"73":1,"81":1,"126":1,"200":1,"265":1,"350":2,"369":1,"407":1,"427":1,"428":1,"458":1,"459":1,"465":1,"536":1,"545":1,"546":1,"573":1,"577":2,"590":1,"592":1,"626":2,"650":1,"682":1,"690":1,"692":2,"698":1,"724":1,"725":1,"793":2,"860":1,"871":1,"996":1,"1003":1,"1027":1,"1042":1,"1067":1,"1090":1,"1091":2,"1092":1,"1116":1,"1142":1,"1161":1,"1228":2,"1234":1,"1237":1,"1243":2,"1245":1,"1247":3,"1259":2,"1264":1,"1270":4,"1271":1,"1274":1,"1281":1,"1286":26,"1300":6,"1301":1,"1304":1,"1307":1,"1309":2,"1310":2,"1311":6,"1312":1,"1313":1,"1318":2,"1322":1,"1323":6,"1324":23,"1332":1,"1333":1,"1337":1,"1339":5,"1349":1,"1350":3,"1352":1,"1357":1,"1359":23,"1369":2,"1380":3,"1395":11,"1396":12,"1402":6,"1408":1,"1411":1,"1416":5,"1417":6,"1418":1,"1431":1,"1432":1,"1433":1,"1435":1,"1436":16,"1438":2,"1455":1,"1475":1,"1476":1,"1492":2,"1496":1,"1524":1,"1526":1,"1686":2,"1727":1,"1748":1,"1765":2,"1769":1,"1776":1,"1788":1,"1795":1,"1810":1,"1815":1,"1823":1,"1844":1,"1851":1,"1865":1,"1866":1,"1868":1,"1885":1,"1898":1,"1933":1,"1972":1,"1977":1,"2048":1,"2064":1,"2080":2,"2085":1,"2100":1,"2111":1,"2118":1,"2119":1,"2125":2,"2143":2,"2151":1,"2156":1,"2164":2,"2165":1,"2169":2,"2171":1,"2173":1,"2176":1,"2179":1,"2184":1,"2193":1,"2196":1}}],["asymmetries",{"3":{"1324":1,"1359":1}}],["asymmetricsignatureprovider",{"3":{"1300":1}}],["asymmetrically",{"3":{"1212":1,"1323":1,"2068":1}}],["asymmetric",{"3":{"31":3,"32":1,"186":1,"401":1,"1034":1,"1288":1,"1300":6,"1324":1,"1395":1,"1396":1,"1436":1,"1799":1,"1893":1,"1894":1,"1895":1,"1897":1,"1898":1,"1899":3}}],["asymmetry",{"3":{"0":2,"71":1,"230":1,"260":1,"343":1,"392":1,"401":1,"457":1,"463":1,"464":1,"465":1,"609":1,"624":2,"656":1,"658":1,"766":1,"819":2,"820":1,"823":1,"876":1,"1229":2,"1234":1,"1267":1,"1270":2,"1276":1,"1286":6,"1309":1,"1311":1,"1323":4,"1332":1,"1339":1,"1350":5,"1359":14,"1395":3,"1396":4,"1402":1,"1415":1,"1417":1,"1436":1,"1438":1,"1441":1,"1443":1,"1486":1,"1492":1,"1543":1,"1639":1,"1876":1,"1920":1,"1938":1,"1964":1,"1989":1,"2010":1,"2033":1,"2087":1,"2234":1}}],["asyncapi",{"3":{"1524":2,"1526":1,"1530":1,"1531":2,"1532":1,"1546":1}}],["asyncmethods",{"3":{"1436":1}}],["asyncmethodsdeclaretrailingcancellationtoken",{"2":{"0":1,"135":1},"3":{"0":1,"135":1,"1436":2}}],["asyncretrypolicy",{"3":{"1324":2}}],["asyncduplexstreamingcall",{"3":{"1312":1}}],["asyncclientstreamingcall",{"3":{"1312":1}}],["asyncclockreadingfixture",{"3":{"1199":2,"1207":1,"1436":5}}],["asyncunarycall",{"3":{"1312":1}}],["asyncstatemachineattribute",{"3":{"1436":1}}],["asyncserverstreamingcall",{"3":{"1312":1}}],["asyncservicescope",{"2":{"1252":1},"3":{"1252":1}}],["asyncscopedreadcontroller",{"3":{"1199":2,"1207":1}}],["asynchrony",{"3":{"743":1,"1436":1}}],["asynchronously",{"3":{"248":1,"350":1,"1342":1,"1395":5,"1413":1,"1415":1,"1438":1,"1467":1,"1634":1,"1638":1,"1751":1,"1770":1,"1887":1,"2113":1}}],["asynchronous",{"0":{"1390":1},"3":{"52":1,"59":1,"109":1,"255":1,"447":1,"455":1,"727":1,"1220":2,"1229":1,"1253":1,"1259":8,"1286":7,"1311":3,"1312":1,"1323":4,"1324":4,"1349":1,"1350":1,"1359":4,"1372":1,"1380":5,"1390":1,"1395":6,"1415":1,"1436":6,"1765":1,"1805":1,"1923":1,"2017":1,"2021":1,"2132":1}}],["asynclocal",{"2":{"1246":1},"3":{"265":3,"1246":2,"1247":4,"1318":1,"1324":2,"1417":2}}],["async",{"3":{"27":1,"77":1,"135":1,"483":1,"743":2,"1012":1,"1161":7,"1192":1,"1220":1,"1229":6,"1247":2,"1259":1,"1270":3,"1284":1,"1286":9,"1300":4,"1301":4,"1309":2,"1310":1,"1311":3,"1312":1,"1323":2,"1324":15,"1339":1,"1350":3,"1359":15,"1372":1,"1380":2,"1395":4,"1396":7,"1402":7,"1415":8,"1416":1,"1417":9,"1431":2,"1436":32,"1489":1,"1491":1,"1496":3,"1524":2,"1526":4,"1531":1,"1544":1,"1546":1,"1549":3,"1556":1,"1558":1,"1577":3,"1591":2,"1805":1,"1887":1,"2044":1}}],["aspiration",{"3":{"1669":1,"2060":1}}],["aspirational",{"3":{"1237":1,"1270":1,"1300":1,"1324":1,"1325":1,"1395":1,"1436":4,"1489":1,"1558":1,"1788":1,"2038":1,"2061":1}}],["aspire010",{"3":{"1441":1,"1526":1}}],["aspire",{"0":{"99":1,"1442":1,"1443":1,"1444":1,"2023":1},"1":{"911":1,"912":1,"913":1,"914":1,"915":1,"916":1,"917":1,"918":1,"1325":1,"1326":1,"1327":1,"1328":1,"1329":1,"1330":1,"1331":1,"1332":1,"1333":1,"1334":1,"1335":1,"1336":1,"1337":1,"1338":1,"1339":1,"1439":1,"1440":1,"1441":1,"1442":1,"1443":1,"1444":1,"1445":1,"1446":1,"1447":1,"1448":1,"1449":1,"1450":1,"1451":1,"2004":1,"2005":1,"2006":1,"2007":1,"2008":1,"2009":1,"2010":1,"2011":1,"2012":1,"2013":1,"2014":1,"2015":1},"2":{"61":1,"67":1,"99":1,"100":1,"135":1,"141":1,"142":1,"214":2,"241":1,"247":1,"259":1,"638":1,"821":1,"825":1,"826":1,"899":1,"912":2,"913":1,"914":1,"916":1,"917":1,"939":1,"1004":1,"1034":1,"1035":1,"1036":3,"1067":2,"1068":4,"1069":2,"1211":2,"1213":1,"1325":4,"1326":1,"1328":1,"1329":1,"1337":1,"1339":1,"1430":3,"1437":1,"1439":1,"1445":1,"1449":1,"1460":1,"1486":1,"1487":1,"1488":1,"1496":1,"1503":1,"1504":1,"1656":1,"1660":2,"1677":1,"1781":2,"1790":1,"2005":3,"2009":1,"2015":2,"2023":1,"2029":1,"2031":1,"2039":1,"2056":1,"2113":2,"2151":1,"2153":1,"2155":1,"2162":1},"3":{"0":28,"18":1,"31":2,"47":1,"53":1,"61":3,"66":1,"67":1,"72":1,"91":1,"92":1,"93":2,"95":4,"98":2,"99":6,"100":1,"135":1,"141":1,"142":1,"150":1,"166":3,"171":1,"179":2,"180":1,"189":1,"214":3,"216":1,"217":1,"219":1,"220":1,"221":1,"233":1,"234":1,"235":14,"237":3,"238":1,"241":2,"243":2,"245":2,"247":2,"255":2,"256":1,"258":2,"259":5,"260":1,"261":1,"390":1,"392":1,"395":3,"397":9,"399":1,"400":2,"401":2,"402":3,"404":1,"406":1,"407":1,"408":2,"409":1,"599":1,"601":1,"603":1,"618":1,"619":1,"632":1,"633":2,"638":1,"640":3,"642":1,"665":6,"668":1,"669":2,"674":5,"774":2,"776":1,"792":1,"818":1,"819":5,"821":1,"822":3,"825":1,"826":4,"827":7,"829":3,"830":2,"833":2,"837":2,"838":1,"854":1,"862":1,"883":1,"884":1,"897":2,"899":1,"900":1,"911":1,"912":3,"913":12,"914":4,"915":1,"916":1,"917":2,"918":1,"932":1,"938":1,"939":3,"941":1,"980":8,"996":1,"1004":2,"1034":5,"1035":3,"1036":3,"1037":1,"1044":2,"1065":2,"1066":2,"1067":13,"1068":6,"1069":6,"1070":3,"1089":1,"1103":1,"1108":3,"1150":1,"1154":2,"1157":1,"1184":1,"1191":1,"1192":3,"1199":121,"1200":1,"1202":3,"1203":52,"1206":7,"1207":372,"1208":30,"1211":4,"1212":9,"1213":3,"1247":3,"1259":4,"1268":1,"1270":3,"1286":5,"1288":1,"1301":2,"1309":2,"1311":9,"1312":7,"1323":15,"1324":4,"1325":9,"1326":5,"1327":2,"1328":8,"1329":2,"1330":2,"1331":2,"1332":9,"1333":7,"1334":7,"1335":1,"1336":3,"1337":8,"1339":242,"1350":1,"1364":1,"1365":1,"1368":1,"1369":1,"1378":1,"1380":2,"1396":2,"1407":1,"1415":3,"1428":2,"1430":16,"1435":3,"1436":6,"1437":13,"1438":11,"1439":4,"1440":1,"1441":39,"1442":10,"1443":21,"1444":5,"1445":1,"1446":1,"1447":3,"1448":1,"1449":5,"1450":1,"1451":1,"1453":1,"1454":1,"1455":3,"1456":7,"1460":2,"1464":1,"1467":10,"1473":1,"1476":2,"1482":1,"1486":7,"1487":9,"1488":9,"1489":2,"1490":8,"1492":3,"1496":37,"1499":2,"1503":3,"1504":2,"1505":1,"1526":3,"1531":1,"1535":1,"1551":1,"1554":1,"1570":2,"1575":1,"1577":19,"1582":1,"1583":1,"1585":2,"1586":1,"1591":1,"1596":1,"1600":1,"1602":1,"1606":1,"1612":1,"1641":1,"1647":2,"1648":2,"1653":3,"1654":1,"1656":2,"1660":2,"1661":2,"1668":1,"1670":2,"1674":2,"1677":2,"1681":1,"1682":1,"1683":1,"1684":3,"1687":1,"1689":1,"1692":1,"1693":3,"1695":1,"1698":1,"1701":1,"1702":1,"1705":1,"1707":2,"1717":1,"1718":5,"1720":1,"1724":1,"1725":1,"1726":1,"1727":10,"1729":1,"1731":1,"1735":1,"1740":1,"1752":1,"1763":2,"1774":1,"1779":1,"1781":3,"1783":1,"1790":2,"1792":1,"1793":1,"1841":1,"1842":1,"1843":1,"1896":1,"1916":1,"1923":1,"1938":1,"2003":1,"2004":4,"2005":4,"2006":1,"2009":1,"2011":2,"2014":4,"2015":5,"2016":1,"2020":1,"2022":1,"2023":2,"2025":1,"2028":1,"2029":1,"2031":3,"2039":1,"2056":1,"2057":1,"2058":1,"2091":2,"2113":3,"2151":2,"2153":1,"2155":1,"2156":1,"2158":5,"2159":1,"2161":1,"2162":3,"2194":1,"2211":2,"2221":1,"2223":1,"2229":6,"2231":2,"2234":1,"2241":3,"2245":1}}],["aspect",{"3":{"881":1,"885":1,"1480":3,"1636":2}}],["aspnet",{"2":{"877":1,"1450":1},"3":{"868":1,"877":1,"1445":4,"1450":1}}],["aspnetcore",{"2":{"95":1,"99":1,"234":1,"401":1,"409":1,"633":1,"665":1,"1036":1,"1091":1,"1110":1,"1300":1,"1311":2,"1312":2,"1324":4,"1331":1,"1332":1,"1334":1,"1339":3,"1395":1,"1443":1,"1898":1,"2011":1,"2101":1},"3":{"95":2,"99":1,"234":1,"235":1,"397":2,"401":1,"409":1,"572":1,"633":1,"665":2,"776":1,"869":1,"1036":1,"1091":1,"1110":1,"1213":6,"1300":9,"1309":5,"1311":23,"1312":2,"1323":1,"1324":28,"1331":1,"1332":1,"1334":1,"1339":21,"1369":1,"1380":1,"1395":4,"1396":1,"1416":1,"1417":1,"1429":1,"1436":26,"1441":1,"1442":1,"1443":3,"1445":1,"1467":3,"1489":3,"1490":1,"1577":2,"1677":2,"1898":1,"2001":1,"2011":1,"2044":1,"2101":1,"2158":2}}],["asp",{"2":{"446":1,"447":1,"448":1,"454":1,"2131":1,"2133":2},"3":{"0":2,"109":3,"111":1,"174":1,"185":1,"207":1,"243":1,"265":2,"387":2,"395":2,"396":1,"397":5,"398":1,"405":1,"409":1,"411":1,"415":1,"446":1,"447":1,"448":4,"451":1,"454":1,"481":3,"482":1,"572":1,"664":1,"665":1,"748":1,"826":1,"831":1,"840":1,"853":1,"914":1,"916":1,"917":1,"1124":1,"1191":1,"1200":1,"1202":1,"1203":1,"1212":2,"1213":2,"1217":1,"1229":2,"1230":1,"1249":1,"1259":1,"1270":1,"1286":1,"1300":25,"1301":2,"1307":1,"1308":1,"1309":11,"1311":56,"1312":2,"1323":1,"1324":22,"1332":1,"1333":2,"1336":1,"1337":1,"1338":1,"1339":30,"1341":1,"1351":1,"1359":9,"1367":1,"1369":1,"1380":11,"1396":10,"1402":2,"1404":1,"1415":15,"1416":4,"1417":2,"1430":1,"1431":1,"1436":21,"1438":3,"1442":1,"1443":4,"1451":1,"1453":1,"1460":1,"1465":1,"1467":4,"1488":1,"1490":1,"1496":3,"1505":1,"1540":1,"1577":1,"1640":1,"1671":1,"1677":1,"1782":1,"1805":2,"1825":1,"1895":1,"1922":1,"1929":1,"1970":1,"1999":1,"2003":1,"2007":2,"2011":2,"2040":1,"2044":1,"2056":1,"2106":1,"2131":1,"2133":5,"2155":1,"2156":1,"2158":3,"2162":1,"2221":1,"2222":2,"2226":1,"2227":1,"2234":1}}],["assurant",{"3":{"2222":1}}],["assumeuniversal",{"3":{"1247":1,"1309":2,"1312":3,"1396":3}}],["assumes",{"3":{"320":1,"352":1,"405":1,"448":1,"735":1,"837":1,"1229":1,"1270":1,"1286":1,"1293":1,"1300":1,"1311":2,"1324":3,"1359":4,"1395":1,"1396":1,"1415":1,"1435":1,"1436":3,"1585":1,"1640":1,"1718":2,"1789":1,"1815":1,"1847":1,"1885":1,"1978":1,"2017":1,"2200":1}}],["assume",{"3":{"266":1,"389":1,"449":1,"709":1,"756":1,"827":1,"1247":1,"1270":2,"1286":3,"1300":1,"1312":1,"1323":2,"1324":3,"1359":2,"1369":1,"1396":3,"1402":1,"1415":2,"1436":1,"1626":1,"1737":1,"1881":1,"1901":1,"1905":1,"1909":1,"2016":1,"2127":1,"2135":2}}],["assumedefaultversionwhenunspecified",{"2":{"448":1,"449":1,"2133":1,"2135":1},"3":{"448":2,"449":1,"1311":1,"2133":1,"2135":1}}],["assumed",{"0":{"2035":1},"3":{"0":1,"69":1,"97":1,"265":1,"590":1,"813":1,"860":1,"871":1,"1229":1,"1247":1,"1279":1,"1286":1,"1311":1,"1318":1,"1323":1,"1324":2,"1339":2,"1359":2,"1395":2,"1416":1,"1436":7,"1438":2,"1492":2,"1549":1,"1560":1,"1577":1,"1854":1,"1863":1,"1864":1,"1878":1,"2038":1,"2039":1,"2205":1}}],["assuming",{"3":{"170":1,"603":1,"810":1,"1270":1,"1286":1,"1300":1,"1311":1,"1323":2,"1324":3,"1369":1,"1395":1,"1417":1,"1467":2,"1868":1}}],["assumption",{"3":{"97":1,"101":1,"254":1,"461":1,"481":1,"751":1,"831":1,"840":1,"972":1,"1134":1,"1286":3,"1324":1,"1359":3,"1396":3,"1415":1,"1436":2,"1467":1,"1585":1,"1692":1,"1844":1,"1863":1,"2028":1}}],["assumptions",{"3":{"55":1,"1402":1,"1717":1,"1718":2}}],["assplitquery",{"2":{"1864":1},"3":{"1243":1,"1244":1,"1247":3,"1278":1,"1286":8,"1310":1,"1436":1,"1815":1,"1864":1}}],["assinglequery",{"3":{"1286":1}}],["assistive",{"3":{"1395":1,"1396":1,"1417":6,"1526":1,"1532":1,"1558":1,"1750":1}}],["assistant",{"3":{"1091":1,"1424":1,"1459":2,"1460":1,"2222":1}}],["assisted",{"3":{"1012":1,"1351":1,"1570":1,"1625":1,"2215":2,"2220":1,"2221":1,"2227":1,"2245":1}}],["assignaction",{"3":{"1310":4,"1359":18,"1402":3}}],["assignableroles",{"3":{"1324":1,"1415":2,"1436":1}}],["assignable",{"3":{"707":1,"889":1,"1237":1,"1286":2,"1324":1,"1402":1,"1414":2,"1436":1}}],["assign",{"3":{"1236":1,"1237":3,"1286":4,"1310":3,"1359":10,"1395":1,"1472":1,"1630":1,"1632":2,"1689":1,"1746":2,"1748":2,"1768":1,"1868":2}}],["assignparentcategory",{"3":{"545":1,"1270":1}}],["assignparentcategoryhandler",{"2":{"543":1,"551":1},"3":{"543":1,"551":1}}],["assigning",{"3":{"265":3,"924":1,"1229":1,"1286":1,"1310":1,"1324":3,"1343":1,"1350":6,"1359":6,"1395":1,"1396":4,"1402":1,"1417":2,"1436":1}}],["assigns",{"3":{"263":1,"265":1,"303":1,"470":1,"551":1,"633":1,"690":1,"698":1,"700":1,"703":1,"1229":3,"1231":2,"1237":4,"1246":1,"1247":1,"1270":1,"1286":7,"1303":1,"1310":3,"1323":3,"1324":11,"1339":4,"1342":1,"1350":15,"1359":24,"1395":2,"1396":6,"1402":2,"1405":1,"1415":5,"1417":4,"1436":5,"1498":1,"1631":1,"1632":1,"1639":1,"1727":1,"1810":1,"1865":1,"2091":1}}],["assignees",{"3":{"224":1}}],["assignedproperties",{"3":{"1286":1}}],["assigned",{"2":{"1844":1},"3":{"0":1,"238":1,"545":3,"550":1,"599":3,"600":1,"657":2,"667":1,"830":1,"1018":1,"1196":1,"1200":1,"1212":1,"1231":1,"1237":5,"1259":1,"1270":3,"1277":1,"1278":1,"1286":13,"1300":4,"1309":3,"1310":1,"1311":1,"1324":2,"1339":2,"1342":3,"1349":2,"1350":29,"1352":1,"1355":1,"1359":36,"1364":1,"1369":1,"1380":1,"1395":23,"1396":7,"1402":17,"1415":2,"1417":1,"1438":1,"1459":1,"1467":2,"1472":1,"1488":1,"1496":1,"1498":2,"1526":1,"1624":1,"1627":1,"1630":2,"1631":2,"1632":4,"1635":1,"1637":1,"1638":1,"1639":8,"1727":1,"1755":1,"1776":1,"1844":1,"1929":1,"2168":1,"2234":1}}],["assignments",{"3":{"26":1,"599":1,"600":1,"923":1,"1286":3,"1300":1,"1339":1,"1350":3,"1359":16,"1395":3,"1402":1,"1467":3,"1472":2,"1632":2,"1636":2,"1844":2,"1955":2,"1956":1,"1959":1}}],["assignment",{"3":{"0":3,"265":1,"302":1,"424":1,"545":1,"549":1,"599":1,"600":1,"602":1,"665":5,"666":1,"668":2,"669":1,"692":1,"698":1,"714":1,"801":2,"804":1,"926":1,"1050":1,"1116":1,"1191":1,"1192":1,"1229":1,"1270":1,"1286":5,"1297":1,"1300":1,"1309":1,"1323":3,"1324":5,"1339":5,"1350":3,"1359":27,"1380":3,"1388":1,"1395":9,"1396":4,"1402":6,"1415":2,"1417":1,"1436":2,"1438":1,"1442":1,"1465":1,"1467":5,"1470":1,"1472":3,"1474":1,"1481":2,"1631":2,"1670":1,"1865":1,"1870":1,"1955":1,"1970":2,"1972":1,"2129":1,"2140":1}}],["associating",{"3":{"1359":1}}],["associations",{"3":{"1311":1,"1350":3,"1359":2,"1436":1,"1611":1,"1636":1,"1639":1}}],["association",{"1":{"417":1,"418":1,"419":1,"420":1,"421":1,"422":1,"423":1,"424":1,"425":1,"426":1,"427":1,"428":1,"429":1,"430":1},"3":{"0":5,"417":1,"418":4,"419":1,"420":2,"421":1,"425":1,"426":1,"428":1,"429":1,"1192":1,"1212":1,"1300":1,"1311":9,"1339":1,"1350":17,"1359":17,"1369":1,"1380":7,"1383":1,"1395":7,"1416":4,"1436":4,"1441":1,"1496":2,"1577":1,"1599":1,"1630":2,"1631":3,"1637":2,"1639":1,"1640":1,"1666":1,"2123":3,"2234":1}}],["associates",{"3":{"1328":1,"1339":2,"1359":1,"2222":1}}],["associate",{"3":{"1324":1,"1350":1,"1639":1,"2226":2}}],["associated",{"3":{"0":1,"359":1,"360":1,"365":1,"418":1,"420":1,"422":1,"1284":1,"1286":3,"1324":1,"1359":4,"1416":1,"1436":1,"1481":2,"1558":1,"1561":1,"1599":1,"1627":1,"1630":4,"1631":2,"1632":2,"1639":3,"1767":1,"2144":1,"2148":1}}],["asselfwithinterfaces",{"3":{"1311":2,"1323":1,"1359":3}}],["assessments",{"3":{"2236":1}}],["assessed",{"3":{"1300":1,"1536":1,"1585":2}}],["assesses",{"3":{"1216":1,"1218":2,"1229":14,"1237":37,"1247":38,"1259":36,"1270":68,"1271":17,"1286":182,"1300":147,"1301":22,"1309":66,"1310":6,"1311":87,"1312":9,"1313":1,"1323":116,"1324":198,"1339":20,"1350":54,"1352":2,"1353":2,"1354":1,"1357":1,"1359":390,"1360":1,"1369":38,"1380":32,"1381":1,"1394":1,"1395":156,"1396":192,"1402":86,"1415":98,"1416":12,"1417":140,"1427":18,"1436":215,"1438":2,"1440":1,"1441":5,"1442":1,"1443":4,"1445":1,"1449":1,"1453":2,"1454":2,"1455":5,"1456":1,"1457":2,"1458":1,"1460":1,"1463":1,"1464":1,"1465":4,"1467":9,"1472":2,"1473":2,"1474":3,"1475":3,"1476":2,"1477":1,"1478":2,"1479":1,"1480":1,"1481":1,"1486":3,"1487":1,"1488":4,"1489":6,"1490":1,"1492":5}}],["assess",{"3":{"1270":1,"1286":1,"1300":3,"1324":1,"1339":1,"1359":1,"1369":3,"1380":2,"1395":4,"1396":6,"1417":4,"1436":19,"1554":1}}],["assertmessagesuffix",{"3":{"1436":1}}],["assertnoviolations",{"3":{"1436":1}}],["assertnodependency",{"3":{"1436":3}}],["assertnoaccessibilityviolationsasync",{"2":{"618":1,"1433":1,"1488":1,"1490":1,"2058":1},"3":{"618":1,"1433":1,"1436":5,"1488":3,"1490":1,"1493":1,"2058":1}}],["assertdarkpaletteasync",{"3":{"1436":2}}],["assertdatasourceasync",{"2":{"1069":1,"2057":1},"3":{"1067":2,"1069":1,"1339":2,"2057":1}}],["assertdisabledstubs",{"3":{"1436":8,"1438":1}}],["assertprobepresentunderdefaultculture",{"3":{"1436":2}}],["assertproblemdetailsshapeasync",{"2":{"572":1,"2056":1},"3":{"572":1,"1436":3,"2056":1}}],["assertprotocontract",{"3":{"1436":2}}],["assertpipeline",{"3":{"1436":3}}],["assertcaseasync",{"3":{"1427":2}}],["asserth2casync",{"3":{"1067":2,"1069":1,"1339":3,"2057":1}}],["asserthealthyasync",{"2":{"2057":1},"3":{"1067":1,"1069":1,"1339":2,"2057":1}}],["assertjwksasync",{"3":{"1067":1,"1069":1,"1339":2,"2057":1}}],["assertreadyasync",{"2":{"2057":1},"3":{"1067":1,"2057":1}}],["assertaliveasync",{"2":{"2057":1},"3":{"1067":1,"2057":1}}],["assertable",{"3":{"860":1,"1109":1,"1300":1,"1309":1,"1311":1,"1339":1,"1436":6}}],["assertwithinbudget",{"2":{"861":1},"3":{"861":2,"1436":3}}],["asserted",{"3":{"0":6,"71":1,"73":1,"160":2,"252":1,"350":1,"352":1,"353":1,"371":1,"448":1,"455":1,"463":1,"546":1,"590":1,"591":1,"609":1,"640":1,"690":1,"707":1,"741":1,"757":3,"766":1,"838":2,"863":1,"876":1,"883":1,"941":1,"966":1,"972":1,"996":1,"1067":1,"1069":1,"1083":1,"1212":2,"1237":2,"1262":1,"1270":3,"1286":6,"1300":6,"1309":1,"1311":7,"1323":3,"1324":2,"1339":7,"1359":8,"1380":2,"1395":3,"1396":4,"1415":5,"1416":3,"1417":3,"1427":1,"1428":1,"1431":3,"1433":1,"1435":2,"1436":42,"1438":8,"1451":1,"1455":3,"1467":1,"1488":2,"1492":1,"1500":1,"1526":1,"1535":1,"1577":3,"1596":1,"1600":1,"1641":1,"1701":1,"1707":1,"1898":1,"1977":2,"2001":1,"2133":1,"2134":1,"2234":1}}],["asserting",{"3":{"0":2,"54":1,"70":1,"250":1,"265":1,"558":1,"573":1,"616":1,"618":1,"627":1,"633":1,"676":1,"691":1,"717":1,"797":1,"827":1,"838":1,"972":1,"1068":1,"1084":2,"1163":1,"1212":1,"1262":1,"1270":1,"1286":2,"1300":4,"1312":1,"1323":2,"1324":2,"1339":2,"1350":1,"1359":7,"1396":1,"1415":2,"1427":1,"1428":1,"1430":1,"1432":1,"1435":1,"1436":51,"1438":4,"1455":1,"1461":1,"1488":1,"1492":4,"1577":1,"1585":1,"1686":1,"2056":1,"2057":1,"2058":1,"2109":1,"2124":1,"2131":1,"2234":2}}],["assertions",{"3":{"0":3,"147":1,"237":1,"531":1,"572":1,"573":1,"574":1,"616":5,"618":2,"621":1,"640":1,"832":1,"861":2,"863":1,"963":1,"967":1,"972":1,"1018":1,"1050":1,"1067":2,"1093":1,"1212":1,"1213":1,"1229":1,"1234":1,"1259":1,"1286":1,"1311":1,"1324":1,"1339":3,"1427":1,"1428":1,"1433":1,"1436":48,"1437":1,"1438":3,"1449":2,"1453":1,"1461":1,"1488":2,"1526":4,"1531":1,"1534":1,"1586":1,"1591":1,"1618":1,"1651":1,"1668":1,"1671":2,"1731":1,"2002":1,"2043":1,"2056":1,"2057":1,"2181":1}}],["assertion",{"0":{"2199":1},"3":{"0":5,"157":1,"218":1,"277":1,"318":1,"348":1,"350":3,"368":1,"526":1,"530":1,"572":2,"590":1,"592":1,"611":1,"618":1,"619":1,"718":1,"861":1,"862":2,"863":1,"914":2,"972":3,"973":1,"974":1,"975":1,"1059":1,"1066":1,"1067":2,"1068":1,"1069":2,"1262":1,"1270":3,"1278":1,"1286":3,"1300":5,"1328":2,"1339":7,"1359":1,"1369":1,"1380":1,"1396":3,"1402":1,"1406":4,"1415":8,"1427":4,"1429":1,"1430":1,"1432":1,"1433":1,"1436":109,"1437":1,"1438":6,"1449":1,"1453":3,"1454":2,"1467":1,"1488":3,"1489":1,"1490":3,"1491":3,"1492":5,"1526":3,"1531":2,"1534":1,"1535":1,"1577":1,"1591":2,"1645":1,"1654":1,"1671":1,"1685":1,"1707":2,"1714":1,"1883":1,"1973":1,"1975":1,"1977":4,"1978":1,"1997":1,"2044":1,"2046":1,"2056":1,"2060":1,"2182":1,"2199":1,"2205":1}}],["assertsomethingwasmeasured",{"2":{"861":1,"863":1},"3":{"861":1,"863":1}}],["asserts",{"3":{"0":3,"70":1,"72":1,"73":1,"74":1,"78":1,"122":2,"127":1,"136":1,"175":2,"180":1,"189":1,"265":2,"302":1,"312":2,"350":2,"352":1,"448":1,"451":1,"459":1,"563":1,"571":1,"572":8,"574":1,"576":1,"577":1,"578":1,"583":3,"585":1,"609":1,"618":3,"633":2,"665":1,"725":2,"749":1,"776":1,"831":2,"861":3,"890":1,"946":2,"955":1,"962":1,"963":1,"972":1,"1018":3,"1020":1,"1034":2,"1037":1,"1067":4,"1068":1,"1091":1,"1212":1,"1214":1,"1236":1,"1237":4,"1247":2,"1270":2,"1271":2,"1286":7,"1300":3,"1301":2,"1309":1,"1311":3,"1312":1,"1323":3,"1324":7,"1326":1,"1339":15,"1359":15,"1365":1,"1369":1,"1380":4,"1395":1,"1396":7,"1402":3,"1405":1,"1408":1,"1415":6,"1416":2,"1417":6,"1427":3,"1430":1,"1431":1,"1433":1,"1435":3,"1436":325,"1438":16,"1444":1,"1449":2,"1451":1,"1455":1,"1463":1,"1467":2,"1476":1,"1484":1,"1487":1,"1488":8,"1489":3,"1490":1,"1491":2,"1492":2,"1524":1,"1526":10,"1531":2,"1577":1,"1591":5,"1671":1,"1672":1,"1707":2,"1731":1,"1817":1,"1825":1,"1826":1,"1842":1,"1889":1,"1902":1,"1929":1,"1930":1,"1977":1,"1978":1,"1979":1,"1994":1,"2001":1,"2002":1,"2014":1,"2032":2,"2037":1,"2042":1,"2044":2,"2046":3,"2056":6,"2057":1,"2058":2,"2060":1,"2064":1,"2077":1,"2081":1,"2100":1,"2106":2,"2133":1,"2135":1,"2140":1,"2180":2,"2199":1,"2234":1}}],["assert",{"2":{"1070":1,"2057":1},"3":{"0":7,"122":1,"134":1,"150":2,"188":1,"353":1,"373":1,"415":1,"449":1,"590":1,"592":1,"614":1,"618":3,"619":1,"626":1,"757":1,"759":1,"776":1,"842":1,"860":1,"861":2,"862":1,"863":1,"891":1,"915":1,"945":1,"952":1,"953":1,"954":1,"955":1,"956":1,"960":1,"972":1,"973":1,"1018":2,"1051":1,"1067":3,"1070":1,"1074":1,"1085":1,"1213":1,"1237":1,"1247":1,"1270":6,"1271":1,"1281":1,"1286":7,"1300":1,"1309":1,"1311":2,"1323":2,"1324":3,"1328":1,"1339":7,"1359":2,"1369":1,"1380":2,"1395":1,"1396":4,"1415":5,"1417":1,"1428":2,"1429":1,"1430":2,"1432":1,"1433":1,"1436":69,"1438":7,"1449":1,"1489":6,"1491":1,"1492":1,"1504":1,"1551":1,"1600":1,"1611":1,"1651":1,"1671":1,"1782":1,"1902":1,"1951":1,"2042":1,"2044":1,"2048":2,"2055":1,"2056":2,"2057":1,"2065":1,"2102":1,"2105":1,"2106":1,"2109":1,"2124":1,"2135":1,"2167":1,"2169":1,"2182":1,"2234":1}}],["assembling",{"3":{"1247":1,"1300":1,"1356":1,"1396":1,"1436":2,"1438":1}}],["assemblies",{"3":{"0":4,"27":1,"41":1,"60":1,"80":2,"109":1,"132":2,"135":2,"265":2,"269":1,"341":1,"413":1,"573":1,"576":1,"583":2,"584":3,"649":3,"651":3,"726":1,"881":2,"884":1,"982":1,"1005":1,"1050":2,"1052":1,"1161":1,"1163":2,"1170":1,"1203":1,"1212":1,"1213":1,"1214":1,"1237":2,"1250":1,"1259":2,"1266":1,"1270":5,"1276":1,"1279":3,"1282":2,"1286":27,"1300":8,"1311":4,"1313":1,"1315":2,"1323":7,"1324":4,"1325":1,"1333":1,"1339":2,"1363":1,"1369":1,"1380":2,"1396":2,"1409":1,"1415":5,"1416":2,"1431":1,"1436":111,"1437":1,"1442":1,"1443":1,"1445":1,"1455":3,"1460":2,"1489":5,"1492":4,"1496":3,"1504":1,"1526":2,"1585":1,"1591":4,"1653":1,"1664":1,"1669":1,"1671":1,"1782":1,"1810":1,"1849":2,"1857":1,"1875":1,"1881":4,"1885":1,"1886":1,"1891":1,"2005":1,"2014":2,"2043":3,"2044":1,"2049":1,"2055":1,"2096":1,"2099":1,"2100":1,"2102":1,"2103":1,"2104":1,"2110":1,"2122":1,"2158":1,"2161":1}}],["assembler",{"3":{"1247":1}}],["assemble",{"3":{"660":1,"724":1,"1276":1,"1300":1,"1309":1,"1313":1,"1324":1,"1402":3,"1640":1,"2079":1,"2089":1}}],["assembled",{"0":{"1262":1,"1466":1,"1821":1},"3":{"0":1,"256":1,"545":1,"585":1,"599":2,"649":1,"727":1,"745":1,"846":1,"861":1,"1017":1,"1021":1,"1107":1,"1240":1,"1247":2,"1271":1,"1284":1,"1286":1,"1300":3,"1309":1,"1311":1,"1323":4,"1339":1,"1350":8,"1353":1,"1359":10,"1366":2,"1368":1,"1369":1,"1395":1,"1396":1,"1407":1,"1410":1,"1415":4,"1416":1,"1423":1,"1427":1,"1436":1,"1445":1,"1466":1,"1467":4,"1492":1,"1496":4,"1577":1,"1585":1,"1898":1,"1987":1,"2177":1}}],["assembles",{"3":{"0":1,"725":1,"1212":1,"1247":2,"1270":1,"1271":2,"1309":1,"1311":1,"1323":2,"1324":3,"1359":3,"1381":1,"1396":2,"1402":1,"1415":1,"1427":1,"1436":4,"2069":1,"2152":1}}],["assemblyfilters",{"3":{"1455":1}}],["assemblyname",{"2":{"1319":1},"3":{"1311":1,"1319":1,"1323":3,"1350":2,"1359":1,"1369":1,"1380":2,"1396":4,"1415":7,"1436":1}}],["assemblyprovider",{"3":{"1286":1,"1369":2,"1396":1}}],["assemblyqualifiedname",{"3":{"1259":1,"1286":1}}],["assemblyinfo",{"2":{"1497":1},"3":{"1209":1,"1497":1}}],["assemblyreference",{"2":{"1319":1},"3":{"1199":16,"1203":16,"1207":48,"1311":14,"1313":1,"1319":4,"1323":46,"1341":3,"1350":12,"1354":2,"1359":7,"1369":11,"1377":2,"1380":8,"1396":36,"1404":2,"1415":46,"1436":1,"1496":3}}],["assembly",{"0":{"1199":1,"1206":1,"1319":1},"2":{"1266":1,"1319":1,"1773":1,"2079":2},"3":{"0":8,"5":1,"24":4,"41":1,"54":1,"59":2,"63":1,"76":2,"80":2,"81":3,"128":1,"133":1,"135":2,"166":1,"290":1,"305":1,"408":1,"451":1,"454":1,"549":1,"564":3,"571":1,"583":9,"585":6,"586":1,"607":1,"609":4,"633":2,"640":1,"648":1,"649":3,"651":2,"684":1,"698":1,"699":1,"725":2,"726":1,"782":1,"844":1,"848":2,"849":4,"922":1,"939":2,"940":1,"954":1,"962":1,"963":1,"971":1,"972":1,"974":1,"980":2,"982":1,"1004":1,"1018":1,"1034":3,"1042":1,"1050":1,"1052":1,"1067":1,"1074":1,"1091":1,"1118":1,"1161":3,"1162":1,"1168":1,"1170":1,"1175":1,"1193":1,"1196":1,"1199":1,"1202":1,"1203":2,"1206":1,"1207":1,"1208":3,"1212":2,"1213":1,"1229":1,"1233":2,"1237":5,"1247":2,"1250":2,"1256":1,"1259":13,"1262":2,"1263":1,"1266":1,"1270":8,"1271":7,"1273":2,"1275":1,"1276":1,"1279":5,"1280":4,"1286":86,"1300":32,"1301":1,"1304":1,"1308":1,"1309":15,"1310":1,"1311":42,"1312":2,"1313":1,"1314":1,"1315":3,"1316":4,"1318":1,"1319":6,"1323":94,"1324":37,"1326":1,"1339":15,"1341":4,"1348":1,"1350":20,"1351":1,"1352":1,"1354":1,"1359":60,"1367":1,"1369":22,"1380":28,"1395":28,"1396":69,"1402":5,"1404":1,"1415":86,"1416":9,"1417":1,"1427":1,"1431":8,"1434":1,"1435":3,"1436":409,"1437":3,"1438":10,"1441":1,"1444":1,"1447":1,"1465":1,"1476":1,"1480":1,"1487":2,"1488":1,"1489":11,"1490":1,"1491":1,"1492":2,"1494":1,"1496":5,"1503":1,"1526":3,"1553":1,"1577":3,"1582":1,"1591":4,"1600":1,"1614":1,"1627":1,"1648":1,"1651":3,"1653":1,"1654":2,"1671":1,"1684":3,"1693":1,"1701":1,"1719":2,"1727":1,"1728":2,"1729":1,"1761":1,"1773":1,"1781":1,"1810":2,"1830":3,"1851":1,"1857":1,"1860":1,"1881":3,"1882":1,"1883":2,"1884":2,"1885":4,"1891":1,"1929":1,"1956":1,"2017":1,"2042":2,"2044":2,"2047":1,"2049":2,"2050":1,"2079":2,"2097":1,"2099":2,"2105":1,"2106":2,"2108":1,"2161":1,"2180":1,"2189":2,"2190":1}}],["assetcachecontrol",{"3":{"1359":1}}],["assetid",{"3":{"0":1,"1116":1,"1357":1,"1467":2,"1631":2}}],["assets",{"3":{"0":5,"186":1,"1116":6,"1117":2,"1300":1,"1311":2,"1318":1,"1324":5,"1342":1,"1346":2,"1347":1,"1348":2,"1350":14,"1357":2,"1359":14,"1362":1,"1369":2,"1380":1,"1389":1,"1393":1,"1395":2,"1416":4,"1434":1,"1436":2,"1437":1,"1438":1,"1459":1,"1467":4,"1479":4,"1480":5,"1482":1,"1599":1,"1631":3,"1640":2,"1666":1,"2112":1,"2129":1,"2152":1}}],["assetlinkspath",{"3":{"1311":1}}],["assetlinks",{"2":{"418":1,"419":1,"424":1,"2123":1},"3":{"0":1,"418":1,"419":1,"420":1,"424":1,"1212":1,"1311":2,"1416":2,"1481":1,"2123":1}}],["asset",{"3":{"0":3,"57":1,"59":1,"189":1,"217":1,"424":1,"426":1,"534":1,"536":1,"681":1,"683":1,"861":1,"945":1,"954":1,"1006":1,"1116":7,"1117":1,"1120":2,"1124":1,"1126":1,"1285":1,"1286":1,"1300":3,"1311":4,"1324":4,"1342":2,"1344":1,"1346":1,"1348":1,"1350":16,"1352":1,"1354":1,"1357":1,"1359":60,"1362":1,"1369":3,"1380":3,"1389":2,"1395":23,"1417":2,"1436":1,"1438":1,"1467":2,"1471":1,"1496":4,"1560":1,"1586":1,"1591":1,"1631":1,"1640":4,"1666":1,"1698":1,"2170":1}}],["as",{"0":{"576":1,"1250":1,"1253":1,"1274":1,"1335":1,"1344":1,"1357":2,"1378":1,"1389":1,"1433":1,"1734":1,"1871":2,"1895":1,"2046":1,"2058":1,"2102":1,"2166":1},"1":{"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"542":1,"543":1,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"550":1,"551":1,"552":1,"561":1,"562":1,"563":1,"564":1,"565":1,"566":1,"567":1,"568":1,"569":1,"570":1,"571":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"578":1,"579":1,"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"613":1,"614":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1,"623":1,"624":1,"625":1,"626":1,"627":1,"628":1,"629":1,"630":1,"654":1,"655":1,"656":1,"657":1,"658":1,"659":1,"660":1,"661":1,"722":1,"723":1,"724":1,"725":1,"726":1,"727":1,"728":1,"729":1,"730":1,"731":1,"732":1,"733":1,"734":1,"735":1,"736":1,"737":1,"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1,"763":1,"764":1,"765":1,"766":1,"767":1,"768":1,"769":1,"770":1,"858":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"865":1,"951":1,"952":1,"953":1,"954":1,"955":1,"956":1,"957":1,"958":1,"959":1,"960":1,"961":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1,"969":1,"970":1,"971":1,"972":1,"973":1,"974":1,"975":1,"976":1,"977":1,"978":1,"979":1,"980":1,"981":1,"982":1,"983":1,"984":1,"1001":1,"1002":1,"1003":1,"1004":1,"1005":1,"1006":1,"1007":1,"1008":1,"1031":1,"1032":1,"1033":1,"1034":1,"1035":1,"1036":1,"1037":1,"1038":1,"1047":1,"1048":1,"1049":1,"1050":1,"1051":1,"1052":1,"1053":1,"1054":1,"1055":1,"1056":2,"1057":2,"1058":2,"1059":2,"1060":2,"1061":2,"1062":2,"1063":2,"1064":1,"1065":1,"1066":1,"1067":1,"1068":1,"1069":1,"1070":1,"1071":1,"1158":1,"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1,"1462":1,"1463":1,"1464":1,"1465":1,"1466":1,"1467":1,"1468":1,"1469":1,"1470":1,"1931":1,"1932":1,"1933":1,"1934":1,"1935":1,"1936":1,"1937":1,"1938":1,"1939":1,"1940":1,"1941":1,"2072":1,"2073":1,"2074":1,"2075":1,"2076":1,"2077":1,"2078":1,"2079":1,"2080":1,"2081":1,"2082":1},"3":{"0":165,"5":1,"11":1,"12":1,"15":1,"17":1,"18":2,"19":1,"24":6,"26":3,"27":1,"31":2,"39":2,"41":1,"47":1,"53":1,"57":3,"58":2,"59":1,"66":2,"68":1,"71":2,"72":2,"73":2,"74":2,"76":1,"77":1,"79":1,"81":2,"86":1,"87":1,"91":1,"92":1,"93":2,"94":1,"95":5,"96":3,"97":1,"98":3,"99":1,"100":2,"101":2,"103":1,"104":1,"107":2,"109":15,"111":1,"115":3,"120":1,"121":3,"122":2,"123":1,"126":3,"127":1,"128":2,"129":1,"130":1,"132":1,"135":11,"136":5,"137":4,"138":4,"139":5,"140":3,"141":1,"142":3,"145":7,"147":2,"155":3,"157":6,"159":1,"160":5,"161":2,"164":1,"167":1,"168":1,"169":1,"170":1,"171":2,"173":1,"174":1,"175":1,"177":1,"178":1,"180":2,"181":2,"186":8,"188":4,"189":1,"195":2,"197":1,"198":1,"200":4,"201":2,"202":6,"203":1,"206":1,"207":1,"209":1,"214":6,"215":1,"216":1,"219":1,"223":1,"225":2,"226":2,"230":6,"231":3,"233":4,"234":3,"235":6,"237":3,"243":8,"244":4,"245":8,"247":1,"248":2,"249":3,"250":1,"252":1,"253":1,"254":2,"255":2,"256":1,"257":2,"258":4,"259":4,"260":2,"264":1,"265":15,"267":2,"268":3,"273":4,"275":1,"279":1,"281":2,"282":1,"283":2,"285":2,"286":1,"290":3,"291":1,"295":1,"296":2,"299":1,"303":8,"304":1,"305":4,"306":1,"308":1,"309":1,"310":2,"313":1,"314":2,"318":12,"319":1,"320":2,"321":3,"322":2,"325":3,"326":2,"329":2,"335":2,"336":1,"337":1,"341":10,"344":1,"345":3,"348":1,"349":1,"350":6,"351":2,"352":1,"353":5,"354":1,"358":3,"359":7,"360":3,"361":2,"362":2,"363":1,"365":3,"366":2,"369":4,"370":2,"371":1,"373":2,"374":2,"375":2,"376":1,"379":1,"381":1,"382":2,"383":1,"384":1,"388":2,"390":4,"392":2,"395":5,"397":5,"399":1,"401":4,"403":1,"404":3,"405":1,"406":2,"407":1,"408":1,"409":5,"411":2,"413":1,"415":3,"418":4,"420":1,"422":2,"423":3,"424":1,"425":2,"426":1,"427":2,"428":2,"434":2,"438":2,"440":2,"442":1,"443":2,"444":1,"447":1,"448":2,"451":1,"453":1,"454":2,"459":6,"461":1,"463":2,"464":1,"466":1,"469":2,"470":2,"471":1,"474":2,"476":1,"477":2,"478":1,"481":2,"484":1,"485":1,"486":3,"487":2,"488":3,"489":3,"490":7,"491":5,"492":5,"493":4,"494":3,"495":2,"497":4,"499":2,"500":1,"501":1,"502":1,"507":3,"512":1,"513":1,"514":2,"516":2,"518":4,"522":2,"523":2,"524":3,"526":2,"528":2,"530":1,"531":1,"534":3,"535":2,"536":8,"537":2,"538":2,"539":3,"540":3,"541":1,"542":1,"543":2,"544":1,"545":4,"547":4,"548":2,"549":10,"550":5,"551":3,"552":1,"555":1,"556":3,"561":1,"562":1,"563":1,"564":6,"565":1,"566":1,"569":1,"570":1,"572":2,"573":4,"575":2,"578":2,"579":1,"582":4,"583":7,"584":2,"585":7,"586":1,"587":1,"591":3,"592":3,"593":1,"597":1,"598":2,"599":9,"600":4,"601":4,"602":3,"604":1,"606":1,"607":6,"608":2,"609":9,"610":2,"611":1,"612":3,"613":1,"615":1,"617":2,"618":3,"619":3,"620":3,"622":1,"623":1,"624":3,"625":1,"626":7,"627":2,"629":1,"631":1,"632":1,"633":6,"634":2,"635":2,"638":2,"640":1,"642":1,"648":1,"649":3,"653":1,"654":1,"655":1,"656":2,"657":9,"658":1,"660":1,"661":1,"665":2,"667":1,"669":1,"670":1,"674":2,"676":4,"682":5,"683":3,"684":2,"688":2,"689":1,"690":3,"691":3,"692":7,"693":1,"694":1,"698":8,"699":2,"702":5,"703":1,"706":1,"707":7,"709":1,"711":1,"715":3,"717":1,"720":3,"722":1,"724":2,"725":10,"727":2,"728":2,"729":1,"730":1,"732":3,"733":3,"734":1,"735":3,"736":1,"737":1,"738":1,"740":1,"741":7,"742":3,"743":6,"744":1,"747":4,"748":4,"749":4,"750":1,"751":1,"755":1,"757":7,"758":2,"761":1,"762":1,"763":1,"764":2,"765":2,"766":2,"768":1,"769":1,"773":3,"774":4,"776":1,"778":1,"782":3,"783":1,"784":4,"785":1,"789":3,"790":10,"791":2,"794":1,"798":1,"799":1,"801":2,"803":2,"804":2,"808":1,"809":2,"810":4,"813":2,"814":1,"815":2,"817":1,"819":5,"820":1,"825":5,"826":1,"827":16,"828":1,"829":4,"831":2,"832":3,"833":1,"834":1,"836":1,"837":7,"838":7,"839":4,"840":2,"842":3,"844":1,"845":3,"846":5,"849":1,"850":1,"854":3,"857":2,"858":1,"859":1,"860":2,"861":7,"863":3,"864":3,"867":1,"868":2,"869":2,"870":5,"871":1,"872":3,"873":3,"875":1,"876":1,"877":1,"879":2,"880":3,"881":10,"882":1,"883":1,"884":2,"888":3,"889":6,"890":2,"892":1,"893":2,"896":1,"897":3,"903":1,"904":4,"905":11,"906":2,"907":5,"908":1,"909":1,"912":3,"914":2,"915":1,"920":1,"922":3,"923":3,"926":10,"927":1,"930":1,"931":1,"933":2,"937":1,"938":2,"939":1,"946":2,"948":3,"951":1,"953":5,"954":2,"955":4,"956":1,"961":1,"964":2,"965":1,"966":3,"968":3,"969":1,"971":1,"972":2,"973":2,"974":2,"975":2,"976":1,"977":1,"979":4,"980":8,"981":2,"982":1,"983":1,"986":1,"987":2,"988":4,"989":1,"990":1,"992":1,"994":2,"995":1,"996":8,"999":1,"1000":1,"1001":1,"1003":1,"1004":4,"1005":1,"1006":1,"1010":1,"1012":6,"1013":1,"1014":4,"1016":1,"1017":3,"1018":8,"1019":2,"1020":1,"1021":1,"1022":1,"1026":2,"1028":1,"1031":1,"1032":2,"1033":2,"1034":3,"1035":1,"1036":3,"1037":1,"1041":2,"1042":4,"1044":1,"1046":1,"1047":1,"1050":10,"1051":6,"1052":4,"1055":1,"1056":2,"1057":1,"1058":1,"1059":7,"1061":2,"1062":1,"1064":1,"1065":4,"1066":2,"1067":8,"1068":3,"1069":2,"1070":1,"1071":1,"1073":2,"1074":2,"1075":2,"1076":2,"1082":1,"1083":2,"1084":1,"1089":2,"1090":1,"1091":11,"1092":2,"1095":1,"1099":1,"1100":4,"1101":1,"1102":2,"1108":4,"1109":1,"1110":1,"1115":2,"1116":11,"1117":2,"1118":2,"1119":2,"1123":2,"1124":6,"1125":1,"1126":1,"1127":1,"1132":2,"1133":4,"1139":1,"1140":3,"1142":4,"1143":1,"1149":1,"1151":1,"1153":1,"1155":2,"1158":1,"1160":1,"1161":7,"1163":1,"1164":1,"1168":6,"1169":1,"1173":1,"1175":3,"1176":1,"1178":2,"1179":1,"1184":6,"1185":2,"1186":2,"1187":1,"1188":2,"1189":1,"1190":3,"1191":1,"1192":1,"1193":1,"1196":2,"1201":1,"1209":1,"1211":1,"1212":50,"1216":2,"1217":1,"1218":1,"1219":1,"1220":2,"1225":2,"1228":1,"1229":38,"1231":6,"1232":3,"1233":4,"1234":4,"1235":1,"1236":2,"1237":76,"1239":7,"1240":1,"1241":4,"1242":2,"1243":5,"1244":3,"1245":1,"1247":112,"1248":1,"1249":2,"1251":1,"1252":1,"1253":4,"1254":1,"1255":3,"1256":3,"1257":1,"1258":1,"1259":95,"1260":1,"1262":1,"1263":9,"1264":1,"1265":5,"1266":2,"1267":2,"1268":3,"1269":4,"1270":175,"1271":31,"1272":2,"1273":8,"1274":4,"1275":4,"1276":9,"1277":3,"1278":6,"1279":1,"1281":6,"1282":3,"1283":4,"1284":2,"1286":453,"1287":5,"1288":2,"1289":4,"1290":8,"1291":1,"1293":5,"1294":1,"1295":1,"1296":2,"1297":6,"1298":1,"1299":2,"1300":362,"1301":59,"1302":1,"1304":6,"1305":2,"1306":1,"1307":2,"1308":3,"1309":131,"1310":29,"1311":254,"1312":41,"1313":3,"1315":5,"1316":4,"1317":2,"1318":12,"1320":6,"1322":1,"1323":264,"1324":502,"1325":2,"1326":4,"1327":1,"1328":5,"1329":1,"1332":7,"1333":6,"1334":4,"1335":2,"1336":2,"1337":7,"1338":4,"1339":212,"1342":8,"1343":8,"1344":3,"1347":6,"1348":1,"1349":6,"1350":230,"1351":2,"1352":7,"1353":7,"1354":3,"1355":3,"1356":2,"1357":7,"1358":10,"1359":811,"1362":4,"1363":1,"1364":2,"1365":3,"1366":5,"1368":5,"1369":57,"1370":1,"1371":1,"1372":1,"1373":2,"1374":1,"1375":3,"1377":2,"1378":3,"1379":6,"1380":103,"1381":1,"1382":3,"1383":2,"1384":2,"1387":1,"1389":5,"1390":3,"1391":6,"1392":2,"1393":2,"1394":1,"1395":434,"1396":484,"1397":2,"1398":2,"1399":4,"1400":5,"1401":1,"1402":145,"1403":1,"1404":1,"1405":2,"1406":3,"1407":4,"1408":4,"1410":1,"1411":3,"1412":3,"1413":2,"1414":3,"1415":248,"1416":49,"1417":203,"1419":1,"1420":1,"1421":6,"1423":2,"1424":2,"1425":4,"1426":1,"1427":56,"1428":1,"1429":1,"1430":6,"1431":12,"1432":5,"1433":10,"1434":1,"1435":4,"1436":650,"1437":3,"1438":34,"1441":13,"1442":7,"1443":4,"1444":5,"1445":3,"1446":1,"1447":3,"1449":1,"1450":4,"1452":1,"1453":7,"1454":5,"1455":30,"1456":6,"1457":4,"1458":8,"1459":10,"1460":4,"1461":8,"1462":4,"1463":1,"1465":12,"1466":2,"1467":77,"1468":1,"1469":2,"1470":5,"1472":4,"1473":6,"1474":12,"1475":1,"1476":13,"1477":3,"1478":4,"1479":3,"1480":2,"1481":2,"1482":2,"1484":1,"1485":3,"1486":3,"1487":3,"1488":19,"1489":10,"1490":5,"1491":1,"1492":23,"1494":2,"1496":33,"1498":1,"1500":6,"1503":2,"1508":2,"1509":3,"1513":1,"1517":2,"1521":1,"1522":1,"1523":1,"1524":5,"1525":1,"1526":24,"1527":2,"1529":1,"1531":3,"1533":1,"1534":6,"1535":1,"1537":1,"1538":1,"1543":1,"1545":1,"1547":2,"1551":2,"1552":1,"1553":3,"1554":2,"1558":2,"1563":1,"1565":1,"1567":1,"1569":1,"1570":2,"1571":4,"1572":1,"1573":1,"1574":1,"1575":3,"1576":2,"1577":33,"1580":1,"1582":2,"1583":2,"1584":1,"1585":7,"1586":3,"1587":1,"1588":1,"1589":3,"1591":11,"1594":2,"1595":3,"1596":8,"1597":1,"1598":3,"1599":5,"1600":2,"1601":1,"1605":1,"1610":1,"1611":6,"1615":1,"1620":1,"1626":2,"1627":4,"1628":1,"1630":5,"1631":25,"1632":5,"1633":1,"1634":2,"1635":1,"1637":4,"1638":5,"1639":20,"1640":8,"1641":21,"1642":1,"1646":2,"1648":3,"1651":8,"1653":2,"1654":3,"1656":6,"1659":1,"1660":1,"1661":1,"1662":3,"1663":1,"1664":10,"1665":3,"1666":3,"1667":3,"1668":4,"1669":1,"1670":5,"1673":5,"1674":2,"1675":3,"1676":1,"1677":2,"1681":1,"1682":1,"1684":1,"1685":8,"1686":10,"1687":1,"1689":2,"1692":2,"1693":2,"1699":2,"1700":1,"1701":2,"1702":5,"1706":1,"1707":2,"1709":1,"1710":1,"1711":1,"1717":1,"1718":1,"1720":2,"1722":1,"1723":3,"1724":1,"1726":1,"1727":5,"1728":4,"1730":1,"1732":2,"1735":1,"1737":1,"1739":1,"1742":1,"1744":1,"1745":1,"1748":5,"1749":7,"1750":1,"1755":1,"1756":1,"1760":2,"1761":1,"1762":1,"1763":1,"1764":4,"1765":9,"1767":8,"1768":2,"1770":1,"1771":1,"1774":1,"1776":1,"1779":1,"1780":1,"1781":1,"1782":1,"1784":4,"1786":1,"1790":2,"1797":1,"1799":3,"1802":3,"1803":1,"1804":2,"1805":5,"1806":2,"1807":3,"1810":6,"1811":1,"1812":1,"1813":2,"1814":2,"1815":7,"1816":1,"1821":2,"1822":1,"1824":1,"1825":3,"1826":2,"1827":2,"1828":1,"1829":1,"1830":1,"1831":1,"1832":1,"1833":2,"1834":3,"1836":2,"1839":1,"1840":1,"1844":1,"1846":1,"1851":6,"1853":2,"1855":1,"1856":2,"1857":2,"1860":2,"1861":1,"1865":2,"1866":1,"1868":4,"1869":1,"1871":3,"1872":1,"1873":1,"1875":1,"1876":1,"1877":6,"1878":2,"1879":1,"1881":1,"1882":3,"1883":5,"1884":2,"1885":1,"1888":1,"1889":2,"1892":1,"1894":1,"1897":1,"1898":5,"1899":1,"1902":4,"1903":3,"1904":1,"1905":1,"1907":1,"1908":9,"1909":3,"1910":8,"1911":4,"1912":1,"1916":3,"1919":4,"1920":1,"1921":1,"1922":2,"1923":5,"1924":2,"1926":1,"1927":4,"1928":1,"1930":3,"1931":3,"1932":1,"1933":1,"1934":2,"1936":1,"1937":1,"1939":1,"1940":2,"1941":5,"1942":1,"1943":1,"1944":2,"1947":2,"1948":2,"1949":2,"1950":3,"1952":1,"1954":3,"1955":2,"1956":1,"1958":1,"1962":1,"1964":5,"1965":1,"1966":1,"1968":3,"1970":2,"1971":5,"1972":2,"1974":1,"1975":1,"1976":1,"1977":2,"1978":2,"1979":3,"1980":2,"1982":5,"1983":1,"1984":3,"1985":2,"1986":1,"1988":3,"1989":3,"1990":1,"1994":1,"1995":8,"1996":2,"1997":4,"1998":8,"1999":1,"2000":4,"2001":11,"2002":2,"2003":1,"2004":1,"2005":1,"2008":1,"2009":3,"2010":1,"2011":2,"2012":3,"2013":2,"2014":1,"2015":1,"2016":1,"2017":1,"2019":1,"2021":3,"2023":1,"2025":3,"2026":1,"2029":1,"2033":3,"2034":1,"2035":8,"2037":1,"2038":5,"2041":1,"2042":2,"2044":5,"2045":3,"2047":3,"2048":5,"2049":4,"2050":2,"2052":2,"2054":1,"2056":3,"2057":2,"2058":4,"2059":1,"2060":3,"2061":1,"2064":1,"2065":5,"2066":1,"2067":2,"2068":3,"2069":2,"2070":1,"2071":2,"2072":2,"2076":2,"2077":3,"2079":1,"2080":2,"2081":1,"2082":4,"2083":2,"2085":3,"2087":6,"2088":3,"2091":1,"2092":1,"2093":1,"2098":2,"2102":2,"2103":1,"2106":1,"2107":2,"2108":1,"2109":3,"2110":3,"2113":1,"2114":1,"2117":1,"2121":1,"2123":1,"2124":2,"2126":2,"2127":1,"2128":8,"2129":1,"2130":4,"2131":1,"2132":1,"2137":4,"2138":1,"2140":7,"2141":2,"2142":1,"2143":1,"2144":3,"2145":1,"2147":2,"2148":2,"2149":1,"2150":1,"2151":2,"2152":4,"2153":1,"2154":1,"2155":2,"2156":1,"2158":9,"2159":2,"2160":5,"2161":1,"2162":2,"2163":6,"2164":3,"2165":1,"2166":2,"2167":4,"2168":5,"2169":3,"2170":6,"2171":5,"2172":1,"2173":3,"2174":4,"2176":1,"2177":4,"2179":3,"2180":3,"2181":4,"2182":4,"2184":1,"2185":4,"2187":3,"2188":1,"2191":4,"2192":5,"2194":5,"2195":1,"2196":1,"2197":1,"2198":2,"2200":1,"2201":4,"2204":3,"2205":5,"2206":1,"2210":1,"2212":1,"2216":3,"2217":2,"2221":1,"2222":2,"2228":2,"2231":1,"2232":3,"2234":53,"2235":2,"2236":1,"2241":3}}],["atroot",{"3":{"1324":3,"1417":2}}],["atom",{"3":{"1311":1}}],["atomicity",{"3":{"120":1,"201":1,"245":1,"248":1,"249":1,"279":1,"990":1,"1042":1,"1043":1,"1044":1,"1251":1,"1259":3,"1270":3,"1275":1,"1301":2,"1309":2,"1318":1,"1324":1,"1350":1,"1359":3,"1380":3,"1406":1,"1415":1,"1572":1,"1822":1,"1835":1,"1852":1,"1915":1,"2094":1,"2098":1,"2187":1}}],["atomically",{"3":{"18":1,"193":1,"341":1,"342":1,"499":1,"1043":1,"1259":3,"1286":1,"1290":1,"1300":1,"1309":1,"1323":2,"1339":1,"1349":1,"1350":1,"1359":1,"1374":1,"1380":2,"1396":7,"1415":2,"1417":2,"1438":1,"1455":1,"1467":1,"1837":1,"1872":1,"1877":1,"1890":1,"2216":1}}],["atomic",{"3":{"0":1,"20":1,"39":1,"43":1,"245":1,"253":1,"279":1,"285":1,"286":3,"497":1,"524":1,"534":1,"535":1,"536":1,"540":1,"708":1,"905":1,"996":1,"1251":1,"1259":1,"1270":3,"1274":1,"1286":3,"1290":1,"1292":1,"1300":4,"1301":6,"1309":1,"1323":5,"1339":1,"1352":1,"1359":7,"1380":4,"1396":4,"1399":1,"1402":1,"1415":4,"1436":1,"1438":1,"1496":1,"1526":1,"1543":1,"1577":2,"1590":1,"1591":2,"1597":1,"1600":2,"1667":2,"1668":1,"1749":2,"1765":3,"1823":1,"1836":1,"1841":1,"1846":1,"1904":1,"2002":3,"2163":1,"2166":2,"2169":1,"2171":1,"2184":1}}],["atop",{"3":{"1212":1}}],["atl",{"3":{"2243":1}}],["atlcloudconf",{"3":{"2242":1}}],["atlanta",{"0":{"2242":1},"1":{"1628":1,"1629":1,"1630":1,"1631":1,"1632":1,"1633":1,"1634":1,"1635":1,"1636":1,"1637":1,"1638":1,"1639":1,"1640":1,"1641":1},"3":{"86":1,"1211":1,"1238":1,"1340":1,"1347":1,"1350":2,"1359":3,"1364":2,"1369":2,"1395":3,"1416":2,"1436":1,"1455":1,"1523":1,"1628":1,"1629":1,"1637":1,"1785":1,"2005":1,"2112":1,"2214":1,"2216":2,"2218":4,"2223":2,"2230":1,"2240":3,"2241":4,"2242":4,"2243":4,"2246":1,"2247":1}}],["atldevcon",{"0":{"1478":1},"2":{"45":1,"1451":1,"1463":1,"1471":1,"1478":2,"1481":1,"1482":1,"2035":1,"2037":1},"3":{"0":4,"45":1,"47":2,"418":1,"420":1,"426":1,"428":1,"429":1,"1286":1,"1300":2,"1311":1,"1359":2,"1395":2,"1416":4,"1441":2,"1446":1,"1451":1,"1463":1,"1466":1,"1467":7,"1469":2,"1470":2,"1471":1,"1473":11,"1474":5,"1475":2,"1478":12,"1481":3,"1482":4,"1483":2,"1484":2,"1976":1,"2035":1,"2037":2,"2242":1}}],["attheceiling",{"3":{"1436":8}}],["attractive",{"3":{"1999":1}}],["attr",{"3":{"1286":1}}],["attributing",{"3":{"1438":1,"1489":1}}],["attributions",{"3":{"1496":2}}],["attributiontags",{"2":{"2179":1},"3":{"1427":1,"2179":1}}],["attribution",{"0":{"1679":1},"3":{"348":2,"418":1,"963":1,"1012":1,"1017":1,"1339":1,"1396":1,"1425":1,"1427":1,"1436":3,"1465":1,"1467":1,"1476":1,"1496":1,"1526":1,"1568":1,"1575":3,"1577":2,"1585":2,"1676":1,"1679":1,"1680":1,"2173":1,"2179":1}}],["attributable",{"3":{"26":1,"175":1,"176":1,"178":1,"827":1,"829":1,"898":1,"1019":1,"1237":1,"1311":1,"1380":1,"1436":1,"1455":1,"1465":1,"1467":3,"1553":1,"1568":1,"1591":1,"1678":1,"2000":1,"2001":1,"2002":1,"2003":2,"2025":1,"2179":1,"2182":1}}],["attributed",{"3":{"175":1,"423":1,"741":1,"799":1,"1010":1,"1161":2,"1279":1,"1286":3,"1309":1,"1337":1,"1339":2,"1359":7,"1396":1,"1415":1,"1425":2,"1427":1,"1436":2,"1496":1,"2179":1}}],["attributeusageattribute",{"3":{"1300":1}}],["attributeusage",{"2":{"160":1,"175":1},"3":{"160":1,"175":1,"1237":3,"1300":2,"1310":2,"1311":3,"1312":1,"1323":2,"1324":2,"2001":1}}],["attributetargets",{"2":{"160":1,"1995":2},"3":{"160":1,"1237":3,"1300":2,"1310":2,"1311":4,"1312":3,"1323":2,"1324":2,"1995":2}}],["attributes",{"0":{"1321":1},"2":{"39":1},"3":{"24":1,"39":1,"135":1,"189":1,"320":1,"350":1,"418":1,"446":1,"448":2,"450":3,"554":1,"556":1,"651":1,"726":1,"814":1,"841":1,"964":1,"965":1,"980":1,"992":1,"1018":1,"1118":2,"1133":1,"1175":1,"1192":2,"1196":1,"1202":2,"1203":6,"1207":18,"1212":1,"1214":1,"1230":2,"1233":1,"1236":3,"1237":7,"1247":1,"1259":3,"1270":1,"1271":1,"1279":1,"1286":9,"1298":1,"1300":11,"1309":3,"1310":4,"1311":18,"1313":1,"1321":2,"1322":1,"1323":1,"1324":10,"1339":2,"1350":7,"1358":1,"1359":5,"1369":2,"1372":1,"1376":1,"1380":9,"1395":8,"1396":3,"1402":2,"1406":1,"1415":7,"1416":2,"1433":1,"1436":32,"1438":2,"1496":1,"1526":1,"1540":1,"1577":2,"1600":1,"1630":3,"1632":1,"1641":1,"1662":1,"1667":1,"1679":1,"1685":1,"1761":1,"1764":1,"1850":1,"1957":1,"1960":1,"1961":1,"1978":1,"1997":3,"2003":1,"2133":3,"2134":3,"2135":1}}],["attribute",{"0":{"1908":1,"1962":1},"1":{"1854":1,"1855":1,"1856":1,"1857":1,"1858":1,"1859":1,"1860":1,"1861":1,"1862":1,"1906":1,"1907":1,"1908":1,"1909":1,"1910":1,"1911":1,"1912":1},"3":{"0":3,"10":2,"24":2,"39":1,"54":2,"121":1,"124":1,"135":1,"136":1,"155":1,"160":2,"166":2,"167":2,"175":2,"185":1,"188":1,"189":4,"257":1,"273":1,"305":1,"318":1,"341":2,"343":1,"418":1,"422":2,"423":1,"556":1,"659":1,"718":1,"725":1,"789":1,"819":1,"849":1,"906":1,"964":2,"965":1,"966":1,"982":1,"1050":4,"1052":1,"1083":1,"1103":1,"1116":2,"1118":1,"1126":1,"1212":3,"1229":3,"1233":1,"1235":1,"1236":2,"1237":31,"1247":3,"1250":1,"1259":9,"1270":3,"1271":1,"1280":1,"1281":2,"1282":3,"1286":24,"1289":1,"1292":1,"1297":1,"1300":36,"1309":10,"1310":7,"1311":28,"1312":10,"1318":1,"1321":1,"1323":27,"1324":21,"1333":1,"1339":5,"1343":1,"1347":1,"1350":20,"1357":2,"1359":42,"1360":1,"1361":1,"1369":2,"1372":2,"1373":2,"1380":25,"1388":1,"1391":1,"1395":14,"1396":28,"1402":4,"1415":19,"1416":5,"1417":1,"1427":1,"1431":1,"1433":1,"1436":77,"1438":6,"1447":2,"1467":2,"1496":1,"1510":1,"1575":2,"1577":4,"1582":1,"1585":2,"1591":1,"1596":1,"1626":1,"1627":3,"1630":17,"1641":2,"1643":1,"1651":1,"1665":1,"1671":1,"1678":1,"1686":1,"1698":1,"1747":1,"1753":1,"1758":1,"1774":2,"1779":1,"1805":1,"1829":1,"1844":1,"1849":1,"1854":3,"1856":5,"1857":2,"1861":1,"1862":3,"1865":1,"1874":2,"1875":1,"1898":1,"1904":1,"1905":1,"1906":3,"1908":2,"1909":1,"1910":2,"1912":1,"1929":5,"1959":1,"1960":2,"1964":2,"1965":1,"1995":2,"1997":1,"2001":8,"2002":5,"2003":3,"2031":1,"2040":1,"2046":1,"2077":1,"2087":1,"2140":1,"2141":1,"2189":2,"2192":2,"2195":1,"2209":1,"2210":1,"2232":1,"2234":2}}],["attacked",{"3":{"1999":1,"2003":1}}],["attackers",{"3":{"1567":1}}],["attacker",{"3":{"31":1,"280":1,"283":5,"353":1,"373":1,"422":1,"427":1,"439":1,"853":1,"906":1,"1124":1,"1212":1,"1286":1,"1288":1,"1292":2,"1300":14,"1311":1,"1323":1,"1324":4,"1339":2,"1347":1,"1359":2,"1396":1,"1402":2,"1408":1,"1415":2,"1416":3,"1417":3,"1435":1,"1436":1,"1438":1,"1467":1,"1897":4,"1900":2,"1901":1,"1902":3,"1981":1,"2000":2,"2002":5,"2126":2,"2143":1}}],["attacks",{"3":{"1324":1,"1436":1}}],["attack",{"0":{"1897":1},"3":{"280":1,"332":1,"508":1,"528":1,"612":1,"1300":1,"1324":1,"1339":1,"1366":1,"1369":1,"1396":2,"1415":1,"1438":1,"1445":1,"1465":1,"1577":1,"1897":2,"1899":2,"1991":1}}],["attachable",{"3":{"1369":1}}],["attachobserverasync",{"3":{"1324":3}}],["attachtenantaccessor",{"3":{"1286":1}}],["attachscopeaccessors",{"3":{"1259":1,"1286":1}}],["attaching",{"3":{"0":1,"180":1,"351":1,"507":1,"827":1,"1184":1,"1212":1,"1259":1,"1278":1,"1286":1,"1300":1,"1311":1,"1324":2,"1339":1,"1359":4,"1395":1,"1415":1,"1438":1}}],["attachments",{"3":{"1117":1}}],["attachment",{"2":{"443":1},"3":{"0":2,"443":1,"725":2,"741":1,"881":1,"1116":2,"1286":3,"1300":1,"1311":2,"1339":1,"1359":1,"1395":1,"1436":1,"1438":1,"1441":1,"1631":1}}],["attachmmcaapplifecycle",{"3":{"0":1,"413":1,"1416":2,"1417":4}}],["attached",{"3":{"0":2,"81":1,"179":1,"180":1,"383":1,"397":1,"598":1,"619":1,"657":1,"797":1,"827":1,"871":1,"896":1,"897":1,"907":1,"915":1,"1050":1,"1051":1,"1092":1,"1184":1,"1223":1,"1229":3,"1259":1,"1281":1,"1286":5,"1297":1,"1300":6,"1311":4,"1323":4,"1324":12,"1339":4,"1350":3,"1359":6,"1369":6,"1380":1,"1395":2,"1396":3,"1400":1,"1402":3,"1415":4,"1416":2,"1417":6,"1436":4,"1438":1,"1465":1,"1467":1,"1479":1,"1488":2,"1944":1,"2003":1,"2034":1,"2065":1,"2123":1,"2182":1,"2195":1}}],["attaches",{"3":{"0":1,"26":1,"42":1,"243":1,"387":1,"402":1,"454":1,"506":1,"507":1,"521":1,"599":1,"640":2,"767":1,"833":1,"885":1,"1104":1,"1183":1,"1184":1,"1253":1,"1271":2,"1286":3,"1297":1,"1300":3,"1307":1,"1311":11,"1312":1,"1323":3,"1324":12,"1326":1,"1328":1,"1337":1,"1338":1,"1339":3,"1350":1,"1359":11,"1369":1,"1378":1,"1379":1,"1383":1,"1395":5,"1396":3,"1402":1,"1406":1,"1414":1,"1415":2,"1416":1,"1417":1,"1436":2,"1467":2,"1589":1,"1596":1,"1906":1,"1922":1,"1933":1,"1968":1,"1972":2,"1977":1,"2001":1,"2156":1}}],["attach",{"3":{"0":1,"166":1,"175":1,"352":1,"599":1,"644":1,"832":2,"883":1,"1271":3,"1286":1,"1300":1,"1311":5,"1324":6,"1326":1,"1327":1,"1339":6,"1350":1,"1359":3,"1380":3,"1395":1,"1402":1,"1414":1,"1415":2,"1416":1,"1417":1,"1765":1,"1950":1,"1978":1,"1979":1,"2144":1}}],["attention",{"3":{"757":1,"1270":1,"1324":2,"1350":1,"1417":1,"1455":1,"2177":1}}],["attend",{"3":{"1359":1,"1630":1,"1637":1,"1638":1,"1641":1}}],["attended",{"3":{"689":1,"691":1,"1117":1}}],["attendee+speaker",{"3":{"1641":1}}],["attendee→403",{"3":{"1611":1}}],["attendeelookup",{"3":{"1396":1}}],["attendeelookupservicetests",{"3":{"1199":1,"1207":4,"1396":3}}],["attendeelookupservice",{"3":{"1199":3,"1203":1,"1207":3,"1396":19}}],["attendeename",{"3":{"1396":1}}],["attendeenotificationrecipientprovidertests",{"2":{"1487":1},"3":{"1199":1,"1207":2,"1438":1,"1487":1}}],["attendeenotificationrecipientprovider",{"2":{"1304":1,"1933":1},"3":{"1199":4,"1203":1,"1207":2,"1304":2,"1309":9,"1415":2,"1438":1,"1933":1}}],["attendeeprofiletests",{"3":{"1199":1,"1207":2,"1491":1}}],["attendeeclaims",{"2":{"1617":1},"3":{"1617":1}}],["attendeeclaimstests",{"3":{"1199":1,"1207":2,"1611":1}}],["attendeecheckedinpointshandlertests",{"3":{"1199":1,"1207":2,"1396":1}}],["attendeecheckedinpointshandler",{"3":{"1199":2,"1203":1,"1207":2,"1259":1,"1396":16}}],["attendeecheckedin",{"2":{"692":1,"694":1},"3":{"195":2,"692":1,"694":1,"1199":13,"1203":1,"1207":2,"1237":2,"1396":15,"1436":5,"1438":3,"1467":1,"1631":2,"1639":2}}],["attendeeauthtests",{"3":{"1199":1,"1207":3,"1491":1}}],["attendeeaccessdeniedtests",{"3":{"1199":2,"1207":4}}],["attendeequestionanswertests",{"3":{"1199":1,"1207":2}}],["attendeequeryservicebase",{"2":{"1415":1},"3":{"1415":2}}],["attendeequeryserviceclient",{"2":{"1415":1},"3":{"1415":2}}],["attendeequeryservicetests",{"3":{"1199":1,"1207":2}}],["attendeequeryservicegrpcadapter",{"2":{"1413":1},"3":{"1199":2,"1203":1,"1207":2,"1413":2,"1415":10}}],["attendeequeryservice",{"2":{"1309":1,"1415":2},"3":{"1199":7,"1203":1,"1207":2,"1309":1,"1413":2,"1415":13}}],["attendeefeedbacktests",{"3":{"1199":1,"1207":2}}],["attendeebookmarkedgecasetests",{"3":{"1496":1}}],["attendeebookmarktests",{"2":{"1611":1},"3":{"1199":2,"1207":4,"1611":1}}],["attendeebadges",{"3":{"1396":1}}],["attendeebadgetests",{"3":{"1199":1,"1207":2,"1396":2,"1438":1}}],["attendeebadgeinvariants",{"3":{"1199":2,"1203":1,"1207":2,"1396":5}}],["attendeebadgeconfiguration",{"3":{"690":1,"1199":1,"1203":1,"1207":2,"1396":11}}],["attendeebadge",{"3":{"690":3,"1199":11,"1203":1,"1207":2,"1396":24,"1438":1}}],["attendeerow",{"3":{"1199":2,"1203":1,"1207":1,"1396":4}}],["attendee",{"0":{"1356":1,"1623":1,"1626":1},"2":{"1621":1,"1626":1},"3":{"0":1,"243":1,"325":1,"350":1,"387":1,"545":1,"585":1,"586":1,"681":2,"683":1,"684":1,"688":1,"689":3,"690":5,"691":2,"692":4,"725":1,"799":1,"831":1,"853":1,"1115":1,"1117":1,"1124":1,"1192":2,"1207":20,"1247":2,"1300":3,"1302":1,"1304":2,"1305":1,"1308":1,"1309":8,"1312":2,"1324":1,"1340":1,"1349":1,"1350":13,"1351":1,"1359":20,"1369":5,"1373":1,"1377":1,"1380":9,"1381":1,"1391":1,"1392":1,"1395":20,"1396":234,"1401":2,"1402":26,"1405":2,"1406":1,"1412":1,"1413":3,"1415":34,"1416":1,"1436":4,"1438":13,"1441":1,"1487":3,"1496":2,"1608":1,"1611":5,"1621":6,"1624":1,"1625":1,"1626":2,"1627":7,"1629":7,"1630":7,"1631":8,"1632":44,"1637":5,"1638":8,"1639":3,"1641":8,"1814":1,"1922":1,"1933":1,"1977":1,"1996":1,"2242":1}}],["attendeesgrpcservicetests",{"3":{"1199":1,"1207":2,"1438":1}}],["attendeesgrpcservice",{"3":{"1199":2,"1203":1,"1207":2,"1413":2,"1415":6}}],["attendeesummary",{"3":{"1199":8,"1203":1,"1207":1,"1396":10}}],["attendeeshareandexporttests",{"3":{"1199":1,"1207":2,"1438":1}}],["attendeesearchfield",{"3":{"1199":2,"1203":1,"1207":1,"1396":4}}],["attendeesearchpanel",{"3":{"556":2,"881":2,"1199":3,"1203":1,"1207":2,"1324":3,"1396":21}}],["attendees",{"3":{"0":1,"224":1,"688":1,"689":1,"690":1,"692":1,"831":1,"832":1,"1116":2,"1124":1,"1207":2,"1309":3,"1350":5,"1359":6,"1367":1,"1377":1,"1380":2,"1392":2,"1395":7,"1396":25,"1397":1,"1402":3,"1415":2,"1438":2,"1626":1,"1627":1,"1629":2,"1630":7,"1631":11,"1632":1,"1635":1,"1636":1,"1637":2,"1638":4,"1639":8,"1640":2,"1641":3,"2112":1,"2218":1,"2234":1,"2240":1,"2241":2,"2242":1,"2243":1}}],["attendancestatsdto",{"3":{"1199":9,"1203":1,"1207":2,"1396":16}}],["attendance",{"2":{"1396":1},"3":{"0":1,"186":1,"689":1,"1150":1,"1192":1,"1203":2,"1207":4,"1343":1,"1350":2,"1359":1,"1396":54,"1415":3,"1438":3,"1487":1,"1496":1,"1625":1,"1627":2,"1629":1,"1631":1}}],["attests",{"3":{"1396":2,"1415":1,"1454":1}}],["attest",{"3":{"374":1,"530":1,"1454":1,"1484":1}}],["attestation",{"2":{"374":1,"1454":1},"3":{"372":1,"374":3,"1454":2,"1577":2}}],["attestations",{"0":{"374":1},"2":{"374":1,"1454":1},"3":{"368":1,"374":1,"1454":1,"1576":1}}],["attested",{"3":{"372":1,"374":1,"1359":1}}],["attempting",{"3":{"1467":1,"1631":1,"1632":3,"1941":1}}],["attempttimeout",{"3":{"1339":4}}],["attemptlifetime",{"3":{"1324":1}}],["attemptacquirecore",{"3":{"1311":2}}],["attemptoutputcaching",{"3":{"1311":1}}],["attempted",{"3":{"21":1,"201":1,"397":1,"409":1,"757":1,"758":1,"1259":2,"1270":2,"1300":1,"1301":2,"1309":1,"1311":1,"1323":2,"1324":6,"1415":1,"1417":2,"1632":3,"2194":1}}],["attemptskey",{"3":{"1300":1,"2001":1}}],["attempts",{"3":{"19":1,"22":1,"23":2,"72":1,"73":1,"282":2,"757":1,"759":1,"827":1,"854":1,"880":1,"881":1,"883":1,"987":1,"988":1,"998":1,"1042":1,"1212":1,"1259":5,"1270":1,"1273":1,"1275":2,"1286":8,"1292":1,"1300":12,"1301":2,"1309":1,"1311":2,"1318":2,"1323":7,"1324":5,"1330":1,"1339":10,"1359":4,"1396":1,"1438":1,"1442":1,"1447":1,"1455":2,"1459":1,"1537":1,"1631":2,"1632":1,"1639":2,"1641":5,"1665":1,"1666":1,"1805":1,"1840":1,"1896":1,"1911":2,"2001":1,"2002":1,"2003":1,"2033":1,"2188":1,"2190":1,"2193":1}}],["attemptunitofworkkey",{"3":{"1359":1}}],["attemptunitofwork",{"2":{"523":1},"3":{"0":1,"523":1,"926":1,"1270":1,"1359":2}}],["attempt",{"2":{"407":1,"1330":1},"3":{"0":7,"19":2,"21":2,"22":1,"24":3,"70":1,"73":3,"100":1,"120":1,"159":1,"199":1,"201":1,"279":1,"281":1,"282":1,"284":1,"286":1,"343":1,"353":2,"397":1,"407":1,"409":1,"434":1,"539":1,"715":1,"727":1,"736":1,"760":1,"813":1,"818":1,"819":1,"821":1,"827":1,"833":2,"849":1,"854":2,"855":1,"881":6,"882":2,"883":1,"920":1,"926":3,"988":6,"990":1,"991":1,"992":1,"996":1,"1018":1,"1019":1,"1042":4,"1043":1,"1045":1,"1059":1,"1099":2,"1212":1,"1229":1,"1256":2,"1258":1,"1259":6,"1265":1,"1270":10,"1274":1,"1278":1,"1286":16,"1289":1,"1292":1,"1294":2,"1295":1,"1300":32,"1304":2,"1309":3,"1311":2,"1312":5,"1317":1,"1323":10,"1324":35,"1330":3,"1339":13,"1352":1,"1355":1,"1359":20,"1366":1,"1369":1,"1378":1,"1380":1,"1389":2,"1395":14,"1396":9,"1402":2,"1408":1,"1413":1,"1415":8,"1417":7,"1427":1,"1435":1,"1436":3,"1438":6,"1443":1,"1455":1,"1457":1,"1492":2,"1496":1,"1547":1,"1577":1,"1600":1,"1631":1,"1638":1,"1641":4,"1664":1,"1668":1,"1765":1,"1767":1,"1840":4,"1841":1,"1843":2,"1933":1,"1976":2,"1999":1,"2002":1,"2007":1,"2031":4,"2033":1,"2158":1,"2167":1,"2169":1,"2184":2,"2190":2,"2192":3,"2194":1,"2200":1}}],["at",{"0":{"1336":1,"1339":1,"1369":1,"1373":1,"1466":1,"1523":1,"1530":1,"1574":1,"1581":1,"1588":1,"1595":1,"1687":1,"1702":1,"1873":1,"1903":1,"1935":2,"2047":1,"2152":1,"2153":1,"2180":1},"1":{"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"356":1,"357":1,"358":1,"359":1,"360":1,"361":1,"362":1,"363":1,"364":1,"365":1,"366":1,"1009":1,"1010":1,"1011":1,"1012":1,"1013":1,"1014":1,"1023":1,"1024":1,"1025":1,"1026":1,"1027":1,"1028":1,"1029":1,"1030":1},"2":{"626":1},"3":{"0":116,"5":1,"6":2,"10":1,"15":2,"17":1,"19":10,"20":1,"21":1,"22":4,"23":2,"24":30,"25":2,"26":4,"27":21,"29":1,"31":5,"32":1,"34":4,"39":8,"41":1,"43":1,"46":2,"53":1,"54":1,"57":3,"58":1,"59":8,"60":1,"61":1,"62":3,"63":1,"66":2,"67":1,"68":1,"69":1,"70":1,"71":4,"72":7,"73":2,"74":1,"76":2,"80":2,"81":5,"85":1,"91":2,"92":1,"93":4,"94":2,"95":6,"96":1,"99":3,"100":3,"102":1,"103":2,"104":1,"107":1,"108":1,"109":31,"110":5,"111":6,"115":7,"117":1,"118":1,"119":1,"121":4,"122":21,"125":2,"126":4,"127":1,"128":1,"130":7,"131":1,"132":2,"133":2,"135":19,"136":3,"137":5,"138":5,"139":7,"140":2,"141":3,"142":6,"145":2,"146":1,"147":3,"148":2,"149":3,"150":10,"155":1,"156":2,"157":2,"158":1,"159":1,"160":6,"161":4,"162":1,"164":1,"166":8,"168":1,"170":10,"173":1,"175":3,"176":1,"177":2,"178":8,"179":8,"180":8,"184":1,"186":10,"189":6,"190":1,"191":1,"193":5,"194":3,"195":2,"198":2,"199":2,"200":8,"201":7,"202":7,"203":2,"206":1,"207":4,"208":1,"209":2,"212":1,"213":1,"214":2,"215":1,"216":1,"218":1,"219":4,"220":2,"224":2,"225":4,"226":2,"228":2,"230":10,"231":3,"234":1,"235":10,"237":3,"238":2,"241":5,"242":2,"243":11,"244":1,"245":3,"246":4,"250":2,"251":3,"252":2,"253":1,"254":4,"255":3,"256":11,"257":11,"258":8,"259":10,"260":7,"261":16,"265":10,"266":1,"273":1,"276":2,"279":1,"280":2,"282":1,"283":2,"284":3,"288":1,"290":4,"291":1,"295":2,"298":2,"299":1,"300":3,"303":2,"305":9,"306":1,"309":1,"310":3,"311":1,"312":3,"313":1,"314":6,"318":8,"319":1,"321":1,"325":4,"326":5,"328":1,"330":8,"331":2,"333":4,"334":1,"335":3,"336":1,"337":1,"341":5,"343":2,"346":1,"349":1,"350":7,"351":2,"352":5,"353":6,"354":2,"356":1,"358":1,"359":9,"360":3,"361":4,"362":1,"364":1,"365":2,"366":2,"368":1,"369":1,"371":1,"373":9,"375":1,"379":1,"380":2,"384":3,"386":1,"387":1,"388":1,"389":1,"390":13,"391":6,"392":1,"393":9,"395":9,"397":26,"398":1,"399":4,"400":6,"401":10,"402":4,"403":8,"405":2,"407":7,"408":3,"409":2,"412":2,"413":2,"414":1,"415":1,"416":1,"418":8,"420":3,"422":1,"423":10,"424":3,"425":5,"426":16,"427":4,"428":27,"429":16,"430":7,"433":1,"434":1,"435":2,"436":1,"441":1,"442":1,"443":1,"444":2,"448":7,"451":1,"453":1,"454":1,"457":1,"459":11,"460":1,"461":3,"463":16,"464":11,"465":5,"466":4,"468":4,"469":1,"470":1,"471":2,"472":1,"475":1,"476":3,"477":1,"478":2,"483":3,"484":1,"486":6,"487":6,"488":4,"489":6,"490":20,"491":16,"492":17,"493":12,"494":1,"495":4,"497":4,"499":11,"500":1,"501":2,"502":1,"506":1,"508":1,"511":1,"512":1,"513":1,"514":1,"516":1,"520":2,"522":15,"523":20,"524":10,"528":2,"529":1,"532":1,"534":1,"535":4,"536":9,"537":2,"538":6,"539":9,"540":4,"543":5,"545":17,"546":1,"547":1,"549":17,"550":1,"551":1,"552":13,"555":2,"556":7,"557":2,"559":1,"563":1,"564":8,"565":1,"568":1,"570":1,"571":1,"572":2,"574":1,"575":1,"576":1,"577":1,"579":1,"583":6,"585":5,"586":2,"587":1,"590":1,"591":8,"594":3,"595":1,"598":2,"599":10,"600":1,"601":5,"602":8,"603":6,"604":6,"605":1,"607":1,"608":4,"609":48,"611":2,"612":8,"613":2,"617":1,"618":17,"619":1,"620":1,"622":1,"625":1,"626":11,"627":2,"628":4,"629":1,"631":4,"633":8,"635":3,"636":2,"638":1,"640":26,"641":2,"642":2,"643":1,"644":1,"645":1,"648":1,"649":10,"651":1,"652":1,"656":2,"657":15,"658":3,"664":1,"665":13,"666":2,"667":1,"668":7,"673":3,"674":21,"675":3,"676":8,"678":1,"682":4,"683":1,"684":5,"689":1,"690":13,"691":3,"692":5,"693":1,"694":1,"696":3,"697":3,"698":14,"699":2,"700":3,"702":3,"703":2,"706":1,"707":2,"708":2,"709":4,"711":1,"713":1,"714":1,"715":6,"716":2,"717":4,"719":4,"720":1,"721":1,"724":1,"725":3,"728":1,"729":2,"732":4,"733":9,"735":1,"740":6,"741":16,"743":9,"744":3,"745":1,"749":10,"751":2,"752":2,"753":2,"757":8,"758":1,"760":5,"765":3,"766":7,"767":3,"768":2,"769":1,"773":1,"774":5,"776":1,"782":6,"789":5,"790":10,"791":2,"792":3,"793":6,"794":1,"795":1,"797":3,"798":1,"799":4,"800":3,"801":1,"803":2,"804":2,"805":1,"809":2,"810":5,"812":3,"814":1,"815":2,"818":2,"819":10,"820":1,"821":5,"822":2,"823":1,"825":2,"826":5,"827":43,"828":2,"829":4,"830":9,"831":5,"832":13,"833":3,"837":3,"838":12,"840":2,"844":1,"846":4,"847":2,"848":2,"849":3,"850":6,"853":4,"854":3,"855":1,"857":2,"860":2,"861":15,"862":1,"863":3,"865":1,"867":3,"869":1,"870":3,"871":2,"872":2,"873":2,"874":1,"875":3,"876":2,"881":18,"883":4,"884":2,"888":1,"889":6,"891":4,"893":1,"896":2,"897":17,"898":2,"900":1,"904":1,"905":61,"906":33,"907":2,"908":1,"913":8,"914":17,"915":5,"916":3,"917":1,"918":1,"920":1,"921":1,"922":1,"923":2,"924":2,"925":1,"926":11,"930":2,"931":14,"933":2,"937":1,"938":1,"940":3,"942":1,"945":2,"946":10,"947":1,"948":4,"949":2,"950":1,"952":2,"954":1,"956":1,"958":1,"959":2,"960":1,"963":1,"964":10,"965":1,"966":3,"971":3,"972":11,"974":1,"979":4,"980":14,"981":1,"982":2,"984":1,"987":2,"988":1,"990":2,"991":1,"995":5,"996":8,"997":1,"998":3,"1000":1,"1004":9,"1005":3,"1006":2,"1008":1,"1009":1,"1012":9,"1014":3,"1016":1,"1017":4,"1018":44,"1019":5,"1020":5,"1023":1,"1026":6,"1027":2,"1028":4,"1033":3,"1034":3,"1037":1,"1042":6,"1044":4,"1045":2,"1048":2,"1049":1,"1050":2,"1051":1,"1052":3,"1054":2,"1058":1,"1059":7,"1060":1,"1062":2,"1066":1,"1067":6,"1068":1,"1069":3,"1074":6,"1075":12,"1077":1,"1078":2,"1082":6,"1083":2,"1084":2,"1086":2,"1087":1,"1089":2,"1090":6,"1091":37,"1092":3,"1093":4,"1094":1,"1095":4,"1099":2,"1100":27,"1101":2,"1102":3,"1103":4,"1107":2,"1108":6,"1109":1,"1110":1,"1112":1,"1115":1,"1116":19,"1118":1,"1123":1,"1124":13,"1125":3,"1126":4,"1129":1,"1132":3,"1133":7,"1134":3,"1135":5,"1136":1,"1140":7,"1142":1,"1146":3,"1147":1,"1150":5,"1156":2,"1160":4,"1161":1,"1162":1,"1163":1,"1168":9,"1169":2,"1173":2,"1174":1,"1175":4,"1176":2,"1177":1,"1182":2,"1184":4,"1185":1,"1186":1,"1187":1,"1192":1,"1194":1,"1202":1,"1203":1,"1212":28,"1213":2,"1214":3,"1215":1,"1216":2,"1220":3,"1221":1,"1222":2,"1225":2,"1227":1,"1228":3,"1229":31,"1231":8,"1232":6,"1233":6,"1234":6,"1236":5,"1237":72,"1238":2,"1239":7,"1240":13,"1241":27,"1242":16,"1243":8,"1244":7,"1246":4,"1247":114,"1248":2,"1249":1,"1251":1,"1252":2,"1253":2,"1254":3,"1255":2,"1256":4,"1257":7,"1258":2,"1259":126,"1260":1,"1261":2,"1262":6,"1263":10,"1264":15,"1265":6,"1266":1,"1267":4,"1268":3,"1269":4,"1270":178,"1271":48,"1273":26,"1274":10,"1275":10,"1276":3,"1277":12,"1278":12,"1279":10,"1280":1,"1281":10,"1282":9,"1283":2,"1284":7,"1285":4,"1286":465,"1288":2,"1289":2,"1290":2,"1291":3,"1292":3,"1293":1,"1294":2,"1297":8,"1298":3,"1300":302,"1301":62,"1302":5,"1304":2,"1305":1,"1306":1,"1307":2,"1309":86,"1310":34,"1311":383,"1312":31,"1313":1,"1314":5,"1315":3,"1316":6,"1317":4,"1318":7,"1320":7,"1322":1,"1323":244,"1324":375,"1325":2,"1326":10,"1327":5,"1328":3,"1329":1,"1330":8,"1331":3,"1332":8,"1333":15,"1334":6,"1335":4,"1336":5,"1337":4,"1338":12,"1339":215,"1341":1,"1342":9,"1343":12,"1344":13,"1345":4,"1346":1,"1347":5,"1348":7,"1349":4,"1350":214,"1351":1,"1352":9,"1353":7,"1354":7,"1355":6,"1356":2,"1357":6,"1358":10,"1359":670,"1360":1,"1362":11,"1363":3,"1364":2,"1365":1,"1366":4,"1368":1,"1369":79,"1371":3,"1372":1,"1373":8,"1374":5,"1375":2,"1376":2,"1377":2,"1378":1,"1379":5,"1380":138,"1382":6,"1383":12,"1384":5,"1385":4,"1386":2,"1387":13,"1388":6,"1389":17,"1390":8,"1391":15,"1392":10,"1393":9,"1394":2,"1395":321,"1396":436,"1397":1,"1398":7,"1399":5,"1400":7,"1401":3,"1402":173,"1404":6,"1405":4,"1406":11,"1407":1,"1408":1,"1409":9,"1410":6,"1411":3,"1412":1,"1413":6,"1414":2,"1415":221,"1416":63,"1417":146,"1419":7,"1420":4,"1421":5,"1422":1,"1423":1,"1424":3,"1425":3,"1427":33,"1429":17,"1430":5,"1431":20,"1432":4,"1433":13,"1434":5,"1435":4,"1436":545,"1437":2,"1438":54,"1439":2,"1440":2,"1441":22,"1442":8,"1443":19,"1444":6,"1445":3,"1446":3,"1447":20,"1448":1,"1449":4,"1450":2,"1451":1,"1452":2,"1453":8,"1454":8,"1455":28,"1456":5,"1457":5,"1458":4,"1459":2,"1460":11,"1461":2,"1463":2,"1464":2,"1465":4,"1466":4,"1467":92,"1468":3,"1469":2,"1470":1,"1472":2,"1473":6,"1474":8,"1475":10,"1476":12,"1477":4,"1478":4,"1479":2,"1480":5,"1481":2,"1482":2,"1483":1,"1484":1,"1486":13,"1487":1,"1488":29,"1489":15,"1490":17,"1491":7,"1492":30,"1494":1,"1496":64,"1497":2,"1498":1,"1499":1,"1500":6,"1503":1,"1504":1,"1508":1,"1509":1,"1510":1,"1513":1,"1517":1,"1522":2,"1523":1,"1524":6,"1525":5,"1526":90,"1527":5,"1529":1,"1530":4,"1531":14,"1532":4,"1534":19,"1535":5,"1537":2,"1540":1,"1544":2,"1546":2,"1547":1,"1548":2,"1549":1,"1550":1,"1551":2,"1552":1,"1553":1,"1554":1,"1556":1,"1565":1,"1566":1,"1568":1,"1570":1,"1572":1,"1573":2,"1574":5,"1575":3,"1576":2,"1577":71,"1578":7,"1580":1,"1581":1,"1582":15,"1583":7,"1584":3,"1585":12,"1586":22,"1587":2,"1588":2,"1589":3,"1590":2,"1591":102,"1592":2,"1594":1,"1596":15,"1597":15,"1598":4,"1599":12,"1600":12,"1611":1,"1614":1,"1621":1,"1626":2,"1627":9,"1630":5,"1631":12,"1632":5,"1635":1,"1637":2,"1638":5,"1639":4,"1640":1,"1641":12,"1646":4,"1649":2,"1651":4,"1652":2,"1653":7,"1654":1,"1655":1,"1656":2,"1659":1,"1660":2,"1661":4,"1662":1,"1663":1,"1664":2,"1665":4,"1666":1,"1668":4,"1669":3,"1670":5,"1671":1,"1672":3,"1673":4,"1675":1,"1677":1,"1678":1,"1683":1,"1684":3,"1685":7,"1686":10,"1687":1,"1689":3,"1690":2,"1693":2,"1696":1,"1698":1,"1699":1,"1700":3,"1701":1,"1702":1,"1705":1,"1707":1,"1708":1,"1719":2,"1720":1,"1721":2,"1722":1,"1724":1,"1727":7,"1728":3,"1729":4,"1731":2,"1738":1,"1740":1,"1747":1,"1748":5,"1749":3,"1750":1,"1755":1,"1757":1,"1758":1,"1760":3,"1761":3,"1764":4,"1765":10,"1767":6,"1769":3,"1776":8,"1777":1,"1780":1,"1781":1,"1782":2,"1783":1,"1784":5,"1788":1,"1789":1,"1790":2,"1791":1,"1793":1,"1794":3,"1795":1,"1796":4,"1797":3,"1799":2,"1800":2,"1803":1,"1804":2,"1805":4,"1806":1,"1807":2,"1810":8,"1811":1,"1813":1,"1814":1,"1815":10,"1817":1,"1818":2,"1820":1,"1821":4,"1824":1,"1825":3,"1826":4,"1827":2,"1829":1,"1830":3,"1831":1,"1832":3,"1833":2,"1834":2,"1835":1,"1837":1,"1839":3,"1840":1,"1841":2,"1842":4,"1843":2,"1845":1,"1846":1,"1848":3,"1849":3,"1851":2,"1852":2,"1854":3,"1856":2,"1858":1,"1861":1,"1862":1,"1864":1,"1865":3,"1866":1,"1867":1,"1868":1,"1869":2,"1874":1,"1876":2,"1877":2,"1879":1,"1881":1,"1882":2,"1884":4,"1885":1,"1886":3,"1888":1,"1890":2,"1891":2,"1892":2,"1893":1,"1894":1,"1895":3,"1896":1,"1898":2,"1899":2,"1900":1,"1902":4,"1903":2,"1904":1,"1905":4,"1908":5,"1909":3,"1910":2,"1912":4,"1914":1,"1915":3,"1917":2,"1918":1,"1919":1,"1920":2,"1922":4,"1923":3,"1924":2,"1928":1,"1929":4,"1933":1,"1934":2,"1935":2,"1936":1,"1937":1,"1938":1,"1939":1,"1940":2,"1941":2,"1942":2,"1943":1,"1944":3,"1946":1,"1947":2,"1948":5,"1949":1,"1950":4,"1951":2,"1952":2,"1953":1,"1954":2,"1955":2,"1956":3,"1959":2,"1960":1,"1962":3,"1963":2,"1964":1,"1965":1,"1966":1,"1967":1,"1968":2,"1969":1,"1970":3,"1971":3,"1972":1,"1973":2,"1975":5,"1977":2,"1978":2,"1979":2,"1982":14,"1983":1,"1984":1,"1988":4,"1991":1,"1993":3,"1995":8,"1996":11,"1998":1,"1999":3,"2000":1,"2001":17,"2002":4,"2003":2,"2004":1,"2005":1,"2006":1,"2008":2,"2009":2,"2011":3,"2012":1,"2013":5,"2014":1,"2015":4,"2017":1,"2020":2,"2022":1,"2025":5,"2027":1,"2028":1,"2030":3,"2031":3,"2032":2,"2033":6,"2034":2,"2035":4,"2037":1,"2038":3,"2039":1,"2041":1,"2042":1,"2043":1,"2044":4,"2045":4,"2047":5,"2048":2,"2049":2,"2050":2,"2051":3,"2052":2,"2055":1,"2056":2,"2058":2,"2059":3,"2060":3,"2063":1,"2064":5,"2065":1,"2066":2,"2068":9,"2069":1,"2071":1,"2072":2,"2073":1,"2074":1,"2075":1,"2077":1,"2079":2,"2082":2,"2084":2,"2085":3,"2087":5,"2088":7,"2091":1,"2092":1,"2093":1,"2095":1,"2097":3,"2099":2,"2100":2,"2101":2,"2102":2,"2104":1,"2108":1,"2110":1,"2111":1,"2113":3,"2114":2,"2116":3,"2117":3,"2118":1,"2120":5,"2122":2,"2123":1,"2125":2,"2128":2,"2129":4,"2130":3,"2133":1,"2134":3,"2136":3,"2137":2,"2139":2,"2140":5,"2141":6,"2142":1,"2143":2,"2144":5,"2145":1,"2146":1,"2147":3,"2149":3,"2150":1,"2151":2,"2152":6,"2153":2,"2155":2,"2157":1,"2158":16,"2159":7,"2160":32,"2161":3,"2162":1,"2163":2,"2164":5,"2165":3,"2166":6,"2167":2,"2168":11,"2169":6,"2170":7,"2171":2,"2173":4,"2174":8,"2175":5,"2176":3,"2177":7,"2178":1,"2179":1,"2180":2,"2181":3,"2182":2,"2184":3,"2190":3,"2191":3,"2192":1,"2194":6,"2195":1,"2196":1,"2197":3,"2198":4,"2199":2,"2201":3,"2202":2,"2203":3,"2204":3,"2206":2,"2210":1,"2213":1,"2214":1,"2216":2,"2218":1,"2222":1,"2223":2,"2229":2,"2230":1,"2232":4,"2234":22,"2236":1,"2244":1,"2246":1}}],["angular",{"3":{"2221":1,"2222":5}}],["angles",{"3":{"1359":1,"1436":1}}],["anglesharp",{"2":{"952":1,"956":1,"958":1,"959":1},"3":{"0":1,"952":1,"954":1,"956":1,"958":2,"959":1,"1436":2,"2234":1}}],["angle",{"3":{"1018":2,"1020":1,"1161":1,"1237":1,"1249":1,"1300":1,"1311":2,"1312":1,"1366":1,"1395":1,"1436":8,"1526":1,"2123":1}}],["anemic",{"1":{"1808":1,"1809":1,"1810":1,"1811":1,"1812":1},"3":{"1539":1,"1541":1,"1577":1,"1779":1,"1807":1,"1808":2,"1810":1,"1811":1,"1812":2,"1828":1,"1834":1,"2208":1}}],["anupcasterwhosesourceisanotherupcasterstarget",{"3":{"1436":1}}],["anundecoratedendpointthatisallowlisted",{"3":{"1436":3}}],["aninheritedattributeonthederivedcontroller",{"3":{"1436":3}}],["animates",{"3":{"1417":1}}],["animated",{"3":{"1323":1,"1438":1,"2128":1}}],["animation",{"3":{"1359":1,"1433":1,"1436":1}}],["anr",{"3":{"1416":1,"1417":1}}],["anabstracthandlerbesideitscontract",{"3":{"1436":3}}],["anabstracthandleroveragenericcontract",{"3":{"1436":3}}],["anabstracthandlerstrandedfromitscontract",{"3":{"1436":3}}],["anaemic",{"3":{"1359":1}}],["anatomy",{"0":{"1352":1}}],["analogous",{"3":{"1323":1}}],["analogue",{"3":{"265":2,"1324":2,"1339":1,"1395":1,"1402":1,"1417":3,"1436":2,"1938":1}}],["analog",{"3":{"135":1,"1707":1,"2222":1}}],["analyser",{"3":{"1436":1}}],["analyses",{"3":{"1350":3,"1601":1}}],["analysismode",{"3":{"2087":1}}],["analysismode=all",{"3":{"869":1,"1445":1,"1577":1}}],["analysis",{"1":{"1745":1,"1746":1,"1747":1,"1748":1,"1749":1,"1750":1,"1751":1,"1752":1,"1753":1,"1754":1,"1755":1},"3":{"0":2,"160":1,"360":1,"546":1,"1033":1,"1049":1,"1350":11,"1380":1,"1395":3,"1396":2,"1417":1,"1436":3,"1453":1,"1467":1,"1496":1,"1566":1,"1577":1,"1586":1,"1603":1,"1639":1,"1679":1,"1745":1,"1755":1,"1815":1,"2221":1}}],["analyze",{"3":{"1359":3}}],["analyzed",{"3":{"1247":1,"1627":1}}],["analyzes",{"3":{"1239":1,"1247":1,"1347":1,"1436":1}}],["analyzers",{"2":{"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"495":1,"2091":1},"3":{"0":1,"138":1,"481":1,"483":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":2,"495":1,"633":1,"982":2,"1170":1,"1213":4,"1214":1,"1229":1,"1237":2,"1247":2,"1286":1,"1309":1,"1359":2,"1395":1,"1396":1,"1453":2,"1524":1,"1526":2,"1531":1,"1537":1,"1552":2,"1554":1,"1570":1,"1572":1,"1577":2,"1586":1,"1591":4,"1596":2,"1597":1,"1649":1,"1654":1,"1657":1,"1661":1,"1673":1,"1683":1,"1685":1,"1696":1,"1704":1,"1719":1,"1726":1,"1781":1,"1797":1,"1804":1,"1903":1,"1905":1,"2087":1,"2091":1,"2133":1}}],["analyzer",{"2":{"135":1,"138":1,"1526":1},"3":{"0":3,"135":5,"138":1,"139":1,"140":1,"142":2,"265":1,"454":1,"482":2,"484":2,"486":1,"490":2,"491":2,"492":2,"493":2,"494":1,"497":2,"502":1,"558":1,"591":1,"631":2,"633":4,"776":1,"801":1,"869":1,"899":1,"980":3,"981":1,"1004":1,"1102":1,"1108":1,"1213":1,"1229":1,"1237":2,"1247":1,"1270":1,"1286":2,"1300":6,"1309":1,"1311":4,"1312":3,"1323":4,"1324":5,"1339":7,"1359":3,"1369":1,"1373":1,"1395":2,"1396":2,"1402":1,"1416":3,"1417":3,"1436":6,"1441":1,"1445":1,"1453":2,"1455":1,"1488":1,"1492":1,"1526":1,"1577":3,"1582":1,"1595":1,"1596":1,"1673":3,"1688":1,"1689":1,"1727":1,"1731":1,"1825":2,"1897":1,"2002":1,"2088":1,"2091":2,"2234":1}}],["analytical",{"3":{"0":1,"1012":1,"1359":2,"1395":2,"1526":2,"1545":1,"1577":1}}],["analytics",{"0":{"1359":1},"2":{"1465":1},"3":{"0":2,"395":1,"601":1,"604":1,"609":4,"718":1,"768":1,"914":1,"974":1,"1192":1,"1202":1,"1203":1,"1339":1,"1350":1,"1351":1,"1359":4,"1436":1,"1447":1,"1455":1,"1465":6,"1467":7,"1474":1,"1476":1,"1525":1,"1526":1,"1534":2,"1545":1,"1591":1,"1611":2,"1621":1,"1625":1,"1630":1,"1634":2,"1638":1,"1641":3,"1670":1,"1677":2,"1678":1,"1685":1,"1835":1,"2160":1,"2162":1,"2221":1,"2222":1,"2223":1,"2234":1}}],["ansi",{"3":{"741":1,"1311":2}}],["answerid",{"3":{"1359":2,"1395":6,"1396":1}}],["answering",{"3":{"0":4,"72":1,"99":1,"157":1,"234":1,"237":1,"284":1,"342":1,"353":3,"698":1,"735":1,"758":1,"790":1,"826":1,"827":1,"879":1,"881":1,"906":1,"1075":1,"1099":1,"1237":2,"1270":1,"1286":4,"1293":1,"1300":3,"1309":1,"1311":4,"1323":2,"1324":3,"1328":1,"1339":3,"1350":2,"1359":4,"1373":1,"1378":1,"1380":4,"1395":2,"1396":4,"1415":2,"1417":2,"1418":1,"1436":1,"1441":1,"1474":1,"1476":1,"1526":1,"1600":1,"1670":1,"1795":1,"1909":1,"2172":1,"2177":1}}],["answervaluemaxlength",{"3":{"1350":4,"1359":2,"1369":3,"1396":5}}],["answervalue",{"3":{"1350":23,"1359":39,"1369":3,"1380":16,"1396":5,"1630":3,"1631":2,"1632":2,"1635":3,"1639":1,"1640":2}}],["answerable",{"3":{"39":1,"402":1,"498":1,"1237":1,"1286":2,"1415":1,"1417":1,"1764":1}}],["answered",{"3":{"0":3,"109":1,"126":1,"176":1,"243":1,"286":1,"341":1,"399":1,"639":1,"690":1,"698":1,"741":1,"743":2,"757":1,"759":1,"809":1,"818":1,"854":1,"857":1,"882":1,"896":1,"901":1,"903":1,"905":1,"907":1,"922":1,"930":1,"996":2,"1049":1,"1052":1,"1055":1,"1066":1,"1093":1,"1142":1,"1145":1,"1153":1,"1184":4,"1263":1,"1270":1,"1286":2,"1290":1,"1300":12,"1301":4,"1311":9,"1313":1,"1320":1,"1324":18,"1328":1,"1337":1,"1339":2,"1350":6,"1359":33,"1380":6,"1387":1,"1395":10,"1396":21,"1397":1,"1401":1,"1402":21,"1408":1,"1415":3,"1417":2,"1427":1,"1430":1,"1436":3,"1441":1,"1455":1,"1526":1,"1534":1,"1630":1,"1632":3,"1638":1,"1641":1,"1748":1,"1765":1,"1810":1,"1815":2,"1821":1,"1851":1,"1857":1,"1912":1,"1916":1,"1933":1,"1984":1,"1993":1}}],["answer",{"0":{"93":1,"1423":1,"1790":1,"1805":1,"1810":1,"1815":1,"1849":1,"1865":1,"1871":1,"1889":1,"1895":1,"1902":1,"1927":1,"1944":1,"1962":1,"1968":1,"1975":1,"1982":1,"1988":1,"1995":1,"2001":1,"2064":1,"2085":1,"2119":1,"2128":1,"2133":1,"2138":1,"2144":1,"2151":1,"2158":1,"2165":1,"2174":1,"2186":1,"2198":1},"2":{"1335":1},"3":{"0":6,"26":1,"52":1,"81":1,"93":2,"94":2,"101":1,"126":1,"146":1,"166":2,"185":1,"186":1,"194":1,"202":1,"212":1,"235":2,"245":1,"265":2,"283":1,"284":1,"301":1,"325":1,"340":1,"342":2,"343":1,"344":1,"365":2,"390":1,"391":1,"392":1,"396":1,"434":1,"435":1,"497":1,"535":1,"536":1,"537":1,"539":1,"544":1,"573":2,"574":1,"577":1,"582":1,"583":1,"625":2,"673":1,"688":1,"689":1,"690":5,"693":2,"697":1,"706":1,"714":3,"717":3,"724":1,"725":1,"726":3,"740":1,"741":2,"742":1,"743":1,"756":1,"767":1,"773":1,"781":1,"783":2,"809":2,"813":1,"818":1,"821":1,"827":4,"829":1,"832":1,"833":1,"837":1,"896":2,"898":2,"905":1,"921":1,"926":2,"942":1,"946":1,"947":1,"953":1,"955":1,"963":1,"965":1,"995":1,"996":1,"1016":1,"1018":3,"1019":2,"1021":2,"1025":1,"1026":1,"1028":1,"1035":1,"1041":1,"1043":2,"1049":1,"1066":3,"1074":1,"1089":1,"1091":2,"1092":1,"1093":4,"1115":1,"1117":2,"1123":1,"1124":1,"1126":1,"1132":1,"1153":1,"1154":1,"1175":2,"1177":1,"1178":1,"1220":1,"1222":1,"1228":1,"1229":1,"1232":1,"1235":1,"1237":4,"1239":1,"1247":5,"1248":3,"1250":1,"1253":2,"1259":5,"1263":2,"1265":1,"1267":1,"1270":18,"1271":6,"1273":1,"1276":1,"1280":1,"1286":33,"1296":1,"1300":25,"1301":2,"1307":1,"1308":1,"1309":5,"1310":1,"1311":14,"1312":6,"1313":1,"1318":2,"1320":1,"1323":14,"1324":49,"1328":1,"1331":1,"1332":1,"1335":1,"1337":2,"1338":1,"1339":25,"1340":1,"1344":1,"1346":1,"1348":1,"1349":3,"1350":57,"1351":1,"1352":5,"1353":1,"1355":5,"1357":2,"1359":241,"1360":1,"1362":1,"1366":5,"1369":12,"1372":8,"1373":4,"1374":3,"1380":42,"1382":1,"1388":1,"1395":36,"1396":59,"1402":12,"1405":1,"1406":2,"1408":2,"1409":2,"1414":1,"1415":18,"1417":23,"1418":3,"1422":1,"1423":7,"1424":2,"1426":1,"1427":18,"1431":1,"1435":4,"1436":22,"1438":10,"1441":1,"1447":2,"1448":1,"1449":3,"1455":4,"1456":1,"1465":1,"1467":1,"1476":1,"1482":1,"1487":2,"1492":3,"1496":1,"1526":3,"1577":1,"1585":1,"1629":1,"1630":3,"1631":12,"1632":14,"1635":7,"1638":4,"1639":7,"1640":4,"1653":1,"1656":1,"1667":1,"1670":1,"1672":1,"1673":1,"1681":1,"1702":1,"1708":1,"1718":1,"1720":1,"1722":1,"1727":1,"1728":1,"1729":1,"1790":2,"1815":1,"1819":1,"1821":1,"1839":1,"1847":1,"1854":1,"1857":1,"1859":1,"1870":1,"1874":1,"1877":1,"1888":1,"1891":1,"1892":1,"1893":2,"1896":1,"1898":1,"1902":2,"1905":1,"1908":1,"1909":1,"1910":1,"1911":1,"1912":2,"1926":1,"1933":1,"1934":1,"1940":1,"1941":1,"1947":2,"1948":2,"1954":2,"1965":1,"1967":1,"1970":1,"1972":1,"1980":1,"1981":1,"1982":3,"1985":1,"1993":1,"1997":1,"1998":2,"2002":1,"2003":1,"2009":1,"2025":1,"2036":1,"2037":1,"2056":1,"2064":1,"2068":2,"2069":1,"2071":1,"2076":1,"2080":1,"2129":1,"2139":2,"2145":1,"2146":1,"2156":1,"2161":1,"2162":1,"2165":1,"2169":1,"2170":1,"2172":2,"2177":2,"2178":1,"2179":1,"2181":1,"2183":1,"2185":1,"2187":1,"2193":1,"2196":1}}],["answers",{"0":{"1280":1},"3":{"0":13,"24":1,"40":2,"41":1,"81":2,"92":1,"94":1,"96":1,"97":1,"109":1,"110":1,"111":1,"235":2,"236":3,"317":1,"318":1,"320":1,"324":1,"326":1,"333":2,"340":1,"343":1,"344":1,"353":1,"369":1,"499":1,"507":1,"524":1,"545":1,"549":1,"571":2,"583":1,"585":3,"590":1,"650":1,"652":1,"714":1,"725":1,"727":1,"732":1,"741":1,"743":1,"749":1,"767":1,"818":1,"827":5,"828":1,"853":1,"860":1,"876":1,"881":3,"905":3,"907":1,"922":1,"925":1,"926":2,"932":1,"938":1,"946":1,"948":1,"953":1,"956":2,"963":1,"966":1,"998":1,"1016":1,"1018":5,"1020":2,"1021":1,"1022":2,"1024":1,"1028":1,"1034":2,"1041":1,"1059":3,"1066":1,"1067":3,"1082":1,"1091":2,"1092":1,"1099":1,"1103":2,"1116":1,"1132":1,"1142":3,"1175":1,"1176":1,"1178":1,"1183":1,"1184":2,"1185":1,"1228":1,"1229":5,"1231":1,"1237":3,"1238":1,"1247":2,"1250":1,"1256":1,"1259":3,"1265":1,"1270":10,"1271":7,"1272":1,"1279":1,"1283":1,"1286":27,"1290":1,"1294":1,"1297":1,"1300":31,"1301":5,"1305":1,"1308":1,"1309":5,"1311":17,"1312":4,"1313":1,"1322":1,"1323":11,"1324":42,"1328":3,"1332":2,"1337":1,"1339":14,"1342":4,"1343":2,"1344":1,"1346":1,"1347":1,"1349":1,"1350":29,"1352":3,"1355":3,"1357":1,"1359":104,"1366":2,"1369":3,"1372":2,"1373":1,"1375":2,"1380":30,"1384":1,"1386":1,"1388":1,"1390":2,"1391":2,"1395":38,"1396":79,"1398":1,"1401":1,"1402":11,"1408":1,"1411":1,"1414":1,"1415":19,"1416":1,"1417":9,"1421":1,"1423":2,"1426":1,"1427":2,"1430":3,"1432":1,"1435":1,"1436":17,"1438":8,"1441":1,"1447":1,"1453":2,"1454":1,"1467":1,"1488":2,"1490":1,"1492":2,"1496":1,"1534":2,"1535":1,"1567":1,"1577":2,"1627":1,"1630":3,"1631":7,"1632":10,"1635":3,"1638":2,"1639":14,"1640":4,"1641":2,"1651":1,"1666":1,"1670":1,"1708":1,"1720":1,"1748":1,"1767":2,"1769":1,"1770":1,"1794":1,"1806":1,"1819":1,"1821":1,"1825":1,"1839":1,"1862":1,"1863":1,"1870":1,"1873":1,"1875":1,"1877":1,"1892":2,"1896":1,"1902":1,"1909":1,"1920":1,"1922":1,"1923":1,"1927":1,"1931":1,"1933":1,"1934":1,"1947":1,"1962":1,"1968":2,"1969":1,"1982":1,"1992":1,"1993":2,"1996":1,"2025":2,"2030":1,"2037":1,"2057":1,"2064":2,"2074":1,"2075":1,"2111":1,"2112":1,"2115":1,"2141":1,"2143":2,"2151":1,"2158":1,"2161":1,"2169":1,"2178":1,"2182":2,"2185":2,"2192":1,"2198":1,"2201":1,"2202":1}}],["annual",{"3":{"361":1,"1286":1,"1467":1,"1481":1,"2147":1}}],["annoying",{"3":{"2072":1}}],["announcing",{"3":{"1212":1,"1259":1,"1417":3}}],["announceasync",{"3":{"1417":4}}],["announceable",{"3":{"1309":1}}],["announcer",{"3":{"1396":1,"1417":2,"1669":1}}],["announcement",{"3":{"619":1,"620":1,"1324":2,"1359":2,"1396":5,"1410":1,"1415":4,"1417":8,"1526":1,"1532":1,"1642":1,"1644":1,"2118":1}}],["announcements",{"3":{"384":1,"433":1,"1402":2,"1417":7,"1605":1,"1739":1,"1936":1}}],["announce",{"3":{"573":1,"1212":1,"1324":1,"1350":1,"1396":1,"1402":2,"1415":1,"1417":5,"1436":1,"1607":4,"1608":1,"1741":4,"1742":2,"1835":1,"2232":1}}],["announces",{"3":{"0":1,"109":1,"1323":2,"1350":4,"1395":1,"1396":2,"1402":1,"1415":1,"1417":3,"1607":1,"1608":2,"1741":1,"1742":3,"1870":1,"1988":1}}],["announced",{"3":{"0":2,"170":1,"790":2,"1074":1,"1118":1,"1231":1,"1259":1,"1309":1,"1311":1,"1316":1,"1324":1,"1359":2,"1380":3,"1392":1,"1396":1,"1402":1,"1417":1,"1436":1,"1558":1,"1561":1,"1607":3,"1608":6,"1631":1,"1643":1,"1644":2,"1741":3,"1742":13,"2093":1}}],["annotates",{"3":{"166":1,"305":1}}],["annotate",{"3":{"135":2,"1286":1,"1311":1,"1436":2}}],["annotated",{"3":{"0":1,"135":1,"250":1,"251":1,"252":1,"254":1,"256":1,"257":1,"258":2,"259":1,"305":1,"324":1,"343":1,"725":1,"1243":1,"1259":1,"1270":1,"1282":1,"1286":4,"1300":1,"1309":1,"1324":1,"1350":1,"1359":5,"1395":2,"1396":3,"1436":2,"1458":1,"1459":1,"1577":1,"1733":1,"1876":1,"2140":1}}],["annotations",{"3":{"318":1,"655":1,"657":1,"674":2,"675":1,"676":1,"1270":1,"1286":5,"1300":1,"1323":4,"1324":2,"1339":5,"1384":1,"1395":4,"1396":1,"1415":1,"1420":1,"1427":1,"1436":6,"1585":1,"1805":1,"2013":2}}],["annotation",{"3":{"0":2,"158":1,"160":1,"170":1,"318":1,"626":1,"627":1,"659":1,"674":1,"676":2,"1083":1,"1084":1,"1279":1,"1281":2,"1286":21,"1300":2,"1310":1,"1311":5,"1320":1,"1323":2,"1324":1,"1339":2,"1350":2,"1395":3,"1396":2,"1416":1,"1417":1,"1427":1,"1436":5,"1438":1,"1455":1,"1641":1,"1670":1,"1995":1,"2065":2,"2234":1}}],["annotating",{"3":{"0":1,"160":1,"1286":1,"1323":1}}],["ancestry",{"3":{"526":1,"530":1,"531":1,"1454":1}}],["ancestorfullname",{"3":{"1436":1}}],["ancestor",{"3":{"402":1,"530":1,"1196":1,"1333":2,"1339":3,"1417":1,"1436":5,"1438":2,"1443":1,"1454":1,"2159":1}}],["ancestors",{"3":{"214":1,"219":2,"572":1,"1324":2,"1339":2,"1436":5,"1438":2,"1488":1,"1525":1,"1577":1,"1591":2,"1600":1,"2056":1,"2149":1,"2150":1,"2151":1,"2152":2}}],["anchortype",{"3":{"1436":1}}],["anchoring",{"3":{"1359":1,"1380":1,"1415":1,"1436":4}}],["anchor",{"0":{"2105":1},"3":{"34":1,"57":1,"139":2,"203":1,"250":1,"251":2,"252":4,"254":2,"256":2,"257":2,"258":2,"259":2,"260":1,"261":1,"276":1,"306":1,"323":2,"324":1,"354":1,"366":2,"392":1,"413":1,"415":1,"418":1,"420":1,"423":1,"424":2,"425":1,"426":2,"428":1,"429":1,"430":1,"464":2,"465":2,"492":2,"493":1,"495":1,"543":2,"547":1,"609":1,"631":2,"644":1,"747":1,"752":1,"761":1,"833":1,"876":1,"917":1,"949":1,"991":1,"994":1,"1122":1,"1127":1,"1184":1,"1263":1,"1309":3,"1311":17,"1312":1,"1319":2,"1323":21,"1324":11,"1341":1,"1350":2,"1354":1,"1359":9,"1369":1,"1377":2,"1380":6,"1396":9,"1402":1,"1404":2,"1415":6,"1417":19,"1431":1,"1436":37,"1449":1,"1467":1,"1489":2,"1496":9,"1498":1,"1500":1,"1599":2,"1641":1,"1684":1,"1686":1,"1729":1,"1750":1,"1758":1,"1759":1,"1773":1,"1976":1,"2105":2,"2110":2,"2113":1,"2123":2,"2124":1}}],["anchored",{"0":{"137":1,"138":1,"139":1},"3":{"0":2,"34":1,"112":1,"130":2,"137":3,"138":1,"139":4,"140":1,"141":1,"142":1,"171":1,"249":1,"254":1,"324":1,"354":2,"375":1,"378":1,"393":1,"446":2,"453":1,"468":2,"475":1,"476":1,"477":1,"478":1,"480":1,"486":1,"501":1,"514":1,"534":5,"540":2,"543":2,"550":1,"552":1,"554":3,"559":1,"567":1,"586":1,"589":1,"594":1,"597":3,"604":1,"607":5,"613":2,"621":1,"624":3,"629":1,"631":1,"636":1,"638":3,"647":1,"652":1,"669":1,"672":4,"677":1,"680":2,"685":1,"696":4,"703":1,"723":1,"744":1,"764":3,"769":1,"777":1,"780":5,"794":1,"806":1,"841":1,"844":1,"849":1,"867":1,"877":1,"895":1,"909":1,"917":1,"927":1,"929":1,"934":1,"949":1,"1007":1,"1021":1,"1045":1,"1055":2,"1078":1,"1111":1,"1119":1,"1146":1,"1324":1,"1347":1,"1350":1,"1364":1,"1369":1,"1424":1,"1436":6,"1496":29,"1661":1,"1684":1,"1729":2,"1984":1,"2002":1,"2234":1}}],["anchors",{"0":{"1319":1},"3":{"0":2,"43":1,"63":1,"94":1,"98":1,"104":3,"128":1,"137":1,"138":2,"139":2,"140":2,"142":3,"181":1,"203":1,"220":2,"231":1,"241":2,"249":1,"250":3,"251":3,"252":5,"254":4,"256":4,"257":4,"258":3,"259":7,"260":1,"261":1,"268":1,"285":1,"322":1,"324":1,"326":3,"336":1,"337":1,"345":2,"354":1,"364":1,"375":1,"386":1,"393":1,"395":1,"409":1,"418":4,"424":1,"425":2,"426":1,"428":2,"429":1,"463":1,"464":1,"465":1,"466":2,"490":3,"491":1,"492":1,"493":2,"497":3,"502":2,"522":1,"526":1,"543":3,"551":1,"552":2,"589":1,"604":1,"609":2,"611":1,"613":1,"616":3,"644":2,"655":2,"660":2,"669":1,"696":2,"703":5,"713":1,"720":2,"731":1,"736":1,"747":1,"749":1,"755":2,"761":1,"814":1,"825":1,"850":1,"875":1,"877":1,"879":1,"884":1,"912":1,"927":2,"958":1,"960":1,"967":1,"983":1,"986":1,"991":1,"994":1,"999":1,"1021":1,"1029":1,"1062":1,"1065":1,"1070":1,"1136":1,"1193":1,"1309":1,"1311":2,"1313":1,"1324":2,"1350":1,"1359":2,"1377":1,"1417":2,"1436":7,"1467":3,"1476":1,"1488":1,"1496":7,"1591":1,"2047":2,"2088":1}}],["antes",{"3":{"1436":1}}],["anthropiccontentblock",{"3":{"1496":1}}],["anthropicclient",{"2":{"1420":1,"2174":1},"3":{"1420":1,"1427":2,"2174":1}}],["anthropicmessage",{"3":{"1496":1}}],["anthropicresponse",{"3":{"1496":1}}],["anthropicrequest",{"3":{"1496":1}}],["anthropicusage",{"3":{"1496":2}}],["anthropicjsonschemaformat",{"3":{"1496":2}}],["anthropicoutputconfig",{"3":{"1496":2}}],["anthropics",{"3":{"1459":1,"1496":2}}],["anthropicscoringservice",{"3":{"0":1,"1369":2,"1427":4,"1496":5}}],["anthropicaiservicecollectionextensions",{"3":{"1199":1,"1203":1,"1207":1,"1420":1,"1427":4}}],["anthropicaiproviderfactory",{"3":{"74":1,"1091":2,"1092":1,"1199":3,"1203":1,"1207":2,"1420":2,"1427":16,"2174":1}}],["anthropic",{"2":{"142":1,"1020":1,"1089":1,"1091":1,"1093":2,"1211":1,"1213":1,"1418":1,"1455":1,"1466":1,"1470":1,"1472":1,"1503":1,"1781":1,"2174":1,"2180":1},"3":{"0":2,"74":1,"142":1,"598":1,"599":1,"980":2,"983":1,"995":1,"1012":1,"1017":4,"1020":2,"1089":1,"1090":1,"1091":4,"1093":2,"1094":1,"1095":1,"1192":1,"1199":2,"1203":2,"1206":1,"1207":6,"1208":2,"1211":1,"1213":2,"1350":1,"1359":5,"1376":1,"1380":1,"1418":1,"1420":3,"1427":16,"1436":1,"1438":4,"1455":2,"1466":2,"1467":6,"1470":1,"1472":1,"1474":1,"1486":2,"1492":3,"1496":3,"1503":1,"1781":1,"2113":1,"2174":2,"2180":1,"2181":1,"2192":1,"2229":1}}],["anticipated",{"3":{"827":1,"1359":2,"1436":1,"1804":1,"1946":1}}],["anticipate",{"3":{"812":1,"1270":1,"1417":1}}],["anticipates",{"3":{"241":1,"245":1,"974":1,"1359":1,"1400":1}}],["antiforgery",{"3":{"0":1,"207":2,"664":3,"665":2,"670":1,"1184":1,"1187":1,"1212":1,"1300":3,"1311":2,"1336":2,"1339":4,"1442":1,"1467":2,"1526":1,"1969":2,"1970":2,"2234":1}}],["anti",{"3":{"0":3,"51":1,"53":2,"557":1,"591":1,"592":1,"688":1,"690":2,"691":1,"692":1,"854":1,"855":1,"859":1,"871":1,"1012":1,"1018":1,"1019":1,"1020":1,"1212":1,"1294":1,"1300":6,"1311":1,"1312":3,"1323":1,"1324":8,"1326":2,"1339":4,"1358":1,"1359":3,"1369":1,"1395":3,"1396":12,"1402":1,"1415":1,"1417":1,"1433":2,"1436":8,"1438":5,"1444":2,"1457":1,"1489":4,"1492":3,"1493":1,"1526":1,"1532":1,"1544":1,"1546":1,"1548":1,"1576":1,"1577":1,"1586":1,"1591":1,"1599":1,"1631":1,"1639":1,"1641":2,"1654":1,"1663":1,"1767":1,"1832":1,"2048":1,"2234":1}}],["anomalies",{"3":{"1359":1}}],["anomalous",{"3":{"1301":1}}],["anomaly",{"3":{"790":1,"1311":1,"1436":1}}],["anon",{"3":{"157":2,"161":1,"1311":1,"1908":2}}],["anonymizability",{"3":{"1671":1}}],["anonymizable",{"3":{"718":2,"1764":1}}],["anonymization",{"3":{"0":1,"37":1,"41":1,"42":4,"1201":1,"1237":2,"1323":4,"1415":2,"1438":2,"1567":1,"1640":1,"1672":1,"1765":1,"1784":1,"1903":2,"2063":1,"2064":1,"2065":1,"2070":1,"2223":1,"2234":1}}],["anonymizing",{"3":{"318":1,"326":1,"1142":1,"1300":1,"1764":1,"1767":1,"1996":1,"2068":1}}],["anonymizes",{"3":{"358":1,"716":1,"897":1,"1396":1,"1577":1,"1747":1,"1748":1,"1751":1,"1765":2,"1769":1,"2143":1}}],["anonymized",{"2":{"2066":1},"3":{"38":1,"42":1,"444":1,"1237":1,"1300":2,"1402":2,"1410":3,"1415":5,"1436":2,"1765":2,"2066":1,"2067":1,"2071":1}}],["anonymize",{"2":{"42":1,"355":1,"497":1,"718":1,"2064":1,"2065":1,"2066":1},"3":{"0":2,"39":1,"40":1,"42":1,"350":1,"355":1,"440":1,"497":2,"499":2,"690":1,"694":1,"718":1,"724":1,"725":1,"897":1,"1212":2,"1236":2,"1237":7,"1300":10,"1323":6,"1396":1,"1406":1,"1410":3,"1415":11,"1436":5,"1438":1,"1526":2,"1535":1,"1567":1,"1572":1,"1577":2,"1590":1,"1631":1,"1672":1,"1767":1,"1769":2,"2064":6,"2065":1,"2066":1,"2071":2,"2128":1,"2232":1}}],["anonymity",{"3":{"0":1,"184":1,"189":1,"446":1,"448":1,"1300":1,"1339":1,"1380":1,"1402":2,"1436":1,"2133":1}}],["anonymoususer",{"3":{"1436":2}}],["anonymousendpointsfortest",{"3":{"1436":3}}],["anonymousendpointsof",{"3":{"1436":3}}],["anonymousendpoints",{"3":{"1436":6}}],["anonymousendpointtests",{"3":{"1199":2,"1207":4,"1311":3,"1324":2,"1380":2,"1436":18,"1489":3,"1526":1,"1534":1,"1535":1,"1591":2}}],["anonymousendpointtestsbasetests",{"3":{"1198":1,"1199":7,"1207":14,"1436":44,"1489":1,"1496":1}}],["anonymousendpointtestsbase",{"2":{"189":1,"1586":1,"1898":1},"3":{"0":1,"189":2,"1199":10,"1207":2,"1300":2,"1436":38,"1586":1,"1898":1}}],["anonymousstate",{"3":{"1324":1}}],["anonymoussessionassettests",{"3":{"1199":1,"1207":2}}],["anonymously",{"3":{"1259":1,"1288":1,"1298":1,"1300":3,"1311":2,"1324":1,"1402":5,"1408":1,"1432":1,"1467":1,"1626":1,"1629":1,"1630":1,"1758":1}}],["anonymousauthenticationstateprovider",{"3":{"1496":2}}],["anonymousauthedgecasetests",{"3":{"1199":1,"1207":2}}],["anonymousauthtests",{"3":{"1199":1,"1207":2,"1611":1}}],["anonymousaccessdeniedtests",{"3":{"1199":2,"1207":4}}],["anonymousbookmarkaccessdeniedtests",{"3":{"1199":1,"1207":2}}],["anonymousconferencereadtests",{"2":{"1611":1},"3":{"1199":1,"1207":2,"1611":1}}],["anonymouscurrentuserservice",{"3":{"1199":2,"1207":1}}],["anonymousfixturecontroller",{"3":{"1199":3,"1207":1,"1436":9}}],["anonymouspartition",{"2":{"178":1},"3":{"178":1,"1311":5,"2001":1}}],["anonymoushubpermitlimit",{"2":{"175":1,"179":1},"3":{"0":1,"175":1,"179":1,"1311":5,"2001":1}}],["anonymous",{"0":{"1407":1,"1622":1,"1758":1},"2":{"57":1,"825":1},"3":{"0":15,"31":1,"33":1,"37":1,"42":3,"57":1,"59":2,"159":1,"173":5,"174":2,"175":9,"176":3,"177":4,"178":3,"179":3,"181":4,"189":1,"233":1,"242":1,"243":2,"244":3,"247":2,"265":2,"273":1,"279":1,"280":2,"287":2,"303":1,"306":1,"333":1,"349":1,"387":2,"390":1,"391":2,"403":1,"420":2,"441":1,"459":2,"464":1,"507":1,"527":1,"577":1,"618":1,"649":1,"748":1,"749":2,"757":3,"759":1,"789":1,"790":1,"792":1,"793":2,"794":1,"825":1,"826":4,"827":4,"828":1,"830":1,"834":1,"853":1,"954":2,"956":1,"960":1,"1059":1,"1115":1,"1116":2,"1118":2,"1184":1,"1207":12,"1212":4,"1246":1,"1253":1,"1259":1,"1264":1,"1270":2,"1275":1,"1278":1,"1286":2,"1294":1,"1300":18,"1311":46,"1323":8,"1324":38,"1332":2,"1337":1,"1339":10,"1343":1,"1344":1,"1350":12,"1359":24,"1372":1,"1375":2,"1380":23,"1381":2,"1389":1,"1391":1,"1395":19,"1396":15,"1402":4,"1407":3,"1408":1,"1414":1,"1415":19,"1416":2,"1417":1,"1432":2,"1433":1,"1434":1,"1436":59,"1438":13,"1447":5,"1455":1,"1456":1,"1467":6,"1488":1,"1489":1,"1491":2,"1496":1,"1526":2,"1591":3,"1596":3,"1597":1,"1608":1,"1611":2,"1621":1,"1623":1,"1627":1,"1631":4,"1640":7,"1641":2,"1643":1,"1666":1,"1671":1,"1673":1,"1703":1,"1742":2,"1748":4,"1749":1,"1750":1,"1757":2,"1758":1,"1759":1,"1761":2,"1765":3,"1768":7,"1771":1,"1773":1,"1775":1,"1825":3,"1898":1,"1911":1,"1922":4,"1963":1,"1966":1,"1998":1,"1999":5,"2000":4,"2001":7,"2002":7,"2003":5,"2008":1,"2025":3,"2029":1,"2037":1,"2068":1,"2085":2,"2127":1,"2129":1,"2139":1,"2168":2,"2170":1,"2195":1,"2198":1,"2204":1,"2234":2}}],["another",{"3":{"0":3,"21":1,"24":1,"47":1,"126":1,"131":1,"136":2,"137":1,"157":1,"159":1,"164":1,"168":1,"180":1,"187":1,"188":1,"225":1,"241":1,"247":1,"255":1,"318":1,"376":1,"386":1,"387":1,"434":1,"459":1,"566":1,"571":1,"634":1,"640":1,"650":2,"658":1,"699":1,"702":1,"709":1,"725":1,"727":1,"733":2,"735":1,"768":1,"792":1,"799":1,"827":1,"840":1,"862":2,"881":2,"905":4,"906":2,"907":1,"948":1,"972":1,"974":2,"1019":1,"1051":1,"1055":1,"1061":2,"1124":1,"1128":1,"1170":1,"1184":1,"1185":1,"1212":1,"1229":2,"1231":1,"1232":1,"1233":1,"1237":6,"1240":1,"1241":1,"1242":2,"1246":1,"1247":8,"1249":1,"1253":3,"1259":6,"1263":2,"1264":1,"1268":1,"1270":17,"1276":2,"1281":1,"1283":2,"1286":27,"1290":2,"1293":2,"1300":22,"1301":2,"1303":1,"1308":1,"1309":4,"1310":2,"1311":12,"1312":1,"1317":1,"1318":1,"1323":9,"1324":8,"1339":4,"1350":6,"1359":27,"1362":1,"1369":2,"1379":1,"1380":10,"1389":1,"1395":8,"1396":21,"1402":12,"1408":1,"1409":1,"1412":1,"1415":20,"1417":3,"1427":2,"1436":44,"1438":5,"1441":2,"1455":1,"1465":1,"1467":3,"1473":2,"1475":1,"1487":1,"1489":6,"1492":2,"1496":1,"1534":1,"1541":1,"1631":2,"1650":1,"1651":2,"1669":1,"1686":1,"1702":1,"1727":1,"1748":1,"1749":1,"1765":1,"1789":1,"1815":1,"1821":3,"1823":1,"1841":1,"1849":2,"1851":1,"1852":1,"1872":1,"1880":1,"1908":1,"1911":1,"1920":2,"1922":1,"1923":1,"1924":1,"1925":1,"1932":1,"1933":1,"1937":1,"1948":2,"1961":1,"1970":1,"1982":3,"1986":1,"1996":2,"1998":1,"2001":1,"2022":1,"2045":2,"2076":1,"2084":1,"2100":1,"2113":1,"2120":1,"2165":2,"2200":1,"2201":1,"2204":1}}],["anybody",{"3":{"1083":1,"1092":1,"1281":1,"1323":2,"1359":1,"2003":1,"2044":1,"2182":1}}],["anyone",{"3":{"0":3,"24":1,"224":1,"281":1,"284":1,"358":1,"441":1,"528":1,"530":1,"539":1,"633":1,"634":1,"689":1,"691":2,"692":1,"727":1,"735":1,"743":1,"805":1,"825":1,"905":1,"907":1,"914":1,"924":1,"926":1,"933":1,"938":1,"939":1,"971":1,"1042":1,"1044":1,"1116":1,"1118":2,"1232":1,"1237":1,"1270":1,"1286":3,"1290":1,"1300":4,"1301":1,"1323":3,"1342":1,"1350":1,"1359":7,"1380":1,"1389":1,"1396":5,"1402":2,"1406":1,"1416":2,"1436":6,"1454":1,"1467":5,"1481":1,"1484":1,"1638":1,"1640":1,"1641":1,"1765":1,"1808":2,"1874":1,"1893":1,"1931":1,"1938":1,"1950":1,"1982":1,"1996":2,"2046":1,"2101":1,"2126":1,"2129":1,"2142":1,"2193":1,"2194":1,"2218":1}}],["anything",{"0":{"1696":1},"3":{"0":2,"21":1,"54":1,"59":1,"109":1,"125":1,"136":1,"170":1,"201":1,"218":1,"225":1,"235":1,"265":1,"284":1,"291":1,"333":1,"335":1,"340":1,"350":1,"353":1,"370":1,"373":1,"380":2,"384":1,"402":1,"407":1,"415":1,"434":1,"439":1,"442":1,"518":1,"524":1,"546":1,"558":2,"566":1,"583":1,"585":1,"592":2,"611":1,"620":1,"626":1,"633":1,"642":1,"651":1,"659":1,"665":1,"676":1,"681":1,"696":1,"715":1,"717":1,"725":1,"731":1,"749":1,"751":1,"756":2,"766":1,"768":1,"774":1,"776":1,"790":1,"793":1,"821":1,"826":2,"827":1,"876":2,"897":1,"904":1,"907":1,"922":1,"926":1,"931":1,"938":1,"982":1,"988":1,"990":2,"995":1,"1018":1,"1026":1,"1048":1,"1052":1,"1066":1,"1075":1,"1091":2,"1093":1,"1100":2,"1101":1,"1118":1,"1124":1,"1126":2,"1129":1,"1133":1,"1134":1,"1175":2,"1184":1,"1193":1,"1212":1,"1228":2,"1229":5,"1233":1,"1237":5,"1243":1,"1244":1,"1247":3,"1251":1,"1259":8,"1268":1,"1270":9,"1271":1,"1278":1,"1285":1,"1286":32,"1289":1,"1290":1,"1293":1,"1300":23,"1301":5,"1304":2,"1307":1,"1308":1,"1309":2,"1311":23,"1312":4,"1323":31,"1324":30,"1326":1,"1327":2,"1332":2,"1339":20,"1343":2,"1350":9,"1352":1,"1359":42,"1362":1,"1369":4,"1379":3,"1380":2,"1385":1,"1391":1,"1395":20,"1396":19,"1402":5,"1405":1,"1406":1,"1408":1,"1415":13,"1416":7,"1417":8,"1418":1,"1421":1,"1423":1,"1424":1,"1427":6,"1428":1,"1433":1,"1435":1,"1436":22,"1438":5,"1442":1,"1443":1,"1445":1,"1447":1,"1455":4,"1456":2,"1457":1,"1459":2,"1460":2,"1466":1,"1467":2,"1472":1,"1473":1,"1475":1,"1482":1,"1490":1,"1492":1,"1513":1,"1591":1,"1631":2,"1632":1,"1652":1,"1653":2,"1662":1,"1666":1,"1668":1,"1676":1,"1677":1,"1683":1,"1685":1,"1702":1,"1704":1,"1719":2,"1729":1,"1769":1,"1776":1,"1805":1,"1824":2,"1840":1,"1847":1,"1856":1,"1859":1,"1869":1,"1874":1,"1886":1,"1892":1,"1894":1,"1908":1,"1924":1,"1933":2,"1934":1,"1940":1,"1941":1,"1945":1,"1959":1,"1966":1,"1968":2,"1972":1,"1974":1,"1977":1,"1980":1,"1982":1,"1988":1,"2001":1,"2007":1,"2009":1,"2011":1,"2025":1,"2035":1,"2040":1,"2050":1,"2062":1,"2091":1,"2111":1,"2123":1,"2128":2,"2144":1,"2147":1,"2151":1,"2158":1,"2160":1,"2166":1,"2167":1,"2169":1,"2171":1,"2174":1,"2181":1,"2182":1,"2185":2,"2187":1,"2194":1,"2195":1,"2196":1,"2205":1}}],["anyway",{"0":{"1226":1,"1720":1},"3":{"0":2,"135":1,"148":1,"201":1,"538":1,"539":1,"648":1,"691":1,"733":1,"743":1,"766":2,"826":1,"827":1,"839":1,"853":1,"869":1,"883":1,"941":1,"1027":1,"1178":1,"1214":1,"1252":1,"1254":1,"1259":3,"1270":1,"1286":4,"1300":1,"1309":2,"1311":5,"1323":1,"1324":2,"1339":1,"1359":4,"1384":1,"1395":3,"1396":4,"1406":1,"1415":2,"1416":1,"1417":5,"1427":1,"1436":7,"1455":1,"1459":1,"1467":1,"1582":1,"1654":1,"1684":1,"1729":1,"1821":1,"1840":2,"1901":1,"1904":1,"1905":1,"1909":1,"1922":1,"1943":1,"1946":1,"1947":2,"1952":1,"1954":1,"1966":1,"2001":1,"2025":1,"2079":1,"2103":1,"2194":1,"2196":1}}],["anywhere",{"0":{"94":1},"3":{"0":5,"81":1,"127":1,"170":2,"237":2,"324":1,"343":2,"373":1,"413":1,"422":1,"471":1,"477":1,"483":1,"490":1,"493":1,"529":1,"556":2,"564":1,"566":1,"591":1,"633":1,"635":1,"638":1,"642":1,"665":1,"676":1,"751":1,"757":1,"790":1,"797":1,"804":2,"827":1,"837":2,"868":1,"963":1,"974":1,"1050":2,"1075":1,"1082":1,"1134":1,"1141":1,"1183":1,"1229":3,"1237":1,"1244":1,"1247":1,"1270":1,"1271":1,"1286":8,"1300":3,"1306":1,"1309":3,"1323":2,"1324":8,"1339":2,"1357":1,"1359":13,"1369":3,"1380":3,"1395":4,"1396":10,"1402":2,"1414":1,"1415":8,"1417":1,"1423":1,"1431":1,"1436":13,"1441":1,"1455":1,"1465":2,"1474":1,"1476":2,"1492":1,"1496":3,"1526":2,"1577":1,"1584":1,"1626":1,"1654":1,"1684":1,"1726":1,"1729":1,"1804":1,"1810":1,"1842":1,"1876":1,"1935":1,"2047":1,"2123":1,"2131":1,"2186":1,"2199":1,"2201":1,"2203":1}}],["anyasync",{"3":{"0":1,"549":1,"550":1,"552":1,"1259":1,"1286":6,"1815":1}}],["any",{"1":{"771":1,"772":1,"773":1,"774":1,"775":1,"776":1,"777":1,"778":1},"3":{"0":32,"21":1,"30":1,"38":1,"39":3,"42":1,"53":1,"54":1,"59":1,"71":2,"72":1,"95":2,"96":1,"98":1,"100":1,"102":1,"109":1,"122":1,"125":1,"126":2,"132":1,"135":1,"137":1,"150":2,"155":1,"159":1,"160":1,"170":1,"171":1,"175":3,"177":2,"178":2,"180":2,"186":2,"193":1,"196":1,"200":1,"201":2,"217":1,"219":1,"243":3,"248":1,"259":2,"265":5,"284":1,"290":2,"300":1,"303":1,"305":1,"310":1,"318":4,"330":2,"333":1,"341":2,"342":1,"343":1,"358":1,"359":4,"361":2,"365":3,"370":3,"372":1,"374":1,"380":1,"384":1,"386":1,"387":2,"388":1,"397":1,"402":1,"405":1,"412":1,"415":1,"418":1,"427":1,"428":1,"434":1,"438":1,"448":2,"449":1,"459":2,"460":1,"461":1,"463":1,"465":2,"468":1,"469":1,"470":2,"477":1,"481":1,"486":1,"487":1,"497":1,"500":1,"507":1,"527":2,"536":1,"538":1,"540":1,"543":1,"545":2,"549":1,"550":2,"556":1,"564":1,"566":1,"573":1,"576":1,"583":4,"586":1,"597":1,"599":2,"601":1,"602":1,"609":1,"611":1,"618":2,"626":3,"627":1,"633":1,"648":1,"657":1,"672":1,"698":2,"700":1,"702":1,"707":2,"708":1,"709":1,"715":1,"723":1,"725":2,"733":1,"740":2,"741":3,"749":5,"750":1,"751":3,"757":2,"758":1,"766":2,"768":2,"771":1,"773":2,"774":1,"775":1,"776":3,"782":1,"790":3,"798":1,"799":1,"800":2,"801":1,"802":1,"803":2,"804":1,"809":1,"813":1,"818":1,"819":2,"826":2,"827":3,"833":1,"838":2,"845":1,"853":1,"869":1,"872":2,"881":2,"883":1,"891":2,"897":1,"904":1,"905":2,"906":1,"912":1,"921":1,"931":2,"939":1,"944":1,"945":1,"946":1,"948":1,"954":1,"963":1,"964":2,"971":1,"972":2,"979":1,"980":2,"981":1,"982":2,"986":1,"987":1,"988":1,"991":1,"1004":1,"1011":1,"1014":2,"1018":7,"1025":1,"1026":2,"1033":2,"1050":3,"1051":2,"1052":1,"1055":1,"1059":1,"1061":1,"1066":2,"1067":2,"1068":1,"1075":1,"1083":2,"1089":1,"1090":1,"1091":1,"1093":4,"1107":2,"1108":1,"1111":1,"1116":3,"1117":1,"1124":1,"1133":1,"1135":1,"1160":1,"1163":1,"1168":3,"1169":1,"1175":2,"1179":1,"1184":6,"1191":1,"1196":1,"1212":3,"1214":1,"1217":1,"1218":1,"1223":1,"1224":1,"1227":1,"1229":4,"1231":2,"1236":1,"1237":15,"1240":2,"1241":5,"1243":1,"1244":1,"1245":1,"1247":20,"1249":1,"1252":1,"1255":1,"1259":14,"1270":20,"1271":11,"1275":1,"1276":1,"1278":5,"1280":1,"1281":3,"1284":1,"1286":78,"1291":1,"1294":1,"1296":1,"1297":1,"1300":69,"1301":9,"1302":1,"1304":1,"1306":1,"1307":1,"1308":1,"1309":25,"1310":2,"1311":53,"1312":4,"1315":4,"1318":1,"1320":1,"1323":50,"1324":90,"1332":1,"1333":1,"1335":1,"1336":4,"1338":3,"1339":42,"1343":2,"1345":1,"1347":1,"1350":19,"1352":2,"1353":1,"1357":1,"1358":2,"1359":113,"1362":1,"1364":1,"1366":2,"1369":11,"1371":1,"1372":1,"1373":3,"1376":1,"1380":14,"1383":1,"1389":1,"1392":2,"1395":52,"1396":67,"1398":1,"1401":1,"1402":26,"1405":1,"1406":2,"1408":1,"1411":1,"1414":1,"1415":26,"1416":10,"1417":62,"1419":1,"1422":3,"1423":2,"1424":1,"1426":1,"1427":14,"1429":1,"1430":1,"1431":7,"1436":145,"1438":9,"1439":1,"1441":2,"1442":3,"1443":7,"1444":1,"1445":3,"1447":1,"1448":1,"1451":1,"1453":1,"1454":3,"1455":10,"1456":3,"1457":1,"1459":2,"1460":1,"1463":1,"1465":1,"1466":1,"1467":18,"1468":1,"1471":1,"1472":1,"1473":2,"1474":2,"1475":1,"1476":1,"1478":2,"1481":2,"1484":1,"1488":7,"1489":3,"1490":2,"1491":1,"1492":1,"1496":1,"1508":1,"1521":1,"1525":1,"1526":7,"1534":1,"1535":1,"1536":1,"1544":1,"1545":1,"1548":1,"1553":2,"1572":1,"1575":1,"1576":1,"1577":4,"1585":2,"1589":2,"1591":7,"1596":3,"1599":1,"1609":1,"1610":1,"1611":2,"1626":1,"1627":1,"1631":3,"1632":6,"1634":1,"1635":2,"1636":1,"1638":1,"1639":2,"1640":1,"1641":13,"1644":1,"1648":2,"1649":1,"1653":2,"1661":1,"1662":1,"1663":2,"1664":1,"1666":1,"1667":2,"1668":1,"1678":1,"1682":1,"1686":2,"1688":1,"1690":1,"1698":1,"1710":1,"1714":1,"1723":1,"1727":3,"1731":1,"1734":1,"1743":1,"1744":1,"1748":1,"1750":1,"1760":1,"1761":1,"1765":4,"1767":1,"1768":3,"1769":1,"1771":1,"1773":1,"1776":1,"1781":1,"1790":1,"1793":1,"1794":1,"1799":1,"1802":2,"1807":2,"1810":1,"1815":2,"1817":2,"1821":1,"1822":1,"1825":1,"1827":1,"1828":1,"1831":1,"1834":2,"1836":1,"1838":1,"1840":3,"1843":1,"1846":1,"1849":2,"1851":1,"1853":1,"1856":1,"1857":2,"1862":1,"1868":1,"1871":1,"1873":1,"1875":1,"1877":1,"1881":3,"1883":1,"1886":1,"1889":1,"1892":1,"1898":2,"1899":1,"1902":3,"1903":1,"1905":2,"1910":2,"1911":1,"1912":2,"1916":1,"1918":1,"1919":1,"1922":2,"1923":1,"1924":2,"1929":1,"1930":2,"1933":4,"1936":1,"1937":1,"1941":2,"1945":2,"1950":1,"1959":1,"1962":1,"1963":1,"1965":2,"1972":1,"1973":1,"1975":1,"1978":1,"1979":1,"1982":1,"1985":1,"1988":2,"1990":1,"1991":1,"1992":2,"1995":4,"1998":2,"2001":2,"2003":1,"2007":1,"2010":1,"2015":1,"2017":1,"2018":1,"2022":1,"2026":3,"2029":1,"2031":1,"2033":1,"2039":1,"2040":1,"2044":3,"2046":2,"2050":1,"2058":1,"2061":1,"2064":1,"2065":2,"2066":1,"2068":2,"2069":1,"2072":1,"2076":2,"2082":1,"2084":1,"2085":1,"2087":1,"2088":1,"2093":1,"2099":1,"2103":1,"2109":2,"2110":1,"2125":1,"2130":2,"2133":3,"2134":2,"2135":1,"2136":1,"2141":2,"2142":1,"2144":3,"2145":2,"2148":2,"2152":1,"2155":2,"2158":1,"2162":1,"2166":3,"2168":1,"2171":3,"2173":2,"2177":1,"2181":3,"2182":1,"2192":1,"2194":1,"2202":1,"2203":1,"2205":2,"2234":1,"2241":1}}],["an",{"0":{"1218":1,"1224":1,"1233":1,"1250":1,"1274":1,"1279":1,"1305":1,"1686":1,"1858":1,"1871":1,"1935":1,"1962":1,"1968":1,"1988":1,"2001":1,"2055":1,"2076":1,"2138":1,"2168":1,"2177":1,"2191":1},"1":{"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1,"181":1,"182":1,"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"613":1,"614":1,"730":1,"731":1,"732":1,"733":1,"734":1,"735":1,"736":1,"737":1,"771":1,"772":1,"773":1,"774":1,"775":1,"776":1,"777":1,"778":1,"936":1,"937":1,"938":1,"939":1,"940":1,"941":1,"942":1,"1001":1,"1002":1,"1003":1,"1004":1,"1005":1,"1006":1,"1007":1,"1008":1,"1047":1,"1048":1,"1049":1,"1050":1,"1051":1,"1052":1,"1053":1,"1054":1,"1055":1,"1080":1,"1081":1,"1082":1,"1083":1,"1084":1,"1085":1,"1086":1,"1087":1,"1158":1,"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1,"1726":1,"1727":1,"1728":1,"1729":1,"1730":1,"1731":1,"1835":1,"1836":1,"1837":1,"1838":1,"1839":1,"1840":1,"1841":1,"1842":1,"1843":1,"1844":1,"1845":1,"1846":1,"1887":1,"1888":1,"1889":1,"1890":1,"1891":1,"1892":1},"3":{"0":231,"1":1,"10":1,"15":3,"17":1,"18":1,"19":1,"20":4,"21":3,"22":2,"23":1,"24":15,"26":4,"27":6,"31":7,"33":1,"37":1,"39":8,"41":5,"42":2,"46":1,"47":1,"48":1,"53":2,"57":1,"62":5,"66":1,"67":1,"68":1,"71":2,"72":8,"73":3,"74":3,"76":1,"77":1,"78":5,"79":1,"81":7,"85":2,"86":1,"87":1,"92":2,"93":2,"94":2,"95":5,"96":4,"97":1,"99":3,"100":7,"101":1,"102":2,"103":2,"107":1,"108":2,"109":30,"110":5,"111":6,"113":1,"115":3,"116":1,"117":2,"120":1,"121":1,"122":6,"125":1,"126":1,"128":1,"130":1,"131":1,"132":2,"135":14,"136":4,"137":1,"139":1,"141":1,"145":1,"147":2,"150":3,"155":3,"156":1,"157":13,"158":1,"159":2,"160":8,"164":3,"165":3,"166":4,"167":3,"168":2,"170":2,"171":1,"172":1,"173":1,"174":1,"175":7,"176":4,"177":2,"178":3,"179":2,"181":2,"184":1,"185":2,"186":6,"187":1,"188":1,"189":5,"194":1,"195":4,"196":1,"197":1,"199":1,"200":4,"201":8,"202":4,"203":2,"206":5,"207":3,"208":1,"209":2,"212":2,"213":1,"214":4,"215":2,"216":2,"217":1,"219":2,"223":2,"224":2,"225":5,"227":1,"228":1,"229":1,"230":5,"233":2,"235":4,"236":1,"237":3,"240":1,"241":3,"242":1,"243":12,"245":6,"246":3,"248":3,"249":2,"250":1,"251":1,"252":1,"254":2,"255":10,"256":3,"258":4,"259":1,"260":1,"261":2,"265":15,"266":2,"267":2,"273":2,"274":1,"280":4,"281":1,"282":1,"283":5,"284":4,"285":1,"290":1,"291":1,"292":1,"293":3,"295":2,"296":1,"298":1,"299":1,"300":2,"301":1,"303":3,"305":4,"309":2,"312":2,"314":1,"317":1,"318":12,"319":3,"320":2,"321":1,"322":1,"324":3,"325":8,"326":1,"328":3,"329":1,"330":2,"331":1,"332":3,"333":2,"335":5,"336":1,"337":2,"340":2,"341":6,"342":2,"343":6,"344":1,"345":1,"348":3,"349":2,"350":15,"351":2,"352":4,"353":13,"358":3,"359":8,"360":1,"361":5,"363":1,"364":1,"365":1,"369":1,"370":4,"371":3,"372":3,"373":4,"375":1,"376":1,"378":1,"379":1,"380":2,"381":1,"382":1,"384":2,"386":1,"387":2,"388":4,"390":7,"391":5,"397":2,"398":4,"400":3,"402":2,"403":2,"404":3,"405":2,"407":3,"408":1,"409":1,"413":3,"415":1,"418":2,"420":4,"422":3,"423":2,"424":1,"425":1,"426":3,"427":4,"428":3,"430":1,"433":1,"434":1,"435":5,"438":1,"440":6,"443":2,"444":5,"446":1,"448":5,"450":1,"451":1,"452":1,"454":1,"458":2,"459":8,"461":4,"463":1,"465":4,"466":1,"468":1,"469":1,"470":1,"471":1,"472":2,"474":1,"475":1,"476":1,"481":1,"483":1,"484":1,"486":4,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"497":2,"499":4,"500":2,"501":2,"506":4,"507":8,"508":2,"509":2,"513":2,"514":1,"517":4,"518":4,"519":1,"520":1,"522":2,"523":1,"528":2,"529":1,"530":6,"534":6,"535":3,"536":8,"537":4,"538":5,"539":7,"540":1,"543":4,"544":4,"545":11,"546":3,"547":1,"548":1,"549":13,"551":3,"555":2,"556":8,"558":1,"559":1,"564":9,"565":1,"566":5,"571":2,"572":5,"573":1,"574":1,"577":2,"578":2,"582":1,"583":14,"584":1,"585":6,"586":5,"590":1,"591":3,"592":1,"598":2,"599":6,"601":4,"602":2,"606":1,"607":1,"608":7,"609":12,"610":1,"611":2,"612":4,"618":1,"619":1,"624":2,"626":6,"627":5,"628":4,"631":1,"632":1,"633":8,"634":2,"635":2,"639":1,"640":5,"642":2,"648":2,"649":5,"651":2,"656":3,"657":10,"658":4,"660":3,"661":1,"664":3,"665":6,"666":3,"672":2,"673":2,"674":12,"676":2,"677":1,"681":4,"682":6,"683":3,"689":9,"690":5,"691":3,"692":11,"696":4,"697":2,"698":8,"699":2,"700":3,"701":2,"702":3,"706":5,"707":5,"708":5,"709":1,"713":1,"714":3,"715":6,"716":2,"717":7,"718":2,"723":4,"724":3,"725":15,"726":3,"727":8,"729":1,"730":1,"731":1,"732":2,"733":5,"734":3,"735":2,"740":3,"741":7,"742":7,"743":6,"745":1,"748":2,"749":4,"756":1,"757":4,"758":1,"759":1,"760":1,"761":2,"764":1,"765":1,"766":5,"767":5,"768":8,"769":2,"771":1,"773":1,"774":2,"776":4,"781":2,"782":6,"783":4,"784":2,"789":5,"790":14,"791":3,"792":4,"793":5,"794":2,"795":1,"797":1,"798":2,"799":9,"802":1,"803":1,"804":1,"805":1,"806":1,"809":4,"810":3,"811":3,"813":5,"815":1,"817":3,"818":2,"819":9,"820":3,"821":4,"823":2,"825":3,"826":3,"827":23,"828":2,"829":10,"830":1,"831":2,"832":1,"833":4,"838":5,"839":3,"840":1,"841":1,"845":3,"846":2,"847":2,"848":5,"849":3,"852":1,"853":6,"854":6,"855":2,"856":4,"857":3,"859":3,"860":5,"861":6,"862":3,"863":1,"864":1,"868":2,"869":2,"870":2,"871":4,"874":1,"876":1,"880":2,"881":7,"882":2,"883":2,"888":2,"889":6,"890":2,"891":2,"896":2,"897":12,"898":2,"899":1,"901":1,"903":2,"904":3,"905":23,"906":4,"907":4,"908":2,"909":1,"912":2,"913":4,"914":7,"915":4,"916":3,"917":1,"918":1,"920":2,"921":3,"922":5,"923":1,"924":3,"926":11,"930":1,"931":2,"932":4,"933":7,"936":1,"938":4,"939":3,"941":1,"945":4,"946":6,"947":6,"948":9,"953":1,"954":4,"959":1,"960":1,"963":3,"964":7,"965":3,"966":1,"971":1,"972":5,"973":1,"974":2,"975":1,"979":1,"980":8,"981":3,"982":3,"988":13,"989":3,"990":1,"992":1,"995":1,"996":9,"997":1,"998":1,"999":2,"1001":1,"1003":1,"1004":3,"1005":2,"1006":2,"1012":4,"1013":3,"1016":1,"1017":6,"1018":14,"1019":6,"1020":8,"1022":1,"1024":2,"1025":1,"1026":9,"1027":3,"1028":5,"1029":1,"1032":1,"1033":5,"1034":9,"1035":2,"1037":3,"1041":3,"1042":10,"1043":4,"1044":4,"1045":2,"1046":2,"1047":1,"1049":3,"1050":13,"1051":4,"1052":5,"1053":1,"1055":2,"1058":5,"1059":13,"1060":2,"1061":3,"1066":3,"1067":16,"1068":2,"1069":1,"1074":1,"1075":2,"1077":2,"1078":1,"1079":1,"1080":1,"1082":3,"1083":3,"1084":3,"1085":2,"1089":5,"1090":4,"1091":18,"1092":5,"1093":5,"1095":1,"1096":1,"1099":2,"1100":6,"1101":2,"1102":2,"1107":4,"1108":4,"1109":3,"1115":5,"1116":17,"1117":4,"1118":4,"1119":1,"1123":1,"1124":6,"1125":1,"1126":5,"1133":8,"1134":2,"1135":4,"1140":7,"1141":1,"1142":7,"1143":3,"1144":1,"1145":2,"1147":1,"1150":5,"1151":1,"1152":4,"1153":1,"1154":1,"1155":5,"1157":1,"1158":1,"1161":10,"1162":4,"1163":3,"1164":2,"1167":1,"1168":11,"1169":1,"1170":8,"1171":1,"1174":2,"1175":5,"1176":4,"1177":5,"1178":2,"1179":1,"1183":2,"1184":8,"1185":2,"1186":1,"1187":2,"1188":2,"1190":2,"1191":1,"1196":1,"1210":2,"1212":56,"1214":3,"1215":1,"1217":3,"1219":3,"1220":7,"1221":3,"1222":3,"1223":1,"1224":3,"1225":3,"1228":6,"1229":70,"1230":1,"1231":10,"1232":4,"1233":9,"1234":5,"1235":1,"1236":11,"1237":137,"1238":2,"1239":13,"1240":3,"1241":14,"1242":8,"1243":10,"1244":7,"1245":4,"1246":4,"1247":179,"1248":3,"1249":9,"1250":4,"1251":1,"1252":9,"1253":4,"1254":3,"1255":2,"1256":11,"1257":5,"1258":5,"1259":160,"1260":3,"1261":2,"1262":5,"1263":10,"1264":8,"1265":10,"1266":2,"1267":2,"1268":4,"1269":11,"1270":236,"1271":56,"1272":3,"1273":7,"1274":13,"1275":12,"1276":9,"1277":3,"1278":13,"1279":8,"1280":9,"1281":9,"1282":5,"1283":7,"1284":1,"1285":8,"1286":642,"1287":2,"1288":9,"1289":10,"1290":13,"1291":4,"1292":5,"1293":13,"1294":5,"1295":3,"1296":2,"1297":13,"1298":6,"1299":4,"1300":540,"1301":79,"1302":3,"1303":4,"1304":7,"1305":4,"1306":3,"1307":6,"1308":8,"1309":146,"1310":34,"1311":382,"1312":66,"1314":3,"1315":8,"1316":11,"1317":9,"1318":14,"1319":1,"1320":8,"1321":1,"1322":8,"1323":417,"1324":641,"1325":1,"1326":3,"1328":5,"1329":1,"1330":2,"1331":3,"1332":6,"1333":8,"1334":5,"1335":2,"1336":5,"1337":5,"1338":9,"1339":245,"1340":4,"1342":18,"1343":9,"1344":10,"1345":2,"1346":1,"1347":3,"1348":3,"1349":6,"1350":318,"1351":3,"1352":11,"1353":11,"1354":1,"1355":9,"1356":2,"1357":6,"1358":15,"1359":1082,"1361":1,"1362":4,"1363":1,"1364":2,"1365":3,"1366":11,"1367":5,"1368":1,"1369":114,"1371":3,"1372":5,"1373":6,"1374":1,"1375":5,"1376":3,"1377":1,"1378":4,"1379":7,"1380":176,"1381":2,"1382":6,"1383":3,"1384":3,"1387":3,"1389":12,"1390":5,"1391":11,"1392":5,"1393":3,"1394":2,"1395":478,"1396":692,"1397":3,"1398":8,"1399":9,"1400":2,"1401":7,"1402":202,"1403":3,"1404":1,"1405":4,"1406":17,"1408":6,"1409":2,"1410":3,"1411":5,"1412":1,"1413":2,"1414":7,"1415":362,"1416":64,"1417":230,"1418":5,"1419":2,"1420":4,"1421":8,"1422":3,"1423":11,"1424":2,"1425":3,"1427":77,"1429":2,"1430":9,"1431":8,"1432":6,"1433":7,"1435":6,"1436":944,"1438":115,"1440":2,"1441":11,"1442":6,"1443":16,"1444":3,"1445":2,"1446":2,"1447":11,"1449":4,"1451":2,"1453":14,"1454":9,"1455":39,"1456":6,"1457":2,"1458":5,"1459":16,"1460":6,"1463":2,"1464":1,"1465":6,"1466":3,"1467":69,"1469":1,"1470":2,"1471":2,"1472":7,"1473":4,"1474":7,"1475":15,"1476":14,"1477":2,"1478":6,"1479":3,"1481":1,"1482":2,"1484":3,"1487":1,"1488":22,"1489":25,"1490":8,"1491":3,"1492":13,"1493":1,"1496":36,"1498":1,"1500":2,"1503":1,"1504":1,"1508":3,"1512":2,"1524":9,"1525":2,"1526":28,"1527":1,"1530":3,"1531":7,"1532":4,"1533":2,"1534":9,"1536":1,"1537":1,"1540":1,"1541":1,"1543":1,"1544":1,"1545":2,"1546":1,"1547":5,"1553":7,"1554":1,"1561":2,"1567":1,"1568":1,"1569":1,"1571":1,"1572":3,"1574":1,"1575":5,"1576":3,"1577":44,"1578":1,"1580":1,"1581":1,"1582":5,"1583":1,"1585":5,"1588":1,"1589":5,"1590":1,"1591":17,"1592":2,"1595":1,"1596":8,"1597":1,"1598":3,"1599":3,"1600":5,"1602":2,"1608":1,"1611":3,"1613":1,"1621":1,"1626":2,"1627":16,"1629":5,"1630":6,"1631":38,"1632":16,"1633":1,"1634":3,"1635":2,"1636":1,"1637":14,"1638":12,"1639":15,"1640":15,"1641":28,"1642":1,"1643":2,"1646":1,"1647":1,"1649":3,"1650":2,"1651":9,"1653":6,"1654":6,"1655":1,"1656":2,"1657":1,"1658":1,"1659":1,"1661":3,"1662":6,"1663":1,"1664":8,"1665":3,"1666":7,"1667":5,"1668":3,"1669":7,"1670":3,"1671":3,"1672":2,"1673":6,"1674":2,"1675":6,"1677":5,"1678":1,"1681":1,"1683":2,"1684":6,"1685":7,"1686":9,"1687":3,"1688":1,"1689":5,"1690":2,"1692":1,"1697":1,"1698":3,"1699":1,"1700":1,"1701":3,"1702":4,"1703":1,"1704":1,"1705":1,"1706":1,"1707":2,"1708":6,"1718":5,"1719":2,"1720":3,"1721":1,"1723":2,"1724":5,"1726":1,"1727":18,"1728":3,"1729":2,"1730":2,"1731":1,"1734":2,"1735":1,"1736":1,"1747":1,"1748":3,"1749":6,"1750":4,"1751":1,"1755":4,"1758":3,"1759":1,"1763":1,"1764":10,"1765":18,"1767":6,"1768":4,"1769":2,"1770":1,"1771":3,"1772":1,"1773":2,"1774":1,"1776":8,"1778":1,"1781":1,"1782":1,"1783":1,"1784":1,"1785":1,"1787":1,"1790":6,"1794":2,"1795":2,"1797":1,"1799":3,"1800":2,"1801":2,"1802":2,"1803":5,"1804":5,"1805":11,"1806":2,"1807":2,"1808":1,"1809":4,"1810":17,"1811":2,"1812":3,"1813":1,"1815":23,"1816":2,"1817":6,"1820":1,"1821":3,"1822":3,"1823":4,"1824":1,"1825":9,"1826":1,"1827":1,"1829":4,"1830":7,"1831":3,"1832":1,"1834":1,"1835":2,"1837":2,"1838":2,"1839":3,"1840":4,"1841":4,"1842":4,"1843":6,"1844":2,"1845":4,"1846":1,"1848":1,"1849":3,"1851":8,"1853":3,"1854":2,"1855":4,"1856":7,"1857":2,"1858":1,"1859":5,"1860":1,"1861":1,"1862":3,"1864":1,"1865":4,"1867":2,"1868":1,"1869":2,"1871":2,"1873":2,"1874":1,"1875":2,"1876":7,"1877":4,"1878":2,"1880":2,"1881":4,"1882":3,"1883":5,"1885":1,"1886":4,"1887":3,"1888":4,"1889":9,"1890":1,"1891":1,"1892":5,"1894":1,"1896":4,"1897":4,"1898":11,"1899":2,"1900":2,"1901":1,"1902":10,"1903":1,"1904":5,"1905":3,"1906":1,"1907":1,"1908":9,"1909":9,"1910":5,"1911":3,"1912":5,"1915":1,"1916":3,"1917":1,"1918":2,"1919":2,"1920":3,"1921":2,"1922":9,"1923":10,"1924":3,"1925":2,"1926":3,"1927":17,"1928":3,"1929":7,"1930":2,"1931":2,"1932":2,"1933":11,"1934":2,"1935":3,"1937":1,"1938":2,"1939":1,"1940":5,"1941":4,"1942":1,"1943":2,"1944":2,"1945":5,"1946":4,"1947":3,"1948":7,"1949":1,"1950":9,"1951":1,"1952":3,"1953":4,"1954":5,"1955":2,"1956":2,"1958":1,"1959":5,"1960":4,"1961":3,"1962":4,"1963":3,"1964":4,"1965":10,"1966":5,"1967":1,"1968":5,"1970":2,"1971":3,"1972":8,"1973":3,"1974":1,"1975":2,"1976":7,"1977":15,"1978":8,"1979":7,"1981":1,"1982":11,"1983":1,"1984":5,"1985":4,"1987":1,"1988":10,"1990":2,"1991":4,"1992":3,"1993":2,"1994":2,"1995":14,"1996":11,"1997":7,"1998":6,"1999":3,"2000":5,"2001":9,"2002":12,"2003":5,"2004":1,"2005":3,"2006":2,"2007":1,"2008":2,"2009":2,"2011":2,"2012":1,"2013":4,"2014":2,"2017":1,"2018":1,"2019":2,"2020":2,"2021":1,"2023":1,"2025":2,"2026":3,"2028":1,"2029":3,"2031":5,"2032":1,"2033":3,"2034":3,"2035":3,"2036":1,"2037":1,"2039":7,"2042":1,"2044":9,"2045":3,"2046":4,"2047":10,"2048":7,"2049":1,"2050":1,"2052":1,"2056":7,"2057":5,"2058":2,"2059":1,"2060":2,"2061":1,"2062":1,"2063":1,"2064":11,"2065":4,"2066":4,"2067":2,"2068":4,"2069":1,"2070":1,"2071":3,"2072":3,"2074":4,"2075":2,"2076":6,"2077":5,"2078":1,"2079":4,"2080":3,"2081":2,"2082":1,"2084":1,"2085":11,"2087":3,"2088":5,"2089":1,"2091":5,"2092":4,"2094":2,"2096":2,"2097":1,"2098":2,"2099":1,"2100":1,"2101":4,"2102":2,"2103":1,"2106":2,"2107":2,"2108":1,"2109":2,"2112":3,"2113":1,"2114":1,"2115":2,"2116":2,"2117":1,"2118":1,"2119":3,"2121":1,"2123":2,"2124":1,"2125":4,"2126":4,"2127":4,"2128":9,"2129":2,"2130":8,"2133":2,"2134":1,"2135":1,"2136":1,"2137":2,"2138":2,"2139":2,"2140":2,"2141":2,"2142":2,"2143":1,"2144":4,"2145":2,"2146":4,"2147":4,"2148":6,"2149":4,"2150":3,"2151":5,"2152":3,"2153":2,"2154":3,"2155":2,"2156":1,"2157":1,"2158":11,"2159":4,"2160":11,"2162":4,"2163":3,"2164":3,"2165":4,"2167":6,"2168":9,"2169":8,"2170":7,"2171":8,"2172":2,"2173":3,"2174":1,"2175":1,"2176":2,"2177":11,"2178":3,"2179":5,"2180":2,"2181":3,"2182":8,"2183":3,"2184":5,"2185":3,"2187":4,"2188":5,"2190":6,"2191":1,"2192":4,"2193":7,"2194":7,"2195":11,"2196":2,"2197":2,"2198":7,"2199":6,"2200":4,"2201":7,"2202":2,"2203":4,"2204":3,"2205":5,"2206":1,"2208":2,"2209":1,"2216":1,"2222":5,"2223":2,"2228":1,"2230":2,"2232":5,"2234":39,"2240":1,"2241":7,"2243":1}}],["andhasnowcag21aaviolations",{"3":{"1436":3}}],["andkeepstheformwitharesend",{"3":{"1436":1}}],["andaneditableoneisnot",{"3":{"1436":1}}],["andallowedsharedcodes",{"3":{"1436":3}}],["andalso",{"2":{"1859":1},"3":{"545":1,"549":1,"1239":1,"1247":5,"1815":1,"1859":1}}],["anddoesnotoverflowhorizontally",{"3":{"1436":1}}],["andbesealed",{"3":{"1436":1}}],["andisreportedsupported",{"3":{"1436":1}}],["andisreporteddeprecated",{"3":{"1436":1}}],["anding",{"3":{"546":1,"1247":1,"1359":1,"1395":1}}],["andcatchesawrappedregistration",{"3":{"1436":1}}],["andpassesthroughnonpii",{"3":{"1436":1}}],["andpinsanintermediatebase",{"3":{"1436":3}}],["andeverydocumentedroute",{"3":{"1436":1}}],["anded",{"3":{"545":1,"1239":2,"1247":3,"1353":2,"1359":7,"1375":1,"1380":1,"1396":1,"1438":1,"1666":1,"1815":1}}],["andtheapisharestheirenvironment",{"3":{"1436":1}}],["andneveranadministrativecommand",{"3":{"1339":1}}],["andsignaturestherepodoesnotown",{"3":{"1436":1}}],["ands",{"3":{"545":1,"1247":3,"1286":1,"1311":1,"1359":5,"1380":3,"1385":1,"1395":2,"1396":5,"1815":4}}],["andspecification",{"2":{"319":1,"550":1},"3":{"319":1,"545":2,"549":3,"550":1,"552":1,"1199":7,"1203":1,"1207":1,"1239":1,"1247":13,"1359":2,"1380":2,"1815":2,"1995":1}}],["androidsigningkeypass",{"2":{"1481":1},"3":{"1481":1}}],["androidsigningstorepass",{"2":{"1481":1},"3":{"1481":1}}],["androidpublicwebhost",{"3":{"1436":1}}],["androidpackagename",{"2":{"424":1,"425":1,"426":1,"428":1,"429":1},"3":{"424":1,"425":1,"426":1,"428":1,"429":1,"1311":1}}],["androidx",{"3":{"1417":3}}],["androidcertfingerprints",{"2":{"423":1,"424":1,"425":1,"426":1,"428":1,"429":1},"3":{"418":1,"423":2,"424":2,"425":1,"426":1,"428":2,"429":2,"1311":1}}],["androidmanifest",{"3":{"418":1,"423":1,"426":1,"1416":1,"1436":1}}],["android",{"0":{"1479":1},"2":{"1481":1},"3":{"0":3,"265":1,"412":1,"413":2,"418":11,"419":1,"420":1,"422":2,"423":5,"424":1,"425":1,"426":5,"427":3,"428":2,"429":2,"433":1,"434":2,"436":2,"681":1,"682":1,"1207":6,"1212":1,"1311":7,"1323":1,"1324":4,"1347":1,"1359":1,"1381":1,"1396":3,"1416":69,"1417":41,"1436":6,"1438":1,"1454":1,"1455":1,"1456":1,"1459":4,"1479":3,"1481":7,"1513":1,"1526":3,"1531":3,"1532":1,"1591":1,"1599":1,"1630":1,"1660":1,"1666":1,"1669":2,"1773":1,"1936":1,"2080":1,"2122":1,"2232":1}}],["and",{"0":{"93":1,"95":1,"99":1,"137":1,"138":1,"141":1,"374":1,"452":1,"539":1,"577":1,"720":1,"813":1,"1128":1,"1214":1,"1221":1,"1225":1,"1226":1,"1242":1,"1247":1,"1251":1,"1255":1,"1256":2,"1257":1,"1258":1,"1263":1,"1267":1,"1270":1,"1278":1,"1281":1,"1282":1,"1283":1,"1284":1,"1285":1,"1292":1,"1297":1,"1300":1,"1303":1,"1305":1,"1307":1,"1308":1,"1314":1,"1315":1,"1316":1,"1318":1,"1328":1,"1331":1,"1332":1,"1333":1,"1336":1,"1342":1,"1345":1,"1347":1,"1348":1,"1349":1,"1353":1,"1354":1,"1355":1,"1356":1,"1359":1,"1363":1,"1364":1,"1366":1,"1367":1,"1368":1,"1375":1,"1376":1,"1377":1,"1378":1,"1379":1,"1384":1,"1385":2,"1386":1,"1391":1,"1392":1,"1394":1,"1398":1,"1399":1,"1400":1,"1401":1,"1402":1,"1405":1,"1409":1,"1410":1,"1412":1,"1413":1,"1423":1,"1427":1,"1433":1,"1436":1,"1459":1,"1473":1,"1475":1,"1478":1,"1486":1,"1490":1,"1492":1,"1520":1,"1534":1,"1585":1,"1599":1,"1648":1,"1649":1,"1652":1,"1653":1,"1654":1,"1661":1,"1664":1,"1665":1,"1667":1,"1668":1,"1669":1,"1670":1,"1671":1,"1672":1,"1673":1,"1696":1,"1707":1,"1730":1,"1769":1,"1797":1,"1805":1,"1821":1,"1831":1,"1842":1,"1870":1,"1881":1,"1889":1,"1896":1,"1910":1,"1921":1,"1934":1,"1938":1,"1945":1,"1955":1,"1962":1,"1969":1,"1988":1,"2010":1,"2011":1,"2012":1,"2014":1,"2034":1,"2037":1,"2042":1,"2055":1,"2059":2,"2063":1,"2069":1,"2092":1,"2094":1,"2099":1,"2100":1,"2104":1,"2109":1,"2122":1,"2128":1,"2139":1,"2174":1,"2178":1,"2188":1,"2192":1,"2199":1,"2201":1,"2209":1,"2210":1,"2211":1,"2212":1,"2241":1},"1":{"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1,"151":1,"152":1,"153":1,"232":1,"233":1,"234":1,"235":1,"236":1,"237":1,"238":1,"239":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"286":1,"287":1,"394":1,"395":1,"396":1,"397":1,"398":1,"399":1,"400":1,"401":1,"402":1,"403":1,"404":1,"405":1,"406":1,"407":1,"408":1,"409":1,"417":1,"418":1,"419":1,"420":1,"421":1,"422":1,"423":1,"424":1,"425":1,"426":1,"427":1,"428":1,"429":1,"430":1,"437":1,"438":1,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1,"496":1,"497":1,"498":1,"499":1,"500":1,"501":1,"502":1,"503":1,"580":1,"581":1,"582":1,"583":1,"584":1,"585":1,"586":1,"587":1,"596":1,"597":1,"598":1,"599":1,"600":1,"601":1,"602":1,"603":1,"604":1,"605":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1,"637":1,"638":1,"639":1,"640":1,"641":1,"642":1,"643":1,"644":1,"645":1,"646":1,"647":1,"648":1,"649":1,"650":1,"651":1,"652":1,"653":1,"679":1,"680":1,"681":1,"682":1,"683":1,"684":1,"685":1,"686":1,"687":1,"688":1,"689":1,"690":1,"691":1,"692":1,"693":1,"694":1,"787":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"794":1,"795":1,"816":1,"817":1,"818":1,"819":1,"820":1,"821":1,"822":1,"823":1,"824":1,"825":1,"826":1,"827":1,"828":1,"829":1,"830":1,"831":1,"832":1,"833":1,"834":1,"858":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"865":1,"866":1,"867":1,"868":1,"869":1,"870":1,"871":1,"872":1,"873":1,"874":1,"875":1,"876":1,"877":1,"985":1,"986":1,"987":1,"988":1,"989":1,"990":1,"991":1,"992":1,"1072":1,"1073":1,"1074":1,"1075":1,"1076":1,"1077":1,"1078":1,"1079":1,"1105":1,"1106":1,"1107":1,"1108":1,"1109":1,"1110":1,"1111":1,"1112":1,"1158":1,"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1,"1210":1,"1211":1,"1212":1,"1213":1,"1214":1,"1215":1,"1216":1,"1439":1,"1440":1,"1441":1,"1442":1,"1443":1,"1444":1,"1445":1,"1446":1,"1447":1,"1448":1,"1449":1,"1450":1,"1451":1,"1452":1,"1453":1,"1454":1,"1455":1,"1456":1,"1457":1,"1458":1,"1459":1,"1460":1,"1461":1,"1780":1,"1781":1,"1782":1,"1783":1,"1784":1,"1785":1,"1786":1,"1787":1,"1818":1,"1819":1,"1820":1,"1821":1,"1822":1,"1823":1,"1824":1,"1825":1,"1826":1,"1827":1,"1847":1,"1848":1,"1849":1,"1850":1,"1851":1,"1852":1,"1853":1,"1878":1,"1879":1,"1880":1,"1881":1,"1882":1,"1883":1,"1884":1,"1885":1,"1886":1,"1925":1,"1926":1,"1927":1,"1928":1,"1929":1,"1930":1,"1931":1,"1932":1,"1933":1,"1934":1,"1935":1,"1936":1,"1937":1,"1938":1,"1939":1,"1940":1,"1941":1,"1973":1,"1974":1,"1975":1,"1976":1,"1977":1,"1978":1,"1979":1,"1980":1,"1981":1,"1982":1,"1983":1,"1984":1,"1985":1,"1986":1,"1987":1,"1988":1,"1989":1,"1990":1,"1991":1,"1992":1,"2030":1,"2031":1,"2032":1,"2033":1,"2034":1,"2035":1,"2036":1,"2037":1,"2038":1,"2039":1,"2062":1,"2063":1,"2064":1,"2065":1,"2066":1,"2067":1,"2068":1,"2069":1,"2070":1,"2071":1,"2083":2,"2084":2,"2085":2,"2086":2,"2087":2,"2088":2,"2111":1,"2112":1,"2113":1,"2114":1,"2115":1,"2116":1,"2117":1,"2149":1,"2150":1,"2151":1,"2152":1,"2153":1,"2154":1,"2155":1,"2156":1,"2157":1,"2158":1,"2159":1,"2160":1,"2161":1,"2162":1,"2163":1,"2164":1,"2165":1,"2166":1,"2167":1,"2168":1,"2169":1,"2170":1,"2171":1,"2183":1,"2184":1,"2185":1,"2186":1,"2187":1,"2188":1,"2189":1,"2190":1,"2191":1,"2192":1,"2193":1,"2194":1,"2195":1,"2196":1,"2197":1,"2198":1,"2199":1,"2200":1,"2201":1,"2202":1,"2203":1,"2204":1,"2205":1},"2":{"260":1,"319":1,"545":1,"1082":1,"1504":1,"1814":1,"2066":1},"3":{"0":938,"1":12,"3":1,"5":1,"10":2,"15":13,"16":1,"17":1,"18":2,"19":6,"20":9,"21":7,"22":3,"23":6,"24":29,"25":6,"26":15,"27":23,"29":2,"30":3,"31":15,"32":6,"33":6,"34":1,"35":1,"37":2,"38":4,"39":17,"40":4,"41":4,"42":10,"43":4,"47":6,"48":2,"49":2,"52":2,"53":8,"54":5,"55":2,"57":6,"58":4,"59":13,"60":5,"61":3,"62":8,"63":4,"64":1,"66":3,"67":3,"68":8,"69":3,"70":6,"71":17,"72":14,"73":4,"74":5,"76":3,"77":5,"78":5,"79":4,"80":11,"81":10,"82":2,"85":2,"86":3,"90":2,"91":11,"92":9,"93":14,"94":12,"95":14,"96":6,"97":6,"98":7,"99":7,"100":9,"101":4,"102":5,"103":2,"104":6,"105":1,"107":3,"108":2,"109":61,"110":8,"111":10,"112":4,"113":3,"115":14,"116":4,"117":11,"118":3,"120":5,"121":12,"122":17,"123":3,"124":2,"125":15,"126":18,"127":4,"128":11,"130":15,"131":2,"132":5,"133":1,"134":2,"135":63,"136":28,"137":12,"138":15,"139":23,"140":15,"141":8,"142":23,"143":4,"144":1,"145":22,"146":6,"147":11,"148":3,"149":4,"150":22,"151":3,"152":6,"153":3,"155":7,"156":2,"157":20,"158":3,"159":10,"160":20,"161":10,"162":1,"164":9,"165":3,"166":21,"167":2,"168":8,"169":2,"170":12,"171":8,"173":11,"174":5,"175":25,"176":4,"177":8,"178":19,"179":9,"180":11,"181":3,"182":7,"184":9,"185":3,"186":23,"187":5,"188":4,"189":14,"190":5,"191":1,"193":6,"194":4,"195":29,"196":2,"197":4,"198":3,"199":2,"200":11,"201":27,"202":12,"203":6,"206":5,"207":10,"208":1,"209":5,"210":1,"212":9,"213":9,"214":15,"215":5,"216":4,"217":10,"218":4,"219":18,"220":12,"221":1,"223":3,"224":2,"225":19,"226":1,"227":1,"228":3,"229":3,"230":24,"231":5,"232":1,"233":5,"234":9,"235":30,"236":2,"237":10,"238":3,"239":3,"241":10,"242":8,"243":36,"244":2,"245":20,"246":2,"247":6,"248":8,"249":4,"250":5,"251":3,"252":10,"253":5,"254":13,"255":26,"256":22,"257":20,"258":25,"259":32,"260":20,"261":18,"263":2,"264":3,"265":57,"266":5,"267":4,"268":5,"269":2,"272":2,"273":8,"274":3,"275":4,"276":5,"277":2,"278":1,"279":8,"280":6,"281":8,"282":7,"283":7,"284":5,"285":5,"286":7,"287":1,"290":6,"291":6,"292":4,"293":2,"294":1,"295":8,"296":7,"298":3,"299":1,"300":4,"301":3,"303":9,"304":2,"305":12,"306":5,"308":2,"309":4,"310":12,"311":3,"312":4,"313":1,"314":5,"316":1,"317":4,"318":29,"319":7,"320":3,"321":2,"322":4,"323":5,"324":12,"325":9,"326":11,"328":5,"329":5,"330":13,"331":5,"332":7,"333":10,"335":8,"336":3,"337":4,"339":1,"340":8,"341":27,"342":7,"343":13,"344":4,"345":6,"346":5,"348":6,"349":6,"350":35,"351":9,"352":6,"353":9,"354":4,"355":1,"358":4,"359":27,"360":10,"361":16,"363":2,"364":2,"365":16,"366":3,"368":6,"369":13,"370":14,"371":5,"372":4,"373":16,"374":8,"375":7,"376":3,"378":2,"379":5,"380":5,"381":3,"382":1,"383":4,"384":8,"386":11,"387":7,"388":10,"389":1,"390":14,"391":14,"392":10,"393":5,"394":1,"395":33,"396":6,"397":34,"398":7,"399":13,"400":9,"401":16,"402":19,"403":11,"404":9,"405":8,"406":6,"407":16,"408":9,"409":13,"411":3,"412":4,"413":23,"414":5,"415":10,"417":1,"418":17,"419":9,"420":9,"421":2,"422":7,"423":14,"424":6,"425":5,"426":11,"427":4,"428":17,"429":6,"430":4,"432":3,"433":5,"434":15,"435":6,"436":8,"437":1,"438":2,"439":4,"440":2,"441":2,"442":3,"443":15,"444":7,"446":4,"447":5,"448":24,"449":5,"450":5,"451":7,"452":5,"453":4,"454":10,"455":1,"457":3,"458":6,"459":27,"460":4,"461":7,"462":2,"463":12,"464":17,"465":15,"466":7,"468":13,"469":5,"470":10,"471":4,"472":6,"473":2,"474":6,"475":7,"476":7,"477":15,"478":5,"480":4,"481":4,"482":6,"483":4,"484":2,"486":11,"487":9,"488":8,"489":11,"490":26,"491":19,"492":23,"493":24,"494":17,"495":10,"496":1,"497":23,"498":8,"499":26,"500":7,"501":7,"502":6,"503":1,"505":2,"506":8,"507":28,"508":7,"509":6,"510":4,"511":8,"512":4,"513":8,"514":4,"516":3,"517":12,"518":13,"519":5,"520":5,"521":2,"522":12,"523":10,"524":11,"526":7,"527":8,"528":19,"529":5,"530":11,"531":5,"532":1,"534":19,"535":4,"536":53,"537":11,"538":17,"539":26,"540":10,"541":5,"543":21,"544":6,"545":43,"546":5,"547":14,"548":5,"549":46,"550":17,"551":17,"552":13,"554":12,"555":8,"556":32,"557":7,"558":8,"559":6,"560":4,"562":4,"563":4,"564":20,"565":5,"566":14,"567":3,"570":3,"571":6,"572":45,"573":2,"574":8,"575":6,"576":8,"577":10,"578":10,"579":2,"580":1,"582":7,"583":49,"584":8,"585":21,"586":5,"589":2,"590":4,"591":33,"592":9,"593":8,"594":4,"595":2,"596":1,"597":6,"598":7,"599":36,"600":6,"601":10,"602":11,"603":7,"604":7,"605":1,"607":37,"608":13,"609":60,"610":4,"611":16,"612":4,"613":4,"614":5,"615":1,"616":10,"617":6,"618":35,"619":6,"620":7,"621":7,"622":3,"624":11,"625":9,"626":62,"627":9,"628":11,"629":11,"630":5,"631":18,"632":14,"633":36,"634":7,"635":10,"636":11,"637":1,"638":12,"639":7,"640":33,"641":9,"642":15,"643":6,"644":6,"646":1,"647":4,"648":4,"649":39,"650":11,"651":6,"652":2,"655":5,"656":8,"657":51,"658":8,"659":11,"660":11,"661":1,"663":3,"664":8,"665":23,"666":8,"667":7,"668":9,"669":11,"670":1,"672":10,"673":4,"674":56,"675":4,"676":12,"677":8,"678":1,"679":1,"680":3,"681":7,"682":22,"683":10,"684":12,"685":3,"686":4,"687":1,"688":7,"689":10,"690":40,"691":19,"692":20,"693":6,"694":7,"696":17,"697":7,"698":51,"699":5,"700":10,"701":6,"702":14,"703":13,"705":3,"706":7,"707":40,"708":13,"709":11,"710":5,"711":6,"713":9,"714":4,"715":28,"716":10,"717":7,"718":2,"719":5,"720":6,"721":6,"723":5,"724":12,"725":38,"726":12,"727":13,"728":4,"729":2,"731":8,"732":5,"733":30,"734":4,"735":8,"736":6,"737":8,"739":2,"740":14,"741":30,"742":11,"743":22,"744":10,"745":8,"747":3,"748":5,"749":42,"750":7,"751":16,"752":2,"753":3,"755":4,"756":10,"757":34,"758":7,"759":11,"760":4,"761":7,"764":11,"765":12,"766":34,"767":11,"768":10,"769":4,"770":1,"773":11,"774":15,"775":8,"776":9,"777":6,"778":5,"780":9,"781":7,"782":27,"783":6,"784":7,"785":6,"786":1,"787":1,"788":1,"789":8,"790":32,"791":7,"792":15,"793":6,"794":6,"795":1,"797":11,"798":16,"799":23,"800":11,"801":8,"802":5,"803":14,"804":11,"805":7,"806":2,"808":1,"809":13,"810":13,"811":6,"812":5,"813":14,"814":1,"815":6,"816":1,"817":2,"818":12,"819":34,"820":9,"821":15,"822":5,"823":8,"824":1,"825":9,"826":20,"827":98,"828":6,"829":18,"830":11,"831":13,"832":37,"833":11,"834":7,"836":6,"837":22,"838":30,"839":12,"840":11,"841":5,"842":1,"844":3,"845":6,"846":12,"847":3,"848":6,"849":9,"850":2,"852":2,"853":7,"854":24,"855":8,"856":10,"857":12,"858":1,"859":3,"860":5,"861":27,"862":12,"863":18,"864":5,"865":2,"866":1,"867":4,"868":12,"869":20,"870":10,"871":6,"872":10,"873":8,"874":3,"875":13,"876":12,"877":11,"879":6,"880":8,"881":59,"882":8,"883":11,"884":9,"885":4,"888":4,"889":24,"890":8,"891":10,"892":6,"893":4,"896":12,"897":32,"898":6,"899":8,"900":5,"901":5,"903":7,"904":6,"905":73,"906":22,"907":24,"908":5,"909":5,"910":13,"912":4,"913":12,"914":36,"915":5,"916":11,"917":6,"918":5,"920":6,"921":12,"922":23,"923":11,"924":14,"925":4,"926":52,"927":8,"929":3,"930":10,"931":17,"932":6,"933":8,"934":1,"935":2,"937":3,"938":5,"939":11,"940":6,"941":6,"942":3,"944":2,"945":5,"946":30,"947":6,"948":4,"949":5,"950":2,"952":1,"953":11,"954":34,"955":9,"956":8,"957":5,"958":1,"959":5,"960":8,"962":2,"963":10,"964":28,"965":9,"966":7,"967":7,"968":4,"971":9,"972":28,"973":9,"974":7,"975":6,"976":2,"979":13,"980":37,"981":6,"982":13,"983":11,"984":3,"985":1,"986":5,"987":8,"988":47,"989":6,"990":8,"991":9,"992":5,"994":6,"995":8,"996":37,"997":10,"998":17,"999":9,"1000":3,"1002":1,"1003":7,"1004":40,"1005":5,"1006":9,"1007":5,"1008":2,"1010":2,"1011":12,"1012":36,"1013":4,"1014":7,"1016":18,"1017":14,"1018":90,"1019":23,"1020":19,"1021":10,"1022":3,"1024":3,"1025":8,"1026":26,"1027":10,"1028":6,"1029":5,"1030":3,"1032":2,"1033":11,"1034":39,"1035":10,"1036":8,"1037":8,"1040":2,"1041":12,"1042":26,"1043":17,"1044":16,"1045":7,"1046":1,"1048":4,"1049":17,"1050":53,"1051":22,"1052":15,"1053":4,"1054":10,"1055":9,"1057":3,"1058":13,"1059":48,"1060":8,"1061":9,"1062":7,"1063":1,"1065":1,"1066":16,"1067":34,"1068":10,"1069":11,"1070":3,"1071":1,"1072":1,"1073":6,"1074":32,"1075":25,"1076":5,"1077":5,"1078":4,"1079":6,"1081":4,"1082":15,"1083":11,"1084":4,"1085":7,"1086":3,"1087":2,"1089":17,"1090":16,"1091":75,"1092":17,"1093":22,"1094":12,"1095":9,"1096":8,"1099":11,"1100":28,"1101":6,"1102":6,"1103":5,"1104":3,"1105":1,"1107":7,"1108":13,"1109":3,"1110":3,"1111":4,"1112":3,"1114":3,"1115":14,"1116":43,"1117":18,"1118":8,"1119":7,"1120":1,"1122":2,"1123":11,"1124":42,"1125":10,"1126":8,"1127":10,"1128":6,"1129":5,"1132":12,"1133":27,"1134":5,"1135":8,"1136":2,"1137":3,"1139":3,"1140":13,"1141":3,"1142":6,"1143":2,"1144":10,"1145":2,"1146":1,"1147":2,"1149":3,"1150":10,"1151":2,"1152":5,"1153":3,"1154":9,"1155":2,"1156":2,"1157":6,"1158":1,"1160":5,"1161":25,"1162":5,"1163":4,"1164":3,"1167":6,"1168":30,"1169":6,"1170":6,"1171":3,"1173":1,"1174":5,"1175":28,"1176":7,"1177":5,"1178":5,"1179":2,"1180":2,"1182":3,"1183":8,"1184":30,"1185":10,"1186":8,"1187":10,"1188":5,"1189":3,"1190":5,"1191":12,"1192":14,"1193":3,"1194":1,"1195":3,"1196":2,"1200":4,"1201":7,"1202":29,"1203":29,"1210":1,"1211":14,"1212":168,"1213":20,"1214":9,"1215":4,"1216":4,"1217":8,"1218":9,"1219":8,"1220":17,"1221":4,"1222":7,"1223":11,"1224":3,"1225":8,"1226":3,"1227":4,"1228":11,"1229":235,"1230":21,"1231":27,"1232":13,"1233":13,"1234":30,"1235":7,"1236":16,"1237":398,"1238":16,"1239":22,"1240":15,"1241":45,"1242":24,"1243":27,"1244":29,"1245":7,"1246":11,"1247":525,"1248":9,"1249":14,"1250":4,"1251":10,"1252":20,"1253":15,"1254":8,"1255":7,"1256":18,"1257":14,"1258":8,"1259":635,"1260":22,"1261":8,"1262":14,"1263":51,"1264":19,"1265":42,"1266":11,"1267":21,"1268":6,"1269":25,"1270":881,"1271":241,"1272":11,"1273":31,"1274":24,"1275":39,"1276":31,"1277":16,"1278":32,"1279":18,"1280":25,"1281":33,"1282":16,"1283":17,"1284":22,"1285":22,"1286":2531,"1287":23,"1288":12,"1289":27,"1290":33,"1291":12,"1292":11,"1293":28,"1294":21,"1295":15,"1296":10,"1297":36,"1298":10,"1299":3,"1300":1781,"1301":336,"1302":17,"1303":12,"1304":26,"1305":10,"1306":12,"1307":21,"1308":11,"1309":597,"1310":141,"1311":1585,"1312":202,"1313":20,"1314":5,"1315":20,"1316":35,"1317":27,"1318":30,"1319":4,"1320":40,"1321":1,"1322":29,"1323":1381,"1324":2667,"1325":13,"1326":26,"1327":8,"1328":39,"1329":6,"1330":13,"1331":8,"1332":36,"1333":40,"1334":18,"1335":15,"1336":29,"1337":29,"1338":33,"1339":1199,"1340":15,"1341":14,"1342":53,"1343":19,"1344":28,"1345":11,"1346":15,"1347":43,"1348":16,"1349":19,"1350":1268,"1351":10,"1352":52,"1353":41,"1354":20,"1355":38,"1356":11,"1357":23,"1358":21,"1359":4203,"1360":9,"1361":2,"1362":33,"1363":10,"1364":21,"1365":7,"1366":47,"1367":11,"1368":14,"1369":384,"1370":7,"1371":22,"1372":17,"1373":29,"1374":12,"1375":27,"1376":11,"1377":14,"1378":19,"1379":22,"1380":720,"1381":8,"1382":20,"1383":23,"1384":26,"1385":21,"1386":6,"1387":13,"1388":16,"1389":28,"1390":16,"1391":23,"1392":16,"1393":14,"1394":7,"1395":2486,"1396":2605,"1397":10,"1398":22,"1399":34,"1400":21,"1401":22,"1402":1114,"1403":11,"1404":18,"1405":20,"1406":42,"1407":11,"1408":19,"1409":26,"1410":24,"1411":10,"1412":11,"1413":18,"1414":30,"1415":1412,"1416":349,"1417":1142,"1418":15,"1419":9,"1420":13,"1421":22,"1422":24,"1423":21,"1424":19,"1425":19,"1426":10,"1427":250,"1428":20,"1429":23,"1430":32,"1431":66,"1432":29,"1433":48,"1434":11,"1435":41,"1436":4208,"1437":56,"1438":553,"1439":9,"1440":6,"1441":106,"1442":56,"1443":89,"1444":27,"1445":47,"1446":22,"1447":70,"1448":3,"1449":27,"1450":15,"1451":7,"1452":12,"1453":68,"1454":48,"1455":254,"1456":36,"1457":11,"1458":17,"1459":43,"1460":37,"1461":19,"1462":3,"1463":18,"1464":8,"1465":35,"1466":10,"1467":418,"1468":2,"1469":8,"1470":18,"1471":12,"1472":21,"1473":19,"1474":47,"1475":63,"1476":55,"1477":21,"1478":28,"1479":4,"1480":13,"1481":19,"1482":22,"1483":7,"1484":10,"1485":6,"1486":36,"1487":74,"1488":129,"1489":99,"1490":67,"1491":14,"1492":121,"1493":9,"1494":5,"1495":1,"1496":460,"1497":9,"1498":10,"1499":1,"1500":10,"1501":1,"1502":2,"1503":11,"1504":8,"1505":1,"1506":2,"1507":3,"1508":3,"1509":7,"1511":2,"1512":2,"1513":4,"1514":1,"1515":3,"1516":1,"1517":3,"1518":3,"1519":4,"1521":3,"1522":1,"1523":6,"1524":21,"1525":19,"1526":224,"1527":3,"1528":2,"1529":2,"1530":8,"1531":34,"1532":13,"1533":1,"1534":40,"1535":21,"1536":11,"1537":5,"1538":2,"1539":3,"1540":2,"1541":3,"1542":1,"1543":6,"1544":5,"1545":6,"1546":4,"1547":13,"1548":9,"1549":1,"1550":5,"1551":3,"1552":1,"1553":14,"1554":6,"1555":4,"1556":2,"1557":1,"1558":3,"1559":3,"1560":1,"1561":3,"1562":4,"1563":4,"1564":3,"1565":5,"1566":7,"1567":5,"1568":2,"1569":2,"1570":9,"1571":10,"1572":16,"1574":11,"1575":26,"1576":15,"1577":213,"1578":8,"1579":2,"1580":1,"1581":8,"1582":62,"1583":17,"1584":6,"1585":32,"1586":23,"1588":6,"1589":14,"1590":1,"1591":129,"1592":4,"1593":1,"1594":3,"1595":8,"1596":54,"1597":16,"1598":2,"1599":16,"1600":24,"1601":1,"1602":2,"1604":1,"1605":2,"1607":8,"1608":2,"1611":12,"1614":1,"1620":1,"1621":3,"1622":1,"1623":1,"1624":1,"1625":3,"1626":12,"1627":38,"1629":24,"1630":32,"1631":130,"1632":43,"1633":5,"1634":4,"1635":14,"1636":9,"1637":9,"1638":33,"1639":61,"1640":30,"1641":84,"1642":2,"1643":3,"1644":4,"1645":1,"1646":10,"1647":8,"1648":7,"1649":5,"1650":7,"1651":40,"1652":7,"1653":37,"1654":19,"1655":5,"1656":14,"1657":4,"1658":5,"1659":2,"1660":20,"1661":16,"1662":32,"1663":17,"1664":24,"1665":19,"1666":41,"1667":35,"1668":26,"1669":41,"1670":39,"1671":40,"1672":10,"1673":27,"1674":15,"1675":13,"1676":3,"1677":18,"1678":4,"1679":2,"1680":2,"1681":7,"1682":3,"1683":8,"1684":25,"1685":43,"1686":66,"1687":16,"1688":2,"1689":12,"1690":3,"1691":4,"1692":9,"1693":5,"1694":1,"1695":4,"1696":3,"1697":8,"1698":10,"1699":5,"1700":11,"1701":19,"1702":11,"1703":7,"1704":4,"1705":2,"1706":7,"1707":10,"1708":4,"1709":1,"1710":2,"1711":3,"1712":2,"1713":2,"1714":1,"1715":5,"1716":1,"1717":6,"1718":10,"1719":17,"1720":14,"1721":11,"1722":4,"1723":4,"1724":11,"1725":2,"1726":6,"1727":59,"1728":18,"1729":18,"1730":5,"1731":10,"1732":4,"1733":3,"1735":8,"1737":1,"1739":2,"1741":8,"1742":7,"1747":7,"1748":20,"1749":24,"1750":15,"1751":4,"1752":3,"1755":10,"1756":1,"1757":2,"1758":7,"1759":2,"1760":9,"1761":9,"1763":6,"1764":21,"1765":69,"1766":2,"1767":21,"1768":14,"1769":32,"1770":10,"1771":8,"1772":1,"1773":8,"1775":1,"1776":15,"1777":4,"1778":1,"1779":14,"1780":8,"1781":12,"1782":6,"1783":7,"1784":13,"1785":4,"1786":2,"1787":4,"1788":8,"1789":3,"1790":19,"1792":8,"1793":8,"1794":5,"1795":4,"1796":31,"1797":5,"1798":1,"1799":12,"1800":13,"1801":8,"1802":10,"1803":5,"1804":6,"1805":27,"1806":9,"1807":7,"1808":4,"1809":4,"1810":57,"1811":9,"1812":8,"1813":2,"1814":6,"1815":65,"1816":6,"1817":16,"1818":9,"1819":3,"1820":5,"1821":21,"1822":5,"1823":6,"1824":9,"1825":23,"1826":11,"1827":8,"1828":7,"1829":14,"1830":8,"1831":5,"1832":6,"1833":11,"1834":10,"1835":2,"1836":3,"1837":3,"1838":4,"1839":16,"1840":20,"1841":10,"1842":14,"1843":18,"1844":11,"1845":10,"1846":7,"1847":8,"1848":2,"1849":18,"1850":2,"1851":31,"1852":10,"1853":12,"1854":8,"1855":6,"1856":18,"1857":7,"1858":7,"1859":6,"1860":12,"1861":12,"1862":14,"1863":7,"1864":3,"1865":9,"1866":7,"1867":2,"1868":8,"1869":10,"1870":2,"1871":10,"1872":8,"1873":6,"1874":16,"1875":11,"1876":17,"1877":10,"1878":5,"1879":5,"1880":3,"1881":10,"1882":6,"1883":9,"1884":6,"1885":4,"1886":9,"1887":9,"1888":12,"1889":18,"1890":2,"1891":9,"1892":14,"1893":5,"1894":3,"1895":6,"1896":10,"1897":5,"1898":29,"1899":11,"1900":3,"1901":2,"1902":21,"1903":7,"1904":7,"1905":12,"1906":5,"1907":4,"1908":15,"1909":31,"1910":11,"1911":15,"1912":17,"1913":1,"1914":3,"1915":9,"1916":15,"1917":9,"1918":11,"1919":5,"1920":22,"1921":6,"1922":39,"1923":45,"1924":19,"1925":8,"1926":2,"1927":18,"1928":5,"1929":13,"1930":9,"1931":10,"1932":11,"1933":28,"1934":10,"1935":6,"1936":13,"1937":8,"1938":9,"1939":4,"1940":16,"1941":14,"1942":11,"1943":4,"1944":14,"1945":9,"1946":14,"1947":15,"1948":27,"1949":9,"1950":18,"1951":8,"1952":5,"1953":13,"1954":5,"1955":5,"1956":7,"1957":2,"1958":8,"1959":9,"1960":4,"1961":4,"1962":8,"1963":10,"1964":8,"1965":13,"1966":11,"1967":5,"1968":27,"1969":4,"1970":17,"1971":13,"1972":15,"1973":15,"1974":4,"1975":17,"1976":9,"1977":21,"1978":12,"1979":20,"1980":10,"1981":3,"1982":29,"1983":6,"1984":12,"1985":18,"1986":8,"1987":6,"1988":25,"1989":7,"1990":10,"1991":9,"1992":16,"1993":6,"1994":4,"1995":27,"1996":34,"1997":14,"1998":21,"1999":8,"2000":9,"2001":60,"2002":28,"2003":25,"2004":9,"2005":7,"2006":6,"2007":21,"2008":7,"2009":8,"2010":4,"2011":26,"2012":8,"2013":15,"2014":9,"2015":13,"2016":6,"2017":4,"2018":7,"2019":5,"2020":8,"2021":7,"2022":3,"2023":3,"2024":7,"2025":22,"2026":16,"2027":4,"2028":9,"2029":17,"2030":8,"2031":13,"2032":9,"2033":16,"2034":11,"2035":22,"2036":9,"2037":14,"2038":13,"2039":18,"2040":7,"2041":5,"2042":7,"2043":9,"2044":46,"2045":21,"2046":7,"2047":15,"2048":14,"2049":18,"2050":12,"2051":8,"2052":1,"2053":5,"2054":7,"2055":4,"2056":44,"2057":18,"2058":27,"2059":6,"2060":10,"2061":12,"2062":9,"2063":3,"2064":20,"2065":8,"2066":11,"2067":4,"2068":14,"2069":15,"2070":7,"2071":13,"2072":14,"2073":3,"2074":9,"2075":8,"2076":10,"2077":20,"2078":10,"2079":14,"2080":7,"2081":25,"2082":19,"2083":16,"2084":3,"2085":24,"2086":2,"2087":16,"2088":19,"2089":8,"2090":4,"2091":17,"2092":5,"2093":7,"2094":2,"2095":2,"2096":4,"2097":6,"2098":14,"2099":18,"2100":16,"2101":6,"2102":5,"2103":5,"2104":3,"2105":4,"2106":10,"2107":4,"2108":2,"2109":9,"2110":6,"2111":6,"2112":17,"2113":11,"2114":7,"2115":9,"2116":10,"2117":8,"2118":11,"2119":7,"2120":9,"2121":9,"2122":9,"2123":10,"2124":12,"2125":10,"2126":11,"2127":3,"2128":31,"2129":17,"2130":12,"2131":9,"2132":6,"2133":34,"2134":19,"2135":14,"2136":10,"2137":7,"2138":11,"2139":4,"2140":21,"2141":11,"2142":4,"2143":4,"2144":31,"2145":7,"2146":9,"2147":10,"2148":17,"2149":12,"2150":10,"2151":18,"2152":28,"2153":9,"2154":7,"2155":20,"2156":20,"2157":6,"2158":51,"2159":17,"2160":35,"2161":20,"2162":26,"2163":14,"2164":9,"2165":13,"2166":20,"2167":30,"2168":19,"2169":43,"2170":26,"2171":29,"2172":10,"2173":10,"2174":14,"2175":9,"2176":15,"2177":18,"2178":16,"2179":14,"2180":5,"2181":25,"2182":38,"2183":9,"2184":16,"2185":12,"2186":2,"2187":11,"2188":14,"2189":3,"2190":11,"2191":6,"2192":21,"2193":10,"2194":23,"2195":26,"2196":12,"2197":6,"2198":12,"2199":8,"2200":12,"2201":11,"2202":14,"2203":5,"2204":22,"2205":16,"2206":4,"2207":2,"2208":4,"2209":4,"2210":10,"2211":4,"2212":10,"2213":6,"2214":2,"2215":11,"2216":8,"2217":3,"2218":6,"2219":3,"2220":5,"2221":1,"2222":36,"2223":12,"2226":2,"2227":5,"2229":10,"2230":5,"2231":1,"2232":18,"2233":2,"2234":105,"2235":5,"2236":3,"2237":1,"2238":3,"2239":1,"2240":3,"2241":14,"2242":4,"2243":1,"2244":4,"2245":2,"2246":1,"2247":5}}],["ar",{"3":{"2222":2}}],["arbiter",{"3":{"691":1,"1304":1,"1309":2,"1311":1,"1396":2}}],["arbitrating",{"3":{"1436":1}}],["arbitration",{"3":{"1286":2,"1359":1}}],["arbitrated",{"3":{"1395":1,"1985":1}}],["arbitrate",{"3":{"1278":1,"1286":2,"1309":1,"1941":1}}],["arbitrates",{"3":{"0":1,"903":1,"905":2,"1286":3,"1290":1,"1300":1,"1324":1,"1934":1,"1982":1}}],["arbitrarily",{"3":{"1261":1,"1300":1,"1395":1,"1820":1}}],["arbitrary",{"3":{"0":1,"110":1,"219":1,"320":1,"332":1,"380":1,"774":1,"940":1,"1212":1,"1237":1,"1270":1,"1286":3,"1300":2,"1301":1,"1309":3,"1312":1,"1323":3,"1324":11,"1336":1,"1339":1,"1350":3,"1356":1,"1359":3,"1369":1,"1395":2,"1396":1,"1402":1,"1415":2,"1416":1,"1431":1,"1436":4,"1443":1,"1458":1,"1467":1,"1640":1,"1989":1,"1991":1,"1992":1,"1997":1,"2234":1}}],["archunit",{"3":{"2050":1}}],["archunitnet",{"3":{"1540":1,"2050":1}}],["archetype",{"3":{"1380":1}}],["arch",{"3":{"1214":1,"1487":1,"1489":1,"1526":6,"1530":1,"1531":1,"1532":1,"1535":2,"1577":2,"1586":1,"1591":5,"1595":1,"1597":1,"1600":1,"2043":1,"2109":1}}],["archaeology",{"3":{"838":1,"1019":1,"1300":1,"1840":1}}],["archaeological",{"3":{"88":1}}],["architected",{"3":{"2222":5,"2240":1}}],["architecting",{"3":{"2215":1,"2220":1}}],["architect",{"1":{"2214":1,"2215":1,"2216":1,"2217":1,"2218":1},"3":{"2214":1,"2215":1,"2219":1,"2220":1,"2222":3,"2226":1}}],["architecturally",{"3":{"1815":1}}],["architectural",{"0":{"1212":1,"1662":1,"2232":1},"3":{"132":1,"643":1,"1004":1,"1210":1,"1239":1,"1259":1,"1270":1,"1286":2,"1310":2,"1396":1,"1428":1,"1436":8,"1439":1,"1447":1,"1467":1,"1471":1,"1489":1,"1523":1,"1602":1,"1795":1,"1800":1,"1802":1,"2101":1,"2215":1,"2220":1,"2222":1}}],["architecturalanalysis",{"3":{"1":1,"46":1,"1190":1,"1525":1,"1526":2,"1577":2,"1582":1,"1586":1}}],["architecturemap",{"3":{"1728":1,"2099":1}}],["architecturemapbase",{"2":{"975":1,"2105":1},"3":{"972":1,"974":1,"975":1,"1199":47,"1207":2,"1428":1,"1431":5,"1436":92,"1654":1,"2043":1,"2105":1}}],["architectureremediation",{"3":{"1594":1}}],["architecturerules",{"2":{"39":1,"135":2,"136":1,"142":1,"305":1,"576":1,"657":1,"846":1,"849":1,"1431":1,"1489":1,"2044":1,"2045":2,"2104":1,"2105":1,"2140":1},"3":{"0":1,"17":1,"27":1,"39":5,"54":1,"78":1,"80":2,"81":2,"82":1,"109":1,"132":1,"135":5,"136":3,"139":3,"142":1,"147":1,"160":3,"161":1,"168":1,"171":1,"305":2,"341":2,"576":1,"657":3,"782":4,"798":1,"801":1,"804":1,"846":1,"849":1,"963":1,"966":1,"980":1,"982":1,"1004":2,"1005":1,"1006":2,"1050":1,"1074":1,"1078":1,"1083":1,"1091":1,"1160":1,"1161":3,"1162":2,"1163":2,"1168":12,"1169":1,"1170":3,"1199":68,"1207":79,"1235":1,"1236":1,"1237":5,"1239":3,"1247":3,"1259":1,"1270":1,"1286":2,"1300":5,"1311":7,"1312":6,"1324":1,"1359":1,"1415":1,"1428":1,"1431":17,"1436":369,"1489":8,"1496":4,"1524":1,"1526":3,"1531":1,"1535":1,"1576":1,"1577":9,"1582":1,"1583":1,"1586":2,"1591":1,"1596":1,"1660":1,"1671":1,"1875":1,"2043":1,"2044":1,"2045":3,"2087":1,"2104":1,"2105":1,"2140":2}}],["architecturetesthelper",{"2":{"2043":1},"3":{"1436":1,"2043":1}}],["architecturetests",{"2":{"1689":1},"3":{"80":2,"128":1,"633":1,"635":1,"636":1,"1133":2,"1136":1,"1168":1,"1436":23,"1489":1,"1689":1}}],["architectureassert",{"3":{"1199":10,"1207":2,"1428":1,"1431":4,"1436":25,"1489":1}}],["architectureevaluation",{"3":{"1193":1}}],["architectureevaluationcriteria",{"2":{"375":1,"1522":1,"1573":1,"1577":1,"1587":1},"3":{"369":2,"371":1,"375":1,"376":1,"590":1,"594":1,"860":1,"864":1,"1003":1,"1007":1,"1011":1,"1090":1,"1092":1,"1093":1,"1216":1,"1522":1,"1526":14,"1527":1,"1531":1,"1573":1,"1577":9,"1578":1,"1587":1,"1591":3,"1596":2,"1598":1,"2157":1,"2164":1,"2173":1,"2181":1,"2184":1,"2197":1}}],["architecturescorecard",{"2":{"1529":1,"1594":1},"3":{"1006":1,"1007":1,"1012":3,"1017":1,"1090":1,"1094":1,"1095":1,"1216":3,"1496":1,"1526":1,"1529":1,"1577":2,"1591":1,"1594":1,"2173":1,"2181":3,"2184":1,"2197":1}}],["architecture",{"0":{"1216":1,"1431":1,"1489":1,"1504":1,"1540":1,"1542":1,"1545":1,"1547":1,"1553":1,"1555":1,"1562":1,"1571":1,"1641":1,"1654":1,"1795":1,"2215":1,"2233":1,"2234":1},"1":{"0":1,"1":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"1485":1,"1486":1,"1487":1,"1488":1,"1489":1,"1490":1,"1491":1,"1492":1,"1493":1,"1494":1,"1518":1,"1519":1,"1520":1,"1521":1,"1522":1,"1523":1,"1524":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1531":1,"1532":1,"1533":1,"1534":1,"1535":1,"1536":1,"1537":1,"1538":1,"1539":1,"1540":1,"1541":1,"1542":1,"1543":1,"1544":1,"1545":1,"1546":1,"1547":1,"1548":1,"1549":1,"1550":1,"1551":1,"1552":1,"1553":1,"1554":1,"1555":1,"1556":1,"1557":1,"1558":1,"1559":1,"1560":1,"1561":1,"1562":1,"1563":1,"1564":1,"1565":1,"1566":1,"1567":1,"1568":1,"1569":1,"1570":1,"1571":1,"1572":1,"1573":1,"1574":1,"1575":1,"1576":1,"1577":1,"1578":1,"1579":1,"1580":1,"1581":1,"1582":1,"1583":1,"1584":1,"1585":1,"1586":1,"1587":1,"1588":1,"1589":1,"1590":1,"1591":1,"1592":1,"1593":1,"1594":1,"1595":1,"1596":1,"1597":1,"1598":1,"1599":1,"1600":1,"1794":1,"1795":1,"1796":1,"1797":1,"1798":1,"1799":1,"1800":1,"1801":1,"1802":1,"2040":1,"2041":1,"2042":1,"2043":1,"2044":1,"2045":1,"2046":1,"2047":1,"2048":1,"2049":1,"2050":1,"2101":1,"2102":1,"2103":1,"2104":1,"2105":1,"2106":1,"2107":1,"2108":1,"2109":1,"2110":1},"2":{"78":1,"80":3,"132":1,"265":1,"572":1,"1161":1,"1211":1,"1214":1,"1251":1,"1360":1,"1381":1,"1394":1,"1418":1,"1428":1,"1436":2,"1476":1,"1486":1,"1497":1,"1523":1,"1525":1,"1526":1,"1576":1,"1577":1,"1654":1,"1660":1,"1728":1,"1782":1,"1810":1,"2043":1,"2045":1,"2047":1,"2050":1,"2056":1,"2103":1,"2110":1,"2113":2},"3":{"0":7,"1":1,"17":2,"27":6,"39":1,"41":2,"54":2,"58":1,"59":1,"62":2,"78":1,"80":10,"81":3,"82":1,"85":1,"107":1,"109":7,"117":2,"121":6,"127":4,"128":7,"129":1,"131":1,"132":1,"135":5,"136":3,"137":2,"139":1,"140":2,"142":1,"147":4,"150":1,"160":1,"168":1,"189":1,"265":2,"305":3,"341":6,"370":1,"376":1,"381":1,"477":3,"545":7,"552":2,"565":1,"571":2,"572":16,"576":1,"585":1,"587":1,"590":1,"594":1,"609":13,"613":3,"618":1,"622":1,"631":1,"632":1,"633":1,"635":2,"657":1,"676":1,"678":1,"700":1,"718":2,"719":2,"749":6,"782":7,"798":1,"846":1,"849":1,"868":1,"881":9,"884":1,"899":1,"938":1,"939":1,"946":3,"954":1,"966":1,"971":7,"972":16,"974":4,"975":4,"980":2,"982":2,"1003":1,"1004":12,"1006":1,"1007":1,"1011":1,"1012":2,"1017":1,"1018":3,"1022":1,"1033":1,"1050":10,"1052":1,"1054":1,"1055":1,"1067":2,"1074":4,"1083":7,"1085":2,"1090":1,"1091":1,"1118":1,"1132":1,"1133":10,"1136":2,"1160":1,"1161":11,"1168":14,"1175":2,"1190":2,"1192":2,"1194":1,"1199":379,"1201":1,"1202":1,"1203":4,"1206":3,"1207":1254,"1208":6,"1210":1,"1211":5,"1212":6,"1213":1,"1214":5,"1216":7,"1217":1,"1229":2,"1230":1,"1231":1,"1232":1,"1235":1,"1236":4,"1237":35,"1239":2,"1243":1,"1247":12,"1249":1,"1251":1,"1257":2,"1259":46,"1262":4,"1263":1,"1270":16,"1271":11,"1272":2,"1286":113,"1290":1,"1300":35,"1301":5,"1303":2,"1306":1,"1309":17,"1310":8,"1311":40,"1312":12,"1313":2,"1316":3,"1322":1,"1323":48,"1324":70,"1326":1,"1339":7,"1341":5,"1343":1,"1344":1,"1345":1,"1346":1,"1349":1,"1350":35,"1352":2,"1359":83,"1360":2,"1361":1,"1369":21,"1371":3,"1377":1,"1380":15,"1381":1,"1382":1,"1389":2,"1394":1,"1395":97,"1396":72,"1402":15,"1404":3,"1409":1,"1412":1,"1415":51,"1416":7,"1417":25,"1418":1,"1427":14,"1428":6,"1431":34,"1432":1,"1436":2481,"1437":2,"1441":1,"1446":1,"1447":1,"1450":1,"1452":1,"1453":1,"1455":8,"1457":1,"1459":1,"1461":3,"1467":14,"1469":1,"1471":1,"1473":2,"1476":4,"1478":1,"1483":2,"1485":2,"1486":3,"1487":6,"1488":7,"1489":39,"1491":1,"1492":4,"1493":2,"1494":1,"1496":27,"1497":2,"1499":8,"1518":1,"1519":3,"1521":1,"1522":3,"1523":3,"1525":9,"1526":58,"1527":3,"1528":1,"1529":1,"1530":3,"1531":7,"1532":3,"1533":1,"1534":8,"1535":12,"1536":7,"1537":1,"1540":1,"1551":1,"1553":1,"1554":1,"1571":4,"1572":2,"1573":3,"1575":1,"1576":4,"1577":59,"1578":3,"1579":1,"1580":1,"1581":2,"1582":14,"1583":7,"1584":2,"1585":2,"1586":10,"1587":3,"1588":3,"1590":1,"1591":42,"1592":2,"1593":1,"1594":2,"1595":1,"1596":3,"1597":3,"1598":1,"1599":1,"1600":7,"1604":1,"1631":2,"1638":1,"1641":1,"1646":1,"1647":1,"1650":1,"1653":1,"1654":5,"1657":1,"1659":2,"1660":2,"1661":3,"1671":1,"1673":3,"1675":2,"1681":1,"1683":1,"1684":1,"1686":3,"1690":1,"1692":1,"1696":1,"1701":2,"1719":1,"1720":1,"1726":1,"1728":2,"1729":3,"1763":1,"1769":1,"1775":1,"1778":1,"1779":1,"1780":3,"1781":2,"1782":3,"1784":4,"1786":1,"1787":1,"1793":3,"1794":3,"1796":12,"1797":1,"1798":1,"1799":3,"1802":4,"1807":1,"1810":2,"1812":1,"1817":1,"1827":1,"1831":1,"1834":2,"1846":1,"1852":1,"1853":1,"1860":1,"1862":1,"1868":1,"1877":1,"1886":1,"1892":2,"1899":1,"1902":2,"1905":3,"1915":1,"1916":1,"1924":1,"1929":1,"1930":3,"1931":1,"1941":1,"1950":1,"1951":1,"1959":1,"1965":1,"1979":1,"1985":1,"1990":1,"1992":1,"1998":1,"2003":1,"2016":1,"2017":1,"2029":2,"2034":1,"2039":2,"2040":2,"2041":5,"2042":3,"2043":1,"2044":2,"2045":12,"2047":9,"2050":6,"2051":1,"2052":1,"2053":1,"2054":2,"2055":1,"2056":3,"2060":1,"2061":2,"2063":1,"2064":1,"2065":1,"2071":2,"2073":1,"2082":1,"2087":1,"2088":1,"2099":2,"2100":3,"2101":2,"2102":1,"2103":3,"2104":3,"2109":1,"2110":7,"2111":1,"2113":5,"2116":1,"2117":3,"2122":1,"2125":1,"2128":1,"2130":1,"2135":2,"2141":1,"2155":1,"2162":1,"2171":2,"2173":2,"2180":2,"2182":2,"2184":1,"2195":2,"2205":2,"2206":2,"2207":1,"2212":2,"2213":1,"2214":3,"2215":5,"2216":2,"2218":1,"2219":2,"2220":2,"2221":4,"2222":4,"2223":4,"2226":1,"2227":1,"2228":3,"2229":3,"2232":2,"2234":1,"2235":3,"2238":1,"2241":6,"2244":1,"2245":2,"2246":1,"2247":3}}],["archival",{"3":{"1467":1,"1568":1,"1631":1,"1678":1}}],["archivetickethandler",{"3":{"1199":1,"1207":1,"1436":5}}],["archiveticketcommand",{"3":{"1199":3,"1207":1,"1436":9}}],["archived",{"3":{"372":1,"1469":1,"1591":1,"1600":1,"1678":1,"2034":1}}],["archives",{"3":{"0":1,"443":1,"1467":1}}],["archive",{"0":{"1478":1},"3":{"0":1,"45":1,"47":1,"195":1,"562":1,"717":1,"764":1,"766":3,"947":1,"1116":1,"1285":1,"1286":2,"1323":1,"1342":1,"1350":1,"1389":1,"1441":1,"1455":1,"1467":6,"1469":1,"1471":1,"1473":6,"1474":7,"1475":2,"1478":4,"1482":2,"1483":3,"1484":1,"1486":1,"1534":1,"1730":1,"2035":1,"2037":3,"2126":1}}],["arthur",{"3":{"2222":1}}],["art",{"3":{"38":1}}],["articulo",{"3":{"1591":1}}],["article",{"1":{"1778":1,"1779":1},"3":{"365":1,"527":1,"1074":2,"1271":1,"1359":4,"1778":1,"1779":3,"1780":1,"1786":2,"1790":2,"1794":1,"1803":1,"1810":1,"1815":1,"1828":1,"1831":1,"1839":1,"1840":1,"1844":1,"1849":1,"1851":2,"1855":4,"1860":1,"1898":1,"1931":1,"1935":1,"1942":1,"1947":2,"1948":1,"1951":1,"1953":1,"1957":1,"1964":1,"1968":1,"1993":3,"1995":1,"1998":1,"2012":1,"2016":1,"2030":4,"2031":2,"2033":1,"2034":1,"2038":1,"2042":1,"2047":1,"2048":1,"2050":1,"2056":1,"2062":1,"2063":1,"2087":1,"2091":1,"2093":1,"2100":2,"2102":1,"2111":1,"2124":1,"2128":1,"2135":3,"2141":2,"2148":3,"2155":3,"2158":1,"2160":1,"2162":3,"2167":1,"2170":1,"2171":3,"2182":3,"2185":2,"2186":1,"2191":1,"2195":2,"2196":5,"2201":1,"2204":1,"2205":3,"2206":1,"2213":2,"2217":3,"2237":1,"2238":1,"2239":1}}],["articles",{"0":{"1779":1},"3":{"0":1,"1011":1,"1012":1,"1014":1,"1860":1,"2030":1,"2032":1,"2206":1,"2217":1,"2236":1}}],["artificial",{"3":{"1436":1,"1489":1}}],["artifacts",{"0":{"1209":1,"1482":1},"3":{"150":1,"529":1,"591":3,"837":1,"861":1,"862":1,"1191":1,"1309":2,"1359":1,"1396":1,"1427":1,"1436":1,"1454":1,"1456":3,"1461":1,"1473":2,"1482":1,"1489":2,"1490":1,"1492":2,"1496":1,"1518":1,"1553":1,"1577":1,"1591":1,"1671":1,"2048":1,"2235":1}}],["artifact",{"0":{"451":1,"1426":1},"3":{"0":2,"371":1,"373":1,"450":1,"451":2,"483":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"591":1,"609":1,"627":1,"690":1,"700":1,"709":1,"861":2,"862":1,"863":2,"873":1,"973":1,"974":1,"1019":1,"1090":1,"1216":1,"1259":1,"1270":1,"1309":4,"1311":2,"1323":2,"1339":2,"1359":2,"1396":1,"1415":1,"1416":1,"1431":2,"1433":2,"1436":13,"1445":1,"1454":2,"1455":3,"1456":3,"1465":1,"1466":1,"1471":1,"1482":1,"1483":1,"1492":2,"1496":4,"1526":1,"1577":2,"1948":1,"2046":1,"2048":1,"2134":1,"2182":1}}],["argon2id",{"3":{"1902":1,"1904":1,"1905":1}}],["argv",{"3":{"1323":1}}],["args",{"3":{"869":1,"1247":1,"1286":5,"1309":1,"1312":2,"1324":9,"1402":1,"1416":2,"1417":10,"1436":1,"1577":1}}],["arguing",{"3":{"1018":1,"1436":1}}],["argues",{"3":{"813":1,"945":1,"1017":1,"1051":1,"1259":1,"1270":1,"1286":2,"1300":1,"1323":1,"1324":1,"1339":2,"1396":5,"1436":1,"1459":1,"1952":1,"2165":1}}],["argue",{"0":{"1787":1},"3":{"465":1,"820":1,"871":1,"1436":2,"1816":2,"1833":2,"1852":2,"1946":1,"1964":1,"1997":1,"2002":1,"2049":2,"2060":1,"2081":2,"2087":2,"2124":2,"2154":2}}],["argued",{"3":{"109":2,"463":1,"716":1,"799":1,"905":5,"1270":5,"1311":1,"1323":1,"1324":1,"1332":1,"1339":1,"1395":1,"1436":2,"1447":1}}],["argumentguards",{"3":{"1436":1}}],["argumentguardfixture",{"3":{"1199":2,"1207":1,"1436":2}}],["argumenttypes",{"3":{"1286":3}}],["argumentoutofrangeexception",{"2":{"1229":1,"1399":1},"3":{"1229":2,"1300":1,"1399":1,"1402":1,"1436":4}}],["argumentexception",{"2":{"359":1,"1221":1,"1237":1,"1247":1,"1312":1,"1427":1,"2144":1},"3":{"359":1,"897":1,"1221":1,"1229":3,"1237":2,"1247":2,"1270":1,"1286":4,"1300":9,"1309":2,"1311":3,"1312":1,"1323":4,"1324":5,"1339":1,"1396":1,"1416":1,"1417":11,"1427":2,"1436":3,"2144":1}}],["argumentnullexception",{"2":{"359":1,"897":1,"1070":1,"1229":1,"1328":1,"2144":1},"3":{"359":1,"897":1,"1067":1,"1070":1,"1229":2,"1237":2,"1247":3,"1259":1,"1270":1,"1271":4,"1286":2,"1309":6,"1310":1,"1311":1,"1312":1,"1323":2,"1324":4,"1328":1,"1339":3,"1350":2,"1359":12,"1380":2,"1395":5,"1396":10,"1402":3,"1415":2,"1417":2,"1436":8,"2144":1}}],["arguments",{"3":{"0":1,"39":1,"43":1,"81":1,"95":1,"126":1,"135":1,"388":1,"474":1,"640":1,"799":1,"837":1,"861":1,"946":1,"1059":2,"1091":1,"1095":1,"1168":1,"1229":1,"1240":1,"1247":9,"1259":2,"1270":1,"1271":3,"1286":13,"1297":1,"1300":13,"1309":3,"1311":10,"1323":6,"1324":23,"1339":6,"1353":1,"1359":27,"1369":1,"1389":1,"1395":3,"1396":18,"1406":1,"1415":5,"1416":1,"1417":4,"1436":15,"1438":1,"1442":1,"1475":1,"1496":1,"1524":1,"1526":1,"1531":1,"1535":1,"1667":1,"1701":1,"1727":1,"1810":1,"1983":1,"2025":1,"2196":1,"2198":1,"2205":1}}],["argument",{"0":{"1825":1},"2":{"1989":1},"3":{"0":4,"26":1,"31":2,"93":1,"98":1,"109":1,"122":1,"135":2,"150":1,"160":1,"175":1,"186":2,"209":1,"259":1,"265":1,"266":1,"303":1,"318":4,"320":1,"341":1,"350":2,"359":1,"422":1,"460":1,"539":1,"545":2,"551":1,"556":2,"559":1,"565":1,"691":1,"707":1,"716":1,"724":1,"733":1,"749":2,"799":3,"801":2,"809":1,"811":1,"813":1,"827":4,"837":1,"838":1,"839":3,"855":1,"867":2,"875":1,"897":1,"905":1,"917":1,"946":2,"964":2,"1049":1,"1059":1,"1062":1,"1092":1,"1093":1,"1108":1,"1116":1,"1119":1,"1156":1,"1157":1,"1162":1,"1168":1,"1170":1,"1220":1,"1229":1,"1237":6,"1244":1,"1247":33,"1253":1,"1259":5,"1263":1,"1266":1,"1270":11,"1271":4,"1286":34,"1292":1,"1297":1,"1300":22,"1301":4,"1309":10,"1310":6,"1311":11,"1312":1,"1323":9,"1324":23,"1328":1,"1339":9,"1350":5,"1359":44,"1369":5,"1380":5,"1382":1,"1395":19,"1396":38,"1402":3,"1415":24,"1417":5,"1427":6,"1432":1,"1436":71,"1442":1,"1445":1,"1453":1,"1455":4,"1459":1,"1465":1,"1475":1,"1489":1,"1490":1,"1577":1,"1638":1,"1656":2,"1667":1,"1685":2,"1701":2,"1730":1,"1788":1,"1806":1,"1807":1,"1821":1,"1826":1,"1827":1,"1859":1,"1874":1,"1898":1,"1904":1,"1946":1,"1952":1,"1971":1,"1975":1,"1977":1,"1989":2,"1995":3,"1996":1,"1997":1,"2025":1,"2026":2,"2074":1,"2137":1,"2144":1,"2172":1,"2182":1,"2197":1}}],["arg",{"2":{"871":1},"3":{"0":1,"91":1,"869":2,"871":1,"1212":1,"1286":3,"1311":1,"1402":1,"1445":2,"1455":3,"1466":2}}],["arise",{"3":{"1286":1}}],["arithmetically",{"3":{"1436":1}}],["arithmetic",{"0":{"1242":1},"3":{"335":1,"628":1,"658":1,"760":1,"799":1,"803":1,"804":1,"805":1,"1019":1,"1051":1,"1054":1,"1237":4,"1242":2,"1243":1,"1247":4,"1254":1,"1259":1,"1309":1,"1323":1,"1324":1,"1339":2,"1350":1,"1359":3,"1366":1,"1369":1,"1396":3,"1436":5,"1438":2,"1474":2,"1475":2,"1496":1,"1815":1}}],["arity",{"3":{"0":2,"328":1,"921":1,"924":1,"926":1,"1270":4,"1289":1,"1300":3,"1311":3,"1436":23,"1496":4,"1671":1}}],["ariarole",{"3":{"1436":4}}],["arial",{"3":{"1324":1}}],["arialabel",{"3":{"1324":6}}],["aria",{"3":{"0":1,"412":1,"618":2,"620":1,"1324":15,"1389":1,"1395":5,"1396":1,"1402":1,"1415":1,"1417":5,"1433":1,"1436":7,"1488":2,"1526":3,"1558":1,"1577":2,"1591":2,"1596":1,"1605":1,"1607":2,"1643":3,"1644":1,"1739":1,"1741":2,"2058":1}}],["arrows",{"3":{"1339":1,"1505":1,"1517":1,"2040":2}}],["arrow",{"3":{"1195":1,"1259":1,"1309":1,"1310":1,"1311":1,"1417":1,"1436":3,"1503":1}}],["arriving",{"3":{"1":1,"159":1,"202":2,"352":1,"428":1,"702":1,"809":1,"845":1,"1049":1,"1067":1,"1109":1,"1184":1,"1249":1,"1311":1,"1324":4,"1359":1,"1366":2,"1396":1,"1415":1,"1417":1,"1436":1,"1438":1,"1467":1,"1639":1,"1909":1,"1911":1,"2168":1,"2183":1}}],["arrive",{"3":{"21":1,"24":1,"110":1,"235":1,"402":1,"548":1,"549":1,"585":1,"601":1,"674":1,"678":1,"684":1,"717":1,"774":1,"789":1,"829":1,"870":1,"880":1,"965":1,"979":1,"1020":1,"1033":1,"1093":1,"1123":1,"1153":1,"1229":1,"1237":1,"1241":1,"1247":1,"1259":3,"1270":1,"1273":1,"1281":1,"1300":4,"1309":2,"1311":3,"1317":1,"1318":1,"1324":6,"1339":3,"1350":2,"1359":6,"1364":1,"1369":1,"1380":1,"1382":1,"1395":5,"1396":10,"1402":2,"1415":2,"1417":2,"1436":1,"1438":2,"1443":1,"1453":1,"1467":2,"1468":1,"1641":1,"1664":1,"1673":1,"1682":1,"1685":1,"1686":1,"1694":1,"1727":1,"1792":1,"1890":1,"1909":1,"1934":1,"1944":1,"2001":1,"2181":1,"2196":1}}],["arrived",{"3":{"0":1,"423":1,"563":1,"696":1,"728":1,"790":1,"809":2,"813":1,"1259":1,"1270":3,"1287":1,"1293":2,"1300":3,"1309":2,"1312":1,"1324":2,"1359":2,"1395":4,"1396":1,"1402":2,"1415":1,"1436":3,"1489":1,"1496":1,"1686":1,"1727":1,"1759":1,"1765":2,"1806":1,"1875":1,"1890":1,"2095":1,"2160":1,"2169":1}}],["arrives",{"3":{"0":3,"113":1,"148":1,"255":1,"265":1,"350":1,"353":1,"390":1,"403":1,"415":1,"423":1,"535":2,"539":1,"573":1,"583":1,"631":1,"633":1,"673":1,"674":1,"689":1,"692":1,"698":2,"714":1,"741":1,"827":1,"829":1,"831":1,"869":1,"881":1,"897":1,"914":1,"1018":1,"1050":1,"1091":1,"1123":1,"1232":1,"1237":1,"1247":1,"1259":1,"1261":1,"1271":1,"1286":5,"1300":4,"1301":1,"1305":1,"1309":1,"1311":2,"1320":1,"1323":4,"1324":11,"1326":1,"1335":1,"1339":6,"1350":1,"1358":2,"1359":18,"1366":1,"1369":2,"1380":3,"1395":20,"1396":20,"1401":1,"1402":6,"1415":6,"1417":3,"1433":1,"1436":8,"1442":1,"1443":1,"1444":1,"1447":3,"1452":1,"1455":1,"1476":1,"1488":1,"1626":1,"1661":1,"1685":2,"1686":2,"1700":1,"1724":1,"1727":3,"1728":1,"1749":1,"1815":2,"1883":1,"1890":1,"1909":1,"1911":1,"1922":1,"1960":1,"1993":1,"2017":1,"2028":1,"2042":1,"2069":1,"2091":2,"2103":1,"2151":1,"2152":1,"2156":1,"2163":2,"2167":1,"2169":2,"2171":1}}],["arrivals",{"3":{"1396":1}}],["arrival",{"3":{"0":2,"635":1,"689":1,"691":1,"726":1,"1286":1,"1379":1,"1395":2,"1396":19,"1416":1,"1432":1,"1436":1,"1467":1,"1631":1,"1661":1,"1686":1,"1699":1,"1727":2,"2003":1}}],["arranging",{"3":{"1671":1}}],["arranges",{"3":{"1441":1}}],["arrange",{"3":{"1436":8,"1488":2,"1824":1}}],["arranged",{"3":{"1344":1}}],["arrangement",{"3":{"0":2,"93":1,"96":1,"109":1,"837":1,"881":1,"930":1,"1247":1,"1286":1,"1309":1,"1311":1,"1350":1,"1359":2,"1380":1,"1395":1,"1436":3,"1438":1,"1490":1}}],["arrays",{"3":{"81":1,"696":1,"698":1,"1247":1,"1286":1,"1300":1,"1311":6,"1350":3,"1405":1,"1415":2,"1423":1,"1427":1,"1436":2,"1639":1}}],["array",{"3":{"0":3,"109":2,"111":3,"122":2,"135":1,"243":1,"260":1,"265":1,"359":1,"388":1,"393":1,"418":1,"420":1,"422":1,"423":1,"424":1,"591":1,"603":1,"609":6,"610":1,"881":1,"1175":2,"1225":1,"1229":9,"1237":1,"1239":1,"1242":2,"1247":8,"1259":3,"1263":1,"1270":2,"1271":4,"1286":13,"1300":10,"1311":10,"1323":3,"1324":4,"1339":3,"1350":6,"1359":19,"1380":2,"1391":1,"1395":7,"1396":5,"1402":1,"1415":5,"1427":2,"1436":18,"1467":10,"1473":2,"1577":1,"1586":1,"1632":1,"1640":1,"1805":4,"1851":1,"1856":1,"1859":1,"1922":1,"1927":1,"1929":1,"1976":1,"2160":2}}],["armphasetimerforeventend",{"3":{"1395":1}}],["arming",{"3":{"539":1,"1300":4,"1600":1}}],["armasync",{"2":{"814":1},"3":{"539":1,"540":1,"814":1}}],["armed",{"3":{"0":1,"534":2,"536":2,"537":1,"539":2,"905":1,"909":1,"1300":4,"1383":1,"1416":2,"1427":1}}],["arm",{"3":{"0":4,"62":1,"63":1,"164":1,"166":2,"171":1,"609":1,"610":1,"611":1,"626":1,"756":3,"758":1,"766":1,"814":1,"1034":2,"1075":4,"1100":1,"1247":13,"1270":4,"1286":1,"1311":4,"1323":1,"1339":1,"1395":4,"1396":4,"1402":6,"1415":1,"1416":2,"1417":3,"1436":10,"1455":5,"1459":1,"1464":1,"1466":2,"1467":11,"1470":1,"1472":3,"1475":1,"1481":1,"1589":1,"1591":1,"1596":1,"1597":1,"1686":1,"2001":1,"2035":1,"2160":1,"2199":1,"2221":1,"2222":1}}],["arms",{"3":{"0":3,"539":3,"794":1,"809":1,"813":2,"905":1,"1042":1,"1045":1,"1247":2,"1270":1,"1286":1,"1290":1,"1300":5,"1324":2,"1337":1,"1359":1,"1393":1,"1395":3,"1396":1,"1416":1,"1417":2,"1436":1,"1917":1,"2163":1,"2167":1,"2169":2,"2187":1,"2199":1}}],["around",{"0":{"1387":1},"3":{"0":2,"24":1,"58":1,"62":1,"71":1,"109":1,"113":1,"118":1,"126":1,"138":1,"150":1,"155":1,"260":1,"265":1,"281":1,"285":1,"396":1,"463":1,"534":1,"555":1,"607":5,"627":1,"638":2,"642":1,"650":1,"655":1,"684":1,"733":1,"764":1,"819":3,"826":1,"827":1,"836":1,"921":1,"926":1,"971":1,"987":1,"1019":1,"1020":1,"1043":1,"1049":1,"1051":1,"1066":1,"1090":1,"1133":1,"1169":1,"1229":1,"1237":2,"1246":1,"1247":3,"1256":1,"1259":4,"1260":1,"1262":1,"1267":1,"1270":6,"1286":5,"1290":1,"1291":1,"1294":2,"1300":11,"1309":4,"1310":2,"1311":4,"1313":1,"1322":1,"1323":4,"1324":9,"1339":3,"1350":5,"1352":1,"1353":1,"1355":1,"1357":1,"1359":19,"1369":2,"1375":1,"1380":3,"1395":5,"1396":11,"1402":7,"1403":1,"1415":5,"1416":1,"1417":4,"1435":1,"1436":9,"1438":6,"1467":2,"1481":1,"1488":1,"1496":6,"1537":1,"1557":1,"1585":1,"1635":1,"1640":1,"1641":1,"1643":1,"1651":2,"1675":1,"1700":1,"1712":1,"1720":1,"1749":1,"1790":1,"1797":1,"1811":1,"1818":1,"1827":1,"1851":1,"1904":1,"1958":1,"1966":1,"2033":1,"2039":1,"2063":1,"2074":1,"2077":2,"2081":2,"2112":1,"2156":1,"2158":1,"2176":1,"2180":1,"2182":1,"2211":1}}],["areflagged",{"3":{"1436":10}}],["areflaggedundertheirsourcemember",{"3":{"1436":4}}],["arepinnedtooneversion",{"3":{"1436":2}}],["arecomplete",{"3":{"1436":3}}],["areidentical",{"3":{"1436":1}}],["arestserviceanswersoverh2c",{"2":{"1449":1},"3":{"1339":1,"1449":1}}],["arerestricted",{"2":{"1083":1},"3":{"1083":1,"1436":3}}],["areexplicitlyoptedin",{"2":{"1083":1},"3":{"1083":1,"1436":3}}],["arediscovered",{"2":{"609":1},"3":{"609":1,"1436":6}}],["areaccepted",{"3":{"1436":1}}],["areallowlisted",{"3":{"1436":2}}],["areas",{"0":{"1388":1,"1392":1},"3":{"1350":1,"1395":1,"1431":1,"1763":1}}],["areaof",{"3":{"1324":2}}],["area",{"3":{"442":1,"801":1,"1058":1,"1300":1,"1311":1,"1323":1,"1324":6,"1381":2,"1389":1,"1392":2,"1394":2,"1395":3,"1396":1,"1414":1,"1455":1,"1480":1,"1489":2,"1714":1,"2128":2}}],["are",{"0":{"93":1,"1317":1,"1363":1,"1473":1,"1521":1,"1804":1,"2146":1,"2202":1},"1":{"1105":1,"1106":1,"1107":1,"1108":1,"1109":1,"1110":1,"1111":1,"1112":1,"1863":1,"1864":1,"1865":1,"1866":1,"1867":1,"1868":1,"2030":1,"2031":1,"2032":1,"2033":1,"2034":1,"2035":1,"2036":1,"2037":1,"2038":1,"2039":1},"2":{"453":1},"3":{"0":102,"3":1,"4":1,"10":1,"12":1,"13":1,"15":1,"16":1,"17":4,"19":3,"21":2,"22":1,"23":3,"24":2,"26":2,"27":3,"30":1,"31":1,"33":1,"34":1,"39":7,"41":3,"43":1,"46":1,"47":2,"54":1,"59":2,"61":1,"62":1,"63":4,"64":1,"71":2,"73":2,"74":2,"77":1,"79":1,"80":1,"81":4,"82":1,"86":1,"88":1,"93":1,"94":1,"95":3,"99":1,"100":4,"101":1,"102":1,"103":1,"108":1,"109":5,"110":2,"115":1,"117":3,"120":1,"121":3,"122":2,"123":1,"125":2,"126":3,"127":1,"128":2,"130":6,"131":1,"134":2,"135":20,"136":10,"137":5,"138":3,"139":7,"140":3,"141":3,"142":12,"145":9,"147":3,"150":7,"152":1,"153":1,"155":2,"156":1,"157":2,"159":3,"160":3,"161":2,"166":4,"168":3,"171":1,"174":2,"175":6,"177":3,"178":5,"179":1,"181":2,"184":1,"186":4,"188":3,"189":1,"193":1,"194":1,"195":2,"198":2,"199":1,"201":2,"202":4,"203":1,"206":2,"207":1,"212":1,"214":2,"216":1,"218":1,"219":5,"220":1,"221":2,"224":2,"226":1,"229":1,"230":4,"231":3,"233":2,"235":4,"241":3,"242":2,"243":5,"244":2,"245":3,"246":3,"249":1,"250":2,"252":1,"253":2,"254":4,"255":4,"256":2,"257":1,"258":1,"259":4,"260":3,"265":11,"266":1,"267":1,"272":1,"274":1,"276":2,"281":1,"283":1,"285":2,"293":1,"295":1,"300":1,"302":1,"305":2,"306":1,"308":1,"309":1,"310":2,"312":1,"316":1,"317":2,"318":2,"319":1,"323":1,"324":3,"326":2,"328":1,"329":1,"330":1,"331":3,"332":3,"334":1,"335":1,"337":2,"341":4,"343":1,"344":1,"345":2,"349":1,"350":4,"351":2,"353":2,"354":2,"358":1,"359":1,"360":1,"361":3,"365":2,"368":1,"369":1,"370":4,"371":1,"372":1,"373":3,"374":2,"375":3,"378":1,"379":1,"380":2,"382":1,"383":2,"384":3,"387":1,"388":2,"391":2,"392":1,"393":2,"395":6,"396":1,"397":6,"398":2,"399":3,"400":2,"402":4,"405":1,"406":1,"407":3,"408":1,"409":5,"413":4,"414":1,"418":1,"419":1,"420":3,"422":1,"425":2,"429":1,"433":1,"434":3,"435":1,"436":1,"438":2,"439":2,"440":1,"444":2,"446":1,"448":2,"449":1,"450":1,"451":2,"452":1,"453":2,"459":1,"463":2,"464":2,"465":3,"466":2,"468":1,"470":4,"471":2,"472":2,"473":2,"475":1,"477":2,"480":2,"482":2,"484":1,"486":3,"487":1,"488":2,"489":2,"490":4,"491":5,"492":4,"493":6,"494":5,"495":2,"497":6,"498":1,"500":1,"501":2,"507":1,"508":1,"509":1,"511":3,"512":1,"513":1,"514":2,"517":1,"518":1,"519":1,"522":2,"523":2,"524":2,"526":2,"527":4,"528":4,"529":1,"530":4,"531":1,"534":9,"536":5,"537":2,"538":2,"539":3,"540":3,"543":3,"544":2,"545":5,"546":2,"547":3,"549":3,"550":2,"551":4,"552":2,"555":1,"556":8,"562":2,"564":3,"565":1,"567":1,"570":1,"571":1,"572":5,"573":1,"574":3,"575":3,"577":3,"578":5,"583":7,"584":2,"585":5,"586":3,"589":2,"590":1,"591":6,"592":4,"593":4,"594":1,"599":10,"600":2,"601":3,"602":1,"604":2,"607":10,"609":3,"610":1,"611":6,"612":3,"616":4,"617":1,"618":3,"620":4,"621":2,"624":5,"626":8,"627":1,"628":1,"629":4,"632":3,"633":4,"635":2,"638":6,"639":2,"640":6,"641":4,"642":3,"643":1,"644":1,"649":2,"650":3,"651":2,"656":1,"657":7,"658":3,"659":3,"660":1,"664":1,"665":5,"666":1,"669":1,"670":1,"672":2,"673":1,"674":5,"675":1,"676":2,"677":2,"680":1,"681":2,"682":4,"683":1,"684":3,"685":1,"688":1,"689":1,"690":10,"691":5,"692":3,"693":1,"698":7,"699":2,"700":5,"702":1,"703":2,"707":5,"708":3,"713":1,"714":1,"715":5,"717":2,"720":2,"721":1,"724":1,"725":4,"726":2,"727":1,"729":1,"731":1,"732":1,"733":2,"735":1,"736":2,"740":1,"741":5,"743":3,"744":2,"747":2,"749":7,"751":7,"755":1,"756":2,"758":1,"759":1,"760":3,"761":1,"764":5,"766":6,"767":1,"768":2,"769":1,"774":3,"775":1,"776":3,"780":2,"782":3,"784":2,"785":1,"786":1,"789":1,"790":3,"794":1,"797":1,"798":2,"799":5,"800":1,"801":1,"802":1,"803":6,"804":2,"805":4,"809":3,"810":3,"813":1,"814":1,"818":3,"819":5,"821":3,"822":1,"825":5,"826":5,"827":16,"828":1,"829":6,"830":3,"831":2,"832":6,"833":4,"836":1,"837":2,"838":4,"840":5,"844":1,"846":1,"848":2,"849":3,"850":2,"853":1,"854":2,"855":1,"857":1,"860":3,"861":6,"862":1,"863":2,"864":1,"867":2,"868":4,"869":1,"871":3,"872":3,"873":2,"874":2,"875":4,"876":3,"877":1,"879":2,"880":1,"881":5,"882":1,"883":4,"884":3,"889":2,"891":1,"892":2,"897":3,"900":2,"903":1,"904":2,"905":10,"906":2,"907":2,"910":2,"912":1,"913":1,"914":4,"916":2,"917":1,"918":1,"922":1,"923":2,"924":1,"926":4,"927":2,"930":2,"931":3,"932":2,"938":1,"941":1,"944":1,"946":5,"949":1,"953":1,"954":1,"958":1,"959":1,"960":1,"963":3,"964":8,"966":3,"967":1,"968":1,"971":1,"972":4,"973":3,"974":2,"975":1,"979":1,"980":6,"981":3,"982":3,"983":2,"986":1,"987":1,"988":6,"989":1,"991":2,"995":1,"996":3,"998":1,"999":1,"1003":1,"1004":6,"1005":1,"1006":2,"1011":1,"1012":3,"1014":1,"1016":3,"1017":1,"1018":15,"1019":1,"1020":2,"1021":3,"1024":2,"1025":1,"1026":3,"1027":1,"1028":1,"1029":1,"1030":2,"1032":1,"1033":2,"1034":8,"1036":1,"1037":2,"1042":2,"1043":1,"1044":1,"1049":2,"1050":9,"1051":3,"1052":8,"1054":5,"1055":4,"1058":2,"1059":8,"1061":2,"1065":1,"1067":6,"1069":3,"1073":1,"1074":8,"1075":5,"1077":1,"1078":2,"1079":1,"1082":3,"1083":1,"1084":1,"1085":1,"1089":1,"1090":1,"1091":12,"1092":4,"1093":7,"1095":1,"1096":1,"1099":1,"1100":2,"1101":1,"1102":1,"1103":1,"1105":1,"1107":1,"1108":4,"1115":1,"1116":7,"1117":4,"1118":3,"1119":2,"1123":2,"1124":6,"1125":1,"1126":3,"1127":1,"1128":1,"1133":2,"1135":1,"1140":3,"1142":1,"1143":1,"1150":2,"1152":1,"1160":1,"1161":4,"1163":3,"1168":10,"1169":1,"1174":1,"1175":4,"1176":1,"1178":1,"1182":1,"1184":4,"1186":1,"1188":1,"1190":1,"1191":10,"1193":2,"1196":4,"1200":1,"1201":4,"1202":1,"1203":2,"1211":2,"1212":21,"1213":3,"1214":3,"1215":2,"1216":1,"1217":2,"1218":5,"1220":1,"1221":2,"1222":1,"1223":3,"1225":1,"1226":3,"1227":6,"1228":1,"1229":24,"1230":2,"1231":8,"1232":4,"1233":1,"1234":6,"1235":1,"1236":5,"1237":72,"1238":4,"1239":4,"1240":2,"1241":3,"1242":1,"1243":4,"1244":3,"1246":1,"1247":73,"1248":1,"1249":4,"1251":2,"1252":4,"1253":2,"1254":2,"1256":4,"1257":1,"1258":1,"1259":54,"1260":2,"1261":3,"1262":2,"1263":6,"1264":5,"1265":3,"1266":3,"1267":4,"1269":5,"1270":113,"1271":36,"1272":1,"1273":4,"1274":2,"1275":2,"1276":6,"1277":5,"1278":4,"1279":4,"1280":4,"1281":3,"1283":7,"1284":2,"1285":5,"1286":301,"1287":3,"1288":2,"1289":4,"1290":7,"1291":3,"1292":2,"1293":4,"1294":4,"1295":2,"1296":1,"1297":7,"1298":1,"1299":1,"1300":207,"1301":40,"1302":2,"1303":1,"1304":3,"1307":4,"1309":81,"1310":38,"1311":174,"1312":27,"1313":3,"1314":2,"1315":1,"1316":6,"1317":4,"1318":6,"1319":2,"1320":5,"1321":2,"1322":3,"1323":128,"1324":280,"1325":2,"1326":4,"1328":1,"1330":3,"1332":8,"1333":5,"1334":1,"1335":1,"1336":2,"1337":3,"1338":4,"1339":178,"1341":1,"1342":13,"1343":4,"1344":6,"1345":2,"1346":3,"1347":6,"1349":6,"1350":183,"1352":3,"1353":5,"1354":2,"1355":5,"1357":3,"1358":1,"1359":503,"1362":6,"1363":2,"1364":4,"1366":6,"1367":1,"1368":4,"1369":60,"1370":3,"1371":1,"1372":1,"1373":5,"1374":2,"1375":3,"1376":1,"1377":3,"1378":2,"1379":5,"1380":98,"1382":2,"1383":6,"1384":2,"1385":1,"1389":3,"1390":2,"1391":2,"1392":4,"1393":2,"1394":3,"1395":234,"1396":360,"1397":1,"1398":9,"1399":6,"1401":4,"1402":106,"1403":3,"1405":3,"1406":7,"1407":1,"1408":2,"1409":4,"1410":2,"1411":1,"1412":1,"1413":1,"1414":5,"1415":158,"1416":47,"1417":139,"1418":2,"1421":1,"1422":3,"1423":3,"1424":6,"1425":1,"1426":1,"1427":19,"1428":4,"1429":7,"1430":3,"1431":11,"1432":1,"1433":4,"1434":3,"1435":6,"1436":566,"1437":1,"1438":57,"1441":24,"1442":12,"1443":22,"1444":5,"1445":4,"1446":2,"1447":12,"1448":1,"1449":4,"1451":1,"1452":4,"1453":16,"1454":6,"1455":50,"1456":7,"1457":5,"1458":6,"1459":2,"1460":6,"1462":3,"1463":5,"1465":7,"1466":7,"1467":62,"1468":1,"1470":4,"1471":2,"1472":7,"1473":2,"1474":11,"1475":5,"1476":5,"1477":4,"1478":2,"1479":3,"1480":2,"1481":7,"1482":1,"1484":3,"1485":5,"1486":11,"1487":4,"1488":21,"1489":19,"1490":9,"1491":2,"1492":11,"1494":1,"1495":2,"1496":61,"1497":5,"1498":4,"1499":1,"1500":5,"1502":1,"1503":2,"1507":1,"1508":3,"1509":1,"1512":1,"1515":1,"1517":3,"1519":1,"1521":2,"1523":1,"1524":4,"1525":1,"1526":35,"1527":1,"1531":16,"1532":5,"1533":1,"1534":7,"1536":4,"1537":2,"1538":2,"1539":1,"1540":1,"1541":1,"1543":3,"1544":4,"1545":3,"1546":3,"1547":6,"1548":3,"1550":1,"1551":1,"1552":1,"1553":4,"1554":3,"1555":1,"1558":1,"1562":1,"1563":2,"1565":1,"1566":1,"1568":1,"1569":1,"1570":2,"1571":3,"1572":12,"1574":2,"1575":5,"1577":41,"1578":4,"1580":2,"1581":2,"1582":7,"1583":2,"1584":2,"1585":13,"1586":2,"1588":1,"1591":20,"1592":2,"1594":2,"1596":6,"1597":3,"1599":1,"1601":1,"1605":1,"1607":3,"1611":3,"1614":1,"1621":1,"1623":1,"1626":4,"1627":6,"1630":27,"1631":74,"1632":16,"1633":6,"1634":4,"1635":17,"1636":6,"1637":3,"1638":17,"1639":48,"1640":17,"1641":30,"1644":1,"1645":3,"1646":2,"1648":1,"1649":2,"1650":1,"1651":6,"1652":3,"1653":10,"1654":2,"1656":1,"1658":1,"1661":3,"1662":4,"1664":1,"1665":1,"1666":4,"1667":2,"1668":5,"1669":1,"1670":3,"1671":3,"1672":1,"1673":2,"1675":2,"1677":9,"1679":1,"1680":3,"1682":1,"1683":2,"1684":4,"1685":7,"1686":13,"1689":2,"1691":1,"1693":2,"1695":2,"1697":2,"1698":3,"1699":1,"1700":4,"1701":4,"1702":2,"1703":1,"1706":1,"1707":1,"1708":1,"1710":1,"1712":1,"1717":1,"1718":3,"1719":2,"1720":3,"1721":3,"1727":13,"1728":3,"1729":2,"1730":1,"1731":1,"1733":1,"1734":1,"1735":1,"1736":4,"1738":3,"1739":1,"1741":3,"1742":1,"1748":6,"1749":3,"1750":4,"1751":1,"1755":4,"1758":2,"1759":2,"1760":1,"1761":4,"1764":1,"1765":19,"1766":2,"1767":4,"1769":3,"1771":1,"1772":2,"1774":1,"1776":9,"1777":2,"1779":1,"1781":3,"1782":4,"1783":2,"1784":3,"1785":1,"1787":1,"1788":1,"1789":3,"1790":2,"1792":2,"1794":2,"1795":1,"1796":1,"1798":1,"1799":1,"1801":3,"1802":2,"1804":4,"1805":2,"1806":3,"1807":1,"1808":2,"1809":2,"1810":12,"1811":7,"1812":4,"1814":2,"1815":10,"1816":3,"1818":3,"1819":1,"1820":1,"1821":1,"1822":2,"1823":1,"1824":1,"1825":4,"1826":3,"1828":1,"1832":2,"1837":1,"1838":1,"1839":1,"1840":8,"1841":3,"1842":3,"1843":2,"1844":5,"1845":3,"1848":1,"1849":1,"1850":1,"1851":2,"1852":1,"1853":2,"1854":2,"1855":1,"1856":1,"1860":1,"1861":6,"1862":1,"1863":1,"1864":1,"1865":2,"1872":1,"1875":2,"1876":3,"1879":2,"1881":1,"1883":2,"1884":2,"1885":3,"1887":1,"1888":3,"1889":1,"1890":1,"1891":3,"1892":1,"1893":1,"1896":2,"1898":4,"1899":1,"1900":2,"1901":4,"1902":3,"1903":3,"1904":2,"1905":1,"1907":2,"1908":1,"1909":7,"1910":1,"1911":5,"1913":1,"1915":2,"1916":1,"1917":2,"1918":1,"1919":1,"1920":6,"1921":1,"1922":4,"1923":7,"1924":1,"1927":2,"1929":1,"1931":1,"1933":2,"1934":1,"1935":3,"1936":4,"1939":1,"1940":3,"1941":1,"1942":2,"1943":1,"1944":1,"1947":1,"1948":1,"1949":5,"1950":1,"1951":2,"1952":3,"1953":4,"1954":2,"1955":1,"1956":1,"1957":1,"1958":1,"1959":2,"1960":3,"1961":3,"1962":3,"1964":8,"1966":2,"1967":1,"1968":3,"1969":2,"1971":2,"1973":3,"1977":4,"1978":1,"1979":3,"1980":1,"1981":1,"1982":3,"1983":2,"1984":3,"1985":1,"1986":1,"1987":2,"1988":2,"1990":1,"1991":4,"1993":1,"1995":2,"1996":8,"1997":2,"1998":1,"1999":2,"2000":1,"2001":9,"2002":4,"2003":2,"2005":1,"2008":1,"2010":1,"2011":5,"2012":2,"2013":1,"2014":6,"2016":1,"2020":1,"2023":1,"2025":4,"2026":2,"2028":5,"2029":1,"2030":3,"2031":4,"2032":1,"2034":4,"2035":3,"2036":2,"2037":2,"2038":5,"2039":2,"2041":1,"2042":2,"2043":3,"2044":7,"2045":4,"2048":2,"2049":3,"2050":1,"2052":1,"2053":1,"2054":1,"2055":3,"2056":3,"2057":3,"2058":4,"2060":3,"2061":2,"2062":2,"2063":1,"2064":2,"2065":1,"2066":1,"2067":1,"2069":2,"2070":3,"2071":2,"2072":1,"2074":2,"2076":1,"2077":2,"2079":2,"2081":3,"2082":1,"2083":4,"2085":3,"2088":2,"2089":4,"2090":4,"2092":1,"2093":1,"2097":2,"2098":2,"2099":4,"2100":6,"2102":1,"2103":5,"2105":1,"2106":3,"2107":2,"2109":3,"2110":1,"2111":5,"2112":2,"2113":4,"2114":2,"2116":1,"2117":1,"2118":1,"2119":2,"2120":1,"2123":2,"2126":4,"2127":6,"2128":3,"2129":2,"2130":2,"2132":1,"2133":3,"2134":4,"2135":1,"2136":1,"2137":1,"2138":2,"2140":5,"2141":2,"2142":3,"2144":5,"2145":2,"2146":2,"2147":3,"2148":1,"2149":1,"2150":3,"2151":3,"2152":5,"2154":1,"2156":4,"2158":6,"2159":4,"2160":1,"2161":7,"2162":2,"2164":1,"2165":2,"2166":2,"2167":3,"2169":4,"2170":1,"2173":3,"2174":3,"2175":1,"2176":4,"2178":2,"2179":2,"2180":1,"2181":6,"2183":1,"2184":1,"2185":1,"2187":1,"2190":4,"2191":2,"2192":2,"2193":3,"2194":1,"2197":1,"2200":2,"2201":1,"2202":2,"2203":1,"2204":4,"2205":2,"2209":1,"2211":1,"2213":5,"2216":1,"2218":1,"2229":1,"2232":5,"2234":5,"2236":2,"2244":1,"2246":1}}],["arenotthrottledevenafterthewindowisexhausted",{"3":{"1436":1}}],["arenotflagged",{"3":{"1436":10}}],["arenotificationsenabled",{"3":{"1417":1}}],["aren",{"3":{"0":1,"1538":1,"1543":1,"2164":1,"2184":1}}],["a",{"0":{"1":1,"91":1,"92":1,"93":1,"95":1,"137":1,"170":1,"451":1,"813":1,"1193":1,"1218":1,"1222":1,"1223":2,"1224":1,"1225":1,"1228":1,"1233":1,"1235":1,"1240":1,"1246":1,"1250":1,"1265":1,"1294":1,"1295":1,"1305":2,"1346":1,"1352":1,"1357":1,"1382":1,"1386":1,"1389":1,"1400":1,"1406":1,"1420":2,"1422":1,"1426":1,"1429":3,"1430":1,"1433":1,"1435":1,"1442":1,"1523":1,"1530":1,"1574":1,"1581":1,"1588":1,"1595":1,"1610":1,"1656":1,"1685":1,"1722":1,"1744":1,"1795":1,"1804":1,"1805":1,"1810":1,"1831":2,"1837":1,"1842":1,"1858":1,"1859":1,"1865":1,"1871":2,"1872":1,"1873":1,"1874":2,"1879":2,"1880":1,"1882":1,"1883":1,"1889":2,"1895":1,"1902":1,"1919":3,"1933":1,"1945":1,"1946":1,"1948":1,"1954":1,"1955":1,"1957":1,"1962":2,"1975":1,"2026":1,"2041":1,"2046":1,"2047":1,"2048":1,"2057":1,"2058":1,"2059":1,"2064":1,"2068":1,"2075":2,"2077":1,"2092":2,"2093":1,"2095":1,"2104":1,"2114":1,"2128":2,"2138":1,"2151":1,"2160":1,"2165":2,"2166":1,"2167":1,"2168":2,"2169":1,"2174":1,"2178":1,"2186":1,"2189":1,"2191":1,"2192":1,"2199":1,"2233":1},"1":{"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"327":1,"328":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"496":1,"497":1,"498":1,"499":1,"500":1,"501":1,"502":1,"503":1,"533":1,"534":1,"535":1,"536":1,"537":1,"538":1,"539":1,"540":1,"541":1,"561":1,"562":1,"563":1,"564":1,"565":1,"566":1,"567":1,"568":1,"569":1,"570":1,"571":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"578":1,"579":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1,"722":1,"723":1,"724":1,"725":1,"726":1,"727":1,"728":1,"729":1,"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1,"763":1,"764":1,"765":1,"766":1,"767":1,"768":1,"769":1,"770":1,"779":1,"780":1,"781":1,"782":1,"783":1,"784":1,"785":1,"786":1,"807":1,"808":1,"809":1,"810":1,"811":1,"812":1,"813":1,"814":1,"815":1,"858":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"865":1,"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":1,"951":1,"952":1,"953":1,"954":1,"955":1,"956":1,"957":1,"958":1,"959":1,"960":1,"969":1,"970":1,"971":1,"972":1,"973":1,"974":1,"975":1,"976":1,"1031":1,"1032":1,"1033":1,"1034":1,"1035":1,"1036":1,"1037":1,"1038":1,"1039":1,"1040":1,"1041":1,"1042":1,"1043":1,"1044":1,"1045":1,"1046":1,"1064":1,"1065":1,"1066":1,"1067":1,"1068":1,"1069":1,"1070":1,"1071":1,"1130":1,"1131":1,"1132":1,"1133":1,"1134":1,"1135":1,"1136":1,"1137":1,"1181":1,"1182":1,"1183":1,"1184":1,"1185":1,"1186":1,"1187":1,"1188":1,"1189":1,"1397":1,"1398":1,"1399":1,"1400":1,"1401":1,"1402":1,"1681":1,"1682":1,"1683":1,"1684":1,"1685":1,"1686":1,"1687":1,"1688":1,"1689":1,"1690":1,"1691":1,"1692":1,"1693":1,"1694":1,"1695":1,"1696":1,"1697":1,"1698":1,"1699":1,"1700":1,"1701":1,"1702":1,"1703":1,"1704":1,"1705":1,"1794":1,"1795":1,"1796":1,"1797":1,"1798":1,"1799":1,"1800":1,"1801":1,"1802":1,"1818":1,"1819":1,"1820":1,"1821":1,"1822":1,"1823":1,"1824":1,"1825":1,"1826":1,"1827":1,"1828":1,"1829":1,"1830":1,"1831":1,"1832":1,"1833":1,"1834":1,"1847":1,"1848":1,"1849":1,"1850":1,"1851":1,"1852":1,"1853":1,"1854":1,"1855":1,"1856":1,"1857":1,"1858":1,"1859":1,"1860":1,"1861":1,"1862":1,"1863":1,"1864":1,"1865":1,"1866":1,"1867":1,"1868":1,"1869":2,"1870":2,"1871":2,"1872":2,"1873":2,"1874":2,"1875":2,"1876":2,"1877":2,"1893":1,"1894":1,"1895":1,"1896":1,"1897":1,"1898":1,"1899":1,"1931":1,"1932":1,"1933":1,"1934":1,"1935":1,"1936":1,"1937":1,"1938":1,"1939":1,"1940":1,"1941":1,"2016":2,"2017":2,"2018":2,"2019":2,"2020":2,"2021":2,"2022":2,"2023":2,"2024":2,"2025":2,"2026":2,"2027":2,"2028":2,"2029":2,"2030":2,"2031":2,"2032":2,"2033":2,"2034":2,"2035":2,"2036":2,"2037":2,"2038":2,"2039":2,"2040":1,"2041":1,"2042":1,"2043":1,"2044":1,"2045":1,"2046":1,"2047":1,"2048":1,"2049":1,"2050":1,"2072":3,"2073":3,"2074":3,"2075":3,"2076":3,"2077":3,"2078":3,"2079":3,"2080":3,"2081":3,"2082":3,"2083":1,"2084":1,"2085":1,"2086":1,"2087":1,"2088":1,"2089":1,"2090":1,"2091":1,"2092":1,"2093":1,"2094":1,"2095":1,"2096":1,"2097":1,"2098":1,"2099":1,"2100":1,"2111":2,"2112":2,"2113":2,"2114":2,"2115":2,"2116":2,"2117":2,"2118":1,"2119":1,"2120":1,"2121":1,"2122":1,"2123":1,"2124":1,"2125":1,"2163":1,"2164":1,"2165":1,"2166":1,"2167":1,"2168":1,"2169":1,"2170":1,"2171":1,"2172":2,"2173":2,"2174":2,"2175":2,"2176":2,"2177":2,"2178":2,"2179":2,"2180":2,"2181":2,"2182":2},"3":{"0":949,"1":4,"5":6,"6":4,"7":2,"10":4,"11":4,"12":1,"13":1,"15":12,"17":9,"18":1,"19":14,"20":8,"21":7,"22":9,"23":7,"24":56,"25":7,"26":10,"27":21,"30":6,"31":9,"32":5,"33":5,"37":3,"38":4,"39":25,"41":8,"42":4,"43":2,"45":2,"46":5,"47":4,"48":1,"51":2,"52":4,"53":15,"54":5,"55":4,"57":5,"58":4,"59":11,"60":10,"61":4,"62":13,"63":3,"66":2,"67":6,"68":12,"69":4,"70":6,"71":20,"72":17,"73":7,"74":5,"76":4,"77":3,"78":15,"79":4,"80":11,"81":29,"82":1,"85":2,"86":1,"87":1,"88":3,"90":1,"91":11,"92":9,"93":8,"94":9,"95":7,"96":4,"97":7,"98":4,"99":12,"100":19,"101":3,"102":10,"103":8,"104":2,"107":5,"108":3,"109":98,"110":9,"111":24,"113":5,"114":1,"115":10,"116":1,"117":7,"118":1,"119":4,"120":7,"121":9,"122":40,"123":5,"124":2,"125":8,"126":21,"127":3,"128":3,"130":5,"131":3,"132":12,"133":3,"134":4,"135":65,"136":34,"137":15,"138":8,"139":16,"140":3,"141":4,"142":7,"143":1,"145":7,"146":4,"147":17,"148":7,"149":7,"150":21,"151":7,"152":1,"155":5,"156":6,"157":43,"158":8,"159":19,"160":19,"161":8,"162":2,"164":5,"165":8,"166":24,"167":6,"168":11,"170":24,"171":3,"173":6,"174":9,"175":18,"176":7,"177":20,"178":25,"179":5,"180":5,"181":3,"184":8,"185":8,"186":30,"187":6,"188":13,"189":9,"190":2,"193":9,"194":6,"195":15,"196":5,"197":6,"198":5,"199":2,"200":12,"201":31,"202":14,"203":1,"206":5,"207":4,"208":6,"209":8,"211":1,"212":5,"213":8,"214":16,"215":13,"216":12,"217":11,"218":6,"219":10,"220":3,"223":1,"224":9,"225":23,"226":5,"227":13,"228":8,"229":3,"230":20,"231":1,"233":6,"234":20,"235":47,"236":16,"237":23,"239":1,"240":1,"241":9,"242":6,"243":48,"244":3,"245":23,"246":7,"247":1,"248":7,"249":3,"250":1,"251":1,"252":1,"253":8,"254":8,"255":46,"256":10,"257":3,"258":11,"259":10,"260":3,"261":6,"263":1,"264":7,"265":78,"266":6,"267":10,"269":1,"272":4,"273":12,"275":3,"276":1,"279":6,"280":8,"281":12,"282":7,"283":12,"284":9,"285":2,"286":6,"287":1,"290":6,"291":10,"292":4,"293":9,"294":2,"295":8,"296":3,"298":5,"299":8,"300":6,"301":7,"302":10,"303":12,"304":1,"305":18,"306":2,"309":9,"310":14,"311":12,"312":14,"313":1,"314":5,"317":12,"318":50,"319":15,"320":17,"321":1,"323":1,"324":4,"325":5,"326":6,"327":1,"328":3,"329":10,"330":19,"331":4,"332":3,"333":14,"335":17,"336":2,"337":3,"339":2,"340":15,"341":50,"342":28,"343":30,"344":11,"345":3,"348":4,"349":7,"350":35,"351":9,"352":14,"353":18,"358":12,"359":36,"360":16,"361":26,"363":7,"364":1,"365":11,"366":1,"368":2,"369":7,"370":17,"371":8,"372":8,"373":18,"374":11,"375":4,"376":1,"379":6,"380":8,"381":2,"382":2,"383":7,"384":14,"386":9,"387":8,"388":11,"389":2,"390":22,"391":12,"392":7,"393":1,"395":12,"396":4,"397":27,"398":13,"399":10,"400":10,"401":14,"402":10,"403":8,"404":9,"405":7,"406":1,"407":14,"408":9,"409":5,"411":3,"412":3,"413":15,"414":4,"415":15,"416":2,"418":4,"419":6,"420":2,"421":1,"422":10,"423":2,"424":4,"425":5,"426":3,"427":10,"428":4,"429":1,"432":1,"433":8,"434":4,"435":9,"436":4,"438":2,"439":3,"440":4,"441":4,"442":7,"443":12,"444":6,"446":4,"447":11,"448":16,"449":12,"450":14,"451":10,"452":3,"454":6,"457":2,"458":12,"459":48,"460":6,"461":17,"462":4,"463":3,"464":6,"465":10,"466":2,"468":1,"469":6,"470":18,"471":2,"472":9,"473":1,"474":5,"477":4,"478":1,"481":5,"482":5,"483":7,"484":2,"485":1,"486":5,"487":3,"488":2,"489":3,"490":8,"491":8,"492":8,"493":6,"494":5,"495":3,"496":1,"497":7,"498":10,"499":23,"500":15,"501":17,"502":1,"503":2,"505":3,"506":7,"507":19,"508":4,"509":9,"511":7,"512":7,"513":7,"514":1,"516":3,"517":11,"518":22,"519":3,"520":17,"522":3,"523":4,"524":9,"526":5,"527":11,"528":18,"529":8,"530":18,"531":2,"533":1,"534":5,"535":9,"536":50,"537":18,"538":25,"539":29,"540":12,"541":5,"543":7,"544":7,"545":27,"546":13,"547":13,"548":2,"549":59,"550":8,"551":13,"552":1,"555":6,"556":16,"557":10,"558":11,"559":1,"560":1,"561":1,"562":3,"563":6,"564":28,"565":12,"566":18,"568":5,"569":1,"571":6,"572":32,"573":20,"574":16,"576":9,"577":8,"578":2,"579":3,"582":7,"583":41,"584":12,"585":36,"586":5,"587":5,"589":1,"590":10,"591":34,"592":25,"593":15,"594":1,"598":15,"599":22,"600":6,"601":12,"602":5,"603":5,"605":3,"607":9,"608":8,"609":43,"610":28,"611":12,"612":9,"613":1,"614":1,"615":1,"616":4,"617":12,"618":28,"619":12,"620":15,"622":1,"624":5,"625":19,"626":46,"627":21,"628":14,"629":5,"630":4,"631":4,"632":8,"633":43,"634":12,"635":12,"638":5,"639":7,"640":37,"641":16,"642":17,"643":4,"645":1,"648":12,"649":23,"650":23,"651":11,"652":1,"655":1,"656":14,"657":36,"658":18,"659":15,"660":5,"664":10,"665":24,"666":10,"667":12,"668":2,"669":1,"670":2,"672":2,"673":14,"674":26,"675":19,"676":29,"677":2,"678":2,"680":1,"681":16,"682":25,"683":24,"684":20,"685":2,"688":7,"689":18,"690":32,"691":41,"692":27,"693":1,"694":1,"696":4,"697":15,"698":72,"699":16,"700":17,"701":4,"702":14,"703":1,"705":1,"706":15,"707":61,"708":18,"709":28,"710":2,"711":3,"713":2,"714":15,"715":19,"716":25,"717":22,"718":6,"719":3,"720":8,"721":3,"722":1,"723":3,"724":12,"725":58,"726":24,"727":20,"728":3,"729":5,"731":5,"732":17,"733":49,"734":17,"735":19,"736":2,"737":3,"738":1,"740":24,"741":63,"742":20,"743":41,"744":3,"745":6,"747":2,"748":8,"749":25,"750":9,"751":24,"755":2,"756":7,"757":31,"758":16,"759":28,"760":6,"761":5,"762":1,"763":1,"764":4,"765":12,"766":24,"767":24,"768":17,"769":2,"770":3,"773":8,"774":7,"775":7,"776":19,"778":2,"779":1,"781":8,"782":27,"783":12,"784":23,"785":5,"786":2,"788":1,"789":14,"790":37,"791":14,"792":28,"793":11,"794":7,"795":4,"797":3,"798":16,"799":29,"800":12,"801":13,"802":4,"803":8,"804":4,"807":1,"808":2,"809":23,"810":24,"811":21,"812":10,"813":10,"814":3,"815":7,"817":1,"818":12,"819":42,"820":25,"821":20,"822":1,"823":3,"825":14,"826":21,"827":101,"828":18,"829":38,"830":12,"831":10,"832":18,"833":4,"834":2,"836":5,"837":13,"838":32,"839":18,"840":19,"842":3,"844":2,"845":8,"846":13,"847":8,"848":5,"849":5,"852":6,"853":18,"854":18,"855":13,"856":19,"857":6,"858":1,"859":2,"860":18,"861":36,"862":20,"863":18,"865":2,"867":2,"868":10,"869":12,"870":10,"871":9,"872":8,"873":8,"874":4,"875":7,"876":6,"877":1,"879":4,"880":5,"881":56,"882":20,"883":15,"884":2,"887":1,"888":9,"889":20,"890":15,"891":20,"892":1,"893":2,"896":8,"897":41,"898":18,"899":13,"900":2,"901":2,"903":13,"904":17,"905":95,"906":27,"907":36,"908":7,"909":5,"910":6,"912":4,"913":7,"914":22,"915":7,"916":14,"917":3,"918":3,"919":1,"920":14,"921":15,"922":33,"923":16,"924":11,"926":91,"927":1,"929":2,"930":16,"931":14,"932":12,"933":12,"935":1,"937":1,"938":4,"939":14,"940":9,"941":12,"942":1,"944":1,"945":10,"946":19,"947":10,"948":17,"951":1,"952":2,"953":15,"954":27,"955":16,"956":19,"957":5,"958":3,"959":2,"960":10,"963":26,"964":43,"965":20,"966":32,"967":1,"968":5,"969":1,"970":1,"971":18,"972":24,"973":20,"974":26,"975":7,"976":3,"979":16,"980":23,"981":15,"982":17,"983":1,"984":2,"986":1,"987":8,"988":45,"989":12,"990":15,"991":3,"992":1,"994":3,"995":14,"996":72,"997":14,"998":17,"999":2,"1000":3,"1003":13,"1004":28,"1005":14,"1006":14,"1007":1,"1008":3,"1010":1,"1011":9,"1012":19,"1013":9,"1014":1,"1016":6,"1017":24,"1018":101,"1019":52,"1020":39,"1021":4,"1022":4,"1024":1,"1025":11,"1026":20,"1027":13,"1028":21,"1029":7,"1030":4,"1031":1,"1032":2,"1033":24,"1034":31,"1035":13,"1036":13,"1037":4,"1038":1,"1039":1,"1040":4,"1041":10,"1042":40,"1043":22,"1044":17,"1045":4,"1046":2,"1048":6,"1049":12,"1050":59,"1051":31,"1052":29,"1053":3,"1054":1,"1055":7,"1058":16,"1059":42,"1060":19,"1061":14,"1064":1,"1065":2,"1066":25,"1067":59,"1068":19,"1069":15,"1070":2,"1071":3,"1073":1,"1074":19,"1075":19,"1076":15,"1077":11,"1078":1,"1079":4,"1082":13,"1083":15,"1084":7,"1085":19,"1086":1,"1087":1,"1089":12,"1090":29,"1091":75,"1092":39,"1093":37,"1094":6,"1095":4,"1099":13,"1100":23,"1101":11,"1102":16,"1103":2,"1107":14,"1108":13,"1109":11,"1110":7,"1112":1,"1114":3,"1115":22,"1116":58,"1117":30,"1118":17,"1119":3,"1122":3,"1123":8,"1124":45,"1125":15,"1126":27,"1128":4,"1129":6,"1130":1,"1132":18,"1133":25,"1134":17,"1135":21,"1137":5,"1139":1,"1140":12,"1141":6,"1142":8,"1143":7,"1144":3,"1145":6,"1147":3,"1149":1,"1150":21,"1151":1,"1152":5,"1153":4,"1154":7,"1155":6,"1156":1,"1157":2,"1160":9,"1161":18,"1162":16,"1163":9,"1164":1,"1167":10,"1168":22,"1169":13,"1170":8,"1171":2,"1173":1,"1174":3,"1175":13,"1176":11,"1177":9,"1178":5,"1179":4,"1181":1,"1182":2,"1183":13,"1184":25,"1185":19,"1186":5,"1187":11,"1188":3,"1190":7,"1191":8,"1192":2,"1193":7,"1194":1,"1196":8,"1200":5,"1201":3,"1202":2,"1203":2,"1204":1,"1210":1,"1211":7,"1212":205,"1213":10,"1214":13,"1215":6,"1216":7,"1217":13,"1218":5,"1219":10,"1220":18,"1221":8,"1222":13,"1223":10,"1224":5,"1225":7,"1226":4,"1227":6,"1228":19,"1229":271,"1230":6,"1231":24,"1232":17,"1233":17,"1234":19,"1235":11,"1236":20,"1237":440,"1238":1,"1239":22,"1240":13,"1241":56,"1242":26,"1243":18,"1244":29,"1245":7,"1246":22,"1247":697,"1248":7,"1249":32,"1250":8,"1251":6,"1252":12,"1253":16,"1254":19,"1255":13,"1256":20,"1257":16,"1258":18,"1259":626,"1260":12,"1261":8,"1262":12,"1263":72,"1264":33,"1265":50,"1266":18,"1267":27,"1268":14,"1269":38,"1270":1080,"1271":245,"1272":18,"1273":37,"1274":27,"1275":48,"1276":28,"1277":22,"1278":38,"1279":27,"1280":25,"1281":38,"1282":15,"1283":27,"1284":27,"1285":22,"1286":2691,"1287":12,"1288":18,"1289":28,"1290":41,"1291":7,"1292":17,"1293":33,"1294":37,"1295":11,"1296":6,"1297":37,"1298":19,"1299":6,"1300":2030,"1301":393,"1302":11,"1303":5,"1304":28,"1305":13,"1306":11,"1307":29,"1308":10,"1309":659,"1310":175,"1311":1740,"1312":201,"1313":10,"1314":12,"1315":31,"1316":21,"1317":30,"1318":54,"1319":10,"1320":47,"1321":4,"1322":21,"1323":1507,"1324":3020,"1325":5,"1326":15,"1327":11,"1328":34,"1329":4,"1330":22,"1331":9,"1332":39,"1333":38,"1334":22,"1335":11,"1336":22,"1337":41,"1338":34,"1339":1358,"1340":8,"1341":4,"1342":48,"1343":23,"1344":22,"1345":6,"1346":6,"1347":41,"1348":19,"1349":25,"1350":1293,"1351":8,"1352":44,"1353":38,"1354":8,"1355":27,"1356":6,"1357":36,"1358":35,"1359":4088,"1360":1,"1361":3,"1362":21,"1363":7,"1364":8,"1365":11,"1366":61,"1367":11,"1368":15,"1369":387,"1370":6,"1371":14,"1372":26,"1373":24,"1374":6,"1375":18,"1376":17,"1377":6,"1378":25,"1379":24,"1380":654,"1381":6,"1382":15,"1383":24,"1384":25,"1385":5,"1386":9,"1387":15,"1388":9,"1389":39,"1390":17,"1391":26,"1392":15,"1393":10,"1394":8,"1395":2089,"1396":2756,"1397":16,"1398":26,"1399":29,"1400":16,"1401":20,"1402":1020,"1403":9,"1404":4,"1405":19,"1406":31,"1407":12,"1408":11,"1409":24,"1410":18,"1411":21,"1412":8,"1413":9,"1414":11,"1415":1296,"1416":280,"1417":1296,"1418":17,"1419":9,"1420":11,"1421":14,"1422":25,"1423":37,"1424":21,"1425":24,"1426":15,"1427":376,"1428":11,"1429":36,"1430":48,"1431":98,"1432":40,"1433":32,"1434":9,"1435":56,"1436":4562,"1437":18,"1438":498,"1439":7,"1440":11,"1441":73,"1442":32,"1443":84,"1444":18,"1445":28,"1446":13,"1447":60,"1448":4,"1449":23,"1450":2,"1451":4,"1452":9,"1453":83,"1454":46,"1455":264,"1456":55,"1457":18,"1458":16,"1459":52,"1460":36,"1461":11,"1462":5,"1463":6,"1464":4,"1465":48,"1466":9,"1467":344,"1468":3,"1469":7,"1470":6,"1471":1,"1472":19,"1473":16,"1474":49,"1475":81,"1476":44,"1477":8,"1478":20,"1479":11,"1480":16,"1481":11,"1482":11,"1483":4,"1484":4,"1485":4,"1486":45,"1487":20,"1488":158,"1489":97,"1490":81,"1491":28,"1492":151,"1493":2,"1494":1,"1496":165,"1497":2,"1498":9,"1499":2,"1500":14,"1502":1,"1503":3,"1504":3,"1507":6,"1508":12,"1509":4,"1510":1,"1511":2,"1512":6,"1513":6,"1514":1,"1517":2,"1518":1,"1521":1,"1523":3,"1524":17,"1525":15,"1526":160,"1527":5,"1528":2,"1529":1,"1530":1,"1531":36,"1532":7,"1534":54,"1535":7,"1536":7,"1537":19,"1538":2,"1539":3,"1540":1,"1541":2,"1542":5,"1543":2,"1544":8,"1545":7,"1546":3,"1547":14,"1548":4,"1549":2,"1550":1,"1551":2,"1552":1,"1553":22,"1554":8,"1555":2,"1556":5,"1557":4,"1558":1,"1559":1,"1561":1,"1565":2,"1566":4,"1567":1,"1568":2,"1569":5,"1570":6,"1571":2,"1572":14,"1574":3,"1575":18,"1576":14,"1577":208,"1578":6,"1579":2,"1581":5,"1582":29,"1583":7,"1584":2,"1585":36,"1586":10,"1588":5,"1589":18,"1590":2,"1591":91,"1592":8,"1595":4,"1596":36,"1597":4,"1598":5,"1599":27,"1600":6,"1602":2,"1605":6,"1607":6,"1608":1,"1609":3,"1610":2,"1611":9,"1612":1,"1613":1,"1614":2,"1615":1,"1616":1,"1617":1,"1621":5,"1626":5,"1627":24,"1629":5,"1630":41,"1631":115,"1632":53,"1633":2,"1634":10,"1635":17,"1636":2,"1637":39,"1638":40,"1639":75,"1640":32,"1641":113,"1642":1,"1643":7,"1644":1,"1645":1,"1646":13,"1647":11,"1648":5,"1649":6,"1650":5,"1651":50,"1652":10,"1653":29,"1654":22,"1655":2,"1656":20,"1657":1,"1658":3,"1659":4,"1660":1,"1661":19,"1662":31,"1663":16,"1664":40,"1665":21,"1666":23,"1667":30,"1668":33,"1669":22,"1670":41,"1671":27,"1672":13,"1673":23,"1674":4,"1675":23,"1676":1,"1677":16,"1678":5,"1679":4,"1681":5,"1682":3,"1683":4,"1684":13,"1685":54,"1686":43,"1687":7,"1688":2,"1689":7,"1692":12,"1693":4,"1694":3,"1695":2,"1696":5,"1697":5,"1698":4,"1699":5,"1700":11,"1701":16,"1702":35,"1703":3,"1704":3,"1705":2,"1706":6,"1707":15,"1708":20,"1709":4,"1710":5,"1714":4,"1715":3,"1716":2,"1717":1,"1718":12,"1719":10,"1720":10,"1721":11,"1722":10,"1723":7,"1724":19,"1725":1,"1726":8,"1727":50,"1728":17,"1729":21,"1730":8,"1731":13,"1732":5,"1733":1,"1734":10,"1735":6,"1736":3,"1737":4,"1738":4,"1739":6,"1741":6,"1742":3,"1743":3,"1744":2,"1747":1,"1748":28,"1749":25,"1750":18,"1751":6,"1755":8,"1757":1,"1758":3,"1759":5,"1760":7,"1761":10,"1763":2,"1764":50,"1765":77,"1766":1,"1767":42,"1768":25,"1769":28,"1770":2,"1771":6,"1772":3,"1773":9,"1774":2,"1775":1,"1776":19,"1778":2,"1779":10,"1780":10,"1781":17,"1782":9,"1783":11,"1784":11,"1785":5,"1786":4,"1787":3,"1788":14,"1789":10,"1790":39,"1792":12,"1793":9,"1794":9,"1795":7,"1796":8,"1797":9,"1798":3,"1799":17,"1800":17,"1801":20,"1802":11,"1803":6,"1804":6,"1805":55,"1806":19,"1807":14,"1808":7,"1809":5,"1810":61,"1811":12,"1812":3,"1813":6,"1814":7,"1815":55,"1816":12,"1817":20,"1818":14,"1820":6,"1821":37,"1822":8,"1823":17,"1824":3,"1825":22,"1826":17,"1827":10,"1828":14,"1829":19,"1830":12,"1831":13,"1832":15,"1833":24,"1834":16,"1835":8,"1836":1,"1837":1,"1838":4,"1839":20,"1840":24,"1841":14,"1842":15,"1843":16,"1844":9,"1845":10,"1846":8,"1847":10,"1848":6,"1849":25,"1850":2,"1851":32,"1852":9,"1853":16,"1854":18,"1855":2,"1856":25,"1857":9,"1858":8,"1859":5,"1860":4,"1861":9,"1862":17,"1863":10,"1864":8,"1865":14,"1866":4,"1867":9,"1868":15,"1869":15,"1870":6,"1871":13,"1872":6,"1873":7,"1874":20,"1875":12,"1876":42,"1877":27,"1878":9,"1879":7,"1880":6,"1881":24,"1882":23,"1883":9,"1884":9,"1885":15,"1886":13,"1887":10,"1888":8,"1889":28,"1890":4,"1891":17,"1892":16,"1893":11,"1894":9,"1895":6,"1896":8,"1897":6,"1898":32,"1899":18,"1900":13,"1901":4,"1902":36,"1903":5,"1904":16,"1905":16,"1906":8,"1907":6,"1908":30,"1909":49,"1910":18,"1911":39,"1912":27,"1913":8,"1914":4,"1915":21,"1916":37,"1917":14,"1918":16,"1919":17,"1920":20,"1921":10,"1922":54,"1923":49,"1924":16,"1925":9,"1926":15,"1927":33,"1928":7,"1929":16,"1930":20,"1931":8,"1932":5,"1933":41,"1934":13,"1935":13,"1936":8,"1937":9,"1938":1,"1939":8,"1940":31,"1941":18,"1942":11,"1943":6,"1944":27,"1945":16,"1946":27,"1947":28,"1948":50,"1949":15,"1950":37,"1951":14,"1952":15,"1953":6,"1954":18,"1955":15,"1956":9,"1957":8,"1958":14,"1959":20,"1960":5,"1961":10,"1962":23,"1963":8,"1964":13,"1965":20,"1966":14,"1967":8,"1968":20,"1969":10,"1970":20,"1971":17,"1972":26,"1973":13,"1974":6,"1975":21,"1976":10,"1977":28,"1978":16,"1979":27,"1980":26,"1981":4,"1982":44,"1983":6,"1984":26,"1985":26,"1986":15,"1987":12,"1988":32,"1989":20,"1990":16,"1991":7,"1992":32,"1993":15,"1994":8,"1995":48,"1996":41,"1997":20,"1998":18,"1999":17,"2000":13,"2001":69,"2002":46,"2003":37,"2004":19,"2005":9,"2006":5,"2007":17,"2008":18,"2009":12,"2010":4,"2011":22,"2012":11,"2013":16,"2014":17,"2015":8,"2016":14,"2017":6,"2018":3,"2019":8,"2020":10,"2021":7,"2022":2,"2023":2,"2024":2,"2025":36,"2026":17,"2027":4,"2028":8,"2029":13,"2030":13,"2031":24,"2032":4,"2033":23,"2034":14,"2035":37,"2036":8,"2037":10,"2038":20,"2039":16,"2040":15,"2041":4,"2042":15,"2043":12,"2044":63,"2045":34,"2046":15,"2047":18,"2048":37,"2049":28,"2050":24,"2051":9,"2052":6,"2053":2,"2054":12,"2055":5,"2056":29,"2057":28,"2058":27,"2059":9,"2060":12,"2061":12,"2062":8,"2063":3,"2064":26,"2065":18,"2066":14,"2067":7,"2068":19,"2069":30,"2070":4,"2071":10,"2072":23,"2073":6,"2074":19,"2075":15,"2076":29,"2077":21,"2078":13,"2079":15,"2080":7,"2081":22,"2082":18,"2083":20,"2084":9,"2085":19,"2086":6,"2087":21,"2088":11,"2089":21,"2090":2,"2091":10,"2092":4,"2093":1,"2094":11,"2095":1,"2096":11,"2097":4,"2098":15,"2099":9,"2100":17,"2101":16,"2102":15,"2103":3,"2104":1,"2105":3,"2106":8,"2107":13,"2108":7,"2109":24,"2110":12,"2111":9,"2112":15,"2113":5,"2114":11,"2115":20,"2116":10,"2117":8,"2118":23,"2119":15,"2120":9,"2121":5,"2122":1,"2123":13,"2124":9,"2125":24,"2126":17,"2127":5,"2128":49,"2129":20,"2130":8,"2131":19,"2132":13,"2133":26,"2134":18,"2135":20,"2136":14,"2137":14,"2138":17,"2139":9,"2140":27,"2141":23,"2142":14,"2143":15,"2144":37,"2145":14,"2146":10,"2147":17,"2148":20,"2149":15,"2150":6,"2151":21,"2152":30,"2153":8,"2154":10,"2155":20,"2156":8,"2157":9,"2158":59,"2159":11,"2160":48,"2161":14,"2162":32,"2163":15,"2164":6,"2165":15,"2166":29,"2167":35,"2168":32,"2169":34,"2170":33,"2171":38,"2172":21,"2173":9,"2174":18,"2175":10,"2176":25,"2177":20,"2178":13,"2179":19,"2180":14,"2181":30,"2182":48,"2183":10,"2184":9,"2185":20,"2186":7,"2187":14,"2188":11,"2189":5,"2190":23,"2191":9,"2192":23,"2193":6,"2194":33,"2195":41,"2196":14,"2197":14,"2198":15,"2199":19,"2200":8,"2201":13,"2202":14,"2203":8,"2204":24,"2205":30,"2206":8,"2207":1,"2208":4,"2209":7,"2210":2,"2211":7,"2212":11,"2213":1,"2214":1,"2215":2,"2216":8,"2217":6,"2222":15,"2223":7,"2227":1,"2228":3,"2229":11,"2230":7,"2232":26,"2233":2,"2234":160,"2236":1,"2238":2,"2241":12,"2242":3,"2247":4}}],["adb",{"2":{"1479":1},"3":{"1479":6}}],["ada",{"3":{"1364":1,"1369":2,"1436":1}}],["adaptation",{"3":{"1359":1,"1417":1,"1461":1,"1492":2}}],["adapted",{"3":{"1312":1,"1611":1}}],["adapterfactorytests",{"3":{"1199":1,"1207":2,"1427":3,"1437":1,"1487":1}}],["adapters",{"1":{"1417":1},"3":{"53":2,"74":1,"482":1,"1004":2,"1091":3,"1096":1,"1192":2,"1202":1,"1203":1,"1212":1,"1237":1,"1259":1,"1301":12,"1309":1,"1311":1,"1312":3,"1359":1,"1360":2,"1366":1,"1368":1,"1370":1,"1377":1,"1380":5,"1396":13,"1402":1,"1416":9,"1417":15,"1420":1,"1427":2,"1436":3,"1437":1,"1438":3,"1487":1,"1496":3,"1500":1,"1503":1,"1513":1,"1526":2,"1540":2,"1577":1,"1660":1,"1781":1,"1931":1,"1932":2,"1941":2,"2069":1,"2073":2,"2118":2,"2121":1,"2122":1,"2125":1,"2174":1,"2176":1,"2181":1,"2232":1}}],["adapter",{"0":{"1365":1,"1366":1,"1367":1,"1935":1},"3":{"0":4,"51":1,"53":5,"54":2,"117":1,"380":1,"584":1,"660":1,"725":1,"1016":1,"1020":1,"1022":1,"1075":1,"1076":1,"1077":2,"1089":1,"1091":7,"1092":3,"1093":1,"1094":2,"1150":1,"1192":2,"1202":2,"1203":2,"1212":1,"1213":1,"1258":1,"1259":3,"1271":2,"1286":2,"1296":2,"1300":10,"1301":18,"1307":2,"1309":28,"1311":1,"1312":19,"1323":3,"1324":6,"1339":2,"1349":2,"1350":9,"1359":23,"1360":2,"1365":2,"1366":1,"1368":2,"1369":13,"1378":5,"1380":16,"1395":1,"1396":30,"1400":3,"1402":3,"1404":1,"1415":11,"1416":4,"1417":79,"1418":1,"1419":1,"1420":3,"1422":1,"1425":1,"1427":18,"1435":1,"1436":1,"1437":1,"1438":3,"1455":1,"1496":7,"1526":2,"1539":1,"1553":1,"1577":3,"1591":1,"1663":1,"1735":1,"1790":3,"1884":1,"1915":2,"1916":4,"1920":1,"1923":1,"1927":1,"1932":1,"1938":1,"1946":2,"1948":1,"1949":2,"2018":3,"2019":1,"2020":2,"2027":1,"2029":2,"2115":1,"2121":2,"2125":1,"2172":1,"2174":2,"2181":2,"2182":3,"2229":1}}],["adapting",{"3":{"1286":1,"1324":2,"1395":1}}],["adapts",{"3":{"690":1,"1230":1,"1247":1,"1309":1,"1311":1,"1324":3,"1395":1,"1417":6,"1420":1,"1436":1,"1627":1}}],["adapt",{"3":{"413":1,"1417":3,"1559":1,"1649":1,"2123":1}}],["adherence",{"3":{"1359":3,"1417":4}}],["adequate",{"3":{"1324":1,"1537":1,"1559":1}}],["adee5058",{"2":{"563":1},"3":{"563":1,"1496":2}}],["adjudicated",{"3":{"1526":1,"1531":1,"1578":1}}],["adjustable",{"3":{"1798":1}}],["adjusting",{"3":{"1638":1,"1765":1}}],["adjustinventorycommand",{"3":{"1270":1}}],["adjustinventoryhandler",{"3":{"897":2,"900":1,"1767":1}}],["adjusted",{"3":{"1359":1,"1767":1,"2197":1}}],["adjustment",{"3":{"1323":1,"1742":1,"1749":1,"1767":1}}],["adjustments",{"3":{"1237":1}}],["adjusttouniversal",{"3":{"1247":1,"1309":1,"1312":3,"1396":2}}],["adjust",{"3":{"343":1,"1270":1,"1311":2,"1339":1,"1359":1,"1396":1,"1537":1,"1639":1,"1742":1}}],["adjacency",{"3":{"583":1,"749":1,"751":1,"1311":4,"1315":1,"1323":1,"1436":3,"1488":1,"1666":1,"1825":1}}],["adjacencies",{"3":{"0":2,"464":1,"749":1,"750":1,"751":1,"1212":2,"1311":5,"1436":4,"1488":1,"1825":2,"2232":1,"2234":1}}],["adjacent",{"0":{"1300":1},"3":{"325":1,"371":1,"464":1,"535":1,"608":1,"974":1,"1052":1,"1270":2,"1285":1,"1300":1,"1395":3,"1416":1,"1825":1,"1870":1}}],["ad",{"3":{"158":1,"709":1,"809":1,"1216":1,"1237":1,"1286":1,"1300":1,"1323":2,"1324":4,"1350":3,"1359":3,"1396":4,"1402":1,"1436":1,"1467":2,"1475":1,"1489":1,"1537":2,"1545":1,"1813":1,"1930":1,"1992":1}}],["admissibility",{"3":{"1241":1}}],["admission",{"3":{"689":1,"691":1,"1286":1,"1309":1,"1324":1,"1416":1,"1629":1,"1631":1}}],["admit",{"3":{"1118":1,"1286":1,"1339":1,"1350":1,"1359":1,"1653":1}}],["admits",{"3":{"235":1,"237":1,"707":1,"827":1,"916":1,"948":1,"1049":1,"1091":1,"1241":1,"1242":1,"1301":1,"1307":1,"1324":1,"1339":2,"1372":1,"1395":1,"1396":1,"1591":1}}],["admitting",{"3":{"178":1,"682":1,"946":1,"1242":1,"1247":2,"1286":2,"1323":1,"1359":2,"1369":2,"1417":1,"1423":1,"1436":1,"2177":1}}],["admitted",{"3":{"0":1,"111":1,"237":1,"1116":1,"1122":1,"1124":1,"1128":1,"1212":1,"1247":1,"1309":2,"1324":7,"1339":1,"1436":3,"1640":1,"2001":1,"2152":1}}],["adminuserscontroller",{"3":{"2204":1}}],["adminuserenabled",{"2":{"1465":1,"1469":1},"3":{"1465":1,"1469":1}}],["admincreateforms",{"3":{"1436":1}}],["admincredentials",{"3":{"1199":1,"1207":1,"1433":1,"1436":5}}],["adminclient",{"3":{"1436":1}}],["adminpages",{"2":{"1627":1},"3":{"1436":1,"1627":1}}],["adminpaths",{"3":{"1433":1,"1436":2}}],["adminpanelsettings",{"3":{"1415":1}}],["adminplaneport",{"3":{"640":1,"1436":1}}],["admin123",{"3":{"1415":2,"1436":1,"1488":1}}],["admins",{"3":{"1396":2,"1402":7,"1749":1,"1771":1,"1869":1}}],["admintoken",{"3":{"1436":1}}],["admintargetport",{"3":{"1339":1}}],["admintestcontext",{"3":{"1199":2,"1207":1}}],["adminendpoint",{"3":{"1339":2}}],["adminendpointname",{"3":{"1339":1}}],["adminendpointexpression",{"2":{"1327":1},"3":{"1327":1,"1339":1}}],["administer",{"3":{"1415":1,"2202":1}}],["administered",{"3":{"1286":1}}],["administers",{"3":{"1285":1,"1415":2}}],["administrative",{"3":{"461":1,"497":1,"1300":4,"1339":2,"1395":1,"1414":1,"1415":2,"1630":1}}],["administrationrequests",{"3":{"1207":2,"1300":8}}],["administrationrequestvalidators",{"3":{"1207":2,"1300":9}}],["administrationcontrollerbasetests",{"3":{"1199":1,"1207":5,"1311":2}}],["administrationpermissions",{"2":{"1059":2,"1963":1,"2202":1,"2203":2},"3":{"1059":3,"1199":14,"1203":1,"1207":2,"1297":4,"1300":13,"1311":2,"1324":3,"1415":8,"1496":1,"1963":1,"2202":1,"2203":2}}],["administration",{"0":{"1409":1,"2203":1},"2":{"1300":1},"3":{"0":3,"19":1,"27":1,"186":1,"305":1,"444":1,"497":3,"499":1,"536":2,"552":1,"640":1,"649":1,"698":1,"809":2,"881":2,"931":1,"1042":1,"1044":2,"1057":1,"1058":1,"1059":19,"1060":1,"1061":1,"1082":3,"1086":2,"1203":28,"1207":110,"1212":2,"1256":1,"1257":1,"1259":12,"1275":6,"1286":17,"1287":2,"1297":5,"1300":61,"1311":23,"1318":1,"1320":1,"1323":11,"1324":58,"1327":1,"1339":1,"1403":3,"1409":4,"1414":3,"1415":34,"1436":11,"1438":1,"1441":1,"1467":1,"1496":4,"1526":2,"1535":1,"1621":3,"1625":1,"1626":1,"1627":1,"1760":2,"1962":1,"1963":1,"2195":1,"2196":1,"2202":1,"2203":1,"2204":1,"2205":1}}],["administrators",{"3":{"1286":1,"1300":1,"1311":1,"1324":1,"1763":1,"1764":1,"1776":1}}],["administrator",{"3":{"458":1,"714":1,"1300":1,"1304":1,"1311":2,"1324":1,"1339":1,"1406":2,"1415":3,"1467":1,"1637":1,"1638":1,"1765":4,"1768":1,"1777":1,"1977":1,"2226":1}}],["adminrolescontrollertests",{"3":{"1199":1,"1207":2}}],["adminrolescontroller",{"2":{"1409":1},"3":{"1199":2,"1203":1,"1207":2,"1300":1,"1311":2,"1409":2,"1415":6,"1496":2,"2204":2}}],["adminbypassroles",{"2":{"260":1,"261":1,"392":1,"393":1},"3":{"243":1,"260":2,"261":1,"392":1,"393":1,"1350":1,"1380":1}}],["admin",{"0":{"1760":1},"2":{"1466":1,"1468":1,"1470":2,"1472":1,"1477":2,"1637":1,"1757":1,"1760":1},"3":{"0":5,"24":1,"186":3,"233":1,"234":1,"235":2,"236":1,"245":1,"259":1,"317":1,"318":6,"320":3,"324":2,"340":1,"388":1,"390":1,"570":1,"578":1,"599":3,"600":2,"601":1,"618":1,"640":3,"642":1,"698":1,"719":1,"743":1,"897":1,"905":1,"1028":2,"1058":1,"1059":3,"1075":1,"1212":1,"1237":1,"1247":1,"1248":1,"1256":1,"1259":2,"1270":2,"1286":9,"1297":2,"1300":14,"1309":6,"1311":6,"1318":1,"1323":5,"1324":42,"1332":1,"1339":9,"1359":1,"1379":1,"1380":2,"1395":11,"1396":6,"1402":9,"1409":6,"1414":4,"1415":15,"1431":1,"1433":1,"1436":31,"1437":2,"1438":6,"1440":1,"1441":2,"1442":1,"1443":1,"1444":1,"1446":3,"1447":2,"1455":4,"1456":1,"1465":3,"1466":1,"1467":11,"1468":1,"1469":1,"1470":2,"1472":3,"1474":1,"1477":9,"1488":4,"1490":1,"1524":1,"1526":4,"1535":1,"1548":1,"1577":1,"1591":11,"1596":3,"1600":4,"1608":1,"1625":1,"1626":2,"1627":5,"1630":1,"1637":1,"1638":1,"1641":1,"1653":1,"1668":1,"1742":3,"1746":1,"1747":11,"1748":17,"1749":18,"1750":5,"1754":2,"1755":1,"1757":6,"1759":1,"1760":7,"1761":5,"1764":2,"1765":7,"1767":4,"1768":13,"1769":1,"1771":4,"1773":1,"1775":2,"1776":1,"1777":2,"1828":1,"1869":2,"1881":1,"1945":1,"1963":1,"1995":1,"1996":4,"2009":2,"2035":1,"2046":1,"2197":1,"2203":3,"2234":1}}],["adornments",{"3":{"1324":1}}],["adojobstore",{"2":{"1043":1},"3":{"1043":1}}],["ado",{"3":{"0":1,"1067":1,"1068":1,"1135":1,"1273":1,"1286":3,"1990":1}}],["adoptable",{"3":{"136":1,"923":1,"1417":1,"1492":1,"1929":1}}],["adopting",{"3":{"0":2,"24":1,"25":1,"41":1,"60":1,"62":1,"91":1,"160":1,"189":1,"228":1,"245":1,"305":1,"333":1,"352":2,"359":1,"472":1,"620":1,"657":1,"665":1,"667":1,"668":1,"670":1,"732":1,"733":1,"734":1,"854":1,"891":1,"1043":1,"1061":2,"1075":1,"1144":1,"1154":1,"1161":1,"1232":1,"1233":1,"1237":2,"1241":1,"1270":1,"1271":1,"1277":1,"1281":1,"1286":10,"1300":3,"1323":4,"1369":1,"1425":1,"1436":2,"1489":1,"1492":2,"1599":1,"1602":1,"1653":1,"1659":1,"1661":1,"1810":1,"1923":1,"1978":1,"2056":1,"2144":1,"2181":1,"2194":1,"2204":3}}],["adoption",{"0":{"1860":1},"3":{"0":17,"27":1,"128":1,"160":1,"186":1,"193":1,"195":1,"223":1,"230":2,"279":1,"298":1,"305":1,"308":1,"318":1,"320":1,"322":1,"324":1,"325":1,"326":1,"343":1,"350":2,"357":1,"358":1,"359":1,"360":1,"365":2,"401":1,"450":1,"468":2,"470":1,"477":1,"484":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":2,"527":1,"529":1,"530":1,"534":2,"536":1,"543":1,"545":2,"546":1,"550":3,"556":1,"564":1,"566":1,"572":1,"573":1,"574":1,"575":2,"578":1,"599":2,"603":1,"609":1,"611":1,"618":1,"626":1,"629":1,"632":1,"640":1,"649":1,"655":1,"657":2,"663":1,"667":1,"669":1,"696":1,"698":1,"702":1,"713":1,"715":1,"723":1,"725":1,"728":1,"733":2,"734":1,"741":1,"766":1,"769":1,"774":1,"790":1,"792":1,"825":2,"829":1,"832":1,"861":2,"863":1,"864":1,"879":1,"881":1,"891":2,"897":1,"900":2,"913":1,"920":1,"924":1,"926":1,"942":1,"954":1,"956":1,"963":2,"964":2,"968":1,"972":1,"981":1,"986":1,"988":1,"994":2,"996":2,"999":1,"1050":3,"1051":1,"1053":1,"1054":1,"1055":1,"1084":1,"1133":1,"1143":1,"1147":1,"1153":1,"1161":1,"1164":1,"1168":1,"1184":2,"1188":1,"1190":1,"1212":3,"1250":1,"1259":1,"1264":2,"1266":2,"1270":8,"1286":3,"1300":2,"1301":3,"1311":1,"1323":1,"1324":1,"1339":2,"1350":1,"1415":1,"1417":2,"1436":18,"1488":1,"1489":2,"1496":5,"1500":2,"1524":2,"1532":1,"1574":1,"1581":2,"1582":3,"1583":1,"1585":2,"1591":2,"1596":1,"1597":1,"1599":4,"1600":1,"1601":1,"1737":1,"1815":2,"1833":1,"1862":1,"1876":1,"1948":1,"1963":1,"1970":1,"1971":1,"1975":1,"1978":2,"1979":1,"2044":1,"2045":1,"2047":1,"2056":1,"2061":1,"2134":1,"2135":1,"2145":2,"2170":1,"2181":1,"2205":1,"2234":1}}],["adopt",{"3":{"0":6,"47":1,"149":1,"258":1,"265":1,"350":1,"395":1,"413":1,"448":1,"449":1,"599":1,"619":1,"649":1,"698":1,"706":1,"723":1,"725":1,"747":1,"749":1,"833":1,"838":1,"853":1,"913":1,"974":1,"1052":1,"1093":1,"1094":1,"1122":1,"1127":1,"1134":1,"1141":1,"1145":1,"1151":1,"1161":1,"1162":1,"1186":1,"1241":1,"1247":1,"1270":1,"1286":1,"1311":3,"1323":1,"1324":3,"1339":1,"1395":3,"1417":1,"1436":5,"1467":1,"1473":1,"1482":1,"1488":2,"1496":4,"1524":1,"1530":1,"1532":1,"1595":1,"1599":2,"1675":1,"1709":1,"1765":1,"1807":1,"1851":1,"1959":1,"2001":1,"2027":1,"2064":1,"2081":1,"2135":1,"2145":1,"2155":1,"2199":1,"2241":1}}],["adopts",{"3":{"0":4,"246":1,"305":1,"325":1,"400":1,"408":1,"446":1,"448":1,"572":2,"618":1,"619":1,"657":1,"665":1,"715":2,"790":1,"792":1,"794":1,"827":1,"1034":1,"1059":1,"1061":1,"1161":3,"1212":1,"1247":1,"1270":1,"1286":3,"1300":2,"1301":1,"1311":2,"1324":1,"1337":1,"1339":3,"1395":3,"1396":1,"1417":1,"1421":1,"1424":1,"1427":2,"1436":4,"1447":1,"1488":2,"1492":1,"1526":1,"1531":1,"1670":1,"2025":1,"2058":1,"2133":2,"2181":1,"2196":1}}],["adopter",{"3":{"0":3,"243":1,"245":1,"325":1,"360":1,"361":1,"551":1,"633":4,"634":2,"635":1,"651":2,"702":1,"726":1,"780":2,"782":2,"938":1,"939":1,"966":1,"1133":1,"1163":1,"1212":2,"1270":3,"1436":1,"1675":1,"1727":1,"1851":1,"1922":1,"1978":1,"2079":1,"2204":1}}],["adopters",{"3":{"0":3,"243":4,"244":1,"247":1,"249":1,"256":2,"324":1,"353":1,"415":1,"634":1,"635":1,"649":1,"782":1,"786":1,"1052":1,"1237":1,"1270":4,"1301":1,"1436":3,"1671":1,"1673":1,"1923":1}}],["adopted",{"0":{"1963":1,"2153":1},"1":{"1138":1,"1139":1,"1140":1,"1141":1,"1142":1,"1143":1,"1144":1,"1145":1,"1146":1,"1147":1,"1148":1,"1149":1,"1150":1,"1151":1,"1152":1,"1153":1,"1154":1,"1155":1,"1156":1,"1157":1},"3":{"0":23,"150":1,"153":1,"214":1,"218":1,"243":1,"259":1,"261":1,"302":1,"310":1,"350":1,"358":1,"359":1,"360":1,"365":1,"418":1,"454":1,"536":1,"545":1,"556":1,"572":1,"609":2,"642":1,"650":1,"655":1,"657":1,"664":1,"665":1,"667":1,"725":1,"726":1,"747":1,"790":1,"827":1,"854":1,"857":1,"954":1,"962":1,"973":1,"976":1,"1043":1,"1049":1,"1061":1,"1075":1,"1081":2,"1089":1,"1095":1,"1138":1,"1148":1,"1212":5,"1237":1,"1259":1,"1264":1,"1265":1,"1270":3,"1271":1,"1286":3,"1293":1,"1295":1,"1300":2,"1311":1,"1312":1,"1323":1,"1324":1,"1395":1,"1436":7,"1447":1,"1488":1,"1489":1,"1496":3,"1531":1,"1534":1,"1545":1,"1582":1,"1583":1,"1706":1,"1748":1,"1815":1,"1875":1,"1972":1,"2129":1,"2130":1,"2140":1,"2145":2,"2147":1,"2148":1,"2170":1,"2183":1,"2222":2,"2234":2}}],["advantage",{"3":{"2222":1}}],["advancing",{"3":{"1477":1}}],["advanceable",{"3":{"1396":1}}],["advanceabletimeprovider",{"3":{"1199":2,"1207":1}}],["advanced",{"3":{"1300":1,"1350":1,"1358":1,"1359":2,"2222":1}}],["advances",{"3":{"707":2,"848":1,"1229":2,"1247":3,"1270":2,"1323":2,"1324":1,"1339":1,"1395":2,"1427":1,"1438":1,"1876":1,"1948":1,"2234":1}}],["advance",{"3":{"0":1,"539":1,"690":1,"709":1,"810":1,"1075":1,"1212":1,"1323":1,"1324":2,"1395":1,"1482":1,"1912":1}}],["advice",{"3":{"1278":1,"1369":1,"1847":1,"2087":1}}],["advised",{"3":{"698":1}}],["advisories",{"3":{"0":1,"370":1,"618":1,"1436":1,"1453":1,"1455":1,"1459":1}}],["advisory",{"3":{"0":5,"135":1,"145":1,"150":1,"226":1,"265":1,"370":4,"371":3,"372":1,"373":1,"397":1,"440":1,"509":1,"584":1,"591":1,"617":1,"619":2,"624":3,"626":4,"640":1,"952":1,"956":1,"958":1,"1032":1,"1034":1,"1036":1,"1037":1,"1067":1,"1069":1,"1073":1,"1075":2,"1077":2,"1212":1,"1312":1,"1323":1,"1333":1,"1359":11,"1417":1,"1433":1,"1436":1,"1438":2,"1443":1,"1453":5,"1454":1,"1455":2,"1456":2,"1459":4,"1460":4,"1488":2,"1490":2,"1492":1,"1526":4,"1534":2,"1577":4,"1582":1,"1585":1,"1591":7,"1599":1,"1600":2,"1630":1,"1631":1,"1638":1,"1643":1,"1648":1,"1673":1,"1716":2,"2011":1,"2058":1,"2060":1,"2128":1,"2158":1,"2234":2,"2236":1}}],["adversarially",{"3":{"1496":2}}],["adversarial",{"3":{"1185":1,"1436":11,"1487":1,"1489":3,"1496":11,"1500":1,"1578":1,"1896":1,"1898":1}}],["advertised",{"3":{"741":1,"1380":1,"1396":1,"1489":1,"2064":1}}],["advertise",{"3":{"447":1,"1244":1,"1247":1,"1309":1,"1324":1,"2132":1}}],["advertises",{"3":{"31":1,"33":1,"448":1,"1218":1,"1229":1,"1270":1,"1288":1,"1311":2,"1324":1,"1350":1,"1376":1,"1380":1,"1436":2,"1896":1,"2133":1}}],["advertising",{"3":{"300":1,"1265":1,"1300":1,"1320":1,"1359":1}}],["adcpartnercollectionresult",{"3":{"1496":1}}],["adcpartnerinfo",{"3":{"1496":1}}],["adcprodstpys4way4uzb3g",{"2":{"1473":1,"1478":1},"3":{"1467":1,"1473":1,"1478":1}}],["adccollectionresult",{"3":{"1496":1}}],["adceventinfo",{"3":{"1496":1}}],["adcoauthuisettings",{"3":{"1496":1}}],["adckv",{"3":{"1474":1}}],["adc2026",{"3":{"1347":1,"1350":1}}],["adcapphostcollection",{"2":{"1449":1},"3":{"1199":2,"1203":1,"1207":1,"1328":1,"1339":5,"1449":1,"1496":1}}],["adcapphostsmoketests",{"2":{"1069":1,"1450":1},"3":{"914":1,"1067":2,"1069":2,"1070":1,"1199":1,"1203":1,"1207":2,"1328":2,"1339":11,"1449":10,"1450":2,"1496":2}}],["adcapphostfixture",{"2":{"1450":1},"3":{"914":1,"1069":2,"1070":1,"1199":3,"1203":1,"1207":3,"1328":2,"1339":6,"1449":7,"1450":1,"1496":2}}],["adcarchitecturemap",{"2":{"132":1,"1161":1,"2105":1},"3":{"132":1,"1161":1,"1199":42,"1207":2,"1323":1,"1341":1,"1396":1,"1436":60,"1487":1,"1489":5,"1526":5,"1535":1,"2043":1,"2105":1}}],["adchometicketingtests",{"3":{"1199":1,"1207":1}}],["adchometests",{"3":{"1199":1,"1207":5,"1350":1,"1395":1,"1438":1}}],["adchomepartnerstests",{"3":{"1199":1,"1207":1}}],["adchomepagecontent",{"3":{"1199":3,"1203":2,"1207":4,"1324":3,"1395":3,"1416":21}}],["adchomeservicedoubles",{"3":{"1199":3,"1207":1}}],["adchomecontent",{"2":{"1393":1},"3":{"1199":2,"1203":1,"1207":5,"1385":2,"1393":3,"1394":1,"1395":18,"1496":1}}],["adchome",{"2":{"554":1},"3":{"554":1,"556":1,"559":2,"1199":5,"1203":1,"1207":3,"1350":7,"1359":4,"1392":5,"1393":9,"1394":1,"1395":36,"1396":1,"1416":8,"1436":3,"1489":2,"1496":8,"1526":7,"1531":1,"1535":2}}],["adc",{"0":{"92":1,"93":1,"1441":1,"1455":1,"1456":1,"1457":1,"1458":1,"1514":1,"1604":1,"1679":1},"1":{"687":1,"688":1,"689":1,"690":1,"691":1,"692":1,"693":1,"694":1,"1190":1,"1191":1,"1192":1,"1193":1,"1194":1,"1195":1,"1340":1,"1341":1,"1342":1,"1343":1,"1344":1,"1345":1,"1346":1,"1347":1,"1348":1,"1349":1,"1350":1,"1351":1,"1352":1,"1353":1,"1354":1,"1355":1,"1356":1,"1357":1,"1358":1,"1359":1,"1360":1,"1361":1,"1362":1,"1363":1,"1364":1,"1365":1,"1366":1,"1367":1,"1368":1,"1369":1,"1370":1,"1371":1,"1372":1,"1373":1,"1374":1,"1375":1,"1376":1,"1377":1,"1378":1,"1379":1,"1380":1,"1381":1,"1382":1,"1383":1,"1384":1,"1385":1,"1386":1,"1387":1,"1388":1,"1389":1,"1390":1,"1391":1,"1392":1,"1393":1,"1394":1,"1395":1,"1396":1,"1397":1,"1398":1,"1399":1,"1400":1,"1401":1,"1402":1,"1403":1,"1404":1,"1405":1,"1406":1,"1407":1,"1408":1,"1409":1,"1410":1,"1411":1,"1412":1,"1413":1,"1414":1,"1415":1,"1416":1,"1462":1,"1463":1,"1464":1,"1465":1,"1466":1,"1467":1,"1468":1,"1469":1,"1470":1,"1522":1,"1523":1,"1524":1,"1525":1,"1526":1,"1527":1,"1528":1,"1529":1,"1530":1,"1531":1,"1532":1,"1533":1,"1534":1,"1535":1,"1628":1,"1629":1,"1630":1,"1631":1,"1632":1,"1633":1,"1634":1,"1635":1,"1636":1,"1637":1,"1638":1,"1639":1,"1640":1,"1641":1},"2":{"47":3,"58":1,"59":2,"80":1,"95":1,"229":1,"395":1,"401":1,"564":1,"642":1,"644":1,"667":1,"998":1,"999":1,"1069":2,"1191":1,"1194":1,"1200":1,"1201":1,"1203":2,"1207":10,"1215":1,"1271":1,"1309":2,"1325":1,"1328":1,"1340":1,"1341":2,"1350":6,"1359":5,"1363":1,"1369":2,"1370":3,"1378":1,"1379":2,"1380":7,"1381":1,"1395":6,"1396":11,"1402":6,"1404":6,"1415":4,"1427":1,"1435":1,"1437":8,"1438":2,"1440":1,"1442":2,"1445":7,"1446":1,"1449":1,"1455":2,"1457":1,"1458":1,"1459":1,"1471":1,"1473":4,"1474":3,"1475":1,"1481":1,"1486":9,"1487":6,"1490":2,"1492":1,"1494":1,"1496":1,"1500":1,"1503":1,"1509":1,"1512":1,"1524":1,"1525":1,"1526":1,"1531":2,"1534":1,"1611":2,"1615":2,"1619":2,"1639":1,"2035":4,"2036":4,"2037":4,"2038":1,"2039":1,"2107":1,"2113":1,"2204":1},"3":{"0":118,"3":6,"7":2,"17":1,"27":3,"31":3,"39":1,"47":5,"57":2,"58":2,"59":13,"60":2,"62":13,"63":5,"68":2,"76":1,"80":3,"85":1,"91":2,"92":2,"93":12,"94":2,"95":13,"96":4,"97":1,"98":8,"99":2,"100":1,"101":2,"102":1,"104":4,"109":3,"115":1,"117":3,"121":3,"127":3,"128":7,"132":1,"135":1,"145":6,"146":1,"147":3,"149":3,"150":1,"151":1,"152":3,"159":1,"164":1,"173":1,"175":5,"179":4,"180":7,"181":3,"184":3,"186":12,"189":1,"195":19,"200":1,"203":4,"214":1,"217":4,"218":7,"219":2,"220":3,"229":2,"230":2,"235":7,"238":1,"241":2,"243":16,"245":9,"249":1,"250":5,"251":2,"252":2,"254":2,"257":2,"258":1,"259":5,"260":9,"261":6,"279":1,"281":2,"283":3,"285":1,"291":4,"293":1,"295":13,"300":1,"310":4,"314":2,"318":7,"324":2,"325":7,"326":2,"333":1,"341":4,"344":3,"348":2,"350":11,"352":10,"353":10,"354":1,"359":2,"368":1,"373":2,"374":3,"375":1,"378":2,"384":7,"386":5,"387":3,"388":9,"390":11,"391":1,"392":6,"393":2,"395":2,"397":1,"401":10,"403":8,"405":1,"409":1,"412":2,"413":5,"414":1,"418":24,"422":5,"423":8,"424":7,"425":8,"426":18,"427":4,"428":16,"429":13,"430":3,"438":1,"439":1,"443":1,"444":2,"446":2,"448":14,"450":1,"451":3,"452":8,"453":3,"454":5,"455":1,"459":4,"463":6,"464":2,"465":5,"466":5,"468":2,"470":22,"472":1,"474":1,"475":13,"476":18,"477":14,"478":6,"480":1,"481":1,"482":1,"483":2,"486":1,"487":2,"488":2,"489":2,"490":3,"491":6,"492":5,"493":7,"494":9,"495":7,"497":12,"499":12,"502":4,"507":6,"511":4,"513":2,"514":1,"522":2,"523":2,"524":2,"527":1,"534":1,"536":4,"543":7,"545":22,"547":2,"550":4,"551":1,"552":5,"554":3,"556":33,"558":4,"559":2,"563":5,"564":17,"566":4,"567":7,"572":38,"574":2,"575":6,"576":1,"577":4,"578":7,"582":1,"583":31,"585":14,"586":1,"589":1,"591":7,"593":1,"594":3,"597":2,"598":1,"599":36,"600":5,"601":6,"602":7,"603":7,"604":3,"607":13,"608":2,"609":59,"611":10,"613":2,"616":5,"618":8,"619":1,"620":3,"621":4,"624":8,"625":7,"626":41,"627":2,"628":6,"629":7,"632":2,"638":5,"640":25,"641":1,"642":10,"643":4,"644":7,"647":1,"649":12,"651":2,"655":4,"657":9,"663":1,"664":3,"665":12,"666":1,"667":4,"668":8,"669":8,"674":16,"677":1,"681":2,"683":4,"684":1,"685":1,"686":1,"687":1,"688":2,"689":3,"690":6,"691":4,"692":1,"698":2,"702":1,"707":1,"715":1,"717":1,"719":5,"720":2,"723":2,"724":3,"725":22,"726":1,"727":3,"728":1,"733":3,"737":1,"739":1,"741":2,"743":4,"744":6,"745":1,"749":17,"751":4,"752":2,"755":2,"756":5,"757":19,"758":2,"759":4,"760":4,"761":3,"764":4,"765":2,"766":33,"767":1,"768":3,"769":4,"774":16,"780":4,"782":15,"784":4,"785":1,"790":1,"798":5,"799":4,"803":7,"804":2,"805":6,"806":1,"825":4,"826":8,"827":25,"829":1,"830":5,"831":14,"832":11,"833":14,"836":2,"837":11,"838":20,"839":4,"840":2,"841":3,"853":1,"854":6,"855":1,"857":3,"859":1,"861":15,"862":1,"863":10,"864":3,"867":2,"868":10,"869":23,"870":10,"872":1,"873":11,"875":5,"876":26,"877":10,"881":15,"884":1,"891":4,"892":1,"893":1,"897":6,"900":1,"912":1,"913":8,"914":14,"915":2,"916":2,"917":6,"920":1,"924":3,"926":8,"927":1,"939":1,"946":3,"949":1,"954":19,"956":4,"958":4,"959":3,"960":6,"963":3,"964":1,"971":10,"972":6,"973":2,"974":4,"979":1,"980":6,"981":1,"983":2,"986":2,"988":7,"991":3,"994":2,"995":5,"996":4,"998":10,"999":7,"1004":13,"1006":1,"1007":2,"1010":2,"1012":6,"1013":1,"1014":1,"1016":2,"1017":9,"1018":17,"1021":4,"1022":1,"1036":1,"1044":2,"1045":2,"1049":4,"1050":4,"1052":2,"1054":9,"1055":2,"1058":2,"1065":2,"1066":6,"1067":2,"1068":1,"1069":6,"1070":3,"1073":2,"1074":3,"1075":3,"1078":3,"1081":1,"1082":7,"1083":3,"1085":3,"1089":2,"1090":9,"1093":4,"1094":9,"1095":6,"1096":1,"1099":4,"1100":9,"1103":2,"1114":1,"1115":2,"1116":35,"1117":2,"1119":1,"1123":2,"1124":14,"1125":3,"1126":3,"1127":3,"1129":1,"1133":4,"1135":1,"1140":6,"1142":3,"1150":13,"1154":1,"1156":1,"1161":3,"1168":7,"1183":2,"1184":3,"1190":1,"1191":4,"1192":14,"1194":2,"1195":2,"1199":2028,"1200":3,"1201":4,"1202":12,"1203":1184,"1204":3,"1206":65,"1207":6153,"1208":44,"1209":138,"1211":4,"1212":31,"1213":3,"1214":1,"1215":3,"1216":1,"1229":2,"1230":1,"1237":62,"1238":1,"1239":13,"1242":3,"1244":2,"1247":67,"1259":15,"1262":2,"1264":10,"1266":1,"1270":94,"1271":70,"1286":146,"1300":200,"1301":24,"1302":2,"1304":13,"1305":3,"1307":16,"1308":9,"1309":182,"1310":32,"1311":161,"1312":89,"1313":1,"1314":5,"1315":1,"1318":5,"1322":2,"1323":138,"1324":210,"1325":14,"1326":18,"1327":6,"1328":9,"1329":1,"1331":9,"1332":23,"1333":1,"1334":7,"1335":11,"1336":11,"1338":5,"1339":194,"1340":3,"1341":17,"1342":24,"1344":15,"1345":10,"1346":2,"1347":32,"1348":10,"1349":20,"1350":770,"1351":1,"1352":19,"1353":21,"1354":10,"1355":8,"1356":4,"1357":3,"1358":3,"1359":2783,"1360":1,"1361":2,"1363":5,"1364":5,"1365":2,"1366":3,"1367":3,"1368":3,"1369":201,"1370":5,"1371":15,"1373":8,"1374":2,"1375":1,"1376":2,"1377":14,"1378":15,"1379":7,"1380":440,"1381":4,"1383":1,"1384":1,"1389":2,"1390":4,"1395":952,"1396":1398,"1397":4,"1398":3,"1399":2,"1400":5,"1401":5,"1402":443,"1403":8,"1404":22,"1405":4,"1406":18,"1407":5,"1408":3,"1409":9,"1410":10,"1411":1,"1412":7,"1413":8,"1414":13,"1415":866,"1416":258,"1417":98,"1426":3,"1427":39,"1428":2,"1431":6,"1433":1,"1435":13,"1436":873,"1437":94,"1438":127,"1439":2,"1440":5,"1441":11,"1442":18,"1443":11,"1444":4,"1445":19,"1446":11,"1447":5,"1449":5,"1450":1,"1451":2,"1452":3,"1453":2,"1454":1,"1455":26,"1456":1,"1457":6,"1458":2,"1459":19,"1460":15,"1461":4,"1462":3,"1464":14,"1465":2,"1466":1,"1467":52,"1470":4,"1471":4,"1472":7,"1473":9,"1474":25,"1475":10,"1476":14,"1477":6,"1478":5,"1479":1,"1480":1,"1481":10,"1482":2,"1485":2,"1486":35,"1487":46,"1488":23,"1489":24,"1490":18,"1491":2,"1492":31,"1494":1,"1496":214,"1498":4,"1500":3,"1503":1,"1505":1,"1509":2,"1512":1,"1514":1,"1520":1,"1522":2,"1523":1,"1524":8,"1525":5,"1526":119,"1529":1,"1530":1,"1531":21,"1532":6,"1533":1,"1534":15,"1535":10,"1573":1,"1577":8,"1582":10,"1583":1,"1585":3,"1588":2,"1589":4,"1591":23,"1593":1,"1596":8,"1598":2,"1599":4,"1601":1,"1605":1,"1606":1,"1611":17,"1615":2,"1619":6,"1620":1,"1627":10,"1628":1,"1629":1,"1630":1,"1631":4,"1637":1,"1638":1,"1639":1,"1641":1,"1645":1,"1646":1,"1649":1,"1650":2,"1653":2,"1654":1,"1656":2,"1658":2,"1659":1,"1673":1,"1675":1,"1676":1,"1677":1,"1678":3,"1679":2,"1703":1,"1705":2,"1706":1,"1709":3,"1710":1,"1724":1,"1736":1,"1748":1,"1756":1,"1765":1,"1782":1,"1785":1,"1810":3,"1815":3,"1829":2,"1830":1,"1839":1,"1842":1,"1845":1,"1851":1,"1859":1,"1860":3,"1861":1,"1862":1,"1865":1,"1874":1,"1875":2,"1880":1,"1884":2,"1891":1,"1896":3,"1898":1,"1916":1,"1922":6,"1923":1,"1927":1,"1933":2,"1937":1,"1946":2,"1947":2,"1948":1,"1953":1,"1963":2,"1970":1,"1978":5,"1979":2,"1983":8,"1996":5,"1997":1,"2001":13,"2002":1,"2005":2,"2009":1,"2014":2,"2025":3,"2026":2,"2031":1,"2034":2,"2035":9,"2036":4,"2037":4,"2038":3,"2039":2,"2043":1,"2044":3,"2045":3,"2047":7,"2048":1,"2056":5,"2057":1,"2058":1,"2064":2,"2069":3,"2070":1,"2085":2,"2087":1,"2103":1,"2105":1,"2107":2,"2112":1,"2113":5,"2114":2,"2115":6,"2116":1,"2129":3,"2133":9,"2134":6,"2138":2,"2139":1,"2140":2,"2152":3,"2153":5,"2158":4,"2159":1,"2160":13,"2161":1,"2170":2,"2181":5,"2192":1,"2194":2,"2204":4,"2230":1,"2233":1,"2234":4}}],["addview",{"3":{"1339":2}}],["addvalidationerror",{"3":{"1300":1}}],["addvalidatorsfromassemblycontaining",{"2":{"1271":1,"1319":1},"3":{"1271":1,"1300":1,"1309":3,"1319":1,"1323":5,"1415":1}}],["addvalidatorsfromassembly",{"2":{"1830":1},"3":{"1270":3,"1271":2,"1323":3,"1359":5,"1415":3,"1436":3,"1830":1}}],["addvariantcommand",{"2":{"991":1},"3":{"897":1,"988":1,"991":2}}],["addvariant",{"3":{"897":1}}],["addvarianthandler",{"2":{"898":1,"900":1,"901":1},"3":{"0":1,"897":3,"898":1,"900":3,"901":1,"1591":1,"1597":1,"1767":1,"1769":1}}],["addxdevicecapabilities",{"3":{"1417":1}}],["addx",{"3":{"1415":1}}],["addxxxui",{"3":{"1395":1}}],["addxui",{"3":{"1324":2,"1396":1}}],["addxmodule",{"3":{"1316":1}}],["addxmldatacontractserializerformatters",{"2":{"964":1},"3":{"964":1}}],["addwasmformfactor",{"3":{"1324":3,"1416":1,"1417":5}}],["addwarmuptask",{"2":{"238":1},"3":{"235":1,"238":1,"1334":1,"1339":4,"1379":1,"1380":1,"1396":1,"1415":1,"1443":1}}],["addwarmupreadiness",{"2":{"1329":1,"1334":1},"3":{"235":1,"1329":1,"1334":2,"1339":9,"1396":1,"1415":1,"1443":2,"1577":1}}],["addjsonstream",{"3":{"1324":3,"1416":1}}],["addjsonoptions",{"3":{"1311":1}}],["addjwtbearer",{"3":{"0":1,"827":2}}],["addgrpcclient",{"3":{"1312":1}}],["addgrpcreflection",{"3":{"1312":1}}],["addgrpc",{"3":{"1312":1,"1441":1}}],["addgrpcservicedefaults",{"0":{"2019":1},"2":{"1656":1,"1663":1,"1927":1,"2019":1,"2029":1},"3":{"1312":7,"1380":1,"1396":2,"1415":1,"1441":1,"1656":1,"1663":1,"1927":1,"2019":1,"2029":1}}],["addgithubprovider",{"3":{"1311":1}}],["addgithub",{"3":{"1311":1}}],["addgoogleprovider",{"3":{"1311":1}}],["addgoogle",{"3":{"1311":1}}],["addgatewayroutepolicies",{"2":{"1338":1},"3":{"1338":1,"1339":5}}],["addgatewayratelimiting",{"2":{"1337":1,"1339":1,"1447":1,"2025":1},"3":{"0":1,"674":1,"827":1,"1337":1,"1339":7,"1447":1,"2025":1}}],["addgatewaydownstreamhealthchecks",{"2":{"99":1,"827":1,"829":1,"1339":1,"1670":1,"2025":1},"3":{"0":1,"99":1,"827":1,"829":1,"1337":1,"1339":9,"1447":1,"1467":1,"1670":1,"2025":1}}],["addquestionansweruniqueupsertindexes",{"3":{"1209":2}}],["addlinerequest",{"3":{"1727":1}}],["addline",{"3":{"1727":1}}],["addlinkasync",{"3":{"1380":2,"1389":1,"1395":10}}],["addlink",{"3":{"1203":4,"1207":8,"1357":1,"1359":9,"1395":1}}],["addlivepollsessionidstatusindex",{"3":{"1209":2}}],["addlivepolls",{"3":{"1209":2}}],["addlogging",{"3":{"954":1,"1436":2}}],["addlocalization",{"2":{"954":1},"3":{"265":1,"954":1,"1311":2,"1324":3,"1432":1,"1436":1}}],["addlocalizationinterceptor",{"2":{"265":1},"3":{"265":1,"1324":2}}],["addrazorcomponents",{"3":{"1436":1}}],["addrabbitmq",{"2":{"2009":1},"3":{"1339":2,"1441":1,"1444":1,"2009":1}}],["addratelimiter",{"3":{"1324":1,"1339":5,"1436":1}}],["addrangeasync",{"3":{"1286":5,"1359":1}}],["addrange",{"3":{"1237":2,"1259":4,"1271":2,"1309":1,"1380":2,"1395":1,"1396":3,"1415":1}}],["addrawsqlqueryexecutor",{"3":{"1175":1,"1286":1}}],["addrow",{"3":{"1286":1}}],["addroleadministrationui",{"3":{"1059":1,"1324":3,"1415":2}}],["addroomnameuniqueindex",{"3":{"1209":2}}],["addroomcommandvalidatortests",{"3":{"1199":1,"1207":1,"1359":2}}],["addroomcommandvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":20}}],["addroomcommand",{"3":{"1199":7,"1203":1,"1207":2,"1359":8,"1374":1,"1380":3,"1395":1}}],["addroomrequest",{"3":{"1199":3,"1203":1,"1207":1,"1359":1,"1374":1,"1380":5,"1382":1,"1395":2}}],["addroomhandlertests",{"3":{"1199":1,"1207":2,"1359":1}}],["addroomhandler",{"3":{"926":1,"1199":2,"1203":1,"1207":2,"1270":3,"1350":2,"1359":13,"1395":3}}],["addroom",{"3":{"926":1,"1203":3,"1207":8,"1270":1,"1343":1,"1350":3,"1359":11,"1395":1}}],["addrequesttransform",{"3":{"1339":2}}],["addref",{"3":{"1324":2}}],["addreverseproxy",{"2":{"837":1},"3":{"837":1,"838":1,"1338":1,"1447":1,"2025":1}}],["address~~",{"3":{"1631":1}}],["addresssavedmessage",{"3":{"1436":2}}],["addressstate",{"3":{"1237":1,"1286":1}}],["addressaddressline2",{"3":{"1286":1}}],["addressaddressline1",{"3":{"1286":1}}],["addressable",{"3":{"572":1,"1150":1,"1270":1,"1286":1,"1311":1,"1350":2,"1359":5,"1402":1}}],["addresspropertyprefix",{"3":{"1286":1}}],["addresscolumn",{"3":{"1286":1}}],["addresscountry",{"3":{"1237":1,"1286":1}}],["addresscity",{"3":{"657":1,"1237":1,"1286":1}}],["addresszipcode",{"3":{"1237":1,"1286":1}}],["addresstestdbcontext",{"3":{"1199":2,"1207":1}}],["addresstests",{"3":{"1199":1,"1207":2}}],["addressvalidationrules",{"2":{"1829":1},"3":{"1207":7,"1271":28,"1810":1,"1829":1}}],["addressvalidationrulestests",{"3":{"1199":1,"1207":3,"1271":8}}],["addressvalidator",{"2":{"1834":1},"3":{"1199":3,"1203":1,"1207":1,"1237":1,"1271":11,"1300":1,"1415":2,"1829":2,"1834":1}}],["addressline2maxlength",{"2":{"1271":1},"3":{"1237":1,"1271":1}}],["addressline2",{"3":{"1237":2,"1286":2,"1324":1,"1764":1}}],["addressline2rules",{"3":{"1199":3,"1203":1,"1207":1,"1271":5}}],["addressline1maxlength",{"2":{"1237":1,"1271":1},"3":{"1237":2,"1271":1}}],["addressline1rules",{"2":{"1829":1},"3":{"1199":3,"1203":1,"1207":1,"1237":2,"1271":7,"1829":1}}],["addressline1",{"3":{"657":2,"1234":1,"1237":5,"1271":1,"1286":3,"1324":1,"1764":2,"1767":1}}],["addressing",{"3":{"1152":1,"1286":2,"1324":2,"2020":1}}],["addressinvariantstests",{"3":{"1199":1,"1207":2}}],["addressinvariants",{"2":{"657":1,"658":1,"1237":3,"1271":4,"1829":1,"1833":1},"3":{"657":4,"658":1,"1198":1,"1199":13,"1203":1,"1207":2,"1229":2,"1230":1,"1234":4,"1237":16,"1271":24,"1286":2,"1767":1,"1810":2,"1829":1,"1833":1}}],["addressee",{"3":{"1309":1}}],["addressed",{"3":{"0":1,"751":1,"1264":1,"1270":3,"1285":1,"1300":1,"1323":1,"1350":1,"1359":5,"1395":1,"1402":1,"1415":1,"1810":1}}],["addresses",{"3":{"0":2,"100":1,"160":1,"175":1,"219":1,"280":1,"282":1,"284":1,"395":1,"403":1,"574":1,"658":1,"749":1,"828":1,"831":1,"832":1,"853":1,"888":1,"1017":1,"1091":1,"1093":1,"1124":1,"1237":2,"1270":2,"1286":1,"1300":4,"1309":7,"1311":4,"1312":2,"1322":2,"1323":3,"1324":1,"1334":1,"1339":1,"1359":7,"1369":1,"1395":4,"1406":2,"1407":1,"1408":2,"1415":6,"1417":3,"1436":5,"1441":1,"1447":1,"1455":1,"1467":1,"1473":1,"1474":1,"1639":1,"1641":1,"1890":2,"1935":1,"2003":1,"2181":1,"2198":1}}],["address",{"0":{"1408":1},"2":{"655":2,"660":1},"3":{"0":11,"59":1,"157":2,"159":1,"161":1,"175":1,"177":1,"179":1,"180":1,"225":1,"235":1,"280":2,"284":3,"348":1,"350":4,"352":2,"353":8,"363":1,"390":1,"403":1,"450":1,"655":2,"657":15,"658":1,"659":1,"660":2,"717":1,"733":1,"749":1,"827":5,"828":1,"829":1,"831":1,"833":1,"837":1,"838":2,"839":1,"841":1,"853":3,"854":5,"855":1,"856":2,"857":1,"881":1,"1018":1,"1020":1,"1059":1,"1124":2,"1126":1,"1184":2,"1188":1,"1198":1,"1199":15,"1203":1,"1207":2,"1212":3,"1229":2,"1230":1,"1234":7,"1237":39,"1241":1,"1247":2,"1270":1,"1271":43,"1286":13,"1289":3,"1292":1,"1293":1,"1294":6,"1295":3,"1300":73,"1309":4,"1311":11,"1312":1,"1322":1,"1323":31,"1324":56,"1327":1,"1330":1,"1337":1,"1339":19,"1344":1,"1347":1,"1350":6,"1355":4,"1359":28,"1364":1,"1365":2,"1368":1,"1369":3,"1380":1,"1389":2,"1391":2,"1394":1,"1395":16,"1396":3,"1402":1,"1405":1,"1406":6,"1407":4,"1408":6,"1413":1,"1415":60,"1416":3,"1417":35,"1424":1,"1427":1,"1432":2,"1433":1,"1436":40,"1438":5,"1441":5,"1444":1,"1447":3,"1467":3,"1476":1,"1492":1,"1496":1,"1498":1,"1526":1,"1541":1,"1577":1,"1596":1,"1629":1,"1630":4,"1631":1,"1639":8,"1641":34,"1653":1,"1662":2,"1666":1,"1667":1,"1719":1,"1727":1,"1742":1,"1746":2,"1747":3,"1750":2,"1764":6,"1765":8,"1767":8,"1768":2,"1769":1,"1790":1,"1810":3,"1825":1,"1828":1,"1829":3,"1833":1,"1834":1,"1896":1,"1899":1,"1908":2,"1911":1,"1973":4,"1977":5,"1978":1,"1979":3,"1999":1,"2007":1,"2013":1,"2022":1,"2024":1,"2025":1,"2066":1,"2078":1,"2134":1,"2142":1,"2146":1,"2198":1,"2200":1,"2237":1,"2239":1}}],["addredisdistributedcache",{"2":{"234":1,"245":1,"254":1,"257":1,"259":1,"260":1},"3":{"0":1,"234":1,"245":1,"254":1,"257":1,"259":1,"260":1,"1339":2,"1467":1}}],["addredisoutputcaching",{"2":{"241":1,"243":1,"247":1,"259":1,"260":1,"261":1,"390":1,"392":1,"393":1,"1332":1,"1668":1,"1923":1},"3":{"0":3,"241":1,"243":1,"247":1,"259":1,"260":2,"261":2,"390":1,"392":1,"393":1,"1332":2,"1339":6,"1442":1,"1526":1,"1600":1,"1668":1,"1923":1}}],["addredisclient",{"2":{"234":1,"257":1,"260":1},"3":{"0":2,"234":1,"245":1,"254":1,"257":1,"259":1,"260":1,"1301":2,"1323":1,"1339":2}}],["addrediscaching",{"2":{"237":1,"241":1,"245":2,"247":1,"260":1,"261":1,"1923":1},"3":{"0":3,"235":1,"237":1,"241":1,"245":2,"247":1,"259":1,"260":2,"261":2,"996":1,"1301":2,"1332":2,"1339":6,"1442":1,"1668":1,"1923":1}}],["addbunitpersistentcomponentstate",{"3":{"1436":2}}],["addbookmarkasync",{"3":{"1395":2}}],["addboundedblazorcircuits",{"2":{"831":1,"832":1,"1124":1},"3":{"831":1,"832":3,"1124":1,"1324":6,"1416":1,"2001":2}}],["addbrokermessaging",{"2":{"195":1,"196":1,"200":1,"201":1,"915":1,"917":1,"931":1,"934":1,"979":1,"1257":1,"1446":1,"1451":1,"1612":1,"2009":1,"2023":1},"3":{"195":1,"196":1,"200":1,"201":1,"640":3,"690":1,"915":1,"917":1,"931":1,"934":1,"979":1,"1257":1,"1259":10,"1311":1,"1316":1,"1317":1,"1320":2,"1323":12,"1326":1,"1339":3,"1380":1,"1441":3,"1444":2,"1446":1,"1451":1,"1467":1,"1534":1,"1591":2,"1612":1,"2009":1,"2023":1}}],["addbrowserdevicecapabilities",{"2":{"413":1,"1599":1,"2121":1},"3":{"0":1,"413":1,"1416":2,"1417":20,"1599":1,"2121":1}}],["addhours",{"3":{"1436":1}}],["addhostedservice",{"3":{"1100":1,"1259":1,"1286":1,"1317":1,"1323":5,"1396":4,"1442":1}}],["addhandler",{"3":{"1359":1}}],["addhybridcache",{"3":{"733":1,"1301":3,"1323":2,"1438":1}}],["addhttpforwarder",{"3":{"1324":2}}],["addhttpforwarderwithservicediscovery",{"2":{"837":1,"1467":1},"3":{"837":1,"1467":1}}],["addhttpmessagehandler",{"3":{"507":1,"1311":1,"1324":2}}],["addhttpclient",{"3":{"1359":1,"1369":2,"1416":2,"1653":1,"1702":1}}],["addhttpclientinstrumentation",{"2":{"402":1,"1443":1},"3":{"402":1,"1443":1}}],["addhttpcontextaccessor",{"2":{"303":1},"3":{"303":1,"1311":3,"1312":1,"1324":2,"1415":2,"1436":2}}],["addunsupportedrange",{"3":{"1310":2}}],["addunsupported",{"3":{"1310":2}}],["addunchecked",{"3":{"1237":2}}],["adduseremailconfirmation",{"3":{"1209":2}}],["adduserlockedon",{"3":{"1209":2}}],["adduseravatar",{"3":{"1209":2}}],["adduseradministrationui",{"3":{"1059":1,"1324":4,"1415":3}}],["adduserpreferences",{"3":{"1209":2,"1496":2,"1591":1}}],["addusersessionbookmarksessionidindex",{"3":{"1209":2}}],["adduserdataexportsection",{"2":{"846":1,"1317":1,"1672":1},"3":{"583":2,"846":1,"1317":1,"1323":5,"1415":5,"1672":1}}],["adduiratelimiting",{"3":{"832":2,"1124":1,"1324":4,"2001":2}}],["adduimodule",{"2":{"652":1},"3":{"649":1,"652":1,"1324":6,"1395":14,"1415":5,"1669":1}}],["adduishared",{"2":{"412":1,"414":1,"415":1,"558":1,"647":1,"681":1,"686":1,"2124":1,"2125":1},"3":{"0":2,"243":1,"245":1,"258":2,"265":4,"273":1,"412":1,"413":2,"414":1,"415":1,"556":1,"558":1,"647":1,"649":2,"681":1,"686":1,"881":1,"954":1,"979":2,"1212":1,"1324":33,"1395":2,"1416":11,"1417":19,"1434":2,"1436":13,"1653":2,"2087":1,"2120":1,"2121":2,"2124":1,"2125":1}}],["adddays",{"3":{"1369":1}}],["adddataprotection",{"3":{"1324":2,"1339":1}}],["adddatabasehealthchecks",{"2":{"1332":1},"3":{"1332":1,"1339":2,"1443":1}}],["adddatabase",{"2":{"2099":1},"3":{"633":1,"1684":1,"2099":1}}],["adddevicecapabilities",{"3":{"1417":2}}],["adddevicecapabilitydefaults",{"2":{"413":1,"681":1,"682":1,"1491":1,"2120":1,"2125":1},"3":{"413":2,"681":1,"682":1,"1324":2,"1417":35,"1491":1,"2120":1,"2125":1}}],["adddebug",{"3":{"1416":1}}],["adddefaulthealthchecks",{"2":{"1329":1,"1332":1},"3":{"1329":1,"1332":1,"1339":4,"1443":1,"1577":1}}],["adddefaultpolicy",{"2":{"774":1},"3":{"774":1}}],["adddsarcontrollers",{"3":{"725":1}}],["adddomainevent",{"0":{"2093":1},"2":{"20":1,"1233":1,"1251":1,"1701":1,"1838":1,"2021":1,"2093":1,"2100":1,"2113":1},"3":{"20":2,"1231":1,"1233":1,"1237":4,"1251":1,"1252":1,"1259":1,"1286":1,"1345":1,"1349":1,"1350":8,"1359":3,"1396":3,"1415":6,"1665":1,"1701":1,"1810":1,"1838":1,"2021":1,"2093":2,"2100":1,"2113":1}}],["addfeaturemanagement",{"2":{"300":1,"2140":1},"3":{"300":1,"303":1,"1311":3,"1436":3,"2138":1,"2140":1}}],["addforwardedjwtbearercore",{"3":{"827":1,"1300":1,"1311":2}}],["addforwardedjwtbearer",{"2":{"31":1,"34":1,"1586":1,"1611":1,"1613":1,"1619":1,"1667":1,"1897":1,"1898":1,"1904":1},"3":{"31":3,"34":1,"827":1,"1212":1,"1300":2,"1311":16,"1415":1,"1436":2,"1438":1,"1490":1,"1526":1,"1586":1,"1611":1,"1613":1,"1619":1,"1667":1,"1897":1,"1898":1,"1904":1}}],["addtokenpermissiongrants",{"2":{"1962":1},"3":{"1415":2,"1962":1}}],["addtokenifnotstopword",{"3":{"1359":1}}],["addtocalendarbutton",{"3":{"1324":1}}],["addtocalendarbuttontests",{"3":{"1199":1,"1207":2}}],["addtogroupasync",{"3":{"1309":1,"1323":1}}],["addtransforms",{"3":{"1339":3}}],["addtransient",{"3":{"1309":1,"1323":1,"1324":2}}],["addtrustedcallerheader",{"2":{"180":1},"3":{"0":1,"180":1,"827":1,"1324":5}}],["addtwofactorauthentication",{"2":{"674":1,"1059":1,"1316":1,"1322":1,"2204":1},"3":{"674":1,"1059":1,"1270":1,"1300":3,"1316":1,"1322":1,"1323":1,"2204":1}}],["addtypedserviceclient",{"2":{"67":1,"68":1,"70":1,"74":1,"2032":1,"2039":1},"3":{"67":1,"68":2,"70":1,"74":1,"1311":2,"1316":1,"1323":2,"1339":1,"1438":1,"2032":1,"2039":1}}],["addtypedgrpcclient",{"0":{"2020":1}}],["addtypedgrpcclient",{"2":{"53":1,"67":1,"68":1,"70":1,"100":1,"585":1,"1328":1,"1656":1,"1663":1,"2010":1,"2020":1,"2029":1,"2031":1,"2032":1,"2039":1},"3":{"53":1,"67":1,"68":2,"70":1,"100":1,"585":1,"1309":3,"1311":1,"1312":7,"1323":1,"1328":1,"1339":3,"1378":1,"1380":4,"1396":2,"1415":2,"1441":3,"1467":1,"1577":1,"1656":1,"1663":1,"2010":1,"2020":1,"2029":1,"2031":1,"2032":1,"2039":1}}],["addnotificationui",{"3":{"1324":13,"1396":2}}],["addnotificationuserexportclient",{"3":{"1309":4,"1415":1}}],["addnotificationlivechannelclient",{"2":{"1946":1},"3":{"1309":4,"1946":1}}],["addnotificationmodule",{"2":{"1308":1},"3":{"1308":1,"1309":5}}],["addnotificationapplicationservices",{"2":{"1304":1,"1309":1},"3":{"1304":1,"1309":8}}],["addnotificationinfrastructure",{"2":{"1316":1},"3":{"1286":3,"1309":2,"1316":1,"1323":1}}],["addnotificationcontrollers",{"2":{"434":1,"725":1,"1666":1},"3":{"434":1,"725":1,"1309":10,"1666":1}}],["addnpgsql",{"3":{"0":1,"1034":1,"1339":1}}],["addnativepushnotifications",{"2":{"434":1,"1316":1,"1936":1},"3":{"0":1,"434":1,"1309":2,"1316":1,"1323":9,"1936":1}}],["addidentityui",{"3":{"1415":8}}],["addidentitymodule",{"3":{"1415":7}}],["addidentityattendeeclient",{"2":{"1413":1},"3":{"1413":1,"1415":6}}],["additemhandler",{"3":{"1686":1,"1765":1,"1767":2}}],["additemrequest",{"3":{"1686":1}}],["additem",{"3":{"1684":1,"1686":4,"1728":1,"1765":1}}],["additemasync",{"3":{"1395":1}}],["additemcommand",{"2":{"91":1},"3":{"91":1,"1270":1,"1686":1}}],["additively",{"3":{"0":2,"186":1,"265":1,"1270":1,"1311":5,"1338":1,"1415":1,"1667":1,"1962":1}}],["additive",{"3":{"0":7,"39":1,"41":1,"78":1,"93":1,"95":1,"150":1,"158":1,"255":1,"305":1,"546":1,"564":2,"565":1,"568":1,"599":1,"600":1,"698":1,"699":1,"784":1,"827":1,"852":1,"854":1,"903":1,"905":1,"907":2,"920":2,"922":1,"926":1,"1024":1,"1026":1,"1027":1,"1034":1,"1075":1,"1084":1,"1229":1,"1234":1,"1237":1,"1247":1,"1249":1,"1259":2,"1266":1,"1270":7,"1286":5,"1290":1,"1300":11,"1309":2,"1311":10,"1323":2,"1324":2,"1338":1,"1339":6,"1350":1,"1369":1,"1395":1,"1396":3,"1409":1,"1415":7,"1417":1,"1420":1,"1427":1,"1436":3,"1442":1,"1455":1,"1467":3,"1477":1,"1547":1,"1611":1,"1631":1,"1632":1,"1639":1,"1667":1,"1720":1,"1724":1,"1727":1,"1734":1,"1889":1,"1892":1,"1965":1,"2064":1,"2125":1,"2200":1}}],["additions",{"3":{"0":2,"99":1,"111":1,"135":1,"141":1,"344":1,"413":1,"718":1,"906":1,"1093":1,"1116":1,"1132":1,"1262":1,"1286":1,"1324":1,"1350":1,"1369":1,"1415":1,"1422":1,"1436":5,"1443":1,"1489":1,"1496":5,"1631":1,"1638":1,"1685":1,"1779":2,"2176":1,"2212":1}}],["additionalhandlers",{"3":{"1324":1}}],["additionaltoken",{"3":{"1324":4}}],["additionaltokenissuingpaths",{"2":{"1184":1},"3":{"1184":1,"1324":2}}],["additionalclaims",{"2":{"1288":1},"3":{"1288":1,"1300":4,"1488":1}}],["additionalrequestpatterns",{"2":{"1091":1,"1424":1},"3":{"1091":1,"1093":1,"1424":1,"1427":3}}],["additionalproperties",{"3":{"1018":1,"1366":1,"1369":1,"1427":9}}],["additionalportmappings",{"2":{"92":1,"95":1,"96":1,"102":1},"3":{"92":1,"95":2,"96":1,"102":1,"790":1,"1467":1}}],["additionalfiles",{"3":{"135":1}}],["additionalfilters",{"3":{"1324":3}}],["additionalfilter",{"2":{"889":1},"3":{"0":1,"889":2,"1286":6,"1396":2}}],["additionally",{"3":{"18":1,"126":1,"132":1,"135":1,"140":1,"207":1,"212":1,"214":1,"235":1,"383":1,"556":1,"562":1,"618":1,"626":1,"633":1,"666":1,"691":1,"692":1,"698":1,"725":1,"827":1,"832":1,"881":1,"1229":1,"1256":1,"1259":2,"1263":1,"1270":2,"1286":3,"1301":1,"1309":3,"1311":3,"1323":3,"1324":2,"1332":1,"1334":1,"1339":3,"1350":4,"1352":1,"1353":1,"1359":2,"1369":1,"1373":1,"1380":4,"1396":3,"1398":1,"1402":5,"1415":1,"1416":1,"1417":3,"1427":3,"1428":1,"1431":1,"1436":8,"1443":1,"1445":1,"1455":2,"1488":1,"1591":1,"1627":1,"1635":1,"1639":1,"1640":1,"1641":2,"1643":1,"1757":1,"1821":1,"2001":1}}],["additionalassemblies=",{"3":{"1324":1}}],["additionalassemblies",{"2":{"649":1,"651":1,"2079":1},"3":{"0":1,"649":1,"651":2,"905":1,"1212":1,"1286":2,"1324":1,"1416":1,"2079":1}}],["additional",{"2":{"1459":1},"3":{"0":1,"92":1,"395":1,"401":1,"1281":1,"1286":4,"1311":1,"1323":1,"1324":1,"1339":1,"1359":1,"1395":2,"1415":1,"1417":1,"1436":1,"1459":1,"1630":1,"1641":2,"1776":1}}],["addition",{"3":{"0":1,"71":1,"135":1,"145":1,"197":1,"265":1,"564":1,"566":1,"649":1,"657":1,"686":1,"903":1,"915":1,"1034":1,"1237":1,"1286":2,"1300":2,"1311":2,"1350":1,"1380":1,"1395":4,"1415":4,"1436":3,"1438":2,"1455":1,"1459":1,"1585":1,"1638":1,"1639":1,"1641":2,"1654":1,"1779":1}}],["addinitscript",{"3":{"1436":1}}],["addinitscriptasync",{"3":{"1436":1}}],["addinterceptor",{"3":{"1312":1}}],["addinterceptors",{"2":{"715":1},"3":{"715":1}}],["addinternalcommands",{"2":{"1044":1,"2194":1},"3":{"674":1,"1044":1,"1209":8,"1316":1,"1318":1,"1323":2,"2194":1}}],["addinteractiveserverrendermode",{"2":{"556":1},"3":{"556":1,"1436":1}}],["addinteractiveservercomponents",{"2":{"556":1,"831":1,"832":1,"1124":1},"3":{"556":1,"831":1,"832":1,"1124":1,"1324":2,"1416":1,"1436":1}}],["addinteractivewebassemblyrendermode",{"2":{"556":1},"3":{"556":1}}],["addinteractivewebassemblycomponents",{"2":{"556":1},"3":{"556":1}}],["addinclude",{"3":{"549":1,"1240":1,"1247":1,"1436":1}}],["addinboxmessages",{"2":{"200":1},"3":{"195":1,"200":1,"1209":8,"1591":1}}],["adding",{"0":{"1722":1},"2":{"983":1},"3":{"0":2,"7":1,"78":2,"88":1,"96":1,"100":1,"135":2,"158":1,"166":1,"168":1,"187":1,"255":1,"265":3,"293":1,"318":1,"361":1,"365":1,"372":1,"390":1,"391":2,"397":3,"415":1,"443":1,"448":1,"465":1,"470":1,"490":1,"552":1,"564":2,"574":1,"585":1,"642":1,"648":1,"698":1,"707":1,"708":1,"725":2,"740":1,"741":2,"743":1,"759":1,"781":1,"783":2,"784":1,"819":1,"827":2,"838":2,"839":1,"855":1,"862":1,"913":1,"921":1,"923":1,"948":1,"983":1,"986":1,"1011":1,"1012":1,"1016":1,"1048":1,"1052":1,"1068":1,"1109":1,"1144":1,"1147":1,"1174":1,"1179":1,"1212":3,"1229":2,"1237":5,"1243":1,"1247":5,"1249":1,"1259":6,"1262":1,"1270":3,"1271":1,"1278":1,"1280":1,"1286":18,"1300":7,"1309":2,"1310":3,"1311":18,"1312":1,"1323":5,"1324":13,"1339":8,"1343":1,"1344":1,"1350":7,"1352":2,"1359":42,"1362":1,"1369":6,"1380":6,"1386":1,"1389":1,"1395":16,"1396":7,"1401":1,"1402":1,"1415":14,"1416":1,"1417":2,"1427":1,"1436":18,"1438":2,"1441":1,"1447":1,"1453":1,"1467":2,"1473":2,"1488":1,"1489":2,"1496":3,"1526":2,"1542":2,"1576":1,"1638":1,"1643":1,"1646":1,"1653":2,"1658":1,"1677":1,"1686":1,"1689":2,"1692":1,"1698":1,"1720":1,"1722":1,"1727":2,"1729":2,"1755":1,"1767":3,"1769":1,"1776":1,"1781":1,"1826":1,"1835":1,"1841":1,"1858":1,"1865":1,"1868":1,"1889":1,"1911":1,"1913":1,"1932":1,"1945":1,"1956":1,"1958":2,"1961":1,"1972":1,"2029":1,"2031":1,"2079":1,"2080":1,"2081":1,"2082":1,"2085":2,"2087":1,"2102":2,"2106":1,"2108":1,"2110":1,"2133":1,"2144":1,"2149":1,"2196":1,"2197":1,"2222":1,"2232":2}}],["addinfrastructurehealthchecks",{"2":{"166":1,"1034":1,"1332":1,"1442":1,"1443":1,"1670":1,"1727":1},"3":{"166":1,"1034":1,"1332":1,"1339":6,"1438":1,"1442":1,"1443":1,"1670":1,"1727":1}}],["addinfrastructure",{"2":{"157":1,"230":1,"257":1,"260":1,"344":1,"672":1,"931":1,"949":1,"979":1,"996":1,"1286":1,"1319":1,"1368":1,"1824":1,"1842":1,"1851":1,"1909":1,"1935":1,"1938":1},"3":{"0":1,"117":2,"157":1,"230":1,"243":1,"257":1,"259":2,"260":1,"281":1,"310":1,"344":1,"434":1,"672":1,"674":3,"733":1,"931":2,"946":1,"949":1,"979":2,"996":2,"1059":1,"1212":1,"1259":7,"1270":1,"1279":1,"1286":14,"1300":2,"1301":3,"1309":4,"1311":1,"1316":1,"1317":2,"1318":3,"1319":1,"1320":2,"1323":20,"1324":2,"1368":1,"1369":1,"1395":1,"1396":2,"1406":1,"1415":1,"1436":2,"1438":1,"1492":1,"1824":1,"1842":1,"1851":1,"1909":1,"1935":1,"1938":1,"1982":1,"2001":1}}],["addorupdate",{"3":{"1309":1}}],["addorderitemrequest",{"3":{"1686":1}}],["addordersmodule",{"3":{"1651":1,"1653":1}}],["addorderstatusandcreatedonindexes",{"3":{"564":1}}],["addorderlinecount",{"3":{"1600":1}}],["addorderlinecommand",{"3":{"1199":3,"1207":1}}],["addorderlinelistprice",{"3":{"1026":1}}],["addorderby",{"3":{"549":1,"1240":1,"1247":2,"1436":1}}],["addoutcome",{"3":{"1396":2}}],["addoutboxorigin",{"3":{"1209":8}}],["addoutboxinboxretentionindexes",{"3":{"564":2,"1209":8,"1591":1}}],["addoutputcache",{"2":{"245":1,"390":1,"393":1},"3":{"243":3,"245":1,"390":2,"393":1,"1301":1,"1311":2,"1339":1,"1923":1}}],["addoutputcacheevictionhandler",{"2":{"255":1,"258":1,"390":1,"391":1,"393":1,"1379":1},"3":{"0":1,"255":1,"258":1,"390":1,"391":1,"393":1,"1259":2,"1311":5,"1379":1,"1526":1}}],["addoption",{"3":{"1402":5}}],["addoptions",{"3":{"0":1,"674":3,"676":1,"707":1,"733":1,"827":1,"832":1,"1212":1,"1286":1,"1300":2,"1301":1,"1309":1,"1320":1,"1323":4,"1324":3,"1339":3,"1396":2,"2014":1}}],["addoperationtransformer",{"3":{"1311":1}}],["addopenaiprovider",{"2":{"1420":1,"2174":1},"3":{"1091":1,"1420":1,"1427":5,"2174":1}}],["addopenapi",{"2":{"454":1,"1929":1,"2134":1},"3":{"448":1,"454":5,"1050":1,"1311":9,"1438":2,"1929":2,"2134":1}}],["addopentelemetryexporters",{"2":{"397":1,"1333":1,"2158":1,"2159":1},"3":{"397":1,"1333":1,"1339":4,"1443":1,"1467":1,"2158":1,"2159":1}}],["addmaildev",{"3":{"1326":2,"1339":1,"1441":1,"1444":1,"1670":1}}],["addmasstransit",{"3":{"1323":2}}],["addmauiformfactor",{"3":{"1324":1,"1416":3,"1417":5}}],["addmauiblazorwebview",{"3":{"1212":1,"1416":1}}],["addmauipushdevicetokenprovider",{"2":{"413":1,"434":1,"436":1,"1669":1},"3":{"0":1,"413":1,"434":1,"436":1,"1416":3,"1417":5,"1669":1}}],["addmauidevicecapabilities",{"2":{"411":1,"413":1,"415":1,"1417":1,"2120":1,"2121":1,"2124":1},"3":{"0":1,"411":2,"413":3,"415":1,"1417":30,"2120":1,"2121":1,"2124":1}}],["addminiprofiler",{"3":{"1311":1}}],["addminiprofilerifenabled",{"2":{"1666":1},"3":{"1311":1,"1666":1}}],["addmultitenancytests",{"3":{"1199":1,"1207":2,"1286":2,"1438":2}}],["addmultitenancy",{"2":{"696":1,"979":1,"1232":1,"1825":1,"1851":1},"3":{"674":1,"696":1,"698":1,"979":1,"1232":1,"1237":2,"1270":2,"1286":6,"1311":1,"1316":1,"1317":1,"1323":4,"1526":1,"1825":1,"1851":1}}],["addmudservices",{"2":{"954":1},"3":{"265":1,"954":1,"1324":5,"1416":1,"1436":6}}],["addmetrics",{"3":{"1421":1,"1427":1}}],["addmeter",{"2":{"404":1,"407":1,"408":1},"3":{"258":1,"261":1,"404":1,"407":1,"408":1,"1247":1,"1270":1,"1339":2,"2161":1}}],["addmemorycache",{"3":{"1301":2}}],["addmessagebroker",{"2":{"644":1,"2009":1},"3":{"640":1,"644":1,"1326":2,"1339":3,"1441":1,"1444":1,"1670":1,"2009":1}}],["addmvc",{"3":{"448":1}}],["addmoduleordersinfrastructure",{"2":{"1651":1},"3":{"1651":1}}],["addmodule",{"3":{"1415":1}}],["addmoduleidentityinfrastructure",{"3":{"1415":4}}],["addmoduleidentityapplication",{"3":{"1415":6}}],["addmoduleidentityapi",{"3":{"1406":1,"1415":6}}],["addmoduleengagementinfrastructure",{"3":{"1396":6}}],["addmoduleengagementapplication",{"3":{"1396":4}}],["addmoduleengagementapi",{"3":{"318":1,"1380":1,"1396":12,"1996":1}}],["addmoduleconferenceinfrastructure",{"2":{"1368":1},"3":{"1368":1,"1369":2,"1380":2}}],["addmoduleconferenceapplication",{"3":{"1359":2,"1380":2}}],["addmoduleconferenceapi",{"2":{"1348":1,"1377":1},"3":{"1348":1,"1377":1,"1380":3}}],["addmodulenotificationapplication",{"3":{"1309":4,"1438":1}}],["addmodulesalesinfrastructure",{"2":{"790":1},"3":{"790":1}}],["addmodulehealthchecks",{"2":{"1700":1},"3":{"583":1,"1311":6,"1666":1,"1700":1}}],["addmodulehost",{"2":{"59":1,"63":1,"672":1,"675":1,"984":1,"1881":1},"3":{"0":1,"59":1,"63":1,"583":1,"672":1,"674":1,"675":1,"980":1,"984":1,"1311":8,"1315":2,"1323":4,"1663":1,"1670":1,"1881":1}}],["addmmcachatclient",{"2":{"1094":1,"1368":1,"1421":1,"1424":1,"1427":1,"2174":1,"2177":1,"2181":1},"3":{"1018":2,"1091":1,"1094":1,"1368":2,"1369":4,"1421":1,"1424":1,"1427":18,"1492":2,"1526":1,"2174":2,"2177":1,"2181":1}}],["addmmcaapplicationpipeline",{"2":{"115":1,"117":1,"122":1,"126":1,"127":1,"128":1,"1262":1,"1316":1,"1662":1,"1824":1,"1883":1,"2097":1},"3":{"0":3,"115":1,"117":1,"122":2,"126":1,"127":1,"128":1,"1262":2,"1311":1,"1312":1,"1316":2,"1323":11,"1396":1,"1415":2,"1436":2,"1438":1,"1662":1,"1824":2,"1883":1,"2097":1}}],["addmmcagatewaytests",{"3":{"1199":1,"1207":2,"1339":9,"1438":2}}],["addmmcagateway",{"2":{"825":1,"829":1,"1509":1},"3":{"0":3,"674":1,"825":1,"827":1,"829":1,"1338":2,"1339":11,"1447":4,"1509":1,"1663":1,"2025":1}}],["addenda",{"0":{"1639":1}}],["addengagementui",{"3":{"1396":6,"1416":1}}],["addengagementuserexportclient",{"3":{"1396":4,"1415":1}}],["addengagementmodule",{"3":{"1396":11}}],["addengagementbookmarkcountclient",{"2":{"1378":1},"3":{"1323":1,"1359":1,"1378":1,"1396":5}}],["addentityframework",{"3":{"1311":1}}],["addentityconfigurationassembly",{"2":{"1316":1},"3":{"1286":1,"1316":1,"1323":1}}],["addentitycrudtests",{"3":{"1199":1,"1207":1}}],["addentitycrud",{"2":{"328":1,"920":1,"924":1,"925":1,"1352":1,"1354":1},"3":{"0":3,"122":1,"328":1,"572":1,"920":2,"922":2,"924":1,"925":1,"926":2,"1262":1,"1265":2,"1270":8,"1316":1,"1323":4,"1350":3,"1352":1,"1354":1,"1359":21,"1666":1,"1883":1}}],["addentityupdate",{"2":{"122":1,"1830":1,"1883":1},"3":{"0":1,"122":1,"926":2,"1262":1,"1265":1,"1270":2,"1316":1,"1323":4,"1359":5,"1666":1,"1830":1,"1883":1}}],["addentityupdateverb",{"2":{"122":1,"1265":1},"3":{"0":1,"122":1,"926":1,"1262":1,"1265":1,"1270":2,"1316":1,"1323":4,"1666":1}}],["adder",{"3":{"1286":1}}],["adderrorlocalization",{"3":{"1311":8,"1415":1}}],["adderrors",{"3":{"1229":1}}],["adderrorresources",{"2":{"636":1,"979":1,"1650":1,"1653":1,"1684":1,"1701":1,"1728":1,"2099":1},"3":{"979":1,"1311":9,"1379":1,"1380":1,"1396":3,"1415":2,"1591":1,"1650":1,"1653":1,"1666":1,"1684":1,"1701":1,"1728":1,"2099":1}}],["adderrorresources<",{"3":{"633":1,"636":1}}],["addexternallogincookie",{"3":{"1311":1}}],["addexternalauthproviders",{"2":{"350":1,"1667":1,"1975":1,"1978":1,"1979":1},"3":{"0":1,"350":2,"1311":1,"1415":1,"1667":1,"1975":1,"1978":1,"1979":1}}],["addexplicitmigrationsassemblies",{"3":{"1286":1}}],["addeventlistener",{"3":{"1417":1}}],["addeventticketingurl",{"3":{"1209":2}}],["addeventsponsorshippacketurl",{"3":{"1209":2}}],["addeventspeaker",{"3":{"1203":3,"1207":8,"1270":1,"1350":3,"1359":9,"1369":1}}],["addeventspeakerhandlertests",{"3":{"1199":1,"1207":2,"1359":1}}],["addeventspeakerhandler",{"3":{"1199":2,"1203":1,"1207":2,"1270":2,"1359":11}}],["addeventspeakercommandvalidatortests",{"3":{"1199":1,"1207":1,"1359":1}}],["addeventspeakercommandvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":5}}],["addeventspeakercommand",{"3":{"1199":7,"1203":1,"1207":2,"1359":8,"1380":4}}],["addeventspeakerrequest",{"3":{"1199":3,"1203":1,"1207":1,"1359":1,"1374":1,"1380":5}}],["addeventorganizercontactemail",{"3":{"1209":2}}],["addeventquestionmoderationdefault",{"3":{"1209":2}}],["addeventquestionanswer",{"3":{"1203":3,"1207":8,"1350":4,"1352":1,"1359":14,"1526":1}}],["addeventquestionanswercommandvalidatortests",{"3":{"1199":1,"1207":1,"1359":1}}],["addeventquestionanswercommandvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":11}}],["addeventquestionanswercommand",{"3":{"1199":7,"1203":1,"1207":2,"1359":12,"1380":4}}],["addeventquestionanswerrequest",{"2":{"1374":1},"3":{"1199":3,"1203":1,"1207":1,"1359":1,"1374":1,"1380":6}}],["addeventquestionanswerhandlertests",{"3":{"1199":1,"1207":2,"1359":1}}],["addeventquestionanswerhandler",{"3":{"690":1,"1199":2,"1203":1,"1207":2,"1350":7,"1352":2,"1359":20}}],["addeventupcaster",{"2":{"846":1,"848":1,"850":1,"1249":1,"1269":1,"1891":1},"3":{"0":1,"80":1,"846":1,"848":1,"850":1,"1247":3,"1249":1,"1259":3,"1269":1,"1270":3,"1316":1,"1323":3,"1891":1}}],["addemailconfirmation",{"2":{"2204":1},"3":{"674":1,"1059":1,"1300":2,"1316":1,"1322":1,"1323":1,"2204":1}}],["addedroomkey",{"3":{"1359":1}}],["added",{"2":{"784":1,"1755":1},"3":{"0":7,"3":1,"11":1,"21":1,"22":1,"27":1,"45":1,"47":1,"57":1,"93":2,"94":1,"109":1,"111":1,"121":1,"135":2,"138":1,"139":1,"140":1,"145":2,"149":1,"177":1,"184":1,"195":1,"201":3,"216":2,"219":1,"228":1,"248":1,"252":1,"254":1,"256":4,"258":1,"259":1,"317":1,"323":1,"342":1,"348":2,"364":1,"374":1,"383":1,"395":1,"397":3,"401":1,"408":1,"448":1,"450":1,"468":4,"475":1,"477":1,"489":1,"511":1,"526":1,"550":1,"558":1,"564":6,"565":1,"566":2,"575":1,"601":1,"611":1,"616":3,"618":2,"624":3,"626":1,"629":1,"633":1,"640":1,"655":1,"656":1,"665":1,"676":1,"690":3,"697":1,"698":3,"703":1,"715":3,"725":2,"741":1,"744":1,"745":1,"750":1,"759":1,"766":1,"780":2,"782":7,"784":2,"805":1,"812":1,"819":1,"825":1,"826":1,"827":1,"829":3,"838":2,"862":1,"869":1,"871":1,"889":1,"915":1,"921":1,"960":1,"988":3,"1004":2,"1018":2,"1026":1,"1034":2,"1051":1,"1062":1,"1108":1,"1110":1,"1117":1,"1185":1,"1195":1,"1212":2,"1222":1,"1229":3,"1233":1,"1237":4,"1247":2,"1249":1,"1251":1,"1259":8,"1270":13,"1271":2,"1274":2,"1277":1,"1278":1,"1280":1,"1281":3,"1283":1,"1286":34,"1300":6,"1301":2,"1309":5,"1311":13,"1315":1,"1316":1,"1323":15,"1324":14,"1326":1,"1332":1,"1333":1,"1335":2,"1339":18,"1343":2,"1345":1,"1349":1,"1350":50,"1359":24,"1369":5,"1380":1,"1386":1,"1395":15,"1396":33,"1402":12,"1409":1,"1415":6,"1416":2,"1417":1,"1425":1,"1436":26,"1438":9,"1441":1,"1442":2,"1443":3,"1447":1,"1455":8,"1465":2,"1467":3,"1476":2,"1478":1,"1486":1,"1489":1,"1492":2,"1496":92,"1497":4,"1498":2,"1500":1,"1505":1,"1519":1,"1534":1,"1572":1,"1591":1,"1597":1,"1611":2,"1631":8,"1632":2,"1633":1,"1634":11,"1641":4,"1651":1,"1652":1,"1653":1,"1656":1,"1661":1,"1666":1,"1680":1,"1684":3,"1685":1,"1686":2,"1693":1,"1697":1,"1701":1,"1703":1,"1727":1,"1728":1,"1729":1,"1731":1,"1742":1,"1747":1,"1749":2,"1755":1,"1764":1,"1767":1,"1769":13,"1776":2,"1826":1,"1840":1,"1851":1,"1856":1,"1858":1,"1876":1,"1897":1,"1915":1,"1932":1,"1933":1,"1982":1,"2001":1,"2002":1,"2014":1,"2031":1,"2032":1,"2064":1,"2083":2,"2087":1,"2094":1,"2098":1,"2099":1,"2133":1,"2134":1,"2154":1,"2158":1,"2160":1,"2205":2,"2234":1}}],["addchatclient",{"3":{"1421":1,"1427":2}}],["addcheckinsandattendeebadges",{"3":{"1209":2}}],["addchildentityhandlerbase",{"2":{"1260":1,"1265":1},"3":{"1199":7,"1203":1,"1207":1,"1260":1,"1265":1,"1270":2,"1359":8}}],["addcategoryitemasync",{"3":{"1395":1}}],["addcategoryitem",{"3":{"1203":3,"1207":6,"1270":1,"1350":4,"1359":13}}],["addcategoryitemhandlertests",{"3":{"1199":1,"1207":2}}],["addcategoryitemhandler",{"3":{"1199":2,"1203":1,"1207":2,"1270":5,"1350":1,"1359":8}}],["addcategoryitemcommandvalidatortests",{"3":{"1199":1,"1207":1}}],["addcategoryitemcommandvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":13}}],["addcategoryitemcommand",{"3":{"1199":7,"1203":1,"1207":2,"1359":13,"1380":4}}],["addcategoryitemrequest",{"3":{"1199":3,"1203":1,"1207":1,"1359":1,"1374":1,"1380":7}}],["addcaching",{"2":{"249":1,"250":1,"251":1,"252":1,"253":1,"260":1,"672":1,"677":1,"999":1,"1909":1},"3":{"0":3,"157":1,"243":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"256":1,"257":1,"259":1,"260":1,"672":1,"674":3,"677":1,"733":1,"996":1,"999":1,"1270":3,"1301":9,"1316":1,"1320":1,"1323":7,"1438":1,"1577":1,"1668":1,"1909":1,"1916":1}}],["addcors",{"3":{"1339":1}}],["addcompensatingindex",{"3":{"1286":1}}],["addcommentrequest",{"3":{"1651":1}}],["addcomment",{"3":{"1651":1,"1701":1}}],["addcommandrequestvalidator",{"2":{"926":1,"1263":1,"1830":1},"3":{"0":1,"926":1,"1263":1,"1270":1,"1271":2,"1323":4,"1359":1,"1830":1}}],["addcommonui",{"3":{"1577":1}}],["addcommonuifacades",{"2":{"647":1,"649":1,"652":1,"954":1,"955":1,"957":1},"3":{"0":2,"647":1,"649":1,"652":1,"954":1,"955":1,"957":1,"1324":10,"1436":3}}],["addcommonmauipubliclinkbuilder",{"3":{"1324":2,"1395":1,"1416":4,"1417":3}}],["addcommonmauitokenstorage",{"2":{"412":1,"507":1,"511":1,"513":1},"3":{"0":1,"412":1,"507":2,"511":1,"513":1,"1416":3,"1417":5}}],["addcommonwebformfactor",{"3":{"1324":3,"1416":1,"1417":2}}],["addcommonresponsecompression",{"3":{"1311":3}}],["addcommonratelimiting",{"2":{"175":1,"826":1,"1599":1,"2003":1,"2025":1},"3":{"175":3,"826":1,"1311":11,"1339":1,"1438":1,"1535":1,"1599":1,"1666":1,"2001":1,"2003":1,"2025":1}}],["addcommongatewaycors",{"2":{"774":1,"1336":1,"1670":1},"3":{"774":2,"1336":1,"1339":3,"1443":1,"1670":1}}],["addcommonkeyvaultconfiguration",{"2":{"599":1,"603":2,"665":1,"1442":1,"1450":1,"1575":1,"1586":1,"1670":1},"3":{"599":1,"603":2,"665":1,"1335":1,"1339":3,"1427":2,"1442":1,"1450":1,"1467":1,"1496":1,"1575":1,"1577":1,"1586":1,"1670":1}}],["addcommonopenapihostregistrationtests",{"2":{"454":1},"3":{"454":1,"1199":1,"1207":4,"1438":2}}],["addcommonopenapi",{"2":{"446":1,"453":1,"454":2,"1929":1,"2134":1},"3":{"446":2,"448":2,"453":1,"454":3,"1050":2,"1311":10,"1577":3,"1666":1,"1929":2,"2134":1}}],["addcommonexceptionhandlers",{"2":{"109":1,"112":1},"3":{"109":1,"112":1,"1311":9}}],["addcommonauthentication",{"2":{"31":1,"350":1,"1613":1,"1619":1,"1975":1},"3":{"31":2,"350":1,"674":1,"1300":1,"1311":8,"1320":1,"1488":1,"1526":1,"1613":1,"1619":1,"1975":1}}],["addcommonapiversioning",{"2":{"446":1,"448":1,"449":1,"450":1,"453":1,"1929":1,"2133":1,"2134":1,"2135":1},"3":{"0":1,"446":1,"448":3,"449":1,"450":1,"453":1,"1212":1,"1311":8,"1380":1,"1666":1,"1929":1,"2133":2,"2134":1,"2135":1}}],["addcommonsameoriginapiproxy",{"2":{"1182":1,"1184":1,"1186":1,"1968":1,"2152":1},"3":{"0":1,"1182":1,"1184":1,"1186":1,"1212":1,"1324":7,"1968":1,"2152":1}}],["addcommonservertokenstorage",{"2":{"507":1},"3":{"507":1,"1324":3,"1416":1,"1417":1}}],["addcommonserilog",{"2":{"395":1,"401":1},"3":{"0":1,"395":4,"401":2,"1333":2,"1339":3,"1442":1,"1670":1,"2158":1}}],["addcommonsecurityheaders",{"2":{"214":1,"216":1,"220":1,"1336":1,"2012":1,"2015":1,"2151":1,"2152":1,"2153":1,"2154":1},"3":{"0":1,"214":4,"216":2,"220":2,"1324":3,"1336":2,"1339":10,"1416":1,"1436":1,"1443":1,"1577":1,"2012":1,"2015":1,"2151":1,"2152":1,"2153":2,"2154":2}}],["addcommoncors",{"2":{"775":1,"776":1,"777":1,"1336":1},"3":{"0":1,"774":2,"775":1,"776":1,"777":1,"1212":1,"1311":2,"1336":1,"1339":1}}],["addcommondataprotection",{"2":{"665":1,"667":1,"668":1,"1335":1,"1336":1,"1442":1,"1450":1,"1670":1,"1970":1},"3":{"0":1,"665":3,"667":1,"668":1,"1212":1,"1335":1,"1336":1,"1339":3,"1442":1,"1450":1,"1467":1,"1496":1,"1670":1,"1970":2}}],["addcommonhybridcachetests",{"3":{"1199":1,"1207":2}}],["addcommonhybridcache",{"2":{"241":1,"245":1,"253":1,"259":1,"260":1,"261":1,"731":1,"735":1,"736":1,"1916":1},"3":{"0":2,"241":1,"243":1,"245":1,"253":1,"259":1,"260":3,"261":1,"731":1,"733":2,"735":1,"736":1,"1212":1,"1301":5,"1316":1,"1323":5,"1442":1,"1916":1}}],["addcommonhybridcachewhenredisconfigured",{"2":{"0":1,"241":1,"243":1,"245":1,"261":1,"279":1,"281":1,"283":1,"285":1,"733":1,"736":1,"1301":1,"1916":1},"3":{"0":1,"241":1,"243":1,"245":1,"261":1,"279":1,"283":1,"285":1,"733":1,"736":1,"1301":2,"1916":1}}],["addcommonblazorcsp",{"2":{"214":1,"216":1,"219":1,"220":1,"1336":1,"1525":1,"2152":1,"2153":1,"2154":1},"3":{"0":1,"214":1,"216":2,"219":1,"220":2,"1324":7,"1336":1,"1339":2,"1416":1,"1525":1,"1526":1,"2152":2,"2153":1,"2154":1}}],["addcontainer",{"3":{"1339":2}}],["addcontrollers",{"3":{"1309":3,"1311":1}}],["addcontentpolicyguardrail",{"2":{"1089":1,"1091":1,"1094":1,"1424":1,"2177":1},"3":{"1089":1,"1091":1,"1094":1,"1369":1,"1424":1,"1427":5,"1526":1,"1577":1,"2177":1}}],["addconfigfilter",{"3":{"1339":4}}],["addconfigurationassembly",{"3":{"1286":1,"1359":1,"1396":1,"1415":1}}],["addconferenceui",{"3":{"1395":4}}],["addconferenceeventlivevalidationclient",{"2":{"1378":1},"3":{"1350":2,"1378":1,"1380":2}}],["addconferencemodule",{"2":{"1314":1,"1880":1},"3":{"1314":1,"1377":1,"1380":5,"1880":1}}],["addconferencesessionvalidationclient",{"2":{"1312":1,"1378":1},"3":{"1312":2,"1350":1,"1378":1,"1380":2}}],["addconferenceaiguardrails",{"2":{"1018":1,"1021":1,"1094":1,"1095":1,"1368":1,"1435":1,"2181":1},"3":{"1018":3,"1021":1,"1094":3,"1095":1,"1368":1,"1369":5,"1427":2,"1435":1,"1496":1,"1526":2,"2181":1}}],["addconsumer",{"3":{"1259":2}}],["addclientauthsessioncookiesync",{"2":{"507":1},"3":{"507":1,"1324":4}}],["addpolicy",{"3":{"1311":1,"1339":3}}],["addpooleddbcontextfactory",{"3":{"1286":1}}],["addpoints",{"3":{"1209":2}}],["addpermissiongrants",{"3":{"1209":2}}],["addpermissions",{"2":{"188":1,"190":1,"349":1,"710":1,"1377":1,"1964":1,"1965":1},"3":{"0":1,"186":4,"188":1,"190":1,"349":1,"707":1,"710":1,"1059":1,"1270":1,"1297":1,"1300":8,"1304":1,"1309":3,"1311":1,"1323":1,"1377":1,"1380":2,"1396":4,"1415":4,"1496":1,"1526":1,"1653":2,"1667":1,"1962":1,"1963":2,"1964":1,"1965":1}}],["addpartners",{"3":{"1209":2}}],["addpiiredactionguardrail",{"2":{"1091":1,"1094":1,"1421":1,"1424":1,"2177":1},"3":{"1091":1,"1094":1,"1369":1,"1421":1,"1424":1,"1427":5,"1526":1,"2177":2}}],["addproductreviews",{"2":{"1875":1},"3":{"1875":1}}],["addproductimage",{"3":{"1769":1}}],["addproductvariantdiscounts",{"3":{"1026":1}}],["addproject",{"3":{"1489":1,"1727":1}}],["addprocessor",{"3":{"1333":1,"1339":4}}],["addproblemdetails",{"3":{"109":1,"1311":1}}],["addpushnotificationdedupkey",{"3":{"1209":2}}],["addpushnotificationscopekey",{"3":{"1209":2}}],["addpushnotifications",{"2":{"227":1,"231":1,"380":1,"1935":1,"1944":1,"1949":1},"3":{"0":2,"225":3,"227":1,"231":1,"380":1,"674":1,"1307":1,"1309":11,"1316":1,"1320":2,"1323":4,"1467":1,"1935":2,"1944":2,"1949":1}}],["addpublicendpointpolicy",{"2":{"243":1,"259":1,"390":1,"1668":1,"1922":1},"3":{"0":2,"243":3,"259":1,"388":2,"390":1,"1301":1,"1311":2,"1379":1,"1668":1,"1922":2}}],["addazurekeyvault",{"3":{"1339":2}}],["addazureblobfilestorage",{"2":{"440":1,"1116":1,"1670":1,"2128":1,"2129":1,"2130":1},"3":{"0":1,"440":1,"1116":1,"1286":1,"1316":1,"1323":9,"1670":1,"2128":1,"2129":1,"2130":1}}],["addable",{"3":{"1309":1,"1396":1}}],["addactivity",{"3":{"1209":2}}],["addanthropicaiprovider",{"2":{"1094":1,"1095":1,"1420":1,"2174":1,"2181":1},"3":{"1018":1,"1091":1,"1094":1,"1095":1,"1420":1,"1427":6,"2174":1,"2181":1}}],["addadditionalassemblies",{"2":{"558":1,"651":1},"3":{"558":1,"651":1,"1416":1,"1436":1}}],["addassociationrequest",{"3":{"1380":1}}],["addaspnetcoreinstrumentation",{"2":{"402":1,"409":1},"3":{"402":1,"409":1}}],["addasync",{"2":{"883":1,"1386":1},"3":{"0":1,"881":2,"883":1,"1270":1,"1286":7,"1300":2,"1324":5,"1359":8,"1382":2,"1386":1,"1395":24,"1396":2,"1402":2,"1436":4,"2076":1}}],["addattributes",{"2":{"1052":1},"3":{"0":1,"1050":1,"1052":1,"1300":2}}],["addappleprovider",{"3":{"1311":1}}],["addapple",{"3":{"1311":1}}],["addapplicationpart",{"3":{"1309":1}}],["addapplicationprofiling",{"2":{"117":1,"1262":1,"1662":1,"1821":1},"3":{"117":1,"1262":1,"1270":8,"1316":1,"1323":4,"1438":1,"1662":1,"1821":1}}],["addapplicationdecorators",{"2":{"117":1,"119":1,"121":1,"122":1,"127":1,"587":1,"632":1,"922":1,"979":1,"1262":1,"1507":1,"1651":1,"1653":1,"1700":1,"1824":1,"1827":1,"1883":1,"2097":1,"2100":1,"2138":1},"3":{"0":3,"117":4,"119":1,"121":2,"122":2,"127":1,"572":2,"587":1,"632":1,"922":1,"979":1,"1212":1,"1262":3,"1263":1,"1270":15,"1300":2,"1309":1,"1311":6,"1316":5,"1323":17,"1359":2,"1415":1,"1436":6,"1438":1,"1507":1,"1651":1,"1653":1,"1700":1,"1824":4,"1827":1,"1883":2,"2097":3,"2100":2,"2138":1}}],["addapplication",{"2":{"127":1,"979":1,"980":1,"982":1,"1319":1,"1881":1,"2097":1},"3":{"0":1,"117":1,"121":1,"122":1,"127":1,"572":1,"979":3,"980":4,"982":1,"1214":1,"1247":1,"1259":1,"1262":2,"1270":2,"1271":1,"1300":1,"1311":3,"1315":1,"1316":2,"1319":1,"1323":8,"1415":1,"1436":4,"1438":2,"1881":1,"1883":1,"2097":1}}],["addapiparameterdescriptorbackfill",{"2":{"2133":1},"3":{"1311":2,"2133":1}}],["addapiversioning",{"2":{"454":1},"3":{"454":1}}],["addapiexplorer",{"3":{"448":1,"1311":1}}],["addapi",{"2":{"306":1,"656":1,"965":1,"966":1,"1824":1},"3":{"0":3,"117":2,"265":1,"300":1,"303":2,"306":1,"318":1,"326":1,"583":1,"656":1,"657":1,"740":1,"744":1,"964":4,"965":1,"966":1,"979":2,"1050":2,"1237":5,"1300":1,"1311":24,"1323":2,"1396":1,"1436":1,"1824":1,"1995":3,"2138":1,"2140":1}}],["addautomapper",{"2":{"1958":1},"3":{"1958":1}}],["addauthentication",{"2":{"1975":1},"3":{"350":1,"827":1,"1300":2,"1311":1,"1436":1,"1975":1}}],["addauthorizationcore",{"2":{"960":1,"1432":1},"3":{"954":2,"960":2,"1416":1,"1432":1,"1436":3,"1488":1,"1491":1}}],["addauthorization",{"2":{"59":1,"833":1,"1447":1},"3":{"0":1,"59":1,"827":2,"833":1,"1300":1,"1436":2,"1447":1}}],["addauthorizationpolicies",{"2":{"186":1,"189":1,"1300":1,"1698":1,"1963":1},"3":{"0":1,"186":1,"189":2,"1270":1,"1297":3,"1300":15,"1311":2,"1323":2,"1698":2,"1963":1}}],["addaudittrailandscheduler",{"3":{"1209":6}}],["addaudittrailtests",{"3":{"1199":1,"1207":2,"1286":2}}],["addaudittrail",{"2":{"713":1,"717":1,"979":1,"1232":1,"1277":1,"1839":1},"3":{"0":1,"674":1,"713":1,"715":3,"717":1,"720":3,"979":1,"1212":2,"1232":1,"1237":2,"1269":1,"1270":3,"1274":1,"1277":1,"1286":10,"1316":1,"1317":1,"1323":4,"1442":1,"1664":1,"1839":2}}],["addshoppingcartitem",{"3":{"1765":1,"1769":1}}],["addsomething",{"3":{"1380":1}}],["addsource",{"3":{"1339":5}}],["addsqlite",{"3":{"1339":1}}],["addsqlserver",{"3":{"1339":1,"1467":1}}],["addsupportedrange",{"3":{"1310":2}}],["addsupported",{"3":{"1310":2}}],["addschematransformer",{"3":{"1311":1}}],["addscheme",{"3":{"1300":1,"1436":1}}],["addscheduledjob",{"2":{"710":1},"3":{"707":1,"710":1,"846":1,"1270":1,"1286":1,"1317":1,"1323":3}}],["addscheduledjobstests",{"3":{"1199":1,"1207":4,"1323":2,"1438":2}}],["addscheduledjobs",{"2":{"705":1,"708":1,"720":1,"979":1,"1839":1,"1948":1},"3":{"0":1,"674":1,"705":1,"707":2,"708":1,"715":1,"720":1,"979":1,"1270":3,"1286":5,"1316":1,"1317":1,"1323":8,"1442":2,"1446":1,"1496":1,"1839":1,"1948":1}}],["addscoped",{"3":{"1286":1,"1304":1,"1309":1,"1311":1,"1323":2,"1324":9,"1359":2,"1395":6,"1396":5,"1415":3,"1417":4,"1653":1}}],["addspeakerquestionanswer",{"2":{"1639":1},"3":{"1350":2,"1496":1,"1639":1}}],["addspeakercategoryitem",{"3":{"1203":3,"1207":8,"1270":1,"1350":2,"1359":8}}],["addspeakercategoryitemhandlertests",{"3":{"1199":1,"1207":2,"1359":2}}],["addspeakercategoryitemhandler",{"3":{"1199":2,"1203":1,"1207":2,"1270":2,"1359":19}}],["addspeakercategoryitemcommandvalidatortests",{"3":{"1199":1,"1207":1,"1359":1}}],["addspeakercategoryitemcommandvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":6}}],["addspeakercategoryitemcommand",{"3":{"1199":7,"1203":1,"1207":2,"1359":11,"1380":4}}],["addspeakercategoryitemrequest",{"2":{"1374":1},"3":{"1199":3,"1203":1,"1207":1,"1359":1,"1374":1,"1380":3}}],["addsponsorvisitcheckins",{"3":{"1209":2}}],["addsponsors",{"3":{"1209":2,"1369":6,"1496":1}}],["addsessionscoreresponseguardrail",{"2":{"1368":1,"1369":1,"1526":1},"3":{"1368":1,"1369":3,"1526":1}}],["addsessionspeakerasync",{"3":{"1395":1}}],["addsessionspeaker",{"3":{"1203":3,"1207":8,"1270":1,"1350":6,"1359":10,"1369":1}}],["addsessionspeakerhandlertests",{"3":{"1199":1,"1207":2,"1359":2}}],["addsessionspeakerhandler",{"3":{"1199":2,"1203":1,"1207":2,"1270":2,"1350":1,"1359":10}}],["addsessionspeakercommandvalidatortests",{"3":{"1199":1,"1207":1,"1359":1}}],["addsessionspeakercommandvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":5}}],["addsessionspeakercommand",{"3":{"1199":7,"1203":1,"1207":2,"1359":9,"1380":4}}],["addsessionspeakerrequest",{"3":{"1199":3,"1203":1,"1207":1,"1359":1,"1374":1,"1380":3}}],["addsessioncookieauthentication",{"2":{"1525":1},"3":{"1300":2,"1525":1,"1526":1}}],["addsessioncategoryitemasync",{"3":{"1395":1}}],["addsessioncategoryitem",{"3":{"1203":3,"1207":8,"1350":3,"1359":15}}],["addsessioncategoryitemhandlertests",{"3":{"1199":1,"1207":2,"1359":2}}],["addsessioncategoryitemhandler",{"3":{"1199":2,"1203":1,"1207":2,"1350":1,"1359":13}}],["addsessioncategoryitemcommandvalidatortests",{"3":{"1199":1,"1207":1,"1359":1}}],["addsessioncategoryitemcommandvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":7}}],["addsessioncategoryitemcommand",{"3":{"1199":7,"1203":1,"1207":2,"1359":13,"1380":4}}],["addsessioncategoryitemrequest",{"2":{"1374":1},"3":{"1199":3,"1203":1,"1207":1,"1359":1,"1374":1,"1380":3}}],["addsessionquestions",{"3":{"1209":2}}],["addsessionquestionanswer",{"3":{"1203":3,"1207":8,"1349":1,"1350":4,"1359":15}}],["addsessionquestionanswercommandvalidator",{"3":{"1199":2,"1203":1,"1207":2,"1359":6}}],["addsessionquestionanswercommandvalidatortests",{"2":{"1199":1},"3":{"1199":1,"1207":1,"1359":1}}],["addsessionquestionanswercommand",{"3":{"1199":7,"1203":1,"1207":2,"1359":10,"1380":3}}],["addsessionquestionanswerrequest",{"2":{"1374":1},"3":{"1199":3,"1203":1,"1207":1,"1359":1,"1374":1,"1380":3}}],["addsessionquestionanswerhandlertests",{"3":{"1199":1,"1207":2,"1359":2}}],["addsessionquestionanswerhandler",{"3":{"690":1,"1199":2,"1203":1,"1207":2,"1349":1,"1350":3,"1359":14}}],["addsessiondurationcomputedcolumn",{"3":{"1209":2}}],["addsessionasset",{"3":{"1209":2}}],["addsessionassetlinkhandlertests",{"3":{"1199":1,"1207":2}}],["addsessionassetlinkhandler",{"3":{"1199":2,"1203":1,"1207":2,"1350":2,"1357":2,"1359":9,"1496":1}}],["addsessionassetlinkcommand",{"3":{"1199":5,"1203":1,"1207":2,"1359":7,"1380":1}}],["addsessionaiscorepromptversion",{"3":{"1018":1,"1209":2,"1350":1,"1369":1}}],["addserverauthsessioncookie",{"3":{"1300":4,"1311":5,"1324":1}}],["addservicediscovery",{"2":{"1329":1},"3":{"1329":1,"1337":1,"1339":2,"1443":1}}],["addservicediscoverydestinationresolver",{"2":{"827":1,"837":1,"1447":1},"3":{"827":1,"837":1,"1338":1,"1339":1,"1447":2}}],["addservicedefaults",{"0":{"1329":1,"2007":1},"2":{"61":1,"72":1,"235":1,"236":1,"401":1,"404":1,"406":1,"407":1,"408":1,"663":1,"668":1,"833":1,"883":1,"913":1,"917":1,"918":1,"938":1,"1325":1,"1329":1,"1334":1,"1335":1,"1677":1,"1720":1,"1724":1,"1727":1,"2007":1,"2012":1,"2015":1,"2031":1,"2032":1,"2039":1,"2159":1,"2162":1},"3":{"0":5,"61":1,"72":1,"235":1,"236":1,"397":1,"401":6,"404":1,"406":1,"407":1,"408":1,"663":1,"665":2,"668":1,"833":1,"883":1,"913":1,"917":1,"918":1,"938":1,"1212":1,"1324":1,"1325":1,"1329":2,"1333":2,"1334":2,"1335":2,"1337":1,"1338":1,"1339":18,"1380":1,"1396":1,"1442":4,"1443":3,"1447":1,"1467":1,"1487":1,"1496":1,"1577":2,"1653":2,"1670":1,"1677":1,"1707":1,"1720":1,"1724":1,"1727":1,"2007":2,"2011":1,"2012":1,"2015":1,"2031":2,"2032":1,"2039":1,"2158":2,"2159":1,"2162":1}}],["addservicebusemulatorbroker",{"2":{"638":1,"640":1,"644":1,"1326":1,"1327":1,"1444":1,"1670":1,"2009":1,"2014":1},"3":{"638":1,"640":1,"644":1,"1326":1,"1327":1,"1339":6,"1441":1,"1444":1,"1526":1,"1670":1,"2009":1,"2014":1}}],["addservices",{"2":{"949":1,"1938":1},"3":{"230":1,"310":1,"946":1,"949":2,"1259":3,"1270":1,"1300":1,"1311":1,"1316":2,"1317":1,"1318":1,"1320":1,"1323":5,"1935":1,"1938":1}}],["addserilog",{"2":{"401":1,"1333":1,"1442":1},"3":{"0":1,"401":1,"1333":2,"1339":4,"1442":1}}],["addsignalr",{"2":{"231":1},"3":{"225":1,"231":1,"1935":1}}],["addsingleton",{"2":{"216":1,"2154":1},"3":{"216":1,"220":2,"300":1,"649":1,"682":1,"733":2,"832":1,"1301":1,"1311":1,"1323":1,"1324":9,"1339":3,"1396":1,"1415":3,"1417":4,"1427":1,"1436":4,"2152":2,"2154":1}}],["addstandardresiliencehandler",{"2":{"1707":1,"2020":1,"2031":1},"3":{"1312":2,"1339":3,"1707":1,"2020":1,"2031":1}}],["addstackexchangeredisoutputcache",{"2":{"243":1,"250":1,"251":1,"252":1,"254":1,"256":1,"257":1,"259":1,"260":1,"390":1},"3":{"243":1,"250":1,"251":1,"252":1,"254":1,"256":2,"257":1,"259":2,"260":1,"390":1,"1339":2}}],["addstackexchangeredis",{"3":{"225":1}}],["addstoredpermissiongrants",{"2":{"674":1,"1061":1,"1283":1,"1409":1,"1963":1,"2201":1,"2203":1,"2204":1},"3":{"674":1,"1059":3,"1061":1,"1273":1,"1283":1,"1286":8,"1297":1,"1300":2,"1316":1,"1323":1,"1409":1,"1963":1,"2201":2,"2203":1,"2204":1}}],["addstronglytypedids",{"2":{"798":1,"804":1,"806":1,"1051":1,"1052":1,"1810":1},"3":{"0":2,"798":1,"804":1,"806":1,"1050":2,"1051":1,"1052":1,"1247":1,"1281":1,"1286":3,"1311":1,"1316":1,"1323":1,"1810":2}}],["addsalesuserexportclient",{"2":{"96":1,"104":1},"3":{"96":1,"104":1}}],["adds",{"0":{"92":1,"1362":1},"2":{"450":1},"3":{"0":10,"15":1,"55":1,"87":1,"93":1,"94":1,"121":1,"130":1,"150":1,"157":1,"214":1,"219":1,"225":1,"233":1,"235":2,"246":1,"255":1,"264":1,"265":1,"275":1,"326":1,"330":1,"350":1,"352":1,"355":1,"370":1,"379":1,"390":1,"393":1,"395":1,"397":1,"400":1,"401":1,"402":2,"411":1,"450":1,"508":1,"524":1,"530":1,"540":1,"564":1,"565":1,"566":1,"572":1,"583":2,"586":1,"599":1,"616":1,"642":1,"649":1,"651":1,"665":1,"674":3,"691":1,"700":1,"707":1,"715":2,"718":1,"719":1,"740":1,"755":1,"756":1,"757":1,"759":1,"774":1,"800":1,"810":2,"819":1,"820":1,"827":5,"828":1,"834":1,"846":1,"853":1,"854":1,"861":1,"869":1,"881":2,"916":1,"922":1,"923":1,"926":2,"931":1,"933":1,"937":1,"954":4,"957":1,"964":1,"1018":1,"1035":1,"1038":1,"1042":1,"1043":1,"1050":1,"1052":1,"1059":1,"1065":1,"1083":4,"1089":1,"1093":1,"1129":1,"1135":1,"1152":1,"1168":2,"1175":1,"1184":2,"1212":2,"1214":1,"1219":1,"1228":1,"1229":1,"1230":1,"1231":3,"1237":10,"1244":1,"1247":1,"1249":3,"1252":1,"1258":1,"1259":8,"1262":1,"1270":9,"1271":3,"1273":2,"1276":2,"1277":1,"1278":2,"1281":2,"1286":28,"1288":1,"1292":1,"1300":17,"1301":3,"1308":1,"1309":5,"1311":27,"1312":4,"1315":1,"1316":2,"1317":1,"1318":1,"1320":4,"1322":2,"1323":17,"1324":25,"1325":1,"1326":1,"1329":1,"1332":2,"1333":6,"1336":1,"1338":2,"1339":29,"1350":9,"1352":2,"1355":1,"1359":61,"1362":1,"1369":6,"1375":4,"1378":1,"1379":2,"1380":8,"1382":2,"1394":1,"1395":39,"1396":25,"1402":4,"1406":1,"1414":1,"1415":6,"1416":3,"1417":3,"1421":1,"1427":6,"1429":1,"1430":1,"1432":1,"1436":42,"1438":3,"1441":5,"1442":3,"1443":3,"1444":2,"1447":2,"1448":1,"1455":2,"1459":1,"1463":2,"1467":3,"1481":1,"1486":1,"1488":3,"1489":4,"1491":1,"1496":5,"1526":1,"1536":1,"1575":1,"1576":1,"1577":1,"1591":2,"1625":1,"1631":1,"1632":1,"1640":1,"1641":1,"1650":1,"1651":2,"1663":1,"1666":2,"1669":2,"1670":1,"1714":1,"1722":1,"1749":1,"1750":2,"1765":1,"1776":2,"1809":1,"1810":3,"1829":1,"1839":2,"1842":1,"1843":1,"1851":1,"1875":2,"1878":1,"1880":1,"1882":1,"1920":1,"1922":1,"1935":1,"1936":1,"1942":1,"1971":1,"1976":1,"1978":2,"1988":1,"2001":1,"2002":1,"2003":1,"2007":1,"2011":1,"2013":1,"2025":2,"2033":1,"2040":1,"2054":1,"2060":1,"2068":1,"2069":1,"2087":1,"2092":2,"2101":1,"2105":1,"2123":1,"2128":2,"2151":1,"2158":3,"2161":1,"2162":2,"2177":2,"2179":1,"2181":1,"2234":1,"2242":1}}],["add",{"0":{"1684":1,"1701":1,"1729":1,"2095":1,"2108":1},"2":{"527":1,"659":1,"721":1,"938":1,"1044":1,"1585":1,"1652":1,"1688":1,"1793":1,"1827":1,"1846":1,"1853":1,"1862":1,"1868":1,"1886":1,"1892":1,"1899":1,"1905":1,"1912":1,"1924":1,"1930":1,"1941":1,"1950":1,"1959":1,"1972":1,"1979":1,"1985":1,"2003":1,"2039":1,"2061":1,"2110":1,"2117":1,"2124":1,"2125":1,"2130":1,"2135":1,"2141":1,"2148":1,"2155":1,"2171":1,"2194":1,"2205":1,"2213":1},"3":{"0":8,"1":1,"5":1,"69":1,"100":1,"195":1,"207":1,"230":1,"235":1,"236":1,"264":1,"265":2,"312":1,"333":1,"341":1,"350":1,"360":1,"365":1,"372":1,"397":1,"404":1,"413":2,"415":1,"459":1,"472":1,"494":1,"495":1,"517":1,"527":1,"528":1,"537":1,"627":1,"631":1,"633":3,"635":3,"636":1,"649":1,"650":1,"657":1,"659":1,"665":1,"674":1,"675":1,"691":1,"698":1,"707":1,"715":2,"721":1,"733":1,"734":1,"759":1,"809":1,"811":2,"820":1,"821":1,"827":1,"829":1,"834":1,"881":1,"882":1,"883":1,"905":1,"922":2,"938":1,"939":1,"964":1,"979":3,"981":2,"984":1,"997":1,"1004":1,"1018":1,"1026":2,"1027":2,"1030":1,"1035":1,"1044":1,"1052":1,"1058":1,"1059":1,"1060":1,"1061":1,"1062":1,"1068":1,"1085":2,"1089":1,"1093":1,"1157":1,"1176":1,"1177":1,"1179":3,"1186":1,"1193":1,"1196":1,"1212":3,"1214":1,"1229":2,"1234":3,"1237":10,"1238":1,"1241":1,"1243":1,"1247":4,"1251":1,"1259":6,"1265":1,"1270":12,"1280":1,"1284":1,"1286":19,"1287":2,"1290":2,"1291":2,"1297":1,"1300":8,"1301":2,"1309":4,"1310":2,"1311":10,"1312":2,"1316":1,"1320":1,"1323":10,"1324":29,"1333":1,"1339":9,"1343":1,"1344":1,"1350":12,"1351":1,"1357":1,"1359":86,"1366":1,"1369":6,"1371":2,"1374":1,"1375":1,"1380":27,"1382":2,"1385":1,"1386":1,"1389":2,"1391":1,"1395":45,"1396":10,"1399":3,"1401":1,"1402":9,"1415":11,"1416":9,"1417":17,"1418":1,"1427":3,"1429":1,"1433":1,"1436":16,"1438":4,"1445":1,"1453":1,"1455":1,"1467":3,"1472":1,"1477":2,"1487":1,"1490":2,"1492":1,"1496":4,"1497":1,"1524":1,"1526":1,"1530":2,"1531":1,"1576":1,"1581":1,"1582":1,"1585":2,"1589":1,"1595":3,"1596":2,"1598":1,"1599":1,"1600":1,"1616":1,"1617":1,"1619":1,"1630":1,"1631":2,"1632":11,"1638":1,"1639":1,"1641":1,"1647":2,"1648":1,"1649":1,"1650":2,"1651":6,"1652":2,"1653":1,"1654":4,"1656":1,"1657":1,"1661":1,"1663":1,"1666":1,"1668":1,"1671":1,"1674":1,"1678":1,"1679":1,"1681":1,"1682":1,"1683":2,"1684":1,"1685":1,"1686":3,"1687":2,"1688":1,"1689":2,"1690":1,"1691":1,"1692":1,"1697":2,"1701":2,"1702":2,"1703":1,"1704":1,"1719":3,"1720":1,"1722":1,"1724":1,"1726":1,"1727":5,"1728":4,"1729":2,"1730":2,"1731":2,"1737":1,"1742":1,"1746":2,"1748":1,"1749":1,"1750":4,"1754":1,"1755":3,"1758":1,"1761":1,"1764":1,"1765":4,"1767":1,"1768":4,"1769":1,"1773":2,"1775":2,"1776":3,"1786":1,"1793":1,"1805":2,"1807":1,"1812":2,"1815":1,"1817":1,"1823":1,"1824":1,"1827":1,"1834":1,"1844":1,"1846":1,"1849":1,"1853":1,"1862":1,"1865":1,"1868":1,"1877":1,"1883":1,"1885":1,"1886":1,"1890":1,"1892":3,"1899":2,"1905":1,"1907":1,"1912":1,"1924":1,"1925":1,"1930":2,"1941":1,"1946":1,"1950":1,"1959":1,"1960":2,"1963":1,"1965":1,"1970":1,"1972":1,"1973":4,"1979":1,"1985":1,"1992":1,"1998":1,"2000":1,"2003":1,"2015":1,"2024":1,"2025":1,"2029":1,"2030":2,"2031":1,"2033":1,"2039":1,"2042":2,"2049":2,"2050":2,"2061":1,"2071":1,"2077":1,"2079":1,"2082":1,"2083":1,"2088":1,"2089":1,"2091":1,"2093":1,"2099":7,"2100":1,"2101":2,"2104":1,"2106":1,"2107":1,"2108":1,"2110":2,"2117":1,"2121":1,"2124":1,"2125":2,"2130":1,"2131":1,"2135":1,"2140":1,"2141":1,"2144":1,"2148":2,"2149":1,"2155":1,"2158":1,"2162":4,"2171":2,"2172":1,"2182":1,"2194":1,"2195":1,"2196":2,"2204":1,"2205":1,"2213":1,"2236":1}}],["adr",{"0":{"1":1,"1475":1,"1507":1,"1508":1,"1509":1,"1510":1,"1512":1,"2026":1},"1":{"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"31":1,"32":1,"33":1,"34":1,"35":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"141":1,"142":1,"143":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":1,"150":1,"151":1,"152":1,"153":1,"154":1,"155":1,"156":1,"157":1,"158":1,"159":1,"160":1,"161":1,"162":1,"163":1,"164":1,"165":1,"166":1,"167":1,"168":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":1,"175":1,"176":1,"177":1,"178":1,"179":1,"180":1,"181":1,"182":1,"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1,"200":1,"201":1,"202":1,"203":1,"204":1,"205":1,"206":1,"207":1,"208":1,"209":1,"210":1,"211":1,"212":1,"213":1,"214":1,"215":1,"216":1,"217":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1,"226":1,"227":1,"228":1,"229":1,"230":1,"231":1,"232":1,"233":1,"234":1,"235":1,"236":1,"237":1,"238":1,"239":1,"240":1,"241":1,"242":1,"243":1,"244":1,"245":1,"246":1,"247":1,"248":1,"249":1,"250":1,"251":1,"252":1,"253":1,"254":1,"255":1,"256":1,"257":1,"258":1,"259":1,"260":1,"261":1,"262":2,"263":2,"264":2,"265":2,"266":2,"267":2,"268":2,"269":2,"270":1,"271":1,"272":1,"273":1,"274":1,"275":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"286":1,"287":1,"288":1,"289":1,"290":1,"291":1,"292":1,"293":1,"294":1,"295":1,"296":1,"297":1,"298":1,"299":1,"300":1,"301":1,"302":1,"303":1,"304":1,"305":1,"306":1,"307":1,"308":1,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":1,"316":1,"317":1,"318":1,"319":1,"320":1,"321":1,"322":1,"323":1,"324":1,"325":1,"326":1,"327":1,"328":1,"329":1,"330":1,"331":1,"332":1,"333":1,"334":1,"335":1,"336":1,"337":1,"338":1,"339":1,"340":1,"341":1,"342":1,"343":1,"344":1,"345":1,"346":1,"347":1,"348":1,"349":1,"350":1,"351":1,"352":1,"353":1,"354":1,"355":1,"356":1,"357":1,"358":1,"359":1,"360":1,"361":1,"362":1,"363":1,"364":1,"365":1,"366":1,"367":1,"368":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1,"376":1,"377":1,"378":1,"379":1,"380":1,"381":1,"382":1,"383":1,"384":1,"385":1,"386":1,"387":1,"388":1,"389":1,"390":1,"391":1,"392":1,"393":1,"394":1,"395":1,"396":1,"397":1,"398":1,"399":1,"400":1,"401":1,"402":1,"403":1,"404":1,"405":1,"406":1,"407":1,"408":1,"409":1,"410":1,"411":1,"412":1,"413":1,"414":1,"415":1,"416":1,"417":1,"418":1,"419":1,"420":1,"421":1,"422":1,"423":1,"424":1,"425":1,"426":1,"427":1,"428":1,"429":1,"430":1,"431":1,"432":1,"433":1,"434":1,"435":1,"436":1,"437":1,"438":1,"439":1,"440":1,"441":1,"442":1,"443":1,"444":1,"445":1,"446":1,"447":1,"448":1,"449":1,"450":1,"451":1,"452":1,"453":1,"454":1,"455":1,"456":1,"457":1,"458":1,"459":1,"460":1,"461":1,"462":1,"463":1,"464":1,"465":1,"466":1,"467":1,"468":1,"469":1,"470":1,"471":1,"472":1,"473":1,"474":1,"475":1,"476":1,"477":1,"478":1,"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"492":1,"493":1,"494":1,"495":1,"496":1,"497":1,"498":1,"499":1,"500":1,"501":1,"502":1,"503":1,"504":1,"505":1,"506":1,"507":1,"508":1,"509":1,"510":1,"511":1,"512":1,"513":1,"514":1,"515":1,"516":1,"517":1,"518":1,"519":1,"520":1,"521":1,"522":1,"523":1,"524":1,"525":1,"526":1,"527":1,"528":1,"529":1,"530":1,"531":1,"532":1,"533":1,"534":1,"535":1,"536":1,"537":1,"538":1,"539":1,"540":1,"541":1,"542":1,"543":1,"544":1,"545":1,"546":1,"547":1,"548":1,"549":1,"550":1,"551":1,"552":1,"553":1,"554":1,"555":1,"556":1,"557":1,"558":1,"559":1,"560":1,"561":1,"562":1,"563":1,"564":1,"565":1,"566":1,"567":1,"568":1,"569":1,"570":1,"571":1,"572":1,"573":1,"574":1,"575":1,"576":1,"577":1,"578":1,"579":1,"580":1,"581":1,"582":1,"583":1,"584":1,"585":1,"586":1,"587":1,"588":1,"589":1,"590":1,"591":1,"592":1,"593":1,"594":1,"595":1,"596":1,"597":1,"598":1,"599":1,"600":1,"601":1,"602":1,"603":1,"604":1,"605":1,"606":1,"607":1,"608":1,"609":1,"610":1,"611":1,"612":1,"613":1,"614":1,"615":1,"616":1,"617":1,"618":1,"619":1,"620":1,"621":1,"622":1,"623":1,"624":1,"625":1,"626":1,"627":1,"628":1,"629":1,"630":1,"631":1,"632":1,"633":1,"634":1,"635":1,"636":1,"637":1,"638":1,"639":1,"640":1,"641":1,"642":1,"643":1,"644":1,"645":1,"646":1,"647":1,"648":1,"649":1,"650":1,"651":1,"652":1,"653":1,"654":1,"655":1,"656":1,"657":1,"658":1,"659":1,"660":1,"661":1,"662":1,"663":1,"664":1,"665":1,"666":1,"667":1,"668":1,"669":1,"670":1,"671":1,"672":1,"673":1,"674":1,"675":1,"676":1,"677":1,"678":1,"679":1,"680":1,"681":1,"682":1,"683":1,"684":1,"685":1,"686":1,"687":1,"688":1,"689":1,"690":1,"691":1,"692":1,"693":1,"694":1,"695":1,"696":1,"697":1,"698":1,"699":1,"700":1,"701":1,"702":1,"703":1,"704":1,"705":1,"706":1,"707":1,"708":1,"709":1,"710":1,"711":1,"712":1,"713":1,"714":1,"715":1,"716":1,"717":1,"718":1,"719":1,"720":1,"721":1,"722":1,"723":1,"724":1,"725":1,"726":1,"727":1,"728":1,"729":1,"730":2,"731":2,"732":2,"733":2,"734":2,"735":2,"736":2,"737":2,"738":1,"739":1,"740":1,"741":1,"742":1,"743":1,"744":1,"745":1,"746":1,"747":1,"748":1,"749":1,"750":1,"751":1,"752":1,"753":1,"754":1,"755":1,"756":1,"757":1,"758":1,"759":1,"760":1,"761":1,"762":1,"763":1,"764":1,"765":1,"766":1,"767":1,"768":1,"769":1,"770":1,"771":1,"772":1,"773":1,"774":1,"775":1,"776":1,"777":1,"778":1,"779":1,"780":1,"781":1,"782":1,"783":1,"784":1,"785":1,"786":1,"787":1,"788":1,"789":1,"790":1,"791":1,"792":1,"793":1,"794":1,"795":1,"796":1,"797":1,"798":1,"799":1,"800":1,"801":1,"802":1,"803":1,"804":1,"805":1,"806":1,"807":2,"808":2,"809":2,"810":2,"811":2,"812":2,"813":2,"814":2,"815":2,"816":1,"817":1,"818":1,"819":1,"820":1,"821":1,"822":1,"823":1,"824":1,"825":1,"826":1,"827":1,"828":1,"829":1,"830":1,"831":1,"832":1,"833":1,"834":1,"835":1,"836":1,"837":1,"838":1,"839":1,"840":1,"841":1,"842":1,"843":1,"844":1,"845":1,"846":1,"847":1,"848":1,"849":1,"850":1,"851":1,"852":1,"853":1,"854":1,"855":1,"856":1,"857":1,"858":1,"859":1,"860":1,"861":1,"862":1,"863":1,"864":1,"865":1,"866":1,"867":1,"868":1,"869":1,"870":1,"871":1,"872":1,"873":1,"874":1,"875":1,"876":1,"877":1,"878":1,"879":1,"880":1,"881":1,"882":1,"883":1,"884":1,"885":1,"886":1,"887":1,"888":1,"889":1,"890":1,"891":1,"892":1,"893":1,"894":1,"895":1,"896":1,"897":1,"898":1,"899":1,"900":1,"901":1,"902":1,"903":1,"904":1,"905":1,"906":1,"907":1,"908":1,"909":1,"910":1,"911":1,"912":1,"913":1,"914":1,"915":1,"916":1,"917":1,"918":1,"919":1,"920":1,"921":1,"922":1,"923":1,"924":1,"925":1,"926":1,"927":1,"928":1,"929":1,"930":1,"931":1,"932":1,"933":1,"934":1,"935":1,"936":1,"937":1,"938":1,"939":1,"940":1,"941":1,"942":1,"943":1,"944":1,"945":1,"946":1,"947":1,"948":1,"949":1,"950":1,"951":1,"952":1,"953":1,"954":1,"955":1,"956":1,"957":1,"958":1,"959":1,"960":1,"961":1,"962":1,"963":1,"964":1,"965":1,"966":1,"967":1,"968":1,"969":1,"970":1,"971":1,"972":1,"973":1,"974":1,"975":1,"976":1,"977":1,"978":1,"979":1,"980":1,"981":1,"982":1,"983":1,"984":1,"985":1,"986":1,"987":1,"988":1,"989":1,"990":1,"991":1,"992":1,"993":1,"994":1,"995":1,"996":1,"997":1,"998":1,"999":1,"1000":1,"1001":1,"1002":1,"1003":1,"1004":1,"1005":1,"1006":1,"1007":1,"1008":1,"1009":1,"1010":1,"1011":1,"1012":1,"1013":1,"1014":1,"1015":1,"1016":1,"1017":1,"1018":1,"1019":1,"1020":1,"1021":1,"1022":1,"1023":1,"1024":1,"1025":1,"1026":1,"1027":1,"1028":1,"1029":1,"1030":1,"1031":1,"1032":1,"1033":1,"1034":1,"1035":1,"1036":1,"1037":1,"1038":1,"1039":1,"1040":1,"1041":1,"1042":1,"1043":1,"1044":1,"1045":1,"1046":1,"1047":1,"1048":1,"1049":1,"1050":1,"1051":1,"1052":1,"1053":1,"1054":1,"1055":1,"1056":1,"1057":1,"1058":1,"1059":1,"1060":1,"1061":1,"1062":1,"1063":1,"1064":1,"1065":1,"1066":1,"1067":1,"1068":1,"1069":1,"1070":1,"1071":1,"1072":1,"1073":1,"1074":1,"1075":1,"1076":1,"1077":1,"1078":1,"1079":1,"1080":1,"1081":1,"1082":1,"1083":1,"1084":1,"1085":1,"1086":1,"1087":1,"1088":1,"1089":1,"1090":1,"1091":1,"1092":1,"1093":1,"1094":1,"1095":1,"1096":1,"1097":1,"1098":1,"1099":1,"1100":1,"1101":1,"1102":1,"1103":1,"1104":1,"1105":1,"1106":1,"1107":1,"1108":1,"1109":1,"1110":1,"1111":1,"1112":1,"1113":1,"1114":1,"1115":1,"1116":1,"1117":1,"1118":1,"1119":1,"1120":1,"1121":1,"1122":1,"1123":1,"1124":1,"1125":1,"1126":1,"1127":1,"1128":1,"1129":1,"1130":1,"1131":1,"1132":1,"1133":1,"1134":1,"1135":1,"1136":1,"1137":1,"1138":1,"1139":1,"1140":1,"1141":1,"1142":1,"1143":1,"1144":1,"1145":1,"1146":1,"1147":1,"1148":1,"1149":1,"1150":1,"1151":1,"1152":1,"1153":1,"1154":1,"1155":1,"1156":1,"1157":1,"1158":1,"1159":1,"1160":1,"1161":1,"1162":1,"1163":1,"1164":1,"1165":1,"1166":1,"1167":1,"1168":1,"1169":1,"1170":1,"1171":1,"1172":1,"1173":1,"1174":1,"1175":1,"1176":1,"1177":1,"1178":1,"1179":1,"1180":1,"1181":1,"1182":1,"1183":1,"1184":1,"1185":1,"1186":1,"1187":1,"1188":1,"1189":1,"1986":1,"1987":1,"1988":1,"1989":1,"1990":1,"1991":1,"1992":1},"3":{"0":211,"1":5,"2":1,"8":1,"14":1,"15":2,"19":1,"20":3,"24":4,"26":4,"28":1,"30":1,"31":1,"33":2,"35":4,"36":1,"38":1,"39":2,"40":1,"41":2,"44":1,"45":2,"46":1,"47":3,"50":1,"52":1,"53":2,"55":1,"56":1,"57":2,"59":9,"61":2,"62":2,"64":4,"65":1,"66":2,"67":2,"68":1,"71":1,"72":2,"75":1,"76":1,"77":2,"79":1,"80":1,"81":1,"83":1,"84":2,"85":1,"87":1,"89":1,"92":1,"96":1,"97":2,"98":2,"105":4,"106":1,"109":5,"113":4,"114":1,"117":3,"120":1,"121":3,"124":7,"125":1,"126":1,"128":2,"129":1,"130":1,"131":5,"133":3,"134":1,"135":3,"136":3,"140":1,"143":8,"144":1,"145":1,"147":1,"148":1,"149":1,"150":3,"153":4,"154":1,"156":3,"157":1,"158":4,"159":1,"160":4,"162":8,"163":1,"164":3,"165":2,"166":6,"168":2,"169":5,"172":1,"174":1,"177":1,"178":2,"182":7,"183":1,"184":1,"186":2,"188":2,"191":4,"192":1,"193":1,"194":4,"195":2,"196":2,"197":3,"199":6,"202":3,"204":1,"206":1,"207":1,"208":1,"210":4,"211":1,"221":3,"222":1,"223":1,"225":4,"227":1,"229":8,"230":10,"232":1,"235":1,"236":1,"239":4,"240":1,"241":4,"242":6,"243":9,"244":3,"245":5,"247":11,"248":1,"249":3,"253":2,"254":1,"255":12,"256":5,"258":2,"259":4,"262":2,"263":1,"264":5,"265":2,"266":2,"267":1,"269":7,"270":1,"272":2,"273":2,"275":1,"277":3,"278":1,"279":3,"280":2,"281":1,"282":3,"283":2,"284":1,"287":4,"288":1,"290":1,"291":1,"293":3,"294":3,"295":1,"297":1,"299":2,"300":1,"301":1,"304":7,"305":1,"307":1,"308":2,"313":5,"314":1,"315":1,"317":3,"318":3,"319":1,"320":4,"321":5,"322":2,"324":4,"326":2,"327":1,"328":1,"330":3,"331":2,"334":5,"336":1,"337":2,"338":1,"340":3,"341":1,"342":1,"343":1,"346":8,"347":1,"348":1,"349":12,"350":5,"351":1,"352":1,"355":7,"356":1,"358":6,"360":2,"361":4,"362":5,"365":1,"366":2,"367":1,"369":5,"370":1,"371":2,"373":1,"376":3,"377":1,"379":2,"380":1,"382":1,"383":2,"385":1,"386":1,"390":1,"391":1,"394":1,"396":4,"398":3,"400":5,"401":1,"402":1,"404":2,"406":6,"407":2,"408":1,"410":1,"412":1,"413":2,"414":2,"417":1,"419":2,"420":2,"423":2,"424":1,"425":1,"426":4,"428":3,"429":1,"430":1,"431":1,"432":1,"433":1,"434":2,"437":1,"438":1,"439":1,"440":2,"443":2,"444":1,"445":1,"446":1,"447":1,"449":1,"450":1,"454":1,"455":4,"456":1,"457":2,"458":3,"459":4,"460":1,"461":1,"462":6,"463":2,"464":3,"466":1,"467":1,"468":2,"469":2,"470":1,"471":3,"472":1,"473":6,"474":3,"475":1,"476":1,"477":2,"479":1,"481":1,"485":3,"490":1,"491":1,"492":1,"493":2,"496":1,"497":4,"498":3,"499":1,"500":1,"503":5,"504":1,"506":4,"508":2,"509":2,"510":3,"511":1,"515":1,"516":3,"517":4,"518":3,"520":1,"521":5,"522":2,"524":1,"525":1,"526":1,"528":1,"529":1,"531":1,"532":3,"533":1,"534":1,"535":3,"536":4,"537":4,"538":2,"539":1,"541":9,"542":1,"543":1,"544":6,"546":1,"548":12,"549":7,"551":1,"553":1,"554":5,"555":7,"556":6,"557":2,"558":1,"560":5,"561":1,"563":2,"565":3,"568":6,"569":1,"571":5,"572":6,"573":3,"574":2,"575":1,"576":1,"577":3,"578":2,"579":7,"580":1,"582":5,"586":1,"587":5,"588":1,"590":5,"591":1,"592":2,"594":1,"595":5,"596":1,"598":4,"599":5,"601":2,"605":4,"606":1,"608":2,"610":2,"611":1,"612":1,"614":4,"615":1,"616":1,"617":2,"618":2,"619":3,"622":3,"623":1,"624":1,"625":3,"626":2,"627":1,"630":2,"631":2,"632":2,"633":2,"634":1,"635":1,"637":1,"639":2,"642":1,"645":6,"646":1,"647":1,"648":4,"649":1,"650":1,"651":1,"653":4,"654":1,"656":3,"657":3,"658":2,"659":2,"660":1,"661":4,"662":1,"664":4,"665":1,"666":1,"667":3,"670":4,"671":1,"673":3,"676":2,"678":4,"679":1,"681":3,"682":3,"683":4,"684":4,"686":5,"687":1,"689":2,"690":3,"691":1,"694":6,"695":1,"697":2,"698":2,"700":1,"701":9,"702":1,"704":1,"706":2,"707":6,"708":1,"709":2,"711":7,"712":1,"714":2,"715":5,"716":2,"717":1,"721":8,"722":1,"724":1,"725":5,"726":1,"727":2,"729":7,"730":2,"731":4,"732":4,"733":6,"734":2,"735":1,"737":7,"738":1,"740":2,"741":5,"742":1,"743":4,"745":8,"746":1,"748":4,"749":7,"750":6,"751":2,"753":9,"754":1,"756":6,"757":2,"758":1,"759":3,"761":1,"762":7,"763":1,"764":1,"765":5,"766":1,"768":2,"769":2,"770":4,"771":1,"773":8,"774":1,"775":1,"776":3,"777":2,"778":7,"779":1,"781":2,"782":2,"783":2,"784":2,"785":1,"786":7,"787":1,"789":6,"790":4,"792":2,"795":7,"796":1,"797":4,"798":3,"799":5,"800":2,"801":3,"802":8,"803":1,"804":1,"807":2,"808":2,"809":5,"810":9,"811":2,"812":2,"813":2,"815":9,"816":1,"817":3,"818":2,"819":2,"821":4,"823":8,"824":1,"825":4,"826":4,"827":18,"828":2,"829":3,"834":10,"835":1,"836":2,"837":1,"838":2,"839":1,"840":2,"842":8,"843":1,"844":2,"845":3,"847":3,"848":1,"849":1,"851":1,"852":2,"853":2,"854":3,"856":3,"857":3,"858":1,"860":3,"861":1,"862":2,"863":2,"865":5,"866":1,"868":1,"869":1,"870":1,"872":1,"873":1,"874":5,"878":1,"880":5,"881":7,"882":4,"885":7,"886":1,"888":3,"889":1,"891":3,"892":1,"893":4,"894":1,"895":1,"896":6,"897":2,"899":2,"900":3,"901":7,"902":1,"903":1,"904":2,"905":3,"907":3,"910":12,"911":1,"912":1,"913":2,"914":3,"916":4,"918":9,"919":1,"920":1,"921":2,"922":6,"923":3,"924":2,"925":8,"926":1,"927":1,"928":1,"929":2,"930":2,"931":1,"932":2,"933":2,"935":6,"936":1,"937":2,"938":1,"939":3,"940":1,"941":1,"942":5,"943":1,"944":1,"945":1,"946":1,"947":2,"948":1,"950":6,"951":1,"953":6,"954":3,"955":7,"956":2,"957":9,"960":1,"961":1,"962":1,"963":3,"964":4,"965":4,"966":2,"968":7,"969":1,"971":3,"972":1,"973":2,"976":7,"977":1,"979":2,"980":2,"981":1,"984":6,"985":1,"987":6,"988":2,"989":1,"992":8,"993":1,"994":1,"995":4,"1000":6,"1001":1,"1003":2,"1004":1,"1005":1,"1006":2,"1008":5,"1009":1,"1010":1,"1012":4,"1013":1,"1015":1,"1016":2,"1017":1,"1018":3,"1020":1,"1022":7,"1023":1,"1024":1,"1025":3,"1026":6,"1027":2,"1030":8,"1031":1,"1032":2,"1033":2,"1034":1,"1035":2,"1036":1,"1038":7,"1039":1,"1040":1,"1041":4,"1042":2,"1044":3,"1046":6,"1047":1,"1048":4,"1049":5,"1050":4,"1051":7,"1052":4,"1053":8,"1054":1,"1056":1,"1057":2,"1058":2,"1060":1,"1061":1,"1063":5,"1064":1,"1065":1,"1069":2,"1071":5,"1072":1,"1073":4,"1074":4,"1075":1,"1076":1,"1077":1,"1078":1,"1079":10,"1080":1,"1082":1,"1083":1,"1084":2,"1087":6,"1088":1,"1089":1,"1090":2,"1092":1,"1093":1,"1096":8,"1097":1,"1098":1,"1099":2,"1100":4,"1101":2,"1102":3,"1103":1,"1104":7,"1105":1,"1107":1,"1108":2,"1112":6,"1113":1,"1114":2,"1115":1,"1116":2,"1118":1,"1120":7,"1121":1,"1123":3,"1126":1,"1129":5,"1130":1,"1132":2,"1134":3,"1137":5,"1138":1,"1139":3,"1142":2,"1144":4,"1145":2,"1147":8,"1148":1,"1150":1,"1152":3,"1154":2,"1155":2,"1157":9,"1158":1,"1160":1,"1162":2,"1164":2,"1165":1,"1167":4,"1169":3,"1171":5,"1172":1,"1173":3,"1174":1,"1176":1,"1180":7,"1181":1,"1182":3,"1183":1,"1186":2,"1189":8,"1192":20,"1193":1,"1202":4,"1203":4,"1211":2,"1212":40,"1213":7,"1214":1,"1217":1,"1219":1,"1222":1,"1225":1,"1227":2,"1228":2,"1229":11,"1231":4,"1232":2,"1233":3,"1234":1,"1235":1,"1236":1,"1237":28,"1238":5,"1239":2,"1241":1,"1243":1,"1244":1,"1247":23,"1248":4,"1249":2,"1251":1,"1254":1,"1256":1,"1257":2,"1258":2,"1259":70,"1260":2,"1261":1,"1262":1,"1263":4,"1264":1,"1265":1,"1267":1,"1269":6,"1270":61,"1271":8,"1273":2,"1274":1,"1275":1,"1276":1,"1277":2,"1278":3,"1279":1,"1281":2,"1282":1,"1283":2,"1284":2,"1285":3,"1286":193,"1287":15,"1289":1,"1290":1,"1292":2,"1293":1,"1294":1,"1297":2,"1298":2,"1299":1,"1300":165,"1301":23,"1302":5,"1303":2,"1304":2,"1307":2,"1308":1,"1309":38,"1310":14,"1311":123,"1312":21,"1313":4,"1314":1,"1316":4,"1317":6,"1318":1,"1320":4,"1321":1,"1322":4,"1323":114,"1324":204,"1325":4,"1326":7,"1328":4,"1330":1,"1331":1,"1332":2,"1333":2,"1334":2,"1336":3,"1337":3,"1338":2,"1339":100,"1343":1,"1345":1,"1347":3,"1348":1,"1349":3,"1350":70,"1352":2,"1353":4,"1354":2,"1355":4,"1357":1,"1358":1,"1359":237,"1361":2,"1363":1,"1364":1,"1365":1,"1366":1,"1367":3,"1368":1,"1369":13,"1371":2,"1372":2,"1373":2,"1374":1,"1375":2,"1376":1,"1378":3,"1379":8,"1380":38,"1384":1,"1387":1,"1389":3,"1391":1,"1394":2,"1395":82,"1396":183,"1397":2,"1398":1,"1399":1,"1400":3,"1401":3,"1402":70,"1404":3,"1405":4,"1406":7,"1407":1,"1408":1,"1409":1,"1410":2,"1411":2,"1412":2,"1413":6,"1414":1,"1415":144,"1416":27,"1417":106,"1418":2,"1419":1,"1421":2,"1423":1,"1427":30,"1428":4,"1429":2,"1430":4,"1431":10,"1432":3,"1433":1,"1435":2,"1436":244,"1438":76,"1441":6,"1442":1,"1446":3,"1447":3,"1449":3,"1450":1,"1453":3,"1454":8,"1455":5,"1458":1,"1460":4,"1461":3,"1462":3,"1467":20,"1468":1,"1469":5,"1471":2,"1473":4,"1474":1,"1475":1,"1476":1,"1477":1,"1481":1,"1482":6,"1483":1,"1486":2,"1487":2,"1488":7,"1489":10,"1490":1,"1491":1,"1492":4,"1493":3,"1494":10,"1496":111,"1499":2,"1500":4,"1502":1,"1503":6,"1504":1,"1508":1,"1509":3,"1510":3,"1512":1,"1513":6,"1514":1,"1515":2,"1519":1,"1521":1,"1524":2,"1525":3,"1526":28,"1527":3,"1531":2,"1534":5,"1535":5,"1536":2,"1541":1,"1543":1,"1545":2,"1546":1,"1547":1,"1548":2,"1554":1,"1573":2,"1575":2,"1576":8,"1577":83,"1578":3,"1582":8,"1583":1,"1585":9,"1586":4,"1591":20,"1592":3,"1596":1,"1599":7,"1600":2,"1626":1,"1627":2,"1629":1,"1630":2,"1631":10,"1632":1,"1636":2,"1640":4,"1641":2,"1642":2,"1646":1,"1648":2,"1649":1,"1650":1,"1651":6,"1652":1,"1653":4,"1654":5,"1655":1,"1656":5,"1658":1,"1660":4,"1661":1,"1662":3,"1663":3,"1664":4,"1665":2,"1666":2,"1667":4,"1668":4,"1669":1,"1670":4,"1671":2,"1672":1,"1673":5,"1674":1,"1675":5,"1680":1,"1682":1,"1684":2,"1685":2,"1686":1,"1693":3,"1695":1,"1697":1,"1699":1,"1703":1,"1705":1,"1706":1,"1707":1,"1708":2,"1719":1,"1720":12,"1721":3,"1723":2,"1724":8,"1726":1,"1727":2,"1728":1,"1732":1,"1735":1,"1737":1,"1747":3,"1748":5,"1749":5,"1751":1,"1755":1,"1759":1,"1760":1,"1761":2,"1764":1,"1765":9,"1769":4,"1772":1,"1778":1,"1779":4,"1781":4,"1783":1,"1784":4,"1790":4,"1792":1,"1793":4,"1796":2,"1799":3,"1801":1,"1802":1,"1804":1,"1805":1,"1806":1,"1807":3,"1810":2,"1820":1,"1824":1,"1826":1,"1827":6,"1839":1,"1840":1,"1841":2,"1842":3,"1843":2,"1845":1,"1846":3,"1848":1,"1851":1,"1852":1,"1853":4,"1855":4,"1856":3,"1858":1,"1861":2,"1864":1,"1867":1,"1868":3,"1869":2,"1870":2,"1875":2,"1877":2,"1884":1,"1886":3,"1888":2,"1889":2,"1890":1,"1891":2,"1892":5,"1896":4,"1898":2,"1899":4,"1902":1,"1903":4,"1906":2,"1910":1,"1915":1,"1916":1,"1920":1,"1921":3,"1922":1,"1923":2,"1924":1,"1929":1,"1932":1,"1933":3,"1935":1,"1936":1,"1941":1,"1942":1,"1943":1,"1946":2,"1947":1,"1948":1,"1949":1,"1950":6,"1951":1,"1952":1,"1953":1,"1955":1,"1958":1,"1959":1,"1965":3,"1968":1,"1970":2,"1971":1,"1972":6,"1974":1,"1976":1,"1978":1,"1979":2,"1983":1,"1984":1,"1985":3,"1986":1,"1987":1,"1988":4,"1990":1,"1991":1,"1992":8,"1995":2,"1996":2,"1997":1,"1998":4,"2001":7,"2002":4,"2003":4,"2007":1,"2009":2,"2010":2,"2013":1,"2021":2,"2022":2,"2023":1,"2024":1,"2025":4,"2026":1,"2028":2,"2029":6,"2030":2,"2031":1,"2033":3,"2034":1,"2035":3,"2036":2,"2038":1,"2039":2,"2044":4,"2045":1,"2047":1,"2048":1,"2056":2,"2057":1,"2058":1,"2060":1,"2061":3,"2063":2,"2064":2,"2065":1,"2066":2,"2067":4,"2068":3,"2070":2,"2071":6,"2083":4,"2085":3,"2087":5,"2088":3,"2089":2,"2100":1,"2101":1,"2102":1,"2108":2,"2109":1,"2110":4,"2114":1,"2118":1,"2119":1,"2120":1,"2122":1,"2123":2,"2125":1,"2128":6,"2129":2,"2130":2,"2132":2,"2133":4,"2134":2,"2135":2,"2138":1,"2139":2,"2140":3,"2141":2,"2142":1,"2143":3,"2145":2,"2148":1,"2149":1,"2151":3,"2152":6,"2153":4,"2154":3,"2155":3,"2157":1,"2158":2,"2160":3,"2162":2,"2163":1,"2164":6,"2165":1,"2166":4,"2167":4,"2168":6,"2169":1,"2170":11,"2171":4,"2172":1,"2177":2,"2178":1,"2181":9,"2182":3,"2183":2,"2184":1,"2185":10,"2186":3,"2187":3,"2188":1,"2190":3,"2192":1,"2194":9,"2195":5,"2196":1,"2197":1,"2200":3,"2201":1,"2204":3,"2205":2,"2206":1,"2210":1,"2234":27}}],["adrs",{"0":{"1515":1},"3":{"0":4,"1":1,"131":1,"324":2,"555":1,"789":1,"1011":1,"1013":1,"1190":1,"1212":3,"1270":1,"1286":5,"1309":1,"1311":1,"1313":1,"1317":1,"1350":1,"1359":3,"1396":1,"1417":2,"1428":1,"1471":2,"1494":1,"1496":8,"1502":1,"1517":1,"1534":1,"1537":1,"1552":1,"1571":4,"1572":2,"1577":4,"1591":2,"1658":1,"1659":1,"1663":1,"1673":1,"1674":1,"1705":1,"1725":1,"1783":1,"1787":1,"1792":1,"1793":1,"1797":1,"2003":1,"2029":1,"2088":1,"2213":1,"2221":1,"2223":1,"2234":2}}]],"serializationVersion":2}} \ No newline at end of file diff --git a/docs-src/articles/34-category-architecture-rubric.md b/docs-src/articles/34-category-architecture-rubric.md index e097d81e..7271d6b0 100644 --- a/docs-src/articles/34-category-architecture-rubric.md +++ b/docs-src/articles/34-category-architecture-rubric.md @@ -3,8 +3,8 @@ > Series: MMCA.Common · Article #3 (cornerstone) · Pillar P4 · Rubric: all > Status: grounded in `Website/docs-src/governance/ArchitectureEvaluationCriteria.md` (rubric version 2, > ADR-110) and `Website/docs-src/governance/common-ArchitectureScorecard.md`. No em dashes. Current facts -> (two-axis index: Maturity 97.0%, Implementation 86.0%; all 34 categories scored, no N/A, with §16 -> AI-Native Application Architecture carrying a scored 3 / 6 rather than an exemption; the first-scored +> (two-axis index: Maturity 96.6%, Implementation 86.0%; all 34 categories scored, no N/A, with §16 +> AI-Native Application Architecture carrying a scored 4 / 9 rather than an exemption; the first-scored > lowest category later remediated via ADR-005). **Subtitle:** "Clean architecture" is not a vibe. Here is a 34-category rubric that scores any system on @@ -20,7 +20,7 @@ impressions, and impressions do not survive a code review six months later, let I wanted something better for my own framework, so I wrote a rubric: 34 categories, each scored on two axes, each requiring evidence. Then I scored MMCA.Common against it in public and committed the -scorecard to the repo. The framework landed at a maturity index of 97.0% and an implementation index of +scorecard to the repo. The framework stands at a maturity index of 96.6% and an implementation index of 86.0%. This article is about the rubric itself, because the scoring instrument is more reusable than the score. @@ -102,26 +102,27 @@ are. ## The worked example: MMCA.Common, scored on both axes When I ran MMCA.Common through the rubric (the canonical, version-controlled scorecard lives in -`Website/docs-src/governance/common-ArchitectureScorecard.md`), it landed at a **maturity index of 97.0% and +`Website/docs-src/governance/common-ArchitectureScorecard.md`), it landed at a **maturity index of 96.6% and an implementation index of 86.0%** across **all 34 categories**. No category sits at N/A: multi-locale i18n ships under ADR-027, which supersedes the single-locale ADR-011, and Internationalization scores -maturity 4, implementation 9 on that evidence, while AI-Native Application Architecture carries a scored -maturity 3, implementation 6 rather than an exemption. The N/A verdict stays available on principle: do -not penalize a system for a category that does not apply to it, but say so explicitly, in a decision -record that any later evidence can reopen. +maturity 4, implementation 8 on that evidence, while AI-Native Application Architecture carries a scored +maturity 4, implementation 9 rather than an exemption, because the framework ships its own governed +model-calling package. The N/A verdict stays available on principle: do not penalize a system for a +category that does not apply to it, but say so explicitly, in a decision record that any later evidence +can reopen. -The high scores clustered exactly where I would want them to: Clean Architecture, SOLID, Microservices +The high scores clustered exactly where I would want them to: Clean Architecture, Microservices Readiness, Supply-Chain, and Testability all reached maturity 4 with implementation 9, each enforced -automatically. The two axes are deliberately asymmetric: maturity (97.0%) runs ahead of implementation +automatically. The two axes are deliberately asymmetric: maturity (96.6%) runs ahead of implementation (86.0%), and that gap is the most useful thing the scorecard says. It is structural, not a defect. It is also honest in both directions, which is rarer than it sounds: every score states what today's evidence supports and nothing more, so a category holds a 9 only while its stated reasoning still carries an Exemplary verdict, and it moves *down* as readily as up when the next re-score reads the evidence (Testability scores 9 on a gated coverage floor of 68.3%). A rubric that only ever ratchets up is not -being honest, and neither is one that only ratchets down. AI-Native Application Architecture carries the -lowest implementation on its own, at 6 on weight 2, and Cost Efficiency / FinOps holds the lowest -maturity, a 2, precisely because the substance those two reward (a product feature that calls a model, -right-sizing, per-service cost attribution) lives in consumer apps, not in a library. +being honest, and neither is one that only ratchets down. No category scores below 8 on implementation, +and Cost Efficiency / FinOps holds the lowest maturity, a 2. Most of the remaining implementation gap is +structural rather than neglected: deployment execution, production SLOs, cost right-sizing and the +consent process belong to the consuming apps, not to a library. When I first scored the framework, the lowest category was **Compliance, Privacy and Data Governance**: soft-delete everywhere, with no right-to-erasure path. That is the exact GDPR conflict the rubric names @@ -133,13 +134,15 @@ reason to score yourself in public. ## The one insight worth the whole exercise When I lined the scores up, a single pattern explained almost all of the variance between the top tier -and the middle tier, and it is the pattern that has driven every re-score since. Every category that -reached maturity 4 is backed by a fitness function or a compile-time guard: layer rules, domain purity, -transport coupling, outbox behavior, an automated database restore drill. Every category still capped at -3 has the right design but leaves its enforcement short of a required merge gate. DevOps and Deployment -is the cleanest illustration: the repo ships a reference Bicep deployment sample plus a CI job that -compiles it, but that job is not one of the eight required contexts on the branch, and the deployment -machinery itself lives in consumer repos, so the rule is trusted rather than gated. Performance and +and the middle tier, and it is the pattern that has driven every re-score since. Thirty of the 34 +categories sit at maturity 4, most of them on build-breaking gates: layer rules, domain purity, +transport coupling, outbox behavior, an automated database restore drill. The three categories still +capped at 3 have the right design but stop short of an automatic, always-on gate: SOLID enforces only its +single-responsibility and dependency-inversion rules automatically, Compliance ships its audit-trail and +data-export surfaces opt-in, and DevOps and Deployment is the cleanest illustration: the repo ships a +reference Bicep deployment sample plus a CI job that compiles it, but that job is not one of the eight +required contexts on the branch, and the deployment machinery itself lives in consumer repos, so the +rule is trusted rather than gated. Performance and Scalability sits on the other side of exactly that line: a BenchmarkDotNet harness fails CI on latency or allocation regressions against a committed baseline, its context is in the branch's required checks, and the category holds a 4 because the existing check is a check that can fail the merge. @@ -169,10 +172,10 @@ A rubric is a tool, not an oracle, and it has sharp edges worth naming. - **Some categories are genuinely N/A.** Be willing to exclude rather than fudge. But excluding should be a documented decision, not a convenient dodge for a category you would rather not face. - **A snapshot ages.** A scorecard is true only for the commit it was read against, and the thing being - scored keeps moving: nineteen published packages, lock files, an SBOM-gated release, a + scored keeps moving: twenty-two published packages, lock files, an SBOM-gated release, a `DependencyVersionTests` guard for the MassTransit pin, and the ADR-005 erasure extension point all - postdate the first committed pass. Re-verifications re-score it on both axes every release, through - thirty-six remediation waves. The honest framing is "scored, published, then fixed, then re-scored": + postdate the first committed pass. Each re-verification re-scores it on both axes and stamps the + version and commit it read. The honest framing is "scored, published, then fixed, then re-scored": the score is a starting line, not a trophy. Re-run it per release. ## Apply this even without MMCA @@ -199,7 +202,7 @@ redesign. It is a check. **What we covered:** why "good architecture" needs a measurable rubric, the three-part 34-category structure, the two-axis (maturity plus implementation) scoring with mandatory evidence, MMCA.Common's -97.0% maturity / 86.0% implementation as a worked example including its first-scored lowest category and +96.6% maturity / 86.0% implementation as a worked example including its first-scored lowest category and its later remediation, and the single insight that explains the top tier: enforced beats convention-only. **Next in the series:** the Result railway that retired exceptions-as-control-flow, the foundational @@ -213,60 +216,60 @@ gaps and all, and then score one of your own systems against the rubric.* *Tags: Software Architecture, .NET, Engineering Management, Code Quality, Technical Leadership* -*Notes: the two-axis indices (Maturity 97.0% = 318/328, Implementation 86.0% = 705/820), the -all-34-categories-scored / no-N/A status, and the per-category scores are taken from the repo's canonical -two-axis scorecard, `Website/docs-src/governance/common-ArchitectureScorecard.md` (`:120` Maturity index, `:121` -Implementation index, `:124` "N/A (excluded from denominators): none this cycle"). Sigma-weight is 82: §16 -AI-Native Application Architecture is scored Maturity 3 / Implementation 6 on weight 2 (`:96`) and that weight -sits in both denominators (`:124`). The category names, the two-axis scale, the three-part structure and the -maturity-level definitions are from `Website/docs-src/governance/ArchitectureEvaluationCriteria.md`, rubric -version 2 of 2026-09-04 (`:15-23`), which keeps 34 categories and every category number while making two -in-place replacements: §10 is Messaging & Integration Architecture (`:329`) and §16 is AI-Native Application -Architecture (`:469`); decision record ADR-110 (`Website/docs-src/adr/110-rubric-v2-category-realignment.md`). -The Exemplary band reads "10 = almost perfect: every criterion met at reference quality, no red flags, at most -trivial polish left" (`ArchitectureEvaluationCriteria.md:60`), and the scorecard's 2026-08-01 recalibration line -retires the former "attainable ceiling" reporting framing (`:122`). §27 Internationalization is Maturity 4 / -Implementation 9 (`:107`) after the i18n completion train (ADR-027 Decision 9): the pseudo-localization pass is a -required chromium CI gate and the framework chrome is fully externalized. ADR-027 supersedes the single-locale -ADR-011 (`Website/docs-src/adr/README.md:23,39`). §11 Security is Maturity 4 / Implementation 8 (`:91`: -deployer-owned vault/managed-identity binding, RBAC-with-capability-indirection). §14 Testability is Maturity 4 / -Implementation 9 (`:94`) on a CI line-coverage floor of 68.3% (the `Enforce coverage floor (unit/arch/bUnit tier, -generated code excluded)` step, `.github/workflows/ci.yml:470`, threshold `m="68.3"` at `:481`, ~70.3% measured per -`:467-468`), so it sits with Clean Architecture §3 (`:83`), SOLID §1 (`:81`), Microservices §7 (`:87`) and -Supply-Chain §32 (`:112`) at Implementation 9 / Maturity 4. §30 Compliance is Maturity 3 / Implementation 8 -(`:110`, implementation lifted 7 to 8 in v1.84.0 when `PiiRedactor` shipped). Slice cohesion §5 (`:85`) and -Resilience §29 (`:109`) are Maturity 4 (SliceCohesionTests / the build-gated DatabaseRestoreDrillTests), so -neither lacks an automated guard. §23 Front-End Performance is Maturity 4 / Implementation 8 (`:103`) on the -`WebVitalsE2ETests` LCP/TTFB/CLS budgets inside the blocking chromium `ui-e2e` gate. §9 API & Contract Design is -Maturity 4 / Implementation 9 (`:89`). The categories at Maturity 3 are §16 (`:96`), §17 DevOps & Deployment -(`:97`) and §30 (`:110`), with §31 Cost Efficiency / FinOps at Maturity 2 (`:111`). The article's insight section -tracks §17 as the convention-only survivor: its `sample-deployment-validate` job runs two compile-only -`az bicep build` steps and is absent from the 8 required contexts, and the CD machinery lives in consumer repos, -so deployment stays review-enforced rather than merge-enforced (`:97`); §12 Performance & Scalability is the -merge-enforced counterpart at Maturity 4 (`:92`), gated by the `Performance gate (BenchmarkDotNet Short + baseline -verify)` job (`.github/workflows/ci.yml:378`) which runs `--filter "*" --job Short --exporters json` (`:410`) then -a `build/perfgate` step verifying results against the committed `perf-baseline.json` (`:419`), with no -`continue-on-error` anywhere in the job. The single lowest Implementation is 6, held by §16 alone (`:96`); §31 -FinOps is Implementation 8 on weight 2 (`:111`, right-sizing / reversible scale-events / per-service attribution -are consumer/IaC execution). §27 i18n is Implementation 9 (`:107`), §22 Responsive 9 (`:102`), §20 Design System 9 -(`:100`) and §21 Accessibility 9 (`:101`), the last two resting on the dark-theme WCAG AA contrast values in the -palette (`Theme/MMCATheme.cs:66,93`) locked by a blocking dark-mode axe gate inside the `ui-e2e` job -(`.github/workflows/ci.yml:270`, whose `browser: [chromium, firefox, webkit]` matrix at `:279` is all-required per -`:280-282`); Deployment §17 (`:97`) is Implementation 8. §10 is Messaging & Integration Architecture at weight 3, -Maturity 4 / Implementation 9 (`:90`). The idempotency guard resolves an `IDistributedLock` -(`Idempotency/IdempotencyFilter.cs:148`) and `AddCaching` registers the SET-NX-PX plus compare-and-delete -`RedisDistributedLock` whenever a Redis multiplexer is present (`Infrastructure/DependencyInjection.cs:319-325`; -ADR-017 revised). Latest full 34-category two-pass evidence re-score is the thirty-sixth wave (2026-09-19 at -framework v1.205.0, git HEAD `90ffa7a`, clean tree, scorecard `:5`), which moves nothing: 24 categories re-confirm -fresh and ten first-pass lift proposals came back FLAG and were refuted on the adversarial pass, so both indices -hold at 97.0% / 86.0%. The twenty-seventh wave (2026-08-14 at v1.152.0, git HEAD `3ba8d13`, clean tree, scorecard -`:67`) likewise moved nothing, refuting nine first-pass proposals. The framework is v1.205.0 per `FACTS.md` -(`FACTS.md:4,14`); nineteen published packages (`FACTS.md:19`). The earlier single-axis snapshot (80% / 218 of -272 / 28 applicable) is the deliberate historical baseline that the two-axis scorecard replaced (scorecard `:3` -notes it survives in git history); confirmed by git archaeology at MMCA.Common commit `f518099` ("Remediation -wave 2"), `ArchitectureScorecard.md:3` ("**Weighted architecture-health index: 80%** (218 of 272 weighted points -across 28 applicable categories; 6 N/A categories excluded)"), so it is kept here as past-tense history, not -re-derived and not a drift. The "MassTransit will retry" over-promise quoted in the gaming trade-off has no match -in the current scorecard text and was not re-verified this run. Re-verify the numbers before publishing.* +*Notes (2026-10-02 refresh, framework v1.221.0): the two-axis indices (Maturity 96.6% = 317/328, Implementation +86.0% = 705/820), the all-34-categories-scored / no-N/A status and the per-category scores are taken from the +canonical two-axis scorecard, `Website/docs-src/governance/common-ArchitectureScorecard.md` (`:9` Maturity index, +`:10` Implementation index, `:104` "N/A (excluded from denominators): none", sigma-weight 82). Scorecard evidence +stamp: 2026-10-01 at v1.218.0, git HEAD `f93bc6e2`, dirty tree (`:5`); the framework is v1.221.0 per +`MMCA.Common/FACTS.md:4,14`, so the scorecard trails FACTS and the article claims only that each re-verification +stamps the version and commit it read. Twenty-two published packages (`FACTS.md:19`). Category row N sits at +scorecard line 64+N (`:65` to `:98`). Section 16 AI-Native Application Architecture is Maturity 4 / Implementation +9 on weight 2 (`:80`), scored because `MMCA.Common.AI` ships a model-calling feature (`:104`). The Maturity-3 +categories are section 1 SOLID (`:65`: only SRP and DIP are enforced automatically, ISP, LSP and OCP have no +automated gate), section 17 DevOps & Deployment (`:81`) and section 30 Compliance (`:94`: audit trail and DSAR +export are opt-in twice over), with section 31 Cost Efficiency / FinOps at Maturity 2 (`:95`); the maturity band +is at `:12`. Thirty of 34 categories sit at Maturity 4, "most of them on build-breaking gates" (`:15`), which is +why the insight section says "most" rather than "every". The lowest Implementation is 8, held by 15 categories +(`:13`); the structural-gap sentence paraphrases `:15`. At Maturity 4 / Implementation 9: Clean Architecture +section 3 (`:67`), Microservices section 7 (`:71`), Testability section 14 (`:78`) and Supply-Chain section 32 +(`:96`, weight 3). Section 27 Internationalization is Maturity 4 / Implementation 8 on weight 1 (`:91`); ADR-027 +supersedes the single-locale ADR-011 (`Website/docs-src/adr/README.md:24,40`). Section 20 Design System is +Implementation 8 (`:84`), section 21 Accessibility 9 (`:85`) and section 22 Responsive 9 (`:86`); the dark-theme +WCAG AA contrast values are at `Source/Presentation/MMCA.Common.UI/Theme/MMCATheme.cs:66,93`, locked by the +`ui-e2e` job (`.github/workflows/ci.yml:248`, `browser: [chromium, firefox, webkit]` matrix at `:257`, all three +required per `:258-260`). Section 14 Testability rests on a CI line-coverage floor of 68.3% (the `Enforce coverage +floor (unit/arch/bUnit tier, generated code excluded)` step at `ci.yml:451`, `m="68.3"` at `:462`, 70.3% measured +per `:449`). Section 9 API & Contract Design is Maturity 4 / Implementation 9 (`:73`), section 10 Messaging & +Integration Architecture is weight 3, Maturity 4 / Implementation 9 (`:74`), section 11 Security is Maturity 4 / +Implementation 8 (`:75`), section 23 Front-End Performance is Maturity 4 / Implementation 8 (`:87`), and slice +cohesion section 5 (`:69`) and Resilience section 29 (`:93`) are Maturity 4. The insight section's convention-only +survivor is section 17: `sample-deployment-validate` (`ci.yml:819`) runs two compile-only `az bicep build` steps +(`:831`, `:835`) and is absent from the 8 required contexts (scorecard `:81`, read from the branch-protection +API); section 12 Performance & Scalability is the merge-enforced counterpart at Maturity 4 (`:76`), gated by the +`Performance gate (BenchmarkDotNet Short + baseline verify)` job (`ci.yml:356`) running `--filter "*" --job Short +--exporters json` (`:388`) then `build/perfgate` against the committed `perf-baseline.json` (`:397`). The +idempotency guard resolves an `IDistributedLock` +(`Source/Presentation/MMCA.Common.API/Idempotency/IdempotencyFilter.cs:149`) and `AddCaching` registers +`RedisDistributedLock` whenever a Redis multiplexer is present +(`Source/Core/MMCA.Common.Infrastructure/DependencyInjection.Caching.cs:86-94`; SET with When.NotExists and an +expiry plus compare-and-delete at +`Source/Core/MMCA.Common.Infrastructure/Concurrency/RedisDistributedLock.cs:37,67`). The SBOM release gate is +`.github/workflows/release.yml:101`; the MassTransit pin guard is +`Tests/Architecture/MMCA.Common.Architecture.Tests/Governance/DependencyVersionTests.cs:9`. Rubric facts are from +`Website/docs-src/governance/ArchitectureEvaluationCriteria.md`: version 2 of 2026-09-04 (`:15-23`, ADR-110), +section 10 Messaging & Integration Architecture (`:329`), section 16 AI-Native Application Architecture (`:469`), +Level 4 Optimized (`:39`), the Exemplary band "10 = almost perfect" (`:60`), section 30 red flags (`:805`, `:812`) +and section 32 breaking-change policy (`:850`); the scorecard states Implementation 10 is awardable (`:107`). Kept +on purpose as the original snapshot: the earlier single-axis baseline (80% / 218 of 272 / 28 applicable) and the +first-scored lowest category (Compliance, soft-delete only, no erasure) are from MMCA.Common commit `f518099`, +`ArchitectureScorecard.md:3` and `:42`; the "MassTransit will retry" comment and the `ServiceContractAttribute` +claiming a nonexistent test are at `:100` and `:117` of the same commit. Neither is in the current scorecard. This +run: maturity 97.0% (318/328) to 96.6% (317/328); section 16 from 3/6 to 4/9; SOLID dropped from the Maturity 4 / +Implementation 9 cluster (it is 3/8); section 27 and section 20 implementation 9 to 8; lowest implementation 6 +(section 16 alone) to 8 (15 categories); Maturity-3 set 16/17/30 to 1/17/30; packages nineteen to twenty-two; +"every category at maturity 4 is backed by a fitness function" narrowed to "most of them on build-breaking gates"; +"every release, through thirty-six remediation waves" removed (no wave count in any governance file); the v1.84.0 +PiiRedactor 7-to-8 history removed (not in the current scorecard); the 2026-08-01 recalibration anchor replaced by +`:107`. Re-verify the numbers before publishing.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/README.md b/docs-src/articles/README.md index d947dcfb..ad4df513 100644 --- a/docs-src/articles/README.md +++ b/docs-src/articles/README.md @@ -12,18 +12,18 @@ functions, and more. Every technical claim traces to real source, an ADR, or a s | 2 | [Modular monolith to microservices](modular-monolith-to-microservices.md) | P1/P3 | G07,G13,G14 | §7 | 006/007/008 | deep-dive ★ | | 3 | [The 34-category rubric](34-category-architecture-rubric.md) | P4 | - | all | - | opinion ★ | | 4 | [The Result railway in C#](result-railway-csharp.md) | P2 | G01 | §1,§2 | 013 | deep-dive | -| 5 | [Kill the anemic domain model](kill-anemic-domain-model.md) | P2 | G02 | §4 | 068/115 | deep-dive | +| 5 | [Kill the anemic domain model](kill-anemic-domain-model.md) | P2 | G02 | §4 | 068/115/129 | deep-dive | | 6 | [Specifications over LINQ spaghetti](specification-pattern.md) | P2 | G03 | §2,§8 | - | deep-dive | | 7 | [The CQRS decorator pipeline](cqrs-decorator-pipeline.md) | P2 | G05 | §1,§6,§10 | 014/031/079 | deep-dive | | 8 | [Compose validators, don't copy them](validation-kit.md) | P2 | G06 | §24,§33 | - | deep-dive | | 9 | [The transactional outbox](transactional-outbox-dotnet.md) | P2/P3 | G04 | §6,§8 | 003/066/075/087/100/107 | deep-dive ★ | | 10 | [Database-per-service inside a monolith](database-per-service.md) | P3 | G07 | §7,§8 | 006/073 | deep-dive ★ | -| 11 | [Polyglot persistence: one model, four engines](polyglot-persistence.md) | P3 | G07,G03 | §8 | 018/113 | deep-dive | +| 11 | [Polyglot persistence: one model, four engines](polyglot-persistence.md) | P3 | G07,G03 | §8 | 018/113/130 | deep-dive | | 12 | [Navigation populators](navigation-populators.md) | P2/P3 | G11 | §8 | 002 | deep-dive | | 13 | [Optimistic concurrency: RowVersion to a required If-Match](optimistic-concurrency-rowversion.md) | P2/P3 | G07 | §8 | 035 | deep-dive | | 14 | [Self-ordering modules](self-ordering-modules.md) | P2 | G14 | §7 | 059 | deep-dive | | 15 | [Event-schema versioning](event-schema-versioning.md) | P3 | G04 | §6 | 010/083 | deep-dive | -| 16 | [JWKS cross-service auth](jwks-cross-service-auth.md) | P3 | G08 | §11 | 004 | deep-dive ★ | +| 16 | [JWKS cross-service auth](jwks-cross-service-auth.md) | P3 | G08 | §11 | 004/122 | deep-dive ★ | | 17 | [Password hashing done right](password-hashing.md) | P2/P4 | G08 | §11 | 102 | deep-dive | | 18 | [Idempotency in one attribute](idempotency-attribute.md) | P2 | G12 | §9,§29 | 017/021 | deep-dive | | 19 | [The self-invalidating cache](self-invalidating-cache.md) | P2 | G09 | §10,§12 | 026/040/073/077 | deep-dive | @@ -32,18 +32,18 @@ functions, and more. Every technical claim traces to real source, an ADR, or a s | 22 | [Ephemeral by design: sub-second live channels over one SignalR hub](live-channel-push.md) | P2/P3 | G10,G26 | §5,§7 | 039/052/074 | deep-dive | | 23 | [Delete AutoMapper: manual DTO mapping](manual-dto-mapping.md) | P2 | G12 | §9,§15 | 001 | deep-dive | | 24 | [Permission-based authorization over roles](permission-based-authorization.md) | P2/P4 | G08 | §11 | 020 | deep-dive | -| 25 | [Browser session-cookie auth for Blazor SSR](session-cookie-auth-blazor-ssr.md) | P2/P4 | G08,G15 | §11,§26 | 022/069 | deep-dive | +| 25 | [Browser session-cookie auth for Blazor SSR](session-cookie-auth-blazor-ssr.md) | P2/P4 | G08,G15 | §11,§26 | 022/069/131 | deep-dive | | 26 | [External OAuth login: Google/GitHub/Apple behind your own JWTs](external-oauth-login.md) | P2/P4 | G08 | §11 | 036 | deep-dive | | 27 | [Refresh tokens that rotate per device, and reuse detection that makes theft self-limiting](jwt-refresh-token-rotation.md) | P2/P4 | G08 | §11 | 097 | deep-dive | -| 28 | [Generic entity controllers + dynamic query contract](generic-entity-controllers.md) | P2 | G12 | §9,§11,§12 | 034/078 | deep-dive | +| 28 | [Generic entity controllers + dynamic query contract](generic-entity-controllers.md) | P2 | G12 | §9,§11,§12 | 034/078/125 | deep-dive | | 29 | [Resource-ownership authorization](resource-ownership-authorization.md) | P2/P4 | G08 | §11 | 033 | deep-dive | | 30 | [Defending the API edge: rate limiting + brute-force](rate-limiting-brute-force-protection.md) | P2/P4 | G08 | §11 | 019/029/124 | deep-dive | | 31 | [Aspire: one command](aspire-one-command.md) | P2/P5 | G16 | §13,§33 | 023/025/041/066/070 | tutorial | | 32 | [Extracting a module to a gRPC service](extract-module-to-grpc-service.md) | P3/P5 | G13,G14 | §7,§9 | 007/008/012/088/089 | tutorial | | 33 | [Resilience and recovery objectives](resilience-recovery-objectives.md) | P3/P4 | G04,G13 | §29 | 009/087 | deep-dive | -| 34 | [Architecture fitness functions](architecture-fitness-functions.md) | P4 | G28 | §3,§12,§25,§34 | 015/060/062/105/109 | deep-dive | -| 35 | [The test pyramid](test-pyramid.md) | P4 | G28 | §14,§21,§28 | 058/063/117 | deep-dive | -| 36 | [Soft-delete vs the right to erasure](soft-delete-vs-erasure.md) | P3/P4 | G07,G23 | §30 | 005/047/076/119 | deep-dive ★ | +| 34 | [Architecture fitness functions](architecture-fitness-functions.md) | P4 | G25 | §3,§12,§25,§34 | 015/060/062/105/109/125/128 | deep-dive | +| 35 | [The test pyramid](test-pyramid.md) | P4 | G25 | §14,§21,§28 | 058/063/117 | deep-dive | +| 36 | [Soft-delete vs the right to erasure](soft-delete-vs-erasure.md) | P3/P4 | G07,G23 | §30 | 005/047/076/095/119 | deep-dive ★ | | 37 | [A reusable Blazor UI framework](reusable-blazor-ui-framework.md) | P2/P5 | G15 | §18,§19,§20,§22,§23 | 056/067 | deep-dive | | 38 | [i18n and theming on one preference pipeline](i18n-and-theming.md) | P2/P5 | G15 | §27 | 027/028 | deep-dive | | 39 | [Build your first module](build-your-first-module.md) | P5 | G02,G05,G14 | §33 | 065 | tutorial | @@ -55,7 +55,7 @@ functions, and more. Every technical claim traces to real source, an ADR, or a s | 45 | [Feature flags in the CQRS pipeline](feature-flags-cqrs-pipeline.md) | P2 | G05 | §6 | 031 | deep-dive | | 46 | [Field-level encryption in EF Core](field-level-encryption-ef-core.md) | P3 | G07 | §11,§30 | 037 | deep-dive | | 47 | [Security headers and CSP for Blazor](security-headers-csp-blazor.md) | P2 | G16 | §26 | 023/082 | deep-dive | -| 48 | [Observability by default: OpenTelemetry + Azure Monitor](observability-opentelemetry.md) | P2/P3 | G16 | §13,§31 | 041/062 | deep-dive | +| 48 | [Observability by default: OpenTelemetry + Azure Monitor](observability-opentelemetry.md) | P2/P3 | G16 | §13 | 041/062 | deep-dive | | 49 | [Undo is a feature: saga compensation and the reconciliation backstop](saga-compensation-reconciliation.md) | P2/P3 | G04 | §6,§29 | 054/084/086 | deep-dive | | 50 | [The LLM is a dependency: a bounded, guarded, metered boundary for chat completions](governed-llm-boundary.md) | P2/P4 | G28 | §16 | 120/111 | deep-dive | | 51 | [Four ways to do work later: channels, cron, the outbox and durable internal commands](durable-internal-commands.md) | P2/P3 | G04 | §6,§10 | 114/121 | deep-dive | diff --git a/docs-src/articles/_ledger.md b/docs-src/articles/_ledger.md index fc10ea2d..0d057b97 100644 --- a/docs-src/articles/_ledger.md +++ b/docs-src/articles/_ledger.md @@ -21,18 +21,18 @@ Working file for `/update-medium` (underscore-prefixed, so the site build skips **Anchor facts (current state, verify before publishing)** - .NET 10, C# preview (extension types), Apache-2.0, repo `https://github.com/ivanball/MMCA.Common` (confirmed via git remote). -- Framework version **v1.205.0**, tracked in lockstep by every consumer (per `MMCA.Common/FACTS.md`). -- 19 NuGet packages released in lockstep; **125 ADRs (001-125)** (per `Website/docs-src/adr/README.md`). -- `MMCA.Common.Testing.Architecture` defines 136 test methods across 53 base classes; - Common's own build runs 267, plus a compile-time MSBuild layer guard (per `FACTS.md`). -- Two-axis architecture index (current per-repo scorecards): Common **Maturity 97.0% (318/328), +- Framework version **v1.221.0**, tracked in lockstep by every consumer (per `MMCA.Common/FACTS.md`). +- 22 NuGet packages released in lockstep; **131 ADRs (001-131)** (per `Website/docs-src/adr/README.md`). +- `MMCA.Common.Testing.Architecture` defines 141 test methods across 55 base classes; + Common's own build runs 339, plus a compile-time MSBuild layer guard (per `FACTS.md`). +- Two-axis architecture index (current per-repo scorecards): Common **Maturity 96.6% (317/328), Implementation 86.0% (705/820)** across all 34 categories (none N/A now: §27 i18n is scored after - ADR-027 superseded the single-locale ADR-011); ADC **Maturity 98.5% (319/324), Implementation 86.2% (698/810)**. + ADR-027 superseded the single-locale ADR-011); ADC **Maturity 96.9% (314/324), Implementation 86.0% (697/810)**; Store **Maturity 97.5% (308/316), Implementation 83.4% (659/790)**. - ~2,254 fast tests, no Docker. Two real consumer apps: MMCA.ADC (conference, Azure Container Apps) and - MMCA.Store (e-commerce, Stripe). Both consumers are pinned at 1.205.0 in lockstep. + MMCA.Store (e-commerce, Stripe). Both consumers are pinned at 1.221.0 in lockstep. > **Note on the scorecard:** the repo's committed `Website/docs-src/governance/common-ArchitectureScorecard.md` is now the -> canonical **two-axis** scorecard (Maturity 97.0% (318/328) / Implementation 86.0% (705/820), +> canonical **two-axis** scorecard (Maturity 96.6% (317/328) / Implementation 86.0% (705/820) as of the 2026-10-01 re-score at v1.218.0; > re-scored clean-tree at v1.101.0, then moved by the fifteenth-wave i18n completion train 2026-07-03, > the sixteenth-wave clean-tree re-score at v1.106.0 2026-07-06, which lifted §14 Testability > Implementation 8 to 9, the seventeenth-wave re-score at v1.108.0 2026-07-09, which recalibrated @@ -73,19 +73,17 @@ Working file for `/update-medium` (underscore-prefixed, so the site build skips > applicable categories, "eleven packages"), which survives in git history as the historical baseline > (MMCA.Common commit `f518099`, `ArchitectureScorecard.md:3`: "80% (218 of 272 weighted points across > 28 applicable categories; 6 N/A categories excluded)"). -> ADC's two-axis scorecard is `Website/docs-src/governance/adc-ArchitectureScorecard.md` (Maturity 97.2% (311/320) / Implementation -> 85.6% (685/800) as of the twenty-fourth-cycle re-score 2026-07-28, which corrected §15 Implementation -> 8 to 7 on suppression hygiene drift plus the MAUI project sitting outside the CI-audited graph; the -> previously stated 85.9% (687/800) is now stale). Store's is -> `Website/docs-src/governance/store-ArchitectureScorecard.md` (Maturity 97.8% (313/320) / Implementation -> 83.9% (671/800)). The cornerstone articles +> ADC's two-axis scorecard is `Website/docs-src/governance/adc-ArchitectureScorecard.md` (Maturity 96.9% (314/324) / Implementation +> 86.0% (697/810) as of the 2026-10-01 re-score). Store's is +> `Website/docs-src/governance/store-ArchitectureScorecard.md` (Maturity 97.5% (308/316) / Implementation +> 83.4% (659/790) as of the 2026-10-01 re-score). The cornerstone articles > frame proof as "scored, published, then fixed, then re-scored": the 80% snapshot predated several > remediations (the 13th package, lock files, the SBOM-gated release, `DependencyVersionTests`, the > ADR-005 erasure pathway), and the two-axis re-verification re-scored after they landed. The former > workspace eval files (`Docs/Architecture/ArchitectureEvaluation-MMCA.*.md`) are now pointer stubs, so > cite the in-repo scorecards. Re-derive numbers before publishing. -> **Note on ADRs:** the set has grown to **125 (001-125)**. Each ADR maps to an article or is a recorded +> **Note on ADRs:** the set has grown to **131 (001-131)**. Each ADR maps to an article or is a recorded > scope-out. Shared homes: ADR-017 (request idempotency) and ADR-021 (consumer-side inbox idempotency) are > both taught in **Article 18**; ADR-018 (polyglot persistence) is **Article 11**; ADR-001 (manual DTO > mapping) is **Article 23**; ADR-026 (two-tier caching) is **Article 19**; ADR-024 (two-channel @@ -342,6 +340,25 @@ Working file for `/update-medium` (underscore-prefixed, so the site build skips > as shipped-but-unadopted, and **ADR-112** (catalog-owned effective pricing) as Store per-module > internals, extending the G17-G22/G24 group-axis scope-out to Store module internals. Every ADR in > 001-125 and every functional group in G01-G28 now has an article cell or a recorded scope-out. +> +> **2026-10-02 coverage audit** (full sweep at v1.221.0, against the grown ADR set 126-131 plus a +> re-inversion of the whole matrix): no new article; every newly found gap closes as a section of an +> existing piece. **ADR-131** (the same-origin API proxy: the UI host forwards `/api/**` to the gateway +> server-side, adopted by both apps) regrounds **Article 25**; **ADR-130** (per-engine data source +> strategy, `IDataSourceEngine`) regrounds **Article 11**; **ADR-095** (`SoftDeleteUniqueIndexConvention`) +> is a new section of **Article 36**; **ADR-125** (parameterized SQL only, `IRawSqlQueryExecutor`) is a +> new section of **Article 28** with its `RawSqlConventionTestsBase` gate in **Article 34**; **ADR-128** +> (time as an input) adds its `ClockReadTestsBase` gate to **Article 34**; and **ADR-122** (dev-only +> relaxations fail closed) is a new trade-off in **Article 16**. The group cells of Articles 34 and 35 +> move to **G25** (Testing and Quality Infrastructure; group IDs and onboarding file numbers differ, see +> `Website/docs-src/onboarding/00-group-taxonomy.md:78-83`), and Article 48 drops its §31 cell so the +> standing §31 FinOps scope-out holds on the rubric axis. Recorded as taught in passing rather than given +> a cell: **ADR-106** (C# extension members as the DI surface) and the public-API baseline gate +> (`PublicAPI.Shipped.txt`, no dedicated ADR). **ADR-129** (the tactical aggregate contract, gated by +> `EntityConventionTestsBase`) is a new section of **Article 5**. Scope-outs recorded: **ADR-126** (event +> sourcing) and **ADR-127** (the actor model) are documented rejections that ship nothing, so neither +> needs an article. Every ADR in 001-131 and every functional group in G01-G28 now has an article cell or a +> recorded scope-out. **Coverage history** diff --git a/docs-src/articles/architecture-fitness-functions.md b/docs-src/articles/architecture-fitness-functions.md index eabfa585..213fc86d 100644 --- a/docs-src/articles/architecture-fitness-functions.md +++ b/docs-src/articles/architecture-fitness-functions.md @@ -1,13 +1,15 @@ # Architecture fitness functions: rules that fail the build, not a wiki page -> Series: MMCA.Common · Article #34 (deep-dive) · Pillar P4 · Group G28 · Rubric §3,§12,§34 · -> Status: grounded in `MMCA.Common/CLAUDE.md` (Architecture Enforcement section), -> `MMCA.Common/README.md` (package table), +> Series: MMCA.Common · Article #34 (deep-dive) · Pillar P4 · Group G25 · Rubric §3,§12,§34 · +> Status: grounded in `MMCA.Common/AGENTS.md` (Architecture section), +> `MMCA.Common/FACTS.md` (package list and fitness counts), > `Website/docs-src/adr/015-architecture-fitness-functions.md`, > `Website/docs-src/adr/060-performance-regression-gate.md`, > `Website/docs-src/adr/062-slo-alerting-as-code.md`, > `Website/docs-src/adr/105-data-residency-build-gate.md`, -> `Website/docs-src/adr/109-feature-by-folder-convention.md`, and +> `Website/docs-src/adr/109-feature-by-folder-convention.md`, +> `Website/docs-src/adr/125-parameterized-sql-only.md`, +> `Website/docs-src/adr/128-time-as-an-input.md`, and > `Website/docs-src/onboarding/group-28-testing-infrastructure.md`. No em dashes. **Subtitle:** The inward-dependency rule everyone agrees on is the one everyone eventually breaks. Here @@ -45,7 +47,7 @@ red flag. The fix is to make conformance executable. ## Enforced twice: compile-time and runtime MMCA.Common enforces the dependency rules through two independent gates, and the redundancy is -deliberate (`MMCA.Common/CLAUDE.md`, Architecture Enforcement section). +deliberate (`MMCA.Common/AGENTS.md`, Architecture section). **1. Compile-time, via MSBuild.** `Source/Build/MMCA.Common.LayerEnforcement.targets` is imported from `Directory.Build.props` for every `MMCA.Common.*` project under `Source/`. It runs in a @@ -78,16 +80,20 @@ Here is the part that makes the fitness functions scale across more than one rep three slightly-different copies. The rule *bodies* do not live in the test project. They live once, in a shipped NuGet package: -`MMCA.Common.Testing.Architecture` (package 15 of the nineteen the framework publishes, with +`MMCA.Common.Testing.Architecture` (package 18 of the twenty-two the framework publishes, with `FACTS.md` the canonical count). That package defines: - `ArchitectureRules`, the reusable rule library that expresses the actual assertions. -- A set of 53 abstract `*TestsBase` classes holding 136 `[Fact]`s (for example +- A set of 55 abstract `*TestsBase` classes holding 141 test methods (for example `LayerDependencyTestsBase`, `DomainPurityTestsBase`, `MicroserviceExtractionTestsBase`, - `PiiConventionTestsBase`, `FolderWidthTestsBase`, `DataResidencyTestsBase`). -- One extension point, `IArchitectureMap`, that every base class is parameterized by, with a shipped - `ArchitectureMapBase` that implements it so a per-repo map is a flat declaration of assemblies. + `PiiConventionTestsBase`, `FolderWidthTestsBase`, `DataResidencyTestsBase`, + `RawSqlConventionTestsBase`, `ClockReadTestsBase`). +- One extension point, `IArchitectureMap`, that most base classes are parameterized by, with a shipped + `ArchitectureMapBase` that implements it so a per-repo map is a flat declaration of assemblies. The + bases whose rule reads files rather than assemblies take only what that rule reads instead: + `FolderWidthTestsBase` a repo root, `ProtoContractTestsBase` a solution file and a list of `.proto` + paths. Each repo supplies exactly **one** map implementation that declares its own layer and module assemblies, and its arch-test classes shrink to thin sealed subclasses (three to ten lines) that @@ -113,7 +119,8 @@ the rule improves, every consumer inherits the improvement on the next package b also means no per-repo `ArchitectureTestHelper` duplication, and so none of the drift that four copies of a rule invite: exactly the kind of drift fitness functions are supposed to prevent. It is also a maintainability win -in its own right (rubric category 16): one rule evolves, all consumers inherit the fix. +in its own right (rubric category 34, which absorbs the former maintainability criteria): one rule +evolves, all consumers inherit the fix. A small honest detail: a few checks genuinely do not generalize, so they stay local. The `MMCA.Common.Grpc` boundary check and the `IMessageBus` / `IJwksProvider` placement checks live in @@ -151,6 +158,30 @@ This is also where the doubled enforcement lifts category 3 and category 34 into (Maturity 4) in the scorecard (Implementation 9 and 8, respectively): the rules that protect the architecture are the ones that fail the build, not the ones written in a doc. +### Two gates on what a method body may call + +The same shape reaches inside method bodies, where an assembly reference says nothing. Two bases hold +rules a reviewer is asked to remember on every PR and reliably forgets on one. + +**`RawSqlConventionTestsBase` (ADR-125).** Module code reaches SQL only through the parameterizing +APIs. The inherited fact, `ModuleCode_UsesParameterizedSqlOnly`, scans the `.cs` files of every mapped +module and fails on a call to `FromSqlRaw`, `SqlQueryRaw`, `ExecuteSqlRaw` or `ExecuteSqlRawAsync`, the +four EF members that take a plain string, so a value concatenated into the statement compiles and runs +instead of becoming a command parameter. The interpolated siblings and the framework's +`IRawSqlQueryExecutor` stay allowed. The scan is textual and says so: whole-line comments are skipped, +a match inside a string literal is a rare false positive, and an `AllowedFiles` list is the adoption +ratchet. It also fails closed, because a scan that finds no module directories to read is a failure +rather than a pass. MMCA.Store's subclass supplies its map and an empty allowlist. + +**`ClockReadTestsBase` (ADR-128).** Domain and Application code takes time as an input and never reads +the ambient clock. The rule reads IL through Mono.Cecil, not source, and fails on any call to +`DateTime.UtcNow`, `DateTime.Now`, `DateTime.Today`, `DateTimeOffset.UtcNow` or `DateTimeOffset.Now` in +the map's Domain and Application assemblies, lambdas and async state machines included. A business rule +that reads the clock itself cannot be driven by a test, so every expiry and cutoff it guards is either +untested or tested by sleeping. The framework's `BaseDomainEvent` occurrence stamp is the one built-in +exemption, and `AllowedClockReaders` takes any further entry as a reviewed type or member. MMCA.ADC's +subclass supplies its map and nothing else: no exemptions. + ### A convention becomes a test: twelve files per folder The clearest case for turning a convention into an executable rule is the one that reads least like @@ -220,7 +251,7 @@ against the previous generation is now wrong. Nothing in a single repository's b everything the change breaks lives in another process. The framework freezes both halves of that surface. `IntegrationEventContractTestsBase` -(`MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Contracts/IntegrationEventContractTestsBase.cs:11`) +(`MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Contracts/IntegrationEventContractTestsBase.cs:18`) pins every integration-event payload against a committed contract. `ProtoContractTestsBase` (`MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Contracts/ProtoContractTestsBase.cs:19`) does the same for the synchronous half, the gRPC protos, so a renumbered field, a retyped one, a renamed rpc @@ -231,18 +262,18 @@ The subclass is three declarations and one inherited `[Fact]`: the solution file (`:22`), the `.proto` files to pin as repo-root-relative paths (`:25`), and the committed snapshot itself (`:30`), with the fact at `:32-34`. The rule body, `ArchitectureRules.ProtoContractsMatchFrozenList` -(`MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Rules/Contracts/ArchitectureRules.Protos.cs:37`), resolves -the repo root (`:45`), re-reads the real files from the working tree, rebuilds the contract, and diffs it +(`MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Rules/Contracts/ArchitectureRules.Protos.cs:38`), resolves +the repo root (`:46`), re-reads the real files from the working tree, rebuilds the contract, and diffs it against the frozen list **in both directions**: a line present in the protos but not frozen, and a line -frozen but no longer present, are each a violation with its own prefix (`:67-70`). That is the same +frozen but no longer present, are each a violation with its own prefix (`:68-71`). That is the same both-directions discipline the navigation-doc gate uses below, aimed at a wire format instead of a table. What gets pinned is exactly what a peer can observe: the `package`, every rpc with its name, request and -response types and **both** streaming flags (`:198-208`), every message field with its name, declared -type, label and **number** (`:219-227`), and every enum value with its number (`:211-217`). Nested +response types and **both** streaming flags (`:199-209`), every message field with its name, declared +type, label and **number** (`:220-228`), and every enum value with its number (`:212-218`). Nested messages and enums are qualified under their parent, while a `oneof` contributes no name segment because -on the wire it does not (`:182-184`). Deliberately not pinned: `syntax`, `import` and every `option`, -`csharp_namespace` included (`:27-31`). The line is drawn at "would a deployed peer notice." Pin the +on the wire it does not (`:183-185`). Deliberately not pinned: `syntax`, `import` and every `option`, +`csharp_namespace` included (`:28-31`). The line is drawn at "would a deployed peer notice." Pin the file-level options and a reordered import turns into a red build, which is the fastest way to teach a team to regenerate the snapshot without reading it. @@ -256,14 +287,14 @@ deliberately does not subclass. It drives the rule through a matched fixture pai and a deliberately drifted twin, which is the only way a repo can test a rule whose subject lives somewhere else: the clean file proves the parser accepts a real contract, and the drifted one proves the rule actually fails, reporting both sides of a renumbered field -(`MMCA.Common/Tests/Architecture/MMCA.Common.Architecture.Tests/ProtoContractFitnessTests.cs:52-64`) and +(`MMCA.Common/Tests/Architecture/MMCA.Common.Architecture.Tests/Contracts/ProtoContractFitnessTests.cs:52-64`) and naming a missing file explicitly rather than silently pinning an empty contract (`:76-87`). Two honest costs. The frozen list is another committed baseline, the same obligation as the performance baseline further down: an intended contract change means regenerating the snapshot by printing `ArchitectureRules.BuildProtoContract(...)` for the same files, coordinating the peer rollout, and -committing the new list in that same change, never editing one line to turn a red test green. Both -consumer files say precisely that in a comment above the list +committing the new list in that same change, never editing one line to turn a red test green. MMCA.Store's +file says precisely that in a comment above its list (`MMCA.Store/Tests/Architecture/MMCA.Store.Architecture.Tests/Contracts/ProtoContractTests.cs:21-24`). And the unpinned options are not entirely harmless: changing `csharp_namespace` breaks the generated client code in every consumer while the wire stays byte-identical, and this gate passes it. The rule protects the @@ -316,26 +347,31 @@ nothing compares the two files. `ObservabilityConventionTestsBase` ships in the same `MMCA.Common.Testing.Architecture` package and turns the pairing into a build failure (ADR-062). -It fails in three distinct ways. An SLO alert declared in the consumer's Bicep template with no `###` +It always fails in three distinct ways. An SLO alert declared in the consumer's Bicep template with no `###` section in `infra/OPERATIONS.md` whose heading carries the matching `-alert-` infix is a violation, and so is a heading that does carry the key but not the alert's current severity as -`(sev N)` (`:64-84`), which means re-tiering an alert without moving its triage steps is a red build +`(sev N)` (`:89-115`), which means re-tiering an alert without moving its triage steps is a red build rather than a surprise at 3am. In the other direction, an orphan runbook section whose alert the -template no longer provisions is a violation too (`:92-103`). And discovering fewer than -`MinimumAlertSpecs` specs, default 3 (`:39`), is itself a failure (`:54-60`). +template no longer provisions is a violation too (`:117-129`). And discovering fewer than +`MinimumAlertSpecs` specs, default 3 (`:39`), is itself a failure (`:79-87`). A fourth fact is opt-in: +a subclass that sets `RequireWorkbook` (off by default, `:58`) also fails unless the template declares +an Azure Monitor workbook or a portal dashboard, so the signals the alerts fire on have somewhere an +operator can look at them (`:65-77`). -That third rule is the same fail-closed property the forms floor and the cost gate below both rely +That floor rule is the same fail-closed property the forms floor and the cost gate below both rely on, and it earns its keep here more than anywhere: discovery parses the template between two literal -anchors, `var sloAlertSpecs` and `resource sloAlerts` (`:109-114`), and a rename would otherwise leave +anchors, `var sloAlertSpecs` and `resource sloAlerts` (`:135-138`), and a rename would otherwise leave a gate that pairs zero alerts against zero runbook sections and reports success. A key count that -disagrees with the severity count fails for the same reason (`:117`). +disagrees with the severity count fails for the same reason (`:143`). Adoption is the shape the rest of this tier already uses. MMCA.ADC and MMCA.Store each embed their real `infra/main.bicep` and `infra/OPERATIONS.md` as manifest resources (`MMCA.ADC/Tests/Architecture/MMCA.ADC.Architecture.Tests/MMCA.ADC.Architecture.Tests.csproj:17-22`) -and declare a subclass whose only body is a raised floor, `protected override int MinimumAlertSpecs -=> 4;`, because each repo provisions four specs -(`MMCA.ADC/Tests/Architecture/MMCA.ADC.Architecture.Tests/Governance/ObservabilityConventionTests.cs:13`). +and declare a subclass whose only body is a raised floor matching the specs that repo provisions: +MMCA.Store's `protected override int MinimumAlertSpecs => 4;` +(`MMCA.Store/Tests/Architecture/MMCA.Store.Architecture.Tests/Governance/ObservabilityConventionTests.cs:13`), +and MMCA.ADC's `=> 5`, the four request and resilience SLOs plus the AI scoring token ceiling +(`MMCA.ADC/Tests/Architecture/MMCA.ADC.Architecture.Tests/Governance/ObservabilityConventionTests.cs:14`). Leaving the shipped default of 3 in place would let the gate pass on three discovered specs if the parse anchors ever drifted, which is the vacuity trap one level up. The base reads those resources from `ResourceAssembly`, which defaults to the *derived* type's assembly @@ -421,13 +457,12 @@ Fitness functions are not free, and the scorecard does not pretend otherwise. the ceilings and exactly one ratio floor across the eight benchmarks, and the honest claim is that it catches collapses and new allocations, not creep. Nothing but review stops someone raising a ceiling to turn a red gate green. -- **Prose masquerading as enforcement is the real trap.** The framework's own backlog records the - failure mode in its own history: a blanket dependency update reintroduced the known-bad MassTransit - v9, and the response at the time was a comment, not a rule. Only the `DependencyVersionTests` gate - described above made a repeat impossible. The counterpart is instructive too: the last misleading - "MassTransit will retry" comment in that family was not retired by a gate but by somebody running a - repo-wide search and recording that it returned zero matches. A fitness-function culture must be - ruthless that a comment describing a check is not a check. +- **Prose masquerading as enforcement is the real trap.** A version pin held only by a comment is + exactly what a blanket dependency update walks straight through, and the known-bad MassTransit v9 is + the case in point. The `DependencyVersionTests` gate described above turns the licensing-driven v8 pin + into a build failure, and that gate, not the comment, is what lets the scorecard record that the + "blanket update reintroduces known-bad dependency" red flag cannot recur. A fitness-function culture + must be ruthless that a comment describing a check is not a check. - **Two gates mean two places to update.** Add a layer rule and you maintain both the MSBuild target and the NetArchTest suite. That is the cost of catching both direct and transitive violations, and the contributor doc calls it out so nobody forgets the second one. @@ -458,7 +493,8 @@ hope is not an architecture.** If a rule matters, make it fail the build. twice (compile-time MSBuild plus runtime NetArchTest), how the rule bodies live once in `MMCA.Common.Testing.Architecture` and run identically across four repos via `IArchitectureMap`, the three rule families that matter most (`LayerDependencyTests`, `DomainPurityTests`, -`MicroserviceExtractionTests`), how a folder-width rule turns a layout convention into a build failure +`MicroserviceExtractionTests`), two gates on what a method body may call (raw-string SQL and the +ambient clock), how a folder-width rule turns a layout convention into a build failure and a residency gate turns a published privacy claim into one, how a committed `.proto` snapshot freezes the gRPC wire contract in both directions, how the same package pairs every provisioned SLO alert to a @@ -469,182 +505,139 @@ enforce what you write a rule for. **Next in the series:** the test pyramid behind these fitness functions, roughly 2,254 fast tests with no Docker and no database. -*MMCA.Common is Apache-2.0 licensed and open source. Star the repo, read the Architecture Enforcement section +*MMCA.Common is Apache-2.0 licensed and open source. Star the repo, read the Architecture section of the contributor guide, or add one NetArchTest rule to your own codebase this week and watch it catch something.* - ⭐ Repo: `https://github.com/ivanball/MMCA.Common` -- 📄 The package table (`README.md`) and the Architecture Enforcement section (`CLAUDE.md`) are in the +- 📄 The fitness counts (`FACTS.md`) and the Architecture section (`AGENTS.md`) are in the repo. *Tags: Software Architecture, .NET, C Sharp, Testing, Clean Architecture* -*Notes: every anchor below was re-opened and read on 2026-09-19 against MMCA.Common v1.205.0; nothing is carried -forward. Counts come from the CI-gated `MMCA.Common/FACTS.md` ("As of: 2026-09-17 (framework v1.205.0)" at `:4`, -"Current: v1.205.0" at `:14`): 136 test methods across 53 abstract `*TestsBase` classes (`:48`), of which -MMCA.Common's own build executes 267 (`:51`), and `MMCA.Common.Testing.Architecture` is package 15 of the 19 -published (`FACTS.md:19` for the count, `:36` for its position in the numbered list). The earlier -"FACTS.md wins over a stale scorecard" paragraph is dropped because the two now agree: row 14 Testability & Test -Strategy restates "136 methods across 53 abstract bases (ADR-015) ... Common's own build executes 267, per -FACTS.md" (`Website/docs-src/governance/common-ArchitectureScorecard.md:94`), and that same row is the source for -the next-article pyramid figure, "~2,254 [Fact]/[Theory]" (`:94`); the older 262-file count has no current source -and is dropped rather than restated. Scorecard indices are Maturity 97.0% (318/328) at `:120` and Implementation -86.0% (705/820) at `:121`, set by the thirty-sixth-wave full re-score (2026-09-19, v1.205.0, `:5`); row N now sits -at line 80+N, so §3 Clean Architecture is `:83` (Maturity 4 / Implementation 9, "domain verified framework-free"), -§4 Domain-Driven Design `:84` (the `AggregateConventionTests` gate pinning `Create` to `Result`), §5 Vertical -Slice Architecture `:85` (slice cohesion "machine-enforced" by `SliceCohesionTestsBase`), §16 Maintainability -`:96`, §26 Front-End Security `:106`, §32 `:112` (the ADR-016 fitness function behind the dependency pin) and §34 -Architecture Governance & Docs `:114` (Maturity 4 / Implementation 8, "Strong, not Exemplary"). -The four-codebase correction this pass: MMCA.Helpdesk consumes the same package and supplies -`HelpdeskArchitectureMap : ArchitectureMapBase`, whose own summary states that "the layering, module-isolation, -and transport-at-edges rules run identically here (ADR-015)" -(`MMCA.Helpdesk/Tests/Architecture/MMCA.Helpdesk.Architecture.Tests/HelpdeskArchitectureMap.cs:4-8`), alongside -`ArchitectureTests`, `FolderWidthTests`, `ContractImplementationTests`, `ServiceContractPurityTests`, -`DecoratorPipelineOrderTests`, `MiddlewarePipelineOrderTests`, `AnonymousEndpointTests` and -`DeleteBehaviorConventionTests` in that same folder, so the subtitle, the "identical everywhere" section and the -closing summary all read four codebases rather than three. `AdcArchitectureMap` and `StoreArchitectureMap` were -read this pass through their consumers rather than by line anchor -(`MMCA.ADC/Tests/Architecture/MMCA.ADC.Architecture.Tests/Governance/DataResidencyTests.cs:14`, -`MMCA.Store/Tests/Architecture/MMCA.Store.Architecture.Tests/Governance/DataResidencyTests.cs:14`), so the prior -`:8` anchors on the map files are dropped rather than repeated unverified. The `DomainPurityTests` ban list is -`ArchitectureRules.ForbiddenDomainDependencies`, TEN entries and no `Stripe` among them: Microsoft.AspNetCore, -Microsoft.EntityFrameworkCore, Serilog, AutoMapper, Newtonsoft.Json, FluentValidation, Scrutor, MudBlazor, Polly, -StackExchange.Redis -(`MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Rules/Layering/ArchitectureRules.Purity.cs:9-21`, -its "repos may extend this via the extra parameter (e.g. a payment SDK or a broker client)" remark at `:5-8`), -applied by `DomainIsFrameworkFree` as a NetArchTest `HaveDependencyOnAny` assertion per Domain assembly (`:23-36`) -with the sibling `SharedIsFrameworkFree` at `:38`; `Stripe` is gone from the list and the article's ban sentence -was corrected accordingly. Every rule and base file moved into an area subfolder since the last pass, so all -package-internal anchors were rewritten: `Bases/Contracts/ProtoContractTestsBase.cs`, -`Bases/Contracts/IntegrationEventContractTestsBase.cs`, `Bases/Governance/ObservabilityConventionTestsBase.cs`, -`Bases/Governance/FolderWidthTestsBase.cs`, `Bases/Governance/DataResidencyTestsBase.cs`, -`Bases/Layering/DomainPurityTestsBase.cs`, `Bases/Ui/FormsConventionTestsBase.cs`, -`Rules/Contracts/ArchitectureRules.Protos.cs` and `Rules/Layering/ArchitectureRules.Purity.cs`; the line numbers -inside each file still hold. Added this pass, subsection "A convention becomes a test: twelve files per folder", -grounded in `Website/docs-src/adr/109-feature-by-folder-convention.md` (Accepted 2026-09-03, folder inventory -refreshed 2026-09-19) and read in source: `FolderWidthTestsBase` is declared at -`MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Governance/FolderWidthTestsBase.cs:14`, with -`MaxDirectFiles` defaulting to 12 (`:23`), `RepoRoot` abstract (`:20`), `ExemptFolderSuffixes` defaulting to empty -(`:29`) and the single inherited `[Fact] Folders_stay_narrow` delegating to -`ArchitectureRules.FoldersStayNarrow(RepoRoot, MaxDirectFiles, ExemptFolderSuffixes)` (`:31-33`); the counting -rules (a `.razor` component and its code-behind count as one unit, resource and generated files do not count, and -`bin`, `obj`, `Migrations`, `Platforms`, `Resources`, `wwwroot` are skipped outright) are the base's own summary -(`:3-13`), restated as decision points 5 and 6 of ADR-109, which also records that all four repos subclass it and -that only MMCA.Common overrides `ExemptFolderSuffixes` (109:66-76). The Helpdesk subclass in the code block is -verbatim (`MMCA.Helpdesk/Tests/Architecture/MMCA.Helpdesk.Architecture.Tests/FolderWidthTests.cs:8-11`), and the -sibling subclasses are `MMCA.Common/Tests/Architecture/MMCA.Common.Architecture.Tests/Governance/FolderWidthTests.cs`, -`MMCA.ADC/Tests/Architecture/MMCA.ADC.Architecture.Tests/Governance/FolderWidthTests.cs` and -`MMCA.Store/Tests/Architecture/MMCA.Store.Architecture.Tests/Governance/FolderWidthTests.cs`. The module-name -sentence is ADR-109 decision point 8: `ModuleNameConventions.GetModuleName` derives the owning module from the -namespace by taking the segment before the first layer segment -(`MMCA.Common/Source/Core/MMCA.Common.Shared/Conventions/ModuleNameConventions.cs:38-51`) and that derived name is -the SQL Server schema (109:105-110). Also added this pass, subsection "The gate that reads a privacy policy", -grounded in `Website/docs-src/adr/105-data-residency-build-gate.md` (Accepted 2026-09-01) and read in source: -`DataResidencyTestsBase` is declared at -`MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Governance/DataResidencyTestsBase.cs:14` with -the abstract `Map` (`:16`), the `ForbiddenResidencyClaims` default (`:23`), the inherited `[Fact] -PrivacyPolicy_DataStorageRegion_MatchesDeployedRegion` (`:26`) that resolves the repo root through -`ArchitectureMapBase.FindRepoRoot` (`:28`), reads `PRIVACY.md` (`:34`) and asserts it contains the parsed region -(`:37-38`) before rejecting each forbidden claim (`:40-44`), the abstract `ExtractDeployedRegion` hook (`:53`) and -the whitespace-insensitive, case-insensitive `Normalize` (`:55-58`). Only the two deployed apps subclass it, which -is the scope ADR-105 states ("Both deployed apps publish a privacy policy at their repo root", 105:7-8): MMCA.ADC -parses the `SQL_LOCATION_OVERRIDE` default out of `.github/workflows/deploy.yml` and blocks the stale "central -United States" claim -(`MMCA.ADC/Tests/Architecture/MMCA.ADC.Architecture.Tests/Governance/DataResidencyTests.cs:12,16,20-30`), and -MMCA.Store parses the "one region (" sentence in `infra/DISASTER-RECOVERY.md` and forbids "West US 2" and "East US -2" from being copied in from a sibling repo -(`MMCA.Store/Tests/Architecture/MMCA.Store.Architecture.Tests/Governance/DataResidencyTests.cs:12,16,20-25`). -The documentation-as-contract section: the quoted `because:` strings are verbatim from -`MMCA.Common/Tests/Architecture/MMCA.Common.Architecture.Tests/Ui/NavigationContractTests.cs:40` and `:42`, inside -the fact declared at `:31`, and the auth-posture sibling is -`EveryDocumentedAuthPosture_MatchesTheRouteAttributeReality` (`:46`, its assertion at `:78`). The forms gate is -`MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Ui/FormsConventionTestsBase.cs`: -`AdminCreateForms_KeepUnsavedChangesGuardAndValidation` (`:38`), the `MinimumCreateForms` vacuity floor with its -"so the convention is actually verified" rationale (`:50-51`), and the violation assertion naming -`UnsavedChangesGuard`, a live `IsDirtyAccessor`, dirty tracking and a validated `MudForm` under rubric §24 -(`:66-67`). Verified names this pass: `MMCA.Common.LayerEnforcement.targets`, -`Tests/Architecture/MMCA.Common.Architecture.Tests`, NetArchTest.eNhancedEdition, -`MMCA.Common.Testing.Architecture`, `ArchitectureRules`, `IArchitectureMap`, `ArchitectureMapBase`, -`CommonArchitectureMap`, `AdcArchitectureMap`, `StoreArchitectureMap`, `HelpdeskArchitectureMap`, -`LayerDependencyTests(Base)`, `DomainPurityTests(Base)`, `MicroserviceExtractionTests(Base)`, -`PiiConventionTestsBase`, `FolderWidthTests(Base)`, `DataResidencyTests(Base)`, `FrameworkSanityTests`, -`DependencyVersionTests`, `ProtoContractTests(Base)`, `IntegrationEventContractTestsBase`, -`ObservabilityConventionTests(Base)`, `FormsConventionTestsBase`, `SliceCohesionTestsBase`, -`AggregateConventionTests`, `ModuleNameConventions`. The wire-freeze section: -`Bases/Contracts/ProtoContractTestsBase.cs` declares the base at `:19` with `SolutionFileName` (`:22`), -`ProtoFiles` (`:25`), `FrozenProtoContracts` (`:30`) and its single `[Fact] -ProtoContracts_ShouldMatch_TheFrozenSnapshot` (`:32-34`); the "regenerate deliberately, never edit to make a red -test go green" instruction is the base's own remark (`:13-16`), which also states that MMCA.Common ships no -`.proto` and does not subclass (`:9-11`). The rule body is -`Rules/Contracts/ArchitectureRules.Protos.cs`: `ProtoContractsMatchFrozenList` (`:37`) resolving the repo root -(`:45`), the two-direction diff (`:67-70`), rpcs with both streaming flags (`:198-208`), fields with label, type -and number (`:219-227`), enum values with numbers (`:211-217`), the transparent `oneof` (`:182-184`) and the -deliberately unpinned `syntax`/`import`/`option` set including `csharp_namespace` (`:27-31`). The async -counterpart is `Bases/Contracts/IntegrationEventContractTestsBase.cs:11`. Consumer wiring read in both repos: -MMCA.ADC pins seven protos from its four `*.Contracts` projects -(`MMCA.ADC/Tests/Architecture/MMCA.ADC.Architecture.Tests/Contracts/ProtoContractTests.cs:3,9-18`) against a -frozen list starting at `:20`, and MMCA.Store pins FOUR, corrected this pass from three -(`MMCA.Store/Tests/Architecture/MMCA.Store.Architecture.Tests/Contracts/ProtoContractTests.cs:13-19`: -product_variants.proto, user_catalog_export.proto, customer_service.proto and user_sales_export.proto), with the -regenerate-deliberately comment above its list now at `:21-24`. The framework's fixture-pair exercise is -`MMCA.Common/Tests/Architecture/MMCA.Common.Architecture.Tests/ProtoContractFitnessTests.cs:14`, the -renumbered-field case (`:52-64`) and the explicit missing-file case (`:76-87`). The ADR framing is ADR-015's -Revision (2026-08-18) at `Website/docs-src/adr/015-architecture-fitness-functions.md:240-284`. The alert-runbook -section: `Bases/Governance/ObservabilityConventionTestsBase.cs` declares the base at `:30`, the -`MinimumAlertSpecs` floor of 3 at `:39` asserted by `SloAlertSpecs_AreDiscovered_GateIsNotVacuous` (`:54-60`), the -missing-section and wrong-severity violations in `EveryProvisionedSloAlert_HasASeverityCorrectRunbookSection` -(`:64-84`, the `-alert-` infix constant at `:32`), the orphan direction in -`EveryRunbookAlertSection_MapsToAProvisionedAlert` (`:92-103`), the literal parse anchors `var sloAlertSpecs` / -`resource sloAlerts` (`:109-114`), the key-count-versus-severity-count assertion (`:117`) and `ResourceAssembly` -defaulting to the derived type's assembly (`:51`). The "body-less subclass" claim is corrected this pass: neither -consumer subclass is body-less, both raise the floor with `protected override int MinimumAlertSpecs => 4;` because -each repo declares four specs, and both files moved into `Governance/` -(`MMCA.ADC/Tests/Architecture/MMCA.ADC.Architecture.Tests/Governance/ObservabilityConventionTests.cs:7,13` and -`MMCA.Store/Tests/Architecture/MMCA.Store.Architecture.Tests/Governance/ObservabilityConventionTests.cs:7,13`, -each carrying the same "leaving the default here would let the gate pass vacuously" comment at `:9-12`); the -embedded `infra.main.bicep` / `infra.OPERATIONS.md` pair is at -`MMCA.ADC/Tests/Architecture/MMCA.ADC.Architecture.Tests/MMCA.ADC.Architecture.Tests.csproj:17-22`. MMCA.Helpdesk -declares no observability subclass in its architecture-test project (directory listing read this pass); the -earlier "has no Bicep at all" half of that sentence was not re-verified this pass and is dropped rather than -repeated. The text-gate limit is ADR-062's own trade-off, -"It is a text gate over IaC, not a check against deployed state ... It proves the two files agree; it does not -prove the deployment ran, the rule exists in Azure, or the KQL is valid" -(`Website/docs-src/adr/062-slo-alerting-as-code.md:272-274`, the floor-keeps-a-text-gate-honest bullet at `:264`). -The cost gate: the CI job is `performance-smoke` (`MMCA.Common/.github/workflows/ci.yml:377`) named `Performance -gate (BenchmarkDotNet Short + baseline verify)` (`:378`) with `timeout-minutes: 15` (`:381`); the measure step -runs `--filter "*" --job Short --exporters json` (`:410`) with its non-interactive-filter and -3-warmup/3-iteration rationale in the comment above it (`:408`), and the `build/perfgate` verify step is `:419` -(every anchor in this paragraph shifted by roughly +45 lines since the last pass). The checker is -`MMCA.Common/build/perfgate/Program.cs`: strict allocation comparison (`:67-70`), the ratio floor computed as -`mean(slow)/mean(fast)` (`:88-91`), and the vacuity failures, a rule naming a benchmark missing from the results -(`:59-62`), a benchmark reporting no allocation data (`:63-66`), either side of a ratio floor missing (`:82-86`) -and an empty results directory (`:29-33`). The baseline is `MMCA.Common/Tests/Performance/perf-baseline.json`: -eight `allocationCeilingsBytes` entries (`:3-12`) and one ratio floor, `IsSatisfiedBy_RecompileEachCall` over -`IsSatisfiedBy_CachedCompile` at `minRatio` 1000 (`:13-19`), with the roughly-25%-headroom, ~120,000x-measured and -update-in-the-same-PR statements in its header comment (`:2`). The -"useless for spotting a five-percent slowdown" characterization is ADR-060's own, "The Short job cannot see small -latency regressions" (`Website/docs-src/adr/060-performance-regression-gate.md:143-145`, the exact phrase at -`:145`; note that ADR's own `ci.yml:332-333` anchor at `:36` is stale and was not used as a source here). The -deployed apps' k6 artifact was re-read for MMCA.ADC only: `Load Test (k6)` -(`MMCA.ADC/.github/workflows/load-test.yml:1`) on `workflow_dispatch` (`:14`) plus a monthly -`cron: "0 6 1 * *"` (`:23`); the parallel MMCA.Store workflow was not re-opened this pass, so the scope note names -MMCA.ADC only, and the earlier "MMCA.ADC and MMCA.Store have no benchmark suite / MMCA.Helpdesk has neither" -glob result was not re-run and is dropped. The trade-offs bullet on prose masquerading as enforcement is -regrounded on the still-open §16 Maintainability entry recording that a blanket NuGet update reintroduced -known-bad MassTransit v9 and was "fixed by a comment, not a rule" -(`Website/docs-src/governance/common-RemediationBacklog.md:1611`), with the struck-through counterpart, the -retired "MassTransit will retry" comment whose repo-wide search "returns zero matches ... verified 2026-08-14", at -`:1597`. The Article 35 pointer rests on ADR-015's stated boundary, that the tests assert "structure / -registration", not runtime behavior (`Website/docs-src/adr/015-architecture-fitness-functions.md:81`), and on -ADR-058 shipping the booted-host conformance bases in the `MMCA.Common.Testing` package -(`Website/docs-src/adr/058-runtime-conformance-suites-as-a-package.md:22-27`). The header moves to Group G28 and -its grounding onboarding file to `Website/docs-src/onboarding/group-28-testing-infrastructure.md:1`, the -testing-infrastructure chapter having been renumbered again (`group-27-common-ai-integration.md` now holds G27); -ADR-105 and ADR-109 are added to the Status block for the two new subsections. Correction to a note carried from a -prior pass: the direct `` in `Source/Core/MMCA.Common.Application/MMCA.Common.Application.csproj` -is `MiniProfiler.Shared` at `:21`, and `MiniProfiler.AspNetCore.Mvc` appears only in the comments at `:12` and -`:17` as the package deliberately NOT referenced, so the prior claim that it was a direct reference is retired. -Earlier coverage additions retained: the documentation-as-contract section (2026-07-27), the cost gate -(2026-07-28, ADR-060), the alert-runbook section (2026-08-01, ADR-062) and the wire-freeze section (2026-08-20, -ADR-015 Revision).* +*Notes: every anchor below was re-opened and read on 2026-10-02 against MMCA.Common v1.221.0; nothing is carried +forward unless it says so. Counts come from the CI-gated `MMCA.Common/FACTS.md` ("As of: 2026-10-02 (framework +v1.221.0)" at `:4`, "Current: v1.221.0" at `:14`): 141 test methods across 55 abstract `*TestsBase` classes +(`:51`), of which MMCA.Common's own build executes 339 (`:54`), and `MMCA.Common.Testing.Architecture` is package +18 of the 22 published (`FACTS.md:19` for the count, `:39` for its position in the numbered list); the body moves +from 15-of-19 and 136/53 to these figures this pass. FACTS still names the consuming repos as "Common, ADC, Store" +(`:53`), while the four-codebase reading rests on the Helpdesk map below. Scorecard row 14 Testability & Test +Strategy restates "141 methods across 55 abstract bases" (`Website/docs-src/governance/common-ArchitectureScorecard.md:78`) +but gives Common's executed count as 309, which disagrees with FACTS; the article states no executed count, and +FACTS (339) wins if one is ever added. The same row is the source for the next-article pyramid figure, "~2,254 +[Fact]/[Theory]" (`:78`). Scorecard indices: evidence as of 2026-10-01 at v1.218.0 (`:5`), Maturity 96.6% +(317/328) at `:9` and Implementation 86.0% (705/820) at `:10`; row N sits at line 64+N, so §3 Clean Architecture is +`:67` (Maturity 4 / Implementation 9, "domain verified framework-free"), §4 Domain-Driven Design `:68` (the +`AggregateConventionTests` gate pinning `Create` to `Result`), §5 Vertical Slice Architecture `:69` (slice +cohesion "machine-enforced" by `SliceCohesionTestsBase`), §25 Navigation & Information Architecture `:89`, §26 +Front-End Security `:90`, §32 Dependency & Supply-Chain `:96` (the ADR-016 fitness function turning the +MassTransit-v8 pin into a build gate "so the 'blanket update reintroduces known-bad dependency' red flag cannot +recur") and §34 Architecture Governance & Docs `:98` (Maturity 4 / Implementation 8). The "rubric category 16" +maintainability reference is corrected to §34: rubric v2 §16 is AI-Native Application Architecture +(`Website/docs-src/governance/ArchitectureEvaluationCriteria.md:469`, scorecard `:80`), and the former +Maintainability & Evolvability criteria live in §32, §33 and §34 (`:19`, §34 heading at `:890`, its "absorbs the +former §16" intent at `:892`). The two-gate grounding moves from `MMCA.Common/CLAUDE.md` (now only an `@AGENTS.md` +import stub, `CLAUDE.md:3`) to `MMCA.Common/AGENTS.md`: the `## Architecture` heading at `:64` and "Two enforcement +gates; add new rules in BOTH" with the MSBuild target and the NetArchTest tier at `:68-70`; the closing CTA follows +it, and the unverified README package table is replaced by FACTS. The "every base class is parameterized by +`IArchitectureMap`" sentence is narrowed to "most": `FolderWidthTestsBase` takes an abstract `RepoRoot` +(`Bases/Governance/FolderWidthTestsBase.cs:20`) and `ProtoContractTestsBase` a `SolutionFileName` and `ProtoFiles` +(`Bases/Contracts/ProtoContractTestsBase.cs:22`, `:25`). Added this pass, subsection "Two gates on what a method +body may call". ADR-125 (`Website/docs-src/adr/125-parameterized-sql-only.md`, Accepted 2026-09-19 at `:4`, the +"ban is a test" decision bullet at `:57`): `RawSqlConventionTestsBase` is declared at +`MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Cqrs/RawSqlConventionTestsBase.cs:31` with the +abstract `Map` (`:33`), `AllowedFiles` empty by default as the adoption ratchet (`:36-39`), the textual-scan limits +including the string-literal false positive (`:21-28`), the inherited `[Fact] ModuleCode_UsesParameterizedSqlOnly` +(`:65-66`) failing when no source directory is found (`:70-72`), whole-line `//` comments skipped (`:105`), and the +four banned members matched by `RawSqlAccessRegex` (`:115`); the interpolated siblings and `IRawSqlQueryExecutor` +staying allowed is the base's own summary (`:5-10`). MMCA.Store's subclass is +`MMCA.Store/Tests/Architecture/MMCA.Store.Architecture.Tests/Cqrs/RawSqlConventionTests.cs:12`, map at `:15`, empty +`AllowedFiles` at `:18`; ADC (`MMCA.ADC/Tests/Architecture/MMCA.ADC.Architecture.Tests/Cqrs/RawSqlConventionTests.cs:14`) +and Helpdesk (`MMCA.Helpdesk/Tests/Architecture/MMCA.Helpdesk.Architecture.Tests/ArchitectureTests.cs:191`) subclass +it too. ADR-128 (`Website/docs-src/adr/128-time-as-an-input.md`, Accepted 2026-10-01 at `:4`, "an IL-scanning +fitness test" at `:30`): `ClockReadTestsBase` is declared at +`MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Domain/ClockReadTestsBase.cs:15` with the abstract +`Map` (`:17`), `AllowedClockReaders` empty by default (`:24`, entries are type names, namespace prefixes or single +members, `:19-23`) and the single `[Fact] DomainAndApplication_ShouldNotReadTheAmbientClock` (`:26-28`) calling +`ArchitectureRules.DomainAndApplicationDoNotReadTheClock` +(`Rules/Domain/ArchitectureRules.ClockReads.cs:56`), whose five banned getters are at `:20-27`, whose +Mono.Cecil IL scan covering lambdas and async state machines is the remark at `:40-42`, whose built-in +`BaseDomainEvent` exemption is at `:14`, and which reads only the map's Domain and Application assemblies +(`:65-66`). MMCA.ADC's subclass is +`MMCA.ADC/Tests/Architecture/MMCA.ADC.Architecture.Tests/Domain/ClockReadTests.cs:8`, supplying +`AdcArchitectureMap` (`:10`) and no allowlist; MMCA.Store's +(`MMCA.Store/Tests/Architecture/MMCA.Store.Architecture.Tests/Domain/ClockReadTests.cs:9`) carries one reviewed +exemption per ADR-128 and is not described in the body. The four-codebase reading: MMCA.Helpdesk supplies +`HelpdeskArchitectureMap : ArchitectureMapBase` +(`MMCA.Helpdesk/Tests/Architecture/MMCA.Helpdesk.Architecture.Tests/HelpdeskArchitectureMap.cs:8`, confirmed by +this run's audit), alongside `ArchitectureTests`, `FolderWidthTests`, `ContractImplementationTests`, +`ServiceContractPurityTests`, `DecoratorPipelineOrderTests`, `MiddlewarePipelineOrderTests`, +`AnonymousEndpointTests`, `DeleteBehaviorConventionTests` and `TicketsExportScopeTests` in that same folder +(directory listing read this pass). The `DomainPurityTests` ten-entry ban list +(`Rules/Layering/ArchitectureRules.Purity.cs:9-21`), the `MicroserviceExtractionTests` MassTransit rule +(`Rules/Layering/ArchitectureRules.Transport.cs:13`; the base also bans Grpc and Protobuf, which the body +understates rather than contradicts), `FrameworkSanityTests` +(`MMCA.Common/Tests/Architecture/MMCA.Common.Architecture.Tests/Governance/FrameworkSanityTests.cs:21`), +`DependencyVersionTests` (`Governance/DependencyVersionTests.cs:9`), the LayerEnforcement import +(`MMCA.Common/Directory.Build.props:144`) and NetArchTest.eNhancedEdition +(`MMCA.Common.Architecture.Tests.csproj:38`) were confirmed by this run's audit at those anchors and not re-opened +here. Folder width: `FolderWidthTestsBase.cs:14` declares the base, `RepoRoot` abstract (`:20`), `MaxDirectFiles` +12 (`:23`), `ExemptFolderSuffixes` empty (`:29`), delegating to `ArchitectureRules.FoldersStayNarrow` (`:33`); ADR-109 +decision 6 records all four subclasses and the Common-only `ExemptFolderSuffixes` override (109:78-84) and the +schema point (109:110); `ModuleNameConventions.cs:38-51` confirmed by audit. Data residency: +`Bases/Governance/DataResidencyTestsBase.cs:14` with `Map` (`:16`), `ForbiddenResidencyClaims` (`:24`), the +inherited `[Fact]` (`:26`) resolving the repo root (`:29`), reading `PRIVACY.md` (`:35`), asserting the region +(`:38`) and rejecting each forbidden claim (`:40-43`), the abstract `ExtractDeployedRegion` (`:87`) and `Normalize` +(`:93`); the consumer parsing (ADC `deploy.yml` and "central United States", Store `infra/DISASTER-RECOVERY.md` +and the two ADC regions) was confirmed by this run's audit; ADR-105 scope at 105:7-8. Wire freeze: +`IntegrationEventContractTestsBase` moves from `:11` to `:18`; `ProtoContractTestsBase.cs:19`, `:22`, `:25`, `:30`, +`:32-34` hold; `Rules/Contracts/ArchitectureRules.Protos.cs` anchors all shift by one, method `:38`, repo root +`:46`, two-direction diff `:68-71`, rpc `:199-209`, enum `:212-218`, field `:220-228`, `oneof` `:183-185`, +unpinned set `:28-31`. The fixture pair moved into `Contracts/`: +`MMCA.Common/Tests/Architecture/MMCA.Common.Architecture.Tests/Contracts/ProtoContractFitnessTests.cs:14`, +renumbered field `:52-64`, missing file `:76-87`. The "both consumer files carry the regenerate comment" claim is +corrected to MMCA.Store only (`Contracts/ProtoContractTests.cs:21-24`); MMCA.ADC's `FrozenProtoContracts` at `:20` +has no comment above it (`:18-20` read). ADC and Store pin counts (`:9-18`, list `:20-97`; Store `:13-19`) +confirmed by audit. Alert runbooks: `Bases/Governance/ObservabilityConventionTestsBase.cs` declares the base at +`:30`, the `-alert-` infix at `:32`, `MinimumAlertSpecs` 3 at `:39`, `ResourceAssembly` at `:51`, the opt-in +`RequireWorkbook` (`:58`) and its fourth fact `MonitoringWorkbookOrDashboard_IsProvisioned_WhenRequired` +(`:65-77`, added to the body this pass so "three ways" now reads as the three always-on facts), +`SloAlertSpecs_AreDiscovered_GateIsNotVacuous` (`:79-87`), `EveryProvisionedSloAlert_HasASeverityCorrectRunbookSection` +(`:89-115`), `EveryRunbookAlertSection_MapsToAProvisionedAlert` (`:117-129`), the parse anchors (`:135-138`) and the +key-versus-severity count (`:143`). The consumer floors are corrected: MMCA.ADC raises it to 5 +(`MMCA.ADC/Tests/Architecture/MMCA.ADC.Architecture.Tests/Governance/ObservabilityConventionTests.cs:14`, reason at +`:9-13`), MMCA.Store to 4 (`MMCA.Store/Tests/Architecture/MMCA.Store.Architecture.Tests/Governance/ObservabilityConventionTests.cs:13`), +matching ADR-062 ("five on ADC, four on Store", `Website/docs-src/adr/062-slo-alerting-as-code.md:311`); the +embedded pair at `MMCA.ADC.Architecture.Tests.csproj:17-22` and Helpdesk's lack of an observability subclass +(directory listing above) hold. The text-gate limit is ADR-062's trade-off at `:292-293`, the floor bullet at +`:284`. Cost gate: `performance-smoke` (`MMCA.Common/.github/workflows/ci.yml:355`) named `Performance gate +(BenchmarkDotNet Short + baseline verify)` (`:356`), `timeout-minutes: 15` (`:359`), the Short-job rationale +comment (`:386`), the `--filter "*" --job Short` run (`:388`) and the `build/perfgate` step (`:397`), all about +22 lines earlier than the prior pass. `MMCA.Common/build/perfgate/Program.cs`: empty results directory (`:29-33`), +missing allocation benchmark (`:59-62`), no allocation data (`:63-66`), strict ceiling compare (`:67-70`), missing +ratio side (`:82-86`), ratio `mean(slow)/mean(fast)` and floor check (`:88-91`). `Tests/Performance/perf-baseline.json`: +header comment (`:2`), `allocationCeilingsBytes` (`:3-12`), the single `IsSatisfiedBy_RecompileEachCall` over +`IsSatisfiedBy_CachedCompile` floor at `minRatio` 1000 (`:13-19`). The five-percent characterization is ADR-060's +"The Short job cannot see small latency regressions" (`Website/docs-src/adr/060-performance-regression-gate.md:159-161`). +`Load Test (k6)` (`MMCA.ADC/.github/workflows/load-test.yml:1`) on `workflow_dispatch` (`:14`) plus `cron: "0 6 1 * +*"` (`:23`). The trade-offs bullet on prose masquerading as enforcement is regrounded this pass on scorecard §32 +(`common-ArchitectureScorecard.md:96`): the prior anchors (`common-RemediationBacklog.md:1611`, `:1597`) no longer +exist after the backlog rewrite, and neither "fixed by a comment, not a rule" nor the retired "MassTransit will +retry" comment is findable in `docs-src/governance`, so the history sentence and the zero-matches counterpart are +removed rather than restated. The Article 35 pointer rests on ADR-015's "structure / registration" boundary +(`Website/docs-src/adr/015-architecture-fitness-functions.md:83`; Revision (2026-08-18) headings at `:91` and +`:268`) and on ADR-058 shipping the booted-host conformance bases in `MMCA.Common.Testing` +(`Website/docs-src/adr/058-runtime-conformance-suites-as-a-package.md:25`). The NavigationFlow `because:` strings +(`MMCA.Common/Tests/Architecture/MMCA.Common.Architecture.Tests/Ui/NavigationContractTests.cs:40`, `:42`, auth +posture `:46` and `:78`) and `FormsConventionTestsBase` (`Bases/Ui/FormsConventionTestsBase.cs:38`, floor `:50-51`, +assertion `:66-67`) were confirmed by this run's audit. The header moves from Group G28 (which the taxonomy assigns +to Common AI Integration) to G25 Testing & Quality Infrastructure, whose chapter file is still +`group-28-testing-infrastructure.md` (`Website/docs-src/onboarding/00-group-taxonomy.md:83`, the G28 row +at `:82`), and ADR-125 and +ADR-128 join the Status block. Correction to a note carried from a prior pass: `MiniProfiler.Shared` is the direct +`` at `Source/Core/MMCA.Common.Application/MMCA.Common.Application.csproj:23`, with +`MiniProfiler.AspNetCore.Mvc` named only in the comments at `:14` and `:19`. Earlier coverage additions retained: +the documentation-as-contract section (2026-07-27), the cost gate (2026-07-28, ADR-060), the alert-runbook section +(2026-08-01, ADR-062), the wire-freeze section (2026-08-20, ADR-015 Revision), the folder-width and residency +subsections (2026-09-19, ADR-109 and ADR-105).* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/aspire-one-command.md b/docs-src/articles/aspire-one-command.md index 707fa6c0..cd5355fd 100644 --- a/docs-src/articles/aspire-one-command.md +++ b/docs-src/articles/aspire-one-command.md @@ -1,8 +1,9 @@ # Aspire: one command brings up the whole distributed app > Series: MMCA.Common · Article #31 (tutorial) · Pillar P2/P5 · Group G16 · Rubric §13,§33 · ADR-023/025/041/070 · -> Status: grounded in `MMCA.Common/CLAUDE.md` ("Aspire Package" and the microservices extraction section), -> `Website/docs-src/onboarding/devops-aspire.md`, and `Website/docs-src/onboarding/group-16-aspire-orchestration.md`. +> Status: grounded in `MMCA.Common/AGENTS.md` (the "Aspire package" bullet and the "Microservices Extraction +> Boundaries" section), `Website/docs-src/onboarding/devops-aspire.md`, and +> `Website/docs-src/onboarding/group-16-aspire-orchestration.md`. > No em dashes. **Subtitle:** Four service processes, four databases, a broker, a cache, a mail interceptor, and a @@ -72,8 +73,8 @@ single source of truth for the local topology. > control-plane init. Run it interactively in a terminal you can watch. Once it is up, the dashboard (the URL is printed in the console) is your control panel: every resource, -its health, its logs, its traces, and links to the RabbitMQ management UI (`http://localhost:15672`) -and the MailDev inbox (`http://localhost:1080`). +its health, its logs, its traces, and the endpoint links for the RabbitMQ management UI and the MailDev +inbox (`http://localhost:1080`). ## Step 2: understand what `AddServiceDefaults()` configured @@ -93,13 +94,14 @@ because it lives in the framework, versioned in lockstep, with no per-app copy t three things you would otherwise hand-roll: 1. **OpenTelemetry** for logging, metrics, and tracing. Logs include the formatted message and scopes; - metrics always cover ASP.NET Core, and cover `HttpClient` and the .NET runtime unless a host turns - those cost knobs off (Step 6); tracing instruments ASP.NET Core and `HttpClient` and subscribes + metrics cover ASP.NET Core, `HttpClient`, and the .NET runtime unless a host turns those cost knobs + off (Step 6); tracing instruments ASP.NET Core and `HttpClient` and subscribes four activity sources: the application's own, `MMCA.Common.Outbox`, `MMCA.Common.InternalCommands`, and `MMCA.Common.AI`. It also registers nine MMCA-specific meters by literal name: `MMCA.Common.Outbox` (a dead-letter counter, a processed counter, a dispatch-lag - histogram, and a pending-depth gauge), `MMCA.Common.Cqrs` (RED histograms for command and query - handlers, plus query cache hit and miss), `MMCA.Common.Idempotency` (the idempotency filter's + histogram, a pending-depth gauge, and an oldest-pending-age gauge), `MMCA.Common.Cqrs` (RED + histograms for command and query handlers, query cache hit and miss counters, and the + authorization-denied and timeout counters), `MMCA.Common.Idempotency` (the idempotency filter's replay, conflict, and degraded counters), `MMCA.Common.Scheduler` (the recurring scheduler's run outcomes, duration, and schedule lag, inert in a host that never turns `Scheduler:Enabled` on), `MMCA.Common.Broker` (the broker transport's consumer faults plus outbox circuit-breaker openings, @@ -151,7 +153,7 @@ first authenticated request does not pay a cold connection on a CPU-throttled id The AppHost `Program.cs` does not start anything immediately. It builds a *resource model*: a graph of containers, databases, services, the gateway, and the UI, with their dependency edges. The cross-cutting -wiring vocabulary lives in `MMCA.Common.Aspire.Hosting` as twelve fluent helpers (thirteen methods, +wiring vocabulary lives in `MMCA.Common.Aspire.Hosting` as thirteen fluent helpers (fourteen methods, because `WithBroker` has one overload per broker resource). Here is the shape of a service declaration (representative, condensed from ADC's AppHost): @@ -182,13 +184,18 @@ What each framework helper does: - **`WithSQLServerDataSource(db, "Conference")`** is the AppHost face of database-per-service (ADR-006). (The package also ships `WithPostgreSQLDataSource`, `WithCosmosDataSource`, and `WithSqliteDataSource` for the polyglot engines in ADR-018.) In one - chain it references the database, waits for it to be healthy, and injects exactly one - connection-string environment variable, the multi-source routing layer's - `DataSources__Conference__SQLServerConnectionString`. That one entry is the whole configuration: + chain it references the database, waits for it to be healthy, and injects the multi-source routing + layer's connection-string environment variable, `DataSources__Conference__SQLServerConnectionString`. + That entry is what the framework's routing reads: with no top-level connection string, the single database a host declares this way also becomes its `Default` source, so the framework's own tables and the readiness health check land on it too, and each service runs as a clean single-database monolith with one change tracker and one migration set, while still owning its own `OutboxMessages` table. +- **`WithH2cHealthCheck()`** gives the AppHost its own health check on a service: a GET to a probe path + over the service's HTTP/2 cleartext endpoint, so a resource that waits on that service waits for a + verified answer. An endpoint name the resource never declares is not an error at wiring time; it + surfaces as a permanently unhealthy check, which keeps dependents waiting instead of letting them + start against a service nobody verified. ## Step 5: wire the extraction points (gRPC and JWKS) @@ -229,17 +236,19 @@ weakening any service (ADR-004 and ADR-008). There are a few more pieces worth knowing, because they shape what you see in the dashboard, and what you pay for it. Start with the noise. The `OutboxProcessor` background service polls every relational -outbox table on a recurring cycle (high in production, for example 300 seconds, to cut idle work). Each -idle poll would otherwise generate an `OutboxPoll` span, plus, under the Azure Monitor distro, a child -`SqlClient` dependency span. At scale, those idle spans would dominate ingestion and clutter the -dashboard. +outbox table on a recurring cycle (high in production, for example 300 seconds, to cut idle work), and +the `InternalCommandProcessor` polls every internal-command queue table the same way. Each idle poll +would otherwise generate a poll span, plus, under the Azure Monitor distro, a child `SqlClient` +dependency span. At scale, those idle spans would dominate ingestion and clutter the dashboard. `OutboxPollFilterProcessor` (in the Aspire package) is an OpenTelemetry `BaseProcessor` that -walks each ending span's parent chain and, for anything descended from the recurring `OutboxPoll` -activity, clears the `Recorded` flag so the batch exporters skip it. It is registered before the -exporters so its `OnEnd` runs first. Real per-message `OutboxProcess` spans use restored parent -contexts and are never poll descendants, so genuine outbox telemetry survives. The net effect: your -traces show real work, not idle polling, and your observability bill reflects that. +walks each ending span's parent chain and, for anything descended from a recurring poll activity +(`OutboxPoll` on the `MMCA.Common.Outbox` source, `InternalCommandPoll` on +`MMCA.Common.InternalCommands`), clears the `Recorded` flag so the batch exporters skip it. It is +registered before the exporters so its `OnEnd` runs first. Real per-message `OutboxProcess` spans and +per-command `InternalCommandExecute` spans use restored parent contexts and are never poll descendants, +so genuine outbox and internal-command telemetry survives. The net effect: your traces show real work, +not idle polling, and your observability bill reflects that. Idle polling is not the only chatter worth refusing. Health probes are the other, and they are bigger: Container Apps liveness and readiness probes, the gateway's downstream aggregate probes, YARP active @@ -249,12 +258,14 @@ calls to each backend's `/alive`) for most of the dependency rows. `Telemetry:Fi on by default, so `ProbeTelemetryFilter` refuses those request and outgoing spans at the instrumentation options and `ProbeTelemetryFilterProcessor` un-records the dependency children that were sampled independently. Metrics are left untouched on purpose, so probe traffic still shows up on -dashboards, just not in the trace bill. Three metric knobs sit next to it: -`Telemetry:DisableHttpClientMetrics` and `Telemetry:DisableRuntimeMetrics` each drop a whole meter -family through a View (a View, rather than simply skipping the instrumentation, because the Azure -Monitor distro adds those meters itself, which makes the toggle authoritative instead of advisory), and -`Telemetry:EnablePollyDurationMetrics` runs the other way: Polly's two duration histograms stay dropped -unless a host opts in, while its retry and circuit-breaker event counter always ships. +dashboards, just not in the trace bill. Four metric knobs sit next to it: +`Telemetry:DisableAspNetCoreMetrics`, `Telemetry:DisableHttpClientMetrics` and +`Telemetry:DisableRuntimeMetrics` each drop a whole meter family through a View (the ASP.NET Core one +matches every meter under the `Microsoft.AspNetCore.` prefix; a View, rather than simply skipping the +instrumentation, because the Azure Monitor distro adds those meters itself, which makes the toggle +authoritative instead of advisory), and `Telemetry:EnablePollyDurationMetrics` runs the other way: +Polly's two duration histograms stay dropped unless a host opts in, while its retry and circuit-breaker +event counter always ships. That filtering only matters because of where the telemetry actually flows, and the framework decides that by environment, not by code. `AddServiceDefaults()` enables the OTLP exporter when @@ -266,8 +277,9 @@ once, each shipping its own copy, so the same pipeline feeds the local dashboard code change between them. A dashboard is only as readable as the trail through it, and one id ties that trail together. -`CorrelationIdMiddleware` reads an `X-Correlation-ID` header off each request; when the client sends -none, it falls back to the current W3C trace id, then to ASP.NET Core's `TraceIdentifier`. It sets that +`CorrelationIdMiddleware` reads an `X-Correlation-ID` header off each request, cut to 64 characters (the +width of the persisted correlation columns); when the client sends none, it falls back to the current +W3C trace id, then to ASP.NET Core's `TraceIdentifier`. It sets that id on a scoped `ICorrelationContext` and echoes it on the response header, and the CQRS logging decorators stamp the same id into every log scope they open. So one id lines up a request's logs, its response header, and its distributed trace: the first thing you reach for when a call that crossed the @@ -290,9 +302,9 @@ hand-roll and drift on. First, **security headers at the host edge.** Instead of each host independently setting `X-Frame-Options`, `Referrer-Policy`, `Permissions-Policy`, HSTS, and a Content-Security-Policy (and slowly disagreeing as they do), the framework ships the pair a host wires in two lines. `AddCommonSecurityHeaders` binds the -`"SecurityHeaders"` config section and registers the default CSP provider; `UseCommonSecurityHeaders` -inserts the `SecurityHeadersMiddleware` into the pipeline. Call both and a new host inherits hardened -defaults automatically, with per-host overrides through that config section. +`"SecurityHeaders"` config section (when the host passes its configuration) and registers the default CSP +provider; `UseCommonSecurityHeaders` inserts the `SecurityHeadersMiddleware` into the pipeline. Call both +and a new host inherits hardened defaults automatically, with per-host overrides through that config section. The CSP comes from an `ICspPolicyProvider`: the framework ships a `StaticCspPolicyProvider`, and a host that needs a dynamic policy (the Blazor web host does) registers its own. The policy travels as a `CspPolicy(Value, Enforce)` record, so a provider can emit `Content-Security-Policy` to enforce, or @@ -313,7 +325,7 @@ first password-reset mail and an unparseable outbox interval becomes a backgroun both on a replica that already passed its readiness probe and is taking live traffic. Or at **boot**, where the host refuses to start and the platform never routes to it. The framework picks boot (ADR-070). -Every settings section binds through one chain, and it is textually the same everywhere: +The framework's validated settings sections bind through one shape of chain: ```csharp services.AddOptions() @@ -324,11 +336,17 @@ services.AddOptions() `ValidateOnStart()` is the load-bearing link. `ValidateDataAnnotations()` on its own defers evaluation to the first resolution, which for a section only a background service reads can be minutes after the replica -started taking traffic; pairing the two converts "configured wrong" into "did not start". Twenty-three -framework sections bind this way (connection strings, SMTP, persistence, outbox, login protection, password -reset, refresh sessions, message bus, JWKS, cache, query-cache pipeline, scheduler, two-factor, email -confirmation, permission grants, audit trail, tenancy, push notifications, internal commands, idempotency, -JWT, the UI's API settings, and the Blazor host's CSP settings), including the ones behind opt-in features. +started taking traffic; pairing the two converts "configured wrong" into "did not start". Thirty +framework sections bind with both links: the nineteen Infrastructure sections (connection strings, SMTP, +persistence, outbox, login protection, password reset, refresh sessions, message bus, JWKS, tenancy, cache, +query-cache pipeline, scheduler, audit trail, internal commands, two-factor, email confirmation, permission +grants, push notifications), plus idempotency, JWT, API rate limiting, the UI's API settings, UI rate +limiting, the Blazor circuit limit, the health-report cache, the gateway settings, gateway rate limiting, +and the optional AI package's settings and content policy, including the ones behind opt-in features. Two +of them, UI rate limiting and the Blazor circuit limit, bind through `BindConfiguration(...)` instead of +`Bind(GetSection(...))`. Two Blazor-host sections, the CSP settings and the same-origin API proxy settings, +call `ValidateOnStart()` without `ValidateDataAnnotations()` (the proxy section also runs a `PostConfigure` +that fills its gateway address from the API settings). The two sections every host needs, `ApplicationSettings` and `ModulesSettings`, bind on the identical chain inside the framework's module-host wiring, so a consuming app inherits them instead of repeating them and adds only its module-level sections, such as Store's Stripe configuration. @@ -339,14 +357,16 @@ conditionally on the selected algorithm: HS256 demands a secret of at least 32 c RSA private key. So a host configured for RS256 with no private key fails to boot rather than failing to sign its first token. -The second half of the contract is uniformity. A section binds in exactly one place, on that one chain, and -is read through `Microsoft.Extensions.Options` at the point of consumption, so there is no second path by -which an unvalidated section can reach a handler. The exceptions are deliberate and say so at the call site. +The second half of the contract is uniformity. A section binds in exactly one place and is read through +`Microsoft.Extensions.Options` at the point of consumption, so there is no second path by which an +unvalidated section can reach a handler. The exceptions are deliberate. `OwnerOrAdminFilterOptions` validates data annotations but skips `ValidateOnStart`, because its required `BypassRole` has no default the framework could know (the framework knows no role names), so validating it at startup would fail every host that never applies the filter; validating on first resolve puts the message -in front of the host that actually uses it. A small set of optional sections, the hybrid cache options, -native push, and file storage, binds without the validation chain for the same class of reason. +in front of the host that actually uses it, and the call site says so. A set of optional sections binds +without the validation chain: the hybrid cache options, native push, file storage, the cache-key prefix, the +host-edge security headers, and the UI's layout, read-cache and notification-bell options (where the call +site notes that an absent section leaves the compiled-in defaults). ## Trade-offs and gotchas, honestly @@ -361,8 +381,8 @@ A single-command stack is a force multiplier, but it has edges worth naming: Bus emulator in locally through `AddServiceBusEmulatorBroker`. That costs a second container and a warm-up, which is why the everyday inner loop still runs on RabbitMQ. - **MailDev is not a real SMTP relay.** The mail interceptor is a local convenience; production uses a - real relay and is not provisioned by Aspire. This is the one deliberate gap between local and cloud - topology. + real relay and is not provisioned by Aspire. Alongside the broker above, this is a deliberate gap + between local and cloud topology. - **Persistent containers keep state across runs.** Aspire marks SQL, Redis, and RabbitMQ as persistent so you are not re-seeding on every restart. That is a feature, but it also means stale local data can outlive a schema change; reset the container when a migration changes shape. @@ -404,13 +424,13 @@ resilience at 30s/60s/90s); what `MapDefaultEndpoints()` exposes (`/health`, `/a `/health/ready`); how the AppHost wires the broker, per-service databases, gRPC references, and JWKS discovery through the `MMCA.Common.Aspire.Hosting` helpers; how `OutboxPollFilterProcessor` and the probe-telemetry filter keep idle poll spans and health-probe traffic out of telemetry while -`Telemetry:TracesSampleRatio` and the three metric knobs cap ingestion cost with fail-safe defaults; +`Telemetry:TracesSampleRatio` and the four metric knobs cap ingestion cost with fail-safe defaults; how `CorrelationIdMiddleware` ties a request's logs to its trace and the dual OTLP plus Azure Monitor exporters feed the local dashboard and workspace-based Application Insights; how `AddCommonSecurityHeaders` plus `UseCommonSecurityHeaders` and a tuned `SocketsHttpHandler` harden responses and reuse connections from the same shared baseline; and how the fail-fast configuration -contract binds every settings section with `ValidateDataAnnotations().ValidateOnStart()` so a -misconfigured host refuses to boot instead of failing on its first request. +contract binds the framework's settings sections with `ValidateOnStart()` so a misconfigured host +refuses to boot instead of failing on its first request. **Next in the series:** extracting a module out of the monolith into its own gRPC service, live, using the AppHost wiring you just met. @@ -422,111 +442,90 @@ the AppHost wiring you just met. *Tags: .NET, C Sharp, Microservices, DevOps, Observability* -*Notes: re-verified against source on 2026-09-19 (MMCA.Common v1.205.0; every anchor below re-read this -run, and every anchor from the 2026-08-19 pass had moved). Baseline: `AddServiceDefaults` -(`Source/Hosting/MMCA.Common.Aspire/Extensions.cs:87`) calls `ConfigureOpenTelemetry` (`:89`, defined `:170`): -OpenTelemetry logging with formatted message + scopes (`:174-175`); metrics configured by `ConfigureMetrics` -(`:534`), with ASP.NET Core always on (`:536`), `HttpClient` gated by `Telemetry:DisableHttpClientMetrics` -(`:545-566`) and .NET runtime gated by `Telemetry:DisableRuntimeMetrics` (`:572-585`), both gates dropping the -whole meter family through a View because the Azure Monitor distro adds those meters itself. Tracing subscribes -four sources at `:182-185`: `builder.Environment.ApplicationName`, `MMCA.Common.Outbox`, -`MMCA.Common.InternalCommands` and `AiTelemetryName` (`= "MMCA.Common.AI"`, `:62`). Nine MMCA meters are -registered by literal name at `:598-606` (`MMCA.Common.Outbox` / `.Cqrs` / `.Idempotency` / `.Scheduler` / -`.Broker` / `.OutputCache` / `.BestEffort` / `.InternalCommands` / `.AI`), the literal-name rationale and the -per-meter description being the comment at `:587-597`; Polly's own meter (`PollyMeterName = "Polly"`, `:49`) is -added at `:613`, with a View at `:623` dropping its two duration histograms unless -`Telemetry:EnablePollyDurationMetrics` (`:43`) is set. Probe-telemetry trace filtering is on by default -(`FilterProbeTelemetryConfigKey = "Telemetry:FilterProbeTelemetry"`, `:37`): `ProbeTelemetryFilter` on the -ASP.NET Core and `HttpClient` instrumentation options (`:199-214`) plus `ProbeTelemetryFilterProcessor` for the -dependency children (`:223-229`), with the "100% of the AppRequests rows in both production workspaces" -rationale in the comment at `:187-198`. The `MMCA.Common.Outbox` meter carries four instruments, not one: -`DeadLetterCounter`, `ProcessedCounter`, `DispatchLagHistogram` and `PendingDepthGauge` -(`Source/Core/MMCA.Common.Infrastructure/Persistence/Outbox/Processing/OutboxMetrics.cs:41,47,57,75`); the -idempotency meter name is defined at -`Source/Presentation/MMCA.Common.API/Idempotency/IdempotencyMetrics.cs:19`. Polly via -`HttpResilienceDefaults`: the `AddStandardResilienceHandler` options block opens at `Extensions.cs:106` with -assignments at `:108-111`; the numeric values (30s attempt / 60s circuit-breaker window / 90s total, one retry -per hop) live in `Source/Core/MMCA.Common.Shared/Resilience/HttpResilienceDefaults.cs:13,16,19,28`, and the -`SocketsHttpHandler` tuning is wired at `Extensions.cs:126-134`. `MapDefaultEndpoints` (`:398-434`) serves -`/health` through `MapCachedHealthChecks` (`:409`), `/alive` with the `"live"` tag predicate and deliberately -no cache (`:413-416`), and `/health/ready` through the same cache with a predicate excluding the `Live` and -`Optional` tags (`:429-431`); the cache is SEC-Common-71 / SEC-ADC-17 (rationale `:404-408`) and the "an -optional dependency must not gate readiness" reasoning is at `:423-428`. The warm-up gate registers -`OpenIdConnectMetadataWarmupTask` (`:154`). `OutboxPollFilterProcessor` is added at `:221`, before -`AddOpenTelemetryExporters()` (`:240`, defined `:348-365`). ADR-041 facets folded into Step 6: (1) correlation -IDs, `CorrelationIdMiddleware` (`Source/Presentation/MMCA.Common.API/Middleware/CorrelationIdMiddleware.cs:15`), -header `X-Correlation-ID` (`:18`), read-or-fall-back to the W3C trace id then `TraceIdentifier` (`:32-34`), set -on scoped `ICorrelationContext` (`:36`), echoed on the response (`:37-41`); the CQRS scope stamp is -`LoggingCommandDecorator` reading `correlationContext.CorrelationId` -(`Source/Core/MMCA.Common.Application/UseCases/Decorators/LoggingCommandDecorator.cs:26`) into -`BeginCommandScope` (`:32`), whose delegate is a static `LoggerMessage.DefineScope` -field at `:86-87` carrying command name, module name and correlation id. (2) Cost knob -`Telemetry:TracesSampleRatio`, parsed by `TryGetTraceSampleRatio` (`Extensions.cs:476-489`): unset falls back to -sample-all, a valid (0,1) ratio wraps a `TraceIdRatioBasedSampler` in a `ParentBasedSampler` (`:237`, guarded at -`:236`), and an absent / unparseable / out-of-range value reverts to sample-all (`:480-485`). (3) Dual -exporters, `AddOpenTelemetryExporters` (`:348-365`): OTLP when `OTEL_EXPORTER_OTLP_ENDPOINT` is present -(`:350-356`, the Aspire dashboard sets it) and Azure Monitor via `UseAzureMonitor` when -`APPLICATIONINSIGHTS_CONNECTION_STRING` is present (`:358-364`, the cloud deployment sets it), both active at -once. ADR anchor: `Website/docs-src/adr/041-observability-and-telemetry.md`. Header ADR field -`ADR-023/025/041/070` re-checked against `Website/docs-src/adr/`: ADR-023 = `023-security-response-headers.md` -(Step 7), ADR-025 = `025-startup-warmup-readiness.md` (Step 3), ADR-041 = observability (Step 6), ADR-070 = -`070-fail-fast-configuration-contract.md` (Step 8). The Step 4 vocabulary is twelve public helper names across -thirteen methods, all in `Source/Hosting/MMCA.Common.Aspire.Hosting/Extensions.cs`: `AddMailDev` (`:141`), -`AddMessageBroker` (`:160`), `AddServiceBusEmulatorBroker` (`:201`), `WithBroker` for RabbitMQ (`:252`) and for -the Service Bus emulator (`:280`, setting `MessageBus__Provider=AzureServiceBus` plus the emulator connection -string and admin endpoint, `:289-291`), `WithJwksDiscovery` (`:309`), `WithE2eRsaKeys` (`:353`), -`WithE2eRegistrationThrottleLift` (`:392`), `WithE2eGatewayRateLimitLift` (`:440`), `WithSQLServerDataSource` -(`:483`), `WithPostgreSQLDataSource` (`:513`), `WithCosmosDataSource` (`:542`) and `WithSqliteDataSource` -(`:567`). `WithSQLServerDataSource` references the database, waits for it and injects exactly one environment -variable, `DataSources__{logicalName}__SQLServerConnectionString` (`:490-493`); the "with no top-level -connection string, the single database a host declares this way also becomes its `Default` source" reasoning is -its doc comment at `:473-478`. The Step 7 security-headers types all live in -`Source/Hosting/MMCA.Common.Aspire/Security/SecurityHeaders.cs`: `AddCommonSecurityHeaders` (`:246`, which binds -`SecurityHeadersSettings.SectionName` at `:255`), `UseCommonSecurityHeaders` (`:271`, the call that inserts the -middleware, so a host calls both), `SecurityHeadersMiddleware` (`:145`), `ICspPolicyProvider` (`:84`), -`StaticCspPolicyProvider` (`:91`, internal), the `CspPolicy(string Value, bool Enforce)` record (`:76`) and the -`"SecurityHeaders"` section name (`:22`); the dynamic Blazor provider is -`Source/Presentation/MMCA.Common.UI.Web/Security/BlazorCspPolicyProvider.cs`. Step 8 (ADR-070): the canonical -chain is `AddOptions().Bind(...).ValidateDataAnnotations().ValidateOnStart()` at -`Source/Core/MMCA.Common.Infrastructure/DependencyInjection.cs:87`. That file carries nineteen such chains -(`:87` connection strings, `:108` SMTP, `:154` persistence, `:159` outbox, `:164` login protection, `:170` -password reset, `:178` refresh sessions, `:193` message bus, `:198` JWKS, `:276` cache, `:281` query-cache -pipeline, `:437` scheduler, `:472` two-factor, `:500` email confirmation, `:537` permission grants, `:639` audit -trail, `:688` tenancy, `:822` push notifications, `:1083` internal commands), and four more live in -Presentation: `IdempotencySettings` (`Source/Presentation/MMCA.Common.API/DependencyInjection.cs:77`), -`JwtSettings` (`Source/Presentation/MMCA.Common.API/Startup/WebApplicationBuilderExtensions.cs:640`), -`ApiSettings` (`Source/Presentation/MMCA.Common.UI/DependencyInjection.cs:39`) and `BlazorCspSettings` -(`Source/Presentation/MMCA.Common.UI.Web/DependencyInjection.cs:54`): twenty-three in total. -`ApplicationSettings` and `ModulesSettings` bind on the identical chain inside the framework -(`Source/Presentation/MMCA.Common.API/Startup/ModuleHostExtensions.cs:61-64` and `:69-72`), not in each host: a -search for `AddOptions` / `AddOptions` across `MMCA.ADC/Source` returns -nothing. The deliberate exclusions bind without the validation chain and say so at the call site: -`OwnerOrAdminFilterOptions` (`Source/Presentation/MMCA.Common.API/DependencyInjection.cs:91`, data annotations -but no `ValidateOnStart` because its required `BypassRole` has no framework default), `HybridCacheOptions` -(`Infrastructure/DependencyInjection.cs:378`), `NativePushSettings` (`:863`) and `FileStorageSettings` (`:895`). -The `JwtSettings` conditional key-material rules are its `IValidatableObject.Validate` body -(`Source/Core/MMCA.Common.Infrastructure/Auth/JwtSettings.cs:72-75` for the 32-character HS256 secret, with -`[Required] Issuer` / `Audience` at `:53-54` / `:57-58` and the interface at `:16`). The "nothing gates the -chain" trade-off was re-checked this run by searching -`Source/Hosting/MMCA.Common.Testing.Architecture` for a governance test over `AddOptions` / `ValidateOnStart`: -there is none (the only `ValidateOnStart` hits under `Tests/` are three behavior tests), and the trade-off is -recorded in `Website/docs-src/adr/070-fail-fast-configuration-contract.md` (Trade-offs). The code blocks labeled -"representative" were checked against `MMCA.ADC/Source/Hosting/MMCA.ADC.AppHost/Program.cs` this run: the -`Projects.*` type names are correct (`Projects.MMCA_ADC_Conference_Service` at `:200`) and the gRPC (`:269`, -`:271`, `:274`) and JWKS (`:373-375`) blocks match verbatim; the Step 4 block differs from the real chain -(`:200-215`) in call ordering, in omitting the local-only -`.WithEnvironment("Seeding__IncludeSampleConferenceData", "true")` (`:211`), and in calling `.WithBroker(rabbit)` -where ADC routes the broker through a `Func` selector, `.WithSelectedBroker(withBroker)` (`:205`), so -`ADC_BROKER=servicebus` (`:92-95`) can swap the Service Bus emulator in. Change history since the 2026-08-19 -pass: the meter chain grew from seven names to nine plus Polly's; probe-telemetry filtering and the HttpClient / -runtime / Polly metric knobs were added; `/health` and `/health/ready` moved behind `MapCachedHealthChecks`; the -hosting package grew from eight helpers to twelve; `WithSQLServerDataSource` stopped injecting -`ConnectionStrings__SQLServerConnectionString`; the read-only settings facades (`IApplicationSettings`, -`IJwtSettings`, `ISmtpSettings`, `IConnectionStringSettings`, `IPushNotificationSettings`) were removed, and no -`.cs` file under `MMCA.Common/Source` declares any of them (only the PublicAPI baseline files still name them, -`Source/Core/MMCA.Common.Infrastructure/PublicAPI.Unshipped.txt:4` recording the removal); and `JwtSettings` and -`OutboxMetrics` moved to `Infrastructure/Auth/` and `Infrastructure/Persistence/Outbox/Processing/`. The -headless-launch caveat is a known operational note, not a code limitation, and is not determinable from source.* +*Notes: re-verified against source on 2026-10-02 (MMCA.Common v1.221.0). Since the 2026-09-19 pass the +Aspire `Extensions.cs` was split into `Extensions.cs`, `Extensions.Telemetry.cs` and `Extensions.Health.cs`, +and Infrastructure `DependencyInjection.cs` into `.Auth` / `.Caching` / `.Jobs` / `.Notifications` partials, +so every anchor below is re-stamped. Paths are under `MMCA.Common/Source/` unless stated. Baseline: +`AddServiceDefaults` (`Hosting/MMCA.Common.Aspire/Extensions.cs:30`); `ConfigureOpenTelemetry` +(`Extensions.Telemetry.cs:71`) with formatted message + scopes (`:75-76`), metrics via `ConfigureMetrics` +(called `:80`, defined `:243`), which first calls `ConfigureAspNetCoreMetrics` (`:245`, defined `:352`): +`Telemetry:DisableAspNetCoreMetrics` (`:354`) drops every `Microsoft.AspNetCore.` meter through a View +(`:359-362`), else `AddAspNetCoreInstrumentation` (`:366`). `Telemetry:DisableHttpClientMetrics` (`:254`, +View `:266-270`) and `Telemetry:DisableRuntimeMetrics` (`:281`, View `:286-289`) gate the other two families. +Nine MMCA meters by literal name at `:307-315`; Polly's meter at `:322` (`PollyMeterName = "Polly"`, `:31`), +duration histograms dropped by the View at `:332-340` unless `Telemetry:EnablePollyDurationMetrics` (`:25`). +Four trace sources at `:83-86` (`AiTelemetryName = "MMCA.Common.AI"`, `:44`). `OutboxPollFilterProcessor` +added at `:122`, `ProbeTelemetryFilterProcessor` at `:129`, `FilterProbeTelemetryConfigKey` at `:19`; +sampler `ParentBasedSampler(TraceIdRatioBasedSampler)` at `:138`, ratio parsed by `TryGetTraceSampleRatio` +(`:185`); exporters read `OTEL_EXPORTER_OTLP_ENDPOINT` (`:162`) and `APPLICATIONINSIGHTS_CONNECTION_STRING` +(`:170`). The poll filter (`Hosting/MMCA.Common.Aspire/Telemetry/OutboxPollFilterProcessor.cs`) matches +`OutboxPoll` on `MMCA.Common.Outbox` and `InternalCommandPoll` on `MMCA.Common.InternalCommands` +(constants `:26-29`, predicate `:60-64`) and clears `Recorded` at `:49`; the doc comment (`:9-15`) names +the per-message `OutboxProcess` and per-command `InternalCommandExecute` survivors. Outbox meter, five +instruments: `DeadLetterCounter`, `ProcessedCounter`, `DispatchLagHistogram`, `PendingDepthGauge`, +`OldestPendingAgeGauge` (`Core/MMCA.Common.Infrastructure/Persistence/Outbox/Processing/OutboxMetrics.cs:41,47,57,75,98`). +CQRS meter: `CommandDuration`, `QueryDuration`, `QueryCacheHits`, `QueryCacheMisses`, `AuthorizationDenied`, +`TimeoutExpired` (`Core/MMCA.Common.Application/UseCases/Decorators/CqrsMetrics.cs:29,35,41,47,53,59`). +Resilience: `AddStandardResilienceHandler` at `Extensions.cs:49-54`; values in +`Core/MMCA.Common.Shared/Resilience/HttpResilienceDefaults.cs:13,16,19` (30s / 60s / 90s) and +`MaxRetryAttempts = 1` at `:30`; `SocketsHttpHandler` at `Extensions.cs:76-81`; warm-up task registered at +`:104`. Health: `MapDefaultEndpoints` (`Extensions.Health.cs:123`), `/health` cached (`:134`), `/alive` on +the `Live` tag uncached (`:138-140`, "self" check tagged `Live` at `:28`), `/health/ready` cached with the +`Live`/`Optional` exclusion (`:154-156`). Step 4 vocabulary, thirteen helper names across fourteen methods: +`Hosting/MMCA.Common.Aspire.Hosting/Extensions.cs` `AddMailDev` (`:141`), `AddMessageBroker` (`:160`, +`AddRabbitMQ(name).WithManagementPlugin()` at `:164`), `AddServiceBusEmulatorBroker` (`:201`), `WithBroker` +(`:252`, `:280`), `WithJwksDiscovery` (`:309`), `WithE2eRsaKeys` (`:353`), `WithE2eRegistrationThrottleLift` +(`:392`), `WithE2eGatewayRateLimitLift` (`:440`), `WithSQLServerDataSource` (`:483`), `WithPostgreSQLDataSource` +(`:513`), `WithCosmosDataSource` (`:542`), `WithSqliteDataSource` (`:567`), plus `WithH2cHealthCheck` +(`H2cHealthCheckExtensions.cs:110`, behavior per its doc comment `:95-108`). `WithSQLServerDataSource` chains +`WithReference(database)` (`:491`), `WaitFor` (`:492`) and the `DataSources__{logicalName}__SQLServerConnectionString` +variable (`:493`); the "one entry, becomes Default" reasoning is its doc comment `:474-477`. The earlier +"exactly one environment variable" wording was narrowed: `WithReference` on a database resource may inject +Aspire's own `ConnectionStrings__*` entry too, which is not determinable from repo source. The RabbitMQ +management URL `http://localhost:15672` was removed from Step 1: `WithManagementPlugin()` is called with no +port (`:164`) and ADC adds none (`MMCA.ADC/Source/Hosting/MMCA.ADC.AppHost/Program.cs:99-100`); only an ADC +comment (`:48-50`) states 15672. ADC broker selection is `:90-102`, the RabbitMQ-vs-Service-Bus divergence +comment `:67-89` (the MailDev bullet now names the broker as a second deliberate gap). ADC AppHost topology, +the gRPC edges (`:269`, `:271`, `:274`), JWKS (`:373-375`), the Step 4 source chain (`:200-215`, which uses +`WithSelectedBroker` and a Seeding variable) and the 6001/6002 pins were confirmed by the 2026-10-02 audit and +not re-read in this apply pass. Correlation: `Presentation/MMCA.Common.API/Middleware/CorrelationIdMiddleware.cs` +header `:21`, `MaxLength = 64` `:24`, read-or-fall-back `:38-41`, set `:43`, echo `:44-48`. Security headers +(`Hosting/MMCA.Common.Aspire/Security/SecurityHeaders.cs`): `AddCommonSecurityHeaders` `:246`, options at +`:252` bound only when a configuration is passed (`:253-256`), `StaticCspPolicyProvider` registered `:263`, +`UseCommonSecurityHeaders` `:271` inserting the middleware `:274`; `CspPolicy` record `:76` per the audit. +Step 8 (ADR-070): canonical chain `Core/MMCA.Common.Infrastructure/DependencyInjection.cs:72-75`. Thirty +sections carry `ValidateDataAnnotations().ValidateOnStart()` (count from a Grep of all 34 `ValidateOnStart()` +hits under `Source/`, minus the two without data annotations and the two module-host chains). Infrastructure +(19): `DependencyInjection.cs:75,101,147,152,157,163,171,190,195,281`, `.Caching.cs:46,51`, +`.Jobs.cs:42,113,152`, `.Auth.cs:44,72,113`, `.Notifications.cs:46`. Others (11): +`Presentation/MMCA.Common.API/DependencyInjection.cs:80` (idempotency), +`API/Startup/WebApplicationBuilderExtensions.Authentication.cs:146-149` (JWT), +`WebApplicationBuilderExtensions.RateLimiting.cs:353`, `Presentation/MMCA.Common.UI/DependencyInjection.cs:39-42` +(ApiSettings), `UI.Web/Hardening/UiRateLimitingExtensions.cs:167-169` and `BlazorCircuitLimitExtensions.cs:56-58` +(both `BindConfiguration`), `Hosting/MMCA.Common.Aspire/Extensions.Health.cs:36` (HealthReportCacheOptions), +`Hosting/MMCA.Common.Gateway/GatewayReverseProxyExtensions.cs:54-57` (GatewaySettings), +`Hosting/MMCA.Common.Aspire/Gateway/GatewayRateLimitingExtensions.cs:273-276`, +`Core/MMCA.Common.AI/DependencyInjection.cs:123-126` (AiSettings), +`Core/MMCA.Common.AI/Guardrails/GuardrailServiceCollectionExtensions.cs:70` (ContentPolicySettings). +`ValidateOnStart` without data annotations: `BlazorCspSettings` (`UI.Web/DependencyInjection.cs:54-56`, +`BindConfiguration`) and `SameOriginApiProxySettings` (`UI.Web/SameOriginProxy/SameOriginApiProxyServiceExtensions.cs:55-65`, +with `PostConfigure`). `ApplicationSettings` / `ModulesSettings` at +`Presentation/MMCA.Common.API/Startup/ModuleHostExtensions.cs:61-64` and `:69-72`; Store Stripe at +`MMCA.Store/Source/Modules/Sales/MMCA.Store.Sales.API/SalesModule.cs:51-54` per the audit. Exclusions: +`OwnerOrAdminFilterOptions` (`API/DependencyInjection.cs:87-92`, comment `:87-90`), `HybridCacheOptions` +(`Infrastructure/DependencyInjection.Caching.cs:147`), `CacheKeyPrefixOptions` (`Configure` at `.Caching.cs:41`), +`NativePushSettings` and `FileStorageSettings` (`.Notifications.cs:84`, `:116`), `SecurityHeadersSettings` +(`SecurityHeaders.cs:252-256`), `LayoutSettings` / `UiReadCacheOptions` / `NotificationBellOptions` +(`UI/DependencyInjection.cs:45-46`, `:50-51`, `:53-54`, optional-section comments `:44` and `:48-49`). +`JwtSettings` rules (`Core/MMCA.Common.Infrastructure/Auth/JwtSettings.cs:72`) confirmed by the audit. "Nothing +gates the chain": no `ValidateOnStart` / `AddOptions` governance test in `Hosting/MMCA.Common.Testing.Architecture`; +the `ValidateOnStart` hits under `MMCA.Common/Tests/` are four behavior-test files (`ApiClientRegistrationTests`, +`ContentPolicyRegistrationTests`, `SmtpEmailSenderTests`, `ConnectionStringSettingsValidatorTests`). Numbers +changed this run: helpers 12/13 to 13/14, metric knobs 3 to 4, outbox instruments 4 to 5, validated sections 23 +to 30 (BlazorCsp dropped from the list), test files 3 to 4. Header re-grounded from `MMCA.Common/CLAUDE.md` +(now a stub importing `AGENTS.md`) to `MMCA.Common/AGENTS.md`; ADR cells unchanged (ADR-023 / 025 / 041 / 070, +range 001-131 per `Website/docs-src/adr/README.md`). The headless-launch caveat is a known operational note, not +a code limitation, and is not determinable from source.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/build-your-first-module.md b/docs-src/articles/build-your-first-module.md index 0bb1d288..0b226a6a 100644 --- a/docs-src/articles/build-your-first-module.md +++ b/docs-src/articles/build-your-first-module.md @@ -1,9 +1,11 @@ # Scaffold a .NET modular monolith in one command, then build your first module > Series: MMCA.Common · Article #39 (tutorial) · Pillar P5 · Groups G02,G05,G14 · Rubric §33 · ADR-065 · -> Status: grounded in `MMCA.Common/CLAUDE.md` ("DI Registration Sequence", "Module System", -> "Entity Model", "CQRS Decorator Pipeline"), `Website/docs-src/adr/065-scaffolding-templates.md`, -> `Website/docs-src/guides/common-TEMPLATES.md`, and the overviews of +> Status: grounded in `MMCA.Common/AGENTS.md` ("DI Registration Sequence", "CQRS Decorator Pipeline"), +> `MMCA.Common/Source/Core/MMCA.Common.Application/DependencyInjection.cs` and `DependencyInjection.ModuleScanning.cs`, +> the MMCA.Helpdesk seed (`Source/Hosts/MMCA.Helpdesk.Web/Program.cs`, +> `templates/mmca-module/.template.config/template.json`, `build/templates/overlay/mmca-app/README.md`), +> `Website/docs-src/adr/065-scaffolding-templates.md`, `Website/docs-src/guides/common-TEMPLATES.md`, and the overviews of > `Website/docs-src/onboarding/group-14-module-system-composition.md`, `group-02-domain-building-blocks.md`, > `group-05-cqrs-pipeline.md`. No em dashes. @@ -23,7 +25,7 @@ that declares its own dependencies so the host can assemble everything in the ri The framework ships a `dotnet new` pack, so you type none of that plumbing (ADR-065). Hand-rolling it costs a day before you write a line of business logic, and ADR-065 measures that starting cost against -the framework's reference app: 12 projects, 133 files, and 10,662 lines of plumbing, an 827-line +the framework's reference app: 12 projects, 136 files, and 11,532 lines of plumbing, an 827-line `.editorconfig` among them, plus the 100-line `Directory.Packages.props` that carries every package pin (58 of them in the seed today), several of those lines load-bearing in ways nothing tells you about until much later. @@ -62,31 +64,34 @@ Three names, all independent: the solution (also your root namespace), the first PascalCase, and its aggregate root in singular PascalCase. Everything derived from them follows, from the routes and the identifier alias to the cache-key prefix and the Blazor pages. -You get twelve projects: five module layers, a REST API host, a Blazor Server and MudBlazor UI host, an -Aspire AppHost, a per-database migrations project, and three test projects. The aggregate arrives fully -worked, in the same shape the rest of this article explains. +You get twelve projects in the default shape: five module layers, a REST API host, a Blazor Server and +MudBlazor UI host, an Aspire AppHost (`--no-aspire` leaves it out), a per-database migrations project, +and three test projects. The aggregate arrives fully worked, in the same shape the rest of this article +explains. Get that green **before** you change anything. It is the line you bisect against later, and if it is not green that is a template bug rather than yours: the pack is generated from the framework's runnable -reference app, and a smoke job builds two generated solutions in package mode on every change. - -Two things the scaffold deliberately refuses to hand over, because a rename or a shape flag -invalidates them and no fixed value is right for every name you could pick. - -The first is **declaration order, plus one constructor shape**. Three analyzer rules, and only three, -ship dropped to `suggestion` in a marked block appended to the *staged* `.editorconfig`; every other -analyzer stays at error. `SA1210` cannot sort your namespace against `MMCA.Common.*` without knowing -your name: an app namespace sorts above it for `Contoso.Support` and below it for `Zeta.App`, so no -checked-in order survives both. `SA1211` is the same story one level down, on the identifier-alias -file whose aliases re-sort when a shape flag renames them. `IDE0021` is the flags rather than the -renames: the aggregate's private constructor assigns one property per optional axis, so -`--no-status --no-description --no-owner` together leave it with a single statement, which the -baseline then wants as an expression body. - -The second is **your integration-event wire contract**: a freeze inherited from someone else's sample -module guarantees nothing. All of it is one-time, and the generated README carries the exact commands -(one `dotnet format analyzers` run restores the two ordering rules; `IDE0021` is not fixable that way, -so you fold the constructor by hand and delete the line). +reference app, and a `template-smoke` CI job generates three solutions from it (two module shapes and +one SQLite solution without an AppHost) and builds and tests each in package mode. + +One thing the scaffold deliberately does not hand over, because a rename or a shape flag invalidates +it and no fixed value is right for every name you could pick: **declaration order, plus one +constructor shape**. Three analyzer rules, and only three, ship dropped to `suggestion` in a marked +block appended to the *staged* `.editorconfig`; every other analyzer stays at error. `SA1210` cannot +sort your namespace against `MMCA.Common.*` without knowing your name: an app namespace sorts above it +for `Contoso.Support` and below it for `Zeta.App`, so no checked-in order survives both. `SA1211` is +the same story one level down, on the identifier-alias file whose aliases re-sort when a shape flag +renames them. `IDE0021` is the flags rather than the renames: the aggregate's private constructor +assigns one property per optional axis, so `--no-status --no-description --no-owner` together leave it +with a single statement, which the baseline then wants as an expression body. It is one-time, and the +generated README carries the exact commands (one `dotnet format analyzers` run restores the two +ordering rules; `IDE0021` is not fixable that way, so you fold the constructor by hand and delete the +line). + +Your integration-event wire contract is not on that list: it arrives already frozen. The generated +`IntegrationEventContractTests` holds your own event, under the names you scaffolded with, and passes +on the first run. When you add or reshape an event on purpose, you version it and update +`ExpectedContract` in the same commit. Now the part worth reading. @@ -274,42 +279,58 @@ public sealed class PromotionsModule : IModule ``` `Dependencies` is what lets the framework do something genuinely useful: `ModuleLoader` discovers every -`IModule` and registers them in **topological order** (Kahn's algorithm) based on declared dependencies, -so a module is always wired after the modules it depends on. `ModulesSettings` (the `"Modules"` config -section) can disable a module; disabled modules receive stub registrations so cross-module interfaces -stay resolvable. That last detail is the extraction boundary: a module that depends on a now-remote module -keeps compiling and resolving because the stub stands in until a gRPC client takes over. +`IModule` in the assemblies the host names and registers them in **topological order** (Kahn's +algorithm) based on declared dependencies, so a module is always wired after the modules it depends on. +`ModulesSettings` (the `"Modules"` config section) can disable a module; disabled modules receive stub +registrations so cross-module interfaces stay resolvable. That last detail is the extraction boundary: a +module that depends on a now-remote module keeps compiling and resolving because the stub stands in +until a gRPC client takes over. ## Step 6: register in the exact DI sequence This is the step the most experienced developers still get wrong, because one ordering rule is load-bearing. `AddApplicationDecorators()` must run after every module's handler scan, because Scrutor's `TryDecorate` can only wrap handlers that are already registered. That is the only constraint that -matters here. The relative position of `AddInfrastructure` and `AddAPI` is not load-bearing: DI -dependencies resolve at runtime, not at registration time, so the infrastructure that backs the -decorated handlers can be registered before or after them. The framework documents the sequence this -way: +matters here. Registrations that are not handlers (infrastructure, API, telemetry, options) can sit on +either side of it: DI dependencies resolve at runtime, not at registration time, so the infrastructure +that backs the decorated handlers can be registered before or after them. The generated host spells the +sequence out by hand: ```csharp -// Host composition root -services.AddApplication() // core services, event dispatcher - .AddInfrastructure(configuration) // repos, UoW, DbContexts, caching, outbox - .AddAPI(modulesSettings) // controllers, idempotency, exception handlers - .ScanModuleApplicationServices() // this module's handlers, validators, mappers - .ScanModuleApplicationServices() // another module - .AddApplicationDecorators(); // MUST be last: Scrutor wraps existing handlers +// Host composition root: the generated Web/Program.cs, abridged (representative module names) +services.AddApplication(); // core services, event dispatcher +services.AddInfrastructure(builder.Configuration); // repos, UoW, DbContexts, caching, outbox +services.AddAPI(modulesSettings); // controllers, idempotency, exception handlers +services.AddErrorResources(); // one per module: error-code translations +services.AddErrorResources(); + +moduleLoader.DiscoverAndRegister( + services, builder.Configuration, applicationSettings, modulesSettings, + builder.Environment.EnvironmentName, + [typeof(OrdersModule).Assembly, typeof(PromotionsModule).Assembly]); // each module scans itself + +services.AddBrokerMessaging(builder.Configuration); +services.AddApplicationDecorators(); // MUST be last: Scrutor wraps existing handlers ``` The rules embedded in that order: -- **`ScanModuleApplicationServices()`** runs once per module. It auto-registers that module's - domain-event handlers (singleton), DTO and request mappers (scoped), command and query handlers - (scoped), and FluentValidation validators. This is why you did not register the validator from Step 4 - or the handler from Step 3 by hand: convention scanning found them by the marker type's assembly. +- **`ScanModuleApplicationServices()`** runs once per module, from inside that module's own + registration, which `ModuleLoader` reaches through the module's `Register`. It auto-registers that + module's domain-event and integration-event handlers (singleton), DTO and request mappers, DTO + projectors and update appliers (scoped), command and query handlers (scoped), and FluentValidation + validators. This is why you did not register the validator from Step 4 or the handler from Step 3 by + hand: convention scanning found them by the marker type's assembly. - **`AddApplicationDecorators()` must be last** of the Application registrations. It uses Scrutor's - `TryDecorate` to wrap every already-registered handler. If you call it before a module's - `ScanModuleApplicationServices`, that module's handlers are registered too late to be wrapped, and - they silently run undecorated. No transactions, no caching, no logging, and no error to tell you. + `TryDecorate` to wrap every already-registered handler, then **seals** the pipeline. A module scan + that runs after the seal throws an `InvalidOperationException` naming the call, so a misplaced scan + fails at startup instead of running undecorated. A handler registered by hand after the seal is the + one case that still slips through: it runs with no transactions, no caching, no logging, and no error + to tell you. +- **`AddMmcaApplicationPipeline(pipeline => ...)`** is the framework's preferred form of the same + sequence: it runs `AddApplication()`, then your callback (module scans, a `ModuleLoader` run, broker + wiring), then `AddApplicationDecorators()`, so the handler registrations cannot land on the wrong side + of the decorators. The generated host keeps the explicit calls shown above. ## Step 7: watch the decorator pipeline kick in, for free @@ -326,8 +347,8 @@ You wrote a thin handler. The pipeline added the rest, driven by the marker inte query is turned off. - **Authorization** comes next, and sits outside caching on purpose. Commands and queries that implement `IRequiresPermission` are checked against the permission registry for the current user's - roles, and a denial short-circuits with a `Forbidden` error, so a denied query never reads from or - populates the cache. + roles (and those that implement `IRequiresMfa` against the `mfa` claim), and a denial short-circuits + with a `Forbidden` error, so a denied query never reads from or populates the cache. - **Logging** records the full pipeline duration via `ICorrelationContext`, for every handler, with no per-handler code. - **Caching** runs for queries that implement `IQueryCacheable` (supplying `CacheKey` + `CacheDuration`), @@ -395,8 +416,10 @@ the script is doing on your behalf: 4. **Architecture map.** Five lines in your `*ArchitectureMap.cs`, one per layer. **A module missing from the map is silently not covered by the layering and isolation rules.** No error, no warning: the rules simply stop watching the code you just added. -5. **Host.** One `services.AddErrorResources();` next to the existing ones. - `ModuleLoader` discovers the `IModule` from Step 5 itself, so nothing else needs registering. +5. **Host.** Two edits in the Web host's `Program.cs`. Add `typeof(BillingModule).Assembly` to the + list handed to `ModuleLoader.DiscoverAndRegister`: discovery scans only the assemblies the host + names, so a module left out of that list registers nothing. Then add one + `services.AddErrorResources();` next to the existing ones. 6. **Database.** The module gets its own: an `AddDatabase` / `WithSQLServerDataSource` pair in the AppHost, `Modules` / `DataSources` / `Outbox` entries in the Web host's `appsettings.json`, and the deletion of the now-conflicting top-level `SQLServerMigrationsAssembly`. Every module database @@ -405,18 +428,21 @@ the script is doing on your behalf: calls. 7. **First migration.** `dotnet ef migrations add InitialCreate` against the new migrations project. -The first two are what make it compile, so they fail loudly. Numbers three and four do not, which is -why they are worth reading twice. And the honest reading of the script is not that the wire-ups -stopped mattering: it is that the one code path CI exercises now applies them for you, on a solution -the template generated. +The first two are what make it compile, so they fail loudly. Numbers three and four do not, and neither +does the module-assembly half of number five, which is why they are worth reading twice. And the honest +reading of the script is not that the wire-ups stopped mattering: it is that the one code path CI +exercises applies them for you, on a solution the template generated. ## Trade-offs and gotchas, honestly The shape buys consistency, and it asks for discipline in return: -- **The DI order is unforgiving.** Call `AddApplicationDecorators()` too early and handlers run - undecorated with no warning. Treat the documented sequence as a hard rule, and consider an - architecture fitness test that asserts handlers are decorated (the next article covers fitness tests). +- **The DI order is guarded, but not completely.** `AddApplicationDecorators()` seals the pipeline, so + a module scan placed after it throws at startup. A handler registered by hand after it still runs + undecorated with no warning. The generated solution ships `DecoratorPipelineOrderTests`, which builds + the module's registration sequence and asserts the decorator nesting for one command and one query, + and the framework exposes `VerifyDecoratorPipeline()` for a fitness test that checks every handler + (the next article covers fitness tests). - **Markers are easy to forget.** `ITransactional` and `ICacheInvalidating` are opt-in by presence. Forget the marker and you lose the behavior silently. The upside (no behavior you did not ask for) is also the trap (no behavior you forgot to ask for). @@ -429,24 +455,24 @@ The shape buys consistency, and it asks for discipline in return: - **Soft-delete is the default.** Your aggregate is never hard-deleted; `IsDeleted` is set and global query filters hide it. Plan for the data to persist, which matters for both storage and privacy. - **A scaffold is a starting point, not an understanding.** The generated solution is green on day one, - which is exactly what makes it easy to change something load-bearing without noticing. The DI order, - the marker interfaces, and the architecture map are the three places where a wrong edit fails - silently rather than loudly, and none of them is protected by the template. + which is exactly what makes it easy to change something load-bearing without noticing. The marker + interfaces, the architecture map, and the host's list of module assemblies are the places where a + wrong edit fails silently rather than loudly. None of these are reasons to fight the shape. They are the reasons to learn it once and let it carry every module after. --- -**What we covered:** scaffolding the whole solution with `dotnet new mmca-app` and the two fixups it +**What we covered:** scaffolding the whole solution with `dotnet new mmca-app` and the one fixup it deliberately leaves you, the aggregate with a private constructor and a `Result` factory, raising a domain event with `AddDomainEvent`, a thin command handler marked `ITransactional`, a FluentValidation -validator, the `IModule` contract with `Name` and `Dependencies`, the exact DI sequence -(`AddApplication().AddInfrastructure(config).AddAPI(modulesSettings) -.ScanModuleApplicationServices()...AddApplicationDecorators()`), the decorator pipeline that wraps -every handler automatically, and the seven wire-ups `mmca-module` prints because `dotnet new` cannot -patch files that already exist (a solution generated by `mmca-app` applies all seven for you through -its own `build/add-module.ps1`). +validator, the `IModule` contract with `Name` and `Dependencies`, the DI sequence (each module's +`ScanModuleApplicationServices()` reached through `ModuleLoader.DiscoverAndRegister`, then +`AddApplicationDecorators()` last, sealing the pipeline), the decorator pipeline that wraps every +handler automatically, and the seven wire-ups `mmca-module` prints because `dotnet new` cannot patch +files that already exist (a solution generated by `mmca-app` applies all seven for you through its own +`build/add-module.ps1`). **Next in the series:** write your first architecture fitness test, so the conventions in this article become a red build instead of a code-review comment. @@ -460,68 +486,72 @@ what breaks.* *Tags: .NET, C Sharp, Domain Driven Design, CQRS, Software Architecture* -*Notes: verified type/behavior names: entity chain `BaseEntity` -> -`AuditableBaseEntity` -> `AuditableAggregateRootEntity`; `AddDomainEvent`; private-ctor + -static `Create` factory returning `Result`; `ICommandHandler` with -`HandleAsync`; markers `ITransactional` (empty interface), `ICacheInvalidating` (`CachePrefix`), -`IRequiresPermission` (Authorization) and `IHasTimeout` (Timeout); -`IModule` with `Name` / `Dependencies` / `RequiresDependencies` / `Register` / `RegisterDisabledStubs`; -`ModuleLoader` topological (Kahn) ordering; `ModulesSettings` disable-with-stubs; convention scanning -via `ScanModuleApplicationServices`; query-cache marker `IQueryCacheable` (`CacheKey` + -`CacheDuration`); command decorator execution order FeatureGate -> Authorization -> Logging -> Caching --> Validating -> Timeout -> Transactional -> Handler, and query order FeatureGate -> Authorization -> -Logging -> Caching -> Validating -> Timeout -> Handler, read this pass off the registration inside -`AddApplicationDecorators()` at -`MMCA.Common/Source/Core/MMCA.Common.Application/DependencyInjection.cs:117-153` (seven command -decorators at :137-143, SIX query decorators at :146-151; registered last = outermost, so execution -order is the reverse of registration order), matching `MMCA.Common/CLAUDE.md:79-80` with the -per-decorator descriptions at :83-89 (Authorization :84, Validating :87, Timeout :88). The query -`Validating` decorator sits inside `Caching` by design, stated at `CLAUDE.md:87` ("a cached entry was -validated when produced") and visible in the registration order at `DependencyInjection.cs:147-148`. -Transactional rollback on business failure verified against -`Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/Factory/DbContextFactory.cs:573-588`, -inside `RunTransactionalAttemptAsync` (:573): `if (result is Result { IsFailure: true })` at :582, the -"Business failure: atomicity over partial persistence" comment at :584, `RollbackTransaction();` at -:587; the behavior is unchanged, only the block's lines moved. Consistent with `MMCA.Common/CLAUDE.md` -CQRS section ("exceptions AND `Result.Failure` both roll back", :89); cache invalidation runs only on -success (:86). DI sequence: only `AddApplicationDecorators()` -running after every module's handler scan is load-bearing (Scrutor `TryDecorate` wraps already-registered -handlers); the relative position of `AddInfrastructure`/`AddAPI` is NOT load-bearing (DI resolves at -runtime, not registration time), per `MMCA.Common/CLAUDE.md` "DI Registration Sequence" (line 72, which -states verbatim "That ordering is the only load-bearing part."; that the relative position of -`AddInfrastructure`/`AddAPI` is not load-bearing is this article's inference from the same section, not a -quote); canonical fluent order is `AddApplication -> AddInfrastructure -> AddAPI -> module scans -> -AddApplicationDecorators` (CLAUDE.md:72, re-read this pass). Sources: `MMCA.Common/CLAUDE.md` and the -G14/G02/G05 onboarding chapters. ALL code blocks are labeled representative: they follow the documented -base classes and conventions but are reconstructed (the `Coupon`/`Promotions` example is invented for -the tutorial; exact factory/`Result` API shape, `ICommand` marker name, and repository surface may -differ from source). Anchors re-read directly in the current tree this pass (2026-09-19): `IModule`'s -five members at `MMCA.Common/Source/Core/MMCA.Common.Application/Modules/IModule.cs:7-35` -(`Dependencies => []` at :17, `RequiresDependencies => false` at :23, defaulted `RegisterDisabledStubs` -at :34). Scaffolding figures re-read against the current revision of -`Website/docs-src/adr/065-scaffolding-templates.md`, whose seed measurements were last re-taken on -2026-09-11 (:40): the seed tally the article cites (12 projects, 133 files, 10,662 lines) at :38-39, -the counting method the ADR states inline at :40-43 (126 files and 9,524 lines under `Source/` and -`Tests/`, plus 1,138 lines across seven root build files), and the 827-line `.editorconfig` plus the -100-line `Directory.Packages.props` carrying 58 pins at :43. All three file figures corroborated -directly: `MMCA.Helpdesk/.editorconfig` is 827 lines and `MMCA.Helpdesk/Directory.Packages.props` is -100 lines with 58 `PackageVersion` entries. The THREE relaxed analyzer rules (`SA1210`, `SA1211`, -`IDE0021`) and the reason no fixed value survives a rename or a shape flag at :78-90, with the -`dotnet format analyzers MMCA.Helpdesk.slnx --diagnostics SA1210 SA1211 --severity info` command at -`MMCA.Helpdesk/build/templates/overlay/mmca-app/README.md:111` and the `IDE0021` hand-fold from -`README.md:117`; the SEVEN printed wire-ups plus the `build/add-module.ps1` that an `mmca-app` solution -ships to perform them at `README.md:171` and :225-230, corroborated by the `manualInstructions` text in -`MMCA.Helpdesk/templates/mmca-module/.template.config/template.json:264`, which enumerates steps 1 -through 7 (SOLUTION, PROJECT REFERENCES, IDENTIFIER ALIAS, ARCHITECTURE MAP, HOST, DATABASE, MIGRATION) -and opens with the `pwsh build/add-module.ps1` redirect. One source inconsistency is recorded rather -than resolved: that README says "seven wire-ups" at :171 and "six wire-ups" at :225; the article -follows `template.json`, which enumerates seven. Corrections applied this pass: the seed tally moved to -the ADR's current figures (133 files, 10,662 lines, an 827-line `.editorconfig`, a 100-line -`Directory.Packages.props`); the Step 7 query pipeline gained the `Validating` stage and its bullet now -covers both sides; the decorator registration anchor moved to `DependencyInjection.cs:117-153` with six -query decorators rather than five; the CLAUDE.md anchors moved to :72 / :79-80 / :83-89 and the -"DI Registration Sequence" quote was corrected to the source's own wording; the rollback anchors moved -to :573 / :582 / :584 / :587; and the template README anchors moved to :111 / :117 / :171 / :225-230 -with `template.json:264`.* +*Notes: 2026-10-02 pass against MMCA.Common v1.221.0. Re-read directly this pass: the decorator +registration inside `AddApplicationDecorators()` at +`MMCA.Common/Source/Core/MMCA.Common.Application/DependencyInjection.cs:114-153` (seven command +decorators at :134-140, six query decorators at :143-148, query `Validating` registered inside +`Caching` at :144-145; registered last = outermost, so execution order is the reverse of registration +order), the `SealPipeline` call at :150, `AddMmcaApplicationPipeline` at :207-216 (calls only +`AddApplication()`, the callback, and `AddApplicationDecorators()`; its remarks at :195-196 say non-handler +registrations can stay outside the call), `VerifyDecoratorPipeline()` at :244 (never called +automatically, :221-222), and `ThrowIfPipelineSealed` throwing `InvalidOperationException` at :310-319. +`ScanModuleApplicationServices` calls `ThrowIfPipelineSealed` at +`DependencyInjection.ModuleScanning.cs:49` and scans domain-event handlers (:52), integration-event +handlers (:59), DTO mappers (:65), DTO projectors (:74), request mappers (:80), update appliers (:90), +command-aware appliers (:99), command handlers (:105), query handlers (:111), validators (:117). +`MMCA.Common/CLAUDE.md` is a six-line `@AGENTS.md` import, so the framework doc anchors moved to +`MMCA.Common/AGENTS.md`: DI Registration Sequence at :72-74 ("That ordering is the only load-bearing +part."), execution order at :81-82, per-decorator bullets at :85-91 (Authorization with `IRequiresMfa` +:86, Caching :88, Validating :89, Timeout :90, Transactional :91). Source inconsistency recorded, not +resolved: `AGENTS.md:74` says `AddMmcaApplicationPipeline` runs `AddInfrastructure` and `AddAPI`, but +the method body at `DependencyInjection.cs:207-216` does not; the article follows the code. Generated +host sequence read from `MMCA.Helpdesk/Source/Hosts/MMCA.Helpdesk.Web/Program.cs:78-132` +(`AddApplication` :78, `AddInfrastructure` :79, `AddAPI` :101, `AddErrorResources` :106, +`ModuleLoader.DiscoverAndRegister` with the host-named assembly list :116-124, `AddBrokerMessaging` +:130, `AddApplicationDecorators` :132); the module's own scan at +`Source/Modules/Tickets/MMCA.Helpdesk.Tickets.Application/DependencyInjection.cs:35`. Seed fitness test +`Tests/Architecture/MMCA.Helpdesk.Architecture.Tests/DecoratorPipelineOrderTests.cs:35` (subclass of +`DecoratorPipelineOrderTestsBase`, one command plus one query, sequence at :59-61); no stage or +template exclusion names it. Transactional rollback on business failure at +`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/Factory/DbContextFactory.cs:599` +(`RunTransactionalAttemptAsync`), `if (result is Result { IsFailure: true })` at :608, the "Business +failure: atomicity over partial persistence" comment at :610, `RollbackTransaction();` at :613. +`IModule` defaults at `Modules/IModule.cs:17` (`Dependencies => []`), :23 (`RequiresDependencies => +false`), :34 (`RegisterDisabledStubs`); Kahn at `Modules/ModuleLoader.cs:275`; `ModulesSettings.SectionName += "Modules"` at `Settings/ModulesSettings.cs:10`. Entity chain, `ICommandHandler`, `ITransactional`, +`ICacheInvalidating` and `IQueryCacheable` anchors carried from the 2026-10-02 audit's CONFIRMED verdicts +(`BaseEntity.cs:37`, `AuditableBaseEntity.cs:13`, `AuditableAggregateRootEntity.cs:13`, +`ICommandHandler.cs:9,17`, `ITransactional.cs:6`, `ICacheInvalidating.cs:14`, `IQueryCacheable.cs:23,28`), +not re-opened this pass. Scaffolding figures from `Website/docs-src/adr/065-scaffolding-templates.md`: +seed tally 12 projects, 136 files, 11,532 lines at :38-39, method re-run 2026-10-01 at :40-42 (129 files +and 10,394 lines under `Source/` and `Tests/`, plus 1,138 lines across seven root build files), the +827-line `.editorconfig` and 100-line `Directory.Packages.props` with 58 pins at :43 (the audit +re-counted the three file figures on disk). "One thing the scaffold deliberately does not hand over" +and the three relaxed rules at ADR-065 :78-97; the wire-contract freeze shipping under the adopter's +names at :99-115; the smoke job (`ci.yml:120`) generating three solutions at :157-164, cases at +`MMCA.Helpdesk/build/templates/smoke.ps1:117`, :123, :129 (Contoso.Support, Zeta.Warehouse, +Nordic.Books); `template-smoke` is advisory, the one required check being `build-and-test` +(`MMCA.Helpdesk/AGENTS.md`, Contribution Flow). Generated README +`MMCA.Helpdesk/build/templates/overlay/mmca-app/README.md`: "The one-time fixup" at :103, +`dotnet format analyzers ... --diagnostics SA1210 SA1211 --severity info` at :111, `IDE0021` hand-fold +at :117-120, "Your integration-event wire contract is already frozen" at :122-134, `--no-aspire` at +:206, seven wire-ups at :171. Wire-ups from +`MMCA.Helpdesk/templates/mmca-module/.template.config/template.json:264` (`manualInstructions`), sqlite +entry :268, server-engine entry :271, step 5 being two host edits (module assembly into the +`DiscoverAndRegister` list, then `AddErrorResources`) in both entries; ADR-065 :124-126 agrees. Source +inconsistency still recorded rather than resolved: the README says "seven wire-ups" at :171 and "six +wire-ups" at :225; the article follows `template.json`. ALL code blocks are labeled representative (the +`Coupon`/`Promotions` example is invented; the Step 6 block is an abridged shape of the generated +`Program.cs` with module names substituted). Corrections this pass: seed tally moved to the ADR's +2026-10-01 figures (136 / 11,532); smoke solution count moved to three; "two things" the scaffold leaves -> one, with the wire +contract described as shipping frozen; Step 6 rewritten to the generated host's shape (scans inside +each module's registration via `ModuleLoader`) and to the sealed pipeline (a late scan throws; only a +late hand-registered handler is silent), plus `AddMmcaApplicationPipeline`; wire-up 5 is two host +edits and its assembly half joins the silent list; `ModuleLoader` discovers modules only in the +host-named assemblies; trade-off bullets updated for the seal, `DecoratorPipelineOrderTests` and +`VerifyDecoratorPipeline`; Authorization bullet gained `IRequiresMfa`; scan list gained +integration-event handlers, projectors and appliers; all framework doc anchors moved from `CLAUDE.md` +to `AGENTS.md`; decorator anchors :117-153 -> :114-153; rollback anchors :573/:582/:584/:587 -> +:599/:608/:610/:613.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/cqrs-decorator-pipeline.md b/docs-src/articles/cqrs-decorator-pipeline.md index 6476c86d..822de058 100644 --- a/docs-src/articles/cqrs-decorator-pipeline.md +++ b/docs-src/articles/cqrs-decorator-pipeline.md @@ -2,7 +2,7 @@ > Series: MMCA.Common · Article #7 (deep-dive) · Pillar P2 · Group G05 · Rubric §1,§6,§10 · > ADR-014, ADR-079 · Status: grounded in `Website/docs-src/adr/014-cqrs-decorator-pipeline.md`, -> `Website/docs-src/adr/079-shared-http-middleware-pipeline.md`, `MMCA.Common/CLAUDE.md` +> `Website/docs-src/adr/079-shared-http-middleware-pipeline.md`, `MMCA.Common/AGENTS.md` > (the "CQRS Decorator Pipeline" and "DI Registration Sequence" sections), and > `Website/docs-src/onboarding/group-05-cqrs-pipeline.md`. No em dashes. @@ -120,9 +120,11 @@ Each position is a deliberate cost-and-correctness argument: - **Caching sits outside validation** so the cache is only touched after a valid, committed mutation. A validation failure or a rollback leaves the cache intact. - **Validation sits outside the transaction** so a malformed command never opens a database transaction. - The validating decorator resolves the registered `IValidator` and, on failure, returns a - `Result` failure tagged `ErrorType.Validation` (which the API edge maps to HTTP 400) *without ever - calling the handler*. Those validators are composed from reusable rule fragments rather than copy-pasted + The validating decorator takes every registered `IValidator`, runs them one after another + (sequentially on purpose, since a validator may reach the database through a scoped repository and a + `DbContext` is not thread-safe), and, when any of them fails, returns one `Result` failure carrying the + union of their errors, each tagged `ErrorType.Validation` (which the API edge maps to HTTP 400), + *without ever calling the handler*. Those validators are composed from reusable rule fragments rather than copy-pasted per command, a validation kit that gets its own deep-dive later in the series. On the query side the same concern sits one layer deeper, *inside* caching, for a deliberate reason: a cached entry can only exist because the same query already passed validation when that entry was produced, so re-validating @@ -302,11 +304,15 @@ fake. Cleartext HTTP/2 is exactly the gRPC-over-plaintext case that a 307 would browser-reachable request is HTTP/1.1 or HTTP/2 over TLS, so it keeps being redirected instead of being served plaintext on the strength of a forged header. -The conditional pieces are registered unconditionally and made inert by configuration: tenant -resolution and the soft-deleted-user check (which sits between the limiter and authorization so a -revoked account is rejected before any endpoint gets to authorize it) are always in the chain, each -gated by its own settings. That keeps the edge literally one shape on every host rather than a per-host permutation, so a diff -between two hosts' pipelines is empty by construction. Every REST and gRPC service host in both +The pieces that only some hosts need are registered unconditionally too. Tenant resolution is +always in the chain and stays inert unless the host called `AddMultiTenancy` and set +`Tenancy:Enabled`. The soft-deleted-user check (which sits between the limiter and authorization so a +revoked account is rejected before any endpoint gets to authorize it) has no setting at all: on every +host it answers an authenticated request with a 401 when the shared cache carries that user's +deleted marker, and only a host that registers an `ISoftDeletedUserValidator` (the one hosting +Identity) falls back to the database on a cache miss, while every other host passes the request +through. That keeps the edge literally one shape on every host rather than a per-host permutation, so +a diff between two hosts' pipelines is empty by construction. Every REST and gRPC service host in both production applications calls the method, and so does the reference app. The edge carries the same two defenses as the decorator chain it mirrors. First, **the order is @@ -332,9 +338,9 @@ The pipeline is not free, and ADR-014 names the rough edges: a seal on the service collection that every later registration method has to check. - **A new concern means a new decorator at the correct depth.** Inserting it at the wrong position can silently change semantics, as with validating inside the transaction. Adding to the pipeline requires - understanding the ordering argument, not just appending a class. That warning stopped being - hypothetical the day authorization and timeout went in: both were inserted *between* existing - neighbours, and getting either one wrong would have been a correctness bug rather than a style choice. + understanding the ordering argument, not just appending a class. Authorization and + timeout show why: both sit *between* other decorators, and placing either one wrong is a + correctness bug rather than a style choice. - **The chain is deep.** Every command walks seven decorators and every query six, even when it declares none of the markers, because each one is registered unconditionally and decides at runtime whether it has work to do. The pass-through cost of an `is`-check is small, but it is not zero, and it grows every @@ -391,132 +397,114 @@ pattern, or `dotnet add package MMCA.Common.API` and try it.* *Tags: .NET, C Sharp, Software Architecture, CQRS, Design Patterns* -*Notes: 2026-09-19 structural re-verify against MMCA.Common v1.205.0. Every anchor in this block was -re-read against current source this run; the previous ledger was replaced rather than appended to, -because three of its claims had inverted and most of its line numbers had moved. -**The query chain gained a decorator.** `ValidatingQueryDecorator` is registered between -`CachingQueryDecorator` and `TimeoutQueryDecorator`, so queries run FeatureGate -> Authorization -> -Logging -> Caching -> Validating -> Timeout -> Handler: six decorators, not five. Read off the literal -registration sequence in `AddApplicationDecorators` -(`MMCA.Common.Application/DependencyInjection.cs:117-156`; commands `:137-143`, queries `:146-151`, -remembering that Scrutor's `TryDecorate` applies in reverse, so `TimeoutQueryDecorator` at `:146` is -innermost and `FeatureGateQueryDecorator` at `:151` is outermost). The method's XML doc carries ASCII -nesting diagrams of both chains (`:63-75` commands, `:76-87` queries) and the per-position rationale -list (`:88-113`), including the query-side placement argument at `:99-103` ("On the query side it sits -INSIDE caching for a deliberate reason: a cached entry can only exist because the same query already -passed validation when that entry was first produced") and the business-failure sentence at `:110-111` -("the transaction is rolled back (atomicity over partial persistence) and cache invalidation is -skipped"). ADR-014 records the insertion in a Revision (2026-08-26) that supersedes the previous query -line and states both current chains (`Website/docs-src/adr/014-cqrs-decorator-pipeline.md:194-201`), -and `MMCA.Common/CLAUDE.md:79-81` carries the same two lines. The order is pinned by -`DecoratorPipelineOrderTestsBase` +*Notes: 2026-10-02 refresh against MMCA.Common v1.221.0. Every anchor below was re-read against +current source this run unless marked otherwise; the 2026-09-19 ledger is replaced rather than appended to, because most of +its line numbers had moved and `DependencyInjection.cs` is now split into three partial files. +**Three body corrections this run.** (1) Header: `MMCA.Common/CLAUDE.md` is a five-line `@AGENTS.md` +import, so the header cites `MMCA.Common/AGENTS.md`, where "DI Registration Sequence" is at `:72`, +"CQRS Decorator Pipeline" at `:76` and the two chain lines at `:81-82`. (2) Validation: the body said +the decorator "resolves the registered `IValidator`" (singular). +`ValidatingCommandDecorator` takes `IEnumerable> validators` +(`MMCA.Common/Source/Core/MMCA.Common.Application/UseCases/Decorators/ValidatingCommandDecorator.cs:34`), +loops over every one sequentially (`:74-84`, with the DbContext-not-thread-safe reason in the comment +at `:70-72`), accumulates the errors (`:83`) and returns one failure carrying the union (`:94`). +ADR-014 records this as the 2026-08-31 correction (`Website/docs-src/adr/014-cqrs-decorator-pipeline.md:11-12`). +The `ErrorType.Validation` and HTTP 400 parts hold: `Error.Validation(...)` at +`MMCA.Common.Application/Extensions/ValidationFailureExtensions.cs:21`, and +`[ErrorType.Validation] = StatusCodes.Status400BadRequest` at +`MMCA.Common.API/Middleware/ErrorHttpMapping.cs:22`. (3) Edge conditionals: the body said tenant +resolution and the soft-deleted-user check are each "gated by its own settings". Only tenant +resolution is: its step comment (`MMCA.Common/Source/Presentation/MMCA.Common.API/Startup/Pipeline/MiddlewarePipelineBuilder.cs:111-112`) +says it is inert unless the host called `AddMultiTenancy` and set `Tenancy:Enabled`. +`SoftDeletedUserMiddleware` (`MMCA.Common.API/Middleware/SoftDeletedUserMiddleware.cs:33`) has no +options: an unauthenticated request (no `UserId`) passes through (`:74-80`), a cached deleted marker +answers 401 on every host (`:102-108`), and the database fallback runs only when +`GetService()` resolves (`:111`), otherwise the request passes through +(`:112-118`). The paragraph is rewritten to say exactly that. +**Decorator chain (unchanged behavior, re-anchored).** `AddApplicationDecorators` is at +`MMCA.Common.Application/DependencyInjection.cs:114-153`: commands registered `:134-140` +(`TransactionalCommandDecorator` innermost at `:134`, `FeatureGateCommandDecorator` outermost at +`:140`), queries `:143-148` (`TimeoutQueryDecorator` innermost at `:143`, `FeatureGateQueryDecorator` +outermost at `:148`), `SealPipeline(services)` at `:150`. The XML doc carries the command diagram from +`:61`, the query diagram from `:74`, and the rationale list from `:86` to `:110`, including the +query-side validation placement at `:96-100` ("On the query side it sits INSIDE caching", `:98`) and +the business-failure sentence at `:107-108`. Optional profiling: `AddApplicationProfiling()` registers +`ProfilingCommandDecorator` and `ProfilingQueryDecorator` at `:162-163`. ADR-014 states both current +chains in its Revision (2026-08-26) at `:221-228`, records the shared authorization gate in its +Revision (2026-09-19) from `:367` (`Evaluate` at `:376`), and states the decorators-last scope at +`:75-76`. Order pinned by `DecoratorPipelineOrderTestsBase` (`MMCA.Common/Source/Hosting/MMCA.Common.Testing/Conformance/DecoratorPipelineOrderTestsBase.cs:38`), -whose `protected virtual` expected sequences list commands at `:49-58` and queries at `:61-69` with -`ValidatingQueryDecorator` at `:67`; the framework subclasses it without overriding either list -(`MMCA.Common/Tests/Hosting/MMCA.Common.Testing.Tests/Conformance/DecoratorPipelineOrderTests.cs`). -Both files sit under a `Conformance/` sub-folder that the previous citation predates. -**Authorization is one shared gate with two checks.** `AuthorizationCommandDecorator` asks -`AuthorizationGate.Evaluate(command, currentUser, permissionRegistry, typeof(TCommand).Name)` for a -denial and runs the inner handler when the answer is `null` -(`UseCases/Decorators/AuthorizationCommandDecorator.cs:62`); no `HasPermission` call remains in the -decorator itself. The gate (`UseCases/Decorators/AuthorizationGate.cs:19`, `Evaluate` at `:40`) grants -an `IRequiresPermission` request when `permissionRegistry.HasPermission(currentUser.Roles, ...)` or -`currentUser.User.HasPermissionClaim(...)` succeeds and otherwise returns -`Error.Forbidden("Authorization.PermissionDenied", ...)` (`:46-56`), then applies the second gate: a -request marked `IRequiresMfa` (`UseCases/Markers/IRequiresMfa.cs:28`) whose principal fails -`HasMultiFactor()` is denied with `Error.Forbidden("Authorization.MultiFactorRequired", ...)` -(`:60-68`), and the comment at `:58-59` gives the capability-first ordering reason. ADR-014 records the -same move at `:347-352`. The article's bullet previously described only the roles check and is -rewritten. **Violating the DI ordering rule is a startup exception, not a silent loss.** -`AddApplicationDecorators()` calls `SealPipeline(services)` at `DependencyInjection.cs:153`, and -`ScanModuleApplicationServices` calls `ThrowIfPipelineSealed` at `:190`; the `InvalidOperationException` -message is at `:727-731` ("anything registered now would run completely undecorated. Move this call -before AddApplicationDecorators(), or compose the whole sequence with AddMmcaApplicationPipeline(...)"). -`AddMmcaApplicationPipeline(Action?)` at `:620` runs `AddApplication()`, -invokes the configure delegate, and returns `AddApplicationDecorators()`; the `ScanModule` / `Register` -snippet in the article is that method's own XML doc example (`:613-617`). The old "silent loss of every -cross-cutting guarantee" wording in the body and the "the failure mode is quiet" trade-off bullet were -both false against this source and are corrected. Verified names and members: `ICommandHandler` and `IQueryHandler`, both with the defaulted token -(`UseCases/Contracts/ICommandHandler.cs:17`, `UseCases/Contracts/IQueryHandler.cs:17`), -`ITransactional` (`UseCases/Markers/ITransactional.cs:6`), `ICacheInvalidating` with `CachePrefix` -(`UseCases/Markers/ICacheInvalidating.cs:8,14`), `IQueryCacheable` with `CacheKey` and `CacheDuration` -(`UseCases/Markers/IQueryCacheable.cs:23,28`), `IRequiresPermission` with `Permission` -(`UseCases/Markers/IRequiresPermission.cs:34,41`), and `IHasTimeout` with `Timeout` -(`UseCases/Markers/IHasTimeout.cs:14,21`); the contracts sit under `Contracts/` and the five markers -under `Markers/`, both sub-folders newer than the previous citation. The optional `Profiling` pair is a -separate `AddApplicationProfiling()` call registering both `ProfilingCommandDecorator` and -`ProfilingQueryDecorator` (`DependencyInjection.cs:573-576`). Decorator behavior re-anchored: -`FeatureGateCommandDecorator` short-circuits with `Error.NotFoundError(...)` at `:57`; -`LoggingCommandDecorator` uses the static `Stopwatch.GetTimestamp()` (`:39`) and -`Stopwatch.GetElapsedTime()` (`:43`) APIs rather than a `Stopwatch` instance and calls `RecordDuration` -on three outcome paths, `failed` at `:49`, `completed` at `:54`, `exception` at `:76`, with the helper -at `:97`; `TimeoutCommandDecorator` (class at `:35`) treats a budget `<= TimeSpan.Zero` as "no budget" -(`:65`), cancels after the budget (`:69`), invokes the inner handler with `budget.Token` (`:73`), and -converts only its own expiry into `Error.Failure("Request.TimedOut", ...)` (`:82`) behind the filter at -`:75`; `TransactionalCommandDecorator` (class at `:20`) passes non-`ITransactional` commands through -(`:28`) and otherwise calls `unitOfWork.ExecuteInTransactionAsync` (`:31`). The transactional path is -`DbContextFactory.ExecuteInTransactionAsync` -(`MMCA.Common.Infrastructure/Persistence/DbContexts/Factory/DbContextFactory.cs:518`), which delegates -each attempt to `RunTransactionalAttemptAsync` (`:573`): the business-failure check rolls back at -`:587`, only a success reaches `TryCommit()` (called at `:591`, declared at `:640`, with -`context.Database.CommitTransaction()` at `:659`), and deferred domain events flush post-commit through -`FlushDeferredAsync` at `:600`. The behavior the article describes is unchanged; every line number in -the previous citation had moved. Cache invalidation runs only on success and outside the transaction -(`UseCases/Decorators/CachingCommandDecorator.cs:61-63`, gated on `command is ICacheInvalidating -cacheInvalidating && !string.IsNullOrWhiteSpace(cacheInvalidating.CachePrefix) && !IsFailure(result)`, -the `IsFailure` helper at `:126-127`); the internal `ReInvalidationDelay` is at `:45` and the -primary-constructor class declaration spans `:33-37` with `ICacheService` at `:35` and an optional -`ITenantContext?` at `:37`. A previous note in this block pinned a logger-less source-compat constructor -to `CachingCommandDecorator.cs:49-52`; a direct read of `:38-66` this run finds no such constructor -there, so that claim is dropped rather than re-anchored. The one real host still puts -`AddApplicationDecorators()` last: `MMCA.Helpdesk/Source/Hosts/MMCA.Helpdesk.Web/Program.cs:132`, after -`AddApplication()` at `:78`, `AddInfrastructure(builder.Configuration)` at `:79`, -`AddAPI(modulesSettings)` at `:101`, `moduleLoader.DiscoverAndRegister(...)` at `:116` and -`AddBrokerMessaging(...)` at `:130`, with the fixed-sequence comment at `:77`; ADR-014 states the scope -of the constraint at `:65-69` ("Only that decorators-last ordering is load-bearing; the relative -position of `AddInfrastructure`/`AddAPI` is not"). -HTTP-edge section: the pipeline body lives in `MiddlewarePipelineBuilder.CreateDefault()` -(`MMCA.Common/Source/Presentation/MMCA.Common.API/Startup/Pipeline/MiddlewarePipelineBuilder.cs:32-162`), -and `WebApplicationExtensions.cs` holds only the `extension(WebApplication app)` block (`:37`), the -zero-argument `UseCommonMiddlewarePipeline()` (`:48`), the -`UseCommonMiddlewarePipeline(Action)` overload (`:60`) and the private -`ApplyPipeline` both overloads route through (`:140`). Step anchors in the builder: exception handler -`:35-38`, correlation id `:39-42`, request localization `:43-48`, pre-forwarded capture `:50-63`, -forwarded headers `:65-81` (with `KnownProxies` and `KnownIPNetworks` cleared at `:77-78`), HTTPS -redirect `:83-99`, response compression `:101-103`, routing `:106`, CORS `:110`, authentication `:116`, -tenant resolution `:120`, rate limiting `:128`, soft-deleted-user filter `:136`, authorization `:140`, -output cache `:144`, JWKS `:148`, OIDC discovery `:157`, controllers `:161`. The pre-forwarded capture -step was missing from the article's order block and is added; its own comment (`:51-57`) gives the -`jwks_uri` reason. `Build()` enforces exactly four invariants and names the reason for each in the -exception it throws: pre-forwarded capture immediately before forwarded headers (`:266-269`), -authentication immediately before tenant resolution (`:271-274`), authentication precedes rate limiting -(`:276-279`, ADR-019), and forwarded headers precede the HTTPS redirect (`:281-284`, "the redirect -decision must see the proxy-reported scheme from X-Forwarded-Proto"). The article's earlier bullet -"forwarded headers ahead of anything that reads the client IP" is not one of those invariants and is -corrected: the client-IP framing belongs to the cleared proxy allow-lists at `:77-78`. The gRPC -exemption is a step predicate, `UseWhen(ctx => !MiddlewarePipelineBuilder.IsCleartextHttp2(ctx), ...)` -at `:96-98`, and the SEC-Common-44 comment at `:91-96` states it is keyed on the negotiated protocol -"not on the request's Content-Type ... which no header can fake"; the article's "matched on the request -content type" was inverted and is corrected. ADR-079 carries both the freezing and the protocol-keyed -exemption in its header (`Website/docs-src/adr/079-shared-http-middleware-pipeline.md:6-10`). The order -is frozen by `MiddlewarePipelineOrderTestsBase` -(`MMCA.Common/Source/Hosting/MMCA.Common.Testing/Conformance/MiddlewarePipelineOrderTestsBase.cs:29`), -whose `ExpectedStepNames` list (`:38-58`) carries `PreForwardedCapture` at `:43`. The previous ledger's -"nothing freezes this order" admission and its "the method takes no parameters" note were both inverted -by that base class and the configure overload, so both are dropped, along with the out-of-scope note -about ADR-079 citing `WebApplicationBuilderExtensions.cs:399`: that anchor no longer appears in the ADR. -Adopters re-read this run: `MMCA.ADC.Conference.Service/Program.cs:419`, -`MMCA.ADC.Identity.Service/Program.cs:341`, `MMCA.ADC.Engagement.Service/Program.cs:313`, -`MMCA.ADC.Notification.Service/Program.cs:260`, `MMCA.Store.Sales.Service/Program.cs:294`, -`MMCA.Store.Identity.Service/Program.cs:294`, `MMCA.Store.Catalog.Service/Program.cs:305`, and -`MMCA.Helpdesk/Source/Hosts/MMCA.Helpdesk.Web/Program.cs:142`: all eight hosts, so the body claim that -every REST and gRPC service host in both production applications plus the reference app calls the -method still holds. Rubric mapping re-anchored: `ArchitectureEvaluationCriteria.md:122` opens section 1 -(SOLID Principles), with the OCP criterion at `:128` and DIP at `:131`. The About-the-author package -figure is the published count in `MMCA.Common/FACTS.md:19` (19 packages). The marker-interface consumer -examples that earlier revisions of this block cited (`LinkUserToSpeakerCommand`, -`BulkSetInventoryCommand`, `CheckOutCommand`) were not re-read this run, so their anchors are dropped -rather than restated; the body prose they supported is generic and makes no per-file claim.* +`protected virtual` lists at `:49` (commands) and `:61` (queries, `ValidatingQueryDecorator` at +`:67`); the framework subclass +(`MMCA.Common/Tests/Hosting/MMCA.Common.Testing.Tests/Conformance/DecoratorPipelineOrderTests.cs:23`) +overrides only `ConfigureServices` (`:26`). +**Per-decorator behavior.** `FeatureGateCommandDecorator` short-circuits with `Error.NotFoundError(...)` +(`UseCases/Decorators/FeatureGateCommandDecorator.cs:57`). Both authorization decorators call +`AuthorizationGate.Evaluate` (`AuthorizationCommandDecorator.cs:62`, `AuthorizationQueryDecorator.cs:57`); +the gate is at `AuthorizationGate.cs:40`, with the permission check at `:46-56`, the MFA step-up at +`:60-68` and the capability-first comment at `:58-59` (audit-file anchors; only the `Evaluate` line +was re-read this run). `LoggingCommandDecorator` uses `Stopwatch.GetTimestamp()` (`:39`) and +`Stopwatch.GetElapsedTime()` (`:43`) and records `failed` (`:49`), `completed` (`:54`) and +`exception` (`:76`) through `RecordDuration` (`:97`). `TimeoutCommandDecorator` (`:35`) passes a +budget `<= TimeSpan.Zero` through (`:65`), calls `CancelAfter` (`:69`), runs the inner handler on +`budget.Token` (`:73`) and maps its own expiry to `Request.TimedOut` (`:82`). +`CachingCommandDecorator` (`:33`, `ICacheService` at `:35`, optional `ITenantContext?` at `:37`, +`ReInvalidationDelay` at `:45`) invalidates only when `command is ICacheInvalidating` and the result is +not a failure (`:61-63`, `IsFailure` at `:126`). `TransactionalCommandDecorator` (`:22`) passes +non-`ITransactional` commands through (`:30`) and otherwise calls +`unitOfWork.ExecuteInTransactionAsync` (`:33`). +**Transactional path.** `DbContextFactory.ExecuteInTransactionAsync` +(`MMCA.Common.Infrastructure/Persistence/DbContexts/Factory/DbContextFactory.cs:544`) runs each +attempt through `RunTransactionalAttemptAsync` (`:599`): the quoted business-failure snippet is +`:608-614` (rollback at `:613`), then `FlushEnrolledCommandsBeforeCommitAsync` (`:618`, declared +`:674`) saves enrolled internal-command rows and throws on any other unsaved tracked change, then +`TryCommit()` (called `:620`, declared `:712`, `context.Database.CommitTransaction()` at `:731`), and +deferred domain events flush post-commit through `FlushDeferredAsync` (`:634`). The pre-commit flush +is not described in the body: it does not change the three outcomes the article lists. +**DI sequence.** The pipeline-sealed guard: `ThrowIfPipelineSealed` in +`DependencyInjection.ModuleScanning.cs:49` (module scan) and `DependencyInjection.Crud.cs:80,142,193` +(CRUD helpers); the quoted `InvalidOperationException` message is at `DependencyInjection.cs:314-318`. +`AddMmcaApplicationPipeline(Action?)` is at `:207` and its XML doc +example (the article's `ScanModule` / `Register` snippet) at `:200-203`. The seal guards only the +framework registration methods; `VerifyDecoratorPipeline()` (`:244`) is the opt-in fitness check, and +the body's scoping ("every registration method that could add handlers afterwards") stays accurate. +Helpdesk wires the sequence by hand with `AddApplicationDecorators()` last: +`MMCA.Helpdesk/Source/Hosts/MMCA.Helpdesk.Web/Program.cs:132`, after `AddApplication()` `:78`, +`AddInfrastructure` `:79`, `AddAPI` `:101`, `DiscoverAndRegister` `:116`, `AddBrokerMessaging` `:130`. +Markers: `Markers/` holds eight interfaces (`ICacheInvalidating`, `IFeatureGated`, `IHasTimeout`, +`IQueryCacheable`, `IRequiresMfa`, `IRequiresPermission`, `ISharedQueryCache`, `ITransactional`); the +ones the body names are `ITransactional.cs:6`, `ICacheInvalidating.cs:8,14`, `IQueryCacheable.cs:23,28`, +`IRequiresPermission.cs:34,41`, `IHasTimeout.cs:14,21`, `IRequiresMfa.cs:28`. Handler contracts: +`UseCases/Contracts/ICommandHandler.cs:17`, `UseCases/Contracts/IQueryHandler.cs:17`. +**HTTP edge.** `MiddlewarePipelineBuilder.CreateDefault()` spans `:31-151`. Step anchors: exception +handler `:35`, correlation id `:39`, request localization `:43`, pre-forwarded capture `:50`, forwarded +headers `:65` (options from `CommonForwardedHeaders.Create()` at `:69`; `KnownProxies` and +`KnownIPNetworks` cleared at `MMCA.Common.API/Startup/CommonForwardedHeaders.cs:49-50`), HTTPS redirect +`:72` (SEC-Common-44 protocol comment `:79-84`, `UseWhen(... IsCleartextHttp2 ...)` `:85-87`, the +predicate declared `:350`), response compression `:90`, routing `:94`, CORS `:98`, authentication +`:104`, tenant resolution `:108`, rate limiting `:116`, soft-deleted-user filter `:124`, authorization +`:128`, output cache `:132`, JWKS `:136`, OIDC discovery `:145`, controllers `:149`. `Build()` (`:252`) +enforces the four invariants at `:254-257` (capture immediately before forwarded headers), `:259-262` +(authentication immediately before tenant resolution), `:264-267` (authentication precedes rate +limiting, ADR-019) and `:269-272` (forwarded headers precede the HTTPS redirect). +`WebApplicationExtensions.cs` holds the `extension(WebApplication app)` block (`:37`), both +`UseCommonMiddlewarePipeline` overloads (`:48`, `:60`) and the private `ApplyPipeline` they route +through (`:168`), alongside `UseCommonRequestLocalization` (`:73`), two `MapCultureEndpoint` overloads +(`:102`, `:115`) and `IsLocalRedirectTarget` (`:158`). The order is frozen by +`MiddlewarePipelineOrderTestsBase` (`MMCA.Common/Source/Hosting/MMCA.Common.Testing/Conformance/MiddlewarePipelineOrderTestsBase.cs:29`), +`ExpectedStepNames` at `:38` with `PreForwardedCapture` at `:43`. ADR-079's header records the +protocol-keyed exemption and the `CommonForwardedHeaders.Create()` factory +(`Website/docs-src/adr/079-shared-http-middleware-pipeline.md:9-16`). Adopters re-read this run: +`MMCA.ADC.Conference.Service/Program.cs:442`, `MMCA.ADC.Identity.Service/Program.cs:345`, +`MMCA.ADC.Engagement.Service/Program.cs:320`, `MMCA.ADC.Notification.Service/Program.cs:262`, +`MMCA.Store.Sales.Service/Program.cs:299`, `MMCA.Store.Identity.Service/Program.cs:299`, +`MMCA.Store.Catalog.Service/Program.cs:320`, `MMCA.Helpdesk/Source/Hosts/MMCA.Helpdesk.Web/Program.cs:142`. +**Mapping.** Rubric sections re-anchored in `Website/docs-src/governance/ArchitectureEvaluationCriteria.md`: +section 1 (SOLID) `:122`, section 6 (CQRS and event-driven) `:229`, section 10 (Messaging and +integration) `:329`. Section 10 matches the README mapping row but the body carries no messaging +content; the ADR cell lists 014 and 079 while the README row (`Website/docs-src/articles/README.md:17`) +lists 014/031/079. Both cells are left unchanged this run and raised for an owner decision. Dropped +from the previous ledger: the About-the-author package note (`FACTS.md:19` reads 22 packages, and the +body has no About-the-author section) and the "five markers" count (eight today).* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/database-per-service.md b/docs-src/articles/database-per-service.md index 711bc768..ca6805d5 100644 --- a/docs-src/articles/database-per-service.md +++ b/docs-src/articles/database-per-service.md @@ -3,8 +3,8 @@ > Series: MMCA.Common · Article #10 (cornerstone deep-dive) · Pillar P3 · Group G07 · Rubric §7,§8 · > ADR-006, ADR-073, ADR-113 · Status: grounded in `Website/docs-src/adr/006-database-per-service.md`, > `Website/docs-src/adr/073-multi-tenancy-model.md`, -> `Website/docs-src/adr/113-postgresql-as-a-first-class-engine.md`, `MMCA.Common/CLAUDE.md` (the -> "Multi-Database Strategy" and "Outbox Pattern" sections), and +> `Website/docs-src/adr/113-postgresql-as-a-first-class-engine.md`, `MMCA.Common/AGENTS.md` (the +> "Multi-Database Strategy (database per service)" and "Outbox and Internal Commands" sections), and > `Website/docs-src/onboarding/group-07-persistence-ef-core.md`. No em dashes. **Subtitle:** One `DbContext` class. Many databases. A host with no extra configuration behaves @@ -119,14 +119,14 @@ monolith or a set of isolated services depending on what is in `appsettings.json // MONOLITH: no DataSources section. Every logical source collapses onto Default. // One database, one change tracker, FKs intact. Identical to a plain single-DB app. { - "ConnectionStrings": { "Default": "Server=...;Database=App;..." } + "ConnectionStrings": { "SQLServerConnectionString": "Server=...;Database=App;..." } } // DATABASE-PER-SERVICE: each module points at its own physical database. -// CrossDataSourceDegradeConvention now degrades any cross-module relationship to a scalar FK, +// CrossDataSourceDegradeConvention degrades any cross-module relationship to a scalar FK, // and the per-source OutboxProcessor only ever drains its own OutboxMessages table. { - "ConnectionStrings": { "Default": "Server=...;Database=App;..." }, + "ConnectionStrings": { "SQLServerConnectionString": "Server=...;Database=App;..." }, "DataSources": { "Conference": { "SQLServerConnectionString": "Server=...;Database=App_Conference;..." }, "Engagement": { "SQLServerConnectionString": "Server=...;Database=App_Engagement;..." } @@ -155,8 +155,11 @@ exists. The predicate embeds the context itself as a typed constant rather than tenant string, and that detail is load-bearing: EF rewrites a context-typed constant to the executing context at query-compile time, so **one cached model per source serves every tenant** and the tenant value travels as a SQL parameter instead of baking a compiled model per customer. A null tenant is -the system context and sees everything, which is what keeps the outbox loop, the migration runner, -and the seeders working: they have no request, so they have no claim. +the system context and sees everything, which is what keeps the outbox processor, the seeders, and +the retention jobs working: they have no request, so they have no claim. Outbox delivery narrows +again per row: each `OutboxMessage` records the tenant its raising request resolved to, and the +processor restores that tenant (with the user, roles, and correlation id) onto a fresh scope for each +row before dispatch, so a handler reads and writes the same tenant's rows the original request did. Resolution is claim first, then header, and it fails closed. `TenantResolutionMiddleware` runs immediately after `UseAuthentication` (a claim-first order needs `HttpContext.User` already @@ -201,8 +204,9 @@ is unchanged, and one compiled model still serves every tenant's database: Because an override changes where a source points rather than what a source is, the pieces around it keep working unchanged. The entity registry, the migrations assembly, and the per-source outbox all survive: the outbox simply enumerates `(source, tenant)` pairs and drains one extra unit per tenant -that keeps its own copy of a source, with **no `OutboxMessage` schema change** at all (no `TenantId` -column, so no forced migration for every consumer on upgrade). The per-scope context cache gains a +that keeps its own copy of a source. Routing never reads the row: the targets come from those +configured pairs, and the nullable `TenantId` an `OutboxMessage` carries exists only so delivery can +restore the raising tenant (a row with no tenant stays valid). The per-scope context cache gains a guard that throws if the scope's tenant changes after a routed context exists, which restates one-scope-one-tenant where it would otherwise break silently. Cache entries get their isolation one layer up, in the caching decorators, since a singleton cache cannot observe scoped state; that @@ -289,173 +293,84 @@ design, or install it and watch the single-database case behave like a plain mon *Tags: .NET, C Sharp, Software Architecture, Data Engineering, EF Core* -*Notes: 2026-06-30 evidence-audit fix: corrected "exactly one concrete relational context class" to -"one concrete context class per engine" (`SQLServerDbContext`/`SqliteDbContext`/`CosmosDbContext`, -each a sealed subclass of `ApplicationDbContext`). Verified at -`Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/Factory/PhysicalDbContextFactory.cs:41-47` -(the `Create` switch instantiates one of three concrete contexts by `DataSource` engine) and -`Website/docs-src/adr/006-database-per-service.md:5-6,24-31` (clarified 2026-06-27: one sealed context class per -engine; the forbidden split is per-module, not per-engine). The article's real point is preserved: -no per-module `ConferenceDbContext`/`EngagementDbContext` split, and the four-SQL-database deployment -is still served by the single `SQLServerDbContext` class. -2026-07-21 evidence-audit fix (line anchors re-verified 2026-07-26): corrected -`EntityDataSourceRegistry` from "reflects over the configuration assemblies once, eagerly" to -lazy-on-first-access with a single rescan on a lookup miss. Re-read today at -`Source/Core/MMCA.Common.Infrastructure/Persistence/DataSources/EntityDataSourceRegistry.cs:16` -("Built lazily on first access and rescanned once on a lookup miss"), the volatile `Snapshot` field -built inside a lock in `GetOrBuildSnapshot()` (lines 31, 84-96), the miss rescan in -`TryGetDataSourceKey`/`RescanIfAssembliesChanged` (lines 63, 98-113), and the fail-fast conflict throw -in `BuildSnapshot` (lines 143-148). The behavior is unchanged; the anchors shifted about seven to nine -lines because `GetPhysicalSourcesInUse()` and its remarks (lines 74-82) were added above them, so the -outbox poll cycle reads a precomputed physical-source list off the snapshot instead of re-projecting -it per call. The load-bearing point holds: one complete pass over every configuration, independent of -any model build, fail-fast when two configs claim one entity for different databases. -Also re-confirmed 2026-07-26: the `Create` switch on `key.Engine` still instantiates exactly one of -three concrete contexts at -`Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/Factory/PhysicalDbContextFactory.cs:41-47` -(never-pooled rationale in its doc-comment, lines 10-14), and -`Website/docs-src/adr/006-database-per-service.md:5-6,24-31` still carries the 2026-06-27 -one-sealed-context-class-per-engine clarification. -Verified type/behavior names: `SQLServerDbContext`, `PostgreSQLDbContext`, `SqliteDbContext`, -`CosmosDbContext`, `ApplicationDbContext`, `DataSourceKey`, `DataSource` (engine enum), `DataSourceResolver`, -`EntityDataSourceRegistry`, `DataSourceService`, `DataSourceModelCacheKeyFactory`, -`PhysicalDbContextFactory` (never pooled), `DbContextFactory` (scoped, one per `DataSourceKey`), -`CrossDataSourceDegradeConvention`, `INavigationPopulator`, `OutboxMessages`/`OutboxProcessor`, -`[UseDatabase]`/`[UseDataSource]`, the `Default`-source collapse. Honest gaps: cross-source -transactions are per-source best-effort sequential (no 2PC); consistency across sources is eventual -via the outbox; the JSON config block is representative of the `DataSources` appsettings shape rather -than a verbatim file. The repo URL is marked for final verification before publishing. -2026-08-14 addition, "The third axis: which customer owns the row" (ADR-073, verified against source -today): the tenant filter is a **second named** filter, `TenantFilterName = "Tenant"` -(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/ApplicationDbContext.cs:360`) -beside `SoftDeleteFilterName = "SoftDelete"` (`:357`), applied by `ApplyTenantFilters` (`:394`, called -from `OnModelCreating` at `:307`), which requires the column and caps it at 64 characters (`:411-414`, -`TenantIdMaxLength` at `:366`), indexes it on every non-Cosmos engine (`:419-422`), builds -`e => CurrentTenantId == null || EF.Property(e, "TenantId") == CurrentTenantId` (`:435-439`) -and calls `HasQueryFilter(TenantFilterName, filter)` (`:441`); the doc-comment at `:375-386` states both -the AND composition and the one-cached-model-per-source consequence of embedding the context constant -(`:401`). Resolution: `TenantResolutionMiddleware` -(`MMCA.Common/Source/Presentation/MMCA.Common.API/Middleware/TenantResolutionMiddleware.cs:36`), inert -unless `settings.Enabled` (`:62-66`), claim-then-header resolve (`:68-73`), and fail-closed reject when -`RequireTenant` (`:75-83`); defaults `ClaimType = "tenant_id"` (`Persistence/Tenancy/TenancySettings.cs:83`), -`HeaderName = "X-Tenant-Id"` (`:89`), `RequireTenant = true` (`:96`), and the claim-then-header default order (`:56-57`, applied through -`EffectiveResolutionOrder` at `:76-77` when the bound list is empty). -Writes: `TenantSaveChangesInterceptor` -(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/Interceptors/TenantSaveChangesInterceptor.cs:36`), -throwing `CrossTenantWriteException` for an untenanted insert (`:110`) and for a mismatch on insert or -update/delete (`:123`, `:150`); registered `TryAddSingleton` beside the audit and domain-event -interceptors at `MMCA.Common/Source/Core/MMCA.Common.Infrastructure/DependencyInjection.cs:63`, and wired -BETWEEN the two in `OnConfiguring` (`ApplicationDbContext.cs:239-247`). Read narrowing: one shared -`SoftDeleteFilterOnly` field -(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/Repositories/EFReadRepository.cs:33`) -passed to `IgnoreQueryFilters` at six call sites (`:52`, `:81`, `:161`, `:238`, `:252`, `:319`, the last -inside `BaseQueryFor` for specification-driven reads). -DB-per-tenant: `DbContextFactory` clones the resolver's `PhysicalDataSource` per override and creates -through the second `IPhysicalDbContextFactory.Create(key, physical)` overload keeping the same -`DataSourceKey` -(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/Factory/DbContextFactory.cs:22-24`, -`:94-97`, `ResolveTenantOverride` at `:148-161`), assigns a live accessor rather than a copied value -(`:139`), and throws when a routed context's scope changes tenant (`:176-194`). Outbox: -`GetOutboxTargets()` expands `(source, tenant)` pairs -(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/Outbox/OutboxProcessor.cs:199-200`, -rationale `:193-198`) and calls `ITenantContext.SetTenant` inside the per-source scope before the context -is obtained (`:264`, inside `if (target.TenantId is { } tenantId)` at `:262-265`); `OutboxMessage.cs` -carries **no** `TenantId` member (grep: zero matches), so -there is no schema change. Registration surface: `AddMultiTenancy(configuration)` on top of -`AddInfrastructure` at `MMCA.Helpdesk/Source/Hosts/MMCA.Helpdesk.Web/Program.cs:73`, with the two demo -tenants (`acme` shared-schema, `globex` overriding `Default` to `Helpdesk_Globex`) at -`MMCA.Helpdesk/Source/Hosts/MMCA.Helpdesk.Web/appsettings.json:29-45`. Adoption and the two honest costs -(a forgotten `ITenantEntity` marker leaks rows silently; fail-closed 400s every non-excluded route when -the claim disappears) come from `Website/docs-src/adr/073-multi-tenancy-model.md:148-154` and `:192-194`, -`:189-191`. The tenant-prefixed cache keys are deliberately out of scope here (covered with the caching -pattern); the JSON block is representative of the `Tenancy` appsettings shape, closest to Helpdesk's. -2026-08-15 addition, per-source commit outcomes (MMCA.Common PR #248, verified against source today): -the "No distributed transactions" bullet is unchanged in substance (still one transaction per source, -still sequential best-effort commits, still no two-phase commit, still the outbox as reconciler) and -gains only the observability sentence. `DbContextFactory.TryCommit` -(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/Factory/DbContextFactory.cs:623`) -snapshots the enlisted transactional contexts in commit order (`:629-632`), commits them one at a time -in a loop (`:636-652`), and on a throw partitions them at the failure index into already-committed, the -throwing source, and the not-yet-committed remainder (`:646-648`) before `AbandonAfterCommitFailure` -(`:664`) best-effort rolls back that remainder. The failure is still RETURNED rather than thrown so the -execution strategy cannot re-run the operation against a possibly-durable commit (`:552-555`, -`:574-576`), and is rethrown past the strategy at `:542-543`. The four-argument -`TransactionCommitAmbiguousException` constructor -(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/Factory/TransactionCommitAmbiguousException.cs:57-69`) -exposes `CommittedSources` (`:76`), `AmbiguousSource` (`:85`), and `RolledBackSources` (`:93`), and -`ComposeMessage` (`:99-118`) appends `" Per-source outcome: ..."` to the default ambiguity text (`:117`), -omitting any empty group (`:106-113`). A single-source host, which is every host today, reports that one -source as `AmbiguousSource` with the other two lists empty (`:81-83`, restated in the -`ExecuteInTransactionAsync` remarks at `DbContextFactory.cs:493-501`). No contradiction found: the -summary-level restatements (the "What we covered" paragraph and the honest-gaps line above) remain -accurate as written and were left untouched. -2026-08-19 line-anchor refresh (verified against source today, MMCA.Common HEAD 0b19b56, v1.154.0): -the read-narrowing count in the body and in this ledger corrects from five to **six** call sites. -`SoftDeleteFilterOnly` is now declared at -`EFReadRepository.cs:33` (was `:29`) and passed to `IgnoreQueryFilters` at `:52`, `:81`, `:161`, -`:238`, `:252`, and a sixth site at `:319` inside `BaseQueryFor`, which serves specification-driven -reads and was not covered by the prior five-site count at all. Outbox line anchors also moved: -`GetOutboxTargets()` is now at `OutboxProcessor.cs:199-200` (rationale doc-comment `:193-198`, was -`:181-182`/`:175-180`), and the `ITenantContext.SetTenant` call is now at `:264`, inside -`if (target.TenantId is { } tenantId)` at `:262-265` (was `:244-246`), still before the context is -obtained at `:267-268`. The `PhysicalDbContextFactory` `Create` switch cited earlier in this ledger is -now at `PhysicalDbContextFactory.cs:41-47` (method body `:37-48`, was `:38-44`/`:40-42`); the -never-pooled rationale doc-comment (`:10-14`) is unchanged. All six moves are line-anchor drift only: -behavior, type names, and the framework's shape are unchanged. -2026-09-19 evidence-audit refresh (verified against source today, MMCA.Common 90ffa7a, v1.205.0): a -fourth engine, and eight read-narrowing call sites. `DataSource` declares four members, `CosmosDB`, -`Sqlite`, `SQLServer` and `PostgreSQL`, the last appended rather than inserted alphabetically so the -three shipped ordinals keep their values -(`MMCA.Common/Source/Core/MMCA.Common.Application/Interfaces/Infrastructure/Persistence/IDataSourceService.cs:6-23`), -and the `Create` switch instantiates one of four sealed contexts, `DataSource.PostgreSQL => new -PostgreSQLDbContext(...)` among them -(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/Factory/PhysicalDbContextFactory.cs:44-50`, -was `:41-47` when the switch had three arms), with the class itself at -`.../Persistence/DbContexts/PostgreSQLDbContext.cs:23` (`public sealed class PostgreSQLDbContext`) and -its configuration base class at -`.../Persistence/Configuration/EntityTypeConfiguration/EntityTypeConfigurationPostgreSQL.cs:22`. -`Website/docs-src/adr/113-postgresql-as-a-first-class-engine.md:1-7` accepts the engine (2026-09-09) -and extends ADR-006 and ADR-018, so the header blockquote cites ADR-113 alongside ADR-006 and ADR-073. -The body's context-class list, the configuration-base-class list and the next-article teaser all carry -the fourth engine. -Read narrowing corrects from six to **eight** call sites: `SoftDeleteFilterOnly` is declared at -`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/Repositories/EFReadRepository.cs:40` -(was `:33`) and passed to `IgnoreQueryFilters` at `:57`, `:86`, `:107`, `:203`, `:327`, `:404`, `:418` -and `:501` (grep-confirmed, eight matches). The behavior is unchanged: the array still names the -`SoftDelete` filter only, so the tenant filter survives a soft-delete-inclusive read. -Tenant-filter anchors moved roughly 100 to 150 lines and one behavior sharpened, all in -`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/ApplicationDbContext.cs`: -`SoftDeleteFilterName` `:469` (was `:357`), `TenantFilterName` `:472` (was `:360`), -`TenantIdMaxLength = 64` `:478` (was `:366`), `OnModelCreating` `:411` calling `ApplyTenantFilters` at -`:414` (was `:307`), the `ApplyTenantFilters` body `:509-569` (was `:394`), the `EF.Property` predicate -built at `:554-565` (was `:435-439`) and `HasQueryFilter(TenantFilterName, filter)` at `:567` (was -`:441`). Not drift but a refinement the body now states: on every non-Cosmos engine the per-entity -index widens to (`TenantId`, `IsDeleted`) when the entity also implements `IAuditableEntity`, and -stays single-column otherwise (`:538-548`, rationale doc-comment `:531-537`), because the two named -filters compose by AND into `TenantId = @tenant AND IsDeleted = 0`. -Interceptor wiring is unchanged and re-anchored: `TryAddSingleton()` at -`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/DependencyInjection.cs:85` (was `:63`), still added -between the audit and domain-event interceptors in `OnConfiguring` -(`ApplicationDbContext.cs:295-307`, the `AddInterceptors(auditInterceptor, tenantInterceptor, -domainEventInterceptor)` call at `:302`; was `:239-247`). -The outbox processor moved into a `Processing/` subfolder and is now -`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/Outbox/Processing/OutboxProcessor.cs` -(the bare `Outbox/OutboxProcessor.cs` path no longer exists): `GetOutboxTargets()` at `:207` (was -`:199-200`), the `if (target.TenantId is { } tenantId)` guard at `:270` and the -`ITenantContext.SetTenant` call at `:272` (was `:262-265` and `:264`). -`DbContextFactory` anchors -(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/Factory/DbContextFactory.cs`): -`TryCommit` at `:640` (was `:623`), called at `:591`, and `ResolveTenantOverride` at `:162` (was -`:148-161`), called at `:102`; `AbandonAfterCommitFailure` is still invoked at `:664` as the ledger -already recorded. -Path correction rather than a move: `TenancySettings.cs` lives at -`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/Tenancy/TenancySettings.cs`, not under -a top-level `Settings/` folder; the defaults it carries are re-verified and unchanged (`ClaimType = -"tenant_id"` `:83`, `HeaderName = "X-Tenant-Id"` `:89`, `RequireTenant = true` `:96`, -`EffectiveResolutionOrder` `:76-77`). Finally, -`services.AddMultiTenancy(builder.Configuration);` is at -`MMCA.Helpdesk/Source/Hosts/MMCA.Helpdesk.Web/Program.cs:92` (was `:73`), still unconditional on top of -`AddInfrastructure`.* +*Notes: 2026-10-02 evidence refresh (verified against source today, MMCA.Common v1.221.0). This +entry replaces the earlier per-run ledger (2026-06-30, 2026-07-21/26, 2026-08-14, 2026-08-15, +2026-08-19, 2026-09-19 refreshes), whose line anchors had drifted; the current anchors follow. Paths +under `Infrastructure/` mean `MMCA.Common/Source/Core/MMCA.Common.Infrastructure/`. +Fixed this run (three body claims plus the header): +(1) The per-tenant outbox paragraph said there was no `OutboxMessage` schema change and no `TenantId` +column. Wrong: `public string? TenantId { get; init; }` is at +`Infrastructure/Persistence/Outbox/OutboxMessage.cs:93` (doc-comment `:88-92`: restored around +delivery, null for a tenant-less host and for rows written before the column existed), filled from the +raising scope's origin at `:144`, and mapped at `Infrastructure/Persistence/DbContexts/ApplicationDbContext.cs:681`. +`Website/docs-src/adr/073-multi-tenancy-model.md:322-329` (Revision 2026-10-01) retracts the same +wording in the ADR. Routing still does not depend on the column: `GetOutboxTargets()` at +`Infrastructure/Persistence/Outbox/Processing/OutboxProcessor.cs:141-142` (rationale `:134-140`) returns +the `(source, tenant)` targets, and `ProcessSourceAsync` opens its scope through +`scopeFactory.CreateTenantScope(target)` at `:181`, which sets the tenant before the context is +obtained (`Infrastructure/Persistence/DataSources/TenantDataSourceTargets.cs:92-100`). The body now +says the column exists only so delivery can restore the tenant. +(2) The system-context sentence named "the outbox loop, the migration runner, and the seeders". The +`ApplicationDbContext.ApplyTenantFilters` remarks (`ApplicationDbContext.cs:508-510`) name the outbox +processor, the seeders and the retention jobs, so the sentence follows that list (the migration runner +is not named in source; removed). Added the per-row delivery behavior: `DispatchMessagesAsync` remarks +`OutboxProcessor.cs:476-485` (captured user, roles, tenant and correlation id restored onto a FRESH +scope per row), the row scope at `:509` and `AmbientOrigin.Restore(..., message.TenantId, ...)` at +`:514-520` (tenant argument `:518`). +(3) The configuration block used an invented `ConnectionStrings:Default` key. The bound top-level key +is `SQLServerConnectionString` +(`Infrastructure/Persistence/DataSources/ConnectionStringSettings.cs:43`, plus +`SQLServerMigrationsAssembly` `:49`), as Helpdesk configures it +(`MMCA.Helpdesk/Source/Hosts/MMCA.Helpdesk.Web/appsettings.json:46-48`); the per-source entry key +`SQLServerConnectionString` is `Infrastructure/Persistence/DataSources/DataSourceEntrySettings.cs:56`. +(4) Header: `MMCA.Common/CLAUDE.md` is a stub importing `AGENTS.md`; the sections are +`MMCA.Common/AGENTS.md:107` ("Multi-Database Strategy (database per service)") and `:119` ("Outbox and +Internal Commands"). There is no "Outbox Pattern" section. +Re-confirmed, unchanged in substance: one sealed context per engine (`DataSource` enum at +`MMCA.Common/Source/Core/MMCA.Common.Application/Interfaces/Infrastructure/Persistence/IDataSourceService.cs:6`, +four members; `Infrastructure/Persistence/DbContexts/PostgreSQLDbContext.cs:23`), created without a +switch through `DataSourceEngines.For(key.Engine).CreateDbContext(...)` at +`Infrastructure/Persistence/DbContexts/Factory/PhysicalDbContextFactory.cs:32` (never-pooled rationale +`:14-16`); `DataSourceModelCacheKeyFactory` (`Infrastructure/Persistence/DbContexts/DataSourceModelCacheKeyFactory.cs:16`, +`Create` `:19`, wired by `ReplaceService` at `ApplicationDbContext.cs:350`); `EntityDataSourceRegistry` +lazy build plus one rescan (`Infrastructure/Persistence/DataSources/EntityDataSourceRegistry.cs:16`), +key derivation `:172-176`, fail-fast conflict `:145`; `DataSourceResolver` default collapse +(`Infrastructure/Persistence/DataSources/DataSourceResolver.cs:320-324`); registrations +`TryAddScoped` and +`TryAddSingleton` at +`Infrastructure/DependencyInjection.cs:108-109`; `CrossDataSourceDegradeConvention` collapse no-op +remark at `Infrastructure/Persistence/Conventions/CrossDataSourceDegradeConvention.cs:27-28`. +Tenancy anchors (all `ApplicationDbContext.cs` unless named): `SoftDeleteFilterName` `:474`, +`TenantFilterName` `:477`, `TenantIdMaxLength = 64` `:483`, `OnModelCreating` `:416` calling +`ApplyTenantFilters` `:419`, its body from `:514` with `HasQueryFilter(TenantFilterName, filter)` at +`:572`; interceptors added as `AddInterceptors(auditInterceptor, tenantInterceptor, +domainEventInterceptor)` at `:307`; `TryAddSingleton()` at +`Infrastructure/DependencyInjection.cs:70`. `TenantSaveChangesInterceptor` +(`Infrastructure/Persistence/Interceptors/TenantSaveChangesInterceptor.cs:36`) throws +`CrossTenantWriteException` for an unresolved-tenant insert (`:110`) and on a mismatch (`:123`, `:150`). +`TenantResolutionMiddleware` (`MMCA.Common/Source/Presentation/MMCA.Common.API/Middleware/TenantResolutionMiddleware.cs:36`) +is inert unless enabled (`:62`), passes through when `RequireTenant` is off (`:75`) and otherwise +answers 400 (`:133`); it is registered right after `UseAuthentication` +(`MMCA.Common/Source/Presentation/MMCA.Common.API/Startup/Pipeline/MiddlewarePipelineBuilder.cs:105`, +`:113`); `RequireTenant = true` default at +`Infrastructure/Persistence/Tenancy/TenancySettings.cs:96`. Read narrowing: `SoftDeleteFilterOnly` at +`Infrastructure/Persistence/Repositories/EFReadRepository.cs:41`, passed to `IgnoreQueryFilters` at +eight sites (`:58`, `:87`, `:108`, `:204`, `:394`, `:471`, `:485`, `:582`; grep-confirmed). +DB-per-tenant: `ResolveTenantOverride` at +`Infrastructure/Persistence/DbContexts/Factory/DbContextFactory.cs:168`, called at `:104`; +`GuardRoutedTenantUnchanged` throws at `:201-210`. Transactions: `ExecuteInTransactionAsync` at +`DbContextFactory.cs:544`, `TryCommit` `:712` (called `:620`), `AbandonAfterCommitFailure` invoked +`:736` (declared `:753`); `TransactionCommitAmbiguousException` +(`Infrastructure/Persistence/DbContexts/Factory/TransactionCommitAmbiguousException.cs`) exposes +`CommittedSources` `:76`, `AmbiguousSource` `:85`, `RolledBackSources` `:93`, and appends +`" Per-source outcome: ..."` at `:117`. Registration: `services.AddInfrastructure` at +`MMCA.Helpdesk/Source/Hosts/MMCA.Helpdesk.Web/Program.cs:79`, `services.AddMultiTenancy` at `:92`; +the two demo tenants (`acme` shared, `globex` overriding `Default` to `Helpdesk_Globex`) at +`MMCA.Helpdesk/Source/Hosts/MMCA.Helpdesk.Web/appsettings.json:29-45`. ADR-073 adoption and the two +honest costs: `Website/docs-src/adr/073-multi-tenancy-model.md:201-206` and `:246-250`. +Honest gaps: both JSON blocks are representative shapes, not verbatim files (Helpdesk's real +`Tenancy` block also sets `RequireTenant: false`, `ResolutionOrder`, `ClaimType` and `HeaderName`); +cache-key tenant isolation is deliberately left to the caching-pattern article.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/device-capability-abstraction.md b/docs-src/articles/device-capability-abstraction.md index 9b38fb91..598c1fc4 100644 --- a/docs-src/articles/device-capability-abstraction.md +++ b/docs-src/articles/device-capability-abstraction.md @@ -1,6 +1,6 @@ # One Blazor UI, two hosts: a device-capability layer that stays resolvable everywhere -> Series: MMCA.Common · Article #42 (deep-dive) · Pillar P2,P5 · Group G26 · Rubric §18 · ADR-042 (+043) · +> Series: MMCA.Common · Article #42 (deep-dive) · Pillar P2,P5 · Group G27 · Rubric §18 · ADR-042 (+043) · > Status: grounded in `Website/docs-src/adr/042-device-capability-abstraction.md`, > `Website/docs-src/adr/043-mobile-deep-links-and-native-oauth-callback.md`, > `Website/docs-src/onboarding/group-26-device-capability-layer.md`, and the real contracts under @@ -19,7 +19,7 @@ The naive fix is a platform check. A component asks "am I running on MAUI?" and ## The MMCA answer: one small contract per capability, chosen per host -There is no god `IDeviceCapabilities` interface. That was a deliberate rejection: an aggregate device service forces every head to implement everything, and every new capability becomes a breaking change to a type everyone depends on. Instead the framework defines one small interface per capability, all living under `Source/Presentation/MMCA.Common.UI/Services/Capabilities/` (`Website/docs-src/adr/042-device-capability-abstraction.md:33`), 24 capability contracts in all. +There is no god `IDeviceCapabilities` interface. That was a deliberate rejection: an aggregate device service forces every head to implement everything, and every new capability becomes a breaking change to a type everyone depends on. Instead the framework defines one small interface per capability, all living under `Source/Presentation/MMCA.Common.UI/Services/Capabilities/` (`Website/docs-src/adr/042-device-capability-abstraction.md:34`), 24 capability contracts in all. Each contract is a few methods, shaped so failure is a value, not an exception: @@ -41,7 +41,7 @@ There are three flavors of default for absent hardware, and picking the right on 2. **Constant stub.** `AlwaysOnlineConnectivityStatusService` (`DeviceStatus/AlwaysOnlineConnectivityStatusService.cs:7`) hard-codes `IsOnline => true` and never raises its event. That is not laziness: it is *correct* for Blazor Server, where a lost connection tears down the circuit itself, so the reconnect overlay already covers the offline case and a connectivity service would be redundant. 3. **Neutral local state.** `InMemoryDevicePreferences` (`DeviceStorage/InMemoryDevicePreferences.cs:10`) is registered scoped, not singleton, so the Blazor Server fallback holds per-circuit (per-user) state and never leaks one user's preferences into another's. -A fourth kind is not a fallback at all. For two contracts the shared default *is* the real implementation, so no head replaces it: `DeepLinkDispatcher` (registered at `Services/Capabilities/DependencyInjection.cs:78`) and `AppLifecycleNotifier` (at `:82`), which the MAUI package feeds from the native window rather than overriding. That is why `AddMauiDeviceCapabilities` natively overrides 20 of the 24 contracts rather than all of them (`Website/docs-src/adr/042-device-capability-abstraction.md:47-52`). +A fourth kind is not a fallback at all. For two contracts the shared default *is* the real implementation, so no head replaces it: `DeepLinkDispatcher` (registered at `Services/Capabilities/DependencyInjection.cs:78`) and `AppLifecycleNotifier` (at `:82`), which the MAUI package feeds from the native window rather than overriding. That is why `AddMauiDeviceCapabilities` natively overrides 20 of the 24 contracts rather than all of them (`Website/docs-src/adr/042-device-capability-abstraction.md:46-53`). The payoff: a head that knows nothing about capabilities keeps working. It gets share-returns-false, haptics-do-nothing, always-online, and every component degrades gracefully with zero host changes. That is the same inert-by-default posture the framework's notification layer takes. @@ -69,15 +69,15 @@ builder.UseMauiDeviceCapabilities(); // native share sheet, ha Three hosts, one shared component set, and the only difference is which one line ran after `AddUIShared`. A component that injects `IShareService` gets `NullShareService` on a forgetful host, `BrowserShareService` on the web, and `MauiShareService` on the phone, and it wrote none of that branching. -## The ninth package, and why it lives outside the solution +## The eleventh package, and why it lives outside the solution -The native adapters cannot ship in `MMCA.Common.UI`, because that package must stay WebAssembly-compatible. They ship in `MMCA.Common.UI.Maui`, the ninth of the framework's nineteen NuGet packages and its one MAUI-target exception. It multi-targets `net10.0-android/ios/maccatalyst/windows`, references `MMCA.Common.UI` plus `Microsoft.Maui.Controls` and `Plugin.LocalNotification`, and stays *out* of `MMCA.Common.slnx` (`Website/docs-src/adr/042-device-capability-abstraction.md:81`). +The native adapters cannot ship in `MMCA.Common.UI`, because that package must stay WebAssembly-compatible. They ship in `MMCA.Common.UI.Maui`, the eleventh of the framework's twenty-two NuGet packages and its one MAUI-target exception. It multi-targets `net10.0-android/ios/maccatalyst/windows`, references `MMCA.Common.UI` plus `Microsoft.Maui.Controls` and `Plugin.LocalNotification`, and stays *out* of `MMCA.Common.slnx` (`Website/docs-src/adr/042-device-capability-abstraction.md:82`). -That exclusion is not cosmetic. MMCA.Common's CI and release pipelines run on ubuntu, which cannot build MAUI target frameworks at all, and the nineteen packages release in lockstep. So the MAUI package is built and packed by dedicated windows CI jobs (`build-maui`, a required gate, and `publish-maui`, under the same tag and SBOM discipline), the same mechanism that keeps the UI gallery and E2E projects out of the fast ubuntu unit run. Its layer rule is "UI plus Shared only," enforced at compile time; it is deliberately absent from the ubuntu runtime architecture map because its assemblies cannot even load there. +That exclusion is not cosmetic. MMCA.Common's CI and release pipelines run on ubuntu, which cannot build MAUI target frameworks at all, and the twenty-two packages release in lockstep. So the MAUI package is built and packed by dedicated windows CI jobs (`build-maui`, a required gate, and `publish-maui`, under the same tag and SBOM discipline), the same mechanism that keeps the UI gallery and E2E projects out of the fast ubuntu unit run. Its layer rule is "UI plus Shared only," enforced at compile time; it is deliberately absent from the ubuntu runtime architecture map because its assemblies cannot even load there. ## Deep links: one funnel, no translation table -The most elegant part is navigation. A notification tap, a home-screen app action, an app link, a scanned QR code: all four are native events that need to land on a Blazor route. They funnel through one singleton, `IDeepLinkDispatcher` (`Services/Capabilities/Navigation/IDeepLinkDispatcher.cs:10`), whose default `DeepLinkDispatcher` (`Services/Capabilities/Navigation/DeepLinkDispatcher.cs:9`) either raises `RouteRequested` live when a listener is attached, or buffers the most recent route (capacity one, guarded by a `Lock`) so a cold-start tap survives until the router renders. The `DeepLinkListener.razor` component in the shared layout drains that buffer after first render and navigates. +The most elegant part is navigation. A notification tap, a home-screen app action, an app link, a scanned QR code: all four are native events that need to land on a Blazor route. They funnel through one singleton, `IDeepLinkDispatcher` (`Services/Capabilities/Navigation/IDeepLinkDispatcher.cs:10`), whose default `DeepLinkDispatcher` (`Services/Capabilities/Navigation/DeepLinkDispatcher.cs:11`) either raises `RouteRequested` live when a listener is attached, or buffers the most recent route (capacity one, guarded by a `Lock`) so a cold-start tap survives until the router renders. The `DeepLinkListener.razor` component in the shared layout drains that buffer after first render and navigates. Why capacity one, and why a buffer at all? Because a tap can *launch* the app: native code publishes the route into the singleton before Blazor has rendered anything, so there is no listener yet. The single-entry buffer holds that route until first render, then the listener consumes it. Live taps, once the app is running, skip the buffer entirely. @@ -108,7 +108,7 @@ The takeaway: **a portable UI is one that is structurally forbidden from knowing --- -**What we covered:** why a platform check inside a shared component set is a portability leak, how ADR-042 replaces it with one small contract per capability under `MMCA.Common.UI/Services/Capabilities/`, how `AddDeviceCapabilityDefaults` TryAdd-seeds a null-object, constant-stub, or neutral-state default for every contract so it always resolves, how browser and MAUI heads override those defaults after `AddUIShared` with last-registration-wins, why the native adapters live in the ninth package `MMCA.Common.UI.Maui` built by a windows CI job, and how `IDeepLinkDispatcher` funnels every native navigation source onto the one shared Blazor route table. +**What we covered:** why a platform check inside a shared component set is a portability leak, how ADR-042 replaces it with one small contract per capability under `MMCA.Common.UI/Services/Capabilities/`, how `AddDeviceCapabilityDefaults` TryAdd-seeds a null-object, constant-stub, or neutral-state default for every contract so it always resolves, how browser and MAUI heads override those defaults after `AddUIShared` with last-registration-wins, why the native adapters live in the eleventh package `MMCA.Common.UI.Maui` built by a windows CI job, and how `IDeepLinkDispatcher` funnels every native navigation source onto the one shared Blazor route table. **Previously in the series:** Two real apps on one framework, a conference platform and a store, both running on MMCA.Common without a fork. @@ -119,6 +119,6 @@ The takeaway: **a portable UI is one that is structurally forbidden from knowing *Tags: .NET, Blazor, MAUI, C Sharp, Software Architecture* -*Notes: verified contract names + path:line under `MMCA.Common/Source/Presentation/MMCA.Common.UI/Services/Capabilities/`: `IShareService` (`IShareService.cs:8`, `ShareLinkAsync`/`ShareFileAsync` -> `Task`), `IHapticFeedbackService` (`IHapticFeedbackService.cs:8`, `Click`/`LongPress`/`Vibrate`/`IsSupported`), `IBiometricAuthenticator` (`IBiometricAuthenticator.cs:9-19`, `IsAvailableAsync`/`AuthenticateAsync` only, no `IsSupported` member), `IGeolocationService` (`IGeolocationService.cs:8`, `GetCurrentOrLastKnownAsync` -> `GeoPoint?`), `ISpeechToTextService` (`ISpeechToTextService.cs:10`, `ListenAsync`/`IsSupported`), `IConnectivityStatusService` (`IConnectivityStatusService.cs:10`, `IsOnline`/`ConnectivityChanged`/`InitializeAsync`), `IExternalLinkService` (`Interop/IExternalLinkService.cs:9`, `InterceptsLinks`/`OpenAsync`), `IMediaPickerService` (`IMediaPickerService.cs:9`, `PickPhotoAsync`/`CapturePhotoAsync`, `PickedMedia` class at `:29`), `IPushRegistrationService` (`IPushRegistrationService.cs:10`, `IsSupported`/`RegisterAsync`/`UnregisterAsync`), `IDeepLinkDispatcher` (`Navigation/IDeepLinkDispatcher.cs:10`, `Publish`/`TryConsumePending`/`RouteRequested`). Defaults: `AddDeviceCapabilityDefaults` at `Services/Capabilities/DependencyInjection.cs:37` (24 TryAdd registrations, one per contract: 17 singletons at `:40-56`, the push pair at `:61-62`, the media picker at `:65`, the barcode scanner at `:70`, scoped device preferences at `:74`, the deep-link dispatcher at `:78`, the app-lifecycle notifier at `:82`; ADR-042 lists the 18 at introduction at `:34` and "Six more have joined since, for 24 today" at `:39`), `NullShareService` (`Interop/NullShareService.cs:4`, returns false), `NullHapticFeedbackService` (`DeviceStatus/NullHapticFeedbackService.cs:4`, `IsSupported => false`), `NullSpeechToTextService` (`Media/NullSpeechToTextService.cs:6`, `IsSupported => false`), `NullBiometricAuthenticator` (`Auth/NullBiometricAuthenticator.cs:4`, `IsAvailableAsync` -> false, which is how that contract reports unavailability), `AlwaysOnlineConnectivityStatusService` (`DeviceStatus/AlwaysOnlineConnectivityStatusService.cs:7`, `IsOnline => true`), `InMemoryDevicePreferences` scoped (`DeviceStorage/InMemoryDevicePreferences.cs:10`). The two contracts whose shared default IS the real implementation (`IDeepLinkDispatcher` at `:78`, `IAppLifecycleNotifier` at `:82`) and the 20-of-24 native override count come from `Website/docs-src/adr/042-device-capability-abstraction.md:47-52`. Browser overrides: `AddBrowserDeviceCapabilities` (`Services/Capabilities/DependencyInjection.cs:95`, `CapabilitiesJsModule` scoped at `:98` plus exactly 8 scoped adapters at `:100-107`), `BrowserShareService` (`Interop/BrowserShareService.cs:8`, `navigator.share`, returns false where unavailable). MAUI overrides: `UseMauiDeviceCapabilities` (`MMCA.Common.UI.Maui/HostingDependencyInjection.cs:30`, `UseLocalNotification()` at `:32`, `AddMauiDeviceCapabilities()` at `:33`, the `DeviceCapabilitiesInitializer` tap bridge at `:34`), `AddMauiDeviceCapabilities` (`MMCA.Common.UI.Maui/DependencyInjection.cs:42`); external-auth broker inert until configured (`:73-76`), push wired-but-tokenless (`:64-67`); the ordering note is the class doc comment at `:25-31` ("call this service-level registration AFTER `AddUIShared` ... last registration wins", `:28-30`). Deep-link default `DeepLinkDispatcher` (`Services/Capabilities/Navigation/DeepLinkDispatcher.cs:9`, capacity-one buffer, `Lock _gate`). Shared components verified to exist: `Components/Capabilities/DeepLinkListener.razor`, `Components/Capabilities/ExternalLink.razor`, `Components/Capabilities/OfflineBanner.razor`. Package position: `MMCA.Common.UI.Maui` is entry 9 of the 19 published packages (`MMCA.Common/FACTS.md:19-40`, the entry itself at `:30`). Windows CI jobs + layer rule + the contract counts are from `Website/docs-src/adr/042-device-capability-abstraction.md` (contracts and counts at `:33-62`, defaults at `:64-70`, heads-override at `:72-76`, package/CI/layer-rule/slnx exclusion at `:78-87`). ADR-043 reuse of the dispatcher + UI.Web-served association files from `Website/docs-src/adr/043-mobile-deep-links-and-native-oauth-callback.md:100-107` ("Association files are served by each app's UI.Web host" at `:100`, "Incoming URIs reuse the ADR-042 dispatcher" at `:107`). The roughly-a-hundred-types-in-G26 figure is from `Website/docs-src/onboarding/group-26-device-capability-layer.md`, which carries 103 level-3 `### ` headings today (the body's "roughly a hundred" is that approximation). The single ```csharp``` composition block is an illustrative sketch of the documented registration order, not verbatim source; the individual method names and file:line in it are verified above. `AddUIShared` has exactly one overload, `AddUIShared(IConfiguration configuration)` (`MMCA.Common.UI/DependencyInjection.cs:36`, calling `AddDeviceCapabilityDefaults()` at `:158`), and every real host passes `builder.Configuration` (`MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI/MauiProgram.cs:101`, `MMCA.ADC.UI.Web/Program.cs:70`, `MMCA.ADC.UI.Web.Client/Program.cs:45`), so the sketch shows that argument. Change history: refreshed 2026-09-19 against MMCA.Common v1.205.0. The contract count moved 18 -> 24, the capability files moved out of a flat `Fallbacks/` folder into per-concern folders (`Interop/`, `DeviceStatus/`, `Media/`, `Auth/`, `DeviceStorage/`, `Navigation/`), the package ordinal moved from fifteenth of fifteen to ninth of nineteen, and the fourth kind of default (the shared default that IS the real implementation) was added to the defaults section.* +*Notes: re-verified 2026-10-02 against MMCA.Common v1.221.0 (`MMCA.Common/FACTS.md:14`). Contract names + path:line under `MMCA.Common/Source/Presentation/MMCA.Common.UI/Services/Capabilities/`: `IShareService` (`Interop/IShareService.cs:8`, `ShareLinkAsync`/`ShareFileAsync` -> `Task`), `IHapticFeedbackService` (`DeviceStatus/IHapticFeedbackService.cs:8`, `Click`/`LongPress`/`Vibrate`/`IsSupported`), `IBiometricAuthenticator` (`Auth/IBiometricAuthenticator.cs:9`, `IsAvailableAsync`/`AuthenticateAsync` only, no `IsSupported` member), `IGeolocationService` (`Geo/IGeolocationService.cs:8`, `GetCurrentOrLastKnownAsync` -> `GeoPoint?`), `ISpeechToTextService` (`Media/ISpeechToTextService.cs:10`), `IConnectivityStatusService` (`DeviceStatus/IConnectivityStatusService.cs:10`), `IExternalLinkService` (`Interop/IExternalLinkService.cs:9`, `InterceptsLinks`/`OpenAsync`), `IMediaPickerService` (`Media/IMediaPickerService.cs:9`, `PickedMedia` class at `:29`), `IPushRegistrationService` (`Notifications/IPushRegistrationService.cs:10`), `IDeepLinkDispatcher` (`Navigation/IDeepLinkDispatcher.cs:10`). Defaults: `AddDeviceCapabilityDefaults` at `Services/Capabilities/DependencyInjection.cs:37` (24 TryAdd registrations, one per contract: 17 singletons at `:40-56`, the push pair at `:61-62`, the media picker at `:65`, the barcode scanner at `:70`, scoped device preferences at `:74`, the deep-link dispatcher at `:78`, the app-lifecycle notifier at `:82`; ADR-042 lists the 18 at introduction at `Website/docs-src/adr/042-device-capability-abstraction.md:34` and "Six more have joined since, for 24 today" at `:39`), `NullShareService` (`Interop/NullShareService.cs:4`), `NullHapticFeedbackService` (`DeviceStatus/NullHapticFeedbackService.cs:4`), `NullSpeechToTextService` (`Media/NullSpeechToTextService.cs:6`), `NullBiometricAuthenticator` (`Auth/NullBiometricAuthenticator.cs:4`), `AlwaysOnlineConnectivityStatusService` (`DeviceStatus/AlwaysOnlineConnectivityStatusService.cs:7`), `InMemoryDevicePreferences` scoped (`DeviceStorage/InMemoryDevicePreferences.cs:10`, registered `TryAddScoped` at `DependencyInjection.cs:74`). The two contracts whose shared default IS the real implementation and the 20-of-24 native override count: `Website/docs-src/adr/042-device-capability-abstraction.md:46-53`, cross-checked against `MMCA.Common.UI.Maui/DependencyInjection.cs:46-76` (17 singletons at `:46-62`, push registration at `:67`, media picker at `:71`, scoped external-auth broker at `:76` = 20). Browser overrides: `AddBrowserDeviceCapabilities` (`Services/Capabilities/DependencyInjection.cs:95`, `CapabilitiesJsModule` scoped at `:98` plus exactly 8 scoped adapters at `:100-107`), `BrowserShareService` (`Interop/BrowserShareService.cs:8`). MAUI overrides: `UseMauiDeviceCapabilities` (`MMCA.Common.UI.Maui/HostingDependencyInjection.cs:30`, `UseLocalNotification()` at `:32`, `AddMauiDeviceCapabilities()` at `:33`, the `DeviceCapabilitiesInitializer` tap bridge at `:34`), `AddMauiDeviceCapabilities` (`MMCA.Common.UI.Maui/DependencyInjection.cs:42`); external-auth broker inert until configured (`:73-76`), push wired-but-tokenless (`:64-67`); the ordering note is the class doc comment at `:25-31` ("call this service-level registration AFTER `AddUIShared` ... last registration wins", `:28-30`). Deep-link default `DeepLinkDispatcher` (`Services/Capabilities/Navigation/DeepLinkDispatcher.cs:11`, `Lock _gate` at `:13`, capacity-one buffer). Shared components: `Components/Capabilities/DeepLinkListener.razor`, `Components/Capabilities/ExternalLink.razor`, `Components/Capabilities/OfflineBanner.razor` (existence carried from the 2026-09-19 run, not re-opened this run). Package position: `MMCA.Common.UI.Maui` is entry 11 of the 22 published packages (`MMCA.Common/FACTS.md:19`, list at `:22-43`, the entry itself at `:32`). Windows CI jobs, layer rule, and slnx exclusion: `Website/docs-src/adr/042-device-capability-abstraction.md:79-88` ("stays OUT of `MMCA.Common.slnx`" at `:82`, `build-maui`/`publish-maui` at `:84`, `EnforceUIMauiLayerBoundary` at `:86`). ADR-043 reuse of the dispatcher + UI.Web-served association files: `Website/docs-src/adr/043-mobile-deep-links-and-native-oauth-callback.md:103` ("Association files are served by each app's UI.Web host") and `:110` ("Incoming URIs reuse the ADR-042 dispatcher"). The roughly-a-hundred-types-in-G26 figure: `Website/docs-src/onboarding/group-26-device-capability-layer.md` carries 103 level-3 `### ` headings (Grep count, 2026-10-02). The single ```csharp``` composition block is an illustrative sketch of the documented registration order, not verbatim source. `AddUIShared` has one overload, `AddUIShared(IConfiguration configuration)` (`MMCA.Common.UI/DependencyInjection.cs:36`, calling `AddDeviceCapabilityDefaults()` at `:182`), and every ADC host passes `builder.Configuration` (`MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI/MauiProgram.cs:101`, `MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web/Program.cs:86`, `MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web.Client/Program.cs:39`). Change history: refreshed 2026-09-19 against v1.205.0 (contract count 18 -> 24, capability files split into per-concern folders, fourth kind of default added). Refreshed 2026-10-02 against v1.221.0: package ordinal ninth of nineteen -> eleventh of twenty-two (FACTS lists 22 packages), `DeepLinkDispatcher.cs:9` -> `:11`, `AddDeviceCapabilityDefaults()` call `:158` -> `:182`, ADC host `UI.Web/Program.cs:70` -> `:86` and `UI.Web.Client/Program.cs:45` -> `:39`, ADR-042 cites `:33` -> `:34`, `:47-52` -> `:46-53`, `:81` -> `:82`, ADR-043 cites `:100`/`:107` -> `:103`/`:110`.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/durable-internal-commands.md b/docs-src/articles/durable-internal-commands.md index c508e1ce..631de6d7 100644 --- a/docs-src/articles/durable-internal-commands.md +++ b/docs-src/articles/durable-internal-commands.md @@ -7,9 +7,10 @@ > `.../IInternalCommandScheduler.cs`, `.../IInternalCommandAdministration.cs`, > `.../InternalCommandNameAttribute.cs`, > `MMCA.Common/.../Infrastructure/Persistence/InternalCommands/InternalCommandMessage.cs`, +> `.../InternalCommandScheduler.cs`, `.../EnrolledCommandWake.cs`, > `.../Processing/InternalCommandProcessor.cs`, `.../Processing/InternalCommandMetrics.cs`, > `.../Processing/InternalCommandDispatcher.cs`, -> `.../Administration/InternalCommandsSettings.cs`, +> `.../Administration/InternalCommandsSettings.cs`, `.../Persistence/Polling/PollingLoop.cs`, > `MMCA.Store/.../Sales.Application/Orders/InternalCommands/SendOrderPaymentFailedEmailInternalCommand.cs` > and its handler and saga scheduling site, > `MMCA.ADC/.../Conference.Application/Sessions/UseCases/DecisionSupport/ScoreEventSessions/*`, @@ -47,13 +48,13 @@ The rubric asks for this twice, from two directions. §6 (CQRS and Event-Driven Design) wants reads and writes separated through a dispatcher with a real decorator pipeline, an outbox for atomic persist-then-publish rather than "save then publish and hope", and idempotent consumers, with "consumers that aren't idempotent and break on redelivery" listed as a red -flag (`ArchitectureEvaluationCriteria.md:229-247`). §10 (Messaging and Integration Architecture) is a -weight-3 category (`:352`) scoring what happens once work leaves the request. It wants delivery semantics +flag (`ArchitectureEvaluationCriteria.md:229-249`). §10 (Messaging and Integration Architecture) is a +weight-3 category (`:349`) scoring what happens once work leaves the request. It wants delivery semantics stated per consumer, dead-letter and poison-message handling with "retries with backoff and a bounded attempt count, then a dead-letter path with an operational procedure", bounded and documented retention, -and long-running work with persisted state and defined timeouts (`:329-348`). Its red flags name +and long-running work with persisted state and defined timeouts (`:329-341`). Its red flags name "retries without idempotency (duplicate side effects) or without backoff (retry storms)" and "no -dead-letter story: a poison message blocks the queue or is silently dropped" (`:344-348`). +dead-letter story: a poison message blocks the queue or is silently dropped" (`:342-347`). Read those two lists and notice what they describe: not an event bus, a **job queue**. Backoff, an attempt ceiling, a dead-letter path, an operator procedure, retention. Every single one of those @@ -61,7 +62,7 @@ properties has to exist somewhere, and the choice is only whether you build them per feature that needed to do something later. MMCA.Common scores §6 at Maturity 4 / Implementation 9 and §10 at Maturity 4 / Implementation 9 -(`common-ArchitectureScorecard.md:86` and `:90`). Both rows are earned by machinery that was already +(`common-ArchitectureScorecard.md:70` and `:74`). Both rows are earned by machinery that was already there for events. ADR-114 is the record of pointing that same machinery at instructions. ## Four mechanisms, one question @@ -71,17 +72,17 @@ The framework has four ways to do work later, and they are not interchangeable. **The bounded channel** (ADR-121) is a `Channel` singleton with a `SingleReader` `BackgroundService` drain, one per job kind. Its full mode is `DropOldest`, so under pressure it evicts the oldest item and `TryWrite` always returns true, which means the producer cannot learn that anything was discarded -(`ADR-121:45-56`). It is in-process only: it does not survive a restart and does not span replicas -(`:133-135`). That is not a defect, it is the specification. Article 22 in this series covers it in full, +(`ADR-121:37-56`). It is in-process only: it does not survive a restart and does not span replicas +(`:135-137`). That is not a defect, it is the specification. Article 22 in this series covers it in full, along with the live-channel case it exists for. **The recurring scheduler** (ADR-074) carries cron occurrences: one row per registered job, and a missed -occurrence is deliberately not replayed (`ADR-114:26-33`). It answers "sweep the audit trail nightly". +occurrence is deliberately not replayed (`ADR-114:28-36`). It answers "sweep the audit trail nightly". Article 22 covers this one too, as the sibling contract for work a clock owns. **The transactional outbox** (ADR-003) carries *events*. A row is written by the domain-event interceptor inside the same transaction as the aggregate change, and a processor drains it with a claim lease, -exponential backoff, dead-lettering and OpenTelemetry instrumentation (`ADR-114:14-24`). It answers "this +exponential backoff, dead-lettering and OpenTelemetry instrumentation (`ADR-114:16-26`). It answers "this happened, tell whoever cares". It does not answer "do this later", and bending it to do so means expressing an instruction as an event, which is the modelling mistake ADR-007 and ADR-008 spend their length avoiding. @@ -91,10 +92,10 @@ specific gap: a single unit of work, bound to a single aggregate, that must not fire until the aggregate change actually commits. ADR-121 states the deciding question in one line: "would losing this item be noticed as anything more -than a missed UI refresh?" If yes, it is an internal command; if no, it is a channel item (`:128-131`). +than a missed UI refresh?" If yes, it is an internal command; if no, it is a channel item (`:130-133`). The record is blunt about the symmetry of the mistake: putting must-run work on a `DropOldest` channel loses it silently, and putting a broadcast through a durable command pays a row, a poll interval and a -lease for something worth less than the write (`:146-149`). +lease for something worth less than the write (`:148-151`). ## The MMCA answer: a deferred execution IS the inline execution @@ -110,7 +111,7 @@ Here is the decision that makes the rest of it cheap. execution scope (`InternalCommandDispatcher.cs:75`), so what comes back from the container is already wrapped by Scrutor in the whole ADR-014 chain: the feature gate, the authorization check, logging, cache invalidation, validation, the timeout budget and the transaction, in that order, unchanged -(`ADR-114:51-61`). +(`ADR-114:53-62`). That one decision is what the rest of this article is really about. It means a deferred command gets validated. It means a deferred command can require a permission. It means the logging decorator writes @@ -118,35 +119,40 @@ the same line it always wrote. None of that is job-queue code, because none of i anywhere else either. Compare that to what a general-purpose job library executes: a serialized method invocation, which passes -through none of your pipeline until you teach it to (`ADR-114:146-154`). +through none of your pipeline until you teach it to (`ADR-114:156-163`). ## Scheduling rides the caller's unit of work `IInternalCommandScheduler` exposes `ScheduleAsync(command, runAt)` and a `TimeSpan delay` overload, both -returning `Result` (`IInternalCommandScheduler.cs:41-57`). `runAt` is "the earliest instant the +returning `Result` (`IInternalCommandScheduler.cs:45-62`). `runAt` is "the earliest instant the command may run, converted to UTC", with `null` meaning as soon as possible, and the contract is explicit that the processor never runs a row before that instant and makes no promise about how long after it a busy queue takes to get there (`:23-27`). The write goes to the context handed back by the scope's own `IDbContextFactory`, which is the same instance the calling handler's repositories are using. From there the behavior splits, and the split is -the whole reason this mechanism exists (`ADR-114:62-75`): - -- **With a transaction active**, the row is only enrolled. The caller's commit persists it, and the - caller's rollback erases it. +the whole reason this mechanism exists (`ADR-114:64-80`): + +- **With a transaction active**, the row is only enrolled. The caller's next save writes it, or the + transactional pipeline saves it just before the commit when no save follows, so the caller's commit + persists it and the caller's rollback erases it (`IInternalCommandScheduler.cs:34-43`). The processor + wake is owed rather than raised: the scheduler records it against the context, and the unit of work + releases it once after the commit succeeds and drops it on rollback (`InternalCommandScheduler.cs:108-113`, + `EnrolledCommandWake.cs:7-13`). - **With no transaction active**, the row is saved immediately, which flushes anything else pending on - that context exactly as calling the unit of work's own save would - (`IInternalCommandScheduler.cs:34-40`). The processor is signalled only when the row is already due, so - a future-dated row is persisted without a wake-up and waits for the poll loop. + that context exactly as calling the unit of work's own save would (`IInternalCommandScheduler.cs:39-41`). + The processor is then signalled whether or not the row is due: a due row runs on the wake, and a + future-dated row re-arms the processor's smart wait on its scheduled instant + (`InternalCommandScheduler.cs:120-125`). That first bullet is the outbox's atomicity guarantee applied to an instruction instead of an event: a transaction that aborts schedules nothing. It is also precisely what a separate job store cannot give you, and it is the single reason ADR-114 rejects Hangfire, Quartz.NET and a cloud queue. All three keep their state somewhere your transaction does not reach, so an enqueue beside a rollback is a job with no -justification (`ADR-114:146-168`). The cloud-queue rejection is the interesting one, because it is +justification (`ADR-114:156-177`). The cloud-queue rejection is the interesting one, because it is conditional: a broker queue is the right answer once the work must cross a process boundary or survive the database being unavailable, and the standard way to enqueue it safely is to write an outbox row that -a processor forwards, which is this design plus one hop (`:161-168`). +a processor forwards, which is this design plus one hop (`:171-177`). ## The row, and what it remembers @@ -173,13 +179,13 @@ width) and `DeadLetteredOn` (`:77`), plus the lease pair `ClaimedBy` (`:84`) and That fourth group is the one people forget to build, and it is what turns a deferred command from a system call into a continuation of a user's request. Before the dispatcher runs, the processor calls the -shared `AmbientOrigin.Restore` (`InternalCommandProcessor.cs:530`), the same helper every other +shared `AmbientOrigin.Restore` (`InternalCommandProcessor.cs:483`), the same helper every other background hop uses, so every hop restores the same shape. It sets the tenant first, then rebuilds a `ClaimsPrincipal` carrying the `sub` claim and one role claim per stored role, and hands it to `ScopedUserOverride`, a scoped carrier read by `ImpersonatingCurrentUserService`, which decorates whatever -`ICurrentUserService` the host registered (`ADR-114:96-109`). With no override set every member reads +`ICurrentUserService` the host registered (`ADR-114:102-114`). With no override set every member reads straight through, so an HTTP request behaves exactly as it did before the queue existed. The identity is -stamped with an authentication type of `InternalCommand` (`InternalCommandProcessor.cs:72`), which is what +stamped with an authentication type of `InternalCommand` (`InternalCommandProcessor.cs:66`), which is what makes `IsAuthenticated` true and names the hop the identity came back from. Restore the principal and an `IRequiresPermission` command becomes schedulable, because the authorization @@ -205,37 +211,43 @@ difference is whether you find out. ## The drain: claim, execute, stamp -`InternalCommandProcessor` is a `BackgroundService` (`InternalCommandProcessor.cs:47`). Its cycle is the -outbox's idiom, borrowed rather than shared. - -It waits a five-second startup delay so the host finishes module registration and migration before the -first cycle touches the table (`:81`), and returns immediately if the host owns no relational sources -(`:89-97`). Each cycle fetches the due candidates per source, claims the due prefix of the batch with a -lease token (`ClaimDueAsync`, `:369`), executes each row in a **fresh DI scope**, and stamps the outcome -through a set-based update guarded by that token (`StampAsync`, `:653`). That guard is what makes a +`InternalCommandProcessor` is a `BackgroundService` (`InternalCommandProcessor.cs:43`). Its loop +mechanics (the startup delay, the smart wait, the per-source drain and the retry backoff) are the +internal `PollingLoop` the outbox processor also runs (`PollingLoop.cs:12`, called from +`InternalCommandProcessor.cs:75-79`); the claim, the execution and the stamping are its own +(`ADR-114:179-188`). + +It waits a five-second startup delay before the first cycle (`PollingLoop.cs:18`, applied at `:51`), and +returns immediately if the host owns no relational sources (`:53-57`). Each cycle fetches the due +candidates per source, claims the due prefix of the batch with a lease token (`ClaimDueAsync`, +`InternalCommandProcessor.cs:286`), executes each row in a **fresh DI scope**, and stamps the outcome +through a set-based update guarded by that token (`StampAsync`, `:606`). That guard is what makes a scaled-out host safe: a replica whose lease expired mid-execution silently drops its stale outcome rather than overwriting whatever the new claimant did. -A `Result.Failure` and a thrown exception are the same operational fact, and both consume an attempt. The -backoff is `RetryBackoffBaseSeconds * 2^(attempts-1)` with jitter in `[0.8, 1.2]`, capped at -`MaxRetryBackoffSeconds` (`ComputeRetryBackoffSeconds`, `:679`). +A `Result.Failure` and a thrown exception are the same operational fact, and both consume an attempt +(`RecordFailedAttemptAsync`, `:428-462`). The backoff is `RetryBackoffBaseSeconds * 2^(attempts-1)` with +jitter in `[0.8, 1.2]`, capped at `MaxRetryBackoffSeconds` (`ComputeRetryBackoffSeconds`, `:632`, +delegating to `PollingLoop.cs:183`, jitter at `:193`). -Two failures are terminal on the **first** attempt rather than consuming the budget: an unresolvable -command type (`:434`) and a missing handler registration (`:456`). The outbox retries an unresolvable -type once, and the divergence is reasoned rather than accidental: an outbox row's type may live in an -assembly that has simply not loaded yet, while a queue row can only ever run on a host that registers a -handler for it, so a host that cannot name the type has no such handler and retrying would burn the -budget waiting for a fact that will not change (`ADR-114:110-141`). +Three failures are terminal on the **first** attempt rather than consuming the budget: a payload that no +longer deserializes against its type (`payload_invalid`, `InternalCommandProcessor.cs:369-377`), because +retrying cannot change the stored bytes; an unresolvable command type (`:387`); and a missing handler +registration (`:409`). The outbox retries an unresolvable type once, and the divergence is reasoned +rather than accidental: an outbox row's type may live in an assembly that has simply not loaded yet, +while a queue row can only ever run on a host that registers a handler for it, so a host that cannot name +the type has no such handler and retrying would burn the budget waiting for a fact that will not change +(`ADR-114:116-133`). The settings mirror `OutboxSettings` where the semantics match (`InternalCommandsSettings.cs`): `BatchSize` 50 (`:31`), `MaxAttempts` 5 (`:39`), `PollingIntervalSeconds` 2 (`:49`), `LeaseSeconds` 300 -(`:68`), `RetryBackoffBaseSeconds` 10 (`:77`), `RetentionDays` 7 (`:93`), `CleanupIntervalHours` 6 -(`:108`). Two deliberately differ. `ProcessingDelaySeconds` defaults to `0` rather than the outbox's 5 +(`:69`), `RetryBackoffBaseSeconds` 10 (`:78`), `RetentionDays` 7 (`:94`), `CleanupIntervalHours` 6 +(`:109`). Two deliberately differ. `ProcessingDelaySeconds` defaults to `0` rather than the outbox's 5 (`:58`), because that delay exists to bound a race with the in-process fast path that dispatches an event before the processor can, and a job queue has no such fast path. `MaxRetryBackoffSeconds` is its own -ceiling of 600 (`:86`) rather than reusing the lease, because a job queue wants a long lease for slow +ceiling of 600 (`:87`) rather than reusing the lease, because a job queue wants a long lease for slow handlers and a short ceiling on how long a transient failure parks a command, where the outbox gets one -number for both (`ADR-114:133-141`). +number for both (`ADR-114:135-144`). ## The worked example: an email that must survive a deploy @@ -246,8 +258,7 @@ of them are documentation: // MMCA.Store.Sales.Application/Orders/InternalCommands/SendOrderPaymentFailedEmailInternalCommand.cs // (XML doc comments trimmed; the attribute, the record and the marker are verbatim.) [InternalCommandName("Sales.SendOrderPaymentFailedEmail")] -public sealed record SendOrderPaymentFailedEmailInternalCommand(OrderIdentifierType OrderId) - : IInternalCommand; +public sealed record SendOrderPaymentFailedEmailInternalCommand(OrderIdentifierType OrderId) : IInternalCommand; ``` One identifier as the payload, a stable name, and the marker. That is the entire contract. @@ -256,7 +267,7 @@ The scheduling site is `OrderPaymentFailedSagaHandler`, the domain-event handler compensating saga step. It opens its own scope, resolves `IInternalCommandScheduler`, and calls `ScheduleAsync(new SendOrderPaymentFailedEmailInternalCommand(domainEvent.OrderId), runAt: null, ...)` (`OrderPaymentFailedSagaHandler.cs:32,35`). The same handler also schedules -`ExpireUnpaidOrderInternalCommand` (`:79-82`), which is the `runAt` case: a command that should run at a +`ExpireUnpaidOrderInternalCommand` (`:81-83`), which is the `runAt` case: a command that should run at a specific future instant rather than as soon as possible. The handler on the other side is an ordinary command handler with no queue awareness at all: @@ -300,11 +311,11 @@ public sealed partial class SendOrderPaymentFailedEmailInternalCommandHandler( Two lines of judgement carry the whole failure policy, and both are written down in the source rather than inferred. A missing order or customer returns success with a log line, because redelivery would -reach the same conclusion (`SendOrderPaymentFailedEmailInternalCommandHandler.cs:15-18,36-50`). The SMTP -call is not wrapped, so a transport fault fails the row and is retried by the framework (`:17-18,59`). +reach the same conclusion (`SendOrderPaymentFailedEmailInternalCommandHandler.cs:17-18,37-50`). The SMTP +call is not wrapped, so a transport fault fails the row and is retried by the framework (`:17-18,60`). And the command's own documentation states the honest cost: delivery is at-least-once with no sent marker kept, so a host that dies after the SMTP call re-sends once the claim lease expires -(`SendOrderPaymentFailedEmailInternalCommand.cs:9-12`). +(`SendOrderPaymentFailedEmailInternalCommand.cs:10-11`). ## The expensive case: permission, timeout and a cross-replica claim @@ -312,15 +323,19 @@ MMCA.ADC's AI session scoring is the other end of the range, and it is the case in-process channel. One pass issues one paid Anthropic call per session, so losing it is expensive and running it twice is worse. -The command declares three interfaces rather than one (`ScoreEventSessionsInternalCommand.cs:26-27`): +The command declares four interfaces rather than one (`ScoreEventSessionsInternalCommand.cs:38-39`): ```csharp // MMCA.ADC.Conference.Application/Sessions/UseCases/DecisionSupport/ScoreEventSessions/ // ScoreEventSessionsInternalCommand.cs (doc comments trimmed). [InternalCommandName("Conference.ScoreEventSessions.v1")] -public sealed record ScoreEventSessionsInternalCommand(EventIdentifierType EventId) - : IInternalCommand, IRequiresPermission, IHasTimeout +public sealed record ScoreEventSessionsInternalCommand(EventIdentifierType EventId, DateTime? RequestedAtUtc = null) + : IInternalCommand, IRequiresPermission, IHasTimeout, IFeatureGated { + // The kill switch over the paid pass: with the flag off, the FeatureGate decorator + // short-circuits before the handler runs. + public string FeatureName => ConferenceFeatures.SessionScoring; + // Safe on a deferred command because the row carries the scheduling organizer: the processor // restores that principal, so the gate evaluates the operator who asked, not a system principal. public string Permission => ConferencePermissions.SessionSelectionManage; @@ -331,32 +346,43 @@ public sealed record ScoreEventSessionsInternalCommand(EventIdentifierType Event } ``` -That is the payoff of resolving the closed handler through the container. `IRequiresPermission` and -`IHasTimeout` are the ordinary markers every synchronous command uses, and they work here because the -decorator chain is the same chain. - -The trigger endpoint schedules and answers `202 Accepted` unconditionally -(`SessionSelectionController.cs:108,115-117,126`), and its `[NonIdempotent]` attribute records why -caching the 202 would be wrong: it would report acceptance for a request that never reached the queue, -hiding a schedule failure the caller has to act on (`:109`). +That is the payoff of resolving the closed handler through the container. `IFeatureGated`, +`IRequiresPermission` and `IHasTimeout` are the ordinary markers every synchronous command uses, and they +work here because the decorator chain is the same chain. A gate refusal on the processor is a `Result` +failure like any other, so it consumes an attempt (`InternalCommandProcessor.cs:428-462`). + +The second positional member, `RequestedAtUtc`, is the request instant, and it makes a pass resumable: +the pass skips every session whose score was written at or after that instant, so a duplicate queued +behind a running pass completes without a paid call, and a retry after a timeout or a killed replica +resumes where the attempt stopped (`ScoreEventSessionsInternalCommand.cs:25-33`). + +The trigger endpoint carries the same gate (`SessionSelectionController.cs:125`), because it only +schedules: the decorator fires minutes later on the processor, and without the attribute an organizer who +switched the pass off would still be told `202 Accepted` for work that is about to be refused +(`:115-121`). It schedules the command with the service clock's current instant as `RequestedAtUtc` +(`:132-136`), returns the failure when the schedule write fails (`:138-141`), and answers `202 Accepted` +otherwise (`:144`). Its `[NonIdempotent]` attribute records why caching the 202 would be wrong: it would +report acceptance for a request that never reached the queue, hiding a schedule failure the caller has to +act on (`:126`). Three pieces of handler discipline are worth copying (`ScoreEventSessionsInternalCommandHandler.cs`): - **Lock and skip, not lock and wait.** The handler takes a per-event `IDistributedLock` claim with a - 15-minute time-to-live (`:53`) and a wait of `TimeSpan.Zero` (`:60`), and the loser logs and returns - `Result.Success()` (`:79-83`). Queueing behind a pass already covering the same work would only pay for + 15-minute time-to-live (`:56`) and a wait of `TimeSpan.Zero` (`:63`), and the loser logs and returns + `Result.Success()` (`:82-86`). Queueing behind a pass already covering the same work would only pay for it twice. - **A refusal is not retried, a fault is.** A `Result` failure from the pass is a business outcome (no sessions to score, the event is not scorable) and replaying it would pay for the same refusal again, so it is logged and reported as success. An exception propagates instead, and the framework's backoff and - attempt ceiling decide how often it is replayed and when it is dead-lettered (`:22-29,87-90`). + attempt ceiling decide how often it is replayed and when it is dead-lettered (`:22-29,90-94`). - **Idempotent as required.** Re-running a pass rewrites the same per-session score rows rather than - accumulating them (`:30-33`). + accumulating them, and the pass receives the command's `RequestedAtUtc` so it skips sessions already + scored for this request (`:30-36,88`). The command's own remarks record what it replaced and why: an in-process channel plus a five-minute recovery sweep, where the channel was exactly as durable as the replica holding it, so a deploy or a crash between the trigger and the last session's score left the event half scored with nothing that would -ever pick it up again (`ScoreEventSessionsInternalCommand.cs:13-19`). +ever pick it up again (`ScoreEventSessionsInternalCommand.cs:15-19`). ## Operating it @@ -388,46 +414,50 @@ much is waiting; lag and age tell you how late it already is. - **One migration per relational data source.** The table is in the model of every relational source (SQL Server, PostgreSQL and SQLite after ADR-113), so adopting the queue means - `dotnet ef migrations add AddInternalCommands` per source, applied before deploying (`ADR-114:179-183`). + `dotnet ef migrations add AddInternalCommands` per source, applied before deploying (`ADR-114:192-196`). The mapping is deliberately **not** gated on `InternalCommands:Enabled`, unlike the cron scheduler's job table, because a row must be able to commit in the same transaction as the aggregate change, a transaction does not span databases, and a flag that changed the schema would make enabling the queue a - migration rather than a deployment decision (`:88-95`). + migration rather than a deployment decision (`:97-100`). - **Execution is at-least-once, and it is a new obligation on ordinary commands.** A replica that dies after its handler committed and before the row was stamped releases the row when its lease expires, and the command runs again. That is the same contract the outbox already places on event handlers, so it is not new for anyone using the framework, but a command handler previously only ever ran once per request - (`ADR-114:185-189`). + (`ADR-114:198-202`). - **A scheduled command runs with the scheduling user's authority, not the executing host's.** That is what makes an `IRequiresPermission` command schedulable at all, and it means the row is a durable record of an authorization decision. If the user's roles change between scheduling and execution, the stored roles win. The record files that as deliberate (the decision was taken when the work was requested) and as the reason the row is under the same retention discipline as the outbox, because the payload can - carry personal data (`ADR-114:191-197`). -- **A command scheduled inside a transaction waits up to one polling interval.** The enrolled row raises - no signal, because a signal before the commit only buys a poll against a transaction that has not - committed. `PollingIntervalSeconds` ships at 2, the same default the outbox ships, so the divergence is - a deployment decision rather than a framework one: ADC and Store both run the queue at 60 seconds while - pushing the outbox to 300 (`ADR-114:199-209`). A host that raises the interval to cut idle polling - accepts that much latency on transaction-scheduled work. + carry personal data (`ADR-114:204-210`). +- **The polling interval is the fallback, and production stretches it.** A schedule does not wait for the + poll to be noticed: a row saved outright signals the processor, and a row enrolled in a transaction owes + a wake that the unit of work releases once the commit succeeds (`DbContextFactory.cs:472-474`). What the + interval bounds is how long an idle processor sleeps without a wake, because the smart wait is capped at + it (`PollingLoop.cs:104`, `ADR-114:75-78`). `PollingIntervalSeconds` ships at 2, the same default the + outbox ships, so the divergence is a deployment decision rather than a framework one: ADC and Store both + run the queue at 60 seconds while pushing the outbox to 300 (`MMCA.ADC/infra/main.bicep:1700,1706`, + `MMCA.Store/infra/main.bicep:1493,1500`). A host that raises the interval accepts that much latency on + any row whose wake never reaches an idle processor. - **Two poll loops, not one.** A host runs the outbox processor and the queue processor side by side, each with its own signal instance so a burst of schedules cannot consume the outbox's single pending wake-up. Both poll spans are suppressed from telemetry export by the same Aspire processor - (`ADR-114:210-216`). Two loops is two idle query streams against every source, which is exactly the + (`ADR-114:223-228`). Two loops is two idle query streams against every source, which is exactly the cost the 60-second production interval is paying down. - **The duplication with the outbox is deliberate and bounded.** Extending the outbox to carry commands was the tempting option and it is rejected on four counts: the two rows want different columns (a scheduled instant, an attempt budget, a captured principal), different indexes, different retention and different terminal semantics for an unresolvable type, and the outbox's poll predicate is the hottest query the framework issues, so widening it would make every outbox change a job-queue change - (`ADR-114:169-176`). The two processors share an idiom, not an implementation. + (`ADR-114:179-188`). The two processors share the loop mechanics through `PollingLoop` and nothing + else: each keeps its own tables, queries, logging, metrics and activities. - **The payload is JSON, which is a real constraint on what a command can carry.** Identifiers and scalars round-trip; a loaded aggregate does not, and should not be attempted (`IInternalCommand.cs:19-24`). Everything a handler needs beyond an identifier it re-reads at execution time, which is correct anyway, because the world moved on between the schedule and the run. - **Choosing between this and a channel is a per-job judgement no test enforces.** ADR-121's question ("would losing this item be noticed as anything more than a missed UI refresh?") is a rule a human - applies, and getting it wrong in either direction is silent (`ADR-121:128-131,146-149`). + applies, and getting it wrong in either direction is silent (`ADR-121:130-133,148-151`). ## Apply this even without MMCA @@ -490,98 +520,125 @@ stored permission grants."* *Tags: .NET, C Sharp, Distributed Systems, Microservices, Software Architecture* -*Notes: verified type/behavior names with path:line (all re-read this run, 2026-09-19). The three code -blocks are illustrative of the documented shape: the `SendOrderPaymentFailedEmailInternalCommand` block is -the source record with its XML doc comments removed (attribute, record and marker verbatim, from +*Notes: verified type/behavior names with path:line (all re-read this run, 2026-10-02, framework +v1.221.0). Changes this run: the drain section re-grounded on the shared `PollingLoop` (startup delay, +no-relational-sources exit and backoff math live there now); the first-attempt terminal cases went from two +to three (`payload_invalid` added); the scheduling section and the polling trade-off rewritten because an +enrolled row now owes a post-commit wake and an outright save signals whether or not the row is due; the +ADC command gained `RequestedAtUtc` and `IFeatureGated` and its trigger endpoint is feature-gated and +surfaces a failed schedule; every processor, settings, handler, ADR, rubric and scorecard anchor +re-anchored. The three code blocks are illustrative of the documented shape: the +`SendOrderPaymentFailedEmailInternalCommand` block is the source record with its XML doc comments removed +(attribute, record and marker verbatim, from `MMCA.Store/Source/Modules/Sales/MMCA.Store.Sales.Application/Orders/InternalCommands/SendOrderPaymentFailedEmailInternalCommand.cs:14-15`); -the handler block is condensed from that command's handler `:19-64` (the `LoggerMessage` calls and their +the handler block is condensed from that command's handler `:20-64` (the `LoggerMessage` calls and their declarations trimmed, `ConfigureAwait(false)` and the `string.Create(CultureInfo.InvariantCulture, ...)` -wrappers elided for width, the two rationale comments shortened from `:15-18`, control flow and API calls +wrappers elided for width, the two rationale comments shortened from `:17-18`, control flow and API calls faithful); the `ScoreEventSessionsInternalCommand` block is condensed from -`MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Application/Sessions/UseCases/DecisionSupport/ScoreEventSessions/ScoreEventSessionsInternalCommand.cs:25-45` -with the two XML doc blocks shortened to one-line comments.* +`MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Application/Sessions/UseCases/DecisionSupport/ScoreEventSessions/ScoreEventSessionsInternalCommand.cs:37-66` +with the three XML doc blocks shortened to one-line comments. The `FeatureName` comment deliberately omits +the source summary's claim that a gate failure "completes the row rather than retrying it" +(`:44-46`): the processor records every `Result` failure as a consumed attempt +(`InternalCommandProcessor.cs:428-462`), and the article follows the processor.* - *ADR-114 (`Website/docs-src/adr/114-internal-commands-durable-job-queue.md`), Accepted 2026-09-09 (`:4`), - revised 2026-09-19 with three corrections to match the code (`:5-9`): the two existing mechanisms and - the gap between them (outbox `:14-24`, recurring scheduler `:26-33`, the gap `:35-43`); the five parts - of the decision (marker plus closed-handler dispatch `:51-61`, scheduling on the caller's unit of work - `:62-75`, one unconditionally mapped table per relational source `:76-95`, context restoration - `:96-109`, failure policy and its one divergence `:110-141`); the four rejected alternatives (Hangfire - `:146-154`, Quartz.NET `:155-160`, a cloud queue `:161-168`, extending the outbox `:169-176`); and the - trade-offs restated here (`:179-183`, `:185-189`, `:191-197`, `:199-209`, `:210-216`). ADR-114's own - anchors for `InternalCommandProcessor` members sit above this run's readings (the record cites the class - at `:50`, `ClaimDueAsync` at `:366`, `StampAsync` at `:686` and `ComputeRetryBackoffSeconds` at `:712`); - this article cites the lines read this run.* + revised 2026-09-19 (`:5-8`) and 2026-10-01 (`:9-10`, Revision section `:235-251`): the two existing + mechanisms and the gap between them (outbox `:16-26`, recurring scheduler `:28-36`, the gap `:38-43`); + the five parts of the decision (marker plus closed-handler dispatch `:53-62`, scheduling on the + caller's unit of work `:64-80` with the smart-wait cap `:75-78`, one unconditionally mapped table per + relational source `:82-100`, context restoration `:102-114`, failure policy and its one divergence + `:116-133`, settings `:135-144`); the four rejected alternatives (Hangfire `:156-163`, Quartz.NET + `:165-169`, a cloud queue `:171-177`, extending the outbox with the shared `PollingLoop` `:179-188`); + and the trade-offs restated here (`:192-196`, `:198-202`, `:204-210`, `:212-221`, `:223-228`). + ADR-114's own anchors for `InternalCommandProcessor` members sit above this run's readings (the record + cites the class at `:47`, `ClaimDueAsync` at `:297`, `StampAsync` at `:617`, + `ComputeRetryBackoffSeconds` at `:643` and `payload_invalid` at `:385`), and its trade-off + "The enrolled row raises no signal" (`:212-213`, restated in the Revision at `:241`) predates + `EnrolledCommandWake`; this article cites the source read this run.* - *ADR-121 (`Website/docs-src/adr/121-ephemeral-in-process-work-queue.md`), Accepted 2026-09-11, - supersedes ADR-052 (`:4`): the bounded-channel decision (`:35-44`), the `DropOldest` full mode and the - invisible drop (`:45-56`), "work that must run does not go here" (`:105-114`), the one-question split - with ADR-114 (`:128-131`), in-process-only (`:133-135`) and the per-job judgement (`:146-149`).* + supersedes ADR-052 (`:4`), revised 2026-10-01 (`:152`): the bounded-channel decision (`:37-46`), the + `DropOldest` full mode and the invisible drop (`:47-54`), the `SingleReader` drain (`:55`), "work that + must run does not go here" (`:107-117`), the one-question split with ADR-114 (`:130-133`), + in-process-only (`:135-137`) and the per-job judgement (`:148-151`).* - *Framework contracts (paths rooted at `MMCA.Common/Source/Core/MMCA.Common.Application/InternalCommands/`): `IInternalCommand.cs:38` (marker over `ICommand`), the no-second-handler-contract rationale `:11-16`, the JSON payload requirement `:19-24`, the at-least-once statement `:25-29` and the rename-is-visible statement `:30-36`. `IInternalCommandScheduler.cs:16` with `ScheduleAsync(command, - runAt)` `:41-44` and the `TimeSpan delay` overload `:54-57`, the `runAt` contract `:23-27`, the - unit-of-work paragraph `:9-14`, and the enrolled-versus-saved remark `:34-40`. + runAt)` `:45-48` and the `TimeSpan delay` overload `:59-62`, the `runAt` contract `:23-27`, the + unit-of-work paragraph `:10-13`, and the enrolled-versus-saved remark `:34-43`. `InternalCommandNameAttribute.cs:25` (declaration), orphaning rationale `:7-10`, new-rows-only and uniqueness remark `:13-17`, sample `:18-21`. `IInternalCommandAdministration.cs:17` with `CountPendingAsync` `:28` (future rows counted, `:19-23`), `ListDeadLettersAsync` `:42`, `RequeueAsync` `:63` (`LastError` kept on purpose `:48-52`), `PurgeProcessedAsync` `:80`, the `Result` rationale `:11-15`, and the `InternalCommandDeadLetter` record `:99` with its payload-omitted rationale `:86-89`.* - *Framework infrastructure (paths rooted at - `MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/InternalCommands/`): - `InternalCommandMessage.cs:21` (not an auditable entity, `:14-19`), columns `Id` `:36`, `CommandType` - `:43`, `Payload` `:46`, `ScheduledOn` `:52`, `CreatedOn` `:55`, `ProcessedOn` `:61`, `Attempts` `:64`, - `LastError` `:70`, `DeadLetteredOn` `:77`, `ClaimedBy` `:84`, `ClaimedUntil` `:92`, `CorrelationId` - `:98`, `TraceId` `:101`, `SpanId` `:104`, `UserId` `:111`, `UserRoles` `:118`, `TenantId` `:124`. - `Processing/InternalCommandProcessor.cs:47` (`BackgroundService` declaration), `PollActivityName` `:63`, - `MaxErrorLength` 4000 `:66`, `PrincipalAuthenticationType` `:72`, `MinimumWait` 1s `:75`, `StartupDelay` - 5s `:81`, `ExecuteAsync` `:89` with the no-relational-sources exit `:93-97`, `ClaimDueAsync` `:369`, - `ExecuteClaimedAsync` `:417` with the terminal type-unresolvable `:434` and handler-missing `:456` - branches, `AmbientOrigin.Restore` call `:530`, `StampAsync` `:653`, `ComputeRetryBackoffSeconds` `:679`. - `Processing/InternalCommandDispatcher.cs:21` resolving the closed handler `:75`. - `Processing/InternalCommandMetrics.cs:20` (`MeterName` = `MMCA.Common.InternalCommands`), + `MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/`): + `InternalCommands/InternalCommandMessage.cs:21` (not an auditable entity, `:14-19`), columns `Id` `:36`, + `CommandType` `:43`, `Payload` `:46`, `ScheduledOn` `:52`, `CreatedOn` `:55`, `ProcessedOn` `:61`, + `Attempts` `:64`, `LastError` `:70`, `DeadLetteredOn` `:77`, `ClaimedBy` `:84`, `ClaimedUntil` `:92`, + `CorrelationId` `:98`, `TraceId` `:101`, `SpanId` `:104`, `UserId` `:111`, `UserRoles` `:118`, + `TenantId` `:124`. `InternalCommands/InternalCommandScheduler.cs` enrolled branch deferring the wake + `:108-113`, outright save `:120` and unconditional signal `:122-125`. + `InternalCommands/EnrolledCommandWake.cs:14` (owed-wake rationale `:7-13`), released after commit at + `DbContexts/Factory/DbContextFactory.cs:472-474` and dropped on rollback at `:843-846`. + `InternalCommands/Processing/InternalCommandProcessor.cs:43` (`BackgroundService` at `:49`), + `PollActivityName` `:57`, `MaxErrorLength` 4000 `:60`, `PrincipalAuthenticationType` `:66`, + `ExecuteAsync` delegating to `PollingLoop.RunAsync` `:75-79`, `ClaimDueAsync` `:286`, + `ExecuteClaimedAsync` `:355` with the terminal `payload_invalid` `:369-377`, `type_unresolvable` `:387` + and `handler_missing` `:409` branches, `RecordFailedAttemptAsync` `:428-462` (both failure kinds consume + an attempt), `AmbientOrigin.Restore` call `:483`, `StampAsync` `:606`, `ComputeRetryBackoffSeconds` + `:632-633`. `Polling/PollingLoop.cs:12`, `StartupDelay` 5s `:18`, `MinimumWait` 1s `:21`, `RunAsync` + `:40` with the delay applied `:51` and the no-targets exit `:53-57`, `ComputeWaitTime` `:104`, + `ComputeRetryBackoffSeconds` `:183` with jitter `[0.8, 1.2]` `:193`. + `InternalCommands/Processing/InternalCommandDispatcher.cs:21` resolving the closed handler `:75`. + `InternalCommands/Processing/InternalCommandMetrics.cs:20` (`MeterName` = `MMCA.Common.InternalCommands`), `internal_commands.processed.count` `:38-39`, `.failed.count` `:48-49`, `.dead_letter.count` `:57-58`, `.execution.duration` `:66-67`, `.execution.lag` `:75-76`, `.pending.depth` `:92-93`, - `.oldest_due.age` `:104-105`. `Administration/InternalCommandsSettings.cs:15` with `SectionName` `:18`, - `Enabled` `:27`, `BatchSize` 50 `:31`, `MaxAttempts` 5 `:39`, `PollingIntervalSeconds` 2 `:49`, - `ProcessingDelaySeconds` 0 `:58`, `LeaseSeconds` 300 `:68`, `RetryBackoffBaseSeconds` 10 `:77`, - `MaxRetryBackoffSeconds` 600 `:86`, `RetentionDays` 7 `:93`, `CleanupIntervalHours` 6 `:108`.* + `.oldest_due.age` `:104-105`. `InternalCommands/Administration/InternalCommandsSettings.cs:15` with + `SectionName` `:18`, `Enabled` `:27`, `BatchSize` 50 `:31`, `MaxAttempts` 5 `:39`, + `PollingIntervalSeconds` 2 `:49`, `ProcessingDelaySeconds` 0 `:58`, `LeaseSeconds` 300 `:69`, + `RetryBackoffBaseSeconds` 10 `:78`, `MaxRetryBackoffSeconds` 600 `:87`, `RetentionDays` 7 `:94`, + `CleanupIntervalHours` 6 `:109`.* - *MMCA.Store adoption (paths rooted at `MMCA.Store/Source/Modules/Sales/MMCA.Store.Sales.Application/`): `Orders/InternalCommands/SendOrderPaymentFailedEmailInternalCommand.cs:15` with `[InternalCommandName("Sales.SendOrderPaymentFailedEmail")]` `:14` and the at-least-once, no-sent-marker - remark `:9-12`; its handler `Orders/InternalCommands/SendOrderPaymentFailedEmailInternalCommandHandler.cs:19` - implementing `ICommandHandler` `:24`, the - return-success-on-missing-order branch `:36-40` and missing-customer branch `:46-50`, the unwrapped - `emailSender.SendAsync` `:59`, and the remarks stating both policies `:15-18`. Scheduled from + remark `:10-11`; its handler `Orders/InternalCommands/SendOrderPaymentFailedEmailInternalCommandHandler.cs:20` + implementing `ICommandHandler` `:25`, the + return-success-on-missing-order branch `:37-40` and missing-customer branch `:47-50`, the unwrapped + `emailSender.SendAsync` `:60`, and the remarks stating both policies `:17-18`. Scheduled from `Orders/Saga/OrderPaymentFailedSagaHandler.cs:32,35` (`IInternalCommandScheduler` resolved from the - handler's own scope, `runAt: null`), which also schedules `ExpireUnpaidOrderInternalCommand` `:79-82`. - Other Store internal commands read this run: `Orders/InternalCommands/SendOrderShippedEmailInternalCommand.cs`, - `Orders/InternalCommands/ExpireUnpaidOrderInternalCommand.cs` and - `MMCA.Store.Catalog.Application/Products/InternalCommands/PublishProductVariantChangedInternalCommand.cs`.* + handler's own scope, `runAt: null`), which also schedules `ExpireUnpaidOrderInternalCommand` `:81-83`. + Deployed polling: `MMCA.Store/infra/main.bicep:1493` (outbox 300) and `:1500` (queue 60).* - *MMCA.ADC adoption (paths rooted at `MMCA.ADC/Source/Modules/Conference/`): - `MMCA.ADC.Conference.Application/Sessions/UseCases/DecisionSupport/ScoreEventSessions/ScoreEventSessionsInternalCommand.cs:26-27` - implementing `IInternalCommand, IRequiresPermission, IHasTimeout`, `[InternalCommandName("Conference.ScoreEventSessions.v1")]` - `:25`, `Permission` `:35` with the restored-principal rationale `:29-34`, `Timeout` 12 minutes `:44` with - the must-stay-below-the-lock-TTL rationale `:37-43`, and the what-it-replaced remark `:13-19`. Its - handler `.../ScoreEventSessionsInternalCommandHandler.cs:39` implementing - `ICommandHandler` `:44`, `ClaimTimeToLive` 15 minutes `:53`, - `ClaimWait` `TimeSpan.Zero` `:60`, the claim `:75-77`, the claim-loser success `:79-83`, the refusal - branch `:87-90`, and the three remarks paragraphs `:14-21` (lock and skip), `:22-29` (refusal versus - fault) and `:30-33` (idempotent as required). Trigger endpoint - `MMCA.ADC.Conference.API/Controllers/Sessions/SessionSelectionController.cs:108` (`[HttpPost("score/{eventId}")]`), - `[NonIdempotent(...)]` `:109`, the schedule call `:115-117` and `return Accepted()` `:126`.* + `MMCA.ADC.Conference.Application/Sessions/UseCases/DecisionSupport/ScoreEventSessions/ScoreEventSessionsInternalCommand.cs:38-39` + declaring `(EventIdentifierType EventId, DateTime? RequestedAtUtc = null)` and implementing + `IInternalCommand, IRequiresPermission, IHasTimeout, IFeatureGated`, + `[InternalCommandName("Conference.ScoreEventSessions.v1")]` `:37`, `FeatureName` `:48`, `Permission` + `:56` with the restored-principal rationale `:50-55`, `Timeout` 12 minutes `:65` with the + must-stay-below-the-lock-TTL rationale `:58-64`, the what-it-replaced remark `:15-19`, and the + request-instant resumability remark `:25-33`. Its handler `.../ScoreEventSessionsInternalCommandHandler.cs:42` + implementing `ICommandHandler` `:47`, `ClaimTimeToLive` 15 + minutes `:56`, `ClaimWait` `TimeSpan.Zero` `:63`, the claim `:78-80`, the claim-loser success `:82-86`, + the pass receiving `RequestedAtUtc` `:88`, the refusal branch `:90-94`, and the three remarks paragraphs + `:14-21` (lock and skip), `:22-29` (refusal versus fault) and `:30-36` (idempotent as required). Trigger + endpoint `MMCA.ADC.Conference.API/Controllers/Sessions/SessionSelectionController.cs:124` + (`[HttpPost("score/{eventId}")]`), `[FeatureGate(ConferenceFeatures.SessionScoring)]` `:125` with its + rationale `:115-121`, `[NonIdempotent(...)]` `:126`, the schedule call `:132-136`, the failure return + `:138-141` and `return Accepted()` `:144`. Deployed polling: `MMCA.ADC/infra/main.bicep:1700` (outbox + 300) and `:1706` (queue 60), repeated per service at `:1923-1924`, `:2063-2064` and `:2217-2218`.* - *Rubric and scorecard: §6 CQRS and Event-Driven Design criteria and red flags - (`Website/docs-src/governance/ArchitectureEvaluationCriteria.md:229-247`); §10 Messaging and Integration - Architecture intent, criteria and red flags (`:329-348`) at default weight 3 (`:352`). Scores: - `Website/docs-src/governance/common-ArchitectureScorecard.md:86` (§6 at weight 2, Maturity 4, - Implementation 9) and `:90` (§10 at weight 3, Maturity 4, Implementation 9), both from the 2026-09-19 - thirty-sixth-wave re-score at framework v1.205.0 (`:5`). Group G04 Domain and Integration Events + - Outbox Dual-Dispatch (`Website/docs-src/onboarding/00-group-taxonomy.md:59`). Framework v1.205.0 - (`MMCA.Common/FACTS.md:14`) / 19 published packages (`FACTS.md:19`) / 136 fitness test methods across 53 - abstract bases (`FACTS.md:48`) this run; ADR index rows for ADR-114 and ADR-121 at - `Website/docs-src/adr/README.md:126` and `:133`.* -- *Article 22 (`Article-22-live-channel-push.md`) already teaches the two lighter mechanisms this article - frames against: the bounded channel and its drain (its "The queue is where you say what the work is - worth" section, `:184`) and the cron scheduler (its "The sibling contract: work a clock owns" section, - `:256`). Read only, not edited by this run.* + (`Website/docs-src/governance/ArchitectureEvaluationCriteria.md:229-249`, the non-idempotent-consumer red + flag `:245`); §10 Messaging and Integration Architecture intent and criteria (`:329-341`) and red flags + (`:342-347`) at default weight 3 (`:349`). Scores: + `Website/docs-src/governance/common-ArchitectureScorecard.md:70` (§6 at weight 2, Maturity 4, + Implementation 9) and `:74` (§10 at weight 3, Maturity 4, Implementation 9), from the 2026-10-01 + re-score at framework v1.218.0 (`:5`). Group G04 Domain and Integration Events + Outbox Dual-Dispatch + (`Website/docs-src/onboarding/00-group-taxonomy.md:59`). Framework v1.221.0 (`MMCA.Common/FACTS.md:14`) + / 22 published packages (`FACTS.md:19`) / 141 fitness test methods across 55 abstract bases + (`FACTS.md:51`) this run; ADR index rows for ADR-114 and ADR-121 at `Website/docs-src/adr/README.md:127` + and `:134`.* +- *Article 22 (`live-channel-push.md`) already teaches the two lighter mechanisms this article frames + against: the bounded channel and its drain (its "The queue is where you say what the work is worth" + section, `:196`) and the cron scheduler (its "The sibling contract: work a clock owns" section, `:250`). + Read only, not edited by this run.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/event-schema-versioning.md b/docs-src/articles/event-schema-versioning.md index 4e7cf3bf..ed04dfcb 100644 --- a/docs-src/articles/event-schema-versioning.md +++ b/docs-src/articles/event-schema-versioning.md @@ -51,8 +51,8 @@ rule: you do not break them out from under a deployed reader. An event that carries only `MessageId` (idempotency) and `DateOccurred` (when the business action happened) has no version signal at all, and a consumer meeting an unfamiliar payload has nothing to branch on: it cannot tell a producer that has moved ahead of it from a shape it should refuse, and it -certainly cannot upcast. That is the one substantive CQRS and event-driven gap the scorecard names -under §6, and ADR-010 is the answer. +certainly cannot upcast. ADR-010 is the answer, and the scorecard's section 6 row cites its `SchemaVersion` +gate and the ADR-090 upcaster pipeline as CQRS and event-driven evidence. ## The MMCA answer: a version on every event, and a rule for changing it @@ -98,7 +98,7 @@ gone, and any consumer mid-deploy or slow to upgrade is reading a contract that New-type-for-breaking-change is the only safe option when transport binds by type and consumers deploy independently. -Since 2026-08-21 the framework ships the wiring for that migration, not only the rule (ADR-090). An +The framework ships the wiring for that migration, not only the rule (ADR-090, accepted 2026-08-21). An upcaster is one typed class, `IEventUpcaster`, registered by the module that owns the contract: @@ -121,7 +121,8 @@ the old type is deleting these lines. `SchemaVersion` is non-breaking by construction. A virtual get-only default (`=> 1`) means no existing event has to change and no outbox row has to be migrated: System.Text.Json tolerates the missing field -on old payloads and the type supplies the default; new rows simply gain `"schemaVersion":1`. It lives in +on old payloads and the type supplies the default; new rows simply gain `"SchemaVersion":1` (the outbox +serializer sets no naming policy, so the payload keeps the .NET property name). It lives in the framework, and a framework change reaches every consumer in one pass: the lockstep policy (ADR-016) bumps every `MMCA.Common.*` pin in every consumer together, with no phased rollout, so no consumer sits on a base record its producers have moved past. @@ -144,10 +145,9 @@ shape that silently changed. ADR-010 is candid that the field is a signal, not a complete mechanism. - **`SchemaVersion` by itself does not stop a consumer breaking on a real reshape.** It is a value on - the wire, and the load-bearing half is still the discipline: new type plus upcaster. That half is no - longer only a discipline. The framework now ships the registration extension point (2026-08-21, - ADR-090): a typed `IEventUpcaster`, `AddEventUpcaster<...>()`, a chaining registry - that preserves the envelope, a draining broker consumer for the retired queue, and two fitness + the wire, and the load-bearing half is the discipline: new type plus upcaster. That half has + framework support in the registration extension point (ADR-090): a typed + `IEventUpcaster`, `AddEventUpcaster<...>()`, a chaining registry that preserves the envelope, a draining broker consumer for the retired queue, and two fitness functions that reject two upcasters claiming one source contract or a target that does not raise `SchemaVersion`. Two gaps stay open and are worth naming: the framework itself still ships no V2 event of its own (its one concrete integration event stays at version 1, so the first real consumer @@ -200,7 +200,7 @@ MMCA.Common puts an enforced `SchemaVersion` on every event and answers a breaki type plus a registered upcaster that the framework chains and applies on both delivery paths, and how that complements the outbox's at-least-once delivery. -**Next in the series:** cross-service auth without a shared secret, JWKS dual-fetch and RS256 so an +**Next in the series:** cross-service auth without a shared secret, JWKS discovery and RS256 so an extracted service validates tokens with no shared key. *MMCA.Common is Apache-2.0 licensed and open source. Star the repo, read the 2-minute ADR-010 behind this @@ -211,13 +211,23 @@ policy, or `dotnet add package MMCA.Common.API` and try it.* *Tags: .NET, C Sharp, Software Architecture, Event-Driven Architecture, Microservices* -*Notes: this run re-verified the article against MMCA.Common `main` at v1.205.0, after the upcaster and -event-convention files were reorganized into deeper folders; every anchor below was re-read at its current -location. The mechanism half is no longer follow-up work (it shipped 2026-08-21, ADR-090). The non-generic -`IEventUpcaster` (`SourceType`, `TargetType`, `Upcast`) lives at -`MMCA.Common/Source/Core/MMCA.Common.Application/Interfaces/Events/IEventUpcaster.cs:28` and the typed -`IEventUpcaster` at line 67 of the same file, supplying the non-generic members -as default interface implementations (lines 72, 75 and 85). The contract `IEventUpcasterRegistry` +*Notes: this run (2026-10-02) re-verified the article against MMCA.Common `main` at v1.221.0 +(`git describe --tags` returns `v1.221.0-1-g36228518`); every anchor below was re-read at its current +location. Body corrections this run: the outbox payload key is `"SchemaVersion":1`, not camelCase, because +the outbox `SerializerOptions` set only `ReferenceHandler.IgnoreCycles` and no naming policy +(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/Outbox/OutboxMessage.cs:17-20`, with the +payload serialized at line 140), matching ADR-010's Rationale +(`Website/docs-src/adr/010-integration-event-schema-versioning.md:45`) and its Revision (2026-10-01) +(lines 149-159); and the "one substantive gap the scorecard names under section 6" sentence is replaced, because +the current Common section 6 row (`Website/docs-src/governance/common-ArchitectureScorecard.md:70`) cites +`SchemaVersion`, `EventVersioningConventionTests` and the ADR-090 upcaster pipeline as evidence and holds +the category below 10 for DTO-projection read models, not for versioning (only ADR-010's historical +Context, line 14, records the rubric flagging the gap). Before/after wording ("now", "no longer") was +also removed from the ADR-090 paragraphs. The non-generic `IEventUpcaster` (`SourceType`, `TargetType`, +`Upcast`) lives at `MMCA.Common/Source/Core/MMCA.Common.Application/Interfaces/Events/IEventUpcaster.cs:28` +and the typed `IEventUpcaster` at line 67 of the same file, supplying the +non-generic members as default interface implementations (lines 72, 75 and 85). The contract +`IEventUpcasterRegistry` (`MMCA.Common/Source/Core/MMCA.Common.Application/Interfaces/Events/IEventUpcasterRegistry.cs:24`) is implemented by `EventUpcasterRegistry` (`MMCA.Common/Source/Core/MMCA.Common.Application/Services/EventUpcasterRegistry.cs:30`), whose @@ -226,23 +236,23 @@ the cycle walk in `BuildTerminalTypes`, lines 133-161), whose chain walk advance DECLARED `TargetType` (lines 110-120), and which stamps `MessageId` and `DateOccurred` from the pre-hop instance after every hop (`PreserveEnvelope`, lines 169-179). Registration is `AddEventUpcaster()` -(`MMCA.Common/Source/Core/MMCA.Common.Application/DependencyInjection.cs:559`), a singleton added through -`TryAddEnumerable` (line 564), with the registry itself registered at line 43. Both delivery paths -consult it: `DomainEventDispatcher` upcasts the integration branch to its terminal contract before -selecting handlers -(`MMCA.Common/Source/Core/MMCA.Common.Application/Services/DomainEventDispatcher.cs:62`) while the -`IDomainEventHandler` branch is deliberately untouched (line 55), and a broker host binds a retired -queue with `RegisterUpcastedIntegrationEventConsumer` -(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Messaging/Consumers/IntegrationEventConsumerExtensions.cs:78`) +(`MMCA.Common/Source/Core/MMCA.Common.Application/DependencyInjection.Extensibility.cs:81`), a singleton +added through `TryAddEnumerable` (line 86), with the registry itself added by `TryAddSingleton` at +`MMCA.Common/Source/Core/MMCA.Common.Application/DependencyInjection.cs:40`. Both delivery paths consult +it: `DomainEventDispatcher` upcasts the integration branch to its terminal contract before selecting +handlers (`MMCA.Common/Source/Core/MMCA.Common.Application/Services/DomainEventDispatcher.cs:62`) while +the `IDomainEventHandler` branch is deliberately untouched (line 55), and a broker host binds a +retired queue with `RegisterUpcastedIntegrationEventConsumer` +(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Messaging/Consumers/IntegrationEventConsumerExtensions.cs:123`) onto `UpcastingIntegrationEventConsumer` (`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Messaging/Consumers/UpcastingIntegrationEventConsumer.cs:32`), which dedups on the original `MessageId` before any upcasting (lines 69-83: the id is read at line 71 and `IInboxStore.TryBeginAsync` runs at line 79). Misconfiguration fails host start: `EventUpcasterStartupValidator` (`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Messaging/Consumers/EventUpcasterStartupValidator.cs:20`) -resolves the registry as an `IHostedService`, registered at -`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/DependencyInjection.cs:209`. The two upcaster fitness -functions are `EventUpcastersHaveUniqueSourceTypes` and `EventUpcastersIncreaseSchemaVersion` +resolves the registry as an `IHostedService`, added through `TryAddEnumerable` at +`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/DependencyInjection.cs:202-203`. The two upcaster +fitness functions are `EventUpcastersHaveUniqueSourceTypes` and `EventUpcastersIncreaseSchemaVersion` (`MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Rules/Contracts/ArchitectureRules.Upcasters.cs:12` and `:28`), surfaced as two facts on `EventConventionTestsBase` (`MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Contracts/EventConventionTestsBase.cs:23` @@ -251,17 +261,19 @@ line ties it to ADR-010's named follow-up (`Website/docs-src/adr/090-event-upcaster-registration.md:4`), its five decision points sit at lines 30-74 and the migration recipe at lines 76-87, and the two residual gaps quoted in the trade-offs are its own (no framework V2 event yet, lines 126-130; outbox type-name aliasing out of scope, lines 114-122, -narrowed by that record's 2026-09-03 revision but still called out of scope). ADR-010's Status line +narrowed by that record's 2026-09-03 revision but still called out of scope); its Revision (2026-10-01), +lines 161-170, refreshes citations only and moves the `AddEventUpcaster` path to +`DependencyInjection.Extensibility.cs`. ADR-010's Status line (`Website/docs-src/adr/010-integration-event-schema-versioning.md:4`) carries the Helpdesk gap closed -2026-06-27, ADC's seven events plus the ECommerce tree 2026-08-14, Common's own event 2026-08-18 and the -upcaster extension point 2026-08-21, and has since taken two further entries this article does not cover: -the 2026-09-11 payload-purity amendment (an integration event may neither ship from outside a `*.Shared` -assembly nor expose a `*.Domain` type on its wire shape) and a 2026-09-19 update recording four concrete -Store integration events rather than one. Its trade-off sections moved with those edits: the first -trade-off reads as shipped (lines 50-56); the "no longer vacuous" trade-off sits at lines 57-89, with the -Shared-layer namespace relaxation for Common's module-less map at lines 63-68 and the -closed-Helpdesk-gap sentence at lines 87-89; the informational-on-the-wire trade-off is at lines 90-92. -Still verified this run: `BaseIntegrationEvent` with `public virtual int SchemaVersion => 1;` +2026-06-27, ADC's seven events plus the ECommerce tree 2026-08-14, Common's own event 2026-08-18, the +upcaster extension point 2026-08-21, the 2026-09-11 payload-purity amendment (an integration event may +neither ship from outside a `*.Shared` assembly nor expose a `*.Domain` type on its wire shape) and a +2026-09-19 update recording four concrete Store integration events; the article does not cover the last +two. Its trade-off sections: the first trade-off reads as shipped (lines 52-58); the "no longer vacuous" +trade-off sits at lines 59-91, with the Shared-layer namespace relaxation for Common's module-less map at +lines 65-70 and the closed-Helpdesk-gap sentence at lines 89-91; the informational-on-the-wire trade-off +is at lines 92-94. Still verified this run: `BaseIntegrationEvent` with +`public virtual int SchemaVersion => 1;` (`MMCA.Common/Source/Core/MMCA.Common.Domain/DomainEvents/BaseIntegrationEvent.cs:32`), the `public override int SchemaVersion => 2;` override pattern documented on the same member (line 19) with the ADR-090 wiring at lines 22-29; Common's one concrete integration event, the sealed record diff --git a/docs-src/articles/external-oauth-login.md b/docs-src/articles/external-oauth-login.md index e46fd9d9..b4aed8fc 100644 --- a/docs-src/articles/external-oauth-login.md +++ b/docs-src/articles/external-oauth-login.md @@ -111,22 +111,26 @@ await HttpContext.SignOutAsync(ExternalLoginScheme); // the external pr // Stash the minted token pair server-side under a short TTL; the redirect carries only the opaque // code plus the client's own state, so the client can prove the code belongs to the flow it started. var exchangeCode = Convert.ToHexString(RandomNumberGenerator.GetBytes(32)); -await cacheService.SetAsync( - "oauth-exchange:" + exchangeCode, response, TimeSpan.FromMinutes(2), HttpContext.RequestAborted); +await cacheService.SetAsync( // prefix "oauth-exchange:", lifetime 2 minutes + OAuthExchangeCodePrefix + exchangeCode, response, OAuthExchangeCodeLifetime, HttpContext.RequestAborted); // Web target normally; the allow-listed native scheme when mobileReturnUrl is non-null (ADR-043). return Redirect(BuildSuccessRedirectUrl(uiBaseUrl, mobileReturnUrl, exchangeCode, returnUrl, clientState)); // OAuthControllerBase.ExchangeAsync (POST, [NonIdempotent], out of band): burn the code on first use. if (string.IsNullOrWhiteSpace(request.Code)) { return InvalidCode(); } -var response = await cacheService.GetAsync("oauth-exchange:" + request.Code, ct); +var cacheKey = OAuthExchangeCodePrefix + request.Code; +// The shared store, not a local copy: a code burned on another replica must be a miss here. +var response = await cacheService.GetFromSharedStoreAsync(cacheKey, cancellationToken); if (string.IsNullOrEmpty(response.AccessToken)) { return InvalidCode(); } // missing/replayed/expired => 400 -await cacheService.RemoveAsync("oauth-exchange:" + request.Code, ct); // single-use +await cacheService.RemoveAsync(cacheKey, cancellationToken); // single-use return Ok(response); ``` Read the redirect line again: it carries `code=...`, not `access_token=...`. The access and refresh tokens sit in the server-side cache the whole time. They reach the browser only through a same-origin POST response body, which history, the `Referer` header, and upstream access logs do not record. The +exchange reads the code from the shared cache store rather than a per-replica copy, so a code already +burned on one replica is a miss on every other. The code is burned on first read, so a leaked or replayed code buys nothing, and a blank, missing, replayed, or expired code returns HTTP 400. The exchange is marked `[NonIdempotent]`, because replaying a stored response would defeat the burn. @@ -190,7 +194,9 @@ An external user is a `User` with an empty password hash and salt, carrying `Log complementary question the third guard asks. The linkage is two nullable columns (`LoginProvider varchar(50)`, `ProviderKey varchar(256)`) plus a unique index over the pair filtered to non-null rows, so two external identities cannot collide onto one account while local (null, null) -accounts stay unconstrained. Whichever of the three paths runs, the exchange finishes through the +accounts stay unconstrained. An existing account, whether matched by provider key or linked by email, +is refused before anything is saved when an administrator has locked it; a brand-new account cannot +be locked. Whichever of the three paths runs, the exchange finishes through the shared `IssueTokensAsync` workflow, which opens a refresh *session* for the device (hashed at rest, a per-user cap, a rotation chain) rather than stamping a plaintext refresh token on the aggregate, and hands back the same `AuthenticationResponse` shape a password login returns. A brand-new external user @@ -294,121 +300,113 @@ revoke-on-reuse forced re-login. *Tags: .NET, C Sharp, OAuth, Security, Software Architecture* -*Notes: re-verified every type, behavior and anchor against source on 2026-09-19 (framework v1.205.0). -Three behavior changes since the 2026-08-19 pass are reflected above: Apple joined Google and GitHub as -a third config-gated provider, the by-email link now runs three guards instead of one, and token -issuance moved to the shared refresh-session workflow. Every anchor in `OAuthControllerBase.cs`, -`ExternalAuthExtensions.cs`, ADC's `AuthenticationService.cs` / `User.cs` and both ADRs moved; three of -the cited MMCA.Common.UI file paths gained an `Auth/` or `Auth/OAuth/` folder level, and the MAUI broker -moved into `Capabilities/Auth/`. Anchors below are this run's. -`MMCA.Common.API`: -`OAuthControllerBase` (abstract, primary ctor takes `IAuthenticationService`/`ICacheService`/`IConfiguration`; -`Source/Presentation/MMCA.Common.API/Controllers/OAuthControllerBase.cs:35-38`), the exchange-code prefix -`"oauth-exchange:"` (`:45`), the client-state properties key `ClientStateItemKey = "clientState"` (`:49`) -and the two-minute `OAuthExchangeCodeLifetime` (`:50`). Challenge endpoints `GoogleLogin` -`[HttpGet("google")]` (`:57-60`), `GitHubLogin` `[HttpGet("github")]` (`:67-70`) and `AppleLogin` -`[HttpGet("apple")]` (`:80-83`), each taking `[FromQuery] Uri? returnUrl` and `[FromQuery] string? state`. -`CompleteAsync` `[HttpGet("complete")]` (`:97-100`) authenticates the external cookie (`:103`), reads the -stashed pair via `ReadChallengeState` (`:115`; method `:151-152`), computes -`mobileReturnUrl = GetAllowedMobileReturnUrl(returnUrl)` (`:116`), extracts -`(provider, providerKey, email, firstName, lastName)` (`:118`, `ExtractClaims` `:214-222`), calls -`ExternalLoginAsync` (`:125-126`), on failure `RedirectError(...)` (`:130`; `GetErrorCode` `:254-255`, -`RedirectError` `:264-267`, `RedirectToLoginWithError` `:257-258`), `SignOutAsync(ExternalLoginScheme)` -(`:136`), mints the code via `Convert.ToHexString(RandomNumberGenerator.GetBytes(32))` (`:141`) and -`cacheService.SetAsync(...)` (`:142-143`), then redirects via -`BuildSuccessRedirectUrl(uiBaseUrl, mobileReturnUrl, exchangeCode, returnUrl, clientState)` (`:145`; -five-argument builder `:154-168`, appending `&state=` only when the client supplied one `:161-163`, never -a token). `ExchangeAsync` `[HttpPost("exchange")]` / `[NonIdempotent]` / `[AllowAnonymous]` (`:177-181`, -attribute at `:178`) rejects a blank code up front (`:185-188`), detects a cache miss via empty -`AccessToken` and returns 400 `InvalidCode` (miss check `:195-198`; `InvalidCode` `:206-212`), and burns -the code via `RemoveAsync` (`:201`). `ChallengeProvider` (`:301-317`) sets -`RedirectUri = "/auth/oauth/complete"`, stashes `returnUrl`, and stashes the opaque client state under -`ClientStateItemKey` so the client can prove the code belongs to the flow it started (`:310-313`). -ADR-043 native-callback: `GetAllowedMobileReturnUrl` returns the stashed URL only when it is an absolute -URI whose custom scheme is in `OAuth:AllowedReturnUrlSchemes`, and `http`/`https` never match, so no open -redirect (`:276-290`); a missing or empty section means no allowlist (`:287-288`); `AppendQuery` uses -`OriginalString` (`:292-299`). ADR-043 record: -`Website/docs-src/adr/043-mobile-deep-links-and-native-oauth-callback.md` (`## Status` `:3`, Accepted -2026-07-15 with revisions recorded through 2026-08-31 (`:234`), 2026-09-07 (`:281`) and 2026-09-11 -(`:302`); `## Decision` `:71`, `## Trade-offs` `:119`). -Native client broker (ADR-043): `IExternalAuthBroker` -(`Source/Presentation/MMCA.Common.UI/Services/Capabilities/Auth/IExternalAuthBroker.cs:10`) with the MAUI -`MauiExternalAuthBroker` (`Source/Presentation/MMCA.Common.UI.Maui/Capabilities/Auth/MauiExternalAuthBroker.cs:20`), -which holds an `OAuthFlowStateStore` (`:24`), begins a per-attempt state because the completion page -refuses a code that does not belong to an attempt started on this device (`:63-66`), puts it on the -challenge URL (`:70-71`), runs `WebAuthenticator.Default.AuthenticateAsync` (`:75-81`), pulls `code` -(`:83-88`) and the returned `state` (`:90`), then `NavigateTo("/auth/oauth-complete?code=...&state=...")` -(`:94-98`) to hand off to the shared completion page (it does NOT POST `ExchangeAsync` itself); web heads -get the null default. `Login.razor` -(`Source/Presentation/MMCA.Common.UI/Pages/Auth/Login.razor`) gates the whole block on -`_hasExternalProviders` (`:87`, field `:174`, assigned from the three provider flags `:180`), branches per -provider (`AppleEnabled` `:98`, `GoogleEnabled` `:119`, `GitHubEnabled` `:140`), checks -`ExternalAuthBroker.IsAvailable` (`:100`, `:121`, `:142`) and calls `SignInWithBrokerAsync` (`:104`, -`:125`, `:146`). `ExternalAuthExtensions` -(`Source/Presentation/MMCA.Common.API/Authentication/ExternalAuthExtensions.cs`): -`ExternalLoginScheme = "ExternalLogin"` (`:28`), `AddExternalAuthProviders(IConfiguration)` (`:38`) reads -`OAuth:Google:ClientId` / `OAuth:GitHub:ClientId` / `OAuth:Apple:ClientId` (`:40-43`), returns untouched -when all three are unset (`:47-52`), calls `AddAuthentication()` with no argument (`:56`), adds the -`ExternalLogin` cookie named `mmca_external_login`, HttpOnly, `SameSite=Lax`, 10-minute `ExpireTimeSpan` -(`:83-92`), then registers each configured provider (`:60-73`). `AddGoogleProvider` throws on a missing -`ClientSecret` (`:98-100`), `AddGitHubProvider` throws likewise (`:110-112`) and adds -`Scope.Add("user:email")` (`:117`), and `AddAppleProvider` (`:121-145`) sets `GenerateClientSecret = true` -(`:130`) and throws on a missing `Apple:TeamId` (`:131-133`), `Apple:KeyId` (`:134-136`) or -`Apple:PrivateKeyPem` (`:137-139`). -`IAuthenticationService.ExternalLoginAsync` default returns `Error.Failure("Auth.ExternalLoginNotSupported", ...)` -(`Source/Core/MMCA.Common.Application/Auth/IAuthenticationService.cs:139`). +*Notes: re-verified against source on 2026-10-02 (framework v1.221.0). Body changes in this pass: the +`ExchangeAsync` half of the code block reads the code through +`cacheService.GetFromSharedStoreAsync(cacheKey, ...)` (it showed a stale +`GetAsync` call) and the `SetAsync` call names `OAuthExchangeCodePrefix` / `OAuthExchangeCodeLifetime` +as source does; the paragraph after the block states the shared-store read; and "Finding the local +user" states the administrator-lock refusal for existing accounts. Every anchor after +`OAuthControllerBase.cs:190` moved +2, every `Login.razor` anchor moved +1, ADC's +`AuthenticationService.cs` anchors moved (-1 through the create branch, +12 from the lock check on), +and the Identity service host and `main.bicep` anchors moved. Anchors below are this run's; those +marked (audit) carry the 2026-10-02 audit's CONFIRMED verdict and were not re-read in this pass. +`MMCA.Common.API`: `OAuthControllerBase` +(`Source/Presentation/MMCA.Common.API/Controllers/OAuthControllerBase.cs`; primary ctor `:35-38`, prefix +`"oauth-exchange:"` `:45`, `ClientStateItemKey` `:49`, two-minute `OAuthExchangeCodeLifetime` `:50`, +`GoogleLogin` `:57-60`, `GitHubLogin` `:67-70`, `AppleLogin` `:80-83`, all (audit)). `CompleteAsync` +`[HttpGet("complete")]` (`:97-100`) authenticates the external cookie (`:103`), reads the stashed pair via +`ReadChallengeState` (`:115`; method `:151-152`), computes `GetAllowedMobileReturnUrl(returnUrl)` (`:116`), +extracts `(provider, providerKey, email, firstName, lastName)` (`:118`, `ExtractClaims` `:216-224`), +redirects `missing_claims` when key or email is absent (`:120-123`), calls `ExternalLoginAsync` +(`:125-126`), on failure `RedirectError(...)` (`:130`; `GetErrorCode` `:256-257`, +`RedirectToLoginWithError` `:259-260`, `RedirectError` `:266-269`), `SignOutAsync(ExternalLoginScheme)` +(`:136`), mints the code via `Convert.ToHexString(RandomNumberGenerator.GetBytes(32))` (`:141`), stashes +it with `cacheService.SetAsync(OAuthExchangeCodePrefix + exchangeCode, response, OAuthExchangeCodeLifetime, ...)` +(`:142-143`), then redirects via `BuildSuccessRedirectUrl(uiBaseUrl, mobileReturnUrl, exchangeCode, returnUrl, clientState)` +(`:145`; builder `:154-168`, `&state=` only when the client supplied one `:161-163`, the web target +carrying `returnUrl` `:166`, the native target `:167`, never a token). `ExchangeAsync` +`[HttpPost("exchange")]` / `[NonIdempotent]` / `[AllowAnonymous]` (`:177-181`, `[NonIdempotent]` at `:178`) +rejects a blank code (`:185-188`), builds the key once (`:190`), reads it with +`GetFromSharedStoreAsync` so a code burned on another replica is a miss (`:196`, +reasoning `:192-195`), returns 400 `InvalidCode` on an empty `AccessToken` (`:197-200`; `InvalidCode` +`:208-214`), burns the code via `RemoveAsync` (`:203`) and returns `Ok(response)` (`:205`). +`ChallengeProvider` (`:303-319`) sets `RedirectUri = "/auth/oauth/complete"` (`:307`), stashes `returnUrl` +(`:310`) and the opaque client state under `ClientStateItemKey` (`:312-315`). +ADR-043 native callback: `GetAllowedMobileReturnUrl` (`:278-292`) returns null for a non-absolute URI or +an `http`/`https` scheme (`:280-285`), reads `OAuth:AllowedReturnUrlSchemes` null-tolerantly so a missing +or empty section means no allowlist (`:287-290`) and matches the scheme (`:291`); `AppendQuery` uses +`OriginalString` (`:294-301`). ADR-043 record +(`Website/docs-src/adr/043-mobile-deep-links-and-native-oauth-callback.md`): `## Status` `:3`, +`## Decision` `:74`, `## Trade-offs` `:122`, dated revisions from 2026-07-28 (`:144`) through 2026-10-01 +(`:376`), including 2026-08-31 (`:237`), 2026-09-07 (`:284`), 2026-09-11 (`:305`) and 2026-09-25 (`:350`); +the last two are anchor passes that change no decision. +Native client broker (ADR-043, all (audit)): `IExternalAuthBroker` +(`Source/Presentation/MMCA.Common.UI/Services/Capabilities/Auth/IExternalAuthBroker.cs:10`) and +`MauiExternalAuthBroker` (`Source/Presentation/MMCA.Common.UI.Maui/Capabilities/Auth/MauiExternalAuthBroker.cs:20`; +`OAuthFlowStateStore` `:24`, per-attempt state `:63-66`, state on the challenge URL `:70-71`, +`WebAuthenticator.Default.AuthenticateAsync` `:75-81`, `code` `:83-88`, returned `state` `:90`, +`NavigateTo("/auth/oauth-complete?code=...&state=...")` `:94-98`; it does not POST `ExchangeAsync` +itself). `Login.razor` (`Source/Presentation/MMCA.Common.UI/Pages/Auth/Login.razor`) gates the block on +`_hasExternalProviders` (`:88`, field `:175`, assigned from the three provider flags `:181`), branches +per provider (`AppleEnabled` `:99`, `GoogleEnabled` `:120`, `GitHubEnabled` `:141`), checks +`ExternalAuthBroker.IsAvailable` (`:101`, `:122`, `:143`) and calls `SignInWithBrokerAsync` (`:105`, +`:126`, `:147`; method `:219`). +`ExternalAuthExtensions` (`Source/Presentation/MMCA.Common.API/Authentication/ExternalAuthExtensions.cs`): +`ExternalLoginScheme = "ExternalLogin"` (`:28`), `AddExternalAuthProviders(IConfiguration)` (`:38`), +`AddAuthentication()` with no argument (`:56`), cookie `mmca_external_login` (`:86`) with a 10-minute +`ExpireTimeSpan` (`:91`), Google `ClientSecret` throw (`:99-100`), GitHub `ClientSecret` throw +(`:111-112`) and `Scope.Add("user:email")` (`:117`), Apple `GenerateClientSecret = true` (`:130`) with +throws on a missing `Apple:TeamId` (`:131-133`), `Apple:KeyId` (`:134-136`) or `Apple:PrivateKeyPem` +(`:137-139`); the three `ClientId` reads (`:40-43`), the untouched return (`:47-52`), the provider +registrations (`:60-73`) and the cookie block (`:83-92`) are (audit). +`IAuthenticationService.ExternalLoginAsync` default returns `Auth.ExternalLoginNotSupported` +(`Source/Core/MMCA.Common.Application/Auth/IAuthenticationService.cs:139`, (audit)). `OAuthCodeExchangeRequest` (`Source/Core/MMCA.Common.Shared/Auth/Requests/OAuthCodeExchangeRequest.cs`). -UI button gating `ConfigurationOAuthUISettings` -(`Source/Presentation/MMCA.Common.UI/Services/Auth/OAuth/ConfigurationOAuthUISettings.cs`): `GoogleEnabled` -(`:16`), `GitHubEnabled` (`:19`), `AppleEnabled` (`:22`), all read from `OAuth:` (`:29-31`). -ADC adoption: `AuthenticationService.ExternalLoginAsync` overrides the interface default and opens the -transaction (`MMCA.ADC/Source/Modules/Identity/MMCA.ADC.Identity.Application/Users/AuthenticationService.cs:193`, -`ExecuteInTransactionAsync` `:200-202`); the ctor takes `IExternalLoginEmailVerifier` (`:51`). The body runs -in `ExternalLoginCoreAsync` (`:205`): lookup by `LoginProvider`+`ProviderKey` where-clause (`:214-215`), the -provider-supplied email validated with `Email.Create(email)` (`:233`) returning -`Error.Validation("Auth.ExternalEmailInvalid", ...)` on failure (`:236-239`) before the by-email lookup runs -(`:243-246`). An email match goes to `TryLinkProviderToExistingAccountAsync` (`:316-366`), which runs three -guards: `Error.Conflict("Auth.ExternalProviderAlreadyLinked", ...)` when the account is already linked to a -different provider, checked ahead of the verifier (`:325-331`); -`externalLoginEmailVerifier.IsCurrentExternalLoginEmailVerifiedAsync()` (`:338-339`) with -`Error.Unauthorized("Auth.ExternalEmailNotVerified", ...)` when the provider asserted nothing (`:343-346`); -and the SEC-ADC-01 pre-registration guard `if (existingUser.HasLocalPassword)` returning -`Error.Conflict("Auth.ExternalLinkRequiresLocalSignIn", ...)` (`:356-362`). Only past all three does -`existingUser.LinkExternalProvider(...)` run (`:364`). The create branch asks the same verifier (`:265-266`) -without gating on it and passes the answer to `User.CreateExternal(..., emailVerified)` (`:272-273`, -`AddAsync` `:280`); new users raise `UserRegistered(..., emailVerified)` (`:294-295`) while the local -registration path hard-codes `EmailVerified: false` (`:170`, reasoning at `:160-165`), which is why the -downstream speaker auto-link runs only on a provider-asserted address (`:286-291`). Token issuance is -`IssueTokensAsync(user, cancellationToken: cancellationToken)` (`:304`), opening a per-device refresh -session (hash at rest, per-user cap, rotation chain) instead of stamping a plaintext token on the -aggregate (`:299-303`); no `new AuthenticationResponse(...)` literal remains on this path. The guard -interface `IExternalLoginEmailVerifier` +`ConfigurationOAuthUISettings` (`Source/Presentation/MMCA.Common.UI/Services/Auth/OAuth/ConfigurationOAuthUISettings.cs`; +`GoogleEnabled` `:16`, `GitHubEnabled` `:19`, `AppleEnabled` `:22`, read from `OAuth:` `:29-31`, (audit)). +ADC adoption (`MMCA.ADC/Source/Modules/Identity/MMCA.ADC.Identity.Application/Users/AuthenticationService.cs`): +the ctor takes `IExternalLoginEmailVerifier` (`:54`); `ExternalLoginAsync` (`:192`) opens the transaction +(`ExecuteInTransactionAsync` `:199-201`) around `ExternalLoginCoreAsync` (`:204`), which looks up by +`LoginProvider` + `ProviderKey` (`:213-216`), validates the claim with `Email.Create(email)` (`:232`), +returns `Auth.ExternalEmailInvalid` on failure (`:235-238`), looks up by the validated email (`:242-245`) +and sends a match to `TryLinkProviderToExistingAccountAsync` (`:249`; method `:328-378`): the +one-provider guard `Auth.ExternalProviderAlreadyLinked` ahead of the verifier (`:337-343`), the verifier +call (`:350-351`) with `Auth.ExternalEmailNotVerified` (`:353-359`), and the SEC-ADC-01 guard +`if (existingUser.HasLocalPassword)` returning `Auth.ExternalLinkRequiresLocalSignIn` (`:368-374`, +reasoning `:361-367`) before `existingUser.LinkExternalProvider(...)` (`:376`). The create branch asks the +same verifier (`:264-265`) without gating on it, passes the answer to `User.CreateExternal(..., emailVerified)` +(`:271-272`) and adds the user (`:279`). An existing account (matched or linked) is refused when locked +(`CheckNotLocked`, `:288-295`; a new account cannot be locked). New users raise +`UserRegistered(..., emailVerified)` (`:306-307`, speaker auto-link reasoning `:299-303`) while local +registration hard-codes `EmailVerified: false` (`:168-169`, reasoning `:160-163`). Token issuance is +`IssueTokensAsync(user, cancellationToken: cancellationToken)` (`:316`, refresh-session reasoning +`:311-315`). `IExternalLoginEmailVerifier` (`MMCA.ADC/Source/Modules/Identity/MMCA.ADC.Identity.Application/Users/IExternalLoginEmailVerifier.cs:11`, -`IsCurrentExternalLoginEmailVerifiedAsync` `:19`). -`User.CreateExternal` (empty hash/salt, `UserRole.Attendee` at `:266`, sixth `emailVerified` parameter -`:253`, `IsEmailConfirmed = emailVerified` `:271`; -`MMCA.ADC/Source/Modules/Identity/MMCA.ADC.Identity.Domain/Users/User.cs:247-275`), -`LinkExternalProvider` (`:300-304`), `IsExternalLogin => LoginProvider is not null` (`:130`), +`IsCurrentExternalLoginEmailVerifiedAsync` `:19`, (audit)). +`User` (`MMCA.ADC/Source/Modules/Identity/MMCA.ADC.Identity.Domain/Users/User.cs`): `CreateExternal` +(`:247`, `bool emailVerified = false` `:253`, `UserRole.Attendee` `:266`, `IsEmailConfirmed = emailVerified` +`:271`), `LinkExternalProvider` (`:300`), `IsExternalLogin => LoginProvider is not null` (`:130`), `HasLocalPassword => PasswordHash.Length > 0` (`:151`), `LoginProvider` (`:102`) / `ProviderKey` (`:105`), -`Anonymize` clears both (`:494-495`). ADC `OAuthController` sealed subclass with -`[ApiController][Route("auth/oauth")][ApiVersion("1.0")]` -(`MMCA.ADC/Source/Modules/Identity/MMCA.ADC.Identity.API/Controllers/OAuthController.cs:17-20`). Service host -`AddExternalAuthProviders(builder.Configuration)` call -(`MMCA.ADC/Source/Services/MMCA.ADC.Identity.Service/Program.cs:197`, behind an "External OAuth providers -(Google / GitHub / Apple)" comment banner at `:189`), ADC allow-lists the `atldevcon` scheme -(`MMCA.ADC/Source/Services/MMCA.ADC.Identity.Service/appsettings.json:84`). AppHost -`OAuth__UIBaseUrl = ui HTTPS endpoint` (`MMCA.ADC/Source/Hosting/MMCA.ADC.AppHost/Program.cs:464`; prod -`infra/main.bicep:1690`, inside the `hasAnyOAuth` branch at `:1689`, the `hasAnyOAuth` variable itself at -`:169`, which now ORs `hasAppleOAuth`). Store non-adoption unchanged: no `OAuthController`, -`AddExternalAuthProviders` or `ExternalLoginAsync` override under `MMCA.Store`. +`Anonymize` clears both (`:494-495`). +ADC `OAuthController` sealed subclass with `[ApiController][Route("auth/oauth")][ApiVersion("1.0")]` +(`MMCA.ADC/Source/Modules/Identity/MMCA.ADC.Identity.API/Controllers/OAuthController.cs:17-20`, (audit)). +Service host `services.AddExternalAuthProviders(builder.Configuration)` +(`MMCA.ADC/Source/Services/MMCA.ADC.Identity.Service/Program.cs:196`, behind the "External OAuth providers +(Google / GitHub / Apple)" banner at `:188`); ADC allow-lists `atldevcon` +(`MMCA.ADC/Source/Services/MMCA.ADC.Identity.Service/appsettings.json:84`, also recorded by ADR-043's +2026-09-25 revision). AppHost `OAuth__UIBaseUrl` (`MMCA.ADC/Source/Hosting/MMCA.ADC.AppHost/Program.cs:464`, +(audit)); prod `OAuth__UIBaseUrl` at `MMCA.ADC/infra/main.bicep:1799`, inside the `hasAnyOAuth ? [` +branch at `:1798`, with the `hasAnyOAuth` variable at `:169` ORing `hasAppleOAuth`. +Store non-adoption: a Grep over `MMCA.Store/Source` `*.cs` on 2026-10-02 finds no `OAuthControllerBase`, +`AddExternalAuthProviders`, `ExternalLoginAsync`, `class OAuthController` or `LoginProvider`. The single code block is illustrative, trimmed (comments and branches condensed) from -`OAuthControllerBase.CompleteAsync`/`ExchangeAsync` (`:97-203`) with named calls, argument lists and cache -keys matching current source. ADR-036 -(`Website/docs-src/adr/036-external-oauth-login.md`) is titled "External OAuth Login (Federated -Google/GitHub/Apple) with Local-JWT Exchange" (`:1`); its `## Status` spans `:3-13`, including the -2026-09-07 revision (link-by-email requires both a provider-verified address and an account with no -password) and the 2026-09-19 revision (Apple as a third provider, three link guards, refresh-session -issuance, the provider assertion carried into the new account's confirmation state); the -three-ways-plus-three-guards decision bullet is `:73-118`, the "verified-email guard is ADC-level, not -framework-provided" trade-off is `:178-193`, and the ADC-only adoption paragraph is `:143-151`. -Published package count "nineteen" is `MMCA.Common/FACTS.md:19`.* +`OAuthControllerBase.CompleteAsync`/`ExchangeAsync` (`:97-206`), with named calls, argument lists and +cache-key constants matching current source. +ADR-036 (`Website/docs-src/adr/036-external-oauth-login.md`): title "External OAuth Login (Federated +Google/GitHub/Apple) with Local-JWT Exchange" (`:1`); `## Status` spans `:3-13`, with the 2026-09-07 +revision at `:5` and the 2026-09-19 revision at `:10`; `## Decision` `:32`, the +three-ways-plus-three-guards bullet `:73-118`, the ADC-only adoption paragraph `:143-152` (Store at +`:149`); `## Rationale` `:153`; `## Trade-offs` `:172`, the "verified-email guard is ADC-level, not +framework-provided" bullet `:178-193`; `## Revision (2026-09-07)` `:205`; `## Revision (2026-10-01)` `:255` +(an anchor refresh only). The body states no package count; FACTS records 22 published packages +(`MMCA.Common/FACTS.md:19`).* diff --git a/docs-src/articles/extract-module-to-grpc-service.md b/docs-src/articles/extract-module-to-grpc-service.md index 6b46cf89..fb302ec6 100644 --- a/docs-src/articles/extract-module-to-grpc-service.md +++ b/docs-src/articles/extract-module-to-grpc-service.md @@ -4,8 +4,8 @@ > ADR-007, ADR-008, ADR-012, ADR-088, ADR-089 · Status: grounded in `Website/docs-src/adr/007-grpc-extraction.md`, > `Website/docs-src/adr/008-service-extraction-topology.md`, `Website/docs-src/adr/012-grpc-host-transport.md`, > `Website/docs-src/adr/088-gateway-edge-responsibilities.md`, -> `Website/docs-src/adr/089-gateway-topology-owned-by-configuration.md`, `MMCA.Common/CLAUDE.md` -> (the microservices extraction section), and `Website/docs-src/onboarding/group-13-grpc-contracts.md`. No em dashes. +> `Website/docs-src/adr/089-gateway-topology-owned-by-configuration.md`, `MMCA.Common/AGENTS.md` +> (the "Microservices Extraction Boundaries" section), and `Website/docs-src/onboarding/group-13-grpc-contracts.md`. No em dashes. **Subtitle:** A step-by-step walkthrough of lifting a module out of the monolith into its own gRPC service without rewriting application code. Define a contract, wire a typed client, flip the message bus @@ -96,9 +96,13 @@ That throws a `ResultFailureException` carrying the `Error` list; the intercepto server call shapes, logs it, and rethrows `errors.ToRpcException()`, an `RpcException` whose `StatusCode` comes from a `FrozenDictionary` mapping that mirrors the HTTP `ErrorType`-to-status table in `ErrorHttpMapping`, the internal type `ApiControllerBase` reads on the -REST side (the unhandled-failure filter reads the same one). The trailers carry every error as -structured metadata. The client adapter reads those trailers back and reconstructs -`Result.Failure(errors)`. One error model, two transports, written once in the interceptor. +REST side (the unhandled-failure filter reads the same one). The status comes from the most severe +error in the list, and the trailers carry every error as structured metadata. On the calling side, +`RpcException.ToResult()` reads those trailers back and reconstructs `Result.Failure(errors)`, degrading +a transport fault that carries no trailers to a single `Grpc.{StatusCode}` error. An adapter whose +interface returns a `Result` closes the round trip with it; one whose interface returns a plain value +(`IBookmarkCountService` returns a count) lets the `RpcException` propagate instead. One error model, +two transports, written once in the interceptor. ## Step 3: client side, AddTypedGrpcClient(serviceName) @@ -120,15 +124,20 @@ and resilience details ride along automatically: `HttpContext` onto the outgoing call's metadata, so the caller's JWT rides along downstream and distributed authorization works without each handler threading a token (it is a no-op outside an HTTP request, for example in a background processor). -- `AddStandardResilienceHandler()` gives every gRPC client the same Polly retry, timeout, and - circuit-breaker pipeline as the HTTP clients. A deliberate `SocketsHttpHandler` override forces +- `AddStandardResilienceHandler()` gives every gRPC client a Polly retry, timeout, and + circuit-breaker pipeline whose values come from `GrpcResilienceDefaults`. The timeouts and the retry + budget are the HTTP clients' own. The retry fires only on a failure to reach the peer (an + `HttpRequestException`), because every gRPC call is a POST and replaying one that reached the handler + could run it twice. The circuit breaker carries explicit gRPC values. A deliberate `SocketsHttpHandler` override forces explicit HTTP/2 so the resilience handler cannot defeat the h2c negotiation. The `services.Replace(...)` is deliberate and uses `Replace`, not `TryAdd`. By the time this runs (after -`ModuleLoader`), the container already holds either the real in-process `IBookmarkCountService` (if -Engagement is enabled in this host) or a `Disabled*` stub (registered by the module's -`RegisterDisabledStubs()` when the peer is disabled). `Replace` wins over both, so after the call the -resolved interface is always the gRPC adapter pointing at the extracted peer. That is why the call comes +`ModuleLoader`), the container holds one of three things: the real in-process `IBookmarkCountService` +(if Engagement is enabled in this host), a `Disabled*` stub (registered by the module's +`RegisterDisabledStubs()` when the peer is disabled in configuration), or nothing at all (a dedicated +service host names only its own module to `ModuleLoader`, so the peer is never discovered and no stub +is registered). `Replace` covers all three, so after the call the resolved interface is always the gRPC +adapter pointing at the extracted peer. That is why the call comes after module discovery. ## Step 4: flip the message bus from in-process to broker @@ -150,9 +159,11 @@ builder.Services.AddBrokerMessaging(builder.Configuration); ``` Your aggregate code, which does `AddDomainEvent(new BookmarkAdded(...))`, does not change. The -transactional outbox is what makes the switch safe: the same durable outbox row is drained to an -in-process handler today and published to the broker tomorrow. The reliability pattern and the -extraction boundary are the same mechanism (ADR-003). +transactional outbox follows the same setting. With a broker selected it resolves on: the event is +written as a durable outbox row in the same transaction as the aggregate change and published to the +broker after commit. With `InProcess` it resolves off and events dispatch inside the process that +raised them, unless the host opts in with `MessageBus:EnableOutbox=true`. The `OutboxMessages` table +stays mapped either way, so the switch is never a migration (ADR-003, as amended by ADR-100). ## Step 5: JWKS so the new service validates tokens @@ -160,8 +171,9 @@ The extracted Engagement service now receives forwarded JWTs from Conference and does so against the issuer's **JWKS**, the public signing keys, not a shared secret. `IJwksProvider` (implemented by `RsaJwksProvider` in Infrastructure) exposes the signing keys, and `JwksEndpointExtensions` in the API layer serves `/.well-known/jwks.json` so any extracted service can -fetch the issuer's public keys and validate independently. JWKS discovery is routed through the gateway -(ADR-004). No service ever needs to share a symmetric secret with another, which is what makes the fleet +fetch the issuer's public keys and validate independently. Under local Aspire the JWKS backchannel is routed +through the gateway; in Azure Container Apps each service points straight at the identity app's +in-cluster address (ADR-004, ADR-012). No service ever needs to share a symmetric secret with another, which is what makes the fleet safe to grow. ## Step 6: wire it in the AppHost with MMCA.Common.Aspire.Hosting @@ -202,8 +214,8 @@ errors on the other edge self-heal through the resilience pipeline you got for f Clients never address a service directly. A single YARP reverse-proxy gateway owns the route-to-service map and is the only entry point. It has no DbContext and no controllers; it is CORS, static files, the route table, and the edge concerns in step 8. You add the service's routes to the -gateway's table and reference it for discovery, and you wire JWKS discovery so the new service -resolves keys through that same gateway: +gateway's table and reference it for discovery, and in the local AppHost you wire JWKS discovery so +the new service resolves keys through that same gateway: ```csharp var gateway = builder.AddProject("gateway") @@ -272,8 +284,8 @@ app.MapReverseProxy(); server-rendered UI host whose every back-end call leaves from one address that the per-IP window would otherwise collapse into a single partition. ADC's gateway names the trusted-caller header in configuration and takes the secret itself from Key Vault. A request with no attributable client IP - is not limited at all: that is - fail-open, chosen over collapsing every unattributable caller into one shared bucket. The settings + skips the per-IP window (fail-open, chosen over collapsing every unattributable caller into one shared + bucket) but still counts against the concurrency cap. The settings validate on both construction paths, the options pipeline (`ValidateOnStart`) and a `Validator.ValidateObject` call at registration, because the limiter closes over an eagerly bound copy and a caller can hand it settings without passing through options at all. @@ -312,21 +324,25 @@ and JWKS-discovery wiring. There are two coherent profiles, and picking the wron - **Profile A (serves inbound cleartext gRPC, including any bidirectional pair).** Kestrel is `Http2`-only on cleartext (h2c prior knowledge), so peer gRPC clients negotiate without TLS. The - gateway must forward HTTP/2 (`ForwardHttp2=true`, and `transport: http2` on the container ingress). - JWKS uses the two-argument `WithJwksDiscovery(identity, gateway)`, because the HTTP/1.1 JwtBearer - backchannel cannot reach an Http2-only endpoint directly, so it goes through the gateway, which - terminates TLS and routes `/.well-known/*` on. Any service that **serves** gRPC over cleartext needs + gateway cluster fronting the host declares `Version` 2 with `VersionPolicy` `RequestVersionExact` in + its `ReverseProxy` configuration (a policy that allows a lower version would downgrade to HTTP/1.1, + which the backend rejects), and the container ingress is `transport: http2`. Locally, JWKS uses the + two-argument `WithJwksDiscovery(identity, gateway)`, because the HTTP/1.1 JwtBearer backchannel + cannot reach an Http2-only endpoint directly, so it goes through the gateway, which terminates TLS + and routes `/.well-known/*` on. In Azure Container Apps each service sets the direct in-cluster + authority `http://` instead, and the `http2` ingress carries the metadata fetch. Any service that **serves** gRPC over cleartext needs Profile A. ADC uses it. - **Profile B (consumer-only, one-directional gRPC, gRPC rides the HTTPS/ALPN endpoint).** Kestrel is - `Http1AndHttp2`; gRPC clients use the HTTPS endpoint where ALPN negotiates HTTP/2. The gateway forwards - HTTP/1.1 (`ForwardHttp2=false`), and JWKS uses the single-argument `WithJwksDiscovery(identity)`. + `Http1AndHttp2`; gRPC clients use the HTTPS endpoint where ALPN negotiates HTTP/2. The gateway cluster + declares no version pair, so YARP's negotiating default resolves to HTTP/1.1 against the cleartext + endpoint, and JWKS uses the single-argument `WithJwksDiscovery(identity)`. A 2026 update is the cautionary tale here: Store originally chose Profile B because its gRPC edges looked "consumer-only," but a one-directional topology still has services that **serve** inbound cleartext gRPC, and Azure Container Apps cleartext ingress cannot deliver HTTP/2 to them under Profile B. The result was `HTTP_1_1_REQUIRED` 500s in production. Store converged to Profile A. The lesson: if any service in your fleet hosts an inbound gRPC server over cleartext, you are on Profile A, and you must -flip Kestrel, `ForwardHttp2`, the ingress transport, and the JWKS form together. +flip Kestrel, the gateway cluster's version policy, the ingress transport, and the JWKS form together. There is a sharper case the two-profile framing does not cover on its own: a host that needs both. ADC's Notification service serves a SignalR hub (whose WebSocket transport needs the HTTP/1.1 Upgrade @@ -348,8 +364,8 @@ endpoints instead of forcing one whole-host profile (ADR-012's mixed-endpoint am Walk the steps back and you see why this is not a one-way door. Because transport lives at the edge and the core talks to abstractions, a service can be re-collapsed into a combined host by changing configuration, not code. Enable the peer module in the same host, drop the `services.Replace(...)` that -swapped in the gRPC adapter, and the in-process implementation resolves again. Flip `MessageBusSettings` -back to `InProcessMessageBus` and events dispatch in-process. The `ModuleLoader` boots the same module +swapped in the gRPC adapter, and the in-process implementation resolves again. Set `MessageBus:Provider` +back to `InProcess` and `InProcessMessageBus` dispatches events in-process. The `ModuleLoader` boots the same module code either way. That reversibility is insurance: a small team can adopt microservices without betting that the split was correct on the first try. @@ -424,119 +440,101 @@ behind this walkthrough, or `dotnet add package MMCA.Common.Grpc` and try it.* *Tags: .NET, C Sharp, Microservices, gRPC, Software Architecture* -*Notes: 2026-07-27 correction: Step 6 previously said `MMCA.Common.Aspire.Hosting` provides "gRPC -project references". It does not. The package ships four source files (`Extensions.cs`, -`H2cHealthCheckExtensions.cs`, `H2cEndpointHealthCheck.cs` and `ServiceBusEmulatorResource.cs`) and -no gRPC API at all: in `Extensions.cs` the AppHost surface is `AddMessageBroker`, `WithBroker` (plus -a second overload taking the Service Bus emulator resource), `WithJwksDiscovery`, `WithE2eRsaKeys`, -`WithE2eRegistrationThrottleLift` and `With{SQLServer,Cosmos,Sqlite}DataSource` -(`:483`/`:542`/`:567`), and the single `gRPC` occurrence in the file is a comment at `:322` -explaining why the JwtBearer backchannel is routed through the gateway. The step's own code sample -already showed the truth: gRPC peers are wired with stock Aspire `WithReference`, exactly as ADC's -real AppHost does (`MMCA.ADC/Source/Hosting/MMCA.ADC.AppHost/Program.cs`: -`engagementService.WithReference(conferenceService).WaitFor(conferenceService)` at `:271`, the -deliberate no-`WaitFor` deadlock rationale at `:261` and `:273`, and the reverse edge -`conferenceService.WithReference(engagementService)` at `:274`). Verified type/behavior names and -conventions: `IMessageBus`/`InProcessMessageBus`/ -`BrokerMessageBus`/`MessageBusSettings`, `MicroserviceExtractionTests` (forbids MassTransit/gRPC/Protobuf -in Domain/Application/Shared), `*.Contracts` auto-compile of `Protos/**/*.proto` with -`GrpcServices="Both"`, the same-interface gRPC adapter (`*GrpcAdapter`), `AddGrpcServiceDefaults()`, -`GrpcResultExceptionInterceptor`, `ResultFailureException`, `result.ThrowIfFailure()`, -`errors.ToRpcException()`, `FrozenDictionary`, `AddTypedGrpcClient -(serviceName)`, `JwtForwardingClientInterceptor`, `AddStandardResilienceHandler`, `SocketsHttpHandler` -h2c override, `services.Replace(...)` over `Disabled*` stubs after `ModuleLoader`, `AddBrokerMessaging`, -`IJwksProvider`/`RsaJwksProvider`/`JwksEndpointExtensions` and `/.well-known/jwks.json`, AppHost -`WithBroker`/`WithReference`/`WaitFor`/`WithJwksDiscovery`, ADR-012 Profile A/B (Store converged to -Profile A in commit 49b7283). Two hosts run the ADR-012 mixed-endpoint profile and both were read -this run: ADC's Notification service -(`MMCA.ADC/Source/Services/MMCA.ADC.Notification.Service/appsettings.json:9-19`, default `http` -endpoint `http://*:8080` `Http1AndHttp2` for the SignalR WebSocket Upgrade plus a named `grpc` -endpoint `http://*:8081` `Http2` for the live-channel gRPC ingress -`LiveChannelPushService.PushToChannel`, resolved by peers via `http://_grpc.notification`; host -wiring at `.../Notification.Service/Program.cs:74` -(`ConfigureEndpointsWithHealthProbe(HttpProtocols.Http1AndHttp2, redeclareCleartextEndpoint: false)`, -rationale comment at `:73`), `:244` (`AddGrpcServiceDefaults()`) and `:290` -(`MapGrpcService().AllowAnonymous()`; the data-subject-export -`UserNotificationExportGrpcService` is mapped at `:298`)), and Store's Sales service, whose Kestrel -section carries the identical pair -(`MMCA.Store/Source/Services/MMCA.Store.Sales.Service/appsettings.json:10-19`). The Program.cs, -.proto, and adapter code blocks are illustrative composites of the documented conventions using a -generic "MMCA.App" namespace, not verbatim copies of ADC/Store source; exact signatures and -the `.Contracts` DI helper names against your own extracted module before publishing. Step 8 (the -edge process's own responsibilities) folds in ADR-088 and ADR-089, read at -`Website/docs-src/adr/088-gateway-edge-responsibilities.md` and -`Website/docs-src/adr/089-gateway-topology-owned-by-configuration.md`. Edge kit verified against -source this run, all under `MMCA.Common/Source/Hosting/MMCA.Common.Aspire/Gateway/`: -`GatewayCorrelationMiddleware` declares `HeaderName = "X-Correlation-ID"` -(`GatewayCorrelationMiddleware.cs:34`), mints from `Activity.Current?.TraceId` falling back to -`context.TraceIdentifier` (`:53`) and writes it onto the REQUEST headers, echoes via -`Response.OnStarting` (`:58`), takes only `RequestDelegate` (`:27`) and registers through -`UseGatewayCorrelation()` (`:82`); `AddGatewayRateLimiting` binds with `ValidateOnStart()` -(`GatewayRateLimitingExtensions.cs:258`) and the object overload runs -`Validator.ValidateObject(..., validateAllProperties: true)` at registration (`:279`), partitions on -`Connection.RemoteIpAddress` (`:197`) with `RateLimitPartition.GetNoLimiter` for an unresolvable IP -(`:202`), a fixed window at `:205`, a process-wide `GetConcurrencyLimiter` at `:232`, chained via -`PartitionedRateLimiter.CreateChained` (`:288`) and rejecting with -`StatusCodes.Status429TooManyRequests` (`:283`); the always-bypassed prefixes `["/health", "/alive", -"/.well-known"]` are declared at `:59` and matched by whole path segment at `:76`. Four kinds of -request take the no-limiter partition on BOTH limiters, documented at `:28-37`: an always-bypassed -prefix, a host-configured prefix, a synthetic-traffic request proving `SyntheticTrafficSecret` -(`GatewayRateLimitingSettings.cs:115`, header name at `:91`) and a trusted internal caller proving -`TrustedCallerSecret` (`:151`, header name at `:123`), the last two inert until their secret is set. -ADC's gateway names the trusted-caller header in configuration and takes the secret from Key Vault -(`MMCA.ADC/Source/Hosts/MMCA.ADC.Gateway/appsettings.json:26-32`). Limiter defaults: `PermitLimit` -120 (`GatewayRateLimitingSettings.cs:59`), `WindowSeconds` 60 (`:63`), `GlobalConcurrencyLimit` 200 -(`:73`), `BypassPathPrefixes` empty (`:82`), section name `"GatewayRateLimiting"` (`:50`). -`AddGatewayDownstreamHealthChecks(params string[] serviceNames)` -(`GatewayHealthCheckExtensions.cs:130`, with an options overload at `:148`) sets -`BaseAddress = http://{name}` (`:194`) with `ProbeTimeout` = 2 seconds (`:84`, applied at `:195` and -`:212`), `failureStatus: HealthStatus.Unhealthy` (`:210`) and `tags: [HealthCheckTags.Ready]` -(`:211`), probing `/alive` rather than `/health/ready` on purpose -(`DownstreamServiceHealthCheck.cs:17`). Consumer wiring read this run: both gateway hosts reference -two framework packages, `MMCA.Common.Aspire` and `MMCA.Common.Gateway` -(`MMCA.ADC.Gateway.csproj:3-4`, `MMCA.Store.Gateway.csproj:25-26`), and both run the same ordering. -ADC (`MMCA.ADC/Source/Hosts/MMCA.ADC.Gateway/Program.cs`): `AddReverseProxy().LoadFromConfig(...)` -plus `.AddMmcaGateway(...)` and `.AddServiceDiscoveryDestinationResolver()` at `:146-149`, -`app.UseCommonForwardedHeaders()` at `:158`, `UseGatewayCorrelation()` at `:163`, -`UseCommonSecurityHeaders()` at `:168`, `MapDefaultEndpoints()` at `:170`, `UseCors()` at `:171` and -`UseGatewayRateLimiting()` at `:178`. Store -(`MMCA.Store/Source/Hosts/MMCA.Store.Gateway/Program.cs`): `UseCommonForwardedHeaders()` at `:150`, -with the comment at `:146-149` pointing at `MMCA.Common.Gateway.ForwardedHeadersExtensions`, and -`UseGatewayCorrelation()` at `:155`. The helper itself is -`ForwardedHeadersExtensions.UseCommonForwardedHeaders()` -(`MMCA.Common/Source/Hosting/MMCA.Common.Gateway/ForwardedHeadersExtensions.cs:36`, delegating to -`UseForwardedHeaders(CreateForwardedHeadersOptions())` at `:40`), which is why neither gateway calls -`UseForwardedHeaders` directly and why both attribute the per-client-IP partition to the real caller -rather than to the ingress in front of them. Bypass lists are `"/hubs"` for ADC -(`MMCA.ADC.Gateway/appsettings.json:25`) and `"/Payments"` for Store -(`MMCA.Store.Gateway/appsettings.json:20`). Route table from configuration, counted this run by -`ClusterId` entries: 33 routes in ADC (`MMCA.ADC.Gateway/appsettings.json`, `Routes` section opening -at `:80`) and 15 in Store (`MMCA.Store.Gateway/appsettings.json:47`); ADR-089 records the same pair -with its cluster split at -`Website/docs-src/adr/089-gateway-topology-owned-by-configuration.md:92-96`. The hand-written -alternative it rejects (26 ADC / 10 Store `MapForwarder` calls, and a three-way ADC disagreement of -15 registered vs a comment saying 16 vs a test pinning 23 of 26) is that ADR's Context. The drift -gates are `MMCA.ADC/Tests/Hosts/MMCA.ADC.Gateway.Tests/RouteMapTests.cs` (the pinned `RouteMap` -`TheoryData` at `:131`, driven behaviorally from `:179`, `IProxyConfig` completeness read at `:221` -and `:239`) and `MMCA.Store/Tests/Hosts/MMCA.Store.Gateway.Tests/RouteMapTests.cs` (class at `:46`, -`RoutePatterns` at `:102`, `RouteMap` at `:126`, `IProxyConfig` read at `:229` and `:246`); both -compare the loaded `IProxyConfig` against the pinned table in BOTH directions, with Store's rationale -spelled out at `:31-35`. The step 8 `Program.cs` snippet is an illustrative composite of ADC's real -gateway ordering, not a verbatim copy. The declined edge JWT pre-validation and its measured revisit -trigger are ADR-088's "What the edge declines"; the per-replica and closed-over-settings trade-offs -are its Trade-offs section. Step 2's HTTP status table is -`FrozenDictionary ErrorTypeToStatusCode` on the internal `ErrorHttpMapping` -(`MMCA.Common/Source/Presentation/MMCA.Common.API/Middleware/ErrorHttpMapping.cs:14`, table at -`:20`), centralized so `ApiControllerBase` (`Controllers/ApiControllerBase.cs:48` for -`GetStatusCode`, `:58` for `BuildErrorsExtension`) and `UnhandledResultFailureFilter` share one copy. -2026-09-19 pass, six substantive corrections re-read against source: the route pair moved from 26/10 -to 33/15; the `IProxyConfig` both-directions comparison is no longer ADC-only, Store's gate does it -too; a gateway host references `MMCA.Common.Gateway` as well as `MMCA.Common.Aspire`, so the edge -snippet calls `UseCommonForwardedHeaders()` and step 8 names a fourth framework-owned edge -responsibility; the limiter's bypasses are four kinds, not two tiers; Store's Sales service is a -second mixed-endpoint host next to ADC's Notification service; and the previous pass's claim that -Store's gateway has no forwarded-headers step at all, together with the per-client-IP misattribution -finding built on it, is void. Not settled this run: the ADR-003 (outbox as the extraction mechanism), -ADR-004 (validation authority in the services) and ADR-019 (anonymous exemption) attributions were -not re-read against the ADR texts, and the ADR-019 contrast is corroborated only indirectly, by the -framework docstring at `GatewayRateLimitingExtensions.cs:17-21`.* +*Notes: 2026-10-02 pass (MMCA.Common v1.221.0). Anchors marked "re-read" were opened in this pass; +the rest were confirmed by this run's audit (`Reports/update-medium/2026-10-02/32.json`). Corrections, +all re-read: (1) gateway forward mode is per-cluster `ReverseProxy` configuration, not a flag: a +Profile A cluster declares `Version` 2 with `VersionPolicy = RequestVersionExact`, a Profile B +cluster declares no version pair (`Website/docs-src/adr/012-grpc-host-transport.md:307-312`, +`:341-344`); `MmcaGateway:ForwardHttp2` was removed (`MMCA.Common/CHANGELOG.md:2292`). (2) The +outbox resolves from the transport (ADR-100): `IsOutboxEnabled => EnableOutbox ?? Provider != +MessageBusProvider.InProcess` +(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Messaging/MessageBusSettings.cs:175`, +`EnableOutbox` at `:167`, `Provider` defaulting to `InProcess` at `:17`, the enum value at `:241`), +and `OutboxProcessor` is registered only when it resolves on +(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/DependencyInjection.cs:213-225`); ADR-003's +amendment note is at `Website/docs-src/adr/003-outbox-dual-dispatch.md:10-16`. (3) The gRPC +resilience pipeline takes every value from `GrpcResilienceDefaults` +(`MMCA.Common/Source/Presentation/MMCA.Common.Grpc/DependencyInjection.cs:127-142`): attempt and +total timeouts and the retry count delegate to `HttpResilienceDefaults` +(`MMCA.Common/Source/Core/MMCA.Common.Shared/Resilience/GrpcResilienceDefaults.cs:15`, `:18`, +`:24`), the retry predicate is `HttpRequestException` only (`DependencyInjection.cs:137`), and the +breaker's failure ratio 0.5, minimum throughput 10 and break duration 10 seconds are explicit +(`GrpcResilienceDefaults.cs:27`, `:30`, `:33`); the `SocketsHttpHandler` override is at +`DependencyInjection.cs:110-118` and the h2c address at `:96-98`. (4) An unattributable client IP +skips only the per-IP window (`RateLimitPartition.GetNoLimiter` at +`MMCA.Common/Source/Hosting/MMCA.Common.Aspire/Gateway/GatewayRateLimitingExtensions.cs:220`); +`ConcurrencyPartition` (`:241-255`) exempts only `IsExemptFromLimiters` (`:182-185`), so that +request still counts against the concurrency cap. (5) Gateway-routed JWKS is the local Aspire wiring +(`MMCA.ADC/Source/Hosting/MMCA.ADC.AppHost/Program.cs:373-375`); production ACA injects the direct +in-cluster authority `http://${identityApp.name}` (`MMCA.ADC/infra/main.bicep:1937`, `:2071`, +`:2223`), as `012-grpc-host-transport.md:313-320` states. (6) Reversibility names the real setting, +`MessageBus:Provider` (`MessageBusSettings.cs:14` section name, `:17` property). (7) Step 2's client +half: `RpcException.ToResult()` rebuilds `Result.Failure(errors)` from the trailers or degrades to +one `Grpc.{StatusCode}` error +(`MMCA.Common/Source/Presentation/MMCA.Common.Grpc/ResultGrpcExtensions.cs:218-227`), and +`ToRpcException()` takes the most severe error's status, `StatusCode.Internal` for an empty list +(`:119-125`). ADC's real `BookmarkCountServiceGrpcAdapter` returns `Task` and decodes no +trailers (`MMCA.ADC/Source/Services/MMCA.ADC.Engagement.Contracts/BookmarkCountServiceGrpcAdapter.cs:23-36`), +so the decode is credited to `ToResult()`, not to that adapter. (8) Step 3 names the third container +state: ADC service hosts name only their own module to `ModuleLoader`, so no stub exists +(`MMCA.ADC/AGENTS.md`, "Service hosts"); stubs are registered at +`MMCA.Common/Source/Core/MMCA.Common.Application/Modules/ModuleLoader.cs:112-119` through +`IModule.RegisterDisabledStubs` (`IModule.cs:34`), and ADC's `services.Replace` is at +`MMCA.ADC/Source/Services/MMCA.ADC.Engagement.Contracts/DependencyInjection.cs:49`. (9) The header +grounds in `MMCA.Common/AGENTS.md` ("Microservices Extraction Boundaries"), because +`MMCA.Common/CLAUDE.md` only imports it. AppHost surface of `MMCA.Common.Aspire.Hosting`, re-read +(`MMCA.Common/Source/Hosting/MMCA.Common.Aspire.Hosting/Extensions.cs`), 13 public methods: +`AddMailDev` `:141`, `AddMessageBroker` `:160`, `AddServiceBusEmulatorBroker` `:201`, `WithBroker` +`:252` and `:280`, `WithJwksDiscovery` `:309`, `WithE2eRsaKeys` `:353`, +`WithE2eRegistrationThrottleLift` `:392`, `WithE2eGatewayRateLimitLift` `:440`, and +`With{SQLServer,PostgreSQL,Cosmos,Sqlite}DataSource` `:483`/`:513`/`:542`/`:567`; no gRPC API, the +single `gRPC` occurrence is the comment at `:322`. gRPC peers use stock Aspire `WithReference`, as +ADC's AppHost does (audit: `engagementService.WithReference(conferenceService).WaitFor(conferenceService)` +at `:271`, the no-`WaitFor` deadlock rationale at `:261` and `:273`, the reverse edge at `:274`). +Mixed-endpoint hosts: ADC Notification (audit: +`MMCA.ADC/Source/Services/MMCA.ADC.Notification.Service/appsettings.json:9-19`, 8080 +`Http1AndHttp2` plus a named `grpc` endpoint 8081 `Http2`; re-read in `Program.cs`: +`ConfigureEndpointsWithHealthProbe(HttpProtocols.Http1AndHttp2, redeclareCleartextEndpoint: false)` +at `:73` with the rationale at `:58-72`, `AddGrpcServiceDefaults()` at `:241`, +`MapGrpcService().AllowAnonymous()` at `:285`, and +`UserNotificationExportGrpcService` at `:293`) and Store Sales (audit: +`MMCA.Store/Source/Services/MMCA.Store.Sales.Service/appsettings.json:10-19`). Edge kit, under +`MMCA.Common/Source/Hosting/MMCA.Common.Aspire/Gateway/`: `GatewayCorrelationMiddleware` +`HeaderName` `:34`, mint `:53`, `Response.OnStarting` `:58`, `RequestDelegate`-only ctor `:27`, +`UseGatewayCorrelation()` `:82` (audit); `AddGatewayRateLimiting` re-read: `ValidateOnStart()` at +`GatewayRateLimitingExtensions.cs:276`, `Validator.ValidateObject(..., validateAllProperties: true)` +at `:297`, `Connection.RemoteIpAddress` at `:215`, unknown-IP `GetNoLimiter` at `:220`, fixed window +at `:223`, `GetConcurrencyLimiter` at `:250`, `PartitionedRateLimiter.CreateChained` at `:306`, +`Status429TooManyRequests` at `:301`, always-bypassed `["/health", "/alive", "/.well-known"]` at +`:69`, whole-segment match at `:89` (documented at `:74`), the four no-limiter kinds documented at +`:28-37` (audit). Settings (audit): `PermitLimit` 120 (`GatewayRateLimitingSettings.cs:59`), +`WindowSeconds` 60 (`:63`), `GlobalConcurrencyLimit` 200 (`:73`), `BypassPathPrefixes` empty +(`:82`), section `"GatewayRateLimiting"` (`:50`), `SyntheticTrafficSecret` `:115` (header `:91`), +`TrustedCallerSecret` `:151` (header `:123`). Health checks (audit): +`AddGatewayDownstreamHealthChecks` `GatewayHealthCheckExtensions.cs:130` (overload `:148`), +`BaseAddress` `:194`, `ProbeTimeout` 2 seconds `:84` (applied `:195`, `:212`), `Unhealthy` `:210`, +`Ready` tag `:211`, `/alive` probe `DownstreamServiceHealthCheck.cs:17`. Consumer wiring (audit): +gateway csprojs reference `MMCA.Common.Aspire` and `MMCA.Common.Gateway` only +(`MMCA.ADC.Gateway.csproj:3-4`, `MMCA.Store.Gateway.csproj:25-26`); ADC gateway ordering +`MMCA.ADC/Source/Hosts/MMCA.ADC.Gateway/Program.cs:146-149`, `:158`, `:163`, `:168`, `:170`, `:171`, +`:178`; Store `MMCA.Store/Source/Hosts/MMCA.Store.Gateway/Program.cs:150`, `:155` (comment +`:146-149`); `UseCommonForwardedHeaders()` at +`MMCA.Common/Source/Hosting/MMCA.Common.Gateway/ForwardedHeadersExtensions.cs:36` delegating at +`:40`; bypass lists `"/hubs"` (`MMCA.ADC.Gateway/appsettings.json:25`, trusted-caller header and Key +Vault secret `:26-32`) and `"/Payments"` (`MMCA.Store.Gateway/appsettings.json:20`). Route table, +re-read: ADC `Routes` opens at `MMCA.ADC/Source/Hosts/MMCA.ADC.Gateway/appsettings.json:78` (33 +routes, audit count), Store at `MMCA.Store/Source/Hosts/MMCA.Store.Gateway/appsettings.json:51` (15 +routes, audit count); ADR-089's cluster split and its 26/10 `MapForwarder` Context at +`Website/docs-src/adr/089-gateway-topology-owned-by-configuration.md:92-96` (audit). Drift gates +(audit): ADC `RouteMapTests.cs` `:131`, `:179`, `:221`, `:239`; Store `RouteMapTests.cs` `:46`, +`:102`, `:126`, `:229`, `:246`, rationale `:31-35`. Step 2's HTTP table is `ErrorHttpMapping` +(`MMCA.Common/Source/Presentation/MMCA.Common.API/Middleware/ErrorHttpMapping.cs:14`, table `:20`; +`ApiControllerBase.cs:48` and `:58`; audit). The Program.cs, .proto and adapter code blocks are +illustrative composites in a generic "MMCA.App" namespace, not verbatim ADC or Store source; the +`AddEngagementBookmarkCountClient` helper name is illustrative. Earlier passes: 2026-07-27 (Step 6 +had credited `MMCA.Common.Aspire.Hosting` with gRPC project references) and 2026-09-19 (route pair +33/15, Store's both-directions `IProxyConfig` gate, the `MMCA.Common.Gateway` reference and +forwarded-headers step, four bypass kinds, Store Sales as a second mixed-endpoint host). Not settled +this run: the ADR-004 attribution (validation authority in the services) was not re-read against +the ADR text. Side finding, not edited here: ADR-012 still cites Notification `Program.cs:75` and +`:293`/`:301`, which sit at `:73` and `:285`/`:293` today.* diff --git a/docs-src/articles/feature-flags-cqrs-pipeline.md b/docs-src/articles/feature-flags-cqrs-pipeline.md index 83c8a534..23ca6853 100644 --- a/docs-src/articles/feature-flags-cqrs-pipeline.md +++ b/docs-src/articles/feature-flags-cqrs-pipeline.md @@ -7,7 +7,7 @@ > `MMCA.Common.Testing.Architecture/Bases/Governance/FeatureFlagLifecycleTestsBase.cs`, > `MMCA.Common.API/FeatureManagement/DisabledFeatureHandler.cs`, > `MMCA.Common.API/FeatureManagement/CurrentUserTargetingContextAccessor.cs`, `MMCA.Common.API/DependencyInjection.cs`, -> `Website/docs-src/adr/031-feature-flag-management.md`, `Website/docs-src/onboarding/group-05-cqrs-pipeline.md`, +> `MMCA.Common.API/Middleware/ErrorHttpMapping.cs`, `Website/docs-src/adr/031-feature-flag-management.md`, `Website/docs-src/onboarding/group-05-cqrs-pipeline.md`, > and the real gated use cases in ADC and Store. No em dashes. **Subtitle:** Decoupling release from deploy means shipping code dark and flipping a switch. Here is how @@ -74,12 +74,14 @@ Both do the identical three-step thing in `HandleAsync`: Manufacturing that typed failure is the one subtle piece. `TResult` is unconstrained (it is `Result` for some handlers and `Result` for others), so the decorator cannot just `new` up a failure. It holds a -cached delegate, `CreateFailure`, built once per closed generic type via `ResultFailureFactory.Build` +static delegate field, `_createFailure` (`FeatureGateCommandDecorator.cs:38`), filled once per closed +generic type by the `CreateFailure()` accessor through `ResultFailureFactory.Build` (`FeatureGateCommandDecorator.cs:44-45`), which turns an error list into the right `TResult` failure with no -per-call reflection. +per-call reflection. The field is built on the first short-circuit, not eagerly, so the happy path never +touches it (`FeatureGateCommandDecorator.cs:29-37`). The last, load-bearing detail is where the decorator sits. In `AddApplicationDecorators` the feature gate -is registered last on both sides (`DependencyInjection.cs:143` for commands, `:151` for queries). Because +is registered last on both sides (`DependencyInjection.cs:140` for commands, `:148` for queries). Because the pipeline applies decorators in reverse registration order (ADR-014), last-registered is outermost, so the feature gate is the first decorator every request meets. A command runs feature gate, authorization, logging, caching, validation, timeout, transaction, handler; a query runs feature gate, authorization, @@ -133,7 +135,9 @@ names are module constants, not magic strings scattered through handlers: `Sales = `"Sales.PaymentVerification"` (`SalesFeatures.cs:23`), `ConferenceFeatures.SessionizeIntegration` = `"Conference.SessionizeIntegration"` (`ConferenceFeatures.cs:23`), `NotificationFeatures.PushNotifications` = `"Notification.PushNotifications"` (`NotificationFeatures.cs:12`). ADC's `RefreshFromSessionizeCommand` -gates the Sessionize sync this way (`RefreshFromSessionizeCommand.cs:13,19`); Store's `VerifyPaymentCommand` +gates the Sessionize sync this way (`RefreshFromSessionizeCommand.cs:15,21`), ADC's +`ScoreEventSessionsInternalCommand` gates the paid AI session-scoring pass +(`ScoreEventSessionsInternalCommand.cs:39,48`), and Store's `VerifyPaymentCommand` gates the direct Stripe verification path (`VerifyPaymentCommand.cs:20,35`). ## The second surface, and why disabled means 404 @@ -150,9 +154,12 @@ When the flag is off, `DisabledFeatureHandler` Both surfaces agree on one convention that is worth stating plainly: a disabled feature returns not-found, never `403 Forbidden`. The pipeline decorator short-circuits with `ErrorType.NotFound`; the -edge handler returns `404`. A disabled feature is therefore indistinguishable from a nonexistent one. That -is deliberate: `404` hides the feature's existence rather than advertising a capability the caller is not -allowed to use. Turning a flag off makes the feature vanish, not merely refuse. +edge handler returns `404`. Neither answer looks like a permissions problem, but neither body is +anonymous either (ADR-031). The edge body is titled "Feature not available" (`DisabledFeatureHandler.cs:21`). +The CQRS failure travels through the Result to ProblemDetails mapping, whose `errors` extension serializes +each error's code and message (`ErrorHttpMapping.cs:62-69`), so the caller sees the `Feature.Disabled` code +and a message naming the flag (`FeatureGateCommandDecorator.cs:57-59`). Turning a flag off makes the +feature answer not-found and say that a feature is unavailable, not report a locked door. ## Trade-offs, honestly @@ -190,10 +197,16 @@ allowed to use. Turning a flag off makes the feature vanish, not merely refuse. (`AuthClaimTypes.Subject`, `AuthClaimTypes.cs:34`) and falls back to the mapped `ClaimTypes.NameIdentifier` (`ClaimsPrincipalExtensions.cs:26-28`) and then to `Identity.Name`. A filter configured with no targeting audience gains no stickiness from the accessor at all. -- **It is opt-in, and the pipeline side is adopted narrowly.** Exactly two use cases implement - `IFeatureGated` across both apps, both of them commands: ADC's `RefreshFromSessionizeCommand` - (`RefreshFromSessionizeCommand.cs:13`) and Store's `VerifyPaymentCommand` (`VerifyPaymentCommand.cs:20`). - No query is gated. The flag inventory is wider than the pipeline usage: twelve flag-name constants +- **It is opt-in, and the pipeline side is adopted narrowly.** Three use cases implement + `IFeatureGated` across both apps, all of them commands: ADC's `RefreshFromSessionizeCommand` + (`RefreshFromSessionizeCommand.cs:15`) and `ScoreEventSessionsInternalCommand` + (`ScoreEventSessionsInternalCommand.cs:39`), and Store's `VerifyPaymentCommand` (`VerifyPaymentCommand.cs:20`). + The scoring command is a durable internal command that the framework's processor runs through the same + decorator pipeline, so with its flag off the gate's failure completes the queued row rather than retrying + it (`ScoreEventSessionsInternalCommand.cs:42-46`); its trigger endpoint also carries + `[FeatureGate(ConferenceFeatures.SessionScoring)]` (`SessionSelectionController.cs:125`), so that flag is + enforced at both surfaces. No query is gated. The flag inventory is wider than the pipeline usage: + thirteen flag-name constants across six `*Features` classes (Common's Notifications and Privacy, ADC's Conference and Engagement, Store's Catalog and Sales), every one of them annotated `Permanent`, with the rest enforced at the HTTP edge by `[FeatureGate]`. It is a capability the pipeline offers uniformly, not something every handler @@ -213,14 +226,15 @@ your own decorator chain): validation, or a transaction. The cheapest request is the one you decline first. 3. **Manufacture a typed failure**, do not throw, when the flag is off. In a Result-based codebase that is a not-found value flowing back through the pipeline; the caller translates it to a `404`. -4. **Return not-found, never forbidden**, for a disabled feature, so turning a flag off hides the feature - rather than announcing a capability behind a locked door. +4. **Return not-found, never forbidden**, for a disabled feature, and say in the body that the feature is + unavailable, so turning a flag off reads as "not here right now" rather than a capability behind a locked door. 5. **Name flags as constants next to the module** they belong to, matched to config keys, so a flag flips at config-and-restart and there are no magic strings in handlers. The takeaway: **a feature flag is a cross-cutting concern, so put it where the other cross-cutting concerns live. Gate the pipeline at its outermost edge with a one-property marker interface, and your handlers stay -flag-free, your kill switch rejects with zero wasted work, and a disabled feature simply is not there.** +flag-free, your kill switch rejects with zero wasted work, and a disabled feature answers not-found before +any of it runs.** --- @@ -241,54 +255,65 @@ pattern (ADR-031), or `dotnet add package MMCA.Common.Application` and gate your *Tags: .NET, C Sharp, Software Architecture, CQRS, Feature Flags* -*Notes: verified names and behaviors from THIS run. +*Notes: verified names and behaviors from THIS run (2026-10-02, MMCA.Common v1.221.0). `IFeatureGated` interface with sole member `string FeatureName { get; }` -(`MMCA.Common/Source/Core/MMCA.Common.Application/UseCases/Markers/IFeatureGated.cs:10,16`; the file lives -under `UseCases/Markers/`, namespace `MMCA.Common.Application.UseCases.Markers`, and the older -`UseCases/IFeatureGated.cs` path cited in the previous ledger does not exist). +(`MMCA.Common/Source/Core/MMCA.Common.Application/UseCases/Markers/IFeatureGated.cs:10,16`). `FeatureGateCommandDecorator` (`MMCA.Common/Source/Core/MMCA.Common.Application/UseCases/Decorators/FeatureGateCommandDecorator.cs:20`): pass-through when `not IFeatureGated` (`:50-51`), `IFeatureManager.IsEnabledAsync(FeatureName)` (`:53`), -short-circuit with `Error.NotFoundError("Feature.Disabled", ...)` (`:56-59`), cached `CreateFailure` -delegate via `ResultFailureFactory.Build()` (`:44-45`). +short-circuit with `Error.NotFoundError("Feature.Disabled", ...)` and a message naming the flag (`:56-59`). +The cached failure factory is the static field `_createFailure` (`:38`), filled lazily by the +`CreateFailure()` accessor via `ResultFailureFactory.Build()` (`:44-45`) on the first +short-circuit, not in a static initializer (remarks `:29-37`); the previous ledger called the delegate +`CreateFailure` and implied eager construction, corrected this run. `FeatureGateQueryDecorator` is the identical shape on the query side -(`.../Decorators/FeatureGateQueryDecorator.cs:20,48-60`). -Registration as outermost decorator on both sides: command gate registered last (`DependencyInjection.cs:143`), -query gate registered last (`DependencyInjection.cs:151`) in `MMCA.Common.Application/DependencyInjection.cs`; -the full chains re-read this run are commands `TransactionalCommandDecorator` (`:137`), `TimeoutCommandDecorator` -(`:138`), `ValidatingCommandDecorator` (`:139`), `CachingCommandDecorator` (`:140`), `LoggingCommandDecorator` -(`:141`), `AuthorizationCommandDecorator` (`:142`), `FeatureGateCommandDecorator` (`:143`), and queries -`TimeoutQueryDecorator` (`:146`), `ValidatingQueryDecorator` (`:147`), `CachingQueryDecorator` (`:148`), -`LoggingQueryDecorator` (`:149`), `AuthorizationQueryDecorator` (`:150`), `FeatureGateQueryDecorator` (`:151`): -six query stages, with `Validating` between `Caching` and `Timeout`, drawn the same way in the XML doc at -`:79-85`; reverse-registration-order = outermost is ADR-014 (referenced via `group-05-cqrs-pipeline.md`). -HTTP edge: `AddHttpContextAccessor()` (`MMCA.Common.API/DependencyInjection.cs:104`), +(`.../Decorators/FeatureGateQueryDecorator.cs:20`, `_createFailure` `:38`, `HandleAsync` `:48-60`). +Registration as outermost decorator on both sides in `MMCA.Common/Source/Core/MMCA.Common.Application/DependencyInjection.cs` +(re-anchored this run, previously `:143`/`:151`): commands `TransactionalCommandDecorator` (`:134`), +`TimeoutCommandDecorator` (`:135`), `ValidatingCommandDecorator` (`:136`), `CachingCommandDecorator` (`:137`), +`LoggingCommandDecorator` (`:138`), `AuthorizationCommandDecorator` (`:139`), `FeatureGateCommandDecorator` +(`:140`); queries `TimeoutQueryDecorator` (`:143`), `ValidatingQueryDecorator` (`:144`), `CachingQueryDecorator` +(`:145`), `LoggingQueryDecorator` (`:146`), `AuthorizationQueryDecorator` (`:147`), `FeatureGateQueryDecorator` +(`:148`). The XML doc draws the same nesting, commands at `:61-71` and queries at `:74-83`; +reverse-registration-order = outermost is ADR-014 (referenced via `group-05-cqrs-pipeline.md`). +`NotFoundError` yields `ErrorType.NotFound` (`MMCA.Common/Source/Core/MMCA.Common.Shared/Abstractions/Error.cs:56`). +HTTP edge: `AddHttpContextAccessor()` (`MMCA.Common/Source/Presentation/MMCA.Common.API/DependencyInjection.cs:104`), `AddFeatureManagement().WithTargeting()` (`:105-106`) and `AddSingleton()` (`:107`) (built-in Percentage/TimeWindow/Targeting filters noted in the surrounding comment, `:94-96`); `DisabledFeatureHandler` (`MMCA.Common/Source/Presentation/MMCA.Common.API/FeatureManagement/DisabledFeatureHandler.cs:13`) writes a -`404` RFC 9457 ProblemDetails titled "Feature not available" (`:18-26`); `[FeatureGate(...)]` on -`DevicesController`, confirmed this run as an MMCA.Common framework controller (namespace -`MMCA.Common.API.Controllers.Notifications`), not ADC-authored code -(`MMCA.Common/Source/Presentation/MMCA.Common.API/Controllers/Notifications/DevicesController.cs:24`). -Flag-name constants, each preceded by its `[FeatureFlag(FeatureFlagLifetime.Permanent, Owner = ...)]`: -`SalesFeatures.PaymentVerification = "Sales.PaymentVerification"` -(`MMCA.Store/Source/Modules/Sales/MMCA.Store.Sales.Shared/SalesFeatures.cs:23`, attribute `:22`), -`ConferenceFeatures.SessionizeIntegration = "Conference.SessionizeIntegration"` -(`MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Shared/ConferenceFeatures.cs:23`, attribute `:22`), -`NotificationFeatures.PushNotifications = "Notification.PushNotifications"` -(`MMCA.Common/Source/Core/MMCA.Common.Shared/Notifications/NotificationFeatures.cs:12`, attribute `:11`). -Real gated use cases: `VerifyPaymentCommand : ICacheInvalidating, IFeatureGated, IHasTimeout` with -`Timeout => TimeSpan.FromSeconds(20)` (`:29`) and `FeatureName => SalesFeatures.PaymentVerification` (`:35`) -(`MMCA.Store/.../Orders/UseCases/VerifyPayment/VerifyPaymentCommand.cs:20`); -`RefreshFromSessionizeCommand : ICacheInvalidating, ITransactional, IFeatureGated` with -`FeatureName => ConferenceFeatures.SessionizeIntegration` -(`MMCA.ADC/.../Events/UseCases/RefreshFromSessionize/RefreshFromSessionizeCommand.cs:13,19`). -Inventory counted this run: those two commands are the only `IFeatureGated` implementations in ADC and Store -and no query is gated; twelve flag constants live in six `*Features` classes (`NotificationFeatures.cs:12`, -`PrivacyFeatures.cs:12`, `CatalogFeatures.cs:21`, `SalesFeatures.cs:23`, `ConferenceFeatures.cs:23`, -`EngagementFeatures.cs:22,34,46,59,71,83,95`), all annotated `Permanent`. -Flag lifecycle, read this run: `[FeatureFlag]` +`404` RFC 9457 ProblemDetails (`:18-26`) titled "Feature not available" (`:21`); the CQRS failure's +`errors` extension is built by `BuildErrorsExtension` +(`MMCA.Common/Source/Presentation/MMCA.Common.API/Middleware/ErrorHttpMapping.cs:62-69`), which serializes +`Code` and `Message`. `[FeatureGate(NotificationFeatures.PushNotifications)]` on the framework's +`DevicesController` (`MMCA.Common/Source/Presentation/MMCA.Common.API/Controllers/Notifications/DevicesController.cs:24`). +The 404 paragraph, Apply item 4 and the takeaway were rewritten this run: the previous text said a disabled +feature is indistinguishable from a nonexistent one, which ADR-031's Revision (2026-10-01) records the code +does not do. +Flag-name constants, each preceded by `[FeatureFlag(FeatureFlagLifetime.Permanent, Owner = ...)]`, counted +this run as thirteen in six `*Features` classes (previously twelve): +`NotificationFeatures.cs:12` (`MMCA.Common/Source/Core/MMCA.Common.Shared/Notifications/`, attribute `:11`), +`PrivacyFeatures.cs:12` (`MMCA.Common/Source/Core/MMCA.Common.Shared/Privacy/`, attribute `:11`), +`CatalogFeatures.cs:21` (`MMCA.Store/Source/Modules/Catalog/MMCA.Store.Catalog.Shared/`, attribute `:20`), +`SalesFeatures.cs:23` = `"Sales.PaymentVerification"` (`MMCA.Store/Source/Modules/Sales/MMCA.Store.Sales.Shared/`, attribute `:22`), +`ConferenceFeatures.cs:23` = `"Conference.SessionizeIntegration"` (attribute `:22`) and `ConferenceFeatures.cs:38` += `"Conference.SessionScoring"` (attribute `:37`) (`MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Shared/`), +`EngagementFeatures.cs:22,34,46,59,71,83,95` (`MMCA.ADC/Source/Modules/Engagement/MMCA.ADC.Engagement.Shared/`). +Real gated use cases, counted this run as three (previously two), all commands, no query gated: +`VerifyPaymentCommand : ICacheInvalidating, IFeatureGated, IHasTimeout` +(`MMCA.Store/Source/Modules/Sales/MMCA.Store.Sales.Application/Orders/UseCases/VerifyPayment/VerifyPaymentCommand.cs:20`, +`Timeout` 20 s `:29`, `FeatureName => SalesFeatures.PaymentVerification` `:35`); +`RefreshFromSessionizeCommand : ICacheInvalidating, IFeatureGated` +(`MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Application/Events/UseCases/RefreshFromSessionize/RefreshFromSessionizeCommand.cs:15`, +`FeatureName => ConferenceFeatures.SessionizeIntegration` `:21`; deliberately not `ITransactional` per its +XML doc `:9-12`, so the previous ledger's `ITransactional` was wrong); +`ScoreEventSessionsInternalCommand : IInternalCommand, IRequiresPermission, IHasTimeout, IFeatureGated` +(`MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Application/Sessions/UseCases/DecisionSupport/ScoreEventSessions/ScoreEventSessionsInternalCommand.cs:39`, +`FeatureName => ConferenceFeatures.SessionScoring` `:48`, XML doc `:42-46` stating the processor runs it +through the decorator pipeline and a failure completes the row rather than retrying); its trigger endpoint +carries `[FeatureGate(ConferenceFeatures.SessionScoring)]` +(`MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.API/Controllers/Sessions/SessionSelectionController.cs:125`). +Flag lifecycle: `[FeatureFlag]` (`MMCA.Common/Source/Core/MMCA.Common.Shared/FeatureFlags/FeatureFlagAttribute.cs:32`) with `Lifetime` (`:38`), `RemoveBy` (`:46`, ISO format constant `:35`, parser `:60`) and `Owner` (`:52`); `FeatureFlagLifetime` (`FeatureFlagLifetime.cs:9`, `Permanent` `:15`, `Temporary` `:21`); `FeatureFlagRegistry` @@ -296,25 +321,26 @@ Flag lifecycle, read this run: `[FeatureFlag]` (`MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Rules/Governance/ArchitectureRules.FeatureFlags.cs:28`) and `TemporaryFeatureFlagsAreNotPastRemoveBy` (`:70`), exposed as facts on `FeatureFlagLifecycleTestsBase` (`.../Bases/Governance/FeatureFlagLifecycleTestsBase.cs:10`, facts `:20-25`, `protected virtual Today` `:18`). -Conventions and trade-offs from `Website/docs-src/adr/031-feature-flag-management.md`: the `404` convention -reusing the not-found edge (`:55-57`), two surfaces agree only by convention with no fitness rule (`:60-62`), -flag debt now says the expiry check ships and adoption is per repo (`:63-66`), missing key resolves to -disabled and is fail-safe (`:67-69`). The record carries three revisions in its Status (2026-08-18 `:4-6`, -2026-08-31 `:6-8`, 2026-09-11 `:10-14`); the flag-debt trade-off was rewritten this run against the -Revision (2026-09-11) section (`:117-158`), and the targeting caveat against the narrowing paragraph -(`:105-108`). The targeting identifier is the JWT `sub` claim (`AuthClaimTypes.Subject`, +Conventions and trade-offs from `Website/docs-src/adr/031-feature-flag-management.md`, re-anchored this run: +the `404` convention with bodies that each state a feature is unavailable (`:58-62`), two enforcement points +agree only by convention with no fitness rule (`:65-67`), flag debt with the expiry check shipped and adopted +per repo (`:68-71`), missing key resolves to disabled and is fail-safe (`:72-74`). The Status lists three +revisions (2026-08-18 `:4-6`, 2026-08-31 `:6-8`, 2026-09-11 `:10-14`); the record carries a fourth, +Revision (2026-10-01) (`:165-179`), not listed in Status, which corrects the anonymous-404 reading and +drove this run's rewrite. The flag-debt trade-off follows the Revision (2026-09-11) (`:122-163`), and the +targeting caveat follows the narrowing paragraph of the Revision (2026-08-18) (`:110-113`). +The targeting identifier is the JWT `sub` claim (`AuthClaimTypes.Subject`, `MMCA.Common/Source/Core/MMCA.Common.Shared/Auth/AuthClaimTypes.cs:34`) read through `FindUserIdValue()` (`ClaimsPrincipalExtensions.cs:26-28`, falling back to the mapped `ClaimTypes.NameIdentifier`), used at `CurrentUserTargetingContextAccessor.cs:86` with a final fallback to `Identity.Name`; the accessor implements `ITargetingContextAccessor` at `MMCA.Common/Source/Presentation/MMCA.Common.API/FeatureManagement/CurrentUserTargetingContextAccessor.cs:54-55`. -There is no `user_id` claim or constant in the accessor; the previous ledger's `user_id` reading was wrong. The single code block is an illustrative composite: the `IFeatureGated` body and the `HandleAsync` body are -verbatim source; `VerifyPaymentCommand` is a real gated command shown with its three markers and its -20-second timeout; the three are shown together for reading, not as one contiguous file. Rubric tag moved -from §10 to §6 (CQRS & Event-Driven Design, `Website/docs-src/governance/ArchitectureEvaluationCriteria.md:229`), -because rubric v2 replaced §10 with Messaging & Integration Architecture and scores the former -Cross-Cutting Concerns facets in §5, §6, §9, §12, §17 and §29 (`:15-18`), with §10 itself pointing at §6 for -the in-process command/query pipeline (`:331`).* +verbatim source (re-checked this run against `FeatureGateCommandDecorator.cs:48-60`); `VerifyPaymentCommand` +is a real gated command shown with its three markers and its 20-second timeout; the three are shown together +for reading, not as one contiguous file. Rubric tag §6 (CQRS & Event-Driven Design, +`Website/docs-src/governance/ArchitectureEvaluationCriteria.md:229`): rubric v2 replaced §10 with Messaging & +Integration Architecture and scores the former Cross-Cutting Concerns facets in §5, §6, §9, §12, §17 and §29 +(`:15-18`), with §10 itself pointing at §6 for the in-process command/query pipeline (`:331`).* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/generic-entity-controllers.md b/docs-src/articles/generic-entity-controllers.md index 1c9b38b9..ff089602 100644 --- a/docs-src/articles/generic-entity-controllers.md +++ b/docs-src/articles/generic-entity-controllers.md @@ -1,10 +1,12 @@ # Generic entity controllers and the dynamic query contract (ADR-034) > Series: MMCA.Common · Article #28 (deep-dive) · Pillar P2 · Group G12 · Rubric §9 · -> ADR-034 · Status: grounded in `Website/docs-src/adr/034-generic-entity-query-layer.md`, -> `EntityControllerBase.cs`, `AggregateRootEntityControllerBase.cs`, +> ADR-034, ADR-125 · Status: grounded in `Website/docs-src/adr/034-generic-entity-query-layer.md`, +> `Website/docs-src/adr/125-parameterized-sql-only.md`, +> `EntityControllerBase.cs`, `AggregateRootEntityControllerBase.cs`, `EntityCsvExporter.cs`, > `QueryFilterModelBinder.cs`, `EntityQueryService.cs`, `EntityQueryPipeline.cs`, -> `QueryFilterService.cs`, `QueryFieldService.cs`, `ApplicationSettings.cs`. No em dashes. +> `QueryFilterService.cs`, `QueryFieldService.cs`, `DynamicQueryConfig.cs`, `ApplicationSettings.cs`, +> `IRawSqlQueryExecutor.cs`, `RawSqlConventionTestsBase.cs`. No em dashes. **Subtitle:** The write-once REST surface every entity inherits. How list, page, lookup, by-id, create, and delete come from two base classes, plus a bounded OData-lite query contract that is dynamic over the wire but never open SQL in the engine. @@ -73,9 +75,9 @@ What that inheritance buys is a uniform query contract on every list and detail - **Sparse fieldsets.** A comma-separated `fields` query parameter drives a server-side projection. `QueryFieldService.ApplyFieldSelection` builds a `MemberInit` expression that selects only the requested writable properties, so only those columns leave the database, and the compiled expression is cached per entity type and field set so a repeated `fields=` request does not rebuild the tree. That cache is capped at 512 entries, since the field set is client-supplied; past the cap a request skips server-side projection instead of growing the cache further, though the response body is still trimmed to the requested fields. Read-only and computed properties are rejected at validation, since the projection needs setters. - **Dynamic per-type filtering.** The paged route binds `Dictionary filters` through `[ModelBinder(typeof(QueryFilterModelBinder))]`. The binder parses `?filters[Name].operator=contains&filters[Name].value=shirt` style keys (case-insensitive, incomplete pairs silently dropped) into the dictionary. `QueryFilterService.ApplyFilters` then resolves one `IFilterStrategy` per property CLR type from a strategy registry (string, bool, int, long, DateTime, decimal, Guid and their nullables out of the box), and each strategy declares the operator set it `SupportedOperators`. This is the load-bearing constraint: filtering is dynamic over the wire but it is not free-form expression evaluation. Every property routes through a registered strategy, and `QueryFilterService.ValidateFilters` rejects an unknown property or an unsupported operator before the database is touched. -- **Sort.** `sortColumn` and `sortDirection` feed `QueryFieldService.ApplySorting`, an `OrderBy(" ascending|descending")` over the entity property the DTO name maps to. -- **Pagination and the `X-Pagination` header.** The paged route clamps the requested page size with `Math.Min(pageSize, MaxPageSize)`, where `MaxPageSize` reads `IApplicationSettings.MaxPageSize` and falls back to 500. The pagination metadata (total count, page size, current page) is serialized into the `X-Pagination` response header as JSON, so the body stays just the items. -- **A streamed CSV export.** `[HttpGet("export")]` reuses the same filter, sort, and `fields` contract and writes rows to the response body a page at a time, so the file never lands in memory. It stops at `MaxExportRows` (`IApplicationSettings.MaxExportRows`, falling back to 100,000), announces that ceiling up front in an `X-Export-Row-Limit` header, and ends a truncated file with a trailing marker row: headers are frozen the moment the first body byte is flushed, so the marker is the only signal still writable once the export is under way. It takes no `includeChildren`, since a child collection has no faithful representation in a flat CSV cell. +- **Sort.** `sortColumn` and `sortDirection` feed `QueryFieldService.ApplySorting`, an `OrderBy(" ascending|descending")` over the entity property the DTO name maps to. On a paginated query the pipeline appends `Id ascending` as a final tie-break key, so `Skip`/`Take` runs over a total order even when the requested sort column has duplicates. +- **Pagination and the `X-Pagination` header.** The paged route clamps the requested page size with `Math.Min(pageSize, MaxPageSize)`. `MaxPageSize` reads `ApplicationSettings.MaxPageSize` through `IOptions`, falls back to 500, and is itself clamped to the range 1 to `EntityQueryPipeline.MaxUnboundedResultLimit` (1000), so a configured value above 1000 has no effect and the pagination metadata never promises a page size the pipeline does not serve. The pagination metadata (total count, page size, current page) is serialized into the `X-Pagination` response header as JSON, so the body stays just the items. +- **A streamed CSV export.** `[HttpGet("export")]` reuses the same filter, sort, and `fields` contract and writes rows to the response body a page at a time, so the file never lands in memory. Row scoping is fail-closed: the export reads through the same `GetReadSpecificationAsync` hook as the list routes, and when that hook resolves to no specification the request is refused with a 403 (`Export.RowScopeRequired`) before anything is queried, unless the controller opts in through `AllowUnscopedExport`. It stops at `MaxExportRows` (`ApplicationSettings.MaxExportRows`, where an unset, zero, or negative value falls back to 100,000), announces that ceiling up front in an `X-Export-Row-Limit` header, and ends a truncated file with a trailing marker row: headers are frozen the moment the first body byte is flushed, so the marker is the only signal still writable once the export is under way. It takes no `includeChildren`, since a child collection has no faithful representation in a flat CSV cell. - **A last-resort ceiling.** Independent of the API clamp, `EntityQueryPipeline.MaxUnboundedResultLimit = 1000` caps any unpaginated query with `query.Take(MaxUnboundedResultLimit)`. Even a direct service caller who omits pagination entirely cannot trigger an unbounded full-table load. - **Two include paths.** `includeFKs` and `includeChildren` select navigation loading, and `EntityQueryPipeline` runs one of two strategies. PATH 1 handles source-supported includes via EF Core `.Include()` translated to SQL (forcing split-query when a child collection is included, so pagination does not truncate the JOIN-expanded rows). PATH 2 handles includes the source cannot JOIN by materializing the page first, then batch-loading related data via an `INavigationPopulator` (the cross-source loader of ADR-002). @@ -119,6 +121,41 @@ This is worth internalizing as a general shape: the same change bought both a cl surface and a fixed plan-cache hit rate, because both problems have the same root cause, which is a user's value ending up in the text of a query instead of beside it. +## The same rule for hand-written SQL + +The filter DSL is not the only path from a caller's value to the database. Some reads need a window +function, a recursive CTE, or a vendor-specific operator that LINQ cannot express, and ADR-125 gives +those exactly one door: `IRawSqlQueryExecutor`. Its two methods, `QueryAsync` and +`QuerySingleOrDefaultAsync`, accept a `FormattableString` and nothing else. The provider turns +every interpolation hole into a command parameter, and a concatenated statement is a plain `string` +that does not compile against either method: + +```csharp +// Compiles: customerId becomes a command parameter, and the statement text stays stable. +var count = await rawSql.QuerySingleOrDefaultAsync( + $"SELECT COUNT(*) FROM Orders WHERE CustomerId = {customerId}", cancellationToken); + +// Does not compile: concatenation produces a string, not a FormattableString. +// await rawSql.QueryAsync("SELECT * FROM Orders WHERE Name = '" + name + "'"); +``` + +The signature closes the door it owns, but it cannot stop module code from calling EF Core directly, +where `FromSqlRaw`, `SqlQueryRaw`, `ExecuteSqlRaw`, and `ExecuteSqlRawAsync` take a plain string and +sit one word away from their parameterizing twins. So the ban is a fitness test rather than a +guideline: `RawSqlConventionTestsBase.ModuleCode_UsesParameterizedSqlOnly` scans the source of every +mapped module, fails on any of those four members, and names `FromSql`/`SqlQuery`/`ExecuteSql` or +`IRawSqlQueryExecutor` as the replacement in its failure message, so the test output is the +instruction. A scan that finds no module directories fails instead of passing vacuously. MMCA.Store +subclasses the base with its own architecture map and an explicitly empty `AllowedFiles` list, so +every new raw call site in the store is a build failure. The root cause is the one above: the value +belongs beside the query text, never inside it, and plan reuse comes with it. + +The limits are worth stating. `FormattableStringFactory.Create` can still wrap an already-concatenated +string, so the contract blocks the careless path rather than proving safety. The test is a textual +scan of exactly four member names, so SQL reaching the database through raw ADO.NET or a micro-ORM is +outside it. And the executor is relational only: a host whose default source is Cosmos DB has no +registration, so injecting the interface there fails when the container is validated. + ## Trade-offs, honestly A generic, dynamically queryable contract coupled to the entity model is a real trade against narrow bespoke endpoints. ADR-034 names the costs rather than hiding them. @@ -140,7 +177,7 @@ The pattern ports to any stack where you expose more than a handful of CRUD reso --- -**What we covered:** why hand writing a list/paged/by-id CRUD controller plus ad-hoc filter/sort/paging parsing per entity is the bulk of a monolith's boilerplate and drifts in shape, and how MMCA.Common answers with two base classes (`EntityControllerBase` for the five reads, `AggregateRootEntityControllerBase` for idempotent create and delete) over a shared `EntityQueryService` and `EntityQueryPipeline`, plus a bounded OData-lite query contract: sparse `fields` projection, `QueryFilterModelBinder` plus per-type `IFilterStrategy` filtering with up-front validation, sort, an `X-Pagination` header with a `MaxPageSize` clamp, a streamed CSV export bounded by `MaxExportRows`, a `MaxUnboundedResultLimit` ceiling, and a two-path include strategy, composing with manual DTO mapping (ADR-001), navigation populators (ADR-002), the Result edge (ADR-013), and idempotency (ADR-017). +**What we covered:** why hand writing a list/paged/by-id CRUD controller plus ad-hoc filter/sort/paging parsing per entity is the bulk of a monolith's boilerplate and drifts in shape, and how MMCA.Common answers with two base classes (`EntityControllerBase` for the five reads, `AggregateRootEntityControllerBase` for idempotent create and delete) over a shared `EntityQueryService` and `EntityQueryPipeline`, plus a bounded OData-lite query contract: sparse `fields` projection, `QueryFilterModelBinder` plus per-type `IFilterStrategy` filtering with up-front validation, sort, an `X-Pagination` header with a `MaxPageSize` clamp, a streamed CSV export bounded by `MaxExportRows`, a `MaxUnboundedResultLimit` ceiling, and a two-path include strategy, composing with manual DTO mapping (ADR-001), navigation populators (ADR-002), the Result edge (ADR-013), and idempotency (ADR-017), with hand-written SQL held to the same parameterize-the-value rule by the `FormattableString`-only `IRawSqlQueryExecutor` and a fitness test that bans EF's raw-string members (ADR-125). **Next in the series:** resource-ownership authorization, the row-level axis that decides not just what a caller may do but which rows they may touch. @@ -150,15 +187,10 @@ The pattern ports to any stack where you expose more than a handful of CRUD reso *Tags: .NET, C Sharp, Web API, Software Architecture, Programming* -*Notes: 2026-07-27 coverage addition: the section "The line where the user's value stops being code" -was added to close a recorded gap (dynamic-LINQ query parameterization had no home anywhere in the -series). Grounded in `MMCA.Common/Source/Core/MMCA.Common.Application/Services/Filtering/DynamicQueryConfig.cs`: -the shared `ParsingConfig` static `Parameterized` with `UseParameterizedNamesInDynamicQuery = true` -(`:21-24`), and its class doc (`:9-15`), which is the source of the `ConstantExpression` / -EF-inlines-constants / `WHERE [Name] = 'Widget'` / plan-cache-entry-per-value explanation and names -`QueryParameterizationTests` as the guard. The two quoted strategy lines are verbatim from -`Services/Filtering/StringFilterStrategy.cs:23,25`; the property-vs-value asymmetry is visible in the -same switch (`:23-30`), and `ValidateFilters` rejecting an unknown property is already cited below. -2026-08-14 correction: the read surface is FIVE GET routes, not four. A `[HttpGet("export")]` CSV action sits between the paged and lookup routes, which was both a substance fix (the summary, the concrete-controller comment, the query-contract list, the `virtual` trade-off bullet, and the coverage paragraph all said four) and the reason every `EntityControllerBase.cs` anchor moved by roughly twenty-five to two hundred lines in that pass. ADR-034 records the route (`Website/docs-src/adr/034-generic-entity-query-layer.md:44`). `EntityControllerBase` class (`Source/Presentation/MMCA.Common.API/Controllers/EntityControllerBase.cs:36`) + `[ApiController]`/`[Route("[controller]")]`/`[ApiVersion("1.0")]` (`EntityControllerBase.cs:33-35`); the five GET routes `[HttpGet]` list (`EntityControllerBase.cs:106`, action `GetAllAsync` `EntityControllerBase.cs:109`), `[HttpGet("paged")]` (`EntityControllerBase.cs:153`, action `EntityControllerBase.cs:157`), `[HttpGet("export")]` (`EntityControllerBase.cs:247`, action `ExportAsync` `EntityControllerBase.cs:251`), `[HttpGet("lookup")]` returning `CollectionResult>` (`EntityControllerBase.cs:371,374`), `[HttpGet("{id}")]` (`EntityControllerBase.cs:410,415`); `fields` query param (`EntityControllerBase.cs:110,162,255,419`); `[ModelBinder(typeof(QueryFilterModelBinder))] Dictionary filters` (`EntityControllerBase.cs:165,256`); `sortColumn`/`sortDirection` (`EntityControllerBase.cs:160-161`); `Math.Min(pageSize, MaxPageSize)` clamp (`EntityControllerBase.cs:168`); `MaxPageSize` reads `IApplicationSettings.MaxPageSize` and falls back to 500 (`EntityControllerBase.cs:58-63`, default at `Source/Core/MMCA.Common.Application/Settings/ApplicationSettings.cs:17`); `X-Pagination` header serialized (`EntityControllerBase.cs:187`); `HandleFailure(result.Errors)` (`EntityControllerBase.cs:128`, the logging override at `EntityControllerBase.cs:505`); the five reads are `virtual` (`EntityControllerBase.cs:109,157,251,374,415`). The export bullet: page-at-a-time streaming into `Response.Body` (`EntityControllerBase.cs:277`) with a flush per page (`EntityControllerBase.cs:323,352`); `MaxExportRows` resolved per request from `IApplicationSettings.MaxExportRows` with a zero-or-less value treated as unconfigured (`EntityControllerBase.cs:78-84`), falling back to `DefaultMaxExportRows = 100_000` (`EntityControllerBase.cs:526`, settings default at `ApplicationSettings.cs:33`); the `X-Export-Row-Limit` header name (`EntityControllerBase.cs:535`) written up front by `BeginExportResponse` (call site `EntityControllerBase.cs:314`, definition `EntityControllerBase.cs:708`); the trailing truncation marker row and the frozen-headers rationale (`EntityControllerBase.cs:347-349`, marker text `EntityControllerBase.cs:837-838`, rationale in the action's remarks `EntityControllerBase.cs:213-218`); no `includeChildren` on this route, passed as `includeChildren: false` with the flat-CSV rationale (`EntityControllerBase.cs:284`, remarks `EntityControllerBase.cs:223`). `AggregateRootEntityControllerBase<...,TCreateRequest>` class (`Source/Presentation/MMCA.Common.API/Controllers/AggregateRootEntityControllerBase.cs:28`); `[HttpPost][Idempotent]` create (`AggregateRootEntityControllerBase.cs:59-60`) returning `201 CreatedAtRoute` with route name `Get{TEntity.Name}ById` (`AggregateRootEntityControllerBase.cs:73-74`); `[HttpDelete("{id}")]` returning `204 NoContent` via `DeleteEntityCommand` (`AggregateRootEntityControllerBase.cs:85,94,98`); both writes `virtual` (`AggregateRootEntityControllerBase.cs:64,90`). `QueryFilterModelBinder` sealed class parsing `filters[Property].operator`/`.value` keys, incomplete pairs dropped (`Source/Presentation/MMCA.Common.API/ModelBinders/QueryFilterModelBinder.cs:24`, case-insensitive dictionary `:42` and key loop `:46`, incomplete entries removed `:73-79`). `EntityQueryService` validates parameters up front in a `Result.Combine` block (`Source/Core/MMCA.Common.Application/Services/EntityQueryService.cs:297-301`) then maps via injected `IEntityDTOMapper` (`dtoMapper` ctor param `EntityQueryService.cs:36`, `DTOMapper` property `EntityQueryService.cs:91`, `MapToDTOs` call `EntityQueryService.cs:360`, `MapToDTO` call `EntityQueryService.cs:510`), `DTOToEntityPropertyMap` boundary property (`EntityQueryService.cs:101`), `ValidateFilters` invoked (`EntityQueryService.cs:301`), `INavigationPopulator` (`navigationPopulator` ctor param `EntityQueryService.cs:37`, `NavigationPopulator` property `EntityQueryService.cs:94`, passed to the pipeline as `NavigationPopulator.PopulateAsync` at `EntityQueryService.cs:356` and `EntityQueryService.cs:587`). `EntityQueryPipeline` sealed (`Source/Core/MMCA.Common.Application/Services/Query/EntityQueryPipeline.cs:13`); `MaxUnboundedResultLimit = 1000` (`EntityQueryPipeline.cs:23`) applied as `query.Take(MaxUnboundedResultLimit)` at three unpaginated call sites: the projection-pushdown path `ExecuteProjectedAsync` (`EntityQueryPipeline.cs:60`, cap at `EntityQueryPipeline.cs:99`), PATH 2 (`EntityQueryPipeline.cs:195`), and PATH 1 (`EntityQueryPipeline.cs:250`); PATH 1 EF `.Include()` (`EntityQueryPipeline.cs:135`) plus `AsSplitQuery` for child collections (`EntityQueryPipeline.cs:142`, block `EntityQueryPipeline.cs:129-142`), PATH 2 dispatch (`EntityQueryPipeline.cs:50`) and its manual-`INavigationPopulator` body (`EntityQueryPipeline.cs:158-195`). `QueryFilterService.ApplyFilters` (`Source/Core/MMCA.Common.Application/Services/Filtering/QueryFilterService.cs:78`, field-contract overload `QueryFilterService.cs:99`), strategy registry string/bool/int/long/DateTime/decimal/Guid + nullables (`QueryFilterService.cs:35-47`), `RegisterStrategy` (`QueryFilterService.cs:62`), `ValidateFilters` (`QueryFilterService.cs:150`, field-contract overload `QueryFilterService.cs:166`). `IFilterStrategy.Apply` + `SupportedOperators` (`Source/Core/MMCA.Common.Application/Services/Filtering/IFilterStrategy.cs:6,17,24`). `QueryFieldService.ApplyFieldSelection` (`Source/Core/MMCA.Common.Application/Services/QueryFieldService.cs:278`) uses a `ProjectionCache` keyed by (entity type, normalized field set) (`QueryFieldService.cs:329`), checked via a lock-free `TryGetValue` on the hit path (`QueryFieldService.cs:290`) and populated via `GetOrAdd` on a miss (`QueryFieldService.cs:300-302`), capped at `MaxCacheEntries = 512` per type because the field set is client-supplied (`QueryFieldService.cs:39`); past the cap the request skips server-side projection while the response body is still trimmed to the requested fields (`QueryFieldService.cs:297-299`, design note `QueryFieldService.cs:323-326`). On a miss it builds a `MemberInit` over writable properties in `BuildProjection` (`QueryFieldService.cs:331`; `CanWrite` filter `QueryFieldService.cs:336`; `Expression.MemberInit` construction `QueryFieldService.cs:351`), `ApplySorting` (`QueryFieldService.cs:155`, field-contract overload `QueryFieldService.cs:183`) building `" ascending|descending"` (`QueryFieldService.cs:261`) and applying it (`QueryFieldService.cs:196`). ADR-034 itself: `Website/docs-src/adr/034-generic-entity-query-layer.md` (Accepted 2026-06-30, Amended 2026-07-23: the filter strategy registry also covers `long`/`long?` via `LongFilterStrategy`; Amended 2026-07-25: the keyed by-id fast path is named `TryGetFastPathIncludes` in code, `034-generic-entity-query-layer.md:4-6`), extended by ADR-099 (2026-08-29, v1.170.0) with a generic update verb, an `AddEntityCrud` registration and a `CrudEntityControllerBase` (`034-generic-entity-query-layer.md:7-10`), which adds a third base alongside, rather than altering, the two this article describes. 2026-09-19 anchor pass (MMCA.Common v1.205.0): every citation above was re-read against current source and corrected. `EntityControllerBase.cs` anchors moved by roughly 5 to 42 lines and `EntityQueryService.cs` anchors by 1 to 52 lines since the 2026-08-19 pass, ordinary source growth rather than a single rebase event; `ApplicationSettings.MaxExportRows` moved from `:29` to `:33` and the ADR's export-route citation from `:32-37` to `:44`. Route order, defaults, ceilings, and mechanisms are unchanged, so this pass is anchors only. The concrete `ProductsController` block and the hand-written cold-open controller are illustrative of the documented shape, not copied from a specific source file; every type, route, default, and behavior they reference is grounded above.* +*Notes: 2026-10-02 refresh (MMCA.Common v1.221.0). Every citation below was re-read against current source in this run; paths are under `MMCA.Common/` unless stated. Substance changes this pass: the pagination bullet (`MaxPageSize` is `Math.Clamp(settings?.MaxPageSize ?? 500, 1, EntityQueryPipeline.MaxUnboundedResultLimit)` read through `IOptions`, `Source/Presentation/MMCA.Common.API/Controllers/EntityControllerBase.cs:59-64`, rationale `:55-57`, so a configured value above 1000 has no effect; the prior text named `IApplicationSettings` and a bare 500 fallback); the export bullet (settings type corrected, fail-closed row scoping added); the Sort bullet (pagination tie-break added, closing the prior UNVERIFIABLE item); and the section "The same rule for hand-written SQL", a user-approved ADR-125 fold-in. +Controllers. `EntityControllerBase` (`EntityControllerBase.cs:34`) with `[ApiController]`/`[Route("[controller]")]`/`[ApiVersion("1.0")]` (`:31-33`). The five GET routes: `[HttpGet]` (`:107`, action `GetAllAsync` `:110`, capped at `pageSize: MaxPageSize` `:124`), `[HttpGet("paged")]` (`:154`, action `:158`), `[HttpGet("export")]` (`:252`, action `ExportAsync` `:257`), `[HttpGet("lookup")]` returning `CollectionResult>` (`:317`, `:320`), `[HttpGet("{id}")]` (`:356`, action `:361`); all five `public virtual` (`:110,158,257,320,361`). `Math.Min(pageSize, MaxPageSize)` (`:169`); `X-Pagination` serialized (`:188`); `HandleFailure(result.Errors)` (`:129`, logging override `:451`); `MaxPageSize` default 500 at `Source/Core/MMCA.Common.Application/Settings/ApplicationSettings.cs:17`. Export: `[ModelBinder(typeof(QueryFilterModelBinder))]` filters (`:262`); fail-closed scoping via `GetReadSpecificationAsync` (`:270-274`, remarks `:231-238`), `ExportRowScopeRequiredErrorCode = "Export.RowScopeRequired"` (`:487`), `AllowUnscopedExport` default `false` (`:508`); `MaxExportRows` read through `IOptions` with zero-or-less treated as unconfigured (`:79-85`, remarks `:74-78`), `DefaultMaxExportRows = 100_000` (`:472`, settings default `ApplicationSettings.cs:33`); `ExportRowLimitHeaderName = "X-Export-Row-Limit"` (`:481`) appended by `BeginExportResponse` (`:619`, append `:625`, passed as the begin callback `:296`); export page size `Math.Max(1, MaxPageSize)` (`:277`); `includeChildren: false` (`:283`) with the flat-CSV rationale (`:223-224`); frozen-headers rationale (`:214-220`). Streaming lives in `EntityCsvExporter` (`Source/Presentation/MMCA.Common.API/Export/EntityCsvExporter.cs:17`), handed `Response.Body` (`EntityControllerBase.cs:279-280`), begin callback invoked at `EntityCsvExporter.cs:160`, flushes at `:212` and `:220`, marker text `# export truncated at {rowsWritten} rows` at `:357`. `AggregateRootEntityControllerBase` (`Source/Presentation/MMCA.Common.API/Controllers/AggregateRootEntityControllerBase.cs:28`): `[HttpPost][Idempotent]` (`:59-60`), `CreateAsync` virtual (`:64`), `CreatedAtRoute` with `Get{TEntity.Name}ById` (`:73-74`); `[HttpDelete("{id}")]` (`:85`), `DeleteAsync` virtual (`:90`), `DeleteEntityCommand` (`:94`), `NoContent()` (`:98`). `QueryFilterModelBinder` sealed (`Source/Presentation/MMCA.Common.API/ModelBinders/QueryFilterModelBinder.cs:24`), case-insensitive dictionary (`:42`), key loop (`:46`), incomplete entries removed (`:74-79`). +Query layer. `EntityQueryService` (`Source/Core/MMCA.Common.Application/Services/EntityQueryService.cs`): `dtoMapper` (`:36`), `navigationPopulator` (`:37`), `DTOMapper` (`:91`), `NavigationPopulator` (`:94`), `DTOToEntityPropertyMap` (`:101`), up-front `Result.Combine` validation including `ValidateFilters` (`:297-301`), `NavigationPopulator.PopulateAsync` passed to the pipeline (`:356`, `:587`), `MapToDTOs` (`:360`), `MapToDTO` (`:510`). `EntityQueryPipeline` sealed (`Source/Core/MMCA.Common.Application/Services/Query/EntityQueryPipeline.cs:13`); `MaxUnboundedResultLimit = 1000` (`:23`) applied as `query.Take` at `:99` (projection path `ExecuteProjectedAsync` `:60`), `:195` (PATH 2) and `:250` (PATH 1); PATH 2 dispatch (`:50`, doc `:158`); PATH 1 `.Include()` (`:135`) and `AsSplitQuery` (`:142`, block `:129-142`); `PaginationTieBreakProperty = "Id"` (`:36`) passed only when paginated (`:86`, `:181`, `:234`). `QueryFilterService` (`Services/Filtering/QueryFilterService.cs`): registry string/bool/int/long/DateTime/decimal/Guid plus nullables (`:35-47`), `RegisterStrategy` (`:62`), `ApplyFilters` (`:78`, field-contract overload `:99`), `ValidateFilters` (`:159`, overload `:175`). `IFilterStrategy` `Apply` and `SupportedOperators` (`Services/Filtering/IFilterStrategy.cs:6,17,24`). The two quoted strategy lines are verbatim from `Services/Filtering/StringFilterStrategy.cs:32` and `:34` (switch `:30`). `DynamicQueryConfig` (`Services/Filtering/DynamicQueryConfig.cs`): class doc carrying the `ConstantExpression` / EF-inlines-constants / `WHERE [Name] = 'Widget'` / plan-cache explanation and naming the guard (`:5-17`), single-instance rationale (`:20`), `Parameterized` with `UseParameterizedNamesInDynamicQuery = true` (`:21-24`); the guard exists at `Tests/Core/MMCA.Common.Infrastructure.Tests/Persistence/Specifications/QueryParameterizationTests.cs:26`. `QueryFieldService` (`Services/QueryFieldService.cs`): `MaxCacheEntries = 512` (`:39`), `tieBreakProperty` doc (`:134-135`), `ApplySorting` (`:155`, overload `:184`), `BuildOrdering` (`:259`) building `" ascending|descending"` (`:262`) and appending the tie-break (`:264-267`), `ApplyFieldSelection` (`:279`), lock-free `TryGetValue` hit path (`:291`), cap check that skips server-side projection (`:298`), `GetOrAdd` on a miss (`:301-303`), cap design note (`:324-327`), `ProjectionCache` (`:330`), `BuildProjection` (`:332`) with the `CanWrite` filter (`:337`) and `Expression.MemberInit` (`:352`). +ADR-125 fold-in. `Website/docs-src/adr/125-parameterized-sql-only.md` (Accepted 2026-09-19, citation revision 2026-10-01). `IRawSqlQueryExecutor` (`Source/Core/MMCA.Common.Application/Interfaces/Infrastructure/Persistence/IRawSqlQueryExecutor.cs:24`): window function / CTE / vendor operator purpose (`:4-7`), parameterized-by-construction doc (`:9-15`), relational only with no registration on a Cosmos-default host and failure at container validation (`:18-21`), `QueryAsync(FormattableString ...)` (`:31`), `QuerySingleOrDefaultAsync(FormattableString ...)` (`:39`). `RawSqlConventionTestsBase` (`Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Cqrs/RawSqlConventionTestsBase.cs:31`): `AllowedFiles` default empty (`:39`), `ModuleCode_UsesParameterizedSqlOnly` (`:66`), vacuous-scan failure (`:72`), file-name allow-list check (`:81`), failure message naming the replacements (`:91-94`), four-member regex (`:115`). MMCA.Store subclass `MMCA.Store/Tests/Architecture/MMCA.Store.Architecture.Tests/Cqrs/RawSqlConventionTests.cs:12`, its map (`:15`) and explicitly empty `AllowedFiles` (`:18`). The `FormattableStringFactory.Create` bypass and the textual-scan limits are from the ADR's Trade-offs (`125-parameterized-sql-only.md:122-135`). Observed drift, not acted on here: ADR-125 cites a `NotSupportedException` in `EFRawSqlQueryExecutor.cs:46-52`, but in v1.221.0 that file has none (it calls `Database.SqlQuery` at `Source/Core/MMCA.Common.Infrastructure/Persistence/EFRawSqlQueryExecutor.cs:51`); the article states the relational limit from the interface doc instead. +ADR-034: `Website/docs-src/adr/034-generic-entity-query-layer.md` (Accepted 2026-06-30, amended 2026-07-23 and 2026-07-25, extended by ADR-099 with a `CrudEntityControllerBase` alongside the two bases this article describes, `:3-12`; export route `:44`). History: 2026-07-27 added the parameterization section; 2026-08-14 corrected four GET routes to five (the export route); 2026-09-19 anchors-only pass at v1.205.0. The cold-open controller, the `ProductsController` block and the raw-SQL snippet are illustrative of the documented shape, not copied from a source file; every type, route, default and behavior they reference is grounded above.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/governed-llm-boundary.md b/docs-src/articles/governed-llm-boundary.md index 36a48886..e520f042 100644 --- a/docs-src/articles/governed-llm-boundary.md +++ b/docs-src/articles/governed-llm-boundary.md @@ -5,13 +5,18 @@ > `Website/docs-src/adr/111-ai-session-scoring-governance.md`, > `MMCA.Common/Source/Core/MMCA.Common.AI/AiSettings.cs`, > `.../MMCA.Common.AI/PromptContract.cs`, `.../MMCA.Common.AI/DependencyInjection.cs`, -> `.../MMCA.Common.AI/Chat/BoundedChatClient.cs`, `.../Chat/GuardrailChatClient.cs`, +> `.../MMCA.Common.AI/Providers/AiProviderValidator.cs`, `.../Providers/IAiProviderFactory.cs`, +> `.../Chat/BoundedChatClient.cs`, `.../Chat/GuardrailChatClient.cs`, > `.../Chat/IChatGuardrail.cs`, `.../Chat/GuardrailVerdict.cs`, `.../Chat/ChatGuardrailException.cs`, > `.../Chat/IAiTokenEstimator.cs`, `.../Chat/UsageRecordingChatClient.cs`, +> `.../Guardrails/GuardrailServiceCollectionExtensions.cs`, `.../Guardrails/ContentPolicyGuardrail.cs`, > `.../MMCA.Common.AI/Observability/AiUsageMeter.cs`, +> `MMCA.Common/Source/Core/MMCA.Common.AI.Anthropic/AnthropicAiProviderFactory.cs`, +> `MMCA.Common/Source/Hosting/MMCA.Common.AI.Testing/GoldenReplayTestsBase.cs`, +> `.../MMCA.Common.AI.Testing/PromptContractPinTestsBase.cs`, > `MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Layering/AiDependencyIsolationTestsBase.cs`, -> the §16 criteria of `Website/docs-src/governance/ArchitectureEvaluationCriteria.md`, and the §16 rows of -> `Website/docs-src/governance/common-ArchitectureScorecard.md`. No em dashes. +> `MMCA.Common/FACTS.md`, the §16 criteria of `Website/docs-src/governance/ArchitectureEvaluationCriteria.md`, +> and the §16 rows of `Website/docs-src/governance/common-ArchitectureScorecard.md`. No em dashes. **Subtitle:** A chat completion is an unbounded, metered, non-deterministic call to somebody else's server, and most codebases make it by newing up a vendor client in the middle of a feature. Here is the @@ -32,8 +37,8 @@ none of them is a property of *your feature*. Written per feature, each is a fre and the forgetting is invisible until a bill or an incident. That is the argument **ADR-120** makes, and its conclusion is unglamorous: the language model is a -dependency, so govern it like one. The provider half is the vendor SDK's own adapter. The governance half -is a pipeline you compose once and every future feature inherits. +dependency, so govern it like one. The provider half is the vendor SDK's own adapter, in a package of its +own. The governance half is a pipeline you compose once and every future feature inherits. ## Why it matters @@ -51,62 +56,80 @@ The category is deliberately N/A until a product feature calls a model, and scor (`:473`). That applicability rule is the honest part: most systems get to skip §16, right up until the afternoon they do not. -MMCA.Common scores it. The §16 row sits at Maturity 3 / Implementation 6, moved there on the -thirty-fifth-wave re-score of 2026-09-15 on the strength of the guardrail extension point, the latency -histogram and host-side telemetry export (`common-ArchitectureScorecard.md:75`), with §16 back in both -denominators at weight 2 (`:124`). Implementation 6 is the Adequate band and the row says why: two of the -seven criteria are wholly absent from the framework by design, which is a sentence you will see again in +MMCA.Common scores it. The §16 row sits at Maturity 4 / Implementation 9 at weight 2 +(`common-ArchitectureScorecard.md:80`), with §16 in both denominators and a weight total of 82 +(`:104`). The row walks the seven criteria as five met, one partial and one unexercised: evaluation is +gated in CI by a golden-replay base that refuses an empty corpus, guardrails are the partial criterion, +and retrieval is the unexercised one. Maturity 4 is the build-breaking part (the prompt-contract pin, the +golden-replay gate, the registration-time guardrail refusal and the startup pattern validation all fail +the build), and Implementation 9 rather than 10 is the guardrail residuals, which you will see again in the trade-offs. -## The MMCA answer: one optional package, and the call is a pipeline +## The MMCA answer: four optional packages, and the call is a pipeline -`MMCA.Common.AI` is one of the nineteen published framework packages (`MMCA.Common/FACTS.md:19`, listed -at `:22`, framework v1.205.0 at `:14`) and it is optional: nothing in the metapackage drags it in, and a -host that never calls a model never installs it. In the onboarding taxonomy it is group **G28, Common AI -Integration**, twelve types across levels L0 to L3 -(`Website/docs-src/onboarding/00-group-taxonomy.md:82`). Twelve types is the whole surface. That smallness -is the design. +The AI boundary is four of the twenty-two published framework packages (`MMCA.Common/FACTS.md:19`), all +at framework v1.221.0 (`:14`): `MMCA.Common.AI`, the governed pipeline (`:22`); +`MMCA.Common.AI.Anthropic` and `MMCA.Common.AI.OpenAI`, provider adapters that each register one +`IAiProviderFactory` (`:23`, `:24`); and `MMCA.Common.AI.Testing`, the replay and golden-evaluation +harness (`:34`). All four are optional: nothing in the metapackage drags them in, and a host that never +calls a model never installs them. In the onboarding taxonomy the types sit in group **G28, Common AI +Integration**, thirty-two types across levels L0 to L10 +(`Website/docs-src/onboarding/00-group-taxonomy.md:82`). That is a small surface for what it governs, and +the smallness is the design. -The composition entry point is `AddMmcaChatClient` (`DependencyInjection.cs:67`), and what it registers is -one `IChatClient` built as a pipeline, outermost first (registration at `:108-143`, the same order -documented as a diagram in the type remarks at `:22-30`): +The composition entry point is `AddMmcaChatClient` (`DependencyInjection.cs:88`), and what it registers is +one `IChatClient` built as a pipeline, outermost first (built at `:149-184`, the same order documented as +a diagram in the type remarks at `:22-31`): ```csharp // The shape AddMmcaChatClient composes, outermost first. -BoundedChatClient // what the call is ALLOWED to do: tokens, timeout, tools, input size - GuardrailChatClient // optional: present only when an IChatGuardrail is registered - UsageRecordingChatClient // what the call cost, and how long it took - DistributedCaching // optional: Ai:EnableCache AND a registered IDistributedCache - OpenTelemetry // traces under the MMCA.Common.AI source - Logging - provider client // Anthropic, via the SDK's own AsIChatClient adapter +BoundedChatClient // what the call is ALLOWED to do: tokens, timeout, tools, input size, model + GuardrailChatClient // optional: present when an IChatGuardrail or IChatRequestRedactor is registered + UsageRecordingChatClient // what the call cost, and how long it took + DistributedCaching // optional: Ai:EnableCache AND a registered IDistributedCache + OpenTelemetry // traces under the MMCA.Common.AI source + PromptTagging // the prompt identity as attributes on that trace + Logging + provider client // whichever registered IAiProviderFactory matches Ai:Provider ``` The ordering is not decoration. Bounds are outermost, so a call the configuration forbids is refused before anything downstream logs it, caches it or counts it. Guardrails sit inside the bounds and outside -usage recording, so a blocked request never reaches the provider and therefore has no cost to record. The -comment in the source says all of that in place (`DependencyInjection.cs:31-39`). - -Two smaller decisions in the same method are worth naming. **The provider adapter is the vendor's, not -ours**: `CreateProviderChatClient` constructs an `AnthropicClient` and calls the SDK's own -`AsIChatClient` extension with the configured model and ceiling (`:158`, adapter call at `:169-173`), so -nothing here hand-rolls a Messages API request over `HttpClient`. A provider the package does not know -goes through the factory overload (`:82`) rather than by adding a second vendor dependency, and an -unrecognized provider throws with that instruction in the message (`:174-176`). And **prompt and -completion text reach traces only on a host positively identified as Development** (`:137`, gate at -`:192-196`), a check that fails closed: an environment the package cannot see reads as not-Development. +usage recording, so a blocked request never reaches the provider and therefore has no cost to record. +Prompt tagging sits just inside the OpenTelemetry layer, so the activity it decorates is that layer's own +`gen_ai` span. The comment in the source says all of that in place (`DependencyInjection.cs:33-41`). + +Two smaller decisions in the same file are worth naming. **The provider is a registered factory, never a +type this package names.** The configuration overload resolves every registered `IAiProviderFactory` +(`IAiProviderFactory.cs:20`, `Name` at `:26`, `Create` at `:34`) and selects the one whose name matches +`Ai:Provider` (`CreateProviderChatClient`, `DependencyInjection.cs:239-248`). The factories live in the +adapter packages, and each is the vendor's own adapter: `AddAnthropicAiProvider` +(`MMCA.Common.AI.Anthropic/DependencyInjection.cs:26`) registers one whose `Create` is +`new AnthropicClient(options).AsIChatClient(...)` (`AnthropicAiProviderFactory.cs:48`), and +`AddOpenAiProvider` (`MMCA.Common.AI.OpenAI/DependencyInjection.cs:26`) does the same over the OpenAI SDK +(`OpenAiProviderFactory.cs:51`). Nothing here hand-rolls a request over `HttpClient`. A provider name the +host never registered fails at boot rather than on a user's first request: `AddMmcaChatClient` registers +`AiProviderValidator` into the options pipeline (`DependencyInjection.cs:94`), which fails with the +registered names in the message (`AiProviderValidator.cs:34`), and `CreateProviderChatClient` keeps a belt +throw for a host that bypassed that pipeline (`DependencyInjection.cs:244-245`). A host with its own +credential story, or a test with no network, supplies the innermost client through the factory overload +(`:113`). And **prompt and completion text reach traces only on a host positively identified as +Development** (`enableSensitiveData` at `:177`, `IsDevelopmentHost` at `:262-266`), a check that fails +closed: an environment the package cannot see reads as not-Development (`:256-261`). ## Off by absence, not off by flag -`AiSettings` (`AiSettings.cs:31`) binds one configuration section, `Ai` (`:34`), and carries the whole -surface: `Enabled` (`:48`), `Provider` (`:51`), `Model` (`:59`), `ApiKey` (`:70`), `MaxOutputTokens` -(`:77`, defaulting to 1024 at `:37`), `Timeout` (`:83`, defaulting to 30 seconds at `:40`), `AllowTools` -(`:90`), `EnableCache` (`:96`) and `PerCallInputTokenBudget` (`:104`). `Model` and `ApiKey` are required -only once `Enabled` is true (`Validate`, `:113-141`), which is what lets the section ship in every -appsettings file rather than only in the ones that use it. +`AiSettings` (`AiSettings.cs:22`) binds one configuration section, `Ai` (`:25`), and carries the whole +surface: `Enabled` (`:46`), `Provider` (`:55`, the name of a registered provider), `Model` (`:65`), +`ApiKey` (`:76`), `Endpoint` (`:83`), `MaxOutputTokens` (`:90`, defaulting to 1024 at `:28`), `Timeout` +(`:96`, defaulting to 30 seconds at `:31` and capped at one hour at `:38`), `AllowTools` (`:103`), +`RequireGuardrail` (`:117`, defaulting to true), `EnableCache` (`:123`) and `PerCallInputTokenBudget` +(`:131`). `Provider`, `Model` and `ApiKey` are required only once `Enabled` is true, alongside an absolute +`Endpoint` when one is set and a `Timeout` inside its range (`Validate`, `:140-190`), which is what lets +the section ship in every appsettings file rather than only in the ones that use it. The load-bearing line is four lines long. When `Ai:Enabled` is false, **nothing is registered** -(`DependencyInjection.cs:97-101`): the settings still bind and validate, and no `IChatClient` enters the +(`DependencyInjection.cs:128-132`): the settings still bind and validate, and no `IChatClient` enters the container at all. That pushes a null onto the consumer on purpose. A feature resolves the client with @@ -116,36 +139,43 @@ a given environment is off *by construction*: there is no half-running state whe the credential is missing. A boolean everybody has to remember to check is the version of this that fails. -## Bounds: four of them, on both paths +## Bounds: five of them, on both paths -`BoundedChatClient` (`BoundedChatClient.cs:51`) is a `DelegatingChatClient` and enforces four bounds, each -applied to the buffered and the streaming path (the list is documented on the type at `:15-36`): +`BoundedChatClient` (`BoundedChatClient.cs:65`) is a `DelegatingChatClient` and enforces five bounds, +each applied to the buffered and the streaming path (the list is documented on the type at `:16-50`): 1. **Output tokens.** `MaxOutputTokens` is clamped down to the configured ceiling, while a caller asking - for less keeps its own smaller number (`:151-153`). Output tokens are the expensive half of a chat + for less keeps its own smaller number (`:185-187`). Output tokens are the expensive half of a chat call, so this is a cost bound. 2. **Wall clock.** Every call runs under a token linked to the caller's own and cancelled after - `Ai:Timeout` (`:164-169`). On the streaming path the timeout covers the whole stream rather than its - first update (`:99-112`, with the reasoning at `:106-107`): a provider that opens a response and then + `Ai:Timeout` (`:270-275`). On the streaming path the timeout covers the whole stream rather than its + first update (`:133-146`, with the reasoning at `:140-141`): a provider that opens a response and then stalls is exactly the failure a per-call budget exists to bound. 3. **Tool use.** While `Ai:AllowTools` is false, tools and the tool mode are stripped from the request - (`:155-159`). That is the difference between telling a model not to act and being unable to hand it - the means. + (`:189-193`). That is the difference between telling a model not to act and being unable to hand it + the means. While it is true, `FilterTools` (`:231-268`) offers a tool only when every registered + `IChatToolPolicy` allows it (`:251`), and a tool marked consequential only when the request also + confirms it by name (`:259`). The confirmation is checked on top of the policies, never instead of + them (`:256-258`), and with no policy at all every tool is stripped (`:241-244`). 4. **Input size.** When `Ai:PerCallInputTokenBudget` is set, an estimated input above the budget fails - the call locally instead of paying for it remotely (`:171-186`). + the call locally instead of paying for it remotely (`:277-292`). +5. **Model.** The request goes out naming `Ai:Model`, and a request that names a different model is + refused (`:205-220`). Adapters differ in whether a per-request model id overrides the one the client + was built with, so pinning it here makes `PromptContract.Model` mean the same thing on every provider: + the model the prompt was evaluated against, and the only one it may be sent to (`:43-49`). The estimate asks the pipeline for an `IAiTokenEstimator` (`IAiTokenEstimator.cs:14`) and otherwise -counts four characters to the token (`BoundedChatClient.cs:144`), the usual rough rule for English prose. +counts four characters to the token (`BoundedChatClient.cs:178`), the usual rough rule for English prose. The type documentation is blunt about what that cannot see: it reads message text plus instructions only, -so images, tool schemas, provider-side additions and non-Latin scripts are all under-counted (`:37-44`). +so images, tool schemas, provider-side additions and non-Latin scripts are all under-counted (`:51-58`). It is a runaway guardrail with headroom, never a billing figure. The estimator interface is declared in the package rather than taken as a dependency on a tokenizer library, and the reason is stated in place (`IAiTokenEstimator.cs:9-12`): a package whose whole point is keeping the model dependency small should not acquire a second one to count characters. One detail that costs nothing and prevents a real bug: the options a caller passes are never mutated. -Each call works on a clone (`:149`), so a caller reusing one `ChatOptions` instance across requests does -not silently inherit this client's clamping. +Each call works on a clone (`BoundedChatClient.cs:183`), so a caller reusing one `ChatOptions` instance +across requests does not silently inherit this client's clamping. ```csharp // Illustrative of the documented shape: the bounds BoundedChatClient applies. @@ -163,6 +193,27 @@ private ChatOptions Bound(ChatOptions? options) bounded.Tools = null; bounded.ToolMode = null; } + else + { + // Only the tools every IChatToolPolicy allows (and the caller confirmed, if consequential). + bounded.Tools = FilterTools(bounded); + if (bounded.Tools is null) + { + bounded.ToolMode = null; + } + } + + // The model is part of the prompt contract, not negotiated per call. + if (_settings.Model is { } pinned) + { + if (bounded.ModelId is { } requestedModel && !string.Equals(requestedModel, pinned, StringComparison.Ordinal)) + { + throw new InvalidOperationException( + $"The request names model '{requestedModel}' but Ai:Model pins '{pinned}'."); + } + + bounded.ModelId = pinned; + } return bounded; } @@ -191,27 +242,37 @@ private void EnforceInputBudget(IReadOnlyList messages, ChatOptions throw new InvalidOperationException( $"The request's estimated input size ({estimated} tokens) exceeds Ai:PerCallInputTokenBudget " - + $"({budget} tokens). The estimate is approximate: shorten the prompt or raise the budget."); + + $"({budget} tokens). The estimate is approximate: shorten the prompt or raise the budget deliberately."); } ``` On the streaming path, the bound and the budget check run eagerly, outside the iterator -(`BoundedChatClient.cs:90-94`): a request the configuration forbids is refused when it is made, not when +(`BoundedChatClient.cs:124-130`): a request the configuration forbids is refused when it is made, not when somebody gets around to reading the stream. -## Guardrails: the framework ships the extension point, not the policy - -`IChatGuardrail` (`IChatGuardrail.cs:20`) has two methods: `InspectRequestAsync` (`:27-30`) and -`InspectResponseAsync` (`:37-40`), each answering with a `GuardrailVerdict`. An application registers one -implementation per concern, `GuardrailChatClient` (`GuardrailChatClient.cs:21`) runs every one of them in -registration order, and the first block throws `ChatGuardrailException` -(`ChatGuardrailException.cs:12`, thrown at `GuardrailChatClient.cs:57` and `:100`). - -The framework ships no policy, and the interface documentation says why (`IChatGuardrail.cs:9-13`): what -counts as a prompt injection, a leaked secret, an off-topic answer or a disallowed topic depends on the -data the application holds and the jurisdiction it operates in, so a content rule baked into a shared -package would be wrong somewhere by construction. The package offers the place to plug policy in. The -policy stays with the feature that knows what its input is. +## Guardrails: an extension point, two narrow policies, no domain policy + +`IChatGuardrail` (`IChatGuardrail.cs:21`) has three members, each answering with a `GuardrailVerdict`: +`InspectRequestAsync` (`:28-31`), `InspectResponseAsync` (`:38-41`) and `InspectStreamedUpdateAsync` +(`:57-60`), which allows by default. Beside it sits `IChatRequestRedactor` +(`Guardrails/IChatRequestRedactor.cs:25`). An application registers one implementation per concern, and +`GuardrailChatClient` (`GuardrailChatClient.cs:31`) applies every redactor first, so what the guardrails +inspect and what the provider is sent is the redacted request (`:68`, `:126-135`, remark at `:18-20`). +Then it runs every guardrail in registration order, and the first block throws `ChatGuardrailException` +(`ChatGuardrailException.cs:12`, thrown at `GuardrailChatClient.cs:82`, `:111` and `:150`). + +The framework ships the extension point, two opt-in domain-neutral guardrails and no domain policy, and +the interface documentation says why (`IChatGuardrail.cs:9-14`). `AddPiiRedactionGuardrail` +(`Guardrails/GuardrailServiceCollectionExtensions.cs:33`) registers contact-detail redaction +(`PiiRedactionGuardrail.cs:39`). `AddContentPolicyGuardrail` (`:62`) registers `ContentPolicyGuardrail` +(`ContentPolicyGuardrail.cs:64`), which matches eight built-in prompt-injection markers (`:77-87`) in +user-role content and redacts, blocks or ignores them per `InjectionMode` (`Redact` by default, +`ContentPolicySettings.cs:35`), plus any request pattern the host adds and a response-side refusal on +configured blocked patterns; one singleton serves as both a guardrail and a redactor (`ADR-120:40-47`). +Those two ship because neither judgement varies by application (`ADR-120:368-372`). What counts as an +off-topic answer or a disallowed topic depends on the data the application holds and the jurisdiction it +operates in, so a rule like that baked into a shared package would be wrong somewhere by construction. +That policy stays with the feature that knows what its input is. Three details in that layer repay attention: @@ -219,20 +280,25 @@ Three details in that layer repay attention: whose `default` value reads as a block carrying `UnspecifiedReason` (`:16`), because `Allow` is an explicit static (`:25`) and `Block(reason)` refuses a blank reason (`:39-44`). A half-built verdict stops the call rather than silently admitting it. -- **The layer is absent when it is unused.** `AddMmcaChatClient` checks the service *descriptors*, not a - resolved service, and adds `GuardrailChatClient` only when at least one `IChatGuardrail` is registered - (`DependencyInjection.cs:117-121`). An empty-loop client would otherwise change the type the container - hands back for every application that adopts none of this (the comment is at `:114-116`). -- **The streaming path inspects the request only** (`GuardrailChatClient.cs:65-78`, remark at `:16-20`). - Inspecting a streamed answer means buffering it to the end, which defeats the reason a caller chose - streaming, so an application that needs response inspection on streamed output buffers at its own call - site and owns that decision. +- **The layer is absent when unused, and unused is a startup failure.** `AddMmcaChatClient` checks the + service *descriptors*, not a resolved service, and adds `GuardrailChatClient` only when an + `IChatGuardrail` or an `IChatRequestRedactor` is registered (`DependencyInjection.cs:139-140`, + `:156-162`, comment at `:134-138`), so an empty-loop client never changes the type the container hands + back. But `Ai:RequireGuardrail` defaults to true (`AiSettings.cs:117`), so an enabled host that + registered neither throws at registration with `AddPiiRedactionGuardrail()` named as the fix + (`DependencyInjection.cs:208-217`). A host that deliberately wants none sets the flag false, which is a + reviewable line rather than an absence nobody can see. +- **The streaming path inspects the request and each update before it is yielded** + (`GuardrailChatClient.cs:90-117`, the before-the-yield comment at `:101-102`). It does not inspect the + assembled answer (remark at `:23-30`): a block stops the stream at that update, the caller has already + seen every fragment before it, and a rule that needs the whole text accumulates it inside its own + implementation (`IChatGuardrail.cs:51-56`). A refusal is an exception rather than an empty response, and the reason is recorded on the exception type (`ChatGuardrailException.cs:7-11`): an empty response is indistinguishable from the model having nothing to say, and a caller that wants a graceful fallback catches this type specifically. -## Prompts: a versioned contract the framework hashes +## Prompts: a versioned contract the framework hashes and gates `PromptContract` (`PromptContract.cs:23`) is a record of four things: name, version, model and system prompt. Its `Hash` (`:46`) is the lowercase hex SHA-256 of those four joined with a pipe, each with its @@ -248,8 +314,18 @@ verbatim, so a cached hash would survive a `with` expression and describe the pr `ToChatOptions` (`:53`) and `Apply` (`:62`) stamp three properties onto the request: `mmca.prompt.name` (`:26`), `mmca.prompt.version` (`:29`) and `mmca.prompt.hash` (`:32`). That is how the prompt's identity -reaches telemetry, and `PromptContract.ReadName` (`:77`) and `ReadVersion` (`:82`) are how the metering -layer reads it back off the options a call carried. +reaches telemetry: `PromptContract.ReadName` (`:77`) and `ReadVersion` (`:82`) are how the metering layer +reads it back off the options a call carried, and `PromptTaggingChatClient` +(`Chat/PromptTaggingChatClient.cs:21`) puts it on the `gen_ai` span (`DependencyInjection.cs:183`). + +`MMCA.Common.AI.Testing` turns that identity into two gates, and the framework runs both on its own +reference contract (`ADR-120:261`). `PromptContractPinTestsBase` (`PromptContractPinTestsBase.cs:25`) pins +every contract's hash in a JSON file, and its two facts fail on a contract with no recorded hash (`:39`) +and on a recorded hash that no longer matches its contract (`:60`). `GoldenReplayTestsBase` +(`GoldenReplayTestsBase.cs:24`) replays every case of a corpus through the real code against the answer +recorded for it, with no model, no credential and no network, so it runs on every CI leg (`:7-9`). It +collects every failing case rather than stopping at the first (`:18-20`), and an empty corpus is a failure +too (`:57-62`), because an evaluation that evaluates nothing passes forever. ## Metering: two counters, one histogram, one name @@ -272,14 +348,16 @@ The standard instrument carries the GenAI semantic-convention dimensions; this o identity and the outcome, so a latency regression is attributable to the prompt that caused it and a failure rate reads off the same series as the latency (`:36-43`). -`UsageRecordingChatClient` (`UsageRecordingChatClient.cs:30`) is what feeds it, and it records the +`UsageRecordingChatClient` (`UsageRecordingChatClient.cs:38`) is what feeds it, and it records the provider's own reported numbers rather than an estimate. The type documentation says why it sits here -rather than beside the input-budget check (`:11-15`): a bound has to be decided *before* the call, and a -cost has to be measured *after* it. The buffered path records duration on all three outcomes and then the -usage (`:48-81`); the streaming path drives the enumerator by hand rather than with `await foreach`, +rather than beside the input-budget check (`:13-15`): a bound has to be decided *before* the call, and a +cost has to be measured *after* it. The `provider` tag is the name the client reports about itself +through `ChatClientMetadata`, with the configured name lowercased as the fallback +(`ResolveProviderName`, `:68-81`). The buffered path records duration on all three outcomes and then the +usage (`:84-117`); the streaming path drives the enumerator by hand rather than with `await foreach`, because the duration has to be attributed to an outcome and C# forbids a `yield return` inside a `try` -with a `catch` (`:93-95`), and it harvests usage from the `UsageContent` item the provider delivers on -the stream (`:143-154`). +with a `catch` (`:129-131`), and it harvests usage from the `UsageContent` item the provider delivers on +the stream (`RecordUsageIn`, `:179-190`). Two absences are deliberate. A usage the provider did not report records nothing (`AiUsageMeter.cs:108-123`): an absent number must not read as a zero on a spend dashboard. And the `Meter` itself is created through @@ -305,52 +383,72 @@ The second rule is the interesting one, and the class documentation explains the evaluated, capped or swapped. It ships the way every shared rule in this framework ships: as an abstract base subclassed in each repo's -architecture tests with that repo's architecture map (`:14-17`), one of 136 fitness test methods across 53 -abstract `*TestsBase` classes, of which MMCA.Common's own build executes 267 (`MMCA.Common/FACTS.md:48`, -`:51`). A prompt or a bound must not become a type your domain depends on, and that sentence is a failing +architecture tests with that repo's architecture map (`:14-17`), one of 141 fitness test methods across 55 +abstract `*TestsBase` classes, of which MMCA.Common's own build executes 339 (`MMCA.Common/FACTS.md:51`, +`:54`). A prompt or a bound must not become a type your domain depends on, and that sentence is a failing test rather than a code review comment. ## Trade-offs, honestly -- **Two of the seven §16 criteria are absent from the framework on purpose.** An evaluation gate in CI - and retrieval as data architecture are feature-side, and ADR-120 records both as scope-outs rather than - as gaps to be closed later (`ADR-120:226`, `:236-237`). The §16 row's Implementation 6 is the Adequate - band precisely because of that split (`common-ArchitectureScorecard.md:75`). The package governs the - call. It does not make your feature evaluable for you. -- **The package governs the call, not the prompt's content.** Delimiting untrusted input, escaping it, - redacting PII and constraining the response schema stay in the feature that knows what its input is - (`ADR-120:209-213`). `IChatGuardrail` is where that policy plugs in, and a second feature still has to - make those decisions for itself. -- **Tool governance is a blanket switch, not per-caller authorization.** `Ai:AllowTools` is one boolean - for the whole host, and stripping tools (`BoundedChatClient.cs:155-159`) is the cheap half of least - privilege. The rubric asks for tools that are explicit, authorized per caller, and idempotent or - confirmable (`ArchitectureEvaluationCriteria.md:480`). Until a feature needs any, the honest answer is - that none exist. +- **Guardrails are the one partial §16 criterion, and they hold the row at Implementation 9.** Both + shipped policies are opt-in, so `Ai:RequireGuardrail` is satisfied by the PII redactor alone and a host + can enable AI with no injection defense at all; the response half of the content policy is inert until + a host configures patterns; and the streamed path inspects fragments, so a pattern spanning two updates + is missed by design (`common-ArchitectureScorecard.md:80`). The framework makes "no guardrail" a + startup failure. It does not make "the right guardrail" one. +- **Retrieval is unexercised, on purpose.** Nothing in the package addresses vector or hybrid search, + embedding freshness or retrieved-content injection, and ADR-120 leaves the rubric's retrieval + criterion to the feature that builds one, if one ever is (`ADR-120:390-393`). The scorecard reads it as + unexercised rather than unmet because the criterion is worded conditionally on such a store existing + (`common-ArchitectureScorecard.md:80`). +- **The framework ships the evaluation harness, not the evaluation.** The replay client, the golden base, + the pin base and the protocol are framework code; the corpus, the assertions and any live-judge tier + remain the feature's, because only the feature knows what a good answer is. The framework's own + reference contract proves the bases work, not that any product prompt is good (`ADR-120:386-389`). The + package governs the call. It does not make your feature evaluable for you. +- **The package governs the call and only the narrowest part of the content.** Contact-detail redaction + and a small injection-marker list ship; delimiting untrusted input, escaping it, constraining the + response schema and any domain-specific check stay in the feature that knows what its input is + (`ADR-120:368-380`). The marker list is eight phrases on purpose, so ordinary prose about instructions + survives it, which also means it catches the common phrasings rather than every phrasing. +- **Least-privilege tool calling is framework mechanism, not framework policy.** With `Ai:AllowTools` + true, a tool reaches the model only when every `IChatToolPolicy` allows it and, if consequential, the + request confirms it (`BoundedChatClient.cs:231-268`), and tools-on with no policy refuses to start + (`DependencyInjection.cs:219-226`). What a policy allows is still the application's to write, and the + rubric's "authorized per caller" (`ArchitectureEvaluationCriteria.md:480`) is only as good as that + policy. +- **Two defaults can refuse a host at startup.** `Ai:RequireGuardrail` true and `Ai:AllowTools` with no + policy are both registration-time failures, and the model pin turns a `PromptContract` that disagrees + with `Ai:Model` into a refused call (`ADR-120:356-359`). That is the intended direction, and it means + adopting the package is more than one line of registration. - **Off by absence puts a null on the consumer.** Nothing is registered when `Ai:Enabled` is false - (`DependencyInjection.cs:97-101`), so a feature resolves with `GetService` and holds a nullable + (`DependencyInjection.cs:128-132`), so a feature resolves with `GetService` and holds a nullable dependency. That is a branch in your code, written once per feature, that the framework will not write - for you (`ADR-120:189-195`). + for you (`ADR-120:339-344`). - **A cache hit still records usage.** `UsageRecordingChatClient` sits inside the optional response cache - (`DependencyInjection.cs:22-30`), so a hit counts what the call would have cost rather than what was + (`DependencyInjection.cs:36-39`), so a hit counts what the call would have cost rather than what was billed. The provider span is absent on a hit, so the two are distinguishable, but a spend graph read - without that context over-reports (`ADR-120:205-209`). + without that context over-reports (`ADR-120:364-367`). - **The input budget is an estimate and says so.** Message text plus instructions only, four characters - to the token, everything else under-counted (`BoundedChatClient.cs:37-44`). Treat it as a runaway + to the token, everything else under-counted (`BoundedChatClient.cs:51-58`). Treat it as a runaway guardrail with headroom. The authoritative numbers arrive after the call. -- **The streaming guardrail sees the request only** (`GuardrailChatClient.cs:65-78`). Response inspection - on a streamed answer means buffering it, which defeats streaming, so that trade is pushed to the call - site rather than made for you. -- **One provider is built in.** Anything other than Anthropic goes through the factory overload - (`DependencyInjection.cs:82`) and an unrecognized provider throws with that instruction (`:174-176`). - The pipeline is provider-agnostic; the convenience is not. +- **A provider is two references and a name.** A host adds an adapter package beside the governed one, + calls its registration method and names it in `Ai:Provider`; the governed package cannot fall back to a + provider it was never handed (`ADR-120:345-349`). Two adapters ship (`MMCA.Common/FACTS.md:23`, `:24`), + anything else implements `IAiProviderFactory` or goes through the factory overload + (`DependencyInjection.cs:113`), and a misnamed provider is a boot failure naming the registered ones + (`AiProviderValidator.cs:34`). - **An optional package nobody installs governs nothing, and adoption here is one feature.** MMCA.ADC's - Conference module takes the package in Infrastructure and in its service host - (`MMCA.ADC.Conference.Infrastructure.csproj:19`, `MMCA.ADC.Conference.Service.csproj:27`), and its - organizer-facing session scoring is the one product feature in these repos that calls a model - (`AnthropicScoringService.cs:9`), with the host subscribing the meter and trace source by name - (`MMCA.ADC.Conference.Service/Program.cs:154-155`). MMCA.Store adopts none of it: §16 is N/A there - because no product feature calls a model (`store-ArchitectureScorecard.md:61`). The rules are proven by - exactly one consumer. + Conference module takes the package in Infrastructure (`MMCA.ADC.Conference.Infrastructure.csproj:19`) + and its service host takes it with the Anthropic adapter (`MMCA.ADC.Conference.Service.csproj:31`, + `:34`). The host calls `AddAnthropicAiProvider` (`MMCA.ADC.Conference.Service/Program.cs:139`), + `AddConferenceAiGuardrails` (`:150`), which registers the PII redactor, the content policy and the + module's own response guardrail (`MMCA.ADC.Conference.Infrastructure/DependencyInjection.cs:85`, `:95`, + `:96`, `:99`), and `AddMmcaChatClient` (`Program.cs:152`), then subscribes the meter and trace source by + name (`:171-172`). Its organizer-facing session scoring (`SessionScoringService.cs:46`) is the one + product feature in these repos that calls a model. MMCA.Store adopts none of it: §16 is N/A there + because no product feature calls a model (`store-ArchitectureScorecard.md:57`). The rules are proven by + exactly one consumer (`ADR-120:394-396`). ## Apply this even without MMCA @@ -360,28 +458,33 @@ than the abstraction. 1. **Wrap the vendor client; do not subclass your feature around it.** A delegating decorator per concern composes, and a decorator you did not register is a concern you deliberately skipped. Use the vendor - SDK's own adapter onto whatever common interface your ecosystem has, and write no transport code of - your own: the day you hand-roll the HTTP request is the day the boundary is in the wrong place. + SDK's own adapter onto whatever common interface your ecosystem has, keep each adapter in its own + package behind a factory the host registers by name, validate that name at startup, and write no + transport code of your own: the day you hand-roll the HTTP request is the day the boundary is in the + wrong place. 2. **Put the bounds outermost, and make them configuration.** An output-token ceiling, a wall-clock - budget, a tool switch and an optional input ceiling, read from one validated settings section. Clamp - rather than default: a governance layer a caller can talk out of its limits with an argument is - documentation. Link your timeout token to the caller's own so early cancellation still wins. + budget, a tool switch backed by per-tool policy, an optional input ceiling and a pinned model, read + from one validated settings section. Clamp rather than default: a governance layer a caller can talk + out of its limits with an argument is documentation. Link your timeout token to the caller's own so + early cancellation still wins. 3. **Turn the feature off by absence, not by flag.** Register nothing when the dependency is disabled, so the code path cannot half-exist against a missing key. A nullable dependency is a branch somebody writes once; a boolean is a check everybody has to remember. -4. **Make the prompt a versioned artifact with a computed identity.** Name, version, model and text, and - a hash over all four with line endings normalized first. Compute it on read, never cache it in a - field. Stamp the name, version and hash onto the request so telemetry carries them. Without that hash, - an evaluation suite has nothing stable to key its recorded answers on, and "did anybody re-evaluate - this prompt" becomes a question about somebody's memory. +4. **Make the prompt a versioned artifact with a computed identity, and gate it.** Name, version, model + and text, and a hash over all four with line endings normalized first. Compute it on read, never cache + it in a field. Stamp the name, version and hash onto the request so telemetry carries them. Pin the + hash in a file a test checks, and replay recorded answers offline in CI with a gate that fails on an + empty corpus. Without that, "did anybody re-evaluate this prompt" is a question about somebody's + memory. 5. **Count the provider's numbers, not your own, and count them once.** One meter name and one set of counter names across every service, with the model, provider, prompt name and prompt version as dimensions. Record nothing when the provider reported nothing: an absent number that reads as zero is worse than a gap, because a gap is visible. -6. **Ship the guardrail extension point without the guardrail policy.** Let the application register - inspectors for requests and responses, run all of them, fail closed on a default verdict, and stop on - the first refusal. Content policy belongs to the feature that knows what its input is and which - jurisdiction it answers to. +6. **Ship the guardrail extension point, and only the policies that never vary by application.** Let + the application register redactors and inspectors for requests, responses and streamed updates, run + all of them, fail closed on a default verdict, and stop on the first refusal. Make "no guardrail at + all" a startup failure with an explicit, reviewable opt-out. Domain content policy belongs to the + feature that knows what its input is and which jurisdiction it answers to. 7. **Write the layering rule as a test.** Assert that no vendor SDK name appears outside your infrastructure layer, and that your own governed wrapper does not either. The second assertion is the one people skip, and it is the one that stops a prompt type from becoming a domain type. @@ -394,13 +497,15 @@ subscription with a code path attached.** --- **What we covered:** why the properties of a model call belong to the call rather than to the feature -that makes it, how `MMCA.Common.AI` composes `BoundedChatClient`, an optional `GuardrailChatClient` and -`UsageRecordingChatClient` into one governed `IChatClient`, why registering nothing when the dependency is -disabled beats a flag, the four bounds and the honest limits of the estimated input budget, `IChatGuardrail` -as an extension point that ships no policy and fails closed, `PromptContract`'s SHA-256 identity over name, -version, model and text, the `AiUsageMeter` counters and latency histogram that make spend attributable to -a prompt version, and the `AiDependencyIsolationTestsBase` fitness function that keeps both the vendor SDK -and the governed package behind Infrastructure. +that makes it, how `MMCA.Common.AI` composes `BoundedChatClient`, an optional `GuardrailChatClient`, +`UsageRecordingChatClient` and prompt tagging into one governed `IChatClient` over a provider adapter +selected by name, why registering nothing when the dependency is disabled beats a flag, the five bounds +and the honest limits of the estimated input budget, `IChatGuardrail` and `IChatRequestRedactor` as an +extension point with two narrow shipped policies, a fail-closed verdict and a registration-time refusal, +`PromptContract`'s SHA-256 identity over name, version, model and text and the pin and golden-replay gates +built on it, the `AiUsageMeter` counters and latency histogram that make spend attributable to a prompt +version, and the `AiDependencyIsolationTestsBase` fitness function that keeps both the vendor SDK and the +governed package behind Infrastructure. **Next in the series:** Article 51, "Four ways to do work later: channels, cron, the outbox and durable internal commands." @@ -418,96 +523,120 @@ Article 51, "Four ways to do work later: channels, cron, the outbox and durable *Tags: .NET, C Sharp, AI, LLM, Software Architecture* -*Notes: verified type/behavior names with path:line (all re-read this run, 2026-09-19). Both code blocks -are illustrative of the documented shape rather than byte-for-byte source. The first is the pipeline -diagram from `MMCA.Common/Source/Core/MMCA.Common.AI/DependencyInjection.cs:22-30`, re-commented; the -second condenses `BoundedChatClient.Bound` (`:147-162`), `CreateLinkedTimeout` (`:164-169`) and -`EnforceInputBudget` (`:171-186`) into one block, with the exception message shortened from `:185` and the -estimator comment added.* +*Notes: verified type/behavior names with path:line (all re-read this run, 2026-10-02, MMCA.Common +v1.221.0). Both code blocks are illustrative of the documented shape rather than byte-for-byte source. The +first is the pipeline diagram from `MMCA.Common/Source/Core/MMCA.Common.AI/DependencyInjection.cs:22-31`, +re-commented; the second condenses `BoundedChatClient.Bound` (`:181-223`), `CreateLinkedTimeout` +(`:270-275`) and `EnforceInputBudget` (`:277-292`) into one block, with both exception messages shortened +(`:210-213`, `:291`) and the comments added. This run reworked the scoring framing (M3/I6 to M4/I9, five +met, one partial, one unexercised), the package framing (one package to four), the G28 inventory (12 types +L0-L3 to 32 types L0-L10), the bound count (four to five), the guardrail section (shipped policies, +redactors, streamed-update inspection, the `RequireGuardrail` refusal), the tool-governance and provider +trade-offs, and added the AI.Testing pin and golden-replay gates. Source drift noted, not edited: +`BoundedChatClient.cs:13` still says "Four bounds" above a five-item list (`:16-50`), and +`ADR-120:411-412` cites `Program.cs:140/151/153` where the calls sit at `:139/150/152`.* - *Package source, paths rooted at `MMCA.Common/Source/Core/MMCA.Common.AI/`:* - - *`AiSettings.cs`: `AiSettings : IValidatableObject` `:31`, `SectionName` `"Ai"` `:34`, - `DefaultMaxOutputTokens` 1024 `:37`, `DefaultTimeout` 30 seconds `:40`, `Enabled` `:48`, - `Provider` `:51`, `Model` `:59`, `ApiKey` `:70`, `MaxOutputTokens` `:77` (`[Range(1, 1_000_000)]` - `:76`), `Timeout` `:83`, `AllowTools` `:90`, `EnableCache` `:96`, `PerCallInputTokenBudget` `:104`, - conditional `Validate` `:113-141`. `AiProvider` enum `:11` with `Anthropic = 0` `:17`.* - - *`DependencyInjection.cs`: `AiServiceCollectionExtensions` `:57`, pipeline diagram `:22-30` and the - ordering rationale `:31-39`, `AddMmcaChatClient(IConfiguration)` `:67`, factory overload `:82`, - bind + `ValidateDataAnnotations` + `ValidateOnStart` `:92-95`, the register-nothing-when-disabled - return `:97-101`, `AddMetrics`/`TryAddSingleton` `:103-104`, `BoundedChatClient` - registration `:108-112`, the descriptor check plus `GuardrailChatClient` `:117-121` (rationale comment - `:114-116`), `UsageRecordingChatClient` `:124-128`, the both-halves cache opt-in `:132-134`, - `enableSensitiveData` `:137`, `UseOpenTelemetry(sourceName: AiUsageMeter.MeterName)` `:139-142`, - `UseLogging` `:143`, `CreateProviderChatClient` `:158` with `AnthropicClient(...).AsIChatClient(...)` - `:169-173` and the unsupported-provider throw `:174-176`, `IsDevelopmentHost` `:192-196` (fails-closed - remark `:186-191`).* - - *`Chat/BoundedChatClient.cs`: `BoundedChatClient : DelegatingChatClient` `:51`, the four-bound list - `:15-36`, the estimate caveat `:37-44`, buffered path `:66-80`, streaming path `:83-97` with the - eager bound/budget `:92-94` and its comment `:90-91`, `StreamBoundedAsync` `:99-112` (whole-stream - timeout comment `:106-107`), `EstimateInputTokens` `:121-145` with the four-characters fallback `:144` - and its comment `:141-143`, `Bound` `:147-162` (clone `:149`, clamp `:151-153`, tool strip `:155-159`), - `CreateLinkedTimeout` `:164-169`, `EnforceInputBudget` `:171-186` (estimator lookup `:178`, throw - `:185`).* - - *`Chat/IChatGuardrail.cs`: interface `:20`, `InspectRequestAsync` `:27-30`, `InspectResponseAsync` - `:37-40`, the extension-point-not-policy rationale `:9-13`, hot-path remark `:16-19`. - `Chat/GuardrailChatClient.cs`: class `:21`, ctor `:28-33`, buffered path `:36-62` (request inspection - `:45`, response loop `:49-59`, throw `:57`), streaming request-only path `:65-78` with the remark - `:16-20`, `InspectRequestAsync` `:87-103` (throw `:100`). `Chat/GuardrailVerdict.cs`: readonly record - struct `:13`, `UnspecifiedReason` `:16`, `Allow` `:25`, `IsAllowed` `:28`, `Reason` `:34`, `Block` - `:39-44`, fail-closed remark `:7-12`. `Chat/ChatGuardrailException.cs`: class `:12`, the - exception-not-empty-response rationale `:7-11`. `Chat/IAiTokenEstimator.cs`: interface `:14`, - `EstimateTokenCount` `:19`, the no-second-dependency rationale `:9-12`.* - - *`PromptContract.cs`: record `:23`, `NamePropertyKey` `"mmca.prompt.name"` `:26`, `VersionPropertyKey` - `:29`, `HashPropertyKey` `:32`, `Hash` `:46` with the do-not-cache remark `:40-45`, `ToChatOptions` - `:53`, `Apply` `:62`, `ReadName` `:77`, `ReadVersion` `:82`, `ComputeHash` `:90-100` (pipe join - `:92-97`, `Convert.ToHexStringLower(SHA256.HashData(...))` `:99`), `NormalizeLineEndings` `:102-103`.* - - *`Observability/AiUsageMeter.cs`: class `:20`, `MeterName` `"MMCA.Common.AI"` `:26`, - `mmca.ai.input_tokens` `:29`, `mmca.ai.output_tokens` `:32`, `mmca.ai.call.duration` `:45` with the - not-a-duplicate-of-`gen_ai.client.operation.duration` remark `:36-43`, outcome constants `:48`, `:51`, - `:54`, the `IMeterFactory` ctor `:72-89` with the do-not-dispose remark `:62-67`, `Record` `:101-124` - (absent counts record nothing `:108-123`), `RecordDuration` `:137-149`, `AttributionTags` `:155-165`.* - - *`Chat/UsageRecordingChatClient.cs`: class `:30`, the bound-before/cost-after rationale `:11-15`, - buffered path `:48-81` (canceled `:60-64`, error `:65-69`, success duration `:71`, `_meter.Record` - `:73-78`), streaming path `:84-137` with the hand-driven-enumerator comment `:93-95` and the `finally` - duration `:134`, `RecordUsageIn` over `UsageContent` `:143-154`, `RecordDuration` `:159-166`.* + - *`AiSettings.cs`: `AiSettings : IValidatableObject` `:22`, `SectionName` `"Ai"` `:25`, + `DefaultMaxOutputTokens` 1024 `:28`, `DefaultTimeout` 30 seconds `:31`, `MaxTimeout` one hour `:38`, + `Enabled` `:46`, `Provider` (string) `:55`, `Model` `:65`, `ApiKey` `:76`, `Endpoint` `:83`, + `MaxOutputTokens` `:90` (`[Range(1, 1_000_000)]` `:89`), `Timeout` `:96`, `AllowTools` `:103`, + `RequireGuardrail` default true `:117` (rationale `:108-115`), `EnableCache` `:123`, + `PerCallInputTokenBudget` `:131`, conditional `Validate` `:140-190` (Provider `:147`, Model `:155`, + ApiKey `:162`, Endpoint `:170`, Timeout range `:177`, `:184`).* + - *`DependencyInjection.cs`: pipeline diagram `:22-31`, ordering rationale `:33-41` (cache-hit usage + `:36-39`, prompt tagging `:39-40`), `AiServiceCollectionExtensions` `:77`, `AddMmcaChatClient(IConfiguration)` + `:88` registering `AiProviderValidator` `:94`, factory overload `:113`, bind + `ValidateDataAnnotations` + + `ValidateOnStart` `:123-126`, register-nothing-when-disabled return `:128-132`, descriptor checks + `:139-140` (comment `:134-138`), `RefuseAnUngovernedHost` call `:142`, `AddMetrics` / + `TryAddSingleton` `:144-145`, pipeline build `:149-184` (`BoundedChatClient` with + `IChatToolPolicy` `:151-154`, `GuardrailChatClient` with redactors `:156-162`, `UsageRecordingChatClient` + `:164-168`, both-halves cache opt-in `:172-175`, `enableSensitiveData` `:177`, `UseOpenTelemetry` + `:180-182`, `PromptTaggingChatClient` `:183`, `UseLogging` `:184`), `RequireGuardrail` refusal + `:208-217`, tools-without-policy refusal `:219-226`, `CreateProviderChatClient` `:239-248` (belt throw + `:244-245`), `IsDevelopmentHost` `:262-266` (fails-closed remark `:256-261`).* + - *`Providers/IAiProviderFactory.cs`: interface `:20`, `Name` `:26`, `Create` `:34`. + `Providers/AiProviderValidator.cs`: class `:16`, `ValidateOptionsResult.Fail` `:34`. Adapters: + `MMCA.Common.AI.Anthropic/DependencyInjection.cs:26` (`AddAnthropicAiProvider`), + `MMCA.Common.AI.Anthropic/AnthropicAiProviderFactory.cs:14` with + `new AnthropicClient(options).AsIChatClient(...)` `:48`; `MMCA.Common.AI.OpenAI/DependencyInjection.cs:26` + (`AddOpenAiProvider`), `MMCA.Common.AI.OpenAI/OpenAiProviderFactory.cs:18` with `.AsIChatClient()` `:51`.* + - *`Chat/BoundedChatClient.cs`: five-bound list `:16-50` (tool policy `:28-38`, model pin `:43-49`), + estimate caveat `:51-58`, no-mutation remark `:59-63`, class `:65`, eager bound/budget `:124-130`, + `StreamBoundedAsync` `:133-146` (whole-stream comment `:140-141`), four-characters fallback `:178` + (comment `:175-177`), `Bound` `:181-223` (clone `:183`, clamp `:185-187`, tool strip `:189-193`, + `FilterTools` call `:196`, model pin `:205-220`), `FilterTools` `:231-268` (no policy `:241-244`, + every-policy check `:251`, confirmation-not-override comment `:256-258`, consequential `:259`), + `CreateLinkedTimeout` `:270-275`, `EnforceInputBudget` `:277-292`.* + - *`Chat/IChatGuardrail.cs`: extension point plus two shipped guardrails and no domain policy `:9-14`, + hot-path remark `:17-20`, interface `:21`, `InspectRequestAsync` `:28-31`, `InspectResponseAsync` + `:38-41`, `InspectStreamedUpdateAsync` default Allow `:57-60` (fragment remark `:51-56`). + `Chat/GuardrailChatClient.cs`: redact-then-inspect summary `:8-10`, layer placement `:12-16`, + redaction-first `:18-20`, streaming remark `:23-30`, class `:31`, ctors `:39`, `:48-58`, buffered + path `:61-87` (redact `:68`, throw `:82`), streaming path `:90-117` (inspect-before-yield comment + `:101-102`, throw `:111`), `Redact` `:126-135`, `InspectRequestAsync` `:137-153` (throw `:150`). + `Guardrails/IChatRequestRedactor.cs:25`, `Guardrails/IChatToolPolicy.cs:23`, + `Guardrails/GuardrailServiceCollectionExtensions.cs` (`AddPiiRedactionGuardrail` `:33`, + `AddContentPolicyGuardrail` `:62`), `Guardrails/PiiRedactionGuardrail.cs:39`, + `Guardrails/ContentPolicyGuardrail.cs` (class `:64`, eight `BuiltInMarkers` `:77-87`), + `Guardrails/ContentPolicySettings.cs:35` (`InjectionMode` default `Redact`). + `Chat/GuardrailVerdict.cs`: readonly record struct `:13`, `UnspecifiedReason` `:16`, `Allow` `:25`, + `Block` `:39-44`. `Chat/ChatGuardrailException.cs`: class `:12`, rationale `:7-11`. + `Chat/IAiTokenEstimator.cs`: interface `:14`, no-second-dependency rationale `:9-12`. + `Chat/PromptTaggingChatClient.cs:21`.* + - *`PromptContract.cs` (unchanged anchors, confirmed by this run's audit): record `:23`, property keys + `:26`, `:29`, `:32`, `Hash` `:46` with the do-not-cache remark `:40-45`, `ToChatOptions` `:53`, `Apply` + `:62`, `ReadName` `:77`, `ReadVersion` `:82`, hash and normalization `:90-103`.* + - *`Observability/AiUsageMeter.cs` (unchanged anchors, confirmed by this run's audit): class `:20`, + `MeterName` `:26`, counters `:29`, `:32`, histogram `:45` with remark `:36-43`, outcomes `:48`, `:51`, + `:54`, do-not-dispose remark `:62-67`, absent usage records nothing `:108-123`, `RecordDuration` + `:137-149`, `AttributionTags` `:155-165`.* + - *`Chat/UsageRecordingChatClient.cs`: bound-before/cost-after rationale `:13-15`, class `:38`, + `ResolveProviderName` from `ChatClientMetadata` with lowercased config fallback `:68-81`, buffered path + `:84-117`, hand-driven-enumerator comment `:129-131`, `RecordUsageIn` over `UsageContent` `:179-190`.* +- *Evaluation harness, `MMCA.Common/Source/Hosting/MMCA.Common.AI.Testing/`: `GoldenReplayTestsBase.cs` + (offline replay summary `:7-9`, collected failures `:18-20`, class `:24`, `EveryGoldenCase_ReplaysAsRecorded` + `:43`, empty-corpus failure `:57-62`); `PromptContractPinTestsBase.cs` (protocol summary `:8-23`, class + `:25`, `EveryContract_HasARecordedHash` `:39`, `EveryRecordedHash_MatchesTheCurrentContract` `:60`).* - *Fitness function: `MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Layering/AiDependencyIsolationTestsBase.cs`: - class `:19`, `LanguageModelSdks_ShouldStayAt_TheModelBoundary` `:24-25`, - `GovernedAiPackage_ShouldStayBehind_Infrastructure` `:28-29`, the two-ways-it-leaks documentation - `:6-13`, the subclass-per-repo instruction `:14-17`.* -- *ADR-120 (`Website/docs-src/adr/120-governed-chat-client-boundary.md`), Accepted 2026-09-11 `:4`, revised - 2026-09-11 `:8`, 2026-09-15 for the guardrail layer and host-side telemetry export `:12-24`, and - 2026-09-19 for the ADC re-score `:26-28`. The decision statement `:75-78`; the eight decision points - `:80-159`; the trade-offs cited here: off-by-absence `:189-195`, cache-hit usage `:205-209`, content - policy stays feature-side `:209-213`, one built-in provider `:213-215`, one consumer `:216-218`; - consequences `:221-237`, including ADC's §16 at M4/I9 from the 2026-09-16 cycle `:228-237` and the - Store/Helpdesk N/A `:225-226`.* + two-ways-it-leaks documentation `:6-13`, subclass-per-repo instruction `:14-17`, class `:19`, + `LanguageModelSdks_ShouldStayAt_TheModelBoundary` `:24-25`, + `GovernedAiPackage_ShouldStayBehind_Infrastructure` `:28-29`.* +- *ADR-120 (`Website/docs-src/adr/120-governed-chat-client-boundary.md`, 461 lines): Accepted 2026-09-11 + `:4`, revisions `:8`, `:12`, the AI.Testing harness and prompt tagging `:34-38`, the v1.208.0 + `ContentPolicyGuardrail` revision `:40-47`; decision 10 (evaluation harness is framework code) `:261`; + trade-offs cited here: off-by-absence `:339-344`, provider is two references and a name `:345-349`, two + defaults can refuse a host `:356-359`, cache-hit usage `:364-367`, two narrow content policies + `:368-380`, streamed fragments `:381-385`, harness not evaluation `:386-389`, retrieval out of scope + `:390-393`, one consumer `:394-396`; consequences: ADC adoption `:410-416`, ADC §16 at M4/I10 `:419-424`.* - *ADR-111 (`Website/docs-src/adr/111-ai-session-scoring-governance.md`), Accepted 2026-09-04 and **extended, not superseded**, by ADR-120 `:4`: the scoring-specific rules, the prompt-change protocol, - the two evaluation tiers and the budgeted ceiling alert stay with the feature. Its decision 8 records - that the feature defines no meter of its own and that token usage rides `UsageRecordingChatClient` on - the `MMCA.Common.AI` meter `:170-187`; its closing trade-off states that the call, the credential, the - metering and the prompt contract are framework surface while everything above them is scoped to session - scoring `:292-296`.* -- *Rubric: §16 AI-Native Application Architecture heading - (`Website/docs-src/governance/ArchitectureEvaluationCriteria.md:469`), intent `:471`, the N/A-until-a- - feature-calls-a-model applicability rule `:473`, the seven criteria `:476-482` (least-privilege tool - calling at `:480`), the red flags `:485-489`, default weight 2 `:491`.* -- *Scorecards: MMCA.Common's §16 at Maturity 3 / Implementation 6 from the thirty-fifth-wave re-score of - 2026-09-15 (`Website/docs-src/governance/common-ArchitectureScorecard.md:75`), with §16 in both - denominators at weight 2 and a rubric weight total of 82 (`:124`). MMCA.Store's §16 is N/A because no - product feature - calls a model (`store-ArchitectureScorecard.md:61`).* -- *Numbers: framework v1.205.0 (`MMCA.Common/FACTS.md:14`, dated 2026-09-17 at `:4`), nineteen published - packages with `MMCA.Common.AI` among them (`:19`, `:22`), 136 fitness test methods across 53 abstract - bases with MMCA.Common's own build executing 267 (`:48`, `:51`). Group G28 Common AI Integration, 12 - types, levels L0-L3 (`Website/docs-src/onboarding/00-group-taxonomy.md:82`, chapter + the two evaluation tiers, the input and output guardrails and the budgeted ceiling alert stay with the + feature. Its decision 8 (the framework meters the tokens, a budgeted ceiling alert watches the total) + is at `:226`.* +- *Rubric: §16 heading (`Website/docs-src/governance/ArchitectureEvaluationCriteria.md:469`), intent + `:471`, applicability `:473`, the seven criteria `:476-482` (least-privilege tool calling `:480`, + retrieval `:481`), red flags `:485-489`, default weight 2 `:491` (anchors confirmed by this run's audit).* +- *Scorecards: MMCA.Common §16 at weight 2, Maturity 4 / Implementation 9, 8/18, five met, one partial + (guardrails), one unexercised (retrieval), held at I9 by three guardrail residuals + (`Website/docs-src/governance/common-ArchitectureScorecard.md:80`); no N/A rows, 34 rows, weight total 82 + (`:104`). MMCA.Store §16 N/A, no product feature calls a model (`store-ArchitectureScorecard.md:57`).* +- *Numbers: framework v1.221.0 (`MMCA.Common/FACTS.md:14`, dated 2026-10-02 at `:4`), twenty-two + published packages (`:19`) with `MMCA.Common.AI` `:22`, `MMCA.Common.AI.Anthropic` `:23`, + `MMCA.Common.AI.OpenAI` `:24` and `MMCA.Common.AI.Testing` `:34`; 141 fitness test methods across 55 + abstract bases (`:51`), MMCA.Common's own build executing 339 (`:54`). Group G28 Common AI Integration, + 32 types, levels L0-L10 (`Website/docs-src/onboarding/00-group-taxonomy.md:82`, chapter `Website/docs-src/onboarding/group-27-common-ai-integration.md`).* -- *Consumer adoption, read this run: `MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Infrastructure/MMCA.ADC.Conference.Infrastructure.csproj:19` - and `MMCA.ADC/Source/Services/MMCA.ADC.Conference.Service/MMCA.ADC.Conference.Service.csproj:27` take the - package; `.../Sessions/Scoring/AnthropicScoringService.cs:9` is the one feature that calls a model; the - Conference host registers the meter and trace source by name at - `MMCA.ADC/Source/Services/MMCA.ADC.Conference.Service/Program.cs:154-155` (section comment `:114`). A - search of `MMCA.Store/Source` for `MMCA.Common.AI`, `Anthropic` or `Microsoft.Extensions.AI` returns - matches only inside one `packages.lock.json`, and no Store source file.* +- *Consumer adoption, read this run: + `MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Infrastructure/MMCA.ADC.Conference.Infrastructure.csproj:19` + takes `MMCA.Common.AI`; `MMCA.ADC/Source/Services/MMCA.ADC.Conference.Service/MMCA.ADC.Conference.Service.csproj` + takes `MMCA.Common.AI` `:31` and `MMCA.Common.AI.Anthropic` `:34`; the host's `Program.cs` section comment + `:116`, `AddAnthropicAiProvider` `:139`, `AddConferenceAiGuardrails` `:150`, `AddMmcaChatClient` `:152`, + `AddMeter`/`AddSource("MMCA.Common.AI")` `:171-172`; `MMCA.ADC.Conference.Infrastructure/DependencyInjection.cs` + `AddConferenceAiGuardrails` `:85` registering `AddPiiRedactionGuardrail` `:95`, + `AddContentPolicyGuardrail` `:96`, `AddSessionScoreResponseGuardrail` `:99`; + `.../Sessions/Scoring/SessionScoringService.cs:46` is the one feature that calls a model (taking + `IChatClient?`). The audit for this run found no `MMCA.Store/Source` file referencing `MMCA.Common.AI`, + `Anthropic` or `Microsoft.Extensions.AI` outside one `packages.lock.json`.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/http-api-versioning.md b/docs-src/articles/http-api-versioning.md index 215a50a4..9acd58a8 100644 --- a/docs-src/articles/http-api-versioning.md +++ b/docs-src/articles/http-api-versioning.md @@ -2,9 +2,9 @@ > Series: MMCA.Common · Article #44 · P2/P3 · Group G12,G13 · Rubric §9 · ADR-046 · > Status: grounded in `Website/docs-src/adr/046-http-api-versioning.md`, -> `WebApplicationBuilderExtensions.cs` (`AddCommonApiVersioning`), `ServiceInfoControllerBase.cs`, -> `ServiceInfoVersioningContractTestsBase.cs`, and the per-host `ServiceInfoController` subclasses in -> ADC and Store. No em dashes. +> `WebApplicationBuilderExtensions.cs` (`AddCommonApiVersioning`), `OpenApiEndpointExtensions.cs` +> (`MapCommonOpenApi`), `ServiceInfoControllerBase.cs`, `ServiceInfoVersioningContractTestsBase.cs`, and +> the per-host `ServiceInfoController` subclasses in ADC and Store. No em dashes. **Subtitle:** Most APIs "support versioning" by shipping v1.0 and never a second version. Here is a header-based setup that introduces versioning without breaking a single caller, and a fitness contract @@ -57,7 +57,7 @@ host through one call, and keeps it exercised by a shared contract test that pro coexist. **One registration wires the whole policy.** `AddCommonApiVersioning` -(`WebApplicationBuilderExtensions.cs:334`) is the entire decision, in one place: the reader, the +(`WebApplicationBuilderExtensions.cs:37`) is the entire decision, in one place: the reader, the default behavior, the reporting, and the one guard that keeps document generation from tripping over any of it. @@ -74,7 +74,7 @@ public IServiceCollection AddCommonApiVersioning() }).AddMvc() .AddApiExplorer(options => { - options.GroupNameFormat = "'v'VVV"; // feeds the versioned OpenAPI group + options.GroupNameFormat = "'v'VVV"; // names each version's explorer group options.SubstituteApiVersionInUrl = true; }); @@ -85,11 +85,11 @@ public IServiceCollection AddCommonApiVersioning() ``` Three of those lines carry the design. The reader is a `HeaderApiVersionReader("api-version")` -(`WebApplicationBuilderExtensions.cs:343`), so routes and query strings stay version-free: a caller +(`WebApplicationBuilderExtensions.cs:46`), so routes and query strings stay version-free: a caller opts into a newer shape by adding one header, not by rewriting the URL. `AssumeDefaultVersionWhenUnspecified` -(`WebApplicationBuilderExtensions.cs:341`) means a client that never sends the header keeps getting +(`WebApplicationBuilderExtensions.cs:44`) means a client that never sends the header keeps getting `1.0`, so introducing versioning was not a breaking change for any existing caller. And -`ReportApiVersions` (`WebApplicationBuilderExtensions.cs:342`) means every response carries the +`ReportApiVersions` (`WebApplicationBuilderExtensions.cs:45`) means every response carries the supported and deprecated version lists in its headers, so a client can see which versions a service still honors and which are on the way out without reading a changelog. @@ -97,16 +97,19 @@ Two more details in that block carry less design and more hard-won experience, a a line that is not there. `1.0` is the default because the `Asp.Versioning` library already defaults to it, so the registration says nothing at all: setting `DefaultApiVersion` explicitly, in either the versioning options or the explorer options that inherit them, trips the library's own analyzers -(AV0011/AV0024), and the comment standing in its place (`WebApplicationBuilderExtensions.cs:336-338`) +(AV0011/AV0024), and the comment standing in its place (`WebApplicationBuilderExtensions.cs:39-41`) exists so the next reader does not "fix" the omission. And `AddApiParameterDescriptorBackfill` -(`WebApplicationBuilderExtensions.cs:351`) installs `ApiParameterDescriptorBackfillProvider`, added in +(`WebApplicationBuilderExtensions.cs:54`) installs `ApiParameterDescriptorBackfillProvider`, added in v1.146.0 after a real failure: MVC leaves `ApiParameterDescription.ParameterDescriptor` null for a route -token with no matching action parameter, and `Asp.Versioning.OpenApi` dereferences it without a null -check, so a host that routes `api/v{version:apiVersion}/...` returned a `500` from -`GET /openapi/{documentName}.json`. The guard fills a placeholder only where one is missing and never -replaces a descriptor MVC supplied (`ApiParameterDescriptorBackfillProvider.cs:65`). Because this -framework's reader is the header, no current host was hit either way, which is exactly why that failure -could ship unnoticed (ADR-046). +token with no matching action parameter, and `Asp.Versioning.OpenApi`, the document pipeline in use when +the guard shipped, dereferenced it without a null check, so a host that routed `api/v{version:apiVersion}/...` +got a `500` from `GET /openapi/{documentName}.json`. The guard fills a placeholder only where one is +missing and never replaces a descriptor MVC supplied (`ApiParameterDescriptorBackfillProvider.cs:65`). +Because this framework's reader is the header, no host was hit either way, which is exactly why that +failure could ship unnoticed. MMCA.Common references only `Asp.Versioning.Mvc` and +`Asp.Versioning.Mvc.ApiExplorer` (`MMCA.Common/Directory.Packages.props:14`, `:20`), not +`Asp.Versioning.OpenApi`; the guard stays because it costs nothing and protects any other consumer of +the API descriptions from the same null (ADR-046). **A shipped exemplar proves two versions coexist.** This is the part most "we support versioning" stories skip. `ServiceInfoControllerBase` (`ServiceInfoControllerBase.cs:30`) serves the same @@ -146,9 +149,9 @@ check, and the same invariant-over-discipline posture the framework prefers (ADR working version, everything above would be asserted rather than proven. **Every REST host adopts it the same way.** The extracted services call `AddCommonApiVersioning` in -their startup: ADC's Conference (`MMCA.ADC.Conference.Service/Program.cs:203`), Identity (`:152`), -Engagement (`:148`), and Notification (`:140`) hosts, Store's Catalog (`:141`), Sales (`:148`), and -Identity (`:135`) hosts, and the monolith reference host +their startup: ADC's Conference (`MMCA.ADC.Conference.Service/Program.cs:217`), Identity (`:150`), +Engagement (`:147`), and Notification (`:136`) hosts, Store's Catalog (`:140`), Sales (`:147`), and +Identity (`:134`) hosts, and the monolith reference host (`MMCA.Helpdesk.Web/Program.cs:35`). One call per host, and the reader, default, and reporting choices cannot drift apart between services. The discovery exemplar is narrower than the registration: only ADC's Conference and Store's Catalog hosts ship a `ServiceInfoController` subclass today. @@ -170,17 +173,24 @@ things are worth naming, and none of them is a bug. `/ServiceInfo` discovery endpoint to keep the versioning path honest, not because any business resource has yet needed to evolve its shape. The point of the exemplar is that when a real resource does need a `2.0`, the machinery it plugs into has been proven to work, not merely configured. -- **Header versioning is less discoverable than a URL segment, and the OpenAPI documents are dev/CI - only.** A version chosen by header does not show up in a copied URL or a browser address bar, so the - version in play is only visible to a caller that reads request and response headers. The generated - contract does follow the versioning axis: `MapCommonOpenApi` applies - `MapOpenApi().WithDocumentPerVersion()` (`Startup/Endpoints/OpenApiEndpointExtensions.cs:38`), so the - route resolves one document per discovered API version, named by the explorer's `GroupNameFormat` - (`v1.0` is the `v1` document). But the whole endpoint is a no-op in Production - (`Startup/Endpoints/OpenApiEndpointExtensions.cs:36`), and the only document any host's contract test - pins is `/openapi/v1.json` (`Conformance/OpenApiContractTestsBase.cs:31`), so the machine-readable - surface is a development and CI artifact, not something a client can browse in production and not a - place the `2.0` shape is currently asserted. +- **Header versioning is less discoverable than a URL segment, and the OpenAPI document is one + dev/CI-only `v1`.** A version chosen by header does not show up in a copied URL or a browser address + bar, so the version in play is only visible to a caller that reads request and response headers. The + generated contract does not follow the versioning axis either. Each host registers the plain `v1` + document itself with `services.AddOpenApi()`, next to `AddCommonOpenApi`, which registers no document + and only configures the ones present (`WebApplicationBuilderExtensions.cs:95`). `MapCommonOpenApi` + then maps that single document with `app.MapOpenApi().AllowAnonymous()` + (`Startup/Endpoints/OpenApiEndpointExtensions.cs:74`, document name `v1` at `:28`), throws at startup + when no `v1` document was registered (`:65-71`), and is a no-op in Production (`:62`). So the `2.0` + `ServiceInfo` action is served and exercised by the fitness contract above but appears in no + generated document, and the only document any host's contract test pins is `/openapi/v1.json` + (`Conformance/OpenApiContractTestsBase.cs:31`). ADC and Store also write that document to disk at + build time and commit it per service host (four in ADC, three in Store, for example + `MMCA.ADC.Conference.Service/openapi/MMCA.ADC.Conference.Service.json`), and an "OpenAPI documents are + current" CI step fails a PR whose document changed without being committed (`MMCA.ADC/.github/workflows/deploy.yml:305`, + `MMCA.Store/.github/workflows/deploy.yml:287`). That makes the contract diffable in review, but it + stays a development and CI artifact: never served in production, and not a place the `2.0` shape is + asserted (the committed Conference document carries `/ServiceInfo` and no `ServiceInfoV2Response`). The trade the framework makes is clear: stable, version-free URLs and a non-breaking rollout, paid for with a version that lives in headers rather than the path, and a proof-of-life second version on the @@ -214,8 +224,8 @@ assume-default-when-unspecified, report-versions, `api-version` reader, plus the backfill that keeps OpenAPI generation from failing) in one call, how `ServiceInfoControllerBase` ships a real deprecated `1.0` alongside a `2.0` so `ServiceInfoVersioningContractTestsBase` can prove two versions coexist rather than assert it, and the honest current-reality caveats (only the discovery endpoint has -a `2.0`, adoption is per host, the attributes are repeated per subclass, and the OpenAPI documents are -dev/CI only). +a `2.0`, adoption is per host, the attributes are repeated per subclass, and the OpenAPI contract is a +single dev/CI-only `v1` document that does not show the `2.0` shape). **Next in the series:** Article 45, "Feature Flags in the CQRS Pipeline: Gate Commands, Not Code," on gating a command in the pipeline instead of branching the code that runs it. @@ -231,15 +241,16 @@ gating a command in the pipeline instead of branching the code that runs it. *Tags: .NET, C Sharp, Software Architecture, API Design, REST APIs* -*Notes: verified type/behavior names with path:line (re-read this run):* -- *`AddCommonApiVersioning` (`Source/Presentation/MMCA.Common.API/Startup/WebApplicationBuilderExtensions.cs:334`, inside the `extension(IServiceCollection services)` block opening at `:327`); the body is `:335-354`. `DefaultApiVersion` is NOT SET: `:336-338` is a comment recording that the omission is deliberate (`1.0` is already the framework default and the API explorer inherits both it and `AssumeDefaultVersionWhenUnspecified` from the versioning options below; restating either one trips AV0011/AV0024). `AssumeDefaultVersionWhenUnspecified = true` (`:341`), `ReportApiVersions = true` (`:342`), `new HeaderApiVersionReader("api-version")` (`:343`), `.AddMvc()` (`:344`), `.AddApiExplorer(...)` (`:345-349`) setting only `GroupNameFormat = "'v'VVV"` (`:347`) and `SubstituteApiVersionInUrl = true` (`:348`), then `services.AddApiParameterDescriptorBackfill();` (`:351`) and `return services;` (`:353`). The method's own contents are unchanged; the extension block sits about 100 lines lower in the file than the `:2xx` anchors this ledger carried before, so every anchor above was re-read on 2026-09-19.* -- *`ApiParameterDescriptorBackfillProvider` (`Source/Presentation/MMCA.Common.API/OpenApi/ApiParameterDescriptorBackfillProvider.cs:43`, `IApiDescriptionProvider`), fills a placeholder only where MVC left `ParameterDescriptor` null via `??=` (`:65`), never replacing an existing descriptor. `AddApiParameterDescriptorBackfill()` is called from both `AddCommonApiVersioning` (`WebApplicationBuilderExtensions.cs:351`) and `AddCommonOpenApi` (`:496`; method at `:493`, doc at `:483-492`), both delegating to the shared private helper at `:518-520`. Added in v1.146.0; the 500-from-`/openapi/{documentName}.json` rationale and the "no current host was affected, which is why it could ship unnoticed" note are ADR-046 material (`Website/docs-src/adr/046-http-api-versioning.md:97-107`, amendment recorded at `:8-9`).* -- *`ServiceInfoControllerBase` (`Source/Presentation/MMCA.Common.API/Controllers/ServiceInfoControllerBase.cs:30`); `Supported`/`Deprecated` arrays (`:32-33`); `GetV1` `[MapToApiVersion("1.0")]` (`:40`) returning `ServiceInfoResponse` (record `:51`); `GetV2` `[MapToApiVersion("2.0")]` (`:46`) returning the `ServiceInfoV2Response` superset (record `:54`). Read-only: both actions are `[HttpGet]` (`:39`, `:45`), no write verb. The base carries NO `[AllowAnonymous]` (the only occurrence of the attribute in the file is the sample subclass inside the XML `` block at `:21`); anonymity is granted per subclass. ADR-046 records this in its 2026-08-01 revision note (`Website/docs-src/adr/046-http-api-versioning.md:4-7`), with the anonymity sentence at `:73`; that ADR also carries a 2026-08-12 amendment (`:8-9`), a 2026-08-14 revision (`:10-11`) and a 2026-09-11 revision (`:12-15`, re-anchored citations and a corrected OpenAPI trade-off).* -- *`ServiceInfoVersioningContractTestsBase` (`Source/Hosting/MMCA.Common.Testing/Conformance/ServiceInfoVersioningContractTestsBase.cs:20`, namespace `MMCA.Common.Testing.Conformance`); v1.0 asserts `api-deprecated-versions` (`:39-41`); v2.0 asserts `api-supported-versions` (`:55-57`); reads `/ServiceInfo` with the `api-version` header (`:63-64`). Subclassed on exactly two hosts, one per repo: `MMCA.ADC/Tests/Integration/MMCA.ADC.Conference.IntegrationTests/Contract/ApiVersioningTests.cs:15` and `MMCA.Store/Tests/Integration/MMCA.Store.Catalog.IntegrationTests/Contract/ApiVersioningTests.cs:16` (the declarations span `:14-15` and `:15-16` respectively; no other subclass in either repo). ADR-058 counts seven contract bases, one per runtime contract, all under `Source/Hosting/MMCA.Common.Testing/Conformance/` (`Website/docs-src/adr/058-runtime-conformance-suites-as-a-package.md:27`); this one is taught in depth here and pointed to from Article 35.* -- *Per-host subclasses: ADC `ServiceInfoController` `[AllowAnonymous]` (`:17`), `[ApiVersion("1.0", Deprecated = true)]` / `[ApiVersion("2.0")]`, `ServiceName => "Conference"` (`MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.API/Controllers/ServiceInfoController.cs:17,18,19,23`); Store mirror `[AllowAnonymous]` (`:17`), `ServiceName => "Catalog"` (`MMCA.Store/Source/Modules/Catalog/MMCA.Store.Catalog.API/Controllers/ServiceInfoController.cs:17,18,23`).* -- *The non-inheritance caveat is recorded by ADR-036 only, for ADC's sealed `OAuthController` (`Website/docs-src/adr/036-external-oauth-login.md:144-146`). ADR-034 takes the opposite shape: `[ApiController]` / `[Route("[controller]")]` / `[ApiVersion("1.0")]` sit on the generic base itself (`Website/docs-src/adr/034-generic-entity-query-layer.md:42`, `EntityControllerBase.cs:33-35`, class declaration at `:36`), so the earlier joint attribution to ADR-034 was wrong and is corrected here and in ADR-046 (`046-http-api-versioning.md:5-6`, with the "application controllers declare `1.0` today" paragraph at `:117-119`, the non-inheritance trade-off at `:140-142`, and the ADR-034 correction in Related at `:165-168`).* -- *Host adoption of `AddCommonApiVersioning`, all eight call sites re-read on 2026-09-19: ADC Conference (`Source/Services/MMCA.ADC.Conference.Service/Program.cs:203`), Identity (`Source/Services/MMCA.ADC.Identity.Service/Program.cs:152`), Engagement (`Source/Services/MMCA.ADC.Engagement.Service/Program.cs:148`), Notification (`Source/Services/MMCA.ADC.Notification.Service/Program.cs:140`); Store Catalog (`Source/Services/MMCA.Store.Catalog.Service/Program.cs:141`), Sales (`Source/Services/MMCA.Store.Sales.Service/Program.cs:148`), Identity (`Source/Services/MMCA.Store.Identity.Service/Program.cs:135`); Helpdesk (`Source/Hosts/MMCA.Helpdesk.Web/Program.cs:35`). The inventory is still eight hosts; six of the eight anchors moved since the previous ledger.* -- *`MapCommonOpenApi` (`Source/Presentation/MMCA.Common.API/Startup/Endpoints/Startup/Endpoints/OpenApiEndpointExtensions.cs:38`, XML doc at `:26-33`) is a no-op in Production (the `!app.Environment.IsProduction()` guard at `:36`) and maps `app.MapOpenApi().WithDocumentPerVersion()` (`:38`), documented at `:29-31` as resolving one document per discovered API version; `AddCommonOpenApi`'s doc says the same (`WebApplicationBuilderExtensions.cs:483-492`, method at `:493`). Nothing pins the document set beyond `v1`: `OpenApiContractTestsBase`'s default document path is `/openapi/v1.json` (`Source/Hosting/MMCA.Common.Testing/Conformance/OpenApiContractTestsBase.cs:31`) and the framework baseline fetches that same single document (`MMCA.Common/Tests/Presentation/MMCA.Common.API.Tests/OpenApi/OpenApiBaselineTests.cs:54`), which is the trade-off ADR-046 records at `:149-157`.* -- *The code block above is condensed from `WebApplicationBuilderExtensions.cs:334-354` (comments shortened, body faithful, not byte-for-byte). Anchor facts (125 accepted ADRs 001-125, framework v1.205.0, 19 published packages, §9 scorecard) per `MMCA.Common/FACTS.md:4,14,19` and `Website/docs-src/adr/README.md:6` this run.* +*Notes: verified type/behavior names with path:line (re-read this run, 2026-10-02, framework v1.221.0):* +- *`AddCommonApiVersioning` (`Source/Presentation/MMCA.Common.API/Startup/WebApplicationBuilderExtensions.cs:37`, inside the `extension(IServiceCollection services)` block opening at `:30`); the body is `:38-57`. `DefaultApiVersion` is NOT SET: `:39-41` is a comment recording that the omission is deliberate (`1.0` is already the framework default and the API explorer inherits both it and `AssumeDefaultVersionWhenUnspecified`; restating either one trips AV0011/AV0024). `services.AddApiVersioning(...)` (`:42`), `AssumeDefaultVersionWhenUnspecified = true` (`:44`), `ReportApiVersions = true` (`:45`), `new HeaderApiVersionReader("api-version")` (`:46`), `.AddMvc()` (`:47`), `.AddApiExplorer(...)` (`:48-52`) setting only `GroupNameFormat = "'v'VVV"` (`:50`) and `SubstituteApiVersionInUrl = true` (`:51`), then `services.AddApiParameterDescriptorBackfill();` (`:54`) and `return services;` (`:56`). The 2026-09-19 ledger anchors (`:327`, `:334-354`, `:336-338`, `:341-343`, `:351`) all moved about 300 lines up; contents unchanged. The code-block comment on `GroupNameFormat` was changed from "feeds the versioned OpenAPI group" to "names each version's explorer group", because no per-version OpenAPI document set exists at v1.221.0.* +- *`ApiParameterDescriptorBackfillProvider` (`Source/Presentation/MMCA.Common.API/OpenApi/ApiParameterDescriptorBackfillProvider.cs:43`, `IApiDescriptionProvider`), fills a placeholder only where MVC left `ParameterDescriptor` null via `??=` (`:65`). `AddApiParameterDescriptorBackfill()` is called from both `AddCommonApiVersioning` (`WebApplicationBuilderExtensions.cs:54`) and `AddCommonOpenApi` (`:97`; method at `:95`, doc at `:81-94`), both delegating to the private `TryAddEnumerable` helper at `:118-120`. Added in v1.146.0; the 500-from-`/openapi/{documentName}.json` rationale is ADR-046 (`Website/docs-src/adr/046-http-api-versioning.md:105-115`), and the "Since v1.217.0 MMCA.Common no longer references `Asp.Versioning.OpenApi`; the guard stays" sentence is at `:116-117`. Package proof: `MMCA.Common/Directory.Packages.props:14` (`Asp.Versioning.Mvc`) and `:20` (`Asp.Versioning.Mvc.ApiExplorer`), no `Asp.Versioning.OpenApi` entry. The article body was changed this run so the dereference is told as the past failure it is, not as a current dependency.* +- *`MapCommonOpenApi` (`Source/Presentation/MMCA.Common.API/Startup/Endpoints/OpenApiEndpointExtensions.cs:60`; the previous ledger's doubled `Startup/Endpoints/Startup/Endpoints/` path does not exist): `DefaultDocumentName = "v1"` (`:28`), the `!app.Environment.IsProduction()` guard (`:62`), the throw when no keyed `IOpenApiDocumentProvider` named `v1` is registered (`:65-71`), and `app.MapOpenApi().AllowAnonymous()` (`:74`); the AV0030 "Missing WithDocumentPerVersion" suppression is at `:56-59` with the justification that `Asp.Versioning.OpenApi` is not referenced. `AddCommonOpenApi` registers no document and only configures the host-registered ones (doc `WebApplicationBuilderExtensions.cs:81-94`, method `:95`, ADR-115 transformers `:102-106`). Host pairing example: ADC Conference `services.AddOpenApi()` / `services.AddCommonOpenApi()` / `app.MapCommonOpenApi()` at `MMCA.ADC/Source/Services/MMCA.ADC.Conference.Service/Program.cs:315`, `:316`, `:449`; Store Catalog at `MMCA.Store/Source/Services/MMCA.Store.Catalog.Service/Program.cs:193`, `:194`, `:327`. ADR-046 records this as its 2026-10-01 v1.217.0 revision (`046-http-api-versioning.md:19-21`, body `:231-260`) and the trade-off "The OpenAPI document is dev/CI only, and there is one: `v1`" at `:159-168`. The earlier article claim (`MapOpenApi().WithDocumentPerVersion()`, one document per discovered version) was DRIFTED and is replaced in the fourth trade-off bullet and in "What we covered".* +- *Committed build-time documents (UNVERIFIABLE in the audit, now proven and added): ADC commits four (`MMCA.ADC/Source/Services/{Conference,Engagement,Identity,Notification}.Service/openapi/.json`, generated by the `MmcaGenerateOpenApiDocument` target at `MMCA.ADC/Directory.Build.props:200`), Store commits three (`MMCA.Store/Source/Services/{Catalog,Identity,Sales}.Service/openapi/.json`); the "OpenAPI documents are current" step is `MMCA.ADC/.github/workflows/deploy.yml:305` (prints "All 4" at `:320`) and `MMCA.Store/.github/workflows/deploy.yml:287` ("All 3" at `:303`). ADR-046 revisions 2026-09-22 and 2026-09-25 at `:16-18`, body from `:170`. The committed Conference document has `"/ServiceInfo"` at line 8 and zero `ServiceInfoV2Response` occurrences (Catalog likewise zero), which is the basis for "not a place the `2.0` shape is asserted". Nothing pins the document set beyond `v1`: `OpenApiContractTestsBase.OpenApiDocumentPath` defaults to `/openapi/v1.json` (`Source/Hosting/MMCA.Common.Testing/Conformance/OpenApiContractTestsBase.cs:31`) and the framework baseline fetches that same document (`MMCA.Common/Tests/Presentation/MMCA.Common.API.Tests/OpenApi/OpenApiBaselineTests.cs:54`).* +- *`ServiceInfoControllerBase` (`Source/Presentation/MMCA.Common.API/Controllers/ServiceInfoControllerBase.cs:30`); `Supported`/`Deprecated` arrays (`:32-33`); `GetV1` `[MapToApiVersion("1.0")]` (`:40`) returning `ServiceInfoResponse` (record `:51`); `GetV2` `[MapToApiVersion("2.0")]` (`:46`) returning the `ServiceInfoV2Response` superset (record `:54`). Read-only: both actions are `[HttpGet]` (`:39`, `:45`), no write verb; the base carries no `[AllowAnonymous]`. ADR-046 anonymity sentence at `:81-82`.* +- *`ServiceInfoVersioningContractTestsBase` (`Source/Hosting/MMCA.Common.Testing/Conformance/ServiceInfoVersioningContractTestsBase.cs:20`); v1.0 asserts `api-deprecated-versions` (`:39-41`); v2.0 asserts `api-supported-versions` (`:55-57`); reads `/ServiceInfo` with the `api-version` header (`:63-64`). Subclassed on exactly two hosts: `MMCA.ADC/Tests/Integration/MMCA.ADC.Conference.IntegrationTests/Contract/ApiVersioningTests.cs:14-15` and `MMCA.Store/Tests/Integration/MMCA.Store.Catalog.IntegrationTests/Contract/ApiVersioningTests.cs:15-16`. ADR-058 counts seven contract bases (`Website/docs-src/adr/058-runtime-conformance-suites-as-a-package.md:29`).* +- *Per-host subclasses: ADC `ServiceInfoController` `[AllowAnonymous]` (`:17`), `[ApiVersion("1.0", Deprecated = true)]` (`:18`), `[ApiVersion("2.0")]` (`:19`), `ServiceName => "Conference"` (`:23`) in `MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.API/Controllers/ServiceInfoController.cs`; Store mirror `MMCA.Store/Source/Modules/Catalog/MMCA.Store.Catalog.API/Controllers/ServiceInfoController.cs:17,18,19,23` with `"Catalog"`. `EntityControllerBase` declares `[ApiVersion("1.0")]` at `MMCA.Common/Source/Presentation/MMCA.Common.API/Controllers/EntityControllerBase.cs:33`.* +- *The non-inheritance caveat is recorded by ADR-036 for ADC's sealed `OAuthController` (`Website/docs-src/adr/036-external-oauth-login.md:144-146`); ADR-046 carries it at `:150-152`, the "application controllers declare `1.0` today" paragraph at `:127-129`, the host-adoption bullet at `:118-125`, ADR-015 posture at `:143-144`.* +- *Host adoption of `AddCommonApiVersioning`, all eight call sites re-read on 2026-10-02 (Grep per repo): ADC Conference (`Source/Services/MMCA.ADC.Conference.Service/Program.cs:217`), Identity (`MMCA.ADC.Identity.Service/Program.cs:150`), Engagement (`MMCA.ADC.Engagement.Service/Program.cs:147`), Notification (`MMCA.ADC.Notification.Service/Program.cs:136`); Store Catalog (`MMCA.Store.Catalog.Service/Program.cs:140`), Sales (`MMCA.Store.Sales.Service/Program.cs:147`), Identity (`MMCA.Store.Identity.Service/Program.cs:134`); Helpdesk (`Source/Hosts/MMCA.Helpdesk.Web/Program.cs:35`). Seven of the eight anchors moved since 2026-09-19 (was 203/152/148/140/141/148/135); still eight hosts. ADR-046's own host anchors (`:118-125`, for example Conference `:218`) are off by one or two from these; that is ADR drift, not edited here.* +- *The code block is condensed from `WebApplicationBuilderExtensions.cs:37-57` (comments shortened, body faithful, not byte-for-byte). Anchor facts: 131 accepted ADRs 001-131 (`Website/docs-src/adr/README.md:6`), framework v1.221.0 (`MMCA.Common/FACTS.md:4,14`), 22 published packages (`MMCA.Common/FACTS.md:19`); the article body states none of these counts. Was 125/001-125, v1.205.0, 19 in the 2026-09-19 ledger.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/i18n-and-theming.md b/docs-src/articles/i18n-and-theming.md index 7213d423..0a83c045 100644 --- a/docs-src/articles/i18n-and-theming.md +++ b/docs-src/articles/i18n-and-theming.md @@ -4,7 +4,8 @@ > Status: grounded in `Website/docs-src/adr/027-multi-locale-i18n.md`, `Website/docs-src/adr/028-dark-theme-mode.md`, > `MMCA.Common.Shared/Globalization/SupportedCultures.cs`, > `MMCA.Common.API/Localization/ErrorLocalizer.cs`, -> `MMCA.Common.UI/Theme/ThemeService.cs`. No em dashes. +> `MMCA.Common.UI/Theme/ThemeService.cs`, +> `MMCA.Common.UI/Pages/Auth/Login.razor`. No em dashes. **Subtitle:** A user picking Spanish and a user picking dark mode are doing the same thing: stating a per-user preference that has to survive a page refresh, three render modes, and a trip across the Gateway. So they should share one persistence path, not two. Here is how a culture choice and a theme choice ride the same cookie, the same profile column, and the same login reconciliation. @@ -30,15 +31,15 @@ Theme has the identical shape. Different runtimes, same need to agree before fir Supported cultures are an explicit allowlist, not an open-ended capability. `SupportedCultures` (`MMCA.Common.Shared/Globalization/SupportedCultures.cs:9`) holds `Default = "en-US"` (`:12`) and `All = [Default, "es"]` (`:18`), with an `IsSupported` guard (`:35`) that matches case-insensitively. That one list is the single allowlist the request-localization options, the culture switcher, and the profile guard all read, so they cannot drift apart. Adding a locale is adding one entry here plus the translated resource files, not new infrastructure. -Strings are externalized to `.resx` co-located with the type that uses them and looked up through `IStringLocalizer`, so a view asks for `L["Common.Button.Save"]` rather than carrying English inline. That is the ordinary part. The interesting part is the errors, because errors are produced on the server and a translated client cannot fix them. +Strings are externalized to `.resx` co-located with the type that uses them and looked up through `IStringLocalizer`, so a view asks for `L["Common.Button.Cancel"]` (`MMCA.Common.UI/Resources/SharedResource.resx:268`, with its Spanish sibling at the same line of `SharedResource.es.resx`) rather than carrying English inline. That is the ordinary part. The interesting part is the errors, because errors are produced on the server and a translated client cannot fix them. The Result pattern (ADR-013) already gives every `Error` a stable machine `Code`. That turns server-side error localization into a keyed lookup instead of a rewrite. `IErrorLocalizer` (`MMCA.Common.API/Localization/IErrorLocalizer.cs:9`) declares a single method, `Localize(string code, string fallbackMessage)` (`:17`). The default implementation, `ErrorLocalizer` (`MMCA.Common.API/Localization/ErrorLocalizer.cs:11`), walks an ordered set of registered `ErrorResourceSource`s (`ErrorResourceSource.cs:12`), Common first then modules, looks the code up against the current UI culture, and returns the original English message untouched when no source has the key (`ErrorLocalizer.cs:32`). An untranslated code degrades gracefully to English; it never throws. -This happens at one place, the single Result-to-ProblemDetails projection point. `ErrorHttpMapping.BuildErrorsExtension` (`MMCA.Common.API/Middleware/ErrorHttpMapping.cs:61`) projects each error, and only the human-readable `Message` is run through the localizer, keyed by `Code` (`:65`); the machine fields (`Code`, `Type`, `Source`, `Target`) stay verbatim so clients can still branch on them. A `null` localizer leaves the English message unchanged. Domain code, handlers, and `Result` signatures never change. They stay culture-agnostic. Only the edge speaks a culture. +This happens at one place, the single Result-to-ProblemDetails projection point. `ErrorHttpMapping.BuildErrorsExtension` (`MMCA.Common.API/Middleware/ErrorHttpMapping.cs:62`) projects each error, and only the human-readable `Message` is run through the localizer, keyed by `Code` (`:66`); the machine fields (`Code`, `Type`, `Source`, `Target`) stay verbatim so clients can still branch on them. A `null` localizer leaves the English message unchanged. Domain code, handlers, and `Result` signatures never change. They stay culture-agnostic. Only the edge speaks a culture. -One cookie ties the runtimes together. The UI hosts run `UseRequestLocalization` over the `SupportedCultures` list with a cookie provider, so the static prerender already renders in the right culture. The WASM client reads the same cookie on startup through `MmcaCultureBootstrap.SetBrowserCultureAsync` (`MMCA.Common.UI/Services/Culture/MmcaCultureBootstrap.cs:22`) and sets the thread culture before the app runs, so prerender and hydration agree. And `CultureDelegatingHandler` (`MMCA.Common.UI/Services/Culture/CultureDelegatingHandler.cs:13`) stamps the active culture onto every outgoing API call as an `Accept-Language` header (`:24`), which is the channel that makes the cross-origin services return their errors in the chosen language. The `CultureSwitcher` component (`MMCA.Common.UI/Globalization/CultureSwitcher.razor:9`) iterates `OfferedCultures` (`:13`) to render the menu: `SupportedCultures.All` plus a Development-only pseudo-localization locale (`:24-27`, ADR-027 §8) that surfaces hard-coded strings and truncation and never ships to production. +One cookie ties the runtimes together. The UI hosts run `UseRequestLocalization` over the `SupportedCultures` list with a cookie provider, so the static prerender already renders in the right culture. The WASM client reads the same cookie on startup through `MmcaCultureBootstrap.SetBrowserCultureAsync` (`MMCA.Common.UI/Services/Culture/MmcaCultureBootstrap.cs:22`) and sets the thread culture before the app runs, so prerender and hydration agree. And `CultureDelegatingHandler` (`MMCA.Common.UI/Services/Culture/CultureDelegatingHandler.cs:13`) stamps the active culture onto every outgoing API call as an `Accept-Language` header (`:24`), which is the channel that makes the cross-origin services return their errors in the chosen language. The `CultureSwitcher` component (`MMCA.Common.UI/Globalization/CultureSwitcher.razor:9`) iterates `OfferedCultures` (`:13`) to render the menu: `SupportedCultures.All` plus a Development-only pseudo-localization locale (`:24-27`, ADR-027 Decision 8) that surfaces hard-coded strings and truncation and never ships to production. -The runtime channel is the cookie; the cross-device source of truth is the profile. A user's chosen culture persists to the Identity `User` aggregate as `PreferredCulture` (in the consumer apps' Identity module, for example `MMCA.ADC.Identity.Domain/Users/User.cs:108`, validated by `UserInvariants.EnsurePreferredCultureIsValid`, invoked inside `UpdatePreferences` at `:333`). On login the cookie is set from the profile; an authenticated switch writes both; an anonymous user gets only the cookie. +The runtime channel is the cookie; the cross-device source of truth is the profile. A user's chosen culture persists to the Identity `User` aggregate as `PreferredCulture` (in the consumer apps' Identity module, for example `MMCA.ADC.Identity.Domain/Users/User.cs:108`, validated by `UserInvariants.EnsurePreferredCultureIsValid`, invoked inside `UpdatePreferences` at `:333`). On login the cookie is set from the profile: `ApplyStoredPreferencesAndNavigateAsync` (`MMCA.Common.UI/Pages/Auth/Login.razor:265`) reads the stored preferences through `IUserPreferenceReader` (`:267`), applies the theme through `ThemeService.SetDarkModeAsync` (`:271`), and, when the stored culture differs from the current one, hands it to `ICultureApplier.ApplyAsync` (`:280`), which on the web head round-trips `/culture/set` to write the cookie. An authenticated switch writes both; an anonymous user gets only the cookie. ### Theme, riding the same rails @@ -48,7 +49,7 @@ Now the payoff. The theme toggle does not build any of that again. `ThemeService` (`MMCA.Common.UI/Theme/ThemeService.cs:17`) owns the preference, and it persists to the exact same kind of store i18n uses: a non-HttpOnly cookie plus localStorage, written through `theme.js`. `InitializeAsync` (`:35`) reads the stored value and, only when nothing is stored, falls back to the OS preference (`:46`). `SetDarkModeAsync` (`:54`) sets the field, persists, and raises `OnChange` (`:29`) so the app-bar toggle and the layout stay in sync; `ToggleAsync` (`:63`) just flips it. The JavaScript module is tiny: `get()` reads the cookie then localStorage (`theme.js:5`), `set()` writes a year-long `samesite=lax` cookie plus localStorage (`:23`), and `systemPrefersDark()` is one `matchMedia('(prefers-color-scheme: dark)')` call (`:33`). -The toggle ships in the shared `MainLayout` right next to the culture switcher, both in the app-bar `appbar-icon-actions` slot (`MainLayout.razor:33-36`), so every consuming host gets both controls with no per-host wiring. `ThemeToggle` (`MMCA.Common.UI/Theme/ThemeToggle.razor:7`) calls `ThemeService.ToggleAsync()` and then best-effort writes the choice to the signed-in user's profile through an optional `IUserPreferenceWriter` (`:23`), which is a no-op when anonymous. The profile column is `User.PreferredTheme` (`MMCA.ADC.Identity.Domain/Users/User.cs:111`), folded into the *same* migration and governed by the *same* login-reconciliation rule as `PreferredCulture`. One migration, one persistence model, two preferences. +The toggle ships in the shared `MainLayout` right next to the culture switcher, both in the app-bar `appbar-icon-actions` slot (`MainLayout.razor:33-36`), and the pair is placed again in the `NavMenu` quick-actions row (`MMCA.Common.UI/Layout/NavMenu.razor:44-45`), so every consuming host gets both controls with no per-host wiring. `ThemeToggle` (`MMCA.Common.UI/Theme/ThemeToggle.razor:7`) calls `ThemeService.ToggleAsync()` and then best-effort writes the choice to the signed-in user's profile through an optional `IUserPreferenceWriter` (`:23`), which is a no-op when anonymous. The profile column is `User.PreferredTheme` (`MMCA.ADC.Identity.Domain/Users/User.cs:111`), folded into the *same* migration and governed by the *same* login-reconciliation rule as `PreferredCulture`. One migration, one persistence model, two preferences. ## The pipeline, in one sketch @@ -84,7 +85,7 @@ public sealed class ThemeService(IJSRuntime jsRuntime) -@* MmcaThemeProviders.razor: the two-way theme binding lives here now, not in MainLayout. +@* MmcaThemeProviders.razor: the two-way theme binding lives here, not in MainLayout. Theme is an optional parameter defaulting to MMCATheme.Instance. *@ ``` @@ -95,10 +96,10 @@ A culture choice and a theme choice enter the same way (a control in the same sl - **Coverage is two locales, en-US and Spanish, full stop.** Spanish (`es`) is the one added locale (`SupportedCultures.cs:18`). The mechanism is built to scale (adding a locale is one allowlist entry plus the translated `.resx`), but the shipped coverage today is exactly two. This article does not claim more, and you should not either. - **The translation gap is gated, not hoped for.** A new English string cannot ship without its Spanish sibling: `ResourceTranslationsAreComplete` (`MMCA.Common.Testing.Architecture/Rules/Ui/ArchitectureRules.Localization.cs:23`, run as `LocalizationResourceTests`) fails the build when any base `.resx` under `Source/` lacks a complete, non-empty translation for a required culture. The rule takes the required-culture list, so it is repo-agnostic and vacuous for a single-locale repo. -- **Culture-less formatting is a build gate, not advice.** Accidentally calling `ToString()` on a date or number without a format provider is caught at compile time: `MA0076` is set to `error` severity in `.editorconfig` (`:592`), so a culture-less interpolation fails the build and must declare an explicit `IFormatProvider`. The posture is blocking: the gate fails, it does not warn. +- **Culture-less interpolation is a build gate, not advice.** Interpolating a date or number into a string without a format provider is caught at compile time: `MA0076` (implicit culture-sensitive `ToString` in interpolation, `.editorconfig:589`) is set to `error` severity (`:592`), so a culture-less interpolation fails the build and must declare an explicit `IFormatProvider`. The posture is blocking: the gate fails, it does not warn. The gate is scoped to interpolation: Meziantou's general missing-provider rule `MA0011` is switched off (`:542`), so an explicit `ToString()` call is left to the .NET analyzers, which run with `AnalysisMode` `All` and `CodeAnalysisTreatWarningsAsErrors` (`MMCA.Common/Directory.Build.props:12-13`). - **The no-flash SSR bootstrap is wired for locale but not yet for theme.** This is the one honest asymmetry. Locale is flash-free because the server reads the cookie at prerender through `UseRequestLocalization`. Theme is not: `ThemeService.InitializeAsync` runs from `OnAfterRenderAsync(firstRender)` and deliberately does not run during SSR prerender (`ThemeService.cs:35`, and the doc-comment at `:11-14`), so the bound `IsDarkMode` is corrected just after hydration. The cookie is non-HttpOnly precisely so a server prerender could read it, but the server-side emit (a `data-theme` attribute or inline head script written from the cookie before Blazor hydrates) is not yet wired for theme (ADR-028, Decision 3). A brief wrong-theme flash on first paint is therefore currently possible, and closing it is tracked as follow-up. - **Superseding ADR-011 changes the scorecard, not the scope of the world.** ADR-027 supersedes ADR-011, so multi-locale is in scope and §27 Internationalization is a scored category rather than N/A. That is a real status, and it is still two locales. Do not read "in scope" as "fully internationalized." -- **MudBlazor's own built-in component chrome is localized too.** `ResxMudLocalizer` (`MMCA.Common.UI/Globalization/ResxMudLocalizer.cs:17`), a `MudLocalizer` over the `MudTranslations` resource pair (`MMCA.Common.UI/Resources/MudTranslations.resx` + `MudTranslations.es.resx`, en and es entries for the MudBlazor built-in keys), is DI-registered in `AddUIShared` (`MMCA.Common.UI/DependencyInjection.cs:79`), so the pager, filter menus, pickers, and close buttons follow the active culture. Unknown keys fall back to MudBlazor's built-in English and `en-US` deliberately keeps the built-ins. ADR-027 records this wiring as part of the shipped i18n surface (Decision 9). +- **MudBlazor's own built-in component chrome is localized too.** `ResxMudLocalizer` (`MMCA.Common.UI/Globalization/ResxMudLocalizer.cs:17`), a `MudLocalizer` over the `MudTranslations` resource pair (`MMCA.Common.UI/Resources/MudTranslations.resx` + `MudTranslations.es.resx`, en and es entries mirroring MudBlazor's own `LanguageResource` keys as of v9.6.0 per `MMCA.Common.UI/Resources/MudTranslations.cs:7-8`, while the pinned package is MudBlazor 9.11.0 at `MMCA.Common/Directory.Packages.props:176`), is DI-registered in `AddUIShared` (`MMCA.Common.UI/DependencyInjection.cs:79`), so the pager, filter menus, pickers, and close buttons follow the active culture. `InvariantMudLocalizationInterceptor` (`MMCA.Common.UI/Globalization/InvariantMudLocalizationInterceptor.cs:37`, registered at `DependencyInjection.cs:88`) decides the fallback: an English culture such as `en-US` deliberately keeps the built-ins (`:49-57`), and a key the pair does not hold falls back to MudBlazor's built-in English (`:59-60`). ADR-027 records this wiring as part of the shipped i18n surface (Decision 9). - **Per-user persistence adds a column to the consumer's Identity `User`.** The framework supplies the cookie, the localizer, the theme service, the `IUserPreferences` contract (`MMCA.Common.Domain/Auth/IUserPreferences.cs:13,16`) and the shared `CommonInvariants.EnsurePreferredCultureIsValid`/`EnsurePreferredThemeIsValid` guards (`MMCA.Common.Domain/Invariants/CommonInvariants.cs:142,158`); the `PreferredCulture`/`PreferredTheme` columns live on each app's `User` aggregate (`MMCA.ADC.Identity.Domain/Users/User.cs:108,111`), with a profile-edit surface to set them. It is one folded migration, but it is a column the consumer owns, not free. None of these argue against the design. They argue for finishing it: wire the theme prerender read, keep the translation gate green, and be clear-eyed that "internationalized" here means en-US and Spanish, persisted correctly, not every locale on earth. @@ -128,6 +129,6 @@ The takeaway: **a culture switch and a theme switch are the same problem wearing *Tags: .NET, Blazor, C Sharp, Software Architecture, Programming* -*Notes: verified this run against MMCA.Common v1.205.0 source. i18n: `SupportedCultures` (`Source/Core/MMCA.Common.Shared/Globalization/SupportedCultures.cs:9`, `Default="en-US"` `:12`, `All=[Default,"es"]` `:18`, `PseudoLocale="qps-Ploc"` `:28`, `IsSupported` `:35`); `IErrorLocalizer` (`Source/Presentation/MMCA.Common.API/Localization/IErrorLocalizer.cs:9`, `Localize` `:17`); `ErrorLocalizer` (`.../ErrorLocalizer.cs:11`, English fallback `:32`); `ErrorResourceSource` (`.../ErrorResourceSource.cs:12`); `ErrorHttpMapping.BuildErrorsExtension` (`.../Middleware/ErrorHttpMapping.cs:61`, localizes `Message` keyed by `Code` `:65`); `CultureDelegatingHandler` (`.../UI/Services/Culture/CultureDelegatingHandler.cs:13`, reads `CurrentUICulture.Name` `:20`, writes the `Accept-Language` header `:24`); `MmcaCultureBootstrap.SetBrowserCultureAsync` (`.../UI/Services/Culture/MmcaCultureBootstrap.cs:22`); `CultureSwitcher` (`.../UI/Globalization/CultureSwitcher.razor:9`, iterates `OfferedCultures` `:13` = `SupportedCultures.All` plus the Development-only `PseudoLocale`, `:24-27`); MudBlazor built-in chrome localized via `ResxMudLocalizer` (`.../UI/Globalization/ResxMudLocalizer.cs:17`, a `MudLocalizer` over `IStringLocalizer`) backed by `MudTranslations.resx` + `MudTranslations.es.resx` (`.../UI/Resources/`), DI-registered `TryAddTransient()` at `.../UI/DependencyInjection.cs:79`, inside `AddUIShared` (`:36`). theme: `ThemeService` (`.../UI/Theme/ThemeService.cs:17`, `OnChange` `:29`, `InitializeAsync` `:35`, OS fallback `:46`, `SetDarkModeAsync` `:54`, `ToggleAsync` `:63`, SSR caveat in the class doc-comment `:11-14`); `theme.js` (`.../UI/wwwroot/theme.js`, `get` `:5`, `set` cookie+localStorage `:23`, `systemPrefersDark` `:33`); `MMCATheme` (`.../UI/Theme/MMCATheme.cs:9`, `PaletteLight` `:13`, `PaletteDark` `:56`); `MainLayout` (`.../UI/Layout/MainLayout.razor`, renders `` `:14`, both controls `CultureSwitcher`/`ThemeToggle` `:33-36`; MainLayout is 114 lines and has NO `OnAfterRenderAsync`); the provider two-way binding and the first-render init live in the dedicated `MmcaThemeProviders` component (`.../UI/Theme/MmcaThemeProviders.razor:12` ``, with `[Parameter] public MudTheme Theme { get; set; } = MMCATheme.Instance;` at `:34`; `OnInitialized` wires `ThemeService.OnChange` at `:39`; `OnAfterRenderAsync(bool firstRender)` init `:41-52` calling `ThemeService.InitializeAsync()` at `:46`); `ThemeToggle` (`.../UI/Theme/ThemeToggle.razor:7`, `IUserPreferenceWriter` `:23`). gates: `MA0076 = error` (`MMCA.Common/.editorconfig:592`); `ResourceTranslationsAreComplete` (`.../Testing.Architecture/Rules/Ui/ArchitectureRules.Localization.cs:23`), run as `LocalizationResourceTests` (`Tests/Architecture/MMCA.Common.Architecture.Tests/Ui/LocalizationResourceTests.cs:12`). framework-side preference contract: `IUserPreferences` (`Source/Core/MMCA.Common.Domain/Auth/IUserPreferences.cs:13,16`) and `CommonInvariants.EnsurePreferredCultureIsValid`/`EnsurePreferredThemeIsValid` (`.../Domain/Invariants/CommonInvariants.cs:142,158`); the columns themselves live in the consumer Identity module, e.g. `MMCA.ADC.Identity.Domain/Users/User.cs` (`PreferredCulture` `:108`, `PreferredTheme` `:111`), validated inside `User.UpdatePreferences` (`:330`) via `UserInvariants.EnsurePreferredCultureIsValid` invoked at `:333` / `EnsurePreferredThemeIsValid` at `:334`. ADR-027 supersedes ADR-011; ADR-028 reuses ADR-027's cookie/profile machinery and records the theme no-flash SSR read as not wired (Decision 3, verified this run: `ThemeService.InitializeAsync` runs from `MmcaThemeProviders.OnAfterRenderAsync(firstRender)` `MmcaThemeProviders.razor:41-52`, not during SSR). `MA0076` is error-severity (a build gate) and translation coverage is fitness-gated; the MudBlazor built-in-localization follow-up is CLOSED (2026-07-03, ADR-027 Decision 9 + Trade-offs entry `Website/docs-src/adr/027-multi-locale-i18n.md:246-249`), delivered by `ResxMudLocalizer` over the `MudTranslations` en+es pair. Two claims rest on ADRs rather than on source read this run, and the body was left as the ADRs state it: the completeness of the `MudTranslations` pair against MudBlazor's own key list (`027-multi-locale-i18n.md:157-158`, keys not enumerated here) and the login reconciliation that sets the cookie from the profile (`Website/docs-src/adr/028-dark-theme-mode.md:50-53`; no such code found in MMCA.Common or in the ADC consumer this run). The two code blocks are illustrative composition sketches condensed from source, not verbatim files. 2026-09-19 audit sweep: the UI project was reorganized into feature folders, so `CultureSwitcher.razor` moved to `UI/Globalization/`, `MmcaCultureBootstrap.cs` and `CultureDelegatingHandler.cs` to `UI/Services/Culture/`, and `ThemeService.cs`, `ThemeToggle.razor` and `MmcaThemeProviders.razor` to `UI/Theme/`, while `ArchitectureRules.Localization.cs` moved under `Rules/Ui/`; every anchor above was re-pinned against those paths (`ErrorHttpMapping` `:47`->`:61` and `:51`->`:65`, `PaletteDark` `:48`->`:56`, `MmcaThemeProviders` `:11`->`:12`, `:22`->`:34`, `:27`->`:39`, `:29-38`->`:41-52`, `:34`->`:46`, `ThemeService` +1 throughout, `DependencyInjection` `:55`->`:79`, ADC `User.cs` `:100,103`->`:108,111` and `:288`/`:291`/`:292`->`:330`/`:333`/`:334`, the ADR-027 trade-off entry `:196-199`->`:246-249`, MainLayout 111->114 lines).* +*Notes: 2026-10-02 refresh, verified against MMCA.Common v1.221.0 source (latest tag per `git describe`). i18n: `SupportedCultures` (`Source/Core/MMCA.Common.Shared/Globalization/SupportedCultures.cs:9`, `Default="en-US"` `:12`, `All=[Default,"es"]` `:18`, `PseudoLocale="qps-Ploc"` `:28`, `IsSupported` `:35`); example resource key `Common.Button.Cancel` (`Source/Presentation/MMCA.Common.UI/Resources/SharedResource.resx:268`, es sibling `SharedResource.es.resx:268`; no `Common.Button.Save` key exists, matching the ADR-027 Revision 2026-10-01 at `027-multi-locale-i18n.md:261-262`); `IErrorLocalizer` (`Source/Presentation/MMCA.Common.API/Localization/IErrorLocalizer.cs:9`, `Localize` `:17`); `ErrorLocalizer` (`.../ErrorLocalizer.cs:11`, English fallback `:32`); `ErrorResourceSource` (`.../ErrorResourceSource.cs:12`); `ErrorHttpMapping.BuildErrorsExtension` (`.../Middleware/ErrorHttpMapping.cs:62`, localizes `Message` keyed by `Code` `:66`); `CultureDelegatingHandler` (`.../UI/Services/Culture/CultureDelegatingHandler.cs:13`, `Accept-Language` `:24`); `MmcaCultureBootstrap.SetBrowserCultureAsync` (`.../UI/Services/Culture/MmcaCultureBootstrap.cs:22`); `CultureSwitcher` (`.../UI/Globalization/CultureSwitcher.razor:9`, `OfferedCultures` `:13`, Development-only pseudo locale `:24-27`, ADR-027 Decision 8 at `027-multi-locale-i18n.md:79,93`); login reconciliation `Login.ApplyStoredPreferencesAndNavigateAsync` (`.../UI/Pages/Auth/Login.razor:265-284`: `IUserPreferenceReader.GetAsync` `:267`, `ThemeService.SetDarkModeAsync` `:271`, `ICultureApplier.ApplyAsync` `:280`, injections `:18-20`). MudBlazor chrome: `ResxMudLocalizer` (`.../UI/Globalization/ResxMudLocalizer.cs:17`) registered `TryAddTransient()` at `.../UI/DependencyInjection.cs:79` inside `AddUIShared` (`:36`); `MudTranslations` pair (`.../UI/Resources/MudTranslations.resx` + `.es.resx`) mirrors MudBlazor `LanguageResource` keys as of v9.6.0 (`MudTranslations.cs:7-8`) against the MudBlazor 9.11.0 pin (`MMCA.Common/Directory.Packages.props:176`); fallback decided by `InvariantMudLocalizationInterceptor` (`.../UI/Globalization/InvariantMudLocalizationInterceptor.cs:37`, English check `:49-57`, `ResourceNotFound` fallback `:59-60`, registered `DependencyInjection.cs:88`). theme: `ThemeService` (`.../UI/Theme/ThemeService.cs:17`, `OnChange` `:29`, `InitializeAsync` `:35`, OS fallback `:46`, `SetDarkModeAsync` `:54`, `ToggleAsync` `:63`, SSR caveat doc-comment `:11-14`); `theme.js` (`.../UI/wwwroot/theme.js`, `get` `:5`, `set` `:23`, `systemPrefersDark` `:33`); `MMCATheme` (`.../UI/Theme/MMCATheme.cs:9`, `PaletteLight` `:13`, `PaletteDark` `:56`); `MainLayout` (`.../UI/Layout/MainLayout.razor`, 114 lines, `` `:14`, `CultureSwitcher`/`ThemeToggle` `:33-36`, no `OnAfterRenderAsync`); second placement in `NavMenu` (`.../UI/Layout/NavMenu.razor:44-45`); `MmcaThemeProviders` (`.../UI/Theme/MmcaThemeProviders.razor:12` binding, `Theme` parameter `:34`, `OnInitialized` `:39`, `OnAfterRenderAsync` `:41-52` calling `InitializeAsync` `:46`); `ThemeToggle` (`.../UI/Theme/ThemeToggle.razor:7`, `IUserPreferenceWriter` `:23`). gates: `MA0076` (implicit culture-sensitive ToString in interpolation, `MMCA.Common/.editorconfig:589`) `= error` `:592`; `MA0011` `= none` `:542`; `AnalysisMode` `All` + `CodeAnalysisTreatWarningsAsErrors` (`MMCA.Common/Directory.Build.props:12-13`), no `CA1305` override in `.editorconfig`; `ResourceTranslationsAreComplete` (`.../Testing.Architecture/Rules/Ui/ArchitectureRules.Localization.cs:23`) run as `LocalizationResourceTests` (`Tests/Architecture/MMCA.Common.Architecture.Tests/Ui/LocalizationResourceTests.cs:12`). preference contract: `IUserPreferences` (`Source/Core/MMCA.Common.Domain/Auth/IUserPreferences.cs:13,16`), `CommonInvariants.EnsurePreferredCultureIsValid`/`EnsurePreferredThemeIsValid` (`.../Domain/Invariants/CommonInvariants.cs:142,158`); consumer columns `MMCA.ADC.Identity.Domain/Users/User.cs` (`PreferredCulture` `:108`, `PreferredTheme` `:111`, `UpdatePreferences` `:330`, invariants `:333`/`:334`), one migration `20260627221640_AddUserPreferences.cs:14`. ADR-027 (`027-multi-locale-i18n.md:1,4`) supersedes ADR-011 (`011-single-locale-i18n.md:4`); rubric category 27 scored (`common-ArchitectureScorecard.md:104`). ADR-028 Decision 3 (`028-dark-theme-mode.md:38`): theme no-flash SSR read not wired; `mmca_theme` is read only client-side (`theme.js:3`). MudBlazor follow-up closed per ADR-027 Trade-offs `027-multi-locale-i18n.md:252-255`, Decision 9 text `:158-160`. The two code blocks are illustrative composition sketches, not verbatim files. Changes this run: `ErrorHttpMapping` `:61`->`:62`, `:65`->`:66`; example key `Common.Button.Save` (nonexistent) -> `Common.Button.Cancel`; MA0076 scoped to interpolation (it does not cover a bare `ToString()`); `MudTranslations` coverage qualified to the v9.6.0 key set; login reconciliation now cited from source (`Login.razor:265-284`) instead of resting on ADR-028; `NavMenu` placement added; fallback attributed to `InvariantMudLocalizationInterceptor`; ADR-027 cites `:246-249`->`:252-255`, `:157-158`->`:158-160`; "ADR-027 section 8" -> "Decision 8". Side flag (source, not edited): the doc-comment at `ArchitectureRules.Localization.cs:10` still calls MA0076 advisory, contradicting `.editorconfig:592`.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/idempotency-attribute.md b/docs-src/articles/idempotency-attribute.md index 7e519be3..3f33047c 100644 --- a/docs-src/articles/idempotency-attribute.md +++ b/docs-src/articles/idempotency-attribute.md @@ -2,6 +2,8 @@ > Series: MMCA.Common · Article #18 (deep-dive) · Pillar P2 · Group G12 · Rubric §9,§29 · ADR-017 · > Status: grounded in `MMCA.Common/Source/Presentation/MMCA.Common.API/Idempotency/IdempotencyFilter.cs`, +> `MMCA.Common/Source/Presentation/MMCA.Common.API/Idempotency/IdempotencyRecord.cs`, +> `MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/Inbox/EfInboxStore.cs`, > `Website/docs-src/adr/017-request-idempotency.md`, `Website/docs-src/onboarding/group-12-api-hosting-mapping.md`, > and `Website/docs-src/governance/common-ArchitectureScorecard.md` (§6, §9, §10, §29). No em dashes. @@ -54,9 +56,9 @@ The runtime contract is: 1. The client supplies an `Idempotency-Key` header (a value it generates per logical request, the same value across its own retries). -2. On the **first** request with a given key, the action runs, and its response (status code plus JSON - body) is serialized into an `IdempotencyRecord`, together with a SHA-256 hash of the request body - that produced it, and cached. +2. On the **first** request with a given key, the action runs, and its response (status code, JSON body, + and the `Location` and `ETag` headers a client may act on) is serialized into an `IdempotencyRecord`, + together with a SHA-256 hash of the request body that produced it, and cached. 3. On a subsequent request with the same key **and the same body**, within the retention window, the cached response is replayed verbatim, with an extra header `X-Idempotent-Replay: true`, and **the action does not run again**. @@ -66,8 +68,9 @@ The runtime contract is: 5. No `Idempotency-Key` header means the action just runs normally. Idempotency is opt-in per request. The cache window defaults to **24 hours** (bound from an `IdempotencySettings` section, range-guarded to a -one-week maximum, validated at startup). A first-call `201 Created` replays as a `201`, not a generic -`200`, because the record captures the original status code as well as the body. +one-week maximum, validated at startup). A first-call `201 Created` replays as a `201` that still points at +the created resource, not as a generic `200`, because the record captures the original status code and its +`Location` header as well as the body. Binding the body to the key is why the filter runs at two pipeline stages rather than one. It is an `IAsyncResourceFilter` as well as an `IAsyncActionFilter`: the resource stage runs before model binding, @@ -85,8 +88,10 @@ hash-less record and therefore no path that replays without checking the payload One thing that contract does not say out loud: the client's key is not the cache key. The filter derives `idempotency:{SHA-256(subject | method | route template | client key)}`, where the subject is the caller's -`user_id` claim or, for an unauthenticated call, `anon:{remote address}`. That is a security property before -it is anything else. Keying on the bare client value makes the key space global: two callers who happen to +user id (the `sub` claim, falling back to the mapped name-identifier claim) or, for an unauthenticated call, +`anon:{remote address}` (`anon:unknown` when there is no address). The four parts are joined with a newline, +which none of them can contain, so no value can be crafted to forge a different tuple. That is a security +property before it is anything else. Keying on the bare client value makes the key space global: two callers who happen to pick the same value share an entry, so one user's serialized response body gets replayed to another, and because services can share a single cache instance the collision reaches across endpoints and across services too. Hashing also keeps the stored key bounded no matter what the client sends. @@ -166,8 +171,8 @@ body can represent. That is an `ObjectResult` (200/201/202 with a payload) or a such as the 204 from `NoContent()`, which stores an empty body and replays as a bare status code rather than as JSON with no content. Non-2xx results are deliberately not stored, because replaying a transient 500 for the whole retention window is worse than letting the retry actually execute. Redirects and file -results are skipped: the record carries a status code, a JSON body, and the hash of the request that -produced them, and nothing else.) +results are skipped: the record carries a status code, a JSON body, the `Location` and `ETag` headers, and +the hash of the request that produced them, and nothing else.) ## The same problem shows up on the broker, and the inbox is the matching mechanism @@ -189,8 +194,11 @@ genuinely idempotent inbox consumer (dedup by `MessageId` via `IInboxStore`): message the inbox already holds is skipped and acked, never reapplied. `TryBegin` also *stages* the inbox row, unsaved, in the scope's unit of work, so a handler that calls `SaveChangesAsync` on that same scope commits the row in the same transaction as its own mutations. A handler that throws has the - staged row abandoned before the rethrow, so the redelivery is not mistaken for a duplicate; a consume - that reaches the end calls `CompleteAsync(...)` to persist whatever is still unsaved. + staged row abandoned before the rethrow, so the redelivery is not mistaken for a duplicate, as long as + the row is still unsaved. If an earlier handler's save already committed it, the abandon cannot take it + back: the store logs that case, the redelivery is skipped as a duplicate, and the handlers that had not + yet run never run. A consume that reaches the end calls `CompleteAsync(...)` to persist whatever is + still unsaved. - The posture is resolved from the transport. `MessageBusSettings.EnableInbox` is a nullable bool left unset by default, and `IsInboxEnabled` reads that as on for a broker and off for the in-process provider, which has no redelivery to dedup. An explicit value wins in both directions: a host that sets @@ -199,11 +207,11 @@ genuinely idempotent inbox consumer (dedup by `MessageId` via `IInboxStore`): The retry half is wired too: every receive endpoint gets an exponential-backoff `UseMessageRetry` policy (`MessageBusSettings.RetryLimit`), and the consumer rethrows on handler failure so MassTransit applies it before dead-lettering. So the honest framing is: the HTTP write path is idempotent-by-attribute (the -scorecard credits the filter under §9 and §10, where §10 scores Implementation 9 on the strength of the -filter taking a distributed lock with the stripe as fallback, while §29 covers the Polly handlers and the -outbox's graceful degradation), and the broker consumer path dedups by `MessageId` by default on -any broker transport. The remaining discipline is treating the explicit opt-out as a decision with a cost, -and keeping handlers safe to repeat wherever the inbox resolves off. +scorecard credits the filter under §9 and §10, where the §10 row, scored Implementation 9, lists the +filter taking a distributed lock with the stripe as fallback among its evidence, while §29 covers the Polly +handlers and the outbox's graceful degradation), and the broker consumer path dedups by `MessageId` by +default on any broker transport. The remaining discipline is treating the explicit opt-out as a decision +with a cost, and keeping handlers safe to repeat wherever the inbox resolves off. ## Trade-offs, honestly @@ -220,8 +228,9 @@ and keeping handlers safe to repeat wherever the inbox resolves off. - **The window is bounded.** Replay works for the retention window (default 24h, max one week). A retry after the window expires re-executes. Size the window to your realistic retry horizon. - **Only successful, JSON-shaped responses replay.** A 2xx `ObjectResult` or a body-less 2xx - `StatusCodeResult` is cached. Failures are not, and neither are redirects or file results. Response - headers are not part of the record either, so a replayed `201` does not carry the original `Location`. + `StatusCodeResult` is cached. Failures are not, and neither are redirects or file results. Of the response + headers, only `Location` and `ETag` travel with the record; any other header the original wrote is not + replayed. - **Cross-replica exclusivity is a deployment property, not a guarantee.** You get it where a Redis multiplexer is registered. A host without one falls back to the process-local lock or the stripe, and there two duplicates on different instances can both miss the cache and execute. Even with Redis the @@ -237,6 +246,9 @@ and keeping handlers safe to repeat wherever the inbox resolves off. - **Consumer-side idempotency follows the transport.** The inbox above resolves on for a broker and off for the in-process provider, and a host can override either way with `MessageBus:EnableInbox`. Wherever it resolves off, every consumer's idempotency is code you own and test. +- **On an event with several handlers, the inbox row commits with the first handler that saves.** A later + handler that then fails is not retried by the redelivery, which is skipped as a duplicate. Ordering and + partial failure across handlers of one event are therefore yours to reason about. None of these are reasons to skip idempotent writes. They are the reasons to make the key contract explicit and to write your broker consumers defensively. @@ -247,11 +259,12 @@ The pattern ports to any HTTP stack: 1. Accept an **`Idempotency-Key` header** on write endpoints and require clients to keep it stable across retries. -2. **Cache the first response** (status and body) for a bounded window and replay it verbatim for - duplicates. Key the entry on a hash of caller identity plus method plus route plus the client's key, - never on the bare client value: otherwise two callers who pick the same string read each other's - responses. **Store a hash of the request body with the record** and compare it before replaying, so a - key reused with a different payload is refused rather than answered with a success that never happened. +2. **Cache the first response** (status, body, and the headers a client acts on, such as `Location`) for a + bounded window and replay it verbatim for duplicates. Key the entry on a hash of caller identity plus + method plus route plus the client's key, never on the bare client value: otherwise two callers who pick + the same string read each other's responses. **Store a hash of the request body with the record** and + compare it before replaying, so a key reused with a different payload is refused rather than answered + with a success that never happened. 3. **Hold a lock across execute-and-store**, not just across the cache check, and re-check after acquiring. Use a lock every replica can see (`SET NX PX` with a compare-and-delete release is enough), because a per-process lock only serializes duplicates that land on the same instance. Answer a @@ -287,94 +300,73 @@ onboarding guide, or `dotnet add package MMCA.Common.API` and try it.* *Tags: .NET, C Sharp, Web API, Distributed Systems, Resilience* -*Notes: re-verified in source 2026-09-19 at framework v1.205.0 (`MMCA.Common/FACTS.md:4,14`). -`IdempotentAttribute` is a `ServiceFilterAttribute` -resolving `IdempotencyFilter` from DI (`MMCA.Common/Source/Presentation/MMCA.Common.API/Idempotency/IdempotentAttribute.cs:16`); -the generic create action carries it (`.../Controllers/AggregateRootEntityControllerBase.cs:59`). **Corrected this -pass:** `IdempotencyRecord` is `(int StatusCode, string ResponseBody, string RequestBodyHash)` -(`.../Idempotency/IdempotencyRecord.cs:14`): the hash is non-nullable with no default, and its param doc states -that every record carries one (`:9-13`). `TryReplayAsync` (`.../Idempotency/IdempotencyFilter.cs:351-394`) compares -the stored hash ordinally (`:372`) and answers 422 `UnprocessableEntity` `ProblemDetails` on ANY mismatch -(`BodyMismatchResult` `:322-331`, with the 422-not-409 rationale at `:317-321`); the class remarks say the same -(`:343-344`). The earlier body sentence about a hash-less record replaying unconditionally is therefore removed: -no such record and no such path exists, and no test asserts one. **Also corrected:** the consumer-side inbox is no -longer opt-in. `MessageBusSettings.EnableInbox` is `bool?` with a null default -(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Messaging/MessageBusSettings.cs:133`, doc `:107-132`) and -`IsInboxEnabled => EnableInbox ?? Provider != MessageBusProvider.InProcess` (`:141`), so the inbox is ON for a -broker transport and OFF only for the in-process provider; registration is -`.../Infrastructure/DependencyInjection.cs:1005-1021` (`EfInboxStore` `:1012`, `NoOpInboxStore` `:1016`, -`InboxDisabledWarningService` `:1021`). ADR-021 records the change -(`Website/docs-src/adr/021-consumer-inbox-idempotency.md:8`, revised 2026-08-26, "the inbox is no longer opt-in for -a broker transport"). The consumer moved and changed shape too: -`.../Infrastructure/Messaging/Consumers/IntegrationEventConsumer.cs` calls -`inbox.TryBeginAsync(MessageId, eventTypeName, ct)` (`:81`), which also STAGES the inbox row unsaved in the -scope's unit of work so a handler's own `SaveChangesAsync` commits it in the same transaction as its mutations -(`:76-80`), `inbox.Abandon(MessageId)` on handler failure (`:101`) before the rethrow (`:108`), and -`inbox.CompleteAsync(...)` at the end (`:122`). `AlreadyProcessedAsync`/`MarkProcessedAsync` still exist on -`IInboxStore` (`.../Persistence/Inbox/IInboxStore.cs:19,22`) but are not what the consumer calls. **Anchors -re-read and bumped this pass** (a systematic 2-to-4 line drift in `IdempotencyFilter.cs`): the class is declared -`IAsyncActionFilter, IAsyncResourceFilter` (`:67-68`), so it runs at both stages. The resource stage -(`OnResourceExecutionAsync` `:119-125`) calls `Request.EnableBuffering()` only when the key header is present -(header read `ReadIdempotencyKey` `:163-170`), and the action stage hashes the buffered body -(`ComputeRequestBodyHashAsync` `:182-193`; a non-seekable stream takes the zero-length `EmptyBodyHash`, `:185-186` -and `:110-111`); the two-stage rationale is in the class remarks (`:43-51`). Covered by -`Tests/Presentation/MMCA.Common.API.Tests/Idempotency/IdempotencyFilterTests.cs:705` (same body replays), `:739` (a -different body under the same key, 422 asserted at `:763`), `:772` (a body-less request, empty-payload hash -asserted at `:779`), `:805` and `:820` (the resource stage buffers only when the key header is present). The -filter fails open. A cache read (`:362-367`), a cache store (`:437-441`) and a lock ACQUISITION fault -(`:253-259`) are each logged, counted on `idempotency.degraded` (`.../Idempotency/IdempotencyMetrics.cs:47`, kinds -`:24,29`) and swallowed, and the action runs unguarded; the availability-over-guarantee reasoning is in the class -remarks (`:52-58`) and the lock-fault-is-not-lock-held distinction at `:232-236`. Tested at -`IdempotencyFilterTests.cs:837,869`. Unchanged and re-confirmed: the lock-free fast-path cache read (`:143`), the -`IDistributedLock` resolved from DI with the stripe fallback when null (`:148-156`), a 30s time-to-live and a 5s -wait (`:97`, `:104`, acquire at `:249-251`), the double-check (`:278`) then execute-and-store (`:281`, via -`ExecuteAndStoreAsync` `:286-295`), and the 409 Conflict `ProblemDetails` for a duplicate that cannot acquire -within the wait and finds nothing cached (`:261-273`, `InFlightDuplicateResult` `:301-310`). `AddCaching()` -(`.../Infrastructure/DependencyInjection.cs:259`, called by `AddInfrastructure` at `:150`, `AddInfrastructure` -itself at `:72`) registers an `IDistributedLock` unconditionally via `TryAddSingleton` (`:317-331`), -`RedisDistributedLock` when an `IConnectionMultiplexer` is present (`:320-325`) and `InProcessDistributedLock` -otherwise (`:328-330`); the Redis acquire is `SET ... NX PX` (`.../Infrastructure/Concurrency/RedisDistributedLock.cs:11,67`, -single-instance-not-Redlock at `:20`) with a Lua compare-and-delete release (`:104`), and the in-process fallback -warns once that locking is process-local (`.../Concurrency/InProcessDistributedLock.cs:75`). The contract -(best-effort, non-reentrant, owner-scoped release) is -`MMCA.Common/Source/Core/MMCA.Common.Application/Interfaces/IDistributedLock.cs:30` (remarks `:20-28`, `:54-58`). -`IdempotencyFilter.KeyLocks` is only the no-`IDistributedLock` fallback: a `KeyedSemaphoreStripe` declared at -`.../Idempotency/IdempotencyFilter.cs:90` (xmldoc `:82-89`) and acquired at `:206` inside -`ExecuteUnderProcessLockAsync` (`:199-214`), a fixed set of 256 `SemaphoreSlim` stripes indexed by the ordinal hash -of the key (`MMCA.Common/Source/Core/MMCA.Common.Shared/Concurrency/KeyedSemaphoreStripe.cs:22,25,60,73`); its -class doc (`:8-16`) states it deliberately replaces the one-semaphore-per-key `ConcurrentDictionary` shape because -removal races and non-removal grows without bound. There is no removal step: the `Releaser` only releases -(`:78-86`). `X-Idempotent-Replay: true` is appended on replay (`.../IdempotencyFilter.cs:383`), and a record with an -empty body replays as a bare `StatusCodeResult` (`:384-385`). The store gate is not `ObjectResult`-only: -`BuildRecord` (`:448-474`) stores a 2xx `ObjectResult` (`:452-460`) or a body-less 2xx `StatusCodeResult` such as -the 204 from `NoContent()` (`:466-469`); non-2xx is deliberately not stored (`IsSuccess` `:476`), and redirects and -file results stay uncached. The cache key is `idempotency:{SHA-256(subject | method | route template | client key)}` -(`BuildCacheKey` `:485-498`, prefix `:75`, subject is the `user_id` claim or `anon:{remote address}` at `:487-488`), -with the SECURITY rationale in the class remarks (`:59-65`). +*Notes: re-verified in source 2026-10-02 at framework v1.221.0 (`MMCA.Common/FACTS.md:4,14`). **Corrected this +pass (2026-10-02):** (1) `IdempotencyRecord` is `(int StatusCode, string ResponseBody, string RequestBodyHash, +string? Location = null, string? ETag = null)` +(`MMCA.Common/Source/Presentation/MMCA.Common.API/Idempotency/IdempotencyRecord.cs:21-26`; hash doc `:9-13`, +header docs `:14-20`). `BuildRecord` (`.../Idempotency/IdempotencyFilter.cs:463-501`) stores the ETag the action +wrote (`:468-469`) on both cached shapes (`:483-488`, `:495`) and the `Location` of a `Created`, +`CreatedAtRoute` or `CreatedAtAction` result (`ResolveLocation` `:507-528`); `TryReplayAsync` (`:352-404`) +re-emits both (`:386-392`). Tested at `Tests/Presentation/MMCA.Common.API.Tests/Idempotency/IdempotencyFilterTests.cs:590` +(Location) and `:601` (ETag). The body statements that the record holds only status, body and hash, and that a +replayed 201 lacks its `Location`, are rewritten. (2) The cache-key subject is `FindUserIdValue()` +(`IdempotencyFilter.cs:541`), which reads `sub` then `ClaimTypes.NameIdentifier` +(`MMCA.Common/Source/Core/MMCA.Common.Shared/Auth/ClaimsPrincipalExtensions.cs:26-28`), else `anon:{ip}` or +`anon:unknown` (`IdempotencyFilter.cs:541-542`); the components are joined with a newline (`:548-549`) and +SHA-256 hashed under the `idempotency:` prefix (`:550-552`, prefix `:76`) in `BuildCacheKey` (`:539-553`), with +the SECURITY rationale in the class remarks (`:60-66`). The earlier `user_id` claim wording is removed. (3) Inbox +abandon: the consumer calls `inbox.Abandon(...)` and ignores its result +(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Messaging/Consumers/IntegrationEventConsumer.cs:101`). +`EfInboxStore.Abandon` (`.../Persistence/Inbox/EfInboxStore.cs:93-111`) returns false and logs when a handler's +save already committed the row (`:98-104`), and the contract says the redelivery is then treated as a duplicate +and the remaining handlers do not run again (`.../Persistence/Inbox/IInboxStore.cs:57-62`). The inbox bullet is +narrowed and a trade-off bullet added. (4) §10 attribution: the scorecard no longer records a twenty-fifth-wave 8 +to 9 lift. The §10 row (`Website/docs-src/governance/common-ArchitectureScorecard.md:74`, Implementation 9) lists +`IdempotencyFilter` resolving an `IDistributedLock` among its evidence, so the body says that instead of "on the +strength of". (5) ADR-017 was revised 2026-10-01 (`Website/docs-src/adr/017-request-idempotency.md:13-15`, +Revision `:203-215`) and documents the caller-scoped `sub` subject (`:36-46`), Location and ETag replay +(`:53-55`), the body binding and 422 (`:56-61`) and the fail-open behavior (`:73-76`, `:124-127`); the previous +ledger note that the ADR did not cover these is retired. **Re-anchored in `IdempotencyFilter.cs`:** class +`IAsyncActionFilter, IAsyncResourceFilter` `:68-69`; two-stage remarks `:45-51`; fail-open remarks `:54-58`; +`KeyLocks` `:91` (xmldoc `:83-90`); 30s time-to-live `:98`; 5s wait `:105`; `EmptyBodyHash` `:111-112`; +`OnResourceExecutionAsync` `:120-126` (buffering only with a key, `:122-123`); fast path `:144`; +`IDistributedLock` from DI `:149`, stripe fallback when null `:150-154`; `ReadIdempotencyKey` `:164-171`; +`ComputeRequestBodyHashAsync` `:183-194` (non-seekable stream takes the empty hash, `:186-187`); +`ExecuteUnderProcessLockAsync` `:200-215` (acquire `:207`); distributed acquire `:250-252`; lock fault +`:254-260` (rationale `:234-236`); 409 path `:262-274`; double-check `:279` then execute-and-store `:282` +(`ExecuteAndStoreAsync` `:287-296`); `InFlightDuplicateResult` `:302-311`; `BodyMismatchResult` `:323-332` +(422-not-409 rationale `:318-322`); cache read fault `:363-368`; ordinal hash compare `:373`; +`X-Idempotent-Replay` `:384`; bare-status replay `:394-395`; store fault `:452-456`; `IsSuccess` `:530`. Faults +count on `idempotency.degraded` (`.../Idempotency/IdempotencyMetrics.cs:47`, conflict kinds `:24,29`). Tests: +same body `IdempotencyFilterTests.cs:816`, different body `:850` (422 asserted `:874`), body-less `:883`, +resource stage `:916` and `:931`, cache read and store faults `:948` and `:980`, distributed-lock facts `:672`, +`:712`, `:747`, `:783`; no test exercises the lock-acquisition-fault path. **Unchanged and re-confirmed:** +`IdempotentAttribute` is a `ServiceFilterAttribute` (`.../Idempotency/IdempotentAttribute.cs:16`); the generic +create action carries it (`.../Controllers/AggregateRootEntityControllerBase.cs:60`); `IdempotencySettings.CacheExpirationHours` defaults to 24 with `[Range(1, 168)]` -(`.../Idempotency/IdempotencySettings.cs:15-16`). ADR-017 was revised 2026-08-01 -(`Website/docs-src/adr/017-request-idempotency.md:4-8`; key scoping `:29-35`; the `IDistributedLock` decision -`:43-53`; the striped semaphore demoted to "the fallback for a host that registers no lock" `:54-60`; result shapes -`:61-69`; trade-offs `:83-99`), but it does NOT yet document the request-body-hash / 422 key-reuse behavior or the -fail-open degradation, so both are cited to the filter source and its tests rather than to the ADR. At-least-once -outbox delivery from ADR-003. Broker side: `IInboxStore`/`EfInboxStore`/`NoOpInboxStore` + `InboxMessage` keyed on -`MessageId` with a unique index -(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/ApplicationDbContext.cs:724-726`, -`IsUnique` `:725`, inside `ConfigureInbox` declared at `:718` and invoked at `:421`, with -`ToTable("InboxMessages", "dbo")` at `:721`), with exponential-backoff `UseMessageRetry` (`RetryLimit` default 5, -`.../Infrastructure/Messaging/MessageBusSettings.cs:92`, applied at -`.../Infrastructure/DependencyInjection.cs:1228` and `:1268`). Scorecard -anchors re-read this pass (the rows shifted by 8): the §6 row -(`Website/docs-src/governance/common-ArchitectureScorecard.md:86`) credits the idempotent inbox consumer (dedup by -`MessageId` via `IInboxStore`), formally documented in ADR-021; the `[Idempotent]` filter is credited under §9 -(`:89`) and §10 (`:90`, retitled "Messaging & Integration Architecture" by rubric v2), and the §10 row still -records the Implementation 8 to 9 lift awarded in the twenty-fifth wave -(2026-08-01) because the filter resolves an `IDistributedLock` with the stripe as fallback; §29 (`:109`) credits the -Polly handlers plus the outbox's graceful degradation, not the `[Idempotent]` filter. The scorecard headline (`:5`) -is the thirty-sixth wave: a full 34-category two-pass evidence re-score dated 2026-09-19 at -framework v1.205.0 (git HEAD `90ffa7a`, clean tree) with no score moves and both indices unchanged at Maturity -97.0% (318/328) and Implementation 86.0% (705/820) on a Sigma-weight of 82 (`:120-121`). NOT RESOLVED this pass: -the header line lists Rubric §9,§29 while the grounding line and this ledger cite §6, §9, §10 and §29; the -scorecard supports all four credits, so the narrower header list is left exactly as written rather than guessed at.* +(`.../Idempotency/IdempotencySettings.cs:15-16`). The Infrastructure DI registration is split into partials: +`AddInfrastructure` (`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/DependencyInjection.cs:57`) calls +`AddCaching` at `:140`, and `AddCaching` (`.../DependencyInjection.Caching.cs:26`) registers the lock through +`TryAddSingleton` (`:86-100`; `RedisDistributedLock` `:94`, `InProcessDistributedLock` +`:99`). The Redis acquire is `SET ... NX PX` (`.../Concurrency/RedisDistributedLock.cs:11`, `When.NotExists` at +`:67`), single-instance and not Redlock (`:20`), with a Lua compare-and-delete release script (`:37`); the +in-process fallback warns once (`.../Concurrency/InProcessDistributedLock.cs:75`). Contract: +`MMCA.Common/Source/Core/MMCA.Common.Application/Interfaces/IDistributedLock.cs:30` (not reentrant `:20`, +best-effort and not consensus `:24`). Stripe: `MMCA.Common/Source/Core/MMCA.Common.Shared/Concurrency/KeyedSemaphoreStripe.cs:22` +(width 256 `:25`, acquire `:60`, the `Releaser` only releases `:78-85`), class doc `:8-16`. Inbox posture: +`MessageBusSettings.EnableInbox` is `bool?` (`.../Messaging/MessageBusSettings.cs:133`), `IsInboxEnabled` +`:141`, `RetryLimit` default 5 `:92`; registration `.../DependencyInjection.Messaging.cs:107-123` +(`EfInboxStore` `:109`, `NoOpInboxStore` `:117`, `InboxDisabledWarningService` `:122`); `UseMessageRetry` +`:286` and `:326`. Consumer: `TryBeginAsync` `IntegrationEventConsumer.cs:81` (staging rationale `:76-80`), +rethrow `:108`, `CompleteAsync` `:122`. `InboxMessages` table +(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/ApplicationDbContext.cs:724`) with a +unique `MessageId` index (`:726-728`) inside `ConfigureInbox` (`:721`, invoked `:426`). ADR-021 +(`Website/docs-src/adr/021-consumer-inbox-idempotency.md:8`, revised 2026-08-26). At-least-once outbox delivery +from ADR-003. Scorecard: evidence stamp 2026-10-01 at v1.218.0 (`common-ArchitectureScorecard.md:5`), Maturity +96.6% (317/328) `:9`, Implementation 86.0% (705/820) `:10`; §6 credits the inbox consumer `:70`, §9 the filter +`:73`, §10 the filter's `IDistributedLock` `:74`, §29 the Polly handlers plus outbox degradation `:93`. NOT +RESOLVED this pass: the header lists Rubric §9,§29 while the grounding line and this ledger cite §6, §9, §10 and +§29; the scorecard supports all four credits, and the header cell is left as written because this run was not +authorized to change header cells.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/identity-completions.md b/docs-src/articles/identity-completions.md index c7a7d88f..217f09a7 100644 --- a/docs-src/articles/identity-completions.md +++ b/docs-src/articles/identity-completions.md @@ -7,12 +7,13 @@ > `.../Application/Auth/EmailConfirmation/EmailConfirmationSettings.cs`, > `.../Application/Auth/Permissions/PermissionGrantSettings.cs`, > `.../Shared/Auth/AuthClaimTypes.cs`, -> `.../Infrastructure/DependencyInjection.cs`, +> `.../Infrastructure/DependencyInjection.Auth.cs`, > `.../Infrastructure/Auth/Administration/StoredPermissionRoleAdministrationService.cs`, > `.../Infrastructure/Persistence/Auth/PermissionGrantModelGate.cs`, > `.../Infrastructure/Persistence/DbContexts/ApplicationDbContext.cs`, > `.../API/Controllers/Administration/RolesAdminControllerBase.cs`, -> `.../API/Controllers/Administration/UsersAdminControllerBase.cs`, the two consumers' Identity +> `.../API/Controllers/Administration/UsersAdminControllerBase.cs`, +> `.../UI/Pages/Auth/ConfirmEmail.razor`, the two consumers' Identity > service hosts, and the §11 row of `Website/docs-src/governance/common-ArchitectureScorecard.md`. > No em dashes. @@ -49,8 +50,8 @@ what it costs to extend those without breaking them. Rubric §11 (Security) is a weight-3 category asking that authentication be centralized and identity flows documented, that authorization be enforced at the right layer rather than in the UI, and that permissions follow least privilege, with "over-broad permissions (admin everywhere), no least -privilege" as a named red flag (`ArchitectureEvaluationCriteria.md:353-380`). MMCA.Common's §11 row -sits at Maturity 4 and Implementation 8 (`common-ArchitectureScorecard.md:91`), and the two +privilege" as a named red flag (`ArchitectureEvaluationCriteria.md:353-376`). MMCA.Common's §11 row +sits at Maturity 4 and Implementation 8 (`common-ArchitectureScorecard.md:75`), and the two capabilities most often missing from the band above it are exactly a step-up factor and an authorization model that can be adjusted without a release. @@ -59,40 +60,47 @@ is a system with users who cannot review your diff. Adding a mandatory query to not a feature in a library, it is a behavior change in somebody else's production, delivered by a version bump. The framework's own history is the argument: the 1.188.0 release needed an `UPGRADING.md` section with eight items, one of which (a fallback authorization policy) broke -unannotated endpoints (`ADR-116:39-42`). +unannotated endpoints (`ADR-116:42-46`). So the question is not "how do I implement TOTP." It is "how do I ship TOTP so that the app which does not want it cannot possibly be affected by it." ## The MMCA answer: the unadopted path is unreachable, not merely disabled -`AuthenticationServiceBase` gained two constructor parameters, both optional and both -defaulted to null: `ITwoFactorAuthenticator? twoFactor = null` and +`AuthenticationServiceBase` takes the two new collaborators as constructor parameters, both +optional and both defaulted to null: `ITwoFactorAuthenticator? twoFactor = null` and `IOptions? emailConfirmationSettings = null` -(`AuthenticationServiceBase.cs:83-84`). Every existing subclass keeps compiling, because it simply +(`AuthenticationServiceBase.cs:69-70`). Every existing subclass keeps compiling, because it simply passes fewer arguments, and the documentation on those parameters says what null means: "while it is -null the sign-in flow has no second-factor step at all" (`:63-69`). +null the sign-in flow has no second-factor step at all" (`:52-62`). That is not the same as a configuration flag, and the difference is the whole point. `ChallengeSecondFactorAsync` is a two-line expression body: with no authenticator injected it returns `TwoFactorOutcome.NotEnrolled` outright, and only otherwise delegates to -`twoFactor.ChallengeAsync` (`:665-672`). An unadopted consumer pays no query, no branch and no +`twoFactor.ChallengeAsync` (`:504-510`). An unadopted consumer pays no query, no branch and no allocation. A disabled feature has a code path that runs and decides to do nothing; an absent collaborator has no code path at all. Only the second one is safe to ship to a system you cannot test. The email gate is built the same way. `CheckEmailConfirmed` returns success immediately unless the host supplied settings with `RequireConfirmedEmail` set, and even then refuses only a user whose type -implements `IEmailConfirmableUser` and reports `IsEmailConfirmed: false` (`:641-652`). Two +implements `IEmailConfirmableUser` and reports `IsEmailConfirmed: false` (`:480-490`). Two independent conditions, both off by default, one of them a type test the app controls. **Where the two gates sit in the login sequence is a decision, not an accident.** Both run after the -password has been proved: `CheckEmailConfirmed` at `:215`, `ChallengeSecondFactorAsync` at `:221`, -under a comment that gives the reason (`:210-213`). They return distinct, actionable errors ("confirm +password has been proved: `CheckEmailConfirmed` at `:164`, the second-factor challenge at `:170`, +under a comment that gives the reason (`:160-163`). They return distinct, actionable errors ("confirm your address", "send a code"), and an actionable error is an information leak if an anonymous caller can trigger it. Reaching either gate proves the caller owns the account, so neither is readable by somebody sweeping addresses. +Login reaches the challenge through a private wrapper, `ChallengeSecondFactorCountingFailuresAsync` +(`:522-535`), which counts a wrong code against the account exactly like a wrong password, so the +same lockout that throttles password guessing throttles code guessing per account. A missing code is +the ordinary first leg of the challenge and is not counted (`:512-516`). For an app with no +authenticator the wrapper costs nothing either: the inner call answers `NotEnrolled`, which is not a +failure, and no counter is touched. + ## The step-up assertion is a claim, and presence is the whole test A challenge that is satisfied has to be recorded somewhere the rest of the system can read. The @@ -103,13 +111,14 @@ time-based code (`:65`) or `recovery` for a single-use recovery code (`:68`). Three details make this cheap to adopt. **The claim is stamped without the app's hook participating.** `LoginAsync` arms a private field with -the outcome (`AuthenticationServiceBase.cs:242`) and clears it in a `finally` (`:249`); the token is -minted through a wrapper that appends the claim to whatever claim set the app's `CreateAccessToken` -returned (`:619-632`, the arming at `:621`). No subclass signature changed, so no consumer edits a -method to start emitting `mfa`. +the outcome (`AuthenticationServiceBase.cs:191`) and clears it in a `finally` (`:198`); the token is +minted through `CreateAccessTokenForSession`, which hands that field to the session issuer's +`MintForSession`, and the issuer appends the claim to whatever claim set the app's `CreateAccessToken` +returned (`:457-462`, `:469-470`). No subclass signature changed, so no consumer edits a method to +start emitting `mfa`. **A rotation does not silently drop it.** `RefreshTokenAsync` reads the method back off the presented -token (`:398`) and carries it into the new one, then clears the field (`:411`). Without that, a +token (`:332`) and carries it into the new one, then clears the field (`:347`). Without that, a step-up would quietly expire at the next refresh and a user who did present a second factor would look like one who never had. @@ -122,13 +131,13 @@ a suggestion. One more small thing worth stealing. The map from outcome to claim value has a default case that returns null with a comment explaining it: an outcome the map has not been taught about means the enum grew and this method did not, and it must not silently mint an `mfa` claim -(`AuthenticationServiceBase.cs:679-691`). A switch over an enum whose unknown arm asserts an identity +(`AuthenticationServiceBase.cs:543-552`). A switch over an enum whose unknown arm asserts an identity fact is a vulnerability waiting for its next contributor. ```csharp // Illustrative of the documented shape: the two gates and the optional collaborator. public abstract class AuthenticationServiceBase( - // ... the eight collaborators every consumer already passes ... + // ... the five collaborators every consumer already passes ... ITwoFactorAuthenticator? twoFactor = null, IOptions? emailConfirmationSettings = null) : IAuthenticationService { @@ -138,8 +147,8 @@ public abstract class AuthenticationServiceBase( if (confirmationResult.IsFailure) return Result.Failure(confirmationResult.Errors); - var secondFactor = await ChallengeSecondFactorAsync( - untracked.Id, request.TwoFactorCode, cancellationToken); + var secondFactor = await ChallengeSecondFactorCountingFailuresAsync( + untracked.Id, request, cancellationToken); if (secondFactor.IsFailure) return Result.Failure(secondFactor.Errors); @@ -150,6 +159,17 @@ public abstract class AuthenticationServiceBase( ? Task.FromResult(Result.Success(TwoFactorOutcome.NotEnrolled)) : twoFactor.ChallengeAsync(userId, code, cancellationToken); + // A wrong code counts toward lockout like a wrong password; a missing code does not. + private async Task> ChallengeSecondFactorCountingFailuresAsync( + UserIdentifierType userId, LoginRequest request, CancellationToken cancellationToken) + { + var secondFactor = await ChallengeSecondFactorAsync(userId, request.TwoFactorCode, cancellationToken); + if (secondFactor.IsFailure && secondFactor.Errors.Any(e => e.Code == TwoFactorErrors.TwoFactorInvalidCode)) + await loginProtection.IncrementFailedAttemptsAsync(request.Email, cancellationToken); + + return secondFactor; + } + // Off unless the host set RequireConfirmedEmail AND the app's User implements the contract. protected virtual Result CheckEmailConfirmed(TUser untrackedUser) { @@ -169,12 +189,12 @@ public abstract class AuthenticationServiceBase( window, recovery codes. `ITwoFactorStore` is the persistence, and the consumer writes it, over its own `User` aggregate. The DI call is explicit about the split: it "deliberately registers no `ITwoFactorStore`", because the account's secret and recovery hashes belong to the app's own -aggregate (`Infrastructure/DependencyInjection.cs:459-464`). +aggregate (`Infrastructure/DependencyInjection.Auth.cs:28-32`). This is the same trade the framework already made for password material and for user lookups, and ADR-116 states the reason plainly: the two deployed apps model users differently, and a framework-owned user table would either be too thin to use or force columns an app has no place for -(`ADR-116:31-38`). Every consumer that wants two-factor writes one class. That is deliberate +(`ADR-116:35-40`). Every consumer that wants two-factor writes one class. That is deliberate duplication, bought on purpose. The settings carry the RFC 6238 defaults every authenticator app assumes: six digits, a thirty-second @@ -186,7 +206,7 @@ against one period cannot read codes minted with another (`:9-14`). Email confirmation reuses the password-reset design rather than inventing one, down to the record shape, the hashing, the attempt cap and the throttle, under its own key prefix so issuing a -confirmation link cannot invalidate an outstanding reset link (`ADR-116:66-77`). And +confirmation link cannot invalidate an outstanding reset link (`ADR-116:90-101`). And `RequireConfirmedEmail` defaults to false, with the reason written next to it: turning it on locks out every existing account whose address was never confirmed, so a host backfills its rows as confirmed first and flips the flag afterwards (`EmailConfirmationSettings.cs:47-55`). With it off the @@ -207,21 +227,22 @@ Changing who can do what is a deploy. Stored grants layer over it. `LayeredPermissionRegistry` decorates whatever `IPermissionRegistry` the host already registered and **unions** the stored set with the compiled one -(`Infrastructure/DependencyInjection.cs:535-580`, the `TryDecorate` call and its order-tolerant -fallback at `:566-580`). The union is the security property: **there is no deny row.** A stored edit +(`Infrastructure/DependencyInjection.Auth.cs:108-153`, the `TryDecorate` call and its order-tolerant +fallback at `:135-150`). The union is the security property: **there is no deny row.** A stored edit can only widen a role, so the effective permission set never depends on evaluation order, and a data change can never disable an endpoint the code guarantees. Removing a compiled capability stays a code -change (`ADR-116:212-215`). +change (`ADR-116:261-263`). Two more decisions hold this up. **The opt-in is a marker type, and it is what maps the table.** `PermissionGrantModelGate` is an empty sealed class that is never injected anywhere -(`PermissionGrantModelGate.cs:19`). `ApplicationDbContext` resolves it from the root provider with +(`PermissionGrantModelGate.cs:19`), registered by `AddStoredPermissionGrants` +(`DependencyInjection.Auth.cs:116`). `ApplicationDbContext` resolves it from the root provider with `GetService`, so its absence reads as "this host did not opt in" rather than failing every context -construction (`ApplicationDbContext.cs:911`), and applies the grant configuration only then, and only -in the context instance whose physical source matches the configured `DataSourceName` -(`:940`, default `"Default"` at `PermissionGrantSettings.cs:31`). A host that never calls +construction (`ApplicationDbContext.cs:913-918`), and applies the grant configuration only then, and +only in the context instance whose physical source matches the configured `DataSourceName` +(`:943`, default `"Default"` at `PermissionGrantSettings.cs:33`). A host that never calls `AddStoredPermissionGrants` keeps a byte-identical model, and an opted-in host gets the table in exactly one of its databases. @@ -230,9 +251,9 @@ exactly one of its databases. role on demand inside it means blocking I/O on every such request, so the grants are held as a per-role in-memory snapshot, rebuilt on a timer and immediately after an edit by an invalidator that is the same instance as the cache, "so an edit and the reads that follow it cannot end up looking at -two different snapshots" (`Infrastructure/DependencyInjection.cs:555-560`). `CacheSeconds` defaults -to 300, documented as exactly what it is: the bound on how stale another replica may be after an -edit, because invalidation is per process (`PermissionGrantSettings.cs:14-23`). +two different snapshots" (`Infrastructure/DependencyInjection.Auth.cs:120-126`). `CacheSeconds` +defaults to 300 (`PermissionGrantSettings.cs:25`), documented as exactly what it is: the bound on how +stale another replica may be after an edit, because invalidation is per process (`:14-23`). A cold cache grants nothing, which is the safe direction, and the compiled layer answers from the first request either way. @@ -261,8 +282,10 @@ silently inert" is the difference between a user error and a support ticket six Everything else about the write is deliberately boring, which is the compliment: a set is a diff rather than a truncate-and-insert, so only changed permissions are written, an unchanged submission -writes nothing, and the `GrantedAt` stamps of untouched rows survive (`:32-37`, writes at `:162-186`). -The snapshot is invalidated once, after the writes (`:187`). +writes nothing, and the `GrantedAt` stamps of untouched rows survive (`:32-37`, writes at `:162-190`). +The snapshot is invalidated once, in a `finally` after the writes. Each grant and revoke commits on +its own, so a failure part-way through leaves earlier rows written, and the invalidation therefore +runs on every exit rather than only on success (`:165-167`, `:191-194`). ```csharp // Illustrative of the documented shape: the two refusals on a set. @@ -287,13 +310,27 @@ if (unknown.Count > 0) nameof(IRoleAdministrationService), role)); // A set is a diff, not a truncate-and-insert: unchanged rows keep their GrantedAt stamp. -foreach (var permission in desired.Except(existing, StringComparer.Ordinal)) - await store.GrantAsync(role, permission, changedBy, cancellationToken); - -foreach (var permission in existing.Except(desired, StringComparer.Ordinal)) - await store.RevokeAsync(role, permission, cancellationToken); +// Each write commits on its own, so the invalidation runs on every exit. +try +{ + foreach (var permission in desired.Except(existing, StringComparer.Ordinal)) + { + var granted = await store.GrantAsync(role, permission, changedBy, cancellationToken); + if (granted.IsFailure) + return Result.Failure(granted.Errors); + } -await invalidator.InvalidateAsync(role, cancellationToken); + foreach (var permission in existing.Except(desired, StringComparer.Ordinal)) + { + var revoked = await store.RevokeAsync(role, permission, cancellationToken); + if (revoked.IsFailure) + return Result.Failure(revoked.Errors); + } +} +finally +{ + await invalidator.InvalidateAsync(role, cancellationToken); +} ``` ## The administration API is two bases, gated on capabilities @@ -324,39 +361,42 @@ above is a safety net rather than the primary defense. implementation of `ITwoFactorStore` in either MMCA.ADC or MMCA.Store. The capability is framework code with handler bases, settings, a claim and a challenge, waiting for its first adopter. Email confirmation and stored grants, by contrast, are both live: ADC's Identity service calls - `AddEmailConfirmation` (`Program.cs:231`) and `AddStoredPermissionGrants` (`:277`), Store's calls + `AddEmailConfirmation` (`Program.cs:230`) and `AddStoredPermissionGrants` (`:276`), Store's calls the same two (`Program.cs:183`, `:220`), both apps' `User` implements `IEmailConfirmableUser` (`ADC User.cs:35`, `Store User.cs:30`), and both route the two controller bases (`ADC AdminRolesController.cs:37`, `UsersAdminController.cs:26`; `Store AdminRolesController.cs:36`, `AdminUsersController.cs:28`). - **Registering a service is not the same as changing behavior, and that is a documentation burden.** Adopting two-factor takes two steps, not one: the DI call, and then the app passing the resolved - `ITwoFactorAuthenticator` to its base constructor (`Infrastructure/DependencyInjection.cs:465-468`). + `ITwoFactorAuthenticator` to its base constructor (`Infrastructure/DependencyInjection.Auth.cs:34-37`). Adopting confirmation takes three: the DI call, `RequireConfirmedEmail`, and the `User` implementing the contract. Every one of those gaps is a place where somebody believes a feature is on and it is not. The safety is real and the confusion is real, and they are the same property. - **Optional constructor parameters are a one-way widening.** The pattern that makes this source-compatible also means the base constructor's parameter list grows with every optional - collaborator, and it is now at ten. This scales to a few more and not to a dozen; at some point the - honest refactor is an options object, and that one will not be source-compatible. + collaborator. It stands at seven: five required collaborators plus the two optional ones + (`AuthenticationServiceBase.cs:63-70`). This scales to a few more and not to a dozen; at some point + the honest refactor is an options object, and that one will not be source-compatible. - **Stored grants are per-process cached, so a replica can be stale.** An edit is live immediately on the replica that served it and reaches the others within `CacheSeconds` - (`PermissionGrantSettings.cs:23`). A cross-replica push would put a broker on the authorization + (`PermissionGrantSettings.cs:18-19`). A cross-replica push would put a broker on the authorization path. The window it would close is a grant taking effect a few seconds late, never a revoked grant outliving the interval, because the layer can only widen. - **A stored grant reaches another service only through a token claim.** Where modules run as separate services, the host that mints tokens is the one that holds the grants, so a permission granted by a - row lands on the holder's next sign-in rather than within `CacheSeconds` (`ADR-116:289-303`). That + row lands on the holder's next sign-in rather than within `CacheSeconds` (`ADR-116:296-299`). That is the same latency a role change has always had, and it is the price of keeping the grant table in one host instead of replicating it. - **Adopting the table is a migration in the consumer, and it joins the hard-delete allowlist.** The grant store hard-deletes a revoked grant, which makes it an exception to the framework's soft-delete default, and consumers running the same fitness rule have to add the type to their own - allowlist when they upgrade (`ADR-116:339-344`). -- **No pages ship.** Enrollment (with its QR code and its show-recovery-codes-once screen) and - confirmation stay with the consumers; what ships is routeless administration components the app - routes, authorizes and links for itself (`ADR-116:246-274`). Two consumers have not yet wanted the - same enrollment page, and the rule is that a component gets promoted when they do. + allowlist when they upgrade (`ADR-116:287-290`). +- **No enrollment page ships.** Two-factor enrollment (with its QR code and its show-recovery-codes-once + screen) stays with the consumers. The email confirmation landing page is the one page of the four + completions that `MMCA.Common.UI` ships, anonymous at `/confirm-email` (`ConfirmEmail.razor:1-3`), + and the administration surface ships as routeless components the app routes, authorizes and links + for itself (`ADR-116:173-201`). Two consumers have not yet wanted the same enrollment page, and the + rule is that a component gets promoted when they do. ## Apply this even without MMCA @@ -418,42 +458,56 @@ Next: Article 53, the series index, "The MMCA series: every pattern, one place." *Tags: .NET, C Sharp, Authentication, Security, Software Architecture* -*Notes: verified type/behavior names with path:line (all re-read this run). Both code blocks are +*Notes: verified 2026-10-02 against MMCA.Common v1.221.0; every type/behavior name below re-read with +path:line this run. Changes this run: constructor anchors and counts (seven parameters, five required +plus two optional, not ten), the login gate lines, the wrong-code lockout wrapper +`ChallengeSecondFactorCountingFailuresAsync` added to the gate section and the first code block, the +token-wrapper description (the issuer's `MintForSession` appends the claim), the three `Add*` calls +re-anchored to `DependencyInjection.Auth.cs`, the grant invalidation moved into a `finally` (body and +second code block), the pages trade-off narrowed (the email confirmation page ships in +`MMCA.Common.UI`), every ADR-116 cite re-anchored after its 2026-10-01 revision, the scorecard, rubric +and taxonomy lines, the ADC host lines, and the FACTS version and package count. Both code blocks are illustrative of the documented shape rather than compilable extracts: the first splices -`AuthenticationServiceBase`'s constructor header (`:83-84`), the two login-gate call sites -(`:210-224`) and the two protected methods (`:641-652`, `:665-672`) into one class body, which the -source of course does not do; the second condenses -`StoredPermissionRoleAdministrationService.SetStoredPermissionsAsync` (`:120-187`) with the null and -whitespace guards dropped and the two error messages shortened from the source strings at `:143` and -`:157`. Control flow, member names and refusal codes are faithful.* +`AuthenticationServiceBase`'s constructor header (`:63-70`), the two login-gate call sites +(`:160-175`) and three of its methods (`:480-490`, `:504-510`, `:522-535`) into one class body, which +the source of course does not do; the second condenses +`StoredPermissionRoleAdministrationService.SetStoredPermissionsAsync` (`:120-199`) with the null and +whitespace guards and `ConfigureAwait` calls dropped and the two error messages shortened from the +source strings at `:143` and `:157`. Control flow, member names and refusal codes are faithful.* - *ADR-116 (`Website/docs-src/adr/116-identity-completions-opt-in.md`), Accepted 2026-09-09, revised - 2026-09-19 (`:3-9`): the four missing capabilities and why each consumer would otherwise have - written its own (`:22-27`); the three reasons a framework-feature shape is wrong here, the app-owned - user row (`:31-38`), the sign-in chain no consumer can afford to have changed under it with the - 1.188.0 `UPGRADING.md` precedent (`:39-46`) and pages being where apps diverge most (`:47-52`); the - decision statement that a consumer adopting none of them observes no change (`:54-59`); two-factor - as contract plus challenge (`:61-68`); the optional-constructor-argument hook (`:70-76`); the claim - and its presence-is-the-test rule (`:78-89`); email confirmation mirroring the password-reset design - under its own key prefix (`:91-104`); stored grants unioning with the compiled registry with no deny - row (`:106-130`); the synchronous-read cache contract (`:132-142`); the two controller bases - (`:144-166`); the three separate DI calls (`:168-176`); the single new package `Otp.NET` in - Infrastructure only (`:178-184`); pages staying with the consumers and the routeless administration - components (`:186-213`); the closed catalog and the two refusals (`:215-231`); the token carrying - permissions so a service that never sees the grants still honours them (`:233-250`); the six - rejected shapes (`:252-277`); and the trade-offs restated here (`:279-305`).* + 2026-09-19 and 2026-10-01 (`:3-10`, Revision section `:301-313`): the four missing capabilities and + why each consumer would otherwise have written its own (`:26-29`); the three reasons a + framework-feature shape is wrong here, the app-owned user row (`:35-40`), the sign-in chain no + consumer can afford to have changed under it with the 1.188.0 `UPGRADING.md` precedent (`:42-46`) + and pages being where apps diverge most (`:48-51`); the decision statement that a consumer adopting + none of them observes no change (`:54-58`); two-factor as contract plus challenge (`:60-67`); the + optional-constructor-argument hook (`:69-76`); the claim and its presence-is-the-test rule + (`:78-88`); email confirmation mirroring the password-reset design under its own key prefix + (`:90-101`); stored grants unioning with the compiled registry with no deny row (`:103-121`); the + synchronous-read cache contract (`:123-131`); the two controller bases (`:133-154`); the three + separate DI calls (`:156-164`); the single new package `Otp.NET` in Infrastructure only + (`:166-171`); pages staying with the consumers, the email confirmation page as the one promoted + page, and the routeless administration components (`:173-201`); the closed catalog and the two + refusals (`:203-221`); the token carrying permissions so a service that never sees the grants still + honours them (`:223-244`); the six rejected shapes, including "let a stored grant deny" + (`:246-269`, that one `:261-263`); and the trade-offs restated here (`:271-299`, hard-delete + allowlist `:287-290`, next-sign-in latency `:296-299`).* - *`AuthenticationServiceBase` - (`MMCA.Common/Source/Core/MMCA.Common.Application/Auth/AuthenticationServiceBase.cs`): the two - optional constructor parameters `ITwoFactorAuthenticator? twoFactor = null` and - `IOptions? emailConfirmationSettings = null` `:83-84`, with the - "while it is null the sign-in flow has no second-factor step at all" documentation `:63-69` and the - confirmation-parameter documentation `:70-74`; the `_multiFactorMethod` field `:105`; in - `LoginAsync`, the after-the-password-check comment `:210-213`, `CheckEmailConfirmed` call `:215`, - `ChallengeSecondFactorAsync` call `:221`, arming `:242` and the `finally` clear `:249`; - `RefreshTokenAsync` carrying the method over from the presented token `:398` and clearing it `:411`; - `CreateAccessTokenForSession` `:619-632` with the multi-factor arming `:621`; `CheckEmailConfirmed` - `:641-652`; `ChallengeSecondFactorAsync` `:665-672` (null authenticator answers - `TwoFactorOutcome.NotEnrolled`); `MultiFactorMethodFor` `:679-691` with the unknown-outcome arm - returning null `:687-690`.* + (`MMCA.Common/Source/Core/MMCA.Common.Application/Auth/AuthenticationServiceBase.cs`): primary + constructor `:63-70` (five required parameters `:64-68`), the two optional parameters + `ITwoFactorAuthenticator? twoFactor = null` and + `IOptions? emailConfirmationSettings = null` `:69-70`, with the + "while it is null the sign-in flow has no second-factor step at all" documentation `:52-57` and the + confirmation-parameter documentation `:58-62`; the `_multiFactorMethod` field `:83`; in + `LoginAsync`, the after-the-password-check comment `:160-163`, `CheckEmailConfirmed` call `:164`, + `ChallengeSecondFactorCountingFailuresAsync` call `:170`, arming `:191` and the `finally` clear + `:198`; `RefreshTokenAsync` carrying the method over from the presented token `:332` and clearing it + `:347`; `CreateAccessTokenForSession` `:469-470` passing the field to + `IAuthSessionIssuer.MintForSession`, with the claim-stamping remark `:457-462`; `CheckEmailConfirmed` + `:480-490`; `ChallengeSecondFactorAsync` `:504-510` (null authenticator answers + `TwoFactorOutcome.NotEnrolled`); `ChallengeSecondFactorCountingFailuresAsync` `:522-535` (counts + only `TwoFactorErrors.TwoFactorInvalidCode`, `:529-532`, remark `:512-516`); `MultiFactorMethodFor` + `:543-552` with the unknown-outcome arm returning null `:549-551`.* - *`AuthClaimTypes` (`MMCA.Common/Source/Core/MMCA.Common.Shared/Auth/AuthClaimTypes.cs`): `Permission = "permission"` `:24`; `MultiFactor = "mfa"` `:62` with the presence-is-the-assertion documentation `:50-61`; `MultiFactorMethodTotp = "otp"` `:65`; `MultiFactorMethodRecoveryCode = @@ -466,39 +520,42 @@ whitespace guards dropped and the two error messages shortened from the source s `EmailConfirmation/EmailConfirmationSettings.cs` section `Authentication:EmailConfirmation` `:13`, `RequireConfirmedEmail` defaulting false with the "that default is load-bearing" remark `:47-55`; `Permissions/PermissionGrantSettings.cs` section `Authentication:PermissionGrants` `:12`, - `CacheSeconds` 300 with the per-process staleness-bound remark `:14-23`, `DataSourceName` defaulting - `"Default"` `:31`.* + `CacheSeconds` 300 `:25` with the per-process staleness-bound remark `:14-23` (bound sentence + `:18-19`), `DataSourceName` defaulting `"Default"` `:33`.* - *Handler bases (paths rooted at `MMCA.Common/Source/Core/MMCA.Common.Application/Users/UseCases/`): `TwoFactor/ConfirmTwoFactorEnrollmentHandlerBase.cs:29`, `TwoFactor/DisableTwoFactorHandlerBase.cs:29`, `TwoFactor/RegenerateRecoveryCodesHandlerBase.cs:30`, `EmailConfirmation/SendEmailConfirmationHandlerBase.cs:40`, `EmailConfirmation/ConfirmEmailHandlerBase.cs:33`.* -- *DI (`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/DependencyInjection.cs`): - `AddTwoFactorAuthentication(IConfiguration)` `:470` with the "deliberately registers no - `ITwoFactorStore`" remark `:459-464` and the "calling this alone changes nothing about sign-in" - remark `:465-468`; `AddEmailConfirmation(IConfiguration)` `:498` with its "registering it does not - gate sign-in" remark `:487-492`; `AddStoredPermissionGrants(IConfiguration)` `:535`, its - call-after-`AddAuthorizationPolicies` remark `:514-520` and its this-call-is-what-maps-the-table - remark `:521-529`, the single cache instance answering as both reader and invalidator `:555-560`, - the scoped `IRoleAdministrationService` registration `:562`, the hosted refresh service registered - through `TryAddEnumerable` `:564-567`, and the `TryDecorate` call with its order-tolerant empty-compiled fallback `:569-582`.* +- *DI (`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/DependencyInjection.Auth.cs`): + `AddTwoFactorAuthentication(IConfiguration)` `:39` with the "deliberately registers no + `ITwoFactorStore`" remark `:28-32` and the "calling this alone changes nothing about sign-in" + remark `:34-37`; `AddEmailConfirmation(IConfiguration)` `:67` with its "registering it does not + gate sign-in" remark `:61-66`; `AddStoredPermissionGrants(IConfiguration)` `:108-153`, its + call-after-`AddAuthorizationPolicies` remark `:94-97` and its this-call-is-what-maps-the-table + remark `:100-105`, the `PermissionGrantModelGate` registration through `TryAddSingleton` `:116`, + the single cache instance answering as both reader and invalidator `:120-126`, the scoped + `IRoleAdministrationService` registration `:128`, the hosted refresh service registered through + `TryAddEnumerable` `:130-133`, and the `TryDecorate` call with its order-tolerant empty-compiled fallback `:135-150`.* - *`StoredPermissionRoleAdministrationService` (`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Auth/Administration/StoredPermissionRoleAdministrationService.cs`): declaration `:45-52`, the "every half is framework-owned" remark `:16-21`, the two-refusals remark `:23-31`, the set-is-a-diff remark `:32-37`; `SetStoredPermissionsAsync` `:120`, the checked-before-the-catalog-test comment `:137-138`, the `ManageRoles` refusal (`PermissionGrant.ManageRolesMustBeCompiled`) `:139-146`, the catalog refusal - (`PermissionGrant.UnknownPermission`) `:148-160`, the grant/revoke diff `:162-186` and the single - invalidation `:187`.* + (`PermissionGrant.UnknownPermission`) `:148-160`, the each-write-commits-on-its-own comment + `:165-167`, the grant/revoke diff `:168-190` (grant `:173`, revoke `:184`) and the single + invalidation in the `finally` `:191-194` (call `:193`).* - *`PermissionGrantModelGate` (`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/Auth/PermissionGrantModelGate.cs:19`), an empty `internal sealed class` with no state and no injection site (its remarks `:15-18`); - resolved with `GetService` in - `MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/ApplicationDbContext.cs:911` - (the "whole opt-in" comment `:109`), with `modelBuilder.ApplyPermissionGrantConfiguration()` applied - at `:940` (its documentation `:928`).* + resolved with `GetService` in `ResolvePermissionGrantGate`, + `MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/ApplicationDbContext.cs:913-918` + (gate lookup `:914`, the "whole opt-in" documentation `:120-124`), with + `modelBuilder.ApplyPermissionGrantConfiguration()` applied in `ConfigurePermissionGrants` at `:943` + (its documentation `:920-934`).* - *Controller bases (paths rooted at `MMCA.Common/Source/Presentation/MMCA.Common.API/Controllers/Administration/`): `RolesAdminControllerBase.cs` capability gate `[HasPermission(AdministrationPermissions.ManageRoles)]` @@ -507,9 +564,12 @@ whitespace guards dropped and the two error messages shortened from the source s the takes-precedence-over-`{role}` remark `:90-93`; `UsersAdminControllerBase.cs` capability gate `[HasPermission(AdministrationPermissions.ManageUsers)]` `:48`, declaration `:49`, `MaxPageSize = 100` `:53`.* +- *Email confirmation page: + `MMCA.Common/Source/Presentation/MMCA.Common.UI/Pages/Auth/ConfirmEmail.razor:1-3` + (`@page "/confirm-email"`, `[AllowAnonymous]`).* - *Consumer adoption, from a search across both `Source/` trees this run. Live: ADC - `MMCA.ADC/Source/Services/MMCA.ADC.Identity.Service/Program.cs:231` (`AddEmailConfirmation`) and - `:277` (`AddStoredPermissionGrants`); Store + `MMCA.ADC/Source/Services/MMCA.ADC.Identity.Service/Program.cs:230` (`AddEmailConfirmation`) and + `:276` (`AddStoredPermissionGrants`); Store `MMCA.Store/Source/Services/MMCA.Store.Identity.Service/Program.cs:183` and `:220`; `IEmailConfirmableUser` on `MMCA.ADC/Source/Modules/Identity/MMCA.ADC.Identity.Domain/Users/User.cs:35` and @@ -521,13 +581,13 @@ whitespace guards dropped and the two error messages shortened from the source s Not adopted: the same search returns no `AddTwoFactorAuthentication` call and no `ITwoFactorStore` implementation in either consumer.* - *Rubric: §11 Security criteria and red flags - (`Website/docs-src/governance/ArchitectureEvaluationCriteria.md:353-380`, default weight 3 at - `:379`); MMCA.Common's §11 row at Weight 3 / Maturity 4 / Implementation 8 - (`Website/docs-src/governance/common-ArchitectureScorecard.md:91`, column header `:79`). Group G08 + (`Website/docs-src/governance/ArchitectureEvaluationCriteria.md:353-376`, default weight 3 at + `:376`); MMCA.Common's §11 row at Weight 3 / Maturity 4 / Implementation 8 + (`Website/docs-src/governance/common-ArchitectureScorecard.md:75`, column header `:63`). Group G08 Authentication and Authorization (`Website/docs-src/onboarding/00-group-taxonomy.md:63`), which is - where `ITwoFactorAuthenticator` (`:636`), `IEmailConfirmationTokenService` (`:631`), - `StoredPermissionRoleAdministrationService` (`:666`) and `PermissionGrantModelGate` (`:387`) are - inventoried. Framework v1.205.0 (`MMCA.Common/FACTS.md:14`) / 19 published packages (`:19`) this + where `ITwoFactorAuthenticator` (`:652`), `IEmailConfirmationTokenService` (`:647`), + `StoredPermissionRoleAdministrationService` (`:676`) and `PermissionGrantModelGate` (`:390`) are + inventoried. Framework v1.221.0 (`MMCA.Common/FACTS.md:14`) / 22 published packages (`:19`) this run; not recounted here.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/jwks-cross-service-auth.md b/docs-src/articles/jwks-cross-service-auth.md index 0d623f38..2c177c74 100644 --- a/docs-src/articles/jwks-cross-service-auth.md +++ b/docs-src/articles/jwks-cross-service-auth.md @@ -1,8 +1,9 @@ -# Cross-service auth without a shared secret: JWKS dual-fetch +# Cross-service auth without a shared secret: JWKS discovery -> Series: MMCA.Common · Article #16 · Pillar P3 · Group G08 · Rubric §11 · ADR-004 · -> Status: grounded in `Website/docs-src/adr/004-authentication-dual-fetch.md`, `MMCA.Common/CLAUDE.md` -> (the microservices extraction section), and `Website/docs-src/onboarding/group-08-auth.md`. No em dashes. +> Series: MMCA.Common · Article #16 · Pillar P3 · Group G08 · Rubric §11 · ADR-004 · ADR-122 · +> Status: grounded in `Website/docs-src/adr/004-authentication-dual-fetch.md`, +> `Website/docs-src/adr/122-dev-only-relaxations-fail-closed.md`, `MMCA.Common/AGENTS.md` (the +> microservices extraction section), and `Website/docs-src/onboarding/group-08-auth.md`. No em dashes. **Subtitle:** When you split a monolith into services, the easy answer is to copy the JWT signing secret into every validator. That is also the answer that turns one leaked key into a system-wide @@ -70,37 +71,45 @@ every validator holds nothing. JsonWebKeySet GetJsonWebKeySet(); // public parameters only; private key never leaves // Validator side (any extracted service): JwtBearer fetches the issuer's JWKS URL -// (routed through the YARP gateway) and validates RS256 tokens against the public keys. +// (through the gateway under the local AppHost, Identity's internal ingress when deployed) +// and validates RS256 tokens against the public keys. // The validator holds NO secret. A leaked public key cannot mint tokens. ``` -(Source: `RsaJwksProvider.cs`, `IJwksProvider.cs`, and the JWKS notes in `MMCA.Common/CLAUDE.md`'s +(Source: `RsaJwksProvider.cs`, `IJwksProvider.cs`, and the JWKS notes in `MMCA.Common/AGENTS.md`'s microservices extraction section.) -## The dual-fetch, and the graceful empty set - -The dual-fetch ADR-004 describes is in the key discovery itself: a validator **discovers** the issuer's -public key from the JWKS endpoint, and the framework **falls back gracefully** when the key is not -there. When JWKS publishing is disabled (the default for a monolith) or no key is configured, -`RsaJwksProvider` returns an **empty key set** rather than throwing. The endpoint stays a valid, pollable -URL instead of erroring. A monolith that never turns JWKS on still answers `/.well-known/jwks.json` with -an empty document, so flipping a service into extracted mode does not require standing up new endpoints. -Discover the key; fall back when it is not there. That is the dual-fetch. - -A different two-fetch is easy to conflate with this one, so it is worth naming plainly: the shared login -flow, `AuthenticationServiceBase.LoginAsync` in `MMCA.Common.Application`, does an **untracked** +## Discovery, and the graceful empty set + +Discovery has two halves, and ADR-004 names both. On the issuer, when JWKS publishing is disabled (the +default for a monolith) or no key is configured, `RsaJwksProvider` returns an **empty key set** rather +than throwing. The well-known endpoints are mapped centrally for every host, so the endpoint stays a +valid, pollable URL instead of erroring. A monolith that never turns JWKS on still answers +`/.well-known/jwks.json` with an empty document, so flipping a service into extracted mode does not +require standing up new endpoints, and only the real issuer advertises a key. + +On the validator, the question is which URL to fetch from, and the answer depends on where the host +runs. Under the local Aspire AppHost, `WithJwksDiscovery(identity, gateway)` sets each validator's +authority to the **gateway**'s HTTPS origin: the extracted REST services listen HTTP/2-only on +cleartext for h2c gRPC (ADR-012), so the default HTTP/1.1 `JwtBearer` backchannel cannot reach Identity +directly, while the gateway terminates TLS, speaks both protocols, and forwards `/.well-known/*` on to +Identity. When no gateway is passed, the helper falls back to Identity's own HTTPS endpoint. In the +deployed ADC and Store environments, the bicep templates point the authority straight at Identity's +internal-ingress URL, with no gateway hop. Either way the validator carries one authority value owned +by the host wiring and no key material, and `ValidIssuer` is deliberately left unpinned: the authority +is an internal address while the token's `iss` is the public origin, so the issuer is taken from the +discovery document. + +ADR-004's file name says "dual-fetch", but the framework's own doc comments give that name to a +different flow, so it is worth naming plainly: the shared login flow, +`AuthenticationServiceBase.LoginAsync` in `MMCA.Common.Application`, does an **untracked** read to validate credentials (so the adversarial majority of login traffic, the failed attempts, never pays EF Core change-tracking cost), then a **tracked** re-fetch only on success to persist the rotated refresh token. The base's own doc comment names it the "untracked-then-tracked dual-fetch"; the ADC and Store Identity modules are thin sealed subclasses that supply the app-specific hooks (the untracked lookup, the claim set) and re-label it "dual-fetch pattern" in their class doc comments -(`AuthenticationService.cs:17` in ADC, `:16` in Store). It is shared framework login code, not a -per-app copy, but it is still not part of ADR-004's cross-service validation design. - -JWKS discovery is routed through the **YARP gateway**, not pointed at each service's internal address. -The validator asks the gateway for the issuer's JWKS document, and the gateway forwards it to whichever -host currently owns Identity. This keeps the validator's config stable across topology changes: when -Identity moves, redeploys, or scales, the gateway route updates, not every consumer. +(`AuthenticationService.cs:20` in both ADC and Store). It is shared framework login code, not a +per-app copy, but it is not part of ADR-004's cross-service validation design. ## JWT algorithm pinning: the attack you would otherwise ship @@ -144,10 +153,31 @@ rough edges. `Authentication:JwtBearer:RequireHttpsMetadata` config key, then `true` everywhere except Development, and a resolved `false` outside Development logs one startup warning naming the key. The honest residual is that an operator can still set that key to `false`, and both production - deployments do: ADC and Store validate against an internal-ingress cleartext `http://identity`, so - their bicep sets it explicitly with the justification written beside it. That is a reviewable line in - a deployment template rather than a default nobody chose. Permissive dev CORS is a development-only - affordance, selected by environment. + deployments do: ADC and Store validate against Identity's cleartext internal-ingress URL, so their + bicep sets it explicitly with the justification written beside it. That is a reviewable line in a + deployment template rather than a default nobody chose. +- **Every dev-only relaxation fails closed on an unknown environment.** The three-step resolution + above is one instance of a framework-wide rule (ADR-122): a relaxation applies only when the host + positively identifies itself as Development, and an unknown, absent, or unparseable environment + gets the production posture. The case that rule exists for is easy to miss: design-time tooling, a + directly-constructed test context, and a service collection assembled outside a host builder + register no `IHostEnvironment` at all, so every gate has to decide what "unknown" means. + + Three gates take a nullable environment and answer "not Development" for null. + `SensitiveDataLoggingGate.IsEnabled` lets EF Core render parameter values into logs only when the + setting asks for it AND the environment reports Development, so a configuration file copied into a + deployed host cannot put tokens and password hashes into the log sink on its own. SMTP transport + security reads the `Smtp:EnableSsl` key first and otherwise enables TLS unless the environment is + positively Development, and a deployed host that turns TLS off logs a startup warning. The AI + package scans the service collection for a registered `IHostEnvironment` and keeps prompt and + completion text out of telemetry when it finds none. + + The residuals are named in the ADR itself. `ASPNETCORE_ENVIRONMENT` is the trust root, so a host + that misreports itself as Development gets every relaxation at once: the rule concentrates the risk + on one value instead of removing it. The other environment-conditional relaxations (the permissive + dev CORS policy, the cookie `Secure` flag, HSTS, the pseudo-locale) are plain `IsDevelopment()` + checks against an environment the host always supplies, not fail-closed gates. And the inventory is + manual: nothing fails a build when a new environment-conditional branch skips the rule. - **The invariants in this article fail the build.** Executable tests run the real registration code and read the produced options back: the forwarded bearer handler's `ValidAlgorithms` must stay `[RsaSha256]`, the `RequireHttpsMetadata` resolution above is asserted step by step (including the @@ -158,11 +188,12 @@ rough edges. facts: it fails on any `[AllowAnonymous]` outside an explicit allow-list, on a stale allow-list entry, on an empty scan, on an endpoint that declares neither `[Authorize]` nor `[AllowAnonymous]` (a stricter gate each suite opts into, which the framework turns on for itself), and on a stale entry in - that second, undecorated allow-list. The framework's own allow-list holds 18 entries: ten + that second, undecorated allow-list. The framework's own allow-list holds 19 entries: ten credential-exchange actions that cannot require a token because issuing one is what they do (login, register, refresh, the OAuth exchange, the three provider challenges and the provider callback, - forgot-password and reset-password), the five credential pages, and three landing and outcome pages - that render nothing depending on the caller. NetArchTest's fluent API cannot express this pair, which is why + forgot-password and reset-password), six credential pages (the email-confirmation landing among + them), and three landing and outcome pages that render nothing depending on the caller. NetArchTest's + fluent API cannot express this pair, which is why the rules live as full-name reflection and options-resolution tests instead. Two residuals stay honest. Minimal-API endpoints opt out through an `.AllowAnonymous()` builder call, which is endpoint metadata rather than an attribute, so the JWKS and OIDC discovery endpoints themselves sit outside @@ -183,8 +214,9 @@ The pattern ports to any stack with a JWT story: issuer keeps the private key; everyone else gets the public key. A validator should never hold a key that can also forge. 3. **Publish the public key as a JWKS document at `/.well-known/jwks.json`** and let the standard - `JwtBearer` discovery fetch and refresh it. Route discovery through your gateway so topology changes - do not ripple into every consumer's config. + `JwtBearer` discovery fetch and refresh it. Give each validator one authority value owned by the + deployment wiring (a gateway origin or the issuer's internal address), so a topology change is a + config edit rather than a key redistribution. 4. **Pin the algorithm on the validator.** Set the allowed algorithms explicitly and re-check the token's `alg` against your expectation. Never let the token's own header choose the verification method, or you have shipped the algorithm-confusion attack. @@ -199,9 +231,10 @@ pulling a module out into its own service a config change rather than an auth re **What we covered:** why a shared symmetric secret turns one leak into a system-wide forgery, how RS256 + a published JWKS document lets extracted services validate against the issuer's public keys -with no secret of their own, how ADR-004's dual-fetch (discover the key, fall back to an empty set) -and gateway-routed discovery keep the boundary stable, and why algorithm pinning closes the key- -substitution attack that publishing a public key would otherwise open. +with no secret of their own, how discovery (gateway-routed under the local AppHost, direct to +Identity's internal ingress when deployed) and the empty-key-set fallback keep the boundary stable, +why algorithm pinning closes the key-substitution attack that publishing a public key would otherwise +open, and how ADR-122 makes every dev-only relaxation fail closed when the environment is unknown. **Next in the series:** password hashing done right: PBKDF2-SHA512, 600k iterations, and timing-safe comparison, the credential-at-rest half of the same security story. @@ -209,116 +242,79 @@ comparison, the credential-at-rest half of the same security story. *MMCA.Common is Apache-2.0 licensed and open source. Star the repo, read the 2-minute ADR-004 behind this pattern, or `dotnet add package MMCA.Common.API` and try it.* - ⭐ Repo: `https://github.com/ivanball/MMCA.Common` -- 📄 ADR-004 (authentication dual-fetch): `Website/docs-src/adr/004-authentication-dual-fetch.md` in the docs site. +- 📄 ADR-004 (cross-service token validation via JWKS / OIDC discovery): `Website/docs-src/adr/004-authentication-dual-fetch.md` in the docs site. *Tags: .NET, C Sharp, Software Architecture, Microservices, Authentication* -*Notes (evidence audit, 2026-09-19, MMCA.Common v1.205.0): ADR-004 -(`Website/docs-src/adr/004-authentication-dual-fetch.md`) is still the mapped ADR; its contents were -not re-read this run, and the description carried here (cross-service token validation only: RS256 -issuer + public-key publish, `AddForwardedJwtBearer` on validators, a deliberately unpinned -`ValidIssuer` taken from the discovery document, gateway-routed discovery, `RsaJwksProvider` -empty-set fallback and `ValidAlgorithms` pinning, with NO login untracked/tracked two-query) comes -from the 2026-08-22 audit. Everything below was re-read this run. Algorithm selection is the concrete -`JwtSettings.SigningAlgorithm`, defaulting to `JwtSigningAlgorithm.RS256` -(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Auth/JwtSettings.cs:30`); the `IJwtSettings` -interface the published article named has no `.cs` definition anywhere under `MMCA.Common/Source` and -survives only in the Infrastructure PublicAPI baseline files, so the body names the concrete settings -type instead. `RsaJwksProvider` builds its key set through a `Lazy` created with -`LazyThreadSafetyMode.PublicationOnly` (`Auth/RsaJwksProvider.cs:16-22`, whose comment states that the -default mode would cache a factory exception forever and brick `/.well-known/jwks.json`), and the -PEM-reading comment at `:66-68` says the provider runs on the first request with only a successful -result cached: the body's "cached for the process lifetime, because key material is loaded once at -startup" was wrong on both halves and is corrected. Empty-key-set fallback confirmed in the same -file's class doc (`:10-11`). JWKS discovery is routed through the YARP gateway. Login dual-fetch: -`MMCA.Common.Application` ships the abstract `AuthenticationServiceBase` -(`Auth/AuthenticationServiceBase.cs:74`) whose `LoginAsync` (`:156`) runs the untracked-then-tracked -flow (untracked `FindUntrackedByEmailAsync` at `:181`, tracked `Repository.GetByIdAsync` re-fetch at -`:232`; the base doc comment names the "untracked-then-tracked dual-fetch" at `:22`). ADC's and -Store's sealed subclasses re-label it "dual-fetch pattern" in their class doc comments -(`MMCA.ADC/Source/Modules/Identity/MMCA.ADC.Identity.Application/Users/AuthenticationService.cs:17`, -class at `:46`; -`MMCA.Store/Source/Modules/Identity/MMCA.Store.Identity.Application/Users/AuthenticationService.cs:16`, -class at `:22`). The v1.82.0 forwarded-path pin `ValidAlgorithms = [SecurityAlgorithms.RsaSha256]` is -`Source/Presentation/MMCA.Common.API/Startup/WebApplicationBuilderExtensions.cs:601`, inside the -private `AddForwardedJwtBearerCore` (`:570`); the in-process pins in `BuildValidationParameters` -(`:728`) are `:751` (RS256, `[RsaSha256]`) and `:767` (HS256, `[HmacSha256]`). Every one of those -anchors drifted again from the 2026-08-22 audit's `:521`/`:490`/`:647`/`:670`/`:686` (itself past -`:464`/`:613`/`:629` and `:274`/`:308`/`:434`), the fourth successive move of this block; the behavior -is unchanged, and the §11 scorecard row cites the same current `:601` and `:751,767`. -Secure-by-default HTTPS metadata: the only public `AddForwardedJwtBearer` is the -`(authority, audience, IConfiguration, IHostEnvironment, bool? requireHttpsMetadata = null)` overload -(`:545-550`), resolving `requireHttpsMetadata` then `configuration.GetValue(RequireHttpsMetadataConfigKey)` -then `!environment.IsDevelopment()` at `:557-559`, with the public const -`RequireHttpsMetadataConfigKey = "Authentication:JwtBearer:RequireHttpsMetadata"` at `:56`. The -transitional bare-bool overloads are gone: both forms are `*REMOVED*` in -`MMCA.Common.API/PublicAPI.Unshipped.txt:2-3`, and the shipping surface is `:42` (extension form), -`:65` (the config const) and `:76` (static form). A resolved `false` outside Development registers -`InsecureJwtMetadataWarningStartupFilter` (`:561-565`), which moved to -`Startup/Auth/InsecureJwtMetadataWarningStartupFilter.cs` (an `IStartupFilter` because logging -providers are not configured during registration, `:10-16`; `LoggerMessage` at `:26`). The h2c opt-out -is real and auditable in both prod deployments, each preceded by a justification comment naming the -ACA internal-ingress h2c authority: `MMCA.ADC/infra/main.bicep:1830`, `:1962`, `:2112` (comment at -`:1827-1829`) and `MMCA.Store/infra/main.bicep:1652`, `:1779` (comment at `:1648-1651`). Those bicep -edits and the consumer test suites are landed, not held: the backlog records that the consumer sweep -landed and that ADC and Store both pin MMCA.Common 1.160.0 -(`Website/docs-src/governance/common-RemediationBacklog.md:1070-1072`). Permissive dev CORS is -unchanged: `AllowAnyOrigin` at `WebApplicationBuilderExtensions.cs:695` inside the -`#pragma warning disable S5122` at `:693` / restore at `:698` justifying it as Development-only, with -the credentialed policy's `AllowCredentials()` at `:691`; the gateway variant is -`Source/Hosting/MMCA.Common.Aspire/GatewayCorsExtensions.cs:38` (pragma `:36`/`:41`, -`AllowCredentials` at `:52`). Security fitness tests: `AnonymousEndpointTestsBase` moved to -`Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Api/AnonymousEndpointTestsBase.cs` (class -`:30`), matches `AllowAnonymousAttribute`, `AuthorizeAttribute` and `ControllerBase` by full name -(`:32-34`, so the package keeps zero ASP.NET references) and ships FIVE facts, not the three the -published article named: `AnonymousEndpoints_AreAllowListed` (`:79`), `ScannedEndpointSet_IsNotEmpty` -(`:91`, the non-vacuity floor), `AllowList_HasNoStaleEntries` (`:104`), -`Endpoints_DeclareAnAuthorizationDecision` (`:118`, gated by `RequireExplicitAuthorizationDecision`, -default `false` at `:68`) and `UndecoratedAllowList_HasNoStaleEntries` (`:141`). Attributes are read -`DeclaredOnly` + `inherit: false` (`:243`, `:266-268`) so a framework base action is reported once, -and the XML doc names the residual limitation, minimal-API `.AllowAnonymous()` metadata being -invisible to static reflection (`:18-24`). Common's own subclass moved to -`Tests/Architecture/MMCA.Common.Architecture.Tests/Api/AnonymousEndpointTests.cs:14`, scans the API -and UI assemblies (`:16-20`), opts into the stricter gate with -`RequireExplicitAuthorizationDecision => true` (`:63`) and sets `MinimumScannedTypes => 21` (`:67`, -"12 API controller types plus the routable UI pages"). Its allow-list holds 18 entries (`:22-58`), not -four: `AuthControllerBase.LoginAsync` / `.RegisterAsync` / `.RefreshAsync`, -`OAuthControllerBase.ExchangeAsync` / `.GoogleLogin` / `.GitHubLogin` / `.AppleLogin` / -`.CompleteAsync`, the two `PasswordResetAuthControllerBase` recovery actions (`ForgotPasswordAsync` / -`ResetPasswordAsync`, allow-listed under the reflected arity-suffixed full name), the five -`MMCA.Common.UI.Pages.Auth` credential pages (`Login`, `Register`, `ForgotPassword`, `ResetPassword`, -`OAuthComplete`) and three landing/outcome pages (`Home`, `Forbidden`, `NotFound`); the body was -corrected accordingly. Consumer subclasses set their own floors and all opt into the stricter gate: -ADC `MinimumScannedTypes => 80` -(`MMCA.ADC/Tests/Architecture/MMCA.ADC.Architecture.Tests/Api/AnonymousEndpointTests.cs:157`, gate at -`:152`), Store 35 -(`MMCA.Store/Tests/Architecture/MMCA.Store.Architecture.Tests/Api/AnonymousEndpointTests.cs:96`, gate -at `:92`), Helpdesk 1 -(`MMCA.Helpdesk/Tests/Architecture/MMCA.Helpdesk.Architecture.Tests/AnonymousEndpointTests.cs:35`, -gate at `:45`); their allow-list entry counts were not re-tallied this run. The executable invariant -tests run the real registration and read the produced options back: -`Tests/Presentation/MMCA.Common.API.Tests/Startup/Auth/ForwardedJwtBearerSecurityTests.cs` (moved -under `Startup/Auth/`) asserts the RS256 pin (`:25`), the resolution matrix (`:35` production-true, -`:40` development-false, `:45` config-key honored, `:59` explicit argument beats config), the -fail-fast on a cleartext authority with no opt-out (`:74`) and the startup-warning registration -(`:86`, absent in Development `:101`); -`Tests/Presentation/MMCA.Common.API.Tests/Startup/WebApplicationBuilderExtensionsTests.cs:248` -(permissive policy never supports credentials), `:265` (credentialed policy never allows any origin) -and `:282` (fails closed on no configured origins), with the gateway equivalents at -`Tests/Hosting/MMCA.Common.Aspire.Tests/Gateway/GatewayCorsExtensionsTests.cs:22,36,46`; and -`Tests/Core/MMCA.Common.Infrastructure.Tests/Auth/RsaJwksProviderTests.cs:73` -(`GetJsonWebKeySet_WhenGivenAPrivateKeyPem_ExportsOnlyThePublicParameters`). Counts per `FACTS.md:48`: -136 test methods across 53 abstract `*TestsBase` classes, of which Common's own build executes 267 -(`:51`); the framework publishes 19 packages (`:19`) at v1.205.0, snapshot 2026-09-17 (`:4`, `:14`). -Governance: the §11 Security row is at -`Website/docs-src/governance/common-ArchitectureScorecard.md:91` (Weight 3 / Maturity 4 / -Implementation 8 / Weighted 12/24, all four values unchanged, only the anchor moved; its stated -Implementation-8 caps remain deployer-delegated secret binding and RBAC with capability indirection). -The backlog's security-invariants wave sits at `common-RemediationBacklog.md:1066-1104` and records -the opposite of the earlier note: `:1099-1103` is a 2026-08-23 re-adjudication in which §11 WAS -re-scored with this evidence and HELD at Maturity 4 / Implementation 8, because the wave is -predominantly automatic enforcement of already-scored capability. The historical single-axis #11 -Security fix bullet for the NetArchTest security invariants is checked off at `:1558`, with the CI -vuln-audit gate at `:1557` and `SECURITY.md` at `:1559`.* +*Notes (evidence audit, 2026-10-02, MMCA.Common v1.221.0): Read this run. ADR-004 +(`Website/docs-src/adr/004-authentication-dual-fetch.md`) is titled "Cross-Service Token Validation +via JWKS / OIDC Discovery" (`:1`) and never uses the phrase "dual-fetch" in its body: the body's former +framing ("discover the key, fall back to an empty set. That is the dual-fetch") was unsupported and is +replaced by what the ADR does say. Empty-set issuer hygiene: `:32-34` and `:112-114`; central mapping +of both well-known endpoints `:35-40`; unpinned `ValidIssuer` `:59-61`, confirmed in source at +`MMCA.Common/Source/Presentation/MMCA.Common.API/Startup/WebApplicationBuilderExtensions.Authentication.cs:94-99`. +Discovery routing and its fallback (ADR-004 `:73-80`) are the local AppHost path only: +`MMCA.Common/Source/Hosting/MMCA.Common.Aspire.Hosting/Extensions.cs:309-311` (`WithJwksDiscovery`, +optional gateway), gateway-vs-fallback comment `:325-331`, endpoint choice `:332-333`. Both deployed +environments set the authority to Identity's internal ingress directly, so the body's former "JWKS +discovery is routed through the YARP gateway ... the gateway route updates, not every consumer" was +wrong for production and is rewritten: `MMCA.ADC/infra/main.bicep:1937`, `:2071`, `:2223` and +`MMCA.Store/infra/main.bicep:1681`, `:1813` (`Authentication__JwtBearer__Authority` = +`'http://${identityApp.name}'`). The JWKS bullet the body sources is `MMCA.Common/AGENTS.md:131` under +`### Microservices Extraction Boundaries` (`:125`); `MMCA.Common/CLAUDE.md` is now only an `@AGENTS.md` +import, so the citation moved (that bullet still says "discovery routes through the gateway", which is +true of the AppHost path only). Login dual-fetch, behavior unchanged, anchors moved: +`MMCA.Common/Source/Core/MMCA.Common.Application/Auth/AuthenticationServiceBase.cs:63` (class), +`LoginAsync` `:105`, untracked `FindUntrackedByEmailAsync` `:130`, tracked `Repository.GetByIdAsync` +`:181`, "untracked-then-tracked dual-fetch" doc comment `:21`; ADC +`MMCA.ADC/Source/Modules/Identity/MMCA.ADC.Identity.Application/Users/AuthenticationService.cs:20` +("dual-fetch pattern", class `:50`) and Store +`MMCA.Store/Source/Modules/Identity/MMCA.Store.Identity.Application/Users/AuthenticationService.cs:20` +(class `:26`). Forwarded JWT bearer moved to the partial file +`WebApplicationBuilderExtensions.Authentication.cs`: sole public `AddForwardedJwtBearer` `:51-56`, +three-step resolution `:63-65`, `RequireHttpsMetadataConfigKey` const `:24`, +`InsecureJwtMetadataWarningStartupFilter` registration `:67-71`, private `AddForwardedJwtBearerCore` +`:76`, forwarded RS256 pin `ValidAlgorithms = [SecurityAlgorithms.RsaSha256]` `:107`; in-process +`BuildValidationParameters` `:207`, RS256 pin `:230`, HS256 pin `:246`. Public surface is in +`MMCA.Common.API/PublicAPI.Shipped.txt` (extension form `:429`, const `:483`, static form `:578`); the +Unshipped file carries no `*REMOVED*` lines and no bare-bool overload is present. h2c opt-out with +justification comments: ADC `main.bicep:1941`, `:2075`, `:2227` (comments `:1938-1940`, +`:2072-2074`, `:2224-2226`), Store `main.bicep:1686`, `:1818` (comments `:1682-1685`, `:1814-1817`). +Dev CORS in `WebApplicationBuilderExtensions.cs`: credentialed `AllowCredentials()` `:136`, +`#pragma warning disable S5122` `:138`, `AllowAnyOrigin()` `:140`, restore `:143`. ADR-122 fold-in +(new body bullet, user-approved): `Website/docs-src/adr/122-dev-only-relaxations-fail-closed.md` +decision `:22-23`, three gates `:27-40`, `RequireHttpsMetadata` as the hybrid `:42-45`, plain checks +`:47-67`, trade-offs `:88-96`; source verified this run: +`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/SensitiveDataLoggingGate.cs:35-36` +(AND of setting and `environment?.IsDevelopment() == true`, null rule `:18-22`), +`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Mail/SmtpTransportSecurity.cs:48` +(`environment?.IsDevelopment() != true`) and `:72` (the non-Development warning condition), +`MMCA.Common/Source/Core/MMCA.Common.AI/DependencyInjection.cs:262` (`IsDevelopmentHost`), called at +`:177`, "Fails CLOSED" remark `:257`. Anonymous-endpoint fitness: Common's subclass +`MMCA.Common/Tests/Architecture/MMCA.Common.Architecture.Tests/Api/AnonymousEndpointTests.cs:14` +holds 19 entries (`:22-61`), not 18: the ten actions are unchanged (`:26-45`) and the credential pages +are six (`:51-56`, `ConfirmEmail` added beside `ForgotPassword`, `Login`, `OAuthComplete`, `Register`, +`ResetPassword`), plus `Forbidden`, `Home`, `NotFound` (`:58-60`); stricter gate `:66`, +`MinimumScannedTypes => 21` `:70`. Consumer floors: ADC 80 +(`MMCA.ADC/Tests/Architecture/MMCA.ADC.Architecture.Tests/Api/AnonymousEndpointTests.cs:151`, gate +`:146`), Store 37 (was 35; +`MMCA.Store/Tests/Architecture/MMCA.Store.Architecture.Tests/Api/AnonymousEndpointTests.cs:98`, gate +`:90`), Helpdesk 1 +(`MMCA.Helpdesk/Tests/Architecture/MMCA.Helpdesk.Architecture.Tests/AnonymousEndpointTests.cs:35`, gate +`:45`). Counts per `MMCA.Common/FACTS.md`: 141 test methods across 55 abstract `*TestsBase` classes +(`:51`), of which Common's own build executes 339 (`:54`); 22 published packages (`:19`); v1.221.0 as +of 2026-10-02 (`:4`, `:14`). Governance: the §11 Security row is at +`Website/docs-src/governance/common-ArchitectureScorecard.md:75`, and the backlog's open-work table +holds #11 at 4 / 8 (`Website/docs-src/governance/common-RemediationBacklog.md:12`, item `:38`, +Implementation lever "not yet identified" at `:99`). The earlier backlog anchors (`:1066-1104`, the +1.160.0 consumer-sweep pin, the 2026-08-23 re-adjudication, the checked bullets at `:1557-1559`) no +longer exist after the backlog restructure and are dropped. The scorecard row itself still cites the +stale `WebApplicationBuilderExtensions.cs:601` and `:751,767`; that is the scorecard's drift, not +this article's. Carried from the 2026-10-02 audit's CONFIRMED verdicts and not re-opened in this +apply pass: `JwtSettings.cs:30` (RS256 default), `RsaJwksProvider.cs:21` (PublicationOnly lazy, +public-only export, empty set), `JwksEndpointExtensions.cs:20`, `TokenService.cs:197` +(`GetPrincipalFromExpiredToken` pin), `InsecureJwtMetadataWarningStartupFilter.cs:26`, +`GatewayCorsExtensions.cs:38`, `AnonymousEndpointTestsBase.cs:30` (five facts), the invariant tests +starting at `ForwardedJwtBearerSecurityTests.cs:25`, `PasswordHasher.cs:24`, and `LICENSE:2`.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/jwt-refresh-token-rotation.md b/docs-src/articles/jwt-refresh-token-rotation.md index 54860f20..ae6748d3 100644 --- a/docs-src/articles/jwt-refresh-token-rotation.md +++ b/docs-src/articles/jwt-refresh-token-rotation.md @@ -2,6 +2,8 @@ > Series: MMCA.Common · Article #27 (deep-dive) · Pillar P2 · Group G08 · Rubric §11 · ADR-097 · > Status: grounded in `Website/docs-src/adr/097-multi-device-refresh-sessions.md`, +> `MMCA.Common.Application/Auth/Sessions/AuthSessionIssuer.cs`, +> `MMCA.Common.Application/Auth/RefreshSessionSettings.cs`, > `MMCA.Common.Application/Auth/AuthenticationServiceBase.cs`, > `MMCA.Common.Domain/Auth/RefreshSession.cs`, and > `MMCA.Common.Infrastructure/Auth/TokenService.cs`. No em dashes. @@ -47,161 +49,215 @@ module inherits the same answer instead of re-litigating it per app. ## The MMCA answer: one hashed session per device, rotated on every use -The whole workflow lives in one place: `AuthenticationServiceBase` -(`AuthenticationServiceBase.cs:74`). Both apps' Identity modules subclass it and change nothing about the -token logic. Here is the model, piece by piece. +The workflow is split in two, and the split is the first design decision. `AuthenticationServiceBase` +(`AuthenticationServiceBase.cs:63`) decides who is signed in: credentials, lockout, the app's gates. +`IAuthSessionIssuer` (`IAuthSessionIssuer.cs:26`) decides what they are handed: the multi-device refresh +sessions, rotation, reuse detection, the per-user cap and the session claims on the access token, "so this +workflow never touches a session row" (`AuthenticationServiceBase.cs:40-43`). The framework's implementation +is the sealed `AuthSessionIssuer` (`AuthSessionIssuer.cs:39`), registered scoped by `AddInfrastructure` +(`MMCA.Common.Infrastructure/DependencyInjection.cs:176`). Both apps' Identity modules subclass the base, +hand it the issuer, and change nothing about the token logic. Here is the model, piece by piece. **The access token is stateless; the refresh side is one row per signed-in device.** The access token is a signed JWT whose `exp` comes from `JwtSettings.AccessTokenExpirationMinutes` (default 15 minutes, -`JwtSettings.cs:61`), written by `TokenService.GenerateAccessToken` (`TokenService.cs:91`, expiry stamped at -`:138`). The refresh side is `RefreshSession`, a flat framework record with one row per signed-in device -(`RefreshSession.cs:31`): the user id, a token hash, an issue instant, an expiry, and revocation -bookkeeping (`:61,64,67,70,73,79,82`). Refresh tokens are deliberately absent from the credential contract +`JwtSettings.cs:61`), written by `TokenService.GenerateAccessToken` (`TokenService.cs:101`, expiry stamped at +`:148`). The refresh side is `RefreshSession`, a sealed framework record with one row per signed-in device +(`RefreshSession.cs:39`): the user id, a token hash, an issue instant, an expiry, and revocation +bookkeeping (`:69,72,75,78,81,87,90`). Refresh tokens are deliberately absent from the credential contract the user aggregate exposes to the workflow: `IAuthUser` carries password material only (`IAuthUser.cs:9-14,20,23`). A user holds as many live sessions as they have signed-in devices, bounded by a -per-user cap (`AuthenticationServiceBase.cs:41-51`). +per-user cap (`AuthSessionIssuer.cs:17-26`). Every access token the issuer mints names the session behind it +in a `sid` claim, stamped by a pass-through token service that wraps the real one +(`SessionStampingTokenService`, `AuthSessionIssuer.cs:474`, claim added at `:506-511`), so the app's claim +code never has to know the claim exists. **The stored value is a digest, not the token.** `TokenService.GenerateRefreshToken` draws 64 bytes from -`RandomNumberGenerator.GetBytes` and base64-encodes them (`TokenService.cs:145,147,148`). That plaintext +`RandomNumberGenerator.GetBytes` and base64-encodes them (`TokenService.cs:155,157,158`). That plaintext lives only in the response that hands it to the client. What the store keeps is `RefreshSession.TokenHash`, -an unsalted hex SHA-256 digest of the token's UTF-8 bytes (`RefreshSession.cs:63,160-163`), exactly 64 -characters wide (`:33,34`). The digest is deterministic on purpose, because lookup is by hash: a presented +an unsalted hex SHA-256 digest of the token's UTF-8 bytes (`RefreshSession.cs:72,173-177`), exactly 64 +characters wide (`:41-42`). The digest is deterministic on purpose, because lookup is by hash: a presented token finds its row through `FindByTokenHashAsync(RefreshSession.HashToken(token))` -(`AuthenticationServiceBase.cs:734-736`). A database read therefore yields digests, and a digest is not -something you can present. - -**Issuing opens a session; refreshing rotates one.** Login (`AuthenticationServiceBase.cs:245`) and -registration (`:330`) both route through `IssueTokensAsync` (`:554`), which opens a fresh session (`:566`, -body `OpenSessionAsync` at `:762`), saves it (`:572`), and returns the token pair (`:574-577`). Refresh runs -its own path. `RefreshTokenAsync` (`:334`) resolves the presented token to its session -(`ResolveRotatableSessionAsync`, called at `:379`, body `:723`) and then rotates it (`RotateAsync`, called -at `:387`, body `:801`). Rotation mints a successor session (`:809-816`) and claims the presented row -through `IRefreshSessionStore.TryRotateAsync` (`:824-826`), which revokes it and links it to that successor -via `ReplacedByTokenHash` (`RefreshSession.cs:46,79,174-186`). The consequence is the important part: the -instant a successor is issued, the token that bought it is spent, and the revoked row it leaves behind is -precisely what makes a replay visible. There is no grace period. +(`AuthSessionIssuer.cs:286-288`). A database read therefore yields digests, and a digest is not something +you can present. + +**Issuing opens a session; refreshing rotates one.** Login (`AuthenticationServiceBase.cs:105`, issuing at +`:194`) and registration (`:203`, issuing at `:279`) both route through `IssueTokensAsync` (`:417`), which +hands the user to `IAuthSessionIssuer.IssueAsync` (`:425`). The issuer opens a fresh session +(`AuthSessionIssuer.cs:75`, body `OpenSessionAsync` at `:322`) before the access token is minted, because +the token carries the session's id, then saves it (`:81`) and returns the token pair (`:83-86`). Refresh runs +its own path. `RefreshTokenAsync` (`AuthenticationServiceBase.cs:283`) calls `RotateAsync` +(`:337`; `AuthSessionIssuer.cs:90`), which resolves the presented token to its session +(`ResolveRotatableSessionAsync`, called at `:101`, body `:275`) and then rotates it (`RotateSessionAsync`, +called at `:109`, body `:361`). Rotation mints a successor session (`:369-376`) and claims the presented row +through `IRefreshSessionStore.TryRotateAsync` (`:384-386`), which revokes it with reason `Rotated` and links +it to that successor via `ReplacedByTokenHash` (`EFRefreshSessionStore.cs:125-130`; `RefreshSession.cs:54,87`). +The successor is a new row with a new id, so the access token handed back carries a new `sid` too +(`AuthSessionIssuer.cs:116-122`). The consequence is the important part: the instant a successor is issued, +the token that bought it is spent, and the rotated row it leaves behind is precisely what makes a replay +visible. There is no grace period. **Refresh binds to the same principal through the expired access token.** `RefreshTokenAsync` requires the client to present the just-expired access token alongside the refresh token, and runs it through -`TokenService.GetPrincipalFromExpiredToken` (`AuthenticationServiceBase.cs:348`). That method validates +`TokenService.GetPrincipalFromExpiredToken` (`AuthenticationServiceBase.cs:297`). That method validates issuer, audience, signing key, and the pinned algorithm, and skips only the lifetime check -(`TokenService.cs:164,168,169,170,172,177`, with the algorithm re-checked against the header at `:187`). An -unsigned, wrong-audience, or algorithm-swapped token yields no principal and the refresh fails -(`AuthenticationServiceBase.cs:349-353`). The user id rides the standard `sub` claim -(`TokenService.cs:100-106`), read at `AuthenticationServiceBase.cs:358` and used to load the account at -`:365`. - -**Three rejections, deliberately different behind one error.** `ResolveRotatableSessionAsync` (`:723`) is -the reuse-detection step, and it separates three cases the caller cannot tell apart. An unknown hash, or one -belonging to another account, says nothing about a live session and fails alone (`:738-741`): revoking the -family on it would let anyone holding one of this user's expired access tokens sign them out everywhere by -posting a random string. A **revoked** row means this exact token was already rotated away or signed out and -has come back, which is the BR-206 reuse signal, so every live session the user holds is revoked with reason -`ReuseDetected` (`:743-750`, `RefreshSession.cs:52`). An **expired** row is an ordinary end of life, so that -device re-authenticates and the user's other devices keep working (`:752-754`). All three answer with the -same `Auth.InvalidRefreshToken` error (`:883,884`), so the distinction lives in what happens behind it, not -in what the caller learns. +(`TokenService.cs:174,178,179,180,182,187`, with the algorithm re-checked against the header at `:196-197`). +An unsigned, wrong-audience, or algorithm-swapped token yields no principal and the refresh fails +(`AuthenticationServiceBase.cs:298-302`). The user id rides the standard `sub` claim +(`TokenService.cs:110-116`), read at `AuthenticationServiceBase.cs:307` and used to load the account at +`:314`. A second factor the user already verified rides across the rotation too: the `mfa` claim is read off +the signature-validated presented token and stamped on the successor (`:327-332`). + +**One error, four different consequences.** `ResolveRotatableSessionAsync` (`AuthSessionIssuer.cs:275`) is +the reuse-detection step, and it separates cases the caller cannot tell apart. A blank token, an unknown +hash, or one belonging to another account says nothing about a live session and fails alone (`:281-284`, +`:290-293`): revoking the family on it would let anyone holding one of this user's expired access tokens sign +them out everywhere by posting a random string. A **revoked** row splits by why it died (`IsReuseSignal`, +`:409-417`). A row that was rotated away (it carries a successor hash) or already flagged as reuse has come +back, which is the BR-206 reuse signal, so every live session the user holds is revoked with reason +`ReuseDetected` (`:305-309`, `RefreshSession.cs:60`). A row that was signed out or evicted by the session cap +only lost its session, which is not a theft signal, so that request fails alone and the user's other devices +keep working (`:297-303`). Any other or missing reason counts as reuse, the conservative answer for a row the +code does not recognize (`:403-407,416`). An **expired** row is an ordinary end of life, so that device +re-authenticates and the rest are untouched (`:312-314`). Every branch answers with the same +`Auth.InvalidRefreshToken` error (`:257-261`), so the distinction lives in what happens behind it, not in +what the caller learns. **A simultaneous replay gets the replay answer.** Two requests presenting the same still-live token both -read an un-revoked row, so the store arbitrates rather than memory: `TryRotateAsync` decides which request -owns the rotation, and the one that loses the claim is treated exactly as a replay, whole live family -revoked (`:824-838`). A caller cannot distinguish the two situations, and neither does the workflow. +read an un-revoked row, so the store arbitrates rather than memory: `TryRotateAsync` is a conditional +update on `RevokedAt IS NULL` (`EFRefreshSessionStore.cs:125`), and the request that loses the claim is +treated exactly as a replay, whole live family revoked (`AuthSessionIssuer.cs:388-398`). A caller cannot +distinguish the two situations, and neither does the workflow. **The expiry slides on every rotation.** Every session is stamped with its issue instant plus -`RefreshTokenLifetime`, both when one is opened (`:774`) and when a successor is minted (`:814`). That -property reads `TokenService.RefreshTokenLifetime` (`TokenService.cs:155`), derived from +`RefreshTokenLifetime`, both when one is opened (`AuthSessionIssuer.cs:334`) and when a successor is minted +(`:374`). That property reads `TokenService.RefreshTokenLifetime` (`TokenService.cs:165`), derived from `JwtSettings.RefreshTokenExpirationDays` (`JwtSettings.cs:64`, default 7 days). A device that refreshes at least once inside each window stays signed in indefinitely; re-authentication is required only after a full lifetime passes with no successful refresh, or after a revocation. If the configured value is non-positive, -the base falls back to the seven-day BR-205 default rather than failing startup -(`AuthenticationServiceBase.cs:145,146`; interface default `ITokenService.cs:40`). - -**A per-user cap bounds the family.** `MaxActiveSessionsPerUser` reads -`RefreshSessions:MaxActiveSessionsPerUser`, default 10, validated to the range 1-1000 at startup -(`:148-153`). Opening one session past the cap revokes the user's oldest live session with reason -`SessionCapExceeded` rather than refusing the sign-in (`EnforceSessionCapAsync` at `:864`, eviction loop -`:873-876`, reason constant `RefreshSession.cs:55`). Expired-but-unrevoked rows authenticate nobody and do -not count against the cap; they age out with the framework's retention sweep, -`RefreshSessionCleanupService` over the `RefreshSessions:RetentionDays` window (`:857-862`). - -**Explicit revocation names one device or takes them all.** `RevokeTokenAsync` (`:416`) accepts an optional -refresh token. A live session belonging to that user is revoked alone with reason `SignedOut`, which is the -sign-out-this-device path (`:431-447`). Anything else (an unknown token, another account's token, an -already-revoked row) leaves the caller unidentifiable, so the request degrades to revoking every live -session the user holds rather than reporting success for a revocation that reached nothing (`:450`). +the issuer falls back to the seven-day BR-205 default (and to fifteen minutes for the access token) rather +than failing startup (`AuthSessionIssuer.cs:55-59`; interface default `ITokenService.cs:40`). + +**A per-user cap bounds the family.** `RefreshSessionSettings.MaxActiveSessionsPerUser` binds +`RefreshSessions:MaxActiveSessionsPerUser`, default 10, range 1-1000 (`RefreshSessionSettings.cs:34-35`), +validated at startup (`MMCA.Common.Infrastructure/DependencyInjection.cs:168-171`). Opening one session past +the cap revokes the user's oldest live session with reason `SessionCapExceeded` rather than refusing the +sign-in (`EnforceSessionCapAsync` at `AuthSessionIssuer.cs:442`, eviction loop `:451-454`, constant +`ReasonSessionCap` at `RefreshSession.cs:63`). Expired-but-unrevoked rows authenticate nobody and do not +count against the cap; they age out with the framework's retention sweep, `RefreshSessionCleanupService` +over the `RefreshSessions:RetentionDays` window (default 30, `RefreshSessionSettings.cs:71-72`), which the +host runs once `RefreshSessions:Enabled` is set (`DependencyInjection.cs:181-184`). + +**Explicit revocation names one device or takes them all.** `RevokeTokenAsync` +(`AuthenticationServiceBase.cs:352`) hands an optional refresh token to `SignOutAsync` +(`AuthSessionIssuer.cs:148`). A live session belonging to that user is revoked alone with reason +`SignedOut`, which is the sign-out-this-device path (`:162-169`). Anything else (an unknown token, another +account's token, an already-revoked row) leaves the caller unidentifiable, so the request degrades to +revoking every live session the user holds rather than reporting success for a revocation that reached +nothing (`:172`). Beside it sit a deliberate sign-out-everywhere (`RevokeAllSessionsAsync`, +`AuthenticationServiceBase.cs:369`, into `SignOutEverywhereAsync`, `AuthSessionIssuer.cs:177`), a device list +(`GetSessionsAsync` `:386`, `ListActiveAsync` `:191`), and a revoke-by-session-id (`RevokeSessionByIdAsync` +`:402`, `RevokeSessionAsync` `:227`) whose ownership check is the store query itself, so another account's +session id and one that never existed both answer `NotFound` (`:232-240`). ```csharp -// ResolveRotatableSessionAsync: three rejections, one error (shape, not byte-for-byte). -var session = await refreshSessions.FindByTokenHashAsync(RefreshSession.HashToken(refreshToken), ct); +// AuthSessionIssuer.ResolveRotatableSessionAsync: one error, four consequences (shape, not byte-for-byte). +if (string.IsNullOrWhiteSpace(refreshToken)) +{ + return Failure(InvalidRefreshTokenError()); +} +var session = await refreshSessions.FindByTokenHashAsync(RefreshSession.HashToken(refreshToken), ct); if (session is null || !session.UserId.Equals(userId)) { - return Failure(InvalidRefreshTokenError()); // says nothing about a live session: fail alone + return Failure(InvalidRefreshTokenError()); // says nothing about a live session: fail alone } -if (session.IsRevoked) // this exact token was already spent, and came back +if (session.IsRevoked) { + if (!IsReuseSignal(session)) + { + return Failure(InvalidRefreshTokenError()); // signed out or cap-evicted: this device alone + } + await RevokeLiveSessionsAsync(userId, RefreshSession.ReasonReuseDetected, now, ct); - await refreshSessions.SaveChangesAsync(ct); // BR-206: the whole live family goes + await refreshSessions.SaveChangesAsync(ct); // BR-206: a rotated-away token came back return Failure(InvalidRefreshTokenError()); } -return session.ExpiresAt <= now // an ordinary end of life: this device alone +return session.ExpiresAt <= now // an ordinary end of life: this device alone ? Failure(InvalidRefreshTokenError()) : Success(session); -// RotateAsync: the store, not memory, decides which request owns the rotation. -var successor = RefreshSession.Create(userId, tokenService.GenerateRefreshToken(), now, now.Add(RefreshTokenLifetime)); +// IsReuseSignal: rotated (a successor hash), or any reason other than SignedOut / SessionCapExceeded. +static bool IsReuseSignal(RefreshSession s) => + s.ReplacedByTokenHash is not null + || s.ReasonRevoked is not (RefreshSession.ReasonSignedOut or RefreshSession.ReasonSessionCap); + +// RotateSessionAsync: the store, not memory, decides which request owns the rotation. +var refreshToken = tokenService.GenerateRefreshToken(); +var successor = RefreshSession.Create(userId, refreshToken, now, now.Add(RefreshTokenLifetime), ipAddress, userAgent); if (!await refreshSessions.TryRotateAsync(session, successor.Value!, now, ct)) { await RevokeLiveSessionsAsync(userId, RefreshSession.ReasonReuseDetected, now, ct); - return Failure(InvalidRefreshTokenError()); // lost the claim: answered exactly like a replay + await refreshSessions.SaveChangesAsync(ct); + return Failure(InvalidRefreshTokenError()); // lost the claim: answered exactly like a replay } ``` ## Both apps inherit it; the OAuth path opens the same session The rotation, reuse detection, session cap, and lifetime logic are identical in ADC and Store because -neither one owns a copy. ADC's `AuthenticationService` (`AuthenticationService.cs:46`) and Store's -(`AuthenticationService.cs:22`) each take `ITokenService` and `IRefreshSessionStore` (ADC `:54`, Store -`:29`) and forward them into the base constructor (ADC `:56-64`, Store `:31-39`) along with the -refresh-session options carried on an app settings object. What the subclasses supply is app-specific hooks: -the claim set (ADC's `speaker_id`, Store's `customer_id`), the deactivated-account gates, the registration -side effect. The security-relevant token workflow is not in either subclass. +neither one owns a copy. ADC's `AuthenticationService` (`AuthenticationService.cs:50`) and Store's +(`AuthenticationService.cs:26`) each take an `IAuthSessionIssuer` (ADC `:56`, Store `:31`) and forward it into +the base constructor (ADC `:58`, Store `:33`); the token lifetimes and the cap are configuration (the `Jwt` +and `RefreshSessions` sections), not constructor arguments (ADC `:44-47`). What the subclasses supply is +app-specific hooks: the claim set (ADC's `speaker_id`, Store's `customer_id`), the deactivated-account +gates, the registration side effect. They mint through the base's `TokenService` property, which is the +issuer's `sid`-stamping wrapper (`AuthenticationServiceBase.cs:98`). The security-relevant token workflow is +not in either subclass. That single-source property is what makes ADC's external OAuth login (ADR-036) fall in line for free. The -external-login body (`AuthenticationService.cs:205`) ends by calling the shared `IssueTokensAsync` (`:304`), -so a federated sign-in opens a refresh session through exactly the path a password sign-in takes: hashed at -rest, counted against the same per-user cap, rotated through the same chain. A user who signed in with -Google gets the same guarantees as one who typed a password, because both go through the same base method. +external-login body (`ExternalLoginCoreAsync`, ADC `AuthenticationService.cs:204`) ends by calling the shared +`IssueTokensAsync` (`:316`), so a federated sign-in opens a refresh session through exactly the path a +password sign-in takes: hashed at rest, counted against the same per-user cap, rotated through the same +chain. A user who signed in with Google gets the same guarantees as one who typed a password, because both +go through the same issuer. ## Trade-offs, honestly This model is a deliberate set of choices, and ADR-097 names the edges rather than hiding them. - **Every device is its own row, so sign-ins grow a table.** A session is a device fact rather than an - account fact, which is the point: signing in on a phone leaves the laptop signed in - (`AuthenticationServiceBase.cs:41-43`). The cost is unbounded growth without two guards, and both are - there: a per-user cap that evicts the oldest live session (`:864,873-876`) and a retention sweep that ages - the table out (`:857-862`). A revoked row is kept rather than deleted, because it is the evidence the - reuse check reads. + account fact, which is the point: signing in on a second device leaves the first signed in + (`AuthSessionIssuer.cs:17-18`). The cost is unbounded growth without two guards, and both are there: a + per-user cap that evicts the oldest live session (`:442,451-454`) and a retention sweep that hard-deletes + dead rows after `RetentionDays` (`RefreshSessionSettings.cs:54-58`). A revoked row survives that window + because it is the evidence the reuse check reads; once it is swept, the same replay reads as an unknown + token and fails alone. The thirty-day default sits well past the seven-day token lifetime, so a token still + capable of being replayed always has its row, and lowering the window below that lifetime gives the + guarantee up (`:60-66`). - **Reuse detection is aggressive by design.** Two browser tabs refreshing at the same instant present the same still-live token, one of them loses the `TryRotateAsync` claim, and the loser is answered as a replay - with the family revoked (`:824-838`). A benign race is indistinguishable from theft, so failing closed is - chosen over a convenient short reuse-grace window. + with the family revoked (`AuthSessionIssuer.cs:388-398`). A benign race is indistinguishable from theft, so + failing closed is chosen over a convenient short reuse-grace window. +- **Only a rotated token is evidence.** A token from a device that was signed out or cap-evicted fails alone + (`:297-303`), so an ordinary sign-out never ends the user's other sessions. The flip side is that a thief + replaying a token whose device was already signed out triggers nothing beyond that one rejection; the + family-wide response is reserved for the case that proves two parties held the same lineage. - **The refresh path is server-side write state.** Unlike the fully stateless access token, every issue - inserts a row and every refresh revokes one and inserts its successor (`:762-787`, `:801-841`), so refresh - always costs a write to the Identity database. That is the price of being able to revoke. + inserts a row and every refresh revokes one and inserts its successor (`OpenSessionAsync` `:322-348`, + `RotateSessionAsync` `:361-401`), so refresh always costs a write to the Identity database. That is the + price of being able to revoke. - **No absolute cap anchored to the opening login.** Because the expiry is re-stamped on every rotation - (`:814`), the seven-day window bounds inactivity, not total session age, and a continuously active client + (`:374`), the seven-day window bounds inactivity, not total session age, and a continuously active client stays signed in indefinitely. The per-user cap bounds how many devices, and the retention sweep bounds how long a dead row lingers, but neither ends a chain that keeps refreshing. An absolute cap on session age is deliberately not imposed. - **A non-positive configured lifetime falls back silently.** A zero or negative `RefreshTokenExpirationDays` (or a test double reporting `TimeSpan.Zero` via the interface default, `ITokenService.cs:40`) is treated as absent and reverts to the seven-day baseline rather than failing startup - (`AuthenticationServiceBase.cs:145,146`). A misconfiguration quietly reverts to the default instead of - surfacing an error. + (`AuthSessionIssuer.cs:58-59`). A misconfiguration quietly reverts to the default instead of surfacing an + error. None of these are reasons to skip rotation. They are the reasons to wire it knowing what it does and does not promise. @@ -214,7 +270,7 @@ The pattern ports to any stack with a JWT story: a lifetime measured in minutes so the un-revocable window stays small. 2. **Give each device its own server-side session row, and rotate it on every refresh.** One row per sign-in, revoked and replaced the moment it is used, with the successor's identity recorded on the row it - replaced. The revoked row is not garbage: it is the detector. + replaced. The revoked row is not garbage: it is the detector, so keep it longer than the token could live. 3. **Store a digest, never the token.** Make the refresh token opaque random bytes (sixty-four is plenty), hand the plaintext to the client once, and keep only an unsalted hash so the lookup stays a single indexed read and a database dump mints nothing. @@ -222,22 +278,23 @@ The pattern ports to any stack with a JWT story: the expired token while skipping only the lifetime check, and re-verify issuer, audience, key, and algorithm so the token cannot tell you how to trust it. 5. **Split your rejections behind one error message.** An unknown token fails alone, an expired session fails - alone, and a revoked session revokes the user's whole live family. Returning one indistinguishable error - for all three keeps the detector from doubling as an oracle. + alone, a signed-out session fails alone, and a rotated-away session that comes back revokes the user's + whole live family. Record why each row was revoked so the detector can tell those apart, and return one + indistinguishable error for all of them so the detector does not double as an oracle. The takeaway: **a refresh token you rotate on every use, store only as a hash, and answer with a family-wide -revoke the instant a spent one reappears, turns a long-lived stealable secret into a session that ends +revoke the instant a rotated-away one reappears, turns a long-lived stealable secret into a session that ends itself.** The stateless access token stays fast; the write on refresh is what buys you the ability to revoke one device or all of them. --- **What we covered:** why a stateless access token forces a refresh token and a refresh token forces a theft -story, how MMCA.Common keeps one hashed `RefreshSession` row per signed-in device and rotates it through a -store-arbitrated claim, how a revoked row is the reuse signal that revokes a user's whole live family while -an expired one fails alone, and the honest trade-offs (a growing table, aggressive reuse detection, a -server-side write per refresh, no absolute session-age cap, a silent lifetime fallback) that come with -choosing to fail closed. +story, how MMCA.Common splits who-is-signed-in from what-they-are-handed and keeps one hashed +`RefreshSession` row per signed-in device, rotated through a store-arbitrated claim, how a rotated-away row +is the reuse signal that revokes a user's whole live family while a signed-out, cap-evicted or expired one +fails alone, and the honest trade-offs (a growing table, aggressive reuse detection, a server-side write per +refresh, no absolute session-age cap, a silent lifetime fallback) that come with choosing to fail closed. **Next in the series:** the write-once REST surface every entity inherits: generic entity controllers that give a new aggregate its full CRUD API without a hand-written controller per type. @@ -249,51 +306,60 @@ pattern, or `dotnet add package MMCA.Common.Application` and try it.* *Tags: .NET, C Sharp, Software Architecture, Authentication, Security* -*Notes (evidence audit, 2026-09-19): the article's premise was re-grounded this run and every named type, -anchor and number re-read from source. Governing record: ADR-097 "Multi-Device Refresh Sessions (Hashed, -Rotating, Per Device)", Accepted 2026-08-26, revised 2026-08-27, 2026-09-01 and 2026-09-07 -(`Website/docs-src/adr/097-multi-device-refresh-sessions.md:1-19`); it supersedes the storage model of -ADR-050, which is marked "Superseded by ADR-097 (2026-09-01)" and whose storage, revocation, claim and -single-session details are recorded there as not describing the code -(`Website/docs-src/adr/050-jwt-refresh-token-rotation.md:3-29`). The header blockquote, the CTA link and the -trade-offs attribution were repointed from ADR-050 to ADR-097 accordingly, and the title, the subtitle, the -"MMCA answer" heading and the "What we covered" paragraph were rewritten for the per-device model. Workflow -home: `AuthenticationServiceBase` declared at -`MMCA.Common/Source/Core/MMCA.Common.Application/Auth/AuthenticationServiceBase.cs:74`, model summary in its -class doc `:41-51`. Credential contract: `MMCA.Common.Domain/Auth/IAuthUser.cs:9-14` (refresh tokens -deliberately absent), `PasswordHash` :20, `PasswordSalt` :23; `UpdateRefreshToken` and `RevokeRefreshToken` -are declared by no production type, and neither app `User` aggregate carries refresh state. Session record: -`MMCA.Common.Domain/Auth/RefreshSession.cs:31` (sealed, framework bookkeeping rather than an aggregate, -`:22-29`), `TokenHash` :63,64, `TokenHashLength` 64 :33,34, `HashToken` (SHA-256 over UTF-8 bytes, -upper-case hex) :160-163, `Create` :112, `Revoke` :174-186, `ReplacedByTokenHash` :79, reason constants -`Rotated` :46, `SignedOut` :49, `ReuseDetected` :52, `SessionCapExceeded` :55, `IsActiveAt` :99. Access -token: `TokenService.GenerateAccessToken` (`MMCA.Common.Infrastructure/Auth/TokenService.cs:91`), `sub` as -the sole user-id claim :100-106, `exp` from `_jwtSettings.AccessTokenExpirationMinutes` at :138; default 15 -at `MMCA.Common.Infrastructure/Auth/JwtSettings.cs:61`. Refresh-token generation: 64 bytes from -`RandomNumberGenerator.GetBytes` + base64 at `TokenService.cs:145,147,148` -(`ITokenService.GenerateRefreshToken` declared -`MMCA.Common.Application/Interfaces/Infrastructure/Auth/ITokenService.cs:26`). Issue path: login -`AuthenticationServiceBase.cs:245` and registration :330 into `IssueTokensAsync` :554 (`OpenSessionAsync` -call :566, save :572, response :574-577); `OpenSessionAsync` body :762 (`GenerateRefreshToken` :769, -`RefreshSession.Create` :770-776, cap :784, staged insert :785). Refresh path: `RefreshTokenAsync` :334; -`GetPrincipalFromExpiredToken` call :348 and null-principal 401 :349-353; `sub` read :358; user load :365; -`ResolveRotatableSessionAsync` call :379 (body :723, hash lookup :734-736, unknown-or-wrong-user :738-741, -revoked-row family revoke :743-750, expired :752-754); `RotateAsync` call :387 (body :801, successor -:809-816, `TryRotateAsync` claim :824-826, lost-claim replay answer :828-838); rotated response :404-407. -`GetPrincipalFromExpiredToken` validation params at `TokenService.cs:164` (ValidateIssuer :168, -ValidateAudience :169, ValidateIssuerSigningKey :170, ValidateLifetime=false :172, ValidAlgorithms :177, alg -header re-check :187). Sliding expiry: `RefreshTokenLifetime` base property -`AuthenticationServiceBase.cs:145,146` reading `TokenService.RefreshTokenLifetime` (`TokenService.cs:155`, -`FromDays(_jwtSettings.RefreshTokenExpirationDays)`), default 7 at `JwtSettings.cs:64`; interface default -`ITokenService.cs:40`; stamped :774 (new session) and :814 (successor). Per-user cap: -`MaxActiveSessionsPerUser` :148-153 (`RefreshSessions:MaxActiveSessionsPerUser`, default 10, range 1-1000), -`EnforceSessionCapAsync` :864 with the eviction loop :873-876; retention sweep `RefreshSessionCleanupService` -over `RefreshSessions:RetentionDays` :857-862. Explicit revoke: `RevokeTokenAsync` :416, single-device branch -:431-447, degrade-to-all :450, `RevokeLiveSessionsAsync` :844. Shared rejection error :883,884. Sealed -subclasses: ADC `AuthenticationService.cs:46` (`IRefreshSessionStore` :54, base forward :56-64), Store -`AuthenticationService.cs:22` (`IRefreshSessionStore` :29, base forward :31-39). ADC OAuth path (ADR-036) -opens the same session: external-login body :205 returning `IssueTokensAsync` at :304. The code block is -illustrative-of-the-shape, condensed from `ResolveRotatableSessionAsync` (:729-754) and `RotateAsync` -(:809-838); it is not byte-for-byte. Prose verified free of em dashes and the banned boundary-noun.* +*Notes (evidence refresh, 2026-10-02, MMCA.Common v1.221.0): every named type, anchor and number re-read from +source this run. Change recorded here, not in the body: the session issue, rotate, reuse, cap and sign-out +logic the 2026-09-19 pass anchored in `AuthenticationServiceBase.cs` (anchors up to :884) lives in the +sealed `AuthSessionIssuer` (`MMCA.Common/Source/Core/MMCA.Common.Application/Auth/Sessions/AuthSessionIssuer.cs:39`, +528 lines) behind `IAuthSessionIssuer` (`Auth/Sessions/IAuthSessionIssuer.cs:26`; `TokenService` :34, +`IssueAsync` :46, `RotateAsync` :67, `SignOutAsync` :94, `SignOutEverywhereAsync` :100), registered +`TryAddScoped` at `MMCA.Common.Infrastructure/DependencyInjection.cs:176`; the base (`AuthenticationServiceBase.cs:63`, +609 lines) delegates, class doc :40-43. A revoked row no longer always revokes the family: `IsReuseSignal` +(`AuthSessionIssuer.cs:409-417`, doc :403-407) splits it, and the body, code block, trade-offs, apply item 5, +takeaway and "What we covered" were reworked for the four outcomes. Header Status repointed to +`AuthSessionIssuer.cs` and `RefreshSessionSettings.cs`; title, subtitle, ADR/group/rubric cells unchanged. +Governing record: ADR-097, Accepted 2026-08-26, revised 2026-08-27, 2026-09-01, 2026-09-07 +(`Website/docs-src/adr/097-multi-device-refresh-sessions.md:3-19`); ADR-050 superseded by it +(`050-jwt-refresh-token-rotation.md:4`). Honest gap: ADR-097's own body still cites base-class anchors and +predates the `IsReuseSignal` split, so this article is grounded on source, not on the ADR's anchors. +Base anchors: `LoginAsync` :105 (issue :194), `RegisterAsync` :203 (issue :279), `RefreshTokenAsync` :283 +(`GetPrincipalFromExpiredToken` :297, null principal :298-302, `GetUserId` :307, user load :314, `mfa` +carry :327-332, `RotateAsync` call :337), `RevokeTokenAsync` :352 (`SignOutAsync` :363), +`RevokeAllSessionsAsync` :369, `GetSessionsAsync` :386, `RevokeSessionByIdAsync` :402, `IssueTokensAsync` +:417 (`IssueAsync` :425), `TokenService` property :98. Issuer anchors: lifetime fallbacks :55-56 (15 min) +and :58-59 (7 days); `IssueAsync` :62 (open :75, save :81, response :83-86); `RotateAsync` :90 (resolve +:101, rotate :109, new `sid` :116-122); `SignOutAsync` :148 (single device :162-169, degrade :172); +`SignOutEverywhereAsync` :177; `ListActiveAsync` :191; `RevokeSessionAsync` :227 (NotFound :232-240, +already-revoked success :242-245); `InvalidRefreshTokenError` :257-261; `ResolveRotatableSessionAsync` :275 +(blank :281-284, lookup :286-288, unknown or wrong user :290-293, revoked :295, non-reuse fail-alone +:297-303, family revoke :305-309, expired :312-314); `OpenSessionAsync` :322 (generate :329, expiry :334, +cap :344, staged insert :345); `RotateSessionAsync` :361 (successor :369-376, expiry :374, `TryRotateAsync` +:384-386, lost claim :388-398); `RevokeLiveSessionsAsync` :420; `EnforceSessionCapAsync` :442 (cap read +:444, loop :451-454); `SessionStampingTokenService` :474 (`sid` :506-511, `mfa` :513-516). Store claim: +`MMCA.Common.Infrastructure/Persistence/Auth/EFRefreshSessionStore.cs:108` (conditional update :125, +`RevokedAt`/`ReasonRotated`/`ReplacedByTokenHash` :128-130). Session record: +`MMCA.Common.Domain/Auth/RefreshSession.cs:39` (`IAnonymizable`, `[Pii]` `IpAddress` :98, `UserAgent` :105), +`TokenHashLength` 64 :41-42, reasons `ReasonRotated` :54, `ReasonSignedOut` :57, `ReasonReuseDetected` :60, +`ReasonSessionCap` = "SessionCapExceeded" :63, fields `UserId` :69, `TokenHash` :72, `CreatedAt` :75, +`ExpiresAt` :78, `RevokedAt` :81, `ReplacedByTokenHash` :87, `ReasonRevoked` :90, `IsActiveAt` :112, +`Create` :125, `HashToken` (SHA-256 over UTF-8, upper-case hex) :173-177, `Revoke` :187-202. Source-comment +drift noticed, not acted on (source is out of scope): `RefreshSession.cs:26-28` says rows are never deleted +except to be revoked, while `RefreshSessionSettings.cs:54-58` documents the sweep's hard delete. Settings: +`MMCA.Common.Application/Auth/RefreshSessionSettings.cs` `MaxActiveSessionsPerUser` [Range(1,1000)] = 10 +:34-35, `RetentionDays` = 30 :71-72 (reuse-bound doc :60-66); options bound and `ValidateOnStart` at +`DependencyInjection.cs:168-171`; `RefreshSessionCleanupService` registered only when `RefreshSessions:Enabled` +:181-184. Tokens: `MMCA.Common.Infrastructure/Auth/TokenService.cs` `GenerateAccessToken` :101, `sub` only +:110-116, `exp` :148, `GenerateRefreshToken` :155 (64 bytes :157, base64 :158), `RefreshTokenLifetime` :165, +`GetPrincipalFromExpiredToken` :174 (issuer :178, audience :179, key :180, lifetime off :182, +`ValidAlgorithms` :187, header alg re-check :196-197); `JwtSettings.cs` 15 min :61, 7 days :64; +`ITokenService.cs` `GenerateRefreshToken` :26, interface default `RefreshTokenLifetime` :40; +`MMCA.Common.Domain/Auth/IAuthUser.cs:9-14,20,23` unchanged. Subclasses: ADC +`MMCA.ADC.Identity.Application/Users/AuthenticationService.cs:50` (`IAuthSessionIssuer` :56, base :58, +configuration doc :44-47, `ExternalLoginAsync` :192, `ExternalLoginCoreAsync` :204, `IssueTokensAsync` +:316, `speaker_id` :384); Store `MMCA.Store.Identity.Application/Users/AuthenticationService.cs:26` +(`IAuthSessionIssuer` :31, base :33, `customer_id` :187-189). Numbers unchanged: 15 min, 7 days, 64 bytes, +64-char hash, cap 10, range 1-1000; added: retention 30 days. The code block is illustrative of the shape, +condensed from `ResolveRotatableSessionAsync` (:281-314), `IsReuseSignal` (:409-417) and +`RotateSessionAsync` (:369-398); it is not byte-for-byte. Prose verified free of em dashes and the banned +boundary-noun.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/kill-anemic-domain-model.md b/docs-src/articles/kill-anemic-domain-model.md index 8078bd4c..f487553a 100644 --- a/docs-src/articles/kill-anemic-domain-model.md +++ b/docs-src/articles/kill-anemic-domain-model.md @@ -1,10 +1,14 @@ # Kill the anemic domain model: rich aggregates with factory methods that return Result -> Series: MMCA.Common · Article #5 · Pillar P2 · Group G02 · Rubric §4 · ADR-068 · ADR-115 · -> Status: grounded in `MMCA.Common/CLAUDE.md` (the "Entity Model" section, which also covers the -> identifier aliases), `Website/docs-src/onboarding/group-02-domain-building-blocks.md`, -> `Website/docs-src/adr/068-value-objects-as-validated-primitives.md` and -> `Website/docs-src/adr/115-strongly-typed-identifiers-opt-in.md`. No em dashes. +> Series: MMCA.Common · Article #5 · Pillar P2 · Group G02 · Rubric §4 · ADR-068 · ADR-115 · ADR-129 · +> Status: grounded in `MMCA.Common/Source/Core/MMCA.Common.Domain/Entities/` (the three entity +> rungs), `MMCA.Common/Source/Core/MMCA.Common.Shared/ValueObjects/` and `.../Identifiers/`, +> `MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Domain/EntityConventionTestsBase.cs` +> and `.../Rules/Domain/ArchitectureRules.Entities.cs`, +> `Website/docs-src/onboarding/group-02-domain-building-blocks.md`, +> `Website/docs-src/adr/068-value-objects-as-validated-primitives.md`, +> `Website/docs-src/adr/115-strongly-typed-identifiers-opt-in.md` and +> `Website/docs-src/adr/129-tactical-aggregate-contract.md`. No em dashes. **Subtitle:** Public setters plus logic-in-services is not a domain model, it is a database row with extra steps. Here is the three-rung entity hierarchy in MMCA.Common that makes invalid state @@ -80,7 +84,7 @@ once, never reassigned, on both the application path and the persistence path. **`AuditableBaseEntity`** adds the cross-cutting facts every persisted row needs. Soft-delete (`IsDeleted`, plus a `Delete()` / `Undelete()` pair that return `Result` and refuse to double-delete), -audit fields (`CreatedOn/By`, `LastModifiedOn/By`) with *private* setters, and a `RowVersion` +audit fields (`CreatedOn/By`, `LastModifiedOn/By`, `DeletedOn/By`) with *private* setters, and a `RowVersion` optimistic-concurrency token. The domain never writes the audit fields; they are stamped centrally by the `AuditSaveChangesInterceptor` that EF Core runs inside `SaveChangesAsync`. Three concerns that would otherwise be copy-pasted into every entity are inherited once and enforced in one place. @@ -163,7 +167,8 @@ The validation lives in static *invariants* classes (`EmailInvariants`, `Address inside MMCA.Common: `AddressValidationRules` reads them for FluentValidation, and the `OwnsAddress` mapping extension reads the same six constants for `HasMaxLength` on the owned `Address` columns, so a consuming app (Store's `CustomerConfiguration`) gets the field-length rule from one source of truth -through a single `builder.OwnsAddress(p => p.Address);` call. `EmailInvariants.MaxLength` does not get +through a single `builder.OwnsAddress(p => p.Address);` call (a second `OwnsOne` there overrides only +the unicode facet, never a length). `EmailInvariants.MaxLength` does not get the same treatment: each consumer declares its own, separate email length limit instead (Store's `CustomerInvariants.EmailMaxLength` is 100, ADC's `UserInvariants.EmailMaxLength` is 100, and ADC's `SpeakerInvariants.EmailMaxLength` aliases the 255 its own DTO declares), none derived from the 256 @@ -175,8 +180,9 @@ There is one more piece that is easy to miss but does heavy lifting against bugs factory signature: `Create(CustomerIdentifierType customerId, Money total)`, not `Create(int customerId, decimal total)`. -MMCA.Common defines per-entity identifier aliases, for example a solution-wide -`global using UserIdentifierType = int;` linked into every project via `Directory.Build.props`. The +MMCA.Common defines per-entity identifier aliases, for example +`global using UserIdentifierType = int;`, declared once in `MMCA.Common.Domain` and linked into every +other `MMCA.Common.*` project via `Directory.Build.props`. The underlying type is still `int`, but the name carries meaning. A method that takes a `UserIdentifierType` and an `OrderIdentifierType` reads unambiguously at every call site, the way two bare `int`s never do. The id is also strongly named at the entity level (`BaseEntity` is generic @@ -243,6 +249,36 @@ hides the row; the data and its foreign-key relationships stay intact. `Delete() guards against double-deletion (returning `Error.AlreadyDeleted`), so even "remove this" flows through the same error railway as everything else. +### One contract, and which half the build holds + +Everything above is one tactical contract, recorded as ADR-129, and that record is explicit about a +split: part of the contract is a fitness test, and part is a convention that holds because each new +entity copies the nearest one. + +The test half is `EntityConventionTestsBase`, a shared base in `MMCA.Common.Testing.Architecture` with +eight facts. **Construction:** the Domain layer must expose at least one aggregate root (so a broken +filter fails instead of checking nothing), every root needs a public static `Create` returning +`Result` and no public instance constructor, and any concrete Domain or Shared type that +exposes a `Create` must return `Result` from it. **Encapsulation:** every concrete module-domain +entity is sealed, and none of its public instance properties has a public setter (`init` and +non-public setters pass; navigation properties are included, so a child collection is replaced +through a `SetXxx` method). **Placement:** no entity sits in an Application or Infrastructure +assembly, no DTO or request type sits in Domain, and no DTO sits in Infrastructure. MMCA.ADC, +MMCA.Store and MMCA.Helpdesk each subclass the base unchanged and supply only their architecture map. +MMCA.Common runs the smaller `AggregateConventionTestsBase` instead: it has no business modules, so +the module-scoped rules would check nothing there. + +The convention half is the rest. `GetChildOrNotFound`, `SetItems` and the remove, restore and +cascade-delete helpers are protected members of `AuditableAggregateRootEntity`, and no fitness rule +requires an aggregate to use them. `Result.Combine` is a framework member too: its arguments are +evaluated before the call, so every invariant runs and the one failure it returns carries every error. +Whether an aggregate composes its invariants that way is convention; the single gated piece is a +naming rule, separate from the entity base, that a class named `*Invariants` must be static. +Helpdesk's `Ticket` is the reference shape: sealed over the aggregate base, a private constructor, +`Create` returning `Result`, `TicketInvariants` composed through `Result.Combine`, and a +comment found through `GetChildOrNotFound`. The practical reading: an aggregate that reaches into its +child list directly, or validates inline, still builds. Review and the nearest example hold that half. + ## Trade-offs, honestly Rich aggregates are the right default, but they are not free, and the scorecard's §4 review names the @@ -261,7 +297,8 @@ gaps: "private constructor plus a `Create` factory" is an executable check, not a convention held by review. What no base class can give you is the strategic half of DDD: bounded contexts and a ubiquitous language are realized in the apps that build modules on these classes, not in the - framework itself, and the scorecard's §4 names that as the remaining gap. + framework itself, and the scorecard's §4 names that as one of its two open criteria (the other is + the tenant identifier, a plain string by deliberate decision rather than a strong type). - **Aggregate boundaries are a judgment call.** Deciding what belongs inside a root and what is its own aggregate is genuine modeling work that no base class makes for you. @@ -287,8 +324,8 @@ way to change it should be a method that keeps it valid.** `BaseEntity` to `AuditableBaseEntity` to `AuditableAggregateRootEntity` hierarchy (identity, then audit/soft-delete, then domain events), the private-constructor-plus-`Create`-returning-`Result` idiom that makes invalidity unconstructable, value objects and identifier aliases against primitive -obsession (with the strongly typed identifier struct as the opt-in alternative), and domain events -raised on the aggregate root. +obsession (with the strongly typed identifier struct as the opt-in alternative), domain events +raised on the aggregate root, and which half of the entity contract the fitness tests enforce. **Next in the series:** specifications over LINQ spaghetti, the composable, reusable query intent that keeps read logic out of your controllers. @@ -300,87 +337,146 @@ or `dotnet add package MMCA.Common.API` and try it.* *Tags: .NET, C Sharp, Software Architecture, Programming, Domain-Driven Design* -*Notes: re-verified against the current tree this pass, MMCA.Common v1.205.0 (`MMCA.Common/FACTS.md:14`). -Type/behavior names: `BaseEntity` (`required init Id`, EF parameterless ctor), -`AuditableBaseEntity` (`IsDeleted`, `Delete()`/`Undelete()` returning `Result`, private-setter -audit fields, `RowVersion`), `ValueObject` (`public abstract record`), -`Email`/`Money`/`Address`/`DateRange` value objects with private ctor + static `Create` returning -`Result`, `UserIdentifierType` alias via `Directory.Build.props`, -`Error.NotFound`/`Error.AlreadyDeleted`/`Error.Invariant`, soft-delete global query filters. -**Aggregate-root API, re-counted this pass:** `AuditableAggregateRootEntity` exposes public -`RemoveDomainEvents` (`Source/Core/MMCA.Common.Domain/Entities/AuditableAggregateRootEntity.cs:37`) -plus six protected helpers, not two: `SetItems` (`:60`), the overridable `ValidateSetItems` (`:85`), -`GetChildOrNotFound` (`:103`, two type parameters, not one), -`RemoveChildOrNotFound` (`:156`), `RestoreChild` (`:212`) and `DeleteChildren` (`:273`). -**Audit stamping:** the fields are stamped by the EF Core interceptor -`AuditSaveChangesInterceptor(TimeProvider)` -(`Source/Core/MMCA.Common.Infrastructure/Persistence/Interceptors/AuditSaveChangesInterceptor.cs:22`, -`SavingChangesAsync` at `:25`, `StampAuditFields` at `:47` walking -`context.ChangeTracker.Entries()` at `:52`), which the save pipeline triggers. -`ApplicationDbContext` delegates the concern on purpose: its class doc assigns audit stamping to that -interceptor -(`Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/ApplicationDbContext.cs:31-32`) and -`OnConfiguring` (`:285`) resolves it (`:292`) so stamping happens "via the EF interceptor pipeline -rather than inline in SaveChangesAsync" (`:289-291`). **Invariants reuse:** both reuse sites for +*Notes: re-verified 2026-10-02 against MMCA.Common v1.221.0 (`MMCA.Common/FACTS.md:14`); every +anchor below was re-read from source this run (paths under `Source/` are relative to `MMCA.Common/`). +**This run's changes:** header `Status` re-grounded on source folders (the `MMCA.Common/CLAUDE.md` +"Entity Model" section it cited does not exist; that file holds only a `# CLAUDE.md` heading); +`DeletedOn/By` added to the audit-field list; the identifier-alias sentence narrowed to where the alias +is actually linked; Store `CustomerConfiguration` sentence widened for its unicode-only `OwnsOne`; the +section 4 residual reworded to the scorecard row's two open criteria; anchors re-based throughout. +**Entity rungs:** `BaseEntity` with `where TIdentifierType : notnull` and +`public required TIdentifierType Id { get; init; }` +(`Source/Core/MMCA.Common.Domain/Entities/BaseEntity.cs:34-37`). +`AuditableBaseEntity` (`AuditableBaseEntity.cs:13`): `IsDeleted` (`:20`), +`CreatedOn`/`CreatedBy` (`:25`, `:27`), `LastModifiedOn`/`LastModifiedBy` (`:29`, `:31`), +`DeletedOn`/`DeletedBy` (`:39`, `:45`), all `private set`; `RowVersion` (`:53`); `public virtual +Result Delete()` (`:67`) returning `Error.AlreadyDeleted` when already deleted (`:72`; +`Source/Core/MMCA.Common.Shared/Abstractions/Error.cs:26`); `protected Result Undelete()` (`:89`) +refusing a not-deleted entity with `Entity.NotDeleted` (`:95`). Soft-delete is a global named query +filter (`SoftDelete`) per the `ApplicationDbContext` class doc +(`Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/ApplicationDbContext.cs:33`). +**Aggregate-root API:** `AuditableAggregateRootEntity` (`AuditableAggregateRootEntity.cs:13`) +holds a private `_domainEvents` list (`:16`), a read-only `DomainEvents` view (`:18`), +`AddDomainEvent` (`:24`), `ClearDomainEvents` (`:34`), public `RemoveDomainEvents` (`:37`), and six +protected helpers: `SetItems` (`:60`), the overridable `ValidateSetItems` (`:87`), +`GetChildOrNotFound` (`:105`, returning `Result.Failure` over `Error.NotFound` at +`:115-118`; `Error.NotFound` is `Error.cs:23`), `RemoveChildOrNotFound` (`:158`), `RestoreChild` +(`:214`) and `DeleteChildren` (`:275`). Only roots carry events: the domain-event interceptor walks +`ChangeTracker.Entries()` +(`Source/Core/MMCA.Common.Infrastructure/Persistence/Interceptors/DomainEventSaveChangesInterceptor.cs:221`). +**Audit stamping:** `AuditSaveChangesInterceptor(TimeProvider)` +(`Source/Core/MMCA.Common.Infrastructure/Persistence/Interceptors/AuditSaveChangesInterceptor.cs:30`, +`SavingChangesAsync` at `:33`, `StampAuditFields` at `:55` walking +`context.ChangeTracker.Entries()` at `:61`). `ApplicationDbContext` delegates the +concern on purpose: its class doc assigns audit stamping to that interceptor (`ApplicationDbContext.cs:31-32`) +and `OnConfiguring` (`:290`) resolves it (`:297`) so stamping happens "via the EF interceptor pipeline +rather than inline in SaveChangesAsync" (`:294-296`). +**Snippet API shape:** the `Order` snippet is illustrative of the documented entity shape, not copied +from one source file. Its calls match shipped signatures: `Result.Combine(params ReadOnlySpan)` +(`Source/Core/MMCA.Common.Shared/Abstractions/Result.cs:124`), `Result.Failure(IEnumerable)` +(`:74`), the implicit `Error` to `Result` conversion (`:43`), `Error.Invariant(code, message, ...)` +(`Error.cs:46`), and the five-argument +`EnsureIdIsNotDefault(TId id, string code, string message, string source, string target)` +(`Source/Core/MMCA.Common.Domain/Invariants/CommonInvariants.cs:63-64`). +**Value objects:** `public abstract record ValueObject;` +(`Source/Core/MMCA.Common.Shared/ValueObjects/ValueObject.cs:8`); private ctor plus +`Result`-returning `Create` on `Money` (`Financial/Money.cs:52`, `:67`), `Email` +(`Contact/Email.cs:23`, `:30`), `Address` (`Contact/Address.cs:43`, `:69`) and `DateRange` +(`Time/DateRange.cs:17`, `:30`). +**Invariants reuse:** both reuse sites for `AddressInvariants.{AddressLine1,AddressLine2,City,State,ZipCode,Country}MaxLength` are inside -MMCA.Common. `AddressValidationRules` reads them for FluentValidation +MMCA.Common: `AddressValidationRules` reads them for FluentValidation (`Source/Core/MMCA.Common.Application/Validation/AddressValidationRules.cs:37,47,57,67,77,87`), and the `OwnsAddress` mapping extension reads them for EF `HasMaxLength` on the owned `Address` columns (`Source/Core/MMCA.Common.Infrastructure/Persistence/Configuration/EntityTypeBuilderExtensions.cs:138,144,149,154,159,164`). -A consumer reaches all six through one call: Store's `CustomerConfiguration` is a 50-line file whose -only `Address` mapping is `builder.OwnsAddress(p => p.Address);` -(`MMCA.Store.Identity.Infrastructure/Persistence/EntityConfiguration/CustomerConfiguration.cs:44`), and -it names no `AddressInvariants` constant itself. `EmailInvariants.MaxLength` (256, -`Source/Core/MMCA.Common.Shared/ValueObjects/Contact/EmailInvariants.cs:14`) has no reuse site outside -its own file: Store's `CustomerInvariants.EmailMaxLength` is a separate constant set to 100 -(`Customers/CustomerInvariants.cs:24`), ADC's `UserInvariants.EmailMaxLength` is 100 -(`Users/UserInvariants.cs:18`), and ADC's `SpeakerInvariants.EmailMaxLength` -(`Speakers/SpeakerInvariants.cs:22`) is an alias of `SpeakerDTO.EmailMaxLength`, which is where the 255 -is declared (`MMCA.ADC.Conference.Shared/Speakers/SpeakerDTO.cs:27`). The `Order` snippet is -illustrative of the documented entity shape, not copied verbatim from a single source file; its -`CommonInvariants.EnsureIdIsNotDefault` call was widened this pass to the shipped five-argument -signature `EnsureIdIsNotDefault(TId id, string code, string message, string source, string target)` -(`Source/Core/MMCA.Common.Domain/Invariants/CommonInvariants.cs:63-64`). The -Create-returning-`Result` plus private-constructor plus aggregate-root conventions are -machine-enforced by the merge-gated `AggregateConventionTests` -(`Tests/Architecture/MMCA.Common.Architecture.Tests/Domain/AggregateConventionTests.cs:9`) driving +Store's `CustomerConfiguration` (61 lines) maps `Address` through `builder.OwnsAddress(p => p.Address);` +(`MMCA.Store/Source/Modules/Identity/MMCA.Store.Identity.Infrastructure/Persistence/EntityConfiguration/CustomerConfiguration.cs:42`) +and then re-enters the same owned navigation with `builder.OwnsOne(p => p.Address, ...)` (`:47`) that sets +only `IsUnicode()` on the six columns; it names no `AddressInvariants` constant itself. +`EmailInvariants.MaxLength` (256, `Source/Core/MMCA.Common.Shared/ValueObjects/Contact/EmailInvariants.cs:14`) +has no executable reference outside its own file: the only other mentions are a doc-comment usage +example (`Source/Core/MMCA.Common.Infrastructure/Persistence/Conversions/EmailValueConverter.cs:16`) +and a comment in an ADC test (`MMCA.ADC/Tests/Modules/Identity/MMCA.ADC.Identity.Domain.Tests/Users/UserInvariantsAndRoleTests.cs:288`); +`Email.Create` calls `EmailInvariants.EnsureEmailIsValid` (`Email.cs:34`), not `MaxLength`. Store's +`CustomerInvariants.EmailMaxLength` is a separate constant set to 100 +(`MMCA.Store/Source/Modules/Identity/MMCA.Store.Identity.Domain/Customers/CustomerInvariants.cs:24`), +ADC's `UserInvariants.EmailMaxLength` is 100 +(`MMCA.ADC/Source/Modules/Identity/MMCA.ADC.Identity.Domain/Users/UserInvariants.cs:18`), and ADC's +`SpeakerInvariants.EmailMaxLength` +(`MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Domain/Speakers/SpeakerInvariants.cs:22`) is +an alias of `SpeakerDTO.EmailMaxLength`, which declares the 255 +(`MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Shared/Speakers/SpeakerDTO.cs:27`). +**Identifier alias:** `global using UserIdentifierType = int;` +(`Source/Core/MMCA.Common.Domain/GlobalUsings.IdentifierType.cs:1`), linked into every `MMCA.Common*` +project other than `MMCA.Common.Domain` by `MMCA.Common/Directory.Build.props:131-135`. +**Fitness enforcement:** the merge-gated `AggregateConventionTests` +(`Tests/Architecture/MMCA.Common.Architecture.Tests/Domain/AggregateConventionTests.cs:9`) drives `AggregateConventionTestsBase` (`Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Domain/AggregateConventionTestsBase.cs:10`: `Domain_ShouldExpose_AggregateRoots` at `:15`, `AggregateRoots_ShouldHave_ResultReturningCreateFactory` -at `:18`, `AggregateRoots_ShouldHave_NoPublicConstructors` at `:21`, with a fourth -`DomainFactories_ShouldReturn_Result` fact at `:24`); both paths carry a `Domain/` folder level. -The honest residual §4 gap is strategic DDD (bounded contexts and ubiquitous language realized -downstream), per `Website/docs-src/governance/common-ArchitectureScorecard.md` §4, the Domain-Driven -Design row at `:84` (weight 3, Maturity 4 / Implementation 8, 12/24, crediting the -`AggregateConventionTests` fitness function by name). That row moves down as each re-score paragraph is -appended above the table. The thirty-sixth-wave full re-score (2026-09-19, at v1.205.0) moves no score: -the indices stand at Maturity 97.0% (318/328, `:120`) and Implementation 86.0% (705/820, `:121`). -**ADR mapping:** ADR-068 (value objects as validated domain primitives) names the memberless -`public abstract record ValueObject` base -(`Website/docs-src/adr/068-value-objects-as-validated-primitives.md:32-33`) and the private-constructor -plus `Result`-returning `Create` factory shape (`:39-45`), and records that the factory shape is -fitness-enforced for value objects too, by `ArchitectureRules.DomainFactoriesReturnResult` (`:54`). -**Strongly typed identifiers (new section this pass), every name read from source this run:** -`IStronglyTypedId` with its `TValue Value` getter and `static abstract TSelf From(TValue)` -(`Source/Core/MMCA.Common.Shared/Identifiers/IStronglyTypedId.cs:60-72`, the `IParsable` default -implementations just below), the `StronglyTypedId` static helper (`StronglyTypedId.cs:19`, `Parse` -`:40`, `TryParse` `:63`), `StronglyTypedIdJsonConverterFactory` +at `:18`, `AggregateRoots_ShouldHave_NoPublicConstructors` at `:21`, `DomainFactories_ShouldReturn_Result` +at `:24`). +**Scorecard:** `Website/docs-src/governance/common-ArchitectureScorecard.md` section 4, the Domain-Driven Design +row at `:68` (weight 3, Maturity 4 / Implementation 8, 12/24, crediting `AggregateConventionTests` by +name), held at 8 by two open criteria: strategic DDD realized downstream, and the tenant identifier kept +a plain string by deliberate decision. Current indices: Maturity 96.6% (317/328, `:9`) and +Implementation 86.0% (705/820, `:10`). The article states no index value in its body. +**ADR mapping:** ADR-068 names the memberless `public abstract record ValueObject` base +(`Website/docs-src/adr/068-value-objects-as-validated-primitives.md:39-40`), the private-constructor plus +`Result`-returning `Create` factory shape (`:46-52`), and records that the shape is fitness-enforced by +`ArchitectureRules.DomainFactoriesReturnResult` (`:65`). +**Strongly typed identifiers:** `IStronglyTypedId : IParsable` with its +`TValue Value` getter and `static abstract TSelf From(TValue)` +(`Source/Core/MMCA.Common.Shared/Identifiers/IStronglyTypedId.cs:60`, `:65`, `:72`, the `IParsable` +default implementations just below), the `StronglyTypedId` static helper (`StronglyTypedId.cs:19`, +`Parse` `:40`, `TryParse` `:63`), `StronglyTypedIdJsonConverterFactory` (`StronglyTypedIdJsonConverterFactory.cs:22`), `StronglyTypedIdTypeConverter` (`StronglyTypedIdTypeConverter.cs:21`) with `StronglyTypedIdTypeConverters.Register` (`:89`) and -`.RegisterAll` (`:108`), `StronglyTypedIdRegistry` (`StronglyTypedIdRegistry.cs:22`), +`.RegisterAll` (`:119`), `StronglyTypedIdRegistry` (`StronglyTypedIdRegistry.cs:22`), `StronglyTypedIdMappings` with `ToValue`/`ToIdentifier` (`StronglyTypedIdMappings.cs:31,38,43`), the opt-in call `AddStronglyTypedIds` -(`Source/Core/MMCA.Common.Infrastructure/DependencyInjection.cs:786`, registry at `:790`, converter -registration at `:793`), `StronglyTypedIdModelConfiguration.Apply` +(`Source/Core/MMCA.Common.Infrastructure/DependencyInjection.cs:376`, registry at `:380`, converter +registration at `:383`), `StronglyTypedIdModelConfiguration.Apply` (`Source/Core/MMCA.Common.Infrastructure/Persistence/Conventions/StronglyTypedIdModelConfiguration.cs:21,29`), and `StronglyTypedIdValueConverter` / `NullableStronglyTypedIdValueConverter` / `StronglyTypedIdValueComparer` (`Source/Core/MMCA.Common.Infrastructure/Persistence/Conversions/StronglyTypedIdValueConverter.cs:28,56,80`). -The registry resolve and the pre-convention apply happen in `ApplicationDbContext` -(`.../DbContexts/ApplicationDbContext.cs:396-403`, where the comment records that absent the service it -is a no-op and the aliases stay the identifier model). The posture (aliases default, wrapper opt-in, -nothing migrates) is ADR-115 -(`Website/docs-src/adr/115-strongly-typed-identifiers-opt-in.md:54-56`), which revisits ADR-048 and -ADR-085 (`:7-13`) and records the MVC `TypeConverter` binding finding (`:103-113`).* +The registry resolve and the pre-convention apply happen in `ApplicationDbContext.ConfigureConventions` +(`ApplicationDbContext.cs:378`; comment `:401-405`, `GetService` `:406`, `Apply` +`:408`), where the comment records that absent the service it is a no-op and the aliases stay the +identifier model. The posture (aliases default, wrapper opt-in, nothing migrates) is ADR-115 +(`Website/docs-src/adr/115-strongly-typed-identifiers-opt-in.md:54`), which revisits ADR-048 and +ADR-085 (`:7-8`) and records the MVC `TypeConverter` binding finding (`:103-112`). +**2026-10-02 ADR-129 fold-in** (section "One contract, and which half the build holds", header ADR +cell and `Status` line, one closing clause in "What we covered"): the gated/convention split is +ADR-129's Decision (`Website/docs-src/adr/129-tactical-aggregate-contract.md:22-24`) and its first +trade-off (`:137-139`). `EntityConventionTestsBase` +(`Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Domain/EntityConventionTestsBase.cs:10`) +declares eight facts (`:15`, `:18`, `:21`, `:24`, `:27`, `:30`, `:33`, `:36`) whose bodies are in +`Source/Hosting/MMCA.Common.Testing.Architecture/Rules/Domain/ArchitectureRules.Entities.cs`: at least +one aggregate root (`:8-16`), a static `Create` returning `Result` on every root (`:19-41`), every +Domain/Shared `Create` returning `Result` with no-`Create` types skipped (`:53-80`, skip `:67-70`), +module-domain entities sealed (`:103-112`), no public setter with `init`/non-public passing and +navigations included (`:149-164`, compliance `:129-136`), no public constructor on module-domain roots +(`:167-177`), no entity in Application or Infrastructure (`:180-191`, layers `:182`), and DTO/request +placement (`:199-217`; DTO in Infrastructure `:209-213`). Adopters: MMCA.ADC +(`MMCA.ADC/Tests/Architecture/MMCA.ADC.Architecture.Tests/Domain/EntityConventionTests.cs:3`), +MMCA.Store (`MMCA.Store/Tests/Architecture/MMCA.Store.Architecture.Tests/Domain/EntityConventionTests.cs:3`) +and MMCA.Helpdesk +(`MMCA.Helpdesk/Tests/Architecture/MMCA.Helpdesk.Architecture.Tests/ArchitectureTests.cs:89`). Common +subclasses `AggregateConventionTestsBase` (`AggregateConventionTests.cs:9`), whose constructor fact +calls the whole-Domain rule (`AggregateConventionTestsBase.cs:21`; `ArchitectureRules.Entities.cs:90-100`); +the module-scoped rules are vacuous in a module-less repo (`ArchitectureRules.Entities.cs:141-144`). +Child-access members are the protected helpers already anchored above (`AuditableAggregateRootEntity.cs:60`, +`:105`, `:158`, `:214`, `:275`); ADR-129 records that no fitness rule requires them +(`129-tactical-aggregate-contract.md:78`). +`Result.Combine` (`Result.cs:124`) collects every failed input's errors into one failure (`:131-144`). +The static-`*Invariants` rule is `ArchitectureRules.InvariantClassesAreStatic` +(`Source/Hosting/MMCA.Common.Testing.Architecture/Rules/Governance/ArchitectureRules.Naming.cs:78-79`), +run as `InvariantClasses_ShouldBe_Static` (`Bases/Governance/NamingConventionTestsBase.cs:31`). +Reference shape: Helpdesk `Ticket` +(`MMCA.Helpdesk/Source/Modules/Tickets/MMCA.Helpdesk.Tickets.Domain/Tickets/Ticket.cs:26` sealed over +the aggregate base, private constructor `:52`, `Create` returning `Result` `:66`, +`Result.Combine` over `TicketInvariants` `:68` and `:118`, `GetChildOrNotFound` `:144`).* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/live-channel-push.md b/docs-src/articles/live-channel-push.md index c63aeea7..3ef2a445 100644 --- a/docs-src/articles/live-channel-push.md +++ b/docs-src/articles/live-channel-push.md @@ -1,6 +1,6 @@ # Ephemeral by design: sub-second live channels over one SignalR hub -> Series: MMCA.Common · Article #22 (deep-dive) · Pillar P2/P3 · Group G10,G23 · Rubric §5,§7 · +> Series: MMCA.Common · Article #22 (deep-dive) · Pillar P2/P3 · Group G10,G26 · Rubric §5,§7 · > ADR-039, ADR-052, ADR-074 · > Status: grounded in `Website/docs-src/adr/039-live-channel-push.md`, > `Website/docs-src/adr/074-recurring-job-scheduler.md` and the framework source @@ -411,230 +411,122 @@ pattern, or `dotnet add package MMCA.Common.Infrastructure` and try it.* *Tags: .NET, C Sharp, SignalR, Real Time, Software Architecture* -*Notes: 2026-09-19 audit pass (MMCA.Common v1.205.0). Three substantive changes this pass. (1) The -"expensive work" worked example was re-based: `SessionScoringQueue.cs` and `SessionScoringWorkItem` no -longer exist anywhere in `MMCA.ADC/Source` (Grep for both, zero matches), because that case is a durable -internal command, `ScoreEventSessionsInternalCommand` (ADR-114), whose own remarks state it "replaces an -in-process channel plus a five-minute recovery sweep ... A row in the database survives all three, and -the framework owns the claim lease, the retry backoff and the dead-letter" -(`MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Application/Sessions/UseCases/DecisionSupport/ScoreEventSessions/ScoreEventSessionsInternalCommand.cs:14-18`, -record `:26`, name attribute `:25`); its handler takes the per-event claim with a zero wait and skips -rather than waits on the loser (`ScoreEventSessionsInternalCommandHandler.cs:60` `ClaimWait = -TimeSpan.Zero` with the "waiting for it would only mean paying for the same pass twice" rationale -`:56-59`, `TryAcquireAsync` `:75-77`, skip branch `:79-83`, `ClaimTimeToLive` 15 minutes `:53`). The body -now states that mechanism in two sentences and cross-references Article 51 for it; ADR-052's own text -still names the deleted `SessionScoringQueue`/`SessionScoringProcessor` as its example -(`Website/docs-src/adr/052-background-job-execution.md:83`), which is a repo-side follow-up for -`/update-adrs`, not article drift. The live-publish queue is the only `Channel.CreateBounded` call in -MMCA.Common and both consumer applications (Grep for `CreateBounded`/`BoundedChannelOptions`: -`MMCA.Common/Source` zero, `MMCA.Store/Source` zero, `MMCA.ADC/Source` one file), which is what the body -claims. (2) MMCA.Common's notification files moved into `Notifications/`, `Notifications/Live/`, -`Notifications/Push/` and `Interfaces/Infrastructure/Notifications/` in a folder-width reorganization; -every framework anchor below is re-pinned to those paths. (3) `NotificationHub` carries an -`IChannelJoinAuthorizer` entitlement hook and a per-user connection cap that the article did not -describe, both now in the body. Carried forward from the 2026-08-20 pass and unchanged on the merits: -every best-effort swallow on the Engagement live path runs through MMCA.Common's shared -`BestEffort.ExecuteAsync` helper instead of a hand-rolled `catch` with a justified `CA1031` suppression. -`LivePollVoteChangedHandler`, `SessionQuestionUpvoteChangedHandler`, `SubmitQuestionHandler`, -`ModerateQuestionHandler` and the drain worker `LiveChannelPublishProcessor` carry no `CA1031` -suppression and no per-file failure `LoggerMessage` any more; the helper emits one Warning -("Best-effort operation '{Operation}' failed and was swallowed; the caller's outcome is unaffected") -and increments `besteffort.dispatch.failed`, tagged by a low-cardinality `operation` name, on the -`MMCA.Common.BestEffort` meter, and rethrows the caller's own cancellation rather than recording it as a -failure (`MMCA.Common/Source/Core/MMCA.Common.Application/Services/BestEffort.cs:45-72`, meter/tag -contract `:18-23`, Warning `:81-84`). The body paragraph that used to say "the two that still keep a -`try`/`catch`" was rewritten for that, and every affected anchor below is re-pinned. The section -"The sibling contract: work a clock owns" is unchanged on the merits; the previous note's withdrawal of -the onboarding-chapter drift finding is now only half right and is restated below. -The section "The queue is where you say what the work is worth" carries ADR-052's -background-job execution contract, which has no other home article. Its one code block is line-for-line -from source with the declarations pulled adjacent: the file does not have them contiguous, and the doc -comments are dropped. The `FullMode = BoundedChannelFullMode.Wait` plus non-blocking `TryWrite` pairing -described in prose beside it is the documented behaviour of `BoundedChannelFullMode` rather than a -quotation: no `Wait`-mode channel exists in MMCA.Common or either consumer application this pass, which -is why it is prose and not a second block. -The permissive end is `MMCA.ADC/Source/Modules/Engagement/MMCA.ADC.Engagement.Application/Live/LiveChannelPublishQueue.cs`: -`Capacity = 1024` (`:18`), the `CreateBounded` call carrying `FullMode = BoundedChannelFullMode.DropOldest`, -`SingleReader = true`, `SingleWriter = false` and `itemDropped: OnItemDropped` (`:33-40`), the -always-true `TryWrite` documented at `:49-59`, and the `itemDropped` callback as the -only observable drop signal (`:30-32`) feeding the discarded-broadcast counter (`:47`) and the -running-total warning (`:61-70`), plus the class's own "the request path must never block" and -`SingleReader`-gives-FIFO rationale (`:6-13`) and the capacity comment sizing 1024 against the observed -conference-day load (`:16-17`). Framework (MMCA.Common): -`ILiveChannelPublisher.PublishAsync(channelKey, eventName, payloadJson, ct)` -(`Source/Core/MMCA.Common.Application/Interfaces/Infrastructure/Notifications/ILiveChannelPublisher.cs:17`, -with the "not persisted, clients not connected at publish time never see them" contract stated `:3-8`); -`NullLiveChannelPublisher` no-op default (`Source/Core/MMCA.Common.Infrastructure/Notifications/Live/NullLiveChannelPublisher.cs:11-16`); -`SignalRLiveChannelPublisher` group-sends `ReceiveChannelEvent` via `IHubContext` -(`Source/Core/MMCA.Common.Infrastructure/Notifications/Live/SignalRLiveChannelPublisher.cs:11-19`, nine lines). -`NotificationHub` -declares the four method-name constants `ReceiveNotificationMethod`/`ReceiveChannelEventMethod`/`JoinChannelMethod`/`LeaveChannelMethod` -(`Source/Core/MMCA.Common.Infrastructure/Notifications/NotificationHub.cs:30,33,36,39`), `JoinChannelAsync`/`LeaveChannelAsync` -(`:119,:136`), which both call the private `EnsureValidChannelKey` (`:166`), validating the key against -`ChannelKeyPattern` and throwing `HubException` on a miss (`:174`), with the regex cached and a 1s match -timeout (`:41-44`). The entitlement hook is the optional, defaulted `IChannelJoinAuthorizer` constructor -parameter (`:27`, whose doc states the shape pattern alone lets any authenticated caller subscribe to any -well-formed key, `:18-23`), consulted by `EnsureAuthorizedForChannelAsync` (`:149-164`, refusal -`HubException` `:162`, the "shape is not entitlement" comment `:145-148`) after the pattern check and -before `Groups.AddToGroupAsync` (`:126-127`). The per-user connection cap is `ConnectionsPerUser` -(`:46-51`, "per replica, like the in-memory rate limiters") enforced in `OnConnectedAsync` (`:54-72`, cap -read `:56`, over-cap `HubException` `:67`, the give-the-slot-straight-back comment `:64-66`). +*Notes: 2026-10-02 audit pass (MMCA.Common v1.221.0). Body prose is unchanged this pass: the audit +confirmed every body claim (hub constants, join/leave, the key pattern, the 1s match timeout, the +per-user cap of 20, `IChannelJoinAuthorizer`, the `DropOldest`/1024/`SingleReader`/`itemDropped` queue, +the nine-line SignalR publisher, the 2s gRPC deadline, the mixed Kestrel profile, the 5s outbox delay, +the 30s/300s scheduler defaults, the 1s `MinimumWait`, Cronos, the single `CreateBounded` across the +three repos, and every Engagement handler enqueueing with `BestEffort` and no CA1031). All drift was in +this ledger's anchors, which are re-pinned below from source read in this run. Change history: the +2026-09-19 pass re-based the "expensive work" example onto the durable internal command +`ScoreEventSessionsInternalCommand` (ADR-114, Article 51), re-pinned the framework notification files +into `Notifications/`, `Notifications/Live/` and `Notifications/Push/`, and added the channel-join +authorizer and per-user cap to the body; the 2026-08-20 pass moved every Engagement swallow onto the +shared `BestEffort.ExecuteAsync` helper (`MMCA.Common/Source/Core/MMCA.Common.Application/Services/BestEffort.cs`, +one Warning plus `besteffort.dispatch.failed` on the `MMCA.Common.BestEffort` meter, not re-pinned this +run). This pass: `AddPushNotifications` moved out of `DependencyInjection.cs` into the +`DependencyInjection.Notifications.cs` partial; `OutboxSettings` moved to +`Persistence/Outbox/Administration/`; `SchedulerSettings` moved to `Scheduling/`; ADR-039 gained a second +revision (2026-09-07) and a re-anchor note (2026-09-25); `CastVoteHandler`'s constructor grew two +dependencies, still with no queue and no publisher. +Framework (MMCA.Common). `NotificationHub` anchors were confirmed by this pass's audit and are carried: +method-name constants (`Source/Core/MMCA.Common.Infrastructure/Notifications/NotificationHub.cs:30,33,36,39`), +optional `IChannelJoinAuthorizer` constructor parameter (`:27`), regex cache with 1s timeout (`:41`), +per-user cap read in `OnConnectedAsync` (`:56`), `JoinChannelAsync`/`LeaveChannelAsync` (`:119`, `:136`), +`EnsureValidChannelKey` (`:166`) throwing `HubException` on a miss (`:174`). `PushNotificationSettings.ChannelKeyPattern` defaults to `NotificationScopeKey.Pattern` (`Source/Core/MMCA.Common.Infrastructure/Notifications/Push/PushNotificationSettings.cs:29`), which is `^(event|session):[0-9]+$` (`Source/Core/MMCA.Common.Shared/Notifications/NotificationScopeKey.cs:32`); -`MaxConnectionsPerUser` defaults to 20 (`PushNotificationSettings.cs:42`). -DI: `NullLiveChannelPublisher` is the `TryAddTransient` default (`Source/Core/MMCA.Common.Infrastructure/DependencyInjection.cs:736`); -`AddPushNotifications` (declared `:820`) swaps in `SignalRLiveChannelPublisher` (`:845`) and wires the Redis -backplane when a `redis` connection string is present (`:829-841`, with the SEC-Common-53 per-application -channel prefix `:832-841`). UI `NotificationHubService`: `JoinChannelAsync`/`LeaveChannelAsync` -track membership (`Source/Presentation/MMCA.Common.UI/Services/Notifications/NotificationHubService.cs:192,225`), -`OnChannelEvent` is multicast (`:255-273`, the per-channel subscription list `:260-269`), re-join on -`Reconnected` (`:143`, `RejoinChannelsAsync` at `:348`), single-subscriber -`NotificationCallback` (`:51`). ADR: one hub + two publisher paths, durable-vs-ephemeral at the publisher boundary, string-JSON -payload, ephemeral-is-lossy, single-subscriber callback, backplane-for-multi-replica trade-offs all in -`Website/docs-src/adr/039-live-channel-push.md:22-73`. `Outbox:ProcessingDelaySeconds` is named (with ADR-003) -at ADR-039 `:14-15`, which states no value; the 5s default is `Source/Core/MMCA.Common.Infrastructure/Settings/OutboxSettings.cs:40` -(also in `MMCA.Common/CLAUDE.md` "Outbox Pattern"). ADR-039 carries a **Revision (2026-07-24)** (`:75-96`): -(1) the `CastVoteHandler`/`ToggleUpvoteHandler` broadcasts moved to domain-event handlers because the -in-handler enqueue ran with the ADR-014 transaction still open (`:78-89`), and (2) `DropOldest` makes -`TryWrite` always return true, so the caller's "if the enqueue failed, log it" branch was unreachable and -drops now surface via `itemDropped`/`DroppedCount` plus a running-total warning (`:91-96`). -ADC adoption (Engagement live path, anchors from the 2026-08-20 pass, not re-read this pass and not -flagged by this pass's audit): the queue port returns nothing, no command handler publishes inline, and -the failure posture is the shared `BestEffort` helper described at the top of these notes. The port is -`void Enqueue(LiveChannelPublishWorkItem workItem)` -(`.../Engagement.Application/Live/ILiveChannelPublishQueue.cs:30`; interface `:21`, work-item record `:10`), -whose doc states the queue never rejects an item and "there is nothing for a caller to -branch on" (`:24-26`). Only the private `_channel.Writer.TryWrite` is always-true -(`.../Live/LiveChannelPublishQueue.cs:55-59`, remarks `:49-54`; class `:14`). No `TryEnqueue` remains on -this port. -`CastVoteHandler`'s primary constructor -is `(IUnitOfWork, LivePollResultsBuilder, TimeProvider, ILogger)` with **no queue and no publisher** -(`MMCA.ADC/Source/Modules/Engagement/MMCA.ADC.Engagement.Application/LivePolls/UseCases/CastVote/CastVoteHandler.cs:19-23`); -it saves at `:86` and its comment at `:90-92` states the `poll.results-changed` broadcast is raised as a -domain event and enqueued post-commit by `LivePollVoteChangedHandler`; the file is 126 lines and enqueues -nothing. `LivePollVoteChangedHandler` (`.../LivePolls/DomainEventHandlers/LivePollVoteChangedHandler.cs:38`) -is a singleton whose whole body is one `BestEffort.ExecuteAsync(BroadcastOperation, logger, ...)` call -(`:51`, operation constant `"livepoll-results-broadcast"` `:44`, the "rather than a hand-rolled catch" -rationale `:26-29`); inside it, it opens its own scope (`:53-55`), rebuilds results with `userId: null` so -`MyVoteOptionId` stays null (`:73`), resolves the channel key (`:75-77`), and calls -`Enqueue(new LiveChannelPublishWorkItem(...))` with `JsonSerializer.Serialize(results, JsonSerializerOptions.Web)` -(`:79-82`). The upvote path mirrors it in `SessionQuestionUpvoteChangedHandler` (`.../SessionQuestions/DomainEventHandlers/SessionQuestionUpvoteChangedHandler.cs:39`, -`BestEffort.ExecuteAsync` `:52` with operation constant `"session-question-upvote-broadcast"` `:45` and the -same rationale `:27-30`, enqueue `:80-83`). Neither file contains a `CA1031` suppression or a failure -`LoggerMessage` any more. All four lower-frequency command handlers enqueue as well, which is -what closes the gap this article previously recorded as deliberate. `CloseLivePollHandler` injects -`ILiveChannelPublishQueue` (`.../UseCases/Close/CloseLivePollHandler.cs:22`) and its `EnqueueClosed` -(`:85-97`) ends in a plain `Enqueue` (`:95-96`) with no reject branch: the file is 101 lines and its only -`LoggerMessage` is the Information "Live poll {PollId} closed for Event {EventId}" (`:99-100`). -`OpenLivePollHandler` injects the queue (`.../UseCases/Open/OpenLivePollHandler.cs:23`) and `EnqueueOpened` -(`:100-112`) enqueues at `:110-111`, with no `PublishAsync` and no CA1031 suppression anywhere in its 116 -lines. `SubmitQuestionHandler` injects the queue (`.../SessionQuestions/UseCases/Submit/SubmitQuestionHandler.cs:29`) -and enqueues on both branches (`:142-143` approved, `:157-158` pending-count); its guard is -`BestEffort.ExecuteAsync` (`:131`, rationale `:120-127`, which also records why the caller's token is -deliberately not passed: the question is already committed, so the broadcast must outlive an abandoned -request), and what it covers is the fresh Pending-count read (`:148-151`), not a publish. -`ModerateQuestionHandler` injects the queue (`.../SessionQuestions/UseCases/Moderate/ModerateQuestionHandler.cs:26`) -and enqueues at `:138` and `:152-153`, with `BestEffort.ExecuteAsync` at `:136` (rationale `:96-101`) -around the same shape (count read `:143-146`); the payload switch is built deliberately OUTSIDE the guard -so an unknown `ModerationAction` faults loudly instead of being swallowed as a missed broadcast -(`:111-134`). Neither file carries a CA1031 suppression. -Engagement's own composition root states the rule in a comment: no command handler awaits that publish, -each enqueues onto the module's `ILiveChannelPublishQueue` instead -(`.../Engagement.Service/Program.cs:239-241`). -Single-reader hosted drain -`LiveChannelPublishProcessor` (`.../Engagement.Infrastructure/Live/LiveChannelPublishProcessor.cs:30-33`) -resolves the publisher per item and forwards in FIFO order, swallowing every failure through -`BestEffort.ExecuteAsync` (`ExecuteAsync` `:39-67`, the helper call `:45-58` with the per-item scope -resolving `ILiveChannelPublisher` at `:50-51`, operation-name prefix `"live-channel-publish:"` completed -by the work item's event name `:36`, the "rather than a hand-rolled catch, so a peer that has quietly -stopped accepting broadcasts is countable" rationale `:21-28`, and a shutdown-only -`catch (OperationCanceledException) when (stoppingToken.IsCancellationRequested)` at `:60-65`); there is -no CA1031 suppression and no `LoggerMessage` in the file. Registered -`AddHostedService` (`.../Engagement.Infrastructure/DependencyInjection.cs:21`), queue registered as one -concrete singleton exposed via the interface (`.../Engagement.Application/DependencyInjection.cs:55-56`, -rationale comment `:51-54`); -`LivePollChannel` keys/event-names (`.../Engagement.Shared/LivePolls/LivePollChannel.cs:14,17,20,24,29`). -gRPC ingress: `LiveChannelPublisherGrpcAdapter` implements `ILiveChannelPublisher` over gRPC, 2s deadline, -swallows failures (`MMCA.ADC/Source/Services/MMCA.ADC.Notification.Contracts/LiveChannelPublisherGrpcAdapter.cs:20-53`, -`:26` deadline, `:43-48` CA1031), invoked by Engagement's drain worker off the request path; -`AddNotificationLiveChannelClient` `Replace`s the port with the adapter, -default service name `_grpc.notification` (`.../Notification.Contracts/DependencyInjection.cs:42-51`), -registered by Engagement at `.../Engagement.Service/Program.cs:283`; -`LiveChannelGrpcService` delegates to the host's `ILiveChannelPublisher` (SignalR here) -(`MMCA.ADC/Source/Services/MMCA.ADC.Notification.Service/Grpc/LiveChannelGrpcService.cs:22`, delegation -`:33-35`); mixed-endpoint -profile (default `Http1AndHttp2` for WebSockets + dedicated `Http2`-only `grpc` endpoint) at -`.../Notification.Service/Program.cs:56-70` (SignalR hub mapped `:275`). -Standing of the onboarding chapter -`Website/docs-src/onboarding/group-23-engagement-live-layer.md`, as recorded in the 2026-08-20 pass and -carried forward unchanged. Half of that withdrawal holds: the chapter does NOT teach the retired -`TryEnqueue` shape (Grep for `TryEnqueue` in that file, zero matches) and it correctly describes all four -lower-frequency command handlers enqueueing through `ILiveChannelPublishQueue.Enqueue` with no rejection -branch (`:102-114`). The other half no longer holds. The chapter still tells the pre-`BestEffort` story: -it says both domain-event handlers "swallow-and-log any failure behind a justified `CA1031` suppression" -(`:98-100`) and that the two question handlers "still wrap that block in a `CA1031`-suppressed -swallow-and-log catch (`SubmitQuestionHandler.cs:149-154`, `ModerateQuestionHandler.cs:143-148`)" -(`:115-118`). All four route through `BestEffort.ExecuteAsync` today and none carries a CA1031 -suppression, and the chapter's line anchors for those handlers are stale in exactly the same way this -article's were before this pass. That is a repo-side follow-up for `/update-onboarding` in the Website -repo, not article drift: the article's own text is re-pinned above. -Recurring job scheduler (the section "The sibling contract: work a clock owns"), grounded in -`Website/docs-src/adr/074-recurring-job-scheduler.md` (status line "Accepted (2026-08-13; revised -2026-08-14, 2026-08-18)", `:4-6`; -opt-in, no table and no runner until a host calls `AddScheduledJobs` and sets `Scheduler:Enabled`) plus -MMCA.Common source. The two rejected instincts are the ADR's own Context and Decision: an interval is not -a time of day and an interval-driven hosted service runs on every replica (`:17-20`), and Hangfire / -Quartz.NET are declined for the schema, storage abstraction, dashboard and per-host upgrade obligation -they bring (`:37-42`), the conclusion being that "the missing piece was a cron expression, not a -product" (`:42`). The contract is -`IScheduledJob` with exactly `Name`, `CronExpression` and `ExecuteAsync(CancellationToken)` -(`Source/Core/MMCA.Common.Application/Interfaces/IScheduledJob.cs:36`, members `:44`, `:68`, `:78`), whose -own doc states jobs are resolved **scoped, in a fresh DI scope created for each execution, exactly like a -request** (`:9-14`), that the cron is five-field and UTC-only (`:47-49`, `:57-62`), and that -`Scheduler:Jobs:{Name}:Cron` overrides the code default (`:63-66`). The scope is real: -`InvokeJobAsync` opens `scopeFactory.CreateScope()` per run and resolves the job out of it -(`Source/Core/MMCA.Common.Infrastructure/Scheduling/ScheduledJobRunner.cs:523-525`); the runner itself is -a `BackgroundService` (`:39-44`) taking `TimeProvider` (`:47`). The claim quoted in the code block is -verbatim from `:427-437` (`ExecuteUpdateAsync` setting `LockedUntil` + `LockToken` over a `Where` that -admits only rows whose `NextRunOn` has passed and whose lease is null or expired), the same idiom the -outbox uses (ADR-074 `:30-35`); the due-row read is `:409-416`, and the outcome stamp is guarded by the -same token so a replica whose lease expired mid-run matches nothing and drops its stale result -(`:489-503`). Smart wait: `RunCycleAsync` returns the earliest `NextRunOn` across the store (`:222-227`) -and `ComputeWaitTime` sleeps until it, capped at the polling interval and floored at one second -(`:138-152`, `MinimumWait` `:72`); `SchedulerSettings.PollingIntervalSeconds` defaults to 30 and -`LeaseSeconds` to 300 (`Source/Core/MMCA.Common.Infrastructure/Settings/SchedulerSettings.cs:34`, `:43`). -Missed schedules: the next occurrence is computed from the instant the run finished, not from the missed -occurrence, "so a schedule that elapsed many times while the host was down advances past the present in -one step instead of replaying the backlog" (`ScheduledJobRunner.cs:476-480`); the artifact-per-window and -time-lease-not-a-fence costs are the ADR's own Trade-offs ("Run-once-then-advance silently drops -occurrences ... wrong for a job that must produce an artifact per window", -`074-recurring-job-scheduler.md:177-180`; "The lease is a time lease, not a fence", `:164-167`). Cronos is the bought piece: pinned in `MMCA.Common/Directory.Packages.props:71` (0.13.0) and -called through `CronSchedule.Parse(...).GetNextOccurrence(afterUtc, inclusive: false)` -(`ScheduledJobRunner.cs:187`, alias `:12`). The store is `ScheduledJobEntry` with `JobName` as the primary -key (`Source/Core/MMCA.Common.Infrastructure/Scheduling/ScheduledJobEntry.cs:20`, `:26`) plus -`CronExpression` (`:34`), `NextRunOn` (`:40`), `LastRunOn` (`:43`), `LastOutcome` (`:50`), -`LastDurationMs` (`:60`), `LockedUntil` (`:67`) and `LockToken` (`:74`), host-scoped to the **Default** -source only, unlike the per-source outbox (`:16-17`, and ADR-074 `:67-71`). The opt-in claim is a test, -not a promise: `Model_SchedulerDisabled_DoesNotContainTheJobTable` asserts the real -`ApplicationDbContext` model has no `ScheduledJobEntry` entity type for a host that never opted in -(`MMCA.Common/Tests/Core/MMCA.Common.Infrastructure.Tests/Scheduling/SchedulerModelGateTests.cs:29-35`; -siblings cover no-settings-at-all `:38-45`, enabled-on-Default `:48-56`, and enabled-on-a-non-Default -source `:59-65`). Adoption verified this pass by grep for `AddScheduledJobs`: all three Store services -(`MMCA.Store/Source/Services/MMCA.Store.Catalog.Service/Program.cs:229`, -`.../MMCA.Store.Sales.Service/Program.cs:209`, `.../MMCA.Store.Identity.Service/Program.cs:196`), three -ADC services (`MMCA.ADC/Source/Services/MMCA.ADC.Identity.Service/Program.cs:235`, -`.../MMCA.ADC.Engagement.Service/Program.cs:194`, `.../MMCA.ADC.Conference.Service/Program.cs:329`) and -the Helpdesk web host (`MMCA.Helpdesk/Source/Hosts/MMCA.Helpdesk.Web/Program.cs:91`). The Engagement -observation in the article is that same file: `AddScheduledJobs` at `:194`, earlier than -`AddNotificationLiveChannelClient()` at `:283`. +`MaxConnectionsPerUser` defaults to 20 (`PushNotificationSettings.cs:42`). `SignalRLiveChannelPublisher` +(`Source/Core/MMCA.Common.Infrastructure/Notifications/Live/SignalRLiveChannelPublisher.cs:11-19`, nine lines). +DI, re-read this run: `NullLiveChannelPublisher` is the `TryAddTransient` default +(`Source/Core/MMCA.Common.Infrastructure/DependencyInjection.cs:326`); `AddPushNotifications` is declared in +the partial `Source/Core/MMCA.Common.Infrastructure/DependencyInjection.Notifications.cs:41`, wires the +Redis backplane only when a `redis` connection string is present (`:50-62`) with the SEC-Common-53 +per-application channel prefix (`:53-61`, `ApplicationNamespace.Resolve` `:59`), and swaps in +`SignalRLiveChannelPublisher` with a plain `AddTransient` (`:66`). +UI `NotificationHubService` (`Source/Presentation/MMCA.Common.UI/Services/Notifications/NotificationHubService.cs`), +re-read this run: single-subscriber `NotificationCallback` (`:60`), `Reconnected` re-joins via +`RejoinChannelsAsync` (`:178`, method `:423`), `JoinChannelAsync` (`:231`), `LeaveChannelAsync` (`:264`), +multicast `OnChannelEvent` (`:294`). +Outbox delay: `Outbox:ProcessingDelaySeconds` default 5 at +`Source/Core/MMCA.Common.Infrastructure/Persistence/Outbox/Administration/OutboxSettings.cs:40`; ADR-039 +names the setting without a value (`Website/docs-src/adr/039-live-channel-push.md:19`). +ADR-039, re-read this run: status `:3-10` (Accepted 2026-07-09, revised 2026-09-07 and 2026-09-25); +Context `:11`, Decision `:24`, Rationale `:53`, Trade-offs `:65-77` (lossy, type safety by convention, +single-subscriber callback, backplane for multi-replica). **Revision (2026-07-24)** `:79-100`: (1) +post-commit enqueue via domain-event handlers on `LivePollVoteChanged`/`SessionQuestionUpvoteChanged` +(`:82-93`), (2) `DropOldest` makes `TryWrite` always true, so drops surface via +`itemDropped`/`DroppedCount` (`:95-100`). **Revision (2026-09-07)** `:102-133`: optional +`IChannelJoinAuthorizer` (`:107-114`), per-user connection cap default 20 (`:115-119`), per-application +backplane prefix (`:120-123`), and ADC's live-poll read scope (`:124-133`, ADC-side, outside this +article's scope). +ADC Engagement live path, re-read this run. Queue `.../Engagement.Application/Live/LiveChannelPublishQueue.cs`: +`Capacity = 1024` (`:18`), the itemDropped comment (`:30`), `CreateBounded` with `DropOldest`, +`SingleReader = true`, `SingleWriter = false`, `itemDropped: OnItemDropped` (`:33-40`), `DroppedCount` +(`:47`), the never-fails remarks (`:52-53`), the private `_channel.Writer.TryWrite` (`:58`), +`OnItemDropped` (`:61`). `CreateBounded` appears in that one ADC file only (zero in MMCA.Common and +MMCA.Store, per this pass's audit). The queue is registered as one concrete singleton exposed through the +interface (`.../Engagement.Application/DependencyInjection.cs:53-54`). +`CastVoteHandler` (`MMCA.ADC/Source/Modules/Engagement/MMCA.ADC.Engagement.Application/LivePolls/UseCases/CastVote/CastVoteHandler.cs`) +takes `(IUnitOfWork, IEventLiveValidationService, LivePollResultsBuilder, TimeProvider, +IUniqueConstraintViolationDetector, ILogger)` (`:20-26`), no queue and no publisher; it saves at `:56`, +states the post-commit broadcast rule at `:68-70`, and builds the caller's results at `:71`. +`LivePollVoteChangedHandler` (`.../LivePolls/DomainEventHandlers/LivePollVoteChangedHandler.cs`): queue +parameter `:40`, operation constant `"livepoll-results-broadcast"` `:44`, `BestEffort.ExecuteAsync` `:51`, +`BuildAsync(poll, userId: null, ...)` `:73`, channel key `:76-77`, `Enqueue` `:79`. +`SessionQuestionUpvoteChangedHandler` (`.../SessionQuestions/DomainEventHandlers/SessionQuestionUpvoteChangedHandler.cs`): +queue `:41`, operation constant `:45`, `BestEffort.ExecuteAsync` `:52`, `Enqueue` `:80`. +`CloseLivePollHandler` queue `:22`, `Enqueue` `:94`; `OpenLivePollHandler` queue `:23`, `Enqueue` `:109`. +`SubmitQuestionHandler` (`.../SessionQuestions/UseCases/Submit/SubmitQuestionHandler.cs`): queue `:36`, +save `:184`, rationale (the count read is what the guard covers; the caller's token is deliberately not +passed) `:190-203`, `EnqueueSubmittedAsync` `:205` with `BestEffort.ExecuteAsync` `:206`, approved enqueue +`:217`, Pending count read `:223-226`, count enqueue `:232`. `ModerateQuestionHandler` +(`.../SessionQuestions/UseCases/Moderate/ModerateQuestionHandler.cs`): queue `:26`, rationale `:94-104`, +payload switch built OUTSIDE the guard so an unknown action faults loudly (`:113-136`), +`BestEffort.ExecuteAsync` `:138`, enqueue `:140`, count read `:145-148`, count enqueue `:154`. +Drain worker `LiveChannelPublishProcessor` (`.../Engagement.Infrastructure/Live/LiveChannelPublishProcessor.cs`): +class `:30-33` (a `BackgroundService`), rationale `:22`, operation prefix `"live-channel-publish:"` `:36`, +`BestEffort.ExecuteAsync` `:45`, per-item `ILiveChannelPublisher` resolution `:51`, shutdown-only +`OperationCanceledException` catch `:60`; registered `AddHostedService` +(`.../Engagement.Infrastructure/DependencyInjection.cs:21`). +Engagement's composition root states the no-await rule in a comment +(`MMCA.ADC/Source/Services/MMCA.ADC.Engagement.Service/Program.cs:239-243`) and registers +`AddNotificationLiveChannelClient()` at `:285`, after `AddScheduledJobs` at `:194`. +gRPC ingress, re-read this run: `AddNotificationLiveChannelClient` defaults to `_grpc.notification` and +`Replace`s the port with the adapter (`MMCA.ADC/Source/Services/MMCA.ADC.Notification.Contracts/DependencyInjection.cs:42`, +`:48`); `LiveChannelPublisherGrpcAdapter` (`.../Notification.Contracts/LiveChannelPublisherGrpcAdapter.cs:20`, +2s `PushDeadline` `:26`); `LiveChannelGrpcService` takes the host's `ILiveChannelPublisher` +(`.../Notification.Service/Grpc/LiveChannelGrpcService.cs:31`). Notification's Kestrel profile: +mixed-endpoint comment `.../Notification.Service/Program.cs:58-60` and default `Http1AndHttp2` endpoint +`:73`. Not re-pinned this run (carried from the 2026-09-19 pass and not flagged by this pass's audit): +the adapter's failure-swallow lines, the gRPC service's delegation line, the dedicated `Http2` `grpc` +endpoint line, and the hub mapping line. +Recurring job scheduler, grounded in `Website/docs-src/adr/074-recurring-job-scheduler.md` (not re-read +this run; its anchors `:17-20`, `:30-35`, `:37-42`, `:67-71`, `:164-167`, `:177-180` are carried from +2026-09-19) plus MMCA.Common source re-read this run. `ScheduledJobRunner` +(`Source/Core/MMCA.Common.Infrastructure/Scheduling/ScheduledJobRunner.cs`): Cronos alias `:12`, class +`:39-44` (a `BackgroundService` taking an optional `TimeProvider`, `:44`), `MinimumWait` 1s `:72`, cycle +loop feeding `earliestNextRun` into `ComputeWaitTime` `:104-122`, `ComputeWaitTime` `:146` (doc +`:138-142`), `CronSchedule.Parse(...).GetNextOccurrence(afterUtc, inclusive: false)` `:195`, +`RunCycleAsync` returning the earliest upcoming occurrence `:208-213`, due-row read `:417-424`, the claim +quoted in the code block (comment and statement verbatim, `.ConfigureAwait(false)` dropped) `:435-445`, +missed-run policy comment `:484-486`, token-guarded outcome stamp `:497-512`, `InvokeJobAsync` `:528` +opening a fresh scope per run `:532`. `SchedulerSettings.PollingIntervalSeconds` defaults to 30 and +`LeaseSeconds` to 300 (`Source/Core/MMCA.Common.Infrastructure/Scheduling/SchedulerSettings.cs:34`, +`:43`). `IScheduledJob` members, `ScheduledJobEntry` columns, `SchedulerModelGateTests` and the Cronos +package pin are carried from the 2026-09-19 pass, not re-read this run. Adoption by grep for +`AddScheduledJobs(` this run: Store Catalog (`MMCA.Store/Source/Services/MMCA.Store.Catalog.Service/Program.cs:234`), +Sales (`.../MMCA.Store.Sales.Service/Program.cs:209`), Identity (`.../MMCA.Store.Identity.Service/Program.cs:196`); +ADC Identity (`MMCA.ADC/Source/Services/MMCA.ADC.Identity.Service/Program.cs:234`), Engagement +(`.../MMCA.ADC.Engagement.Service/Program.cs:194`), Conference (`.../MMCA.ADC.Conference.Service/Program.cs:344`); +Helpdesk web host (`MMCA.Helpdesk/Source/Hosts/MMCA.Helpdesk.Web/Program.cs:91`). Illustrative-of-documented-shape: the scheduler code block pairs the three `IScheduledJob` member -signatures (verbatim from `IScheduledJob.cs:44`, `:68`, `:78`, with the surrounding XML docs replaced by -short inline comments) with the verbatim claim statement from `ScheduledJobRunner.cs:427-437`; the two are -adjacent in neither file. The live-channel code block is a condensed reconstruction of two real files, -`CastVoteHandler.cs:86-95` (commit, build results for the caller, return) and -`LivePollVoteChangedHandler.cs:73-82` (post-commit rebuild with `userId: null`, channel key, `Enqueue`); -it mirrors the real `SaveChangesAsync`, `resultsBuilder.BuildAsync`, `LivePollChannel.ForSession/ForEvent` -and `Enqueue(new LiveChannelPublishWorkItem(...))` shapes but simplifies names, elides the scope creation -and the enclosing `BestEffort.ExecuteAsync` call, and drops the surrounding vote-resolution branches for -readability.* +signatures (inline comments replace the XML docs) with the claim from `ScheduledJobRunner.cs:435-445`. +The live-channel code block condenses `CastVoteHandler.cs:56-73` (commit, build results for the caller, +return) and `LivePollVoteChangedHandler.cs:73-82` (rebuild with `userId: null`, channel key, `Enqueue`), +eliding the scope creation, the enclosing `BestEffort.ExecuteAsync` call, the unique-constraint catch and +the vote-resolution branches. The `FullMode = BoundedChannelFullMode.Wait` plus `TryWrite` pairing is +prose, not a block: it is documented `BoundedChannelFullMode` behaviour, and no `Wait`-mode channel +exists in MMCA.Common, MMCA.Store or MMCA.ADC. The onboarding chapter +`Website/docs-src/onboarding/group-23-engagement-live-layer.md` was not re-read this run.* diff --git a/docs-src/articles/managed-file-storage-avatars.md b/docs-src/articles/managed-file-storage-avatars.md index 2b46e805..429f99de 100644 --- a/docs-src/articles/managed-file-storage-avatars.md +++ b/docs-src/articles/managed-file-storage-avatars.md @@ -5,7 +5,8 @@ > `IFileStorageService.cs`, `FileUploadOptions.cs`, `NullFileStorageService.cs`, > `AzureBlobFileStorageService.cs`, `FileStorageSettings.cs`, `IImageProcessor.cs`, > `ImageSharpImageProcessor.cs`, `ImageContentSniffer.cs`, `IMediaPickerService.cs`, -> and Infrastructure `DependencyInjection.cs`. +> `DeleteBlobInternalCommandHandlerBase.cs`, and Infrastructure `DependencyInjection.cs` and +> `DependencyInjection.Notifications.cs`. > No em dashes. **Subtitle:** A user uploads a profile photo. It is attacker-controlled bytes with GPS coordinates @@ -52,32 +53,32 @@ The framework had no blob abstraction before this. Anything file-shaped would ha against the Azure SDK inside a module, unusable by the next consumer and untestable. ADR-045 adds two Application-layer ports, split the Clean-Architecture way, plus a dependency-free validator. The ports carry more than avatars: ADR-045's avatar-only scope statement is superseded by ADR-123 -(`045-managed-file-storage-and-avatars.md:9-11`, `:73-76`), which publishes speaker session materials +(`045-managed-file-storage-and-avatars.md:9-11`, `:77-80`), which publishes speaker session materials through the same `IFileStorageService`. **`IFileStorageService`** (`IFileStorageService.cs:11`) is the storage boundary: `UploadAsync` takes a blob name, a stream, and a content type and returns the public `Uri` as a `Result` (`:22`). A second overload adds a `FileUploadOptions` carrying the `Content-Disposition` and `Cache-Control` headers to -store with the blob, and it is a default interface member that forwards to the three-argument one -(`:42-43`), so an implementation written against the original contract keeps compiling. `DeleteAsync` is -idempotent (`:49`), and unknown blob names succeed rather than throw. Callers pass only a blob -name scoped within a container; the implementation owns the container, and the container itself is -provisioned by infrastructure, never created by the app. +store with the blob (`:37`), and it is abstract, so every implementation provides it and honors those +headers. `DeleteAsync` (`:43`) is idempotent: unknown blob names succeed rather than throw (`:39`). +Callers pass only a blob name scoped within a container; the implementation owns the container, and the +container itself is provisioned by infrastructure, never created by the app. The default implementation is deliberately inert. `NullFileStorageService` (`NullFileStorageService.cs:11`) reports `IsConfigured => false`, fails both upload overloads with a clear `FileStorage.NotConfigured` error, and lets deletes succeed (there is nothing to delete). A host that never wires storage does not crash mysteriously; its upload endpoints degrade with an honest message. A host that wants real storage calls `AddAzureBlobFileStorage(configuration)` -(`DependencyInjection.cs:893`), which swaps in `AzureBlobFileStorageService` +(`DependencyInjection.Notifications.cs:114`), which swaps in `AzureBlobFileStorageService` (`AzureBlobFileStorageService.cs:15`) when the `FileStorage` section is complete. That registration is defensive on purpose. An incomplete section is a no-op that leaves the Null default -in place (`DependencyInjection.cs:899`), so hosts register it unconditionally. Production sets -`ServiceUri` and authenticates with `DefaultAzureCredential` (`DependencyInjection.cs:914`); local -development can use a `ConnectionString` against Azurite instead (`FileStorageSettings.cs:16-19`). One -detail earns its comment in the source: an empty-string `ServiceUri` binds to a *relative* `Uri`, so the -guard only accepts an absolute one (`DependencyInjection.cs:904-905`). +in place (`DependencyInjection.Notifications.cs:120-123`, `:127-130`), so hosts register it +unconditionally. Production sets `ServiceUri` and authenticates with `DefaultAzureCredential` (`:135`); +local development can use a `ConnectionString` against Azurite instead (`:136`, +`FileStorageSettings.cs:16-19`). One detail earns its comment in the source: an empty-string `ServiceUri` +binds to a *relative* `Uri`, so the guard only accepts an absolute one +(`DependencyInjection.Notifications.cs:125-126`). But storage is the boring half. The security boundary is the image processor. @@ -85,10 +86,10 @@ But storage is the boring half. The security boundary is the image processor. `IImageProcessor` (`IImageProcessor.cs:11`) has one method, `NormalizeToSquareJpegAsync`, and its implementation `ImageSharpImageProcessor` -(`ImageSharpImageProcessor.cs:15`) does something that looks like image resizing and is actually a -security control. It reads the header and refuses anything too big to decode, then decodes the upload, -bakes EXIF orientation into the pixels, center-crops to an exact square, strips every metadata profile, -and re-encodes as a fresh JPEG: +(`ImageSharpImageProcessor.cs:16`) does something that looks like image resizing and is actually a +security control. It reads the header and refuses anything too big to decode, then decodes only the first +frame of the upload, bakes EXIF orientation into the pixels, center-crops to an exact square, strips every +metadata profile, and re-encodes as a fresh JPEG: ```csharp // ImageSharpImageProcessor.NormalizeToSquareJpegAsync (illustrative of shape) @@ -99,7 +100,9 @@ if (TooLargeToDecode(info.Width, info.Height)) return Result.Failure(Error.Validation("Image.TooLarge", ...)); } -using var image = await Image.LoadAsync(content, cancellationToken); +// One frame only: an animated file never expands into every frame's pixel buffer. +using var image = await Image.LoadAsync(new DecoderOptions { MaxFrames = 1 }, content, cancellationToken); +// ...then the same TooLargeToDecode check re-runs on the decoded frame. // AutoOrient BEFORE stripping metadata, or portrait phone photos come out rotated. image.Mutate(ctx => ctx @@ -114,28 +117,33 @@ await image.SaveAsync(output, new JpegEncoder { Quality = 85 }, cancellationToke ``` The point is what does *not* survive. A full decode-then-re-encode means only the pixel grid crosses the -boundary. EXIF GPS is gone because the metadata profiles are nulled (`ImageSharpImageProcessor.cs:84-86`). +boundary. EXIF GPS is gone because the metadata profiles are nulled (`ImageSharpImageProcessor.cs:88-90`). The polyglot payload is gone because the bytes that carried it were never re-emitted: the output is a new JPEG the encoder wrote from a decoded bitmap. One operation kills both classes of problem, and it does so by construction rather than by a blocklist you have to keep updating. The header check in front of the decode is not a size nicety. The avatar contract's 2 MB cap bounds the *compressed* bytes, which a decompression bomb satisfies happily: a 2 MB PNG can declare 40000x40000 and -cost roughly 6 GB of frame buffer the moment it is decoded. So the processor bounds the decoded frame -instead, with `MaxDecodedPixels` at 50,000,000 (`ImageSharpImageProcessor.cs:26`) and -`MaxDecodedDimension` at 20,000 (`:33`); the edge ceiling sits beside the area one because a 1 x 200000 -strip is inside the area limit and still pathological for the resampler. `Image.IdentifyAsync` applies -both to the declared header before a single frame is allocated (`:47`), and the same predicate -(`:111-114`) re-applies them to the decoded frame (`:66-72`), so a header that under-reports its real +cost roughly 6 GB of frame buffer the moment it is decoded (`ImageSharpImageProcessor.cs:23-24`). So the +processor bounds the decoded frame instead, with `MaxDecodedPixels` at 50,000,000 (`:27`) and +`MaxDecodedDimension` at 20,000 (`:34`); the edge ceiling sits beside the area one because a 1 x 200000 +strip is inside the area limit and still pathological for the resampler (`:30-32`). `Image.IdentifyAsync` +applies both to the declared header before a single frame is allocated (`:48`), and the same predicate +(`:115-118`) re-applies them to the decoded frame (`:70-76`), so a header that under-reports its real size does not get through. Past either ceiling the upload is -`Error.Validation("Image.TooLarge", ...)` (`:51-55`): a clean 400 rather than the OutOfMemoryException the +`Error.Validation("Image.TooLarge", ...)` (`:50-56`): a clean 400 rather than the OutOfMemoryException the upload was built to provoke. +The frame count is bounded as well as the frame size. The decode passes +`new DecoderOptions { MaxFrames = 1 }` (`ImageSharpImageProcessor.cs:66`): the output is a single JPEG +built from the first frame, and decoding every frame of an animated file is how a small upload becomes +hundreds of megabytes of pixel buffers (`:63-65`). + Undecodable content is a validation failure too, not an exception. The processor catches `UnknownImageFormatException` and `InvalidImageContentException` and returns -`Error.Validation("Image.Undecodable", ...)` (`ImageSharpImageProcessor.cs:95-101`), so a garbage upload +`Error.Validation("Image.Undecodable", ...)` (`ImageSharpImageProcessor.cs:99-105`), so a garbage upload is a clean 400, not a 500. And because the processor has no external configuration, it is *always* -registered as the real implementation (`DependencyInjection.cs:746`), unlike storage: there is no Null +registered as the real implementation (`DependencyInjection.cs:336`), unlike storage: there is no Null image processor, because there is no safe way to skip the re-encode. Ahead of the processor sits `ImageContentSniffer` (`ImageContentSniffer.cs:10`), a static, dependency-free @@ -151,11 +159,12 @@ Storage and re-encode are framework legs. The avatar itself is a contract (BR-11 one avatar per user; accept jpeg/png/webp up to 2 MB; the server re-encodes to a 256x256 JPEG via `IImageProcessor`, treating client-declared content types as advisory only. The blob name is `{userId}-{random8}.jpg` in the public-read `avatars` container, so the URL path reads -`avatars/{userId}-{random8}.jpg`. Uploading a new avatar deletes the previous blob. The URL lives on the -user entity as `[Pii]`: nulled on anonymize with the blob deleted, and included in the GDPR data export. -That last part is why this article carries a §30 (data privacy) tie alongside the §8 (data access) and -§11 (security) ones: the avatar is treated as personal data from the moment it lands to the moment it is -erased. +`avatars/{userId}-{random8}.jpg`. Replacing, removing or erasing an avatar schedules a durable +`DeleteAvatarBlobInternalCommand` (ADR-114) rather than deleting the blob inline. The URL lives on the +user entity as `[Pii]`: nulled on anonymize with the blob delete scheduled in the same transaction, and +included in the GDPR data export (`045-managed-file-storage-and-avatars.md:41-48`). That last part is why +this article carries a §30 (data privacy) tie alongside the §8 (data access) and §11 (security) ones: the +avatar is treated as personal data from the moment it lands to the moment it is erased. ### One capability, two client affordances @@ -177,10 +186,15 @@ oversights. URL can fetch the image. The random 8-character blob suffix prevents enumeration (you cannot walk from one avatar to the next), and the trade-off is accepted and documented in the consumer's privacy policy. This is a deliberate acceptance, not a gap. -- **CDN and browser caches can serve a stale avatar briefly.** A replaced or deleted avatar deletes its - blob, but a cache may hold the old URL for a moment. Because the random suffix means a new upload never - reuses the old URL, staleness is bounded by cache TTLs and self-heals; there is no cache-busting dance to - get right. +- **CDN and browser caches can serve a stale avatar briefly.** After a replace or a delete, a cache may + hold the old URL for a moment. Because the random suffix means a new upload never reuses the old URL, + staleness is bounded by cache TTLs and self-heals; there is no cache-busting dance to get right. +- **Avatar blob deletion is eventual, not synchronous.** A replaced or deleted avatar has its blob + deleted at least once, through the internal-command processor and within its retry budget + (`045-managed-file-storage-and-avatars.md:55-57`). Only erasure schedules inside its own transaction; + replace and remove schedule after the save commits, so a host death in between, or a failed schedule, + leaves an orphaned blob that is only logged for manual removal (`:127-132`, + `SetUserAvatarHandler.cs:162-165`). - **`DefaultAzureCredential` needs a data-plane role, not a secret.** In production the storage account requires a `Storage Blob Data Contributor` grant for the app identity. That is a bicep-level infrastructure grant, which is the correct place for it, but it does mean the app will not authenticate until the role @@ -192,16 +206,22 @@ oversights. Be precise about status: the framework legs are implemented and shipped in MMCA.Common, and two MMCA.ADC services wire them end to end. The Identity service calls `AddAzureBlobFileStorage(builder.Configuration)` -at startup for avatars (`MMCA.ADC.Identity.Service/Program.cs:243`) and the Conference service calls it for -speaker session assets (`MMCA.ADC.Conference.Service/Program.cs:338`). On the Identity side, -`SetUserAvatarHandler` is the only handler that touches `IFileStorageService` inline; replacing an avatar, -removing one and deleting a user all schedule a durable `DeleteAvatarBlobInternalCommand` through -`IInternalCommandScheduler` (`SetUserAvatarHandler.cs:127-128`, `RemoveUserAvatarHandler.cs:20,74-75`, -`DeleteUserHandler.cs:31,79`), and the blob deletion itself runs in -`DeleteAvatarBlobInternalCommandHandler` (`:21-24`). The `Profile` page uploads through -`IMediaPickerService` (`Profile.razor.cs:22`). Each consumer still provisions its own storage account and -wires its own upload endpoints against these ports, so this is a capability the framework provides rather -than one that is live in every downstream app by default: MMCA.Store has not adopted it. +at startup for avatars (`MMCA.ADC.Identity.Service/Program.cs:242`) and the Conference service calls it for +speaker session assets (`MMCA.ADC.Conference.Service/Program.cs:353`). On the Identity side, +`SetUserAvatarHandler` is the only request-path handler that calls `IFileStorageService`, for the upload +itself (`SetUserAvatarHandler.cs:117`). Every avatar blob delete is a durable +`DeleteAvatarBlobInternalCommand` scheduled through `IInternalCommandScheduler`: the replaced blob once +the new URL is saved (`SetUserAvatarHandler.cs:158-160`), the freshly uploaded blob when the save fails +and leaves no row pointing at it (`:78-88`, `:186-188`), a removed avatar +(`RemoveUserAvatarHandler.cs:20,74-75`) and an erased user (`DeleteUserHandler.cs:31,79`). The deletion +runs in `DeleteAvatarBlobInternalCommandHandler` (`DeleteAvatarBlobInternalCommandHandler.cs:17-23`), +which only names the blob kind for its log lines and inherits the work from Common's +`DeleteBlobInternalCommandHandlerBase` (`DeleteBlobInternalCommandHandlerBase.cs:28`): the port call +(`:45`), with a `NotFound` answer completing the row as success (`:53-57`) so at-least-once execution +stays idempotent. The `Profile` page uploads through `IMediaPickerService` (`Profile.razor.cs:22`). Each +consumer still provisions its own storage account and wires its own upload endpoints against these ports, +so this is a capability the framework provides rather than one that is live in every downstream app by +default: MMCA.Store has not adopted it. ## Apply this even without MMCA @@ -215,7 +235,8 @@ The pattern ports to any stack and any blob store. The rules are short: 3. **Auto-orient before you strip metadata**, or portrait phone photos come out sideways once the EXIF orientation flag is gone. 4. **Bound the decoded frame, not just the uploaded bytes.** Read the header, refuse the declared - dimensions that would not fit in memory, and re-check after the decode. + dimensions that would not fit in memory, decode only the one frame you keep, and re-check after the + decode. 5. **Put storage behind a port with an inert default.** An unconfigured implementation that fails uploads with a clear message beats a host that half-works or crashes at first use. 6. **Treat the stored URL as PII.** If it points at a user's face, it belongs in your erasure path and your @@ -232,10 +253,11 @@ picture.** Storage is the easy half; the re-encode is the boundary that matters. content-type confusion, polyglot payloads); how `IFileStorageService` gives an upload-by-blob-name boundary with an inert `NullFileStorageService` default that fails clearly and an `AddAzureBlobFileStorage` swap to the real Azure implementation; how the real security boundary is the full re-encode in `ImageSharpImageProcessor` -(header size check, decode, auto-orient, center-crop, strip all metadata, re-encode JPEG) fronted by -`ImageContentSniffer`'s magic-byte check; the avatar contract (256x256 JPEG, 2 MB, random-suffixed public-read -blob, URL as `[Pii]`); and the honest trade-offs (public-read container, cache staleness, a data-plane role -grant, the Six Labors Split License). +(header size check, single-frame decode, auto-orient, center-crop, strip all metadata, re-encode JPEG) +fronted by `ImageContentSniffer`'s magic-byte check; the avatar contract (256x256 JPEG, 2 MB, +random-suffixed public-read blob, URL as `[Pii]`, blob deletes as durable internal commands); and the +honest trade-offs (public-read container, cache staleness, eventual blob deletion, a data-plane role grant, +the Six Labors Split License). **Next in the series:** HTTP API versioning, proven not just claimed, one header-based policy adopted by every service and kept honest by a shared fitness contract that runs two live versions. @@ -246,64 +268,79 @@ grant, the Six Labors Split License). *Tags: .NET, C Sharp, Software Architecture, Security, Cloud* -*Notes (re-sourced 2026-09-19 at MMCA.Common `90ffa7a`, v1.205.0): every claim below was re-read from* -*source this run. Two substantive changes since the prior pass, both now in the body: the* -*decompression-bomb ceiling ahead of the decode (SEC-Common-28), and the options-carrying second* -*`UploadAsync` overload. Every Managed File Storage anchor in Infrastructure `DependencyInjection.cs` shifted* -*again (about +298 lines) as registrations were added ahead of them; the guards, the credential branches and* -*the always-real image processor read exactly as before.* +*Notes (re-sourced 2026-10-02 against MMCA.Common v1.221.0): every claim below was re-read from source* +*this run. Changes since the 2026-09-19 pass, all now in the body: the options-carrying `UploadAsync`* +*overload is ABSTRACT (ADR-045 records it becoming abstract in v1.210.0 at :99-101), not a default* +*interface member; the decode is bounded to one frame (`DecoderOptions { MaxFrames = 1 }`); the* +*`AddAzureBlobFileStorage` registration lives in the partial `DependencyInjection.Notifications.cs`; ADR-045* +*gained a third Revision (2026-10-01) making avatar blob deletion a durable internal command, so the avatar* +*contract, the trade-offs and the consumer paragraph describe scheduled, eventual deletion; and the ADC blob* +*delete work moved into Common's `DeleteBlobInternalCommandHandlerBase`. Behavior of the guards, credential* +*branches, ceilings and re-encode is unchanged; only their anchors moved.* *Storage port: `IFileStorageService` in `MMCA.Common.Application` (namespace* *`MMCA.Common.Application.Interfaces.Infrastructure.Storage`, `IFileStorageService.cs:11`): `IsConfigured` at* -*:14, three-argument `UploadAsync` returning `Result` at :22, the `FileUploadOptions` overload as a* -*DEFAULT INTERFACE MEMBER forwarding to it at :42-43 (rationale in its `` at :36-41), idempotent* -*`DeleteAsync` at :49. `FileUploadOptions` (`FileUploadOptions.cs:13`): `None` at :21, `ContentDisposition` at* -*:28, `CacheControl` at :34. Inert default `NullFileStorageService` (`NullFileStorageService.cs:11`):* -*`IsConfigured => false` at :14, both upload overloads at :17-18 and :21-22 forwarding to the private* -*`NotConfigured()` helper at :28-32 whose code is `"FileStorage.NotConfigured"` at :30, delete succeeds at* -*:25-26. Real adapter `AzureBlobFileStorageService` (`AzureBlobFileStorageService.cs:15`): `IsConfigured =>* -*true` at :20, the three-argument overload delegating with `FileUploadOptions.None` at :23-24, upload via* -*`BlobContainerClient.GetBlobClient` at :33 writing `ContentDisposition`/`CacheControl` at :41-42 and* -*returning `blobClient.Uri` at :47, `DeleteBlobIfExistsAsync` at :64, container provisioned by infrastructure* -*per class doc :10-14. Registration `AddAzureBlobFileStorage` at `DependencyInjection.cs:893`; the two* -*incomplete-section no-op guards return at :899-902 (missing `ContainerName`) and :906-909 (neither* -*`ServiceUri` nor `ConnectionString`); absolute-`ServiceUri` comment at :904 and check at :905;* -*`DefaultAzureCredential` production branch at :914; `ConnectionString` branch at :915;* -*`AzureBlobFileStorageService` registered at :918; Null default `TryAddTransient` at :745; `IImageProcessor`* -*always-real `TryAddSingleton` at :746. Settings `FileStorageSettings` (`FileStorageSettings.cs:10`):* -*`SectionName = "FileStorage"` at :13, `ServiceUri` at :16, `ConnectionString` at :19, `ContainerName` at :22.* +*:14, three-argument `UploadAsync` returning `Result` at :22, the `FileUploadOptions` overload abstract at* +*:37 (summary :24-29, `SuppressMessage` RS0026 at :36), `DeleteAsync` at :43 with "unknown names succeed* +*(idempotent)" in its doc at :39. `FileUploadOptions` (`FileUploadOptions.cs:13`): `None` at :21,* +*`ContentDisposition` at :28, `CacheControl` at :34. Inert default `NullFileStorageService`* +*(`NullFileStorageService.cs:11`): `IsConfigured => false` at :14, both upload overloads at :17-18 and :22-23* +*forwarding to the private `NotConfigured()` helper at :29-33 whose code is `"FileStorage.NotConfigured"` at* +*:31, delete succeeds at :26-27. Real adapter `AzureBlobFileStorageService` (`AzureBlobFileStorageService.cs:15`):* +*`IsConfigured => true` at :20, the three-argument overload delegating with `FileUploadOptions.None` at :23-24,* +*upload via `BlobContainerClient.GetBlobClient` at :34 writing `ContentDisposition`/`CacheControl` at :42-43* +*and returning `blobClient.Uri` at :48, `DeleteBlobIfExistsAsync` at :65, container provisioned by* +*infrastructure per class doc :10-14. Registration `AddAzureBlobFileStorage` at* +*`DependencyInjection.Notifications.cs:114`; the two incomplete-section no-op guards return at :120-123* +*(missing `ContainerName`) and :127-130 (neither `ServiceUri` nor `ConnectionString`); absolute-`ServiceUri`* +*comment at :125 and check at :126; `DefaultAzureCredential` production branch at :135; `ConnectionString`* +*branch at :136; `AzureBlobFileStorageService` registered at :139. In `DependencyInjection.cs`: Null default* +*`TryAddTransient` at :335 and `IImageProcessor` always-real `TryAddSingleton` at :336. Settings* +*`FileStorageSettings` (`FileStorageSettings.cs:10`): `SectionName = "FileStorage"` at :13, `ServiceUri` at* +*:16, `ConnectionString` at :19, `ContainerName` at :22.* *Image boundary: `IImageProcessor` (`IImageProcessor.cs:11`), single `NormalizeToSquareJpegAsync` at :18;* -*`ImageSharpImageProcessor` (`ImageSharpImageProcessor.cs:15`): `MaxDecodedPixels = 50_000_000` at :26 and* -*`MaxDecodedDimension = 20_000` at :33 (SEC-Common-28, rationale at :21-25 and :28-32), header-only* -*`Image.IdentifyAsync` at :47 -> `Error.Validation("Image.TooLarge", ...)` at :51-55, `Image.LoadAsync` at* -*:62, decoded-frame re-check at :66-72, `TooLargeToDecode` predicate at :111-114, `AutoOrient()` +* -*`ResizeMode.Crop` to `Size(size, size)` at :76-82, metadata nulled (Exif/Xmp/Iptc) at :84-86, `JpegEncoder {* -*Quality = 85 }` at :91, undecodable caught (`UnknownImageFormatException`/`InvalidImageContentException`) ->* -*`Error.Validation("Image.Undecodable", ...)` at :95-101. Magic-byte validator `ImageContentSniffer` (static,* -*`ImageContentSniffer.cs:10`): `IsAllowedImage` at :15, JPEG `FF D8 FF` at :21-22, 8-byte PNG signature at* -*:27-28, RIFF/`WEBP` at :33-36. The 256x256/2 MB/`{userId}-{random8}.jpg`/public-read `avatars` container and* -*`[Pii]` URL (nulled on anonymize, in GDPR export) are the BR-116a avatar contract from* -*`Website/docs-src/adr/045-managed-file-storage-and-avatars.md:39-44`; trade-offs (public-read container +* -*random suffix, CDN staleness, `Storage Blob Data Contributor` data-plane grant, Six Labors Split License)* -*from the same ADR's Consequences at :46-57 and Decision at :29-34. That ADR carries two Revision sections:* -*2026-09-07 for the decode ceilings (:59-71) and 2026-09-12 (:73-104) recording that its avatar-only scope is* -*SUPERSEDED by ADR-123 (also flagged in Status at :9-11), which carries speaker session documents over the* -*same port. Client affordance: `IMediaPickerService` (`IMediaPickerService.cs:9`, `IsSupported` at :12,* -*cancelled/denied returns null per doc :4-7); `NullMediaPickerService` web default `IsSupported => false` at* -*`NullMediaPickerService.cs:10`, InputFile affordance-switch note at :3-5. ADR-045 Accepted 2026-07-11.* +*`ImageSharpImageProcessor` (`ImageSharpImageProcessor.cs:16`): `MaxDecodedPixels = 50_000_000L` at :27 and* +*`MaxDecodedDimension = 20_000` at :34 (SEC-Common-28, rationale at :18-26 and :29-33, the 40000x40000 ~6 GB* +*example at :24, the 1 x 200000 strip at :30), header-only `Image.IdentifyAsync` at :48 ->* +*`Error.Validation("Image.TooLarge", ...)` at :50-56, single-frame `Image.LoadAsync(new DecoderOptions {* +*MaxFrames = 1 }, ...)` at :66 (rationale :63-65), decoded-frame re-check at :70-76, `TooLargeToDecode`* +*predicate at :115-118, `AutoOrient()` + `ResizeMode.Crop` to `Size(size, size)` at :80-86, metadata nulled* +*(Exif/Xmp/Iptc) at :88-90, `JpegEncoder { Quality = 85 }` at :95, undecodable caught* +*(`UnknownImageFormatException`/`InvalidImageContentException`) -> `Error.Validation("Image.Undecodable", ...)`* +*at :99-105. Magic-byte validator `ImageContentSniffer` (static, `ImageContentSniffer.cs:10`): `IsAllowedImage`* +*at :15, JPEG `FF D8 FF` at :21-22, 8-byte PNG signature at :27-28, RIFF/`WEBP` at :33-36.* +*ADR-045 (`Website/docs-src/adr/045-managed-file-storage-and-avatars.md`, Accepted 2026-07-11 at :4): Status* +*:3-13 flags three revisions; the ImageSharp/Six Labors Split License Decision bullet at :31-36; the* +*BR-116a avatar contract (256x256, 2 MB, `{userId}-{random8}.jpg`, public-read `avatars` container, durable* +*`DeleteAvatarBlobInternalCommand` on replace/remove/erase, `[Pii]` URL nulled on anonymize with the delete* +*scheduled in the same transaction, GDPR export) at :41-48; Consequences at :50-61 (public-read + random* +*suffix :51-54, eventual at-least-once deletion and cache staleness :55-57, `Storage Blob Data Contributor`* +*:58-59, license revisit :60-61). Revisions: 2026-09-07 decode ceilings at :63-75, 2026-09-12 at :77-109* +*(avatar-only scope SUPERSEDED by ADR-123, options overload abstract since v1.210.0 at :99-101), 2026-10-01* +*at :111-134 (durable avatar blob deletion; replace/remove schedule post-commit so a failed schedule leaves a* +*logged orphan, :127-132). Client affordance: `IMediaPickerService` (`IMediaPickerService.cs:9`,* +*`IsSupported` at :12, cancelled/denied returns null and affordance-switch note per doc :4-7);* +*`NullMediaPickerService` web default at `NullMediaPickerService.cs:7`, `IsSupported => false` at :10.* *Consumers: MMCA.ADC Identity `AddAzureBlobFileStorage(builder.Configuration)` at* -*`MMCA.ADC.Identity.Service/Program.cs:243` (BR-116a/ADR-045 comment at :241-242) and ADC Conference at* -*`MMCA.ADC.Conference.Service/Program.cs:338` for session assets; only `SetUserAvatarHandler` injects* -*`IFileStorageService` directly, while `RemoveUserAvatarHandler` (`:20`, `:74-75`), `DeleteUserHandler`* -*(`:31`, `:79`) and `SetUserAvatarHandler` itself for the replaced blob (`:127-128`) schedule* -*`DeleteAvatarBlobInternalCommand` through `IInternalCommandScheduler` (ADR-114), with the port call in* -*`DeleteAvatarBlobInternalCommandHandler.cs:21-24`; `Profile.razor.cs` (Identity.UI) injects* -*`IMediaPickerService` at `:22`. MMCA.Store has not adopted it (no `IFileStorageService`,* -*`AddAzureBlobFileStorage` or `IMediaPickerService` reference anywhere under `MMCA.Store/Source` this run).* -*Anchor facts (not recounted here): 19 NuGet packages (`MMCA.Common/FACTS.md:19`), 125 accepted ADRs* -*(001-125, `Website/docs-src/adr/README.md:6`), framework v1.205.0 (`FACTS.md:14`), MMCA.Common index* -*Maturity 97.0% (318/328) / Implementation 86.0% (705/820) at the thirty-sixth wave, 2026-09-19* -*(`Website/docs-src/governance/common-ArchitectureScorecard.md:5`), ImageSharp under the Six Labors Split* -*License. The code block is illustrative of shape (elided using/try/await scaffolding and the message* -*arguments), not a verbatim copy; every named call and value in it is verified above.* +*`MMCA.ADC.Identity.Service/Program.cs:242` (BR-116a/ADR-045 comment at :240-241) and ADC Conference at* +*`MMCA.ADC.Conference.Service/Program.cs:353` (comment at :350) for session assets. `SetUserAvatarHandler`* +*(`:27`) injects `IFileStorageService` (`:30`) and `IInternalCommandScheduler` (`:31`); upload at :117,* +*`entity.SetAvatarUrl` at :127; replaced blob scheduled post-commit in `OnMutatedAsync` at :158-160 with the* +*failed-schedule log at :162-165; the orphaned new blob scheduled on a failed save at :78-88 via* +*`ScheduleUploadedBlobCleanupAsync` (:180, schedule at :186-188, fresh scope, no cancellation).* +*`RemoveUserAvatarHandler` (`:20`, `:74-75`) and `DeleteUserHandler` (`:31`, `:79`) schedule* +*`DeleteAvatarBlobInternalCommand` through `IInternalCommandScheduler` (ADR-114).* +*`DeleteAvatarBlobInternalCommandHandler.cs:17-23` derives from Common's* +*`DeleteBlobInternalCommandHandlerBase` (`MMCA.Common.Application/InternalCommands/DeleteBlobInternalCommandHandlerBase.cs:28`)* +*and overrides `BlobKind` at :23; the base makes the `fileStorage.DeleteAsync` call at :45 and maps* +*`NotFound` to success at :53-57. `Profile.razor.cs` (Identity.UI) injects `IMediaPickerService` at `:22`.* +*MMCA.Store has not adopted it (no `IFileStorageService`, `AddAzureBlobFileStorage` or `IMediaPickerService`* +*reference under `MMCA.Store/Source`, per this run's audit).* +*Anchor facts (not recounted here): 22 NuGet packages (`MMCA.Common/FACTS.md:19`), 131 accepted ADRs* +*(001-131, `Website/docs-src/adr/README.md:6`), framework v1.221.0 (`FACTS.md:14`), MMCA.Common index* +*Maturity 96.6% (317/328) / Implementation 86.0% (705/820), evidence as of 2026-10-01 at v1.218.0* +*(`Website/docs-src/governance/common-ArchitectureScorecard.md:5`, `:9`, `:10`), ImageSharp under the Six* +*Labors Split License. The code block is illustrative of shape (elided using/try/await scaffolding, the* +*decoded-frame re-check body and the message arguments), not a verbatim copy; every named call and value in* +*it is verified above.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/manual-dto-mapping.md b/docs-src/articles/manual-dto-mapping.md index 361bd9cc..5bd6de2f 100644 --- a/docs-src/articles/manual-dto-mapping.md +++ b/docs-src/articles/manual-dto-mapping.md @@ -1,8 +1,8 @@ # Delete AutoMapper: explicit, compile-time DTO mapping that you can actually test -> Series: MMCA.Common · Article #23 (deep-dive) · Pillar P2 · Group G12 · Rubric §9,§15 · ADR-001 · Status: grounded in `Website/docs-src/onboarding/group-12-api-hosting-mapping.md`, ADR-001. No em dashes. +> Series: MMCA.Common · Article #23 (deep-dive) · Pillar P2 · Group G12 · Rubric §9,§15 · ADR-001 · Status: grounded in `Website/docs-src/onboarding/group-12-api-hosting-mapping.md`, ADR-001, `Interfaces/Mapping/IEntityDTOMapper.cs`, `DependencyInjection.ModuleScanning.cs`. No em dashes. -**Subtitle:** Reflection-based mappers feel like they save you work until the day a renamed property silently maps to null in production. Here is the alternative: named mapper classes, generated at compile time, where a missing map is a build error and a bad request is a Result failure, not an exception. +**Subtitle:** Reflection-based mappers feel like they save you work until the day a renamed property silently maps to null in production. Here is the alternative: named mapper classes, generated at compile time, where a renamed property is a build error and a bad request is a Result failure, not an exception. --- @@ -10,7 +10,7 @@ Almost every .NET service has the same boring chore. A domain entity comes out o Here is what is not to like. Six months later somebody renames `Product.Title` to `Product.Name`, the DTO still has `Title`, and the convention quietly stops mapping it. No compiler error. No test failure unless you happened to assert that exact field. The API just starts returning `title: null`, and you find out from a support ticket. The mapping that "saved you work" was invisible coupling held together by string-matched property names, and it broke in the one place a type system normally protects you: a rename. -That failure mode is the reason MMCA.Common bans reflection-based AutoMapper outright. The decision is **ADR-001**: mapping is explicit, lives in named mapper classes, and is checked by the compiler, not discovered at runtime. This article walks through how that works, why the two mapper roles are split, and why "write the mapper yourself" is cheaper than it sounds once a source generator writes the body for you. +That failure mode is the reason MMCA.Common rejects reflection-based AutoMapper. The decision is **ADR-001**: mapping is explicit, lives in named mapper classes, and is checked by the compiler, not discovered at runtime. (The decision is a policy; its one mechanical guard is narrower: the architecture fitness rules list AutoMapper among the frameworks a Domain or Shared layer must never reference.) This article walks through how that works, why the two mapper roles are split, and why "write the mapper yourself" is cheaper than it sounds once a source generator writes the body for you. ## The case against convention-based mapping @@ -21,7 +21,7 @@ Be precise about what goes wrong with a reflection mapper, because "I prefer exp - **Invisible coupling.** The fact that `Product.Name` feeds `ProductDto.Name` exists nowhere you can read it. It is an emergent property of two class shapes and a runtime engine. Rename either side and the coupling breaks without telling you. - **Hard to test and debug.** A stack trace from a failed convention map points into the mapping framework's expression-tree machinery, not at a line of your code. Conditional mapping (redact this field for this role) fits awkwardly into a declarative profile, so it tends to leak back out into handlers anyway. -None of these are exotic. They are the ordinary tax of trading compile-time checking for runtime convenience. ADR-001 argues the same conclusion from the positive side: its rationale is five reasons to choose explicit mapping over a reflection convention, namely compile-time safety, testability, conditional logic, debuggability, and performance. Its verdict is that for the one operation you do on *every single read and write path*, that trade is backwards. +None of these are exotic. They are the ordinary tax of trading compile-time checking for runtime convenience. ADR-001 argues the same conclusion from the positive side: its rationale is five reasons to choose explicit mapping over a reflection convention, namely compile-time safety, testability, conditional logic, debuggability, and performance. The first of them names the exact failure above: a property rename breaks the build rather than silently mapping `null`. ## Two roles, two interfaces @@ -29,7 +29,7 @@ The first design move is to notice that "mapping" is actually two different jobs **Outbound: `IEntityDTOMapper`** is the read side. It maps a domain entity to the DTO that crosses the wire. It lives in `MMCA.Common.Application` (`Interfaces/Mapping/IEntityDTOMapper.cs`) and is triple-generic, constrained so the entity is an `AuditableBaseEntity`, the DTO implements `IBaseDTO`, and the identifier type is `notnull`. Those constraints force the entity and its DTO to agree on the identifier type at compile time, so you cannot accidentally pair a `Guid`-keyed entity with an `int`-keyed DTO. -It has exactly one required member, `MapToDTO(entity)`. The batch version, `MapToDTOs(collection)`, is a C# **default interface method** that just projects each item through `MapToDTO` with a collection expression. The default exists so that no mapper has to write the loop, and the honest reality is that none of them lean on it: all 35 concrete DTO mappers across the two consuming apps re-declare that identical one-line projection instead of inheriting it, which ADR-001 records outright in its own trade-offs. The contract still guarantees the batch shape is there for free; the part you actually have to think about is the single-item map. +It has exactly one required member, `MapToDTO(entity)`. The batch version, `MapToDTOs(collection)`, is a C# **default interface method** that just projects each item through `MapToDTO` with a collection expression. The default exists so that no mapper has to write the loop, and the honest reality is that none of them lean on it: all 35 concrete DTO mappers in MMCA.ADC and MMCA.Store (22 and 13) re-declare that identical one-line projection instead of inheriting it, which ADR-001 records outright in its own trade-offs, and the two DTO mappers in the MMCA.Helpdesk reference app do the same. The contract still guarantees the batch shape is there for free; the part you actually have to think about is the single-item map. **Inbound: `IEntityRequestMapper`** is the write side, and this is where the design earns its keep. It maps an incoming create request to a domain entity, but its signature is the interesting part: @@ -55,13 +55,13 @@ This is the same Result-pattern discipline the rest of the framework runs on, ap The AutoMapper crowd will raise one objection immediately: if you write every mapper by hand, you are back to typing `dto.Name = entity.Name;` forty times per entity, and that is its own kind of bug farm. -True, if you actually hand-type the assignments. MMCA.Common does not. It uses **Riok.Mapperly** (version 4.3.1), a *source-generated*, compile-time object mapper. You declare a partial mapper method; Mapperly generates the straight-line assignment code at build time. No runtime reflection, no expression-tree compilation, no per-call allocation of a mapping plan. The generated code is the same boring `dto.Name = entity.Name;` you would have written, except the compiler wrote it and will refuse to compile if the shapes do not line up. +True, if you actually hand-type the assignments. MMCA.Common does not. It uses **Riok.Mapperly** (version 4.3.1), a *source-generated*, compile-time object mapper. You declare a partial mapper method; Mapperly generates the straight-line assignment code at build time. No runtime reflection, no expression-tree compilation, no per-call construction of a mapping plan. The generated code is the same boring `dto.Name = entity.Name;` you would have written, except the compiler wrote it and the build fails when a DTO member has nothing to map from. This is the move that dissolves the usual "explicit versus convenient" dichotomy. Mapperly gives you both: - It is **explicit**, because the mapper is a named class you can open, read, and set a breakpoint in. The mapping exists as code, not as an emergent property of two type shapes. -- It is **compile-time checked**, because an unmapped property or a type mismatch is a build error or a generator diagnostic, surfaced in the implementing class, not a runtime surprise. -- It is **fast and allocation-free**, because there is no reflection at mapping time, just the generated assignments. +- It is **compile-time checked** where the rename bites: a DTO member with no matching source member is a Mapperly generator warning, and `TreatWarningsAsErrors` turns it into a build error, surfaced in the implementing class, not a runtime surprise. The opposite direction is deliberately quiet: an entity member that no DTO member consumes (Mapperly's RMG020) is suppressed in the Application projects, so a DTO can expose a subset of its entity without noise. +- It is **fast**, because there is no reflection or expression compilation at mapping time, just the generated assignments. So the framework's mapper interfaces define the *contract* (entity to DTO, request to Result-of-entity), and Mapperly fills in the *body* for the common straight-shape cases. When a mapper needs genuine business logic (the canonical ADR-001 example is a speaker mapper that redacts PII for non-organizer roles), you just write that logic in the same class. Conditional mapping that is awkward in a declarative profile is ordinary C# here. @@ -71,7 +71,7 @@ The last piece is registration, and the framework keeps it convention-driven wit The distinction from AutoMapper is worth stating plainly: this scanning happens once, at composition time, to populate the DI container. It is not a per-request reflection engine deciding how to map fields. The mapping logic itself is compiled code. Discovery is a startup convenience; the map is static. -So the developer experience is: create a class, implement `MapToDTO` (and `CreateEntityAsync` for the create side), let Mapperly generate the assignments, and the module scan registers it. You never touch a profile registry, and you never wonder at runtime whether a map exists, because if it did not, the build would have failed. +So the developer experience is: create a class, implement `MapToDTO` (and `CreateEntityAsync` for the create side), let Mapperly generate the assignments, and the module scan registers it. You never touch a profile registry. Be clear about the edge of the guarantee, though: the compiler checks the body of a mapper you wrote, not the existence of one. The scan registers whatever mapper classes it finds, so adding the class for a new entity is still your job. ## A concrete pair @@ -127,7 +127,7 @@ This is not a free win, and pretending otherwise would be exactly the kind of ha - **It is more boilerplate than AutoMapper's zero-config start.** AutoMapper's pitch is real: for a brand-new project with simple shapes, `AddAutoMapper(...)` and a convention is genuinely less typing on day one. ADR-001 accepts this cost explicitly: there are dozens of mapper classes across the consuming apps. The bet is that day-one typing is the cheap part and year-two silent breakage is the expensive part. - **There is a Mapperly learning curve.** A source-generated mapper is not free of its own concepts. You have to understand its `[Mapper]` partial conventions, its diagnostics, and when to drop to hand-written code for a non-trivial map. It is less to learn than AutoMapper's full profile and projection surface, but it is not nothing. - **You have to write the mapper, every time.** Adding an entity means adding a mapper class. There is no convention that "just works" for a new type. That is the philosophy stated as a constraint: explicit over implicit, with no escape hatch back into runtime magic. -- **The upside does not show up in a demo.** Explicit, testable, compile-time-checked, allocation-free mapping does not make the first commit faster. It makes the rename safe, the stack trace readable, the conditional map ordinary, and the unit test trivial (a mapper is a plain class with no framework around it). Those payoffs land in month six, not minute one. +- **The upside does not show up in a demo.** Explicit, testable, compile-time-checked, reflection-free mapping does not make the first commit faster. It makes the rename safe, the stack trace readable, the conditional map ordinary, and the unit test trivial (a mapper is a plain class with no framework around it). Those payoffs land in month six, not minute one. The honest summary: you trade a small, constant, up-front cost for the removal of a class of silent runtime bugs. If your mapping is trivial and stable forever, AutoMapper is fine. If it will be renamed, conditionally shaped, and load-bearing for years, the explicit mapper pays for itself. @@ -155,6 +155,6 @@ role you did not foresee into a one-line grant instead of an attribute sweep. *Tags: .NET, C Sharp, Software Architecture, API Design, AutoMapper* -*Notes: re-verified this run against source at MMCA.Common v1.205.0 (`MMCA.Common/FACTS.md:14`). `IEntityDTOMapper` is declared at `MMCA.Common/Source/Core/MMCA.Common.Application/Interfaces/Mapping/IEntityDTOMapper.cs:14-17` with constraints `AuditableBaseEntity` / `IBaseDTO` / `notnull`; the file sits under `Interfaces/Mapping/` and the article's path reference is corrected to match. Its single required member is `MapToDTO(TEntity entity)` at `IEntityDTOMapper.cs:22`, and `MapToDTOs(IReadOnlyCollection)` is a default interface method returning the collection expression `[.. entityCollection.Select(MapToDTO)]` at `IEntityDTOMapper.cs:27-32` (null-guard at `:29`, projection at `:31`). That default is supplied but not relied on: every concrete mapper re-declares the identical one-line projection (`MMCA.Store/Source/Modules/Catalog/MMCA.Store.Catalog.Application/Products/DTOs/ProductDTOMapper.cs:44-48` is representative), which ADR-001 states in its trade-offs at `Website/docs-src/adr/001-manual-dto-mapping.md:22` ("in practice each concrete mapper re-declares the identical one-line projection rather than relying on the default"). `IEntityRequestMapper` is in the same file at `:42-45` (constrained `TCreateRequest : ICreateRequest`), and `CreateEntityAsync(TCreateRequest, CancellationToken)` returns `Task>` at `IEntityDTOMapper.cs:54` (its XML doc names async validation such as uniqueness checks at `:37`). The same file also declares a third contract, `IEntityUpdateApplier` at `:79-92`, whose `ApplyAsync(TEntity, TUpdateRequest, CancellationToken)` returns `Task` at `:91`; it is the write-side twin that applies a request onto an already-loaded aggregate, and because this article's scope is create-and-read mapping it is named once and not covered. Registration re-verified in `MMCA.Common/Source/Core/MMCA.Common.Application/DependencyInjection.cs`: the scan method is `ScanModuleApplicationServices() where TAssemblyMarker : class` at `:169-171`, delegating to the assembly-typed overload `ScanModuleApplicationServices(Assembly moduleAssembly)` at `:187`. DTO mappers are scanned `AssignableTo(typeof(IEntityDTOMapper<,,>))` with `.AsSelfWithInterfaces().WithScopedLifetime()` at `:206-210` (predicate `:208`, lifetime `:210`), an opt-in `IEntityDTOProjector<,,>` scan sits between the two mapper scans at `:215-219` (comment `:212-214`), request mappers are scanned at `:221-225`, and two further scans follow them: `IEntityUpdateApplier<,,>` at `:231-235` (comment `:227-230`) and `IEntityUpdateCommandApplier<,,,>` at `:240-244` (comment `:237-239`). That is why the article's registration section counts five mapping-related scans rather than three. For contrast, domain and integration event handlers register as singletons (`:197`, `:204`), command and query handlers scoped (`:248`, `:254`), and validators via `services.AddValidatorsFromAssembly(moduleAssembly)` (`:258`, the assembly-typed overload). Riok.Mapperly 4.3.1 re-verified at `MMCA.Common/Directory.Packages.props:35`; the ADC consumer pin is at `MMCA.ADC/Directory.Packages.props:37` (the Polly.Core 8.8.0 lockstep entry is the immediately preceding line `:36`, under its comment at `:35`), and the Store pin is `MMCA.Store/Directory.Packages.props:58`. Mapperly's "source-generated, compile-time object mapper (no runtime reflection)" description is at `Website/docs-src/onboarding/00-primer.md:375` (the unrelated Scrutor 7 bullet is at `:378`). ADR-001's Rationale is FIVE positive bullets for choosing explicit Mapperly mapping over runtime reflection (`Website/docs-src/adr/001-manual-dto-mapping.md:15-19`: compile-time safety, testability, conditional logic, debuggability, performance); it does NOT enumerate "four failure modes," so the article's four AutoMapper failure modes stay flagged as the article's own framing, with the section close citing ADR-001's real five-bullet rationale. ADR-001 chose per-entity Riok.Mapperly `[Mapper] partial class` mappers over AutoMapper/Mapster runtime reflection (`001-manual-dto-mapping.md:4,9,12`), names the `SpeakerDTOMapper` PII-redaction example (`:12,:17`), and records the count in its trade-offs as "35 DTO mappers across Store + ADC: 22 in ADC, 13 in Store" (`:22`), recounted 2026-09-19 per its status line (`:4`, which also carries the 2026-06-26 mechanism clarification and the 2026-08-23 and 2026-09-11 recounts); the article's batch-mapping paragraph quotes that 35, and its "dozens of mapper classes across the consuming apps" wording covers the 35 plus the parallel `IEntityRequestMapper` classes. The "concrete pair" code block is aligned to the real Store Catalog classes: `[Mapper] public sealed partial class ProductDTOMapper : IEntityDTOMapper` (`ProductDTOMapper.cs:15-19`) with `public partial ProductDTO MapToDTO(Product entity);` at `:41` and its re-declared `MapToDTOs` at `:44-48`, plus `public sealed class ProductCreateRequestMapper : IEntityRequestMapper` whose `CreateEntityAsync` is deliberately NOT `async`, returning `Task.FromResult(Product.Create(...))` (`MMCA.Store/Source/Modules/Catalog/MMCA.Store.Catalog.Application/Products/UseCases/Create/ProductCreateRequestMapper.cs:11-12,15,17,19-25`). Honest gap: that block is still a trimmed rendering, not a verbatim copy. The real `ProductDTOMapper` also takes `ProductVariantDTOMapper` and `ProductImageDTOMapper` constructor dependencies held in `[UseMapper]` fields (`ProductDTOMapper.cs:16-25`), two `[MapProperty]` attributes flattening `Product.RatingSummary.AverageRating` and `.ReviewCount` onto the DTO's scalar fields (`:35-40`), and a `[UserMapping]` shallow-category helper (`:50-60`), all elided in the article and all three now named in its elision list; `ProductIdentifierType` is the Store Catalog alias for `int` (`MMCA.Store/Source/Modules/Catalog/MMCA.Store.Catalog.Shared/MMCA.Store.Catalog.GlobalUsings.IdentifierType.cs:4`).* +*Notes: re-verified 2026-10-02 against source at MMCA.Common v1.221.0 (`MMCA.Common/FACTS.md:14`). Contracts: `IEntityDTOMapper` at `MMCA.Common/Source/Core/MMCA.Common.Application/Interfaces/Mapping/IEntityDTOMapper.cs:14-17` (constraints `AuditableBaseEntity` / `IBaseDTO` / `notnull`), `MapToDTO` at `:22`, default `MapToDTOs` at `:27-32` (null-guard `:29`, collection-expression projection `:31`); `IEntityRequestMapper` at `:42-45` (`TCreateRequest : ICreateRequest`), `CreateEntityAsync` returning `Task>` at `:54`, XML doc naming async uniqueness checks at `:37`; `IEntityUpdateApplier<,,>` at `:79-92`, `ApplyAsync` returning `Task` at `:91` (named once, out of scope). Registration: the scan lives in the partial file `MMCA.Common/Source/Core/MMCA.Common.Application/DependencyInjection.ModuleScanning.cs` (this run re-anchors it from `DependencyInjection.cs:169-258`, which no longer holds it): generic `ScanModuleApplicationServices() where TAssemblyMarker : class` at `:28-30`, assembly overload at `:46`; domain and integration event handlers singleton at `:52-56` and `:59-63`; DTO mappers `AssignableTo(typeof(IEntityDTOMapper<,,>))` `.AsSelfWithInterfaces().WithScopedLifetime()` at `:65-69` (predicate `:67`, lifetime `:69`); opt-in `IEntityDTOProjector<,,>` at `:74-78` (comment `:71-73`); request mappers at `:80-84`; `IEntityUpdateApplier<,,>` at `:90-94` (comment `:86-89`); `IEntityUpdateCommandApplier<,,,>` at `:99-103` (comment `:96-98`); command and query handlers scoped at `:105-109` and `:111-115`; `AddValidatorsFromAssembly(moduleAssembly)` at `:117`. That is the five mapping-related scans the registration section counts. Riok.Mapperly 4.3.1 at `MMCA.Common/Directory.Packages.props:31`, `MMCA.ADC/Directory.Packages.props:38` (Polly.Core 8.8.0 at `:37` under its lockstep comment at `:36`), `MMCA.Store/Directory.Packages.props:61`. Mapperly's primer description at `Website/docs-src/onboarding/00-primer.md:390` (Scrutor 7 bullet `:393`). ADR-001 (`Website/docs-src/adr/001-manual-dto-mapping.md`): status and recounts `:4`, decision `:12`, five rationale bullets `:15-19` (rename-breaks-the-build `:15`, SpeakerDTOMapper PII redaction `:17`, performance "No reflection or expression compilation at mapping time" `:19`), trade-offs "35 DTO mappers across Store + ADC: 22 in ADC, 13 in Store" plus the re-declared projection `:22`. Helpdesk's two DTO mappers re-declare the projection too: `MMCA.Helpdesk/Source/Modules/Tickets/MMCA.Helpdesk.Tickets.Application/Tickets/DTOs/TicketDTOMapper.cs:31` and `TicketCommentDTOMapper.cs:17`; the 35 stays the ADR's Store + ADC count and the body now names the repos instead of "the two consuming apps". UNVERIFIABLE resolutions this run: (1) "bans reflection-based AutoMapper outright" narrowed to "rejects" plus the real guard: `AutoMapper` is one entry in `ForbiddenDomainDependencies` at `MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Rules/Layering/ArchitectureRules.Purity.cs:9-21` (`:14`), applied only by `DomainIsFrameworkFree` (`:23`) and `SharedIsFrameworkFree` (`:38`); Mapster is not listed and no Application or API rule exists. (2) The sentence crediting ADR-001 with a "verdict ... that trade is backwards" removed (the ADR has no such text) and replaced by the ADR's own rename bullet at `:15`. (3) "an unmapped property or a type mismatch is a build error" narrowed: RMG020 (source member unmapped) is in `NoWarn` for Application projects at `MMCA.Store/Directory.Build.props:66-67` (comment `:60-65`), `MMCA.ADC/Directory.Build.props:63` (comment `:56`) and globally at `MMCA.Common/Directory.Build.props:30`; the rename case (target member with no source) still fails the build under `TreatWarningsAsErrors` at `MMCA.Store/Directory.Build.props:10`, `MMCA.ADC/Directory.Build.props:10`, `MMCA.Common/Directory.Build.props:7`. Mapperly's own diagnostic id for the target-side case and its default severity are not in any repo file and are not cited; "type mismatch" dropped as not determinable from source. (4) "if it did not, the build would have failed" replaced by the narrower statement that the compiler checks a mapper's body, not its existence, grounded in the scan registering whatever classes it finds (`DependencyInjection.ModuleScanning.cs:65-84`); no `ValidateOnBuild` exists in `MMCA.Common/Source` (Grep, 2026-10-02), and the article makes no claim about where a missing mapper surfaces. (5) "allocation-free" removed in both places (Mapperly bullet and trade-offs) since ADR-001 `:19` claims only no reflection or expression compilation and the batch method allocates a collection at `IEntityDTOMapper.cs:31`; "per-call allocation of a mapping plan" reworded to "construction". (6) "the two consuming apps" resolved as above. Concrete pair re-anchored: `MMCA.Store/Source/Modules/Catalog/MMCA.Store.Catalog.Application/Products/DTOs/ProductDTOMapper.cs` `[Mapper]` `:15`, class `:16`, `[UseMapper]` sub-mapper fields `:21` and `:24`, two `[MapProperty]` `:35` and `:38`, `public partial ProductDTO MapToDTO(Product entity);` `:41`, re-declared `MapToDTOs` `:44`, `[UserMapping]` helper `:50`; `.../Products/UseCases/Create/ProductCreateRequestMapper.cs` class `:11`, non-async `CreateEntityAsync` `:15`, `Task.FromResult(Product.Create(` `:19`. Not re-read this run (carried as CONFIRMED by the 2026-10-02 audit): `Product.Create` returning `Result` (`MMCA.Store/Source/Modules/Catalog/MMCA.Store.Catalog.Domain/Products/Product.cs:97`), the `ProductIdentifierType` int alias (`MMCA.Store/Source/Modules/Catalog/MMCA.Store.Catalog.Shared/MMCA.Store.Catalog.GlobalUsings.IdentifierType.cs:4`), the SpeakerDTOMapper redaction (`MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Application/Speakers/DTOs/SpeakerDTOMapper.cs:49`) and the 409 conflict mapping (`MMCA.Common/Source/Presentation/MMCA.Common.API/Middleware/ErrorHttpMapping.cs:25`). The four AutoMapper failure modes remain the article's own framing; ADR-001 does not enumerate them.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/modular-monolith-to-microservices.md b/docs-src/articles/modular-monolith-to-microservices.md index 0b9ccc65..1b184cbb 100644 --- a/docs-src/articles/modular-monolith-to-microservices.md +++ b/docs-src/articles/modular-monolith-to-microservices.md @@ -4,7 +4,9 @@ > Rubric §7 · ADRs 006/007/008 · Status: grounded in `MMCA.Common/CLAUDE.md` (its microservice > extraction-boundaries section), `Website/docs-src/adr/006-database-per-service.md`, `Website/docs-src/adr/007-grpc-extraction.md`, > `Website/docs-src/adr/008-service-extraction-topology.md`, and `Website/docs-src/onboarding/group-14-module-system-composition.md` -> + `group-13-grpc-contracts.md`. No em dashes. +> + `group-13-grpc-contracts.md`, with source re-read 2026-10-02 at v1.221.0 (`MessageBusSettings.cs`, +> `ArchitectureRules.Transport.cs`, `ResultGrpcExtensions.cs`, ADC `IBookmarkCountService.cs`, +> `GetSessionBookmarkCountHandler.cs`, Engagement.Contracts `DependencyInjection.cs`). No em dashes. **Subtitle:** "Monolith or microservices" is the wrong question. Build the extraction point now, keep it tested, and cut the service later, on a boundary you have already proven. @@ -53,7 +55,7 @@ onto physical connection strings, and `EntityDataSourceRegistry` maps every enti startup. The clever part is collapse: a host with no `DataSources` configuration collapses every logical name onto a single `Default` source, so it behaves **exactly** like a single-database monolith (one context, one change tracker, foreign keys intact). Point one config entry at a separate -database and that module's data is now physically isolated, with no code change. This is the deep-dive +database and that module's data is physically isolated, with no code change. This is the deep-dive of its own article; the point here is that the data boundary exists from day one and costs nothing until you use it. @@ -87,10 +89,13 @@ root just does `services.Replace(...)` to swap one for the other. The calling co it got. The error model survives the hop too. On the server, `GrpcResultExceptionInterceptor` turns a failed -`Result` (raised as a `ResultFailureException`) into an `RpcException` carrying the errors, and the typed -client adapter reconstructs `Result.Failure(errors)` from the trailers, so callers keep -programming against `Result` whether the answer came from an object or a network round-trip. This -is "Result over the wire," and it is why the wire hop does not poison your error handling. +`Result` (raised as a `ResultFailureException`) into an `RpcException` carrying the errors as +structured trailers. On the client, an adapter whose interface returns a `Result` catches that +`RpcException` and calls `ToResult()` (or `ToResult()`), which rebuilds `Result.Failure(errors)` +from the trailers and degrades a bare transport fault (a reset connection, a missed deadline) to a +single failure carrying the RPC detail. Callers keep programming against `Result` whether the +answer came from an object or a network round-trip. This is "Result over the wire," and it is why +the wire hop does not poison your error handling. ### 4. Federated auth, a gateway, and Aspire hosting (ADR-008) @@ -113,11 +118,12 @@ The whole thesis fits in one DI swap. The same handler depends on the same inter registration line differs between the two topologies. ```csharp -// Application/Domain code depends ONLY on the interface. It never sees the transport. -public sealed class GetSessionBookmarkCountHandler(IBookmarkCountService counts) +// Application code depends ONLY on the interface. It never sees the transport. +public sealed class GetSessionBookmarkCountHandler( + IBookmarkCountService bookmarkCountService) : IQueryHandler> { - // ... calls counts.GetBookmarkCountForSessionAsync(sessionId), which returns a plain int (Task); - // the handler wraps that count as Result.Success(count) and returns Result. + // ... var count = await bookmarkCountService.GetBookmarkCountForSessionAsync(query.SessionId, cancellationToken); + // return Result.Success(count); // the interface returns a plain Task; the handler returns Result } // MONOLITH host: the real in-process implementation is registered (peer module enabled). @@ -191,48 +197,72 @@ install it and try the split for yourself.* *Tags: .NET, C Sharp, Software Architecture, Microservices, Modular Monolith* -*Notes: verified type/behavior names: `IMessageBus`, `InProcessMessageBus`, `BrokerMessageBus`, -`MessageBusSettings`, `MicroserviceExtractionTests`, `DataSourceKey`, `DataSourceResolver`, -`EntityDataSourceRegistry`, `MMCA.Common.Grpc`, `GrpcResultExceptionInterceptor`, -`BookmarkCountServiceGrpcAdapter`, `IBookmarkCountService`, the `.Contracts` convention, -`IJwksProvider`/`RsaJwksProvider`, `JwksEndpointExtensions`, `ModuleLoader`, `Disabled*` stubs, -`MMCA.Common.Aspire.Hosting`, YARP gateway. `BrokerMessageBus` publishes through MassTransit's -`IPublishEndpoint` and is transport-neutral; `MessageBusProvider` has three values, `InProcess` (0), +*Notes: 2026-10-02 re-verify at framework v1.221.0 (`MMCA.Common/FACTS.md:14`); every anchor below was +re-read in this run. Messaging: `IMessageBus` +(`MMCA.Common/Source/Core/MMCA.Common.Application/Messaging/IMessageBus.cs:28`), `InProcessMessageBus` +(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Messaging/InProcessMessageBus.cs:19`) and +`BrokerMessageBus` (`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Messaging/BrokerMessageBus.cs:43`, +publishing through MassTransit, transport-neutral); `MessageBusProvider` has three values, `InProcess` (0), `RabbitMq` (1, dev/test) and `AzureServiceBus` (2, production) -(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Messaging/MessageBusSettings.cs:236`, the three -members at :241/:246/:251), so the earlier "over RabbitMQ" wording was corrected. -`MMCA.Common.Aspire.Hosting` ships four source files (`Extensions.cs`, `H2cHealthCheckExtensions.cs`, -`H2cEndpointHealthCheck.cs`, `ServiceBusEmulatorResource.cs`); `Extensions.cs` exposes -`AddMessageBroker` (:160), `WithBroker` (:252, plus a second overload at :280), `WithJwksDiscovery` -(:309), `WithE2eRsaKeys` (:353) and -`WithSQLServerDataSource`/`WithPostgreSQLDataSource`/`WithCosmosDataSource`/`WithSqliteDataSource` -(:483/:513/:542/:567); it has **no** gRPC project-reference API (the only `grpc` mention in the file -is a prose comment at :322 about h2c prior knowledge), so that claim was corrected too. ADC's -AppHost wires gRPC peers with stock Aspire `WithReference` -(`MMCA.ADC/Source/Hosting/MMCA.ADC.AppHost/Program.cs:269-301`). The transport-leak fitness rule is -broader than stated in the body: the forbidden set is MassTransit, Grpc **and** Google.Protobuf +(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Messaging/MessageBusSettings.cs:236`, members at +:241/:246/:251). Transport-leak fitness rule: the forbidden set is MassTransit, Grpc **and** Google.Protobuf (`MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Rules/Layering/ArchitectureRules.Transport.cs:11-16`), -asserted by `Bases/Layering/MicroserviceExtractionTestsBase.cs:13` and subclassed in Common, ADC, -Store, Helpdesk and the MMCA.ECommerce sample. The code sample's cross-module call is the real -interface method +asserted by `MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Layering/MicroserviceExtractionTestsBase.cs:13` +and subclassed in Common, ADC, Store, Helpdesk and the MMCA.ECommerce sample. Data sources: `DataSourceKey` +(`MMCA.Common/Source/Core/MMCA.Common.Application/Interfaces/Infrastructure/Persistence/DataSourceKey.cs:15`, +`DefaultName = "Default"` at :18), `DataSourceResolver` +(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/DataSources/DataSourceResolver.cs:16`, the +collapse onto Default described at :191 and :294) and `EntityDataSourceRegistry` +(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/DataSources/EntityDataSourceRegistry.cs:21`). +Modules: `ModuleLoader` (`MMCA.Common/Source/Core/MMCA.Common.Application/Modules/ModuleLoader.cs:16`) and the +`Disabled*` stubs, e.g. `DisabledBookmarkCountService` +(`MMCA.ADC/Source/Modules/Engagement/MMCA.ADC.Engagement.Shared/UserSessionBookmarks/DisabledBookmarkCountService.cs:7`). +Auth: `IJwksProvider` (`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Auth/IJwksProvider.cs:11`, serving +`/.well-known/jwks.json` per its doc comment at :6), `RsaJwksProvider` +(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Auth/RsaJwksProvider.cs:14`) and `JwksEndpointExtensions` +(`MMCA.Common/Source/Presentation/MMCA.Common.API/Startup/Endpoints/JwksEndpointExtensions.cs:15`). gRPC and +Result over the wire: `GrpcResultExceptionInterceptor` +(`MMCA.Common/Source/Presentation/MMCA.Common.Grpc/Interceptors/GrpcResultExceptionInterceptor.cs:19`, +catching `ResultFailureException` at :34 and mapping its errors through `ToRpcException()` in +`ToTransportException` at :126), `ResultFailureException` +(`MMCA.Common/Source/Presentation/MMCA.Common.Grpc/Exceptions/ResultFailureException.cs:16`), and +`ResultGrpcExtensions` (`MMCA.Common/Source/Presentation/MMCA.Common.Grpc/ResultGrpcExtensions.cs:31`: +`ToRpcException()` at :119, client-side `ToResult()` at :218 and `ToResult()` at :242, structured +trailers first, a bare transport fault degrading to one `Grpc.{StatusCode}` failure). Result-returning ADC +adapters call it, e.g. `ex.ToResult()` +(`MMCA.ADC/Source/Services/MMCA.ADC.Conference.Contracts/EventLiveValidationServiceGrpcAdapter.cs:61`) and +`ex.ToResult()` (`MMCA.ADC/Source/Services/MMCA.ADC.Conference.Contracts/SessionBookmarkValidationServiceGrpcAdapter.cs:58`); +`BookmarkCountServiceGrpcAdapter` +(`MMCA.ADC/Source/Services/MMCA.ADC.Engagement.Contracts/BookmarkCountServiceGrpcAdapter.cs:14`) returns a +plain count and has no `Result` to rebuild. The `.Contracts` convention: +`MMCA.Common/Directory.Build.props:153` (the `EndsWith('.Contracts')` item group) with +`` at :160. Worked example: +`IBookmarkCountService` carries `[ServiceContract]` and declares `Task GetBookmarkCountForSessionAsync(SessionIdentifierType sessionId, CancellationToken)` -(`MMCA.ADC/Source/Modules/Engagement/MMCA.ADC.Engagement.Shared/UserSessionBookmarks/IBookmarkCountService.cs:19`); -the earlier `GetCountAsync(...) returns Result` name did not exist. The interface returns a plain -`Task`; the enclosing `GetSessionBookmarkCountHandler` (a real type, -`MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Application/Speakers/UseCases/GetSessionBookmarkCount/GetSessionBookmarkCountHandler.cs:14`, -implementing `IQueryHandler>` at :16) is what returns -`Result`, wrapping the count via `Result.Success(count)` at line 45 after the call at line 43. -The code sample's `services.Replace(...)` line is **verbatim** source, not a paraphrase +(`MMCA.ADC/Source/Modules/Engagement/MMCA.ADC.Engagement.Shared/UserSessionBookmarks/IBookmarkCountService.cs:10` +and :19); `GetSessionBookmarkCountHandler` +(`MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Application/Speakers/UseCases/GetSessionBookmarkCount/GetSessionBookmarkCountHandler.cs:14`, +implementing `IQueryHandler>` at :16) makes the call at :43 and +returns `Result.Success(count)` at :45; the code sample's `services.Replace(...)` line is verbatim source (`MMCA.ADC/Source/Services/MMCA.ADC.Engagement.Contracts/DependencyInjection.cs:49`, inside -`AddEngagementBookmarkCountClient` at :43), and the repo URL is confirmed (`ivanball/MMCA.Common` is -public under Apache-2.0, `MMCA.Common/Directory.Build.props:46-47`). 2026-09-19 re-verify (framework -v1.205.0, `MMCA.Common/FACTS.md:14`): three cited files moved and their paths are corrected above, -`MessageBusSettings.cs` (from `Settings/` to `Messaging/`), `ArchitectureRules.Transport.cs` (into -`Rules/Layering/`) and `MicroserviceExtractionTestsBase.cs` (into `Bases/Layering/`), contents -unchanged in all three; `Extensions.cs`, the ADC `Program.cs`, `IBookmarkCountService.cs` and -`Directory.Build.props` each grew, and every line anchor above was re-read at this run. One prior -honest gap is retired: `ServiceContractAttribute` is adopted, and `IBookmarkCountService` (this -article's worked example) carries `[ServiceContract]` -(`MMCA.ADC/Source/Modules/Engagement/MMCA.ADC.Engagement.Shared/UserSessionBookmarks/IBookmarkCountService.cs:10`).* +`AddEngagementBookmarkCountClient` at :43). Aspire hosting: `MMCA.Common.Aspire.Hosting` ships four source +files (`Extensions.cs`, `H2cHealthCheckExtensions.cs`, `H2cEndpointHealthCheck.cs`, +`ServiceBusEmulatorResource.cs`); `MMCA.Common/Source/Hosting/MMCA.Common.Aspire.Hosting/Extensions.cs` +exposes `AddMessageBroker` (:160), `WithBroker` (:252, second overload :280), `WithJwksDiscovery` (:309), +`WithE2eRsaKeys` (:353) and +`WithSQLServerDataSource`/`WithPostgreSQLDataSource`/`WithCosmosDataSource`/`WithSqliteDataSource` +(:483/:513/:542/:567), and **no** gRPC project-reference API (the only gRPC mention is a prose comment at +:322). ADC's AppHost wires gRPC peers with stock Aspire `WithReference` +(`MMCA.ADC/Source/Hosting/MMCA.ADC.AppHost/Program.cs:269-301`; the Conference to Engagement reference at +:274 carries no `WaitFor`). Repo and license: `ivanball/MMCA.Common`, Apache-2.0 +(`MMCA.Common/Directory.Build.props:49-50`). Changes this run: the license/URL anchor was re-anchored to +49-50; the error-model paragraph was corrected (the trailer-to-`Result` rebuild is `ToResult()` in +`ResultGrpcExtensions`, called by Result-returning adapters, not something the bookmark adapter does); the +code sample's handler shape now matches source (primary constructor plus `IQueryHandler`); a "now" was +dropped from section 1. Earlier runs: the 2026-09-19 run corrected three moved paths +(`MessageBusSettings.cs` to `Messaging/`, `ArchitectureRules.Transport.cs` to `Rules/Layering/`, +`MicroserviceExtractionTestsBase.cs` to `Bases/Layering/`) and retired the `ServiceContractAttribute` gap; +before that, "over RabbitMQ" became provider-neutral, an invented Aspire gRPC API was removed, and a +nonexistent `GetCountAsync(...) returns Result` was replaced with the real interface method.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/notifications-vertical-slice.md b/docs-src/articles/notifications-vertical-slice.md index 56994da1..35e7c4ce 100644 --- a/docs-src/articles/notifications-vertical-slice.md +++ b/docs-src/articles/notifications-vertical-slice.md @@ -60,9 +60,11 @@ by POSTing to `NotificationsController`. The handler runs in a deliberate order: 1. **Deduplicate, if the caller opted in.** The command carries an optional `DedupKey`. A blank or whitespace-only value is normalized to null, so an empty header cannot claim the single "empty" - key. When a key is present the handler looks the notification up first, and a hit returns the - existing DTO without sending anything at all. No key means no lookup, which is the default path: - every send creates a new notification. + key. A present key is scoped to the sender before it is used: the handler stores and looks up the + hex SHA-256 of `{sentByUserId}:{clientKey}`, so another caller reusing the same client key can + neither suppress this send nor be handed this sender's notification. The handler looks that scoped + key up first, and a hit returns the existing DTO without sending anything at all. No key means no + lookup, which is the default path: every send creates a new notification. 2. **Resolve recipients.** The handler does not know who the audience is. It asks the injected `INotificationRecipientProvider` for the user IDs. This is the key swap point: the framework ships a no-op `NullNotificationRecipientProvider` that returns an empty list, and the consuming app overrides it. @@ -72,7 +74,8 @@ by POSTing to `NotificationsController`. The handler runs in a deliberate order: 3. **Persist the audit aggregate, in its own save.** `PushNotification.Create(title, body, sentByUserId, recipientCount, dedupKey, scopeKey)` validates title and body via `PushNotificationInvariants`, checks that the dedup key and the optional scope - key each stay within 128 characters, and returns a `Result`. It is saved with + key each stay within 128 characters (the 64-character hash the handler passes always fits, so in + practice only the scope key can trip it), and returns a `Result`. It is saved with `Status = Pending` and a snapshot `RecipientCount`. That save stands alone precisely so a lost race on the dedup key can be caught and answered (next section). 4. **Fan out the inbox rows, in a second save.** For every recipient the handler creates a @@ -103,7 +106,9 @@ a send nobody received is still recorded. ```csharp // SendPushNotificationHandler, in order: dedup first, then audit + inbox are written // BEFORE any delivery is attempted. The whole method runs in one transaction (ITransactional). -var dedupKey = string.IsNullOrWhiteSpace(command.DedupKey) ? null : command.DedupKey; +var dedupKey = string.IsNullOrWhiteSpace(command.DedupKey) + ? null + : SenderScopedDedupKey(sentByUserId, command.DedupKey); // hex SHA-256 of "{sender}:{key}" if (dedupKey is not null) { var alreadySent = await FindByDedupKeyAsync(dedupKey, ct); @@ -144,11 +149,13 @@ of truth. The send carries a second optional key alongside `DedupKey`: an opaque `ScopeKey` (for example `"event:2"`), stamped by the sending application and stored on the audit aggregate. The framework attaches no meaning to it. An app whose notifications belong to one edition of something sets it, and -every caller that omits it sends exactly as it always did. ADC resolves the current published event -and scopes to `event:{id}`, degrading to null (unscoped) if no event resolves, which is the safe -direction because scope is a view filter, not a security boundary. That is also why the column is -deliberately unindexed: the filter runs after the primary-key join from the inbox, over a table that -holds one row per send, so an index would cost writes without buying a read. +every caller that omits it sends an unscoped notification. ADC resolves the current published event +and scopes to `event:{id}`. When no event resolves it fails narrow rather than wide: it answers with +the last key it resolved or, on an instance that has never resolved one, with `event:0`, a +well-formed key no row carries, so the reader sees an empty inbox instead of every event's +notifications. Scope is a view filter, not a security boundary, and the column is deliberately +unindexed: the filter runs after the primary-key join from the inbox, over a table that holds one row +per send, so an index would cost writes without buying a read. ## Retry safety on two levels: the idempotency filter and the dedup key @@ -160,18 +167,22 @@ At the edge, the send endpoint carries `[Idempotent]`. The framework's idempoten first response against the caller's `Idempotency-Key` and replays it for a repeat, which is the cheap answer to a retried HTTP call. Then the controller reads that same `Idempotency-Key` header itself and passes it into the command as `DedupKey` (absent or whitespace-only stays null, which leaves the -send on the default undeduplicated path). The division of labor is the point: **the filter protects +send on the default undeduplicated path), and the handler scopes that key to the sender as described +above. The division of labor is the point: **the filter protects the response, the dedup key protects the delivery.** When the filter's cache is cold, evicted, or degraded (a restarted host, an expired entry, an unreachable distributed cache) the response replay is gone, but the domain still refuses to send a second time. -Underneath, `DedupKey` is a real column on the `PushNotification` aggregate (max 128 characters, -validated in the factory), with a filtered unique index over it. That matters because the handler's +Underneath, `DedupKey` is a real column on the `PushNotification` aggregate holding the +sender-scoped hash (the column allows 128 characters, validated in the factory, and the hash is +always 64), with a filtered unique index over it. That matters because the handler's up-front lookup is a check-then-act: two concurrent retries of the same send can both pass it, and the loser only discovers the conflict when it tries to insert. So the audit save is its own `SaveChangesAsync`, wrapped in a catch that requeries by key: if the row exists now, the concurrent send is the cause and the caller gets that notification back; anything else is rethrown untouched and -reaches the exception middleware. The database, not the application, arbitrates the race. +reaches the exception middleware. The requery runs on `CancellationToken.None`, so a save aborted by +the caller's own token can still be classified. The database, not the application, arbitrates the +race. That catch is deliberately broad (a suppressed CA1031), and the reason is a layer rule rather than laziness: Application has no EF Core dependency, so `DbUpdateException` is not a type this file is @@ -200,7 +211,9 @@ does `TryAddTransient()` (t `MMCA.Common.Infrastructure.Services`, so it is an Infrastructure registration, not an Application one). Infrastructure's `AddPushNotifications(configuration)` then replaces `IPushNotificationSender` with the SignalR implementation, wires `AddSignalR()`, and, if a `redis` connection string is present, adds a -Redis backplane for SignalR scale-out across replicas. A host that never calls `AddPushNotifications` +Redis backplane for SignalR scale-out across replicas, with a per-application channel prefix so two +applications sharing one Redis never receive each other's pushes. A host that never calls +`AddPushNotifications` keeps that no-op `NullPushNotificationSender`, so the send pipeline still resolves and runs (audit and inbox rows are written) with no real-time transport at all. @@ -261,7 +274,7 @@ Three of those four slices accept the optional scope key, read from a `scope` qu on the controller: the list, the unread count (so the badge and the list agree), and the bulk mark-read (so a scoped client never marks rows it cannot see). A supplied scope narrows the read to the notifications carrying that scope plus every unscoped one; omitting it returns everything, -exactly as before, which is what keeps the pre-scope callers working. +which keeps callers that never pass a scope working. Both the per-row read and the mark-read scope by the caller's `UserId` from `ICurrentUserService`, so one user cannot read or mutate another's inbox. Security is part of the slice, not a cross-cutting @@ -307,12 +320,14 @@ at the call site and gives you a single place to change the underlying type late key that nothing delivered, and every retry of that key would answer success forever. The price is that the SignalR and native calls happen with the transaction still open. Both are bounded by their own timeouts and hold locks only on rows this request just inserted, but it is still a transaction - held across an out-of-process call. + held across an out-of-process call. And because those calls run inside the unit, a transient fault + on the final status save re-runs them under the execution strategy: real-time and native delivery + are at-least-once, while the inbox rows are written exactly once. - **Inbox fan-out cost.** Step 4 writes one `UserNotification` row per recipient. For a broadcast to a large audience that is a lot of rows in one save. It is the price of a durable per-user inbox with per-user read state, and it is bounded by the recipient count, but it is real write amplification. - **Deduplication is opt-in, and it is check-then-act plus a database index.** A send that carries no - key behaves exactly as it always did: no protection at all. When a key is present, the up-front + key gets no protection at all. When a key is present, the up-front lookup is a race the handler cannot win on its own, so correctness rests on the filtered unique index and on a broad catch that has to requery to classify what it caught. That is a real cost in handler complexity, paid to keep Application free of an EF Core dependency. @@ -359,7 +374,7 @@ documentation. vertical slice beats a horizontal layer cut for cohesion, the end-to-end send flow (deduplicate, resolve recipients, persist audit, fan out inbox, then best-effort deliver over SignalR and OS-level native push, the whole sequence one `ITransactional` transaction), the two levels of retry safety (the `[Idempotent]` filter replaying the response, the -`DedupKey` plus its filtered unique index protecting the delivery), the optional `ScopeKey` that +sender-scoped `DedupKey` plus its filtered unique index protecting the delivery), the optional `ScopeKey` that narrows a read without isolating anything, why each sender is a composition-root choice with a null-object fallback, the ADR-044 native push channel and its `DevicesController` registration surface, the CQRS inbox scoped to the caller, the email channel and the @@ -377,152 +392,93 @@ example, or `dotnet add package MMCA.Common.API` and try it.* *Tags: .NET, C Sharp, Software Architecture, SignalR, Vertical Slice* -*Notes: verified type/behavior names: `PushNotification`, `UserNotification`, `PushNotificationCreated`, -`PushNotificationStatus`, `SendPushNotificationHandler`, `NotificationsController`, `InboxController`, -`DevicesController`, `IPushNotificationSender`, `SignalRPushNotificationSender`, `NullPushNotificationSender`, -`INativePushSender`, `IPushDeviceRegistrar`, `NullNativePushSender`, `NullPushDeviceRegistrar`, -`AzureNotificationHubNativePushSender`, `AzureNotificationHubDeviceRegistrar`, `AddNativePushNotifications`, -`SendPushNotificationCommand`, `ITransactional`, `TransactionalCommandDecorator`, -`NotificationHub` (`[Authorize]`d, `ReceiveNotification` constant, `ClaimBasedUserIdProvider`; it also -hosts live-channel methods, see hub evidence below), -`INotificationRecipientProvider`, `NullNotificationRecipientProvider`, -`AttendeeNotificationRecipientProvider`, `IEmailSender`, `SmtpEmailSender`, `AddPushNotifications`, -batch size 100, 500-row inbox page cap, `DedupKey` and `ScopeKey` (128 characters each), -`NotificationFeatures.PushNotifications` feature gate, -`UserNotificationIdentifierType`/`PushNotificationIdentifierType` aliases in -`GlobalUsings.NotificationIdentifierType.cs`. -Transaction evidence (NEW this run, 2026-09-19; the send became `ITransactional` after the prior pass, -so step 7, the code block, the "durability lives in the database" paragraph, the first trade-off bullet -and the portable-lesson list are restated and a trade-off bullet is added): the command declares the -marker in its own declaration, -`Source/Core/MMCA.Common.Application/Notifications/PushNotifications/UseCases/Send/SendPushNotificationCommand.cs:21`-`:23` -(`: ICommandWithRequest, ITransactional` at `:23`), with the dedup-key -rationale in its XML doc (`:11`-`:19`, "Transactional on purpose", including the stated cost that the -sender calls run inside the transaction and hold locks only on the rows just inserted, `:17`-`:18`). -`Source/Core/MMCA.Common.Application/UseCases/Decorators/TransactionalCommandDecorator.cs` passes any -command without the marker straight through (`:28`-`:29`) and otherwise runs the inner handler inside -`unitOfWork.ExecuteInTransactionAsync` (`:31`-`:33`). The handler's own XML doc states the same -atomicity guarantee, including that a failed delivery is still recorded because `MarkAsFailed` ends in a -success result (`SendPushNotificationHandler.cs:13`-`:26`, "Atomicity" paragraph `:17`-`:25`). -Deduplication evidence (re-read 2026-09-19 this run; the dedup behavior is unchanged, but the new -"Atomicity" XML doc block pushed every line in the file down by ten): in -`Source/Core/MMCA.Common.Application/Notifications/PushNotifications/UseCases/Send/SendPushNotificationHandler.cs` -the handler opens by normalizing whitespace to null (`:42`) and, when a key is present, returns the -already-persisted notification without sending (`:43`-`:50`, `FindByDedupKeyAsync` hit logged by -`LogDedupHit` `:48`); the private `FindByDedupKeyAsync` helper (`:174`-`:183`) uses -`unitOfWork.GetReadRepository<...>` (`:176`). Recipient resolution follows at `:54`-`:55`, the -empty-recipient `Validation` failure at `:57`-`:63`. The audit aggregate is saved BY ITSELF at `:84` -inside a `#pragma warning disable CA1031` try/catch (`:82`-`:113`, pragma `:86`) that requeries by key -and returns the winner on the filtered-unique-index race (`:104`-`:109`, `LogDedupRaceRequery` `:107`) -and otherwise rethrows (`:112`); the inbox fan-out is a SECOND `SaveChangesAsync` at `:123` (rows -created `:116`-`:121`). -Two writes before any delivery, both inside the one transaction above. The aggregate carries `DedupKey` at -`Source/Core/MMCA.Common.Domain/Notifications/PushNotifications/PushNotification.cs:45` with -`DedupKeyMaxLength = 128` (`:19`), normalized in the private constructor (`:75`) and length-validated in -the factory (`:107`-`:113`). The filtered unique index is configured at -`Source/Core/MMCA.Common.Infrastructure/Persistence/Configuration/EntityTypeConfiguration/Notifications/PushNotificationConfiguration.cs:67`-`:69` -(`IsUnique()` + `HasSoftDeleteFilter(additionalFilter: "[DedupKey] IS NOT NULL")`, SQL Server engine -base class only), with the max length at `:46`-`:47`. The two-level retry story starts at the -controller: `[HttpPost]` `:43` carries `[Idempotent]` `:44` in -`Source/Presentation/MMCA.Common.API/Controllers/Notifications/NotificationsController.cs`, which reads -the `Idempotency-Key` header (`:62`-`:66`, whitespace to null `:65`) and passes it as -`new SendPushNotificationCommand(request, userId.Value) { DedupKey = dedupKey }` (`:69`); the -"filter replays the response, DedupKey protects delivery" division of labor is stated in the method's -own XML doc (`:37`-`:41`). -Scope-key evidence (carried forward from the 2026-08-14 pass, confirmed unchanged this run apart from -the handler line noted below, which moved with the rest of that file): the aggregate carries `ScopeKey` at -`Source/Core/MMCA.Common.Domain/Notifications/PushNotifications/PushNotification.cs:53` with -`ScopeKeyMaxLength = 128` (`:22`), normalized in the private constructor (`:76`) and length-validated -in the factory (`:114`-`:120`); the "opaque view filter, not a security boundary" wording is the -property's own XML doc (`:47`-`:52`). The caller supplies it as an init-only property on -`Source/Core/MMCA.Common.Shared/Notifications/PushNotifications/SendPushNotificationRequest.cs:13` -(positional parameters left untouched so every existing caller compiles), bounded again at the -edge by `SendPushNotificationRequestValidator.cs:27`-`:29`, and -`SendPushNotificationHandler.cs:72` passes it into `Create`. The EF configuration maps it at -`PushNotificationConfiguration.cs:52`-`:53` and is deliberately unindexed, with the reason in the -comment above it (`:49`-`:51`). Three read/write slices take the optional scope, each filtering -`pn.ScopeKey == null || pn.ScopeKey == scopeKey`: -`Notifications/UserNotifications/UseCases/GetInbox/GetMyNotificationsHandler.cs:40`-`:43` (the -500-row page cap is `MaxPageSize` `:21`), `GetUnreadCount/GetUnreadNotificationCountHandler.cs:31`-`:38`, -and `MarkAllRead/MarkAllNotificationsReadHandler.cs:30`-`:43`; the single-row -`MarkNotificationReadCommand` takes no scope. `InboxController` exposes each as an optional -`[FromQuery, StringLength(PushNotification.ScopeKeyMaxLength)] string? scope` (`:47`, `:71`, `:114`). -ADC's `Source/Modules/Engagement/MMCA.ADC.Engagement.UI/Services/CurrentEventNotificationScopeProvider.cs` -resolves the current published event into `event:{id}` (`:54`) and degrades to null (unscoped) on any -failure (`:57`-`:61`). `Website/docs-src/adr/024-push-notifications.md` records the scope key in its -2026-08-14 revision (`:5`-`:6`, send-side detail at `:26`-`:27`), so the article's ADR-024 + ADR-044 -mapping still holds. -Native push evidence (ADR-044, re-read 2026-09-19 this run; behavior unchanged, every line number moved -down by ten with the new "Atomicity" XML doc block): -`SendPushNotificationHandler` injects -`INativePushSender nativePushSender` in its primary constructor at -`Source/Core/MMCA.Common.Application/Notifications/PushNotifications/UseCases/Send/SendPushNotificationHandler.cs:31`, -and calls `nativePushSender.SendToUsersAsync(recipientIds, title, body, ct)` at `:151`-`:155` inside its own -non-fatal try/catch (`:149`-`:162`, `#pragma warning disable CA1031` `:157`) placed BETWEEN the SignalR leg -(`:126`-`:143`, which alone calls `MarkAsSent` `:134` / `MarkAsFailed` `:141`) and the final -`unitOfWork.SaveChangesAsync` at `:164`; the native-leg failure is logged via `LogNativePushFailed` -(call site `:161`; the `[LoggerMessage]` attribute is `:191`, declaration `:192`) and does not touch the audit status. `Website/docs-src/adr/044-native-push-delivery.md` records the -decision (amends ADR-024): Azure Notification Hubs fan-out, `user:{id}` installation tags, Null-by-default -Application ports. -Three-controller evidence (all `[FeatureGate(NotificationFeatures.PushNotifications)]`, re-read -2026-09-19 this run; `DevicesController` shifted +1, `InboxController` shifted -1, -`NotificationsController` holds): -`DevicesController` at `Source/Presentation/MMCA.Common.API/Controllers/Notifications/DevicesController.cs` -(`[FeatureGate]` `:24`, `[Authorize]` any signed-in user `:25`, `public sealed class DevicesController` -`:26`, injects `IPushDeviceRegistrar` `:27`, `PUT` upsert `:31`, idempotent `DELETE {installationId}` -`:55`, whose caller-scoped, non-probeable 204 is documented at `:48`-`:54` and returned at `:69`); -`NotificationsController` `[FeatureGate]` at -`Source/Presentation/MMCA.Common.API/Controllers/Notifications/NotificationsController.cs:28` -(organizer policy `[HasPermission(NotificationPermissions.Manage)]` `:29`, class declaration `:30`); -`InboxController` `[FeatureGate]` at -`Source/Presentation/MMCA.Common.API/Controllers/Notifications/NotificationInboxController.cs:27` -(authenticated-only `:28`, class declaration `:29`). -DI-layer evidence (re-read 2026-09-19 this run; the behavior is unchanged, but this file grew by roughly -260 lines since the prior pass, so every citation below was re-read rather than shifted): the push, -native-push, and email null/default registrations all -live in the INFRASTRUCTURE layer, not Application. `Source/Core/MMCA.Common.Infrastructure/DependencyInjection.cs:734` -registers `IEmailSender` -> `SmtpEmailSender` (`TryAddTransient`, unconditional default, no Null analogue), -`:735` registers `IPushNotificationSender` -> `NullPushNotificationSender`, `:740` registers -`INativePushSender` -> `NullNativePushSender` and `:741` registers `IPushDeviceRegistrar` -> -`NullPushDeviceRegistrar` (both ADR-044 no-op defaults); all sit inside `AddServices()` (declared `:704`), -which `AddInfrastructure` (declared `:72`) always calls (`:240`). `AddNativePushNotifications(configuration)` -(declared `:861`) binds and reads the `NativePush` section (`:863`-`:866`) and returns untouched unless -`Enabled` + `ConnectionString` + `HubName` are all present (guard `:867`-`:872`); when enabled and complete -it swaps in -`AzureNotificationHubNativePushSender` (`:877`) and `AzureNotificationHubDeviceRegistrar` (`:878`); -`AddPushNotifications` (declared `:820`) calls `AddSignalR()` (`:827`), adds the Redis backplane only when a -`redis` connection string is present (`:829`-`:841`, `AddStackExchangeRedis` `:839`), and swaps in -`SignalRPushNotificationSender` (`:844`) and, per -ADR-039, `SignalRLiveChannelPublisher` (`:845`) over the default `NullLiveChannelPublisher` (`:736`), plus -`ClaimBasedUserIdProvider` (`:846`). The -Application layer's `AddNotificationApplicationServices()` registers only the recipient null-default -`NullNotificationRecipientProvider` at -`Source/Core/MMCA.Common.Application/Notifications/DependencyInjection.cs:74`. -The `SendPushNotificationHandler` code block is an illustrative reconstruction of the documented step -order, not a verbatim copy. Its call shapes mirror the real signatures: -`PushNotification.Create(string title, string body, UserIdentifierType sentByUserId, int recipientCount, string? dedupKey = null, string? scopeKey = null)` -declared at `Source/Core/MMCA.Common.Domain/Notifications/PushNotifications/PushNotification.cs:96`-`:102` -(its XML doc, including both optional-key parameters, at `:79`-`:95`) -and called at -`Source/Core/MMCA.Common.Application/Notifications/PushNotifications/UseCases/Send/SendPushNotificationHandler.cs:66`-`:72` -(the handler passes `command.SentByUserId`, `recipientIds.Count`, the normalized `dedupKey`, and -`command.Request.ScopeKey`; the real handler resolves its repositories through -`unitOfWork.GetRepository<...>` at `:79` and `:116` rather than an injected field), and -`IPushNotificationSender.SendToUsersAsync(userIds, title, body, metadata = null, ct)` at -`Source/Core/MMCA.Common.Infrastructure/Services/SignalRPushNotificationSender.cs:25` -(both the SignalR and native calls pass title/body and omit the optional metadata). The block simplifies -variable names, collapses the requery branch of the CA1031 catch to a comment, and drops the -`Result` unwrap for readability. -Hub evidence (re-verified 2026-08-14 this run, unchanged, still correcting the earlier "empty hub" claim): -`Source/Core/MMCA.Common.Infrastructure/Hubs/NotificationHub.cs` is `[Authorize]`d (`:16`), -`public sealed class NotificationHub` (`:17`), and now carries four method-name constants -(`ReceiveNotificationMethod = "ReceiveNotification"` `:20`, `ReceiveChannelEventMethod` `:23`, -`JoinChannelMethod` `:26`, `LeaveChannelMethod` `:29`) plus two client-invokable live-channel hub methods -`JoinChannelAsync` (`:44`) and `LeaveChannelAsync` (`:60`), added per -`Website/docs-src/adr/039-live-channel-push.md`. This article scopes to the durable-push path, which uses only -`ReceiveNotificationMethod`: `SignalRPushNotificationSender` sends on `NotificationHub.ReceiveNotificationMethod` -at `Source/Core/MMCA.Common.Infrastructure/Services/SignalRPushNotificationSender.cs:21,31,39`. -Connection-to-user mapping remains `ClaimBasedUserIdProvider` -(`Source/Core/MMCA.Common.Infrastructure/Services/ClaimBasedUserIdProvider.cs`). The live-channel layer -(`JoinChannel`/`LeaveChannel`, `ILiveChannelPublisher`) is the subject of the next article (Article 22, -live channel push).* +*Notes: refreshed 2026-10-02 against MMCA.Common v1.221.0 (paths below are under `MMCA.Common/` unless +stated). Changes this run: the opt-in dedup key is sender-scoped and hashed (step 1, step 3, the code +block and the retry-safety section restated); the at-least-once consequence of running the live legs +inside the transaction is added to the transaction trade-off; ADC's scope fallback is restated (it +fails narrow to the last resolved key or an `event:0` sentinel, never to null); the Redis backplane's +per-application channel prefix is added; three "as it always did / as before" phrasings are removed; +every DI anchor is re-pointed (the push registrations live in `DependencyInjection.Notifications.cs`). +Handler, re-read in full this run: +`Source/Core/MMCA.Common.Application/Notifications/PushNotifications/UseCases/Send/SendPushNotificationHandler.cs`. +"Atomicity" XML doc `:21`-`:29` (live legs re-run under the execution strategy on a transient fault of +the final save, at-least-once for SignalR and native, exactly-once for inbox rows, `:27`-`:29`); +`INativePushSender nativePushSender` injected `:36`. Dedup: whitespace to null, otherwise +`SenderScopedDedupKey(command.SentByUserId, command.DedupKey)` (`:49`-`:51`), which is +`Convert.ToHexString(SHA256.HashData(...$"{sentByUserId}:{clientKey}"))` (`:185`-`:187`; its XML doc +`:178`-`:181` states the result is always 64 characters); lookup and hit `:52`-`:60` (`LogDedupHit` +`:57`); `FindByDedupKeyAsync` `:194`-`:203` via `unitOfWork.GetReadRepository<...>` `:196`. +Recipients `:63`-`:64`, empty-set `Validation` failure `:66`-`:72`. `PushNotification.Create(...)` +called `:75`-`:81` with the hashed `dedupKey` and `command.Request.ScopeKey`. Repositories via +`unitOfWork.GetRepository<...>` `:88` and `:125`. Audit save alone `:93`, inside the CA1031 catch +(pragma `:95`, `catch (Exception)` `:96`, layer-rule rationale `:99`-`:107`, requery on +`CancellationToken.None` `:109`-`:113`, `LogDedupRaceRequery` `:116`, rethrow `:121`). Inbox rows +`:126`-`:130`, second save `:132`. SignalR leg `:135`-`:152` (`MarkAsSent` `:143`, `MarkAsFailed` +`:150`); native leg `:158`-`:171` (call `:160`-`:164`, `LogNativePushFailed` call `:170`, +`[LoggerMessage]` `:211`, declaration `:212`); final save `:173`; DTO returned `:175`. +Command and decorator: `SendPushNotificationCommand.cs:21`-`:23` (`ITransactional` `:23`, +"Transactional on purpose" doc `:11`-`:19`, sender-scoped `DedupKey` doc `:25`-`:35`); +`Source/Core/MMCA.Common.Application/UseCases/Decorators/TransactionalCommandDecorator.cs` passes a +command without the marker straight through (`:30`-`:31`) and otherwise calls +`unitOfWork.ExecuteInTransactionAsync` (`:33`). +Aggregate: `Source/Core/MMCA.Common.Domain/Notifications/PushNotifications/PushNotification.cs`, +`DedupKeyMaxLength = 128` `:19`, `ScopeKeyMaxLength = 128` `:22`, `DedupKey` `:45`, `ScopeKey` `:53` +(view-filter XML doc `:47`-`:52`), whitespace normalization in the private constructor `:75`-`:76`, +`Create(string title, string body, UserIdentifierType sentByUserId, int recipientCount, string? dedupKey = null, string? scopeKey = null)` +`:96`-`:102` (doc from `:79`), both length checks `:107`-`:120`. EF: +`Source/Core/MMCA.Common.Infrastructure/Persistence/Configuration/EntityTypeConfiguration/Notifications/PushNotificationConfiguration.cs`, +`DedupKey` max length `:46`-`:47`, `ScopeKey` `:52`-`:53` deliberately unindexed (comment `:49`-`:51`), +filtered unique index `:69`-`:73` (`IsUnique()` + `HasSoftDeleteFilter`, `[DedupKey] IS NOT NULL`, +engine-aware quoting; rationale `:55`-`:68`). Request: `ScopeKey` init-only at +`Source/Core/MMCA.Common.Shared/Notifications/PushNotifications/SendPushNotificationRequest.cs:28`, +bounded by `SendPushNotificationRequestValidator.cs:27`-`:29`. +Controllers (`Source/Presentation/MMCA.Common.API/Controllers/Notifications/`): +`NotificationsController.cs` `[FeatureGate]` `:28`, `[HasPermission(NotificationPermissions.Manage)]` +`:29`, class `:30`, `[HttpPost]` `:43`, `[Idempotent]` `:44`, `Idempotency-Key` read after the S6932 +pragma `:61`, command with `DedupKey = dedupKey` `:69` (the raw header; hashing happens in the +handler); `NotificationInboxController.cs` `[FeatureGate]` `:27`, `[Authorize]` `:28`, +`InboxController` `:29`, `[FromQuery, StringLength(PushNotification.ScopeKeyMaxLength)] string? scope` +`:46`, `:70`, `:113` (mark-one `[HttpPut("{id:int}/read")]` `:86` takes no scope, read-all `:110`); +`DevicesController.cs` `[FeatureGate]` `:24`, `[Authorize]` `:25`, class `:26`, +`IPushDeviceRegistrar` `:27`, `[HttpPut]` `:31`, `[HttpDelete("{installationId}")]` `:55`. +Inbox slices (`Source/Core/MMCA.Common.Application/Notifications/UserNotifications/UseCases/`): +`GetInbox/GetMyNotificationsHandler.cs` `MaxPageSize = 500` `:21`, scope filter `:40`-`:43`, caller +filter `:50`; `GetUnreadCount/GetUnreadNotificationCountHandler.cs` caller `:25`, scope `:31`-`:38`; +`MarkAllRead/MarkAllNotificationsReadHandler.cs` caller `:30`, scope `:37`-`:45`; +`MarkRead/MarkNotificationReadHandler.cs` id plus caller `:26`, `TimeProvider` injected `:15` and used +`:38`. +DI: `Source/Core/MMCA.Common.Infrastructure/DependencyInjection.cs` `AddInfrastructure` `:57` calls +`AddServices()` `:234` (declared `:294`), which does `TryAddTransient` for `IEmailSender` -> +`SmtpEmailSender` `:324`, `IPushNotificationSender` -> `NullPushNotificationSender` `:325`, +`ILiveChannelPublisher` -> `NullLiveChannelPublisher` `:326`, `INativePushSender` -> +`NullNativePushSender` `:330`, `IPushDeviceRegistrar` -> `NullPushDeviceRegistrar` `:331`. +`Source/Core/MMCA.Common.Infrastructure/DependencyInjection.Notifications.cs`: `AddPushNotifications` +`:41`, `AddSignalR()` `:48`, `redis` connection string `:50`, per-application `ChannelPrefix` with +`AddStackExchangeRedis` `:53`-`:61`, `SignalRPushNotificationSender` `:65`, +`SignalRLiveChannelPublisher` `:66`, `ClaimBasedUserIdProvider` `:67`; `AddNativePushNotifications` +`:82`, enabled-and-complete guard `:88`-`:93`, `AzureNotificationHubNativePushSender` `:98`, +`AzureNotificationHubDeviceRegistrar` `:99`. Application registers only +`NullNotificationRecipientProvider` at `Source/Core/MMCA.Common.Application/Notifications/DependencyInjection.cs:75`. +Hub and sender: `Source/Core/MMCA.Common.Infrastructure/Notifications/NotificationHub.cs` +`[Authorize]` `:24`, class `:25`, `ReceiveNotificationMethod` `:30` (plus `ReceiveChannelEventMethod` +`:33`, `JoinChannelMethod` `:36`, `LeaveChannelMethod` `:39`, `JoinChannelAsync` `:119`, +`LeaveChannelAsync` `:136`, per ADR-039); +`Source/Core/MMCA.Common.Infrastructure/Notifications/Push/SignalRPushNotificationSender.cs` +`BatchSize = 100` `:14`, `SendToUsersAsync(userIds, title, body, metadata = null, cancellationToken)` +`:24`, sends on `NotificationHub.ReceiveNotificationMethod` `:20`, `:30`, `:38`; +`ClaimBasedUserIdProvider` at `Source/Core/MMCA.Common.Infrastructure/Context/ClaimBasedUserIdProvider.cs`. +ADC scope: `MMCA.ADC/Source/Modules/Engagement/MMCA.ADC.Engagement.UI/Services/Notifications/CurrentEventNotificationScopeProvider.cs` +resolves `NotificationScopeKey.ForEvent(currentEvent.EventId)` `:67`, caches a resolved key five +minutes `:41`, and on no event or a failure (`catch` `:74`) answers from `LastResolvedOrSentinel` +(`:79`-`:83`, `:124`-`:128`): the last resolved key or `UnresolvedScopeKey` = `event:0` `:39`, a key +no row carries; the "never answers unscoped" reasoning is its own remarks `:20`-`:24`. +ADR mapping: `Website/docs-src/adr/024-push-notifications.md` records the scope key (status `:5`-`:6`), +the per-application backplane channel (`:9`-`:10`) and the sender-scoped dedup key (`:13`, decision +`:37`-`:48`); the ADR-024 + ADR-044 mapping holds. +Carried forward, not re-read this run: `AttendeeNotificationRecipientProvider` (ADC), +`PushNotificationInvariants`, `SmtpEmailSender` building a fresh `SmtpClient` per send, the idempotent +`UserNotification.MarkAsRead`, `GlobalUsings.NotificationIdentifierType.cs`, the `DevicesController` +delete documentation, and the content of `Website/docs-src/adr/044-native-push-delivery.md`. +The `SendPushNotificationHandler` code block is an illustrative reconstruction of the step order, not +a verbatim copy: it simplifies variable names, collapses the requery branch of the CA1031 catch to a +comment and drops the `Result` unwrap. Next article: Article 22, live channel push.* diff --git a/docs-src/articles/observability-opentelemetry.md b/docs-src/articles/observability-opentelemetry.md index 515949a4..d5a8c002 100644 --- a/docs-src/articles/observability-opentelemetry.md +++ b/docs-src/articles/observability-opentelemetry.md @@ -1,15 +1,17 @@ # Observability by Default: OpenTelemetry and Azure Monitor in MMCA -> Series: MMCA.Common · Article #48 (deep-dive) · Pillar P2/P3 · Group G16 · Rubric §13,§31 · ADR-041, ADR-062 · +> Series: MMCA.Common · Article #48 (deep-dive) · Pillar P2/P3 · Group G16 · Rubric §13 · ADR-041, ADR-062 · > Status: grounded in `Website/docs-src/adr/041-observability-and-telemetry.md`, > `Website/docs-src/adr/062-slo-alerting-as-code.md`, -> `MMCA.Common/Source/Hosting/MMCA.Common.Aspire/Extensions.cs` (`ConfigureOpenTelemetry`, -> `ConfigureMetrics`, `AddOpenTelemetryExporters`, `TryGetTraceSampleRatio`, `IsInstrumentationDisabled`, -> `IsInstrumentationEnabled`, `IsProbeTelemetryFilterEnabled`), +> `MMCA.Common/Source/Hosting/MMCA.Common.Aspire/Extensions.cs` (`AddServiceDefaults`), +> `MMCA.Common/Source/Hosting/MMCA.Common.Aspire/Extensions.Telemetry.cs` (`ConfigureOpenTelemetry`, +> `ConfigureMetrics`, `ConfigureAspNetCoreMetrics`, `AddOpenTelemetryExporters`, `TryGetTraceSampleRatio`, +> `IsInstrumentationDisabled`, `IsInstrumentationEnabled`, `IsProbeTelemetryFilterEnabled`), > `MMCA.Common.Aspire/Telemetry/OutboxPollFilterProcessor.cs`, > `MMCA.Common.Application/UseCases/Decorators/CqrsMetrics.cs`, > `MMCA.Common.Infrastructure/Persistence/Outbox/Processing/OutboxMetrics.cs`, > `MMCA.Common.Infrastructure/Persistence/InternalCommands/Processing/InternalCommandMetrics.cs`, +> `MMCA.Common.Infrastructure/Persistence/InternalCommands/Processing/InternalCommandProcessor.cs`, > `MMCA.Common.Infrastructure/Scheduling/SchedulerMetrics.cs`, > `MMCA.Common.Infrastructure/Messaging/BrokerMetrics.cs`, `MMCA.Common.API/Caching/OutputCacheMetrics.cs`, > `MMCA.Common.Application/Services/BestEffort.cs`, @@ -44,7 +46,8 @@ is already the single largest observability line item; idle polling piles on top MMCA.Common treats observability as a hosting-layer default: one call on the host builder, and every service in the model gets the same logs, metrics, and traces, the same framework-specific instrumentation -where auto-instrumentation is blind, and the same cost knobs that fail toward keeping data. +where auto-instrumentation is blind, and the same cost knobs, each with a deliberate default that a typo +cannot flip. ## Why it matters @@ -67,22 +70,27 @@ host, in-process or extracted, tells the same story the same way. ## The MMCA answer: one call, one baseline, on every host -Every framework-consuming host calls `AddServiceDefaults()` first in `Program.cs`, and that method calls -`ConfigureOpenTelemetry()` (`Extensions.cs:87`, the call at `:89`) before anything module-specific. So a -host opts in once and every project in the Aspire model inherits the identical telemetry pipeline. There -is no per-app ServiceDefaults copy: all four ADC services and all three Store services consume this one -implementation directly (for example `MMCA.ADC.Conference.Service/Program.cs:103` and -`MMCA.Store.Catalog.Service/Program.cs:72`), as do both gateways and both web UIs. +Every framework-consuming host calls `AddServiceDefaults()` early in `Program.cs`, and that method calls +`ConfigureOpenTelemetry()` (`Extensions.cs:30`, the call at `:32`) before anything module-specific. Only +host-level setup runs ahead of it, notably `AddCommonSerilog`, which has to come first so the OpenTelemetry +logging provider registered by `AddServiceDefaults` joins the same logging factory +(`MMCA.Store.Catalog.Service/Program.cs:68-70`). So a host opts in once and every project in the Aspire +model inherits the identical telemetry pipeline. There is no per-app ServiceDefaults copy: all four ADC +services and all three Store services consume this one implementation directly (for example +`MMCA.ADC.Conference.Service/Program.cs:105` and `MMCA.Store.Catalog.Service/Program.cs:73`), as do both +gateways and both web UIs. -`ConfigureOpenTelemetry` (`Extensions.cs:170`) does four things. +`ConfigureOpenTelemetry` (`Extensions.Telemetry.cs:71`, in the partial `Extensions` file that holds all of +the telemetry wiring) does four things. **It wires logging, metrics, and tracing.** Logs go through the OpenTelemetry logger with -`IncludeFormattedMessage` and `IncludeScopes` on (`Extensions.cs:172-176`) so a scope carries its -structured state. The metrics half is a separate private method, `ConfigureMetrics` (`Extensions.cs:534`, -called through a one-line lambda at `:179`), and it starts from ASP.NET Core instrumentation, always on -(`:536`). Tracing adds four activity sources by name (`:182-185`) and then ASP.NET Core and `HttpClient` -instrumentation (`:205-208` or `:212-213`, depending on a knob below). That is the free -auto-instrumentation floor plus the framework's own sources. +`IncludeFormattedMessage` and `IncludeScopes` on (`Extensions.Telemetry.cs:73-77`) so a scope carries its +structured state. The metrics half is a separate private method, `ConfigureMetrics` +(`Extensions.Telemetry.cs:243`, called through a one-line lambda at `:80`), and it starts with the ASP.NET +Core instrumentation through `ConfigureAspNetCoreMetrics` (called at `:245`, declared at `:352`), which is +on unless a cost knob below drops it. Tracing adds four activity sources by name (`:83-86`) and then +ASP.NET Core and `HttpClient` instrumentation (`:106-109` or `:113-114`, depending on a knob below). That +is the free auto-instrumentation floor plus the framework's own sources. **It instruments only where auto-instrumentation is blind.** Nine framework-owned meters carry custom signals, subscribed here by literal name because the Aspire package deliberately has no project reference to @@ -105,14 +113,15 @@ the assemblies that define them: five: a dead-letter counter `outbox.dead_letter.count` (`:41-44`), a success counter `outbox.processed.count` (`:47-50`), an end-to-end dispatch-lag histogram in seconds (`:57-60`), an `ObservableGauge` for pending depth (`:75-79`) published each cycle from the depth the processor observed - (`OutboxProcessor.cs:251`), and a second gauge, `outbox.oldest_pending.age` in seconds tagged + (`OutboxProcessor.cs:165`), and a second gauge, `outbox.oldest_pending.age` in seconds tagged `data_source` (`:98-102`, fed by `SetOldestPendingAge` at `:115`). The two say different things: the histogram reports how late the messages that did get delivered were, the age gauge reports how late a backlog already is while it is still stuck, which is the number an alert on a wedged outbox fires on (`:81-86`). The dead-letter counter has two increment sites, tagged `event_type` and `reason`: an - unresolvable event type (`OutboxProcessor.cs:752-755`, reason `type_unresolvable`) and an exhausted retry - budget (`:707-710`, reason `retries_exhausted`). The same activity source emits outbox spans - (`OutboxProcessor.cs:93`). + unresolvable event type (`OutboxProcessor.cs:667-670`, reason `type_unresolvable`; a row on its first + attempt is retried once as transient before that, `:656-663`) and an exhausted retry budget + (`:617-620`, reason `retries_exhausted`). The same activity source emits outbox spans + (`OutboxProcessor.cs:88`). - The durable internal-command queue owns `MMCA.Common.InternalCommands` (`InternalCommandMetrics.cs:20`, meter at `:22`) with the same shape one drain over a table needs: processed, failed and dead-letter counters (`:38`, `:48`, `:57`), a duration histogram (`:66`), a @@ -145,51 +154,63 @@ the assemblies that define them: (hosts call it from handlers, hosted services and consumers alike), so an operator can drop or keep it independently of the RED metrics (`BestEffort.cs:92-97`). And the optional language-model package publishes its token spend and call duration under one name, `MMCA.Common.AI`, used as both meter and - trace source (`Extensions.cs:62`, subscribed at `:606`), inert in a host that never adds that package. + trace source (`Extensions.Telemetry.cs:44`, subscribed as a meter at `:315` and as a source at `:86`), + inert in a host that never adds that package. All four publish nothing in a host that stays on the in-process bus, takes no output cache, dispatches no best-effort work, and calls no model. -The Aspire defaults subscribe all nine by literal name in one chain (`Extensions.cs:598-606`), with a -comment enumerating what each one carries (`:587-597`), and then subscribe a tenth meter that nobody in -this repo defines: Polly's own (`:613`). The standard resilience handler sits on every `HttpClient` and +The Aspire defaults subscribe all nine by literal name in one chain (`Extensions.Telemetry.cs:307-315`), +with a comment enumerating what each one carries (`:296-306`), and then subscribe a tenth meter that nobody +in this repo defines: Polly's own (`:322`). The standard resilience handler sits on every `HttpClient` and every gRPC typed client, so it is the component that decides whether an inter-service call is retried, timed out, or refused by an open circuit, and `resilience.polly.strategy.events` is what makes a brownout -look like a brownout rather than like latency (`:608-612`). - -**It exposes cost knobs that default to safe.** There are five, and only the first two are about volume -for its own sake. `HttpClient` connection and request metrics are on unless -`Telemetry:DisableHttpClientMetrics` is set (`Extensions.cs:545`), and .NET runtime metrics -(`dotnet.gc.*`, `jit.*`, `thread_pool.*`) unless `Telemetry:DisableRuntimeMetrics` is set (`:572`). Both -keys are read by `IsInstrumentationDisabled` (`Extensions.cs:499`), which drops the family only when the -value parses as boolean `true`; absent, blank, or unparseable keeps the instrumentation, so a typo cannot -silently blind a whole metric family. Skipping the `Add` call is not enough on its own, and the source says -why (`:547-556`): a deployed host also calls `UseAzureMonitor()`, and the Azure Monitor distro adds the -`System.Net.Http` meter itself, so the toggle stayed advisory. Each disabled branch therefore installs a -drop `View`, over `System.Net.Http` plus `System.Net.NameResolution` (`:557-561`) and over `System.Runtime` -(`:577-580`); a `View` applies to the whole `MeterProvider` regardless of which component added the meter, -which is what makes the knob authoritative. The third knob is the mirror image: Polly's two duration -histograms are dropped by a `View` unless a host opts in with `Telemetry:EnablePollyDurationMetrics` -(`:43`, read by `IsInstrumentationEnabled` at `:512`, the `View` at `:623-631`), while the -strategy-events counter is never dropped (`:620-622`). Head-based trace sampling is the fourth: -`Telemetry:TracesSampleRatio` (read at `Extensions.cs:479`), parsed by `TryGetTraceSampleRatio` -(`Extensions.cs:476`, called at `:236`), is unset by default so a host samples everything. Set a ratio in -the open interval (0,1) and it installs a `TraceIdRatioBasedSampler` wrapped in a `ParentBasedSampler` -(`Extensions.cs:237`) so a sampled-in request keeps its whole trace intact across service boundaries. A -value that is absent, unparseable, or outside (0,1) falls back to sample-all (`Extensions.cs:478-485`), so -a typo can never silently drop all telemetry. - -**It filters idle poll and probe spans out of export.** That is the fifth knob and the sharpest decision in +look like a brownout rather than like latency (`:317-321`). + +**It exposes cost knobs with deliberate defaults.** There are six, and the first three are about volume +for its own sake. ASP.NET Core metrics (`http.server.*`, `kestrel.*`, `aspnetcore.*`, +`signalr.server.*`) are on unless `Telemetry:DisableAspNetCoreMetrics` is set +(`Extensions.Telemetry.cs:354`). The source records why that knob exists: the family was 73% of both +production workspaces' ingestion over 2026-09-22..28, mostly gauges re-emitted on replicas serving no +traffic, and no alert reads any of it (`:343-349`), so both production templates set it +(`MMCA.ADC/infra/main.bicep:298-299`, `MMCA.Store/infra/main.bicep:253-254`). `HttpClient` connection and +request metrics are on unless `Telemetry:DisableHttpClientMetrics` is set (`Extensions.Telemetry.cs:254`), +and .NET runtime metrics (`dotnet.gc.*`, `jit.*`, `thread_pool.*`) unless `Telemetry:DisableRuntimeMetrics` +is set (`:281`). All three keys are read by `IsInstrumentationDisabled` (`Extensions.Telemetry.cs:208`, its +doc naming the three at `:201-203`), which drops the family only when the value parses as boolean `true`; +absent, blank, or unparseable keeps the instrumentation, so a typo cannot silently blind a whole metric +family. Skipping the `Add` call is not enough on its own, and the source says why (`:256-265`): a deployed +host also calls `UseAzureMonitor()`, and the Azure Monitor distro adds the `System.Net.Http` meter itself, +so the toggle stayed advisory. Each disabled branch therefore installs a drop `View`, over every meter +under the `Microsoft.AspNetCore.` prefix (`:359-362`), over `System.Net.Http` plus +`System.Net.NameResolution` (`:266-270`) and over `System.Runtime` (`:286-289`); a `View` applies to the +whole `MeterProvider` regardless of which component added the meter, which is what makes the knob +authoritative. The fourth knob is the mirror image: Polly's two duration histograms are dropped by a +`View` unless a host opts in with `Telemetry:EnablePollyDurationMetrics` (`:25`, read by +`IsInstrumentationEnabled` at `:221`, the `View` at `:332-340`), because they re-measure what +`http.client.request.duration` and the dependency traces already report (`:324-328`); absent, blank or +unparseable all mean "stay off" (`:211-216`), while the strategy-events counter is never dropped +(`:329-331`). Head-based trace sampling is the fifth: `Telemetry:TracesSampleRatio` (read at +`Extensions.Telemetry.cs:188`), parsed by `TryGetTraceSampleRatio` (`Extensions.Telemetry.cs:185`, called +at `:137`), is unset by default so a host samples everything, and both production templates set it to +`0.25` (`MMCA.ADC/infra/main.bicep:253-254`, `MMCA.Store/infra/main.bicep:207-208`). Set a ratio in the +open interval (0,1) and it installs a `TraceIdRatioBasedSampler` wrapped in a `ParentBasedSampler` +(`Extensions.Telemetry.cs:138`) so a sampled-in request keeps its whole trace intact across service +boundaries. A value that is absent, unparseable, or outside (0,1) falls back to sample-all +(`Extensions.Telemetry.cs:189-194`), so a typo can never silently drop all telemetry. + +**It filters idle poll and probe spans out of export.** That is the sixth knob and the sharpest decision in the file. More on it below. -Then `AddOpenTelemetryExporters` (`Extensions.cs:348`) decides where telemetry goes, from the environment, -with no code change: OTLP when `OTEL_EXPORTER_OTLP_ENDPOINT` is present (`Extensions.cs:350-356`, the Aspire -dashboard sets it locally) and Azure Monitor via `UseAzureMonitor` when `APPLICATIONINSIGHTS_CONNECTION_STRING` -is present (`Extensions.cs:358-364`, set by the cloud deployment). Both can be active at once -(`Extensions.cs:346`). Local development ships to the Aspire dashboard; production ships to workspace-based -Application Insights; the same binary does both depending on which variable is set. +Then `AddOpenTelemetryExporters` (`Extensions.Telemetry.cs:159`) decides where telemetry goes, from the +environment, with no code change: OTLP when `OTEL_EXPORTER_OTLP_ENDPOINT` is present +(`Extensions.Telemetry.cs:161-167`, the Aspire dashboard sets it locally) and Azure Monitor via +`UseAzureMonitor` when `APPLICATIONINSIGHTS_CONNECTION_STRING` is present (`Extensions.Telemetry.cs:169-175`, +set by the cloud deployment). Both can be active at once (`Extensions.Telemetry.cs:157`). Local development +ships to the Aspire dashboard; production ships to workspace-based Application Insights; the same binary +does both depending on which variable is set. -Here is the shape of the pipeline (condensed from `Extensions.cs:170-243` and `:534-632`, comments trimmed, -body faithful): +Here is the shape of the pipeline (condensed from `Extensions.Telemetry.cs:71-144` and `:243-368`, +comments trimmed, body faithful): ```csharp public TBuilder ConfigureOpenTelemetry() @@ -240,9 +261,9 @@ public TBuilder ConfigureOpenTelemetry() private static void ConfigureMetrics(MeterProviderBuilder metrics, IConfiguration configuration) { - metrics.AddAspNetCoreInstrumentation(); + ConfigureAspNetCoreMetrics(metrics, configuration); - // Two highest-volume families, on by default. Disabling drops the whole meter with a View, + // HttpClient and runtime families, on by default. Disabling drops the whole meter with a View, // because the Azure Monitor distro adds these meters itself: if (IsInstrumentationDisabled(configuration, "Telemetry:DisableHttpClientMetrics")) metrics.AddView(instrument => @@ -278,21 +299,34 @@ private static void ConfigureMetrics(MeterProviderBuilder metrics, IConfiguratio ? MetricStreamConfiguration.Drop : null); } + +private static void ConfigureAspNetCoreMetrics(MeterProviderBuilder metrics, IConfiguration configuration) +{ + // On by default; both production deployments drop the whole Microsoft.AspNetCore.* family: + if (IsInstrumentationDisabled(configuration, "Telemetry:DisableAspNetCoreMetrics")) + metrics.AddView(instrument => + instrument.Meter.Name.StartsWith("Microsoft.AspNetCore.", StringComparison.Ordinal) + ? MetricStreamConfiguration.Drop + : null); + else + metrics.AddAspNetCoreInstrumentation(); +} ``` ## The one that pays for itself: filtering idle poll spans The `OutboxProcessor` polls every relational outbox table on a recurring cycle (both deployment templates push the interval to 300 seconds precisely so idle polls cost less: `Outbox__PollingIntervalSeconds` is set -to `300` on every container app, four in `MMCA.ADC/infra/main.bicep` (`:1591`, `:1812`, `:1950`, `:2102`) -and three in `MMCA.Store/infra/main.bicep` (`:1461`, `:1635`, `:1762`), against the 2-second default in +to `300` on every container app, four in `MMCA.ADC/infra/main.bicep` (`:1700`, `:1923`, `:2063`, `:2217`) +and three in `MMCA.Store/infra/main.bicep` (`:1493`, `:1669`, `:1801`), against the 2-second default in `OutboxSettings.cs:31`). Each poll runs inside an `OutboxPoll` -activity (`OutboxProcessor.cs:426`, named at `:75`), and under the Azure Monitor distro that span gets a -child SqlClient dependency span for the poll query. A second `OutboxPoll` activity wraps the backlog-depth -count that feeds the pending-depth gauge (`OutboxProcessor.cs:373`, inside `CountPendingAsync` at `:361`), -deliberately reusing the same name so the same filter suppresses it. The internal-command queue drains the -same way, under its own `InternalCommandPoll` name (`InternalCommandProcessor.cs:63`, opened at `:318` and -`:351`). At fleet scale, that steady stream of +activity (`OutboxProcessor.cs:330`, inside `FetchCandidatesAsync` at `:324`, named at `:70`), and under +the Azure Monitor distro that span gets a child SqlClient dependency span for the poll query. A second +`OutboxPoll` activity wraps the backlog-depth count that feeds the pending-depth gauge +(`OutboxProcessor.cs:277`, inside `CountPendingAsync` at `:265`, which only queries when the fetched batch +came back full, `:272-275`), deliberately reusing the same name so the same filter suppresses it. The +internal-command queue drains the same way, under its own `InternalCommandPoll` name +(`InternalCommandProcessor.cs:57`, opened at `:235` and `:268`). At fleet scale, that steady stream of idle-poll spans would dominate Application Insights ingestion and spam the local dashboard, telemetry about nothing happening, priced like something happening. @@ -303,22 +337,22 @@ which is true for two pairs of literals: `OutboxPoll` on source `MMCA.Common.Out `InternalCommandPoll` on source `MMCA.Common.InternalCommands` (`:26-29`). Matching operation name and source together is what stops an unrelated span that happens to be named "OutboxPoll" from being suppressed. Clearing `Recorded` makes the batch exporters skip the activity, which is why the processor is -registered before the exporters (`Extensions.cs:221`, ahead of `AddOpenTelemetryExporters()` at `:240`): -its `OnEnd` runs first, and the exporters never see the span. A second processor, +registered before the exporters (`Extensions.Telemetry.cs:122`, ahead of `AddOpenTelemetryExporters()` at +`:141`): its `OnEnd` runs first, and the exporters never see the span. A second processor, `ProbeTelemetryFilterProcessor`, is registered right behind it under the same ordering requirement -(`:228`), because the inbound filter refuses the probe request span itself while its dependency children -are sampled independently and need un-recording before the exporters look (`:225-227`). +(`:129`), because the inbound filter refuses the probe request span itself while its dependency children +are sampled independently and need un-recording before the exporters look (`:126-128`). Real work survives untouched. Each per-message `OutboxProcess` span is started under an explicit parent context rebuilt from the message's stored trace and span ids and passed straight into `StartActivity` -(`OutboxProcessor.cs:808`, the start call at `:820`), so it is never a child of the poll span and never +(`OutboxProcessor.cs:708`, the start call at `:720`), so it is never a child of the poll span and never matched by the parent-chain walk. Per-command `InternalCommandExecute` spans work the same way (`OutboxPollFilterProcessor.cs:13-15`). The outbox counters, the lag histogram, and the two gauges are metrics, not spans, so they are unaffected too. You lose the noise and keep the signal. The poll-span and source literals live on both sides of the package boundary: the filter (`OutboxPollFilterProcessor.cs:26-29`) and the two processors that emit them, where the outbox declares its -pair across three sites, `PollActivityName` (`OutboxProcessor.cs:75`), the activity source (`:93`), and the +pair across three sites, `PollActivityName` (`OutboxProcessor.cs:70`), the activity source (`:88`), and the meter name (`OutboxMetrics.cs:19`). They are duplicated on purpose, with a sync comment on both sides (`OutboxPollFilterProcessor.cs:19-25`, `OutboxMetrics.cs:6-15`), because the Aspire package must not take a project reference on Infrastructure: its one `ProjectReference` is `MMCA.Common.Shared`, which is what keeps @@ -334,16 +368,22 @@ with no record behind it. ADR-062 (`Website/docs-src/adr/062-slo-alerting-as-cod Each consuming app declares its SLO alerts as **data in its Bicep template**. `sloAlertSpecs` is one array of records carrying `key`, `description`, `query`, `timeAggregation`, `metricMeasureColumn`, `threshold`, -and `severity` (`MMCA.ADC/infra/main.bicep:330`, `MMCA.Store/infra/main.bicep:282`), materialized +and `severity` (`MMCA.ADC/infra/main.bicep:362`, `MMCA.Store/infra/main.bicep:312`), materialized one-for-one into Log Analytics `scheduledQueryRules` named `${prefix}-alert-${spec.key}-v2` -(`MMCA.ADC/infra/main.bicep:372,376`) and evaluated every 15 minutes over a 15-minute window (`:390-391`), -a frequency the template's own comment ties to the bill: a scheduled-query rule is billed per evaluation, -and the 5-minute tier costs $1.47 per month per rule against about $0.50 at 15 minutes (`:385-389`). Both -apps declare the same four SLOs with the same numbers: `failed-requests` at severity 2 (`:332-338`), -`server-response-time` at severity 3 (`:341-347`), `dependency-failures` at severity 2 (`:350-356`), and -`resilience-circuit-open` at severity 2 with a threshold of 0 (`:362-368`, Store's at `:314-320`), which -queries the `resilience.polly.strategy.events` instrument for an `OnCircuitOpened` event and so fires on -the first breaker opening rather than on a rate (`:358-360`). An alert +(`MMCA.ADC/infra/main.bicep:454-458`) and evaluated every 15 minutes over a 15-minute window, a frequency +the template's own comment ties to the bill: a scheduled-query rule is billed per evaluation, and the +5-minute tier costs $1.47 per month per rule against about $0.50 at 15 minutes (`:474-478`; Store's rules +carry the same cadence and reasoning at `MMCA.Store/infra/main.bicep:368-376`). Both apps declare the same +four core SLOs at the same severities: `failed-requests` at severity 2 +(`MMCA.ADC/infra/main.bicep:363-371`), `server-response-time` at severity 3 (`:372-380`), +`dependency-failures` at severity 2 (`:381-389`), and `resilience-circuit-open` at severity 2 with a +threshold of 0 (`:393-401`, Store's at `MMCA.Store/infra/main.bicep:343-351`), which queries the +`resilience.polly.strategy.events` instrument for an `OnCircuitOpened` event and so fires on the first +breaker opening rather than on a rate (`MMCA.ADC/infra/main.bicep:390-392`). ADC carries a fifth entry, +`ai-scoring-token-ceiling` at severity 3 (`:439-451`), the one rule that overrides the cadence: it sums AI +input and output tokens over a two-day window evaluated every 12 hours (the override rationale at +`:480-483`, the 15-minute defaults at `:485` and `:487`), and it is enabled only when an AI key is +deployed. An alert clicked together in the portal is invisible to review, absent from the next environment, and impossible to diff; an array in the template that provisions the workloads is all three. @@ -353,15 +393,21 @@ this traffic level it pages on completely routine traffic. A 401 (expired or abs disconnected mid-request) both count as failed requests, a long-lived SignalR hub connection reports its **connection lifetime** as request duration, and a crawler's first contact with a host is a `GET /robots.txt` followed by a `GET /sitemap.xml`. ADC's own template records three pages that made the case -(`MMCA.ADC/infra/main.bicep:318-327`): one window held eight 401s plus two 499s plus a single readiness 503 +(`MMCA.ADC/infra/main.bicep:350-359`): one window held eight 401s plus two 499s plus a single readiness 503 and zero other failures, all from one browser session retrying with an expired token; five hub connections averaging 11.3 seconds dragged the fleet-wide average to 5539ms against a 3000ms threshold with every real request fast; and twelve robots and sitemap 404s arrived from a single Azure-hosted crawler inside one 15-minute window. A metric alert has no way to say "exclude 401 and 499", "exclude `/hubs/` before -averaging", or "exclude a 404 on `/sitemap.xml`"; a KQL query says exactly that (`:334`, `:343`, `:352`). -Only those codes and the two crawler etiquette paths are excluded, so a genuine 400, 404 or 500 burst -still pages at the same number (`:328-329`). Thresholds and severities are unchanged by the exclusions, so -this is a precision fix, not a sensitivity cut. +averaging", or "exclude a 404 on `/sitemap.xml`"; a KQL query says exactly that (`:366`, `:375`, `:384`). +The two count rules exclude only those codes and, in ADC's `failed-requests`, the two crawler etiquette +paths (Store's `failed-requests` excludes only the two codes, `MMCA.Store/infra/main.bicep:316`), so a +genuine 400, 404 or 500 burst still pages at the same number (`MMCA.ADC/infra/main.bicep:360-361`). The +response-time rule goes further: beyond the `/hubs/` filter it drops `ResultCode` 101 (a hub or Blazor +circuit connection, whose duration is its lifetime) and rows with no `Url` (the background +`InternalCommandExecute` and `OutboxProcess` spans), and it only evaluates a window holding at least five +requests, so a single cold request cannot page (`:373-375`, Store's at `MMCA.Store/infra/main.bicep:325`). +The exclusions are a precision fix; the five-request floor is a deliberate trade of sensitivity in quiet +windows. **The operational trap: a rule name is an identity.** An incremental ARM deployment never removes a resource just because it left the template, and a name is how Azure decides whether a deployment updates a @@ -369,31 +415,34 @@ resource or creates a second one. That cuts both ways when a metric alert is sup covering the same signal: the old resource has to be deleted deliberately, and the replacement must not reuse its name, or the deployment renames the live metric alert instead of provisioning a rule. So every generated query rule carries the `-v2` suffix, and the template says in place that the suffix is part of -the rule's identity in Azure and must stay stable (`MMCA.ADC/infra/main.bicep:374-376`). Cheap to respect, +the rule's identity in Azure and must stay stable (`MMCA.ADC/infra/main.bicep:456-458`). Cheap to respect, expensive to discover. Two smaller properties matter as much. Every active rule routes to **one unconditional action group**: `alertEmailAddress` is a required parameter with no default (`MMCA.ADC/infra/main.bicep:124`, Store's at -`:91`), so the email receiver is never conditional (`:297`, receivers at `:303-307`) and every rule points -at it (`:414`, and the same `actionGroups: [ actionGroup.id ]` line on each ungated rule). An alert wired to -no channel is worse than no alert, because it looks like coverage and pages nobody. And a saved workbook -renders the same signals off the same workspace, embedded at compile time from a JSON file in the repo -(`:701`, `:710`), so the dashboard cannot drift from the alerts by being maintained somewhere else. +`:91`), so the email receiver is never conditional (`:329`, receivers at `:335-341`), every SLO rule points +at it (`:511`), and the gateway metric alert reaches the same group through its own `actions` block +(`:714-718`). An alert wired to no channel is worse than no alert, because it looks like coverage and pages +nobody. And a saved workbook renders the same signals off the same workspace, embedded at compile time +from a JSON file in the repo (`:730`, `:739`), so the dashboard cannot drift from the alerts by being +maintained somewhere else. The other half of ADR-062 is a build gate that fails when an alert has no severity-matching runbook section, or when a runbook section outlives its alert. That belongs with the rest of the fitness tier, so it is Article 34's subject rather than this one's. Two honest limits. The gate covers only what sits inside the parsed spec window, and both apps provision -alerts outside it, more of them every time an incident teaches something. ADC has four: the +alerts outside it, more of them every time an incident teaches something. ADC has five: the `outbox-dead-letter`, `sql-dependency-failures` and `revision-activation-failed` scheduled query rules -(`scheduledQueryAlertSpecs` at `MMCA.ADC/infra/main.bicep:442`, keys at `:444`, `:450`, `:456`, materialized -at `:463`) and a severity 1 gateway-availability alert (`:662`, severity at `:668`) over a three-location -web test against `/health` (`:629`, locations at `:645-649`, the URL at `:651`). Store has six, each its own -resource: `outboxDeadLetterAlert` (`MMCA.Store/infra/main.bicep:389`, severity 2 at `:396`), -`revisionActivationAlert` (`:439`), `authFailureSpikeAlert` (`:507`), `forbiddenBurstAlert` (`:547`), -`logIngestionQuotaAlert` (`:593`), and its own severity 1 `gatewayAvailabilityAlert` (`:674`, severity at -`:680`) over the same kind of three-location `/health` web test (`:641`). All of them can be added, +(`scheduledQueryAlertSpecs` at `MMCA.ADC/infra/main.bicep:539`, keys at `:541`, `:547`, `:553`, materialized +at `:560`), a severity 2 `logIngestionCapAlert` that fires when the workspace hits its daily ingestion cap, +evaluated every 15 minutes over a one-hour window (`:612`, severity at `:619`, cadence at `:622-623`), and +a severity 1 gateway-availability alert (`:691`, severity at `:697`) over a three-location web test against +`/health` (`:658`, locations at `:674-678`, the URL at `:680`). Store has six, each its own resource: +`outboxDeadLetterAlert` (`MMCA.Store/infra/main.bicep:419`, severity 2 at `:426`), +`revisionActivationAlert` (`:469`), `authFailureSpikeAlert` (`:537`), `forbiddenBurstAlert` (`:577`), +`logIngestionQuotaAlert` (`:623`), and its own severity 1 `gatewayAvailabilityAlert` (`:704`, severity at +`:710`) over the same kind of three-location `/health` web test (`:671`). All of them can be added, renamed, or re-tiered with no runbook consequence. And MMCA.Helpdesk has no `infra/` template at all, so it has neither the alerts nor anything for a pairing gate to check. @@ -401,29 +450,36 @@ has neither the alerts nor anything for a pairing gate to check. - **The literal names can drift.** The meter, activity-source, and poll-span names are duplicated as string literals across the Aspire package (`OutboxPollFilterProcessor.cs:26-29` and the ten `AddMeter` literals - at `Extensions.cs:598-606` and `:613`) and the defining assemblies (`CqrsMetrics.cs`, `OutboxMetrics.cs`, - `InternalCommandMetrics.cs`, `IdempotencyMetrics.cs`, `SchedulerMetrics.cs`, `BrokerMetrics.cs`, - `OutputCacheMetrics.cs`, `BestEffort.cs` and `OutboxProcessor.cs`), plus one name, `Polly`, that no - assembly here owns at all. Every new meter family widens that surface, and each family lands with the same - duplicated-literal note in its own doc comment. A rename on one side silently stops the - matching export or subscription until the literal is updated. The decoupled package graph is worth it; - the sync discipline is real. + at `Extensions.Telemetry.cs:307-315` and `:322`) and the defining assemblies (`CqrsMetrics.cs`, + `OutboxMetrics.cs`, `InternalCommandMetrics.cs`, `IdempotencyMetrics.cs`, `SchedulerMetrics.cs`, + `BrokerMetrics.cs`, `OutputCacheMetrics.cs`, `BestEffort.cs` and `OutboxProcessor.cs`), plus one name, + `Polly`, that no assembly here owns at all. Every new meter family widens that surface, and each family + lands with the same duplicated-literal note in its own doc comment. A rename on one side silently stops + the matching export or subscription until the literal is updated. The decoupled package graph is worth + it; the sync discipline is real. - **Sampling trades trace completeness for cost.** A sampled-out trace is gone, so deep debugging of one specific request can miss it. Metrics and logs are unaffected (sampling is trace-only), so RED rates and error counts stay whole even at a low ratio. Size the ratio to your debugging horizon, not to zero. - **Poll-span and probe-span filtering hide steady-state activity by design.** "Is the poller alive and - looping" and "are the probes passing" are not questions traces answer once both filters are on. Those - signals live in metrics on purpose, and the metrics that answer them exist: `outbox.processed.count` - (`OutboxMetrics.cs:47`), the dispatch-lag histogram (`:57`), the pending-depth gauge (`:75`), the - oldest-pending-age gauge (`:98`) and the dead-letter counter (`:41-44`) on one side, and the untouched - `http.server.request.duration` and Kestrel instruments on the other (`Extensions.cs:197-198`). If you rely - on poll or probe spans for a liveness check, chart those instead. + looping" and "are the probes passing" are not questions traces answer once both filters are on. The + poller's signals live in metrics on purpose: `outbox.processed.count` (`OutboxMetrics.cs:47`), the + dispatch-lag histogram (`:57`), the pending-depth gauge (`:75`), the oldest-pending-age gauge (`:98`) and + the dead-letter counter (`:41-44`). Probe traffic is a sharper case. The probe filter itself leaves + metrics alone, so `http.server.request.duration` and the Kestrel instruments keep it visible + (`Extensions.Telemetry.cs:98-99`), but only while `Telemetry:DisableAspNetCoreMetrics` is off, and both + production templates turn it on (`MMCA.ADC/infra/main.bicep:298-299`, + `MMCA.Store/infra/main.bicep:253-254`), so in production probe traffic appears on neither the trace nor + the metric dashboards. If you rely on poll or probe spans for a liveness check, chart the outbox metrics + instead, and decide deliberately what answers the probe question. - **Exporters are opt-in per host.** A host that sets neither `OTEL_EXPORTER_OTLP_ENDPOINT` nor - `APPLICATIONINSIGHTS_CONNECTION_STRING` emits to nothing. And four of the five cost knobs fail toward - keeping data (higher cost), not toward silence, so a misconfigured ratio is a possible cost surprise, - never a silent data gap. The exception is deliberate and documented: the probe-telemetry filter defaults - to on, because probe chatter is ingestion nobody wants billed (`Extensions.cs:515-525`). That is the - intended bias, but it is a bias worth naming. + `APPLICATIONINSIGHTS_CONNECTION_STRING` emits to nothing. And four of the six cost knobs (the three + `Disable*` metric knobs and the sample ratio) fail toward keeping data (higher cost), not toward + silence, so a misconfigured value is a possible cost surprise, never a silent data gap. The two + exceptions are deliberate and documented, and both fail toward a smaller bill: the Polly duration + histograms stay off unless a host opts in, so a typo never adds a high-volume stream + (`Extensions.Telemetry.cs:211-216`), and the probe-telemetry filter defaults to on, because probe chatter + is ingestion nobody wants billed (`Extensions.Telemetry.cs:224-234`). That is the intended bias, but it + is a bias worth naming. ## Apply this even without MMCA @@ -435,9 +491,11 @@ The pattern ports to any OpenTelemetry stack, with or without Aspire: ride the free instrumentation. Add your own meters and activity sources for the paths that carry your real work (a use-case pipeline, a background drain), and emit RED from a layer you already have (a logging decorator) rather than sprinkling it through every handler. -3. **Make expensive fidelity a knob, not a rewrite.** Gate the highest-volume metric families and - head-based trace sampling behind configuration, and make every knob fail toward keeping data: drop a - family only on an explicit boolean, ignore an out-of-range sample ratio, and treat a typo as sample-all. +3. **Make expensive fidelity a knob, not a rewrite, and pick each knob's failure direction on purpose.** + Gate the highest-volume metric families and head-based trace sampling behind configuration. A knob that + removes a family should drop it only on an explicit boolean, a knob that adds a redundant stream should + stay off unless explicitly enabled, and an out-of-range sample ratio should mean sample-all, so a typo + can neither blind you nor silently grow the bill. 4. **Check that a metrics toggle is actually authoritative.** If a vendor distro adds a meter behind your back, skipping your own `Add` call changes nothing; a drop `View` on the meter applies to the whole provider and does. @@ -450,8 +508,9 @@ The pattern ports to any OpenTelemetry stack, with or without Aspire: The takeaway: **observability is a hosting-layer default, not a per-app afterthought. Wire the useful signal once for every host, instrument the paths auto-instrumentation cannot see, and make the expensive fidelity a -knob that fails toward data, because the two ways this goes wrong in production are a telemetry bill you did -not expect and a trace that cannot answer the question you actually have.** +knob whose typo can never blind you or silently grow the bill, because the two ways this goes wrong in +production are a telemetry bill you did not expect and a trace that cannot answer the question you actually +have.** --- @@ -463,9 +522,10 @@ instruments, the `MMCA.Common.Idempotency` counters, the `MMCA.Common.Scheduler` run, duration and lag instruments, and the `MMCA.Common.Broker`, `MMCA.Common.OutputCache`, `MMCA.Common.BestEffort` and `MMCA.Common.AI` streams) plus Polly's resilience meter on -every host, how five -cost knobs (`Telemetry:DisableHttpClientMetrics`, `Telemetry:DisableRuntimeMetrics`, -`Telemetry:EnablePollyDurationMetrics`, `Telemetry:TracesSampleRatio` and `Telemetry:FilterProbeTelemetry`) +every host, how six +cost knobs (`Telemetry:DisableAspNetCoreMetrics`, `Telemetry:DisableHttpClientMetrics`, +`Telemetry:DisableRuntimeMetrics`, `Telemetry:EnablePollyDurationMetrics`, `Telemetry:TracesSampleRatio` +and `Telemetry:FilterProbeTelemetry`) trim spend without going dark, why a drop `View` is what makes a metrics toggle authoritative over the Azure Monitor distro, how `OutboxPollFilterProcessor` drops idle poll spans from two drains before export while real work survives, how the exporter (OTLP or Azure Monitor, or @@ -487,130 +547,86 @@ the deep-dive on undoing a cross-boundary workflow when there is no two-phase co *Tags: .NET, C Sharp, OpenTelemetry, Observability, Distributed Systems* -*Notes: verified type/behavior names with path:line (re-read this run). The code block is condensed from -`MMCA.Common/Source/Hosting/MMCA.Common.Aspire/Extensions.cs:170-243` and `:534-632` (comments trimmed, -control flow and API calls faithful, not byte-for-byte); it was re-cut this run because the metrics half -moved out of the `WithMetrics` lambda into a private `ConfigureMetrics` method, the meter chain grew to ten -`AddMeter` calls, the two metrics knobs gained drop `View`s, and tracing gained a second source pair, a -probe-filter branch and a second processor.* -- *`ConfigureOpenTelemetry` (`MMCA.Common/Source/Hosting/MMCA.Common.Aspire/Extensions.cs:170`, ending `:243`), called from - `AddServiceDefaults` (`Extensions.cs:87`, call at `:89`). Logging `IncludeFormattedMessage`/`IncludeScopes` (`:172-176`).* -- *Metrics: `ConfigureMetrics` (`Extensions.cs:534`) invoked from `.WithMetrics(...)` (`:179`); - `AddAspNetCoreInstrumentation()` unconditional (`:536`); `Telemetry:DisableHttpClientMetrics` branch (`:545`) with the - `System.Net.Http` + `System.Net.NameResolution` drop `View` (`:557-561`) and the comment explaining why skipping the - `Add` is not enough (`:547-556`), else `AddHttpClientInstrumentation()` (`:565`); `Telemetry:DisableRuntimeMetrics` - branch (`:572`) with the `System.Runtime` drop `View` (`:577-580`), else `AddRuntimeInstrumentation()` (`:584`); - nine MMCA.Common meters chained at `:598-606` (`MMCA.Common.Outbox`, `.Cqrs`, `.Idempotency`, `.Scheduler`, `.Broker`, - `.OutputCache`, `.BestEffort`, `.InternalCommands`, and `AiTelemetryName` = `"MMCA.Common.AI"` declared at `:62`), the - enumerating comment at `:587-597`; Polly's meter `AddMeter(PollyMeterName)` (`:613`, constant `:49`, rationale `:608-612`) - with its two duration histograms dropped by a `View` unless `Telemetry:EnablePollyDurationMetrics` is set - (key `:43`, `IsInstrumentationEnabled` `:512`, `View` `:623-631`, the never-dropped events counter noted at `:620-622`). - The meter count, the bullet list, the code block, the literal-drift trade-off and the "what we covered" paragraph were - rewritten this run around ten `AddMeter` calls (nine MMCA.Common plus Polly), up from the seven this article carried.* -- *Tracing: four sources at `Extensions.cs:182-185` (`ApplicationName`, `"MMCA.Common.Outbox"`, `"MMCA.Common.InternalCommands"`, - `AiTelemetryName`); `IsProbeTelemetryFilterEnabled` (`:199`, helper `:524`) selects filtered - `AddAspNetCoreInstrumentation`/`AddHttpClientInstrumentation` with `ProbeTelemetryFilter` predicates (`:205-208`) or the - plain pair (`:212-213`); `.AddProcessor(new Telemetry.OutboxPollFilterProcessor())` (`:221`) and, when the knob is on, - `ProbeTelemetryFilterProcessor` (`:228`), both ahead of `builder.AddOpenTelemetryExporters()` (`:240`), with the - registration-order reasoning in the comments at `:216-220` and `:225-227`; - `SetSampler(new ParentBasedSampler(new TraceIdRatioBasedSampler(traceSampleRatio)))` (`:237`), guarded at `:236`. - Metrics are deliberately untouched by the probe filter (`:197-198`).* -- *Cost knobs, five: `Telemetry:FilterProbeTelemetry` (key `:37`, `IsProbeTelemetryFilterEnabled` `:524`, the only one that - defaults to true), `Telemetry:EnablePollyDurationMetrics` (key `:43`, opt-in, `IsInstrumentationEnabled` `:512`), - `Telemetry:DisableHttpClientMetrics` and `Telemetry:DisableRuntimeMetrics` (both read by `IsInstrumentationDisabled` `:499`, - which drops only on a parsed boolean `true`), and `Telemetry:TracesSampleRatio` (`TryGetTraceSampleRatio` `:476`, default - ratio 1.0 `:478`, key read `:479`, returns false unless the value is in the open interval (0,1) `:480-485`). The - probe knob and the Polly knob are new to this article.* -- *Exporters: `AddOpenTelemetryExporters` (`Extensions.cs:348`) enables OTLP when `OTEL_EXPORTER_OTLP_ENDPOINT` set (`:350-356`) - and Azure Monitor via `UseAzureMonitor()` when `APPLICATIONINSIGHTS_CONNECTION_STRING` set (`:358-364`); both can be active (`:346`).* -- *`OutboxPollFilterProcessor : BaseProcessor` (`MMCA.Common/Source/Hosting/MMCA.Common.Aspire/Telemetry/OutboxPollFilterProcessor.cs:17`); - four literals at `:26-29` (`OutboxActivitySourceName` / `PollActivityName` / `InternalCommandsActivitySourceName` / - `InternalCommandsPollActivityName`); `OnEnd` null-safe (`:32-38`), walks parent chain (`:42`), tests `IsSuppressedPoll` - (`:44`, method `:60-64`, which matches either poll family on operation name AND source), clears - `ActivityTraceFlags.Recorded` (`:49`). The doc comment names per-message `OutboxProcess` and per-command - `InternalCommandExecute` spans as the protected work (`:10-15`) and the sync comment names the four Infrastructure-side - symbols plus the package's one `ProjectReference` on `MMCA.Common.Shared` (`:19-25`). Corrected this run: the processor - suppresses two poll families, not one.* -- *`CqrsMetrics` (`MMCA.Common/Source/Core/MMCA.Common.Application/UseCases/Decorators/CqrsMetrics.cs:21`); `MeterName = "MMCA.Common.Cqrs"` (`:24`), - `Meter` (`:26`); `cqrs.command.duration` histogram in `ms` (`:29-32`); `cqrs.query.duration` histogram in `ms` (`:35-38`); - `cqrs.query.cache.hit` (`:41-44`) / `cqrs.query.cache.miss` (`:47-50`) counters; `cqrs.authorization.denied.count` (`:53-56`) and - `cqrs.timeout.count` (`:59-62`), both tagged `request_type`.* -- *`OutboxMetrics` (`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/Outbox/Processing/OutboxMetrics.cs:16`), which with - `OutboxProcessor` moved under `Persistence/Outbox/Processing/` this run (`OutboxSettings.cs` under `Persistence/Outbox/Administration/`; - ADR-041's 2026-09-03 amendment records the move): `MeterName = "MMCA.Common.Outbox"` (`:19`), `Meter` (`:21`), - `outbox.dead_letter.count` (`:41-44`), `outbox.processed.count` (`:47-50`), `outbox.dispatch.lag` histogram in seconds (`:57-60`), - `outbox.pending.depth` `ObservableGauge` (`:75-79`) with `SetPendingDepth` (`:108`), and a fifth instrument new to this article, - `outbox.oldest_pending.age` `ObservableGauge` tagged `data_source` (`:98-102`) with `SetOldestPendingAge` (`:115`), described - in source as the number an alert on a wedged outbox fires on (`:81-86`); sync comment (`:6-15`).* -- *`OutboxProcessor` (`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/Outbox/Processing/OutboxProcessor.cs`): - `PollActivityName = "OutboxPoll"` (`:75`); `OutboxActivitySource = new("MMCA.Common.Outbox")` (`:93`); dead-letter increments at - `:752-755` (reason `type_unresolvable`) and `:707-710` (reason `retries_exhausted`), both tagged `event_type`; - `OutboxMetrics.SetPendingDepth` (`:251`) fed by `CountPendingAsync` (`:361`, called at `:284`), whose own - `StartActivity(PollActivityName)` (`:373`) deliberately reuses the poll name so the same filter suppresses it; poll - `StartActivity(PollActivityName)` (`:426`); per-message span started in `StartOutboxActivity` (`:808`) from a parent - `ActivityContext` rebuilt from the stored trace and span ids, passed to `StartActivity` (`:820`). Behavior unchanged; - every anchor moved this run.* -- *`InternalCommandMetrics` (`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/InternalCommands/Processing/InternalCommandMetrics.cs`): - `MeterName = "MMCA.Common.InternalCommands"` (`:20`), `Meter` (`:22`), processed (`:38`), failed (`:48`) and dead-letter (`:57`) - counters, duration (`:66`) and lag (`:75`) histograms, pending-depth (`:92`) and oldest-due-age (`:104`) gauges; - `InternalCommandProcessor.PollActivityName = "InternalCommandPoll"` (`:63`), its `ActivitySource` (`:83`) and the two poll - `StartActivity` sites (`:318`, `:351`). New to this article; the queue itself is Article 51's subject.* -- *`SchedulerMetrics` (`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Scheduling/SchedulerMetrics.cs:16`): - `MeterName = "MMCA.Common.Scheduler"` (`:19`), `Meter` (`:21`), `scheduler.job.runs` counter tagged by job and outcome (`:28-31`), - `scheduler.job.duration` histogram in seconds (`:39-42`), `scheduler.job.lag` histogram in seconds (`:50-53`). The scheduler - itself is ADR-074 (`Website/docs-src/adr/074-recurring-job-scheduler.md`), which this article only references in passing.* -- *The opt-in meter families, each carrying the same duplicated-literal note in its own doc comment: - `BrokerMetrics` (`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Messaging/BrokerMetrics.cs:18`), `MeterName = "MMCA.Common.Broker"` (`:21`), - `Meter` (`:23`), `broker.fault.count` tagged `event_type` (`:30-33`) and `broker.circuit.open.count` (`:42-45`), the meter introduced by ADR-087 - (`Website/docs-src/adr/087-broker-poison-message-handling.md`); `OutputCacheMetrics` - (`MMCA.Common/Source/Presentation/MMCA.Common.API/Caching/OutputCacheMetrics.cs:16`), `MeterName = "MMCA.Common.OutputCache"` (`:19`), - `cache.eviction.failed` tagged `cache_tag` (`:29-32`) with `RecordEvictionFailure` (`:36-37`); `BestEffortMetrics` - (`MMCA.Common/Source/Core/MMCA.Common.Application/Services/BestEffort.cs:99`), `MeterName = "MMCA.Common.BestEffort"` (`:102`), - `besteffort.dispatch.failed` tagged `operation` (`:107-110`) with `RecordFailure` (`:114-115`), the reason it is a separate meter - rather than a counter on `MMCA.Common.Cqrs` recorded in its own doc comment (`:92-97`); and the optional AI package's single - telemetry name (`Extensions.cs:62`, doc comment `:51-61`).* -- *Deployment interval: `Outbox__PollingIntervalSeconds` is set to `300` on every container app, four in `MMCA.ADC/infra/main.bicep` - (`:1591`, `:1812`, `:1950`, `:2102`) and three in `MMCA.Store/infra/main.bicep` (`:1461`, `:1635`, `:1762`), against the - `PollingIntervalSeconds` default of 2 in - `MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/Outbox/Administration/OutboxSettings.cs:31`. Value and default - unchanged this run; both templates and the settings file moved.* -- *`IdempotencyMetrics` (`MMCA.Common/Source/Presentation/MMCA.Common.API/Idempotency/IdempotencyMetrics.cs:16`); - `MeterName = "MMCA.Common.Idempotency"` (`:19`); `idempotency.replayed` (`:36-39`), `idempotency.conflict` tagged by `kind` (`:41-44`), - `idempotency.degraded` (`:46-49`).* -- *SLO alerting section: ADR-062 (`Website/docs-src/adr/062-slo-alerting-as-code.md:4`, accepted 2026-08-01). `sloAlertSpecs` - (`MMCA.ADC/infra/main.bicep:330`, `MMCA.Store/infra/main.bicep:282`), four specs this run: `failed-requests` severity 2 (`:332-338`), - `server-response-time` severity 3 (`:341-347`), `dependency-failures` severity 2 (`:350-356`) and the new - `resilience-circuit-open` severity 2, threshold 0, over `resilience.polly.strategy.events` (`:362-368`, rationale `:358-360`; - Store's at `:314-320`); the KQL exclusions (`:334`, `:343`, `:352`) and the summary of what stays in scope (`:328-329`); the - three false-page incidents in the template's own comment (`:318-327`: eight 401s plus two 499s plus one 503 at `:319-321`, five hub - connections averaging 11.3s against 5539ms vs a 3000ms threshold at `:322-324`, and twelve robots/sitemap 404s from one - Azure-hosted crawler at `:325-327`); `sloAlerts` loop (`:372`), `-v2` name (`:376`) and the identity note that keeps it stable - (`:374-375`); `evaluationFrequency` PT15M (`:390`) over `windowSize` PT15M (`:391`) with the 2026-09-02 FinOps rationale and its - $1.47 vs about $0.50 per rule per month figures (`:385-389`; Store `:345-346`); routed to the action group (`:414`); required - `alertEmailAddress` (`:124`, Store `:91`), unconditional action group (`:297`, `emailReceivers` `:303-307`, - `emailAddress: alertEmailAddress` at `:306`); `sloWorkbook` (`:701`) embedding its JSON via `loadTextContent` at compile time - (`:710`). Ungated extras, ADC four: `scheduledQueryAlertSpecs` (`:442`) carrying `outbox-dead-letter` (`:444`), - `sql-dependency-failures` (`:450`) and `revision-activation-failed` (`:456`), materialized at `:463`, plus - `gatewayAvailabilityAlert` (`:662`, `severity: 1` at `:668`) over `gatewayHealthWebTest` (`:629`, three `Locations` `:645-649`, - `RequestUrl` ending `/health` at `:651`). Store six, each a separate resource: `outboxDeadLetterAlert` (`:389`, `severity: 2` - at `:396`), `revisionActivationAlert` (`:439`), `authFailureSpikeAlert` (`:507`), `forbiddenBurstAlert` (`:547`), - `logIngestionQuotaAlert` (`:593`) and `gatewayAvailabilityAlert` (`:674`, `severity: 1` at `:680`) over - `gatewayHealthWebTest` (`:641`). Corrected this run: the superseded metric-alert declarations are gone from both templates - (ADR-062's 2026-08-31 revision, `:12-15`), so the subsection that described them as disabled-in-place is rewritten around the - `-v2` names, which is what actually keeps the supersede safe; the SLO count moved from three to four; the evaluation frequency - moved to PT15M; a third false-page incident is on record; and the ungated-extras counts moved to four and six. MMCA.Helpdesk - has no `infra/` directory. The alert-to-runbook build gate is deliberately left to Article 34.* -- *ADR-041 (`Website/docs-src/adr/041-observability-and-telemetry.md`), Accepted 2026-07-10, with amendments through - 2026-09-11 and a Revision dated 2026-09-19 that records `MMCA.Common.AI` as subscribed in the meter chain and added as a trace - source, "so the block carries ten subscribed meters: nine `MMCA.Common.*` plus `Polly`" (`:49-52`); the 2026-09-03 amendment - records the probe-telemetry knob, the metric-drop views and the move of the outbox processor and its metrics under - `Persistence/Outbox/Processing/` (`:28-33`). Rubric §13 Observability & Operability starts at - `Website/docs-src/governance/ArchitectureEvaluationCriteria.md:403`, criteria including poll-span noise control at `:408-413`, - default weight 2 at `:421`. Group G16: the `OutboxPollFilterProcessor` walkthrough is at - `Website/docs-src/onboarding/group-16-aspire-orchestration.md:1233`. The "no per-app ServiceDefaults copy" claim is cited to call - sites (`MMCA.ADC/Source/Services/MMCA.ADC.Conference.Service/Program.cs:103`, - `MMCA.Store/Source/Services/MMCA.Store.Catalog.Service/Program.cs:72`). - Framework v1.205.0 (`MMCA.Common/FACTS.md:14`) / 19 packages (`FACTS.md:19`) / 125 ADRs, range 001-125 - (`Website/docs-src/adr/README.md:6`) this run.* +*Notes: 2026-10-02 refresh against v1.221.0; every anchor below was re-read in this run unless marked +"audit-confirmed" (verified by the 2026-10-02 audit pass and not edited here). The telemetry code lives in +the partial `MMCA.Common/Source/Hosting/MMCA.Common.Aspire/Extensions.Telemetry.cs`; `Extensions.cs` keeps +only `AddServiceDefaults` and warmup, so every former `Extensions.cs:NNN` telemetry anchor was rebased onto +the new file (ADR-041's Revised 2026-10-01 entry records the move). The code block is condensed from +`Extensions.Telemetry.cs:71-144` and `:243-368` (comments trimmed, control flow and API calls faithful, not +byte-for-byte); this run it gained the `ConfigureAspNetCoreMetrics` branch. Header: rubric cell trimmed to section 13 +(section 31, FinOps, is a recorded scope-out of the series; the cost content in the body stays, grounded in source).* +- *Entry: `AddServiceDefaults` (`MMCA.Common/Source/Hosting/MMCA.Common.Aspire/Extensions.cs:30`, `ConfigureOpenTelemetry()` call + `:32`). Call sites `MMCA.ADC/Source/Services/MMCA.ADC.Conference.Service/Program.cs:105` (after + `ConfigureEndpointsWithHealthProbe` `:89` and `AddCommonSerilog` `:104`) and + `MMCA.Store/Source/Services/MMCA.Store.Catalog.Service/Program.cs:73` (after `AddCommonSerilog` `:72`; the must-run-before + comment `:68-70`). Corrected this run: the body said "first"; host-level setup precedes it. The audit counted 6 ADC and 5 Store + `Program.cs` files calling `AddServiceDefaults()` and no `*ServiceDefaults*.csproj` in either repo (audit-confirmed).* +- *`ConfigureOpenTelemetry` (`Extensions.Telemetry.cs:71-144`): logging `:73-77`; `.WithMetrics` lambda `:80`; four trace sources + `:83-86`; probe-knob read `:100`; filtered instrumentation pair `:106-109`, plain pair `:113-114`; `OutboxPollFilterProcessor` + `:122` (order comment `:117-121`); `ProbeTelemetryFilterProcessor` `:129` (comment `:126-128`); sampler guard `:137`, + `SetSampler` `:138`; `AddOpenTelemetryExporters()` call `:141`. Metrics untouched by the probe filter: `:98-99`.* +- *Metrics: `ConfigureMetrics` `:243`; `ConfigureAspNetCoreMetrics` called `:245`, declared `:352`, knob read `:354`, prefix drop + `View` `:359-362`, `AddAspNetCoreInstrumentation` `:366`, rationale (73% of both production workspaces' ingestion over + 2026-09-22..28) `:343-349`; HttpClient knob `:254`, why-a-View comment `:256-265`, `View` `:266-270`, `AddHttpClientInstrumentation` + `:274`; runtime knob `:281`, `View` `:286-289`, `AddRuntimeInstrumentation` `:293`; meter comment `:296-306`, nine-meter chain + `:307-315` (AI at `:315`); Polly rationale `:317-321`, `AddMeter(PollyMeterName)` `:322`, duration-histogram reasoning `:324-328`, + never-dropped counter `:329-331`, Polly `View` `:332-340`. Constants: `FilterProbeTelemetryConfigKey` `:19`, + `EnablePollyDurationMetricsConfigKey` `:25`, `PollyMeterName` `:31`, `AiTelemetryName` `:44` (doc `:33-43`).* +- *Cost knobs, six (was five): `Telemetry:DisableAspNetCoreMetrics` (new to this article), `Telemetry:DisableHttpClientMetrics`, + `Telemetry:DisableRuntimeMetrics` (all via `IsInstrumentationDisabled` `:208`, the three keys named at `:201-203`), + `Telemetry:EnablePollyDurationMetrics` (`IsInstrumentationEnabled` `:221`, opt-in doc `:211-216`), `Telemetry:TracesSampleRatio` + (`TryGetTraceSampleRatio` `:185`, ratio 1.0 `:187`, key read `:188`, fallback `:189-194`), `Telemetry:FilterProbeTelemetry` + (`IsProbeTelemetryFilterEnabled` `:233`, default-true doc `:224-232`). Corrected this run: four of six fail toward keeping data; + the Polly knob and the probe filter both default to the smaller bill, so the trade-off bullet, Apply step 3 and the takeaway + were narrowed. Deployed values: `Telemetry__TracesSampleRatio` 0.25 (`MMCA.ADC/infra/main.bicep:253-254`, + `MMCA.Store/infra/main.bicep:207-208`); `Telemetry__DisableAspNetCoreMetrics` true (ADC `:298-299`, Store `:253-254`), which is + why the probe trade-off bullet says probe traffic is on no production dashboard (ADR-041 Revision 2026-10-01 says the same).* +- *Exporters: `AddOpenTelemetryExporters` `Extensions.Telemetry.cs:159`, OTLP `:161-167`, Azure Monitor `:169-175`, both-active + doc `:157`.* +- *`OutboxPollFilterProcessor` (`MMCA.Common/Source/Hosting/MMCA.Common.Aspire/Telemetry/OutboxPollFilterProcessor.cs:17`), `OnEnd` + `:32`, walk `:42`, `IsSuppressedPoll` `:44`/`:60-64`, `Recorded` cleared `:49`, literals `:26-29`, doc `:10-15` (audit-confirmed); + sync comment `:19-25` re-read, pointing at `Extensions.Telemetry.cs` (`:25`); single `ProjectReference` on `MMCA.Common.Shared` + (`MMCA.Common/Source/Hosting/MMCA.Common.Aspire/MMCA.Common.Aspire.csproj:81`).* +- *`OutboxProcessor` (`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/Outbox/Processing/OutboxProcessor.cs`), all + anchors moved: `PollActivityName` `:70`; `OutboxActivitySource` `:88`; `SetPendingDepth` `:165`; `CountPendingAsync` `:265` + (called `:190`, saturated-batch guard `:272-275`, its `StartActivity` `:277`); poll `StartActivity` `:330` in + `FetchCandidatesAsync` `:324`; `retries_exhausted` increment `:617-620`; `type_unresolvable` increment `:667-670`, first-attempt + transient retry `:656-663` (new to this article); `StartOutboxActivity` `:708`, `StartActivity` `:720`. + `InternalCommandProcessor` (`.../Persistence/InternalCommands/Processing/InternalCommandProcessor.cs`): `PollActivityName` `:57`, + `ActivitySource` `:68`, poll `StartActivity` `:235` and `:268`, `InternalCommandExecute` under an explicit parent `:662`.* +- *Meter classes (audit-confirmed, unchanged): `CqrsMetrics.cs` `:24`/`:29-32`/`:35-38`/`:41-50`/`:53-56`/`:59-62`; + `OutboxMetrics.cs` `:19`/`:21`/`:41-44`/`:47-50`/`:57-60`/`:75-79`/`:81-86`/`:98-102`/`:108`/`:115`, sync note `:6-15`; + `InternalCommandMetrics.cs` `:20`/`:22`/`:38`/`:48`/`:57`/`:66`/`:75`/`:92`/`:104`; `IdempotencyMetrics.cs` `:16`/`:19`/`:36-39`/ + `:41-44`/`:46-49`; `SchedulerMetrics.cs` `:16`/`:19`/`:21`/`:28-31`/`:39-42`/`:50-53`; `BrokerMetrics.cs` `:18`/`:21`/`:23`/`:30-33`/ + `:42-45`; `OutputCacheMetrics.cs` `:16`/`:19`/`:29-32`/`:36-37`; `BestEffort.cs` `:92-97`/`:99`/`:102`/`:107-110`/`:114-115`.* +- *Deployment interval: `Outbox__PollingIntervalSeconds` 300 at `MMCA.ADC/infra/main.bicep:1700`, `:1923`, `:2063`, `:2217` and + `MMCA.Store/infra/main.bicep:1493`, `:1669`, `:1801`; default 2 at + `MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/Outbox/Administration/OutboxSettings.cs:31` (audit-confirmed).* +- *SLO alerting (`MMCA.ADC/infra/main.bicep`): incidents comment `:350-359`, scope summary `:360-361`, `sloAlertSpecs` `:362` with + FIVE entries (was four): `failed-requests` `:363-371`, `server-response-time` `:372-380` (query `:375` adds `ResultCode != "101"`, + `isnotempty(Url)` and `n >= 5`, new to this article), `dependency-failures` `:381-389`, `resilience-circuit-open` `:393-401` + (rationale `:390-392`), `ai-scoring-token-ceiling` `:439-451` (severity 3, `P2D`/`PT12H`, `enabled: hasAiApiKey`); KQL `:366`/ + `:375`/`:384`; `sloAlerts` loop `:454-455`, identity note `:456-457`, `-v2` name `:458`; per-entry cadence overrides with PT15M + defaults (`evaluationFrequency` `:485`, `windowSize` `:487`), cost rationale `:474-478`, override rationale `:480-483`; + `actionGroups` `:511`; `actionGroup` `:329`, `emailReceivers` `:335-341`, `emailAddress` `:338`, `alertEmailAddress` `:124`; + gateway metric alert `actions` block `:714-718`; `sloWorkbook` `:730`, `loadTextContent` `:739`. Store + (`MMCA.Store/infra/main.bicep`): `sloAlertSpecs` `:312` (four), `failed-requests` query without the crawler exclusion `:316`, + response-time query `:325`, `resilience-circuit-open` `:343-351`, fixed PT15M `:375-376` with rationale `:368-374`, + `alertEmailAddress` `:91`.* +- *Ungated extras: ADC FIVE (was four): `scheduledQueryAlertSpecs` `:539` (keys `:541`/`:547`/`:553`, materialized `:560`), + `logIngestionCapAlert` `:612` (severity 2 `:619`, PT15M over PT1H `:622-623`, new to this article), `gatewayAvailabilityAlert` + `:691` (severity 1 `:697`) over `gatewayHealthWebTest` `:658` (`Locations` `:674-678`, `RequestUrl` `/health` `:680`). Store six + (count unchanged, anchors moved): `outboxDeadLetterAlert` `:419` (severity 2 `:426`), `revisionActivationAlert` `:469`, + `authFailureSpikeAlert` `:537`, `forbiddenBurstAlert` `:577`, `logIngestionQuotaAlert` `:623`, `gatewayAvailabilityAlert` `:704` + (severity 1 `:710`), `gatewayHealthWebTest` `:671`. MMCA.Helpdesk has no `infra/` directory. The alert-to-runbook build gate is + left to Article 34.* +- *Records: ADR-062 (`Website/docs-src/adr/062-slo-alerting-as-code.md:4`, accepted 2026-08-01; 2026-08-31 revision `:12-15`). + ADR-041 (`Website/docs-src/adr/041-observability-and-telemetry.md`): 2026-09-03 amendment `:28-33` (audit-confirmed), Revised 2026-09-19 `:49-52`, + Revised 2026-09-25 `:53-56`, Revised 2026-10-01 `:57-58` with its body under "Revision (2026-10-01)" (the + `DisableAspNetCoreMetrics` knob, the move to `Extensions.Telemetry.cs`, probe traffic off production dashboards). Rubric section 13 + at `Website/docs-src/governance/ArchitectureEvaluationCriteria.md:403`, criteria `:408-413`, weight 2 `:421` (audit-confirmed). + Group G16: `### OutboxPollFilterProcessor` at `Website/docs-src/onboarding/group-16-aspire-orchestration.md:1236`. + Framework v1.221.0 (`MMCA.Common/FACTS.md:14`) / 22 packages (`FACTS.md:19`) / 131 ADRs, range 001-131 + (`Website/docs-src/adr/README.md:6`) this run; the article body states none of these numbers.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/open-sourced-enterprise-dotnet-34-categories.md b/docs-src/articles/open-sourced-enterprise-dotnet-34-categories.md index f1760a0d..57bf110b 100644 --- a/docs-src/articles/open-sourced-enterprise-dotnet-34-categories.md +++ b/docs-src/articles/open-sourced-enterprise-dotnet-34-categories.md @@ -1,9 +1,9 @@ # I open-sourced the enterprise .NET plumbing I never want to rewrite, and graded it against 34 categories > Series: MMCA.Common · Article #1 (cornerstone) · Pillar P1/P4 · Rubric: all -> Status: grounded in `MMCA.Common/README.md`, `MMCA.Common/CLAUDE.md`, +> Status: grounded in `MMCA.Common/README.md`, `MMCA.Common/AGENTS.md`, `MMCA.Common/FACTS.md`, > `Website/docs-src/governance/common-ArchitectureScorecard.md`, `Website/docs-src/onboarding/00-index.md`. No em -> dashes. Current facts (19 packages, 125 ADRs, two-axis index M 97.0% / I 86.0%). +> dashes. Current facts (22 packages, 131 ADRs, two-axis index M 96.6% / I 86.0%). **Subtitle:** A .NET 10 framework for DDD, Clean Architecture, and CQRS, built as a modular monolith that extracts to microservices without a rewrite, and scored in the open against a 34-category rubric. @@ -26,7 +26,7 @@ article is the front door to a series that teaches it one pattern at a time. ## What it is -MMCA.Common is a set of **nineteen NuGet packages** that give you a DDD + Clean Architecture + CQRS +MMCA.Common is a set of **twenty-two NuGet packages** that give you a DDD + Clean Architecture + CQRS foundation as a **modular monolith**, plus the extraction boundaries to pull a module out into its own microservice later without rewriting application code. @@ -46,15 +46,18 @@ Shared (Result pattern, errors, DTOs, value objects) A few packages sit off to the side of that stack rather than on top of it. `UI` and `Grpc` depend on `Shared` only: the Blazor `UI` stays WebAssembly-friendly, and `Grpc` is pure transport that must not -couple to Domain, Application, or Infrastructure. The rest of the UI family builds on `UI` rather than -the layer stack: `UI.Web` is the web-host UI package, and `UI.Maui` (the one MAUI-target package) -depends on `UI` plus `Shared` only (ADR-042). - -Two more packages sit outside the stack entirely. `Gateway` is the YARP edge that fronts the service -hosts once modules are extracted (ADR-008), and `AI` is a governed boundary for language-model calls, -isolated, versioned, evaluated, observed, and bounded in one package so a second AI feature inherits -the rules instead of copying them (ADR-120). The nineteenth package is `MMCA.Common` itself: a -metapackage that ships no assembly, one `PackageReference` in place of the six a standard application +couple to Domain, Application, or Infrastructure. `UI.Maui` (the one MAUI-target package) depends on +`UI` plus `Shared` only (ADR-042). `UI.Web` is the one UI package that sits above the stack instead: it +is the Blazor Web host layer, referencing `UI`, `API`, and `Aspire` directly, which is exactly what keeps +those server dependencies out of the WebAssembly-safe `UI`. + +More packages sit outside the stack entirely. `Gateway` is the YARP edge that fronts the service +hosts once modules are extracted (ADR-008). The `AI` family is a governed boundary for language-model +calls (ADR-120): `AI` isolates, versions, evaluates, observes, and bounds every call so a second AI +feature inherits the rules instead of copying them; `AI.Anthropic` and `AI.OpenAI` are provider adapters +that each register one provider factory, so the governed package never names a vendor; and `AI.Testing` +ships the replay harness that pins prompt contracts. The twenty-second package is `MMCA.Common` itself: +a metapackage that ships no assembly, one `PackageReference` in place of the six a standard application host always takes (ADR-101). Adding it to a solution you already have is one line, and each package transitively pulls the layers @@ -65,11 +68,11 @@ dotnet add package MMCA.Common.API ``` `API` brings `Infrastructure`, which brings `Application`, `Domain`, and `Shared`. The other packages -(`Grpc`, `UI`, `UI.Web`, `UI.Maui`, `Aspire`, `Aspire.Hosting`, `Gateway`, `AI`, and five `Testing.*` -packages) are opt-in for the surface you need. +(`Grpc`, `UI`, `UI.Web`, `UI.Maui`, `Aspire`, `Aspire.Hosting`, `Gateway`, the four `AI` packages, and +five `Testing.*` packages) are opt-in for the surface you need. Starting from nothing is a different command, because a package reference is not an application. A -solution on this framework is twelve projects and roughly 6,600 lines of plumbing before any business +solution on this framework is twelve projects and roughly 9,000 lines of C# and Razor before any business logic, so the framework ships a `dotnet new` pack that writes all of it: ```powershell @@ -96,11 +99,12 @@ The inward-pointing dependency rule (Domain must never reference EF Core or ASP. 2. **At runtime**, by NetArchTest fitness functions that assert the same rules against the compiled assemblies. -Those fitness functions do not live as copy-pasted test code in three repos. They live once, in a +Those fitness functions do not live as copy-pasted test code in each repo. They live once, in a shipped package, `MMCA.Common.Testing.Architecture`, which exposes a reusable rule library and abstract -test bases (**136 test methods across 53 base classes**). MMCA.Common's own build runs -267 of them; the two consumer apps subclass the same bases and supply their own architecture map, -so the rules are literally identical across all three codebases. +test bases (**141 test methods across 55 base classes**). MMCA.Common's own build executes 339 fitness +tests built on them. MMCA.ADC and MMCA.Store subclass the same bases and supply their own architecture +map, and so does MMCA.Helpdesk, the reference app the templates are staged from, so the rules are +literally identical in every codebase that runs them. This is the line I care about most: **if a rule matters, it should be a check, not a comment.** @@ -132,7 +136,7 @@ Here is the part that usually gets left out of "look at my framework" posts. I graded MMCA.Common against a 34-category architecture rubric (backend, front-end, and operational/governance categories), scoring each category on two axes: **Maturity** (how well-governed the process is) and **Implementation** (how much substance is actually executed). It sits at a -**maturity index of 97.0% and an implementation index of 86.0%** across all 34 categories +**maturity index of 96.6% and an implementation index of 86.0%** across all 34 categories (internationalization ships in the framework as en-US plus Spanish under ADR-027, which supersedes the single-locale ADR-011, so it scores on both axes like every other category; nothing is excluded as N/A). Then I committed the full evaluation to the repo, with every category's two scores, the evidence, @@ -140,20 +144,20 @@ and the honest gaps. The rubric itself is versioned. Version 2 (ADR-110) keeps all 34 categories and scores category 10 as **Messaging & Integration Architecture** (Maturity 4 / Implementation 9) and category 16 as **AI-Native -Application Architecture** (Maturity 3 / Implementation 6), which is where the governed language-model +Application Architecture** (Maturity 4 / Implementation 9), which is where the governed language-model boundary is graded. The pattern in the scores is the same line from earlier: **every category that earned top marks was backed by a fitness function or a compile-time guard. Every category capped lower either left the design to code review, or has its real proof living downstream in a consumer app.** Clean Architecture, -SOLID, microservices readiness, CQRS, and testability all sit at Maturity 4 / Implementation 9, and all -of them are enforced automatically. +microservices readiness, CQRS, and testability all sit at Maturity 4 / Implementation 9, and all of them +are enforced automatically. SOLID sits lower, at Maturity 3 / Implementation 8, for exactly that reason: +the principles are applied throughout, but only two of the five are enforced automatically. Implementation is the weaker axis on purpose. A framework ships mature, well-governed mechanisms whose -full execution often completes in the apps that consume it. Deployment, resilience recovery, and -data-migration gating all score higher on maturity than on implementation precisely because the -substance they reward (infrastructure-as-code, a drilled restore, a CI migration step) lives in -MMCA.ADC and MMCA.Store, not in a library. +full execution often completes in the apps that consume it. Deployment and resilience recovery both +stop at Implementation 8 precisely because the substance they reward (a real deploy, production +recovery targets proven against real cloud backups) lives in the consuming apps, not in a library. The headline gap the rubric named was **Compliance and Privacy**: soft-delete everywhere and no right-to-erasure path, which is the exact GDPR conflict the rubric names. I wrote that down rather than @@ -162,7 +166,7 @@ build. That is the whole point of scoring yourself in public: the gaps turn into ## It runs in production, on two real apps -MMCA.Common is not a toy. Two deployed apps consume the same nineteen packages: +MMCA.Common is not a toy. Two deployed apps are built on it: - **MMCA.ADC**, the Atlanta Developers Conference app, deployed to Azure and used to run a live event. - **MMCA.Store**, an e-commerce app with Catalog, Sales, and Identity modules and Stripe integration. @@ -203,50 +207,68 @@ why that extraction point is something you build now, not a migration you surviv *Tags: .NET, C Sharp, Software Architecture, Microservices, Open Source* -*Notes / honest gaps: every figure below was re-read from source on 2026-09-19. The two-axis scores are the -current indices in the canonical `Website/docs-src/governance/common-ArchitectureScorecard.md` (Maturity 97.0% = -318/328, `common-ArchitectureScorecard.md:120`; Implementation 86.0% = 705/820, -`common-ArchitectureScorecard.md:121`), from the thirty-sixth-wave full re-score (2026-09-19, framework v1.205.0), -in which no value moved on either axis. Implementation stays the weaker axis by design, by about 11.0 points -(`common-ArchitectureScorecard.md:123`). The denominators are rubric version 2's (ADR-110, -`common-ArchitectureScorecard.md:5`), which keeps all 34 categories and scores category 10 as Messaging & -Integration Architecture at Maturity 4 / Implementation 9 (`common-ArchitectureScorecard.md:90`) and category 16 -as AI-Native Application Architecture at Maturity 3 / Implementation 6 (`common-ArchitectureScorecard.md:96`); -those two names are the rubric's own headings -(`Website/docs-src/governance/ArchitectureEvaluationCriteria.md:329,469`). No category is excluded as N/A -(`common-ArchitectureScorecard.md:124`), and ADR-027 multi-locale i18n (en-US plus Spanish) supersedes the -single-locale ADR-011 (`Website/docs-src/adr/README.md:39,23`). The package count (19, `FACTS.md:19`) was read -from `FACTS.md`, the CI-gated source of truth; its list carries `MMCA.Common.AI` (`FACTS.md:22`), -`MMCA.Common.Gateway` (`FACTS.md:34`), five `Testing.*` packages (`FACTS.md:35-39`) and the `MMCA.Common` -metapackage (`FACTS.md:40`). Gateway is the YARP edge of ADR-008 (`Website/docs-src/adr/README.md:20`), AI is the -governed language-model boundary of ADR-120 (`Website/docs-src/adr/README.md:132`), and the metapackage that -ships no assembly in place of the Core 6 is ADR-101 (`Website/docs-src/adr/README.md:113`). `FACTS.md` delegates -the ADR count and range to the canonical index (125 accepted ADRs, 001-125, -`Website/docs-src/adr/README.md:6`); the framework version pinned in `FACTS.md:14` is v1.205.0 and `FACTS.md:4` -dates that generated snapshot 2026-09-17. Lockstep holds: both consumers pin 1.205.0 -(`MMCA.Store/Directory.Packages.props:8-14`, `MMCA.ADC/Directory.Packages.props:104-113`). The -136-test-methods-across-53-abstract-`*TestsBase`-classes figure, and the 267 of them MMCA.Common's own build -executes, are `FACTS.md:48` and `FACTS.md:51`. The UI family off to the side of the layer stack: `UI` and `Grpc` -depend on `Shared` only, `UI.Web` is the web-host UI package, and `UI.Maui` (the one MAUI-target package) depends -on `UI` plus `Shared` only (ADR-042, `Website/docs-src/adr/README.md:54`). The fast-test figure is the -scorecard's category 14 row (roughly 2,254 `[Fact]`/`[Theory]`, counts re-synced 2026-09-14, -`common-ArchitectureScorecard.md:94`), and the 2,000-test zero-discovery floor is the literal -`--minimum-expected-tests 2000` on the unit tier (`MMCA.Common/.github/workflows/ci.yml:183`); both keep moving, -so re-read before publishing. The scorecard's own Top-5-strengths block still quotes an older 1,880-across-262-files -count (`common-ArchitectureScorecard.md:133`), which is a scorecard-side follow-up to reconcile in the Website -repo rather than article drift, so this article cites the category 14 row instead. The twelve-projects and -roughly-6,600-lines figure is anchored on `Website/docs-src/guides/common-GETTING-STARTED.md:10` ("12 projects and -roughly 6,600 lines before a line of your own"). The Compliance and Privacy gap is real but answered: ADR-005 plus -an `IAnonymizable` erasure extension point and a PII fitness function, so the "scored, then fixed" framing is -deliberate. The five categories in the top-marks paragraph are category 1 SOLID -(`common-ArchitectureScorecard.md:81`), category 3 Clean Architecture (`:83`), category 6 CQRS & Event-Driven -(`:86`), category 7 Microservices Readiness (`:87`) and category 14 Testability & Test Strategy (`:94`), all at -Maturity 4 / Implementation 9; the paragraph claims those scores rather than exclusivity, because 4/9 is a band -shared with many rows, category 8 Data Architecture among them (`common-ArchitectureScorecard.md:88`). Two claims -are deliberately left as written because read-only repo files cannot settle them. First, "the framework ships a -`dotnet new` pack" whose content is staged at pack time: the staging mechanism is real but lives in MMCA.Helpdesk -(`MMCA.Helpdesk/build/templates/stage.ps1`), not in MMCA.Common, so the wording is loose about which repo -produces the pack. Second, the "two deployed apps" claim: both repos ship a `deploy.yml` and both pin the same -framework version, but live-in-Azure state is not provable from repo files read-only.* +*Notes / honest gaps: every figure below was re-read from source on 2026-10-02 against framework v1.221.0 +(`MMCA.Common/FACTS.md:4,14`). The two-axis scores are the current indices in the canonical +`Website/docs-src/governance/common-ArchitectureScorecard.md` (Maturity 96.6% = 317/328, +`common-ArchitectureScorecard.md:9`; Implementation 86.0% = 705/820, `common-ArchitectureScorecard.md:10`), +evidence dated 2026-10-01 at v1.218.0 (`common-ArchitectureScorecard.md:5`). The article keeps its deliberate +framing (scored against the original committed snapshot, then re-scored): this run moved Maturity from 97.0% +(318/328) to 96.6% because category 1 SOLID dropped to Maturity 3 / Implementation 8 +(`common-ArchitectureScorecard.md:12,65`, "only SRP and DIP are enforced automatically"), so SOLID left the +top-marks list and is named as the counter-example. Implementation stays the weaker axis by design, by about 10.6 +points (`common-ArchitectureScorecard.md:11`). The denominators are rubric version 2's (ADR-110, +`common-ArchitectureScorecard.md:3,5`, `Website/docs-src/adr/README.md:123`), which keeps all 34 categories and +scores category 10 as Messaging & Integration Architecture at Maturity 4 / Implementation 9 +(`common-ArchitectureScorecard.md:74`) and category 16 as AI-Native Application Architecture at Maturity 4 / +Implementation 9 (`common-ArchitectureScorecard.md:80`; was 3/6 in the 2026-09-19 notes); those two names are the +rubric's own headings (`Website/docs-src/governance/ArchitectureEvaluationCriteria.md:329,469`). No category is +excluded as N/A (`common-ArchitectureScorecard.md:104`), and ADR-027 multi-locale i18n (en-US plus Spanish) +supersedes the single-locale ADR-011 (`Website/docs-src/adr/README.md:40,24`). The top-marks paragraph names +category 3 Clean Architecture (`common-ArchitectureScorecard.md:67`), category 6 CQRS & Event-Driven (`:70`), +category 7 Microservices Readiness (`:71`) and category 14 Testability & Test Strategy (`:78`), all at Maturity 4 +/ Implementation 9; it claims those scores rather than exclusivity, because 4/9 is a band shared with other rows, +category 8 Data Architecture among them (`:72`). The weaker-axis paragraph cites category 17 DevOps & Deployment +at Maturity 3 / Implementation 8 (`:81`, full CD machinery in consumer repos) and category 29 Resilience & +Business Continuity at Maturity 4 / Implementation 8 (`:93`, production RTO/RPO against real cloud backups is +consumer IaC); the earlier "score higher on maturity" wording no longer held for category 17 (75% against 80% +normalized), and the "data-migration gating" item maps to no single scorecard row, so both were narrowed to +the shared Implementation 8 cap. The package count (22, `FACTS.md:19`) was read from `FACTS.md`, the CI-gated +source of truth; its list carries `MMCA.Common.AI` (`FACTS.md:22`), the provider adapters `AI.Anthropic` and +`AI.OpenAI` (`FACTS.md:23-24`, each referencing `MMCA.Common.AI` at +`MMCA.Common/Source/Core/MMCA.Common.AI.{Anthropic,OpenAI}/*.csproj:12` and registering one +`IAiProviderFactory` per `MMCA.Common/AGENTS.md:141`), `AI.Testing` (`FACTS.md:34`), `MMCA.Common.Gateway` +(`FACTS.md:37`), five `Testing.*` packages (`FACTS.md:38-42`) and the `MMCA.Common` metapackage +(`FACTS.md:43`). Gateway is the YARP edge of ADR-008 (`Website/docs-src/adr/README.md:21`), the AI family is the +governed language-model boundary of ADR-120 (`Website/docs-src/adr/README.md:133`), and the metapackage that +ships no assembly in place of the Core 6 is ADR-101 (`Website/docs-src/adr/README.md:114`; the six references at +`MMCA.Common/Source/MMCA.Common/MMCA.Common.csproj:26-31`). `FACTS.md` delegates the ADR count and range to the +canonical index (131 accepted ADRs, 001-131, `Website/docs-src/adr/README.md:6`). Lockstep holds: every +`MMCA.Common.*` pin reads 1.221.0 in Store (`MMCA.Store/Directory.Packages.props:8-113`), ADC +(`MMCA.ADC/Directory.Packages.props:103-139`) and Helpdesk (`MMCA.Helpdesk/Directory.Packages.props:82-98`). +"Two deployed apps are built on it" replaces "consume the same nineteen packages", because neither app pins every +published package. The 141-test-methods-across-55-abstract-`*TestsBase`-classes figure and the 339 fitness tests +MMCA.Common's own build executes are `FACTS.md:51` and `FACTS.md:54-55`. `FACTS.md:52-53` names Common, ADC and +Store as the subclassing repos; MMCA.Helpdesk is added from source, with 33 `*TestsBase` subclass declarations +across 8 files in `MMCA.Helpdesk/Tests/Architecture/MMCA.Helpdesk.Architecture.Tests/` and its own map at +`ServiceContractPurityTests.cs:11` (`HelpdeskArchitectureMap`); no per-repo executed counts are claimed for the +consumers. The UI family: `UI` and `Grpc` depend on `Shared` only and `UI.Maui` (the one MAUI-target package) +depends on `UI` plus `Shared` only (ADR-042, `Website/docs-src/adr/README.md:55`); `UI.Web` references `UI`, +`API` and `Aspire` directly (`MMCA.Common/Source/Presentation/MMCA.Common.UI.Web/MMCA.Common.UI.Web.csproj:40-42`), +so it sits above the layer stack, not beside it. The fast-test figure is the scorecard's category 14 row (roughly +2,254 `[Fact]`/`[Theory]`, `common-ArchitectureScorecard.md:78`, matching the Top-5 strengths block at `:45`, so +the earlier 1,880 follow-up is resolved), and the 2,000-test zero-discovery floor is the literal +`--minimum-expected-tests 2000` on the unit tier (`MMCA.Common/.github/workflows/ci.yml:161`); both keep moving, +so re-read before publishing. The twelve-projects and roughly-9,000-lines figure is anchored on +`Website/docs-src/guides/common-GETTING-STARTED.md:10` ("12 projects and roughly 9,000 lines of C# and Razor"), +the commands on `:15-16`. The Compliance and Privacy gap is real but answered: ADR-005 +(`Website/docs-src/adr/README.md:18`) plus an `IAnonymizable` erasure extension point +(`MMCA.Common/Source/Core/MMCA.Common.Domain/Interfaces/IAnonymizable.cs:22`) and a PII fitness function +(`PiiConventionTestsBase`, `MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Governance/PiiConventionTestsBase.cs:7`), +so the "scored, then fixed" framing is deliberate. Apache-2.0 is `MMCA.Common/Directory.Build.props:49`. Two +claims are deliberately left as written because read-only repo files cannot settle them. First, "the framework +ships a `dotnet new` pack" whose content is staged at pack time: the staging mechanism is real but lives in +MMCA.Helpdesk (`MMCA.Helpdesk/build/templates/stage.ps1`), not in MMCA.Common, so the wording is loose about which +repo produces the pack. Second, the "two deployed apps" claim: both repos ship a `deploy.yml` and both pin the +same framework version, but live-in-Azure state is not provable from repo files read-only.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/optimistic-concurrency-rowversion.md b/docs-src/articles/optimistic-concurrency-rowversion.md index b46b28c9..9c27a7bd 100644 --- a/docs-src/articles/optimistic-concurrency-rowversion.md +++ b/docs-src/articles/optimistic-concurrency-rowversion.md @@ -1,10 +1,12 @@ -# Optimistic concurrency you cannot opt out of: RowVersion from the database to a required If-Match +# Optimistic concurrency with a required If-Match: RowVersion from the database to a 412 > Series: MMCA.Common · Article #13 (deep-dive) · Pillar P2/P3 · Group G07 · Rubric §8 · ADR-035 · > Status: grounded in `Website/docs-src/adr/035-optimistic-concurrency.md`, `MMCA.Common.Shared/DTOs/IConcurrencyAware.cs`, > `MMCA.Common.Domain/Entities/AuditableBaseEntity.cs`, `MMCA.Common.Application/.../Persistence/IRepository.cs`, > `MMCA.Common.Infrastructure/.../EFRepository.cs`, `MMCA.Common.Application/.../MutateEntityHandlerBase.cs`, -> `ApplicationDbContext.cs` (`ConfigureConcurrencyTokens`), `MMCA.Common.API/Middleware/DbUpdateExceptionHandler.cs`, +> `ApplicationDbContext.cs` (`ConfigureConcurrencyTokens`), `DataSources/Engines/RowVersionStrategy.cs` and the four +> engine capability declarations, `CosmosDbContext.cs`, `AuditSaveChangesInterceptor.cs`, +> `MMCA.Common.API/Middleware/DbUpdateExceptionHandler.cs`, > `MMCA.Common.API/Concurrency/SupportsIfMatchAttribute.cs`, `MMCA.Common.Shared/Http/ConcurrencyETag.cs`, > `MMCA.Common.Testing.Architecture/Rules/Governance/ArchitectureRules.Governance.cs`, and the ADC/Store adopters. No em dashes. @@ -46,8 +48,8 @@ one effect; concurrency control keeps two genuine edits from silently clobbering The mechanism is a concurrency token that the database manages, the read model exposes, the client states back in the `If-Match` header, and the persistence layer plants as EF's *original* value so a stale update -fails inside the UPDATE statement itself. There is exactly one transport for it, and no way past it: a -conditional write that states no precondition never reaches the action. +fails inside the UPDATE statement itself. There is exactly one transport for it, and on a guarded action +no way past it: a conditional write that states no precondition never reaches the action. It rests on four members. @@ -114,10 +116,14 @@ as part of the write. If the row's current token no longer matches (someone else read), the UPDATE affects zero rows and EF raises `DbUpdateConcurrencyException`. There is no window. The check and the write are the same statement. -`ConfigureConcurrencyTokens` wires this for every non-owned `IAuditableEntity` in the model, uniformly. -On SQL Server the property is configured with `IsRowVersion` (server-generated). On other relational -providers it falls back to `IsConcurrencyToken` over the same `byte[]`, application-managed. One -configuration, every table, no per-entity boilerplate. +`ConfigureConcurrencyTokens` wires this for every non-owned `IAuditableEntity` in a relational context's +model, uniformly, and the engine decides how. Each data source engine declares a `RowVersionStrategy` in +its capabilities. SQL Server declares `StoreGenerated`, so the property is configured with `IsRowVersion` +(server-generated). PostgreSQL and SQLite declare `ClientStamped`: the property falls back to +`IsConcurrencyToken` over the same `byte[]`, and `AuditSaveChangesInterceptor` writes a fresh value on +every insert and every update, so the next stale writer's `WHERE` clause misses. Cosmos declares `None`, +and its context never calls `ConfigureConcurrencyTokens`. One configuration, every auditable table on a +relational engine, no per-entity boilerplate. ## From exception to a status at the edge @@ -125,11 +131,14 @@ configuration, every table, no per-entity boilerplate. that whole family. `DbUpdateExceptionHandler` translates any `DbUpdateException` into an RFC 9457 `409 Conflict` ProblemDetails, logs the full exception, and returns a deliberately generic detail message ("A data conflict occurred. Please retry or contact support.") so the database schema never leaks to the -client. This is the same edge that already returns 409 for unique-constraint and foreign-key violations, -so a concurrency conflict inherits its translation, logging, and schema-safe message with no new -middleware. On a guarded action the conflict never reaches the client as a 409: the filter rewrites the -outcome to 412 after the action, keeping the problem-details body exactly as it was built. Either way the -caller gets a status it can act on: reload, show the fresh values, let the human decide. +client. This is the same edge that returns 409 for unique-constraint and foreign-key violations, so on an +unguarded endpoint a concurrency conflict inherits its translation, logging, and schema-safe message with +no new middleware. On a guarded action the concurrency conflict never reaches that handler: the filter +catches the `DbUpdateConcurrencyException` itself and answers `412` with its own problem details (title +"Precondition failed", stable error code `Concurrency.PreconditionFailed`). A unique or foreign-key +`DbUpdateException` thrown on the same action is not caught there and still reaches the client as the +generic 409. Either way the caller gets a status it can act on: reload, show the fresh values, let the +human decide. ## The transport: a weak ETag out, a required If-Match back @@ -153,10 +162,11 @@ header and `*` both count, because the wildcard names no particular version), a `400` short-circuit because the server cannot tell what the caller meant, and only a decodable tag lets the action run. -Then the status changes. After the action, `RewriteConflictToPreconditionFailed` turns the conflict -outcome, both a `DbUpdateConcurrencyException` and an already-built 409 result, into -`412 Precondition Failed`. It does so unconditionally, because every request that reached the action -stated a precondition. RFC 9110 reserves 412 for a precondition the client stated in a conditional request +Then the status changes. After the action, `RewriteConflictToPreconditionFailed` turns two conflict +outcomes into `412 Precondition Failed`: a thrown `DbUpdateConcurrencyException` gets a fresh 412 problem +response, and a 409 result the action itself returned keeps its problem-details body and has only its +status relabeled. It does so unconditionally, because every request that reached the action stated a +precondition. RFC 9110 reserves 412 for a precondition the client stated in a conditional request header, which is exactly what `If-Match` is; 409 stays the answer on the unconditional endpoints, for a conflict the client never conditioned on. @@ -175,12 +185,14 @@ If-Match: W/"AAAAAAAAB9E=" ``` The generic `UpdateAsync` on `CrudEntityControllerBase` carries the attribute, so every CRUD `PUT` -inherits the precondition without anyone remembering it. Beyond that it is applied by hand, on 40 actions -across 18 controllers today: 24 across seven controllers in Store (five in Sales' `OrdersController`, -five in `ProductsController`, four in `ProductVariantsController`, three each in `CustomersController` -and `ReviewsController`, two each in `CategoriesController` and `InventoryItemsController`) and 16 across -eleven in ADC (three in Conference's `EventsController`, three in Engagement's `SessionQuestionsController`, -two in its `LivePollsController`, and one each in eight more Conference controllers). Nothing here decides +inherits the precondition without anyone remembering it. Beyond that it is applied by hand, on 41 actions +across 23 controllers today: 25 across eleven controllers in Store (in Sales, two in `OrdersController`, +three in `OrderFulfillmentController` and two in `InventoryItemsController`; in Catalog, four each in +`ProductAttributesController` and `ProductVariantsController`, two each in `CategoriesController` and +`ReviewModerationController`, and one each in `ProductsController`, `ProductImagesController` and +`ReviewsController`; in Identity, three in `CustomersController`) and 16 across twelve in ADC (three in +Engagement's `SessionQuestionsController`, two in its `LivePollsController`, two in Conference's +`EventLifecycleController`, and one each in nine more Conference controllers). Nothing here decides conditional GET. The tag exists to be stated back on the next write, and there is no `If-None-Match` handling and no 304 path. @@ -194,7 +206,9 @@ assemblies for every type whose simple name ends in `UpdateRequest` and flags an `UpdateRequests_ShouldNotImplement_IConcurrencyAware`, and both consumers subclass it: ADC and Store each supply their own `IArchitectureMap`. A module with no mutable aggregate is legitimately vacuous. This is invariant-over-discipline (ADR-015), and it is the type-level half of the rule; the 428 is the caller-level -half, so neither a request model nor a client can quietly reintroduce last-write-wins. +half, so on a guarded action neither a request model nor a client can quietly reintroduce +last-write-wins. Which actions are guarded is a separate question that no rule answers: the attribute is +opt-in per action, and an unguarded write is still last-write-wins. Both apps have adopted the pattern end to end. In ADC, `UpdateSessionHandler` overrides `RowVersion` to report the token that arrived on `UpdateSessionCommand`, `SessionDTO` implements `IConcurrencyAware`, and @@ -202,29 +216,39 @@ report the token that arrived on `UpdateSessionCommand`, `SessionDTO` implements modules: Catalog and Identity edits are appliers over the shared handler base (changing a customer's email, changing a product's brand), and the Sales order transitions (`PayOrderHandler`, `DeliverOrderHandler`, `CancelOrderHandler`, `ShipOrderHandler`, `UpdateShipmentHandler`) each report the -command's token the same way. Both apps run one database per service (ADR-006), so each per-service -database is created with the `RowVersion` column on every table by its own module's `InitialCreate` -migration, and the token is present from the first row. +command's token the same way. Both apps run one database per service (ADR-006), and every table mapped +from an auditable entity carries the `RowVersion` column from the migration that creates it: Store's +Catalog `InitialCreate` adds it to the aggregate tables (its inbox and outbox tables carry none), and the +later `AddProductReviews` migration adds it with the review tables. ## Trade-offs, honestly -- **The precondition is mandatory, and that is a real constraint.** A caller that has not read the - resource cannot write it. There is no null token, no wildcard escape, no legacy-client path: a write - with no `If-Match` is a 428 and stops there. Scripts and generic REST tools have to do a GET first, and - a client that drops the header sees an immediate error instead of a silent overwrite. That is the - trade the framework makes, deliberately. -- **The 409 is coarse, and the 412 inherits it.** All `DbUpdateException`s map to one 409 with a generic - message, so from the status and body alone a client cannot tell a concurrency conflict from a - unique-constraint or foreign-key violation. That is deliberate (no schema leak), but it means retry logic - treats the three the same. The rewrite keys on the conflict *outcome*, not its cause, so on a guarded - action all three come back as 412, and one of them then wears a status naming a precondition the client - did not actually violate. +- **On a guarded action the precondition is mandatory, and that is a real constraint.** A caller that + has not read the resource cannot write it. There is no null token, no wildcard escape, no legacy-client + path: a write with no `If-Match` is a 428 and stops there. Scripts and generic REST tools have to do a + GET first, and a client that drops the header sees an immediate error instead of a silent overwrite. + That is the trade the framework makes, deliberately. +- **Opt-in per action.** `[SupportsIfMatch]` has to be applied, and no fitness rule requires it anywhere, + so a conditional write exists exactly where someone annotated one. The handler base's `RowVersion` + override defaults to no token, and with no token it skips the stamp, so an endpoint nobody guarded is + last-write-wins with no error. The fitness rule covers what an update request must not carry, not which + actions are guarded. +- **The 409 is coarse, and only the guarded concurrency path escapes it.** Every `DbUpdateException` + that reaches the global handler maps to one 409 with a generic message, so on an unguarded endpoint a + client cannot tell a concurrency conflict from a unique-constraint or foreign-key violation. That is + deliberate (no schema leak), but it means retry logic treats the three the same. On a guarded action the + concurrency conflict is a 412 with its own error code, and a thrown unique or foreign-key violation + stays a 409. The relabel of a returned 409 keys on the conflict *outcome*, not its cause, so an action + whose own `Error.Conflict` result means a duplicate key reports it as a 412, error codes intact, under a + status naming a precondition the client did not actually violate. - **It does not merge.** Optimistic concurrency detects the collision and refuses the stale write. It does not reconcile the two edits for you. What to do on a 412 (reload and retry, or surface a diff to the human) is the caller's decision, not the framework's. -- **Cross-engine asymmetry.** SQL Server gets a server-generated `rowversion`; SQLite and other relational - providers get an application-managed `IsConcurrencyToken` over the same `byte[]`. Cosmos has its own - ETag mechanism that is not routed through this property. +- **Cross-engine asymmetry.** SQL Server gets a server-generated `rowversion`; PostgreSQL and SQLite get + an application-managed `IsConcurrencyToken` over the same `byte[]`, re-stamped by the audit interceptor + on every insert and update. Cosmos gets no framework concurrency token at all: its engine declares + `RowVersionStrategy.None` and its context skips `ConfigureConcurrencyTokens`, so `[SupportsIfMatch]` + over a Cosmos-mapped entity stamps an original value on a property EF does not compare. - **A child-level precondition costs a second field.** `If-Match` names exactly one version, and that slot belongs to the aggregate root, so a write that needs to condition on a child row states that second precondition in the body: Store's `ProductVariantChangePriceRequest` carries a required @@ -236,8 +260,9 @@ migration, and the token is present from the first row. so the precondition is actually evaluated, which means a conditional write always emits a root UPDATE and always advances the root's token, even when only a child row changed. Correctness over a spared statement: the cost is that every other editor holding that aggregate's tag now has a stale one. -- **Adoption is a per-database migration.** A new database, or a table added later, must carry the - `RowVersion` column for the token to exist there. +- **Adoption is a schema step per database.** Every auditable table needs the `RowVersion` column for the + token to exist there, so a new database, or a table added later, has no version to condition on until + its migration carries the column. None of these are reasons to keep last-write-wins. They are the reasons to state the precondition explicitly and to decide, per endpoint, what a conflict means to your user. @@ -271,12 +296,12 @@ an overwrite nobody notices.** --- **What we covered:** why a load-modify-save handler silently loses the first of two concurrent edits, how -MMCA.Common gives every auditable entity a database-managed `RowVersion`, renders it on the read as a weak -`ETag` through `IConcurrencyAware`, requires it back in `If-Match` so a write with no precondition is a -`428 Precondition Required`, plants it as EF's original value via `SetOriginalRowVersion` (and touches the -root so the comparison always runs) to detect the conflict atomically inside the UPDATE, rewrites that -conflict to `412 Precondition Failed` at the edge, and keeps the token out of every request body with a -build-wide fitness function. +MMCA.Common gives every auditable entity on a relational engine a `RowVersion` token whose mapping each +engine declares, renders it on the read as a weak `ETag` through `IConcurrencyAware`, requires it back in +`If-Match` on a guarded action so a write with no precondition is a `428 Precondition Required`, plants it +as EF's original value via `SetOriginalRowVersion` (and touches the root so the comparison always runs) to +detect the conflict atomically inside the UPDATE, answers that conflict with `412 Precondition Failed` at +the edge, and keeps the token out of every request body with a build-wide fitness function. **Next in the series:** self-ordering modules, discovered and Kahn-sorted so a dependency is always registered before the modules that need it. @@ -289,55 +314,71 @@ registered before the modules that need it. *Tags: .NET, C Sharp, Software Architecture, Entity Framework, Concurrency* -*Notes: verified type/behavior names with path:line at MMCA.Common v1.205.0 (`FACTS.md:14`). +*Notes: 2026-10-02 refresh, verified at MMCA.Common v1.221.0 (`FACTS.md:14`). Anchors re-read in this run +are marked (re-read); the rest were CONFIRMED by the same-day audit +(`Reports/update-medium/2026-10-02/13-optimistic-concurrency-rowversion.json`). `IConcurrencyAware` at `Source/Core/MMCA.Common.Shared/DTOs/IConcurrencyAware.cs:15` declares a non-nullable `byte[] RowVersion { get; init; }` at `:19`; the remarks at `:10-13` state that the token is never optional and that "Update requests carry no token: the precondition travels in the header alone". `RowVersion` private-setter property on the audit base at `Source/Core/MMCA.Common.Domain/Entities/AuditableBaseEntity.cs:53` (the base implements `IRowVersioned` at `:13`). `IWriteRepository` lives at -`Source/Core/MMCA.Common.Application/Interfaces/Infrastructure/Persistence/IRepository.cs`: the root -overload `void SetOriginalRowVersion(TEntity entity, byte[] rowVersion)` at `:406`, the child overload -`SetOriginalRowVersion(Domain.Interfaces.IRowVersioned childEntity, byte[] rowVersion)` at `:417` (doc -`:408-416`), and `TouchConcurrencyToken(TEntity entity)` as a default no-op at `:440` (doc `:419-439`, +`Source/Core/MMCA.Common.Application/Interfaces/Infrastructure/Persistence/IRepository.cs` (re-read): the +root overload `void SetOriginalRowVersion(TEntity entity, byte[] rowVersion)` at `:408`, the child overload +`SetOriginalRowVersion(Domain.Interfaces.IRowVersioned childEntity, byte[] rowVersion)` at `:419` (doc +`:410-418`), and `TouchConcurrencyToken(TEntity entity)` as a default no-op at `:442` (doc `:421-441`, SEC-Common-77). EF implementations at `Source/Core/MMCA.Common.Infrastructure/Persistence/Repositories/EFRepository.cs`: root `:75-83` -(`OriginalValue` write `:80-82`), child `:86-94`, `TouchConcurrencyToken` `:97`; both overloads reject a -null token with `ArgumentNullException.ThrowIfNull` (`:78`, `:89`), so no value means skip the check -(ADR-035 `:113-114`). The shared write pipeline stamps the token at -`Source/Core/MMCA.Common.Application/UseCases/Crud/MutateEntityHandlerBase.cs:292-296` (from the handler's -`RowVersion(command)` override) and calls `TouchConcurrencyToken` at `:313-314` when the write was -conditional (comment `:307-312`). -`ConfigureConcurrencyTokens` (every non-owned `IAuditableEntity`; SQL Server `IsRowVersion` `:595`, else -`IsConcurrencyToken` `:599`) at -`Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/ApplicationDbContext.cs:582`, called from -`OnModelCreating` at `:415`. +(`OriginalValue` write `:80-82`), child `:86-94`, `TouchConcurrencyToken` `:97` (re-read); both overloads +reject a null token with `ArgumentNullException.ThrowIfNull` (`:78`, `:89`), so there is no value that +means skip the check. The shared write pipeline +`Source/Core/MMCA.Common.Application/UseCases/Crud/MutateEntityHandlerBase.cs` (re-read) declares +`protected virtual byte[]? RowVersion(TCommand command) => null` at `:91` (doc `:84`), stamps only when the +override reports a non-empty token (`:292`, `SetOriginalRowVersion` `:294`), and calls +`TouchConcurrencyToken` at `:314`; the opt-in trade-off is ADR-035 `:193-195`. +Per-engine mapping (re-read): `ConfigureConcurrencyTokens` at +`Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/ApplicationDbContext.cs:588` (doc +`:576-587`), keyed on `Engine.Capabilities.RowVersion == RowVersionStrategy.StoreGenerated` at `:591`, +`IsRowVersion` `:601`, else `IsConcurrencyToken` `:605`, called from `OnModelCreating` (`:416`) at `:420`. +`RowVersionStrategy` (`None`, `StoreGenerated`, `ClientStamped`) at +`.../Persistence/DataSources/Engines/RowVersionStrategy.cs:8-18`; declarations at +`SQLServerDataSourceEngine.cs:46` (`StoreGenerated`), `PostgreSQLDataSourceEngine.cs:44` and +`SqliteDataSourceEngine.cs:43` (`ClientStamped`), `CosmosDataSourceEngine.cs:46` (`None`). +`AuditSaveChangesInterceptor.cs` stamps `Guid.NewGuid().ToByteArray()` when `ClientStamped` (`:59`, +`:74`, `:83`, `:103`). `CosmosDbContext.OnModelCreating` at `.../DbContexts/CosmosDbContext.cs:119-146` +calls neither `base.OnModelCreating` nor `ConfigureConcurrencyTokens` (comment `:139-143`). `DbUpdateExceptionHandler` maps any `DbUpdateException` to `409 Conflict` with a generic detail plus a full log at `Source/Presentation/MMCA.Common.API/Middleware/DbUpdateExceptionHandler.cs:28-51` (status set `:33`). HTTP transport: `ConcurrencyETag` at `Source/Core/MMCA.Common.Shared/Http/ConcurrencyETag.cs:24` formats the weak tag `W/""` at `:40-45` (`If-Match` header name `:27`, `ETag` `:30`, wildcard `:33`); the -class sits in the Shared package so the UI can format the header too (`CHANGELOG.md:1636`). The read side -emits it from `Source/Presentation/MMCA.Common.API/Controllers/EntityControllerBase.cs`: `SetConcurrencyETag` -called at `:436`, emitter at `:471`. The write side is -`Source/Presentation/MMCA.Common.API/Concurrency/SupportsIfMatchAttribute.cs`: sealed +class sits in the Shared package so the UI can format the header too (`CHANGELOG.md:2263`). The read side +emits it from `Source/Presentation/MMCA.Common.API/Controllers/EntityControllerBase.cs` (re-read): +`SetConcurrencyETag` called at `:382`, emitter at `:417`, which finds a public `byte[]` property named +`RowVersion` by reflection (`:391-395`) and reads the shaped dictionary under `fields=` (`:440`). The write +side is `Source/Presentation/MMCA.Common.API/Concurrency/SupportsIfMatchAttribute.cs` (re-read): sealed `Attribute, IAsyncActionFilter` at `:49`, `TokenItemKey` (`"MMCA.Common.API.Concurrency.IfMatchToken"`) at `:57`, `RequiredToken(HttpContext)` at `:68-76`, the decode into `HttpContext.Items` at `:122`, no precondition (blank or `*`) short-circuited to `428 Precondition Required` at `:109-114` (result `:162-171`), -a malformed tag to `400` at `:116-120` (result `:174-180`), and the unconditional -`RewriteConflictToPreconditionFailed` at `:92` and `:130-159` ("every request reaching the action stated a -precondition", `:127`). No bound argument is written to and no request model may carry a token (`:51-56`). +a malformed tag to `400` at `:116-120` (result `:174-180`), and `RewriteConflictToPreconditionFailed` at +`:92` and `:130-159` ("every request reaching the action stated a precondition", `:127`): the exception +branch matches only `DbUpdateConcurrencyException` (`:132`) and answers with `PreconditionFailedResult` +(`:186-195`, code `Concurrency.PreconditionFailed`), while a returned 409 has only its status relabeled +(`:141-158`; outcome-keyed remark `:36-40`). No bound argument is written to and no request model may carry +a token (`:51-56`). The generic conditional `PUT` is `CrudEntityControllerBase.UpdateAsync`: `[SupportsIfMatch]` at `Source/Presentation/MMCA.Common.API/Controllers/CrudEntityControllerBase.cs:90`, `RequiredToken` read at `:103`, with 409/412/428 `ProducesResponseType` at `:94-96`. -Explicit `[SupportsIfMatch]` adoption is 40 actions across 18 controllers: 24 across seven in -`MMCA.Store/Source` (`MMCA.Store.Sales.API/Controllers/OrdersController.cs` 5, e.g. `:298`, `:330`, `:363`, -`:409`, `:478`; `ProductsController` 5; `ProductVariantsController` 4; `CustomersController` 3; -`ReviewsController` 3; `CategoriesController` 2; `InventoryItemsController` 2) and 16 across eleven in -`MMCA.ADC/Source` (`Conference.API/Controllers/Events/EventsController.cs` 3; -`Engagement.API/Controllers/SessionQuestionsController.cs` 3; `.../LivePollsController.cs` 2; and one each -in `Sponsors`, `Speakers`, `Sessions`, `SessionAssets`, `Questions`, `Partners`, `Categories` and -`Activities` Conference controllers). +Explicit `[SupportsIfMatch]` adoption (re-read, Grep count over `*.cs`) is 41 actions across 23 +controllers: 25 across eleven in `MMCA.Store/Source` (Sales `OrdersController.cs` 2 at `:297`, `:357`; +`OrderFulfillmentController.cs` 3 at `:55`, `:88`, `:134`; `InventoryItemsController` 2; Catalog +`ProductAttributesController` 4, `ProductVariantsController` 4, `CategoriesController` 2, +`ReviewModerationController` 2, `ProductsController` 1, `ProductImagesController` 1, `ReviewsController` 1; +Identity `CustomersController` 3) and 16 across twelve in `MMCA.ADC/Source` +(`Engagement.API/Controllers/SessionQuestionsController.cs` 3, `LivePollsController.cs` 2; +`Conference.API/Controllers/Events/EventLifecycleController.cs` 2; one each in the `Events`, `Sponsors`, +`Speakers`, `Sessions`, `SessionAssets`, `Questions`, `Partners`, `ConferenceCategories` and `Activities` +Conference controllers). Fitness rule `UpdateRequestsAreNotConcurrencyAware` at `Source/Hosting/MMCA.Common.Testing.Architecture/Rules/Governance/ArchitectureRules.Governance.cs:24-35` (the `must not implement` violation message `:30-34`); single `[Fact]` base @@ -345,30 +386,36 @@ Fitness rule `UpdateRequestsAreNotConcurrencyAware` at `.../Bases/Domain/ConcurrencyConventionTestsBase.cs:14`; both consumers subclass it. ADC adoption: `UpdateSessionHandler.cs:35` overrides `RowVersion(command) => command.RowVersion`; `UpdateSessionCommand.cs:16` declares `byte[] RowVersion` on the command (doc `:11-15`: "read from the -request's `If-Match` header ... It is required"); `SessionDTO.cs:15` implements `IConcurrencyAware` with -`byte[] RowVersion { get; init; } = []` at `:42`; `SessionUpdateRequest.cs:6` implements only -`ISessionFieldsRequest`. Store adoption: Sales transitions override the same template method -(`PayOrderHandler.cs:33`, `DeliverOrderHandler.cs:38`, `CancelOrderHandler.cs:46`, `ShipOrderHandler.cs:31`, -`UpdateShipmentHandler.cs:23`); Catalog and Identity edits are appliers over the shared base +request's `If-Match` header ... It is required"); `SessionDTO.cs:15` implements `IConcurrencyAware`; +`SessionUpdateRequest.cs:6` implements only `ISessionFieldsRequest`. Store adoption (re-read): Sales +transitions override the same template method with `command.RowVersion` (`PayOrderHandler.cs:44`, +`DeliverOrderHandler.cs:39`, `CancelOrderHandler.cs:46`, `ShipOrderHandler.cs:32`, +`UpdateShipmentHandler.cs:24`); Catalog and Identity edits are appliers over the shared base (`CustomerChangeEmailApplier.cs`, `ProductChangeBrandApplier.cs`); `ProductVariantChangePriceRequest.cs:15` implements nothing and carries a single `public required byte[] VariantRowVersion { get; init; }` at `:24`, documented at `:7-13` as the second, child-level precondition the single-valued header has no room for, stamped by `ChangeVariantPriceHandler.cs:47` through the child overload (guarded by `trackedVariant is not null` `:43`). -Current shape is database-per-service (ADR-006): each per-service database is born with the `RowVersion` -column on every table via its own module's `InitialCreate` (e.g. -`MMCA.Store/Source/Hosting/MMCA.Store.Migrations.SqlServer.Catalog/Migrations/20260621192800_InitialCreate.cs`); -`MMCA.ADC/Source/Hosting` and `MMCA.Store/Source/Hosting` hold only the per-module migration projects. -Rubric §8 = "Data Architecture" (`Website/docs-src/governance/ArchitectureEvaluationCriteria.md:260`); Group G07 +Schema (re-read): in +`MMCA.Store/Source/Hosting/MMCA.Store.Migrations.SqlServer.Catalog/Migrations/20260621192800_InitialCreate.cs` +the aggregate tables carry a `rowversion` column (`:34`, `:98`, `:128`, `:158`, `:184`) and +`InboxMessages` (`:48`) and `OutboxMessages` (`:63`) carry none; the review tables get theirs from +`20260906030347_AddProductReviews.cs` (`:52`, `:77`). +The HTTP block is an illustrative exchange over the real `[HttpPut("{id}/pay")]` (`OrdersController.cs:296`) ++ `[SupportsIfMatch]` (`:297`) action; `OrdersController` emits the ETag at `:182`. +Rubric §8 = "Data Architecture" (`Website/docs-src/governance/ArchitectureEvaluationCriteria.md:276`); Group G07 persistence covers both `SetOriginalRowVersion` overloads under its `IWriteRepository` section (`Website/docs-src/onboarding/group-07-persistence-ef-core.md`). Design in -`Website/docs-src/adr/035-optimistic-concurrency.md` (Accepted 2026-07-02, revised 2026-09-07, status -`:3-7`): the required header and the three status codes at `:79-86`, the two overloads and the -no-skip-value rule at `:108-114`, the fitness function at `:115-118`, and the 2026-09-07 revision -(`TouchConcurrencyToken`, SEC-Common-77) at `:201-215`. The header-only transport landed in Common -v1.173.0, which deleted the body transport (`CHANGELOG.md:1630-1638`). The C# code block is illustrative of -the documented shape (composed from the real `SessionDTO`, `SessionUpdateRequest`, `UpdateSessionCommand`, -`UpdateSessionHandler` and `CrudEntityControllerBase`), and the HTTP block is an illustrative exchange over -the real `[HttpPut("{id}/pay")]` + `[SupportsIfMatch]` action (`OrdersController.cs:298`); neither is a -verbatim copy of one file.* +`Website/docs-src/adr/035-optimistic-concurrency.md` (Accepted 2026-07-02, revised 2026-09-07 and +2026-10-01, status `:3-7`): the fitness function at `:115-118`, the trade-offs at `:193-211` (opt-in, +cross-engine, Cosmos), the 2026-09-07 revision (`TouchConcurrencyToken`, SEC-Common-77) at `:213-227`, +and the 2026-10-01 current-state corrections at `:240-254`. The header-only transport landed in Common +v1.173.0 (`CHANGELOG.md:2247`), which deleted the body transport (`:2257-2265`). The C# code block is +illustrative of the documented shape (composed from the real `SessionDTO`, `SessionUpdateRequest`, +`UpdateSessionCommand`, `UpdateSessionHandler` and `CrudEntityControllerBase`); neither block is a +verbatim copy of one file. Changed this run: adoption counts 40/18 (Store 24/7, ADC 16/11) to 41/23 +(Store 25/11, ADC 16/12); the guarded-action conflict path (filter builds its own 412; thrown unique/FK +stays 409); Cosmos (no token, `RowVersionStrategy.None`, not an ETag mechanism); per-engine mapping via +`RowVersionStrategy`; `RowVersion` only on auditable tables; opt-in-per-action trade-off and the +narrowed invariant; all moved anchors.* diff --git a/docs-src/articles/password-hashing.md b/docs-src/articles/password-hashing.md index dc48d0d1..5970ba5c 100644 --- a/docs-src/articles/password-hashing.md +++ b/docs-src/articles/password-hashing.md @@ -1,7 +1,7 @@ # Password hashing done right: PBKDF2-SHA512, 600k iterations, timing-safe > Series: MMCA.Common · Article #17 · Pillar P2/P4 · Group G08 · Rubric §11 · ADR-102 · -> Status: grounded in `Website/docs-src/onboarding/group-08-auth.md`, `MMCA.Common/CLAUDE.md`, +> Status: grounded in `Website/docs-src/onboarding/group-08-auth.md`, `MMCA.Common/AGENTS.md`, > `Website/docs-src/adr/102-pbkdf2-only-password-hashing.md` (which supersedes ADR-032), and `Website/docs-src/governance/common-ArchitectureScorecard.md` (§11). No em dashes. **Subtitle:** Storing a password is a solved problem, and almost every breach headline is someone who @@ -71,10 +71,12 @@ matching. A negative known-answer test derives a digest at a fraction of that it asserts verification rejects it, which proves the work factor really participates rather than sitting in a comment. Reflection reads the three private constants straight off the type and pins them (the iteration count, the 32-byte salt and the 64-byte digest), so lowering one fails the build instead of -silently shipping. And an architecture rule reads the compiled type and fails the build if the slow key -derivation function or the fixed-time comparison disappears from it, so a rewrite that swapped PBKDF2 -for a raw SHA-512, or `FixedTimeEquals` for `SequenceEqual`, cannot merge even if it kept the same -output length. +silently shipping. And an architecture rule reads the compiled type and fails the build if it stops +depending on `Rfc2898DeriveBytes` (the slow key derivation function) or on `CryptographicOperations` +(the class that holds the fixed-time comparison), so a rewrite that swapped PBKDF2 for a raw SHA-512 +cannot merge even if it kept the same output length. That second rule pins the class, not the method: +`FixedTimeEquals` is the hasher's only use of `CryptographicOperations`, so swapping it for +`SequenceEqual` fails the build, but a rewrite that kept some other call on that class would not. ### Why constant-time matters more than it looks @@ -108,7 +110,7 @@ an Infrastructure registration change, and the application handlers never name a ## Defense in depth: PII at rest, not just passwords Passwords are the famous case, but they are not the only personal data sitting in your database. -MMCA.Common ships field-level PII encryption as a separate control, now recorded in its own decision +MMCA.Common ships field-level PII encryption as a separate control, recorded in its own decision record (ADR-037): `EncryptedStringConverter` is an EF Core value converter that encrypts a column with **AES-256-GCM** transparently on the way to the database and decrypts on the way out. GCM is authenticated encryption, so it protects confidentiality *and* detects tampering. It is the framework @@ -123,8 +125,9 @@ analyzers run at error severity** with `TreatWarningsAsErrors` globally, and a c (SonarAnalyzer and Meziantou) carry security-relevant rules. The security category (§11) scored **Maturity 4 / Implementation 8** on the framework's two-axis rubric (Maturity 0-4, Implementation 0-10), on the strength of JWT algorithm pinning, this hashing scheme (recorded in ADR-102), -AES-256-GCM field encryption, server-side authorization, and rate limiting (brute-force protection -applies exponential-backoff lockouts and clears the counter on success). +permission-based server-side authorization, and rate limiting (brute-force protection applies +exponential-backoff lockouts and clears the counter on success). The field-encryption converter is not +part of that credit: the scorecard entry lists it as shipped but latent. ## Trade-offs, honestly @@ -138,14 +141,17 @@ A credible security post owns its rough edges, and a few sit around this hash ra beside the setting). Permissive dev CORS is a development affordance in the code, not a recommendation for what you run in production. - **Iteration counts are a moving target.** 600,000 PBKDF2-SHA512 iterations matches 2023 OWASP - guidance; that number ratchets up with hardware. Treat the iteration count as a config decision you - revisit, and prefer a memory-hard KDF (Argon2id) when you can, which is exactly why the algorithm - lives behind an interface here. - -The current §11 entry itself names two limitations, both upstream of the hash: vault/managed-identity -secret binding is delegated to the deployer (correct for a library), and authorization is RBAC with a -capability layer rather than a full resource- or attribute-based policy engine. None of these undermine -the storage scheme. They are the operational and governance work that surrounds a correct hash. + guidance; that number ratchets up with hardware. Here it is a private constant pinned by a test, not + a setting, and because the stored record carries no iteration count, raising it is a deliberate code + change that needs a plan for the hashes already stored. Revisit it anyway, and prefer a memory-hard + KDF (Argon2id) when you can, which is exactly why the algorithm lives behind an interface here. + +The current §11 entry itself names three reasons it holds at Implementation 8, all upstream of the +hash: the rubric's threat-model criterion is unmet, authorization is RBAC with a capability layer plus +opt-in ownership checks rather than a full resource- or attribute-based policy engine, and the +failed-login counter behind the brute-force lockout is documented as non-atomic. None of these +undermine the storage scheme. They are the operational and governance work that surrounds a correct +hash. ## Apply this even without MMCA @@ -188,85 +194,70 @@ response replayed instead of a duplicate. *Tags: .NET, C Sharp, Software Architecture, Security, Cryptography* -*Notes (re-sourced 2026-09-19 against MMCA.Common v1.205.0): verified against source read this run. -The `IPasswordHasher` **port** lives in `MMCA.Common.Application` (namespace +*Notes (re-sourced 2026-10-02 against MMCA.Common v1.221.0): every anchor below was re-read this run. +Port and adapter: `IPasswordHasher` in `MMCA.Common.Application` (namespace `MMCA.Common.Application.Interfaces.Infrastructure.Auth`, `Source/Core/MMCA.Common.Application/Interfaces/Infrastructure/Auth/IPasswordHasher.cs:1`, interface at -`:6`); its single `PasswordHasher` **adapter** lives in `MMCA.Common.Infrastructure` (namespace +`:6`); the single `PasswordHasher` in `MMCA.Common.Infrastructure` (namespace `MMCA.Common.Infrastructure.Auth`, `Source/Core/MMCA.Common.Infrastructure/Auth/PasswordHasher.cs:5`, -class at `:12`). FOLDER MOVE (2026-09-19): both types moved into an `Auth/` folder since the last -sourcing, taking their namespaces with them (previously `MMCA.Common.Infrastructure.Services` and -`MMCA.Common.Application.Interfaces.Infrastructure`); the Clean-Architecture port/adapter split itself -is unchanged. Behavior: PBKDF2-HMAC-SHA512 (`HashAlgorithmName.SHA512`, `PasswordHasher.cs:36` on the -write path and `:73` inside the single private recompute `ComputePbkdf2Hash` at `:68-74`), -`Iterations = 600_000` (`:24`), `SaltSize = 32` (`:15`), `HashSize = 64` (`:18`), the -canonical-material guard `if (hash.Length != HashSize || salt.Length != SaltSize) return false` -(`:55-58`, with its SECURITY rationale at `:49-54`), a recompute to `HashSize` rather than to the -stored hash length (`:60`), and `CryptographicOperations.FixedTimeEquals` (`:64`). PREMISE INVERTED -(2026-09-19): the prior draft's algorithm-migration-by-salt-length section is deleted and replaced by -the single-algorithm section, because that migration path no longer exists. The legacy single-round -HMAC-SHA512 verify branch, its `LegacyHmacSaltSize = 128` constant and its `ComputeLegacyHash` helper -are absent from the file, whose class doc now reads "PBKDF2 is the only supported algorithm: every -stored hash is derived and verified through it" (`PasswordHasher.cs:8-10`); the whole type is 75 lines. -The decision is recorded in `Website/docs-src/adr/102-pbkdf2-only-password-hashing.md` ("ADR-102: -PBKDF2-Only Password Hashing", `:1`), Accepted 2026-08-31 and superseding ADR-032 (`:4`), revised -2026-09-11 to record the canonical-material guard and the derive-to-HashSize read path (`:5-8`). -`Website/docs-src/adr/032-password-hashing.md:4` is marked "Superseded by ADR-102 (2026-08-31)" and is -retained only as the migration-era record, so the header blockquote and the security-category sentence -in the body were re-pointed at ADR-102. Tests: -`Tests/Core/MMCA.Common.Infrastructure.Tests/Auth/PasswordHasherSecurityTests.cs` (namespace -`MMCA.Common.Infrastructure.Tests.Auth`, `:7`) keeps the two known-answer tests and the negative one, -and pins exactly **three** private constants by reflection, `Iterations` (`:88-89`), `SaltSize` -(`:94-95`) and `HashSize` (`:100-101`), against the local expected values at `:20-22` -(`ReadPrivateConstant` at `:164`, `NotNull` guard at `:168`). The fourth pin, on `LegacyHmacSaltSize`, -went with the constant and is replaced by a behavioral test: -`VerifyPassword_RejectsALegacyHmacDigest` (`:105`) builds a 128-byte HMAC key as the salt with the -matching single-round digest and requires `false` for the **correct** password, on the stated ground -that the HMAC-SHA512 verification branch is gone. The read-path guard has its own coverage in the same -file, `VerifyPassword_AgainstAnEmptyStoredHashAndSalt_IsRejected` (`:121`) and the six-case `Theory` -`VerifyPassword_WithNonCanonicalMaterial_IsRejected` (`:132`). -`Tests/Core/MMCA.Common.Infrastructure.Tests/Auth/PasswordHasherTests.cs` (namespace -`MMCA.Common.Infrastructure.Tests.Auth`, `:4`, class at `:6`) holds the nine behavioral test methods -(7 `[Fact]` + 2 `[Theory]`) that remain alongside them, and -`Tests/Architecture/MMCA.Common.Architecture.Tests/Governance/PasswordHashingFitnessTests.cs` -(namespace `MMCA.Common.Architecture.Tests.Governance`, `:4`) asserts against compiled IL that the type -depends on `System.Security.Cryptography.Rfc2898DeriveBytes` (type name at `:19`, rule at `:34`) and on -`System.Security.Cryptography.CryptographicOperations` (`:17`, rule at `:47`), so swapping the slow KDF -for a raw hash, or `FixedTimeEquals` for `SequenceEqual`, fails the build. The field-level PII -encryption converter `EncryptedStringConverter` uses AES-256-GCM (`AesGcm`, -`EncryptedStringConverter.cs:200,235`; nonce 12 at `:78`, tag 16 at `:81`, 32-byte key guard at `:130` -on the single-key path and `:166` per key-ring entry) and stores a versioned envelope, Base64 of -`[key version (1)][nonce (12)][ciphertext (N)][tag (16)]` (assembled at `:203-208`, documented at -`:38-44`), for 29 bytes of per-value overhead; it has its own decision record, -`Website/docs-src/adr/037-field-level-encryption-at-rest.md`, whose Decision item 10 (`:135-140`) -records adoption as zero, and no `*Configuration.cs` in the consumer repos calls -`.HasConversion(new EncryptedStringConverter(...))`, so zero production columns are encrypted (those -converter anchors are carried forward from the 2026-08-15 sourcing and were not re-read line by line -this run). Section 11 Security re-sourced to -`Website/docs-src/governance/common-ArchitectureScorecard.md:91` (the anchor drifted from `:83`) = -Weight 3, **Maturity 4 / Implementation 8**, weighted 12/24, unchanged on both axes. The scorecard is -two-axis (Maturity 0-4 + Implementation 0-10). CITATION DROPPED (2026-09-19): the prior ledger sourced -the hardening-wave-not-re-scored aside to -`Website/docs-src/governance/common-RemediationBacklog.md:1080-1081`; no sentence supporting it is -present in that file any more, so the aside is removed and the Maturity 4 / Implementation 8 reading is -taken straight off the scorecard row. There is no dedicated "security analyzer": the five analyzers -(Meziantou.Analyzer, Microsoft.VisualStudio.Threading.Analyzers, Roslynator.Analyzers, -SonarAnalyzer.CSharp, StyleCop.Analyzers) all run at error severity under `TreatWarningsAsErrors`, and -SonarAnalyzer/Meziantou carry some security-relevant rules. ANCHORS REBASED (2026-09-19): the -HTTPS-metadata trade-off bullet describes unchanged behavior, but every citation behind it moved -roughly 100 lines. `AddForwardedJwtBearer` takes `IConfiguration` + `IHostEnvironment` -(`Source/Presentation/MMCA.Common.API/Startup/WebApplicationBuilderExtensions.cs:545-551`) and resolves -explicit argument, then `RequireHttpsMetadataConfigKey` -(`= "Authentication:JwtBearer:RequireHttpsMetadata"`, `:56`), then `!environment.IsDevelopment()` -(`:558-559`); a resolved `false` outside Development registers -`InsecureJwtMetadataWarningStartupFilter` (`:561-564`), which logs one startup warning naming the key. -The transitional old-signature overload the prior ledger recorded at `:479-482` is gone: there is -exactly one public `AddForwardedJwtBearer` (`:545`) over the private `AddForwardedJwtBearerCore` -(`:570`). Permissive dev CORS is genuinely unchanged (`AllowAnyOrigin` at -`WebApplicationBuilderExtensions.cs:695`, inside the `#pragma warning disable S5122` at -`:693`/`:698`), and stays a code observation rather than a scorecard-named gap. Both production apps -opt out deliberately, with the justification beside the setting: -`MMCA.ADC/infra/main.bicep:1830,1962,2112` (comment at `:1827-1829`) and -`MMCA.Store/infra/main.bicep:1652,1779` (comments at `:1650-1651` and `:1777-1778`).* +class at `:12`), registered by `TryAddSingleton` +(`Source/Core/MMCA.Common.Infrastructure/DependencyInjection.cs:314`). Behavior, unchanged: +PBKDF2-HMAC-SHA512 (`HashAlgorithmName.SHA512`, `PasswordHasher.cs:36` on the write path and `:73` +inside `ComputePbkdf2Hash` at `:68-74`), `Iterations = 600_000` (`:24`, a private const), `SaltSize = 32` +(`:15`), `HashSize = 64` (`:18`), the canonical-material guard (`:55-58`, SECURITY rationale `:49-54`), +recompute to `HashSize` (`:60`), `CryptographicOperations.FixedTimeEquals` (`:64`), class doc "PBKDF2 is +the only supported algorithm" (`:8-10`); the type is 75 lines with no legacy HMAC branch. ADR: +`Website/docs-src/adr/102-pbkdf2-only-password-hashing.md` (Accepted 2026-08-31, supersedes ADR-032 at +`:4`, revised 2026-09-11 at `:5-8`). Tests: +`Tests/Core/MMCA.Common.Infrastructure.Tests/Auth/PasswordHasherSecurityTests.cs` (namespace `:7`) +pins `Iterations` (`:88-89`), `SaltSize` (`:94-95`) and `HashSize` (`:100-101`) against `:20-22` via +`ReadPrivateConstant` (`:164`, `NotNull` guard `:168`), rejects a legacy HMAC digest (`:105`), an empty +hash and salt (`:121`) and six non-canonical shapes (`:132`); +`Tests/Core/MMCA.Common.Infrastructure.Tests/Auth/PasswordHasherTests.cs` (namespace `:4`, class `:6`) +holds 7 `[Fact]` + 2 `[Theory]`. NARROWED (2026-10-02): the fitness-rule sentence. +`Tests/Architecture/MMCA.Common.Architecture.Tests/Governance/PasswordHashingFitnessTests.cs` asserts +`HaveDependencyOnAll` on the TYPES `System.Security.Cryptography.Rfc2898DeriveBytes` (`:19`, rule +`:34`) and `System.Security.Cryptography.CryptographicOperations` (`:17`, rule `:47`), not on the +`FixedTimeEquals` method, so the body now says the `SequenceEqual` swap fails only because +`FixedTimeEquals` is the type's sole `CryptographicOperations` use (`PasswordHasher.cs:64`) and that a +rewrite keeping another call on that class would pass. REWORDED (2026-10-02): "Treat the iteration count +as a config decision" read as configurable; the count is a private const (`PasswordHasher.cs:24`) and the +stored record is only `(Hash, Salt)` (`:27`, `:43`), so the bullet now says raising it is a code change +needing a plan for stored hashes. "now recorded in its own decision record" lost its "now" +(current-state rule). Field encryption: `EncryptedStringConverter` +(`Source/Core/MMCA.Common.Infrastructure/Persistence/Encryption/EncryptedStringConverter.cs`) uses +`AesGcm` (`:200`, `:235`), nonce 12 (`:78`), tag 16 (`:81`), key guards `:130` (single key) and `:166` +(per ring entry), envelope `[key version (1)][nonce (12)][ciphertext (N)][tag (16)]` assembled at +`:203-208` and documented at `:38-44`, 29 bytes of overhead; re-read line by line this run. +`Website/docs-src/adr/037-field-level-encryption-at-rest.md` Decision item 10 starts at `:122` and records +zero adoption at `:136-141` (re-anchored from `:135-140`); ADR-005 names the converter for retrievable +fields (`Website/docs-src/adr/005-soft-delete-vs-erasure.md:23`). Section 11 Security RE-ANCHORED to +`Website/docs-src/governance/common-ArchitectureScorecard.md:75` (from `:91`, which is now section 27) = +Weight 3, **Maturity 4 / Implementation 8**, weighted 12/24, unchanged. DRIFTED (2026-10-02): the row +credits alg pinning, the PBKDF2 hasher, permission-based authz and rate limiting plus brute-force +protection, and lists the ADR-037 converter only as "ships but is latent/unadopted", so AES-256-GCM was +dropped from the strength list and the body says it is not part of the credit. The row's hold-at-8 +reasons are now THREE (threat-model criterion unmet; RBAC with capability indirection plus opt-in +ownership rather than ABAC; failed-login counter documented non-atomic, +`Source/Core/MMCA.Common.Infrastructure/Auth/LoginProtectionService.cs:55`), and vault binding is no +longer a limitation (the row records opt-in `AddCommonKeyVaultConfiguration` via +`DefaultAzureCredential`), so the trade-offs paragraph was rewritten to the three. Scorecard-side drift +(not an article defect): the row still cites ADR-032 and `Infrastructure/Services/PasswordHasher.cs:9,53` +plus `Services/PasswordHasherTests.cs` (11 tests). Brute force: exponential backoff +`LoginProtectionService.cs:77` (clamped shift, `:71-78`), counter and lockout cleared in +`ResetFailedAttemptsAsync` (`:85-86`). Analyzers: `TreatWarningsAsErrors` at +`MMCA.Common/Directory.Build.props:7`; five analyzers, no dedicated security analyzer. Header +re-pointed from `MMCA.Common/CLAUDE.md` (now a stub importing `AGENTS.md`, `:3`) to +`MMCA.Common/AGENTS.md`, whose `:131` states the `AddForwardedJwtBearer` resolution order. ANCHORS +REBASED (2026-10-02): the HTTPS-metadata bullet's behavior is unchanged, but the code moved into the +partial `Source/Presentation/MMCA.Common.API/Startup/WebApplicationBuilderExtensions.Authentication.cs`: +`RequireHttpsMetadataConfigKey` `:24`, the single public `AddForwardedJwtBearer` `:51-56`, the resolve +chain argument then key then `!environment.IsDevelopment()` `:63-65`, the +`InsecureJwtMetadataWarningStartupFilter` registration `:67-71` (type at +`Startup/Auth/InsecureJwtMetadataWarningStartupFilter.cs:15`), private `AddForwardedJwtBearerCore` `:76`. +Permissive dev CORS unchanged: `AllowAnyOrigin` at `WebApplicationBuilderExtensions.cs:140` inside the +S5122 pragma (`:138` disable, `:143` restore). Production opt-outs with justification beside the setting +re-anchored: `MMCA.ADC/infra/main.bicep:1941,2075,2227` (comments `:1938-1940`, `:2072-2074`, +`:2224-2226`) and `MMCA.Store/infra/main.bicep:1686,1818` (comments `:1682-1685`, `:1814-1817`).* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/permission-based-authorization.md b/docs-src/articles/permission-based-authorization.md index 1d55de3f..6f063713 100644 --- a/docs-src/articles/permission-based-authorization.md +++ b/docs-src/articles/permission-based-authorization.md @@ -2,8 +2,8 @@ > Series: MMCA.Common · Article #24 (deep-dive) · Pillar P2/P4 · Group G08 · Rubric §11 · ADR-020 · > Status: grounded in `Website/docs-src/adr/020-permission-based-authorization.md`, the -> `MMCA.Common.Shared/Auth/Permissions` + `MMCA.Common.API/Authorization` source, and the ADC and -> Store adoption. No em dashes. +> `MMCA.Common.Shared/Auth/Permissions` + `MMCA.Common.API/Authorization` source, the framework +> `TokenService` permission claims, and the ADC and Store adoption. No em dashes. **Subtitle:** `[Authorize(Roles = "Organizer")]` couples every endpoint to a role name. The day you need a role that can do *most* of what an organizer does but not all of it, you are editing attributes across @@ -17,7 +17,7 @@ Clean enough. You add `RequireAttendee`, `RequireAdmin`, `RequireAuthenticated`, mapping from "who is allowed" to "which attribute" is obvious. Then the requirement arrives that role checks cannot express cleanly. You need a *content editor*: someone -who may curate the session catalog but must not manage events, rooms, the question queue, or the organizer +who may curate the session catalog but must not manage events, rooms, feedback questions, or the organizer session-selection workflow. An organizer can do all of those. The new role can do exactly one slice of them. Now look at your options with role-name checks. You can add `ContentEditor` to every @@ -60,9 +60,8 @@ capability? The implementation, `PermissionRegistry`, holds an immutable `FrozenDictionary>` from role name to its granted permissions. Role keys are compared case-insensitively (`OrdinalIgnoreCase`); permission values are compared ordinally. The same class is also the host's `IPermissionCatalog`, exposing the closed set of roles and permissions the code -compiled in, so an administration screen enumerates a projection of the map that authorizes rather than a -second list that can drift from it. It is the one place that knows the role-to-capability mapping, so -endpoints never name a role. +compiled in, so an administration screen enumerates the compiled map itself rather than a hand-kept second +list. It is the one place that knows the role-to-capability mapping, so endpoints never name a role. **Modules declare grants additively.** `AddPermissions(...)` accumulates into a shared `PermissionRegistryBuilder`. Each `Grant(string role, params string[] permissions)` unions the new @@ -112,11 +111,14 @@ if (context.User.HasPermissionClaim(requirement.Permission) ``` Both reads are framework-wide definitions rather than local helpers. `GetRoleValues()` gathers roles from -`ClaimTypes.Role`, `"role"`, and `"roles"`, so it works whether or not inbound-claim mapping is on, and it -is the framework's single definition of "the caller's roles", so no other reader can disagree with the -handler about who is privileged. `HasPermissionClaim(...)` is the single definition of "the token itself -grants this". Baking a `permission` claim into the token is therefore optional: role-derived resolution is -the default, and a token that already carries explicit permissions short-circuits the registry lookup. +`ClaimTypes.Role`, `"role"`, and `"roles"`, so it works whether or not inbound-claim mapping is on; the +CQRS gate reads the same three claim types through `ICurrentUserService.Roles`. `HasPermissionClaim(...)` +is the single definition of "the token itself grants this", and both gates call it. The framework's +`TokenService` writes that claim at sign-in: every access token carries one `permission` claim for each +permission the minting host's registry grants the account's role. Both apps' Identity hosts apply every +module's grant map before minting (`AddTokenPermissionGrants()`), so a service that does not own a +module's grant map, the CQRS gate in that service, and the Blazor navigation all read the capability from +the token rather than from a registry they do not hold. **The same registry gates use cases, not just routes.** A command or query that implements `IRequiresPermission` is checked by `AuthorizationGate.Evaluate` inside the CQRS decorator pipeline, @@ -128,8 +130,8 @@ matters for a handler reachable from more than one entry point. The piece that makes this safe to add to a framework everyone consumes is that wiring it confers nothing until a host grants something. `AddAuthorizationPolicies()` always registers the handler (via -`TryAddEnumerable`), the policy provider (via `Replace`), and an empty registry, which is bound as both -`IPermissionRegistry` and `IPermissionCatalog` so the two contracts can never answer from different maps. +`TryAddEnumerable`), the policy provider (via `Replace`), and an empty registry, with `IPermissionRegistry` +and `IPermissionCatalog` both forwarding to that one built instance. The same call also installs a fail-closed fallback policy, so an endpoint that declares no authorization metadata at all requires an authenticated caller and a deliberate anonymous route says so with `[AllowAnonymous]`. The capability mechanism itself still confers nothing beyond explicit claims until a @@ -143,8 +145,10 @@ framework's own `notifications:manage` to `Organizer`; and its Identity module d alias the framework-owned `users:manage` and `roles:manage` from `AdministrationPermissions` so the shared administration controller bases can carry their own `[HasPermission]`. MMCA.Store defines eleven of its own across Catalog, Sales and Identity, each module granting its whole set to its own `Admin` role from its own -`AddPermissions(...)` call. The role vocabulary stays the application's throughout: MMCA.Common declares no -role names at all. The registry, the catalog, the handler and the policy provider carry nineteen unit tests +`AddPermissions(...)` call. Both apps' Identity hosts also call `AddStoredPermissionGrants(...)`, which +decorates `IPermissionRegistry` with a `LayeredPermissionRegistry` (the compiled grants plus stored ones, +union only) while `IPermissionCatalog` keeps enumerating the compiled set. The role vocabulary stays the +application's throughout: MMCA.Common declares no role names at all. The registry, the catalog, the handler and the policy provider carry nineteen unit tests between them (`PermissionRegistryTests`, `PermissionCatalogTests`, `PermissionAuthorizationHandlerTests`, `PermissionPolicyProviderTests`), and the ADC grant maps carry dedicated grant tests of their own. @@ -188,8 +192,9 @@ The pattern is portable to any policy-based authorization stack: `perm:{name}` policy lazily means you never hand-register one policy per permission, and it can fall through to the default provider so any policy you do register by hand survives. 4. **Accept two grant sources.** Honor an explicit permission claim if the token carries one, and fall - back to role-derived resolution if it does not. That keeps tokens small by default and lets you push - permissions into the token later without changing endpoints. + back to role-derived resolution if it does not. Whether you emit permission claims at sign-in is then a + minting decision, not an endpoint change, and emitting them lets a service that holds no grant table + still answer the question. 5. **Make it inert until used.** Register the mechanism with an empty registry so the feature is free to ship and confers nothing until a module actually grants a capability. @@ -217,68 +222,49 @@ pattern, or `dotnet add package MMCA.Common.API` and try it.* *Tags: .NET, C Sharp, Software Architecture, Security, Authorization* -*Notes: re-verified against source this run (MMCA.Common v1.205.0, `FACTS.md:14`). 2026-09-19 audit pass: -the permission types moved into `MMCA.Common.Shared.Auth.Permissions`, the registry gained a second -contract, a second gate reads it, and both real apps adopt it, so the section heading, the registry -paragraph, the registration code block, the handler code block, the inert-until-adopted paragraph, the -adoption paragraph, the test count and three trade-off bullets were rewritten; the `RoleNames` and -`GetRoles` citations were wrong and are replaced. Verified names and anchors: `IPermissionRegistry` -(interface at `Source/Core/MMCA.Common.Shared/Auth/Permissions/IPermissionRegistry.cs:14`, -`GetPermissions(string)` at `:21`, `HasPermission(IEnumerable, string)` at `:29`), -`PermissionRegistry : IPermissionRegistry, IPermissionCatalog` (`Auth/Permissions/PermissionRegistry.cs:16`) -with the `FrozenDictionary>` field at `:20`, built `OrdinalIgnoreCase` over -ordinal sets at `:33-36`; `IPermissionCatalog.Roles` / `.Permissions` -(`Auth/Permissions/IPermissionCatalog.cs:24,27,30`); `PermissionRegistryBuilder.Grant(string, params string[])` -unioning via `HashSet.UnionWith` (`Auth/Permissions/PermissionRegistryBuilder.cs:8,25,34`); -`AdministrationPermissions.ManageUsers = "users:manage"` and `ManageRoles = "roles:manage"` -(`Auth/Permissions/AdministrationPermissions.cs:15,18,21`); `HasPermissionAttribute : AuthorizeAttribute` -with `Permission` (`MMCA.Common.API/Authorization/HasPermissionAttribute.cs:13,21`); -`PermissionPolicy.Prefix = "perm:"` + `NameFor` (`PermissionPolicy.cs:12,17`); -`PermissionPolicyProvider.GetPolicyAsync` (`:31`), non-`perm:` fall-through to -`DefaultAuthorizationPolicyProvider` (`:35-38`), on-demand `RequireAuthenticatedUser` + -`PermissionRequirement` build (`:41-45`); `PermissionRequirement.Permission` -(`PermissionRequirement.cs:10,21`); `PermissionAuthorizationHandler` (`:13`) with the two-source body at -`:24-33` (`context.User.HasPermissionClaim(...)` OR -`permissionRegistry.HasPermission(context.User.GetRoleValues(), ...)`): the file is 37 lines and has no -`GetRoles` member. `ClaimsPrincipalExtensions.GetRoleValues()` reads `ClaimTypes.Role` / `"role"` / -`"roles"` and is documented as the framework's one definition of the caller's roles -(`MMCA.Common.Shared/Auth/ClaimsPrincipalExtensions.cs:59-67`); `HasPermissionClaim` is the one definition -of an explicit grant (`:94-97`). CQRS gate: `AuthorizationGate.Evaluate` -(`MMCA.Common.Application/UseCases/Decorators/AuthorizationGate.cs:40`) checks `IRequiresPermission` -against the same registry and claim read at `:46-48`, returning `Error.Forbidden` at `:52-55`; marker at -`UseCases/Markers/IRequiresPermission.cs:34,41`. Registration: -`AddAuthorizationPolicies(Action?)` -(`MMCA.Common.API/Authorization/AuthorizationExtensions.cs:60`) registers the handler via -`TryAddEnumerable`, the provider via `Replace` and the shared registry at `:68-72`, then the fallback -handler and the fail-closed `AuthorizationOptions.FallbackPolicy` at `:74-91`; `EnsurePermissionRegistry` -binds both `IPermissionRegistry` and `IPermissionCatalog` to the one built instance at `:133-134`; the -"permissions are the one authorization model" statement is at `:20-22`. Adoption: `ConferencePermissions` -carries eleven constants at `:12-47`, enumerated in `All` at `:50-63`, with the seven-member -`ContentManagement` subset (sessions, speakers, categories, sponsors, partners, activities, session assets) -at `:70-79` (`MMCA.ADC.Conference.Shared/Authorization/ConferencePermissions.cs`); granted by -`ConferencePermissionGrants.Apply`, Organizer gets `All` at `:47` and ContentEditor gets -`ContentManagement` at `:48`, registered as `services.AddPermissions(ConferencePermissionGrants.Apply)` -(`MMCA.ADC.Conference.API/DependencyInjection.cs:43`). `RoleNames` is ADC-owned and holds only `Organizer`, -`Attendee` and `ContentEditor` (`MMCA.ADC.Identity.Shared/Authorization/RoleNames.cs:23,26,33`): there is -no `Admin` role in ADC and no `RoleNames` type in MMCA.Common. `EngagementPermissionGrants.Apply` grants -`Organizer` the three Engagement capabilities (`EngagementPermissionGrants.cs:37`, registered at -`MMCA.ADC.Engagement.API/DependencyInjection.cs:61`); `NotificationPermissionGrants.Apply` grants -`Organizer` `NotificationPermissions.Manage` (`NotificationPermissionGrants.cs:38`); ADC -`IdentityPermissions` defines three, `UsersRead = "identity:users:read"` at `:13` plus `UsersManage` and -`RolesManage` aliasing `AdministrationPermissions` at `:25,38`, enumerated in `All` at `:41-46` -(`MMCA.ADC.Identity.Shared/Authorization/IdentityPermissions.cs`). Store has adopted the layer: -`services.AddPermissions(CatalogPermissionGrants.Apply)` -(`MMCA.Store.Catalog.API/DependencyInjection.cs:45`) and -`services.AddPermissions(SalesPermissionGrants.Apply)` (`MMCA.Store.Sales.API/DependencyInjection.cs:52`); -`Website/docs-src/adr/020-permission-based-authorization.md:70-86` records the eleven Store permissions -across three modules and the dedicated ADC grant tests, and `:63-68` the framework-owned endpoints that -carry `[HasPermission]` themselves. Nineteen unit tests re-counted this run: 6 `[Fact]` in -`Tests/Core/MMCA.Common.Shared.Tests/Auth/Permissions/PermissionRegistryTests.cs`, 6 in -`PermissionCatalogTests.cs` beside it, 4 in -`Tests/Presentation/MMCA.Common.API.Tests/Authorization/PermissionAuthorizationHandlerTests.cs` and 3 in -`PermissionPolicyProviderTests.cs`. RBAC-not-ABAC framing per -`Website/docs-src/governance/common-ArchitectureScorecard.md:91` §11 (Weight 3, Maturity 4, Impl 8, 12/24). -Published package count per `MMCA.Common/FACTS.md:19`. The registration block is the real ADC shape; the -handler block is verbatim from `PermissionAuthorizationHandler.cs:24-33`.* +*Notes: re-verified against source 2026-10-02 (MMCA.Common v1.221.0, `FACTS.md:14`). This run's +changes: the token paragraph said baking a `permission` claim into the token was optional and role-derived +resolution the default; the framework `TokenService` emits one claim per granted permission into every +access token (`MMCA.Common.Infrastructure/Auth/TokenService.cs:129-141`, registry field at `:30`), and both +Identity hosts apply every module's grant map before minting (ADC +`MMCA.ADC.Identity.Service/Program.cs:269`, the map at `Authorization/TokenPermissionGrants.cs:16-24,44-45`; +Store `MMCA.Store.Identity.Service/Program.cs:213`), so the paragraph and Apply-this step 4 ("keeps tokens +small by default") were rewritten. The claim that `GetRoleValues` is the only role reader was narrowed: the +CQRS gate reads `ICurrentUserService.Roles` +(`MMCA.Common.Application/Interfaces/Infrastructure/Auth/ICurrentUserService.cs:45-62`), a separate +default member over the same three claim types with a single-`Role` fallback. The claim that the registry +and catalog "can never answer from different maps" was narrowed to the base wiring, because both Identity +hosts call `AddStoredPermissionGrants` (ADC `Program.cs:276`, Store `Program.cs:220`), which decorates +`IPermissionRegistry` with `LayeredPermissionRegistry` while the catalog stays compiled +(`MMCA.Common.Infrastructure/DependencyInjection.Auth.cs:139-149`; union-only at +`MMCA.Common.Application/Auth/Permissions/LayeredPermissionRegistry.cs:12,30,49`). "The question queue" +became "feedback questions" to match `QuestionsManage` (`ConferencePermissions.cs:26`). Anchors re-read +this run: `GetRoleValues` (`MMCA.Common.Shared/Auth/ClaimsPrincipalExtensions.cs:59-67`), `HasRole` +(`:75-77`), `HasPermissionClaim` (`:94-97`); `AuthorizationGate.Evaluate` +(`MMCA.Common.Application/UseCases/Decorators/AuthorizationGate.cs:40`) checks the registry then the claim +at `:46-48` and returns `Error.Forbidden` at `:52-55`; `AddAuthorizationPolicies` "one authorization model" +statement at `MMCA.Common.API/Authorization/AuthorizationExtensions.cs:20-22`, with both contracts +forwarding to one built `PermissionRegistry` at `:133-134`; ADC `IdentityPermissions` +(`MMCA.ADC.Identity.Shared/Authorization/IdentityPermissions.cs`): `UsersRead` at `:13`, the +`UsersManage` / `RolesManage` aliases at `:26,41`, `All` at `:49-52` holding only `UsersRead` (the aliases +are granted by name in `IdentityPermissionGrants.cs:36-38`). Confirmed by the 2026-10-02 audit and carried: +`IPermissionRegistry.HasPermission` (`MMCA.Common.Shared/Auth/Permissions/IPermissionRegistry.cs:29`); +`PermissionRegistry : IPermissionRegistry, IPermissionCatalog` (`PermissionRegistry.cs:16`); +`PermissionRegistryBuilder.Grant` unioning via `HashSet.UnionWith` (`PermissionRegistryBuilder.cs:34`); +`PermissionPolicyProvider` non-`perm:` fall-through (`MMCA.Common.API/Authorization/PermissionPolicyProvider.cs:35`); +`PermissionAuthorizationHandler` two-source body at `PermissionAuthorizationHandler.cs:24-33` (the handler +block is verbatim); handler and provider registration at `AuthorizationExtensions.cs:68`; +`ConferencePermissionGrants.Apply` (Organizer `All` at `:47`, ContentEditor `ContentManagement` at `:48`), +`ConferencePermissions` eleven constants with the seven-member `ContentManagement` subset at `:70`; +`EngagementPermissionGrants.cs:37`; `NotificationPermissionGrants.cs:38`; Store `AddPermissions` in all +three modules (`MMCA.Store.Identity.API/DependencyInjection.cs:66`, Catalog `:45`, Sales `:52`) and its +eleven permissions; no role names in MMCA.Common. ADR context: +`Website/docs-src/adr/020-permission-based-authorization.md` records the Store permissions at `:90-97`, the +ADC grant tests at `:100-103` and the framework-owned endpoints at `:67-73`; its `:60-61` still calls the +token claim optional (ADR drift, not edited here). Nineteen unit tests (6 `PermissionRegistryTests`, 6 +`PermissionCatalogTests`, 4 `PermissionAuthorizationHandlerTests`, 3 `PermissionPolicyProviderTests`, all +`[Fact]`), per the audit. RBAC-not-ABAC framing per +`Website/docs-src/governance/common-ArchitectureScorecard.md:75` section 11 (Weight 3, Maturity 4, Impl 8, 12/24); +that row's own test count is stale against the nineteen. The registration block is the real ADC shape.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/polyglot-persistence.md b/docs-src/articles/polyglot-persistence.md index 8096ebca..35d43e0f 100644 --- a/docs-src/articles/polyglot-persistence.md +++ b/docs-src/articles/polyglot-persistence.md @@ -1,8 +1,8 @@ # One entity model, four databases: polyglot persistence behind a single attribute -> Series: MMCA.Common · Article #11 (deep-dive) · Pillar P3 · Group G07,G03 · Rubric §8 · ADR-018, ADR-113 · +> Series: MMCA.Common · Article #11 (deep-dive) · Pillar P3 · Group G07,G03 · Rubric §8 · ADR-018, ADR-113, ADR-130 · > Status: grounded in `Website/docs-src/onboarding/group-07-persistence-ef-core.md`, -> `group-03-querying-specifications.md`, ADR-018, ADR-113. No em dashes. +> `group-03-querying-specifications.md`, ADR-018, ADR-113, ADR-130. No em dashes. **Subtitle:** A domain entity should not know which database engine stores it. Here is a design where the same entity moves between SQL Server, PostgreSQL, Cosmos DB, and SQLite by changing one attribute, @@ -38,11 +38,11 @@ Database-per-service (ADR-006) is the **Name axis**: *which physical database* o the Conference module's data and the Engagement module's data sit in separate databases that can be deployed and scaled independently. Article 10 covers that axis in full. -Polyglot persistence (ADR-018, extended to a fourth engine by ADR-113) is the **Engine axis**: *which -storage technology* backs an entity, SQL Server vs PostgreSQL vs Cosmos DB vs SQLite, independent of -which logical database it belongs to. The two compose. An entity has a Name (its database) and an -Engine (its technology), and you can change one without touching the other. This article is about the -Engine axis. +Polyglot persistence (ADR-018, extended to a fourth engine by ADR-113, and organized as one strategy +object per engine by ADR-130) is the **Engine axis**: *which storage technology* backs an entity, SQL +Server vs PostgreSQL vs Cosmos DB vs SQLite, independent of which logical database it belongs to. The +two compose. An entity has a Name (its database) and an Engine (its technology), and you can change +one without touching the other. This article is about the Engine axis. ## The configuration hierarchy: where the engine lives @@ -55,44 +55,59 @@ cross-cutting thing: if the entity is an aggregate root, it tells EF to ignore t engines. Above it sits the piece that ADR-018 added: a single, engine-aware -`EntityTypeConfiguration` base. This one class carries *all* the -table-versus-container, schema, and key-mapping logic for every engine. Its `Configure` method reads -the `[UseDataSource(...)]` attribute off the concrete configuration, and if the attribute is absent it -throws `InvalidOperationException` at startup. A configuration with no declared engine is a hard error, -not a silent default. Then it dispatches to a `protected static ApplyEngineConventions` helper that is -a `switch` over the engine, four cases in three branches: - -- **SQL Server and PostgreSQL**, one shared branch deliberately: `ToTable(Name, schema)` where the - schema is the module name derived from the entity's namespace (the segment before "Domain"), - `HasKey(Id)`, and identity-column key generation. PostgreSQL takes the SQL Server mapping unchanged, - module schema and PascalCase identifiers included, so an entity moves between the two engines by - changing its configuration base class and nothing else (ADR-113). PostgreSQL house style (snake_case, - the public schema) is a consumer's naming-convention plugin, not a framework decision. -- **SQLite**: `ToTable(Name)` with no schema, `HasKey(Id)`, and SQLite identity columns. +`EntityTypeConfiguration` base. Its `Configure` method reads the +`[UseDataSource(...)]` attribute off the concrete configuration, and if the attribute is absent it +throws `InvalidOperationException` as the model is built. A configuration with no declared engine is +a hard error, not a silent default. Then it hands the entity to a `protected static +ApplyEngineConventions` helper, and that helper holds no branching at all. Its body is one call: +`DataSourceEngines.For(engine).ApplyKeyAndTableMapping(builder)`. + +The per-engine knowledge lives one level down, in one strategy class per engine (ADR-130). +`IDataSourceEngine` is the internal contract every engine implements: descriptive facts, a small +`Capabilities` record (is the engine relational, how it migrates, how it stamps the row version), and +a handful of behaviour hooks, one of which is the key-and-table mapping. `DataSourceEngines` is a +static registry that holds the four strategies in one array and looks them up by the `DataSource` +enum value. The four mappings: + +- **SQL Server**: `ToTable(Name, schema)` where the schema is the module name derived from the + entity's namespace (the segment before "Domain"), `HasKey(Id)`, and `ValueGeneratedOnAdd()` for a + store-generated key. +- **PostgreSQL**: deliberately the same code as SQL Server, module schema and PascalCase identifiers + included, so an entity moves between the two engines by changing its configuration base class and + nothing else (ADR-113). PostgreSQL house style (snake_case, the public schema) is a consumer's + naming-convention plugin, not a framework decision. +- **SQLite**: `ToTable(Name)` with no schema, `HasKey(Id)`, and an identity column + (`ValueGeneratedOnAdd().UseIdentityColumn(1, 1)`). - **Cosmos DB**: `ToContainer(moduleName).HasPartitionKey(Id)`, one container per module so a module's entities and their relationships co-locate, `HasKey(Id)`, and a client-side `CosmosIntIdValueGenerator` for keys (Cosmos has no server-side `IDENTITY`). -- **Anything else**: a `default` branch that throws `InvalidOperationException`. An engine with no - mapping fails loudly instead of falling through to a relational guess. - -Key generation is conditional in every branch: the engine's generator applies only when the entity's -identifier is store-generated (`typeof(TEntity).IsIdValueGenerated`), and otherwise the key is -`ValueGeneratedNever()`, so an entity that supplies its own ids keeps them on every engine. - -On top of that single base sit four **thin shims**: `EntityTypeConfigurationSQLServer`, +- **Anything else**: `DataSourceEngines.For` throws `InvalidOperationException` for a value with no + registered strategy. An engine with no mapping fails loudly instead of falling through to a + relational guess. + +Key generation is conditional in every strategy: the engine's generator applies only when the +entity's identifier is store-generated (`typeof(TEntity).IsIdValueGenerated`), and otherwise the key +is `ValueGeneratedNever()`, so an entity that supplies its own ids keeps them on every engine. + +The registry is static on purpose: model-building code (this configuration base, the EF conventions, +the soft-delete SQL builder) runs where no DI container is reachable, and the engine set is a closed +enum only the framework extends. A fifth engine is one strategy class plus one line in the registry. +What keeps it that way is a source-scanning fitness test, `DataSourceBranchingFitnessTests`, which +fails the test run on any reference to a concrete engine value outside the strategies and a short, +reasoned allow-list, and also fails when an allow-list entry goes stale. A new `switch` over the +engine cannot quietly reappear in a call site. + +On top of the engine-aware base sit four **thin shims**: `EntityTypeConfigurationSQLServer`, `EntityTypeConfigurationPostgreSQL`, `EntityTypeConfigurationCosmos`, and -`EntityTypeConfigurationSqlite`. Each one is a one-line class. Its entire body is the attribute plus an -empty derivation. Here is the SQL Server shim, near enough verbatim: +`EntityTypeConfigurationSqlite`. None of them has a body. Each is the attribute plus a +semicolon-terminated derivation. Here is the SQL Server shim, verbatim apart from its doc comment: ```csharp [UseDataSource(DataSource.SQLServer)] public abstract class EntityTypeConfigurationSQLServer : EntityTypeConfiguration where TEntity : AuditableBaseEntity - where TIdentifierType : notnull -{ - // no Configure override; all mapping lives in the engine-aware base -} + where TIdentifierType : notnull; ``` The PostgreSQL, Cosmos, and SQLite shims are identical except for the attribute value @@ -132,14 +147,23 @@ public sealed class SessionConfiguration ``` The `Session` entity class does not change. The command handlers do not change. The query handlers do -not change. The DTOs and mappers do not change. The engine is resolved once at startup by the -`EntityDataSourceRegistry`, which reflects over the configuration assemblies, reads each config's -`[UseDataSource]` attribute, and records the engine in a frozen lookup. The right `DbContext` +not change. The DTOs and mappers do not change. Routing is the job of the `EntityDataSourceRegistry`, +a singleton built lazily on first access: it reflects over the configuration assemblies, reads each +config's `[UseDataSource]` attribute (and its logical database name), resolves the pair through +`IDataSourceResolver` into a `DataSourceKey`, and records the result in a frozen lookup, rescanning +once on a miss so a module assembly loaded later is still found. The right `DbContext` (`SQLServerDbContext`, `PostgreSQLDbContext`, `CosmosDbContext`, or `SqliteDbContext`, all sealed subclasses of the abstract `ApplicationDbContext`, one class per engine) is then built per data source, and the whole save and query pipeline routes through it without any caller knowing which engine answered. +One nuance keeps that honest. The attribute declares the engine, and the resolver honors it whenever +the host configures that engine. A host that does not configure the declared engine (a SQL Server +configuration running in a PostgreSQL-only host, say) is served from the engine it does configure, +rather than handed an empty connection string. `EntityTypeConfiguration` exposes that answer as +`EffectiveEngine`, so any hand-written SQL in a configuration body, such as an index filter, targets +the engine actually being built. + ## When a relationship crosses an engine boundary A document store cannot enforce a foreign key into a SQL table. So the moment `Session` moves to @@ -205,22 +229,26 @@ it resolves published `Event` ids and filters `Session.EventId IN (...)`, which four engines. There is even a fitness rule that enforces this discipline: an opt-in -`SpecificationsDoNotNavigateToOtherEntities` test fails the build if a specification navigates across -an entity boundary the way the un-translatable version above does. +`SpecificationsDoNotNavigateToOtherEntities` test fails the test run if a specification navigates +across an entity boundary the way the un-translatable version above does. ## The honest adoption note Here is the part most articles would quietly omit. All of the above is shipped and tested. None of it is running in production yet. -Today, every current production entity configuration uses the `…SQLServer` base. ADC runs SQL Server -only, across four databases (the Name axis), with no entity on PostgreSQL, Cosmos, or SQLite in -production. The SQLite base backs the fast test database in MMCA.Common's own infrastructure tests; -the Cosmos base is exercised by portability tests and a factory test. ADC Conference actually *trialed* the `Session`→Cosmos -and `Room`→SQLite move (the worked example throughout this article): it was built and locally tested, -then **deliberately reverted to all-SQL-Server**, with every framework extension point kept in place. The unified -base, the cross-source degrade convention, the Cosmos-index skip, the SQLite `EnsureCreated` path, the -cross-source specification, and the fitness rule are all in place and green. +Today, every current production entity configuration uses the `EntityTypeConfigurationSQLServer` +base. ADC runs SQL Server only, across four databases (the Name axis), with no entity on PostgreSQL, +Cosmos, or SQLite in production. The SQLite engine backs the fast test database in MMCA.Common's own +infrastructure tests, and the Cosmos engine path is exercised by a portability test whose +configuration declares `[UseDataSource(DataSource.CosmosDB)]` on the engine-aware base. ADC +Conference actually *trialed* the `Session`-to-Cosmos and `Room`-to-SQLite move (the worked example +throughout this article): it was built and locally tested, then **deliberately reverted to +all-SQL-Server**, with every framework extension point kept in place. The unified base and its four +engine strategies, the cross-source degrade convention, the Cosmos-index skip, the `EnsureCreated` +path for a source that names no migrations assembly (always on Cosmos, and on SQLite or PostgreSQL +until one is configured), the cross-source specification, and the fitness rule are all in place and +green. So treat PostgreSQL, Cosmos, and SQLite as supported, exercised extension points rather than dormant ones, but do not read this as "ADC is polyglot in production." It is not. The capability is real and @@ -239,16 +267,19 @@ production, and conflating them is how architecture diagrams start lying. keys and embeds them in the predicate. That is ideal for "published events" or "active tenants," but an unbounded principal set would inline a very large `IN` list. The class documents this limit explicitly; it is a tool for the common bounded shape, not a general join replacement. -- **Concurrency tokens differ by engine.** SQL Server maps `RowVersion` to a server-generated - `rowversion`; SQLite has no server-generated equivalent, so the same token is application-managed - there, and PostgreSQL takes that same application-managed token rather than its native `xmin`, so it - is not the one engine whose entity shape differs (ADR-113). The entity model is one, but the - optimistic-concurrency mechanics underneath are not - identical across engines, and you should know which you are getting. -- **Cosmos has no durable outbox.** `CosmosDbContext` overrides `SupportsOutbox` to `false`. Domain - events from a Cosmos-stored aggregate are dispatched in-process only, with no durable outbox row to - replay from. That is a real reliability difference from the relational path, and it is a deliberate - consequence of Cosmos having no relational `OutboxMessages` table. +- **Concurrency tokens differ by engine.** Each strategy declares its row-version strategy. SQL Server + maps `RowVersion` to a server-generated `rowversion`; SQLite has no server-generated equivalent, so + the same token is client-stamped there, and PostgreSQL takes that same client-stamped token rather + than its native `xmin`, so it is not the one engine whose entity shape differs (ADR-113). Cosmos + declares no row-version strategy at all, so a Cosmos-stored entity has no optimistic-concurrency + token. The entity model is one, but the concurrency mechanics underneath are not identical across + engines, and you should know which you are getting. +- **Cosmos has no durable outbox.** The outbox path runs only when the context's engine reports + `IsRelational` (and the host has the outbox enabled). Cosmos reports `IsRelational: false`, and + `CosmosDbContext` leaves `OutboxMessage` out of its model, so domain events from a Cosmos-stored + aggregate are dispatched in-process only, with no durable outbox row to replay from. That is a real + reliability difference from the relational path, and it is a deliberate consequence of Cosmos having + no relational `OutboxMessages` table. - **Trialed, then reverted, not deployed.** As above: the extension points are built and tested, ADC trialed the Cosmos/SQLite move and rolled it back to all-SQL-Server, and no production polyglot entity has shipped. Validate the engine behavior you depend on against your own data before you lean on it in production. @@ -264,8 +295,10 @@ The pattern ports to any stack with EF Core or a comparable configuration-driven property of the *configuration*, not the entity. 2. Put the engine choice behind a **single attribute or base class**, and make a missing engine a **startup error**, never a silent default. Loud beats subtle. -3. **Centralize the per-engine mapping** in one place (one `switch` over the engine), so the four - engine shims share identical logic and cannot drift. +3. **Give each engine one strategy object** that answers every engine question (mapping, capabilities, + dialect), looked up by the engine value, so call sites read engine facts instead of branching on + the engine. A new engine is then one class and one registry line, and a text-scan test can keep new + branches from creeping back into call sites. 4. **Degrade cross-engine relationships automatically** at model-build time: drop the impossible constraint, keep the scalar FK column, and make it a no-op when everything is on one engine. 5. For cross-engine filters, **resolve principal keys first, then filter by `foreignKey IN (keys)`**. @@ -280,11 +313,12 @@ you do not flip it on day one.** --- **What we covered:** why welding an entity to a storage engine is an expensive, usually irreversible -decision, how MMCA.Common's engine-aware `EntityTypeConfiguration` base plus four thin -`…SQLServer/PostgreSQL/Cosmos/Sqlite` shims re-point the same entity to a different engine through one -`[UseDataSource]` attribute, how `CrossDataSourceDegradeConvention` and `CrossSourceSpecification` keep -cross-engine relationships and predicates working without rewrites, and the honest note that this is -shipped and tested but not yet running in ADC production. +decision, how MMCA.Common's engine-aware `EntityTypeConfiguration` base, its four per-engine +strategies, and four thin `EntityTypeConfigurationSQLServer/PostgreSQL/Cosmos/Sqlite` shims re-point +the same entity to a different engine through one `[UseDataSource]` attribute, how +`CrossDataSourceDegradeConvention` and `CrossSourceSpecification` keep cross-engine relationships and +predicates working without rewrites, and the honest note that this is shipped and tested but not yet +running in ADC production. **Next in the series:** navigation populators, the batch-loader that replaces EF Include chains once a relationship crosses a data-source boundary. @@ -295,47 +329,59 @@ onboarding guide, or `dotnet add package MMCA.Common.Infrastructure` and try it. *Tags: .NET, C Sharp, Software Architecture, Databases, EF Core* -*Notes: verified this run against MMCA.Common v1.205.0 source and the ADR record. The engine set is -four: `DataSource` is an enum of `CosmosDB`, `Sqlite`, `SQLServer` (lines 12 and 15) and `PostgreSQL`, -appended last rather than inserted alphabetically so the three shipped ordinals stay fixed -(`MMCA.Common/Source/Core/MMCA.Common.Application/Interfaces/Infrastructure/Persistence/IDataSourceService.cs:22`; -the ordinal argument is `Website/docs-src/adr/113-postgresql-as-a-first-class-engine.md:52-56`). -`UseDataSourceAttribute` / `[UseDataSource]` and `EntityTypeConfigurationBase` -are unchanged. The engine-aware `EntityTypeConfiguration` base implements the -four provider marker interfaces `IEntityTypeConfigurationSQLServer` / `IEntityTypeConfigurationPostgreSQL` -/ `IEntityTypeConfigurationSqlite` / `IEntityTypeConfigurationCosmos` -(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/Configuration/EntityTypeConfiguration/EntityTypeConfiguration.cs:29-34`), -throws `InvalidOperationException` when the attribute is missing (`:45-48`) and dispatches to -`protected static ApplyEngineConventions` (`:59`), whose `switch` is four cases in three branches: -`case DataSource.SQLServer:` and `case DataSource.PostgreSQL:` share one mapping branch deliberately -(`:72-73`, with the in-code rationale at `:67-71`), then `DataSource.Sqlite` (`:82`), then -`DataSource.CosmosDB` (`:91`), then `default: throw` (`:104`). Key generation in every branch is -conditional on `typeof(TEntity).IsIdValueGenerated` (`:63`) and falls back to `ValueGeneratedNever()`. -The four shims are `EntityTypeConfigurationSQLServer` (`EntityTypeConfigurationSQLServer.cs:17`), -`EntityTypeConfigurationPostgreSQL` (`EntityTypeConfigurationPostgreSQL.cs:22`, carrying -`[UseDataSource(DataSource.PostgreSQL)]`), `EntityTypeConfigurationSqlite` -(`EntityTypeConfigurationSqlite.cs:17`) and `EntityTypeConfigurationCosmos` -(`EntityTypeConfigurationCosmos.cs:18`). The four sealed contexts over the abstract -`ApplicationDbContext` are `SQLServerDbContext` -(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/SQLServerDbContext.cs:15`), -`PostgreSQLDbContext` (`PostgreSQLDbContext.cs:23`, whose mapping conventions deliberately match the -SQL Server ones, `:15-21`), `CosmosDbContext` (`CosmosDbContext.cs:15`, `SupportsOutbox => false`) and -`SqliteDbContext` (`SqliteDbContext.cs:12`). Also carried forward from the previous verification: -`EntityDataSourceRegistry`, `CrossDataSourceDegradeConvention` (Cosmos compensating-index skip), -`CosmosIntIdValueGenerator`, `NamespaceConventions`, `CrossSourceSpecification.BuildAsync` returning -`InlineSpecification` (`localPredicate AND principalKeys.Contains(fk)`, `Expression.AndAlso` not -`Expression.Invoke`), and the `SpecificationsDoNotNavigateToOtherEntities` fitness rule. PostgreSQL -arrives as the fourth first-class engine in ADR-113 (accepted 2026-09-09, -`Website/docs-src/adr/113-postgresql-as-a-first-class-engine.md:4-6`); that record also rejects -`xmin` as the concurrency token in favor of the framework's application-managed `RowVersion` -(`:177-181`). Honest gaps: ADC runs SQL Server only in production (all current production configs use -the SQLServer base); the ADC Conference Session-to-Cosmos / Room-to-SQLite move was trialed (built and -locally tested) then deliberately reverted to all-SQL-Server with the extension points kept, per the -`Website/docs-src/governance/adc-ArchitectureScorecard.md` section 8 note; and ADR-113 records that -PostgreSQL is not yet exercised by a consumer either (`:212-213`). Carried forward without a re-read -this run: the "portability tests and a factory test" description of the Cosmos test coverage, and the -attribution of the `EnsureCreated` path to SQLite rather than to a data source that names no -migrations assembly. The `SessionConfiguration` / `Session` / `Event` code snippets are illustrative of -the shape described in the source, not copied verbatim from a single cited file.* +*Notes: re-verified 2026-10-02 against MMCA.Common v1.221.0 source and the ADR record (the per-engine +strategy shipped in v1.218.0, ADR-130). Re-read this run: the engine-aware base implements the four +provider marker interfaces +(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/Configuration/EntityTypeConfiguration/EntityTypeConfiguration.cs:27-32`), +throws `InvalidOperationException` when `[UseDataSource]` is missing (`:43-46`), records +`EffectiveEngine` (`:48-49`, documented at `:54-61`), and its `protected static ApplyEngineConventions` +(`:69`, rationale comment `:73-76`) is the single call +`DataSourceEngines.For(engine).ApplyKeyAndTableMapping(builder)` (`:77`). +The contract is `IDataSourceEngine` +(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/DataSources/Engines/IDataSourceEngine.cs:18`, +`Capabilities` `:74`, `ApplyKeyAndTableMapping` `:95-97`); the static registry is `DataSourceEngines` +(`DataSourceEngines.cs:19`, four engines in one array `:22-28`, frozen lookup `:30-31`, `For` throws +`InvalidOperationException` for an unregistered value `:40-43`, fifth engine = one class plus one line +`:15-16`, static rather than DI `:9-12`). Per-engine mappings (all in `.../DataSources/Engines/`): +`SQLServerDataSourceEngine.cs:94-107` (table + module schema `:101`, "Shared verbatim with PostgreSQL" +`:100`, `ValueGeneratedOnAdd` `:104`), `PostgreSQLDataSourceEngine.cs:98-103` ("Deliberately identical +to SQL Server" `:98`), `SqliteDataSourceEngine.cs:97-100` (no schema, `UseIdentityColumn(1, 1)`), +`CosmosDataSourceEngine.cs:86-102` (container per module `:94-96`, `CosmosIntIdValueGenerator` `:99`). +Capabilities: SQL Server `MigrationPolicy.Always` / `StoreGenerated` (`SQLServerDataSourceEngine.cs:42`, +`:46`), PostgreSQL and SQLite `WhenAssemblyConfigured` / `ClientStamped` +(`PostgreSQLDataSourceEngine.cs:40`, `:44`; `SqliteDataSourceEngine.cs:39`, `:43`), Cosmos `Never` / +`IsRelational: false` / `RowVersionStrategy.None` (`CosmosDataSourceEngine.cs:42-46`); the policy enum +is `MigrationPolicy.cs:8-20`. The branching gate is +`MMCA.Common/Tests/Architecture/MMCA.Common.Architecture.Tests/Governance/DataSourceBranchingFitnessTests.cs:71` +(stale allow-list entries `:83`). The four shims are semicolon-terminated declarations: +`EntityTypeConfigurationSQLServer.cs:16-20`, `EntityTypeConfigurationPostgreSQL.cs:21-22`, +`EntityTypeConfigurationSqlite.cs:16-17`, `EntityTypeConfigurationCosmos.cs:17-18`. +`EntityDataSourceRegistry` +(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/DataSources/EntityDataSourceRegistry.cs:21-23`) +is built lazily and rescanned once on a miss (`:16-17`, `:61-63`) over a `FrozenDictionary` of +`DataSourceKey` (`:25-28`). Engine substitution for an unconfigured engine is +`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/DataSources/DataSourceResolver.cs:108-128`. +Outbox gating is `context.Engine.Capabilities.IsRelational && outboxEnabled` +(`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/Interceptors/DomainEventSaveChangesInterceptor.cs:236`, +in-process-only branch `:269-275`); `CosmosDbContext` ignores `OutboxMessage` (`CosmosDbContext.cs:124`); +`SupportsOutbox` has no hit under `Persistence/DbContexts` and ADR-130 records its removal +(`Website/docs-src/adr/130-per-engine-data-source-strategy.md:91-95`). The Cosmos engine test is +`MMCA.Common/Tests/Core/MMCA.Common.Infrastructure.Tests/Persistence/DataSources/CosmosConfigurationPortabilityTests.cs:101-103`. +ADR-130 status and refinement of ADR-018/113: `130-per-engine-data-source-strategy.md:3-8`. ADR-113: +accepted and revised `Website/docs-src/adr/113-postgresql-as-a-first-class-engine.md:4-7`, `xmin` +rejected for the shared client-stamped token `:181-185`, no shipped application on PostgreSQL (advisory +Helpdesk canary only) `:216-219`. The ADC trial-and-revert is recorded at +`Website/docs-src/adr/018-polyglot-persistence.md:8-10` (moved from the adc scorecard section 8 note, +which no longer mentions it). Changed this run: the enum `switch` description, the `default: throw` +branch, the `SupportsOutbox` override, the "resolved once at startup" registry wording, the +SQLite-only `EnsureCreated` attribution, and the "Cosmos base ... factory test" coverage claim were +replaced with the source above; Cosmos's missing concurrency token and the engine-substitution nuance +were added. Carried forward from the 2026-10-02 audit without a re-read this run: +`DataSource` ordinals (`MMCA.Common/Source/Core/MMCA.Common.Application/Interfaces/Infrastructure/Persistence/IDataSourceService.cs:22`; +ADR-113 `:52-56`), `CrossDataSourceDegradeConvention`, `CrossSourceSpecification.BuildAsync`, +`NamespaceConventions`, the four sealed context declarations, the +`SpecificationsDoNotNavigateToOtherEntities` rule, `GetPublicSessionFilterHandler`, and ADC's +all-SQL-Server configurations. The `SessionConfiguration` / `Session` / `Event` code snippets are +illustrative of the shape described in the source, not copied verbatim from a single cited file.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/problem-details-http-grpc.md b/docs-src/articles/problem-details-http-grpc.md index f4897f99..613a6604 100644 --- a/docs-src/articles/problem-details-http-grpc.md +++ b/docs-src/articles/problem-details-http-grpc.md @@ -1,7 +1,7 @@ # Problem Details across HTTP and gRPC (RFC 9457) > Series: MMCA.Common · Article #20 · Pillar P2 · Groups G12, G13 · Rubric §9 · -> Status: grounded in `MMCA.Common/CLAUDE.md` (Result pattern, gRPC extraction boundaries), +> Status: grounded in `MMCA.Common/AGENTS.md` (Result pattern, Microservices Extraction Boundaries), > `Website/docs-src/onboarding/group-12-api-hosting-mapping.md`, `group-13-grpc-contracts.md`, and > `Website/docs-src/governance/common-ArchitectureScorecard.md` (§9). No em dashes. @@ -53,7 +53,8 @@ MMCA.Common's whole error story starts from one decision recorded across the cod failures are *values*, not exceptions. Handlers return `Result` carrying an `Error` list, each error typed by an `ErrorType`. The edge's only job is to translate that value into the right wire shape. -On the **HTTP** side, every controller derives from `ApiControllerBase`, whose single job is +On the **HTTP** side, the framework's result-returning controller bases (`EntityControllerBase` among +them) derive from `ApiControllerBase`, whose single job is `HandleFailure(IEnumerable)`. It produces an `ObjectResult` whose status belongs to the *most severe* `ErrorType` present, deliberately not the first error's, so an aggregate built by `Result.Combine` cannot be downgraded by error ordering: a 403 or a 500 travelling alongside a @@ -73,11 +74,12 @@ travels in the Problem Details `errors` array; only the status is ranked. The ac // UnprocessableEntity-> 422 // Failure -> 400 // Unexpected -> 500 +// TooManyRequests -> 429 // // A multi-error failure is ranked, not indexed: GetStatusCode(errors) asks // ErrorTypeSeverity.MostSevere which type wins, most to least severe: -// Unexpected > Unauthorized > Forbidden > Conflict > NotFound -// > UnprocessableEntity > Invariant / Validation / Failure +// Unexpected > Unauthorized > Forbidden > TooManyRequests > Conflict +// > NotFound > UnprocessableEntity > Invariant / Validation / Failure // // Centralizing the map is what keeps every endpoint's error shape identical. ``` @@ -102,10 +104,13 @@ On the **gRPC** side, the same `Result` model crosses the wire unchanged. A gRPC calls the inner C# service, gets a `Result`, and calls `result.ThrowIfFailure()`. That throws a `ResultFailureException` carrying the `Error` list. `GrpcResultExceptionInterceptor`, registered by `AddGrpcServiceDefaults()`, catches it for all four call shapes (unary and the three streaming kinds), -logs it, and rethrows `errors.ToRpcException()`: an `RpcException` whose `StatusCode` comes from a +logs it, and rethrows `errors.ToRpcException()` (or a plain `Internal` status carrying the exception +message when the exception holds no errors): an `RpcException` whose `StatusCode` comes from a `FrozenDictionary` that *mirrors* the HTTP table, picked from the most severe error by the same `ErrorTypeSeverity` ranking the HTTP edge uses, and whose trailing metadata carries -every error as `error-{i}-code/-message/-type/-source/-target` entries. +every error as `error-{i}-code/-message/-type/-source/-target` entries. The message, source and target +values are percent-encoded wherever they fall outside printable ASCII, because gRPC text metadata +accepts nothing else. Both halves of that round trip ship in the framework, in the same file. `errors.ToRpcException()` lives in MMCA.Common's gRPC package (`ResultGrpcExtensions`), so every extracted service emits the same @@ -117,12 +122,13 @@ and rebuild `Result.Failure(errors)`, degrading a transport fault that carries n connection, an exceeded deadline) to a single `Failure` error coded `Grpc.{StatusCode}` rather than letting an exception escape. A consumer's client adapter is then a two-line `catch`: ADC's `SessionBookmarkValidationServiceGrpcAdapter` and `EventLiveValidationServiceGrpcAdapter` catch -`RpcException` and `return ex.ToResult()`, and the caller sees the same `Result` it would have seen -in-process. +`RpcException` and `return ex.ToResult()` or `ex.ToResult()`, and the caller sees the same `Result` +it would have seen in-process. That status-mapping symmetry is the point. The `ErrorType -> status` decision is made once per transport in a frozen table, the translation is a pipeline concern written once in an interceptor, and a `NotFound` is a 404 -over HTTP and a `NotFound` `RpcException` over gRPC because both tables agree. +over HTTP and a `NotFound` `RpcException` over gRPC because both tables agree. The same holds for a +temporary refusal: `TooManyRequests` is a 429 over HTTP and `ResourceExhausted` over gRPC. ## The rest of the §9 contract @@ -147,11 +153,13 @@ a build, not by review. What is left is the last implementation point, and two h it lives. - **The contract snapshot is guarded at two levels, on purpose.** The framework generates an OpenAPI - document: `AddCommonOpenApi()` calls ASP.NET Core's built-in `AddOpenApi()`, `MapCommonOpenApi()` - serves `/openapi/v1.json` outside Production, and an opt-in `MapCommonScalarUi()` renders the Scalar - reference UI from that document. `OpenApiBaselineTests` closes the loop in the framework's own CI: it - boots an in-memory host over that exact registration path (`AddCommonApiVersioning()` + - `AddCommonOpenApi()` + `MapCommonOpenApi()`), fetches `/openapi/v1.json`, normalizes it (the + document: the host registers it with ASP.NET Core's built-in `AddOpenApi()`, `AddCommonOpenApi()` + layers the framework's transformers onto every registered document, `MapCommonOpenApi()` serves + `/openapi/v1.json` outside Production (and fails at startup when no `v1` document is registered), and + an opt-in `MapCommonScalarUi()` renders the Scalar reference UI from that document. + `OpenApiBaselineTests` closes the loop in the framework's own CI: it boots an in-memory host over that + exact registration path (`AddCommonApiVersioning()` + `AddOpenApi()` + `AddCommonOpenApi()` + + `MapCommonOpenApi()`), fetches `/openapi/v1.json`, normalizes it (the host-assigned `servers` block is dropped, object properties are ordered ordinally so generator ordering is not mistaken for drift, array order is preserved because it is contractual), and diffs the result against a committed `openapi-baseline.v1.json`. A change to the generated surface fails the @@ -220,78 +228,60 @@ included), or `dotnet add package MMCA.Common.API` and try it.* *Tags: .NET, C Sharp, Software Architecture, gRPC, API Design* -*Notes: verified type/behavior names: `Result`/`Error`/`ErrorType`, `ApiControllerBase.HandleFailure` -(`MMCA.Common/Source/Presentation/MMCA.Common.API/Controllers/ApiControllerBase.cs:35`, whose doc at -`:22-30` records that the status belongs to the most severe `ErrorType` present and not the first -error's, ranking `Unexpected` 500 > `Unauthorized` 401 > `Forbidden` 403 > `Conflict` 409 > `NotFound` -404 > `UnprocessableEntity` 422 > `Invariant`/`Validation`/`Failure` 400 with ties keeping the earliest -error; implemented at `:47-48` via `ErrorHttpMapping.GetStatusCode(errorList)`), `ErrorHttpMapping` -(the nine-entry `FrozenDictionary` at -`MMCA.Common/Source/Presentation/MMCA.Common.API/Middleware/ErrorHttpMapping.cs:20-31`, including -`[ErrorType.Unexpected] = StatusCodes.Status500InternalServerError` at `:30`, exactly as the article's -table renders it; the list overload at `:50-51` delegates the ranking to `ErrorTypeSeverity.MostSevere`, -which lives in `MMCA.Common.Shared` so the gRPC edge classifies the same aggregate identically), the -exception-handler chain -(`OperationCanceledExceptionHandler` 499, `DomainExceptionHandler` 400, `DbUpdateExceptionHandler` 409, -`ValidationExceptionHandler` 400, `GlobalExceptionHandler` 500), `UnhandledResultFailureFilter` -(200-with-error-body guard), `DisabledFeatureHandler` (404), `X-Pagination` header, header versioning, -`GrpcResultExceptionInterceptor`, `result.ThrowIfFailure()`, `ResultFailureException`, -`errors.ToRpcException()` (FrozenDictionary mirroring the HTTP table). Transport -symmetry is symmetric in ownership too: encoder and decoder both ship in -`MMCA.Common/Source/Presentation/MMCA.Common.Grpc/ResultGrpcExtensions.cs`. `ToRpcException()` at -`:113` ranks by `ErrorTypeSeverity.MostSevere` (`:117`, documented at `:102-108` as the same ranking the -HTTP edge uses) and writes the `error-{i}-code/-message/-type` trailers at `:125-131`; -`Metadata.ToErrors()` at `:165` decodes them back, documented at `:155-158` as the encoder's inverse -with an unrecognized `error-{i}-type` falling back to `ErrorType.Failure` so a newer peer cannot break -an older client; `RpcException.ToResult()` at `:210` and `ToResult()` at `:234` rebuild -`Result.Failure(errors)`, and a trailer-less transport fault degrades to a single `Failure` error coded -`Grpc.{StatusCode}` through `TransportError` at `:285-289`. The consumer-owned `GrpcErrorTrailerParser` -an earlier pass documented is gone from MMCA.ADC: both adapters call the framework decoder -(`MMCA.ADC/Source/Services/MMCA.ADC.Conference.Contracts/SessionBookmarkValidationServiceGrpcAdapter.cs:53,58,79,85` -and `EventLiveValidationServiceGrpcAdapter.cs:56,61,89,94,118,123,150,155`), and their class remarks -(`:20` and `:21` respectively) name "the framework's own `RpcException.ToResult` decoder". Scorecard evidence, -re-verified at source: the "API & Contract Design" row is -`Website/docs-src/governance/common-ArchitectureScorecard.md:89` (weight 2, Maturity 4, Implementation -9, weighted 8/18); line 87 in that file is row 7, Microservices Readiness, and line 79 is the table -header. OpenAPI generation ships: `AddCommonOpenApi()` => `services.AddApiVersioning().AddOpenApi()` -(`MMCA.Common/Source/Presentation/MMCA.Common.API/Startup/WebApplicationBuilderExtensions.cs:493,495`); -`MapCommonOpenApi()` serves `/openapi/v1.json` outside Production -(`MMCA.Common/Source/Presentation/MMCA.Common.API/Startup/Endpoints/OpenApiEndpointExtensions.cs:34`) -plus the opt-in `MapCommonScalarUi()` (same file, `:52`).* - -*Notes (2026-08-22 refresh, MMCA.Common PR #271, squash `8a6c603`; anchors re-verified 2026-09-19, and -line numbers not re-read this pass were dropped rather than carried): the "Trade-offs, honestly" section, -takeaway 5 and the "What we covered" paragraph were rewritten after two in-repo contract-surface fitness -checks landed on `main`. (1) The OpenAPI baseline gate: -`MMCA.Common/Tests/Presentation/MMCA.Common.API.Tests/OpenApi/OpenApiBaselineTests.cs` boots -`OpenApiProbeHost.CreateAsync` (`.../OpenApi/OpenApiProbeHost.cs:28`, a real `WebApplication` on -`UseTestServer` with `AddCommonApiVersioning()` + `AddCommonOpenApi()` at `:40` and -`MapCommonOpenApi()` at `:60`, the registration path recorded in its class doc at `:16`), fetches -`/openapi/v1.json`, normalizes it (volatile root `servers` dropped, object properties ordered ordinally, -array order kept) and asserts equality against the committed -`.../OpenApi/openapi-baseline.v1.json`; deliberate regeneration is -`MMCA_UPDATE_OPENAPI_BASELINE=1`, and the probe controllers stand in for a consumer's controllers so -the gate guards framework document generation while consumer hosts keep their own contract-snapshot -tests. (2) The `[ServiceContract]` purity rule: `ArchitectureRules.ServiceContractsDoNotDependOnServiceInternals` -(`MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Rules/Contracts/ArchitectureRules.Contracts.cs:32`; -the partial class moved under `Rules/Contracts/` since the previous pass), asserted through -`ArchitectureAssert.NoViolations`, which names the failing types; surfaced by -`ServiceContractPurityTestsBase` -(`MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Layering/ServiceContractPurityTestsBase.cs`, -whose remarks record the attribute-driven-not-layer-driven choice and the vacuous-pass case) and -subclassed at -`MMCA.Common/Tests/Architecture/MMCA.Common.Architecture.Tests/Layering/ServiceContractPurityTests.cs`. -`ServiceContractAttribute`'s doc comment -(`MMCA.Common/Source/Core/MMCA.Common.Shared/Abstractions/ServiceContractAttribute.cs`) states the -invariant is enforced by the dedicated rule alongside the ADR-015 transport/layer rules, and that the -attribute is an adoptable marker MMCA.Common applies to no type. Not described in the body: the same -partial class carries a second contract rule, `ServiceContractImplementationsAreNotPublic` -(`Rules/Contracts/ArchitectureRules.Contracts.cs:81`), alongside a -`Bases/Contracts/ContractImplementationTestsBase.cs`, so the `[ServiceContract]` rule surface is a pair -of rules rather than the single purity rule the body names. Scorecard: the Section 9 numbers in the body -(Maturity 4 of 4, Implementation 9 of 10, weighted 8/18) match -`common-ArchitectureScorecard.md:89` on disk today, so the earlier "re-check once the Website PR merges" -caveat is closed. The `ErrorHttpMapping` and severity-ranking code fence changed in the 2026-09-19 -refresh, so `Tools/Scripts/sync-medium-fences.ps1 -Verify` was re-run.* +*Notes (2026-10-02 refresh against MMCA.Common v1.221.0; every anchor below re-read this run, and an +anchor not re-read was dropped rather than carried). HTTP edge: `ApiControllerBase.HandleFailure` +(`MMCA.Common/Source/Presentation/MMCA.Common.API/Controllers/ApiControllerBase.cs:35`; class at `:16`; +ranked status at `:47-48` via `ErrorHttpMapping.GetStatusCode(errorList)`). Not every controller derives +from it: `EntityControllerBase` does (`.../Controllers/EntityControllerBase.cs:34-40`), while +`OAuthControllerBase` (`.../Controllers/OAuthControllerBase.cs:35`) and `ServiceInfoControllerBase` +(`.../Controllers/ServiceInfoControllerBase.cs:30`) derive from `ControllerBase` directly, so the body +says "result-returning controller bases". `ErrorHttpMapping` is the ten-entry +`FrozenDictionary` at +`MMCA.Common/Source/Presentation/MMCA.Common.API/Middleware/ErrorHttpMapping.cs:20-32` +(`[ErrorType.Unexpected]` 500 at `:30`, `[ErrorType.TooManyRequests]` 429 at `:31`), exactly as the +fence renders it; the list overload at `:51-52` (doc from `:41`) delegates to +`ErrorTypeSeverity.MostSevere`. Ranking: `MMCA.Common/Source/Core/MMCA.Common.Shared/Abstractions/ErrorTypeSeverity.cs:38-50` +(Unexpected 70, Unauthorized 60, Forbidden 50, TooManyRequests 45, Conflict 40, NotFound 30, +UnprocessableEntity 20, Invariant/Validation/Failure 10; doc list at `:18-25`; `MostSevere` at `:71`). +Source-doc drift, not an article error: the `ApiControllerBase.cs:25-30` doc comment still lists the +ranking without `TooManyRequests`. Exception chain registered in order at +`MMCA.Common/Source/Presentation/MMCA.Common.API/DependencyInjection.cs:154-158` +(OperationCanceled, Domain, DbUpdate, Validation, Global); `UnhandledResultFailureFilter` added globally +at `:50`. gRPC edge: `GrpcResultExceptionInterceptor.ToTransportException` +(`MMCA.Common/Source/Presentation/MMCA.Common.Grpc/Interceptors/GrpcResultExceptionInterceptor.cs:126-138`) +calls `ToRpcException()` when errors exist and otherwise throws `StatusCode.Internal` with the exception +message. `MMCA.Common/Source/Presentation/MMCA.Common.Grpc/ResultGrpcExtensions.cs`: the +`FrozenDictionary` at `:37-50` (TooManyRequests -> ResourceExhausted at `:49`); +`ToRpcException()` at `:119` (doc `:103-117`, percent-encoding described at `:112-116`) ranks via +`ErrorTypeSeverity.MostSevere` at `:124` and writes code/message/type trailers at `:135-137`, +source/target at `:138-146`, escaping through `EscapeTrailerValue` (`:287`); `ToErrors()` at `:173` +(inverse doc from `:155`) with `ParseErrorType` falling back to `Failure` (`:278`); `ToResult()` at +`:218` and `ToResult()` at `:242`; `TransportError` at `:331`, coding `Grpc.{StatusCode}` at `:333`. +ADC adapters, `MMCA.ADC/Source/Services/MMCA.ADC.Conference.Contracts/`: +`SessionBookmarkValidationServiceGrpcAdapter.cs` catches at `:53,79` and returns `ex.ToResult()` at +`:58` and `ex.ToResult()` at `:85`; `EventLiveValidationServiceGrpcAdapter.cs` catches at +`:56,112,141,173` and returns `ex.ToResult()` at `:61,117,146,178`; class remarks at `:20` and `:21` +name the framework's own `RpcException.ToResult` decoder. OpenAPI: +`AddCommonOpenApi()` (`MMCA.Common/Source/Presentation/MMCA.Common.API/Startup/WebApplicationBuilderExtensions.cs:95-109`, +doc `:82-93`) registers no document; it installs the parameter backfill and the strongly-typed-id +transformers, and the host calls `AddOpenApi()` itself. `MapCommonOpenApi()` at +`.../Startup/Endpoints/OpenApiEndpointExtensions.cs:60` (non-Production guard `:62`, missing-`v1` +startup throw `:67`, `AllowAnonymous` `:74`); `MapCommonScalarUi()` at `:89`. Baseline gate: +`MMCA.Common/Tests/Presentation/MMCA.Common.API.Tests/OpenApi/OpenApiProbeHost.cs` (`CreateAsync` `:28`, +`AddCommonApiVersioning()` `:39`, host `AddOpenApi()` `:40`, `AddCommonOpenApi()` `:41`, +`MapCommonOpenApi()` `:61`, class doc `:15-16`). Contract purity: +`ArchitectureRules.ServiceContractsDoNotDependOnServiceInternals` and the second rule +`ServiceContractImplementationsAreNotPublic` (the latter not described in the body) in +`MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Rules/Contracts/ArchitectureRules.Contracts.cs` +(per the 2026-10-02 audit, `:32` and `:81`; not re-read this run). Scorecard: the "API & Contract +Design" row is `Website/docs-src/governance/common-ArchitectureScorecard.md:73` (weight 2, Maturity 4, +Implementation 9, weighted 8/18); row 7 is at `:71` and the table header at `:63`. Header blockquote +now cites `MMCA.Common/AGENTS.md` ("Microservices Extraction Boundaries" at `:125`), since +`MMCA.Common/CLAUDE.md` only imports it. The fence gained the `TooManyRequests` row and ranking tier this +run; `Tools/Scripts/sync-medium-fences.ps1 -Verify` was not re-run by the author.* + +*Notes (history): 2026-08-22 refresh (MMCA.Common PR #271, squash `8a6c603`) rewrote "Trade-offs, +honestly", takeaway 5 and "What we covered" after the OpenAPI baseline gate and the `[ServiceContract]` +purity rule landed; anchors re-verified 2026-09-19, when the severity-ranking fence was added.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/rate-limiting-brute-force-protection.md b/docs-src/articles/rate-limiting-brute-force-protection.md index 96270b03..e49ce886 100644 --- a/docs-src/articles/rate-limiting-brute-force-protection.md +++ b/docs-src/articles/rate-limiting-brute-force-protection.md @@ -1,13 +1,15 @@ # Defending the API edge: three controls that cover the whole surface > Series: MMCA.Common · Article #30 (deep-dive) · Pillar P2/P4 · Group G08 · Rubric §11 · ADR-019/029/124 · -> Status: grounded in the `MMCA.Common.API` rate-limit source, the `AuthControllerBase` anti-spray -> defaults and the test that pins them, the `MMCA.Common.Infrastructure/Auth` login-protection source, -> both apps' Identity adoption and their UI hosts' circuit ceiling, and +> Status: grounded in the `MMCA.Common.API` rate-limit source (`WebApplicationBuilderExtensions.RateLimiting.cs` +> and `RateLimitingSettings`), the `AuthControllerBase` anti-spray defaults and the test that pins them, the +> `MMCA.Common.Infrastructure/Auth` login-protection source, the three `MMCA.Common.Application` call sites, +> both apps' Identity adoption, the `MMCA.Common.UI.Web/Hardening` kit both UI hosts consume, and > `Website/docs-src/adr/019-rate-limiting.md` (Accepted, revised 2026-08-01, 2026-08-18, 2026-09-07, -> 2026-09-10 and 2026-09-19), `Website/docs-src/adr/029-authentication-brute-force-protection.md` -> (Accepted 2026-06-27, updated through 2026-09-19) and -> `Website/docs-src/adr/124-blazor-circuit-ceiling-ui-edge.md` (Accepted 2026-09-19). No em dashes. +> 2026-09-10, 2026-09-19, 2026-09-30 and 2026-10-01), `Website/docs-src/adr/029-authentication-brute-force-protection.md` +> (Accepted 2026-06-27, revised through 2026-10-01) and +> `Website/docs-src/adr/124-blazor-circuit-ceiling-ui-edge.md` (Accepted 2026-09-19, revised 2026-09-25 and +> 2026-10-01). No em dashes. **Subtitle:** A global "N requests per minute" limiter feels like edge protection until you notice what it cannot do: it cannot key an anonymous login attempt to a principal, because at login time there is no @@ -64,55 +66,60 @@ count. Together they cover the whole edge. ### Layer one: cap the traffic that is both attributable and expensive -`AddCommonRateLimiting` (in `MMCA.Common.API`, -`Source/Presentation/MMCA.Common.API/Startup/WebApplicationBuilderExtensions.cs:386`) installs a -`GlobalLimiter` (`:430-431`) that runs on every request. Its partition function, -`GlobalRateLimitPartition` (`WebApplicationBuilderExtensions.cs:169-194`), makes three decisions in -order, and the order is the whole design. - -First, it exempts infrastructure traffic outright. `IsRateLimitBypassed` -(`WebApplicationBuilderExtensions.cs:75-79`) returns `GetNoLimiter("__infra")` (`:173`) for `/health` -(`:76`), `/alive` (`:77`), JWKS and OIDC discovery under `/.well-known` (`:78`), and any request that -routed to a mapped gRPC method (`IsGrpcEndpoint`, `:79`, implemented at `:136-155`). That last arm is -keyed on the routed endpoint's `Grpc.AspNetCore.Server` metadata (`GrpcServerMetadataNamespace`, -`:128`), never on the request's `Content-Type`, and the remark above it says why (`:62-68`, -SEC-Common-44): a content type is caller-supplied and unverifiable, so keying on one hands any -authenticated account the no-limiter partition for the price of stamping -`Content-Type: application/grpc` on an ordinary request. Endpoint metadata is produced by routing from -the server's own `MapGrpcService` registrations, so it cannot be forged, and the predicate runs from -middleware that sits after `UseRouting`, so the endpoint is already resolved (`:66-68`). All of these -are legitimately high-frequency: a probe that gets throttled is an outage, and a JWKS fetch the auth -middleware depends on must never be capped. +`AddCommonRateLimiting` (in `MMCA.Common.API`, the partial +`Source/Presentation/MMCA.Common.API/Startup/WebApplicationBuilderExtensions.RateLimiting.cs:328`) installs a +`GlobalLimiter` (`:376-377`) that runs on every request. Its partition function, +`GlobalRateLimitPartition` (`WebApplicationBuilderExtensions.RateLimiting.cs:137-162`), makes three decisions +in order, and the order is the whole design. + +First, it exempts infrastructure traffic outright. `IsRateLimitBypassed` (`:42-46`) sends the request to +`GetNoLimiter("__infra")` (`:141`) for `/health` (`:43`), `/alive` (`:44`), JWKS and OIDC discovery under +`/.well-known` (`:45`), and any request that routed to a mapped gRPC method (`IsGrpcEndpoint`, `:46`, +implemented at `:103-122`). That last arm is keyed on the routed endpoint's `Grpc.AspNetCore.Server` +metadata (`GrpcServerMetadataNamespace`, `:95`), never on the request's `Content-Type`, and the remark above +it says why (`:29-35`, SEC-Common-44): a content type is caller-supplied and unverifiable, so keying on one +hands any authenticated account the no-limiter partition for the price of stamping +`Content-Type: application/grpc` on an ordinary request. Endpoint metadata is produced by routing from the +server's own `MapGrpcService` registrations, so it cannot be forged, and the predicate runs from middleware +that sits after `UseRouting`, so the endpoint is already resolved (`:33-35`). All of these are legitimately +high-frequency: a probe that gets throttled is an outage, and a JWKS fetch the auth middleware depends on +must never be capped. Second, it hands anonymous traffic to its own partition, which is a no-limiter for almost all of it. When -`httpContext.User?.Identity?.IsAuthenticated != true` (`:176`) the request goes to `AnonymousPartition` -(`:178`, declared at `:91-101`), which returns `GetNoLimiter("__anonymous")` (`:101`) for every path but -one. That is the deliberate gap: public reads are output-cached and cheap, anonymous Blazor Server -browsing shares one IP, and login brute-force has its own controls. None of those should be counted by a +`httpContext.User?.Identity?.IsAuthenticated != true` (`:144`) the request goes to `AnonymousPartition` +(`:146`, declared at `:58-68`), which returns `GetNoLimiter("__anonymous")` (`:68`) for every path but one. +That is the deliberate gap: public reads are output-cached and cheap, anonymous Blazor Server browsing +shares one IP, and login brute-force has its own controls (`:52-57`). None of those should be counted by a per-principal limiter. -The exception is a real-time hub. `IsAnonymousHubRequest` (`:111-121`) matches the request path against +The exception is a real-time hub. `IsAnonymousHubRequest` (`:78-88`) matches the request path against `HubPathPrefixes` (default `["/hubs"]`, `RateLimitingSettings.cs:91`), and a match is metered per client -IP at `AnonymousHubPermitLimit` (default 60, `RateLimitingSettings.cs:99`) under Redis scope `"hub"` with -`allowDistributed: true` (`WebApplicationBuilderExtensions.cs:93-100`). The reason sits on the setting -(`RateLimitingSettings.cs:74-90`, SEC-ADC-25): the gateway bypasses `/hubs` at the edge, because ADR-024's -hub authenticates from a query-string token the edge cannot read, which leaves `/hubs/*/negotiate` as the -one anonymous route nothing else counts, where an unauthenticated loop costs full middleware plus -auth-reject CPU per request. Authenticated hub traffic is untouched by this: it already takes the per-user -partition (`RateLimitingSettings.cs:87-89`). - -Third, and only for an authenticated caller, it caps. The partition key is the principal's identity name, -falling back to `FindUserIdValue()`, the subject claim (`:182`), then the remote IP, then a literal -`"authenticated"` (`WebApplicationBuilderExtensions.cs:181-184`). That key goes to -`CreateLimitedPartition` (`:186-193`, declared at `:238-289`), which by default builds a fixed one-minute +IP at `AnonymousHubPermitLimit` (default 60, `RateLimitingSettings.cs:99`) under Redis scope `"hub"` +(`WebApplicationBuilderExtensions.RateLimiting.cs:63`) with `allowDistributed: true` (`:67`). A hub request +with no readable IP is not waved through: it shares one `"anonymous-hub"` bucket (`:62`). The reason for +metering sits on the setting (`RateLimitingSettings.cs:74-90`, SEC-ADC-25): the gateway bypasses `/hubs` at +the edge, because ADR-024's hub authenticates from a query-string token the edge cannot read, which leaves +`/hubs/*/negotiate` as the one anonymous route nothing else counts, where an unauthenticated loop costs full +middleware plus auth-reject CPU per request. Authenticated hub traffic is untouched by this: it already +takes the per-user partition (`RateLimitingSettings.cs:87-89`). + +Third, and only for an authenticated caller, it caps. The partition key is the subject claim from +`FindUserIdValue()`, falling back to the principal's identity name, then the remote IP, then a literal +`"authenticated"` (`WebApplicationBuilderExtensions.RateLimiting.cs:149-152`). The subject leads because it +is unique per account, while the name claim carries the full name, which two users can share (`:124-126`). +The final fallback is a shared bucket, not a free pass: an authenticated request with no subject, no name +and no IP is still counted, together with every other such request. That key goes to +`CreateLimitedPartition` (`:154-161`, declared at `:207-258`), which by default builds a fixed one-minute window with a permit limit of `GlobalPermitLimit`, which defaults to 300 (`RateLimitingSettings.cs:40`), and a queue limit of zero so overage is rejected rather than buffered -(`WebApplicationBuilderExtensions.cs:282-288`). Rejection is a `429 Too Many Requests` (`:428`). +(`WebApplicationBuilderExtensions.RateLimiting.cs:251-257`). Rejection is a `429 Too Many Requests` +(`:374`). The code is short enough to read whole. This is condensed from the real partition function -(`WebApplicationBuilderExtensions.cs:169-194`) plus the anonymous partition it delegates to (`:91-101`). -The factory both of them call has two further branches, a sliding window (`:270-280`) and a shared Redis -counter (`:247-268`), which are the configuration layer covered further down; neither is on by default: +(`WebApplicationBuilderExtensions.RateLimiting.cs:137-162`) plus the anonymous partition it delegates to +(`:58-68`). The factory both of them call has two further branches, a sliding window (`:239-249`) and a +shared Redis counter (`:216-237`), which are the configuration layer covered further down; neither is on by +default: ```csharp // Illustrative of the real GlobalRateLimitPartition shape (condensed, default settings). @@ -125,10 +132,10 @@ internal static RateLimitPartition GlobalRateLimitPartition(HttpContext if (ctx.User?.Identity?.IsAuthenticated != true) // the deliberate gap layers two and three fill return AnonymousPartition(ctx, settings); - var partitionKey = ctx.User.Identity.Name // attributable to a principal - ?? ctx.User.FindUserIdValue() // the subject claim + var partitionKey = ctx.User.FindUserIdValue() // the subject claim: unique per account + ?? ctx.User.Identity.Name // the name claim: a full name, not unique ?? ctx.Connection.RemoteIpAddress?.ToString() - ?? "authenticated"; + ?? "authenticated"; // one shared bucket, still counted return CreateLimitedPartition(ctx, partitionKey, redisScope: "global", permitLimit: settings.GlobalPermitLimit, // default 300 @@ -148,10 +155,11 @@ private static RateLimitPartition AnonymousPartition(HttpContext ctx, Ra : RateLimitPartition.GetNoLimiter("__anonymous"); ``` -The same method registers three named policies alongside the global limiter. Two of them, `FixedPolicy` -(`WebApplicationBuilderExtensions.cs:436-443`) and `UserPolicy` (`:445`), are purely opt-in: nothing -applies them automatically, and they are there for the endpoint that knows it is special. The third is the -per-IP auth throttle registered at `:455-457`, and unlike the other two the framework attaches it for +The same registration adds three named policies alongside the global limiter. Two of them, `FixedPolicy` +(`WebApplicationBuilderExtensions.RateLimiting.cs:382-389`) and `UserPolicy` (`:391`, partitioned +subject-first like the global limiter by `UserPolicyRateLimitPartition` at `:172-187`), are purely opt-in: +nothing applies them automatically, and they are there for the endpoint that knows it is special. The third +is the per-IP auth throttle registered at `:401-403`, and unlike the other two the framework attaches it for you. That is layer three. ### Layer two: a pre-authentication guard keyed on the submitted identity @@ -161,53 +169,57 @@ registration endpoints live on it. `ILoginProtectionService` (`Source/Core/MMCA.Common.Application/Auth/ILoginProtectionService.cs:10`) is the contract, and `LoginProtectionService` (`Source/Core/MMCA.Common.Infrastructure/Auth/LoginProtectionService.cs:19`) is the implementation. It is registered unconditionally by `AddInfrastructure` -(`Source/Core/MMCA.Common.Infrastructure/DependencyInjection.cs:72`) via -`TryAddScoped()` (`DependencyInjection.cs:168`), so every +(`Source/Core/MMCA.Common.Infrastructure/DependencyInjection.cs:57`) via +`TryAddScoped()` (`DependencyInjection.cs:158`), so every host that wires infrastructure has it. Its state lives entirely in `ICacheService`, never in a table. It keys on the *submitted* identity and the client IP, not on a principal, which is exactly what lets it work before authentication. **Login lockout, keyed by email.** `IncrementFailedAttemptsAsync(email)` -(`LoginProtectionService.cs:64`) counts consecutive failures under a `login:attempts:{email}` cache key -(`AttemptsKey`, `:47`) inside a window of `FailedAttemptWindowMinutes` (default 30, +(`LoginProtectionService.cs:53`) counts consecutive failures under a `login:attempts:{email}` cache key +(`AttemptsKey`, `:36`) inside a window of `FailedAttemptWindowMinutes` (default 30, `LoginProtectionSettings.cs:31`). Once the count reaches `MaxFailedAttempts` (default 5, `LoginProtectionSettings.cs:18`), it writes a lockout key with exponential backoff: `Math.Min(1 << Math.Min(excessAttempts, 30), _settings.MaxLockoutSeconds)` -(`LoginProtectionService.cs:88`), so each extra failure doubles the wait up to the `MaxLockoutSeconds` +(`LoginProtectionService.cs:77`), so each extra failure doubles the wait up to the `MaxLockoutSeconds` cap (default 300, `LoginProtectionSettings.cs:24`). The inner `Math.Min(excessAttempts, 30)` clamps the shift exponent: a large `excessAttempts` would overflow the `int` shift (C# masks the count to five -bits, so `1 << 32` wraps back to 1), silently shrinking the lockout, and 30 already exceeds any -permitted cap. `CheckLockoutAsync(email)` (`LoginProtectionService.cs:50`) returns -`Result.Failure(Error.Unauthorized("Auth.TooManyAttempts", ...))` while the lockout key is present -(`:55-60`), and `ResetFailedAttemptsAsync(email)` (`:94`) clears both the attempt and lockout keys on a -successful login (`:96-97`). +bits, so `1 << 31` is negative and `1 << 32` wraps back to 1), silently shrinking the lockout, and 30 +already exceeds any permitted cap. `CheckLockoutAsync(email)` (`LoginProtectionService.cs:39`) returns +`Result.Failure(Error.TooManyRequests("Auth.TooManyAttempts", ...))` while the lockout key is present +(`:44-48`), and `ResetFailedAttemptsAsync(email)` (`:83`) clears both the attempt and lockout keys on a +successful login (`:85-86`). That `{email}` is the *normalized* address, not the raw request string, and the difference is the whole -control. Both key builders route the submitted value through `NormalizeIdentity` -(`LoginProtectionService.cs:34-43`), which runs it through the same `Email` value object the user lookup -uses (trim and lowercase, falling back to a plain trim-and-lowercase when the address is malformed), so -`LockoutKey` (`:45`) and `AttemptsKey` (`:47`) build one key per account. Key off raw input instead and -`User@x.com`, `user@x.com` and a padded variant hit one account but get three independent counters: -an attacker defeats the backoff by varying capitalization. +control. Both key builders, `LockoutKey` (`LoginProtectionService.cs:34`) and `AttemptsKey` (`:36`), route +the submitted value through `EmailIdentity.Normalize` +(`Source/Core/MMCA.Common.Infrastructure/Auth/EmailIdentity.cs:22-31`), the one address normalization the +auth services share. It runs the address through the same `Email` value object the user lookup uses and +falls back to a plain trim-and-lowercase when the address is malformed, so both builders produce one key +per account. Key off raw input instead and `User@x.com`, `user@x.com` and a padded variant hit one account +but get three independent counters: an attacker defeats the backoff by varying capitalization +(`LoginProtectionService.cs:25-33`). **Registration throttle, keyed by IP.** `CheckRegistrationRateLimitAsync(ip)` -(`LoginProtectionService.cs:101`) fails with -`Error.Unauthorized("Auth.RegistrationRateLimitExceeded", ...)` (`:111-116`) once +(`LoginProtectionService.cs:90`) fails with +`Error.Unauthorized("Auth.RegistrationRateLimitExceeded", ...)` (`:100-105`) once `MaxRegistrationsPerIpPerHour` (default 10, `LoginProtectionSettings.cs:37`) signups from one IP land inside `RegistrationRateLimitWindowMinutes` (default 60, `LoginProtectionSettings.cs:43`), tracked under a -`registration:ip:{ip}` key (`RegistrationKey`, `LoginProtectionService.cs:136`, read at `:108`). -`IncrementRegistrationCountAsync(ip)` (`:120`) bumps that counter. A missing or empty IP is a deliberate -no-op that fails open (`:103-106`, `:122-125`): the check returns `Result.Success()` rather than blocking -a request it cannot attribute. - -Every check returns `Result` (ADR-013), so the HTTP edge maps a lockout or a throttle to a uniform `401` -without the endpoint special-casing it. And because the counters live in the same swappable -`ICacheService` substrate, they self-expire by TTL: a lockout is inherently ephemeral, so cache expiry -*is* the reset. +`registration:ip:{ip}` key (`RegistrationKey`, `LoginProtectionService.cs:125`, built at `:97` and read at +`:98`). `IncrementRegistrationCountAsync(ip)` (`:109`) bumps that counter. A missing or empty IP is a +deliberate no-op that fails open (`:92-95`, `:111-114`): the check returns `Result.Success()` rather than +blocking a request it cannot attribute. + +Every check returns `Result` (ADR-013), so the HTTP edge maps each failure through the shared error-type +table without the endpoint special-casing it, and the two failures land on different status codes. The +lockout is a `TooManyRequests` error, which maps to `429` (`Source/Presentation/MMCA.Common.API/Middleware/ErrorHttpMapping.cs:31`); +the registration throttle is an `Unauthorized` error, which maps to `401` (`ErrorHttpMapping.cs:26`). And +because the counters live in the same swappable `ICacheService` substrate, they self-expire by TTL: a +lockout is inherently ephemeral, so cache expiry *is* the reset. Here is the backoff, the one line that does the work. It mirrors the tail of -`IncrementFailedAttemptsAsync` (`LoginProtectionService.cs:80-90`), with the source comment condensed and +`IncrementFailedAttemptsAsync` (`LoginProtectionService.cs:69-79`), with the source comment condensed and the trailing `.ConfigureAwait(false)` elided: ```csharp @@ -215,8 +227,8 @@ if (newCount >= _settings.MaxFailedAttempts) // default 5 { // newCount is a long; clamp before the int shift. var excessAttempts = (int)Math.Min(newCount - _settings.MaxFailedAttempts, int.MaxValue); - // Clamp the shift exponent to 30: a large excessAttempts would overflow the int shift - // (C# masks the count to 5 bits, so 1 << 32 wraps back to 1, shrinking the lockout). + // Clamp the shift exponent to 30: C# masks int shift counts to 5 bits, so 1 << 31 is + // negative and 1 << 32 wraps back to 1, silently shrinking the lockout. var lockoutSeconds = Math.Min(1 << Math.Min(excessAttempts, 30), _settings.MaxLockoutSeconds); // doubles, cap 300s // LockoutKey normalizes the email first: one key per account, no principal needed. await cacheService.SetAsync(LockoutKey(email), true, TimeSpan.FromSeconds(lockoutSeconds), cancellationToken); @@ -232,21 +244,25 @@ thousand different addresses. Every per-account counter reads one failure, nothi limiter never sees it either, because the attempts are anonymous and the anonymous partition meters only the hub paths. -`RateLimitPolicyAuthIp`, the `"auth-ip"` policy (`WebApplicationBuilderExtensions.cs:48`, rationale in its -XML docs at `:41-47`), is the control shaped for that: a fixed one-minute window keyed on the client IP, -applied to the anonymous credential endpoints only. Its partition selector is `AuthIpRateLimitPartition` -(`:311-325`), which reads `Connection.RemoteIpAddress` (`:313`), the same canonical source the global -partition uses and the value `UseForwardedHeaders` has already resolved from `X-Forwarded-For` earlier in -the shared pipeline (`:447-454`). An IP it cannot read returns `GetNoLimiter("__unknown-ip")` (`:316`) -rather than collapsing every unattributable request into one shared bucket, which would throttle the -in-process test server to a standstill; that is the same fail-open posture the global limiter takes for -traffic it cannot attribute. Everything else goes through the same factory with -`PermitLimit = AuthIpPermitLimit` and `QueueLimit = 0` (`:317-324`), rejected with the same `429`. It is -registered by the same `AddCommonRateLimiting` call (`:455-457`), which takes a fifth parameter for it: +`RateLimitPolicyAuthIp`, the `"auth-ip"` policy (`WebApplicationBuilderExtensions.RateLimiting.cs:23`, +rationale in its XML docs at `:16-22`), is the control shaped for that: a fixed one-minute window keyed on +the client IP, applied to the anonymous credential endpoints only. Its partition selector is +`AuthIpRateLimitPartition` (`:280-294`), which reads `Connection.RemoteIpAddress` (`:282`), the same +canonical source the global partition uses and the value `UseForwardedHeaders` has already resolved from +`X-Forwarded-For` earlier in the shared pipeline (`:393-396`). An IP it cannot read returns +`GetNoLimiter("__unknown-ip")` (`:284-285`) rather than collapsing every unattributable request into one +shared bucket, which would throttle the in-process test server and the integration tier to a standstill +(`:264-270`). That is a deliberate difference from the global limiter, which does pool unattributable +traffic into the shared `"authenticated"` and `"anonymous-hub"` buckets (`:149-152`, `:62`), and ADR-019 +records the difference rather than a shared posture (`Website/docs-src/adr/019-rate-limiting.md:88-93`, +`:283-295`). Everything else goes through the same factory with `PermitLimit = AuthIpPermitLimit` and +`QueueLimit = 0` (`WebApplicationBuilderExtensions.RateLimiting.cs:286-293`), rejected with the same `429`. +It is registered by the same `AddCommonRateLimiting` call (`:401-403`), which takes a fifth parameter for +it: ```csharp // Illustrative of the real AuthIpRateLimitPartition shape (condensed). -// Fail open on an IP it cannot read, rather than pooling every such request into one bucket. +// No limiter on an IP it cannot read, rather than pooling every such request into one bucket. internal static RateLimitPartition AuthIpRateLimitPartition(HttpContext ctx, RateLimitingSettings settings) { var clientIp = ctx.Connection.RemoteIpAddress?.ToString(); @@ -262,12 +278,12 @@ internal static RateLimitPartition AuthIpRateLimitPartition(HttpContext The signature that registers all of this reads `AddCommonRateLimiting(int permitLimit = 100, int queueLimit = 2, int perUserPermitLimit = 30, int globalPermitLimit = 300, int authIpPermitLimit = 30)` -(`WebApplicationBuilderExtensions.cs:386`), and every host calls exactly that overload. The default of 30 -rather than a tighter 10 is documented on the parameter itself (`:378-385`): Blazor Server circuits issue -the login call server-side, so every Server-circuit user shares the UI host's IP and a legitimate login -burst has to fit inside the window. At 30 a minute a spray still drops from unlimited to roughly 43,000 -attempts per day per IP, with per-account lockout intact on top (`:382-384`). Tightening toward 10 waits -on real client IPs being forwarded end to end. +(`WebApplicationBuilderExtensions.RateLimiting.cs:328`), and every host calls exactly that overload. The +default of 30 rather than a tighter 10 is documented on the parameter itself (`:320-327`): Blazor Server +circuits issue the login call server-side, so every Server-circuit user shares the UI host's IP and a +legitimate login burst has to fit inside the window. At 30 a minute a spray still drops from unlimited to +roughly 43,000 attempts per day per IP, with per-account lockout intact on top (`:324-326`). Tightening +toward 10 waits on real client IPs being forwarded end to end. The part worth copying is not the policy, though. It is that the framework attaches it for you. `AuthControllerBase.LoginAsync` @@ -279,7 +295,7 @@ inheriting the base gets per-IP protection without opting in. Its sibling `reset-password` (`:102`), so the framework's default surface is four anonymous credential actions; ADR-019 records both apps extending the same policy to the two email-confirmation actions on their `EmailConfirmationController`, which the framework bases do not own -(`Website/docs-src/adr/019-rate-limiting.md:66-69`). The base documents why the default is attached rather +(`Website/docs-src/adr/019-rate-limiting.md:70-73`). The base documents why the default is attached rather than opt-in (`AuthControllerBase.cs:20-29`): a policy that ships in the framework but leaves each app to attach it is a policy an app can silently lack, and an app that simply inherited these actions would have no spray protection at all. A consumer that inherits the base without calling `AddCommonRateLimiting` fails @@ -294,17 +310,18 @@ window there would throttle ordinary token renewal for everyone behind that host ### The settings layer: the same three controls, tunable without a recompile There are three controls, not four: the settings layer is configuration, not another defence. ADR-019 -(`Website/docs-src/adr/019-rate-limiting.md:142-199`) records what it buys, the ability to tune the three +(`Website/docs-src/adr/019-rate-limiting.md:149-206`) records what it buys, the ability to tune the three without a recompile, and one way to make several of them mean the same thing behind a load balancer. The limits live in `RateLimitingSettings` (`Source/Presentation/MMCA.Common.API/RateLimiting/RateLimitingSettings.cs:21`), bound from a `"RateLimiting"` configuration section (`:24`) with a `[Range]` on every count. `AddCommonRateLimiting` has three overloads: the permit-count one quoted above -(`WebApplicationBuilderExtensions.cs:386`), which only builds a settings object and delegates; an -`IConfiguration` one that binds the section and falls back to a default instance when it is absent -(`:404-412`); and the settings one that actually calls `AddRateLimiter` (`:422`). Every default matches -the framework's shipped value, so a host that configures nothing behaves exactly as described above. +(`WebApplicationBuilderExtensions.RateLimiting.cs:328-336`), which only builds a settings object and +delegates; an `IConfiguration` one that binds the section with validation on start and falls back to a +default instance when it is absent (`:346-358`, `ValidateOnStart` at `:353`); and the settings one that +actually calls `AddRateLimiter` (`:368-405`, the call at `:372`). Every default matches the framework's +shipped value, so a host that configures nothing behaves exactly as described above. The section also holds the two hub controls layer one uses, `HubPathPrefixes` (`RateLimitingSettings.cs:91`) and `AnonymousHubPermitLimit` (`:99`), so which anonymous paths are @@ -313,20 +330,21 @@ metered, and how hard, is a deployment decision rather than a constant. Two knobs do more than relocate a constant. `Algorithm` (`RateLimitingSettings.cs:53`) can select `RateLimitAlgorithm.SlidingWindow` (`RateLimitAlgorithm.cs:22`) instead of the default `FixedWindow` (`:15`), dividing the same one-minute window into `SegmentsPerWindow` segments (default 4, -`RateLimitingSettings.cs:62`) so a caller can no longer spend a full minute's allowance at the end of one +`RateLimitingSettings.cs:62`) so a caller cannot spend a full minute's allowance at the end of one window and again at the start of the next. That is a smoothing choice, not a new cap. And `Distributed` (`:72`, default `false`) swaps the in-process counter for `RedisFixedWindowRateLimiter` (`RateLimiting/RedisFixedWindowRateLimiter.cs:37`), which counts one key per partition per minute in Redis so N replicas share one allowance instead of holding N of them. -Exactly three partitions may take that shared counter: the global limiter -(`WebApplicationBuilderExtensions.cs:186-193`, Redis scope `"global"` at `:189`), `UserPolicy` -(`UserPolicyRateLimitPartition`, `:204-218`, scope `"user"` at `:213`), and the anonymous hub partition -(`:93-100`, scope `"hub"` at `:96`). The `"auth-ip"` policy passes `allowDistributed: false` (`:324`), and -so does `FixedPolicy` (`:436-443`). That is deliberate, and the reason sits on the factory parameter -itself (`:233-237`): the per-IP window is a coarse backstop in front of a control that is already global -and stateful, the per-email lockout, so buying a tighter limit with a Redis round trip on the login path is -the wrong trade. ADR-019 states the same three-partition scope (`019-rate-limiting.md:171-175`). +Exactly three partitions may take that shared counter: the global limiter (Redis scope `"global"`, +`WebApplicationBuilderExtensions.RateLimiting.cs:157`, `allowDistributed: true` at `:161`), `UserPolicy` +(scope `"user"` at `:182`, `:186`), and the anonymous hub partition (scope `"hub"` at `:63`, `:67`). The +`"auth-ip"` policy passes `allowDistributed: false` (`:293`), and so does `FixedPolicy` (`:389`). That is +deliberate, and the reason sits on the factory parameter itself (`:202-206`): per-account login protection +already backs the per-IP window, and a login throttle that fails open on a Redis outage is a worse trade +than one that stays local. ADR-019 states the same three-partition scope and adds the cost side, that +making `auth-ip` distributed would put a Redis round trip on the login path to tighten a limit whose +per-replica multiplication its generous default already absorbs (`019-rate-limiting.md:172-189`). The honest framing is that the section reaches almost none of it. ADC's Notification service is the one host that declares one: `"RateLimiting": { "AnonymousHubPermitLimit": 600 }` @@ -334,12 +352,12 @@ host that declares one: `"RateLimiting": { "AnonymousHubPermitLimit": 600 }` rationale above it (`:44-52`) that the venue's NAT puts roughly 67 attendees behind a single address, so a 60-per-minute budget goes in seconds when the room reconnects. A declared section only reaches the limiter through the `IConfiguration` overload, and no host calls it: that service calls the permit-count overload -(`MMCA.ADC.Notification.Service/Program.cs:141`), which builds a `RateLimitingSettings` from its five -integer parameters (`WebApplicationBuilderExtensions.cs:386-394`) and never reads +(`MMCA.ADC.Notification.Service/Program.cs:137`), which builds a `RateLimitingSettings` from its five +integer parameters (`WebApplicationBuilderExtensions.RateLimiting.cs:328-336`) and never reads `RateLimitingSettings.SectionName`, so the hub limit in force there is the shipped default of 60 (`RateLimitingSettings.cs:99`). Every other host calls the same permit-count overload, and the one value either app passes into it is ADC Identity's `authIpPermitLimit` -(`MMCA.ADC.Identity.Service/Program.cs:161-162`). Both apps therefore run the in-memory fixed-window +(`MMCA.ADC.Identity.Service/Program.cs:159-160`). Both apps therefore run the in-memory fixed-window defaults this article describes. ### Where the three controls meet @@ -357,27 +375,36 @@ Both real apps adopt the second layer through one shared base rather than wiring check-before, increment-on-failure, reset-on-success sequence around login and the registration check around sign-up lives in `AuthenticationServiceBase` (`Source/Core/MMCA.Common.Application/Auth/AuthenticationServiceBase.cs`), which calls -`CheckLockoutAsync` (`:169`), `IncrementFailedAttemptsAsync` (`:189`, `:196`), `ResetFailedAttemptsAsync` -(`:240`), `CheckRegistrationRateLimitAsync` (`:267`), and `IncrementRegistrationCountAsync` (`:326`). The -ADC and Store `AuthenticationService` are sealed subclasses that take `ILoginProtectionService` as a -constructor parameter (ADC `AuthenticationService.cs:50`, Store `:26`) and forward it to the base -constructor (ADC `:60`, Store `:35`); ADC's subclass additionally injects `IExternalLoginEmailVerifier` -(`:51`) for its external OAuth flow. The login and registration workflow, and every protection call in it, -lives once in the base. One framework call site sits outside it: `ResetPasswordHandlerBase` takes -`ILoginProtectionService` as a constructor dependency -(`Source/Core/MMCA.Common.Application/Users/UseCases/ResetPassword/ResetPasswordHandlerBase.cs:47`) and +`CheckLockoutAsync` (`:118`), `IncrementFailedAttemptsAsync` (`:138`, `:145`, and a third time later in the +class at `:531`), `ResetFailedAttemptsAsync` (`:189`), `CheckRegistrationRateLimitAsync` (`:216`), and +`IncrementRegistrationCountAsync` (`:275`). The ADC and Store `AuthenticationService` are sealed subclasses +that take `ILoginProtectionService` as a constructor parameter (ADC `AuthenticationService.cs:53`, Store +`:29`) and forward it to the base constructor (ADC `:61`, Store `:36`); ADC's subclass additionally injects +`IExternalLoginEmailVerifier` (`:54`) for its external OAuth flow. The login and registration workflow, and +every protection call in it, lives once in the base. + +Two framework call sites sit outside it. `ResetPasswordHandlerBase` takes `ILoginProtectionService` as a +constructor dependency +(`Source/Core/MMCA.Common.Application/Users/UseCases/ResetPassword/ResetPasswordHandlerBase.cs:45`) and calls `ResetFailedAttemptsAsync(request.Email)` once the new credential is persisted (`:110`), so a user -who resets the password because of a lockout is not left locked out by it, which ADR-029 records at -`Website/docs-src/adr/029-authentication-brute-force-protection.md:95-98`. Settings bind from the -`"LoginProtection"` configuration section (`LoginProtectionSettings.cs:12`). +who resets the password because of a lockout is not left locked out by it. `ChangePasswordHandlerBase` +takes it too +(`Source/Core/MMCA.Common.Application/Users/UseCases/ChangePassword/ChangePasswordHandlerBase.cs:47`) and +runs the whole sequence on its own key: `CheckLockoutAsync` before the current-password check (`:89`), +`IncrementFailedAttemptsAsync` on a wrong current password (`:97`) and `ResetFailedAttemptsAsync` on a +right one (`:102`). That is the one principal-keyed use of the service: the counter is +`password-change:{userId}` (`:129`, rationale at `:37`), so a signed-in session is not an unthrottled +password oracle, and a change-password lockout does not lock the owner out of sign-in. ADR-029 records both +(`Website/docs-src/adr/029-authentication-brute-force-protection.md:61-66`, `:103-110`). Settings bind from +the `"LoginProtection"` configuration section (`LoginProtectionSettings.cs:12`). They adopt the third the same way, and the redundancy in that is deliberate. ADC's Identity service re-declares the attribute on both actions it overrides (`MMCA.ADC.Identity.API/Controllers/AuthController.cs:54` on register and `:108` on login, the overrides at `:58` and `:112`) and tunes the window from configuration -(`MMCA.ADC.Identity.Service/Program.cs:161-162`, after deleting its own local copy of the policy because a -duplicate policy name throws at startup, `:153-160`). Store's Identity service takes the framework default -(`MMCA.Store.Identity.Service/Program.cs:136`) and its `RegisterAsync` override re-declares the attribute +(`MMCA.ADC.Identity.Service/Program.cs:159-160`, after deleting its own local copy of the policy because a +duplicate policy name throws at startup, `:151-158`). Store's Identity service takes the framework default +(`MMCA.Store.Identity.Service/Program.cs:135`) and its `RegisterAsync` override re-declares the attribute too (`MMCA.Store.Identity.API/Controllers/AuthController.cs:50`, the override at `:54`), with a doc comment saying exactly what that line is for (`:41-46`): the attribute is inherited by an override, so re-applying it is convention parity with ADC plus a regression pin, not a live hole being closed. @@ -394,40 +421,54 @@ through `GetCustomAttributes(inherit: true)`. The test's own comment is careful (`:57-60`): it pins the mechanism, it does not bless a bare override. Applying the attribute on every override stays the convention precisely because a dropped security attribute is invisible. -### The UI origin needs a different ceiling, and it lives in the apps +### The UI origin is its own edge, and the framework ships its kit + +Every control above bounds traffic at an API host. The server-rendered Blazor UI host is the case none of +them reaches: it is a separate externally reachable origin on its own Container Apps FQDN, so the gateway's +edge limiter guards the gateway's own hostname and never sees a single request to the front door a browser +actually loads (ADR-124, `Website/docs-src/adr/124-blazor-circuit-ceiling-ui-edge.md:12-19`). -Every control above bounds an arrival rate at an API host. The server-rendered Blazor UI host is the case -none of them reaches: it is a separate externally reachable origin on its own Container Apps FQDN, so the -gateway's edge limiter guards the gateway's own hostname and never sees a single request to the front door -a browser actually loads (ADR-124, `Website/docs-src/adr/124-blazor-circuit-ceiling-ui-edge.md:9-15`). +So that origin carries its own limiter. `AddUiRateLimiting` +(`Source/Presentation/MMCA.Common.UI.Web/Hardening/UiRateLimitingExtensions.cs:161`) and +`UseUiRateLimiting` (`:203`) put a per-client-IP fixed window, chained with a replica-wide concurrency +ceiling, in front of the host, both rejecting with `429` (`:10-13`); the concurrency half defaults to 200 +permits (`GlobalConcurrencyLimit`, `UiRateLimitingSettings.cs:76`). The Blazor circuit transport, +`/_blazor`, stays inside the per-IP window but out of the concurrency ceiling, because a circuit WebSocket +would hold its lease for the circuit's whole lifetime (`UiRateLimitingExtensions.cs:33-39`). A page load there is also not a cheap request. Under the Interactive Auto render strategy the first render is always a Server circuit, so every page load opens one, and each open circuit holds live render state for as long as the connection lives, inside a container of 0.25 vCPU and 0.5 GiB -(`MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web/Hardening/BoundedCircuitHandler.cs:13-19`, -`BlazorCircuitLimitSettings.cs:27-28`). The framework knob that looks like the answer is not one: -`CircuitOptions` exposes `DisconnectedCircuitMaxRetained` and `DisconnectedCircuitRetentionPeriod`, and -both bound only circuits that have already dropped their connection and are being held for reconnect -(`BlazorCircuitLimitSettings.cs:13-15`). A rate limiter does not close it from the other direction either: -it bounds how fast requests arrive, while a caller who opens circuits slowly enough to stay inside the -window still accumulates them (`BlazorCircuitLimitSettings.cs:10-13`). +(`Source/Presentation/MMCA.Common.UI.Web/Hardening/BoundedCircuitHandler.cs:15-21`, +`BlazorCircuitLimitSettings.cs:27-28`). A rate limiter does not bound that: it bounds how fast requests +arrive, while a caller who opens circuits slowly enough to stay inside the window still accumulates them +(`BlazorCircuitLimitSettings.cs:10-13`). Neither do the `CircuitOptions` knobs +`DisconnectedCircuitMaxRetained` and `DisconnectedCircuitRetentionPeriod`, which bound only circuits that +have already dropped their connection and are being held for reconnect (`BlazorCircuitLimitSettings.cs:13-15`). +The settings type still tightens both, as defence in depth: 25 retained circuits (`:46`) for 60 seconds +(`:57`). So the ceiling is on concurrency, and it is held by a `CircuitHandler`. `BoundedCircuitHandler` -(`MMCA.ADC.UI.Web/Hardening/BoundedCircuitHandler.cs:37-39`) counts opens and closes and refuses anything -past `MaxActiveCircuits`, default 200 per replica (`BlazorCircuitLimitSettings.cs:40`, derived from that -container's memory and vCPU at `:27-35`). It is registered as a singleton so one count spans the replica: -circuit handlers are resolved from each circuit's own scope, so a scoped registration would count to one -and cap nothing (`BoundedCircuitHandler.cs:30-33`). It runs last among the registered handlers, -`Order => int.MaxValue` (`:46-50`), so a refusal lands after cheaper handlers have done their work. The -count is race-safe by construction in both directions: the open path increments first and rolls back on -refusal (`:57-62`), because reading and then incrementing would let two simultaneous opens both take the -last free slot, and the close path floors at zero rather than trusting the pairing (`:74-83`), because a -close without a counted open would drive the count negative and hand out permits forever. +(`BoundedCircuitHandler.cs:43-45`) counts opens and closes and refuses anything past `MaxActiveCircuits`, +default 200 per replica (`BlazorCircuitLimitSettings.cs:38`, derived from that container's memory and vCPU +at `:27-35`). It is registered as a singleton by `AddBoundedBlazorCircuits()` so one count spans the +replica: circuit handlers are resolved from each circuit's own scope, so a scoped registration would count +to one and cap nothing (`BoundedCircuitHandler.cs:32-34`). It runs last among the registered handlers, +`Order => int.MaxValue` (`:57-61`), so a refusal lands after cheaper handlers have done their work. The +count is race-safe by construction in both directions. The open path increments first and rolls back on +refusal (`:70-76`), because reading and then incrementing would let two simultaneous opens both take the +last free slot. The close path releases a permit only for a circuit the open path admitted, tracked in a +set keyed by reference (`:47`, added at `:83`, checked at `:92-98`), because the framework tears a refused +circuit down through the same close callback and that close would otherwise release a permit another +circuit holds (`:37-38`). Flooring the count at zero stays behind that as the last line of defence +(`:100-106`). ```csharp -// The real open path (MMCA.ADC.UI.Web/Hardening/BoundedCircuitHandler.cs:53-71), logging elided. +// The real open path (MMCA.Common.UI.Web/Hardening/BoundedCircuitHandler.cs:64-85), logging elided. public override Task OnCircuitOpenedAsync(Circuit circuit, CancellationToken cancellationToken) { + ArgumentNullException.ThrowIfNull(circuit); + var ceiling = settings.Value.MaxActiveCircuits; // Increment first and roll back on refusal: reading then incrementing would let two @@ -440,22 +481,24 @@ public override Task OnCircuitOpenedAsync(Circuit circuit, CancellationToken can return Task.FromException(new InvalidOperationException(/* ...the ceiling, to the user... */)); } + _admitted[circuit] = 0; // only an admitted circuit releases a permit on close return Task.CompletedTask; } ``` The refusal is a thrown exception, and the type says in place that this is the one spot where the `Result` -pattern does not apply (`:22-27`): `CircuitHandler.OnCircuitOpenedAsync` returns `Task` and has no -"refuse" return value, so a faulted task is the only way to stop a circuit from starting, and the contract -belongs to the framework. Refusal is observable rather than silent, one Warning per refusal naming the -ceiling (`:88-91`). - -Say the ownership plainly: this one is app code, not a framework package. `BoundedCircuitHandler` and -`BlazorCircuitLimitSettings` sit in each UI host's own `Hardening/` folder, identical in MMCA.ADC and -MMCA.Store (`MMCA.Store/Source/Hosts/UI/MMCA.Store.UI.Web/Hardening/BoundedCircuitHandler.cs:37-39`, -`BlazorCircuitLimitSettings.cs:39`), and ADR-124 records it as a decision about those two hosts -(`124-blazor-circuit-ceiling-ui-edge.md:37-51`). A limiter and a ceiling bound different resources, so -having the rate limiter in a shared package does not mean the concurrency bound belongs there too. +pattern does not apply (`:24-29`): `CircuitHandler.OnCircuitOpenedAsync` returns `Task` and has no +"refuse" return value, so a faulted task is the only way to stop a circuit from starting (`:78-80`), and +the contract belongs to the framework. Refusal is observable rather than silent, one Warning per refusal +naming the ceiling (`:111-114`). + +Both halves are one framework kit in `MMCA.Common.UI.Web`, and both apps consume the same copy: each UI host +calls `AddBoundedBlazorCircuits()` (`MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web/Program.cs:78`, +`MMCA.Store/Source/Hosts/UI/MMCA.Store.UI.Web/Program.cs:86`), `AddUiRateLimiting` (ADC `:143`, Store `:95`) +and `UseUiRateLimiting()` (ADC `:215`, Store `:229`). ADR-124 records the decision as three layers from one +framework kit (`124-blazor-circuit-ceiling-ui-edge.md:40-42`). A limiter and a ceiling bound different +resources, so the kit keeps them as two settings types bound from two sections rather than folding the +concurrency bound into the limiter (`BlazorCircuitLimitSettings.cs:10-13`). ## Trade-offs, honestly @@ -468,10 +511,11 @@ boundaries. no global cap and would need its own control or a named policy. - **The limiter's placement is load-bearing.** Per-user partitioning depends on the authenticated principal already being populated when the limiter runs - (`WebApplicationBuilderExtensions.cs:176,181`). Move the limiter relative to authentication in the - pipeline and the partition sees a different or empty principal. The gRPC exemption has the same - property in the other direction: it reads the routed endpoint, so it depends on running after - `UseRouting` (`:66-68`). This is a config-order trap, not a code bug. + (`WebApplicationBuilderExtensions.RateLimiting.cs:144`, `:149-150`). Move the limiter relative to + authentication in the pipeline and the partition sees a different or empty principal, which drops an + authenticated caller into the anonymous partition. The gRPC exemption has the same property in the other + direction: it reads the routed endpoint, so it depends on running after `UseRouting` (`:33-35`). This is + a config-order trap, not a code bug. - **Attribute-shaped protection fails silently when it goes missing.** The per-IP throttle is applied by an attribute, so dropping it breaks nothing loudly: the endpoint simply stops being throttled and the app keeps serving traffic. A host missing the attribute has no spray protection while every build @@ -483,14 +527,15 @@ boundaries. it is missing needs a test whose only job is to notice. - **The per-IP auth throttle is coarse, fail-open, and deliberately loose.** Shared NAT, proxies and Blazor Server circuits put many users behind one IP, which is exactly why the default is 30 a minute - rather than 10 (`WebApplicationBuilderExtensions.cs:378-385`), and an IP it cannot read is not limited - at all (`:316`). It covers the four anonymous credential actions the framework bases carry and the two - email-confirmation actions each app adds, and deliberately not refresh. It raises the cost of spray - from one source by orders of magnitude; it does not stop an attacker rotating across many. + rather than 10 (`WebApplicationBuilderExtensions.RateLimiting.cs:320-327`), and an IP it cannot read is + not limited at all (`:284-285`). It covers the four anonymous credential actions the framework bases + carry and the two email-confirmation actions each app adds, and deliberately not refresh. It raises the + cost of spray from one source by orders of magnitude; it does not stop an attacker rotating across many. - **Email-keyed lockout is a denial-of-service-on-the-user lever.** An attacker can lock a *known* account out by deliberately failing its logins. That is why the control is exponential backoff with a - short cap (default 300s, `LoginProtectionSettings.cs:24`) plus a generic `401`, not a hard permanent - block. It bounds the harm to a brief self-healing lockout, an accepted availability-for-security trade. + short cap (default 300s, `LoginProtectionSettings.cs:24`) plus a `429` that says only to try again later + (`LoginProtectionService.cs:44-48`), not a hard permanent block. It bounds the harm to a brief + self-healing lockout, an accepted availability-for-security trade. - **Cache-scoped state weakens under scale-out, and for the limiter the fix is opt-in.** In memory mode the login-protection counters are per-replica and evaporate on restart, so a multi-replica deployment that did not wire a distributed cache does not aggregate an attacker hitting different replicas; the @@ -498,39 +543,39 @@ boundaries. in-process counters have the same shape: across N replicas the effective ceiling is roughly N times the configured limit. The framework ships a way out for that one, the shared Redis counter behind `Distributed = true` for the global, `UserPolicy` and anonymous-hub partitions - (`RateLimitingSettings.cs:64-72`, `WebApplicationBuilderExtensions.cs:93-100`), but - it defaults to `false` and neither app sets it, so the ceiling is N times the limit - everywhere. ADR-019 calls the trade-off narrowed rather than removed - (`Website/docs-src/adr/019-rate-limiting.md:195-199`), and it stands exactly as written for `auth-ip` + (`WebApplicationBuilderExtensions.RateLimiting.cs:161`, `:186`, `:67`), but it defaults to `false` + (`RateLimitingSettings.cs:72`) and neither app sets it, so the ceiling is N times the limit everywhere. + ADR-019 calls the trade-off narrowed rather than removed + (`Website/docs-src/adr/019-rate-limiting.md:202-206`), and it stands exactly as written for `auth-ip` and `FixedPolicy`, which never take the shared counter. - **Turning the shared counter on can silently do nothing.** Setting `Distributed = true` in a host with no `IConnectionMultiplexer` registered degrades to the in-memory limiter rather than failing startup - (`WebApplicationBuilderExtensions.cs:247-268`, documented at `RateLimitingSettings.cs:64-71`), and the - Redis limiter itself fails open on a Redis fault, granting the lease and warning at most once per - window (`Website/docs-src/adr/019-rate-limiting.md:184-193`). Both are the right posture for a backstop + (`WebApplicationBuilderExtensions.RateLimiting.cs:234-236`, documented at `RateLimitingSettings.cs:64-71`), + and the Redis limiter itself fails open on a Redis fault, granting the lease and warning at most once per + window (`Website/docs-src/adr/019-rate-limiting.md:191-192`). Both are the right posture for a backstop that must never become an outage, and both mean a misconfiguration here looks exactly like success. - **The counter increment is not atomic, by decision.** `IncrementAsync` is a read-modify-write on the - cache, and the code says why in place (`LoginProtectionService.cs:66-74`): a Redis `INCR` writes a + cache, and the code says why in place (`LoginProtectionService.cs:55-63`): a Redis `INCR` writes a plain string key, while `IDistributedCache` reads entries back as hashes, so an atomic increment issued underneath the cache abstraction leaves a counter the cache itself cannot read. A readable counter is worth more than an atomic one. The accepted cost is that genuinely parallel attempts can overwrite each other's increments and undercount, so a concurrent burst can stay under `MaxFailedAttempts`; sequential guessing, which is what a credential-stuffing run against one account looks like, still trips the lockout. The same shape means each write refreshes the TTL, so both windows slide rather than staying - anchored to the first attempt (`:127-129`), which only ever tightens the limit. ADR-029 records the + anchored to the first attempt (`:116-118`), which only ever tightens the limit. ADR-029 records the whole trade, including the opt-in `HybridCacheService` that overrides the member with the same shape - (`029-authentication-brute-force-protection.md:69-85`). + (`029-authentication-brute-force-protection.md:74-93`). - **The per-IP registration throttle is coarse and fail-open.** Shared NAT or proxy IPs throttle innocents together, per-attacker IP rotation evades it, and a missing IP is a deliberate no-op - (`LoginProtectionService.cs:103-106`). It raises the cost of bulk signup; it does not stop a determined + (`LoginProtectionService.cs:92-95`). It raises the cost of bulk signup; it does not stop a determined distributed attacker. - **The defaults are deployment-agnostic.** 300 requests per minute per user is a coarse backstop, not a tuned SLO. A service with heavier legitimate per-user traffic must raise `GlobalPermitLimit`, a host with real client IPs can tighten `AuthIpPermitLimit` (ADC binds that one value to configuration), and a stricter endpoint must opt into a named policy. Those knobs have a `"RateLimiting"` section to live in (`RateLimitingSettings.cs:21-99`), which makes tuning a deployment concern rather than a recompile, - but reaching the section at all takes the `IConfiguration` overload (`WebApplicationBuilderExtensions.cs:404-412`), - and no host calls it. + but reaching the section at all takes the `IConfiguration` overload + (`WebApplicationBuilderExtensions.RateLimiting.cs:346-358`), and no host calls it. None of these argue against the layering. They are the edges of what each control is for: a per-principal cap protects attributable throughput, a per-source window protects anonymous credential submission, a @@ -544,7 +589,7 @@ The shape ports to any ASP.NET Core service, with or without this framework: 1. **Pick the partition key before you pick the limit.** "300 a minute" is meaningless until you answer "per what." Per authenticated principal caps attributable load without punishing shared-origin anonymous browsing; per IP does the opposite. Choose deliberately, because the key determines who you - actually protect. + actually protect. And key the principal on a claim that is unique per account: a display name is not. 2. **Exempt infrastructure traffic explicitly, on something the caller cannot set.** Health and liveness probes, JWKS and OIDC discovery, and inter-service RPC are legitimately high-frequency, and a limiter that throttles a probe causes the outage it was meant to prevent. Key the exemption on the routed @@ -581,17 +626,18 @@ edge is covered with no single mechanism pretending to do a job it structurally **What we covered:** why "turn on rate limiting" is not one decision but three (who, by what key, what is exempt), how MMCA.Common's authenticated-only global limiter (`AddCommonRateLimiting`) caps attributable -per-principal traffic and exempts infrastructure and anonymous traffic outside the real-time hub paths, -why that exemption leaves the most-attacked endpoints uncovered, how `ILoginProtectionService` closes part -of that gap with email-keyed exponential-backoff lockout and a per-IP registration throttle that key on -the submitted identity rather than a principal, how the `"auth-ip"` per-source window closes the rest by -catching password spray that no per-account counter can see and is attached by default on +per-principal traffic subject-first and exempts infrastructure and anonymous traffic outside the real-time +hub paths, why that exemption leaves the most-attacked endpoints uncovered, how `ILoginProtectionService` +closes part of that gap with email-keyed exponential-backoff lockout and a per-IP registration throttle +that key on the submitted identity rather than a principal, how the `"auth-ip"` per-source window closes +the rest by catching password spray that no per-account counter can see and is attached by default on `AuthControllerBase` and `PasswordResetAuthControllerBase` rather than left to each app to remember, what the settings layer adds on top (a bound `"RateLimiting"` section, the hub-path controls, a selectable sliding window, and an opt-in shared Redis counter for three of the partitions, none of which either app -has turned on), why the UI origin gets a concurrency ceiling in app code rather than another limiter, and -the honest boundaries in all three: principal-dependence, config order, silently-droppable attributes, -shared-IP coarseness, the DoS-on-the-user lever, and cache state under scale-out. +has turned on), why the UI origin is its own edge with a framework kit of its own (a per-IP window chained +with a concurrency ceiling, plus a circuit ceiling), and the honest boundaries in all three: +principal-dependence, config order, silently-droppable attributes, shared-IP coarseness, the +DoS-on-the-user lever, and cache state under scale-out. **Next in the series:** Aspire, the one command that brings up the whole distributed stack locally. @@ -603,143 +649,97 @@ shared-IP coarseness, the DoS-on-the-user lever, and cache state under scale-out *Tags: .NET, C Sharp, Security, Web API, Software Architecture* -*Notes: every type, number and anchor below was read from source on 2026-09-19 against MMCA.Common at -v1.205.0. Corrections this pass: the anonymous branch of the global partition is no longer an -unconditional no-limiter, the gRPC exemption is keyed on endpoint metadata rather than a content type, -three partitions (not two) may take the shared Redis counter, the `auth-ip` surface is four framework -actions rather than two, `ResetPasswordHandlerBase` is a second framework call site for the protection -service, ADC's Notification service declares a `"RateLimiting"` section that no overload in its host -reads, and every `WebApplicationBuilderExtensions.cs`, ADR-019, ADR-029 and test anchor moved. A section -on the UI-origin circuit ceiling (ADR-124) was added. Layer one: -`AddCommonRateLimiting(int permitLimit = 100, int queueLimit = 2, int perUserPermitLimit = 30, int globalPermitLimit = 300, int authIpPermitLimit = 30)` -(`Source/Presentation/MMCA.Common.API/Startup/WebApplicationBuilderExtensions.cs:386-394`, `authIpPermitLimit` -XML docs `:378-385` carrying the 30-not-10 rationale and the roughly 43K attempts/day/IP figure at -`:380-384`); `IConfiguration` overload binding `RateLimitingSettings.SectionName` and falling back to a -default instance (`:404-412`); settings overload calling `AddRateLimiter` (`:422-459`) with -`RejectionStatusCode = StatusCodes.Status429TooManyRequests` (`:428`), -`GlobalLimiter = PartitionedRateLimiter.Create(...)` (`:430-431`), `"FixedPolicy"` -(`:436-443`, `allowDistributed: false`), `"UserPolicy"` (`:445`, delegating to -`UserPolicyRateLimitPartition` at `:204-218`) and `options.AddPolicy(RateLimitPolicyAuthIp, ...)` -(`:455-457`) beside the forwarded-headers and fail-open comment (`:447-454`). -`GlobalRateLimitPartition` has a permit-count overload (`:161-162`) delegating to the settings one -(`:169-194`): `IsRateLimitBypassed` (`:75-79`) covering `/health` (`:76`), `/alive` (`:77`), -`/.well-known` (`:78`) and `IsGrpcEndpoint` (`:79`) via `GetNoLimiter("__infra")` (`:173`). -`IsGrpcEndpoint` (`:136-155`) matches the routed endpoint's metadata namespace against -`GrpcServerMetadataNamespace = "Grpc.AspNetCore.Server"` (`:128`); the remark at `:62-68` records -SEC-Common-44, that a `Content-Type: application/grpc` header handed any authenticated account the -no-limiter partition, and that the predicate runs after `UseRouting` (`:66-68`). Anonymous traffic goes to -`AnonymousPartition` (`:178`, declared `:91-101`), which returns `GetNoLimiter("__anonymous")` (`:101`) -unless `IsAnonymousHubRequest` (`:111-121`) matches one of `RateLimitingSettings.HubPathPrefixes` -(default `["/hubs"]`, `RateLimiting/RateLimitingSettings.cs:91`, rationale `:74-90` recording SEC-ADC-25 -and the ADR-024 gateway bypass, with the authenticated-traffic note at `:87-89`), in which case it is -metered per `Connection.RemoteIpAddress` at `AnonymousHubPermitLimit` (default 60, `:93-97,99`) under -Redis scope `"hub"` with `allowDistributed: true` (`WebApplicationBuilderExtensions.cs:93-100`). The -authenticated partition key chain is `User.Identity.Name` to `FindUserIdValue()` (the subject claim) to -the remote IP to `"authenticated"` (`:181-184`), then `CreateLimitedPartition(..., redisScope: "global", -permitLimit: settings.GlobalPermitLimit, queueLimit: 0, ..., allowDistributed: true)` (`:186-193`). -`CreateLimitedPartition` (`:238-289`) chooses between the Redis branch (`:247-268`, including the -fall-through to memory when no `IConnectionMultiplexer` is registered, `:265-267`), the sliding-window -branch (`:270-280`) and the default fixed window (`:282-288`, `QueueProcessingOrder.OldestFirst` at `:287` -omitted from the rendered snippet); the `allowDistributed` rationale for keeping `auth-ip` local is on the -parameter (`:233-237`). Layer three: `RateLimitPolicyAuthIp = "auth-ip"` (`:48`, XML docs `:41-47`), -selector `AuthIpRateLimitPartition` with two overloads (`:302-303`, `:311-325`), reading -`Connection.RemoteIpAddress` (`:313`), `GetNoLimiter("__unknown-ip")` on a null IP (`:316`), else -`CreateLimitedPartition(..., permitLimit: settings.AuthIpPermitLimit, queueLimit: 0, ..., allowDistributed: false)` -(`:317-324`). Applied by default, not opt-in: `AuthControllerBase.LoginAsync` -(`Source/Presentation/MMCA.Common.API/Controllers/AuthControllerBase.cs:72`, action `:76`) and -`RegisterAsync` (`:96`, action `:101`) carry -`[EnableRateLimiting(WebApplicationBuilderExtensions.RateLimitPolicyAuthIp)]`, as do -`PasswordResetAuthControllerBase`'s `forgot-password` (`Controllers/PasswordResetAuthControllerBase.cs:78`, -route `:75`) and `reset-password` (`:102`, route `:99`); the base's XML docs record the anti-spray default -(`:20-29`), the deliberate absence on refresh (`:30-36`) and the loud startup failure without -`AddCommonRateLimiting()` (`:37-41`); `RefreshAsync` carries no such attribute (attribute block `:117-121`, -action `:122`). Pinned by -`Tests/Presentation/MMCA.Common.API.Tests/Controllers/Auth/AuthControllerBaseRateLimitTests.cs` (namespace -`MMCA.Common.API.Tests.Controllers.Auth`, `:13`; docstring `:15-21` recording that a dropped attribute -fails silently; `AnonymousCredentialEndpoint_CarriesTheAuthIpPolicy` `:24-34`, -`RefreshEndpoint_IsDeliberatelyNotThrottledPerIp` `:40-45`, -`EnableRateLimitingAttribute_IsDeclaredInherited` `:51-55` with its comment at `:47-50`, -`DerivedOverride_WithoutTheAttribute_StillCarriesTheAuthIpPolicy` `:61-79`, the mechanism-not-a-blessing -comment `:57-60`, test double `:88-97`). Settings layer: `RateLimitingSettings` (`RateLimitingSettings.cs:21`), -`SectionName = "RateLimiting"` (`:24`), `PermitLimit = 100` (`:28`), `QueueLimit = 2` (`:32`), -`PerUserPermitLimit = 30` (`:36`), `GlobalPermitLimit = 300` (`:40`), `AuthIpPermitLimit = 30` (`:47`), -`Algorithm` defaulting to `RateLimitAlgorithm.FixedWindow` (`:53`), `SegmentsPerWindow = 4` (`:62`, -`[Range(1, 60)]`), `Distributed` defaulting to `false` (`:72`, silent-degrade behaviour documented -`:64-71`), `HubPathPrefixes = ["/hubs"]` (`:91`) and `AnonymousHubPermitLimit = 60` (`:99`). -`RateLimitAlgorithm` is a two-member enum, `FixedWindow` (`RateLimitAlgorithm.cs:15`) and `SlidingWindow` -(`:22`). `RedisFixedWindowRateLimiter` (`RateLimiting/RedisFixedWindowRateLimiter.cs:37`) is the -distributed counter. Configuration in the consumers: ADC's Notification service declares -`"RateLimiting": { "AnonymousHubPermitLimit": 600 }` -(`MMCA.ADC/Source/Services/MMCA.ADC.Notification.Service/appsettings.json:53-55`) with a nine-line venue-NAT -rationale (`:44-52`), while its host calls the permit-count overload -(`MMCA.ADC.Notification.Service/Program.cs:141`), which never reads `RateLimitingSettings.SectionName`, so -the hub limit in force there is the default 60; no host calls the `IConfiguration` overload. ADC's Identity -host passes one configured value, -`AddCommonRateLimiting(authIpPermitLimit: builder.Configuration.GetValue("RateLimiting:AuthIp:PermitLimit", 30))` -(`MMCA.ADC/Source/Services/MMCA.ADC.Identity.Service/Program.cs:161-162`, duplicate-policy note `:153-160`); -Store's takes the framework default -(`MMCA.Store/Source/Services/MMCA.Store.Identity.Service/Program.cs:136`). ADR-029 service: -`ILoginProtectionService` (`Source/Core/MMCA.Common.Application/Auth/ILoginProtectionService.cs:10`), -`LoginProtectionService` (`Source/Core/MMCA.Common.Infrastructure/Auth/LoginProtectionService.cs:19`), -`CheckLockoutAsync` (`:50`, `:55-60`), `IncrementFailedAttemptsAsync` (`:64`) with overflow-safe backoff -`Math.Min(1 << Math.Min(excessAttempts, 30), _settings.MaxLockoutSeconds)` (`:88`, `excessAttempts` clamped -at `:82`), the non-atomic read-modify-write documented in place (`:66-74`) with the TTL refreshed on every -write (`:127-129`), `NormalizeIdentity` (`:34-43`), `LockoutKey` (`:45`), `AttemptsKey` (`:47`), -`ResetFailedAttemptsAsync` (`:94`, `:96-97`), `CheckRegistrationRateLimitAsync` (`:101`, `:111-116`), -fail-open no-op on an empty IP (`:103-106`, `:122-125`), `RegistrationKey` (`:136`, read at `:108`), -`IncrementRegistrationCountAsync` (`:120`). Settings defaults: `MaxFailedAttempts = 5` -(`Source/Core/MMCA.Common.Infrastructure/Auth/LoginProtectionSettings.cs:18`), `MaxLockoutSeconds = 300` -(`:24`), `FailedAttemptWindowMinutes = 30` (`:31`), `MaxRegistrationsPerIpPerHour = 10` (`:37`), -`RegistrationRateLimitWindowMinutes = 60` (`:43`), `SectionName = "LoginProtection"` (`:12`). Registration: -`AddInfrastructure` (`Source/Core/MMCA.Common.Infrastructure/DependencyInjection.cs:72`) binds -`LoginProtectionSettings` (`:164-166`) and calls -`TryAddScoped()` (`:168`; the -article's prose condenses the qualified names). Adoption: the protection calls live in -`Source/Core/MMCA.Common.Application/Auth/AuthenticationServiceBase.cs`: `CheckLockoutAsync` (`:169`), -`IncrementFailedAttemptsAsync` (`:189`, `:196`), `ResetFailedAttemptsAsync` (`:240`), -`CheckRegistrationRateLimitAsync` (`:267`), `IncrementRegistrationCountAsync` (`:326`); -`ResetPasswordHandlerBase` -(`Source/Core/MMCA.Common.Application/Users/UseCases/ResetPassword/ResetPasswordHandlerBase.cs:47`, -`:110`) is the second framework call site, recorded in ADR-029 at -`Website/docs-src/adr/029-authentication-brute-force-protection.md:95-98`; the ADC and Store -`AuthenticationService` are sealed subclasses taking `ILoginProtectionService` (ADC -`MMCA.ADC.Identity.Application/Users/AuthenticationService.cs:50`, forwarded `:60`, with -`IExternalLoginEmailVerifier` at `:51`; Store -`MMCA.Store.Identity.Application/Users/AuthenticationService.cs:26`, forwarded `:35`). Third-control -adoption: ADC re-declares the attribute on both overridden actions -(`MMCA.ADC/Source/Modules/Identity/MMCA.ADC.Identity.API/Controllers/AuthController.cs:54` register, -`:108` login; overrides `:58`, `:112`); Store's `RegisterAsync` override re-declares it at -`MMCA.Store/Source/Modules/Identity/MMCA.Store.Identity.API/Controllers/AuthController.cs:50` (override -`:54`), with the doc comment at `:41-46` calling it convention parity with MMCA.ADC plus a regression pin. -UI-origin ceiling (ADR-124, `Website/docs-src/adr/124-blazor-circuit-ceiling-ui-edge.md:1-51`, Accepted -2026-09-19, separate-origin statement `:9-15`, Decision `:37-51`): `BoundedCircuitHandler` -(`MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web/Hardening/BoundedCircuitHandler.cs:37-39`, a -`CircuitHandler` taking `IOptions` and `ILogger`) with -`ActiveCircuits` (`:44`), `Order => int.MaxValue` (`:46-50`), `OnCircuitOpenedAsync` (`:53-71`, increment -first and roll back `:57-62`, `Task.FromException(new InvalidOperationException(...))` `:65-67`), -`OnCircuitClosedAsync` flooring at zero (`:74-83`), `LogCircuitRefused` at Warning (`:88-91`), the -why-not-`CircuitOptions` remark (`:13-19`), the why-it-throws remark (`:22-27`) and the singleton remark -(`:30-33`). `BlazorCircuitLimitSettings` (`MMCA.ADC.UI.Web/Hardening/BlazorCircuitLimitSettings.cs:17`): -`SectionName = "BlazorCircuitLimits"` (`:20`), `MaxActiveCircuits = 200` (`:40`, derivation from the -0.25 vCPU / 0.5 GiB container at `:27-35`), and the rate-limiter-bounds-arrival-not-residency remark -(`:10-15`). The Store twin is the same type in -`MMCA.Store/Source/Hosts/UI/MMCA.Store.UI.Web/Hardening/BoundedCircuitHandler.cs:37-39` with -`MaxActiveCircuits = 200` at `BlazorCircuitLimitSettings.cs:39`; both live in the app repos, not in an -`MMCA.Common` package. ADRs: ADR-019 (`Website/docs-src/adr/019-rate-limiting.md`) is Accepted with -revisions listed in its Status at `:3-20` (2026-08-01 `:4-7`, 2026-08-18 `:7-11`, 2026-09-07 `:12-15`, -2026-09-19 `:16-20`); Decision item 3 is the "per-IP cap on the anonymous authentication endpoints, on by -default" decision (`:59-87`), naming `AuthControllerBase` and `PasswordResetAuthControllerBase` (`:62-65`) -and the apps' `EmailConfirmationController` actions (`:66-69`), with the "settled empirically -(2026-08-13)" inheritance passage at `:69-75`; item 4 scopes the opt-in language to -`FixedPolicy`/`UserPolicy` (`:88-91`). The "Revision (2026-08-18)" section (`:142-199`) covers the settings -section (`:148-156`), the sliding-window option (`:157-164`), the three Redis-capable partitions -(`:165-175`), `auth-ip` staying in memory on purpose (`:177-182`), the distributed limiter's fail-open and -silent-degrade postures (`:184-193`) and the "narrowed rather than removed" statement (`:195-199`); further -revision sections follow at `:201` (2026-09-07) and `:240` (2026-09-10). ADR-029 -(`029-authentication-brute-force-protection.md`) Status spans `:3-18` and now includes Revised 2026-09-07 -(`:12-13`) and Updated 2026-09-19 (`:14-18`); its Context describes the metered hub exception and the -`auth-ip` window at `:20-29`, the non-atomic and sliding-TTL trade at `:69-85`, the second framework call -site at `:95-98`, the "what the framework still does not do is intercept the HTTP endpoints" residual at -`:138-141`, and Related names ADR-019's hub exception and the password-reset pair at `:184-186`.* +*Notes: every type, number and anchor below was read from source on 2026-10-02 against MMCA.Common at +v1.221.0 (latest reachable tag). Corrections this pass: the rate-limit code lives in the partial +`WebApplicationBuilderExtensions.RateLimiting.cs`, so every former `WebApplicationBuilderExtensions.cs` +anchor was repointed; the global and `UserPolicy` partition keys are subject-first (`FindUserIdValue()`, +then `Identity.Name`), per ADR-019 Revised 2026-09-30; the claim that the `auth-ip` no-IP rule mirrors a +fail-open global limiter was removed, because the global limiter pools unattributable traffic into the +`"authenticated"` and `"anonymous-hub"` buckets (ADR-019 Revision 2026-10-01); the `allowDistributed` +reason is quoted from the parameter doc, with the Redis-round-trip framing attributed to ADR-019; the +lockout returns `Error.TooManyRequests` (429) while the registration throttle stays `Error.Unauthorized` +(401), so the "uniform 401" claim was dropped; key normalization is `EmailIdentity.Normalize`, not a +`NormalizeIdentity` method; `ChangePasswordHandlerBase` is a third framework call site; and the UI-origin +section was rewritten because the circuit ceiling and a UI-host rate limiter are one framework kit in +`MMCA.Common.UI.Web/Hardening`, not app code. Layer one (all in +`Source/Presentation/MMCA.Common.API/Startup/WebApplicationBuilderExtensions.RateLimiting.cs`): +`RateLimitPolicyAuthIp = "auth-ip"` (`:23`, XML docs `:16-22`); `IsRateLimitBypassed` (`:42-46`; `/health` +`:43`, `/alive` `:44`, `/.well-known` `:45`, `IsGrpcEndpoint` `:46`), SEC-Common-44 remark `:29-35` with the +after-`UseRouting` note at `:33-35`; `AnonymousPartition` (`:58-68`, remarks `:52-57`, `"anonymous-hub"` key +`:62`, scope `"hub"` `:63`, `allowDistributed: true` `:67`, `GetNoLimiter("__anonymous")` `:68`); +`IsAnonymousHubRequest` (`:78-88`); `GrpcServerMetadataNamespace` (`:95`); `IsGrpcEndpoint` (`:103-122`); +subject-first rationale in the XML docs (`:124-126`); permit-count `GlobalRateLimitPartition` overload +(`:129-130`); settings overload (`:137-162`: `GetNoLimiter("__infra")` `:141`, `IsAuthenticated` test `:144`, +`AnonymousPartition` call `:146`, key chain `FindUserIdValue()` to `Identity.Name` to remote IP to +`"authenticated"` `:149-152`, `CreateLimitedPartition` call `:154-161` with scope `"global"` `:157` and +`allowDistributed: true` `:161`); `UserPolicyRateLimitPartition` (`:172-187`, subject-first `:174-177`, +scope `"user"` `:182`, `allowDistributed: true` `:186`); `allowDistributed` parameter doc (`:202-206`); +`CreateLimitedPartition` (`:207-258`: Redis branch `:216-237` with the no-multiplexer fall-through comment +`:234-236`, sliding window `:239-249`, fixed window `:251-257`, `QueueProcessingOrder.OldestFirst` `:256` +omitted from the snippet); `AuthIpRateLimitPartition` (permit-count overload `:271-272`, no-IP rationale +`:264-270`, settings overload `:280-294`, `RemoteIpAddress` `:282`, `GetNoLimiter("__unknown-ip")` +`:284-285`, `CreateLimitedPartition` `:286-293`, `allowDistributed: false` `:293`); `authIpPermitLimit` +XML docs (`:320-327`, 43K/day/IP at `:325`); permit-count `AddCommonRateLimiting` (`:328-336`); +`IConfiguration` overload (`:346-358`, `ValidateOnStart` `:353`); settings overload (`:368-405`: +`AddRateLimiter` `:372`, `Status429TooManyRequests` `:374`, `GlobalLimiter` `:376-377`, `"FixedPolicy"` +`:382-389` with `allowDistributed: false` `:389`, `"UserPolicy"` `:391`, forwarded-headers comment +`:393-400`, `AddPolicy(RateLimitPolicyAuthIp, ...)` `:401-403`). Source drift noted, not edited: the comment +at `:396-398` still says the `auth-ip` no-IP rule mirrors "the global limiter's fail-open posture", which +ADR-019 Revision 2026-10-01 withdraws; the article follows the code. Settings (audit-confirmed this run, +unchanged): `RateLimitingSettings.cs` `:21`, `:24`, `PermitLimit = 100` `:28`, `QueueLimit = 2` `:32`, +`PerUserPermitLimit = 30` `:36`, `GlobalPermitLimit = 300` `:40`, `AuthIpPermitLimit = 30` `:47`, `Algorithm` +`:53`, `SegmentsPerWindow = 4` `:62`, `Distributed` `:72` (doc `:64-71`), hub rationale `:74-90`, +`HubPathPrefixes` `:91`, `AnonymousHubPermitLimit = 60` `:99`; `RateLimitAlgorithm.cs:15,22`; +`RedisFixedWindowRateLimiter.cs:37`. Hosts: every host calls the permit-count overload (ADC Notification +`Program.cs:137`, Conference `:218`, Engagement `:148`, Identity `:159-160` with the duplicate-policy note +`:151-158`; Store Sales `:148`, Catalog `:141`, Identity `:135`); ADC Notification +`appsettings.json:53-55` (rationale `:44-52`) is therefore not read. Layer three: `AuthControllerBase.cs` +`:72`/`:76`, `:96`/`:101`, docs `:20-29`, `:30-36`, `:37-41`, refresh `:117-121`/`:122`; +`PasswordResetAuthControllerBase.cs` `:78` (route `:75`), `:102` (route `:99`); +`AuthControllerBaseRateLimitTests.cs` `:13`, `:15-21`, `:24-34`, `:40-45`, `:47-50`, `:51-55`, `:57-60`, +`:61-79`, `:88-97` (audit-confirmed). ADC `AuthController.cs:54`/`:108` (overrides `:58`/`:112`); Store +`AuthController.cs:50` (override `:54`, doc `:41-46`). Layer two: +`Source/Core/MMCA.Common.Infrastructure/Auth/LoginProtectionService.cs` (class `:19`, normalization doc +`:25-33`, `LockoutKey` `:34`, `AttemptsKey` `:36`, `CheckLockoutAsync` `:39` returning +`Error.TooManyRequests("Auth.TooManyAttempts", ...)` `:44-48`, `IncrementFailedAttemptsAsync` `:53`, +non-atomic comment `:55-63`, tail `:69-79`, `excessAttempts` `:71`, clamp comment `:73-76`, backoff `:77`, +`ResetFailedAttemptsAsync` `:83` (`:85-86`), `CheckRegistrationRateLimitAsync` `:90`, fail-open `:92-95` and +`:111-114`, key built `:97` and read `:98`, `Error.Unauthorized("Auth.RegistrationRateLimitExceeded", ...)` +`:100-105`, `IncrementRegistrationCountAsync` `:109`, TTL-refresh comment `:116-118`, `RegistrationKey` +`:125`); `EmailIdentity.Normalize` (`Source/Core/MMCA.Common.Infrastructure/Auth/EmailIdentity.cs:22-31`); +`ErrorHttpMapping.cs:26` (`Unauthorized` to 401) and `:31` (`TooManyRequests` to 429); +`LoginProtectionSettings.cs` `:12`, `:18`, `:24`, `:31`, `:37`, `:43` and `ILoginProtectionService.cs:10` +(audit-confirmed); `DependencyInjection.cs` `AddInfrastructure` `:57`, settings bind `:154-157`, +`TryAddScoped` `:158`. Call sites: `AuthenticationServiceBase.cs` `CheckLockoutAsync` `:118`, +`IncrementFailedAttemptsAsync` `:138`, `:145`, `:531`, `ResetFailedAttemptsAsync` `:189`, +`CheckRegistrationRateLimitAsync` `:216`, `IncrementRegistrationCountAsync` `:275`; +`ResetPasswordHandlerBase.cs:45` (parameter), `:110` (reset); `ChangePasswordHandlerBase.cs:47` (parameter), +`:89`, `:97`, `:102`, key doc `:37`, key `:129`; ADC `AuthenticationService.cs` class `:50`, +`ILoginProtectionService` `:53`, `IExternalLoginEmailVerifier` `:54`, forwarded `:61`; Store +`AuthenticationService.cs` class `:26`, `:29`, forwarded `:36`. UI edge (one framework kit, +`Source/Presentation/MMCA.Common.UI.Web/Hardening/`): `UiRateLimitingExtensions.cs` summary `:10-13`, +`/_blazor` prefix `:33-39`, `AddUiRateLimiting` `:161`, `UseUiRateLimiting` `:203`; +`UiRateLimitingSettings.cs:76` (`GlobalConcurrencyLimit = 200`); `BoundedCircuitHandler.cs` (remarks +`:15-21`, `:24-29`, `:32-39`; class `:43-45`; admitted set `:47`; `ActiveCircuits` `:55`; `Order` `:57-61`; +`OnCircuitOpenedAsync` `:64-85` with increment and rollback `:70-76`, `Task.FromException` `:78-80`, admit +`:83`; `OnCircuitClosedAsync` `:88-109` with admitted check `:92-98` and zero floor `:100-106`; +`LogCircuitRefused` `:111-114`); `BlazorCircuitLimitSettings.cs` (class `:17`, remark `:10-15`, +`SectionName` `:20`, derivation `:27-35`, `MaxActiveCircuits = 200` `:38`, +`DisconnectedCircuitMaxRetained = 25` `:46`, `DisconnectedCircuitRetentionSeconds = 60` `:57`). Host +adoption: ADC UI `Program.cs` `AddBoundedBlazorCircuits()` `:78`, `AddUiRateLimiting` `:143`, +`UseUiRateLimiting()` `:215`; Store UI `Program.cs` `:86`, `:95`, `:229`. ADRs: ADR-019 Status `:3-23` +(Revised 2026-09-30 at `:21-23`), Decision item 3 `:63-94` (email confirmation `:70-73`, the +deliberate-difference statement on unattributable traffic `:88-93`), item 4 `:95-98`, Revision 2026-08-18 +`:149-206` (three partitions `:172-182`, `auth-ip` local `:184-189`, fail-open and silent-degrade +`:191-200`, narrowed `:202-206`), Revision 2026-09-07 `:208`, 2026-09-10 `:247`, 2026-10-01 `:283-295`. +ADR-019's own sentence at `:193-194` ("the same posture the global limiter already takes for a request with +no attributable IP") is stale against the code and its own 2026-10-01 revision, so the article cites only +`:191-192` from that paragraph. ADR-029 Status `:3-19` (Revised 2026-10-01 at `:19`), principal-keyed +change-password `:61-66`, non-atomic and sliding-TTL trade `:74-93`, call sites `:103-110`; ADR-029 `:53-54` +and `:97-98` still say `Unauthorized`/`401` for the lockout, which the code contradicts, so the article +follows `LoginProtectionService.cs:44-48`. ADR-124 Status `:3-9`, separate-origin statement `:12-19`, +Decision `:40-42` ("one framework kit"), close-path detail `:60-67`; its host `Program.cs` anchors +(`:142`/`:203`, `:94`/`:217`) are one to twelve lines stale against the hosts, so the article cites the +hosts directly.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/resilience-recovery-objectives.md b/docs-src/articles/resilience-recovery-objectives.md index 559d37a3..202ff918 100644 --- a/docs-src/articles/resilience-recovery-objectives.md +++ b/docs-src/articles/resilience-recovery-objectives.md @@ -3,7 +3,10 @@ > Series: MMCA.Common · Article #33 (deep-dive) · Pillar P3,P4 · Group G04,G13 · Rubric §29 · ADR-009, ADR-087 · > Status: grounded in `Website/docs-src/onboarding/devops-runbooks.md`, `group-13-grpc-contracts.md`, > `group-04-events-outbox.md`, `Website/docs-src/onboarding/00-primer.md` (ADR table row 009), ADR-009, and -> `Website/docs-src/adr/087-broker-poison-message-handling.md`. No em dashes. +> `Website/docs-src/adr/087-broker-poison-message-handling.md`; re-verified 2026-10-02 (v1.221.0) against +> `MMCA.Common.Aspire/Extensions.cs`, `MMCA.Common.Shared/Resilience/*ResilienceDefaults.cs`, +> `MMCA.Common.Grpc/DependencyInjection.cs`, `DependencyInjection.Messaging.cs`, `OutboxProcessor.cs`, +> `MMCA.ADC/infra/DISASTER-RECOVERY.md`, `dr-drill.yml`, `deploy.yml` and the shared `freshness-gate` action. No em dashes. **Subtitle:** The last article promised the resilience handler that makes retries happen, and the recovery objectives behind it. Here is both halves: the Polly pipeline on every outbound client, and the part most "resilience" write-ups skip entirely, a declared RTO/RPO per failure scenario and a restore drill that someone actually ran. @@ -19,23 +22,23 @@ ADR-009 (the row in the primer ADR table reads "Standard resilience handler on e The runtime half is the part already shown elsewhere in this series, so I will summarize and attribute rather than re-derive it. Every outbound HTTP and gRPC client in the system gets the same Polly pipeline: retry, timeout, and a circuit breaker. It is not wired call-site by call-site. It is configured once, in the Aspire service-side baseline, and every client inherits it. -The wiring lives in `AddServiceDefaults()` from `MMCA.Common.Aspire`, the single method every service host calls first in `Program.cs`. The Aspire one-command deep-dive (Article 31) walks it in full; the short version is that `AddServiceDefaults()` configures OpenTelemetry, service discovery, and Polly resilience handlers on every `HttpClient`, with a 30 second per-attempt timeout, a 60 second circuit-breaker sampling window, and a 90 second total-request timeout. Those are the values that article verified against source. Every outbound call rides this pipeline by default. That is the runtime side of ADR-009 stated plainly: a developer adding a new typed client does not opt into resilience and cannot forget it, because it is applied at the `HttpClient` defaults layer, not per registration. +The wiring lives in `AddServiceDefaults()` from `MMCA.Common.Aspire`, the method every service host calls early in `Program.cs`, before any module-specific services are added. The Aspire one-command deep-dive (Article 31) walks it in full; the short version is that `AddServiceDefaults()` configures OpenTelemetry, service discovery, and Polly resilience handlers on every `HttpClient`, with a 30 second per-attempt timeout, a 60 second circuit-breaker sampling window, a 90 second total-request timeout, and exactly one retry per hop. That retry never replays a `POST` or a `PATCH`: an attempt that timed out may still be running on the server, and a server-to-server hop carries no idempotency key, so only the idempotent verbs keep their single retry. Every outbound call rides this pipeline by default. That is the runtime side of ADR-009 stated plainly: a developer adding a new typed client does not opt into resilience and cannot forget it, because it is applied at the `HttpClient` defaults layer, not per registration. -The gRPC side gets the identical treatment, and the gRPC contracts chapter is explicit about it. `AddTypedGrpcClient(serviceName)` calls `AddStandardResilienceHandler()`, which gives every gRPC client an explicit Polly pipeline sourced entirely from `GrpcResilienceDefaults`: the attempt timeout, the total timeout and the retry budget are the same values the HTTP defaults use, and the circuit-breaker values are spelled out on their own (a 0.5 failure ratio, a minimum throughput of 10, a 10 second break), precisely because an east-west gRPC call bypasses the Gateway's active health checks. There is one sharp edge worth knowing, covered in the module-extraction deep-dive (Article 32): a deliberate `SocketsHttpHandler` override forces explicit HTTP/2 first, because the global resilience handler can otherwise wrap the primary handler in a way that defeats the h2c negotiation. Resilience is then layered back on top. So the order is "force the transport, then add resilience," not the reverse. +The gRPC side gets the same pipeline with two deliberate differences, and the gRPC contracts chapter is explicit about both. `AddTypedGrpcClient(serviceName)` calls `AddStandardResilienceHandler()`, which gives every gRPC client an explicit Polly pipeline sourced entirely from `GrpcResilienceDefaults`: the attempt timeout, the total timeout, the sampling window and the retry budget are the same values the HTTP defaults use, while the circuit-breaker values are spelled out on their own (a 0.5 failure ratio, a minimum throughput of 10, a 10 second break), precisely because an east-west gRPC call bypasses the Gateway's active health checks. The second difference is the retry predicate. Every gRPC call is a `POST`, so the HTTP rule would switch the retry off entirely; instead the gRPC retry handles only an `HttpRequestException`, a failure to reach the peer at all (DNS or connect during a replica rollover). A status code or an attempt timeout may already have reached the handler, and replaying it could run the call twice. There is one sharp edge worth knowing, covered in the module-extraction deep-dive (Article 32): a deliberate `SocketsHttpHandler` override forces explicit HTTP/2 first, because the global resilience handler can otherwise wrap the primary handler in a way that defeats the h2c negotiation. Resilience is then layered back on top. So the order is "force the transport, then add resilience," not the reverse. This pipeline is not decorative. It is load-bearing for a specific, documented case. In ADC, Conference and Engagement form a bidirectional gRPC pair, and the AppHost gives Engagement a `WaitFor(conference)` but deliberately gives the reverse Conference-to-Engagement edge only a `WithReference` with no `WaitFor`, because a reciprocal wait would deadlock startup (each service waiting for the other to be healthy). The transient "peer not ready" errors that result during startup self-heal through the resilience pipeline. The gRPC chapter says this directly: "the retry plus circuit breaker is what makes them tolerable." That is the runtime payoff. Retries are what let a mutual synchronous dependency boot at all. ## Fitness-enforced, not just present -A convention that is "applied everywhere by everyone remembering to" is the same failure mode the idempotency and caching articles kept warning about. The framing across this series is that the standard resilience handler is fitness-enforced: the architecture asserts that outbound clients carry it, rather than trusting each registration. The honest detail is that the primary mechanism for getting it onto every client is structural: it is added at the `HttpClient` defaults layer in `AddServiceDefaults()` and inside `AddTypedGrpcClient`, so the only way to get an outbound client without resilience is to bypass the framework's registration helpers entirely. That structural default is what makes "every outbound client" a statement of fact instead of a hope. +A convention that is "applied everywhere by everyone remembering to" is the same failure mode the idempotency and caching articles kept warning about. The standard resilience handler works on two levels. The first is structural: it is added at the `HttpClient` defaults layer in `AddServiceDefaults()`, inside `AddTypedGrpcClient`, and inside `AddTypedServiceClient`, the typed HTTP client helper for service-to-service calls, which configures its handler from the same `HttpResilienceDefaults`. So the only way to get an outbound client without resilience is to bypass the framework's registration helpers entirely. The second is executable: named tests pin what those helpers configure. `ResilienceHandlerTests` asserts every option the gRPC path sets, pins the `GrpcResilienceDefaults` values, ties its timeouts and retry budget to the HTTP defaults, and checks the connection-failure-only retry predicate at runtime. `TypedServiceClientRegistrationTests` asserts the one retry and the 30, 90 and 60 second values on the typed HTTP client. `ResilienceCircuitBreakerFaultInjectionTests` drives sustained failures and proves the breaker actually opens and short-circuits. Choosing the values stays a review concern; changing one silently does not survive the build. The structural default is what makes "every outbound client" a statement of fact instead of a hope, and the tests are what keep the values behind it from drifting. ## The one place resilience left the outbound client: the outbox broker publish For most of this series, "resilience policy" has meant "outbound HTTP or gRPC client." ADR-087 (accepted 2026-08-18) amends ADR-009 with the first exception, and it is a narrow one: the outbox's broker publish carries a Polly circuit breaker of its own, and nothing else in the persistence path does. -The scope is deliberate. `OutboxProcessor` holds a per-instance `ResiliencePipeline` (`OutboxProcessor.cs:107`, built at `:790-801`) and wraps exactly one call in it, `state.Bus.PublishAsync(state.Event, ct)` (`:631-635`). The in-process dispatch branch sits outside it, because a direct method call into the same process has no transport that can be dead (`:627-630`, with the `else` branch at `:637-640`). The parameters live in `BrokerResilienceDefaults`: a 0.5 failure ratio (`:32`), a minimum throughput of 10 attempts before the ratio is evaluated at all (`:40`), a 30 second sampling window (`:47`), and a 15 second break (`:55`). No retry strategy is paired with the breaker (`:17-22`), because the outbox already *is* the retry: a Polly retry inside a loop that re-leases and retries would multiply the attempt count without changing the outcome. +The scope is deliberate. `OutboxProcessor` holds a per-instance `ResiliencePipeline` (`OutboxProcessor.cs:102`, built at `:690`) and wraps exactly one call in it, `state.Bus.PublishAsync(state.Event, ct)` (`:540-544`). The in-process dispatch branch sits outside it, because a direct method call into the same process has no transport that can be dead (`:536-539`, with the `else` branch at `:546-550`). The parameters live in `BrokerResilienceDefaults`: a 0.5 failure ratio (`:32`), a minimum throughput of 10 attempts before the ratio is evaluated at all (`:40`), a 30 second sampling window (`:47`), and a 15 second break (`:55`). No retry strategy is paired with the breaker (`:17-22`), because the outbox already *is* the retry: a Polly retry inside a loop that re-leases and retries would multiply the attempt count without changing the outcome. -Note what this breaker does and does not buy, because it is the cleanest small example of the honesty this article is asking for. It adds no delivery guarantee. `BrokenCircuitException` is caught by the same `catch (Exception ex)` as any publish failure (`:666`), increments `RetryCount` (`:668`), re-leases the row with the usual backoff (`:677-678`), and dead-letters at `MaxRetries` like everything else (`:702`). Only the observability differs: a `broker.circuit.open.count` increment (`:691-693`) and one log line per batch instead of one per message (`:696-700`). What it fixes is cost and noise. When the broker is unreachable rather than slow, every message in every batch fails identically, and the breaker converts a batch of connection timeouts into a batch of microsecond rejections. The pipeline is also a per-instance field, so N replicas mean N independent circuits and an effective threshold N times the configured one. +Note what this breaker does and does not buy, because it is the cleanest small example of the honesty this article is asking for. It adds no delivery guarantee. `BrokenCircuitException` is caught by the same `catch (Exception ex)` as any publish failure (`:576`), increments `RetryCount` (`:578`), re-leases the row with the usual backoff (`:587-588`), and dead-letters at `MaxRetries` like everything else (`:612`). Only the observability differs: a `broker.circuit.open.count` increment (`:601-603`) and one log line per batch instead of one per message (`:606-610`, with the per-message retry log skipped for those rows at `:623`). What it fixes is cost and noise. When the broker is unreachable rather than slow, every message in every batch fails identically, and the breaker converts a batch of connection timeouts into a batch of microsecond rejections. The pipeline is also a per-instance field, so N replicas mean N independent circuits and an effective threshold N times the configured one. The other half of that record is what it declined to do, and that is the part worth copying. The symmetric move, a breaker on the query path so a failing database sheds load instead of queueing on it, is explicitly rejected. The reason is composition, not appetite: EF Core's `EnableRetryOnFailure` execution strategy (`SQLServerDbContext.cs:63-66`, 5 retries, a 10 second maximum delay) already owns retrying at the EF layer, and it constrains how a user-initiated transaction may be written. Wrapping a breaker around a call that is already being retried inside that strategy would either count one logical failure many times or force the strategy to be replaced, which is an EF execution-strategy rework rather than a breaker. So the database keeps `EnableRetryOnFailure` plus `CommandTimeoutSeconds` (`:55`) as its posture, and the asymmetry is recorded as a decision. The ADR's own reason for writing the rejection down is the reusable lesson: an engineer who finds a breaker on the broker and none on the database will otherwise conclude the second was forgotten, and add it. @@ -53,7 +56,7 @@ ADR-009 requires each consuming app to *declare*, in writing, its Recovery Time These numbers exist in source. They are real and modest, and the runbook says why they are modest on purpose: ADC is a regional, non-24x7 conference app, so sub-hour multi-region failover is explicitly declared a non-goal. That sentence is the whole point of declaring objectives. An RTO is not a brag about how fast you are. It is a statement of how fast you have decided to be, so that the architecture, the backup tier, and the on-call expectations can all be sized to match it. A declared four-hour RTO for a region loss is an honest, scoped commitment. An undeclared one is a fight at 3am about what "back up" even means. -The runbook pairs the objectives with the SPOFs it knowingly accepts: one Azure SQL server, one Container Apps environment with every app at `minReplicas: 1`, one Service Bus namespace, one ACR. Each is listed with its mitigation. Accepting a single point of failure in writing, with the mitigation named, is a different act than having one by accident. +The runbook pairs the objectives with the SPOFs it knowingly accepts: one Azure SQL server, one Container Apps environment with every app at `minReplicas: 1`, one Service Bus namespace, one ACR. The SQL server entry names its mitigation (geo-redundant PITR plus LTR, and a documented import path for the archived legacy data), the Container Apps entry names a conference-day scale-up applied only when the load warrants it, and the Service Bus and ACR line is a bare acceptance with no mitigation attached. Accepting a single point of failure in writing is a different act than having one by accident, and the uneven entries are themselves informative: they show exactly where the runbook has a plan and where it has only a decision. ## The drilled restore: backups you tested, not backups you assumed @@ -63,7 +66,7 @@ The backup posture in ADC's runbook is two tiers. Point-in-time restore (PITR) o But a backup you have never restored is a hypothesis, not a recovery plan. So the runbook ships an Azure-CLI drill script (`az sql db restore`, then `az sql db show`, then `az sql db delete`): it PITR-restores a throwaway copy of a database, times the restore as the measured RTO, verifies the copy comes back `Online`, then deletes it. The automated check is deliberately ARM-level (is the restored database `Online`?); a deeper data check, row counts against the original via the SQL admin login, is a documented manual step you run with `-KeepCopy`. The objective is not to recover anything. It is to prove the restore path works before you need it under pressure, and to time it against the declared RTO. ADR-009 requires the drill to be recorded in a drill-result table. -The drill is executed, repeated and enforced. Its first recorded run, on 2026-06-20, took `ADC_Conference` through a point-in-time restore to a throwaway copy, verified and timed at **2.6 minutes** against the declared 2-hour RTO, recorded in the drill table in `DISASTER-RECOVERY.md` and closing TD-10. It runs as a `dr-drill.yml` workflow over a `dr-restore-drill.ps1` script, on a weekly cron (Mondays 06:00 UTC) as well as on-demand `workflow_dispatch`, and the deploy pipeline carries a `dr-freshness` job in its `needs` that reads the latest successful drill and fails the deploy if it is older than an 8-day window, so a stale recovery proof blocks the deploy instead of being a soft reminder. The ADC scorecard puts resilience at its top maturity precisely on that gate. Coverage is a rotation rather than a single-database story: the scheduled run picks its target across all four live per-service databases by ISO week number, so each one earns its own recovery proof roughly monthly, and the drill table records six passing restores from 2026-06-20 through 2026-08-10 covering `ADC_Identity`, `ADC_Conference`, `ADC_Engagement`, and `ADC_Notification`, the slowest at 4.4 minutes against the 2-hour RTO. That is also the cleanest illustration of why "drilled" is a separate requirement from "documented": a runbook can be complete and correct and still be a hypothesis, and only a run that is timed and written down turns a correct procedure into a measured recovery posture. What remains genuinely open is narrower: every one of those proofs is the same scenario, a single-database point-in-time restore, so the region-loss objective and the full multi-service restore order are declared targets rather than measured ones, and the drill plus its freshness gate live in the consuming app's pipeline, because ADR-009 makes recovery each app's obligation rather than something the framework can run for it. +The drill is executed, repeated and enforced. Its first recorded run, on 2026-06-20, took `ADC_Conference` through a point-in-time restore to a throwaway copy, verified and timed at **2.6 minutes** against the declared 2-hour RTO, recorded in the drill table in `DISASTER-RECOVERY.md` and closing TD-10. It runs as a `dr-drill.yml` workflow over a `dr-restore-drill.ps1` script, on a weekly cron (Mondays 06:00 UTC) as well as on-demand `workflow_dispatch`, and the deploy pipeline carries a `dr-freshness` job in its `needs` that reads the latest successful drill and fails the deploy if it is older than an 8-day window, so a stale recovery proof blocks the deploy instead of being a soft reminder. The ADC scorecard puts resilience at its top maturity precisely on that gate. Coverage is a rotation rather than a single-database story: the scheduled run picks its target across all four live per-service databases by ISO week number, so each one earns its own recovery proof roughly monthly. The drill table records six passing restores from 2026-06-20 through 2026-08-10 covering `ADC_Identity`, `ADC_Conference`, `ADC_Engagement`, and `ADC_Notification`, the slowest recorded at 4.4 minutes against the 2-hour RTO. The weekly runs after 2026-08-10 succeed in the workflow history but are not written into that table, and one scheduled run on 2026-09-14 was cancelled at a 30-minute job limit, and the drill job carries a 60-minute timeout for that reason: Azure SQL restore time is platform-queued and varies run to run. The freshness gate reads the workflow's latest successful run, not the table, so the deploy stays honestly gated while the written ledger lags, and ADR-009 names exactly that lag as the risk the table exists to expose: a stale drill table is a visible smell. That is also the cleanest illustration of why "drilled" is a separate requirement from "documented": a runbook can be complete and correct and still be a hypothesis, and only a run that is timed and written down turns a correct procedure into a measured recovery posture. What remains genuinely open is narrower: every one of those proofs is the same scenario, a single-database point-in-time restore, so the region-loss objective and the full multi-service restore order are declared targets rather than measured ones. The split of ownership is also worth noticing. The drill itself lives in the consuming app's pipeline, because ADR-009 makes recovery each app's obligation rather than something the framework can run for it. The gate logic does not: the `dr-freshness` job in ADC's `deploy.yml` calls `freshness-gate`, a composite action shipped from the MMCA.Common repository and shared by the ADC and Store deploy pipelines, which also owns the break-glass path (skipping the gate without a written justification fails the job). ## Database-per-service multiplies the restore surface @@ -79,9 +82,9 @@ The deploy pipeline closes the loop on the runtime side with two post-deploy gat ## Trade-offs, honestly -- **RTO/RPO are only as real as the last drill.** ADC's objectives are declared with specific numbers, and the restore is drilled repeatedly: the drill table records six passing restores from 2026-06-20 through 2026-08-10, covering every live database on a weekly rotation, from a 1.8-minute `ADC_Identity` restore to a 4.4-minute one, all well inside the 2-hour RTO. That is six timed proofs of a single scenario: a one-database point-in-time restore. The cadence is enforced rather than aspirational: the drill runs on a weekly cron, and a `dr-freshness` deploy gate blocks the deploy when the latest successful drill goes stale. The recovery *time* is measured rather than assumed for that path, but the figures for the other scenarios (region loss, the full multi-service restore order) remain declared targets until each is drilled too. +- **RTO/RPO are only as real as the last drill.** ADC's objectives are declared with specific numbers, and the restore is drilled repeatedly: the drill table records six passing restores from 2026-06-20 through 2026-08-10, covering every live database on a weekly rotation, from a 1.8-minute `ADC_Identity` restore to a 4.4-minute one, all well inside the 2-hour RTO. Those are six recorded, timed proofs of a single scenario, a one-database point-in-time restore, and the later weekly runs are not yet in the table, so the written record is only as current as the last time someone copied a run into it. The cadence is enforced rather than aspirational: the drill runs on a weekly cron, and a `dr-freshness` deploy gate blocks the deploy when the latest successful drill goes stale. The recovery *time* is measured rather than assumed for that path, but the figures for the other scenarios (region loss, the full multi-service restore order) remain declared targets until each is drilled too. - **Database-per-service multiplies the backup and restore surface.** Four databases mean four PITR windows, four LTR policies, and a restore order to get right. The isolation win from ADR-006 is paid for in recovery complexity. The mitigation is per-service objectives and a per-database restore procedure, not a single "restore everything" button, because that button cannot exist across independent databases. -- **Retries can amplify load.** The resilience handler resends calls that did not visibly succeed, which is the whole reason the idempotency article exists: a retry is only safe if the operation it retries is idempotent. Under a partial outage, aggressive retries across many clients can also pile load onto a struggling dependency. The circuit breaker (the 60 second sampling window) is what bounds that, but the tension is real and the timeouts are tuned, not arbitrary. +- **Retries can amplify load, so they are rationed.** Every hop that multiplies its own full retry budget turns a backend brownout into a request storm at exactly the wrong moment, which is why the framework caps the handler at one retry per hop and leaves user-facing retries to the UI service base classes. The handler also refuses to replay a mutation: the HTTP defaults disable the retry for `POST` and `PATCH`, and the gRPC clients retry only a failure to reach the peer. That is the idempotency article's lesson applied at the transport: a retry is only safe if the operation it repeats is idempotent, so the handler retries only what is. The cost is that a genuinely transient failure on a mutation surfaces to the caller instead of being absorbed, and the circuit breaker (the 60 second sampling window) is what bounds the remaining retry pressure on a struggling dependency. - **Single-region by design.** ADC accepts one SQL server, one Container Apps environment, one Service Bus namespace, and one ACR as written-down single points of failure. The four-hour region-loss RTO is honest about this. A system that needs sub-hour multi-region failover would declare different objectives and pay for them; this one declared that it does not, and sized accordingly. ## Apply this even without MMCA @@ -98,7 +101,7 @@ The takeaway: **resilience is not retries; it is a declared, tested recovery pos --- -**What we covered:** how ADR-009 bolts two decisions together; the standard Polly resilience handler (retry, timeout, circuit breaker) applied to every outbound HTTP and gRPC client through `AddServiceDefaults()` and `AddTypedGrpcClient`, and why it is what lets a bidirectional gRPC pair even boot; the one place ADR-087 extends that posture past outbound clients, a circuit breaker around the outbox broker publish and nothing else, plus the per-query database breaker the same record rejects because it does not compose with EF's execution strategy; why retries alone are insufficient; the declared RTO/RPO per scenario in ADC's DR runbook; the two-tier PITR/LTR backup posture and the drills that were run and timed rather than assumed (a 2.6-minute `ADC_Conference` PITR restore on 2026-06-20 closed TD-10, and a weekly rotation records six proofs through 2026-08-10 covering all four live databases); how database-per-service multiplies the restore surface; and the activation and reachability smoke gates that surround the runbook. +**What we covered:** how ADR-009 bolts two decisions together; the standard Polly resilience handler (retry, timeout, circuit breaker) applied to every outbound HTTP and gRPC client through `AddServiceDefaults()`, `AddTypedGrpcClient` and `AddTypedServiceClient`, capped at one retry per hop that never replays a mutation, and why it is what lets a bidirectional gRPC pair even boot; the one place ADR-087 extends that posture past outbound clients, a circuit breaker around the outbox broker publish and nothing else, plus the per-query database breaker the same record rejects because it does not compose with EF's execution strategy; why retries alone are insufficient; the declared RTO/RPO per scenario in ADC's DR runbook; the two-tier PITR/LTR backup posture and the drills that were run and timed rather than assumed (a 2.6-minute `ADC_Conference` PITR restore on 2026-06-20 closed TD-10, and a weekly rotation records six proofs through 2026-08-10 covering all four live databases); how database-per-service multiplies the restore surface; and the activation and reachability smoke gates that surround the runbook. **Next in the series:** architecture fitness functions, the executable rules that keep every pattern in this series honest by failing the build when one is violated. @@ -108,6 +111,6 @@ pattern in this series honest by failing the build when one is violated. *Tags: .NET, Resilience, Software Architecture, DevOps, Reliability* -*Notes: re-verified 2026-09-19 against the current tree. Verified names: `AddServiceDefaults()` (`MMCA.Common.Aspire`), `AddStandardResilienceHandler()`, `AddTypedGrpcClient(serviceName)`, `GrpcResilienceDefaults`, `SocketsHttpHandler` (h2c override), `infra/DISASTER-RECOVERY.md`, the `serviceDatabaseLtr` resource in `infra/main.bicep` (declared at `:910`), the four per-service databases `ADC_Identity`/`ADC_Conference`/`ADC_Engagement`/`ADC_Notification`, and the bacpac blob `sql-archive/AtlDevCon-20260902.bacpac` in storage account `adcprodstpys4way4uzb3g`. THE RECOVERY-SCOPE SECTIONS WERE REWRITTEN THIS PASS, because two prior claims no longer describe anything on disk. First: the article previously said `AtlDevCon` is "retained untouched in `main.bicep` under a 'NEVER delete' comment" at `main.bicep:623-631`. There is no `name: 'AtlDevCon'` database resource and no "NEVER delete this resource" comment anywhere in `main.bicep` this pass; `main.bicep:859-868` records "AtlDevCon: ARCHIVED then DROPPED (2026-09-02) ... its resource declaration is gone from this template", names the bacpac blob and the storage account, and gives the restore as "`az sql db import` that bacpac back onto this SQL server" in "about ten minutes", pointing at `infra/POST-CUTOVER-atldevcon-downgrade.md` for the exact commands. `main.bicep:875-878` states that since the archive was dropped the four per-service databases "ARE the entire application data estate", `:908` that they "are the only databases on the server", and `:138` records that the documented `az sql db export/import --storage-key-type StorageAccessKey` restore path is why the storage account still accepts Shared Key authorization, which is the "authorization mode that import command uses" clause in the body. `DISASTER-RECOVERY.md:43-45` states the same scope directly: "These four are the only databases on the server; the retired `AtlDevCon` archive lives in blob storage as a bacpac instead, so it is outside PITR and LTR by design", with the SPOF bullet at `:26-31` naming the blob and the ten-minute `az sql db import`. Second: the article previously credited the four databases to "the gated `cutover-per-service-dbs.yml` copy workflow". No such workflow exists: `MMCA.ADC/.github/workflows/` holds `claude-code-review.yml`, `claude.yml`, `cost-guard.yml`, `cross-service-tests.yml`, `deploy.yml`, `dr-drill.yml`, `e2e.yml`, `load-test.yml` and `maui-audit.yml`, and nothing else. That section is now a present-tense description of the four databases, the static archive and the two smoke gates, per the current-state rule; the migration history it used to carry is deliberately not in the body. Third, the deploy-time revert: `deploy.yml:1600-1621` documents TWO gates in order, 5a ACTIVATION (for every app the newest revision must report healthState Healthy, runningState Running/RunningAtMaxScale and trafficWeight 100, because "a healthy Gateway keeps serving from the PREVIOUS backend revision when the new one never goes ready") and 5b REACHABILITY (every service probed through the Gateway: Gateway `/health`, Identity via JWKS, Conference via anonymous `GET /Events`, Engagement via `/Bookmarks` and Notification via `/Notifications/inbox`, both auth-gated so "a 401 from the service IS the healthy signal", plus the UI root); the rollback target is "its last HEALTHY provisioned revision" (`:1620`), not simply the previous revision. RTO/RPO numbers ARE in source: `DISASTER-RECOVERY.md:10-14` is the objectives table (bad migration RPO ~10min / RTO <=2h; single DB corruption RPO ~10min / RTO <=1h; full region loss RPO <=1h / RTO <=4h) with the "deliberately modest ... sub-hour multi-region failover is explicitly not a goal" sentence at `:16-17`, and the onboarding chapter mirrors it at `Website/docs-src/onboarding/devops-runbooks.md:298` ("### Recovery objectives"), sourcing sentence `:300`, three-scenario table `:302-306`, non-goal sentence `:308-309` (re-anchored 2026-09-19 from `:386`/`:388`/`:390-394`, the chapter having been restructured and shrunk by about 88 lines; the same chapter reads the ledger as "a maintained drill ledger of six rows" at `:223-224`, re-anchored from `:357`, though its own inner anchors `DISASTER-RECOVERY.md:158-165`/`:167-172`/`:174-182` are themselves stale against the runbook and are NOT the anchors used here). Resilience timeout values (30s per-attempt, 60s circuit-breaker window, 90s total) are verified in `MMCA.Common/Source/Hosting/MMCA.Common.Aspire/Extensions.cs`, which assigns them from named constants inside `ConfigureHttpClientDefaults` (`:96`) and `AddStandardResilienceHandler` (`:106`): `options.AttemptTimeout.Timeout` at `:108`, `options.CircuitBreaker.SamplingDuration` at `:109`, `options.TotalRequestTimeout.Timeout` at `:110`, plus `options.Retry.MaxRetryAttempts` at `:111` (capping each hop at one retry, since the UI base classes own user-facing retries); re-anchored 2026-09-19 from `:60-63`, which are now unrelated telemetry constants. The constant values live in `MMCA.Common/Source/Core/MMCA.Common.Shared/Resilience/HttpResilienceDefaults.cs`: `AttemptTimeout => TimeSpan.FromSeconds(30)` at `:13`, `CircuitBreakerSamplingDuration => TimeSpan.FromSeconds(60)` at `:16`, `TotalRequestTimeout => TimeSpan.FromSeconds(90)` at `:19`. The gRPC sentence is now a paraphrase, not a quotation: `Website/docs-src/onboarding/group-13-grpc-contracts.md:162-170` reads "`AddStandardResilienceHandler` gives every gRPC client an explicit Polly pipeline sourced entirely from `GrpcResilienceDefaults` (`DependencyInjection.cs:127-136`): the attempt timeout, total timeout, and retry budget are the same values the HTTP defaults use, and the circuit-breaker values are spelled out (`FailureRatio` 0.5, `MinimumThroughput` 10, `BreakDuration` 10 seconds, at `GrpcResilienceDefaults.cs:27-33`) precisely because an east-west gRPC call bypasses the Gateway's active health checks"; the article's previous quotation ("the same Polly retry/timeout/circuit-breaker pipeline as the HTTP clients") is not in the chapter. The one quotation the article still carries is now exact: `:214` reads "the retry plus circuit breaker is what makes them tolerable", not "the resilience handler is what makes them tolerable". The drill is executed, repeated and enforced: `DISASTER-RECOVERY.md` records the six-row ledger at `:210` (header), `:211` (separator) and `:212-217` (six PASS rows: 2026-06-20 `ADC_Conference` 2.6 min, 2026-07-20 `ADC_Identity` 1.8 min, 2026-07-20 `ADC_Engagement` 2.3 min, 2026-07-27 `ADC_Notification` 2.1 min, 2026-08-03 `ADC_Identity` 4.4 min, 2026-08-10 `ADC_Conference` 2.1 min, each verified Online with its `dr-drill.yml` run id), with the rotation note at `:202-208`, the status block reading the ledger as a rotation across all four live databases and quoting the slowest restore (4.4 min) against the 2 h RTO at `:219-224`, and the retained TD-10 block at `:226-234` ("**TD-10 is closed** (2026-06-20). Section 29 carries no open tech-debt item"), which also names the paired `ResilienceCircuitBreakerFaultInjectionTests` and the `sloWorkbook` resource. Ledger content is unchanged from the prior pass; every anchor moved (re-anchored 2026-09-19 from `:151`/`:152`/`:153-158`/`:160-165`/`:144-149`/`:167-174`). The "TD-10 closed" claim is corroborated by `Website/docs-src/governance/adc-RemediationBacklog.md` and the section-29 row of `adc-ArchitectureScorecard.md`. The drill script is Azure-CLI-based (`scripts/dr-restore-drill.ps1`: `az sql db restore` at `:64`, `az sql db show` at `:69`, `az sql db delete` at `:86`), not `sqlcmd`; automated verification is ARM-level only (restored copy status `Online`, `:68-76`), and the deeper row-count data check via the SQL admin login is a documented manual `-KeepCopy` step in the script's `.NOTES` (`:18-21`); all four anchors were off by one and were re-anchored 2026-09-19. Cadence: `MMCA.ADC/.github/workflows/dr-drill.yml:33` carries the weekly cron `- cron: '0 6 * * 1'` (Mondays 06:00 UTC, comment at `:32`) alongside `workflow_dispatch`, and the scheduled run rotates the target across the four live databases by ISO week number ("Select target database (scheduled runs rotate across the live DBs)" step at `:53`, the modulo-4 selection at `:63-69`, the chosen target written to the job output at `:71`). A prior Notes claim that the rotation step was "added 2026-07-19 in PR #38" is DROPPED as unverifiable: that is a git history assertion, not something on disk, and it was not confirmed this pass. `MMCA.ADC/.github/workflows/deploy.yml:810` declares the `dr-freshness` job (8-day window, `FRESHNESS_DAYS: "8"` at `:818`, staleness check at `:856-858`) with a break-glass `skip_freshness_gates` path that demands a logged justification (`:824-841`, the refusal `::error::skip_freshness_gates was set without a skip_justification` at `:831`); the job sits in the deploy job's `needs` at `:1305`, whose list has grown to `[changes, supply-chain, cost-guard, dr-freshness, load-freshness, cross-service-freshness, cross-browser-freshness, e2e-gate, backend-test-gate, ai-eval-gate, foundation, build-images]`. Re-anchored 2026-09-19 from `:549`/`:557`/`:866`/`:566-581`/`:569`; these anchors move every time `deploy.yml` grows. `Website/docs-src/governance/adc-ArchitectureScorecard.md:81` still lifts section-29 maturity 3 to 4 precisely on that gate and still states the rubric's #1 red flag stays closed because "the restore has been drilled, repeatedly", but its own `deploy.yml:699` / `:1054` and `DISASTER-RECOVERY.md:153-158` anchors are stale against the current files; the article cites the source files directly rather than inheriting the scorecard's anchors. The genuine residual is that all six recorded proofs are the same scenario, a single-database PITR restore (region loss and the full multi-service restore order remain declared targets, undrilled), and the drill plus its gate are app-side in the ADC consumer repo, since ADR-009 makes recovery each consumer's obligation, not a framework-run job. ADR-009 row text quoted from `Website/docs-src/onboarding/00-primer.md:237` (re-anchored 2026-09-19 from `:236`; the row text is unchanged and still cross-links `group-13-grpc-contracts.md` and `devops-runbooks.md`). Polly 8 via `Microsoft.Extensions.Http.Resilience` per `00-primer.md:405` (re-anchored from `:368-369`; the bullet still reads retry/timeout/circuit-breaker resilience). The broker-side half of the posture is folded in from `Website/docs-src/adr/087-broker-poison-message-handling.md`, whose Status block at `:4-9` records Accepted (2026-08-18), that it **amends ADR-009**, and that the outbox broker publish is "the first resilience policy this workspace applies to something other than an outbound HTTP or gRPC client"; it is indexed in `Website/docs-src/adr/README.md:99`, with the amendment recorded on the ADR-009 row at `:21` (re-anchored 2026-09-19 from `:94`/`:16`; that ADR-009 row also carries a "Revised 2026-09-11" clause about the `Polly` meter and `Smtp:TimeoutSeconds`, which this article does not cover). Verified against source, not just the record: the file moved into a `Processing/` sub-folder, so the outbox processor is `MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/Outbox/Processing/OutboxProcessor.cs`, where `:107` declares `private readonly ResiliencePipeline _brokerPublishPipeline = BuildBrokerPublishPipeline();` (per instance, doc rationale `:95-106`, including "never the database calls" and the per-instance reasoning at `:100-105`), built by `BuildBrokerPublishPipeline()` at `:790-801` as a bare `AddCircuitBreaker` whose `ShouldHandle` excludes `OperationCanceledException` (`:798-799`); the pipeline wraps exactly one call, `state.Bus.PublishAsync(state.Event, ct)` at `:631-635` (the call itself at `:633`), with the "Only the broker hop is wrapped" comment at `:627-630` and the in-process dispatcher `else` branch deliberately outside it at `:637-640`. Parameters are static properties in `MMCA.Common/Source/Core/MMCA.Common.Shared/Resilience/BrokerResilienceDefaults.cs`: `FailureRatio => 0.5` at `:32`, `MinimumThroughput => 10` at `:40`, `SamplingDuration => TimeSpan.FromSeconds(30)` at `:47`, `BreakDuration => TimeSpan.FromSeconds(15)` at `:55`; the "Deliberately NOT paired with a retry strategy" reasoning is the class doc at `:17-22`. `BrokenCircuitException` takes the ordinary failure path: caught by `catch (Exception ex)` at `:666`, `RetryCount++` at `:668`, re-lease with the usual backoff at `:677-678`, dead-letter at `RetryCount >= _settings.MaxRetries` at `:702`; only observability differs (`circuitOpen` at `:688`, `BrokerMetrics.CircuitOpenCounter.Add` at `:691-693`, one `LogBrokerCircuitOpen` per batch at `:696-700` guarded by `circuitOpenLogged`, and the per-message retry log suppressed for those rows by the `else if (!circuitOpen)` at `:713-717`). Every behavioural claim held; every anchor in this paragraph moved this pass. The "adds no delivery guarantee, fixes cost and noise" framing is the ADR's own (`087:176-179`), as is the per-replica caveat (`087:212-215`). The REJECTED per-query database circuit breaker is recorded at `087:135-158` under the heading "A database circuit breaker was considered and rejected in this wave" (`:135`): the reason cited is that EF Core's `EnableRetryOnFailure` execution strategy owns retry at the EF layer and does not compose with a Polly breaker (double-counting one logical failure, or replacing the strategy), verified at `MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/SQLServerDbContext.cs:63-66` (`maxRetryCount: 5`, `maxRetryDelay: TimeSpan.FromSeconds(10)`), with the manual-transaction constraint noted inline at `:60-62` and `CommandTimeoutSeconds` applied via `sql.CommandTimeout(...)` at `:55`; the ADR states the EF retry strategy plus `CommandTimeoutSeconds` "remains the database resilience posture" (`087:157-158`) and gives its reason for recording the rejection at `087:184-185`. "There is no breaker in any persistence path and none is added here" is `087:143-144`. All three persistence anchors were off by one and were re-anchored 2026-09-19. Pillar/Group/Status header tags follow the series house style and were not independently re-verified against a master index.* +*Notes: re-verified 2026-10-02 against MMCA.Common v1.221.0 and the current ADC tree (prior pass 2026-09-19). DRIFT FIXED THIS PASS (body): (1) `AddServiceDefaults()` is called early, not first: in `MMCA.ADC/Source/Services/MMCA.ADC.Conference.Service/Program.cs` `ConfigureEndpointsWithHealthProbe` (`:89`) and `AddCommonSerilog` (`:104`) precede `AddServiceDefaults()` (`:105`); the method doc says "Call this early in Program.cs before adding module-specific services" (`MMCA.Common/Source/Hosting/MMCA.Common.Aspire/Extensions.cs:26-27`). (2) The gRPC handler is not identical to HTTP: the retry predicate is narrowed to `args.Outcome.Exception is HttpRequestException` (`MMCA.Common/Source/Presentation/MMCA.Common.Grpc/DependencyInjection.cs:137`, rationale comment `:133-136`, handler `:127-142`), matching `Website/docs-src/onboarding/group-13-grpc-contracts.md:194-206`. (3) Enforcement was understated and a third registration path was missing: `AddTypedServiceClient` (`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/DependencyInjection.Messaging.cs:152`) calls `AddStandardResilienceHandler` at `:167` with `HttpResilienceDefaults` values (`:169-172`); the named tests exist: `MMCA.Common/Tests/Presentation/MMCA.Common.Grpc.Tests/ResilienceHandlerTests.cs` (class `:19`, options `:53`, connection-failure retry `:81`, pinned defaults `:114`, shared budget `:127`), `MMCA.Common/Tests/Core/MMCA.Common.Infrastructure.Tests/Messaging/TypedServiceClientRegistrationTests.cs:15`, `MMCA.Common/Tests/Presentation/MMCA.Common.Grpc.Tests/ResilienceCircuitBreakerFaultInjectionTests.cs:17`; ADR-009 records them at `Website/docs-src/adr/009-resilience-and-recovery-objectives.md:43` and `:73-83`. (4) Retry framing: one retry per hop, `HttpResilienceDefaults.MaxRetryAttempts => 1` (`MMCA.Common/Source/Core/MMCA.Common.Shared/Resilience/HttpResilienceDefaults.cs:30`, with the up-to-16x storm rationale and the "never replays a mutation" sentence in its doc at `:21-29`), assigned at `Extensions.cs:54`; `options.Retry.DisableFor(HttpMethod.Post, HttpMethod.Patch)` at `Extensions.cs:61` (rationale `:56-60`). The body no longer describes the handler as resending calls aggressively. (5) SPOF mitigations are uneven: `MMCA.ADC/infra/DISASTER-RECOVERY.md:25-30` (SQL server, mitigation named), `:31-33` (ACA, conditional scale-up), `:34` (Service Bus and ACR, no mitigation). (6) Freshness gate ownership: `MMCA.ADC/.github/workflows/deploy.yml:883` declares `dr-freshness`, which uses `ivanball/MMCA.Common/.github/actions/freshness-gate@main` at `:895` with `window-days` 8 at `:899` (comment citing ADR-038 at `:890-892`), and sits in the deploy job's `needs` at `:1219`; the shared action describes itself as "Shared by MMCA.ADC and MMCA.Store deploy.yml" (`MMCA.Common/.github/actions/freshness-gate/action.yml:8-9`) and refuses a skip without justification at `action.yml:99`. The prior `FRESHNESS_DAYS` and inline staleness anchors no longer exist in `deploy.yml`. UNVERIFIABLE ITEM RESOLVED BY NARROWING: the drill table at `DISASTER-RECOVERY.md:210` (header) and `:212-217` (six PASS rows, 2026-06-20 through 2026-08-10, slowest 4.4 min on 2026-08-03) is accurate as a table but stale as a record: `gh run list -R ivanball/ADC --workflow dr-drill.yml` (queried 2026-10-02) shows successful runs 32002474560 (08-17), 32698319908 (08-24), 33391309386 (08-31), 34115619548 (09-07), 35239388608 (09-17, dispatch), 35567597559 (09-21) and 36385517510 (09-28) absent from the table, and run 34838047421 (09-14, schedule) cancelled; `MMCA.ADC/.github/workflows/dr-drill.yml:50-56` records that cancellation at the 30-minute limit and `:57` sets `timeout-minutes: 60`. The body scopes the six rows and the 4.4-minute maximum to the recorded table and states the lag; ADR-009 calls a stale table "a visible smell" at `009:84-85`. Restore durations of the unrecorded runs are not in source and are not asserted. CONFIRMED AND RE-ANCHORED: HTTP values `HttpResilienceDefaults.cs:13` (30s), `:16` (60s), `:19` (90s), assigned inside `ConfigureHttpClientDefaults` (`Extensions.cs:39`) and `http.AddStandardResilienceHandler` (`:49`, options `:51-54`). gRPC values `MMCA.Common/Source/Core/MMCA.Common.Shared/Resilience/GrpcResilienceDefaults.cs:15-24` (shared with HTTP, sampling window at `:21`) and `:27` (0.5), `:30` (10), `:33` (10s); `SocketsHttpHandler` override at `Grpc/DependencyInjection.cs:101-118` (`ConfigurePrimaryHttpMessageHandler` at `:110`) ahead of the handler at `:127`. AppHost: `engagementService.WithReference(conferenceService).WaitFor(conferenceService)` at `MMCA.ADC/Source/Hosting/MMCA.ADC.AppHost/Program.cs:271`, reverse edge with no WaitFor at `:273-274`; quotation "the retry plus circuit breaker is what makes them tolerable" at `group-13-grpc-contracts.md:250`. ADR-009 primer row `Website/docs-src/onboarding/00-primer.md:246`; Polly 8 via `Microsoft.Extensions.Http.Resilience` at `00-primer.md:429`. ADR-087 Status `Website/docs-src/adr/087-broker-poison-message-handling.md:4-9` (Accepted 2026-08-18, amends ADR-009, the first resilience policy applied to something other than an outbound HTTP or gRPC client), also `009:4-8`; README rows `Website/docs-src/adr/README.md:22` (009) and `:100` (087). Outbox (`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/Outbox/Processing/OutboxProcessor.cs`): field `_brokerPublishPipeline` at `:102` (rationale `:90-101`, "never the database calls"), `BuildBrokerPublishPipeline()` at `:690` with `OperationCanceledException` excluded at `:699`, wrapped publish `:540-544` (`PublishAsync` at `:542`), "Only the broker hop is wrapped" comment `:536-539`, in-process `else` branch `:546-550`; failure path `catch (Exception ex)` `:576`, `RetryCount++` `:578`, re-lease `:587-588`, `BrokerMetrics.CircuitOpenCounter.Add` `:601-603`, `LogBrokerCircuitOpen` once per batch `:606-610`, dead-letter at `MaxRetries` `:612`, per-message log suppressed by `else if (!circuitOpen)` at `:623`. `MMCA.Common/Source/Core/MMCA.Common.Shared/Resilience/BrokerResilienceDefaults.cs`: 0.5 at `:32`, 10 at `:40`, 30s at `:47`, 15s at `:55`, no-retry rationale `:17-22`. ADR-087 framing: no breaker in any persistence path `087:144-145`, EF posture `087:158-159`, cost-and-noise `087:177-180`, why record the rejection `087:185-186`, per-replica caveat `087:213-216`, rejection heading `087:135`. `MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/SQLServerDbContext.cs`: `CommandTimeout` at `:55`, `EnableRetryOnFailure` at `:63-66` (5 retries, 10s). DR runbook: objectives table `DISASTER-RECOVERY.md:10-14`, non-goal `:16-17`, backups and LTR scope `:38-45`, rotation note `:202-208`, status block `:219-224`, TD-10 closed `:226-234` (corroborated by `Website/docs-src/governance/adc-RemediationBacklog.md`). `MMCA.ADC/infra/main.bicep`: AtlDevCon archived-then-dropped block `:890-899`, "ARE the entire application data estate" `:906-907`, only-databases comment `:940-941`, `serviceDatabaseLtr` at `:943`, Shared Key rationale `:138` and the storage account `:1211-1222`. Drill script `MMCA.ADC/scripts/dr-restore-drill.ps1`: `az sql db restore` `:64`, `show` `:69`, `delete` `:86`, manual `-KeepCopy` row-count note `:19-21` (carried from the audit, not re-read this pass). `dr-drill.yml`: cron `0 6 * * 1` at `:33` (comment `:32`), `workflow_dispatch` at `:16`, rotation step `:68`, modulo-4 selection `:82` (block `:78-84`), `GITHUB_OUTPUT` `:86`. Post-deploy gates `deploy.yml:1520-1541` (5a ACTIVATION `:1523`, 5b REACHABILITY `:1534`, rollback to the last HEALTHY provisioned revision `:1540`). Scorecard: section 29 row `Website/docs-src/governance/adc-ArchitectureScorecard.md:93` (maturity 4). The onboarding runbook mirrors the objectives under "### Recovery objectives" at `Website/docs-src/onboarding/devops-runbooks.md:298`. The article carries no code block (structure preserved as published; none added). Pillar/Group/Rubric header cells unchanged and not independently re-verified against a master index.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/resource-ownership-authorization.md b/docs-src/articles/resource-ownership-authorization.md index 43b3f3b1..40d4af5c 100644 --- a/docs-src/articles/resource-ownership-authorization.md +++ b/docs-src/articles/resource-ownership-authorization.md @@ -3,9 +3,10 @@ > Series: MMCA.Common · Article #29 (deep-dive) · Pillar P2/P4 · Group G08 · Rubric §11 · ADR-033 · > Status: grounded in `Website/docs-src/adr/033-resource-ownership-authorization.md`, the > `MMCA.Common.API/Authorization` source (`OwnerOrAdminFilter`, `AllowMissingOwnerAttribute`, -> `OwnershipHelper`), the `EntityControllerBase.GetReadSpecificationAsync` and -> `GetExportSpecification` hooks, the `MMCA.Common.Domain` `Specification` base, and the MMCA.Store -> and MMCA.ADC adoptions. No em dashes. +> `OwnershipHelper` including `RequireResolvableOwner` and `ValidateOwnershipAsync`), the +> `EntityControllerBase.GetReadSpecificationAsync` and `GetExportSpecification` hooks with the +> fail-closed `AllowUnscopedExport` export rule, the `MMCA.Common.Domain` `Specification` base, and the +> MMCA.Store and MMCA.ADC adoptions. No em dashes. **Subtitle:** Article 24 covered what a role or permission lets you *do*. It said, explicitly, that "a customer may read only their own order" is a different concern. This is that concern. RBAC answers @@ -58,7 +59,8 @@ before it is ever returned. Reject-one and filter-many cannot be the same mechan narrow a list without re-running the query, and a query predicate cannot 403 a single bad id. MMCA.Common ships one piece for each, keyed on the same claim, sharing the same bypass role, and a third piece that exists only because the filter refuses to guess: an attribute an action uses to declare that it has no -owner parameter to compare. +owner parameter to compare. Beside the collection helper sit two fail-closed checks, so a controller +that scopes by ownership does not hand-write its own gate either. **Single-resource routes get an action filter.** `OwnerOrAdminFilter` (`Source/Presentation/MMCA.Common.API/Authorization/OwnerOrAdminFilter.cs:31`) is a sealed @@ -94,7 +96,7 @@ carried inside a bound model), the request gets a `ForbidResult` (`OwnerOrAdminF "nothing to enforce", which silently stops guarding any action whose parameter is optional or not an integer: the guard disappears with no error, no exception and nothing for a who-can-do-what test to catch. ADR-033 records deny-by-default as the deliberate choice -(`033-resource-ownership-authorization.md:71-82`). An action that genuinely has no owner parameter says +(`033-resource-ownership-authorization.md:80-91`). An action that genuinely has no owner parameter says so out loud with `[AllowMissingOwner]` (`Source/Presentation/MMCA.Common.API/Authorization/AllowMissingOwnerAttribute.cs:21`, an `AttributeTargets.Class | AttributeTargets.Method` attribute with `Inherited = true`, @@ -104,13 +106,13 @@ through the endpoint metadata (`HasAllowMissingOwner`, `OwnerOrAdminFilter.cs:61 owner id is still denied, and a missing owner claim is still denied regardless. **Collection routes get an ownership Specification.** `OwnershipHelper` -(`Source/Presentation/MMCA.Common.API/Authorization/OwnershipHelper.cs:10`) is a static helper. Its -`GetOwnershipSpecification` (`OwnershipHelper.cs:34`) takes the bypass role as a required -argument (`OwnershipHelper.cs:38`) and returns `null` for a caller who holds it -(`OwnershipHelper.cs:45`, `OwnershipHelper.cs:47`), and otherwise reads the caller's id claim -(`GetClaimValue(claimType)`, `OwnershipHelper.cs:50`) and builds a specification through a supplied -factory (`OwnershipHelper.cs:51`); a convenience overload defaults the claim name to `"customer_id"` -(`OwnershipHelper.cs:64-69`, the literal at `:69`) and still requires the role (`:67`). The object it +(`Source/Presentation/MMCA.Common.API/Authorization/OwnershipHelper.cs:11`) is a static helper. Its +`GetOwnershipSpecification` (`OwnershipHelper.cs:35`) takes the bypass role as a required +argument (`OwnershipHelper.cs:39`) and returns `null` for a caller who holds it +(`OwnershipHelper.cs:46`, `OwnershipHelper.cs:48`), and otherwise reads the caller's id claim +(`GetClaimValue(claimType)`, `OwnershipHelper.cs:51`) and builds a specification through a supplied +factory (`OwnershipHelper.cs:52`); a convenience overload defaults the claim name to `"customer_id"` +(`OwnershipHelper.cs:65-70`, the literal at `:70`) and still requires the role (`:68`). The object it hands back is a `Specification` (`Source/Core/MMCA.Common.Domain/Specifications/Specification.cs:15`) whose `Criteria` is an EF-translatable expression tree (`Specification.cs:23`). That is the same specification type from Article @@ -119,22 +121,37 @@ list query returns only the caller's rows. A `null` specification (the bypass ca and because these are real specifications they compose, an `AndSpecification` (`Specification.cs:81`) ties the ownership scope to any other criteria a query already carries. -**One bypass role, on both.** Both points call `OwnershipHelper.IsAdmin` (`OwnershipHelper.cs:17`), which +**One bypass role, on both.** Both points call `OwnershipHelper.IsAdmin` (`OwnershipHelper.cs:18`), which compares `ICurrentUserService.Role` (`Source/Core/MMCA.Common.Application/Interfaces/Infrastructure/Auth/ICurrentUserService.cs:22`) to the -`bypassRole` its caller supplies, case-insensitively (`OwnershipHelper.cs:20`). That parameter has no +`bypassRole` its caller supplies, case-insensitively (`OwnershipHelper.cs:21`). That parameter has no default value, and the XML doc says why: the framework declares no role names -(`OwnershipHelper.cs:13-15`). MMCA.Store passes its own `RoleNames.Admin` at both points -(`OrdersController.cs:67`, `OrdersController.cs:69-71`). One predicate, consulted by the filter and by -the helper, so a privileged caller sees and touches any resource through either path and you do not -maintain two definitions of "may see everything." - -Notice the two deliberately different failure shapes. The single-resource filter denies with a 403 -`ForbidResult`. The collection path never 403s: it returns a filtered, possibly empty, result set. Both -flow through the caller's normal `Result`/HTTP edge, not exceptions. +(`OwnershipHelper.cs:13-17`, the sentence at `:16`). MMCA.Store names its own `RoleNames.Admin` at both +points: as the filter's `BypassRole` in each module that applies it +(`MMCA.Store/.../Sales.API/DependencyInjection.cs:50`, `MMCA.Store/.../Identity.API/DependencyInjection.cs:64`) +and as the helper's argument in each controller (`OrdersController.cs:68`). One predicate, consulted by +the filter and by the helper, so a privileged caller sees and touches any resource through either path +and you do not maintain two definitions of "may see everything." + +**The helper also owns the two fail-closed checks.** A `null` from `GetOwnershipSpecification` means two +different things: the caller holds the bypass role, or the caller's owner claim cannot be resolved, and +only the first may read unscoped. `RequireResolvableOwner` (`OwnershipHelper.cs:91-104`) tells them +apart: it succeeds for the bypass role or a parsable owner claim and otherwise fails with +`Error.Forbidden`, a 403 (`OwnershipHelper.cs:101-103`, the error built at `:174-175`). +`ValidateOwnershipAsync` (`OwnershipHelper.cs:133-157`) is the per-record check for a mutation: the +bypass role passes without a lookup (`:146`), a missing owner claim fails with the same 403 before any +lookup (`:151-153`), and a caller who does not own the record gets `Error.NotFound`, a 404 +(`:167-171`), so the existence of someone else's record cannot be probed. Both take the claim type and +the bypass role from the caller, exactly as the rest of the helper does, so a host's vocabulary flows +through unchanged. + +Notice the deliberately different failure shapes. The single-resource filter denies with a 403 +`ForbidResult`. The ownership specification never 403s: it returns a filtered, possibly empty, result +set, and the only 403 on a collection read comes from the separate resolvable-owner gate, never from the +query. Both flow through the caller's normal `Result`/HTTP edge, not exceptions. ```csharp -// Illustrative of shape: the two enforcement points, assembled from the real members. +// Illustrative of shape: the enforcement points, assembled from the real members. // (1) Single-resource: the filter's core check (OwnerOrAdminFilter.cs:43-79), options-driven. var settings = options.Value; // OwnerOrAdminFilterOptions: OwnerClaimType, BypassRole, OwnerParameterName @@ -179,6 +196,15 @@ await next().ConfigureAwait(false); // only a matching owner value gets here private OrdersByCustomerSpecification? GetOwnershipSpecification() => OwnershipHelper.GetOwnershipSpecification( currentUserService, id => new OrdersByCustomerSpecification(id), RoleNames.Admin); + +// (3) The fail-closed gate every collection read runs first: null means "bypass role" OR +// "unresolvable claim", and only the first may read unscoped. The helper answers the second with 403. +private ObjectResult? RequireResolvableOwner() => + OwnershipHelper.RequireResolvableOwner( + currentUserService, StoreClaimTypes.CustomerId, RoleNames.Admin, nameof(OrdersController), nameof(Order)) + is { IsFailure: true } gate + ? HandleFailure(gate.Errors) + : null; ``` ## How MMCA.Store wires it @@ -189,79 +215,91 @@ shopping-cart and customer-profile controllers as a class-level (`MMCA.Store/.../Sales.API/Controllers/ShoppingCartsController.cs:50`, `MMCA.Store/.../Identity.API/Controllers/CustomersController.cs:35`). The ownership specification scopes the list and read queries: `ShoppingCartsController` builds a `ShoppingCartByCustomerSpecification` -through a private `GetOwnershipSpecification()` method (`ShoppingCartsController.cs:67-69`) that filters +through a private `GetOwnershipSpecification()` method (`ShoppingCartsController.cs:65-67`) that filters by `Id`, because a cart is keyed by its customer (`ShoppingCartByCustomerSpecification.cs:24`, `cart => cart.Id.Equals(customerId)`), and `OrdersController` builds an `OrdersByCustomerSpecification` the same way -(`OrdersController.cs:69-71`) that filters by `CustomerId` +(`OrdersController.cs:66-68`) that filters by `CustomerId` (`OrdersByCustomerSpecification.cs:18`, `order => order.CustomerId.Equals(customerId)`), passing it into -each of its three query call sites (`OrdersController.cs:110`, `:148`, `:182`). Both hand the helper +each of its three query call sites (`OrdersController.cs:102`, `:140`, `:174`). Both hand the helper Store's own `RoleNames.Admin`, because the framework offers no role name to fall back on. Because both filtered controllers apply the filter at class level, deny-by-default forced an audit of -every action on them, and the ones with no owner parameter carry `[AllowMissingOwner]`: nine -application sites across the two, each with a comment naming the guard that replaces the parameter check. -Four are on `ShoppingCartsController` (`ShoppingCartsController.cs:99`, `:114`, `:143`, `:179`): the two -cart list overloads are narrowed to the caller by the controller's `GetReadSpecificationAsync` override, -so ownership is enforced in the query rather than on a route value, the lookup endpoint is gated by -`[HasPermission(SalesPermissions.ShoppingCartsManage)]` (`:145`), and the CSV export is row-scoped the -same way the lists are (more on that below). Five are on `CustomersController` -(`CustomersController.cs:50`, `:62`, `:79`, `:111`, `:132`), all of them gated by -`[HasPermission(IdentityPermissions.CustomersManage)]` (`:52`, `:64`, `:81`, `:113`, `:131`), a capability -rather than a role name (ADR-020). The last of those, `CreateAsync`, is the telling one: its remarks say -that a guard which holds by accident is one a later signature change can remove without anyone noticing -(`CustomersController.cs:124-129`). +every action on them. The actions with no owner parameter carry `[AllowMissingOwner]`, and so does one +that has one: ten application sites across the two, each next to the guard that replaces or backs up +the parameter check. Four are on `ShoppingCartsController` (`ShoppingCartsController.cs:92`, `:107`, +`:136`, `:172`): the two cart list overloads are narrowed to the caller by the controller's +`GetReadSpecificationAsync` override, so ownership is enforced in the query rather than on a route value, +the lookup endpoint is gated by `[HasPermission(SalesPermissions.ShoppingCartsManage)]` (`:138`), and the +CSV export is row-scoped the same way the lists are (more on that below). Six are on `CustomersController` +(`CustomersController.cs:53`, `:65`, `:82`, `:114`, `:135`, `:150`), all of them gated by +`[HasPermission(IdentityPermissions.CustomersManage)]` (`:55`, `:67`, `:84`, `:116`, `:134`, `:149`), a +capability rather than a role name (ADR-020). `CreateAsync` is the telling one: its remarks say that a +guard which holds by accident is one a later signature change can remove without anyone noticing +(`CustomersController.cs:127-132`). `DeleteAsync` is the odd one out, because it does take a route `id`: +without the override the owner would reach the inherited delete through the filter, and a plain +soft-delete of the Customer row skips the anonymizing erasure (ADR-005), so the override puts the action +behind the management capability and the owner erases through the user-deletion path instead +(`CustomersController.cs:142-147`). `OrdersController` is the instructive one. It does *not* wear the class-level filter, because an order has its own id and a separate foreign-key owner, so comparing the route `id` directly to `customer_id` would -be wrong. Instead it runs an explicit per-mutation ownership check, `ValidateOwnershipAsync` -(`OrdersController.cs:507`), which reuses the same `OwnershipHelper.IsAdmin` bypass through its `IsAdmin` -property (`OrdersController.cs:67`) and then splits into two denial shapes on purpose. A caller carrying no -`customer_id` claim at all gets `Error.Forbidden`, a 403 (`OrdersController.cs:515`, -`OrdersController.cs:517-521`): nothing was looked up, so there is no resource whose existence a 403 could -leak, and this matches the filter's own missing-claim `ForbidResult`. Only an owner *mismatch*, where the -claim is present but the order is someone else's, returns `Error.NotFound`, a **404 rather than a 403** -(`OrdersController.cs:530-532`), so the response does not reveal that another -customer's order exists (the rationale is in the method's own summary, `OrdersController.cs:502-506`). -That is the same axis, hand-fit to a resource whose owning id is not its route id. +be wrong. Instead its mutating endpoints run a per-record ownership check: a private +`ValidateOwnershipAsync` (`OrdersController.cs:386-402`) that delegates to +`OwnershipHelper.ValidateOwnershipAsync` (`OrdersController.cs:390`) with Store's `customer_id` claim and +`RoleNames.Admin` (`:392-393`). The only ownership logic the controller supplies is the existence +predicate, an order with this id whose `CustomerId` is the caller's (`OrdersController.cs:394-396`). The +helper then splits into two denial shapes on purpose. A caller carrying no `customer_id` claim at all gets +`Error.Forbidden`, a 403 (`OwnershipHelper.cs:151-153`): nothing was looked up, so there is no resource +whose existence a 403 could leak, and this matches the filter's own missing-claim `ForbidResult`. Only an +owner *mismatch*, where the claim is present but the order is someone else's, returns `Error.NotFound`, a +**404 rather than a 403** (`OwnershipHelper.cs:167-171`), so the response does not reveal that another +customer's order exists (the rationale is in the helper's remarks, `OwnershipHelper.cs:110-115`, and in +the wrapper's own summary, `OrdersController.cs:381-385`). That is the same axis, fitted to a resource +whose owning id is not its route id by a single predicate. The query endpoints carry a third guard the mutating check does not need, and both filtered controllers -carry it. `RequireResolvableOwner` (`OrdersController.cs:83-93`) runs before the query on both -`GetAllAsync` overloads and `GetByIdAsync` (call sites at `OrdersController.cs:103`, `:137`, `:174`). It -exists because `GetOwnershipSpecification()` returns `null` for two different reasons, a bypass-role -caller (scoping deliberately skipped) or a caller whose `customer_id` claim cannot be resolved, and only -the first may run unscoped. `RequireResolvableOwner` rejects the second with the same `Error.Forbidden`, -a 403, before the query ever runs, mirroring the missing-claim branch of `ValidateOwnershipAsync` for -reads and lists too. `ShoppingCartsController` carries an identically named gate -(`ShoppingCartsController.cs:81-91`, called at `:107`, `:127` and `:189`), even though its class-level -filter already refuses a claim-less caller through the missing-claim branch: a guard that holds by -accident is one a later change can remove without anyone noticing, so the collection reads state it -themselves. Both controllers' class-level doc comments name the pair that fail closed -(`OrdersController.cs:38-45`, `ShoppingCartsController.cs:35-44`). - -The CSV export is where the two mechanisms meet, and the hook that joins them scopes every read. Without -a scoping hook the framework export would query with `specification: null`, and a Customer-role token -would read every customer's rows, so the gate is an extension point rather than a blanket role lock: +carry it. Each declares a private `RequireResolvableOwner()` wrapper (`OrdersController.cs:80-85`, +`ShoppingCartsController.cs:79-84`) that delegates to `OwnershipHelper.RequireResolvableOwner` and maps a +failure through `HandleFailure`. In `OrdersController` it runs before the query on both `GetAllAsync` +overloads and `GetByIdAsync` (call sites at `OrdersController.cs:95`, `:129`, `:166`), so a claim-less +non-admin gets the 403 before the query ever runs, mirroring the missing-claim branch of the per-record +check for reads and lists too. `ShoppingCartsController` runs the same gate on its collection reads and +its export (`ShoppingCartsController.cs:100`, `:120` and `:182`), even though its class-level filter +already refuses a claim-less caller through the missing-claim branch: a guard that holds by accident is +one a later change can remove without anyone noticing, so the collection reads state it themselves. Both +controllers' class-level doc comments explain the fail-closed rule (`OrdersController.cs:40-47`, +`ShoppingCartsController.cs:35-44`). + +The CSV export is where the two mechanisms meet, and the hook that joins them scopes every read. `EntityControllerBase.GetReadSpecificationAsync()` -(`Source/Presentation/MMCA.Common.API/Controllers/EntityControllerBase.cs:597-599`) is virtual and +(`Source/Presentation/MMCA.Common.API/Controllers/EntityControllerBase.cs:571-573`) is virtual and supplies the specification for every read action, both `GetAllAsync` overloads, `GetAllForLookupAsync`, -`GetByIdAsync` and `ExportAsync` (summary at `EntityControllerBase.cs:562-567`). It defaults to -`GetExportSpecification()` (`EntityControllerBase.cs:626`), itself virtual and `null`, so a controller -that overrides neither queries unscoped. The export resolves the hook once per request, so the same -instance filters every page it streams (`EntityControllerBase.cs:263-264`), and a scoped `GetByIdAsync` -that filters a row out answers 404 rather than 403, because a "forbidden" would confirm the id exists -(`EntityControllerBase.cs:588-590`). `ShoppingCartsController` overrides the read hook -(`ShoppingCartsController.cs:207-209`, summary `:194-198`) and `OrdersController` overrides the export -hook (`OrdersController.cs:249-250`, summary `:242-247`), both returning the same +`GetByIdAsync` and `ExportAsync` (summary at `EntityControllerBase.cs:535-542`). It defaults to +`GetExportSpecification()` (`EntityControllerBase.cs:601`), itself virtual and `null`. A controller that +overrides neither serves its JSON reads unscoped, but its export does not follow: when the hook resolves +to `null` the export refuses with a 403 carrying `Export.RowScopeRequired` and queries nothing +(`EntityControllerBase.cs:272-274`, the code at `:487`, the error at `:608-613`), unless the controller +opts in to whole-table exports through `AllowUnscopedExport` (`EntityControllerBase.cs:508`, `false` by +default). A forgotten scope therefore serves no rows rather than every row. The export resolves the hook +once per request, so the same instance filters every page it streams (`EntityControllerBase.cs:269-270`), +and a scoped `GetByIdAsync` that filters a row out answers 404 rather than 403, because a "forbidden" +would confirm the id exists (`EntityControllerBase.cs:562-564`). `ShoppingCartsController` overrides the +read hook (`ShoppingCartsController.cs:200-202`, summary `:187-199`) and `OrdersController` overrides the +export hook (`OrdersController.cs:241-242`, summary `:234-240`), both returning the same `GetOwnershipSpecification()` their list endpoints use, so it is the query and not the role that keeps one -customer out of another's rows, and each export still runs the `RequireResolvableOwner` gate -(`OrdersController.cs:237`, `ShoppingCartsController.cs:189`) that rejects the other caller a `null` can -stand for. `CustomersController` deliberately does not follow. Its collection reads are not row-scoped, -they are gated by the customer-management capability, so there is no ownership specification to reproduce, -and relaxing the export would make it more permissive than the list it mirrors -(`CustomersController.cs:87-102`, the gate at `:113`). The hook exists to make an export match its list -endpoints: where the list is scoped by a query, so is the export, and where the list is gated by a -capability, so is the export. +customer out of another's rows. Because that hook returns `null` for an admin, both also set +`AllowUnscopedExport` to the same `OwnershipHelper.IsAdmin` check the hook uses (`OrdersController.cs:249`, +`ShoppingCartsController.cs:209`), so only the bypass role exports the whole table, and each export still +runs the `RequireResolvableOwner` gate (`OrdersController.cs:229`, `ShoppingCartsController.cs:182`) that +rejects the other caller a `null` can stand for. `CustomersController` deliberately does not follow. Its +collection reads are not row-scoped, they are gated by the customer-management capability, so there is +no ownership specification to reproduce, and relaxing the export would make it more permissive than the +list it mirrors (`CustomersController.cs:90-105`, the gate at `:116`). It declares +`AllowUnscopedExport => true` instead (`CustomersController.cs:48`), because every caller who passes that +gate already lists every customer unscoped. The hook exists to make an export match its list endpoints: +where the list is scoped by a query, so is the export, and where the list is gated by a capability, so is +the export. The options are what make the filter portable, and MMCA.ADC proves it on both halves. ADC applies the same `OwnerOrAdminFilter` to its two bookmarks GET endpoints as a `[ServiceFilter(typeof(OwnerOrAdminFilter))]` @@ -274,9 +312,11 @@ the reasoning at `:47-52`), an `Organizer` bypass role (`:54`), and a `userId` q route `id` (`:55`). The row-level half travels too: two Conference controllers override `GetExportSpecification()` through the same `OwnershipHelper.GetOwnershipSpecification`, yielding an `OwnedByUserSpecification` for an attendee and `null` for an Organizer -(`MMCA.ADC/.../Conference.API/Controllers/Events/EventQuestionAnswersController.cs:85-90`, -`MMCA.ADC/.../Conference.API/Controllers/Sessions/SessionQuestionAnswersController.cs:107-112`). Same -filter, same helper, different words, because the words are options rather than literals. +(`MMCA.ADC/.../Conference.API/Controllers/Events/EventQuestionAnswersController.cs:107-112`, +`MMCA.ADC/.../Conference.API/Controllers/Sessions/SessionQuestionAnswersController.cs:107-112`), set +`AllowUnscopedExport` to the Organizer check (`:119` in each), and run the framework's resolvable-owner +gate through a private `RequireResolvableOwner()` wrapper (`:135-136` in each). Same filter, same helper, +different words, because the words are options rather than literals. ## Trade-offs, honestly @@ -291,16 +331,19 @@ The §11 review is blunt about the edges of this, and they are real. - **Its correctness rests on the token.** Because the check trusts the owner claim, it is exactly as trustworthy as the upstream token validation that put the claim there (ADR-004). A missing claim 403s in the filter and yields a `null` specification in the helper, and that `null` means "no scoping," so a - caller must never read a missing claim as the bypass role. The validated principal is load-bearing. + caller must never read a missing claim as the bypass role: that is what `RequireResolvableOwner` exists + to check, and a controller still has to call it. The validated principal is load-bearing. - **It is opt-in, so the risk moved rather than vanished.** Neither point is automatic. A controller that omits the `[ServiceFilter]`, or a query that forgets to pass the ownership specification, leaks across - customers silently. The two-point split sharpens the risk: one route can guard its mutations and forget - to scope its list, or the reverse. Inside a controller that *does* wear the filter, deny-by-default - makes a forgotten guard fail closed and visible: an unresolvable owner parameter 403s rather than - slipping through, so every exemption is a declared `[AllowMissingOwner]` you have to justify in review. - That is a better failure mode, not a solved problem, because the attribute is an assertion the compiler - cannot check. This is the same audit-the-inventory caveat the permission layer and the idempotency - filter carry, and it is honest to name it. + customers silently on its JSON reads. The two-point split sharpens the risk: one route can guard its + mutations and forget to scope its list, or the reverse. The CSV export is the one read the framework + closes by default (no row scope means a 403, not the whole table), but `AllowUnscopedExport` is itself + an opt-in nothing verifies. Inside a controller that *does* wear the filter, deny-by-default makes a + forgotten guard fail closed and visible: an unresolvable owner parameter 403s rather than slipping + through, so every exemption is a declared `[AllowMissingOwner]` you have to justify in review. That is a + better failure mode, not a solved problem, because the attribute is an assertion the compiler cannot + check. This is the same audit-the-inventory caveat the permission layer and the idempotency filter + carry, and it is honest to name it. - **The filter compares an owner parameter, not the resource's own key.** It checks its configured `OwnerParameterName` (default `id`), resolved from a route value or a model-bound query or body argument, against the configured owner claim. That works when the parameter *is* the owning id, as for a cart or a @@ -342,12 +385,14 @@ Object Level Authorization / IDOR risk RBAC structurally cannot see), the axis A scoped out, how MMCA.Common fills it with two enforcement points (`OwnerOrAdminFilter` that 403s a single-resource route whose `id` mismatches the caller's owner claim, and `OwnershipHelper` that builds an ownership `Specification` to row-scope collection queries) sharing one `IsAdmin` bypass whose -role name the host supplies, why the +role name the host supplies, plus the helper's two fail-closed checks (a resolvable-owner gate and a +per-record check), why the filter denies when it cannot resolve an owner parameter and how `[AllowMissingOwner]` makes each exemption -explicit, how MMCA.Store wires all of it (why `OrdersController` splits its denials, 403 for a missing -claim and 404 for someone else's order, instead of using the class filter, and how both Sales controllers -row-scope their CSV export through the `GetReadSpecificationAsync` and `GetExportSpecification` hooks -rather than gating it to a role), and the honest limits: it is +explicit, how MMCA.Store wires all of it (why `OrdersController` splits its denials through the helper, +403 for a missing claim and 404 for someone else's order, instead of using the class filter, and how both +Sales controllers row-scope their CSV export through the `GetReadSpecificationAsync` and +`GetExportSpecification` hooks rather than gating it to a role, while the framework refuses an unscoped +export by default), and the honest limits: it is claim-trusting not ABAC, it trusts the token (ADR-004), and it is opt-in so a controller that never applies it still leaks. @@ -361,96 +406,69 @@ pattern, or `dotnet add package MMCA.Common.API` and try it.* *Tags: .NET, C Sharp, Security, Software Architecture, Web API* -*Notes: re-verified every type, behavior and line against MMCA.Common v1.205.0 and the consumer sources -this run. Two corrections are content rather than anchors. First, the framework declares no role names: -`OwnerOrAdminFilterOptions.BypassRole` is `[Required]` with no default and `OwnershipHelper.IsAdmin` -takes the bypass role from its caller, so the prior "default `Admin`" wording was wrong, not merely -mis-anchored. Second, `EntityControllerBase` scopes every read action through `GetReadSpecificationAsync`, -with `GetExportSpecification` as its default, so the hook is not export-only. Everything else is anchor -drift. `OwnerOrAdminFilter`: sealed `IAsyncActionFilter` whose primary constructor takes -`ICurrentUserService` and `IOptions` -(`Source/Presentation/MMCA.Common.API/Authorization/OwnerOrAdminFilter.cs:31`, parameters `:32`-`:33`); -bypass-role short-circuit passing `settings.BypassRole` (`:43`, `await next()` at `:45`), -`GetClaimValue(settings.OwnerClaimType)` (`:49`), 403 `ForbidResult` on a missing claim -(`:51`,`:53`). **Deny by default**: when `TryGetOwnerParameter` fails (`:57`) the request is forbidden -(`:63`) unless `HasAllowMissingOwner` (`:61`, defined `:84`-`:85`, reading -`context.ActionDescriptor.EndpointMetadata`) finds the opt-out, in which case it calls `await next()` -(`:67`); a resolved-but-mismatched owner parameter is forbidden (`:73`,`:75`); only a match falls through -(`:79`). The owner value is resolved by `TryGetOwnerParameter` (`:93`) from a route value (`:95`-`:97`) -or, failing that, from a model-bound query/body argument (`:102`-`:104`), both parsed with -`CultureInfo.InvariantCulture` (comment `:89`-`:92`). `AllowMissingOwnerAttribute` is the third public -piece: a sealed `Attribute` (`AllowMissingOwnerAttribute.cs:21`) with -`[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]` -(`:20`), documented as an assertion that another guard applies, to be named in a comment at each site -(`:15`-`:18`). `OwnerOrAdminFilterOptions` carries `OwnerClaimType` (default `customer_id`, -`OwnerOrAdminFilterOptions.cs:16`), `BypassRole` (`[Required]`, initialized to `string.Empty`, -`:23`-`:24`, documented `:18`-`:22`) and `OwnerParameterName` (default `id`, `:31`). `AddAPI` (declared -`DependencyInjection.cs:45`) registers the filter scoped (`:85`) and the options with -`ValidateDataAnnotations()` but deliberately not `ValidateOnStart()` (`:91`-`:92`, rationale `:87`-`:90`). -`OwnershipHelper`: static (`OwnershipHelper.cs:10`); `IsAdmin(ICurrentUserService, string bypassRole)` -takes the role with no default (`:17`, doc `:13`-`:15`) and compares `ICurrentUserService.Role` -(`Source/Core/MMCA.Common.Application/Interfaces/Infrastructure/Auth/ICurrentUserService.cs:22`) to it -with `OrdinalIgnoreCase` (`:20`); `GetOwnershipSpecification` (`:34`-`:40`, `bypassRole` -parameter `:38`) returns null for the bypass role (`:45`,`:47`), reads `GetClaimValue(claimType)` -(`:50`) and builds through the factory (`:51`); the `customer_id` convenience overload is `:64`-`:69` -(the literal at `:69`, its required `bypassRole` at `:67`). `Specification` is -abstract with an EF-translatable `Criteria` (`Specification.cs:15`,`:23`), and -`AndSpecification` is declared at `:81`. Store adoption: -`[ServiceFilter(typeof(OwnerOrAdminFilter))]` on `ShoppingCartsController.cs:50` and -`CustomersController.cs:35`; `ShoppingCartByCustomerSpecification` filters by `Id` (built by the private -`GetOwnershipSpecification()` at `ShoppingCartsController.cs:67`-`:69` with `RoleNames.Admin`, consumed -once through the `GetReadSpecificationAsync` override at `:207`-`:209`; -`ShoppingCartByCustomerSpecification.cs:24`); `OrdersByCustomerSpecification` filters by `CustomerId` -(`OrdersController.cs:69`-`:71`, passed at `:110`,`:148`,`:182`; `OrdersByCustomerSpecification.cs:18`). -NINE `[AllowMissingOwner]` application sites, all in Store: -`ShoppingCartsController.cs:99`,`:114`,`:143`,`:179` (the two list overloads and the export are row-scoped -by `GetReadSpecificationAsync` per the comments at `:94`-`:96`, `:113` and `:177`-`:178`; lookup is gated -by `[HasPermission(SalesPermissions.ShoppingCartsManage)]` at `:145`) and -`CustomersController.cs:50`,`:62`,`:79`,`:111`,`:132` (all gated by -`[HasPermission(IdentityPermissions.CustomersManage)]` at `:52`,`:64`,`:81`,`:113`,`:131`, a capability -rather than a role name; the `CreateAsync` remarks at `:124`-`:129` state why the guard is declared rather -than left to the filter). `OrdersController` runs `ValidateOwnershipAsync` (`:507`, summary `:502`-`:506`) -reusing `OwnershipHelper.IsAdmin` through its `IsAdmin` property (`:67`) with TWO denial shapes: -`Error.Forbidden`/403 when the `customer_id` claim is missing (`:515`,`:517`-`:521`) and -`Error.NotFound`/404 only on an owner mismatch (`:530`-`:532`). Its query actions also run a third guard, -`RequireResolvableOwner` (`:83`-`:93`, summary `:73`-`:82`), called at the three query call sites (`:103`, -`:137`, `:174`) and a fourth time in the export override (`:237`); the class doc comment (`:34`-`:46`, -fail-closed paragraph `:38`-`:45`) names both checks as the pair that fail closed. `ShoppingCartsController` -carries the identically named gate (`:81`-`:91`, called at `:107`, `:127`, `:189`) with the same rationale -in its class doc comment (`:32`-`:45`, fail-closed paragraph `:35`-`:44`). Read scoping: -`EntityControllerBase.GetReadSpecificationAsync` is virtual and covers every read action -(`Source/Presentation/MMCA.Common.API/Controllers/EntityControllerBase.cs:597`-`:599`, summary -`:562`-`:567`, the 404-not-403 note at `:588`-`:590`), defaulting to the virtual `GetExportSpecification()` -which returns null (`:626`); the export resolves it once per request (`:263`-`:264`). -`ShoppingCartsController` overrides the read hook (`:207`-`:209`, summary `:194`-`:198`) and -`OrdersController` overrides the export hook (`:249`-`:250`, summary `:242`-`:247`, with the -v1.150.0-Admin-gate-to-v1.151.0-row-scope rationale at `:202`-`:220`), both returning -`GetOwnershipSpecification()`. `CustomersController.ExportAsync` stays gated by the customer-management -capability (`:87`-`:102`, the gate at `:113`) because its collection reads are gated the same way rather -than row-scoped. ADC adoption, both halves: `OwnerOrAdminFilter` guards the two Bookmarks GET endpoints as -`[ServiceFilter(typeof(OwnerOrAdminFilter))]` -(`MMCA.ADC/.../Engagement.API/Controllers/BookmarksController.cs:85`, with `[HttpGet]` at `:84`, and -`:106`, with `[HttpGet("session-ids")]` at `:105`); the POST-create (`[HttpPost]` at `:50`) is an inline -non-Organizer check (`:64`-`:71`, `request.UserId != callerId.Value` at `:67`, `Forbidden` return at -`:69`), not the filter. It is configured with `options.OwnerClaimType = ClaimTypes.NameIdentifier` -(`Engagement.API/DependencyInjection.cs:53`, the `sub`-to-`NameIdentifier` mapping explained at -`:47`-`:52`), `RoleNames.Organizer` as the bypass (`:54`) and `userId` as the parameter (`:55`), inside -`AddModuleEngagementAPI` (declared `:43`, `services.Configure` at `:45`). -The row-level half: `EventQuestionAnswersController` overrides `GetExportSpecification()` through -`OwnershipHelper.GetOwnershipSpecification` with `ClaimTypes.NameIdentifier` and `RoleNames.Organizer` -(`MMCA.ADC/.../Conference.API/Controllers/Events/EventQuestionAnswersController.cs:85`-`:90`), and -`SessionQuestionAnswersController` does the same -(`MMCA.ADC/.../Conference.API/Controllers/Sessions/SessionQuestionAnswersController.cs:107`-`:112`). The -single code block is illustrative-of-shape, assembled from the real members: the filter excerpt mirrors -the options-driven `OwnerOrAdminFilter.cs:43-79` and the controller method is `OrdersController.cs:69-71`. -Broken Object Level Authorization / IDOR as OWASP API1 is industry framing, not a code claim, and the -Article 24 trade-offs quotation was not re-opened this run. ADR: -`Website/docs-src/adr/033-resource-ownership-authorization.md` (deny-by-default at `:71`-`:82`; the -two-status split at `:112`-`:120`, intro `:112`-`:113`, the 403 missing-claim bullet `:115`-`:117`, the -404 owner-mismatch bullet `:118`-`:120`; the `[AllowMissingOwner]` audit table at `:156`-`:162`; the -"a null specification means two different things" block on `RequireResolvableOwner` at `:122`-`:134`; ADC's -adoption of both halves in the Revision (2026-09-10) at `:278`-`:302`). The ADR's own per-file anchors are -themselves stale, citing `ValidateOwnershipAsync` at `OrdersController.cs:414` and the export override at -`:244`-`:245`, so every consumer anchor above is read from the controller source rather than from the ADR.* +*Notes: 2026-10-02 refresh against MMCA.Common v1.221.0 (the consumers pin `MMCA.Common.*` 1.221.0, +`MMCA.Store/Directory.Packages.props:8`). Three corrections are content rather than anchors. First, +`OwnershipHelper` carries the two fail-closed checks itself: `RequireResolvableOwner` +(`OwnershipHelper.cs:91`-`:104`) and `ValidateOwnershipAsync` (`:133`-`:157`), added in v1.216.0 per +ADR-033 Revision 2026-10-01 (`033-resource-ownership-authorization.md:330`-`:354`, the version at +`:332`); Store's and ADC's controllers keep only thin private wrappers that delegate, and the former +`IsAdmin` property on `OrdersController` does not exist. Second, the framework export fails closed: a +null read specification without `AllowUnscopedExport` answers 403 `Export.RowScopeRequired`, so the prior +"a controller that overrides neither queries unscoped" is true of the JSON reads only, and Orders, +ShoppingCarts and both ADC question-answer controllers override `AllowUnscopedExport` to their bypass +check while `CustomersController` sets it `true`. Third, `[AllowMissingOwner]` sites went from nine to ten +(`CustomersController.DeleteAsync`, which carries a route `id`). Anchors confirmed unchanged this run (per +the 2026-10-02 audit): `OwnerOrAdminFilter` +(`Source/Presentation/MMCA.Common.API/Authorization/OwnerOrAdminFilter.cs:31`, parameters `:32`-`:33`, +bypass `:43`, claim `:49`, missing-claim 403 `:51`,`:53`, `TryGetOwnerParameter` call `:57`, deny `:63`, +`HasAllowMissingOwner` `:61`/`:84`, mismatch `:73`,`:75`, fall-through `:79`, resolver `:93`, route +`:95`-`:97`, bound argument `:102`-`:104`); `OwnerOrAdminFilterOptions.cs:16` (`customer_id`), `:23`-`:24` +(`[Required]` `BypassRole`), `:31` (`id`); `AllowMissingOwnerAttribute.cs:20`-`:21`; `AddAPI` +(`DependencyInjection.cs:45`, scoped filter `:85`, options `:91`-`:92`, rationale `:87`-`:90`); +`Specification.cs:15`, `:23`, `AndSpecification` `:81`; `ICurrentUserService.cs:22`; +`ShoppingCartByCustomerSpecification.cs:24`; `OrdersByCustomerSpecification.cs:18`; ADC +`BookmarksController.cs:84`-`:85`, `:105`-`:106` and `Engagement.API/DependencyInjection.cs:43`, `:45`, +`:47`-`:55`. Read this run: `OwnershipHelper` static class `:11`; `IsAdmin` `:18` (doc `:13`-`:17`, +no-role-names sentence `:16`, `OrdinalIgnoreCase` compare `:21`); `GetOwnershipSpecification` +`:35` (`bypassRole` `:39`, bypass null `:46`,`:48`, claim `:51`, factory `:52`); `customer_id` overload +`:65`-`:70` (literal `:70`, `bypassRole` `:68`); `RequireResolvableOwner` result `:101`-`:103`; +`ValidateOwnershipAsync` remarks `:110`-`:115`, bypass `:146`, missing claim 403 `:151`-`:153`, +`CheckOwnershipAsync` 404 `:167`-`:171`; `AccessDenied` `:174`-`:175`. Store filter `BypassRole`: +`Sales.API/DependencyInjection.cs:50`, `Identity.API/DependencyInjection.cs:64`. `OrdersController`: +class doc fail-closed paragraph `:40`-`:47`; `GetOwnershipSpecification()` `:66`-`:68` (`RoleNames.Admin` +`:68`); `RequireResolvableOwner()` wrapper `:80`-`:85` (summary `:70`-`:79`), called `:95`, `:129`, +`:166` and in the export `:229`; specification passed `:102`, `:140`, `:174`; export summary `:194`-`:212` +(the v1.150.0-to-v1.151.0 rationale `:198`-`:204`); `GetExportSpecification` override `:241`-`:242` +(summary `:234`-`:240`); `AllowUnscopedExport` `:249`; `ValidateOwnershipAsync` wrapper `:386`-`:402` +(summary `:381`-`:385`, helper call `:390`, claim and role `:392`-`:393`, existence predicate +`:394`-`:396`). `ShoppingCartsController`: class doc fail-closed paragraph `:35`-`:44`; filter `:50`; +`GetOwnershipSpecification()` `:65`-`:67`; wrapper `:79`-`:84`; `[AllowMissingOwner]` `:92`, `:107`, +`:136`, `:172`; gate calls `:100`, `:120`, `:182`; lookup `[HasPermission]` `:138`; +`GetReadSpecificationAsync` override `:200`-`:202` (summary `:187`-`:199`); `AllowUnscopedExport` `:209`. +`CustomersController`: filter `:35`; `AllowUnscopedExport => true` `:48`; `[AllowMissingOwner]` `:53`, +`:65`, `:82`, `:114`, `:135`, `:150`; `[HasPermission(IdentityPermissions.CustomersManage)]` `:55`, +`:67`, `:84`, `:116`, `:134`, `:149`; export rationale `:90`-`:105`; `CreateAsync` remarks `:127`-`:132`; +`DeleteAsync` remarks `:142`-`:147`. `EntityControllerBase` +(`Source/Presentation/MMCA.Common.API/Controllers/EntityControllerBase.cs`): export fail-closed remarks +`:231`-`:238`; resolved once `:269`-`:270`; refusal `:272`-`:274`; `ExportRowScopeRequiredErrorCode` +`:487`; `AllowUnscopedExport` `:508` (default false, doc `:489`-`:507`); `GetReadSpecificationAsync` +`:571`-`:573` (summary `:535`-`:542`, 404-not-403 `:562`-`:564`, once-per-request `:567`-`:568`); +`GetExportSpecification` `:601`; `UnscopedExportRefused` `:608`-`:613`; `GetByIdAsync` 404 remarks +`:351`-`:353`. ADC Conference: `EventQuestionAnswersController.cs` and `SessionQuestionAnswersController.cs` +each override `GetExportSpecification()` at `:107`-`:112`, `AllowUnscopedExport` (Organizer) at `:119`, +and declare the delegating `RequireResolvableOwner()` at `:135`-`:136`. ADC Bookmarks POST-create keeps an +inline non-Organizer check (`BookmarksController.cs:50`, `callerId` `:66`, comparison `:67`, `Forbidden` +`:69`), not the filter. The single code block is illustrative-of-shape, assembled from the real members: +the filter excerpt mirrors `OwnerOrAdminFilter.cs:43-79`, the two controller members are +`OrdersController.cs:66-68` and `:80-85`. Broken Object Level Authorization / IDOR as OWASP API1 is +industry framing, not a code claim; the Article 24 trade-offs quotation was confirmed by the audit +(`permission-based-authorization.md:157`). ADR: `Website/docs-src/adr/033-resource-ownership-authorization.md` +(deny-by-default bullet `:80`-`:91`; two failure shapes `:92`-`:94`; Store adoption and the per-record +split `:100`-`:130`; the "a null specification means two different things" block `:132`-`:146`; ADC +vocabulary `:148`-`:162`; the `[AllowMissingOwner]` audit table `:164`-`:175`; Revision 2026-09-10 (ADC +both halves) `:294`-`:328`; Revision 2026-10-01 (gate and per-record check in the helper) `:330`-`:354`). +The ADR's own consumer anchors are partly stale (it cites `ValidateOwnershipAsync` at +`OrdersController.cs:379-395` and the ADC wrappers at `:128-136`), so every consumer anchor above is read +from the controller source rather than from the ADR.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/result-railway-csharp.md b/docs-src/articles/result-railway-csharp.md index db7c581b..35b8db46 100644 --- a/docs-src/articles/result-railway-csharp.md +++ b/docs-src/articles/result-railway-csharp.md @@ -1,12 +1,12 @@ # Stop throwing exceptions for control flow: the Result railway in C# > Series: MMCA.Common · Article #4 · Pillar P2 · Group G01 · Rubric §1,§2 · ADR-013 · -> Status: grounded in `Website/docs-src/adr/013-result-pattern.md`, `MMCA.Common/CLAUDE.md` (the Result-pattern -> conventions referenced inline, not a titled section), and `Website/docs-src/onboarding/group-01-result-error-handling.md`. No em dashes. +> Status: grounded in `Website/docs-src/adr/013-result-pattern.md`, `MMCA.Common/AGENTS.md` (the Result-pattern +> conventions in its Entity Model section), the `MMCA.Common.Shared/Abstractions` source, and `Website/docs-src/onboarding/group-01-result-error-handling.md`. No em dashes. **Subtitle:** "This order ID does not exist" is not an exceptional event, it is a routine branch of normal control flow. Here is the `Result` railway that models it as a value, and why the domain in -MMCA.Common throws zero exceptions. +MMCA.Common throws zero exceptions for business outcomes. --- @@ -60,21 +60,23 @@ anywhere in the slice. The pattern is factored into three dependency-free pieces, all living in `MMCA.Common.Shared`, the innermost layer (the Blazor WebAssembly UI can reference it without dragging in EF Core or ASP.NET): -- **`ErrorType`** is the classification axis: a nine-value enum. `Validation`, `Invariant`, - `NotFound`, `Conflict`, `Unauthorized`, `Forbidden`, `UnprocessableEntity`, `Failure`, and - `Unexpected` for a genuine server-side fault the caller cannot fix by changing the request. - Critically, this is a pure enum with no reference to ASP.NET. The domain never names an HTTP - status code. +- **`ErrorType`** is the classification axis: a ten-value enum. `Validation`, `Invariant`, + `NotFound`, `Conflict`, `Unauthorized`, `Forbidden`, `UnprocessableEntity`, `Failure`, + `Unexpected` for a genuine server-side fault the caller cannot fix by changing the request, and + `TooManyRequests` for a temporary refusal after too many attempts (a login lockout, say), where + retrying later rather than changing the request is the fix. Critically, this is a pure enum with + no reference to ASP.NET. The domain never names an HTTP status code. - **`Error`** is the carrier: an immutable positional `record` with a machine-readable `Code` (e.g. `"Order.NotFound"`, for programmatic branching), a human-readable `Message`, an `ErrorType`, and - optional `Source` / `Target` context. Nine factory methods (one per `ErrorType`) each hard-code the + optional `Source` / `Target` context. Ten factory methods (one per `ErrorType`) each hard-code the correct type, so a caller can never pair `Error.NotFoundError(...)` with the wrong classification. - **`Result`** (and the generic `Result`) is the outcome envelope: either a success, or a failure carrying one or more `Error`s. -You cannot `new` a `Result`. Its constructors are `internal`; the only way in is through the static -factories (`Result.Success`, `Result.Failure`). That discipline guarantees the invariant the rest of -the codebase relies on: a result is always either a clean success or a non-empty failure, never a +You cannot `new` a `Result`. Its constructors are `internal`, so a result comes from the static +factories (`Result.Success`, `Result.Failure`) or from the implicit conversions that let a method write +`return error;` or `return value;`, and those conversions delegate to the same factories. That +discipline guarantees the invariant the rest of the codebase relies on: a result is always either a clean success or a non-empty failure, never a half-built object. ### The railway, in one picture @@ -101,7 +103,7 @@ handed when the result is already a failure. A separate `ResultExtensions` class `MapAsync`, `TapAsync` and `MatchAsync` onto a pending `Task>`, so an asynchronous pipeline composes end to end without an `await` and a temporary local between every step. -The non-generic base carries four members of its own, and **`Result.Combine(params ReadOnlySpan)`** +The non-generic base carries four combinators of its own, and **`Result.Combine(params ReadOnlySpan)`** is the one that earns its keep: the aggregate-all-failures combinator. It runs several invariant checks and returns *all* their errors at once rather than failing on the first. This is the workhorse of domain factory methods. The `ReadOnlySpan` parameter avoids a heap allocation in the common case. `Match`, `Bind` and @@ -109,20 +111,34 @@ methods. The `ReadOnlySpan` parameter avoids a heap allocation in the common cas `if (result.IsFailure)` check. ```csharp -// A domain factory: invalidity is unrepresentable, and every broken rule is reported at once. -public static Result Create(string name, Email email, DateOnly availableFrom) +// A domain factory (condensed): invalidity is unrepresentable, and Combine reports every broken rule at once. +public static Result Create( + SpeakerIdentifierType? id, + string firstName, + string lastName, + string? email, + /* bio, tagLine, profilePicture, isTopSpeaker, optional social links */) { - var validation = Result.Combine( - CheckName(name), - EmailInvariants.EnsureEmailIsValid(email, nameof(Create)), - CheckAvailability(availableFrom)); - - if (validation.IsFailure) + Email? emailVO = null; + if (!string.IsNullOrWhiteSpace(email)) { - return Result.Failure(validation.Errors); + var emailResult = Email.Create(email); + if (emailResult.IsFailure) + return Result.Failure(emailResult.Errors); + emailVO = emailResult.Value; } - return Result.Success(new Speaker { Id = default, Name = name, Email = email }); + var result = Result.Combine( + SpeakerInvariants.EnsureFirstNameIsValid(firstName, nameof(Create)), + SpeakerInvariants.EnsureLastNameIsValid(lastName, nameof(Create)), + SpeakerInvariants.EnsureOptionalFieldsAreValid(/* tagLine, links, */ nameof(Create))); + if (result.IsFailure) + return Result.Failure(result.Errors); + + var speaker = new Speaker(firstName, lastName, emailVO /* , ... */) { /* Id, links */ }; + speaker.AddDomainEvent(new SpeakerChanged(DomainEntityState.Added, speaker.Id, speaker.FullName)); + + return Result.Success(speaker); } // The shared create pipeline propagates the failure and stops; the success path continues. @@ -144,6 +160,9 @@ protected async Task> CreateCoreAsync( await PersistAsync(attemptUnitOfWork, repository, entity, cancellationToken).ConfigureAwait(false); + LogCreated(entity); + await OnCreatedAsync(entity, cancellationToken).ConfigureAwait(false); + return Result.Success(dtoMapper.MapToDTO(entity)); } ``` @@ -156,8 +175,8 @@ forwards the errors it cannot handle, and the failure path is carried along as d Because `ErrorType` is transport-agnostic, the translation to an HTTP status code is centralized in a single shared internal class, `ErrorHttpMapping`. It owns the `FrozenDictionary` that maps each `ErrorType` to a status (`Validation`, `Invariant` and `Failure` to 400, `NotFound` to 404, `Conflict` -to 409, `Unauthorized` to 401, `Forbidden` to 403, `UnprocessableEntity` to 422, `Unexpected` to 500, -anything unmapped falling back to 400) and the `GetStatusCode` lookups over it. Two consumers share the +to 409, `Unauthorized` to 401, `Forbidden` to 403, `UnprocessableEntity` to 422, `TooManyRequests` to +429, `Unexpected` to 500, anything unmapped falling back to 400) and the `GetStatusCode` lookups over it. Two consumers share the status lookup. `ApiControllerBase.HandleFailure()` is the normal path: a controller action resolves the status from the *most severe* error present through `ErrorHttpMapping` and renders an RFC 9457 ProblemDetails body carrying *all* the errors. `UnhandledResultFailureFilter` is the safety net: a global @@ -167,7 +186,8 @@ attribute, reuses the same class for the errors projection alone. Because the di place, the controller base and the filter can never drift apart. The gRPC layer does the equivalent over the wire (`GrpcResultExceptionInterceptor`, ADR-007), so a remote -call looks like a local `Result` to application code. One enum drives both transports, so every +call looks like a local `Result` to application code (`TooManyRequests`, for instance, travels as +`ResourceExhausted`). One enum drives both transports, so every endpoint and every extracted service produces the same error shape. There is one source of truth for "what does a not-found look like." @@ -212,12 +232,12 @@ The Result pattern is not free, and ADR-013 names the rough edges rather than hi framework-owned. That is not the only exception the framework catches, though. An ordered `IExceptionHandler` chain converges every escaped exception onto the same RFC 9457 ProblemDetails contract: a cancellation handler (499), a domain-exception handler (400), a `DbUpdate` handler (409), - a validation handler (400), and a catch-all (500), registered in that load-bearing order. So the + a validation handler (400), and a catch-all (500, or 400 for a refused cross-tenant write), registered in that load-bearing order. So the failure shape stays identical whether it arrived as a `Result` or as a throw. - **One status has to stand for a whole list of errors.** Every error serializes into the ProblemDetails body, but the status code can only be one number, so it is resolved by ranking: the most severe `ErrorType` present wins (`Unexpected` over `Unauthorized` over `Forbidden` over - `Conflict` over `NotFound` over `UnprocessableEntity` over the shared bottom rank of `Invariant`, + `TooManyRequests` over `Conflict` over `NotFound` over `UnprocessableEntity` over the shared bottom rank of `Invariant`, `Validation` and `Failure`), and equal ranks keep the earliest error. A result carrying both a `Validation` and a `Conflict` answers 409, and the validation detail is readable only in the body. @@ -262,74 +282,93 @@ pattern, or `dotnet add package MMCA.Common.API` and try it.* *Tags: .NET, C Sharp, Software Architecture, Programming, Error Handling* -*Notes: re-verified 2026-09-19 against MMCA.Common at v1.205.0. Type and behavior names, all read this -run: `ErrorType` (nine members: Validation, Invariant, NotFound, Conflict, Unauthorized, Forbidden, -UnprocessableEntity, Failure, Unexpected; `Source/Core/MMCA.Common.Shared/Abstractions/ErrorType.cs:10-41`, -`Unexpected` at `:36-41`); `Error` with nine factory methods, one per member -(`.../Abstractions/Error.cs`: `Validation` `:37`, `Invariant` `:46`, `NotFoundError` `:55`, `Conflict` -`:64`, `Unauthorized` `:73`, `Forbidden` `:82`, `UnprocessableEntity` `:91`, `Failure` `:100`, -`Unexpected` `:114`); and `Result`/`Result` (`.../Abstractions/Result.cs`, 366 lines). Combinators -re-anchored this run: on `Result`, `Match` `:260`, `Map` `:276`, `BindAsync` `:289`, `Bind` `:302`, -`Tap` `:314`, `Ensure` `:334`, `MatchAsync` `:355`, with the internal value-bearing constructors at -`:211` and `:217`; on the non-generic `Result`, `Combine` `:124`, `Match` `:155`, `OnFailure` `:169`, -`Bind` `:187`. `ResultExtensions` (`.../Abstractions/ResultExtensions.cs:10`) lifts the same shapes onto -a pending `Task>`: `BindAsync` `:20`/`:39`, `MapAsync` `:58`, `TapAsync` `:77`, `MatchAsync` -`:102`. ADR-013 documents the whole surface (`Website/docs-src/adr/013-result-pattern.md:48-59`). -The combinators carry production call sites, not only tests: `.Map(...)` at -`Source/Presentation/MMCA.Common.UI/Services/Api/EntityServiceBase.cs:75` and `:127`, while `Combine` -and the explicit guard-and-propagate pair are used throughout. Unit coverage is -`Tests/Core/MMCA.Common.Shared.Tests/Abstractions/ResultTests.cs`: `Map` `:119`/`:128`, `BindAsync` +*Notes: re-verified 2026-10-02 against MMCA.Common at v1.221.0 (FACTS.md). Type and behavior names, all read this +run: `ErrorType` (ten members: Validation, Invariant, NotFound, Conflict, Unauthorized, Forbidden, +UnprocessableEntity, Failure, Unexpected, TooManyRequests; `Source/Core/MMCA.Common.Shared/Abstractions/ErrorType.cs:10-49`, +`Unexpected` at `:36-41`, `TooManyRequests` (HTTP 429, appended last so earlier numeric values do not move) at `:43-48`); +`Error` with ten factory methods, one per member (`.../Abstractions/Error.cs`: `Validation` `:37`, `Invariant` `:46`, +`NotFoundError` `:55`, `Conflict` `:64`, `Unauthorized` `:73`, `Forbidden` `:82`, `UnprocessableEntity` `:91`, +`TooManyRequests` `:103`, `Failure` `:112`, `Unexpected` `:126`); and `Result`/`Result` +(`.../Abstractions/Result.cs`, 366 lines). Construction: the value-bearing constructors are `internal` (`:211`, +`:217`); the static factories are `Success` `:62`/`:68` and `Failure` `:74`/`:83`/`:94`/`:101`; the implicit +conversions `Error` to `Result` (`:43`, via `FromError` `:49`, which calls `Failure`), `Error` to `Result` +(`:233`, calls `Failure`) and `T` to `Result` (`:249`, calls `Success`) all delegate to those factories, so +the "never half-built" invariant holds without the factories being the only spelling. Combinators: on +`Result`, `Match` `:260`, `Map` `:276`, `BindAsync` `:289`, `Bind` `:302`, `Tap` `:314`, `Ensure` `:334`, +`MatchAsync` `:355`; on the non-generic `Result`, four combinators: `Combine` `:124`, `Match` `:155`, `OnFailure` +`:169`, `Bind` `:187` (the class also declares the factories, conversions and state properties, hence +"combinators", not "members"). `ResultExtensions` (`.../Abstractions/ResultExtensions.cs:10`) lifts the same shapes +onto a pending `Task>`: `BindAsync` `:20`/`:39`, `MapAsync` `:58`, `TapAsync` `:77`, `MatchAsync` +`:102`. ADR-013 names the four exception costs (`Website/docs-src/adr/013-result-pattern.md:20-23`) and documents +the combinator surface (`:48-59`), but its `ErrorType` list (`:31-32`), its severity ranking (`:77-79`) and its +mapping anchors predate `TooManyRequests`, so this article cites source, not the ADR, for the category list, +the status table and the ranking. Production call sites: `.Map(...)` at +`Source/Presentation/MMCA.Common.UI/Services/Api/EntityServiceBase.cs:75` and `:127`. Unit coverage +(`Tests/Core/MMCA.Common.Shared.Tests/Abstractions/ResultTests.cs`): `Map` `:119`/`:128`, `BindAsync` `:146`/`:156`/`:166`, `Match` `:184`/`:196`, `Bind` `:325`/`:334`, `Tap` `:352`/`:364`, `Ensure` -`:377`/`:387`/`:396`, `MatchAsync` `:415`/`:425`, the non-generic `Match`/`OnFailure`/`Bind` at -`:255-308`, implicit conversions at `:209-246`. The application-handler snippet is the shared create -pipeline `CreateCoreAsync` -(`Source/Core/MMCA.Common.Application/UseCases/Crud/CreateEntityHandlerBase.cs:77-103`: guard-and-propagate -at `:84-86` and `:91-92`, repository at `:95`, `Result.Success` at `:102`), condensed for print (the -`ArgumentNullException` guard at `:82` and the `prepared.Value!` local at `:88` are elided). Its ADC leaf -`CreateSpeakerHandler` -(`MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Application/Speakers/UseCases/Create/CreateSpeakerHandler.cs:15-27`) -is a 28-line primary-constructor sealed partial class deriving from -`CreateEntityHandlerBase` (`:20-21`) -whose only body member is the `LogCreated` override (`:24`), so the railway lives in the base. The -`Speaker.Create` snippet is illustrative of the documented factory shape, not copied verbatim from a -single source file. `DomainInvariantViolationException` +`:377`/`:387`/`:396`, `MatchAsync` `:415`/`:425`, the non-generic `Match`/`OnFailure`/`Bind` at `:255-308`, +implicit conversions at `:209-246`. The domain-factory snippet is condensed from ADC's `Speaker.Create` +(`MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Domain/Speakers/Speaker.cs:116`: `Email.Create` with +an early return at `:134`, `Result.Combine` over the three `SpeakerInvariants` checks at `:140`, the +`SpeakerChanged` domain event at `:170`, `Result.Success` at `:172`); parameters after `email`, the constructor +arguments, the id selection and the social-link initializers are elided as comments. The application-handler +snippet is the shared create pipeline `CreateCoreAsync` +(`Source/Core/MMCA.Common.Application/UseCases/Crud/CreateEntityHandlerBase.cs:77-103`: guard-and-propagate at +`:84-86` and `:91-92`, repository at `:95`, `LogCreated` `:99`, `OnCreatedAsync` `:100`, `Result.Success` at +`:102`), condensed for print (the `ArgumentNullException` guard at `:82` and the `prepared.Value!` request local +at `:88` are elided, the latter inlined into the mapper call). Its ADC leaf `CreateSpeakerHandler` +(`MMCA.ADC/Source/Modules/Conference/MMCA.ADC.Conference.Application/Speakers/UseCases/Create/CreateSpeakerHandler.cs:15-28`) +is a primary-constructor sealed partial class deriving from +`CreateEntityHandlerBase` (`:20-21`) whose +only override is `LogCreated` (`:24`), backed by the `[LoggerMessage]` partial `LogSpeakerCreated` (`:26-27`), so +the railway lives in the base. `DomainInvariantViolationException` (`Source/Core/MMCA.Common.Shared/Exceptions/DomainInvariantViolationException.cs:9`) is the concrete -`DomainException` subclass for the EF-materialization gap; an ordered `IExceptionHandler` chain -(`AddCommonExceptionHandlers`, `Source/Presentation/MMCA.Common.API/DependencyInjection.cs:149`, -re-anchored this run: doc comment `:143-148`, the five `AddExceptionHandler` registrations at `:154-158`, -OperationCanceled 499, Domain 400, DbUpdate 409, Validation 400, catch-all Global 500) converges every -escaped exception onto the same RFC 9457 ProblemDetails contract. The status mapping lives in one shared -internal class: `ErrorHttpMapping` holds the `FrozenDictionary` (`ErrorTypeToStatusCode`, -`Source/Presentation/MMCA.Common.API/Middleware/ErrorHttpMapping.cs:20-31`, `Unexpected` to 500 at `:30`), -the single-type `GetStatusCode` with its 400 fallback (`:37-38`), and the list overload that resolves the -status from `ErrorTypeSeverity.MostSevere(errors).Type` (`:50-51`); its own doc comment (`:8-13`) states -the mapping is shared so the controller base and the filter stay consistent. The severity ranking is one -table in the Shared layer (`Source/Core/MMCA.Common.Shared/Abstractions/ErrorTypeSeverity.cs:37-48`: -Unexpected 70, Unauthorized 60, Forbidden 50, Conflict 40, NotFound 30, UnprocessableEntity 20, -Invariant/Validation/Failure sharing 10), ties keeping the earliest error; ADR-013 argues it at -`013-result-pattern.md:72-83`. Two consumers call the status lookup: `ApiControllerBase.HandleFailure` -(`Source/Presentation/MMCA.Common.API/Controllers/ApiControllerBase.cs:35`, status resolved at `:48`, -errors extension at `:58`) and `UnhandledResultFailureFilter` -(`.../Middleware/UnhandledResultFailureFilter.cs:36`, errors extension at `:47`); a third caller, -`SupportsIfMatchAttribute` (`.../Concurrency/SupportsIfMatchAttribute.cs:217`), reuses -`BuildErrorsExtension` alone. The §15 (Best Practices & Code Quality) scorecard row -(`Website/docs-src/governance/common-ArchitectureScorecard.md:95`, re-anchored this run: the table -header sits at `:79` and the whole table shifted eight lines) credits "consistent Result-based error -handling". Read-side envelopes `CollectionResult` / `PagedCollectionResult` / `PaginationMetadata` -(`[DataContract]` with deterministic `[DataMember(Order)]`, computed members tagged `[IgnoreDataMember]`) -live in `MMCA.Common.Shared.Abstractions/PaginationMetadata.cs`; a paged handler returns -`Result>`. The header rubric mapping stays §1,§2: the §1 SOLID Principles row -(`common-ArchitectureScorecard.md:81`) and the §2 Design Patterns row (`:82`, "Idiomatic, problem-driven: -Result over exceptions ... entity Factory+Result") both rest on this article's subject, while the §10 -Messaging & Integration Architecture row (`:90`) carries no Result or error-handling evidence, so §10 -stays off the header line. The article grounds §1 independently: the three-type split -(`ErrorType`/`Error`/`Result`) is an SRP separation, one classifies, one carries, one envelopes (criterion -at `ArchitectureEvaluationCriteria.md:127`, re-anchored this run from `:114`), and the combinator surface -stays role-narrow, with the valueless shapes kept on the non-generic `Result` rather than forced onto -`Result` (ISP criterion at `:130`, from `:117`). Change history: the previous pass called `ErrorType` -eight-valued, described `Result` as a deliberately minimal three-combinator surface, and described the -HTTP status selection as first-error-wins; all three moved, against the source cited above. An earlier -claim that no "zero throw-new in Domain" rule exists anywhere in the repo is dropped rather than repeated, -because a workspace-wide absence was not established this run.* +`DomainException` subclass for the EF-materialization gap; the ordered `IExceptionHandler` chain +(`AddCommonExceptionHandlers`, `Source/Presentation/MMCA.Common.API/DependencyInjection.cs:149`, doc comment +`:143-148`, the five `AddExceptionHandler` registrations at `:154-158`: OperationCanceled 499, Domain 400, +DbUpdate 409, Validation 400, catch-all Global 500, the Global handler answering 400 for +`CrossTenantWriteException` at `.../Middleware/GlobalExceptionHandler.cs:47-53`) converges every escaped +exception onto the same RFC 9457 ProblemDetails contract. The status mapping lives in one shared internal class: +`ErrorHttpMapping` holds the `FrozenDictionary` (`ErrorTypeToStatusCode`, +`Source/Presentation/MMCA.Common.API/Middleware/ErrorHttpMapping.cs:20-32`, `Unexpected` to 500 at `:30`, +`TooManyRequests` to 429 at `:31`), the single-type `GetStatusCode` with its 400 fallback (`:38-39`), and the +list overload that resolves the status from `ErrorTypeSeverity.MostSevere(errors).Type` (`:51-52`); its doc +comment (`:8-13`) states the mapping is shared so the controller base and the filter stay consistent. The +severity ranking is one table in the Shared layer +(`Source/Core/MMCA.Common.Shared/Abstractions/ErrorTypeSeverity.cs:38-50`: Unexpected 70, Unauthorized 60, +Forbidden 50, TooManyRequests 45 at `:43`, Conflict 40, NotFound 30, UnprocessableEntity 20, +Invariant/Validation/Failure sharing 10), ties keeping the earliest error (strict `>` in the scan at `:87-95`). +Two consumers call the status lookup: `ApiControllerBase.HandleFailure` +(`Source/Presentation/MMCA.Common.API/Controllers/ApiControllerBase.cs:35`, status resolved at `:48`, errors +extension at `:58`) and `UnhandledResultFailureFilter` (`.../Middleware/UnhandledResultFailureFilter.cs:36`, +errors extension at `:47`); a third caller, `SupportsIfMatchAttribute` +(`.../Concurrency/SupportsIfMatchAttribute.cs:217`), reuses `BuildErrorsExtension` alone. Source-comment drift +observed, not an article claim: the ranking in the `ApiControllerBase` doc comment (`:26-30`) omits +`TooManyRequests`. gRPC: `GrpcResultExceptionInterceptor` +(`Source/Presentation/MMCA.Common.Grpc/Interceptors/GrpcResultExceptionInterceptor.cs:19`); `TooManyRequests` +maps to `StatusCode.ResourceExhausted` at `.../ResultGrpcExtensions.cs:49`. The section 15 (Best Practices & Code +Quality) scorecard row (`Website/docs-src/governance/common-ArchitectureScorecard.md:79`, table header `:63`) +credits "consistent Result-based error handling". Read-side envelopes in +`Source/Core/MMCA.Common.Shared/Abstractions/PaginationMetadata.cs` (records at `:12`, `:92`, `:119`, `Items` +`:110`, the `PaginationMetadata` property `:139`, `[IgnoreDataMember]` derived values `:74`/`:78`/`:82`); a +paged handler returns `Result>`. The header rubric mapping stays sections 1 and 2: the section 1 SOLID +Principles row (`common-ArchitectureScorecard.md:65`) and the section 2 Design Patterns row (`:66`, "Idiomatic, +problem-driven: Result over exceptions ... Factory+Result") rest on this article's subject, while the section 10 +Messaging & Integration Architecture row (`:74`) carries no Result or error-handling evidence, so section 10 stays off +the header line. The article grounds section 1 independently: the three-type split (`ErrorType`/`Error`/`Result`) is an +SRP separation (criterion at `ArchitectureEvaluationCriteria.md:127`), and the combinator surface stays +role-narrow, with the valueless shapes kept on the non-generic `Result` (ISP criterion at `:130`). The header +grounding cites `MMCA.Common/AGENTS.md:101` (Entity Model: `Create(...)` factories returning `Result`, +invariants composed with `Result.Combine()`), because `MMCA.Common/CLAUDE.md` is a stub importing it. Change +history: the 2026-09-19 pass (v1.205.0) called `ErrorType` nine-valued; `TooManyRequests` landed in v1.219.0 +(`MMCA.Common/CHANGELOG.md:27-31`) with its factory, 429 mapping, rank 45 and gRPC `ResourceExhausted`, and +this pass adds it to every list, re-anchors `Error.cs`, `ErrorHttpMapping.cs`, `ErrorTypeSeverity.cs` and the +scorecard rows (shifted 16 lines up), replaces the invented `Speaker.Create(string name, Email email, ...)` +snippet (which passed an `Email` to `EmailInvariants.EnsureEmailIsValid(string, string)`, `EmailInvariants.cs:23`) +with the condensed real factory, restores `LogCreated`/`OnCreatedAsync` to the pipeline snippet, and narrows +"the only way in is the static factories" to name the implicit conversions. Earlier passes called `ErrorType` +eight-valued, `Result` a three-combinator surface, and status selection first-error-wins. The subtitle's +unqualified "throws zero exceptions" is narrowed to "for business outcomes" (`MMCA.Common.Domain` +keeps argument guards such as `Specification.cs:52`) (subtitle edited in the same 2026-10-02 run).* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/reusable-blazor-ui-framework.md b/docs-src/articles/reusable-blazor-ui-framework.md index 27c183cc..d6e7bb36 100644 --- a/docs-src/articles/reusable-blazor-ui-framework.md +++ b/docs-src/articles/reusable-blazor-ui-framework.md @@ -1,8 +1,8 @@ # A list page in a few lines: a reusable Blazor UI framework with the same discipline as the backend > Series: MMCA.Common · Article #37 (deep-dive) · Pillar P2,P5 · Group G15 · Rubric §18,§19,§20,§23 · ADR-067 · -> Status: grounded in `Website/docs-src/onboarding/group-15-common-ui-framework.md`, -> `group-25-adc-host-composition.md`. No em dashes. +> Status: grounded in `MMCA.Common/Source/Presentation/MMCA.Common.UI` (v1.221.0 source), +> `Website/docs-src/onboarding/group-15-common-ui-framework.md`, `group-25-adc-host-composition.md`. No em dashes. **Subtitle:** This series has been backend all the way down. But the front end is where DRY usually goes to die: every list screen re-implements paging, sort, filter, loading, and teardown. Here is the same ports-and-base-classes discipline, applied to Blazor, so a list page is a few lines instead of a few hundred. @@ -24,25 +24,37 @@ That constraint is what forces the design to be honest. The UI cannot reach into ## DataGridListPageBase: the screen you stop rewriting -The centerpiece is an abstract Blazor component, `DataGridListPageBase`. Every server-paged list screen in every consumer app derives from it. It folds into one reusable place the concerns that were otherwise copy-pasted onto each page: server-side paging against MudBlazor's `MudDataGrid`, the `CancellationTokenSource` lifecycle, the loading flag, extracting filter and sort out of MudBlazor's `GridState`, surfacing errors through `ISnackbar`, viewport-driven mobile-versus-desktop rendering, and a careful `IAsyncDisposable` / `IDisposable` teardown. +The centerpiece is an abstract Blazor component, `DataGridListPageBase`. Every server-paged list screen in every consumer app derives from it. It folds into one reusable place the concerns that were otherwise copy-pasted onto each page: server-side paging against MudBlazor's `MudDataGrid`, the `CancellationTokenSource` lifecycle, the loading flag, extracting filter and sort out of MudBlazor's `GridState`, surfacing errors through the framework's own `IToastService`, viewport-driven mobile-versus-desktop rendering, and a careful `IAsyncDisposable` / `IDisposable` teardown. -Because all of that lives in the base, a concrete page is tiny. It supplies a `Title`, points the grid's `ServerData` at the inherited load method, and declares its columns in markup. That is the whole page. It does not write a query string, does not manage a token source, does not branch on screen size, and does not handle its own disposal. +Because all of that lives in the base, a concrete page is tiny. It supplies a `Title`, hands the base its grid reference, points the grid's `ServerData` at a one-expression method that passes the inherited load method its data call, and declares its columns in markup. That is the whole page. It does not write a query string, does not manage a token source, does not branch on screen size, and does not handle its own disposal. ```razor @inherits DataGridListPageBase @page "/products" +@inject IEntityService ProductService - + +@code { + private MudDataGrid? _dataGrid; + protected override MudDataGrid? GridRef => _dataGrid; + + private Task> LoadServerData(GridState state, CancellationToken cancellationToken) + => LoadServerDataAsync( + state, + (filters, page, size, sortCol, sortDir, ct) + => ProductService.GetPagedAsync(filters, page, size, sortCol, sortDir, cancellationToken: ct)); +} ``` -The single inherited method doing the work, `LoadServerDataAsync`, is the heart of the desktop path. It resets the cancellation source, extracts filters and sort from the `GridState` MudBlazor hands it, runs the fetch, and maps a cancellation or an exception to an empty grid plus an optional snackbar instead of an unhandled error. Paging is genuinely server-side: only the requested page is fetched, never the whole table. +The single inherited method doing the work, `LoadServerDataAsync`, is the heart of the desktop path. It resets the cancellation source, extracts filters and sort from the `GridState` MudBlazor hands it, runs the fetch, and maps a cancellation, an exception, or a failed `Result` to an empty grid plus a toast (the cancellation toast is optional) instead of an unhandled error, raising a `LoadFailed` flag on a failure. Overlapping calls end on the newest one: a load superseded by a later call answers with that later call's rows, so a slow stale fetch can never overwrite fresher data. Paging is genuinely server-side: only the requested page is fetched, never the whole table. Two of the gnarliest details in this base are battle scars, and they are the best argument for consolidating. The first is a MudDataGrid v9 quirk: a parameter setter that clobbers the current page, worked around in one place by re-restoring the page after a rows-per-page reset. The second is a disposed-token-source race, where a debounced reload firing after the component disposed threw `ObjectDisposedException` and left the `blazor-error-ui` banner stuck onto the next page. Both were found through end-to-end tests, both were fixed once, and because the fix lives in the base, every list page got it for free. That is the entire thesis in one observation: when the concern is in one place, so is the fix. @@ -98,11 +110,11 @@ same pages rather than a mobile-specific build that could drift. ## The data-access boundary: bind to an interface, never to HttpClient -A page in this framework never injects a raw `HttpClient`. It injects `IEntityService`, a generic CRUD contract: `GetAllAsync`, `GetPagedAsync`, `GetByIdAsync`, `AddAsync`, `UpdateAsync`, `DeleteAsync`, plus a `GetAllForLookupAsync` for dropdowns. The grid's `ServerData` callback above is just calling `GetPagedAsync`, which returns an `(Items, TotalItems)` tuple shaped exactly for a server-side grid. +A page in this framework never injects a raw `HttpClient`. It injects `IEntityService`, a generic CRUD contract: `GetAllAsync`, `GetPagedAsync`, `GetByIdAsync`, `AddAsync`, `UpdateAsync`, `DeleteAsync`, plus a `GetAllForLookupAsync` for dropdowns. Every member returns a `Result`, the same railway type the server produced. `GetPagedAsync` returns a `Result` wrapping an `(Items, TotalItems)` tuple shaped exactly for a server-side grid, and a missing entity from `GetByIdAsync` is a `NotFound` failure, never a success carrying null. A page branches on the outcome instead of catching an exception. -The behavior behind that interface comes from an abstract base, `EntityServiceBase`. A concrete module service is mostly an endpoint string. Every verb routes through one dispatch chokepoint, `SendRequestAsync`, so retry, auth, and error extraction are applied identically to every call. The error extraction is the subtle, valuable part: before letting `EnsureSuccessStatusCode` throw a contextless `HttpRequestException`, the base calls a helper that pulls the server's structured Problem Details payload (a domain failure, a validation failure) out of the response body. A backend `Result.Failure` therefore surfaces to the page as the server's real message, not a generic "server error." +The behavior behind that interface comes from an abstract base, `EntityServiceBase`. A concrete module service is mostly an endpoint string. Every verb routes through one dispatch chokepoint, `SendRequestAsync`, so retry, auth, and error handling are applied identically to every call. The error handling is the subtle, valuable part: the call runs through an `HttpResultExecutor` that turns transport faults into failures, and every response is read through a `ProblemDetailsResultReader` that rebuilds the server's structured Problem Details payload (a domain failure, a validation failure) as a `Result` with its original `ErrorType` intact. The base states the rule in source: nothing in it throws for a server answer, and the only exception that escapes is the caller's own cancellation. A backend `Result.Failure` therefore surfaces to the page as the server's real message and error type, not a generic "server error." -`EntityServiceBase` derives in turn from `AuthenticatedServiceBase`, which owns the two cross-cutting concerns of any outbound API call. One is a Polly retry policy: three attempts with exponential backoff on `HttpRequestException` or any 5xx. The other is stamping the JWT bearer token onto a freshly created `"APIClient"` `HttpClient` from `IHttpClientFactory`. That base exists for a precise Blazor Server reason, documented in source: `IHttpClientFactory` builds its handler chain in a separate DI scope from the Blazor circuit, so the conventional delegating handler cannot reach the circuit-scoped storage that holds the in-memory access token. Reading the token directly and setting the header on a fresh client is the smallest correct fix for that scope mismatch. +`EntityServiceBase` derives in turn from `AuthenticatedServiceBase`, which owns the two cross-cutting concerns of any outbound API call. One is a Polly retry policy: three retries with exponential backoff (2, 4, and 8 seconds plus up to a second of jitter) on `HttpRequestException` or a retryable status, meaning any 5xx except the permanent 501 and 505, plus 408 and 429, with each retried response disposed so a sustained outage does not leak connections. The other is stamping the JWT bearer token onto a freshly created `"APIClient"` `HttpClient` from `IHttpClientFactory`. That base exists for a precise Blazor Server reason, documented in source: `IHttpClientFactory` builds its handler chain in a separate DI scope from the Blazor circuit, so the conventional delegating handler cannot reach the circuit-scoped storage that holds the in-memory access token. Reading the token directly and setting the header on a fresh client is the smallest correct fix for that scope mismatch. The shape is the same one the backend uses for everything: an interface the consumer programs against, a base class that carries the 80 percent, and a composition root that wires the transport. The UI is just another consumer of ports. @@ -112,11 +124,11 @@ Visual consistency lives in one static `MudTheme`, exposed as `MMCATheme.Instanc That default is not a lock-in. `MmcaThemeProviders` takes an optional `Theme` parameter that defaults to `MMCATheme.Instance`, so an app with its own brand passes a derived `MudTheme` in one attribute instead of forking the provider block and re-implementing the day/dark lifecycle wired behind it. Two honest limits. The override reaches MudBlazor's own components and stops there: the raw CSS rules in `app.css` read their colors from `--mmca-*` custom properties whose literal hex mirrors `BrandColors`, so a host that swaps the theme object and nothing else gets rebranded Mud components sitting on framework-colored stylesheet rules. And the extension point is unexercised: every root layout across these repos renders `` bare, so "one theme everywhere" is the observed state rather than an enforced one. -The interesting move is what feeds it. The brand palette is a single C# source of truth, `BrandColors`, six `const` hex values (a primary and a secondary each with a darkened and lightened variant) that `MMCATheme` references. The catch is that raw CSS rules in `app.css` need those same colors as custom properties, so the palette exists twice: once in C# for MudBlazor, once in CSS for stylesheet rules. That is a textbook drift hazard. The codebase neutralizes it with a fitness test, `BrandColorTokenTests`, which parses `app.css` and asserts each CSS token equals its `BrandColors` constant. If the two drift, the build fails before it ships. +The interesting move is what feeds it. The palette is a single C# source of truth, `BrandColors`: 37 `const` hex values, the six brand colors (a primary and a secondary, each with a darkened and lightened variant) plus the shared chrome, light-palette, and dark-palette values, so every hex value in both `MMCATheme` palettes is one of its constants. The catch is that raw CSS rules in `app.css` need the brand colors as custom properties, so those exist twice: once in C# for MudBlazor, once in CSS for stylesheet rules. That is a textbook drift hazard. The codebase neutralizes it with a fitness test, `BrandColorTokenTests`, which parses `app.css` and asserts each brand CSS token equals its `BrandColors` constant. If the two drift, the build fails before it ships. -This is the same "executable governance" idea the backend uses to enforce its layer rules: an invariant that matters is enforced by a test, not by hope and code review. And the color choices themselves carry accessibility reasoning. The theme's `Secondary` color was deliberately bumped from Teal 600 (around 4.0:1 on light surfaces, below the WCAG AA 4.5:1 floor for normal text) to Teal 700 (around 5.3:1), with the contrast calculation written into the source comment, because that color drives muted helper text. +This is the same "executable governance" idea the backend uses to enforce its layer rules: an invariant that matters is enforced by a test, not by hope and code review. And the color choices themselves carry accessibility reasoning. The theme's `Secondary` color is Teal 700 (around 5.3:1 on light surfaces) rather than Teal 600 (around 4.0:1, below the WCAG AA 4.5:1 floor for normal text), with the contrast calculation written into the source comment, because that color drives muted helper text. -The typography half of the theme had a quieter version of the same duplication problem, and for a while it was losing. `MMCATheme` names `Inter` first in its font stack and `app.css` names it again on `html, body`, but the package shipped no Inter faces, so the stack silently fell through to Segoe UI on Windows and to a generic sans-serif everywhere else. The "professional typography" was declared in two files and rendered in neither. The fix was to vendor the font rather than link it: five latin-subset `woff2` files (weights 400 through 800, about 24 KB each) now live under the package's `wwwroot/fonts` with their SIL OFL license, declared by five `@font-face` blocks at the top of `app.css` and served same-origin from `_content/MMCA.Common.UI/fonts/`. Two details there are deliberate. Self-hosting fits the host's existing `font-src 'self'` content-security policy with no CDN allowance to add, which is the kind of default worth taking when the alternative is loosening a header. And `font-display: swap` keeps first paint on the fallback face instead of blocking text, which is exactly what the LCP budget in the Web Vitals E2E suite is watching. The cost is honest: roughly 120 KB of font in the package, latin glyphs only, and a family name that now exists in two places with a comment in each asking you to keep them in step. +The typography half of the theme has a quieter version of the same duplication problem. `MMCATheme` names `Inter` first in its font stack and `app.css` names it again on `html, body`, and with no faces shipped the stack would silently fall through to Segoe UI on Windows and to a generic sans-serif everywhere else: "professional typography" declared in two files and rendered in neither. So the package vendors the font rather than linking it: five latin-subset `woff2` files (weights 400 through 800, about 24 KB each) live under the package's `wwwroot/fonts` with their SIL OFL license, declared by five `@font-face` blocks at the top of `app.css` and served same-origin from `_content/MMCA.Common.UI/fonts/`. Two details there are deliberate. Self-hosting fits the host's existing `font-src 'self'` content-security policy with no CDN allowance to add, which is the kind of default worth taking when the alternative is loosening a header. And `font-display: swap` keeps first paint on the fallback face instead of blocking text, which is exactly what the LCP and FCP budgets in the Web Vitals E2E suite are watching. The cost is honest: roughly 120 KB of font in the package, latin glyphs only, and a family name that exists in two places with a comment in each asking you to keep them in step. ## Render-mode state persistence: no flash, no double fetch @@ -171,40 +183,45 @@ framework's components without this composition model. Here is where the front-end ports pay off the most. The same Razor component set runs on Blazor Server, Blazor WebAssembly, and a .NET MAUI hybrid host (Android, iOS, macOS, Windows) with no per-platform reimplementation. The primer's phrase for this is "write-once UI, render everywhere." A component never asks "am I on MAUI?" It asks an injected abstraction, and each host registers its own implementation. -Token refresh is the cleanest example, because the right answer genuinely differs per platform for security reasons. The swap point is a one-method interface, `ITokenRefresher`, with two implementations chosen per host: +Token refresh is the cleanest example, because the right answer genuinely differs per host for security reasons. The swap point is a one-method interface, `ITokenRefresher`, with three implementations chosen per host: ```csharp -// Browser (Blazor Server + WASM): the refresh token lives in an HttpOnly cookie. +// Browser default: the refresh token lives in an HttpOnly cookie. // A same-origin JS helper POSTs to /auth/session/token; the cookie rides along; // the host refreshes server-side and returns ONLY the access token. JS never -// sees the refresh token, so there is no XSS exfiltration surface. +// sees the refresh token, so there is no XSS exfiltration surface for it. public sealed class SameOriginProxyTokenRefresher : ITokenRefresher { /* ... */ } +// Blazor Server with the same-origin API proxy enabled (AddCommonSameOriginApiProxy +// swaps this in): the circuit asks /auth/session/handoff for a protected handoff and +// opens it on the server, so the access token only ever exists in circuit memory. +internal sealed class HandoffTokenRefresher : ITokenRefresher { /* ... */ } + // MAUI: there is no browser DOM, hence no XSS surface. The refresh token sits in // OS SecureStorage (iOS Keychain / Android Keystore) and is exchanged directly // against auth/refresh. public sealed class DirectApiTokenRefresher : ITokenRefresher { /* ... */ } ``` -Both return `Task`, and the null is load-bearing: `null` means "no valid session exists," and the caller treats that as a logout, not an error to catch. The higher-level `AuthUIService` calls the same code path regardless of host. Above it, a custom `JwtAuthenticationStateProvider` reads claims from the stored JWT client-side and pushes auth-state changes so Blazor's `AuthorizeView` and `CascadingAuthenticationState` react instantly after login or refresh, with the server still validating every request as the real authority. The whole client-side auth surface, login, register, OAuth code-exchange, logout, refresh, change-password, sits behind `IAuthUIService` and depends only on `Shared` auth DTOs, so it too honors the UI-to-Shared-only rule. +All three return `Task`, and the null is load-bearing: `null` means "no valid session exists," and the caller treats that as a logout, not an error to catch. The higher-level `AuthUIService` calls the same code path regardless of host. Above it, a custom `JwtAuthenticationStateProvider` reads claims from the stored JWT client-side and pushes auth-state changes so Blazor's `AuthorizeView` and `CascadingAuthenticationState` react instantly after login or refresh, with the server still validating every request as the real authority. The whole client-side auth surface, login, register, OAuth code-exchange, logout, refresh, change-password, sits behind `IAuthUIService` and depends only on `Shared` auth DTOs, so it too honors the UI-to-Shared-only rule. -The payoff is concrete. Adding a platform is "implement these interfaces," not "fork the UI." The threat model differs per host, so the implementations differ, but the components above them never know. +The payoff is concrete. Adding a platform, or a stricter mode of an existing one, is "implement these interfaces," not "fork the UI." The threat model differs per host, so the implementations differ, but the components above them never know. ## Trade-offs, honestly - **This is opinionated UI infrastructure coupled to MudBlazor.** `DataGridListPageBase` is built around `MudDataGrid`, `GridState`, and MudBlazor's viewport observer. The base is reusable across your screens, but it is not framework-agnostic: swapping out MudBlazor would mean rewriting it. The trade is the usual one for a design system, a smaller surface and consistency in exchange for a hard dependency. -- **The test layer is thorough, and its residuals are narrow.** The shared primitives and the two mobile list components both carry a fast bUnit suite, a render-snapshot tier diffs their markup against committed baselines and fails the build on an unintended structural change, and Playwright axe (WCAG 2.1 AA) plus a render smoke run as a real-browser CI job against a self-hosted gallery, with all three engines (chromium, firefox, and webkit) blocking merge gates. The most logic-heavy component, the desktop `DataGridListPageBase`, carries its own direct bUnit suite (`DataGridListPageBaseTests`, thirty facts that drive the base through a concrete test page, covering initial load, grid filters translated into the fetch call, page and sort state mirrored to the URL, error and cancel snackbar severities, URL-driven restoration, density and scroll persistence, the mobile card path, the virtualized-window fetch path, and a regression guard for the disposed-token-source race). What the layer does not cover is narrow: the visual check is markup-snapshot rather than pixel diffing, and there is no mutation testing on the core tier. +- **The test layer is thorough, and its residuals are narrow.** The shared primitives and the two mobile list components both carry a fast bUnit suite, a render-snapshot tier diffs their markup against committed baselines and fails the build on an unintended structural change, and Playwright axe (WCAG 2.1 AA) plus a render smoke run as a real-browser CI job against a self-hosted gallery, with all three engines (chromium, firefox, and webkit) blocking merge gates. The most logic-heavy component, the desktop `DataGridListPageBase`, carries its own direct bUnit suite (`DataGridListPageBaseTests`, 35 facts and a theory that drive the base through a concrete test page, covering initial load, grid filters translated into the fetch call, page and sort state mirrored to the URL, failed-`Result` and exception paths, error and cancel toast severities, superseded loads returning the newest rows, URL-driven restoration, density and scroll persistence, the mobile card path, the virtualized-window fetch path, and a regression guard for the disposed-token-source race). What the layer does not cover is narrow: the visual check is markup-snapshot rather than pixel diffing, and there is no mutation testing on the core tier. - **Render-mode handling is genuinely complex.** The three-channel persistence (URL, memory, session) plus the prerender cache, plus the `BL0005` suppressions to set the grid page from outside the component, plus catch-and-degrade around every JS interop call, is a lot of machinery. It is the right machinery for the InteractiveAuto lifecycle, but it is not simple, and it earns its keep only because it is written once. -- **There is still design-system residue.** The source still carries Bootstrap chrome (`navbar`, `navbar-brand`, `navbar-toggler`) coexisting with MudBlazor in the shared `NavMenu`. The mobile infinite-scroll list is DOM-bounded by a `MaxRenderedItems` cap, so it is not part of that residue. The design-system scorecard's pair is that leftover Bootstrap chrome plus some `app.css` blocks that use `!important` overrides and raw hex outside the token set. The dark palette clears its own contrast scan: the filled-primary button label and error-alert text take dark on-color text (`rgba(0,0,0,0.87)`), locked by a blocking dark-mode axe gate, so both light and dark modes are AA-gated. Client-side Web Vitals are measured too: a `WebVitalsE2ETests` suite asserts LCP, TTFB, and CLS budgets against the gallery inside the blocking chromium E2E gate, so a catastrophic front-end-performance regression fails the build. +- **There is still design-system residue, and it sits in the shell's own CSS.** MudBlazor is the only component library: the package ships no Bootstrap, and the shared `NavMenu` brand row is a plain flex row with no CSS framework classes. The residue the design-system scorecard names is narrower: the shared layout's scoped stylesheets (`NavMenu.razor.css`, `MainLayout.razor.css`) fight MudBlazor with dozens of `!important` declarations and some raw nav colors instead of tokens, inline style declarations sit across a handful of razor files with no inline-style guard in the framework, and the brand hex is still restated outside the drift guard. The mobile infinite-scroll list is DOM-bounded by a `MaxRenderedItems` cap, so it is not part of that residue. The dark palette clears its own contrast scan: the filled-primary button label and error-alert text take dark on-color text (`rgba(0,0,0,0.87)`), locked by a blocking dark-mode axe gate, so both light and dark modes are AA-gated. Client-side Web Vitals are measured too: a `WebVitalsE2ETests` suite asserts LCP, FCP, TTFB, CLS, and INP budgets against the gallery inside the required `ui-e2e` gate on all three engines (INP is skipped only where an engine cannot sample it), so a front-end-performance regression fails the build. -None of these argue for going back to per-page plumbing. They argue for closing the last gaps (retiring the leftover NavMenu chrome, adding pixel-level visual regression) and being clear-eyed that a UI framework is still a framework: a dependency you adopt, not a thing you get for free. +None of these argue for going back to per-page plumbing. They argue for closing the last gaps (moving the shell's `!important` overrides and inline styles onto tokens, adding pixel-level visual regression) and being clear-eyed that a UI framework is still a framework: a dependency you adopt, not a thing you get for free. ## Apply this even without MMCA The moves port to any component framework, not just Blazor: 1. Put a **list-page base component** in charge of paging, sort, filter, loading, cancellation, and teardown. A concrete screen should declare its data source and its columns, nothing else. -2. Bind pages to a **typed service interface over a named HTTP client**, never to a raw client. Route every call through one method so retry, auth, and error extraction are applied uniformly, and surface the server's real error instead of a generic one. +2. Bind pages to a **typed service interface over a named HTTP client**, never to a raw client. Route every call through one method so retry, auth, and error handling are applied uniformly, and return the server's real error as a value instead of throwing a generic one. 3. Make the **design tokens one source of truth** and guard the duplication with a **fitness test** if the tokens have to exist in two languages. 4. Treat the **URL as the source of truth** for list state so deep links and back-forward just work, and persist transient state across render-mode or navigation transitions so the screen does not flash or refetch. 5. Hide every **platform difference behind an interface** declared in the shared layer, with one implementation per host. Adding a platform should be "implement these ports," not "fork the UI." @@ -213,7 +230,7 @@ The takeaway: **a UI framework is "compose, don't repeat" applied to the front e --- -**What we covered:** why every list screen re-implements the same paging and loading plumbing, how `DataGridListPageBase` folds it into one reusable Blazor base so a concrete page is tiny, how the `IEntityService` / `EntityServiceBase` / `AuthenticatedServiceBase` pipeline binds the UI to a DTO contract with Polly retry and real server errors, how `MMCATheme` plus a `BrandColors` fitness test keep the design tokens from drifting, how `PersistentComponentState` and URL-as-source-of-truth kill the render-mode flash, how the package ships the application shell so a module plugs into it by implementing `IUIModule` instead of the host wiring it in by hand, and how one `ITokenRefresher` interface with two host implementations lets one component set run on Server, WASM, and MAUI. +**What we covered:** why every list screen re-implements the same paging and loading plumbing, how `DataGridListPageBase` folds it into one reusable Blazor base so a concrete page is tiny, how the `IEntityService` / `EntityServiceBase` / `AuthenticatedServiceBase` pipeline binds the UI to a DTO contract with Polly retry and server errors returned as `Result` values, how `MMCATheme` plus a `BrandColors` fitness test keep the design tokens from drifting, how `PersistentComponentState` and URL-as-source-of-truth kill the render-mode flash, how the package ships the application shell so a module plugs into it by implementing `IUIModule` instead of the host wiring it in by hand, and how one `ITokenRefresher` interface with per-host implementations lets one component set run on Server, WASM, and MAUI. **Next in the series:** internationalization and theming, en-US and Spanish localization plus a day/dark mode toggle, both persisted on one cookie-and-profile mechanism. @@ -223,53 +240,79 @@ day/dark mode toggle, both persisted on one cookie-and-profile mechanism. *Tags: .NET, Blazor, C Sharp, Front End, Software Architecture* -*Notes: 2026-07-27 coverage addition: the section "The same page on a phone, without a second page" -was added to close a recorded gap, rubric §22 (responsive/adaptive UI) was unmapped in the series -table and appeared in articles only as scorecard commentary. Both code blocks are verbatim. The -viewport switch is -`MMCA.Common/Source/Presentation/MMCA.Common.UI/Pages/Common/DataGridListPageBase.cs`: -`[Inject] IBrowserViewportService` (`:26`) and `NotifyBrowserViewportChangeAsync` (`:304-317`) with -the `wasMobile` crossing check and the `MobileCurrentPage = 1` reset (`:307-314`). The threshold constant -is `MMCA.Common.UI/Common/BreakpointConstants.cs`: `IsMobileBreakpoint(Breakpoint) => breakpoint is -Breakpoint.Xs or Breakpoint.Sm` (`:16-17`), documented as the sidebar-collapse threshold, "< 960 px", -used "to switch between desktop data grids and mobile card-based layouts" (`:11-15`). The DOM cap is -`MMCA.Common.UI/Components/Lists/MobileInfiniteScrollList.razor.cs`: `MaxRenderedItems` defaulting to -500 (`:54`, doc `:49-53`) and the `_hasMore` bounding assignment with its comment (`:212-214`). The -three-engine blocking matrix is the `ui-e2e` job described in `MMCA.Common/CLAUDE.md` ("chromium, -firefox, and webkit are all required merge gates"). Also corrected in this run: an earlier audit note -referred to the method as `BreakpointConstants.IsMobile`; the real name is `IsMobileBreakpoint`. -Verified type names from `Website/docs-src/onboarding/group-15-common-ui-framework.md` and `group-25-adc-host-composition.md`: `DataGridListPageBase` (with `LoadServerDataAsync`, `PersistedGridState` nested record, MudDataGrid v9 paging workaround, disposed-CTS race fix), `IEntityService`, `EntityServiceBase` (`SendRequestAsync`, `GetPagedAsync`), `AuthenticatedServiceBase` (Polly 3-retry policy, `CreateAuthenticatedClientAsync`, `"APIClient"` named client), `ServiceExceptionHelper`, `MMCATheme` (`Instance`, light + dark palettes), `BrandColors` (6 const hex: Primary/PrimaryDark/PrimaryLight + Secondary/SecondaryDark/SecondaryLight, `Theme/BrandColors.cs:13-32`, all six referenced by `Theme/MMCATheme.cs:18-24,52-59`), `BrandColorTokenTests` fitness test, `ListPageStateService` / `ListPageQueryStateService` (URL keys p/ps/s/sd/f:), `ITokenRefresher` with `SameOriginProxyTokenRefresher` (browser, HttpOnly cookie via /auth/session/token) and `DirectApiTokenRefresher` (MAUI, SecureStorage via auth/refresh), `JwtAuthenticationStateProvider`, `IAuthUIService` / `AuthUIService`, `ITokenStorageService`, `IFormFactor`, `IUIModule`. The example `.razor` and `ITokenRefresher` blocks are illustrative composition sketches, not verbatim source. Honest gaps re-verified 2026-08-14 against `Website/docs-src/governance/common-ArchitectureScorecard.md` (in that pass, every scorecard row anchor below was re-opened and re-counted line by line, because the previous run's citations were uniformly 2 lines short: `:88` is §16, `:98` is §26, `:90` is §18, `:92` is §20, `:84` is §12, and `:93` is §21, so each anchor below is the corrected one): §18 (`Website/docs-src/governance/common-ArchitectureScorecard.md:90`) and §28 (`:100`) now affirmatively cite bUnit coverage. A bUnit suite ships at `Tests/Presentation/MMCA.Common.UI.Tests/Components/*` (DeleteConfirmation/EmptyState/MobileCardList/MobileInfiniteScrollList/NotificationBell/Primitives + a `PrimitivesSnapshotTests` render-snapshot tier with committed `Snapshots/*.html` baselines), and the axe/render-smoke E2E DOES run in Common's CI (`.github/workflows/ci.yml:270`, the `ui-e2e` job, whose `name:` at `:271` is "UI a11y + render smoke" per browser; chromium, firefox, AND webkit are all blocking merge gates). The prior direct-test gap is now CLOSED: the desktop `DataGridListPageBase` carries its own direct bUnit suite (`Tests/Presentation/MMCA.Common.UI.Tests/Pages/Common/DataGridListPageBaseTests.cs`, 30 `[Fact]`s driving the base through a concrete `TestGridPage` (declared at `:52`; attributes at `:137,161,194,214,245,262,281,300,320,335,351,363,375,395,409,421,435,449,468,535,557,580,594,610,630,651,666,688,698,712`, re-counted line by line this run, so the prior "14" was stale): initial load and one-based page fetch, additional filters applied before the fetch plus the throwing-callback path, grid filters translated into the fetch dictionary, two filters on one column keeping the newest, page/sort state mirrored to the URL, error/cancel snackbar severities and suppression including the several-errors-one-toast case, URL-driven restoration, scroll and density persistence, the mobile card-view path, the virtualized-window path (`LoadVirtualizedServerDataAsync` over aligned, unaligned and end-of-data windows plus additional filters, sort mapping and silent cancel, `:536-667`, with the `VirtualizeGrid` default at `:689`), and a disposed-CTS regression guard at `:376`; one `[Theory]` over `ComputeVirtualWindow` (`:501`) sits alongside the 30 facts). The residual test-layer trade-offs the article now names are narrower and still true: all three engines block merges (chromium and firefox promoted earlier, webkit promoted to a required merge gate 2026-07-16 after 11 consecutive green main runs since its last flake, 2026-07-12 00:45; `.github/workflows/ci.yml:279` matrix `[chromium, firefox, webkit]`, promotion note `:280-282`, and no step in the `ui-e2e` job carries `continue-on-error`, so nothing in that job, `:270-367` (the job's last step ends at `:367`; `:369` opens the following `performance-smoke` job's comment block, whose `performance-smoke:` key is at `:377`), is advisory. The file does use `continue-on-error` once, at `:900` with its rationale comment at `:887-890`, but that is on the unrelated `apphost-testing` job (`:882`), never on `ui-e2e`; the live branch-protection-API confirmation that all three `ui-e2e` contexts sit in `required_status_checks` is recorded in §22 (`:94`) and was not re-queried here), the visual check is markup-snapshot not pixel (§28 `:100`), and no mutation testing on the core tier (§14 `:86`). §20 (`:92`) still names Bootstrap chrome as a residual: its remaining pair is `app.css` `!important`/raw-hex outside the token set AND Bootstrap chrome coexisting with MudBlazor (NOT dark contrast, which is now resolved). The dark-palette AA contrast failures are RESOLVED (2026-07-11): dark `PrimaryContrastText`/`ErrorContrastText` = `rgba(0,0,0,0.87)` (`Theme/MMCATheme.cs:58,71`), locked by the blocking dark-mode axe gate (`DarkModeE2ETests`), and `Website/docs-src/guides/common-ACCESSIBILITY.md:49-53` marks it resolved; both light AND dark modes are now AA-gated. The Bootstrap chrome itself still exists in source (`Layout/NavMenu.razor:17` `navbar navbar-dark`, `:19` `navbar-brand`, `:58` `class="navbar-toggler"`, all three re-verified 2026-09-19; the 2026-08-20 anchors `:16`, `:18` and `:50` are each one to eight lines short of the current file), and §20 now names it as one half of the residual pair. `app.css` `!important`/raw-hex is the other half, per §20's own evidence anchor (`Website/docs-src/governance/common-ArchitectureScorecard.md:92`, whose evidence text still reads "`wwwroot/app.css` raw hex/!important (e.g. :122 minor)"; re-anchored 2026-08-20, `app.css:122` is now `.valid.modified:not([type=checkbox])` and unrelated, because the five `@font-face` blocks added at the top of the file pushed everything down: the mobile-snackbar comment now opens at `:171`, its `@media (max-width: 1023.98px)` at `:175`, and the flagged declaration `z-index: var(--mmca-z-snackbar-mobile, 10000) !important;` at `:177`. The scorecard's stale `:122` citation is a follow-up in the Website repo, not in this article). §23 (`:95`, now Maturity 4) describes a bounded infinite-scroll DOM (the `MaxRenderedItems = 500` cap lives in the code-behind `Components/Lists/MobileInfiniteScrollList.razor.cs:54`, `[Parameter] public int MaxRenderedItems { get; set; } = 500;`, not the `.razor` markup); the prior "no client-side Web Vitals" perf gap is now CLOSED: `Tests/Presentation/MMCA.Common.UI.E2E.Tests/WebVitalsE2ETests.cs:43` asserts LCP/TTFB/CLS budgets via the shipped `WebVitalsCollector` (`Source/Hosting/MMCA.Common.Testing.E2E/Infrastructure/WebVitalsCollector.cs`) inside the blocking chromium `ui-e2e` gate. The dark palette IS defined in `MMCATheme` and is now user-toggleable (ADR-028); theming claims here reflect the source. New in this run: the section "The shell ships in the package too: modules plug in with IUIModule" is grounded in ADR-067 (`Website/docs-src/adr/067-ui-module-shell-composition.md`, Accepted 2026-08-07) and re-verified against source. The contract's four members, the last two defaulted to `[]`, are `MMCA.Common/Source/Presentation/MMCA.Common.UI/Common/Interfaces/IUIModule.cs:13,16,19,22`, and the code block is that declaration verbatim with the doc comments stripped. `NavItem`'s optional `RequiredRole`/`RequiredClaim` are on the record declaration at `MMCA.Common.UI/Common/NavItem.cs:20`, which also carries a third optional gate, `RequiredPermission`, that this article does not cover; the per-user trimming and the General/User/Admin section split are `Layout/NavMenu.razor:219-228` (the `RequiredRole` and `RequiredClaim` filters at `:221-222`, the matching `RequiredPermission` filter at `:223`, the `_generalItems`/`_userItems`/`_adminItems` split at `:226-228`; re-anchored 2026-09-19, the prior `:196-204` range is short by roughly twenty lines), which injects `IEnumerable` at `:9`. Runtime route discovery is `Routes.razor:4` (`@inject IEnumerable UIModules`) feeding `AdditionalAssemblies="UIModules.Select(m => m.Assembly)"` (`:9`), with `AppAssembly` pinned to the shell's own assembly (`:8`) and `NotFoundPage` to the shipped 404 page (`:10`). The two component extension points are read in `Layout/MainLayout.razor:101-102` (`AppBarComponentTypes`, `LayoutComponentTypes`). The shipped routable shell pages (home, login, register, not-found, forbidden, and the notification list/inbox/send surfaces) are enumerated in ADR-067's Decision section. Adoption verified by direct source lookup: `MMCA.ADC.Conference.UI/ConferenceUIModule.cs:14`, `MMCA.ADC.Engagement.UI/EngagementUIModule.cs:14`, `MMCA.ADC.Identity.UI/IdentityUIModule.cs:13`, `MMCA.Store.Catalog.UI/CatalogUIModule.cs:13`, `MMCA.Store.Sales.UI/SalesUIModule.cs:16`, `MMCA.Store.Identity.UI/IdentityUIModule.cs:13`, the framework's own `MMCA.Common.UI/Notifications/NotificationUIModule.cs:14`, and the gallery stub `MMCA.Common/Tests/Presentation/MMCA.Common.UI.Gallery/Stubs/GalleryUIModule.cs:13` (plus two host-only adopters, `MMCA.ADC.UI/DeviceUIModule.cs:19` and `MMCA.Store.UI/MauiUIModule.cs:14`). MMCA.Helpdesk has no `IUIModule` implementation at all and keeps its own `Routes.razor` and `MainLayout` (ADR-067 Decision; re-verified in source this run: the local files are `MMCA.Helpdesk/Source/Hosts/UI/MMCA.Helpdesk.UI.Web/Components/Routes.razor` and `Components/Layout/MainLayout.razor`, and `Program.cs:25-28` registers `ICultureApplier` by hand under the comment "this seed does not call AddUIShared". The previous citation's second range, `Program.cs:85-89`, was a mismatch: those lines are the `/culture/set` endpoint's `CookieOptions`, so it is dropped here), which the article states plainly. The `IModule` counterpart framing is ADR-067's own (ADR-059 is the server-side contract). 2026-09-19 -audit pass, against framework v1.205.0 (`MMCA.Common/FACTS.md:4,14`). Re-opened and re-pinned in this -pass: the `ui-e2e` job and its browser matrix in `ci.yml`, the `DataGridListPageBaseTests` fact count and -attribute lines, `DataGridListPageBase`, `MobileInfiniteScrollList` (which lives under -`Components/Lists/`), `NavItem`, `NavMenu`, `Routes.razor` and `MainLayout`. A `build-maui` job sitting -ahead of `ui-e2e` in `ci.yml` (`:199`) puts the workflow anchors about forty lines later than the -2026-08-20 pass recorded, and ordinary growth in the UI sources moved the rest. Not re-opened in this -pass, so their anchors remain the 2026-08-20 pass's against v1.155.0: the scorecard row citations, the -`app.css` `!important` block and the two section-level folds from that release's shared UI theme refresh, -both of which were verified in source rather than from the release notes at the time. (1) Theme override: the Theming section no longer claims the theme is not overridable. -`Components/MmcaThemeProviders.razor:11` now renders `` against `[Parameter] public MudTheme Theme { get; set; } = -MMCATheme.Instance;` (`:22`, its doc comment `:17-21`), so a consumer supplies a derived `MudTheme` -without forking the provider block or re-wiring the day/dark lifecycle behind it (`OnInitialized` -subscribe `:27`, `OnAfterRenderAsync` first-render resolve `:29-38` calling `ThemeService.InitializeAsync()` -at `:34`). Both stated limits were checked, not assumed: the brand tokens at `wwwroot/app.css:61-65` are -literal hex mirroring `Theme/BrandColors.cs` (the mirror comment is `:59-60`), so an overridden `MudTheme` -does not retheme the raw CSS rules; and every root layout found in source still renders -`` with no `Theme` attribute (`MMCA.Common.UI/Layout/MainLayout.razor:14`, -`MMCA.ADC.Engagement.UI/Layouts/PresenterLayout.razor:6`, -`MMCA.Helpdesk/Source/Hosts/UI/MMCA.Helpdesk.UI.Web/Components/Layout/MainLayout.razor:6`), so the -extension point is real but unexercised, which the paragraph says plainly. (2) Self-hosted Inter: five -`@font-face` blocks at `wwwroot/app.css:9-47` (weights 400, 500, 600, 700, 800, each with -`font-display: swap` and `src: url('fonts/inter-latin--normal.woff2') format('woff2')`), with the -header comment `:1-8` supplying the same-origin `_content/MMCA.Common.UI/fonts/` path, the -`font-src 'self'` CSP fit "with no CDN allowance", the swap-versus-blocking-text rationale tied to -Core Web Vitals, and the silent fall-through to Segoe UI that the faces close. Files verified on disk: -`wwwroot/fonts/inter-latin-{400,500,600,700,800}-normal.woff2`, 23,664 to 24,452 bytes each (about 120 KB -for the five) plus `fonts/LICENSE-Inter.txt` (SIL OFL 1.1, unmodified Fontsource latin subsets). The -duplicated family name is real and is why the article names it: `Theme/MMCATheme.cs:92` -`FontFamily = ["Inter", "Segoe UI", "Helvetica Neue", "Arial", "sans-serif"]` with a keep-in-step comment -at `:89-91`, and `app.css:97-98` `html, body { font-family: 'Inter', ... }`. The CSP side of this change -is Article 47's to carry; this article takes only the UI-asset side.* +*Notes: 2026-10-02 refresh against framework v1.221.0 (`MMCA.Common/FACTS.md:4`), every claim +re-opened in source this run. Paths below are relative to `MMCA.Common/Source/Presentation/MMCA.Common.UI/` +unless stated. (1) DataGridListPageBase: errors go through `[Inject] protected IToastService Toast` +(`Pages/Common/DataGridListPageBase.cs:24`; `ISnackbar` appears only inside the internal adapter +`Services/MudToastService.cs:19-23`); `LoadFailed` `:42`; `GridRef` is a get-only virtual property +(`:130`), so a page overrides it rather than binding `@ref` to it; `LoadServerDataAsync` `:510-521` takes a +six-argument fetch delegate returning `Task Items, int TotalItems)>>` (`:512`), +records itself as the newest load and answers through `NewestPagedResultAsync` (`:556-566`); the SSR +shortcut is `:532-543`; cancellation and exception toasts `:710-726` (`Toast.Info` `:716`, `Toast.Error` +`:723`); a failed `Result` goes through `FailedFetch` (`:738-743`, `NotifyOnFailure` `:740`). The +viewport switch block is verbatim `:310-317` inside `NotifyBrowserViewportChangeAsync` (`:307-320`), +`IBrowserViewportService` injected at `:26`; `PersistedGridState` record `:1100`, persisted at `:192`; +rows-per-page restore `:413`, `:468`. (2) Example page: rewritten this run to a compiling shape. The +prior sketch passed `_service.GetPagedAsync` as a method group and used `@ref="GridRef"`; neither binds, +because `IEntityService.GetPagedAsync` has seven parameters (`includeChildren` before the token, +`Common/Interfaces/IEntityService.cs:31-38`) against the six-argument delegate, and `GridRef` is get-only. +The block mirrors a real page, `MMCA.Store/Source/Modules/Identity/MMCA.Store.Identity.UI/Pages/Customers/CustomerList.razor.cs:24-25` +(`_dataGrid` field plus `GridRef` override) and `:29-33` (the `(state, cancellationToken)` method with the +lambda), with markup `CustomerList.razor:43-46` (`@ref="_dataGrid"`, `ServerData="LoadServerData"`, +`Loading="IsLoading"`). It stays an illustrative sketch (ProductDto is invented). Source-comment drift, +not fixed here: the remark at `DataGridListPageBase.cs:501-502` says a page "still passes the method +group", which the seven-parameter interface does not allow. (3) Data access: every `IEntityService` +member returns a `Result` (`IEntityService.cs:11-15`, members `:25-68`, NotFound rule `:45-49`); +`EntityServiceBase` doc `Services/Api/EntityServiceBase.cs:14-30` ("Nothing here throws for a server +answer" `:26`); `SendRequestAsync` `:328` runs `HttpResultExecutor.ExecuteAsync` (`:336`) and +`ProblemDetailsResultReader.ReadAsync` (`:343`), non-generic overload `:358-371`. `ServiceExceptionHelper` +and `EnsureSuccessStatusCode` no longer exist in this package, so the old "pull Problem Details before +EnsureSuccessStatusCode throws" wording is replaced. Polly: `Services/Api/AuthenticatedServiceBase.cs` +`IsRetryableResponse` `:106-115` (501/505 excluded, 408/429 included), backoff 2/4/8 s plus up to 1 s +jitter `:119-122`, `WaitAndRetryAsync(3, ...)` disposing retried responses `:137-140`; the DI-scope +rationale for the fresh `"APIClient"` is unchanged (`:51`, per the 2026-10-02 audit, not re-opened). +(4) Token refresh: `ITokenRefresher` `Services/Auth/Tokens/ITokenRefresher.cs:13`, +`Task AcquireAccessTokenAsync` `:20`; `SameOriginProxyTokenRefresher.cs:11`; +`DirectApiTokenRefresher.cs:25`; third implementation `HandoffTokenRefresher` +(`MMCA.Common.UI.Web/SameOriginProxy/HandoffSessionServices.cs:7-14`, internal), swapped in by +`AddCommonSameOriginApiProxy` (`MMCA.Common.UI.Web/SameOriginProxy/SameOriginApiProxyServiceExtensions.cs:83`) +and enabled by ADC (`MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web/Program.cs:156`). (5) Theme: +`BrandColors` holds 37 `public const string` values (counted by grep this run), doc `Theme/BrandColors.cs:4-8` +("Every hex value in MMCATheme (light and dark) is one of these constants"), Primary `:13`, Teal 700 +versus Teal 600 contrast comment `:22-24` (`MMCATheme.cs:21` points there); `MMCATheme.Instance` `:11`, +brand references `:18-24`, dark `PrimaryContrastText`/`ErrorContrastText` `rgba(0,0,0,0.87)` `:66`, `:93`, +`FontFamily` Inter-first `:119`, `DefaultBorderRadius = "6px"` `:193`; `Theme/MmcaThemeProviders.razor:12` +(``) and `:34` (`Theme` defaults to `MMCATheme.Instance`); +`BrandColorTokenTests` (`MMCA.Common/Tests/Presentation/MMCA.Common.UI.Tests/Theme/BrandColorTokenTests.cs:35-39`, +five `--mmca-*` tokens); CSS mirror `wwwroot/app.css:61-63`; `@font-face` blocks from `:9`; +`html, body` Inter `:99-100`. Bare ``: `Layout/MainLayout.razor:14`, +`MMCA.Helpdesk/Source/Hosts/UI/MMCA.Helpdesk.UI.Web/Components/Layout/MainLayout.razor:10` (ADC +`PresenterLayout.razor:6` not re-opened this run). Font file sizes and license carried from the +2026-09-19 pass, not re-measured. (6) Design-system residue: Bootstrap is gone (`wwwroot/app.css:108`, +"the Bootstrap reboot this RCL no longer ships"; `Layout/NavMenu.razor:18` brand row with "no CSS +framework classes"; toggler `.nav-toggler` `:62`), so the trade-off bullet and closing line no longer +name Bootstrap chrome. Scorecard section 20 (`Website/docs-src/governance/common-ArchitectureScorecard.md:84`) +names the residual: 41 `!important` declarations in the scoped layout CSS (re-counted this run: 27 in +`Layout/NavMenu.razor.css`, 14 in `Layout/MainLayout.razor.css`), raw nav colors, 19 inline styles with no +Common inline-style guard, brand hex defined twice. (7) Tests and gates: `DataGridListPageBaseTests.cs` +has 35 `[Fact]` plus 1 `[Theory]` (`:633`), counted by grep this run; superseded-load facts `:384`, `:413`; +disposed-CTS guard `:449`; `RestoreGridState` `:839`, `:853`. Web Vitals: +`MMCA.Common/Tests/Presentation/MMCA.Common.UI.E2E.Tests/WebVitals/WebVitalsE2ETests.cs:19-23` (LCP 2500, +FCP 1800, TTFB 800, CLS 0.1, INP 200), budget record `:47-48`, INP skip `:104`. `ci.yml` `ui-e2e` job +`:248`, name `:249`, matrix `[chromium, firefox, webkit]` `:257`, promotion note `:258-260`; the only +`continue-on-error` is `:976` on `apphost-testing` (`:958`). Scorecard rows: section 14 `:78` (no mutation +testing), 18 `:82`, 20 `:84`, 22 `:86`, 23 `:87` (Web Vitals on all three engines), 28 `:92` (markup not +pixel). (8) Shell: `IUIModule.cs:13,16,19,22`; `Routes.razor:7` inject, `:12` `AppAssembly`, `:13` +`AdditionalAssemblies`, `:14` `NotFoundPage`; `Layout/MainLayout.razor:101-102`; `NavItem.cs:20` +(`RequiredRole`, `RequiredClaim`, plus `RequiredPermission` not covered here); `Layout/NavMenu.razor:9` +inject, filters `:257-259`, section split `:262-264`. Mobile: `Common/BreakpointConstants.cs:13-16`; +`Components/Lists/MobileInfiniteScrollList.razor.cs:52` and `:220`. Adopter file anchors (ADC Conference, +Engagement, Identity; Store Catalog, Sales, Identity; `Notifications/NotificationUIModule.cs`; gallery +`GalleryUIModule.cs`) are carried from the 2026-09-19 pass and were not re-opened this run; Helpdesk +still has its own `Routes.razor` and `MainLayout`. Header cells (Rubric, ADR) left as they were: the series +index (`Website/docs-src/articles/README.md:47`) maps this article to sections 18, 19, 20, 22, 23 and ADRs +056/067, proposed in the run's result rather than changed here. History: first written with the +2026-07-27 responsive section, IUIModule section added 2026-08-07 (ADR-067), audit passes 2026-08-14, +2026-08-20 and 2026-09-19 (v1.205.0); the long per-pass ledger they produced is superseded by this one.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/saga-compensation-reconciliation.md b/docs-src/articles/saga-compensation-reconciliation.md index 7d7bfb49..3d81fd2e 100644 --- a/docs-src/articles/saga-compensation-reconciliation.md +++ b/docs-src/articles/saga-compensation-reconciliation.md @@ -6,6 +6,7 @@ > `Website/docs-src/adr/086-process-manager-deferred.md`, > `MMCA.Store/.../Sales.Application/Orders/Saga/OrderCancelledSagaHandler.cs`, > `.../Orders/Saga/OrderPaymentFailedSagaHandler.cs`, `.../Orders/UseCases/Cancel/CancelOrderHandler.cs`, +> `.../ShoppingCarts/UseCases/CheckOut/CheckOutHandler.cs`, > `.../Sales.Domain/Orders/Order.cs`, `.../Sales.Domain/Inventory/InventoryRestorationDomainService.cs`, > `.../Sales.API/Controllers/PaymentsController.cs`, > `.../Sales.Infrastructure/Payments/Stripe/StripeWebhookRegistrationService.cs`, @@ -13,22 +14,25 @@ > `.../Sales.Infrastructure/Payments/Reconciliation/PaymentReconciliationSettings.cs`, > `MMCA.Common/.../Application/Services/DomainEventDispatcher.cs`, > `MMCA.Common/.../Application/DomainEvents/SafeDomainEventHandler.cs`, -> `MMCA.Common/.../Infrastructure/Scheduling/PeriodicBackgroundService.cs`, the four test suites that cover -> them, and the §6/§29 rows of `Website/docs-src/governance/ArchitectureEvaluationCriteria.md`. No em dashes. +> `MMCA.Common/.../Infrastructure/Persistence/DbContexts/Factory/DbContextFactory.cs`, +> `MMCA.Common/.../Infrastructure/Hosting/Background/PeriodicBackgroundService.cs`, the four test suites that +> cover them, and the §6/§29 rows of `Website/docs-src/governance/ArchitectureEvaluationCriteria.md`. No em dashes. **Subtitle:** A cancelled order has to give back stock that a transaction closed minutes ago already took, and a payment confirmation that never arrives strands the order forever. Here is compensation as its own -event handler, idempotency as a persisted marker committed by the same `SaveChanges` as the writes it -guards, and a periodic sweep as the saga-timeout backstop. +event handler, idempotency as a persisted marker committed in the same transaction as the writes it +guards, an honest account of which failures get retried and which only get logged, and a periodic sweep +as the saga-timeout backstop. --- Checkout is the easy part. In MMCA.Store's Sales module it is genuinely atomic: the order insert, the cart transition, and the conditional stock decrements all commit inside one explicit local transaction -(`CheckOutHandler.cs:135-188`, insert `:165`, save `:176`), and a failed decrement returns a failed `Result` -that rolls the whole thing back. One database, one transaction, no drama. Checkout then arms the order's -own unpaid-payment deadline as a scheduled row and saves that separately (`:226`, second save `:240`, -because the transaction helper commits without flushing what comes after it, `:238-239`). +(`ExecuteInTransactionAsync` at `CheckOutHandler.cs:80-82` over the `WriteAsync` delegate `:122-183`, +insert `:163`, decrements `:169`, save `:174`), and a failed decrement returns a failed `Result` that rolls +the whole thing back. One database, one transaction, no drama. The same delegate also arms the order's own +unpaid-payment deadline as a scheduled row (`:180`), so the deadline commits with the order or rolls back +with it (comment `:176-179`). Then the money moves at Stripe, and the confirmation comes back later, as a webhook, from outside your database entirely. And two things go wrong that no transaction can fix: @@ -60,7 +64,7 @@ Making the handler survive being run twice is where systems quietly rot. And it is the question the neighbouring records leave open on purpose. ADR-003 gets an event out of the process at least once. ADR-021 stops a broker redelivery from being applied twice at the consume edge. ADR-006 decides database-per-service and records "no cross-database transactions, no two-phase commit" only -as a **cost it accepts**, without saying how that cost gets paid (`ADR-054:41-46`). None of them says what a +as a **cost it accepts**, without saying how that cost gets paid (`ADR-054:50-55`). None of them says what a multi-step workflow does when step two fails or step three never reports back. ## The MMCA answer: compensation is a handler, not a branch in the command @@ -78,30 +82,32 @@ deliberately inline rather than in a saga handler, and the class documentation a an order can only be cancelled out of `PaymentInitiated` while the provider still serves a payable hosted page, so the cancel has to answer "has this already been paid?" **before** it commits. A saga step runs after the commit and could only ever discover the money afterwards, with the order already `Cancelled` and a -manual refund the only remedy left. So `RetirePaymentSessionAsync` (`:90-124`) asks the provider for the -session status and, when it reports paid, **refuses the cancellation** with -`OrderCancellationErrorCodes.PaymentAlreadyCompleted` (`:101-109`). Every other outcome (already expired, -session gone, provider unreachable) is non-fatal: it is logged and the cancellation proceeds (`:111-121`). - -`Order.MarkAsCancelled()` (`Order.cs:548`) asks the current state object whether the transition is legal -and, on success, records a domain event (`Order.cs:556`). `OrderCancelled` is a plain `BaseDomainEvent` +manual refund the only remedy left. So `RetirePaymentSessionAsync` (`:90-126`) hands the session to the +shared `PaymentSessionRetirement.RetireAsync`, which reads the session status, expires the hosted page, and +reads the status again when the expire fails (`:99-103`). When the session turns out to be paid, the +handler **refuses the cancellation** with `OrderCancellationErrorCodes.PaymentAlreadyCompleted` +(`:110-118`). Every other outcome (already expired, session gone, provider unreachable) is non-fatal: it is +logged and the cancellation proceeds (`:105-108`, `:120-123`). + +`Order.MarkAsCancelled()` (`Order.cs:551`) asks the current state object whether the transition is legal +and, on success, records a domain event (`Order.cs:559`). `OrderCancelled` is a plain `BaseDomainEvent` (`OrderCancelled.cs:6-9`), not an integration event, so it dispatches in-process after the save. Restoring the stock is a separate class: `OrderCancelledSagaHandler : IDomainEventHandler` -(`OrderCancelledSagaHandler.cs:30-33`). Notifying the customer of a failed payment is another one, +(`OrderCancelledSagaHandler.cs:40-42`). Notifying the customer of a failed payment is another one, `OrderPaymentFailedSagaHandler` (`OrderPaymentFailedSagaHandler.cs:22-24`). This is the choreographed shape: each step raises an event, and each follow-up or compensating action lives in its own handler. A new compensating action that can run after the commit (a refund, another notification) is a new handler, not an edit to the command. **Each handler runs in its own DI scope.** Domain-event handlers are registered as singletons by the -framework's convention scan (`MMCA.Common.Application/DependencyInjection.cs:187-197`, with the comment -"Domain event handlers are singletons, they create their own DI scopes internally" at `:192` and -`WithSingletonLifetime()` closing the scan at `:197`), so every handler opens a scope through -`IServiceScopeFactory` and resolves what it needs from that scope (`OrderCancelledSagaHandler.cs:40-41`, -`OrderPaymentFailedSagaHandler.cs:31-32`). The consequence is the important part: compensation commits **on -its own, after** the originating save, rather than joining the transaction it is compensating for. That is -what makes it compensation rather than a rollback. +framework's convention scan (`ScanModuleApplicationServices` at +`MMCA.Common.Application/DependencyInjection.ModuleScanning.cs:46`, with the comment at `:51` stating that +they are singletons that create their own DI scopes internally, and `WithSingletonLifetime()` closing that +scan at `:56`), so every handler opens a scope through `IServiceScopeFactory` and resolves what it needs from +that scope (`OrderCancelledSagaHandler.cs:49-51`, `OrderPaymentFailedSagaHandler.cs:31-32`). The consequence +is the important part: compensation commits **on its own, after** the originating save, rather than joining +the transaction it is compensating for. That is what makes it compensation rather than a rollback. ## The marker: idempotency as a database invariant @@ -113,32 +119,45 @@ mechanism. MMCA.Store makes it idempotent with a persisted marker on the aggregate. `Order.InventoryRestored` (`Order.cs:122`, documented `:116-121`) is a boolean with a private setter, and `MarkInventoryRestored()` -(`Order.cs:568-591`) is a guarded transition like any other: it refuses on a non-cancelled order -(`:570-577`) and refuses a second call (`:579-586`), both as `Result.Failure` with named invariant codes. - -The handler then does four things in order (`OrderCancelledSagaHandler.cs:36-103`): - -1. Loads the order with its lines, tracked, in its own scope (`:44-48`). -2. Checks the marker first and returns without saving if it is already set (`:57-61`). -3. Loads the matching inventory rows **with the soft-delete filter deliberately turned off** - (`ignoreQueryFilters: true`, `:74`), then applies the increases through a pure domain service with no - infrastructure dependencies, `InventoryRestorationDomainService.RestoreInventory` (`:79`, service at - `InventoryRestorationDomainService.cs:13-33`, "pure domain service" comment `:8`), which hands back the - variant ids it could not match (`:21-27`, returned at `:32`) so the handler can log them by name - (`:80-86`). -4. Sets the marker (`:93`) and calls **one** `SaveChangesAsync` (`:101`). - -That last step is the whole design. The inventory increases and the marker are written by the same -`SaveChanges` against the same database, in one transaction. So the marker cannot exist without the writes -it guards, and the writes cannot land unmarked. Idempotency stops being handler discipline and becomes a -database invariant. +(`Order.cs:571-594`) is a guarded transition like any other: it refuses on a non-cancelled order +(`:573-580`) and refuses a second call (`:582-589`), both as `Result.Failure` with named invariant codes. + +The handler runs the whole restoration as one `ExecuteInTransactionAsync` delegate +(`OrderCancelledSagaHandler.cs:55-57`, the delegate `RestoreAsync` at `:64-160`), and inside it does five +things in order: + +1. Loads the order with its lines, tracked, in its own scope (`:70-75`). +2. Checks the marker first and returns success without writing anything if it is already set (`:84-88`). +3. Reads the matching inventory rows **non-tracking** (`asTracking: false`, `:98`) and **with the + soft-delete filter deliberately turned off** (`ignoreQueryFilters: true`, `:103`), then runs them through + a static, pure domain service with no infrastructure dependencies, + `InventoryRestorationDomainService.RestoreInventory` (`:108`; the static class at + `InventoryRestorationDomainService.cs:10`, "pure domain service" comment `:8`, method `:24-51`). That + call validates every increase against the inventory invariants and hands back either a failure carrying + every rejected error (`:41-50`) or the variant ids it could not match (`:33-38`), which the handler logs + by name (`OrderCancelledSagaHandler.cs:117-123`). Its in-memory increase lands on the non-tracking + snapshot and is never saved (comment `:96-97`, class doc `:30-32`). +4. Sets the marker (`:130`) and saves it **first** (`:139`). +5. Moves the stock through `IInventoryAllocationService.IncrementAsync`, a relative atomic `UPDATE` rather + than a load-edit-save, for the lines that matched a row (`:141-156`). + +The transaction is the whole design. The marker and the increases commit together or roll back together, +against the same database: a failed `Result` from the delegate rolls back everything it wrote, marker +included (`DbContextFactory.cs:608-614`), and a throw does the same (`:657-661`). So the marker cannot exist +without the writes it guards, and the writes cannot land unmarked. Idempotency stops being handler +discipline and becomes a database invariant. + +Step 5's relative update is there because checkout never stops. Checkouts decrement the same inventory rows +with atomic updates at any moment, so a tracked restore would either overwrite those decrements or fail on +the row's concurrency token (class doc `OrderCancelledSagaHandler.cs:26-33`). Validating on a snapshot and +moving the stock with a relative update keeps the restore out of that race entirely. Step 3's filter override is a smaller decision with a real consequence. A retired variant is soft-deleted, not removed, and the stock a cancelled order is returning still belongs to that row: without `ignoreQueryFilters`, the row is invisible to the handler and the returned quantity is silently dropped -(the comment saying so is at `:70-73`). +(the comment saying so is at `:99-102`). -This is why ADR-054 says the marker is **strictly stronger than the ADR-021 inbox** (`ADR-054:186-189`). +This is why ADR-054 says the marker is **strictly stronger than the ADR-021 inbox** (`ADR-054:219-222`). The inbox records a message id after the handlers have succeeded, which leaves a narrow crash window between the handler's commit and the inbox write. A marker committed *with* the writes has no such window. The two are complementary rather than competing: the inbox dedups broker redeliveries between services, the @@ -147,78 +166,131 @@ aggregate marker dedups in-process handler re-runs. **Concurrent redeliveries are handled by a different mechanism.** The marker check is a read, so two deliveries can both pass it. Every auditable entity carries a `RowVersion` concurrency token (`AuditableBaseEntity.cs:53`), configured automatically on every non-owned auditable type by -`ConfigureConcurrencyTokens` (`ApplicationDbContext.cs:582-602`, called from `OnModelCreating` at `:415`, -ADR-035). Both deliveries carry the same original token into their update: one commits, the other gets -`DbUpdateConcurrencyException`, and its outbox retry then finds the committed marker and skips. Sequential -redelivery is handled by the marker, concurrent redelivery by the token. +`ConfigureConcurrencyTokens` (`ApplicationDbContext.cs:588-608`, called from `OnModelCreating` at `:420`, +ADR-035). Both deliveries carry the same original token into the marker save. One commits; the other gets +`DbUpdateConcurrencyException` on the order row before it has touched any stock (that is why the marker is +saved first, comment `OrderCancelledSagaHandler.cs:137-138`), its transaction rolls back and the exception +propagates, and its outbox retry then finds the committed marker and skips. Sequential redelivery is handled +by the marker, concurrent redelivery by the token. ```csharp -// Condensed from OrderCancelledSagaHandler.HandleAsync (most logging trimmed). +// Condensed from OrderCancelledSagaHandler.HandleAsync and RestoreAsync (logging trimmed). public async Task HandleAsync(OrderCancelled domainEvent, CancellationToken cancellationToken = default) { using var scope = serviceScopeFactory.CreateScope(); var unitOfWork = scope.ServiceProvider.GetRequiredService(); + var inventoryAllocation = scope.ServiceProvider.GetRequiredService(); + + // One transaction: a failed Result rolls the whole unit back, marker included. + // The Result itself is discarded, so a returned failure is logged, never thrown. + _ = await unitOfWork.ExecuteInTransactionAsync( + ct => RestoreAsync(domainEvent, unitOfWork, inventoryAllocation, ct), + cancellationToken).ConfigureAwait(false); +} - var orderRepository = unitOfWork.GetRepository(); - var order = await orderRepository.GetByIdAsync( +private async Task RestoreAsync(OrderCancelled domainEvent, IUnitOfWork unitOfWork, + IInventoryAllocationService inventoryAllocation, CancellationToken cancellationToken) +{ + var order = await unitOfWork.GetRepository().GetByIdAsync( domainEvent.OrderId, includes: [nameof(Order.OrderLines)], asTracking: true, cancellationToken: cancellationToken); if (order is null) - return; + return Result.Success(); - // Idempotency guard: a redelivered OrderCancelled event (outbox is at-least-once) - // must not restore the same stock twice. + // Idempotency guard: a redelivered OrderCancelled event must not restore stock twice. if (order.InventoryRestored) - return; + return Result.Success(); - var inventoryRepo = unitOfWork.GetRepository(); var variantIds = order.OrderLines.Select(ol => ol.ProductVariantId).Distinct().ToArray(); - var allItems = await inventoryRepo.GetAllAsync( - includes: [], where: i => variantIds.Contains(i.Id), asTracking: true, - // A soft-deleted inventory row is still the row this stock belongs to. - ignoreQueryFilters: true, + var allItems = await unitOfWork.GetRepository().GetAllAsync( + includes: [], where: i => variantIds.Contains(i.Id), + asTracking: false, // validation only: this in-memory increase is never saved + ignoreQueryFilters: true, // a soft-deleted row is still the row this stock belongs to cancellationToken: cancellationToken).ConfigureAwait(false); + var itemsByVariant = allItems.ToDictionary(i => i.Id); - var restoreResult = inventoryRestorationDomainService.RestoreInventory( - order.OrderLines, allItems.ToDictionary(i => i.Id)); + var restoreResult = InventoryRestorationDomainService.RestoreInventory(order.OrderLines, itemsByVariant); + if (restoreResult.IsFailure) + return Result.Failure(restoreResult.Errors); // Warning; nothing written if (restoreResult.Value is { Count: > 0 } unmatchedVariantIds) LogInventoryItemsNotFound(logger, domainEvent.OrderId, string.Join(", ", unmatchedVariantIds)); - // The marker is set even when some variants had no inventory record: withholding it would - // re-apply every MATCHED increase on the next redelivery. The warning is the record. var markResult = order.MarkInventoryRestored(); if (markResult.IsFailure) - return; + return Result.Failure(markResult.Errors); // Warning; nothing written - // ONE save: the restoration and the idempotency marker commit atomically (same DB). + // The marker first: its rowversion-guarded UPDATE takes the order row, so a + // concurrent delivery fails here, before it touches any stock. await unitOfWork.SaveChangesAsync(cancellationToken).ConfigureAwait(false); + + InventoryIncrement[] increments = + [ + .. order.OrderLines + .Where(line => itemsByVariant.ContainsKey(line.ProductVariantId)) + .Select(line => new InventoryIncrement(line.ProductVariantId, line.Quantity)), + ]; + if (increments.Length > 0) + { + var incrementResult = await inventoryAllocation.IncrementAsync(increments, cancellationToken) + .ConfigureAwait(false); + if (incrementResult.IsFailure) + return incrementResult; // Warning; the marker rolls back with it + } + + return Result.Success(); } ``` -## Redelivery is the retry mechanism, so throwing is correct +## Redelivery is the retry mechanism, but only for a throw -A compensating handler needs no retry loop of its own, because it already sits on one. +A compensating handler needs no retry loop of its own, because it already sits on one. The catch is that +the loop only ever sees exceptions. -When in-process dispatch fails, the domain-event interceptor logs the failure and signals the outbox rather +When in-process dispatch throws, the domain-event interceptor logs the failure and signals the outbox rather than swallowing the work. `FlushStateAsync` (`DomainEventSaveChangesInterceptor.cs:332`) dispatches the save's local events (`:336-337`) and only then marks their outbox entries processed (`:341`), so a throwing handler never reaches the mark, and the catch below it logs and signals the processor (`:346-354`). The `OutboxProcessor` re-dispatches the pure domain event on a later cycle -(`OutboxProcessor.DispatchMessagesAsync`, `OutboxProcessor.cs:585`, the dispatcher call at `:639`) with the -bounded retries, backoff, and dead-lettering ADR-003 already defines. So a handler that cannot complete its -work should fail loudly and let redelivery re-run it. Inventing local retries would just duplicate a policy -that already exists one layer down. - -The framework takes that same position in its own base class. +(`OutboxProcessor.DispatchMessagesAsync`, `OutboxProcessor.cs:490`, called from the cycle at `:228`, the +dispatcher call at `:549`) with the bounded retries, backoff, and dead-lettering ADR-003 already defines. So +a handler that wants to be re-run has to throw. Inventing local retries would just duplicate a policy that +already exists one layer down. + +`OrderCancelledSagaHandler` takes that path for exactly one failure: the concurrent delivery that loses the +rowversion race on the marker save (`OrderCancelledSagaHandler.cs:139`). That exception rolls the +transaction back and is rethrown (`DbContextFactory.cs:657-661`), the event comes back, and the retry finds +the committed marker. + +**Every other failure in that handler is returned, not thrown.** An inventory invariant that refuses an +increase (`OrderCancelledSagaHandler.cs:109-115`), a refused `MarkInventoryRestored` (`:130-135`) and a +failed `IncrementAsync` after the marker save (`:148-155`) each log a `Warning` that says the compensation +was not persisted (messages `:174-178`) and return a failed `Result`. The transaction rolls back, marker +included (`DbContextFactory.cs:608-614`), so nothing partial reaches the database. But `HandleAsync` discards +that `Result` (`OrderCancelledSagaHandler.cs:55`), so the dispatcher sees a handler that completed, and the +interceptor goes on to mark the event's outbox row processed (`DomainEventSaveChangesInterceptor.cs:336-341`). +Nothing redelivers it. The comment above the call says a later delivery can still restore (`:53-54`); for +these three cases no later delivery arrives, and ADR-054 records exactly that gap as its own trade-off +(`ADR-054:259-270`, restated in its 2026-10-01 Revision `:372-376`). + +Nothing else picks it up either. The reconciliation sweep below selects `PaymentInitiated` orders with a +session (`PaymentReconciliationService.cs:153-155`) and `PendingPayment` or `PaymentFailed` orders +(`:200-201`); an order left in this state is `Cancelled` with `InventoryRestored` still false, which matches +neither predicate, and no other Store source reads the marker. The `Warning` naming the order and the +rejected error codes is the whole safety net: that order's stock stays unrestored until someone acts on the +log line. It is a real cost, and the honest way to read the handler is as a deliberate "give up and record" +for these cases, not as a retry. + +The framework takes the throwing position in its own base class. `SafeDomainEventHandler` (`SafeDomainEventHandler.cs:32`) runs your `HandleSafelyAsync` inside an exception filter, `LogAndRethrow` (`:61-70`), which writes one error line naming the handler and the event type and then returns `false`, so the exception keeps travelling with its original stack intact (`:42-46`). A cancellation during host shutdown passes straight through unlogged, because that is not a delivery failure (`:42`). The class documentation records why rethrowing is required (`:13-20`): a handler that reports success has its outbox row marked processed, so nothing retries and the side -effect is lost with only a log line to show for it. The base class is not a way to absorb a failure. It is -a way to fail with context, and its tests assert exactly that, including that the log lands before the -caller sees the exception (`SafeDomainEventHandlerTests.cs:33,51,73`). +effect is lost with only a log line to show for it. That sentence describes the returned-failure path above +precisely. The base class is not a way to absorb a failure. It is a way to fail with context, and its tests +assert exactly that, including that the log lands before the caller sees the exception +(`SafeDomainEventHandlerTests.cs:33,51,73`). The documentation also names the consequence to design for (`:21-29`). The interceptor dispatches every local event of one save in a single call, so one rethrowing handler skips the mark-processed step for the @@ -232,17 +304,19 @@ through `IInternalCommandScheduler` (`:34-36`), branches on the returned `Result naming the order and customer when scheduling fails, an `Information` line when it succeeds, `:38-45`), and then re-arms the order's payment deadline so a failed attempt hands the customer the whole retry window again (`:47`, `RearmExpiryDeadlineAsync` `:67-93`, itself logging rather than throwing on failure, -`:86-90`). The class documentation states the rule that makes both branches correct (`:11-21`): the order is +`:86-90`). The class documentation states the rule that makes both branches correct (`:11-20`): the order is already persisted as `PaymentFailed` before this handler runs, so a scheduling failure is logged rather than -thrown, and an SMTP outage retries the message off the queue instead of dragging the whole local batch back -through the pipeline. It implements `IDomainEventHandler` directly (`:22-24`), and no -production handler in the four repos derives from `SafeDomainEventHandler`, its only subclass being the test -double in that base class's own unit tests (`SafeDomainEventHandlerTests.cs:124`). The durable queue that -carries that scheduled row, its retries and its dead-letter path are the subject of Article 51, "Four ways -to do work later: channels, cron and durable internal commands", so they are not re-taught here. - -The choice is therefore explicit per handler: **throw to get a redelivery, or take the work somewhere that -survives on its own.** What you cannot do is neither. +thrown, and a transport outage retries the queued message rather than losing it. It implements +`IDomainEventHandler` directly (`:22-24`), and no production handler in the four repos +derives from `SafeDomainEventHandler`, its only subclass being the test double in that base class's own +unit tests (`SafeDomainEventHandlerTests.cs:124`). The durable queue that carries that scheduled row, its +retries and its dead-letter path are the subject of Article 51, "Four Ways to Do Work Later: Channels, Cron, +the Outbox and Durable Internal Commands", so they are not re-taught here. + +The choice is therefore explicit per handler: **throw to get a redelivery, take the work somewhere that +survives on its own, or return a failure and accept that a log line is the record.** The first two are +mechanisms. The third is a decision to stop, and it should be made on purpose and written down, the way +ADR-054 writes it down. ## The inbound edge: a webhook is a delivery contract, not an API call @@ -279,11 +353,11 @@ not drama: this ran at `Warning` for weeks while the configured signing secret d endpoint, so 100% of deliveries were rejected and nothing surfaced it (`:105-110`). The provider-side half is that the endpoint registers itself. `StripeWebhookRegistrationService` is a -`BackgroundService` (`:35-40`) registered by the Sales module in the same method that registers the +`BackgroundService` (`:36-42`) registered by the Sales module in the same method that registers the reconciliation sweep below (`Sales.Infrastructure/DependencyInjection.cs:39`, sweep at `:42`). It skips entirely when no `WebhookBaseUrl` is set, which is the local path where the Stripe CLI forwards instead, and -warns and skips with no `SecretKey` (`:63-73`); it subscribes exactly three event types (`:51-56`); and it -stamps every endpoint it creates with the description prefix `Auto-registered by MMCA` (`:49`). That prefix +warns and skips with no `SecretKey` (`:65-75`); it subscribes exactly three event types (`:53-58`); and it +stamps every endpoint it creates with the description prefix `Auto-registered by MMCA` (`:51`). That prefix is the whole reason an automated delete is acceptable: `IsStaleAutoRegistered` returns `false` for any endpoint lacking it, so an operator-created endpoint is never touched, and `true` only for one of its own whose URL has moved or whose status is no longer `enabled` (`:210-220`). The disabled-but-still-present @@ -291,17 +365,18 @@ duplicate that predicate collapses is a real incident, not a hypothetical: a second endpoint got created at the same URL with a brand-new signing secret, invalidating the configured one (`ADR-084:30-33`). -The secret is the honest ugly part. Stripe reveals a signing secret only at creation time (`:180`), so the -minted value goes two places at once. It is written to a shared `IStripeWebhookSecretStore` the moment it -exists (`:186`), and that store is read first, before the Stripe client is even built (`:100-105`), which is -what makes every replica converge on one secret instead of each minting its own. It is also held in a -volatile-backed singleton (`StripeWebhookSecretProvider.cs:17-27`) that the payment service prefers over -configuration on every incoming event (`StripePaymentService.cs:362`), announced at `Critical` -(`StripeWebhookRegistrationService.cs:189,292-293`), and written to stderr for an operator to copy into -`Stripe:WebhookSecret` (`:190-192`). That is live credential material in the log pipeline, on purpose: the -alternative is a first boot where the endpoint exists and every single delivery is rejected. ADR-084 files -it as a trade-off, not a feature, along with the fact that a configured secret is trusted and never -validated, because the provider will not re-reveal it (`ADR-084:174-177`). +The secret is the honest awkward part. Stripe reveals a signing secret only at creation time (`:182`), so +the minted value is written to a shared `IStripeWebhookSecretStore` the moment it exists (`:189`), and that +store is read first, before the Stripe client is even built (`:95-107`, the read at `:102`), which is what +makes every replica converge on one secret instead of each minting its own (class documentation +`:25-34`). It is also held in a volatile-backed singleton (`StripeWebhookSecretProvider.cs:17-27`, assigned +at `StripeWebhookRegistrationService.cs:190`) that the payment service prefers over configuration on every +incoming event (`StripePaymentService.cs:315`). The secret itself is never written to a log or a console +stream (class documentation `StripeWebhookRegistrationService.cs:20-23`, comment `:187-188`): the +`Critical` creation line names only the endpoint id (`:192`), and an operator reveals that endpoint's secret +in the Stripe Dashboard to persist it in `Stripe:WebhookSecret`. ADR-084 files the automated minting as a +trade-off, not a feature, along with the fact that a configured secret is trusted and never validated, +because the provider will not re-reveal it (`ADR-084:182-186`). ## The backstop: a periodic sweep against the provider @@ -309,9 +384,9 @@ Compensation answers "step two failed." It does not answer "step three never rep that is never delivered, or that arrives and is rejected because the signing secret is stale, produces no event to compensate, so no handler ever runs. -`PaymentReconciliationService` (`PaymentReconciliationService.cs:68-74`) is that backstop, registered as a +`PaymentReconciliationService` (`PaymentReconciliationService.cs:69-75`) is that backstop, registered as a hosted service by the Sales module's infrastructure (`DependencyInjection.cs:42`). Backstop is the exact -word the class documentation uses, and it is careful about it (`:50-60`): every order arms its own +word the class documentation uses, and it is careful about it (`:51-61`): every order arms its own `Sales.ExpireUnpaidOrder` deadline at checkout and re-arms it whenever a payment attempt fails, so the scheduled row is the primary path for an unpaid order and the sweep covers what a scheduled row cannot, a deadline that was never written, one dead-lettered by the internal-command processor, and every order @@ -319,106 +394,122 @@ created before the deadline existed. Both paths converge on the same transition `OrderCancelled` compensation, so whichever arrives first wins and the other finds nothing to do. Its loop shape is deliberate, and it is deliberately not its own. The sweep derives from the framework's -`PeriodicBackgroundService` (`PaymentReconciliationService.cs:74`), whose `ExecuteAsync` owns the +`PeriodicBackgroundService` (`PaymentReconciliationService.cs:75`), whose `ExecuteAsync` owns the enablement gate, the 15-second startup delay that lets the host finish initializing, the per-cycle `try`/`catch` that logs and never kills the loop, and every wait through `TimeProvider` so the cycle is -testable without real time (`PeriodicBackgroundService.cs:45-87`: gate `:47-51`, delay `:31`, per-cycle -catch `:64-76`, waits `:55,80`). +testable without real time (`PeriodicBackgroundService.cs:53-95`: gate `:55-59`, delay `:31` awaited at +`:63`, per-cycle catch `:81-84` through the overridable `LogCycleFailure` `:45-46`, waits `:63,88`). The sweep overrides exactly three members: `Interval`, read from configuration -(`PaymentReconciliationService.cs:81`); `IsEnabled`, which refuses to run when the toggle is off -(`:93-97`) or when no Stripe key is configured (`:99-103`), logging which of the two it was because those -are very different situations to find in a log; and `ExecuteCycleAsync` (`:110-111`), which delegates to an -internally visible `ReconcileOnceAsync` so one cycle is testable without the timer. That is also the base -class's only subclass in any of the four repos, apart from the test double in `PeriodicBackgroundService`'s -own unit tests (`PeriodicBackgroundServiceTests.cs:104`): one adopter, not yet a convention. - -One cycle (`ReconcileOnceAsync`, `PaymentReconciliationService.cs:119`) computes a single cutoff (`:122`) -and runs two passes against it, expiry first (`:128`) and Stripe reconciliation second (`:129`). The -ordering is load-bearing, and the comment says why (`:124-127`): reconciliation can move an order into +(`PaymentReconciliationService.cs:82`); `IsEnabled`, which refuses to run when the toggle is off +(`:94-98`) or when no Stripe key is configured (`:100-104`), logging which of the two it was because those +are very different situations to find in a log; and `ExecuteCycleAsync` (`:111-112`), which delegates to an +internally visible `ReconcileOnceAsync` so one cycle is testable without the timer. It is the base class's +only subclass outside MMCA.Common. Inside the framework the same base carries four of Common's own periodic +jobs (outbox cleanup, internal-command cleanup, refresh-session cleanup and the permission-grant refresh, +`ADR-054:190-196`), plus the test double in the base class's own unit tests +(`PeriodicBackgroundServiceTests.cs:104`). + +One cycle (`ReconcileOnceAsync`, `PaymentReconciliationService.cs:120`) computes a single cutoff (`:123`) +and runs two passes against it, expiry first (`:129`) and Stripe reconciliation second (`:130`). The +ordering is load-bearing, and the comment says why (`:125-128`): reconciliation can move an order into `PaymentFailed`, and an expiry pass running afterwards would find that brand-new row against the same cutoff and cancel it in the same cycle, collapsing the retry window to nothing. **Pass one expires the orders that never reached the provider at all.** -`ExpireStrandedUnpaidOrdersAsync` (`:178-201`) takes `PendingPayment` or `PaymentFailed` orders older than -the cutoff (`:184-185`) and makes no provider call, because there is nothing to call about: a -`PendingPayment` order has no session id (remarks `:173-177`). Checkout has already committed that stock, so +`ExpireStrandedUnpaidOrdersAsync` (`:194-224`) takes `PendingPayment` or `PaymentFailed` orders older than +the cutoff (`:199-201`) and makes no provider call, because there is nothing to call about: a +`PendingPayment` order has no session id (remarks `:185-189`). Checkout has already committed that stock, so an order nobody ever pays holds inventory nothing else can release. Each one is driven to `Cancelled` -through the same `MarkAsCancelled()` guarded transition (`:251`), which is the point: `Cancelled` is the one -terminal state the `OrderCancelled` compensation already listens on, so the release runs exactly once per -order however many times a sweep, a webhook or an outbox redelivery revisit it. `PaymentFailed` is -deliberately **not** the release state, because it is explicitly retryable (`:41-49`): releasing stock the -moment an order enters it would hand back quantities the very next checkout-session request expects to still -be committed, and a later payment would oversell. +through the same `MarkAsCancelled()` guarded transition (`ExpireOrderAsync` `:252`, the call at `:274`), +which is the point: `Cancelled` is the one terminal state the `OrderCancelled` compensation already listens +on, so the release runs exactly once per order however many times a sweep, a webhook or an outbox +redelivery revisit it. `PaymentFailed` is deliberately **not** the release state, because it is explicitly +retryable (`:42-50`): releasing stock the moment an order enters it would hand back quantities the very next +checkout-session request expects to still be committed, and a later payment would oversell. **Pass two asks Stripe about the orders that are waiting on a confirmation.** -`ReconcileStripeSessionsAsync` (`:136-166`) takes `PaymentInitiated` orders that have a session id and last -changed before the cutoff (`:147-152`). +`ReconcileStripeSessionsAsync` (`:141-178`) takes `PaymentInitiated` orders that have a session id and last +changed before the cutoff (`:152-157`). **Both passes bound the work in SQL, not in memory.** One shared helper, `QueryStrandedOrderIdsAsync` -(`:207-223`), takes each pass's predicate, orders oldest-first, takes the batch size and projects to ids, -all server-side (`:217-220`), over a dedicated filtered index `IX_Order_Status_Modified` on `(Status, +(`:230-246`), takes each pass's predicate, orders oldest-first, takes the batch size and projects to ids, +all server-side (`:240-243`), over a dedicated filtered index `IX_Order_Status_Modified` on `(Status, LastModifiedOn, CreatedOn)` (`OrderConfiguration.cs:74-76`). The comment above the reconciliation predicate -explains the rule (`:141-146`): materializing every stuck order and taking the batch in memory would make +explains the rule (`:146-151`): materializing every stuck order and taking the batch in memory would make the batch size a Stripe-call budget rather than a query bound, and the exact failure this sweep exists to handle (a prolonged webhook outage) is the one that strands a large backlog. -**It reloads each order in its own scope and re-checks.** `ReconcileOrderAsync` (`:275`) opens a scope per -order (`:277`) so one order's failure never poisons the batch, reloads the order tracked (`:282-286`), and -returns immediately if it is no longer `PaymentInitiated` (`:288-292`), because a webhook may have arrived +**It reloads each order in its own scope and re-checks.** `ReconcileOrderAsync` (`:298`) opens a scope per +order (`:300`) so one order's failure never poisons the batch, reloads the order tracked (`:305-309`), and +returns immediately if it is no longer `PaymentInitiated` (`:311-315`), because a webhook may have arrived between the id query and now. -**It applies the same guarded transitions the webhook would have.** The session status maps to exactly -three outcomes (`TryApplyTransition`, `:325-347`): paid to `MarkAsPaid`, expired to `MarkAsPaymentFailed`, -still open to nothing at all, left for a later cycle. Those are the identical `Result`-returning methods -called by the webhook handler (`ProcessPaymentWebhookHandler.cs:97,128`) and by the client-initiated check -(`VerifyPaymentHandler.cs:64`). The sweep gets no private path into the aggregate, so it cannot reach a +**It applies the same guarded transitions the webhook would have, and only on proof.** The session status +maps to three outcomes (`TryApplyTransition`, `:350-373`): a paid session to `MarkAsPaid`, but only when +`PaymentProof.IsPaymentForOrder` accepts the paid amount and currency as payment of this order +(`IsProvenPayment`, `:380-400`); expired to `MarkAsPaymentFailed`; anything else to nothing at all, left for +a later cycle. A paid session the proof refuses changes nothing and is logged at `Warning` with what an +operator needs to reconcile it by hand (`:392-399`). Those are the identical `Result`-returning methods +called by the webhook handler (`ProcessPaymentWebhookHandler.cs:109,174`) and by the client-initiated check +(`VerifyPaymentHandler.cs:72`). The sweep gets no private path into the aggregate, so it cannot reach a state the webhook could not. **And it loses races on purpose.** If a webhook transitions the order between the sweep's load and its save, -the save throws `DbUpdateConcurrencyException`, which is logged and skipped, not retried (`:307-317`, the -concurrency branch `:312-317`). The concurrent writer is authoritative; the next cycle sees the final state. +the save throws `DbUpdateConcurrencyException`, which is logged and skipped, not retried (`:330-340`, the +concurrency branch `:335-340`). The concurrent writer is authoritative; the next cycle sees the final state. The whole thing is configuration-gated by `PaymentReconciliationSettings` (`PaymentReconciliationSettings.cs:24-53`): `Enabled` defaults true (`:30`), a 10-minute poll interval (`:34`), a 30-minute stuck age (`:48`), and a 50-order batch (`:52`), carried as those exact values in the -Sales service's `appsettings.json:90-95`, directly below the `UnpaidOrderExpiry` section that sets the -per-order deadline (`:86`). The settings documentation asks for the stuck age to stay above normal webhook +Sales service's `appsettings.json:97-102`, directly below the `UnpaidOrderExpiry` section that sets the +per-order deadline (`:93`). The settings documentation asks for the stuck age to stay above normal webhook latency and equal to `UnpaidOrderExpiry:Minutes` (`:12-22`), so the two mechanisms agree on one window and the sweep never races a healthy delivery. -Both mechanisms are covered by tests that assert the behavior, not the wiring: seven cases on the saga -handler including a redelivered event that must not restore stock twice (`:44`), the lookup that has to -ignore the soft-delete filter (`:122`), and the missing-inventory case that must warn and still mark the -order restored (`:149`), all in `OrderCancelledSagaHandlerTests.cs:21,44,65,81,102,122,149`; and thirteen on -the sweep, seven on the Stripe pass including the lost race and the bound-the-query-not-the-list case and -six on the expiry pass including the stale `PendingPayment` order that is expired into `Cancelled` without -Stripe ever being called (`PaymentReconciliationServiceTests.cs:31,47,62,77,93,105,122,149,167,186,202,219,237`). -The ingress contract has its own pair: five methods pinning the controller's accept-versus-reject mapping, -one of them a `[Theory]` over both shape-rejection codes (`:59`) and one pinning the request-size bound -(`:83`), in `PaymentsControllerTests.cs:34,43,59,68,83`; and five on the deletion predicate, including the -operator-created endpoint that must never be judged stale +Both mechanisms are covered by tests that assert the behavior, not the wiring. Thirteen cases cover the saga +handler in `OrderCancelledSagaHandlerTests.cs`, including a redelivered event that must not restore stock +twice (`:45`), the lookup that has to ignore the soft-delete filter (`:123`), the missing-inventory case that +must warn and still mark the order restored (`:150`), stock returned through the atomic increment +(`:178`), the increment and the marker committing in one transaction (`:235`), a failed increment failing +the transaction so the marker rolls back (`:264`), and the non-tracking snapshot (`:284`). Fifteen cover the +sweep in `PaymentReconciliationServiceTests.cs`: nine on the Stripe pass, including a session paid for a +different amount that leaves the order untouched (`:52`), the lost race (`:126`), one throwing order that +does not stop the rest (`:147`) and the bound-the-query-not-the-list case (`:167`), and six on the expiry +pass (`:194-282`), including the stale `PendingPayment` order that is expired into `Cancelled` without +Stripe ever being called (`:194`, `:212`). The ingress contract has its own pair: five methods pinning the +controller's accept-versus-reject mapping, one of them a `[Theory]` over both shape-rejection codes (`:59`) +and one pinning the request-size bound (`:83`), in `PaymentsControllerTests.cs:34,43,59,68,83`; and five on +the deletion predicate, including the operator-created endpoint that must never be judged stale (`StripeWebhookRegistrationServiceTests.cs:181,189,203,213,226`). ## Trade-offs, honestly - **Adoption is one module, and the record says so.** This pattern lives in MMCA.Store's Sales module only: the two saga handlers and the one reconciliation sweep above. MMCA.ADC and MMCA.Helpdesk have no - compensating saga handler and no reconciliation sweep today (`ADR-054:172-176`). The record exists because - the mechanism is the framework's stated answer to cross-boundary consistency, not because it is broadly - adopted. Read this article as one worked implementation, not a fleet-wide convention. + compensating saga handler and no reconciliation sweep (`ADR-054:198-200`); the nearest thing in ADC is a + single compensating step, an upload handler that schedules the delete of an orphaned session-asset blob, + which ADR-054 points to ADR-123 for rather than counting as a saga (`ADR-054:200-209`). The record exists + because the mechanism is the framework's stated answer to cross-boundary consistency, not because it is + broadly adopted. Read this article as one worked implementation, not a fleet-wide convention. +- **A returned failure is abandoned, not retried.** An invariant rejection, a refused marker or a failed + increment rolls the restoration back, logs a `Warning` and returns; the handler discards that `Result`, so + the outbox row is marked processed and no redelivery or sweep revisits the order + (`OrderCancelledSagaHandler.cs:55,109-115,130-135,148-155`, `ADR-054:259-270`). The stock stays held + against a cancelled order until someone acts on the log line. If that is not the outcome you want for a + given failure, it has to throw. - **There is no orchestrator, and that is a written deferral rather than a silence.** Choreography is correct for this workflow because `Order.Status` plus `Order.InventoryRestored` already *are* the saga state, and **ADR-086** records what would replace it when that stops being true: a MassTransit v8 saga state machine, durable per-instance correlation state in the owning service's own database, and - per-instance deadlines instead of a fixed-interval sweep (`ADR-086:59-85`). The technology is already - pinned, because MassTransit is held at v8 (v9 requires a commercial license, `:87-90`). The trigger is + per-instance deadlines instead of a fixed-interval sweep (`ADR-086:65-91`). The technology is already + pinned, because MassTransit is held at v8 (v9 requires a commercial license, `:93-102`). The trigger is specific: a workflow with three or more steps across two or more services, state that does not fit one - aggregate, and at least one per-instance deadline (`:97-102`). Its own Revision records that the first of + aggregate, and at least one per-instance deadline (`:104-109`). Its own Revision records that the first of those three properties is already satisfied without a coordinator: the per-instance unpaid-order deadline - exists as a scheduled internal-command row rather than as state-machine state (`:8-10`, `:143-180`). The + exists as a scheduled internal-command row rather than as state-machine state (`:8-10`, `:150-186`). The deferral stands, it ships no coordinator, and even after one exists the sweep stays underneath it for the - external system that never replies (`:79-85`, `:138-141`). + external system that never replies (`:86-91`, `:145-148`). - **Inconsistency is bounded, not eliminated.** Between the cancellation commit and the compensation commit, stock is held against a cancelled order. An unpaid order loses its stock at its own scheduled deadline; when that row is missing, the bound is the sweep's stuck age plus one poll interval instead, 30 @@ -428,13 +519,13 @@ operator-created endpoint that must never be judged stale - **Compensation is best-effort per line, and names what it could not restore.** `RestoreInventory` cannot restore an order line whose `InventoryItem` row is missing, so it collects those variant ids and returns them instead of skipping quietly - (`InventoryRestorationDomainService.cs:21-27`), and the handler logs them as a warning naming the order - and the variants (`OrderCancelledSagaHandler.cs:80-86`). The marker still commits, that quantity is never - restored, and nothing retries it. The comment above the marker says why (`:88-92`): the increases and the - marker land in the same save, so withholding the marker would re-apply every **matched** increase on the - next redelivery, and because the lookup already ignores the soft-delete filter, an unmatched variant means - the row never existed at all. The warning is the record, not a repair, and ADR-054's own trade-off bullet - states it the same way (`ADR-054:214-225`). + (`InventoryRestorationDomainService.cs:33-38`), and the handler logs them as a warning naming the order + and the variants (`OrderCancelledSagaHandler.cs:117-123`). The marker still commits, that quantity is never + restored, and nothing retries it. The comment above the marker says why (`:125-129`): the increases and the + marker commit in one transaction, so withholding the marker would re-apply every **matched** increase on + the next redelivery, and because the lookup already ignores the soft-delete filter, an unmatched variant + means the row never existed at all. The warning is the record, not a repair, and ADR-054's own trade-off + bullet states it the same way (`ADR-054:247-258`). - **Redelivery re-runs every handler of the event, not the failed one.** The dispatcher iterates handlers sequentially with no per-handler isolation (`DomainEventDispatcher.cs:76-85`), so one throwing handler also skips the handlers after it, and a redelivery re-runs the ones that already succeeded. The mark-processed @@ -442,7 +533,7 @@ operator-created endpoint that must never be judged stale back is every event that save raised, not just the failed one. Every handler on a shared event must be idempotent or must keep its failure to itself. - **The sweep is not replica-leased.** The outbox processor claims rows with a lease before working them - (ADR-003); the sweep takes no such claim, so at the configured `maxReplicas: 2` (`main.bicep:1810`) two + (ADR-003); the sweep takes no such claim, so at the configured `maxReplicas: 2` (`main.bicep:1850`) two replicas can pick the same stuck order and each spend a Stripe status call. Correctness holds through the concurrency token; the duplicated external call does not deduplicate. - **The webhook ingress trades visibility for endpoint survival.** A post-acceptance failure returns 200, @@ -450,7 +541,7 @@ operator-created endpoint that must never be judged stale (`PaymentsController.cs:115`) or through the sweep above. The endpoint is also anonymous, internet-reachable and exempt from both gateway rate limiters, with signature verification as its only authentication, so a hostile caller can generate `Critical` log volume one rejected request at a time - (`ADR-084:181-193`). + (`ADR-084:194-206`). - **Every compensating action needs its own marker.** There is no generic mechanism here. A second compensating action means a second persisted marker or a naturally idempotent operation, decided by the author of that handler. @@ -464,19 +555,22 @@ The mechanism ports to any stack that has events, a database, and an external de what makes it compensation instead of an impossible rollback. The exception is worth naming: a check that must happen *before* the commit, like asking whether the money already moved, cannot be a post-commit handler at all, and belongs in the command where it can still refuse. -2. **Make idempotency a persisted marker that commits with the writes it guards.** One `SaveChanges`, one - database, one transaction. A flag written after the work is a narrower version of the same bug; a flag - written with the work is an invariant. Guard the marker in the aggregate so a second call is a typed - failure, not a silent overwrite. +2. **Make idempotency a persisted marker that commits with the writes it guards.** One transaction, one + database. A flag written after the work is a narrower version of the same bug; a flag written with the + work is an invariant. Guard the marker in the aggregate so a second call is a typed failure, not a silent + overwrite. If other writers touch the same rows concurrently, move the quantities with a relative update + inside that transaction rather than a load-edit-save. 3. **Add an optimistic-concurrency token** so two simultaneous deliveries cannot both pass the marker check and both commit. The marker handles sequential re-runs, the token handles concurrent ones. You need both. -4. **Let your delivery layer own retry.** If your event transport already retries with backoff and - dead-letters, throw and let it re-run you. Decide explicitly, per handler, whether failure should force a - redelivery (throw) or be kept local, and if it is kept local, give that work its own durable home rather - than a `catch` that logs. A shared base class that logs the handler and event context and then rethrows - makes the honest option the default one. Then check what your delivery layer actually redelivers: if - it acknowledges a batch in one step, one thrown exception brings the whole batch back, not just your - event. + Write the marker before the side effects, so the loser fails before it has done anything. +4. **Let your delivery layer own retry, and know which of your failures reach it.** If your event transport + already retries with backoff and dead-letters, throw and let it re-run you. A failure you log and return + is a failure nothing retries, so decide explicitly, per failure, whether it should force a redelivery + (throw), be kept local with its own durable home rather than a `catch` that logs, or be abandoned with a + log line as the record, and write the third choice down. A shared base class that logs the handler and + event context and then rethrows makes the honest option the default one. Then check what your delivery + layer actually redelivers: if it acknowledges a batch in one step, one thrown exception brings the whole + batch back, not just your event. 5. **Decide what your inbound webhook's status code means, and write it down.** A third-party caller reads it as a delivery instruction ("retry me" or "stop"), not as an application result, and providers disable endpoints that keep failing. Return the error code only for the failures where nothing was @@ -497,12 +591,12 @@ needs an explicit timeout. Write both down as code, or your consistency story is **What we covered:** why a cross-boundary workflow has no transaction to roll it back, how MMCA.Store puts compensation in its own domain-event handler running in its own DI scope (and which single check has to stay -in the command instead), how the `Order.InventoryRestored` marker committed by the same `SaveChanges` as the -inventory increases turns idempotency into a database invariant (and why that is stronger than a -record-after-success inbox), how the `RowVersion` token serializes concurrent redeliveries, why throwing is -the correct failure mode when the outbox already owns retry and what the alternative costs, why the inbound -webhook's status code encodes acceptance rather than success and registers its own endpoint (ADR-084), and -how `PaymentReconciliationService` backs both halves with a two-pass sweep that expires stranded unpaid +in the command instead), how the `Order.InventoryRestored` marker committed in the same transaction as the +atomic inventory increments turns idempotency into a database invariant (and why that is stronger than a +record-after-success inbox), how the `RowVersion` token serializes concurrent redeliveries, why only a thrown +failure gets a redelivery and what a returned failure costs, why the inbound webhook's status code encodes +acceptance rather than success and registers its own endpoint (ADR-084), and how +`PaymentReconciliationService` backs the payment flow with a two-pass sweep that expires stranded unpaid orders and asks Stripe for authoritative status on the rest. **Next in the series:** Article 50, "The LLM is a dependency: a bounded, guarded, metered boundary for chat @@ -521,186 +615,144 @@ completions." *Tags: .NET, C Sharp, Distributed Systems, Microservices, Software Architecture* -*Notes: verified type/behavior names with path:line (all re-read this run, MMCA.Common at v1.205.0). The -code block is condensed from -`MMCA.Store/Source/Modules/Sales/MMCA.Store.Sales.Application/Orders/Saga/OrderCancelledSagaHandler.cs:36-103` -(most logging calls and their diagnostic branches trimmed, control flow and API calls faithful, not -byte-for-byte; the `ToDictionary` call is inlined into the `RestoreInventory` argument where the source -assigns it first at `:77`, and the comments are shortened from `:70-73` and `:88-92`).* -- *ADR-054 (`Website/docs-src/adr/054-saga-compensation-and-reconciliation.md`), Accepted 2026-07-25 (`:4`), - with the Status block recording amendments on 2026-07-28, 2026-08-01 and 2026-09-01 (`:4-13`), revisions on - 2026-09-11 (`:13-24`) and the 2026-09-19 revision that records `CancelOrderHandler` deriving from - `MutateEntityHandlerBase` and owning the payment-session retirement (`:24-27`). Cited here: the - ADR-003/006/021 gap statement (`:41-46`); "what it standardizes is the log line, not a swallow" - (`:99-106`); the shared-loop paragraph (`:157-170`); marker-beats-inbox rationale (`:186-189`); - single-module adoption (`:172-176`); the trade-offs restated here, still five bullets (`:206-244`), whose - best-effort-per-line bullet now names what it could not restore and cites the same code this article does - (`:214-225`). Its Revision on the per-order unpaid-order deadline and the sweep as its backstop is - `:246-312`.* -- *ADR-084 (`Website/docs-src/adr/084-stripe-webhook-ingress.md`), Accepted 2026-08-14 with revisions on - 2026-09-03 and 2026-09-07 (`:4-7`): the delivery-family framing that places it beside ADR-003/021/017/054 - (`:9-14`), the two production incidents (`:28-34`, the same-URL duplicate at `:30-33`), the - acceptance-coded decision stating that five error codes return 400 (`:57-73`), the startup - self-registration (`:94-103`) and marker-scoped deletion (`:104-110`), the secret minting and shared store - (`:111-119`), Store-Sales-only adoption plus the test suites, described there as four test methods covering - five cases (`:126-133`), and the trade-offs cited here: 200 hides processing failures (`:168-173`), the - never-validated configured secret (`:174-177`), and the anonymous internet-reachable endpoint that is - exempt from both gateway rate limiters (`:181-193`). The 1 MB request-size cap is its 2026-09-07 revision - item 1 (`:202-207`) and the shared secret store its item 2 (`:208-216`).* -- *ADR-086 (`Website/docs-src/adr/086-process-manager-deferred.md`), Accepted 2026-08-18 **as a documented - deferral that ships no code** (`:3-7`), revised 2026-09-11 to record that the first per-instance scheduled - deadline exists in MMCA.Store on ADR-114's internal-command queue rather than in a state machine (`:8-10`, - Revision `:143-180`), which retires one of the three properties the deferral waits on. Also cited: the - shape a durable coordinator would take (`:59-85`); the licensing pin that fixes the technology choice, - MassTransit held at v8 because v9 requires a commercial license (`:87-90`); the trigger (`:97-102`); and - ADR-054's sweep remaining underneath any future coordinator (`:79-85`, `:138-141`).* -- *Stripe ingress source (paths rooted at `MMCA.Store/Source/Modules/Sales/`, all re-read this run): - `MMCA.Store.Sales.API/Controllers/PaymentsController.cs` anonymous raw-body POST (`[HttpPost("webhook")]` - `:57`, `[NonIdempotent(...)]` `:58-65`, `[AllowAnonymous]` `:66`, `[RequestSizeLimit(1_000_000)]` `:76` - with its 1 MB rationale comment `:67-75`; raw read `:81-87` with the `StreamReader` `:84` and the - `Stripe-Signature` header `:86`), the five-code `RejectionCodes` `FrozenSet` `:39-46` (the two - validator-raised shape rejections explained `:31-38`), the accept-versus-reject doc `:48-56` and branch - `:100-118` (post-acceptance `Warning` `:115` + `return Ok()` `:118`), the `Critical` rejection log call - `:111` with its `LoggerMessage` `:122-126` and the log-floor rationale comment `:105-110`. - `MMCA.Store.Sales.Infrastructure/Payments/Stripe/StripeWebhookRegistrationService.cs`: - `BackgroundService` declaration `:35-40`, `AutoRegisteredDescriptionPrefix` `:49`, the three subscribed - event types `:51-56`, the `WebhookBaseUrl`/`SecretKey` skip guards `:63-73`, the shared secret store read - before the client is built `:100-105`, "the signing secret is only available at creation time" `:180`, the - store write `:186`, the `Critical` announcement `:189` with its `LoggerMessage` `:292-293` and the stderr - write `:190-192`, `IsStaleAutoRegistered` `:210-220`. `StripeWebhookSecretProvider` volatile singleton - `.../Payments/Stripe/StripeWebhookSecretProvider.cs:17-27`, preferred over configuration on every event at - `.../Payments/Stripe/StripePaymentService.cs:362`. Registered next to the reconciliation sweep at - `MMCA.Store.Sales.Infrastructure/DependencyInjection.cs:39` (sweep `:42`).* -- *Store paths below are rooted at `MMCA.Store/Source/Modules/Sales/`. Checkout's single local transaction: - `MMCA.Store.Sales.Application/ShoppingCarts/UseCases/CheckOut/CheckOutHandler.cs:135-188` - (`ExecuteInTransactionAsync` `:135`, order insert `:165`, in-delegate `SaveChangesAsync` `:176`), followed - by the `Sales.ExpireUnpaidOrder` deadline `ScheduleAsync` `:226` and the second `SaveChangesAsync` `:240` - the transaction helper requires (comment `:238-239`).* +*Notes: 2026-10-02 refresh (MMCA.Common v1.221.0), audit verdict Needs-structural-change. Every source +anchor below was re-read this run unless marked otherwise. Structural changes this run: the marker section, +the code block and the redelivery section describe the single `ExecuteInTransactionAsync` delegate (marker +saved first, stock moved by `IncrementAsync`) instead of one `SaveChanges`; the redelivery section and a new +trade-off bullet record that the handler's three returned failures are abandoned, not redelivered; the Stripe +secret paragraph drops the stderr claim; `PeriodicBackgroundService` is no longer described as having one +adopter. The code block is condensed from +`MMCA.Store/Source/Modules/Sales/MMCA.Store.Sales.Application/Orders/Saga/OrderCancelledSagaHandler.cs:45-160` +(logging calls trimmed except the unmatched-variant warning, the repository locals inlined into the calls, +comments shortened from `:53-54`, `:96-103`, `:111-112` and `:137-138`; control flow, the discarded +transaction `Result` and every API call faithful, not byte-for-byte).* +- *ADR-054 (`Website/docs-src/adr/054-saga-compensation-and-reconciliation.md`): Status block records + revisions on 2026-09-25 (`:28-34`, the invariant-rejection trade-off) and 2026-10-01 (`:35`, the + one-transaction restoration). Cited here: the ADR-003/006/021 gap statement (`:50-55`); "what it + standardizes is the log line, not a swallow" (`:122-123`, bullet `:114-133`); the idempotency Decision + bullet (`:99-113`); the shared-loop paragraph naming Common's own `PeriodicBackgroundService` subclasses + (`:179-196`, the four Common jobs `:190-196`); single-module adoption and ADC's one compensating step + (`:198-209`); marker-beats-inbox rationale (`:219-222`); the Trade-offs section, six bullets (`:239-289`), + of which best-effort-per-line is `:247-258` and the abandoned-compensation bullet is `:259-270`. Revision + 2026-09-11 `:291-361`; Revision 2026-10-01 `:362-399`, which records the discarded failed `Result` against + the `:53-54` code comment (`:372-376`).* +- *ADR-084 (`Website/docs-src/adr/084-stripe-webhook-ingress.md`): `:4-7`, `:9-14`, `:28-34` (same-URL + duplicate `:30-33`) and the acceptance-coded decision `:57-73` carried from the audit as confirmed; the + section headings were re-read this run: self-registration bullet `:98`, marker-scoped deletion `:108`, + secret bullet `:115-125`, adoption plus tests `:133-140`, trade-offs 200-hides `:176-181`, never-validated + secret `:182-186`, anonymous endpoint exempt from both edge limiters `:194-206`, Revision 2026-09-07 + `:211`, Revision 2026-10-01 `:252`. The ADR's secret bullet (`:123-124`) and stderr trade-off + (`:170-175`) still describe a stderr write that the code does not perform + (`StripeWebhookRegistrationService.cs:20-23,187-188`); this article follows the code.* +- *ADR-086 (`Website/docs-src/adr/086-process-manager-deferred.md`), headings re-read this run: shape + `:65-91` (the sweep-underneath bullet `:86-91`), license pin `:93-102`, trigger `:104-109`, the + sweep-stays trade-off `:145-148`, Revision 2026-09-11 `:150-186`, Revision 2026-10-01 `:188-201`; + `:8-10` carried from the audit as confirmed.* +- *Stripe ingress (paths rooted at `MMCA.Store/Source/Modules/Sales/`): + `MMCA.Store.Sales.API/Controllers/PaymentsController.cs` anchors (`:31-38`, `:39-46`, `:48-56`, `:57`, + `:66`, `:67-75`, `:76`, `:81-87`, `:86`, `:100-118`, `:105-110`, `:111`, `:115`, `:118`, `:122-126`) + carried from the audit as confirmed. + `MMCA.Store.Sales.Infrastructure/Payments/Stripe/StripeWebhookRegistrationService.cs` (re-read): class + documentation, secret never logged `:20-23`, replica convergence `:25-34`; `BackgroundService` + declaration `:36-42`; `AutoRegisteredDescriptionPrefix` `:51`; three event types `:53-58`; skip guards + `:65-75`; shared store read `:95-107` (`GetAsync` `:102`); creation-time comment `:182`; `SetAsync` + `:189`; provider assignment `:190`; `LogEndpointCreated` `:192`; never-printed comment `:187-188`. + `IsStaleAutoRegistered` `:210-220`, `StripeWebhookSecretProvider.cs:17-27` and + `MMCA.Store.Sales.Infrastructure/DependencyInjection.cs:39` (sweep `:42`) carried from the audit as + confirmed. Provider preferred over configuration: + `MMCA.Store.Sales.Infrastructure/Payments/Stripe/StripePaymentService.cs:315` (re-read).* +- *Checkout: `MMCA.Store.Sales.Application/ShoppingCarts/UseCases/CheckOut/CheckOutHandler.cs` + `ExecuteInTransactionAsync` `:80-82` over `WriteAsync` `:122-183`, `AddAsync` `:163`, `DecrementAsync` + `:169`, `SaveChangesAsync` `:174`, deadline `ArmAsync` inside the delegate `:180` (comment `:176-179`), + class documentation `:32-38`.* - *`CancelOrderHandler` (`MMCA.Store.Sales.Application/Orders/UseCases/Cancel/CancelOrderHandler.cs`): - `MutateEntityHandlerBase` `:27-31`, `EntityId` `:39`, - ADR-035 `RowVersion` override `:46` (rationale comment `:41-43`), `MutateAsync` `:55-67` calling - `RetirePaymentSessionAsync` then `MarkAsCancelled` `:60-66`, "restoration is triggered by the - OrderCancelled domain event" remarks `:49-54`, the no-OrderLines-include comment `:33-36`; - `RetirePaymentSessionAsync` `:90-124` (status call `:99-100`, paid refusal with - `OrderCancellationErrorCodes.PaymentAlreadyCompleted` `:101-109`, non-fatal logging `:111-121`), and the - class documentation arguing why this one compensating action is inline `:17-25`.* -- *`Order` (`MMCA.Store.Sales.Domain/Orders/Order.cs`): `InventoryRestored` marker property `:122` (doc - `:116-121`); `MarkInventoryRestored()` `:568-591` (not-cancelled guard `:570-577`, already-restored guard - `:579-586`, set `:588`); `MarkAsCancelled()` `:548` raising `OrderCancelled` `:556`; `MarkAsPaid` `:349`; - `MarkAsPaymentFailed` `:396`. `OrderCancelled : BaseDomainEvent` - (`MMCA.Store.Sales.Domain/Orders/DomainEvents/OrderCancelled.cs:6-9`), so it is a pure domain event, not an - `IIntegrationEvent`.* -- *`OrderCancelledSagaHandler : IDomainEventHandler` - (`MMCA.Store.Sales.Application/Orders/Saga/OrderCancelledSagaHandler.cs:30-33`): scope + `IUnitOfWork` - `:40-41`, tracked load with lines `:44-48`, marker check `:57-61`, inventory lookup with - `ignoreQueryFilters: true` `:74` (rationale comment `:70-73`), `ToDictionary` `:77`, `RestoreInventory` - call `:79` with the unmatched-ids warning branch `:80-86` (`LogInventoryItemsNotFound` declared - `:114-115`), the mark-anyway rationale comment `:88-92`, `MarkInventoryRestored` `:93`, single - `SaveChangesAsync` `:101`; `HandleAsync` spans `:36-103` (class doc states the one-save and rowversion - behavior `:16-23`).* -- *`OrderPaymentFailedSagaHandler` (`.../Orders/Saga/OrderPaymentFailedSagaHandler.cs:22-24`): implements - `IDomainEventHandler` directly, no `try`/`catch` anywhere in the file; own scope - `:31-32`, `IInternalCommandScheduler.ScheduleAsync(new SendOrderPaymentFailedEmailInternalCommand(...))` - `:34-36`, the `Result` branch logging `LogScheduleFailed` at `Error` or `LogNotificationScheduled` at - `Information` `:38-45` (declared `:97-103`), `RearmExpiryDeadlineAsync` call `:47` and method `:67-93` - (settings gate `:72-76`, `ExpireUnpaidOrderInternalCommand` scheduled from now plus - `UnpaidOrderExpirySettings.Minutes` `:81-84`, failure logged `:86-90`). The class documentation states the - ADR-114 rationale, the post-commit position and the log-rather-than-throw rule `:11-21`, and - `RearmExpiryDeadlineAsync`'s remarks record that the older checkout-armed deadline stays in the queue and - runs as a no-op `:54-66`.* -- *`InventoryRestorationDomainService.RestoreInventory` - (`MMCA.Store.Sales.Domain/Inventory/InventoryRestorationDomainService.cs:13-33`) returns - `Result>` `:13`: the unmatched-row branch records the - variant id instead of skipping silently `:21-27`, `IncreaseInventory` `:29`, the collected ids are - returned as the success value `:32`. Still a pure domain service with no infrastructure dependencies - (`:8`).* -- *`PaymentReconciliationService : PeriodicBackgroundService(timeProvider, logger)` - (`MMCA.Store.Sales.Infrastructure/Payments/Reconciliation/PaymentReconciliationService.cs:68-74`, base type - `:74`): the loop is inherited, and the sweep overrides only `Interval` `:81`, `IsEnabled` `:89-107` (toggle - gate `:93-97`, Stripe-key gate `:99-103`) and `ExecuteCycleAsync` `:110-111`. `ReconcileOnceAsync` `:119` - (cutoff `:122`, expiry pass first `:128` then the Stripe pass `:129`, ordering rationale `:124-127`); - `ExpireStrandedUnpaidOrdersAsync` `:178-201` (predicate `:184-185`, no-provider-call remarks `:173-177`) - with `ExpireOrderAsync` `:229` and its `MarkAsCancelled` `:251`; `ReconcileStripeSessionsAsync` `:136-166` - (predicate `:147-152`, rationale comment `:141-146`); the shared SQL-side ordered/bounded/projected query - `QueryStrandedOrderIdsAsync` `:207-223` (ordering, `Take` and projection `:217-220`); - `ReconcileOrderAsync` `:275` (per-order scope `:277`, tracked reload `:282-286`, re-check under fresh load - `:288-292`, Stripe status call `:294-300`, save+catch block `:307-317` with - `DbUpdateConcurrencyException` logged and skipped `:312-317`); `TryApplyTransition` `:325-347`. The class - documentation describes the two classes of stranded order `:27-40`, why class two releases into - `Cancelled` rather than `PaymentFailed` `:41-49`, and the sweep's position as the backstop behind the - per-order deadline `:50-60`. Registered via - `services.AddHostedService()` - (`MMCA.Store.Sales.Infrastructure/DependencyInjection.cs:42`). Supporting filtered index - `IX_Order_Status_Modified` on `(Status, LastModifiedOn, CreatedOn)` - (`MMCA.Store.Sales.Infrastructure/Persistence/EntityConfiguration/OrderConfiguration.cs:74-76`, rationale - comment `:70-73`).* -- *`PaymentReconciliationSettings` - (`MMCA.Store.Sales.Infrastructure/Payments/Reconciliation/PaymentReconciliationSettings.cs:24-53`): - `SectionName` `:27`, `Enabled` default `true` `:30`, `PollIntervalMinutes` default 10 `:34`, - `StuckAgeMinutes` default 30 `:48`, `BatchSize` default 50 `:52`; the class documentation covers both jobs - and asks for `StuckAgeMinutes` to equal `UnpaidOrderExpiry:Minutes` `:12-22`. Same four values in - `MMCA.Store/Source/Services/MMCA.Store.Sales.Service/appsettings.json:90-95`, with the `UnpaidOrderExpiry` - section at `:86`.* -- *Same guarded transitions reused by the primary paths: - `.../Orders/UseCases/ProcessPaymentWebhook/ProcessPaymentWebhookHandler.cs:97` (`MarkAsPaid`) and `:128` - (`MarkAsPaymentFailed`); `.../Orders/UseCases/VerifyPayment/VerifyPaymentHandler.cs:64` (`MarkAsPaid`).* -- *Framework pieces (paths rooted at `MMCA.Common/Source/Core/`): domain-event handlers registered singleton - in `MMCA.Common.Application/DependencyInjection.cs` by `ScanModuleApplicationServices(Assembly)` declared - `:187` (the "they create their own DI scopes internally" comment `:192`, `WithSingletonLifetime()` - closing the scan `:197`); sequential handler loop with no per-handler isolation in - `MMCA.Common.Application/Services/DomainEventDispatcher.cs:76-85`, inside `DispatchToHandlersAsync` - declared `:69`; `SafeDomainEventHandler` - `MMCA.Common.Application/DomainEvents/SafeDomainEventHandler.cs:32` - **logs and rethrows**, it does not swallow: `HandleAsync` `:36-47` runs `HandleSafelyAsync` inside the - exception filter `LogAndRethrow` `:61-70`, which always - returns `false` so the exception keeps propagating `:42-46`, with `OperationCanceledException` excluded - from the filter `:42`; the class documentation states that swallowing made the retried-via-the-outbox - promise false `:13-20` and spells out the whole-local-batch redelivery consequence `:21-29`. Its tests - assert propagation, log-before-caller ordering and the unlogged cancellation - (`MMCA.Common/Tests/Core/MMCA.Common.Application.Tests/DomainEvents/SafeDomainEventHandlerTests.cs:33,51,73`), - and the only subclass anywhere is the test double at `SafeDomainEventHandlerTests.cs:124`. Failed - in-process dispatch leaves outbox entries unprocessed and signals the processor in + `RetirePaymentSessionAsync` `:90-126` (re-read): state gate `:92-95`, `PaymentSessionRetirement.RetireAsync` + with its status-read/expire/re-read comment `:99-103`, non-fatal status log `:105-108`, paid refusal with + `OrderCancellationErrorCodes.PaymentAlreadyCompleted` `:110-118`, non-fatal expire log `:120-123`. Carried + from the audit as confirmed: `:17-25`, `:27-31`, `:33-36`, `:39`, `:41-43`, `:46`, `:49-54`, `:55-67`, + `:60-66`.* +- *`Order` (`MMCA.Store.Sales.Domain/Orders/Order.cs`, re-read): `InventoryRestored` `:122` (doc + `:116-121`); `MarkInventoryRestored()` `:571-594` (not-cancelled guard `:573-580`, already-restored guard + `:582-589`, set `:591`); `MarkAsCancelled()` `:551` raising `OrderCancelled` `:559`; `MarkAsPaid` `:347`; + `MarkAsPaymentFailed` `:394`. `OrderCancelled : BaseDomainEvent` + (`MMCA.Store.Sales.Domain/Orders/DomainEvents/OrderCancelled.cs:6-9`) carried from the audit.* +- *`OrderCancelledSagaHandler` (`MMCA.Store.Sales.Application/Orders/Saga/OrderCancelledSagaHandler.cs`, + re-read in full): declaration `:40-42`; class documentation on the one transaction and rowversion `:19-25` + and on the atomic `IncrementAsync` with the non-tracking snapshot `:26-33`; `HandleAsync` `:45-58`, scope + `:49-51`, the discarded transaction `Result` `:55-57` with its comment `:53-54`; `RestoreAsync` `:64-160`: + tracked load `:70-75`, marker check `:84-88`, inventory read `asTracking: false` `:98` (comment `:96-97`) + and `ignoreQueryFilters: true` `:103` (comment `:99-102`), `ToDictionary` `:106`, static `RestoreInventory` + call `:108`, invariant-rejection return `:109-115`, unmatched warning `:117-123`, mark-anyway comment + `:125-129`, `MarkInventoryRestored` `:130` with refused-mark return `:131-135`, marker-first comment + `:137-138`, marker save `:139`, increments `:141-146`, `IncrementAsync` `:150` with failure return + `:151-155`; `Warning` messages `:171`, `:174`, `:177`. Nothing else in Store source reads + `InventoryRestored` besides this handler and `Order` (Grep over `MMCA.Store/Source`, migrations aside).* +- *`InventoryRestorationDomainService` (`MMCA.Store.Sales.Domain/Inventory/InventoryRestorationDomainService.cs`, + re-read): "pure domain service" `:8`, `static class` `:10`, `RestoreInventory` `:24-51` returning + `Result>`, unmatched branch `:33-38`, `IncreaseInventory` + `:41`, invariant errors collected `:42-45`, failure or unmatched list returned `:48-50`.* +- *`OrderPaymentFailedSagaHandler` (`.../Orders/Saga/OrderPaymentFailedSagaHandler.cs`): anchors `:22-24`, + `:31-32`, `:34-36`, `:38-45`, `:47`, `:67-93`, `:86-90` carried from the audit as confirmed. The class + documentation is cited as `:11-20` and narrowed to what it states (a transport outage retries the queued + message rather than losing it); the earlier "whole local batch" clause was an inference not in the doc + and is removed.* +- *`PaymentReconciliationService` + (`MMCA.Store.Sales.Infrastructure/Payments/Reconciliation/PaymentReconciliationService.cs`, re-read + `:16-400`): class documentation, two classes `:18-41`, why `Cancelled` `:42-50`, backstop `:51-61`; + declaration `:69-75` (base type `:75`); `Interval` `:82`; `IsEnabled` `:90-108` (toggle `:94-98`, Stripe + key `:100-104`); `ExecuteCycleAsync` `:111-112`; `ReconcileOnceAsync` `:120` (cutoff `:123`, rationale + `:125-128`, expiry `:129`, Stripe `:130`); `ReconcileStripeSessionsAsync` `:141-178` (rationale `:146-151`, + predicate `:152-157`); `ExpireStrandedUnpaidOrdersAsync` `:194-224` (remarks `:185-189`, predicate + `:199-201`); `QueryStrandedOrderIdsAsync` `:230-246` (ordering, `Take`, projection `:240-243`); + `ExpireOrderAsync` `:252` with `MarkAsCancelled` `:274`; `ReconcileOrderAsync` `:298` (scope `:300`, + reload `:305-309`, re-check `:311-315`, save and catch `:330-340`, concurrency branch `:335-340`); + `TryApplyTransition` `:350-373`; `IsProvenPayment` `:380-400` (refused-proof `Warning` `:392-399`). + `OrderConfiguration.cs:74-76` carried from the audit.* +- *`PaymentReconciliationSettings.cs` anchors (`:12-22`, `:24-53`, `:30`, `:34`, `:48`, `:52`) carried from + the audit as confirmed; `MMCA.Store/Source/Services/MMCA.Store.Sales.Service/appsettings.json` + `PaymentReconciliation` `:97-102`, `UnpaidOrderExpiry` `:93` (re-read).* +- *Same guarded transitions on the primary paths (re-read): + `.../Orders/UseCases/ProcessPaymentWebhook/ProcessPaymentWebhookHandler.cs:109` (`MarkAsPaid`) and `:174` + (`MarkAsPaymentFailed`); `.../Orders/UseCases/VerifyPayment/VerifyPaymentHandler.cs:72` (`MarkAsPaid`).* +- *Framework pieces (paths rooted at `MMCA.Common/Source/Core/`, re-read unless noted): + `MMCA.Common.Application/DependencyInjection.ModuleScanning.cs` `ScanModuleApplicationServices(Assembly)` + `:46`, the singleton-handlers comment `:51`, `WithSingletonLifetime()` `:56`. + `MMCA.Common.Infrastructure/Persistence/DbContexts/Factory/DbContextFactory.cs`: `ExecuteInTransactionAsync` + `:544`, a failed `Result` rolls back `:608-614`, a throw rolls back and rethrows `:657-661`. `MMCA.Common.Infrastructure/Persistence/Interceptors/DomainEventSaveChangesInterceptor.cs` - (`FlushStateAsync` `:332` dispatches the save's local events `:336-337` and only then calls - `OutboxFinalizer.MarkProcessedAsync` `:341`; the catch that logs and signals `:346-354`); `OutboxProcessor` - re-dispatches pure domain events in `DispatchMessagesAsync` - (`MMCA.Common.Infrastructure/Persistence/Outbox/Processing/OutboxProcessor.cs:585`, called from the cycle - at `:322`, with the `dispatcher.DispatchAsync([domainEvent], cancellationToken)` call `:639`); - `RowVersion` on - `MMCA.Common.Domain/Entities/AuditableBaseEntity.cs:53`, configured on every non-owned auditable type by - `ConfigureConcurrencyTokens` - (`MMCA.Common.Infrastructure/Persistence/DbContexts/ApplicationDbContext.cs:582-602`, the non-owned - auditable filter `:587-588`, called from `OnModelCreating` `:415`); - `PeriodicBackgroundService` `MMCA.Common.Infrastructure/Scheduling/PeriodicBackgroundService.cs:20-94` - (`Interval` `:25`, `StartupDelay` 15s `:31`, `IsEnabled` `:38`, abstract `ExecuteCycleAsync` `:42`, - `ExecuteAsync` `:45-87` with the enablement gate `:47-51`, per-cycle catch `:64-76` and `TimeProvider` - waits `:55,80`), whose only subclasses are the production sweep above and the test double at - `MMCA.Common/Tests/Core/MMCA.Common.Infrastructure.Tests/Scheduling/PeriodicBackgroundServiceTests.cs:104`.* -- *Tests: `MMCA.Store/Tests/Modules/Sales/MMCA.Store.Sales.Application.Tests/Orders/Saga/OrderCancelledSagaHandlerTests.cs` - seven cases at `:21,44,65,81,102,122,149` (the redelivery case `:44` asserts stock is not restored twice; - `:122` asserts the inventory lookup ignores the soft-delete filter; `:149` asserts the handler warns and - still marks the order restored when a variant has no inventory record); + `FlushStateAsync` `:332`, dispatch `:336-337`, `OutboxFinalizer.MarkProcessedAsync` `:341`, catch that logs + and signals `:346-354`. `MMCA.Common.Infrastructure/Persistence/Outbox/Processing/OutboxProcessor.cs` + `DispatchMessagesAsync` `:490`, called `:228`, `dispatcher.DispatchAsync([domainEvent], ...)` `:549`. + `MMCA.Common.Infrastructure/Hosting/Background/PeriodicBackgroundService.cs`: class `:20`, `Interval` + `:25`, `StartupDelay` 15s `:31`, `IsEnabled` `:38`, `LogCycleFailure` `:45-46`, `ExecuteCycleAsync` `:50`, + `ExecuteAsync` `:53-95` (gate `:55-59`, delay `:63`, per-cycle catch `:81-84`, interval wait `:88`). + Carried from the audit as confirmed: `MMCA.Common.Application/Services/DomainEventDispatcher.cs:76-85`; + `MMCA.Common.Application/DomainEvents/SafeDomainEventHandler.cs:32` (`:13-20`, `:21-29`, `:42`, `:42-46`, + `:61-70`) and its tests + (`MMCA.Common/Tests/Core/MMCA.Common.Application.Tests/DomainEvents/SafeDomainEventHandlerTests.cs:33,51,73`, + test double `:124`); `MMCA.Common.Domain/Entities/AuditableBaseEntity.cs:53`; + `MMCA.Common.Infrastructure/Persistence/DbContexts/ApplicationDbContext.cs` `ConfigureConcurrencyTokens` + `:588-608` (non-owned filter `:593-594`, called `:420`); + `MMCA.Common/Tests/Core/MMCA.Common.Infrastructure.Tests/Scheduling/PeriodicBackgroundServiceTests.cs:104`. + Common's four production `PeriodicBackgroundService` subclasses are cited through `ADR-054:190-196`; their + own declaration lines were not re-read this run.* +- *Tests (re-read): `MMCA.Store/Tests/Modules/Sales/MMCA.Store.Sales.Application.Tests/Orders/Saga/OrderCancelledSagaHandlerTests.cs` + thirteen `[Fact]` methods at `:22,45,66,82,103,123,150,178,198,217,235,264,284`; `MMCA.Store/Tests/Modules/Sales/MMCA.Store.Sales.Infrastructure.Tests/Services/PaymentReconciliationServiceTests.cs` - thirteen cases at `:31,47,62,77,93,105,122,149,167,186,202,219,237`, the last six covering the expiry pass - (`:149` expires a stale `PendingPayment` order into `Cancelled`, `:167` asserts it never calls Stripe, - `:186` the stale `PaymentFailed` order, `:202` and `:219` the orders left alone, `:237` the customer - winning the race). Ingress: - `MMCA.Store/Tests/Modules/Sales/MMCA.Store.Sales.API.Tests/Controllers/PaymentsControllerTests.cs` five - methods at `:34,43,59,68,83` (`:59` is a `[Theory]` over both shape-rejection codes, `:83` pins the - request-size bound); - `MMCA.Store/Tests/Modules/Sales/MMCA.Store.Sales.Infrastructure.Tests/Services/StripeWebhookRegistrationServiceTests.cs` - five `IsStaleAutoRegistered` cases at `:181,189,203,213,226` (`:213` is the operator-created endpoint - that is never stale).* -- *`maxReplicas: 2` for the Sales container app: `MMCA.Store/infra/main.bicep:1810` (`salesApp` declared - `:1683`).* + fifteen at `:36,52,68,83,98,114,126,147,167,194,212,231,247,264,282` (Stripe pass `:36` to `:167`, expiry + pass `:194` to `:282`). Carried from the audit as confirmed: + `MMCA.Store/Tests/Modules/Sales/MMCA.Store.Sales.API.Tests/Controllers/PaymentsControllerTests.cs:34,43,59,68,83` + and `MMCA.Store/Tests/Modules/Sales/MMCA.Store.Sales.Infrastructure.Tests/Services/StripeWebhookRegistrationServiceTests.cs:181,189,203,213,226`.* +- *`maxReplicas: 2` for the Sales container app: `MMCA.Store/infra/main.bicep:1850` (`salesApp` declared + `:1720`), re-read.* - *Rubric: §6 CQRS and Event-Driven Design (`Website/docs-src/governance/ArchitectureEvaluationCriteria.md:229`) with idempotent consumers (`:238`) and ADR-documented eventual-consistency boundaries (`:239`), red flag on non-idempotent consumers (`:245`); §29 Resilience, Reliability and Business Continuity (`:775`), failure isolation (`:780`), graceful degradation (`:781`), red flag on "retries without backoff/idempotency" (`:791`), default weight 3 (`:795`). Group G04 Domain and Integration Events + Outbox Dual-Dispatch - (`Website/docs-src/onboarding/00-group-taxonomy.md:59`). Framework v1.205.0 (`MMCA.Common/FACTS.md:14`, - dated 2026-09-17 at `:4`) / 19 packages (`FACTS.md:19`) / 125 ADRs, range 001-125 (last index row ADR-125 - at `Website/docs-src/adr/README.md:137`; ADR-054's row `:66`, ADR-084's row `:96`, ADR-086's row `:98`) - this run; not recounted here.* + (`Website/docs-src/onboarding/00-group-taxonomy.md:59`). Framework v1.221.0 (`MMCA.Common/FACTS.md:14`, + dated 2026-10-02 at `:4`) / 22 packages (`FACTS.md:19`) / 131 ADRs, range 001-131 + (`Website/docs-src/adr/README.md:6`, last index row ADR-131 at `:144`; ADR-054's row `:67`, ADR-084's row + `:97`, ADR-086's row `:99`), taken from the shared brief and the audit; not recounted here.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/security-headers-csp-blazor.md b/docs-src/articles/security-headers-csp-blazor.md index f169aff8..a64e2dd7 100644 --- a/docs-src/articles/security-headers-csp-blazor.md +++ b/docs-src/articles/security-headers-csp-blazor.md @@ -5,6 +5,7 @@ > `Website/docs-src/adr/082-two-tier-cors-posture.md`, > `MMCA.Common/Source/Hosting/MMCA.Common.Aspire/Security/SecurityHeaders.cs`, > `MMCA.Common/Source/Presentation/MMCA.Common.UI.Web/Security/BlazorCspPolicyProvider.cs`, +> `MMCA.Common/Source/Presentation/MMCA.Common.UI.Web/SameOriginProxy/SameOriginApiProxyServiceExtensions.cs`, > `Website/docs-src/onboarding/group-16-aspire-orchestration.md`, and the Gateway + UI host > `Program.cs` files in ADC and Store. No em dashes. @@ -75,7 +76,7 @@ case-insensitively by `IsCredentialPath` (`:174-177`). On a hit the response ans no-referrer` instead of the site-wide value (`:187-189`) and adds `Cache-Control: no-store, no-cache, must-revalidate, max-age=0` with `Pragma: no-cache` (`:192-196`), so a reset token or an OAuth authorization code sitting in the URL never travels onward in a `Referer` header and the rendered page never lingers in a -browser or proxy cache (ADR-023:114-125). +browser or proxy cache (ADR-023:121-132). The interesting part is the CSP. Instead of stamping a string, the middleware asks an `ICspPolicyProvider` (`SecurityHeaders.cs:84`) for a `CspPolicy(string Value, bool Enforce)` (`:76`). When `Enforce` is true it @@ -138,36 +139,42 @@ The default provider is `StaticCspPolicyProvider` (`SecurityHeaders.cs:91`), reg frame-ancestors 'none'`. Nothing is left out, including the two directives that blank a Blazor page when they are wrong: the XML doc on the setting calls it a complete hardened baseline that ships `script-src` and `style-src` at exactly the strength Blazor (`'wasm-unsafe-eval'`) and MudBlazor (`'unsafe-inline'` styles) -require (`:51-64`). An HTML host that never registers a fuller provider gets a functional policy instead of +require (`:51-64`). An HTML host that never registers its own provider gets a functional policy instead of one silently missing both directives, and the JSON, WebSocket, and static-page responses an API or gateway serves are unaffected either way (ADR-023:46-53). ## The Blazor policy, built at runtime -An HTML host opts into the origin-pinned policy by registering its own provider before calling -`AddCommonSecurityHeaders`. Both apps register one shared `BlazorCspPolicyProvider` +An HTML host opts into the origin-pinned policy by registering its own provider. Both apps register one +shared `BlazorCspPolicyProvider` (`MMCA.Common.UI.Web/Security/BlazorCspPolicyProvider.cs:28`) via `AddCommonBlazorCsp()` (`MMCA.Common.UI.Web/DependencyInjection.cs:52`), which does three things: binds `BlazorCspSettings` from the `"BlazorCsp"` configuration section with `ValidateOnStart()` (`:54-56`), registers `BlazorCspSettingsValidator` through `TryAddEnumerable` so calling it twice validates once (`:59-60`), and -registers `AddSingleton` (`:62`). Because the static default is -registered with `TryAdd`, the first-registered provider wins, so the call order is load-bearing: -`AddCommonBlazorCsp()` must run before `AddCommonSecurityHeaders(...)`. +registers `AddSingleton` (`:62`). Only the static default uses +`TryAddSingleton` (`SecurityHeaders.cs:263`), so a provider registered first suppresses it, and because a +single-service resolve returns the last registration, a plain `AddSingleton` provider registered afterwards +still wins. Calling `AddCommonBlazorCsp()` before `AddCommonSecurityHeaders(...)` is the documented +convention (`SecurityHeaders.cs:243-244`, `DependencyInjection.cs:41-43`; ADR-023:98-106), not the thing +that makes the Blazor provider win. The provider builds the full policy once, at construction (`BlazorCspPolicyProvider.cs:33-42`), and returns the cached result for every request (`:45`). `BuildPolicy` (`:103-113`) assembles what a Blazor + MudBlazor page actually needs: `default-src 'self'`, `script-src 'self' 'wasm-unsafe-eval'` (the WASM runtime), `style-src 'self' 'unsafe-inline'` (MudBlazor), `img-src 'self' data: https:` (profile pictures and CDN images are low XSS-risk, so images stay open while the directives that matter for exfiltration stay locked), -`font-src 'self'`, plus `base-uri`, `form-action`, and `frame-ancestors 'none'`. +`font-src 'self'`, plus `base-uri`, `form-action`, and `frame-ancestors 'none'`. The list carries no +`object-src`, so objects fall back to `default-src 'self'` rather than the static baseline's explicit +`object-src 'none'` (ADR-023:181-184): on that one directive the Blazor policy is looser than the default it +replaces. One directive in that list is opt-in. `BuildFrameSrc` (`:85-97`) emits `frame-src 'self' ` only when `BlazorCspSettings.FrameSources` lists at least one origin, canonicalized and de-duplicated before the splice (`:92-96`, spliced into the policy at `:110`); with the default empty list there is no `frame-src` at all and -frames fall back to `default-src 'self'` (`:82`). Entries are validated at boot rather than trusted, so a -wildcard or a stray semicolon fails startup with a message naming it instead of landing verbatim in a security -response header (ADR-023:185-197). ADC's Blazor host configures it for the embedded Google Maps venue maps on -its public event page (`MMCA.ADC.UI.Web/appsettings.json:47-52`). `frame-ancestors 'none'` is never relaxed by +frames fall back to `default-src 'self'` (class doc `:21-23`; `:82`). Entries are validated at boot rather +than trusted, so a wildcard or a stray semicolon fails startup with a message naming it instead of landing +verbatim in a security response header (ADR-023:192-204). ADC's Blazor host configures it for the embedded +Google Maps venue maps on its public event page (`MMCA.ADC.UI.Web/appsettings.json:53-63`). `frame-ancestors 'none'` is never relaxed by that path (`:21-24`). The hard directive is `connect-src`, because it is per-deployment. `BuildCsp` (`:49`) reads the API origin @@ -178,7 +185,7 @@ hub, `:66-68`), enforced (`:79`). Development loosens two directives, not one: ` because Visual Studio's Browser Link and Hot Reload inject an inline bootstrap script as well as opening a WebSocket on a port that changes every run (`:70-73`). Only the first of those is localhost-scoped, and neither reaches a non-Development host, because the flag is `IWebHostEnvironment.IsDevelopment()` read once at -construction (`:41`; ADR-023:178-184). +construction (`:41`; ADR-023:185-191). The detail worth stealing is the failure path. If the origin cannot be parsed, or on Linux parses as a `file://` URI instead of http(s), the provider does not guess and it does not stop enforcing. It narrows @@ -186,9 +193,19 @@ The detail worth stealing is the failure path. If the origin cannot be parsed, o was, and returns it with `Enforce: true` (`:62`). The policy fails closed. A deployment whose `ApiSettings` endpoint is wrong still serves its pages, and every cross-origin API call and the SignalR hub are blocked loudly in the browser console, because the alternative is a permissive Report-Only header that protects -nothing and that nobody notices (`:16-20`, `:60-61`; ADR-023:85-88). A security response header that quietly +nothing and that nobody notices (`:16-20`, `:60-61`; ADR-023:86-89). A security response header that quietly stops being enforced is the worse failure mode. +Both apps also opt into the same-origin API proxy (ADR-131): `AddCommonSameOriginApiProxy` (ADC UI +`Program.cs:156`, Store UI `Program.cs:153`) paired with `MapCommonSameOriginApiProxy` (`:268`, `:262`). +With it, `/client-config` switches the WebAssembly client's API client and notification hub to the proxy on +the UI host's own origin (`MMCA.Common.UI.Web/SameOriginProxy/SameOriginApiProxyServiceExtensions.cs:13-16`, +`:24-25`), so the browser's API and hub traffic is same-origin and admitted by the `'self'` entry that leads +every `connect-src` the provider builds (`BlazorCspPolicyProvider.cs:62`, `:68`). The provider does not read +the proxy settings: it pins the configured gateway origin either way (`:51`, `:66-68`). In a proxied host the +fail-closed narrowing therefore leaves the proxied API and hub calls working, because `'self'` still covers +them. + `font-src 'self'` (`:108`) reads like the boring entry in that list, and it is the one that carries a real web font. The shared MudBlazor theme names Inter first in its font stack, and the reflex way to supply it is a Google Fonts link tag, with the reflex follow-on of widening `font-src` to that CDN's origin plus a @@ -217,18 +234,19 @@ edges. The Gateway hosts call `AddCommonSecurityHeaders(builder.Configuration)` with the strict static baseline, exactly right for a YARP proxy serving JSON, WebSockets, and a static privacy page (ADC Gateway `Program.cs:118,168`; Store Gateway `Program.cs:71,159`). The Blazor UI hosts register `AddCommonBlazorCsp()` first, then the same plain `AddCommonSecurityHeaders(builder.Configuration)` with no -configure delegate, then `UseCommonSecurityHeaders()` (ADC UI `Program.cs:162,163,192`; Store UI -`Program.cs:191,192,215`). Each UI origin emits its own HSTS on purpose, because an HSTS pin is per-origin and +configure delegate, then `UseCommonSecurityHeaders()` (ADC UI `Program.cs:189,190,210`; Store UI +`Program.cs:185,186,204`). Each UI origin emits its own HSTS on purpose, because an HSTS pin is per-origin and the Gateway's header says nothing about the sibling hostname a user actually types (ADC UI -`Program.cs:156-161`; Store UI `Program.cs:184-190`). The built-in `app.UseHsts()` stays uncalled on both, +`Program.cs:183-188`; Store UI `Program.cs:178-184`). The built-in `app.UseHsts()` stays uncalled on both, since it would run later in the pipeline and overwrite the shared one-year value with its own weaker default -(ADC UI `Program.cs:188-191`). +(ADC UI `Program.cs:206-209`; Store UI `Program.cs:215-219`). The cross-origin posture at that same edge is a separate decision with its own record: two policies, an allow-listed one for service hosts and a deliberately broader one for gateways (ADR-082, `Website/docs-src/adr/082-two-tier-cors-posture.md:28-34`), which names ADR-023 as its edge sibling (`:19-25`). -The middleware carries a unit test, `SecurityHeadersMiddlewareTests` in `MMCA.Common.Aspire.Tests`, and each -app's Gateway has its own `SecurityHeadersTests` asserting the headers are present. +The middleware carries a unit test, `SecurityHeadersMiddlewareTests` in `MMCA.Common.Aspire.Tests`, and all +four edges carry their own `SecurityHeadersTests`: each app's Gateway, and each app's UI host, where a +Production-pinned host factory is what lets the test see the per-origin HSTS described above (ADR-023:146-163). ## Trade-offs, honestly @@ -236,19 +254,21 @@ app's Gateway has its own `SecurityHeadersTests` asserting the headers are prese that carries `style-src 'unsafe-inline'` (`SecurityHeaders.cs:65-67`), so inline styles are not blocked out of the box, and an API or gateway host that serves no HTML inherits a script and style allowance it does not need. Tightening past that is an explicit act: configure the `"SecurityHeaders"` section, register your own - provider, or move to the `{nonce}` placeholder (ADR-023:91-96). -- **Registration order is a foot-gun.** Because the provider uses `TryAddSingleton` (`SecurityHeaders.cs:263`), - a host that calls `AddCommonSecurityHeaders` before registering its custom `ICspPolicyProvider` silently - keeps the static default. The order is correct in both apps, but nothing forces it. + provider, or move to the `{nonce}` placeholder (ADR-023:92-97). +- **Registration order matters only for `TryAdd`.** The static default uses `TryAddSingleton` + (`SecurityHeaders.cs:263`) and `AddCommonBlazorCsp` uses plain `AddSingleton` (`DependencyInjection.cs:62`), + so the Blazor provider wins in either order. The trap is narrower: a custom provider added after + `AddCommonSecurityHeaders` with `TryAdd` silently keeps the static default (ADR-023:98-106). Both apps + register in the documented order, but nothing forces it. - **Failing closed moves the pain onto a running app.** A Blazor host whose `ApiSettings` endpoint is wrong - still serves pages, but the enforced `connect-src 'self'` blocks every cross-origin API call and the SignalR - notification hub (`BlazorCspPolicyProvider.cs:62`). That loud signal is the point, and the cost is that the - configuration mistake lands on the users of that deployment rather than in a passive report - (ADR-023:105-109). + still serves pages, but the enforced `connect-src 'self'` blocks every cross-origin API call and SignalR + connection a client makes to the gateway directly (`BlazorCspPolicyProvider.cs:62`). That loud signal is the + point, and the cost is that the configuration mistake lands on the users of that deployment rather than in + a passive report (ADR-023:112-116). - **One shared Blazor provider constrains divergence.** `BlazorCspPolicyProvider` lives once in `MMCA.Common.UI.Web` over the shared `ApiSettings`, so a host that needs genuinely different CSP logic cannot tweak an app-local copy. It has to supply its own `ICspPolicyProvider` instead, registered before - `AddCommonSecurityHeaders`. + `AddCommonSecurityHeaders` by convention. None of these argue against centralizing the headers. They argue for keeping the extension point visible and for treating the CSP as the one header you test in every host that renders HTML. @@ -303,12 +323,14 @@ pattern, or `dotnet add package MMCA.Common.Aspire` and try the middleware.* - *`SecurityHeadersSettings` (`SecurityHeaders.cs:19`): `SectionName = "SecurityHeaders"` (`:22`), `FrameOptions = "DENY"` (`:25`), `ReferrerPolicy = "strict-origin-when-cross-origin"` (`:28`), `PermissionsPolicy = "geolocation=(), microphone=(), camera=(), payment=()"` (`:31`), `EnableHsts = true` (`:34`), `CredentialPathPrefixes = ["/reset-password", "/auth/oauth-complete"]` (`:46`), `HstsValue = "max-age=31536000; includeSubDomains"` (`:49`), `ContentSecurityPolicy` default `default-src 'self'; script-src 'self' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'` (`:65-67`, documented as a complete hardened baseline, with the `{nonce}` path off `'unsafe-inline'`, at `:51-64`), `EnforceContentSecurityPolicy = true` (`:70`).* - *`CspPolicy(string Value, bool Enforce)` record (`SecurityHeaders.cs:76`); `ICspPolicyProvider` (`:84`) with `GetPolicy(HttpContext)` (`:87`); `StaticCspPolicyProvider` internal sealed (`:91`), computes policy once in ctor (`:95-102`), returns cached (`:104`).* - *`SecurityHeadersExtensions` static (`SecurityHeaders.cs:236`): `AddCommonSecurityHeaders(configuration?, configure?)` (`:246`) binds the `"SecurityHeaders"` section (`:255`), applies `configure` (`:260`), `TryAddSingleton` (`:263`); `UseCommonSecurityHeaders()` (`:271`) to `UseMiddleware()` (`:274`).* -- *`BlazorCspPolicyProvider` internal sealed (`MMCA.Common/Source/Presentation/MMCA.Common.UI.Web/Security/BlazorCspPolicyProvider.cs:28`): builds the policy once in ctor (`:33-42`, `IsDevelopment()` read there at `:41`), `GetPolicy` returns cached (`:45`); `BuildCsp` (`:49`) reads `WasmApiEndpoint ?? ApiEndpoint` (`:51`); an unparseable or non-http(s) endpoint FAILS CLOSED, returning `BuildPolicy("connect-src 'self'", ...)` with `Enforce: true` (`:55-63`, rationale `:60-61` and class doc `:16-20`); otherwise it pins `connect-src 'self' {origin} {wss|ws}://{authority}` (`:66-68`) with the Development localhost loosening (`:74-77`) and `Enforce: true` (`:79`); `BuildFrameSrc` (`:85-97`) emits `frame-src 'self' ` only when `BlazorCspSettings.FrameSources` is non-empty (canonicalized and de-duplicated `:92-96`, absent by default `:82`); `BuildPolicy` (`:103-113`): `default-src 'self'` (`:104`), `script-src 'self' 'wasm-unsafe-eval'` plus `'unsafe-inline'` in Development (`:105`), `style-src 'self' 'unsafe-inline'` (`:106`), `img-src 'self' data: https:` (`:107`), `font-src 'self'` (`:108`), `connect-src` (`:109`), optional `frame-src` (`:110`), `base-uri 'self'`, `form-action 'self'`, `frame-ancestors 'none'` (`:111-113`).* -- *`AddCommonBlazorCsp()` (`MMCA.Common/Source/Presentation/MMCA.Common.UI.Web/DependencyInjection.cs:52`): binds `BlazorCspSettings` from `"BlazorCsp"` with `ValidateOnStart()` (`:54-56`), `TryAddEnumerable` for `BlazorCspSettingsValidator` (`:59-60`), then `AddSingleton` (`:62`). ADC's UI configures `BlazorCsp:FrameSources` for the embedded Google Maps (`MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web/appsettings.json:47-52`).* -- *Host adoption: ADC UI `AddCommonBlazorCsp` (`MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web/Program.cs:162`), plain `AddCommonSecurityHeaders(builder.Configuration)` with no configure delegate (`:163`), `UseCommonSecurityHeaders` (`:192`), HSTS-at-the-UI-origin rationale (`:156-161`) and the "do not call app.UseHsts()" note (`:188-191`); Store UI (`MMCA.Store/Source/Hosts/UI/MMCA.Store.UI.Web/Program.cs:191,192,215`, rationale `:184-190`); ADC Gateway `AddCommonSecurityHeaders` (`MMCA.ADC/Source/Hosts/MMCA.ADC.Gateway/Program.cs:118`), `UseCommonSecurityHeaders` (`:168`); Store Gateway (`MMCA.Store/Source/Hosts/MMCA.Store.Gateway/Program.cs:71,159`).* -- *ADR-023 (`Website/docs-src/adr/023-security-response-headers.md`): complete hardened baseline (`:46-53`), nonce substitution (`:42-45`), fail-closed rationale (`:85-88`) and its trade-off (`:105-109`), baseline-not-maximal trade-off (`:91-96`), credential-path revision (`:111-125`), Development loosening two directives (`:178-184`), opt-in validated `frame-src` (`:185-197`). ADR-082 (`Website/docs-src/adr/082-two-tier-cors-posture.md`): two cross-origin policies (`:28-34`), ADR-023 named as its edge sibling (`:19-25`).* +- *`BlazorCspPolicyProvider` internal sealed (`MMCA.Common/Source/Presentation/MMCA.Common.UI.Web/Security/BlazorCspPolicyProvider.cs:28`): builds the policy once in ctor (`:33-42`, `IsDevelopment()` read there at `:41`), `GetPolicy` returns cached (`:45`); `BuildCsp` (`:49`) reads `WasmApiEndpoint ?? ApiEndpoint` (`:51`); an unparseable or non-http(s) endpoint FAILS CLOSED, returning `BuildPolicy("connect-src 'self'", ...)` with `Enforce: true` (`:55-63`, rationale `:60-61` and class doc `:16-20`); otherwise it pins `connect-src 'self' {origin} {wss|ws}://{authority}` (`:66-68`) with the Development localhost loosening (`:74-77`) and `Enforce: true` (`:79`); `BuildFrameSrc` (`:85-97`) emits `frame-src 'self' ` only when `BlazorCspSettings.FrameSources` is non-empty (canonicalized and de-duplicated `:92-96`, absent by default `:82`, fallback to `default-src 'self'` stated in the class doc `:21-23`); `BuildPolicy` (`:103-113`): `default-src 'self'` (`:104`), `script-src 'self' 'wasm-unsafe-eval'` plus `'unsafe-inline'` in Development (`:105`), `style-src 'self' 'unsafe-inline'` (`:106`), `img-src 'self' data: https:` (`:107`), `font-src 'self'` (`:108`), `connect-src` (`:109`), optional `frame-src` (`:110`), `base-uri 'self'`, `form-action 'self'`, `frame-ancestors 'none'` (`:111-113`).* +- *`AddCommonBlazorCsp()` (`MMCA.Common/Source/Presentation/MMCA.Common.UI.Web/DependencyInjection.cs:52`): binds `BlazorCspSettings` from `"BlazorCsp"` with `ValidateOnStart()` (`:54-56`), `TryAddEnumerable` for `BlazorCspSettingsValidator` (`:59-60`), then plain `AddSingleton` (`:62`), with the register-first convention in its XML doc (`:41-43`, matching `SecurityHeaders.cs:243-244`). ADC's UI configures `BlazorCsp:FrameSources` for the embedded Google Maps (`MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web/appsettings.json:53-63`, comment `:53-56`; `:47-52` is the `SameOriginApiProxy` block).* +- *Same-origin API proxy (ADR-131, `Website/docs-src/adr/131-same-origin-api-proxy.md`): `AddCommonSameOriginApiProxy` doc (`MMCA.Common/Source/Presentation/MMCA.Common.UI.Web/SameOriginProxy/SameOriginApiProxyServiceExtensions.cs:13-16`) and the `/client-config` switch of the WASM `"APIClient"` and notification hub to the proxy (`:24-25`); ADC UI `AddCommonSameOriginApiProxy` (`Program.cs:156`) and `MapCommonSameOriginApiProxy` (`:268`), Store UI (`Program.cs:153`, `:262`). No file under `SameOriginProxy/` references `connect-src` or the CSP (Grep this run), and `BlazorCspPolicyProvider` reads only `ApiSettings` and `BlazorCspSettings` (`:33-41`, `:51`), so the CSP is unchanged by the proxy; the same-origin coverage is the `'self'` that leads `connect-src` (`:62`, `:68`).* +- *Host adoption: ADC UI `AddCommonBlazorCsp` (`MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web/Program.cs:189`), plain `AddCommonSecurityHeaders(builder.Configuration)` with no configure delegate (`:190`), `UseCommonSecurityHeaders` (`:210`), HSTS-at-the-UI-origin rationale (`:183-188`) and the "do not call app.UseHsts()" note (`:206-209`); Store UI (`MMCA.Store/Source/Hosts/UI/MMCA.Store.UI.Web/Program.cs:185,186,204`, rationale `:178-184`, no-`UseHsts` note `:215-219`); ADC Gateway `AddCommonSecurityHeaders` (`MMCA.ADC/Source/Hosts/MMCA.ADC.Gateway/Program.cs:118`), `UseCommonSecurityHeaders` (`:168`); Store Gateway (`MMCA.Store/Source/Hosts/MMCA.Store.Gateway/Program.cs:71,159`).* +- *ADR-023 (`Website/docs-src/adr/023-security-response-headers.md`): complete hardened baseline (`:46-53`), nonce substitution (`:42-45`), fail-closed rationale (`:86-89`) and its trade-off (`:112-116`), baseline-not-maximal trade-off (`:92-97`), registration order matters only for `TryAdd` (`:98-106`, corrected in the 2026-10-01 revision `:215-227`), credential-path revision (section `:118`, item `:121-132`), UI-host `SecurityHeadersTests` (`:146-163`), Blazor policy has no `object-src` (`:181-184`), Development loosening two directives (`:185-191`), opt-in validated `frame-src` (`:192-204`). ADR-082 (`Website/docs-src/adr/082-two-tier-cors-posture.md`): two cross-origin policies (`:28-34`), ADR-023 named as its edge sibling (`:19-25`).* - *The code block is condensed from `SecurityHeaders.cs:180-228` (comments added, header names, defaults and branch order faithful to source, not byte-for-byte).* -- *`SecurityHeadersMiddlewareTests` in `MMCA.Common.Aspire.Tests` and per-app Gateway `SecurityHeadersTests` (ADC/Store) confirmed to exist by file listing this run (`MMCA.Common/Tests/Hosting/MMCA.Common.Aspire.Tests/Security/SecurityHeadersMiddlewareTests.cs`, `MMCA.ADC/Tests/Hosts/MMCA.ADC.Gateway.Tests/SecurityHeadersTests.cs`, `MMCA.Store/Tests/Hosts/MMCA.Store.Gateway.Tests/SecurityHeadersTests.cs`); not opened line-by-line. Anchor facts (125 accepted ADRs, 001-125, per `Website/docs-src/adr/README.md:6`; framework v1.205.0 as of 2026-09-17 per `MMCA.Common/FACTS.md:4,14`; 19 published packages per `MMCA.Common/FACTS.md:19`; the 34-category rubric per `Website/docs-src/governance/common-ArchitectureScorecard.md:5`) are cited, not recounted here.* -- *2026-09-19 audit pass (re-read this run): the premise of two passages had inverted in source, and both are rewritten rather than re-anchored. (1) The static baseline no longer omits `script-src`/`style-src`: it ships both (`SecurityHeaders.cs:65-67`, doc `:51-64`; ADR-023 revised 2026-09-01, `:4-9`), so the former "deliberately incomplete" passage and its trade-off bullet became the complete-not-maximal default. (2) `BlazorCspPolicyProvider` no longer degrades to a permissive `Enforce: false` Report-Only policy on an unresolvable origin: it narrows `connect-src` to `'self'` and stays enforced (`:62`, class doc `:16-20`; ADR-023:85-88, :105-109), so the failure-path section, the "degraded policy protects nothing" bullet, Apply item 4, the closing takeaway and the abstract were rewritten to fail closed. Newly covered because they are material and were absent: the `{nonce}` substitution and `CspNonce` (`SecurityHeaders.cs:122-137`, `:210-215`), the credential-path `no-referrer` plus `no-store` branch (`:46`, `:174-177`, `:187-196`), the opt-in validated `frame-src` (`BlazorCspPolicyProvider.cs:85-97`), and the Development `script-src 'unsafe-inline'` loosening (`:105`). Host adoption re-pinned after both UI hosts dropped `EnableHsts = false` and emit HSTS at their own origin (ADC UI `:156-163`, `:192`; Store UI `:184-192`, `:215`); Gateway anchors moved to ADC `:118,:168` and Store `:71,:159`. Every `SecurityHeaders.cs` and `BlazorCspPolicyProvider.cs` anchor in this file moved with the source and was re-read at the lines cited above. Framework anchor v1.155.0 to v1.205.0, packages 15 to 19, ADR corpus 001-089 to 001-125.* +- *`SecurityHeadersMiddlewareTests` in `MMCA.Common.Aspire.Tests` (`MMCA.Common/Tests/Hosting/MMCA.Common.Aspire.Tests/Security/SecurityHeadersMiddlewareTests.cs`, listed in the 2026-09-19 pass, not re-listed this run) and four per-edge `SecurityHeadersTests` confirmed to exist by Glob this run (`MMCA.ADC/Tests/Hosts/MMCA.ADC.Gateway.Tests/SecurityHeadersTests.cs`, `MMCA.Store/Tests/Hosts/MMCA.Store.Gateway.Tests/SecurityHeadersTests.cs`, `MMCA.ADC/Tests/Hosts/MMCA.ADC.UI.Web.Tests/SecurityHeadersTests.cs`, `MMCA.Store/Tests/Hosts/MMCA.Store.UI.Web.Tests/SecurityHeadersTests.cs`); not opened line-by-line, the Production-pinned factory is per ADR-023:146-163. Anchor facts (131 accepted ADRs, 001-131, per `Website/docs-src/adr/README.md:6`; framework v1.221.0 as of 2026-10-02 per `MMCA.Common/FACTS.md:4,14`; 22 published packages per `MMCA.Common/FACTS.md:19`; the 34-category rubric per `Website/docs-src/governance/README.md:3`) are cited, not recounted here.* +- *2026-10-02 refresh (v1.221.0, re-read this run: `BlazorCspPolicyProvider.cs` in full, `DependencyInjection.cs:30-69`, `SecurityHeaders.cs:236-277` plus a line grep of every other `SecurityHeaders.cs` anchor above, ADR-023 by line grep and `:86-232`, both UI `Program.cs` and Gateway call lines, ADC `appsettings.json:44-64`, `SameOriginApiProxyServiceExtensions.cs:10-70`; `app.css` `@font-face` at `:9,17,25,33,41` and `BlazorCspSettingsValidator.cs:19` spot-checked). Fixed: the registration-order passage and trade-off bullet (the Blazor provider wins in either order because it uses plain `AddSingleton`; the static default is lost silently only to a late `TryAdd` provider; ADR-023 corrected this 2026-10-01), the `frame-src` fallback anchor (now the class doc `:21-23`), the Gateway-only test sentence (UI hosts also carry `SecurityHeadersTests`), and every moved anchor: ADC UI `:162,163,192` to `:189,190,210`, `:156-161` to `:183-188`, `:188-191` to `:206-209`; Store UI `:191,192,215` to `:185,186,204`, `:184-190` to `:178-184`, plus `:215-219`; ADC `appsettings.json:47-52` to `:53-63`; ADR-023 `:114-125` to `:121-132`, `:85-88` to `:86-89`, `:91-96` to `:92-97`, `:105-109` to `:112-116`, `:178-184` to `:185-191`, `:185-197` to `:192-204`. Added: the Blazor policy's missing `object-src` (ADR-023:181-184) and a paragraph on how the same-origin proxy relates to `connect-src` (ADR-131). Anchor facts v1.205.0 to v1.221.0, packages 19 to 22, ADRs 001-125 to 001-131; the rubric count is now cited to `governance/README.md:3`.* +- *2026-09-19 audit pass (history): the premise of two passages had inverted in source, and both are rewritten rather than re-anchored. (1) The static baseline no longer omits `script-src`/`style-src`: it ships both (`SecurityHeaders.cs:65-67`, doc `:51-64`; ADR-023 revised 2026-09-01, `:4-9`), so the former "deliberately incomplete" passage and its trade-off bullet became the complete-not-maximal default. (2) `BlazorCspPolicyProvider` no longer degrades to a permissive `Enforce: false` Report-Only policy on an unresolvable origin: it narrows `connect-src` to `'self'` and stays enforced (`:62`, class doc `:16-20`; ADR-023:85-88, :105-109), so the failure-path section, the "degraded policy protects nothing" bullet, Apply item 4, the closing takeaway and the abstract were rewritten to fail closed. Newly covered because they are material and were absent: the `{nonce}` substitution and `CspNonce` (`SecurityHeaders.cs:122-137`, `:210-215`), the credential-path `no-referrer` plus `no-store` branch (`:46`, `:174-177`, `:187-196`), the opt-in validated `frame-src` (`BlazorCspPolicyProvider.cs:85-97`), and the Development `script-src 'unsafe-inline'` loosening (`:105`). Host adoption re-pinned after both UI hosts dropped `EnableHsts = false` and emit HSTS at their own origin (ADC UI `:156-163`, `:192`; Store UI `:184-192`, `:215`); Gateway anchors moved to ADC `:118,:168` and Store `:71,:159`. Every `SecurityHeaders.cs` and `BlazorCspPolicyProvider.cs` anchor in this file moved with the source and was re-read at the lines cited above. Framework anchor v1.155.0 to v1.205.0, packages 15 to 19, ADR corpus 001-089 to 001-125.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/self-invalidating-cache.md b/docs-src/articles/self-invalidating-cache.md index e30e9794..6709218c 100644 --- a/docs-src/articles/self-invalidating-cache.md +++ b/docs-src/articles/self-invalidating-cache.md @@ -2,8 +2,8 @@ > Series: MMCA.Common · Article #19 (deep-dive) · Pillar P2 · Group G09 · Rubric §10,§12 · ADR-026, ADR-040, > ADR-073, ADR-077 · -> Status: grounded in `Website/docs-src/onboarding/group-09-caching.md`, `MMCA.Common/CLAUDE.md` (caching in the -> decorator pipeline section), `Website/docs-src/governance/common-ArchitectureScorecard.md` (§10, §12), +> Status: grounded in `Website/docs-src/onboarding/group-09-caching.md`, `MMCA.Common/AGENTS.md` (the CQRS +> Decorator Pipeline section), `Website/docs-src/governance/common-ArchitectureScorecard.md` (§10, §12), > `Website/docs-src/adr/026-caching-strategy.md`, > `Website/docs-src/adr/040-authenticated-output-caching-for-public-reads.md`, > `Website/docs-src/adr/073-multi-tenancy-model.md` (the cache-key slice only), and @@ -55,6 +55,8 @@ The whole subsystem is small and deliberate. The Application layer depends on on public interface ICacheService { Task GetAsync(string key, CancellationToken ct); + Task<(bool Found, T? Value)> TryGetAsync(string key, CancellationToken ct); // presence, not just value + Task GetFromSharedStoreAsync(string key, CancellationToken ct); // never a local copy Task SetAsync(string key, T value, TimeSpan? expiration = null, CancellationToken ct = default); Task RemoveAsync(string key, CancellationToken ct); Task RemoveByPrefixAsync(string prefix, CancellationToken ct); // the load-bearing one @@ -64,19 +66,27 @@ public interface ICacheService } ``` -Four cache operations, a counter primitive, and one composed read-through helper. `RemoveByPrefixAsync` is -the member that earns its keep. It is what lets a single write evict a whole *family* of cached reads +Four cache operations, two specialized reads, a counter primitive, and one composed read-through helper. +`RemoveByPrefixAsync` is the member that earns its keep. It is what lets a single write evict a whole *family* of cached reads (every paged and filtered view under one prefix) in one call, without enumerating individual keys. It is also why the backends had to be hand-built rather than pulled off the shelf: `IMemoryCache` has no key -enumeration, and `IDistributedCache` has no prefix delete. (`IncrementAsync` was the first late arrival, a -default interface member so no existing implementer broke, added as the single entry point for the +enumeration, and `IDistributedCache` has no prefix delete. Four of the eight are default interface +members, so a hand-written implementer keeps compiling when one is added. + +The two specialized reads each close a gap a plain `GetAsync` leaves open. `TryGetAsync` reports +presence separately from the value, because for a value type a miss and a cached `default` (`0`, +`false`, `Guid.Empty`) look identical; the shipped stores override it with a real presence check. +`GetFromSharedStoreAsync` reads the shared store and never a process-local copy, for single-use records +(an OAuth exchange code, a password-reset or email-confirmation token, the last accepted second-factor +time step) whose consumption on one replica must be visible on every other replica at once; the hybrid +backend below is the store that overrides it. (`IncrementAsync` is the single entry point for the brute-force and rate-limit counters of ADR-029 instead of a read-then-write pair at each call site. The distributed backend overrides it, but with the same read-modify-write shape rather than a Redis `INCR`, because the counter lives in the adapter's own JSON layout: the override buys one call site, not atomicity.) -`GetOrCreateAsync` is the second late arrival and the more interesting one, because of who does *not* use -it. It is also a default interface member: get, then take a per-key lock from a process-wide stripe, +`GetOrCreateAsync` is the most interesting of the default members, because of who does *not* use +it. It is get, then take a per-key lock from a process-wide stripe, double-check, run the factory, store the result. That is the read-through shape the query decorator below implements, offered to the callers that are not queries. The decorators still do not route through it, and the interface says so in its own remarks: `GetOrCreateAsync` caches whatever the factory returns, @@ -104,8 +114,8 @@ builds a `DistributedCacheService`. Otherwise it falls back to a `MemoryCacheSer Redis `IConnectionMultiplexer` is available, prefix eviction reaches past `IDistributedCache` to the raw connection and uses server-side `SCAN` to find and delete matching keys (that scan lives in a shared `RedisPrefixScanner`, because two backends need it). This is the cache with a Redis - backplane the architecture scorecard carries in its §10 row as former Cross-Cutting Concerns evidence, - retained for the record now that those facets are scored in §5, §6, §9, §12, §17 and §29, and whose + backplane the architecture scorecard carries in its §10 row as related cross-cutting evidence, + scored under §5, §6, §9, §12, §17 and §29, and whose substrate is recorded in ADR-026: a single-host monolith caches in-process for free, and the same code transparently uses a shared Redis once the distributed cache is present, so cached reads stay coherent when a module is scaled out or extracted into its own service. @@ -126,9 +136,11 @@ deliberately never selects it, so a host has to ask for it by name: writer gets its own. Be honest about what "opt-in" means in a deployed system: all seven ADC and Store services call -`AddCommonHybridCache()` inside the same Redis conditional that wires everything else, so the effective -Tier-1 substrate in production is the hybrid one, not the distributed adapter, and the memory-or-Redis -swap is what a host gets when it does *not* state a preference. The contract that makes that +`AddCommonHybridCacheWhenRedisConfigured(builder.Configuration)`, a framework helper that registers the +hybrid backend only when the Redis connection string is set (with no Redis L2 the hybrid tier would be a +plain in-memory cache, which the memory fallback already is). So whenever Redis is configured, the +effective Tier-1 substrate in production is the hybrid one, not the distributed adapter, and the +memory-or-Redis swap is what a host gets when it does *not* state a preference. The contract that makes that substitution a one-line change is the point. Nothing in any handler, decorator, or query changes. A short, conservative default TTL keeps the cache erring toward correctness over hit-rate: 30 seconds. @@ -258,8 +270,9 @@ out of that shape: The stampede stripe locks the same scoped key, so one tenant never waits on another tenant's lock. And the honest limit: this lives in the decorators, so code that resolves `ICacheService` directly gets no tenant -prefix at all. Today's direct consumers (login counters, OAuth state, idempotency records) are keyed by -subject already, so they are safe by the shape of their keys rather than by a rule that would catch the +prefix at all. Today's direct consumers (login and registration counters, OAuth exchange state, +idempotency records, password-reset and email-confirmation tokens, the last accepted second-factor time +step, the soft-deleted marker) are keyed by subject already, so they are safe by the shape of their keys rather than by a rule that would catch the next one. The rest of the tenancy model (resolution middleware, the named query filter, the write interceptor, database-per-tenant routing) is ADR-073's, and belongs to the multi-tenancy deep-dive. @@ -308,7 +321,9 @@ Tier 2 sits in front of the handler instead of inside the pipeline. `MMCA.Common `app.UseOutputCache()` but ships no policies: each host opts in. A read-heavy public service (ADC's Conference service, Store's Catalog) declares named short-TTL policies on its `[AllowAnonymous]` GET controllers, so an anonymous agenda or speaker read is served straight from the output cache and never -reaches a query handler. Store's Catalog runs four such policies, all on the 5-minute TTL; ADC's +reaches a query handler. Store's Catalog runs four such policies, three at 5 minutes and +`ProductsCache` at 60 seconds, because a product payload carries each variant's effective price, which +moves on the clock when a discount window opens or closes with no mutation to evict on; ADC's Conference service runs twelve, ten at 5 minutes and two at 60 seconds where the payload turns over faster. This is also the lever ADR-019 leans on: the global rate limiter partitions by authenticated user and routes anonymous traffic to a `NoLimiter` partition, so output caching, not a throttle, is what @@ -430,7 +445,9 @@ shape to copy when the mutation that stales a cached read arrives as a message. independent copies until each entry's TTL reconciles them. That is exactly why the distributed adapter exists for scaled-out deployments. The two-level backend narrows the window rather than closing it: an eviction clears L2 and the evicting process's L1, but every other replica's L1 copy survives until its - local expiration, capped at 30 seconds. That is a deliberate trade, and it is the same order of + local expiration, capped at 30 seconds by default (`Cache:LocalCacheDuration` retunes it). Single-use + records read through `GetFromSharedStoreAsync`, and counters, skip L1 entirely, so that window never + applies to a token that must not be used twice. That is a deliberate trade, and it is the same order of staleness as the delayed second eviction the write path already performs. - **The edge tier trades a data-leak risk for its speed.** `PublicEndpointOutputCachePolicy` serves one cached response verbatim to every later caller, so it is safe only on endpoints that are @@ -438,8 +455,9 @@ shape to copy when the mutation that stales a cached read arrives as a message. per-user endpoint must never move onto it, and the bypass-roles overload covers role-shaped variance only, never per-user variance. The store behind it is the other thing to get right: `AddOutputCache` defaults to per-replica memory, so under scale-out a tag eviction reaches only the replica that handled - the mutation. Both deployed adopters register a Redis-backed output-cache store inside the same Redis - conditional that wires the pipeline tier, and ADR-040 makes the shared store the expected posture + the mutation. Both deployed adopters call the framework's `builder.AddRedisOutputCaching()`, which + registers a Redis-backed output-cache store when the Redis connection string is set and no-ops + otherwise, and ADR-040 makes the shared store the expected posture wherever a service runs more than one replica; the in-memory store is the single-replica case. - **Cross-service tag eviction is a coherence hint, not a guarantee.** The eviction event is what lets a payload written by a different service be cleared from this one's edge cache at all, and that reach @@ -512,194 +530,119 @@ guide, or `dotnet add package MMCA.Common.API` and try it.* *Tags: .NET, C Sharp, Caching, Software Architecture, Performance* -*Notes: every anchor below was re-read against the current tree on 2026-09-19 (framework v1.205.0, -`MMCA.Common/FACTS.md:14`, generated 2026-09-17 per `:4`). -**2026-09-19 pass.** Nine things moved since the previous re-read, and each one changed prose rather than -only an anchor: the decorators apply TWO key transformations now, not one (caller scoping joined tenant -scoping); the stampede wait became bounded and fail-open; the backend key namespace stopped defaulting to -empty; ADR-026 records an optional THIRD tier on the client; all seven hosts reach Redis through one -framework wrapper instead of calling Aspire's integrations; ADC's public-policy set reached TWELVE with -`PartnersCache`; the public output-cache policy varies by resolved tenant; `MMCA.Common.API` routes its -tag eviction through `BestEffort`; and Store joined the cross-service eviction path. The scorecard's §10 -was renamed by rubric v2, and the framework moved to v1.205.0. -**Tier 1 substrate.** `ICacheService` (`MMCA.Common.Application/Interfaces/ICacheService.cs:10`) has SIX -members: `GetAsync` (`:17`), `SetAsync` (`:26`), `RemoveAsync` (`:36`), `RemoveByPrefixAsync` (`:42`), -`IncrementAsync` (`:59-65`) and `GetOrCreateAsync` (`:99-124`), the last two default interface members. -`GetOrCreateAsync` is get, then a per-key stripe (`CacheKeyLocks.Locks`, `:142-146`), then a double-check, -then factory and set; its remarks state that caching there is unconditional and that "the caching -decorators do NOT route through this member" (`:80-98`), which is the article's point about not caching -failures. `IncrementAsync` is a read-modify-write, so non-atomic, and `DistributedCacheService` overrides -it with the SAME shape rather than Redis `INCR` -(`Infrastructure/Caching/DistributedCacheService.cs:145-150`, storage-format reason `:126-144`). ADR-026's -status records that override explicitly so a reader starting at the interface remarks, which still call -the member "atomically increments", does not draw the opposite conclusion -(`026-caching-strategy.md:12-14`); the article states the limit rather than the override alone. -**The default TTL has a constant and a binding layer.** `CacheOptions.DefaultDuration` is the bare -30-second `TimeSpan` (`Infrastructure/Caching/CacheOptions.cs:23`, with `DefaultExpiration` derived from it -at `:28-31`), and `CacheSettings.DefaultDuration` (`Infrastructure/Caching/CacheSettings.cs:32`, section -name `:25`) defaults to that constant and is what both adapters read: -`DistributedCacheService.SetAsync` takes `expiration ?? _settings.DefaultDuration` (`:64`) and -`HybridCacheService.WriteOptions` does the same plus the L1 ceiling (`:271-272`, `CacheSettings` -documenting the ceiling at `:34-40`). ADR-077 records the shift in its "**Revised (2026-08-31).**" entry -(`077-hybridcache-substrate.md:17-21`); the keyspace-rule section heading is `:50`. -**Backend-level key qualification (rewritten this run: the namespace is no longer empty by default).** -`CacheKeyPrefixOptions` binds the `Cache` section (`Infrastructure/Caching/CacheKeyPrefix.cs:34`) and its -`KeyPrefix` property (`:46`) is documented as "Leave it empty to take the framework's per-application -default (`{application namespace}:`)" (`:36-41`), with the SEC-Common-53 remark naming the reason an empty -default is unsafe: two applications sharing one Redis shared one keyspace for both cache entries and -distributed locks, silently (`:42-45`). `CacheKeyNamespace.From(IServiceProvider)` implements it: a -configured non-empty prefix wins, else `ApplicationNamespace.Resolve` plus `":"` (`:73-88`). The adapter -applies it through `_keys.Qualify` on set (`DistributedCacheService.cs:62`) and remove (`:70`), and on the -prefix pattern the SCAN matches, which is why it is applied inside the adapter rather than through -`RedisCacheOptions.InstanceName`. `MemoryCacheService` skips it, its keyspace being private by -construction. The hybrid backend adds its own `hc:` segment inside that namespace. -**The third backend.** `HybridCacheService` (`Infrastructure/Caching/HybridCacheService.cs:37`) is an L1 -in-process cache over the L2 distributed cache, writing under a disjoint `hc:` keyspace (`KeyspaceSegment` -`:47`, rationale `:17-29`: two serialization formats must never share one key, the generalization of the -`WRONGTYPE` counter incident). Replica L1 staleness after an invalidation is bounded by the local -expiration, 30 seconds (`LocalCacheDefault` `:54`). It is opt-in via `AddCommonHybridCache()` -(`Infrastructure/DependencyInjection.cs:370`, the deliberate `RemoveAll` so the call wins in -either order at `:396`), and the probe-based swap it displaces is in the same file -(`CacheKeyPrefixOptions` bind `:274`, `DistributedCacheService` construction `:298-301`, -`MemoryCacheService` fallback `:310`, `RedisDistributedLock` `:322-325`). All seven deployed services call -it inside their Redis conditional, so production Tier 1 is this implementation: ADC Conference -`Program.cs:186` under the conditional at `:184`. -**Redis wiring is one framework wrapper (rewritten this run).** Every host calls `builder.AddRedisCaching()` -rather than Aspire's integrations: ADC Conference `Program.cs:166`, Identity `:125`, Engagement `:103`, -Notification `:109`; Store Catalog `Program.cs:90`, Sales `:105`, Identity `:94`. The Conference host's -comment above the call states why (`:160-165`): the raw integration registers an UNTAGGED -`StackExchange.Redis` health check that `/health/ready` includes, and against Azure Managed Redis it issues -`CLUSTER INFO`, which the client refuses outside admin mode, so every probe threw (ADR-025 owns that -decision). ADR-026 records the same in its "Revised 2026-09-03" status entry (`026-caching-strategy.md:19-24`) -and in the Trade-offs entry that names the wrapper's own source -(`:204-215`, `MMCA.Common.Aspire/Caching/RedisCachingExtensions.cs:57`, distributed cache `:64`, client -`:65`, both with `DisableHealthChecks = true`). -**Read path.** `CachingQueryDecorator` is primary-constructor-only, five parameters including the new -`IOptions?` (`CachingQueryDecorator.cs:43-48`; there is no secondary -constructor any more). It returns a hit with no lock (`:73-79`), and on a miss arms the populate-lock -budget (`:84-96`) through `TryAcquirePopulateLockAsync` (`:179-198`, linked token so a real cancellation -still throws at `:194`); a waiter that exhausts the budget logs at Debug (`:93`), counts a miss (`:94`) and -runs the query UNCACHED (`:95`). Holding the stripe it re-checks (`:98-105`), records exactly one miss -(`:113`), and caches only non-failure results (`:115-132`, condition `:118`, populate catch `:125`). Reads -run through `TryReadAsync` (`:208-223`), which catches everything except `OperationCanceledException` -(`:218`) and returns default so the caller treats the fault as a miss (`:221`). The stripe holder is -`QueryCacheKeyLocks` (`:247-251`); the class doc carries the tenant paragraph (`:27-33`) and the -bounded-wait paragraph (`:34-39`). -**Two key transformations (rewritten this run; the section heading and the trade-off bullet moved with it).** -`EffectiveKey` composes both in one expression: -`TenantCacheKey.Scope(tenantContext, UserCacheKey.Scope(cacheable, cacheable.CacheKey))` (`:58-59`). -Tenant scoping returns `t:{tenantId}:{key}` when a tenant is resolved and the untouched key when none is -(`Application/UseCases/Decorators/TenantCacheKey.cs:37-40`, marker `t:` `:28`, prefix-not-suffix rationale -`:15-19`, unchanged-keyspace guarantee `:20-23`); `CachingCommandDecorator` scopes the prefix through the -same helper. Caller scoping is `UserCacheKey` (`Application/UseCases/Decorators/UserCacheKey.cs:26`), which -appends `:u:{UserId}` (marker `:29`) for a query implementing `IUserScopedRequest` and NOT -`ISharedQueryCache` (`:38-41`). Its remarks carry both the threat and the asymmetry: SEC-Common-37, a -per-user query whose key omits WHO is asking serves the second caller the first's personal data for the -whole cache duration (`:9-16`), and the marker is a SUFFIX because a caller segment inserted ahead of the -key would put every user's entry outside the prefix an invalidating command computes, so nothing would ever -be evicted (`:17-24`). ADR-026 records it in the status block (`026-caching-strategy.md:25-27`) and in -Revision (2026-09-07) (`:264-270`, citing `CachingQueryDecorator.cs:59` itself). ADR-073 still owns the -tenancy slice (`073-multi-tenancy-model.md:142-147`) and its honest limit, "Cache isolation stops at the -decorator" (`:204-205`). -**Write path.** `CachingCommandDecorator` is also primary-constructor-only (`CachingCommandDecorator.cs:33-37`). -It evicts by prefix only when the command implements `ICacheInvalidating` AND its `CachePrefix` is not -blank AND the result is not a failure (`:61-63`; the blank-prefix guard is load-bearing because -`RemoveByPrefixAsync("")` would evict the whole cache, comment `:58-60`). The eviction runs on -`CancellationToken.None` (`:73-74`) and swallows into one warning (`:83-88`); the fire-and-forget second -eviction after `ReInvalidationDelay`, 5 seconds (`:45`), is exposed as `InvalidationFollowUp` (`:51`) and -implemented in `ReInvalidateAfterDelayAsync` (`:98-111`, delay and evict on `CancellationToken.None` -`:102-103`, catch `:105-110`), with the shared log template at `:113-120`. All of it runs outside the -transaction `TransactionalCommandDecorator` opens, because Caching is registered after Transactional and -therefore wraps it (`Application/DependencyInjection.cs:107` then `:110`, query side `:117`, pipeline -diagram `:53-63`). A failed `Result` ROLLS BACK rather than committing an empty transaction, and that -rollback also drops the deferred domain-event dispatch -(`Infrastructure/Persistence/DbContexts/Factory/DbContextFactory.cs:565-572`). -**Fail-open on the auth path.** `MMCA.Common.API/Middleware/SoftDeletedUserMiddleware.cs` falls back from -the marker cache to the validator query (cache-read catch `:93-100`) and then proceeds open when the -validator also fails (`:118-125`, pass-through `:123`); the rationale and its 15-minute access-token bound -are on the class (`:16-30`, the bound at `:24-26`). -**BestEffort (the reach claim is rewritten this run).** -`BestEffort.ExecuteAsync(operation, logger, action, cancellationToken)` -(`MMCA.Common.Application/Services/BestEffort.cs:45-49`) awaits the action (`:57`), rethrows an -`OperationCanceledException` when the caller's own token asked for the stop (`:59-64`), and otherwise -records exactly one metric increment plus one Warning (`:65-71`). The counter is -`besteffort.dispatch.failed` on the `MMCA.Common.BestEffort` meter, tagged by `operation` (`:102`, -`:107-110`). What changed: `MMCA.Common.API` DOES call it. `TryEvictTagsAsync` -(`MMCA.Common.API/Caching/OutputCacheEvictionExtensions.cs:78-92`) wraps every `EvictByTagAsync` in -`BestEffort.ExecuteAsync` under `CancellationToken.None` (`:86-90`), and its doc comment states both the -metric and the committed-mutation reason for the token choice (`:60-71`). The eviction CONSUMER -(`OutputCacheEvictionHandler.cs:51-62`, `OutputCacheMetrics.RecordEvictionFailure` `:60`) is the remaining -hand-rolled instance, which is what the article now says. The caching decorators also still hand-roll it. -**Edge tier.** `MMCA.Common.API` always calls `app.UseOutputCache()` and ships no policies, but the call is -an unconditional named step of the ADR-079 middleware pipeline rather than a line in the old startup -extension (`MMCA.Common.API/Startup/Pipeline/MiddlewarePipelineBuilder.cs:143-145`, step name -`MiddlewarePipelineStepNames.OutputCache`). `PublicEndpointOutputCachePolicy` sets -`CacheVaryByRules.QueryKeys = "*"` (`Caching/PublicEndpointOutputCachePolicy.cs:96`), never stores a -`Set-Cookie` response or a non-200 (`:125-126`), is GET/HEAD only (`:134-135`), and skips a bypassed caller -through a wide role read rather than `IsInRole` (`:141-142`, wired into the lookup and storage decision at -`:87`). NEW and now stated in the body: the policy also varies by resolved tenant, stamping -`ITenantContext.TenantId` into `CacheVaryByRules.VaryByValues` under the key `t` (`TenantVaryByKey` `:50`, -the stamp and its SECURITY comment `:98-106`), which ADR-026's status records at `:25-27`. -**ADC host counts, taken from `Program.cs` rather than from ADR-040.** TWELVE public-read policies, ELEVEN -with the bypass audience: `ConferencePublicCache` `:251`, `EventsCache` `:252`, `SessionsCache` `:258`, -`SpeakersCache` `:259`, `RoomsCache` `:260`, `CategoriesCache` `:261`, `QuestionsCache` `:262`, -`SponsorsCache` `:263`, `PartnersCache` `:264` (the twelfth policy, 5 minutes, WITH the bypass, tags -`conference` and `conference:partners`), `ActivitiesCache` `:265`, all at 5 minutes; `NowNextCache` `:268` -(60 s, the only policy passing no bypass roles) and `BookmarkCountsCache` `:280` (60 s, WITH the bypass, -its TTL the backstop for a dropped eviction message per the comment at `:270-279`). The bypass array is -built once from `ConferenceReadAudience.PrivilegedRoles` (`:250`, the shared-list comment `:247-249`; -source `MMCA.ADC.Conference.Shared/Authorization/ConferenceReadAudience.cs:26-30`, `Organizer` and -`ContentEditor`). ADR-040's own status still says eleven and "ten of the eleven" -(`040-authenticated-output-caching-for-public-reads.md:21-23`, its sixth amendment, 2026-08-31), so the -record lags the code by `PartnersCache`: that is an ADR-side follow-up, not an article claim. Store -Catalog's four policies are all 5-minute and unchanged -(`MMCA.Store/Source/Services/MMCA.Store.Catalog.Service/Program.cs:153,154,155,158`), and it wires Redis -through the same wrapper at `:90`. -**Cross-service edge eviction.** `OutputCacheEvictionRequested` -(`MMCA.Common.Domain/IntegrationEvents/OutputCacheEvictionRequested.cs:23`) is a sealed record over -`BaseIntegrationEvent` whose only member is `IReadOnlyList Tags`, defaulting to empty so a -malformed or older message is a no-op rather than a cache-wide purge (`:31`). `OutputCacheEvictionHandler` -(`MMCA.Common.API/Caching/OutputCacheEvictionHandler.cs:32-35`) loops the tags, skips blank ones, evicts -each through `EvictByTagAsync` (`:53`), catches per tag and rethrows only `OperationCanceledException` -(`:56`); a failure increments `cache.eviction.failed`, tagged `cache_tag`, on the `MMCA.Common.OutputCache` -meter (`Caching/OutputCacheMetrics.cs:19`, instrument `:29-32`). ADC is the first worked case: Engagement's -`UserSessionBookmarkCacheEvictionHandler` subscribes to the domain event and publishes the eviction with -the tag `conference:sessions` through `BestEffort.ExecuteAsync`, and Conference registers both halves, the -handler in its service collection and the consumer inside `AddBrokerMessaging` (the "registering only one -is a silent no-op" comment is at `Program.cs:283-285`). NEW this run: STORE runs the same path, and ADR-040 -records it in a "## Revision (2026-09-10)" (`:167-206`): Catalog's `CustomerErasedHandler` consumes -Identity's `CustomerErased`, clears the reviewer's name, title and body while keeping the star rating -(`MMCA.Store.Catalog.Application/Reviews/IntegrationEventHandlers/CustomerErasedHandler.cs:89-96`, save -`:98`), then publishes the eviction for `ProductsCacheTag` = `"catalog:products"` (`:59`) inside -`BestEffort.ExecuteAsync` (`:109-115`). It is the first adopter in an Application-layer handler rather than -a controller. -**The optional third tier (NEW paragraph this run).** ADR-026 is amended 2026-09-01 with "### An optional -third tier on the client" (`026-caching-strategy.md:149-183`, announced in the status block at `:14-18`): -`IUiReadCache` (`MMCA.Common.UI/Services/Caching/IUiReadCache.cs:32`, `TryGetFresh` `:42`, `Set` `:51`, -`InvalidatePrefix` `:59`, `Clear` `:66`) is a read-through cache over the API client, keyed on the relative -URL so it lines up with Tier 2's `QueryKeys = "*"`, and `UiReadCache` is registered scoped by `AddUIShared` -(`MMCA.Common.UI/DependencyInjection.cs:63`; the ADR's own citation says `:61` and sits two lines low), -which is one instance per Blazor Server circuit. Shipped and wired, adopted by no consumer app, which is -exactly how the article states it. ADR-026's current structure for any future re-anchoring: Status `:3-27`, -Decision `:45`, Tier 1 `:48`, Tier 2 `:92`, third tier `:149`, Rationale `:185`, Trade-offs `:200`, -Revision (2026-09-07) `:264`, Related `:299`. -**Scorecard.** Rubric v2 (ADR-110) renamed §10: the row at `common-ArchitectureScorecard.md:90` is -**Messaging & Integration Architecture** (weight 3, Maturity 4, Implementation 9), and it keeps the -`AddCaching()` / `MemoryCacheService` sentence only under "**Former §10 Cross-Cutting Concerns evidence, -retained for the record (those facets are now scored in §5/§6/§9/§12/§17/§29)**", which is why the article -no longer calls §10 the Cross-Cutting Concerns category. §12 Performance & Scalability (`:92`) is Maturity -4, Implementation 8 and still cites the specification benchmarks rather than the cache subsystem, so the -article claims no "§12 perf gap" for caching. The latest full re-score is the THIRTY-SIXTH wave -(2026-09-19, at v1.205.0, `:5`) and it moved no value: Maturity index 318 ÷ 328 = **97.0%** (`:120`), -Implementation index 705 ÷ 820 = **86.0%** (`:121`), N/A none with all 34 rows scored (`:124`). -**Perf gate.** Common's CI is pull-request-only and both perf steps are gated on -`needs.changes.outputs.code == 'true'`, so a docs-only PR skips them while the context still posts green. -The `performance-smoke` job runs the BenchmarkDotNet harness with `--filter "*" --job Short --exporters -json` and then a `build/perfgate` baseline verify, and its context is one of the required status checks on -protected `main`. The harness holds two suites, `SpecificationBenchmarks.cs` (compiled-cache vs recompile, -criteria composition) and `QueryPipelineBenchmarks.cs` (dynamic-LINQ filtering, sorting, field shaping). -Neither touches the cache decorators, so the cache path remains unmeasured. Nineteen published packages -(`MMCA.Common/FACTS.md:19`) at v1.205.0 (`:14`); 34 rubric categories -(`common-ArchitectureScorecard.md:124`).* +*Notes: every anchor below was re-read against the current tree on 2026-10-02 (framework v1.221.0, +`MMCA.Common/FACTS.md:14`, generated 2026-10-02 per `:4`) unless marked "per audit". +**2026-10-02 pass.** Seven claims changed prose, not only an anchor. `ICacheService` has EIGHT members, +not six (`TryGetAsync` and `GetFromSharedStoreAsync` are default interface members), so the "first and +second late arrival" framing was dropped: the order in which the members arrived is not determinable from +source. All seven hosts call the framework's guarded `AddCommonHybridCacheWhenRedisConfigured(...)` with +no host-side Redis conditional. Both output-cache adopters call `AddRedisOutputCaching()` unconditionally +and rely on the wrapper's own no-op. Store's `ProductsCache` is 60 seconds. The direct-consumer list gained +the token services, the second-factor step and the soft-deleted marker. Replica L1 staleness is a +configurable default that single-use reads and counters skip. The scorecard's §10 label reads "Related +cross-cutting evidence". Header grounding moved from `MMCA.Common/CLAUDE.md` (now only an `@AGENTS.md` +import, `CLAUDE.md:3`) to `MMCA.Common/AGENTS.md` (`### CQRS Decorator Pipeline` `:76`, the Caching bullet +`:88`). The caching registrations live in `Infrastructure/DependencyInjection.Caching.cs`, so every former +`Infrastructure/DependencyInjection.cs` anchor is re-pointed below. +**Tier 1 substrate.** `ICacheService` (`MMCA.Common.Application/Interfaces/ICacheService.cs:10`) has EIGHT +members: `GetAsync` (`:17`), `TryGetAsync` (`:34-38`), `GetFromSharedStoreAsync` (`:62-63`), `SetAsync` +(`:72`), `RemoveAsync` (`:82`), `RemoveByPrefixAsync` (`:88`), `IncrementAsync` (`:105`) and +`GetOrCreateAsync` (`:145`); the four with bodies are default interface members. `TryGetAsync` exists +for a value type whose miss is indistinguishable from a cached `default` (`:19-24`, override note `:29-33`), +and `DistributedCacheService` overrides it (`Infrastructure/Caching/DistributedCacheService.cs:48`). +`GetFromSharedStoreAsync` bypasses any process-local copy for single-use records (`:40-61`) and +`HybridCacheService` overrides it (`Infrastructure/Caching/HybridCacheService.cs:150`, class remarks +`:36-41`). `GetOrCreateAsync` takes the per-key stripe (`CacheKeyLocks.Locks` `:159`, class `:189`); its +remarks state that caching is unconditional and that "the caching decorators do NOT route through this +member" (`:128-131`). `DistributedCacheService` overrides `IncrementAsync` with the same read-modify-write +shape rather than Redis `INCR` (`DistributedCacheService.cs:153`); ADR-026 records the declined `INCR` +(`026-caching-strategy.md:13`, Revision (2026-07-25) `:359`, item `:362`). +**Backend swap.** `AddCaching` (`Infrastructure/DependencyInjection.Caching.cs:26`) binds +`CacheKeyPrefixOptions` (`:41`), builds `DistributedCacheService` (`:68`) or falls back to +`MemoryCacheService` (`:77`), and registers `RedisDistributedLock` (`:94`). `MemoryCacheService` keeps its +key set in a `ConcurrentDictionary` (`Infrastructure/Caching/MemoryCacheService.cs:38`); the SCAN eviction +lives in `RedisPrefixScanner` (`RedisPrefixScanner.cs:24`), fed the qualified pattern +(`DistributedCacheService.cs:126`); the missing-multiplexer warning is `Interlocked`-guarded (`:115`). +**Default TTL.** `CacheOptions.DefaultDuration` (`Infrastructure/Caching/CacheOptions.cs:23`); +`CacheSettings` section `:25`, `DefaultDuration` `:32`, `LocalCacheDuration` `:42`; read by +`DistributedCacheService` (`:72`) and `HybridCacheService.WriteOptions` (`:316-319`, L1 ceiling `:319`). +ADR-077 "Revised (2026-08-31)" (`077-hybridcache-substrate.md:17`), keyspace-rule heading `:50`. +**Backend key namespace.** `CacheKeyPrefixOptions.SectionName` (`CacheKeyPrefix.cs:34`), the SEC-Common-53 +remark (`:43`), `CacheKeyNamespace.From(IServiceProvider)` (`:73`); applied through `_keys.Qualify` on get +(`DistributedCacheService.cs:42`), set (`:70`), remove (`:78`) and the scan pattern (`:126`). +**The third backend.** `HybridCacheService` (`HybridCacheService.cs:44`), `KeyspaceSegment` `hc:` (`:55`, +rationale `:20-27` per audit), `LocalCacheDefault` 30 seconds (`:62`), retuned by +`Cache:LocalCacheDuration` (`:30-34`), single-use reads and counters skipping L1 (`:36-41`, flags `:85-86`). +`AddCommonHybridCache` (`DependencyInjection.Caching.cs:139`, `RemoveAll` so it wins in +either order `:165`); `AddCommonHybridCacheWhenRedisConfigured` (`:200-212`, guard `:206`, rationale +`:184-195`). Call sites: ADC Conference `Program.cs:201` (comment `:195-200`), Identity `:134`, Engagement +`:113`, Notification `:116`; Store Catalog `Program.cs:108`, Sales `:113`, Identity `:102`. ADR-026 records +the helper in its "Revised 2026-09-25" status entry (`026-caching-strategy.md:28-32`) and Tier 1 (`:72`). +**Redis wiring.** `builder.AddRedisCaching()`: ADC Conference `:183` (rationale `:174-182`), Identity `:126`, +Engagement `:105`, Notification `:108`; Store Catalog `:89`, Sales `:104`, Identity `:93`. Wrapper +`MMCA.Common.Aspire/Caching/RedisCachingExtensions.cs:57`, blank-string no-op `:59-61`, +`DisableHealthChecks` `:64-65`; `AddRedisOutputCaching` `:91`, no-op `:94-96`, called unconditionally at ADC +Conference `:193` (comment `:185-192`) and Store Catalog `:99`. ADR-026 Trade-offs `:213` (wrapper `:221`). +**Read path.** `CachingQueryDecorator` (`CachingQueryDecorator.cs:43`): `EffectiveKey` composes both key +transformations (`:59`), a hit takes no lock (`:74`), the populate-lock budget (`:87`, +`TryAcquirePopulateLockAsync` `:179`, budget-exhausted catch `:194`), the re-check (`:100`), caching only +non-failure results (`:118`, populate catch `:125`), `TryReadAsync` (`:208`, fail-open catch excluding +`OperationCanceledException` `:218`), `QueryCacheKeyLocks` (`:247`). +**Two key transformations.** `TenantCacheKey` marker `t:` (`TenantCacheKey.cs:28`); `UserCacheKey` +(`UserCacheKey.cs:26`), marker `:u:` (`:29`), applied for `IUserScopedRequest` and not `ISharedQueryCache` +(`:39`). ADR-026 Revision (2026-09-07) (`:280`, citing `CachingQueryDecorator.cs:59` at `:286`). ADR-073 +"Cache isolation lives in the decorators" (`073-multi-tenancy-model.md:191`) and "Cache isolation stops at +the decorator" (`:257`). Direct consumers re-read this run: `LoginProtectionService.cs:42,64,119`, +`OAuthControllerBase.cs:142,196`, `IdempotencyFilter.cs:141`, `PasswordResetTokenService.cs:128`, +`EmailConfirmationTokenService.cs:90`, `TwoFactor/TwoFactorAuthenticator.cs:105`, `SoftDeletedUserCache.cs:57`. +**Write path.** `CachingCommandDecorator` (`CachingCommandDecorator.cs:33`): the three-condition guard +(`:61-63`), eviction on `CancellationToken.None` (`:73`), the swallow (`:84`), `ReInvalidationDelay` 5 +seconds (`:45`), `InvalidationFollowUp` (`:51`), `ReInvalidateAfterDelayAsync` (`:98`, delay and evict +`:102-103`, catch `:106`). Registration order: Transactional (`Application/DependencyInjection.cs:134`) then +Caching (`:137`), query Caching (`:145`), pipeline diagram (`:66-79`). A failed `Result` rolls back and +drops deferred dispatch (`Infrastructure/Persistence/DbContexts/Factory/DbContextFactory.cs:608`). +**Fail-open on the auth path.** `SoftDeletedUserMiddleware.cs:33`: the 15-minute access-token bound in the +class remarks (`:26`), the cache-read catch (`:92`), the validator catch and pass-through (`:131-136`). +**BestEffort.** `BestEffort.ExecuteAsync` (`MMCA.Common.Application/Services/BestEffort.cs:45`), await +(`:57`), cancellation rethrow (`:59-63`), catch (`:65`), meter `MMCA.Common.BestEffort` (`:102`), counter +`besteffort.dispatch.failed` (`:107-108`), tagged `operation` (`:115`). `TryEvictTagsAsync` +(`MMCA.Common.API/Caching/OutputCacheEvictionExtensions.cs:78`) wraps `BestEffort.ExecuteAsync` under +`CancellationToken.None` (`:86-90`). +**Edge tier.** `app.UseOutputCache()` (`MMCA.Common.API/Startup/Pipeline/MiddlewarePipelineBuilder.cs:133`). +`PublicEndpointOutputCachePolicy`: `TenantVaryByKey` `t` (`:50`), `QueryKeys = "*"` (`:96`), the tenant stamp +(`:105`), no `Set-Cookie` and no non-200 (`:125-126`), GET/HEAD only (`:135`). The `NoLimiter` partition for +anonymous traffic is per audit (`WebApplicationBuilderExtensions.RateLimiting.cs:68`; anonymous hub +requests are metered per IP at `:58-67`, outside the HTTP reads this article discusses). +**ADC host counts.** `adminBypassRoles` built from `ConferenceReadAudience.PrivilegedRoles` (`Program.cs:264`; +source `MMCA.ADC.Conference.Shared/Authorization/ConferenceReadAudience.cs:34-37`, `Organizer` and +`ContentEditor`); twelve policies at `:265-294`, ten at 5 minutes, `NowNextCache` (`:282`, 60 seconds, no +bypass) and `BookmarkCountsCache` (`:294`, 60 seconds, with the bypass). ADR-040 records twelve and eleven +in its status (`040-authenticated-output-caching-for-public-reads.md:23-25`) and Revision (2026-09-25) +(`:222`, count `:243`), which closes the ADR-side follow-up the previous ledger noted. Store Catalog: +`CatalogCache` `:152`, `CategoriesCache` `:153`, `ProductsCache` 60 seconds `:159` (reason `:154-158`), +`ProductImagesCache` `:162`; ADR-040 `:224-231`, the unconditional output store `:236`, and the observation +that `CatalogCache` backs no endpoint `:262-263` (not repeated in the body). +**Cross-service edge eviction.** `OutputCacheEvictionRequested` (`MMCA.Common.Domain/IntegrationEvents/OutputCacheEvictionRequested.cs:28-29`, `Tags` defaulting to empty `:37`). `OutputCacheEvictionHandler` +(`MMCA.Common.API/Caching/OutputCacheEvictionHandler.cs:32`), `EvictByTagAsync` (`:53`), catch (`:56`), +`RecordEvictionFailure` (`:60`); meter `MMCA.Common.OutputCache` (`OutputCacheMetrics.cs:19`), +`cache.eviction.failed` (`:29-30`). Conference registers the handler (`Program.cs:300`, the "silent no-op" +comment `:297-299`). Per audit: ADC Engagement `UserSessionBookmarkCacheEvictionHandler.cs:53`, the +Conference consumer at `ConferenceBrokerConsumers.cs:37`, Store `CustomerErasedHandler.cs:109`; ADR-040 +Revision (2026-09-10) `:181`. +**The optional third tier.** ADR-026 "### An optional third tier on the client" (`:158`); `UiReadCache` +registered scoped (`MMCA.Common.UI/DependencyInjection.cs:63`, per audit) with no reference in ADC, Store or +Helpdesk source (per audit). ADR-026 structure: Status `:3-32`, Decision `:50`, Tier 1 `:53`, Tier 2 +`:102`, third tier `:158`, Rationale `:198`, Trade-offs `:213`, Revision (2026-09-07) `:280`, Related `:315`. +**Scorecard.** `common-ArchitectureScorecard.md` evidence as of 2026-10-01 at v1.218.0 (`:5`). §10 Messaging & +Integration Architecture, Maturity 4, Implementation 9 (`:74`), keeps the `AddCaching()` / +`MemoryCacheService` sentence under "Related cross-cutting evidence (scored under §5/§6/§9/§12/§17/§29)"; +§12 Performance & Scalability, Maturity 4, Implementation 8 (`:76`), still cites no cache benchmark. +Maturity index 317 / 328 = 96.6% (`:9`), Implementation index 705 / 820 = 86.0% (`:10`), N/A none with all 34 +rows scored (`:104`). The body states no index. +**Perf gate (per audit).** `performance-smoke` (`MMCA.Common/.github/workflows/ci.yml:388`) is a required +check ("Performance gate (BenchmarkDotNet Short + baseline verify)"), its suites are +`SpecificationBenchmarks.cs` and `QueryPipelineBenchmarks.cs`, and the Benchmarks project is outside +`MMCA.Common.slnx`; neither suite touches the cache decorators. 22 published packages +(`MMCA.Common/FACTS.md:19`) at v1.221.0 (`:14`).* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/self-ordering-modules.md b/docs-src/articles/self-ordering-modules.md index c3ec704e..4aeec0c0 100644 --- a/docs-src/articles/self-ordering-modules.md +++ b/docs-src/articles/self-ordering-modules.md @@ -1,10 +1,12 @@ # Self-ordering modules: discovered, Kahn-ordered, and extractable > Series: MMCA.Common · Article #14 (deep-dive) · Pillar P2 · Group G14 · Rubric §7 · -> Status: grounded in `MMCA.Common/CLAUDE.md` ("Module System" + "DI Registration Sequence"), -> `MMCA.Common.Application/Modules/*` + `.../DependencyInjection.cs` and -> `MMCA.Common.API/Startup/ModuleHostExtensions.cs` source, the reference hosts -> `MMCA.ADC.Conference.Service/Program.cs`, `MMCA.ADC/CLAUDE.md`, `MMCA.Helpdesk/CLAUDE.md`, and +> Status: grounded in `MMCA.Common/AGENTS.md` ("Module System"), +> `MMCA.Common.Application/Modules/*`, `.../Settings/ModulesSettings.cs`, `.../DependencyInjection.cs` and +> `.../DependencyInjection.ModuleScanning.cs`, `MMCA.Common.API/Startup/ModuleHostExtensions.cs` and +> `ModuleHostContext.cs` source, the reference hosts `MMCA.ADC.{Conference,Engagement,Identity,Notification}.Service/Program.cs`, +> `MMCA.ADC.Engagement.API/EngagementModule.cs`, `MMCA.ADC.Engagement.Contracts/DependencyInjection.cs`, +> `MMCA.ADC/AGENTS.md`, `MMCA.Helpdesk/AGENTS.md`, and > ADR-059 (the `IModule` contract and reflection-based module composition). No em dashes. **Subtitle:** A module declares its name and its dependencies. The framework discovers every module, @@ -91,12 +93,14 @@ come out of the sort than went in, the leftovers form a **dependency cycle**, an the offending module names. A circular dependency between modules becomes a loud, named startup failure instead of a subtle runtime surprise. -The scan is also defensive. Each `GetTypes()` call sits inside a try/catch (a -`ReflectionTypeLoadException` raised by a missing transitive reference is the case it exists for), so a -broken assembly contributes no types and logs why instead of aborting discovery of the rest. And every -step emits a structured `[LoggerMessage]`-generated log line, so the startup log tells you precisely -which modules loaded, in what order, and how long each took. When something is wrong, you read it, you -do not guess it. +The scan is also defensive. Each `GetTypes()` call sits inside a guard with two catches. A +`ReflectionTypeLoadException` (the shape a missing transitive reference produces) still carries every +type that did load, so the loader keeps those and the assembly's loadable modules still register; any +other exception drops that one assembly. Both paths log at Error, because a module that silently fails +to register is an outage that looks like a configuration choice, and neither aborts discovery of the +rest. And every step emits a structured `[LoggerMessage]`-generated log line, so the startup log tells +you precisely which modules loaded, in what order, and how long each took. When something is wrong, you +read it, you do not guess it. ```csharp // In each host's Program.cs. AddModuleHost binds and validates ApplicationSettings and @@ -128,7 +132,8 @@ user). Here is the part that turns this from a tidy registration trick into an extraction mechanism. A host can disable a module through configuration. `ModulesSettings` binds the `"Modules"` config section (it is a `Dictionary`), and `ModuleSettings` carries a per-module `Enabled` flag -(default `true`) plus a `RemoteDependencies` list. +(default `true`) plus a `RemoteDependencies` list. A module the section does not list at all counts as +disabled, so enabling a module is always an explicit line of configuration. ```json { @@ -142,9 +147,10 @@ disable a module through configuration. `ModulesSettings` binds the `"Modules"` When the loader reaches a disabled module it does not skip it. It calls that module's `RegisterDisabledStubs(services)` and records the name in `DisabledModuleNames`. This is the crux. A disabled Engagement module still contributes stub registrations for the cross-module interfaces other -modules depend on. So when Conference's `GetSessionBookmarkCountHandler` asks the container for -Engagement's `IBookmarkCountService`, resolution still succeeds, because the disabled module left a -`Disabled*` stub behind. +modules depend on: `EngagementModule` registers `DisabledBookmarkCountService` as its +`IBookmarkCountService`. So in a host that names the Engagement assembly but disables the module, +Conference's `GetSessionBookmarkCountsHandler` still resolves `IBookmarkCountService`, because the +disabled module left a `Disabled*` stub behind. That is a clean strategy plus null-object pairing (real service, disabled stub, or remote client) rather than `if (moduleEnabled)` checks scattered through the call sites. The handler does not know or care @@ -153,10 +159,13 @@ which of the three it got. Dependency validation is microservice-aware to match. A dependency that is disabled in-process but listed in this host's `ModuleSettings.RemoteDependencies` is treated as satisfied remotely (the host will wire a typed gRPC client to the extracted peer), and only a module with `RequiresDependencies = -true` and a genuinely unsatisfied dependency throws at startup. The loader also loads per-module -configuration by convention: before calling `module.Register(...)` it adds `modules.{name}.json` (and -the environment-specific variant) to the configuration builder, so a module can ship its own config -file. +true` and a genuinely unsatisfied dependency throws at startup. Because a remote declaration is +configuration the loader takes on trust, it also offers `ValidateRemoteDependencies(IServiceProvider)`, +an opt-in check a host runs against the built provider: every service type a remote-declared +dependency's disabled stubs registered must resolve (a miss throws), and one that still resolves to the +stub logs a warning. The loader also loads per-module configuration by convention: before calling +`module.Register(...)` it adds `modules.{name}.json` (and the environment-specific variant) to the +configuration builder, so a module can ship its own config file. ## Convention scanning: what a module's Register actually wires @@ -208,12 +217,15 @@ and the same self-ordering `ModuleLoader` registration runs at both ends of it. enables every module and cross-module calls are in-process method calls: MMCA.Helpdesk is the framework's monolith-first reference app, a single `Tickets` module exercised end to end through all five layers to demonstrate the "build the monolith now, extract a service later" path. As a fleet, each service host -runs the same `ModuleLoader` with only its own module enabled (`Modules:{Module}:Enabled=true`); the -disabled peers contribute their stubs, and the host then replaces a stub with a typed gRPC client pointed -at the real, extracted peer process. MMCA.ADC runs this way today: four single-module service hosts -(Identity, Conference, Engagement, Notification) behind a YARP gateway, with no combined monolith host at -all. The Domain, Application, and Shared code is identical in both topologies. The transport choice lives -entirely at the composition edge (ADR-008). +names only its own module assembly to `ModuleLoader`, so its peers are never discovered and contribute +no stubs; the host instead registers a typed gRPC client adapter for each cross-module interface it +consumes, pointed at the real, extracted peer process. MMCA.ADC runs this way: four single-module +service hosts (Identity, Conference, Engagement, Notification) behind a YARP gateway, with no combined +monolith host at all. In its Conference host, `IBookmarkCountService` resolves to a +`BookmarkCountServiceGrpcAdapter` that calls the Engagement service. The disabled-stub path serves the +other shape: a host that names a peer's assembly and switches the module off. The Domain, Application, +and Shared code is identical in every topology. The transport choice lives entirely at the composition +edge (ADR-008). That is the payoff of declaring intent instead of position: the same self-ordering registration that makes the monolith correct is what makes the split reversible. Nothing in Helpdesk's `TicketsModule` or @@ -230,8 +242,9 @@ ADC's `ConferenceModule` changes when it moves from one host to its own process. cost: the order is not visible as a list of lines. The structured startup log is the mitigation, but a developer used to reading the order off `Program.cs` has to learn to read it off the log instead. - **Stubs must be maintained.** `RegisterDisabledStubs` is a real obligation. Add a cross-module - interface and forget to register a stub for it, and a host that disables that module fails to resolve. - This is caught at startup rather than in production, but it is a discipline the contract assumes. + interface and forget to register a stub for it, and a host that names that module's assembly but + disables it fails to resolve the interface the first time something asks for it. The loader does not + check stub coverage, so this is a discipline the contract assumes. - **Cycles are rejected, not resolved.** A dependency cycle is a hard startup failure by design. That is the correct behavior, but it means you cannot lean on lazy resolution to paper over a genuine circular design between modules. @@ -275,76 +288,71 @@ or `dotnet add package MMCA.Common.API` and try it.* *Tags: .NET, C Sharp, Software Architecture, Modular Monolith, Microservices* -*Notes: re-verified against source this run (2026-09-19 audit pass, MMCA.Common v1.205.0 at commit -90ffa7a). Three claims changed meaning, all in the discovery mechanism. (1) The article described -`DiscoverAndRegister` as scanning every loaded assembly via `AppDomain.CurrentDomain.GetAssemblies()`. -There is no `AppDomain` path in `ModuleLoader.cs` at all: the signature is six parameters, -`DiscoverAndRegister(services, configurationBuilder, applicationSettings, modulesSettings, string? -environmentName, IEnumerable moduleAssemblies)` at `ModuleLoader.cs:58-64`, with -`environmentName` carrying no default and `moduleAssemblies` required. The XML doc at -`ModuleLoader.cs:48-53` gives the reason the article states: an `AppDomain` scan only sees assemblies -already loaded, so a referenced-but-untouched module assembly would be silently absent. The guarded -`moduleAssemblies.SelectMany(a => a.GetTypes())` scan is `ModuleLoader.cs:71-84`, and its guard is a -broad `catch (Exception ex)` at `:78` that logs through `LogAssemblyScanFailed` and returns no types -(the XML comment at `:69-70` names `ReflectionTypeLoadException` as the case it exists for, so the -article says "the case it exists for" rather than claiming a typed catch); `IModule` and `IModuleSeeder` -instantiation is `:86-94`, and `TopologicalSort(allModules)` is called at `:97`. -(2) The host snippet no longer matched any host and would not compile against the six-parameter -signature. The real shape is `builder.AddModuleHost([typeof(ConferenceModule).Assembly], -loggerFactory.CreateLogger())` (`MMCA.Common.API/Startup/ModuleHostExtensions.cs:51-53`, -public API at `MMCA.Common.API/PublicAPI.Unshipped.txt:75`), which binds and validates -`ApplicationSettings` and `ModulesSettings` (`:61-75`), builds the loader with or without the passed -logger and calls `services.AddSingleton(moduleLoader)` (`:77-82`), and returns a `ModuleHostContext` -(`:84-90`). (3) Discovery therefore runs as a pipeline step, not as a host line: -`ModuleHostContext.RegisterModules(IServiceCollection)` (`ModuleHostContext.cs:66-78`) is the delegate -that calls `DiscoverAndRegister` with the six captured arguments, and the ADC Conference host registers -it at `MMCA.ADC.Conference.Service/Program.cs:391` inside -`services.AddMmcaApplicationPipeline(...)` (`:390-395`). The host's own comments state both points: -`AddModuleHost` "deliberately does NOT run discovery" (`Program.cs:341-344`) and "there is no AppDomain -scan to fall back on" (`Program.cs:346-348`), with the `AddModuleHost` call itself at `:349-352`. -`IModule` members (`Name`, `Dependencies` default `[]`, `RequiresDependencies` default `false`, -`Register(IServiceCollection, IConfigurationBuilder, ApplicationSettings)`, `RegisterDisabledStubs` -default empty body) at `MMCA.Common.Application/Modules/IModule.cs:12,17,23,28,34`. `ModuleLoader` is a -`sealed partial class` (`ModuleLoader.cs:15`) with `Logger { get; init; } = -NullLogger.Instance` (`:33`) and `DisabledModuleNames` (`:27`); -`SeedAllAsync(IServiceProvider, CancellationToken)` at `ModuleLoader.cs:255` (the former `:270` anchor is -now an XML `` tag on `TopologicalSort`); `IModuleSeeder.ModuleName`/`SeedAsync(...)` at -`IModuleSeeder.cs:13,18`. `ModulesSettings : Dictionary`, `SectionName = -"Modules"` at `Settings/ModulesSettings.cs:7,10`; `ModuleSettings.Enabled` (init, default `true`) + -`RemoteDependencies` (`List`, default `[]`) at `Settings/ModuleSettings.cs:9,38`. -`ScanModuleApplicationServices()` is at -`MMCA.Common.Application/DependencyInjection.cs:169-171` and forwards to the `Assembly` overload at -`:187-279`, which runs nine Scrutor scans plus FluentValidation's assembly scan: domain event handlers -(singleton, `:193-197`), integration event handlers (singleton, `:200-204`), `IEntityDTOMapper<,,>` -(scoped, `:206-210`), `IEntityDTOProjector<,,>` (scoped, `:215-219`, optional and opt-in per entity), -`IEntityRequestMapper<,,>` (scoped, `:221-225`), `IEntityUpdateApplier<,,>` (scoped, `:231-235`), -`IEntityUpdateCommandApplier<,,,>` (scoped, `:240-244`), `ICommandHandler<,>` (scoped, `:246-250`), -`IQueryHandler<,>` (scoped, `:252-256`), then `services.AddValidatorsFromAssembly(moduleAssembly)` at -`:258` (the module scan does not use `AddValidatorsFromAssemblyContaining`, which appears only in the -framework-level `AddApplication` block at `:51`) plus `CommandRequestValidator` auto-registration for -`ICommandWithRequest<>` (block `:262-276`, `TryAddTransient` at `:275`). The two update-applier scans and -the appliers bullet in the body are added this run; the method also opens with -`ThrowIfPipelineSealed(services, nameof(ScanModuleApplicationServices))` at `:190`. -`AddMmcaApplicationPipeline(Action?)` at `DependencyInjection.cs:620-629` -runs `services.AddApplication()` (`:624`), invokes the callback (`:626`) and returns -`services.AddApplicationDecorators()` (`:628`); its remarks at `:598-610` state that non-handler -registrations (infrastructure, API, telemetry, options) may stay outside the call. -`ThrowIfPipelineSealed` (`:723-733`) is what throws on a late registration, naming the caller, and -`VerifyDecoratorPipeline()` (`:657`) is the fitness-test hook. The canonical sequence and the sealing -requirement are the "DI Registration Sequence" section of `MMCA.Common/CLAUDE.md` (heading `:70`, -sequence text `:72`). In the real host, `services.AddInfrastructure(builder.Configuration);` is at -`MMCA.ADC.Conference.Service/Program.cs:325` and `services.AddAPI(moduleHost.ModulesSettings);` at -`:354`; `AddApplication()` and `AddApplicationDecorators()` are not host lines at all, they are the two -ends of the `AddMmcaApplicationPipeline` call at `:390-395`, which the host comment at `:359-364` -describes. The five host anchors carried by the previous ledger (`:302`, `:303`, `:323`, `:333`, `:369`) -are all replaced; the "decorators genuinely last" claim survives, the evidence for it did not. -Topology examples: ADC runs fleet-only, four single-module service hosts -(Identity/Conference/Engagement/Notification) behind a YARP gateway, its former combined -`MMCA.ADC.WebAPI` host deleted (`MMCA.ADC/CLAUDE.md:7`); MMCA.Helpdesk is the monolith-first reference -app, one `Tickets` module built to demonstrate "build the monolith now, extract a service later" -(`MMCA.Helpdesk/CLAUDE.md:7-16`). ADR-059 records the `IModule` composition contract itself (five -members, three defaulted; reflection discovery; Kahn ordering; stub-not-absence for a disabled module) -as its own decision, since ADR-008 and ADR-006 treat `ModuleLoader` as pre-existing context rather than -deciding it (`Website/docs-src/adr/059-module-contract-and-composition.md:22-25`). Code blocks in this -article are illustrative of the documented shape: the host snippet mirrors `Program.cs:349-352` and -`:390-391` with the ADC-specific pipeline steps elided.* +*Notes: re-verified against source this run (2026-10-02 apply pass, MMCA.Common v1.221.0). Four claims +changed meaning. (1) Scan guard: `DiscoverAndRegister` scans `moduleAssemblies` at +`MMCA.Common.Application/Modules/ModuleLoader.cs:74-95` with TWO catches, a typed +`catch (ReflectionTypeLoadException ex)` at `:81-88` that keeps the loaded types +(`ex.Types.OfType()` at `:87`) and logs at Error through `LogAssemblyPartiallyLoaded` +(`:352-353`), and a broad `catch (Exception ex)` at `:89-93` that returns no types and logs at Error +through `LogAssemblyScanFailed` (`:349-350`); the rationale comment is `:69-73`. The body previously said +a broken assembly contributes no types, which holds only for the broad catch. (2) Fleet topology: every +ADC service host names ONLY its own module assembly (`MMCA.ADC.Conference.Service/Program.cs:366`, +`MMCA.ADC.Engagement.Service/Program.cs:211`, `MMCA.ADC.Identity.Service/Program.cs:255`, +`MMCA.ADC.Notification.Service/Program.cs:189`; `MMCA.ADC/AGENTS.md:43`), so peers are never discovered +and no disabled stub is registered there, even though Conference's appsettings disables Engagement +(`MMCA.ADC.Conference.Service/appsettings.json:21,24`). `AddEngagementBookmarkCountClient` is a +pipeline step at `Program.cs:412` and calls +`services.Replace(ServiceDescriptor.Scoped())` at +`MMCA.ADC.Engagement.Contracts/DependencyInjection.cs:49`; the host comments at `Program.cs:34-39` and +`:385-389` state that no Engagement stub exists in this host. The body previously said the host +replaces a stub with a gRPC client; it now says the host adds the adapter and frames the stub path as the +name-and-disable shape. (3) Disabled-module example: the handler is +`GetSessionBookmarkCountsHandler` (plural, `Conference.Application/Speakers/UseCases/GetSessionBookmarkCounts/GetSessionBookmarkCountsHandler.cs:17`, +`IBookmarkCountService` parameter `:19`); the stub is real (`EngagementModule.cs:30-33`, registering +`DisabledBookmarkCountService` at `:32`) and the example is now framed for a host that names the +Engagement assembly and disables it. The Conference host comments still spell the handler singular +(`Program.cs:34`, `:385`); the article follows the class. (4) "A forgotten stub is caught at startup" +was UNVERIFIABLE and is removed: no `ValidateOnBuild` appears in Common or ADC source and the loader does +not check stub coverage. Added instead: `ValidateRemoteDependencies(IServiceProvider)` at +`ModuleLoader.cs:212` (doc `:198-211`, stub capture `:118-120`, throw `:244-249`, still-stub warning +`:251-255`/`:355-356`), stated as opt-in because no ADC host calls it. Also added: a module absent from +the `Modules` section is disabled (`Settings/ModulesSettings.cs:13-19`). +Other anchors re-verified this run: `ModuleLoader` `sealed partial class` `:16`, `DisabledModuleNames` +`:28`, `Logger` (default `NullLogger`) `:34`, `moduleAssemblies` XML doc `:49-54` (the `AppDomain` +rationale), `DiscoverAndRegister` six-parameter signature `:59-65`, `IModule`/`IModuleSeeder` +instantiation `:97-105`, `TopologicalSort(allModules)` call `:108`, disabled branch `:112-123` +(`RegisterDisabledStubs` `:119`, name recorded `:122`), `ValidateModuleDependencies` `:136-169` +(remote-satisfied comment `:138-141`, throw `:150-158`), `modules.{name}.json` `:185` and the +environment variant `:188`, `SeedAllAsync` `:266`, Kahn `TopologicalSort` `:282-332` (zero-in-degree seed +`:306-307`, decrement and enqueue `:316-320`, cycle throw `:324-329`), `[LoggerMessage]` declarations +`:334-356`. `IModule` members at `IModule.cs:12,17,23,28,34`; `IModuleSeeder.ModuleName`/`SeedAsync` at +`IModuleSeeder.cs:13,18`. `ModulesSettings : Dictionary` and `SectionName = +"Modules"` at `ModulesSettings.cs:7,10`; `ModuleSettings.Enabled` (default `true`) and +`RemoteDependencies` at `ModuleSettings.cs:9,38`. `AddModuleHost` at +`MMCA.Common.API/Startup/ModuleHostExtensions.cs:51` binds and validates both settings (`:62-64`, +`:70-72`), registers the loader (`:82`) and returns the `ModuleHostContext` (`:84`); it is shipped API +(`MMCA.Common.API/PublicAPI.Shipped.txt:398,564`, no longer in Unshipped). +`ModuleHostContext.RegisterModules` at `ModuleHostContext.cs:66`. The convention scan lives in +`MMCA.Common.Application/DependencyInjection.ModuleScanning.cs`: generic `:28`, `Assembly` overload `:46`, +`ThrowIfPipelineSealed` `:49`, domain event handlers `:54`, integration event handlers `:61`, +`IEntityDTOMapper<,,>` `:67`, `IEntityDTOProjector<,,>` `:76`, `IEntityRequestMapper<,,>` `:82`, +`IEntityUpdateApplier<,,>` `:92`, `IEntityUpdateCommandApplier<,,,>` `:101`, `ICommandHandler<,>` `:107`, +`IQueryHandler<,>` `:113`, `AddValidatorsFromAssembly` `:117`, `ICommandWithRequest<>` block `:119-134` +(`TryAddTransient` `:134`); `AddValidatorsFromAssemblyContaining` appears only in `AddApplication` at +`DependencyInjection.cs:48`. `AddMmcaApplicationPipeline` at `DependencyInjection.cs:207-216` +(`AddApplication()` `:211`, callback `:213`, `AddApplicationDecorators()` `:215`), remarks `:185-206` with +the non-handler note at `:195-196`, `VerifyDecoratorPipeline()` `:244`, `ThrowIfPipelineSealed` `:310` +(also called from `DependencyInjection.Crud.cs:80` for `AddEntityCrud` and `:193` for +`AddEntityUpdate`). Conference host: `AddInfrastructure` `Program.cs:340`, "deliberately does NOT run +discovery" `:356-359`, "no AppDomain scan" `:361-363`, `AddModuleHost` `:364-367`, `AddAPI` `:369`, +pipeline comment `:374-409`, `AddMmcaApplicationPipeline` `:410-413` with `RegisterModules` at `:411`; +the snippets mirror `:364-367` and `:410-411` with ADC-specific steps elided. `EngagementModule` +`Dependencies => ["Conference"]` `:20`, `RequiresDependencies => true` `:23`. Topology: ADC four +single-module hosts behind YARP, no single WebAPI host (`MMCA.ADC/AGENTS.md:7`); Helpdesk monolith-first, +one `Tickets` module, "build the monolith now, extract a service later" (`MMCA.Helpdesk/AGENTS.md:7`). +Both repos' `CLAUDE.md` are `@AGENTS.md` imports, so the grounding cites `AGENTS.md`. The header no +longer cites the "DI Registration Sequence" section of `MMCA.Common/AGENTS.md`: its text says +`AddMmcaApplicationPipeline` runs `AddInfrastructure` and `AddAPI`, which `DependencyInjection.cs:211-215` +does not; the body follows the code (source-doc drift, not fixed here). ADR-059 Decision +(`Website/docs-src/adr/059-module-contract-and-composition.md:22-25`) and the `ConferenceModule` shape are +carried as CONFIRMED by this cycle's audit, not re-read in the apply pass.* diff --git a/docs-src/articles/series-index.md b/docs-src/articles/series-index.md index f6a14c1c..bfe14d67 100644 --- a/docs-src/articles/series-index.md +++ b/docs-src/articles/series-index.md @@ -1,9 +1,10 @@ # The MMCA series: every pattern, one place > Series: MMCA.Common · Article #53 (index / hub) · Pillar P6 · Rubric: all · -> Status: grounded in the 53 `Article-NN-*` files in this folder (each article's own H1 and number). -> No em dashes. Articles 1 to 49 and this index carry their live Medium URLs; Articles 50, 51 and 52 -> are listed without a link because they are not published yet. +> Status: grounded in the 53 slug-named article files in this folder (each article's own H1 and +> `Article #N` header) and `Website/assets/data/articles.js` (one row per article, `n` 1 to 53). +> No em dashes. Every entry links to the article's site page, the canonical copy; articles 1 to 49 and +> this index also have a Medium copy, while articles 50, 51 and 52 are published on the site only. **Subtitle:** A single map of the whole series. Start at the top if MMCA.Common is new to you, or jump straight to the pattern you came for. @@ -53,7 +54,7 @@ become its own service later without a rewrite. - 10 · [Database-per-service inside a monolith (and why)](database-per-service.md) - 11 · [One entity model, four databases: polyglot persistence behind a single attribute](polyglot-persistence.md) - 12 · [EF Core Include chains are a trap: navigation populators decouple eager loading](navigation-populators.md) -- 13 · [Optimistic concurrency you cannot opt out of: RowVersion from the database to a required If-Match](optimistic-concurrency-rowversion.md) +- 13 · [Optimistic concurrency with a required If-Match: RowVersion from the database to a 412](optimistic-concurrency-rowversion.md) - 14 · [Self-ordering modules: discovered, Kahn-ordered, and extractable](self-ordering-modules.md) - 15 · [Event-schema versioning: never silently reshape an event](event-schema-versioning.md) @@ -65,7 +66,7 @@ notifications, DTO mapping, browser session auth, the generic REST surface, defe encrypting PII columns at rest, the hardened response headers every host stamps, and the optional second factor, email-confirmation gate and stored permission grants that complete the identity story. -- 16 · [Cross-service auth without a shared secret: JWKS dual-fetch](jwks-cross-service-auth.md) +- 16 · [Cross-service auth without a shared secret: JWKS discovery](jwks-cross-service-auth.md) - 17 · [Password hashing done right: PBKDF2-SHA512, 600k iterations, timing-safe](password-hashing.md) - 18 · [Idempotency in one attribute: safe retries for HTTP APIs](idempotency-attribute.md) - 19 · [The self-invalidating cache that lives in the pipeline, not your handlers](self-invalidating-cache.md) @@ -139,36 +140,42 @@ then monthly evergreen.* *Tags: .NET, Software Architecture, C Sharp, Microservices, Programming* -*Notes: article numbers and titles match the 53 `Article-NN-*` files in this folder (each article's own -H1 and `Article #N` header), not the strategic calendar in `Medium-Campaign-Plan.md` (which runs a -different, shorter order). The 2026-09-19 refresh grew the series from 50 files to 53 and moved this hub -from 50 to 53: the governed LLM boundary -(`Personal/Medium/Articles/Article-50-governed-llm-boundary.md:1`) joined "Run, extract, and harden", -durable internal commands (`Article-51-durable-internal-commands.md:1`) joined "Core patterns", and the -identity completions (`Article-52-identity-completions.md:1`) joined "Auth, the API edge, and -cross-cutting"; all three are appends, so no earlier article renumbered. The same pass re-read every -`Article-NN-*.md` H1 in this folder and set each link text to it verbatim, which rewrote 29 of them -(articles 05 to 15, 17 to 21, 23, 26 to 28, 30, 31, 33 to 38 and 41). Four of those titles had changed -in their own articles that same day: 11 (`Article-11-polyglot-persistence.md:1`, three databases to -four), 13 (`Article-13-optimistic-concurrency-rowversion.md:1`, naming the required If-Match), 26 -(`Article-26-external-oauth-login.md:1`, Apple added) and 27 -(`Article-27-jwt-refresh-token-rotation.md:1`, per-device rotation). Article 35's link text carries the -2,254-test figure from its H1 (`Article-35-test-pyramid.md:1`); its Medium slug spells the figure the -story was published under and a published URL cannot be edited, so the URL is left alone. The -2026-07-25 coverage audit appended the saga-compensation deep-dive (ADR-054), Article 49, and moved this -hub from 49 to 50. The 2026-07-23 coverage audit appended four dedicated articles, promoting -patterns previously covered only in passing: feature flags in the CQRS pipeline (ADR-031), Article 45; -field-level encryption (ADR-037), Article 46; security headers + CSP (ADR-023), Article 47; and -observability (ADR-041), Article 48; this hub moved from 45 to 49. The 2026-07-21 coverage audit -inserted Article 27 (the JWT rotating refresh token, a deep-dive on ADR-050) into the auth cluster right -after external OAuth login, renumbering every later article +1 and moving this hub from 44 to 45; the -reading-order groups and the "Where to go next" pointers were reconciled to the new numbering. Earlier -growth: the 2026-07-15 audit added the device-capability deep-dive (ADR-042 + the G26 device-capability -group), now Article 42, and the 2026-07-17 audit added managed file storage (ADR-045), now Article 43, -and HTTP API versioning (ADR-046), now Article 44. Articles 1 to 49 were filled with their live Medium -URLs on 2026-08-19 and this index published 2026-08-20 -(`Website/assets/data/articles.js:88`, non-empty url and date); Articles 50, 51 and 52 have no row in -that file and no Medium URL yet, so they are listed here without a link. Re-check the file set before -publishing in case the running order shifts.* +*Notes: 2026-10-02 refresh (framework v1.221.0, 131 ADRs 001-131; no new article this run, ADR-131 +was folded into Article 25, so the series stays at 53). Evidence read this run: the folder holds 53 +slug-named article files plus `README.md` (no `Article-NN-*` files; the number lives only in each +file's line-3 `Article #N` header), and a scripted pass compared all 52 list entries against their +targets: every link resolves to an existing slug, every link text equals the target's line-1 H1 verbatim, +and every list number equals the target's `Article #N`. `Website/assets/data/articles.js` has 53 rows +ending at n:53 (`articles.js:92`, this index: date 2026-08-20, Medium url set); rows n:1 to n:49 carry a +Medium url (n:49 at `articles.js:88`), and rows n:50, n:51 and n:52 (`articles.js:89`, `:90`, `:91`) +carry the site date 2026-09-24 and an empty Medium url, so the header now says those three are +site-only rather than unpublished, and the earlier "listed without a link" wording is gone (all 52 +entries link to their site page). `README.md:7` heads "The series (53 articles)". Body facts re-checked: +Apache-2.0 (`MMCA.Common/Directory.Build.props:49`), .NET 10 (`Directory.Build.props:3`), repo URL +(`Directory.Build.props:50`), the 34-category rubric (last category at +`Website/docs-src/governance/ArchitectureEvaluationCriteria.md:890`), `dotnet new mmca-app` +(`MMCA.Helpdesk/.template.config/template.json:7`), `MMCA.Common.API` (`MMCA.Common/FACTS.md:29`), the +three `Website/docs-src/governance/*-ArchitectureScorecard.md` files and `Website/writing.html` exist. +Article 35's link text carries the 2,254-test figure only because it reproduces that article's H1 +(`test-pyramid.md:1`); this hub asserts no test count of its own, and the figure is owned and verified +by Article 35 (FACTS.md carries no total test count). `Personal/Medium/` (including +`Medium-Campaign-Plan.md`) is retired (`Personal/Medium/README.md:3`), so this hub no longer measures +its order against that calendar. History: the 2026-09-19 refresh grew the series from 50 to 53 and moved +this hub from 50 to 53: the governed LLM boundary (`governed-llm-boundary.md`) joined "Run, extract, and +harden", durable internal commands (`durable-internal-commands.md`) joined "Core patterns", and the +identity completions (`identity-completions.md`) joined "Auth, the API edge, and cross-cutting"; all +three are appends, so no earlier article renumbered. That pass also re-set 29 link texts to their H1s +(articles 05 to 15, 17 to 21, 23, 26 to 28, 30, 31, 33 to 38 and 41), four of them retitled that day: +11 (three databases to four), 13 (naming the required If-Match), 26 (Apple added) and 27 (per-device +rotation). The 2026-07-25 coverage audit appended the saga-compensation deep-dive (ADR-054), Article 49, +and moved this hub from 49 to 50. The 2026-07-23 coverage audit appended feature flags in the CQRS +pipeline (ADR-031), Article 45; field-level encryption (ADR-037), Article 46; security headers + CSP +(ADR-023), Article 47; and observability (ADR-041), Article 48; this hub moved from 45 to 49. The +2026-07-21 coverage audit inserted Article 27 (the JWT rotating refresh token, ADR-050) right after +external OAuth login, renumbering every later article +1 and moving this hub from 44 to 45. Earlier +growth: the 2026-07-15 audit added the device-capability deep-dive (ADR-042, G26), now Article 42, and +the 2026-07-17 audit added managed file storage (ADR-045), now Article 43, and HTTP API versioning +(ADR-046), now Article 44. Articles 1 to 49 gained Medium copies by 2026-08-19 and this index on +2026-08-20. Re-check the file set and `articles.js` before publishing in case the running order shifts.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/session-cookie-auth-blazor-ssr.md b/docs-src/articles/session-cookie-auth-blazor-ssr.md index 000e1886..52d3bdf9 100644 --- a/docs-src/articles/session-cookie-auth-blazor-ssr.md +++ b/docs-src/articles/session-cookie-auth-blazor-ssr.md @@ -1,9 +1,11 @@ # Browser session-cookie auth for Blazor SSR: surviving the F5 -> Series: MMCA.Common · Article #25 (deep-dive) · Pillar P2/P4 · Groups G08, G15 · Rubric §11, §26 · ADR-022, ADR-069 · +> Series: MMCA.Common · Article #25 (deep-dive) · Pillar P2/P4 · Groups G08, G15 · Rubric §11, §26 · ADR-022, ADR-069, ADR-131 · > Status: grounded in `Website/docs-src/adr/022-browser-session-cookie-auth.md`, -> `Website/docs-src/adr/069-shared-data-protection-key-ring.md`, the `MMCA.Common.API/SessionCookies` -> source, the `MMCA.Common.Aspire` DataProtection extension, and the `MMCA.Common.UI` auth companion. +> `Website/docs-src/adr/069-shared-data-protection-key-ring.md`, +> `Website/docs-src/adr/131-same-origin-api-proxy.md`, the `MMCA.Common.API/SessionCookies` +> source, the `MMCA.Common.UI.Web/SameOriginProxy` source, the `MMCA.Common.Aspire` DataProtection +> extension, the `MMCA.Common.UI` auth companion, and both apps' Web UI hosts. > No em dashes. **Subtitle:** Your Blazor app authenticates with a bearer token. Then a user presses F5 on an @@ -45,14 +47,19 @@ that the cookie reader is for rendering only. The API stays the boundary. ## The MMCA answer: HttpOnly cookies plus an SSR-time reader -The mechanism ships in `MMCA.Common.API` (a `SessionCookies/` folder) with a `MMCA.Common.UI` companion, -and both apps' Web UI hosts wire it. It has four moving parts. +The mechanism ships in `MMCA.Common.API` (a `SessionCookies/` folder) with a `MMCA.Common.UI` companion +and a same-origin API proxy in `MMCA.Common.UI.Web`, and both apps' Web UI hosts wire all of it. It has +five moving parts. -**Two HttpOnly cookies, seeded from the client at login.** `mmca_auth_access` carries the JWT and -`mmca_auth_refresh` carries the refresh token (the names are constants on `SessionCookieEndpoints`). After a -successful login the browser POSTs to `/auth/session-cookie`, and `SessionCookieJar.Append` writes both -cookies HttpOnly with `SameSite=Lax`; logout DELETEs them. Because they are HttpOnly, no script can read -either one. +**Two HttpOnly cookies, written by the server.** `mmca_auth_access` carries the JWT and +`mmca_auth_refresh` carries the refresh token (the names are constants on `SessionCookieEndpoints`). +`SessionCookieJar` is the one writer: both cookies are HttpOnly, `Secure` outside Development, and carry +the `SameSite` mode from `SessionCookieSettings` (framework default `Lax`). Because they are HttpOnly, no +script can read either one. On a host that runs the same-origin proxy (both apps do), the UI host writes +the cookies itself: a sign-in from the WebAssembly client passes through the proxy, which moves the issued +pair into the cookies, and the Blazor Server circuit hands its tokens over as short-lived, data-protected +handoffs. The script-facing `POST /auth/session-cookie` therefore answers 204 without writing anything on +those hosts, and logout DELETEs the cookies. **An SSR-time scheme reads the access cookie, and deliberately does not validate its signature.** `SessionCookieAuthenticationHandler` (scheme `"SessionCookie"`) reads `mmca_auth_access` during prerender, @@ -89,16 +96,22 @@ reason: the cookie was minted by the UI host from a token the API already issued still fully validates the JWT** (the cross-service JWKS story from the auth article). The SSR handler only needs the user's claims to render the first paint; it is explicitly not the security boundary. -**The refresh token never leaves the server.** When the interactive client starts, it calls -`POST /auth/session/token`, a same-origin "validate-or-refresh" endpoint, to hydrate its in-memory access -token. `CookieSessionRefresher.GetOrRefreshAsync` reads the HttpOnly refresh cookie server-side, refreshes -the access token if it has expired, writes fresh cookies back, and returns **only** the access token and -its expiry. +**The browser holds a claims copy, never a credential.** When the interactive client starts, it calls +`POST /auth/session/token`, a same-origin "validate-or-refresh" endpoint, to learn who is signed in. +`CookieSessionRefresher.GetOrRefreshAsync` reads the HttpOnly refresh cookie server-side, refreshes the +access token if it has expired, writes fresh cookies back, and returns the access token and its expiry. +On a host where `SessionCookieSettings.ClaimsOnlyBrowserTokens` is set (the proxy sets it, so both apps +run this way), the endpoint does not hand that token over either: it returns `SessionClaimsToken.Create`, +the token's own payload under an `alg: none` header with an empty signature. The client can read the +user's claims and the expiry to render its auth state, and no API accepts it, because every API checks +signatures. ```csharp -// POST /auth/session/token: hydrate the in-memory access token; the refresh token never leaves the server. +// POST /auth/session/token: the refresh token never leaves the server, and a claims-only host +// never hands out the access token either. endpoints.MapPost("/auth/session/token", async ( - HttpContext httpContext, ICookieSessionRefresher refresher, CancellationToken cancellationToken) => + HttpContext httpContext, ICookieSessionRefresher refresher, + IOptions settings, CancellationToken cancellationToken) => { if (IsCrossSite(httpContext.Request)) // Sec-Fetch-Site CSRF guard { @@ -106,17 +119,36 @@ endpoints.MapPost("/auth/session/token", async ( } var result = await refresher.GetOrRefreshAsync(httpContext, cancellationToken).ConfigureAwait(false); - return result is null - ? Results.Json(new { error = "no_session" }, statusCode: StatusCodes.Status401Unauthorized) - : Results.Json(new SessionTokenResponse(result.Value.AccessToken, result.Value.AccessTokenExpiry)); + if (result is null) + { + return Results.Json(new { error = "no_session" }, statusCode: StatusCodes.Status401Unauthorized); + } + + var browserToken = settings.Value.ClaimsOnlyBrowserTokens + ? SessionClaimsToken.Create(result.Value.AccessToken) ?? string.Empty // unsigned claims copy + : result.Value.AccessToken; + return Results.Json(new SessionTokenResponse(browserToken, result.Value.AccessTokenExpiry)); }); ``` -The response is a `SessionTokenResponse(AccessToken, AccessTokenExpiry)`. The refresh token is never -serialized to the browser. On the UI side, `ITokenStorageService` keeps the access token **in memory** and -treats the refresh token as living only in the HttpOnly cookie, and `ISessionCookieSync` (implemented by -`JsFetchSessionCookieSync`) mirrors the client's tokens back into the cookies via a small JS shim so the -next prerender sees a current session. +The response is a `SessionTokenResponse(AccessToken, AccessTokenExpiry)`, and the refresh token is never +serialized to the browser. On the UI side, `ITokenStorageService` keeps what the client holds in memory, +never in `localStorage`; on these hosts that is the claims copy. + +**A same-origin proxy carries every browser API call (ADR-131).** A claims copy cannot call the API, so +the browser never calls the API directly. The WebAssembly client's API client and notification hub point +at `/api/**` on the UI host's own origin, and the UI host forwards each call to the gateway server-side +with the bearer it reads from the HttpOnly cookie. `AddCommonSameOriginApiProxy(IConfiguration)` +registers it: it sets the session cookies' `SameSite` mode from the proxy settings and turns on +claims-only browser tokens, registers YARP's forwarder, and replaces the Blazor Server circuit's +`ITokenRefresher` and `ISessionCookieSync` with handoff implementations, so the circuit keeps calling the +gateway server-to-server and trades tokens with the cookies only as protected handoffs. Before anything +is forwarded, the proxy endpoint refuses a cross-origin caller (403 `cross_origin_rejected`), requires an +`X-CSRF: 1` header on every unsafe method (403 `csrf_header_required`), and validates or refreshes the +session through `ICookieSessionRefresher.ValidateOrRefreshAsync`. When the identity endpoint is +unreachable it answers 503 `session_refresh_unavailable` and keeps the cookies, rather than signing the +user out over a blip. Both Web UI hosts register the proxy after their session-cookie wiring and map it +next to `MapSessionCookieEndpoints`. **A refresh middleware closes the expiry race.** `CookieSessionRefreshMiddleware` runs *before* `UseAuthentication` and, only on GET requests that accept HTML, refreshes the access token server-side if it @@ -124,19 +156,24 @@ has expired but the refresh cookie is still good. So a fresh GET after the acces authenticated, because the middleware has already minted a fresh access token (read by `CookieTokenReader` from `HttpContext.Items`) before the SSR scheme runs. -This is a backend-for-frontend (BFF) token-storage layer: the browser holds an HttpOnly session whose -refresh half it cannot read, the SSR pass authenticates from the access cookie without trusting it as the -boundary, and the real enforcement stays at the API. +This is a backend-for-frontend (BFF) layer: the browser holds an HttpOnly session it cannot read and a +claims copy that authorizes nothing, the SSR pass authenticates from the access cookie without trusting it +as the boundary, the UI host attaches the real bearer on the way to the gateway, and the real enforcement +stays at the API. ## The CSRF tax, and how it is paid Cookie-based auth reintroduces a concern that a pure bearer-header design does not have: a cross-site page can cause the browser to send your cookies. The framework pays that tax with defense-in-depth rather than a -single control. The cookies are `SameSite=Lax`, so they are not sent on cross-site subrequests. The -refresh endpoint additionally rejects cross-site POSTs by checking the `Sec-Fetch-Site` header -(`IsCrossSite`). The cookie endpoints disable antiforgery deliberately (they carry no antiforgery token and -are guarded by `SameSite` + `Sec-Fetch-Site` + POST-only instead). Three overlapping checks, none of them -load-bearing alone. +single control, at two layers. On the session endpoints, the cookies carry a `SameSite` mode (framework +default `Lax`, so they are not sent on cross-site subrequests), the refresh endpoint rejects cross-site +POSTs by checking the `Sec-Fetch-Site` header (`IsCrossSite`), and the cookie endpoints disable antiforgery +deliberately (they carry no antiforgery token and are guarded by `SameSite` + `Sec-Fetch-Site` + POST-only +instead). On the proxied data path, the same-origin check and the `X-CSRF` header carry CSRF: a custom +header cannot be sent cross-origin without a preflight, and the proxy answers `OPTIONS` itself with no +CORS grant. That makes `SameSite` a usability choice there rather than the CSRF control. The proxy +defaults it to `Strict`; both apps choose `Lax`, so a signed-in user following a mailed deep link keeps +the session on the first server render. Overlapping checks, none of them load-bearing alone. ## Scaling out: the key ring has to be shared @@ -163,8 +200,7 @@ registers no DataProtection services at all. A developer machine, a test host an single-process, keep the in-memory default, and take no Azure dependency at startup. Adoption is per host, and the shape of it is worth saying plainly. MMCA.ADC calls it on exactly the two -hosts that mint those payloads, its Identity service and its Web UI host, and points both at one private -container on a storage account it already had. MMCA.Store's Web UI host calls it as well, on a storage +hosts that mint those payloads, its Identity service and its Web UI host. MMCA.Store's Web UI host calls it as well, on a storage account provisioned for this and nothing else, with one extra catch on the infrastructure side: the blob URI is injected only when a `dataProtectionStorageReady` parameter is true (it defaults to false), because `AddCommonDataProtection` gates on the *presence* of the URI and never on its reachability, so wiring the @@ -181,11 +217,16 @@ The pattern fixes a real gap, and the §26 review names what it costs. host-minted and the API independently validates every call. Authorize a sensitive action on the SSR principal *without* an API round-trip and you have broken the safety argument. The rule "the API is the boundary" is not a nicety here, it is the whole proof. -- **The session now lives in two places.** Cookies for browser GETs and SSR, an in-memory bearer token for - interactive API calls. The two must stay in sync, which is exactly what `/auth/session/token` and the UI's - `ISessionCookieSync` exist to manage. A bug in that sync shows up as a flicker of the wrong auth state. -- **CSRF surface a header-only design would not have.** `SameSite=Lax` plus `Sec-Fetch-Site` plus POST-only - is solid, but it is a surface, and a reviewer has to understand all three to trust the cookie endpoints. +- **The UI host becomes part of the API path.** Every browser API call and hub frame passes through the UI + host before the gateway, which is one extra hop, and the UI host owns refresh, the refresh race and + cookie rotation for browser traffic. A UI host outage takes the browser's API path down with it, and the + UI host's rate limiter meters API traffic as well as pages. +- **The proxy removes theft, not use.** An injected script runs same-origin and passes both proxy gates, + so it can still act as the user while the page is open; it just cannot carry a token away. Content + Security Policy stays the control for that. +- **CSRF surface a header-only design would not have.** `SameSite` plus `Sec-Fetch-Site` plus POST-only on + the session endpoints, and an origin gate plus `X-CSRF` on the proxy, is solid, but it is a surface, and + a reviewer has to understand both layers to trust it. - **Expiry is checked, not cryptographically enforced, at the SSR edge.** A tampered cookie produces claims that fail at the API on the next call, but the one prerendered HTML pass is produced from unverified claims. For rendering, that is acceptable; for a decision, it is not, which loops back to the first point. @@ -207,20 +248,22 @@ The shape ports to any server-prerendered SPA with token auth: 2. **Let the prerender pass read claims, not verify them, and make the API the only validator.** A parse-don't-validate reader is safe only if a real validation boundary sits behind every state-changing call. Write that invariant down. -3. **Keep the refresh token server-side behind a hydrate endpoint.** The browser asks a same-origin - endpoint for a fresh access token; the refresh token is exchanged on the server and never serialized to - the client. +3. **Keep every credential server-side and proxy the API through the UI origin.** The browser asks a + same-origin endpoint for its session state and gets an unsigned claims copy; its API calls go to the UI + host, which attaches the real bearer from the HttpOnly cookie on the way to the API. The refresh token + is exchanged on the server and never serialized to the client. 4. **Refresh before authentication on GETs.** A small middleware that mints a fresh access token before the auth handler runs closes the "expired between requests" gap without a client round-trip. -5. **Budget for CSRF.** Cookies bring it back. `SameSite=Lax` plus a `Sec-Fetch-Site` check plus POST-only - endpoints is a defensible, layered answer. +5. **Budget for CSRF.** Cookies bring it back. `SameSite` plus a `Sec-Fetch-Site` check plus POST-only + endpoints protects the session endpoints, and a strict same-origin check plus a custom header protects a + cookie-authenticated proxy: a defensible, layered answer. 6. **Share the key ring before you scale out.** The moment a cookie-minting host runs more than one replica, per-process keys become random sign-outs. Persist the ring to one shared store with an application discriminator, and keep encryption of the ring at rest as a separate switch so a lagging role assignment costs you hardening rather than login. The takeaway: **the SSR prerender gap is real, and the fix is an HttpOnly cookie the server can read plus -the discipline that reading it is for rendering, never for deciding. Keep the refresh token off the client, +the discipline that reading it is for rendering, never for deciding. Keep every credential off the client, keep the API as the one validator, and an `[Authorize]` page survives an F5 without weakening anything.** --- @@ -228,8 +271,9 @@ keep the API as the one validator, and an `[Authorize]` page survives an F5 with **What we covered:** why a Blazor Web App's SSR prerender pass bounces `[Authorize]` pages to login on a fresh GET (no `Authorization` header, no server-readable token), how MMCA.Common closes the gap with two HttpOnly cookies, a `SessionCookieAuthenticationHandler` that reads claims for prerender without validating -the signature, a server-side `/auth/session/token` refresher that keeps the refresh token off the client, -and a pre-auth refresh middleware, why the design is safe only because the API stays the validation +the signature, a server-side `/auth/session/token` refresher that hands the browser only an unsigned +claims copy, a same-origin API proxy (ADR-131) that attaches the real bearer server-side, and a pre-auth +refresh middleware, why the design is safe only because the API stays the validation boundary, why a scaled-out cookie host also needs a shared DataProtection key ring (ADR-069, adopted by both apps, with Store's blob URI gated behind a readiness flag), and the CSRF and dual-path costs that buys. @@ -298,6 +342,7 @@ substance) is now `Website/docs-src/governance/common-ArchitectureScorecard.md:8 2026-08-07: re-verified every named type and behavior against current source (framework v1.142.0, `MMCA.Common/FACTS.md:4,14`; 15 published packages, `FACTS.md:19`), corrected six shifted anchors, and added the ADR-069 shared DataProtection key-ring section. Re-confirmed unchanged in source: cookie constants `mmca_auth_access` / `mmca_auth_refresh` (`SessionCookieEndpoints.cs:17-18`), `MapSessionCookieEndpoints` (`:22`) mapping POST/DELETE `/auth/session-cookie` (`:29,35`, both `DisableAntiforgery()`) and POST `/auth/session/token` (`:45`), the `IsCrossSite` Sec-Fetch-Site guard (`:68`) and the `SessionCookieRequest` record (`:72`); `SessionCookieJar.Append`/`Delete` (`SessionCookieJar.cs:16,23`) writing `HttpOnly = true` (`:33`) and `SameSite = SameSiteMode.Lax` (`:35`) from `BuildOptions` (`:31`); `SessionCookieAuthenticationHandler` scheme `"SessionCookie"` (`:32`), `HandleAuthenticateAsync` (`:35`) still parsing with `ReadJwtToken` and not `ValidateToken` (`:51`) and comparing `jwt.ValidTo` to `TimeProvider.GetUtcNow().UtcDateTime` (`:55`), the no-signature-check `` (`:18-23`), `AddSessionCookieAuthentication` (`:98`); `SessionTokenResult` / `SessionTokenResponse` (`CookieSessionRefresher.cs:12,18`); `CookieTokenReader.ReadAccessToken` reading `HttpContext.Items` first then the cookie (`CookieTokenReader.cs:19,27-33`, `FreshAccessTokenItemKey` `:17`, `ReadRefreshToken` `:36`); `CookieSessionRefreshMiddleware.InvokeAsync` running before `UseAuthentication` and gated to GET + `Accept: text/html` (`CookieSessionRefreshMiddleware.cs:16,28-31`, `UseCookieSessionRefresh` `:43`); `AddServerAuthSessionCookie(apiBaseAddress)` (`MMCA.Common.API/DependencyInjection.cs:141`); UI companion `ISessionCookieSync` (`ISessionCookieSync.cs:8,10,12`), `ITokenStorageService` (access token in memory, refresh token in an HttpOnly cookie, never localStorage; `ITokenStorageService.cs:5-6,8`), `JsFetchSessionCookieSync` mirroring through `mmcaAuthCookie.set` / `mmcaAuthCookie.clear` (`JsFetchSessionCookieSync.cs:11,20,32`); the Store wiring (`MMCA.Store/Source/Hosts/UI/MMCA.Store.UI.Web/Program.cs:91,92,160,176`); and both quoted code blocks (`SessionCookieAuthenticationHandler.cs:37-63`, `SessionCookieEndpoints.cs:45-57`). Corrected anchors (behavior and values unchanged): `ICookieSessionRefresher.GetOrRefreshAsync` `:33`→`:34`, its implementation `:55`→`:61`, `RefreshAsync` `:86`→`:92` and the access-token-only return `:83`→`:89` (`CallRefreshAsync` `:110` unchanged); `AddClientAuthSessionCookieSync()` `:111`→`:119` and `TryAddScoped` `:113`→`:121` (`MMCA.Common.UI/DependencyInjection.cs`); the MMCA.ADC wiring, not re-checked on 2026-08-01, is now `AddServerAuthSessionCookie` `:59`, `AddClientAuthSessionCookieSync` `:60`, `UseCookieSessionRefresh` `:129`, `MapSessionCookieEndpoints` `:148` (`MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web/Program.cs`, was `:58,61,128,147`); §26 Front-End Security (Maturity 4 / Implementation 8, unchanged substance) `:94`→`Website/docs-src/governance/common-ArchitectureScorecard.md:96`; the MMCA.Common two-axis index `:108`/`:109`→`:110`/`:111`, with the "N/A (excluded from denominators): none" bullet `:112`→`:114`. The twenty-sixth-wave re-score (2026-08-07, pinned at v1.142.0) moved no scores: Maturity holds at 96.9% (314/324) and Implementation at 84.8% (687/810), and a proposed §26 Implementation 8→9 was among the six lifts refuted on adversarial re-verification. The ADR corpus is now seventy ADRs, range 001-070 (last row [070] fail-fast-configuration-contract, `Website/docs-src/adr/README.md:77`; was sixty-four, range 001-064); ADR-022 and ADR-036 both still exist and still match the body. New this run: the shared-key-ring section is grounded in `Website/docs-src/adr/069-shared-data-protection-key-ring.md` (index row `README.md:76`) and `MMCA.Common/Source/Hosting/MMCA.Common.Aspire/DataProtection/DataProtectionExtensions.cs` (`AddCommonDataProtection` `:52`, the gate-1 configuration key `:54` and the absent-config no-op return `:59-62`, the application discriminator `:64-65,71`, one `DefaultAzureCredential` for both sinks `:68`, `PersistKeysToAzureBlobStorage` `:72`, the deliberately independent gate-2 rationale `:74-80` and `ProtectKeysWithAzureKeyVault` `:81-85`); ADC adopts it at `MMCA.ADC/Source/Services/MMCA.ADC.Identity.Service/Program.cs:118` and `MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web/Program.cs:31`, while MMCA.Store has no call site anywhere in its source and its UI container app still runs `maxReplicas: 2` (`MMCA.Store/infra/main.bicep:1169`); "persisted but not encrypted at rest" is ADR-069's own recorded trade-off (`069-shared-data-protection-key-ring.md:105-107`). 2026-08-14: re-verified every named type and behavior against current source (framework v1.152.0, `MMCA.Common/FACTS.md:14`, was v1.142.0; 15 published packages, `FACTS.md:19`), rewrote the adoption paragraph after a substantive change, and corrected fourteen shifted anchors. Substantive: MMCA.Store adopted the shared key ring on 2026-08-13, so "MMCA.Store does not call it anywhere" is false. Its Web UI host now calls `AddCommonDataProtection()` (`MMCA.Store/Source/Hosts/UI/MMCA.Store.UI.Web/Program.cs:82`, immediately after `AddServiceDefaults()` at `:76`) against a storage account provisioned only for the key ring (`MMCA.Store/infra/main.bicep:783-801`, private `dataprotection-keys` container `:808-814`), and the `DataProtection__BlobStorageUri` env var is appended only when the `dataProtectionStorageReady` parameter is true (declared `bool = false` at `:93`, concatenated at `:1467-1469`); production passes `"dataProtectionStorageReady": {"value": true}` in its base parameters (`MMCA.Store/.github/workflows/deploy.yml:961`). `DataProtection__ApplicationName` `'MMCA.Store'` (`:1464`) and `AZURE_CLIENT_ID` (`:1466`) are unconditional. The Store UI container app still runs `maxReplicas: 2` (`main.bicep:1481`; the `:1169` citation was stale) and Store's Identity service (`identityApp`, `:939-1090`, `maxReplicas: 2` at `:1083`) still has no call site: the repo-wide grep for `AddCommonDataProtection` under `MMCA.Store/Source` returns exactly one hit. ADR-069 records the both-consumers state and the readiness-flag rationale at `Website/docs-src/adr/069-shared-data-protection-key-ring.md:91-110`, and the "persisted but not encrypted at rest" trade-off moved to `:60-61` (was `:105-107`; `DataProtection__KeyVaultKeyUri` is still deliberately unset, `MMCA.Store/infra/main.bicep:1445`). The "What we covered" recap was updated to match. Corrected anchors (behavior and values unchanged): ADC's `AddCommonDataProtection` calls `MMCA.ADC/Source/Services/MMCA.ADC.Identity.Service/Program.cs:118`→`:126` and `MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web/Program.cs:31`→`:40`; `AddServerAuthSessionCookie(apiBaseAddress)` `MMCA.Common.API/DependencyInjection.cs:141`→`:151`; `SessionTokenResult` `CookieSessionRefresher.cs:12`→`:14` and `SessionTokenResponse` `:18`→`:20`, with `ICookieSessionRefresher.GetOrRefreshAsync` `:34`→`:36`, its implementation `:61`→`:64`, the access-token-only return `:89`→`:92`, `RefreshAsync` `:92`→`:95` and `CallRefreshAsync` `:110`→`:113`; the session-cookie wiring in both apps, `MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web/Program.cs:59,60,129,148`→`:68,69,138,157` and `MMCA.Store/Source/Hosts/UI/MMCA.Store.UI.Web/Program.cs:91,92,160,176`→`:109,110,178,194`; §26 Front-End Security (Maturity 4 / Implementation 8, unchanged substance) `Website/docs-src/governance/common-ArchitectureScorecard.md:96`→`:98` (line 96 is now §24 Forms, Validation & UX Safety); the MMCA.Common two-axis index `:110`/`:111`→`:112`/`:113`, with the "N/A (excluded from denominators): none" bullet `:114`→`:116`. The twenty-seventh-wave full re-score (2026-08-14, framework v1.152.0, git HEAD `3ba8d13`, clean tree; `common-ArchitectureScorecard.md:5,67`) moved no score: Maturity holds at 96.9% (314/324) and Implementation at 84.8% (687/810), and a proposed §26 Implementation 8→9 was again refuted on adversarial re-verification. Re-confirmed unchanged in source: cookie constants `mmca_auth_access` / `mmca_auth_refresh` (`SessionCookieEndpoints.cs:17-18`), `MapSessionCookieEndpoints` (`:22`) mapping POST/DELETE `/auth/session-cookie` (`:29,35`, `DisableAntiforgery()` at `:33,39`) and POST `/auth/session/token` (`:45`, its own `DisableAntiforgery()` `:60`), the `IsCrossSite` Sec-Fetch-Site guard (`:68`) and the `SessionCookieRequest` record (`:72`); `SessionCookieJar.Append`/`Delete` (`SessionCookieJar.cs:16,23`) writing `HttpOnly = true` (`:33`) and `SameSite = SameSiteMode.Lax` (`:35`) from `BuildOptions` (`:31`); `SessionCookieAuthenticationHandler` scheme `"SessionCookie"` (`:32`), `HandleAuthenticateAsync` (`:35`) still parsing with `ReadJwtToken` and not `ValidateToken` (`:51`, no `ValidateToken` call anywhere in the file) and comparing `jwt.ValidTo` to `TimeProvider.GetUtcNow().UtcDateTime` (`:55`), `AddSessionCookieAuthentication` (`:98`); `CookieTokenReader.ReadAccessToken` reading `HttpContext.Items` first then the cookie (`CookieTokenReader.cs:19,27-33`, `FreshAccessTokenItemKey` `:17`, `ReadRefreshToken` `:36`); `CookieSessionRefreshMiddleware.InvokeAsync` before `UseAuthentication`, gated to GET + `Accept: text/html` (`CookieSessionRefreshMiddleware.cs:16,28-31`, `UseCookieSessionRefresh` `:43`); UI companion `ISessionCookieSync` (`ISessionCookieSync.cs:8,10,12`), `ITokenStorageService` (access token in memory, refresh token mirrored to an HttpOnly cookie, never localStorage; `ITokenStorageService.cs:4-6,8`), `JsFetchSessionCookieSync` through `mmcaAuthCookie.set` / `mmcaAuthCookie.clear` (`JsFetchSessionCookieSync.cs:11,20,32`), `AddClientAuthSessionCookieSync` (`MMCA.Common.UI/DependencyInjection.cs:119`) and `TryAddScoped` (`:121`); `AddCommonDataProtection` (`DataProtectionExtensions.cs:52`) with the gate-1 configuration key (`:54`), the absent-config no-op return (`:59-62`), the application discriminator (`:64-65,71`), one `DefaultAzureCredential` for both sinks (`:68`), `PersistKeysToAzureBlobStorage` (`:72`), the deliberately independent gate-2 rationale (`:74-80`) and `ProtectKeysWithAzureKeyVault` (`:81-85`); and both quoted code blocks (`SessionCookieAuthenticationHandler.cs:37-63`, `SessionCookieEndpoints.cs:45-57`). The ADR corpus is now eighty-four ADRs, range 001-084 (last row [084] stripe-webhook-ingress, `Website/docs-src/adr/README.md:91`; was seventy, range 001-070); ADR-022 (`README.md:29`), ADR-036 (the external-OAuth teaser, `:43`) and ADR-069 (`:76`) all still exist and still match the body. 2026-08-19: re-verified the three drifted anchors this run (framework v1.154.0, `MMCA.Common/FACTS.md:14`, dated 2026-08-18 at `:4`; was v1.152.0). `AddServerAuthSessionCookie(apiBaseAddress)` shifted +9 lines to `MMCA.Common.API/DependencyInjection.cs:160` (was `:151`; body and behavior unchanged: `HttpContextAccessor`, `MemoryCache`, `CookieTokenReader`, `HttpClient` registration, singleton `ICookieSessionRefresher`). The ADR corpus is now eighty-nine ADRs, range 001-089 (last row [089] gateway-topology-owned-by-configuration, `Website/docs-src/adr/README.md:96`; was eighty-four, range 001-084); row [084] stripe-webhook-ingress is unchanged at `README.md:91` but is no longer the last row. ADR-022 (`README.md:29`) and ADR-036 both still exist and still match the body; this is corpus-growth drift in the trailing verification footnote, not a substantive claim about the article's mechanism. -2026-09-19: re-verified against current source (framework v1.205.0, `MMCA.Common/FACTS.md:4,14`, dated 2026-09-17, was v1.154.0; 19 published packages, `FACTS.md:19`, was 15, and the shared closing boilerplate reads nineteen) and corrected one body claim plus every anchor this audit flagged. Substantive: ADR-069's 2026-09-10 revision retires the "configured nowhere" framing, so "Today no deployed app sets the key-vault URI" is no longer a statement the repositories support. Gate 2 ships in both templates with its parameter defaulting to off (`Website/docs-src/adr/069-shared-data-protection-key-ring.md:165`), and the at-rest trade-off bullet reads "Both templates ship the path and both default it off (2026-09-10 revision) ... the deployed value of that variable is not readable from the repositories, so this record can state what ships and not what is enabled" (`:141-146`, was `:60-61`); the both-consumers-adopted block holds at `:92` and the readiness-flag bullet at `:103`. Store declares `param dataProtectionKeyVaultKeyUri string = ''` (`MMCA.Store/infra/main.bicep:103`) with the `hasDataProtectionKek` guard (`:124`) and a gated `DataProtection__KeyVaultKeyUri` env entry (`:2016`); ADC declares the same parameter (`MMCA.ADC/infra/main.bicep:145`) and the same gated env entry on two container apps (`:1697`, `:2425`). The body paragraph and its `.medium.md` mirror were rewritten to that current-state wording, and the "What we covered" recap dropped its before/after "now adopted". Corrected anchors (behavior and values unchanged): `MapSessionCookieEndpoints` holds at `SessionCookieEndpoints.cs:22` and the cookie-name constants at `:17-18`, but the group `MapPost`/`MapDelete` for `/auth/session-cookie` are `:34`/`:40` (were `:29,35`) with `DisableAntiforgery()` at `:38`/`:44` (were `:33,39`), POST `/auth/session/token` is `:50` (was `:45`) with its own `DisableAntiforgery()` at `:65`, `IsCrossSite` is `:73` (was `:68`) and the `SessionCookieRequest` record is `:77` (was `:72`); the second quoted code block is `SessionCookieEndpoints.cs:50-61` (was `:45-57`), its text unchanged, with the trailing `ExcludeFromDescription()`/`AllowAnonymous()`/`DisableAntiforgery()` chain ending at `:65` still trimmed out of the quote. `SessionTokenResult` is `CookieSessionRefresher.cs:15` (was `:14`), `SessionTokenResponse` `:21` (was `:20`), `ICookieSessionRefresher.GetOrRefreshAsync` `:37` (was `:36`), its implementation `:65` (was `:64`), the access-token-only return `:93` (was `:92`), `RefreshAsync` `:96` (was `:95`) and `CallRefreshAsync` `:114` (was `:113`). `AddServerAuthSessionCookie(string apiBaseAddress)` is `MMCA.Common.API/DependencyInjection.cs:174` (was `:160`); `AddClientAuthSessionCookieSync()` is `MMCA.Common.UI/DependencyInjection.cs:189` with `TryAddScoped` at `:191` (were `:119`/`:121`). Host wiring: `MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web/Program.cs:85,86,228,261` (was `:68,69,138,157`) and `MMCA.Store/Source/Hosts/UI/MMCA.Store.UI.Web/Program.cs:129,130,257,277` (was `:109,110,178,194`). The `AddCommonDataProtection` adoption set is still exactly three call sites: `MMCA.ADC/Source/Services/MMCA.ADC.Identity.Service/Program.cs:114` (was `:126`), `MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web/Program.cs:46` and `MMCA.Store/Source/Hosts/UI/MMCA.Store.UI.Web/Program.cs:70` immediately after `AddServiceDefaults()` at `:64` (were `:82` after `:76`). Store infra: the dedicated storage account is `MMCA.Store/infra/main.bicep:1132` with the private `dataprotection-keys` container at `:1157`, `param dataProtectionStorageReady bool = false` at `:97` (was `:93`), the `DataProtection__BlobStorageUri` gate at `:2008-2009` (was `:1467-1469`), `DataProtection__ApplicationName` `'MMCA.Store'` at `:2005` (was `:1464`) and the client-id env at `:2007` (was `:1466`); `uiApp` (`:1942`) runs `maxReplicas: 2` at `:2036` (was `:1481`) and `identityApp` (`:1390`, was `:939-1090`) at `:1559` (was `:1083`) with no call site; production still passes `"dataProtectionStorageReady": {"value": true}` (`MMCA.Store/.github/workflows/deploy.yml:1324`, was `:961`). Governance: Section 26 Front-End Security is Maturity 4 / Implementation 9 at `Website/docs-src/governance/common-ArchitectureScorecard.md:106` (was 4/8 at `:98`; the implementation lift landed in the thirtieth wave, 2026-08-31, so the first footnote's "impl 8, deliberately-partial default CSP" reading is superseded by the current row, which credits a centralized hardened security-headers middleware with a pluggable `ICspPolicyProvider` CSP extension). The MMCA.Common two-axis index is Maturity 97.0% = 318/328 (`:120`) and Implementation 86.0% = 705/820 (`:121`), with the "N/A (excluded from denominators): none this cycle" bullet at `:124` (was 96.9% = 314/324 at `:112` and 84.8% = 687/810 at `:113`); the thirty-sixth-wave full re-score (2026-09-19, v1.205.0) moved no score. The ADR corpus is 125 ADRs, range 001-125 (last row [125] parameterized-sql-only, `Website/docs-src/adr/README.md:137`; was eighty-nine, range 001-089); ADR-022 (`README.md:34`), ADR-036 (the external-OAuth teaser, `:48`) and ADR-069 (`:81`) all still exist and still match the body.* +2026-09-19: re-verified against current source (framework v1.205.0, `MMCA.Common/FACTS.md:4,14`, dated 2026-09-17, was v1.154.0; 19 published packages, `FACTS.md:19`, was 15, and the shared closing boilerplate reads nineteen) and corrected one body claim plus every anchor this audit flagged. Substantive: ADR-069's 2026-09-10 revision retires the "configured nowhere" framing, so "Today no deployed app sets the key-vault URI" is no longer a statement the repositories support. Gate 2 ships in both templates with its parameter defaulting to off (`Website/docs-src/adr/069-shared-data-protection-key-ring.md:165`), and the at-rest trade-off bullet reads "Both templates ship the path and both default it off (2026-09-10 revision) ... the deployed value of that variable is not readable from the repositories, so this record can state what ships and not what is enabled" (`:141-146`, was `:60-61`); the both-consumers-adopted block holds at `:92` and the readiness-flag bullet at `:103`. Store declares `param dataProtectionKeyVaultKeyUri string = ''` (`MMCA.Store/infra/main.bicep:103`) with the `hasDataProtectionKek` guard (`:124`) and a gated `DataProtection__KeyVaultKeyUri` env entry (`:2016`); ADC declares the same parameter (`MMCA.ADC/infra/main.bicep:145`) and the same gated env entry on two container apps (`:1697`, `:2425`). The body paragraph and its `.medium.md` mirror were rewritten to that current-state wording, and the "What we covered" recap dropped its before/after "now adopted". Corrected anchors (behavior and values unchanged): `MapSessionCookieEndpoints` holds at `SessionCookieEndpoints.cs:22` and the cookie-name constants at `:17-18`, but the group `MapPost`/`MapDelete` for `/auth/session-cookie` are `:34`/`:40` (were `:29,35`) with `DisableAntiforgery()` at `:38`/`:44` (were `:33,39`), POST `/auth/session/token` is `:50` (was `:45`) with its own `DisableAntiforgery()` at `:65`, `IsCrossSite` is `:73` (was `:68`) and the `SessionCookieRequest` record is `:77` (was `:72`); the second quoted code block is `SessionCookieEndpoints.cs:50-61` (was `:45-57`), its text unchanged, with the trailing `ExcludeFromDescription()`/`AllowAnonymous()`/`DisableAntiforgery()` chain ending at `:65` still trimmed out of the quote. `SessionTokenResult` is `CookieSessionRefresher.cs:15` (was `:14`), `SessionTokenResponse` `:21` (was `:20`), `ICookieSessionRefresher.GetOrRefreshAsync` `:37` (was `:36`), its implementation `:65` (was `:64`), the access-token-only return `:93` (was `:92`), `RefreshAsync` `:96` (was `:95`) and `CallRefreshAsync` `:114` (was `:113`). `AddServerAuthSessionCookie(string apiBaseAddress)` is `MMCA.Common.API/DependencyInjection.cs:174` (was `:160`); `AddClientAuthSessionCookieSync()` is `MMCA.Common.UI/DependencyInjection.cs:189` with `TryAddScoped` at `:191` (were `:119`/`:121`). Host wiring: `MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web/Program.cs:85,86,228,261` (was `:68,69,138,157`) and `MMCA.Store/Source/Hosts/UI/MMCA.Store.UI.Web/Program.cs:129,130,257,277` (was `:109,110,178,194`). The `AddCommonDataProtection` adoption set is still exactly three call sites: `MMCA.ADC/Source/Services/MMCA.ADC.Identity.Service/Program.cs:114` (was `:126`), `MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web/Program.cs:46` and `MMCA.Store/Source/Hosts/UI/MMCA.Store.UI.Web/Program.cs:70` immediately after `AddServiceDefaults()` at `:64` (were `:82` after `:76`). Store infra: the dedicated storage account is `MMCA.Store/infra/main.bicep:1132` with the private `dataprotection-keys` container at `:1157`, `param dataProtectionStorageReady bool = false` at `:97` (was `:93`), the `DataProtection__BlobStorageUri` gate at `:2008-2009` (was `:1467-1469`), `DataProtection__ApplicationName` `'MMCA.Store'` at `:2005` (was `:1464`) and the client-id env at `:2007` (was `:1466`); `uiApp` (`:1942`) runs `maxReplicas: 2` at `:2036` (was `:1481`) and `identityApp` (`:1390`, was `:939-1090`) at `:1559` (was `:1083`) with no call site; production still passes `"dataProtectionStorageReady": {"value": true}` (`MMCA.Store/.github/workflows/deploy.yml:1324`, was `:961`). Governance: Section 26 Front-End Security is Maturity 4 / Implementation 9 at `Website/docs-src/governance/common-ArchitectureScorecard.md:106` (was 4/8 at `:98`; the implementation lift landed in the thirtieth wave, 2026-08-31, so the first footnote's "impl 8, deliberately-partial default CSP" reading is superseded by the current row, which credits a centralized hardened security-headers middleware with a pluggable `ICspPolicyProvider` CSP extension). The MMCA.Common two-axis index is Maturity 97.0% = 318/328 (`:120`) and Implementation 86.0% = 705/820 (`:121`), with the "N/A (excluded from denominators): none this cycle" bullet at `:124` (was 96.9% = 314/324 at `:112` and 84.8% = 687/810 at `:113`); the thirty-sixth-wave full re-score (2026-09-19, v1.205.0) moved no score. The ADR corpus is 125 ADRs, range 001-125 (last row [125] parameterized-sql-only, `Website/docs-src/adr/README.md:137`; was eighty-nine, range 001-089); ADR-022 (`README.md:34`), ADR-036 (the external-OAuth teaser, `:48`) and ADR-069 (`:81`) all still exist and still match the body. +2026-10-02: refreshed against current source (framework v1.221.0, `MMCA.Common/FACTS.md`) and folded in ADR-131 (same-origin API proxy) as the present answer to how the browser reaches the API; header ADR cell gains ADR-131 and the Status line names the ADR and the `MMCA.Common.UI.Web/SameOriginProxy` source. Substantive: both apps opt in to the proxy on `main` (`MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web/Program.cs:156` register, `:268` map; `MMCA.Store/Source/Hosts/UI/MMCA.Store.UI.Web/Program.cs:153` register, `:262` map) and both set `SameOriginApiProxy:SessionCookieSameSite` to `Lax` (`MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web/appsettings.json:50-51`, `MMCA.Store/Source/Hosts/UI/MMCA.Store.UI.Web/appsettings.json:53-54`), so the body's in-memory access-token hydrate was replaced by the claims-only copy plus the proxy, the cookie-seeding paragraph says the server is the only writer on these hosts, and the CSRF section and trade-offs gained the proxy layer (the audit's "neither consumer calls AddSameOriginApiProxy" finding grepped the wrong method name; the API is `AddCommonSameOriginApiProxy`). Proxy evidence: `AddCommonSameOriginApiProxy(IConfiguration)` (`MMCA.Common/Source/Presentation/MMCA.Common.UI.Web/SameOriginProxy/SameOriginApiProxyServiceExtensions.cs:51`) sets `SessionCookieSettings.SameSite` from `SessionCookieSameSite` and `ClaimsOnlyBrowserTokens = true` (`:69-74`), registers the YARP forwarder (`:76`) and replaces `ITokenRefresher` / `ISessionCookieSync` with the handoff implementations (`:83-84`); `SameOriginApiProxyEndpoint` (`MMCA.Common/Source/Presentation/MMCA.Common.UI.Web/SameOriginProxy/SameOriginApiProxyEndpoint.cs:29`) calls `ValidateOrRefreshAsync` (`:88`), refuses `cross_origin_rejected` (`:237`), answers `OPTIONS` locally (`:243`), refuses `csrf_header_required` (`:254`) and answers 503 `session_refresh_unavailable` (`:284`); the WASM `"APIClient"` takes `SameOriginApiEndpoint` as its base address (`MMCA.Common/Source/Presentation/MMCA.Common.UI/DependencyInjection.cs:114`) and adds `SameOriginProxyRequestHandler` (`:131-132`); Strict-by-default, Lax-allowed, theft-not-use and the UI-host-in-the-API-path trade-offs are ADR-131's own (`Website/docs-src/adr/131-same-origin-api-proxy.md:139-145`, `:184-194`, `:206-208`; the handoff and token-issuing rewrite at `:84-92`, `:111-115`). Claims copy: `SessionClaimsToken.Create` (`MMCA.Common/Source/Presentation/MMCA.Common.API/SessionCookies/SessionClaimsToken.cs:25`, `alg: none` header `:17`, payload with empty signature `:33`); `SessionCookieSettings.SameSite` defaults to `Lax` (`SessionCookieSettings.cs:19`) and `ClaimsOnlyBrowserTokens` (`:29`) makes `POST /auth/session-cookie` answer 204 without writing (`SessionCookieEndpoints.cs:40-45`). The second code block now quotes `SessionCookieEndpoints.cs:58-80` (was `:50-61`): it gained the `IOptions` parameter (`:59`) and the claims-only `browserToken` branch (`:73-76`); trailing `ExcludeFromDescription()` / `AllowAnonymous()` / `DisableAntiforgery()` (`:78-80`) trimmed. The handler block still matches `SessionCookieAuthenticationHandler.cs:37-63` (scheme `:32`, `ReadJwtToken` `:51`, injected clock `:55`). Re-anchored (values unchanged unless stated): cookie constants `SessionCookieEndpoints.cs:18-19` (was `:17-18`), `MapSessionCookieEndpoints` `:23` (was `:22`), group POST/DELETE `:35`/`:48` (was `:34`/`:40`) with `DisableAntiforgery()` `:46`/`:52`, `IsCrossSite` `:88` (was `:73`), `SessionCookieRequest` `:92` (was `:77`); `SessionCookieJar.Append` `:16,19` and `Delete` `:26,29` (now taking a `sameSite` argument), `BuildOptions` `:37`, `HttpOnly` `:39`, `Secure` `:40`, `SameSite = sameSite` `:41` (was a fixed `Lax` at `:35`); `SessionTokenResult` `CookieSessionRefresher.cs:17` (was `:15`), `SessionTokenResponse` `:23` (was `:21`), `GetOrRefreshAsync` interface `:39` (was `:37`) and implementation `:89` (was `:65`, now delegating to `ValidateOrRefreshAsync` `:92`), access-token-only result `:143`, public `RefreshAsync` `:105` with private overload `:146`, `CallRefreshAsync` `:165` (was `:114`); `AddServerAuthSessionCookie(string apiBaseAddress)` `MMCA.Common.API/DependencyInjection.cs:174` (unchanged); `AddClientAuthSessionCookieSync()` `MMCA.Common.UI/DependencyInjection.cs:213` and `TryAddScoped` `:215` (were `:189`/`:191`); `ITokenStorageService` moved to `MMCA.Common.UI/Services/Auth/Tokens/ITokenStorageService.cs:8` (in-memory, never localStorage, `:3-7`); `JsFetchSessionCookieSync` `:13`, `mmcaAuthCookie.set` `:23`, `mmcaAuthCookie.clear` `:37` (were `:11,20,32`). Host wiring: ADC `AddServiceDefaults` `MMCA.ADC/Source/Hosts/UI/MMCA.ADC.UI.Web/Program.cs:52`, `AddCommonDataProtection` `:62` (was `:46`), `AddServerAuthSessionCookie` `:101`, `AddClientAuthSessionCookieSync` `:102`, `UseCookieSessionRefresh` `:246`, `MapSessionCookieEndpoints` `:267` (were `:85,86,228,261`); Store `AddServiceDefaults` `MMCA.Store/Source/Hosts/UI/MMCA.Store.UI.Web/Program.cs:63` (was `:64`), `AddCommonDataProtection` `:69` (was `:70`), `AddServerAuthSessionCookie` `:117`, `AddClientAuthSessionCookieSync` `:118`, `UseCookieSessionRefresh` `:247`, `MapSessionCookieEndpoints` `:261` (were `:129,130,257,277`); ADC Identity `AddCommonDataProtection` `MMCA.ADC/Source/Services/MMCA.ADC.Identity.Service/Program.cs:115` (was `:114`, per the audit grep, which found exactly three call sites). Store infra: `param dataProtectionStorageReady bool = false` `MMCA.Store/infra/main.bicep:97`, `DataProtection__ApplicationName` `:2056`, the `DataProtection__BlobStorageUri` gate `:2059-2060`, `uiApp` `:1991` with `maxReplicas: 2` `:2087` (were `:2005`, `:2008-2009`, `:2036`); every other `maxReplicas` in the template (`:1591`, `:1712`, `:1850`, `:1969`) is also 2, which is what keeps the Identity-replica clause true. Not re-read this run, carried from the audit: `deploy.yml` passing `dataProtectionStorageReady` true (`MMCA.Store/.github/workflows/deploy.yml:1294`, was `:1324`) and `DataProtectionExtensions.cs` (absent-config no-op `:59-62`, Key Vault gate `:74-85`). Narrowed: the ADC sentence no longer claims both hosts share one private container on a pre-existing storage account (not checked this run). ADR index rows: ADR-022 `Website/docs-src/adr/README.md:35` (was `:34`), ADR-036 `:49`, ADR-069 `:82`, ADR-131 `:144`; corpus 131 ADRs, range 001-131. Section 26 Front-End Security row is `Website/docs-src/governance/common-ArchitectureScorecard.md:90` (scores not restated in the body); the MMCA.Common index is Maturity 96.6% (317/328) and Implementation 86.0% (705/820) at `:9-10`.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/soft-delete-vs-erasure.md b/docs-src/articles/soft-delete-vs-erasure.md index a72211c7..b408908f 100644 --- a/docs-src/articles/soft-delete-vs-erasure.md +++ b/docs-src/articles/soft-delete-vs-erasure.md @@ -1,10 +1,11 @@ # Soft-delete vs the right to erasure: the GDPR conflict and the erasure pathway -> Series: MMCA.Common · Article #36 · Pillar P3/P4 · Groups G07, G24 · Rubric §30 · ADR-005 + ADR-047 + ADR-119 · +> Series: MMCA.Common · Article #36 · Pillar P3/P4 · Groups G07, G23 · Rubric §30 · ADR-005 + ADR-047 + ADR-076 + ADR-095 + ADR-119 · > Status: grounded in `Website/docs-src/adr/005-soft-delete-vs-erasure.md`, > `Website/docs-src/adr/047-soft-deleted-user-session-revocation.md`, -> `Website/docs-src/adr/119-restrict-delete-by-default.md`, `Website/docs-src/governance/common-ArchitectureScorecard.md:110` -> (§30, Maturity 3 / Implementation 8), `MMCA.Common/CLAUDE.md`, and +> `Website/docs-src/adr/095-soft-delete-unique-indexes.md`, +> `Website/docs-src/adr/119-restrict-delete-by-default.md`, `Website/docs-src/governance/common-ArchitectureScorecard.md:94` +> (§30, Maturity 3 / Implementation 8), `Website/docs-src/onboarding/00-primer.md:193`, and > `Website/docs-src/onboarding/group-24-identity-module.md`. > No em dashes. @@ -24,9 +25,9 @@ Nothing is hard-deleted. A global query filter excludes `IsDeleted = true` rows deleted records vanish from the app, but the data stays in the table. This is exactly what you want for audit (you can prove what existed and when), referential integrity (a deleted parent does not orphan its children), and undelete (a fat-fingered delete is recoverable). MMCA.Common does the same, with one -refinement: `AuditableBaseEntity.Delete()` flips `IsDeleted` and returns a `Result` (idempotent, so a -double delete fails cleanly instead of silently), EF Core global query filters exclude the row, and the -documented invariant is "entities are never hard-deleted." +refinement: `AuditableBaseEntity.Delete()` flips `IsDeleted` and returns a `Result` (guarded, so a +double delete fails cleanly with an `AlreadyDeleted` error instead of silently succeeding), EF Core +global query filters exclude the row, and the documented invariant is "entities are never hard-deleted." Now read that same model through a privacy lawyer's eyes. A user invokes their **right to erasure** (GDPR Article 17, the right to be forgotten; CCPA deletion). They want their personal data *gone*. You @@ -111,7 +112,7 @@ The `[Pii]` marker carries a second duty: log and telemetry redaction. `PiiRedac `[Pii]`-marked member with a `[REDACTED]` token before an entity that holds personal data is written to a structured log, and a `PiiErasureContractFitnessTests` build gate runs a `[Pii]`-bearing sample through both the redactor and `Anonymize()` end to end, so neither half of the `[Pii]` contract can be -advertised without being exercised. The framework now wires the redactor into one production path of +advertised without being exercised. The framework wires the redactor into one production path of its own: the opt-in field-level audit trail, whose save-changes interceptor asks the redactor whether a type carries personal data and, for the properties that do, writes the redaction token in place of both the old and the new value of the recorded change. One honest caveat for logging: `PiiRedactor` is still @@ -130,10 +131,10 @@ the rest of the system reacts to. That is a destructive default nobody wrote dow underneath every privacy story above. ADR-119 inverts it. `RestrictDeleteByDefaultConvention` -(`Source/Core/MMCA.Common.Infrastructure/Persistence/Conventions/RestrictDeleteByDefaultConvention.cs:41`) +(`Source/Core/MMCA.Common.Infrastructure/Persistence/Conventions/RestrictDeleteByDefaultConvention.cs:42`) is an `IModelFinalizingConvention` that makes `DeleteBehavior.Restrict` the default for every relationship nobody configured, registered per engine by the shared `ApplicationDbContext` at model -finalization (`Persistence/DbContexts/ApplicationDbContext.cs:394`). A delete that would orphan rows +finalization (`Persistence/DbContexts/ApplicationDbContext.cs:399`). A delete that would orphan rows fails loudly instead of quietly taking the children with it, and a genuine cascade becomes a decision somebody recorded with `.OnDelete(DeleteBehavior.Cascade)` in an entity configuration. Two things are deliberately left alone: an ownership foreign key keeps the cascade EF requires, and any behavior a @@ -150,8 +151,8 @@ configurationBuilder.Conventions.Add(_ => new RestrictDeleteByDefaultConvention( ``` That stamp is the point as much as the restrict is. Each foreign key carries a -`MMCA:DeleteBehaviorSource` annotation (`:47`) holding `Explicit` (`:50`), `Convention` (`:53`) or -`Ownership` (`:56`), and `DeleteBehaviorConventionTestsBase` +`MMCA:DeleteBehaviorSource` annotation (`:48`) holding `Explicit` (`:51`), `Convention` (`:54`) or +`Ownership` (`:57`), and `DeleteBehaviorConventionTestsBase` (`Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Domain/DeleteBehaviorConventionTestsBase.cs:21`) reads exactly that annotation to assert every cascading relationship was opted into on purpose. The convention is a no-op on Cosmos, which has no foreign key constraints to restrict. @@ -162,14 +163,42 @@ effect of a required foreign key. Erasure stays a deliberate operation (`Anonymi stays a deliberate operation (`Delete()`), and row removal is the third deliberate operation rather than the one the ORM chose for you. +## The row that still holds its slot: filtered unique indexes + +Soft-delete has one more leak, and it is the database disagreeing with the application. The global +query filter says a deleted row does not exist; a unique index still counts it. Delete a speaker and +the email's unique index keeps refusing a new speaker with that email, with an error the user cannot +act on, because the conflicting row is invisible to them. + +ADR-095 makes the fix a convention rather than a per-index habit. `SoftDeleteUniqueIndexConvention` +(`Source/Core/MMCA.Common.Infrastructure/Persistence/Conventions/SoftDeleteUniqueIndexConvention.cs:34`) +is a model-finalizing convention registered once by the shared `ApplicationDbContext` +(`Persistence/DbContexts/ApplicationDbContext.cs:392`), so it reaches every module, every database and +every consumer with nothing to opt into. At finalization it walks every non-owned `IAuditableEntity` +type (`:46-47`) and filters every unique index on it (`:61-64`) on that engine's soft-delete +predicate (`= false` on PostgreSQL, `= 0` on the other relational engines), built by the same +`SoftDeleteFilterSql.Build` that the opt-in `HasSoftDeleteFilter` uses (`:55-57`), so the automatic +and the manual path cannot disagree about quoting or column name. An index that already declares its +own filter keeps it and gains the soft-delete clause with `AND` (`:80`); a filter that already +constrains the soft-delete column is left exactly as it is (`:73-76`), so a second model build never +appends the clause twice. SQL Server, PostgreSQL and SQLite are covered, and Cosmos is a no-op +(`:29-30`, the relational check at `:43-44`). + +Privacy and uniqueness meet here. An erased `User` already frees its real address, because +`Anonymize()` rewrites the email to a per-row `deleted-{Id}@anonymized.invalid` placeholder; for every +other soft-deleted record that keeps its values, it is the filter that frees the slot. ADR-095 states +the cost plainly: any number of deleted rows may share a "unique" value, so an undelete path has to +handle a collision with the live row that took the slot, and the filter is invisible where the index +is declared (it first appears in a generated migration). + ## The second hiding place: the outbox -There was a second source of retained personal data, and it is the kind of thing you only find when you +There is a second source of retained personal data, and it is the kind of thing you only find when you go looking honestly. The **transactional outbox** (ADR-003) writes an event row in the same transaction -as the state change, and those serialized event payloads can contain personal data. The outbox -processor only set `ProcessedOn`; nothing ever purged processed rows. ADR-003 itself admitted the table -"grows until cleaned up." So even after you anonymized a user's aggregate, their personal data could -still be sitting in old, processed outbox payloads forever. +as the state change, and those serialized event payloads can contain personal data. Marking a row +processed does not remove it, and ADR-003 records the consequence: the outbox table grows until +processed entries are cleaned up. So without a purge, even after you anonymized a user's aggregate, +their personal data could still be sitting in old, processed outbox payloads forever. ADR-005 closes that too: `OutboxCleanupService` purges processed outbox rows older than `Outbox:RetentionDays` (default 7, set 0 to disable) across every relational data source. Bounded @@ -183,7 +212,7 @@ production. Anonymizing the aggregate and committing the soft-delete shuts two doors: no future logins, and no silent re-mint of a fresh access token, because the refresh flow re-fetches the account through the same soft-delete query filter -(`Source/Core/MMCA.Common.Application/Users/UseCases/DeleteUser/DeleteUserHandlerBase.cs:103-107`). +(`Source/Core/MMCA.Common.Application/Users/UseCases/DeleteUser/DeleteUserHandlerBase.cs:107-111`). There is a third door, though, and stateless auth holds it open by design. Authentication is stateless JWT (ADR-004): every service validates an access token by signature and expiry, with no per-request lookup against the account store. That is exactly @@ -191,30 +220,45 @@ what makes it scale, and it is also why soft-deleting a user does not, on its ow already issued. A bearer credential keeps passing validation until it expires on its own clock, which can be minutes after the account was deactivated. -ADR-047 bounds that window. `SoftDeletedUserMiddleware` -(`Source/Presentation/MMCA.Common.API/Middleware/SoftDeletedUserMiddleware.cs:31`, business rule +ADR-047 closes that door. `SoftDeletedUserMiddleware` +(`Source/Presentation/MMCA.Common.API/Middleware/SoftDeletedUserMiddleware.cs:33`, business rule BR-133 named in its class doc at `:11`) runs in the shared pipeline **after authentication and before authorization**. That ordering is a declarative step list (ADR-079): -`Startup/Pipeline/MiddlewarePipelineBuilder.cs` registers `UseAuthentication()` at `:117`, the -`SoftDeletedUserFilter` step that adds the middleware at `:137`, and `UseAuthorization()` at `:141`. +`Startup/Pipeline/MiddlewarePipelineBuilder.cs` registers `UseAuthentication()` at `:105`, the +`SoftDeletedUserFilter` step that adds the middleware at `:124-125`, and `UseAuthorization()` at `:129`. So `HttpContext.User` is already populated and the check gates every downstream endpoint. For an authenticated caller whose account has been soft-deleted, it -returns HTTP 401 mid-flight, before the endpoint runs. The account-status lookup goes through -`ISoftDeletedUserValidator` +returns HTTP 401 mid-flight, before the endpoint runs. + +The check reads a shared deleted-user marker first. The erasure handler writes that marker itself, +right after the erasure is saved (`SoftDeletedUserCache.MarkDeletedAsync`, +`DeleteUserHandlerBase.cs:146-148`), and the marker lasts 15 minutes +(`SoftDeletedUserCache.MarkerDuration`, `Source/Core/MMCA.Common.Application/Auth/SoftDeletedUserCache.cs:32`), +the default access-token lifetime, because it has to outlive every token issued before the delete. +Every host honors it (`SoftDeletedUserMiddleware.cs:102-109`), so on any host that shares that cache +the deleted user's token is refused on its next request, not at its own expiry. On a cache miss, a +host that runs Identity falls back to `ISoftDeletedUserValidator` (`Source/Core/MMCA.Common.Application/Interfaces/Infrastructure/Auth/ISoftDeletedUserValidator.cs:7`, -one `IsUserSoftDeletedAsync` method at `:15`), which each Identity module implements with a single -filter-bypassing existence query, and the boolean result is cached for roughly 30 seconds -(`SoftDeletedUserCache.MarkerDuration`, `Source/Core/MMCA.Common.Application/Auth/SoftDeletedUserCache.cs:29`, -consumed by the middleware at `SoftDeletedUserMiddleware.cs:132`). So a given user costs at most one status query per cache window per -cache scope, not one per request. The effect is a **bounded revocation window**, not instant -revocation: a deactivated user's still-valid access token stops working within about the cache duration -instead of at the token's own expiry. +one `IsUserSoftDeletedAsync` method at `:15`), which the framework implements once as +`SoftDeletedUserValidator` (`Source/Core/MMCA.Common.Application/Users/SoftDeletedUserValidator.cs:20`), +a single filter-bypassing existence query that an Identity module closes over its own `User` at +registration. The middleware caches that answer asymmetrically: "deleted" as the 15-minute marker, +"not deleted" for only 30 seconds (`NotDeletedLookupDuration`, `SoftDeletedUserMiddleware.cs:39`, +chosen at `:147`). So a live user costs at most one status query per 30 seconds per cache scope, not +one per request. + +The marker write is best effort: a failure is logged and the erasure still succeeds +(`DeleteUserHandlerBase.cs:150-153`). That failure is the one case with a residual window. An +Identity host still catches the deleted account once any cached "not deleted" answer lapses, within +30 seconds; a host with no validator has nothing to fall back to, so the existing access token stays +usable until it expires, which is exactly what the logged warning says (`DeleteUserHandlerBase.cs:199-200`). Two honest edges. Anonymous requests pass straight through with no lookup -(`SoftDeletedUserMiddleware.cs:65-73`), so unauthenticated traffic pays nothing. And the validator is -resolved lazily (`SoftDeletedUserMiddleware.cs:75`) rather than injected as a parameter, so a host that -does not register one (a non-Identity extracted service, or MMCA.Helpdesk's single Tickets host) simply -no-ops on that check: Identity is the source of truth and already validated the token upstream. Lazy +(`SoftDeletedUserMiddleware.cs:74-82`), so unauthenticated traffic pays nothing. And the validator is +resolved lazily (`SoftDeletedUserMiddleware.cs:111`) rather than injected as a parameter, so a host that +does not register one (a non-Identity extracted service, or MMCA.Helpdesk's single Tickets host) still +honors the marker and passes only a cache miss through (`:112-119`): Identity is the source of truth, +and the marker carries what it decided. Lazy resolution is what keeps one pipeline correct in both Identity-hosting and non-Identity hosts without a per-host variant. @@ -241,7 +285,7 @@ catch (Exception ex) when (ex is not OperationCanceledException) // Best-effort: the contributor failed after whatever resilience pipeline it uses. // Degrade the section instead of failing the whole export. The reason handed back is // deliberately generic; the exception detail goes to the log, never to the subject. - UserUseCaseLog.ExportSectionUnavailable(logger, ex, sectionName, userId); + ExportSectionUnavailable(logger, ex, sectionName, userId); return new UserDataExportSectionDTO { @@ -253,7 +297,7 @@ catch (Exception ex) when (ex is not OperationCanceledException) ``` A section degrades to `Available = false` and the export completes. One peer outage never fails the -whole export. That catch now lives once, in the base, wrapping every registered section, so a section a +whole export. That catch lives once, in the base, wrapping every registered section, so a section a consumer adds tomorrow inherits the behavior instead of re-implementing it (and the section contributors deliberately catch nothing themselves). @@ -325,8 +369,8 @@ out of 4, now Maturity 3 / Implementation 8 on the two-axis rubric), and how ADR separating the concerns: an `IAnonymizable` anonymize-in-place hook that preserves the audit trail, plus an `OutboxCleanupService` that bounds retention of PII-bearing outbox payloads, with the consumer owning the policy. And how ADR-047's `SoftDeletedUserMiddleware` -closes the third door, cutting off an already-issued access token mid-flight within roughly a 30-second -cache window instead of letting it live to its own expiry. +closes the third door, cutting off an already-issued access token mid-flight through a shared +deleted-user marker the erasure writes as it saves, instead of letting the token live to its own expiry. **Next in the series:** the reusable Blazor UI framework that brings the same backend discipline to the front end, a server-paged list page in a few lines. @@ -338,198 +382,126 @@ decision, or read the §30 scorecard entry, the most honest one on the board.* *Tags: .NET, C Sharp, Software Architecture, GDPR, Data Privacy* -*Notes (verified 2026-07-28, corrected 2026-08-07, re-verified 2026-09-19 at framework v1.205.0): -`AuditableBaseEntity.Delete()` (flips `IsDeleted`, returns a `Result`; `public virtual Result Delete()` -at `Domain/Entities/AuditableBaseEntity.cs:67`, `IsDeleted = true` at `:77`), EF global query filters, -`IAnonymizable` (`MMCA.Common.Domain.Interfaces:22-31`, idempotent `Result`-returning `Anonymize()` -declared at `:30`), ADC `User` (`MMCA.ADC/.../Identity.Domain/Users/User.cs:34-35` declares FIVE -interfaces, `IPasswordChangeableUser, IUserPreferences, IErasableUser, IEmailConfirmableUser, -IAuditedEntity` (`IAuditedEntity` is the non-behavioural marker that opts the aggregate into the -field-level audit trail; `IEmailConfirmableUser` carries the proven-reachable flag, ADR-116), and -`IErasableUser` extends `IAnonymizable`, so the aggregate is `IAnonymizable` transitively rather than -by a direct declaration. `Anonymize()` at `:465-503` overwrites every `[Pii]` field with placeholders -incl. the `deleted-{Id}@anonymized.invalid` email built at `:470` preserving the unique-email -invariant, early-returns idempotently at `:476-480`, clears the credential/device/provider fields at -`:485-495`, nulls `AvatarUrl` at `:496`, clears `IsEmailConfirmed` at `:500` (the placeholder address -was never proven reachable, so the flag cannot keep asserting that it was), and retains none; -`public new Result Delete()` at `:443` calls `base.Delete()` at `:445` and, on success, -`AddDomainEvent(new UserDeleted(Id))` at `:448`. CORRECTION (2026-09-19): the earlier ledger and body -claim that `Delete()` revokes a refresh token is retired as false. The aggregate declares no -`RefreshToken` member at all (zero matches this run); refresh sessions are their own aggregate, and -`DeleteUserHandlerBase` states the model in place at -`Source/Core/MMCA.Common.Application/Users/UseCases/DeleteUser/DeleteUserHandlerBase.cs:103-107`: -outstanding refresh sessions are not revoked at erasure and do not need to be, because the refresh -flow re-fetches the user through the same soft-delete query filter, and an app that also wants the -rows tidied revokes them from its `OnAfterSoftDeleteAsync` tail via `IRefreshSessionStore`), the -Delete + Anonymize workflow (framework-owned since this article was first written: -`DeleteUserHandlerBase.HandleAsync` calls `erasable.Delete()` at `:115` and `erasable.Anonymize()` at -`:129`, both persisted by ONE `SaveChangesAsync` at `:135`, with the app tail `OnAfterSoftDeleteAsync` -running between them at `:122` and the ADR-047 marker write `SoftDeletedUserCache.MarkDeletedAsync` -owned by the base itself at `:142-144`; ADC's 87-line `DeleteUserHandler.cs` subclasses it at `:29-35` -and overrides `OnAfterSoftDeleteAsync` (`:43-74`) to raise the cross-service `UserDeleted` integration -event on the aggregate (`:59`, so the outbox row commits with the erasure) and to schedule the -avatar-blob delete INSIDE the erasure transaction as an ADR-114 durable internal command, -`DeleteAvatarBlobInternalCommand` (`:68-71`, `ScheduleAvatarBlobDeletionAsync` at `:76-86`), whose -scheduling failure fails the erasure at `:85`; the class doc records at `:25-27` that the shared -soft-deleted marker is the base's job, so the handler holds no marker write and no `LoggerMessage`. -Precision the body does not need but the ledger should carry: ADC's `DeleteUserCommand` implements -`ICacheInvalidating, ITransactional, IUserOwnedRequest` -(`.../UseCases/DeleteUser/DeleteUserCommand.cs:22`), and its doc at `:9-10` records why -`ITransactional` is load-bearing (the soft-delete flag, the anonymized personal data, the -`UserDeleted` outbox row and the internal-command row commit as one write), so the body's "calls both -in one transaction" is literal rather than EF's implicit single-`SaveChanges` transaction), -the export envelope `UserDataExportDTO`, hoisted into the framework at -`MMCA.Common/Source/Core/MMCA.Common.Shared/Privacy/UserDataExportDTO.cs:15` (ADC's subject snapshot -is `UserDataExportSubjectDTO` at -`.../Identity.Shared/Users/DataExport/UserDataExportSubjectDTO.cs:16`, whose doc-comment records the -deliberate credential exclusion, password hash/salt, refresh token and opaque external-provider key, -at `:6-7`), `OutboxCleanupService` -(`Source/Core/MMCA.Common.Infrastructure/Persistence/Outbox/Administration/OutboxCleanupService.cs:47`, -`Outbox:RetentionDays` default 7, 0 disables, -`.../Persistence/Outbox/Administration/OutboxSettings.cs:65`). -The `[Pii]`-implies-`IAnonymizable` architecture fitness rule is real and verified in source -(`Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Governance/PiiConventionTestsBase.cs:12`, -`EntitiesWithPiiProperties_ShouldImplement_IAnonymizable`). CONFIRMED: the -doc-comment's second mechanism, PII log-masking, is implemented, `PiiRedactor` -(`Domain/Privacy/PiiRedactor.cs:24-142`, masks every `[Pii]` member with the `[REDACTED]` token, `:27`), -`PiiRedactorTests` (`Tests/Core/MMCA.Common.Domain.Tests/Privacy/PiiRedactorTests.cs`, 7 `[Fact]`s) plus a -`PiiErasureContractFitnessTests` build gate -(`Tests/Architecture/MMCA.Common.Architecture.Tests/Governance/PiiErasureContractFitnessTests.cs:19`, -a 107-line file) that forces a `[Pii]`-bearing `DataSubjectSample` through both the redactor and -`Anonymize()`. CAVEAT (recorded 2026-08-14, still current): `PiiRedactor` has one production call -site. `AuditTrailSaveChangesInterceptor` calls `PiiRedactor.HasPii(entry.Metadata.ClrType)` -at `Source/Core/MMCA.Common.Infrastructure/Persistence/AuditTrail/AuditTrailSaveChangesInterceptor.cs:286` -(one cached reflection pass per entity type) and writes `PiiRedactor.RedactedToken` into both `OldValue` -and `NewValue` for a `[Pii]` property at `:309-310`. That path is opt-in (`AuditTrailSettings.Enabled` -has no initializer, so it defaults to false: `Infrastructure/Settings/AuditTrailSettings.cs:26`, ADR-075). -The NARROWER caveat still holds and is what the body says: for logs and telemetry the redactor -remains an opt-in utility a caller invokes at the log site, NOT an auto-wired Serilog/ILogger -destructuring policy. CONFIRMED: `EncryptedStringConverter` is real AES-256-GCM but is wired to NO -entity field in ADC or Store (usages only in its own tests + the -`IAnonymizable` doc-comment at `Domain/Interfaces/IAnonymizable.cs:17-18`; ADR-037 records zero -production columns encrypted), so it is framed as ADR-005's conditional capability, not as something the -ADC `User` uses. FIX 1 (2026-08-01, anchors refreshed 2026-09-19): the ADC `User` `[Pii]` enumeration -was one field short. `User.cs` -carries FOUR `[Pii]` properties, not three: `Email` (attribute `:51`, property `:52`), `FirstName` -(`:55`/`:56`), `LastName` (`:59`/`:60`) and `AvatarUrl` (`:118`, added with the avatar feature, -ADR-045). Every one of those anchors moved this run (the new `IsEmailConfirmed` member and its doc -block pushed the members down); the COUNT of four is unchanged. `Anonymize()` does null all four -(`AvatarUrl = null` at `:496`), so "overwrites every `[Pii]` field" stayed true, and the parenthetical -names `AvatarUrl` too. FIX 2 (2026-07-28, updated 2026-09-19): the section 30 scorecard anchor has -moved repeatedly since this article's original `:94` citation: `:96`, `:98`, `:100`, `:102` and now -`:110`, its current line. Its VALUES are unchanged across all six anchors: -`| 30 | Compliance, Privacy & Governance | 2 | 3 | 8 | 6/16 |`, weight 2, -Maturity 3, Implementation 8, weighted 6/16. FIX 3 (2026-08-01, anchors rebased 2026-08-15): the -AES-256-GCM anchor for `EncryptedStringConverter` was stale at `:31,34` (those lines are unrelated -doc-comment prose). The AES-256-GCM claim now lives at -`Infrastructure/Persistence/Encryption/EncryptedStringConverter.cs:10-11`, and the 12-byte nonce / -16-byte tag sizing is documented at `:39-40` and enforced by `NonceSize = 12` (`:78`) and -`TagSize = 16` (`:81`). The stored layout is a versioned envelope, Base64 of -`[key version (1)][nonce (12)][ciphertext (N)][tag (16)]` (assembled at -`:203-208`), written under a ring of versioned keys whose current version stamps every write (`:109`) -and whose version byte travels as AES-GCM associated data so the tag authenticates it (`:198`, -`:231`), which puts per-value overhead at 29 bytes. Nothing this section relies on changed: -AES-256-GCM, the 12-byte nonce, the 16-byte tag, and the zero-adopters posture all hold, so the body -sentence (ADR-005 offers an AES-256-GCM `EncryptedStringConverter` for fields a service keeps -retrievable after anonymization, and ADC's `User` does not wire it) stays true, and ADR-037 Decision -item 10 (`:135-140`) still records adoption as zero. Section 30 in the CURRENT two-axis scorecard -scores Maturity 3 / Implementation 8 -(`Website/docs-src/governance/common-ArchitectureScorecard.md:110`), NOT the single lowest; the original -1-out-of-4 belongs to the retired single-axis snapshot, and the deliberate framing here is scored against -that original committed snapshot, then fixed, then re-scored. FLAGGED (2026-09-19): that -1-out-of-4 value and its "lowest category" superlative have no live evidence path, because the -current scorecard file carries only the two-axis rubric; the article frames both as history, which is -the honest framing, but neither is checkable against anything on disk. The latest re-score is the -THIRTY-SIXTH wave (2026-09-19, framework v1.205.0), which moved no score: section 30 Maturity 3 to 4 -was refused again, its tenth-plus consecutive refusal, and section 30 Implementation 8 to 9 was one of -eight refuted implementation proposals, so both indices hold (Maturity index `:120`, 97.0%, 318/328; -Implementation index `:121`, 86.0%, 705/820; "N/A (excluded from denominators): none this cycle" -bullet `:124`, re-confirmed 2026-09-19, Sigma-weight 82 with section 16 scored M3/I6). The latest -actual move is the thirty-fifth wave's section 16 AI-Native Maturity 2 to 3 and Implementation 5 to 6 -(2026-09-15), which was never section 30's own. The 7-day -outbox-retention default is a documented behavior change on upgrade. The ADR-047 section ("The live -session") is re-verified in source this run: `SoftDeletedUserMiddleware` (declared at -`Source/Presentation/MMCA.Common.API/Middleware/SoftDeletedUserMiddleware.cs:31`, BR-133 named in its -class doc at `:11`) runs after authentication and before authorization, and that ordering is a -declarative step list (ADR-079) rather than inline `app.Use...` calls: the steps are registered in -`Source/Presentation/MMCA.Common.API/Startup/Pipeline/MiddlewarePipelineBuilder.cs`, with -`UseAuthentication()` at `:117`, the `SoftDeletedUserFilter` step that adds the middleware at `:137` -and `UseAuthorization()` at `:141` (`TenantResolution` `:125` and `UseRateLimiter()` `:133` sit -between them). `WebApplicationExtensions.cs` registers no middleware of its own; it calls -`MiddlewarePipelineBuilder.CreateDefault()` at `:142`, so the old -`WebApplicationExtensions.cs:96/:109/:110` anchors are retired. The middleware returns -HTTP 401 for an authenticated caller when the account is soft-deleted (cached-true path `:102-106`, -fresh-query path `:143-147`); anonymous requests pass through -with no lookup (`SoftDeletedUserMiddleware.cs:65-73`); the status check is behind -`ISoftDeletedUserValidator`, which moved one folder deeper this run to -`Source/Core/MMCA.Common.Application/Interfaces/Infrastructure/Auth/ISoftDeletedUserValidator.cs:7` -(single `IsUserSoftDeletedAsync` at `:15`, line anchors unchanged), resolved LAZILY via -`context.RequestServices.GetService()` (`SoftDeletedUserMiddleware.cs:75`, -null-validator pass-through `:76-83`, rationale documented at `:43-51`) so -non-Identity hosts (extracted services, MMCA.Helpdesk) no-op. FIX 4 (2026-08-14): the 30-second constant is -not in the middleware and is not named `CacheDuration`. It is -`public static TimeSpan MarkerDuration => TimeSpan.FromSeconds(30)` -(`Source/Core/MMCA.Common.Application/Auth/SoftDeletedUserCache.cs:29`), consumed by the middleware's -cache write at `SoftDeletedUserMiddleware.cs:132`; the middleware only mentions "30-second cache" in -prose at `:13`. The substance is unchanged: the boolean is cached per user per cache scope, bounding the -stateless-JWT (ADR-004) revocation window to roughly the cache duration instead of the token lifetime. -Nuance the body does not state and does not contradict: the check fails OPEN on a cache or validator -error (rationale `:18-29`, validator catch `:118-125`), a deliberate trade-off bounded by the 15-minute -access-token lifetime and by the soft-delete query filter the refresh flow re-reads. -The entity-split paragraph is re-framed this run to match `User.Delete()` as it stands: the erasure -commits a soft-delete and a `UserDeleted` domain event, outstanding refresh sessions stop working -because the refresh flow re-fetches through the soft-delete filter, and the forward pointer to the -runtime cut-off is kept so the paragraph does not read as instant session death. The -onboarding-chapter reference (`group-24-identity-module.md`, G24) is -unchanged and still current. 2026-07-27 coverage addition: the section "The other right: portability, -and why it degrades instead of failing" was added to close a recorded gap, GDPR data-subject export -was previously mentioned only in passing here while the article taught erasure alone. -STRUCTURAL REWRITE (2026-08-14): the whole export fan-out was hoisted out of ADC into MMCA.Common -(ADR-076), so the section's prose, its quoted code block, and every anchor in it are re-grounded. -ADC's `ExportUserDataHandler.cs` is a 78-line thin subclass of -`ExportUserDataHandlerBase` (declared `:30-35`) overriding only -`HasExportPrivilege` (`:38`) and `BuildSubjectSnapshotAsync` (`:41-77`); it contains NO catch block at -all, and its class doc restates the contract at `:23-28`. The degradation is ONE generic -per-section catch in the base: -`MMCA.Common/Source/Core/MMCA.Common.Application/Users/UseCases/ExportUserData/ExportUserDataHandlerBase.cs:185-198` -inside `RunSectionAsync`, which calls -`UserUseCaseLog.ExportSectionUnavailable(logger, ex, sectionName, userId)` at `:190` and returns a -`UserDataExportSectionDTO` with `Available = false` and -`UnavailableReason = UserDataExportSectionDefaults.UnavailableReason`. The quoted block is verbatim -from those lines, comment lines included. The warning-level log message text -("Data-subject export section {Section} unavailable for user {UserId}; export continues -with Available=false") is the `LoggerMessage`-generated -`UserUseCaseLog.ExportSectionUnavailable` (`MMCA.Common.Application/Users/UserUseCaseLog.cs:25-26`, -moved down three lines by a new `SoftDeletedMarkerFailed` entry at `:22-23`). The -`when (ex is not OperationCanceledException)` filter that lets a genuine cancellation propagate -appears ONCE, in the base at `:185`, with the base class doc stating "Cancellation is not degradation." -at `:35`. ADC contributes peers as `IUserDataExportSection` implementations instead -(`.../ExportUserData/EngagementUserDataExportSection.cs`, `NotificationUserDataExportSection.cs`), -which deliberately catch nothing (doc-comment `:12-16`) and read cross-service through -`IUserEngagementExportService` (in-process inside the Engagement service, a gRPC adapter everywhere -else, `MMCA.ADC.Engagement.Contracts/UserEngagementExportServiceGrpcAdapter.cs:18-19`, the class -declaration; the old `:15` anchor lands mid-doc-comment, and the adapter rationale is at `:10-16`). -The pattern is framework code, which is why it belongs beside the framework -erasure mechanism this article already teaches rather than in its own piece. -NEW SECTION (2026-09-19), "The delete that really removes rows: restrict by default", grounded in -ADR-119 (`Website/docs-src/adr/119-restrict-delete-by-default.md`, Accepted 2026-09-11, revised -2026-09-19 to record adopted state across ADC, Store and Helpdesk): -`RestrictDeleteByDefaultConvention(DataSource engine) : IModelFinalizingConvention` is declared at -`Source/Core/MMCA.Common.Infrastructure/Persistence/Conventions/RestrictDeleteByDefaultConvention.cs:41` -and makes `DeleteBehavior.Restrict` the default for every relationship nobody configured (rationale, -including EF's cascading default running below the aggregate, below the soft-delete filter and below -the domain events, at `:9-19`). It is registered per engine by the shared `ApplicationDbContext` at -`Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/ApplicationDbContext.cs:394` -(`configurationBuilder.Conventions.Add(_ => new RestrictDeleteByDefaultConvention(DataSourceKey.Engine))`), -which is the code block's first line, quoted verbatim. Ownership foreign keys keep the cascade EF -requires and a configured behavior is never overridden (`:21-27`). Every foreign key is stamped with -the `DeleteBehaviorSourceAnnotation` constant `MMCA:DeleteBehaviorSource` (`:47`), valued -`ExplicitSource` "Explicit" (`:50`), `ConventionSource` "Convention" (`:53`) or `OwnershipSource` -"Ownership" (`:56`); the code block's comment lines paraphrase those three values and are -illustrative of the documented shape rather than a quotation. `DeleteBehaviorConventionTestsBase` -(`Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Domain/DeleteBehaviorConventionTestsBase.cs:21`) -reads exactly that annotation to assert every cascading relationship was opted into on purpose, and -the convention is a documented no-op on Cosmos, which has no foreign key constraints to restrict -(`:34-38`). `ProcessModelFinalizing` is at `:59`.* +*Notes (verified 2026-07-28, corrected 2026-08-07, re-verified 2026-09-19, refreshed 2026-10-02 at +framework v1.221.0). Anchors marked (re-read) were opened in source this run; anchors marked (audit) +were re-read by the 2026-10-02 audit (`Reports/update-medium/2026-10-02/36.json`) and not reopened here. +DOMAIN: `public virtual Result Delete()` at `MMCA.Common/Source/Core/MMCA.Common.Domain/Entities/AuditableBaseEntity.cs:67`, +guard `:69-75` returning `Error.AlreadyDeleted` (`:72`), `IsDeleted = true` at `:77` (re-read). FIX +(2026-10-02): the body called `Delete()` "idempotent", which contradicts the failure on a second call; +it now reads "guarded". The "entities are never hard-deleted" invariant is documented at +`Website/docs-src/onboarding/00-primer.md:193` and `group-02-domain-building-blocks.md:644` (re-read); +the header no longer cites `MMCA.Common/CLAUDE.md`, which is only an `@AGENTS.md` import and holds no +such phrase. `IAnonymizable` is `Domain/Interfaces/IAnonymizable.cs:22-31`, `Result Anonymize()` at +`:30`, idempotency contract in its doc at `:26-28` (re-read); the `EncryptedStringConverter` mention +in its doc at `:17-18` (audit). ADC `User` (audit, all unchanged): `MMCA.ADC/.../Identity.Domain/Users/User.cs:34-35` +declares five interfaces incl. `IErasableUser`, which extends `IAnonymizable` +(`MMCA.Common/Source/Core/MMCA.Common.Domain/Auth/IErasableUser.cs:30`); four `[Pii]` properties, +`Email` `:51`/`:52`, `FirstName` `:55`/`:56`, `LastName` `:59`/`:60`, `AvatarUrl` attribute `:118`, +property `:120`; `Anonymize()` `:465-503`, placeholder email `:470`, idempotent early return +`:476-480`, credential/device/provider clears `:485-495`, `AvatarUrl = null` `:496`, +`IsEmailConfirmed` cleared `:500`; `public new Result Delete()` `:443` calling `base.Delete()` `:445` +and raising `UserDeleted` `:448`; no `RefreshToken` member. +ERASURE WORKFLOW (re-read): `Source/Core/MMCA.Common.Application/Users/UseCases/DeleteUser/DeleteUserHandlerBase.cs`, +refresh-session model stated at `:107-111`, `erasable.Delete()` `:119`, `OnAfterSoftDeleteAsync` +`:126`, `erasable.Anonymize()` `:133`, ONE `SaveChangesAsync` `:139`, marker write +`SoftDeletedUserCache.MarkDeletedAsync` `:146-148` with its best-effort catch `:150-153`, the +`SoftDeletedMarkerFailed` warning (`LoggerMessage` on the base) `:199-200`. The `afterCommit` doc at +`:180-182` says the marker is written after the save and, under an `ITransactional` command, before +the commit, so the body says "as it saves" rather than "after commit". All five handler anchors moved ++4 from the 2026-09-19 ledger. ADC (audit): `DeleteUserHandler.cs` (87 lines) subclasses at `:29-35`, +overrides `OnAfterSoftDeleteAsync` `:43-74`, integration event `:59`, avatar-blob internal command +`:68-71`, `ScheduleAvatarBlobDeletionAsync` `:76-86`, failure `:85`, class doc `:25-27`; +`DeleteUserCommand.cs:22` implements `ICacheInvalidating, ITransactional, IUserOwnedRequest`, the +`ITransactional` rationale at `:9-14`. +NEW SECTION (2026-10-02, user-approved fold-in), "The row that still holds its slot", grounded in +ADR-095 (`Website/docs-src/adr/095-soft-delete-unique-indexes.md`, Accepted 2026-08-23, revised +2026-08-26 and 2026-10-01) and in source (re-read): +`Source/Core/MMCA.Common.Infrastructure/Persistence/Conventions/SoftDeleteUniqueIndexConvention.cs:34` +declares `SoftDeleteUniqueIndexConvention(DataSource engine) : IModelFinalizingConvention`; the +speaker-email example is its remarks at `:11-17`; non-owned `IAuditableEntity` scope `:46-47`; +unique-only `:61-64`; shared `SoftDeleteFilterSql.Build` `:55-57`; hand-authored filter extended with +`AND` `:80`; existing soft-delete clause left alone `:73-76`; engine coverage `:29-30`; relational +check `:43-44`. Registered once at +`Source/Core/MMCA.Common.Infrastructure/Persistence/DbContexts/ApplicationDbContext.cs:392` (comment +`:389-391`). The per-engine predicate (`= false` on PostgreSQL, `= 0` elsewhere) is +`Persistence/SoftDeleteFilterSql.cs:31`. The undelete-collision and invisible-filter costs are +ADR-095 Trade-offs (`:145-160`). UPSTREAM FLAG: ADR-095 cites the class at `:33` and the registration +at `ApplicationDbContext.cs:393`; current source is `:34` and `:392`, and its `SoftDeleteFilterSql.cs` +ranges no longer match that file's layout. This article cites source, not the ADR's anchors. +RESTRICT BY DEFAULT (re-read, all moved +1): `RestrictDeleteByDefaultConvention.cs:42`, annotation +`MMCA:DeleteBehaviorSource` `:48`, `Explicit` `:51`, `Convention` `:54`, `Ownership` `:57`, +`ProcessModelFinalizing` `:60`, rationale `:15-20`, left-alone `:22-28`, Cosmos no-op `:35-39`; +registered at `ApplicationDbContext.cs:399` (the code block's first line, verbatim; comment +`:394-398`). `DeleteBehaviorConventionTestsBase.cs:21` (audit). ADR-119 Accepted 2026-09-11, revised +2026-09-19 (audit). +OUTBOX: `OutboxCleanupService` declared at +`Source/Core/MMCA.Common.Infrastructure/Persistence/Outbox/Administration/OutboxCleanupService.cs:42` +(re-read; was `:47`); `Outbox:RetentionDays` default 7, 0 disables, `OutboxSettings.cs:65` (audit). +FIX (2026-10-02): the body quoted ADR-003 as "grows until cleaned up", which is not its text; it now +paraphrases `Website/docs-src/adr/003-outbox-dual-dispatch.md:56` ("The outbox table grows until +processed entries are cleaned up") without quotation marks, and the section is in present tense. +PII (re-read unless marked): `PiiConventionTestsBase.cs:12` `EntitiesWithPiiProperties_ShouldImplement_IAnonymizable` +(audit); `Domain/Privacy/PiiRedactor.cs` is 145 lines, class `:24-145`, token `:27` (audit for `:27`); +`PiiRedactorTests.cs` has 9 `[Fact]`s and no `[Theory]` (was 7); `PiiErasureContractFitnessTests.cs:19` +(audit). The one production call site: `AuditTrailSaveChangesInterceptor.cs:287` +(`PiiRedactor.HasPii`), `RedactedToken` into `OldValue`/`NewValue` at `:310-311`; opt-in via +`AuditTrailSettings.Enabled` (no initializer) at +`Source/Core/MMCA.Common.Infrastructure/Persistence/AuditTrail/AuditTrailSettings.cs:26` (path +corrected from `Infrastructure/Settings/`). For logs the redactor remains an opt-in call-site utility, +not an auto-wired destructuring policy. `EncryptedStringConverter` (audit, all unchanged): +AES-256-GCM `Infrastructure/Persistence/Encryption/EncryptedStringConverter.cs:10-11`, layout doc +`:39-40`, `NonceSize = 12` `:78`, `TagSize = 16` `:81`, versioned envelope `:203-208`, key version +`:109`, associated data `:198`/`:231`; zero references in `MMCA.ADC/Source` or `MMCA.Store/Source`; +ADR-037 Decision item 10 starts `:122`, zero adoption at `:136-141`. +SCORECARD (re-read): section 30 row `Website/docs-src/governance/common-ArchitectureScorecard.md:94` +(was `:110`), `| 30 | Compliance, Privacy & Governance | 2 | 3 | 8 | 6/16 |`, values unchanged. +Indices as stamped at `:5` (evidence 2026-10-01 at v1.218.0): Maturity `:9` 317/328 = 96.6% (was +97.0%, 318/328), Implementation `:10` 705/820 = 86.0%; N/A bullet `:104` reads "none." with +Sigma-weight 82; section 16 row `:80` is M4/I9 (was M3/I6). Section 30 itself did not move. The +original single-axis 1-out-of-4 snapshot: the 2026-09-19 FLAG (no live evidence path) is resolved by +the audit, which located it in MMCA.Common git history at commit f5180991, `ArchitectureScorecard.md:42` +(score 1, "Lowest score") and `:74` ("the single lowest category score"). +LIVE SESSION (re-read; REFRAMED 2026-10-02): `SoftDeletedUserMiddleware` declared at +`Source/Presentation/MMCA.Common.API/Middleware/SoftDeletedUserMiddleware.cs:33` (was `:31`), BR-133 +at `:11`, class doc `:13-15` says the marker is honored on every host. Pipeline steps in +`Source/Presentation/MMCA.Common.API/Startup/Pipeline/MiddlewarePipelineBuilder.cs`: `UseAuthentication()` +`:105`, `TenantResolution` `:108`, `UseRateLimiter()` `:121`, `SoftDeletedUserFilter` `:124-125`, +`UseAuthorization()` `:129`; `WebApplicationExtensions.cs:170` calls `MiddlewarePipelineBuilder.CreateDefault()`. +Anonymous pass-through `:74-82`; cached-true 401 `:102-109`; lazy +`GetService()` `:111`; no-validator pass-through on a miss `:112-119` +(rationale `:49-60`); validator query `:127-129`; fresh-query 401 `:160-164`; fail-open rationale +`:18-31`, cache-read catch `:92-100`, validator catch `:131-138`. `NotDeletedLookupDuration = TimeSpan.FromSeconds(30)` +at `:39`, chosen against `MarkerDuration` at `:147`. `SoftDeletedUserCache.MarkerDuration => +TimeSpan.FromMinutes(15)` at `Source/Core/MMCA.Common.Application/Auth/SoftDeletedUserCache.cs:32`, +rationale `:23-30` (must outlive the access token; equals the default 15-minute lifetime, +`JwtSettings.cs:61`, audit). `ISoftDeletedUserValidator.cs:7`, `IsUserSoftDeletedAsync` `:15`; +implemented once by the framework as +`Source/Core/MMCA.Common.Application/Users/SoftDeletedUserValidator.cs:20` (single filter-bypassing +`ExistsAsync` at `:31-34`), closed over ADC's `User` at +`MMCA.ADC/Source/Modules/Identity/MMCA.ADC.Identity.Application/DependencyInjection.cs:37`. FIX +(2026-10-02): the body's "cached roughly 30 seconds, bounded revocation window" and "a host with no +validator no-ops" were both false against current source (changed in Common #473); the section now +teaches the 15-minute marker written by the base, honored everywhere, with 30 seconds only for a +"not deleted" answer and the residual window confined to a failed marker write. UPSTREAM FLAGS: +ADR-047 (`:78-89`, `:162-183`, `:242`) still documents `MarkerDuration = FromSeconds(30)`, so this +section is grounded in source rather than the ADR; and the middleware's own remarks +(`SoftDeletedUserMiddleware.cs:27-28`) say deletion "already revoked the refresh token", which +contradicts `DeleteUserHandlerBase.cs:107-111`. The article follows the handler. +EXPORT (re-read unless marked): `MMCA.Common/Source/Core/MMCA.Common.Shared/Privacy/UserDataExportDTO.cs:15` +(audit); ADC `UserDataExportSubjectDTO.cs:16`, credential exclusion `:6-7` (audit). The quoted block +is verbatim from +`MMCA.Common/Source/Core/MMCA.Common.Application/Users/UseCases/ExportUserData/ExportUserDataHandlerBase.cs:185-198`, +whose `:190` calls the base's private `ExportSectionUnavailable` `LoggerMessage` (Warning, declared +`:201-202`); FIX (2026-10-02): the block's `UserUseCaseLog.` qualifier is removed, since +`UserUseCaseLog.cs` no longer exists. "Cancellation is not degradation." at `:35` (audit). ADC +`ExportUserDataHandler.cs` (78 lines, audit): declared `:30-35`, `HasExportPrivilege` `:38`, +`BuildSubjectSnapshotAsync` `:41-77`, no catch, class doc `:23-28`; `NotificationUserDataExportSection` +doc `:11-15` (audit). `MMCA.ADC.Engagement.Contracts/UserEngagementExportServiceGrpcAdapter.cs` +declares the class at `:19-20`, doc and rationale `:10-18` (was `:18-19`, `:10-16`). +HEADER (2026-10-02): ADR cell gains ADR-095; Status adds ADR-095 and `00-primer.md:193`, scorecard +anchor `:94`. Header reconciled with `README.md:46` in this run: group G23 is the ADC Identity module (published as +`group-24-identity-module.md`; group IDs and file numbers differ, `00-group-taxonomy.md:79`), and ADR-076 +is added because the export section relies on it. Other facts (audit): four ADC service hosts, Apache-2.0 license, +next article #37 (`README.md:47`), `group-24-identity-module.md` exists.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/specification-pattern.md b/docs-src/articles/specification-pattern.md index 9be77cbc..6d2dc1ea 100644 --- a/docs-src/articles/specification-pattern.md +++ b/docs-src/articles/specification-pattern.md @@ -111,8 +111,10 @@ public sealed class PublicSessionStatusSpecification : Specification> Criteria => StatusCriteria; } -// The paged sessions read: the speaker scope (itself a specification, a Session.Id IN (...) filter -// over the SessionSpeaker join) is ANDed with the public rule, never substituted for it. +// The paged sessions read. publicSpecification is the public filter (null for a privileged caller): +// a specification built from StatusCriteria plus a published-event scope. The speaker scope (itself a +// specification, a Session.Id IN (...) filter over the SessionSpeaker join) is ANDed with it, never +// substituted for it. return publicSpecification is null ? speakerResult.Value : publicSpecification.And(speakerResult.Value!); @@ -120,9 +122,11 @@ return publicSpecification is null The leaked-query bug from the opening cannot happen here. Both halves of the composed query are named objects, not text someone retypes at every call site: the speaker scope arrives as a specification -built by a query handler, and the public visibility rule is a type the controller always ANDs in, -because substituting one for the other would leak non-accepted sessions to non-privileged callers (the -composing method's own doc comment says exactly that). The criteria are server-authored, so the client +built by a query handler, and the public visibility rule arrives the same way, built by another handler +from the same `StatusCriteria` plus a published-event scope. For every non-privileged caller the +controller always ANDs that rule in, because substituting one for the other would leak non-accepted +sessions to non-privileged callers (the composing method's own doc comment says exactly that); a +privileged caller (organizer or content editor) gets no public filter at all. The criteria are server-authored, so the client cannot tamper with them, and each rule is reusable and testable in isolation. This is a textbook Specification with security overtones: the authorization predicate is not something the request can override. @@ -133,18 +137,24 @@ the entity type at the call site. Its generic constraint is deliberately the con `AuditableBaseEntity` rather than an interface, because a member access declared on an interface is not guaranteed to map to the entity's audit column and the criteria has to stay EF-translatable. ADC's question-answer controllers show the intended shape: an organizer gets `null` -(no scoping at all), and everyone else gets that specification bound to their own user id. +(no scoping at all), and everyone else gets that specification bound to their own user id. The one +other way to get `null` is a non-organizer whose owner claim cannot be resolved, and that caller is +answered with a 403 by a fail-closed gate on the read endpoints, so `null` means "unscoped" only for +the role that is allowed to read everything. ### 2. Dynamic filtering (the untrusted input) The other half of any list endpoint is user-driven shaping: the `?filter=...&sort=...&fields=...` querystring. This is *untrusted* and is handled completely separately. Each CLR type gets an -`IFilterStrategy` (`StringFilterStrategy`, `IntFilterStrategy`, `DateTimeFilterStrategy`, and so on) -that knows which operators it supports, and a `QueryFilterService` registry dispatches by type. It runs -in two phases: `ValidateFilters` checks that the property exists on the entity and the operator is -legal for its type *before* the query (so a bad filter is a 400, not a SQL exception), and -`ApplyFilters` builds the `.Where()` chain. Untrusted input is allow-listed against real entity -metadata, never concatenated blindly. +`IFilterStrategy` (`StringFilterStrategy`, `IntFilterStrategy`, `DateTimeFilterStrategy`, and so on, +plus one built on first use for a strongly typed identifier column) that knows which operators it +supports, and a `QueryFilterService` registry dispatches by type. It runs in two phases: +`ValidateFilters` checks every key and operator *before* the query (so a bad filter is a 400, not a SQL +exception), and `ApplyFilters` builds the `.Where()` chain. Validation checks the response DTO's field +contract before the entity: a key the client wrote must name a field the DTO declares and must not be a +navigation path, a server-mapped path is capped in depth, the property must exist on the entity, and +the operator must be legal for its type. Untrusted input is allow-listed against the response contract +and real entity metadata, never concatenated blindly. The separation is deliberate and worth stating plainly: **specifications are trusted and live with the domain; dynamic filters are untrusted and are validated, capped, and reflection-cached at the @@ -291,7 +301,29 @@ transactions wrap every command and query without touching a handler. *Tags: .NET, C Sharp, Software Architecture, Programming, Entity Framework* -*Notes (re-verified against the current tree, 2026-09-19, MMCA.Common v1.205.0): +*Notes (re-verified against the current tree, 2026-10-02, MMCA.Common v1.221.0; ADC, Store and +Helpdesk read at current `main`): +**This run's corrections:** the public visibility rule in the paged sessions read is not a +`PublicSessionStatusSpecification` instance. `SessionsController.GetReadSpecificationAsync` +(`MMCA.ADC/.../Conference.API/Controllers/Sessions/SessionsController.cs:75`) returns `null` for a +privileged caller (`:78-79`) and otherwise the specification from `GetPublicSessionFilterHandler` +(`:81-84`), which calls `CrossSourceSpecification.BuildAsync` +(`MMCA.ADC/.../Conference.Application/Sessions/UseCases/GetPublicSessionFilter/GetPublicSessionFilterHandler.cs:29-34`) +with `principalPredicate: e => e.IsPublished` (`:32`) and `localPredicate: +PublicSessionStatusSpecification.StatusCriteria` (`:34`); `BuildAsync` +(`MMCA.Common/Source/Core/MMCA.Common.Application/Specifications/CrossSourceSpecification.cs:39`) +returns an `InlineSpecification` (`:62`). The snippet comment and the prose after it were narrowed to +that. The question-answer paragraph gained the fail-closed gate: `GetExportSpecification` +(`MMCA.ADC/.../Conference.API/Controllers/Events/EventQuestionAnswersController.cs:107-112`) binds +`OwnedByUserSpecification` per caller with the `Organizer` bypass, and `RequireResolvableOwner` +(`:135`, rationale `:121-134`) answers a non-Organizer with an unresolvable owner claim with a 403; +`SessionQuestionAnswersController.cs` has the same shape (`:107-112`, `:135`). The filtering paragraph +gained the response-contract check: `EntityQueryService.FieldContract` is +`QueryFieldContract.For()` (`Application/Services/EntityQueryService.cs:123`) and is passed +to `QueryFilterService.ValidateFilters` in Step 1 (`:301`); that overload (`QueryFilterService.cs:175`) +validates against the contract before the entity (`:164-168`), and `IsAdmissibleKey` (`:209`, rules at +`:195-208`) refuses a client-authored navigation path or a field the contract does not declare and caps +server-mapped depth. `ISpecification` exposes `Criteria` (`Domain/Interfaces/ISpecification.cs:17`) and `IsSatisfiedBy` (`:22`); the abstract base's `Criteria` is a get-only abstract property (`Domain/Specifications/Specification.cs:23`) and `IsSatisfiedBy` @@ -302,155 +334,114 @@ lazy-compiles and caches the delegate in a private field (`:27`, `:32`). (`var parameter = left.Parameters[0];`, `:167`), rebinds the right-hand body onto it with `ParameterReplacer.Replace` (`:171`), and joins the two bodies with `Expression.AndAlso`/`OrElse` (`:169-173`); `Negate` (`:181`) wraps the inner body in `Expression.Not` and keeps that lambda's own -parameter (`:189-191`). No fresh parameter is created and no `Expression.Invoke` appears anywhere in -the file. The rebinder is the internal `ExpressionVisitor` `ParameterReplacer` +parameter (`:189-191`). The rebinder is the internal `ExpressionVisitor` `ParameterReplacer` (`Domain/Specifications/ParameterReplacer.cs:24`, static `Replace` with a `ReferenceEquals` short-circuit at `:34`/`:40`, `VisitParameter` at `:44`), shared with the Application layer through `InternalsVisibleTo` (`:18-23`). The portability rationale is in the XML docs at -`Specification.cs:58-75`: substitution produces a tree indistinguishable from a hand-written predicate -(`:60-63`), while an `InvocationExpression` "survives into the query tree, and while EF Core's -relational providers can usually unwrap it, others (Cosmos in particular) throw at translation time" -(`:66-69`); the per-instance caching rationale is at `:71-75` and the lazy fields themselves at -`:88`/`:91-93`, `:112`/`:115-117`, `:134`/`:137-138`. `ParameterReplacer.cs:12-15` states the same -avoidance. **Fluent forms:** `SpecificationExtensions` +`Specification.cs:58-75`, the Cosmos sentence quoted in the body at `:66-69`, the per-instance caching +rationale at `:71-75`, and the lazy fields at `:88`/`:91-93`, `:112`/`:115-117`, `:134`/`:137-138`. +`ParameterReplacer.cs:12-15` states the same avoidance. **Fluent forms:** `SpecificationExtensions` (`Domain/Specifications/SpecificationExtensions.cs:30`) declares an `extension(ISpecification<...> specification)` block (`:32`) exposing `And` -(`:48`), `Or` (`:68`), and `Not` (`:85`), each a thin factory over the corresponding combinator. -`Website/docs-src/onboarding/group-03-querying-specifications.md:17` documents the same substitution -mechanism and the same fluent members. -`Website/docs-src/governance/common-ArchitectureScorecard.md` (Rubric 2, Design Patterns) cites -Specification composition positively; its inline source anchors are not relied on here. -**Composition call sites, five of them, in two applications, each feeding a database read:** -(1) `MMCA.ADC/.../Conference.API/Controllers/Sessions/SessionsController.cs:129` evaluates -`publicSpecification.And(speakerResult.Value!)` inside `BuildPagedSessionSpecificationAsync` (`:107`), -and the result is the `specification:` argument (`:188`) of the paged `QueryService.GetAllAsync(` call -at `:185`; the never-substitute rationale (dropping the public filter for a speaker-scoped request -"would leak non-accepted sessions to non-privileged callers") is in that method's doc remarks at -`:103`. (2) `.../Conference.API/Controllers/Speakers/SpeakersController.cs:174` ANDs the BR-239 -public-speaker specification with the event-scoped filter, feeding the `GetAllAsync` call at `:178` as -its `specification:` argument at `:181`. (3) -`.../Conference.Application/Common/PublicConferenceVisibility.cs:149` ANDs -`PublicSessionStatusSpecification` with an `InlineSpecification` event scope (`Specification.cs:45`), -and the composed specification itself (not its `Criteria`) feeds the spec-taking projecting -`ListAsync` at `:154` (that helper, `GetEligibleSessionIdsAsync` at `:141`, backs -`GetVisibleSpeakerIdsAsync` at `:104`). (4) -`MMCA.Store/.../Catalog.API/Controllers/ReviewsController.cs:113` passes +(`:48`), `Or` (`:68`), and `Not` (`:85`). `Website/docs-src/onboarding/group-03-querying-specifications.md:17` +documents the same mechanism. `Website/docs-src/governance/common-ArchitectureScorecard.md` (Rubric 2) +cites Specification composition positively; its inline anchors are not relied on here. +**Composition call sites, five, in two applications, each feeding a database read:** (1) +`SessionsController.cs:135` evaluates `publicSpecification.And(speakerResult.Value!)` inside +`BuildPagedSessionSpecificationAsync` (`:113`, span `:113-135`), whose result is the `specification:` +argument (`:195`) of the paged `QueryService.GetAllAsync(` call at `:192`; the never-substitute +rationale is in that method's remarks at `:108-110`. (2) +`.../Conference.API/Controllers/Speakers/SpeakersController.cs:174` ANDs the public-speaker +specification with the event-scoped filter, feeding `GetAllAsync` at `:178` as its `specification:` +argument at `:181`. (3) `.../Conference.Application/Common/PublicConferenceVisibility.cs:149` ANDs +`PublicSessionStatusSpecification` with an `InlineSpecification` event scope, and the composed +specification feeds the spec-taking projecting `ListAsync` at `:154` (in `GetEligibleSessionIdsAsync`, +`:141`, backing `GetVisibleSpeakerIdsAsync` at `:104`). (4) +`MMCA.Store/.../Catalog.API/Controllers/ReviewsController.cs:106` passes `new ReviewsByProductSpecification(productId).And(new PublishedReviewsSpecification())` as the -`specification:` argument of the public paged reviews read (`GetAllAsync` at `:112`). (5) -`MMCA.Store/.../Catalog.Application/Reviews/DomainEventHandlers/ProductReviewChangedHandler.cs:56` -passes the same composed pair to the spec-taking projecting `ListAsync` (`:55`, projection -`review => review.Rating` at `:57`) when recomputing a product's rating. The two Store specifications -are `Catalog.Application/Reviews/Specifications/ReviewsByProductSpecification.cs:13` and -`.../PublishedReviewsSpecification.cs` (`Criteria` override at `:17`). -Scans of `MMCA.ADC/Source`, `MMCA.Store/Source`, and `MMCA.Helpdesk/Source` for -`new AndSpecification`/`OrSpecification`/`NotSpecification` and for `.Or(`/`.Not(` return zero hits: -every live composition uses the fluent `.And()`, and `Or` and `Not` have no consumer call site. -MMCA.Helpdesk composes nothing. The specification-first `ListAsync` has three consumer call sites: -`PublicConferenceVisibility.cs:78` (in `GetVisibleSessionIdsAsync`, `:57`) and `:154` above, plus -`ProductReviewChangedHandler.cs:55`. -The framework-shipped ownership scope is `OwnedByUserSpecification` +`specification:` argument of `publicQueryService.GetAllAsync` (`:105`). (5) +`MMCA.Store/.../Catalog.Application/Reviews/DomainEventHandlers/ProductReviewChangedHandler.cs:111` +passes the same pair to the projecting `ListAsync` (`:110`, projection `review => review.Rating` at +`:112`) inside `RecomputeAsync` (`:86`). The Store specifications are +`Catalog.Application/Reviews/Specifications/ReviewsByProductSpecification.cs:13` and +`.../PublishedReviewsSpecification.cs` (`Criteria` override at `:17`). Grep of `MMCA.ADC/Source`, +`MMCA.Store/Source`, and `MMCA.Helpdesk/Source` for `.And(`/`.Or(`/`.Not(` and +`new And|Or|NotSpecification` returns exactly those five `.And(` hits; `Or` and `Not` have no consumer +call site and MMCA.Helpdesk composes nothing. The specification-first `ListAsync` has six consumer call +sites: `PublicConferenceVisibility.cs:78` and `:154`, `ProductReviewChangedHandler.cs:110`, +`Reviews/UseCases/Submit/SubmitReviewHandler.cs:43`, +`Reviews/UseCases/Eligibility/GetReviewEligibilityHandler.cs:47`, and Store +`Identity.Application/Users/Administration/UserAdministrationService.cs:68`. +The snippet quotes `PublicSessionStatusSpecification` +(`MMCA.ADC/.../Conference.Application/Sessions/Specifications/PublicSessionStatusSpecification.cs:21`, +`StatusCriteria` `:24`, `Criteria` override `:28`); the speaker scope is the `Session.Id IN (...)` +`InlineSpecification` built by `GetSessionsBySpeakerFilterHandler` +(`.../Sessions/UseCases/GetSessionsBySpeakerFilter/GetSessionsBySpeakerFilterHandler.cs:42-43`). +`OwnedByUserSpecification` (`Domain/Specifications/OwnedByUserSpecification.cs:20`), criteria `e => e.CreatedBy == UserId` -(`:29-30`), constrained to the concrete `AuditableBaseEntity` for EF-translatability -(`:12-16`, `:22`); ADC binds it per caller in its event- and session-question-answer controllers -(organizer gets `null`, everyone else gets the scope). -The pipeline applies the composed criteria server-side as `query.Where(parameters.Criteria)` -(`Application/Services/Query/EntityQueryPipeline.cs:74` in `ExecuteProjectedAsync` and `:149` in -`ApplyIncludesCriteriaAndFilters`). Filtering: seven `IFilterStrategy` types -(`String`/`Bool`/`Int`/`Long`/`DateTime`/`Decimal`/`Guid`) in the `QueryFilterService` type registry -(`Application/Services/Filtering/QueryFilterService.cs:29-45`, entries at `:32-44`), two phases -`ValidateFilters`/`ApplyFilters`. Pipeline: `IEntityQueryPipeline`/`EntityQueryPipeline`, -`EntityQueryParameters`, `MaxUnboundedResultLimit` (1000) at `EntityQueryPipeline.cs:23` -applied via `Take` at `:99`/`:195`/`:250`; -`EntityQueryService` overloads are `public virtual` -(`Application/Services/EntityQueryService.cs:262`, `:283`) and the source labels **three** steps, not -four: "Step 1: Validate" at `:296` (via `Result.Combine`, `:297`), "Step 2: Execute the query pipeline" -at `:316`, "Step 3: Shape output to requested fields" at `:363`, with `PaginationMetadata` built by -`BuildPaginationMetadata` (`:608`, called at `:368`) and attached at `:377`. `IQueryableExecutor` is -declared in `MMCA.Common.Application` -(`Application/Interfaces/Infrastructure/Persistence/IQueryableExecutor.cs:7`, `Include` `:14`, -`AsSplitQuery` `:26`, `ToListAsync` `:34`, `CountAsync` `:41`) with the EF implementation in -Infrastructure. -ADR-055 section verified against -`Website/docs-src/adr/055-repository-and-specification-contract.md` and source. The read contract sits -in `Application/Interfaces/Infrastructure/Persistence/IRepository.cs` (a `Persistence/` subfolder -holds the persistence-facing interfaces): `IEntityReader` at `:21` -(`GetByIdAsync` `:26`/`:31`, `GetByIdsAsync` `:48`, `ExistsAsync` `:56`/`:62`), `IEntityQuerier` at -`:80` carrying the four parameter-driven reads (`GetAllAsync` `:85`, `GetProjectedAsync` `:105`, -`GetAllForLookupAsync` `:222`, `CountAsync` `:229`/`:232`), five specification-first ones -(`CountAsync(specification)` `:243`, `ListAsync(specification)` `:260`, -`ListAsync(specification, select)` `:279`, `AnyAsync(specification)` `:291`, and -`FirstOrDefaultAsync(specification)` `:148`), the keyset-paged `GetPageByCursorAsync` `:316` whose -optional `specification` scopes the page, and the expression-predicate members -`FirstOrDefaultAsync(where)` `:133`, `CountByAsync` `:167`, `SumByAsync` `:184`, and -`FindIncludingDeletedAsync` `:215`; `IReadRepository` composes both narrow halves at `:330-331` and -alone declares `Table`/`TableNoTracking`/`TableNoTrackingSingleQuery`/`TableNoTrackingSplitQuery` -(`:336`, `:339`, `:342`, `:345`). The build gate is -`RawQueryableConventionTestsBase.ApplicationLayer_DoesNotUseRawQueryableSurfaces` -(`Hosting/MMCA.Common.Testing.Architecture/Bases/Cqrs/RawQueryableConventionTestsBase.cs:61`), -scanning module Application projects for the `.Table`/`.TableNoTracking*` regex (`:103`), with the -extraction rationale at `:5-12`/`:85`, the textual-scan limits at `:13-23`, and the `AllowedFiles` -ratchet at `:38`/`:24-27`. Opt-in coverage is three of the four repos, each subclass sitting under a -`Cqrs/` folder in its architecture test project: MMCA.Store subclasses with an empty `AllowedFiles` +(`:29-30`), constrained to the concrete `AuditableBaseEntity` (`:12-16`, `:22`). +**Pipeline and filtering:** `query.Where(parameters.Criteria)` at +`Application/Services/Query/EntityQueryPipeline.cs:74` and `:149`; `MaxUnboundedResultLimit` (1000) at +`:23`, applied via `Take` at `:99`/`:195`/`:250`. `QueryFilterService` registry +(`Application/Services/Filtering/QueryFilterService.cs:32-48`, entries `:35-47`) holds seven built-in +strategies (`String`/`Bool`/`Int`/`Long`/`DateTime`/`Decimal`/`Guid`); an eighth, +`StronglyTypedIdFilterStrategy` (`StronglyTypedIdFilterStrategy.cs:24`), is built on first use and +memoized by `ResolveStrategy` (`QueryFilterService.cs:406-417`, `TryCreate` at `:414`). +`EntityQueryService` overloads are `public virtual` (`EntityQueryService.cs:262`, `:283`); "Step 1: +Validate" `:296` (`Result.Combine` `:297`), "Step 2: Execute the query pipeline" `:316`, "Step 3: Shape +output to requested fields" `:363`, `BuildPaginationMetadata` `:608` (called `:368`, attached `:377`). +`IQueryableExecutor` (`Application/Interfaces/Infrastructure/Persistence/IQueryableExecutor.cs:7`, +`Include` `:14`, `AsSplitQuery` `:26`, `ToListAsync` `:34`, `CountAsync` `:41`); MMCA.Common.Application +has zero `using Microsoft.EntityFrameworkCore`. +**Read contract** (`Application/Interfaces/Infrastructure/Persistence/IRepository.cs`): +`IEntityReader` `:21` (`GetByIdAsync` `:26`/`:31`, `GetByIdsAsync` `:48`, `ExistsAsync` `:56`/`:62`); +`IEntityQuerier` `:80` (`GetAllAsync` `:85`, `GetProjectedAsync` `:105`, `FirstOrDefaultAsync(where)` +`:134`, `FirstOrDefaultAsync(specification)` `:150`, `CountByAsync` `:169`, `SumByAsync` `:186`, +`FindIncludingDeletedAsync` `:217`, `GetAllForLookupAsync` `:224`, `CountAsync` `:231`/`:234`, +`CountAsync(specification)` `:245`, `ListAsync(specification)` `:262`, `ListAsync` `:281`, +`AnyAsync` `:293`, `GetPageByCursorAsync` `:318`); the two `FirstOrDefaultAsync` overloads carry RS0026 +suppressions at `:133`/`:149`. `IReadRepository` `:332` composes both halves and alone declares +`Table`/`TableNoTracking`/`TableNoTrackingSingleQuery`/`TableNoTrackingSplitQuery` (`:338`, `:341`, +`:344`, `:347`). `IUnitOfWork` hands out only the composites (`IUnitOfWork.cs:19`, `:29`); the +container registers only the open generic `IRepository<,>` +(`Infrastructure/DependencyInjection.cs:128`); `UnitOfWork.GetReadRepository` (`:53`) resolves and +caches in `_repositories` (`:23`, `:57-64`). +**Build gate:** `RawQueryableConventionTestsBase.ApplicationLayer_DoesNotUseRawQueryableSurfaces` +(`Hosting/MMCA.Common.Testing.Architecture/Bases/Cqrs/RawQueryableConventionTestsBase.cs:61`), regex +`:103`, rationale `:5-12`/`:85`, textual-scan limits `:13-23`, `AllowedFiles` ratchet `:38`/`:24-27`. +Subclasses: MMCA.Store with an empty `AllowedFiles` (`MMCA.Store/Tests/Architecture/MMCA.Store.Architecture.Tests/Cqrs/RawQueryableConventionTests.cs:9`, -`:14`), alongside MMCA.Common -(`MMCA.Common/Tests/Architecture/MMCA.Common.Architecture.Tests/Cqrs/RawQueryableConventionTests.cs:13`, -`AllowedFiles` at `:25` with six exempt files at `:28-36`) and MMCA.ADC +`:14`), MMCA.Common (`MMCA.Common/Tests/Architecture/MMCA.Common.Architecture.Tests/Cqrs/RawQueryableConventionTests.cs:13`, +`:25`, six files `:28-36`), MMCA.ADC (`MMCA.ADC/Tests/Architecture/MMCA.ADC.Architecture.Tests/Cqrs/RawQueryableConventionTests.cs:11`, -`AllowedFiles` at `:33` with nine exempt files at `:37-57`); only MMCA.Helpdesk has no subclass. -ADR-055 states the three-repo opt-in in its Decision and restates it as the partial-coverage -trade-off. The repository-resolution mechanics are in `Infrastructure/Persistence/UnitOfWork.cs`: -`GetReadRepository` (`:53`) resolves the entity's data source key, gets the matching `DbContext`, and -creates the repository (`:60-62`), caching it in the per-scope `_repositories` dictionary (`:23`, -`:57-64`) so the same entity reuses one instance. +`:33`, nine files `:37-57`); MMCA.Helpdesk has no subclass. **Editorial removal (carried forward):** the two adoption-status passages (the "honest part" paragraphs in the contract section and the "Half the composition surface still has no consumer" -trade-off) were removed from the article body at the author's direction, along with the recap clause -that echoed them. The consumption facts stay in this ledger as verified source state; do not re-add -the passages on a future pass. -**Consumption of the narrow interfaces:** a four-repo `.cs` scan for `IEntityReader`/`IEntityQuerier` -finds dependents in all three consumer applications, every one of them a helper parameter or a local -that only reads. MMCA.ADC: twenty declarations across thirteen files, among them -`Conference.Application/Common/PublicConferenceVisibility.cs:40`, `:75`, `:126`, `:151`, -`Conference.Application/SessionAssets/SessionAssetAccessService.cs:32`, `:65`, `:92`, `:125`, -`Conference.Application/Users/IntegrationEventHandlers/UserRegisteredHandler.cs:149` and `:186`, -`Conference.Application/Sessions/Validation/SessionRoomScheduling.cs:45`, -`Engagement.Application/SessionQuestions/UseCases/ToggleUpvote/ToggleUpvoteHandler.cs:107`, -`Engagement.Application/LivePolls/UseCases/CastVote/CastVoteHandler.cs:107`, -`Engagement.Application/CheckIns/Services/CheckInProcessor.cs:202`, and -`Engagement.Application/Points/UseCases/SetLeaderboardParticipation/SetLeaderboardParticipationHandler.cs:120`. -MMCA.Store carries four on `main`: -`Identity.Application/Customers/CustomerService.cs:14`, -`Identity.Application/Users/AuthenticationService.cs:50`, -`Identity.Application/Users/DomainEventHandlers/UserRegisteredHandler.cs:96`, and -`Catalog.Application/Categories/UseCases/AssignParentCategory/CategoryAssignParentUpdateHandler.cs:98`; -`Catalog.Application/Products/ProductVariantService.cs` deliberately stays `IReadRepository`, because -it calls members of both narrow halves. MMCA.Helpdesk carries one, -`Tickets.Application/Tickets/UseCases/GetById/GetTicketByIdHandler.cs:24`, typed narrow with the -reason in the comment above it (`:22`). (Store's holders reached `main` through PR #93, the v1.159.0 -sweep, not the earlier PR #92, which was closed unmerged.) -The wiring is unchanged and the article says so: `IUnitOfWork` still hands out only the composites -(`Application/Interfaces/Infrastructure/Persistence/IUnitOfWork.cs:19`, `:29`), the container still -registers only the open generic `IRepository<,>` (`Infrastructure/DependencyInjection.cs:107`), and -every narrowed holder is assigned from `GetReadRepository<...>()` by implicit reference conversion, so -nothing constructor-injects a narrow interface. Both ADC and Store also wrote the convention into -their own `CLAUDE.md`: read-only holders take `IEntityQuerier<,>`/`IEntityReader<,>` from -`IUnitOfWork.GetReadRepository<>()`, compose with `.And()`/`.Or()`/`.Not()` rather than the combinator -types, and pass a specification to the spec-taking members instead of unwrapping `.Criteria`. -**ADR-055 state:** it carries the 2026-08-18 revision (`:285`: composition drops `Expression.Invoke`, -the fluent members, the specification-first reads), the 2026-08-21 revision (`:448`: the first -production consumers and the deliberately unchanged registration surface), and a 2026-08-31 revision -(`:499`) whose "The querier carries five more members" section (`:503`) covers the aggregates and -`FirstOrDefaultAsync` overloads above and whose "MMCA.Helpdesk narrows too" section (`:530`) records -the third consumer. Its Status block notes at `:34` that the Store adoption, recorded as staged in the -2026-08-21 revision, merged to `main` on 2026-08-22. Article and ADR agree; both follow source. -The specification snippet quotes shipped code: -`PublicSessionStatusSpecification` is -`MMCA.ADC/.../Conference.Application/Sessions/Specifications/PublicSessionStatusSpecification.cs:20` -(`StatusCriteria` `:23`, `Criteria` override `:27`); the ANDed composition is -`SessionsController.BuildPagedSessionSpecificationAsync` -(`MMCA.ADC/.../Conference.API/Controllers/Sessions/SessionsController.cs:107-129`) in its fluent -`publicSpecification.And(speakerResult.Value!)` form at `:129`; the speaker scope is the -`Session.Id IN (...)` `InlineSpecification` built by `GetSessionsBySpeakerFilterHandler` -(`MMCA.ADC/.../Sessions/UseCases/GetSessionsBySpeakerFilter/GetSessionsBySpeakerFilterHandler.cs:42-43`).* +trade-off) were removed from the body at the author's direction, along with the recap clause that +echoed them. Do not re-add them on a future pass. +**Consumption of the narrow interfaces:** MMCA.ADC declares `IEntityReader`/`IEntityQuerier` 40 times +across 23 Application files (Grep count), among them `PublicConferenceVisibility.cs:40`, `:75`, +`:126`, `:151`, `SessionAssetAccessService.cs:32`, `:65`, `:92`, `:125`, +`Conference.Application/Users/IntegrationEventHandlers/UserRegisteredHandler.cs:149`/`:186`, +`SessionRoomScheduling.cs:45`, `Engagement.Application/SessionQuestions/UseCases/ToggleUpvote/ToggleUpvoteHandler.cs:150`, +`LivePolls/UseCases/CastVote/CastVoteHandler.cs:123`/`:144`, +`Points/UseCases/SetLeaderboardParticipation/SetLeaderboardParticipationHandler.cs:145`, and +`CheckIns/Services/CheckInProcessor.cs:202`. MMCA.Store carries four: +`Identity.Application/Customers/CustomerService.cs:14` and `Identity.Application/Users/AuthenticationService.cs:49` +(both private readonly fields assigned from `GetReadRepository`), +`Identity.Application/Users/DomainEventHandlers/UserRegisteredHandler.cs:131` and +`Catalog.Application/Categories/UseCases/AssignParentCategory/CategoryAssignParentUpdateHandler.cs:98` +(helper parameters). MMCA.Helpdesk carries one, +`Tickets.Application/Tickets/UseCases/GetById/GetTicketByIdHandler.cs:24`, with its reason at `:22`. +Every holder is assigned from `GetReadRepository<...>()` by implicit reference conversion; nothing +constructor-injects a narrow interface. The read-only/compose convention lives in each consumer's +`AGENTS.md` (`MMCA.ADC/AGENTS.md:106`, `MMCA.Store/AGENTS.md:105`), which each `CLAUDE.md` imports +(`@AGENTS.md`, line 3). +**ADR-055 state:** `Website/docs-src/adr/055-repository-and-specification-contract.md` carries the +2026-08-18 revision (`:295`), the 2026-08-21 revision (`:458`), the 2026-08-31 revision (`:509`, "The +querier carries five more members" `:513`, "MMCA.Helpdesk narrows too" `:540`), and a 2026-10-01 +revision (`:564`) recording the 40-site/23-file ADC count and the five composing call sites; Status +block `:34`. The ADR cites Store `AuthenticationService.cs:54` (`:193`, `:572`) where source is `:49`: +an ADR anchor drift, reported for `/update-adrs`, not followed here.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/test-pyramid.md b/docs-src/articles/test-pyramid.md index 46a0aab3..f0fff897 100644 --- a/docs-src/articles/test-pyramid.md +++ b/docs-src/articles/test-pyramid.md @@ -1,16 +1,17 @@ # The test pyramid, not the ice-cream cone: 2,254 fast tests, zero Docker -> Series: MMCA.Common · Article #35 (deep-dive) · Pillar P4 · Group G26 · Rubric §14 · +> Series: MMCA.Common · Article #35 (deep-dive) · Pillar P4 · Group G25 · Rubric §14 · > Status: grounded in `MMCA.Common/CLAUDE.md` (Testing and Build & Test Commands sections), > `Website/docs-src/governance/common-ArchitectureScorecard.md` (§14, §28), > `Website/docs-src/adr/058-runtime-conformance-suites-as-a-package.md`, > `Website/docs-src/adr/063-accessibility-conformance-gate.md`, -> `Website/docs-src/adr/117-apphost-integration-test-base.md`, and +> `Website/docs-src/adr/117-apphost-integration-test-base.md`, +> `MMCA.Common/.github/workflows/ci.yml`, `MMCA.Common/FACTS.md`, the `MMCA.Common.Testing*` sources, and > `Website/docs-src/onboarding/group-28-testing-infrastructure.md`. No em dashes. **Subtitle:** A suite you run constantly is worth more than a suite you run nervously. Here is how MMCA.Common keeps 2,254 tests fast enough to live in the inner loop, with real-database -integration coverage and no Docker in sight. +integration coverage and no Docker in that loop. --- @@ -30,9 +31,9 @@ the enforced coverage floor and the size of the suite behind it. ## Why the shape matters more than the count The test-count number is not the point. The shape is. The rubric (`Website/docs-src/governance/ArchitectureEvaluationCriteria.md`, -category 14) describes a healthy pyramid as "many fast unit tests on domain and application, fewer -integration, few E2E," and names the inverted pyramid, "mostly slow E2E, flaky tests, tests disabled -without tracking," as the headline red flag. +category 14) describes a healthy pyramid as "many fast unit tests on domain/application, fewer +integration, few E2E," and leads its red flags with "Inverted pyramid (mostly slow E2E), flaky tests, +tests disabled/skipped without tracking." The reason is the inner loop. A wide base of fast tests is one you run after every change, which means defects surface in seconds, while you still have the context to fix them. A top-heavy suite is one you @@ -42,12 +43,10 @@ you write code or a tax you pay at the end. ## The base: fast, pure, no infrastructure -The wide base of the MMCA.Common pyramid is pure unit tests with no I/O -(`Website/docs-src/onboarding/group-28-testing-infrastructure.md`): domain entity factories and invariants, value -objects, the `Result`/`Error` primitives, CQRS handlers with mocked repositories, FluentValidation -validators, and DTO and request mappers. These dominate the type count and run in-memory in -milliseconds. The whole reason this layer can be wide is the framework's design: Clean Architecture -keeps the Domain framework-pure and the Application layer testable without infrastructure, so the +The wide base of the MMCA.Common pyramid is pure unit tests with no I/O: domain entity factories and +invariants, value objects, the `Result`/`Error` primitives, CQRS handlers with mocked repositories, +FluentValidation validators, and DTO and request mappers. They run in-memory in milliseconds. The +whole reason this layer can be wide is the framework's design: Clean Architecture keeps the Domain framework-pure and the Application layer testable without infrastructure, so the logic worth testing is reachable without booting a host or touching a database. Two design choices keep this layer honest. First, time is injected: tests use `FakeTimeProvider` rather @@ -91,7 +90,7 @@ would. ## Shipped test packages: consumers do not re-invent the harness -Five of the framework's nineteen published NuGet packages are test *infrastructure*, not test code, and this is +Six of the framework's twenty-two published NuGet packages are test *infrastructure*, not test code, and this is how the pyramid stays consistent across three codebases instead of being rebuilt three times: - `MMCA.Common.Testing`, the integration base: `IntegrationTestBase` supplies a configured @@ -104,12 +103,17 @@ how the pyramid stays consistent across three codebases instead of being rebuilt an axe-core WCAG 2.1 AA assertion. - `MMCA.Common.Testing.UI`, the bUnit base: `BunitComponentTestBase` registers MudBlazor's services, configures loose JSInterop, and wires real auth doubles so component tests resolve `` - cascades. + cascades; the same package ships the `MarkupSnapshot` golden-markup helper and page-test bases for the + framework's identity pages (`ConfirmEmailPageTestsBase`, `RoleAdminListPageTestsBase`, + `RoleAdminEditPageTestsBase`). - `MMCA.Common.Testing.Aspire`, the AppHost base: `AppHostFixtureBase` boots a real AppHost once per test collection and waits on each resource's own readiness signal, while `AppHostTestBase` - hands a test a client bound to a named resource plus typed health, readiness and JWKS assertions. + hands a test a client bound to a named resource plus typed health, readiness, JWKS, h2c and + data-source assertions. - `MMCA.Common.Testing.Architecture`, the fitness-rule library: the architecture rules defined once and consumed by each repo's thin test suite. +- `MMCA.Common.AI.Testing`, the AI test harness: `ReplayChatClient`, `GoldenReplayTestsBase` and + `PromptContractPinTestsBase`, keyed on a `PromptContract`'s normalized SHA-256 hash. ```csharp // A downstream integration test: a few lines of fixture glue, then real HTTP calls. @@ -151,8 +155,10 @@ contract, that a consuming host subclasses to prove it wired the framework corre - `MmcaGatewayHardeningTestsBase` drives a booted gateway through eight edge gates: the per-client-IP rate limiter and its bypass list, the tighter named policy on the credential route, a correlation id generated when the caller supplies none and echoed when it does, one readiness check - per downstream service, an active health probe on every cluster, and partitioning by the forwarded - client IP rather than the proxy IP. + per downstream service, the active health-probe state of every cluster, and partitioning by the + forwarded client IP rather than the proxy IP. The probe gate is switchable: by default every cluster + must carry an enabled active probe, and both consumer gateways override `ActiveHealthChecksExpected` + to `false`, so on them it asserts that no cluster carries one. - `DecoratorPipelineOrderTestsBase` resolves the decorated handler out of a built provider and walks the constructed object graph, asserting the documented nesting order. @@ -163,17 +169,21 @@ structure and registration, and their ADR draws that line itself in its trade-of behavior, and nothing here is inferred from a registration list. Service hosts boot through `SqlServerIntegrationTestFixtureBase`, which creates a GUID-named throwaway SQL Server database, lets the host's own migrate-on-start strategy apply the schema, resets data between tests -with Respawn, and drops the database on disposal. Database-free hosts (the two YARP gateways) boot -through `ProductionHostApplicationFactory`, which pins `UseEnvironment("Production")` so -the production-only branches (restrictive CORS, HSTS emission) are the ones actually under test, and -captures the started `IHost`, because `StopAsync` is not reachable through the `WebApplicationFactory` +with Respawn, and drops the database on disposal. Database-free hosts boot through +`ProductionHostApplicationFactory`: the two YARP gateways, and the UI web heads through +Production-pinned factories such as ADC's `ConferenceUiHostApplicationFactory`, which derives from it. +The base pins `UseEnvironment("Production")` so the production-only branches (restrictive CORS, HSTS +emission) are the ones actually under test, and captures the started `IHost`, because `StopAsync` is not reachable through the `WebApplicationFactory` surface at all. The cost of adopting one stays small, which is the point of writing the body once: a subclass supplies two probe requests, or a path-count floor plus a pinned resource list, or a client factory, and the two -gateway shutdown subclasses are single-line declarations with no body. There are no committed snapshots -either. The OpenAPI guard asserts against the live document rather than a checked-in file, so a new -controller can never leave a stale snapshot behind. +gateway shutdown subclasses are single-line declarations with no body. The runtime guard reads no +committed snapshot either: the OpenAPI base asserts against the live document rather than a checked-in +file, so a new controller can never leave a stale snapshot behind. ADC and Store do commit each host's +`openapi/.json` and fail CI on an uncommitted difference, but that is a separate build-time check +each consumer owns, asking whether the contract changed without review rather than whether a booted +host serves a usable one. Adoption is partial, and that is worth reporting as an inventory rather than a clean sweep. The OpenAPI guard and the problem-details guard both run on every extracted REST host: four ADC services and three @@ -193,8 +203,9 @@ whole stack fits together, which project resources exist, which database each on share, where JWKS discovery points, and the `WaitFor` graph that orders the startup. A solution build type-checks that file and never runs it, so a resource renamed on one side of a `WithReference` still compiles. The in-process integration tier boots hosts directly through `WebApplicationFactory`, which is -the point of that tier and also means it never sees the orchestration. The E2E tier runs against a -deployed environment, by which time a composition mistake is an incident rather than a test failure. +the point of that tier and also means it never sees the orchestration. The E2E tier does boot a full +stack (ADC's E2E workflow brings the Aspire stack up in CI), but it asserts browser journeys rather than +the wiring contracts, and the deploy path runs it only for UI-affecting changes. ADR-117 closes that gap as a package rather than a per-repo copy, and both consumer smoke tiers subclass it. @@ -218,8 +229,10 @@ an eight-day red nightly to diagnose. `AppHostTestBase` then gives a test the two things only a running stack can hand it, an `HttpClient` bound to a named resource and a resolved connection string, plus typed assertions over the -wiring contracts: `AssertHealthyAsync`, `AssertAliveAsync`, `AssertReadyAsync`, `AssertJwksAsync` and -`AssertH2cAsync`. The probe paths are constants (`/health`, `/alive`, `/health/ready`, +wiring contracts: `AssertHealthyAsync`, `AssertAliveAsync`, `AssertReadyAsync`, `AssertJwksAsync`, +`AssertH2cAsync`, and `AssertDataSourceAsync`, which checks that the AppHost injected the data-source +connection string the framework's multi-database resolver reads, a logical-name typo that no build and +no in-process tier can see. The probe paths are constants (`/health`, `/alive`, `/health/ready`, `/.well-known/jwks.json`) mirrored from the framework's own, with a unit test cross-asserting each pair so a rename cannot silently orphan a probe. One rule is written into the constant's own documentation: a startup gate probes liveness, never readiness, because a readiness endpoint aggregates downstream checks @@ -238,12 +251,20 @@ public sealed class StackSmokeTests(MyAppHostFixture fixture) : AppHostTestBase< [Fact] public async Task Identity_publishes_its_key_set() { - Assert.SkipWhen(!Fixture.IsAvailable, Fixture.SkipReason!); + if (!Fixture.IsAvailable) + { + Assert.Skip(Fixture.SkipReason!); + } + await AssertJwksAsync("identity"); } } ``` +The skip is written as a branch on purpose. `Assert.SkipWhen` validates its reason before its +condition, and `SkipReason` is null exactly when the stack did start, so the one-line form throws on +every runner able to boot the AppHost; the base class documentation prescribes the branch. + ## Accessibility as a shipped test contract The E2E package carries one more contract, and it is the tier where a published standard turns into a @@ -279,7 +300,10 @@ Enforcement then differs per repo, and precision matters more than a slogan. MMC backend-less gallery across chromium, firefox, and webkit, and all three are required merge checks. ADC and Store run a chromium-only leg against the full Aspire stack as a deploy gate, and that gate is scoped to UI changes, so a backend-only or infra-only deploy legitimately skips it: "deployed" does not -always mean "axe ran on this commit". MMCA.Helpdesk adopts none of it. It pins the package version, +always mean "axe ran on this commit". Firefox and webkit run on separate weekly E2E runs instead, and a +cross-browser freshness gate fails a deploy when either engine has no successful run inside a 10-day +window, so cross-engine coverage is enforced by recency rather than per commit. MMCA.Helpdesk adopts +none of it. It pins the package version, references it from no project, and has no E2E test project at all, so the seed demonstrates the layers and not this contract. @@ -303,8 +327,8 @@ the floor only ever moves upward. The shape is right, but the scorecard names real gaps and one is squarely in the testing story. -- **The UI tier's visual check is markup-deep, not pixel-deep.** The framework ships roughly a dozen - reusable Blazor primitives in `MMCA.Common.UI`, some with real branching logic (`MobileCardList`, +- **The UI tier's visual check is markup-deep, not pixel-deep.** The framework ships 26 reusable + Blazor components in `MMCA.Common.UI`, some with real branching logic (`MobileCardList`, `MobileInfiniteScrollList`), and the pyramid carries a fast base layer *for the UI* under them: the `MMCA.Common.Testing.UI` bUnit base backs their component tests, a real-browser render-smoke gate runs in CI, and a render-snapshot regression tier diffs their markup against committed baselines. @@ -312,15 +336,20 @@ The shape is right, but the scorecard names real gaps and one is squarely in the what a snapshot compares: markup structure, not rendered pixels. - **SQLite is not SQL Server.** The middle tier is fast precisely because it uses SQLite, which means SQL-Server-specific behavior (certain query translations, concurrency-token semantics) is validated - against an approximation. The scorecard's Data Architecture row is candid about the surrounding + in the inner loop only against an approximation. Common CI adds a SQL Server Testcontainers job that + asserts row-version concurrency, identity insert and outbox-in-the-same-save against the real engine, + but that is a container tier outside the fast run. The scorecard's Data Architecture row is candid about the surrounding shape: it holds maturity at 4 with implementation at 9, and ADR-018 records the non-SQL engines as deliberately latent, with no production entity on them. The trade buys a fast, Docker-free inner loop at the cost of needing the consumer apps and CI to cover the SQL-Server-specific paths. -- **The honest limit is mutation testing, not coverage.** The unit tier holds a **68.3%** line-coverage +- **The honest limits are mutation testing and the container tiers, not coverage.** The unit tier holds a **68.3%** line-coverage floor (measured about 70.3%), enforced in CI and ratcheted up as the suite grows rather than left as - an aspiration. What holds category 14 below the top band is a single Exemplary gap: there is no - mutation testing on the Core tier, so a green suite proves the lines run, not that every assertion - would catch a mutant. That is a real limit, stated plainly. + an aspiration. What holds category 14 below the top band starts with mutation testing: there is none + on the Core tier, so a green suite proves the lines run, not that every assertion would catch a + mutant. The scorecard names three structural gaps beside it: the integration tier (Redis, PostgreSQL, + package consumption, Bicep) runs on pull requests but is not a merge gate, the AppHost tier is + advisory, and messaging never meets a real broker in the framework's own CI. Those are real limits, + stated plainly. None of these argue against the pyramid. They are the cost of keeping the base fast and honest about what each tier actually proves. @@ -350,7 +379,7 @@ slow and flaky. **What we covered:** why the pyramid's shape matters more than its count, the fast no-Docker base (pure unit tests plus `FakeTimeProvider`), the real-SQLite middle tier with two databases in `MultiSourceSqliteIntegrationTests`, the thin bUnit/Playwright cap and the orthogonal fitness-test tier, -the five shipped test packages that let consumers reuse the harness, the seven runtime conformance bases +the six shipped test packages that let consumers reuse the harness, the seven runtime conformance bases that prove a really-booted host wired the framework's contracts (ADR-058) and their partial adoption, the AppHost tier that compiles a claim about the composition itself (ADR-117), WCAG 2.1 AA shipped as a named axe target with one recorded exception (ADR-063), the xUnit v3 / MTP runner and the CI coverage floor, and @@ -368,117 +397,72 @@ own app.* *Tags: .NET, Testing, C Sharp, Software Architecture, Test Automation* -*Notes (this run, re-verified at framework v1.205.0, snapshot 2026-09-17 (`MMCA.Common/FACTS.md:4,14`), -against `Website/docs-src/governance/common-ArchitectureScorecard.md:5,88,94,120,121`, -`MMCA.Common/.github/workflows/ci.yml:180,183,467-468,481`, and `MMCA.Common/FACTS.md:19,35-39`): -verified names/facts: the suite is about 2,254 `[Fact]`/`[Theory]`, weighted to Core -(`common-ArchitectureScorecard.md:94` §14, maturity 4 / implementation 9, "counts re-synced 2026-09-14"; -`ci.yml:180` comment, which floors the run at 2000 and puts the suite at about 2,254, above the -`--minimum-expected-tests 2000` run at `:183`). The prior 1,880 across 262 files is sixteenth-wave history, not a current figure, so the H1, the -subtitle and the opening paragraph were re-cut to the current number this run. `FakeTimeProvider`, -`MultiSourceSqliteIntegrationTests` -(`MMCA.Common/Tests/Core/MMCA.Common.Infrastructure.Tests/Persistence/DataSources/MultiSourceSqliteIntegrationTests.cs:42-52`: -two GUID-named `.db` files under `Path.GetTempPath()` `:44-45`, wired as `SourceA`/`SourceB` Sqlite -connection strings `:50-51`), which is why the middle tier is described as embedded SQLite rather than -SQLite in-memory this run: the standout suite is file-backed. xUnit v3 + Microsoft Testing Platform (not -VSTest, per `global.json`); the unit-tier coverage floor 68.3% measured about 70.3% (`ci.yml:467-468` -comment, `awk -v m="68.3"` at `:481`). Five Testing.* packages of the nineteen published -(`FACTS.md:19` "Published packages - 19"; `Testing` `:35`, `Testing.Architecture` `:36`, `Testing.Aspire` -`:37`, `Testing.E2E` `:38`, `Testing.UI` `:39`), so the package bullets gained the `MMCA.Common.Testing.Aspire` -entry this run. `IntegrationTestBase`, `JwtTokenGenerator` (RS256), `BunitComponentTestBase`. -§14 and §28 both hold at maturity 4 / implementation 9, and §14 is held below 10 by the one remaining -Exemplary gap, no mutation testing on the Core tier (`common-ArchitectureScorecard.md:94`). The latest full -re-score is the thirty-sixth wave (2026-09-19, framework v1.205.0, git HEAD `90ffa7a`, clean tree, -`common-ArchitectureScorecard.md:5`, which also records rubric v2 per ADR-110 and §16 scored from this -cycle, so Sigma-weight is 82): no maturity value and no implementation value moved, three maturity -proposals and eight implementation proposals were refuted on the adversarial pass and held at prior, so -Maturity is 97.0% (318/328) (`:120`) and Implementation is 86.0% (705/820) (`:121`). §8 Data Architecture -is maturity 4 / implementation 9 on weight 3 (`:88`), its evidence names -`CrossDataSourceDegradeConvention` and records ADR-018's non-SQL engines as deliberately latent with no -production entity, so the trade-off bullet's "implementation at 8" was corrected this run. The rubric's -pyramid and inverted-pyramid wording is in -`Website/docs-src/governance/ArchitectureEvaluationCriteria.md`. The onboarding anchor moved: the testing -group is `Website/docs-src/onboarding/group-28-testing-infrastructure.md` (group-27 is now -`group-27-common-ai-integration.md`), which also fixed a dead published link in the paste render. The -illustrative `CatalogTests` snippet is composed for shape; the base type and helpers are real. -Runtime conformance suites re-read this run against -`Website/docs-src/adr/058-runtime-conformance-suites-as-a-package.md`, which is Accepted 2026-07-28 and -revised 2026-08-14, 2026-08-18, 2026-08-23 and 2026-09-03 (`:4`): **seven** contract bases, one per runtime -contract (`:27`), all under `MMCA.Common/Source/Hosting/MMCA.Common.Testing/Conformance/` in namespace -`MMCA.Common.Testing.Conformance`. The seventh, added by the 2026-09-03 revision, is -`MmcaGatewayHardeningTestsBase` (`MmcaGatewayHardeningTestsBase.cs:39`), which drives a booted -gateway through eight edge gates: rate limiter and bypass list, the tighter named policy on the credential -route, correlation id generated or echoed, one readiness check per downstream service, an active health -probe per cluster, and partitioning by the forwarded client IP (ADR-058 `:47-52`). The other six are -`ProblemDetailsContractTestsBase`, `OpenApiContractTestsBase`, -`ServiceInfoVersioningContractTestsBase`, `SecurityHeadersTestsBase`, -`GracefulShutdownTestsBase` and `DecoratorPipelineOrderTestsBase` (ADR-058 `:30-54`). An eighth base ships in that same folder without being one of -ADR-058's seven runtime contracts, `MiddlewarePipelineOrderTestsBase` -(`MiddlewarePipelineOrderTestsBase.cs:29`). The structure-vs-behavior boundary is ADR-015's own trade-off, -"The tests assert **structure / registration**, not runtime behavior" -(`Website/docs-src/adr/015-architecture-fitness-functions.md`). Adoption inventory re-verified by reading -the subclasses: problem details now covers all seven extracted REST hosts, because ADC Notification gained -one -(`MMCA.ADC/Tests/Integration/MMCA.ADC.Notification.IntegrationTests/Contract/ProblemDetailsContractTests.cs:16-17`, -`: ProblemDetailsContractTestsBase(fixture)`), so the prior "all of -those except ADC Notification" and the adjacent "the OpenAPI guard is the only one on every extracted REST -host" were both corrected out. Security headers is now subclassed on four hosts, the two Gateways plus both -web heads (`MMCA.ADC/Tests/Hosts/MMCA.ADC.UI.Web.Tests/SecurityHeadersTests.cs:17-18` and -`MMCA.Store/Tests/Hosts/MMCA.Store.UI.Web.Tests/SecurityHeadersTests.cs:17-18`, each overriding -`CreateClient()` off its own host factory); graceful shutdown remains Gateway-only. MMCA.Helpdesk no longer -adopts none of them: `MMCA.Helpdesk/Tests/Architecture/MMCA.Helpdesk.Architecture.Tests/DecoratorPipelineOrderTests.cs:13,35-37` -imports `MMCA.Common.Testing.Conformance` and subclasses `DecoratorPipelineOrderTestsBase`, and -`.../MiddlewarePipelineOrderTests.cs:1,15` subclasses `MiddlewarePipelineOrderTestsBase` for the ADR-079 -edge pipeline; that project carries the `MMCA.Common.Testing` reference itself -(`MMCA.Helpdesk.Architecture.Tests.csproj:24,26`), and Helpdesk pins all four -`MMCA.Common.Testing*` packages at 1.205.0 (`MMCA.Helpdesk/Directory.Packages.props:93-96`). Its test tree -is `Tests/Architecture` plus `Tests/Modules`, with no E2E project, which is what keeps the accessibility -section's Helpdesk sentence true. -AppHost tier added this run against `Website/docs-src/adr/117-apphost-integration-test-base.md` (Accepted -2026-09-09, revised 2026-09-11 and 2026-09-19; both consumer tiers subclass the package, `:8-10`; the gap -statement, a build never runs the AppHost and the in-process tier bypasses the orchestration, `:16-29`). -Read from source in `MMCA.Common/Source/Hosting/MMCA.Common.Testing.Aspire/`: `AppHostFixtureBase` -(`Fixtures/AppHostFixtureBase.cs:38`, an `IAsyncLifetime` collection fixture) evaluates the precondition -gate first and returns without starting anything when it yields a reason (`:104-108`), boots through -`CreateBuilderAsync` returning an `IDistributedApplicationTestingBuilder` (`:169`, implemented by -`AppHostFixtureBase`, `Fixtures/AppHostFixtureBase.Generic.cs:20`), then builds, starts and waits -per resource (`:123-127`); readiness-not-liveness and the healthy-versus-Running distinction are the class -docstring's own words (`:22-28`); teardown stops, disposes and restores every pushed environment variable -(`:135-159`). The gate is `Preconditions/AppHostEnvironmentGate.cs`: opt-in variable `MMCA_APPHOST_TESTS` -(`:16`) with the skip sentence at `:48-50`, surfaced as `SkipReason` (`AppHostFixtureBase.cs:53`) and -`IsAvailable` (`:56`); the default requirement is opt-in plus Docker (`:76-77`), and `SuppliesE2eRsaKeys` -(`:89`) mints an ephemeral RS256 keypair when `E2E_JWT_*` is absent, because an Identity resource with no -key material answers every request including `/alive` with a 500 and never turns healthy (ADR-117 `:42-53`, -where the ADC nightly ran red from 2026-09-01 to the 2026-09-09 root cause). `AppHostTestBase` -(`Fixtures/AppHostTestBase.cs:29`) supplies `CreateHttpClient` (`:44`), `GetConnectionStringAsync` (`:54`), -`CreateBearerToken` (`:74`) and the typed assertions `AssertHealthyAsync` (`:98`), `AssertAliveAsync` -(`:113`), `AssertReadyAsync` (`:127`), `AssertJwksAsync` (`:147`) and `AssertH2cAsync` (`:203`); the skip -call stays in the consuming project (`:20-24`). Probe paths are constants mirrored from the framework and -cross-asserted by a unit test (`Probes/AppHostProbePaths.cs:3-13`): `/health` (`:18`), `/alive` (`:26`), -`/health/ready` (`:32`), `/.well-known/jwks.json` (`:35`), with "a startup gate probes liveness, never -readiness" and the deadlock reason at `:20-25`. The AppHost snippet is illustrative of that documented -shape; the base types, the `RequiredEnvironment` override and the `Assert.SkipWhen(!Fixture.IsAvailable, -Fixture.SkipReason!)` line are real (`AppHostFixtureBase.cs:35,76-77`). -Accessibility section re-verified against `Website/docs-src/adr/063-accessibility-conformance-gate.md` -(Accepted 2026-08-01, `:4`, revised 2026-08-14, 2026-08-23, 2026-08-31 and 2026-09-01, `:4-14`; the -2026-08-23 revision records the fourth asserting Identity workflow base, `:6-8`). `AxeOptions.Wcag21Aa` -(`MMCA.Common/Source/Hosting/MMCA.Common.Testing.E2E/Infrastructure/AxeOptions.cs:17`) pins a `RunOnly` tag -list of exactly `wcag2a`, `wcag2aa`, `wcag21a`, `wcag21aa` (`:22`), with axe best-practice rules -deliberately out of scope (`:12-15`); the one exception `Wcag21AaExceptMudPagerCombobox` (`:35`) repeats -those four tags (`:40`) and disables only `aria-input-field-name` (`:44`), scoped to pages whose sole -combobox is `MudTablePager`'s unlabelled select (`:26-33`). `AssertNoAccessibilityViolationsAsync` -(`Infrastructure/PageExtensions.cs`) throws `AccessibilityViolationException` carrying impact, id, help text -and one compacted markup line per node. Four Identity workflow bases assert with `AxeOptions.Wcag21Aa`, not -three: `Workflows/Identity/UserLoginTestsBase.cs:82`, `UserRegistrationTestsBase.cs:95`, -`ProfileManagementTestsBase.cs:178` and `PasswordResetTestsBase.cs:88` and `:99`. The same folder also holds -`LogoutTestsBase.cs` and `AuthorizationTestsBase.cs`, neither of which calls -`AssertNoAccessibilityViolationsAsync`, which is why the Testing.E2E bullet now says four of the named -journeys close with an axe assertion rather than attaching the parenthetical to all of them; the package's -`Workflows/` folder also carries `Globalization/` and `Preferences/` bases. The two consumer helpers are -`ScanAsync` and `ScanGridAsync` on `Infrastructure/E2ETestBase.cs`. Enforcement per repo: Common's `ui-e2e` -job runs a `chromium, firefox, webkit` matrix and all three are required merge gates; ADC and Store call the -reusable E2E workflow chromium-only behind a UI-change filter that lets it skip; MMCA.Helpdesk pins -`MMCA.Common.Testing.E2E` at 1.205.0 (`MMCA.Helpdesk/Directory.Packages.props:94`) and has no E2E project.* +*Notes (this run, 2026-10-02, re-verified at framework v1.221.0 (`MMCA.Common/FACTS.md:4`) against source, +the Common scorecard, the rubric and ADR-058/063/117; supersedes the 2026-09-17 v1.205.0 ledger). +Header group cell corrected to G25, Testing & Quality Infrastructure +(`Website/docs-src/onboarding/00-group-taxonomy.md:83`; G28 is Common AI Integration at `:82`, G26 the ADC +engagement layer at `:78`); the group's page keeps the file name `group-28-testing-infrastructure.md`. +Suite size: about 2,254 `[Fact]`/`[Theory]` behind `--minimum-expected-tests 2000` +(`MMCA.Common/.github/workflows/ci.yml:158-161`); `dotnet-coverage` returns the test exit code (`:154`); +unit-tier coverage floor 68.3%, measured 70.3% (comment `:448-449`, `awk -v m="68.3"` at `:462`); gallery +a11y matrix `chromium, firefox, webkit` (`:257`). Scorecard evidence 2026-10-01 at v1.218.0 +(`Website/docs-src/governance/common-ArchitectureScorecard.md:5`), Maturity 96.6% (317/328) (`:9`), +Implementation 86.0% (705/820) (`:10`). Category 8 Data Architecture is maturity 4 / implementation 9 with +ADR-018's non-SQL engines latent (`:72`). Category 14 is 4/9 (`:78`) and is held at 9 by no mutation +testing plus three structural gaps (integration tier not a merge gate, Redis `ci.yml:837` and PostgreSQL +`ci.yml:881`; AppHost tier `continue-on-error: true` at `ci.yml:976`; no real broker in Common CI), so the +trade-off bullet's "single Exemplary gap" was corrected this run. Category 28 is 4/9, markup not pixels +(`:92`). Rubric quotes re-cut to the exact wording +(`Website/docs-src/governance/ArchitectureEvaluationCriteria.md:430,433,440`). Packages: 22 published +(`FACTS.md:19`, list `:22-43`), six of them test infrastructure: `MMCA.Common.AI.Testing` (`:34`, harness +types and the hash it keys on per `MMCA.Common/AGENTS.md:141`), `Testing`, `Testing.Architecture`, +`Testing.Aspire`, `Testing.E2E`, `Testing.UI` (`:38-42`); "five of nineteen" corrected and the AI.Testing +bullet added. Testing.UI's `MarkupSnapshot` and the identity page-test bases per ADR-058's 2026-09-25 +revision (`Website/docs-src/adr/058-runtime-conformance-suites-as-a-package.md:286-313`). ADR-058 status +`:4`, later revisions 2026-09-10 (`:246`), 2026-09-22 (`:264`), 2026-09-25 (`:286`), 2026-10-01 (`:315`); +seven contract bases (`:29`). Gateway probe gate is switchable: +`MMCA.Common/Source/Hosting/MMCA.Common.Testing/Conformance/MmcaGatewayHardeningTestsBase.cs:111` (default +true), inverse assertion `:308`, overridden to false by +`MMCA.ADC/Tests/Hosts/MMCA.ADC.Gateway.Tests/GatewayHardeningTests.cs:89` and +`MMCA.Store/Tests/Hosts/MMCA.Store.Gateway.Tests/GatewayHardeningTests.cs:93`. The runtime OpenAPI guard +reads no committed file (ADR-058 `:104-109`), while both consumers commit their documents and diff them in +CI (`:288-294`), so the "no committed snapshots" sentence was scoped to the runtime guard. UI web heads boot +over Production-pinned factories (ADR-058 `:142-145`; +`MMCA.ADC/Tests/Hosts/MMCA.ADC.UI.Web.Tests/ConferenceUiHostApplicationFactory.cs:17` derives +`ProductionHostApplicationFactory`, which pins Production at +`MMCA.Common/Source/Hosting/MMCA.Common.Testing/Fixtures/ProductionHostApplicationFactory.cs:37`). Helpdesk +pins all four `MMCA.Common.Testing*` packages at 1.221.0 (`MMCA.Helpdesk/Directory.Packages.props:93-96`). +AppHost tier, read in `MMCA.Common/Source/Hosting/MMCA.Common.Testing.Aspire/`: +`Fixtures/AppHostFixtureBase.cs:41` (collection fixture), readiness-not-liveness docstring `:23-28`, the +branch-not-`SkipWhen` rule `:35-38`, `SkipReason` `:56`, `IsAvailable` `:59`, default requirement opt-in +plus Docker `:79-80`, `SuppliesE2eRsaKeys` `:92`, gate evaluated first `:105-111`, builder `:123` and +`:172`, teardown `:138`; opt-in variable `Preconditions/AppHostEnvironmentGate.cs:16`; probe constants +`Probes/AppHostProbePaths.cs:18,26,32,35`; `Fixtures/AppHostTestBase.cs:29` with `CreateHttpClient` `:44`, +`GetConnectionStringAsync` `:54`, `CreateBearerToken` `:74` and assertions `:98,113,127,147,203,246` +(`AssertDataSourceAsync` at `:246` added this run). The snippet's skip line was corrected to the branch +form, as ADC writes it (`MMCA.ADC/Tests/Integration/MMCA.ADC.AppHost.SmokeTests/AdcAppHostSmokeTests.cs:59,69-71`). +The E2E sentence was corrected: ADC's E2E workflow brings the Aspire stack up in CI +(`MMCA.ADC/.github/workflows/e2e.yml:3-4`, step `:200`), which contradicts ADR-117's "deployed environment" +wording (`Website/docs-src/adr/117-apphost-integration-test-base.md:27-29`, not edited here); the eight-day +red nightly is ADR-117 `:43`. Deploy gates: chromium-only, UI-scoped `e2e-gate` +(`MMCA.ADC/.github/workflows/deploy.yml:861,875`, UI filter `:57`; `MMCA.Store/.github/workflows/deploy.yml:833,847`) +plus `cross-browser-freshness` (ADC `:987`, 10-day window comment `:963-980`; Store `:946`, `:964`), now +named in the enforcement paragraph. Trade-offs: 26 `.razor` components under +`MMCA.Common/Source/Presentation/MMCA.Common.UI/Components` (Glob, this run) replace "roughly a dozen"; +the SQL Server Testcontainers job (`ci.yml:918`) runs +`MMCA.Common/Tests/Core/MMCA.Common.Infrastructure.SQLServer.Tests/SQLServerPersistenceTests.cs:112,144,175` +(identity insert, stale row-version save, outbox in the same save). The subtitle's "no Docker" is scoped to +the inner loop, because the Redis, PostgreSQL and SQL Server Testcontainers jobs and the AppHost tier's +default requirement all need a container runtime. The base tier's "dominate the type count" and its +onboarding citation were removed: the group page does not carry that characterization. Carried from the +2026-10-02 audit's confirmations without re-opening this run: `IntegrationTestBase.cs:31,42-48,51-71,75`, +`JwtTokenGenerator.cs:14,131`, `SqlServerIntegrationTestFixtureBase.cs:90,183`, +`MultiSourceSqliteIntegrationTests.cs:44-51,97,120,138,167-183`, `AxeOptions.cs:12-15,17,22,35,40,44`, the +four Identity workflow bases (`UserLoginTestsBase.cs:82`, `UserRegistrationTestsBase.cs:95`, +`ProfileManagementTestsBase.cs:191`, `PasswordResetTestsBase.cs:88,99`), `E2ETestBase.cs:372`, +`PageExtensions.cs:326-327`, `MMCA.Common/global.json:3`, ADR-015's structure/registration trade-off +(`Website/docs-src/adr/015-architecture-fitness-functions.md:83`), and the Helpdesk subclasses +(`DecoratorPipelineOrderTests.cs:36`, `MiddlewarePipelineOrderTests.cs:15`). The illustrative `CatalogTests` +snippet is composed for shape; the base type and helpers are real.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/transactional-outbox-dotnet.md b/docs-src/articles/transactional-outbox-dotnet.md index 5d93bd0f..2b71ca59 100644 --- a/docs-src/articles/transactional-outbox-dotnet.md +++ b/docs-src/articles/transactional-outbox-dotnet.md @@ -2,7 +2,7 @@ > Series: MMCA.Common · Article #9 (cornerstone deep-dive) · Pillar P2/P3 · Group G04 · Rubric §6,§8 · > ADR-003 · ADR-066 · ADR-075 · ADR-087 · ADR-100 · ADR-107 · Status: grounded in `Website/docs-src/onboarding/group-04-events-outbox.md`, `MMCA.Common/CLAUDE.md`, -> and `Website/docs-src/adr/003-outbox-dual-dispatch.md`. No em dashes. +> and `Website/docs-src/adr/003-outbox-dual-dispatch.md`, re-verified against MMCA.Common v1.221.0 source (see Notes). No em dashes. **Subtitle:** "Save to the database, then publish to the broker" is a dual write with no atomicity. Here is the at-least-once pattern that fixes it, in one SaveChanges call. @@ -64,7 +64,8 @@ AddDomainEvent(new ProductVariantChanged(Id, newPrice)); `AddDomainEvent` lives on the aggregate base (`AuditableAggregateRootEntity`), so any aggregate can raise events. The interesting work happens in `SaveChangesAsync`, which runs a fixed sequence: -> stamp audit fields -> capture domain events from the aggregates -> serialize them to `OutboxMessage` +> stamp audit fields -> stamp the tenant (when the host registers a tenant interceptor) -> capture +> domain events from the aggregates -> serialize them to `OutboxMessage` > rows -> `base.SaveChangesAsync()` commits **data + outbox in the same transaction** -> dispatch the > local domain events in-process -> mark their outbox rows processed. @@ -83,9 +84,9 @@ answer what changed, because the stamp is a single overwrite: a row edited nine ninth editor and nothing else. **ADR-075** adds the missing half, and it belongs in this article because it does not invent a mechanic, it reuses this one. -`AuditTrailSaveChangesInterceptor` is a third `SaveChangesInterceptor`, registered after the -audit-stamp interceptor and after the domain-event interceptor that writes the outbox rows. The -order is load-bearing: running last is what makes the diff it captures see the final stamped values +`AuditTrailSaveChangesInterceptor` is one more `SaveChangesInterceptor`, registered last: after the +audit-stamp interceptor, after the tenant interceptor when a host registers one, and after the +domain-event interceptor that writes the outbox rows. The order is load-bearing: running last is what makes the diff it captures see the final stamped values rather than a half-populated entity. It walks the change tracker, compares each modified property's original value against its current one, and adds one `AuditTrailEntry` row per changed property into the same `SaveChanges` call. The history therefore commits or rolls back with the data it describes, @@ -93,11 +94,13 @@ same transaction, same database. That is the outbox guarantee applied to a diffe trail that can be committed without its data, or lost to a crash in the window after the commit, is a hint rather than a record. -It is opt-in twice over, which is what keeps the cost proportional to the value. A host has to call -`AddAuditTrail(configuration)`, and an entity has to carry the `IAuditedEntity` marker. A host that -never calls it resolves the interceptor as null (`GetService`, not `GetRequiredService`), so nothing -joins the pipeline and the feature costs nothing. Seven service hosts across the reference apps opt -in today, among them Store's Sales service, ADC's Identity service, and Helpdesk's web host. +It is opt-in three times over, which is what keeps the cost proportional to the value. A host has +to call `AddAuditTrail(configuration)`, it has to set `AuditTrail:Enabled` (default `false`, and the +single switch for both recording and whether the `AuditTrailEntries` table is mapped into the model +at all), and an entity has to carry the `IAuditedEntity` marker. A host that never calls +`AddAuditTrail` resolves the interceptor as null (`GetService`, not `GetRequiredService`), so nothing +joins the pipeline and the feature costs nothing. Seven hosts across the reference apps call it +today, among them Store's Sales service, ADC's Identity service, and Helpdesk's web host. Two details follow from what a change history is. A property marked `[Pii]` records `PiiRedactor.RedactedToken` on both sides of the change rather than the values, redacted at capture @@ -106,7 +109,9 @@ become a second copy of personal data that erasure has to chase. And `AuditTrail deliberately not an `IAuditableEntity`, exactly like `OutboxMessage`: no audit stamps of its own (stamping is itself a change, so it would recurse) and no soft-delete flag (a soft-deleted audit row is rewritten history that a query filter quietly hides). Rows are append-only and leave only through -a scheduled retention purge. +the scheduled `AuditTrailCleanupJob` (`AuditTrail:RetentionDays`, default 90), and that job runs only +when the host also calls `AddScheduledJobs(configuration)` and sets `Scheduler:Enabled`. Without the +scheduler the trail keeps recording, nothing purges it, and the retention setting is inert. The honest cost is that this one sits on the caller's latency path. An audited entity with twenty changed properties writes twenty extra rows inside your transaction, which is exactly not the @@ -157,13 +162,16 @@ through one method: `IUnitOfWork.ExecuteInTransactionAsync` is the Application-l `UnitOfWork` forwards straight to `DbContextFactory.ExecuteInTransactionAsync`, and the CQRS pipeline's `TransactionalCommandDecorator` calls it for any command carrying `ITransactional`. Running the delegate inside SQL Server's retrying execution strategy (`EnableRetryOnFailure`, five -attempts, a ten-second maximum delay) decides four things. The whole delegate is the retriable unit, +attempts, a ten-second maximum delay) decides five things. The whole delegate is the retriable unit, so anything computed outside it but committed inside it is silently wrong on a second attempt. Every attempt after the first starts from `ResetForRetry`, which calls `ChangeTracker.Clear()` on every context, because the failed attempt's entities are still `Added` and would otherwise be inserted a second time with a duplicate outbox row per event. A returned failed `Result` rolls back exactly like -a thrown exception, which is what a framework that mandates `Result` over exceptions owes itself. And -the deferred in-process dispatch is flushed only after the commit succeeds (`FlushDeferredAsync`) and +a thrown exception, which is what a framework that mandates `Result` over exceptions owes itself. On +a successful result, `FlushEnrolledCommandsBeforeCommitAsync` runs just before the commit: it saves +internal-command rows enrolled after the handler's last save, so they commit with the caller's +change, and it throws on any other unsaved tracked change, which rolls the unit back rather than +committing while silently discarding that change. And the deferred in-process dispatch is flushed only after the commit succeeds (`FlushDeferredAsync`) and dropped on every other path (`DropDeferred`), so an in-process handler only ever sees durable state while the outbox carries everything that crosses a process boundary. A re-entrant call joins the ambient transaction instead of nesting, and a Cosmos context is never enlisted at all, since @@ -221,10 +229,10 @@ Which transport you get is a separate decision, and **ADR-066** records it: `Mes has exactly three values (`InProcess`, `RabbitMq`, `AzureServiceBus`), chosen at the deployment edge (the Aspire AppHost locally, Bicep environment variables in production) rather than anywhere in application code, and both broker branches are configured from one settings object with the same -exponential retry, so the two products stay substitutable. It also records the honest gap: the -production-only Azure Service Bus binding is exercised by a dedicated emulator test tier that runs -nightly and non-gating, so it is evidence that the binding works, not a check that blocks a -regression. +exponential retry, so the two products stay substitutable. It also records the honest residual: the +production-only Azure Service Bus binding is exercised by a dedicated emulator test tier that runs on +the weekday nightly and gates deployment in both ADC and Store, so a Service-Bus-only regression +blocks the next deploy, though not the merge that introduced it. ```csharp // One abstraction, two transports. Application code depends only on IMessageBus. @@ -235,7 +243,7 @@ regression. Whether there is an outbox at all is resolved from that same mode. `MessageBus:EnableOutbox` is a `bool?` that defaults to unset, and `MessageBusSettings.IsOutboxEnabled` reads `EnableOutbox ?? Provider != MessageBusProvider.InProcess`, character for character the rule -`IsInboxEnabled` uses one property above it. `AddInfrastructure` resolves that posture once, at +`IsInboxEnabled` uses two properties above it. `AddInfrastructure` resolves that posture once, at registration: on the enabled path it registers `OutboxProcessor` and `OutboxCleanupService`, and on the disabled path it registers neither and adds `OutboxDisabledNoticeService`, which logs one startup line naming exactly what is not running. The one combination that cannot work is refused rather than @@ -317,9 +325,17 @@ The framework's `IWriteRepository.ExecuteUpdateAsync` closes that hole by stampi // modification audit fields here unless the caller assigned them explicitly. if (!builder.SetsProperty(nameof(IAuditableEntity.LastModifiedOn))) { - var now = (timeProvider ?? TimeProvider.System).GetUtcNow().UtcDateTime; + var now = timeProvider.GetUtcNow().UtcDateTime; builder.Set(e => e.LastModifiedOn, (DateTime?)now); } + +// With no current user (a background or system scope) the editor is the default sentinel, +// exactly as the save pipeline attributes a system save; leaving the column alone would keep +// crediting the change to the previous human editor. +if (!builder.SetsProperty(nameof(IAuditableEntity.LastModifiedBy))) +{ + builder.Set(e => e.LastModifiedBy, currentUserService?.UserId ?? default); +} ``` The mechanism that makes this possible is small and reusable: rather than handing EF's setter builder @@ -345,13 +361,17 @@ The outbox is not free, and the rubric review of this framework names the rough - **At-least-once means duplicates are possible.** A consumer can receive the same event twice (publish succeeded, the "mark processed" step did not). The framework does not just - document this, it ships an opt-in consumer-side inbox: `IInboxStore` (`EfInboxStore` records processed - messages in an `InboxMessages` table, `NoOpInboxStore` is the default no-op) dedups by `MessageId`, - switched on with `MessageBus:EnableInbox`, and the generic `IntegrationEventConsumer` checks before - handling and records only after every handler succeeds (**ADR-021**, enabled in production on five - service hosts). The honest residual is narrower: the inbox is opt-in per service, and it narrows the - duplicate window rather than closing it, so a crash between a handler committing and the inbox write - reprocesses the event once more. Handlers must still be idempotent for that window. + document this, it ships a consumer-side inbox that is on by default for a broker transport: + `IInboxStore` (`EfInboxStore` records processed messages in an `InboxMessages` table) dedups by + `MessageId`, and `MessageBus:EnableInbox` is a `bool?` that resolves ON for RabbitMQ and Azure + Service Bus when unset. `NoOpInboxStore` is reached only through an explicit `EnableInbox=false`, + and that opt-out logs a startup Warning rather than staying silent. The generic + `IntegrationEventConsumer` stages the inbox row in the scope's unit of work before the handlers + run and abandons it when a handler throws, so a handler that saves to the same source commits the + inbox row in its own transaction (**ADR-021**; every deployed service host also sets + `EnableInbox: true` explicitly, four in ADC and three in Store). The honest residual is narrower: + the duplicate window stays open for a handler that writes nothing or writes to a different source, + so handlers must still be idempotent for that case. - **The table grows, but it self-purges.** Processed outbox rows accumulate, and the serialized payloads can contain PII, so the framework ships an automatic `OutboxCleanupService` that sweeps every relational source and deletes processed rows whose `ProcessedOn` is older than `Outbox:RetentionDays` @@ -398,97 +418,95 @@ pattern, or `dotnet add package MMCA.Common.API` and try it.* *Tags: .NET, C Sharp, Microservices, Distributed Systems, Software Architecture* -*Notes: 2026-09-19 re-verification pass against MMCA.Common v1.205.0 (commit 90ffa7a). Section -history: "The write that skips the whole pipeline" was added 2026-07-27 to close a recorded gap, the -set-based-write audit-field trap was taught only inside Article 49's reconciliation section, and it -lives here because this article already teaches the `SaveChangesAsync` sequence whose first step is -"stamp audit fields". "When the commit itself is ambiguous" was added 2026-08-01 and gained the -per-source outcome paragraph on 2026-08-15 (MMCA.Common PR #248). The transport-selection paragraph -was added 2026-08-07, "The third participant in that sequence: the change trail" on 2026-08-14, and -"When the consumer runs out of retries" on 2026-08-19. The two configuration-surface paragraphs (the -outbox posture resolved from the messaging mode, and the transaction execution contract) were added -2026-09-19. Anchors below were read against source in this pass; MMCA.Common PR #352 split the flat -namespaces, so `OutboxProcessor.cs`, `OutboxSettings.cs`, `OutboxCleanupService.cs`, -`MessageBusSettings.cs`, `FaultIntegrationEventConsumer.cs` and -`IntegrationEventConsumerExtensions.cs` now sit under `Persistence/Outbox/Processing/`, -`Persistence/Outbox/Administration/`, `Messaging/` and `Messaging/Consumers/` rather than the -`Settings/` and `Services/` folders the earlier ledger cited. Outbox posture +*Notes: 2026-10-02 re-verification pass against MMCA.Common v1.221.0 (audit findings +`Reports/update-medium/2026-10-02/09.json`). Section history: "The write that skips the whole +pipeline" was added 2026-07-27 (the set-based-write audit-field trap was taught only inside Article +49's reconciliation section, and it lives here because this article teaches the `SaveChangesAsync` +sequence whose first step is "stamp audit fields"); "When the commit itself is ambiguous" 2026-08-01, +its per-source outcome paragraph 2026-08-15 (MMCA.Common PR #248); the transport-selection paragraph +2026-08-07; "The third participant in that sequence: the change trail" 2026-08-14; "When the +consumer runs out of retries" 2026-08-19; the outbox-posture and transaction-contract paragraphs +2026-09-19. Changes in this pass: the inbox bullet described an opt-in inbox with `NoOpInboxStore` +as the default, a check-before/record-after consumer and "five service hosts"; it now teaches the +broker default-ON inbox, the staged row and the seven explicit `EnableInbox: true` hosts (ADR-021 +Revision 2026-08-26). The ADR-066 emulator tier read "nightly and non-gating"; it is deploy-gating +since the 2026-09-01 revision. The audit trail gained its third gate (`AuditTrail:Enabled`) and the +scheduler dependency of its retention purge; the interceptor paragraph and the SaveChanges sequence +gained the optional tenant step. The ADR-107 contract decides five things after its 2026-10-01 +revision (`FlushEnrolledCommandsBeforeCommitAsync`). The set-based-write block lost the +`?? TimeProvider.System` fallback and now also shows the `LastModifiedBy` stamp. "One property above +it" corrected to two. Anchors read in this pass (paths under +`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/` unless stated). Outbox posture (`Website/docs-src/adr/100-outbox-opt-in-resolved-from-messaging-mode.md`, Accepted 2026-08-29 at -`:4`): `MessageBusSettings.EnableOutbox` is a `bool?` -(`Source/Core/MMCA.Common.Infrastructure/Messaging/MessageBusSettings.cs:167`, doc `:143-166`) and -`IsOutboxEnabled` resolves it as `EnableOutbox ?? Provider != MessageBusProvider.InProcess` (`:175`), -the same rule `IsInboxEnabled` applies at `:141` over `EnableInbox` (`:133`); `AddInfrastructure` -resolves once at registration and registers `OutboxProcessor` plus `OutboxCleanupService` on the -enabled path or `OutboxDisabledNoticeService` on the disabled one -(`Source/Core/MMCA.Common.Infrastructure/DependencyInjection.cs:223-231`, the transport-decision -comment at `:213-218`, `IOutboxSignal` at `:211`); `EnsureOutboxAvailableForProvider` throws when the -provider is not `InProcess` and `EnableOutbox` is explicitly `false` (declared `:1138`, guard -`:1140`, message `:1143`, doc `:1120-1128`); `OutboxDisabledNoticeService` -(`Persistence/Outbox/Administration/OutboxDisabledNoticeService.cs:22`) logs one Information line -naming what is not running and giving `MessageBus:EnableOutbox=true` as the restore path (`:35-38`). -The in-process default, the explicit `true` a monolith or an in-process test host has to set, and the -unchanged EF model are ADR-100's own decision and trade-off text (`:38-44`, `:46-50`, `:62-68`, -`:70-76`, `:106-111`). Transaction execution contract -(`Website/docs-src/adr/107-transaction-execution-contract.md`, Accepted 2026-09-03 and re-measured -2026-09-19, `:4`): `IUnitOfWork.ExecuteInTransactionAsync` -(`Source/Core/MMCA.Common.Application/Interfaces/Infrastructure/Persistence/IUnitOfWork.cs:70`) is -forwarded by `UnitOfWork` (`Source/Core/MMCA.Common.Infrastructure/Persistence/UnitOfWork.cs:88-91`) -to `DbContextFactory.ExecuteInTransactionAsync` -(`Persistence/DbContexts/Factory/DbContextFactory.cs:518`), and `TransactionalCommandDecorator` -(`Source/Core/MMCA.Common.Application/UseCases/Decorators/TransactionalCommandDecorator.cs:20`) calls -it for any `ITransactional` command (`:31`). The delegate runs inside the retrying execution strategy -(`strategy.ExecuteAsync`, `DbContextFactory.cs:545`; `EnableRetryOnFailure(maxRetryCount: 5, -maxRetryDelay: TimeSpan.FromSeconds(10))` at `Persistence/DbContexts/SQLServerDbContext.cs:63-66`); -`ResetForRetry` runs from the second attempt on (`:548`, declared `:761`, `ChangeTracker.Clear()` at -`:766`); a returned failed `Result` rolls back like a throw (`:587`, `RollbackTransaction` `:456`); -the commit failure is returned rather than thrown (`TryCommit` invoked `:591`, declared `:640`) and -rethrown past the strategy (`:559-560`, the inner-chain reason in the code comment at `:555-558`); -`AbandonAfterCommitFailure` rolls back best-effort (`:664`, declared `:681`); deferred dispatch is -flushed only after a successful commit (`:600`, -`Persistence/Interceptors/DomainEventSaveChangesInterceptor.cs:145`) and dropped otherwise (`:162`); -and Cosmos is excluded by `SupportsTransactions` (`DbContextFactory.cs:774`). ADR-107 records the -same points at `:33-35`, `:43-51`, `:53-60`, `:62-67`, `:69-76`, `:93-100` and `:109-111`. -`TransactionCommitAmbiguousException` is public and sealed -(`Persistence/DbContexts/Factory/TransactionCommitAmbiguousException.cs:22`) and exposes -`CommittedSources` (`:76`), `AmbiguousSource` (`:85`), `RolledBackSources` (`:93`) and the -`ComposeMessage` clause builder (`:99`) that leaves out empty groups. Delivery side: -`ClaimEligibleAsync` is declared at `Persistence/Outbox/Processing/OutboxProcessor.cs:463` and -invoked at `:308`; `ComputeRetryBackoffSeconds` is declared at `:767` and applied at `:678` and -`:746`. Settings (`Persistence/Outbox/Administration/OutboxSettings.cs`): `RetentionDays` defaults to -7 (`:65`, with `0` disabling the purge, documented `:60-62`), `CleanupIntervalHours` to 6 (`:73`), -`LeaseSeconds` to 300 (`:82`, `[Range(10, 3600)]` `:81`), `RetryBackoffBaseSeconds` to 10 (`:99`, -`[Range(1, 3600)]` `:98`), and `DeadLetterRetentionDays` falls back to `RetentionDays` (`:108`, doc -`:101-106`); the sweep that reads them is -`Persistence/Outbox/Administration/OutboxCleanupService.cs`. Transport selection -(`Website/docs-src/adr/066-broker-transport-selection.md`): `MessageBusProvider` is declared at -`Messaging/MessageBusSettings.cs:236` with `InProcess = 0` (`:241`), `RabbitMq = 1` (`:246`) and -`AzureServiceBus = 2` (`:251`). Consume-side faults -(`Website/docs-src/adr/087-broker-poison-message-handling.md`): -`FaultIntegrationEventConsumer` (`Messaging/Consumers/FaultIntegrationEventConsumer.cs:26`) -resolves the id as `fault.FaultedMessageId ?? fault.FaultId` (`:39`), emits one Error log through -`LogFault` (`:48`, declared `:58`) and increments `BrokerMetrics.FaultCounter` tagged by event type -(`:50`); the counter is `broker.fault.count` on the meter `MMCA.Common.Broker` -(`Messaging/BrokerMetrics.cs:30`, `MeterName` `:21`, `Meter` `:23`, class `:18`); registration is -automatic through `RegisterIntegrationEventConsumer` -(`Messaging/Consumers/IntegrationEventConsumerExtensions.cs:38`), whose -`bool registerFaultConsumer = true` parameter (`:39`) is the only opt-out (guard `:44`). -`MessageBus:EnableDelayedRedelivery` is a `bool` with no initializer, so it defaults to `false` -(`Messaging/MessageBusSettings.cs:195`), and `RedeliveryIntervalsSeconds` defaults to `[60, 600, -3600]` (`:211`). The set-based-write block is verbatim from -`Persistence/Repositories/EFRepository.cs:140-146` (the comment at `:140-141` is the source's own), -inside `ExecuteUpdateAsync`; the empty-assignment guard throws at `:137-138`, the `LastModifiedBy` -stamp guarded by `currentUserService?.UserId` is at `:148-151`, and the final -`Entities.Where(where).ExecuteUpdateAsync(builder.Apply, ...)` replay is at `:153`. Seven service -hosts call `AddAuditTrail` today: `MMCA.Store` Sales `Program.cs:208`, Identity `:195`, Catalog -`:228`; `MMCA.ADC` Identity `Program.cs:239`, Engagement `:198`, Conference `:333`; and -`MMCA.Helpdesk` `Source/Hosts/MMCA.Helpdesk.Web/Program.cs:90`. Carried without line anchors in this -pass, because they were not re-read this run and every file that was had moved by 1 to 168 lines: -`Persistence/Repositories/UpdatePropertySetterBuilder.cs`, the internals of `OutboxCleanupService.cs`, -`Persistence/DbContexts/ApplicationDbContext.cs` (the interceptor registration order), -`Persistence/AuditTrail/AuditTrailSaveChangesInterceptor.cs`, `AuditTrailEntry.cs`, -`AuditTrailSettings.cs`, `MMCA.Common.Domain/Privacy/PiiRedactor.cs`, the inbox stores under -`Persistence/Inbox/`, `DbContextFactoryCommitAmbiguityTests.cs`, and the paragraph-level anchors into -ADR-003, ADR-021, ADR-066, ADR-075 and ADR-087; their earlier line numbers were removed rather than -restated.* +`:4`, Decision item 1 at `:41-47`, the in-process default trade-off at `:113-118`): +`Messaging/MessageBusSettings.cs` `EnableInbox` `bool?` `:133` (broker-ON doc `:115-124`, +explicit-false Warning doc `:127-130`), `IsInboxEnabled` `:141`, `EnableOutbox` `bool?` `:167` (doc +`:143-166`, the monolith's explicit `true` at `:159-161`), `IsOutboxEnabled` `:175`. The in-process +test-host clause follows from that rule (an `InProcess` host with `EnableOutbox` unset resolves OFF +at `:175` and writes no rows); ADR-100 carries no test-host text, so it is no longer attributed to +ADR-100's own wording. `DependencyInjection.cs`: `IOutboxSignal` `:205`, transport-decision comment +`:207-212`, guard call `:215`, enabled registration `:217-221`, disabled `:222-225`. +`DependencyInjection.Messaging.cs`: `EnsureOutboxAvailableForProvider` declared `:196`, guard `:198`, +throw `:200-201`, doc `:178-191`, second call site `:59`; `EfInboxStore` registered when +`IsInboxEnabled` `:107-109`, `NoOpInboxStore` on an explicit false `:115-117` with the Warning comment +`:119-120`. Inbox consume path: `Messaging/Consumers/IntegrationEventConsumer.cs` stages the row via +`TryBeginAsync` (`:76-81`) and calls `Abandon` on a handler failure (`:101`) before rethrowing +(`:108`). ADR-021 (`Website/docs-src/adr/021-consumer-inbox-idempotency.md`): Status revisions +`:4-11`, opt-in superseded `:53-55`, check-before superseded `:60-62`, window narrowed `:76-79`, +explicit `EnableInbox: true` on four ADC and three Store service hosts `:81-87` (Store Sales +`appsettings.json:58` re-read), five of seven consuming from the broker `:96-97`. Audit trail: +`Persistence/AuditTrail/AuditTrailSettings.cs` single-gate remarks `:11-14`, `Enabled` default false +`:26`, `RetentionDays` 90 `:38` (`[Range(1, 3650)]` `:37`), scheduler dependency `:33-35`; +`DependencyInjection.Jobs.cs` registration-is-not-enabling `:89-92`, retention needs the scheduler +`:97-101`; `MMCA.Common.Domain/Interfaces/IAuditedEntity.cs:24`. Interceptor order in +`Persistence/DbContexts/ApplicationDbContext.cs`: audit and domain-event interceptors resolved +`:297-298`, the tenant interceptor between them when registered `:305-308` (otherwise `:311`), the +trail last through `GetService` `:319-322` (comment `:314-318`). `AddAuditTrail` call sites: +`MMCA.Store` Sales `Program.cs:208`, Catalog `:233`, Identity `:195`; `MMCA.ADC` Identity +`Program.cs:238`, Conference `:348`, Engagement `:198`; `MMCA.Helpdesk` +`Source/Hosts/MMCA.Helpdesk.Web/Program.cs:90`. Transaction contract +(`Website/docs-src/adr/107-transaction-execution-contract.md`, Accepted 2026-09-03 at `:4`, revised +2026-09-25 `:5-8` and 2026-10-01 `:9-11`): Decision `:39-42`, re-entrant join `:50-58`, retriable +unit and `ResetForRetry` `:60-68`, failed-Result rollback and the enrolled-command flush `:70-80`, +commit never retried `:82-89`, per-source outcome `:91-98`, best-effort rollback `:100-104`, deferred +flush and drop `:106-110`, Revision `:202`. Source: +`MMCA.Common.Application/Interfaces/Infrastructure/Persistence/IUnitOfWork.cs:63`; +`Persistence/UnitOfWork.cs:76-79`; `MMCA.Common.Application/UseCases/Decorators/TransactionalCommandDecorator.cs` +class `:22`, `ITransactional` check `:30`, call `:33`. `Persistence/DbContexts/Factory/DbContextFactory.cs`: +`ExecuteInTransactionAsync` `:544`, `strategy.ExecuteAsync` `:571`, `ResetForRetry` call `:574` +(declared `:829`, `ChangeTracker.Clear()` `:834`), failed `Result` `:608` with `RollbackTransaction` +call `:613` (declared `:477`), `FlushEnrolledCommandsBeforeCommitAsync` call `:618` (declared `:674`, +throw `:691-697`, save `:699`), `TryCommit` call `:620` (declared `:712`), `FlushDeferredAsync` call +`:634`, `AbandonAfterCommitFailure` call `:736` (declared `:753`), rethrow past the strategy +`:585-586` with the inner-chain comment `:581-584`, `SupportsTransactions` `:853-854` +(`Engine.Capabilities.IsRelational`, false for Cosmos); +`Persistence/Interceptors/DomainEventSaveChangesInterceptor.cs` `FlushDeferredAsync` `:145`, +`DropDeferred` `:162`. Delivery side: `Persistence/Outbox/Processing/OutboxProcessor.cs` +`ClaimEligibleAsync` declared `:367`, invoked `:214`; `ComputeRetryBackoffSeconds` `:680-681` +(delegating to `Persistence/Polling/PollingLoop.cs:183`, jitter `0.8 + NextDouble() * 0.4` at +`:193`), applied `:588` and `:660`. Consume-side faults: `RegisterIntegrationEventConsumer` +(`Messaging/Consumers/IntegrationEventConsumerExtensions.cs:60`), `bool registerFaultConsumer = true` +(`:61`), guard `:71`, the same opt-out on the sibling overloads (`:124`/`:134`, `:159-160`). +Set-based write: the block is verbatim from `Persistence/Repositories/EFRepository.cs:140-154` inside +`ExecuteUpdateAsync`, empty-assignment guard `:137-138`, `Entities.Where(where).ExecuteUpdateAsync(builder.Apply, ...)` +replay `:156`. Carried from the 2026-10-02 audit's CONFIRMED verdicts, not re-read in this apply +step: `Persistence/Outbox/Administration/OutboxSettings.cs` (`RetentionDays` 7 `:65`, `0` disables; +`CleanupIntervalHours` 6 `:73`; `LeaseSeconds` 300 `:82`, `[Range(10, 3600)]` `:81`; +`RetryBackoffBaseSeconds` 10 `:99`, `[Range(1, 3600)]` `:98`; `DeadLetterRetentionDays` fallback +`:108`, doc `:101-106`), `OutboxDisabledNoticeService.cs:22` (restore path `:35-38`), +`TransactionCommitAmbiguousException.cs` (sealed `:22`, `CommittedSources` `:76`, `AmbiguousSource` +`:85`, `RolledBackSources` `:93`, `ComposeMessage` `:99`), `Persistence/DbContexts/SQLServerDbContext.cs:63-66` +(`EnableRetryOnFailure`, 5 retries, 10s), `MessageBusProvider` (`Messaging/MessageBusSettings.cs:236`, +`InProcess` `:241`, `RabbitMq` `:246`, `AzureServiceBus` `:251`), `EnableDelayedRedelivery` `:195`, +`RedeliveryIntervalsSeconds` `[60, 600, 3600]` `:211`, `FaultIntegrationEventConsumer.cs` +(`:26`, id `:39`, `LogFault` `:48` declared `:58`, counter `:50`) and `Messaging/BrokerMetrics.cs` +(`broker.fault.count` `:30`, `MeterName` `:21`, `Meter` `:23`, class `:18`). ADR-066 +(`Website/docs-src/adr/066-broker-transport-selection.md`): the 2026-09-01 revision `:6-10`, both +emulator jobs authoritative and deploy-gating `:161-172`, the nightly-not-per-commit trade-off +`:213-222`. Carried without line anchors: `Persistence/Repositories/UpdatePropertySetterBuilder.cs`, +the internals of `OutboxCleanupService.cs`, `AuditTrailSaveChangesInterceptor.cs`, +`AuditTrailEntry.cs`, `MMCA.Common.Domain/Privacy/PiiRedactor.cs`, the inbox stores under +`Persistence/Inbox/`, `InboxDisabledWarningService.cs`, `DbContextFactoryCommitAmbiguityTests.cs`, +and paragraph-level anchors into ADR-003, ADR-075 and ADR-087.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/two-real-apps-case-study.md b/docs-src/articles/two-real-apps-case-study.md index 6521028a..d18dbc1e 100644 --- a/docs-src/articles/two-real-apps-case-study.md +++ b/docs-src/articles/two-real-apps-case-study.md @@ -1,8 +1,8 @@ # Two real apps on one framework: a conference platform and a store > Series: MMCA.Common · Article #41 (case study) · Pillar P6 · Rubric: §4, §5, §7, §10, §32 · ADR-016 · -> Status: grounded in `MMCA.ADC/README.md`, `MMCA.ADC/CLAUDE.md`, `MMCA.Store/README.md`, -> `MMCA.Store/CLAUDE.md`, and `Website/docs-src/governance/common-ArchitectureScorecard.md` (the §4/§5 downstream-evidence rows). +> Status: grounded in `MMCA.ADC/README.md`, `MMCA.ADC/AGENTS.md`, `MMCA.Store/README.md`, +> `MMCA.Store/AGENTS.md`, `MMCA.Common/FACTS.md`, both consumers' `Directory.Packages.props`, and `Website/docs-src/governance/common-ArchitectureScorecard.md` (the §4/§5 downstream-evidence rows). > No em dashes. **Subtitle:** A framework's README can claim anything. The real test is whether two unrelated @@ -32,7 +32,7 @@ sessions, speakers, rooms, categories, and the questions attendees ask. It carri - **Identity** (the `User` aggregate, JWT auth, plus social login via Google and GitHub), - **Conference** (events, sessions, speakers, rooms, categories, questions and answers, social - activities, partners and session assets, across eighteen domain REST controllers), + activities, partners and session assets, across twenty-two domain REST controllers), - **Engagement** (session bookmarks, event and session feedback, and the conference-day live layer: the `LivePolls` and `SessionQuestions` aggregates behind Happening Now, the session Live view, and the presenter UI), @@ -68,11 +68,12 @@ signed with RS256 and validated through JWKS discovery, with no shared secret. None of that topology is hand-rolled per app. It comes from the framework: -- **The same packages, at the same number.** MMCA.Common publishes nineteen packages, and each app pins - the subset it uses at one identical version literal: ADC pins eighteen `MMCA.Common.*` entries - (`.Shared`, `.Domain`, `.Application`, `.Infrastructure`, `.AI`, `.API`, `.Grpc`, `.Gateway`, `.UI`, - `.UI.Maui`, `.UI.Web`, `.Aspire`, `.Aspire.Hosting`, `.Testing`, `.Testing.Architecture`, - `.Testing.Aspire`, `.Testing.E2E`, `.Testing.UI`), Store pins seventeen of those, taking no `.AI`. +- **The same packages, at the same number.** MMCA.Common publishes twenty-two packages, and each app pins + the subset it uses at one identical version literal: ADC pins twenty `MMCA.Common.*` entries + (`.Shared`, `.Domain`, `.Application`, `.Infrastructure`, `.AI`, `.AI.Anthropic`, `.AI.Testing`, + `.API`, `.Grpc`, `.Gateway`, `.UI`, `.UI.Maui`, `.UI.Web`, `.Aspire`, `.Aspire.Hosting`, `.Testing`, + `.Testing.Architecture`, `.Testing.Aspire`, `.Testing.E2E`, `.Testing.UI`), Store pins seventeen of + those, taking none of the `.AI` packages. - **The same patterns.** `Result` for error flow, the CQRS command/query split with the same decorator order (commands run FeatureGate then Authorization then Logging then Caching then Validating then Timeout then Transactional then the handler; queries run FeatureGate then @@ -101,10 +102,10 @@ code reaches them.** There is no phased rollout, no opt-in flag, no per-consumer The release is a lockstep sweep: -1. Tag a new MMCA.Common version (the version comes from the git tag via MinVer). All nineteen packages +1. Tag a new MMCA.Common version (the version comes from the git tag via MinVer). All twenty-two packages publish at that same version. 2. In each consumer, bump every `MMCA.Common.*` entry in `Directory.Packages.props` to the new version - in one pass. ADC keeps its eighteen entries and Store its seventeen on the same number. + in one pass. ADC keeps its twenty entries and Store its seventeen on the same number. 3. Build, run the fitness tests and the rest of the suite, deploy. The framework's versioning policy doc (`common-VERSIONING.md`, canonical in the published docs @@ -126,8 +127,9 @@ real domain and a real deployment. That is the division of labor between MMCA.Co **ADC proves real bounded contexts and real eventing.** Identity publishing `UserRegistered` so Conference can auto-link a speaker by email match is a genuine cross-context workflow, not a contrived -one. Conference calling Engagement's bookmark-count service over gRPC, with a disabled-module stub -standing in when Engagement is not co-hosted, is the extraction boundary working in a running system +one. Conference calling Engagement's bookmark-count service over gRPC, through an adapter that implements +the same `IBookmarkCountService` interface the in-process call uses (each service host loads only its +own module, so the gRPC client is what answers), is the extraction boundary working in a running system rather than in a unit test. And the deployment is the operability proof: four services plus a gateway and a web UI, each service owning its own database and its own `OutboxMessages` table, rolled to Azure Container Apps. @@ -150,13 +152,14 @@ forced them to be identical would be wrong; the framework lets each app make the Here is the caveat the framework writes about itself. It is not a preamble or a methodology section: it is written into the category rows. Because the framework is a library and not a runnable app, a few categories can only be judged on the substrate it provides, not on realized behavior. The §4 -Domain-Driven Design row holds its implementation score at 8 because strategic DDD is "still realized -downstream (only Notifications lives here)", and the §5 Vertical Slice Architecture row holds at 8 -because "the enforced in-repo slicing surface is still the Notifications family": the framework ships -a second sliced family (the `Users` use cases, thirteen abstract handler bases across nine folders) and -the slice gate does reach abstract bases, but twelve of the thirteen declare their handler contract over -a generic parameter and are exempt by design, and every one of them logs through the shared -`UserUseCaseLog` switchboard, so the family deepens the pattern without widening the enforced surface. +Domain-Driven Design row holds its implementation score at 8 on two open criteria, the first being that +strategic DDD "is realized downstream, since the Domain layer holds one aggregate family +(Notifications) plus auth support types". The §5 Vertical Slice Architecture row holds at 8 because +Common "is an SDK with no business use-case slices of its own", so "slice cohesion is proven in the +consumer repos": the framework ships a second sliced family (the `Users` use cases, thirteen abstract +handler bases across nine folders) and the slice gate does reach abstract bases, but twelve of the +thirteen declare their handler contract over a generic parameter and are exempt by design, so the +family deepens the pattern without widening the enforced surface. **For both, the real surface lives in MMCA.Store and MMCA.ADC.** For performance and cost, the framework ships an in-repo BenchmarkDotNet hot-path harness (§12) and a released cost guide (§31); only full load/stress data lives in the consumer apps. @@ -164,7 +167,7 @@ cost, the framework ships an in-repo BenchmarkDotNet hot-path harness (§12) and That is not a weakness to hide; it is the reason the two apps exist. The framework supplies the base classes, the enforced layering, and the extraction points. The apps supply the proof that those things hold up against two different real domains and two different production deployments. The -framework's two-axis evaluation scores it at roughly 97% maturity and 86% implementation (97.0% and 86.0% +framework's two-axis evaluation scores it at roughly 97% maturity and 86% implementation (96.6% and 86.0% exactly), with implementation the weaker axis precisely because some of the most important "does this actually model a domain well" evidence lives downstream, in the consumers, where it should. @@ -194,84 +197,108 @@ honest part), or `dotnet add package MMCA.Common.API` and build your own third a *Tags: .NET, Software Architecture, Microservices, DDD, Open Source* -*Notes: ADC/Store claims are limited to what `MMCA.ADC/README.md`, `MMCA.ADC/CLAUDE.md`, -`MMCA.Store/README.md`, and `MMCA.Store/CLAUDE.md` support (modules, topology, the lockstep package -pins, the two divergent eventing flows). Removed in an earlier pass and still out: the "was used to run -an actual live event" and "real attendees used it" framing, which no repo document supports. What the -tree does state, re-read this run: deploy to Azure Container Apps on a push to `main` -(`MMCA.ADC/CLAUDE.md:83`), one Dockerfile per deployable across the four services plus the Gateway and -UI.Web (`:68`), and each service owning its own database and its own `dbo.OutboxMessages` (`:62`). -Packages and versions verified this run: the framework publishes nineteen packages -(`MMCA.Common/FACTS.md:19`, enumerated at `:22-40`) at v1.205.0 (`:14`, snapshot dated 2026-09-17 at -`:4`), and the changelog's newest dated entry is `## [1.205.0] - 2026-09-17` -(`MMCA.Common/CHANGELOG.md:9`, with 1.204.0 at `:15`). The consumers pin subsets, not the whole set, and -each subset is in lockstep: ADC carries eighteen `MMCA.Common.*` entries, all at 1.205.0 -(`MMCA.ADC/Directory.Packages.props:102-132`, `.Grpc` at `:102`, `.AI` at `:110`, `.Gateway` at `:118`, -`.UI.Maui` at `:132`), and Store carries seventeen, also all at 1.205.0 and with no `.AI` entry -(`MMCA.Store/Directory.Packages.props:8-26`, `.Grpc` at `:73`, `.Aspire.Hosting` at `:111`), including -the one MAUI-TFM package `MMCA.Common.UI.Maui` in both. Corrected this run: the previous ledger recorded -fifteen packages at v1.154.0 and a "same fifteen entries" claim for both consumers; both the count and -the equality were wrong. Corrected this run: the query chain is six decorators, not five. Execution -order is FeatureGate then Authorization then Logging then Caching then Validating then Timeout then -Transactional then the handler for commands, and FeatureGate then Authorization then Logging then -Caching then Validating then Timeout then the handler for queries (`MMCA.Common/CLAUDE.md:80`), read off -the Scrutor `TryDecorate` registration order (innermost first) at -`MMCA.Common/Source/Core/MMCA.Common.Application/DependencyInjection.cs:137-143` for commands and -`:146-151` for queries, where `ValidatingQueryDecorator` sits at `:147`. The scorecard's §1 SOLID -evidence column (`Website/docs-src/governance/common-ArchitectureScorecard.md:81`) still carries the -older decorator string and a stale `Application/DependencyInjection.cs:94-103` range, so that row is -itself drifted and is not the anchor for this claim: source plus `MMCA.Common/CLAUDE.md` are. Counted +*Notes: refreshed 2026-10-02 against framework v1.221.0. ADC/Store claims are limited to what +`MMCA.ADC/README.md`, `MMCA.ADC/AGENTS.md`, `MMCA.Store/README.md`, and `MMCA.Store/AGENTS.md` support +(modules, topology, the lockstep package pins, the two divergent eventing flows). Both repos' +`CLAUDE.md` files are six-line stubs that import `AGENTS.md`, so every former `CLAUDE.md:N` anchor is +re-pointed at `AGENTS.md` this run. Removed in an earlier pass and still out: the "was used to run an +actual live event" and "real attendees used it" framing, which no repo document supports. Topology +re-read this run: each app's modules run as separate service hosts behind a YARP Gateway pinned to +`https://localhost:6001`, with gRPC via `*.Contracts` and the outbox to a broker +(`MMCA.ADC/AGENTS.md:7`, `MMCA.Store/AGENTS.md:7`); RS256 plus JWKS discovery with no shared secret +(`MMCA.ADC/AGENTS.md:58`, `MMCA.Store/AGENTS.md:59`); deploy to Azure Container Apps on a push to +`main` (`MMCA.ADC/AGENTS.md:83`); one Dockerfile per deployable across the four services plus the +Gateway and UI.Web (`:68`); each service owning its own database and its own `dbo.OutboxMessages` +(`:62`, databases named at `:26`; Store's at `MMCA.Store/AGENTS.md:26`). Packages and versions +verified this run: the framework publishes twenty-two packages (`MMCA.Common/FACTS.md:19`, enumerated +at `:22-43`) at v1.221.0 (`:14`, snapshot dated 2026-10-02 at `:4`), and the changelog's newest entry +is `## [1.221.0] - 2026-10-02` (`MMCA.Common/CHANGELOG.md:7`, with 1.220.0 at `:15`). The consumers pin +subsets, each in lockstep: ADC carries twenty `MMCA.Common.*` entries, all at 1.221.0 +(`MMCA.ADC/Directory.Packages.props:103-139`, `.Grpc` at `:103`, `.AI` at `:111`, `.AI.Anthropic` at +`:114`, `.AI.Testing` at `:117`, `.Gateway` at `:125`, `.UI.Maui` at `:139`; it does not pin +`.AI.OpenAI` or the `MMCA.Common` package), and Store carries seventeen, also all at 1.221.0 and with +no `.AI` entry (`MMCA.Store/Directory.Packages.props:8-26`, `.Grpc` at `:76`, `.Aspire.Hosting` at +`:113`), including `MMCA.Common.UI.Maui` in both. Corrected this run: the package count (`.AI.Anthropic`, +`.AI.OpenAI`, `.AI.Testing` are new) and ADC's entry count, both of which trailed the current release. Decorator order is FeatureGate then Authorization then Logging then Caching then Validating +then Timeout then Transactional then the handler for commands, and the same minus Transactional for +queries (`MMCA.Common/AGENTS.md:81-82`), read off the Scrutor `TryDecorate` registration order +(innermost first) at `MMCA.Common/Source/Core/MMCA.Common.Application/DependencyInjection.cs:134-140` +for commands and `:143-148` for queries, where `ValidatingQueryDecorator` sits at `:144` (re-anchored +this run from `:137-143`, `:146-151`, `:147`, and from the retired `MMCA.Common/CLAUDE.md:80`). Counted this run rather than quoted: the Conference module's -`Source/Modules/Conference/MMCA.ADC.Conference.API/Controllers/` folder holds eighteen domain REST -controllers (Activities, CategoryItems, ConferenceCategories, EventQuestionAnswers, Events, -EventSpeakers, Partners, Questions, Rooms, SessionAssets, SessionCategoryItems, SessionQuestionAnswers, -SessionSelection, SessionSpeakers, Sessions, SpeakerCategoryItems, Speakers, Sponsors) plus the shared -`ServiceInfoController`; `MMCA.ADC/CLAUDE.md:50` states seventeen and owns the domain list (events, -sessions, speakers, rooms, categories, questions/answers, social activities, partners, session assets), -so the article states the counted figure and that doc line is itself one behind. Store module contents -re-read this run: Catalog owns `Category`, `Product`, `ProductVariant` plus the `Reviews` aggregate -(`ProductReview`, `VerifiedPurchase`) with a derived `RatingSummary` owned by `Product`, and a variant -carries an owned `VariantDiscount` resolved by `GetEffectivePrice(now)` (`MMCA.Store/CLAUDE.md:49`); -Sales owns `Order` (plus `OrderLine` and an owned `Shipment`), `ShoppingCart` and `InventoryItem` with -Stripe payments (`:50`), and the Sales cluster keeps YARP's HTTP/1.1-capable defaults for REST plus the -Stripe webhook (`:44`). Dropped this run: `ShoppingCartItem` and "hierarchical categories, variant -pricing and SKUs", none of which those lines state. ADC's Engagement module owns session bookmarks, -feedback and the conference-day live layer (LivePolls + SessionQuestions, Happening Now / session Live / -presenter UI, `MMCA.ADC/CLAUDE.md:51`); ownership authorization is not ADC-absent, ADC configures -MMCA.Common's `OwnerOrAdminFilter` on the Bookmarks list endpoints in `AddModuleEngagementAPI` -(`:66`); and the BR-207 divergence from Store is recorded as deliberate at `:57`. `VERSIONING.md` does -not live in MMCA.Common, it is `Website/docs-src/guides/common-VERSIONING.md`, which states that the -packages are versioned and released together as a single unit with the authoritative list and count in -FACTS.md (`:5-7`, so the earlier "states fifteen packages" note is retired: the doc states no count), -MinVer from annotated git tags (`:25`), no opt-in flags or phased rollouts (`:67`), and the -fitness-tested MassTransit v8 pin (`:87`). Scorecard numbers re-read this run: the framework's two-axis -index is Maturity 97.0% (318/328) and Implementation 86.0% (705/820) -(`Website/docs-src/governance/common-ArchitectureScorecard.md:120-121`), nothing is excluded from the -denominators (`:124`), and the latest cycle is the thirty-sixth-wave full 34-category re-score of -2026-09-19 at v1.205.0 (git HEAD `90ffa7a`, clean tree), which moved no score: ten first-pass lifts came -back FLAG and were refuted on the adversarial pass (header line `:5`). The earlier 314/324 and 687/810 -denominators were pre-rubric-v2; under ADR-110 the weight sum is 82, §10 is Messaging & Integration -Architecture and §16 is AI-Native Application Architecture, which this article does not evidence: its -categories are §4, §5, §7, §10 and §32. The downstream-evidence caveat is written into the rows -themselves: §4 DDD holds at 8 with strategic DDD "still realized downstream (only Notifications lives -here)" (`:84`), and §5 VSA holds at 8 on "the enforced in-repo slicing surface is still the Notifications -family" (`:85`). Corrected this run: the stated reason for that §5 cap moved. v1.203.0 (commit -`630afc9`) widened both slice rules to every Application class including abstract bases -(`Rules/Cqrs/ArchitectureRules.Slices.cs:39,69`), so "outside the concrete-class slice gate" is not the -cap; the row records that 12 of the 13 Users bases declare their contract over a generic parameter and -stay exempt by design, that the family is 13 bases across 9 folders rather than five handlers, and that -each use case still edits the shared `UserUseCaseLog` switchboard. Performance and cost are not "no -in-repo evidence": §12 ships a repeatable BenchmarkDotNet hot-path harness (`:92`) and §31 cites a -released cost guide (`:111`, the doc itself is `Website/docs-src/guides/common-COST.md`), with full -load/stress data living in the consumer apps. The two consumer scorecards sit on the same instrument: -ADC scores Maturity 98.5% (319/324) and Implementation 86.2% (698/810) on its thirty-second-cycle full -re-score of 2026-09-16 at pin v1.204.0, git HEAD `631c7ba6`, its Implementation axis up from 85.4% -(692/810) (`Website/docs-src/governance/adc-ArchitectureScorecard.md:92-93`), and Store scores Maturity -97.8% (309/316) and Implementation 83.9% (663/790) on its 2026-09-04 full re-score, the first against -rubric v2, which moved no score (`Website/docs-src/governance/store-ArchitectureScorecard.md:57-58`, -header `:5`). That two-axis scorecard is canonical in the Website docs library since the 2026-07-20 -centralization (it is no longer carried in MMCA.Common), and it replaced an earlier single-axis 80% -snapshot that survives only in git history and is therefore not checkable from the working tree: the -original-snapshot-then-fixed-then-re-scored framing stands, the 80% figure is a history assertion.* +`Source/Modules/Conference/MMCA.ADC.Conference.API/Controllers/` tree holds twenty-two domain REST +controllers in feature subfolders (Activities, CategoryItems, ConferenceCategories, EventLifecycle, +EventQuestionAnswers, Events, EventSpeakers, Partners, Questions, Rooms, SessionAssets, SessionCalendar, +SessionCategoryItems, SessionQuestionAnswers, SessionSelection, SessionSpeakers, Sessions, +SpeakerCategoryItems, SpeakerLinks, Speakers, SpeakerSessions, Sponsors) plus the root +`ServiceInfoController`; the four added since the last count are EventLifecycle +(`Controllers/Events/EventLifecycleController.cs`), SessionCalendar, SpeakerLinks and SpeakerSessions. +`MMCA.ADC/AGENTS.md:50` still states seventeen and owns the domain list, so the article states the +counted figure and that doc line is behind. Corrected this run: the bookmark-count sentence no longer +credits a disabled-module stub for the extracted topology. Service hosts load only their own module and +register no disabled-dependency stub (`MMCA.ADC/AGENTS.md:43`); Conference calls Engagement's +`IBookmarkCountService` via gRPC (`:50`) through adapters implementing the same in-process interfaces +(`:56`), registered by `AddEngagementBookmarkCountClient`, which replaces whatever is registered with +`BookmarkCountServiceGrpcAdapter` +(`MMCA.ADC/Source/Services/MMCA.ADC.Engagement.Contracts/DependencyInjection.cs:49`). +`DisabledBookmarkCountService` +(`MMCA.ADC/Source/Modules/Engagement/MMCA.ADC.Engagement.API/EngagementModule.cs:32`) covers only a +host where the Engagement module is disabled. Store module contents re-read this run: Catalog owns +`Category`, `Product`, `ProductVariant` with an owned `VariantDiscount` resolved by +`GetEffectivePrice(now)`, plus the `Reviews` aggregate (`ProductReview`, `VerifiedPurchase`) with a +derived `RatingSummary` owned by `Product` (`MMCA.Store/AGENTS.md:49`); Sales owns `Order` (plus +`OrderLine` and an owned `Shipment`), `ShoppingCart` and `InventoryItem` with Stripe payments (`:50`); +Identity owns `User`, `Customer` and JWT auth with refresh tokens (`:51`); the Sales cluster keeps +YARP's HTTP/1.1-capable defaults for REST plus the Stripe webhook (`:44`). Catalog's +`ProductVariantChanged` publishes after commit so the database-generated ID is known (`:56`), the +in-process domain-event divergence from ADC is recorded at `:58`, compensating saga handlers restore +inventory (`:102`), and Store configures `OwnerOrAdminFilter` (`:103`). ADC's Identity offers +Google/GitHub social login (`MMCA.ADC/AGENTS.md:49`); Engagement owns bookmarks, feedback and the +conference-day live layer (`:51`); Notification is the thin SignalR module (`:52`); ADC configures +`OwnerOrAdminFilter` on the Bookmarks list endpoints in `AddModuleEngagementAPI` (`:66`); and the +BR-207 `UserRegistered` flow and its deliberate divergence from Store are at `:57`. Shared fitness +rules: rule bodies live once in `MMCA.Common.Testing.Architecture`, parameterized by `IArchitectureMap`, +and Store and ADC subclass the same bases (`MMCA.Common/AGENTS.md:70`); Application, Domain and Shared +never reference MassTransit, and `IMessageBus` is served by `InProcessMessageBus` or `BrokerMessageBus` +(`:129`; `MMCA.Common/Source/Core/MMCA.Common.Application/Messaging/IMessageBus.cs:28`, +`MMCA.Common/Source/Core/MMCA.Common.Infrastructure/Messaging/InProcessMessageBus.cs:19`, +`BrokerMessageBus.cs:43`); the MassTransit v8 pin is guarded by `DependencyVersionTests` +(`MMCA.Common/AGENTS.md:40`). `Website/docs-src/guides/common-VERSIONING.md` states that the packages +are versioned and released together as a single unit with the authoritative list and count in FACTS.md +(`:5-7`), MinVer from annotated git tags (`:25`), no opt-in flags or phased rollouts (`:67`), and the +MassTransit v8 pin (`:87`). Scorecard numbers re-read this run: the framework's two-axis index is +Maturity 96.6% (317/328) and Implementation 86.0% (705/820) +(`Website/docs-src/governance/common-ArchitectureScorecard.md:9-10`), evidence as of 2026-10-01 at +v1.218.0, git HEAD `f93bc6e2`, dirty tree (`:5`), 34 rows with nothing excluded from the denominators +and a weight sum of 82 (`:104`). The downstream-evidence caveat is written into the rows themselves: category 4 +DDD holds at 8 on two open criteria, strategic DDD realized downstream with one Domain aggregate family +(Notifications) plus auth support types, and a plain-string tenant identifier (`:68`); category 5 VSA holds at +8 because Common has no business use-case slices of its own, so slice cohesion is proven in the +consumer repos, with generic-parameter handler bases exempt by design (`:69`). Corrected this run: the +article's two quoted row phrases ("still realized downstream (only Notifications lives here)" and "the +enforced in-repo slicing surface is still the Notifications family") are no longer in the scorecard and +are replaced by the current row text; the shared logging-switchboard clause is removed, because a +Grep over `MMCA.Common/Source` finds no such type (the bases are `partial` classes taking their own +`ILogger`, for example `ChangePasswordHandlerBase.cs:42`). The `Users` family is thirteen +`*HandlerBase.cs` files across nine folders under +`MMCA.Common/Source/Core/MMCA.Common.Application/Users/UseCases/`; only +`GetPreferences/GetUserPreferencesHandlerBase.cs:21-22` declares a concrete contract, and the slice +rules document abstract-base scanning at +`MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Rules/Cqrs/ArchitectureRules.Slices.cs:27-32`, +with the two rules at `:35` and `:65` scanning every Application class at `:39` and `:69`. Performance +and cost are not "no in-repo evidence": category 12 ships a repeatable BenchmarkDotNet hot-path harness (`:76`) +and category 31 cites a released cost guide (`:95`, the doc itself is `Website/docs-src/guides/common-COST.md`), +with full load/stress data living in the consumer apps. The two consumer scorecards sit on the same +instrument: ADC scores Maturity 96.9% (314/324) and Implementation 86.0% (697/810), evidence as of +2026-10-01 at pin v1.217.0, git HEAD `2140ebd1` +(`Website/docs-src/governance/adc-ArchitectureScorecard.md:9-10`, header `:5`), and Store scores +Maturity 97.5% (308/316) and Implementation 83.4% (659/790), evidence as of 2026-10-01 at pin v1.217.0, +git HEAD `579e395b` (`Website/docs-src/governance/store-ArchitectureScorecard.md:9-10`, header `:5`). +Corrected this run: the previous Common, ADC and Store index figures are retired in favor of these. +Apache-2.0 at `MMCA.Common/LICENSE:2`. That two-axis scorecard is canonical in the Website docs library +since the 2026-07-20 centralization (it is no longer carried in MMCA.Common), and it replaced an +earlier single-axis 80% snapshot that survives only in git history and is therefore not checkable from +the working tree: the original-snapshot-then-fixed-then-re-scored framing stands, the 80% figure is a +history assertion.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/validation-kit.md b/docs-src/articles/validation-kit.md index 05fb8251..6a5cdbf0 100644 --- a/docs-src/articles/validation-kit.md +++ b/docs-src/articles/validation-kit.md @@ -1,7 +1,7 @@ # Compose validators, don't copy them: a reusable FluentValidation kit > Series: MMCA.Common · Article #8 (deep-dive) · Pillar P2 · Group G06 · Rubric §24,§33 · -> Status: grounded in `Website/docs-src/onboarding/group-06-validation.md`. No em dashes. +> Status: grounded in `Website/docs-src/onboarding/group-06-validation.md` and `MMCA.Common.Application/Validation/`. No em dashes. **Subtitle:** "Email must be valid, password must be strong, name is required." Every command re-declares those rules, and then they drift. Here is a validation kit where the rules are written once, composed with @@ -19,8 +19,8 @@ The pipeline question (where does validation *run*) is settled elsewhere: a `Val sits in the CQRS chain and gates every command before the handler, covered in the decorator-pipeline deep-dive. This article is about the *other* half that no one writes well: the reusable building blocks that make each validator a short list of includes rather than a copy-pasted `RuleFor` wall. MMCA.Common -ships that kit in `MMCA.Common.Application`, so ADC and Store both inherit identical email, password, and -address rules without duplicating a single line. +ships that kit in `MMCA.Common.Application`, so a module that composes from it gets the framework's email, +password, and address rules without restating a single chain. ## Reusable rule fragments, composed with Include @@ -30,32 +30,42 @@ declares eleven of them: `RequiredStringRules`, `OptionalStringRules`, `Em `AbsoluteUrlRules`, `PositiveIntRules`, `PositiveDecimalRules`, `NonNegativeIntRules`, `RequiredIdRules`, `OptionalPositiveIdRules`, `PasswordRules`, and `StrongPasswordRules`. Each constructor is a single expression body. `EmailRules`, for example, -chains `NotEmpty()` + `EmailAddress()` + `MaximumLength(maxLength)`. `StrongPasswordRules` repeats -`PasswordRules`'s non-empty plus 8-to-128 length and adds four `Matches(...)` regexes for an uppercase -letter, a lowercase letter, a digit, and a special character. +chains `NotEmpty()` + `EmailAddress()` + `MaximumLength(maxLength)`. `StrongPasswordRules` declares +the same non-empty plus 8-to-128 length as `PasswordRules` and adds four `Matches(...)` regexes for an +uppercase letter, a lowercase letter, a digit, and a special character. Its lengths and character classes +come from `PasswordComplexity` in `MMCA.Common.Shared`, the one Unicode-aware definition the client form +attribute evaluates too, so the server rule and the form cannot disagree. Two design choices make a fragment reusable across unrelated types. First, it is **generic over `T`**, the type that contains the field. Second, it takes a **selector expression** (`Expression>`) -rather than inheriting from the parent. So the same `EmailRules` validates a `RegisterRequest`, a -`LoginRequest`, or a bare value object, with zero inheritance coupling. A concrete validator pulls a -fragment in with FluentValidation's `Include(...)`: +rather than inheriting from the parent. So the same `EmailRules` validates ADC's `RegisterRequest`, a +speaker's email, and an event's organizer contact email, with zero inheritance coupling. A concrete +validator pulls fragments in with FluentValidation's `Include(...)`. This is ADC's registration validator: ```csharp -public sealed class CreateSessionRequestValidator : AbstractValidator +public sealed class RegisterRequestValidator : AbstractValidator { - public CreateSessionRequestValidator() + public RegisterRequestValidator() { - Include(new RequiredStringRules(r => r.Title, "Title", 200)); - Include(new EmailRules(r => r.ContactEmail, "Contact Email", 256)); + Include(new EmailRules(x => x.Email, "Email", UserInvariants.EmailMaxLength)); + Include(new StrongPasswordRules(x => x.Password)); + Include(new RequiredStringRules(x => x.FirstName, "First name", UserInvariants.FirstNameMaxLength)); + Include(new RequiredStringRules(x => x.LastName, "Last name", UserInvariants.LastNameMaxLength)); + + RuleFor(x => x.Address) + .SetValidator(new AddressValidator()!) + .When(x => x.Address is not null); } } ``` -Read that and the contract is obvious at a glance: a required title capped at 200 characters, a valid -contact email capped at 256. No `RuleFor` chain to re-derive. The "non-empty plus valid format plus max -length" logic lives in one place, and a security tweak (tighten the password regex, raise an email length -cap) is a one-line edit that propagates to every consumer on the next package bump instead of being missed -in some forgotten validator. +Read that and the contract is obvious at a glance: a required, well-formed email, a strong password, and +required first and last names, each length cap taken from the `UserInvariants` constants the domain's own +`User` checks use, plus an optional address handed to the shared `AddressValidator`. The only `RuleFor` +left is the one that wires the nested validator. The "non-empty plus valid format plus max length" logic +lives in one place, and a security tweak (tighten a password character class, raise an email length cap) +is a one-line edit that reaches every validator that includes the fragment on the next package bump +instead of being missed in some forgotten validator. The address family is the worked example of composition all the way up. `AddressValidationRules.cs` ships six field fragments (`AddressLine1Rules` through `CountryRules`), and `AddressValidator` is a @@ -67,11 +77,14 @@ across the entire solution, and the validator references it. ## One validator for the request, free for the command -Most commands in this codebase are thin wrappers that carry a request DTO, for example -`CreateSessionCommand(CreateSessionRequest Request)`, and implement `ICommandWithRequest` (its -`Request` property is the bridge). The naive approach forces you to register a validator for *both* the -request and the command, which means restating the request's rules at the command level for every single -command. That is boilerplate begging to drift. +Some commands carry a request DTO rather than being one. The generic update command, +`UpdateEntityCommand(Id, Request, RowVersion)`, wraps the request +body together with the route id and the concurrency token, and implements `ICommandWithRequest` +(its `Request` property is the bridge). The naive approach forces you to register a validator for *both* +the request and the command, which means restating the request's rules at the command level for every +wrapping command. That is boilerplate begging to drift. (A create path often needs no wrapper at all: ADC's +`CreateSessionHandler` handles `SessionCreateRequest` itself as the command, so the request's own +validator applies directly.) `CommandRequestValidator` removes it by convention. It is an auto-registered `AbstractValidator` whose constructor takes `IEnumerable>` by DI and loops @@ -90,8 +103,11 @@ closed `CommandRequestValidator` type per command, and regis **`TryAddTransient`**. That `TryAdd` is the load-bearing detail: it is a fallback, not an override. If a module ships an explicit hand-written `IValidator`, that wins, and the generic bridge stays out of the way. An empty validator collection is not an error either: it just means the request has no rules -and the generic validator is a no-op. Convention over configuration, with an escape hatch that never -blocks a bespoke case. +and the generic validator is a no-op. A command the scan cannot see (a closed generic constructed at +registration time rather than declared in the module assembly) gets the same bridge explicitly: +`AddEntityUpdate<...>()` calls `AddCommandRequestValidator()`, which registers the same +`CommandRequestValidator` with the same `TryAdd` semantics. Convention over configuration, with an escape +hatch that never blocks a bespoke case. ## A validation failure is a Result, and the edge maps it to 400 @@ -132,8 +148,8 @@ than duplicate. The validator does **cheap structural checks**: is the string non-empty, is it under the max length, does it look like an email, does the password match the complexity regex. These are properties of the request -shape alone. They need no database, no other entity, no business context, and they are exactly what you -want to reject at the edge with a 400 before opening a transaction. +shape alone. The kit's fragments need no database, no other entity, no business context, and they are +exactly what you want to reject at the edge with a 400 before opening a transaction. The domain factory enforces **business invariants**: rules that depend on state the validator cannot see. "This email is already registered." "A session cannot be scheduled outside its parent event's window." "A @@ -142,9 +158,11 @@ data lives, returned as a `Result` failure from the factory method. Put the structural check in the validator and the business invariant in the domain factory, and each lives in exactly one place. The anti-pattern is smearing one altitude across both layers: re-doing a regex check -inside the factory, or trying to query the database from a validator. The kit's job is to make the cheap -structural layer composable and consistent, so the domain factory is free to focus on the rules only it -can enforce. +inside the factory, or pulling a business invariant out of the domain into a validator. The pipeline does +not forbid the second (the validating decorator runs validators one at a time precisely because a validator +may reach the database through a scoped repository), but a rule that needs other data already has a home +in the domain factory, next to that data. The kit's job is to make the cheap structural layer composable +and consistent, so the domain factory is free to focus on the rules only it can enforce. ## Trade-offs, honestly @@ -156,6 +174,10 @@ can enforce. `RequiredStringRules(selector, fieldName, maxLength)` is more abstract than a literal `RuleFor(x => x.Title).NotEmpty().MaximumLength(200)`. The payoff is reuse, but a newcomer meets a small generic puzzle (what is `T`, what does the selector bind) before the first `Include` reads naturally. +- **Composition is opt-in, so adoption is uneven.** Nothing forces a validator to include a fragment. + Store's registration validator hand-writes its email and password chains with literal lengths (and its + password chain carries no complexity regexes), and Common's own login and forgot-password validators + hand-write their email rule. The kit removes the reason to copy; it does not detect a copy. - **This layer is structural only.** A fragment validates shape, never cross-entity or stateful rules. That is correct (those belong in the domain factory), but it means the validator is not the whole story, and a reviewer must check both altitudes to know a command is fully guarded. @@ -204,43 +226,61 @@ guide, or `dotnet add package MMCA.Common.Application` and try it.* *Tags: .NET, C Sharp, Validation, Software Architecture, FluentValidation* -*Notes: source-verified 2026-09-19 against MMCA.Common v1.205.0, paths relative to -`MMCA.Common/Source/Core/MMCA.Common.Application/`. Rule fragments, all eleven, in -`Validation/CommonValidationRules.cs`: `RequiredStringRules` (:41), `OptionalStringRules` (:53), -`EmailRules` (:64), `AbsoluteUrlRules` (:85), `PositiveIntRules` (:100), -`PositiveDecimalRules` (:111), `NonNegativeIntRules` (:122), `RequiredIdRules` (:142), -`OptionalPositiveIdRules` (:161), `PasswordRules` (:174), `StrongPasswordRules` (:188). -`EmailRules` chains `NotEmpty()` + `EmailAddress()` + `MaximumLength(maxLength)` (:66-71); -`StrongPasswordRules` chains `NotEmpty()` + `MinimumLength(8)` + `MaximumLength(128)` plus four -`Matches(...)` regexes for uppercase, lowercase, digit and special character (:190-198), the same -non-empty plus 8-to-128 chain `PasswordRules` declares (:176-180). Every fragment constructor carries -an optional trailing `string? errorCode = null`, so the three-argument -`RequiredStringRules(selector, fieldName, maxLength)` and `EmailRules(selector, fieldName, maxLength)` -calls in the illustrative code block compile as written (`:43`, `:66`). -`CommandRequestValidator` (`Validation/CommandRequestValidator.cs:30-41`) runs -`foreach (var validator in requestValidators.DistinctBy(v => v.GetType())) { RuleFor(c => c.Request).SetValidator(validator); }`, -and its class doc states that every registered validator for the request type runs, not just the first -(same file, :12-16). `ScanModuleApplicationServices()` (`DependencyInjection.cs:169-171`) -forwards to the `Assembly`-typed overload (`DependencyInjection.cs:187`), which calls -`services.AddValidatorsFromAssembly(moduleAssembly)` (`DependencyInjection.cs:258`) and registers each -closed `CommandRequestValidator<,>` with `services.TryAddTransient(serviceType, validatorType)` -(`DependencyInjection.cs:275`). Not re-opened this run, and still grounded in -`Website/docs-src/onboarding/group-06-validation.md`: `AddressLine1Rules` through `CountryRules` and -`AddressValidator` (`AddressValidationRules.cs`, limits from `AddressInvariants`); -`ICommandWithRequest`; `ValidationFailureExtensions.ToErrors(string source)` producing -`Error.Validation(code, message, source, target)` tagged `ErrorType.Validation`; and -`ValidatingCommandDecorator` calling `ToErrors(typeof(TCommand).Name)`. -FluentValidation 12 is the underlying library. The `CreateSessionRequestValidator` code block is an -illustrative composition in the documented fragment idiom, not a verbatim copy of a specific module file; -the per-module validators (ADC `SessionCreateRequestValidator`, Identity `RegisterRequestValidator`, etc.) -live in their module chapters and were not read line-by-line for this article. There is no dedicated ADR -for validation; it is governed by the CQRS-decorator ADRs and the layering fitness tests. Change history: -the 2026-06-30 evidence-audit note cited the `EmailRules` constructor at `CommonValidationRules.cs:38` -as a three-parameter method; the class sits at :64 and its four-parameter constructor at :66 after an -internal `OptionalErrorCodeExtensions` helper (:19) was inserted above the fragments, which shifted every -subsequent line. This run also corrected the fragment count from eight to eleven, the -`CommandRequestValidator` description from picking the first registered validator to applying every one of -them, and the discovery call from `AddValidatorsFromAssemblyContaining` to -`AddValidatorsFromAssembly(moduleAssembly)`, each against the anchors cited above.* +*Notes: source-verified 2026-10-02 against MMCA.Common v1.221.0 (per `MMCA.Common/FACTS.md`), paths +relative to `MMCA.Common/Source/Core/MMCA.Common.Application/` unless prefixed. Rule fragments, all +eleven, in `Validation/CommonValidationRules.cs`: `RequiredStringRules` (:42), `OptionalStringRules` +(:54), `EmailRules` (:65), `AbsoluteUrlRules` (:86), `PositiveIntRules` (:101), +`PositiveDecimalRules` (:112), `NonNegativeIntRules` (:123), `RequiredIdRules` (:143), +`OptionalPositiveIdRules` (:162), `PasswordRules` (:175), `StrongPasswordRules` (:191); +internal `OptionalErrorCodeExtensions` helper at :20. `EmailRules` ctor :67, chain :68-71; +`RequiredStringRules` ctor :44; every fragment ctor ends in an optional `string? errorCode = null`. +`PasswordRules` chains literal `MinimumLength(8)` / `MaximumLength(128)` (:179-181); +`StrongPasswordRules` chains `MinimumLength(PasswordComplexity.MinimumLength)`, +`MaximumLength(PasswordComplexity.MaximumLength)` and four `Matches(PasswordComplexity.Uppercase/ +Lowercase/Digit/SpecialCharacter)` (:195-201), with the shared-with-the-client-form-attribute statement in +its class doc (:187-188); `MMCA.Common.Shared/Auth/PasswordComplexity.cs` declares `MinimumLength = 8` +(:21), `MaximumLength = 128` (:24) and the four Unicode-category regexes (:28, :32, :36, :43). The code +block is verbatim from `MMCA.ADC/Source/Modules/Identity/MMCA.ADC.Identity.Application/Users/Validation/ +RegisterRequestValidator.cs:12-25` (includes :16-19); its caps come from +`MMCA.ADC.Identity.Domain/Users/UserInvariants.cs:12,15,18`, which the domain's own email check uses +(:29). Other `EmailRules` users: ADC `SpeakerValidationRules.cs:46`, `EventValidationRules.cs:67`; +`StrongPasswordRules` also in ADC `ChangePasswordRequestValidator.cs:18`. Uneven adoption: Store +`MMCA.Store.Identity.Application/Users/Validation/RegisterRequestValidator.cs:17-20` (email, literal 100) +and :22-25 (password, 8/128, no `Matches`), composing only `AddressValidator` (:35-37); Common +`Auth/Validation/LoginRequestValidator.cs:15` and `ForgotPasswordRequestValidator.cs:14` hand-write +`RuleFor(x => x.Email)`. Address family: `Validation/AddressValidationRules.cs`, `AddressValidator` :13 +with six `Include` calls :17-22, fragments :31-88 reading `AddressInvariants` +(`MMCA.Common.Shared/ValueObjects/Contact/AddressInvariants.cs:9`). Command bridge: +`UpdateEntityCommand(Id, Request, RowVersion)` implements +`ICommandWithRequest` (`UseCases/Crud/UpdateEntityCommand.cs:48-52`); +`ICommandWithRequest.Request` (`UseCases/Contracts/ICommandWithRequest.cs:14-17`); create path: +ADC `Sessions/UseCases/Create/CreateSessionHandler.cs:29` derives `CreateEntityHandlerBase`, +which is `ICommandHandler>` (`UseCases/Crud/CreateEntityHandlerBase.cs:42-46`). +`CommandRequestValidator` (`Validation/CommandRequestValidator.cs:30-31`, ctor :33, +`DistinctBy` loop :37-40, every-validator doc :12-16). `ScanModuleApplicationServices()` +(`DependencyInjection.ModuleScanning.cs:28-30`) forwards to the `Assembly` overload (:46), which calls +`AddValidatorsFromAssembly(moduleAssembly)` (:117) and reflects over `ICommandWithRequest<>` (:121-135), +registering via `TryAddTransient(serviceType, validatorType)` (:134). Explicit form: +`AddCommandRequestValidator()` (`DependencyInjection.Crud.cs:220-226`, `TryAddTransient` +:223), called from `AddEntityUpdate` (:199). `ValidationFailureExtensions.ToErrors(string source)` +(`Extensions/ValidationFailureExtensions.cs:11,19-21`) builds `Error.Validation(code, message, source, +target)` (`MMCA.Common.Shared/Abstractions/Error.cs:37-38`). `ValidatingCommandDecorator` calls +`ToErrors(typeof(TCommand).Name)` (`UseCases/Decorators/ValidatingCommandDecorator.cs:83`) and returns a +failure without calling the inner handler (:86-94); its comment that a validator may reach the database +through a scoped repository is at :70-72. Decorator order: `DependencyInjection.cs:134` Transactional +(innermost), :135 Timeout, :136 Validating. `ErrorType.Validation` -> 400 at +`MMCA.Common/Source/Presentation/MMCA.Common.API/Middleware/ErrorHttpMapping.cs:22`. FluentValidation 12: +`MMCA.Common/Directory.Packages.props:30` (`FluentValidation.DependencyInjectionExtensions` 12.1.1). There +is no dedicated ADR for validation; it is governed by the CQRS-decorator ADRs (ADR-014) and the layering +fitness tests. Change history (2026-10-02): re-anchored every Common cite after the `DependencyInjection` +partial split (scan moved to `DependencyInjection.ModuleScanning.cs`) and a one-to-three-line shift in +`CommonValidationRules.cs`; replaced the illustrative `CreateSessionRequestValidator` block (no such type) +with ADC's real `RegisterRequestValidator`; replaced the nonexistent `CreateSessionCommand` example with +`UpdateEntityCommand` and "most commands" with "some"; narrowed "ADC and Store both inherit identical +rules" (Store hand-writes them) and "the same EmailRules validates a LoginRequest" (Common's login +validator does not use it) and added the uneven-adoption trade-off; reconciled the validator-database +stance with the decorator comment; added `PasswordComplexity` and `AddCommandRequestValidator`. Earlier +runs corrected the fragment count from eight to eleven, the `CommandRequestValidator` description to apply +every registered validator, and the discovery call to `AddValidatorsFromAssembly(moduleAssembly)`.* - Full series index: https://ivanball.github.io/writing.html diff --git a/docs-src/articles/write-your-first-fitness-test.md b/docs-src/articles/write-your-first-fitness-test.md index 68e2db68..7564cac1 100644 --- a/docs-src/articles/write-your-first-fitness-test.md +++ b/docs-src/articles/write-your-first-fitness-test.md @@ -1,8 +1,8 @@ # Write your first architecture fitness test -> Series: MMCA.Common · Article #40 (tutorial) · Pillar P5 · Group G28 · Rubric §34 · ADR-015 · +> Series: MMCA.Common · Article #40 (tutorial) · Pillar P5 · Group G25 · Rubric §34 · ADR-015 · > Status: grounded in `Website/docs-src/adr/015-architecture-fitness-functions.md`, -> `MMCA.Common/CLAUDE.md` ("Architecture Enforcement"), `MMCA.Common/README.md` (Testing.Architecture +> `MMCA.Common/AGENTS.md` ("Architecture", the two enforcement gates), `MMCA.Common/README.md` (Testing.Architecture > package row), and `Docs/Onboarding/parts/group-28-testing-infrastructure-p00.md` (assembled and > published as `Website/docs-src/onboarding/group-28-testing-infrastructure.md`). No em dashes. @@ -49,8 +49,8 @@ MMCA.Common enforces its layer rules **twice**, on purpose: A third gate sits alongside those two, and ADR-015 as revised records the enforcement as running in three layers. It is neither MSBuild nor NetArchTest: `Microsoft.CodeAnalysis.PublicApiAnalyzers` runs on every published package except `MMCA.Common.UI.Maui` (excluded by name, because it builds only on the -Windows MAUI job outside the main solution) against a committed `PublicAPI.Shipped.txt` baseline (5,034 -declarations across eighteen files), so adding or removing a public member fails the compile until that +Windows MAUI job outside the main solution) against a committed `PublicAPI.Shipped.txt` baseline (one +per gated package, twenty-one files), so adding or removing a public member fails the compile until that text file is updated in the same pull request. It guards the shipped package surface rather than layer flow, which is why the two speeds above are the ones this tutorial teaches. @@ -63,18 +63,18 @@ This article is about adding the second layer to your own code, and optionally t - **Microsoft Testing Platform** as your test runner (MMCA.Common uses it via `global.json` with xUnit v3). The fitness tests run inside the normal `dotnet test` tier, so they gate CI like any other test. -- The package you are about to install: **`MMCA.Common.Testing.Architecture`**, one of the nineteen +- The package you are about to install: **`MMCA.Common.Testing.Architecture`**, one of the twenty-two packages the framework publishes. Its README row describes it exactly: "`IArchitectureMap` + reusable NetArchTest rule library + abstract test bases (consumed by each repo's `*.Architecture.Tests`)." The key design idea: the rule *bodies* ship in the package once. You do not copy them. You supply a tiny map of your assemblies and subclass the bases, and you inherit roughly the same suite that runs across -MMCA.Common, MMCA.Store, MMCA.ADC and MMCA.Helpdesk (136 test methods across 53 abstract `*TestsBase` -classes; the framework's own build executes 267 of them). +MMCA.Common, MMCA.Store, MMCA.ADC and MMCA.Helpdesk (141 test methods across 55 abstract `*TestsBase` +classes; the framework's own build executes 339 of them). > **If you scaffolded with `dotnet new mmca-app`, steps 1 through 4 are already done.** The generated > solution ships the architecture-test project, the `IArchitectureMap`, and every applicable base -> subclassed (31 sealed subclasses in the current reference-app seed), including the wire-contract +> subclassed (32 sealed subclasses in the current reference-app seed), including the wire-contract > freeze, which arrives frozen under your own names and green on the first `dotnet test`. Read those > steps anyway to know what you have, then skip to Step 5. If you are retrofitting an existing > solution, the steps are the work. @@ -89,7 +89,7 @@ dotnet add package MMCA.Common.Testing.Architecture ``` The package brings the NetArchTest engine (NetArchTest.eNhancedEdition), the `ArchitectureRules` rule -library, the diagnostic helpers, and the 53 abstract `*TestsBase` classes. You will not write rule +library, the diagnostic helpers, and the 55 abstract `*TestsBase` classes. You will not write rule logic; you will point the rules at your assemblies and subclass the bases. ## Step 2: implement `IArchitectureMap`, one anchor type per layer @@ -122,8 +122,8 @@ internal sealed class MyAppArchitectureMap : ArchitectureMapBase ``` That is the "what to scan" half. The package's `ArchitectureRules` are the "what to assert" half. The -framework's own `CommonArchitectureMap` is module-less (every layer is a framework layer, one anchor per -package); ADC's `AdcArchitectureMap` adds module entries the same way. Your map looks like one of those, +framework's own `CommonArchitectureMap` is module-less (every layer is a framework layer, seven `Framework(...)` +entries, one anchor per layer it scans); ADC's `AdcArchitectureMap` adds module entries the same way. Your map looks like one of those, scaled to your solution. ## Step 3: subclass the test bases to inherit the rule library @@ -161,8 +161,8 @@ That is genuinely the whole test class: three lines plus the override. What you SDK, which the base names only generically in its doc comment as "a payment SDK or a broker client") without editing the package. -The other bases cover more ground when you are ready: `MicroserviceExtractionTestsBase` (no MassTransit -in Application/Domain/Shared), entity and aggregate conventions (aggregates have no public constructors, +The other bases cover more ground when you are ready: `MicroserviceExtractionTestsBase` (no MassTransit, +gRPC or Protobuf in Application/Domain/Shared), entity and aggregate conventions (aggregates have no public constructors, a `Result`-returning `Create` factory, entities are sealed and live in the Domain layer), concurrency awareness, controller conventions, and PII conventions (`[Pii]` implies `IAnonymizable`). You opt into each by adding a subclass. @@ -183,7 +183,7 @@ dotnet test --project Tests/Architecture/MyApp.Architecture.Tests -- --filter-me Because they run in the normal tier, a violated invariant fails CI exactly like a failing unit test. One operational note: Microsoft Testing Platform fails the build if a test project discovers zero tests, so make sure your subclasses are public and actually inherit `[Fact]`s. The framework's CI even floors its -test steps with `--minimum-expected-tests` (`1` on the ADC and Store CI runs, `2000` on MMCA.Common's own +test steps with `--minimum-expected-tests` (`1` on the ADC CI runs, `2650` on the Store CI runs, `2000` on MMCA.Common's own solution-wide run, `40` on its Helpdesk canary) so neither an empty suite nor a silently shrunken one can pass. Where a step carries no floor the workflow says why, as ADC's live-judge step does: every case there skips itself without an API key, and a zero-run must not red the deploy. @@ -281,79 +281,79 @@ holds in two unrelated production systems. *Tags: .NET, C Sharp, Software Architecture, Testing, Clean Architecture* -*Notes: verified facts (this run, 2026-09-19, against framework v1.205.0, `MMCA.Common/FACTS.md:14`, -snapshot dated 2026-09-17 at `:4`): the framework publishes **19** packages (`MMCA.Common/FACTS.md:19`), -with `MMCA.Common.Testing.Architecture` at position 15 in that list (`:36`), so the prerequisite bullet -reads "one of the nineteen packages" (corrected this run from "fifteen"). Fitness counts corrected this -run: 104 -> **136** test methods across 36 -> **53** abstract `*TestsBase` classes -(`MMCA.Common/FACTS.md:48`), and 99 -> **267** executed by MMCA.Common's own build (`:51`); the pair -appears in the key-design-idea paragraph and in the Step 1 package description, and ADR-015 has stopped -restating either figure. The consumer list corrected from three repos to four: -`Website/docs-src/adr/015-architecture-fitness-functions.md:59-62` names Common / Store / ADC / Helpdesk, -each supplying one `IArchitectureMap` (`CommonArchitectureMap`, `StoreArchitectureMap`, -`AdcArchitectureMap`, `HelpdeskArchitectureMap`), and the Helpdesk arch-test project is on disk at -`MMCA.Helpdesk/Tests/Architecture/MMCA.Helpdesk.Architecture.Tests/`. Scaffold callout rewritten this -run rather than renumbered: staging ships the wire-contract freeze rather than deleting it -(`MMCA.Helpdesk/build/templates/stage.ps1:1297`, the block headed "the wire-contract freeze SHIPS, and is -guarded rather than deleted"), the guard asserts that exactly one `IntegrationEventContractTests` class -is present (`:1315-1320`), and the staged app "arrives with its OWN contract already frozen, under its -own names, green on the first test run" (`:1306-1307`). The old callout text ("every applicable base -subclassed but one", "nineteen from the current reference-app seed") and the trade-off bullet that -depended on it were both replaced for that reason. Seed size counted this run: **31** sealed `*TestsBase` -subclasses in the reference app, 25 in -`MMCA.Helpdesk/Tests/Architecture/MMCA.Helpdesk.Architecture.Tests/ArchitectureTests.cs` plus six -single-class siblings in the same folder (`ServiceContractPurityTests`, `MiddlewarePipelineOrderTests`, -`FolderWidthTests`, `DeleteBehaviorConventionTests`, `ContractImplementationTests`, -`AnonymousEndpointTests`). The rewritten trade-off bullet is grounded in the base class itself: the -member list inside each event's braces is compared as a SET, not a sequence, with a missing member, an -extra member, a changed type and any change to the set of events all still failures +*Notes: verified facts (this run, 2026-10-02, against framework v1.221.0, `MMCA.Common/FACTS.md:14`, +snapshot dated 2026-10-02 at `:4`): the framework publishes **22** packages (`MMCA.Common/FACTS.md:19`), +with `MMCA.Common.Testing.Architecture` at position 18 in that list (`:39`), so the prerequisite bullet +reads "one of the twenty-two packages" (corrected this run from "nineteen"). Fitness counts corrected +this run: 136 -> **141** test methods across 53 -> **55** abstract `*TestsBase` classes +(`MMCA.Common/FACTS.md:51`), and 267 -> **339** executed by MMCA.Common's own build (`:54`); the pair +appears in the key-design-idea paragraph and in the Step 1 package description. Four consumers each +supply one `IArchitectureMap` (`Website/docs-src/adr/015-architecture-fitness-functions.md:63`: +`CommonArchitectureMap`, `StoreArchitectureMap`, `AdcArchitectureMap`, `HelpdeskArchitectureMap`), while +`FACTS.md:53` lists only Common, ADC and Store; the article follows ADR-015 because the Helpdesk subclasses +are on disk (counted below). Scaffold callout seed size corrected 31 -> **32** sealed `*TestsBase` +subclasses in the reference app: 25 in +`MMCA.Helpdesk/Tests/Architecture/MMCA.Helpdesk.Architecture.Tests/ArchitectureTests.cs` (`:5` through +`:210`) plus seven single-class siblings in the same folder (`ServiceContractPurityTests.cs:9`, +`MiddlewarePipelineOrderTests.cs:15`, `AnonymousEndpointTests.cs:17`, `DeleteBehaviorConventionTests.cs:20`, +`FolderWidthTests.cs:8`, `ContractImplementationTests.cs:12`, and `DecoratorPipelineOrderTests.cs:35-36`, +whose base list wraps onto the next line, which is why the previous run's single-line count missed it); +`TicketsExportScopeTests.cs:22` is sealed but has no base, so it is not counted. The wire-contract +freeze ships in the template (`MMCA.Helpdesk/build/templates/stage.ps1:1298`, the block headed "the +wire-contract freeze SHIPS, and is guarded rather than deleted"), the SET comparison is named as the +reason at `:1300-1301`, the staged app "arrives with its OWN contract already frozen" at `:1307`, and the +guard asserting exactly one `IntegrationEventContractTests` class is at `:1316-1320` (all four anchors +corrected this run, previously off by one). The trade-off bullet is grounded in the base class: members +compared as a SET, not a sequence, with missing, extra, retyped members and event-set changes all still +failures (`MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Contracts/IntegrationEventContractTestsBase.cs:11-15`), -the comparison helper reporting an empty list when the two agree "member order aside" (`:41`), and -`ExpectedContract` declared at `:23`; `stage.ps1:1299-1301` names that set comparison as the reason the -freeze can ship in the template. README package row quoted verbatim from `MMCA.Common/README.md:81` -(anchor corrected this run from `:79`; the quoted text is unchanged). `LayerDependencyTestsBase` holds -**15** `[Fact]`s, as the body and the illustrative code comment say: 13 forbidden-edge rules -(`MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Layering/LayerDependencyTestsBase.cs:59-96`) -plus two non-vacuity guards, `LayerMap_DeclaresEveryExpectedLayer` (`:52-53`) and -`LayerMap_ModulesDeclareEveryExpectedLayer` (`:55-56`), whose default required layers are the five core -ones (`:16-17`); the file sits under `Bases/Layering/`, so every anchor for it is re-read this run. -`DomainPurityTestsBase` asserts Domain/Shared framework-freedom plus Application host-agnosticism -(`.../Bases/Layering/DomainPurityTestsBase.cs:14-24`) and exposes `ExtraForbiddenDomainDependencies` -(`:12`). The "Stripe is only a doc-comment example" claim is corrected in both directions: Store's -subclass bans `["RabbitMQ", "Stripe"]` -(`MMCA.Store/Tests/Architecture/MMCA.Store.Architecture.Tests/Layering/DomainPurityTests.cs:11`, reason at -`:7-10`), and the base doc comment names the two generically as "a payment SDK or a broker client" -(`DomainPurityTestsBase.cs:5-6`). Engine NetArchTest.eNhancedEdition 1.4.5 -(`MMCA.Common/Directory.Packages.props:272`, anchor corrected this run from `:200`); the runner is -Microsoft Testing Platform (`MMCA.Common/global.json:2-3`). The CI-floor sentence corrected from "every -test step": the two quoted values hold (`MMCA.Common/.github/workflows/ci.yml:183` carries 2000 on the -solution-wide run, `MMCA.ADC/.github/workflows/deploy.yml:309` and `:447` carry 1, and -`MMCA.Store/.github/workflows/deploy.yml:244` and `:404` carry 1), Common's Helpdesk canary step carries -40 (`ci.yml:594`) and its UI E2E job carries 1 (`ci.yml:346`), while ADC's live-judge step deliberately -carries none and the workflow states the reason (`MMCA.ADC/.github/workflows/deploy.yml:506`). ADR-015 -states the 2000 floor with its own file:line -(`Website/docs-src/adr/015-architecture-fitness-functions.md:66-68`) rather than a generic 1, and -`FrameworkSanityTests` is named at `:87`; both anchors are corrected this run. Compile-time import -verified at `MMCA.Common/Directory.Build.props:141` (anchor corrected this run from `:123-124`), running -`BeforeTargets="ResolveProjectReferences"` -(`MMCA.Common/Source/Build/MMCA.Common.LayerEnforcement.targets:21`); the article's representative -snippet shows only the `Source`-directory half of that condition. Public-API gate re-read: -`Microsoft.CodeAnalysis.PublicApiAnalyzers` 5.6.0 (`MMCA.Common/Directory.Packages.props:226`) is -referenced from one `Directory.Build.props` ItemGroup whose condition excludes `MMCA.Common.UI.Maui` by -name (`MMCA.Common/Directory.Build.props:86`, rationale at `:76-84`), with `PublicAPI.Shipped.txt` and -`PublicAPI.Unshipped.txt` added as `AdditionalFiles` (`:91-92`), and the gate is exactly two rules, -RS0016 on an undeclared public member and RS0017 on a declared member that disappeared (`:78-79`). The -baseline size corrected from "about 5,150 declarations across fourteen files" to **5,034 declarations -across eighteen files** (`Website/docs-src/adr/015-architecture-fitness-functions.md:208`, with the -2026-09-19 revision recording the move to eighteen pairs at `:506-533`); the eighteen -`PublicAPI.Shipped.txt` files under `MMCA.Common/Source/` were counted independently this run, and the -5,034 total is taken from ADR-015 rather than recounted line by line. Header grounding corrected: the -chapter is G28, published at `Website/docs-src/onboarding/group-28-testing-infrastructure.md` and -authored as 30 parts under `Docs/Onboarding/parts/`, `group-28-testing-infrastructure-p00.md` through -`-p29.md`; `group-27-*` is the AI-integration chapter -(`Website/docs-src/onboarding/group-27-common-ai-integration.md`), which is why the old G27 anchors and -the old `-p07.md` citation no longer resolve. Sources: ADR-015 (Accepted, -`Website/docs-src/adr/015-architecture-fitness-functions.md:4`), `MMCA.Common/CLAUDE.md`, +`ExpectedContract` declared at `:33` and the comparison helper's "member order aside" at `:58` (both +corrected this run from `:23` and `:41`). README package row quoted verbatim from `MMCA.Common/README.md:85` +(anchor corrected this run from `:81`; text unchanged). `CommonArchitectureMap` is module-less with seven +`Framework(...)` entries, one per layer (Shared, Domain, Application, Infrastructure, Api, Grpc, Ui) +(`MMCA.Common/Tests/Architecture/MMCA.Common.Architecture.Tests/CommonArchitectureMap.cs:21-27`); the body +claim "one anchor per package" (which echoes that file's own doc comment at `:7`) is narrowed this run to +"one anchor per layer it scans", since seven anchors cover twenty-two packages and `MMCA.Common.UI.Maui` +is deliberately absent (`:9-12`). `MicroserviceExtractionTestsBase` description widened this run to +match the rule list, which bans `MassTransit`, `Grpc` and `Google.Protobuf` +(`MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Rules/Layering/ArchitectureRules.Transport.cs:13-15`). +Engine NetArchTest.eNhancedEdition 1.4.5 (`MMCA.Common/Directory.Packages.props:275`, corrected from +`:272`); `Microsoft.CodeAnalysis.PublicApiAnalyzers` 5.6.0 (`:228`, corrected from `:226`). The CI-floor +sentence corrected for Store: ADC still carries 1 (`MMCA.ADC/.github/workflows/deploy.yml:346` and +`:527`), Store's CI.slnf runs carry **2650** (`MMCA.Store/.github/workflows/deploy.yml:334` and `:564`; +its Integration run carries 250 at `:755`, not stated in the body), MMCA.Common's solution-wide run carries +2000 (`MMCA.Common/.github/workflows/ci.yml:161`), its Helpdesk canary 40 (`:580`) and its UI E2E job 1 +(`:324`); ADC's live-judge step carries no floor and states why (`MMCA.ADC/.github/workflows/deploy.yml:587`). +ADR-015 restates the 2000 floor with `ci.yml:161` (`Website/docs-src/adr/015-architecture-fitness-functions.md:69`), +frames the pair as "two layers, two speeds" (`:79`) and names `FrameworkSanityTests` (`:89`). MTP's +zero-discovery failure is exit code 8 (`MMCA.Common/AGENTS.md:38`). Compile-time import at +`MMCA.Common/Directory.Build.props:144-145` (corrected from `:141`), whose condition requires both a +`Source` directory and a project name starting with `MMCA.Common`; the article's representative snippet +shows only the `Source` half. Public-API gate re-read: one ItemGroup excluding `MMCA.Common.UI.Maui` by +name (`MMCA.Common/Directory.Build.props:89`, rationale `:79-88`), RS0016 / RS0017 named at `:81-82`, and +`PublicAPI.Shipped.txt` / `PublicAPI.Unshipped.txt` as `AdditionalFiles` (`:94-95`), all corrected from +`:86`, `:76-84`, `:78-79`, `:91-92`. The baseline file count corrected 18 -> **21** `PublicAPI.Shipped.txt` +files under `MMCA.Common/Source/` (Glob this run; ADR-015 agrees at `:34` and `:557`). The declaration +count is removed from the body this run rather than restated: ADR-015 records 7,881 (`:562`), the audit +counted 8,020, and this run's recount of non-empty, non-header lines across the 21 files gives 8,024, so +no single figure is stable enough to print; ADR-015's figure looks stale after v1.221.0. Header grounding +corrected: `MMCA.Common/CLAUDE.md` is a stub importing `AGENTS.md`, and the two-gates rule lives in +`MMCA.Common/AGENTS.md` section "Architecture" ("Two enforcement gates; add new rules in BOTH", `:68`). +G25 is published at `Website/docs-src/onboarding/group-28-testing-infrastructure.md` and authored as 35 +parts under `Docs/Onboarding/parts/`, `group-28-testing-infrastructure-p00.md` through `-p34.md` (Glob this +run; previously 30). Carried from the 2026-10-02 audit as CONFIRMED and not re-read in this apply pass: +`LayerDependencyTestsBase` holds 15 `[Fact]`s, 13 edges plus two map guards +(`MMCA.Common/Source/Hosting/MMCA.Common.Testing.Architecture/Bases/Layering/LayerDependencyTestsBase.cs:52`); +`DomainPurityTestsBase` and its `ExtraForbiddenDomainDependencies` (`.../Bases/Layering/DomainPurityTestsBase.cs:12`); +Store's `["RabbitMQ", "Stripe"]` ban +(`MMCA.Store/Tests/Architecture/MMCA.Store.Architecture.Tests/Layering/DomainPurityTests.cs:11`); +`ArchitectureMapBase` `RepoToken` / `DefineLayers` / `Framework` / `Module` (`ArchitectureMapBase.cs:19`, +`:22`, `:94`, `:98`); `AdcArchitectureMap` module entries +(`MMCA.ADC/Tests/Architecture/MMCA.ADC.Architecture.Tests/AdcArchitectureMap.cs:28`); entity conventions +(`.../Bases/Domain/EntityConventionTestsBase.cs:18-30`) and PII (`PiiConventionTestsBase.cs:12`); +`BeforeTargets="ResolveProjectReferences"` (`MMCA.Common/Source/Build/MMCA.Common.LayerEnforcement.targets:21`); +MTP via `MMCA.Common/global.json:3`. Open item outside this file: `Website/docs-src/articles/README.md:50` +maps article 40 to G25, which contradicts this header's G28. Sources: ADR-015, `MMCA.Common/AGENTS.md`, `MMCA.Common/README.md`, `MMCA.Common/FACTS.md`. The code blocks labeled representative use `MyApp*` placeholder names against the verified `ArchitectureMapBase` / `*TestsBase` API shape; they are not copied verbatim from any repo.* diff --git a/feed.xml b/feed.xml index 7d72d738..22ecfdb3 100644 --- a/feed.xml +++ b/feed.xml @@ -253,7 +253,7 @@ Mon, 27 Jul 2026 10:27:05 GMT A short-lived JWT plus one server-stored refresh token that rotates on every use, with reuse detection that makes a stolen token end its own session. Auth & the edge - ADR 050 + ADR 097 External OAuth login behind your own JWTs @@ -344,7 +344,7 @@ Wed, 15 Jul 2026 12:22:21 GMT The non-negotiables of password storage in .NET, done correctly and tested. Auth & the edge - ADR 032 + ADR 102 JWKS cross-service auth diff --git a/sitemap.xml b/sitemap.xml index 9dee8e19..f905ed36 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -17,7 +17,7 @@ https://ivanball.github.io/writing.html - 2026-09-26 + 2026-10-02 0.9 @@ -1037,62 +1037,62 @@ https://ivanball.github.io/articles/index.html - 2026-09-24 + 2026-10-02 0.8 https://ivanball.github.io/articles/open-sourced-enterprise-dotnet-34-categories.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/modular-monolith-to-microservices.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/34-category-architecture-rubric.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/result-railway-csharp.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/kill-anemic-domain-model.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/specification-pattern.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/cqrs-decorator-pipeline.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/validation-kit.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/transactional-outbox-dotnet.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/database-per-service.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/polyglot-persistence.html - 2026-09-24 + 2026-10-02 0.6 @@ -1102,167 +1102,167 @@ https://ivanball.github.io/articles/optimistic-concurrency-rowversion.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/self-ordering-modules.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/event-schema-versioning.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/jwks-cross-service-auth.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/password-hashing.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/idempotency-attribute.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/self-invalidating-cache.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/problem-details-http-grpc.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/notifications-vertical-slice.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/live-channel-push.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/manual-dto-mapping.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/permission-based-authorization.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/session-cookie-auth-blazor-ssr.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/external-oauth-login.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/jwt-refresh-token-rotation.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/generic-entity-controllers.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/resource-ownership-authorization.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/rate-limiting-brute-force-protection.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/aspire-one-command.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/extract-module-to-grpc-service.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/resilience-recovery-objectives.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/architecture-fitness-functions.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/test-pyramid.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/soft-delete-vs-erasure.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/reusable-blazor-ui-framework.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/i18n-and-theming.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/build-your-first-module.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/write-your-first-fitness-test.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/two-real-apps-case-study.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/device-capability-abstraction.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/managed-file-storage-avatars.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/http-api-versioning.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/feature-flags-cqrs-pipeline.html - 2026-09-24 + 2026-10-02 0.6 @@ -1272,37 +1272,37 @@ https://ivanball.github.io/articles/security-headers-csp-blazor.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/observability-opentelemetry.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/saga-compensation-reconciliation.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/governed-llm-boundary.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/durable-internal-commands.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/identity-completions.html - 2026-09-24 + 2026-10-02 0.6 https://ivanball.github.io/articles/series-index.html - 2026-09-24 + 2026-10-02 0.6 diff --git a/writing.html b/writing.html index 28e493a2..fd1fbc55 100644 --- a/writing.html +++ b/writing.html @@ -289,7 +289,7 @@

        JWKS cross-service auth

        Auth & the edge · No. 17

        Password hashing done right

        The non-negotiables of password storage in .NET, done correctly and tested.

        - + @@ -388,7 +388,7 @@

        External OAuth login behind your own JWTs

        Auth & the edge · No. 27

        One rotating refresh token

        A short-lived JWT plus one server-stored refresh token that rotates on every use, with reuse detection that makes a stolen token end its own session.

        - +